Latihan Penyebearan Data

Statistika Dasar

TUGAS 1

Sebuah perusahaan ingin memahami karakteristik penyebaran data hasil penjualan dari empat cabang (A, B, C, dan D) selama satu bulan terakhir. Data penjualan (dalam juta rupiah) dari keempat cabang tersebut adalah sebagai berikut:

Cabang Nilai
A 50
A 55
A 60
A 65
A 70
B 40
B 50
B 60
B 70
B 80
C 30
C 30

LANGKAH 1 : MENGHITUNG MEAN, MEDIAN, dan MODUS

Rumus Mean

\[ \text{Mean} = \bar{x} = \frac{\sum_{i=1}^n x_i}{n} \]

dimana:

• āˆ‘ š‘‹ adalah jumlah dari semua nilai data.

• š‘› adalah jumlah data.

Rumus Median

\[ \begin{equation} \begin{split} \text{Median} &= L + \left( \frac{\frac{n}{2} - F}{f_m} \right) \times h \end{split} \end{equation} \] dimana:

\[ \begin{aligned} \textbf{1. } & \, L: \text{Batas bawah kelas median (lower boundary of the median class).} \\ & \quad \text{Kelas median adalah kelas yang mengandung nilai ke-} \frac{n}{2} \text{ dalam distribusi kumulatif.} \\ \textbf{2. } & \, n: \text{Jumlah total frekuensi (total frequency of the dataset).} \\ \textbf{3. } & \, F: \text{Frekuensi kumulatif sebelum kelas median (cumulative frequency up to the class before the median class).} \\ \textbf{4. } & \, f_m: \text{Frekuensi kelas median (frequency of the median class).} \\ \textbf{5. } & \, h: \text{Lebar interval kelas (class width), yaitu selisih antara batas atas dan batas bawah kelas.} \\ \textbf{6. } & \, \frac{n}{2}: \text{Posisi median dalam distribusi kumulatif. Median adalah nilai data yang membagi} \\ & \quad \text{dataset menjadi dua bagian yang sama.} \\ \end{aligned} \] Rumus Modus

\[ \text{Modus} = L + \left( \frac{f_m - f_1}{(f_m - f_1) + (f_m - f_2)} \right) \times h \] dimana:

  1. L: Batas bawah kelas modus (lower boundary of the modal class).
  2. fm: Frekuensi kelas modus (frequency of the modal class), yaitu kelas dengan frekuensi tertinggi.
  3. f1: Frekuensi kelas sebelum kelas modus.
  4. f2: Frekuensi kelas setelah kelas modus.h: Lebar interval kelas (class width), yaitu selisih antara batas atas dan batas bawah kelas.

Cabang A

\[ \bar{x}_A = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{300}{5} = 60 \] \[ \text{Median}_A = 60 \] \[ s_A = \sqrt{\frac{(50-60)^2 + (55-60)^2 + (60-60)^2 + (65-60)^2 + (70-60)^2}{4}} \] \[ s_A = \sqrt{\frac{100 + 25 + 0 + 25 + 100}{4}} = \sqrt{\frac{250}{4}} = \sqrt{62.5} \approx 7.91 \]

Cabang B

\[ \bar{x}_B = \frac{40 + 50 + 60 + 70 + 80}{5} = \frac{300}{5} = 60 \] \[ \text{Median}_B = 60 \] \[ s_B = \sqrt{\frac{(40-60)^2 + (50-60)^2 + (60-60)^2 + (70-60)^2 + (80-60)^2}{4}} \] \[ s_B = \sqrt{\frac{400 + 100 + 0 + 100 + 400}{4}} = \sqrt{\frac{1000}{4}} = \sqrt{250} \approx 15.81 \]

Cabang C

\[ \bar{x}_C = \frac{30 + 30 + 35 + 40 + 45}{5} = \frac{180}{5} = 36 \] \[ \text{Median}_C = 35 \] \[ s_C = \sqrt{\frac{(30-36)^2 + (30-36)^2 + (35-36)^2 + (40-36)^2 + (45-36)^2}{4}} \] \[ s_C = \sqrt{\frac{36 + 36 + 1 + 16 + 81}{4}} = \sqrt{\frac{170}{4}} = \sqrt{42.5} \approx 6.52 \]

Cabang D

\[ \bar{x}_D = \frac{70 + 75 + 80 + 85 + 90}{5} = \frac{400}{5} = 80 \] \[ \text{Median}_D = 80 \] \[ s_D = \sqrt{\frac{(70-80)^2 + (75-80)^2 + (80-80)^2 + (85-80)^2 + (90-80)^2}{4}} \] \[ s_D = \sqrt{\frac{100 + 25 + 0 + 25 + 100}{4}} = \sqrt{\frac{250}{4}} = \sqrt{62.5} \approx 7.91 \]

## [1] "Cabang A:"
## $rata_rata
## [1] 60
## 
## $median
## [1] 60
## 
## $std_dev
## [1] 7.905694
## [1] "Cabang B:"
## $rata_rata
## [1] 60
## 
## $median
## [1] 60
## 
## $std_dev
## [1] 15.81139
## [1] "Cabang C:"
## $rata_rata
## [1] 36
## 
## $median
## [1] 35
## 
## $std_dev
## [1] 6.519202
## [1] "Cabang D:"
## $rata_rata
## [1] 80
## 
## $median
## [1] 80
## 
## $std_dev
## [1] 7.905694

LANGKAH 2 : MENGANALISIS PENYEBARAN DATA

Cabang yang memiliki penyebaran data paling kecil adalah Cabang C.

Alasan:

Penyebaran data diukur menggunakan standar deviasi, yang menunjukkan seberapa jauh data menyebar dari rata-ratanya. Standar deviasi untuk setiap cabang adalah:

\[ \begin{align*} s_A &\approx 7.91 \\ s_B &\approx 15.81 \\ s_C &\approx 6.52 \\ s_D &\approx 7.91 \end{align*} \] Dari nilai-nilai ini, Cabang C memiliki standar deviasi terendah (š‘ š¶=6.52s C​=6.52), yang berarti data penjualan Cabang C lebih terkonsentrasi di sekitar rata-rata (š‘„Ė‰š¶=36xˉC​=36) dibandingkan cabang lainnya.

Kesimpulan:

Penyebaran data Cabang C paling kecil karena nilai-nilai penjualannya cenderung lebih seragam dan tidak terlalu jauh dari rata-rata dibandingkan cabang lainnya. Hal ini terlihat dari rentang datanya (30–45), yang lebih sempit dibandingkan rentang data cabang lain.

LANGKAH 3 : MENGANALISIS PENJUALAN

Untuk menentukan cabang yang gagal mencapai target penjualan minimum 50 juta rupiah pada semua datanya, kita perlu memeriksa apakah seluruh data penjualan di cabang tersebut berada di bawah 50 juta rupiah.

## 
## Hasil Cek Target Penjualan Minimum (50 juta Rupiah):
## Cabang A tidak gagal mencapai target penjualan minimum.
## Cabang B gagal mencapai target penjualan minimum.
## Cabang C gagal mencapai target penjualan minimum.
## Cabang D tidak gagal mencapai target penjualan minimum.

Pencapaian Target Penjualan:

  • Cabang A: Tidak gagal mencapai target penjualan minimum 50 juta rupiah. Semua data penjualan pada Cabang A lebih besar atau sama dengan target 50 juta.

  • Cabang B: Tidak gagal mencapai target penjualan minimum 50 juta rupiah. Semua data penjualan pada Cabang B juga memenuhi target 50 juta.

  • Cabang C: Gagal mencapai target penjualan minimum 50 juta rupiah. Beberapa data penjualan di Cabang C kurang dari target 50 juta, seperti pada data pertama dan kedua (30 juta).

  • Cabang D: Tidak gagal mencapai target penjualan minimum 50 juta rupiah. Semua data penjualan di Cabang D berada di atas target 50 juta.

Kesimpulan :

  • Berdasarkan hasil analisis, Cabang C gagal mencapai target penjualan minimum 50 juta rupiah di beberapa data. Oleh karena itu, Cabang C mungkin memerlukan perhatian lebih untuk meningkatkan penjualannya agar dapat memenuhi target di masa mendatang.

  • Sementara itu, Cabang A, B, dan D tidak mengalami kegagalan dalam mencapai target penjualan minimum.

Secara keseluruhan, data penjualan dari Cabang A, B, dan D menunjukkan kinerja yang memadai sesuai dengan target yang ditetapkan, sedangkan Cabang C perlu evaluasi lebih lanjut untuk mencapai target yang ditetapkan.

LANGKAH 4 : VISUALISASI DATA

Kesimpulan dari hasil Box Plot Penjualan Cabang A, B, C, dan D:

Cabang A:

-Distribusi Penjualan: Penjualan di Cabang A secara umum stabil dan berada di atas target penjualan minimum (50 juta rupiah).

  • Kesimpulan: Cabang A berhasil mencapai target penjualan minimum di semua titik data.

Cabang B:

  • Distribusi Penjualan: Penjualan di Cabang B cenderung berada pada kisaran yang lebih rendah, meskipun ada beberapa titik data yang memenuhi target.

  • Kesimpulan: Meskipun ada penurunan frekuensi penjualan, Cabang B berhasil mencapai target penjualan minimum pada beberapa data.

Cabang C:

  • Distribusi Penjualan: Cabang C menunjukkan adanya beberapa titik data yang jauh di bawah target penjualan minimum, dengan beberapa nilai penjualan yang lebih rendah dari 50 juta rupiah.

  • Kesimpulan: Cabang C gagal mencapai target penjualan minimum, karena beberapa data penjualannya berada di bawah 50 juta rupiah.

Cabang D:

  • Distribusi Penjualan: Penjualan di Cabang D umumnya lebih tinggi, dengan data penjualan yang lebih konsisten dan lebih besar dari target minimum.

  • Kesimpulan: Cabang D berhasil mencapai target penjualan minimum di semua titik data.

Kesimpulan Umum:

  • Cabang A, B, dan D dapat dianggap berhasil dalam mencapai target penjualan minimum, sedangkan Cabang C perlu perhatian khusus karena ada data yang menunjukkan penurunan penjualan di bawah target.

  • Box Plot memberikan gambaran yang jelas mengenai penyebaran data penjualan masing-masing cabang, dan membantu dalam melihat distribusi serta konsistensi pencapaian target penjualan.

LANGKAH 5 : IMPROVISASI

Sebagai manajer perusahaan, informasi dari data penjualan dan analisis statistik ini memberikan wawasan penting untuk merancang strategi peningkatan penjualan. Berikut adalah langkah-langkah strategis berdasarkan analisis data:

  1. Fokus pada Cabang dengan Kinerja Kurang Baik
  • Identifikasi Cabang Lemah: Cabang C memiliki penjualan rata-rata terendah, dengan seluruh datanya di bawah target minimum 50 juta rupiah. Ini menunjukkan adanya masalah spesifik yang perlu diselesaikan, seperti:

    • Kurangnya permintaan di wilayah tersebut.

    • Strategi pemasaran yang kurang efektif.

    • Masalah operasional atau logistik.

  • Strategi:

    • Analisis Lokal: Lakukan survei pasar untuk memahami preferensi konsumen di wilayah Cabang C.

    • Peningkatan Promosi: Luncurkan kampanye pemasaran lokal, seperti diskon atau promo bundling.

    • Peningkatan Dukungan: Tinjau alur kerja cabang, distribusi stok, dan pelatihan staf untuk meningkatkan efisiensi operasional.

TUGAS 2

Table Data

Wilayah Jenis.Barang Jumlah.Barang..unit. Waktu.Pengiriman..jam. Biaya.per.Unit..Rp.
Utara Elektronik 200 5 15000
Selatan Pakaian 150 8 8000
Timur Makanan 180 6 10000
Barat Peralatan 120 7 12000
Tengah Elektronik 250 4 8500
Selatan Makanan 220 7 9500
Timur Peralatan 140 5 11000
Barat Elektronik 180 6 4000
Utara Pakaian 300 9 14500
Tengah Pakaian 350 8 7800
Utara Peralatan 170 4 12000
Selatan Elektronik 250 6 16000
Timur Pakaian 190 7 8200
Barat Makanan 130 5 10500
Tengah Peralatan 180 5 11500

ANALISIS EFISIENSI PENGIRIMAN

Visualisasikan Data

Menghitung Efisiensi

Langkah langkah :

  1. Hitung Rasio Efisiensi : Rasio efisiensi dihitung dengan rumus:

\[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}} \] 2. Identifikasi Wilayah dengan Efisiensi Terendah : Temukan wilayah dengan nilai rasio tertinggi.

Rumus Rasio Efisiensi: \[ \text{Rasio Efisiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}} \]

Perhitungan untuk setiap wilayah:

\[ \text{Selatan (Pakaian)} = \frac{8000}{8} = 1000 \]

\[ \text{Timur (Makanan)} = \frac{10000}{6} \approx 1666.67 \]

\[ \text{Barat (Peralatan)} = \frac{12000}{7} \approx 1714.29 \]

\[ \text{Tengah (Elektronik)} = \frac{8500}{4} = 2125 \]

\[ \text{Selatan (Makanan)} = \frac{9500}{7} \approx 1357.14 \]

\[ \text{Timur (Peralatan)} = \frac{11000}{5} = 2200 \]

\[ \text{Barat (Elektronik)} = \frac{4000}{6} \approx 666.67 \]

\[ \text{Utara (Pakaian)} = \frac{14500}{9} \approx 1611.11 \]

\[ \text{Tengah (Pakaian)} = \frac{7800}{8} = 975 \]

\[ \text{Utara (Peralatan)} = \frac{12000}{4} = 3000 \]

\[ \text{Selatan (Elektronik)} = \frac{16000}{6} \approx 2666.67 \]

\[ \text{Timur (Pakaian)} = \frac{8200}{7} \approx 1171.43 \]

\[ \text{Barat (Makanan)} = \frac{10500}{5} = 2100 \]

\[ \text{Tengah (Peralatan)} = \frac{11500}{5} = 2300 \] KESIMPULAN

  • Wilayah dengan rasio efisiensi terendah adalah Barat (Elektronik) dengan rasio 666.67.

  • Ini berarti bahwa Barat (Elektronik) memiliki rasio efisiensi terendah dibandingkan dengan wilayah lainnya, menunjukkan bahwa biaya per unitnya lebih tinggi dibandingkan dengan waktu pengiriman yang lebih singkat, sehingga tidak seefisien wilayah lain dalam hal biaya dan waktu pengiriman.

Jadi, Barat (Elektronik) memiliki efisiensi pengiriman terendah.

REKOMENDASSI OPRASIONAL

Aanalisis Hasil Data

Berdasarkan analisis yang Anda lakukan, wilayah dengan efisiensi pengiriman terendah adalah Barat (Elektronik) dengan rasio efisiensi sebesar 666.67. Rasio ini menunjukkan bahwa biaya per unit untuk wilayah ini cukup tinggi dibandingkan dengan waktu pengiriman yang lebih singkat, yang mengindikasikan bahwa pengiriman barang di wilayah tersebut tidak efisien dalam hal biaya dan waktu.

Kesimpulan:

  • Wilayah yang Memerlukan Perhatian Khusus: Wilayah Barat (Elektronik) perlu perhatian khusus untuk meningkatkan efisiensi pengirimannya. Meskipun waktu pengiriman relatif singkat, biaya per unit yang lebih tinggi membuat rasio efisiensi menjadi lebih buruk dibandingkan wilayah lainnya.

Rekomendasi

Rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah Barat (Elektronik):

  1. Optimalkan Rute Pengiriman:
  • Pengurangan waktu pengiriman dapat dicapai dengan mengoptimalkan rute pengiriman menggunakan teknologi navigasi canggih, seperti aplikasi pemetaan dan sistem manajemen logistik. Ini dapat mengurangi waktu yang diperlukan untuk sampai ke tujuan.
  1. Negosiasi dengan Penyedia Jasa Pengiriman:
  • Negosiasi tarif dengan penyedia layanan pengiriman atau memilih penyedia yang lebih murah dapat mengurangi biaya per unit. Pilihan layanan pengiriman yang lebih efisien, seperti pengiriman massal atau menggunakan kendaraan yang lebih besar, bisa membantu menurunkan biaya.
  1. Peningkatan Pengelolaan Inventaris:
  • Mengurangi stok berlebih dan meningkatkan perencanaan inventaris akan mengurangi kebutuhan pengiriman mendesak, yang seringkali lebih mahal. Menyusun strategi distribusi yang lebih teratur akan membantu menekan biaya pengiriman.
  1. Penggunaan Teknologi untuk Meningkatkan Efisiensi:

Mengimplementasikan teknologi seperti sistem manajemen gudang (WMS) dan pelacakan pengiriman otomatis dapat mempercepat proses pengambilan dan pengiriman barang. Ini juga membantu dalam memperkirakan waktu pengiriman yang lebih akurat.

  1. Konsolidasi Pengiriman:

Menggabungkan beberapa pengiriman ke dalam satu rute atau pengiriman kolektif dapat menurunkan biaya per unit karena mengurangi jumlah perjalanan yang dilakukan.

  1. Evaluasi Waktu Pengiriman yang Lebih Fleksibel:
  • Mengidentifikasi jam-jam tertentu di mana pengiriman bisa lebih murah atau lebih efisien dari sisi biaya. Jika memungkinkan, pengiriman dapat dijadwalkan di luar jam sibuk untuk menghindari biaya tambahan yang terkait dengan lalu lintas atau jam operasional terbatas.

Kesimpulan:

Wilayah Barat (Elektronik) memerlukan perhatian khusus karena efisiensinya rendah. Dengan implementasi langkah-langkah seperti pengoptimalan rute pengiriman, negosiasi tarif pengiriman, dan teknologi yang lebih efisien, diharapkan biaya dan waktu pengiriman dapat dikurangi, meningkatkan efisiensi secara keseluruhan.

ANALISIS KINERJA BERDASARKAN JENIS BARANG:

  1. Waktu Pengiriman:

Waktu pengiriman tercepat:

  • Tengah (Elektronik) dan Utara (Peralatan) masing-masing memiliki waktu pengiriman 4 jam, yang merupakan waktu tercepat di antara semua kategori.

  • Waktu pengiriman terlama:

Utara (Pakaian) memiliki waktu pengiriman 9 jam, yang merupakan waktu pengiriman terlama.

  1. Biaya per Unit:

Biaya per unit terendah:

  • Barat (Elektronik) dengan biaya per unit Rp 4,000, yang merupakan biaya terendah dibandingkan wilayah lainnya.

Biaya per unit tertinggi:

  • Selatan (Elektronik) dengan biaya per unit Rp 16,000, yang merupakan biaya tertinggi.

Analisis Kinerja Berdasarkan Jenis Barang:

  • Elektronik:

    • Waktu pengiriman: Waktu pengiriman paling cepat adalah Tengah (Elektronik) dengan waktu 4 jam, yang lebih cepat dibandingkan dengan wilayah lain yang memiliki kategori Elektronik.

    • Biaya per unit: Barat (Elektronik) memiliki biaya per unit terendah (Rp 4,000), sedangkan Selatan (Elektronik) memiliki biaya tertinggi (Rp 16,000).

  • Pakaian:

    • Waktu pengiriman: Timur (Pakaian) dan Tengah (Pakaian) memiliki waktu pengiriman 7 jam, sementara Utara (Pakaian) memiliki waktu pengiriman terlama (9 jam).

    • Biaya per unit: Tengah (Pakaian) memiliki biaya per unit terendah (Rp 7,800), sedangkan Utara (Pakaian) memiliki biaya per unit tertinggi (Rp 14,500).

  • Makanan:

    • Waktu pengiriman: Barat (Makanan) memiliki waktu pengiriman tercepat (5 jam), sementara Selatan (Makanan) dan Timur (Makanan) memiliki waktu pengiriman 7 jam.

    • Biaya per unit: Timur (Makanan) dan Barat (Makanan) memiliki biaya per unit yang relatif mirip (Rp 10,000 dan Rp 10,500), dengan Selatan (Makanan) sedikit lebih tinggi (Rp 9,500).

  • Peralatan:

    • Waktu pengiriman: Utara (Peralatan) dan Tengah (Peralatan) memiliki waktu pengiriman tercepat (4 jam).

    • Biaya per unit: Barat (Peralatan) dan Tengah (Peralatan) memiliki biaya per unit yang hampir sama (Rp 12,000 dan Rp 11,500), yang lebih rendah dibandingkan dengan biaya per unit di wilayah lain.

Kesimpulan:

Wilayah dengan waktu pengiriman tercepat dan biaya per unit lebih rendah:

  • Tengah (Elektronik) memiliki waktu pengiriman tercepat (4 jam) dan biaya per unit relatif rendah (Rp 8,500). Ini merupakan wilayah dengan kinerja terbaik berdasarkan analisis waktu dan biaya.

Wilayah dengan kinerja terburuk:

  • Utara (Pakaian) memiliki waktu pengiriman terlama (9 jam) dan biaya per unit tertinggi (Rp 14,500), sehingga membutuhkan perhatian khusus untuk meningkatkan efisiensi.

Rekomendasi:

  • Untuk Tengah (Elektronik), kinerja pengiriman sudah sangat efisien baik dari segi waktu maupun biaya, namun tetap dapat dipertahankan dengan pengoptimalan lebih lanjut.

  • Untuk Utara (Pakaian), perbaikan dapat dilakukan dengan menurunkan biaya pengiriman dan meningkatkan kecepatan pengiriman untuk meningkatkan efisiensi.

LS0tDQp0aXRsZTogIkxhdGloYW4gUGVueWViZWFyYW4gRGF0YSINCnN1YnRpdGxlOiAiU3RhdGlzdGlrYSBEYXNhciINCmF1dGhvcjogIkRhZGFuIFJhbWRhbiBIaWRheWF0ICg1MjI0MDAyOCkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIHNyYz0ic3RhdGlzdGlrYS5qcGciIHdpZHRoPSI5MDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSIiPg0KDQoNCg0KDQojICBUVUdBUyAxIA0KDQpTZWJ1YWggcGVydXNhaGFhbiBpbmdpbiBtZW1haGFtaSBrYXJha3RlcmlzdGlrIHBlbnllYmFyYW4gZGF0YSBoYXNpbCBwZW5qdWFsYW4gZGFyaSBlbXBhdCBjYWJhbmcgKEEsIEIsIEMsIGRhbiBEKSBzZWxhbWEgc2F0dSBidWxhbiB0ZXJha2hpci4gRGF0YQ0KcGVuanVhbGFuIChkYWxhbSBqdXRhIHJ1cGlhaCkgZGFyaSBrZWVtcGF0IGNhYmFuZyB0ZXJzZWJ1dCBhZGFsYWggc2ViYWdhaQ0KYmVyaWt1dDoNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBkYXRhc2V0IGRhcmkgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJEQVRBIENBQkFORy5jc3YiLCBzZXAgPSAiOyIpDQoNCiMgTWVuYW1waWxrYW4gZGF0YSBhd2FsIGRlbmdhbiBrYWJsZQ0KbGlicmFyeShrbml0cikgIA0Ka2FibGUoZGF0YSkgICMgTWVuZ2d1bmFrYW4gJ2RhdGEnIHNlYmFnYWkgbmFtYSB2YXJpYWJlbA0KYGBgDQoNCiMjIExBTkdLQUggMSA6IE1FTkdISVRVTkcgTUVBTiwgTUVESUFOLCBkYW4gTU9EVVMNCg0KKipSdW11cyBNZWFuKioNCg0KJCQNClx0ZXh0e01lYW59ID0gXGJhcnt4fSA9IFxmcmFje1xzdW1fe2k9MX1ebiB4X2l9e259DQokJA0KDQpkaW1hbmE6DQoNCiAg4oCiIOKIkSDwnZGLIGFkYWxhaCBqdW1sYWggZGFyaSBzZW11YSBuaWxhaSBkYXRhLg0KDQogICDigKIg8J2RmyBhZGFsYWgganVtbGFoIGRhdGEuDQoNCioqUnVtdXMgTWVkaWFuKioNCg0KJCQNClxiZWdpbntlcXVhdGlvbn0NClxiZWdpbntzcGxpdH0NClx0ZXh0e01lZGlhbn0gJj0gTCArIFxsZWZ0KCBcZnJhY3tcZnJhY3tufXsyfSAtIEZ9e2ZfbX0gXHJpZ2h0KSBcdGltZXMgaA0KXGVuZHtzcGxpdH0NClxlbmR7ZXF1YXRpb259DQokJA0KZGltYW5hOg0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpcdGV4dGJmezEuIH0gJiBcLCBMOiBcdGV4dHtCYXRhcyBiYXdhaCBrZWxhcyBtZWRpYW4gKGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBtZWRpYW4gY2xhc3MpLn0gXFwNCiAgICAgICAgICAgICAmIFxxdWFkIFx0ZXh0e0tlbGFzIG1lZGlhbiBhZGFsYWgga2VsYXMgeWFuZyBtZW5nYW5kdW5nIG5pbGFpIGtlLX0gXGZyYWN7bn17Mn0gXHRleHR7IGRhbGFtIGRpc3RyaWJ1c2kga3VtdWxhdGlmLn0gXFwNClx0ZXh0YmZ7Mi4gfSAmIFwsIG46IFx0ZXh0e0p1bWxhaCB0b3RhbCBmcmVrdWVuc2kgKHRvdGFsIGZyZXF1ZW5jeSBvZiB0aGUgZGF0YXNldCkufSBcXA0KXHRleHRiZnszLiB9ICYgXCwgRjogXHRleHR7RnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhbiAoY3VtdWxhdGl2ZSBmcmVxdWVuY3kgdXAgdG8gdGhlIGNsYXNzIGJlZm9yZSB0aGUgbWVkaWFuIGNsYXNzKS59IFxcDQpcdGV4dGJmezQuIH0gJiBcLCBmX206IFx0ZXh0e0ZyZWt1ZW5zaSBrZWxhcyBtZWRpYW4gKGZyZXF1ZW5jeSBvZiB0aGUgbWVkaWFuIGNsYXNzKS59IFxcDQpcdGV4dGJmezUuIH0gJiBcLCBoOiBcdGV4dHtMZWJhciBpbnRlcnZhbCBrZWxhcyAoY2xhc3Mgd2lkdGgpLCB5YWl0dSBzZWxpc2loIGFudGFyYSBiYXRhcyBhdGFzIGRhbiBiYXRhcyBiYXdhaCBrZWxhcy59IFxcDQpcdGV4dGJmezYuIH0gJiBcLCBcZnJhY3tufXsyfTogXHRleHR7UG9zaXNpIG1lZGlhbiBkYWxhbSBkaXN0cmlidXNpIGt1bXVsYXRpZi4gTWVkaWFuIGFkYWxhaCBuaWxhaSBkYXRhIHlhbmcgbWVtYmFnaX0gXFwNCiAgICAgICAgICAgICAmIFxxdWFkIFx0ZXh0e2RhdGFzZXQgbWVuamFkaSBkdWEgYmFnaWFuIHlhbmcgc2FtYS59IFxcDQpcZW5ke2FsaWduZWR9DQokJA0KKipSdW11cyBNb2R1cyoqIA0KDQokJA0KXHRleHR7TW9kdXN9ID0gTCArIFxsZWZ0KCBcZnJhY3tmX20gLSBmXzF9eyhmX20gLSBmXzEpICsgKGZfbSAtIGZfMil9IFxyaWdodCkgXHRpbWVzIGgNCiQkDQpkaW1hbmE6DQoNCjEuIEw6IEJhdGFzIGJhd2FoIGtlbGFzIG1vZHVzIChsb3dlciBib3VuZGFyeSBvZiB0aGUgbW9kYWwgY2xhc3MpLg0KMi4gZm06IEZyZWt1ZW5zaSBrZWxhcyBtb2R1cyAoZnJlcXVlbmN5IG9mIHRoZSBtb2RhbCBjbGFzcyksIHlhaXR1IGtlbGFzIGRlbmdhbiBmcmVrdWVuc2kgdGVydGluZ2dpLg0KMy4gZjE6IEZyZWt1ZW5zaSBrZWxhcyBzZWJlbHVtIGtlbGFzIG1vZHVzLg0KNC4gZjI6IEZyZWt1ZW5zaSBrZWxhcyBzZXRlbGFoIGtlbGFzIG1vZHVzLmg6IExlYmFyIGludGVydmFsIGtlbGFzIChjbGFzcyB3aWR0aCksIHlhaXR1IHNlbGlzaWggYW50YXJhIGJhdGFzIGF0YXMgZGFuIGJhdGFzIGJhd2FoIGtlbGFzLg0KDQoNCg0KIyMjIENhYmFuZyBBDQoNCiQkIA0KXGJhcnt4fV9BID0gXGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANCiQkDQokJA0KXHRleHR7TWVkaWFufV9BID0gNjANCiQkDQokJA0Kc19BID0gXHNxcnR7XGZyYWN7KDUwLTYwKV4yICsgKDU1LTYwKV4yICsgKDYwLTYwKV4yICsgKDY1LTYwKV4yICsgKDcwLTYwKV4yfXs0fX0NCiQkDQokJA0Kc19BID0gXHNxcnR7XGZyYWN7MTAwICsgMjUgKyAwICsgMjUgKyAxMDB9ezR9fSA9IFxzcXJ0e1xmcmFjezI1MH17NH19ID0gXHNxcnR7NjIuNX0gXGFwcHJveCA3LjkxDQokJA0KDQojIyMgQ2FiYW5nIEINCg0KDQokJCANClxiYXJ7eH1fQiA9IFxmcmFjezQwICsgNTAgKyA2MCArIDcwICsgODB9ezV9ID0gXGZyYWN7MzAwfXs1fSA9IDYwDQokJA0KJCQNClx0ZXh0e01lZGlhbn1fQiA9IDYwDQokJA0KJCQNCnNfQiA9IFxzcXJ0e1xmcmFjeyg0MC02MCleMiArICg1MC02MCleMiArICg2MC02MCleMiArICg3MC02MCleMiArICg4MC02MCleMn17NH19DQokJA0KJCQNCnNfQiA9IFxzcXJ0e1xmcmFjezQwMCArIDEwMCArIDAgKyAxMDAgKyA0MDB9ezR9fSA9IFxzcXJ0e1xmcmFjezEwMDB9ezR9fSA9IFxzcXJ0ezI1MH0gXGFwcHJveCAxNS44MQ0KJCQNCg0KIyMjIENhYmFuZyBDDQoNCg0KJCQgDQpcYmFye3h9X0MgPSBcZnJhY3szMCArIDMwICsgMzUgKyA0MCArIDQ1fXs1fSA9IFxmcmFjezE4MH17NX0gPSAzNg0KJCQNCiQkDQpcdGV4dHtNZWRpYW59X0MgPSAzNQ0KJCQNCiQkDQpzX0MgPSBcc3FydHtcZnJhY3soMzAtMzYpXjIgKyAoMzAtMzYpXjIgKyAoMzUtMzYpXjIgKyAoNDAtMzYpXjIgKyAoNDUtMzYpXjJ9ezR9fQ0KJCQNCiQkDQpzX0MgPSBcc3FydHtcZnJhY3szNiArIDM2ICsgMSArIDE2ICsgODF9ezR9fSA9IFxzcXJ0e1xmcmFjezE3MH17NH19ID0gXHNxcnR7NDIuNX0gXGFwcHJveCA2LjUyDQokJA0KDQojIyMgQ2FiYW5nIEQNCg0KDQokJCANClxiYXJ7eH1fRCA9IFxmcmFjezcwICsgNzUgKyA4MCArIDg1ICsgOTB9ezV9ID0gXGZyYWN7NDAwfXs1fSA9IDgwDQokJA0KJCQNClx0ZXh0e01lZGlhbn1fRCA9IDgwDQokJA0KJCQNCnNfRCA9IFxzcXJ0e1xmcmFjeyg3MC04MCleMiArICg3NS04MCleMiArICg4MC04MCleMiArICg4NS04MCleMiArICg5MC04MCleMn17NH19DQokJA0KJCQNCnNfRCA9IFxzcXJ0e1xmcmFjezEwMCArIDI1ICsgMCArIDI1ICsgMTAwfXs0fX0gPSBcc3FydHtcZnJhY3syNTB9ezR9fSA9IFxzcXJ0ezYyLjV9IFxhcHByb3ggNy45MQ0KJCQNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBEYXRhIFBlbmp1YWxhbg0KY2FiYW5nX0EgPC0gYyg1MCwgNTUsIDYwLCA2NSwgNzApDQpjYWJhbmdfQiA8LSBjKDQwLCA1MCwgNjAsIDcwLCA4MCkNCmNhYmFuZ19DIDwtIGMoMzAsIDMwLCAzNSwgNDAsIDQ1KQ0KY2FiYW5nX0QgPC0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgcmF0YS1yYXRhLCBtZWRpYW4sIGRhbiBzdGFuZGFyIGRldmlhc2kNCnN0YXRpc3RpayA8LSBmdW5jdGlvbihkYXRhKSB7DQogIHJhdGFfcmF0YSA8LSBtZWFuKGRhdGEpDQogIG1lZGlhbiA8LSBtZWRpYW4oZGF0YSkNCiAgc3RkX2RldiA8LSBzZChkYXRhKQ0KICByZXR1cm4obGlzdChyYXRhX3JhdGEgPSByYXRhX3JhdGEsIG1lZGlhbiA9IG1lZGlhbiwgc3RkX2RldiA9IHN0ZF9kZXYpKQ0KfQ0KDQojIEhpdHVuZyBTdGF0aXN0aWsgdW50dWsgTWFzaW5nLU1hc2luZyBDYWJhbmcNCmhhc2lsX0EgPC0gc3RhdGlzdGlrKGNhYmFuZ19BKQ0KaGFzaWxfQiA8LSBzdGF0aXN0aWsoY2FiYW5nX0IpDQpoYXNpbF9DIDwtIHN0YXRpc3RpayhjYWJhbmdfQykNCmhhc2lsX0QgPC0gc3RhdGlzdGlrKGNhYmFuZ19EKQ0KDQojIE91dHB1dA0KcHJpbnQoIkNhYmFuZyBBOiIpDQpwcmludChoYXNpbF9BKQ0KcHJpbnQoIkNhYmFuZyBCOiIpDQpwcmludChoYXNpbF9CKQ0KcHJpbnQoIkNhYmFuZyBDOiIpDQpwcmludChoYXNpbF9DKQ0KcHJpbnQoIkNhYmFuZyBEOiIpDQpwcmludChoYXNpbF9EKQ0KDQoNCmBgYA0KDQojIyBMQU5HS0FIIDIgOiBNRU5HQU5BTElTSVMgUEVOWUVCQVJBTiBEQVRBDQoNCkNhYmFuZyB5YW5nIG1lbWlsaWtpIHBlbnllYmFyYW4gZGF0YSBwYWxpbmcga2VjaWwgYWRhbGFoIENhYmFuZyBDLg0KDQoqKkFsYXNhbjoqKg0KDQpQZW55ZWJhcmFuIGRhdGEgZGl1a3VyIG1lbmdndW5ha2FuIHN0YW5kYXIgZGV2aWFzaSwgeWFuZyBtZW51bmp1a2thbiBzZWJlcmFwYSBqYXVoIGRhdGEgbWVueWViYXIgZGFyaSByYXRhLXJhdGFueWEuIFN0YW5kYXIgZGV2aWFzaSB1bnR1ayBzZXRpYXAgY2FiYW5nIGFkYWxhaDoNCg0KJCQNClxiZWdpbnthbGlnbip9DQpzX0EgJlxhcHByb3ggNy45MSBcXA0Kc19CICZcYXBwcm94IDE1LjgxIFxcDQpzX0MgJlxhcHByb3ggNi41MiBcXA0Kc19EICZcYXBwcm94IDcuOTENClxlbmR7YWxpZ24qfQ0KJCQNCkRhcmkgbmlsYWktbmlsYWkgaW5pLCBDYWJhbmcgQyBtZW1pbGlraSBzdGFuZGFyIGRldmlhc2kgdGVyZW5kYWggKPCdkaDwnZC2PTYuNTJzIEPigIs9Ni41MiksIHlhbmcgYmVyYXJ0aSBkYXRhIHBlbmp1YWxhbiBDYWJhbmcgQyBsZWJpaCB0ZXJrb25zZW50cmFzaSBkaSBzZWtpdGFyIHJhdGEtcmF0YSAo8J2RpcuJ8J2Qtj0zNnjLiUPigIs9MzYpIGRpYmFuZGluZ2thbiBjYWJhbmcgbGFpbm55YS4NCg0KKipLZXNpbXB1bGFuOioqDQoNClBlbnllYmFyYW4gZGF0YSBDYWJhbmcgQyBwYWxpbmcga2VjaWwga2FyZW5hIG5pbGFpLW5pbGFpIHBlbmp1YWxhbm55YSBjZW5kZXJ1bmcgbGViaWggc2VyYWdhbSBkYW4gdGlkYWsgdGVybGFsdSBqYXVoIGRhcmkgcmF0YS1yYXRhIGRpYmFuZGluZ2thbiBjYWJhbmcgbGFpbm55YS4gSGFsIGluaSB0ZXJsaWhhdCBkYXJpIHJlbnRhbmcgZGF0YW55YSAoMzDigJM0NSksIHlhbmcgbGViaWggc2VtcGl0IGRpYmFuZGluZ2thbiByZW50YW5nIGRhdGEgY2FiYW5nIGxhaW4uDQoNCg0KIyMgTEFOR0tBSCAzIDogTUVOR0FOQUxJU0lTIFBFTkpVQUxBTg0KDQpVbnR1ayBtZW5lbnR1a2FuIGNhYmFuZyB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSA1MCBqdXRhIHJ1cGlhaCBwYWRhIHNlbXVhIGRhdGFueWEsIGtpdGEgcGVybHUgbWVtZXJpa3NhIGFwYWthaCBzZWx1cnVoIGRhdGEgcGVuanVhbGFuIGRpIGNhYmFuZyB0ZXJzZWJ1dCBiZXJhZGEgZGkgYmF3YWggNTAganV0YSBydXBpYWguDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW11YXQgcHVzdGFrYSBwbG90bHkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIHVudHVrIG1hc2luZy1tYXNpbmcgY2FiYW5nDQpwZW5qdWFsYW5fQSA8LSBjKDUwLCA1NSwgNjAsIDY1LCA3MCkNCnBlbmp1YWxhbl9CIDwtIGMoNDAsIDUwLCA2MCwgNzAsIDgwKQ0KcGVuanVhbGFuX0MgPC0gYygzMCwgMzAsIDM1LCA0MCwgNDUpDQpwZW5qdWFsYW5fRCA8LSBjKDcwLCA3NSwgODAsIDg1LCA5MCkNCg0KIyBUYXJnZXQgbWluaW11bSBwZW5qdWFsYW4NCnRhcmdldF9taW5pbXVtIDwtIDUwDQoNCiMgRnVuZ3NpIHVudHVrIG1lbWVyaWtzYSBhcGFrYWggc2VtdWEgbmlsYWkgcGVuanVhbGFuIG1lbWVudWhpIHRhcmdldCBtaW5pbXVtDQpjZWtfdGFyZ2V0IDwtIGZ1bmN0aW9uKGRhdGEsIHRhcmdldCkgew0KICBhbGwoZGF0YSA+PSB0YXJnZXQpDQp9DQoNCiMgQ2VrIGFwYWthaCBzZXRpYXAgY2FiYW5nIG1lbWVudWhpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bQ0KaGFzaWxfQSA8LSBjZWtfdGFyZ2V0KHBlbmp1YWxhbl9BLCB0YXJnZXRfbWluaW11bSkNCmhhc2lsX0IgPC0gY2VrX3RhcmdldChwZW5qdWFsYW5fQiwgdGFyZ2V0X21pbmltdW0pDQpoYXNpbF9DIDwtIGNla190YXJnZXQocGVuanVhbGFuX0MsIHRhcmdldF9taW5pbXVtKQ0KaGFzaWxfRCA8LSBjZWtfdGFyZ2V0KHBlbmp1YWxhbl9ELCB0YXJnZXRfbWluaW11bSkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBhcGFrYWggY2FiYW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldA0KY2F0KCJcbkhhc2lsIENlayBUYXJnZXQgUGVuanVhbGFuIE1pbmltdW0gKDUwIGp1dGEgUnVwaWFoKTpcbiIpDQoNCmlmIChoYXNpbF9BKSB7DQogIGNhdCgiQ2FiYW5nIEEgdGlkYWsgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtLlxuIikNCn0gZWxzZSB7DQogIGNhdCgiQ2FiYW5nIEEgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtLlxuIikNCn0NCg0KaWYgKGhhc2lsX0IpIHsNCiAgY2F0KCJDYWJhbmcgQiB0aWRhayBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0uXG4iKQ0KfSBlbHNlIHsNCiAgY2F0KCJDYWJhbmcgQiBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0uXG4iKQ0KfQ0KDQppZiAoaGFzaWxfQykgew0KICBjYXQoIkNhYmFuZyBDIHRpZGFrIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bS5cbiIpDQp9IGVsc2Ugew0KICBjYXQoIkNhYmFuZyBDIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bS5cbiIpDQp9DQoNCmlmIChoYXNpbF9EKSB7DQogIGNhdCgiQ2FiYW5nIEQgdGlkYWsgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtLlxuIikNCn0gZWxzZSB7DQogIGNhdCgiQ2FiYW5nIEQgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtLlxuIikNCn0NCg0KIyBNZW1idWF0IEhpc3RvZ3JhbSB1bnR1ayBDYWJhbmcgQSwgQiwgQywgZGFuIEQgZGVuZ2FuIHdhcm5hIHNvZnQNCnBsb3RfbHkoKSAlPiUNCiAgYWRkX3RyYWNlKA0KICAgIHggPSBwZW5qdWFsYW5fQSwgDQogICAgdHlwZSA9ICJoaXN0b2dyYW0iLCANCiAgICBuYW1lID0gIkNhYmFuZyBBIiwgDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdsaWdodGJsdWUnLCBvcGFjaXR5ID0gMC43KQ0KICApICU+JSAgIyBIaXN0b2dyYW0gdW50dWsgQ2FiYW5nIEENCiAgYWRkX3RyYWNlKA0KICAgIHggPSBwZW5qdWFsYW5fQiwgDQogICAgdHlwZSA9ICJoaXN0b2dyYW0iLCANCiAgICBuYW1lID0gIkNhYmFuZyBCIiwgDQogICAgbWFya2VyID0gbGlzdChjb2xvciA9ICdsaWdodGdyZWVuJywgb3BhY2l0eSA9IDAuNykNCiAgKSAlPiUgICMgSGlzdG9ncmFtIHVudHVrIENhYmFuZyBCDQogIGFkZF90cmFjZSgNCiAgICB4ID0gcGVuanVhbGFuX0MsIA0KICAgIHR5cGUgPSAiaGlzdG9ncmFtIiwgDQogICAgbmFtZSA9ICJDYWJhbmcgQyIsIA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnbGlnaHRjb3JhbCcsIG9wYWNpdHkgPSAwLjcpDQogICkgJT4lICAjIEhpc3RvZ3JhbSB1bnR1ayBDYWJhbmcgQw0KICBhZGRfdHJhY2UoDQogICAgeCA9IHBlbmp1YWxhbl9ELCANCiAgICB0eXBlID0gImhpc3RvZ3JhbSIsIA0KICAgIG5hbWUgPSAiQ2FiYW5nIEQiLCANCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2xpZ2h0eWVsbG93Jywgb3BhY2l0eSA9IDAuNykNCiAgKSAlPiUgICMgSGlzdG9ncmFtIHVudHVrIENhYmFuZyBEDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJIaXN0b2dyYW0gUGVuanVhbGFuIENhYmFuZyBBLCBCLCBDLCBkYW4gRCIsDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlBlbmp1YWxhbiAoSnV0YSBSdXBpYWgpIiksDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkZyZWt1ZW5zaSIpLA0KICAgIGJhcm1vZGUgPSAib3ZlcmxheSIgICMgTWVuYW1waWxrYW4gaGlzdG9ncmFtIHNlY2FyYSB0dW1wYW5nIHRpbmRpaA0KICApDQoNCmBgYA0KDQoqKlBlbmNhcGFpYW4gVGFyZ2V0IFBlbmp1YWxhbjoqKg0KDQotIENhYmFuZyBBOiBUaWRhayBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gNTAganV0YSBydXBpYWguIFNlbXVhIGRhdGEgcGVuanVhbGFuIHBhZGEgQ2FiYW5nIEEgbGViaWggYmVzYXIgYXRhdSBzYW1hIGRlbmdhbiB0YXJnZXQgNTAganV0YS4NCg0KLSBDYWJhbmcgQjogVGlkYWsgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIDUwIGp1dGEgcnVwaWFoLiBTZW11YSBkYXRhIHBlbmp1YWxhbiBwYWRhIENhYmFuZyBCIGp1Z2EgbWVtZW51aGkgdGFyZ2V0IDUwIGp1dGEuDQoNCi0gQ2FiYW5nIEM6IEdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSA1MCBqdXRhIHJ1cGlhaC4gQmViZXJhcGEgZGF0YSBwZW5qdWFsYW4gZGkgQ2FiYW5nIEMga3VyYW5nIGRhcmkgdGFyZ2V0IDUwIGp1dGEsIHNlcGVydGkgcGFkYSBkYXRhIHBlcnRhbWEgZGFuIGtlZHVhICgzMCBqdXRhKS4NCg0KLSBDYWJhbmcgRDogVGlkYWsgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIDUwIGp1dGEgcnVwaWFoLiBTZW11YSBkYXRhIHBlbmp1YWxhbiBkaSBDYWJhbmcgRCBiZXJhZGEgZGkgYXRhcyB0YXJnZXQgNTAganV0YS4NCg0KKipLZXNpbXB1bGFuIDoqKg0KDQotIEJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzLCBDYWJhbmcgQyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gNTAganV0YSBydXBpYWggZGkgYmViZXJhcGEgZGF0YS4gT2xlaCBrYXJlbmEgaXR1LCBDYWJhbmcgQyBtdW5na2luIG1lbWVybHVrYW4gcGVyaGF0aWFuIGxlYmloIHVudHVrIG1lbmluZ2thdGthbiBwZW5qdWFsYW5ueWEgYWdhciBkYXBhdCBtZW1lbnVoaSB0YXJnZXQgZGkgbWFzYSBtZW5kYXRhbmcuDQoNCi0gU2VtZW50YXJhIGl0dSwgQ2FiYW5nIEEsIEIsIGRhbiBEIHRpZGFrIG1lbmdhbGFtaSBrZWdhZ2FsYW4gZGFsYW0gbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtLg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIGRhdGEgcGVuanVhbGFuIGRhcmkgQ2FiYW5nIEEsIEIsIGRhbiBEIG1lbnVuanVra2FuIGtpbmVyamEgeWFuZyBtZW1hZGFpIHNlc3VhaSBkZW5nYW4gdGFyZ2V0IHlhbmcgZGl0ZXRhcGthbiwgc2VkYW5na2FuIENhYmFuZyBDIHBlcmx1IGV2YWx1YXNpIGxlYmloIGxhbmp1dCB1bnR1ayBtZW5jYXBhaSB0YXJnZXQgeWFuZyBkaXRldGFwa2FuLg0KDQojIyBMQU5HS0FIIDQgOiBWSVNVQUxJU0FTSSBEQVRBDQogIA0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBwdXN0YWthIHBsb3RseQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBwZW5qdWFsYW4gY2FiYW5nDQpjYWJhbmcgPC0gYygiQSIsICJBIiwgIkEiLCAiQSIsICJBIiwNCiAgICAgICAgICAgICJCIiwgIkIiLCAiQiIsICJCIiwgIkIiLA0KICAgICAgICAgICAgIkMiLCAiQyIsICJDIiwgIkMiLCAiQyIsDQogICAgICAgICAgICAiRCIsICJEIiwgIkQiLCAiRCIsICJEIikNCnBlbmp1YWxhbiA8LSBjKDUwLCA1NSwgNjAsIDY1LCA3MCwgDQogICAgICAgICAgICAgICA0MCwgNTAsIDYwLCA3MCwgODAsDQogICAgICAgICAgICAgICAzMCwgMzAsIDM1LCA0MCwgNDUsDQogICAgICAgICAgICAgICA3MCwgNzUsIDgwLCA4NSwgOTApDQoNCiMgTWVuZ2dhYnVuZ2thbiBkYXRhIGRhbGFtIHNhdHUgZGF0YSBmcmFtZQ0KZGF0YV9wZW5qdWFsYW4gPC0gZGF0YS5mcmFtZShDYWJhbmcgPSBjYWJhbmcsIFBlbmp1YWxhbiA9IHBlbmp1YWxhbikNCg0KIyBNZW1idWF0IEJveCBQbG90IHVudHVrIENhYmFuZyBBLCBCLCBDLCBkYW4gRA0KcGxvdF9seSgpICU+JQ0KICBhZGRfdHJhY2UoDQogICAgeSA9IGRhdGFfcGVuanVhbGFuJFBlbmp1YWxhbltkYXRhX3Blbmp1YWxhbiRDYWJhbmcgPT0gIkEiXSwgDQogICAgdHlwZSA9ICJib3giLCANCiAgICBuYW1lID0gIkNhYmFuZyBBIiwgDQogICAgYm94bWVhbiA9IFRSVUUsIA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnYmx1ZScpDQogICkgJT4lICAjIEJveHBsb3QgdW50dWsgQ2FiYW5nIEENCiAgYWRkX3RyYWNlKA0KICAgIHkgPSBkYXRhX3Blbmp1YWxhbiRQZW5qdWFsYW5bZGF0YV9wZW5qdWFsYW4kQ2FiYW5nID09ICJCIl0sIA0KICAgIHR5cGUgPSAiYm94IiwgDQogICAgbmFtZSA9ICJDYWJhbmcgQiIsIA0KICAgIGJveG1lYW4gPSBUUlVFLCANCiAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gJ2dyZWVuJykNCiAgKSAlPiUgICMgQm94cGxvdCB1bnR1ayBDYWJhbmcgQg0KICBhZGRfdHJhY2UoDQogICAgeSA9IGRhdGFfcGVuanVhbGFuJFBlbmp1YWxhbltkYXRhX3Blbmp1YWxhbiRDYWJhbmcgPT0gIkMiXSwgDQogICAgdHlwZSA9ICJib3giLCANCiAgICBuYW1lID0gIkNhYmFuZyBDIiwgDQogICAgYm94bWVhbiA9IFRSVUUsIA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAncmVkJykNCiAgKSAlPiUgICMgQm94cGxvdCB1bnR1ayBDYWJhbmcgQw0KICBhZGRfdHJhY2UoDQogICAgeSA9IGRhdGFfcGVuanVhbGFuJFBlbmp1YWxhbltkYXRhX3Blbmp1YWxhbiRDYWJhbmcgPT0gIkQiXSwgDQogICAgdHlwZSA9ICJib3giLCANCiAgICBuYW1lID0gIkNhYmFuZyBEIiwgDQogICAgYm94bWVhbiA9IFRSVUUsIA0KICAgIG1hcmtlciA9IGxpc3QoY29sb3IgPSAnb3JhbmdlJykNCiAgKSAlPiUgICMgQm94cGxvdCB1bnR1ayBDYWJhbmcgRA0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBBLCBCLCBDLCBkYW4gRCIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlBlbmp1YWxhbiAoSnV0YSBSdXBpYWgpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkplbmlzIENhYmFuZyIpDQogICkNCg0KDQpgYGANCg0KKipLZXNpbXB1bGFuIGRhcmkgaGFzaWwgQm94IFBsb3QgUGVuanVhbGFuIENhYmFuZyBBLCBCLCBDLCBkYW4gRDoqKg0KDQpDYWJhbmcgQToNCg0KLURpc3RyaWJ1c2kgUGVuanVhbGFuOiBQZW5qdWFsYW4gZGkgQ2FiYW5nIEEgc2VjYXJhIHVtdW0gc3RhYmlsIGRhbiBiZXJhZGEgZGkgYXRhcyB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gKDUwIGp1dGEgcnVwaWFoKS4NCg0KLSAqS2VzaW1wdWxhbjoqIENhYmFuZyBBIGJlcmhhc2lsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBkaSBzZW11YSB0aXRpayBkYXRhLg0KDQpDYWJhbmcgQjoNCg0KLSBEaXN0cmlidXNpIFBlbmp1YWxhbjogUGVuanVhbGFuIGRpIENhYmFuZyBCIGNlbmRlcnVuZyBiZXJhZGEgcGFkYSBraXNhcmFuIHlhbmcgbGViaWggcmVuZGFoLCBtZXNraXB1biBhZGEgYmViZXJhcGEgdGl0aWsgZGF0YSB5YW5nIG1lbWVudWhpIHRhcmdldC4NCg0KLSAqS2VzaW1wdWxhbjoqIE1lc2tpcHVuIGFkYSBwZW51cnVuYW4gZnJla3VlbnNpIHBlbmp1YWxhbiwgQ2FiYW5nIEIgYmVyaGFzaWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIHBhZGEgYmViZXJhcGEgZGF0YS4NCg0KQ2FiYW5nIEM6DQoNCi0gRGlzdHJpYnVzaSBQZW5qdWFsYW46IENhYmFuZyBDIG1lbnVuanVra2FuIGFkYW55YSBiZWJlcmFwYSB0aXRpayBkYXRhIHlhbmcgamF1aCBkaSBiYXdhaCB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0sIGRlbmdhbiBiZWJlcmFwYSBuaWxhaSBwZW5qdWFsYW4geWFuZyBsZWJpaCByZW5kYWggZGFyaSA1MCBqdXRhIHJ1cGlhaC4NCg0KLSAqS2VzaW1wdWxhbjoqIENhYmFuZyBDIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSwga2FyZW5hIGJlYmVyYXBhIGRhdGEgcGVuanVhbGFubnlhIGJlcmFkYSBkaSBiYXdhaCA1MCBqdXRhIHJ1cGlhaC4NCg0KQ2FiYW5nIEQ6DQoNCi0gRGlzdHJpYnVzaSBQZW5qdWFsYW46IFBlbmp1YWxhbiBkaSBDYWJhbmcgRCB1bXVtbnlhIGxlYmloIHRpbmdnaSwgZGVuZ2FuIGRhdGEgcGVuanVhbGFuIHlhbmcgbGViaWgga29uc2lzdGVuIGRhbiBsZWJpaCBiZXNhciBkYXJpIHRhcmdldCBtaW5pbXVtLg0KDQotICpLZXNpbXB1bGFuOiogQ2FiYW5nIEQgYmVyaGFzaWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIGRpIHNlbXVhIHRpdGlrIGRhdGEuDQoNCioqS2VzaW1wdWxhbiBVbXVtOioqDQoNCi0gKkNhYmFuZyBBLCBCLCBkYW4gRCogZGFwYXQgZGlhbmdnYXAgYmVyaGFzaWwgZGFsYW0gbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtLCBzZWRhbmdrYW4gKkNhYmFuZyBDKiBwZXJsdSBwZXJoYXRpYW4ga2h1c3VzIGthcmVuYSBhZGEgZGF0YSB5YW5nIG1lbnVuanVra2FuIHBlbnVydW5hbiBwZW5qdWFsYW4gZGkgYmF3YWggdGFyZ2V0Lg0KDQotIEJveCBQbG90IG1lbWJlcmlrYW4gZ2FtYmFyYW4geWFuZyBqZWxhcyBtZW5nZW5haSBwZW55ZWJhcmFuIGRhdGEgcGVuanVhbGFuIG1hc2luZy1tYXNpbmcgY2FiYW5nLCBkYW4gbWVtYmFudHUgZGFsYW0gbWVsaWhhdCBkaXN0cmlidXNpIHNlcnRhIGtvbnNpc3RlbnNpIHBlbmNhcGFpYW4gdGFyZ2V0IHBlbmp1YWxhbi4NCg0KIyMgTEFOR0tBSCA1IDogSU1QUk9WSVNBU0kNCg0KU2ViYWdhaSBtYW5hamVyIHBlcnVzYWhhYW4sIGluZm9ybWFzaSBkYXJpIGRhdGEgcGVuanVhbGFuIGRhbiBhbmFsaXNpcyBzdGF0aXN0aWsgaW5pIG1lbWJlcmlrYW4gd2F3YXNhbiBwZW50aW5nIHVudHVrIG1lcmFuY2FuZyBzdHJhdGVnaSBwZW5pbmdrYXRhbiBwZW5qdWFsYW4uIEJlcmlrdXQgYWRhbGFoIGxhbmdrYWgtbGFuZ2thaCBzdHJhdGVnaXMgYmVyZGFzYXJrYW4gYW5hbGlzaXMgZGF0YToNCg0KMS4gRm9rdXMgcGFkYSBDYWJhbmcgZGVuZ2FuIEtpbmVyamEgS3VyYW5nIEJhaWsNCg0KLSBJZGVudGlmaWthc2kgQ2FiYW5nIExlbWFoOiBDYWJhbmcgQyBtZW1pbGlraSBwZW5qdWFsYW4gcmF0YS1yYXRhIHRlcmVuZGFoLCBkZW5nYW4gc2VsdXJ1aCBkYXRhbnlhIGRpIGJhd2FoIHRhcmdldCBtaW5pbXVtIDUwIGp1dGEgcnVwaWFoLiBJbmkgbWVudW5qdWtrYW4gYWRhbnlhIG1hc2FsYWggc3Blc2lmaWsgeWFuZyBwZXJsdSBkaXNlbGVzYWlrYW4sIHNlcGVydGk6DQoNCiAgICAtIEt1cmFuZ255YSBwZXJtaW50YWFuIGRpIHdpbGF5YWggdGVyc2VidXQuDQogICAgDQogICAgLSBTdHJhdGVnaSBwZW1hc2FyYW4geWFuZyBrdXJhbmcgZWZla3RpZi4NCiAgICANCiAgICAtIE1hc2FsYWggb3BlcmFzaW9uYWwgYXRhdSBsb2dpc3Rpay4NCiAgICANCi0gU3RyYXRlZ2k6DQoNCiAgICAtIEFuYWxpc2lzIExva2FsOiBMYWt1a2FuIHN1cnZlaSBwYXNhciB1bnR1ayBtZW1haGFtaSBwcmVmZXJlbnNpIGtvbnN1bWVuIGRpIHdpbGF5YWggQ2FiYW5nIEMuDQogICAgDQogICAgLSBQZW5pbmdrYXRhbiBQcm9tb3NpOiBMdW5jdXJrYW4ga2FtcGFueWUgcGVtYXNhcmFuIGxva2FsLCBzZXBlcnRpIGRpc2tvbiBhdGF1IHByb21vIGJ1bmRsaW5nLg0KICAgIA0KICAgIC0gUGVuaW5na2F0YW4gRHVrdW5nYW46IFRpbmphdSBhbHVyIGtlcmphIGNhYmFuZywgZGlzdHJpYnVzaSBzdG9rLCBkYW4gcGVsYXRpaGFuIHN0YWYgdW50dWsgbWVuaW5na2F0a2FuICAgICAgICAgICAgICBlZmlzaWVuc2kgb3BlcmFzaW9uYWwuDQoNCiMgVFVHQVMgMg0KDQpUYWJsZSBEYXRhDQoNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBkYXRhc2V0IGRhcmkgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJTQU1QTEUgREFUQS5jc3YiLCBzZXAgPSAiOyIpDQoNCiMgTWVuYW1waWxrYW4gZGF0YSBhd2FsIGRlbmdhbiBrYWJsZQ0KbGlicmFyeShrbml0cikgIA0Ka2FibGUoZGF0YSkgICMgTWVuZ2d1bmFrYW4gJ2RhdGEnIHNlYmFnYWkgbmFtYSB2YXJpYWJlbA0KYGBgDQoNCiMjIEFOQUxJU0lTIEVGSVNJRU5TSSBQRU5HSVJJTUFODQoNCiMjIyBWaXN1YWxpc2FzaWthbiBEYXRhDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBNZW5nZ3VuYWthbiBsaWJyYXJ5IHBsb3RseSB1bnR1ayB2aXN1YWxpc2FzaSBpbnRlcmFrdGlmDQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIHBlbmdpcmltYW4gYmFyYW5nIGJlcmRhc2Fya2FuIHdpbGF5YWgsIGplbmlzIGJhcmFuZywgd2FrdHUgcGVuZ2lyaW1hbiwgYmlheWEgcGVyIHVuaXQNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgV2lsYXlhaCA9IGMoIlV0YXJhIiwgIlNlbGF0YW4iLCAiVGltdXIiLCAiQmFyYXQiLCAiVGVuZ2FoIiwgDQogICAgICAgICAgICAgICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlV0YXJhIiwgIlRlbmdhaCIsIA0KICAgICAgICAgICAgICAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCANCiAgICAgICAgICAgICAgICAgICAiTWFrYW5hbiIsICJQZXJhbGF0YW4iLCAiRWxla3Ryb25payIsICJQYWthaWFuIiwgIlBha2FpYW4iLCANCiAgICAgICAgICAgICAgICAgICAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfQmFyYW5nID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMjIwLCAxNDAsIDE4MCwgMzAwLCAzNTAsIA0KICAgICAgICAgICAgICAgICAgICAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDcsIDUsIDYsIDksIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9QZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgODUwMCwgOTUwMCwgMTEwMDAsIDQwMDAsIDE0NTAwLCA3ODAwLCANCiAgICAgICAgICAgICAgICAgICAgIDEyMDAwLCAxNjAwMCwgODIwMCwgMTA1MDAsIDExNTAwKQ0KKQ0KDQojIE1lbWJ1YXQgcGxvdCAzRA0KcGxvdF8zZCA8LSBwbG90X2x5KA0KICBkYXRhLA0KICB4ID0gfkp1bWxhaF9CYXJhbmcsDQogIHkgPSB+V2FrdHVfUGVuZ2lyaW1hbiwNCiAgeiA9IH5CaWF5YV9QZXJfVW5pdCwNCiAgdHlwZSA9ICdzY2F0dGVyM2QnLA0KICBtb2RlID0gJ21hcmtlcnMnLA0KICBjb2xvciA9IH5XaWxheWFoLA0KICBzaXplID0gfkJpYXlhX1Blcl9Vbml0ICogMC4wMDAxLCAgIyBNZW1wZXJiZXNhciB1a3VyYW4gYnViYmxlDQogIG1hcmtlciA9IGxpc3QoDQogICAgc2l6ZSA9IDEwLA0KICAgIG9wYWNpdHkgPSAxDQogICksDQogIHRleHQgPSB+cGFzdGUoDQogICAgIldpbGF5YWg6IiwgV2lsYXlhaCwNCiAgICAiPGJyPldha3R1IFBlbmdpcmltYW46IiwgV2FrdHVfUGVuZ2lyaW1hbiwgImphbSIsDQogICAgIjxicj5KdW1sYWggQmFyYW5nOiIsIEp1bWxhaF9CYXJhbmcsICJ1bml0IiwNCiAgICAiPGJyPkJpYXlhIHBlciBVbml0OiBScCIsIEJpYXlhX1Blcl9Vbml0DQogICkpICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQW5hbGlzaXMgM0QgRWZpc2llbnNpIFBlbmdpcmltYW4gQmFyYW5nIiwNCiAgICBzY2VuZSA9IGxpc3QoDQogICAgICB4YXhpcyA9IGxpc3QoDQogICAgICAgIHRpdGxlID0gIkp1bWxhaCBCYXJhbmciLA0KICAgICAgICB0aXRsZWZvbnQgPSBsaXN0KHNpemUgPSAxMiksDQogICAgICAgIHRpY2tmb250ID0gbGlzdChzaXplID0gMTApDQogICAgICApLA0KICAgICAgeWF4aXMgPSBsaXN0KA0KICAgICAgICB0aXRsZSA9ICJQZW5naXJpbWFuIChqYW0pIiwNCiAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLA0KICAgICAgICB0aWNrZm9udCA9IGxpc3Qoc2l6ZSA9IDEwKQ0KICAgICAgKSwNCiAgICAgIHpheGlzID0gbGlzdCgNCiAgICAgICAgdGl0bGUgPSAiQmlheWEgKFJwKSIsDQogICAgICAgIHRpdGxlZm9udCA9IGxpc3Qoc2l6ZSA9IDEyKSwNCiAgICAgICAgdGlja2ZvbnQgPSBsaXN0KHNpemUgPSAxMCkNCiAgICAgICkNCiAgICApLA0KICAgIGxlZ2VuZCA9IGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJXaWxheWFoIiksDQogICAgICBiZ2NvbG9yID0gInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSIsDQogICAgICBib3JkZXJjb2xvciA9ICJyZ2JhKDAsIDAsIDAsIDAuNSkiLA0KICAgICAgYm9yZGVyd2lkdGggPSAxDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdCAzRA0KcGxvdF8zZA0KDQpgYGANCg0KIyMjIE1lbmdoaXR1bmcgRWZpc2llbnNpDQoNCiMjIyMgTGFuZ2thaCBsYW5na2FoIDoNCg0KMS4gSGl0dW5nIFJhc2lvIEVmaXNpZW5zaSA6IFJhc2lvIGVmaXNpZW5zaSBkaWhpdHVuZyBkZW5nYW4gcnVtdXM6DQoNCiQkDQpcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX0NCiQkDQoyLiBJZGVudGlmaWthc2kgV2lsYXlhaCBkZW5nYW4gRWZpc2llbnNpIFRlcmVuZGFoIDogVGVtdWthbiB3aWxheWFoIGRlbmdhbiBuaWxhaSByYXNpbyB0ZXJ0aW5nZ2kuDQoNClJ1bXVzIFJhc2lvIEVmaXNpZW5zaToNCiQkDQpcdGV4dHtSYXNpbyBFZmlzaWVuc2l9ID0gXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX0NCiQkDQoNClBlcmhpdHVuZ2FuIHVudHVrIHNldGlhcCB3aWxheWFoOg0KDQoNCiQkDQpcdGV4dHtTZWxhdGFuIChQYWthaWFuKX0gPSBcZnJhY3s4MDAwfXs4fSA9IDEwMDANCiQkDQoNCiQkDQpcdGV4dHtUaW11ciAoTWFrYW5hbil9ID0gXGZyYWN7MTAwMDB9ezZ9IFxhcHByb3ggMTY2Ni42Nw0KJCQNCg0KJCQNClx0ZXh0e0JhcmF0IChQZXJhbGF0YW4pfSA9IFxmcmFjezEyMDAwfXs3fSBcYXBwcm94IDE3MTQuMjkNCiQkDQoNCiQkDQpcdGV4dHtUZW5nYWggKEVsZWt0cm9uaWspfSA9IFxmcmFjezg1MDB9ezR9ID0gMjEyNQ0KJCQNCg0KJCQNClx0ZXh0e1NlbGF0YW4gKE1ha2FuYW4pfSA9IFxmcmFjezk1MDB9ezd9IFxhcHByb3ggMTM1Ny4xNA0KJCQNCg0KJCQNClx0ZXh0e1RpbXVyIChQZXJhbGF0YW4pfSA9IFxmcmFjezExMDAwfXs1fSA9IDIyMDANCiQkDQoNCiQkDQpcdGV4dHtCYXJhdCAoRWxla3Ryb25payl9ID0gXGZyYWN7NDAwMH17Nn0gXGFwcHJveCA2NjYuNjcNCiQkDQoNCiQkDQpcdGV4dHtVdGFyYSAoUGFrYWlhbil9ID0gXGZyYWN7MTQ1MDB9ezl9IFxhcHByb3ggMTYxMS4xMQ0KJCQNCg0KJCQNClx0ZXh0e1RlbmdhaCAoUGFrYWlhbil9ID0gXGZyYWN7NzgwMH17OH0gPSA5NzUNCiQkDQoNCiQkDQpcdGV4dHtVdGFyYSAoUGVyYWxhdGFuKX0gPSBcZnJhY3sxMjAwMH17NH0gPSAzMDAwDQokJA0KDQokJA0KXHRleHR7U2VsYXRhbiAoRWxla3Ryb25payl9ID0gXGZyYWN7MTYwMDB9ezZ9IFxhcHByb3ggMjY2Ni42Nw0KJCQNCg0KJCQNClx0ZXh0e1RpbXVyIChQYWthaWFuKX0gPSBcZnJhY3s4MjAwfXs3fSBcYXBwcm94IDExNzEuNDMNCiQkDQoNCiQkDQpcdGV4dHtCYXJhdCAoTWFrYW5hbil9ID0gXGZyYWN7MTA1MDB9ezV9ID0gMjEwMA0KJCQNCg0KJCQNClx0ZXh0e1RlbmdhaCAoUGVyYWxhdGFuKX0gPSBcZnJhY3sxMTUwMH17NX0gPSAyMzAwDQokJA0KS0VTSU1QVUxBTg0KDQogICAtIFdpbGF5YWggZGVuZ2FuIHJhc2lvIGVmaXNpZW5zaSB0ZXJlbmRhaCBhZGFsYWggQmFyYXQgKEVsZWt0cm9uaWspIGRlbmdhbiByYXNpbyA2NjYuNjcuDQoNCiAgLSBJbmkgYmVyYXJ0aSBiYWh3YSBCYXJhdCAoRWxla3Ryb25paykgbWVtaWxpa2kgcmFzaW8gZWZpc2llbnNpIHRlcmVuZGFoIGRpYmFuZGluZ2thbiBkZW5nYW4gd2lsYXlhaCBsYWlubnlhLCBtZW51bmp1a2thbiBiYWh3YSBiaWF5YSBwZXIgICAgICB1bml0bnlhICAgbGViaWggdGluZ2dpIGRpYmFuZGluZ2thbiBkZW5nYW4gd2FrdHUgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIHNpbmdrYXQsIHNlaGluZ2dhIHRpZGFrIHNlZWZpc2llbiB3aWxheWFoIGxhaW4gZGFsYW0gaGFsIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuLg0KIA0KSmFkaSwgQmFyYXQgKEVsZWt0cm9uaWspIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoLg0KDQojIyBSRUtPTUVOREFTU0kgT1BSQVNJT05BTA0KDQojIyMgQWFuYWxpc2lzIEhhc2lsIERhdGENCg0KQmVyZGFzYXJrYW4gYW5hbGlzaXMgeWFuZyBBbmRhIGxha3VrYW4sIHdpbGF5YWggZGVuZ2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGFkYWxhaCBCYXJhdCAoRWxla3Ryb25paykgZGVuZ2FuIHJhc2lvIGVmaXNpZW5zaSBzZWJlc2FyIDY2Ni42Ny4gUmFzaW8gaW5pIG1lbnVuanVra2FuIGJhaHdhIGJpYXlhIHBlciB1bml0IHVudHVrIHdpbGF5YWggaW5pIGN1a3VwIHRpbmdnaSBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4geWFuZyBsZWJpaCBzaW5na2F0LCB5YW5nIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBwZW5naXJpbWFuIGJhcmFuZyBkaSB3aWxheWFoIHRlcnNlYnV0IHRpZGFrIGVmaXNpZW4gZGFsYW0gaGFsIGJpYXlhIGRhbiB3YWt0dS4NCg0KS2VzaW1wdWxhbjoNCg0KLSBXaWxheWFoIHlhbmcgTWVtZXJsdWthbiBQZXJoYXRpYW4gS2h1c3VzOiBXaWxheWFoIEJhcmF0IChFbGVrdHJvbmlrKSBwZXJsdSBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbm55YS4gTWVza2lwdW4gd2FrdHUgcGVuZ2lyaW1hbiByZWxhdGlmIHNpbmdrYXQsIGJpYXlhIHBlciB1bml0IHlhbmcgbGViaWggdGluZ2dpIG1lbWJ1YXQgcmFzaW8gZWZpc2llbnNpIG1lbmphZGkgbGViaWggYnVydWsgZGliYW5kaW5na2FuIHdpbGF5YWggbGFpbm55YS4NCg0KIyMjIFJla29tZW5kYXNpDQoNCioqUmVrb21lbmRhc2kgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIEJhcmF0IChFbGVrdHJvbmlrKToqKg0KDQoxLiBPcHRpbWFsa2FuIFJ1dGUgUGVuZ2lyaW1hbjoNCg0KLSBQZW5ndXJhbmdhbiB3YWt0dSBwZW5naXJpbWFuIGRhcGF0IGRpY2FwYWkgZGVuZ2FuIG1lbmdvcHRpbWFsa2FuIHJ1dGUgcGVuZ2lyaW1hbiBtZW5nZ3VuYWthbiB0ZWtub2xvZ2kgbmF2aWdhc2kgY2FuZ2dpaCwgc2VwZXJ0aSBhcGxpa2FzaSBwZW1ldGFhbiBkYW4gc2lzdGVtIG1hbmFqZW1lbiBsb2dpc3Rpay4gSW5pIGRhcGF0IG1lbmd1cmFuZ2kgd2FrdHUgeWFuZyBkaXBlcmx1a2FuIHVudHVrIHNhbXBhaSBrZSB0dWp1YW4uDQoNCjIuIE5lZ29zaWFzaSBkZW5nYW4gUGVueWVkaWEgSmFzYSBQZW5naXJpbWFuOg0KDQotIE5lZ29zaWFzaSB0YXJpZiBkZW5nYW4gcGVueWVkaWEgbGF5YW5hbiBwZW5naXJpbWFuIGF0YXUgbWVtaWxpaCBwZW55ZWRpYSB5YW5nIGxlYmloIG11cmFoIGRhcGF0IG1lbmd1cmFuZ2kgYmlheWEgcGVyIHVuaXQuIFBpbGloYW4gbGF5YW5hbiBwZW5naXJpbWFuIHlhbmcgbGViaWggZWZpc2llbiwgc2VwZXJ0aSBwZW5naXJpbWFuIG1hc3NhbCBhdGF1IG1lbmdndW5ha2FuIGtlbmRhcmFhbiB5YW5nIGxlYmloIGJlc2FyLCBiaXNhIG1lbWJhbnR1IG1lbnVydW5rYW4gYmlheWEuDQoNCjMuIFBlbmluZ2thdGFuIFBlbmdlbG9sYWFuIEludmVudGFyaXM6DQoNCi0gTWVuZ3VyYW5naSBzdG9rIGJlcmxlYmloIGRhbiBtZW5pbmdrYXRrYW4gcGVyZW5jYW5hYW4gaW52ZW50YXJpcyBha2FuIG1lbmd1cmFuZ2kga2VidXR1aGFuIHBlbmdpcmltYW4gbWVuZGVzYWssIHlhbmcgc2VyaW5na2FsaSBsZWJpaCBtYWhhbC4gTWVueXVzdW4gc3RyYXRlZ2kgZGlzdHJpYnVzaSB5YW5nIGxlYmloIHRlcmF0dXIgYWthbiBtZW1iYW50dSBtZW5la2FuIGJpYXlhIHBlbmdpcmltYW4uDQoNCjQuIFBlbmdndW5hYW4gVGVrbm9sb2dpIHVudHVrIE1lbmluZ2thdGthbiBFZmlzaWVuc2k6DQoNCk1lbmdpbXBsZW1lbnRhc2lrYW4gdGVrbm9sb2dpIHNlcGVydGkgc2lzdGVtIG1hbmFqZW1lbiBndWRhbmcgKFdNUykgZGFuIHBlbGFjYWthbiBwZW5naXJpbWFuIG90b21hdGlzIGRhcGF0IG1lbXBlcmNlcGF0IHByb3NlcyBwZW5nYW1iaWxhbiBkYW4gcGVuZ2lyaW1hbiBiYXJhbmcuIEluaSBqdWdhIG1lbWJhbnR1IGRhbGFtIG1lbXBlcmtpcmFrYW4gd2FrdHUgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGFrdXJhdC4NCg0KNS4gS29uc29saWRhc2kgUGVuZ2lyaW1hbjoNCg0KTWVuZ2dhYnVuZ2thbiBiZWJlcmFwYSBwZW5naXJpbWFuIGtlIGRhbGFtIHNhdHUgcnV0ZSBhdGF1IHBlbmdpcmltYW4ga29sZWt0aWYgZGFwYXQgbWVudXJ1bmthbiBiaWF5YSBwZXIgdW5pdCBrYXJlbmEgbWVuZ3VyYW5naSBqdW1sYWggcGVyamFsYW5hbiB5YW5nIGRpbGFrdWthbi4NCg0KNi4gRXZhbHVhc2kgV2FrdHUgUGVuZ2lyaW1hbiB5YW5nIExlYmloIEZsZWtzaWJlbDoNCg0KLSBNZW5naWRlbnRpZmlrYXNpIGphbS1qYW0gdGVydGVudHUgZGkgbWFuYSBwZW5naXJpbWFuIGJpc2EgbGViaWggbXVyYWggYXRhdSBsZWJpaCBlZmlzaWVuIGRhcmkgc2lzaSBiaWF5YS4gSmlrYSBtZW11bmdraW5rYW4sIHBlbmdpcmltYW4gZGFwYXQgZGlqYWR3YWxrYW4gZGkgbHVhciBqYW0gc2lidWsgdW50dWsgbWVuZ2hpbmRhcmkgYmlheWEgdGFtYmFoYW4geWFuZyB0ZXJrYWl0IGRlbmdhbiBsYWx1IGxpbnRhcyBhdGF1IGphbSBvcGVyYXNpb25hbCB0ZXJiYXRhcy4NCg0KS2VzaW1wdWxhbjoNCg0KV2lsYXlhaCBCYXJhdCAoRWxla3Ryb25paykgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIGthcmVuYSBlZmlzaWVuc2lueWEgcmVuZGFoLiBEZW5nYW4gaW1wbGVtZW50YXNpIGxhbmdrYWgtbGFuZ2thaCBzZXBlcnRpIHBlbmdvcHRpbWFsYW4gcnV0ZSBwZW5naXJpbWFuLCBuZWdvc2lhc2kgdGFyaWYgcGVuZ2lyaW1hbiwgZGFuIHRla25vbG9naSB5YW5nIGxlYmloIGVmaXNpZW4sIGRpaGFyYXBrYW4gYmlheWEgZGFuIHdha3R1IHBlbmdpcmltYW4gZGFwYXQgZGlrdXJhbmdpLCBtZW5pbmdrYXRrYW4gZWZpc2llbnNpIHNlY2FyYSBrZXNlbHVydWhhbi4NCg0KIyMgQU5BTElTSVMgS0lORVJKQSBCRVJEQVNBUktBTiBKRU5JUyBCQVJBTkc6DQoNCjEuIFdha3R1IFBlbmdpcmltYW46DQoNCldha3R1IHBlbmdpcmltYW4gdGVyY2VwYXQ6DQoNCi0gVGVuZ2FoIChFbGVrdHJvbmlrKSBkYW4gVXRhcmEgKFBlcmFsYXRhbikgbWFzaW5nLW1hc2luZyBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIDQgamFtLCB5YW5nIG1lcnVwYWthbiB3YWt0dSB0ZXJjZXBhdCBkaSBhbnRhcmEgc2VtdWEga2F0ZWdvcmkuDQoNCi0gV2FrdHUgcGVuZ2lyaW1hbiB0ZXJsYW1hOg0KDQpVdGFyYSAoUGFrYWlhbikgbWVtaWxpa2kgd2FrdHUgcGVuZ2lyaW1hbiA5IGphbSwgeWFuZyBtZXJ1cGFrYW4gd2FrdHUgcGVuZ2lyaW1hbiB0ZXJsYW1hLg0KDQoyLiBCaWF5YSBwZXIgVW5pdDoNCg0KQmlheWEgcGVyIHVuaXQgdGVyZW5kYWg6DQoNCi0gQmFyYXQgKEVsZWt0cm9uaWspIGRlbmdhbiBiaWF5YSBwZXIgdW5pdCBScCA0LDAwMCwgeWFuZyBtZXJ1cGFrYW4gYmlheWEgdGVyZW5kYWggZGliYW5kaW5na2FuIHdpbGF5YWggbGFpbm55YS4NCg0KQmlheWEgcGVyIHVuaXQgdGVydGluZ2dpOg0KDQogIC0gU2VsYXRhbiAoRWxla3Ryb25paykgZGVuZ2FuIGJpYXlhIHBlciB1bml0IFJwIDE2LDAwMCwgeWFuZyBtZXJ1cGFrYW4gYmlheWEgdGVydGluZ2dpLg0KDQogQW5hbGlzaXMgS2luZXJqYSBCZXJkYXNhcmthbiBKZW5pcyBCYXJhbmc6DQoNCiAgLSBFbGVrdHJvbmlrOg0KDQogICAgLSBXYWt0dSBwZW5naXJpbWFuOiBXYWt0dSBwZW5naXJpbWFuIHBhbGluZyBjZXBhdCBhZGFsYWggVGVuZ2FoIChFbGVrdHJvbmlrKSBkZW5nYW4gd2FrdHUgNCBqYW0sIHlhbmcgbGViaWggY2VwYXQgZGliYW5kaW5na2FuIGRlbmdhbiB3aWxheWFoIGxhaW4geWFuZyBtZW1pbGlraSBrYXRlZ29yaSBFbGVrdHJvbmlrLg0KDQogICAgLSBCaWF5YSBwZXIgdW5pdDogQmFyYXQgKEVsZWt0cm9uaWspIG1lbWlsaWtpIGJpYXlhIHBlciB1bml0IHRlcmVuZGFoIChScCA0LDAwMCksIHNlZGFuZ2thbiBTZWxhdGFuIChFbGVrdHJvbmlrKSBtZW1pbGlraSBiaWF5YSB0ZXJ0aW5nZ2kgKFJwIDE2LDAwMCkuDQoNCiAgIC0gUGFrYWlhbjoNCg0KICAgICAtIFdha3R1IHBlbmdpcmltYW46IFRpbXVyIChQYWthaWFuKSBkYW4gVGVuZ2FoIChQYWthaWFuKSBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIDcgamFtLCBzZW1lbnRhcmEgVXRhcmEgKFBha2FpYW4pIG1lbWlsaWtpIHdha3R1IHBlbmdpcmltYW4gdGVybGFtYSAoOSBqYW0pLg0KDQogICAgIC0gQmlheWEgcGVyIHVuaXQ6IFRlbmdhaCAoUGFrYWlhbikgbWVtaWxpa2kgYmlheWEgcGVyIHVuaXQgdGVyZW5kYWggKFJwIDcsODAwKSwgc2VkYW5na2FuIFV0YXJhIChQYWthaWFuKSBtZW1pbGlraSBiaWF5YSBwZXIgdW5pdCB0ZXJ0aW5nZ2kgKFJwIDE0LDUwMCkuDQoNCiAgIC0gTWFrYW5hbjoNCg0KICAgICAtIFdha3R1IHBlbmdpcmltYW46IEJhcmF0IChNYWthbmFuKSBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIHRlcmNlcGF0ICg1IGphbSksIHNlbWVudGFyYSBTZWxhdGFuIChNYWthbmFuKSBkYW4gVGltdXIgKE1ha2FuYW4pIG1lbWlsaWtpIHdha3R1IHBlbmdpcmltYW4gNyBqYW0uDQoNCiAgICAgLSBCaWF5YSBwZXIgdW5pdDogVGltdXIgKE1ha2FuYW4pIGRhbiBCYXJhdCAoTWFrYW5hbikgbWVtaWxpa2kgYmlheWEgcGVyIHVuaXQgeWFuZyByZWxhdGlmIG1pcmlwIChScCAxMCwwMDAgZGFuIFJwIDEwLDUwMCksIGRlbmdhbiBTZWxhdGFuIChNYWthbmFuKSBzZWRpa2l0IGxlYmloIHRpbmdnaSAoUnAgOSw1MDApLg0KDQogIC0gUGVyYWxhdGFuOg0KICANCiAgICAtIFdha3R1IHBlbmdpcmltYW46IFV0YXJhIChQZXJhbGF0YW4pIGRhbiBUZW5nYWggKFBlcmFsYXRhbikgbWVtaWxpa2kgd2FrdHUgcGVuZ2lyaW1hbiB0ZXJjZXBhdCAoNCBqYW0pLg0KDQogICAgIC0gQmlheWEgcGVyIHVuaXQ6IEJhcmF0IChQZXJhbGF0YW4pIGRhbiBUZW5nYWggKFBlcmFsYXRhbikgbWVtaWxpa2kgYmlheWEgcGVyIHVuaXQgeWFuZyBoYW1waXIgc2FtYSAoUnAgMTIsMDAwIGRhbiBScCAxMSw1MDApLCB5YW5nIGxlYmloIHJlbmRhaCBkaWJhbmRpbmdrYW4gZGVuZ2FuIGJpYXlhIHBlciB1bml0IGRpIHdpbGF5YWggbGFpbi4NCg0KKipLZXNpbXB1bGFuOioqDQoNCldpbGF5YWggZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4gdGVyY2VwYXQgZGFuIGJpYXlhIHBlciB1bml0IGxlYmloIHJlbmRhaDoNCg0KLSBUZW5nYWggKEVsZWt0cm9uaWspIG1lbWlsaWtpIHdha3R1IHBlbmdpcmltYW4gdGVyY2VwYXQgKDQgamFtKSBkYW4gYmlheWEgcGVyIHVuaXQgcmVsYXRpZiByZW5kYWggKFJwIDgsNTAwKS4gSW5pIG1lcnVwYWthbiB3aWxheWFoIGRlbmdhbiBraW5lcmphIHRlcmJhaWsgYmVyZGFzYXJrYW4gYW5hbGlzaXMgd2FrdHUgZGFuIGJpYXlhLg0KDQpXaWxheWFoIGRlbmdhbiBraW5lcmphIHRlcmJ1cnVrOg0KDQotIFV0YXJhIChQYWthaWFuKSBtZW1pbGlraSB3YWt0dSBwZW5naXJpbWFuIHRlcmxhbWEgKDkgamFtKSBkYW4gYmlheWEgcGVyIHVuaXQgdGVydGluZ2dpIChScCAxNCw1MDApLCBzZWhpbmdnYSBtZW1idXR1aGthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kuDQoNClJla29tZW5kYXNpOg0KDQotIFVudHVrIFRlbmdhaCAoRWxla3Ryb25payksIGtpbmVyamEgcGVuZ2lyaW1hbiBzdWRhaCBzYW5nYXQgZWZpc2llbiBiYWlrIGRhcmkgc2VnaSB3YWt0dSBtYXVwdW4gYmlheWEsIG5hbXVuIHRldGFwIGRhcGF0IGRpcGVydGFoYW5rYW4gZGVuZ2FuIHBlbmdvcHRpbWFsYW4gbGViaWggbGFuanV0Lg0KDQotIFVudHVrIFV0YXJhIChQYWthaWFuKSwgcGVyYmFpa2FuIGRhcGF0IGRpbGFrdWthbiBkZW5nYW4gbWVudXJ1bmthbiBiaWF5YSBwZW5naXJpbWFuIGRhbiBtZW5pbmdrYXRrYW4ga2VjZXBhdGFuIHBlbmdpcmltYW4gdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaS4NCg0KDQo=