Tugas Pertemuan Ke 14 Statistika Dasar

p

Soal 1. Apa Perbedaan Pengambilan Keputusan Statistika Deskriptif dan Statistika Inferensial

Definsi -> Statistika deskriptif dan Statistika inferensial adalah dua cabang utama statistika yang digunaan untuk menganalisis data, tetapi keduanya memiliki tujuan dan pendekatan yang berbeda.

A. Statistika Deskriptif

Statistika Deskriptif digunakan untuk mendeskripsikan atau merangkum data yang ada. Tujuannya adalah memberikan gambaran mengenai data yang sudah dikumpulkan tanpa membuat generalisasi atau inferensi ke populasi yang lebih besar.

1. Ciri-ciri

  • Berfokus pada deskripsi dataset (tanpa generalisasi).
  • Tidak ada proses pengujian hipotesis.
  • Hanya berlaku untuk data yang sedang dianalisis.
  • Tidak melibatkan ketidakpastian atau peluang.

2. Teknik yang Digunakan

  • Ukuran Pemusatan: Mean, Median, dan Modus.
  • Ukuran Penyebaran: Varians, Standar Deviasi,dan Rentang (Range).
  • Visualisasi Data: Grafik batang, Diagram lingkaran, Histogram, dan Boxplot.
  • Distribusi Frekuensi: Tabel frekuensi atau Diagram distribusi.

3. Contoh Kasus

Seorang Manager pemasaran di sebuah perusahaan sedang melakukan analisis penjualan untuk bulan ini. Berikut adalah data penjualan berdasarkan kateori produk yang berhasil dikumpulkan:

a. Kategori Produk Tertinggi dan Terendah

  • Makanan \(500\)unit.
  • Elektronik \(120\)unit.

b. Rata-rata Penjualan \[ \text{Rata-rata penjualan} = \frac{120 + 300 + 150 + 500 + 200}{5} = 254 \text{ unit}. \]

c. Urutkan kategori Produk berdasakan Penjualan

  • Makanan \(500\)unit.
  • Pakaian \(300\) unit.
  • Alat Olahraga \(300\) unit.
  • Peralatan Rumah Tangga \(150\)unit.
  • Elektronik \(120\)unit.
Kategori Produk Jumlah Penjualan
Elektronik 120
Pakaian 300
Peralatan Rumah Tangga 150
Makanan 500
Alat Olahraga 200

4. Pengambilan Keputusan

Keputusan diambil berdasarkan gambaran yang jelas tentang data, seperti mengidentifikasi tren atau pola dari dataset yang ada. Namun, keputusan ini hanya berlaku unutk Kelompok data yang dianalisis.

B. Statistika Inferensial

Statistika inferensial adalah metode yang digunakan untuk membuat kesimpulan atau prediksi tentang suatu populasi berdasarkan sampel data. Tujuannya adalah untuk memahami karakteristik populasi dengan memperhitungkan ketidakpastian dan peluang.

1. Ciri-ciri

  • Melibatkan generalisasi dari sempel ke populasi
  • Menggunakan konsep peluang dan distribusi probabilitas
  • Melibatkan penguji hipotesis
  • Memiliki tingkat ketidakpastian (biasanya dinyatakan dengan tingkat kepercayaan atau p-value)

2. Teknik yang Digunakan

  • Estimasi Parameter: Interval kepercayaan (confidence interval)
  • Pengujian Hipotesis: Uji t, Uji z, Uji chi-square, Uji ANOVA
  • Model Statistika: Regresi linier, Regresi logistik, Analisis varians
  • Prediksi: Prediksi tren masa depan berdasarkan model.

3. Contoh Kasus

Sebuah toko retail memiliki tiga Produk unggulan, yaitu Produk A, Produk B, dan Produk C. Selama empat minggu terakhir, toko tersebut mencatat penjualan mingguan untuk masing-masing produk. Data penjualan dirangkum sebagai berikut:

Penjualan Mingguan Berdasarkan Produk
Minggu Produk A (unit) Produk B (unit) Produk C (unit)
Minggu 1 200 150 300
Minggu 2 250 200 320
Minggu 3 300 220 400
Minggu 4 350 250 450

4. Pengambilan Keputusan

Keputusan diambil berdasarkan hasil analisis yang digeneralisasi ke populasi, dengan mempertimbangkan kemungkinan kesalahan. Metode ini memungkinkan pembuatan keputusan strategis berdasarkan data parsial.

Kesimpulan Soal 1

  • Statistika Deskriptif digunakan untuk menganalisis dan menggambarkan data yang ada, memberikan informasi tentang karakteristik data tersebut tanpa melakukan generalisasi lebih lanjut.
  • Statistika Inferensial digunakan untuk membuat kesimpulan atau prediksi tentang populasi berdasarkan sampel dan untuk menguji hipotesis atau estimasi parameter populasi.

Soal 2. Apa Perbedaan dari Alpa dengan Beta yang Digunakan di Uji Hipotesis

Definisi Hipotetis -> Uji Hipotesis adalah prosedur statistika yang digunakan untuk menguji apakah sebuah klaim atau dugaan mengenai paraameter populasinya (misalnya, rata-rata, proposi, dll). Benar atau salah berdasarkan data sampel. Uji ini melibatkan dua hipotesis utama:

  • Hipotesis Nol \(H_0\): Ini adalah kalim yang kita coba uji, dan sering kali menggambarkan “tidak ada perbedaan” atau “tidak ada efek”.
  • Hipotesis Alternatif \(H_1\): Ini adalah klaim yang ingin kita buktikan, yang sering kali menggambarkan “ada perbedaan” atau “ada efek”.

Setelah mengumpulkan data dan melakukan perhitungan, kita membuat keputusan apakah akan menokal \(H_0\) atau tidak, berdasarkan hasil uji statistika yang kita lakukan.

A. Alpha \((\alpha)\) Tingkat Signifikan

Alpha \((\alpha)\) adalah tingkat signifikan dari uji hipotesis yang digunakan untuk menentukan batas kritis dalam pengambilan keputusan. Secara statistik, \(\alpha\) mengidenfikasikan probabilitas untuk membuat kesalahn tipe I.

1. Kesalahan Tipe I

Kesalahan tipe I terjadi ketika kita menolak hipotesis nol \((H_0)\) padahal sebenarnya hipotesis nol itu benar. Ini adalah kesalahan yang salah menolak hipotesis yang benar.

COntohnya:

  • Misalkan kita menguji apakah obat baru efektif dari pada obat lama. Jika kita menolak \(H_0\) yang menyatakan “obat baru tidak lebih efektif” padahal sbenarnya oabt baru tidak lebih efektif, maka itu adalah kesalahan tipe I.

Nilai \(\alpha\) menentukan seberapa besar kemingkinan kita melakukan kesalahan tipe I. Misalnya, jika \(\alpha\) = \(0,05\), maka kita menerima tingkat kesalahan tipe I sebesar \(5\)%. Artinya, ada \(%\)% kemungkinan kita menolak \(H_0\) yang benar.

2. Interpretasi Alpha \((\alpha)\):

  • \(\alpha\) = \(0,01\): Menunjukan bahwa kita hanya menerima \(1\)% kemungkinan kesalahan tipe I.
  • \(\alpha\) = \(0,05\): Menunjukkan bahwa kita menerima \(5\)% kemungkinan kesalahan tioe I.
  • \(\alpha\) = \(0,10\): Menunjukkan bahwa kita menerima \(10\)% kemungkinan kesalahn tipe I.

Catatan: Nilai \(\alpha\) yang kecil menunjukkan pengujian yang lebih konservatif, di mana kita hanya akan menolak \(H_0\) jika bukti yang ada sangat kuat.

B. Beta \((\beta)\) Probabilitas Kesalahan Tipe II

Beta \((\beta)\) mengacu pada probabilitas terjadinya kesalahan tipe II. Kesalahan tipe II terjadi ketika kita gagal menolak hipotesis nol \((H_0)\) padahal sebenarnya hipotesis nol itu salah. Ini adalah kesalahan yang gagal mendeteksi perbedaan yang benar-benar ada.

1. Kesalahan Tipe II:

Kesalahan tipe II terjadi jika kita gagal menemukan bukti yang cukup untuk menolak \(H_0\) meskipun ada perbedaan atau efek yang nyata dalam populasi.

Contoh:

  • Misalkan kita menguji apakah suatu obat lebih efektif daripada placebo. Jika kita gagal menolak H₀ yang menyatakan “obat tidak lebih efektif” padahal obat tersebut sebenarnya lebih efektif, maka itu adalah kesalahan tipe II.

2. Interpretasi Beta \((\beta)\):

Jika \(\beta\) = \(0,20\), maka ini berarti kita memiliki \(20\) kemungkinan untuk gagal menolak \(H_0\) jika \(H_0\) sebenarnya salah (atau ada efek yang nyata). Sebaliknya,\(1 - \beta\) isebut sebagai power dari uji hipotesis, yang menunjukkan probabilitas untuk benar-benar mendeteksi efek yang ada.

3. Power dari Uji Hipotesis

Power dari uji hipotesis adalah kebalikan dari \(\beta (1 - \beta)\). Power yang menggambarkan kemampuan uji untuk mendeteksi perbedaan yang benar-benar ada (yaitu, mendeteksi efek nyata jika itu ada). Sebuah uji yang memiliki power tinggi lebih mammpu mendeteksi efek yang nyata dalam populasi.

Contoh:

  • Jika power = \(0,80\), maka \(80\)% kemungkinan untuk benar mendeteksi perbedaan yang ada, jika benar ada perbedaan dalam populasi.

Hubungan antara Alpha, Beta, dan Power:

  • Power = \(1 - \beta\): Semakin tinggi ppower, semakin besar peluang kita untuk menemukan efek yang ada.
  • \(\alpha\) dan \(\beta\) memiliki hubungan trade-off:
    • Jika kita menurunkan \(\alpha\) (misalnya darri \(0,05\) menjadi \(0,01\)), kita menjadi lebih konservatif dalam menolak \(H_0\). Ini dapat menyebabkan \(\beta\) meningkat (kesalahan tipe II meningkat).
    • Jika kita menurunkan \(\beta\) (misalnya, meningkatkan ukuran sampel atau meningkatkan kekuatan uji), maka \(\alpha\) cenderung meningkat.

4. Contoh Perhitungan

Misalnya, kita ingin melakukan uji hipotesis untuk membandingkan rata-rata dua kelompok menggunakan uji t. Kita tahu bahwa ukuran sampel \((n)\) adalah \(30\), rata-rata yang diharapkan \((H_1)\) adalah \(52\), dan rata-rata yang diasumsikan untuk \(H_0\) adalah \(50\) . Deviasi standar populsai adalah \(10\).

Kesimpulan Soal 2

  • Alpha \((\alpha)\) mengukur probabilitas kesalahan tipe I, yaitu kesalahan dalam menolak \(H_0\) yang benar.
  • Beta \((\beta)\) mengukur probabilitas kesalahan tipe II, yaitu kesalahan dalam gagal menolak \(H_0\) yang salah.
  • Power adalah kemampuan uji untuk mendeteksi efek yang ada (kebalikan dari \(\beta\)).
  • Trade-off antara \(\alpha\) dan \(\beta\) menunjukkan bahwa memilih tingkat signifikan yang lebih rendah dapat meningkatkan kemungkinan kesalahan tipe II \((\beta)\), sementara meningkatkan ukuran sampel atau power dapat mengurangi risiko kesalahan tipe II dan meningkatkan kekuatan deteksi.

Dengan pemahaman ini, dapat merancang uji hipotesis dengan lebih baik dan memahami bagaimana trade-off antara \(\alpha\) dan \(\beta\) mempengaruhi hasil uji dan interpretasinya.

Soal 3. Kapan kita menggunakan Pesimis dan Optimis

Dalam Statistika, pendekatan pesimis dan optimis digunakan dalam analisis keputusan atau inferensi statistik

A. Pendekatan Pesimis dalam Statistia

Pendekatan pesimis dalam statistika sering digunakan saat fokusnya adalah mengantisipasi risiko terburuk. Contohnya:

Aplikasi:

1. Analisis Risisko

Dalam Statistika inferensial, pendekatan pesimis digunakan untuk menentukan batas bawah suatu estimasi (lowwer bound). Misalnya:

  • Dalam interval kepercayaan, pendekatan pesimis lebih memperhatikan batas bawah untuk memastikan hasil tidak lebih buruk dari itu.
  • Dalam analisis risiko keuangan, digunakan untuk menghitung Value at Risk (VaR), yaitu kerugian maksimum pada tingkat kepercayaan tertentu.

2. Hipotesis Nol (Null Hypothesiss)

Saat menguji hipotesis, pendekatan pesimis bisanya mendukung hipotesis nol \((H_0)\), karena ini adalah asumsi dasar bahwa ** tidak ada efek atau hubungan**. Penolakan \(H_0\) hanya dilakukan jika ada cukup bukti kuat, untuk menghindari kesalahan tipe I (false positive).

3. Keputusan Konservatif

Pendekatan ini diambil ketika seorang analis lebih memilih meminimalkan kesalahan daripada mengambil risiko, misalnya saat merancang sistem yang harus beroperasi pada kondisi terburuk.

Contoh:

Dalam uji t, jika kita ingin menetapkan batas toleransi rendah untuk mendeteksi perbedaan rata-rata, kita menggunakan pendekatan konservatif untuk memastikan tidak melewatkan risiko penting.

B. Pendekatan Optimis dalam Statistika

Pendekatan optimis sering digunakan saat fokusnya adalah memaksimalkan peluang atau mengasumsikan skenario terbaik.

Aplikasi:

1. Estimasi Maksimum (Upper Bound)

Dalam interval kepercayaan atau analisis risiko, pendekatan optimis lebih memperhatikan batas atas (upper bound) untuk melihat potensi terbaik dari suatu estimasi.

2. Perancanaan Berdasarkan Tren Positif

Dalam analisis data tren, pendekatan optimis mengasumsikan bahwa pola data saat ini (seperti pertumbuhan atau pengurangan) akan berlanjut ke masa depan.

3. Hipotesis Alternatif (Alternative Hypothesis)

Ketika seorang analis yakin bahwa ada hubungan yang signifikan, pendekatan optimis mendukung hipotesis alternatif (H₁), yang menyatakan bahwa ada efek atau hubungan.

Contoh:

Dalam analisis regresi, pendekatan optimis mungkin mengasumsikan bahwa hubungan variabel independen dan dependen akan terus linier meskipun ada sedikit deviasi pada data historis.

C. Pendekatan Kombinasi dalam Statistika

Dalam banyak kasus, pendekatan pesimis dan optimis digunakan bersama untuk mendapatkan analisis realistis, misalnya dalam:

1. Analisis Skenario (Scenario Analysis)

Menggunakan nilai pesimis, optimis, dan realistis untuk memproyeksikan berbagai kemungkinan hasil.

  • Contoh: Dalam peramalan penjualan, pendekatan optimis menggunakan estimasi pertumbuhan tertinggi, sementara pendekatan pesimis menggunakan pertumbuhan terendah.

2. Interval Predikai

Pendekatan ini mencakup kedua sisi (pesimis dan optimis), misalnya interval kepercayaan \(95\)% yang menunjukkan batas bawah (pesimis) dan batas atas (optimis) estimasi.

3. Uji Statistik dengan Nilai Kritikal

Nilai kritis (critical value) digunakan untuk mendefinisikan batas optimis (diterima) dan pesimis (ditolak) pada uji hipotesis.

Kesimpulan Soal 3:

  • Gunakan pendekatan pesimis saat ingin meminimalkan risiko kesalahan atau mempersiapkan skenario terburuk.
  • Gunakan pendekatan optimis saat fokus pada peluang terbaik atau mengeksplorasi skenario positif.
  • Kombinasikan keduanya untuk mendapatkan gambaran yang seimbang, misalnya melalui analisis skenario atau interval prediksi.

Refrensi:

  • DSciencelabs. (n.d.) Pengantar Statistika untuk Sains Data. Bookdown. Retrieved from Klik disini
  • Gracia Carolina 2022 Statistika Deskriptif. Bookdown. Retrieved from Klik disini
  • Arif Mukti Ramadhan statistika Inferensial. Bookdown. Retrieved from Klik disini
  • Joko Ade Nursyiono Statistika: Mengenal Alpha Beta. Bookdown. Retrieved from Klik disini
LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiBLZSAxNCBTdGF0aXN0aWthIERhc2FyIg0KDQphdXRob3I6IA0KICAgICAtICJOYWJpbGEgQW5nZ2l0YSBQdXRyaSINCiAgICAgDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KDQotLS0NCg0KPGltZyBzcmM9ImltZy9wcm9maWxlLmpwZyIgYWx0PSJwIiBpZD0ibG9nby11dGFtYSIgc3R5bGU9IndpZHRoOjMwMDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiLz4NCg0KDQojICoqU29hbCAxLiBBcGEgUGVyYmVkYWFuIFBlbmdhbWJpbGFuIEtlcHV0dXNhbiBTdGF0aXN0aWthIERlc2tyaXB0aWYgZGFuIFN0YXRpc3Rpa2EgSW5mZXJlbnNpYWwqKg0KKipEZWZpbnNpKiogLT4gU3RhdGlzdGlrYSBkZXNrcmlwdGlmIGRhbiBTdGF0aXN0aWthIGluZmVyZW5zaWFsIGFkYWxhaCBkdWEgY2FiYW5nIHV0YW1hIHN0YXRpc3Rpa2EgeWFuZyBkaWd1bmFhbiB1bnR1ayBtZW5nYW5hbGlzaXMgZGF0YSwgdGV0YXBpIGtlZHVhbnlhIG1lbWlsaWtpIHR1anVhbiBkYW4gcGVuZGVrYXRhbiB5YW5nIGJlcmJlZGEuDQoNCiMgKipBLiBTdGF0aXN0aWthIERlc2tyaXB0aWYqKg0KU3RhdGlzdGlrYSBEZXNrcmlwdGlmIGRpZ3VuYWthbiB1bnR1ayAqKm1lbmRlc2tyaXBzaWthbioqIGF0YXUgKiptZXJhbmdrdW0qKiBkYXRhIHlhbmcgYWRhLiBUdWp1YW5ueWEgYWRhbGFoIG1lbWJlcmlrYW4gZ2FtYmFyYW4gbWVuZ2VuYWkgZGF0YSB5YW5nIHN1ZGFoIGRpa3VtcHVsa2FuIHRhbnBhIG1lbWJ1YXQgZ2VuZXJhbGlzYXNpIGF0YXUgaW5mZXJlbnNpIGtlIHBvcHVsYXNpIHlhbmcgbGViaWggYmVzYXIuDQoNCiMjICoqMS4gQ2lyaS1jaXJpKioNCg0KLSBCZXJmb2t1cyBwYWRhICoqZGVza3JpcHNpIGRhdGFzZXQqKiAodGFucGEgZ2VuZXJhbGlzYXNpKS4NCi0gVGlkYWsgYWRhIHByb3NlcyBwZW5ndWppYW4gaGlwb3Rlc2lzLg0KLSBIYW55YSBiZXJsYWt1IHVudHVrIGRhdGEgeWFuZyBzZWRhbmcgZGlhbmFsaXNpcy4NCi0gVGlkYWsgbWVsaWJhdGthbiBrZXRpZGFrcGFzdGlhbiBhdGF1IHBlbHVhbmcuDQoNCiMjICoqMi4gVGVrbmlrIHlhbmcgRGlndW5ha2FuKioNCg0KLSAqKlVrdXJhbiBQZW11c2F0YW4qKjogTWVhbiwgTWVkaWFuLCBkYW4gTW9kdXMuDQotICoqVWt1cmFuIFBlbnllYmFyYW4qKjogVmFyaWFucywgU3RhbmRhciBEZXZpYXNpLGRhbiBSZW50YW5nIChSYW5nZSkuDQotICoqVmlzdWFsaXNhc2kgRGF0YSoqOiBHcmFmaWsgYmF0YW5nLCBEaWFncmFtIGxpbmdrYXJhbiwgSGlzdG9ncmFtLCBkYW4gQm94cGxvdC4NCi0gKipEaXN0cmlidXNpIEZyZWt1ZW5zaSoqOiBUYWJlbCBmcmVrdWVuc2kgYXRhdSBEaWFncmFtIGRpc3RyaWJ1c2kuDQoNCiMjICoqMy4gQ29udG9oIEthc3VzKioNClNlb3JhbmcgTWFuYWdlciBwZW1hc2FyYW4gZGkgc2VidWFoIHBlcnVzYWhhYW4gc2VkYW5nIG1lbGFrdWthbiBhbmFsaXNpcyBwZW5qdWFsYW4gdW50dWsgYnVsYW4gaW5pLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHBlbmp1YWxhbiBiZXJkYXNhcmthbiBrYXRlb3JpIHByb2R1ayB5YW5nIGJlcmhhc2lsIGRpa3VtcHVsa2FuOg0KDQoqKmEuIEthdGVnb3JpIFByb2R1ayBUZXJ0aW5nZ2kgZGFuIFRlcmVuZGFoKioNCg0KLSAqKk1ha2FuYW4qKiAkNTAwJHVuaXQuDQotICoqRWxla3Ryb25payoqICQxMjAkdW5pdC4NCg0KKipiLiBSYXRhLXJhdGEgUGVuanVhbGFuKioNClxbDQpcdGV4dHtSYXRhLXJhdGEgcGVuanVhbGFufSA9IFxmcmFjezEyMCArIDMwMCArIDE1MCArIDUwMCArIDIwMH17NX0gPSAyNTQgXHRleHR7IHVuaXR9Lg0KXF0NCg0KKipjLiBVcnV0a2FuIGthdGVnb3JpIFByb2R1ayBiZXJkYXNha2FuIFBlbmp1YWxhbioqDQoNCi0gTWFrYW5hbiAkNTAwJHVuaXQuDQotIFBha2FpYW4gJDMwMCQgdW5pdC4NCi0gQWxhdCBPbGFocmFnYSAkMzAwJCB1bml0Lg0KLSBQZXJhbGF0YW4gUnVtYWggVGFuZ2dhICQxNTAkdW5pdC4NCi0gRWxla3Ryb25payAkMTIwJHVuaXQuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW1idWF0IGRhdGEgZnJhbWUgZGFyaSBrYXRlZ29yaSBwcm9kdWsgZGFuIGp1bWxhaCBwZW5qdWFsYW4NCmthdGVnb3JpIDwtIGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJQZXJhbGF0YW4gUnVtYWggVGFuZ2dhIiwgIk1ha2FuYW4iLCAiQWxhdCBPbGFocmFnYSIpDQpwZW5qdWFsYW4gPC0gYygxMjAsIDMwMCwgMTUwLCA1MDAsIDIwMCkNCg0KIyBNZW1idWF0IGRhdGFmcmFtZQ0KZGF0YV9wZW5qdWFsYW4gPC0gZGF0YS5mcmFtZShLYXRlZ29yaSA9IGthdGVnb3JpLCBQZW5qdWFsYW4gPSBwZW5qdWFsYW4pDQoNCiMgTWVuYW1waWxrYW4gdGFiZWwgeWFuZyBsZWJpaCBqZWxhcw0KbGlicmFyeShrbml0cikNCmthYmxlKGRhdGFfcGVuanVhbGFuLCBmb3JtYXQgPSAibWFya2Rvd24iLCBjb2wubmFtZXMgPSBjKCJLYXRlZ29yaSBQcm9kdWsiLCAiSnVtbGFoIFBlbmp1YWxhbiIpKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeSB5YW5nIGRpcGVybHVrYW4NCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIHBlciBrYXRlZ29yaSBwcm9kdWsNCmthdGVnb3JpIDwtIGMoIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJQZXJhbGF0YW4gUnVtYWggVGFuZ2dhIiwgIk1ha2FuYW4iLCAiQWxhdCBPbGFocmFnYSIpDQpwZW5qdWFsYW4gPC0gYygxMjAsIDMwMCwgMTUwLCA1MDAsIDIwMCkNCg0KIyBNZW1idWF0IGRhdGFmcmFtZSBkYXJpIGRhdGENCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoS2F0ZWdvcmkgPSBrYXRlZ29yaSwgUGVuanVhbGFuID0gcGVuanVhbGFuKQ0KDQojIE1lbWJ1YXQgZGlhZ3JhbSBiYXRhbmcgM0QNCmZpZyA8LSBwbG90X2x5KGRhdGEgPSBkYXRhX3Blbmp1YWxhbiwgDQogICAgICAgICAgICAgICB4ID0gfkthdGVnb3JpLCANCiAgICAgICAgICAgICAgIHkgPSB+UGVuanVhbGFuLCANCiAgICAgICAgICAgICAgIHR5cGUgPSAnYmFyJywgDQogICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2JsdWUnKSkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJKdW1sYWggUGVuanVhbGFuIFBlciBLYXRlZ29yaSBQcm9kdWsgKDNEKSIsDQogICAgICAgICBzY2VuZSA9IGxpc3QoeGF4aXMgPSBsaXN0KHRpdGxlID0gJ0thdGVnb3JpIFByb2R1aycpLA0KICAgICAgICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICdKdW1sYWggUGVuanVhbGFuJyksDQogICAgICAgICAgICAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gJ1Blbmp1YWxhbicpKSwNCiAgICAgICAgIGJhcm1vZGUgPSAnc3RhY2snKQ0KDQojIE1lbmFtcGlsa2FuIGRpYWdyYW0NCmZpZw0KYGBgDQojIyAqKjQuIFBlbmdhbWJpbGFuIEtlcHV0dXNhbioqDQpLZXB1dHVzYW4gZGlhbWJpbCBiZXJkYXNhcmthbiAqKmdhbWJhcmFuIHlhbmcgamVsYXMgdGVudGFuZyBkYXRhKiosIHNlcGVydGkgbWVuZ2lkZW50aWZpa2FzaSB0cmVuIGF0YXUgcG9sYSBkYXJpIGRhdGFzZXQgeWFuZyBhZGEuIE5hbXVuLCBrZXB1dHVzYW4gaW5pIGhhbnlhIGJlcmxha3UgdW51dGsgKipLZWxvbXBvayBkYXRhIHlhbmcgZGlhbmFsaXNpcyoqLg0KDQoNCiMgKipCLiBTdGF0aXN0aWthIEluZmVyZW5zaWFsKioNClN0YXRpc3Rpa2EgaW5mZXJlbnNpYWwgYWRhbGFoIG1ldG9kZSB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1idWF0ICoqa2VzaW1wdWxhbioqIGF0YXUgKipwcmVkaWtzaSoqIHRlbnRhbmcgc3VhdHUgcG9wdWxhc2kgYmVyZGFzYXJrYW4gKipzYW1wZWwgZGF0YSoqLiBUdWp1YW5ueWEgYWRhbGFoIHVudHVrIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcG9wdWxhc2kgZGVuZ2FuIG1lbXBlcmhpdHVuZ2thbiBrZXRpZGFrcGFzdGlhbiBkYW4gcGVsdWFuZy4NCg0KIyMgKioxLiBDaXJpLWNpcmkqKg0KDQotIE1lbGliYXRrYW4gKipnZW5lcmFsaXNhc2kgZGFyaSBzZW1wZWwga2UgcG9wdWxhc2kqKg0KLSBNZW5nZ3VuYWthbiBrb25zZXAgcGVsdWFuZyBkYW4gZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMNCi0gTWVsaWJhdGthbiBwZW5ndWppIGhpcG90ZXNpcw0KLSBNZW1pbGlraSB0aW5na2F0IGtldGlkYWtwYXN0aWFuIChiaWFzYW55YSBkaW55YXRha2FuIGRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIGF0YXUgcC12YWx1ZSkNCg0KIyMgKioyLiBUZWtuaWsgeWFuZyBEaWd1bmFrYW4qKg0KDQotICoqRXN0aW1hc2kgUGFyYW1ldGVyKio6IEludGVydmFsIGtlcGVyY2F5YWFuIChjb25maWRlbmNlIGludGVydmFsKQ0KLSAqKlBlbmd1amlhbiBIaXBvdGVzaXMqKjogVWppIHQsIFVqaSB6LCBVamkgY2hpLXNxdWFyZSwgVWppIEFOT1ZBDQotICoqTW9kZWwgU3RhdGlzdGlrYSoqOiBSZWdyZXNpIGxpbmllciwgUmVncmVzaSBsb2dpc3RpaywgQW5hbGlzaXMgdmFyaWFucw0KLSAqKlByZWRpa3NpKio6IFByZWRpa3NpIHRyZW4gbWFzYSBkZXBhbiBiZXJkYXNhcmthbiBtb2RlbC4NCg0KIyMgKiozLiBDb250b2ggS2FzdXMqKg0KU2VidWFoIHRva28gcmV0YWlsIG1lbWlsaWtpIHRpZ2EgUHJvZHVrIHVuZ2d1bGFuLCB5YWl0dSAqKlByb2R1ayBBLCBQcm9kdWsgQiwqKiBkYW4gKipQcm9kdWsgQyoqLiBTZWxhbWEgZW1wYXQgbWluZ2d1IHRlcmFraGlyLCB0b2tvIHRlcnNlYnV0IG1lbmNhdGF0IHBlbmp1YWxhbiBtaW5nZ3VhbiB1bnR1ayBtYXNpbmctbWFzaW5nIHByb2R1ay4gRGF0YSBwZW5qdWFsYW4gZGlyYW5na3VtIHNlYmFnYWkgYmVyaWt1dDoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBJbnN0YWxhc2kgcGFrZXQga25pdHIgKGppa2EgYmVsdW0gYWRhKQ0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIsIGRlcGVuZGVuY2llcyA9IFRSVUUpDQoNCiMgRGF0YSBwZW5qdWFsYW4gbWluZ2d1YW4NCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoDQogIE1pbmdndSA9IGMoIk1pbmdndSAxIiwgIk1pbmdndSAyIiwgIk1pbmdndSAzIiwgIk1pbmdndSA0IiksDQogIFByb2R1a19BID0gYygyMDAsIDI1MCwgMzAwLCAzNTApLA0KICBQcm9kdWtfQiA9IGMoMTUwLCAyMDAsIDIyMCwgMjUwKSwNCiAgUHJvZHVrX0MgPSBjKDMwMCwgMzIwLCA0MDAsIDQ1MCkNCikNCg0KIyBNZW5hbXBpbGthbiB0YWJlbCByYXBpDQprbml0cjo6a2FibGUoDQogIGRhdGFfcGVuanVhbGFuLCANCiAgY29sLm5hbWVzID0gYygiTWluZ2d1IiwgIlByb2R1ayBBICh1bml0KSIsICJQcm9kdWsgQiAodW5pdCkiLCAiUHJvZHVrIEMgKHVuaXQpIiksDQogIGNhcHRpb24gPSAiUGVuanVhbGFuIE1pbmdndWFuIEJlcmRhc2Fya2FuIFByb2R1ayINCikNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkgeWFuZyBkaXBlcmx1a2FuDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkodGlkeXIpDQoNCiMgRGF0YSBwZW5qdWFsYW4gbWluZ2d1YW4NCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoDQogIE1pbmdndSA9IGMoIk1pbmdndSAxIiwgIk1pbmdndSAyIiwgIk1pbmdndSAzIiwgIk1pbmdndSA0IiksDQogIFByb2R1a19BID0gYygyMDAsIDI1MCwgMzAwLCAzNTApLA0KICBQcm9kdWtfQiA9IGMoMTUwLCAyMDAsIDIyMCwgMjUwKSwNCiAgUHJvZHVrX0MgPSBjKDMwMCwgMzIwLCA0MDAsIDQ1MCkNCikNCg0KIyBNZW5ndWJhaCBkYXRhIGtlIGZvcm1hdCBwYW5qYW5nIChsb25nIGZvcm1hdCkNCmRhdGFfbG9uZyA8LSBwaXZvdF9sb25nZXIoZGF0YV9wZW5qdWFsYW4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0gYyhQcm9kdWtfQSwgUHJvZHVrX0IsIFByb2R1a19DKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiUHJvZHVrIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gIlBlbmp1YWxhbiIpDQoNCiMgTWVuYW1iYWhrYW4ga29sb20gdW50dWsgSUQgdW5payBkaSBzZXRpYXAgdGl0aWsgKHVudHVrIHN1bWJ1IFopDQpkYXRhX2xvbmckTWluZ2d1X251bSA8LSBhcy5udW1lcmljKGZhY3RvcihkYXRhX2xvbmckTWluZ2d1KSkgICMgTWVueWltcGFuIHVydXRhbiBtaW5nZ3UNCmRhdGFfbG9uZyRQcm9kdWtfbnVtIDwtIGFzLm51bWVyaWMoZmFjdG9yKGRhdGFfbG9uZyRQcm9kdWspKSAgIyBNZW55aW1wYW4gdXJ1dGFuIHByb2R1aw0KDQojIE1lbWJ1YXQgZGlhZ3JhbSBiYXRhbmcgM0QgZGVuZ2FuIHNjYXR0ZXIzZA0KZmlnIDwtIHBsb3RfbHkoZGF0YV9sb25nLCANCiAgICAgICAgICAgICAgIHggPSB+TWluZ2d1X251bSwgDQogICAgICAgICAgICAgICB5ID0gflByb2R1a19udW0sIA0KICAgICAgICAgICAgICAgeiA9IH5QZW5qdWFsYW4sIA0KICAgICAgICAgICAgICAgdHlwZSA9ICJzY2F0dGVyM2QiLCANCiAgICAgICAgICAgICAgIG1vZGUgPSAibWFya2VycyIsIA0KICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChzaXplID0gOCwgY29sb3IgPSB+UHJvZHVrX251bSwgY29sb3JzY2FsZSA9ICdWaXJpZGlzJyksDQogICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCJQcm9kdWs6ICIsIFByb2R1aywgIjxicj5QZW5qdWFsYW46ICIsIFBlbmp1YWxhbikpIA0KDQojIE1lbmFtYmFoa2FuIGxhYmVsIGRhbiBqdWR1bA0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KA0KICB0aXRsZSA9ICJQZW5qdWFsYW4gTWluZ2d1YW4gQmVyZGFzYXJrYW4gUHJvZHVrICgzRCkiLA0KICBzY2VuZSA9IGxpc3QoDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIk1pbmdndSIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQcm9kdWsiKSwNCiAgICB6YXhpcyA9IGxpc3QodGl0bGUgPSAiSnVtbGFoIFBlbmp1YWxhbiAodW5pdCkiKQ0KICApDQopDQoNCiMgTWVuYW1waWxrYW4gZGlhZ3JhbSAzRA0KZmlnDQpgYGANCiMjICoqNC4gUGVuZ2FtYmlsYW4gS2VwdXR1c2FuKioNCktlcHV0dXNhbiBkaWFtYmlsIGJlcmRhc2Fya2FuICoqaGFzaWwgYW5hbGlzaXMgeWFuZyBkaWdlbmVyYWxpc2FzaSBrZSBwb3B1bGFzaSoqLCBkZW5nYW4gbWVtcGVydGltYmFuZ2thbiBrZW11bmdraW5hbiBrZXNhbGFoYW4uIE1ldG9kZSBpbmkgbWVtdW5na2lua2FuIHBlbWJ1YXRhbiBrZXB1dHVzYW4gc3RyYXRlZ2lzIGJlcmRhc2Fya2FuIGRhdGEgcGFyc2lhbC4NCg0KIyAqKktlc2ltcHVsYW4gU29hbCAxKioNCi0gKipTdGF0aXN0aWthIERlc2tyaXB0aWYqKiBkaWd1bmFrYW4gdW50dWsgKiptZW5nYW5hbGlzaXMgZGFuIG1lbmdnYW1iYXJrYW4gZGF0YSB5YW5nIGFkYSoqLCBtZW1iZXJpa2FuIGluZm9ybWFzaSB0ZW50YW5nIGthcmFrdGVyaXN0aWsgZGF0YSB0ZXJzZWJ1dCB0YW5wYSBtZWxha3VrYW4gZ2VuZXJhbGlzYXNpIGxlYmloIGxhbmp1dC4NCi0gKipTdGF0aXN0aWthIEluZmVyZW5zaWFsKiogZGlndW5ha2FuIHVudHVrICoqbWVtYnVhdCBrZXNpbXB1bGFuIGF0YXUgcHJlZGlrc2kgdGVudGFuZyBwb3B1bGFzaSBiZXJkYXNhcmthbiBzYW1wZWwqKiBkYW4gdW50dWsgbWVuZ3VqaSBoaXBvdGVzaXMgYXRhdSBlc3RpbWFzaSBwYXJhbWV0ZXIgcG9wdWxhc2kuDQoNCiMgKipTb2FsIDIuIEFwYSBQZXJiZWRhYW4gZGFyaSBBbHBhIGRlbmdhbiBCZXRhIHlhbmcgRGlndW5ha2FuIGRpIFVqaSBIaXBvdGVzaXMqKg0KKipEZWZpbmlzaSBIaXBvdGV0aXMqKiAtPiBVamkgSGlwb3Rlc2lzIGFkYWxhaCBwcm9zZWR1ciBzdGF0aXN0aWthIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmd1amkgYXBha2FoIHNlYnVhaCBrbGFpbSBhdGF1IGR1Z2FhbiBtZW5nZW5haSBwYXJhYW1ldGVyIHBvcHVsYXNpbnlhIChtaXNhbG55YSwgcmF0YS1yYXRhLCBwcm9wb3NpLCBkbGwpLiBCZW5hciBhdGF1IHNhbGFoIGJlcmRhc2Fya2FuIGRhdGEgc2FtcGVsLiBVamkgaW5pIG1lbGliYXRrYW4gZHVhIGhpcG90ZXNpcyB1dGFtYToNCg0KLSAqKkhpcG90ZXNpcyBOb2wqKiAkSF8wJDogSW5pIGFkYWxhaCBrYWxpbSB5YW5nIGtpdGEgY29iYSB1amksIGRhbiBzZXJpbmcga2FsaSBtZW5nZ2FtYmFya2FuICJ0aWRhayBhZGEgcGVyYmVkYWFuIiBhdGF1ICJ0aWRhayBhZGEgZWZlayIuDQotICoqSGlwb3Rlc2lzIEFsdGVybmF0aWYqKiAkSF8xJDogSW5pIGFkYWxhaCBrbGFpbSB5YW5nIGluZ2luIGtpdGEgYnVrdGlrYW4sIHlhbmcgc2VyaW5nIGthbGkgbWVuZ2dhbWJhcmthbiAiYWRhIHBlcmJlZGFhbiIgYXRhdSAiYWRhIGVmZWsiLg0KDQpTZXRlbGFoIG1lbmd1bXB1bGthbiBkYXRhIGRhbiBtZWxha3VrYW4gcGVyaGl0dW5nYW4sIGtpdGEgbWVtYnVhdCBrZXB1dHVzYW4gYXBha2FoIGFrYW4gbWVub2thbCAkSF8wJCBhdGF1IHRpZGFrLCBiZXJkYXNhcmthbiBoYXNpbCB1amkgc3RhdGlzdGlrYSB5YW5nIGtpdGEgbGFrdWthbi4NCg0KIyAqKkEuIEFscGhhKiogJChcYWxwaGEpJCAqKlRpbmdrYXQgU2lnbmlmaWthbioqDQoqKkFscGhhKiogJChcYWxwaGEpJCBhZGFsYWggdGluZ2thdCBzaWduaWZpa2FuIGRhcmkgdWppIGhpcG90ZXNpcyB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5lbnR1a2FuIGJhdGFzIGtyaXRpcyBkYWxhbSBwZW5nYW1iaWxhbiBrZXB1dHVzYW4uIFNlY2FyYSBzdGF0aXN0aWssICRcYWxwaGEkIG1lbmdpZGVuZmlrYXNpa2FuIHByb2JhYmlsaXRhcyB1bnR1ayBtZW1idWF0ICoqa2VzYWxhaG4gdGlwZSBJKiouDQoNCiMjICoqMS4gS2VzYWxhaGFuIFRpcGUgSSoqDQpLZXNhbGFoYW4gdGlwZSBJIHRlcmphZGkga2V0aWthIGtpdGEgbWVub2xhayBoaXBvdGVzaXMgbm9sICQoSF8wKSQgcGFkYWhhbCBzZWJlbmFybnlhIGhpcG90ZXNpcyBub2wgaXR1IGJlbmFyLiBJbmkgYWRhbGFoICoqa2VzYWxhaGFuIHlhbmcgc2FsYWggbWVub2xhayBoaXBvdGVzaXMgeWFuZyBiZW5hcioqLg0KDQoqKkNPbnRvaG55YSoqOg0KDQotIE1pc2Fsa2FuIGtpdGEgbWVuZ3VqaSBhcGFrYWggb2JhdCBiYXJ1IGVmZWt0aWYgZGFyaSBwYWRhIG9iYXQgbGFtYS4gSmlrYSBraXRhIG1lbm9sYWsgJEhfMCQgeWFuZyBtZW55YXRha2FuICJvYmF0IGJhcnUgdGlkYWsgbGViaWggZWZla3RpZiIgcGFkYWhhbCBzYmVuYXJueWEgb2FidCBiYXJ1IHRpZGFrIGxlYmloIGVmZWt0aWYsIG1ha2EgaXR1IGFkYWxhaCBrZXNhbGFoYW4gdGlwZSBJLg0KDQpOaWxhaSAkXGFscGhhJCBtZW5lbnR1a2FuIHNlYmVyYXBhIGJlc2FyIGtlbWluZ2tpbmFuIGtpdGEgbWVsYWt1a2FuIGtlc2FsYWhhbiB0aXBlIEkuIE1pc2FsbnlhLCBqaWthICRcYWxwaGEkID0gJDAsMDUkLCBtYWthIGtpdGEgbWVuZXJpbWEgdGluZ2thdCBrZXNhbGFoYW4gdGlwZSBJIHNlYmVzYXIgJDUkJS4gQXJ0aW55YSwgYWRhICQlJCUga2VtdW5na2luYW4ga2l0YSBtZW5vbGFrICRIXzAkIHlhbmcgYmVuYXIuDQoNCiMjICoqMi4gSW50ZXJwcmV0YXNpIEFscGhhKiogJChcYWxwaGEpJDoNCg0KLSAkXGFscGhhJCA9ICQwLDAxJDogTWVudW5qdWthbiBiYWh3YSBraXRhIGhhbnlhIG1lbmVyaW1hICQxJCUga2VtdW5na2luYW4ga2VzYWxhaGFuIHRpcGUgSS4NCi0gJFxhbHBoYSQgPSAkMCwwNSQ6IE1lbnVuanVra2FuIGJhaHdhIGtpdGEgbWVuZXJpbWEgJDUkJSBrZW11bmdraW5hbiBrZXNhbGFoYW4gdGlvZSBJLg0KLSAkXGFscGhhJCA9ICQwLDEwJDogTWVudW5qdWtrYW4gYmFod2Ega2l0YSBtZW5lcmltYSAkMTAkJSBrZW11bmdraW5hbiBrZXNhbGFobiB0aXBlIEkuDQoNCioqQ2F0YXRhbioqOiBOaWxhaSAkXGFscGhhJCB5YW5nIGtlY2lsIG1lbnVuanVra2FuIHBlbmd1amlhbiB5YW5nIGxlYmloIGtvbnNlcnZhdGlmLCBkaSBtYW5hIGtpdGEgaGFueWEgYWthbiBtZW5vbGFrICRIXzAkIGppa2EgYnVrdGkgeWFuZyBhZGEgc2FuZ2F0IGt1YXQuDQoNCiMgKipCLiBCZXRhKiogJChcYmV0YSkkICoqUHJvYmFiaWxpdGFzIEtlc2FsYWhhbiBUaXBlIElJKioNCioqQmV0YSoqICQoXGJldGEpJCBtZW5nYWN1IHBhZGEgcHJvYmFiaWxpdGFzIHRlcmphZGlueWEgKiprZXNhbGFoYW4gdGlwZSBJSSoqLiBLZXNhbGFoYW4gdGlwZSBJSSB0ZXJqYWRpIGtldGlrYSBraXRhIGdhZ2FsIG1lbm9sYWsgaGlwb3Rlc2lzIG5vbCAkKEhfMCkkIHBhZGFoYWwgc2ViZW5hcm55YSBoaXBvdGVzaXMgbm9sIGl0dSBzYWxhaC4gSW5pIGFkYWxhaCAqKmtlc2FsYWhhbiB5YW5nIGdhZ2FsIG1lbmRldGVrc2kgcGVyYmVkYWFuIHlhbmcgYmVuYXItYmVuYXIgYWRhKiouDQoNCiMjICoqMS4gS2VzYWxhaGFuIFRpcGUgSUkqKjoNCktlc2FsYWhhbiB0aXBlIElJIHRlcmphZGkgamlrYSBraXRhIGdhZ2FsIG1lbmVtdWthbiBidWt0aSB5YW5nIGN1a3VwIHVudHVrIG1lbm9sYWsgJEhfMCQgbWVza2lwdW4gYWRhIHBlcmJlZGFhbiBhdGF1IGVmZWsgeWFuZyBueWF0YSBkYWxhbSBwb3B1bGFzaS4NCg0KKipDb250b2gqKjoNCg0KLSBNaXNhbGthbiBraXRhIG1lbmd1amkgYXBha2FoIHN1YXR1ICBvYmF0IGxlYmloIGVmZWt0aWYgZGFyaXBhZGEgcGxhY2Viby4gSmlrYSBraXRhIGdhZ2FsIG1lbm9sYWsgSOKCgCB5YW5nIG1lbnlhdGFrYW4gIm9iYXQgdGlkYWsgbGViaWggZWZla3RpZiIgcGFkYWhhbCBvYmF0IHRlcnNlYnV0IHNlYmVuYXJueWEgbGViaWggZWZla3RpZiwgbWFrYSBpdHUgYWRhbGFoIGtlc2FsYWhhbiB0aXBlIElJLg0KDQojIyAqKjIuIEludGVycHJldGFzaSBCZXRhKiogJChcYmV0YSkkOg0KSmlrYSAkXGJldGEkID0gJDAsMjAkLCBtYWthIGluaSBiZXJhcnRpIGtpdGEgbWVtaWxpa2kgJDIwJCBrZW11bmdraW5hbiB1bnR1ayBnYWdhbCBtZW5vbGFrICRIXzAkIGppa2EgJEhfMCQgc2ViZW5hcm55YSBzYWxhaCAoYXRhdSBhZGEgZWZlayB5YW5nIG55YXRhKS4gU2ViYWxpa255YSwkMSAtIFxiZXRhJCBpc2VidXQgc2ViYWdhaSAqKnBvd2VyKiogZGFyaSB1amkgaGlwb3Rlc2lzLCB5YW5nIG1lbnVuanVra2FuIHByb2JhYmlsaXRhcyB1bnR1ayBiZW5hci1iZW5hciBtZW5kZXRla3NpIGVmZWsgeWFuZyBhZGEuDQoNCiMjICoqMy4gUG93ZXIgZGFyaSBVamkgSGlwb3Rlc2lzKioNCioqUG93ZXIqKiBkYXJpIHVqaSBoaXBvdGVzaXMgYWRhbGFoIGtlYmFsaWthbiBkYXJpICRcYmV0YSAoMSAtIFxiZXRhKSQuIFBvd2VyIHlhbmcgbWVuZ2dhbWJhcmthbiBrZW1hbXB1YW4gdWppIHVudHVrICoqbWVuZGV0ZWtzaSBwZXJiZWRhYW4geWFuZyBiZW5hci1iZW5hciBhZGEqKiAoeWFpdHUsIG1lbmRldGVrc2kgZWZlayBueWF0YSBqaWthIGl0dSBhZGEpLiBTZWJ1YWggdWppIHlhbmcgbWVtaWxpa2kgcG93ZXIgdGluZ2dpIGxlYmloIG1hbW1wdSBtZW5kZXRla3NpIGVmZWsgeWFuZyBueWF0YSBkYWxhbSBwb3B1bGFzaS4NCg0KKipDb250b2gqKjoNCg0KLSBKaWthIHBvd2VyID0gJDAsODAkLCBtYWthICQ4MCQlIGtlbXVuZ2tpbmFuIHVudHVrIGJlbmFyIG1lbmRldGVrc2kgcGVyYmVkYWFuIHlhbmcgYWRhLCBqaWthIGJlbmFyIGFkYSBwZXJiZWRhYW4gZGFsYW0gcG9wdWxhc2kuDQoNCioqSHVidW5nYW4gYW50YXJhIEFscGhhLCBCZXRhLCBkYW4gUG93ZXIqKjoNCg0KLSAqKlBvd2VyKiogPSAkMSAtIFxiZXRhJDogU2VtYWtpbiB0aW5nZ2kgcHBvd2VyLCBzZW1ha2luIGJlc2FyIHBlbHVhbmcga2l0YSB1bnR1ayBtZW5lbXVrYW4gZWZlayB5YW5nIGFkYS4NCi0gJFxhbHBoYSQgZGFuICRcYmV0YSQgbWVtaWxpa2kgaHVidW5nYW4gdHJhZGUtb2ZmOg0KICAgIC0gSmlrYSBraXRhIG1lbnVydW5rYW4gJFxhbHBoYSQgKG1pc2FsbnlhIGRhcnJpICQwLDA1JCBtZW5qYWRpICQwLDAxJCksIGtpdGEgbWVuamFkaSBsZWJpaCBrb25zZXJ2YXRpZiBkYWxhbSBtZW5vbGFrICRIXzAkLiBJbmkgZGFwYXQgbWVueWViYWJrYW4gJFxiZXRhJCBtZW5pbmdrYXQgKGtlc2FsYWhhbiB0aXBlIElJIG1lbmluZ2thdCkuDQogICAgLSBKaWthIGtpdGEgbWVudXJ1bmthbiAkXGJldGEkIChtaXNhbG55YSwgbWVuaW5na2F0a2FuIHVrdXJhbiBzYW1wZWwgYXRhdSBtZW5pbmdrYXRrYW4ga2VrdWF0YW4gdWppKSwgbWFrYSAkXGFscGhhJCBjZW5kZXJ1bmcgbWVuaW5na2F0Lg0KICAgIA0KIyMgKio0LiBDb250b2ggUGVyaGl0dW5nYW4qKg0KTWlzYWxueWEsIGtpdGEgaW5naW4gbWVsYWt1a2FuIHVqaSBoaXBvdGVzaXMgdW50dWsgbWVtYmFuZGluZ2thbiByYXRhLXJhdGEgZHVhIGtlbG9tcG9rIG1lbmdndW5ha2FuIHVqaSB0LiBLaXRhIHRhaHUgYmFod2EgdWt1cmFuIHNhbXBlbCAkKG4pJCBhZGFsYWggJDMwJCwgcmF0YS1yYXRhIHlhbmcgZGloYXJhcGthbiAkKEhfMSkkIGFkYWxhaCAkNTIkLCBkYW4gcmF0YS1yYXRhIHlhbmcgZGlhc3Vtc2lrYW4gdW50dWsgJEhfMCQgYWRhbGFoICQ1MCQgLiBEZXZpYXNpIHN0YW5kYXIgcG9wdWxzYWkgYWRhbGFoICQxMCQuDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgSW5zdGFsbCBkYW4gbG9hZCBwYWNrYWdlIHBsb3RseQ0KaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCmxpYnJhcnkocGxvdGx5KQ0KDQojIE1lbmV0YXBrYW4gcGFyYW1ldGVyIHVqaSBoaXBvdGVzaXMNCmFscGhhIDwtIDAuMDUgICAgICMgdGluZ2thdCBzaWduaWZpa2Fuc2kNCm11XzAgPC0gNTAgICAgICAgICMgcmF0YS1yYXRhIGhpcG90ZXNpcyBub2wgKEgwKQ0KbXVfMSA8LSA1MiAgICAgICAgIyByYXRhLXJhdGEgaGlwb3Rlc2lzIGFsdGVybmF0aWYgKEgxKQ0Kc2lnbWEgPC0gMTAgICAgICAgIyBkZXZpYXNpIHN0YW5kYXIgcG9wdWxhc2kNCm4gPC0gMzAgICAgICAgICAgICMgdWt1cmFuIHNhbXBlbA0KDQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIFBvd2VyIGRhcmkgbmlsYWkgYWxwaGEgZGFuIGJldGENCmNhbGN1bGF0ZV9wb3dlciA8LSBmdW5jdGlvbihhbHBoYSwgbXVfMCwgbXVfMSwgc2lnbWEsIG4pIHsNCiAgel9hbHBoYSA8LSBxbm9ybSgxIC0gYWxwaGEpICAjIEJhdGFzIGtyaXRpcyBiZXJkYXNhcmthbiBhbHBoYQ0KICB6X2JldGEgPC0gKG11XzAgLSBtdV8xKSAvIChzaWdtYSAvIHNxcnQobikpICAjIE5pbGFpIHogdW50dWsgQmV0YSAoa2VzYWxhaGFuIHRpcGUgSUkpDQogIHBvd2VyIDwtIDEgLSBwbm9ybSh6X2FscGhhIC0gel9iZXRhKSAgIyBQb3dlciAoMSAtIEJldGEpDQogIHJldHVybihwb3dlcikNCn0NCg0KIyBNZW55aWFwa2FuIGdyaWQgbmlsYWkgYWxwaGEgZGFuIG11XzEgdW50dWsgdmlzdWFsaXNhc2kgM0QNCmFscGhhX3ZhbHMgPC0gc2VxKDAuMDEsIDAuMSwgYnkgPSAwLjAxKQ0KbXVfMV92YWxzIDwtIHNlcSg1MCwgNjAsIGJ5ID0gMSkNCnBvd2VyX3ZhbHMgPC0gbWF0cml4KE5BLCBucm93ID0gbGVuZ3RoKGFscGhhX3ZhbHMpLCBuY29sID0gbGVuZ3RoKG11XzFfdmFscykpDQoNCiMgTWVuZ2hpdHVuZyBQb3dlciB1bnR1ayBiZXJiYWdhaSBrb21iaW5hc2kgYWxwaGEgZGFuIG11XzENCmZvciAoaSBpbiAxOmxlbmd0aChhbHBoYV92YWxzKSkgew0KICBmb3IgKGogaW4gMTpsZW5ndGgobXVfMV92YWxzKSkgew0KICAgIHBvd2VyX3ZhbHNbaSwgal0gPC0gY2FsY3VsYXRlX3Bvd2VyKGFscGhhX3ZhbHNbaV0sIG11XzAsIG11XzFfdmFsc1tqXSwgc2lnbWEsIG4pDQogIH0NCn0NCg0KIyBNZW1idWF0IHBsb3QgM0QgbWVuZ2d1bmFrYW4gcGxvdGx5DQpmaWcgPC0gcGxvdF9seSh4ID0gcmVwKGFscGhhX3ZhbHMsIGVhY2ggPSBsZW5ndGgobXVfMV92YWxzKSksDQogICAgICAgICAgICAgICB5ID0gcmVwKG11XzFfdmFscywgdGltZXMgPSBsZW5ndGgoYWxwaGFfdmFscykpLA0KICAgICAgICAgICAgICAgeiA9IGFzLnZlY3Rvcihwb3dlcl92YWxzKSwNCiAgICAgICAgICAgICAgIHR5cGUgPSAic2NhdHRlcjNkIiwNCiAgICAgICAgICAgICAgIG1vZGUgPSAibWFya2VycyIsDQogICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KHNpemUgPSA1LCBjb2xvciA9IGFzLnZlY3Rvcihwb3dlcl92YWxzKSwgY29sb3JzY2FsZSA9ICJWaXJpZGlzIikpDQoNCiMgTWVuYW1iYWhrYW4gbGF5b3V0IGRhbiBqdWR1bA0KZmlnIDwtIGZpZyAlPiUgbGF5b3V0KHNjZW5lID0gbGlzdCh4YXhpcyA9IGxpc3QodGl0bGUgPSAiQWxwaGEgKM6xKSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAibXVfMSAoSGlwb3Rlc2lzIEFsdGVybmF0aWYpIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICJQb3dlciBkYXJpIFVqaSIpKSwNCiAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSAzRCBQb3dlciBkYXJpIFVqaSBIaXBvdGVzaXMiKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCmZpZw0KYGBgDQoNCiMgKipLZXNpbXB1bGFuIFNvYWwgMioqDQoNCi0gKipBbHBoYSoqICQoXGFscGhhKSQgbWVuZ3VrdXIgKipwcm9iYWJpbGl0YXMga2VzYWxhaGFuIHRpcGUgSSoqLCB5YWl0dSBrZXNhbGFoYW4gZGFsYW0gbWVub2xhayAkSF8wJCB5YW5nIGJlbmFyLg0KLSAqKkJldGEqKiAkKFxiZXRhKSQgbWVuZ3VrdXIgKipwcm9iYWJpbGl0YXMga2VzYWxhaGFuIHRpcGUgSUkqKiwgeWFpdHUga2VzYWxhaGFuIGRhbGFtIGdhZ2FsIG1lbm9sYWsgJEhfMCQgeWFuZyBzYWxhaC4NCi0gKipQb3dlcioqIGFkYWxhaCAqKmtlbWFtcHVhbiB1amkgdW50dWsgbWVuZGV0ZWtzaSBlZmVrIHlhbmcgYWRhKiogKGtlYmFsaWthbiBkYXJpICRcYmV0YSQpLg0KLSBUcmFkZS1vZmYgYW50YXJhICRcYWxwaGEkIGRhbiAkXGJldGEkIG1lbnVuanVra2FuIGJhaHdhIG1lbWlsaWggdGluZ2thdCBzaWduaWZpa2FuIHlhbmcgbGViaWggcmVuZGFoIGRhcGF0IG1lbmluZ2thdGthbiBrZW11bmdraW5hbiBrZXNhbGFoYW4gdGlwZSBJSSAkKFxiZXRhKSQsIHNlbWVudGFyYSBtZW5pbmdrYXRrYW4gdWt1cmFuIHNhbXBlbCBhdGF1IHBvd2VyIGRhcGF0IG1lbmd1cmFuZ2kgcmlzaWtvIGtlc2FsYWhhbiB0aXBlIElJIGRhbiBtZW5pbmdrYXRrYW4ga2VrdWF0YW4gZGV0ZWtzaS4NCg0KRGVuZ2FuIHBlbWFoYW1hbiBpbmksIGRhcGF0IG1lcmFuY2FuZyB1amkgaGlwb3Rlc2lzIGRlbmdhbiBsZWJpaCBiYWlrIGRhbiBtZW1haGFtaSBiYWdhaW1hbmEgdHJhZGUtb2ZmIGFudGFyYSAkXGFscGhhJCBkYW4gJFxiZXRhJCBtZW1wZW5nYXJ1aGkgaGFzaWwgdWppIGRhbiBpbnRlcnByZXRhc2lueWEuDQoNCg0KIyAqKlNvYWwgMy4gS2FwYW4ga2l0YSBtZW5nZ3VuYWthbiBQZXNpbWlzIGRhbiBPcHRpbWlzKioNCkRhbGFtICoqU3RhdGlzdGlrYSoqLCBwZW5kZWthdGFuICoqcGVzaW1pcyoqIGRhbiAqKm9wdGltaXMqKiBkaWd1bmFrYW4gZGFsYW0gKiphbmFsaXNpcyBrZXB1dHVzYW4qKiBhdGF1ICoqaW5mZXJlbnNpIHN0YXRpc3RpayoqDQoNCiMgKipBLiBQZW5kZWthdGFuIFBlc2ltaXMgZGFsYW0gU3RhdGlzdGlhKioNClBlbmRla2F0YW4gcGVzaW1pcyBkYWxhbSBzdGF0aXN0aWthIHNlcmluZyBkaWd1bmFrYW4gc2FhdCBmb2t1c255YSBhZGFsYWggKiptZW5nYW50aXNpcGFzaSByaXNpa28gdGVyYnVydWsqKi4gQ29udG9obnlhOg0KDQojIyAqKkFwbGlrYXNpKio6DQoNCioqMS4gQW5hbGlzaXMgUmlzaXNrbyoqDQoNCkRhbGFtICoqU3RhdGlzdGlrYSBpbmZlcmVuc2lhbCoqLCBwZW5kZWthdGFuIHBlc2ltaXMgZGlndW5ha2FuIHVudHVrIG1lbmVudHVrYW4gYmF0YXMgYmF3YWggc3VhdHUgZXN0aW1hc2kgKGxvd3dlciBib3VuZCkuIE1pc2FsbnlhOg0KDQotIERhbGFtIGludGVydmFsIGtlcGVyY2F5YWFuLCBwZW5kZWthdGFuIHBlc2ltaXMgbGViaWggbWVtcGVyaGF0aWthbiBiYXRhcyBiYXdhaCB1bnR1ayBtZW1hc3Rpa2FuIGhhc2lsIHRpZGFrIGxlYmloIGJ1cnVrIGRhcmkgaXR1Lg0KLSBEYWxhbSBhbmFsaXNpcyByaXNpa28ga2V1YW5nYW4sIGRpZ3VuYWthbiB1bnR1ayBtZW5naGl0dW5nICoqVmFsdWUgYXQgUmlzayAoVmFSKSoqLCB5YWl0dSBrZXJ1Z2lhbiBtYWtzaW11bSBwYWRhIHRpbmdrYXQga2VwZXJjYXlhYW4gdGVydGVudHUuDQoNCioqMi4gSGlwb3Rlc2lzIE5vbCAoTnVsbCBIeXBvdGhlc2lzcykqKg0KDQpTYWF0IG1lbmd1amkgaGlwb3Rlc2lzLCBwZW5kZWthdGFuIHBlc2ltaXMgYmlzYW55YSBtZW5kdWt1bmcgaGlwb3Rlc2lzIG5vbCAkKEhfMCkkLCAga2FyZW5hIGluaSBhZGFsYWggYXN1bXNpIGRhc2FyIGJhaHdhICoqIHRpZGFrIGFkYSBlZmVrIGF0YXUgaHVidW5nYW4qKi4gUGVub2xha2FuICRIXzAkICBoYW55YSBkaWxha3VrYW4gamlrYSBhZGEgY3VrdXAgYnVrdGkga3VhdCwgdW50dWsgbWVuZ2hpbmRhcmkga2VzYWxhaGFuIHRpcGUgSSAoZmFsc2UgcG9zaXRpdmUpLg0KDQoqKjMuIEtlcHV0dXNhbiBLb25zZXJ2YXRpZioqDQoNClBlbmRla2F0YW4gaW5pIGRpYW1iaWwga2V0aWthIHNlb3JhbmcgYW5hbGlzIGxlYmloIG1lbWlsaWggKiptZW1pbmltYWxrYW4ga2VzYWxhaGFuKiogIGRhcmlwYWRhIG1lbmdhbWJpbCByaXNpa28sIG1pc2FsbnlhIHNhYXQgbWVyYW5jYW5nIHNpc3RlbSB5YW5nIGhhcnVzIGJlcm9wZXJhc2kgcGFkYSBrb25kaXNpIHRlcmJ1cnVrLg0KDQojIyAqKkNvbnRvaCoqOg0KRGFsYW0gdWppIHQsIGppa2Ega2l0YSBpbmdpbiBtZW5ldGFwa2FuIGJhdGFzIHRvbGVyYW5zaSByZW5kYWggdW50dWsgbWVuZGV0ZWtzaSBwZXJiZWRhYW4gcmF0YS1yYXRhLCBraXRhIG1lbmdndW5ha2FuIHBlbmRla2F0YW4ga29uc2VydmF0aWYgdW50dWsgbWVtYXN0aWthbiB0aWRhayBtZWxld2F0a2FuIHJpc2lrbyBwZW50aW5nLg0KDQoNCiMgKipCLiBQZW5kZWthdGFuIE9wdGltaXMgZGFsYW0gU3RhdGlzdGlrYSoqDQpQZW5kZWthdGFuIG9wdGltaXMgc2VyaW5nIGRpZ3VuYWthbiBzYWF0IGZva3VzbnlhIGFkYWxhaCAqKm1lbWFrc2ltYWxrYW4gcGVsdWFuZyoqIGF0YXUgKiptZW5nYXN1bXNpa2FuIHNrZW5hcmlvIHRlcmJhaWsqKi4NCg0KIyMgKipBcGxpa2FzaSoqOg0KDQoqKjEuIEVzdGltYXNpIE1ha3NpbXVtIChVcHBlciBCb3VuZCkqKg0KDQpEYWxhbSBpbnRlcnZhbCBrZXBlcmNheWFhbiBhdGF1IGFuYWxpc2lzIHJpc2lrbywgcGVuZGVrYXRhbiBvcHRpbWlzIGxlYmloIG1lbXBlcmhhdGlrYW4gYmF0YXMgYXRhcyAodXBwZXIgYm91bmQpIHVudHVrIG1lbGloYXQgcG90ZW5zaSB0ZXJiYWlrIGRhcmkgc3VhdHUgZXN0aW1hc2kuDQoNCioqMi4gUGVyYW5jYW5hYW4gQmVyZGFzYXJrYW4gVHJlbiBQb3NpdGlmKioNCg0KRGFsYW0gYW5hbGlzaXMgZGF0YSB0cmVuLCBwZW5kZWthdGFuIG9wdGltaXMgbWVuZ2FzdW1zaWthbiBiYWh3YSBwb2xhIGRhdGEgc2FhdCBpbmkgKHNlcGVydGkgcGVydHVtYnVoYW4gYXRhdSBwZW5ndXJhbmdhbikgYWthbiBiZXJsYW5qdXQga2UgbWFzYSBkZXBhbi4NCg0KKiozLiBIaXBvdGVzaXMgQWx0ZXJuYXRpZiAoQWx0ZXJuYXRpdmUgSHlwb3RoZXNpcykqKg0KDQpLZXRpa2Egc2VvcmFuZyBhbmFsaXMgeWFraW4gYmFod2EgYWRhIGh1YnVuZ2FuIHlhbmcgc2lnbmlmaWthbiwgcGVuZGVrYXRhbiBvcHRpbWlzIG1lbmR1a3VuZyBoaXBvdGVzaXMgYWx0ZXJuYXRpZiAoSOKCgSksIHlhbmcgbWVueWF0YWthbiBiYWh3YSBhZGEgZWZlayBhdGF1IGh1YnVuZ2FuLg0KDQojIyAqKkNvbnRvaCoqOg0KRGFsYW0gYW5hbGlzaXMgcmVncmVzaSwgcGVuZGVrYXRhbiBvcHRpbWlzIG11bmdraW4gbWVuZ2FzdW1zaWthbiBiYWh3YSBodWJ1bmdhbiB2YXJpYWJlbCBpbmRlcGVuZGVuIGRhbiBkZXBlbmRlbiBha2FuIHRlcnVzIGxpbmllciBtZXNraXB1biBhZGEgc2VkaWtpdCBkZXZpYXNpIHBhZGEgZGF0YSBoaXN0b3Jpcy4NCg0KDQojICoqQy4gUGVuZGVrYXRhbiBLb21iaW5hc2kgZGFsYW0gU3RhdGlzdGlrYSoqDQpEYWxhbSBiYW55YWsga2FzdXMsIHBlbmRla2F0YW4gcGVzaW1pcyBkYW4gb3B0aW1pcyBkaWd1bmFrYW4gYmVyc2FtYSB1bnR1ayBtZW5kYXBhdGthbiBhbmFsaXNpcyByZWFsaXN0aXMsIG1pc2FsbnlhIGRhbGFtOg0KDQojIyAqKjEuIEFuYWxpc2lzIFNrZW5hcmlvIChTY2VuYXJpbyBBbmFseXNpcykqKg0KTWVuZ2d1bmFrYW4gbmlsYWkgcGVzaW1pcywgb3B0aW1pcywgZGFuIHJlYWxpc3RpcyB1bnR1ayBtZW1wcm95ZWtzaWthbiBiZXJiYWdhaSBrZW11bmdraW5hbiBoYXNpbC4NCg0KLSAqKkNvbnRvaCoqOiAgRGFsYW0gcGVyYW1hbGFuIHBlbmp1YWxhbiwgcGVuZGVrYXRhbiBvcHRpbWlzIG1lbmdndW5ha2FuIGVzdGltYXNpIHBlcnR1bWJ1aGFuIHRlcnRpbmdnaSwgc2VtZW50YXJhIHBlbmRla2F0YW4gcGVzaW1pcyBtZW5nZ3VuYWthbiBwZXJ0dW1idWhhbiB0ZXJlbmRhaC4NCg0KIyMgKioyLiBJbnRlcnZhbCBQcmVkaWthaSoqDQpQZW5kZWthdGFuIGluaSBtZW5jYWt1cCBrZWR1YSBzaXNpIChwZXNpbWlzIGRhbiBvcHRpbWlzKSwgbWlzYWxueWEgaW50ZXJ2YWwga2VwZXJjYXlhYW4gJDk1JCUgeWFuZyBtZW51bmp1a2thbiBiYXRhcyBiYXdhaCAocGVzaW1pcykgZGFuIGJhdGFzIGF0YXMgKG9wdGltaXMpIGVzdGltYXNpLg0KDQojIyAqKjMuIFVqaSBTdGF0aXN0aWsgZGVuZ2FuIE5pbGFpIEtyaXRpa2FsKioNCk5pbGFpIGtyaXRpcyAoY3JpdGljYWwgdmFsdWUpIGRpZ3VuYWthbiB1bnR1ayBtZW5kZWZpbmlzaWthbiBiYXRhcyBvcHRpbWlzIChkaXRlcmltYSkgZGFuIHBlc2ltaXMgKGRpdG9sYWspIHBhZGEgdWppIGhpcG90ZXNpcy4NCg0KIyAqKktlc2ltcHVsYW4gU29hbCAzKio6DQoNCi0gR3VuYWthbiAqKnBlbmRla2F0YW4gcGVzaW1pcyoqIHNhYXQgaW5naW4gbWVtaW5pbWFsa2FuIHJpc2lrbyBrZXNhbGFoYW4gYXRhdSBtZW1wZXJzaWFwa2FuIHNrZW5hcmlvIHRlcmJ1cnVrLg0KLSBHdW5ha2FuICoqcGVuZGVrYXRhbiBvcHRpbWlzKiogc2FhdCBmb2t1cyBwYWRhIHBlbHVhbmcgdGVyYmFpayBhdGF1IG1lbmdla3NwbG9yYXNpIHNrZW5hcmlvIHBvc2l0aWYuDQotIEtvbWJpbmFzaWthbiBrZWR1YW55YSB1bnR1ayBtZW5kYXBhdGthbiBnYW1iYXJhbiB5YW5nIHNlaW1iYW5nLCBtaXNhbG55YSBtZWxhbHVpIGFuYWxpc2lzIHNrZW5hcmlvIGF0YXUgaW50ZXJ2YWwgcHJlZGlrc2kuDQoNCiMgKipSZWZyZW5zaSoqOg0KLSBEU2NpZW5jZWxhYnMuIChuLmQuKSBQZW5nYW50YXIgU3RhdGlzdGlrYSB1bnR1ayBTYWlucyBEYXRhLiBCb29rZG93bi4gUmV0cmlldmVkIGZyb20gPGEgaHJlZiA9ICJodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc3RhdGlzdGlrYV9kYXNhci9fYm9vay8iID4gS2xpayBkaXNpbmk8L2E+DQotIEdyYWNpYSBDYXJvbGluYSAyMDIyIFN0YXRpc3Rpa2EgRGVza3JpcHRpZi4gQm9va2Rvd24uICBSZXRyaWV2ZWQgZnJvbSA8YSBocmVmID0gImh0dHBzOi8vd3d3Lnplbml1cy5uZXQvYmxvZy9zdGF0aXN0aWthLWRlc2tBcmlwdGlmIiA+IEtsaWsgZGlzaW5pPC9hPg0KLSBBcmlmIE11a3RpIFJhbWFkaGFuIHN0YXRpc3Rpa2EgSW5mZXJlbnNpYWwuIEJvb2tkb3duLiBSZXRyaWV2ZWQgZnJvbSA8YSBocmVmID0gImh0dHBzOi8vZWJpem1hcmsuaWQvYXJ0aWtlbC9zdGF0aXN0aWthLWluZmVyZW5zaWFsLXBlbmdlcnRpYW4tZnVuZ3NpLWplbmlzLWRhbi1jb250b2gvP3Nyc2x0aWQ9QWZtQk9vcmFnS19WeW1UNXNfa3VVdUtBc3M3clM4UmxmbUN4cGQ2YmhhYThfVDR2WlNYWW5rSEwiID4gS2xpayBkaXNpbmk8L2E+DQotIEpva28gQWRlIE51cnN5aW9ubyBTdGF0aXN0aWthOiBNZW5nZW5hbCBBbHBoYSBCZXRhLiBCb29rZG93bi4gUmV0cmlldmVkIGZyb20gPGEgaHJlZiA9ICJodHRwczovL3d3dy5rb21wYXNpYW5hLmNvbS9qb2tvYWRlLzU0ZjY3ZTA4YTMzMzExOTExNzhiNGJlMS9zdGF0aXN0aWthLW1lbmdlbmFsLWFscGhhLWRhbi1iZXRhLWRhbGFtLW1lbXV0dXNrYW4tcGVya2FyYSIgPiBLbGlrIGRpc2luaTwvYT4NCg0KDQo=