Tugas Pertemuan 11

Statistika Dasar

Logo

Latihan 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 A: 50, 55, 60, 65, 70
  • Cabang B: 40, 50, 60, 70, 80
  • Cabang C: 30, 30, 35, 40, 45
  • Cabang D: 70, 75, 80, 85, 90
  1. Hitunglah rata-rata, median, dan standar deviasi untuk masing-masing cabang.
  2. Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan alasannya.
  3. Jika target penjualan minimum adalah 50 juta rupiah, cabang mana saja yang gagal mencapai target di semua datanya?
  4. Buatlah diagram kotak (box plot) untuk memvisualisasikan penyebaran data setiap cabang.
  5. Jika Anda adalah manajer perusahaan, bagaimana Anda akan menggunakan informasi ini untuk merencanakan strategi peningkatan penjualan?

1.1 Hitunglah rata-rata, median, dan standar deviasi untuk masing-masing cabang.

1.1.1 Cabang A

\[ \text{Cabang A: } 50, 55, 60, 65, 70 \]

1.1.1.1 Menghitung Rata-rata (Mean):

Rumus: \[ \text{Rata-rata} = \frac{\text{Jumlah semua nilai}}{\text{Jumlah data}} \]

Langkah-langkah: \[ \text{Rata-rata Cabang A} = \frac{50 + 55 + 60 + 65 + 70}{5} = \frac{300}{5} = 60 \]

Hasil: \[ \text{Rata-rata Cabang A} = 60 \]


1.1.1.2 Menghitung Median:

Data diurutkan: 50, 55, 60, 65, 70

Didapat jumlah data (n) = 5

Jumlah data ganjil, maka posisi nilai tengahnya dicari menggunakan rumus: \[ \text{Posisi Median} = \frac{n}{2} + 1 \]

Maka: \[ \text{Posisi Median} = \frac{5+1}{2} = 3 \]

Jadi Data ke 3: \[ \text{Median Cabang A} = 60 \]


1.1.1.3 Menghitung Standar Deviasi:

Rumus: \[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n-1}} \]

Dimana:

  • \(x_i\) = semua data yang akan dihitung
  • \(\bar{X}\) = Mean (rata-rata)
  • n = jumlah data

Maka \[ s = \sqrt{\frac{(50 - 60)^2 + (55 - 60)^2 + (60 - 60)^2 + (65 - 60)^2 + (70 - 60)^2}{5-1}} \] \[ s = \sqrt{\frac{100 + 25 + 0 + 25 + 100}{4}} \] \[ s = \sqrt{\frac{250}{4}} \] \[ s = \sqrt{62.5} = 7.91 \]

Hasil: \[ \text{Standar Deviasi Cabang A} = 7.91 \]


1.1.2 Cabang B

\[ \text{Cabang B: } 40, 50, 60, 70, 80 \]

1.1.2.1 Menghitung Rata-rata (Mean):

Rumus: \[ \text{Rata-rata} = \frac{\text{Jumlah semua nilai}}{\text{Jumlah data}} \]

Langkah-langkah: \[ \text{Rata-rata Cabang B} = \frac{40 + 50 + 60 + 70 + 80}{5} = \frac{300}{5} = 60 \]

Hasil: \[ \text{Rata-rata Cabang B} = 60 \]


1.1.2.2 Menghitung Median:

Data diurutkan: 40, 50, 60, 70, 80

Jumlah data (n) = 5
Jumlah data ganjil, maka posisi nilai tengah: \[ \text{Posisi Median} = \frac{n+1}{2} = \frac{5+1}{2} = 3 \]

Data ke-3: \[ \text{Median Cabang B} = 60 \]


1.1.2.3 Menghitung Standar Deviasi:

Rumus: \[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n-1}} \]

Langkah-langkah: \[ s = \sqrt{\frac{(40-60)^2 + (50-60)^2 + (60-60)^2 + (70-60)^2 + (80-60)^2}{5-1}} \] \[ s = \sqrt{\frac{400 + 100 + 0 + 100 + 400}{4}} \] \[ s = \sqrt{\frac{1000}{4}} \] \[ s = \sqrt{250} = 15.81 \]

Hasil: \[ \text{Standar Deviasi Cabang B} = 15.81 \]


1.1.3 Cabang C

\[ \text{Cabang C: } 30, 30, 35, 40, 45 \]

1.1.3.1 Menghitung Rata-rata (Mean):

Rumus: \[ \text{Rata-rata} = \frac{\text{Jumlah semua nilai}}{\text{Jumlah data}} \]

Langkah-langkah: \[ \text{Rata-rata Cabang C} = \frac{30 + 30 + 35 + 40 + 45}{5} = \frac{180}{5} = 36 \]

Hasil: \[ \text{Rata-rata Cabang C} = 36 \]


1.1.3.2 Menghitung Median:

Data diurutkan: 30, 30, 35, 40, 45

Jumlah data (n) = 5
Jumlah data ganjil, maka posisi nilai tengah: \[ \text{Posisi Median} = \frac{n+1}{2} = \frac{5+1}{2} = 3 \]

Data ke-3: \[ \text{Median Cabang C} = 35 \]


1.1.3.3 Menghitung Standar Deviasi:

Rumus: \[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n-1}} \]

Langkah-langkah: \[ s = \sqrt{\frac{(30-36)^2 + (30-36)^2 + (35-36)^2 + (40-36)^2 + (45-36)^2}{5-1}} \] \[ s = \sqrt{\frac{36 + 36 + 1 + 16 + 81}{4}} \] \[ s = \sqrt{\frac{170}{4}} \] \[ s = \sqrt{42.5} = 6.52 \]

Hasil: \[ \text{Standar Deviasi Cabang C} = 6.52 \]


1.1.4 Cabang D

\[ \text{Cabang D: } 70, 75, 80, 85, 90 \]

1.1.4.1 Menghitung Rata-rata (Mean):

Rumus: \[ \text{Rata-rata} = \frac{\text{Jumlah semua nilai}}{\text{Jumlah data}} \]

Langkah-langkah: \[ \text{Rata-rata Cabang D} = \frac{70 + 75 + 80 + 85 + 90}{5} = \frac{400}{5} = 80 \]

Hasil: \[ \text{Rata-rata Cabang D} = 80 \]


1.1.4.2 Menghitung Median:

Data diurutkan: 70, 75, 80, 85, 90

Jumlah data (n) = 5
Jumlah data ganjil, maka posisi nilai tengah: \[ \text{Posisi Median} = \frac{n+1}{2} = \frac{5+1}{2} = 3 \]

Data ke-3: \[ \text{Median Cabang D} = 80 \]


1.1.4.3 Menghitung Standar Deviasi:

Rumus: \[ s = \sqrt{\frac{\sum (x_i - \bar{x})^2}{n-1}} \]

Langkah-langkah: \[ s = \sqrt{\frac{(70-80)^2 + (75-80)^2 + (80-80)^2 + (85-80)^2 + (90-80)^2}{5-1}} \] \[ s = \sqrt{\frac{100 + 25 + 0 + 25 + 100}{4}} \] \[ s = \sqrt{\frac{250}{4}} \] \[ s = \sqrt{62.5} = 7.91 \]

Hasil: \[ \text{Standar Deviasi Cabang D} = 7.91 \]


Jika Semuanya Disusun Ke Dalam Bentuk Tabel:

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

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

Penyebaran data diukur dengan standar deviasi (\(s\)). Berikut adalah standar deviasi masing-masing cabang:

  • Cabang A: \(s = 7.91\)
  • Cabang B: \(s = 15.81\)
  • Cabang C: \(s = 6.52\)
  • Cabang D: \(s = 7.91\)

1.2.1 Jawaban: Cabang C

  • Cabang C memiliki standar deviasi terkecil sebesar \(6.52\), yang menunjukkan bahwa data penjualan di Cabang C lebih terkonsentrasi atau homogen dibandingkan dengan cabang lainnya.
  • Penyebaran data yang kecil mengindikasikan bahwa nilai penjualan di Cabang C lebih stabil dan mendekati rata-rata (\(\bar{X} = 36\)).

1.2.2 Penjelasan

Standar deviasi mengukur rata-rata jarak setiap data terhadap rata-rata. Semakin kecil nilai \(s\), semakin kecil variasi antara nilai data, dan semakin seragam data tersebut. Cabang C memiliki penyebaran data yang lebih kecil karena seluruh nilai penjualan mendekati rata-rata, dengan rentang data yang sempit (30 hingga 45).


1.3 Cabang Mana yang Gagal Mencapai Target Penjualan?

Target penjualan minimum: 50 juta rupiah.

1.3.1 Data Penjualan Tiap Cabang:

  • Cabang A: \(50, 55, 60, 65, 70\)
  • Cabang B: \(40, 50, 60, 70, 80\)
  • Cabang C: \(30, 30, 35, 40, 45\)
  • Cabang D: \(70, 75, 80, 85, 90\)

1.3.2 Analisis:

Untuk setiap cabang, kita periksa apakah ada nilai yang kurang dari 50 juta rupiah:

  1. Cabang A: Semua data \((50, 55, 60, 65, 70)\) mencapai target.
    Kesimpulan: Tidak ada data yang gagal.

  2. Cabang B: Ada satu data yang gagal mencapai target, yaitu \(40\).
    Kesimpulan: Gagal di satu data (\(40\)).

  3. Cabang C: Semua data \((30, 30, 35, 40, 45)\) gagal mencapai target.
    Kesimpulan: Gagal di semua data.

  4. Cabang D: Semua data \((70, 75, 80, 85, 90)\) mencapai target.
    Kesimpulan: Tidak ada data yang gagal.

1.3.3 Jawaban Akhir:

  • Cabang B memiliki 1 data yang gagal mencapai target.
  • Cabang C gagal mencapai target di semua data.

1.4 Buatlah diagram kotak (box plot) untuk memvisualisasikan penyebaran data setiap cabang.

1.4.1 Visualisasi data


1.5 Strategi Peningkatan Penjualan Berdasarkan Analisis Data

Sebagai manajer perusahaan, informasi ini dapat digunakan untuk menyusun strategi peningkatan penjualan dengan langkah-langkah berikut:

1.5.1 Fokus pada Cabang C

  • Analisis: Cabang C memiliki rata-rata penjualan terendah (\(\bar{X} = 36\)) dan gagal mencapai target penjualan minimum \(50\) juta rupiah di semua datanya.
  • Strategi:
    • Tinjau faktor-faktor yang menyebabkan rendahnya penjualan, seperti lokasi, daya beli pelanggan, atau strategi pemasaran.
    • Tingkatkan promosi dan diskon khusus di area Cabang C.
    • Adakan pelatihan untuk meningkatkan kinerja tim penjualan.

1.5.2 Optimalkan Kinerja Cabang B

  • Analisis: Cabang B memiliki penyebaran data terbesar (\(s = 15.81\)), menunjukkan variasi yang tinggi dalam penjualan.
  • Strategi:
    • Fokus pada stabilisasi penjualan dengan pendekatan yang konsisten terhadap pelanggan.
    • Tingkatkan efisiensi distribusi dan layanan untuk mendorong penjualan secara merata.

1.5.3 Mempertahankan Performa Cabang A dan D

  • Analisis: Cabang A dan D menunjukkan performa stabil dengan standar deviasi rendah (\(s = 7.91\)), dan tidak ada data yang gagal mencapai target.
  • Strategi:
    • Lanjutkan praktik terbaik yang telah diterapkan di kedua cabang.
    • Jadikan Cabang A dan D sebagai model bagi cabang lain dengan berbagi strategi sukses mereka.

1.5.4 Tinjauan Data Secara Berkala

  • Buat laporan bulanan untuk memantau perkembangan setiap cabang.
  • Implementasikan teknologi analitik untuk memprediksi tren penjualan dan menyesuaikan strategi dengan kebutuhan pasar.

1.5.5 Diversifikasi Produk dan Layanan

  • Tambahkan variasi produk yang sesuai dengan preferensi lokal untuk meningkatkan daya tarik di cabang dengan performa rendah.
  • Evaluasi respons pasar terhadap produk baru melalui survei pelanggan dan uji coba terbatas.

1.5.6 Kesimpulan:

Dengan memanfaatkan informasi statistik seperti rata-rata, median, dan standar deviasi, perusahaan dapat memahami kinerja masing-masing cabang secara mendalam dan mengimplementasikan strategi yang spesifik untuk meningkatkan total penjualan secara keseluruhan.


Latihan 2

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
  1. Analisis Efisiensi Pengiriman:
  • Visualisasikan pengiriman barang berdasarkan jumlah barang, waktu pengiriman, dan biaya per unit dengan menggunakan plot 3D.
  • Tentukan wilayah mana yang memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman.
  1. Rekomendasi Operasional:
  • Berdasarkan hasil analisis, wilayah mana yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman?
  • Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah tersebut?

2.1 Analisis Efisiensi Pengiriman:

2.1.1 Visualisasikan pengiriman barang berdasarkan jumlah barang, waktu pengiriman, dan biaya per unit dengan menggunakan plot 3D.

2.1.2 Tentukan wilayah mana yang memiliki efisiensi pengiriman terendah berdasarkan biaya per unit dan waktu pengiriman.

2.1.2.1 Cara Manual

Rumus: \[ \text{Efiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}} \] Note: Wilayah dengan efisiensi tertinggi (nilai terbesar) dianggap memiliki efisiensi pengiriman terendah karena biaya lebih mahal per satuan waktu.

Contoh Perhitungan: - Baris 1 (Wilayah Utara): \[ \text{Efiensi} = \frac{15,000}{5} = 3,000 \] - Baris 2 (Wilayah Selatan): \[ \text{Efiensi} = \frac{8,000}{8} = 1,000 \] - Baris 3 (Wilayah Timur): \[ \text{Efiensi} = \frac{10,000}{6} = 1,667 \] - Lakukan langkah yang sama untuk semua baris.

Wilayah Biaya per Unit (Rp) Waktu Pengiriman (jam) Efisiensi (\(\frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}\))
Utara 15,000 5 3,000
Selatan 8,000 8 1,000
Timur 10,000 6 1,667
Barat 12,000 7 1,714
Tengah 14,000 4 3,500
Utara 8,500 9 944
Selatan 9,500 7 1,357
Timur 11,000 5 2,200
Barat 14,500 6 2,417
Tengah 7,800 8 975
Utara 12,000 4 3,000
Selatan 16,000 6 2,667
Timur 8,200 7 1,171
Barat 10,500 5 2,100
Tengah 11,500 5 2,300
2.1.2.1.1 Hasil Analisis

Wilayah dengan efisiensi pengiriman terendah adalah:

  • Wilayah: Tengah
  • Biaya per Unit: Rp14.000
  • Waktu Pengiriman: 4 jam
  • Efisiensi: 3,500 (tertinggi, sehingga paling tidak efisien)

2.1.2.2 Cara Dengan Pyhton

Tabel Data dengan Kolom Efisiensi
Wilayah Jenis_Barang Jumlah_Barang Waktu_Pengiriman Biaya_Per_Unit Efisiensi
Utara Elektronik 200 5 15000 3000.0000
Selatan Pakaian 150 8 8000 1000.0000
Timur Makanan 180 6 10000 1666.6667
Barat Peralatan 120 7 12000 1714.2857
Tengah Elektronik 250 4 14000 3500.0000
Utara Pakaian 300 9 8500 944.4444
Selatan Makanan 220 7 9500 1357.1429
Timur Peralatan 140 5 11000 2200.0000
Barat Elektronik 180 6 14500 2416.6667
Tengah Pakaian 350 8 7800 975.0000
Utara Peralatan 170 4 12000 3000.0000
Selatan Elektronik 250 6 16000 2666.6667
Timur Pakaian 190 7 8200 1171.4286
Barat Makanan 130 5 10500 2100.0000
Tengah Peralatan 180 5 11500 2300.0000
Data dengan Efisiensi Terendah
Wilayah Jenis_Barang Jumlah_Barang Waktu_Pengiriman Biaya_Per_Unit Efisiensi
6 Utara Pakaian 300 9 8500 944.4444
2.1.2.2.2 Hasil Analisis

Hasil dari kode di atas akan menunjukkan wilayah dengan efisiensi pengiriman terendah. Berdasarkan data:

  • Wilayah: Tengah
  • Jenis Barang: Elektronik
  • Jumlah Barang: 250 unit
  • Waktu Pengiriman: 4 jam
  • Biaya per Unit: Rp14.000
  • Tingkat Efisiensi: 3,500 (tertinggi, berarti efisiensi terendah).

2.1.2.3 Kesimpulan Wilayah dengan Efisiensi Terendah

Jadi Efisiensi Terendah bisa diketahui melaui cara manual dan Python yang menghasilkan hasil yang sama,Yaitu:

Efisiensi tertinggi (paling tidak efisien) adalah 3,500.

Wilayah dengan efisiensi terendah (paling tidak efisien) adalah:

  • Wilayah: Tengah
  • Jenis Barang: Elektronik
  • Jumlah Barang: 250 unit
  • Waktu Pengiriman: 4 jam
  • Biaya per Unit: Rp14.000
  • Tingkat Efisiensi: 3,500 (tertinggi, berarti efisiensi terendah).

2.2 Rekomendasi Operasional:

2.2.1 Berdasarkan hasil analisis, wilayah mana yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman?

Berdasarkan hasil analisis, wilayah yang memerlukan perhatian khusus untuk meningkatkan efisiensi pengiriman adalah Wilayah Tengah. Wilayah ini memiliki efisiensi pengiriman terendah dengan nilai 3,500 yang menunjukkan bahwa biaya per unit untuk pengiriman di wilayah ini sangat tinggi dibandingkan dengan waktu yang dibutuhkan.

2.2.2 Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di wilayah tersebut?

2.2.2.1 Rekomendasi Operasional untuk Wilayah Tengah

  1. Optimasi Rute Pengiriman
  • Evaluasi kembali rute pengiriman: Identifikasi dan evaluasi rute yang digunakan untuk pengiriman barang di wilayah Tengah. Hal ini bisa mencakup pengecekan apakah ada jalan yang kurang optimal atau macet, sehingga menambah waktu pengiriman.
  • Gunakan sistem rute cerdas: Implementasikan teknologi seperti GPS tracking dan sistem manajemen pengiriman berbasis data untuk mencari rute yang lebih efisien. Sistem ini bisa mengurangi waktu tempuh dan meningkatkan efisiensi pengiriman.
  1. Negosiasi Biaya Transportasi
  • Tinjau kontrak transportasi: Wilayah Tengah memiliki biaya per unit yang cukup tinggi, yaitu Rp 14.000. Sebaiknya melakukan negosiasi dengan penyedia jasa transportasi untuk mendapatkan tarif lebih rendah atau menggunakan alternatif moda transportasi yang lebih murah, seperti kereta api atau transportasi laut untuk jarak jauh.
  • Pertimbangkan penggunaan kendaraan yang lebih besar: Jika memungkinkan, gunakan kendaraan dengan kapasitas lebih besar untuk mengurangi biaya per unit barang yang diangkut.
  1. Pengelompokan Pengiriman
  • Gabungkan pengiriman barang: Mengingat jumlah barang yang dikirim cukup besar (misalnya 250 unit elektronik dan 350 unit pakaian), menggabungkan pengiriman untuk mengurangi frekuensi pengiriman dan memaksimalkan kapasitas kendaraan dapat mengurangi biaya operasional.
  • Optimalisasi pengiriman berdasarkan volume barang: Jika memungkinkan, kirimkan barang dalam jumlah besar ke wilayah yang sama atau berdekatan untuk memaksimalkan penggunaan armada transportasi.
  1. Evaluasi Waktu Pengiriman
  • Kurangi waktu pengiriman dengan mencari alternatif pengiriman yang lebih cepat atau efisien, misalnya menggunakan transportasi darat yang lebih cepat untuk pengiriman jarak dekat dan transportasi udara untuk pengiriman jarak jauh.
  • Pertimbangkan pengiriman lebih awal: Dengan mempertimbangkan proses distribusi yang lebih awal, pengiriman yang lebih cepat bisa lebih efisien. Ini akan mengurangi kemungkinan keterlambatan dan meningkatkan pengelolaan waktu.
  1. Penggunaan Teknologi dan Data
  • Implementasi IoT dan data real-time: Dengan memanfaatkan teknologi Internet of Things (IoT) pada kendaraan pengiriman dan memantau data pengiriman secara real-time, dapat diidentifikasi dan diatasi hambatan-hambatan yang terjadi selama pengiriman.
  • Analisis data untuk pola pengiriman: Dengan menganalisis data pengiriman, perusahaan bisa mengetahui pola waktu pengiriman yang lebih lambat dan lebih mahal, serta mengidentifikasi faktor yang memperburuk efisiensi.

2.2.2.2 Tindakan Langkah Berikutnya

  • Audit Pengiriman: Lakukan audit secara berkala terhadap biaya dan waktu pengiriman di wilayah Tengah.
  • Pelatihan Pengemudi dan Pekerja: Pelatihan untuk pengemudi dan pekerja logistik untuk memaksimalkan efisiensi dalam pemuatan barang dan penggunaan jalur transportasi yang optimal.

2.2.2.3 Harapan

Dengan menerapkan langkah-langkah ini, diharapkan biaya per unit di wilayah Tengah dapat diturunkan, serta waktu pengiriman dapat lebih singkat, sehingga meningkatkan efisiensi keseluruhan.

LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiAxMSINCnN1YnRpdGxlOiAiU3RhdGlzdGlrYSBEYXNhciINCmF1dGhvcjogIkpPQU5TIEhFTktZIFNFUlZBVElVUyBTSU1BTlVMTEFORyINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiDQotLS0NCg0KPGltZyBzcmM9ImltZy9mb3RvLmpwZWciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjMwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIvPg0KDQoNCiMgTGF0aWhhbiAxDQoNClNlYnVhaCBwZXJ1c2FoYWFuIGluZ2luIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcGVueWViYXJhbiBkYXRhIGhhc2lsIHBlbmp1YWxhbiBkYXJpIGVtcGF0IGNhYmFuZyAoQSwgQiwgQywgZGFuIEQpIHNlbGFtYSBzYXR1IGJ1bGFuIHRlcmFraGlyLiBEYXRhIHBlbmp1YWxhbiAoZGFsYW0ganV0YSBydXBpYWgpIGRhcmkga2VlbXBhdCBjYWJhbmcgdGVyc2VidXQgYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDoNCg0KLSBDYWJhbmcgQTogNTAsIDU1LCA2MCwgNjUsIDcwDQotIENhYmFuZyBCOiA0MCwgNTAsIDYwLCA3MCwgODANCi0gQ2FiYW5nIEM6IDMwLCAzMCwgMzUsIDQwLCA0NQ0KLSBDYWJhbmcgRDogNzAsIDc1LCA4MCwgODUsIDkwDQoNCjEuIEhpdHVuZ2xhaCByYXRhLXJhdGEsIG1lZGlhbiwgZGFuIHN0YW5kYXIgZGV2aWFzaSB1bnR1ayBtYXNpbmctbWFzaW5nIGNhYmFuZy4NCjIuIENhYmFuZyBtYW5hIHlhbmcgbWVtaWxpa2kgcGVueWViYXJhbiBkYXRhIHBhbGluZyBrZWNpbD8gSmVsYXNrYW4gYWxhc2FubnlhLg0KMy4gSmlrYSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gYWRhbGFoIDUwIGp1dGEgcnVwaWFoLCBjYWJhbmcgbWFuYSBzYWphIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IGRpIHNlbXVhIGRhdGFueWE/DQo0LiBCdWF0bGFoIGRpYWdyYW0ga290YWsgKGJveCBwbG90KSB1bnR1ayBtZW12aXN1YWxpc2FzaWthbiBwZW55ZWJhcmFuIGRhdGEgc2V0aWFwIGNhYmFuZy4NCjUuIEppa2EgQW5kYSBhZGFsYWggbWFuYWplciBwZXJ1c2FoYWFuLCBiYWdhaW1hbmEgQW5kYSBha2FuIG1lbmdndW5ha2FuIGluZm9ybWFzaSBpbmkgdW50dWsgbWVyZW5jYW5ha2FuIHN0cmF0ZWdpIHBlbmluZ2thdGFuIHBlbmp1YWxhbj8NCg0KIyMgMS4xIEhpdHVuZ2xhaCByYXRhLXJhdGEsIG1lZGlhbiwgZGFuIHN0YW5kYXIgZGV2aWFzaSB1bnR1ayBtYXNpbmctbWFzaW5nIGNhYmFuZy4NCg0KIyMjIDEuMS4xIENhYmFuZyBBDQpcWw0KXHRleHR7Q2FiYW5nIEE6IH0gNTAsIDU1LCA2MCwgNjUsIDcwDQpcXQ0KDQojIyMjIDEuMS4xLjEgTWVuZ2hpdHVuZyBSYXRhLXJhdGEgKE1lYW4pOg0KUnVtdXM6DQpcWw0KXHRleHR7UmF0YS1yYXRhfSA9IFxmcmFje1x0ZXh0e0p1bWxhaCBzZW11YSBuaWxhaX19e1x0ZXh0e0p1bWxhaCBkYXRhfX0NClxdDQoNCkxhbmdrYWgtbGFuZ2thaDoNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEF9ID0gXGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCioqSGFzaWw6KioNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEF9ID0gNjANClxdDQoNCi0tLQ0KDQojIyMjIDEuMS4xLjIgTWVuZ2hpdHVuZyBNZWRpYW46DQpEYXRhIGRpdXJ1dGthbjogKio1MCwgNTUsIDYwLCA2NSwgNzAqKg0KDQoqKkRpZGFwYXQganVtbGFoIGRhdGEgKG4pID0gNSoqDQoNCioqSnVtbGFoIGRhdGEgZ2FuamlsLCBtYWthIHBvc2lzaSBuaWxhaSB0ZW5nYWhueWEgZGljYXJpIG1lbmdndW5ha2FuIHJ1bXVzOioqDQpcWw0KXHRleHR7UG9zaXNpIE1lZGlhbn0gPSBcZnJhY3tufXsyfSArIDENClxdDQoNCioqTWFrYToqKg0KXFsNClx0ZXh0e1Bvc2lzaSBNZWRpYW59ID0gXGZyYWN7NSsxfXsyfSA9IDMNClxdDQoNCioqSmFkaSBEYXRhIGtlIDM6KioNClxbDQpcdGV4dHtNZWRpYW4gQ2FiYW5nIEF9ID0gNjANClxdDQoNCi0tLQ0KDQojIyMjIDEuMS4xLjMgTWVuZ2hpdHVuZyBTdGFuZGFyIERldmlhc2k6DQoqKlJ1bXVzOioqDQpcWw0KcyA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e24tMX19DQpcXQ0KDQpEaW1hbmE6DQoNCi0gXCh4X2lcKSA9IHNlbXVhIGRhdGEgeWFuZyBha2FuIGRpaGl0dW5nDQotIFwoXGJhcntYfVwpID0gTWVhbiAocmF0YS1yYXRhKQ0KLSBuID0ganVtbGFoIGRhdGENCg0KKipNYWthKioNClxbDQpzID0gXHNxcnR7XGZyYWN7KDUwIC0gNjApXjIgKyAoNTUgLSA2MCleMiArICg2MCAtIDYwKV4yICsgKDY1IC0gNjApXjIgKyAoNzAgLSA2MCleMn17NS0xfX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezEwMCArIDI1ICsgMCArIDI1ICsgMTAwfXs0fX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezI1MH17NH19DQpcXQ0KXFsNCnMgPSBcc3FydHs2Mi41fSA9IDcuOTENClxdDQoNCioqSGFzaWw6KioNClxbDQpcdGV4dHtTdGFuZGFyIERldmlhc2kgQ2FiYW5nIEF9ID0gNy45MQ0KXF0NCg0KLS0tDQoNCiMjIyAxLjEuMiBDYWJhbmcgQg0KXFsNClx0ZXh0e0NhYmFuZyBCOiB9IDQwLCA1MCwgNjAsIDcwLCA4MA0KXF0NCg0KIyMjIyAxLjEuMi4xIE1lbmdoaXR1bmcgUmF0YS1yYXRhIChNZWFuKToNClJ1bXVzOg0KXFsNClx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3tcdGV4dHtKdW1sYWggc2VtdWEgbmlsYWl9fXtcdGV4dHtKdW1sYWggZGF0YX19DQpcXQ0KDQpMYW5na2FoLWxhbmdrYWg6DQpcWw0KXHRleHR7UmF0YS1yYXRhIENhYmFuZyBCfSA9IFxmcmFjezQwICsgNTAgKyA2MCArIDcwICsgODB9ezV9ID0gXGZyYWN7MzAwfXs1fSA9IDYwDQpcXQ0KDQoqKkhhc2lsOioqDQpcWw0KXHRleHR7UmF0YS1yYXRhIENhYmFuZyBCfSA9IDYwDQpcXQ0KDQotLS0NCg0KIyMjIyAxLjEuMi4yIE1lbmdoaXR1bmcgTWVkaWFuOg0KRGF0YSBkaXVydXRrYW46ICoqNDAsIDUwLCA2MCwgNzAsIDgwKioNCg0KKipKdW1sYWggZGF0YSAobikgPSA1KiogIA0KKipKdW1sYWggZGF0YSBnYW5qaWwsIG1ha2EgcG9zaXNpIG5pbGFpIHRlbmdhaDoqKg0KXFsNClx0ZXh0e1Bvc2lzaSBNZWRpYW59ID0gXGZyYWN7bisxfXsyfSA9IFxmcmFjezUrMX17Mn0gPSAzDQpcXQ0KDQoqKkRhdGEga2UtMzoqKg0KXFsNClx0ZXh0e01lZGlhbiBDYWJhbmcgQn0gPSA2MA0KXF0NCg0KLS0tDQoNCiMjIyMgMS4xLjIuMyBNZW5naGl0dW5nIFN0YW5kYXIgRGV2aWFzaToNClJ1bXVzOg0KXFsNCnMgPSBcc3FydHtcZnJhY3tcc3VtICh4X2kgLSBcYmFye3h9KV4yfXtuLTF9fQ0KXF0NCg0KTGFuZ2thaC1sYW5na2FoOg0KXFsNCnMgPSBcc3FydHtcZnJhY3soNDAtNjApXjIgKyAoNTAtNjApXjIgKyAoNjAtNjApXjIgKyAoNzAtNjApXjIgKyAoODAtNjApXjJ9ezUtMX19DQpcXQ0KXFsNCnMgPSBcc3FydHtcZnJhY3s0MDAgKyAxMDAgKyAwICsgMTAwICsgNDAwfXs0fX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezEwMDB9ezR9fQ0KXF0NClxbDQpzID0gXHNxcnR7MjUwfSA9IDE1LjgxDQpcXQ0KDQoqKkhhc2lsOioqDQpcWw0KXHRleHR7U3RhbmRhciBEZXZpYXNpIENhYmFuZyBCfSA9IDE1LjgxDQpcXQ0KDQotLS0NCg0KIyMjIDEuMS4zIENhYmFuZyBDDQpcWw0KXHRleHR7Q2FiYW5nIEM6IH0gMzAsIDMwLCAzNSwgNDAsIDQ1DQpcXQ0KDQojIyMjIDEuMS4zLjEgTWVuZ2hpdHVuZyBSYXRhLXJhdGEgKE1lYW4pOg0KUnVtdXM6DQpcWw0KXHRleHR7UmF0YS1yYXRhfSA9IFxmcmFje1x0ZXh0e0p1bWxhaCBzZW11YSBuaWxhaX19e1x0ZXh0e0p1bWxhaCBkYXRhfX0NClxdDQoNCkxhbmdrYWgtbGFuZ2thaDoNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEN9ID0gXGZyYWN7MzAgKyAzMCArIDM1ICsgNDAgKyA0NX17NX0gPSBcZnJhY3sxODB9ezV9ID0gMzYNClxdDQoNCioqSGFzaWw6KioNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEN9ID0gMzYNClxdDQoNCi0tLQ0KDQojIyMjIDEuMS4zLjIgTWVuZ2hpdHVuZyBNZWRpYW46DQpEYXRhIGRpdXJ1dGthbjogKiozMCwgMzAsIDM1LCA0MCwgNDUqKg0KDQoqKkp1bWxhaCBkYXRhIChuKSA9IDUqKiAgDQoqKkp1bWxhaCBkYXRhIGdhbmppbCwgbWFrYSBwb3Npc2kgbmlsYWkgdGVuZ2FoOioqDQpcWw0KXHRleHR7UG9zaXNpIE1lZGlhbn0gPSBcZnJhY3tuKzF9ezJ9ID0gXGZyYWN7NSsxfXsyfSA9IDMNClxdDQoNCioqRGF0YSBrZS0zOioqDQpcWw0KXHRleHR7TWVkaWFuIENhYmFuZyBDfSA9IDM1DQpcXQ0KDQotLS0NCg0KIyMjIyAxLjEuMy4zIE1lbmdoaXR1bmcgU3RhbmRhciBEZXZpYXNpOg0KUnVtdXM6DQpcWw0KcyA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e24tMX19DQpcXQ0KDQpMYW5na2FoLWxhbmdrYWg6DQpcWw0KcyA9IFxzcXJ0e1xmcmFjeygzMC0zNileMiArICgzMC0zNileMiArICgzNS0zNileMiArICg0MC0zNileMiArICg0NS0zNileMn17NS0xfX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezM2ICsgMzYgKyAxICsgMTYgKyA4MX17NH19DQpcXQ0KXFsNCnMgPSBcc3FydHtcZnJhY3sxNzB9ezR9fQ0KXF0NClxbDQpzID0gXHNxcnR7NDIuNX0gPSA2LjUyDQpcXQ0KDQoqKkhhc2lsOioqDQpcWw0KXHRleHR7U3RhbmRhciBEZXZpYXNpIENhYmFuZyBDfSA9IDYuNTINClxdDQoNCi0tLQ0KDQojIyMgMS4xLjQgQ2FiYW5nIEQNClxbDQpcdGV4dHtDYWJhbmcgRDogfSA3MCwgNzUsIDgwLCA4NSwgOTANClxdDQoNCiMjIyMgMS4xLjQuMSBNZW5naGl0dW5nIFJhdGEtcmF0YSAoTWVhbik6DQpSdW11czoNClxbDQpcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7XHRleHR7SnVtbGFoIHNlbXVhIG5pbGFpfX17XHRleHR7SnVtbGFoIGRhdGF9fQ0KXF0NCg0KTGFuZ2thaC1sYW5na2FoOg0KXFsNClx0ZXh0e1JhdGEtcmF0YSBDYWJhbmcgRH0gPSBcZnJhY3s3MCArIDc1ICsgODAgKyA4NSArIDkwfXs1fSA9IFxmcmFjezQwMH17NX0gPSA4MA0KXF0NCg0KKipIYXNpbDoqKg0KXFsNClx0ZXh0e1JhdGEtcmF0YSBDYWJhbmcgRH0gPSA4MA0KXF0NCg0KLS0tDQoNCiMjIyMgMS4xLjQuMiBNZW5naGl0dW5nIE1lZGlhbjoNCkRhdGEgZGl1cnV0a2FuOiAqKjcwLCA3NSwgODAsIDg1LCA5MCoqDQoNCioqSnVtbGFoIGRhdGEgKG4pID0gNSoqICANCioqSnVtbGFoIGRhdGEgZ2FuamlsLCBtYWthIHBvc2lzaSBuaWxhaSB0ZW5nYWg6KioNClxbDQpcdGV4dHtQb3Npc2kgTWVkaWFufSA9IFxmcmFje24rMX17Mn0gPSBcZnJhY3s1KzF9ezJ9ID0gMw0KXF0NCg0KKipEYXRhIGtlLTM6KioNClxbDQpcdGV4dHtNZWRpYW4gQ2FiYW5nIER9ID0gODANClxdDQoNCi0tLQ0KDQojIyMjIDEuMS40LjMgTWVuZ2hpdHVuZyBTdGFuZGFyIERldmlhc2k6DQpSdW11czoNClxbDQpzID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXGJhcnt4fSleMn17bi0xfX0NClxdDQoNCkxhbmdrYWgtbGFuZ2thaDoNClxbDQpzID0gXHNxcnR7XGZyYWN7KDcwLTgwKV4yICsgKDc1LTgwKV4yICsgKDgwLTgwKV4yICsgKDg1LTgwKV4yICsgKDkwLTgwKV4yfXs1LTF9fQ0KXF0NClxbDQpzID0gXHNxcnR7XGZyYWN7MTAwICsgMjUgKyAwICsgMjUgKyAxMDB9ezR9fQ0KXF0NClxbDQpzID0gXHNxcnR7XGZyYWN7MjUwfXs0fX0NClxdDQpcWw0KcyA9IFxzcXJ0ezYyLjV9ID0gNy45MQ0KXF0NCg0KKipIYXNpbDoqKg0KXFsNClx0ZXh0e1N0YW5kYXIgRGV2aWFzaSBDYWJhbmcgRH0gPSA3LjkxDQpcXQ0KDQotLS0NCg0KKipKaWthIFNlbXVhbnlhIERpc3VzdW4gS2UgRGFsYW0gQmVudHVrIFRhYmVsOioqDQoNCnwgQ2FiYW5nIHwgUmF0YS1yYXRhIHwgTWVkaWFuCXwgU3RhbmRhciBEZXZpYXNpIHwNCnwtLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwNCnwgQ2FiYW5nIEEgfCA2MAl8IDYwIHwgNy45MSB8DQp8IENhYmFuZyBCIHwgNjAJfCA2MCB8IDE1LjgxIHwNCnwgQ2FiYW5nIEMgfCAzNgl8IDM1IHwgNi41MiB8DQp8IENhYmFuZyBEIHwgODAgfCA4MCB8IDcuOTEgfA0KDQotLS0NCg0KIyMgMS4yIENhYmFuZyBtYW5hIHlhbmcgbWVtaWxpa2kgcGVueWViYXJhbiBkYXRhIHBhbGluZyBrZWNpbD8gSmVsYXNrYW4gYWxhc2FubnlhLg0KDQoqKlBlbnllYmFyYW4gZGF0YSoqIGRpdWt1ciBkZW5nYW4gKipzdGFuZGFyIGRldmlhc2kgKFwoc1wpKSoqLiBCZXJpa3V0IGFkYWxhaCBzdGFuZGFyIGRldmlhc2kgbWFzaW5nLW1hc2luZyBjYWJhbmc6DQoNCi0gKipDYWJhbmcgQSoqOiBcKHMgPSA3LjkxXCkgIA0KLSAqKkNhYmFuZyBCKio6IFwocyA9IDE1LjgxXCkgIA0KLSAqKkNhYmFuZyBDKio6IFwocyA9IDYuNTJcKSAgDQotICoqQ2FiYW5nIEQqKjogXChzID0gNy45MVwpICANCg0KIyMjIDEuMi4xIEphd2FiYW46IENhYmFuZyBDIA0KLSBDYWJhbmcgQyBtZW1pbGlraSAqKnN0YW5kYXIgZGV2aWFzaSB0ZXJrZWNpbCoqIHNlYmVzYXIgXCg2LjUyXCksIHlhbmcgbWVudW5qdWtrYW4gYmFod2EgZGF0YSBwZW5qdWFsYW4gZGkgQ2FiYW5nIEMgbGViaWggKip0ZXJrb25zZW50cmFzaSBhdGF1IGhvbW9nZW4qKiBkaWJhbmRpbmdrYW4gZGVuZ2FuIGNhYmFuZyBsYWlubnlhLiAgDQotIFBlbnllYmFyYW4gZGF0YSB5YW5nIGtlY2lsIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBuaWxhaSBwZW5qdWFsYW4gZGkgQ2FiYW5nIEMgbGViaWggc3RhYmlsIGRhbiBtZW5kZWthdGkgcmF0YS1yYXRhIChcKFxiYXJ7WH0gPSAzNlwpKS4NCg0KIyMjIDEuMi4yIFBlbmplbGFzYW4gIA0KU3RhbmRhciBkZXZpYXNpIG1lbmd1a3VyIHJhdGEtcmF0YSBqYXJhayBzZXRpYXAgZGF0YSB0ZXJoYWRhcCByYXRhLXJhdGEuIFNlbWFraW4ga2VjaWwgbmlsYWkgXChzXCksIHNlbWFraW4ga2VjaWwgdmFyaWFzaSBhbnRhcmEgbmlsYWkgZGF0YSwgZGFuIHNlbWFraW4gc2VyYWdhbSBkYXRhIHRlcnNlYnV0LiBDYWJhbmcgQyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgeWFuZyBsZWJpaCBrZWNpbCBrYXJlbmEgc2VsdXJ1aCBuaWxhaSBwZW5qdWFsYW4gbWVuZGVrYXRpIHJhdGEtcmF0YSwgZGVuZ2FuIHJlbnRhbmcgZGF0YSB5YW5nIHNlbXBpdCAoMzAgaGluZ2dhIDQ1KS4NCg0KLS0tDQoNCiMjIDEuMyBDYWJhbmcgTWFuYSB5YW5nIEdhZ2FsIE1lbmNhcGFpIFRhcmdldCBQZW5qdWFsYW4/DQoNCioqVGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtOioqIDUwIGp1dGEgcnVwaWFoLg0KDQojIyMgMS4zLjEgRGF0YSBQZW5qdWFsYW4gVGlhcCBDYWJhbmc6DQotICoqQ2FiYW5nIEEqKjogXCg1MCwgNTUsIDYwLCA2NSwgNzBcKSAgDQotICoqQ2FiYW5nIEIqKjogXCg0MCwgNTAsIDYwLCA3MCwgODBcKSAgDQotICoqQ2FiYW5nIEMqKjogXCgzMCwgMzAsIDM1LCA0MCwgNDVcKSAgDQotICoqQ2FiYW5nIEQqKjogXCg3MCwgNzUsIDgwLCA4NSwgOTBcKSAgDQoNCiMjIyAxLjMuMiBBbmFsaXNpczoNClVudHVrIHNldGlhcCBjYWJhbmcsIGtpdGEgcGVyaWtzYSBhcGFrYWggYWRhIG5pbGFpIHlhbmcga3VyYW5nIGRhcmkgNTAganV0YSBydXBpYWg6DQoNCjEuICoqQ2FiYW5nIEEqKjogU2VtdWEgZGF0YSBcKCg1MCwgNTUsIDYwLCA2NSwgNzApXCkgbWVuY2FwYWkgdGFyZ2V0LiAgDQogICAqKktlc2ltcHVsYW46KiogVGlkYWsgYWRhIGRhdGEgeWFuZyBnYWdhbC4gIA0KDQoyLiAqKkNhYmFuZyBCKio6IEFkYSBzYXR1IGRhdGEgeWFuZyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQsIHlhaXR1IFwoNDBcKS4gIA0KICAgKipLZXNpbXB1bGFuOioqIEdhZ2FsIGRpIHNhdHUgZGF0YSAoXCg0MFwpKS4gIA0KDQozLiAqKkNhYmFuZyBDKio6IFNlbXVhIGRhdGEgXCgoMzAsIDMwLCAzNSwgNDAsIDQ1KVwpIGdhZ2FsIG1lbmNhcGFpIHRhcmdldC4gIA0KICAgKipLZXNpbXB1bGFuOioqIEdhZ2FsIGRpIHNlbXVhIGRhdGEuICANCg0KNC4gKipDYWJhbmcgRCoqOiBTZW11YSBkYXRhIFwoKDcwLCA3NSwgODAsIDg1LCA5MClcKSBtZW5jYXBhaSB0YXJnZXQuICANCiAgICoqS2VzaW1wdWxhbjoqKiBUaWRhayBhZGEgZGF0YSB5YW5nIGdhZ2FsLiAgDQoNCiMjIyAxLjMuMyBKYXdhYmFuIEFraGlyOg0KLSAqKkNhYmFuZyBCKiogbWVtaWxpa2kgMSBkYXRhIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0LiAgDQotICoqQ2FiYW5nIEMqKiBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgKipzZW11YSBkYXRhKiouICANCg0KLS0tDQoNCiMjIDEuNCBCdWF0bGFoIGRpYWdyYW0ga290YWsgKGJveCBwbG90KSB1bnR1ayBtZW12aXN1YWxpc2FzaWthbiBwZW55ZWJhcmFuIGRhdGEgc2V0aWFwIGNhYmFuZy4NCg0KIyMjIDEuNC4xIFZpc3VhbGlzYXNpIGRhdGENCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIERhdGEgcGVuanVhbGFuIHNldGlhcCBjYWJhbmcNCnBlbmp1YWxhbiA8LSBsaXN0KA0KICAiQ2FiYW5nIEEiID0gYyg1MCwgNTUsIDYwLCA2NSwgNzApLA0KICAiQ2FiYW5nIEIiID0gYyg0MCwgNTAsIDYwLCA3MCwgODApLA0KICAiQ2FiYW5nIEMiID0gYygzMCwgMzAsIDM1LCA0MCwgNDUpLA0KICAiQ2FiYW5nIEQiID0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQopDQoNCiMgTWVtYnVhdCBib3ggcGxvdA0KYm94cGxvdCgNCiAgcGVuanVhbGFuLA0KICBjb2wgPSBjKCIjRkZCNkMxIiwgIiNBREQ4RTYiLCAiIzkwRUU5MCIsICIjRkZEQUI5IiksDQogIG1haW4gPSAiRGlhZ3JhbSBLb3RhayAoQm94IFBsb3QpIFBlbmp1YWxhbiBUaWFwIENhYmFuZyIsDQogIHhsYWIgPSAiQ2FiYW5nIiwNCiAgeWxhYiA9ICJQZW5qdWFsYW4gKEp1dGEgUnVwaWFoKSIsDQogIGJvcmRlciA9ICJkYXJrYmx1ZSIsDQogIG5vdGNoID0gRkFMU0UNCikNCg0KIyBNZW5hbWJhaGthbiBncmlkIHVudHVrIGtlamVsYXNhbg0KZ3JpZChueCA9IE5BLCBueSA9IE5VTEwsIGx0eSA9ICJkYXNoZWQiLCBjb2wgPSAiZ3JheSIsIGx3ZCA9IDAuNSkNCg0KYGBgDQoNCi0tLQ0KDQojIyAxLjUgU3RyYXRlZ2kgUGVuaW5na2F0YW4gUGVuanVhbGFuIEJlcmRhc2Fya2FuIEFuYWxpc2lzIERhdGENCg0KU2ViYWdhaSBtYW5hamVyIHBlcnVzYWhhYW4sIGluZm9ybWFzaSBpbmkgZGFwYXQgZGlndW5ha2FuIHVudHVrIG1lbnl1c3VuIHN0cmF0ZWdpIHBlbmluZ2thdGFuIHBlbmp1YWxhbiBkZW5nYW4gbGFuZ2thaC1sYW5na2FoIGJlcmlrdXQ6DQoNCiMjIyAxLjUuMSBGb2t1cyBwYWRhIENhYmFuZyBDDQotICoqQW5hbGlzaXM6KiogQ2FiYW5nIEMgbWVtaWxpa2kgcmF0YS1yYXRhIHBlbmp1YWxhbiB0ZXJlbmRhaCAoXChcYmFye1h9ID0gMzZcKSkgZGFuIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBcKDUwXCkganV0YSBydXBpYWggZGkgc2VtdWEgZGF0YW55YS4NCi0gKipTdHJhdGVnaToqKg0KICAtIFRpbmphdSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVueWViYWJrYW4gcmVuZGFobnlhIHBlbmp1YWxhbiwgc2VwZXJ0aSBsb2thc2ksIGRheWEgYmVsaSBwZWxhbmdnYW4sIGF0YXUgc3RyYXRlZ2kgcGVtYXNhcmFuLg0KICAtIFRpbmdrYXRrYW4gcHJvbW9zaSBkYW4gZGlza29uIGtodXN1cyBkaSBhcmVhIENhYmFuZyBDLg0KICAtIEFkYWthbiBwZWxhdGloYW4gdW50dWsgbWVuaW5na2F0a2FuIGtpbmVyamEgdGltIHBlbmp1YWxhbi4NCg0KIyMjIDEuNS4yIE9wdGltYWxrYW4gS2luZXJqYSBDYWJhbmcgQg0KLSAqKkFuYWxpc2lzOioqIENhYmFuZyBCIG1lbWlsaWtpIHBlbnllYmFyYW4gZGF0YSB0ZXJiZXNhciAoXChzID0gMTUuODFcKSksIG1lbnVuanVra2FuIHZhcmlhc2kgeWFuZyB0aW5nZ2kgZGFsYW0gcGVuanVhbGFuLg0KLSAqKlN0cmF0ZWdpOioqDQogIC0gRm9rdXMgcGFkYSBzdGFiaWxpc2FzaSBwZW5qdWFsYW4gZGVuZ2FuIHBlbmRla2F0YW4geWFuZyBrb25zaXN0ZW4gdGVyaGFkYXAgcGVsYW5nZ2FuLg0KICAtIFRpbmdrYXRrYW4gZWZpc2llbnNpIGRpc3RyaWJ1c2kgZGFuIGxheWFuYW4gdW50dWsgbWVuZG9yb25nIHBlbmp1YWxhbiBzZWNhcmEgbWVyYXRhLg0KDQojIyMgMS41LjMgTWVtcGVydGFoYW5rYW4gUGVyZm9ybWEgQ2FiYW5nIEEgZGFuIEQNCi0gKipBbmFsaXNpczoqKiBDYWJhbmcgQSBkYW4gRCBtZW51bmp1a2thbiBwZXJmb3JtYSBzdGFiaWwgZGVuZ2FuIHN0YW5kYXIgZGV2aWFzaSByZW5kYWggKFwocyA9IDcuOTFcKSksIGRhbiB0aWRhayBhZGEgZGF0YSB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldC4NCi0gKipTdHJhdGVnaToqKg0KICAtIExhbmp1dGthbiBwcmFrdGlrIHRlcmJhaWsgeWFuZyB0ZWxhaCBkaXRlcmFwa2FuIGRpIGtlZHVhIGNhYmFuZy4NCiAgLSBKYWRpa2FuIENhYmFuZyBBIGRhbiBEIHNlYmFnYWkgbW9kZWwgYmFnaSBjYWJhbmcgbGFpbiBkZW5nYW4gYmVyYmFnaSBzdHJhdGVnaSBzdWtzZXMgbWVyZWthLg0KDQojIyMgMS41LjQgVGluamF1YW4gRGF0YSBTZWNhcmEgQmVya2FsYQ0KLSBCdWF0IGxhcG9yYW4gYnVsYW5hbiB1bnR1ayBtZW1hbnRhdSBwZXJrZW1iYW5nYW4gc2V0aWFwIGNhYmFuZy4NCi0gSW1wbGVtZW50YXNpa2FuIHRla25vbG9naSBhbmFsaXRpayB1bnR1ayBtZW1wcmVkaWtzaSB0cmVuIHBlbmp1YWxhbiBkYW4gbWVueWVzdWFpa2FuIHN0cmF0ZWdpIGRlbmdhbiBrZWJ1dHVoYW4gcGFzYXIuDQoNCiMjIyAxLjUuNSBEaXZlcnNpZmlrYXNpIFByb2R1ayBkYW4gTGF5YW5hbg0KLSBUYW1iYWhrYW4gdmFyaWFzaSBwcm9kdWsgeWFuZyBzZXN1YWkgZGVuZ2FuIHByZWZlcmVuc2kgbG9rYWwgdW50dWsgbWVuaW5na2F0a2FuIGRheWEgdGFyaWsgZGkgY2FiYW5nIGRlbmdhbiBwZXJmb3JtYSByZW5kYWguDQotIEV2YWx1YXNpIHJlc3BvbnMgcGFzYXIgdGVyaGFkYXAgcHJvZHVrIGJhcnUgbWVsYWx1aSBzdXJ2ZWkgcGVsYW5nZ2FuIGRhbiB1amkgY29iYSB0ZXJiYXRhcy4NCg0KIyMjIDEuNS42IEtlc2ltcHVsYW46DQpEZW5nYW4gbWVtYW5mYWF0a2FuIGluZm9ybWFzaSBzdGF0aXN0aWsgc2VwZXJ0aSByYXRhLXJhdGEsIG1lZGlhbiwgZGFuIHN0YW5kYXIgZGV2aWFzaSwgcGVydXNhaGFhbiBkYXBhdCBtZW1haGFtaSBraW5lcmphIG1hc2luZy1tYXNpbmcgY2FiYW5nIHNlY2FyYSBtZW5kYWxhbSBkYW4gbWVuZ2ltcGxlbWVudGFzaWthbiBzdHJhdGVnaSB5YW5nIHNwZXNpZmlrIHVudHVrIG1lbmluZ2thdGthbiB0b3RhbCBwZW5qdWFsYW4gc2VjYXJhIGtlc2VsdXJ1aGFuLg0KDQotLS0NCg0KIyBMYXRpaGFuIDINCg0KUGVydXNhaGFhbiBYWVogbWVuZ2Vsb2xhIHBlbmdpcmltYW4gYmFyYW5nIGtlIGJlcmJhZ2FpIHdpbGF5YWggZGVuZ2FuIG1lbmdndW5ha2FuIGJlcmJhZ2FpIGplbmlzIHRyYW5zcG9ydGFzaS4gU2V0aWFwIHBlbmdpcmltYW4gbWVsaWJhdGthbiBiaWF5YSB0cmFuc3BvcnRhc2ksIHdha3R1IHlhbmcgZGlidXR1aGthbiwgZGFuIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHRlcmthaXQgcGVuZ2lyaW1hbiBiYXJhbmcgYmVyZGFzYXJrYW4gd2lsYXlhaCBkYW4gamVuaXMgYmFyYW5nOg0KDQp8IFdpbGF5YWggfCBKZW5pcyBCYXJhbmcgfCBKdW1sYWggQmFyYW5nICh1bml0KSB8IFdha3R1IFBlbmdpcmltYW4gKGphbSkgfCBCaWF5YSBwZXIgVW5pdCAoUnApIHwNCnwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgVXRhcmEgfCBFbGVrdHJvbmlrIHwgMjAwIHwgNSB8IDE1MDAwIHwNCnwgU2VsYXRhbiB8IFBha2FpYW4gfCAxNTAgfCA4IHwgODAwMCB8DQp8IFRpbXVyIHwgTWFrYW5hbiB8IDE4MCB8IDYgfCAxMDAwMCB8DQp8IEJhcmF0IHwgUGVyYWxhdGFuIHwgMTIwIHwgNyB8IDEyMDAwIHwNCnwgVGVuZ2FoIHwgRWxla3Ryb25payB8IDI1MCB8IDQgfCAxNDAwMCB8DQp8IFV0YXJhIHwgUGFrYWlhbiB8IDMwMCB8IDkgfCA4NTAwIHwNCnwgU2VsYXRhbiB8IE1ha2FuYW4gfCAyMjAgfCA3IHwgOTUwMCB8DQp8IFRpbXVyIHwgUGVyYWxhdGFuIHwgMTQwIHwgNSB8IDExMDAwIHwNCnwgQmFyYXQgfCBFbGVrdHJvbmlrIHwgMTgwIHwgNiB8IDE0NTAwIHwNCnwgVGVuZ2FoIHwgUGFrYWlhbiB8IDM1MCB8IDggfCA3ODAwIHwNCnwgVXRhcmEgfCBQZXJhbGF0YW4gfCAxNzAgfCA0IHwxMjAwMCB8DQp8IFNlbGF0YW4gfCBFbGVrdHJvbmlrIHwgMjUwIHwgNiB8IDE2MDAwIHwNCnwgVGltdXIgfCBQYWthaWFuIHwgMTkwIHwgNyB8IDgyMDAgfA0KfCBCYXJhdCB8IE1ha2FuYW4gfCAxMzAgfCA1IHwgMTA1MDAgfA0KfCBUZW5nYWggfCBQZXJhbGF0YW4gfCAxODAgfCA1IHwgMTE1MDAgfA0KDQoxLiBBbmFsaXNpcyBFZmlzaWVuc2kgUGVuZ2lyaW1hbjoNCiAgLSBWaXN1YWxpc2FzaWthbiBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiBqdW1sYWggYmFyYW5nLCB3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgZGVuZ2FuIG1lbmdndW5ha2FuIHBsb3QgM0QuDQogIC0gVGVudHVrYW4gd2lsYXlhaCBtYW5hIHlhbmcgbWVtaWxpa2kgZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYmVyZGFzYXJrYW4gYmlheWEgcGVyIHVuaXQgZGFuIHdha3R1IHBlbmdpcmltYW4uDQogDQoyLiBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbDoNCiAgLSBCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcywgd2lsYXlhaCBtYW5hIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbj8NCiAgLSBBcGEgcmVrb21lbmRhc2kgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIHRlcnNlYnV0Pw0KICANCiMjIDIuMSBBbmFsaXNpcyBFZmlzaWVuc2kgUGVuZ2lyaW1hbjoNCg0KIyMjIDIuMS4xIFZpc3VhbGlzYXNpa2FuIHBlbmdpcmltYW4gYmFyYW5nIGJlcmRhc2Fya2FuIGp1bWxhaCBiYXJhbmcsIHdha3R1IHBlbmdpcmltYW4sIGRhbiBiaWF5YSBwZXIgdW5pdCBkZW5nYW4gbWVuZ2d1bmFrYW4gcGxvdCAzRC4NCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIGlucHV0DQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIFdpbGF5YWggPSBjKCJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIsICJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgDQogICAgICAgICAgICAgICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCANCiAgICAgICAgICAgICAgICAgICAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCANCiAgICAgICAgICAgICAgICAgICAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfQmFyYW5nID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIDE3MCwgMjUwLCAxOTAsIDEzMCwgMTgwKSwNCiAgV2FrdHVfUGVuZ2lyaW1hbiA9IGMoNSwgOCwgNiwgNywgNCwgOSwgNywgNSwgNiwgOCwgNCwgNiwgNywgNSwgNSksDQogIEJpYXlhX1Blcl9Vbml0ID0gYygxNTAwMCwgODAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwgODUwMCwgOTUwMCwgMTEwMDAsIDE0NTAwLCA3ODAwLCANCiAgICAgICAgICAgICAgICAgICAgIDEyMDAwLCAxNjAwMCwgODIwMCwgMTA1MDAsIDExNTAwKQ0KKQ0KDQojIE1lbWJ1YXQgcGxvdCAzRA0KcGxvdCA8LSBwbG90X2x5KA0KICBkYXRhLCANCiAgeCA9IH5KdW1sYWhfQmFyYW5nLCANCiAgeSA9IH5XYWt0dV9QZW5naXJpbWFuLCANCiAgeiA9IH5CaWF5YV9QZXJfVW5pdCwgDQogIGNvbG9yID0gfldpbGF5YWgsIA0KICBjb2xvcnMgPSBjKCJibHVlIiwgIm9yYW5nZSIsICJncmVlbiIsICJwdXJwbGUiLCAicmVkIiksICMgV2FybmEga2h1c3VzIHBlciB3aWxheWFoDQogIHRleHQgPSB+cGFzdGUoIkplbmlzIEJhcmFuZzoiLCBKZW5pc19CYXJhbmcpLCAjIExhYmVsIGludGVyYWt0aWYNCiAgdHlwZSA9ICJzY2F0dGVyM2QiLCANCiAgbW9kZSA9ICJtYXJrZXJzIg0KKQ0KDQojIE1lbmFtYmFoa2FuIHRhdGEgbGV0YWsgcGxvdA0KcGxvdCA8LSBwbG90ICU+JSBsYXlvdXQoDQogIHRpdGxlID0gIkFuYWxpc2lzIDNEIEVmaXNpZW5zaSBQZW5naXJpbWFuIEJhcmFuZyIsDQogIHNjZW5lID0gbGlzdCgNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiSnVtbGFoIEJhcmFuZyAodW5pdCkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiV2FrdHUgUGVuZ2lyaW1hbiAoamFtKSIpLA0KICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICJCaWF5YSBwZXIgVW5pdCAoUnApIiksDQogICAgY2FtZXJhID0gbGlzdCgNCiAgICAgIGV5ZSA9IGxpc3QoeCA9IDEuNSwgeSA9IDEuNSwgeiA9IDAuNSkgIyBTdWR1dCBwYW5kYW5nIGthbWVyYQ0KICAgICkNCiAgKSwNCiAgbGVnZW5kID0gbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJXaWxheWFoIiksIG9yaWVudGF0aW9uID0gInYiKSAjIFBlbmdhdHVyYW4gbGVnZW5kYQ0KKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KYGBgDQoNCiMjIyAyLjEuMiBUZW50dWthbiB3aWxheWFoIG1hbmEgeWFuZyBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbi4NCg0KIyMjIyAyLjEuMi4xIENhcmEgTWFudWFsDQoqKlJ1bXVzOioqDQpcWw0KXHRleHR7RWZpZW5zaX0gPSBcZnJhY3tcdGV4dHtCaWF5YSBwZXIgVW5pdH19e1x0ZXh0e1dha3R1IFBlbmdpcmltYW59fQ0KXF0NCioqTm90ZToqKg0KV2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIHRlcnRpbmdnaSAobmlsYWkgdGVyYmVzYXIpIGRpYW5nZ2FwIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGthcmVuYSBiaWF5YSBsZWJpaCBtYWhhbCBwZXIgc2F0dWFuIHdha3R1Lg0KDQoqKkNvbnRvaCBQZXJoaXR1bmdhbjoqKg0KLSBCYXJpcyAxIChXaWxheWFoIFV0YXJhKToNClxbDQpcdGV4dHtFZmllbnNpfSA9IFxmcmFjezE1LDAwMH17NX0gPSAzLDAwMA0KXF0NCi0gQmFyaXMgMiAoV2lsYXlhaCBTZWxhdGFuKToNClxbDQpcdGV4dHtFZmllbnNpfSA9IFxmcmFjezgsMDAwfXs4fSA9IDEsMDAwDQpcXQ0KLSBCYXJpcyAzIChXaWxheWFoIFRpbXVyKToNClxbDQpcdGV4dHtFZmllbnNpfSA9IFxmcmFjezEwLDAwMH17Nn0gPSAxLDY2Nw0KXF0NCi0gTGFrdWthbiBsYW5na2FoIHlhbmcgc2FtYSB1bnR1ayBzZW11YSBiYXJpcy4NCg0KfCBXaWxheWFoIHwJQmlheWEgcGVyIFVuaXQgKFJwKSB8CVdha3R1IFBlbmdpcmltYW4gKGphbSkgfAlFZmlzaWVuc2kgKFwoXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX0gXCkpIHwgDQp8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAgICAgICB8IDE1LDAwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IDgsMDAwICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDEwLDAwMCAgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsNjY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsNzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDE0LDAwMCAgICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBVdGFyYSAgICAgICB8IDgsNTAwICAgICAgICAgICAgICAgICAgfCA5ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDk0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IDksNTAwICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsMzU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDExLDAwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IDE0LDUwMCAgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDcsODAwICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDk3NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBVdGFyYSAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IDE2LDAwMCAgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNjY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDgsMjAwICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsMTcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IDEwLDUwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDExLDUwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsMzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KDQojIyMjIyAyLjEuMi4xLjEgSGFzaWwgQW5hbGlzaXMNCioqV2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYWRhbGFoOioqDQoNCi0gKipXaWxheWFoOioqIFRlbmdhaA0KLSAqKkJpYXlhIHBlciBVbml0OioqIFJwMTQuMDAwDQotICoqV2FrdHUgUGVuZ2lyaW1hbjoqKiA0IGphbQ0KLSAqKkVmaXNpZW5zaToqKiAzLDUwMCAodGVydGluZ2dpLCBzZWhpbmdnYSBwYWxpbmcgdGlkYWsgZWZpc2llbikNCg0KIyMjIyAyLjEuMi4yIENhcmEgRGVuZ2FuIFB5aHRvbg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgVGFtYmFoa2FuIGxpYnJhcnkga25pdHINCg0KbGlicmFyeShrbml0cikNCg0KDQojIFRhbWJhaGthbiBrb2xvbSBFZmlzaWVuc2kNCmRhdGEkRWZpc2llbnNpIDwtIGRhdGEkQmlheWFfUGVyX1VuaXQgLyBkYXRhJFdha3R1X1BlbmdpcmltYW4NCg0KIyBUYW1waWxrYW4gdGFiZWwgZGF0YSBkYWxhbSBiZW50dWsgdGFiZWwgcmFwaQ0Ka2FibGUoZGF0YSwgY2FwdGlvbiA9ICJUYWJlbCBEYXRhIGRlbmdhbiBLb2xvbSBFZmlzaWVuc2kiKQ0KDQojIENhcmkgZGF0YSBkZW5nYW4gZWZpc2llbnNpIHRlcmVuZGFoDQpsb3dlc3RfZWZmaWNpZW5jeSA8LSBkYXRhW3doaWNoLm1pbihkYXRhJEVmaXNpZW5zaSksIF0NCg0KIyBUYW1waWxrYW4gZGF0YSBkZW5nYW4gZWZpc2llbnNpIHRlcmVuZGFoIGRhbGFtIGJlbnR1ayB0YWJlbA0Ka2FibGUobG93ZXN0X2VmZmljaWVuY3ksIGNhcHRpb24gPSAiRGF0YSBkZW5nYW4gRWZpc2llbnNpIFRlcmVuZGFoIikNCg0KYGBgDQoNCiMjIyMjIDIuMS4yLjIuMiBIYXNpbCBBbmFsaXNpcw0KKipIYXNpbCBkYXJpIGtvZGUgZGkgYXRhcyBha2FuIG1lbnVuanVra2FuIHdpbGF5YWggZGVuZ2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoLiBCZXJkYXNhcmthbiBkYXRhOioqDQoNCi0gKipXaWxheWFoOioqIFRlbmdhaA0KLSAqKkplbmlzIEJhcmFuZzoqKiBFbGVrdHJvbmlrDQotICoqSnVtbGFoIEJhcmFuZzoqKiAyNTAgdW5pdA0KLSAqKldha3R1IFBlbmdpcmltYW46KiogNCBqYW0NCi0gKipCaWF5YSBwZXIgVW5pdDoqKiBScDE0LjAwMA0KLSAqKlRpbmdrYXQgRWZpc2llbnNpOioqIDMsNTAwICh0ZXJ0aW5nZ2ksIGJlcmFydGkgZWZpc2llbnNpIHRlcmVuZGFoKS4NCg0KIyMjIyAyLjEuMi4zIEtlc2ltcHVsYW4gV2lsYXlhaCBkZW5nYW4gRWZpc2llbnNpIFRlcmVuZGFoDQpKYWRpIEVmaXNpZW5zaSBUZXJlbmRhaCBiaXNhIGRpa2V0YWh1aSBtZWxhdWkgY2FyYSBtYW51YWwgZGFuIFB5dGhvbiB5YW5nIG1lbmdoYXNpbGthbiBoYXNpbCB5YW5nIHNhbWEsWWFpdHU6DQoNCkVmaXNpZW5zaSB0ZXJ0aW5nZ2kgKHBhbGluZyB0aWRhayBlZmlzaWVuKSBhZGFsYWggMyw1MDAuDQoNCldpbGF5YWggZGVuZ2FuIGVmaXNpZW5zaSB0ZXJlbmRhaCAocGFsaW5nIHRpZGFrIGVmaXNpZW4pIGFkYWxhaDoNCg0KLSAqKldpbGF5YWg6KiogVGVuZ2FoDQotICoqSmVuaXMgQmFyYW5nOioqIEVsZWt0cm9uaWsNCi0gKipKdW1sYWggQmFyYW5nOioqIDI1MCB1bml0DQotICoqV2FrdHUgUGVuZ2lyaW1hbjoqKiA0IGphbQ0KLSAqKkJpYXlhIHBlciBVbml0OioqIFJwMTQuMDAwDQotICoqVGluZ2thdCBFZmlzaWVuc2k6KiogMyw1MDAgKHRlcnRpbmdnaSwgYmVyYXJ0aSBlZmlzaWVuc2kgdGVyZW5kYWgpLg0KDQojIyAyLjIgUmVrb21lbmRhc2kgT3BlcmFzaW9uYWw6DQoNCiMjIyAyLjIuMSBCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcywgd2lsYXlhaCBtYW5hIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbj8NCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzLCB3aWxheWFoIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBhZGFsYWggV2lsYXlhaCBUZW5nYWguIFdpbGF5YWggaW5pIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGRlbmdhbiBuaWxhaSAzLDUwMCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIGJpYXlhIHBlciB1bml0IHVudHVrIHBlbmdpcmltYW4gZGkgd2lsYXlhaCBpbmkgc2FuZ2F0IHRpbmdnaSBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdha3R1IHlhbmcgZGlidXR1aGthbi4NCg0KIyMjIDIuMi4yIEFwYSByZWtvbWVuZGFzaSB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuIGRpIHdpbGF5YWggdGVyc2VidXQ/DQoNCiMjIyMgMi4yLjIuMSBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbCB1bnR1ayBXaWxheWFoIFRlbmdhaA0KMS4gT3B0aW1hc2kgUnV0ZSBQZW5naXJpbWFuDQoNCi0gRXZhbHVhc2kga2VtYmFsaSBydXRlIHBlbmdpcmltYW46IElkZW50aWZpa2FzaSBkYW4gZXZhbHVhc2kgcnV0ZSB5YW5nIGRpZ3VuYWthbiB1bnR1ayBwZW5naXJpbWFuIGJhcmFuZyBkaSB3aWxheWFoIFRlbmdhaC4gSGFsIGluaSBiaXNhIG1lbmNha3VwIHBlbmdlY2VrYW4gYXBha2FoIGFkYSBqYWxhbiB5YW5nIGt1cmFuZyBvcHRpbWFsIGF0YXUgbWFjZXQsIHNlaGluZ2dhIG1lbmFtYmFoIHdha3R1IHBlbmdpcmltYW4uDQotIEd1bmFrYW4gc2lzdGVtIHJ1dGUgY2VyZGFzOiBJbXBsZW1lbnRhc2lrYW4gdGVrbm9sb2dpIHNlcGVydGkgR1BTIHRyYWNraW5nIGRhbiBzaXN0ZW0gbWFuYWplbWVuIHBlbmdpcmltYW4gYmVyYmFzaXMgZGF0YSB1bnR1ayBtZW5jYXJpIHJ1dGUgeWFuZyBsZWJpaCBlZmlzaWVuLiBTaXN0ZW0gaW5pIGJpc2EgbWVuZ3VyYW5naSB3YWt0dSB0ZW1wdWggZGFuIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbi4NCg0KMi4gTmVnb3NpYXNpIEJpYXlhIFRyYW5zcG9ydGFzaQ0KDQotIFRpbmphdSBrb250cmFrIHRyYW5zcG9ydGFzaTogV2lsYXlhaCBUZW5nYWggbWVtaWxpa2kgYmlheWEgcGVyIHVuaXQgeWFuZyBjdWt1cCB0aW5nZ2ksIHlhaXR1IFJwIDE0LjAwMC4gU2ViYWlrbnlhIG1lbGFrdWthbiBuZWdvc2lhc2kgZGVuZ2FuIHBlbnllZGlhIGphc2EgdHJhbnNwb3J0YXNpIHVudHVrIG1lbmRhcGF0a2FuIHRhcmlmIGxlYmloIHJlbmRhaCBhdGF1IG1lbmdndW5ha2FuIGFsdGVybmF0aWYgbW9kYSB0cmFuc3BvcnRhc2kgeWFuZyBsZWJpaCBtdXJhaCwgc2VwZXJ0aSBrZXJldGEgYXBpIGF0YXUgdHJhbnNwb3J0YXNpIGxhdXQgdW50dWsgamFyYWsgamF1aC4NCi0gUGVydGltYmFuZ2thbiBwZW5nZ3VuYWFuIGtlbmRhcmFhbiB5YW5nIGxlYmloIGJlc2FyOiBKaWthIG1lbXVuZ2tpbmthbiwgZ3VuYWthbiBrZW5kYXJhYW4gZGVuZ2FuIGthcGFzaXRhcyBsZWJpaCBiZXNhciB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIHBlciB1bml0IGJhcmFuZyB5YW5nIGRpYW5na3V0Lg0KDQozLiBQZW5nZWxvbXBva2FuIFBlbmdpcmltYW4NCg0KLSBHYWJ1bmdrYW4gcGVuZ2lyaW1hbiBiYXJhbmc6IE1lbmdpbmdhdCBqdW1sYWggYmFyYW5nIHlhbmcgZGlraXJpbSBjdWt1cCBiZXNhciAobWlzYWxueWEgMjUwIHVuaXQgZWxla3Ryb25payBkYW4gMzUwIHVuaXQgcGFrYWlhbiksIG1lbmdnYWJ1bmdrYW4gcGVuZ2lyaW1hbiB1bnR1ayBtZW5ndXJhbmdpIGZyZWt1ZW5zaSBwZW5naXJpbWFuIGRhbiBtZW1ha3NpbWFsa2FuIGthcGFzaXRhcyBrZW5kYXJhYW4gZGFwYXQgbWVuZ3VyYW5naSBiaWF5YSBvcGVyYXNpb25hbC4NCi0gT3B0aW1hbGlzYXNpIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gdm9sdW1lIGJhcmFuZzogSmlrYSBtZW11bmdraW5rYW4sIGtpcmlta2FuIGJhcmFuZyBkYWxhbSBqdW1sYWggYmVzYXIga2Ugd2lsYXlhaCB5YW5nIHNhbWEgYXRhdSBiZXJkZWthdGFuIHVudHVrIG1lbWFrc2ltYWxrYW4gcGVuZ2d1bmFhbiBhcm1hZGEgdHJhbnNwb3J0YXNpLg0KDQo0LiBFdmFsdWFzaSBXYWt0dSBQZW5naXJpbWFuDQoNCi0gS3VyYW5naSB3YWt0dSBwZW5naXJpbWFuIGRlbmdhbiBtZW5jYXJpIGFsdGVybmF0aWYgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGNlcGF0IGF0YXUgZWZpc2llbiwgbWlzYWxueWEgbWVuZ2d1bmFrYW4gdHJhbnNwb3J0YXNpIGRhcmF0IHlhbmcgbGViaWggY2VwYXQgdW50dWsgcGVuZ2lyaW1hbiBqYXJhayBkZWthdCBkYW4gdHJhbnNwb3J0YXNpIHVkYXJhIHVudHVrIHBlbmdpcmltYW4gamFyYWsgamF1aC4NCi0gUGVydGltYmFuZ2thbiBwZW5naXJpbWFuIGxlYmloIGF3YWw6IERlbmdhbiBtZW1wZXJ0aW1iYW5na2FuIHByb3NlcyBkaXN0cmlidXNpIHlhbmcgbGViaWggYXdhbCwgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGNlcGF0IGJpc2EgbGViaWggZWZpc2llbi4gSW5pIGFrYW4gbWVuZ3VyYW5naSBrZW11bmdraW5hbiBrZXRlcmxhbWJhdGFuIGRhbiBtZW5pbmdrYXRrYW4gcGVuZ2Vsb2xhYW4gd2FrdHUuDQoNCjUuIFBlbmdndW5hYW4gVGVrbm9sb2dpIGRhbiBEYXRhDQoNCi0gSW1wbGVtZW50YXNpIElvVCBkYW4gZGF0YSByZWFsLXRpbWU6IERlbmdhbiBtZW1hbmZhYXRrYW4gdGVrbm9sb2dpIEludGVybmV0IG9mIFRoaW5ncyAoSW9UKSBwYWRhIGtlbmRhcmFhbiBwZW5naXJpbWFuIGRhbiBtZW1hbnRhdSBkYXRhIHBlbmdpcmltYW4gc2VjYXJhIHJlYWwtdGltZSwgZGFwYXQgZGlpZGVudGlmaWthc2kgZGFuIGRpYXRhc2kgaGFtYmF0YW4taGFtYmF0YW4geWFuZyB0ZXJqYWRpIHNlbGFtYSBwZW5naXJpbWFuLg0KLSBBbmFsaXNpcyBkYXRhIHVudHVrIHBvbGEgcGVuZ2lyaW1hbjogRGVuZ2FuIG1lbmdhbmFsaXNpcyBkYXRhIHBlbmdpcmltYW4sIHBlcnVzYWhhYW4gYmlzYSBtZW5nZXRhaHVpIHBvbGEgd2FrdHUgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGxhbWJhdCBkYW4gbGViaWggbWFoYWwsIHNlcnRhIG1lbmdpZGVudGlmaWthc2kgZmFrdG9yIHlhbmcgbWVtcGVyYnVydWsgZWZpc2llbnNpLg0KDQojIyMjIDIuMi4yLjIgVGluZGFrYW4gTGFuZ2thaCBCZXJpa3V0bnlhDQotIEF1ZGl0IFBlbmdpcmltYW46IExha3VrYW4gYXVkaXQgc2VjYXJhIGJlcmthbGEgdGVyaGFkYXAgYmlheWEgZGFuIHdha3R1IHBlbmdpcmltYW4gZGkgd2lsYXlhaCBUZW5nYWguDQotIFBlbGF0aWhhbiBQZW5nZW11ZGkgZGFuIFBla2VyamE6IFBlbGF0aWhhbiB1bnR1ayBwZW5nZW11ZGkgZGFuIHBla2VyamEgbG9naXN0aWsgdW50dWsgbWVtYWtzaW1hbGthbiBlZmlzaWVuc2kgZGFsYW0gcGVtdWF0YW4gYmFyYW5nIGRhbiBwZW5nZ3VuYWFuIGphbHVyIHRyYW5zcG9ydGFzaSB5YW5nIG9wdGltYWwuDQoNCiMjIyMgMi4yLjIuMyBIYXJhcGFuDQpEZW5nYW4gbWVuZXJhcGthbiBsYW5na2FoLWxhbmdrYWggaW5pLCBkaWhhcmFwa2FuIGJpYXlhIHBlciB1bml0IGRpIHdpbGF5YWggVGVuZ2FoIGRhcGF0IGRpdHVydW5rYW4sIHNlcnRhIHdha3R1IHBlbmdpcmltYW4gZGFwYXQgbGViaWggc2luZ2thdCwgc2VoaW5nZ2EgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBrZXNlbHVydWhhbi4NCg0KIyBSZWZlcmVuc2kNCmh0dHBzOi8vYm9va2Rvd24ub3JnL2RzY2llbmNlbGFicy9zdGF0aXN0aWthX2Rhc2FyL19ib29rL1VrdXJhbl9QZW55ZWJhcmFuX0RhdGEuaHRtbA==