Profil Mahasiswa - Anindya Kristianingputri
R Programming
Statistics
Confidence Interval
Studi Kasus 1
Rentang Kepercayaan untuk Rata-rata, \(\sigma\) Diketahui: Sebuah
Platform Aplikasi Belanja Online ingin memperkirakan
Rata-rata jumlah transaksi harian per pengguna Setelah
Meluncurkan Fitur baru. Berdasarkan dari data historis berskala besar,
populasi Simpangan Baku Sudah dketahui.
\[
\begin{eqnarray*}
\sigma &=& 3.2 \quad \text{(Populasi Simpangan Baku)} \\
n &=& 100 \quad \text{(Ukuran/jumlah sampel)} \\
\bar{x} &=& 12.6 \quad \text{(rata rata sampel)}
\end{eqnarray*}
\]
Tugas
Identifkasi Uji Satatistik yang sesuai dan
jelaskan alasanmu.
Hitung Rentang Kepercayaan Untuk:
- \(90\%\)
- \(95\%\)
- \(99\%\)
Buat Sebuah Visualisasi Perbandingan dari ketiga
Interval Kepercayaan tersebut.
Interpretasikan Hasilnya dalam Konteks Analisis Bisnis.
Penyelesaian Studi Kasus 1
- Identifkasi Uji Statistik
Uji Z digunakan pada penelitian ini karena seluruh parameter
yang diperlukan telah diketahui, yaitu simpangan baku populasi
sebesar 3,2, rata-rata sampel 12,6, dan ukuran sampel yang
besar (n = 100). Dengan jumlah sampel yang besar, distribusi
rata-rata sampel dapat diasumsikan mendekati distribusi normal sesuai
Teorema Limit Tengah, sehingga penggunaan distribusi Z menjadi tepat.
Oleh karena itu, karena semua informasi utama telah tersedia dan n ≥ 30,
uji Z merupakan pilihan yang paling tepat untuk menguji rata-rata
populasi pada kasus ini.
Rumus Distribusi Z dalam Rentang Kepercayaan
\[
\text{CI} = \bar{x} \pm z_{\alpha/2} \frac{\sigma}{\sqrt{n}}
\]
\(\bar{x}\) : Rata-rata
sampel
\(\sigma\) : Standar deviasi
populasi
\(n\) : Ukuran sampel
\(z_{\alpha/2}\) : Nilai kritis
distribusi normal standar (\(1-\alpha\))
\(\pm\) : Menunjukkan batas bawah dan
batas atas interval kepercayaan
- Hitung Rentang Kepercayaan
Rentang Kepercayaan
Data yang digunakan:
Rata-rata sampel (\(\bar{x}\)) = 12.6
Standar deviasi populasi (\(\sigma\)) = 3.2
Ukuran sampel (\(n\)) = 100
Rentang Kepercayaan 90%
1. Menghitung \(z_{\alpha/2}\)
Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
\[ z_{\alpha/2} = z_{0.05} = 1.645 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.645 \times \frac{3.2}{\sqrt{100}} \]
\[ ME = 1.645 \times 0.32 \]
\[ ME = 0.5264 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 12.6 + 0.5264 = 13.1264
Batas Bawah = 12.6 - 0.5264 = 12.0736
Rentang Kepercayaan 90%:
(12.0736, 13.1264)
Rentang Kepercayaan 95%
1. Menghitung \(z_{\alpha/2}\)
Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
\[ z_{\alpha/2} = z_{0.025} = 1.96 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.96 \times \frac{3.2}{\sqrt{100}} \]
\[ ME = 1.96 \times 0.32 \]
\[ ME = 0.6272 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 12.6 + 0.6272 = 13.2272
Batas Bawah = 12.6 - 0.6272 = 11.9728
Rentang Kepercayaan 95%:
(11.9728, 13.2272)
Rentang Kepercayaan 99%
1. Menghitung \(z_{\alpha/2}\)
Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
\[ z_{\alpha/2} = z_{0.005} = 2.576 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 2.576 \times \frac{3.2}{\sqrt{100}} \]
\[ ME = 2.576 \times 0.32 \]
\[ ME = 0.82432 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 12.6 + 0.82432 = 13.42432
Batas Bawah = 12.6 - 0.82432 = 11.77568
Rentang Kepercayaan 99%:
(11.77568, 13.42432)
- Visualisasi Perbandingan dari ketiga Interval
Kepercayaan
library(ggplot2)
ci_data <- data.frame(
CI = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
mean = c(12.6, 12.6, 12.6),
lower = c(12.0736, 11.9728, 11.77568),
upper = c(13.1264, 13.2272, 13.42432)
)
ggplot(ci_data, aes(x = CI, y = mean, color = CI)) +
geom_point(size = 4) +
geom_errorbar(
aes(ymin = lower, ymax = upper),
width = 0.18,
linewidth = 1.3
) +
# Label CI tepat di tengah titik mean
geom_text(
aes(
x = CI,
y = mean,
label = paste0("(", round(lower,2), ", ", round(upper,2), ")")
),
hjust = 0.5,
vjust = 0.5,
size = 3.8,
color = "black",
inherit.aes = FALSE
) +
scale_color_manual(
values = c(
"90%" = "#2CB1A6",
"95%" = "#1E8F8B",
"99%" = "#166E6A"
)
) +
labs(
title = "Visualisasi Rentang Kepercayaan Mean",
subtitle = "Perbandingan Rentang Kepercayaan 90%, 95%, dan 99% terhadap Mean Sampel",
x = "Tingkat Kepercayaan",
y = "Nilai Mean"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
axis.title.x = element_text(face = "bold", hjust = 0.5),
axis.title.y = element_text(face = "bold", hjust = 0.5),
axis.text.x = element_text(hjust = 0.5),
axis.text.y = element_text(hjust = 0.5),
legend.position = "none"
)

- Interpretasikan dalam Konteks Analisis Bisnis.
Estimasi rata-rata sekitar 12,6 transaksi harian per pengguna
menunjukkan indikasi peningkatan aktivitas pengguna setelah fitur
diluncurkan. Rentang kepercayaan 90% dapat dimanfaatkan sebagai dasar
keputusan awal untuk uji operasional dan optimalisasi fitur karena
intervalnya lebih sempit dan cepat memberikan sinyal performa. Rentang
kepercayaan 95% memberikan tingkat keyakinan yang lebih seimbang dan
paling tepat digunakan sebagai dasar keputusan manajerial utama, yaitu
melanjutkan atau mempertahankan fitur dalam jangka menengah. Sementara
itu, rentang kepercayaan 99% memberikan keyakinan tertinggi bahwa
peningkatan transaksi benar-benar terjadi, sehingga lebih aman digunakan
sebagai dasar keputusan strategis bernilai besar, seperti alokasi
anggaran pengembangan lanjutan dan penerapan fitur secara menyeluruh.
Studi Kasus 2
Rentang Kepercayaan rata rata, \(\sigma\) tidak diketahui: Sebuah
Tim Penelitian AX menganalisis Waktu
Penyelesaian Tugas (dalam hitungan menit) untuk aplikasi
seluler. Data ini dikumpulkan dari 12 pengguna:
\[
8.4,\; 7.9,\; 9.1,\; 8.7,\; 8.2,\; 9.0,\;
7.8,\; 8.5,\; 8.9,\; 8.1,\; 8.6,\; 8.3
\]
Tugas:
- Identifkasi Uji Satatistik yang sesuai dan jelaskan
alasanmu.
- Hitung Interval Kepercayaan Untuk:
- \(90\%\)
- \(95\%\)
- \(99\%\)
- Visualisasikan ketiga interval tersebut pada satu plot.
- Jelaskan bagaimana ukuran sampel dan tingkat
kepercayaan memengaruhi lebar interval.
Penyelesaian Studi Kasus 2
- Identifkasi Uji Statistik
Kasus ini dianalisis menggunakan rentang kepercayaan rata-rata
dengan distribusi t karena simpangan baku populasi (σ)
tidak diketahui dan jumlah sampel relatif kecil (n =
12). Data yang dianalisis berupa waktu penyelesaian
tugas dalam satuan menit, sehingga sesuai untuk analisis
rata-rata. Dalam kondisi tersebut, distribusi t lebih tepat digunakan
dibandingkan distribusi normal karena mampu memperhitungkan
ketidakpastian akibat estimasi simpangan baku dari sampel.
- Hitung Rentang Kepercayaan
Rentang Kepercayaan dengan Distribusi t
Data Waktu Penyelesaian Tugas (menit):
8.4, 7.9, 9.1, 8.7, 8.2, 9.0, 7.8, 8.5, 8.9, 8.1, 8.6, 8.3
n = 12 (ukuran sampel)
Rentang Kepercayaan 90%
1. Hitung Mean (Rata-rata)
Data: 8.4, 7.9, 9.1, 8.7, 8.2, 9.0, 7.8, 8.5, 8.9, 8.1, 8.6, 8.3
\[ \bar{x} = \frac{8.4 + 7.9 + 9.1 + 8.7 + .......+ 8.3}{12} \]
\[ \bar{x} = \frac{102.5}{12} = 8.5417 \]
2. Hitung Standar Deviasi Sampel (s)
Rumus: \[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n-1}} \]
\[
\begin{aligned}
(8.4-8.5417)^2 &= 0.0201 \\
(7.9-8.5417)^2 &= 0.4115 \\
(9.1-8.5417)^2 &= 0.3115 \\
(8.7-8.5417)^2 &= 0.0251 \\
(8.2-8.5417)^2 &= 0.1167 \\
(9.0-8.5417)^2 &= 0.2100 \\
(7.8-8.5417)^2 &= 0.5503 \\
(8.5-8.5417)^2 &= 0.0017 \\
(8.9-8.5417)^2 &= 0.1285 \\
(8.1-8.5417)^2 &= 0.1951 \\
(8.6-8.5417)^2 &= 0.0034 \\
(8.3-8.5417)^2 &= 0.0584 \\
\end{aligned}
\]
\[ \sum (x_i - \bar{x})^2 = 0.0201 + 0.4115 + 0.3115 + .......+ 0.0584 \]
\[ \sum (x_i - \bar{x})^2 = 2.0323 \]
\[ s = \sqrt{\frac{2.0323}{12-1}} = \sqrt{\frac{2.0323}{11}} = \sqrt{0.1848} = 0.4299 \]
3. Menentukan \( t_{\alpha/2} \)
Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
Derajat kebebasan: \( df = n - 1 = 12 - 1 = 11 \)
\[ t_{\alpha/2} = t_{0.05, 11} = 1.796 \]
4. Menghitung Margin of Error (ME)
Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 1.796 \times \frac{0.4299}{\sqrt{12}} \]
\[ ME = 1.796 \times \frac{0.4299}{3.4641} \]
\[ ME = 1.796 \times 0.1241 = 0.2229 \]
5. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 8.5417 + 0.2229 = 8.7646
Batas Bawah = 8.5417 - 0.2229 = 8.3188
Rentang Kepercayaan 90%:
(8.3188, 8.7646)
Rentang Kepercayaan 95%
1. Mean dan Standar Deviasi
\[ \bar{x} = 8.5417 \]
\[ s = 0.4299 \]
2. Menentukan \( t_{\alpha/2} \)
Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
Derajat kebebasan: \( df = n - 1 = 12 - 1 = 11 \)
\[ t_{\alpha/2} = t_{0.025, 11} = 2.201 \]
3. Menghitung Margin of Error (ME)
Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 2.201 \times \frac{0.4299}{\sqrt{12}} \]
\[ ME = 2.201 \times 0.1241 = 0.2731 \]
4. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 8.5417 + 0.2731 = 8.8148
Batas Bawah = 8.5417 - 0.2731 = 8.2686
Rentang Kepercayaan 95%:
(8.2686, 8.8148)
Rentang Kepercayaan 99%
1. Mean dan Standar Deviasi
\[ \bar{x} = 8.5417 \]
\[ s = 0.4299 \]
2. Menentukan \( t_{\alpha/2} \)
Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
Derajat kebebasan: \( df = n - 1 = 12 - 1 = 11 \)
\[ t_{\alpha/2} = t_{0.005, 11} = 3.106 \]
3. Menghitung Margin of Error (ME)
Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 3.106 \times \frac{0.4299}{\sqrt{12}} \]
\[ ME = 3.106 \times 0.1241 = 0.3854 \]
4. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 8.5417 + 0.3854 = 8.9271
Batas Bawah = 8.5417 - 0.3854 = 8.1563
Rentang Kepercayaan 99%:
(8.1563, 8.9271)
- Visualisasi Perbandingan dari ketiga Interval
Kepercayaan
library(ggplot2)
ci_data <- data.frame(
CI = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
lower = c(8.3188, 8.2686, 8.1563),
upper = c(8.7646, 8.8148, 8.9271),
mean = 8.5417
)
ggplot(ci_data, aes(y = CI)) +
geom_errorbar(
aes(xmin = lower, xmax = upper, color = CI),
width = 0.25,
linewidth = 1.4,
orientation = "y"
) +
geom_text(
aes(x = lower, label = round(lower, 3)),
hjust = 1.1,
size = 4,
fontface = "bold"
) +
geom_text(
aes(x = upper, label = round(upper, 3)),
hjust = -0.1,
size = 4,
fontface = "bold"
) +
scale_color_manual(
values = c("90%" = "#008080",
"95%" = "#20b2aa",
"99%" = "#48d1cc")
) +
labs(
title = "Perbandingan Rentang Kepercayaan",
x = "Waktu (menit)",
y = NULL
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
axis.text.y = element_text(hjust = 0.5),
legend.position = "none"
)

4.Penjelasan bagaimana ukuran sampel dan tingkat
kepercayaan memengaruhi lebar interval.
Lebar rentang kepercayaan dipengaruhi langsung oleh ukuran sampel dan
tingkat kepercayaan. Semakin besar ukuran sampel, estimasi rata-rata
menjadi lebih stabil sehingga standar error (\(\frac{\sigma}{\sqrt{n}}\)) mengecil dan
interval kepercayaan menjadi lebih sempit, sedangkan sampel kecil
menyebabkan ketidakpastian lebih besar sehingga interval melebar.
Sebaliknya, tingkat kepercayaan yang lebih tinggi (misalnya dari 90% ke
99%) memerlukan nilai kritis Z atau t yang lebih besar, memperbesar
margin of error dan membuat interval semakin lebar untuk menjamin
keyakinan yang lebih kuat. Dengan demikian, interval sempit mencerminkan
estimasi presisi dari sampel besar dan kepercayaan moderat seperti 95%,
sementara interval lebar menunjukkan kehati-hatian lebih besar dalam
pengambilan keputusan.
Studi Kasus 3
Rentang Kepercayaan untuk Sebuah Proporsi, Pengujian
A/B: Tim Data Sience menjalankan pengujian A/B
pada desain tombol Call-To-Action (CTA) baru. Eksperimen
tersebut menghasilkan:
\[
\begin{eqnarray*}
n &=& 400 \quad \text{(Keseluruhan Jumlah Pengguna)} \\
x &=& 156 \quad \text{(Pengguna yang memencet CTA)}
\end{eqnarray*}
\]
Tugas:
- Hitung sample proporsi \(\hat{p}\).
- Hitung Rentang Kepercayaan Untuk Proporsi pada :
- \(90\%\)
- \(95\%\)
- \(99\%\)
- Visualisasikan dan Bandingkan ketiga interval tersebut.
- Jelaskan bagaimana tingkat kepercayaan memengaruhi pengambilan
keputusan dalam eksperimen produk..
Penyelesaian Studi Kasus 3
- Hitung sample proporsi \(\hat{p}\) dan Hitung Rentang Kepercayaan
Untuk Proporsi
Rentang Kepercayaan Proporsi
Data Pengujian A/B:
n = 400 (jumlah pengguna)
x = 156 (pengguna yang memencet CTA)
Hitung Sample Proporsi \(\hat{p}\)
Perhitungan Sample Proporsi
Rumus: \[ \hat{p} = \frac{x}{n} \]
\[ \hat{p} = \frac{156}{400} \]
\[ \hat{p} = 0.39 \]
Hasil Perhitungan:
\(\hat{p} = 0.39\)
Rentang Kepercayaan 90%
1. Menentukan \( z_{\alpha/2} \)
Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
\[ z_{\alpha/2} = z_{0.05} = 1.645 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.39 \times (1-0.39)}{400}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.39 \times 0.61}{400}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.2379}{400}} \]
\[ ME = 1.645 \times \sqrt{0.00059475} \]
\[ ME = 1.645 \times 0.02439 \]
\[ ME = 0.04012 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \hat{p} \pm ME \]
Batas Atas = 0.39 + 0.04012 = 0.43012
Batas Bawah = 0.39 - 0.04012 = 0.34988
Rentang Kepercayaan 90% untuk proporsi:
(0.3499, 0.4301)
atau (34.99%, 43.01%)
Rentang Kepercayaan 95%
1. Menentukan \( z_{\alpha/2} \)
Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
\[ z_{\alpha/2} = z_{0.025} = 1.96 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.96 \times \sqrt{\frac{0.39 \times (1-0.39)}{400}} \]
\[ ME = 1.96 \times \sqrt{\frac{0.39 \times 0.61}{400}} \]
\[ ME = 1.96 \times 0.02439 \]
\[ ME = 0.04780 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \hat{p} \pm ME \]
Batas Atas = 0.39 + 0.04780 = 0.43780
Batas Bawah = 0.39 - 0.04780 = 0.34220
Rentang Kepercayaan 95% untuk proporsi:
(0.3422, 0.4378)
atau (34.22%, 43.78%)
Rentang Kepercayaan 99%
1. Menentukan \( z_{\alpha/2} \)
Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
\[ z_{\alpha/2} = z_{0.005} = 2.576 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 2.576 \times \sqrt{\frac{0.39 \times (1-0.39)}{400}} \]
\[ ME = 2.576 \times \sqrt{\frac{0.39 \times 0.61}{400}} \]
\[ ME = 2.576 \times 0.02439 \]
\[ ME = 0.06283 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \hat{p} \pm ME \]
Batas Atas = 0.39 + 0.06283 = 0.45283
Batas Bawah = 0.39 - 0.06283 = 0.32717
Rentang Kepercayaan 99% untuk proporsi:
(0.3272, 0.4528)
atau (32.72%, 45.28%)
- Visualisasi dan Perbandingan ketiga interval
tersebut.
library(ggplot2)
# Data CI proporsi
ci_proporsi <- data.frame(
CI = factor(c("90%", "95%", "99%"), levels = c("90%", "95%", "99%")),
lower = c(0.3499, 0.3422, 0.3272),
upper = c(0.4301, 0.4378, 0.4528)
)
ggplot(ci_proporsi, aes(y = CI)) +
geom_errorbar(
aes(xmin = lower, xmax = upper, color = CI),
width = 0.25,
linewidth = 1.4,
orientation = "y"
) +
geom_text(
aes(x = lower, label = scales::percent(lower, accuracy = 0.01)),
hjust = 1.1,
size = 4,
fontface = "bold"
) +
geom_text(
aes(x = upper, label = scales::percent(upper, accuracy = 0.01)),
hjust = -0.1,
size = 4,
fontface = "bold"
) +
scale_color_manual(
values = c("90%" = "#008080",
"95%" = "#20b2aa",
"99%" = "#48d1cc")
) +
scale_x_continuous(
labels = scales::percent_format(accuracy = 1)
) +
labs(
title = "Perbandingan Rentang Kepercayaan",
subtitle = "n = 400, x = 156, p̂ = 0.39",
x = "Proporsi Pengguna",
y = NULL
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
axis.text.y = element_text(hjust = 0.5),
legend.position = "none"
)

- Penjelasan bagaimana tingkat kepercayaan memengaruhi
pengambilan keputusan dalam eksperimen produk.
Tingkat kepercayaan memengaruhi pengambilan keputusan dalam eksperimen
produk karena menentukan seberapa yakin tim terhadap hasil yang
diperoleh. Tingkat kepercayaan yang lebih tinggi (misalnya 99%)
memberikan keyakinan yang lebih kuat bahwa hasil eksperimen mencerminkan
kondisi sebenarnya, namun konsekuensinya adalah rentang kepercayaan
menjadi lebih lebar, sehingga keputusan yang diambil cenderung lebih
konservatif. Sebaliknya, tingkat kepercayaan yang lebih rendah (misalnya
90%) menghasilkan rentang yang lebih sempit dan keputusan bisa diambil
lebih cepat, tetapi dengan risiko kesalahan yang lebih besar. Oleh
karena itu, pemilihan tingkat kepercayaan harus disesuaikan dengan
konteks bisnis: eksperimen berisiko tinggi biasanya memerlukan tingkat
kepercayaan yang lebih tinggi
Studi Kasus 4
Perbandingan Presisi (Uji-Z vs Uji-t): Dua tim data
mengukur latensi API (dalam milidetik) di bawah kondisi
yang berbeda.
\[\begin{eqnarray*}
\text{Tim A:} \\
n &=& 36 \quad \text{(Ukuran/jumlah sampel)} \\
\bar{x} &=& 210 \quad \text{(Rata Rata Sampel)} \\
\sigma &=& 24 \quad \text{(Diketahui Simpangan Baku)} \\[6pt]
\text{Tim B:} \\
n &=& 36 \quad \text{(Ukuran/jumlah sampel)} \\
\bar{x} &=& 210 \quad \text{(Rata Rata Sampel)} \\
s &=& 24 \quad \text{(Simpangan Baku Sampel)}
\end{eqnarray*}\]
Tugas
- Identifikasi uji statistik yang digunakan oleh
setiap tim.
- Hitung Rentang Kepercayaan Untuk 90%, 95%, and
99%.
- Buat visualisasi yang membandingkan seluruh interval.
- Jelaskan mengapa lebar interval berbeda, meskipun
datanya mirip mendekati sama/ serupa.
Penyelesaian Studi Kasus 4
- uji statistik yang digunakan oleh setiap tim
Tim A menggunakan uji Z (Z-test), karena simpangan baku populasi
(σ) diketahui. Dalam kondisi ini, ketidakpastian hanya berasal dari
variasi sampel, sehingga distribusi normal sudah memadai untuk melakukan
inferensi terhadap rata-rata populasi. Dengan ukuran sampel yang relatif
cukup (n = 36), pendekatan ini memberikan estimasi yang stabil dan
efisien.
Tim B menggunakan uji t, karena simpangan baku populasi tidak
diketahui dan digantikan oleh simpangan baku sampel (s). Penggunaan
distribusi t diperlukan untuk memperhitungkan tambahan ketidakpastian
akibat estimasi simpangan baku dari data sampel, sehingga hasil
inferensi menjadi lebih valid dan sesuai dengan kondisi data yang
tersedia.
- Hitung Rentang Kepercayaan
Rentang Kepercayaan - Distribusi z dan t
Data Tim:
Tim A:
n = 36 (ukuran sampel)
\(\bar{x}\) = 210 (rata-rata sampel)
\(\sigma\) = 24 (diketahui simpangan baku populasi)
Tim B:
n = 36 (ukuran sampel)
\(\bar{x}\) = 210 (rata-rata sampel)
s = 24 (simpangan baku sampel)
Tim A: Distribusi z (σ diketahui)
Rentang Kepercayaan 90%
1. Menentukan \( z_{\alpha/2} \)
Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
\[ z_{\alpha/2} = z_{0.05} = 1.645 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.645 \times \frac{24}{\sqrt{36}} \]
\[ ME = 1.645 \times \frac{24}{6} \]
\[ ME = 1.645 \times 4 \]
\[ ME = 6.58 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 6.58 = 216.58
Batas Bawah = 210 - 6.58 = 203.42
Rentang Kepercayaan 90%:
(203.42, 216.58)
Rentang Kepercayaan 95%
1. Menentukan \( z_{\alpha/2} \)
Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
\[ z_{\alpha/2} = z_{0.025} = 1.96 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 1.96 \times \frac{24}{\sqrt{36}} \]
\[ ME = 1.96 \times 4 \]
\[ ME = 7.84 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 7.84 = 217.84
Batas Bawah = 210 - 7.84 = 202.16
Rentang Kepercayaan 95%:
(202.16, 217.84)
Rentang Kepercayaan 99%
1. Menentukan \( z_{\alpha/2} \)
Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
\[ z_{\alpha/2} = z_{0.005} = 2.576 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha/2} \times \frac{\sigma}{\sqrt{n}} \]
\[ ME = 2.576 \times \frac{24}{\sqrt{36}} \]
\[ ME = 2.576 \times 4 \]
\[ ME = 10.304 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 10.304 = 220.304
Batas Bawah = 210 - 10.304 = 199.696
Rentang Kepercayaan 99%:
(199.70, 220.30)
Tim B: Distribusi t (σ tidak diketahui)
Rentang Kepercayaan 90%
1. Menentukan \( t_{\alpha/2} \)
Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
\[ \alpha/2 = 0.10/2 = 0.05 \]
Derajat kebebasan: \( df = n - 1 = 36 - 1 = 35 \)
\[ t_{\alpha/2} = t_{0.05, 35} = 1.690 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 1.690 \times \frac{24}{\sqrt{36}} \]
\[ ME = 1.690 \times \frac{24}{6} \]
\[ ME = 1.690 \times 4 \]
\[ ME = 6.76 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 6.76 = 216.76
Batas Bawah = 210 - 6.76 = 203.24
Rentang Kepercayaan 90%:
(203.24, 216.76)
Rentang Kepercayaan 95%
1. Menentukan \( t_{\alpha/2} \)
Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ \alpha/2 = 0.05/2 = 0.025 \]
Derajat kebebasan: \( df = n - 1 = 36 - 1 = 35 \)
\[ t_{\alpha/2} = t_{0.025, 35} = 2.030 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 2.030 \times \frac{24}{\sqrt{36}} \]
\[ ME = 2.030 \times 4 \]
\[ ME = 8.12 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 8.12 = 218.12
Batas Bawah = 210 - 8.12 = 201.88
Rentang Kepercayaan 95%:
(201.88, 218.12)
Rentang Kepercayaan 99%
1. Menentukan \( t_{\alpha/2} \)
Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ \alpha/2 = 0.01/2 = 0.005 \]
Derajat kebebasan: \( df = n - 1 = 36 - 1 = 35 \)
\[ t_{\alpha/2} = t_{0.005, 35} = 2.724 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = t_{\alpha/2} \times \frac{s}{\sqrt{n}} \]
\[ ME = 2.724 \times \frac{24}{\sqrt{36}} \]
\[ ME = 2.724 \times 4 \]
\[ ME = 10.896 \]
3. Menghitung Rentang Kepercayaan
Rumus: \[ \bar{x} \pm ME \]
Batas Atas = 210 + 10.896 = 220.896
Batas Bawah = 210 - 10.896 = 199.104
Rentang Kepercayaan 99%:
(199.10, 220.90)
- Visualisasi yang membandingkan seluruh
interval
library(ggplot2)
ci_data <- data.frame(
CI = factor(rep(c("90%", "95%", "99%"), each = 2),
levels = c("90%", "95%", "99%")),
Tim = factor(rep(c("Tim A (z)", "Tim B (t)"), times = 3),
levels = c("Tim A (z)", "Tim B (t)")),
lower = c(
203.42, 203.24,
202.16, 201.88,
199.70, 199.10
),
upper = c(
216.58, 216.76,
217.84, 218.12,
220.30, 220.90
)
)
ci_data$mid <- (ci_data$lower + ci_data$upper)/2
ggplot(ci_data, aes(y = Tim, color = Tim)) +
geom_errorbar(
aes(xmin = lower, xmax = upper),
orientation = "y",
width = 0.25,
linewidth = 1.4
) +
geom_point(aes(x = mid), size = 3.5) +
geom_label(
aes(x = mid, label = paste0(round(lower,2), " – ", round(upper,2))),
size = 5.2,
fontface = "bold",
fill = "white",
alpha = 0.85,
linewidth = 0,
show.legend = FALSE
) +
scale_color_manual(values = c("Tim A (z)" = "#e75480", "Tim B (t)" = "#4d4d4d")) +
facet_wrap(~ CI, ncol = 1) +
labs(
title = "Perbandingan Rentang Kepercayaan Tim A dan Tim B",
subtitle = "Interval kepercayaan 90%, 95%, dan 99%",
x = "Nilai Estimasi",
y = NULL
) +
theme_minimal(base_size = 14) +
theme(
legend.position = "none",
plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
plot.subtitle = element_text(hjust = 0.5, size = 13),
strip.text = element_text(face = "bold", size = 14)
)

- Penjelasan mengapa lebar interval berbeda, meskipun datanya
mirip mendekati sama/ serupa
Meskipun data dari dua tim terlihat mirip dan rata-ratanya hampir sama,
lebar interval kepercayaan bisa berbeda. Hal ini karena beberapa faktor.
Pertama, tingkat kepercayaan yang dipilih, misalnya 90%, 95%, atau 99%
menentukan seberapa yakin kita bahwa interval tersebut mencakup
parameter populasi. Semakin tinggi tingkat kepercayaan, semakin lebar
intervalnya. Kedua, metode perhitungan juga berpengaruh; Tim A
menggunakan distribusi z, sedangkan Tim B menggunakan distribusi t.
Distribusi t memiliki ekor lebih tebal sehingga CI cenderung lebih
panjang, terutama untuk sampel kecil. Ketiga, variabilitas data dan
ukuran sampel memengaruhi standar error data yang lebih tersebar atau
sampel lebih kecil menghasilkan interval yang lebih lebar. Jadi,
walaupun datanya hampir sama, kombinasi tingkat kepercayaan, jenis
distribusi, dan karakteristik sampel menyebabkan lebar interval terlihat
berbeda.
Studi Kasus 5
Interval Kepercayaan Satu Sisi: Perusahaan
Software as a Service (SaaS) ingin memastikan bahwa
setidaknya 70% pengguna aktif mingguan menggunakan
fitur premium.
Untuk sebuah percobbaan:
\[
\begin{eqnarray*}
n &=& 250 \quad \text{(Keseluruhan pengguna)} \\
x &=& 185 \quad \text{(Pengguna "Premium" yang Aktif)}
\end{eqnarray*}
\]
Manajemen hanya tertarik pada batas bawah dari
perkiraan tersebut.
Tugas:
- Identifikasi jenis Rentang Kepercayaan Diri dan uji
yang sesuai.
- Hitung Interval Kepercayaan satu sisi bawah pada :
- \(90\%\)
- \(95\%\)
- \(99\%\)
- Visualisasikan batas bawah untuk semua tingkat kepercayaan.
- Tentukan apakah target 70% secara statistik
terpenuhi.
Penyelesaian Studi Kasus 5
- uji statistik yang digunakan oleh Kasus ini
Kasus ini memerlukan Interval Kepercayaan Satu Sisi (One-Sided
Confidence Interval), khususnya batas bawah (Lower Bound), karena
tujuannya adalah memastikan nilai minimum “setidaknya 70%” dari
populasi, bukan mencari rentang dua sisi. Dengan data berupa proporsi
kategorikal (pengguna premium vs. non-premium) dan ukuran sampel yang
besar (n=250), uji statistik yang tepat untuk digunakan adalah Uji-Z
untuk Satu Proporsi (One-Sample Z-Test for a Proportion), di mana
proporsi sampel dihitung sebesar 185/250 = 0.74 atau 74%.
2.Hitung Interval Kepercayaan satu sisi bawah
Interval Kepercayaan Satu Sisi Bawah
Data SaaS - Pengguna Fitur Premium:
n = 250 (total pengguna)
x = 185 (pengguna premium aktif)
Hitung Sample Proporsi \(\hat{p}\)
Rumus: \[ \hat{p} = \frac{x}{n} \]
\[ \hat{p} = \frac{185}{250} \]
\[ \hat{p} = 0.74 \]
Proporsi pengguna premium aktif: 74%
Interval Kepercayaan Satu Sisi Bawah 90%
1. Menentukan \( z_{\alpha} \)
Tingkat keyakinan = 90% = 0.90
\[ \alpha = 1 - 0.90 = 0.10 \]
(Untuk satu sisi bawah, gunakan seluruh α di satu sisi)
\[ z_{\alpha} = z_{0.10} = 1.282 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.282 \times \sqrt{\frac{0.74 \times (1-0.74)}{250}} \]
\[ ME = 1.282 \times \sqrt{\frac{0.74 \times 0.26}{250}} \]
\[ ME = 1.282 \times \sqrt{\frac{0.1924}{250}} \]
\[ ME = 1.282 \times \sqrt{0.0007696} \]
\[ ME = 1.282 \times 0.02774 \]
\[ ME = 0.03557 \]
3. Menghitung Batas Bawah Satu Sisi
Rumus: \[ \text{Batas Bawah} = \hat{p} - ME \]
Batas Bawah = 0.74 - 0.03557 = 0.70443
Interval Kepercayaan Satu Sisi Bawah 90%:
Proporsi ≥ 0.7044
atau ≥ 70.44%
Interpretasi: Dengan keyakinan 90%, kita dapat mengatakan bahwa minimal 70.44% pengguna aktif menggunakan fitur premium.
Interval Kepercayaan Satu Sisi Bawah 95%
1. Menentukan \( z_{\alpha} \)
Tingkat keyakinan = 95% = 0.95
\[ \alpha = 1 - 0.95 = 0.05 \]
\[ z_{\alpha} = z_{0.05} = 1.645 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 1.645 \times \sqrt{\frac{0.74 \times 0.26}{250}} \]
\[ ME = 1.645 \times 0.02774 \]
\[ ME = 0.04564 \]
3. Menghitung Batas Bawah Satu Sisi
Rumus: \[ \text{Batas Bawah} = \hat{p} - ME \]
Batas Bawah = 0.74 - 0.04564 = 0.69436
Interval Kepercayaan Satu Sisi Bawah 95%:
Proporsi ≥ 0.6944
atau ≥ 69.44%
Interpretasi: Dengan keyakinan 95%, kita dapat mengatakan bahwa minimal 69.44% pengguna aktif menggunakan fitur premium.
Interval Kepercayaan Satu Sisi Bawah 99%
1. Menentukan \( z_{\alpha} \)
Tingkat keyakinan = 99% = 0.99
\[ \alpha = 1 - 0.99 = 0.01 \]
\[ z_{\alpha} = z_{0.01} = 2.326 \]
2. Menghitung Margin of Error (ME)
Rumus: \[ ME = z_{\alpha} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \]
\[ ME = 2.326 \times \sqrt{\frac{0.74 \times 0.26}{250}} \]
\[ ME = 2.326 \times 0.02774 \]
\[ ME = 0.06452 \]
3. Menghitung Batas Bawah Satu Sisi
Rumus: \[ \text{Batas Bawah} = \hat{p} - ME \]
Batas Bawah = 0.74 - 0.06452 = 0.67548
Interval Kepercayaan Satu Sisi Bawah 99%:
Proporsi ≥ 0.6755
atau ≥ 67.55%
Interpretasi: Dengan keyakinan 99%, kita dapat mengatakan bahwa minimal 67.55% pengguna aktif menggunakan fitur premium.
- Visualisasikan batas bawah untuk semua tingkat
kepercayaan
library(ggplot2)
# Data
confidence <- c(0.90, 0.95, 0.99)
z_alpha <- c(1.282, 1.645, 2.326)
p_hat <- 185 / 250
n <- 250
# Hitung Margin of Error dan Batas Bawah
ME <- z_alpha * sqrt(p_hat * (1 - p_hat) / n)
lower_bound <- p_hat - ME
df <- data.frame(
Confidence = confidence * 100,
LowerBound = lower_bound
)
# Buat ggplot dengan posisi label disesuaikan
ggplot(df, aes(x = Confidence, y = LowerBound)) +
geom_point(size = 4, color = "#008080") +
geom_line(group = 1, color = "#20b2aa", linetype = "dashed") +
geom_hline(yintercept = 0.7, color = "red", linetype = "dotted", size = 1) +
geom_text(aes(label = sprintf("%.3f", LowerBound)),
vjust = -0.8,
color = "#006666",
size = 5) +
scale_x_continuous(breaks = df$Confidence) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0.65, 0.75)) +
labs(
title = "Batas Bawah Interval",
x = "Tingkat Kepercayaan (%)",
y = "Batas Bawah Proporsi",
caption = "Garis merah = target minimal 70%"
) +
theme_minimal(base_size = 14)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

- Tentukan apakah target 70% secara statistik
terpenuhi.
Berdasarkan data dari 250 pengguna dengan 185 pengguna aktif fitur
premium, diperoleh proporsi sampel sebesar 74%. Hasil ini menunjukkan
angka yang melebihi target perusahaan sebesar 70%. Namun, setelah
dilakukan perhitungan interval kepercayaan satu sisi bawah, ditemukan
bahwa pencapaian target bergantung pada tingkat keyakinan statistik yang
diterapkan. Pada tingkat keyakinan 90%, batas bawah interval sebesar
70,44% mengindikasikan target terpenuhi, sedangkan pada tingkat
keyakinan 95% dan 99% dengan batas bawah masing-masing 69,44% dan
67,55%, target dinyatakan tidak tercapai.Target 70% pengguna fitur
premium hanya terpenuhi pada tingkat keyakinan 90%, namun tidak pada
tingkat keyakinan yang lebih tinggi (95% dan 99%). Perlu dipertimbangkan
bahwa meskipun data sampel menunjukkan angka positif, ketidakpastian
statistik pada tingkat keyakinan tinggi menyebabkan target belum dapat
dikatakan tercapai secara meyakinkan.
Reference
[1] T. Tony Cai, “One-sided confidence intervals in discrete
distributions,”Journal of Statistical Planning and Inference, vol. 131,
no. 1, pp. 63–88, 2005.
[2] A.-M. Simundic, “Confidence interval,” Biochemia Medica, vol. 18,
no. 2, pp. 154–161, 2008.
[3] O. Barndorff-Nielsen, J. Kent, and M. Sørensen, “Normal
variance-mean mixtures and z distributions,” International Statistical
Review / Revue Internationale de Statistique, pp. 145–159, 1982.
LS0tDQp0aXRsZTogIkNvbmZpZGVuY2UgSW50ZXJ2YWwiICAgICAgICAgICAgIyBNYWluIHRpdGxlIG9mIHRoZSBkb2N1bWVudA0KYXV0aG9yOiAiQW5pbmR5YSBLcmlzdGlhbmluZ3B1dHJpICg1MjI1MDAyNSkiICAgICAgIyBSZXBsYWNlIHdpdGggeW91ciBmdWxsIG5hbWUNCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiICMgQXV0byBkaXNwbGF5cyB0aGUgY3VycmVudCBkYXRlDQpvdXRwdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICMgT3V0cHV0IHNlY3Rpb24gZGVmaW5lcyB0aGUgZm9ybWF0IGFuZCBsYXlvdXQgDQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlICAgICAgICAjIEVtYmVkcyBhbGwgcmVzb3VyY2VzIChDU1MsIEpTLCBpbWFnZXMpIA0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgICAgICAgICAjIERpc3BsYXlzIGltYWdlIHRodW1ibmFpbHMgaW4gdGhlIGRvYw0KICAgIGxpZ2h0Ym94OiB0cnVlICAgICAgICAgICAgICAjIEVuYWJsZXMgY2xpY2sgdG8gZW5sYXJnZSBpbWFnZXMNCiAgICBnYWxsZXJ5OiB0cnVlICAgICAgICAgICAgICAgIyBHcm91cHMgaW1hZ2VzIGludG8gYW4gaW50ZXJhY3RpdmUgZ2FsbGVyeQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZSAgICAgICAjIEF1dG9tYXRpY2FsbHkgbnVtYmVycyBhbGwgc2VjdGlvbnMNCiAgICBsaWJfZGlyOiBsaWJzICAgICAgICAgICAgICAgIyBEaXJlY3Rvcnkgd2hlcmUgSmF2YVNjcmlwdC9DU1MgbGlicmFyaWVzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCIgICAgICAgICAgICMgRGlzcGxheXMgZGF0YSBmcmFtZXMgYXMgaW50ZXJhY3RpdmUgcGFnZWQgDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyIgICAgICAgICMgQWxsb3dzIGZvbGRpbmcvdW5mb2xkaW5nIFIgY29kZSBibG9ja3MgDQogICAgY29kZV9kb3dubG9hZDogeWVzICAgICAgICAgICMgQWRkcyBhIGJ1dHRvbiB0byBkb3dubG9hZCBhbGwgUiBjb2RlDQotLS0NCg0KDQpgYGB7PWh0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImlkIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPlByb2ZpbCBNYWhhc2lzd2EgLSBBbmluZHlhIEtyaXN0aWFuaW5ncHV0cmk8L3RpdGxlPg0KICAgIDxzdHlsZT4NCiAgICAgICAgKiB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICAgICAgfQ0KDQogICAgICAgIGJvZHkgew0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIHN5c3RlbS11aSwgc2Fucy1zZXJpZjsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGY4Zjg7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOw0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbnRhaW5lciB7DQogICAgICAgICAgICBtYXgtd2lkdGg6IDkwMHB4Ow0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAxMDUsIDEyMCwgMC4xKTsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQoNCiAgICAgICAgLmhlYWRlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogMzBweDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgfQ0KDQogICAgICAgIC5wcm9maWxlLWNvbnRlbnQgew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgZ2FwOiAyMHB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLnBob3RvLWNvbnRhaW5lciB7DQogICAgICAgICAgICB3aWR0aDogMTUwcHg7DQogICAgICAgICAgICBoZWlnaHQ6IDE1MHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHdoaXRlOw0KICAgICAgICB9DQoNCiAgICAgICAgLnByb2ZpbGUtcGhvdG8gew0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsNCiAgICAgICAgfQ0KDQogICAgICAgIC5uYW1lIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjhweDsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAubmltIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIH0NCg0KICAgICAgICAuc3R1ZHktaW5mbyB7DQogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAuZG9zZW4taW5mbyB7DQogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5za2lsbHMtc2VjdGlvbiB7DQogICAgICAgICAgICBwYWRkaW5nOiAzMHB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZmRmZDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgfQ0KDQogICAgICAgIC5za2lsbHMtbGlzdCB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgICAgICBnYXA6IDE1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAuc2tpbGwtaXRlbSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZmNWY1Ow0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDE1cHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4Ow0KICAgICAgICAgICAgY29sb3I6ICMwMDY2NjY7DQogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzllNmU2Ow0KICAgICAgICB9DQoNCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICAuaGVhZGVyIHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyNXB4IDIwcHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5waG90by1jb250YWluZXIgew0KICAgICAgICAgICAgICAgIHdpZHRoOiAxMzBweDsNCiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEzMHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAubmFtZSB7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7DQogICAgICAgICAgICBib2R5IHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuaGVhZGVyIHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDE1cHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5uYW1lIHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5uaW0gew0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KICAgICAgICA8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1jb250ZW50Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaG90by1jb250YWluZXIiPg0KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0icHJvZmlsZS5wbmciIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD0iRm90byBQcm9maWwgQW5pbmR5YSBLcmlzdGlhbmluZ3B1dHJpIiANCiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHJvZmlsZS1waG90byI+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJuYW1lIj5BbmluZHlhIEtyaXN0aWFuaW5ncHV0cmk8L2gxPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuaW0iPk5JTTogNTIyNTAwMjU8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3R1ZHktaW5mbyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8cD5TdHVkZW50IE1ham9yIERhdGEgU2NpZW5jZTwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkluc3RpdHV0IFRla25vbG9naSBTYWlucyBCYW5kdW5nPC9wPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9zZW4taW5mbyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8cD5Eb3NlbjogQmFrdGkgU2lyZWdhciwgTS5TYy4sIENEUzwvcD4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9oZWFkZXI+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0ic2tpbGxzLXNlY3Rpb24iPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2tpbGxzLWxpc3QiPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJza2lsbC1pdGVtIj5SIFByb2dyYW1taW5nPC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJza2lsbC1pdGVtIj5TdGF0aXN0aWNzPC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJza2lsbC1pdGVtIj5Db25maWRlbmNlIEludGVydmFsPC9zcGFuPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCi0tLQ0KDQojIyBTdHVkaSBLYXN1cyAxIA0KDQoqKlJlbnRhbmcgS2VwZXJjYXlhYW4gdW50dWsgUmF0YS1yYXRhLCAkXHNpZ21hJCBEaWtldGFodWk6KiogU2VidWFoICoqUGxhdGZvcm0gQXBsaWthc2kgQmVsYW5qYSBPbmxpbmUqKiBpbmdpbiBtZW1wZXJraXJha2FuICoqUmF0YS1yYXRhIGp1bWxhaCB0cmFuc2Frc2kgaGFyaWFuIHBlciBwZW5nZ3VuYSoqIFNldGVsYWggTWVsdW5jdXJrYW4gRml0dXIgYmFydS4gQmVyZGFzYXJrYW4gZGFyaSBkYXRhIGhpc3RvcmlzIGJlcnNrYWxhIGJlc2FyLCAqKnBvcHVsYXNpIFNpbXBhbmdhbiBCYWt1KiogU3VkYWggZGtldGFodWkuDQoNCiQkDQpcYmVnaW57ZXFuYXJyYXkqfQ0KXHNpZ21hICY9JiAzLjIgXHF1YWQgXHRleHR7KFBvcHVsYXNpIFNpbXBhbmdhbiBCYWt1KX0gXFwNCm4gJj0mIDEwMCBccXVhZCBcdGV4dHsoVWt1cmFuL2p1bWxhaCBzYW1wZWwpfSBcXA0KXGJhcnt4fSAmPSYgMTIuNiBccXVhZCBcdGV4dHsocmF0YSByYXRhIHNhbXBlbCl9DQpcZW5ke2VxbmFycmF5Kn0NCiQkDQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZTZmN2Y1OyBib3JkZXItbGVmdDo2cHggc29saWQgIzAwODA4MDsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQoqKlR1Z2FzKioNCg0KMS4gSWRlbnRpZmthc2kgKipVamkgU2F0YXRpc3RpayoqIHlhbmcgc2VzdWFpIGRhbiBqZWxhc2thbiBhbGFzYW5tdS4NCg0KMi4gSGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW4gVW50dWs6DQogICAtICQ5MFwlJA0KICAgLSAkOTVcJSQNCiAgIC0gJDk5XCUkDQogICANCjMuIEJ1YXQgU2VidWFoICoqVmlzdWFsaXNhc2kgUGVyYmFuZGluZ2FuKiogZGFyaSBrZXRpZ2EgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdGVyc2VidXQuDQoNCjQuIEludGVycHJldGFzaWthbiBIYXNpbG55YSBkYWxhbSBLb250ZWtzIEFuYWxpc2lzIEJpc25pcy4NCg0KOjo6DQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZjFlZmZhOyBib3JkZXItbGVmdDo2cHggc29saWQgIzNmNTFiNTsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQo8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsgdGV4dC1qdXN0aWZ5OiBpbnRlci13b3JkOyI+IA0KKioqUGVueWVsZXNhaWFuIFN0dWRpIEthc3VzIDEqKiogDQo8L3A+DQoNCjEuICoqSWRlbnRpZmthc2kgVWppIFN0YXRpc3RpayoqDQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpVamkgWiBkaWd1bmFrYW4gcGFkYSBwZW5lbGl0aWFuIGluaSBrYXJlbmEgKipzZWx1cnVoIHBhcmFtZXRlciB5YW5nIGRpcGVybHVrYW4gdGVsYWggZGlrZXRhaHVpKiosIHlhaXR1IHNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpIHNlYmVzYXIgMywyLCByYXRhLXJhdGEgc2FtcGVsIDEyLDYsIGRhbiAqKnVrdXJhbiBzYW1wZWwgeWFuZyBiZXNhcioqIChuID0gMTAwKS4gRGVuZ2FuIGp1bWxhaCBzYW1wZWwgeWFuZyBiZXNhciwgZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIGRhcGF0IGRpYXN1bXNpa2FuIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbCBzZXN1YWkgVGVvcmVtYSBMaW1pdCBUZW5nYWgsIHNlaGluZ2dhIHBlbmdndW5hYW4gZGlzdHJpYnVzaSBaIG1lbmphZGkgdGVwYXQuIE9sZWgga2FyZW5hIGl0dSwga2FyZW5hIHNlbXVhIGluZm9ybWFzaSB1dGFtYSB0ZWxhaCB0ZXJzZWRpYSBkYW4gbiDiiaUgMzAsIHVqaSBaIG1lcnVwYWthbiBwaWxpaGFuIHlhbmcgcGFsaW5nIHRlcGF0IHVudHVrIG1lbmd1amkgcmF0YS1yYXRhIHBvcHVsYXNpIHBhZGEga2FzdXMgaW5pLg0KPC9wPg0KDQo6Ojoge3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmMWVmZmE7IGJvcmRlci1sZWZ0OjZweCBzb2xpZCAjMUU5MEZGOyBwYWRkaW5nOjEycHg7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW46MjBweCAwOyJ9DQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQoqKlJ1bXVzIERpc3RyaWJ1c2kgWiBkYWxhbSBSZW50YW5nIEtlcGVyY2F5YWFuKioNCjwvcD4NCg0KDQokJA0KXHRleHR7Q0l9ID0gXGJhcnt4fSBccG0gel97XGFscGhhLzJ9IFxmcmFje1xzaWdtYX17XHNxcnR7bn19DQokJA0KDQpcdGV4dGJme0tldGVyYW5nYW46fQ0KICRcYmFye3h9JCA6IFJhdGEtcmF0YSBzYW1wZWwgIA0KICRcc2lnbWEkIDogU3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICANCiAkbiQgOiBVa3VyYW4gc2FtcGVsICANCiAkel97XGFscGhhLzJ9JCA6IE5pbGFpIGtyaXRpcyBkaXN0cmlidXNpIG5vcm1hbCBzdGFuZGFyICgkMS1cYWxwaGEkKSAgDQogJFxwbSQgOiBNZW51bmp1a2thbiBiYXRhcyBiYXdhaCBkYW4gYmF0YXMgYXRhcyBpbnRlcnZhbCBrZXBlcmNheWFhbg0KOjo6DQoNCg0KMi4gKipIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbioqDQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iaWQiPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+UmVudGFuZyBLZXBlcmNheWFhbjwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZjZmM7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmRhdGEtaW5mbyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmOGY4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIGdhcDogNDBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuc3RlcCB7DQogICAgICAgICAgICBtYXJnaW46IDE1cHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmZvcm11bGEgew0KICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jYWxjdWxhdGlvbiB7DQogICAgICAgICAgICBtYXJnaW46IDhweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogNXB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC1yZXN1bHQgew0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZjVmNTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmludGVydmFsLXZhbHVlIHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS40cmVtOw0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsNCiAgICAgICAgICAgIGNvbG9yOiAjMDA2NjY2Ow0KICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5wbGFpbi10ZXh0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsNCiAgICAgICAgICAgIGJvZHkgew0KICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICAgICAgZ2FwOiAzMHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9ImRhdGEtaW5mbyI+DQogICAgICAgIDxzdHJvbmc+RGF0YSB5YW5nIGRpZ3VuYWthbjo8L3N0cm9uZz4NCiAgICAgICAgPGRpdj5SYXRhLXJhdGEgc2FtcGVsIChcKFxiYXJ7eH1cKSkgPSAxMi42PC9kaXY+DQogICAgICAgIDxkaXY+U3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIChcKFxzaWdtYVwpKSA9IDMuMjwvZGl2Pg0KICAgICAgICA8ZGl2PlVrdXJhbiBzYW1wZWwgKFwoblwpKSA9IDEwMDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtY29udGFpbmVyIj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTAlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+MS4gTWVuZ2hpdHVuZyBcKHpfe1xhbHBoYS8yfVwpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5MCUgPSAwLjkwDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45MCA9IDAuMTAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4xMC8yID0gMC4wNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgel97XGFscGhhLzJ9ID0gel97MC4wNX0gPSAxLjY0NSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm11bGEiPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGEvMn0gXHRpbWVzIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNjQ1IFx0aW1lcyBcZnJhY3szLjJ9e1xzcXJ0ezEwMH19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNjQ1IFx0aW1lcyAwLjMyIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDAuNTI2NCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW48L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybXVsYSI+DQogICAgICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBcYmFye3h9IFxwbSBNRSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBBdGFzID0gMTIuNiArIDAuNTI2NCA9IDEzLjEyNjQNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAxMi42IC0gMC41MjY0ID0gMTIuMDczNg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDEyLjA3MzYsIDEzLjEyNjQpPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05NSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDk1JTwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+MS4gTWVuZ2hpdHVuZyBcKHpfe1xhbHBoYS8yfVwpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5NSUgPSAwLjk1DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45NSA9IDAuMDUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4wNS8yID0gMC4wMjUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIHpfe1xhbHBoYS8yfSA9IHpfezAuMDI1fSA9IDEuOTYgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyBcZnJhY3szLjJ9e1xzcXJ0ezEwMH19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEuOTYgXHRpbWVzIDAuMzIgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMC42MjcyIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAxMi42ICsgMC42MjcyID0gMTMuMjI3Mg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDEyLjYgLSAwLjYyNzIgPSAxMS45NzI4DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICA8ZGl2PlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj4oMTEuOTcyOCwgMTMuMjI3Mik8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTklIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk5Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTklPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5naGl0dW5nIFwoel97XGFscGhhLzJ9XCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDk5JSA9IDAuOTkNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjk5ID0gMC4wMSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjAxLzIgPSAwLjAwNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgel97XGFscGhhLzJ9ID0gel97MC4wMDV9ID0gMi41NzYgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjU3NiBcdGltZXMgXGZyYWN7My4yfXtcc3FydHsxMDB9fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjU3NiBcdGltZXMgMC4zMiBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAwLjgyNDMyIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGVwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtdWxhIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAxMi42ICsgMC44MjQzMiA9IDEzLjQyNDMyDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEJhd2FoID0gMTIuNiAtIDAuODI0MzIgPSAxMS43NzU2OA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDExLjc3NTY4LCAxMy40MjQzMik8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3BvbHlmaWxsLmlvL3YzL3BvbHlmaWxsLm1pbi5qcz9mZWF0dXJlcz1lczYiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgaWQ9Ik1hdGhKYXgtc2NyaXB0IiBhc3luYyBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbWF0aGpheEAzL2VzNS90ZXgtbW1sLWNodG1sLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgICAgICB3aW5kb3cuTWF0aEpheCA9IHsNCiAgICAgICAgICAgIHRleDogew0KICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcKCcsICdcXCknXV0sDQogICAgICAgICAgICAgICAgZGlzcGxheU1hdGg6IFtbJyQkJywgJyQkJ10sIFsnXFxbJywgJ1xcXSddXQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNodG1sOiB7DQogICAgICAgICAgICAgICAgc2NhbGU6IDAuOQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgIDwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCg0KMy4gKipWaXN1YWxpc2FzaSBQZXJiYW5kaW5nYW4gZGFyaSBrZXRpZ2EgSW50ZXJ2YWwgS2VwZXJjYXlhYW4qKg0KDQpgYGB7cn0NCg0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpjaV9kYXRhIDwtIGRhdGEuZnJhbWUoDQogIENJID0gZmFjdG9yKGMoIjkwJSIsICI5NSUiLCAiOTklIiksIGxldmVscyA9IGMoIjkwJSIsICI5NSUiLCAiOTklIikpLA0KICBtZWFuID0gYygxMi42LCAxMi42LCAxMi42KSwNCiAgbG93ZXIgPSBjKDEyLjA3MzYsIDExLjk3MjgsIDExLjc3NTY4KSwNCiAgdXBwZXIgPSBjKDEzLjEyNjQsIDEzLjIyNzIsIDEzLjQyNDMyKQ0KKQ0KZ2dwbG90KGNpX2RhdGEsIGFlcyh4ID0gQ0ksIHkgPSBtZWFuLCBjb2xvciA9IENJKSkgKw0KDQogIGdlb21fcG9pbnQoc2l6ZSA9IDQpICsNCg0KICBnZW9tX2Vycm9yYmFyKA0KICAgIGFlcyh5bWluID0gbG93ZXIsIHltYXggPSB1cHBlciksDQogICAgd2lkdGggPSAwLjE4LA0KICAgIGxpbmV3aWR0aCA9IDEuMw0KICApICsNCg0KICAjIExhYmVsIENJIHRlcGF0IGRpIHRlbmdhaCB0aXRpayBtZWFuDQogIGdlb21fdGV4dCgNCiAgICBhZXMoDQogICAgICB4ID0gQ0ksDQogICAgICB5ID0gbWVhbiwNCiAgICAgIGxhYmVsID0gcGFzdGUwKCIoIiwgcm91bmQobG93ZXIsMiksICIsICIsIHJvdW5kKHVwcGVyLDIpLCAiKSIpDQogICAgKSwNCiAgICBoanVzdCA9IDAuNSwNCiAgICB2anVzdCA9IDAuNSwNCiAgICBzaXplID0gMy44LA0KICAgIGNvbG9yID0gImJsYWNrIiwNCiAgICBpbmhlcml0LmFlcyA9IEZBTFNFDQogICkgKw0KDQogIHNjYWxlX2NvbG9yX21hbnVhbCgNCiAgICB2YWx1ZXMgPSBjKA0KICAgICAgIjkwJSIgPSAiIzJDQjFBNiIsDQogICAgICAiOTUlIiA9ICIjMUU4RjhCIiwNCiAgICAgICI5OSUiID0gIiMxNjZFNkEiDQogICAgKQ0KICApICsNCg0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIFJlbnRhbmcgS2VwZXJjYXlhYW4gTWVhbiIsDQogICAgc3VidGl0bGUgPSAiUGVyYmFuZGluZ2FuIFJlbnRhbmcgS2VwZXJjYXlhYW4gOTAlLCA5NSUsIGRhbiA5OSUgdGVyaGFkYXAgTWVhbiBTYW1wZWwiLA0KICAgIHggPSAiVGluZ2thdCBLZXBlcmNheWFhbiIsDQogICAgeSA9ICJOaWxhaSBNZWFuIg0KICApICsNCg0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEzKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSksDQogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSwNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIg0KICApDQpgYGANCg0KNC4gKipJbnRlcnByZXRhc2lrYW4gZGFsYW0gS29udGVrcyBBbmFsaXNpcyBCaXNuaXMuKioNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpFc3RpbWFzaSByYXRhLXJhdGEgc2VraXRhciAxMiw2IHRyYW5zYWtzaSBoYXJpYW4gcGVyIHBlbmdndW5hIG1lbnVuanVra2FuIGluZGlrYXNpIHBlbmluZ2thdGFuIGFrdGl2aXRhcyBwZW5nZ3VuYSBzZXRlbGFoIGZpdHVyIGRpbHVuY3Vya2FuLiBSZW50YW5nIGtlcGVyY2F5YWFuIDkwJSBkYXBhdCBkaW1hbmZhYXRrYW4gc2ViYWdhaSBkYXNhciBrZXB1dHVzYW4gYXdhbCB1bnR1ayB1amkgb3BlcmFzaW9uYWwgZGFuIG9wdGltYWxpc2FzaSBmaXR1ciBrYXJlbmEgaW50ZXJ2YWxueWEgbGViaWggc2VtcGl0IGRhbiBjZXBhdCBtZW1iZXJpa2FuIHNpbnlhbCBwZXJmb3JtYS4gUmVudGFuZyBrZXBlcmNheWFhbiA5NSUgbWVtYmVyaWthbiB0aW5na2F0IGtleWFraW5hbiB5YW5nIGxlYmloIHNlaW1iYW5nIGRhbiBwYWxpbmcgdGVwYXQgZGlndW5ha2FuIHNlYmFnYWkgZGFzYXIga2VwdXR1c2FuIG1hbmFqZXJpYWwgdXRhbWEsIHlhaXR1IG1lbGFuanV0a2FuIGF0YXUgbWVtcGVydGFoYW5rYW4gZml0dXIgZGFsYW0gamFuZ2thIG1lbmVuZ2FoLiBTZW1lbnRhcmEgaXR1LCByZW50YW5nIGtlcGVyY2F5YWFuIDk5JSBtZW1iZXJpa2FuIGtleWFraW5hbiB0ZXJ0aW5nZ2kgYmFod2EgcGVuaW5na2F0YW4gdHJhbnNha3NpIGJlbmFyLWJlbmFyIHRlcmphZGksIHNlaGluZ2dhIGxlYmloIGFtYW4gZGlndW5ha2FuIHNlYmFnYWkgZGFzYXIga2VwdXR1c2FuIHN0cmF0ZWdpcyBiZXJuaWxhaSBiZXNhciwgc2VwZXJ0aSBhbG9rYXNpIGFuZ2dhcmFuIHBlbmdlbWJhbmdhbiBsYW5qdXRhbiBkYW4gcGVuZXJhcGFuIGZpdHVyIHNlY2FyYSBtZW55ZWx1cnVoLg0KPC9wPg0KDQo6OjoNCg0KDQotLS0NCg0KDQojIyBTdHVkaSBLYXN1cyAyIA0KDQoqKlJlbnRhbmcgS2VwZXJjYXlhYW4gcmF0YSByYXRhLCAkXHNpZ21hJCB0aWRhayBkaWtldGFodWk6KiogU2VidWFoICoqVGltIFBlbmVsaXRpYW4gQVgqKiBtZW5nYW5hbGlzaXMgKipXYWt0dSBQZW55ZWxlc2FpYW4gVHVnYXMgKGRhbGFtIGhpdHVuZ2FuIG1lbml0KSoqIHVudHVrIGFwbGlrYXNpIHNlbHVsZXIuIERhdGEgaW5pIGRpa3VtcHVsa2FuIGRhcmkgKioxMiBwZW5nZ3VuYSoqOg0KDQokJA0KOC40LFw7IDcuOSxcOyA5LjEsXDsgOC43LFw7IDguMixcOyA5LjAsXDsNCjcuOCxcOyA4LjUsXDsgOC45LFw7IDguMSxcOyA4LjYsXDsgOC4zDQokJA0KDQo6Ojoge3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNlNmY3ZjU7IGJvcmRlci1sZWZ0OjZweCBzb2xpZCAjMDA4MDgwOyBwYWRkaW5nOjEycHg7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW46MjBweCAwOyJ9DQoNCioqVHVnYXM6KioNCg0KMS4gSWRlbnRpZmthc2kgKipVamkgU2F0YXRpc3RpayoqIHlhbmcgc2VzdWFpIGRhbiBqZWxhc2thbiBhbGFzYW5tdS4NCjIuIEhpdHVuZyBJbnRlcnZhbCBLZXBlcmNheWFhbiBVbnR1azoNCiAgIC0gJDkwXCUkDQogICAtICQ5NVwlJA0KICAgLSAkOTlcJSQNCjMuIFZpc3VhbGlzYXNpa2FuIGtldGlnYSBpbnRlcnZhbCB0ZXJzZWJ1dCBwYWRhIHNhdHUgcGxvdC4NCjQuIEplbGFza2FuIGJhZ2FpbWFuYSAqKnVrdXJhbiBzYW1wZWwgZGFuIHRpbmdrYXQga2VwZXJjYXlhYW4qKiBtZW1lbmdhcnVoaSBsZWJhciBpbnRlcnZhbC4NCg0KOjo6DQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZjFlZmZhOyBib3JkZXItbGVmdDo2cHggc29saWQgIzNmNTFiNTsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQo8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsgdGV4dC1qdXN0aWZ5OiBpbnRlci13b3JkOyI+IA0KKipQZW55ZWxlc2FpYW4gU3R1ZGkgS2FzdXMgMiAqKg0KPC9wPg0KDQoNCjEuICAqKklkZW50aWZrYXNpIFVqaSBTdGF0aXN0aWsqKg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7IHRleHQtanVzdGlmeTogaW50ZXItd29yZDsiPiANCkthc3VzIGluaSBkaWFuYWxpc2lzIG1lbmdndW5ha2FuICoqcmVudGFuZyBrZXBlcmNheWFhbiByYXRhLXJhdGEgZGVuZ2FuIGRpc3RyaWJ1c2kgdCoqIGthcmVuYSAqKnNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpICjPgykgdGlkYWsgZGlrZXRhaHVpKiogZGFuICoqanVtbGFoIHNhbXBlbCByZWxhdGlmIGtlY2lsIChuID0gMTIpKiouIERhdGEgeWFuZyBkaWFuYWxpc2lzIGJlcnVwYSAqKndha3R1IHBlbnllbGVzYWlhbiB0dWdhcyBkYWxhbSBzYXR1YW4gbWVuaXQqKiwgc2VoaW5nZ2Egc2VzdWFpIHVudHVrIGFuYWxpc2lzIHJhdGEtcmF0YS4gRGFsYW0ga29uZGlzaSB0ZXJzZWJ1dCwgZGlzdHJpYnVzaSB0IGxlYmloIHRlcGF0IGRpZ3VuYWthbiBkaWJhbmRpbmdrYW4gZGlzdHJpYnVzaSBub3JtYWwga2FyZW5hIG1hbXB1IG1lbXBlcmhpdHVuZ2thbiBrZXRpZGFrcGFzdGlhbiBha2liYXQgZXN0aW1hc2kgc2ltcGFuZ2FuIGJha3UgZGFyaSBzYW1wZWwuDQo8L3A+DQoNCjIuICoqSGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW4qKg0KDQpgYGB7PWh0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImlkIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPlJlbnRhbmcgS2VwZXJjYXlhYW4gZGVuZ2FuIERpc3RyaWJ1c2kgdDwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZjZmM7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmRhdGEtaW5mbyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmOGY4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIGdhcDogNDBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FsY3VsYXRpb24gew0KICAgICAgICAgICAgbWFyZ2luOiA4cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtcmVzdWx0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC12YWx1ZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGxhaW4tdGV4dCB7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICBib2R5IHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuY29uZmlkZW5jZS1jb250YWluZXIgew0KICAgICAgICAgICAgICAgIGdhcDogMzBweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8ZGl2IGNsYXNzPSJkYXRhLWluZm8iPg0KICAgICAgICA8c3Ryb25nPkRhdGEgV2FrdHUgUGVueWVsZXNhaWFuIFR1Z2FzIChtZW5pdCk6PC9zdHJvbmc+DQogICAgICAgIDxkaXY+OC40LCA3LjksIDkuMSwgOC43LCA4LjIsIDkuMCwgNy44LCA4LjUsIDguOSwgOC4xLCA4LjYsIDguMzwvZGl2Pg0KICAgICAgICA8ZGl2Pm4gPSAxMiAodWt1cmFuIHNhbXBlbCk8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLWNvbnRhaW5lciI+DQogICAgICAgIA0KICAgICAgICA8IS0tIDkwJSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24iPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjEuIEhpdHVuZyBNZWFuIChSYXRhLXJhdGEpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBEYXRhOiA4LjQsIDcuOSwgOS4xLCA4LjcsIDguMiwgOS4wLCA3LjgsIDguNSwgOC45LCA4LjEsIDguNiwgOC4zDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYmFye3h9ID0gXGZyYWN7OC40ICsgNy45ICsgOS4xICsgOC43ICsgLi4uLi4uLisgOC4zfXsxMn0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxiYXJ7eH0gPSBcZnJhY3sxMDIuNX17MTJ9ID0gOC41NDE3IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjIuIEhpdHVuZyBTdGFuZGFyIERldmlhc2kgU2FtcGVsIChzKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIHMgPSBcc3FydHtcZnJhY3tcc3VtICh4X2kgLSBcYmFye3h9KV4yfXtuLTF9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsNCiAgICAgICAgICAgICAgICBcYmVnaW57YWxpZ25lZH0NCiAgICAgICAgICAgICAgICAoOC40LTguNTQxNyleMiAmPSAwLjAyMDEgXFwNCiAgICAgICAgICAgICAgICAoNy45LTguNTQxNyleMiAmPSAwLjQxMTUgXFwNCiAgICAgICAgICAgICAgICAoOS4xLTguNTQxNyleMiAmPSAwLjMxMTUgXFwNCiAgICAgICAgICAgICAgICAoOC43LTguNTQxNyleMiAmPSAwLjAyNTEgXFwNCiAgICAgICAgICAgICAgICAoOC4yLTguNTQxNyleMiAmPSAwLjExNjcgXFwNCiAgICAgICAgICAgICAgICAoOS4wLTguNTQxNyleMiAmPSAwLjIxMDAgXFwNCiAgICAgICAgICAgICAgICAoNy44LTguNTQxNyleMiAmPSAwLjU1MDMgXFwNCiAgICAgICAgICAgICAgICAoOC41LTguNTQxNyleMiAmPSAwLjAwMTcgXFwNCiAgICAgICAgICAgICAgICAoOC45LTguNTQxNyleMiAmPSAwLjEyODUgXFwNCiAgICAgICAgICAgICAgICAoOC4xLTguNTQxNyleMiAmPSAwLjE5NTEgXFwNCiAgICAgICAgICAgICAgICAoOC42LTguNTQxNyleMiAmPSAwLjAwMzQgXFwNCiAgICAgICAgICAgICAgICAoOC4zLTguNTQxNyleMiAmPSAwLjA1ODQgXFwNCiAgICAgICAgICAgICAgICBcZW5ke2FsaWduZWR9DQogICAgICAgICAgICAgICAgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxzdW0gKHhfaSAtIFxiYXJ7eH0pXjIgPSAwLjAyMDEgKyAwLjQxMTUgKyAwLjMxMTUgKyAuLi4uLi4uKyAwLjA1ODQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxzdW0gKHhfaSAtIFxiYXJ7eH0pXjIgPSAyLjAzMjMgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHMgPSBcc3FydHtcZnJhY3syLjAzMjN9ezEyLTF9fSA9IFxzcXJ0e1xmcmFjezIuMDMyM317MTF9fSA9IFxzcXJ0ezAuMTg0OH0gPSAwLjQyOTkgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTAlID0gMC45MA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTAgPSAwLjEwIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMTAvMiA9IDAuMDUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIERlcmFqYXQga2ViZWJhc2FuOiBcKCBkZiA9IG4gLSAxID0gMTIgLSAxID0gMTEgXCkNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHRfe1xhbHBoYS8yfSA9IHRfezAuMDUsIDExfSA9IDEuNzk2IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjQuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBNRSA9IHRfe1xhbHBoYS8yfSBcdGltZXMgXGZyYWN7c317XHNxcnR7bn19IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNzk2IFx0aW1lcyBcZnJhY3swLjQyOTl9e1xzcXJ0ezEyfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS43OTYgXHRpbWVzIFxmcmFjezAuNDI5OX17My40NjQxfSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjc5NiBcdGltZXMgMC4xMjQxID0gMC4yMjI5IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjUuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSA4LjU0MTcgKyAwLjIyMjkgPSA4Ljc2NDYNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSA4LjU0MTcgLSAwLjIyMjkgPSA4LjMxODgNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPig4LjMxODgsIDguNzY0Nik8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTUlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk1Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZWFuIGRhbiBTdGFuZGFyIERldmlhc2k8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxiYXJ7eH0gPSA4LjU0MTcgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHMgPSAwLjQyOTkgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDUvMiA9IDAuMDI1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgPSBuIC0gMSA9IDEyIC0gMSA9IDExIFwpDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB0X3tcYWxwaGEvMn0gPSB0X3swLjAyNSwgMTF9ID0gMi4yMDEgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gdF97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tzfXtcc3FydHtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMi4yMDEgXHRpbWVzIFxmcmFjezAuNDI5OX17XHNxcnR7MTJ9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAyLjIwMSBcdGltZXMgMC4xMjQxID0gMC4yNzMxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjQuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSA4LjU0MTcgKyAwLjI3MzEgPSA4LjgxNDgNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSA4LjU0MTcgLSAwLjI3MzEgPSA4LjI2ODYNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5NSU6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPig4LjI2ODYsIDguODE0OCk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTklIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk5Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTklPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZWFuIGRhbiBTdGFuZGFyIERldmlhc2k8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxiYXJ7eH0gPSA4LjU0MTcgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHMgPSAwLjQyOTkgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTklID0gMC45OQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTkgPSAwLjAxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDEvMiA9IDAuMDA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgPSBuIC0gMSA9IDEyIC0gMSA9IDExIFwpDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB0X3tcYWxwaGEvMn0gPSB0X3swLjAwNSwgMTF9ID0gMy4xMDYgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gdF97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tzfXtcc3FydHtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMy4xMDYgXHRpbWVzIFxmcmFjezAuNDI5OX17XHNxcnR7MTJ9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAzLjEwNiBcdGltZXMgMC4xMjQxID0gMC4zODU0IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjQuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSA4LjU0MTcgKyAwLjM4NTQgPSA4LjkyNzENCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSA4LjU0MTcgLSAwLjM4NTQgPSA4LjE1NjMNCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5OSU6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPig4LjE1NjMsIDguOTI3MSk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3BvbHlmaWxsLmlvL3YzL3BvbHlmaWxsLm1pbi5qcz9mZWF0dXJlcz1lczYiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgaWQ9Ik1hdGhKYXgtc2NyaXB0IiBhc3luYyBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbWF0aGpheEAzL2VzNS90ZXgtbW1sLWNodG1sLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgICAgICB3aW5kb3cuTWF0aEpheCA9IHsNCiAgICAgICAgICAgIHRleDogew0KICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcKCcsICdcXCknXV0sDQogICAgICAgICAgICAgICAgZGlzcGxheU1hdGg6IFtbJyQkJywgJyQkJ10sIFsnXFxbJywgJ1xcXSddXQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNodG1sOiB7DQogICAgICAgICAgICAgICAgc2NhbGU6IDAuOQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgIDwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCjMuICAqKlZpc3VhbGlzYXNpIFBlcmJhbmRpbmdhbiBkYXJpIGtldGlnYSBJbnRlcnZhbCBLZXBlcmNheWFhbioqDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpjaV9kYXRhIDwtIGRhdGEuZnJhbWUoDQogIENJID0gZmFjdG9yKGMoIjkwJSIsICI5NSUiLCAiOTklIiksIGxldmVscyA9IGMoIjkwJSIsICI5NSUiLCAiOTklIikpLA0KICBsb3dlciA9IGMoOC4zMTg4LCA4LjI2ODYsIDguMTU2MyksDQogIHVwcGVyID0gYyg4Ljc2NDYsIDguODE0OCwgOC45MjcxKSwNCiAgbWVhbiAgPSA4LjU0MTcNCikNCg0KZ2dwbG90KGNpX2RhdGEsIGFlcyh5ID0gQ0kpKSArDQogIGdlb21fZXJyb3JiYXIoDQogICAgYWVzKHhtaW4gPSBsb3dlciwgeG1heCA9IHVwcGVyLCBjb2xvciA9IENJKSwNCiAgICB3aWR0aCA9IDAuMjUsDQogICAgbGluZXdpZHRoID0gMS40LA0KICAgIG9yaWVudGF0aW9uID0gInkiDQogICkgKw0KICBnZW9tX3RleHQoDQogICAgYWVzKHggPSBsb3dlciwgbGFiZWwgPSByb3VuZChsb3dlciwgMykpLA0KICAgIGhqdXN0ID0gMS4xLA0KICAgIHNpemUgPSA0LA0KICAgIGZvbnRmYWNlID0gImJvbGQiDQogICkgKw0KICBnZW9tX3RleHQoDQogICAgYWVzKHggPSB1cHBlciwgbGFiZWwgPSByb3VuZCh1cHBlciwgMykpLA0KICAgIGhqdXN0ID0gLTAuMSwNCiAgICBzaXplID0gNCwNCiAgICBmb250ZmFjZSA9ICJib2xkIg0KICApICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKA0KICAgIHZhbHVlcyA9IGMoIjkwJSIgPSAiIzAwODA4MCIsDQogICAgICAgICAgICAgICAiOTUlIiA9ICIjMjBiMmFhIiwNCiAgICAgICAgICAgICAgICI5OSUiID0gIiM0OGQxY2MiKQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJQZXJiYW5kaW5nYW4gUmVudGFuZyBLZXBlcmNheWFhbiIsDQogICAgeCA9ICJXYWt0dSAobWVuaXQpIiwNCiAgICB5ID0gTlVMTA0KICApICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMykgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiDQogICkNCmBgYA0KDQo0LlBlbmplbGFzYW4gYmFnYWltYW5hICoqdWt1cmFuIHNhbXBlbCBkYW4gdGluZ2thdCBrZXBlcmNheWFhbioqIG1lbWVuZ2FydWhpIGxlYmFyIGludGVydmFsLg0KDQo8cCBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeTsgdGV4dC1qdXN0aWZ5OiBpbnRlci13b3JkOyI+IA0KTGViYXIgcmVudGFuZyBrZXBlcmNheWFhbiBkaXBlbmdhcnVoaSBsYW5nc3VuZyBvbGVoIHVrdXJhbiBzYW1wZWwgZGFuIHRpbmdrYXQga2VwZXJjYXlhYW4uIFNlbWFraW4gYmVzYXIgdWt1cmFuIHNhbXBlbCwgZXN0aW1hc2kgcmF0YS1yYXRhIG1lbmphZGkgbGViaWggc3RhYmlsIHNlaGluZ2dhIHN0YW5kYXIgZXJyb3IgKFwoIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFwpKSBtZW5nZWNpbCBkYW4gaW50ZXJ2YWwga2VwZXJjYXlhYW4gbWVuamFkaSBsZWJpaCBzZW1waXQsIHNlZGFuZ2thbiBzYW1wZWwga2VjaWwgbWVueWViYWJrYW4ga2V0aWRha3Bhc3RpYW4gbGViaWggYmVzYXIgc2VoaW5nZ2EgaW50ZXJ2YWwgbWVsZWJhci4gU2ViYWxpa255YSwgdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGxlYmloIHRpbmdnaSAobWlzYWxueWEgZGFyaSA5MCUga2UgOTklKSBtZW1lcmx1a2FuIG5pbGFpIGtyaXRpcyBaIGF0YXUgdCB5YW5nIGxlYmloIGJlc2FyLCBtZW1wZXJiZXNhciBtYXJnaW4gb2YgZXJyb3IgZGFuIG1lbWJ1YXQgaW50ZXJ2YWwgc2VtYWtpbiBsZWJhciB1bnR1ayBtZW5qYW1pbiBrZXlha2luYW4geWFuZyBsZWJpaCBrdWF0LiBEZW5nYW4gZGVtaWtpYW4sIGludGVydmFsIHNlbXBpdCBtZW5jZXJtaW5rYW4gZXN0aW1hc2kgcHJlc2lzaSBkYXJpIHNhbXBlbCBiZXNhciBkYW4ga2VwZXJjYXlhYW4gbW9kZXJhdCBzZXBlcnRpIDk1JSwgc2VtZW50YXJhIGludGVydmFsIGxlYmFyIG1lbnVuanVra2FuIGtlaGF0aS1oYXRpYW4gbGViaWggYmVzYXIgZGFsYW0gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuLg0KPC9wPg0KDQo6OjoNCg0KDQojIyBTdHVkaSBLYXN1cyAzDQoNCioqUmVudGFuZyBLZXBlcmNheWFhbiB1bnR1ayBTZWJ1YWggUHJvcG9yc2ksIFBlbmd1amlhbiBBL0I6KiogVGltIERhdGEgU2llbmNlIG1lbmphbGFua2FuICoqcGVuZ3VqaWFuIEEvQioqIHBhZGEgZGVzYWluIHRvbWJvbCAqQ2FsbC1Uby1BY3Rpb24gKENUQSkqIGJhcnUuICBFa3NwZXJpbWVuIHRlcnNlYnV0IG1lbmdoYXNpbGthbjoNCg0KJCQNClxiZWdpbntlcW5hcnJheSp9DQpuICY9JiA0MDAgXHF1YWQgXHRleHR7KEtlc2VsdXJ1aGFuIEp1bWxhaCBQZW5nZ3VuYSl9IFxcDQp4ICY9JiAxNTYgXHF1YWQgXHRleHR7KFBlbmdndW5hIHlhbmcgbWVtZW5jZXQgQ1RBKX0NClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCg0KDQo6Ojoge3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNlNmY3ZjU7IGJvcmRlci1sZWZ0OjZweCBzb2xpZCAjMDA4MDgwOyBwYWRkaW5nOjEycHg7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW46MjBweCAwOyJ9DQoqKlR1Z2FzOioqDQoNCjEuIEhpdHVuZyAqKnNhbXBsZSBwcm9wb3JzaSoqICRcaGF0e3B9JC4NCjIuIEhpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuIFVudHVrIFByb3BvcnNpIHBhZGEgOg0KICAgLSAkOTBcJSQNCiAgIC0gJDk1XCUkDQogICAtICQ5OVwlJA0KMy4gVmlzdWFsaXNhc2lrYW4gZGFuIEJhbmRpbmdrYW4ga2V0aWdhIGludGVydmFsIHRlcnNlYnV0Lg0KNC4gSmVsYXNrYW4gYmFnYWltYW5hIHRpbmdrYXQga2VwZXJjYXlhYW4gbWVtZW5nYXJ1aGkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGRhbGFtIGVrc3BlcmltZW4gcHJvZHVrLi4NCg0KOjo6DQoNCjo6OiB7c3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2YxZWZmYTsgYm9yZGVyLWxlZnQ6NnB4IHNvbGlkICMzZjUxYjU7IHBhZGRpbmc6MTJweDsgYm9yZGVyLXJhZGl1czo4cHg7IG1hcmdpbjoyMHB4IDA7In0NCg0KKipQZW55ZWxlc2FpYW4gU3R1ZGkgS2FzdXMgMyoqDQoNCjEuICBIaXR1bmcgKipzYW1wbGUgcHJvcG9yc2kqKiAkXGhhdHtwfSQgZGFuICBIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbiBVbnR1ayBQcm9wb3JzaQ0KDQpgYGB7PWh0bWx9DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImlkIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPlJlbnRhbmcgS2VwZXJjYXlhYW4gUHJvcG9yc2k8L3RpdGxlPg0KICAgIDxzdHlsZT4NCiAgICAgICAgKiB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBUYWhvbWEsIEdlbmV2YSwgVmVyZGFuYSwgc2Fucy1zZXJpZjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgYm9keSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmY2ZjOw0KICAgICAgICAgICAgY29sb3I6ICMzMzM7DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42Ow0KICAgICAgICAgICAgcGFkZGluZzogMjBweDsNCiAgICAgICAgICAgIG1heC13aWR0aDogMTAwMHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5kYXRhLWluZm8gew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjhmODsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMDA4MDgwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FsY3VsYXRpb24gew0KICAgICAgICAgICAgbWFyZ2luOiA4cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS1jb250YWluZXIgew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgICAgICAgICBnYXA6IDQwcHg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLXNlY3Rpb24gew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtdGl0bGUgew0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwODA4MDsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtOTUgLmNvbmZpZGVuY2UtdGl0bGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIwYjJhYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtOTkgLmNvbmZpZGVuY2UtdGl0bGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQ4ZDFjYzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaDMgew0KICAgICAgICAgICAgY29sb3I6ICMwMDY2NjY7DQogICAgICAgICAgICBmb250LXNpemU6IDEuMnJlbTsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwIDEwcHggMDsNCiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UwZjBmMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmludGVydmFsLXJlc3VsdCB7DQogICAgICAgICAgICBtYXJnaW46IDI1cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZmNWY1Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtdmFsdWUgew0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjRyZW07DQogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOw0KICAgICAgICAgICAgY29sb3I6ICMwMDY2NjY7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnBsYWluLXRleHQgew0KICAgICAgICAgICAgbWFyZ2luOiAxMHB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgYm9keSB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLmNvbmZpZGVuY2UtY29udGFpbmVyIHsNCiAgICAgICAgICAgICAgICBnYXA6IDMwcHg7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQogICAgPGRpdiBjbGFzcz0iZGF0YS1pbmZvIj4NCiAgICAgICAgPHN0cm9uZz5EYXRhIFBlbmd1amlhbiBBL0I6PC9zdHJvbmc+DQogICAgICAgIDxkaXY+biA9IDQwMCAoanVtbGFoIHBlbmdndW5hKTwvZGl2Pg0KICAgICAgICA8ZGl2PnggPSAxNTYgKHBlbmdndW5hIHlhbmcgbWVtZW5jZXQgQ1RBKTwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDwhLS0gUEVSSElUVU5HQU4gcCBIQVQgKERJUElTQUgpIC0tPg0KICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPkhpdHVuZyBTYW1wbGUgUHJvcG9yc2kgXChcaGF0e3B9XCk8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDxoMz5QZXJoaXR1bmdhbiBTYW1wbGUgUHJvcG9yc2k8L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSA9IFxmcmFje3h9e259IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gXGZyYWN7MTU2fXs0MDB9IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gMC4zOSBcXQ0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICA8ZGl2Pkhhc2lsIFBlcmhpdHVuZ2FuOjwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPlwoXGhhdHtwfSA9IDAuMzlcKTwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLWNvbnRhaW5lciI+DQogICAgICAgIA0KICAgICAgICA8IS0tIDkwJSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24iPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjEuIE1lbmVudHVrYW4gXCggel97XGFscGhhLzJ9IFwpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDkwJSA9IDAuOTANCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjkwID0gMC4xMCBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjEwLzIgPSAwLjA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjA1fSA9IDEuNjQ1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBNRSA9IHpfe1xhbHBoYS8yfSBcdGltZXMgXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMzkgXHRpbWVzICgxLTAuMzkpfXs0MDB9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgXHNxcnR7XGZyYWN7MC4zOSBcdGltZXMgMC42MX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMjM3OX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxzcXJ0ezAuMDAwNTk0NzV9IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDEuNjQ1IFx0aW1lcyAwLjAyNDM5IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDAuMDQwMTIgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSBccG0gTUUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDAuMzkgKyAwLjA0MDEyID0gMC40MzAxMg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuMzkgLSAwLjA0MDEyID0gMC4zNDk4OA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJSB1bnR1ayBwcm9wb3JzaTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDAuMzQ5OSwgMC40MzAxKTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij5hdGF1ICgzNC45OSUsIDQzLjAxJSk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTUlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk1Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYS8yfSBcKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5NSUgPSAwLjk1DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45NSA9IDAuMDUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4wNS8yID0gMC4wMjUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIHpfe1xhbHBoYS8yfSA9IHpfezAuMDI1fSA9IDEuOTYgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyBcc3FydHtcZnJhY3swLjM5IFx0aW1lcyAoMS0wLjM5KX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS45NiBcdGltZXMgXHNxcnR7XGZyYWN7MC4zOSBcdGltZXMgMC42MX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS45NiBcdGltZXMgMC4wMjQzOSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAwLjA0NzgwIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxoYXR7cH0gXHBtIE1FIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAwLjM5ICsgMC4wNDc4MCA9IDAuNDM3ODANCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAwLjM5IC0gMC4wNDc4MCA9IDAuMzQyMjANCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5NSUgdW50dWsgcHJvcG9yc2k6PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigwLjM0MjIsIDAuNDM3OCk8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+YXRhdSAoMzQuMjIlLCA0My43OCUpPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk5JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05OSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+MS4gTWVuZW50dWthbiBcKCB6X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTklID0gMC45OQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTkgPSAwLjAxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDEvMiA9IDAuMDA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjAwNX0gPSAyLjU3NiBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGEvMn0gXHRpbWVzIFxzcXJ0e1xmcmFje1xoYXR7cH0oMS1caGF0e3B9KX17bn19IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDIuNTc2IFx0aW1lcyBcc3FydHtcZnJhY3swLjM5IFx0aW1lcyAoMS0wLjM5KX17NDAwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMi41NzYgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMzkgXHRpbWVzIDAuNjF9ezQwMH19IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDIuNTc2IFx0aW1lcyAwLjAyNDM5IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyBNRSA9IDAuMDYyODMgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSBccG0gTUUgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDAuMzkgKyAwLjA2MjgzID0gMC40NTI4Mw0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuMzkgLSAwLjA2MjgzID0gMC4zMjcxNw0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JSB1bnR1ayBwcm9wb3JzaTo8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDAuMzI3MiwgMC40NTI4KTwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij5hdGF1ICgzMi43MiUsIDQ1LjI4JSk8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3BvbHlmaWxsLmlvL3YzL3BvbHlmaWxsLm1pbi5qcz9mZWF0dXJlcz1lczYiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgaWQ9Ik1hdGhKYXgtc2NyaXB0IiBhc3luYyBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbWF0aGpheEAzL2VzNS90ZXgtbW1sLWNodG1sLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgICAgICB3aW5kb3cuTWF0aEpheCA9IHsNCiAgICAgICAgICAgIHRleDogew0KICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcKCcsICdcXCknXV0sDQogICAgICAgICAgICAgICAgZGlzcGxheU1hdGg6IFtbJyQkJywgJyQkJ10sIFsnXFxbJywgJ1xcXSddXQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNodG1sOiB7DQogICAgICAgICAgICAgICAgc2NhbGU6IDAuOQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgIDwvc2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCjMuICoqVmlzdWFsaXNhc2kgZGFuIFBlcmJhbmRpbmdhbiBrZXRpZ2EgaW50ZXJ2YWwgdGVyc2VidXQuKioNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCiMgRGF0YSBDSSBwcm9wb3JzaQ0KY2lfcHJvcG9yc2kgPC0gZGF0YS5mcmFtZSgNCiAgQ0kgPSBmYWN0b3IoYygiOTAlIiwgIjk1JSIsICI5OSUiKSwgbGV2ZWxzID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSksDQogIGxvd2VyID0gYygwLjM0OTksIDAuMzQyMiwgMC4zMjcyKSwNCiAgdXBwZXIgPSBjKDAuNDMwMSwgMC40Mzc4LCAwLjQ1MjgpDQopDQoNCmdncGxvdChjaV9wcm9wb3JzaSwgYWVzKHkgPSBDSSkpICsNCiAgZ2VvbV9lcnJvcmJhcigNCiAgICBhZXMoeG1pbiA9IGxvd2VyLCB4bWF4ID0gdXBwZXIsIGNvbG9yID0gQ0kpLA0KICAgIHdpZHRoID0gMC4yNSwNCiAgICBsaW5ld2lkdGggPSAxLjQsDQogICAgb3JpZW50YXRpb24gPSAieSINCiAgKSArDQogIGdlb21fdGV4dCgNCiAgICBhZXMoeCA9IGxvd2VyLCBsYWJlbCA9IHNjYWxlczo6cGVyY2VudChsb3dlciwgYWNjdXJhY3kgPSAwLjAxKSksDQogICAgaGp1c3QgPSAxLjEsDQogICAgc2l6ZSA9IDQsDQogICAgZm9udGZhY2UgPSAiYm9sZCINCiAgKSArDQogIGdlb21fdGV4dCgNCiAgICBhZXMoeCA9IHVwcGVyLCBsYWJlbCA9IHNjYWxlczo6cGVyY2VudCh1cHBlciwgYWNjdXJhY3kgPSAwLjAxKSksDQogICAgaGp1c3QgPSAtMC4xLA0KICAgIHNpemUgPSA0LA0KICAgIGZvbnRmYWNlID0gImJvbGQiDQogICkgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwoDQogICAgdmFsdWVzID0gYygiOTAlIiA9ICIjMDA4MDgwIiwNCiAgICAgICAgICAgICAgICI5NSUiID0gIiMyMGIyYWEiLA0KICAgICAgICAgICAgICAgIjk5JSIgPSAiIzQ4ZDFjYyIpDQogICkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoDQogICAgbGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpDQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlBlcmJhbmRpbmdhbiBSZW50YW5nIEtlcGVyY2F5YWFuIiwNCiAgICBzdWJ0aXRsZSA9ICJuID0gNDAwLCAgeCA9IDE1NiwgIHDMgiA9IDAuMzkiLA0KICAgIHggPSAiUHJvcG9yc2kgUGVuZ2d1bmEiLA0KICAgIHkgPSBOVUxMDQogICkgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEzKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSINCiAgKQ0KYGBgDQoNCjQuICoqUGVuamVsYXNhbiBiYWdhaW1hbmEgdGluZ2thdCBrZXBlcmNheWFhbiBtZW1lbmdhcnVoaSBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gZGFsYW0gZWtzcGVyaW1lbiBwcm9kdWsuKioNCg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7IHRleHQtanVzdGlmeTogaW50ZXItd29yZDsiPiANClRpbmdrYXQga2VwZXJjYXlhYW4gbWVtZW5nYXJ1aGkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGRhbGFtIGVrc3BlcmltZW4gcHJvZHVrIGthcmVuYSBtZW5lbnR1a2FuIHNlYmVyYXBhIHlha2luIHRpbSB0ZXJoYWRhcCBoYXNpbCB5YW5nIGRpcGVyb2xlaC4gVGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGxlYmloIHRpbmdnaSAobWlzYWxueWEgOTklKSBtZW1iZXJpa2FuIGtleWFraW5hbiB5YW5nIGxlYmloIGt1YXQgYmFod2EgaGFzaWwgZWtzcGVyaW1lbiBtZW5jZXJtaW5rYW4ga29uZGlzaSBzZWJlbmFybnlhLCBuYW11biBrb25zZWt1ZW5zaW55YSBhZGFsYWggcmVudGFuZyBrZXBlcmNheWFhbiBtZW5qYWRpIGxlYmloIGxlYmFyLCBzZWhpbmdnYSBrZXB1dHVzYW4geWFuZyBkaWFtYmlsIGNlbmRlcnVuZyBsZWJpaCBrb25zZXJ2YXRpZi4gU2ViYWxpa255YSwgdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGxlYmloIHJlbmRhaCAobWlzYWxueWEgOTAlKSBtZW5naGFzaWxrYW4gcmVudGFuZyB5YW5nIGxlYmloIHNlbXBpdCBkYW4ga2VwdXR1c2FuIGJpc2EgZGlhbWJpbCBsZWJpaCBjZXBhdCwgdGV0YXBpIGRlbmdhbiByaXNpa28ga2VzYWxhaGFuIHlhbmcgbGViaWggYmVzYXIuIE9sZWgga2FyZW5hIGl0dSwgcGVtaWxpaGFuIHRpbmdrYXQga2VwZXJjYXlhYW4gaGFydXMgZGlzZXN1YWlrYW4gZGVuZ2FuIGtvbnRla3MgYmlzbmlzOiBla3NwZXJpbWVuIGJlcmlzaWtvIHRpbmdnaSBiaWFzYW55YSBtZW1lcmx1a2FuIHRpbmdrYXQga2VwZXJjYXlhYW4geWFuZyBsZWJpaCB0aW5nZ2kNCjwvcD4NCg0KOjo6DQoNCiMjIFN0dWRpIEthc3VzIDQgDQoNCioqUGVyYmFuZGluZ2FuIFByZXNpc2kgKFVqaS1aIHZzIFVqaS10KToqKiBEdWEgdGltIGRhdGEgbWVuZ3VrdXIgKipsYXRlbnNpIEFQSSAoZGFsYW0gbWlsaWRldGlrKSoqIGRpIGJhd2FoIGtvbmRpc2kgeWFuZyBiZXJiZWRhLg0KDQpcYmVnaW57ZXFuYXJyYXkqfQ0KXHRleHR7VGltIEE6fSBcXA0KbiAmPSYgMzYgXHF1YWQgXHRleHR7KFVrdXJhbi9qdW1sYWggc2FtcGVsKX0gXFwNClxiYXJ7eH0gJj0mIDIxMCBccXVhZCBcdGV4dHsoUmF0YSBSYXRhIFNhbXBlbCl9IFxcDQpcc2lnbWEgJj0mIDI0IFxxdWFkIFx0ZXh0eyhEaWtldGFodWkgU2ltcGFuZ2FuIEJha3UpfSBcXFs2cHRdDQoNClx0ZXh0e1RpbSBCOn0gXFwNCm4gJj0mIDM2IFxxdWFkIFx0ZXh0eyhVa3VyYW4vanVtbGFoIHNhbXBlbCl9IFxcDQpcYmFye3h9ICY9JiAyMTAgXHF1YWQgXHRleHR7KFJhdGEgUmF0YSBTYW1wZWwpfSBcXA0KcyAmPSYgMjQgXHF1YWQgXHRleHR7KFNpbXBhbmdhbiBCYWt1IFNhbXBlbCl9DQpcZW5ke2VxbmFycmF5Kn0NCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZTZmN2Y1OyBib3JkZXItbGVmdDo2cHggc29saWQgIzAwODA4MDsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KKipUdWdhcyoqDQoNCjEuIElkZW50aWZpa2FzaSAqKnVqaSBzdGF0aXN0aWsqKiB5YW5nIGRpZ3VuYWthbiBvbGVoIHNldGlhcCB0aW0uDQoyLiBIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbiBVbnR1ayAqKjkwJSwgOTUlLCBhbmQgOTklKiouDQozLiBCdWF0IHZpc3VhbGlzYXNpIHlhbmcgbWVtYmFuZGluZ2thbiBzZWx1cnVoIGludGVydmFsLg0KNC4gSmVsYXNrYW4gbWVuZ2FwYSAqKmxlYmFyIGludGVydmFsIGJlcmJlZGEqKiwgbWVza2lwdW4gZGF0YW55YSBtaXJpcCBtZW5kZWthdGkgc2FtYS8gc2VydXBhLiANCjo6Og0KDQoNCjo6OiB7c3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2YxZWZmYTsgYm9yZGVyLWxlZnQ6NnB4IHNvbGlkICMzZjUxYjU7IHBhZGRpbmc6MTJweDsgYm9yZGVyLXJhZGl1czo4cHg7IG1hcmdpbjoyMHB4IDA7In0NCg0KKipQZW55ZWxlc2FpYW4gU3R1ZGkgS2FzdXMgNCoqDQoNCjEuICoqdWppIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiBvbGVoIHNldGlhcCB0aW0qKg0KDQotIFRpbSBBIG1lbmdndW5ha2FuIHVqaSBaIChaLXRlc3QpLCBrYXJlbmEgc2ltcGFuZ2FuIGJha3UgcG9wdWxhc2kgKM+DKSBkaWtldGFodWkuIERhbGFtIGtvbmRpc2kgaW5pLCBrZXRpZGFrcGFzdGlhbiBoYW55YSBiZXJhc2FsIGRhcmkgdmFyaWFzaSBzYW1wZWwsIHNlaGluZ2dhIGRpc3RyaWJ1c2kgbm9ybWFsIHN1ZGFoIG1lbWFkYWkgdW50dWsgbWVsYWt1a2FuIGluZmVyZW5zaSB0ZXJoYWRhcCByYXRhLXJhdGEgcG9wdWxhc2kuIERlbmdhbiB1a3VyYW4gc2FtcGVsIHlhbmcgcmVsYXRpZiBjdWt1cCAobiA9IDM2KSwgcGVuZGVrYXRhbiBpbmkgbWVtYmVyaWthbiBlc3RpbWFzaSB5YW5nIHN0YWJpbCBkYW4gZWZpc2llbi4NCg0KLSBUaW0gQiBtZW5nZ3VuYWthbiB1amkgdCwga2FyZW5hIHNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpIHRpZGFrIGRpa2V0YWh1aSBkYW4gZGlnYW50aWthbiBvbGVoIHNpbXBhbmdhbiBiYWt1IHNhbXBlbCAocykuIFBlbmdndW5hYW4gZGlzdHJpYnVzaSB0IGRpcGVybHVrYW4gdW50dWsgbWVtcGVyaGl0dW5na2FuIHRhbWJhaGFuIGtldGlkYWtwYXN0aWFuIGFraWJhdCBlc3RpbWFzaSBzaW1wYW5nYW4gYmFrdSBkYXJpIGRhdGEgc2FtcGVsLCBzZWhpbmdnYSBoYXNpbCBpbmZlcmVuc2kgbWVuamFkaSBsZWJpaCB2YWxpZCBkYW4gc2VzdWFpIGRlbmdhbiBrb25kaXNpIGRhdGEgeWFuZyB0ZXJzZWRpYS4NCg0KMi4gKipIaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbioqDQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iaWQiPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+UmVudGFuZyBLZXBlcmNheWFhbiAtIERpc3RyaWJ1c2kgeiBkYW4gdDwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZjZmM7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmRhdGEtaW5mbyB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmOGY4Ow0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZWFtLXNlY3Rpb24gew0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmY2ZiOw0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwODA4MDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRlYW0tdGl0bGUgew0KICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwODA4MDsNCiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAyMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnRlYW0tYiB7DQogICAgICAgICAgICBib3JkZXItY29sb3I6ICMyMGIyYWE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC50ZWFtLWIgLnRlYW0tdGl0bGUgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIwYjJhYTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2UtY29udGFpbmVyIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7DQogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgICAgICAgICAgZ2FwOiA0MHB4Ow0KICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY2FsY3VsYXRpb24gew0KICAgICAgICAgICAgbWFyZ2luOiA4cHggMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDVweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtcmVzdWx0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC12YWx1ZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGxhaW4tdGV4dCB7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgICAgICAgICBib2R5IHsNCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAuY29uZmlkZW5jZS1jb250YWluZXIgew0KICAgICAgICAgICAgICAgIGdhcDogMzBweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8IS0tIERhdGEgVGltIEEgZGFuIFRpbSBCIC0tPg0KICAgIDxkaXYgY2xhc3M9ImRhdGEtaW5mbyI+DQogICAgICAgIDxzdHJvbmc+RGF0YSBUaW06PC9zdHJvbmc+DQogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206IDE1cHg7Ij4NCiAgICAgICAgICAgIDxzdHJvbmc+VGltIEE6PC9zdHJvbmc+PGJyPg0KICAgICAgICAgICAgbiA9IDM2ICh1a3VyYW4gc2FtcGVsKTxicj4NCiAgICAgICAgICAgIFwoXGJhcnt4fVwpID0gMjEwIChyYXRhLXJhdGEgc2FtcGVsKTxicj4NCiAgICAgICAgICAgIFwoXHNpZ21hXCkgPSAyNCAoZGlrZXRhaHVpIHNpbXBhbmdhbiBiYWt1IHBvcHVsYXNpKQ0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdj4NCiAgICAgICAgICAgIDxzdHJvbmc+VGltIEI6PC9zdHJvbmc+PGJyPg0KICAgICAgICAgICAgbiA9IDM2ICh1a3VyYW4gc2FtcGVsKTxicj4NCiAgICAgICAgICAgIFwoXGJhcnt4fVwpID0gMjEwIChyYXRhLXJhdGEgc2FtcGVsKTxicj4NCiAgICAgICAgICAgIHMgPSAyNCAoc2ltcGFuZ2FuIGJha3Ugc2FtcGVsKQ0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8IS0tIFRJTSBBOiBEaXN0cmlidXNpIHogLS0+DQogICAgPGRpdiBjbGFzcz0idGVhbS1zZWN0aW9uIj4NCiAgICAgICAgPGRpdiBjbGFzcz0idGVhbS10aXRsZSI+VGltIEE6IERpc3RyaWJ1c2kgeiAoz4MgZGlrZXRhaHVpKTwvZGl2Pg0KICAgICAgICANCiAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1jb250YWluZXIiPg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8IS0tIDkwJSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYS8yfSBcKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDkwJSA9IDAuOTANCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjkwID0gMC4xMCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjEwLzIgPSAwLjA1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjA1fSA9IDEuNjQ1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIFxmcmFjezI0fXs2fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgNCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSA2LjU4IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgXGJhcnt4fSBccG0gTUUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDIxMCArIDYuNTggPSAyMTYuNTgNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAyMTAgLSA2LjU4ID0gMjAzLjQyDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTo8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigyMDMuNDIsIDIxNi41OCk8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1zZWN0aW9uIGNvbmZpZGVuY2UtOTUiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjEuIE1lbmVudHVrYW4gXCggel97XGFscGhhLzJ9IFwpPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDUvMiA9IDAuMDI1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGEvMn0gPSB6X3swLjAyNX0gPSAxLjk2IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyBcZnJhY3syNH17XHNxcnR7MzZ9fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjk2IFx0aW1lcyA0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDcuODQgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+My4gTWVuZ2hpdHVuZyBSZW50YW5nIEtlcGVyY2F5YWFuPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFJ1bXVzOiBcWyBcYmFye3h9IFxwbSBNRSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBBdGFzID0gMjEwICsgNy44NCA9IDIxNy44NA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYWluLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDIxMCAtIDcuODQgPSAyMDIuMTYNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC1yZXN1bHQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2PlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlOjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcnZhbC12YWx1ZSI+KDIwMi4xNiwgMjE3Ljg0KTwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDwhLS0gOTklIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05OSI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5OSU8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+MS4gTWVuZW50dWthbiBcKCB6X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5OSUgPSAwLjk5DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45OSA9IDAuMDEgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4wMS8yID0gMC4wMDUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIHpfe1xhbHBoYS8yfSA9IHpfezAuMDA1fSA9IDIuNTc2IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjU3NiBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMi41NzYgXHRpbWVzIDQgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMTAuMzA0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgXGJhcnt4fSBccG0gTUUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDIxMCArIDEwLjMwNCA9IDIyMC4zMDQNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAyMTAgLSAxMC4zMDQgPSAxOTkuNjk2DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTo8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigxOTkuNzAsIDIyMC4zMCk8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICANCiAgICA8IS0tIFRJTSBCOiBEaXN0cmlidXNpIHQgLS0+DQogICAgPGRpdiBjbGFzcz0idGVhbS1zZWN0aW9uIHRlYW0tYiI+DQogICAgICAgIDxkaXYgY2xhc3M9InRlYW0tdGl0bGUiPlRpbSBCOiBEaXN0cmlidXNpIHQgKM+DIHRpZGFrIGRpa2V0YWh1aSk8L2Rpdj4NCiAgICAgICAgDQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtY29udGFpbmVyIj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPCEtLSA5MCUgQ29uZmlkZW5jZSBJbnRlcnZhbCAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS10aXRsZSI+UmVudGFuZyBLZXBlcmNheWFhbiA5MCU8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+MS4gTWVuZW50dWthbiBcKCB0X3tcYWxwaGEvMn0gXCk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgVGluZ2thdCBrZXlha2luYW4gPSA5MCUgPSAwLjkwDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEgPSAxIC0gMC45MCA9IDAuMTAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYS8yID0gMC4xMC8yID0gMC4wNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgRGVyYWphdCBrZWJlYmFzYW46IFwoIGRmID0gbiAtIDEgPSAzNiAtIDEgPSAzNSBcKQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgdF97XGFscGhhLzJ9ID0gdF97MC4wNSwgMzV9ID0gMS42OTAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB0X3tcYWxwaGEvMn0gXHRpbWVzIFxmcmFje3N9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY5MCBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMS42OTAgXHRpbWVzIFxmcmFjezI0fXs2fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY5MCBcdGltZXMgNCBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSA2Ljc2IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjMuIE1lbmdoaXR1bmcgUmVudGFuZyBLZXBlcmNheWFhbjwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgXGJhcnt4fSBccG0gTUUgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQXRhcyA9IDIxMCArIDYuNzYgPSAyMTYuNzYNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgQmF0YXMgQmF3YWggPSAyMTAgLSA2Ljc2ID0gMjAzLjI0DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtcmVzdWx0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdj5SZW50YW5nIEtlcGVyY2F5YWFuIDkwJTo8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW50ZXJ2YWwtdmFsdWUiPigyMDMuMjQsIDIxNi43Nik8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlkZW5jZS1zZWN0aW9uIGNvbmZpZGVuY2UtOTUiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtdGl0bGUiPlJlbnRhbmcgS2VwZXJjYXlhYW4gOTUlPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjEuIE1lbmVudHVrYW4gXCggdF97XGFscGhhLzJ9IFwpPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBcYWxwaGEvMiA9IDAuMDUvMiA9IDAuMDI1IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBEZXJhamF0IGtlYmViYXNhbjogXCggZGYgPSBuIC0gMSA9IDM2IC0gMSA9IDM1IFwpDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyB0X3tcYWxwaGEvMn0gPSB0X3swLjAyNSwgMzV9ID0gMi4wMzAgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB0X3tcYWxwaGEvMn0gXHRpbWVzIFxmcmFje3N9e1xzcXJ0e259fSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgTUUgPSAyLjAzMCBcdGltZXMgXGZyYWN7MjR9e1xzcXJ0ezM2fX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMi4wMzAgXHRpbWVzIDQgXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gOC4xMiBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW48L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAyMTAgKyA4LjEyID0gMjE4LjEyDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEJhd2FoID0gMjEwIC0gOC4xMiA9IDIwMS44OA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5NSU6PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj4oMjAxLjg4LCAyMTguMTIpPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPCEtLSA5OSUgQ29uZmlkZW5jZSBJbnRlcnZhbCAtLT4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiBjb25maWRlbmNlLTk5Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5SZW50YW5nIEtlcGVyY2F5YWFuIDk5JTwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHRfe1xhbHBoYS8yfSBcKTwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBUaW5na2F0IGtleWFraW5hbiA9IDk5JSA9IDAuOTkNCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIFxhbHBoYSA9IDEgLSAwLjk5ID0gMC4wMSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgXGFscGhhLzIgPSAwLjAxLzIgPSAwLjAwNSBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgRGVyYWphdCBrZWJlYmFzYW46IFwoIGRmID0gbiAtIDEgPSAzNiAtIDEgPSAzNSBcKQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgXFsgdF97XGFscGhhLzJ9ID0gdF97MC4wMDUsIDM1fSA9IDIuNzI0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGgzPjIuIE1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yIChNRSk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gdF97XGFscGhhLzJ9IFx0aW1lcyBcZnJhY3tzfXtcc3FydHtufX0gXF0NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIFxbIE1FID0gMi43MjQgXHRpbWVzIFxmcmFjezI0fXtcc3FydHszNn19IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDIuNzI0IFx0aW1lcyA0IFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgICAgICBcWyBNRSA9IDEwLjg5NiBcXQ0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIFJlbnRhbmcgS2VwZXJjYXlhYW48L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgUnVtdXM6IFxbIFxiYXJ7eH0gXHBtIE1FIFxdDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEF0YXMgPSAyMTAgKyAxMC44OTYgPSAyMjAuODk2DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhaW4tdGV4dCI+DQogICAgICAgICAgICAgICAgICAgIEJhdGFzIEJhd2FoID0gMjEwIC0gMTAuODk2ID0gMTk5LjEwNA0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXY+UmVudGFuZyBLZXBlcmNheWFhbiA5OSU6PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj4oMTk5LjEwLCAyMjAuOTApPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQoNCiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9wb2x5ZmlsbC5pby92My9wb2x5ZmlsbC5taW4uanM/ZmVhdHVyZXM9ZXM2Ij48L3NjcmlwdD4NCiAgICA8c2NyaXB0IGlkPSJNYXRoSmF4LXNjcmlwdCIgYXN5bmMgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21hdGhqYXhAMy9lczUvdGV4LW1tbC1jaHRtbC5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdD4NCiAgICAgICAgd2luZG93Lk1hdGhKYXggPSB7DQogICAgICAgICAgICB0ZXg6IHsNCiAgICAgICAgICAgICAgICBpbmxpbmVNYXRoOiBbWyckJywgJyQnXSwgWydcXCgnLCAnXFwpJ11dLA0KICAgICAgICAgICAgICAgIGRpc3BsYXlNYXRoOiBbWyckJCcsICckJCddLCBbJ1xcWycsICdcXF0nXV0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBjaHRtbDogew0KICAgICAgICAgICAgICAgIHNjYWxlOiAwLjkNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICA8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQozLiAqKlZpc3VhbGlzYXNpIHlhbmcgbWVtYmFuZGluZ2thbiBzZWx1cnVoIGludGVydmFsKioNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCmNpX2RhdGEgPC0gZGF0YS5mcmFtZSgNCiAgQ0kgPSBmYWN0b3IocmVwKGMoIjkwJSIsICI5NSUiLCAiOTklIiksIGVhY2ggPSAyKSwNCiAgICAgICAgICAgICAgbGV2ZWxzID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSksDQogIFRpbSA9IGZhY3RvcihyZXAoYygiVGltIEEgKHopIiwgIlRpbSBCICh0KSIpLCB0aW1lcyA9IDMpLA0KICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiVGltIEEgKHopIiwgIlRpbSBCICh0KSIpKSwNCiAgbG93ZXIgPSBjKA0KICAgIDIwMy40MiwgMjAzLjI0LA0KICAgIDIwMi4xNiwgMjAxLjg4LA0KICAgIDE5OS43MCwgMTk5LjEwDQogICksDQogIHVwcGVyID0gYygNCiAgICAyMTYuNTgsIDIxNi43NiwNCiAgICAyMTcuODQsIDIxOC4xMiwNCiAgICAyMjAuMzAsIDIyMC45MA0KICApDQopDQoNCmNpX2RhdGEkbWlkIDwtIChjaV9kYXRhJGxvd2VyICsgY2lfZGF0YSR1cHBlcikvMg0KDQpnZ3Bsb3QoY2lfZGF0YSwgYWVzKHkgPSBUaW0sIGNvbG9yID0gVGltKSkgKw0KICANCiAgZ2VvbV9lcnJvcmJhcigNCiAgICBhZXMoeG1pbiA9IGxvd2VyLCB4bWF4ID0gdXBwZXIpLA0KICAgIG9yaWVudGF0aW9uID0gInkiLA0KICAgIHdpZHRoID0gMC4yNSwNCiAgICBsaW5ld2lkdGggPSAxLjQNCiAgKSArDQogIA0KICBnZW9tX3BvaW50KGFlcyh4ID0gbWlkKSwgc2l6ZSA9IDMuNSkgKw0KICANCiAgZ2VvbV9sYWJlbCgNCiAgICBhZXMoeCA9IG1pZCwgbGFiZWwgPSBwYXN0ZTAocm91bmQobG93ZXIsMiksICIg4oCTICIsIHJvdW5kKHVwcGVyLDIpKSksDQogICAgc2l6ZSA9IDUuMiwNCiAgICBmb250ZmFjZSA9ICJib2xkIiwNCiAgICBmaWxsID0gIndoaXRlIiwNCiAgICBhbHBoYSA9IDAuODUsDQogICAgbGluZXdpZHRoID0gMCwNCiAgICBzaG93LmxlZ2VuZCA9IEZBTFNFDQogICkgKw0KICANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIlRpbSBBICh6KSIgPSAiI2U3NTQ4MCIsICJUaW0gQiAodCkiID0gIiM0ZDRkNGQiKSkgKw0KICANCiAgZmFjZXRfd3JhcCh+IENJLCBuY29sID0gMSkgKw0KICANCiAgbGFicygNCiAgICB0aXRsZSA9ICJQZXJiYW5kaW5nYW4gUmVudGFuZyBLZXBlcmNheWFhbiBUaW0gQSBkYW4gVGltIEIiLA0KICAgIHN1YnRpdGxlID0gIkludGVydmFsIGtlcGVyY2F5YWFuIDkwJSwgOTUlLCBkYW4gOTklIiwNCiAgICB4ID0gIk5pbGFpIEVzdGltYXNpIiwNCiAgICB5ID0gTlVMTA0KICApICsNCiAgDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDEzKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNCkNCiAgKQ0KYGBgDQoNCjQuICoqUGVuamVsYXNhbiBtZW5nYXBhIGxlYmFyIGludGVydmFsIGJlcmJlZGEsIG1lc2tpcHVuIGRhdGFueWEgbWlyaXAgbWVuZGVrYXRpIHNhbWEvIHNlcnVwYSoqDQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpNZXNraXB1biBkYXRhIGRhcmkgZHVhIHRpbSB0ZXJsaWhhdCBtaXJpcCBkYW4gcmF0YS1yYXRhbnlhIGhhbXBpciBzYW1hLCBsZWJhciBpbnRlcnZhbCBrZXBlcmNheWFhbiBiaXNhIGJlcmJlZGEuIEhhbCBpbmkga2FyZW5hIGJlYmVyYXBhIGZha3Rvci4gUGVydGFtYSwgdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGRpcGlsaWgsIG1pc2FsbnlhIDkwJSwgOTUlLCBhdGF1IDk5JSBtZW5lbnR1a2FuIHNlYmVyYXBhIHlha2luIGtpdGEgYmFod2EgaW50ZXJ2YWwgdGVyc2VidXQgbWVuY2FrdXAgcGFyYW1ldGVyIHBvcHVsYXNpLiBTZW1ha2luIHRpbmdnaSB0aW5na2F0IGtlcGVyY2F5YWFuLCBzZW1ha2luIGxlYmFyIGludGVydmFsbnlhLiBLZWR1YSwgbWV0b2RlIHBlcmhpdHVuZ2FuIGp1Z2EgYmVycGVuZ2FydWg7IFRpbSBBIG1lbmdndW5ha2FuIGRpc3RyaWJ1c2kgeiwgc2VkYW5na2FuIFRpbSBCIG1lbmdndW5ha2FuIGRpc3RyaWJ1c2kgdC4gRGlzdHJpYnVzaSB0IG1lbWlsaWtpIGVrb3IgbGViaWggdGViYWwgc2VoaW5nZ2EgQ0kgY2VuZGVydW5nIGxlYmloIHBhbmphbmcsIHRlcnV0YW1hIHVudHVrIHNhbXBlbCBrZWNpbC4gS2V0aWdhLCB2YXJpYWJpbGl0YXMgZGF0YSBkYW4gdWt1cmFuIHNhbXBlbCBtZW1lbmdhcnVoaSBzdGFuZGFyIGVycm9yIGRhdGEgeWFuZyBsZWJpaCB0ZXJzZWJhciBhdGF1IHNhbXBlbCBsZWJpaCBrZWNpbCBtZW5naGFzaWxrYW4gaW50ZXJ2YWwgeWFuZyBsZWJpaCBsZWJhci4gSmFkaSwgd2FsYXVwdW4gZGF0YW55YSBoYW1waXIgc2FtYSwga29tYmluYXNpIHRpbmdrYXQga2VwZXJjYXlhYW4sIGplbmlzIGRpc3RyaWJ1c2ksIGRhbiBrYXJha3RlcmlzdGlrIHNhbXBlbCBtZW55ZWJhYmthbiBsZWJhciBpbnRlcnZhbCB0ZXJsaWhhdCBiZXJiZWRhLg0KPC9wPg0KDQo6OjoNCg0KIyMgU3R1ZGkgS2FzdXMgNQ0KKipJbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2k6KiogUGVydXNhaGFhbiAqKlNvZnR3YXJlIGFzIGEgU2VydmljZSAoU2FhUykqKiBpbmdpbiBtZW1hc3Rpa2FuIGJhaHdhICoqc2V0aWRha255YSA3MCUgcGVuZ2d1bmEgYWt0aWYgbWluZ2d1YW4qKiBtZW5nZ3VuYWthbiBmaXR1ciBwcmVtaXVtLg0KDQpVbnR1ayBzZWJ1YWggcGVyY29iYmFhbjoNCg0KJCQNClxiZWdpbntlcW5hcnJheSp9DQpuICY9JiAyNTAgXHF1YWQgXHRleHR7KEtlc2VsdXJ1aGFuIHBlbmdndW5hKX0gXFwNCnggJj0mIDE4NSBccXVhZCBcdGV4dHsoUGVuZ2d1bmEgIlByZW1pdW0iIHlhbmcgQWt0aWYpfQ0KXGVuZHtlcW5hcnJheSp9DQokJA0KDQpNYW5hamVtZW4gaGFueWEgdGVydGFyaWsgcGFkYSAqKmJhdGFzIGJhd2FoKiogZGFyaSBwZXJraXJhYW4gdGVyc2VidXQuDQoNCjo6OiB7c3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2U2ZjdmNTsgYm9yZGVyLWxlZnQ6NnB4IHNvbGlkICMwMDgwODA7IHBhZGRpbmc6MTJweDsgYm9yZGVyLXJhZGl1czo4cHg7IG1hcmdpbjoyMHB4IDA7In0NCioqVHVnYXM6KioNCg0KMS4gSWRlbnRpZmlrYXNpICoqamVuaXMgUmVudGFuZyBLZXBlcmNheWFhbiBEaXJpKiogZGFuIHVqaSB5YW5nIHNlc3VhaS4NCjIuIEhpdHVuZyAqKkludGVydmFsIEtlcGVyY2F5YWFuIHNhdHUgc2lzaSBiYXdhaCoqIHBhZGEgOg0KICAgLSAkOTBcJSQNCiAgIC0gJDk1XCUkDQogICAtICQ5OVwlJA0KMy4gVmlzdWFsaXNhc2lrYW4gYmF0YXMgYmF3YWggdW50dWsgc2VtdWEgdGluZ2thdCBrZXBlcmNheWFhbi4NCjQuIFRlbnR1a2FuIGFwYWthaCB0YXJnZXQgKio3MCUqKiBzZWNhcmEgc3RhdGlzdGlrIHRlcnBlbnVoaS4NCg0KOjo6DQoNCg0KOjo6IHtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZjFlZmZhOyBib3JkZXItbGVmdDo2cHggc29saWQgIzNmNTFiNTsgcGFkZGluZzoxMnB4OyBib3JkZXItcmFkaXVzOjhweDsgbWFyZ2luOjIwcHggMDsifQ0KDQoqKlBlbnllbGVzYWlhbiBTdHVkaSBLYXN1cyA1KioNCg0KMS4gKip1amkgc3RhdGlzdGlrIHlhbmcgZGlndW5ha2FuIG9sZWggS2FzdXMgaW5pKioNCg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7IHRleHQtanVzdGlmeTogaW50ZXItd29yZDsiPiANCkthc3VzIGluaSBtZW1lcmx1a2FuIEludGVydmFsIEtlcGVyY2F5YWFuIFNhdHUgU2lzaSAoT25lLVNpZGVkIENvbmZpZGVuY2UgSW50ZXJ2YWwpLCBraHVzdXNueWEgYmF0YXMgYmF3YWggKExvd2VyIEJvdW5kKSwga2FyZW5hIHR1anVhbm55YSBhZGFsYWggbWVtYXN0aWthbiBuaWxhaSBtaW5pbXVtICJzZXRpZGFrbnlhIDcwJSIgZGFyaSBwb3B1bGFzaSwgYnVrYW4gbWVuY2FyaSByZW50YW5nIGR1YSBzaXNpLiBEZW5nYW4gZGF0YSBiZXJ1cGEgcHJvcG9yc2kga2F0ZWdvcmlrYWwgKHBlbmdndW5hIHByZW1pdW0gdnMuIG5vbi1wcmVtaXVtKSBkYW4gdWt1cmFuIHNhbXBlbCB5YW5nIGJlc2FyIChuPTI1MCksIHVqaSBzdGF0aXN0aWsgeWFuZyB0ZXBhdCB1bnR1ayBkaWd1bmFrYW4gYWRhbGFoIFVqaS1aIHVudHVrIFNhdHUgUHJvcG9yc2kgKE9uZS1TYW1wbGUgWi1UZXN0IGZvciBhIFByb3BvcnRpb24pLCBkaSBtYW5hIHByb3BvcnNpIHNhbXBlbCBkaWhpdHVuZyBzZWJlc2FyIDE4NS8yNTAgPSAwLjc0IGF0YXUgNzQlLg0KPC9wPg0KDQoyLioqSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHNhdHUgc2lzaSBiYXdhaCoqDQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iaWQiPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+SW50ZXJ2YWwgS2VwZXJjYXlhYW4gU2F0dSBTaXNpIEJhd2FoPC90aXRsZT4NCiAgICA8c3R5bGU+DQogICAgICAgICogew0KICAgICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7DQogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGJvZHkgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmNmYzsNCiAgICAgICAgICAgIGNvbG9yOiAjMzMzOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgICAgICBtYXgtd2lkdGg6IDEwMDBweDsNCiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuZGF0YS1pbmZvIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGY4Zjg7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzAwODA4MDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmluZm8tYm94IHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBwYWRkaW5nOiAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMyMGIyYWE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jYWxjdWxhdGlvbiB7DQogICAgICAgICAgICBtYXJnaW46IDhweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogNXB4IDA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5jb25maWRlbmNlLWNvbnRhaW5lciB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIGdhcDogNDBweDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmNvbmZpZGVuY2Utc2VjdGlvbiB7DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MDgwOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07DQogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05NSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjBiMmFhOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuY29uZmlkZW5jZS05OSAuY29uZmlkZW5jZS10aXRsZSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDhkMWNjOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBoMyB7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtOw0KICAgICAgICAgICAgbWFyZ2luOiAyNXB4IDAgMTBweCAwOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBmMGYwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAuaW50ZXJ2YWwtcmVzdWx0IHsNCiAgICAgICAgICAgIG1hcmdpbjogMjVweCAwOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmY1ZjU7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5pbnRlcnZhbC12YWx1ZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBjb2xvcjogIzAwNjY2NjsNCiAgICAgICAgICAgIG1hcmdpbjogMTBweCAwOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucGxhaW4tdGV4dCB7DQogICAgICAgICAgICBtYXJnaW46IDEwcHggMDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLmxvd2VyLWJvdW5kIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkNGYxZjE7DQogICAgICAgICAgICBwYWRkaW5nOiAxMnB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAxNXB4IDA7DQogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMDgwODA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgYm9keSB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMTVweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLmNvbmZpZGVuY2UtY29udGFpbmVyIHsNCiAgICAgICAgICAgICAgICBnYXA6IDMwcHg7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQogICAgPGRpdiBjbGFzcz0iZGF0YS1pbmZvIj4NCiAgICAgICAgPHN0cm9uZz5EYXRhIFNhYVMgLSBQZW5nZ3VuYSBGaXR1ciBQcmVtaXVtOjwvc3Ryb25nPg0KICAgICAgICA8ZGl2Pm4gPSAyNTAgKHRvdGFsIHBlbmdndW5hKTwvZGl2Pg0KICAgICAgICA8ZGl2PnggPSAxODUgKHBlbmdndW5hIHByZW1pdW0gYWt0aWYpPC9kaXY+DQogICAgPC9kaXY+DQogICAgDQogICAgPCEtLSBISVRVTkcgU0FNUExFIFBST1BPUlNJIC0tPg0KICAgIDxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCiAgICAgICAgPGgzPkhpdHVuZyBTYW1wbGUgUHJvcG9yc2kgXChcaGF0e3B9XCk8L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBSdW11czogXFsgXGhhdHtwfSA9IFxmcmFje3h9e259IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gXGZyYWN7MTg1fXsyNTB9IFxdDQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICBcWyBcaGF0e3B9ID0gMC43NCBcXQ0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgUHJvcG9yc2kgcGVuZ2d1bmEgcHJlbWl1bSBha3RpZjogNzQlDQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2UtY29udGFpbmVyIj4NCiAgICAgICAgDQogICAgICAgIDwhLS0gOTAlIENvbmZpZGVuY2UgSW50ZXJ2YWwgLS0+DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZGVuY2Utc2VjdGlvbiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTAlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYX0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTAlID0gMC45MA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTAgPSAwLjEwIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICAoVW50dWsgc2F0dSBzaXNpIGJhd2FoLCBndW5ha2FuIHNlbHVydWggzrEgZGkgc2F0dSBzaXNpKQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgel97XGFscGhhfSA9IHpfezAuMTB9ID0gMS4yODIgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgDQogICAgICAgICAgICA8aDM+Mi4gTWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1FKTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIE1FID0gel97XGFscGhhfSBcdGltZXMgXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIFxzcXJ0e1xmcmFjezAuNzQgXHRpbWVzICgxLTAuNzQpfXsyNTB9fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjI4MiBcdGltZXMgXHNxcnR7XGZyYWN7MC43NCBcdGltZXMgMC4yNn17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIFxzcXJ0e1xmcmFjezAuMTkyNH17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIFxzcXJ0ezAuMDAwNzY5Nn0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS4yODIgXHRpbWVzIDAuMDI3NzQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMC4wMzU1NyBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIEJhdGFzIEJhd2FoIFNhdHUgU2lzaTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFx0ZXh0e0JhdGFzIEJhd2FofSA9IFxoYXR7cH0gLSBNRSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuNzQgLSAwLjAzNTU3ID0gMC43MDQ0Mw0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTAlOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj5Qcm9wb3JzaSDiiaUgMC43MDQ0PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPmF0YXUg4omlIDcwLjQ0JTwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxvd2VyLWJvdW5kIj4NCiAgICAgICAgICAgICAgICA8c3Ryb25nPkludGVycHJldGFzaTo8L3N0cm9uZz4gRGVuZ2FuIGtleWFraW5hbiA5MCUsIGtpdGEgZGFwYXQgbWVuZ2F0YWthbiBiYWh3YSA8c3Ryb25nPm1pbmltYWwgNzAuNDQlPC9zdHJvbmc+IHBlbmdndW5hIGFrdGlmIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk1JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05NSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTUlPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYX0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTUlID0gMC45NQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1IFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGF9ID0gel97MC4wNX0gPSAxLjY0NSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGF9IFx0aW1lcyBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAxLjY0NSBcdGltZXMgXHNxcnR7XGZyYWN7MC43NCBcdGltZXMgMC4yNn17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMS42NDUgXHRpbWVzIDAuMDI3NzQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMC4wNDU2NCBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIEJhdGFzIEJhd2FoIFNhdHUgU2lzaTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFx0ZXh0e0JhdGFzIEJhd2FofSA9IFxoYXR7cH0gLSBNRSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuNzQgLSAwLjA0NTY0ID0gMC42OTQzNg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTUlOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj5Qcm9wb3JzaSDiiaUgMC42OTQ0PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPmF0YXUg4omlIDY5LjQ0JTwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxvd2VyLWJvdW5kIj4NCiAgICAgICAgICAgICAgICA8c3Ryb25nPkludGVycHJldGFzaTo8L3N0cm9uZz4gRGVuZ2FuIGtleWFraW5hbiA5NSUsIGtpdGEgZGFwYXQgbWVuZ2F0YWthbiBiYWh3YSA8c3Ryb25nPm1pbmltYWwgNjkuNDQlPC9zdHJvbmc+IHBlbmdndW5hIGFrdGlmIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICA8IS0tIDk5JSBDb25maWRlbmNlIEludGVydmFsIC0tPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXNlY3Rpb24gY29uZmlkZW5jZS05OSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWRlbmNlLXRpdGxlIj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTklPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4xLiBNZW5lbnR1a2FuIFwoIHpfe1xhbHBoYX0gXCk8L2gzPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFRpbmdrYXQga2V5YWtpbmFuID0gOTklID0gMC45OQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgXGFscGhhID0gMSAtIDAuOTkgPSAwLjAxIFxdDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBcWyB6X3tcYWxwaGF9ID0gel97MC4wMX0gPSAyLjMyNiBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4yLiBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTUUpPC9oMz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgICAgICBSdW11czogXFsgTUUgPSB6X3tcYWxwaGF9IFx0aW1lcyBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgXFsgTUUgPSAyLjMyNiBcdGltZXMgXHNxcnR7XGZyYWN7MC43NCBcdGltZXMgMC4yNn17MjUwfX0gXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMi4zMjYgXHRpbWVzIDAuMDI3NzQgXF0NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsY3VsYXRpb24iPg0KICAgICAgICAgICAgICAgIFxbIE1FID0gMC4wNjQ1MiBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxoMz4zLiBNZW5naGl0dW5nIEJhdGFzIEJhd2FoIFNhdHUgU2lzaTwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYWxjdWxhdGlvbiI+DQogICAgICAgICAgICAgICAgUnVtdXM6IFxbIFx0ZXh0e0JhdGFzIEJhd2FofSA9IFxoYXR7cH0gLSBNRSBcXQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFpbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBCYXRhcyBCYXdhaCA9IDAuNzQgLSAwLjA2NDUyID0gMC42NzU0OA0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXJlc3VsdCI+DQogICAgICAgICAgICAgICAgPGRpdj5JbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgQmF3YWggOTklOjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImludGVydmFsLXZhbHVlIj5Qcm9wb3JzaSDiiaUgMC42NzU1PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPmF0YXUg4omlIDY3LjU1JTwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxvd2VyLWJvdW5kIj4NCiAgICAgICAgICAgICAgICA8c3Ryb25nPkludGVycHJldGFzaTo8L3N0cm9uZz4gRGVuZ2FuIGtleWFraW5hbiA5OSUsIGtpdGEgZGFwYXQgbWVuZ2F0YWthbiBiYWh3YSA8c3Ryb25nPm1pbmltYWwgNjcuNTUlPC9zdHJvbmc+IHBlbmdndW5hIGFrdGlmIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQoNCiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9wb2x5ZmlsbC5pby92My9wb2x5ZmlsbC5taW4uanM/ZmVhdHVyZXM9ZXM2Ij48L3NjcmlwdD4NCiAgICA8c2NyaXB0IGlkPSJNYXRoSmF4LXNjcmlwdCIgYXN5bmMgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL21hdGhqYXhAMy9lczUvdGV4LW1tbC1jaHRtbC5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdD4NCiAgICAgICAgd2luZG93Lk1hdGhKYXggPSB7DQogICAgICAgICAgICB0ZXg6IHsNCiAgICAgICAgICAgICAgICBpbmxpbmVNYXRoOiBbWyckJywgJyQnXSwgWydcXCgnLCAnXFwpJ11dLA0KICAgICAgICAgICAgICAgIGRpc3BsYXlNYXRoOiBbWyckJCcsICckJCddLCBbJ1xcWycsICdcXF0nXV0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBjaHRtbDogew0KICAgICAgICAgICAgICAgIHNjYWxlOiAwLjkNCiAgICAgICAgICAgIH0NCiAgICAgICAgfTsNCiAgICA8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCmBgYA0KDQozLiAqKlZpc3VhbGlzYXNpa2FuIGJhdGFzIGJhd2FoIHVudHVrIHNlbXVhIHRpbmdrYXQga2VwZXJjYXlhYW4qKg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KIyBEYXRhDQpjb25maWRlbmNlIDwtIGMoMC45MCwgMC45NSwgMC45OSkNCnpfYWxwaGEgPC0gYygxLjI4MiwgMS42NDUsIDIuMzI2KQ0KcF9oYXQgPC0gMTg1IC8gMjUwDQpuIDwtIDI1MA0KDQojIEhpdHVuZyBNYXJnaW4gb2YgRXJyb3IgZGFuIEJhdGFzIEJhd2FoDQpNRSA8LSB6X2FscGhhICogc3FydChwX2hhdCAqICgxIC0gcF9oYXQpIC8gbikNCmxvd2VyX2JvdW5kIDwtIHBfaGF0IC0gTUUNCg0KZGYgPC0gZGF0YS5mcmFtZSgNCiAgQ29uZmlkZW5jZSA9IGNvbmZpZGVuY2UgKiAxMDAsDQogIExvd2VyQm91bmQgPSBsb3dlcl9ib3VuZA0KKQ0KDQojIEJ1YXQgZ2dwbG90IGRlbmdhbiBwb3Npc2kgbGFiZWwgZGlzZXN1YWlrYW4NCmdncGxvdChkZiwgYWVzKHggPSBDb25maWRlbmNlLCB5ID0gTG93ZXJCb3VuZCkpICsNCiAgZ2VvbV9wb2ludChzaXplID0gNCwgY29sb3IgPSAiIzAwODA4MCIpICsNCiAgZ2VvbV9saW5lKGdyb3VwID0gMSwgY29sb3IgPSAiIzIwYjJhYSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC43LCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkb3R0ZWQiLCBzaXplID0gMSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc3ByaW50ZigiJS4zZiIsIExvd2VyQm91bmQpKSwNCiAgICAgICAgICAgIHZqdXN0ID0gLTAuOCwgIA0KICAgICAgICAgICAgY29sb3IgPSAiIzAwNjY2NiIsDQogICAgICAgICAgICBzaXplID0gNSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gZGYkQ29uZmlkZW5jZSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCBsaW1pdHMgPSBjKDAuNjUsIDAuNzUpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmF0YXMgQmF3YWggSW50ZXJ2YWwiLA0KICAgIHggPSAiVGluZ2thdCBLZXBlcmNheWFhbiAoJSkiLA0KICAgIHkgPSAiQmF0YXMgQmF3YWggUHJvcG9yc2kiLA0KICAgIGNhcHRpb24gPSAiR2FyaXMgbWVyYWggPSB0YXJnZXQgbWluaW1hbCA3MCUiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KQ0KYGBgDQoNCjQuICAqKlRlbnR1a2FuIGFwYWthaCB0YXJnZXQgNzAlIHNlY2FyYSBzdGF0aXN0aWsgdGVycGVudWhpLioqDQoNCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5OyB0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7Ij4gDQpCZXJkYXNhcmthbiBkYXRhIGRhcmkgMjUwIHBlbmdndW5hIGRlbmdhbiAxODUgcGVuZ2d1bmEgYWt0aWYgZml0dXIgcHJlbWl1bSwgZGlwZXJvbGVoIHByb3BvcnNpIHNhbXBlbCBzZWJlc2FyIDc0JS4gSGFzaWwgaW5pIG1lbnVuanVra2FuIGFuZ2thIHlhbmcgbWVsZWJpaGkgdGFyZ2V0IHBlcnVzYWhhYW4gc2ViZXNhciA3MCUuIE5hbXVuLCBzZXRlbGFoIGRpbGFrdWthbiBwZXJoaXR1bmdhbiBpbnRlcnZhbCBrZXBlcmNheWFhbiBzYXR1IHNpc2kgYmF3YWgsIGRpdGVtdWthbiBiYWh3YSBwZW5jYXBhaWFuIHRhcmdldCBiZXJnYW50dW5nIHBhZGEgdGluZ2thdCBrZXlha2luYW4gc3RhdGlzdGlrIHlhbmcgZGl0ZXJhcGthbi4gUGFkYSB0aW5na2F0IGtleWFraW5hbiA5MCUsIGJhdGFzIGJhd2FoIGludGVydmFsIHNlYmVzYXIgNzAsNDQlIG1lbmdpbmRpa2FzaWthbiB0YXJnZXQgdGVycGVudWhpLCBzZWRhbmdrYW4gcGFkYSB0aW5na2F0IGtleWFraW5hbiA5NSUgZGFuIDk5JSBkZW5nYW4gYmF0YXMgYmF3YWggbWFzaW5nLW1hc2luZyA2OSw0NCUgZGFuIDY3LDU1JSwgdGFyZ2V0IGRpbnlhdGFrYW4gdGlkYWsgdGVyY2FwYWkuVGFyZ2V0IDcwJSBwZW5nZ3VuYSBmaXR1ciBwcmVtaXVtIGhhbnlhIHRlcnBlbnVoaSBwYWRhIHRpbmdrYXQga2V5YWtpbmFuIDkwJSwgbmFtdW4gdGlkYWsgcGFkYSB0aW5na2F0IGtleWFraW5hbiB5YW5nIGxlYmloIHRpbmdnaSAoOTUlIGRhbiA5OSUpLiBQZXJsdSBkaXBlcnRpbWJhbmdrYW4gYmFod2EgbWVza2lwdW4gZGF0YSBzYW1wZWwgbWVudW5qdWtrYW4gYW5na2EgcG9zaXRpZiwga2V0aWRha3Bhc3RpYW4gc3RhdGlzdGlrIHBhZGEgdGluZ2thdCBrZXlha2luYW4gdGluZ2dpIG1lbnllYmFia2FuIHRhcmdldCBiZWx1bSBkYXBhdCBkaWthdGFrYW4gdGVyY2FwYWkgc2VjYXJhIG1leWFraW5rYW4uDQo8L3A+IA0KOjo6DQoNCg0KIyMgUmVmZXJlbmNlDQoNClsxXSBULiBUb255IENhaSwgIk9uZS1zaWRlZCBjb25maWRlbmNlIGludGVydmFscyBpbiBkaXNjcmV0ZSBkaXN0cmlidXRpb25zLCJKb3VybmFsIG9mIFN0YXRpc3RpY2FsIFBsYW5uaW5nIGFuZCBJbmZlcmVuY2UsIHZvbC4gMTMxLCBuby4gMSwgcHAuIDYz4oCTODgsIDIwMDUuDQoNClsyXSBBLi1NLiBTaW11bmRpYywgIkNvbmZpZGVuY2UgaW50ZXJ2YWwsIiBCaW9jaGVtaWEgTWVkaWNhLCB2b2wuIDE4LCBuby4gMiwgcHAuIDE1NOKAkzE2MSwgMjAwOC4NCg0KWzNdIE8uIEJhcm5kb3JmZi1OaWVsc2VuLCBKLiBLZW50LCBhbmQgTS4gU8O4cmVuc2VuLCAiTm9ybWFsIHZhcmlhbmNlLW1lYW4gbWl4dHVyZXMgYW5kIHogZGlzdHJpYnV0aW9ucywiIEludGVybmF0aW9uYWwgU3RhdGlzdGljYWwgUmV2aWV3IC8gUmV2dWUgSW50ZXJuYXRpb25hbGUgZGUgU3RhdGlzdGlxdWUsIHBwLiAxNDXigJMxNTksIDE5ODIuDQoNCg==