Tugas Pertemuan 11

Statistika Dasar

foto

1 Latihan 1

Berikut data yang akan dikerjakan,

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:

Data Penjualan Per Cabang
Cabang Penjualan
A 50, 55, 60, 65, 70
B 40, 50, 60, 70, 80
C 30, 30, 35, 40, 45
D 70, 75, 80, 85, 90

1.1 Perhitungan Manual Mean, Median, dan Standar Deviasi masing-masing cabang

Berikut perhitungan manual untuk masing-masing cabang, yang bisa dimasukkan ke dalam R Markdown:

1.1.1 Cabang A: \(50, 55, 60, 65, 70\)

Rata-rata (\(\bar{x}\)): \[ \bar{x} = \frac{\text{Jumlah data}}{\text{Jumlah elemen}} = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{300}{5} = 60 \]

Median: Data diurutkan: \(50, 55, 60, 65, 70\).
Median = nilai tengah = \(60\).

Standar Deviasi (\(s\)): \[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n - 1}} \] Langkah: \[ (x_i - \bar{x})^2: (50 - 60)^2 = 100, \; (55 - 60)^2 = 25, \; (60 - 60)^2 = 0, \; (65 - 60)^2 = 25, \; (70 - 60)^2 = 100 \] \[ \sum (x_i - \bar{x})^2 = 100 + 25 + 0 + 25 + 100 = 250 \] \[ s = \sqrt{\frac{250}{5-1}} = \sqrt{\frac{250}{4}} = \sqrt{62.5} \approx 7.91 \]


1.1.2 Cabang B: \(40, 50, 60, 70, 80\)

Rata-rata (\(\bar{x}\)): \[ \bar{x} = \frac{40 + 50 + 60 + 70 + 80}{5} = \frac{300}{5} = 60 \]

Median: Data diurutkan: \(40, 50, 60, 70, 80\).
Median = nilai tengah = \(60\).

Standar Deviasi (\(s\)): \[ (x_i - \bar{x})^2: (40 - 60)^2 = 400, \; (50 - 60)^2 = 100, \; (60 - 60)^2 = 0, \; (70 - 60)^2 = 100, \; (80 - 60)^2 = 400 \] \[ \sum (x_i - \bar{x})^2 = 400 + 100 + 0 + 100 + 400 = 1000 \] \[ s = \sqrt{\frac{1000}{5-1}} = \sqrt{\frac{1000}{4}} = \sqrt{250} \approx 15.81 \]


1.1.3 Cabang C: \(30, 30, 35, 40, 45\)

Rata-rata (\(\bar{x}\)): \[ \bar{x} = \frac{30 + 30 + 35 + 40 + 45}{5} = \frac{180}{5} = 36 \]

Median: Data diurutkan: \(30, 30, 35, 40, 45\).
Median = nilai tengah = \(35\).

Standar Deviasi (\(s\)): \[ (x_i - \bar{x})^2: (30 - 36)^2 = 36, \; (30 - 36)^2 = 36, \; (35 - 36)^2 = 1, \; (40 - 36)^2 = 16, \; (45 - 36)^2 = 81 \] \[ \sum (x_i - \bar{x})^2 = 36 + 36 + 1 + 16 + 81 = 170 \] \[ s = \sqrt{\frac{170}{5-1}} = \sqrt{\frac{170}{4}} = \sqrt{42.5} \approx 6.52 \]


1.1.4 Cabang D: \(70, 75, 80, 85, 90\)

Rata-rata (\(\bar{x}\)): \[ \bar{x} = \frac{70 + 75 + 80 + 85 + 90}{5} = \frac{400}{5} = 80 \]

Median: Data diurutkan: \(70, 75, 80, 85, 90\).
Median = nilai tengah = \(80\).

Standar Deviasi (\(s\)): \[ (x_i - \bar{x})^2: (70 - 80)^2 = 100, \; (75 - 80)^2 = 25, \; (80 - 80)^2 = 0, \; (85 - 80)^2 = 25, \; (90 - 80)^2 = 100 \] \[ \sum (x_i - \bar{x})^2 = 100 + 25 + 0 + 25 + 100 = 250 \] \[ s = \sqrt{\frac{250}{5-1}} = \sqrt{\frac{250}{4}} = \sqrt{62.5} \approx 7.91 \]


1.1.5 Ringkasan Hasil:

Cabang Rata-rata Median Standar Deviasi
A 60 60 7.91
B 60 60 15.81
C 36 35 6.52
D 80 80 7.91

1.2 Cabang yang memiliki penyebaran data paling kecil

Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan alasannya.

Dari hasil perhitungan standar deviasi di perhitungan manual, kita tahu bahwa:

Cabang Standar Deviasi
A 7.91
B 15.81
C 6.52
D 7.91

Penyebaran data paling kecil ada di Cabang C, karena standar deviasinya yang paling rendah, yaitu 6.52.

Penjelasan:
Standar deviasi yang lebih kecil menunjukkan bahwa data lebih terkonsentrasi di sekitar rata-rata, sehingga variasi antar data lebih kecil dibandingkan cabang lainnya. Pada Cabang C, nilai-nilai penjualan (30, 30, 35, 40, 45) lebih dekat dengan rata-rata (36) dibandingkan cabang lainnya.

1.3 Cabang Yang Gagal Mencapai Target 50 Juta

Dari data awal:

Cabang Penjualan (dalam juta rupiah)
A 50, 55, 60, 65, 70
B 40, 50, 60, 70, 80
C 30, 30, 35, 40, 45
D 70, 75, 80, 85, 90

Analisis:

  • Cabang A: Tidak gagal karena semua nilai \(\geq 50\).
  • Cabang B: Tidak gagal karena hanya ada satu nilai yang < 50 (40), tetapi nilai lainnya \(\geq 50\).
  • Cabang C: Gagal mencapai target di semua datanya karena semua nilai penjualan < 50 (30, 30, 35, 40, 45).
  • Cabang D: Tidak gagal karena semua nilai \(\geq 50\).

Kesimpulan:

Cabang yang gagal mencapai target penjualan minimum sebesar 50 juta rupiah di semua datanya adalah Cabang C.

1.4 Visualisasi Boxplot

Berikut adalah visualisasi boxplot untuk penyebaran data masing masing cabang:

Cabang A

Data penjualan cabang A: 50,55,60,65,70

Berikut adalah Boxplotnya,

Cabang B

Data penjualan cabang B: 40,50,60,70,80

Berikut adalah visualisasi Boxplotnya,

Cabang c

Data penjualan cabang C: 30, 30, 35, 40, 45

Berikut adalah visualisasi Boxplotnya,

Cabang c

Data penjualan cabang C: 70, 75, 80, 85, 90

Berikut adalah visualisasi Boxplotnya,

Visualisasi Perbandingan Tiap Cabang

Untuk mempermudah analisis, berikut adalah perbandingan setiap cabang secara visualisasi boxplot:

1.5 Menggunakan Informasi untuk Merencanakan Strategi Peningkatan Penjualan

  1. Analisis Keseluruhan:
  • Kinerja Cabang: Berdasarkan data penjualan, Cabang C mencatatkan hasil penjualan yang lebih rendah dibandingkan cabang lainnya, dengan angka yang cukup konsisten namun masih di bawah rata-rata. Sebaliknya, Cabang D menunjukkan kinerja yang sangat baik, dengan penjualan yang stabil dan lebih tinggi, menjadikannya sebagai contoh yang patut diikuti oleh cabang lain.
  • Variabilitas Penjualan: Cabang C memiliki deviasi standar yang kecil, menandakan bahwa penjualannya lebih stabil meskipun berada pada level rendah. Sementara itu, Cabang B menunjukkan fluktuasi penjualan yang lebih besar, yang bisa jadi mengindikasikan adanya faktor ketidakstabilan yang perlu dianalisis lebih lanjut.
  1. Strategi untuk Meningkatkan Penjualan:
  • Fokus pada Cabang C: Untuk mendorong pertumbuhan di Cabang C, dapat dilakukan upaya-upaya seperti memberikan diskon atau promosi khusus, memperkenalkan variasi produk baru yang lebih sesuai dengan keinginan pasar lokal, serta melakukan analisis kebutuhan pelanggan untuk menemukan peluang ekspansi yang lebih baik.
  • Belajar dari Keberhasilan Cabang D: Keberhasilan yang dicapai oleh Cabang D dapat dijadikan acuan. Misalnya, dengan mempelajari strategi pemasaran, peningkatan kualitas pelayanan, dan pemberian pelatihan untuk tim penjualan. Hal ini dapat membantu cabang lain untuk meraih hasil yang lebih baik. Selain itu, memberikan insentif berbasis kinerja dapat meningkatkan motivasi karyawan untuk mencapai target yang lebih tinggi.

Kesimpulan: Melalui pemahaman yang lebih mendalam tentang data penjualan ini, strategi utama adalah fokus untuk meningkatkan hasil di Cabang C, sambil mempertahankan performa tinggi yang tercatat di Cabang D. Pendekatan berbasis data ini dapat membantu perusahaan membuat langkah-langkah yang lebih tepat untuk meningkatkan hasil penjualan secara keseluruhan.

2 Latihan 2

Berikut data yang akan dikerjakan,

Perusahaan XYZ mengelola pengiriman barang ke berbagai wilayah dengan menggunakan berbagai jenis transportasi. Setiap pengiriman melibatkan biaya transportasi, waktu yang dibutuhkan, dan jumlah barang yang dikirim. Berikut adalah data terkait pengiriman barang berdasarkan wilayah dan jenis barang:

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 14000
Utara Pakaian 300 9 8500
Selatan Makanan 220 7 9500
Timur Peralatan 140 5 11000
Barat Elektronik 180 6 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

2.1 Analisis Efisiensi Pengiriman

1. Visualisasi Plot 3D

Data di atas memuat informasi tentang pengiriman barang berdasarkan wilayah, jenis barang, jumlah barang, waktu pengiriman, dan biaya per unit. Kolom tambahan, Efisiensi, dihitung sebagai rasio antara biaya per unit dengan waktu pengiriman untuk menilai biaya relatif terhadap kecepatan pengiriman.

Penjelasan:

  • Jumlah Barang: Wilayah dengan pengiriman terbesar adalah Tengah (hingga 350 barang).
  • Waktu Pengiriman: Rata-rata waktu pengiriman berkisar antara 4 hingga 9 hari.
  • Biaya per Unit: Barang elektronik memiliki biaya per unit tertinggi (hingga 16.000 rupiah), sedangkan pakaian memiliki biaya terendah.
  • Efisiensi: Barang dengan efisiensi tertinggi memiliki rasio biaya yang rendah terhadap waktu pengiriman (lebih cepat dengan biaya murah), ditandai oleh warna hijau pada grafik.

Visualisasi 3D menunjukkan hubungan antara jumlah barang, waktu pengiriman, dan biaya per unit, dengan efisiensi diwakili oleh gradasi warna hijau (efisiensi tinggi) ke merah (efisiensi rendah). Hal ini membantu mengidentifikasi wilayah atau jenis barang yang membutuhkan optimalisasi.

2. Wilayah yang Memiliki Efisiensi Pengiriman Terendah Berdasarkan Biaya per Unit dan Waktu Pengiriman.

Efisiensi pengiriman dihitung sebagai rasio Biaya per Unit terhadap Waktu Pengiriman:

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

Mari kita hitung efisiensi untuk setiap wilayah berdasarkan data:

Wilayah Biaya per Unit (Rp) Waktu Pengiriman (jam) Efisiensi (Rp/jam)
Utara 15000 5 3000
Selatan 8000 8 1000
Timur 10000 6 1666.67
Barat 12000 7 1714.29
Tengah 14000 4 3500
Utara 8500 9 944.44
Selatan 9500 7 1357.14
Timur 11000 5 2200
Barat 14500 6 2416.67
Tengah 7800 8 975
Utara 12000 4 3000
Selatan 16000 6 2666.67
Timur 8200 7 1171.43
Barat 10500 5 2100
Tengah 11500 5 2300

Wilayah dengan efisiensi terendah:
Wilayah Tengah (barang Pakaian) memiliki efisiensi terendah sebesar 975 Rp/jam, yang berarti biaya per unit relatif tinggi dibandingkan waktu pengiriman.

2.2 Rekomendasi Operasional

Berdasarkan analisis, wilayah Tengah menjadi fokus utama untuk meningkatkan efisiensi pengiriman, terutama untuk kategori barang Pakaian.

Alasan:

  • Pengiriman pakaian di wilayah ini memiliki tingkat efisiensi terendah, yaitu 975 Rp/jam, dibandingkan kombinasi wilayah dan jenis barang lainnya.
  • Tingginya biaya per unit yang tidak sebanding dengan waktu pengiriman menjadikan wilayah ini memerlukan perbaikan dalam proses logistik.

Rekomendasi untuk Meningkatkan Efisiensi:

  • Evaluasi Biaya Logistik: Tinjau ulang tarif penyedia logistik untuk memastikan harga yang lebih terjangkau tanpa mengurangi kualitas layanan.
  • Perbaikan Rute Pengiriman: Cari jalur yang lebih efisien untuk memangkas waktu pengiriman tanpa meningkatkan pengeluaran.
  • Optimasi Kapasitas Pengiriman: Maksimalkan penggunaan kapasitas kendaraan agar biaya per unit menjadi lebih rendah.

2.3 Kinerja Berdasarkan Jenis Barang

Berikut adalah analisis kinerja pengiriman berdasarkan jenis barang dan wilayah untuk menentukan kategori dengan waktu pengiriman lebih cepat dan biaya per unit lebih rendah:

1. Waktu Pengiriman Tercepat - Jenis Barang: Elektronik - Wilayah: Tengah
- Waktu Pengiriman: 4 jam
- Barang elektronik cenderung dikirim dengan waktu lebih cepat dibanding jenis barang lain, terutama di wilayah Tengah.

2. Biaya per Unit Terendah - Jenis Barang: Pakaian
- Wilayah: Tengah
- Biaya per Unit: Rp 7,800
- Meskipun pakaian memiliki biaya per unit terendah di wilayah ini, efisiensinya rendah karena waktu pengiriman yang relatif lama (8 jam).

Kinerja Secara Umum

  • Pengiriman Paling Efisien: Elektronik di wilayah Tengah (Efisiensi: 3500 Rp/jam).

    • Kombinasi biaya yang cukup rendah dan waktu pengiriman yang cepat menjadikan kategori ini paling efisien.
  • Pengiriman Kurang Efisien: Pakaian di wilayah Tengah (Efisiensi: 975 Rp/jam).

    • Biaya rendah tidak cukup menutupi waktu pengiriman yang lama, sehingga efisiensinya menjadi yang terendah.

Kesimpulan - Barang elektronik di wilayah Tengah memiliki kinerja terbaik dengan waktu pengiriman tercepat dan biaya yang cukup kompetitif. - Barang pakaian di wilayah Tengah memerlukan perhatian lebih untuk mengurangi waktu pengiriman tanpa meningkatkan biaya.

LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiAxMSINCnN1YnRpdGxlOiAiU3RhdGlzdGlrYSBEYXNhciINCmF1dGhvcjogDQogIC0gIkNoZWxsbyBGcmhpbm8gTWlrZSBNICg1MjI0MDAzMSkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KLS0tDQoNCjxzdHlsZT4NCiAgYm9keSB7DQogICAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgfQ0KPC9zdHlsZT4NCg0KPGltZyBpZD0iZm90by1hdXRob3IiIHNyYz0iQzovVXNlcnMvVVNFUi9Eb2N1bWVudHMvUkJveHBsb3QvaW1nL1doYXRzQXBwIEltYWdlIDIwMjQtMTEtMjQgYXQgMy4yOS40MSBQTS5qcGVnIiBhbHQ9ImZvdG8iIHN0eWxlPSJ3aWR0aDozMDBweDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiPg0KDQojIExhdGloYW4gMQ0KQmVyaWt1dCBkYXRhIHlhbmcgYWthbiBkaWtlcmpha2FuLA0KDQpTZWJ1YWggcGVydXNhaGFhbiBpbmdpbiBtZW1haGFtaSBrYXJha3RlcmlzdGlrIHBlbnllYmFyYW4gZGF0YSBoYXNpbCBwZW5qdWFsYW4gZGFyaSBlbXBhdCBjYWJhbmcgKEEsIEIsIEMsIGRhbiBEKSBzZWxhbWEgc2F0dSBidWxhbiB0ZXJha2hpci4gRGF0YSBwZW5qdWFsYW4gKGRhbGFtIGp1dGEgcnVwaWFoKSBkYXJpIGtlZW1wYXQgY2FiYW5nIHRlcnNlYnV0IGFkYWxhaCBzZWJhZ2FpIGJlcmlrdXQ6DQpgYGB7cix3YXJuaW5nPUZBTFNFLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRX0NCiMgSW5zdGFsYXNpIHBha2V0IGtuaXRyIChqaWthIGJlbHVtIGRpaW5zdGFsKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpDQoNCiMgRGF0YSBwZW5qdWFsYW4NCmRhdGFfcGVuanVhbGFuIDwtIGRhdGEuZnJhbWUoDQogIENhYmFuZyA9IGMoIkEiLCAiQiIsICJDIiwgIkQiKSwNCiAgUGVuanVhbGFuID0gYygNCiAgICAiNTAsIDU1LCA2MCwgNjUsIDcwIiwNCiAgICAiNDAsIDUwLCA2MCwgNzAsIDgwIiwNCiAgICAiMzAsIDMwLCAzNSwgNDAsIDQ1IiwNCiAgICAiNzAsIDc1LCA4MCwgODUsIDkwIg0KICApDQopDQoNCiMgTWVuYW1waWxrYW4gdGFiZWwNCmtuaXRyOjprYWJsZShkYXRhX3Blbmp1YWxhbiwgY2FwdGlvbiA9ICJEYXRhIFBlbmp1YWxhbiBQZXIgQ2FiYW5nIikNCg0KYGBgDQoNCiMjIFBlcmhpdHVuZ2FuIE1hbnVhbCBNZWFuLCBNZWRpYW4sIGRhbiBTdGFuZGFyIERldmlhc2kgbWFzaW5nLW1hc2luZyBjYWJhbmcNCg0KQmVyaWt1dCBwZXJoaXR1bmdhbiBtYW51YWwgdW50dWsgbWFzaW5nLW1hc2luZyBjYWJhbmcsIHlhbmcgYmlzYSBkaW1hc3Vra2FuIGtlIGRhbGFtIFIgTWFya2Rvd246DQoNCiMjIyAqKkNhYmFuZyBBKio6IFwoIDUwLCA1NSwgNjAsIDY1LCA3MCBcKQ0KDQoqKlJhdGEtcmF0YSAoXCggXGJhcnt4fSBcKSkqKjoNClxbDQpcYmFye3h9ID0gXGZyYWN7XHRleHR7SnVtbGFoIGRhdGF9fXtcdGV4dHtKdW1sYWggZWxlbWVufX0gPSBcZnJhY3s1MCArIDU1ICsgNjAgKyA2NSArIDcwfXs1fSA9IFxmcmFjezMwMH17NX0gPSA2MA0KXF0NCg0KKipNZWRpYW4qKjoNCkRhdGEgZGl1cnV0a2FuOiBcKCA1MCwgNTUsIDYwLCA2NSwgNzAgXCkuICANCk1lZGlhbiA9IG5pbGFpIHRlbmdhaCA9IFwoIDYwIFwpLg0KDQoqKlN0YW5kYXIgRGV2aWFzaSAoXCggcyBcKSkqKjoNClxbDQpzID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXGJhcnt4fSleMn17biAtIDF9fQ0KXF0NCkxhbmdrYWg6DQpcWw0KKHhfaSAtIFxiYXJ7eH0pXjI6ICg1MCAtIDYwKV4yID0gMTAwLCBcOyAoNTUgLSA2MCleMiA9IDI1LCBcOyAoNjAgLSA2MCleMiA9IDAsIFw7ICg2NSAtIDYwKV4yID0gMjUsIFw7ICg3MCAtIDYwKV4yID0gMTAwDQpcXQ0KXFsNClxzdW0gKHhfaSAtIFxiYXJ7eH0pXjIgPSAxMDAgKyAyNSArIDAgKyAyNSArIDEwMCA9IDI1MA0KXF0NClxbDQpzID0gXHNxcnR7XGZyYWN7MjUwfXs1LTF9fSA9IFxzcXJ0e1xmcmFjezI1MH17NH19ID0gXHNxcnR7NjIuNX0gXGFwcHJveCA3LjkxDQpcXQ0KDQotLS0NCg0KIyMjICoqQ2FiYW5nIEIqKjogXCggNDAsIDUwLCA2MCwgNzAsIDgwIFwpDQoNCioqUmF0YS1yYXRhIChcKCBcYmFye3h9IFwpKSoqOg0KXFsNClxiYXJ7eH0gPSBcZnJhY3s0MCArIDUwICsgNjAgKyA3MCArIDgwfXs1fSA9IFxmcmFjezMwMH17NX0gPSA2MA0KXF0NCg0KKipNZWRpYW4qKjoNCkRhdGEgZGl1cnV0a2FuOiBcKCA0MCwgNTAsIDYwLCA3MCwgODAgXCkuICANCk1lZGlhbiA9IG5pbGFpIHRlbmdhaCA9IFwoIDYwIFwpLg0KDQoqKlN0YW5kYXIgRGV2aWFzaSAoXCggcyBcKSkqKjoNClxbDQooeF9pIC0gXGJhcnt4fSleMjogKDQwIC0gNjApXjIgPSA0MDAsIFw7ICg1MCAtIDYwKV4yID0gMTAwLCBcOyAoNjAgLSA2MCleMiA9IDAsIFw7ICg3MCAtIDYwKV4yID0gMTAwLCBcOyAoODAgLSA2MCleMiA9IDQwMA0KXF0NClxbDQpcc3VtICh4X2kgLSBcYmFye3h9KV4yID0gNDAwICsgMTAwICsgMCArIDEwMCArIDQwMCA9IDEwMDANClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezEwMDB9ezUtMX19ID0gXHNxcnR7XGZyYWN7MTAwMH17NH19ID0gXHNxcnR7MjUwfSBcYXBwcm94IDE1LjgxDQpcXQ0KDQotLS0NCg0KIyMjICoqQ2FiYW5nIEMqKjogXCggMzAsIDMwLCAzNSwgNDAsIDQ1IFwpDQoNCioqUmF0YS1yYXRhIChcKCBcYmFye3h9IFwpKSoqOg0KXFsNClxiYXJ7eH0gPSBcZnJhY3szMCArIDMwICsgMzUgKyA0MCArIDQ1fXs1fSA9IFxmcmFjezE4MH17NX0gPSAzNg0KXF0NCg0KKipNZWRpYW4qKjoNCkRhdGEgZGl1cnV0a2FuOiBcKCAzMCwgMzAsIDM1LCA0MCwgNDUgXCkuICANCk1lZGlhbiA9IG5pbGFpIHRlbmdhaCA9IFwoIDM1IFwpLg0KDQoqKlN0YW5kYXIgRGV2aWFzaSAoXCggcyBcKSkqKjoNClxbDQooeF9pIC0gXGJhcnt4fSleMjogKDMwIC0gMzYpXjIgPSAzNiwgXDsgKDMwIC0gMzYpXjIgPSAzNiwgXDsgKDM1IC0gMzYpXjIgPSAxLCBcOyAoNDAgLSAzNileMiA9IDE2LCBcOyAoNDUgLSAzNileMiA9IDgxDQpcXQ0KXFsNClxzdW0gKHhfaSAtIFxiYXJ7eH0pXjIgPSAzNiArIDM2ICsgMSArIDE2ICsgODEgPSAxNzANClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezE3MH17NS0xfX0gPSBcc3FydHtcZnJhY3sxNzB9ezR9fSA9IFxzcXJ0ezQyLjV9IFxhcHByb3ggNi41Mg0KXF0NCg0KLS0tDQoNCiMjIyAqKkNhYmFuZyBEKio6IFwoIDcwLCA3NSwgODAsIDg1LCA5MCBcKQ0KDQoqKlJhdGEtcmF0YSAoXCggXGJhcnt4fSBcKSkqKjoNClxbDQpcYmFye3h9ID0gXGZyYWN7NzAgKyA3NSArIDgwICsgODUgKyA5MH17NX0gPSBcZnJhY3s0MDB9ezV9ID0gODANClxdDQoNCioqTWVkaWFuKio6DQpEYXRhIGRpdXJ1dGthbjogXCggNzAsIDc1LCA4MCwgODUsIDkwIFwpLiAgDQpNZWRpYW4gPSBuaWxhaSB0ZW5nYWggPSBcKCA4MCBcKS4NCg0KKipTdGFuZGFyIERldmlhc2kgKFwoIHMgXCkpKio6DQpcWw0KKHhfaSAtIFxiYXJ7eH0pXjI6ICg3MCAtIDgwKV4yID0gMTAwLCBcOyAoNzUgLSA4MCleMiA9IDI1LCBcOyAoODAgLSA4MCleMiA9IDAsIFw7ICg4NSAtIDgwKV4yID0gMjUsIFw7ICg5MCAtIDgwKV4yID0gMTAwDQpcXQ0KXFsNClxzdW0gKHhfaSAtIFxiYXJ7eH0pXjIgPSAxMDAgKyAyNSArIDAgKyAyNSArIDEwMCA9IDI1MA0KXF0NClxbDQpzID0gXHNxcnR7XGZyYWN7MjUwfXs1LTF9fSA9IFxzcXJ0e1xmcmFjezI1MH17NH19ID0gXHNxcnR7NjIuNX0gXGFwcHJveCA3LjkxDQpcXQ0KDQotLS0gDQoNCiMjIyAqKlJpbmdrYXNhbiBIYXNpbCoqOg0KfCBDYWJhbmcgfCBSYXRhLXJhdGEgfCBNZWRpYW4gfCBTdGFuZGFyIERldmlhc2kgfA0KfC0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfA0KfCBBICAgICAgfCA2MCAgICAgICAgfCA2MCAgICAgfCA3LjkxICAgICAgICAgICAgfA0KfCBCICAgICAgfCA2MCAgICAgICAgfCA2MCAgICAgfCAxNS44MSAgICAgICAgICAgfA0KfCBDICAgICAgfCAzNiAgICAgICAgfCAzNSAgICAgfCA2LjUyICAgICAgICAgICAgfA0KfCBEICAgICAgfCA4MCAgICAgICAgfCA4MCAgICAgfCA3LjkxICAgICAgICAgICAgfA0KDQojIyBDYWJhbmcgeWFuZyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgcGFsaW5nIGtlY2lsDQogIA0KKipDYWJhbmcgbWFuYSB5YW5nIG1lbWlsaWtpIHBlbnllYmFyYW4gZGF0YSBwYWxpbmcga2VjaWw/IEplbGFza2FuIGFsYXNhbm55YS4qKg0KDQpEYXJpIGhhc2lsIHBlcmhpdHVuZ2FuIHN0YW5kYXIgZGV2aWFzaSBkaSAqKnBlcmhpdHVuZ2FuIG1hbnVhbCoqLCBraXRhIHRhaHUgYmFod2E6DQoNCnwgKipDYWJhbmcqKiB8ICoqU3RhbmRhciBEZXZpYXNpKiogfA0KfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEEgICAgICAgICAgfCA3LjkxICAgICAgICAgICAgICAgfA0KfCBCICAgICAgICAgIHwgMTUuODEgICAgICAgICAgICAgIHwNCnwgQyAgICAgICAgICB8IDYuNTIgICAgICAgICAgICAgICB8DQp8IEQgICAgICAgICAgfCA3LjkxICAgICAgICAgICAgICAgfA0KDQoqKlBlbnllYmFyYW4gZGF0YSBwYWxpbmcga2VjaWwqKiBhZGEgZGkgKipDYWJhbmcgQyoqLCBrYXJlbmEgc3RhbmRhciBkZXZpYXNpbnlhIHlhbmcgcGFsaW5nIHJlbmRhaCwgeWFpdHUgKio2LjUyKiouICANCg0KKipQZW5qZWxhc2FuOioqICANClN0YW5kYXIgZGV2aWFzaSB5YW5nIGxlYmloIGtlY2lsIG1lbnVuanVra2FuIGJhaHdhIGRhdGEgbGViaWggdGVya29uc2VudHJhc2kgZGkgc2VraXRhciByYXRhLXJhdGEsIHNlaGluZ2dhIHZhcmlhc2kgYW50YXIgZGF0YSBsZWJpaCBrZWNpbCBkaWJhbmRpbmdrYW4gY2FiYW5nIGxhaW5ueWEuIFBhZGEgQ2FiYW5nIEMsIG5pbGFpLW5pbGFpIHBlbmp1YWxhbiAoMzAsIDMwLCAzNSwgNDAsIDQ1KSBsZWJpaCBkZWthdCBkZW5nYW4gcmF0YS1yYXRhICgzNikgZGliYW5kaW5na2FuIGNhYmFuZyBsYWlubnlhLg0KDQoNCiMjICoqQ2FiYW5nIFlhbmcgR2FnYWwgTWVuY2FwYWkgVGFyZ2V0IDUwIEp1dGEqKiAgDQoNCkRhcmkgZGF0YSBhd2FsOiAgDQoNCnwgKipDYWJhbmcqKiB8ICoqUGVuanVhbGFuIChkYWxhbSBqdXRhIHJ1cGlhaCkqKiAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKkEqKiAgICAgIHwgNTAsIDU1LCA2MCwgNjUsIDcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkIqKiAgICAgIHwgNDAsIDUwLCA2MCwgNzAsIDgwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkMqKiAgICAgIHwgMzAsIDMwLCAzNSwgNDAsIDQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkQqKiAgICAgIHwgNzAsIDc1LCA4MCwgODUsIDkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KDQoqKkFuYWxpc2lzKio6DQoNCi0gKipDYWJhbmcgQSoqOiBUaWRhayBnYWdhbCBrYXJlbmEgc2VtdWEgbmlsYWkgXChcZ2VxIDUwXCkuICANCi0gKipDYWJhbmcgQioqOiBUaWRhayBnYWdhbCBrYXJlbmEgaGFueWEgYWRhIHNhdHUgbmlsYWkgeWFuZyA8IDUwICg0MCksIHRldGFwaSBuaWxhaSBsYWlubnlhIFwoXGdlcSA1MFwpLiAgDQotICoqQ2FiYW5nIEMqKjogKipHYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgc2VtdWEgZGF0YW55YSoqIGthcmVuYSBzZW11YSBuaWxhaSBwZW5qdWFsYW4gPCA1MCAoMzAsIDMwLCAzNSwgNDAsIDQ1KS4gIA0KLSAqKkNhYmFuZyBEKio6IFRpZGFrIGdhZ2FsIGthcmVuYSBzZW11YSBuaWxhaSBcKFxnZXEgNTBcKS4gIA0KDQoqKktlc2ltcHVsYW4qKjoNCg0KQ2FiYW5nIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtIHNlYmVzYXIgNTAganV0YSBydXBpYWggZGkgc2VtdWEgZGF0YW55YSBhZGFsYWggKipDYWJhbmcgQyoqLg0KDQojIyAqKlZpc3VhbGlzYXNpIEJveHBsb3QqKg0KDQpCZXJpa3V0IGFkYWxhaCB2aXN1YWxpc2FzaSBib3hwbG90IHVudHVrIHBlbnllYmFyYW4gZGF0YSBtYXNpbmcgbWFzaW5nIGNhYmFuZzoNCg0KKipDYWJhbmcgQSoqDQoNCkRhdGEgcGVuanVhbGFuIGNhYmFuZyBBOiA1MCw1NSw2MCw2NSw3MA0KDQpCZXJpa3V0IGFkYWxhaCBCb3hwbG90bnlhLA0KYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIHBlbmp1YWxhbiBDYWJhbmcgQQ0KZGF0YV9jYWJhbmdfYSA8LSBkYXRhLmZyYW1lKA0KICBQZW5qdWFsYW4gPSBjKDUwLCA1NSwgNjAsIDY1LCA3MCksDQogIENhYmFuZyA9ICJDYWJhbmcgQSINCikNCg0KIyBNZW1idWF0IGJveHBsb3QgdW50dWsgQ2FiYW5nIEENCnBsb3RfYSA8LSBwbG90X2x5KA0KICBkYXRhX2NhYmFuZ19hLA0KICB5ID0gflBlbmp1YWxhbiwNCiAgdHlwZSA9ICJib3giLA0KICBib3hwb2ludHMgPSAic3VzcGVjdGVkb3V0bGllcnMiLCAgIyBNZW5hbXBpbGthbiB0aXRpayBvdXRsaWVycyBqaWthIGFkYQ0KICBqaXR0ZXIgPSAwLjMsDQogIHBvaW50cG9zID0gLTENCikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJCb3hwbG90IFBlbmp1YWxhbiBDYWJhbmcgQSIsDQogICAgeWF4aXMgPSBsaXN0KA0KICAgICAgdGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiLCANCiAgICAgIHJhbmdlID0gYyg0MCwgODApICAjIFJlbnRhbmcgc3VtYnUgWQ0KICAgICksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkNhYmFuZyBBIikNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3RfYQ0KDQpgYGANCg0KKipDYWJhbmcgQioqDQoNCkRhdGEgcGVuanVhbGFuIGNhYmFuZyBCOiA0MCw1MCw2MCw3MCw4MA0KDQpCZXJpa3V0IGFkYWxhaCB2aXN1YWxpc2FzaSBCb3hwbG90bnlhLA0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQojIERhdGEgcGVuanVhbGFuIENhYmFuZyBCDQpkYXRhX2NhYmFuZ19iIDwtIGRhdGEuZnJhbWUoDQogIFBlbmp1YWxhbiA9IGMoNDAsIDUwLCA2MCwgNzAsIDgwKSwNCiAgQ2FiYW5nID0gIkNhYmFuZyBCIg0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCB1bnR1ayBDYWJhbmcgQg0KcGxvdF9iIDwtIHBsb3RfbHkoDQogIGRhdGFfY2FiYW5nX2IsDQogIHkgPSB+UGVuanVhbGFuLA0KICB0eXBlID0gImJveCIsDQogIGJveHBvaW50cyA9ICJzdXNwZWN0ZWRvdXRsaWVycyIsICANCiAgaml0dGVyID0gMC4zLA0KICBwb2ludHBvcyA9IC0xDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94cGxvdCBQZW5qdWFsYW4gQ2FiYW5nIEIiLA0KICAgIHlheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIlBlbmp1YWxhbiAoanV0YSBydXBpYWgpIiwgDQogICAgICByYW5nZSA9IGMoMzAsIDkwKSAgIyBSZW50YW5nIHN1bWJ1IFkNCiAgICApLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmcgQiIpDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90X2INCg0KYGBgDQoNCioqQ2FiYW5nIGMqKg0KDQpEYXRhIHBlbmp1YWxhbiBjYWJhbmcgQzogMzAsIDMwLCAzNSwgNDAsIDQ1DQoNCkJlcmlrdXQgYWRhbGFoIHZpc3VhbGlzYXNpIEJveHBsb3RueWEsDQpgYGB7cixlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCiMgRGF0YSBwZW5qdWFsYW4gQ2FiYW5nIEMNCmRhdGFfY2FiYW5nX2MgPC0gZGF0YS5mcmFtZSgNCiAgUGVuanVhbGFuID0gYygzMCwgMzAsIDM1LCA0MCwgNDUpLA0KICBDYWJhbmcgPSAiQ2FiYW5nIEMiDQopDQoNCiMgTWVtYnVhdCBib3hwbG90IHVudHVrIENhYmFuZyBDDQpwbG90X2MgPC0gcGxvdF9seSgNCiAgZGF0YV9jYWJhbmdfYywNCiAgeSA9IH5QZW5qdWFsYW4sDQogIHR5cGUgPSAiYm94IiwNCiAgYm94cG9pbnRzID0gInN1c3BlY3RlZG91dGxpZXJzIiwNCiAgaml0dGVyID0gMC4zLA0KICBwb2ludHBvcyA9IC0xDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAiQm94cGxvdCBQZW5qdWFsYW4gQ2FiYW5nIEMiLA0KICAgIHlheGlzID0gbGlzdCgNCiAgICAgIHRpdGxlID0gIlBlbmp1YWxhbiAoanV0YSBydXBpYWgpIiwgDQogICAgICByYW5nZSA9IGMoMjAsIDUwKSAgIyBSZW50YW5nIHN1bWJ1IFkgZGlzZXN1YWlrYW4gZGVuZ2FuIGRhdGEgQ2FiYW5nIEMNCiAgICApLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmcgQyIpDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90X2MNCg0KYGBgDQoNCioqQ2FiYW5nIGMqKg0KDQpEYXRhIHBlbmp1YWxhbiBjYWJhbmcgQzogNzAsIDc1LCA4MCwgODUsIDkwDQoNCkJlcmlrdXQgYWRhbGFoIHZpc3VhbGlzYXNpIEJveHBsb3RueWEsDQpgYGB7cixlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCg0KIyBEYXRhIHBlbmp1YWxhbiB1bnR1ayBDYWJhbmcgRA0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBQZW5qdWFsYW4gPSBjKDcwLCA3NSwgODAsIDg1LCA5MCksDQogIENhYmFuZyA9IHJlcCgiQ2FiYW5nIEQiLCA1KQ0KKQ0KDQojIE1lbWJ1YXQgYm94cGxvdCBtZW5nZ3VuYWthbiBQbG90bHkNCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwgDQogIHkgPSB+UGVuanVhbGFuLCANCiAgeCA9IH5DYWJhbmcsIA0KICB0eXBlID0gImJveCIsIA0KICBib3hwb2ludHMgPSAic3VzcGVjdGVkb3V0bGllcnMiLA0KICBqaXR0ZXIgPSAwLjMsDQogIHBvaW50cG9zID0gLTENCikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJCb3hwbG90IFBlbmp1YWxhbiBDYWJhbmcgRCIsDQogICAgeWF4aXMgPSBsaXN0KA0KICAgICAgdGl0bGUgPSAiUGVuanVhbGFuIChqdXRhIHJ1cGlhaCkiLCANCiAgICAgIHJhbmdlID0gYyg2MCwgMTAwKSAgICAgICAgICAgICMgTWVueWVzdWFpa2FuIHJlbnRhbmcgc3VtYnUgWQ0KICAgICksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkNhYmFuZyIpDQogICkNCg0KIyBNZW5hbXBpbGthbiBwbG90DQpwbG90DQoNCmBgYA0KDQoNCioqVmlzdWFsaXNhc2kgUGVyYmFuZGluZ2FuIFRpYXAgQ2FiYW5nKioNCg0KVW50dWsgbWVtcGVybXVkYWggYW5hbGlzaXMsIGJlcmlrdXQgYWRhbGFoIHBlcmJhbmRpbmdhbiBzZXRpYXAgY2FiYW5nIHNlY2FyYSB2aXN1YWxpc2FzaSBib3hwbG90Og0KDQpgYGB7cixlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkocGxvdGx5KQ0KDQojIERhdGEgcGVuanVhbGFuIHBlciBjYWJhbmcNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgUGVuanVhbGFuID0gYygNCiAgICBjKDUwLCA1NSwgNjAsIDY1LCA3MCksICAjIENhYmFuZyBBDQogICAgYyg0MCwgNTAsIDYwLCA3MCwgODApLCAgIyBDYWJhbmcgQg0KICAgIGMoMzAsIDMwLCAzNSwgNDAsIDQ1KSwgICMgQ2FiYW5nIEMNCiAgICBjKDcwLCA3NSwgODAsIDg1LCA5MCkgICAjIENhYmFuZyBEDQogICksDQogIENhYmFuZyA9IHJlcChjKCJDYWJhbmcgQSIsICJDYWJhbmcgQiIsICJDYWJhbmcgQyIsICJDYWJhbmcgRCIpLCBlYWNoID0gNSkNCikNCg0KIyBNZW1idWF0IGJveHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5DQpwbG90IDwtIHBsb3RfbHkoDQogIGRhdGEsIA0KICB5ID0gflBlbmp1YWxhbiwgDQogIHggPSB+Q2FiYW5nLCANCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gInN1c3BlY3RlZG91dGxpZXJzIiwgICMgTWVuYW1waWxrYW4gdGl0aWsgeWFuZyBkaWN1cmlnYWkgc2ViYWdhaSBvdXRsaWVycw0KICBqaXR0ZXIgPSAwLjMsICAgICAgICAgICAgICAgICAgICAgIyBNZW5hbWJhaCBwZW55ZWJhcmFuIHVudHVrIHZpc3VhbGlzYXNpIGxlYmloIGplbGFzDQogIHBvaW50cG9zID0gLTEgICAgICAgICAgICAgICAgICAgICAjIE1lbmdhdHVyIHBvc2lzaSB0aXRpaw0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlcmJhbmRpbmdhbiBQZW5qdWFsYW4gQW50YXIgQ2FiYW5nIiwNCiAgICB5YXhpcyA9IGxpc3QoDQogICAgICB0aXRsZSA9ICJQZW5qdWFsYW4gKGp1dGEgcnVwaWFoKSIsIA0KICAgICAgcmFuZ2UgPSBjKDIwLCAxMDApICAjIE1lbnllc3VhaWthbiByZW50YW5nIHN1bWJ1IFkNCiAgICApLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJDYWJhbmciKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KDQpgYGANCg0KIyMgKipNZW5nZ3VuYWthbiBJbmZvcm1hc2kgdW50dWsgTWVyZW5jYW5ha2FuIFN0cmF0ZWdpIFBlbmluZ2thdGFuIFBlbmp1YWxhbioqDQoNCjEuICoqQW5hbGlzaXMgS2VzZWx1cnVoYW46KioNCi0gKipLaW5lcmphIENhYmFuZyoqOiBCZXJkYXNhcmthbiBkYXRhIHBlbmp1YWxhbiwgKipDYWJhbmcgQyoqIG1lbmNhdGF0a2FuIGhhc2lsIHBlbmp1YWxhbiB5YW5nIGxlYmloIHJlbmRhaCBkaWJhbmRpbmdrYW4gY2FiYW5nIGxhaW5ueWEsIGRlbmdhbiBhbmdrYSB5YW5nIGN1a3VwIGtvbnNpc3RlbiBuYW11biBtYXNpaCBkaSBiYXdhaCByYXRhLXJhdGEuIFNlYmFsaWtueWEsICoqQ2FiYW5nIEQqKiBtZW51bmp1a2thbiBraW5lcmphIHlhbmcgc2FuZ2F0IGJhaWssIGRlbmdhbiBwZW5qdWFsYW4geWFuZyBzdGFiaWwgZGFuIGxlYmloIHRpbmdnaSwgbWVuamFkaWthbm55YSBzZWJhZ2FpIGNvbnRvaCB5YW5nIHBhdHV0IGRpaWt1dGkgb2xlaCBjYWJhbmcgbGFpbi4NCi0gKipWYXJpYWJpbGl0YXMgUGVuanVhbGFuKio6IENhYmFuZyAqKkMqKiBtZW1pbGlraSBkZXZpYXNpIHN0YW5kYXIgeWFuZyBrZWNpbCwgbWVuYW5kYWthbiBiYWh3YSBwZW5qdWFsYW5ueWEgbGViaWggc3RhYmlsIG1lc2tpcHVuIGJlcmFkYSBwYWRhIGxldmVsIHJlbmRhaC4gU2VtZW50YXJhIGl0dSwgKipDYWJhbmcgQioqIG1lbnVuanVra2FuIGZsdWt0dWFzaSBwZW5qdWFsYW4geWFuZyBsZWJpaCBiZXNhciwgeWFuZyBiaXNhIGphZGkgbWVuZ2luZGlrYXNpa2FuIGFkYW55YSBmYWt0b3Iga2V0aWRha3N0YWJpbGFuIHlhbmcgcGVybHUgZGlhbmFsaXNpcyBsZWJpaCBsYW5qdXQuDQoNCjIuICoqU3RyYXRlZ2kgdW50dWsgTWVuaW5na2F0a2FuIFBlbmp1YWxhbjoqKg0KLSAqKkZva3VzIHBhZGEgQ2FiYW5nIEMqKjogVW50dWsgbWVuZG9yb25nIHBlcnR1bWJ1aGFuIGRpICoqQ2FiYW5nIEMqKiwgZGFwYXQgZGlsYWt1a2FuIHVwYXlhLXVwYXlhIHNlcGVydGkgbWVtYmVyaWthbiBkaXNrb24gYXRhdSBwcm9tb3NpIGtodXN1cywgbWVtcGVya2VuYWxrYW4gdmFyaWFzaSBwcm9kdWsgYmFydSB5YW5nIGxlYmloIHNlc3VhaSBkZW5nYW4ga2VpbmdpbmFuIHBhc2FyIGxva2FsLCBzZXJ0YSBtZWxha3VrYW4gYW5hbGlzaXMga2VidXR1aGFuIHBlbGFuZ2dhbiB1bnR1ayBtZW5lbXVrYW4gcGVsdWFuZyBla3NwYW5zaSB5YW5nIGxlYmloIGJhaWsuDQotICoqQmVsYWphciBkYXJpIEtlYmVyaGFzaWxhbiBDYWJhbmcgRCoqOiBLZWJlcmhhc2lsYW4geWFuZyBkaWNhcGFpIG9sZWggKipDYWJhbmcgRCoqIGRhcGF0IGRpamFkaWthbiBhY3Vhbi4gTWlzYWxueWEsIGRlbmdhbiBtZW1wZWxhamFyaSBzdHJhdGVnaSBwZW1hc2FyYW4sIHBlbmluZ2thdGFuIGt1YWxpdGFzIHBlbGF5YW5hbiwgZGFuIHBlbWJlcmlhbiBwZWxhdGloYW4gdW50dWsgdGltIHBlbmp1YWxhbi4gSGFsIGluaSBkYXBhdCBtZW1iYW50dSBjYWJhbmcgbGFpbiB1bnR1ayBtZXJhaWggaGFzaWwgeWFuZyBsZWJpaCBiYWlrLiBTZWxhaW4gaXR1LCBtZW1iZXJpa2FuIGluc2VudGlmIGJlcmJhc2lzIGtpbmVyamEgZGFwYXQgbWVuaW5na2F0a2FuIG1vdGl2YXNpIGthcnlhd2FuIHVudHVrIG1lbmNhcGFpIHRhcmdldCB5YW5nIGxlYmloIHRpbmdnaS4NCg0KKipLZXNpbXB1bGFuOioqDQpNZWxhbHVpIHBlbWFoYW1hbiB5YW5nIGxlYmloIG1lbmRhbGFtIHRlbnRhbmcgZGF0YSBwZW5qdWFsYW4gaW5pLCBzdHJhdGVnaSB1dGFtYSBhZGFsYWggZm9rdXMgdW50dWsgbWVuaW5na2F0a2FuIGhhc2lsIGRpICoqQ2FiYW5nIEMqKiwgc2FtYmlsIG1lbXBlcnRhaGFua2FuIHBlcmZvcm1hIHRpbmdnaSB5YW5nIHRlcmNhdGF0IGRpICoqQ2FiYW5nIEQqKi4gUGVuZGVrYXRhbiBiZXJiYXNpcyBkYXRhIGluaSBkYXBhdCBtZW1iYW50dSBwZXJ1c2FoYWFuIG1lbWJ1YXQgbGFuZ2thaC1sYW5na2FoIHlhbmcgbGViaWggdGVwYXQgdW50dWsgbWVuaW5na2F0a2FuIGhhc2lsIHBlbmp1YWxhbiBzZWNhcmEga2VzZWx1cnVoYW4uDQoNCiMgTGF0aWhhbiAyDQpCZXJpa3V0IGRhdGEgeWFuZyBha2FuIGRpa2VyamFrYW4sDQoNClBlcnVzYWhhYW4gWFlaIG1lbmdlbG9sYSBwZW5naXJpbWFuIGJhcmFuZyBrZSBiZXJiYWdhaSB3aWxheWFoIGRlbmdhbiBtZW5nZ3VuYWthbiBiZXJiYWdhaSBqZW5pcyB0cmFuc3BvcnRhc2kuIFNldGlhcCBwZW5naXJpbWFuIG1lbGliYXRrYW4gYmlheWEgdHJhbnNwb3J0YXNpLCB3YWt0dSB5YW5nIGRpYnV0dWhrYW4sIGRhbiBqdW1sYWggYmFyYW5nIHlhbmcgZGlraXJpbS4gQmVyaWt1dCBhZGFsYWggZGF0YSB0ZXJrYWl0IHBlbmdpcmltYW4gYmFyYW5nIGJlcmRhc2Fya2FuIHdpbGF5YWggZGFuIGplbmlzIGJhcmFuZzoNCg0KfCBXaWxheWFoIHwgSmVuaXMgQmFyYW5nIHwgSnVtbGFoIEJhcmFuZyAodW5pdCkgfCBXYWt0dSBQZW5naXJpbWFuIChqYW0pIHwgQmlheWEgcGVyIFVuaXQgKFJwKSB8DQp8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IFV0YXJhIHwgRWxla3Ryb25payB8IDIwMCB8IDUgfCAxNTAwMCB8DQp8IFNlbGF0YW4gfCBQYWthaWFuIHwgMTUwIHwgOCB8IDgwMDAgfA0KfCBUaW11ciB8IE1ha2FuYW4gfCAxODAgfCA2IHwgMTAwMDAgfA0KfCBCYXJhdCB8IFBlcmFsYXRhbiB8IDEyMCB8IDcgfCAxMjAwMCB8DQp8IFRlbmdhaCB8IEVsZWt0cm9uaWsgfCAyNTAgfCA0IHwgMTQwMDAgfA0KfCBVdGFyYSB8IFBha2FpYW4gfCAzMDAgfCA5IHwgODUwMCB8DQp8IFNlbGF0YW4gfCBNYWthbmFuIHwgMjIwIHwgNyB8IDk1MDAgfA0KfCBUaW11ciB8IFBlcmFsYXRhbiB8IDE0MCB8IDUgfCAxMTAwMCB8DQp8IEJhcmF0IHwgRWxla3Ryb25payB8IDE4MCB8IDYgfCAxNDUwMCB8DQp8IFRlbmdhaCB8IFBha2FpYW4gfCAzNTAgfCA4IHwgNzgwMCB8DQp8IFV0YXJhIHwgUGVyYWxhdGFuIHwgMTcwIHwgNCB8MTIwMDAgfA0KfCBTZWxhdGFuIHwgRWxla3Ryb25payB8IDI1MCB8IDYgfCAxNjAwMCB8DQp8IFRpbXVyIHwgUGFrYWlhbiB8IDE5MCB8IDcgfCA4MjAwIHwNCnwgQmFyYXQgfCBNYWthbmFuIHwgMTMwIHwgNSB8IDEwNTAwIHwNCnwgVGVuZ2FoIHwgUGVyYWxhdGFuIHwgMTgwIHwgNSB8IDExNTAwIHwNCg0KIyMgKipBbmFsaXNpcyBFZmlzaWVuc2kgUGVuZ2lyaW1hbioqDQoNCioqMS4gVmlzdWFsaXNhc2kgUGxvdCAzRCoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIFdpbGF5YWggPSBjKCJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIsICJVdGFyYSIsICJTZWxhdGFuIiwgDQogICAgICAgICAgICAgICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLA0KICAgICAgICAgICAgICAgICAgICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsDQogICAgICAgICAgICAgICAgICAgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCAiTWFrYW5hbiIsICJQZXJhbGF0YW4iKSwNCiAgSnVtbGFoX0JhcmFuZyA9IGMoMjAwLCAxNTAsIDE4MCwgMTIwLCAyNTAsIDMwMCwgMjIwLCAxNDAsIDE4MCwgMzUwLCAxNzAsIDI1MCwgMTkwLCAxMzAsIDE4MCksDQogIFdha3R1X1BlbmdpcmltYW4gPSBjKDUsIDgsIDYsIDcsIDQsIDksIDcsIDUsIDYsIDgsIDQsIDYsIDcsIDUsIDUpLA0KICBCaWF5YV9wZXJfVW5pdCA9IGMoMTUwMDAsIDgwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsIDg1MDAsIDk1MDAsIDExMDAwLCANCiAgICAgICAgICAgICAgICAgICAgIDE0NTAwLCA3ODAwLCAxMjAwMCwgMTYwMDAsIDgyMDAsIDEwNTAwLCAxMTUwMCkNCikNCg0KIyBUYW1iYWhrYW4ga29sb20gZWZpc2llbnNpDQpkYXRhJEVmaXNpZW5zaSA8LSBkYXRhJEJpYXlhX3Blcl9Vbml0IC8gZGF0YSRXYWt0dV9QZW5naXJpbWFuDQoNCiMgUGxvdCAzRA0KcGxvdF9seSgNCiAgZGF0YSA9IGRhdGEsIA0KICB4ID0gfkp1bWxhaF9CYXJhbmcsIA0KICB5ID0gfldha3R1X1BlbmdpcmltYW4sIA0KICB6ID0gfkJpYXlhX3Blcl9Vbml0LCANCiAgY29sb3IgPSB+RWZpc2llbnNpLCANCiAgY29sb3JzID0gIlJkWWxHbiIsDQogIHR5cGUgPSAic2NhdHRlcjNkIiwgDQogIG1vZGUgPSAibWFya2VycyINCikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSBQZW5naXJpbWFuIEJhcmFuZyIsDQogICAgc2NlbmUgPSBsaXN0KA0KICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkp1bWxhaCBCYXJhbmciKSwNCiAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJXYWt0dSBQZW5naXJpbWFuIiksDQogICAgICB6YXhpcyA9IGxpc3QodGl0bGUgPSAiQmlheWEgcGVyIFVuaXQiKQ0KICAgICkNCiAgKQ0KDQpgYGANCg0KRGF0YSBkaSBhdGFzIG1lbXVhdCBpbmZvcm1hc2kgdGVudGFuZyBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiB3aWxheWFoLCBqZW5pcyBiYXJhbmcsIGp1bWxhaCBiYXJhbmcsIHdha3R1IHBlbmdpcmltYW4sIGRhbiBiaWF5YSBwZXIgdW5pdC4gS29sb20gdGFtYmFoYW4sICoqRWZpc2llbnNpKiosIGRpaGl0dW5nIHNlYmFnYWkgcmFzaW8gYW50YXJhIGJpYXlhIHBlciB1bml0IGRlbmdhbiB3YWt0dSBwZW5naXJpbWFuIHVudHVrIG1lbmlsYWkgYmlheWEgcmVsYXRpZiB0ZXJoYWRhcCBrZWNlcGF0YW4gcGVuZ2lyaW1hbi4NCg0KKipQZW5qZWxhc2FuOioqDQoNCi0gKipKdW1sYWggQmFyYW5nOioqIFdpbGF5YWggZGVuZ2FuIHBlbmdpcmltYW4gdGVyYmVzYXIgYWRhbGFoIFRlbmdhaCAoaGluZ2dhIDM1MCBiYXJhbmcpLg0KLSAqKldha3R1IFBlbmdpcmltYW46KiogUmF0YS1yYXRhIHdha3R1IHBlbmdpcmltYW4gYmVya2lzYXIgYW50YXJhIDQgaGluZ2dhIDkgaGFyaS4NCi0gKipCaWF5YSBwZXIgVW5pdDoqKiBCYXJhbmcgZWxla3Ryb25payBtZW1pbGlraSBiaWF5YSBwZXIgdW5pdCB0ZXJ0aW5nZ2kgKGhpbmdnYSAxNi4wMDAgcnVwaWFoKSwgc2VkYW5na2FuIHBha2FpYW4gbWVtaWxpa2kgYmlheWEgdGVyZW5kYWguDQotICoqRWZpc2llbnNpOioqIEJhcmFuZyBkZW5nYW4gZWZpc2llbnNpIHRlcnRpbmdnaSBtZW1pbGlraSByYXNpbyBiaWF5YSB5YW5nIHJlbmRhaCB0ZXJoYWRhcCB3YWt0dSBwZW5naXJpbWFuIChsZWJpaCBjZXBhdCBkZW5nYW4gYmlheWEgbXVyYWgpLCBkaXRhbmRhaSBvbGVoIHdhcm5hIGhpamF1IHBhZGEgZ3JhZmlrLg0KDQpWaXN1YWxpc2FzaSAzRCBtZW51bmp1a2thbiBodWJ1bmdhbiBhbnRhcmEganVtbGFoIGJhcmFuZywgd2FrdHUgcGVuZ2lyaW1hbiwgZGFuIGJpYXlhIHBlciB1bml0LCBkZW5nYW4gZWZpc2llbnNpIGRpd2FraWxpIG9sZWggZ3JhZGFzaSB3YXJuYSBoaWphdSAoZWZpc2llbnNpIHRpbmdnaSkga2UgbWVyYWggKGVmaXNpZW5zaSByZW5kYWgpLiBIYWwgaW5pIG1lbWJhbnR1IG1lbmdpZGVudGlmaWthc2kgd2lsYXlhaCBhdGF1IGplbmlzIGJhcmFuZyB5YW5nIG1lbWJ1dHVoa2FuIG9wdGltYWxpc2FzaS4NCg0KKioyLiBXaWxheWFoIHlhbmcgTWVtaWxpa2kgRWZpc2llbnNpIFBlbmdpcmltYW4gVGVyZW5kYWggQmVyZGFzYXJrYW4gQmlheWEgcGVyIFVuaXQgZGFuIFdha3R1IFBlbmdpcmltYW4uKioNCg0KRWZpc2llbnNpIHBlbmdpcmltYW4gZGloaXR1bmcgc2ViYWdhaSByYXNpbyAqKkJpYXlhIHBlciBVbml0KiogdGVyaGFkYXAgKipXYWt0dSBQZW5naXJpbWFuKio6DQoNClxbDQpFZmlzaWVuc2kgPSBcZnJhY3tcdGV4dHtCaWF5YSBwZXIgVW5pdH19e1x0ZXh0e1dha3R1IFBlbmdpcmltYW59fQ0KXF0NCg0KTWFyaSBraXRhIGhpdHVuZyBlZmlzaWVuc2kgdW50dWsgc2V0aWFwIHdpbGF5YWggYmVyZGFzYXJrYW4gZGF0YToNCg0KfCAqKldpbGF5YWgqKiB8ICoqQmlheWEgcGVyIFVuaXQgKFJwKSoqIHwgKipXYWt0dSBQZW5naXJpbWFuIChqYW0pKiogfCAqKkVmaXNpZW5zaSAoUnAvamFtKSoqIHwNCnwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgVXRhcmEgICAgICAgfCAxNTAwMCAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzAwMCAgICAgICAgICAgICAgICAgICB8DQp8IFNlbGF0YW4gICAgIHwgODAwMCAgICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwMDAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDEwMDAwICAgICAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNjY2LjY3ICAgICAgICAgICAgICAgIHwNCnwgQmFyYXQgICAgICAgfCAxMjAwMCAgICAgICAgICAgICAgICAgICB8IDcgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcxNC4yOSAgICAgICAgICAgICAgICB8DQp8IFRlbmdhaCAgICAgIHwgMTQwMDAgICAgICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDM1MDAgICAgICAgICAgICAgICAgICAgfA0KfCBVdGFyYSAgICAgICB8IDg1MDAgICAgICAgICAgICAgICAgICAgIHwgOSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5NDQuNDQgICAgICAgICAgICAgICAgIHwNCnwgU2VsYXRhbiAgICAgfCA5NTAwICAgICAgICAgICAgICAgICAgICB8IDcgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTM1Ny4xNCAgICAgICAgICAgICAgICB8DQp8IFRpbXVyICAgICAgIHwgMTEwMDAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyMDAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IDE0NTAwICAgICAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNDE2LjY3ICAgICAgICAgICAgICAgIHwNCnwgVGVuZ2FoICAgICAgfCA3ODAwICAgICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICAgICAgICAgICAgIHwgOTc1ICAgICAgICAgICAgICAgICAgICB8DQp8IFV0YXJhICAgICAgIHwgMTIwMDAgICAgICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMwMDAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IDE2MDAwICAgICAgICAgICAgICAgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNjY2LjY3ICAgICAgICAgICAgICAgIHwNCnwgVGltdXIgICAgICAgfCA4MjAwICAgICAgICAgICAgICAgICAgICB8IDcgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTE3MS40MyAgICAgICAgICAgICAgICB8DQp8IEJhcmF0ICAgICAgIHwgMTA1MDAgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIxMDAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDExNTAwICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMzAwICAgICAgICAgICAgICAgICAgIHwNCg0KKipXaWxheWFoIGRlbmdhbiBlZmlzaWVuc2kgdGVyZW5kYWg6KiogIA0KV2lsYXlhaCAqKlRlbmdhaCoqIChiYXJhbmcgKipQYWthaWFuKiopIG1lbWlsaWtpIGVmaXNpZW5zaSB0ZXJlbmRhaCBzZWJlc2FyICoqOTc1IFJwL2phbSoqLCB5YW5nIGJlcmFydGkgYmlheWEgcGVyIHVuaXQgcmVsYXRpZiB0aW5nZ2kgZGliYW5kaW5na2FuIHdha3R1IHBlbmdpcmltYW4uIA0KDQojIyAqKlJla29tZW5kYXNpIE9wZXJhc2lvbmFsKioNCg0KQmVyZGFzYXJrYW4gYW5hbGlzaXMsIHdpbGF5YWggKipUZW5nYWgqKiBtZW5qYWRpIGZva3VzIHV0YW1hIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiwgdGVydXRhbWEgdW50dWsga2F0ZWdvcmkgYmFyYW5nICoqUGFrYWlhbioqLiANCg0KKipBbGFzYW46KiogIA0KDQotIFBlbmdpcmltYW4gcGFrYWlhbiBkaSB3aWxheWFoIGluaSBtZW1pbGlraSB0aW5na2F0IGVmaXNpZW5zaSB0ZXJlbmRhaCwgeWFpdHUgKio5NzUgUnAvamFtKiosIGRpYmFuZGluZ2thbiBrb21iaW5hc2kgd2lsYXlhaCBkYW4gamVuaXMgYmFyYW5nIGxhaW5ueWEuICANCi0gVGluZ2dpbnlhIGJpYXlhIHBlciB1bml0IHlhbmcgdGlkYWsgc2ViYW5kaW5nIGRlbmdhbiB3YWt0dSBwZW5naXJpbWFuIG1lbmphZGlrYW4gd2lsYXlhaCBpbmkgbWVtZXJsdWthbiBwZXJiYWlrYW4gZGFsYW0gcHJvc2VzIGxvZ2lzdGlrLg0KDQoqKlJla29tZW5kYXNpIHVudHVrIE1lbmluZ2thdGthbiBFZmlzaWVuc2k6KiogIA0KDQotICoqRXZhbHVhc2kgQmlheWEgTG9naXN0aWs6KiogVGluamF1IHVsYW5nIHRhcmlmIHBlbnllZGlhIGxvZ2lzdGlrIHVudHVrIG1lbWFzdGlrYW4gaGFyZ2EgeWFuZyBsZWJpaCB0ZXJqYW5na2F1IHRhbnBhIG1lbmd1cmFuZ2kga3VhbGl0YXMgbGF5YW5hbi4gIA0KLSAqKlBlcmJhaWthbiBSdXRlIFBlbmdpcmltYW46KiogQ2FyaSBqYWx1ciB5YW5nIGxlYmloIGVmaXNpZW4gdW50dWsgbWVtYW5na2FzIHdha3R1IHBlbmdpcmltYW4gdGFucGEgbWVuaW5na2F0a2FuIHBlbmdlbHVhcmFuLiAgDQotICoqT3B0aW1hc2kgS2FwYXNpdGFzIFBlbmdpcmltYW46KiogTWFrc2ltYWxrYW4gcGVuZ2d1bmFhbiBrYXBhc2l0YXMga2VuZGFyYWFuIGFnYXIgYmlheWEgcGVyIHVuaXQgbWVuamFkaSBsZWJpaCByZW5kYWguICANCg0KIyMgKipLaW5lcmphIEJlcmRhc2Fya2FuIEplbmlzIEJhcmFuZyoqDQoNCkJlcmlrdXQgYWRhbGFoIGFuYWxpc2lzIGtpbmVyamEgcGVuZ2lyaW1hbiBiZXJkYXNhcmthbiBqZW5pcyBiYXJhbmcgZGFuIHdpbGF5YWggdW50dWsgbWVuZW50dWthbiBrYXRlZ29yaSBkZW5nYW4gd2FrdHUgcGVuZ2lyaW1hbiBsZWJpaCBjZXBhdCBkYW4gYmlheWEgcGVyIHVuaXQgbGViaWggcmVuZGFoOg0KDQoqKjEuIFdha3R1IFBlbmdpcmltYW4gVGVyY2VwYXQqKg0KLSAqKkplbmlzIEJhcmFuZzoqKiBFbGVrdHJvbmlrDQotICoqV2lsYXlhaDoqKiBUZW5nYWggIA0KICAtICoqV2FrdHUgUGVuZ2lyaW1hbjoqKiA0IGphbSAgDQogIC0gQmFyYW5nIGVsZWt0cm9uaWsgY2VuZGVydW5nIGRpa2lyaW0gZGVuZ2FuIHdha3R1IGxlYmloIGNlcGF0IGRpYmFuZGluZyBqZW5pcyBiYXJhbmcgbGFpbiwgdGVydXRhbWEgZGkgd2lsYXlhaCBUZW5nYWguDQoNCg0KKioyLiBCaWF5YSBwZXIgVW5pdCBUZXJlbmRhaCoqDQotICoqSmVuaXMgQmFyYW5nOioqIFBha2FpYW4gIA0KLSAqKldpbGF5YWg6KiogVGVuZ2FoICANCiAgLSAqKkJpYXlhIHBlciBVbml0OioqIFJwIDcsODAwICANCiAgLSBNZXNraXB1biBwYWthaWFuIG1lbWlsaWtpIGJpYXlhIHBlciB1bml0IHRlcmVuZGFoIGRpIHdpbGF5YWggaW5pLCBlZmlzaWVuc2lueWEgcmVuZGFoIGthcmVuYSB3YWt0dSBwZW5naXJpbWFuIHlhbmcgcmVsYXRpZiBsYW1hICg4IGphbSkuDQoNCg0KKipLaW5lcmphIFNlY2FyYSBVbXVtKioNCg0KLSAqKlBlbmdpcmltYW4gUGFsaW5nIEVmaXNpZW46KiogRWxla3Ryb25payBkaSB3aWxheWFoIFRlbmdhaCAoRWZpc2llbnNpOiAzNTAwIFJwL2phbSkuICANCiANCiAgLSBLb21iaW5hc2kgYmlheWEgeWFuZyBjdWt1cCByZW5kYWggZGFuIHdha3R1IHBlbmdpcmltYW4geWFuZyBjZXBhdCBtZW5qYWRpa2FuIGthdGVnb3JpIGluaSBwYWxpbmcgZWZpc2llbi4NCg0KLSAqKlBlbmdpcmltYW4gS3VyYW5nIEVmaXNpZW46KiogUGFrYWlhbiBkaSB3aWxheWFoIFRlbmdhaCAoRWZpc2llbnNpOiA5NzUgUnAvamFtKS4gIA0KDQogIC0gQmlheWEgcmVuZGFoIHRpZGFrIGN1a3VwIG1lbnV0dXBpIHdha3R1IHBlbmdpcmltYW4geWFuZyBsYW1hLCBzZWhpbmdnYSBlZmlzaWVuc2lueWEgbWVuamFkaSB5YW5nIHRlcmVuZGFoLg0KDQoNCioqS2VzaW1wdWxhbioqDQotIEJhcmFuZyAqKmVsZWt0cm9uaWsgZGkgd2lsYXlhaCBUZW5nYWgqKiBtZW1pbGlraSBraW5lcmphIHRlcmJhaWsgZGVuZ2FuIHdha3R1IHBlbmdpcmltYW4gdGVyY2VwYXQgZGFuIGJpYXlhIHlhbmcgY3VrdXAga29tcGV0aXRpZi4NCi0gQmFyYW5nICoqcGFrYWlhbiBkaSB3aWxheWFoIFRlbmdhaCoqIG1lbWVybHVrYW4gcGVyaGF0aWFuIGxlYmloIHVudHVrIG1lbmd1cmFuZ2kgd2FrdHUgcGVuZ2lyaW1hbiB0YW5wYSBtZW5pbmdrYXRrYW4gYmlheWEuDQoNCiMgUmVmZXJlbnNpDQpodHRwczovL2NsYXNzcm9vbS5nb29nbGUuY29tL2MvTVRNNE5qazBNVEV6T0RJMS9hL056TTROems1TURVMU9ESTEvZGV0YWlscw0K