Study Cases

Confidence Interval~ Week 13

`

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

Confidence Interval (Selang Kepercayaan) adalah rentang nilai yang diyakini mengandung nilai rata-rata populasi yang sebenarnya (\(\mu\)) berdasarkan data sampel.Penggunaan Z-Test (Distribusi Normal Standar) dilakukan dalam kondisi “ideal” di mana ketidakpastian sampel dapat diminimalisir oleh ukuran data atau pengetahuan tentang populasi.

  1. Syarat Penggunaan Z-TestAnda menggunakan Z-Test untuk mencari Confidence Interval hanya jika:Standar deviasi populasi (\(\sigma\)) DIKETAHUI. Ini adalah syarat mutlak yang membedakannya dengan T-Test.Ukuran sampel besar (\(n \ge 30\)). Berdasarkan Central Limit Theorem, jika sampel besar, distribusi rata-rata sampel akan mendekati distribusi normal.Data dipilih secara acak (Random Sampling).

  2. Rumus CI Mean (Z-Test)Rumus umum untuk menghitung batas bawah dan batas atas adalah:\[\bar{x} \pm z_{\alpha/2} \cdot \left( \frac{\sigma}{\sqrt{n}} \right)\]Komponen Rumus:\(\bar{x}\): Rata-rata sampel (Point Estimate).\(z_{\alpha/2}\): Nilai kritis Z berdasarkan tingkat kepercayaan (Confidence Level).\(\sigma\): Standar deviasi populasi.\(n\): Jumlah sampel.\(\frac{\sigma}{\sqrt{n}}\): Standard Error (SE).\(z \cdot \frac{\sigma}{\sqrt{n}}\): Margin of Error (MoE).

Tabel 1.3: Confidence Interval Mean (Z-Test, Versi Pastel)
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

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

Standar deviasi populasi (\(\sigma\)) TIDAK diketahui. (Kita hanya punya standar deviasi sampel, \(s\)).Ukuran sampel kecil (\(n < 30\)). Meskipun jika \(n \geq 30\) dan \(\sigma\) tidak diketahui, penggunaan T-test tetap dianggap lebih akurat.Asumsi Normalitas: Data diasumsikan berdistribusi normal atau mendekati normal.2. Rumus Confidence Interval (T-Test)Rumus untuk mencari rentang rata-rata populasi (\(\mu\)) adalah:\[\bar{x} \pm t_{\alpha/2, df} \cdot \left( \frac{s}{\sqrt{n}} \right)\]Keterangan Komponen:\(\bar{x}\): Rata-rata sampel (Point Estimate).\(t_{\alpha/2, df}\): Nilai kritis dari tabel distribusi-t.\(\alpha\): Tingkat signifikansi (misal: jika kepercayaan 95%, maka \(\alpha = 0.05\)).\(df\): Degrees of Freedom (Derajat Bebas), rumusnya \(n - 1\).\(s\): Standar deviasi sampel.\(n\): Jumlah sampel.\(\frac{s}{\sqrt{n}}\): Standard Error (SE).3. Langkah-Langkah MenghitungJika Anda mengerjakan studi kasus, ikuti urutan ini:Hitung Rata-rata (\(\bar{x}\)): Jumlahkan semua data lalu bagi dengan \(n\).Hitung Standar Deviasi Sampel (\(s\)): Ukur sebaran data dari rata-ratanya.Tentukan Derajat Bebas (\(df\)): Kurangi jumlah sampel dengan 1 (\(n - 1\)).Cari Nilai \(t\) di Tabel: Gunakan nilai \(df\) dan tingkat kepercayaan yang diinginkan (misal 95% dua sisi).Hitung Margin of Error (MoE): Kalikan nilai \(t\) dengan Standard Error.Tentukan Rentang: (\(\bar{x} - MoE\)) sampai (\(\bar{x} + MoE\)).4. Contoh SederhanaMisalkan Anda menguji kekuatan beton baru dengan sampel 10 buah (\(n=10, df=9\)).Rata-rata kekuatan (\(\bar{x}\)) = 2500 psi.Standar deviasi sampel (\(s\)) = 50 psi.Tingkat kepercayaan 95% (\(\alpha = 0.05\)).Dari tabel-t, nilai \(t_{0.025, 9}\) adalah 2.262.Perhitungan:\[MoE = 2.262 \cdot \left( \frac{50}{\sqrt{10}} \right) \approx 2.262 \cdot 15.81 \approx 35.76\]Hasil CI: \(2500 \pm 35.76\) atau [2464.24, 2535.76].5. Mengapa Pakai \(n-1\)?Mungkin Anda bertanya-tanya mengapa ada Degrees of Freedom. Secara teknis, ini dilakukan untuk mengoreksi bias. Karena kita mengestimasi \(\mu\) menggunakan \(\bar{x}\), kita “kehilangan” satu derajat kebebasan untuk memastikan estimasi standar deviasi kita tidak terlalu optimis (terlalu kecil).

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

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

Dalam A/B Testing, kita biasanya membandingkan dua kelompok:

Kelompok A (Kontrol): Versi lama/asli.

Kelompok B (Variasi): Versi baru dengan perubahan tertentu.

CI Proporsi digunakan untuk menentukan seberapa yakin kita bahwa perbedaan Conversion Rate (CR) antara kedua kelompok tersebut bukan terjadi karena kebetulan, melainkan karena perubahan yang dilakukan.

Untuk menghitung CI Proporsi, kita membutuhkan data berikut dari masing-masing kelompok:\(n\): Total jumlah pengunjung/subjek.\(x\): Jumlah sukses (misalnya: klik, beli, daftar).\(\hat{p}\): Proporsi sampel (\(\hat{p} = \frac{x}{n}\)).

Dalam A/B testing, fokus kita adalah pada selisih proporsi (\(p_1 - p_2\)). Rumus Confidence Interval untuk selisih dua proporsi adalah:\[(p_1 - p_2) \pm z_{\alpha/2} \cdot \sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1} + \frac{\hat{p}_2(1-\hat{p}_2)}{n_2}}\]

\((p_1 - p_2)\): Estimasi titik selisih conversion rate.\(z_{\alpha/2}\): Nilai kritis (misal: 1.96 untuk kepercayaan 95%).Bagian akar adalah Standard Error (SE) dari selisih tersebut.

Tabel 3.1: CI Selisih Proporsi (B - A) - A/B Testing
Tingkat_Kepercayaan Z_Score Margin_of_Error Lower_Bound Upper_Bound
90% 1.6449 0.0423 0.0177 0.1023
95% 1.9600 0.0504 0.0096 0.1104
99% 2.5758 0.0662 -0.0062 0.1262

4 . Study Case 4: PERBANDINGAN Z VS T

Memilih antara Uji Z dan Uji T adalah keputusan krusial dalam analisis data. Perbedaan utamanya terletak pada ukuran sampel dan apakah kita mengetahui standar deviasi populasi (\(\sigma\)).

standar deviasi populasi (\(\sigma\)) yang sebenarnya (jarang terjadi di dunia nyata kecuali pada data historis/pabrik).Ukuran sampel Anda besar (\(n \geq 30\)). Menurut Teorema Limit Pusat, jika sampel cukup besar, distribusi rata-rata sampel akan mendekati normal meskipun populasi aslinya tidak.Gunakan Uji T Jika:Anda tidak tahu standar deviasi populasi (\(\sigma\)) dan harus mengestimasinya menggunakan standar deviasi sampel (\(s\)).Ukuran sampel Anda kecil (\(n < 30\)).Distribusi T memiliki “ekor” yang lebih tebal (leptokurtik) untuk mengompensasi ketidakpastian tambahan karena

Meskipun terlihat mirip, perhatikan simbol yang digunakan:Uji Z:\[Z = \frac{\bar{x} - \mu}{\frac{\sigma}{\sqrt{n}}}\]Uji T:\[T = \frac{\bar{x} - \mu}{\frac{s}{\sqrt{n}}}\]\(\bar{x}\): Rata-rata sampel\(\mu\): Rata-rata populasi\(\sigma\): Standar deviasi populasi\(s\): Standar deviasi sampel\(n\): Ukuran sampel

Dalam Uji T, Anda memerlukan nilai Degrees of Freedom (Derajat Bebas) untuk melihat tabel distribusi-t.Rumus: \(df = n - 1\)Semakin besar nilai \(n\) (dan \(df\)), bentuk distribusi-t akan semakin mendekati distribusi-Z. Itulah sebabnya pada sampel di atas 30, hasil Uji T seringkali memberikan kesimpulan yang mirip dengan Uji Z.

Tabel 4.2: Confidence Interval Z-Test vs t-Test (Versi Crispim)
Tingkat Kepercayaan Tes Nilai Kritis Batas Bawah Batas Atas Margin Error
90% Tim A (Z-Test, \(\sigma\) Known) 1.644854 10.304 10.696 0.196
95% Tim A (Z-Test, \(\sigma\) Known) 1.959964 10.266 10.734 0.234
99% Tim A (Z-Test, \(\sigma\) Known) 2.575829 10.193 10.807 0.307
90% Tim B (t-Test, \(s\) Used) 1.680230 10.300 10.700 0.200
95% Tim B (t-Test, \(s\) Used) 2.015368 10.260 10.740 0.240
99% Tim B (t-Test, \(s\) Used) 2.692278 10.179 10.821 0.321

5 . Study Case 5: ONE-SIDED LOWER CI

Materi mengenai One-Sided Lower Confidence Interval (CI) atau Selang Kepercayaan Batas Bawah Satu Sisi sangat penting dalam statistik, terutama ketika kita hanya peduli pada nilai minimum yang mungkin dari suatu parameter (seperti rata-rata atau proporsi).

Berikut adalah ringkasan materi untuk studi kasus Anda:

berbeda dengan selang kepercayaan dua sisi (yang memiliki batas bawah dan atas), One-Sided Lower CI memberikan batas minimum yang masuk akal bagi parameter populasi dengan tingkat kepercayaan tertentu (misalnya 95%).Dalam konteks ini, kita menyatakan bahwa nilai sebenarnya “setidaknya” sebesar \(L\) (Lower limit), dan batas atasnya adalah tak terhingga (\(\infty\)).Quality Control: Memastikan kekuatan material tidak di bawah standar tertentu.

Analisis Keuntungan: Menentukan estimasi terendah dari laba investasi.

Kesehatan: Memastikan kandungan nutrisi dalam makanan minimal mencapai angka tertentu.

Untuk rata-rata populasi (\(\mu\)) dengan asumsi distribusi normal atau sampel besar (\(n > 30\)):\[Lower\ Limit = \bar{x} - (z_{\alpha} \cdot \frac{\sigma}{\sqrt{n}})\] \(\bar{x}\): Rata-rata sampel.\(z_{\alpha}\): Nilai kritis dari tabel Z (menggunakan \(\alpha\), bukan \(\alpha/2\) karena hanya satu sisi).\(\sigma\): Standar deviasi populasi (atau \(s\) jika menggunakan standar deviasi sampel).\(n\): Ukuran sampel.

Tabel 5.1: One-Sided Lower Confidence Interval untuk Proporsi
Tingkat_Kepercayaan Z_Score_OneSided Margin_of_Error Lower_Bound Target_Tercapai
90% 1.2816 0.0199 0.7201 TRUE
95% 1.6449 0.0255 0.7145 TRUE
99% 2.3263 0.0361 0.7039 TRUE

LS0tDQp0aXRsZTogIlN0dWR5IENhc2VzIg0Kc3VidGl0bGU6ICJDb25maWRlbmNlIEludGVydmFsfiBXZWVrIDEzIg0KYXV0aG9yOiAiT2N0YXZpYSBNYWlhIGRvIFJlZ28iDQpkYXRlOiAiMjAyNS0xMi0xNiINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiIA0KLS0tDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQpsaWJyYXJ5KG1hZ2ljaykNCmdhbWJhciA8LSBpbWFnZV9yZWFkKCJ+L3R1Z2FzIHdlZWsgMTEgfiBvY3RhdmlhL05FTlkuanBnIikNCmdhbWJhcg0KYGBgDQpgDQoNCg0KIyAgU3R1ZHkgQ2FzZSAxOiBDSSBNRUFOIChaLVRFU1QpDQpDb25maWRlbmNlIEludGVydmFsIChTZWxhbmcgS2VwZXJjYXlhYW4pIGFkYWxhaCByZW50YW5nIG5pbGFpIHlhbmcgZGl5YWtpbmkgbWVuZ2FuZHVuZyBuaWxhaSByYXRhLXJhdGEgcG9wdWxhc2kgeWFuZyBzZWJlbmFybnlhICgkXG11JCkgYmVyZGFzYXJrYW4gZGF0YSBzYW1wZWwuUGVuZ2d1bmFhbiBaLVRlc3QgKERpc3RyaWJ1c2kgTm9ybWFsIFN0YW5kYXIpIGRpbGFrdWthbiBkYWxhbSBrb25kaXNpICJpZGVhbCIgZGkgbWFuYSBrZXRpZGFrcGFzdGlhbiBzYW1wZWwgZGFwYXQgZGltaW5pbWFsaXNpciBvbGVoIHVrdXJhbiBkYXRhIGF0YXUgcGVuZ2V0YWh1YW4gdGVudGFuZyBwb3B1bGFzaS4NCg0KMi4gU3lhcmF0IFBlbmdndW5hYW4gWi1UZXN0QW5kYSBtZW5nZ3VuYWthbiBaLVRlc3QgdW50dWsgbWVuY2FyaSBDb25maWRlbmNlIEludGVydmFsIGhhbnlhIGppa2E6U3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgRElLRVRBSFVJLiBJbmkgYWRhbGFoIHN5YXJhdCBtdXRsYWsgeWFuZyBtZW1iZWRha2FubnlhIGRlbmdhbiBULVRlc3QuVWt1cmFuIHNhbXBlbCBiZXNhciAoJG4gXGdlIDMwJCkuIEJlcmRhc2Fya2FuIENlbnRyYWwgTGltaXQgVGhlb3JlbSwgamlrYSBzYW1wZWwgYmVzYXIsIGRpc3RyaWJ1c2kgcmF0YS1yYXRhIHNhbXBlbCBha2FuIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbC5EYXRhIGRpcGlsaWggc2VjYXJhIGFjYWsgKFJhbmRvbSBTYW1wbGluZykuDQoNCjMuIFJ1bXVzIENJIE1lYW4gKFotVGVzdClSdW11cyB1bXVtIHVudHVrIG1lbmdoaXR1bmcgYmF0YXMgYmF3YWggZGFuIGJhdGFzIGF0YXMgYWRhbGFoOiQkXGJhcnt4fSBccG0gel97XGFscGhhLzJ9IFxjZG90IFxsZWZ0KCBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSBccmlnaHQpJCRLb21wb25lbiBSdW11czokXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwgKFBvaW50IEVzdGltYXRlKS4kel97XGFscGhhLzJ9JDogTmlsYWkga3JpdGlzIFogYmVyZGFzYXJrYW4gdGluZ2thdCBrZXBlcmNheWFhbiAoQ29uZmlkZW5jZSBMZXZlbCkuJFxzaWdtYSQ6IFN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaS4kbiQ6IEp1bWxhaCBzYW1wZWwuJFxmcmFje1xzaWdtYX17XHNxcnR7bn19JDogU3RhbmRhcmQgRXJyb3IgKFNFKS4keiBcY2RvdCBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSQ6IE1hcmdpbiBvZiBFcnJvciAoTW9FKS4NCg0KIA0KDQoNCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KDQoNCiMgUGFzdGlrYW4gQW5kYSB0ZWxhaCBtZW5naW5zdGFsIHBhY2thZ2VzIGluaSBqaWthIGJlbHVtDQojIGluc3RhbGwucGFja2FnZXMoYygidGlkeXZlcnNlIiwgImtuaXRyIiwgImthYmxlRXh0cmEiKSkNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KDQojIEZ1bmdzaSBrdXN0b20gdW50dWsgbWVtYnVhdCB0YWJlbCBkZW5nYW4gd2FybmEgcGFzdGVsDQp0YWJlbF9hZXN0aGV0aWMgPC0gZnVuY3Rpb24oZGF0YSwgY2FwdGlvbl90ZXh0KSB7DQogIGRhdGEgJT4lDQogICAga2FibGUoImh0bWwiLCBjYXB0aW9uID0gY2FwdGlvbl90ZXh0LCBhbGlnbiA9ICdjJywgZGlnaXRzID0gNCkgJT4lDQogICAga2FibGVfc3R5bGluZygNCiAgICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLA0KICAgICAgZnVsbF93aWR0aCA9IEYsDQogICAgICBwb3NpdGlvbiA9ICJjZW50ZXIiDQogICAgKSAlPiUNCiAgICByb3dfc3BlYygwLCBiYWNrZ3JvdW5kID0gIiM5MzcwREIiLCBjb2xvciA9ICJ3aGl0ZSIpICU+JSAgICMgSGVhZGVyIHVuZ3UgcGFzdGVsDQogICAgcm93X3NwZWMoMTpucm93KGRhdGEpLCBiYWNrZ3JvdW5kID0gIiNFMEZGRkYiKSAgICAgICAgICAgICAjIElzaSBiaXJ1IG11ZGENCn0NCg0KIyAtLS0gU1RVREkgS0FTVVM6IENJIE1FQU4gKFotVEVTVCkgLS0tDQoNCiMjIERhdGENCnhfYmFyXzEgPC0gMTIuMA0Kc2lnbWFfMSA8LSA0LjUNCm5fMSA8LSAxMDANCnNlXzEgPC0gc2lnbWFfMSAvIHNxcnQobl8xKQ0KDQojIyBOaWxhaSBLcml0aXMgWg0Kel85MCA8LSBxbm9ybSgwLjk1KQ0Kel85NSA8LSBxbm9ybSgwLjk3NSkNCnpfOTkgPC0gcW5vcm0oMC45OTUpDQoNCiMjIFBlcmhpdHVuZ2FuIENJIGRhbiBUYWJlbA0KY2lfZGF0YV8xIDwtIHRpYmJsZSgNCiAgVGluZ2thdF9LZXBlcmNheWFhbiA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIFpfU2NvcmUgPSBjKHpfOTAsIHpfOTUsIHpfOTkpLA0KICBNYXJnaW5fb2ZfRXJyb3IgPSBaX1Njb3JlICogc2VfMSwNCiAgTG93ZXJfQm91bmQgPSB4X2Jhcl8xIC0gTWFyZ2luX29mX0Vycm9yLA0KICBVcHBlcl9Cb3VuZCA9IHhfYmFyXzEgKyBNYXJnaW5fb2ZfRXJyb3INCikNCg0KIyBNZW5hbXBpbGthbiBUYWJlbA0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMSwgIlRhYmVsIDEuMzogQ29uZmlkZW5jZSBJbnRlcnZhbCBNZWFuIChaLVRlc3QsIFZlcnNpICBQYXN0ZWwpIikNCg0KIyMgVmlzdWFsaXNhc2kgQ0kNCnBsb3RfMSA8LSBjaV9kYXRhXzEgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0geF9iYXJfMSwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gTG93ZXJfQm91bmQsIHhtYXggPSBVcHBlcl9Cb3VuZCksDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMywgc2l6ZSA9IDEuMiwgY29sb3IgPSAiI0ZGNjlCNCIpICsgIyBIb3QgUGluaw0KICBnZW9tX3BvaW50KGNvbG9yID0gIiM0MEUwRDAiLCBzaXplID0gMywgc2hhcGUgPSAxOSkgKyAgICAgICAgICMgVHVycXVvaXNlLCBsaW5na2FyYW4NCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0geF9iYXJfMSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiI0I4ODYwQiIpICsgIyBEYXJrIEdvbGRlbnJvZA0KICANCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAxLjM6IENvbmZpZGVuY2UgSW50ZXJ2YWwgWi1UZXN0IChWZXJzaSBDcmlzcGltIFBhc3RlbCkiLA0KICAgIHN1YnRpdGxlID0gIk1lYW4gVHJhbnNha3NpIEhhcmlhbiAoJFxcc2lnbWEkIERpa2V0YWh1aSkiLA0KICAgIHggPSAiUmF0YS1SYXRhIFRyYW5zYWtzaSAoU2F0dWFuKSIsDQogICAgeSA9ICJUaW5na2F0IEtlcGVyY2F5YWFuIg0KICApICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjODAwMDgwIiksICAgIyBQdXJwbGUNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiM0ODNEOEIiKSwgICAgICAgICAgICAgICAjIERhcmsgU2xhdGUgQmx1ZQ0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzkzNzBEQiIpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiLCBjb2xvciA9ICIjRDNEM0QzIikNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIFBsb3QNCnByaW50KHBsb3RfMSkNCmBgYA0KDQojIC4gU3R1ZHkgQ2FzZSAyOiBDSSBNRUFOIChULVRFU1QpDQpTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKCRcc2lnbWEkKSBUSURBSyBkaWtldGFodWkuIChLaXRhIGhhbnlhIHB1bnlhIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwsICRzJCkuVWt1cmFuIHNhbXBlbCBrZWNpbCAoJG4gPCAzMCQpLiBNZXNraXB1biBqaWthICRuIFxnZXEgMzAkIGRhbiAkXHNpZ21hJCB0aWRhayBkaWtldGFodWksIHBlbmdndW5hYW4gVC10ZXN0IHRldGFwIGRpYW5nZ2FwIGxlYmloIGFrdXJhdC5Bc3Vtc2kgTm9ybWFsaXRhczogRGF0YSBkaWFzdW1zaWthbiBiZXJkaXN0cmlidXNpIG5vcm1hbCBhdGF1IG1lbmRla2F0aSBub3JtYWwuMi4gUnVtdXMgQ29uZmlkZW5jZSBJbnRlcnZhbCAoVC1UZXN0KVJ1bXVzIHVudHVrIG1lbmNhcmkgcmVudGFuZyByYXRhLXJhdGEgcG9wdWxhc2kgKCRcbXUkKSBhZGFsYWg6JCRcYmFye3h9IFxwbSB0X3tcYWxwaGEvMiwgZGZ9IFxjZG90IFxsZWZ0KCBcZnJhY3tzfXtcc3FydHtufX0gXHJpZ2h0KSQkS2V0ZXJhbmdhbiBLb21wb25lbjokXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwgKFBvaW50IEVzdGltYXRlKS4kdF97XGFscGhhLzIsIGRmfSQ6IE5pbGFpIGtyaXRpcyBkYXJpIHRhYmVsIGRpc3RyaWJ1c2ktdC4kXGFscGhhJDogVGluZ2thdCBzaWduaWZpa2Fuc2kgKG1pc2FsOiBqaWthIGtlcGVyY2F5YWFuIDk1JSwgbWFrYSAkXGFscGhhID0gMC4wNSQpLiRkZiQ6IERlZ3JlZXMgb2YgRnJlZWRvbSAoRGVyYWphdCBCZWJhcyksIHJ1bXVzbnlhICRuIC0gMSQuJHMkOiBTdGFuZGFyIGRldmlhc2kgc2FtcGVsLiRuJDogSnVtbGFoIHNhbXBlbC4kXGZyYWN7c317XHNxcnR7bn19JDogU3RhbmRhcmQgRXJyb3IgKFNFKS4zLiBMYW5na2FoLUxhbmdrYWggTWVuZ2hpdHVuZ0ppa2EgQW5kYSBtZW5nZXJqYWthbiBzdHVkaSBrYXN1cywgaWt1dGkgdXJ1dGFuIGluaTpIaXR1bmcgUmF0YS1yYXRhICgkXGJhcnt4fSQpOiBKdW1sYWhrYW4gc2VtdWEgZGF0YSBsYWx1IGJhZ2kgZGVuZ2FuICRuJC5IaXR1bmcgU3RhbmRhciBEZXZpYXNpIFNhbXBlbCAoJHMkKTogVWt1ciBzZWJhcmFuIGRhdGEgZGFyaSByYXRhLXJhdGFueWEuVGVudHVrYW4gRGVyYWphdCBCZWJhcyAoJGRmJCk6IEt1cmFuZ2kganVtbGFoIHNhbXBlbCBkZW5nYW4gMSAoJG4gLSAxJCkuQ2FyaSBOaWxhaSAkdCQgZGkgVGFiZWw6IEd1bmFrYW4gbmlsYWkgJGRmJCBkYW4gdGluZ2thdCBrZXBlcmNheWFhbiB5YW5nIGRpaW5naW5rYW4gKG1pc2FsIDk1JSBkdWEgc2lzaSkuSGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKTogS2FsaWthbiBuaWxhaSAkdCQgZGVuZ2FuIFN0YW5kYXJkIEVycm9yLlRlbnR1a2FuIFJlbnRhbmc6ICgkXGJhcnt4fSAtIE1vRSQpIHNhbXBhaSAoJFxiYXJ7eH0gKyBNb0UkKS40LiBDb250b2ggU2VkZXJoYW5hTWlzYWxrYW4gQW5kYSBtZW5ndWppIGtla3VhdGFuIGJldG9uIGJhcnUgZGVuZ2FuIHNhbXBlbCAxMCBidWFoICgkbj0xMCwgZGY9OSQpLlJhdGEtcmF0YSBrZWt1YXRhbiAoJFxiYXJ7eH0kKSA9IDI1MDAgcHNpLlN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKCRzJCkgPSA1MCBwc2kuVGluZ2thdCBrZXBlcmNheWFhbiA5NSUgKCRcYWxwaGEgPSAwLjA1JCkuRGFyaSB0YWJlbC10LCBuaWxhaSAkdF97MC4wMjUsIDl9JCBhZGFsYWggMi4yNjIuUGVyaGl0dW5nYW46JCRNb0UgPSAyLjI2MiBcY2RvdCBcbGVmdCggXGZyYWN7NTB9e1xzcXJ0ezEwfX0gXHJpZ2h0KSBcYXBwcm94IDIuMjYyIFxjZG90IDE1LjgxIFxhcHByb3ggMzUuNzYkJEhhc2lsIENJOiAkMjUwMCBccG0gMzUuNzYkIGF0YXUgWzI0NjQuMjQsIDI1MzUuNzZdLjUuIE1lbmdhcGEgUGFrYWkgJG4tMSQ/TXVuZ2tpbiBBbmRhIGJlcnRhbnlhLXRhbnlhIG1lbmdhcGEgYWRhIERlZ3JlZXMgb2YgRnJlZWRvbS4gU2VjYXJhIHRla25pcywgaW5pIGRpbGFrdWthbiB1bnR1ayBtZW5nb3Jla3NpIGJpYXMuIEthcmVuYSBraXRhIG1lbmdlc3RpbWFzaSAkXG11JCBtZW5nZ3VuYWthbiAkXGJhcnt4fSQsIGtpdGEgImtlaGlsYW5nYW4iIHNhdHUgZGVyYWphdCBrZWJlYmFzYW4gdW50dWsgbWVtYXN0aWthbiBlc3RpbWFzaSBzdGFuZGFyIGRldmlhc2kga2l0YSB0aWRhayB0ZXJsYWx1IG9wdGltaXMgKHRlcmxhbHUga2VjaWwpLg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCiMgUGFzdGlrYW4gcGFja2FnZXMgc3VkYWggdGVyaW5zdGFsDQojIGluc3RhbGwucGFja2FnZXMoYygidGlkeXZlcnNlIiwgImtuaXRyIiwgImthYmxlRXh0cmEiKSkNCiMgRGF0YQ0KZGF0YV90dWdhc19zZWxlc2FpIDwtIGMoOC40LCA3LjksIDkuMSwgOC43LCA4LjIsIDkuMCwgNy44LCA4LjUsIDguOSwgOC4xLCA4LjYsIDguMykNCm5fMiA8LSBsZW5ndGgoZGF0YV90dWdhc19zZWxlc2FpKQ0KeF9iYXJfMiA8LSBtZWFuKGRhdGFfdHVnYXNfc2VsZXNhaSkNCnNfMiA8LSBzZChkYXRhX3R1Z2FzX3NlbGVzYWkpDQpkZl8yIDwtIG5fMiAtIDENCnNlXzIgPC0gc18yIC8gc3FydChuXzIpDQoNCiMjIE5pbGFpIEtyaXRpcyBUDQp0XzkwIDwtIHF0KDAuOTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDkwJSAoYWxwaGEvMiA9IDAuMDUpDQp0Xzk1IDwtIHF0KDAuOTc1LCBkZiA9IGRmXzIpICMgVC1zY29yZSB1bnR1ayA5NSUgKGFscGhhLzIgPSAwLjAyNSkNCnRfOTkgPC0gcXQoMC45OTUsIGRmID0gZGZfMikgIyBULXNjb3JlIHVudHVrIDk5JSAoYWxwaGEvMiA9IDAuMDA1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSBkYW4gVGFiZWwNCmNpX2RhdGFfMiA8LSB0aWJibGUoDQogIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBUX1Njb3JlID0gYyh0XzkwLCB0Xzk1LCB0Xzk5KSwNCiAgTWFyZ2luX29mX0Vycm9yID0gVF9TY29yZSAqIHNlXzIsDQogIExvd2VyX0JvdW5kID0geF9iYXJfMiAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSB4X2Jhcl8yICsgTWFyZ2luX29mX0Vycm9yDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgMg0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfMiwgIlRhYmVsIDIuMTogQ29uZmlkZW5jZSBJbnRlcnZhbCBNZWFuICh0LVRlc3QsIFNpZ21hIFRpZGFrIERpa2V0YWh1aSkiKQ0KDQojIyBWaXN1YWxpc2FzaSBTQyAyOiBQZXJiYW5kaW5nYW4gSW50ZXJ2YWwNCnBsb3RfMiA8LSBjaV9kYXRhXzIgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0geF9iYXJfMiwgeSA9IFRpbmdrYXRfS2VwZXJjYXlhYW4pKSArDQogICMgSW50ZXJ2YWwgSG9yaXpvbnRhbCAoRXJyb3IgQmFyKQ0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyX0JvdW5kLCB4bWF4ID0gVXBwZXJfQm91bmQpLA0KICAgICAgICAgICAgICAgICBoZWlnaHQgPSAwLjMsIHNpemUgPSAxLjIsIGNvbG9yID0gIiMwMDgwODAiKSArICMgV2FybmEgVGVhbA0KICAjIFRpdGlrIFJhdGEtcmF0YSBTYW1wZWwNCiAgZ2VvbV9wb2ludChjb2xvciA9ICIjYjMwMDAwIiwgc2l6ZSA9IDMsIHNoYXBlID0gMTkpICsNCiAgIyBHYXJpcyBWZXJ0aWthbCB1bnR1ayBNZWFuDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHhfYmFyXzIsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImdyYXk1MCIpICsNCiAgDQogICMgRXN0ZXRpa2EgUGxvdA0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIDIuMTogUGVyYmFuZGluZ2FuIENvbmZpZGVuY2UgSW50ZXJ2YWwgdC1UZXN0IiwNCiAgICBzdWJ0aXRsZSA9ICJXYWt0dSBQZW55ZWxlc2FpYW4gVHVnYXMgKFNhbXBlbCBLZWNpbCwgJFxcc2lnbWEkIFRpZGFrIERpa2V0YWh1aSkiLA0KICAgIHggPSAiUmF0YS1SYXRhIFdha3R1IFBlbnllbGVzYWlhbiAoTWVuaXQpIiwNCiAgICB5ID0gIlRpbmdrYXQgS2VwZXJjYXlhYW4iDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiNiMzAwMDAiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyYXkzMCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiksDQogICAgcGFuZWwuZ3JpZC5tYWpvci55ID0gZWxlbWVudF9saW5lKGxpbmV0eXBlID0gImRvdHRlZCIsIGNvbG9yID0gImdyYXk5MCIpDQogICkNCg0KIyBNZW5hbXBpbGthbiBQbG90IFNDIDINCnByaW50KHBsb3RfMikNCmBgYA0KDQojIC4gU3R1ZHkgQ2FzZSAzOiBDSSBQUk9QT1JTSSAoQS9CIFRFU1RJTkcpDQoNCkRhbGFtIEEvQiBUZXN0aW5nLCBraXRhIGJpYXNhbnlhIG1lbWJhbmRpbmdrYW4gZHVhIGtlbG9tcG9rOg0KDQpLZWxvbXBvayBBIChLb250cm9sKTogVmVyc2kgbGFtYS9hc2xpLg0KDQpLZWxvbXBvayBCIChWYXJpYXNpKTogVmVyc2kgYmFydSBkZW5nYW4gcGVydWJhaGFuIHRlcnRlbnR1Lg0KDQpDSSBQcm9wb3JzaSBkaWd1bmFrYW4gdW50dWsgbWVuZW50dWthbiBzZWJlcmFwYSB5YWtpbiBraXRhIGJhaHdhIHBlcmJlZGFhbiBDb252ZXJzaW9uIFJhdGUgKENSKSBhbnRhcmEga2VkdWEga2Vsb21wb2sgdGVyc2VidXQgYnVrYW4gdGVyamFkaSBrYXJlbmEga2ViZXR1bGFuLCBtZWxhaW5rYW4ga2FyZW5hIHBlcnViYWhhbiB5YW5nIGRpbGFrdWthbi4NCg0KDQpVbnR1ayBtZW5naGl0dW5nIENJIFByb3BvcnNpLCBraXRhIG1lbWJ1dHVoa2FuIGRhdGEgYmVyaWt1dCBkYXJpIG1hc2luZy1tYXNpbmcga2Vsb21wb2s6JG4kOiBUb3RhbCBqdW1sYWggcGVuZ3VuanVuZy9zdWJqZWsuJHgkOiBKdW1sYWggc3Vrc2VzIChtaXNhbG55YToga2xpaywgYmVsaSwgZGFmdGFyKS4kXGhhdHtwfSQ6IFByb3BvcnNpIHNhbXBlbCAoJFxoYXR7cH0gPSBcZnJhY3t4fXtufSQpLg0KDQpEYWxhbSBBL0IgdGVzdGluZywgZm9rdXMga2l0YSBhZGFsYWggcGFkYSBzZWxpc2loIHByb3BvcnNpICgkcF8xIC0gcF8yJCkuIFJ1bXVzIENvbmZpZGVuY2UgSW50ZXJ2YWwgdW50dWsgc2VsaXNpaCBkdWEgcHJvcG9yc2kgYWRhbGFoOiQkKHBfMSAtIHBfMikgXHBtIHpfe1xhbHBoYS8yfSBcY2RvdCBcc3FydHtcZnJhY3tcaGF0e3B9XzEoMS1caGF0e3B9XzEpfXtuXzF9ICsgXGZyYWN7XGhhdHtwfV8yKDEtXGhhdHtwfV8yKX17bl8yfX0kJA0KDQokKHBfMSAtIHBfMikkOiBFc3RpbWFzaSB0aXRpayBzZWxpc2loIGNvbnZlcnNpb24gcmF0ZS4kel97XGFscGhhLzJ9JDogTmlsYWkga3JpdGlzIChtaXNhbDogMS45NiB1bnR1ayBrZXBlcmNheWFhbiA5NSUpLkJhZ2lhbiBha2FyIGFkYWxhaCBTdGFuZGFyZCBFcnJvciAoU0UpIGRhcmkgc2VsaXNpaCB0ZXJzZWJ1dC4NCg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCiMgLS0tIFNUVURZIENBU0UgMzogQ0kgU0VMSVNJSCBQUk9QT1JTSSAoQS9CIFRFU1RJTkcpIC0tLQ0KDQojIyBEYXRhDQojIEtlbG9tcG9rIEEgKFZlcnNpIExhbWEpDQpuX0EgPC0gNTAwDQp4X0EgPC0gOTANCnBfaGF0X0EgPC0geF9BIC8gbl9BICAjIENSOiAxOCUNCg0KIyBLZWxvbXBvayBCIChWZXJzaSBCYXJ1KQ0Kbl9CIDwtIDUwMA0KeF9CIDwtIDEyMA0KcF9oYXRfQiA8LSB4X0IgLyBuX0IgICMgQ1I6IDI0JQ0KDQojIFNlbGlzaWggUHJvcG9yc2kgKFBvaW50IEVzdGltYXRlKQ0KZF9oYXQgPC0gcF9oYXRfQiAtIHBfaGF0X0ENCg0KIyMgU3RhbmRhcmQgRXJyb3IgdW50dWsgU2VsaXNpaCBEdWEgUHJvcG9yc2kNCnNlX2RpZmYgPC0gc3FydCgocF9oYXRfQSAqICgxIC0gcF9oYXRfQSkgLyBuX0EpICsgKHBfaGF0X0IgKiAoMSAtIHBfaGF0X0IpIC8gbl9CKSkNCg0KIyMgTmlsYWkgS3JpdGlzIFoNCnpfOTAgPC0gcW5vcm0oMC45NSkNCnpfOTUgPC0gcW5vcm0oMC45NzUpDQp6Xzk5IDwtIHFub3JtKDAuOTk1KQ0KDQojIyBQZXJoaXR1bmdhbiBDSSB1bnR1ayBTZWxpc2loDQpjaV9hYl90ZXN0aW5nIDwtIHRpYmJsZSgNCiAgVGluZ2thdF9LZXBlcmNheWFhbiA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIFpfU2NvcmUgPSBjKHpfOTAsIHpfOTUsIHpfOTkpLA0KICBNYXJnaW5fb2ZfRXJyb3IgPSBaX1Njb3JlICogc2VfZGlmZiwNCiAgTG93ZXJfQm91bmQgPSBkX2hhdCAtIE1hcmdpbl9vZl9FcnJvciwNCiAgVXBwZXJfQm91bmQgPSBkX2hhdCArIE1hcmdpbl9vZl9FcnJvcg0KKQ0KDQojIE1lbmFtcGlsa2FuIFRhYmVsDQp0YWJlbF9hZXN0aGV0aWMoY2lfYWJfdGVzdGluZywgIlRhYmVsIDMuMTogQ0kgU2VsaXNpaCBQcm9wb3JzaSAoQiAtIEEpIC0gQS9CIFRlc3RpbmciKQ0KDQojIyBWaXN1YWxpc2FzaSBTZWxpc2loIChVcGxpZnQpDQpwbG90XzNfdXBkYXRlZCA8LSBjaV9hYl90ZXN0aW5nICU+JQ0KICBtdXRhdGUoVGluZ2thdF9LZXBlcmNheWFhbiA9IGZhY3RvcihUaW5na2F0X0tlcGVyY2F5YWFuLCBsZXZlbHMgPSBjKCI5OSUiLCAiOTUlIiwgIjkwJSIpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGRfaGF0LCB5ID0gVGluZ2thdF9LZXBlcmNheWFhbikpICsNCiAgIyBHYXJpcyBOZXRyYWwgKDAlKSAtIEppa2EgaW50ZXJ2YWwgbWVsZXdhdGkgZ2FyaXMgaW5pLCBiZXJhcnRpIHRpZGFrIGFkYSBwZXJiZWRhYW4gc2lnbmlmaWthbg0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvciA9ICJyZWQiLCBzaXplID0gMSkgKw0KICAjIEludGVydmFsIFNlbGlzaWgNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBMb3dlcl9Cb3VuZCwgeG1heCA9IFVwcGVyX0JvdW5kKSwgDQogICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuMywgc2l6ZSA9IDEuMiwgY29sb3IgPSAiIzhBMkJFMiIpICsNCiAgIyBUaXRpayBFc3RpbWFzaSBTZWxpc2loDQogIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMykgKw0KICANCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAzLjE6IEVzdGltYXNpIFNlbGlzaWggQ29udmVyc2lvbiBSYXRlIChCIC0gQSkiLA0KICAgIHN1YnRpdGxlID0gcGFzdGUoIlVwbGlmdCBUZXJkZXRla3NpOiIsIHJvdW5kKGRfaGF0ICogMTAwLCAyKSwgIiUiKSwNCiAgICB4ID0gIlNlbGlzaWggUHJvcG9yc2kgKEIgLSBBKSIsDQogICAgeSA9ICJUaW5na2F0IEtlcGVyY2F5YWFuIg0KICApICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiM0QjAwODIiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpDQogICkNCg0KcHJpbnQocGxvdF8zX3VwZGF0ZWQpDQoNCmBgYA0KDQojIC4gU3R1ZHkgQ2FzZSA0OiBQRVJCQU5ESU5HQU4gWiBWUyBUIA0KTWVtaWxpaCBhbnRhcmEgVWppIFogZGFuIFVqaSBUIGFkYWxhaCBrZXB1dHVzYW4ga3J1c2lhbCBkYWxhbSBhbmFsaXNpcyBkYXRhLiBQZXJiZWRhYW4gdXRhbWFueWEgdGVybGV0YWsgcGFkYSB1a3VyYW4gc2FtcGVsIGRhbiBhcGFrYWgga2l0YSBtZW5nZXRhaHVpIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpLg0KDQoNCg0KIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpIHlhbmcgc2ViZW5hcm55YSAoamFyYW5nIHRlcmphZGkgZGkgZHVuaWEgbnlhdGEga2VjdWFsaSBwYWRhIGRhdGEgaGlzdG9yaXMvcGFicmlrKS5Va3VyYW4gc2FtcGVsIEFuZGEgYmVzYXIgKCRuIFxnZXEgMzAkKS4gTWVudXJ1dCBUZW9yZW1hIExpbWl0IFB1c2F0LCBqaWthIHNhbXBlbCBjdWt1cCBiZXNhciwgZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIGFrYW4gbWVuZGVrYXRpIG5vcm1hbCBtZXNraXB1biBwb3B1bGFzaSBhc2xpbnlhIHRpZGFrLkd1bmFrYW4gVWppIFQgSmlrYTpBbmRhIHRpZGFrIHRhaHUgc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgZGFuIGhhcnVzIG1lbmdlc3RpbWFzaW55YSBtZW5nZ3VuYWthbiBzdGFuZGFyIGRldmlhc2kgc2FtcGVsICgkcyQpLlVrdXJhbiBzYW1wZWwgQW5kYSBrZWNpbCAoJG4gPCAzMCQpLkRpc3RyaWJ1c2kgVCBtZW1pbGlraSAiZWtvciIgeWFuZyBsZWJpaCB0ZWJhbCAobGVwdG9rdXJ0aWspIHVudHVrIG1lbmdvbXBlbnNhc2kga2V0aWRha3Bhc3RpYW4gdGFtYmFoYW4ga2FyZW5hDQogDQogDQoNCiBNZXNraXB1biB0ZXJsaWhhdCBtaXJpcCwgcGVyaGF0aWthbiBzaW1ib2wgeWFuZyBkaWd1bmFrYW46VWppIFo6JCRaID0gXGZyYWN7XGJhcnt4fSAtIFxtdX17XGZyYWN7XHNpZ21hfXtcc3FydHtufX19JCRVamkgVDokJFQgPSBcZnJhY3tcYmFye3h9IC0gXG11fXtcZnJhY3tzfXtcc3FydHtufX19JCQkXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwkXG11JDogUmF0YS1yYXRhIHBvcHVsYXNpJFxzaWdtYSQ6IFN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSRzJDogU3RhbmRhciBkZXZpYXNpIHNhbXBlbCRuJDogVWt1cmFuIHNhbXBlbA0KIA0KIA0KIA0KIERhbGFtIFVqaSBULCBBbmRhIG1lbWVybHVrYW4gbmlsYWkgRGVncmVlcyBvZiBGcmVlZG9tIChEZXJhamF0IEJlYmFzKSB1bnR1ayBtZWxpaGF0IHRhYmVsIGRpc3RyaWJ1c2ktdC5SdW11czogJGRmID0gbiAtIDEkU2VtYWtpbiBiZXNhciBuaWxhaSAkbiQgKGRhbiAkZGYkKSwgYmVudHVrIGRpc3RyaWJ1c2ktdCBha2FuIHNlbWFraW4gbWVuZGVrYXRpIGRpc3RyaWJ1c2ktWi4gSXR1bGFoIHNlYmFibnlhIHBhZGEgc2FtcGVsIGRpIGF0YXMgMzAsIGhhc2lsIFVqaSBUIHNlcmluZ2thbGkgbWVtYmVyaWthbiBrZXNpbXB1bGFuIHlhbmcgbWlyaXAgZGVuZ2FuIFVqaSBaLg0KDQpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBvdXQuZXh0cmE9J3N0eWxlPSJkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDphdXRvOyBtYXJnaW4tcmlnaHQ6YXV0bzsiJ30NCg0KDQoNCiMjIERhdGENCnhfYmFyXzQgPC0gMTAuNQ0Kc2RfNCA8LSAwLjggIyBTaW1wYW5nYW4gQmFrdQ0Kbl80IDwtIDQ1DQpkZl80IDwtIG5fNCAtIDENCnNlXzQgPC0gc2RfNCAvIHNxcnQobl80KQ0KDQojIyBOaWxhaSBLcml0aXMNCiMgWi1TY29yZSAoVGltIEEpDQp6X3Njb3Jlc180IDwtIGMocW5vcm0oMC45NSksIHFub3JtKDAuOTc1KSwgcW5vcm0oMC45OTUpKQ0KIyBULVNjb3JlIChUaW0gQikNCnRfc2NvcmVzXzQgPC0gYyhxdCgwLjk1LCBkZiA9IGRmXzQpLCBxdCgwLjk3NSwgZGYgPSBkZl80KSwgcXQoMC45OTUsIGRmID0gZGZfNCkpDQoNCiMjIFBlcmhpdHVuZ2FuIENJIGRhbiBUYWJlbA0KY2lfdGltX2EgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgVGVzID0gIlRpbSBBIChaLVRlc3QsICRcXHNpZ21hJCBLbm93bikiLA0KICBDcml0aWNhbF9WYWx1ZSA9IHpfc2NvcmVzXzQsDQogIExvd2VyX0JvdW5kID0geF9iYXJfNCAtICh6X3Njb3Jlc180ICogc2VfNCksDQogIFVwcGVyX0JvdW5kID0geF9iYXJfNCArICh6X3Njb3Jlc180ICogc2VfNCkNCikNCg0KY2lfdGltX2IgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgVGVzID0gIlRpbSBCICh0LVRlc3QsICRzJCBVc2VkKSIsDQogIENyaXRpY2FsX1ZhbHVlID0gdF9zY29yZXNfNCwNCiAgTG93ZXJfQm91bmQgPSB4X2Jhcl80IC0gKHRfc2NvcmVzXzQgKiBzZV80KSwNCiAgVXBwZXJfQm91bmQgPSB4X2Jhcl80ICsgKHRfc2NvcmVzXzQgKiBzZV80KQ0KKQ0KDQpjaV9kYXRhXzQgPC0gYmluZF9yb3dzKGNpX3RpbV9hLCBjaV90aW1fYikgJT4lDQogIG11dGF0ZShNRSA9IENyaXRpY2FsX1ZhbHVlICogc2VfNCkNCiMjIE1lbWJ1YXQgVGFiZWwgU0MgNCBkZW5nYW4gZ2F5YSBiYXJ1DQpjaV9kYXRhXzQgPC0gYmluZF9yb3dzKGNpX3RpbV9hLCBjaV90aW1fYikgJT4lDQogIG11dGF0ZShNRSA9IHJvdW5kKENyaXRpY2FsX1ZhbHVlICogc2VfNCwgMyksDQogICAgICAgICBMb3dlcl9Cb3VuZCA9IHJvdW5kKExvd2VyX0JvdW5kLCAzKSwNCiAgICAgICAgIFVwcGVyX0JvdW5kID0gcm91bmQoVXBwZXJfQm91bmQsIDMpKQ0KDQojIFRhYmVsIGRlbmdhbiBrYWJsZUV4dHJhIHVudHVrIGVzdGV0aWthIGJlcmJlZGENCmxpYnJhcnkoa2FibGVFeHRyYSkNCg0KY2lfZGF0YV80ICU+JQ0KICBrYWJsZSgiaHRtbCIsIGNhcHRpb24gPSAiVGFiZWwgNC4yOiBDb25maWRlbmNlIEludGVydmFsIFotVGVzdCB2cyB0LVRlc3QgKFZlcnNpIENyaXNwaW0pIiwNCiAgICAgICAgY29sLm5hbWVzID0gYygiVGluZ2thdCBLZXBlcmNheWFhbiIsICJUZXMiLCAiTmlsYWkgS3JpdGlzIiwgIkJhdGFzIEJhd2FoIiwgIkJhdGFzIEF0YXMiLCAiTWFyZ2luIEVycm9yIikpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLA0KICAgICAgICAgICAgICAgIGZ1bGxfd2lkdGggPSBGQUxTRSwNCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICJjZW50ZXIiKSAlPiUNCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGJhY2tncm91bmQgPSAiIzFFOTBGRiIsIGNvbG9yID0gIndoaXRlIikgJT4lICAgIyBIZWFkZXIgYmlydQ0KICByb3dfc3BlYygxOm5yb3coY2lfZGF0YV80KSwgYmFja2dyb3VuZCA9ICIjRjBGOEZGIikgJT4lICAgICAgICAgICAgICAgICAjIElzaSBiaXJ1IG11ZGENCiAgY29sdW1uX3NwZWMoMzo2LCBjb2xvciA9ICIjMDAwMDgwIikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbmdrYSBuYXZ5DQoNCiMjIFZpc3VhbGlzYXNpIFNDIDQ6IFZlcnNpICAoc2VtdWEgZXN0ZXRpa2EgZGl1YmFoKQ0KcGxvdF80IDwtIGNpX2RhdGFfNCAlPiUNCiAgbXV0YXRlKA0KICAgIFRpbmdrYXRfS2VwZXJjYXlhYW4gPSBmYWN0b3IoVGluZ2thdF9LZXBlcmNheWFhbiwgbGV2ZWxzID0gYygiOTklIiwgIjk1JSIsICI5MCUiKSksDQogICAgR3J1cCA9IHBhc3RlKFRlcywgVGluZ2thdF9LZXBlcmNheWFhbiwgc2VwID0gIiAtICIpDQogICkgJT4lDQogIGdncGxvdChhZXMoeCA9IHhfYmFyXzQsIHkgPSBHcnVwLCBjb2xvciA9IFRlcykpICsNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBMb3dlcl9Cb3VuZCwgeG1heCA9IFVwcGVyX0JvdW5kKSwNCiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMC40LCBzaXplID0gMS41KSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDQsIHNoYXBlID0gMTcpICsgIyBzZWdpdGlnYSwgYnVrYW4gYnVsYXQNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0geF9iYXJfNCwgbGluZXR5cGUgPSAiZG90ZGFzaCIsIGNvbG9yID0gIiNEQzE0M0MiKSArICMgQ3JpbXNvbg0KICANCiAgIyBXYXJuYSBiYXJ1IHVudHVrIFRpbSBBICYgVGltIEINCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNGRkQ3MDAiLCAiIzAwOEI4QiIpKSArICMgR29sZCB2cyBEYXJrIEN5YW4NCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSA0LjE6IENJIFotVGVzdCB2cyB0LVRlc3QgKFZlcnNpIENyaXNwaW0pIiwNCiAgICBzdWJ0aXRsZSA9ICJ0LVRlc3QgKFRpbSBCKSB0ZXRhcCBsZWJpaCBsZWJhciIsDQogICAgeCA9ICJBUEkgTGF0ZW5jeSAobXMpIiwNCiAgICB5ID0gIkdydXAgQW5hbGlzaXMgJiBDb25maWRlbmNlIExldmVsIg0KICApICsNCiAgdGhlbWVfY2xhc3NpYygpICsgIyBnYW50aSB0ZW1hDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzRCMDA4MiIsIHNpemUgPSAxNCksICAgIyBJbmRpZ28NCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIiMyRjRGNEYiLCBzaXplID0gMTEpLCAgICAgICAgICAgICAgICMgRGFyayBTbGF0ZSBHcmF5DQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gIml0YWxpYyIsIGNvbG9yID0gIiMwMDAwODAiKSwgICAgICAgICAgICAjIE5hdnkNCiAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGluZGFoIGxlZ2VuZA0KICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiI0Y1RjVGNSIsIGNvbG9yID0gIiNDQ0NDQ0MiKSAgICAgIyBiYWNrZ3JvdW5kIGxlZ2VuZA0KICApDQoNCiMgTWVuYW1waWxrYW4gUGxvdCBTQyA0DQpwcmludChwbG90XzQpDQpgYGANCg0KIyAuIFN0dWR5IENhc2UgNTogT05FLVNJREVEIExPV0VSIENJDQoNCk1hdGVyaSBtZW5nZW5haSBPbmUtU2lkZWQgTG93ZXIgQ29uZmlkZW5jZSBJbnRlcnZhbCAoQ0kpIGF0YXUgU2VsYW5nIEtlcGVyY2F5YWFuIEJhdGFzIEJhd2FoIFNhdHUgU2lzaSBzYW5nYXQgcGVudGluZyBkYWxhbSBzdGF0aXN0aWssIHRlcnV0YW1hIGtldGlrYSBraXRhIGhhbnlhIHBlZHVsaSBwYWRhIG5pbGFpIG1pbmltdW0geWFuZyBtdW5na2luIGRhcmkgc3VhdHUgcGFyYW1ldGVyIChzZXBlcnRpIHJhdGEtcmF0YSBhdGF1IHByb3BvcnNpKS4NCg0KQmVyaWt1dCBhZGFsYWggcmluZ2thc2FuIG1hdGVyaSB1bnR1ayBzdHVkaSBrYXN1cyBBbmRhOg0KDQpiZXJiZWRhIGRlbmdhbiBzZWxhbmcga2VwZXJjYXlhYW4gZHVhIHNpc2kgKHlhbmcgbWVtaWxpa2kgYmF0YXMgYmF3YWggZGFuIGF0YXMpLCBPbmUtU2lkZWQgTG93ZXIgQ0kgbWVtYmVyaWthbiBiYXRhcyBtaW5pbXVtIHlhbmcgbWFzdWsgYWthbCBiYWdpIHBhcmFtZXRlciBwb3B1bGFzaSBkZW5nYW4gdGluZ2thdCBrZXBlcmNheWFhbiB0ZXJ0ZW50dSAobWlzYWxueWEgOTUlKS5EYWxhbSBrb250ZWtzIGluaSwga2l0YSBtZW55YXRha2FuIGJhaHdhIG5pbGFpIHNlYmVuYXJueWEgInNldGlkYWtueWEiIHNlYmVzYXIgJEwkIChMb3dlciBsaW1pdCksIGRhbiBiYXRhcyBhdGFzbnlhIGFkYWxhaCB0YWsgdGVyaGluZ2dhICgkXGluZnR5JCkuUXVhbGl0eSBDb250cm9sOiBNZW1hc3Rpa2FuIGtla3VhdGFuIG1hdGVyaWFsIHRpZGFrIGRpIGJhd2FoIHN0YW5kYXIgdGVydGVudHUuDQoNCkFuYWxpc2lzIEtldW50dW5nYW46IE1lbmVudHVrYW4gZXN0aW1hc2kgdGVyZW5kYWggZGFyaSBsYWJhIGludmVzdGFzaS4NCg0KS2VzZWhhdGFuOiBNZW1hc3Rpa2FuIGthbmR1bmdhbiBudXRyaXNpIGRhbGFtIG1ha2FuYW4gbWluaW1hbCBtZW5jYXBhaSBhbmdrYSB0ZXJ0ZW50dS4NCg0KVW50dWsgcmF0YS1yYXRhIHBvcHVsYXNpICgkXG11JCkgZGVuZ2FuIGFzdW1zaSBkaXN0cmlidXNpIG5vcm1hbCBhdGF1IHNhbXBlbCBiZXNhciAoJG4gPiAzMCQpOiQkTG93ZXJcIExpbWl0ID0gXGJhcnt4fSAtICh6X3tcYWxwaGF9IFxjZG90IFxmcmFje1xzaWdtYX17XHNxcnR7bn19KSQkDQokXGJhcnt4fSQ6IFJhdGEtcmF0YSBzYW1wZWwuJHpfe1xhbHBoYX0kOiBOaWxhaSBrcml0aXMgZGFyaSB0YWJlbCBaIChtZW5nZ3VuYWthbiAkXGFscGhhJCwgYnVrYW4gJFxhbHBoYS8yJCBrYXJlbmEgaGFueWEgc2F0dSBzaXNpKS4kXHNpZ21hJDogU3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIChhdGF1ICRzJCBqaWthIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwpLiRuJDogVWt1cmFuIHNhbXBlbC4NCg0KDQoNCg0KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LmV4dHJhPSdzdHlsZT0iZGlzcGxheTpibG9jazsgbWFyZ2luLWxlZnQ6YXV0bzsgbWFyZ2luLXJpZ2h0OmF1dG87Iid9DQoNCg0KIyMgRGF0YQ0Kbl81IDwtIDgwMA0KeF81IDwtIDU5Mg0KcF9oYXRfNSA8LSB4XzUgLyBuXzUNCnRhcmdldF9wcm9wIDwtIDAuNzANCg0KIyMgU3RhbmRhcmQgRXJyb3INCnNlXzUgPC0gc3FydChwX2hhdF81ICogKDEgLSBwX2hhdF81KSAvIG5fNSkNCg0KIyMgTmlsYWkgS3JpdGlzIFogKE9uZS1TaWRlZDogWl9hbHBoYSkNCnpfOTBfb25lIDwtIHFub3JtKDAuOTApICMgWi1zY29yZSB1bnR1ayA5MCUgKGFscGhhID0gMC4xMCkNCnpfOTVfb25lIDwtIHFub3JtKDAuOTUpICMgWi1zY29yZSB1bnR1ayA5NSUgKGFscGhhID0gMC4wNSkNCnpfOTlfb25lIDwtIHFub3JtKDAuOTkpICMgWi1zY29yZSB1bnR1ayA5OSUgKGFscGhhID0gMC4wMSkNCg0KIyMgUGVyaGl0dW5nYW4gQ0kgZGFuIFRhYmVsDQpjaV9kYXRhXzUgPC0gdGliYmxlKA0KICBUaW5na2F0X0tlcGVyY2F5YWFuID0gYygiOTAlIiwgIjk1JSIsICI5OSUiKSwNCiAgWl9TY29yZV9PbmVTaWRlZCA9IGMoel85MF9vbmUsIHpfOTVfb25lLCB6Xzk5X29uZSksDQogIE1hcmdpbl9vZl9FcnJvciA9IFpfU2NvcmVfT25lU2lkZWQgKiBzZV81LA0KICBMb3dlcl9Cb3VuZCA9IHBfaGF0XzUgLSBNYXJnaW5fb2ZfRXJyb3IsDQogIFRhcmdldF9UZXJjYXBhaSA9IExvd2VyX0JvdW5kID49IHRhcmdldF9wcm9wDQopDQoNCiMgTWVuYW1waWxrYW4gVGFiZWwgU0MgNQ0KdGFiZWxfYWVzdGhldGljKGNpX2RhdGFfNSwgIlRhYmVsIDUuMTogT25lLVNpZGVkIExvd2VyIENvbmZpZGVuY2UgSW50ZXJ2YWwgdW50dWsgUHJvcG9yc2kiKQ0KDQoNCiMjIFZpc3VhbGlzYXNpIFNDIDU6IExvd2VyIEJvdW5kcyAoVmVyc2kgQ3Jpc3BpbSkNCnBsb3RfNSA8LSBjaV9kYXRhXzUgJT4lDQogIG11dGF0ZShUaW5na2F0X0tlcGVyY2F5YWFuID0gZmFjdG9yKFRpbmdrYXRfS2VwZXJjYXlhYW4sIGxldmVscyA9IGMoIjk5JSIsICI5NSUiLCAiOTAlIikpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gTG93ZXJfQm91bmQsIHkgPSBUaW5na2F0X0tlcGVyY2F5YWFuKSkgKw0KICAjIFRpdGlrIExvd2VyIEJvdW5kDQogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gVGFyZ2V0X1RlcmNhcGFpKSwgc2l6ZSA9IDUpICsNCiAgIyBHYXJpcyBWZXJ0aWthbCB1bnR1ayBUYXJnZXQgQmlzbmlzIDcwJQ0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB0YXJnZXRfcHJvcCwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvciA9ICIjREFBNTIwIiwgc2l6ZSA9IDEpICsgIyBHb2xkZW5yb2QNCiAgIyBUZWtzIFRhcmdldA0KICBhbm5vdGF0ZSgidGV4dCIsIHggPSB0YXJnZXRfcHJvcCwgeSA9IDMuNSwgbGFiZWwgPSAiVGFyZ2V0IEJpc25pcyAoNzAlKSIsDQogICAgICAgICAgIGhqdXN0ID0gLTAuMSwgY29sb3IgPSAiI0RBQTUyMCIsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIA0KICAjIEVzdGV0aWthIFBsb3QgZGVuZ2FuIHdhcm5hIGJhcnUNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIlRSVUUiID0gIiM5NDAwRDMiKSwgbmFtZSA9ICJUYXJnZXQgVGVycGVudWhpIikgKyAjIERhcmsgVmlvbGV0DQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQsIGxpbWl0cyA9IGMoMC43MCwgMC43NDUpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgNS4xOiBCYXRhcyBCYXdhaCBDb25maWRlbmNlIEludGVydmFsIE9uZS1TaWRlZCAoVmVyc2kgQ3Jpc3BpbSkiLA0KICAgIHN1YnRpdGxlID0gIk1lbWFzdGlrYW4gUHJvcG9yc2kgUGVuZ2d1bmEgUHJlbWl1bSBNZW5jYXBhaSBNaW5pbWFsIDcwJSIsDQogICAgeCA9ICJCYXRhcyBCYXdhaCBQcm9wb3JzaSAoQ29uZmlkZW5jZSBCb3VuZCkiLA0KICAgIHkgPSAiVGluZ2thdCBLZXBlcmNheWFhbiINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzRCMDA4MiIpLCAgICMgSW5kaWdvDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICIjQjg4NjBCIiksICAgICAgICAgICAgICAgIyBEYXJrIEdvbGRlbnJvZA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzk0MDBEMyIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIg0KICApDQoNCiMgTWVuYW1waWxrYW4gUGxvdCBTQyA1DQpwcmludChwbG90XzUpDQpgYGANCg0K