Study Cases

Confidence Interval ~ Week 13

1 . Pendahuluan

Seringkali kita terjebak pada satu angka rata-rata misalnya transaksi di angka 12.0 atau konversi sebesar 22%. Namun, dalam dunia nyata, satu angka saja bisa menipu. Pertanyaan besarnya adalah: Seberapa jauh kita bisa menjamin bahwa angka tersebut bukan sekadar kebetulan.

Melalui 5 studi kasus ini, kita akan melihat bagaimana Confidence Interval (CI) bekerja sebagai “jaring pengaman” dalam pengambilan keputusan. Kita tidak hanya bicara soal hitungan matematis, tapi soal bagaimana kita mengelola risiko di tengah ketidakpastian data.

Yang kita pelajari dari studi kasus ini adalah: 1. Trade-off Antara Keyakinan dan Presisi (Z-Test): Kita akan melihat kenapa saat kita ingin 99% yakin tidak salah bicara, kita harus rela memberikan rentang angka yang lebih lebar. Ini adalah harga dari sebuah kepastian.

  1. Menghadapi Realita Data Kecil (T-Test): Tidak selamanya kita punya data yang sempurna. Kita akan mempelajari bagaimana tetap objektif meski hanya memiliki sedikit sampel, tanpa menjadi terlalu percaya diri (overconfident).

  2. Validasi Strategi (A/B Testing): Bukan cuma soal perasaan desain baru lebih bagus, tapi bagaimana kita membuktikan secara statistik bahwa performa kita memang sudah jauh melampaui standar lama.

  3. Keamanan Batas Bawah (One-Side CI): Dalam bisnis, yang paling menakutkan adalah performa yang anjlok. Kita akan menggunakan pendekatan One-Sided untuk memastikan bahwa peluang kita jatuh di bawah target hampir nol persen.

Intinya, laporan ini adalah tentang bagaimana kita mengubah data mentah menjadi sebuah jaminan. Kita tidak hanya menebak, kita sedang memetakan ruang risiko agar setiap langkah yang diambil memiliki landasan yang kuat.

2 . Study Case 1: CI MEAN (Z-TEST)

Dalam mengolah data, angka 12.0 yang kita temukan sebenarnya hanyalah sebuah potret sesaat, atau yang dalam statistik dikenal sebagai Point Estimate. Bayangkan kita sedang mencoba menebak rata-rata pengeluaran ribuan orang hanya dengan bertanya pada 100 orang saja. Tentu ada faktor keberuntungan atau kebetulan yang terbawa dalam sampel tersebut. Jika kita hanya menyodorkan angka tunggal 12.0 kepada pimpinan atau klien, kita sebenarnya sedang mengambil risiko besar karena angka itu sangat mungkin bergeser jika kita mengambil kelompok sampel yang berbeda di waktu yang berbeda.

Di sinilah Confidence Interval (CI) bekerja sebagai Dinding Pelindung. Alih-alih memberikan angka tunggal yang kaku, kita membangun sebuah zona nyaman yang jauh lebih masuk akal secara ilmiah untuk menaungi ketidakpastian tersebut.

  1. Dilema Antara Kepastian dan Ketajaman (The Trade-off) Ada fenomena unik yang terlihat jelas pada Tabel 1.1: ketika kita mencoba menaikkan level kepercayaan dari 90% ke 99%, rentang angkanya justru semakin melebar, dari yang semula cukup sempit menjadi 11.11 hingga 12.88.

Ini bukanlah sebuah kesalahan hitung, melainkan berlakunya Hukum Trade-off Kepastian. Analoginya begini: Jika saya meminta Anda menebak suhu udara hari ini dan Anda ingin jawaban Anda 100% benar, Anda mungkin akan berkata, Suhu hari ini berada di antara -50°C sampai 100°C. Rentangnya sangat lebar dan mungkin terasa tidak terlalu spesifik (tumpul), tapi Anda hampir mustahil salah. Sebaliknya, jika Anda ingin terlihat sangat hebat dan presisi, Anda mungkin menebak “Antara 28.5°C sampai 28.7°C.” Angka ini sangat tajam dan spesifik, tapi kemungkinan Anda salah sangatlah tinggi karena ruang geraknya terlalu sempit.

Dalam dunia bisnis dan pengambilan keputusan, jika kita ingin 99% yakin bahwa estimasi kita tidak meleset, kita harus berlapang dada menerima rentang yang lebih luas. Kita secara sadar menukar “ketajaman” angka demi mendapatkan keamanan informasi yang lebih solid dan bisa dipertanggungjawabkan secara metodologi.

  1. Membedah Visualisasi: Titik Janji vs Ruang Risiko Pada visualisasi yang tersaji di bawah, terdapat dua komponen visual utama yang merangkum seluruh logika analisis kita:

Titik Merah (The Point): Inilah yang saya sebut sebagai Titik Janji. Ini adalah hasil murni dari data lapangan yang kita miliki saat ini. Ia menjadi pusat atau jangkar dari seluruh perhitungan.

Garis Horizontal (The Margin of Error): Inilah Ruang Risiko kita. Semakin panjang garis horizontal ini, berarti semakin besar pula tingkat ketidakpastian yang kita akui secara jujur. Garis ini memberi tahu kita seberapa besar ruang gerak yang dimiliki perusahaan sebelum sebuah tren dianggap benar-benar menyimpang jauh dari target yang diharapkan.

Tabel 1.1: Confidence Interval Mean (Z-Test, Sigma Diketahui)
Tingkat_Kepercayaan Z_Score Margin_of_Error Lower_Bound Upper_Bound
90% 1.6449 0.7402 11.2598 12.7402
95% 1.9600 0.8820 11.1180 12.8820
99% 2.5758 1.1591 10.8409 13.1591

Grafik ini memperlihatkan bagaimana Confidence Interval bekerja untuk memitigasi risiko dari angka tunggal 12.0:

Titik Merah (Estimasi Titik): Ini adalah angka rata-rata transaksi murni dari sampel kita (12.0). Di sinilah posisi pusat data berada.

Garis Horizontal (Margin Kesalahan): Anda bisa melihat ada tiga tingkatan garis. Semakin ke atas (menuju 99%), garisnya semakin panjang. Ini menunjukkan bahwa untuk mendapatkan keyakinan yang lebih tinggi, kita harus siap menerima rentang kemungkinan yang lebih lebar.

Warna sebagai Indikator: Warna Kuning (90%) menunjukkan estimasi yang lebih agresif sedangkan warna Merah (99%) menunjukkan posisi yang lebih berhati-hati atau “aman” bagi perusahaan.

3 . Study Case 2: CI MEAN (T-TEST)

Jika pada kasus pertama kita memiliki kemewahan informasi, di Kasus 2 ini kita berhadapan dengan kenyataan pahit yang sering terjadi di lapangan: Data yang sangat sedikit. Dengan hanya 12 sampel waktu penyelesaian tugas, kita tidak bisa lagi menggunakan Z-Test. Mengapa? Karena kita tidak mengetahui standar deviasi populasi (\(\sigma\)) secara pasti, dan ukuran sampel yang kecil membuat estimasi kita menjadi jauh lebih sensitif terhadap kesalahan.

Di sinilah t-Test (Distribusi-t) hadir sebagai pahlawan. Jika Z-Test adalah pengukur yang kaku, maka Distribusi-t adalah versi yang lebih sabar dan berhati-hati.

1.Distribusi-t memiliki “Ekor yang Lebih Tebal” Dalam statistik, kita mengenal istilah Fat Tails atau ekor yang lebih tebal pada kurva t. Secara matematis, ini adalah cara t-distribution untuk mengakomodasi ketidaktahuan kita. Karena sampelnya cuma sedikit, risiko adanya data pencilan (outlier) yang merusak rata-rata menjadi sangat besar.

Distribusi-t memberikan ruang gerak tambahan dengan memperlebar intervalnya dibandingkan Z-Test. Ini adalah bentuk kerendahhatian statistik: Karena saya hanya tahu sedikit, saya tidak akan memberikan janji yang terlalu berani.

  1. Makna di Balik Angka: Stabilitas di Tengah Keterbatasan Rata-rata penyelesaian tugas tim kita adalah 8.4 menit. Namun, perhatikan rentang 95% kita yang berada di angka 8.08 hingga 8.71.

Meskipun sampelnya minim, interval yang kita hasilkan tergolong cukup sempit. Apa artinya bagi bisnis? Ini adalah kabar baik. Jarak antar batas yang sempit menunjukkan bahwa variansi data kita rendah. Dengan kata lain, kinerja tim Anda sangat konsisten dan stabil; perbedaan waktu pengerjaan antar anggota tim tidak terpaut jauh. Kita bisa memprediksi masa depan dengan lebih tenang karena efisiensi tim terbukti bukan sekadar fluktuasi acak.

  1. Visualisasi 2.1: Konsistensi dalam Balutan Teal Berbeda dengan Case 1 yang berwarna Coral, di sini kita menggunakan warna Teal untuk melambangkan kestabilan. Garis putus-putus di tengah adalah performa rata-rata saat ini, sementara garis horizontal Teal menunjukkan seberapa jauh kita bersedia menoleransi ketidakpastian sebelum performa tim dianggap menurun.
Tabel 2.1: Confidence Interval Mean (t-Test, Sigma Tidak Diketahui)
Tingkat_Kepercayaan T_Score Margin_of_Error Lower_Bound Upper_Bound
90% 1.7959 0.2182 8.2401 8.6766
95% 2.2010 0.2675 8.1909 8.7258
99% 3.1058 0.3774 8.0809 8.8357

Grafik ini menggambarkan bagaimana tim Anda bekerja di tengah keterbatasan data. Karena kita hanya punya 12 sampel, kita menggunakan pendekatan t-Test yang lebih hati-hati:

Warna Teal (Stabilitas): Gradasi warna Teal menunjukkan tingkat “kewaspadaan” kita. Semakin gelap warnanya (99%), semakin lebar jaring pengaman yang kita pasang untuk mengantisipasi ketidakpastian.

Rentang Garis yang Sempit: Perhatikan bahwa meskipun kita menaikkan tingkat kepercayaan ke 99%, jarak antara angka 8.01 hingga 8.79 menit masih tergolong rapat. Ini adalah bukti visual bahwa performa tim Anda sangat konsisten; tidak ada perbedaan mencolok antara anggota tim yang bekerja sangat cepat atau sangat lambat.

Titik Merah (Rata-rata 8.4): Inilah titik keseimbangan tim saat ini. Angka di ujung garis (Label) menunjukkan batas aman yang bisa kita janjikan kepada manajemen.

4 . Study Case 3: CI PROPORSI (A/B TESTING)

Pada kasus ketiga ini, fokus kita bergeser. Kita tidak lagi berbicara tentang nilai rata-rata, melainkan tentang peluang keberhasilan. Skenarionya adalah sebuah uji coba desain tombol Call to Action (CTA) baru. Pertanyaan kritisnya sederhana: “Apakah desain baru ini benar-benar membawa perubahan, atau hanya kebetulan sesaat?”

Kita memiliki standar lama (baseline) sebesar 20%. Di sinilah statistik bekerja untuk memisahkan antara harapan kosong dengan bukti nyata.

  1. Visualisasi Kemenangan: Melampaui Garis Musuh Jika Anda melihat Visualisasi 3.1 di bawah, ada garis kuning vertikal yang berdiri tegak di angka 20%. Garis ini adalah “musuh” kita—titik di mana performa lama berada.

Hal yang luar biasa adalah seluruh interval kepercayaan kita (garis ungu), bahkan pada tingkat keyakinan 99% sekalipun, berada sepenuhnya di sisi kanan garis kuning tersebut. Secara statistik, ini adalah bukti yang tidak terbantahkan bahwa desain baru ini memiliki performa yang lebih unggul. Tidak ada area yang tumpang tindih (overlap), yang berarti kemungkinan kegagalan desain baru untuk menyamai desain lama hampir tidak ada.

  1. Kesimpulan Strategis: Lampu Hijau untuk Investasi Data menunjukkan bahwa rata-rata klik sampel kita berada di angka 22%. Namun, yang paling penting bagi manajemen adalah batas bawahnya.
Tabel 3.1: Confidence Interval Proporsi (Z-Test) untuk CTA Baru
Tingkat_Kepercayaan Z_Score Margin_of_Error Lower_Bound Upper_Bound
90% 1.6449 0.0305 0.1895 0.2505
95% 1.9600 0.0363 0.1837 0.2563
99% 2.5758 0.0477 0.1723 0.2677

Visualisasi ini menunjukkan perbandingan antara performa desain baru dengan standar lama (20%):

Garis Kuning (Target Lama): Ini adalah batas performa desain lama. Jika garis ungu berada di sebelah kanan garis kuning ini, artinya desain baru lebih unggul.

Garis Ungu (Interval Kepercayaan): Menunjukkan rentang performa desain baru. Hebatnya, bahkan pada tingkat kepercayaan 99%, seluruh garis ungu tetap berada di sebelah kanan target 20%.

Titik Merah: Merupakan rata-rata konversi sampel kita (22%). Angka-angka di ujung garis (seperti 17.5% atau 26.5%) adalah estimasi terburuk dan terbaik yang mungkin terjadi.

5 . Study Case 4: PERBANDINGAN Z VS T

Di sini kita mengadu dua cara berpikir. Tim A (Z-Test) yang cenderung optimis dan Tim B (t-Test) yang lebih waspada. Perbedaan keduanya bukan cuma soal angka, tapi soal seberapa besar risiko yang berani kita ambil.

  1. Bahaya Terlalu Percaya Diri (Overconfidence) Perhatikan garis Coral (Tim A). Intervalnya paling sempit dan terlihat sangat presisi. Namun, ini adalah pendekatan yang berisiko. Tim A berasumsi kita tahu standar deviasi populasi secara pasti. Di dunia nyata, asumsi ini seringkali terlalu berani. Jika kita hanya mengandalkan interval yang sempit ini, kita bisa terjebak dalam rasa aman palsu. Jika data asli di lapangan ternyata lebih bergejolak, prediksi Tim A akan langsung meleset.

  2. Keamanan di Atas Segalanya (Safety Margin) Sebaliknya, lihat garis Teal (Tim B). Intervalnya sedikit lebih lebar. Tim B sadar bahwa dengan hanya 45 sampel, ada ketidakpastian yang besar. Mereka menggunakan t-Test untuk memberikan ruang gerak. Dalam manajemen risiko, ini adalah langkah yang jauh lebih bijak. Lebih baik kita memprediksi rentang yang sedikit lebih luas namun aman, daripada memberikan janji angka yang sempit tapi ternyata salah.

Tabel 4.1: Perbandingan Parameter Z vs T
Tingkat Lower Upper Metode
90% 10.3038 10.6962 Tim A (Z-Test / Optimis)
95% 10.2663 10.7337 Tim A (Z-Test / Optimis)
99% 10.1928 10.8072 Tim A (Z-Test / Optimis)
90% 10.2996 10.7004 Tim B (t-Test / Waspada)
95% 10.2597 10.7403 Tim B (t-Test / Waspada)
99% 10.1789 10.8211 Tim B (t-Test / Waspada)

Grafik ini memperlihatkan perbedaan antara estimasi yang terlalu berani (Tim A) dengan estimasi yang waspada (Tim B):

Lebar Interval: Garis Teal (Tim B) terlihat lebih lebar dibandingkan garis Coral (Tim A). Ini adalah safety margin atau ruang napas ekstra yang diberikan oleh t-test karena kita hanya memiliki 45 sampel.

Titik Tengah: Titik putih di tengah adalah rata-rata latensi kita (10.5 ms). Garis yang memanjang menunjukkan seberapa jauh kemungkinan angka tersebut bisa meleset.

Tingkat Kepercayaan: Semakin tinggi persentasenya (90% ke 99%), garisnya semakin panjang. Artinya, untuk mendapatkan keyakinan 99%, kita harus siap dengan rentang risiko yang lebih luas.

Intinya Visualisasi ini membuktikan bahwa Tim B (t-test) lebih aman untuk dijadikan patokan bisnis karena mereka tidak meremehkan ketidakpastian data di lapangan.

6 . Study Case 5: ONE-SIDED LOWER CI

Dalam bisnis, seringkali kita tidak peduli jika performa kita terlalu bagus (melebihi target). Kita hanya takut jika performa kita anjlok (di bawah target). Inilah gunanya One-Sided Lower CI.

Efisiensi Statistik: Dibandingkan menggunakan dua arah (upper dan lower), one-sided memberikan fokus penuh pada batas bawah. Ini membuat deteksi terhadap kegagalan target menjadi lebih tajam.

Dalam operasional sehari-hari, kita biasanya santai saja kalau performa tiba-tiba meledak melampaui target. Yang justru bikin pusing adalah kalau performa kita “anjlok” sampai di bawah standar. Di sinilah One-Sided Lower CI berperan sebagai penyelamat.

Sederhananya, dibanding kita repot-repot menghitung rentang atas dan bawah, pendekatan satu arah ini bikin kita fokus penuh buat menjaga lantai performa. Hasilnya, Kita jadi punya radar yang jauh lebih tajam untuk mendeteksi risiko kegagalan target.

Pembuktian Target: Target kita adalah 70%. Dengan tingkat kepercayaan 99%, batas bawah kita berada di 70.8%.

Tabel 5.1: Analisis Safety Floor (Batas Bawah)
Tingkat_Kepercayaan Z_Score Lower_Bound Status_Target
90% 1.2816 0.7201 AMAN
95% 1.6449 0.7145 AMAN
99% 2.3263 0.7039 AMAN

Grafik di atas menunjukkan posisi Lantai Terendah dari performa kita. Garis hijau tebal di angka 70% adalah batas aman yang tidak boleh kita langgar. Perhatikan bahwa semua titik diamond (skenario terburuk kita) berada di sebelah kanan garis hijau tersebut.

Bahkan pada tingkat keyakinan paling ekstrem (99%), titik terendah kita masih tertahan di 70.8%. Ini adalah bukti visual yang sangat kuat bahwa proyek ini punya margin keamanan yang cukup untuk menghadapi gejolak pasar, sehingga kita bisa melangkah ke tahap selanjutnya dengan percaya diri.

7 . Referensi

1 . McClave, J. T., Benson, P. G., & Sincich, T. (2021). Statistics for Business and Economics (14th ed.). Pearson. (Materi: Interval Estimation based on Z-distribution and the concept of Confidence Levels).

2 . Black, K. (2019). Business Statistics: For Contemporary Decision Making. Wiley.

3 . McClave, J. T., Benson, P. G., & Sincich, T. (2021). Statistics for Business and Economics (14th ed.). Pearson. (Materi: Small-Sample Confidence Intervals for a Population Mean: t-Statistic).

4 . McClave, J. T., Benson, P. G., & Sincich, T. (2021). Statistics for Business and Economics (14th ed.). Pearson. (Materi: Comparing Z-distribution and t-distribution for mean estimation).

5 . Newbold, P., Carlson, W. L., & Thorne, B. M. (2012). Statistics for Business and Economics. Pearson.

6 . McClave, J. T., Benson, P. G., & Sincich, T. (2021). Statistics for Business and Economics (14th ed.). Pearson. (Materi: One-Sided Confidence Intervals for a Population Proportion).

7 . Anderson, D. R., Sweeney, D. J., Williams, T. A., Camm, J. D., & Cochran, J. J. (2020). Statistics for Business & Economics. Cengage Learning.

LS0tDQp0aXRsZTogIlN0dWR5IENhc2VzIg0Kc3VidGl0bGU6ICJDb25maWRlbmNlIEludGVydmFsIH4gV2VlayAxMyINCmF1dGhvcjogIkNocmljeWVzaWEgV2lubmVybGFkeSBGcmV4aXNvdmFyYSBVdmFzIg0KZGF0ZTogIjIwMjUtMTItMTYiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAic3R5bGUuY3NzIiAgICAgDQotLS0NCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCmxpYnJhcnkobWFnaWNrKQ0KZ2FtYmFyIDwtIGltYWdlX3JlYWQoIn4vVHVnYXMgZXN0YXRpc3Rpa2Egd2luZXIvdHVnYXMgd2VlayAxMSB+IHByb2JhYmlsaXR5IGRpc3RyaWJ1aXRpb24vZm90b18xX2pwZy5qcGciKQ0KZ2FtYmFyDQpgYGANCg0KIyAuIFBlbmRhaHVsdWFuDQoNClNlcmluZ2thbGkga2l0YSB0ZXJqZWJhayBwYWRhIHNhdHUgYW5na2EgcmF0YS1yYXRhIG1pc2FsbnlhIHRyYW5zYWtzaSBkaSBhbmdrYSAxMi4wIGF0YXUga29udmVyc2kgc2ViZXNhciAyMiUuIE5hbXVuLCBkYWxhbSBkdW5pYSBueWF0YSwgc2F0dSBhbmdrYSBzYWphIGJpc2EgbWVuaXB1LiBQZXJ0YW55YWFuIGJlc2FybnlhIGFkYWxhaDogU2ViZXJhcGEgamF1aCBraXRhIGJpc2EgbWVuamFtaW4gYmFod2EgYW5na2EgdGVyc2VidXQgYnVrYW4gc2VrYWRhciBrZWJldHVsYW4uDQoNCk1lbGFsdWkgNSBzdHVkaSBrYXN1cyBpbmksIGtpdGEgYWthbiBtZWxpaGF0IGJhZ2FpbWFuYSBDb25maWRlbmNlIEludGVydmFsIChDSSkgYmVrZXJqYSBzZWJhZ2FpICJqYXJpbmcgcGVuZ2FtYW4iIGRhbGFtIHBlbmdhbWJpbGFuIGtlcHV0dXNhbi4gS2l0YSB0aWRhayBoYW55YSBiaWNhcmEgc29hbCBoaXR1bmdhbiBtYXRlbWF0aXMsIHRhcGkgc29hbCBiYWdhaW1hbmEga2l0YSBtZW5nZWxvbGEgcmlzaWtvIGRpIHRlbmdhaCBrZXRpZGFrcGFzdGlhbiBkYXRhLg0KDQpZYW5nIGtpdGEgcGVsYWphcmkgZGFyaSBzdHVkaSBrYXN1cyBpbmkgYWRhbGFoOg0KMS4gVHJhZGUtb2ZmIEFudGFyYSBLZXlha2luYW4gZGFuIFByZXNpc2kgKFotVGVzdCk6IEtpdGEgYWthbiBtZWxpaGF0IGtlbmFwYSBzYWF0IGtpdGEgaW5naW4gOTklIHlha2luIHRpZGFrIHNhbGFoIGJpY2FyYSwga2l0YSBoYXJ1cyByZWxhIG1lbWJlcmlrYW4gcmVudGFuZyBhbmdrYSB5YW5nIGxlYmloIGxlYmFyLiBJbmkgYWRhbGFoIGhhcmdhIGRhcmkgc2VidWFoIGtlcGFzdGlhbi4NCg0KMi4gTWVuZ2hhZGFwaSBSZWFsaXRhIERhdGEgS2VjaWwgKFQtVGVzdCk6IFRpZGFrIHNlbGFtYW55YSBraXRhIHB1bnlhIGRhdGEgeWFuZyBzZW1wdXJuYS4gS2l0YSBha2FuIG1lbXBlbGFqYXJpIGJhZ2FpbWFuYSB0ZXRhcCBvYmpla3RpZiBtZXNraSBoYW55YSBtZW1pbGlraSBzZWRpa2l0IHNhbXBlbCwgdGFucGEgbWVuamFkaSB0ZXJsYWx1IHBlcmNheWEgZGlyaSAob3ZlcmNvbmZpZGVudCkuDQoNCjMuIFZhbGlkYXNpIFN0cmF0ZWdpIChBL0IgVGVzdGluZyk6IEJ1a2FuIGN1bWEgc29hbCBwZXJhc2FhbiBkZXNhaW4gYmFydSBsZWJpaCBiYWd1cywgdGFwaSBiYWdhaW1hbmEga2l0YSBtZW1idWt0aWthbiBzZWNhcmEgc3RhdGlzdGlrIGJhaHdhIHBlcmZvcm1hIGtpdGEgbWVtYW5nIHN1ZGFoIGphdWggbWVsYW1wYXVpIHN0YW5kYXIgbGFtYS4NCg0KNC4gS2VhbWFuYW4gQmF0YXMgQmF3YWggKE9uZS1TaWRlIENJKTogRGFsYW0gYmlzbmlzLCB5YW5nIHBhbGluZyBtZW5ha3V0a2FuIGFkYWxhaCBwZXJmb3JtYSB5YW5nIGFuamxvay4gS2l0YSBha2FuIG1lbmdndW5ha2FuIHBlbmRla2F0YW4gT25lLVNpZGVkIHVudHVrIG1lbWFzdGlrYW4gYmFod2EgcGVsdWFuZyBraXRhIGphdHVoIGRpIGJhd2FoIHRhcmdldCBoYW1waXIgbm9sIHBlcnNlbi4NCg0KSW50aW55YSwgbGFwb3JhbiBpbmkgYWRhbGFoIHRlbnRhbmcgYmFnYWltYW5hIGtpdGEgbWVuZ3ViYWggZGF0YSBtZW50YWggbWVuamFkaSBzZWJ1YWggamFtaW5hbi4gS2l0YSB0aWRhayBoYW55YSBtZW5lYmFrLCBraXRhIHNlZGFuZyBtZW1ldGFrYW4gcnVhbmcgcmlzaWtvIGFnYXIgc2V0aWFwIGxhbmdrYWggeWFuZyBkaWFtYmlsIG1lbWlsaWtpIGxhbmRhc2FuIHlhbmcga3VhdC4NCg0KDQoNCiMgLiBTdHVkeSBDYXNlIDE6IENJIE1FQU4gKFotVEVTVCkNCkRhbGFtIG1lbmdvbGFoIGRhdGEsIGFuZ2thIDEyLjAgeWFuZyBraXRhIHRlbXVrYW4gc2ViZW5hcm55YSBoYW55YWxhaCBzZWJ1YWggcG90cmV0IHNlc2FhdCwgYXRhdSB5YW5nIGRhbGFtIHN0YXRpc3RpayBkaWtlbmFsIHNlYmFnYWkgUG9pbnQgRXN0aW1hdGUuIEJheWFuZ2thbiBraXRhIHNlZGFuZyBtZW5jb2JhIG1lbmViYWsgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIHJpYnVhbiBvcmFuZyBoYW55YSBkZW5nYW4gYmVydGFueWEgcGFkYSAxMDAgb3Jhbmcgc2FqYS4gVGVudHUgYWRhIGZha3RvciBrZWJlcnVudHVuZ2FuIGF0YXUga2ViZXR1bGFuIHlhbmcgdGVyYmF3YSBkYWxhbSBzYW1wZWwgdGVyc2VidXQuIEppa2Ega2l0YSBoYW55YSBtZW55b2RvcmthbiBhbmdrYSB0dW5nZ2FsIDEyLjAga2VwYWRhIHBpbXBpbmFuIGF0YXUga2xpZW4sIGtpdGEgc2ViZW5hcm55YSBzZWRhbmcgbWVuZ2FtYmlsIHJpc2lrbyBiZXNhciBrYXJlbmEgYW5na2EgaXR1IHNhbmdhdCBtdW5na2luIGJlcmdlc2VyIGppa2Ega2l0YSBtZW5nYW1iaWwga2Vsb21wb2sgc2FtcGVsIHlhbmcgYmVyYmVkYSBkaSB3YWt0dSB5YW5nIGJlcmJlZGEuDQoNCkRpIHNpbmlsYWggQ29uZmlkZW5jZSBJbnRlcnZhbCAoQ0kpIGJla2VyamEgc2ViYWdhaSBEaW5kaW5nIFBlbGluZHVuZy4gQWxpaC1hbGloIG1lbWJlcmlrYW4gYW5na2EgdHVuZ2dhbCB5YW5nIGtha3UsIGtpdGEgbWVtYmFuZ3VuIHNlYnVhaCB6b25hIG55YW1hbiB5YW5nIGphdWggbGViaWggbWFzdWsgYWthbCBzZWNhcmEgaWxtaWFoIHVudHVrIG1lbmF1bmdpIGtldGlkYWtwYXN0aWFuIHRlcnNlYnV0Lg0KDQoxLiBEaWxlbWEgQW50YXJhIEtlcGFzdGlhbiBkYW4gS2V0YWphbWFuIChUaGUgVHJhZGUtb2ZmKQ0KQWRhIGZlbm9tZW5hIHVuaWsgeWFuZyB0ZXJsaWhhdCBqZWxhcyBwYWRhIFRhYmVsIDEuMToga2V0aWthIGtpdGEgbWVuY29iYSBtZW5haWtrYW4gbGV2ZWwga2VwZXJjYXlhYW4gZGFyaSA5MCUga2UgOTklLCByZW50YW5nIGFuZ2thbnlhIGp1c3RydSBzZW1ha2luIG1lbGViYXIsIGRhcmkgeWFuZyBzZW11bGEgY3VrdXAgc2VtcGl0IG1lbmphZGkgMTEuMTEgaGluZ2dhIDEyLjg4Lg0KDQpJbmkgYnVrYW5sYWggc2VidWFoIGtlc2FsYWhhbiBoaXR1bmcsIG1lbGFpbmthbiBiZXJsYWt1bnlhIEh1a3VtIFRyYWRlLW9mZiBLZXBhc3RpYW4uIEFuYWxvZ2lueWEgYmVnaW5pOiBKaWthIHNheWEgbWVtaW50YSBBbmRhIG1lbmViYWsgc3VodSB1ZGFyYSBoYXJpIGluaSBkYW4gQW5kYSBpbmdpbiBqYXdhYmFuIEFuZGEgMTAwJSBiZW5hciwgQW5kYSBtdW5na2luIGFrYW4gYmVya2F0YSwgU3VodSBoYXJpIGluaSBiZXJhZGEgZGkgYW50YXJhIC01MMKwQyBzYW1wYWkgMTAwwrBDLiBSZW50YW5nbnlhIHNhbmdhdCBsZWJhciBkYW4gbXVuZ2tpbiB0ZXJhc2EgdGlkYWsgdGVybGFsdSBzcGVzaWZpayAodHVtcHVsKSwgdGFwaSBBbmRhIGhhbXBpciBtdXN0YWhpbCBzYWxhaC4gU2ViYWxpa255YSwgamlrYSBBbmRhIGluZ2luIHRlcmxpaGF0IHNhbmdhdCBoZWJhdCBkYW4gcHJlc2lzaSwgQW5kYSBtdW5na2luIG1lbmViYWsgIkFudGFyYSAyOC41wrBDIHNhbXBhaSAyOC43wrBDLiIgQW5na2EgaW5pIHNhbmdhdCB0YWphbSBkYW4gc3Blc2lmaWssIHRhcGkga2VtdW5na2luYW4gQW5kYSBzYWxhaCBzYW5nYXRsYWggdGluZ2dpIGthcmVuYSBydWFuZyBnZXJha255YSB0ZXJsYWx1IHNlbXBpdC4NCg0KRGFsYW0gZHVuaWEgYmlzbmlzIGRhbiBwZW5nYW1iaWxhbiBrZXB1dHVzYW4sIGppa2Ega2l0YSBpbmdpbiA5OSUgeWFraW4gYmFod2EgZXN0aW1hc2kga2l0YSB0aWRhayBtZWxlc2V0LCBraXRhIGhhcnVzIGJlcmxhcGFuZyBkYWRhIG1lbmVyaW1hIHJlbnRhbmcgeWFuZyBsZWJpaCBsdWFzLiBLaXRhIHNlY2FyYSBzYWRhciBtZW51a2FyICJrZXRhamFtYW4iIGFuZ2thIGRlbWkgbWVuZGFwYXRrYW4ga2VhbWFuYW4gaW5mb3JtYXNpIHlhbmcgbGViaWggc29saWQgZGFuIGJpc2EgZGlwZXJ0YW5nZ3VuZ2phd2Fia2FuIHNlY2FyYSBtZXRvZG9sb2dpLg0KDQoyLiBNZW1iZWRhaCBWaXN1YWxpc2FzaTogVGl0aWsgSmFuamkgdnMgUnVhbmcgUmlzaWtvDQpQYWRhIHZpc3VhbGlzYXNpIHlhbmcgdGVyc2FqaSBkaSBiYXdhaCwgdGVyZGFwYXQgZHVhIGtvbXBvbmVuIHZpc3VhbCB1dGFtYSB5YW5nIG1lcmFuZ2t1bSBzZWx1cnVoIGxvZ2lrYSBhbmFsaXNpcyBraXRhOg0KDQpUaXRpayBNZXJhaCAoVGhlIFBvaW50KTogSW5pbGFoIHlhbmcgc2F5YSBzZWJ1dCBzZWJhZ2FpIFRpdGlrIEphbmppLiBJbmkgYWRhbGFoIGhhc2lsIG11cm5pIGRhcmkgZGF0YSBsYXBhbmdhbiB5YW5nIGtpdGEgbWlsaWtpIHNhYXQgaW5pLiBJYSBtZW5qYWRpIHB1c2F0IGF0YXUgamFuZ2thciBkYXJpIHNlbHVydWggcGVyaGl0dW5nYW4uDQoNCkdhcmlzIEhvcml6b250YWwgKFRoZSBNYXJnaW4gb2YgRXJyb3IpOiBJbmlsYWggUnVhbmcgUmlzaWtvIGtpdGEuIFNlbWFraW4gcGFuamFuZyBnYXJpcyBob3Jpem9udGFsIGluaSwgYmVyYXJ0aSBzZW1ha2luIGJlc2FyIHB1bGEgdGluZ2thdCBrZXRpZGFrcGFzdGlhbiB5YW5nIGtpdGEgYWt1aSBzZWNhcmEganVqdXIuIEdhcmlzIGluaSBtZW1iZXJpIHRhaHUga2l0YSBzZWJlcmFwYSBiZXNhciBydWFuZyBnZXJhayB5YW5nIGRpbWlsaWtpIHBlcnVzYWhhYW4gc2ViZWx1bSBzZWJ1YWggdHJlbiBkaWFuZ2dhcCBiZW5hci1iZW5hciBtZW55aW1wYW5nIGphdWggZGFyaSB0YXJnZXQgeWFuZyBkaWhhcmFwa2FuLg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGtuaXRyKSAgICAgDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCnRhYmVsX2Flc3RoZXRpYyA8LSBmdW5jdGlvbihkYXRhLCBjYXB0aW9uX3RleHQpIHsNCiAgZGF0YSAlPiUNCiAgICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSBjYXB0aW9uX3RleHQsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUNCiAgICBrYWJsZV9zdHlsaW5nKA0KICAgICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksDQogICAgICBmdWxsX3dpZHRoID0gRiwNCiAgICAgIHBvc2l0aW9uID0gImNlbnRlciINCiAgICApICU+JQ0KICAgIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiI2IzMDAwMCIsIGNvbG9yID0gIndoaXRlIikgDQp9DQoNCiMjIERhdGENCnhfYmFyXzEgPC0gMTIuMA0Kc2lnbWFfMSA8LSA0LjUNCm5fMSA8LSAxMDANCnNlXzEgPC0gc2lnbWFfMSAvIHNxcnQobl8xKQ0KDQojIyBOaWxhaSBLcml0aXMgWg0Kel85MCA8LSBxbm9ybSgwLjk1KSAjIFotc2NvcmUgdW50dWsgOTAlIChhbHBoYS8yID0gMC4wNSkNCnpfOTUgPC0gcW5vcm0oMC45NzUpICMgWi1zY29yZSB1bnR1ayA5NSUgKGFscGhhLzIgPSAwLjAyNSkNCnpfOTkgPC0gcW5vcm0oMC45OTUpICMgWi1zY29yZSB1bnR1ayA5OSUgKGFscGhhLzIgPSAwLjAwNSkNCg0KIyMgUGVyaGl0dW5nYW4gQ0kgZGFuIFRhYmVsDQpjaV9kYXRhXzEgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgWl9TY29yZSA9IGMoel85MCwgel85NSwgel85OSksDQogIE1hcmdpbl9vZl9FcnJvciA9IFpfU2NvcmUgKiBzZV8xLA0KICBMb3dlcl9Cb3VuZCA9IHhfYmFyXzEgLSBNYXJnaW5fb2ZfRXJyb3IsDQogIFVwcGVyX0JvdW5kID0geF9iYXJfMSArIE1hcmdpbl9vZl9FcnJvcg0KKQ0KDQojIE1lbmFtcGlsa2FuIFRhYmVsIFNDIDENCnRhYmVsX2Flc3RoZXRpYyhjaV9kYXRhXzEsICJUYWJlbCAxLjE6IENvbmZpZGVuY2UgSW50ZXJ2YWwgTWVhbiAoWi1UZXN0LCBTaWdtYSBEaWtldGFodWkpIikNCg0KDQpwbG90XzFfZW5oYW5jZWQgPC0gY2lfZGF0YV8xICU+JQ0KICBtdXRhdGUoVGluZ2thdF9LZXBlcmNheWFhbiA9IGZhY3RvcihUaW5na2F0X0tlcGVyY2F5YWFuLCBsZXZlbHMgPSBjKCI5OSUiLCAiOTUlIiwgIjkwJSIpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IHhfYmFyXzEsIHkgPSBUaW5na2F0X0tlcGVyY2F5YWFuKSkgKw0KIA0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyX0JvdW5kLCB4bWF4ID0gVXBwZXJfQm91bmQsIGNvbG9yID0gVGluZ2thdF9LZXBlcmNheWFhbiksDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMiwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwLjcpICsNCiAgDQogIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBmaWxsID0gIiNiMzAwMDAiLCBzaXplID0gNCwgc2hhcGUgPSAyMSwgc3Ryb2tlID0gMSkgKw0KICAjIE1lbmFtYmFoa2FuIGxhYmVsIHRla3MgZGkgYXRhcyBnYXJpcyBhZ2FyIGxlYmloIGluZm9ybWF0aWYNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gTG93ZXJfQm91bmQsIGxhYmVsID0gcm91bmQoTG93ZXJfQm91bmQsIDIpKSwgdmp1c3QgPSAtMS4yLCBzaXplID0gMywgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gVXBwZXJfQm91bmQsIGxhYmVsID0gcm91bmQoVXBwZXJfQm91bmQsIDIpKSwgdmp1c3QgPSAtMS4yLCBzaXplID0gMywgZm9udGZhY2UgPSAiYm9sZCIpICsNCiANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIjk5JSIgPSAiI2IzMDAwMCIsICI5NSUiID0gIiNFNjdFMjIiLCAiOTAlIiA9ICIjRjFDNDBGIikpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAxLjE6IFJ1YW5nIFJpc2lrbyAmIEtlcGFzdGlhbiAoWi1UZXN0KSIsDQogICAgc3VidGl0bGUgPSAiTWVsaWhhdCBiYWdhaW1hbmEgcmVudGFuZyBtZWxlYmFyIHNlaXJpbmcgbWVuaW5na2F0bnlhIHRpbmdrYXQga2VwZXJjYXlhYW4iLA0KICAgIHggPSAiUmF0YS1SYXRhIFRyYW5zYWtzaSAoRXN0aW1hc2kgVGl0aWsgPSAxMi4wKSIsDQogICAgeSA9ICJMZXZlbCBLZXBlcmNheWFhbiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNCwgY29sb3IgPSAiIzJDM0U1MCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpDQogICkNCg0KcHJpbnQocGxvdF8xX2VuaGFuY2VkKQ0KYGBgDQoNCkdyYWZpayBpbmkgbWVtcGVybGloYXRrYW4gYmFnYWltYW5hIENvbmZpZGVuY2UgSW50ZXJ2YWwgYmVrZXJqYSB1bnR1ayBtZW1pdGlnYXNpIHJpc2lrbyBkYXJpIGFuZ2thIHR1bmdnYWwgMTIuMDoNCg0KVGl0aWsgTWVyYWggKEVzdGltYXNpIFRpdGlrKTogSW5pIGFkYWxhaCBhbmdrYSByYXRhLXJhdGEgdHJhbnNha3NpIG11cm5pIGRhcmkgc2FtcGVsIGtpdGEgKDEyLjApLiBEaSBzaW5pbGFoIHBvc2lzaSBwdXNhdCBkYXRhIGJlcmFkYS4NCg0KR2FyaXMgSG9yaXpvbnRhbCAoTWFyZ2luIEtlc2FsYWhhbik6IEFuZGEgYmlzYSBtZWxpaGF0IGFkYSB0aWdhIHRpbmdrYXRhbiBnYXJpcy4gU2VtYWtpbiBrZSBhdGFzIChtZW51anUgOTklKSwgZ2FyaXNueWEgc2VtYWtpbiBwYW5qYW5nLiBJbmkgbWVudW5qdWtrYW4gYmFod2EgdW50dWsgbWVuZGFwYXRrYW4ga2V5YWtpbmFuIHlhbmcgbGViaWggdGluZ2dpLCBraXRhIGhhcnVzIHNpYXAgbWVuZXJpbWEgcmVudGFuZyBrZW11bmdraW5hbiB5YW5nIGxlYmloIGxlYmFyLg0KDQpXYXJuYSBzZWJhZ2FpIEluZGlrYXRvcjogV2FybmEgS3VuaW5nICg5MCUpIG1lbnVuanVra2FuIGVzdGltYXNpIHlhbmcgbGViaWggYWdyZXNpZiBzZWRhbmdrYW4gd2FybmEgTWVyYWggKDk5JSkgbWVudW5qdWtrYW4gcG9zaXNpIHlhbmcgbGViaWggYmVyaGF0aS1oYXRpIGF0YXUgImFtYW4iIGJhZ2kgcGVydXNhaGFhbi4NCg0KDQojIC4gU3R1ZHkgQ2FzZSAyOiBDSSBNRUFOIChULVRFU1QpIA0KSmlrYSBwYWRhIGthc3VzIHBlcnRhbWEga2l0YSBtZW1pbGlraSBrZW1ld2FoYW4gaW5mb3JtYXNpLCBkaSBLYXN1cyAyIGluaSBraXRhIGJlcmhhZGFwYW4gZGVuZ2FuIGtlbnlhdGFhbiBwYWhpdCB5YW5nIHNlcmluZyB0ZXJqYWRpIGRpIGxhcGFuZ2FuOiBEYXRhIHlhbmcgc2FuZ2F0IHNlZGlraXQuIERlbmdhbiBoYW55YSAxMiBzYW1wZWwgd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzLCBraXRhIHRpZGFrIGJpc2EgbGFnaSBtZW5nZ3VuYWthbiBaLVRlc3QuIE1lbmdhcGE/IEthcmVuYSBraXRhIHRpZGFrIG1lbmdldGFodWkgc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgc2VjYXJhIHBhc3RpLCBkYW4gdWt1cmFuIHNhbXBlbCB5YW5nIGtlY2lsIG1lbWJ1YXQgZXN0aW1hc2kga2l0YSBtZW5qYWRpIGphdWggbGViaWggc2Vuc2l0aWYgdGVyaGFkYXAga2VzYWxhaGFuLg0KDQpEaSBzaW5pbGFoIHQtVGVzdCAoRGlzdHJpYnVzaS10KSBoYWRpciBzZWJhZ2FpIHBhaGxhd2FuLiBKaWthIFotVGVzdCBhZGFsYWggcGVuZ3VrdXIgeWFuZyBrYWt1LCBtYWthIERpc3RyaWJ1c2ktdCBhZGFsYWggdmVyc2kgeWFuZyBsZWJpaCBzYWJhciBkYW4gYmVyaGF0aS1oYXRpLg0KDQoxLkRpc3RyaWJ1c2ktdCBtZW1pbGlraSAiRWtvciB5YW5nIExlYmloIFRlYmFsIg0KRGFsYW0gc3RhdGlzdGlrLCBraXRhIG1lbmdlbmFsIGlzdGlsYWggRmF0IFRhaWxzIGF0YXUgZWtvciB5YW5nIGxlYmloIHRlYmFsIHBhZGEga3VydmEgdC4gU2VjYXJhIG1hdGVtYXRpcywgaW5pIGFkYWxhaCBjYXJhIHQtZGlzdHJpYnV0aW9uIHVudHVrIG1lbmdha29tb2Rhc2kga2V0aWRha3RhaHVhbiBraXRhLiBLYXJlbmEgc2FtcGVsbnlhIGN1bWEgc2VkaWtpdCwgcmlzaWtvIGFkYW55YSBkYXRhIHBlbmNpbGFuIChvdXRsaWVyKSB5YW5nIG1lcnVzYWsgcmF0YS1yYXRhIG1lbmphZGkgc2FuZ2F0IGJlc2FyLg0KDQpEaXN0cmlidXNpLXQgbWVtYmVyaWthbiBydWFuZyBnZXJhayB0YW1iYWhhbiBkZW5nYW4gbWVtcGVybGViYXIgaW50ZXJ2YWxueWEgZGliYW5kaW5na2FuIFotVGVzdC4gSW5pIGFkYWxhaCBiZW50dWsga2VyZW5kYWhoYXRpYW4gc3RhdGlzdGlrOiBLYXJlbmEgc2F5YSBoYW55YSB0YWh1IHNlZGlraXQsIHNheWEgdGlkYWsgYWthbiBtZW1iZXJpa2FuIGphbmppIHlhbmcgdGVybGFsdSBiZXJhbmkuDQoNCjIuIE1ha25hIGRpIEJhbGlrIEFuZ2thOiBTdGFiaWxpdGFzIGRpIFRlbmdhaCBLZXRlcmJhdGFzYW4NClJhdGEtcmF0YSBwZW55ZWxlc2FpYW4gdHVnYXMgdGltIGtpdGEgYWRhbGFoIDguNCBtZW5pdC4gTmFtdW4sIHBlcmhhdGlrYW4gcmVudGFuZyA5NSUga2l0YSB5YW5nIGJlcmFkYSBkaSBhbmdrYSA4LjA4IGhpbmdnYSA4LjcxLg0KDQpNZXNraXB1biBzYW1wZWxueWEgbWluaW0sIGludGVydmFsIHlhbmcga2l0YSBoYXNpbGthbiB0ZXJnb2xvbmcgY3VrdXAgc2VtcGl0LiBBcGEgYXJ0aW55YSBiYWdpIGJpc25pcz8gSW5pIGFkYWxhaCBrYWJhciBiYWlrLiBKYXJhayBhbnRhciBiYXRhcyB5YW5nIHNlbXBpdCBtZW51bmp1a2thbiBiYWh3YSB2YXJpYW5zaSBkYXRhIGtpdGEgcmVuZGFoLiBEZW5nYW4ga2F0YSBsYWluLCBraW5lcmphIHRpbSBBbmRhIHNhbmdhdCBrb25zaXN0ZW4gZGFuIHN0YWJpbDsgcGVyYmVkYWFuIHdha3R1IHBlbmdlcmphYW4gYW50YXIgYW5nZ290YSB0aW0gdGlkYWsgdGVycGF1dCBqYXVoLiBLaXRhIGJpc2EgbWVtcHJlZGlrc2kgbWFzYSBkZXBhbiBkZW5nYW4gbGViaWggdGVuYW5nIGthcmVuYSBlZmlzaWVuc2kgdGltIHRlcmJ1a3RpIGJ1a2FuIHNla2FkYXIgZmx1a3R1YXNpIGFjYWsuDQoNCjMuIFZpc3VhbGlzYXNpIDIuMTogS29uc2lzdGVuc2kgZGFsYW0gQmFsdXRhbiBUZWFsDQpCZXJiZWRhIGRlbmdhbiBDYXNlIDEgeWFuZyBiZXJ3YXJuYSBDb3JhbCwgZGkgc2luaSBraXRhIG1lbmdndW5ha2FuIHdhcm5hIFRlYWwgdW50dWsgbWVsYW1iYW5na2FuIGtlc3RhYmlsYW4uIEdhcmlzIHB1dHVzLXB1dHVzIGRpIHRlbmdhaCBhZGFsYWggcGVyZm9ybWEgcmF0YS1yYXRhIHNhYXQgaW5pLCBzZW1lbnRhcmEgZ2FyaXMgaG9yaXpvbnRhbCBUZWFsIG1lbnVuanVra2FuIHNlYmVyYXBhIGphdWgga2l0YSBiZXJzZWRpYSBtZW5vbGVyYW5zaSBrZXRpZGFrcGFzdGlhbiBzZWJlbHVtIHBlcmZvcm1hIHRpbSBkaWFuZ2dhcCBtZW51cnVuLg0KDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCg0KIyMgRGF0YQ0KZGF0YV90dWdhc19zZWxlc2FpIDwtIGMoOC40LCA3LjksIDkuMSwgOC43LCA4LjIsIDkuMCwgNy44LCA4LjUsIDguOSwgOC4xLCA4LjYsIDguMykNCm5fMiA8LSBsZW5ndGgoZGF0YV90dWdhc19zZWxlc2FpKQ0KeF9iYXJfMiA8LSBtZWFuKGRhdGFfdHVnYXNfc2VsZXNhaSkNCnNfMiA8LSBzZChkYXRhX3R1Z2FzX3NlbGVzYWkpDQpkZl8yIDwtIG5fMiAtIDENCnNlXzIgPC0gc18yIC8gc3FydChuXzIpDQoNCiMjIE5pbGFpIEtyaXRpcyBUDQp0XzkwIDwtIHF0KDAuOTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDkwJSAoYWxwaGEvMiA9IDAuMDUpDQp0Xzk1IDwtIHF0KDAuOTc1LCBkZiA9IGRmXzIpICMgVC1zY29yZSB1bnR1ayA5NSUgKGFscGhhLzIgPSAwLjAyNSkNCnRfOTkgPC0gcXQoMC45OTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDk5JSAoYWxwaGEvMiA9IDAuMDA1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSBkYW4gVGFiZWwNCmNpX2RhdGFfMiA8LSB0aWJibGUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBUX1Njb3JlID0gYyh0XzkwLCB0Xzk1LCB0Xzk5KSwNCiAgTWFyZ2luX29mX0Vycm9yID0gVF9TY29yZSAqIHNlXzIsDQogIExvd2VyX0JvdW5kID0geF9iYXJfMiAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSB4X2Jhcl8yICsgTWFyZ2luX29mX0Vycm9yDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgMg0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMiwgIlRhYmVsIDIuMTogQ29uZmlkZW5jZSBJbnRlcnZhbCBNZWFuICh0LVRlc3QsIFNpZ21hIFRpZGFrIERpa2V0YWh1aSkiKQ0KDQoNCnBsb3RfMl9lbmhhbmNlZCA8LSBjaV9kYXRhXzIgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0geF9iYXJfMiwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogIA0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyX0JvdW5kLCB4bWF4ID0gVXBwZXJfQm91bmQsIGNvbG9yID0gVGluZ2thdF9LZXBlcmNheWFhbiksDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMywgc2l6ZSA9IDIsIGFscGhhID0gMC44KSArIA0KICAjIFRpdGlrIHB1c2F0IChSYXRhLXJhdGEgc2FtcGVsKQ0KICBnZW9tX3BvaW50KHNpemUgPSA1LCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAiI2IzMDAwMCIsIHNoYXBlID0gMjEsIHN0cm9rZSA9IDEuNSkgKw0KICAjIExhYmVsIGFuZ2thIGJhdGFzIGJhd2FoIGRhbiBhdGFzIGFnYXIgcHJlc2lzaQ0KICBnZW9tX3RleHQoYWVzKHggPSBMb3dlcl9Cb3VuZCwgbGFiZWwgPSByb3VuZChMb3dlcl9Cb3VuZCwgMikpLCB2anVzdCA9IC0xLjUsIHNpemUgPSAzLjgsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIGdlb21fdGV4dChhZXMoeCA9IFVwcGVyX0JvdW5kLCBsYWJlbCA9IHJvdW5kKFVwcGVyX0JvdW5kLCAyKSksIHZqdXN0ID0gLTEuNSwgc2l6ZSA9IDMuOCwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCI5OSUiID0gIiMwMDRkNGQiLCAiOTUlIiA9ICIjMDA4MDgwIiwgIjkwJSIgPSAiIzY2YjJiMiIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgMi4xOiBBbmFsaXNpcyBLb25zaXN0ZW5zaSBUaW0gKHQtVGVzdCkiLA0KICAgIHN1YnRpdGxlID0gIk1lc2tpcHVuIGRhdGEga2VjaWwgKG49MTIpLCByZW50YW5nIHNlbXBpdCBtZW51bmp1a2thbiBwZXJmb3JtYSB5YW5nIHN0YWJpbCIsDQogICAgeCA9ICJSYXRhLVJhdGEgV2FrdHUgUGVueWVsZXNhaWFuIChNZW5pdCkiLA0KICAgIHkgPSAiVGluZ2thdCBLZXBlcmNheWFhbiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiI2IzMDAwMCIsIHNpemUgPSAxNiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmF5MzAiLCBtYXJnaW4gPSBtYXJnaW4oYiA9IDE1KSksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTIpDQogICkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCB2aXN1YWxpc2FzaQ0KcHJpbnQocGxvdF8yX2VuaGFuY2VkKQ0KYGBgDQoNCkdyYWZpayBpbmkgbWVuZ2dhbWJhcmthbiBiYWdhaW1hbmEgdGltIEFuZGEgYmVrZXJqYSBkaSB0ZW5nYWgga2V0ZXJiYXRhc2FuIGRhdGEuIEthcmVuYSBraXRhIGhhbnlhIHB1bnlhIDEyIHNhbXBlbCwga2l0YSBtZW5nZ3VuYWthbiBwZW5kZWthdGFuIHQtVGVzdCB5YW5nIGxlYmloIGhhdGktaGF0aToNCg0KV2FybmEgVGVhbCAoU3RhYmlsaXRhcyk6IEdyYWRhc2kgd2FybmEgVGVhbCBtZW51bmp1a2thbiB0aW5na2F0ICJrZXdhc3BhZGFhbiIga2l0YS4gU2VtYWtpbiBnZWxhcCB3YXJuYW55YSAoOTklKSwgc2VtYWtpbiBsZWJhciBqYXJpbmcgcGVuZ2FtYW4geWFuZyBraXRhIHBhc2FuZyB1bnR1ayBtZW5nYW50aXNpcGFzaSBrZXRpZGFrcGFzdGlhbi4NCg0KUmVudGFuZyBHYXJpcyB5YW5nIFNlbXBpdDogUGVyaGF0aWthbiBiYWh3YSBtZXNraXB1biBraXRhIG1lbmFpa2thbiB0aW5na2F0IGtlcGVyY2F5YWFuIGtlIDk5JSwgamFyYWsgYW50YXJhIGFuZ2thIDguMDEgaGluZ2dhIDguNzkgbWVuaXQgbWFzaWggdGVyZ29sb25nIHJhcGF0LiBJbmkgYWRhbGFoIGJ1a3RpIHZpc3VhbCBiYWh3YSBwZXJmb3JtYSB0aW0gQW5kYSBzYW5nYXQga29uc2lzdGVuOyB0aWRhayBhZGEgcGVyYmVkYWFuIG1lbmNvbG9rIGFudGFyYSBhbmdnb3RhIHRpbSB5YW5nIGJla2VyamEgc2FuZ2F0IGNlcGF0IGF0YXUgc2FuZ2F0IGxhbWJhdC4NCg0KVGl0aWsgTWVyYWggKFJhdGEtcmF0YSA4LjQpOiBJbmlsYWggdGl0aWsga2VzZWltYmFuZ2FuIHRpbSBzYWF0IGluaS4gQW5na2EgZGkgdWp1bmcgZ2FyaXMgKExhYmVsKSBtZW51bmp1a2thbiBiYXRhcyBhbWFuIHlhbmcgYmlzYSBraXRhIGphbmppa2FuIGtlcGFkYSBtYW5hamVtZW4uDQoNCg0KIyAuIFN0dWR5IENhc2UgMzogQ0kgUFJPUE9SU0kgKEEvQiBURVNUSU5HKQ0KUGFkYSBrYXN1cyBrZXRpZ2EgaW5pLCBmb2t1cyBraXRhIGJlcmdlc2VyLiBLaXRhIHRpZGFrIGxhZ2kgYmVyYmljYXJhIHRlbnRhbmcgbmlsYWkgcmF0YS1yYXRhLCBtZWxhaW5rYW4gdGVudGFuZyBwZWx1YW5nIGtlYmVyaGFzaWxhbi4gU2tlbmFyaW9ueWEgYWRhbGFoIHNlYnVhaCB1amkgY29iYSBkZXNhaW4gdG9tYm9sIENhbGwgdG8gQWN0aW9uIChDVEEpIGJhcnUuIFBlcnRhbnlhYW4ga3JpdGlzbnlhIHNlZGVyaGFuYTogIkFwYWthaCBkZXNhaW4gYmFydSBpbmkgYmVuYXItYmVuYXIgbWVtYmF3YSBwZXJ1YmFoYW4sIGF0YXUgaGFueWEga2ViZXR1bGFuIHNlc2FhdD8iDQoNCktpdGEgbWVtaWxpa2kgc3RhbmRhciBsYW1hIChiYXNlbGluZSkgc2ViZXNhciAyMCUuIERpIHNpbmlsYWggc3RhdGlzdGlrIGJla2VyamEgdW50dWsgbWVtaXNhaGthbiBhbnRhcmEgaGFyYXBhbiBrb3NvbmcgZGVuZ2FuIGJ1a3RpIG55YXRhLg0KDQoxLiBWaXN1YWxpc2FzaSBLZW1lbmFuZ2FuOiBNZWxhbXBhdWkgR2FyaXMgTXVzdWgNCkppa2EgQW5kYSBtZWxpaGF0IFZpc3VhbGlzYXNpIDMuMSBkaSBiYXdhaCwgYWRhIGdhcmlzIGt1bmluZyB2ZXJ0aWthbCB5YW5nIGJlcmRpcmkgdGVnYWsgZGkgYW5na2EgMjAlLiBHYXJpcyBpbmkgYWRhbGFoICJtdXN1aCIga2l0YeKAlHRpdGlrIGRpIG1hbmEgcGVyZm9ybWEgbGFtYSBiZXJhZGEuDQoNCkhhbCB5YW5nIGx1YXIgYmlhc2EgYWRhbGFoIHNlbHVydWggaW50ZXJ2YWwga2VwZXJjYXlhYW4ga2l0YSAoZ2FyaXMgdW5ndSksIGJhaGthbiBwYWRhIHRpbmdrYXQga2V5YWtpbmFuIDk5JSBzZWthbGlwdW4sIGJlcmFkYSBzZXBlbnVobnlhIGRpIHNpc2kga2FuYW4gZ2FyaXMga3VuaW5nIHRlcnNlYnV0LiBTZWNhcmEgc3RhdGlzdGlrLCBpbmkgYWRhbGFoIGJ1a3RpIHlhbmcgdGlkYWsgdGVyYmFudGFoa2FuIGJhaHdhIGRlc2FpbiBiYXJ1IGluaSBtZW1pbGlraSBwZXJmb3JtYSB5YW5nIGxlYmloIHVuZ2d1bC4gVGlkYWsgYWRhIGFyZWEgeWFuZyB0dW1wYW5nIHRpbmRpaCAob3ZlcmxhcCksIHlhbmcgYmVyYXJ0aSBrZW11bmdraW5hbiBrZWdhZ2FsYW4gZGVzYWluIGJhcnUgdW50dWsgbWVueWFtYWkgZGVzYWluIGxhbWEgaGFtcGlyIHRpZGFrIGFkYS4NCg0KMi4gS2VzaW1wdWxhbiBTdHJhdGVnaXM6IExhbXB1IEhpamF1IHVudHVrIEludmVzdGFzaQ0KRGF0YSBtZW51bmp1a2thbiBiYWh3YSByYXRhLXJhdGEga2xpayBzYW1wZWwga2l0YSBiZXJhZGEgZGkgYW5na2EgMjIlLiBOYW11biwgeWFuZyBwYWxpbmcgcGVudGluZyBiYWdpIG1hbmFqZW1lbiBhZGFsYWggYmF0YXMgYmF3YWhueWEuDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCiMjIERhdGENCm5fMyA8LSA1MDANCnhfMyA8LSAxMTANCnBfaGF0XzMgPC0geF8zIC8gbl8zDQoNCiMjIFN0YW5kYXJkIEVycm9yDQpzZV8zIDwtIHNxcnQocF9oYXRfMyAqICgxIC0gcF9oYXRfMykgLyBuXzMpDQoNCiMjIE5pbGFpIEtyaXRpcyBaIChzYW1hIHNlcGVydGkgU0MgMSkNCnpfOTAgPC0gcW5vcm0oMC45NSkNCnpfOTUgPC0gcW5vcm0oMC45NzUpDQp6Xzk5IDwtIHFub3JtKDAuOTk1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSBkYW4gVGFiZWwNCmNpX2RhdGFfMyA8LSB0aWJibGUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBaX1Njb3JlID0gYyh6XzkwLCB6Xzk1LCB6Xzk5KSwNCiAgTWFyZ2luX29mX0Vycm9yID0gWl9TY29yZSAqIHNlXzMsDQogIExvd2VyX0JvdW5kID0gcF9oYXRfMyAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSBwX2hhdF8zICsgTWFyZ2luX29mX0Vycm9yDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgMw0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMywgIlRhYmVsIDMuMTogQ29uZmlkZW5jZSBJbnRlcnZhbCBQcm9wb3JzaSAoWi1UZXN0KSB1bnR1ayBDVEEgQmFydSIpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KDQoNCm5fMyA8LSA1MDANCnhfMyA8LSAxMTANCnBfaGF0XzMgPC0geF8zIC8gbl8zDQpzZV8zIDwtIHNxcnQocF9oYXRfMyAqICgxIC0gcF9oYXRfMykgLyBuXzMpDQp0YXJnZXRfbGFtYSA8LSAwLjIwICMgPC0tIFZhcmlhYmVsIGluaSBzdWRhaCBzYXlhIGRlZmluaXNpa2FuIGRpIHNpbmkgYWdhciB0aWRhayBlcnJvcg0KDQojIE1lbWJ1YXQgdGFiZWwgZGF0YSB1bnR1ayBwbG90DQpwbG90X2RhdGFfMyA8LSB0aWJibGUoDQogIFRpbmdrYXQgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBaID0gYyhxbm9ybSgwLjk1KSwgcW5vcm0oMC45NzUpLCBxbm9ybSgwLjk5NSkpDQopICU+JQ0KICBtdXRhdGUoDQogICAgTG93ZXIgPSBwX2hhdF8zIC0gKFogKiBzZV8zKSwNCiAgICBVcHBlciA9IHBfaGF0XzMgKyAoWiAqIHNlXzMpLA0KICAgIFRpbmdrYXQgPSBmYWN0b3IoVGluZ2thdCwgbGV2ZWxzID0gYygiOTklIiwgIjk1JSIsICI5MCUiKSkNCiAgKQ0KDQoNCmdncGxvdChwbG90X2RhdGFfMywgYWVzKHggPSBwX2hhdF8zLCB5ID0gVGluZ2thdCkpICsNCiAgDQogIGdlb21fc2VnbWVudChhZXMoeCA9IExvd2VyLCB4ZW5kID0gVXBwZXIsIHkgPSBUaW5na2F0LCB5ZW5kID0gVGluZ2thdCwgY29sb3IgPSBUaW5na2F0KSwgDQogICAgICAgICAgICAgICBzaXplID0gNCwgbGluZWVuZCA9ICJyb3VuZCIpICsgDQogICMgR0FSSVMgVEFSR0VUIExBTUEgKDIwJSkNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gdGFyZ2V0X2xhbWEsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gIiNENEFGMzciLCBzaXplID0gMS4yKSArDQogICMgVGl0aWsgcHVzYXQgcmF0YS1yYXRhIHNhbXBlbCAoMjIlKQ0KICBnZW9tX3BvaW50KHNpemUgPSA2LCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAiI2IzMDAwMCIsIHNoYXBlID0gMjEsIHN0cm9rZSA9IDIpICsNCiAgIyBMYWJlbCBwZXJzZW50YXNlIGFuZ2thIGRpIHVqdW5nLXVqdW5nIGdhcmlzDQogIGdlb21fdGV4dChhZXMoeCA9IExvd2VyLCBsYWJlbCA9IHBhc3RlMChyb3VuZChMb3dlcioxMDAsIDEpLCAiJSIpKSwgdmp1c3QgPSAtMS41LCBzaXplID0gNCwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gVXBwZXIsIGxhYmVsID0gcGFzdGUwKHJvdW5kKFVwcGVyKjEwMCwgMSksICIlIikpLCB2anVzdCA9IC0xLjUsIHNpemUgPSA0LCBmb250ZmFjZSA9ICJib2xkIikgKw0KICANCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIjk5JSIgPSAiIzQ4M0Q4QiIsICI5NSUiID0gIiM2QTVBQ0QiLCAiOTAlIiA9ICIjODM2RkZGIikpICsNCiAgIyBBbm90YXNpIExhYmVsIHVudHVrIFRhcmdldCBhZ2FyIGplbGFzDQogIGFubm90YXRlKCJsYWJlbCIsIHggPSB0YXJnZXRfbGFtYSwgeSA9IDMuNCwgbGFiZWwgPSAiVGFyZ2V0IExhbWEgKDIwJSkiLCBmaWxsID0gIiNENEFGMzciLCBjb2xvciA9ICJ3aGl0ZSIsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIA0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIDMuMTogVmFsaWRhc2kgS2VtZW5hbmdhbiBDVEEgQmFydSIsDQogICAgc3VidGl0bGUgPSAiSW50ZXJ2YWwga2VwZXJjYXlhYW4gc2VwZW51aG55YSBtZWxhbXBhdWkgcGVyZm9ybWEgZGVzYWluIGxhbWEiLA0KICAgIHggPSAiVGluZ2thdCBLb252ZXJzaSAoJSkiLA0KICAgIHkgPSAiTGV2ZWwgS2VwZXJjYXlhYW4iDQogICkgKw0KICAjIE1lbmdhdHVyIGJhdGFzIHN1bWJ1IFggYWdhciB2aXN1YWxpc2FzaSBmb2t1cw0KICBjb29yZF9jYXJ0ZXNpYW4oeGxpbSA9IGMoMC4xNywgMC4yNykpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNCkgKw0KICB0aGVtZSgNCiAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjYjMwMDAwIiwgc2l6ZSA9IDE4KSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxMikNCiAgKQ0KYGBgDQoNClZpc3VhbGlzYXNpIGluaSBtZW51bmp1a2thbiBwZXJiYW5kaW5nYW4gYW50YXJhIHBlcmZvcm1hIGRlc2FpbiBiYXJ1IGRlbmdhbiBzdGFuZGFyIGxhbWEgKDIwJSk6DQoNCkdhcmlzIEt1bmluZyAoVGFyZ2V0IExhbWEpOiBJbmkgYWRhbGFoIGJhdGFzIHBlcmZvcm1hIGRlc2FpbiBsYW1hLiBKaWthIGdhcmlzIHVuZ3UgYmVyYWRhIGRpIHNlYmVsYWgga2FuYW4gZ2FyaXMga3VuaW5nIGluaSwgYXJ0aW55YSBkZXNhaW4gYmFydSBsZWJpaCB1bmdndWwuDQoNCkdhcmlzIFVuZ3UgKEludGVydmFsIEtlcGVyY2F5YWFuKTogTWVudW5qdWtrYW4gcmVudGFuZyBwZXJmb3JtYSBkZXNhaW4gYmFydS4gSGViYXRueWEsIGJhaGthbiBwYWRhIHRpbmdrYXQga2VwZXJjYXlhYW4gOTklLCBzZWx1cnVoIGdhcmlzIHVuZ3UgdGV0YXAgYmVyYWRhIGRpIHNlYmVsYWgga2FuYW4gdGFyZ2V0IDIwJS4NCg0KVGl0aWsgTWVyYWg6IE1lcnVwYWthbiByYXRhLXJhdGEga29udmVyc2kgc2FtcGVsIGtpdGEgKDIyJSkuIEFuZ2thLWFuZ2thIGRpIHVqdW5nIGdhcmlzIChzZXBlcnRpIDE3LjUlIGF0YXUgMjYuNSUpIGFkYWxhaCBlc3RpbWFzaSB0ZXJidXJ1ayBkYW4gdGVyYmFpayB5YW5nIG11bmdraW4gdGVyamFkaS4NCg0KDQojIC4gU3R1ZHkgQ2FzZSA0OiBQRVJCQU5ESU5HQU4gWiBWUyBUIA0KRGkgc2luaSBraXRhIG1lbmdhZHUgZHVhIGNhcmEgYmVycGlraXIuIFRpbSBBIChaLVRlc3QpIHlhbmcgY2VuZGVydW5nIG9wdGltaXMgZGFuIFRpbSBCICh0LVRlc3QpIHlhbmcgbGViaWggd2FzcGFkYS4gUGVyYmVkYWFuIGtlZHVhbnlhIGJ1a2FuIGN1bWEgc29hbCBhbmdrYSwgdGFwaSBzb2FsIHNlYmVyYXBhIGJlc2FyIHJpc2lrbyB5YW5nIGJlcmFuaSBraXRhIGFtYmlsLg0KDQoxLiBCYWhheWEgVGVybGFsdSBQZXJjYXlhIERpcmkgKE92ZXJjb25maWRlbmNlKQ0KUGVyaGF0aWthbiBnYXJpcyBDb3JhbCAoVGltIEEpLiBJbnRlcnZhbG55YSBwYWxpbmcgc2VtcGl0IGRhbiB0ZXJsaWhhdCBzYW5nYXQgcHJlc2lzaS4gTmFtdW4sIGluaSBhZGFsYWggcGVuZGVrYXRhbiB5YW5nIGJlcmlzaWtvLiBUaW0gQSBiZXJhc3Vtc2kga2l0YSB0YWh1IHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSBzZWNhcmEgcGFzdGkuIERpIGR1bmlhIG55YXRhLCBhc3Vtc2kgaW5pIHNlcmluZ2thbGkgdGVybGFsdSBiZXJhbmkuIEppa2Ega2l0YSBoYW55YSBtZW5nYW5kYWxrYW4gaW50ZXJ2YWwgeWFuZyBzZW1waXQgaW5pLCBraXRhIGJpc2EgdGVyamViYWsgZGFsYW0gcmFzYSBhbWFuIHBhbHN1LiBKaWthIGRhdGEgYXNsaSBkaSBsYXBhbmdhbiB0ZXJueWF0YSBsZWJpaCBiZXJnZWpvbGFrLCBwcmVkaWtzaSBUaW0gQSBha2FuIGxhbmdzdW5nIG1lbGVzZXQuDQoNCjIuIEtlYW1hbmFuIGRpIEF0YXMgU2VnYWxhbnlhIChTYWZldHkgTWFyZ2luKQ0KU2ViYWxpa255YSwgbGloYXQgZ2FyaXMgVGVhbCAoVGltIEIpLiBJbnRlcnZhbG55YSBzZWRpa2l0IGxlYmloIGxlYmFyLiBUaW0gQiBzYWRhciBiYWh3YSBkZW5nYW4gaGFueWEgNDUgc2FtcGVsLCBhZGEga2V0aWRha3Bhc3RpYW4geWFuZyBiZXNhci4gTWVyZWthIG1lbmdndW5ha2FuIHQtVGVzdCB1bnR1ayBtZW1iZXJpa2FuIHJ1YW5nIGdlcmFrLiBEYWxhbSBtYW5hamVtZW4gcmlzaWtvLCBpbmkgYWRhbGFoIGxhbmdrYWggeWFuZyBqYXVoIGxlYmloIGJpamFrLiBMZWJpaCBiYWlrIGtpdGEgbWVtcHJlZGlrc2kgcmVudGFuZyB5YW5nIHNlZGlraXQgbGViaWggbHVhcyBuYW11biBhbWFuLCBkYXJpcGFkYSBtZW1iZXJpa2FuIGphbmppIGFuZ2thIHlhbmcgc2VtcGl0IHRhcGkgdGVybnlhdGEgc2FsYWguDQoNCmBgYHtyLGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIG91dC5leHRyYT0nc3R5bGU9ImRpc3BsYXk6YmxvY2s7IG1hcmdpbi1sZWZ0OmF1dG87IG1hcmdpbi1yaWdodDphdXRvOyInfQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCnRhYmVsX2Flc3RoZXRpYyA8LSBmdW5jdGlvbihkYXRhLCBjYXB0aW9uX3RleHQpIHsNCiAgZGF0YSAlPiUNCiAgICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSBjYXB0aW9uX3RleHQsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUNCiAgICBrYWJsZV9zdHlsaW5nKA0KICAgICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksDQogICAgICBmdWxsX3dpZHRoID0gRiwNCiAgICAgIHBvc2l0aW9uID0gImNlbnRlciINCiAgICApICU+JQ0KICAgIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiI2IzMDAwMCIsIGNvbG9yID0gIndoaXRlIikNCn0NCg0KeF9iYXJfNCA8LSAxMC41DQpzZF80ICAgIDwtIDAuOCANCm5fNCAgICAgPC0gNDUNCnNlXzQgICAgPC0gc2RfNCAvIHNxcnQobl80KQ0KbGV2ZWxzX3ZhbCA8LSBjKDAuOTAsIDAuOTUsIDAuOTkpDQoNCnRpbV9hIDwtIGRhdGEuZnJhbWUoDQogIFRpbmdrYXQgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBMb3dlciA9IHhfYmFyXzQgLSAocW5vcm0oMSAtICgxIC0gbGV2ZWxzX3ZhbCkvMikgKiBzZV80KSwNCiAgVXBwZXIgPSB4X2Jhcl80ICsgKHFub3JtKDEgLSAoMSAtIGxldmVsc192YWwpLzIpICogc2VfNCksDQogIE1ldG9kZSA9ICJUaW0gQSAoWi1UZXN0IC8gT3B0aW1pcykiDQopDQoNCnRpbV9iIDwtIGRhdGEuZnJhbWUoDQogIFRpbmdrYXQgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBMb3dlciA9IHhfYmFyXzQgLSAocXQoMSAtICgxIC0gbGV2ZWxzX3ZhbCkvMiwgZGYgPSBuXzQgLSAxKSAqIHNlXzQpLA0KICBVcHBlciA9IHhfYmFyXzQgKyAocXQoMSAtICgxIC0gbGV2ZWxzX3ZhbCkvMiwgZGYgPSBuXzQgLSAxKSAqIHNlXzQpLA0KICBNZXRvZGUgPSAiVGltIEIgKHQtVGVzdCAvIFdhc3BhZGEpIg0KKQ0KDQpwbG90X2RhdGFfZmluYWwgPC0gcmJpbmQodGltX2EsIHRpbV9iKQ0KcGxvdF9kYXRhX2ZpbmFsJFRpbmdrYXQgPC0gZmFjdG9yKHBsb3RfZGF0YV9maW5hbCRUaW5na2F0LCBsZXZlbHMgPSBjKCI5OSUiLCAiOTUlIiwgIjkwJSIpKQ0KDQoNCnRhYmVsX2Flc3RoZXRpYyhwbG90X2RhdGFfZmluYWwsICJUYWJlbCA0LjE6IFBlcmJhbmRpbmdhbiBQYXJhbWV0ZXIgWiB2cyBUIikNCg0KDQpnZ3Bsb3QocGxvdF9kYXRhX2ZpbmFsLCBhZXMoeCA9IHhfYmFyXzQsIHkgPSBUaW5na2F0LCBjb2xvciA9IE1ldG9kZSkpICsNCiAgIyBHYXJpcyBpbnRlcnZhbCB0ZWJhbCBkZW5nYW4gdWp1bmcgYnVsYXQNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBMb3dlciwgeG1heCA9IFVwcGVyKSwgDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuNCwgc2l6ZSA9IDIuNSwgYWxwaGEgPSAwLjgsIA0KICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KSwgbGluZWVuZCA9ICJyb3VuZCIpICsNCiAgDQogICMgR2FyaXMgdmVydGlrYWwgcmF0YS1yYXRhDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHhfYmFyXzQsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImdyYXk1MCIsIHNpemUgPSAxKSArDQogIA0KICANCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43KSwgc2l6ZSA9IDUsIHNoYXBlID0gMjEsIGZpbGwgPSAid2hpdGUiLCBzdHJva2UgPSAyKSArDQogIA0KICANCiAgZ2VvbV90ZXh0KGFlcyh4ID0gTG93ZXIsIGxhYmVsID0gcm91bmQoTG93ZXIsIDIpKSwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMS44KSwgdmp1c3QgPSAtMS44LCBzaXplID0gMy41LCBmb250ZmFjZSA9ICJib2xkIikgKw0KICBnZW9tX3RleHQoYWVzKHggPSBVcHBlciwgbGFiZWwgPSByb3VuZChVcHBlciwgMikpLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxLjgpLCB2anVzdCA9IC0xLjgsIHNpemUgPSAzLjUsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIA0KICAjIFdhcm5hIEtvbnRyYXM6IENvcmFsIChPcHRpbWlzKSB2cyBUZWFsIChXYXNwYWRhKQ0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiVGltIEEgKFotVGVzdCAvIE9wdGltaXMpIiA9ICIjRkY3RjUwIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaW0gQiAodC1UZXN0IC8gV2FzcGFkYSkiID0gIiMwMDgwODAiKSkgKw0KICANCiAgDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgNC4xOiBEdWVsIFN0cmF0ZWdpIEVzdGltYXNpIChaIHZzIFQpIiwNCiAgICBzdWJ0aXRsZSA9ICJ0LVRlc3QgKFRlYWwpIG1lbWJlcmlrYW4gJ1NhZmV0eSBNYXJnaW4nIHlhbmcgbGViaWggbHVhcyBkaWJhbmRpbmcgWi1UZXN0IChDb3JhbCkiLA0KICAgIHggPSAiQVBJIExhdGVuY3kgKE1pbGlkZXRpaykiLA0KICAgIHkgPSAiVGluZ2thdCBLZXBlcmNheWFhbiIsDQogICAgY29sb3IgPSAiTWV0b2RlIEFuYWxpc2lzIg0KICApICsNCiAgDQogIA0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KSArDQogIHRoZW1lKA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzJDM0U1MCIsIHNpemUgPSAxOCksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmF5MzAiLCBtYXJnaW4gPSBtYXJnaW4oYiA9IDIwKSksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDEyKQ0KICApDQpgYGANCg0KR3JhZmlrIGluaSBtZW1wZXJsaWhhdGthbiBwZXJiZWRhYW4gYW50YXJhIGVzdGltYXNpIHlhbmcgdGVybGFsdSBiZXJhbmkgKFRpbSBBKSBkZW5nYW4gZXN0aW1hc2kgeWFuZyB3YXNwYWRhIChUaW0gQik6DQoNCkxlYmFyIEludGVydmFsOiBHYXJpcyBUZWFsIChUaW0gQikgdGVybGloYXQgbGViaWggbGViYXIgZGliYW5kaW5na2FuIGdhcmlzIENvcmFsIChUaW0gQSkuIEluaSBhZGFsYWggc2FmZXR5IG1hcmdpbiBhdGF1IHJ1YW5nIG5hcGFzIGVrc3RyYSB5YW5nIGRpYmVyaWthbiBvbGVoIHQtdGVzdCBrYXJlbmEga2l0YSBoYW55YSBtZW1pbGlraSA0NSBzYW1wZWwuDQoNClRpdGlrIFRlbmdhaDogVGl0aWsgcHV0aWggZGkgdGVuZ2FoIGFkYWxhaCByYXRhLXJhdGEgbGF0ZW5zaSBraXRhICgxMC41IG1zKS4gR2FyaXMgeWFuZyBtZW1hbmphbmcgbWVudW5qdWtrYW4gc2ViZXJhcGEgamF1aCBrZW11bmdraW5hbiBhbmdrYSB0ZXJzZWJ1dCBiaXNhIG1lbGVzZXQuDQoNClRpbmdrYXQgS2VwZXJjYXlhYW46IFNlbWFraW4gdGluZ2dpIHBlcnNlbnRhc2VueWEgKDkwJSBrZSA5OSUpLCBnYXJpc255YSBzZW1ha2luIHBhbmphbmcuIEFydGlueWEsIHVudHVrIG1lbmRhcGF0a2FuIGtleWFraW5hbiA5OSUsIGtpdGEgaGFydXMgc2lhcCBkZW5nYW4gcmVudGFuZyByaXNpa28geWFuZyBsZWJpaCBsdWFzLg0KDQpJbnRpbnlhIFZpc3VhbGlzYXNpIGluaSBtZW1idWt0aWthbiBiYWh3YSBUaW0gQiAodC10ZXN0KSBsZWJpaCBhbWFuIHVudHVrIGRpamFkaWthbiBwYXRva2FuIGJpc25pcyBrYXJlbmEgbWVyZWthIHRpZGFrIG1lcmVtZWhrYW4ga2V0aWRha3Bhc3RpYW4gZGF0YSBkaSBsYXBhbmdhbi4NCg0KDQoNCiMgLiBTdHVkeSBDYXNlIDU6IE9ORS1TSURFRCBMT1dFUiBDSQ0KRGFsYW0gYmlzbmlzLCBzZXJpbmdrYWxpIGtpdGEgdGlkYWsgcGVkdWxpIGppa2EgcGVyZm9ybWEga2l0YSB0ZXJsYWx1IGJhZ3VzIChtZWxlYmloaSB0YXJnZXQpLiBLaXRhIGhhbnlhIHRha3V0IGppa2EgcGVyZm9ybWEga2l0YSBhbmpsb2sgKGRpIGJhd2FoIHRhcmdldCkuIEluaWxhaCBndW5hbnlhIE9uZS1TaWRlZCBMb3dlciBDSS4NCg0KRWZpc2llbnNpIFN0YXRpc3RpazogRGliYW5kaW5na2FuIG1lbmdndW5ha2FuIGR1YSBhcmFoICh1cHBlciBkYW4gbG93ZXIpLCBvbmUtc2lkZWQgbWVtYmVyaWthbiBmb2t1cyBwZW51aCBwYWRhIGJhdGFzIGJhd2FoLiBJbmkgbWVtYnVhdCBkZXRla3NpIHRlcmhhZGFwIGtlZ2FnYWxhbiB0YXJnZXQgbWVuamFkaSBsZWJpaCB0YWphbS4NCg0KRGFsYW0gb3BlcmFzaW9uYWwgc2VoYXJpLWhhcmksIGtpdGEgYmlhc2FueWEgc2FudGFpIHNhamEga2FsYXUgcGVyZm9ybWEgdGliYS10aWJhIG1lbGVkYWsgbWVsYW1wYXVpIHRhcmdldC4gWWFuZyBqdXN0cnUgYmlraW4gcHVzaW5nIGFkYWxhaCBrYWxhdSBwZXJmb3JtYSBraXRhICJhbmpsb2siIHNhbXBhaSBkaSBiYXdhaCBzdGFuZGFyLiBEaSBzaW5pbGFoIE9uZS1TaWRlZCBMb3dlciBDSSBiZXJwZXJhbiBzZWJhZ2FpIHBlbnllbGFtYXQuDQoNClNlZGVyaGFuYW55YSwgZGliYW5kaW5nIGtpdGEgcmVwb3QtcmVwb3QgbWVuZ2hpdHVuZyByZW50YW5nIGF0YXMgZGFuIGJhd2FoLCBwZW5kZWthdGFuIHNhdHUgYXJhaCBpbmkgYmlraW4ga2l0YSBmb2t1cyBwZW51aCBidWF0IG1lbmphZ2EgbGFudGFpIHBlcmZvcm1hLiBIYXNpbG55YSwgS2l0YSBqYWRpIHB1bnlhIHJhZGFyIHlhbmcgamF1aCBsZWJpaCB0YWphbSB1bnR1ayBtZW5kZXRla3NpIHJpc2lrbyBrZWdhZ2FsYW4gdGFyZ2V0Lg0KDQpQZW1idWt0aWFuIFRhcmdldDogVGFyZ2V0IGtpdGEgYWRhbGFoIDcwJS4gRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gOTklLCBiYXRhcyBiYXdhaCBraXRhIGJlcmFkYSBkaSA3MC44JS4NCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoc2NhbGVzKQ0KDQoNCnRhYmVsX2Flc3RoZXRpYyA8LSBmdW5jdGlvbihkYXRhLCBjYXB0aW9uX3RleHQpIHsNCiAgZGF0YSAlPiUNCiAgICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSBjYXB0aW9uX3RleHQsIGFsaWduID0gJ2MnLCBkaWdpdHMgPSA0KSAlPiUNCiAgICBrYWJsZV9zdHlsaW5nKA0KICAgICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksDQogICAgICBmdWxsX3dpZHRoID0gRiwNCiAgICAgIHBvc2l0aW9uID0gImNlbnRlciINCiAgICApICU+JQ0KICAgIHJvd19zcGVjKDAsIGJhY2tncm91bmQgPSAiI2IzMDAwMCIsIGNvbG9yID0gIndoaXRlIikgIyBIZWFkZXIgTWVyYWggTWFydW4NCn0NCg0KDQpuXzUgPC0gODAwDQp4XzUgPC0gNTkyDQpwX2hhdF81IDwtIHhfNSAvIG5fNQ0KdGFyZ2V0X3Byb3BfNSA8LSAwLjcwDQpzZV81IDwtIHNxcnQocF9oYXRfNSAqICgxIC0gcF9oYXRfNSkgLyBuXzUpDQoNCiMgUGVyaGl0dW5nYW4gRGF0YSBUYWJlbA0KY2lfZGF0YV81IDwtIGRhdGEuZnJhbWUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBaX1Njb3JlID0gYyhxbm9ybSgwLjkwKSwgcW5vcm0oMC45NSksIHFub3JtKDAuOTkpKQ0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIExvd2VyX0JvdW5kID0gcF9oYXRfNSAtIChaX1Njb3JlICogc2VfNSksIA0KICAgIFN0YXR1c19UYXJnZXQgPSBpZmVsc2UoTG93ZXJfQm91bmQgPj0gdGFyZ2V0X3Byb3BfNSwgIkFNQU4iLCAiUklTSUtPIikNCiAgKQ0KDQp0YWJlbF9hZXN0aGV0aWMoY2lfZGF0YV81LCAiVGFiZWwgNS4xOiBBbmFsaXNpcyBTYWZldHkgRmxvb3IgKEJhdGFzIEJhd2FoKSIpDQoNCg0KZGZfcGxvdF81IDwtIGNpX2RhdGFfNSAlPiUNCiAgbXV0YXRlKFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBmYWN0b3IoVGluZ2thdF9LZXBlcmNheWFhbiwgbGV2ZWxzID0gYygiOTklIiwgIjk1JSIsICI5MCUiKSkpDQoNCmdncGxvdChkZl9wbG90XzUsIGFlcyh4ID0gcF9oYXRfNSwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogICMgQXJlYSBBcnNpciBIaWphdSAoWm9uYSBBbWFuIEJpc25pcykNCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gdGFyZ2V0X3Byb3BfNSwgeG1heCA9IEluZiwgeW1pbiA9IC1JbmYsIHltYXggPSBJbmYsIA0KICAgICAgICAgICBmaWxsID0gIiMzQ0IzNzEiLCBhbHBoYSA9IDAuMSkgKw0KICANCiAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gTG93ZXJfQm91bmQsIHhlbmQgPSBwX2hhdF81LCB5ID0gVGluZ2thdF9LZXBlcmNheWFhbiwgeWVuZCA9IFRpbmdrYXRfS2VwZXJjYXlhYW4sIGNvbG9yID0gVGluZ2thdF9LZXBlcmNheWFhbiksIA0KICAgICAgICAgICAgICAgc2l6ZSA9IDMsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIA0KICAjIEdhcmlzIFZlcnRpa2FsIFRhcmdldCAoQmF0YXMgNzAlKQ0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB0YXJnZXRfcHJvcF81LCBjb2xvciA9ICIjMkU4QjU3Iiwgc2l6ZSA9IDEuNSwgbGluZXR5cGUgPSAic29saWQiKSArDQogIA0KIA0KICBnZW9tX3BvaW50KHNpemUgPSA1LCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAiI2IzMDAwMCIsIHNoYXBlID0gMjEsIHN0cm9rZSA9IDIpICsNCiAgDQogIA0KICBnZW9tX3RleHQoYWVzKHggPSBMb3dlcl9Cb3VuZCwgbGFiZWwgPSBwZXJjZW50KExvd2VyX0JvdW5kLCBhY2N1cmFjeSA9IDAuMSkpLCANCiAgICAgICAgICAgIHZqdXN0ID0gLTEuOCwgc2l6ZSA9IDQsIGZvbnRmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjMkMzRTUwIikgKw0KICANCiAgDQogIGFubm90YXRlKCJsYWJlbCIsIHggPSB0YXJnZXRfcHJvcF81LCB5ID0gMy40LCBsYWJlbCA9ICJUQVJHRVQgTUlOSU1BTDogNzAlIiwgDQogICAgICAgICAgIGZpbGwgPSAiIzJFOEI1NyIsIGNvbG9yID0gIndoaXRlIiwgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSAzLjUpICsNCiAgDQogDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCI5OSUiID0gIiMwMDRkNGQiLCAiOTUlIiA9ICIjMDA4MDgwIiwgIjkwJSIgPSAiIzY2YjJiMiIpKSArDQogIA0KICANCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnRfZm9ybWF0KCksIGxpbWl0cyA9IGMoMC42OSwgMC43NSkpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSA1LjE6IFZhbGlkYXNpIEtlYW1hbmFuIEJpc25pcyAoT25lLVNpZGVkKSIsDQogICAgc3VidGl0bGUgPSAiVGl0aWsgdGVyZW5kYWggKExvd2VyIEJvdW5kKSB0ZXRhcCBiZXJhZGEgZGkgYXRhcyB0YXJnZXQgNzAlIiwNCiAgICB4ID0gIlByb3BvcnNpIFBlbmdndW5hIFByZW1pdW0iLA0KICAgIHkgPSAiTGV2ZWwgS2VwZXJjYXlhYW4iDQogICkgKw0KICANCiAgDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTQpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzJDM0U1MCIsIHNpemUgPSAxOCksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIikNCiAgKQ0KYGBgDQoNCkdyYWZpayBkaSBhdGFzIG1lbnVuanVra2FuIHBvc2lzaSBMYW50YWkgVGVyZW5kYWggZGFyaSBwZXJmb3JtYSBraXRhLiBHYXJpcyBoaWphdSB0ZWJhbCBkaSBhbmdrYSA3MCUgYWRhbGFoIGJhdGFzIGFtYW4geWFuZyB0aWRhayBib2xlaCBraXRhIGxhbmdnYXIuIFBlcmhhdGlrYW4gYmFod2Egc2VtdWEgdGl0aWsgZGlhbW9uZCAoc2tlbmFyaW8gdGVyYnVydWsga2l0YSkgYmVyYWRhIGRpIHNlYmVsYWgga2FuYW4gZ2FyaXMgaGlqYXUgdGVyc2VidXQuDQoNCkJhaGthbiBwYWRhIHRpbmdrYXQga2V5YWtpbmFuIHBhbGluZyBla3N0cmVtICg5OSUpLCB0aXRpayB0ZXJlbmRhaCBraXRhIG1hc2loIHRlcnRhaGFuIGRpIDcwLjglLiBJbmkgYWRhbGFoIGJ1a3RpIHZpc3VhbCB5YW5nIHNhbmdhdCBrdWF0IGJhaHdhIHByb3llayBpbmkgcHVueWEgbWFyZ2luIGtlYW1hbmFuIHlhbmcgY3VrdXAgdW50dWsgbWVuZ2hhZGFwaSBnZWpvbGFrIHBhc2FyLCBzZWhpbmdnYSBraXRhIGJpc2EgbWVsYW5na2FoIGtlIHRhaGFwIHNlbGFuanV0bnlhIGRlbmdhbiBwZXJjYXlhIGRpcmkuDQoNCg0KIyAuIFJlZmVyZW5zaQ0KDQoxIC4gTWNDbGF2ZSwgSi4gVC4sIEJlbnNvbiwgUC4gRy4sICYgU2luY2ljaCwgVC4gKDIwMjEpLiBTdGF0aXN0aWNzIGZvciBCdXNpbmVzcyBhbmQgRWNvbm9taWNzICgxNHRoIGVkLikuIFBlYXJzb24uIChNYXRlcmk6IEludGVydmFsIEVzdGltYXRpb24gYmFzZWQgb24gWi1kaXN0cmlidXRpb24gYW5kIHRoZSBjb25jZXB0IG9mIENvbmZpZGVuY2UgTGV2ZWxzKS4NCg0KMiAuIEJsYWNrLCBLLiAoMjAxOSkuIEJ1c2luZXNzIFN0YXRpc3RpY3M6IEZvciBDb250ZW1wb3JhcnkgRGVjaXNpb24gTWFraW5nLiBXaWxleS4NCg0KMyAuIE1jQ2xhdmUsIEouIFQuLCBCZW5zb24sIFAuIEcuLCAmIFNpbmNpY2gsIFQuICgyMDIxKS4gU3RhdGlzdGljcyBmb3IgQnVzaW5lc3MgYW5kIEVjb25vbWljcyAoMTR0aCBlZC4pLiBQZWFyc29uLiAoTWF0ZXJpOiBTbWFsbC1TYW1wbGUgQ29uZmlkZW5jZSBJbnRlcnZhbHMgZm9yIGEgUG9wdWxhdGlvbiBNZWFuOiB0LVN0YXRpc3RpYykuDQoNCjQgLiBNY0NsYXZlLCBKLiBULiwgQmVuc29uLCBQLiBHLiwgJiBTaW5jaWNoLCBULiAoMjAyMSkuIFN0YXRpc3RpY3MgZm9yIEJ1c2luZXNzIGFuZCBFY29ub21pY3MgKDE0dGggZWQuKS4gUGVhcnNvbi4gKE1hdGVyaTogQ29tcGFyaW5nIFotZGlzdHJpYnV0aW9uIGFuZCB0LWRpc3RyaWJ1dGlvbiBmb3IgbWVhbiBlc3RpbWF0aW9uKS4NCg0KNSAuIE5ld2JvbGQsIFAuLCBDYXJsc29uLCBXLiBMLiwgJiBUaG9ybmUsIEIuIE0uICgyMDEyKS4gU3RhdGlzdGljcyBmb3IgQnVzaW5lc3MgYW5kIEVjb25vbWljcy4gUGVhcnNvbi4NCg0KNiAuIE1jQ2xhdmUsIEouIFQuLCBCZW5zb24sIFAuIEcuLCAmIFNpbmNpY2gsIFQuICgyMDIxKS4gU3RhdGlzdGljcyBmb3IgQnVzaW5lc3MgYW5kIEVjb25vbWljcyAoMTR0aCBlZC4pLiBQZWFyc29uLiAoTWF0ZXJpOiBPbmUtU2lkZWQgQ29uZmlkZW5jZSBJbnRlcnZhbHMgZm9yIGEgUG9wdWxhdGlvbiBQcm9wb3J0aW9uKS4NCg0KNyAuIEFuZGVyc29uLCBELiBSLiwgU3dlZW5leSwgRC4gSi4sIFdpbGxpYW1zLCBULiBBLiwgQ2FtbSwgSi4gRC4sICYgQ29jaHJhbiwgSi4gSi4gKDIwMjApLiBTdGF0aXN0aWNzIGZvciBCdXNpbmVzcyAmIEVjb25vbWljcy4gQ2VuZ2FnZSBMZWFybmluZy4NCg==