Code
Chandra Rizal Alamsyah
Student Majoring in Data Science at ITSB
R Programming Data Science Statistics
Studi Kasus 1
Interval Kepercayaan untuk Mean, \(\sigma\) Diketahui: Sebuah platform
e-commerce ingin memperkirakan rata-rata jumlah transaksi harian per
pengguna setelah meluncurkan fitur baru. Berdasarkan data historis skala
besar, standar deviasi populasi telah diketahui.
\(\sigma\) = 3.2 (Standar deviasi
populasi)
\(n\) = 100 (Ukuran sampel)
\(\bar{x}\) = 12.6 (Rata-rata
sampel)
Tugas
Identifikasi uji statistik yang tepat dan berikan alasan pilihan
Anda.
Hitung Interval Kepercayaan (Confidence Intervals) untuk:
\(90\%\)
\(95\%\)
\(99\%\)
Buat visualisasi perbandingan dari ketiga interval kepercayaan
tersebut.
Interpretasikan hasilnya dalam konteks analisis bisnis.
Identifikasi Uji
statistik
Identifikasi uji statistik yang tepat untuk kasus ini adalah Z-Test
untuk Satu Sampel Mean, dan estimasi dilakukan menggunakan Interval
Kepercayaan Z (Z-Confidence Interval).
Alasan Pemilihan Uji
Ada dua alasan utama mengapa kita menggunakan distribusi Z (Normal
standar) dan bukan distribusi t:
Standar Deviasi Populasi (\(\sigma\) ) Diketahui: Ini adalah kriteria
utama. Sesuai informasi yang ada, \(\sigma =
3.2\) sudah diketahui dari data historis skala besar. Jika \(\sigma\) tidak diketahui (hanya ada standar
deviasi sampel \(s\) ), maka kita harus
menggunakan t-test.
Ukuran Sampel Besar (\(n \geq
30\) ): Dengan \(n = 100\) ,
sampel yang ada memenuhi asumsi Teorema Limit Pusat (Central Limit
Theorem). Hal ini menjamin bahwa distribusi rata-rata sampel akan
mendekati distribusi normal, terlepas dari bentuk distribusi populasi
aslinya.
Perhitungan Interval
Kepercayaan (Confidence Intervals)
Rumus umum untuk Interval Kepercayaan Z adalah:
\[CI = \bar{x} \pm z_{\alpha/2} \left(
\frac{\sigma}{\sqrt{n}} \right)\]
Dimana:
\(\bar{x} = 12.6\)
\(\sigma = 3.2\)
\(n = 100\)
\(SE = \frac{\sigma}{\sqrt{n}} =
\frac{3.2}{\sqrt{100}} = \frac{3.2}{10} = 0.32\) (Standard Error
of the Mean)
Kita akan mencari nilai \(z_{\alpha/2}\) untuk masing-masing tingkat
kepercayaan:
Interval Kepercayaan 90%
\(\alpha = 1 - 0.90 = 0.10\)
\(\alpha/2 = 0.05\)
\(z_{0.05} = 1.645\) (Nilai z untuk
\(P(Z < -1.645)\) atau \(P(Z > 1.645)\) adalah 0.05)
\(CI_{90\%} = 12.6 \pm 1.645 \times
0.32\)
\(CI_{90\%} = 12.6 \pm
0.5264\)
Lower Bound: \(12.6 - 0.5264 =
12.0736\)
Upper Bound: \(12.6 + 0.5264 =
13.1264\) \(CI_{90\%} = [12.07,
13.13]\)
Interval Kepercayaan 95%
\(\alpha = 1 - 0.95 = 0.05\)
\(\alpha/2 = 0.025\)
\(z_{0.025} = 1.96\)
\(CI_{95\%} = 12.6 \pm 1.96 \times
0.32\)
\(CI_{95\%} = 12.6 \pm
0.6272\)
Lower Bound: \(12.6 - 0.6272 =
11.9728\)
Upper Bound: \(12.6 + 0.6272 =
13.2272\)
\(CI_{95\%} = [11.97, 13.23]\)
Interval Kepercayaan 99%
\(\alpha = 1 - 0.99 = 0.01\)
\(\alpha/2 = 0.005\)
\(z_{0.005} = 2.576\)
\(CI_{99\%} = 12.6 \pm 2.576 \times
0.32\)
\(CI_{99\%} = 12.6 \pm
0.82432\)
Lower Bound: \(12.6 - 0.82432 =
11.77568\)
Upper Bound: \(12.6 + 0.82432 =
13.42432\)
\(CI_{99\%} = [11.78, 13.42]\)
Ringkasan Interval Kepercayaan
90%
1.645
\(\pm 0.53\)
\([12.07,
13.13]\)
95%
1.96
\(\pm 0.63\)
\([11.97,
13.23]\)
99%
2.576
\(\pm 0.82\)
\([11.78,
13.42]\)
Visualisasi
Perbandingan Interval Kepercayaan
Interpretasi Hasil
dalam Konteks Analisis Bisnis
Berdasarkan perhitungan interval kepercayaan:
Semakin Tinggi Tingkat Kepercayaan, Semakin Lebar
Intervalnya:
Pada tingkat kepercayaan 90%, kita memperkirakan rata-rata
transaksi harian per pengguna berada antara 12.07 hingga 13.13. Ini
adalah rentang yang relatif sempit.
Pada tingkat kepercayaan 99%, rentang melebar menjadi 11.78
hingga 13.42. Ini mencerminkan bahwa untuk lebih yakin (99% percaya)
bahwa interval kita mengandung rata-rata populasi yang sebenarnya, kita
harus menerima rentang estimasi yang lebih luas.
Trade-off antara Presisi dan Kepercayaan:
Presisi (rentang sempit) diinginkan dalam bisnis untuk membuat
keputusan yang spesifik. Namun, presisi tinggi (misalnya, 90% CI)
berarti Anda memiliki kepercayaan yang sedikit lebih rendah bahwa
interval tersebut benar-benar mencakup nilai rata-rata
populasi.
Kepercayaan (probabilitas tinggi) bahwa interval Anda menangkap
parameter populasi (misalnya, 99% CI) berarti Anda harus menerima
rentang estimasi yang lebih luas, yang mungkin kurang “spesifik” dalam
perencanaan bisnis.
Implikasi Bisnis:
Platform e-commerce dapat menyatakan dengan 95% kepercayaan bahwa
rata-rata transaksi harian per pengguna setelah meluncurkan fitur baru
berada di antara 11.97 dan 13.23.
Manajemen dapat menggunakan rentang ini untuk perencanaan.
Misalnya, jika target kinerja fitur baru adalah minimal 12 transaksi per
pengguna, interval 95% masih menunjukkan kemungkinan bahwa rata-rata
sesungguhnya sedikit di bawah 12 (walaupun 11.97 sangat dekat). Interval
99% bahkan menunjukkan kemungkinan yang lebih tinggi untuk rata-rata di
bawah 12.
Jika perusahaan membutuhkan kepastian yang sangat tinggi (99%)
mengenai dampaknya, mereka harus menyadari bahwa rata-rata transaksi
bisa serendah 11.78 atau setinggi 13.42, memberikan rentang perkiraan
yang lebih besar untuk skenario terburuk dan terbaik.
Singkatnya, fitur baru ini tampaknya memiliki rata-rata transaksi
yang cukup baik, dengan perkiraan terbaik mendekati 12.6. Pemilihan
tingkat kepercayaan akan bergantung pada seberapa konservatif atau
agresif manajemen ingin melihat potensi dampak fitur ini.
Studi Kasus 2
Interval Kepercayaan untuk Mean, \(\sigma\) Tidak Diketahui: Tim Riset UX
(User Experience) menganalisis waktu penyelesaian tugas (dalam menit)
untuk aplikasi seluler baru. Data 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
Identifikasi uji statistik yang tepat dan jelaskan alasannya.
Hitung Interval Kepercayaan untuk:
\(90\%\)
\(95\%\)
\(99\%\)
Visualisasikan ketiga interval tersebut dalam satu plot.
Jelaskan bagaimana ukuran sampel dan tingkat kepercayaan memengaruhi
lebar interval.
Identifikasi Uji
Statistik
Uji statistik yang tepat untuk kasus ini adalah Distribusi t-Student
(t-distribution).
Alasannya:
Standar Deviasi Populasi (\(\sigma\) ) Tidak Diketahui: Kita hanya
memiliki data sampel untuk menghitung standar deviasi sampel (\(s\) ).
Ukuran Sampel Kecil: Jumlah sampel \(n =
12\) (kurang dari 30).
Asumsi: Kita mengasumsikan waktu penyelesaian tugas terdistribusi
secara normal.
Perhitungan Interval
Kepercayaan
Rumus yang digunakan adalah:
\[CI = \bar{x} \pm t_{\alpha/2, df} \times
\left( \frac{s}{\sqrt{n}} \right)\] 1. Untuk Tingkat Kepercayaan
90%
(\(\alpha = 0.10\) )\(\alpha/2 = 0.05\)
Nilai kritis \(t_{0.05, 11} =
1.796\)
Perhitungan: \[CI = 8.458 \pm 1.796
\times \left( \frac{0.412}{\sqrt{12}} \right)\] \[CI = 8.458 \pm 1.796 \times 0.119\] \[CI = 8.458 \pm 0.2137\]
Hasil: (8.244, 8.672)
Untuk Tingkat Kepercayaan 95%
(\(\alpha = 0.05\) )\(\alpha/2 = 0.025\)
Nilai kritis \(t_{0.025, 11} =
2.201\)
Perhitungan: \[CI = 8.458 \pm 2.201
\times \left( \frac{0.412}{\sqrt{12}} \right)\] \[CI = 8.458 \pm 2.201 \times 0.119\] \[CI = 8.458 \pm 0.2619\]
Hasil: (8.196, 8.720)
Untuk Tingkat Kepercayaan 99%
(\(\alpha = 0.01\) )\(\alpha/2 = 0.005\)
Nilai kritis \(t_{0.005, 11} =
3.106\)
Perhitungan: \[CI = 8.458 \pm 3.106
\times \left( \frac{0.412}{\sqrt{12}} \right)\] \[CI = 8.458 \pm 3.106 \times 0.119\] \[CI = 8.458 \pm 0.3696\]
Hasil: (8.088, 8.828)
Ringkasan Interval Kepercayaan
90%
\(1.796\)
\(0.214\)
(8.244, 8.672)
95%
\(2.201\)
\(0.262\)
(8.196, 8.720)
99%
\(3.106\)
\(0.370\)
(8.088, 8.828)
Visualisasi Interval
Kepercayaan
Pada plot yang ditampilkan:
Setiap garis horizontal merepresentasikan satu interval
kepercayaan.
Titik di tengah adalah rata-rata sampel.
Terlihat jelas bahwa interval 99% paling lebar, diikuti 95%, lalu
90%.
Analisis Pengaruh
Variabel
A. Pengaruh Tingkat Kepercayaan:Semakin tinggi tingkat kepercayaan
(misal dari 90% ke 99%), maka interval akan semakin lebar. Hal ini
karena kita membutuhkan rentang nilai yang lebih besar agar kita “lebih
yakin” bahwa parameter populasi yang sebenarnya berada di dalam rentang
tersebut.
B. Pengaruh Ukuran Sampel (\(n\) ):Meskipun dalam kasus ini \(n\) tetap (12), secara teori: semakin besar
ukuran sampel, maka interval akan semakin sempit. Hal ini terjadi karena
nilai pembagi dalam rumus Standar Error (\(\sqrt{n}\) ) menjadi lebih besar, yang
mengurangi ketidakpastian (error) dalam estimasi kita.
Studi Kasus 3
Interval Kepercayaan untuk Proporsi, A/B Testing: Sebuah tim sains
data menjalankan uji A/B pada desain tombol Call-To-Action (CTA) yang
baru. Eksperimen menghasilkan:
\(n\) = 400 (Total pengguna)
\(x\) = 156 (Pengguna yang mengklik
CTA)
Tugas:
Hitung proporsi sampel \(\hat{p}\) .
Hitung Interval Kepercayaan untuk proporsi pada tingkat:
\(90\%\)
\(95\%\)
\(99\%\)
Visualisasikan dan bandingkan ketiga interval tersebut.
Jelaskan bagaimana tingkat kepercayaan memengaruhi pengambilan
keputusan dalam eksperimen produk.
Proporsi Sampel
(\(\hat{p}\) )
Diketahui:
Proporsi sampel : \[\hat{p} = \frac{x}{n}
= \frac{156}{400} = 0.39\] Interpretasi:
Sekitar 39% pengguna mengklik tombol CTA pada desain yang diuji.
Perhitungan Interval
Kepercayaan untuk Proporsi
Rumus yang digunakan adalah: \[CI =
\hat{p} \pm z_{\alpha/2} \times
\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\] Di mana Standard Error
(\(SE\) ) adalah:\[SE = \sqrt{\frac{0.39(1-0.39)}{400}} =
\sqrt{\frac{0.39 \times 0.61}{400}} \approx 0.02439\]
Interval Kepercayaan 90% (\(z =
1.645\) )
Margin of Error: \(1.645 \times 0.02439
\approx 0.0401\)
Interval: (0.3499, 0.4301) atau 34.99% - 43.01%
Interval Kepercayaan 95% (\(z =
1.96\) )
Margin of Error: \(1.96 \times 0.02439
\approx 0.0478\)
Interval: (0.3422, 0.4378) atau 34.22% - 43.78%
Interval Kepercayaan 99% (\(z =
2.576\) )
Margin of Error: \(2.576 \times 0.02439
\approx 0.0628\)
Interval: (0.3272, 0.4528) atau 32.72% - 45.28%
Visualisasi dan
Perbandingan
Perbandingan: Semakin tinggi tingkat kepercayaan, rentang interval
semakin lebar. Hal ini terjadi karena untuk mendapatkan kepastian yang
lebih tinggi (99%), kita harus memperluas rentang estimasi agar nilai
populasi yang sebenarnya tidak “luput”.
Pengaruh pada
Pengambilan Keputusan Produk
Dalam eksperimen produk (A/B Testing), tingkat kepercayaan sangat
memengaruhi risiko bisnis:
Tingkat Kepercayaan Tinggi (99%): Digunakan untuk keputusan yang
berisiko tinggi atau mahal. Misalnya, jika mengganti desain CTA
membutuhkan biaya pengembangan yang besar, tim akan memilih 99% untuk
memastikan kenaikan konversi bukan karena faktor kebetulan.
Tingkat Kepercayaan Standar (95%): Merupakan standar industri.
Memberikan keseimbangan yang baik antara kepastian statistik dan
kecepatan pengambilan keputusan.
Dampak pada Keputusan: Jika interval kepercayaan desain baru (34%
- 43%) tidak tumpang tindih (overlap) dengan interval desain lama (misal
20% - 25%), maka kita bisa dengan yakin memutuskan untuk roll-out desain
baru. Namun, jika ada overlap, kita mungkin butuh ukuran sampel (\(n\) ) yang lebih besar atau menjalankan tes
lebih lama.
Studi Kasus 4
Perbandingan Presisi (Uji-Z vs Uji-t): Dua tim data mengukur latensi
API (dalam milidetik) di bawah kondisi yang berbeda.
Tim A:
\(n\) = 36 (Ukuran sampel)
\(\bar{x}\) = 210 (Rata-rata
sampel)
\(\sigma\) = 24 (Standar deviasi
populasi diketahui)
Tim B:
\(n\) = 36 (Ukuran sampel)
\(\bar{x}\) = 210 (Rata-rata
sampel)
\(s\) = 24 (Standar deviasi
sampel)
Tugas:
Identifikasi uji statistik yang digunakan oleh masing-masing
tim.
Hitung Interval Kepercayaan untuk
\(90\%\)
\(95\%\)
\(99\%\) .
Buat visualisasi yang membandingkan semua interval tersebut.
Jelaskan mengapa lebar interval berbeda, meskipun data yang
digunakan serupa.
Identifikasi Uji
Statistik
Tim A menggunakan Uji-Z (Normal Distribution): Karena ukuran sampel
sudah mencukupi (\(n \geq 30\) ) dan
standar deviasi populasi (\(\sigma\) )
diketahui.
Uji yang digunakan: Uji-Z (Z-interval) \[CI = \bar{x} \pm z_{\alpha/2} \left(
\frac{\sigma}{\sqrt{n}} \right)\]
Tim B menggunakan Uji-t (Student’s t-Distribution): Karena meskipun
ukuran sampel cukup, tim ini hanya mengetahui standar deviasi sampel
(\(s\) ), bukan standar deviasi
populasi.
Uji yang digunakan: Uji-t (t-interval) \[CI = \bar{x} \pm t_{\alpha/2, df} \times \left(
\frac{s}{\sqrt{n}} \right)\]
Perhitungan Interval
Kepercayaan (CI)
Kedua tim memiliki \(\bar{x} =
210\) , \(n = 36\) , dan angka
deviasi \(24\) .Standard Error (SE)
untuk keduanya adalah: \(SE =
\frac{24}{\sqrt{36}} = \frac{24}{6} = 4\) .
Tim A (Uji-Z)
Rumus: \(CI = \bar{x} \pm (z_{\alpha/2}
\times SE)\)
\(90\%\) (z=1.645): \(210 \pm (1.645 \times 4) = 210 \pm 6.58
\rightarrow\) (203.42, 216.58)
\(95\%\) (z=1.96): \(210 \pm (1.96 \times 4) = 210 \pm 7.84
\rightarrow\) (202.16, 217.84)
\(99\%\) (z=2.576): \(210 \pm (2.576 \times 4) = 210 \pm 10.30
\rightarrow\) (199.70, 220.30)
🔹 Interval Kepercayaan Tim A (Uji-Z)
90%
\(z\) = 1.645
(203.42 , 216.58)
95%
\(z\) = 1.96
(202.16 , 217.84)
99%
\(z\) = 2.576
(199.70 , 220.30)
Tim B (Uji-t, df=35)
Rumus: \(CI = \bar{x} \pm (t_{\alpha/2, 35}
\times SE)\)
90% (t=1.689): \(210 \pm (1.689 \times
4) = 210 \pm 6.756 \rightarrow\) (203.24, 216.76)
95% (t=2.030): \(210 \pm (2.030 \times
4) = 210 \pm 8.12 \rightarrow\) (201.88, 218.12)
99% (t=2.723): \(210 \pm (2.723 \times
4) = 210 \pm 10.89 \rightarrow\) (199.11, 220.89)
🔹 Interval Kepercayaan Tim B (Uji-t, df = 35)
90%
\(t\) =1.690
(203.24 , 216.76)
95%
\(t\) =2.030
(201.88 , 218.12)
99%
\(t\) =2.724
(199.10 , 220.90)
Visualisasi
Perbandingan Semua Variabel
Penjelasan Perbedaan
Lebar Interval
Meskipun data (\(\bar{x}, n, \text{angka
deviasi}\) ) identik, interval Tim B (Uji-t) selalu lebih lebar
daripada Tim A (Uji-Z). Mengapa?
Faktor Ketidakpastian: Tim A menggunakan standar deviasi populasi
(\(\sigma\) ) yang dianggap sebagai
nilai absolut yang pasti. Tim B hanya menggunakan standar deviasi sampel
(\(s\) ) yang mengandung risiko
kesalahan karena hanya berasal dari 36 data.
Karakteristik Distribusi-t: Distribusi-t memiliki “ekor” yang
lebih tebal (heavier tails) dibandingkan distribusi normal (Z). Ini
adalah cara statistik memberikan “penalti” atau kompensasi atas
ketidaktahuan kita terhadap parameter populasi asli.
Nilai Kritis: Nilai kritis \(t\)
selalu lebih besar daripada nilai \(z\)
untuk tingkat kepercayaan yang sama. Contohnya pada 95%, \(t=2.030\) sedangkan \(z=1.96\) . Angka pengali yang lebih besar
inilah yang membuat interval Tim B lebih lebar (kurang presisi
dibandingkan Tim A).
Kesimpulan untuk Keputusan: Tim A memiliki presisi yang lebih tinggi
karena informasi yang mereka miliki lebih lengkap (tahu data populasi).
Tim B harus menerima rentang yang lebih lebar sebagai konsekuensi dari
penggunaan data sampel.
Studi Kasus 5
Interval Kepercayaan Satu Sisi (One-Sided): Sebuah perusahaan SaaS
(Software as a Service) ingin memastikan bahwa setidaknya 70% dari
pengguna aktif mingguan menggunakan fitur premium.
Dari eksperimen:
\(n\) = 250 (Total pengguna)
\(x\) = 185 (Pengguna premium
aktif)
Manajemen hanya tertarik pada batas bawah (lower bound) dari estimasi
tersebut.
Tugas:
Identifikasi jenis Interval Kepercayaan dan uji yang tepat.
Hitung Interval Kepercayaan satu sisi (batas bawah) pada
tingkat:
\(90\%\)
\(95\%\)
\(99\%\)
Visualisasikan batas bawah untuk semua tingkat kepercayaan.
Tentukan apakah target 70% tersebut terpenuhi secara statistik.
Identifikasi Jenis
Interval Kepercayaan
Karena manajemen hanya ingin memastikan apakah persentase pengguna
setidaknya (paling sedikit) berada pada angka tertentu, maka uji yang
tepat adalah Interval Kepercayaan Satu Sisi (One-Sided Confidence
Interval - Lower Bound) untuk proporsi.
Jenis Data: Proporsi (kualitatif/biner: menggunakan atau tidak
menggunakan fitur premium).
Uji Statistik: Uji-Z untuk proporsi satu sisi (karena \(n=250\) sudah cukup besar).
Perhitungan Batas
Bawah (Lower Bound)
Data Statistik:
\(n = 250\)
\(x = 185\)
\(\hat{p} = \frac{185}{250} =
0.74\) (74%)
Standard Error (\(SE\) ): \(\sqrt{\frac{\hat{p}(1-\hat{p})}{n}} =
\sqrt{\frac{0.74 \times 0.26}{250}} = \sqrt{0.0007696} \approx
0.0277\)
Rumus Batas Bawah: \(Lower\ Bound = \hat{p}
- (z_{\alpha} \times SE)\) Catatan: Pada uji satu sisi, kita
menggunakan \(z_{\alpha}\) , bukan \(z_{\alpha/2}\) .
Tingkat Kepercayaan 90% (\(\alpha =
0.10\) )
\(z_{0.10} = 1.282\)
\(0.74 - (1.282 \times 0.0277) = 0.74 -
0.0355 = \mathbf{0.7045\ (70.45\%)}\)
Tingkat Kepercayaan 95% (\(\alpha =
0.05\) )
\(z_{0.05} = 1.645\)
\(0.74 - (1.645 \times 0.0277) = 0.74 -
0.0456 = \mathbf{0.6944\ (69.44\%)}\)
Tingkat Kepercayaan 99% (\(\alpha =
0.01\) )
\(z_{0.01} = 2.326\)
\(0.74 - (2.326 \times 0.0277) = 0.74 -
0.0644 = \mathbf{0.6756\ (67.56\%)}\)
Kesimpulan
Apakah Target 70% Terpenuhi?Penentuan terpenuhinya target tergantung
pada tingkat kepercayaan yang dipilih oleh manajemen:
Pada Tingkat Kepercayaan 90%: Target Terpenuhi. Batas bawah
(70.45%) masih berada di atas target 70%. Kita yakin 90% bahwa
setidaknya 70.45% pengguna adalah premium.
Pada Tingkat Kepercayaan 95%: Target Tidak Terpenuhi secara
statistik. Batas bawah (69.44%) sedikit di bawah 70%. Walaupun rata-rata
sampel kita 74%, ada kemungkinan kecil proporsi asli populasi turun
hingga 69.44%.
Pada Tingkat Kepercayaan 99%: Target Tidak Terpenuhi. Batas bawah
(67.56%) berada cukup jauh di bawah target.
Referensi
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Hoboken,
NJ: John Wiley & Sons.(Referensi utama untuk logika perhitungan
interval kepercayaan proporsi pada Kasus 3 dan Kasus 5).
Hogg, R. V., McKean, J. W., & Craig, A. T. (2019). Introduction
to Mathematical Statistics (8th ed.). Pearson.(Dasar teori mengenai
sifat-sifat distribusi sampling dan Teorema Limit Pusat).
Montgomery, D. C., & Runger, G. C. (2014). Applied Statistics
and Probability for Engineers. Hoboken, NJ: John Wiley &
Sons.(Referensi untuk perhitungan praktis Interval Kepercayaan
menggunakan Distribusi-Z dan Distribusi-t pada data kontinu).
NIST/SEMATECH. (2012). e-Handbook of Statistical Methods. https://www.itl.nist.gov/div898/handbook/(Panduan teknis
untuk penentuan batas bawah/bawah aman dan Margin of Error).
Student [Gosset, W. S.]. (1908). The Probable Error of a Mean.
Biometrika, 6(1), 1-25.(Dokumen historis asli yang menjadi dasar
penggunaan Distribusi-t pada sampel kecil seperti pada Kasus 2).
Walpole, R. E., Myers, R. H., Myers, S. L., & Ye, K. (2012).
Probability & Statistics for Engineers & Scientists (9th ed.).
Boston, MA: Pearson.(Buku pegangan standar untuk penentuan nilai kritis
\(z_{\alpha/2}\) dan \(t_{\alpha/2}\) ).
Ringkasan Logika yang
Digunakan:
Kasus 1 & 4 (Distribusi-Z): Digunakan saat ukuran sampel besar
atau standar deviasi populasi (\(\sigma\) ) diketahui. Menggunakan nilai
kritis dari kurva Normal standar.
Kasus 2 (Distribusi-t): Digunakan untuk sampel kecil (\(n < 30\) ) di mana standar deviasi
populasi tidak diketahui, sehingga menggunakan derajat kebebasan (\(df = n - 1\) ).
Kasus 3 & 5 (Proporsi): Menggunakan pendekatan distribusi Normal
terhadap distribusi Binomial dengan rumus \(Margin\ of\ Error = z_{\alpha/2}
\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\) .
LS0tDQp0aXRsZTogIiINCmF1dGhvcjogIkNoYW5kcmEgUml6YWwgQWxhbXN5YWggKDUyMjUwMDY4KSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBodG1sX2RvY3VtZW50Og0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlIA0KICAgIGNzczogY3NzIHBsdXMgaHRtbC5jc3MNCiAgICB0aHVtYm5haWxzOiB0cnVlICAgIA0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgDQotLS0NCjxzdHlsZT4NCiAvKiAyLiBNZW5nYXR1ciBjb250YWluZXI6IFJhdGEgS2lyaSwgTGViYXIgVGVyYmF0YXMsIGRhbiBUZWtzIEp1c3RpZnkgKi8NCiAgLm1haW4tY29udGFpbmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgICAgICAvKiBUZXRhcCByYXRhIGtpcmkgKi8NCiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsNCiAgICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7ICAgIC8qIEJhdGFzIGxlYmFyIGFnYXIgdGlkYWsgdGVybGFsdSBiZXNhci9sZWJhciAqLw0KICAgIHBhZGRpbmctbGVmdDogMzBweCAhaW1wb3J0YW50OyAgLyogSmFyYWsgYW1hbiBkYXJpIHBpbmdnaXIgbGF5YXIgKi8NCiAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7IC8qIE1lbWJ1YXQgdGVrcyByYXRhIGthbmFuLWtpcmkgKi8NCiAgfQ0KDQogIC8qIDMuIE1lbmdhdHVyIHZpc3VhbGlzYXNpIGFnYXIgdGlkYWsgdGVybGFsdSBiZXNhciAqLw0KICAucGxvdGx5LCAuaHRtbC13aWRnZXQsIGltZyB7DQogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsNCiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgICAgIC8qIExlYmFyIGdyYWZpayBtZW5naWt1dGkgbGViYXIgY29udGFpbmVyICg4MDBweCkgKi8NCiAgICBoZWlnaHQ6IDQwMHB4ICFpbXBvcnRhbnQ7ICAgICAgIC8qIEJhdGFzIHRpbmdnaSBhZ2FyIHRpZGFrIHRlcmxhbHUgcGFuamFuZyAqLw0KICB9DQo8L3N0eWxlPg0KPHN0eWxlPg0KLyogNi4gTWVtcGVyYmFpa2kgdGFtcGlsYW4gdGFiZWwgamlrYSBhZGEgKi8NCiAgdGFibGUgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTI1MjUgIWltcG9ydGFudDsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0ICFpbXBvcnRhbnQ7DQogIH0NCiAgdGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzMgIWltcG9ydGFudDsNCiAgfQ0KPC9zdHlsZT4NCjxoMSBjbGFzcz0iaGVhZGVyLXRpdGxlIj5UdWdhcyBXZWVrIDEzIH4gQ29uZmlkZW5jZSBJbnRlcnZhbDwvaDE+DQogIA0KICA8ZGl2IGNsYXNzPSJwcm9maWxlLWNhcmQiPg0KICA8ZGl2IGNsYXNzPSJwcm9maWxlLWltYWdlIj4NCiAgPGltZyBpZD0iRm90byIgc3JjPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vY2hhbmRyYTI0MDIwNS1zdWRvL0NoYW5kcmEzL21haW4vR2FudGVuZy5qcGciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjIwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyI+DQogIDwvZGl2Pg0KICANCiAgPGRpdiBjbGFzcz0icHJvZmlsZS1pbmZvIj4NCiAgPGgyPkNoYW5kcmEgUml6YWwgQWxhbXN5YWg8L2gyPg0KICA8cD5TdHVkZW50IE1ham9yaW5nIGluIERhdGEgU2NpZW5jZSBhdCBJVFNCPC9wPg0KICANCiAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWJsdWUiPlIgUHJvZ3JhbW1pbmc8L3NwYW4+DQogIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1yZWQiPkRhdGEgU2NpZW5jZTwvc3Bhbj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWdyZWVuIj5TdGF0aXN0aWNzPC9zcGFuPg0KICA8L2Rpdj4NCiAgPC9kaXY+DQogIDwvZGl2Pg0KICANCiMgU3R1ZGkgS2FzdXMgMQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdW50dWsgTWVhbiwgJFxzaWdtYSQgRGlrZXRhaHVpOiBTZWJ1YWggcGxhdGZvcm0gZS1jb21tZXJjZSBpbmdpbiBtZW1wZXJraXJha2FuIHJhdGEtcmF0YSBqdW1sYWggdHJhbnNha3NpIGhhcmlhbiBwZXIgcGVuZ2d1bmEgc2V0ZWxhaCBtZWx1bmN1cmthbiBmaXR1ciBiYXJ1LiBCZXJkYXNhcmthbiBkYXRhIGhpc3RvcmlzIHNrYWxhIGJlc2FyLCBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgdGVsYWggZGlrZXRhaHVpLg0KDQoqICRcc2lnbWEkID0gMy4yIChTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kpDQoqICRuJCA9IDEwMCAoVWt1cmFuIHNhbXBlbCkNCiogJFxiYXJ7eH0kID0gMTIuNiAoUmF0YS1yYXRhIHNhbXBlbCkNCg0KKipUdWdhcyoqDQoNCjEuIElkZW50aWZpa2FzaSB1amkgc3RhdGlzdGlrIHlhbmcgdGVwYXQgZGFuIGJlcmlrYW4gYWxhc2FuIHBpbGloYW4gQW5kYS4NCjIuIEhpdHVuZyBJbnRlcnZhbCBLZXBlcmNheWFhbiAoQ29uZmlkZW5jZSBJbnRlcnZhbHMpIHVudHVrOiANCiAgIC0gJDkwXCUkDQogICAtICQ5NVwlJA0KICAgLSAkOTlcJSQNCjMuIEJ1YXQgdmlzdWFsaXNhc2kgcGVyYmFuZGluZ2FuIGRhcmkga2V0aWdhIGludGVydmFsIGtlcGVyY2F5YWFuIHRlcnNlYnV0Lg0KNC4gSW50ZXJwcmV0YXNpa2FuIGhhc2lsbnlhIGRhbGFtIGtvbnRla3MgYW5hbGlzaXMgYmlzbmlzLg0KDQo8L2Rpdj4NCg0KIyMgSWRlbnRpZmlrYXNpIFVqaSBzdGF0aXN0aWsNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCklkZW50aWZpa2FzaSB1amkgc3RhdGlzdGlrIHlhbmcgdGVwYXQgdW50dWsga2FzdXMgaW5pIGFkYWxhaCBaLVRlc3QgdW50dWsgU2F0dSBTYW1wZWwgTWVhbiwgZGFuIGVzdGltYXNpIGRpbGFrdWthbiBtZW5nZ3VuYWthbiBJbnRlcnZhbCBLZXBlcmNheWFhbiBaIChaLUNvbmZpZGVuY2UgSW50ZXJ2YWwpLg0KDQpBbGFzYW4gUGVtaWxpaGFuIFVqaQ0KDQpBZGEgZHVhIGFsYXNhbiB1dGFtYSBtZW5nYXBhIGtpdGEgbWVuZ2d1bmFrYW4gZGlzdHJpYnVzaSBaIChOb3JtYWwgc3RhbmRhcikgZGFuIGJ1a2FuIGRpc3RyaWJ1c2kgdDoNCg0KKiBTdGFuZGFyIERldmlhc2kgUG9wdWxhc2kgKCRcc2lnbWEkKSBEaWtldGFodWk6IEluaSBhZGFsYWgga3JpdGVyaWEgdXRhbWEuIFNlc3VhaSBpbmZvcm1hc2kgeWFuZyBhZGEsICRcc2lnbWEgPSAzLjIkIHN1ZGFoIGRpa2V0YWh1aSBkYXJpIGRhdGEgaGlzdG9yaXMgc2thbGEgYmVzYXIuIEppa2EgJFxzaWdtYSQgdGlkYWsgZGlrZXRhaHVpIChoYW55YSBhZGEgc3RhbmRhciBkZXZpYXNpIHNhbXBlbCAkcyQpLCBtYWthIGtpdGEgaGFydXMgbWVuZ2d1bmFrYW4gdC10ZXN0Lg0KDQoqIFVrdXJhbiBTYW1wZWwgQmVzYXIgKCRuIFxnZXEgMzAkKTogRGVuZ2FuICRuID0gMTAwJCwgc2FtcGVsIHlhbmcgYWRhIG1lbWVudWhpIGFzdW1zaSBUZW9yZW1hIExpbWl0IFB1c2F0IChDZW50cmFsIExpbWl0IFRoZW9yZW0pLiBIYWwgaW5pIG1lbmphbWluIGJhaHdhIGRpc3RyaWJ1c2kgcmF0YS1yYXRhIHNhbXBlbCBha2FuIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbCwgdGVybGVwYXMgZGFyaSBiZW50dWsgZGlzdHJpYnVzaSBwb3B1bGFzaSBhc2xpbnlhLg0KPC9kaXY+DQoNCiMjIFBlcmhpdHVuZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuIChDb25maWRlbmNlIEludGVydmFscykNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NClJ1bXVzIHVtdW0gdW50dWsgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gWiBhZGFsYWg6DQoNCiQkQ0kgPSBcYmFye3h9IFxwbSB6X3tcYWxwaGEvMn0gXGxlZnQoIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxyaWdodCkkJA0KDQpEaW1hbmE6DQoNCiogJFxiYXJ7eH0gPSAxMi42JA0KKiAkXHNpZ21hID0gMy4yJA0KKiAkbiA9IDEwMCQNCiogJFNFID0gXGZyYWN7XHNpZ21hfXtcc3FydHtufX0gPSBcZnJhY3szLjJ9e1xzcXJ0ezEwMH19ID0gXGZyYWN7My4yfXsxMH0gPSAwLjMyJCAoU3RhbmRhcmQgRXJyb3Igb2YgdGhlIE1lYW4pDQoNCktpdGEgYWthbiBtZW5jYXJpIG5pbGFpICR6X3tcYWxwaGEvMn0kIHVudHVrIG1hc2luZy1tYXNpbmcgdGluZ2thdCBrZXBlcmNheWFhbjoNCg0KICAxLiBJbnRlcnZhbCBLZXBlcmNheWFhbiA5MCUNCiAgICAgKiAkXGFscGhhID0gMSAtIDAuOTAgPSAwLjEwJA0KICAgICAqICRcYWxwaGEvMiA9IDAuMDUkDQogICAgICogJHpfezAuMDV9ID0gMS42NDUkIChOaWxhaSB6IHVudHVrICRQKFogPCAtMS42NDUpJCBhdGF1ICRQKFogPiAxLjY0NSkkIGFkYWxhaCAwLjA1KQ0KICAgICAqICRDSV97OTBcJX0gPSAxMi42IFxwbSAxLjY0NSBcdGltZXMgMC4zMiQNCiAgICAgKiAkQ0lfezkwXCV9ID0gMTIuNiBccG0gMC41MjY0JA0KICAgICAqIExvd2VyIEJvdW5kOiAkMTIuNiAtIDAuNTI2NCA9IDEyLjA3MzYkDQogICAgICogVXBwZXIgQm91bmQ6ICQxMi42ICsgMC41MjY0ID0gMTMuMTI2NCQkQ0lfezkwXCV9ID0gWzEyLjA3LCAxMy4xM10kDQogICAgIA0KICAyLiBJbnRlcnZhbCBLZXBlcmNheWFhbiA5NSUNCiAgICAgKiAkXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1JA0KICAgICAqICRcYWxwaGEvMiA9IDAuMDI1JA0KICAgICAqICR6X3swLjAyNX0gPSAxLjk2JA0KICAgICAqICRDSV97OTVcJX0gPSAxMi42IFxwbSAxLjk2IFx0aW1lcyAwLjMyJA0KICAgICAqICRDSV97OTVcJX0gPSAxMi42IFxwbSAwLjYyNzIkDQogICAgICogTG93ZXIgQm91bmQ6ICQxMi42IC0gMC42MjcyID0gMTEuOTcyOCQNCiAgICAgKiBVcHBlciBCb3VuZDogJDEyLjYgKyAwLjYyNzIgPSAxMy4yMjcyJA0KICAgICAqICRDSV97OTVcJX0gPSBbMTEuOTcsIDEzLjIzXSQNCiAgICAgDQogIDMuIEludGVydmFsIEtlcGVyY2F5YWFuIDk5JQ0KICAgICAqICRcYWxwaGEgPSAxIC0gMC45OSA9IDAuMDEkDQogICAgICogJFxhbHBoYS8yID0gMC4wMDUkDQogICAgICogJHpfezAuMDA1fSA9IDIuNTc2JA0KICAgICAqICRDSV97OTlcJX0gPSAxMi42IFxwbSAyLjU3NiBcdGltZXMgMC4zMiQNCiAgICAgKiAkQ0lfezk5XCV9ID0gMTIuNiBccG0gMC44MjQzMiQNCiAgICAgKiBMb3dlciBCb3VuZDogJDEyLjYgLSAwLjgyNDMyID0gMTEuNzc1NjgkDQogICAgICogVXBwZXIgQm91bmQ6ICQxMi42ICsgMC44MjQzMiA9IDEzLjQyNDMyJA0KICAgICAqICRDSV97OTlcJX0gPSBbMTEuNzgsIDEzLjQyXSQNCiAgDQoqKlJpbmdrYXNhbiBJbnRlcnZhbCBLZXBlcmNheWFhbioqDQogDQogfCAqKlRpbmdrYXQgS2VwZXJjYXlhYW4qKiB8IHrOsS8yIHwgKipNYXJnaW4gb2YgRXJyb3IqKiB8ICoqVGluZ2thdCBLZXBlcmNheWFhbioqIHwNCiB8Oi0tLXw6LS0tfDotLS18Oi0tLXwNCiB8IDkwJSB8IDEuNjQ1IHwgJFxwbSAwLjUzJCB8ICRbMTIuMDcsIDEzLjEzXSQgfA0KIDk1JSB8IDEuOTYgfCAkXHBtIDAuNjMkIHwgJFsxMS45NywgMTMuMjNdJCB8DQogOTklIHwgMi41NzYgfCAkXHBtIDAuODIkIHwgJFsxMS43OCwgMTMuNDJdJCB8DQogDQo8L2Rpdj4NCg0KIyMgVmlzdWFsaXNhc2kgUGVyYmFuZGluZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgMS4gTG9hZCBMaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyAyLiBQZXJzaWFwYW4gRGF0YSAoSGFzaWwgUGVyaGl0dW5nYW4gS2FzdXMgMSkNCiMgUmF0YS1yYXRhIChtZWFuKSA9IDguNDU4DQojIE1lbmdndW5ha2FuIFotc2NvcmUgKG49MTIsIHNpZ21hIGRpa2V0YWh1aSA9IDAuNCkNCiMgU0UgPSAwLjQgLyBzcXJ0KDEyKSA9IDAuMTE1NQ0KbWVhbl92YWwgPC0gOC40NTgNCmRmX2thc3VzMSA8LSBkYXRhLmZyYW1lKA0KICBMZXZlbCA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIExvd2VyID0gYyg4LjI2OCwgOC4yMzIsIDguMTYxKSwgIyBCYXRhcyBiYXdhaCBtZW5nZ3VuYWthbiBaLXNjb3JlDQogIFVwcGVyID0gYyg4LjY0OCwgOC42ODQsIDguNzU1KSwgIyBCYXRhcyBhdGFzIG1lbmdndW5ha2FuIFotc2NvcmUNCiAgQ29sb3IgPSBjKCIjMzQ5OGRiIiwgIiMyOTgwYjkiLCAiIzFjNTk4YSIpICMgVmFyaWFzaSBncmFkYXNpIEJpcnUNCikNCg0KIyAzLiBJbmlzaWFsaXNhc2kgUGxvdA0KZmlnIDwtIHBsb3RfbHkoKQ0KDQojIDQuIExvb3AgdW50dWsgTWVuYW1iYWhrYW4gR2FyaXMgSW50ZXJ2YWwNCmZvcihpIGluIDE6bnJvdyhkZl9rYXN1czEpKSB7DQogIGZpZyA8LSBmaWcgJT4lIGFkZF9zZWdtZW50cygNCiAgICB4ID0gZGZfa2FzdXMxJExvd2VyW2ldLCB4ZW5kID0gZGZfa2FzdXMxJFVwcGVyW2ldLA0KICAgIHkgPSBkZl9rYXN1czEkTGV2ZWxbaV0sIHllbmQgPSBkZl9rYXN1czEkTGV2ZWxbaV0sDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSBkZl9rYXN1czEkQ29sb3JbaV0sIHdpZHRoID0gMTIpLA0KICAgIG5hbWUgPSBwYXN0ZSgiTGV2ZWwiLCBkZl9rYXN1czEkTGV2ZWxbaV0pLA0KICAgICMgRklUVVIgSE9WRVIgVE9PTFRJUFMNCiAgICBob3ZlcmluZm8gPSAidGV4dCIsDQogICAgdGV4dCA9IHBhc3RlMCgiPGI+VGluZ2thdCBLZXBlcmNheWFhbjogIiwgZGZfa2FzdXMxJExldmVsW2ldLCAiPC9iPjxicj4iLA0KICAgICAgICAgICAgICAgICAgIk1ldG9kZTogRGlzdHJpYnVzaS1aIChTaWdtYSBEaWtldGFodWkpPGJyPiIsDQogICAgICAgICAgICAgICAgICAiUmF0YS1yYXRhOiAiLCBtZWFuX3ZhbCwgIiBtZW5pdDxicj4iLA0KICAgICAgICAgICAgICAgICAgIkJhd2FoOiAiLCBkZl9rYXN1czEkTG93ZXJbaV0sICIgbWVuaXQ8YnI+IiwNCiAgICAgICAgICAgICAgICAgICJBdGFzOiAiLCBkZl9rYXN1czEkVXBwZXJbaV0sICIgbWVuaXQiKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIHRpdGlrIE1lYW4gKFJhdGEtcmF0YSkgZGkgdGVuZ2FoIGdhcmlzDQogIGFkZF9tYXJrZXJzKA0KICAgIHggPSBtZWFuX3ZhbCwgeSA9IGRmX2thc3VzMSRMZXZlbFtpXSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gIndoaXRlIiwgc2l6ZSA9IDEwLCANCiAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gImJsYWNrIiwgd2lkdGggPSAxKSksDQogICAgc2hvd2xlZ2VuZCA9IEZBTFNFLA0KICAgIGhvdmVyaW5mbyA9ICJub25lIg0KICApDQp9DQoNCiMgNS4gS29uZmlndXJhc2kgTGF5b3V0IChTaGFwZXMgJiBMYWJlbHMpDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoDQogIHRpdGxlID0gbGlzdCh0ZXh0ID0gIjxiPkFuYWxpc2lzIEludGVyYWt0aWYgV2FrdHUgVVggKERpc3RyaWJ1c2ktWik8L2I+IiwgeSA9IDAuOTUpLA0KICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiV2FrdHUgUGVueWVsZXNhaWFuIChtZW5pdCkiLCByYW5nZSA9IGMoNy44LCA5LjEpKSwNCiAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlRpbmdrYXQgS2VwZXJjYXlhYW4iKSwNCiAgDQogICMgU0hBUEVTOiBHYXJpcyBiYW50dSB2ZXJ0aWthbCB1bnR1ayBNZWFuDQogIHNoYXBlcyA9IGxpc3QoDQogICAgbGlzdCgNCiAgICAgIHR5cGUgPSAibGluZSIsDQogICAgICB4MCA9IG1lYW5fdmFsLCB4MSA9IG1lYW5fdmFsLA0KICAgICAgeTAgPSAwLjUsIHkxID0gMy41LA0KICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAicmdiYSgwLCAwLCAwLCAwLjMpIiwgZGFzaCA9ICJkYXNoIiwgd2lkdGggPSAxLjUpDQogICAgKQ0KICApLA0KICANCiAgbGVnZW5kID0gbGlzdChvcmllbnRhdGlvbiA9ICJoIiwgeCA9IDAuNSwgeGFuY2hvciA9ICJjZW50ZXIiLCB5ID0gLTAuMiksDQogIG1hcmdpbiA9IGxpc3QobCA9IDgwLCByID0gNTAsIGIgPSA4MCwgdCA9IDEwMCksDQogIGhvdmVybW9kZSA9ICJjbG9zZXN0Ig0KKSAlPiUNCiAgYWRkX2Fubm90YXRpb25zKA0KICAgIHggPSBtZWFuX3ZhbCwgeSA9IDMuNywgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIG1lYW5fdmFsLCAibWVuaXQiKSwNCiAgICBzaG93YXJyb3cgPSBGQUxTRSwgZm9udCA9IGxpc3QoY29sb3IgPSAiZ3JheTMwIiwgc2l6ZSA9IDEyKQ0KICApDQoNCiMgNi4gVGFtcGlsa2FuIFBsb3QNCmZpZw0KYGBgDQo8L2Rpdj4NCg0KIyMgSW50ZXJwcmV0YXNpIEhhc2lsIGRhbGFtIEtvbnRla3MgQW5hbGlzaXMgQmlzbmlzDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiBpbnRlcnZhbCBrZXBlcmNheWFhbjoNCg0KICAxLiBTZW1ha2luIFRpbmdnaSBUaW5na2F0IEtlcGVyY2F5YWFuLCBTZW1ha2luIExlYmFyIEludGVydmFsbnlhOg0KDQogICAgICogUGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIDkwJSwga2l0YSBtZW1wZXJraXJha2FuIHJhdGEtcmF0YSB0cmFuc2Frc2kgaGFyaWFuIHBlciBwZW5nZ3VuYSBiZXJhZGEgYW50YXJhIDEyLjA3IGhpbmdnYSAxMy4xMy4gSW5pIGFkYWxhaCByZW50YW5nIHlhbmcgcmVsYXRpZiBzZW1waXQuDQoNCiAgICAgKiBQYWRhIHRpbmdrYXQga2VwZXJjYXlhYW4gOTklLCByZW50YW5nIG1lbGViYXIgbWVuamFkaSAxMS43OCBoaW5nZ2EgMTMuNDIuIEluaSBtZW5jZXJtaW5rYW4gYmFod2EgdW50dWsgbGViaWggeWFraW4gKDk5JSBwZXJjYXlhKSBiYWh3YSBpbnRlcnZhbCBraXRhIG1lbmdhbmR1bmcgcmF0YS1yYXRhIHBvcHVsYXNpIHlhbmcgc2ViZW5hcm55YSwga2l0YSBoYXJ1cyBtZW5lcmltYSByZW50YW5nIGVzdGltYXNpIHlhbmcgbGViaWggbHVhcy4NCg0KICAyLiBUcmFkZS1vZmYgYW50YXJhIFByZXNpc2kgZGFuIEtlcGVyY2F5YWFuOg0KDQogICAgICogUHJlc2lzaSAocmVudGFuZyBzZW1waXQpIGRpaW5naW5rYW4gZGFsYW0gYmlzbmlzIHVudHVrIG1lbWJ1YXQga2VwdXR1c2FuIHlhbmcgc3Blc2lmaWsuIE5hbXVuLCBwcmVzaXNpIHRpbmdnaSAobWlzYWxueWEsIDkwJSBDSSkgYmVyYXJ0aSBBbmRhIG1lbWlsaWtpIGtlcGVyY2F5YWFuIHlhbmcgc2VkaWtpdCBsZWJpaCByZW5kYWggYmFod2EgaW50ZXJ2YWwgdGVyc2VidXQgYmVuYXItYmVuYXIgbWVuY2FrdXAgbmlsYWkgcmF0YS1yYXRhIHBvcHVsYXNpLg0KDQogICAgICogS2VwZXJjYXlhYW4gKHByb2JhYmlsaXRhcyB0aW5nZ2kpIGJhaHdhIGludGVydmFsIEFuZGEgbWVuYW5na2FwIHBhcmFtZXRlciBwb3B1bGFzaSAobWlzYWxueWEsIDk5JSBDSSkgYmVyYXJ0aSBBbmRhIGhhcnVzIG1lbmVyaW1hIHJlbnRhbmcgZXN0aW1hc2kgeWFuZyBsZWJpaCBsdWFzLCB5YW5nIG11bmdraW4ga3VyYW5nICJzcGVzaWZpayIgZGFsYW0gcGVyZW5jYW5hYW4gYmlzbmlzLg0KDQogIDMuIEltcGxpa2FzaSBCaXNuaXM6DQoNCiAgICAgKiBQbGF0Zm9ybSBlLWNvbW1lcmNlIGRhcGF0IG1lbnlhdGFrYW4gZGVuZ2FuIDk1JSBrZXBlcmNheWFhbiBiYWh3YSByYXRhLXJhdGEgdHJhbnNha3NpIGhhcmlhbiBwZXIgcGVuZ2d1bmEgc2V0ZWxhaCBtZWx1bmN1cmthbiBmaXR1ciBiYXJ1IGJlcmFkYSBkaSBhbnRhcmEgMTEuOTcgZGFuIDEzLjIzLg0KDQogICAgICogTWFuYWplbWVuIGRhcGF0IG1lbmdndW5ha2FuIHJlbnRhbmcgaW5pIHVudHVrIHBlcmVuY2FuYWFuLiBNaXNhbG55YSwgamlrYSB0YXJnZXQga2luZXJqYSBmaXR1ciBiYXJ1IGFkYWxhaCBtaW5pbWFsIDEyIHRyYW5zYWtzaSBwZXIgcGVuZ2d1bmEsIGludGVydmFsIDk1JSBtYXNpaCBtZW51bmp1a2thbiBrZW11bmdraW5hbiBiYWh3YSByYXRhLXJhdGEgc2VzdW5nZ3VobnlhIHNlZGlraXQgZGkgYmF3YWggMTIgKHdhbGF1cHVuIDExLjk3IHNhbmdhdCBkZWthdCkuIEludGVydmFsIDk5JSBiYWhrYW4gbWVudW5qdWtrYW4ga2VtdW5na2luYW4geWFuZyBsZWJpaCB0aW5nZ2kgdW50dWsgcmF0YS1yYXRhIGRpIGJhd2FoIDEyLg0KDQogICAgICogSmlrYSBwZXJ1c2FoYWFuIG1lbWJ1dHVoa2FuIGtlcGFzdGlhbiB5YW5nIHNhbmdhdCB0aW5nZ2kgKDk5JSkgbWVuZ2VuYWkgZGFtcGFrbnlhLCBtZXJla2EgaGFydXMgbWVueWFkYXJpIGJhaHdhIHJhdGEtcmF0YSB0cmFuc2Frc2kgYmlzYSBzZXJlbmRhaCAxMS43OCBhdGF1IHNldGluZ2dpIDEzLjQyLCBtZW1iZXJpa2FuIHJlbnRhbmcgcGVya2lyYWFuIHlhbmcgbGViaWggYmVzYXIgdW50dWsgc2tlbmFyaW8gdGVyYnVydWsgZGFuIHRlcmJhaWsuDQoNClNpbmdrYXRueWEsIGZpdHVyIGJhcnUgaW5pIHRhbXBha255YSBtZW1pbGlraSByYXRhLXJhdGEgdHJhbnNha3NpIHlhbmcgY3VrdXAgYmFpaywgZGVuZ2FuIHBlcmtpcmFhbiB0ZXJiYWlrIG1lbmRla2F0aSAxMi42LiBQZW1pbGloYW4gdGluZ2thdCBrZXBlcmNheWFhbiBha2FuIGJlcmdhbnR1bmcgcGFkYSBzZWJlcmFwYSBrb25zZXJ2YXRpZiBhdGF1IGFncmVzaWYgbWFuYWplbWVuIGluZ2luIG1lbGloYXQgcG90ZW5zaSBkYW1wYWsgZml0dXIgaW5pLg0KPC9kaXY+DQoNCiMgU3R1ZGkgS2FzdXMgMg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdW50dWsgTWVhbiwgJFxzaWdtYSQgVGlkYWsgRGlrZXRhaHVpOiBUaW0gUmlzZXQgVVggKFVzZXIgRXhwZXJpZW5jZSkgbWVuZ2FuYWxpc2lzIHdha3R1IHBlbnllbGVzYWlhbiB0dWdhcyAoZGFsYW0gbWVuaXQpIHVudHVrIGFwbGlrYXNpIHNlbHVsZXIgYmFydS4gRGF0YSBkaWt1bXB1bGthbiBkYXJpIDEyIHBlbmdndW5hOg0KDQogICQ4LjQsIDcuOSwgOS4xLCA4LjcsIDguMiwgOS4wLCA3LjgsIDguNSwgOC45LCA4LjEsIDguNiwgOC4zJA0KDQoqKlR1Z2FzKioNCg0KMS4gSWRlbnRpZmlrYXNpIHVqaSBzdGF0aXN0aWsgeWFuZyB0ZXBhdCBkYW4gamVsYXNrYW4gYWxhc2FubnlhLg0KMi4gSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHVudHVrOiANCiAgICogJDkwXCUkIA0KICAgKiAkOTVcJSQgIA0KICAgKiAkOTlcJSQNCjMuIFZpc3VhbGlzYXNpa2FuIGtldGlnYSBpbnRlcnZhbCB0ZXJzZWJ1dCBkYWxhbSBzYXR1IHBsb3QuDQo0LiBKZWxhc2thbiBiYWdhaW1hbmEgdWt1cmFuIHNhbXBlbCBkYW4gdGluZ2thdCBrZXBlcmNheWFhbiBtZW1lbmdhcnVoaSBsZWJhciBpbnRlcnZhbC4NCg0KPC9kaXY+DQoNCiMjIElkZW50aWZpa2FzaSBVamkgU3RhdGlzdGlrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpVamkgc3RhdGlzdGlrIHlhbmcgdGVwYXQgdW50dWsga2FzdXMgaW5pIGFkYWxhaCBEaXN0cmlidXNpIHQtU3R1ZGVudCAodC1kaXN0cmlidXRpb24pLg0KDQpBbGFzYW5ueWE6DQoNCiogU3RhbmRhciBEZXZpYXNpIFBvcHVsYXNpICgkXHNpZ21hJCkgVGlkYWsgRGlrZXRhaHVpOiBLaXRhIGhhbnlhIG1lbWlsaWtpIGRhdGEgc2FtcGVsIHVudHVrIG1lbmdoaXR1bmcgc3RhbmRhciBkZXZpYXNpIHNhbXBlbCAoJHMkKS4NCiogVWt1cmFuIFNhbXBlbCBLZWNpbDogSnVtbGFoIHNhbXBlbCAkbiA9IDEyJCAoa3VyYW5nIGRhcmkgMzApLg0KKiBBc3Vtc2k6IEtpdGEgbWVuZ2FzdW1zaWthbiB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgdGVyZGlzdHJpYnVzaSBzZWNhcmEgbm9ybWFsLg0KPC9kaXY+DQoNCiMjIFBlcmhpdHVuZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpSdW11cyB5YW5nIGRpZ3VuYWthbiBhZGFsYWg6DQoNCiQkQ0kgPSBcYmFye3h9IFxwbSB0X3tcYWxwaGEvMiwgZGZ9IFx0aW1lcyBcbGVmdCggXGZyYWN7c317XHNxcnR7bn19IFxyaWdodCkkJA0KMS4gVW50dWsgVGluZ2thdCBLZXBlcmNheWFhbiA5MCUNCg0KICAgKiAoJFxhbHBoYSA9IDAuMTAkKSRcYWxwaGEvMiA9IDAuMDUkDQogICANCiAgICogTmlsYWkga3JpdGlzICR0X3swLjA1LCAxMX0gPSAxLjc5NiQNCiAgIA0KICAgKiBQZXJoaXR1bmdhbjoNCiQkQ0kgPSA4LjQ1OCBccG0gMS43OTYgXHRpbWVzIFxsZWZ0KCBcZnJhY3swLjQxMn17XHNxcnR7MTJ9fSBccmlnaHQpJCQkJENJID0gOC40NTggXHBtIDEuNzk2IFx0aW1lcyAwLjExOSQkJCRDSSA9IDguNDU4IFxwbSAwLjIxMzckJA0KDQogICAqIEhhc2lsOiAoOC4yNDQsIDguNjcyKQ0KICAgDQoyLiBVbnR1ayBUaW5na2F0IEtlcGVyY2F5YWFuIDk1JSANCg0KICAgKiAoJFxhbHBoYSA9IDAuMDUkKSRcYWxwaGEvMiA9IDAuMDI1JA0KICAgDQogICAqIE5pbGFpIGtyaXRpcyAkdF97MC4wMjUsIDExfSA9IDIuMjAxJA0KICAgDQogICAqIFBlcmhpdHVuZ2FuOg0KICAgJCRDSSA9IDguNDU4IFxwbSAyLjIwMSBcdGltZXMgXGxlZnQoIFxmcmFjezAuNDEyfXtcc3FydHsxMn19IFxyaWdodCkkJCQkQ0kgPSA4LjQ1OCBccG0gMi4yMDEgXHRpbWVzIDAuMTE5JCQkJENJID0gOC40NTggXHBtIDAuMjYxOSQkDQogICANCiAgICogSGFzaWw6ICg4LjE5NiwgOC43MjApDQogICANCjMuIFVudHVrIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTklIA0KDQogICAqICgkXGFscGhhID0gMC4wMSQpJFxhbHBoYS8yID0gMC4wMDUkDQogIA0KICAgKiBOaWxhaSBrcml0aXMgJHRfezAuMDA1LCAxMX0gPSAzLjEwNiQNCiAgDQogICAqIFBlcmhpdHVuZ2FuOg0KICAgJCRDSSA9IDguNDU4IFxwbSAzLjEwNiBcdGltZXMgXGxlZnQoIFxmcmFjezAuNDEyfXtcc3FydHsxMn19IFxyaWdodCkkJCQkQ0kgPSA4LjQ1OCBccG0gMy4xMDYgXHRpbWVzIDAuMTE5JCQkJENJID0gOC40NTggXHBtIDAuMzY5NiQkDQogIA0KICAgKiBIYXNpbDogKDguMDg4LCA4LjgyOCkNCiAgIA0KKipSaW5na2FzYW4gSW50ZXJ2YWwgS2VwZXJjYXlhYW4qKg0KDQp8IFRpbmdrYXQgS2VwZXJjYXlhYW4gfCBOaWxhaSBLcml0aXMgKHQpIHwgTWFyZ2luIG9mIEVycm9yIHwgUmVudGFuZyBJbnRlcnZhbChNZW5pdCkgfA0KfDotLS18Oi0tLXw6LS0tfDotLS18DQp8IDkwJSB8ICQxLjc5NiQgfCAkMC4yMTQkIHwgKDguMjQ0LCA4LjY3MikgfCANCjk1JSB8ICQyLjIwMSQgfCAkMC4yNjIkIHwgKDguMTk2LCA4LjcyMCkgfCANCjk5JSB8ICQzLjEwNiQgfCAkMC4zNzAkIHwgKDguMDg4LCA4LjgyOCkgfA0KDQo8L2Rpdj4NCg0KIyMgVmlzdWFsaXNhc2kgSW50ZXJ2YWwgS2VwZXJjYXlhYW4NCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyAxLiBMb2FkIExpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIDIuIFBlcnNpYXBhbiBEYXRhIChIYXNpbCBQZXJoaXR1bmdhbiBLYXN1cyAyKQ0KIyBSYXRhLXJhdGEgKG1lYW4pID0gOC40NTgNCiMgZGYgPSAxMSwgU0UgPSAwLjEyMw0KbWVhbl92YWwgPC0gOC40NTgNCmRmX2thc3VzMiA8LSBkYXRhLmZyYW1lKA0KICBMZXZlbCA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIExvd2VyID0gYyg4LjIzNywgOC4xODcsIDguMDc2KSwgIyBCYXRhcyBiYXdhaCBtZW5nZ3VuYWthbiB0LXNjb3JlDQogIFVwcGVyID0gYyg4LjY3OSwgOC43MjksIDguODQwKSwgIyBCYXRhcyBhdGFzIG1lbmdndW5ha2FuIHQtc2NvcmUNCiAgQ29sb3IgPSBjKCIjMWFiYzljIiwgIiMzNDk4ZGIiLCAiIzliNTliNiIpICMgVG9zY2EsIEJpcnUsIFVuZ3UNCikNCg0KIyAzLiBJbmlzaWFsaXNhc2kgUGxvdA0KZmlnIDwtIHBsb3RfbHkoKQ0KDQojIDQuIExvb3AgdW50dWsgTWVuYW1iYWhrYW4gR2FyaXMgSW50ZXJ2YWwNCmZvcihpIGluIDE6bnJvdyhkZl9rYXN1czIpKSB7DQogIGZpZyA8LSBmaWcgJT4lIGFkZF9zZWdtZW50cygNCiAgICB4ID0gZGZfa2FzdXMyJExvd2VyW2ldLCB4ZW5kID0gZGZfa2FzdXMyJFVwcGVyW2ldLA0KICAgIHkgPSBkZl9rYXN1czIkTGV2ZWxbaV0sIHllbmQgPSBkZl9rYXN1czIkTGV2ZWxbaV0sDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSBkZl9rYXN1czIkQ29sb3JbaV0sIHdpZHRoID0gMTIpLA0KICAgIG5hbWUgPSBwYXN0ZSgiTGV2ZWwiLCBkZl9rYXN1czIkTGV2ZWxbaV0pLA0KICAgICMgRklUVVIgSE9WRVIgVE9PTFRJUFMNCiAgICBob3ZlcmluZm8gPSAidGV4dCIsDQogICAgdGV4dCA9IHBhc3RlMCgiPGI+VGluZ2thdCBLZXBlcmNheWFhbjogIiwgZGZfa2FzdXMyJExldmVsW2ldLCAiPC9iPjxicj4iLA0KICAgICAgICAgICAgICAgICAgIk1ldG9kZTogRGlzdHJpYnVzaS10IChkZj0xMSk8YnI+IiwNCiAgICAgICAgICAgICAgICAgICJSYXRhLXJhdGE6ICIsIG1lYW5fdmFsLCAiIG1lbml0PGJyPiIsDQogICAgICAgICAgICAgICAgICAiQmF3YWg6ICIsIGRmX2thc3VzMiRMb3dlcltpXSwgIiBtZW5pdDxicj4iLA0KICAgICAgICAgICAgICAgICAgIkF0YXM6ICIsIGRmX2thc3VzMiRVcHBlcltpXSwgIiBtZW5pdCIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gdGl0aWsgTWVhbiAoUmF0YS1yYXRhKSBkaSB0ZW5nYWggZ2FyaXMNCiAgYWRkX21hcmtlcnMoDQogICAgeCA9IG1lYW5fdmFsLCB5ID0gZGZfa2FzdXMyJExldmVsW2ldLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMTAsIA0KICAgICAgICAgICAgICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAiYmxhY2siLCB3aWR0aCA9IDEpKSwNCiAgICBzaG93bGVnZW5kID0gRkFMU0UsDQogICAgaG92ZXJpbmZvID0gIm5vbmUiDQogICkNCn0NCg0KIyA1LiBLb25maWd1cmFzaSBMYXlvdXQgKFNoYXBlcyAmIExhYmVscykNCmZpZyA8LSBmaWcgJT4lIGxheW91dCgNCiAgdGl0bGUgPSBsaXN0KHRleHQgPSAiPGI+QW5hbGlzaXMgSW50ZXJha3RpZiBXYWt0dSBVWCAoRGlzdHJpYnVzaS10KTwvYj4iLCB5ID0gMC45NSksDQogIHhheGlzID0gbGlzdCh0aXRsZSA9ICJXYWt0dSBQZW55ZWxlc2FpYW4gKG1lbml0KSIsIHJhbmdlID0gYyg3LjgsIDkuMSkpLA0KICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiVGluZ2thdCBLZXBlcmNheWFhbiIpLA0KICANCiAgIyBTSEFQRVM6IEdhcmlzIGJhbnR1IHZlcnRpa2FsIHVudHVrIE1lYW4gdXRhbWENCiAgc2hhcGVzID0gbGlzdCgNCiAgICBsaXN0KA0KICAgICAgdHlwZSA9ICJsaW5lIiwNCiAgICAgIHgwID0gbWVhbl92YWwsIHgxID0gbWVhbl92YWwsDQogICAgICB5MCA9IDAuNSwgeTEgPSAzLjUsDQogICAgICBsaW5lID0gbGlzdChjb2xvciA9ICJyZ2JhKDAsIDAsIDAsIDAuMykiLCBkYXNoID0gImRhc2giLCB3aWR0aCA9IDEuNSkNCiAgICApDQogICksDQogIA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gMTAwKSwNCiAgaG92ZXJtb2RlID0gImNsb3Nlc3QiDQopICU+JQ0KICAjIE1lbmFtYmFoa2FuIGFub3Rhc2kgdGVrcyB1bnR1ayBNZWFuDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbWVhbl92YWwsIHkgPSAzLjcsIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCBtZWFuX3ZhbCwgIm1lbml0IiksDQogICAgc2hvd2Fycm93ID0gRkFMU0UsIGZvbnQgPSBsaXN0KGNvbG9yID0gImdyYXkzMCIsIHNpemUgPSAxMikNCiAgKQ0KDQojIDYuIFRhbXBpbGthbiBQbG90DQpmaWcNCg0KYGBgDQoNCg0KUGFkYSBwbG90IHlhbmcgZGl0YW1waWxrYW46DQoNCiogU2V0aWFwIGdhcmlzIGhvcml6b250YWwgbWVyZXByZXNlbnRhc2lrYW4gc2F0dSBpbnRlcnZhbCBrZXBlcmNheWFhbi4NCg0KKiBUaXRpayBkaSB0ZW5nYWggYWRhbGFoIHJhdGEtcmF0YSBzYW1wZWwuDQoNCiogVGVybGloYXQgamVsYXMgYmFod2EgaW50ZXJ2YWwgOTklIHBhbGluZyBsZWJhciwgZGlpa3V0aSA5NSUsIGxhbHUgOTAlLg0KPC9kaXY+DQoNCiMjIEFuYWxpc2lzIFBlbmdhcnVoIFZhcmlhYmVsDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpBLiBQZW5nYXJ1aCBUaW5na2F0IEtlcGVyY2F5YWFuOlNlbWFraW4gdGluZ2dpIHRpbmdrYXQga2VwZXJjYXlhYW4gKG1pc2FsIGRhcmkgOTAlIGtlIDk5JSksIG1ha2EgaW50ZXJ2YWwgYWthbiBzZW1ha2luIGxlYmFyLiBIYWwgaW5pIGthcmVuYSBraXRhIG1lbWJ1dHVoa2FuIHJlbnRhbmcgbmlsYWkgeWFuZyBsZWJpaCBiZXNhciBhZ2FyIGtpdGEgImxlYmloIHlha2luIiBiYWh3YSBwYXJhbWV0ZXIgcG9wdWxhc2kgeWFuZyBzZWJlbmFybnlhIGJlcmFkYSBkaSBkYWxhbSByZW50YW5nIHRlcnNlYnV0Lg0KDQpCLiBQZW5nYXJ1aCBVa3VyYW4gU2FtcGVsICgkbiQpOk1lc2tpcHVuIGRhbGFtIGthc3VzIGluaSAkbiQgdGV0YXAgKDEyKSwgc2VjYXJhIHRlb3JpOiBzZW1ha2luIGJlc2FyIHVrdXJhbiBzYW1wZWwsIG1ha2EgaW50ZXJ2YWwgYWthbiBzZW1ha2luIHNlbXBpdC4gSGFsIGluaSB0ZXJqYWRpIGthcmVuYSBuaWxhaSBwZW1iYWdpIGRhbGFtIHJ1bXVzIFN0YW5kYXIgRXJyb3IgKCRcc3FydHtufSQpIG1lbmphZGkgbGViaWggYmVzYXIsIHlhbmcgbWVuZ3VyYW5naSBrZXRpZGFrcGFzdGlhbiAoZXJyb3IpIGRhbGFtIGVzdGltYXNpIGtpdGEuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyAzDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpJbnRlcnZhbCBLZXBlcmNheWFhbiB1bnR1ayBQcm9wb3JzaSwgQS9CIFRlc3Rpbmc6IFNlYnVhaCB0aW0gc2FpbnMgZGF0YSBtZW5qYWxhbmthbiB1amkgQS9CIHBhZGEgZGVzYWluIHRvbWJvbCBDYWxsLVRvLUFjdGlvbiAoQ1RBKSB5YW5nIGJhcnUuIEVrc3BlcmltZW4gbWVuZ2hhc2lsa2FuOg0KDQogICRuJCA9IDQwMCAoVG90YWwgcGVuZ2d1bmEpDQogIA0KICAkeCQgPSAxNTYgKFBlbmdndW5hIHlhbmcgbWVuZ2tsaWsgQ1RBKQ0KDQpUdWdhczoNCg0KMS4gSGl0dW5nIHByb3BvcnNpIHNhbXBlbCAkXGhhdHtwfSQuDQoyLiBIaXR1bmcgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdW50dWsgcHJvcG9yc2kgcGFkYSB0aW5na2F0OiANCiAgICogJDkwXCUkIA0KICAgKiAkOTVcJSQgDQogICAqICQ5OVwlJA0KMy4gVmlzdWFsaXNhc2lrYW4gZGFuIGJhbmRpbmdrYW4ga2V0aWdhIGludGVydmFsIHRlcnNlYnV0Lg0KNC4gSmVsYXNrYW4gYmFnYWltYW5hIHRpbmdrYXQga2VwZXJjYXlhYW4gbWVtZW5nYXJ1aGkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGRhbGFtIGVrc3BlcmltZW4gcHJvZHVrLg0KDQo8L2Rpdj4NCg0KIyMgUHJvcG9yc2kgU2FtcGVsICgkXGhhdHtwfSQpDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpEaWtldGFodWk6DQoNCiogVG90YWwgcGVuZ2d1bmE6ICRuJD00MDANCg0KKiBQZW5nZ3VuYSBrbGlrIENUQTogJHgkPTE1Ng0KDQpQcm9wb3JzaSBzYW1wZWwgOiANCiQkXGhhdHtwfSA9IFxmcmFje3h9e259ID0gXGZyYWN7MTU2fXs0MDB9ID0gMC4zOSQkDQpJbnRlcnByZXRhc2k6DQoNClNla2l0YXIgMzklIHBlbmdndW5hIG1lbmdrbGlrIHRvbWJvbCBDVEEgcGFkYSBkZXNhaW4geWFuZyBkaXVqaS4NCjwvZGl2Pg0KDQojIyBQZXJoaXR1bmdhbiBJbnRlcnZhbCBLZXBlcmNheWFhbiB1bnR1ayBQcm9wb3JzaQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KUnVtdXMgeWFuZyBkaWd1bmFrYW4gYWRhbGFoOg0KJCRDSSA9IFxoYXR7cH0gXHBtIHpfe1xhbHBoYS8yfSBcdGltZXMgXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0kJA0KRGkgbWFuYSBTdGFuZGFyZCBFcnJvciAoJFNFJCkgYWRhbGFoOiQkU0UgPSBcc3FydHtcZnJhY3swLjM5KDEtMC4zOSl9ezQwMH19ID0gXHNxcnR7XGZyYWN7MC4zOSBcdGltZXMgMC42MX17NDAwfX0gXGFwcHJveCAwLjAyNDM5JCQNCg0KMS4gSW50ZXJ2YWwgS2VwZXJjYXlhYW4gOTAlICgkeiA9IDEuNjQ1JCkNCiAgIA0KICAgKiBNYXJnaW4gb2YgRXJyb3I6ICQxLjY0NSBcdGltZXMgMC4wMjQzOSBcYXBwcm94IDAuMDQwMSQNCiAgICogSW50ZXJ2YWw6ICgwLjM0OTksIDAuNDMwMSkgYXRhdSAzNC45OSUgLSA0My4wMSUNCiAgIA0KMi4gSW50ZXJ2YWwgS2VwZXJjYXlhYW4gOTUlICgkeiA9IDEuOTYkKQ0KDQogICAqIE1hcmdpbiBvZiBFcnJvcjogJDEuOTYgXHRpbWVzIDAuMDI0MzkgXGFwcHJveCAwLjA0NzgkDQogICAqIEludGVydmFsOiAoMC4zNDIyLCAwLjQzNzgpIGF0YXUgMzQuMjIlIC0gNDMuNzglDQogICANCjMuIEludGVydmFsIEtlcGVyY2F5YWFuIDk5JSAoJHogPSAyLjU3NiQpDQoNCiAgICogTWFyZ2luIG9mIEVycm9yOiAkMi41NzYgXHRpbWVzIDAuMDI0MzkgXGFwcHJveCAwLjA2MjgkDQogICAqIEludGVydmFsOiAoMC4zMjcyLCAwLjQ1MjgpIGF0YXUgMzIuNzIlIC0gNDUuMjglDQogICANCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBkYW4gUGVyYmFuZGluZ2FuDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgMS4gTG9hZCBMaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyAyLiBQZXJzaWFwYW4gRGF0YSAoSGFzaWwgUGVyaGl0dW5nYW4gS2FzdXMgMykNCnBfaGF0IDwtIDAuMzkNCmxldmVscyA8LSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpDQpiYXdhaCA8LSBjKDAuMzQ5OSwgMC4zNDIyLCAwLjMyNzIpDQphdGFzICA8LSBjKDAuNDMwMSwgMC40Mzc4LCAwLjQ1MjgpDQpjb2xvcnMgPC0gYygiIzM0OThkYiIsICIjZTY3ZTIyIiwgIiNlNzRjM2MiKQ0KDQojIDMuIEluaXNpYWxpc2FzaSBQbG90DQpmaWcgPC0gcGxvdF9seSgpDQoNCiMgNC4gTG9vcCB1bnR1ayBNZW5hbWJhaGthbiBHYXJpcyBJbnRlcnZhbA0KZm9yKGkgaW4gMTozKSB7DQogIGZpZyA8LSBmaWcgJT4lIGFkZF9zZWdtZW50cygNCiAgICB4ID0gYmF3YWhbaV0sIHhlbmQgPSBhdGFzW2ldLA0KICAgIHkgPSBsZXZlbHNbaV0sIHllbmQgPSBsZXZlbHNbaV0sDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSBjb2xvcnNbaV0sIHdpZHRoID0gMTIpLA0KICAgIG5hbWUgPSBwYXN0ZSgiTGV2ZWwiLCBsZXZlbHNbaV0pLA0KICAgICMgRklUVVIgSE9WRVIgVE9PTFRJUFMNCiAgICBob3ZlcmluZm8gPSAidGV4dCIsDQogICAgdGV4dCA9IHBhc3RlMCgiPGI+VGluZ2thdCBLZXBlcmNheWFhbjogIiwgbGV2ZWxzW2ldLCAiPC9iPjxicj4iLA0KICAgICAgICAgICAgICAgICAgIlByb3BvcnNpIFNhbXBlbDogIiwgcF9oYXQgKiAxMDAsICIlPGJyPiIsDQogICAgICAgICAgICAgICAgICAiUmVudGFuZzogIiwgcm91bmQoYmF3YWhbaV0qMTAwLCAyKSwgIiUgLSAiLCByb3VuZChhdGFzW2ldKjEwMCwgMiksICIlIikNCiAgKQ0KfQ0KDQojIDUuIEtvbmZpZ3VyYXNpIExheW91dCAoTWVuYW1iYWhrYW4gU2hhcGUgTGlzdCAmIExhYmVsKQ0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KA0KICB0aXRsZSA9IGxpc3QodGV4dCA9ICI8Yj5BbmFsaXNpcyBJbnRlcmFrdGlmIFByb3BvcnNpIENUQSBCYXJ1IChBL0IgVGVzdCk8L2I+IiwgeSA9IDAuOTUpLA0KICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2xpY2stVGhyb3VnaCBSYXRlIChDVFIpIiwgdGlja2Zvcm1hdCA9ICIuMSUiLCByYW5nZSA9IGMoMC4zMCwgMC41MCkpLA0KICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiQ29uZmlkZW5jZSBMZXZlbCIpLA0KICANCiAgIyBTSEFQRVM6IEdhcmlzIGJhbnR1IHZlcnRpa2FsIHVudHVrIHAtaGF0DQogIHNoYXBlcyA9IGxpc3QoDQogICAgbGlzdCgNCiAgICAgIHR5cGUgPSAibGluZSIsDQogICAgICB4MCA9IHBfaGF0LCB4MSA9IHBfaGF0LA0KICAgICAgeTAgPSAwLCB5MSA9IDMuNSwNCiAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gInJnYmEoMTI4LCAxMjgsIDEyOCwgMC41KSIsIGRhc2ggPSAiZGFzaCIsIHdpZHRoID0gMikNCiAgICApDQogICksDQogIA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gMTAwKSwNCiAgaG92ZXJtb2RlID0gImNsb3Nlc3QiDQopICU+JQ0KICAjIE1lbmFtYmFoa2FuIGFub3Rhc2kgdGVrcyB1bnR1ayBwLWhhdA0KICBhZGRfYW5ub3RhdGlvbnMoDQogICAgeCA9IHBfaGF0LCB5ID0gMy43LCB0ZXh0ID0gcGFzdGUoIkVzdGltYXNpIHV0YW1hIChwLWhhdCk6IiwgcF9oYXQqMTAwLCAiJSIpLA0KICAgIHNob3dhcnJvdyA9IEZBTFNFLCBmb250ID0gbGlzdChjb2xvciA9ICJncmF5NjAiLCBzaXplID0gMTIpDQogICkNCg0KIyA2LiBUYW1waWxrYW4gUGxvdA0KZmlnDQpgYGANCg0KDQpQZXJiYW5kaW5nYW46IFNlbWFraW4gdGluZ2dpIHRpbmdrYXQga2VwZXJjYXlhYW4sIHJlbnRhbmcgaW50ZXJ2YWwgc2VtYWtpbiBsZWJhci4gSGFsIGluaSB0ZXJqYWRpIGthcmVuYSB1bnR1ayBtZW5kYXBhdGthbiBrZXBhc3RpYW4geWFuZyBsZWJpaCB0aW5nZ2kgKDk5JSksIGtpdGEgaGFydXMgbWVtcGVybHVhcyByZW50YW5nIGVzdGltYXNpIGFnYXIgbmlsYWkgcG9wdWxhc2kgeWFuZyBzZWJlbmFybnlhIHRpZGFrICJsdXB1dCIuDQo8L2Rpdj4NCg0KIyMgUGVuZ2FydWggcGFkYSBQZW5nYW1iaWxhbiBLZXB1dHVzYW4gUHJvZHVrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpEYWxhbSBla3NwZXJpbWVuIHByb2R1ayAoQS9CIFRlc3RpbmcpLCB0aW5na2F0IGtlcGVyY2F5YWFuIHNhbmdhdCBtZW1lbmdhcnVoaSByaXNpa28gYmlzbmlzOg0KDQoqIFRpbmdrYXQgS2VwZXJjYXlhYW4gVGluZ2dpICg5OSUpOiBEaWd1bmFrYW4gdW50dWsga2VwdXR1c2FuIHlhbmcgYmVyaXNpa28gdGluZ2dpIGF0YXUgbWFoYWwuIE1pc2FsbnlhLCBqaWthIG1lbmdnYW50aSBkZXNhaW4gQ1RBIG1lbWJ1dHVoa2FuIGJpYXlhIHBlbmdlbWJhbmdhbiB5YW5nIGJlc2FyLCB0aW0gYWthbiBtZW1pbGloIDk5JSB1bnR1ayBtZW1hc3Rpa2FuIGtlbmFpa2FuIGtvbnZlcnNpIGJ1a2FuIGthcmVuYSBmYWt0b3Iga2ViZXR1bGFuLg0KDQoqIFRpbmdrYXQgS2VwZXJjYXlhYW4gU3RhbmRhciAoOTUlKTogTWVydXBha2FuIHN0YW5kYXIgaW5kdXN0cmkuIE1lbWJlcmlrYW4ga2VzZWltYmFuZ2FuIHlhbmcgYmFpayBhbnRhcmEga2VwYXN0aWFuIHN0YXRpc3RpayBkYW4ga2VjZXBhdGFuIHBlbmdhbWJpbGFuIGtlcHV0dXNhbi4NCg0KKiBEYW1wYWsgcGFkYSBLZXB1dHVzYW46IEppa2EgaW50ZXJ2YWwga2VwZXJjYXlhYW4gZGVzYWluIGJhcnUgKDM0JSAtIDQzJSkgdGlkYWsgdHVtcGFuZyB0aW5kaWggKG92ZXJsYXApIGRlbmdhbiBpbnRlcnZhbCBkZXNhaW4gbGFtYSAobWlzYWwgMjAlIC0gMjUlKSwgbWFrYSBraXRhIGJpc2EgZGVuZ2FuIHlha2luIG1lbXV0dXNrYW4gdW50dWsgcm9sbC1vdXQgZGVzYWluIGJhcnUuIE5hbXVuLCBqaWthIGFkYSBvdmVybGFwLCBraXRhIG11bmdraW4gYnV0dWggdWt1cmFuIHNhbXBlbCAoJG4kKSB5YW5nIGxlYmloIGJlc2FyIGF0YXUgbWVuamFsYW5rYW4gdGVzIGxlYmloIGxhbWEuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyA0DQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpQZXJiYW5kaW5nYW4gUHJlc2lzaSAoVWppLVogdnMgVWppLXQpOiBEdWEgdGltIGRhdGEgbWVuZ3VrdXIgbGF0ZW5zaSBBUEkgKGRhbGFtIG1pbGlkZXRpaykgZGkgYmF3YWgga29uZGlzaSB5YW5nIGJlcmJlZGEuDQoNClRpbSBBOg0KDQogICRuJCA9IDM2IChVa3VyYW4gc2FtcGVsKQ0KICANCiAgJFxiYXJ7eH0kPSAyMTAgKFJhdGEtcmF0YSBzYW1wZWwpDQogIA0KICAkXHNpZ21hJCA9IDI0IChTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgZGlrZXRhaHVpKQ0KICANClRpbSBCOg0KDQogICRuJCA9IDM2IChVa3VyYW4gc2FtcGVsKQ0KICANCiAgJFxiYXJ7eH0kID0gMjEwIChSYXRhLXJhdGEgc2FtcGVsKQ0KICANCiAgJHMkID0gMjQgKFN0YW5kYXIgZGV2aWFzaSBzYW1wZWwpDQoNClR1Z2FzOg0KDQoxLiBJZGVudGlmaWthc2kgdWppIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiBvbGVoIG1hc2luZy1tYXNpbmcgdGltLg0KMi4gSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHVudHVrIA0KICAgKiAkOTBcJSQgDQogICAqICQ5NVwlJCANCiAgICogJDk5XCUkLg0KMy4gQnVhdCB2aXN1YWxpc2FzaSB5YW5nIG1lbWJhbmRpbmdrYW4gc2VtdWEgaW50ZXJ2YWwgdGVyc2VidXQuDQo0LiBKZWxhc2thbiBtZW5nYXBhIGxlYmFyIGludGVydmFsIGJlcmJlZGEsIG1lc2tpcHVuIGRhdGEgeWFuZyBkaWd1bmFrYW4gc2VydXBhLg0KPC9kaXY+DQoNCiMjIElkZW50aWZpa2FzaSBVamkgU3RhdGlzdGlrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQoqIFRpbSBBIG1lbmdndW5ha2FuIFVqaS1aIChOb3JtYWwgRGlzdHJpYnV0aW9uKTogS2FyZW5hIHVrdXJhbiBzYW1wZWwgc3VkYWggbWVuY3VrdXBpICgkbiBcZ2VxIDMwJCkgZGFuIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpIGRpa2V0YWh1aS4NCg0KVWppIHlhbmcgZGlndW5ha2FuOiBVamktWiAoWi1pbnRlcnZhbCkNCiQkQ0kgPSBcYmFye3h9IFxwbSB6X3tcYWxwaGEvMn0gXGxlZnQoIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxyaWdodCkkJA0KDQoqIFRpbSBCIG1lbmdndW5ha2FuIFVqaS10IChTdHVkZW50J3MgdC1EaXN0cmlidXRpb24pOiBLYXJlbmEgbWVza2lwdW4gdWt1cmFuIHNhbXBlbCBjdWt1cCwgdGltIGluaSBoYW55YSBtZW5nZXRhaHVpIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKCRzJCksIGJ1a2FuIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaS4NCg0KVWppIHlhbmcgZGlndW5ha2FuOiBVamktdCAodC1pbnRlcnZhbCkNCiQkQ0kgPSBcYmFye3h9IFxwbSB0X3tcYWxwaGEvMiwgZGZ9IFx0aW1lcyBcbGVmdCggXGZyYWN7c317XHNxcnR7bn19IFxyaWdodCkkJA0KPC9kaXY+DQoNCiMjIFBlcmhpdHVuZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuIChDSSkNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCktlZHVhIHRpbSBtZW1pbGlraSAkXGJhcnt4fSA9IDIxMCQsICRuID0gMzYkLCBkYW4gYW5na2EgZGV2aWFzaSAkMjQkLlN0YW5kYXJkIEVycm9yIChTRSkgdW50dWsga2VkdWFueWEgYWRhbGFoOiAkU0UgPSBcZnJhY3syNH17XHNxcnR7MzZ9fSA9IFxmcmFjezI0fXs2fSA9IDQkLg0KDQoqKlRpbSBBIChVamktWikqKg0KDQpSdW11czogJENJID0gXGJhcnt4fSBccG0gKHpfe1xhbHBoYS8yfSBcdGltZXMgU0UpJA0KDQoqICQ5MFwlJCAoej0xLjY0NSk6ICQyMTAgXHBtICgxLjY0NSBcdGltZXMgNCkgPSAyMTAgXHBtIDYuNTggXHJpZ2h0YXJyb3ckICgyMDMuNDIsIDIxNi41OCkNCg0KKiAkOTVcJSQgKHo9MS45Nik6ICQyMTAgXHBtICgxLjk2IFx0aW1lcyA0KSA9IDIxMCBccG0gNy44NCBccmlnaHRhcnJvdyQgKDIwMi4xNiwgMjE3Ljg0KQ0KDQoqICQ5OVwlJCAoej0yLjU3Nik6ICQyMTAgXHBtICgyLjU3NiBcdGltZXMgNCkgPSAyMTAgXHBtIDEwLjMwIFxyaWdodGFycm93JCAoMTk5LjcwLCAyMjAuMzApDQoNCvCflLkgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gVGltIEEgKFVqaS1aKQ0KDQp8IFRpbmdrYXQJfCBOaWxhaSBrcml0aXMgfCBJbnRlcnZhbCB8DQp8Oi0tLXw6LS0tfDotLS18DQp8IDkwJSB8ICR6JCA9IDEuNjQ1IHwgKDIwMy40MiAsIDIxNi41OCkgfCANCjk1JSB8ICR6JCA9IDEuOTYgfCAoMjAyLjE2ICwgMjE3Ljg0KSB8DQo5OSUJfCAkeiQgPSAyLjU3NiB8ICgxOTkuNzAgLCAyMjAuMzApIHwNCg0KKipUaW0gQiAoVWppLXQsIGRmPTM1KSoqDQoNClJ1bXVzOiAkQ0kgPSBcYmFye3h9IFxwbSAodF97XGFscGhhLzIsIDM1fSBcdGltZXMgU0UpJA0KDQoqIDkwJSAodD0xLjY4OSk6ICQyMTAgXHBtICgxLjY4OSBcdGltZXMgNCkgPSAyMTAgXHBtIDYuNzU2IFxyaWdodGFycm93JCAoMjAzLjI0LCAyMTYuNzYpDQoNCiogOTUlICh0PTIuMDMwKTogJDIxMCBccG0gKDIuMDMwIFx0aW1lcyA0KSA9IDIxMCBccG0gOC4xMiBccmlnaHRhcnJvdyQgKDIwMS44OCwgMjE4LjEyKQ0KDQoqIDk5JSAodD0yLjcyMyk6ICQyMTAgXHBtICgyLjcyMyBcdGltZXMgNCkgPSAyMTAgXHBtIDEwLjg5IFxyaWdodGFycm93JCAoMTk5LjExLCAyMjAuODkpDQoNCvCflLkgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gVGltIEIgKFVqaS10LCBkZiA9IDM1KQ0KDQp8IFRpbmdrYXQgfCBOaWxhaSBrcml0aXMgfCBJbnRlcnZhbCAgICAgICAgICB8DQp8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLSB8DQp8IDkwJSAgICAgfCAkdCQ9MS42OTAgICAgfCAoMjAzLjI0ICwgMjE2Ljc2KSB8DQp8IDk1JSAgICAgfCAkdCQ9Mi4wMzAgICAgfCAoMjAxLjg4ICwgMjE4LjEyKSB8DQp8IDk5JSAgICAgfCAkdCQ9Mi43MjQgICAgfCAoMTk5LjEwICwgMjIwLjkwKSB8DQoNCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBQZXJiYW5kaW5nYW4gU2VtdWEgVmFyaWFiZWwNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyAxLiBMb2FkIExpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIDIuIFBlcnNpYXBhbiBEYXRhDQpsZXZlbHMgPC0gYygiOTAlIiwgIjk1JSIsICI5OSUiKQ0KbWVhbl92YWwgPC0gMjEwDQphX2xvdyAgPC0gYygyMDMuNDIsIDIwMi4xNiwgMTk5LjcwKQ0KYV9oaWdoIDwtIGMoMjE2LjU4LCAyMTcuODQsIDIyMC4zMCkNCmJfbG93ICA8LSBjKDIwMy4yNCwgMjAxLjg4LCAxOTkuMTEpDQpiX2hpZ2ggPC0gYygyMTYuNzYsIDIxOC4xMiwgMjIwLjg5KQ0KDQojIDMuIEluaXNpYWxpc2FzaSBQbG90DQpmaWcgPC0gcGxvdF9seSgpDQoNCiMgNC4gTG9vcCB1bnR1ayBNZW5hbWJhaGthbiBHYXJpcyBJbnRlcnZhbA0KZm9yKGkgaW4gMTozKSB7DQogIA0KICAjIFRhbWJhaGthbiBUaW0gQSAoVWppLVopIC0gQmlydQ0KICBmaWcgPC0gZmlnICU+JSBhZGRfc2VnbWVudHMoDQogICAgeCA9IGFfbG93W2ldLCB4ZW5kID0gYV9oaWdoW2ldLA0KICAgIHkgPSBpICsgMC4xNSwgeWVuZCA9IGkgKyAwLjE1LA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJyMzNDk4ZGInLCB3aWR0aCA9IDEyKSwNCiAgICBuYW1lID0gIlRpbSBBIChVamktWikiLA0KICAgIGxlZ2VuZGdyb3VwID0gIlRpbSBBIiwNCiAgICBzaG93bGVnZW5kID0gKGkgPT0gMSksDQogICAgaG92ZXJpbmZvID0gInRleHQiLA0KICAgIHRleHQgPSBwYXN0ZTAoIjxiPlRpbSBBIChVamktWik8L2I+PGJyPiIsDQogICAgICAgICAgICAgICAgICAiTGV2ZWw6ICIsIGxldmVsc1tpXSwgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgIkJhd2FoOiAiLCBhX2xvd1tpXSwgIiBtczxicj4iLA0KICAgICAgICAgICAgICAgICAgIkF0YXM6ICIsIGFfaGlnaFtpXSwgIiBtcyIpDQogICkNCiAgDQogICMgVGFtYmFoa2FuIFRpbSBCIChVamktdCkgLSBNZXJhaA0KICBmaWcgPC0gZmlnICU+JSBhZGRfc2VnbWVudHMoDQogICAgeCA9IGJfbG93W2ldLCB4ZW5kID0gYl9oaWdoW2ldLA0KICAgIHkgPSBpIC0gMC4xNSwgeWVuZCA9IGkgLSAwLjE1LA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJyNlNzRjM2MnLCB3aWR0aCA9IDEyKSwNCiAgICBuYW1lID0gIlRpbSBCIChVamktdCkiLA0KICAgIGxlZ2VuZGdyb3VwID0gIlRpbSBCIiwNCiAgICBzaG93bGVnZW5kID0gKGkgPT0gMSksDQogICAgaG92ZXJpbmZvID0gInRleHQiLA0KICAgIHRleHQgPSBwYXN0ZTAoIjxiPlRpbSBCIChVamktdCk8L2I+PGJyPiIsDQogICAgICAgICAgICAgICAgICAiTGV2ZWw6ICIsIGxldmVsc1tpXSwgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgIkJhd2FoOiAiLCBiX2xvd1tpXSwgIiBtczxicj4iLA0KICAgICAgICAgICAgICAgICAgIkF0YXM6ICIsIGJfaGlnaFtpXSwgIiBtcyIpDQogICkNCn0NCg0KIyA1LiBLb25maWd1cmFzaSBMYXlvdXQgZGVuZ2FuIFNIQVBFUyBMSVNUDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoDQogIHRpdGxlID0gbGlzdCh0ZXh0ID0gIjxiPkFuYWxpc2lzIFByZXNpc2kgTGF0ZW5zaSBBUEk6IFRpbSBBIHZzIFRpbSBCPC9iPiIsIHkgPSAwLjk1KSwNCiAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkxhdGVuc2kgKG1pbGlkZXRpaykiLCByYW5nZSA9IGMoMTk1LCAyMjUpKSwNCiAgeWF4aXMgPSBsaXN0KA0KICAgIHRpdGxlID0gIlRpbmdrYXQgS2VwZXJjYXlhYW4iLA0KICAgIHRpY2ttb2RlID0gImFycmF5IiwNCiAgICB0aWNrdmFscyA9IDE6MywNCiAgICB0aWNrdGV4dCA9IGxldmVscywNCiAgICByYW5nZSA9IGMoMC41LCAzLjgpDQogICksDQogICMgLS0tIFNIQVBFUyBMSVNUIChHYXJpcyBiYW50dSB2ZXJ0aWthbCBkaSByYXRhLXJhdGEpIC0tLQ0KICBzaGFwZXMgPSBsaXN0KA0KICAgIGxpc3QoDQogICAgICB0eXBlID0gImxpbmUiLA0KICAgICAgeDAgPSBtZWFuX3ZhbCwgeDEgPSBtZWFuX3ZhbCwNCiAgICAgIHkwID0gMC41LCB5MSA9IDMuNSwNCiAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gInJnYmEoMTI4LCAxMjgsIDEyOCwgMC41KSIsIGRhc2ggPSAiZGFzaCIsIHdpZHRoID0gMikNCiAgICApDQogICksDQogICMgTGVnZW5kYSBkaSBiYXdhaA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gODApLA0KICBob3Zlcm1vZGUgPSAiY2xvc2VzdCINCikgJT4lDQogICMgTWVuYW1iYWhrYW4gYW5vdGFzaSB0ZWtzIHVudHVrIHJhdGEtcmF0YSBhZ2FyIGxlYmloIGplbGFzDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbWVhbl92YWwsIHkgPSAzLjcsIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCBtZWFuX3ZhbCwgIm1zIiksDQogICAgc2hvd2Fycm93ID0gRkFMU0UsIGZvbnQgPSBsaXN0KGNvbG9yID0gImdyYXkiLCBzaXplID0gMTIpDQogICkNCg0KIyA2LiBKYWxhbmthbiBWaXN1YWxpc2FzaQ0KZmlnDQpgYGANCjwvZGl2Pg0KDQojIyBQZW5qZWxhc2FuIFBlcmJlZGFhbiBMZWJhciBJbnRlcnZhbA0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KTWVza2lwdW4gZGF0YSAoJFxiYXJ7eH0sIG4sIFx0ZXh0e2FuZ2thIGRldmlhc2l9JCkgaWRlbnRpaywgaW50ZXJ2YWwgVGltIEIgKFVqaS10KSBzZWxhbHUgbGViaWggbGViYXIgZGFyaXBhZGEgVGltIEEgKFVqaS1aKS4gTWVuZ2FwYT8NCg0KKiBGYWt0b3IgS2V0aWRha3Bhc3RpYW46IFRpbSBBIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpIHlhbmcgZGlhbmdnYXAgc2ViYWdhaSBuaWxhaSBhYnNvbHV0IHlhbmcgcGFzdGkuIFRpbSBCIGhhbnlhIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKCRzJCkgeWFuZyBtZW5nYW5kdW5nIHJpc2lrbyBrZXNhbGFoYW4ga2FyZW5hIGhhbnlhIGJlcmFzYWwgZGFyaSAzNiBkYXRhLg0KDQoqIEthcmFrdGVyaXN0aWsgRGlzdHJpYnVzaS10OiBEaXN0cmlidXNpLXQgbWVtaWxpa2kgImVrb3IiIHlhbmcgbGViaWggdGViYWwgKGhlYXZpZXIgdGFpbHMpIGRpYmFuZGluZ2thbiBkaXN0cmlidXNpIG5vcm1hbCAoWikuIEluaSBhZGFsYWggY2FyYSBzdGF0aXN0aWsgbWVtYmVyaWthbiAicGVuYWx0aSIgYXRhdSBrb21wZW5zYXNpIGF0YXMga2V0aWRha3RhaHVhbiBraXRhIHRlcmhhZGFwIHBhcmFtZXRlciBwb3B1bGFzaSBhc2xpLg0KDQoqIE5pbGFpIEtyaXRpczogTmlsYWkga3JpdGlzICR0JCBzZWxhbHUgbGViaWggYmVzYXIgZGFyaXBhZGEgbmlsYWkgJHokIHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4geWFuZyBzYW1hLiBDb250b2hueWEgcGFkYSA5NSUsICR0PTIuMDMwJCBzZWRhbmdrYW4gJHo9MS45NiQuIEFuZ2thIHBlbmdhbGkgeWFuZyBsZWJpaCBiZXNhciBpbmlsYWggeWFuZyBtZW1idWF0IGludGVydmFsIFRpbSBCIGxlYmloIGxlYmFyIChrdXJhbmcgcHJlc2lzaSBkaWJhbmRpbmdrYW4gVGltIEEpLg0KDQpLZXNpbXB1bGFuIHVudHVrIEtlcHV0dXNhbjogVGltIEEgbWVtaWxpa2kgcHJlc2lzaSB5YW5nIGxlYmloIHRpbmdnaSBrYXJlbmEgaW5mb3JtYXNpIHlhbmcgbWVyZWthIG1pbGlraSBsZWJpaCBsZW5na2FwICh0YWh1IGRhdGEgcG9wdWxhc2kpLiBUaW0gQiBoYXJ1cyBtZW5lcmltYSByZW50YW5nIHlhbmcgbGViaWggbGViYXIgc2ViYWdhaSBrb25zZWt1ZW5zaSBkYXJpIHBlbmdndW5hYW4gZGF0YSBzYW1wZWwuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyA1DQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpJbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgKE9uZS1TaWRlZCk6IFNlYnVhaCBwZXJ1c2FoYWFuIFNhYVMgKFNvZnR3YXJlIGFzIGEgU2VydmljZSkgaW5naW4gbWVtYXN0aWthbiBiYWh3YSBzZXRpZGFrbnlhIDcwJSBkYXJpIHBlbmdndW5hIGFrdGlmIG1pbmdndWFuIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQoNCkRhcmkgZWtzcGVyaW1lbjoNCg0KJG4kID0gMjUwIChUb3RhbCBwZW5nZ3VuYSkNCg0KJHgkID0gMTg1IChQZW5nZ3VuYSBwcmVtaXVtIGFrdGlmKQ0KDQpNYW5hamVtZW4gaGFueWEgdGVydGFyaWsgcGFkYSBiYXRhcyBiYXdhaCAobG93ZXIgYm91bmQpIGRhcmkgZXN0aW1hc2kgdGVyc2VidXQuDQoNClR1Z2FzOg0KDQoxLiBJZGVudGlmaWthc2kgamVuaXMgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gZGFuIHVqaSB5YW5nIHRlcGF0Lg0KMi4gSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHNhdHUgc2lzaSAoYmF0YXMgYmF3YWgpIHBhZGEgdGluZ2thdDoNCiAgKiAkOTBcJSQgDQogICogJDk1XCUkIA0KICAqICQ5OVwlJCANCjMuIFZpc3VhbGlzYXNpa2FuIGJhdGFzIGJhd2FoIHVudHVrIHNlbXVhIHRpbmdrYXQga2VwZXJjYXlhYW4uDQo0LiBUZW50dWthbiBhcGFrYWggdGFyZ2V0IDcwJSB0ZXJzZWJ1dCB0ZXJwZW51aGkgc2VjYXJhIHN0YXRpc3Rpay4NCjwvZGl2Pg0KDQojIyBJZGVudGlmaWthc2kgSmVuaXMgSW50ZXJ2YWwgS2VwZXJjYXlhYW4NCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCkthcmVuYSBtYW5hamVtZW4gaGFueWEgaW5naW4gbWVtYXN0aWthbiBhcGFrYWggcGVyc2VudGFzZSBwZW5nZ3VuYSBzZXRpZGFrbnlhIChwYWxpbmcgc2VkaWtpdCkgYmVyYWRhIHBhZGEgYW5na2EgdGVydGVudHUsIG1ha2EgdWppIHlhbmcgdGVwYXQgYWRhbGFoIEludGVydmFsIEtlcGVyY2F5YWFuIFNhdHUgU2lzaSAoT25lLVNpZGVkIENvbmZpZGVuY2UgSW50ZXJ2YWwgLSBMb3dlciBCb3VuZCkgdW50dWsgcHJvcG9yc2kuDQoNCiogSmVuaXMgRGF0YTogUHJvcG9yc2kgKGt1YWxpdGF0aWYvYmluZXI6IG1lbmdndW5ha2FuIGF0YXUgdGlkYWsgbWVuZ2d1bmFrYW4gZml0dXIgcHJlbWl1bSkuDQoqIFVqaSBTdGF0aXN0aWs6IFVqaS1aIHVudHVrIHByb3BvcnNpIHNhdHUgc2lzaSAoa2FyZW5hICRuPTI1MCQgc3VkYWggY3VrdXAgYmVzYXIpLg0KPC9kaXY+DQoNCiMjICBQZXJoaXR1bmdhbiBCYXRhcyBCYXdhaCAoTG93ZXIgQm91bmQpDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpEYXRhIFN0YXRpc3RpazoNCg0KKiAkbiA9IDI1MCQNCiogJHggPSAxODUkDQoqICRcaGF0e3B9ID0gXGZyYWN7MTg1fXsyNTB9ID0gMC43NCQgKDc0JSkNCiogU3RhbmRhcmQgRXJyb3IgKCRTRSQpOiAkXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0gPSBcc3FydHtcZnJhY3swLjc0IFx0aW1lcyAwLjI2fXsyNTB9fSA9IFxzcXJ0ezAuMDAwNzY5Nn0gXGFwcHJveCAwLjAyNzckDQoNClJ1bXVzIEJhdGFzIEJhd2FoOiAkTG93ZXJcIEJvdW5kID0gXGhhdHtwfSAtICh6X3tcYWxwaGF9IFx0aW1lcyBTRSkkQ2F0YXRhbjogUGFkYSB1amkgc2F0dSBzaXNpLCBraXRhIG1lbmdndW5ha2FuICR6X3tcYWxwaGF9JCwgYnVrYW4gJHpfe1xhbHBoYS8yfSQuDQoNCjEuIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTAlICgkXGFscGhhID0gMC4xMCQpDQoNCiogJHpfezAuMTB9ID0gMS4yODIkDQoqICQwLjc0IC0gKDEuMjgyIFx0aW1lcyAwLjAyNzcpID0gMC43NCAtIDAuMDM1NSA9IFxtYXRoYmZ7MC43MDQ1XCAoNzAuNDVcJSl9JA0KDQoyLiBUaW5na2F0IEtlcGVyY2F5YWFuIDk1JSAoJFxhbHBoYSA9IDAuMDUkKQ0KDQoqICR6X3swLjA1fSA9IDEuNjQ1JA0KKiAkMC43NCAtICgxLjY0NSBcdGltZXMgMC4wMjc3KSA9IDAuNzQgLSAwLjA0NTYgPSBcbWF0aGJmezAuNjk0NFwgKDY5LjQ0XCUpfSQNCg0KMy4gVGluZ2thdCBLZXBlcmNheWFhbiA5OSUgKCRcYWxwaGEgPSAwLjAxJCkNCg0KKiAkel97MC4wMX0gPSAyLjMyNiQNCiogJDAuNzQgLSAoMi4zMjYgXHRpbWVzIDAuMDI3NykgPSAwLjc0IC0gMC4wNjQ0ID0gXG1hdGhiZnswLjY3NTZcICg2Ny41NlwlKX0kDQo8L2Rpdj4NCg0KIyMgVmlzdWFsaXNhc2kgQmF0YXMgQmF3YWgNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyAxLiBMb2FkIExpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIDIuIFBlcnNpYXBhbiBEYXRhIEthc3VzIDUNCnBfaGF0IDwtIDAuNzQNCnRhcmdldCA8LSAwLjcwDQpkYXRhX3NhYXMgPC0gZGF0YS5mcmFtZSgNCiAgTGV2ZWwgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBMb3dlckJvdW5kID0gYygwLjcwNDUsIDAuNjk0NCwgMC42NzU2KSwNCiAgQ29sb3IgPSBjKCIjMzQ5OGRiIiwgIiMyZWNjNzEiLCAiI2U3NGMzYyIpDQopDQoNCiMgMy4gTWVtYnVhdCBQbG90DQpmaWcgPC0gcGxvdF9seSgpDQoNCmZvcihpIGluIDE6bnJvdyhkYXRhX3NhYXMpKSB7DQogICMgTWVuYW1iYWhrYW4gR2FyaXMgZGFyaSBMb3dlciBCb3VuZCBrZSBwX2hhdA0KICBmaWcgPC0gZmlnICU+JSBhZGRfc2VnbWVudHMoDQogICAgeCA9IGRhdGFfc2FhcyRMb3dlckJvdW5kW2ldLCB4ZW5kID0gcF9oYXQsDQogICAgeSA9IGRhdGFfc2FhcyRMZXZlbFtpXSwgeWVuZCA9IGRhdGFfc2FhcyRMZXZlbFtpXSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9IGRhdGFfc2FhcyRDb2xvcltpXSwgd2lkdGggPSAxMiksDQogICAgbmFtZSA9IHBhc3RlKCJDSSIsIGRhdGFfc2FhcyRMZXZlbFtpXSksDQogICAgIyAtLS0gRklUVVIgSE9WRVIgVE9PTFRJUFMgLS0tDQogICAgaG92ZXJpbmZvID0gInRleHQiLA0KICAgIHRleHQgPSBwYXN0ZTAoIjxiPlRpbmdrYXQgS2VwZXJjYXlhYW46ICIsIGRhdGFfc2FhcyRMZXZlbFtpXSwgIjwvYj48YnI+IiwNCiAgICAgICAgICAgICAgICAgICJFc3RpbWFzaSBVdGFtYTogIiwgcF9oYXQgKiAxMDAsICIlPGJyPiIsDQogICAgICAgICAgICAgICAgICAiQmF0YXMgQmF3YWggQW1hbjogIiwgcm91bmQoZGF0YV9zYWFzJExvd2VyQm91bmRbaV0gKiAxMDAsIDIpLCAiJSIpDQogICkNCn0NCg0KIyA0LiBLb25maWd1cmFzaSBMYXlvdXQNCmZpZyA8LSBmaWcgJT4lIGxheW91dCgNCiAgdGl0bGUgPSBsaXN0KHRleHQgPSAiPGI+QW5hbGlzaXMgQmF0YXMgQmF3YWggUGVuZ2d1bmEgUHJlbWl1bSAoU2FhUyk8L2I+IiwgeSA9IDAuOTUpLA0KICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiUHJvcG9yc2kgUGVuZ2d1bmEiLCB0aWNrZm9ybWF0ID0gIi4xJSIsIHJhbmdlID0gYygwLjYwLCAwLjgwKSksDQogIHlheGlzID0gbGlzdCh0aXRsZSA9ICJDb25maWRlbmNlIExldmVsIiksDQogIA0KICAjIFNIQVBFUzogR2FyaXMgVGFyZ2V0IDcwJQ0KICBzaGFwZXMgPSBsaXN0KA0KICAgIGxpc3QoDQogICAgICB0eXBlID0gImxpbmUiLA0KICAgICAgeDAgPSB0YXJnZXQsIHgxID0gdGFyZ2V0LA0KICAgICAgeTAgPSAwLCB5MSA9IDMuNSwNCiAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gInJlZCIsIGRhc2ggPSAiZGFzaCIsIHdpZHRoID0gMikNCiAgICApDQogICksDQogIA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gODApLA0KICBob3Zlcm1vZGUgPSAiY2xvc2VzdCINCikgJT4lDQogICMgTWVuYW1iYWhrYW4gQW5vdGFzaSB1bnR1ayBUYXJnZXQNCiAgYWRkX2Fubm90YXRpb25zKA0KICAgIHggPSB0YXJnZXQsIHkgPSAzLjcsIHRleHQgPSAiVGFyZ2V0IE1pbmltYWwgNzAlIiwNCiAgICBzaG93YXJyb3cgPSBGQUxTRSwgZm9udCA9IGxpc3QoY29sb3IgPSAicmVkIiwgc2l6ZSA9IDEyKQ0KICApDQoNCiMgNS4gVGFtcGlsa2FuIFBsb3QNCmZpZw0KYGBgDQo8L2Rpdj4NCg0KIyMgS2VzaW1wdWxhbg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KQXBha2FoIFRhcmdldCA3MCUgVGVycGVudWhpP1BlbmVudHVhbiB0ZXJwZW51aGlueWEgdGFyZ2V0IHRlcmdhbnR1bmcgcGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIHlhbmcgZGlwaWxpaCBvbGVoIG1hbmFqZW1lbjoNCg0KKiBQYWRhIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTAlOiBUYXJnZXQgVGVycGVudWhpLiBCYXRhcyBiYXdhaCAoNzAuNDUlKSBtYXNpaCBiZXJhZGEgZGkgYXRhcyB0YXJnZXQgNzAlLiBLaXRhIHlha2luIDkwJSBiYWh3YSBzZXRpZGFrbnlhIDcwLjQ1JSBwZW5nZ3VuYSBhZGFsYWggcHJlbWl1bS4NCg0KKiBQYWRhIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTUlOiBUYXJnZXQgVGlkYWsgVGVycGVudWhpIHNlY2FyYSBzdGF0aXN0aWsuIEJhdGFzIGJhd2FoICg2OS40NCUpIHNlZGlraXQgZGkgYmF3YWggNzAlLiBXYWxhdXB1biByYXRhLXJhdGEgc2FtcGVsIGtpdGEgNzQlLCBhZGEga2VtdW5na2luYW4ga2VjaWwgcHJvcG9yc2kgYXNsaSBwb3B1bGFzaSB0dXJ1biBoaW5nZ2EgNjkuNDQlLg0KDQoqIFBhZGEgVGluZ2thdCBLZXBlcmNheWFhbiA5OSU6IFRhcmdldCBUaWRhayBUZXJwZW51aGkuIEJhdGFzIGJhd2FoICg2Ny41NiUpIGJlcmFkYSBjdWt1cCBqYXVoIGRpIGJhd2FoIHRhcmdldC4NCjwvZGl2Pg0KDQojIFJlZmVyZW5zaQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KKiBBZ3Jlc3RpLCBBLiAoMjAxMykuIENhdGVnb3JpY2FsIERhdGEgQW5hbHlzaXMgKDNyZCBlZC4pLiBIb2Jva2VuLCBOSjogSm9obiBXaWxleSAmIFNvbnMuKFJlZmVyZW5zaSB1dGFtYSB1bnR1ayBsb2dpa2EgcGVyaGl0dW5nYW4gaW50ZXJ2YWwga2VwZXJjYXlhYW4gcHJvcG9yc2kgcGFkYSBLYXN1cyAzIGRhbiBLYXN1cyA1KS4NCiogSG9nZywgUi4gVi4sIE1jS2VhbiwgSi4gVy4sICYgQ3JhaWcsIEEuIFQuICgyMDE5KS4gSW50cm9kdWN0aW9uIHRvIE1hdGhlbWF0aWNhbCBTdGF0aXN0aWNzICg4dGggZWQuKS4gUGVhcnNvbi4oRGFzYXIgdGVvcmkgbWVuZ2VuYWkgc2lmYXQtc2lmYXQgZGlzdHJpYnVzaSBzYW1wbGluZyBkYW4gVGVvcmVtYSBMaW1pdCBQdXNhdCkuDQoqIE1vbnRnb21lcnksIEQuIEMuLCAmIFJ1bmdlciwgRy4gQy4gKDIwMTQpLiBBcHBsaWVkIFN0YXRpc3RpY3MgYW5kIFByb2JhYmlsaXR5IGZvciBFbmdpbmVlcnMuIEhvYm9rZW4sIE5KOiBKb2huIFdpbGV5ICYgU29ucy4oUmVmZXJlbnNpIHVudHVrIHBlcmhpdHVuZ2FuIHByYWt0aXMgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gbWVuZ2d1bmFrYW4gRGlzdHJpYnVzaS1aIGRhbiBEaXN0cmlidXNpLXQgcGFkYSBkYXRhIGtvbnRpbnUpLg0KKiBOSVNUL1NFTUFURUNILiAoMjAxMikuIGUtSGFuZGJvb2sgb2YgU3RhdGlzdGljYWwgTWV0aG9kcy4gaHR0cHM6Ly93d3cuaXRsLm5pc3QuZ292L2Rpdjg5OC9oYW5kYm9vay8oUGFuZHVhbiB0ZWtuaXMgdW50dWsgcGVuZW50dWFuIGJhdGFzIGJhd2FoL2Jhd2FoIGFtYW4gZGFuIE1hcmdpbiBvZiBFcnJvcikuDQoqIFN0dWRlbnQgW0dvc3NldCwgVy4gUy5dLiAoMTkwOCkuIFRoZSBQcm9iYWJsZSBFcnJvciBvZiBhIE1lYW4uIEJpb21ldHJpa2EsIDYoMSksIDEtMjUuKERva3VtZW4gaGlzdG9yaXMgYXNsaSB5YW5nIG1lbmphZGkgZGFzYXIgcGVuZ2d1bmFhbiBEaXN0cmlidXNpLXQgcGFkYSBzYW1wZWwga2VjaWwgc2VwZXJ0aSBwYWRhIEthc3VzIDIpLg0KKiBXYWxwb2xlLCBSLiBFLiwgTXllcnMsIFIuIEguLCBNeWVycywgUy4gTC4sICYgWWUsIEsuICgyMDEyKS4gUHJvYmFiaWxpdHkgJiBTdGF0aXN0aWNzIGZvciBFbmdpbmVlcnMgJiBTY2llbnRpc3RzICg5dGggZWQuKS4gQm9zdG9uLCBNQTogUGVhcnNvbi4oQnVrdSBwZWdhbmdhbiBzdGFuZGFyIHVudHVrIHBlbmVudHVhbiBuaWxhaSBrcml0aXMgJHpfe1xhbHBoYS8yfSQgZGFuICR0X3tcYWxwaGEvMn0kKS4NCjwvZGl2Pg0KDQojIyBSaW5na2FzYW4gTG9naWthIHlhbmcgRGlndW5ha2FuOg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KMS4gS2FzdXMgMSAmIDQgKERpc3RyaWJ1c2ktWik6IERpZ3VuYWthbiBzYWF0IHVrdXJhbiBzYW1wZWwgYmVzYXIgYXRhdSBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKCRcc2lnbWEkKSBkaWtldGFodWkuIE1lbmdndW5ha2FuIG5pbGFpIGtyaXRpcyBkYXJpIGt1cnZhIE5vcm1hbCBzdGFuZGFyLg0KMi4gS2FzdXMgMiAoRGlzdHJpYnVzaS10KTogRGlndW5ha2FuIHVudHVrIHNhbXBlbCBrZWNpbCAoJG4gPCAzMCQpIGRpIG1hbmEgc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIHRpZGFrIGRpa2V0YWh1aSwgc2VoaW5nZ2EgbWVuZ2d1bmFrYW4gZGVyYWphdCBrZWJlYmFzYW4gKCRkZiA9IG4gLSAxJCkuDQozLiBLYXN1cyAzICYgNSAoUHJvcG9yc2kpOiBNZW5nZ3VuYWthbiBwZW5kZWthdGFuIGRpc3RyaWJ1c2kgTm9ybWFsIHRlcmhhZGFwIGRpc3RyaWJ1c2kgQmlub21pYWwgZGVuZ2FuIHJ1bXVzICRNYXJnaW5cIG9mXCBFcnJvciA9IHpfe1xhbHBoYS8yfSBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSQuDQo8L2Rpdj4=