Tugas Week 13 ~ Confidence Interval

Logo

Chandra Rizal Alamsyah

Student Majoring in Data Science at ITSB

R Programming Data Science Statistics

1 Studi Kasus 1

Interval Kepercayaan untuk Mean, \(\sigma\) Diketahui: Sebuah platform e-commerce ingin memperkirakan rata-rata jumlah transaksi harian per pengguna setelah meluncurkan fitur baru. Berdasarkan data historis skala besar, standar deviasi populasi telah diketahui.

  • \(\sigma\) = 3.2 (Standar deviasi populasi)
  • \(n\) = 100 (Ukuran sampel)
  • \(\bar{x}\) = 12.6 (Rata-rata sampel)

Tugas

  1. Identifikasi uji statistik yang tepat dan berikan alasan pilihan Anda.
  2. Hitung Interval Kepercayaan (Confidence Intervals) untuk:
    • \(90\%\)
    • \(95\%\)
    • \(99\%\)
  3. Buat visualisasi perbandingan dari ketiga interval kepercayaan tersebut.
  4. Interpretasikan hasilnya dalam konteks analisis bisnis.

1.1 Identifikasi Uji statistik

Identifikasi uji statistik yang tepat untuk kasus ini adalah Z-Test untuk Satu Sampel Mean, dan estimasi dilakukan menggunakan Interval Kepercayaan Z (Z-Confidence Interval).

Alasan Pemilihan Uji

Ada dua alasan utama mengapa kita menggunakan distribusi Z (Normal standar) dan bukan distribusi t:

  • Standar Deviasi Populasi (\(\sigma\)) Diketahui: Ini adalah kriteria utama. Sesuai informasi yang ada, \(\sigma = 3.2\) sudah diketahui dari data historis skala besar. Jika \(\sigma\) tidak diketahui (hanya ada standar deviasi sampel \(s\)), maka kita harus menggunakan t-test.

  • Ukuran Sampel Besar (\(n \geq 30\)): Dengan \(n = 100\), sampel yang ada memenuhi asumsi Teorema Limit Pusat (Central Limit Theorem). Hal ini menjamin bahwa distribusi rata-rata sampel akan mendekati distribusi normal, terlepas dari bentuk distribusi populasi aslinya.

1.2 Perhitungan Interval Kepercayaan (Confidence Intervals)

Rumus umum untuk Interval Kepercayaan Z adalah:

\[CI = \bar{x} \pm z_{\alpha/2} \left( \frac{\sigma}{\sqrt{n}} \right)\]

Dimana:

  • \(\bar{x} = 12.6\)
  • \(\sigma = 3.2\)
  • \(n = 100\)
  • \(SE = \frac{\sigma}{\sqrt{n}} = \frac{3.2}{\sqrt{100}} = \frac{3.2}{10} = 0.32\) (Standard Error of the Mean)

Kita akan mencari nilai \(z_{\alpha/2}\) untuk masing-masing tingkat kepercayaan:

  1. Interval Kepercayaan 90%
    • \(\alpha = 1 - 0.90 = 0.10\)
    • \(\alpha/2 = 0.05\)
    • \(z_{0.05} = 1.645\) (Nilai z untuk \(P(Z < -1.645)\) atau \(P(Z > 1.645)\) adalah 0.05)
    • \(CI_{90\%} = 12.6 \pm 1.645 \times 0.32\)
    • \(CI_{90\%} = 12.6 \pm 0.5264\)
    • Lower Bound: \(12.6 - 0.5264 = 12.0736\)
    • Upper Bound: \(12.6 + 0.5264 = 13.1264\)\(CI_{90\%} = [12.07, 13.13]\)
  2. Interval Kepercayaan 95%
    • \(\alpha = 1 - 0.95 = 0.05\)
    • \(\alpha/2 = 0.025\)
    • \(z_{0.025} = 1.96\)
    • \(CI_{95\%} = 12.6 \pm 1.96 \times 0.32\)
    • \(CI_{95\%} = 12.6 \pm 0.6272\)
    • Lower Bound: \(12.6 - 0.6272 = 11.9728\)
    • Upper Bound: \(12.6 + 0.6272 = 13.2272\)
    • \(CI_{95\%} = [11.97, 13.23]\)
  3. Interval Kepercayaan 99%
    • \(\alpha = 1 - 0.99 = 0.01\)
    • \(\alpha/2 = 0.005\)
    • \(z_{0.005} = 2.576\)
    • \(CI_{99\%} = 12.6 \pm 2.576 \times 0.32\)
    • \(CI_{99\%} = 12.6 \pm 0.82432\)
    • Lower Bound: \(12.6 - 0.82432 = 11.77568\)
    • Upper Bound: \(12.6 + 0.82432 = 13.42432\)
    • \(CI_{99\%} = [11.78, 13.42]\)

Ringkasan Interval Kepercayaan

Tingkat Kepercayaan zα/2 Margin of Error Tingkat Kepercayaan
90% 1.645 \(\pm 0.53\) \([12.07, 13.13]\)
95% 1.96 \(\pm 0.63\) \([11.97, 13.23]\)
99% 2.576 \(\pm 0.82\) \([11.78, 13.42]\)

1.3 Visualisasi Perbandingan Interval Kepercayaan

1.4 Interpretasi Hasil dalam Konteks Analisis Bisnis

Berdasarkan perhitungan interval kepercayaan:

  1. Semakin Tinggi Tingkat Kepercayaan, Semakin Lebar Intervalnya:

    • Pada tingkat kepercayaan 90%, kita memperkirakan rata-rata transaksi harian per pengguna berada antara 12.07 hingga 13.13. Ini adalah rentang yang relatif sempit.

    • Pada tingkat kepercayaan 99%, rentang melebar menjadi 11.78 hingga 13.42. Ini mencerminkan bahwa untuk lebih yakin (99% percaya) bahwa interval kita mengandung rata-rata populasi yang sebenarnya, kita harus menerima rentang estimasi yang lebih luas.

  2. Trade-off antara Presisi dan Kepercayaan:

    • Presisi (rentang sempit) diinginkan dalam bisnis untuk membuat keputusan yang spesifik. Namun, presisi tinggi (misalnya, 90% CI) berarti Anda memiliki kepercayaan yang sedikit lebih rendah bahwa interval tersebut benar-benar mencakup nilai rata-rata populasi.

    • Kepercayaan (probabilitas tinggi) bahwa interval Anda menangkap parameter populasi (misalnya, 99% CI) berarti Anda harus menerima rentang estimasi yang lebih luas, yang mungkin kurang “spesifik” dalam perencanaan bisnis.

  3. Implikasi Bisnis:

    • Platform e-commerce dapat menyatakan dengan 95% kepercayaan bahwa rata-rata transaksi harian per pengguna setelah meluncurkan fitur baru berada di antara 11.97 dan 13.23.

    • Manajemen dapat menggunakan rentang ini untuk perencanaan. Misalnya, jika target kinerja fitur baru adalah minimal 12 transaksi per pengguna, interval 95% masih menunjukkan kemungkinan bahwa rata-rata sesungguhnya sedikit di bawah 12 (walaupun 11.97 sangat dekat). Interval 99% bahkan menunjukkan kemungkinan yang lebih tinggi untuk rata-rata di bawah 12.

    • Jika perusahaan membutuhkan kepastian yang sangat tinggi (99%) mengenai dampaknya, mereka harus menyadari bahwa rata-rata transaksi bisa serendah 11.78 atau setinggi 13.42, memberikan rentang perkiraan yang lebih besar untuk skenario terburuk dan terbaik.

Singkatnya, fitur baru ini tampaknya memiliki rata-rata transaksi yang cukup baik, dengan perkiraan terbaik mendekati 12.6. Pemilihan tingkat kepercayaan akan bergantung pada seberapa konservatif atau agresif manajemen ingin melihat potensi dampak fitur ini.

2 Studi Kasus 2

Interval Kepercayaan untuk Mean, \(\sigma\) Tidak Diketahui: Tim Riset UX (User Experience) menganalisis waktu penyelesaian tugas (dalam menit) untuk aplikasi seluler baru. Data dikumpulkan dari 12 pengguna:

\(8.4, 7.9, 9.1, 8.7, 8.2, 9.0, 7.8, 8.5, 8.9, 8.1, 8.6, 8.3\)

Tugas

  1. Identifikasi uji statistik yang tepat dan jelaskan alasannya.
  2. Hitung Interval Kepercayaan untuk:
    • \(90\%\)
    • \(95\%\)
    • \(99\%\)
  3. Visualisasikan ketiga interval tersebut dalam satu plot.
  4. Jelaskan bagaimana ukuran sampel dan tingkat kepercayaan memengaruhi lebar interval.

2.1 Identifikasi Uji Statistik

Uji statistik yang tepat untuk kasus ini adalah Distribusi t-Student (t-distribution).

Alasannya:

  • Standar Deviasi Populasi (\(\sigma\)) Tidak Diketahui: Kita hanya memiliki data sampel untuk menghitung standar deviasi sampel (\(s\)).
  • Ukuran Sampel Kecil: Jumlah sampel \(n = 12\) (kurang dari 30).
  • Asumsi: Kita mengasumsikan waktu penyelesaian tugas terdistribusi secara normal.

2.2 Perhitungan Interval Kepercayaan

Rumus yang digunakan adalah:

\[CI = \bar{x} \pm t_{\alpha/2, df} \times \left( \frac{s}{\sqrt{n}} \right)\] 1. Untuk Tingkat Kepercayaan 90%

  • (\(\alpha = 0.10\))\(\alpha/2 = 0.05\)

  • Nilai kritis \(t_{0.05, 11} = 1.796\)

  • Perhitungan: \[CI = 8.458 \pm 1.796 \times \left( \frac{0.412}{\sqrt{12}} \right)\]\[CI = 8.458 \pm 1.796 \times 0.119\]\[CI = 8.458 \pm 0.2137\]

  • Hasil: (8.244, 8.672)

  1. Untuk Tingkat Kepercayaan 95%

    • (\(\alpha = 0.05\))\(\alpha/2 = 0.025\)

    • Nilai kritis \(t_{0.025, 11} = 2.201\)

    • Perhitungan: \[CI = 8.458 \pm 2.201 \times \left( \frac{0.412}{\sqrt{12}} \right)\]\[CI = 8.458 \pm 2.201 \times 0.119\]\[CI = 8.458 \pm 0.2619\]

    • Hasil: (8.196, 8.720)

  2. Untuk Tingkat Kepercayaan 99%

    • (\(\alpha = 0.01\))\(\alpha/2 = 0.005\)

    • Nilai kritis \(t_{0.005, 11} = 3.106\)

    • Perhitungan: \[CI = 8.458 \pm 3.106 \times \left( \frac{0.412}{\sqrt{12}} \right)\]\[CI = 8.458 \pm 3.106 \times 0.119\]\[CI = 8.458 \pm 0.3696\]

    • Hasil: (8.088, 8.828)

Ringkasan Interval Kepercayaan

Tingkat Kepercayaan Nilai Kritis (t) Margin of Error Rentang Interval(Menit)
90% \(1.796\) \(0.214\) (8.244, 8.672)
95% \(2.201\) \(0.262\) (8.196, 8.720)
99% \(3.106\) \(0.370\) (8.088, 8.828)

2.3 Visualisasi Interval Kepercayaan

Pada plot yang ditampilkan:

  • Setiap garis horizontal merepresentasikan satu interval kepercayaan.

  • Titik di tengah adalah rata-rata sampel.

  • Terlihat jelas bahwa interval 99% paling lebar, diikuti 95%, lalu 90%.

2.4 Analisis Pengaruh Variabel

A. Pengaruh Tingkat Kepercayaan:Semakin tinggi tingkat kepercayaan (misal dari 90% ke 99%), maka interval akan semakin lebar. Hal ini karena kita membutuhkan rentang nilai yang lebih besar agar kita “lebih yakin” bahwa parameter populasi yang sebenarnya berada di dalam rentang tersebut.

B. Pengaruh Ukuran Sampel (\(n\)):Meskipun dalam kasus ini \(n\) tetap (12), secara teori: semakin besar ukuran sampel, maka interval akan semakin sempit. Hal ini terjadi karena nilai pembagi dalam rumus Standar Error (\(\sqrt{n}\)) menjadi lebih besar, yang mengurangi ketidakpastian (error) dalam estimasi kita.

3 Studi Kasus 3

Interval Kepercayaan untuk Proporsi, A/B Testing: Sebuah tim sains data menjalankan uji A/B pada desain tombol Call-To-Action (CTA) yang baru. Eksperimen menghasilkan:

\(n\) = 400 (Total pengguna)

\(x\) = 156 (Pengguna yang mengklik CTA)

Tugas:

  1. Hitung proporsi sampel \(\hat{p}\).
  2. Hitung Interval Kepercayaan untuk proporsi pada tingkat:
    • \(90\%\)
    • \(95\%\)
    • \(99\%\)
  3. Visualisasikan dan bandingkan ketiga interval tersebut.
  4. Jelaskan bagaimana tingkat kepercayaan memengaruhi pengambilan keputusan dalam eksperimen produk.

3.1 Proporsi Sampel (\(\hat{p}\))

Diketahui:

  • Total pengguna: \(n\)=400

  • Pengguna klik CTA: \(x\)=156

Proporsi sampel : \[\hat{p} = \frac{x}{n} = \frac{156}{400} = 0.39\] Interpretasi:

Sekitar 39% pengguna mengklik tombol CTA pada desain yang diuji.

3.2 Perhitungan Interval Kepercayaan untuk Proporsi

Rumus yang digunakan adalah: \[CI = \hat{p} \pm z_{\alpha/2} \times \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\] Di mana Standard Error (\(SE\)) adalah:\[SE = \sqrt{\frac{0.39(1-0.39)}{400}} = \sqrt{\frac{0.39 \times 0.61}{400}} \approx 0.02439\]

  1. Interval Kepercayaan 90% (\(z = 1.645\))

    • Margin of Error: \(1.645 \times 0.02439 \approx 0.0401\)
    • Interval: (0.3499, 0.4301) atau 34.99% - 43.01%
  2. Interval Kepercayaan 95% (\(z = 1.96\))

    • Margin of Error: \(1.96 \times 0.02439 \approx 0.0478\)
    • Interval: (0.3422, 0.4378) atau 34.22% - 43.78%
  3. Interval Kepercayaan 99% (\(z = 2.576\))

    • Margin of Error: \(2.576 \times 0.02439 \approx 0.0628\)
    • Interval: (0.3272, 0.4528) atau 32.72% - 45.28%

3.3 Visualisasi dan Perbandingan

Perbandingan: Semakin tinggi tingkat kepercayaan, rentang interval semakin lebar. Hal ini terjadi karena untuk mendapatkan kepastian yang lebih tinggi (99%), kita harus memperluas rentang estimasi agar nilai populasi yang sebenarnya tidak “luput”.

3.4 Pengaruh pada Pengambilan Keputusan Produk

Dalam eksperimen produk (A/B Testing), tingkat kepercayaan sangat memengaruhi risiko bisnis:

  • Tingkat Kepercayaan Tinggi (99%): Digunakan untuk keputusan yang berisiko tinggi atau mahal. Misalnya, jika mengganti desain CTA membutuhkan biaya pengembangan yang besar, tim akan memilih 99% untuk memastikan kenaikan konversi bukan karena faktor kebetulan.

  • Tingkat Kepercayaan Standar (95%): Merupakan standar industri. Memberikan keseimbangan yang baik antara kepastian statistik dan kecepatan pengambilan keputusan.

  • Dampak pada Keputusan: Jika interval kepercayaan desain baru (34% - 43%) tidak tumpang tindih (overlap) dengan interval desain lama (misal 20% - 25%), maka kita bisa dengan yakin memutuskan untuk roll-out desain baru. Namun, jika ada overlap, kita mungkin butuh ukuran sampel (\(n\)) yang lebih besar atau menjalankan tes lebih lama.

4 Studi Kasus 4

Perbandingan Presisi (Uji-Z vs Uji-t): Dua tim data mengukur latensi API (dalam milidetik) di bawah kondisi yang berbeda.

Tim A:

\(n\) = 36 (Ukuran sampel)

\(\bar{x}\)= 210 (Rata-rata sampel)

\(\sigma\) = 24 (Standar deviasi populasi diketahui)

Tim B:

\(n\) = 36 (Ukuran sampel)

\(\bar{x}\) = 210 (Rata-rata sampel)

\(s\) = 24 (Standar deviasi sampel)

Tugas:

  1. Identifikasi uji statistik yang digunakan oleh masing-masing tim.
  2. Hitung Interval Kepercayaan untuk
    • \(90\%\)
    • \(95\%\)
    • \(99\%\).
  3. Buat visualisasi yang membandingkan semua interval tersebut.
  4. Jelaskan mengapa lebar interval berbeda, meskipun data yang digunakan serupa.

4.1 Identifikasi Uji Statistik

  • Tim A menggunakan Uji-Z (Normal Distribution): Karena ukuran sampel sudah mencukupi (\(n \geq 30\)) dan standar deviasi populasi (\(\sigma\)) diketahui.

Uji yang digunakan: Uji-Z (Z-interval) \[CI = \bar{x} \pm z_{\alpha/2} \left( \frac{\sigma}{\sqrt{n}} \right)\]

  • Tim B menggunakan Uji-t (Student’s t-Distribution): Karena meskipun ukuran sampel cukup, tim ini hanya mengetahui standar deviasi sampel (\(s\)), bukan standar deviasi populasi.

Uji yang digunakan: Uji-t (t-interval) \[CI = \bar{x} \pm t_{\alpha/2, df} \times \left( \frac{s}{\sqrt{n}} \right)\]

4.2 Perhitungan Interval Kepercayaan (CI)

Kedua tim memiliki \(\bar{x} = 210\), \(n = 36\), dan angka deviasi \(24\).Standard Error (SE) untuk keduanya adalah: \(SE = \frac{24}{\sqrt{36}} = \frac{24}{6} = 4\).

Tim A (Uji-Z)

Rumus: \(CI = \bar{x} \pm (z_{\alpha/2} \times SE)\)

  • \(90\%\) (z=1.645): \(210 \pm (1.645 \times 4) = 210 \pm 6.58 \rightarrow\) (203.42, 216.58)

  • \(95\%\) (z=1.96): \(210 \pm (1.96 \times 4) = 210 \pm 7.84 \rightarrow\) (202.16, 217.84)

  • \(99\%\) (z=2.576): \(210 \pm (2.576 \times 4) = 210 \pm 10.30 \rightarrow\) (199.70, 220.30)

🔹 Interval Kepercayaan Tim A (Uji-Z)

Tingkat Nilai kritis Interval
90% \(z\) = 1.645 (203.42 , 216.58)
95% \(z\) = 1.96 (202.16 , 217.84)
99% \(z\) = 2.576 (199.70 , 220.30)

Tim B (Uji-t, df=35)

Rumus: \(CI = \bar{x} \pm (t_{\alpha/2, 35} \times SE)\)

  • 90% (t=1.689): \(210 \pm (1.689 \times 4) = 210 \pm 6.756 \rightarrow\) (203.24, 216.76)

  • 95% (t=2.030): \(210 \pm (2.030 \times 4) = 210 \pm 8.12 \rightarrow\) (201.88, 218.12)

  • 99% (t=2.723): \(210 \pm (2.723 \times 4) = 210 \pm 10.89 \rightarrow\) (199.11, 220.89)

🔹 Interval Kepercayaan Tim B (Uji-t, df = 35)

Tingkat Nilai kritis Interval
90% \(t\)=1.690 (203.24 , 216.76)
95% \(t\)=2.030 (201.88 , 218.12)
99% \(t\)=2.724 (199.10 , 220.90)

4.3 Visualisasi Perbandingan Semua Variabel

4.4 Penjelasan Perbedaan Lebar Interval

Meskipun data (\(\bar{x}, n, \text{angka deviasi}\)) identik, interval Tim B (Uji-t) selalu lebih lebar daripada Tim A (Uji-Z). Mengapa?

  • Faktor Ketidakpastian: Tim A menggunakan standar deviasi populasi (\(\sigma\)) yang dianggap sebagai nilai absolut yang pasti. Tim B hanya menggunakan standar deviasi sampel (\(s\)) yang mengandung risiko kesalahan karena hanya berasal dari 36 data.

  • Karakteristik Distribusi-t: Distribusi-t memiliki “ekor” yang lebih tebal (heavier tails) dibandingkan distribusi normal (Z). Ini adalah cara statistik memberikan “penalti” atau kompensasi atas ketidaktahuan kita terhadap parameter populasi asli.

  • Nilai Kritis: Nilai kritis \(t\) selalu lebih besar daripada nilai \(z\) untuk tingkat kepercayaan yang sama. Contohnya pada 95%, \(t=2.030\) sedangkan \(z=1.96\). Angka pengali yang lebih besar inilah yang membuat interval Tim B lebih lebar (kurang presisi dibandingkan Tim A).

Kesimpulan untuk Keputusan: Tim A memiliki presisi yang lebih tinggi karena informasi yang mereka miliki lebih lengkap (tahu data populasi). Tim B harus menerima rentang yang lebih lebar sebagai konsekuensi dari penggunaan data sampel.

5 Studi Kasus 5

Interval Kepercayaan Satu Sisi (One-Sided): Sebuah perusahaan SaaS (Software as a Service) ingin memastikan bahwa setidaknya 70% dari pengguna aktif mingguan menggunakan fitur premium.

Dari eksperimen:

\(n\) = 250 (Total pengguna)

\(x\) = 185 (Pengguna premium aktif)

Manajemen hanya tertarik pada batas bawah (lower bound) dari estimasi tersebut.

Tugas:

  1. Identifikasi jenis Interval Kepercayaan dan uji yang tepat.
  2. Hitung Interval Kepercayaan satu sisi (batas bawah) pada tingkat:
  • \(90\%\)
  • \(95\%\)
  • \(99\%\)
  1. Visualisasikan batas bawah untuk semua tingkat kepercayaan.
  2. Tentukan apakah target 70% tersebut terpenuhi secara statistik.

5.1 Identifikasi Jenis Interval Kepercayaan

Karena manajemen hanya ingin memastikan apakah persentase pengguna setidaknya (paling sedikit) berada pada angka tertentu, maka uji yang tepat adalah Interval Kepercayaan Satu Sisi (One-Sided Confidence Interval - Lower Bound) untuk proporsi.

  • Jenis Data: Proporsi (kualitatif/biner: menggunakan atau tidak menggunakan fitur premium).
  • Uji Statistik: Uji-Z untuk proporsi satu sisi (karena \(n=250\) sudah cukup besar).

5.2 Perhitungan Batas Bawah (Lower Bound)

Data Statistik:

  • \(n = 250\)
  • \(x = 185\)
  • \(\hat{p} = \frac{185}{250} = 0.74\) (74%)
  • Standard Error (\(SE\)): \(\sqrt{\frac{\hat{p}(1-\hat{p})}{n}} = \sqrt{\frac{0.74 \times 0.26}{250}} = \sqrt{0.0007696} \approx 0.0277\)

Rumus Batas Bawah: \(Lower\ Bound = \hat{p} - (z_{\alpha} \times SE)\)Catatan: Pada uji satu sisi, kita menggunakan \(z_{\alpha}\), bukan \(z_{\alpha/2}\).

  1. Tingkat Kepercayaan 90% (\(\alpha = 0.10\))
  • \(z_{0.10} = 1.282\)
  • \(0.74 - (1.282 \times 0.0277) = 0.74 - 0.0355 = \mathbf{0.7045\ (70.45\%)}\)
  1. Tingkat Kepercayaan 95% (\(\alpha = 0.05\))
  • \(z_{0.05} = 1.645\)
  • \(0.74 - (1.645 \times 0.0277) = 0.74 - 0.0456 = \mathbf{0.6944\ (69.44\%)}\)
  1. Tingkat Kepercayaan 99% (\(\alpha = 0.01\))
  • \(z_{0.01} = 2.326\)
  • \(0.74 - (2.326 \times 0.0277) = 0.74 - 0.0644 = \mathbf{0.6756\ (67.56\%)}\)

5.3 Visualisasi Batas Bawah

5.4 Kesimpulan

Apakah Target 70% Terpenuhi?Penentuan terpenuhinya target tergantung pada tingkat kepercayaan yang dipilih oleh manajemen:

  • Pada Tingkat Kepercayaan 90%: Target Terpenuhi. Batas bawah (70.45%) masih berada di atas target 70%. Kita yakin 90% bahwa setidaknya 70.45% pengguna adalah premium.

  • Pada Tingkat Kepercayaan 95%: Target Tidak Terpenuhi secara statistik. Batas bawah (69.44%) sedikit di bawah 70%. Walaupun rata-rata sampel kita 74%, ada kemungkinan kecil proporsi asli populasi turun hingga 69.44%.

  • Pada Tingkat Kepercayaan 99%: Target Tidak Terpenuhi. Batas bawah (67.56%) berada cukup jauh di bawah target.

6 Referensi

  • Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Hoboken, NJ: John Wiley & Sons.(Referensi utama untuk logika perhitungan interval kepercayaan proporsi pada Kasus 3 dan Kasus 5).
  • Hogg, R. V., McKean, J. W., & Craig, A. T. (2019). Introduction to Mathematical Statistics (8th ed.). Pearson.(Dasar teori mengenai sifat-sifat distribusi sampling dan Teorema Limit Pusat).
  • Montgomery, D. C., & Runger, G. C. (2014). Applied Statistics and Probability for Engineers. Hoboken, NJ: John Wiley & Sons.(Referensi untuk perhitungan praktis Interval Kepercayaan menggunakan Distribusi-Z dan Distribusi-t pada data kontinu).
  • NIST/SEMATECH. (2012). e-Handbook of Statistical Methods. https://www.itl.nist.gov/div898/handbook/(Panduan teknis untuk penentuan batas bawah/bawah aman dan Margin of Error).
  • Student [Gosset, W. S.]. (1908). The Probable Error of a Mean. Biometrika, 6(1), 1-25.(Dokumen historis asli yang menjadi dasar penggunaan Distribusi-t pada sampel kecil seperti pada Kasus 2).
  • Walpole, R. E., Myers, R. H., Myers, S. L., & Ye, K. (2012). Probability & Statistics for Engineers & Scientists (9th ed.). Boston, MA: Pearson.(Buku pegangan standar untuk penentuan nilai kritis \(z_{\alpha/2}\) dan \(t_{\alpha/2}\)).

6.1 Ringkasan Logika yang Digunakan:

  1. Kasus 1 & 4 (Distribusi-Z): Digunakan saat ukuran sampel besar atau standar deviasi populasi (\(\sigma\)) diketahui. Menggunakan nilai kritis dari kurva Normal standar.
  2. Kasus 2 (Distribusi-t): Digunakan untuk sampel kecil (\(n < 30\)) di mana standar deviasi populasi tidak diketahui, sehingga menggunakan derajat kebebasan (\(df = n - 1\)).
  3. Kasus 3 & 5 (Proporsi): Menggunakan pendekatan distribusi Normal terhadap distribusi Binomial dengan rumus \(Margin\ of\ Error = z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\).
LS0tDQp0aXRsZTogIiINCmF1dGhvcjogIkNoYW5kcmEgUml6YWwgQWxhbXN5YWggKDUyMjUwMDY4KSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBodG1sX2RvY3VtZW50Og0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlIA0KICAgIGNzczogY3NzIHBsdXMgaHRtbC5jc3MNCiAgICB0aHVtYm5haWxzOiB0cnVlICAgIA0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgDQotLS0NCjxzdHlsZT4NCiAvKiAyLiBNZW5nYXR1ciBjb250YWluZXI6IFJhdGEgS2lyaSwgTGViYXIgVGVyYmF0YXMsIGRhbiBUZWtzIEp1c3RpZnkgKi8NCiAgLm1haW4tY29udGFpbmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgICAgICAvKiBUZXRhcCByYXRhIGtpcmkgKi8NCiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsNCiAgICBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7ICAgIC8qIEJhdGFzIGxlYmFyIGFnYXIgdGlkYWsgdGVybGFsdSBiZXNhci9sZWJhciAqLw0KICAgIHBhZGRpbmctbGVmdDogMzBweCAhaW1wb3J0YW50OyAgLyogSmFyYWsgYW1hbiBkYXJpIHBpbmdnaXIgbGF5YXIgKi8NCiAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5ICFpbXBvcnRhbnQ7IC8qIE1lbWJ1YXQgdGVrcyByYXRhIGthbmFuLWtpcmkgKi8NCiAgfQ0KDQogIC8qIDMuIE1lbmdhdHVyIHZpc3VhbGlzYXNpIGFnYXIgdGlkYWsgdGVybGFsdSBiZXNhciAqLw0KICAucGxvdGx5LCAuaHRtbC13aWRnZXQsIGltZyB7DQogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsNCiAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgICAgIC8qIExlYmFyIGdyYWZpayBtZW5naWt1dGkgbGViYXIgY29udGFpbmVyICg4MDBweCkgKi8NCiAgICBoZWlnaHQ6IDQwMHB4ICFpbXBvcnRhbnQ7ICAgICAgIC8qIEJhdGFzIHRpbmdnaSBhZ2FyIHRpZGFrIHRlcmxhbHUgcGFuamFuZyAqLw0KICB9DQo8L3N0eWxlPg0KPHN0eWxlPg0KLyogNi4gTWVtcGVyYmFpa2kgdGFtcGlsYW4gdGFiZWwgamlrYSBhZGEgKi8NCiAgdGFibGUgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTI1MjUgIWltcG9ydGFudDsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0ICFpbXBvcnRhbnQ7DQogIH0NCiAgdGggew0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzMgIWltcG9ydGFudDsNCiAgfQ0KPC9zdHlsZT4NCjxoMSBjbGFzcz0iaGVhZGVyLXRpdGxlIj5UdWdhcyBXZWVrIDEzIH4gQ29uZmlkZW5jZSBJbnRlcnZhbDwvaDE+DQogIA0KICA8ZGl2IGNsYXNzPSJwcm9maWxlLWNhcmQiPg0KICA8ZGl2IGNsYXNzPSJwcm9maWxlLWltYWdlIj4NCiAgPGltZyBpZD0iRm90byIgc3JjPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vY2hhbmRyYTI0MDIwNS1zdWRvL0NoYW5kcmEzL21haW4vR2FudGVuZy5qcGciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjIwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyI+DQogIDwvZGl2Pg0KICANCiAgPGRpdiBjbGFzcz0icHJvZmlsZS1pbmZvIj4NCiAgPGgyPkNoYW5kcmEgUml6YWwgQWxhbXN5YWg8L2gyPg0KICA8cD5TdHVkZW50IE1ham9yaW5nIGluIERhdGEgU2NpZW5jZSBhdCBJVFNCPC9wPg0KICANCiAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWJsdWUiPlIgUHJvZ3JhbW1pbmc8L3NwYW4+DQogIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1yZWQiPkRhdGEgU2NpZW5jZTwvc3Bhbj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWdyZWVuIj5TdGF0aXN0aWNzPC9zcGFuPg0KICA8L2Rpdj4NCiAgPC9kaXY+DQogIDwvZGl2Pg0KICANCiMgU3R1ZGkgS2FzdXMgMQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdW50dWsgTWVhbiwgJFxzaWdtYSQgRGlrZXRhaHVpOiBTZWJ1YWggcGxhdGZvcm0gZS1jb21tZXJjZSBpbmdpbiBtZW1wZXJraXJha2FuIHJhdGEtcmF0YSBqdW1sYWggdHJhbnNha3NpIGhhcmlhbiBwZXIgcGVuZ2d1bmEgc2V0ZWxhaCBtZWx1bmN1cmthbiBmaXR1ciBiYXJ1LiBCZXJkYXNhcmthbiBkYXRhIGhpc3RvcmlzIHNrYWxhIGJlc2FyLCBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgdGVsYWggZGlrZXRhaHVpLg0KDQoqICRcc2lnbWEkID0gMy4yIChTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kpDQoqICRuJCA9IDEwMCAoVWt1cmFuIHNhbXBlbCkNCiogJFxiYXJ7eH0kID0gMTIuNiAoUmF0YS1yYXRhIHNhbXBlbCkNCg0KKipUdWdhcyoqDQoNCjEuIElkZW50aWZpa2FzaSB1amkgc3RhdGlzdGlrIHlhbmcgdGVwYXQgZGFuIGJlcmlrYW4gYWxhc2FuIHBpbGloYW4gQW5kYS4NCjIuIEhpdHVuZyBJbnRlcnZhbCBLZXBlcmNheWFhbiAoQ29uZmlkZW5jZSBJbnRlcnZhbHMpIHVudHVrOiANCiAgIC0gJDkwXCUkDQogICAtICQ5NVwlJA0KICAgLSAkOTlcJSQNCjMuIEJ1YXQgdmlzdWFsaXNhc2kgcGVyYmFuZGluZ2FuIGRhcmkga2V0aWdhIGludGVydmFsIGtlcGVyY2F5YWFuIHRlcnNlYnV0Lg0KNC4gSW50ZXJwcmV0YXNpa2FuIGhhc2lsbnlhIGRhbGFtIGtvbnRla3MgYW5hbGlzaXMgYmlzbmlzLg0KDQo8L2Rpdj4NCg0KIyMgSWRlbnRpZmlrYXNpIFVqaSBzdGF0aXN0aWsNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCklkZW50aWZpa2FzaSB1amkgc3RhdGlzdGlrIHlhbmcgdGVwYXQgdW50dWsga2FzdXMgaW5pIGFkYWxhaCBaLVRlc3QgdW50dWsgU2F0dSBTYW1wZWwgTWVhbiwgZGFuIGVzdGltYXNpIGRpbGFrdWthbiBtZW5nZ3VuYWthbiBJbnRlcnZhbCBLZXBlcmNheWFhbiBaIChaLUNvbmZpZGVuY2UgSW50ZXJ2YWwpLg0KDQpBbGFzYW4gUGVtaWxpaGFuIFVqaQ0KDQpBZGEgZHVhIGFsYXNhbiB1dGFtYSBtZW5nYXBhIGtpdGEgbWVuZ2d1bmFrYW4gZGlzdHJpYnVzaSBaIChOb3JtYWwgc3RhbmRhcikgZGFuIGJ1a2FuIGRpc3RyaWJ1c2kgdDoNCg0KKiBTdGFuZGFyIERldmlhc2kgUG9wdWxhc2kgKCRcc2lnbWEkKSBEaWtldGFodWk6IEluaSBhZGFsYWgga3JpdGVyaWEgdXRhbWEuIFNlc3VhaSBpbmZvcm1hc2kgeWFuZyBhZGEsICRcc2lnbWEgPSAzLjIkIHN1ZGFoIGRpa2V0YWh1aSBkYXJpIGRhdGEgaGlzdG9yaXMgc2thbGEgYmVzYXIuIEppa2EgJFxzaWdtYSQgdGlkYWsgZGlrZXRhaHVpIChoYW55YSBhZGEgc3RhbmRhciBkZXZpYXNpIHNhbXBlbCAkcyQpLCBtYWthIGtpdGEgaGFydXMgbWVuZ2d1bmFrYW4gdC10ZXN0Lg0KDQoqIFVrdXJhbiBTYW1wZWwgQmVzYXIgKCRuIFxnZXEgMzAkKTogRGVuZ2FuICRuID0gMTAwJCwgc2FtcGVsIHlhbmcgYWRhIG1lbWVudWhpIGFzdW1zaSBUZW9yZW1hIExpbWl0IFB1c2F0IChDZW50cmFsIExpbWl0IFRoZW9yZW0pLiBIYWwgaW5pIG1lbmphbWluIGJhaHdhIGRpc3RyaWJ1c2kgcmF0YS1yYXRhIHNhbXBlbCBha2FuIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbCwgdGVybGVwYXMgZGFyaSBiZW50dWsgZGlzdHJpYnVzaSBwb3B1bGFzaSBhc2xpbnlhLg0KPC9kaXY+DQoNCiMjIFBlcmhpdHVuZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuIChDb25maWRlbmNlIEludGVydmFscykNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NClJ1bXVzIHVtdW0gdW50dWsgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gWiBhZGFsYWg6DQoNCiQkQ0kgPSBcYmFye3h9IFxwbSB6X3tcYWxwaGEvMn0gXGxlZnQoIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxyaWdodCkkJA0KDQpEaW1hbmE6DQoNCiogJFxiYXJ7eH0gPSAxMi42JA0KKiAkXHNpZ21hID0gMy4yJA0KKiAkbiA9IDEwMCQNCiogJFNFID0gXGZyYWN7XHNpZ21hfXtcc3FydHtufX0gPSBcZnJhY3szLjJ9e1xzcXJ0ezEwMH19ID0gXGZyYWN7My4yfXsxMH0gPSAwLjMyJCAoU3RhbmRhcmQgRXJyb3Igb2YgdGhlIE1lYW4pDQoNCktpdGEgYWthbiBtZW5jYXJpIG5pbGFpICR6X3tcYWxwaGEvMn0kIHVudHVrIG1hc2luZy1tYXNpbmcgdGluZ2thdCBrZXBlcmNheWFhbjoNCg0KICAxLiBJbnRlcnZhbCBLZXBlcmNheWFhbiA5MCUNCiAgICAgKiAkXGFscGhhID0gMSAtIDAuOTAgPSAwLjEwJA0KICAgICAqICRcYWxwaGEvMiA9IDAuMDUkDQogICAgICogJHpfezAuMDV9ID0gMS42NDUkIChOaWxhaSB6IHVudHVrICRQKFogPCAtMS42NDUpJCBhdGF1ICRQKFogPiAxLjY0NSkkIGFkYWxhaCAwLjA1KQ0KICAgICAqICRDSV97OTBcJX0gPSAxMi42IFxwbSAxLjY0NSBcdGltZXMgMC4zMiQNCiAgICAgKiAkQ0lfezkwXCV9ID0gMTIuNiBccG0gMC41MjY0JA0KICAgICAqIExvd2VyIEJvdW5kOiAkMTIuNiAtIDAuNTI2NCA9IDEyLjA3MzYkDQogICAgICogVXBwZXIgQm91bmQ6ICQxMi42ICsgMC41MjY0ID0gMTMuMTI2NCQkQ0lfezkwXCV9ID0gWzEyLjA3LCAxMy4xM10kDQogICAgIA0KICAyLiBJbnRlcnZhbCBLZXBlcmNheWFhbiA5NSUNCiAgICAgKiAkXGFscGhhID0gMSAtIDAuOTUgPSAwLjA1JA0KICAgICAqICRcYWxwaGEvMiA9IDAuMDI1JA0KICAgICAqICR6X3swLjAyNX0gPSAxLjk2JA0KICAgICAqICRDSV97OTVcJX0gPSAxMi42IFxwbSAxLjk2IFx0aW1lcyAwLjMyJA0KICAgICAqICRDSV97OTVcJX0gPSAxMi42IFxwbSAwLjYyNzIkDQogICAgICogTG93ZXIgQm91bmQ6ICQxMi42IC0gMC42MjcyID0gMTEuOTcyOCQNCiAgICAgKiBVcHBlciBCb3VuZDogJDEyLjYgKyAwLjYyNzIgPSAxMy4yMjcyJA0KICAgICAqICRDSV97OTVcJX0gPSBbMTEuOTcsIDEzLjIzXSQNCiAgICAgDQogIDMuIEludGVydmFsIEtlcGVyY2F5YWFuIDk5JQ0KICAgICAqICRcYWxwaGEgPSAxIC0gMC45OSA9IDAuMDEkDQogICAgICogJFxhbHBoYS8yID0gMC4wMDUkDQogICAgICogJHpfezAuMDA1fSA9IDIuNTc2JA0KICAgICAqICRDSV97OTlcJX0gPSAxMi42IFxwbSAyLjU3NiBcdGltZXMgMC4zMiQNCiAgICAgKiAkQ0lfezk5XCV9ID0gMTIuNiBccG0gMC44MjQzMiQNCiAgICAgKiBMb3dlciBCb3VuZDogJDEyLjYgLSAwLjgyNDMyID0gMTEuNzc1NjgkDQogICAgICogVXBwZXIgQm91bmQ6ICQxMi42ICsgMC44MjQzMiA9IDEzLjQyNDMyJA0KICAgICAqICRDSV97OTlcJX0gPSBbMTEuNzgsIDEzLjQyXSQNCiAgDQoqKlJpbmdrYXNhbiBJbnRlcnZhbCBLZXBlcmNheWFhbioqDQogDQogfCAqKlRpbmdrYXQgS2VwZXJjYXlhYW4qKiB8IHrOsS8yIHwgKipNYXJnaW4gb2YgRXJyb3IqKiB8ICoqVGluZ2thdCBLZXBlcmNheWFhbioqIHwNCiB8Oi0tLXw6LS0tfDotLS18Oi0tLXwNCiB8IDkwJSB8IDEuNjQ1IHwgJFxwbSAwLjUzJCB8ICRbMTIuMDcsIDEzLjEzXSQgfA0KIDk1JSB8IDEuOTYgfCAkXHBtIDAuNjMkIHwgJFsxMS45NywgMTMuMjNdJCB8DQogOTklIHwgMi41NzYgfCAkXHBtIDAuODIkIHwgJFsxMS43OCwgMTMuNDJdJCB8DQogDQo8L2Rpdj4NCg0KIyMgVmlzdWFsaXNhc2kgUGVyYmFuZGluZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgMS4gTG9hZCBMaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyAyLiBQZXJzaWFwYW4gRGF0YSAoSGFzaWwgUGVyaGl0dW5nYW4gS2FzdXMgMSkNCiMgUmF0YS1yYXRhIChtZWFuKSA9IDguNDU4DQojIE1lbmdndW5ha2FuIFotc2NvcmUgKG49MTIsIHNpZ21hIGRpa2V0YWh1aSA9IDAuNCkNCiMgU0UgPSAwLjQgLyBzcXJ0KDEyKSA9IDAuMTE1NQ0KbWVhbl92YWwgPC0gOC40NTgNCmRmX2thc3VzMSA8LSBkYXRhLmZyYW1lKA0KICBMZXZlbCA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIExvd2VyID0gYyg4LjI2OCwgOC4yMzIsIDguMTYxKSwgIyBCYXRhcyBiYXdhaCBtZW5nZ3VuYWthbiBaLXNjb3JlDQogIFVwcGVyID0gYyg4LjY0OCwgOC42ODQsIDguNzU1KSwgIyBCYXRhcyBhdGFzIG1lbmdndW5ha2FuIFotc2NvcmUNCiAgQ29sb3IgPSBjKCIjMzQ5OGRiIiwgIiMyOTgwYjkiLCAiIzFjNTk4YSIpICMgVmFyaWFzaSBncmFkYXNpIEJpcnUNCikNCg0KIyAzLiBJbmlzaWFsaXNhc2kgUGxvdA0KZmlnIDwtIHBsb3RfbHkoKQ0KDQojIDQuIExvb3AgdW50dWsgTWVuYW1iYWhrYW4gR2FyaXMgSW50ZXJ2YWwNCmZvcihpIGluIDE6bnJvdyhkZl9rYXN1czEpKSB7DQogIGZpZyA8LSBmaWcgJT4lIGFkZF9zZWdtZW50cygNCiAgICB4ID0gZGZfa2FzdXMxJExvd2VyW2ldLCB4ZW5kID0gZGZfa2FzdXMxJFVwcGVyW2ldLA0KICAgIHkgPSBkZl9rYXN1czEkTGV2ZWxbaV0sIHllbmQgPSBkZl9rYXN1czEkTGV2ZWxbaV0sDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSBkZl9rYXN1czEkQ29sb3JbaV0sIHdpZHRoID0gMTIpLA0KICAgIG5hbWUgPSBwYXN0ZSgiTGV2ZWwiLCBkZl9rYXN1czEkTGV2ZWxbaV0pLA0KICAgICMgRklUVVIgSE9WRVIgVE9PTFRJUFMNCiAgICBob3ZlcmluZm8gPSAidGV4dCIsDQogICAgdGV4dCA9IHBhc3RlMCgiPGI+VGluZ2thdCBLZXBlcmNheWFhbjogIiwgZGZfa2FzdXMxJExldmVsW2ldLCAiPC9iPjxicj4iLA0KICAgICAgICAgICAgICAgICAgIk1ldG9kZTogRGlzdHJpYnVzaS1aIChTaWdtYSBEaWtldGFodWkpPGJyPiIsDQogICAgICAgICAgICAgICAgICAiUmF0YS1yYXRhOiAiLCBtZWFuX3ZhbCwgIiBtZW5pdDxicj4iLA0KICAgICAgICAgICAgICAgICAgIkJhd2FoOiAiLCBkZl9rYXN1czEkTG93ZXJbaV0sICIgbWVuaXQ8YnI+IiwNCiAgICAgICAgICAgICAgICAgICJBdGFzOiAiLCBkZl9rYXN1czEkVXBwZXJbaV0sICIgbWVuaXQiKQ0KICApICU+JQ0KICAjIE1lbmFtYmFoa2FuIHRpdGlrIE1lYW4gKFJhdGEtcmF0YSkgZGkgdGVuZ2FoIGdhcmlzDQogIGFkZF9tYXJrZXJzKA0KICAgIHggPSBtZWFuX3ZhbCwgeSA9IGRmX2thc3VzMSRMZXZlbFtpXSwNCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gIndoaXRlIiwgc2l6ZSA9IDEwLCANCiAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gImJsYWNrIiwgd2lkdGggPSAxKSksDQogICAgc2hvd2xlZ2VuZCA9IEZBTFNFLA0KICAgIGhvdmVyaW5mbyA9ICJub25lIg0KICApDQp9DQoNCiMgNS4gS29uZmlndXJhc2kgTGF5b3V0IChTaGFwZXMgJiBMYWJlbHMpDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoDQogIHRpdGxlID0gbGlzdCh0ZXh0ID0gIjxiPkFuYWxpc2lzIEludGVyYWt0aWYgV2FrdHUgVVggKERpc3RyaWJ1c2ktWik8L2I+IiwgeSA9IDAuOTUpLA0KICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiV2FrdHUgUGVueWVsZXNhaWFuIChtZW5pdCkiLCByYW5nZSA9IGMoNy44LCA5LjEpKSwNCiAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlRpbmdrYXQgS2VwZXJjYXlhYW4iKSwNCiAgDQogICMgU0hBUEVTOiBHYXJpcyBiYW50dSB2ZXJ0aWthbCB1bnR1ayBNZWFuDQogIHNoYXBlcyA9IGxpc3QoDQogICAgbGlzdCgNCiAgICAgIHR5cGUgPSAibGluZSIsDQogICAgICB4MCA9IG1lYW5fdmFsLCB4MSA9IG1lYW5fdmFsLA0KICAgICAgeTAgPSAwLjUsIHkxID0gMy41LA0KICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAicmdiYSgwLCAwLCAwLCAwLjMpIiwgZGFzaCA9ICJkYXNoIiwgd2lkdGggPSAxLjUpDQogICAgKQ0KICApLA0KICANCiAgbGVnZW5kID0gbGlzdChvcmllbnRhdGlvbiA9ICJoIiwgeCA9IDAuNSwgeGFuY2hvciA9ICJjZW50ZXIiLCB5ID0gLTAuMiksDQogIG1hcmdpbiA9IGxpc3QobCA9IDgwLCByID0gNTAsIGIgPSA4MCwgdCA9IDEwMCksDQogIGhvdmVybW9kZSA9ICJjbG9zZXN0Ig0KKSAlPiUNCiAgYWRkX2Fubm90YXRpb25zKA0KICAgIHggPSBtZWFuX3ZhbCwgeSA9IDMuNywgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIG1lYW5fdmFsLCAibWVuaXQiKSwNCiAgICBzaG93YXJyb3cgPSBGQUxTRSwgZm9udCA9IGxpc3QoY29sb3IgPSAiZ3JheTMwIiwgc2l6ZSA9IDEyKQ0KICApDQoNCiMgNi4gVGFtcGlsa2FuIFBsb3QNCmZpZw0KYGBgDQo8L2Rpdj4NCg0KIyMgSW50ZXJwcmV0YXNpIEhhc2lsIGRhbGFtIEtvbnRla3MgQW5hbGlzaXMgQmlzbmlzDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiBpbnRlcnZhbCBrZXBlcmNheWFhbjoNCg0KICAxLiBTZW1ha2luIFRpbmdnaSBUaW5na2F0IEtlcGVyY2F5YWFuLCBTZW1ha2luIExlYmFyIEludGVydmFsbnlhOg0KDQogICAgICogUGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIDkwJSwga2l0YSBtZW1wZXJraXJha2FuIHJhdGEtcmF0YSB0cmFuc2Frc2kgaGFyaWFuIHBlciBwZW5nZ3VuYSBiZXJhZGEgYW50YXJhIDEyLjA3IGhpbmdnYSAxMy4xMy4gSW5pIGFkYWxhaCByZW50YW5nIHlhbmcgcmVsYXRpZiBzZW1waXQuDQoNCiAgICAgKiBQYWRhIHRpbmdrYXQga2VwZXJjYXlhYW4gOTklLCByZW50YW5nIG1lbGViYXIgbWVuamFkaSAxMS43OCBoaW5nZ2EgMTMuNDIuIEluaSBtZW5jZXJtaW5rYW4gYmFod2EgdW50dWsgbGViaWggeWFraW4gKDk5JSBwZXJjYXlhKSBiYWh3YSBpbnRlcnZhbCBraXRhIG1lbmdhbmR1bmcgcmF0YS1yYXRhIHBvcHVsYXNpIHlhbmcgc2ViZW5hcm55YSwga2l0YSBoYXJ1cyBtZW5lcmltYSByZW50YW5nIGVzdGltYXNpIHlhbmcgbGViaWggbHVhcy4NCg0KICAyLiBUcmFkZS1vZmYgYW50YXJhIFByZXNpc2kgZGFuIEtlcGVyY2F5YWFuOg0KDQogICAgICogUHJlc2lzaSAocmVudGFuZyBzZW1waXQpIGRpaW5naW5rYW4gZGFsYW0gYmlzbmlzIHVudHVrIG1lbWJ1YXQga2VwdXR1c2FuIHlhbmcgc3Blc2lmaWsuIE5hbXVuLCBwcmVzaXNpIHRpbmdnaSAobWlzYWxueWEsIDkwJSBDSSkgYmVyYXJ0aSBBbmRhIG1lbWlsaWtpIGtlcGVyY2F5YWFuIHlhbmcgc2VkaWtpdCBsZWJpaCByZW5kYWggYmFod2EgaW50ZXJ2YWwgdGVyc2VidXQgYmVuYXItYmVuYXIgbWVuY2FrdXAgbmlsYWkgcmF0YS1yYXRhIHBvcHVsYXNpLg0KDQogICAgICogS2VwZXJjYXlhYW4gKHByb2JhYmlsaXRhcyB0aW5nZ2kpIGJhaHdhIGludGVydmFsIEFuZGEgbWVuYW5na2FwIHBhcmFtZXRlciBwb3B1bGFzaSAobWlzYWxueWEsIDk5JSBDSSkgYmVyYXJ0aSBBbmRhIGhhcnVzIG1lbmVyaW1hIHJlbnRhbmcgZXN0aW1hc2kgeWFuZyBsZWJpaCBsdWFzLCB5YW5nIG11bmdraW4ga3VyYW5nICJzcGVzaWZpayIgZGFsYW0gcGVyZW5jYW5hYW4gYmlzbmlzLg0KDQogIDMuIEltcGxpa2FzaSBCaXNuaXM6DQoNCiAgICAgKiBQbGF0Zm9ybSBlLWNvbW1lcmNlIGRhcGF0IG1lbnlhdGFrYW4gZGVuZ2FuIDk1JSBrZXBlcmNheWFhbiBiYWh3YSByYXRhLXJhdGEgdHJhbnNha3NpIGhhcmlhbiBwZXIgcGVuZ2d1bmEgc2V0ZWxhaCBtZWx1bmN1cmthbiBmaXR1ciBiYXJ1IGJlcmFkYSBkaSBhbnRhcmEgMTEuOTcgZGFuIDEzLjIzLg0KDQogICAgICogTWFuYWplbWVuIGRhcGF0IG1lbmdndW5ha2FuIHJlbnRhbmcgaW5pIHVudHVrIHBlcmVuY2FuYWFuLiBNaXNhbG55YSwgamlrYSB0YXJnZXQga2luZXJqYSBmaXR1ciBiYXJ1IGFkYWxhaCBtaW5pbWFsIDEyIHRyYW5zYWtzaSBwZXIgcGVuZ2d1bmEsIGludGVydmFsIDk1JSBtYXNpaCBtZW51bmp1a2thbiBrZW11bmdraW5hbiBiYWh3YSByYXRhLXJhdGEgc2VzdW5nZ3VobnlhIHNlZGlraXQgZGkgYmF3YWggMTIgKHdhbGF1cHVuIDExLjk3IHNhbmdhdCBkZWthdCkuIEludGVydmFsIDk5JSBiYWhrYW4gbWVudW5qdWtrYW4ga2VtdW5na2luYW4geWFuZyBsZWJpaCB0aW5nZ2kgdW50dWsgcmF0YS1yYXRhIGRpIGJhd2FoIDEyLg0KDQogICAgICogSmlrYSBwZXJ1c2FoYWFuIG1lbWJ1dHVoa2FuIGtlcGFzdGlhbiB5YW5nIHNhbmdhdCB0aW5nZ2kgKDk5JSkgbWVuZ2VuYWkgZGFtcGFrbnlhLCBtZXJla2EgaGFydXMgbWVueWFkYXJpIGJhaHdhIHJhdGEtcmF0YSB0cmFuc2Frc2kgYmlzYSBzZXJlbmRhaCAxMS43OCBhdGF1IHNldGluZ2dpIDEzLjQyLCBtZW1iZXJpa2FuIHJlbnRhbmcgcGVya2lyYWFuIHlhbmcgbGViaWggYmVzYXIgdW50dWsgc2tlbmFyaW8gdGVyYnVydWsgZGFuIHRlcmJhaWsuDQoNClNpbmdrYXRueWEsIGZpdHVyIGJhcnUgaW5pIHRhbXBha255YSBtZW1pbGlraSByYXRhLXJhdGEgdHJhbnNha3NpIHlhbmcgY3VrdXAgYmFpaywgZGVuZ2FuIHBlcmtpcmFhbiB0ZXJiYWlrIG1lbmRla2F0aSAxMi42LiBQZW1pbGloYW4gdGluZ2thdCBrZXBlcmNheWFhbiBha2FuIGJlcmdhbnR1bmcgcGFkYSBzZWJlcmFwYSBrb25zZXJ2YXRpZiBhdGF1IGFncmVzaWYgbWFuYWplbWVuIGluZ2luIG1lbGloYXQgcG90ZW5zaSBkYW1wYWsgZml0dXIgaW5pLg0KPC9kaXY+DQoNCiMgU3R1ZGkgS2FzdXMgMg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdW50dWsgTWVhbiwgJFxzaWdtYSQgVGlkYWsgRGlrZXRhaHVpOiBUaW0gUmlzZXQgVVggKFVzZXIgRXhwZXJpZW5jZSkgbWVuZ2FuYWxpc2lzIHdha3R1IHBlbnllbGVzYWlhbiB0dWdhcyAoZGFsYW0gbWVuaXQpIHVudHVrIGFwbGlrYXNpIHNlbHVsZXIgYmFydS4gRGF0YSBkaWt1bXB1bGthbiBkYXJpIDEyIHBlbmdndW5hOg0KDQogICQ4LjQsIDcuOSwgOS4xLCA4LjcsIDguMiwgOS4wLCA3LjgsIDguNSwgOC45LCA4LjEsIDguNiwgOC4zJA0KDQoqKlR1Z2FzKioNCg0KMS4gSWRlbnRpZmlrYXNpIHVqaSBzdGF0aXN0aWsgeWFuZyB0ZXBhdCBkYW4gamVsYXNrYW4gYWxhc2FubnlhLg0KMi4gSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHVudHVrOiANCiAgICogJDkwXCUkIA0KICAgKiAkOTVcJSQgIA0KICAgKiAkOTlcJSQNCjMuIFZpc3VhbGlzYXNpa2FuIGtldGlnYSBpbnRlcnZhbCB0ZXJzZWJ1dCBkYWxhbSBzYXR1IHBsb3QuDQo0LiBKZWxhc2thbiBiYWdhaW1hbmEgdWt1cmFuIHNhbXBlbCBkYW4gdGluZ2thdCBrZXBlcmNheWFhbiBtZW1lbmdhcnVoaSBsZWJhciBpbnRlcnZhbC4NCg0KPC9kaXY+DQoNCiMjIElkZW50aWZpa2FzaSBVamkgU3RhdGlzdGlrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpVamkgc3RhdGlzdGlrIHlhbmcgdGVwYXQgdW50dWsga2FzdXMgaW5pIGFkYWxhaCBEaXN0cmlidXNpIHQtU3R1ZGVudCAodC1kaXN0cmlidXRpb24pLg0KDQpBbGFzYW5ueWE6DQoNCiogU3RhbmRhciBEZXZpYXNpIFBvcHVsYXNpICgkXHNpZ21hJCkgVGlkYWsgRGlrZXRhaHVpOiBLaXRhIGhhbnlhIG1lbWlsaWtpIGRhdGEgc2FtcGVsIHVudHVrIG1lbmdoaXR1bmcgc3RhbmRhciBkZXZpYXNpIHNhbXBlbCAoJHMkKS4NCiogVWt1cmFuIFNhbXBlbCBLZWNpbDogSnVtbGFoIHNhbXBlbCAkbiA9IDEyJCAoa3VyYW5nIGRhcmkgMzApLg0KKiBBc3Vtc2k6IEtpdGEgbWVuZ2FzdW1zaWthbiB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgdGVyZGlzdHJpYnVzaSBzZWNhcmEgbm9ybWFsLg0KPC9kaXY+DQoNCiMjIFBlcmhpdHVuZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpSdW11cyB5YW5nIGRpZ3VuYWthbiBhZGFsYWg6DQoNCiQkQ0kgPSBcYmFye3h9IFxwbSB0X3tcYWxwaGEvMiwgZGZ9IFx0aW1lcyBcbGVmdCggXGZyYWN7c317XHNxcnR7bn19IFxyaWdodCkkJA0KMS4gVW50dWsgVGluZ2thdCBLZXBlcmNheWFhbiA5MCUNCg0KICAgKiAoJFxhbHBoYSA9IDAuMTAkKSRcYWxwaGEvMiA9IDAuMDUkDQogICANCiAgICogTmlsYWkga3JpdGlzICR0X3swLjA1LCAxMX0gPSAxLjc5NiQNCiAgIA0KICAgKiBQZXJoaXR1bmdhbjoNCiQkQ0kgPSA4LjQ1OCBccG0gMS43OTYgXHRpbWVzIFxsZWZ0KCBcZnJhY3swLjQxMn17XHNxcnR7MTJ9fSBccmlnaHQpJCQkJENJID0gOC40NTggXHBtIDEuNzk2IFx0aW1lcyAwLjExOSQkJCRDSSA9IDguNDU4IFxwbSAwLjIxMzckJA0KDQogICAqIEhhc2lsOiAoOC4yNDQsIDguNjcyKQ0KICAgDQoyLiBVbnR1ayBUaW5na2F0IEtlcGVyY2F5YWFuIDk1JSANCg0KICAgKiAoJFxhbHBoYSA9IDAuMDUkKSRcYWxwaGEvMiA9IDAuMDI1JA0KICAgDQogICAqIE5pbGFpIGtyaXRpcyAkdF97MC4wMjUsIDExfSA9IDIuMjAxJA0KICAgDQogICAqIFBlcmhpdHVuZ2FuOg0KICAgJCRDSSA9IDguNDU4IFxwbSAyLjIwMSBcdGltZXMgXGxlZnQoIFxmcmFjezAuNDEyfXtcc3FydHsxMn19IFxyaWdodCkkJCQkQ0kgPSA4LjQ1OCBccG0gMi4yMDEgXHRpbWVzIDAuMTE5JCQkJENJID0gOC40NTggXHBtIDAuMjYxOSQkDQogICANCiAgICogSGFzaWw6ICg4LjE5NiwgOC43MjApDQogICANCjMuIFVudHVrIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTklIA0KDQogICAqICgkXGFscGhhID0gMC4wMSQpJFxhbHBoYS8yID0gMC4wMDUkDQogIA0KICAgKiBOaWxhaSBrcml0aXMgJHRfezAuMDA1LCAxMX0gPSAzLjEwNiQNCiAgDQogICAqIFBlcmhpdHVuZ2FuOg0KICAgJCRDSSA9IDguNDU4IFxwbSAzLjEwNiBcdGltZXMgXGxlZnQoIFxmcmFjezAuNDEyfXtcc3FydHsxMn19IFxyaWdodCkkJCQkQ0kgPSA4LjQ1OCBccG0gMy4xMDYgXHRpbWVzIDAuMTE5JCQkJENJID0gOC40NTggXHBtIDAuMzY5NiQkDQogIA0KICAgKiBIYXNpbDogKDguMDg4LCA4LjgyOCkNCiAgIA0KKipSaW5na2FzYW4gSW50ZXJ2YWwgS2VwZXJjYXlhYW4qKg0KDQp8IFRpbmdrYXQgS2VwZXJjYXlhYW4gfCBOaWxhaSBLcml0aXMgKHQpIHwgTWFyZ2luIG9mIEVycm9yIHwgUmVudGFuZyBJbnRlcnZhbChNZW5pdCkgfA0KfDotLS18Oi0tLXw6LS0tfDotLS18DQp8IDkwJSB8ICQxLjc5NiQgfCAkMC4yMTQkIHwgKDguMjQ0LCA4LjY3MikgfCANCjk1JSB8ICQyLjIwMSQgfCAkMC4yNjIkIHwgKDguMTk2LCA4LjcyMCkgfCANCjk5JSB8ICQzLjEwNiQgfCAkMC4zNzAkIHwgKDguMDg4LCA4LjgyOCkgfA0KDQo8L2Rpdj4NCg0KIyMgVmlzdWFsaXNhc2kgSW50ZXJ2YWwgS2VwZXJjYXlhYW4NCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyAxLiBMb2FkIExpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIDIuIFBlcnNpYXBhbiBEYXRhIChIYXNpbCBQZXJoaXR1bmdhbiBLYXN1cyAyKQ0KIyBSYXRhLXJhdGEgKG1lYW4pID0gOC40NTgNCiMgZGYgPSAxMSwgU0UgPSAwLjEyMw0KbWVhbl92YWwgPC0gOC40NTgNCmRmX2thc3VzMiA8LSBkYXRhLmZyYW1lKA0KICBMZXZlbCA9IGMoIjkwJSIsICI5NSUiLCAiOTklIiksDQogIExvd2VyID0gYyg4LjIzNywgOC4xODcsIDguMDc2KSwgIyBCYXRhcyBiYXdhaCBtZW5nZ3VuYWthbiB0LXNjb3JlDQogIFVwcGVyID0gYyg4LjY3OSwgOC43MjksIDguODQwKSwgIyBCYXRhcyBhdGFzIG1lbmdndW5ha2FuIHQtc2NvcmUNCiAgQ29sb3IgPSBjKCIjMWFiYzljIiwgIiMzNDk4ZGIiLCAiIzliNTliNiIpICMgVG9zY2EsIEJpcnUsIFVuZ3UNCikNCg0KIyAzLiBJbmlzaWFsaXNhc2kgUGxvdA0KZmlnIDwtIHBsb3RfbHkoKQ0KDQojIDQuIExvb3AgdW50dWsgTWVuYW1iYWhrYW4gR2FyaXMgSW50ZXJ2YWwNCmZvcihpIGluIDE6bnJvdyhkZl9rYXN1czIpKSB7DQogIGZpZyA8LSBmaWcgJT4lIGFkZF9zZWdtZW50cygNCiAgICB4ID0gZGZfa2FzdXMyJExvd2VyW2ldLCB4ZW5kID0gZGZfa2FzdXMyJFVwcGVyW2ldLA0KICAgIHkgPSBkZl9rYXN1czIkTGV2ZWxbaV0sIHllbmQgPSBkZl9rYXN1czIkTGV2ZWxbaV0sDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSBkZl9rYXN1czIkQ29sb3JbaV0sIHdpZHRoID0gMTIpLA0KICAgIG5hbWUgPSBwYXN0ZSgiTGV2ZWwiLCBkZl9rYXN1czIkTGV2ZWxbaV0pLA0KICAgICMgRklUVVIgSE9WRVIgVE9PTFRJUFMNCiAgICBob3ZlcmluZm8gPSAidGV4dCIsDQogICAgdGV4dCA9IHBhc3RlMCgiPGI+VGluZ2thdCBLZXBlcmNheWFhbjogIiwgZGZfa2FzdXMyJExldmVsW2ldLCAiPC9iPjxicj4iLA0KICAgICAgICAgICAgICAgICAgIk1ldG9kZTogRGlzdHJpYnVzaS10IChkZj0xMSk8YnI+IiwNCiAgICAgICAgICAgICAgICAgICJSYXRhLXJhdGE6ICIsIG1lYW5fdmFsLCAiIG1lbml0PGJyPiIsDQogICAgICAgICAgICAgICAgICAiQmF3YWg6ICIsIGRmX2thc3VzMiRMb3dlcltpXSwgIiBtZW5pdDxicj4iLA0KICAgICAgICAgICAgICAgICAgIkF0YXM6ICIsIGRmX2thc3VzMiRVcHBlcltpXSwgIiBtZW5pdCIpDQogICkgJT4lDQogICMgTWVuYW1iYWhrYW4gdGl0aWsgTWVhbiAoUmF0YS1yYXRhKSBkaSB0ZW5nYWggZ2FyaXMNCiAgYWRkX21hcmtlcnMoDQogICAgeCA9IG1lYW5fdmFsLCB5ID0gZGZfa2FzdXMyJExldmVsW2ldLA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMTAsIA0KICAgICAgICAgICAgICAgICAgbGluZSA9IGxpc3QoY29sb3IgPSAiYmxhY2siLCB3aWR0aCA9IDEpKSwNCiAgICBzaG93bGVnZW5kID0gRkFMU0UsDQogICAgaG92ZXJpbmZvID0gIm5vbmUiDQogICkNCn0NCg0KIyA1LiBLb25maWd1cmFzaSBMYXlvdXQgKFNoYXBlcyAmIExhYmVscykNCmZpZyA8LSBmaWcgJT4lIGxheW91dCgNCiAgdGl0bGUgPSBsaXN0KHRleHQgPSAiPGI+QW5hbGlzaXMgSW50ZXJha3RpZiBXYWt0dSBVWCAoRGlzdHJpYnVzaS10KTwvYj4iLCB5ID0gMC45NSksDQogIHhheGlzID0gbGlzdCh0aXRsZSA9ICJXYWt0dSBQZW55ZWxlc2FpYW4gKG1lbml0KSIsIHJhbmdlID0gYyg3LjgsIDkuMSkpLA0KICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiVGluZ2thdCBLZXBlcmNheWFhbiIpLA0KICANCiAgIyBTSEFQRVM6IEdhcmlzIGJhbnR1IHZlcnRpa2FsIHVudHVrIE1lYW4gdXRhbWENCiAgc2hhcGVzID0gbGlzdCgNCiAgICBsaXN0KA0KICAgICAgdHlwZSA9ICJsaW5lIiwNCiAgICAgIHgwID0gbWVhbl92YWwsIHgxID0gbWVhbl92YWwsDQogICAgICB5MCA9IDAuNSwgeTEgPSAzLjUsDQogICAgICBsaW5lID0gbGlzdChjb2xvciA9ICJyZ2JhKDAsIDAsIDAsIDAuMykiLCBkYXNoID0gImRhc2giLCB3aWR0aCA9IDEuNSkNCiAgICApDQogICksDQogIA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gMTAwKSwNCiAgaG92ZXJtb2RlID0gImNsb3Nlc3QiDQopICU+JQ0KICAjIE1lbmFtYmFoa2FuIGFub3Rhc2kgdGVrcyB1bnR1ayBNZWFuDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbWVhbl92YWwsIHkgPSAzLjcsIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCBtZWFuX3ZhbCwgIm1lbml0IiksDQogICAgc2hvd2Fycm93ID0gRkFMU0UsIGZvbnQgPSBsaXN0KGNvbG9yID0gImdyYXkzMCIsIHNpemUgPSAxMikNCiAgKQ0KDQojIDYuIFRhbXBpbGthbiBQbG90DQpmaWcNCg0KYGBgDQoNCg0KUGFkYSBwbG90IHlhbmcgZGl0YW1waWxrYW46DQoNCiogU2V0aWFwIGdhcmlzIGhvcml6b250YWwgbWVyZXByZXNlbnRhc2lrYW4gc2F0dSBpbnRlcnZhbCBrZXBlcmNheWFhbi4NCg0KKiBUaXRpayBkaSB0ZW5nYWggYWRhbGFoIHJhdGEtcmF0YSBzYW1wZWwuDQoNCiogVGVybGloYXQgamVsYXMgYmFod2EgaW50ZXJ2YWwgOTklIHBhbGluZyBsZWJhciwgZGlpa3V0aSA5NSUsIGxhbHUgOTAlLg0KPC9kaXY+DQoNCiMjIEFuYWxpc2lzIFBlbmdhcnVoIFZhcmlhYmVsDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpBLiBQZW5nYXJ1aCBUaW5na2F0IEtlcGVyY2F5YWFuOlNlbWFraW4gdGluZ2dpIHRpbmdrYXQga2VwZXJjYXlhYW4gKG1pc2FsIGRhcmkgOTAlIGtlIDk5JSksIG1ha2EgaW50ZXJ2YWwgYWthbiBzZW1ha2luIGxlYmFyLiBIYWwgaW5pIGthcmVuYSBraXRhIG1lbWJ1dHVoa2FuIHJlbnRhbmcgbmlsYWkgeWFuZyBsZWJpaCBiZXNhciBhZ2FyIGtpdGEgImxlYmloIHlha2luIiBiYWh3YSBwYXJhbWV0ZXIgcG9wdWxhc2kgeWFuZyBzZWJlbmFybnlhIGJlcmFkYSBkaSBkYWxhbSByZW50YW5nIHRlcnNlYnV0Lg0KDQpCLiBQZW5nYXJ1aCBVa3VyYW4gU2FtcGVsICgkbiQpOk1lc2tpcHVuIGRhbGFtIGthc3VzIGluaSAkbiQgdGV0YXAgKDEyKSwgc2VjYXJhIHRlb3JpOiBzZW1ha2luIGJlc2FyIHVrdXJhbiBzYW1wZWwsIG1ha2EgaW50ZXJ2YWwgYWthbiBzZW1ha2luIHNlbXBpdC4gSGFsIGluaSB0ZXJqYWRpIGthcmVuYSBuaWxhaSBwZW1iYWdpIGRhbGFtIHJ1bXVzIFN0YW5kYXIgRXJyb3IgKCRcc3FydHtufSQpIG1lbmphZGkgbGViaWggYmVzYXIsIHlhbmcgbWVuZ3VyYW5naSBrZXRpZGFrcGFzdGlhbiAoZXJyb3IpIGRhbGFtIGVzdGltYXNpIGtpdGEuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyAzDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpJbnRlcnZhbCBLZXBlcmNheWFhbiB1bnR1ayBQcm9wb3JzaSwgQS9CIFRlc3Rpbmc6IFNlYnVhaCB0aW0gc2FpbnMgZGF0YSBtZW5qYWxhbmthbiB1amkgQS9CIHBhZGEgZGVzYWluIHRvbWJvbCBDYWxsLVRvLUFjdGlvbiAoQ1RBKSB5YW5nIGJhcnUuIEVrc3BlcmltZW4gbWVuZ2hhc2lsa2FuOg0KDQogICRuJCA9IDQwMCAoVG90YWwgcGVuZ2d1bmEpDQogIA0KICAkeCQgPSAxNTYgKFBlbmdndW5hIHlhbmcgbWVuZ2tsaWsgQ1RBKQ0KDQpUdWdhczoNCg0KMS4gSGl0dW5nIHByb3BvcnNpIHNhbXBlbCAkXGhhdHtwfSQuDQoyLiBIaXR1bmcgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gdW50dWsgcHJvcG9yc2kgcGFkYSB0aW5na2F0OiANCiAgICogJDkwXCUkIA0KICAgKiAkOTVcJSQgDQogICAqICQ5OVwlJA0KMy4gVmlzdWFsaXNhc2lrYW4gZGFuIGJhbmRpbmdrYW4ga2V0aWdhIGludGVydmFsIHRlcnNlYnV0Lg0KNC4gSmVsYXNrYW4gYmFnYWltYW5hIHRpbmdrYXQga2VwZXJjYXlhYW4gbWVtZW5nYXJ1aGkgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGRhbGFtIGVrc3BlcmltZW4gcHJvZHVrLg0KDQo8L2Rpdj4NCg0KIyMgUHJvcG9yc2kgU2FtcGVsICgkXGhhdHtwfSQpDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpEaWtldGFodWk6DQoNCiogVG90YWwgcGVuZ2d1bmE6ICRuJD00MDANCg0KKiBQZW5nZ3VuYSBrbGlrIENUQTogJHgkPTE1Ng0KDQpQcm9wb3JzaSBzYW1wZWwgOiANCiQkXGhhdHtwfSA9IFxmcmFje3h9e259ID0gXGZyYWN7MTU2fXs0MDB9ID0gMC4zOSQkDQpJbnRlcnByZXRhc2k6DQoNClNla2l0YXIgMzklIHBlbmdndW5hIG1lbmdrbGlrIHRvbWJvbCBDVEEgcGFkYSBkZXNhaW4geWFuZyBkaXVqaS4NCjwvZGl2Pg0KDQojIyBQZXJoaXR1bmdhbiBJbnRlcnZhbCBLZXBlcmNheWFhbiB1bnR1ayBQcm9wb3JzaQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KUnVtdXMgeWFuZyBkaWd1bmFrYW4gYWRhbGFoOg0KJCRDSSA9IFxoYXR7cH0gXHBtIHpfe1xhbHBoYS8yfSBcdGltZXMgXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0kJA0KRGkgbWFuYSBTdGFuZGFyZCBFcnJvciAoJFNFJCkgYWRhbGFoOiQkU0UgPSBcc3FydHtcZnJhY3swLjM5KDEtMC4zOSl9ezQwMH19ID0gXHNxcnR7XGZyYWN7MC4zOSBcdGltZXMgMC42MX17NDAwfX0gXGFwcHJveCAwLjAyNDM5JCQNCg0KMS4gSW50ZXJ2YWwgS2VwZXJjYXlhYW4gOTAlICgkeiA9IDEuNjQ1JCkNCiAgIA0KICAgKiBNYXJnaW4gb2YgRXJyb3I6ICQxLjY0NSBcdGltZXMgMC4wMjQzOSBcYXBwcm94IDAuMDQwMSQNCiAgICogSW50ZXJ2YWw6ICgwLjM0OTksIDAuNDMwMSkgYXRhdSAzNC45OSUgLSA0My4wMSUNCiAgIA0KMi4gSW50ZXJ2YWwgS2VwZXJjYXlhYW4gOTUlICgkeiA9IDEuOTYkKQ0KDQogICAqIE1hcmdpbiBvZiBFcnJvcjogJDEuOTYgXHRpbWVzIDAuMDI0MzkgXGFwcHJveCAwLjA0NzgkDQogICAqIEludGVydmFsOiAoMC4zNDIyLCAwLjQzNzgpIGF0YXUgMzQuMjIlIC0gNDMuNzglDQogICANCjMuIEludGVydmFsIEtlcGVyY2F5YWFuIDk5JSAoJHogPSAyLjU3NiQpDQoNCiAgICogTWFyZ2luIG9mIEVycm9yOiAkMi41NzYgXHRpbWVzIDAuMDI0MzkgXGFwcHJveCAwLjA2MjgkDQogICAqIEludGVydmFsOiAoMC4zMjcyLCAwLjQ1MjgpIGF0YXUgMzIuNzIlIC0gNDUuMjglDQogICANCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBkYW4gUGVyYmFuZGluZ2FuDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgMS4gTG9hZCBMaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyAyLiBQZXJzaWFwYW4gRGF0YSAoSGFzaWwgUGVyaGl0dW5nYW4gS2FzdXMgMykNCnBfaGF0IDwtIDAuMzkNCmxldmVscyA8LSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpDQpiYXdhaCA8LSBjKDAuMzQ5OSwgMC4zNDIyLCAwLjMyNzIpDQphdGFzICA8LSBjKDAuNDMwMSwgMC40Mzc4LCAwLjQ1MjgpDQpjb2xvcnMgPC0gYygiIzM0OThkYiIsICIjZTY3ZTIyIiwgIiNlNzRjM2MiKQ0KDQojIDMuIEluaXNpYWxpc2FzaSBQbG90DQpmaWcgPC0gcGxvdF9seSgpDQoNCiMgNC4gTG9vcCB1bnR1ayBNZW5hbWJhaGthbiBHYXJpcyBJbnRlcnZhbA0KZm9yKGkgaW4gMTozKSB7DQogIGZpZyA8LSBmaWcgJT4lIGFkZF9zZWdtZW50cygNCiAgICB4ID0gYmF3YWhbaV0sIHhlbmQgPSBhdGFzW2ldLA0KICAgIHkgPSBsZXZlbHNbaV0sIHllbmQgPSBsZXZlbHNbaV0sDQogICAgbGluZSA9IGxpc3QoY29sb3IgPSBjb2xvcnNbaV0sIHdpZHRoID0gMTIpLA0KICAgIG5hbWUgPSBwYXN0ZSgiTGV2ZWwiLCBsZXZlbHNbaV0pLA0KICAgICMgRklUVVIgSE9WRVIgVE9PTFRJUFMNCiAgICBob3ZlcmluZm8gPSAidGV4dCIsDQogICAgdGV4dCA9IHBhc3RlMCgiPGI+VGluZ2thdCBLZXBlcmNheWFhbjogIiwgbGV2ZWxzW2ldLCAiPC9iPjxicj4iLA0KICAgICAgICAgICAgICAgICAgIlByb3BvcnNpIFNhbXBlbDogIiwgcF9oYXQgKiAxMDAsICIlPGJyPiIsDQogICAgICAgICAgICAgICAgICAiUmVudGFuZzogIiwgcm91bmQoYmF3YWhbaV0qMTAwLCAyKSwgIiUgLSAiLCByb3VuZChhdGFzW2ldKjEwMCwgMiksICIlIikNCiAgKQ0KfQ0KDQojIDUuIEtvbmZpZ3VyYXNpIExheW91dCAoTWVuYW1iYWhrYW4gU2hhcGUgTGlzdCAmIExhYmVsKQ0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KA0KICB0aXRsZSA9IGxpc3QodGV4dCA9ICI8Yj5BbmFsaXNpcyBJbnRlcmFrdGlmIFByb3BvcnNpIENUQSBCYXJ1IChBL0IgVGVzdCk8L2I+IiwgeSA9IDAuOTUpLA0KICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiQ2xpY2stVGhyb3VnaCBSYXRlIChDVFIpIiwgdGlja2Zvcm1hdCA9ICIuMSUiLCByYW5nZSA9IGMoMC4zMCwgMC41MCkpLA0KICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiQ29uZmlkZW5jZSBMZXZlbCIpLA0KICANCiAgIyBTSEFQRVM6IEdhcmlzIGJhbnR1IHZlcnRpa2FsIHVudHVrIHAtaGF0DQogIHNoYXBlcyA9IGxpc3QoDQogICAgbGlzdCgNCiAgICAgIHR5cGUgPSAibGluZSIsDQogICAgICB4MCA9IHBfaGF0LCB4MSA9IHBfaGF0LA0KICAgICAgeTAgPSAwLCB5MSA9IDMuNSwNCiAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gInJnYmEoMTI4LCAxMjgsIDEyOCwgMC41KSIsIGRhc2ggPSAiZGFzaCIsIHdpZHRoID0gMikNCiAgICApDQogICksDQogIA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gMTAwKSwNCiAgaG92ZXJtb2RlID0gImNsb3Nlc3QiDQopICU+JQ0KICAjIE1lbmFtYmFoa2FuIGFub3Rhc2kgdGVrcyB1bnR1ayBwLWhhdA0KICBhZGRfYW5ub3RhdGlvbnMoDQogICAgeCA9IHBfaGF0LCB5ID0gMy43LCB0ZXh0ID0gcGFzdGUoIkVzdGltYXNpIHV0YW1hIChwLWhhdCk6IiwgcF9oYXQqMTAwLCAiJSIpLA0KICAgIHNob3dhcnJvdyA9IEZBTFNFLCBmb250ID0gbGlzdChjb2xvciA9ICJncmF5NjAiLCBzaXplID0gMTIpDQogICkNCg0KIyA2LiBUYW1waWxrYW4gUGxvdA0KZmlnDQpgYGANCg0KDQpQZXJiYW5kaW5nYW46IFNlbWFraW4gdGluZ2dpIHRpbmdrYXQga2VwZXJjYXlhYW4sIHJlbnRhbmcgaW50ZXJ2YWwgc2VtYWtpbiBsZWJhci4gSGFsIGluaSB0ZXJqYWRpIGthcmVuYSB1bnR1ayBtZW5kYXBhdGthbiBrZXBhc3RpYW4geWFuZyBsZWJpaCB0aW5nZ2kgKDk5JSksIGtpdGEgaGFydXMgbWVtcGVybHVhcyByZW50YW5nIGVzdGltYXNpIGFnYXIgbmlsYWkgcG9wdWxhc2kgeWFuZyBzZWJlbmFybnlhIHRpZGFrICJsdXB1dCIuDQo8L2Rpdj4NCg0KIyMgUGVuZ2FydWggcGFkYSBQZW5nYW1iaWxhbiBLZXB1dHVzYW4gUHJvZHVrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpEYWxhbSBla3NwZXJpbWVuIHByb2R1ayAoQS9CIFRlc3RpbmcpLCB0aW5na2F0IGtlcGVyY2F5YWFuIHNhbmdhdCBtZW1lbmdhcnVoaSByaXNpa28gYmlzbmlzOg0KDQoqIFRpbmdrYXQgS2VwZXJjYXlhYW4gVGluZ2dpICg5OSUpOiBEaWd1bmFrYW4gdW50dWsga2VwdXR1c2FuIHlhbmcgYmVyaXNpa28gdGluZ2dpIGF0YXUgbWFoYWwuIE1pc2FsbnlhLCBqaWthIG1lbmdnYW50aSBkZXNhaW4gQ1RBIG1lbWJ1dHVoa2FuIGJpYXlhIHBlbmdlbWJhbmdhbiB5YW5nIGJlc2FyLCB0aW0gYWthbiBtZW1pbGloIDk5JSB1bnR1ayBtZW1hc3Rpa2FuIGtlbmFpa2FuIGtvbnZlcnNpIGJ1a2FuIGthcmVuYSBmYWt0b3Iga2ViZXR1bGFuLg0KDQoqIFRpbmdrYXQgS2VwZXJjYXlhYW4gU3RhbmRhciAoOTUlKTogTWVydXBha2FuIHN0YW5kYXIgaW5kdXN0cmkuIE1lbWJlcmlrYW4ga2VzZWltYmFuZ2FuIHlhbmcgYmFpayBhbnRhcmEga2VwYXN0aWFuIHN0YXRpc3RpayBkYW4ga2VjZXBhdGFuIHBlbmdhbWJpbGFuIGtlcHV0dXNhbi4NCg0KKiBEYW1wYWsgcGFkYSBLZXB1dHVzYW46IEppa2EgaW50ZXJ2YWwga2VwZXJjYXlhYW4gZGVzYWluIGJhcnUgKDM0JSAtIDQzJSkgdGlkYWsgdHVtcGFuZyB0aW5kaWggKG92ZXJsYXApIGRlbmdhbiBpbnRlcnZhbCBkZXNhaW4gbGFtYSAobWlzYWwgMjAlIC0gMjUlKSwgbWFrYSBraXRhIGJpc2EgZGVuZ2FuIHlha2luIG1lbXV0dXNrYW4gdW50dWsgcm9sbC1vdXQgZGVzYWluIGJhcnUuIE5hbXVuLCBqaWthIGFkYSBvdmVybGFwLCBraXRhIG11bmdraW4gYnV0dWggdWt1cmFuIHNhbXBlbCAoJG4kKSB5YW5nIGxlYmloIGJlc2FyIGF0YXUgbWVuamFsYW5rYW4gdGVzIGxlYmloIGxhbWEuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyA0DQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpQZXJiYW5kaW5nYW4gUHJlc2lzaSAoVWppLVogdnMgVWppLXQpOiBEdWEgdGltIGRhdGEgbWVuZ3VrdXIgbGF0ZW5zaSBBUEkgKGRhbGFtIG1pbGlkZXRpaykgZGkgYmF3YWgga29uZGlzaSB5YW5nIGJlcmJlZGEuDQoNClRpbSBBOg0KDQogICRuJCA9IDM2IChVa3VyYW4gc2FtcGVsKQ0KICANCiAgJFxiYXJ7eH0kPSAyMTAgKFJhdGEtcmF0YSBzYW1wZWwpDQogIA0KICAkXHNpZ21hJCA9IDI0IChTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgZGlrZXRhaHVpKQ0KICANClRpbSBCOg0KDQogICRuJCA9IDM2IChVa3VyYW4gc2FtcGVsKQ0KICANCiAgJFxiYXJ7eH0kID0gMjEwIChSYXRhLXJhdGEgc2FtcGVsKQ0KICANCiAgJHMkID0gMjQgKFN0YW5kYXIgZGV2aWFzaSBzYW1wZWwpDQoNClR1Z2FzOg0KDQoxLiBJZGVudGlmaWthc2kgdWppIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiBvbGVoIG1hc2luZy1tYXNpbmcgdGltLg0KMi4gSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHVudHVrIA0KICAgKiAkOTBcJSQgDQogICAqICQ5NVwlJCANCiAgICogJDk5XCUkLg0KMy4gQnVhdCB2aXN1YWxpc2FzaSB5YW5nIG1lbWJhbmRpbmdrYW4gc2VtdWEgaW50ZXJ2YWwgdGVyc2VidXQuDQo0LiBKZWxhc2thbiBtZW5nYXBhIGxlYmFyIGludGVydmFsIGJlcmJlZGEsIG1lc2tpcHVuIGRhdGEgeWFuZyBkaWd1bmFrYW4gc2VydXBhLg0KPC9kaXY+DQoNCiMjIElkZW50aWZpa2FzaSBVamkgU3RhdGlzdGlrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQoqIFRpbSBBIG1lbmdndW5ha2FuIFVqaS1aIChOb3JtYWwgRGlzdHJpYnV0aW9uKTogS2FyZW5hIHVrdXJhbiBzYW1wZWwgc3VkYWggbWVuY3VrdXBpICgkbiBcZ2VxIDMwJCkgZGFuIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpIGRpa2V0YWh1aS4NCg0KVWppIHlhbmcgZGlndW5ha2FuOiBVamktWiAoWi1pbnRlcnZhbCkNCiQkQ0kgPSBcYmFye3h9IFxwbSB6X3tcYWxwaGEvMn0gXGxlZnQoIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxyaWdodCkkJA0KDQoqIFRpbSBCIG1lbmdndW5ha2FuIFVqaS10IChTdHVkZW50J3MgdC1EaXN0cmlidXRpb24pOiBLYXJlbmEgbWVza2lwdW4gdWt1cmFuIHNhbXBlbCBjdWt1cCwgdGltIGluaSBoYW55YSBtZW5nZXRhaHVpIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKCRzJCksIGJ1a2FuIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaS4NCg0KVWppIHlhbmcgZGlndW5ha2FuOiBVamktdCAodC1pbnRlcnZhbCkNCiQkQ0kgPSBcYmFye3h9IFxwbSB0X3tcYWxwaGEvMiwgZGZ9IFx0aW1lcyBcbGVmdCggXGZyYWN7c317XHNxcnR7bn19IFxyaWdodCkkJA0KPC9kaXY+DQoNCiMjIFBlcmhpdHVuZ2FuIEludGVydmFsIEtlcGVyY2F5YWFuIChDSSkNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCktlZHVhIHRpbSBtZW1pbGlraSAkXGJhcnt4fSA9IDIxMCQsICRuID0gMzYkLCBkYW4gYW5na2EgZGV2aWFzaSAkMjQkLlN0YW5kYXJkIEVycm9yIChTRSkgdW50dWsga2VkdWFueWEgYWRhbGFoOiAkU0UgPSBcZnJhY3syNH17XHNxcnR7MzZ9fSA9IFxmcmFjezI0fXs2fSA9IDQkLg0KDQoqKlRpbSBBIChVamktWikqKg0KDQpSdW11czogJENJID0gXGJhcnt4fSBccG0gKHpfe1xhbHBoYS8yfSBcdGltZXMgU0UpJA0KDQoqICQ5MFwlJCAoej0xLjY0NSk6ICQyMTAgXHBtICgxLjY0NSBcdGltZXMgNCkgPSAyMTAgXHBtIDYuNTggXHJpZ2h0YXJyb3ckICgyMDMuNDIsIDIxNi41OCkNCg0KKiAkOTVcJSQgKHo9MS45Nik6ICQyMTAgXHBtICgxLjk2IFx0aW1lcyA0KSA9IDIxMCBccG0gNy44NCBccmlnaHRhcnJvdyQgKDIwMi4xNiwgMjE3Ljg0KQ0KDQoqICQ5OVwlJCAoej0yLjU3Nik6ICQyMTAgXHBtICgyLjU3NiBcdGltZXMgNCkgPSAyMTAgXHBtIDEwLjMwIFxyaWdodGFycm93JCAoMTk5LjcwLCAyMjAuMzApDQoNCvCflLkgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gVGltIEEgKFVqaS1aKQ0KDQp8IFRpbmdrYXQJfCBOaWxhaSBrcml0aXMgfCBJbnRlcnZhbCB8DQp8Oi0tLXw6LS0tfDotLS18DQp8IDkwJSB8ICR6JCA9IDEuNjQ1IHwgKDIwMy40MiAsIDIxNi41OCkgfCANCjk1JSB8ICR6JCA9IDEuOTYgfCAoMjAyLjE2ICwgMjE3Ljg0KSB8DQo5OSUJfCAkeiQgPSAyLjU3NiB8ICgxOTkuNzAgLCAyMjAuMzApIHwNCg0KKipUaW0gQiAoVWppLXQsIGRmPTM1KSoqDQoNClJ1bXVzOiAkQ0kgPSBcYmFye3h9IFxwbSAodF97XGFscGhhLzIsIDM1fSBcdGltZXMgU0UpJA0KDQoqIDkwJSAodD0xLjY4OSk6ICQyMTAgXHBtICgxLjY4OSBcdGltZXMgNCkgPSAyMTAgXHBtIDYuNzU2IFxyaWdodGFycm93JCAoMjAzLjI0LCAyMTYuNzYpDQoNCiogOTUlICh0PTIuMDMwKTogJDIxMCBccG0gKDIuMDMwIFx0aW1lcyA0KSA9IDIxMCBccG0gOC4xMiBccmlnaHRhcnJvdyQgKDIwMS44OCwgMjE4LjEyKQ0KDQoqIDk5JSAodD0yLjcyMyk6ICQyMTAgXHBtICgyLjcyMyBcdGltZXMgNCkgPSAyMTAgXHBtIDEwLjg5IFxyaWdodGFycm93JCAoMTk5LjExLCAyMjAuODkpDQoNCvCflLkgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gVGltIEIgKFVqaS10LCBkZiA9IDM1KQ0KDQp8IFRpbmdrYXQgfCBOaWxhaSBrcml0aXMgfCBJbnRlcnZhbCAgICAgICAgICB8DQp8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLSB8DQp8IDkwJSAgICAgfCAkdCQ9MS42OTAgICAgfCAoMjAzLjI0ICwgMjE2Ljc2KSB8DQp8IDk1JSAgICAgfCAkdCQ9Mi4wMzAgICAgfCAoMjAxLjg4ICwgMjE4LjEyKSB8DQp8IDk5JSAgICAgfCAkdCQ9Mi43MjQgICAgfCAoMTk5LjEwICwgMjIwLjkwKSB8DQoNCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBQZXJiYW5kaW5nYW4gU2VtdWEgVmFyaWFiZWwNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyAxLiBMb2FkIExpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIDIuIFBlcnNpYXBhbiBEYXRhDQpsZXZlbHMgPC0gYygiOTAlIiwgIjk1JSIsICI5OSUiKQ0KbWVhbl92YWwgPC0gMjEwDQphX2xvdyAgPC0gYygyMDMuNDIsIDIwMi4xNiwgMTk5LjcwKQ0KYV9oaWdoIDwtIGMoMjE2LjU4LCAyMTcuODQsIDIyMC4zMCkNCmJfbG93ICA8LSBjKDIwMy4yNCwgMjAxLjg4LCAxOTkuMTEpDQpiX2hpZ2ggPC0gYygyMTYuNzYsIDIxOC4xMiwgMjIwLjg5KQ0KDQojIDMuIEluaXNpYWxpc2FzaSBQbG90DQpmaWcgPC0gcGxvdF9seSgpDQoNCiMgNC4gTG9vcCB1bnR1ayBNZW5hbWJhaGthbiBHYXJpcyBJbnRlcnZhbA0KZm9yKGkgaW4gMTozKSB7DQogIA0KICAjIFRhbWJhaGthbiBUaW0gQSAoVWppLVopIC0gQmlydQ0KICBmaWcgPC0gZmlnICU+JSBhZGRfc2VnbWVudHMoDQogICAgeCA9IGFfbG93W2ldLCB4ZW5kID0gYV9oaWdoW2ldLA0KICAgIHkgPSBpICsgMC4xNSwgeWVuZCA9IGkgKyAwLjE1LA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJyMzNDk4ZGInLCB3aWR0aCA9IDEyKSwNCiAgICBuYW1lID0gIlRpbSBBIChVamktWikiLA0KICAgIGxlZ2VuZGdyb3VwID0gIlRpbSBBIiwNCiAgICBzaG93bGVnZW5kID0gKGkgPT0gMSksDQogICAgaG92ZXJpbmZvID0gInRleHQiLA0KICAgIHRleHQgPSBwYXN0ZTAoIjxiPlRpbSBBIChVamktWik8L2I+PGJyPiIsDQogICAgICAgICAgICAgICAgICAiTGV2ZWw6ICIsIGxldmVsc1tpXSwgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgIkJhd2FoOiAiLCBhX2xvd1tpXSwgIiBtczxicj4iLA0KICAgICAgICAgICAgICAgICAgIkF0YXM6ICIsIGFfaGlnaFtpXSwgIiBtcyIpDQogICkNCiAgDQogICMgVGFtYmFoa2FuIFRpbSBCIChVamktdCkgLSBNZXJhaA0KICBmaWcgPC0gZmlnICU+JSBhZGRfc2VnbWVudHMoDQogICAgeCA9IGJfbG93W2ldLCB4ZW5kID0gYl9oaWdoW2ldLA0KICAgIHkgPSBpIC0gMC4xNSwgeWVuZCA9IGkgLSAwLjE1LA0KICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gJyNlNzRjM2MnLCB3aWR0aCA9IDEyKSwNCiAgICBuYW1lID0gIlRpbSBCIChVamktdCkiLA0KICAgIGxlZ2VuZGdyb3VwID0gIlRpbSBCIiwNCiAgICBzaG93bGVnZW5kID0gKGkgPT0gMSksDQogICAgaG92ZXJpbmZvID0gInRleHQiLA0KICAgIHRleHQgPSBwYXN0ZTAoIjxiPlRpbSBCIChVamktdCk8L2I+PGJyPiIsDQogICAgICAgICAgICAgICAgICAiTGV2ZWw6ICIsIGxldmVsc1tpXSwgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgIkJhd2FoOiAiLCBiX2xvd1tpXSwgIiBtczxicj4iLA0KICAgICAgICAgICAgICAgICAgIkF0YXM6ICIsIGJfaGlnaFtpXSwgIiBtcyIpDQogICkNCn0NCg0KIyA1LiBLb25maWd1cmFzaSBMYXlvdXQgZGVuZ2FuIFNIQVBFUyBMSVNUDQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoDQogIHRpdGxlID0gbGlzdCh0ZXh0ID0gIjxiPkFuYWxpc2lzIFByZXNpc2kgTGF0ZW5zaSBBUEk6IFRpbSBBIHZzIFRpbSBCPC9iPiIsIHkgPSAwLjk1KSwNCiAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkxhdGVuc2kgKG1pbGlkZXRpaykiLCByYW5nZSA9IGMoMTk1LCAyMjUpKSwNCiAgeWF4aXMgPSBsaXN0KA0KICAgIHRpdGxlID0gIlRpbmdrYXQgS2VwZXJjYXlhYW4iLA0KICAgIHRpY2ttb2RlID0gImFycmF5IiwNCiAgICB0aWNrdmFscyA9IDE6MywNCiAgICB0aWNrdGV4dCA9IGxldmVscywNCiAgICByYW5nZSA9IGMoMC41LCAzLjgpDQogICksDQogICMgLS0tIFNIQVBFUyBMSVNUIChHYXJpcyBiYW50dSB2ZXJ0aWthbCBkaSByYXRhLXJhdGEpIC0tLQ0KICBzaGFwZXMgPSBsaXN0KA0KICAgIGxpc3QoDQogICAgICB0eXBlID0gImxpbmUiLA0KICAgICAgeDAgPSBtZWFuX3ZhbCwgeDEgPSBtZWFuX3ZhbCwNCiAgICAgIHkwID0gMC41LCB5MSA9IDMuNSwNCiAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gInJnYmEoMTI4LCAxMjgsIDEyOCwgMC41KSIsIGRhc2ggPSAiZGFzaCIsIHdpZHRoID0gMikNCiAgICApDQogICksDQogICMgTGVnZW5kYSBkaSBiYXdhaA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gODApLA0KICBob3Zlcm1vZGUgPSAiY2xvc2VzdCINCikgJT4lDQogICMgTWVuYW1iYWhrYW4gYW5vdGFzaSB0ZWtzIHVudHVrIHJhdGEtcmF0YSBhZ2FyIGxlYmloIGplbGFzDQogIGFkZF9hbm5vdGF0aW9ucygNCiAgICB4ID0gbWVhbl92YWwsIHkgPSAzLjcsIHRleHQgPSBwYXN0ZSgiTWVhbjoiLCBtZWFuX3ZhbCwgIm1zIiksDQogICAgc2hvd2Fycm93ID0gRkFMU0UsIGZvbnQgPSBsaXN0KGNvbG9yID0gImdyYXkiLCBzaXplID0gMTIpDQogICkNCg0KIyA2LiBKYWxhbmthbiBWaXN1YWxpc2FzaQ0KZmlnDQpgYGANCjwvZGl2Pg0KDQojIyBQZW5qZWxhc2FuIFBlcmJlZGFhbiBMZWJhciBJbnRlcnZhbA0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KTWVza2lwdW4gZGF0YSAoJFxiYXJ7eH0sIG4sIFx0ZXh0e2FuZ2thIGRldmlhc2l9JCkgaWRlbnRpaywgaW50ZXJ2YWwgVGltIEIgKFVqaS10KSBzZWxhbHUgbGViaWggbGViYXIgZGFyaXBhZGEgVGltIEEgKFVqaS1aKS4gTWVuZ2FwYT8NCg0KKiBGYWt0b3IgS2V0aWRha3Bhc3RpYW46IFRpbSBBIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpIHlhbmcgZGlhbmdnYXAgc2ViYWdhaSBuaWxhaSBhYnNvbHV0IHlhbmcgcGFzdGkuIFRpbSBCIGhhbnlhIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKCRzJCkgeWFuZyBtZW5nYW5kdW5nIHJpc2lrbyBrZXNhbGFoYW4ga2FyZW5hIGhhbnlhIGJlcmFzYWwgZGFyaSAzNiBkYXRhLg0KDQoqIEthcmFrdGVyaXN0aWsgRGlzdHJpYnVzaS10OiBEaXN0cmlidXNpLXQgbWVtaWxpa2kgImVrb3IiIHlhbmcgbGViaWggdGViYWwgKGhlYXZpZXIgdGFpbHMpIGRpYmFuZGluZ2thbiBkaXN0cmlidXNpIG5vcm1hbCAoWikuIEluaSBhZGFsYWggY2FyYSBzdGF0aXN0aWsgbWVtYmVyaWthbiAicGVuYWx0aSIgYXRhdSBrb21wZW5zYXNpIGF0YXMga2V0aWRha3RhaHVhbiBraXRhIHRlcmhhZGFwIHBhcmFtZXRlciBwb3B1bGFzaSBhc2xpLg0KDQoqIE5pbGFpIEtyaXRpczogTmlsYWkga3JpdGlzICR0JCBzZWxhbHUgbGViaWggYmVzYXIgZGFyaXBhZGEgbmlsYWkgJHokIHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4geWFuZyBzYW1hLiBDb250b2hueWEgcGFkYSA5NSUsICR0PTIuMDMwJCBzZWRhbmdrYW4gJHo9MS45NiQuIEFuZ2thIHBlbmdhbGkgeWFuZyBsZWJpaCBiZXNhciBpbmlsYWggeWFuZyBtZW1idWF0IGludGVydmFsIFRpbSBCIGxlYmloIGxlYmFyIChrdXJhbmcgcHJlc2lzaSBkaWJhbmRpbmdrYW4gVGltIEEpLg0KDQpLZXNpbXB1bGFuIHVudHVrIEtlcHV0dXNhbjogVGltIEEgbWVtaWxpa2kgcHJlc2lzaSB5YW5nIGxlYmloIHRpbmdnaSBrYXJlbmEgaW5mb3JtYXNpIHlhbmcgbWVyZWthIG1pbGlraSBsZWJpaCBsZW5na2FwICh0YWh1IGRhdGEgcG9wdWxhc2kpLiBUaW0gQiBoYXJ1cyBtZW5lcmltYSByZW50YW5nIHlhbmcgbGViaWggbGViYXIgc2ViYWdhaSBrb25zZWt1ZW5zaSBkYXJpIHBlbmdndW5hYW4gZGF0YSBzYW1wZWwuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyA1DQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpJbnRlcnZhbCBLZXBlcmNheWFhbiBTYXR1IFNpc2kgKE9uZS1TaWRlZCk6IFNlYnVhaCBwZXJ1c2FoYWFuIFNhYVMgKFNvZnR3YXJlIGFzIGEgU2VydmljZSkgaW5naW4gbWVtYXN0aWthbiBiYWh3YSBzZXRpZGFrbnlhIDcwJSBkYXJpIHBlbmdndW5hIGFrdGlmIG1pbmdndWFuIG1lbmdndW5ha2FuIGZpdHVyIHByZW1pdW0uDQoNCkRhcmkgZWtzcGVyaW1lbjoNCg0KJG4kID0gMjUwIChUb3RhbCBwZW5nZ3VuYSkNCg0KJHgkID0gMTg1IChQZW5nZ3VuYSBwcmVtaXVtIGFrdGlmKQ0KDQpNYW5hamVtZW4gaGFueWEgdGVydGFyaWsgcGFkYSBiYXRhcyBiYXdhaCAobG93ZXIgYm91bmQpIGRhcmkgZXN0aW1hc2kgdGVyc2VidXQuDQoNClR1Z2FzOg0KDQoxLiBJZGVudGlmaWthc2kgamVuaXMgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gZGFuIHVqaSB5YW5nIHRlcGF0Lg0KMi4gSGl0dW5nIEludGVydmFsIEtlcGVyY2F5YWFuIHNhdHUgc2lzaSAoYmF0YXMgYmF3YWgpIHBhZGEgdGluZ2thdDoNCiAgKiAkOTBcJSQgDQogICogJDk1XCUkIA0KICAqICQ5OVwlJCANCjMuIFZpc3VhbGlzYXNpa2FuIGJhdGFzIGJhd2FoIHVudHVrIHNlbXVhIHRpbmdrYXQga2VwZXJjYXlhYW4uDQo0LiBUZW50dWthbiBhcGFrYWggdGFyZ2V0IDcwJSB0ZXJzZWJ1dCB0ZXJwZW51aGkgc2VjYXJhIHN0YXRpc3Rpay4NCjwvZGl2Pg0KDQojIyBJZGVudGlmaWthc2kgSmVuaXMgSW50ZXJ2YWwgS2VwZXJjYXlhYW4NCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCkthcmVuYSBtYW5hamVtZW4gaGFueWEgaW5naW4gbWVtYXN0aWthbiBhcGFrYWggcGVyc2VudGFzZSBwZW5nZ3VuYSBzZXRpZGFrbnlhIChwYWxpbmcgc2VkaWtpdCkgYmVyYWRhIHBhZGEgYW5na2EgdGVydGVudHUsIG1ha2EgdWppIHlhbmcgdGVwYXQgYWRhbGFoIEludGVydmFsIEtlcGVyY2F5YWFuIFNhdHUgU2lzaSAoT25lLVNpZGVkIENvbmZpZGVuY2UgSW50ZXJ2YWwgLSBMb3dlciBCb3VuZCkgdW50dWsgcHJvcG9yc2kuDQoNCiogSmVuaXMgRGF0YTogUHJvcG9yc2kgKGt1YWxpdGF0aWYvYmluZXI6IG1lbmdndW5ha2FuIGF0YXUgdGlkYWsgbWVuZ2d1bmFrYW4gZml0dXIgcHJlbWl1bSkuDQoqIFVqaSBTdGF0aXN0aWs6IFVqaS1aIHVudHVrIHByb3BvcnNpIHNhdHUgc2lzaSAoa2FyZW5hICRuPTI1MCQgc3VkYWggY3VrdXAgYmVzYXIpLg0KPC9kaXY+DQoNCiMjICBQZXJoaXR1bmdhbiBCYXRhcyBCYXdhaCAoTG93ZXIgQm91bmQpDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpEYXRhIFN0YXRpc3RpazoNCg0KKiAkbiA9IDI1MCQNCiogJHggPSAxODUkDQoqICRcaGF0e3B9ID0gXGZyYWN7MTg1fXsyNTB9ID0gMC43NCQgKDc0JSkNCiogU3RhbmRhcmQgRXJyb3IgKCRTRSQpOiAkXHNxcnR7XGZyYWN7XGhhdHtwfSgxLVxoYXR7cH0pfXtufX0gPSBcc3FydHtcZnJhY3swLjc0IFx0aW1lcyAwLjI2fXsyNTB9fSA9IFxzcXJ0ezAuMDAwNzY5Nn0gXGFwcHJveCAwLjAyNzckDQoNClJ1bXVzIEJhdGFzIEJhd2FoOiAkTG93ZXJcIEJvdW5kID0gXGhhdHtwfSAtICh6X3tcYWxwaGF9IFx0aW1lcyBTRSkkQ2F0YXRhbjogUGFkYSB1amkgc2F0dSBzaXNpLCBraXRhIG1lbmdndW5ha2FuICR6X3tcYWxwaGF9JCwgYnVrYW4gJHpfe1xhbHBoYS8yfSQuDQoNCjEuIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTAlICgkXGFscGhhID0gMC4xMCQpDQoNCiogJHpfezAuMTB9ID0gMS4yODIkDQoqICQwLjc0IC0gKDEuMjgyIFx0aW1lcyAwLjAyNzcpID0gMC43NCAtIDAuMDM1NSA9IFxtYXRoYmZ7MC43MDQ1XCAoNzAuNDVcJSl9JA0KDQoyLiBUaW5na2F0IEtlcGVyY2F5YWFuIDk1JSAoJFxhbHBoYSA9IDAuMDUkKQ0KDQoqICR6X3swLjA1fSA9IDEuNjQ1JA0KKiAkMC43NCAtICgxLjY0NSBcdGltZXMgMC4wMjc3KSA9IDAuNzQgLSAwLjA0NTYgPSBcbWF0aGJmezAuNjk0NFwgKDY5LjQ0XCUpfSQNCg0KMy4gVGluZ2thdCBLZXBlcmNheWFhbiA5OSUgKCRcYWxwaGEgPSAwLjAxJCkNCg0KKiAkel97MC4wMX0gPSAyLjMyNiQNCiogJDAuNzQgLSAoMi4zMjYgXHRpbWVzIDAuMDI3NykgPSAwLjc0IC0gMC4wNjQ0ID0gXG1hdGhiZnswLjY3NTZcICg2Ny41NlwlKX0kDQo8L2Rpdj4NCg0KIyMgVmlzdWFsaXNhc2kgQmF0YXMgQmF3YWgNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyAxLiBMb2FkIExpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIDIuIFBlcnNpYXBhbiBEYXRhIEthc3VzIDUNCnBfaGF0IDwtIDAuNzQNCnRhcmdldCA8LSAwLjcwDQpkYXRhX3NhYXMgPC0gZGF0YS5mcmFtZSgNCiAgTGV2ZWwgPSBjKCI5MCUiLCAiOTUlIiwgIjk5JSIpLA0KICBMb3dlckJvdW5kID0gYygwLjcwNDUsIDAuNjk0NCwgMC42NzU2KSwNCiAgQ29sb3IgPSBjKCIjMzQ5OGRiIiwgIiMyZWNjNzEiLCAiI2U3NGMzYyIpDQopDQoNCiMgMy4gTWVtYnVhdCBQbG90DQpmaWcgPC0gcGxvdF9seSgpDQoNCmZvcihpIGluIDE6bnJvdyhkYXRhX3NhYXMpKSB7DQogICMgTWVuYW1iYWhrYW4gR2FyaXMgZGFyaSBMb3dlciBCb3VuZCBrZSBwX2hhdA0KICBmaWcgPC0gZmlnICU+JSBhZGRfc2VnbWVudHMoDQogICAgeCA9IGRhdGFfc2FhcyRMb3dlckJvdW5kW2ldLCB4ZW5kID0gcF9oYXQsDQogICAgeSA9IGRhdGFfc2FhcyRMZXZlbFtpXSwgeWVuZCA9IGRhdGFfc2FhcyRMZXZlbFtpXSwNCiAgICBsaW5lID0gbGlzdChjb2xvciA9IGRhdGFfc2FhcyRDb2xvcltpXSwgd2lkdGggPSAxMiksDQogICAgbmFtZSA9IHBhc3RlKCJDSSIsIGRhdGFfc2FhcyRMZXZlbFtpXSksDQogICAgIyAtLS0gRklUVVIgSE9WRVIgVE9PTFRJUFMgLS0tDQogICAgaG92ZXJpbmZvID0gInRleHQiLA0KICAgIHRleHQgPSBwYXN0ZTAoIjxiPlRpbmdrYXQgS2VwZXJjYXlhYW46ICIsIGRhdGFfc2FhcyRMZXZlbFtpXSwgIjwvYj48YnI+IiwNCiAgICAgICAgICAgICAgICAgICJFc3RpbWFzaSBVdGFtYTogIiwgcF9oYXQgKiAxMDAsICIlPGJyPiIsDQogICAgICAgICAgICAgICAgICAiQmF0YXMgQmF3YWggQW1hbjogIiwgcm91bmQoZGF0YV9zYWFzJExvd2VyQm91bmRbaV0gKiAxMDAsIDIpLCAiJSIpDQogICkNCn0NCg0KIyA0LiBLb25maWd1cmFzaSBMYXlvdXQNCmZpZyA8LSBmaWcgJT4lIGxheW91dCgNCiAgdGl0bGUgPSBsaXN0KHRleHQgPSAiPGI+QW5hbGlzaXMgQmF0YXMgQmF3YWggUGVuZ2d1bmEgUHJlbWl1bSAoU2FhUyk8L2I+IiwgeSA9IDAuOTUpLA0KICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiUHJvcG9yc2kgUGVuZ2d1bmEiLCB0aWNrZm9ybWF0ID0gIi4xJSIsIHJhbmdlID0gYygwLjYwLCAwLjgwKSksDQogIHlheGlzID0gbGlzdCh0aXRsZSA9ICJDb25maWRlbmNlIExldmVsIiksDQogIA0KICAjIFNIQVBFUzogR2FyaXMgVGFyZ2V0IDcwJQ0KICBzaGFwZXMgPSBsaXN0KA0KICAgIGxpc3QoDQogICAgICB0eXBlID0gImxpbmUiLA0KICAgICAgeDAgPSB0YXJnZXQsIHgxID0gdGFyZ2V0LA0KICAgICAgeTAgPSAwLCB5MSA9IDMuNSwNCiAgICAgIGxpbmUgPSBsaXN0KGNvbG9yID0gInJlZCIsIGRhc2ggPSAiZGFzaCIsIHdpZHRoID0gMikNCiAgICApDQogICksDQogIA0KICBsZWdlbmQgPSBsaXN0KG9yaWVudGF0aW9uID0gImgiLCB4ID0gMC41LCB4YW5jaG9yID0gImNlbnRlciIsIHkgPSAtMC4yKSwNCiAgbWFyZ2luID0gbGlzdChsID0gODAsIHIgPSA1MCwgYiA9IDgwLCB0ID0gODApLA0KICBob3Zlcm1vZGUgPSAiY2xvc2VzdCINCikgJT4lDQogICMgTWVuYW1iYWhrYW4gQW5vdGFzaSB1bnR1ayBUYXJnZXQNCiAgYWRkX2Fubm90YXRpb25zKA0KICAgIHggPSB0YXJnZXQsIHkgPSAzLjcsIHRleHQgPSAiVGFyZ2V0IE1pbmltYWwgNzAlIiwNCiAgICBzaG93YXJyb3cgPSBGQUxTRSwgZm9udCA9IGxpc3QoY29sb3IgPSAicmVkIiwgc2l6ZSA9IDEyKQ0KICApDQoNCiMgNS4gVGFtcGlsa2FuIFBsb3QNCmZpZw0KYGBgDQo8L2Rpdj4NCg0KIyMgS2VzaW1wdWxhbg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KQXBha2FoIFRhcmdldCA3MCUgVGVycGVudWhpP1BlbmVudHVhbiB0ZXJwZW51aGlueWEgdGFyZ2V0IHRlcmdhbnR1bmcgcGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIHlhbmcgZGlwaWxpaCBvbGVoIG1hbmFqZW1lbjoNCg0KKiBQYWRhIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTAlOiBUYXJnZXQgVGVycGVudWhpLiBCYXRhcyBiYXdhaCAoNzAuNDUlKSBtYXNpaCBiZXJhZGEgZGkgYXRhcyB0YXJnZXQgNzAlLiBLaXRhIHlha2luIDkwJSBiYWh3YSBzZXRpZGFrbnlhIDcwLjQ1JSBwZW5nZ3VuYSBhZGFsYWggcHJlbWl1bS4NCg0KKiBQYWRhIFRpbmdrYXQgS2VwZXJjYXlhYW4gOTUlOiBUYXJnZXQgVGlkYWsgVGVycGVudWhpIHNlY2FyYSBzdGF0aXN0aWsuIEJhdGFzIGJhd2FoICg2OS40NCUpIHNlZGlraXQgZGkgYmF3YWggNzAlLiBXYWxhdXB1biByYXRhLXJhdGEgc2FtcGVsIGtpdGEgNzQlLCBhZGEga2VtdW5na2luYW4ga2VjaWwgcHJvcG9yc2kgYXNsaSBwb3B1bGFzaSB0dXJ1biBoaW5nZ2EgNjkuNDQlLg0KDQoqIFBhZGEgVGluZ2thdCBLZXBlcmNheWFhbiA5OSU6IFRhcmdldCBUaWRhayBUZXJwZW51aGkuIEJhdGFzIGJhd2FoICg2Ny41NiUpIGJlcmFkYSBjdWt1cCBqYXVoIGRpIGJhd2FoIHRhcmdldC4NCjwvZGl2Pg0KDQojIFJlZmVyZW5zaQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KKiBBZ3Jlc3RpLCBBLiAoMjAxMykuIENhdGVnb3JpY2FsIERhdGEgQW5hbHlzaXMgKDNyZCBlZC4pLiBIb2Jva2VuLCBOSjogSm9obiBXaWxleSAmIFNvbnMuKFJlZmVyZW5zaSB1dGFtYSB1bnR1ayBsb2dpa2EgcGVyaGl0dW5nYW4gaW50ZXJ2YWwga2VwZXJjYXlhYW4gcHJvcG9yc2kgcGFkYSBLYXN1cyAzIGRhbiBLYXN1cyA1KS4NCiogSG9nZywgUi4gVi4sIE1jS2VhbiwgSi4gVy4sICYgQ3JhaWcsIEEuIFQuICgyMDE5KS4gSW50cm9kdWN0aW9uIHRvIE1hdGhlbWF0aWNhbCBTdGF0aXN0aWNzICg4dGggZWQuKS4gUGVhcnNvbi4oRGFzYXIgdGVvcmkgbWVuZ2VuYWkgc2lmYXQtc2lmYXQgZGlzdHJpYnVzaSBzYW1wbGluZyBkYW4gVGVvcmVtYSBMaW1pdCBQdXNhdCkuDQoqIE1vbnRnb21lcnksIEQuIEMuLCAmIFJ1bmdlciwgRy4gQy4gKDIwMTQpLiBBcHBsaWVkIFN0YXRpc3RpY3MgYW5kIFByb2JhYmlsaXR5IGZvciBFbmdpbmVlcnMuIEhvYm9rZW4sIE5KOiBKb2huIFdpbGV5ICYgU29ucy4oUmVmZXJlbnNpIHVudHVrIHBlcmhpdHVuZ2FuIHByYWt0aXMgSW50ZXJ2YWwgS2VwZXJjYXlhYW4gbWVuZ2d1bmFrYW4gRGlzdHJpYnVzaS1aIGRhbiBEaXN0cmlidXNpLXQgcGFkYSBkYXRhIGtvbnRpbnUpLg0KKiBOSVNUL1NFTUFURUNILiAoMjAxMikuIGUtSGFuZGJvb2sgb2YgU3RhdGlzdGljYWwgTWV0aG9kcy4gaHR0cHM6Ly93d3cuaXRsLm5pc3QuZ292L2Rpdjg5OC9oYW5kYm9vay8oUGFuZHVhbiB0ZWtuaXMgdW50dWsgcGVuZW50dWFuIGJhdGFzIGJhd2FoL2Jhd2FoIGFtYW4gZGFuIE1hcmdpbiBvZiBFcnJvcikuDQoqIFN0dWRlbnQgW0dvc3NldCwgVy4gUy5dLiAoMTkwOCkuIFRoZSBQcm9iYWJsZSBFcnJvciBvZiBhIE1lYW4uIEJpb21ldHJpa2EsIDYoMSksIDEtMjUuKERva3VtZW4gaGlzdG9yaXMgYXNsaSB5YW5nIG1lbmphZGkgZGFzYXIgcGVuZ2d1bmFhbiBEaXN0cmlidXNpLXQgcGFkYSBzYW1wZWwga2VjaWwgc2VwZXJ0aSBwYWRhIEthc3VzIDIpLg0KKiBXYWxwb2xlLCBSLiBFLiwgTXllcnMsIFIuIEguLCBNeWVycywgUy4gTC4sICYgWWUsIEsuICgyMDEyKS4gUHJvYmFiaWxpdHkgJiBTdGF0aXN0aWNzIGZvciBFbmdpbmVlcnMgJiBTY2llbnRpc3RzICg5dGggZWQuKS4gQm9zdG9uLCBNQTogUGVhcnNvbi4oQnVrdSBwZWdhbmdhbiBzdGFuZGFyIHVudHVrIHBlbmVudHVhbiBuaWxhaSBrcml0aXMgJHpfe1xhbHBoYS8yfSQgZGFuICR0X3tcYWxwaGEvMn0kKS4NCjwvZGl2Pg0KDQojIyBSaW5na2FzYW4gTG9naWthIHlhbmcgRGlndW5ha2FuOg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KMS4gS2FzdXMgMSAmIDQgKERpc3RyaWJ1c2ktWik6IERpZ3VuYWthbiBzYWF0IHVrdXJhbiBzYW1wZWwgYmVzYXIgYXRhdSBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKCRcc2lnbWEkKSBkaWtldGFodWkuIE1lbmdndW5ha2FuIG5pbGFpIGtyaXRpcyBkYXJpIGt1cnZhIE5vcm1hbCBzdGFuZGFyLg0KMi4gS2FzdXMgMiAoRGlzdHJpYnVzaS10KTogRGlndW5ha2FuIHVudHVrIHNhbXBlbCBrZWNpbCAoJG4gPCAzMCQpIGRpIG1hbmEgc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIHRpZGFrIGRpa2V0YWh1aSwgc2VoaW5nZ2EgbWVuZ2d1bmFrYW4gZGVyYWphdCBrZWJlYmFzYW4gKCRkZiA9IG4gLSAxJCkuDQozLiBLYXN1cyAzICYgNSAoUHJvcG9yc2kpOiBNZW5nZ3VuYWthbiBwZW5kZWthdGFuIGRpc3RyaWJ1c2kgTm9ybWFsIHRlcmhhZGFwIGRpc3RyaWJ1c2kgQmlub21pYWwgZGVuZ2FuIHJ1bXVzICRNYXJnaW5cIG9mXCBFcnJvciA9IHpfe1xhbHBoYS8yfSBcc3FydHtcZnJhY3tcaGF0e3B9KDEtXGhhdHtwfSl9e259fSQuDQo8L2Rpdj4=