Essential of Probability

Logo

1 Pendahuluan

Probabilitas merupakan pilar fundamental dalam penalaran statistik, yang menyediakan kerangka kerja sistematis untuk mengukur, menganalisis, dan memprediksi ketidakpastian. Dalam konteks analisis data, pemahaman yang kokoh terhadap probabilitas sangat esensial untuk membangun model yang valid, menafsirkan pola dalam data, dan membuat keputusan yang didasarkan pada bukti, bukan spekulasi.

2 Fundamental Concept

Probabilitas didefinisikan sebagai peluang suatu peristiwa terjadi, dihitung dengan membagi hasil yang diinginkan dengan total semua hasil yang mungkin.Analisis yang efektif, pemahaman akan Ruang Sampel (\(S\)) sangat esensial; ini adalah keseluruhan himpunan dari semua kemungkinan hasil, yang menjadi acuan universal bagi perhitungan. Misalnya, melempar dua koin menghasilkan empat Ruang Sampel: HH, HT, TH, dan TT. Setiap probabilitas yang dihitung harus divalidasi, yaitu harus berada di antara 0 dan 1, dan jumlah seluruh peluang dalam Ruang Sampel harus sama dengan satu.

Terakhir, Aturan Komplemen adalah alat yang sangat penting untuk efisiensi. Aturan ini memungkinkan kita menghitung probabilitas suatu peristiwa tidak terjadi dengan hanya mengurangkan probabilitasnya dari 1, mempermudah penyelesaian masalah yang lebih kompleks.

2.1 Probabilitas Sederhana (Simple Probability)

Probabilitas adalah ukuran peluang suatu peristiwa akan terjadi.

2.1.1 Formula Inti:

Probabilitas suatu peristiwa (A) dihitung dengan membagi jumlah hasil yang diinginkan (favorable outcomes) dengan total semua hasil yang mungkin (possible outcomes).\[\text{P(A)} = \frac{\text{Jumlah Hasil yang Diinginkan}}{\text{Total Hasil yang Mungkin}}\]

2.1.2 Contoh:

Melempar satu koin.

  • Hasil yang Diinginkan (Kepala/Heads): 1

  • Total Hasil yang Mungkin (Kepala atau Ekor): 2

  • \(P(\text{Kepala}) = 1/2 = 0.5\) atau 50%

2.2 Ruang Sampel (Sample Space)

Ruang Sampel (\(S\)) adalah keseluruhan himpunan dari semua hasil yang mungkin dari suatu percobaan.

2.2.1 Tujuan:

Ruang sampel membantu memvisualisasikan semua kemungkinan hasil, terutama ketika ada beberapa kali percobaan.

2.2.2 Contoh:

Melempar koin dua kali.

  • Diagram pohon dapat digunakan untuk memvisualisasikan semua hasil.

  • Ruang Sampelnya adalah: \(\{HH, HT, TH, TT\}\) (Total 4 hasil yang mungkin).

  • Probabilitas setiap hasil adalah \(0.5 \times 0.5 = 0.25\).

2.2.3 Penerapan:

Untuk menemukan probabilitas peristiwa yang melibatkan lebih dari satu hasil (misalnya, \(P(\text{Setidaknya satu ekor})\)), kita cukup menjumlahkan probabilitas dari setiap hasil yang relevan (\(P(HT) + P(TH) + P(TT) = 0.25 + 0.25 + 0.25 = 0.75\))

2.3 Aturan Probabilitas Dasar (Probability Rules)

Setiap probabilitas harus memenuhi dua kondisi dasar :

  • Batasan Nilai: Probabilitas suatu peristiwa harus selalu bernilai antara 0 (mustahil terjadi) dan 1 (pasti terjadi).

  • Jumlah Total: Jumlah probabilitas dari semua hasil dalam Ruang Sampel harus selalu sama dengan 1.

2.4 Aturan Komplemen (The Complement Rule)

Definisi:Aturan ini menyatakan bahwa probabilitas suatu peristiwa tidak terjadi adalah 1 dikurangi probabilitas peristiwa itu terjadi.

2.4.1 Formula:

\[P(A^c) = 1 - P(A)\]Di mana \(A^c\) adalah komplemen dari A (peristiwa A tidak terjadi).

2.4.2 Contoh:

Jika melempar dua koin, berapa \(P(\text{Tidak mendapatkan dua ekor/TT})\)?

  • \(P(TT) = 0.25\)

  • Menggunakan Aturan Komplemen: \(P(\text{Tidak TT}) = 1 - P(TT) = 1 - 0.25 = 0.75\).

2.4.3 Manfaat:

Aturan ini sangat berguna ketika menghitung probabilitas “setidaknya satu”, karena seringkali lebih mudah menghitung probabilitas kebalikannya (“tidak sama sekali”) dan menguranginya dari 1.

3 Independent and Dependent

Kejadian Independen didefinisikan sebagai peristiwa dalam probabilitas yang tidak saling memengaruhi; hasil dari satu peristiwa sama sekali tidak memiliki pengaruh terhadap hasil peristiwa lainnya.Video tersebut mengilustrasikan ini menggunakan contoh sederhana seperti melempar dadu dan melempar koin—dua tindakan yang tetap sepenuhnya independen terlepas dari hasilnya.

Untuk menghitung probabilitas kejadian independen terjadi bersamaan, kita cukup mengalikan probabilitas dari setiap peristiwa, mengikuti formula \(P(A \text{ dan } B) = P(A) \times P(B)\). Formula ini esensial untuk menentukan probabilitas gabungan (joint probabilities) ketika peristiwa-peristiwa tersebut terjadi secara independen.Sebaliknya, Kejadian Dependen terjadi ketika hasil dari satu peristiwa memengaruhi probabilitas peristiwa berikutnya.

Video ini menjelaskan konsep ini menggunakan contoh pengambilan kelereng tanpa pengembalian (without replacement). Ketika sebuah item dikeluarkan dari total sampel, jumlah total hasil yang mungkin berubah, yang berarti probabilitas untuk pengambilan berikutnya harus disesuaikan. Ini menyoroti mengapa sangat penting untuk mengenali kejadian dependen—menggunakan formula untuk kejadian independen dalam situasi ini akan mengarah pada hasil yang salah.

Untuk menghitung probabilitas kejadian dependen, kita mengalikan probabilitas peristiwa pertama dengan probabilitas yang disesuaikan untuk peristiwa kedua, yang mencerminkan jumlah sisa hasil yang diperbarui. Mengambil item tanpa pengembalian adalah skenario klasik yang menunjukkan cara kerja kejadian dependen. Pada akhirnya, perbedaan utama antara kedua konsep tersebut terletak pada apakah hasil satu peristiwa memengaruhi peristiwa lain.

Kejadian independen tetap tidak terpengaruh satu sama lain, sementara kejadian dependen memerlukan penyesuaian probabilitas secara berkelanjutan setelah setiap hasil.

3.1 Kejadian Independen (Independent Events)

Kejadian independen terjadi ketika terjadinya peristiwa pertama tidak memengaruhi probabilitas terjadinya peristiwa kedua.

3.1.1 Contoh:

Melempar dadu dan melempar koin. Hasil dadu (misalnya, mendapat 5) tidak meningkatkan atau menurunkan probabilitas koin mendarat pada Heads.

3.1.2 Formula Perkalian:

Untuk menghitung probabilitas dua kejadian independen (A dan B) terjadi bersamaan, Anda cukup mengalikan probabilitas masing-masing:\[P(A \text{ dan } B) = P(A) \times P(B)\].

3.1.3 Contoh Perhitungan:

Probabilitas melempar dadu mendapat 5 (\(P(A) = 1/6\)) dan melempar koin mendapat Heads (\(P(B) = 1/2\)) adalah:\[P(5 \text{ dan Heads}) = (1/6) \times (1/2) = 1/12\].

3.2 Kejadian Dependen (Dependent Events)

Kejadian dependen terjadi ketika terjadinya peristiwa pertama memengaruhi probabilitas terjadinya peristiwa kedua.

3.2.1 Konteks Umum:

Kejadian dependen sering terjadi pada situasi pengambilan tanpa pengembalian (without replacement), yang berarti item yang diambil tidak dimasukkan kembali ke dalam total sampel. Hal ini menyebabkan probabilitas berubah setelah setiap pengambilan

3.2.2 Formula Probabilitas Bersyarat:

Untuk menghitung probabilitas dua kejadian dependen (A dan B) terjadi, gunakan rumus berikut:\[P(A \text{ dan } B) = P(A) \times P(B \text{ setelah } A \text{ terjadi})\]

3.2.3 Contoh Perhitungan (Tanpa Pengembalian):

Misalnya, mengambil kelereng dari kotak yang berisi 10 kelereng (7 Hijau, 3 Biru).

  • \(P(\text{Hijau Pertama})\): \(7/10\)

  • \(P(\text{Biru Kedua})\): Setelah satu kelereng hijau diambil, tersisa 9 kelereng. Jumlah kelereng biru tetap 3. Jadi, probabilitasnya berubah menjadi \(3/9\).

  • Probabilitas Gabungan: \(P(\text{Hijau lalu Biru}) = (7/10) \times (3/9) = 7/30\)

4 Union of Events

Konsep utama dalam video ini adalah menghitung probabilitas Union of Events, yang mengacu pada peluang salah satu dari dua peristiwa atau lebih akan terjadi (ditandai dengan kata kunci “OR”). Perhitungan ini dimulai dengan mendefinisikan Ruang Sampel, seperti 36 kemungkinan hasil saat melempar dua dadu, dan probabilitas sederhana dari setiap peristiwa.

Rumus inti untuk Union of Events (A atau B) adalah: \[P(A \text{ atau } B) = P(A) + P(B) - P(A \text{ dan } B)\] Bagian terpenting dari formula ini adalah pengurangan istilah \(P(A \text{ dan } B)\), yang dikenal sebagai Irisan Peristiwa (Intersection). Istilah ini harus dikurangi karena ketika \(P(A)\) dan \(P(B)\) dijumlahkan, hasil yang tumpang tindih (yang dimiliki oleh A dan B) telah dihitung dua kali (duplicate outcomes). Pengurangan irisan ini memastikan bahwa setiap hasil hanya dihitung satu kali, sehingga menghasilkan probabilitas Union yang benar. Dengan kata lain, Union of Events mengajari kita cara menggabungkan probabilitas tanpa melakukan penghitungan ganda terhadap area yang tumpang tindih.

5 Exclusive and Exhaustive

Video tersebut berisi tentang klasifikasi peristiwa dengan berfokus pada dua konsep yang mendefinisikan hubungan antar hasil dalam Ruang Sampel. Mutually Exclusive Events (Saling Lepas) diartikan sebagai peristiwa yang tidak memiliki tumpang tindih sama sekali; terjadinya satu peristiwa secara ketat mencegah terjadinya peristiwa lain, yang secara matematis berarti probabilitas irisan mereka adalah nol. Sebaliknya, Exhaustive Events (Kolektif Lengkap) adalah serangkaian peristiwa yang, ketika dikombinasikan, mencakup seluruh Ruang Sampel secara kolektif. Pentingnya konsep Exhaustive adalah bahwa jumlah probabilitas dari semua peristiwa dalam set tersebut harus sama dengan satu. Pemahaman yang jelas tentang kedua klasifikasi ini sangat fundamental, karena memandu kita dalam penerapan Aturan Penjumlahan yang benar—menggunakan \(P(A) + P(B)\) untuk peristiwa Mutually Exclusive—dan memastikan bahwa analisis probabilitas kita mencakup semua hasil yang mungkin.

6 Binomial Experiment

Eksperimen Binomial adalah model distribusi probabilitas diskret yang paling ketat dan esensial. Model ini memungkinkan penghitungan probabilitas mendapatkan sejumlah keberhasilan (k) dalam sejumlah percobaan (n) yang identik.

6.1 Prasyarat: Empat Kondisi Binomial Setting

Penerapan formula Binomial sepenuhnya tergantung pada validitas eksperimen, yang harus memenuhi Empat Kondisi Binomial Setting berikut:

Kriteria Simbol Keterangan Mendalam
B (Binary) Setiap percobaan hanya memiliki dua hasil yang mungkin: Sukses (S) atau Gagal (F).
I (Independent) Hasil setiap percobaan harus independen. Ini berarti \(P(S)\) pada percobaan ke-10 sama dengan \(P(S)\) pada percobaan ke-1. (Contoh: Percobaan dengan pengembalian).
N (Number of Trials) \(n\) Jumlah percobaan harus tetap dan ditentukan di awal.
S (Success Probability) \(p\) Probabilitas sukses \(p\) harus konstan di setiap percobaan. Akibatnya, probabilitas gagal adalah \(q = 1 - p\).

6.2 Formula Probabilitas Binomial

Setelah kondisi Binomial Setting terpenuhi, probabilitas mendapatkan tepat \(k\) sukses dalam \(n\) percobaan dihitung menggunakan formula berikut:\[P(X=k) = \binom{n}{k} p^k q^{n-k}\] Penjelasan Komponen Formula:

Komponen Nama Fungsi
\(\binom{n}{k}\) Koefisien Binomial atau Kombinasi Menghitung jumlah cara berbeda di mana \(k\) sukses dapat terjadi dalam \(n\) percobaan, mengabaikan urutan. Formula kombinasi itu sendiri adalah: \[\binom{n}{k} = \frac{n!}{k!(n-k)!}\]
\(p^k\) Probabilitas Sukses Probabilitas mendapatkan \(k\) sukses.
\(q^{n-k}\) Probabilitas Gagal Probabilitas mendapatkan \(n\) minus \(k\) kegagalan. Karena \(q = 1-p\), ini juga ditulis \((1-p)^{n-k}\).

6.3 Nilai Harapan dan Variansi (Statistik Binomial)

Selain menghitung probabilitas spesifik, Distribusi Binomial juga memiliki formula untuk menghitung nilai statistik utama dari distribusi tersebut:

Statistik Formula Keterangan
Nilai Harapan (Mean) \[\mu = E(X) = n \cdot p\] Rata-rata atau jumlah sukses yang diharapkan dalam \(n\) percobaan.
Variansi \[\sigma^2 = n \cdot p \cdot q\] Mengukur seberapa besar penyebaran data dalam distribusi.
Simpangan Baku (Standard Deviation) \[\sigma = \sqrt{n \cdot p \cdot q}\] Akar kuadrat dari Variansi.

7 Binomial Distribution

Video tersebut menjelaskan Distribusi Binomial sebagai fungsi yang bentuknya sepenuhnya bergantung pada dua parameter intinya: \(n\) (jumlah percobaan) dan \(p\) (probabilitas sukses). Distribusi Binomial, yang probabilitasnya dihitung menggunakan formula binomial untuk setiap nilai \(k\), divisualisasikan menggunakan grafik batang (bar chart) dengan nilai k (jumlah sukses) pada sumbu-x dan probabilitas pada sumbu-y. Analisis visual ini mengungkapkan dua temuan kunci:

  • Pengaruh \(n\) (Ukuran Sampel): Seiring \(n\) meningkat, bentuk distribusi Binomial secara bertahap akan mendekati Distribusi Normal yang simetris, terpusat di sekitar nilai harapan (\(\mu = n \cdot p\)).

  • Pengaruh \(p\) (Probabilitas Sukses): Nilai \(p\) mengontrol kemiringan (skewness) distribusi. Jika \(p = 0.5\), distribusi akan simetris (berbentuk lonceng). Jika \(p\) menjauhi 0.5 (misalnya \(p=0.1\) atau \(p=0.8\)), distribusi menjadi miring (skewed), dan kemiringan selalu menjauh dari nilai yang kurang mungkin (misalnya, \(p=0.1\) miring ke kanan karena sukses jarang terjadi).

Oleh karena itu, video ini menyimpulkan dengan aturan pedoman (Normal Approximation) bahwa distribusi Binomial dapat diasumsikan mendekati Normal jika kondisi \(n \cdot p \geq 10\) dan \(n \cdot (1-p) \geq 10\) terpenuhi, yang memberikan landasan kapan model yang lebih sederhana (Distribusi Normal) dapat digunakan untuk memperkirakan probabilitas Binomial.

LS0tDQp0aXRsZTogIkVzc2VudGlhbCBvZiBQcm9iYWJpbGl0eSINCmF1dGhvcjogIkNoYW5kcmEgUml6YWwgQWxhbXN5YWggKDUyMjUwMDY4KSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZSANCiAgICBjc3M6IHN0eWxlLmNzcw0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCi0tLQ0KDQo8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2NoYW5kcmEyNDAyMDUtc3Vkby9DaGFuZHJhMy9tYWluL0dhbnRlbmcuanBnIiBhbHQ9IkxvZ28iIGlkPSJGb3RvIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ii8+DQoNCiMgUGVuZGFodWx1YW4NCg0KUHJvYmFiaWxpdGFzIG1lcnVwYWthbiBwaWxhciBmdW5kYW1lbnRhbCBkYWxhbSBwZW5hbGFyYW4gc3RhdGlzdGlrLCB5YW5nIG1lbnllZGlha2FuIGtlcmFuZ2thIGtlcmphIHNpc3RlbWF0aXMgdW50dWsgbWVuZ3VrdXIsIG1lbmdhbmFsaXNpcywgZGFuIG1lbXByZWRpa3NpIGtldGlkYWtwYXN0aWFuLiBEYWxhbSBrb250ZWtzIGFuYWxpc2lzIGRhdGEsIHBlbWFoYW1hbiB5YW5nIGtva29oIHRlcmhhZGFwIHByb2JhYmlsaXRhcyBzYW5nYXQgZXNlbnNpYWwgdW50dWsgbWVtYmFuZ3VuIG1vZGVsIHlhbmcgdmFsaWQsIG1lbmFmc2lya2FuIHBvbGEgZGFsYW0gZGF0YSwgZGFuIG1lbWJ1YXQga2VwdXR1c2FuIHlhbmcgZGlkYXNhcmthbiBwYWRhIGJ1a3RpLCBidWthbiBzcGVrdWxhc2kuDQoNCiMgRnVuZGFtZW50YWwgQ29uY2VwdA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQveW5qSEtCQ2lHWFk/c2k9WGpJTlhGQTBkODAwQk9LSCIpDQpgYGANCg0KUHJvYmFiaWxpdGFzIGRpZGVmaW5pc2lrYW4gc2ViYWdhaSBwZWx1YW5nIHN1YXR1IHBlcmlzdGl3YSB0ZXJqYWRpLCBkaWhpdHVuZyBkZW5nYW4gbWVtYmFnaSBoYXNpbCB5YW5nIGRpaW5naW5rYW4gZGVuZ2FuIHRvdGFsIHNlbXVhIGhhc2lsIHlhbmcgbXVuZ2tpbi5BbmFsaXNpcyB5YW5nIGVmZWt0aWYsIHBlbWFoYW1hbiBha2FuIFJ1YW5nIFNhbXBlbCAoJFMkKSBzYW5nYXQgZXNlbnNpYWw7IGluaSBhZGFsYWgga2VzZWx1cnVoYW4gaGltcHVuYW4gZGFyaSBzZW11YSBrZW11bmdraW5hbiBoYXNpbCwgeWFuZyBtZW5qYWRpIGFjdWFuIHVuaXZlcnNhbCBiYWdpIHBlcmhpdHVuZ2FuLiBNaXNhbG55YSwgbWVsZW1wYXIgZHVhIGtvaW4gbWVuZ2hhc2lsa2FuIGVtcGF0IFJ1YW5nIFNhbXBlbDogSEgsIEhULCBUSCwgZGFuIFRULiBTZXRpYXAgcHJvYmFiaWxpdGFzIHlhbmcgZGloaXR1bmcgaGFydXMgZGl2YWxpZGFzaSwgeWFpdHUgaGFydXMgYmVyYWRhIGRpIGFudGFyYSAwIGRhbiAxLCBkYW4ganVtbGFoIHNlbHVydWggcGVsdWFuZyBkYWxhbSBSdWFuZyBTYW1wZWwgaGFydXMgc2FtYSBkZW5nYW4gc2F0dS4NCg0KVGVyYWtoaXIsIEF0dXJhbiBLb21wbGVtZW4gYWRhbGFoIGFsYXQgeWFuZyBzYW5nYXQgcGVudGluZyB1bnR1ayBlZmlzaWVuc2kuIEF0dXJhbiBpbmkgbWVtdW5na2lua2FuIGtpdGEgbWVuZ2hpdHVuZyBwcm9iYWJpbGl0YXMgc3VhdHUgcGVyaXN0aXdhIHRpZGFrIHRlcmphZGkgZGVuZ2FuIGhhbnlhIG1lbmd1cmFuZ2thbiBwcm9iYWJpbGl0YXNueWEgZGFyaSAxLCBtZW1wZXJtdWRhaCBwZW55ZWxlc2FpYW4gbWFzYWxhaCB5YW5nIGxlYmloIGtvbXBsZWtzLg0KDQojIyBQcm9iYWJpbGl0YXMgU2VkZXJoYW5hIChTaW1wbGUgUHJvYmFiaWxpdHkpDQoNClByb2JhYmlsaXRhcyBhZGFsYWggdWt1cmFuIHBlbHVhbmcgc3VhdHUgcGVyaXN0aXdhIGFrYW4gdGVyamFkaS4NCg0KIyMjIEZvcm11bGEgSW50aToNCg0KUHJvYmFiaWxpdGFzIHN1YXR1IHBlcmlzdGl3YSAoQSkgZGloaXR1bmcgZGVuZ2FuIG1lbWJhZ2kganVtbGFoIGhhc2lsIHlhbmcgZGlpbmdpbmthbiAoZmF2b3JhYmxlIG91dGNvbWVzKSBkZW5nYW4gdG90YWwgc2VtdWEgaGFzaWwgeWFuZyBtdW5na2luIChwb3NzaWJsZSBvdXRjb21lcykuJCRcdGV4dHtQKEEpfSA9IFxmcmFje1x0ZXh0e0p1bWxhaCBIYXNpbCB5YW5nIERpaW5naW5rYW59fXtcdGV4dHtUb3RhbCBIYXNpbCB5YW5nIE11bmdraW59fSQkDQoNCiMjIyBDb250b2g6DQoNCk1lbGVtcGFyIHNhdHUga29pbi4NCg0KLSAgIEhhc2lsIHlhbmcgRGlpbmdpbmthbiAoS2VwYWxhL0hlYWRzKTogMQ0KDQotICAgVG90YWwgSGFzaWwgeWFuZyBNdW5na2luIChLZXBhbGEgYXRhdSBFa29yKTogMg0KDQotICAgJFAoXHRleHR7S2VwYWxhfSkgPSAxLzIgPSAwLjUkIGF0YXUgNTAlDQoNCiMjIFJ1YW5nIFNhbXBlbCAoU2FtcGxlIFNwYWNlKQ0KDQpSdWFuZyBTYW1wZWwgKCRTJCkgYWRhbGFoIGtlc2VsdXJ1aGFuIGhpbXB1bmFuIGRhcmkgc2VtdWEgaGFzaWwgeWFuZyBtdW5na2luIGRhcmkgc3VhdHUgcGVyY29iYWFuLg0KDQojIyMgVHVqdWFuOg0KDQpSdWFuZyBzYW1wZWwgbWVtYmFudHUgbWVtdmlzdWFsaXNhc2lrYW4gc2VtdWEga2VtdW5na2luYW4gaGFzaWwsIHRlcnV0YW1hIGtldGlrYSBhZGEgYmViZXJhcGEga2FsaSBwZXJjb2JhYW4uDQoNCiMjIyBDb250b2g6DQoNCk1lbGVtcGFyIGtvaW4gZHVhIGthbGkuDQoNCi0gICBEaWFncmFtIHBvaG9uIGRhcGF0IGRpZ3VuYWthbiB1bnR1ayBtZW12aXN1YWxpc2FzaWthbiBzZW11YSBoYXNpbC4NCg0KLSAgIFJ1YW5nIFNhbXBlbG55YSBhZGFsYWg6ICRce0hILCBIVCwgVEgsIFRUXH0kIChUb3RhbCA0IGhhc2lsIHlhbmcgbXVuZ2tpbikuDQoNCi0gICBQcm9iYWJpbGl0YXMgc2V0aWFwIGhhc2lsIGFkYWxhaCAkMC41IFx0aW1lcyAwLjUgPSAwLjI1JC4NCg0KIyMjIFBlbmVyYXBhbjoNCg0KVW50dWsgbWVuZW11a2FuIHByb2JhYmlsaXRhcyBwZXJpc3Rpd2EgeWFuZyBtZWxpYmF0a2FuIGxlYmloIGRhcmkgc2F0dSBoYXNpbCAobWlzYWxueWEsICRQKFx0ZXh0e1NldGlkYWtueWEgc2F0dSBla29yfSkkKSwga2l0YSBjdWt1cCBtZW5qdW1sYWhrYW4gcHJvYmFiaWxpdGFzIGRhcmkgc2V0aWFwIGhhc2lsIHlhbmcgcmVsZXZhbiAoJFAoSFQpICsgUChUSCkgKyBQKFRUKSA9IDAuMjUgKyAwLjI1ICsgMC4yNSA9IDAuNzUkKQ0KDQojIyBBdHVyYW4gUHJvYmFiaWxpdGFzIERhc2FyIChQcm9iYWJpbGl0eSBSdWxlcykNCg0KU2V0aWFwIHByb2JhYmlsaXRhcyBoYXJ1cyBtZW1lbnVoaSBkdWEga29uZGlzaSBkYXNhciA6DQoNCi0gICBCYXRhc2FuIE5pbGFpOiBQcm9iYWJpbGl0YXMgc3VhdHUgcGVyaXN0aXdhIGhhcnVzIHNlbGFsdSBiZXJuaWxhaSBhbnRhcmEgMCAobXVzdGFoaWwgdGVyamFkaSkgZGFuIDEgKHBhc3RpIHRlcmphZGkpLg0KDQotICAgSnVtbGFoIFRvdGFsOiBKdW1sYWggcHJvYmFiaWxpdGFzIGRhcmkgc2VtdWEgaGFzaWwgZGFsYW0gUnVhbmcgU2FtcGVsIGhhcnVzIHNlbGFsdSBzYW1hIGRlbmdhbiAxLg0KDQojIyBBdHVyYW4gS29tcGxlbWVuIChUaGUgQ29tcGxlbWVudCBSdWxlKQ0KDQpEZWZpbmlzaTpBdHVyYW4gaW5pIG1lbnlhdGFrYW4gYmFod2EgcHJvYmFiaWxpdGFzIHN1YXR1IHBlcmlzdGl3YSB0aWRhayB0ZXJqYWRpIGFkYWxhaCAxIGRpa3VyYW5naSBwcm9iYWJpbGl0YXMgcGVyaXN0aXdhIGl0dSB0ZXJqYWRpLg0KDQojIyMgRm9ybXVsYToNCg0KJCRQKEFeYykgPSAxIC0gUChBKSQkRGkgbWFuYSAkQV5jJCBhZGFsYWgga29tcGxlbWVuIGRhcmkgQSAocGVyaXN0aXdhIEEgdGlkYWsgdGVyamFkaSkuDQoNCiMjIyBDb250b2g6DQoNCkppa2EgbWVsZW1wYXIgZHVhIGtvaW4sIGJlcmFwYSAkUChcdGV4dHtUaWRhayBtZW5kYXBhdGthbiBkdWEgZWtvci9UVH0pJD8NCg0KLSAgICRQKFRUKSA9IDAuMjUkDQoNCi0gICBNZW5nZ3VuYWthbiBBdHVyYW4gS29tcGxlbWVuOiAkUChcdGV4dHtUaWRhayBUVH0pID0gMSAtIFAoVFQpID0gMSAtIDAuMjUgPSAwLjc1JC4NCg0KIyMjIE1hbmZhYXQ6DQoNCkF0dXJhbiBpbmkgc2FuZ2F0IGJlcmd1bmEga2V0aWthIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzICJzZXRpZGFrbnlhIHNhdHUiLCBrYXJlbmEgc2VyaW5na2FsaSBsZWJpaCBtdWRhaCBtZW5naGl0dW5nIHByb2JhYmlsaXRhcyBrZWJhbGlrYW5ueWEgKCJ0aWRhayBzYW1hIHNla2FsaSIpIGRhbiBtZW5ndXJhbmdpbnlhIGRhcmkgMS4NCg0KIyBJbmRlcGVuZGVudCBhbmQgRGVwZW5kZW50DQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9MUy1faWhES3IyTT9zaT10VVZSZjBIRDYxd1RmbkhLIikNCmBgYA0KDQpLZWphZGlhbiBJbmRlcGVuZGVuIGRpZGVmaW5pc2lrYW4gc2ViYWdhaSBwZXJpc3Rpd2EgZGFsYW0gcHJvYmFiaWxpdGFzIHlhbmcgdGlkYWsgc2FsaW5nIG1lbWVuZ2FydWhpOyBoYXNpbCBkYXJpIHNhdHUgcGVyaXN0aXdhIHNhbWEgc2VrYWxpIHRpZGFrIG1lbWlsaWtpIHBlbmdhcnVoIHRlcmhhZGFwIGhhc2lsIHBlcmlzdGl3YSBsYWlubnlhLlZpZGVvIHRlcnNlYnV0IG1lbmdpbHVzdHJhc2lrYW4gaW5pIG1lbmdndW5ha2FuIGNvbnRvaCBzZWRlcmhhbmEgc2VwZXJ0aSBtZWxlbXBhciBkYWR1IGRhbiBtZWxlbXBhciBrb2lu4oCUZHVhIHRpbmRha2FuIHlhbmcgdGV0YXAgc2VwZW51aG55YSBpbmRlcGVuZGVuIHRlcmxlcGFzIGRhcmkgaGFzaWxueWEuDQoNClVudHVrIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzIGtlamFkaWFuIGluZGVwZW5kZW4gdGVyamFkaSBiZXJzYW1hYW4sIGtpdGEgY3VrdXAgbWVuZ2FsaWthbiBwcm9iYWJpbGl0YXMgZGFyaSBzZXRpYXAgcGVyaXN0aXdhLCBtZW5naWt1dGkgZm9ybXVsYSAkUChBIFx0ZXh0eyBkYW4gfSBCKSA9IFAoQSkgXHRpbWVzIFAoQikkLiBGb3JtdWxhIGluaSBlc2Vuc2lhbCB1bnR1ayBtZW5lbnR1a2FuIHByb2JhYmlsaXRhcyBnYWJ1bmdhbiAoam9pbnQgcHJvYmFiaWxpdGllcykga2V0aWthIHBlcmlzdGl3YS1wZXJpc3Rpd2EgdGVyc2VidXQgdGVyamFkaSBzZWNhcmEgaW5kZXBlbmRlbi5TZWJhbGlrbnlhLCBLZWphZGlhbiBEZXBlbmRlbiB0ZXJqYWRpIGtldGlrYSBoYXNpbCBkYXJpIHNhdHUgcGVyaXN0aXdhIG1lbWVuZ2FydWhpIHByb2JhYmlsaXRhcyBwZXJpc3Rpd2EgYmVyaWt1dG55YS4NCg0KVmlkZW8gaW5pIG1lbmplbGFza2FuIGtvbnNlcCBpbmkgbWVuZ2d1bmFrYW4gY29udG9oIHBlbmdhbWJpbGFuIGtlbGVyZW5nIHRhbnBhIHBlbmdlbWJhbGlhbiAod2l0aG91dCByZXBsYWNlbWVudCkuIEtldGlrYSBzZWJ1YWggaXRlbSBkaWtlbHVhcmthbiBkYXJpIHRvdGFsIHNhbXBlbCwganVtbGFoIHRvdGFsIGhhc2lsIHlhbmcgbXVuZ2tpbiBiZXJ1YmFoLCB5YW5nIGJlcmFydGkgcHJvYmFiaWxpdGFzIHVudHVrIHBlbmdhbWJpbGFuIGJlcmlrdXRueWEgaGFydXMgZGlzZXN1YWlrYW4uIEluaSBtZW55b3JvdGkgbWVuZ2FwYSBzYW5nYXQgcGVudGluZyB1bnR1ayBtZW5nZW5hbGkga2VqYWRpYW4gZGVwZW5kZW7igJRtZW5nZ3VuYWthbiBmb3JtdWxhIHVudHVrIGtlamFkaWFuIGluZGVwZW5kZW4gZGFsYW0gc2l0dWFzaSBpbmkgYWthbiBtZW5nYXJhaCBwYWRhIGhhc2lsIHlhbmcgc2FsYWguDQoNClVudHVrIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzIGtlamFkaWFuIGRlcGVuZGVuLCBraXRhIG1lbmdhbGlrYW4gcHJvYmFiaWxpdGFzIHBlcmlzdGl3YSBwZXJ0YW1hIGRlbmdhbiBwcm9iYWJpbGl0YXMgeWFuZyBkaXNlc3VhaWthbiB1bnR1ayBwZXJpc3Rpd2Ega2VkdWEsIHlhbmcgbWVuY2VybWlua2FuIGp1bWxhaCBzaXNhIGhhc2lsIHlhbmcgZGlwZXJiYXJ1aS4gTWVuZ2FtYmlsIGl0ZW0gdGFucGEgcGVuZ2VtYmFsaWFuIGFkYWxhaCBza2VuYXJpbyBrbGFzaWsgeWFuZyBtZW51bmp1a2thbiBjYXJhIGtlcmphIGtlamFkaWFuIGRlcGVuZGVuLiBQYWRhIGFraGlybnlhLCBwZXJiZWRhYW4gdXRhbWEgYW50YXJhIGtlZHVhIGtvbnNlcCB0ZXJzZWJ1dCB0ZXJsZXRhayBwYWRhIGFwYWthaCBoYXNpbCBzYXR1IHBlcmlzdGl3YSBtZW1lbmdhcnVoaSBwZXJpc3Rpd2EgbGFpbi4NCg0KS2VqYWRpYW4gaW5kZXBlbmRlbiB0ZXRhcCB0aWRhayB0ZXJwZW5nYXJ1aCBzYXR1IHNhbWEgbGFpbiwgc2VtZW50YXJhIGtlamFkaWFuIGRlcGVuZGVuIG1lbWVybHVrYW4gcGVueWVzdWFpYW4gcHJvYmFiaWxpdGFzIHNlY2FyYSBiZXJrZWxhbmp1dGFuIHNldGVsYWggc2V0aWFwIGhhc2lsLg0KDQojIyBLZWphZGlhbiBJbmRlcGVuZGVuIChJbmRlcGVuZGVudCBFdmVudHMpDQoNCktlamFkaWFuIGluZGVwZW5kZW4gdGVyamFkaSBrZXRpa2EgdGVyamFkaW55YSBwZXJpc3Rpd2EgcGVydGFtYSB0aWRhayBtZW1lbmdhcnVoaSBwcm9iYWJpbGl0YXMgdGVyamFkaW55YSBwZXJpc3Rpd2Ega2VkdWEuDQoNCiMjIyBDb250b2g6DQoNCk1lbGVtcGFyIGRhZHUgZGFuIG1lbGVtcGFyIGtvaW4uIEhhc2lsIGRhZHUgKG1pc2FsbnlhLCBtZW5kYXBhdCA1KSB0aWRhayBtZW5pbmdrYXRrYW4gYXRhdSBtZW51cnVua2FuIHByb2JhYmlsaXRhcyBrb2luIG1lbmRhcmF0IHBhZGEgSGVhZHMuDQoNCiMjIyBGb3JtdWxhIFBlcmthbGlhbjoNCg0KVW50dWsgbWVuZ2hpdHVuZyBwcm9iYWJpbGl0YXMgZHVhIGtlamFkaWFuIGluZGVwZW5kZW4gKEEgZGFuIEIpIHRlcmphZGkgYmVyc2FtYWFuLCBBbmRhIGN1a3VwIG1lbmdhbGlrYW4gcHJvYmFiaWxpdGFzIG1hc2luZy1tYXNpbmc6JCRQKEEgXHRleHR7IGRhbiB9IEIpID0gUChBKSBcdGltZXMgUChCKSQkLg0KDQojIyMgQ29udG9oIFBlcmhpdHVuZ2FuOg0KDQpQcm9iYWJpbGl0YXMgbWVsZW1wYXIgZGFkdSBtZW5kYXBhdCA1ICgkUChBKSA9IDEvNiQpIGRhbiBtZWxlbXBhciBrb2luIG1lbmRhcGF0IEhlYWRzICgkUChCKSA9IDEvMiQpIGFkYWxhaDokJFAoNSBcdGV4dHsgZGFuIEhlYWRzfSkgPSAoMS82KSBcdGltZXMgKDEvMikgPSAxLzEyJCQuDQoNCiMjIEtlamFkaWFuIERlcGVuZGVuIChEZXBlbmRlbnQgRXZlbnRzKQ0KDQpLZWphZGlhbiBkZXBlbmRlbiB0ZXJqYWRpIGtldGlrYSB0ZXJqYWRpbnlhIHBlcmlzdGl3YSBwZXJ0YW1hIG1lbWVuZ2FydWhpIHByb2JhYmlsaXRhcyB0ZXJqYWRpbnlhIHBlcmlzdGl3YSBrZWR1YS4NCg0KIyMjIEtvbnRla3MgVW11bToNCg0KS2VqYWRpYW4gZGVwZW5kZW4gc2VyaW5nIHRlcmphZGkgcGFkYSBzaXR1YXNpIHBlbmdhbWJpbGFuIHRhbnBhIHBlbmdlbWJhbGlhbiAod2l0aG91dCByZXBsYWNlbWVudCksIHlhbmcgYmVyYXJ0aSBpdGVtIHlhbmcgZGlhbWJpbCB0aWRhayBkaW1hc3Vra2FuIGtlbWJhbGkga2UgZGFsYW0gdG90YWwgc2FtcGVsLiBIYWwgaW5pIG1lbnllYmFia2FuIHByb2JhYmlsaXRhcyBiZXJ1YmFoIHNldGVsYWggc2V0aWFwIHBlbmdhbWJpbGFuDQoNCiMjIyBGb3JtdWxhIFByb2JhYmlsaXRhcyBCZXJzeWFyYXQ6DQoNClVudHVrIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzIGR1YSBrZWphZGlhbiBkZXBlbmRlbiAoQSBkYW4gQikgdGVyamFkaSwgZ3VuYWthbiBydW11cyBiZXJpa3V0OiQkUChBIFx0ZXh0eyBkYW4gfSBCKSA9IFAoQSkgXHRpbWVzIFAoQiBcdGV4dHsgc2V0ZWxhaCB9IEEgXHRleHR7IHRlcmphZGl9KSQkDQoNCiMjIyBDb250b2ggUGVyaGl0dW5nYW4gKFRhbnBhIFBlbmdlbWJhbGlhbik6DQoNCk1pc2FsbnlhLCBtZW5nYW1iaWwga2VsZXJlbmcgZGFyaSBrb3RhayB5YW5nIGJlcmlzaSAxMCBrZWxlcmVuZyAoNyBIaWphdSwgMyBCaXJ1KS4NCg0KLSAgICRQKFx0ZXh0e0hpamF1IFBlcnRhbWF9KSQ6ICQ3LzEwJA0KDQotICAgJFAoXHRleHR7QmlydSBLZWR1YX0pJDogU2V0ZWxhaCBzYXR1IGtlbGVyZW5nIGhpamF1IGRpYW1iaWwsIHRlcnNpc2EgOSBrZWxlcmVuZy4gSnVtbGFoIGtlbGVyZW5nIGJpcnUgdGV0YXAgMy4gSmFkaSwgcHJvYmFiaWxpdGFzbnlhIGJlcnViYWggbWVuamFkaSAkMy85JC4NCg0KLSAgIFByb2JhYmlsaXRhcyBHYWJ1bmdhbjogJFAoXHRleHR7SGlqYXUgbGFsdSBCaXJ1fSkgPSAoNy8xMCkgXHRpbWVzICgzLzkpID0gNy8zMCQNCg0KIyBVbmlvbiBvZiBFdmVudHMNCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL3ZxS0FiaENxU1RjP3NpPUx1NGVkckdRb0ZwcXpCY2MiKQ0KYGBgDQoNCktvbnNlcCB1dGFtYSBkYWxhbSB2aWRlbyBpbmkgYWRhbGFoIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzIFVuaW9uIG9mIEV2ZW50cywgeWFuZyBtZW5nYWN1IHBhZGEgcGVsdWFuZyBzYWxhaCBzYXR1IGRhcmkgZHVhIHBlcmlzdGl3YSBhdGF1IGxlYmloIGFrYW4gdGVyamFkaSAoZGl0YW5kYWkgZGVuZ2FuIGthdGEga3VuY2kgIk9SIikuIFBlcmhpdHVuZ2FuIGluaSBkaW11bGFpIGRlbmdhbiBtZW5kZWZpbmlzaWthbiBSdWFuZyBTYW1wZWwsIHNlcGVydGkgMzYga2VtdW5na2luYW4gaGFzaWwgc2FhdCBtZWxlbXBhciBkdWEgZGFkdSwgZGFuIHByb2JhYmlsaXRhcyBzZWRlcmhhbmEgZGFyaSBzZXRpYXAgcGVyaXN0aXdhLg0KDQpSdW11cyBpbnRpIHVudHVrIFVuaW9uIG9mIEV2ZW50cyAoQSBhdGF1IEIpIGFkYWxhaDogJCRQKEEgXHRleHR7IGF0YXUgfSBCKSA9IFAoQSkgKyBQKEIpIC0gUChBIFx0ZXh0eyBkYW4gfSBCKSQkIEJhZ2lhbiB0ZXJwZW50aW5nIGRhcmkgZm9ybXVsYSBpbmkgYWRhbGFoIHBlbmd1cmFuZ2FuIGlzdGlsYWggJFAoQSBcdGV4dHsgZGFuIH0gQikkLCB5YW5nIGRpa2VuYWwgc2ViYWdhaSBJcmlzYW4gUGVyaXN0aXdhIChJbnRlcnNlY3Rpb24pLiBJc3RpbGFoIGluaSBoYXJ1cyBkaWt1cmFuZ2kga2FyZW5hIGtldGlrYSAkUChBKSQgZGFuICRQKEIpJCBkaWp1bWxhaGthbiwgaGFzaWwgeWFuZyB0dW1wYW5nIHRpbmRpaCAoeWFuZyBkaW1pbGlraSBvbGVoIEEgZGFuIEIpIHRlbGFoIGRpaGl0dW5nIGR1YSBrYWxpIChkdXBsaWNhdGUgb3V0Y29tZXMpLiBQZW5ndXJhbmdhbiBpcmlzYW4gaW5pIG1lbWFzdGlrYW4gYmFod2Egc2V0aWFwIGhhc2lsIGhhbnlhIGRpaGl0dW5nIHNhdHUga2FsaSwgc2VoaW5nZ2EgbWVuZ2hhc2lsa2FuIHByb2JhYmlsaXRhcyBVbmlvbiB5YW5nIGJlbmFyLiBEZW5nYW4ga2F0YSBsYWluLCBVbmlvbiBvZiBFdmVudHMgbWVuZ2FqYXJpIGtpdGEgY2FyYSBtZW5nZ2FidW5na2FuIHByb2JhYmlsaXRhcyB0YW5wYSBtZWxha3VrYW4gcGVuZ2hpdHVuZ2FuIGdhbmRhIHRlcmhhZGFwIGFyZWEgeWFuZyB0dW1wYW5nIHRpbmRpaC4NCg0KIyBFeGNsdXNpdmUgYW5kIEV4aGF1c3RpdmUNCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2Y3YWdUdjluQTVrP3NpPU5VZ2otVWhwcUQ5czFiWUEiKQ0KYGBgDQoNClZpZGVvIHRlcnNlYnV0IGJlcmlzaSB0ZW50YW5nIGtsYXNpZmlrYXNpIHBlcmlzdGl3YSBkZW5nYW4gYmVyZm9rdXMgcGFkYSBkdWEga29uc2VwIHlhbmcgbWVuZGVmaW5pc2lrYW4gaHVidW5nYW4gYW50YXIgaGFzaWwgZGFsYW0gUnVhbmcgU2FtcGVsLiBNdXR1YWxseSBFeGNsdXNpdmUgRXZlbnRzIChTYWxpbmcgTGVwYXMpIGRpYXJ0aWthbiBzZWJhZ2FpIHBlcmlzdGl3YSB5YW5nIHRpZGFrIG1lbWlsaWtpIHR1bXBhbmcgdGluZGloIHNhbWEgc2VrYWxpOyB0ZXJqYWRpbnlhIHNhdHUgcGVyaXN0aXdhIHNlY2FyYSBrZXRhdCBtZW5jZWdhaCB0ZXJqYWRpbnlhIHBlcmlzdGl3YSBsYWluLCB5YW5nIHNlY2FyYSBtYXRlbWF0aXMgYmVyYXJ0aSBwcm9iYWJpbGl0YXMgaXJpc2FuIG1lcmVrYSBhZGFsYWggbm9sLiBTZWJhbGlrbnlhLCBFeGhhdXN0aXZlIEV2ZW50cyAoS29sZWt0aWYgTGVuZ2thcCkgYWRhbGFoIHNlcmFuZ2thaWFuIHBlcmlzdGl3YSB5YW5nLCBrZXRpa2EgZGlrb21iaW5hc2lrYW4sIG1lbmNha3VwIHNlbHVydWggUnVhbmcgU2FtcGVsIHNlY2FyYSBrb2xla3RpZi4gUGVudGluZ255YSBrb25zZXAgRXhoYXVzdGl2ZSBhZGFsYWggYmFod2EganVtbGFoIHByb2JhYmlsaXRhcyBkYXJpIHNlbXVhIHBlcmlzdGl3YSBkYWxhbSBzZXQgdGVyc2VidXQgaGFydXMgc2FtYSBkZW5nYW4gc2F0dS4gUGVtYWhhbWFuIHlhbmcgamVsYXMgdGVudGFuZyBrZWR1YSBrbGFzaWZpa2FzaSBpbmkgc2FuZ2F0IGZ1bmRhbWVudGFsLCBrYXJlbmEgbWVtYW5kdSBraXRhIGRhbGFtIHBlbmVyYXBhbiBBdHVyYW4gUGVuanVtbGFoYW4geWFuZyBiZW5hcuKAlG1lbmdndW5ha2FuICRQKEEpICsgUChCKSQgdW50dWsgcGVyaXN0aXdhIE11dHVhbGx5IEV4Y2x1c2l2ZeKAlGRhbiBtZW1hc3Rpa2FuIGJhaHdhIGFuYWxpc2lzIHByb2JhYmlsaXRhcyBraXRhIG1lbmNha3VwIHNlbXVhIGhhc2lsIHlhbmcgbXVuZ2tpbi4NCg0KIyBCaW5vbWlhbCBFeHBlcmltZW50DQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9uUnVRQXRhakpZaz9zaT03TldvRFBtS0pKeWZJWmd3IikNCmBgYA0KDQpFa3NwZXJpbWVuIEJpbm9taWFsIGFkYWxhaCBtb2RlbCBkaXN0cmlidXNpIHByb2JhYmlsaXRhcyBkaXNrcmV0IHlhbmcgcGFsaW5nIGtldGF0IGRhbiBlc2Vuc2lhbC4gTW9kZWwgaW5pIG1lbXVuZ2tpbmthbiBwZW5naGl0dW5nYW4gcHJvYmFiaWxpdGFzIG1lbmRhcGF0a2FuIHNlanVtbGFoIGtlYmVyaGFzaWxhbiAoaykgZGFsYW0gc2VqdW1sYWggcGVyY29iYWFuIChuKSB5YW5nIGlkZW50aWsuDQoNCiMjIFByYXN5YXJhdDogRW1wYXQgS29uZGlzaSBCaW5vbWlhbCBTZXR0aW5nDQoNClBlbmVyYXBhbiBmb3JtdWxhIEJpbm9taWFsIHNlcGVudWhueWEgdGVyZ2FudHVuZyBwYWRhIHZhbGlkaXRhcyBla3NwZXJpbWVuLCB5YW5nIGhhcnVzIG1lbWVudWhpIEVtcGF0IEtvbmRpc2kgQmlub21pYWwgU2V0dGluZyBiZXJpa3V0Og0KDQp8IEtyaXRlcmlhIHwgU2ltYm9sIHwgS2V0ZXJhbmdhbiBNZW5kYWxhbSB8DQp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqQioqIChCaW5hcnkpIHwgIHwgU2V0aWFwIHBlcmNvYmFhbiBoYW55YSBtZW1pbGlraSAqKmR1YSBoYXNpbCB5YW5nIG11bmdraW4qKjogKipTdWtzZXMgKFMpKiogYXRhdSAqKkdhZ2FsIChGKSoqLiB8DQp8ICoqSSoqIChJbmRlcGVuZGVudCkgfCAgfCBIYXNpbCBzZXRpYXAgcGVyY29iYWFuICoqaGFydXMgaW5kZXBlbmRlbioqLiBJbmkgYmVyYXJ0aSAkUChTKSQgcGFkYSBwZXJjb2JhYW4ga2UtMTAgc2FtYSBkZW5nYW4gJFAoUykkIHBhZGEgcGVyY29iYWFuIGtlLTEuIChDb250b2g6IFBlcmNvYmFhbiBkZW5nYW4gcGVuZ2VtYmFsaWFuKS4gfA0KfCAqKk4qKiAoTnVtYmVyIG9mIFRyaWFscykgfCAkbiQgfCBKdW1sYWggcGVyY29iYWFuIGhhcnVzICoqdGV0YXAqKiBkYW4gZGl0ZW50dWthbiBkaSBhd2FsLiB8DQp8ICoqUyoqIChTdWNjZXNzIFByb2JhYmlsaXR5KSB8ICRwJCB8IFByb2JhYmlsaXRhcyBzdWtzZXMgJHAkIGhhcnVzICoqa29uc3RhbioqIGRpIHNldGlhcCBwZXJjb2JhYW4uIEFraWJhdG55YSwgcHJvYmFiaWxpdGFzIGdhZ2FsIGFkYWxhaCAkcSA9IDEgLSBwJC4gfA0KDQojIyBGb3JtdWxhIFByb2JhYmlsaXRhcyBCaW5vbWlhbA0KDQpTZXRlbGFoIGtvbmRpc2kgQmlub21pYWwgU2V0dGluZyB0ZXJwZW51aGksIHByb2JhYmlsaXRhcyBtZW5kYXBhdGthbiB0ZXBhdCAkayQgc3Vrc2VzIGRhbGFtICRuJCBwZXJjb2JhYW4gZGloaXR1bmcgbWVuZ2d1bmFrYW4gZm9ybXVsYSBiZXJpa3V0OiQkUChYPWspID0gXGJpbm9te259e2t9IHBeayBxXntuLWt9JCQgUGVuamVsYXNhbiBLb21wb25lbiBGb3JtdWxhOg0KDQp8IEtvbXBvbmVuIHwgTmFtYSB8IEZ1bmdzaSB8DQp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICRcYmlub217bn17a30kIHwgKipLb2VmaXNpZW4gQmlub21pYWwqKiBhdGF1IEtvbWJpbmFzaSB8IE1lbmdoaXR1bmcganVtbGFoIGNhcmEgYmVyYmVkYSBkaSBtYW5hICRrJCBzdWtzZXMgZGFwYXQgdGVyamFkaSBkYWxhbSAkbiQgcGVyY29iYWFuLCBtZW5nYWJhaWthbiB1cnV0YW4uIEZvcm11bGEga29tYmluYXNpIGl0dSBzZW5kaXJpIGFkYWxhaDogJCRcYmlub217bn17a30gPSBcZnJhY3tuIX17ayEobi1rKSF9JCQgfA0KfCAkcF5rJCB8IFByb2JhYmlsaXRhcyBTdWtzZXMgfCBQcm9iYWJpbGl0YXMgbWVuZGFwYXRrYW4gJGskIHN1a3Nlcy4gfA0KfCAkcV57bi1rfSQgfCBQcm9iYWJpbGl0YXMgR2FnYWwgfCBQcm9iYWJpbGl0YXMgbWVuZGFwYXRrYW4gJG4kIG1pbnVzICRrJCBrZWdhZ2FsYW4uIEthcmVuYSAkcSA9IDEtcCQsIGluaSBqdWdhIGRpdHVsaXMgJCgxLXApXntuLWt9JC4gfA0KDQojIyBOaWxhaSBIYXJhcGFuIGRhbiBWYXJpYW5zaSAoU3RhdGlzdGlrIEJpbm9taWFsKQ0KDQpTZWxhaW4gbWVuZ2hpdHVuZyBwcm9iYWJpbGl0YXMgc3Blc2lmaWssIERpc3RyaWJ1c2kgQmlub21pYWwganVnYSBtZW1pbGlraSBmb3JtdWxhIHVudHVrIG1lbmdoaXR1bmcgbmlsYWkgc3RhdGlzdGlrIHV0YW1hIGRhcmkgZGlzdHJpYnVzaSB0ZXJzZWJ1dDoNCg0KfCBTdGF0aXN0aWsgfCBGb3JtdWxhIHwgS2V0ZXJhbmdhbiB8DQp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IE5pbGFpIEhhcmFwYW4gKE1lYW4pIHwgJCRcbXUgPSBFKFgpID0gbiBcY2RvdCBwJCQgfCBSYXRhLXJhdGEgYXRhdSBqdW1sYWggc3Vrc2VzIHlhbmcgZGloYXJhcGthbiBkYWxhbSAkbiQgcGVyY29iYWFuLiB8DQp8IFZhcmlhbnNpIHwgJCRcc2lnbWFeMiA9IG4gXGNkb3QgcCBcY2RvdCBxJCQgfCBNZW5ndWt1ciBzZWJlcmFwYSBiZXNhciBwZW55ZWJhcmFuIGRhdGEgZGFsYW0gZGlzdHJpYnVzaS4gfA0KfCBTaW1wYW5nYW4gQmFrdSAoU3RhbmRhcmQgRGV2aWF0aW9uKSB8ICQkXHNpZ21hID0gXHNxcnR7biBcY2RvdCBwIFxjZG90IHF9JCQgfCBBa2FyIGt1YWRyYXQgZGFyaSBWYXJpYW5zaS4gfA0KDQojIEJpbm9taWFsIERpc3RyaWJ1dGlvbg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvWTItdlNXRm1neUk/c2k9RHBqS2Zuam1lMTBRYlJSRSIpDQpgYGANCg0KVmlkZW8gdGVyc2VidXQgbWVuamVsYXNrYW4gRGlzdHJpYnVzaSBCaW5vbWlhbCBzZWJhZ2FpIGZ1bmdzaSB5YW5nIGJlbnR1a255YSBzZXBlbnVobnlhIGJlcmdhbnR1bmcgcGFkYSBkdWEgcGFyYW1ldGVyIGludGlueWE6ICRuJCAoanVtbGFoIHBlcmNvYmFhbikgZGFuICRwJCAocHJvYmFiaWxpdGFzIHN1a3NlcykuIERpc3RyaWJ1c2kgQmlub21pYWwsIHlhbmcgcHJvYmFiaWxpdGFzbnlhIGRpaGl0dW5nIG1lbmdndW5ha2FuIGZvcm11bGEgYmlub21pYWwgdW50dWsgc2V0aWFwIG5pbGFpICRrJCwgZGl2aXN1YWxpc2FzaWthbiBtZW5nZ3VuYWthbiBncmFmaWsgYmF0YW5nIChiYXIgY2hhcnQpIGRlbmdhbiBuaWxhaSBrIChqdW1sYWggc3Vrc2VzKSBwYWRhIHN1bWJ1LXggZGFuIHByb2JhYmlsaXRhcyBwYWRhIHN1bWJ1LXkuIEFuYWxpc2lzIHZpc3VhbCBpbmkgbWVuZ3VuZ2thcGthbiBkdWEgdGVtdWFuIGt1bmNpOg0KDQotICAgUGVuZ2FydWggJG4kIChVa3VyYW4gU2FtcGVsKTogU2VpcmluZyAkbiQgbWVuaW5na2F0LCBiZW50dWsgZGlzdHJpYnVzaSBCaW5vbWlhbCBzZWNhcmEgYmVydGFoYXAgYWthbiBtZW5kZWthdGkgRGlzdHJpYnVzaSBOb3JtYWwgeWFuZyBzaW1ldHJpcywgdGVycHVzYXQgZGkgc2VraXRhciBuaWxhaSBoYXJhcGFuICgkXG11ID0gbiBcY2RvdCBwJCkuDQoNCi0gICBQZW5nYXJ1aCAkcCQgKFByb2JhYmlsaXRhcyBTdWtzZXMpOiBOaWxhaSAkcCQgbWVuZ29udHJvbCBrZW1pcmluZ2FuIChza2V3bmVzcykgZGlzdHJpYnVzaS4gSmlrYSAkcCA9IDAuNSQsIGRpc3RyaWJ1c2kgYWthbiBzaW1ldHJpcyAoYmVyYmVudHVrIGxvbmNlbmcpLiBKaWthICRwJCBtZW5qYXVoaSAwLjUgKG1pc2FsbnlhICRwPTAuMSQgYXRhdSAkcD0wLjgkKSwgZGlzdHJpYnVzaSBtZW5qYWRpIG1pcmluZyAoc2tld2VkKSwgZGFuIGtlbWlyaW5nYW4gc2VsYWx1IG1lbmphdWggZGFyaSBuaWxhaSB5YW5nIGt1cmFuZyBtdW5na2luIChtaXNhbG55YSwgJHA9MC4xJCBtaXJpbmcga2Uga2FuYW4ga2FyZW5hIHN1a3NlcyBqYXJhbmcgdGVyamFkaSkuDQoNCk9sZWgga2FyZW5hIGl0dSwgdmlkZW8gaW5pIG1lbnlpbXB1bGthbiBkZW5nYW4gYXR1cmFuIHBlZG9tYW4gKE5vcm1hbCBBcHByb3hpbWF0aW9uKSBiYWh3YSBkaXN0cmlidXNpIEJpbm9taWFsIGRhcGF0IGRpYXN1bXNpa2FuIG1lbmRla2F0aSBOb3JtYWwgamlrYSBrb25kaXNpICRuIFxjZG90IHAgXGdlcSAxMCQgZGFuICRuIFxjZG90ICgxLXApIFxnZXEgMTAkIHRlcnBlbnVoaSwgeWFuZyBtZW1iZXJpa2FuIGxhbmRhc2FuIGthcGFuIG1vZGVsIHlhbmcgbGViaWggc2VkZXJoYW5hIChEaXN0cmlidXNpIE5vcm1hbCkgZGFwYXQgZGlndW5ha2FuIHVudHVrIG1lbXBlcmtpcmFrYW4gcHJvYmFiaWxpdGFzIEJpbm9taWFsLg0KDQoNCiMgUmVmZXJlbmNlcw0KDQotICAgPGh0dHBzOi8vYm9va2Rvd24ub3JnL2RzY2llbmNlbGFicy9pbnRyb19zdGF0aXN0aWNzLzA2LUVzc2VudGlhbHNfb2ZfUHJvYmFiaWxpdHkuaHRtbCNyZWZlcmVuY2VzPg0K