Perhitungan MoE
untuk Pengambilan Sampel Probabilitas
Margin of Error (MoE) adalah konsep statistik yang mengukur ketidak
pastian dalam hasil survei atau estimasi berbasis sampel. Konsep ini
memberikan rentang di mana parameter populasi sebenarnya cenderung
menurun.
Secara umum, MoE dihitung dengan rumus: \[
MoE = Z \times \frac{\sigma}{\sqrt{n}}
\] Dimana:
\(Z\) = 1.96 (untuk tingkat
kepercayaan 95%)
\(n\) = 100 (jumlah
sampel)
\(\sigma\) = Simpangan baku
sampel
Simpangan baku (\(\sigma\))
dihitung dengan rumus: \[
\sigma = \sqrt{\frac{\sum (X_i - \bar{X})^2}{n-1}}
\]
Dimana:
Simple Random
Sampling (SRS)
## [1] "Simpangan Baku (SRS): 574312"
Diketahui:
Maka:
\[
MoE = 1.96 \times \frac{574.312}{\sqrt{100}}\\
MoE = 1.96 \times \frac{574.312}{10}\\
MoE = 112.565,2\\
\]
## [1] "MoE SRS: 112565.2"
Hasil ini berarti bahwa perkiraan rata-rata pengeluaran mahasiswa
dari sampel SRS memiliki kemungkinan selisih sekitar Rp 112.565,2 dari
rata-rata pengeluaran mahasiswa di populasi sebenarnya. Dengan tingkat
kepercayaan 95%, kita bisa mengatakan bahwa jika penelitian ini diulang
berkali-kali dengan metode yang sama, rata-rata pengeluaran mahasiswa
yang dihitung dari sampel akan berada dalam rentang ± Rp 112.565,2 dari
nilai sebenarnya sebanyak 95% dari waktu.
Dengan kata lain:
Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran
mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa
rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada
dalam rentang antara Rp 1.387.435 dan Rp 1.612.565.
Stratified
Random Sampling
## [1] "Simpangan Baku Strata: Rp 579233.97"
Diketahui:
\(Z\) = 1.96 (untuk tingkat
kepercayaan 95%)
\(n\) = 100 (jumlah
sampel)
\(\sigma\) = Rp
579.233,97
Maka:
\[
MoE = 1.96 \times \frac{579.233,97}{\sqrt{100}}\\
MoE = 1.96 \times \frac{579.233,97}{10}\\
MoE = 113.529,86\\
\]
## [1] "Margin of Error (MoE): Rp 113529.86"
Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung
dari sampel metode Stratified Random Sampling memiliki kemungkinan
selisih sekitar Rp 113.529,86 dari rata-rata pengeluaran mahasiswa di
populasi sebenarnya. Dengan tingkat kepercayaan 95%, kita bisa
mengatakan bahwa jika penelitian ini diulang berkali-kali dengan metode
yang sama, rata-rata pengeluaran mahasiswa yang dihitung dari sampel
akan berada dalam rentang ± Rp 113.529,86 dari nilai sebenarnya sebanyak
95% dari waktu.
Dengan kata lain:
Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran
mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa
rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada
dalam rentang antara Rp 1.386.470,14 hingga Rp 1.613.529,86.
Systematic
Sampling
## [1] "Simpangan Baku Systematic: Rp 578276.14"
Diketahui:
\(Z\) = 1.96 (untuk tingkat
kepercayaan 95%)
\(n\) = 100 (jumlah
sampel)
\(\sigma\) = Rp
578.276,14
Maka:
\[
MoE = 1.96 \times \frac{578.276,14}{\sqrt{100}}\\
MoE = 1.96 \times \frac{578.276,14}{10}\\
MoE = 113.342,12\\
\]
## [1] "MoE Sampel Sistematis: 113342.12"
Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung
dari sampel metode Systematic Sampling memiliki kemungkinan selisih
sekitar Rp 113.342,12 dari rata-rata pengeluaran mahasiswa di populasi
sebenarnya.Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa
jika penelitian ini diulang berkali-kali dengan metode yang sama,
rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada
dalam rentang ± Rp 113.342,12 dari nilai sebenarnya sebanyak 95% dari
waktu.
Dengan kata lain:
Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran
mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa
rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada
dalam rentang antara Rp 1.386.657,88 hingga Rp 1.613.342,12.
Cluster
Sampling
## [1] "Simpangan Baku Cluster: Rp 564600.62"
Diketahui:
\(Z\) = 1.96 (untuk tingkat
kepercayaan 95%)
\(n\) = 100 (jumlah
sampel)
\(\sigma\) = Rp
564.600,62
Maka:
\[
MoE = 1.96 \times \frac{564.600,62}{\sqrt{100}}\\
MoE = 1.96 \times \frac{564.600,62}{10}\\
MoE = 110.661,72\\
\]
## [1] "MoE Cluster Sampling: Rp 110661.72"
Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung
dari sampel metode Cluster Sampling memiliki kemungkinan selisih sekitar
Rp 110.661,72 dari rata-rata pengeluaran mahasiswa di populasi
sebenarnya. Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa
jika penelitian ini diulang berkali-kali dengan metode yang sama,
rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada
dalam rentang ± Rp 110.661,72 dari nilai sebenarnya sebanyak 95% dari
waktu.
Dengan kata lain:
Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran
mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa
rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada
dalam rentang antara Rp 1.389.338,28 hingga Rp 1.610.661,72.
Multi-Stage
Sampling
## [1] "Simpangan Baku Cluster: Rp 584690.4"
Diketahui:
\(Z\) = 1.96 (untuk tingkat
kepercayaan 95%)
\(n\) = 100 (jumlah
sampel)
\(\sigma\) = Rp
584.690,4
Maka:
\[
MoE = 1.96 \times \frac{584.690,4}{\sqrt{100}}\\
MoE = 1.96 \times \frac{584.690,4}{10}\\
MoE = 114.599,32\\
\]
## [1] "MoE Multi Stage: Rp 114599.32"
Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung
dari sampel metode Multi-Stage Sampling memiliki kemungkinan selisih
sekitar Rp 114.599,32 dari rata-rata pengeluaran mahasiswa di populasi
sebenarnya. Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa
jika penelitian ini diulang berkali-kali dengan metode yang sama,
rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada
dalam rentang ± Rp 114.599,32 dari nilai sebenarnya sebanyak 95% dari
waktu.
Dengan kata lain:
Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran
mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa
rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada
dalam rentang antara Rp 1.385.400,68 hingga Rp 1.614.599,32.
Analisis Bias
dalam Pengambilan Sampel Non-Probabilitas
Convenience
Sampling
Sumber Bias:
Jika hanya mahasiswa yang berada di satu kantin universitas
diwawancarai, maka sampel ini tidak mencerminkan mahasiswa yang lebih
sering memasak di rumah atau makan di tempat lain.
Dampak:
Hasil survei kemungkinan besar tidak dapat digeneralisasi ke
seluruh populasi mahasiswa.
Data yang dikumpulkan mungkin lebih menggambarkan kebiasaan
konsumsi mahasiswa tertentu daripada populasi yang lebih luas.
Perbedaan dengan Probability Sampling:
Dalam Probability Sampling, setiap individu dalam populasi memiliki
peluang yang sama untuk terpilih, sehingga bias akibat pemilihan
berdasarkan kenyamanan dapat dihindari.
Judgmental
(Purposive) Sampling
Sumber Bias:
Jika hanya mahasiswa ekonomi yang diwawancarai dalam studi
pengeluaran makanan karena dianggap lebih paham tentang keuangan,
hasilnya bisa bias karena mahasiswa dari jurusan lain mungkin memiliki
pola pengeluaran yang berbeda.
Dampak:
Penelitian mungkin hanya mencerminkan karakteristik kelompok
tertentu dan tidak mencerminkan populasi mahasiswa secara
keseluruhan.
Generalisasi menjadi terbatas karena pemilihan subjek yang sudah
dipengaruhi oleh subjektivitas peneliti.
Perbedaan dengan Probability Sampling:
Probability Sampling menggunakan metode acak, yang menghindari
pengaruh subjektivitas peneliti dalam pemilihan sampel.
Quota Sampling
Sumber Bias:
Dalam survei pengeluaran makanan, kuota dibuat berdasarkan gender
(misalnya 50% laki-laki, 50% perempuan), tetapi responden dipilih
berdasarkan siapa yang tersedia terlebih dahulu.
Dampak:
Meskipun terlihat seimbang dalam proporsi, individu dalam setiap
kategori mungkin tidak mewakili keseluruhan populasi dari kategori
tersebut.
Bisa ada bias dari kelompok yang lebih mudah dijangkau, sementara
kelompok yang sulit diakses kurang terwakili.
Perbedaan dengan Probability Sampling:
Stratified Random Sampling dalam Probability Sampling lebih unggul
karena pemilihan sampel dalam setiap strata tetap dilakukan secara acak,
bukan berdasarkan kemudahan akses.
Snowball
Sampling
Sumber Bias:
Jika seorang mahasiswa direkrut untuk wawancara dan kemudian
merekomendasikan teman-temannya untuk ikut serta, maka kemungkinan besar
semua peserta survei berasal dari kelompok pertemanan yang serupa dalam
gaya hidup dan pengeluaran.
Dampak:
Hasil survei tidak mewakili populasi mahasiswa secara keseluruhan
karena hanya melibatkan kelompok yang saling terhubung.
Variasi dalam data menjadi lebih kecil dari yang seharusnya
karena hanya mencerminkan kelompok tertentu.
Perbedaan dengan Probability Sampling:
Dalam Simple Random Sampling, pemilihan dilakukan tanpa bergantung
pada jaringan sosial, sehingga distribusi sampel lebih beragam dan
representatif.
Perbandingan Bias
dalam Non-Probability dengan Probability Sampling
| Peluang Terpilih |
Tidak semua individu memiliki peluang yang sama |
Semua individu memiliki peluang yang diketahui untuk dipilih |
| Bias dalam Pemilihan |
Tinggi, tergantung aksesibilitas dan subjektivitas |
Rendah, karena pemilihan dilakukan secara acak |
| Representatif atau Tidak |
Kurang representatif |
Lebih representatif |
| Bias yang Sering Muncul |
Selection Bias, Researcher Bias, Network Bias |
Minimal, karena distribusi acak memastikan keragaman sampel |
| Generalizability |
Rendah, sulit digeneralisasi ke populasi |
Tinggi, hasil dapat digeneralisasi ke seluruh populasi |
| Margin of Error (MoE) |
Tidak dapat dihitung dengan akurat |
Dapat dihitung dan dikontrol dengan baik |
Metode Non-Probability Sampling memiliki keterbatasan dalam menangani
bias, yang dapat menyebabkan hasil survei kurang akurat dan kurang dapat
digeneralisasi ke populasi yang lebih luas. Bias dalam metode ini muncul
dari pemilihan sampel yang tidak acak, aksesibilitas terbatas, dan
subjektivitas dalam penentuan sampel. Akibatnya, Margin of Error (MoE)
sulit dikontrol dan hasil survei bisa menjadi tidak representatif.
Sebaliknya, Probability Sampling lebih unggul dalam mengurangi bias
karena menggunakan metode pemilihan acak yang memberikan peluang yang
sama bagi setiap individu dalam populasi untuk terpilih. Dengan
demikian, hasilnya lebih representatif, Margin of Error lebih kecil dan
dapat dihitung dengan akurat, serta generalisasi hasil lebih kuat
dibandingkan dengan Non-Probability Sampling.
Kesimpulan dan
Rekomendasi
Dalam penelitian ini, berbagai metode probability sampling dan
non-probability sampling telah dibandingkan untuk menilai keakuratan
serta efisiensinya dalam mengestimasi pengeluaran mahasiswa. Dari hasil
analisis, metode probability sampling terbukti lebih unggul dalam hal
keakuratan karena memungkinkan setiap individu dalam populasi memiliki
peluang yang sama untuk terpilih sebagai sampel. Sebaliknya, metode
non-probability sampling lebih mudah dan cepat diterapkan, tetapi
memiliki risiko bias yang lebih tinggi sehingga hasilnya kurang dapat
digeneralisasi ke seluruh populasi.
Di antara metode probability sampling, Stratified Sampling memiliki
keunggulan dalam menangkap variasi antar kelompok karena populasi dibagi
menjadi strata sebelum pemilihan sampel dilakukan. Hal ini menjadikannya
salah satu metode paling akurat untuk populasi yang heterogen, seperti
mahasiswa dari berbagai fakultas dengan pola pengeluaran yang
berbeda-beda. Cluster Sampling, meskipun lebih hemat biaya dan waktu,
memiliki kelemahan karena hanya memilih beberapa kelompok tertentu, yang
bisa membuat hasilnya kurang representatif jika klaster yang dipilih
tidak cukup mencerminkan populasi secara keseluruhan. Systematic
Sampling menawarkan efisiensi dalam pemilihan sampel, tetapi rentan
terhadap bias jika terdapat pola tertentu dalam urutan data populasi.
Simple Random Sampling (SRS) memberikan hasil yang tidak bias secara
teori, tetapi kurang efektif dalam populasi yang heterogen karena tidak
mempertimbangkan variasi antar kelompok. Multi-Stage Sampling menjadi
pilihan yang baik untuk populasi yang besar dan kompleks, meskipun
memiliki margin of error yang lebih besar dibandingkan metode lain
karena pemilihan dilakukan dalam beberapa tahap yang meningkatkan
kemungkinan variasi dalam sampel.
Sementara itu, metode non-probability sampling lebih sering digunakan
dalam penelitian eksploratif atau ketika terdapat keterbatasan dalam
sumber daya dan waktu. Convenience Sampling adalah metode yang paling
mudah dilakukan karena hanya melibatkan individu yang mudah dijangkau,
tetapi memiliki bias seleksi yang tinggi sehingga hasilnya tidak dapat
mewakili populasi dengan baik. Judgmental (Purposive) Sampling
memberikan keleluasaan bagi peneliti untuk memilih sampel yang dianggap
paling relevan, tetapi tetap rentan terhadap bias subjektif yang bisa
mengurangi objektivitas penelitian. Quota Sampling mencoba mengatasi
bias representasi dengan menetapkan proporsi tertentu dalam sampel,
tetapi masih memungkinkan bias dalam pemilihan individu dalam setiap
kelompok. Snowball Sampling berguna untuk meneliti kelompok yang sulit
dijangkau, tetapi berisiko tinggi menghasilkan sampel yang terlalu
homogen karena individu cenderung merekrut orang lain yang memiliki
karakteristik serupa dengan mereka.
Selain pemilihan metode sampling, perhitungan ukuran sampel yang
diperlukan untuk Margin of Error (MoE) sebesar 5 menunjukkan bahwa untuk
populasi hanya 500 orang, hampir seluruh populasi harus disurvei
(499.999995 orang). Hal ini menunjukkan bahwa semakin kecil margin of
error yang diinginkan, semakin besar jumlah sampel yang dibutuhkan untuk
mendapatkan estimasi yang akurat. Dalam praktiknya, tidak selalu
memungkinkan untuk mensurvei hampir seluruh populasi, sehingga perlu
dilakukan kompromi antara ukuran sampel dan tingkat ketepatan hasil yang
diharapkan. Jika sumber daya terbatas, MoE yang lebih besar dapat
diterima untuk mendapatkan ukuran sampel yang lebih realistis.
Secara keseluruhan, probability sampling lebih direkomendasikan dalam
penelitian yang membutuhkan hasil yang akurat dan dapat digeneralisasi,
terutama jika heterogenitas dalam populasi cukup tinggi. Metode seperti
Stratified Sampling atau Systematic Sampling dapat menjadi pilihan yang
baik untuk meningkatkan keakuratan tanpa meningkatkan biaya secara
signifikan. Di sisi lain, non-probability sampling tetap berguna dalam
situasi tertentu, terutama jika penelitian bertujuan untuk eksplorasi
awal atau jika terdapat keterbatasan sumber daya yang membuat
probability sampling sulit dilakukan. Namun, dalam penggunaan metode
ini, peneliti perlu menyadari potensi bias yang ada dan mempertimbangkan
strategi mitigasi yang dapat diterapkan.
Selain itu, penentuan ukuran sampel sangat berpengaruh terhadap
kualitas hasil penelitian. Jika jumlah sampel terlalu kecil, hasil
penelitian bisa menjadi tidak akurat dan memiliki margin of error yang
besar. Sebaliknya, jika jumlah sampel terlalu besar, penelitian bisa
menjadi lebih mahal dan memakan waktu lebih lama tanpa memberikan
peningkatan manfaat yang signifikan. Oleh karena itu, perencanaan yang
matang dalam memilih metode sampling serta menentukan ukuran sampel yang
tepat sangat penting untuk memastikan hasil penelitian yang valid dan
dapat diandalkan.
LS0tDQp0aXRsZTogIkxhcG9yYW4gUGVyYmFuZGluZ2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nIGRhbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgZGFsYW0gTWVuZ2VzdGltYXNpIFBlbmdlbHVhcmFuIE1ha2FuYW4gQnVsYW5hbiBNYWhhc2lzd2EiDQpzdWJ0aXRsZTogIlR1Z2FzIDMgU2FtcGxpbmcgJiBTdXJ2ZXkgVGVjaG5pcXVlcyINCmF1dGhvcjogDQogICJJc25haW5pIE51ciBIYXNhbmFoICg1MjI0MDAwNSkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyb2JvYm9vazogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlICgxKS5jc3MiDQogICAgcGFyYW1zOg0KICBlY2hvOiBmYWxzZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBtYXJrZG93bjogDQogICAgd3JhcDogNzINCi0tLQ0KDQo8aW1nIGlkPSJJc25hIiBzcmM9IkM6XFVzZXJzXEFTVVNcRGVza3RvcFxTdGF0aXN0aWthIERhc2FyXElzbmEucG5nIiBhbHQ9IkxvZ28iIHN0eWxlPSJ3aWR0aDoyMDBweDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiPg0KDQojICoqUGVuZGFodWx1YW4qKg0KDQojIyAqKlR1anVhbiBQZW5lbGl0aWFuKioNCg0KUGVuZWxpdGlhbiBpbmkgYmVydHVqdWFuIHVudHVrIG1lbWJhbmRpbmdrYW4gbWV0b2RlIFByb2JhYmlsaXR5IFNhbXBsaW5nIGRhbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgZGFsYW0gbWVuYW5nYW5pIE1hcmdpbiBvZiBFcnJvciAoTW9FKSBzYWF0IG1lbXBlcmtpcmFrYW4gcGVuZ2VsdWFyYW4gbWFrYW5hbiBidWxhbmFuIG1haGFzaXN3YS4gRGVuZ2FuIG1lbWFoYW1pIHBlcmJlZGFhbiBlZmVrdGl2aXRhcyBzZXRpYXAgbWV0b2RlLCBwZW5lbGl0aWFuIGluaSBtZW1iZXJpa2FuIHdhd2FzYW4gZGFsYW0gbWVtaWxpaCB0ZWtuaWsgc2FtcGxpbmcgeWFuZyB0ZXBhdCB1bnR1ayBzdHVkaSBzZXJ1cGEuDQoNCiMjICoqUGVudGluZ255YSBNb0UgZGFsYW0gUGVuZ2FtYmlsYW4gU2FtcGVsKioNCg0KTWFyZ2luIG9mIEVycm9yIChNb0UpIG1lcnVwYWthbiBmYWt0b3IgcGVudGluZyBkYWxhbSBwZW5nYW1iaWxhbiBzYW1wZWwga2FyZW5hIG1lbmVudHVrYW4gc2ViZXJhcGEgZGVrYXQgaGFzaWwgc2FtcGVsIGRlbmdhbiBwb3B1bGFzaSBzZWJlbmFybnlhLiBNb0UgbWVtYmFudHUgZGFsYW0gbWVuZ3VrdXIga2VhbmRhbGFuIGVzdGltYXNpIHlhbmcgZGlwZXJvbGVoIGRhcmkgc2FtcGVsLCBzZXJ0YSBtZW1iZXJpa2FuIGJhdGFzIHRvbGVyYW5zaSB0ZXJoYWRhcCBrZXNhbGFoYW4geWFuZyBtdW5na2luIHRlcmphZGkgZGFsYW0gcHJvc2VzIHBlbmdhbWJpbGFuIHNhbXBlbC4gRGFsYW0gcGVuZWxpdGlhbiBpbmksIHBlcmhpdHVuZ2FuIE1vRSBha2FuIGRpZ3VuYWthbiB1bnR1ayBtZW5pbGFpIGVmZWt0aXZpdGFzIG1hc2luZy1tYXNpbmcgbWV0b2RlIHNhbXBsaW5nIGRhbGFtIG1lbWJlcmlrYW4gZXN0aW1hc2kgeWFuZyBha3VyYXQgZGFuIGRhcGF0IGRpYW5kYWxrYW4uDQoNCiMgKipNZXRvZGUgUGVuZ2FtYmlsYW4gU2FtcGVsIHlhbmcgRGlndW5ha2FuKioNCg0KKipEYXRhc2V0IFBlbmdlbHVhcmFuIEJ1bGFuYW4gTWFoYXNpc3dhKioNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW1iYWNhIGRhdGEgZGFyaSBmaWxlIENTVg0KZGF0YSA8LSByZWFkLmNzdigiZGF0YV9wZW5nZWx1YXJhbl9tYWhhc2lzd2EuY3N2IikNCmhlYWQoZGF0YSkNCmBgYA0KDQojIyAqKlByb2JhYmlsaXR5IFNhbXBsaW5nKioNCg0KUHJvYmFiaWxpdHkgU2FtcGxpbmcgbWVtYXN0aWthbiBiYWh3YSBzZXRpYXAgbWFoYXNpc3dhIGRhbGFtIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBkaWtldGFodWkgZGFuIHRpZGFrIG5vbCB1bnR1ayBkaXBpbGloLiBIYWwgaW5pIG1lbXVuZ2tpbmthbiBoYXNpbCB5YW5nIGRhcGF0IGRpZ2VuZXJhbGlzYXNpa2FuIGRhbiB0aWRhayBiaWFzLg0KDQojIyMgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKioNClNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykgYWRhbGFoIG1ldG9kZSBkaSBtYW5hIHNldGlhcCBtYWhhc2lzd2EgbWVtaWxpa2kgcGVsdWFuZyB5YW5nIHNhbWEgdW50dWsgZGlwaWxpaC4gTWFoYXNpc3dhIGRpcGlsaWggc2VjYXJhIGFjYWsgZGFyaSBwb3B1bGFzaSBtZW5nZ3VuYWthbiBnZW5lcmF0b3IgYW5na2EgYWNhay4NCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0Kc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGRwbHlyKSkNCg0KIyBNZW5lbnR1a2FuIHVrdXJhbiBzYW1wZWwNCnNldC5zZWVkKDQyKQ0Kc2FtcGxlX3NpemUgPC0gMTAwDQoNCiMgTWVsYWt1a2FuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykNCnNhbXBsZV9kYXRhIDwtIGRhdGEgJT4lIHNhbXBsZV9uKHNhbXBsZV9zaXplKQ0KDQojIE1lbnlpbXBhbiBoYXNpbCBrZSBmaWxlIENTViBiYXJ1DQp3cml0ZS5jc3Yoc2FtcGxlX2RhdGEsICJzYW1wbGVkX2RhdGEuY3N2Iiwgcm93Lm5hbWVzPUZBTFNFKQ0KDQojIE1lbmFtcGlsa2FuIGJlYmVyYXBhIGJhcmlzIGhhc2lsIHNhbXBlbA0KaGVhZChzYW1wbGVfZGF0YSkNCmBgYA0KDQojIyMgKipTdHJhdGlmaWVkIFNhbXBsaW5nKioNClN0cmF0aWZpZWQgU2FtcGxpbmcgYWRhbGFoIHRla25payBwZW5nYW1iaWxhbiBzYW1wZWwgcHJvYmFiaWxpdGFzIGRpIG1hbmEgcG9wdWxhc2kgbWFoYXNpc3dhIGRpYmFnaSBtZW5qYWRpIGJlYmVyYXBhIHN1YmtlbG9tcG9rIChGYWt1bHRhcykuUG9wdWxhc2kgZGlrZWxvbXBva2thbiBiZXJkYXNhcmthbiBmYWt1bHRhcywga2VtdWRpYW4gc2FtcGVsIGRpYW1iaWwgc2VjYXJhIGFjYWsgZGFyaSBzZXRpYXAgc3RyYXRhIHNlY2FyYSBwcm9wb3JzaW9uYWwuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHNhbXBsaW5nKQ0KDQojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbCB0b3RhbA0Kc2V0LnNlZWQoNDIpDQpzYW1wbGVfc2l6ZSA8LSAxMDANCg0KIyBNZW5naGl0dW5nIGp1bWxhaCBtYWhhc2lzd2EgcGVyIGZha3VsdGFzDQpzdHJhdGFfY291bnRzIDwtIGRhdGEgJT4lIGNvdW50KEZha3VsdGFzKQ0KDQojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbCBwZXIgZmFrdWx0YXMgZGVuZ2FuIGJhdGFzIG1ha3NpbXVtDQpzdHJhdGFfY291bnRzIDwtIHN0cmF0YV9jb3VudHMgJT4lDQogIG11dGF0ZShwcm9wb3JzaSA9IG4gLyBzdW0obiksDQogICAgICAgICBzYW1wZWxfcGVyX3N0cmF0YSA9IHBtaW4ocm91bmQocHJvcG9yc2kgKiBzYW1wbGVfc2l6ZSksIG4pKSAgIyBCYXRhcyBtYWtzaW11bQ0KDQojIE1lbGFrdWthbiBTdHJhdGlmaWVkIFNhbXBsaW5nIG1lbmdndW5ha2FuIGZ1bmdzaSBzdHJhdGEoKSBkYXJpIHBhY2thZ2UgInNhbXBsaW5nIg0Kc3RyYXRpZmllZF9zYW1wbGUgPC0gc3RyYXRhKGRhdGEsIHN0cmF0YW5hbWVzID0gYygiRmFrdWx0YXMiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc3RyYXRhX2NvdW50cyRzYW1wZWxfcGVyX3N0cmF0YSwgbWV0aG9kID0gInNyc3dvciIpDQoNCiMgTWVuZ2FtYmlsIGRhdGEgc2FtcGVsIGJlcmRhc2Fya2FuIGhhc2lsIHN0cmF0aWZpa2FzaQ0Kc2FtcGxlX2RhdGEgPC0gZGF0YVtzdHJhdGlmaWVkX3NhbXBsZSRJRF91bml0LCBdDQoNCiMgTWVueWltcGFuIGhhc2lsIGtlIGZpbGUgQ1NWIGJhcnUNCndyaXRlLmNzdihzYW1wbGVfZGF0YSwgInNhbXBsZWRfc3RyYXRpZmllZF9kYXRhLmNzdiIsIHJvdy5uYW1lcz1GQUxTRSkNCg0KIyBNZW5hbXBpbGthbiBiZWJlcmFwYSBiYXJpcyBoYXNpbCBzYW1wZWwNCmhlYWQoc2FtcGxlX2RhdGEpDQpgYGANCg0KIyMjICoqU3lzdGVtYXRpYyBTYW1wbGluZyoqDQpTeXN0ZW1hdGljIFNhbXBsaW5nIGFkYWxhaCB0ZWtuaWsgcGVuZ2FtYmlsYW4gc2FtcGVsIHByb2JhYmlsaXRpIGRpbWFuYSBlbGVtZW4tZWxlbWVuIGRpcGlsaWggZGFyaSBzdWF0dSBwb3B1bGFzaSBwYWRhIGludGVydmFsIHRlZXJ0ZW50dSAoaykgc2V0ZWxhaCBtZW1pbGloIHRpdGlrIGF3YWwgeWFuZyBhY2FrLiBBbGloLWFsaWggbWVtaWxpaCBzYW1wZWwgc2VjYXJhIGFjYWssIG1ldG9kZSBpbmkgbWVuZ2d1bmFrYW4gcGVuZGVrYXRhbiB0ZXJzdHJ1a3R1ciwgc2VoaW5nZ2EgbGViaWggZWZlaXNpZW4gZGFuIG11ZGFoIGRpdGVyYXBrYW4uIFBlbWlsaWhhbiBzYW1wZWwgZGlsYWt1a2FuIGRlbmdhbiBtZW5nYW1iaWwgc2V0aWFwIG1haGFzaXN3YSBrZS1rIGRhcmkgZGFmdGFyIHlhbmcgdGVsYWggZGl1cnV0a2FuLg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIE1lbmVudHVrYW4gdWt1cmFuIHNhbXBlbA0Kc2V0LnNlZWQoNDIpDQpzYW1wbGVfc2l6ZSA8LSAxMDANCg0KIyBNZW5lbnR1a2FuIGludGVydmFsIHNpc3RlbWF0aXMNCk4gPC0gbnJvdyhkYXRhKSAgIyBKdW1sYWggdG90YWwgcG9wdWxhc2kNCmsgPC0gZmxvb3IoTiAvIHNhbXBsZV9zaXplKSAgIyBJbnRlcnZhbCBzaXN0ZW1hdGlzDQoNCiMgTWVtaWxpaCB0aXRpayBhd2FsIHNlY2FyYSBhY2FrIGFudGFyYSAxIGRhbiBrDQpzdGFydCA8LSBzYW1wbGUoMTprLCAxKQ0KDQojIE1lbmdhbWJpbCBzYW1wZWwgZGVuZ2FuIGludGVydmFsIHNpc3RlbWF0aXMNCnN5c3RlbWF0aWNfc2FtcGxlX2luZGljZXMgPC0gc2VxKHN0YXJ0LCBOLCBieSA9IGspDQpzYW1wbGVfZGF0YSA8LSBkYXRhW3N5c3RlbWF0aWNfc2FtcGxlX2luZGljZXMsIF0NCg0KIyBNZW55aW1wYW4gaGFzaWwga2UgZmlsZSBDU1YgYmFydQ0Kd3JpdGUuY3N2KHNhbXBsZV9kYXRhLCAic2FtcGxlZF9zeXN0ZW1hdGljX2RhdGEuY3N2Iiwgcm93Lm5hbWVzPUZBTFNFKQ0KDQojIE1lbmFtcGlsa2FuIGJlYmVyYXBhIGJhcmlzIGhhc2lsIHNhbXBlbA0KaGVhZChzYW1wbGVfZGF0YSkNCmBgYA0KDQojIyMgKipDbHVzdGVyIFNhbXBsaW5nKioNCkNsdXN0ZXIgU2FtcGxpbmcgYWRhbGFoIHRla25payBwZW5nYW1iaWxhbiBzYW1wZWwgZGltYW5hIGFsaWgtYWxpaCBtZW1pbGloIGluZGl2aWR1IHNlY2FyYSBhY2FrLCBuYW11biBtZW1pbGloIHNlbHVydWgga3Jsb21wb2sgKGNsdXN0ZXIpLiBTZXRlbGFoIHNhdHUgY2x1c3RlciB0ZXJwaWxpaCwgc2VtdWEgaW5kaXZpZHUgZGFsYWggY2x1c3RlciB0ZXJzZWJ1dCBkaW1hc3Vra2FuIGtlIGRhbGFtIHNhbXBlbC4gQmViZXJhcGEgZmFrdWx0YXMgZGlwaWxpaCBzZWNhcmEgYWNhaywgbGFsdSBzZW11YSBtYWhhc2lzd2EgZGFsYW0gZmFrdWx0YXMgdGVyc2VidXQgZGl3YXdhbmNhcmFpLg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIFBhc3Rpa2FuIGRhdGEgc3VkYWggYWRhIGRhbiBGYWt1bHRhcyBkYWxhbSBmb3JtYXQga2FyYWt0ZXINCmRhdGEkRmFrdWx0YXMgPC0gYXMuY2hhcmFjdGVyKGRhdGEkRmFrdWx0YXMpDQoNCiMgSGFwdXMgbmlsYWkgTkEgYXRhdSBrb3NvbmcgcGFkYSBrb2xvbSAiRmFrdWx0YXMiDQpkYXRhIDwtIGRhdGEgJT4lIGZpbHRlcighaXMubmEoRmFrdWx0YXMpICYgRmFrdWx0YXMgIT0gIiIpDQoNCiMgRGFwYXRrYW4gZGFmdGFyIHVuaWsgZmFrdWx0YXMNCmZha3VsdGFzX3VuaWsgPC0gdW5pcXVlKGRhdGEkRmFrdWx0YXMpDQoNCiMgTWVuZW50dWthbiBqdW1sYWggZmFrdWx0YXMgeWFuZyBkaXBpbGloDQpzZXQuc2VlZCg0MikgDQpqdW1sYWhfZmFrdWx0YXMgPC0gbWluKDUsIGxlbmd0aChmYWt1bHRhc191bmlrKSkNCg0KIyBNZW1pbGloIGZha3VsdGFzIHNlY2FyYSBhY2FrDQpmYWt1bHRhc190ZXJwaWxpaCA8LSBzYW1wbGUoZmFrdWx0YXNfdW5paywganVtbGFoX2Zha3VsdGFzLCByZXBsYWNlID0gRkFMU0UpDQoNCiMgTWVuZ2FtYmlsIHNlbXVhIG1haGFzaXN3YSBkYXJpIGZha3VsdGFzIHlhbmcgZGlwaWxpaA0KY2x1c3Rlcl9zYW1wbGUgPC0gZGF0YSAlPiUgZmlsdGVyKEZha3VsdGFzICVpbiUgZmFrdWx0YXNfdGVycGlsaWgpDQoNCiMgTWVueWltcGFuIGhhc2lsIGtlIGZpbGUgQ1NWIGJhcnUNCndyaXRlLmNzdihjbHVzdGVyX3NhbXBsZSwgInNhbXBsZWRfY2x1c3Rlcl9mYWt1bHRhcy5jc3YiLCByb3cubmFtZXM9RkFMU0UpDQoNCiMgTWVuYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgaGFzaWwgc2FtcGVsDQpoZWFkKGNsdXN0ZXJfc2FtcGxlKQ0KYGBgDQoNCiMjIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCk1lbWlsaWggYmViZXJhcGEgZmFrdWx0YXMgc2VjYXJhIGFjYWsuIERhcmkgZmFrdWx0YXMgeWFuZyB0ZXJwaWxpaCwgbWVtaWxpaCBiZWJlcmFwYSBtYWhhc2lzd2Egc2VjYXJhIGFjYWsgYmVyZGFzYXJrYW4gSUQuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgUGFzdGlrYW4ga29sb20gZGFsYW0gZm9ybWF0IGthcmFrdGVyDQpkYXRhJEZha3VsdGFzIDwtIGFzLmNoYXJhY3RlcihkYXRhJEZha3VsdGFzKQ0KZGF0YSRUYWh1bi5Ba2FkZW1payA8LSBhcy5jaGFyYWN0ZXIoZGF0YSRUYWh1bi5Ba2FkZW1paykNCg0KIyBIYXB1cyBuaWxhaSBOQSBhdGF1IGtvc29uZw0KZGF0YSA8LSBkYXRhICU+JSBmaWx0ZXIoIWlzLm5hKEZha3VsdGFzKSAmIEZha3VsdGFzICE9ICIiICYgIWlzLm5hKFRhaHVuLkFrYWRlbWlrKSAmIFRhaHVuLkFrYWRlbWlrICE9ICIiKQ0KDQojIFRhaGFwIDE6IFBpbGloIGJlYmVyYXBhIGZha3VsdGFzIHNlY2FyYSBhY2FrDQpzZXQuc2VlZCg0MikgICMgVW50dWsgaGFzaWwgeWFuZyBrb25zaXN0ZW4NCmp1bWxhaF9mYWt1bHRhcyA8LSA1ICAjIEp1bWxhaCBmYWt1bHRhcyB5YW5nIGluZ2luIGRpcGlsaWgNCmZha3VsdGFzX3VuaWsgPC0gdW5pcXVlKGRhdGEkRmFrdWx0YXMpDQoNCmlmIChsZW5ndGgoZmFrdWx0YXNfdW5paykgPCBqdW1sYWhfZmFrdWx0YXMpIHsNCiAgc3RvcCgiRXJyb3I6IEp1bWxhaCBmYWt1bHRhcyB5YW5nIHRlcnNlZGlhIGxlYmloIHNlZGlraXQgZGFyaSB5YW5nIGluZ2luIGRpcGlsaWguIikNCn0NCg0KZmFrdWx0YXNfdGVycGlsaWggPC0gc2FtcGxlKGZha3VsdGFzX3VuaWssIGp1bWxhaF9mYWt1bHRhcywgcmVwbGFjZSA9IEZBTFNFKQ0KDQojIEZpbHRlciBkYXRhIGJlcmRhc2Fya2FuIGZha3VsdGFzIHlhbmcgZGlwaWxpaA0KZGF0YV9mYWt1bHRhcyA8LSBkYXRhICU+JSBmaWx0ZXIoRmFrdWx0YXMgJWluJSBmYWt1bHRhc190ZXJwaWxpaCkNCg0KIyBUYWhhcCAyOiBQaWxpaCBiZWJlcmFwYSBtYWhhc2lzd2Egc2VjYXJhIGFjYWsgZGFyaSBzZXRpYXAgZmFrdWx0YXMNCmp1bWxhaF9tYWhhc2lzd2FfcGVyX2Zha3VsdGFzIDwtIDUgICMgQmlzYSBkaXViYWggc2VzdWFpIGtlYnV0dWhhbg0KbWFoYXNpc3dhX3NhbXBsZSA8LSBkYXRhX2Zha3VsdGFzICU+JQ0KICBncm91cF9ieShGYWt1bHRhcykgJT4lDQogIHNhbXBsZV9uKHNpemUgPSBtaW4oanVtbGFoX21haGFzaXN3YV9wZXJfZmFrdWx0YXMsIG4oKSksIHJlcGxhY2UgPSBGQUxTRSkNCg0KIyBNZW55aW1wYW4gaGFzaWwga2UgZmlsZSBDU1YgYmFydQ0Kd3JpdGUuY3N2KG1haGFzaXN3YV9zYW1wbGUsICJzYW1wbGVkX211bHRpc3RhZ2UuY3N2Iiwgcm93Lm5hbWVzPUZBTFNFKQ0KDQojIE1lbmFtcGlsa2FuIGJlYmVyYXBhIGJhcmlzIGhhc2lsIHNhbXBlbA0KaGVhZChtYWhhc2lzd2Ffc2FtcGxlKQ0KYGBgDQoNCiMjICoqTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKioNCg0KTm9uIFByb2JhYmlsaXR5IFNhbXBsaW5nIHRpZGFrIG1lbWJlcmlrYW4gc2V0aWFwIGluZGl2aWR1IHBlbHVhbmcgc2VsZWtzaSBkaWtldGFodWksIG1lbWJ1YXRueWEgcmVudGFuIHRlcmhhZGFwIGJpYXMgdGV0YXBpIGJlcmd1bmEgZGFsYW0gcGVuZWxpdGlhbiBla3NwbG9yYXRpZi4gDQoNCiMjIyAqKkNvbnZlbmllbmNlIFNhbXBsaW5nKioNCkNvbnZlbmllbmNlIFNhbXBsaW5nIGFkYWxhaCBtZXRvZGUgcGVuZ2FtYmlsYW4gc2FtcGVsIG5vbiBwcm9iYWJpbGl0YXMgZGltYW5hIHN1YmplayBkaXBpbGloIGJlcmRhc2Fya2FuIGtlbXVkYWhhbiBha3Nlcywga2V0ZXJzZWRpYWFuLCBkYW4ga2VkZWthdGFuLk1lbWlsaWggbWFoYXNpc3dhIHlhbmcgbXVkYWggZGlqYW5na2F1IGRpd2F3YW5jYXJhaSwgc2VwZXJ0aSBkaSBrYWZldGFyaWEgYXRhdSBwZXJwdXN0YWthYW4uDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShkcGx5cikpDQoNCiMgTWVuZW50dWthbiBqdW1sYWggc2FtcGVsDQpqdW1sYWhfc2FtcGVsIDwtIDEwMA0KDQojIENvbnZlbmllbmNlIFNhbXBsaW5nOiBNZW5nYW1iaWwgbWFoYXNpc3dhIHBlcnRhbWEgZGFsYW0gdXJ1dGFuIGRhdGFzZXQNCnNhbXBlbF9rZW55YW1hbmFuIDwtIGhlYWQoZGF0YSwganVtbGFoX3NhbXBlbCkNCg0KIyBNZW55aW1wYW4gaGFzaWwga2UgZmlsZSBDU1YgYmFydQ0Kd3JpdGUuY3N2KHNhbXBlbF9rZW55YW1hbmFuLCAic2FtcGxlZF9jb252ZW5pZW5jZS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KIyBNZW5hbXBpbGthbiBiZWJlcmFwYSBiYXJpcyBoYXNpbCBzYW1wZWwNCmhlYWQoc2FtcGVsX2tlbnlhbWFuYW4pDQpgYGANCg0KIyMjICoqUXVvdGEgU2FtcGxpbmcqKg0KUXVvdGEgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSBwZW5nYW1iaWxhbiBzYW1wZWwgbm9uIHByb2JhYmlsaXRhcyBkaSBtYW5hIG1lbWJhZ2kgcG9wdWxhc2kgbWVuamFkaSBzdWJrZWxvbXBvayAoa3VvdGEpIGJlcmRhc2Fya2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgZGFuIG1lbWlsaWggcGVzZXJ0YSBzZWNhcmEgdGlkYWsgYWNhayB1bnR1ayBtZW1lbnVoaSBrdW90YSB5YW5nIHRlbGFoIGRpdGVudHVrYW4gc2ViZWx1bW55YSB1bnR1ayBzZXRpYXAgc3Via2Vsb21wb2suIFNlanVtbGFoIG1haGFzaXN3YSB0ZXRhcCBkYXJpIHNldGlhcCBmYWt1bHRhcyBkaXdhd2FuY2FyYWkgdGFucGEgcGVtaWxpaGFuIGFjYWsuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgUGFzdGlrYW4gZGF0YXNldCBtZW1pbGlraSBrb2xvbSB5YW5nIGRpcGVybHVrYW4NCmlmICghIkZha3VsdGFzIiAlaW4lIGNvbG5hbWVzKGRhdGEpKSB7DQogIHN0b3AoIkVycm9yOiBLb2xvbSAnRmFrdWx0YXMnIHRpZGFrIGRpdGVtdWthbiBkYWxhbSBkYXRhc2V0LiBQYXN0aWthbiBuYW1hIGtvbG9tIHNlc3VhaSBkZW5nYW4gQ1NWLiIpDQp9DQoNCiMgSnVtbGFoIHNhbXBlbCB5YW5nIGRpYW1iaWwgcGVyIGZha3VsdGFzDQpqdW1sYWhfc2FtcGVsX3Blcl9mYWt1bHRhcyA8LSA1MCAgDQoNCiMgQ29udmVuaWVuY2UgU2FtcGxpbmc6IE1lbmdhbWJpbCA1MCBzaXN3YSBwZXJ0YW1hIGRhcmkgc2V0aWFwIGZha3VsdGFzDQpzYW1wZWxfa3VvdGEgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoRmFrdWx0YXMpICU+JQ0KICBzbGljZV9oZWFkKG4gPSBqdW1sYWhfc2FtcGVsX3Blcl9mYWt1bHRhcykgJT4lDQogIHVuZ3JvdXAoKQ0KDQojIE1lbnlpbXBhbiBoYXNpbCBrZSBmaWxlIENTViBiYXJ1DQp3cml0ZS5jc3Yoc2FtcGVsX2t1b3RhLCAic2FtcGxlZF9jb252ZW5pZW5jZV9xdW90YS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KIyBNZW5hbXBpbGthbiBiZWJlcmFwYSBiYXJpcyBoYXNpbCBzYW1wZWwNCmhlYWQoc2FtcGVsX2t1b3RhKQ0KYGBgDQoNCiMjIyAqKkp1ZGdtZW50YWwgKFB1cnBvc2l2ZSkgU2FtcGxpbmcqKg0KTWFoYXNpc3dhIGRpcGlsaWggYmVyZGFzYXJrYW4ga3JpdGVyaWEgdGVydGVudHUsIG1pc2FsbnlhIHBlbmdodW5pIGFzcmFtYSB5YW5nIG1lbWlsaWtpIHBvbGEga29uc3Vtc2kgbGViaWggc3RhYmlsLiBQb2xhIGtvbnN1bXNpIHlhbmcgZGlhbmdnYXAgc3RhYmlsIGFkYWxhaCBtYWhhc2lzd2EgeWFuZyBtZW1pbGlraSBwZW5nZWx1YXJhbiA+IFJwIDEuNTAwLjAwMCBkYW4gPCBScCAyLjUwMC4wMDAuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgUGFzdGlrYW4gZGF0YXNldCBtZW1pbGlraSBrb2xvbSB5YW5nIGRpcGVybHVrYW4NCmlmICghIlBlbmdlbHVhcmFuLi5ScC4iICVpbiUgY29sbmFtZXMoZGF0YSkpIHsNCiAgc3RvcCgiRXJyb3I6IEtvbG9tICdQZW5nZWx1YXJhbiAoUnApJyB0aWRhayBkaXRlbXVrYW4gZGFsYW0gZGF0YXNldC4gUGFzdGlrYW4gbmFtYSBrb2xvbSBzZXN1YWkgZGVuZ2FuIENTVi4iKQ0KfQ0KDQojIE1lbmVudHVrYW4ga3JpdGVyaWEganVkZ21lbnRhbCBzYW1wbGluZw0KcGVuZ2VsdWFyYW5fbWluIDwtIDE1MDAwMDAgICMgUGVuZ2VsdWFyYW4gbWluaW11bSB5YW5nIGRpYW5nZ2FwIHN0YWJpbA0KcGVuZ2VsdWFyYW5fbWF4IDwtIDI1MDAwMDAgICMgUGVuZ2VsdWFyYW4gbWFrc2ltdW0geWFuZyBkaWFuZ2dhcCBzdGFiaWwNCg0KIyBNZW1pbGloIG1haGFzaXN3YSBkZW5nYW4gcGVuZ2VsdWFyYW4gZGFsYW0gcmVudGFuZyB5YW5nIHRlbGFoIGRpdGVudHVrYW4NCnNhbXBlbF9wdXJwb3NpdmUgPC0gZGF0YSAlPiUNCiAgZmlsdGVyKFBlbmdlbHVhcmFuLi5ScC4gPj0gcGVuZ2VsdWFyYW5fbWluICYgUGVuZ2VsdWFyYW4uLlJwLiA8PSBwZW5nZWx1YXJhbl9tYXgpDQoNCiMgTWVueWltcGFuIGhhc2lsIGtlIGZpbGUgQ1NWIGJhcnUNCndyaXRlLmNzdihzYW1wZWxfcHVycG9zaXZlLCAic2FtcGxlZF9wdXJwb3NpdmUuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpDQoNCiMgTWVuYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgaGFzaWwgc2FtcGVsDQpoZWFkKHNhbXBlbF9wdXJwb3NpdmUpDQpgYGANCg0KIyMjICoqU25vd2JhbGwgU2FtcGxpbmcqKg0KU25vd2JhbGwgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSBwZW5nYW1iaWxhbiBzYW1wZWwgbm9uIHByb2JhYmlsaXRhcyB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1wZWxhamFyaSBwb3B1bGFzaSB5YW5nIHN1bGl0IGRpamFuZ2thdSBhdGF1IHRlcnNlbWJ1bnlhLiBEaW11bGFpIGRlbmdhbiBtZW1pbGloIGJlYmVyYXBhIG1haGFzaXN3YSB5YW5nIGtlbXVkaWFuIG1lcmVrYSBtZXJla29tZW5kYXNpa2FuIG1haGFzaXN3YSBsYWluLg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIFBhc3Rpa2FuIGRhdGFzZXQgbWVtaWxpa2kga29sb20geWFuZyBkaXBlcmx1a2FuDQppZiAoISJJRCIgJWluJSBjb2xuYW1lcyhkYXRhKSkgew0KICBzdG9wKCJFcnJvcjogS29sb20gJ0lEJyB0aWRhayBkaXRlbXVrYW4gZGFsYW0gZGF0YXNldC4gUGFzdGlrYW4gbmFtYSBrb2xvbSBzZXN1YWkgZGVuZ2FuIENTVi4iKQ0KfQ0KDQojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbCB5YW5nIGRpaW5naW5rYW4NCmp1bWxhaF9zYW1wZWwgPC0gMTAwICANCg0KIyBNZW1pbGloIHNlanVtbGFoIGtlY2lsIHNpc3dhIGF3YWwgc2VjYXJhIGFjYWsNCnNldC5zZWVkKDEyMykgIA0Kc2VlZF9zaXplIDwtIDUgICMgSnVtbGFoIHNpc3dhIGF3YWwNCnNhbXBlbF9hd2FsIDwtIHNhbXBsZV9uKGRhdGEsIHNlZWRfc2l6ZSkNCg0KIyBJbmlzaWFsaXNhc2kgZGFmdGFyIGhhc2lsIHNhbXBlbA0Kc2FtcGVsX3Nub3diYWxsIDwtIHNhbXBlbF9hd2FsDQoNCiMgUHJvc2VzIHNub3diYWxsIHNhbXBsaW5nDQp3aGlsZSAobnJvdyhzYW1wZWxfc25vd2JhbGwpIDwganVtbGFoX3NhbXBlbCkgew0KICAjIFBpbGloIHNpc3dhIGJhcnUgeWFuZyBkaXJla29tZW5kYXNpa2FuIG9sZWggcGVzZXJ0YSBzZWJlbHVtbnlhDQogIHNpc3dhX2JhcnUgPC0gZGF0YSAlPiUNCiAgICBmaWx0ZXIoIUlEICVpbiUgc2FtcGVsX3Nub3diYWxsJElEKSAlPiUgICMgSGluZGFyaSBkdXBsaWthc2kNCiAgICBzYW1wbGVfbihtaW4oNSwgbnJvdyguKSkpICAjIFNldGlhcCBwZXNlcnRhIG1lcmVrb21lbmRhc2lrYW4gNSBvcmFuZw0KDQogICMgVGFtYmFoa2FuIHNpc3dhIGJhcnUga2Ugc2FtcGVsDQogIHNhbXBlbF9zbm93YmFsbCA8LSBiaW5kX3Jvd3Moc2FtcGVsX3Nub3diYWxsLCBzaXN3YV9iYXJ1KQ0KDQogICMgSmlrYSBqdW1sYWggc2FtcGVsIHN1ZGFoIGN1a3VwLCBoZW50aWthbiBwcm9zZXMNCiAgaWYgKG5yb3coc2FtcGVsX3Nub3diYWxsKSA+PSBqdW1sYWhfc2FtcGVsKSB7DQogICAgYnJlYWsNCiAgfQ0KfQ0KDQojIFNpbXBhbiBoYXNpbCBrZSBmaWxlIENTViBiYXJ1DQp3cml0ZS5jc3Yoc2FtcGVsX3Nub3diYWxsLCAic2FtcGxlZF9zbm93YmFsbC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KIyBUYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgaGFzaWwgc2FtcGVsDQpoZWFkKHNhbXBlbF9zbm93YmFsbCkNCmBgYA0KDQojICoqUGVyaGl0dW5nYW4gTW9FIHVudHVrIFBlbmdhbWJpbGFuIFNhbXBlbCBQcm9iYWJpbGl0YXMqKg0KTWFyZ2luIG9mIEVycm9yIChNb0UpIGFkYWxhaCBrb25zZXAgc3RhdGlzdGlrIHlhbmcgbWVuZ3VrdXIga2V0aWRhayBwYXN0aWFuIGRhbGFtIGhhc2lsIHN1cnZlaSBhdGF1IGVzdGltYXNpIGJlcmJhc2lzIHNhbXBlbC4gS29uc2VwIGluaSBtZW1iZXJpa2FuIHJlbnRhbmcgZGkgbWFuYSBwYXJhbWV0ZXIgcG9wdWxhc2kgc2ViZW5hcm55YSBjZW5kZXJ1bmcgbWVudXJ1bi4NCg0KKipTZWNhcmEgdW11bSwgTW9FIGRpaGl0dW5nIGRlbmdhbiBydW11czoqKg0KJCQNCk1vRSA9IFogXHRpbWVzIFxmcmFje1xzaWdtYX17XHNxcnR7bn19DQokJA0KRGltYW5hOg0KDQotICRaJCA9IDEuOTYgKHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKQ0KDQotICRuJCA9IDEwMCAoanVtbGFoIHNhbXBlbCkNCg0KLSAkXHNpZ21hJCA9IFNpbXBhbmdhbiBiYWt1IHNhbXBlbA0KDQoqKlNpbXBhbmdhbiBiYWt1ICgkXHNpZ21hJCkgZGloaXR1bmcgZGVuZ2FuIHJ1bXVzOioqDQokJA0KXHNpZ21hID0gXHNxcnR7XGZyYWN7XHN1bSAoWF9pIC0gXGJhcntYfSleMn17bi0xfX0NCiQkDQoNCkRpbWFuYToNCg0KLSAkWF9pJCA9IFBlbmdlbHVhcmFuIG1ha2FuYW4gbWFoYXNpc3dhIGtlLWkNCg0KLSAkXGJhcntYfSQgPSBSYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFrYW5hbiBtYWhhc2lzd2ENCg0KLSAkbiQgPSBVa3VyYW4gc2FtcGVsDQoNCiMjICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSoqDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCnNldC5zZWVkKDQyKSAgIyBQYXN0aWthbiBoYXNpbCBrb25zaXN0ZW4NCnNyc19zYW1wbGUgPC0gZGF0YSAlPiUgc2FtcGxlX24oMTAwLCByZXBsYWNlID0gRkFMU0UpICAjIEFtYmlsIDEwMCBzYW1wZWwNCg0Kc3JzX3NkIDwtIHNkKHNyc19zYW1wbGUkUGVuZ2VsdWFyYW4uLlJwLikNCnByaW50KHBhc3RlKCJTaW1wYW5nYW4gQmFrdSAoU1JTKToiLCByb3VuZChzcnNfc2QsIDApKSkgICMgRGlidWxhdGthbg0KYGBgDQpEaWtldGFodWk6DQoNCi0gJFokID0gMS45NiAodW50dWsgdGluZ2thdCBrZXBlcmNheWFhbiA5NSUpDQoNCi0gJG4kID0gMTAwIChqdW1sYWggc2FtcGVsKQ0KDQotICRcc2lnbWEkID0gUnAgNTc0LjMxMg0KDQpNYWthOg0KDQokJA0KTW9FID0gMS45NiBcdGltZXMgXGZyYWN7NTc0LjMxMn17XHNxcnR7MTAwfX1cXA0KTW9FID0gMS45NiBcdGltZXMgXGZyYWN7NTc0LjMxMn17MTB9XFwNCk1vRSA9IDExMi41NjUsMlxcDQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvcg0KaGl0dW5nX21vZSA8LSBmdW5jdGlvbihkYXRhX3NhbXBsZSwgel9zY29yZSA9IDEuOTYpIHsNCiAgbiA8LSBucm93KGRhdGFfc2FtcGxlKSAgIyBVa3VyYW4gc2FtcGVsDQogIHNpZ21hIDwtIHNkKGRhdGFfc2FtcGxlJFBlbmdlbHVhcmFuLi5ScC4pICAjIFNpbXBhbmdhbiBiYWt1DQogIG1vZSA8LSB6X3Njb3JlICogKHNpZ21hIC8gc3FydChuKSkgICMgUnVtdXMgTW9FDQogIHJldHVybihtb2UpDQp9DQoNCiMgU2FtcGVsIEFjYWsgU2VkZXJoYW5hDQpzZXQuc2VlZCg0MikNCnNyc19zYW1wbGUgPC0gZGF0YSAlPiUgc2FtcGxlX24oMTAwKSAgIyBBbWJpbCAxMDAgc2FtcGVsIGFjYWsNCm1vZV9zcnMgPC0gaGl0dW5nX21vZShzcnNfc2FtcGxlKQ0KcHJpbnQocGFzdGUoIk1vRSBTUlM6Iiwgcm91bmQobW9lX3NycywgMikpKQ0KYGBgDQpIYXNpbCBpbmkgYmVyYXJ0aSBiYWh3YSBwZXJraXJhYW4gcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYXJpIHNhbXBlbCBTUlMgbWVtaWxpa2kga2VtdW5na2luYW4gc2VsaXNpaCBzZWtpdGFyIFJwIDExMi41NjUsMiBkYXJpIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGkgcG9wdWxhc2kgc2ViZW5hcm55YS4gRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlLCBraXRhIGJpc2EgbWVuZ2F0YWthbiBiYWh3YSBqaWthIHBlbmVsaXRpYW4gaW5pIGRpdWxhbmcgYmVya2FsaS1rYWxpIGRlbmdhbiBtZXRvZGUgeWFuZyBzYW1hLCByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgYWthbiBiZXJhZGEgZGFsYW0gcmVudGFuZyDCsSBScCAxMTIuNTY1LDIgZGFyaSBuaWxhaSBzZWJlbmFybnlhIHNlYmFueWFrIDk1JSBkYXJpIHdha3R1Lg0KDQpEZW5nYW4ga2F0YSBsYWluOg0KDQpKaWthIGhhc2lsIHBlbmVsaXRpYW4gbWVudW5qdWtrYW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgYWRhbGFoIFJwIDEuNTAwLjAwMCwgbWFrYSBraXRhIGJpc2EgeWFraW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBzZWx1cnVoIHBvcHVsYXNpIGtlbXVuZ2tpbmFuIGJlcmFkYSBkYWxhbSByZW50YW5nIGFudGFyYSBScCAxLjM4Ny40MzUgZGFuIFJwIDEuNjEyLjU2NS4gDQoNCiMjICoqU3RyYXRpZmllZCBSYW5kb20gU2FtcGxpbmcqKg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbWJhY2EgZGF0YSBkYXJpIGZpbGUgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJzYW1wbGVkX3N0cmF0aWZpZWRfZGF0YS5jc3YiKQ0KDQojIFBhc3Rpa2FuIGtvbG9tICJQZW5nZWx1YXJhbiAoUnApIiBhZGEgZGFuIGJlcnRpcGUgbnVtZXJpaw0KZGF0YSRQZW5nZWx1YXJhbi4uUnAuIDwtIGFzLm51bWVyaWMoZGF0YSRQZW5nZWx1YXJhbi4uUnAuKQ0KDQojIE1lbmdoaXR1bmcgc2ltcGFuZ2FuIGJha3Uga2VzZWx1cnVoYW4NCnNpbXBhbmdhbl9iYWt1X3RvdGFsIDwtIHNkKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLiwgbmEucm0gPSBUUlVFKQ0KDQojIE1lbmFtcGlsa2FuIGhhc2lsIHNpbXBhbmdhbiBiYWt1DQpwcmludChwYXN0ZSgiU2ltcGFuZ2FuIEJha3UgU3RyYXRhOiBScCIsIHJvdW5kKHNpbXBhbmdhbl9iYWt1X3RvdGFsLCAyKSkpDQpgYGANCkRpa2V0YWh1aToNCg0KLSAkWiQgPSAxLjk2ICh1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSkNCg0KLSAkbiQgPSAxMDAgKGp1bWxhaCBzYW1wZWwpDQoNCi0gJFxzaWdtYSQgPSBScCA1NzkuMjMzLDk3DQoNCk1ha2E6DQoNCiQkDQpNb0UgPSAxLjk2IFx0aW1lcyBcZnJhY3s1NzkuMjMzLDk3fXtcc3FydHsxMDB9fVxcDQpNb0UgPSAxLjk2IFx0aW1lcyBcZnJhY3s1NzkuMjMzLDk3fXsxMH1cXA0KTW9FID0gMTEzLjUyOSw4NlxcDQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbmdoaXR1bmcgc2ltcGFuZ2FuIGJha3UgKM+DKQ0Kc2ltcGFuZ2FuX2Jha3UgPC0gc2QoZGF0YSRQZW5nZWx1YXJhbi4uUnAuLCBuYS5ybSA9IFRSVUUpDQoNCiMgTWVuZW50dWthbiB1a3VyYW4gc2FtcGVsIChuKQ0KbiA8LSAxMDANCg0KIyBNZW5lbnR1a2FuIFotc2NvcmUgdW50dWsgdGluZ2thdCBrZXBlcmNheWFhbiA5NSUgKDEsOTYpDQpaIDwtIDEuOTYNCg0KIyBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKQ0KTW9FIDwtIFogKiAoc2ltcGFuZ2FuX2Jha3UgLyBzcXJ0KG4pKQ0KDQojIE1lbmFtcGlsa2FuIGhhc2lsDQpwcmludChwYXN0ZSgiTWFyZ2luIG9mIEVycm9yIChNb0UpOiBScCIsIHJvdW5kKE1vRSwgMikpKQ0KYGBgDQpIYXNpbCBpbmkgYmVyYXJ0aSBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgbWV0b2RlIFN0cmF0aWZpZWQgUmFuZG9tIFNhbXBsaW5nIG1lbWlsaWtpIGtlbXVuZ2tpbmFuIHNlbGlzaWggc2VraXRhciBScCAxMTMuNTI5LDg2IGRhcmkgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBwb3B1bGFzaSBzZWJlbmFybnlhLiBEZW5nYW4gdGluZ2thdCBrZXBlcmNheWFhbiA5NSUsIGtpdGEgYmlzYSBtZW5nYXRha2FuIGJhaHdhIGppa2EgcGVuZWxpdGlhbiBpbmkgZGl1bGFuZyBiZXJrYWxpLWthbGkgZGVuZ2FuIG1ldG9kZSB5YW5nIHNhbWEsIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgeWFuZyBkaWhpdHVuZyBkYXJpIHNhbXBlbCBha2FuIGJlcmFkYSBkYWxhbSByZW50YW5nIMKxIFJwIDExMy41MjksODYgZGFyaSBuaWxhaSBzZWJlbmFybnlhIHNlYmFueWFrIDk1JSBkYXJpIHdha3R1Lg0KDQpEZW5nYW4ga2F0YSBsYWluOg0KDQpKaWthIGhhc2lsIHBlbmVsaXRpYW4gbWVudW5qdWtrYW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgYWRhbGFoIFJwIDEuNTAwLjAwMCwgbWFrYSBraXRhIGJpc2EgeWFraW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBzZWx1cnVoIHBvcHVsYXNpIGtlbXVuZ2tpbmFuIGJlcmFkYSBkYWxhbSByZW50YW5nIGFudGFyYSBScCAxLjM4Ni40NzAsMTQgaGluZ2dhIFJwIDEuNjEzLjUyOSw4Ni4NCg0KIyMgKipTeXN0ZW1hdGljIFNhbXBsaW5nKioNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW1iYWNhIGRhdGEgZGFyaSBmaWxlIENTVg0KZGF0YSA8LSByZWFkLmNzdigic2FtcGxlZF9zeXN0ZW1hdGljX2RhdGEuY3N2IikNCg0KIyBQYXN0aWthbiBrb2xvbSAiUGVuZ2VsdWFyYW4gKFJwKSIgYWRhIGRhbiBiZXJ0aXBlIG51bWVyaWsNCmRhdGEkUGVuZ2VsdWFyYW4uLlJwLiA8LSBhcy5udW1lcmljKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLikNCg0KIyBNZW5naGl0dW5nIHNpbXBhbmdhbiBiYWt1IGtlc2VsdXJ1aGFuDQpzaW1wYW5nYW5fYmFrdV90b3RhbCA8LSBzZChkYXRhJFBlbmdlbHVhcmFuLi5ScC4sIG5hLnJtID0gVFJVRSkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBzaW1wYW5nYW4gYmFrdQ0KcHJpbnQocGFzdGUoIlNpbXBhbmdhbiBCYWt1IFN5c3RlbWF0aWM6IFJwIiwgcm91bmQoc2ltcGFuZ2FuX2Jha3VfdG90YWwsIDIpKSkNCmBgYA0KRGlrZXRhaHVpOg0KDQotICRaJCA9IDEuOTYgKHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKQ0KDQotICRuJCA9IDEwMCAoanVtbGFoIHNhbXBlbCkNCg0KLSAkXHNpZ21hJCA9IFJwIDU3OC4yNzYsMTQNCg0KTWFrYToNCg0KJCQNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU3OC4yNzYsMTR9e1xzcXJ0ezEwMH19XFwNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU3OC4yNzYsMTR9ezEwfVxcDQpNb0UgPSAxMTMuMzQyLDEyXFwNCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yDQpoaXR1bmdfbW9lIDwtIGZ1bmN0aW9uKGRhdGFfc2FtcGxlLCB6X3Njb3JlID0gMS45Nikgew0KICBuIDwtIG5yb3coZGF0YV9zYW1wbGUpICAjIFVrdXJhbiBzYW1wZWwNCiAgc2lnbWEgPC0gc2QoZGF0YV9zYW1wbGUkUGVuZ2VsdWFyYW4uLlJwLikgICMgU2ltcGFuZ2FuIGJha3UNCiAgbW9lIDwtIHpfc2NvcmUgKiAoc2lnbWEgLyBzcXJ0KG4pKSAgIyBSdW11cyBNb0UNCiAgcmV0dXJuKG1vZSkNCn0NCg0KIyBTYW1wZWwgU2lzdGVtYXRpcyAoU2V0aWFwIGstdGggZWxlbWVuKQ0KayA8LSBucm93KGRhdGEpICUvJSAxMDAgICMgVGVudHVrYW4gaW50ZXJ2YWwNCnN5c19zYW1wbGUgPC0gZGF0YVtzZXEoMSwgbnJvdyhkYXRhKSwgYnkgPSBrKSwgXSAgIyBBbWJpbCBzZXRpYXAga2UtayBiYXJpcw0KbW9lX3N5cyA8LSBoaXR1bmdfbW9lKHN5c19zYW1wbGUpDQpwcmludChwYXN0ZSgiTW9FIFNhbXBlbCBTaXN0ZW1hdGlzOiIsIHJvdW5kKG1vZV9zeXMsIDIpKSkNCmBgYA0KSGFzaWwgaW5pIGJlcmFydGkgYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIG1ldG9kZSBTeXN0ZW1hdGljIFNhbXBsaW5nIG1lbWlsaWtpIGtlbXVuZ2tpbmFuIHNlbGlzaWggc2VraXRhciBScCAxMTMuMzQyLDEyIGRhcmkgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBwb3B1bGFzaSBzZWJlbmFybnlhLkRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSwga2l0YSBiaXNhIG1lbmdhdGFrYW4gYmFod2EgamlrYSBwZW5lbGl0aWFuIGluaSBkaXVsYW5nIGJlcmthbGkta2FsaSBkZW5nYW4gbWV0b2RlIHlhbmcgc2FtYSwgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIGFrYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgwrEgUnAgMTEzLjM0MiwxMiBkYXJpIG5pbGFpIHNlYmVuYXJueWEgc2ViYW55YWsgOTUlIGRhcmkgd2FrdHUuDQoNCkRlbmdhbiBrYXRhIGxhaW46DQoNCkppa2EgaGFzaWwgcGVuZWxpdGlhbiBtZW51bmp1a2thbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRhbGFtIHNhbXBlbCBhZGFsYWggUnAgMS41MDAuMDAwLCBtYWthIGtpdGEgYmlzYSB5YWtpbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRpIHNlbHVydWggcG9wdWxhc2kga2VtdW5na2luYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgYW50YXJhIFJwIDEuMzg2LjY1Nyw4OCBoaW5nZ2EgUnAgMS42MTMuMzQyLDEyLg0KDQojIyAqKkNsdXN0ZXIgU2FtcGxpbmcqKg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbWJhY2EgZGF0YSBkYXJpIGZpbGUgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJzYW1wbGVkX2NsdXN0ZXJfZmFrdWx0YXMuY3N2IikNCg0KIyBQYXN0aWthbiBrb2xvbSAiUGVuZ2VsdWFyYW4gKFJwKSIgYWRhIGRhbiBiZXJ0aXBlIG51bWVyaWsNCmRhdGEkUGVuZ2VsdWFyYW4uLlJwLiA8LSBhcy5udW1lcmljKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLikNCg0KIyBNZW5naGl0dW5nIHNpbXBhbmdhbiBiYWt1IGtlc2VsdXJ1aGFuDQpzaW1wYW5nYW5fYmFrdV90b3RhbCA8LSBzZChkYXRhJFBlbmdlbHVhcmFuLi5ScC4sIG5hLnJtID0gVFJVRSkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBzaW1wYW5nYW4gYmFrdQ0KcHJpbnQocGFzdGUoIlNpbXBhbmdhbiBCYWt1IENsdXN0ZXI6IFJwIiwgcm91bmQoc2ltcGFuZ2FuX2Jha3VfdG90YWwsIDIpKSkNCmBgYA0KRGlrZXRhaHVpOg0KDQotICRaJCA9IDEuOTYgKHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKQ0KDQotICRuJCA9IDEwMCAoanVtbGFoIHNhbXBlbCkNCg0KLSAkXHNpZ21hJCA9IFJwIDU2NC42MDAsNjINCg0KTWFrYToNCg0KJCQNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU2NC42MDAsNjJ9e1xzcXJ0ezEwMH19XFwNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU2NC42MDAsNjJ9ezEwfVxcDQpNb0UgPSAxMTAuNjYxLDcyXFwNCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgUGFzdGlrYW4ga29sb20gIlBlbmdlbHVhcmFuIChScCkiIGFkYSBkYW4gYmVydGlwZSBudW1lcmlrDQpkYXRhJFBlbmdlbHVhcmFuLi5ScC4gPC0gYXMubnVtZXJpYyhkYXRhJFBlbmdlbHVhcmFuLi5ScC4pDQoNCiMgTWVuZ2hpdHVuZyBzaW1wYW5nYW4gYmFrdSBrZXNlbHVydWhhbiBkYXJpIHNhbXBlbCBrbGFzdGVyDQpzaW1wYW5nYW5fYmFrdV90b3RhbCA8LSBzZChkYXRhJFBlbmdlbHVhcmFuLi5ScC4sIG5hLnJtID0gVFJVRSkNCg0KIyBGdW5nc2kgdW50dWsgbWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1vRSkNCmhpdHVuZ19tb2UgPC0gZnVuY3Rpb24oc2lnbWEsIG4sIHpfc2NvcmUgPSAxLjk2KSB7DQogIG1vZSA8LSB6X3Njb3JlICogKHNpZ21hIC8gc3FydChuKSkgICMgUnVtdXMgTW9FDQogIHJldHVybihtb2UpDQp9DQoNCiMgTWVuZW50dWthbiB1a3VyYW4gc2FtcGVsIChuKQ0KbiA8LSAxMDANCg0KIyBNZW5naGl0dW5nIE1vRSBiZXJkYXNhcmthbiBzaW1wYW5nYW4gYmFrdSB0b3RhbA0KbW9lX2NsdXN0ZXIgPC0gaGl0dW5nX21vZShzaW1wYW5nYW5fYmFrdV90b3RhbCwgbikNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBNYXJnaW4gb2YgRXJyb3INCnByaW50KHBhc3RlKCJNb0UgQ2x1c3RlciBTYW1wbGluZzogUnAiLCByb3VuZChtb2VfY2x1c3RlciwgMikpKQ0KYGBgDQpIYXNpbCBpbmkgYmVyYXJ0aSBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgbWV0b2RlIENsdXN0ZXIgU2FtcGxpbmcgbWVtaWxpa2kga2VtdW5na2luYW4gc2VsaXNpaCBzZWtpdGFyIFJwIDExMC42NjEsNzIgZGFyaSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRpIHBvcHVsYXNpIHNlYmVuYXJueWEuIERlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSwga2l0YSBiaXNhIG1lbmdhdGFrYW4gYmFod2EgamlrYSBwZW5lbGl0aWFuIGluaSBkaXVsYW5nIGJlcmthbGkta2FsaSBkZW5nYW4gbWV0b2RlIHlhbmcgc2FtYSwgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIGFrYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgwrEgUnAgMTEwLjY2MSw3MiBkYXJpIG5pbGFpIHNlYmVuYXJueWEgc2ViYW55YWsgOTUlIGRhcmkgd2FrdHUuDQoNCkRlbmdhbiBrYXRhIGxhaW46DQoNCkppa2EgaGFzaWwgcGVuZWxpdGlhbiBtZW51bmp1a2thbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRhbGFtIHNhbXBlbCBhZGFsYWggUnAgMS41MDAuMDAwLCBtYWthIGtpdGEgYmlzYSB5YWtpbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRpIHNlbHVydWggcG9wdWxhc2kga2VtdW5na2luYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgYW50YXJhIFJwIDEuMzg5LjMzOCwyOCBoaW5nZ2EgUnAgMS42MTAuNjYxLDcyLg0KDQojIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW1iYWNhIGRhdGEgZGFyaSBmaWxlIENTVg0KZGF0YSA8LSByZWFkLmNzdigic2FtcGxlZF9tdWx0aXN0YWdlLmNzdiIpDQoNCiMgUGFzdGlrYW4ga29sb20gIlBlbmdlbHVhcmFuIChScCkiIGFkYSBkYW4gYmVydGlwZSBudW1lcmlrDQpkYXRhJFBlbmdlbHVhcmFuLi5ScC4gPC0gYXMubnVtZXJpYyhkYXRhJFBlbmdlbHVhcmFuLi5ScC4pDQoNCiMgTWVuZ2hpdHVuZyBzaW1wYW5nYW4gYmFrdSBrZXNlbHVydWhhbg0Kc2ltcGFuZ2FuX2Jha3VfdG90YWwgPC0gc2QoZGF0YSRQZW5nZWx1YXJhbi4uUnAuLCBuYS5ybSA9IFRSVUUpDQoNCiMgTWVuYW1waWxrYW4gaGFzaWwgc2ltcGFuZ2FuIGJha3UNCnByaW50KHBhc3RlKCJTaW1wYW5nYW4gQmFrdSBDbHVzdGVyOiBScCIsIHJvdW5kKHNpbXBhbmdhbl9iYWt1X3RvdGFsLCAyKSkpDQpgYGANCkRpa2V0YWh1aToNCg0KLSAkWiQgPSAxLjk2ICh1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSkNCg0KLSAkbiQgPSAxMDAgKGp1bWxhaCBzYW1wZWwpDQoNCi0gJFxzaWdtYSQgPSBScCA1ODQuNjkwLDQNCg0KTWFrYToNCg0KJCQNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU4NC42OTAsNH17XHNxcnR7MTAwfX1cXA0KTW9FID0gMS45NiBcdGltZXMgXGZyYWN7NTg0LjY5MCw0fXsxMH1cXA0KTW9FID0gMTE0LjU5OSwzMlxcDQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIFBhc3Rpa2FuIGtvbG9tICJQZW5nZWx1YXJhbiAoUnApIiBhZGEgZGFuIGJlcnRpcGUgbnVtZXJpaw0KZGF0YSRQZW5nZWx1YXJhbi4uUnAuIDwtIGFzLm51bWVyaWMoZGF0YSRQZW5nZWx1YXJhbi4uUnAuKQ0KDQojIE1lbmdoaXR1bmcgc2ltcGFuZ2FuIGJha3Uga2VzZWx1cnVoYW4gZGFyaSBzYW1wZWwgbXVsdGktdGFoYXANCnNpbXBhbmdhbl9iYWt1X3RvdGFsIDwtIHNkKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLiwgbmEucm0gPSBUUlVFKQ0KDQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKQ0KaGl0dW5nX21vZSA8LSBmdW5jdGlvbihzaWdtYSwgbiwgel9zY29yZSA9IDEuOTYpIHsNCiAgbW9lIDwtIHpfc2NvcmUgKiAoc2lnbWEgLyBzcXJ0KG4pKSAgIyBSdW11cyBNb0UNCiAgcmV0dXJuKG1vZSkNCn0NCg0KIyBNZW5lbnR1a2FuIHVrdXJhbiBzYW1wZWwgKG4pDQpuIDwtIDEwMA0KDQojIE1lbmdoaXR1bmcgTW9FIGJlcmRhc2Fya2FuIHNpbXBhbmdhbiBiYWt1IHRvdGFsDQptb2VfbXVsdGlfc3RhZ2UgPC0gaGl0dW5nX21vZShzaW1wYW5nYW5fYmFrdV90b3RhbCwgbikNCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0KcHJpbnQocGFzdGUoIk1vRSBNdWx0aSBTdGFnZTogUnAiLCByb3VuZChtb2VfbXVsdGlfc3RhZ2UsIDIpKSkNCmBgYA0KSGFzaWwgaW5pIGJlcmFydGkgYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIG1ldG9kZSBNdWx0aS1TdGFnZSBTYW1wbGluZyBtZW1pbGlraSBrZW11bmdraW5hbiBzZWxpc2loIHNla2l0YXIgUnAgMTE0LjU5OSwzMiBkYXJpIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGkgcG9wdWxhc2kgc2ViZW5hcm55YS4gRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlLCBraXRhIGJpc2EgbWVuZ2F0YWthbiBiYWh3YSBqaWthIHBlbmVsaXRpYW4gaW5pIGRpdWxhbmcgYmVya2FsaS1rYWxpIGRlbmdhbiBtZXRvZGUgeWFuZyBzYW1hLCByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgYWthbiBiZXJhZGEgZGFsYW0gcmVudGFuZyDCsSBScCAxMTQuNTk5LDMyIGRhcmkgbmlsYWkgc2ViZW5hcm55YSBzZWJhbnlhayA5NSUgZGFyaSB3YWt0dS4NCg0KRGVuZ2FuIGthdGEgbGFpbjoNCg0KSmlrYSBoYXNpbCBwZW5lbGl0aWFuIG1lbnVuanVra2FuIGJhaHdhIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGFsYW0gc2FtcGVsIGFkYWxhaCBScCAxLjUwMC4wMDAsIG1ha2Ega2l0YSBiaXNhIHlha2luIGJhaHdhIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGkgc2VsdXJ1aCBwb3B1bGFzaSBrZW11bmdraW5hbiBiZXJhZGEgZGFsYW0gcmVudGFuZyBhbnRhcmEgUnAgMS4zODUuNDAwLDY4IGhpbmdnYSBScCAxLjYxNC41OTksMzIuDQoNCiMgKipBbmFsaXNpcyBCaWFzIGRhbGFtIFBlbmdhbWJpbGFuIFNhbXBlbCBOb24tUHJvYmFiaWxpdGFzKioNCg0KIyMgQ29udmVuaWVuY2UgU2FtcGxpbmcNCg0KKipTdW1iZXIgQmlhczoqKg0KDQpKaWthIGhhbnlhIG1haGFzaXN3YSB5YW5nIGJlcmFkYSBkaSBzYXR1IGthbnRpbiB1bml2ZXJzaXRhcyBkaXdhd2FuY2FyYWksIG1ha2Egc2FtcGVsIGluaSB0aWRhayBtZW5jZXJtaW5rYW4gbWFoYXNpc3dhIHlhbmcgbGViaWggc2VyaW5nIG1lbWFzYWsgZGkgcnVtYWggYXRhdSBtYWthbiBkaSB0ZW1wYXQgbGFpbi4NCg0KKipEYW1wYWs6KioNCg0KLSBIYXNpbCBzdXJ2ZWkga2VtdW5na2luYW4gYmVzYXIgdGlkYWsgZGFwYXQgZGlnZW5lcmFsaXNhc2kga2Ugc2VsdXJ1aCBwb3B1bGFzaSBtYWhhc2lzd2EuDQoNCi0gRGF0YSB5YW5nIGRpa3VtcHVsa2FuIG11bmdraW4gbGViaWggbWVuZ2dhbWJhcmthbiBrZWJpYXNhYW4ga29uc3Vtc2kgbWFoYXNpc3dhIHRlcnRlbnR1IGRhcmlwYWRhIHBvcHVsYXNpIHlhbmcgbGViaWggbHVhcy4NCg0KKipQZXJiZWRhYW4gZGVuZ2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nOioqDQoNCkRhbGFtIFByb2JhYmlsaXR5IFNhbXBsaW5nLCBzZXRpYXAgaW5kaXZpZHUgZGFsYW0gcG9wdWxhc2kgbWVtaWxpa2kgcGVsdWFuZyB5YW5nIHNhbWEgdW50dWsgdGVycGlsaWgsIHNlaGluZ2dhIGJpYXMgYWtpYmF0IHBlbWlsaWhhbiBiZXJkYXNhcmthbiBrZW55YW1hbmFuIGRhcGF0IGRpaGluZGFyaS4NCg0KIyMgSnVkZ21lbnRhbCAoUHVycG9zaXZlKSBTYW1wbGluZw0KDQoqKlN1bWJlciBCaWFzOioqDQoNCkppa2EgaGFueWEgbWFoYXNpc3dhIGVrb25vbWkgeWFuZyBkaXdhd2FuY2FyYWkgZGFsYW0gc3R1ZGkgcGVuZ2VsdWFyYW4gbWFrYW5hbiBrYXJlbmEgZGlhbmdnYXAgbGViaWggcGFoYW0gdGVudGFuZyBrZXVhbmdhbiwgaGFzaWxueWEgYmlzYSBiaWFzIGthcmVuYSBtYWhhc2lzd2EgZGFyaSBqdXJ1c2FuIGxhaW4gbXVuZ2tpbiBtZW1pbGlraSBwb2xhIHBlbmdlbHVhcmFuIHlhbmcgYmVyYmVkYS4NCg0KKipEYW1wYWs6KioNCg0KLSBQZW5lbGl0aWFuIG11bmdraW4gaGFueWEgbWVuY2VybWlua2FuIGthcmFrdGVyaXN0aWsga2Vsb21wb2sgdGVydGVudHUgZGFuIHRpZGFrIG1lbmNlcm1pbmthbiBwb3B1bGFzaSBtYWhhc2lzd2Egc2VjYXJhIGtlc2VsdXJ1aGFuLg0KDQotIEdlbmVyYWxpc2FzaSBtZW5qYWRpIHRlcmJhdGFzIGthcmVuYSBwZW1pbGloYW4gc3ViamVrIHlhbmcgc3VkYWggZGlwZW5nYXJ1aGkgb2xlaCBzdWJqZWt0aXZpdGFzIHBlbmVsaXRpLg0KDQoqKlBlcmJlZGFhbiBkZW5nYW4gUHJvYmFiaWxpdHkgU2FtcGxpbmc6KioNCg0KUHJvYmFiaWxpdHkgU2FtcGxpbmcgbWVuZ2d1bmFrYW4gbWV0b2RlIGFjYWssIHlhbmcgbWVuZ2hpbmRhcmkgcGVuZ2FydWggc3ViamVrdGl2aXRhcyBwZW5lbGl0aSBkYWxhbSBwZW1pbGloYW4gc2FtcGVsLg0KDQojIyBRdW90YSBTYW1wbGluZw0KDQoqKlN1bWJlciBCaWFzOioqDQoNCkRhbGFtIHN1cnZlaSBwZW5nZWx1YXJhbiBtYWthbmFuLCBrdW90YSBkaWJ1YXQgYmVyZGFzYXJrYW4gZ2VuZGVyIChtaXNhbG55YSA1MCUgbGFraS1sYWtpLCA1MCUgcGVyZW1wdWFuKSwgdGV0YXBpIHJlc3BvbmRlbiBkaXBpbGloIGJlcmRhc2Fya2FuIHNpYXBhIHlhbmcgdGVyc2VkaWEgdGVybGViaWggZGFodWx1Lg0KDQoqKkRhbXBhazoqKg0KDQotIE1lc2tpcHVuIHRlcmxpaGF0IHNlaW1iYW5nIGRhbGFtIHByb3BvcnNpLCBpbmRpdmlkdSBkYWxhbSBzZXRpYXAga2F0ZWdvcmkgbXVuZ2tpbiB0aWRhayBtZXdha2lsaSBrZXNlbHVydWhhbiBwb3B1bGFzaSBkYXJpIGthdGVnb3JpIHRlcnNlYnV0Lg0KDQotIEJpc2EgYWRhIGJpYXMgZGFyaSBrZWxvbXBvayB5YW5nIGxlYmloIG11ZGFoIGRpamFuZ2thdSwgc2VtZW50YXJhIGtlbG9tcG9rIHlhbmcgc3VsaXQgZGlha3NlcyBrdXJhbmcgdGVyd2FraWxpLg0KDQoqKlBlcmJlZGFhbiBkZW5nYW4gUHJvYmFiaWxpdHkgU2FtcGxpbmc6KioNCg0KU3RyYXRpZmllZCBSYW5kb20gU2FtcGxpbmcgZGFsYW0gUHJvYmFiaWxpdHkgU2FtcGxpbmcgbGViaWggdW5nZ3VsIGthcmVuYSBwZW1pbGloYW4gc2FtcGVsIGRhbGFtIHNldGlhcCBzdHJhdGEgdGV0YXAgZGlsYWt1a2FuIHNlY2FyYSBhY2FrLCBidWthbiBiZXJkYXNhcmthbiBrZW11ZGFoYW4gYWtzZXMuDQoNCiMjIFNub3diYWxsIFNhbXBsaW5nDQoNCioqU3VtYmVyIEJpYXM6KioNCg0KSmlrYSBzZW9yYW5nIG1haGFzaXN3YSBkaXJla3J1dCB1bnR1ayB3YXdhbmNhcmEgZGFuIGtlbXVkaWFuIG1lcmVrb21lbmRhc2lrYW4gdGVtYW4tdGVtYW5ueWEgdW50dWsgaWt1dCBzZXJ0YSwgbWFrYSBrZW11bmdraW5hbiBiZXNhciBzZW11YSBwZXNlcnRhIHN1cnZlaSBiZXJhc2FsIGRhcmkga2Vsb21wb2sgcGVydGVtYW5hbiB5YW5nIHNlcnVwYSBkYWxhbSBnYXlhIGhpZHVwIGRhbiBwZW5nZWx1YXJhbi4NCg0KKipEYW1wYWs6KioNCg0KLSBIYXNpbCBzdXJ2ZWkgdGlkYWsgbWV3YWtpbGkgcG9wdWxhc2kgbWFoYXNpc3dhIHNlY2FyYSBrZXNlbHVydWhhbiBrYXJlbmEgaGFueWEgbWVsaWJhdGthbiBrZWxvbXBvayB5YW5nIHNhbGluZyB0ZXJodWJ1bmcuDQoNCi0gVmFyaWFzaSBkYWxhbSBkYXRhIG1lbmphZGkgbGViaWgga2VjaWwgZGFyaSB5YW5nIHNlaGFydXNueWEga2FyZW5hIGhhbnlhIG1lbmNlcm1pbmthbiBrZWxvbXBvayB0ZXJ0ZW50dS4NCg0KKipQZXJiZWRhYW4gZGVuZ2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nOioqDQoNCkRhbGFtIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcsIHBlbWlsaWhhbiBkaWxha3VrYW4gdGFucGEgYmVyZ2FudHVuZyBwYWRhIGphcmluZ2FuIHNvc2lhbCwgc2VoaW5nZ2EgZGlzdHJpYnVzaSBzYW1wZWwgbGViaWggYmVyYWdhbSBkYW4gcmVwcmVzZW50YXRpZi4NCg0KIyMgUGVyYmFuZGluZ2FuIEJpYXMgZGFsYW0gTm9uLVByb2JhYmlsaXR5IGRlbmdhbiBQcm9iYWJpbGl0eSBTYW1wbGluZw0KDQp8ICoqQXNwZWsqKiAgICAgICAgICAgICAgICB8ICoqTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKiogfCAqKlByb2JhYmlsaXR5IFNhbXBsaW5nKiogfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqUGVsdWFuZyBUZXJwaWxpaCoqICAgICAgfCBUaWRhayBzZW11YSBpbmRpdmlkdSBtZW1pbGlraSBwZWx1YW5nIHlhbmcgc2FtYSB8IFNlbXVhIGluZGl2aWR1IG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBkaWtldGFodWkgdW50dWsgZGlwaWxpaCB8DQp8ICoqQmlhcyBkYWxhbSBQZW1pbGloYW4qKiAgfCBUaW5nZ2ksIHRlcmdhbnR1bmcgYWtzZXNpYmlsaXRhcyBkYW4gc3ViamVrdGl2aXRhcyB8IFJlbmRhaCwga2FyZW5hIHBlbWlsaWhhbiBkaWxha3VrYW4gc2VjYXJhIGFjYWsgfA0KfCAqKlJlcHJlc2VudGF0aWYgYXRhdSBUaWRhayoqIHwgS3VyYW5nIHJlcHJlc2VudGF0aWYgfCBMZWJpaCByZXByZXNlbnRhdGlmIHwNCnwgKipCaWFzIHlhbmcgU2VyaW5nIE11bmN1bCoqIHwgU2VsZWN0aW9uIEJpYXMsIFJlc2VhcmNoZXIgQmlhcywgTmV0d29yayBCaWFzIHwgTWluaW1hbCwga2FyZW5hIGRpc3RyaWJ1c2kgYWNhayBtZW1hc3Rpa2FuIGtlcmFnYW1hbiBzYW1wZWwgfA0KfCAqKkdlbmVyYWxpemFiaWxpdHkqKiAgICAgfCBSZW5kYWgsIHN1bGl0IGRpZ2VuZXJhbGlzYXNpIGtlIHBvcHVsYXNpIHwgVGluZ2dpLCBoYXNpbCBkYXBhdCBkaWdlbmVyYWxpc2FzaSBrZSBzZWx1cnVoIHBvcHVsYXNpIHwNCnwgKipNYXJnaW4gb2YgRXJyb3IgKE1vRSkqKiB8IFRpZGFrIGRhcGF0IGRpaGl0dW5nIGRlbmdhbiBha3VyYXQgfCBEYXBhdCBkaWhpdHVuZyBkYW4gZGlrb250cm9sIGRlbmdhbiBiYWlrIHwNCg0KTWV0b2RlIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZyBtZW1pbGlraSBrZXRlcmJhdGFzYW4gZGFsYW0gbWVuYW5nYW5pIGJpYXMsIHlhbmcgZGFwYXQgbWVueWViYWJrYW4gaGFzaWwgc3VydmVpIGt1cmFuZyBha3VyYXQgZGFuIGt1cmFuZyBkYXBhdCBkaWdlbmVyYWxpc2FzaSBrZSBwb3B1bGFzaSB5YW5nIGxlYmloIGx1YXMuIEJpYXMgZGFsYW0gbWV0b2RlIGluaSBtdW5jdWwgZGFyaSBwZW1pbGloYW4gc2FtcGVsIHlhbmcgdGlkYWsgYWNhaywgYWtzZXNpYmlsaXRhcyB0ZXJiYXRhcywgZGFuIHN1Ympla3Rpdml0YXMgZGFsYW0gcGVuZW50dWFuIHNhbXBlbC4gQWtpYmF0bnlhLCBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgc3VsaXQgZGlrb250cm9sIGRhbiBoYXNpbCBzdXJ2ZWkgYmlzYSBtZW5qYWRpIHRpZGFrIHJlcHJlc2VudGF0aWYuDQoNClNlYmFsaWtueWEsIFByb2JhYmlsaXR5IFNhbXBsaW5nIGxlYmloIHVuZ2d1bCBkYWxhbSBtZW5ndXJhbmdpIGJpYXMga2FyZW5hIG1lbmdndW5ha2FuIG1ldG9kZSBwZW1pbGloYW4gYWNhayB5YW5nIG1lbWJlcmlrYW4gcGVsdWFuZyB5YW5nIHNhbWEgYmFnaSBzZXRpYXAgaW5kaXZpZHUgZGFsYW0gcG9wdWxhc2kgdW50dWsgdGVycGlsaWguIERlbmdhbiBkZW1pa2lhbiwgaGFzaWxueWEgbGViaWggcmVwcmVzZW50YXRpZiwgTWFyZ2luIG9mIEVycm9yIGxlYmloIGtlY2lsIGRhbiBkYXBhdCBkaWhpdHVuZyBkZW5nYW4gYWt1cmF0LCBzZXJ0YSBnZW5lcmFsaXNhc2kgaGFzaWwgbGViaWgga3VhdCBkaWJhbmRpbmdrYW4gZGVuZ2FuIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZy4NCg0KIyAqKlBlcmJhbmRpbmdhbiBTZW11YSBNZXRvZGUqKg0KDQojIyAqKlBlcmJhbmRpbmdhbiBNZXRvZGUgUHJvYmFiaWxpdHkgU2FtcGxpbmcqKg0KDQpEYWxhbSBwZW5lbGl0aWFuIGluaSwgYmViZXJhcGEgbWV0b2RlIHNhbXBsaW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1haGFtaSB2YXJpYXNpIHBlbmdlbHVhcmFuIG1haGFzaXN3YS4gVW50dWsgbWVuaWxhaSBha3VyYXNpIHNldGlhcCBtZXRvZGUsIGtpdGEgbWVtYmFuZGluZ2thbiBzaW1wYW5nYW4gYmFrdSAoXChcc2lnbWFcKSkgZGFuIE1hcmdpbiBvZiBFcnJvciAoTW9FKS4gTWFyZ2luIG9mIEVycm9yIG1lbnVuanVra2FuIHNlYmVyYXBhIGphdWggaGFzaWwgc2FtcGVsIGRhcGF0IG1lbnlpbXBhbmcgZGFyaSBwb3B1bGFzaSBzZWJlbmFybnlhIGRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JS4gIA0KDQp8ICoqTWV0b2RlIFNhbXBsaW5nKiogICAgICAgICAgIHwgKipTaW1wYW5nYW4gQmFrdSAoXChcc2lnbWFcKSkqKiB8ICoqTW9FIChScCkqKiB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwNCnwgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKiogIHwgUnAgNTc0LjMxMiwwMCAgfCBScCAxMTIuNTY1LDIwIHwNCnwgKipTdHJhdGlmaWVkIFNhbXBsaW5nKiogICAgICAgIHwgUnAgNTc5LjIzMyw5NyAgfCBScCAxMTMuNTI5LDg2IHwNCnwgKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogICAgICAgIHwgUnAgNTc4LjI3NiwxNCAgfCBScCAxMTMuMzQyLDEyIHwNCnwgKipDbHVzdGVyIFNhbXBsaW5nKiogICAgICAgICAgIHwgUnAgNTY0LjYwMCw2MiAgfCBScCAxMTAuNjYxLDcyIHwNCnwgKipNdWx0aS1TdGFnZSBTYW1wbGluZyoqICAgICAgIHwgUnAgNTg0LjY5MCw0MCAgfCBScCAxMTQuNTk5LDMyIHwNCg0KDQojIyMgKipBbmFsaXNpcyBkYW4gUGVuamVsYXNhbiBTZXRpYXAgTWV0b2RlIFByb2JhYmlsaXR5IFNhbXBsaW5nKiogIA0KDQoqKjEuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykqKg0KDQotICoqS29uc2VwOioqICANCg0KICBEYWxhbSBtZXRvZGUgaW5pLCAxMDAgbWFoYXNpc3dhIGRpcGlsaWggc2VjYXJhIGFjYWsgdGFucGEgbWVtcGVydGltYmFuZ2thbiBmYWt1bHRhcyBhdGF1IGZha3RvciBsYWluLiAgDQoNCi0gKipIYXNpbDoqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdTogUnAgNTc0LjMxMiwwMCAgDQoNCiAgLSBNb0U6IFJwIDExMi41NjUsMjAgIA0KDQotICoqSW50ZXJwcmV0YXNpOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1IG1lbnVuanVra2FuIGJhaHdhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgbWVtaWxpa2kgdmFyaWFzaSB5YW5nIGN1a3VwIGJlc2FyLiAgDQoNCiAgLSBNb0UgUnAgMTEyLjU2NSwyMCBiZXJhcnRpIGppa2Ega2l0YSBtZWxha3VrYW4gc3VydmVpIHVsYW5nIGRlbmdhbiBtZXRvZGUgeWFuZyBzYW1hLCBzZWxpc2loIGhhc2lsIGRlbmdhbiBwb3B1bGFzaSBzZWJlbmFybnlhIG1hc2loIGRhbGFtIGtpc2FyYW4gdGVyc2VidXQuICANCg0KLSAqKktldW5nZ3VsYW46KiogIA0KDQogIC0gU2VkZXJoYW5hIGRhbiBtdWRhaCBkaXRlcmFwa2FuLiAgDQoNCiAgLSBKaWthIGRpbGFrdWthbiBkZW5nYW4gYmVuYXIsIG1lbWJlcmlrYW4gZXN0aW1hc2kgeWFuZyB0aWRhayBiaWFzIHRlcmhhZGFwIHBvcHVsYXNpLiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gVGlkYWsgbWVtcGVydGltYmFuZ2thbiB2YXJpYXNpIGFudGFyIGtlbG9tcG9rIChtaXNhbG55YSwgcGVyYmVkYWFuIGFudGFyYSBmYWt1bHRhcykuICANCg0KICAtIEJpc2EgbWVuZ2hhc2lsa2FuIHNhbXBlbCB5YW5nIGt1cmFuZyByZXByZXNlbnRhdGlmIGppa2EgZGlzdHJpYnVzaSBwb3B1bGFzaSB0aWRhayBtZXJhdGEuICANCg0KKioyLiBTdHJhdGlmaWVkIFNhbXBsaW5nKiogIA0KDQotICoqS29uc2VwOioqICANCg0KICBEYWxhbSBtZXRvZGUgaW5pLCBtYWhhc2lzd2EgZGlrZWxvbXBva2thbiBiZXJkYXNhcmthbiBmYWt1bHRhcyAoc3RyYXRhKSwga2VtdWRpYW4gZGlwaWxpaCBzZWNhcmEgcHJvcG9yc2lvbmFsIGRhcmkgc2V0aWFwIGtlbG9tcG9rIHVudHVrIG1lbWFzdGlrYW4gcmVwcmVzZW50YXNpIHlhbmcgbGViaWggYmFpay4gIA0KDQotICoqSGFzaWw6KiogIA0KDQogIC0gU2ltcGFuZ2FuIGJha3U6IFJwIDU3OS4yMzMsOTcgIA0KDQogIC0gTW9FOiBScCAxMTMuNTI5LDg2ICANCg0KLSAqKkludGVycHJldGFzaToqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdSBzZWRpa2l0IGxlYmloIHRpbmdnaSBkaWJhbmRpbmdrYW4gU1JTLCB5YW5nIGJlcmFydGkgdGVyZGFwYXQgdmFyaWFzaSB5YW5nIGxlYmloIGJlc2FyIGRhbGFtIGRhdGEgeWFuZyBkaWt1bXB1bGthbi4gIA0KDQogIC0gTW9FIHNlZGlraXQgbGViaWggYmVzYXIgZGFyaSBTUlMsIHRldGFwaSBtZXRvZGUgaW5pIGxlYmloIHJlcHJlc2VudGF0aWYga2FyZW5hIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFzaSBhbnRhciBmYWt1bHRhcy4gIA0KDQotICoqS2V1bmdndWxhbjoqKiAgDQoNCiAgLSBMZWJpaCBha3VyYXQgZGFyaXBhZGEgU1JTIGppa2EgcG9wdWxhc2kgc2FuZ2F0IGhldGVyb2dlbi4gIA0KDQogIC0gTWVtYXN0aWthbiBiYWh3YSBzZXRpYXAgZmFrdWx0YXMgbWVtaWxpa2kgcmVwcmVzZW50YXNpIHlhbmcgbWVtYWRhaSBkYWxhbSBzYW1wZWwuICANCg0KLSAqKktlbGVtYWhhbjoqKiAgDQoNCiAgLSBNZW1lcmx1a2FuIGluZm9ybWFzaSBhd2FsIHRlbnRhbmcgcG9wdWxhc2kgdW50dWsgbWVsYWt1a2FuIHN0cmF0aWZpa2FzaS4gIA0KDQogIC0gUHJvc2VzIHBlbWJhZ2lhbiBzdHJhdGEgYmlzYSBrb21wbGVrcyBqaWthIHRlcmRhcGF0IGJhbnlhayBrYXRlZ29yaS4gIA0KDQoqKjMuIFN5c3RlbWF0aWMgU2FtcGxpbmcqKiAgDQoNCi0gKipLb25zZXA6KiogIA0KDQogIERhbGFtIG1ldG9kZSBpbmksIG1haGFzaXN3YSBkaXBpbGloIGRlbmdhbiBwb2xhIHRlcnRlbnR1LCBtaXNhbG55YSBzZXRpYXAgbWFoYXNpc3dhIGtlLTEwIGRhcmkgZGFmdGFyIHlhbmcgdGVsYWggZGl1cnV0a2FuLiAgDQoNCi0gKipIYXNpbDoqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdTogUnAgNTc4LjI3NiwxNCAgDQoNCiAgLSBNb0U6IFJwIDExMy4zNDIsMTIgIA0KDQotICoqSW50ZXJwcmV0YXNpOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1IGhhbXBpciBzYW1hIGRlbmdhbiBTdHJhdGlmaWVkIFNhbXBsaW5nLiAgDQoNCiAgLSBNb0Ugc2VkaWtpdCBsZWJpaCBrZWNpbCBkYXJpIFN0cmF0aWZpZWQgU2FtcGxpbmcsIG1lbnVuanVra2FuIGJhaHdhIG1ldG9kZSBpbmkgY3VrdXAgYmFpayBkYWxhbSBtZW5hbmdrYXAgdmFyaWFzaSBkYWxhbSBwb3B1bGFzaS4gIA0KDQotICoqS2V1bmdndWxhbjoqKiAgDQoNCiAgLSBNdWRhaCBkaWxha3VrYW4gdGFucGEgcGVybHUgZGFmdGFyIGxlbmdrYXAgcG9wdWxhc2kgc2ViZWx1bSBwZW5nYW1iaWxhbiBzYW1wZWwuICANCg0KICAtIEVmZWt0aWYgZGFsYW0gc3VydmVpIGxhcGFuZ2FuIHlhbmcgbWVtYnV0dWhrYW4gZWZpc2llbnNpIHdha3R1LiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gSmlrYSBhZGEgcG9sYSB0ZXJzZW1idW55aSBkYWxhbSBkYXRhIChtaXNhbG55YSBkYWZ0YXIgdXJ1dCBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGlidWF0IGJlcmRhc2Fya2FuIHBvbGEgdGVydGVudHUpLCBoYXNpbG55YSBiaXNhIG1lbmphZGkgYmlhcy4gIA0KDQoqKjQuIENsdXN0ZXIgU2FtcGxpbmcqKiAgDQoNCi0gKipLb25zZXA6KiogIA0KDQogIERhbGFtIG1ldG9kZSBpbmksIGJlYmVyYXBhIGZha3VsdGFzIGRpcGlsaWggc2VjYXJhIGFjYWssIGxhbHUgc2VtdWEgbWFoYXNpc3dhIGRhbGFtIGZha3VsdGFzIHRlcnNlYnV0IGRpc3VydmVpLiAgDQoNCi0gKipIYXNpbDoqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdTogUnAgNTY0LjYwMCw2MiAocGFsaW5nIHJlbmRhaCBkaWJhbmRpbmcgbWV0b2RlIGxhaW4pLiAgDQoNCiAgLSBNb0U6IFJwIDExMC42NjEsNzIgKE1vRSB0ZXJrZWNpbCkuICANCg0KLSAqKkludGVycHJldGFzaToqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdSB5YW5nIGxlYmloIHJlbmRhaCBtZW51bmp1a2thbiBiYWh3YSBkYXRhIGRhbGFtIGZha3VsdGFzIHlhbmcgZGlwaWxpaCBsZWJpaCBzZXJhZ2FtLiAgDQoNCiAgLSBNb0UgdGVya2VjaWwgYmVyYXJ0aSBlc3RpbWFzaSBsZWJpaCBkZWthdCBkZW5nYW4gbmlsYWkgcG9wdWxhc2kgZGliYW5kaW5na2FuIG1ldG9kZSBsYWluLiAgDQoNCi0gKipLZXVuZ2d1bGFuOioqICANCg0KICAtIExlYmloIGhlbWF0IGJpYXlhIGRhbiB3YWt0dSBrYXJlbmEgaGFueWEgcGVybHUgbWVuc3VydmVpIGJlYmVyYXBhIGZha3VsdGFzLiAgDQoNCiAgLSBCZXJndW5hIGppa2EgcG9wdWxhc2kgdGVyYmFnaSBkYWxhbSBrZWxvbXBvayBnZW9ncmFmaXMgYXRhdSBpbnN0aXR1c2lvbmFsLiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gSmlrYSBmYWt1bHRhcyB5YW5nIGRpcGlsaWggdGlkYWsgcmVwcmVzZW50YXRpZiwgaGFzaWxueWEgYmlzYSBiaWFzLiAgDQoNCiAgLSBDZW5kZXJ1bmcgbWVuZ2hhc2lsa2FuIHZhcmlhc2kgZGF0YSB5YW5nIGxlYmloIGtlY2lsIGRpYmFuZGluZ2thbiBtZXRvZGUgbGFpbiBrYXJlbmEgaGFueWEgYmViZXJhcGEga2xhc3RlciB5YW5nIGRpZ3VuYWthbi4gIA0KDQoqKjUuIE11bHRpLVN0YWdlIFNhbXBsaW5nKiogIA0KDQotICoqS29uc2VwOioqICANCg0KICBNZXRvZGUgaW5pIG1lbGliYXRrYW4gbGViaWggZGFyaSBzYXR1IHRhaGFwIHBlbWlsaWhhbiBzYW1wZWwuIFBlcnRhbWEsIGJlYmVyYXBhIGZha3VsdGFzIGRpcGlsaWggc2VjYXJhIGFjYWssIGtlbXVkaWFuIGRhcmkgc2V0aWFwIGZha3VsdGFzIHRlcnNlYnV0LCBtYWhhc2lzd2EgZGlwaWxpaCBzZWNhcmEgYWNhayB1bnR1ayBzdXJ2ZWkuICANCg0KLSAqKkhhc2lsOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1OiBScCA1ODQuNjkwLDQwIChwYWxpbmcgdGluZ2dpIGRpYmFuZGluZyBtZXRvZGUgbGFpbikuICANCg0KICAtIE1vRTogUnAgMTE0LjU5OSwzMiAoTW9FIHRlcmJlc2FyKS4gIA0KDQotICoqSW50ZXJwcmV0YXNpOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1IHlhbmcgdGluZ2dpIG1lbnVuanVra2FuIGJhaHdhIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgbWVtaWxpa2kgdmFyaWFzaSBwZW5nZWx1YXJhbiB5YW5nIGxlYmloIGJlc2FyLiAgDQoNCiAgLSBNb0UgdGVyYmVzYXIgYmVyYXJ0aSBoYXNpbCBzdXJ2ZWkgbGViaWggYmVyaXNpa28gbWVuZ2FsYW1pIHBlbnlpbXBhbmdhbiBkYXJpIHBvcHVsYXNpIHNlYmVuYXJueWEuICANCg0KLSAqKktldW5nZ3VsYW46KiogIA0KDQogIC0gQ29jb2sgdW50dWsgcG9wdWxhc2kgeWFuZyBzYW5nYXQgYmVzYXIgZGFuIGtvbXBsZWtzLiAgDQoNCiAgLSBNZW5naGVtYXQgd2FrdHUgZGliYW5kaW5na2FuIFN0cmF0aWZpZWQgU2FtcGxpbmcga2FyZW5hIHRpZGFrIHBlcmx1IGRhdGEgbGVuZ2thcCBkYXJpIHNlbXVhIGZha3VsdGFzLiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gS29tcGxla3NpdGFzIGxlYmloIHRpbmdnaSBkaWJhbmRpbmcgbWV0b2RlIGxhaW5ueWEuICANCg0KICAtIE1vRSB0ZXJiZXNhciBtZW51bmp1a2thbiBiYWh3YSBlc3RpbWFzaSBsZWJpaCBtdW5na2luIG1lbGVzZXQgZGFyaSBuaWxhaSBwb3B1bGFzaSBzZWJlbmFybnlhLiAgDQoNCiMjICoqUGVyYmFuZGluZ2FuIE1ldG9kZSBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKg0KDQp8ICoqS3JpdGVyaWEqKiAgICAgICAgICAgIHwgKipDb252ZW5pZW5jZSBTYW1wbGluZyoqIHwgKipQdXJwb3NpdmUgU2FtcGxpbmcqKiB8ICoqUXVvdGEgU2FtcGxpbmcqKiB8ICoqU25vd2JhbGwgU2FtcGxpbmcqKiB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKkRlZmluaXNpKiogICAgICAgICAgICB8IFBlbWlsaWhhbiBzYW1wZWwgYmVyZGFzYXJrYW4ga2VtdWRhaGFuIGFrc2VzLiB8IFNhbXBlbCBkaXBpbGloIGJlcmRhc2Fya2FuIGtyaXRlcmlhIHRlcnRlbnR1IHlhbmcgZGl0ZXRhcGthbiBvbGVoIHBlbmVsaXRpLiB8IFNhbXBlbCBkaXBpbGloIGJlcmRhc2Fya2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgeWFuZyBoYXJ1cyBtZW1lbnVoaSBrdW90YS4gfCBTYW1wZWwgZGlwZXJvbGVoIG1lbGFsdWkgcmVmZXJlbnNpIGRhcmkgcmVzcG9uZGVuIHNlYmVsdW1ueWEuIHwNCnwgKipQcm9zZXMgUGVtaWxpaGFuKiogICAgIHwgQmVyZGFzYXJrYW4gYWtzZXNpYmlsaXRhcyAoc2lhcGEgeWFuZyBtdWRhaCBkaWphbmdrYXUpLiB8IEJlcmRhc2Fya2FuIHBlcnRpbWJhbmdhbiBzdWJqZWt0aWYgcGVuZWxpdGkuIHwgQmVyZGFzYXJrYW4ga2F0ZWdvcmkgdGVydGVudHUsIHRldGFwaSBkYWxhbSBrYXRlZ29yaSBpdHUgcGVtaWxpaGFuIHRpZGFrIGFjYWsuIHwgQmVyZGFzYXJrYW4gamFyaW5nYW4gc29zaWFsIHJlc3BvbmRlbiBzZWJlbHVtbnlhLiB8DQp8ICoqVGluZ2thdCBCaWFzKiogICAgICAgIHwgVGluZ2dpIChTZWxlY3Rpb24gQmlhcyAmIFNhbXBsaW5nIEJpYXMpLiB8IFRpbmdnaSAoUmVzZWFyY2hlciBCaWFzICYgU3ViamVjdGl2ZSBKdWRnbWVudCkuIHwgU2VkYW5nICh0ZXJrZW5kYWxpIGRhbGFtIGt1b3RhLCB0ZXRhcGkgdGlkYWsgYWNhayBkYWxhbSBwZW1pbGloYW5ueWEpLiB8IFRpbmdnaSAoTmV0d29yayBCaWFzICYgSG9tb2dlbmVpdHkgQmlhcykuIHwNCnwgKipLZW11ZGFoYW4gUGVuZ2d1bmFhbioqIHwgU2FuZ2F0IE11ZGFoIHwgTXVkYWggfCBTZWRhbmcgKGJ1dHVoIHBlbmdlbG9tcG9rYW4ga3VvdGEgdGVybGViaWggZGFodWx1KS4gfCBTdWxpdCAodGVyZ2FudHVuZyBrZXRlcmxpYmF0YW4gcmVzcG9uZGVuKS4gfA0KfCAqKlJlcHJlc2VudGF0aWYgYXRhdSBUaWRhaz8qKiB8IFRpZGFrIHJlcHJlc2VudGF0aWYsIGthcmVuYSBoYW55YSBtZW5nZ2FtYmFya2FuIGtlbG9tcG9rIHRlcnRlbnR1LiB8IEt1cmFuZyByZXByZXNlbnRhdGlmLCBrYXJlbmEgYmVyZ2FudHVuZyBwYWRhIGtyaXRlcmlhIHlhbmcgZGl0ZXRhcGthbiBwZW5lbGl0aS4gfCBSZWxhdGlmIGxlYmloIHJlcHJlc2VudGF0aWYgZGliYW5kaW5na2FuIGNvbnZlbmllbmNlIGRhbiBwdXJwb3NpdmUsIHRldGFwaSB0ZXRhcCB0aWRhayBzZXBlbnVobnlhIGFjYWsuIHwgVGlkYWsgcmVwcmVzZW50YXRpZiBrYXJlbmEgaGFueWEgbWVsaWJhdGthbiBqYXJpbmdhbiB0ZXJ0ZW50dS4gfA0KfCAqKkNvY29rIERpZ3VuYWthbiB1bnR1az8qKiB8IFN0dWRpIGVrc3Bsb3JhdGlmLCBzdXJ2ZWkgYXdhbC4gfCBTdHVkaSB5YW5nIG1lbWJ1dHVoa2FuIGthcmFrdGVyaXN0aWsgcmVzcG9uZGVuIHRlcnRlbnR1LiB8IFN0dWRpIGRlbW9ncmFmaSBkZW5nYW4ga2FyYWt0ZXJpc3RpayBzcGVzaWZpay4gfCBTdHVkaSBwYWRhIHBvcHVsYXNpIHRlcnNlbWJ1bnlpIChtaXNhbG55YSBrb211bml0YXMgdGVydGVudHUpLiB8DQp8ICoqS2VjZXBhdGFuIFBlbmd1bXB1bGFuIERhdGEqKiB8IENlcGF0IHwgQ2VwYXQgfCBTZWRhbmcgKGthcmVuYSBoYXJ1cyBtZW1lbnVoaSBrdW90YSkuIHwgTGFtYmF0ICh0ZXJnYW50dW5nIHJla29tZW5kYXNpIHJlc3BvbmRlbikuIHwNCnwgKipLZWxlYmloYW4qKiAgICAgICAgICAgfCBNdWRhaCwgbXVyYWgsIGRhbiBjZXBhdC4gfCBCaXNhIG1lbmRhcGF0a2FuIHNhbXBlbCB5YW5nIHNlc3VhaSBkZW5nYW4ga2VidXR1aGFuIHBlbmVsaXRpYW4uIHwgQmlzYSBtZW55ZWltYmFuZ2thbiBkaXN0cmlidXNpIGthdGVnb3JpIGRhbGFtIHBvcHVsYXNpLiB8IEJpc2EgZGlndW5ha2FuIHVudHVrIHBvcHVsYXNpIHlhbmcgc3VsaXQgZGlqYW5na2F1LiB8DQp8ICoqS2VrdXJhbmdhbioqICAgICAgICAgfCBUaWRhayByZXByZXNlbnRhdGlmIGRhbiByYXdhbiBiaWFzLiB8IFN1Ympla3RpZiBkYW4gYmVyZ2FudHVuZyBwYWRhIHBlbmVsaXRpLiB8IFRpZGFrIGJlbmFyLWJlbmFyIGFjYWsgZGFuIG1hc2loIG1lbWlsaWtpIGJpYXMuIHwgUmVzcG9uZGVuIHlhbmcgZGlwaWxpaCBjZW5kZXJ1bmcgbWVtaWxpa2kga2FyYWt0ZXJpc3RpayBzZXJ1cGEuIHwNCg0KIyMjICoqQW5hbGlzaXMgZGFuIFBlbmplbGFzYW4gU2V0aWFwIE1ldG9kZSBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiANCg0KKioxLiBDb252ZW5pZW5jZSBTYW1wbGluZyAoU2FtcGVsIEtlbXVkYWhhbikqKg0KDQotICoqS2V1bmdndWxhbioqOiANCg0KICAtIENlcGF0IGRhbiBtdWRhaCBkaWxha3VrYW4gdGFucGEgYmFueWFrIHN1bWJlciBkYXlhLg0KDQogIC0gQ29jb2sgdW50dWsgc3R1ZGkgZWtzcGxvcmFzaSBhd2FsIGF0YXUgcGVuZWxpdGlhbiBkZW5nYW4ga2V0ZXJiYXRhc2FuIHdha3R1Lg0KDQotICoqS2VsZW1haGFuKio6IA0KDQogIC0gQmlhcyBzZWxla3NpIHRpbmdnaSBrYXJlbmEgaGFueWEgbWVuY2FrdXAgaW5kaXZpZHUgeWFuZyBtdWRhaCBkaWFrc2VzLg0KDQogIC0gVGlkYWsgcmVwcmVzZW50YXRpZiwgc2VoaW5nZ2EgaGFzaWxueWEgc3VsaXQgZGlnZW5lcmFsaXNhc2kga2Ugc2VsdXJ1aCBwb3B1bGFzaS4NCg0KLSAqKkRhbXBhayB0ZXJoYWRhcCBwZW5lbGl0aWFuKio6IA0KDQogIC0gTWlzYWxueWEsIGppa2Egc3VydmVpIGRpbGFrdWthbiBkaSBrYWZldGFyaWEsIG1haGFzaXN3YSB5YW5nIHNlcmluZyBtYWthbiBkaSBsdWFyIGthbXB1cyB0aWRhayBha2FuIHRlcndha2lsaSwgc2VoaW5nZ2EgZXN0aW1hc2kgcGVuZ2VsdWFyYW4gbWFrYW5hbiBiaXNhIGxlYmloIHRpbmdnaS9yZW5kYWggZGFyaSBuaWxhaSBzZWJlbmFybnlhLg0KDQotICoqS2VzaW1wdWxhbioqOiANCg0KICAtIEt1cmFuZyBjb2NvayB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgbWVtYnV0dWhrYW4gZXN0aW1hc2kgcG9wdWxhc2kgeWFuZyBha3VyYXQuIE5hbXVuLCBiaXNhIGRpZ3VuYWthbiBzZWJhZ2FpIGxhbmdrYWggYXdhbCB1bnR1ayBtZW1haGFtaSBwb2xhIGRhc2FyIHBvcHVsYXNpLg0KDQoqKjIuIEp1ZGdtZW50YWwgKFB1cnBvc2l2ZSkgU2FtcGxpbmcqKg0KDQotICoqS2V1bmdndWxhbioqOiANCg0KICAtIE1lbXVuZ2tpbmthbiBwZW5lbGl0aSBtZW1pbGloIGluZGl2aWR1IHlhbmcgZGlhbmdnYXAgcGFsaW5nIHJlbGV2YW4gdW50dWsgc3R1ZGkuDQoNCiAgLSBCZXJndW5hIHVudHVrIHBlbmVsaXRpYW4ga3VhbGl0YXRpZiBhdGF1IGVrc3Bsb3Jhc2kga2Vsb21wb2sgdGVydGVudHUgZGFsYW0gcG9wdWxhc2kuDQoNCi0gKipLZWxlbWFoYW4qKjogDQoNCiAgLSBCaWFzIHBlbWlsaWggdGVyamFkaSBrYXJlbmEgcGVuZWxpdGkgbWVuZ2d1bmFrYW4gc3ViamVrdGl2aXRhcyBkYWxhbSBtZW1pbGloIHNhbXBlbC4NCg0KICAtIEt1cmFuZyByZXByZXNlbnRhdGlmLCB0ZXJ1dGFtYSBqaWthIGhhbnlhIHNhdHUga3JpdGVyaWEgeWFuZyBkaWd1bmFrYW4gZGFsYW0gcGVtaWxpaGFuIHNhbXBlbC4NCg0KLSAqKkRhbXBhayB0ZXJoYWRhcCBwZW5lbGl0aWFuKio6IA0KDQogIC0gSmlrYSBoYW55YSBtZW1pbGloIG1haGFzaXN3YSBwZW5naHVuaSBhc3JhbWEgc2ViYWdhaSBzYW1wZWwsIGRhdGEgdGlkYWsgYWthbiBtZW5jZXJtaW5rYW4gbWFoYXNpc3dhIHlhbmcgdGluZ2dhbCBkaSBsdWFyIGthbXB1cywgeWFuZyBtdW5na2luIG1lbWlsaWtpIHBvbGEgcGVuZ2VsdWFyYW4gYmVyYmVkYS4NCg0KLSAqKktlc2ltcHVsYW4qKjogDQoNCiAgLSBDb2NvayB1bnR1ayBzdHVkaSBrdWFsaXRhdGlmIHlhbmcgbWVtZXJsdWthbiB3YXdhc2FuIG1lbmRhbGFtIHRlbnRhbmcga2Vsb21wb2sgdGVydGVudHUuDQoNCiAgLSBUaWRhayBpZGVhbCB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgbWVtZXJsdWthbiBlc3RpbWFzaSBzdGF0aXN0aWsgcG9wdWxhc2kgeWFuZyBha3VyYXQuDQoNCioqMy4gUXVvdGEgU2FtcGxpbmcqKg0KDQotICoqS2V1bmdndWxhbioqOiANCg0KICAtIE1lbWFzdGlrYW4gYWRhbnlhIHJlcHJlc2VudGFzaSBkYXJpIGtlbG9tcG9rIHRlcnRlbnR1IChtaXNhbG55YSwgcHJvcG9yc2kgdGlhcCBmYWt1bHRhcykuDQoNCiAgLSBMZWJpaCB0ZXJzdHJ1a3R1ciBkaWJhbmRpbmdrYW4gQ29udmVuaWVuY2UgU2FtcGxpbmcsIHNlaGluZ2dhIGhhc2lsbnlhIGxlYmloIG1lbmRla2F0aSBwb3B1bGFzaS4NCg0KLSAqKktlbGVtYWhhbioqOiANCg0KICAtIEJpYXMgcGVtaWxpaCBtYXNpaCBhZGEga2FyZW5hIGluZGl2aWR1IGRhbGFtIGt1b3RhIHRpZGFrIGRpcGlsaWggc2VjYXJhIGFjYWsuDQoNCiAgLSBCaWFzIHN1Ympla3RpZiBiaXNhIHRlcmphZGkga2FyZW5hIHBlbmVsaXRpIG1lbWlsaWtpIGtlYmViYXNhbiBkYWxhbSBtZW1pbGloIGluZGl2aWR1IGRhbGFtIGtlbG9tcG9rLg0KDQotICoqRGFtcGFrIHRlcmhhZGFwIHBlbmVsaXRpYW4qKjogDQoNCiAgLSBNaXNhbG55YSwgbWVza2lwdW4ganVtbGFoIHNhbXBlbCBkYXJpIHRpYXAgZmFrdWx0YXMgc3VkYWggZGl0ZW50dWthbiwgcGVuZWxpdGkgYmlzYSBtZW1pbGloIGhhbnlhIG1haGFzaXN3YSB5YW5nIG11ZGFoIGRpamFuZ2thdSwgc2VoaW5nZ2EgdmFyaWFzaSBkYWxhbSBrZWxvbXBvayB0aWRhayB0ZXJjZXJtaW4gZGVuZ2FuIGJhaWsuDQoNCi0gKipLZXNpbXB1bGFuKio6IA0KDQogIC0gTGViaWggYmFpayBkYXJpcGFkYSBDb252ZW5pZW5jZSBhdGF1IEp1ZGdtZW50YWwgU2FtcGxpbmcsIHRldGFwaSBtYXNpaCBtZW1pbGlraSBwb3RlbnNpIGJpYXMuDQoNCiAgLSBDb2NvayB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgaW5naW4gbWVuamFnYSBkaXN0cmlidXNpIGtlbG9tcG9rIHRlcnRlbnR1LCB0ZXRhcGkgdGlkYWsgbWVtZXJsdWthbiBrZWFjYWthbiBwZW51aC4NCg0KKio0LiBTbm93YmFsbCBTYW1wbGluZyoqDQoNCi0gKipLZXVuZ2d1bGFuKio6IA0KDQogIC0gRWZla3RpZiB1bnR1ayBtZW5lbGl0aSBrZWxvbXBvayB5YW5nIHN1bGl0IGRpamFuZ2thdSwgc2VwZXJ0aSBtYWhhc2lzd2EgZGVuZ2FuIGtvbmRpc2kgZWtvbm9taSB0ZXJ0ZW50dSBhdGF1IGtvbXVuaXRhcyBraHVzdXMuDQoNCiAgLSBNZW5naGVtYXQgd2FrdHUgZGFuIHN1bWJlciBkYXlhIGthcmVuYSByZXNwb25kZW4gbWVtYmFudHUgbWVuZW11a2FuIHNhbXBlbCBsYWlubnlhLg0KDQotICoqS2VsZW1haGFuKio6IA0KDQogIC0gQmlhcyBqYXJpbmdhbiBzb3NpYWwgdGVyamFkaSBrYXJlbmEgaW5kaXZpZHUgY2VuZGVydW5nIG1lcmVrb21lbmRhc2lrYW4gb3JhbmcgZGVuZ2FuIGthcmFrdGVyaXN0aWsgc2VydXBhLg0KDQogIC0gS3VyYW5nIHJlcHJlc2VudGF0aWYga2FyZW5hIHNhbXBlbCBiZXJhc2FsIGRhcmkgbGluZ2thcmFuIHNvc2lhbCB5YW5nIHRlcmJhdGFzLg0KDQotICoqRGFtcGFrIHRlcmhhZGFwIHBlbmVsaXRpYW4qKjogDQoNCiAgLSBNaXNhbG55YSwgamlrYSBwZW5lbGl0aWFuIGRpbXVsYWkgZGVuZ2FuIG1haGFzaXN3YSB5YW5nIGJlcmFzYWwgZGFyaSBrZWx1YXJnYSBla29ub21pIG1lbmVuZ2FoIGtlIGF0YXMsIG1lcmVrYSBrZW11bmdraW5hbiBiZXNhciBha2FuIG1lcmVrb21lbmRhc2lrYW4gdGVtYW4tdGVtYW4gZGVuZ2FuIGtvbmRpc2kgc2VydXBhLiBJbmkgbWVueWViYWJrYW4gZGF0YSB0aWRhayBtZW5jZXJtaW5rYW4gcG9wdWxhc2kgbWFoYXNpc3dhIHNlY2FyYSBrZXNlbHVydWhhbi4NCg0KLSAqKktlc2ltcHVsYW4qKjogDQoNCiAgLSBCYWd1cyB1bnR1ayBwZW5lbGl0aWFuIGt1YWxpdGF0aWYgYXRhdSBrZWxvbXBvayB5YW5nIHN1bGl0IGRpdGVtdWthbi4NCg0KICAtIFRpZGFrIGNvY29rIHVudHVrIHN0dWRpIHlhbmcgbWVtZXJsdWthbiBkaXN0cmlidXNpIGRhdGEgeWFuZyBsZWJpaCBsdWFzIGRhbiByZXByZXNlbnRhdGlmLg0KDQojIyAqKlBlcmJhbmRpbmdhbiBTZW11YSBNZXRvZGUqKg0KDQp8ICoqQXNwZWsqKiAgICAgICAgICAgICAgICAgfCAqKlNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykqKiB8ICoqU3RyYXRpZmllZCBTYW1wbGluZyoqIHwgKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogfCAqKkNsdXN0ZXIgU2FtcGxpbmcqKiB8ICoqTXVsdGktU3RhZ2UgU2FtcGxpbmcqKiB8ICoqQ29udmVuaWVuY2UgU2FtcGxpbmcqKiB8ICoqSnVkZ21lbnRhbCAoUHVycG9zaXZlKSBTYW1wbGluZyoqIHwgKipRdW90YSBTYW1wbGluZyoqIHwgKipTbm93YmFsbCBTYW1wbGluZyoqIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqS2VhY2FrYW4qKiAgICAgICAgICAgICAgfCBZYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZYSAgICAgICAgICAgICAgICAgICAgIHwgWWEsIHRldGFwaSByZW50YW4gYmlhcyBqaWthIGFkYSBwb2xhIHwgWWEsIHRldGFwaSB0ZXJiYXRhcyB8IFlhLCB0ZXRhcGkgdGVyYmF0YXMgfCBUaWRhayAgICAgICAgICAgICAgIHwgVGlkYWsgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRpZGFrICAgICAgICAgIHwgVGlkYWsgICAgICAgICAgfA0KfCAqKlJlcHJlc2VudGF0aXZpdGFzKiogICAgICB8IFNlZGFuZyAgICAgICAgICAgICAgICAgICAgICAgIHwgVGluZ2dpICAgICAgICAgICAgICAgICB8IFNlZGFuZyAgICAgICAgICAgICAgICAgfCBSZW5kYWggLSBTZWRhbmcgICAgICB8IFNlZGFuZyAtIFRpbmdnaSAgICAgIHwgUmVuZGFoICAgICAgICAgICAgICB8IFJlbmRhaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8IFJlbmRhaCAgICAgICAgIHwNCnwgKipCaWFzKiogICAgICAgICAgICAgICAgICB8IFJlbmRhaCAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVuZGFoICAgICAgICAgICAgICAgICB8IFJlbmRhaCAtIFNlZGFuZyAgICAgICAgfCBTZWRhbmcgICAgICAgICAgICAgICB8IFNlZGFuZyAgICAgICAgICAgICAgIHwgVGluZ2dpICAgICAgICAgICAgICB8IFRpbmdnaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8IFRpbmdnaSAgICAgICAgIHwNCnwgKipLZW11ZGFoYW4gUGVsYWtzYW5hYW4qKiAgfCBTZWRhbmcgICAgICAgICAgICAgICAgICAgICAgICB8IFN1bGl0ICAgICAgICAgICAgICAgICAgfCBNdWRhaCAgICAgICAgICAgICAgICAgIHwgTXVkYWggICAgICAgICAgICAgICAgfCBTdWxpdCAgICAgICAgICAgICAgICB8IFNhbmdhdCBNdWRhaCAgICAgICAgfCBNdWRhaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VkYW5nICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8DQp8ICoqQmlheWEqKiAgICAgICAgICAgICAgICAgfCBTZWRhbmcgICAgICAgICAgICAgICAgICAgICAgICB8IFRpbmdnaSAgICAgICAgICAgICAgICAgfCBSZW5kYWggICAgICAgICAgICAgICAgIHwgUmVuZGFoICAgICAgICAgICAgICAgfCBUaW5nZ2kgICAgICAgICAgICAgICB8IFNhbmdhdCBSZW5kYWggICAgICAgfCBSZW5kYWggICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VkYW5nICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8DQp8ICoqQ29jb2sgdW50dWsgUG9wdWxhc2kqKiAgIHwgSG9tb2dlbiAmIGJlc2FyICAgICAgICAgICAgICAgfCBIZXRlcm9nZW4gICAgICAgICAgICAgIHwgSG9tb2dlbiAmIGJlc2FyICAgICAgICB8IEJlcmtlbG9tcG9rIChDbHVzdGVyKXwgU2FuZ2F0IGJlc2FyICYga29tcGxla3MgfCBUaWRhayBzcGVzaWZpayAgICAgIHwgU3Blc2lmaWsgKHNlc3VhaSB0dWp1YW4gcGVuZWxpdGlhbikgfCBCZXJhZ2FtICAgICAgICB8IFBvcHVsYXNpIFRlcnNlbWJ1bnlpIHwNCg0KDQojICoqVWt1cmFuIFNhbXBlbCB5YW5nIERpcGVybHVrYW4gdW50dWsgTW9FID0gNSoqDQoNCiMjIFJ1bXVzIFBlcnRhbWENCg0KJCQNCm4gPSBcZnJhY3soWiBcdGltZXMgXHNpZ21hKV4yfXtNb0VeMn0NCiQkDQoNCkRlbmdhbjogIA0KDQotICRaJCA9IDEuOTYgIChaLXNjb3JlIHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKSAgDQoNCi0gJE1vRSQgPSA1ICAgKE1hcmdpbiBvZiBFcnJvcikNCg0KLSAkXHNpZ21hJCA9IHNpbXBhbmdhbiBiYWt1IA0KDQojIyMgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKioNCg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzQuMzEyDQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7KDEuOTYgXHRpbWVzIDU3NDMxMileMn17NV4yfVxcDQpuID0gXGZyYWN7KDExMjU2NTEuNTIpXjJ9ezI1fVxcDQpuID0gXGZyYWN7MS4yNjYuMTEyLjkxNi43OTIuMzEwfXsyNX1cXA0KbiA9IDUwLjY4My42NTMuNzc5DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpaIDwtIDEuOTYNCnNpZ21hIDwtIDU3NDMxMg0KTW9FIDwtIDUNCg0KbiA8LSAoWiAqIHNpZ21hKV4yIC8gKE1vRV4yKQ0KcHJpbnQobikNCmBgYA0KDQpTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpIGRpZGFzYXJrYW4gcGFkYSBwZW1pbGloYW4gYWNhayB0YW5wYSBtZW1wZXJ0aW1iYW5na2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgZGFyaSBwb3B1bGFzaS4gSGFzaWwgcGVyaGl0dW5nYW4geWFuZyBzYW5nYXQgYmVzYXIgbWVudW5qdWtrYW4gYmFod2EgZGVuZ2FuIHZhcmlhYmlsaXRhcyBwZW5nZWx1YXJhbiB5YW5nIHRpbmdnaSAo8J2cjj01NzQuMzEyKSwga2l0YSBtZW1lcmx1a2FuIHNhbXBlbCBkYWxhbSBqdW1sYWggc2FuZ2F0IGJlc2FyIHVudHVrIG1lbmNhcGFpIG1hcmdpbiBvZiBlcnJvciBzZWJlc2FyIFJwIDUuIERhbGFtIHByYWt0aWtueWEsIGFuZ2thIGluaSB0aWRhayByZWFsaXN0aXMsIHlhbmcgYmVyYXJ0aSBwZXJsdSBwZW55ZXN1YWlhbiwgc2VwZXJ0aSBtZW5pbmdrYXRrYW4gbWFyZ2luIG9mIGVycm9yIGF0YXUgbWVuZ2d1bmFrYW4gbWV0b2RlIHNhbXBsaW5nIGxhaW4geWFuZyBsZWJpaCBlZmlzaWVuLg0KDQojIyMgKipTdHJhdGlmaWVkIFJhbmRvbSBTYW1wbGluZyoqDQpEaWtldGFodWkgOg0KDQotICRaJCA9IDEuOTYgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzkuMjMzLDk3DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7KDEuOTYgXHRpbWVzIDU3OTIzMy45NyleMn17NV4yfVxcDQpuID0gXGZyYWN7KDExMzUyMDkuNTkpXjJ9ezI1fVxcDQpuID0gXGZyYWN7MS4yODkuMTgxLjM3MC41MDkuNjY3fXsyNX1cXA0KbiA9IDUxLjU1Ni4xMTQuNzM5DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpzaWdtYSA8LSA1NzkyMzMuOTcNCm4gPC0gKFogKiBzaWdtYSleMiAvIChNb0VeMikNCnByaW50KG4pDQpgYGANCg0KU3RyYXRpZmllZCBTYW1wbGluZyBtZW1iYWdpIHBvcHVsYXNpIGtlIGRhbGFtIGtlbG9tcG9rIChzdHJhdGEpIGJlcmRhc2Fya2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgc2ViZWx1bSBwZW5nYW1iaWxhbiBzYW1wZWwgZGlsYWt1a2FuIGRhbGFtIHNldGlhcCBzdHJhdGEuIFNpbXBhbmdhbiBiYWt1IHNlZGlraXQgbGViaWggdGluZ2dpIGRpYmFuZGluZ2thbiBTUlMgKM+DPTU3OS4yMzMsOTcpLCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIHRlcmRhcGF0IHBlcmJlZGFhbiBhbnRhciBrZWxvbXBvayB5YW5nIG1lbnllYmFia2FuIHBlcmx1bnlhIHVrdXJhbiBzYW1wZWwgbGViaWggYmVzYXIuIEppa2Egc3RyYXRpZmlrYXNpIGRpbGFrdWthbiBkZW5nYW4gYmFpaywganVtbGFoIHNhbXBlbCBzZWhhcnVzbnlhIGJpc2EgZGlrdXJhbmdpIHNhbWJpbCB0ZXRhcCBtZW5qYWdhIHJlcHJlc2VudGF0aXZpdGFzIGRhdGEuDQoNCiMjIyAqKlN5c3RlbWF0aWMgU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTiQgPSA1MDAgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzguMjc2LDE0DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7KDEuOTYgXHRpbWVzIDU3ODI3Ni4xNCleMn17NV4yfVxcDQpuID0gXGZyYWN7KDExMzMzMzEuMjMpXjJ9ezI1fVxcDQpuID0gXGZyYWN7MS4yODMuOTM3LjY5NC41OTEuMTU4fXsyNX1cXA0KbiA9IDUxLjM4NS43NDcuNzg0DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpzaWdtYSA8LSA1NzgyNzYuMTQNCm4gPC0gKFogKiBzaWdtYSleMiAvIChNb0VeMikNCnByaW50KG4pDQpgYGANCg0KU3lzdGVtYXRpYyBTYW1wbGluZyBtZW1pbGloIHNhbXBlbCBiZXJkYXNhcmthbiBpbnRlcnZhbCB0ZXRhcCwgbWlzYWxueWEgc2V0aWFwIGtlLfCdkZhkYXJpIGRhZnRhciBwb3B1bGFzaS4gU2ltcGFuZ2FuIGJha3VueWEgKM+DPTU3OC4yNzYsMTQpIGp1Z2EgY3VrdXAgdGluZ2dpLCBtZW55ZWJhYmthbiBwZXJoaXR1bmdhbiB1a3VyYW4gc2FtcGVsIGhhbXBpciBzYW1hLiBKaWthIHBvcHVsYXNpIG1lbWlsaWtpIHBvbGEgdGVydGVudHUgZGFsYW0gZGF0YSAobWlzYWxueWEgYWRhIHNpa2x1cyBkYWxhbSBwZW5nZWx1YXJhbiksIG1ldG9kZSBpbmkgZGFwYXQgbWVtYmVyaWthbiBoYXNpbCB5YW5nIGt1cmFuZyBha3VyYXQgZGliYW5kaW5na2FuIFNSUyBhdGF1IFN0cmF0aWZpZWQgU2FtcGxpbmcuDQoNCiMjIyAqKkNsdXN0ZXIgU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTY0LjYwMCw2Mg0KDQpNYWthOg0KDQokJA0KbiA9IFxmcmFjeygxLjk2IFx0aW1lcyA1NjQ2MDAuNjIpXjJ9ezVeMn1cXA0KbiA9IFxmcmFjeygxMTA2NjUxLjIyKV4yfXsyNX1cXA0KbiA9IFxmcmFjezEuMjI0LjYwMS42NjAuOTg2LjAwN317MjV9XFwNCm4gPSA0OC45ODQuMDY2LjQzOQ0KJCQNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0Kc2lnbWEgPC0gNTY0NjAwLjYyDQpuIDwtIChaICogc2lnbWEpXjIgLyAoTW9FXjIpDQpwcmludChuKQ0KYGBgDQoNCkNsdXN0ZXIgU2FtcGxpbmcgbWVtaWxpaCBrZWxvbXBvayAoY2x1c3Rlcikgc2VjYXJhIGFjYWsgZGFuIG1lbmd1bXB1bGthbiBkYXRhIGRhcmkgc2VtdWEgaW5kaXZpZHUgZGFsYW0gY2x1c3RlciB0ZXJzZWJ1dC4NCk1lbmdhcGEgbGViaWgga2VjaWwgZGFyaSBtZXRvZGUgbGFpbj8gU2ltcGFuZ2FuIGJha3VueWEgbGViaWggcmVuZGFoICjPgz01NjQuNjAwLDYyKSwgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFiaWxpdGFzIGRhbGFtIGNsdXN0ZXIgbGViaWgga2VjaWwgZGliYW5kaW5na2FuIG1ldG9kZSBsYWlubnlhLCBzZWhpbmdnYSB1a3VyYW4gc2FtcGVsIHlhbmcgZGloaXR1bmcgc2VkaWtpdCBsZWJpaCByZW5kYWguIENsdXN0ZXIgU2FtcGxpbmcgY2VuZGVydW5nIGxlYmloIGVmaXNpZW4gZGFsYW0gaGFsIGJpYXlhIGRhbiB3YWt0dSwgdGV0YXBpIGJpc2EgbWVuZ2hhc2lsa2FuIGJpYXMgamlrYSBjbHVzdGVyIHlhbmcgZGlwaWxpaCB0aWRhayBiZW5hci1iZW5hciBtZXdha2lsaSBwb3B1bGFzaSBzZWNhcmEga2VzZWx1cnVoYW4uDQoNCiMjIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45Ng0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1ODQuNjkwLDQNCg0KTWFrYToNCg0KJCQNCm4gPSBcZnJhY3soMS45NiBcdGltZXMgNTg0NjkwLjQwKV4yfXs1XjJ9XFwNCm4gPSBcZnJhY3soMTE0NTgwOS4xOCleMn17MjV9XFwNCm4gPSBcZnJhY3sxLjMxMy4zMDAuMzc3Ljc5MC4wNzF9ezI1fVxcDQpuID0gNTIuNTMyLjAxNS4xMTENCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCnNpZ21hIDwtIDU4NDY5MC40MA0KbiA8LSAoWiAqIHNpZ21hKV4yIC8gKE1vRV4yKQ0KcHJpbnQobikNCmBgYA0KDQpNdWx0aS1TdGFnZSBTYW1wbGluZyBhZGFsYWggdmFyaWFzaSBkYXJpIENsdXN0ZXIgU2FtcGxpbmcgZGkgbWFuYSBwZW5nYW1iaWxhbiBzYW1wZWwgZGlsYWt1a2FuIGRhbGFtIGJlYmVyYXBhIHRhaGFwLCBtaXNhbG55YSBtZW1pbGloIHdpbGF5YWggdGVydGVudHUsIGxhbHUgbWVtaWxpaCBydW1haCB0YW5nZ2EgZGkgZGFsYW1ueWEuDQpNZW5nYXBhIHBhbGluZyBiZXNhcj8gU2ltcGFuZ2FuIGJha3UgdGVydGluZ2dpICjPgz01ODQuNjkwLDQwKSBtZW51bmp1a2thbiBhZGFueWEgdmFyaWFiaWxpdGFzIHlhbmcgc2FuZ2F0IGJlc2FyIGFudGFyIGtlbG9tcG9rIHlhbmcgZGlwaWxpaCwgc2VoaW5nZ2EgdWt1cmFuIHNhbXBlbCB5YW5nIGRpaGl0dW5nIGxlYmloIGJlc2FyIGRpYmFuZGluZ2thbiBtZXRvZGUgbGFpbm55YS4gSmlrYSBNdWx0aS1TdGFnZSBTYW1wbGluZyBkaWxha3VrYW4gZGVuZ2FuIGJhaWssIGRhcGF0IG1lbmphZGkgbWV0b2RlIHlhbmcgZWZpc2llbiB1bnR1ayBzdXJ2ZWkgYmVzYXIsIHRldGFwaSBqaWthIHZhcmlhYmlsaXRhcyBhbnRhciBrZWxvbXBvayB0aW5nZ2ksIGhhc2lsIGJpc2Ega3VyYW5nIGFrdXJhdC4NCg0KIyMgUnVtdXMgS2VkdWENCg0KRGlkYXBhdGthbiBoYXNpbCBhcGFiaWxhIG1lbmdndW5ha2FuIHJ1bXVzIHBlcnRhbWEsIG1ha2EgaGFzaWxueWEgbWVtaWxpa2kgYW5na2EgeWFuZyB0aWRhayByZWFsaXN0aXMga2FyZW5hIG1lbWlsaWtpIGp1bWxhaCB5YW5nIHNhbmdhdCBiZXNhci4gU2VkYW5na2FuIGhhbnlhIG1lbWlsaWtpIHBvcHVsYXNpIHNlYmVzYXIgNTAwLCBzZWhpbmdnYSB1bnR1ayBwZXJoaXR1bmdhbiBtZW5nZ3VuYWthbiBydW11cyBwZXJ0YW1hIG1lbWlsaWtpIGhhc2lsIHlhbmcgdGlkYWsgYWt1cmF0Lg0KDQpNYWthIGRhcmkgaXR1IHVudHVrIG1lbmdrb3Jla3NpIHBlcmhpdHVuZ2FuIHBlcnRhbWEsIGtpdGEgYmlzYSBtZW5lcmFwa2FuIEZpbml0ZSBQb3B1bGF0aW9uIENvcnJlY3Rpb24gKEZQQykgdW50dWsgbWVueWVzdWFpa2FuIHVrdXJhbiBzYW1wZWwgZGVuZ2FuIGtldGVyYmF0YXNhbiBwb3B1bGFzaS4gRGlzaW5pIGtpdGEgYmlzYSBtZW5nZ3VuYWthbiAyIGNhcmEsIHlhaXR1IGRlbmdhbiBjYXJhIG1lbmdrb3Jla3NpIGxhbmdzdW5nIGRhbiBtZW5naGl0dW5nIHVsYW5nIG5hbXVuIHRldGFwIG1lbmVyYXBrYW4gRlBDLg0KDQojIyMgS29yZWtzaSBMYW5nc3VuZw0KDQpQYWRhIGNhcmEgcGVydGFtYSB5YWl0dSBtZW5na29yZWtzaSBsYW5nc3VuZywgYmlzYSBtZW5nZ3VuYWthbiBydW11czoNCg0KJCQNCm5fe2Fkan0gPSBcZnJhY3tufXsxICsgXGZyYWN7biAtIDF9e059fQ0KJCQNCg0KZGkgbWFuYTogIA0KLSAkbiQgPSB1a3VyYW4gc2FtcGVsIHlhbmcgZGloaXR1bmcgc2ViZWx1bW55YSAgDQotICROJCA9IDUwMCAodWt1cmFuIHBvcHVsYXNpKSAgDQoNCiMjIyMgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s1MC42ODMuNjUzLjc3OX17MSArIFxmcmFjezUwLjY4My42NTMuNzc5IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipTdHJhdGlmaWVkIFNhbXBsaW5nKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s1MS41NTYuMTE0LjczOX17MSArIFxmcmFjezUxLjU1Ni4xMTQuNzM5IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s1MS4zODUuNzQ3Ljc4NH17MSArIFxmcmFjezUxLjM4NS43NDcuNzg0IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipDbHVzdGVyIFNhbXBsaW5nKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s0OC45ODQuMDY2LjQzOX17MSArIFxmcmFjezQ4Ljk4NC4wNjYuNDM5IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipNdWx0aS1TdGFnZSBTYW1wbGluZyoqICANCiQkbl97YWRqfSA9IFxmcmFjezUyLjUzMi4wMTUuMTExfXsxICsgXGZyYWN7NTIuNTMyLjAxNS4xMTEgLSAxfXs1MDB9fVxcDQpuX3thZGp9IFxhcHByb3ggNDk5Ljk5OTk5NSBcYXBwcm94IDUwMA0KJCQNCg0KIyMjIEtvcmVrc2kgZGVuZ2FuIE1lbmdoaXR1bmcgVWxhbmcNCg0KUGFkYSBjYXJhIGtlZHVhLCB5YWl0dSBtZW5naGl0dW5nIHVsYW5nLiBNYWthIGRhcGF0IG1lbmdndW5ha2FuIHJ1bXVzOiANCg0KJCQNCm4gPSBcZnJhY3taXjIgXGNkb3QgXHNpZ21hXjIgXGNkb3QgTn17KE1vRV4yIFxjZG90IChOIC0gMSkpICsgKFpeMiBcY2RvdCBcc2lnbWFeMil9DQokJA0KDQpkZW5nYW46ICANCg0KLSAkWiQgPSAxLjk2ICAodW50dWsgdGluZ2thdCBrZXBlcmNheWFhbiA5NSUpICANCg0KLSAkTiQgPSA1MDAgIChqdW1sYWggcG9wdWxhc2kpICANCg0KLSAkTW9FJCA9IDUgIChNYXJnaW4gb2YgRXJyb3IpDQoNCi0gJFxzaWdtYSQgPSBTaW1wYW5nYW4gYmFrdQ0KDQojIyMjICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSoqDQoNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45NiAgDQoNCi0gJE4kID0gNTAwICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTc0LjMxMg0KDQpNYWthOg0KDQokJA0KbiA9IFxmcmFje1peMiBcY2RvdCBcc2lnbWFeMiBcY2RvdCBOfXsoTW9FXjIgXGNkb3QgKE4gLSAxKSkgKyAoWl4yIFxjZG90IFxzaWdtYV4yKX1cXA0KbiA9IFxmcmFjezEsOTZeMiBcY2RvdCA1NzQzMTJeMiBcY2RvdCA1MDB9eyg1XjIgXGNkb3QgKDUwMCAtIDEpKSArICgxLDk2XjIgXGNkb3Q1NzQzMTJeMil9XFwNCm4gPSA0OTksOTk5OTk1DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiBTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpLCB1a3VyYW4gc2FtcGVsIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5jYXBhaSBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgc2ViZXNhciBScCA1IGRlbmdhbiBzaW1wYW5nYW4gYmFrdSBScCA1NzQuMzEyIGRhbiBwb3B1bGFzaSA1MDAgYWRhbGFoIHNla2l0YXIgNTAwLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHVudHVrIG1lbmNhcGFpIHRpbmdrYXQgcHJlc2lzaSB5YW5nIHNhbmdhdCB0aW5nZ2ksIGhhbXBpciBzZWx1cnVoIHBvcHVsYXNpIGhhcnVzIGRpc3VydmVpLCBtZW1idWF0IG1ldG9kZSBzYW1wbGluZyBpbmkgdGlkYWsgbGFnaSBlZmlzaWVuIGRhbiBtZW5kZWthdGkgc2Vuc3VzIHBlbnVoLg0KDQojIyMjICoqU3RyYXRpZmllZCBSYW5kb20gU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTiQgPSA1MDAgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzkuMjMzLDk3DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7Wl4yIFxjZG90IFxzaWdtYV4yIFxjZG90IE59eyhNb0VeMiBcY2RvdCAoTiAtIDEpKSArIChaXjIgXGNkb3QgXHNpZ21hXjIpfVxcDQpuID0gXGZyYWN7MSw5Nl4yIFxjZG90IDU3OTIzMyw5N14yIFxjZG90IDUwMH17KDVeMiBcY2RvdCAoNTAwIC0gMSkpICsgKDEsOTZeMiBcY2RvdCA1NzkyMzMsOTdeMil9XFwNCm4gPSA0OTksOTk5OTk1DQokJA0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRGlrZXRhaHVpDQpaID0gMS45NiAgIyBaLXNjb3JlIHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlDQpzaWdtYSA9IDU3OTIzMy45NyAgIyBTaW1wYW5nYW4gYmFrdSAoUnApDQpOID0gNTAwICAjIFVrdXJhbiBwb3B1bGFzaQ0KTW9FID0gNSAgIyBNYXJnaW4gb2YgRXJyb3IgeWFuZyBkaWluZ2lua2FuDQoNCiMgTWVuZ2hpdHVuZyB1a3VyYW4gc2FtcGVsIGRlbmdhbiBmaW5pdGUgcG9wdWxhdGlvbiBjb3JyZWN0aW9uIChGUEMpDQpudW1lcmF0b3IgPSAoWioqMiAqIHNpZ21hKioyICogTikNCmRlbm9taW5hdG9yID0gKE1vRSoqMiAqIChOIC0gMSkpICsgKFoqKjIgKiBzaWdtYSoqMikNCm5fcmVxdWlyZWQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcg0KDQojIE1lbmFtcGlsa2FuIGhhc2lsDQpvcHRpb25zKGRpZ2l0cz0xMCkgDQpuX3JlcXVpcmVkDQpgYGANCkJlcmRhc2Fya2FuIHBlcmhpdHVuZ2FuIHVudHVrIG1ldG9kZSBTdHJhdGlmaWVkIFJhbmRvbSBTYW1wbGluZywgdWt1cmFuIHNhbXBlbCB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuY2FwYWkgTWFyZ2luIG9mIEVycm9yIChNb0UpIHNlYmVzYXIgUnAgNSBkZW5nYW4gc2ltcGFuZ2FuIGJha3UgUnAgNTc5LjIzMyw5NyBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSwgc2VwZXJ0aSBkYWxhbSBtZXRvZGUgU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSwgaGFtcGlyIHNlbHVydWggcG9wdWxhc2kgaGFydXMgZGlzdXJ2ZWkgdW50dWsgbWVuY2FwYWkgdGluZ2thdCBrZXRlcGF0YW4geWFuZyBzYW5nYXQgdGluZ2dpLiBTdHJhdGlmaWVkIFNhbXBsaW5nIGJpYXNhbnlhIGxlYmloIGVmaXNpZW4gZGliYW5kaW5na2FuIFNSUyBrYXJlbmEgbWVtYmFnaSBwb3B1bGFzaSBrZSBkYWxhbSBzdHJhdGEgeWFuZyBsZWJpaCBob21vZ2VuLCBuYW11biBkYWxhbSBrYXN1cyBpbmksIGthcmVuYSBNb0UgeWFuZyBzYW5nYXQga2VjaWwsIG1ldG9kZSBpbmkgdGV0YXAgbWVtYnV0dWhrYW4gaGFtcGlyIHNlbHVydWggcG9wdWxhc2kuIE9sZWgga2FyZW5hIGl0dSwgdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5lbGl0aWFuLCBNYXJnaW4gb2YgRXJyb3IgcGVybHUgZGlwZXJiZXNhciBhZ2FyIHVrdXJhbiBzYW1wZWwgeWFuZyBkaWJ1dHVoa2FuIGxlYmloIGtlY2lsIGRhbiBsZWJpaCByZWFsaXN0aXMgdW50dWsgZGlpbXBsZW1lbnRhc2lrYW4uDQoNCiMjIyMgKipTeXN0ZW1hdGljIFNhbXBsaW5nKioNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45NiAgDQoNCi0gJE4kID0gNTAwICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTc4LjI3NiwxNA0KDQpNYWthOg0KDQokJA0KbiA9IFxmcmFje1peMiBcY2RvdCBcc2lnbWFeMiBcY2RvdCBOfXsoTW9FXjIgXGNkb3QgKE4gLSAxKSkgKyAoWl4yIFxjZG90IFxzaWdtYV4yKX1cXA0KbiA9IFxmcmFjezEsOTZeMiBcY2RvdCA1NzgyNzYsMTReMiBcY2RvdCA1MDB9eyg1XjIgXGNkb3QgKDUwMCAtIDEpKSArICgxLDk2XjIgXGNkb3QgNTc4Mjc2LDE0XjIpfVxcDQpuID0gNDk5LDk5OTk5NQ0KJCQNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiB1bnR1ayBtZXRvZGUgU3lzdGVtYXRpYyBTYW1wbGluZywganVtbGFoIHNhbXBlbCB5YW5nIGRpYnV0dWhrYW4gdW50dWsgbWVuY2FwYWkgTWFyZ2luIG9mIEVycm9yIChNb0UpIHNlYmVzYXIgUnAgNSBkZW5nYW4gc2ltcGFuZ2FuIGJha3UgUnAgNTc4LjI3NiwxNCBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSBoYW1waXIgc2VsdXJ1aCBwb3B1bGFzaSBoYXJ1cyBkaWFtYmlsIHNlYmFnYWkgc2FtcGVsIHVudHVrIG1lbmNhcGFpIHRpbmdrYXQgcHJlc2lzaSB5YW5nIHNhbmdhdCB0aW5nZ2kuIFN5c3RlbWF0aWMgU2FtcGxpbmcgc2VyaW5nIGRpZ3VuYWthbiBrYXJlbmEga2VtdWRhaGFubnlhIGRhbGFtIHBlbWlsaWhhbiBzYW1wZWwgc2VjYXJhIGJlcmthbGEgZGFyaSBkYWZ0YXIgeWFuZyB0ZWxhaCBkaXVydXRrYW4uIE5hbXVuLCBkYWxhbSBrYXN1cyBpbmksIGRlbmdhbiBNb0UgeWFuZyBzYW5nYXQga2VjaWwsIG1ldG9kZSBpbmkgdGV0YXAgbWVtYnV0dWhrYW4gaGFtcGlyIHNlbHVydWggcG9wdWxhc2ksIG1pcmlwIGRlbmdhbiBTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpIGRhbiBTdHJhdGlmaWVkIFNhbXBsaW5nLiBPbGVoIGthcmVuYSBpdHUsIGFnYXIgcGVuZWxpdGlhbiBsZWJpaCBlZmlzaWVuIGRhbiBwcmFrdGlzLCBwZXJsdSBtZW1wZXJ0aW1iYW5na2FuIE1hcmdpbiBvZiBFcnJvciB5YW5nIGxlYmloIGJlc2FyIHNlaGluZ2dhIHVrdXJhbiBzYW1wZWwgeWFuZyBkaXBlcmx1a2FuIGRhcGF0IGRpa3VyYW5naSB0YW5wYSBtZW5nb3JiYW5rYW4gYWt1cmFzaSBzZWNhcmEgc2lnbmlmaWthbi4NCg0KIyMjIyAqKkNsdXN0ZXIgU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTiQgPSA1MDAgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NjQuNjAwLDYyDQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7Wl4yIFxjZG90IFxzaWdtYV4yIFxjZG90IE59eyhNb0VeMiBcY2RvdCAoTiAtIDEpKSArIChaXjIgXGNkb3QgXHNpZ21hXjIpfVxcDQpuID0gXGZyYWN7MSw5Nl4yIFxjZG90IDU2NDYwMCw2Ml4yIFxjZG90IDUwMH17KDVeMiBcY2RvdCAoNTAwIC0gMSkpICsgKDEsOTZeMiBcY2RvdCA1NjQ2MDAsNjJeMil9XFwNCm4gPSA0OTksOTk5OTk1DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBoYXNpbCBwZXJoaXR1bmdhbiB1bnR1ayBtZXRvZGUgQ2x1c3RlciBTYW1wbGluZywganVtbGFoIHNhbXBlbCB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuY2FwYWkgTWFyZ2luIG9mIEVycm9yIChNb0UpIHNlYmVzYXIgUnAgNSBkZW5nYW4gc2ltcGFuZ2FuIGJha3UgUnAgNTY0LjYwMCw2MiBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSW5pIGJlcmFydGkgYmFod2EgaGFtcGlyIHNlbHVydWggcG9wdWxhc2kgaGFydXMgZGlzZXJ0YWthbiBkYWxhbSBzYW1wZWwgYWdhciBtZW5jYXBhaSB0aW5na2F0IHByZXNpc2kgeWFuZyBkaWluZ2lua2FuLiBDbHVzdGVyIFNhbXBsaW5nIHNlcmluZyBkaWd1bmFrYW4gdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgZGVuZ2FuIG1lbWlsaWgga2Vsb21wb2sgKGtsYXN0ZXIpIHNlY2FyYSBhY2FrIGRhcmlwYWRhIGluZGl2aWR1LCB0ZXRhcGkgZGFsYW0ga2FzdXMgaW5pLCBrYXJlbmEgTW9FIHlhbmcgc2FuZ2F0IGtlY2lsLCBqdW1sYWggc2FtcGVsIHlhbmcgZGlidXR1aGthbiB0ZXRhcCBtZW5kZWthdGkgc2VsdXJ1aCBwb3B1bGFzaS4gT2xlaCBrYXJlbmEgaXR1LCB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgbGViaWggZWZpc2llbiwgcGVybHUgbWVtcGVydGltYmFuZ2thbiBwZW5pbmdrYXRhbiBNYXJnaW4gb2YgRXJyb3IgYWdhciBqdW1sYWggc2FtcGVsIHlhbmcgZGlidXR1aGthbiBiaXNhIGxlYmloIHJlYWxpc3RpcyBkYW4gdGV0YXAgbWVtYmVyaWthbiBoYXNpbCB5YW5nIGFrdXJhdC4NCg0KIyMjIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45NiAgDQoNCi0gJE4kID0gNTAwICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTg0LjY5MCw0DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7Wl4yIFxjZG90IFxzaWdtYV4yIFxjZG90IE59eyhNb0VeMiBcY2RvdCAoTiAtIDEpKSArIChaXjIgXGNkb3QgXHNpZ21hXjIpfVxcDQpuID0gXGZyYWN7MSw5Nl4yIFxjZG90IDU4NDY5MCw0XjIgXGNkb3QgNTAwfXsoNV4yIFxjZG90ICg1MDAgLSAxKSkgKyAoMSw5Nl4yIFxjZG90IDU4NDY5MCw0XjIpfVxcDQpuID0gNDk5LDk5OTk5NQ0KJCQNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBoYXNpbCBwZXJoaXR1bmdhbiB1bnR1ayBtZXRvZGUgTXVsdGktU3RhZ2UgU2FtcGxpbmcsIGp1bWxhaCBzYW1wZWwgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNhcGFpIE1hcmdpbiBvZiBFcnJvciAoTW9FKSBzZWJlc2FyIFJwIDUgZGVuZ2FuIHNpbXBhbmdhbiBiYWt1IFJwIDU4NC42OTAsNCBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSBoYW1waXIgc2VsdXJ1aCBwb3B1bGFzaSBoYXJ1cyBkaXNlcnRha2FuIGRhbGFtIHNhbXBlbCB1bnR1ayBtZW5jYXBhaSB0aW5na2F0IHByZXNpc2kgeWFuZyBzYW5nYXQgdGluZ2dpLiBNdWx0aS1TdGFnZSBTYW1wbGluZyBiaWFzYW55YSBkaWd1bmFrYW4gdW50dWsgbWVueWVkZXJoYW5ha2FuIHByb3NlcyBwZW5nYW1iaWxhbiBzYW1wZWwgZGVuZ2FuIG1lbWlsaWgga2Vsb21wb2sgYmVydGFoYXAgc2ViZWx1bSBtZW1pbGloIGluZGl2aWR1IGRhbGFtIGtlbG9tcG9rIHRlcnNlYnV0LiBOYW11biwgZGFsYW0ga2FzdXMgaW5pLCBrYXJlbmEgTW9FIHlhbmcgc2FuZ2F0IGtlY2lsLCBtZXRvZGUgaW5pIHRldGFwIG1lbWJ1dHVoa2FuIGhhbXBpciBzZWx1cnVoIHBvcHVsYXNpLiBPbGVoIGthcmVuYSBpdHUsIGRhbGFtIHByYWt0aWtueWEsIHBlbmVsaXRpIHBlcmx1IG1lbXBlcnRpbWJhbmdrYW4gcGVuaW5na2F0YW4gTWFyZ2luIG9mIEVycm9yIGF0YXUgbWVueWVzdWFpa2FuIHN0cmF0ZWdpIHBlbmdhbWJpbGFuIHNhbXBlbCBhZ2FyIGxlYmloIGVmaXNpZW4gdGFucGEgbWVuZ29yYmFua2FuIHJlcHJlc2VudGF0aXZpdGFzIGRhdGEuDQoNCiMgKipLZXNpbXB1bGFuIGRhbiBSZWtvbWVuZGFzaSoqDQoNCkRhbGFtIHBlbmVsaXRpYW4gaW5pLCBiZXJiYWdhaSBtZXRvZGUgcHJvYmFiaWxpdHkgc2FtcGxpbmcgZGFuIG5vbi1wcm9iYWJpbGl0eSBzYW1wbGluZyB0ZWxhaCBkaWJhbmRpbmdrYW4gdW50dWsgbWVuaWxhaSBrZWFrdXJhdGFuIHNlcnRhIGVmaXNpZW5zaW55YSBkYWxhbSBtZW5nZXN0aW1hc2kgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhLiBEYXJpIGhhc2lsIGFuYWxpc2lzLCBtZXRvZGUgcHJvYmFiaWxpdHkgc2FtcGxpbmcgdGVyYnVrdGkgbGViaWggdW5nZ3VsIGRhbGFtIGhhbCBrZWFrdXJhdGFuIGthcmVuYSBtZW11bmdraW5rYW4gc2V0aWFwIGluZGl2aWR1IGRhbGFtIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIHRlcnBpbGloIHNlYmFnYWkgc2FtcGVsLiBTZWJhbGlrbnlhLCBtZXRvZGUgbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nIGxlYmloIG11ZGFoIGRhbiBjZXBhdCBkaXRlcmFwa2FuLCB0ZXRhcGkgbWVtaWxpa2kgcmlzaWtvIGJpYXMgeWFuZyBsZWJpaCB0aW5nZ2kgc2VoaW5nZ2EgaGFzaWxueWEga3VyYW5nIGRhcGF0IGRpZ2VuZXJhbGlzYXNpIGtlIHNlbHVydWggcG9wdWxhc2kuDQoNCkRpIGFudGFyYSBtZXRvZGUgcHJvYmFiaWxpdHkgc2FtcGxpbmcsIFN0cmF0aWZpZWQgU2FtcGxpbmcgbWVtaWxpa2kga2V1bmdndWxhbiBkYWxhbSBtZW5hbmdrYXAgdmFyaWFzaSBhbnRhciBrZWxvbXBvayBrYXJlbmEgcG9wdWxhc2kgZGliYWdpIG1lbmphZGkgc3RyYXRhIHNlYmVsdW0gcGVtaWxpaGFuIHNhbXBlbCBkaWxha3VrYW4uIEhhbCBpbmkgbWVuamFkaWthbm55YSBzYWxhaCBzYXR1IG1ldG9kZSBwYWxpbmcgYWt1cmF0IHVudHVrIHBvcHVsYXNpIHlhbmcgaGV0ZXJvZ2VuLCBzZXBlcnRpIG1haGFzaXN3YSBkYXJpIGJlcmJhZ2FpIGZha3VsdGFzIGRlbmdhbiBwb2xhIHBlbmdlbHVhcmFuIHlhbmcgYmVyYmVkYS1iZWRhLiBDbHVzdGVyIFNhbXBsaW5nLCBtZXNraXB1biBsZWJpaCBoZW1hdCBiaWF5YSBkYW4gd2FrdHUsIG1lbWlsaWtpIGtlbGVtYWhhbiBrYXJlbmEgaGFueWEgbWVtaWxpaCBiZWJlcmFwYSBrZWxvbXBvayB0ZXJ0ZW50dSwgeWFuZyBiaXNhIG1lbWJ1YXQgaGFzaWxueWEga3VyYW5nIHJlcHJlc2VudGF0aWYgamlrYSBrbGFzdGVyIHlhbmcgZGlwaWxpaCB0aWRhayBjdWt1cCBtZW5jZXJtaW5rYW4gcG9wdWxhc2kgc2VjYXJhIGtlc2VsdXJ1aGFuLiBTeXN0ZW1hdGljIFNhbXBsaW5nIG1lbmF3YXJrYW4gZWZpc2llbnNpIGRhbGFtIHBlbWlsaWhhbiBzYW1wZWwsIHRldGFwaSByZW50YW4gdGVyaGFkYXAgYmlhcyBqaWthIHRlcmRhcGF0IHBvbGEgdGVydGVudHUgZGFsYW0gdXJ1dGFuIGRhdGEgcG9wdWxhc2kuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykgbWVtYmVyaWthbiBoYXNpbCB5YW5nIHRpZGFrIGJpYXMgc2VjYXJhIHRlb3JpLCB0ZXRhcGkga3VyYW5nIGVmZWt0aWYgZGFsYW0gcG9wdWxhc2kgeWFuZyBoZXRlcm9nZW4ga2FyZW5hIHRpZGFrIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFzaSBhbnRhciBrZWxvbXBvay4gTXVsdGktU3RhZ2UgU2FtcGxpbmcgbWVuamFkaSBwaWxpaGFuIHlhbmcgYmFpayB1bnR1ayBwb3B1bGFzaSB5YW5nIGJlc2FyIGRhbiBrb21wbGVrcywgbWVza2lwdW4gbWVtaWxpa2kgbWFyZ2luIG9mIGVycm9yIHlhbmcgbGViaWggYmVzYXIgZGliYW5kaW5na2FuIG1ldG9kZSBsYWluIGthcmVuYSBwZW1pbGloYW4gZGlsYWt1a2FuIGRhbGFtIGJlYmVyYXBhIHRhaGFwIHlhbmcgbWVuaW5na2F0a2FuIGtlbXVuZ2tpbmFuIHZhcmlhc2kgZGFsYW0gc2FtcGVsLg0KDQpTZW1lbnRhcmEgaXR1LCBtZXRvZGUgbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nIGxlYmloIHNlcmluZyBkaWd1bmFrYW4gZGFsYW0gcGVuZWxpdGlhbiBla3NwbG9yYXRpZiBhdGF1IGtldGlrYSB0ZXJkYXBhdCBrZXRlcmJhdGFzYW4gZGFsYW0gc3VtYmVyIGRheWEgZGFuIHdha3R1LiBDb252ZW5pZW5jZSBTYW1wbGluZyBhZGFsYWggbWV0b2RlIHlhbmcgcGFsaW5nIG11ZGFoIGRpbGFrdWthbiBrYXJlbmEgaGFueWEgbWVsaWJhdGthbiBpbmRpdmlkdSB5YW5nIG11ZGFoIGRpamFuZ2thdSwgdGV0YXBpIG1lbWlsaWtpIGJpYXMgc2VsZWtzaSB5YW5nIHRpbmdnaSBzZWhpbmdnYSBoYXNpbG55YSB0aWRhayBkYXBhdCBtZXdha2lsaSBwb3B1bGFzaSBkZW5nYW4gYmFpay4gSnVkZ21lbnRhbCAoUHVycG9zaXZlKSBTYW1wbGluZyBtZW1iZXJpa2FuIGtlbGVsdWFzYWFuIGJhZ2kgcGVuZWxpdGkgdW50dWsgbWVtaWxpaCBzYW1wZWwgeWFuZyBkaWFuZ2dhcCBwYWxpbmcgcmVsZXZhbiwgdGV0YXBpIHRldGFwIHJlbnRhbiB0ZXJoYWRhcCBiaWFzIHN1Ympla3RpZiB5YW5nIGJpc2EgbWVuZ3VyYW5naSBvYmpla3Rpdml0YXMgcGVuZWxpdGlhbi4gUXVvdGEgU2FtcGxpbmcgbWVuY29iYSBtZW5nYXRhc2kgYmlhcyByZXByZXNlbnRhc2kgZGVuZ2FuIG1lbmV0YXBrYW4gcHJvcG9yc2kgdGVydGVudHUgZGFsYW0gc2FtcGVsLCB0ZXRhcGkgbWFzaWggbWVtdW5na2lua2FuIGJpYXMgZGFsYW0gcGVtaWxpaGFuIGluZGl2aWR1IGRhbGFtIHNldGlhcCBrZWxvbXBvay4gU25vd2JhbGwgU2FtcGxpbmcgYmVyZ3VuYSB1bnR1ayBtZW5lbGl0aSBrZWxvbXBvayB5YW5nIHN1bGl0IGRpamFuZ2thdSwgdGV0YXBpIGJlcmlzaWtvIHRpbmdnaSBtZW5naGFzaWxrYW4gc2FtcGVsIHlhbmcgdGVybGFsdSBob21vZ2VuIGthcmVuYSBpbmRpdmlkdSBjZW5kZXJ1bmcgbWVyZWtydXQgb3JhbmcgbGFpbiB5YW5nIG1lbWlsaWtpIGthcmFrdGVyaXN0aWsgc2VydXBhIGRlbmdhbiBtZXJla2EuDQoNClNlbGFpbiBwZW1pbGloYW4gbWV0b2RlIHNhbXBsaW5nLCBwZXJoaXR1bmdhbiB1a3VyYW4gc2FtcGVsIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgc2ViZXNhciA1IG1lbnVuanVra2FuIGJhaHdhIHVudHVrIHBvcHVsYXNpIGhhbnlhIDUwMCBvcmFuZywgaGFtcGlyIHNlbHVydWggcG9wdWxhc2kgaGFydXMgZGlzdXJ2ZWkgKDQ5OS45OTk5OTUgb3JhbmcpLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHNlbWFraW4ga2VjaWwgbWFyZ2luIG9mIGVycm9yIHlhbmcgZGlpbmdpbmthbiwgc2VtYWtpbiBiZXNhciBqdW1sYWggc2FtcGVsIHlhbmcgZGlidXR1aGthbiB1bnR1ayBtZW5kYXBhdGthbiBlc3RpbWFzaSB5YW5nIGFrdXJhdC4gRGFsYW0gcHJha3Rpa255YSwgdGlkYWsgc2VsYWx1IG1lbXVuZ2tpbmthbiB1bnR1ayBtZW5zdXJ2ZWkgaGFtcGlyIHNlbHVydWggcG9wdWxhc2ksIHNlaGluZ2dhIHBlcmx1IGRpbGFrdWthbiBrb21wcm9taSBhbnRhcmEgdWt1cmFuIHNhbXBlbCBkYW4gdGluZ2thdCBrZXRlcGF0YW4gaGFzaWwgeWFuZyBkaWhhcmFwa2FuLiBKaWthIHN1bWJlciBkYXlhIHRlcmJhdGFzLCBNb0UgeWFuZyBsZWJpaCBiZXNhciBkYXBhdCBkaXRlcmltYSB1bnR1ayBtZW5kYXBhdGthbiB1a3VyYW4gc2FtcGVsIHlhbmcgbGViaWggcmVhbGlzdGlzLg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIHByb2JhYmlsaXR5IHNhbXBsaW5nIGxlYmloIGRpcmVrb21lbmRhc2lrYW4gZGFsYW0gcGVuZWxpdGlhbiB5YW5nIG1lbWJ1dHVoa2FuIGhhc2lsIHlhbmcgYWt1cmF0IGRhbiBkYXBhdCBkaWdlbmVyYWxpc2FzaSwgdGVydXRhbWEgamlrYSBoZXRlcm9nZW5pdGFzIGRhbGFtIHBvcHVsYXNpIGN1a3VwIHRpbmdnaS4gTWV0b2RlIHNlcGVydGkgU3RyYXRpZmllZCBTYW1wbGluZyBhdGF1IFN5c3RlbWF0aWMgU2FtcGxpbmcgZGFwYXQgbWVuamFkaSBwaWxpaGFuIHlhbmcgYmFpayB1bnR1ayBtZW5pbmdrYXRrYW4ga2Vha3VyYXRhbiB0YW5wYSBtZW5pbmdrYXRrYW4gYmlheWEgc2VjYXJhIHNpZ25pZmlrYW4uIERpIHNpc2kgbGFpbiwgbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nIHRldGFwIGJlcmd1bmEgZGFsYW0gc2l0dWFzaSB0ZXJ0ZW50dSwgdGVydXRhbWEgamlrYSBwZW5lbGl0aWFuIGJlcnR1anVhbiB1bnR1ayBla3NwbG9yYXNpIGF3YWwgYXRhdSBqaWthIHRlcmRhcGF0IGtldGVyYmF0YXNhbiBzdW1iZXIgZGF5YSB5YW5nIG1lbWJ1YXQgcHJvYmFiaWxpdHkgc2FtcGxpbmcgc3VsaXQgZGlsYWt1a2FuLiBOYW11biwgZGFsYW0gcGVuZ2d1bmFhbiBtZXRvZGUgaW5pLCBwZW5lbGl0aSBwZXJsdSBtZW55YWRhcmkgcG90ZW5zaSBiaWFzIHlhbmcgYWRhIGRhbiBtZW1wZXJ0aW1iYW5na2FuIHN0cmF0ZWdpIG1pdGlnYXNpIHlhbmcgZGFwYXQgZGl0ZXJhcGthbi4NCg0KU2VsYWluIGl0dSwgcGVuZW50dWFuIHVrdXJhbiBzYW1wZWwgc2FuZ2F0IGJlcnBlbmdhcnVoIHRlcmhhZGFwIGt1YWxpdGFzIGhhc2lsIHBlbmVsaXRpYW4uIEppa2EganVtbGFoIHNhbXBlbCB0ZXJsYWx1IGtlY2lsLCBoYXNpbCBwZW5lbGl0aWFuIGJpc2EgbWVuamFkaSB0aWRhayBha3VyYXQgZGFuIG1lbWlsaWtpIG1hcmdpbiBvZiBlcnJvciB5YW5nIGJlc2FyLiBTZWJhbGlrbnlhLCBqaWthIGp1bWxhaCBzYW1wZWwgdGVybGFsdSBiZXNhciwgcGVuZWxpdGlhbiBiaXNhIG1lbmphZGkgbGViaWggbWFoYWwgZGFuIG1lbWFrYW4gd2FrdHUgbGViaWggbGFtYSB0YW5wYSBtZW1iZXJpa2FuIHBlbmluZ2thdGFuIG1hbmZhYXQgeWFuZyBzaWduaWZpa2FuLiBPbGVoIGthcmVuYSBpdHUsIHBlcmVuY2FuYWFuIHlhbmcgbWF0YW5nIGRhbGFtIG1lbWlsaWggbWV0b2RlIHNhbXBsaW5nIHNlcnRhIG1lbmVudHVrYW4gdWt1cmFuIHNhbXBlbCB5YW5nIHRlcGF0IHNhbmdhdCBwZW50aW5nIHVudHVrIG1lbWFzdGlrYW4gaGFzaWwgcGVuZWxpdGlhbiB5YW5nIHZhbGlkIGRhbiBkYXBhdCBkaWFuZGFsa2FuLg0KDQojICoqUmVmZXJlbnNpKioNCg0KaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL3NhbXBsaW5nX2FuZF9zdXJ2ZXlfdGVjaG5pcXVlcy9kb2NzLw0KDQpodHRwczovL2Jsb2cuZWJpem1hcmsuaWQvcHJvYmFiaWxpdHktc2FtcGxpbmctZGFuLW5vbi1wcm9iYWJpbGl0eS1zYW1wbGluZy1hcGEtYmVkYW55YS8NCg0KaHR0cHM6Ly93d3cucmFjaG1hdHdhaGlkLmNvbS8yMDIwLzA2L21lbXBlbGFqYXJpLW1hcmdpbi1vZi1lcnJvci5odG1sDQoNCmh0dHBzOi8vaWQuZWZlcnJpdC5jb20vY2FyYS1tZW5naGl0dW5nLW1hcmdpbi1vZi1lcnJvci8=