PRATIKUM STATISTIKA DASAR

Ukuran Pemusatan Data

Logo


Praktikum 1 :

Buatkanlah secara manual dan visualisasi ukuran pemusatan untuk data kelompok.

Ukuran Pemusatan Untuk Data Kelompok

A. Definisi Mean (Rata-Rata)

Mean adalah nilai rata-rata dari beberapa buah data.Nilai mean dapat ditentukan dengan membagi jumlah data dengan banyakya data.Mean adalah sebuah rata-rata dari data yang diperoleh berupa angka.Mean adalah ā€œjumlah nilai-nilai dibagi dengan jumlah individuā€. Mean (rata-rata) merupakan suatu ukuran pemusatan data.Mean suatu data juga merupakan statistik karena mampu menggambarkan bahwa data tersebut berada pada kisaran mean data tersebut.Mean tidak dapat digunakan sebagai ukuran pemusatan untuk jenis data nominal dan ordinal.

Langkah-langkah menghitung mean untuk data kelompok :

1. Tentukan interval kelas dari data yang diberikan (jika data sudah dikelompokkan dalam tabel frekuensi).

2. Hitung titik tengah (kelas tengah) untuk setiap kelas. Titik tengah kelas dapat dihitung dengan rumus:

\[ \text{Nilai Tengah} = \dfrac{\text{Tepi bawah kelas} + \text{Tepi atas kelas}}{2} \]

3. Kalikan frekuensi tiap kelas dengan titik tengahnya (kelas tengah).

4.Jumlahkan hasil perkalian frekuensi dan titik tengah untuk mendapatkan total

\[ \sum f \cdot x \]

  • \(f\) = Frekuensi
  • \(x\) = Nilai Tengah

5. Jumlahkan semua frekuensi (total frekuensi) untuk mendapatkan
\[ \sum f \] 6. Hitung mean dengan rumus:

\[ \text{Mean} = \frac{\sum f \cdot x}{\sum f} \]

Contoh Soal:

Berikut adalah data nilai ujian matematika dari 50 siswa yang dikelompokkan dalam tabel distribusi frekuensi:

Nilai (kelas) Frekuensi
50-59 5
60-69 10
70-79 15
80-89 12
90-99 8

Langkah 1: Hitung Titik Tengah \(xi\)

Titik tengah \(xi\) dihitung dengan:

\[ \text{Titik Tengah} = \dfrac{\text{Batas bawah } + \text{Batas atas }}{2} \] Hasil:

\[ \text{Untuk} \ 50-59 = \frac{50 + 59}{2} = 54.5 \] \[ \text{Untuk} \ 60-69 = \frac{60 + 69}{2} = 64.5 \] \[ \text{Untuk} \ 70-79 = \frac{70 + 79}{2} = 74.5 \] \[ \text{Untuk} \ 80-89 = \frac{80 + 89}{2} = 84.5 \] \[ \text{Untuk} \ 90-99 = \frac{90 + 99}{2} = 94.5 \]

Langkah 2:Kalikan \(xi\) dengan \(f\)

\[ xi \cdot f \] Hasil perhitungan:

\[ 54,5 \cdot 5 = 272,5\]

\[ 64,5 \cdot 10= 645,0\]

\[ 74,5 \cdot 15= 1117,5\]

\[ 84,5 \cdot 12= 1014,0\]

\[ 94,5 \cdot 8= 756,0\]

Langkah 3: Jumlahkan semua \(xi.\)\(f\) dan \(f\)

\[ \sum (xi \cdot f)=272,5+645,0+1117,5+1014,0+756,0=3805,0 \]

\[ \sum f=5+10+15+12+8=50 \]

Langkah 4: Gunakan Rumus Mean

\[ \text{Mean} = \frac{\sum (xi \cdot f) }{\sum f} \]

\[ \text{Mean} =3805,0 \frac 50=76,1 \]

Hasilnya:Mean ujian adalah 76,1

Visualisasi Data Menggunakan Bloxpot

B. Median (Nilai Tengah)

Median adalah ukuran pemusatan data yang menunjukkan nilai tengah dari suatu kumpulan data yang telah diurutkan. Jika data berbentuk kelompok (disajikan dalam tabel distribusi frekuensi), median ditentukan berdasarkan kelas median, yaitu kelas yang mengandung posisi nilai tengah.

Median digunakan untuk memahami distribusi data tanpa dipengaruhi oleh nilai ekstrem (outlier).

Rumus Median untuk Data Kelompok

Rumus median untuk data kelompok adalah:

\[ \text{Median} = L + (\frac{\frac{n}{2} - F}{fm}) \cdot c \]

Penjelasan Simbol:

  • \(L\): Tepi bawah kelas median.
  • \(n\): Total frekuensi(jumlah seluruh data).
  • \(F\): Frekuensi kumulatif sebelum kelas median.
  • \(fm\): Frekuensi kelas median.
  • \(c\): Lebar kelas (selisih antara batas atas dan batas bawah kelas).

Langkah-Langkah Menghitung Median Data Kelompok

1. Tentukan Total Frekuensi \(n\)

jumlahkan seluruh frekuensi pada tabel frekuensi.

2. Hitung \(n\)/\(2\)

Bagi total frekuensi menjadi dua untuk menentukan posisi nilai tengah.

3. Cari Kelas Median

  • Tentukan kelas median,yaitu kelas yang mengandung nilai ke-\(n\)/\(2\)
  • Untuk menemukannya,hitung frekuensi kumulatif (jumlah frekuensi dari awal hingga kelas tertentu) sampai nilai kumulatif pertama kali \(>\)\(n\)/\(2\)

4. Tentukan Elemen Penting

  • \(L\): Tepi bawah kelas median.
  • \(F\): frekuensi kumulatif sebelum kelas median.
  • \(fm\): Frekuensi kelas median.
  • \(c\): Lebar kelas (umumnya sama untuk semua).

5. Gunakan Rumus Median Subsitusikan semua nilai ke rumus:

\[ \text{Median} = L (\frac{\frac{n}{2} - F}{fm}) \cdot c \] 6. Hitung dan Interpretasikan

Selesaikan perhitungan untuk mendapatkan nilai median.

Contoh perhitungan median

Interval Kelas Frekuensi
10-15 5
15-20 10
20-25 8
25-30 5
30-35 2

1. Total Frekuensi \(n\)

\[n=5+10+8+5+2=30\]

2.Hitung \(n\)

\[ n/2=30/2=15\]

3.Cari Kelas Median:

Frekuensi kumulatif:

\[ 10-15:5\] \[ 15-20:5+10=15\] \[ 20-25:15+8=23\] Nilai \(n\)/\(2\)= \(15\) terdapat pada kelas \(15-20\)

4. Elemen Penting:

  • \(L\): \(15\) (Tepi bawah kelas median).
  • \(F\): \(5\) (frekuensi kumulatif sebelum kelas median)
  • \(fm\):\(10\) () Frekuensi kelas median)
  • \(c\): \(5\) (Lebar kelas)

5. Gunakan Rumus

\[ \text{Median} = 15 + (\frac{{15} - 5}{10}) \cdot 5 \] \[ \text{Median} =15 + (\frac{{10} }{10}) \cdot 5 \] \[ \text{Median} =15 + 5 =20 \]

6. Hasil:

Median data kelompok adalah \(20\)

Visualisasi Data Boxplot

C. Modus (Nilai yang sering muncul)

Modus adalah nilai atau kelas data yang paling sering muncul dalam suatu distribusi data. Dalam data kelompok, modus dihitung menggunakan rumus khusus berdasarkan kelas dengan frekuensi tertinggi, yang disebut kelas modus.

Modus sering digunakan dalam statistik untuk mengetahui nilai yang paling sering muncul dalam data, dan berguna untuk analisis pola atau tren dalam suatu distribusi.

Rumus Modus untuk Data Kelompok

\[ \text{Modus} = Mo = Tb + \left( \frac{d_1}{d_1 + d_2} \right) \cdot p \]

Penjelasan Simbol:

  • \(Mo\):Modus(nilai data yang paling sering muncul).
  • \(Tb\): Tepi bawah kelas modus(batas bawah kelas modus dikurangi \(0.5\) jika data kontinu)
  • \(d_1\):Selisih frekuensi kelas modus(\(f_m\)) dengan frekuensi kelas sebelumnya (\(fsebelum\))

\[d_1=fm-fsebelum\]

  • \(d_2\): Selisih frekuensi kelas modus\(fm\) dengan frekuensi kelas setelahnya \(fsesudah\)

\[d_2=fm-fsesudah\]

  • \(p\): Lebar kelas (selisih anatara batas dan batas bawah kelas).

Langkah-langkah Menghitung Modus

  1. Identifikasi Kelas Modus cari kelas dengan frekuensi tertinggi dalam tabel distribusi frekuensi.ini disebut kelas modus

  2. Tentukan Elemen-Elemen dalam Rumus:

  • Tepi bawah kelas modus (\(Tb\)):Hitung tepi bawah kelas modus dengan mengurangi\(0.5\) dari batas bawah kelas modus.
  • \(d_1\): Hitung selisih antara frekuensi kelas modus(\(fm\)) dengan frekuensi kelas sebelumnya (\(fsebelum\)).
  • \(d_2\): Hitung selisih antara frekuensi kelas modus (\(fm\)) dengan frekuensi kelas setelahnya (\(fsesudah\)).
  • Lebar kelas (\(p\)): Hitung selisih batas atas dan batas bawah kelas.

Subsitusi Nilai ke dalam Rumus:

Masukkan nilai \(Tb\),\(d_1\).\(d_2\),dan\(p\) ke dalam rumus untuk mendapatkan nilai modus

Contoh Perhitungan Modus

Kelas Frekuensi
50-59 5
60-69 10
70-79 15
80-89 12
90-99 8
Langkah 1: Identifikasi Kelas Modus

Kelas dengan frekuensi tertinggi adalah \(70-79\) (\(fm=15\)). Jadi,kelas modus adalah \(70-79\)

Langkah 2: Hitung Elemen-Elemen Penting
  • \(Tb\): Tepi bawah kelas modus\(=70-0.5=69.5\)
  • \(d_1\):\(fm-fsebelum=15-10=5\)
  • \(d_2\):\(fm-fsesudah=15-12=3\)
  • \(p\): Lebar kelas\(=79-70+1=10\)
Langkah 3: Substitusi ke dalam Rumus

\[ \text Mo = 69.5 + \left( \frac{d_1}{d_1 + d_2} \right) \cdot p \]

\[ \text Mo = 69.5 + \left( \frac{5}{5 + 3} \right) \cdot 10 \]

\[ \text Mo = 69.5 + \left( \frac{{5} }{8} \right) \cdot 10 \]

\[ \text Mo = 69.5 + 6.25=75.75 \]

Hasil Akhir

Modus data kelompok adalah \(75.75\)

Visualisasi Data menggunakan Boxplot

Praktikum 2

Carilah contoh sederhana yang menggunakan ukuran pemusatan dalam studi kasus

Contoh sederhana dalam ukuran pemusatan data kelompok

A. Bisnis

Studi Kasus: Analisis Penjualan Harian Sebuah Toko Retail

Sebuah toko retail ingin mengetahui rata-rata pendapatan harian selama satu bulan terakhir (30 hari) untuk membantu menentukan target penjualan bulan depan. Data pendapatan harian dikelompokkan dalam tabel distribusi frekuensi berikut:

Pendapatan(dalam juta Rp) Frekuensi(hari)
10-15 5
15-20 10
20-25 8
25-30 5
30-35 2

Menghitung Ukuran Pemusatan

1.Mean (rata-Rata)

Menggunakan rumus rata-rata untuk data kelompok:

\[ {x} = \frac{\sum f \cdot x}{\sum f} \] Dimana \(x\) adalah titik tengah kelas \(xi\)

  1. Hitung titik tengah \(xi\) untuk setiap kelas:

\[ 10-15: (10+15)/2=12.5\] \[ 15-20: (15+20)/2=17.5\] \[ 20-25: (20+25)/2=22.5\] \[ 25-30: (25+30)/2=27.5\] \[ 30-35: (30+35)/2=32.5\] 2. Kalikan frekuensi \(f\) dengan titik tengah \(xi\)

Kelas Frekuensi \((f)\) Titik Tengah \((xi)\) \(f\cdot xi\)
10-15 5 12.5 62.5
15-20 10 17.5 175.0
20-25 8 22.5 180.0
25-30 5 27.5 137.5
30-35 2 32.5 65.0
  1. Jumlahkan:

\[\sum f=5+10+8+5+2=30 \] \[ \sum (f \cdot x)=62.5+175.0+180.0+137.5+65.0=620.0 \]

  1. Hitung Mean: \[ \ {x} = \frac{{620.} 0}{30} =20.67 \]

Hasil: Mean\(=20.67juta Rp\)

2.Median

\[ \text{Median} = L + (\frac{\frac{n}{2} - F}{fm}) \cdot c \] Langkah-langkah:

  1. Cari kelas median:
  • Total frekuensi \(n=30\)
  • \(\frac{n}{2} = 15\), jadi kelas median adalah \(15-20\) (karena frekuensi kumulatif hingga kelas ini mencakup nilai ke-15)
  1. Identifikasi elemen rumus:
  • \(L\): Tepi bawah kelas median\(=15-0.5=14.5\)
  • \(F\): frekuensi kumulatif sebelum kelas median\(5\)
  • \(fm\): Frekuensi kelas median\(=10\)
  • \(c\): Lebar kelas\(20-15=5\)
  1. substitusi nilai ke rumus:

\[ \text{Median} = 14.5 + (\frac{{15} - 5}{10}) \cdot 5 \]

\[ \text{Median} =14.5 + (\frac{{10} }{10}) \cdot 5 \] \[ \text{Median} =14.5 + 5 =19.5 \]

Hasil Median\(=19.5 juta Rp\)

3. Menghitung Modus

Rumus: \[ \text{Modus} = L + \frac{f_1-f_0}{(f_1 + f_0)+(f_1 + f_2)} \cdot c \]

Langkah-langkah:

  1. Cari Kelas Modus:
  • Kelas dengan frekuensi tertinggi adalah \(15-20\) (\(f_1=10\)).
  1. Identifikasi elemen rumus:
  • \(L\): Tepi bawah kelas modus \(15-0.5=14.5\)
  • \(f_0\): Frekuensi kelas sebelum \(=5\)
  • \(f_1\): Frekuensi kelas modus \(=10\)
  • \(f_2\): Frekuensi Kelas setelah \(=8\)
  • \(c\): Lebar kelas\(=20-15=15\)
  1. Substitusi nilai ke rumus

\[ \text{Modus} = 14.5 + \left( \frac{10-15}{(10-5) + (10-8)} \right) \cdot 5 \]

\[ \text{Modus} = 14.5 + \left( \frac{5} {5+2} \right) \cdot 5 \]

\[ \text{Modus} = 14.5 + \left( \frac{5} {7} \right) \cdot 5 \]

\[ \text{Modus} =14.5 + 3.57 =18.07 \]

Hasil: Modus \(=18.07\)juta Rp

Kesimpulan

  • Mean:\(20.67\) juta Rp
  • Median:\(19.5\) juta Rp
  • Modus:\(18.07\) juta Rp

B. Kesehatan

Studi kasus:Tinggi Badan Siswa SMP

Sebuah sekolah SMP ingin menganalisis data tinggi badan siswa kelas 7 untuk mengetahui distribusi dan ukuran pemusatannya. Berikut adalah data tinggi badan (dalam cm) dari 50 siswa yang telah dikelompokkan dalam tabel distribusi frekuensi:

Tinggi Badan Frekuensi
140-144 5
145-149 10
150-154 15
155-159 12
160-164 8

1: Hitung Mean (Rata-Rata) Tinggi Badan

Gunakan rumus mean untuk data kelompok:

\[ {x} = \frac{\sum f \cdot xi}{\sum f} \]

  • Di mana \(xi\) adalah titik tengah dari setiap kelas

\[ \ 140-144: \frac{{140} + 144}{2}) = 142 \] \[ \ 145-149: \frac{{145} + 149}{2}) = 147 \] \[ \ 150-154: \frac{{150} + 154}{2}) = 152 \] \[ \ 155-159: \frac{{155} + 159}{2}) = 157 \] \[ \ 160-164: \frac{{160} + 164}{2}) = 162 \]

2.Kalikan frekuensi \(f\) dengan titik tengah \(xi\)

Kelas Tinggi Badan Frekuensi \((f)\) Titik Tengah \((xi)\) \(f\cdot xi\)
140-144 5 142 710
145-149 10 147 1470
150-154 15 152 2280
155-159 12 157 1884
160-164 8 162 1296

3. Jumlahkan:

\[\sum f=5+10+15+12+8=50 \]

\[ \sum f \cdot xi=710+1470+2280+1884+1296=7640 \]

4. Hitung Mean:

\[ {x} = \frac{\sum f \cdot xi}{\sum f}=\frac{7640}{50}=152.8 \]

Hasil:Mean\(=152.8\)

2. Menghitung Median

Rumus:

\[ \text{Median} = L + (\frac{\frac{n}{2} - F}{fm}) \cdot c \] 1. Cari kelas median

  • Total frekuensi \(n=50\)

  • \(\frac{n}{2}\) = \(\frac{50}{2}\)= 25

  • Frekuensi kumulatif

\[ 140-144:5\] \[ 145-149:5+10=15\] \[ 150-154:15+15=30\] - Kelas median adalah\(150-154\) (Karena kumulatif hingga kelas ini mencakup nilai ke-25)

2. Identifikasi elemen rumus

  • \(L\): Tepi bawah kelas median\(=150-0.5=149.5\)
  • \(F\): frekuensi kumulatif sebelum kelas median\(15\)
  • \(f_m\): Frekuensi kelas median\(=15\)
  • \(c\): Lebar kelas\(154-150=5\)

Substitusi nilai ke rumus:

\[ \text{Median} = 149.5 + (\frac{{25} - 15}{15}) \cdot 5 \] \[ \text{Median} =149.5 + (\frac{{10} }{15}) \cdot 5 \]

\[ \text{Median} = 149.5 + 3.33=152.83 \]

Hasil:Median\(=152.83\)

Menghitung Modus

Rumus:

\[ \text{Modus} = L + \frac{f_1-f_0}{(f_1 + f_0)+(f_1 + f_2)} \cdot c \] 1. Cari kelas modus:

  • Kelas dengan frekuensi tertinggi adalah \(150-154\) (\(f_1=15\)).

2. Identifikasi elemen rumus:

  • \(L\): Tepi bawah kelas modus \(150-0.5=149.5\)
  • \(f_0\): Frekuensi kelas sebelum \(=10\)
  • \(f_1\): Frekuensi kelas modus \(=15\)
  • \(f_2\): Frekuensi Kelas setelah \(=12\)
  • \(c\): Lebar kelas\(=154-150=5\)

3. Substitusi nilai ke rumus

\[ \text{Modus} = 149.5 + \left( \frac{15-10}{(15-10) + (15-12)} \right) \cdot 5 \]

\[ \text{Modus} = 149.5 + \left( \frac{5} {5+3} \right) \cdot 5 \]

\[ \text{Modus} = 149.5 + \left( \frac{5} {8} \right) \cdot 5 \]

\[ \text{Modus} =149.5 + 3.13 =152.63 \]

Hasil:Modus\(=152.63 cm\)

C. Pendidikan

Studi Kasus: Rata-rata Waktu Belajar Siswa

Sebuah sekolah ingin mengetahui rata-rata waktu belajar harian siswa di rumah selama satu minggu. Berikut data waktu belajar harian (dalam jam) yang telah dikelompokkan:

Waktu Belajar (jam) Frekuensi
0-1 4
1-2 6
2-3 10
3-4 15
4-5 8
5-6 7

1: Hitung Mean (Rata-Rata) Tinggi Badan

Gunakan rumus mean untuk data kelompok:

\[ {x} = \frac{\sum f \cdot xi}{\sum f} \]

  • Di mana \(xi\) adalah titik tengah dari setiap kelas

\[ \ 0-1: \frac{{0} + 1}{2} = 0.5 \] \[ \ 1-2: \frac{{1} + 2}{2} = 1.5 \] \[ \ 2-3: \frac{{2} + 3}{2} = 2.5 \] \[ \ 3-4: \frac{{3} + 4}{2} = 3.5 \] \[ \ 4-5: \frac{{4} + 5}{2} = 4.5 \] \[ \ 5-6: \frac{{5} + 6}{2} = 5.5 \]

2.Kalikan frekuensi \(f\) dengan titik tengah \(xi\)
Waktu Belajar (jam) Frekuensi \((f)\) Titik Tengah \((xi)\) \(f\cdot xi\)
0-1 4 0.5 2.0
1-2 6 1.5 9.0
2-3 10 2.5 25.0
3-4 15 3.5 52.5
4-5 8 4.5 36.0
5-6 7 5.5 38.5
3. Jumlahkan:

\[\sum f=4+6+10+15+8+7=50 \]

\[ \sum f \cdot xi=2.0+9.0+25.0+52.5+36.0+38.5=163.0 \]

4. Hitung Mean:

\[ {x} = \frac{\sum f \cdot xi}{\sum f}=\frac{163.0}{50}=3.26 \] Hasil:Mean\(=3.26 jam\)

2. Menghitung Median

Rumus:

\[ \text{Median} = L + (\frac{\frac{n}{2} - F}{fm}) \cdot c \]

1. Cari kelas median

  • Total frekuensi \(n=50\)

  • \(\frac{n}{2}\) = \(\frac{50}{2}\)= 25

  • Frekuensi kumulatif

\[ 0-1:4\] \[ 1-2:4+6=10\] \[ 2-3:10+10=20\] \[ 3-4:20+15=35\]

  • Kelas median adalah\(3-4\)(karena kumulatif hingga kelas ini mencakup nilai ke-25)

2. Identifikasi elemen rumus

  • \(L\): Tepi bawah kelas median\(=3-0.5=25.5\).
  • \(F\): frekuensi kumulatif sebelum kelas median\(20\).
  • \(f_m\): Frekuensi kelas median\(=15\).
  • \(c\): Lebar kelas\(1\).

Substitusi nilai ke rumus:

\[ \text{Median} = 2.5 + (\frac{{25} - 20}{15}) \cdot 1 \]

\[ \text{Median} =25.5 + (\frac{{5} }{15}) \]

\[ \text{Median} = 25.5 + 0.33=2.83 \]

Hasil:Median\(=2.83 jam\)

Menghitung Modus

Rumus:

\[ \text{Modus} = L + \frac{f_1-f_0}{(f_1 + f_0)+(f_1 + f_2)} \cdot c \] 1. Cari kelas modus:

  • Kelas dengan frekuensi tertinggi adalah \(3-4\) (\(f_1=15\).

2. Identifikasi elemen rumus:

  • \(L\): Tepi bawah kelas modus \(3-0.5=2.5\)
  • \(f_0\): Frekuensi kelas sebelum \(=10\)
  • \(f_1\): Frekuensi kelas modus \(=15\)
  • \(f_2\): Frekuensi Kelas setelah \(=8\)
  • \(c\): Lebar kelas\(=1\)

3. Substitusi nilai ke rumus

\[ \text{Modus} = 2.5 + \left( \frac{15-10}{(15-10) + (15-8)} \right) \cdot 1 \]

\[ \text{Modus} = 2.5 + \left( \frac{5} {5+7} \right) \cdot \]

\[ \text{Modus} = 2.5 + \left( \frac{5} {12} \right) \cdot \]

\[ \text{Modus} =2.5 + 0.42 =2.92 \]

Hasil:ModusĀ (=2.92 jam)

REFERENSI

  1. DSCiencelabs. (n.d.). Ukuran pemusatan data. Diakses dari https://bookdown.org/dsciencelabs/statistika_dasar/_book/Ukuran_Pemusatan_Data.html

  2. Kumparan. (n.d.). Pengertian mean, median, modus, dan contohnya. Diakses dari https://kumparan.com/pengertian-dan-istilah/pengertian-mean-median-modus-dan-contohnya-21SaM5CcOIG

  3. Tempo. (n.d.). Pengertian dan rumus mean, median, modus beserta cara menghitungnya. Diakses dari https://www.tempo.co/politik/pengertian-dan-rumus-mean-median-modus-beserta-cara-menghitungnya-1167677

  4. Universitas Negeri Yogyakarta. (n.d.). Bab II: Kajian pustaka. Diakses dari https://eprints.uny.ac.id/36596/2/BAB%20II.pdf

LS0tDQp0aXRsZTogIlBSQVRJS1VNIFNUQVRJU1RJS0EgREFTQVIiDQoNCnN1YnRpdGxlOiAiVWt1cmFuIFBlbXVzYXRhbiBEYXRhIg0KDQphdXRob3I6IA0KICAtICIgRmlrYSBJcnNhbmRpIERlc3Z5YW50aSAoNTIyNDAwMDEzKSINCiAgDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIGlkPSJsb2dvLXV0YW1hIiBzcmM9ImZvdG8gZmlrYS5qcGciIGFsdD0iTG9nbyI+DQoNCg0KLS0tDQoNCg0KIyBQcmFrdGlrdW0gMSA6IA0KDQpCdWF0a2FubGFoIHNlY2FyYSBtYW51YWwgZGFuIHZpc3VhbGlzYXNpIHVrdXJhbiBwZW11c2F0YW4gdW50dWsgZGF0YSBrZWxvbXBvay4gDQoNCiMgVWt1cmFuIFBlbXVzYXRhbiBVbnR1ayBEYXRhIEtlbG9tcG9rDQoNCiMjIEEuIERlZmluaXNpIE1lYW4gKFJhdGEtUmF0YSkNCg0KTWVhbiBhZGFsYWggbmlsYWkgcmF0YS1yYXRhIGRhcmkgYmViZXJhcGEgYnVhaCBkYXRhLk5pbGFpIG1lYW4gZGFwYXQgZGl0ZW50dWthbiBkZW5nYW4gbWVtYmFnaSBqdW1sYWggZGF0YSBkZW5nYW4gYmFueWFreWEgZGF0YS5NZWFuIGFkYWxhaCBzZWJ1YWggcmF0YS1yYXRhIGRhcmkgZGF0YSB5YW5nIGRpcGVyb2xlaCBiZXJ1cGEgYW5na2EuTWVhbiBhZGFsYWggImp1bWxhaCBuaWxhaS1uaWxhaSBkaWJhZ2kgZGVuZ2FuIGp1bWxhaCBpbmRpdmlkdSIuDQpNZWFuIChyYXRhLXJhdGEpIG1lcnVwYWthbiBzdWF0dSB1a3VyYW4gcGVtdXNhdGFuIGRhdGEuTWVhbiBzdWF0dSBkYXRhIGp1Z2EgbWVydXBha2FuIHN0YXRpc3RpayBrYXJlbmEgbWFtcHUgbWVuZ2dhbWJhcmthbiBiYWh3YSBkYXRhIHRlcnNlYnV0IGJlcmFkYSBwYWRhIGtpc2FyYW4gbWVhbiBkYXRhIHRlcnNlYnV0Lk1lYW4gdGlkYWsgZGFwYXQgZGlndW5ha2FuIHNlYmFnYWkgdWt1cmFuIHBlbXVzYXRhbiB1bnR1ayBqZW5pcyBkYXRhIG5vbWluYWwgZGFuIG9yZGluYWwuDQoNCiMjIyMgTGFuZ2thaC1sYW5na2FoIG1lbmdoaXR1bmcgbWVhbiB1bnR1ayBkYXRhIGtlbG9tcG9rIDoNCg0KKjEuIFRlbnR1a2FuIGludGVydmFsIGtlbGFzIGRhcmkgZGF0YSB5YW5nIGRpYmVyaWthbiAoamlrYSBkYXRhIHN1ZGFoIGRpa2Vsb21wb2trYW4gZGFsYW0gdGFiZWwgZnJla3VlbnNpKS4qDQoNCioyLiBIaXR1bmcgdGl0aWsgdGVuZ2FoIChrZWxhcyB0ZW5nYWgpIHVudHVrIHNldGlhcCBrZWxhcy4gVGl0aWsgdGVuZ2FoIGtlbGFzIGRhcGF0IGRpaGl0dW5nIGRlbmdhbiBydW11czoqDQoNCiQkDQpcdGV4dHtOaWxhaSBUZW5nYWh9ID0gXGRmcmFje1x0ZXh0e1RlcGkgYmF3YWgga2VsYXN9ICsgXHRleHR7VGVwaSBhdGFzIGtlbGFzfX17Mn0NCiQkDQogDQoqMy4gS2FsaWthbiBmcmVrdWVuc2kgdGlhcCBrZWxhcyBkZW5nYW4gdGl0aWsgdGVuZ2FobnlhIChrZWxhcyB0ZW5nYWgpLioNCg0KKjQuSnVtbGFoa2FuIGhhc2lsIHBlcmthbGlhbiBmcmVrdWVuc2kgZGFuIHRpdGlrIHRlbmdhaCB1bnR1ayBtZW5kYXBhdGthbiB0b3RhbCoNCg0KJCQNClxzdW0gZiBcY2RvdCB4DQokJA0KDQotIFwoZlwpID0gRnJla3VlbnNpDQotIFwoeFwpID0gTmlsYWkgVGVuZ2FoDQoNCio1LiBKdW1sYWhrYW4gc2VtdWEgZnJla3VlbnNpICh0b3RhbCBmcmVrdWVuc2kpIHVudHVrIG1lbmRhcGF0a2FuKiAgICANCiQkDQpcc3VtIGYgDQokJA0KKjYuIEhpdHVuZyBtZWFuIGRlbmdhbiBydW11czoqDQoNCiQkDQpcdGV4dHtNZWFufSA9IFxmcmFje1xzdW0gZiBcY2RvdCB4fXtcc3VtIGZ9DQokJA0KIA0KIyMjIENvbnRvaCBTb2FsOg0KQmVyaWt1dCBhZGFsYWggZGF0YSBuaWxhaSB1amlhbiBtYXRlbWF0aWthIGRhcmkgNTAgc2lzd2EgeWFuZyBkaWtlbG9tcG9ra2FuIGRhbGFtIHRhYmVsIGRpc3RyaWJ1c2kgZnJla3VlbnNpOg0KDQogICBOaWxhaSAoa2VsYXMpICAgfCAgICAgIEZyZWt1ZW5zaSAgIHwNCiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfA0KICB8IDUwLTU5ICAgICB8IDUgICAgICAgICAgICAgICB8DQogIHwgNjAtNjkgICAgIHwgMTAgICAgICAgICAgICAgIHwgDQogIHwgNzAtNzkgICAgIHwgMTUgICAgICAgICAgICAgIHwgDQogIHwgODAtODkgICAgIHwgMTIgICAgICAgICAgICAgIHwNCiAgfCA5MC05OSAgICAgfCA4ICAgICAgICAgICAgICAgfA0KICANCiMjIyBMYW5na2FoIDE6IEhpdHVuZyBUaXRpayBUZW5nYWggXCh4aVwpDQoNClRpdGlrIHRlbmdhaCBcKHhpXCkgZGloaXR1bmcgZGVuZ2FuOg0KDQokJA0KXHRleHR7VGl0aWsgVGVuZ2FofSA9IFxkZnJhY3tcdGV4dHtCYXRhcyBiYXdhaCB9ICsgXHRleHR7QmF0YXMgYXRhcyB9fXsyfQ0KJCQNCkhhc2lsOg0KDQokJA0KXHRleHR7VW50dWt9IFwgNTAtNTkgPSBcZnJhY3s1MCArIDU5fXsyfSA9IDU0LjUNCiQkDQokJA0KXHRleHR7VW50dWt9IFwgNjAtNjkgPSBcZnJhY3s2MCArIDY5fXsyfSA9IDY0LjUNCiQkDQokJA0KXHRleHR7VW50dWt9IFwgNzAtNzkgPSBcZnJhY3s3MCArIDc5fXsyfSA9IDc0LjUNCiQkDQokJA0KXHRleHR7VW50dWt9IFwgODAtODkgPSBcZnJhY3s4MCArIDg5fXsyfSA9IDg0LjUNCiQkDQokJA0KXHRleHR7VW50dWt9IFwgOTAtOTkgPSBcZnJhY3s5MCArIDk5fXsyfSA9IDk0LjUNCiQkDQoNCiMjIyBMYW5na2FoIDI6S2FsaWthbiBcKHhpXCkgZGVuZ2FuIFwoZlwpDQoNCiQkDQp4aSBcY2RvdCBmDQokJA0KSGFzaWwgcGVyaGl0dW5nYW46DQoNCiAkJCA1NCw1IFxjZG90IDUgPSAyNzIsNSQkDQoNCiAkJCA2NCw1IFxjZG90IDEwPSA2NDUsMCQkDQoNCiAkJCA3NCw1IFxjZG90IDE1PSAxMTE3LDUkJA0KDQokJCA4NCw1IFxjZG90IDEyPSAxMDE0LDAkJA0KDQokJCA5NCw1IFxjZG90IDg9IDc1NiwwJCQgDQoNCiMjIyBMYW5na2FoIDM6IEp1bWxhaGthbiBzZW11YSBcKHhpLlwpXChmXCkgZGFuIFwoZlwpDQoNCiQkDQpcc3VtICh4aSBcY2RvdCBmKT0yNzIsNSs2NDUsMCsxMTE3LDUrMTAxNCwwKzc1NiwwPTM4MDUsMA0KJCQNCg0KDQoNCiQkDQpcc3VtIGY9NSsxMCsxNSsxMis4PTUwDQokJA0KDQogDQoNCiMjIyBMYW5na2FoIDQ6IEd1bmFrYW4gUnVtdXMgTWVhbiANCiANCiQkDQpcdGV4dHtNZWFufSA9IFxmcmFje1xzdW0gKHhpIFxjZG90IGYpIH17XHN1bSBmfQ0KJCQgDQoNCg0KJCQNClx0ZXh0e01lYW59ID0zODA1LDAgXGZyYWMgNTA9NzYsMQ0KJCQNCg0KDQpIYXNpbG55YTpNZWFuIHVqaWFuIGFkYWxhaCA3NiwxDQoNCiMjIyBWaXN1YWxpc2FzaSBEYXRhIE1lbmdndW5ha2FuIEJsb3hwb3QNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEluc3RhbGwgZGFuIGxvYWQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBrZWxvbXBvayBkZW5nYW4gb3V0bGllcg0KZGF0YSA8LSBjKHJlcCg1NC41LCA1KSxyZXAoNjQuNSwxMCksIHJlcCg3NC41LDE1KSwgcmVwKDg0LjUsMTIpLCByZXAoOTQuNSwgOCkpDQoNCm1lYW5fZGF0YSA8LSBtZWFuKGRhdGEpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgTmlsYWkgPSBjKGRhdGEpLA0KICBLZWxvbXBvayA9IHJlcChjKCJEYXRhIE1lYW4iKSwgDQogICAgICAgICAgICAgICAgIHRpbWVzID0gYyhsZW5ndGgoZGF0YSkpKQ0KICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgIA0KIyBNZW1idWF0IGJveHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5IGRlbmdhbiBvdXRsaWVycyBkaXRhbXBpbGthbg0KcGxvdCA8LSBwbG90X2x5KA0KICBkYXRhLCANCiAgeSA9IH5OaWxhaSwgDQogIGNvbG9yID0gfktlbG9tcG9rLA0KICBjb2xvcnMgPSBjKCJibHVlIiksDQogIHR5cGUgPSAiYm94IiwgDQogIGJveHBvaW50cyA9ICJvdXRsaWVycyIgICMgTWVuYW1waWxrYW4gdGl0aWsgb3V0bGllcnMNCikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJNZWFuIERhdGEgS2Vsb21wb2siLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGF0YSBNZWFuIiwNCiAgICAgICAgeSA9IG1lYW5fZGF0YSwNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWFuOiIsIHJvdW5kKG1lYW5fZGF0YSwgMSkpLA0KICAgICAgICBzaG93YXJyb3cgPSBUUlVFLA0KICAgICAgICBhcnJvd2hlYWQgPSAxDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KDQpgYGANCg0KDQoNCiAgIA0KDQojIyBCLiBNZWRpYW4gKE5pbGFpIFRlbmdhaCkNCg0KTWVkaWFuIGFkYWxhaCB1a3VyYW4gcGVtdXNhdGFuIGRhdGEgeWFuZyBtZW51bmp1a2thbiBuaWxhaSB0ZW5nYWggZGFyaSBzdWF0dSBrdW1wdWxhbiBkYXRhIHlhbmcgdGVsYWggZGl1cnV0a2FuLiBKaWthIGRhdGEgYmVyYmVudHVrIGtlbG9tcG9rIChkaXNhamlrYW4gZGFsYW0gdGFiZWwgZGlzdHJpYnVzaSBmcmVrdWVuc2kpLCBtZWRpYW4gZGl0ZW50dWthbiBiZXJkYXNhcmthbiBrZWxhcyBtZWRpYW4sIHlhaXR1IGtlbGFzIHlhbmcgbWVuZ2FuZHVuZyBwb3Npc2kgbmlsYWkgdGVuZ2FoLg0KDQpNZWRpYW4gZGlndW5ha2FuIHVudHVrIG1lbWFoYW1pIGRpc3RyaWJ1c2kgZGF0YSB0YW5wYSBkaXBlbmdhcnVoaSBvbGVoIG5pbGFpIGVrc3RyZW0gKG91dGxpZXIpLg0KDQojIyMjIFJ1bXVzIE1lZGlhbiB1bnR1ayBEYXRhIEtlbG9tcG9rDQoNClJ1bXVzIG1lZGlhbiB1bnR1ayBkYXRhIGtlbG9tcG9rIGFkYWxhaDoNCg0KJCQNClx0ZXh0e01lZGlhbn0gPSBMICsgKFxmcmFje1xmcmFje259ezJ9IC0gRn17Zm19KSBcY2RvdCAgYw0KJCQNCg0KDQpQZW5qZWxhc2FuIFNpbWJvbDoNCg0KLSBcKExcKTogVGVwaSBiYXdhaCBrZWxhcyBtZWRpYW4uDQotIFwoblwpOiBUb3RhbCBmcmVrdWVuc2koanVtbGFoIHNlbHVydWggZGF0YSkuDQotIFwoRlwpOiBGcmVrdWVuc2kga3VtdWxhdGlmIHNlYmVsdW0ga2VsYXMgbWVkaWFuLg0KLSBcKGZtXCk6IEZyZWt1ZW5zaSBrZWxhcyBtZWRpYW4uDQotIFwoY1wpOiBMZWJhciBrZWxhcyAoc2VsaXNpaCBhbnRhcmEgYmF0YXMgYXRhcyBkYW4gYmF0YXMgYmF3YWgga2VsYXMpLg0KDQojIyMgTGFuZ2thaC1MYW5na2FoIE1lbmdoaXR1bmcgTWVkaWFuIERhdGEgS2Vsb21wb2sgDQoNCioxLiBUZW50dWthbiBUb3RhbCBGcmVrdWVuc2kgXChuXCkqDQoNCmp1bWxhaGthbiBzZWx1cnVoIGZyZWt1ZW5zaSBwYWRhIHRhYmVsIGZyZWt1ZW5zaS4NCg0KKjIuIEhpdHVuZyBcKG5cKS9cKDJcKSoNCg0KQmFnaSB0b3RhbCBmcmVrdWVuc2kgbWVuamFkaSBkdWEgdW50dWsgbWVuZW50dWthbiBwb3Npc2kgbmlsYWkgdGVuZ2FoLg0KDQoqMy4gQ2FyaSBLZWxhcyBNZWRpYW4qDQoNCi0gVGVudHVrYW4ga2VsYXMgbWVkaWFuLHlhaXR1IGtlbGFzIHlhbmcgbWVuZ2FuZHVuZyBuaWxhaSBrZS1cKG5cKS9cKDJcKQ0KLSBVbnR1ayBtZW5lbXVrYW5ueWEsaGl0dW5nIGZyZWt1ZW5zaSBrdW11bGF0aWYgKGp1bWxhaCBmcmVrdWVuc2kgZGFyaSBhd2FsIGhpbmdnYSBrZWxhcyB0ZXJ0ZW50dSkgc2FtcGFpIG5pbGFpIGt1bXVsYXRpZiBwZXJ0YW1hIGthbGkgXCg+XClcKG5cKS9cKDJcKQ0KDQoqNC4gVGVudHVrYW4gRWxlbWVuIFBlbnRpbmcqDQoNCi0gXChMXCk6IFRlcGkgYmF3YWgga2VsYXMgbWVkaWFuLg0KLSBcKEZcKTogZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhbi4NCi0gXChmbVwpOiBGcmVrdWVuc2kga2VsYXMgbWVkaWFuLg0KLSBcKGNcKTogTGViYXIga2VsYXMgKHVtdW1ueWEgc2FtYSB1bnR1ayBzZW11YSkuIA0KDQoqNS4gR3VuYWthbiBSdW11cyBNZWRpYW4qDQpTdWJzaXR1c2lrYW4gc2VtdWEgbmlsYWkga2UgcnVtdXM6DQoNCiQkDQpcdGV4dHtNZWRpYW59ID0gTCAgKFxmcmFje1xmcmFje259ezJ9IC0gRn17Zm19KSBcY2RvdCAgYw0KJCQNCio2LiBIaXR1bmcgZGFuIEludGVycHJldGFzaWthbioNCg0KU2VsZXNhaWthbiBwZXJoaXR1bmdhbiB1bnR1ayBtZW5kYXBhdGthbiBuaWxhaSBtZWRpYW4uDQoNCiMjIyMgQ29udG9oIHBlcmhpdHVuZ2FuIG1lZGlhbg0KDQp8SW50ZXJ2YWwgS2VsYXMgICAgICAgICAgIHwgRnJla3VlbnNpICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfA0KfCAxMC0xNSAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICB8DQp8IDE1LTIwICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgIHwgDQp8IDIwLTI1ICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgIHwgDQp8IDI1LTMwICAgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgIHwNCnwgMzAtMzUgICAgICAgICAgICAgICAgICAgfCAyICAgICAgICAgICAgICAgfA0KDQojIyMjIDEuIFRvdGFsIEZyZWt1ZW5zaSBcKG5cKQ0KDQokJG49NSsxMCs4KzUrMj0zMCQkDQoNCiMjIyMgMi5IaXR1bmcgXChuXCkNCg0KJCQgbi8yPTMwLzI9MTUkJA0KDQojIyMjIDMuQ2FyaSBLZWxhcyBNZWRpYW46DQoNCkZyZWt1ZW5zaSBrdW11bGF0aWY6DQoNCiQkIDEwLTE1OjUkJA0KJCQgMTUtMjA6NSsxMD0xNSQkDQokJCAyMC0yNToxNSs4PTIzJCQgDQpOaWxhaSBcKG5cKS9cKDJcKT0gXCgxNVwpIHRlcmRhcGF0IHBhZGEga2VsYXMgXCgxNS0yMFwpDQoNCiMjIyMgNC4gRWxlbWVuIFBlbnRpbmc6DQoNCi0gXChMXCk6IFwoMTVcKSAoVGVwaSBiYXdhaCBrZWxhcyBtZWRpYW4pLg0KLSBcKEZcKTogXCg1XCkgKGZyZWt1ZW5zaSBrdW11bGF0aWYgc2ViZWx1bSBrZWxhcyBtZWRpYW4pDQotIFwoZm1cKTpcKDEwXCkgKCkgRnJla3VlbnNpIGtlbGFzIG1lZGlhbikNCi0gXChjXCk6IFwoNVwpIChMZWJhciBrZWxhcykNCg0KIyMjIyA1LiBHdW5ha2FuIFJ1bXVzDQoNCiQkDQpcdGV4dHtNZWRpYW59ID0gMTUgKyAgKFxmcmFje3sxNX0gLSA1fXsxMH0pIFxjZG90ICA1DQokJA0KJCQNClx0ZXh0e01lZGlhbn0gPTE1ICsgIChcZnJhY3t7MTB9IH17MTB9KSBcY2RvdCAgNQ0KJCQNCiQkDQpcdGV4dHtNZWRpYW59ID0xNSArIDUgPTIwDQokJA0KDQojIyMjIDYuIEhhc2lsOg0KDQpNZWRpYW4gZGF0YSBrZWxvbXBvayBhZGFsYWggXCgyMFwpDQoNCiMjIyMgVmlzdWFsaXNhc2kgRGF0YSBCb3hwbG90DQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgRGF0YTogZHVhIHNrZW5hcmlvLCBzYXR1IGRlbmdhbiBvdXRsaWVycywgc2F0dSB0YW5wYSBvdXRsaWVycw0KZGF0YV9kZW5nYW5fb3V0bGllcnMgPC0gYygxMi41LCAxNy41LCAyMi41LCAyNy41LCAzMi41KSAgIyBEZW5nYW4gb3V0bGllcnMgKDk1IGRhbiAxMDUpDQpkYXRhX3RhbnBhX291dGxpZXJzIDwtIGMoMTIuNSwgMTcuNSwgMjIuNSwgMjcuNSkgICAgICAgICAgICAjIFRhbnBhIG91dGxpZXJzIChoYW55YSBkYXRhIGFzbGkpDQoNCiMgTWVuZ2hpdHVuZyBtZWRpYW4gdW50dWsga2VkdWEgZGF0YXNldA0KbWVkaWFuX2Rlbmdhbl9vdXRsaWVycyA8LSBtZWRpYW4oZGF0YV9kZW5nYW5fb3V0bGllcnMpDQptZWRpYW5fdGFucGFfb3V0bGllcnMgPC0gbWVkaWFuKGRhdGFfdGFucGFfb3V0bGllcnMpDQoNCiMgTWVuZ2dhYnVuZ2thbiBkYXRhIGtlIGRhbGFtIHNhdHUgZGF0YSBmcmFtZSB1bnR1ayB2aXN1YWxpc2FzaQ0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBOaWxhaSA9IGMoZGF0YV9kZW5nYW5fb3V0bGllcnMsIGRhdGFfdGFucGFfb3V0bGllcnMpLA0KICBLZWxvbXBvayA9IHJlcChjKCJEZW5nYW4gT3V0bGllcnMiLCAiVGFucGEgT3V0bGllcnMiKSwgDQogICAgICAgICAgICAgICAgIHRpbWVzID0gYyhsZW5ndGgoZGF0YV9kZW5nYW5fb3V0bGllcnMpLCBsZW5ndGgoZGF0YV90YW5wYV9vdXRsaWVycykpKQ0KKQ0KDQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBNZW1idWF0IGJveHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5IGRlbmdhbiB3YXJuYSBrdXN0b20NCnBsb3QgPC0gcGxvdF9seSgNCiAgZGF0YSwgDQogIHkgPSB+TmlsYWksIA0KICBjb2xvciA9IH5LZWxvbXBvaywgDQogIHR5cGUgPSAiYm94IiwgDQogIGJveHBvaW50cyA9ICJvdXRsaWVycyIsICAjIE1lbmFtcGlsa2FuIHRpdGlrIG91dGxpZXJzDQogIGNvbG9ycyA9IGMoIkRlbmdhbiBPdXRsaWVycyIgPSAicGluayIsICJUYW5wYSBPdXRsaWVycyIgPSAiYmx1ZSIpICAjIFdhcm5hIGt1c3RvbQ0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlbmdhcnVoIE91dGxpZXJzIHRlcmhhZGFwIE1lZGlhbiIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk5pbGFpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIktlbG9tcG9rIiksDQogICAgYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgICAgIyBNZWRpYW4gYW5ub3RhdGlvbnMNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGVuZ2FuIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsDQogICAgICAgIHRleHQgPSBwYXN0ZSgiTWVkaWFuOiIsIHJvdW5kKG1lZGlhbl9kZW5nYW5fb3V0bGllcnMsIDIpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMiwNCiAgICAgICAgYXJyb3djb2xvciA9ICJncmVlbiIsDQogICAgICAgIGZvbnQgPSBsaXN0KGNvbG9yID0gImJsYWNrIikNCiAgICAgICksDQogICAgICBsaXN0KA0KICAgICAgICB4ID0gIlRhbnBhIE91dGxpZXJzIiwNCiAgICAgICAgeSA9IG1lZGlhbl90YW5wYV9vdXRsaWVycywNCiAgICAgICAgdGV4dCA9IHBhc3RlKCJNZWRpYW46Iiwgcm91bmQobWVkaWFuX3RhbnBhX291dGxpZXJzLCAyKSksDQogICAgICAgIHNob3dhcnJvdyA9IFRSVUUsDQogICAgICAgIGFycm93aGVhZCA9IDIsDQogICAgICAgIGFycm93Y29sb3IgPSAiZ3JlZW4iLA0KICAgICAgICBmb250ID0gbGlzdChjb2xvciA9ICJibGFjayIpDQogICAgICApDQogICAgKQ0KICApDQoNCiMgTWVuYW1waWxrYW4gcGxvdA0KcGxvdA0KDQoNCmBgYA0KDQoNCg0KDQoNCiMjIEMuIE1vZHVzIChOaWxhaSB5YW5nIHNlcmluZyBtdW5jdWwpDQoNCk1vZHVzIGFkYWxhaCBuaWxhaSBhdGF1IGtlbGFzIGRhdGEgeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCBkYWxhbSBzdWF0dSBkaXN0cmlidXNpIGRhdGEuIERhbGFtIGRhdGEga2Vsb21wb2ssIG1vZHVzIGRpaGl0dW5nIG1lbmdndW5ha2FuIHJ1bXVzIGtodXN1cyBiZXJkYXNhcmthbiBrZWxhcyBkZW5nYW4gZnJla3VlbnNpIHRlcnRpbmdnaSwgeWFuZyBkaXNlYnV0IGtlbGFzIG1vZHVzLg0KDQpNb2R1cyBzZXJpbmcgZGlndW5ha2FuIGRhbGFtIHN0YXRpc3RpayB1bnR1ayBtZW5nZXRhaHVpIG5pbGFpIHlhbmcgcGFsaW5nIHNlcmluZyBtdW5jdWwgZGFsYW0gZGF0YSwgZGFuIGJlcmd1bmEgdW50dWsgYW5hbGlzaXMgcG9sYSBhdGF1IHRyZW4gZGFsYW0gc3VhdHUgZGlzdHJpYnVzaS4NCg0KIyMjIyBSdW11cyBNb2R1cyB1bnR1ayBEYXRhIEtlbG9tcG9rIA0KDQpcWw0KXHRleHR7TW9kdXN9ID0gTW8gPSBUYiArIFxsZWZ0KCBcZnJhY3tkXzF9e2RfMSArIGRfMn0gXHJpZ2h0KSBcY2RvdCBwDQpcXQ0KDQojIyMjIFBlbmplbGFzYW4gU2ltYm9sOg0KDQotIFwoTW9cKTpNb2R1cyhuaWxhaSBkYXRhIHlhbmcgcGFsaW5nIHNlcmluZyBtdW5jdWwpLg0KLSBcKFRiXCk6IFRlcGkgYmF3YWgga2VsYXMgbW9kdXMoYmF0YXMgYmF3YWgga2VsYXMgbW9kdXMgZGlrdXJhbmdpIFwoMC41XCkgamlrYSBkYXRhIGtvbnRpbnUpDQotIFwoZF8xXCk6U2VsaXNpaCBmcmVrdWVuc2kga2VsYXMgbW9kdXMoXChmX21cKSkgZGVuZ2FuIGZyZWt1ZW5zaSBrZWxhcyBzZWJlbHVtbnlhIChcKGZzZWJlbHVtXCkpDQoNClxbZF8xPWZtLWZzZWJlbHVtXF0NCg0KLSBcKGRfMlwpOiBTZWxpc2loIGZyZWt1ZW5zaSBrZWxhcyBtb2R1c1woZm1cKSBkZW5nYW4gZnJla3VlbnNpIGtlbGFzIHNldGVsYWhueWEgXChmc2VzdWRhaFwpDQoNClxbZF8yPWZtLWZzZXN1ZGFoXF0NCg0KLSBcKHBcKTogTGViYXIga2VsYXMgKHNlbGlzaWggYW5hdGFyYSBiYXRhcyBkYW4gYmF0YXMgYmF3YWgga2VsYXMpLg0KDQojIyMjIExhbmdrYWgtbGFuZ2thaCBNZW5naGl0dW5nIE1vZHVzDQoNCjEuICoqSWRlbnRpZmlrYXNpIEtlbGFzIE1vZHVzKioNCmNhcmkga2VsYXMgZGVuZ2FuIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2kgZGFsYW0gdGFiZWwgZGlzdHJpYnVzaSBmcmVrdWVuc2kuaW5pIGRpc2VidXQgKiprZWxhcyBtb2R1cyoqDQoNCjIuICoqVGVudHVrYW4gRWxlbWVuLUVsZW1lbiBkYWxhbSBSdW11czoqKg0KLSAgKipUZXBpIGJhd2FoIGtlbGFzIG1vZHVzKiogKFwoVGJcKSk6SGl0dW5nIHRlcGkgYmF3YWgga2VsYXMgbW9kdXMgZGVuZ2FuIG1lbmd1cmFuZ2lcKDAuNVwpIGRhcmkgYmF0YXMgYmF3YWgga2VsYXMgbW9kdXMuDQotIFwoZF8xXCk6IEhpdHVuZyBzZWxpc2loIGFudGFyYSBmcmVrdWVuc2kga2VsYXMgbW9kdXMoXChmbVwpKSBkZW5nYW4gZnJla3VlbnNpIGtlbGFzIHNlYmVsdW1ueWEgKFwoZnNlYmVsdW1cKSkuDQotIFwoZF8yXCk6IEhpdHVuZyBzZWxpc2loIGFudGFyYSBmcmVrdWVuc2kga2VsYXMgbW9kdXMgKFwoZm1cKSkgZGVuZ2FuIGZyZWt1ZW5zaSBrZWxhcyBzZXRlbGFobnlhIChcKGZzZXN1ZGFoXCkpLg0KLSAqKkxlYmFyIGtlbGFzKiogKFwocFwpKTogSGl0dW5nIHNlbGlzaWggYmF0YXMgYXRhcyBkYW4gYmF0YXMgYmF3YWgga2VsYXMuDQoNCiMjIyMgU3Vic2l0dXNpIE5pbGFpIGtlIGRhbGFtIFJ1bXVzOg0KTWFzdWtrYW4gbmlsYWkgXChUYlwpLFwoZF8xXCkuXChkXzJcKSxkYW5cKHBcKSBrZSBkYWxhbSBydW11cyB1bnR1ayBtZW5kYXBhdGthbiBuaWxhaSBtb2R1cw0KDQojIyMjIENvbnRvaCBQZXJoaXR1bmdhbiBNb2R1cw0KDQp8S2VsYXMgICAgICAgICAgICAgICAgICAgIHwgRnJla3VlbnNpICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfA0KfCA1MC01OSAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICB8DQp8IDYwLTY5ICAgICAgICAgICAgICAgICAgIHwgMTAgICAgICAgICAgICAgIHwgDQp8IDcwLTc5ICAgICAgICAgICAgICAgICAgIHwgMTUgICAgICAgICAgICAgIHwNCnwgODAtODkgICAgICAgICAgICAgICAgICAgfCAxMiAgICAgICAgICAgICAgfA0KfCA5MC05OSAgICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICB8DQoNCiMjIyMjIExhbmdrYWggMTogSWRlbnRpZmlrYXNpIEtlbGFzIE1vZHVzDQoNCktlbGFzIGRlbmdhbiBmcmVrdWVuc2kgdGVydGluZ2dpIGFkYWxhaCBcKDcwLTc5XCkgKFwoZm09MTVcKSkuDQpKYWRpLGtlbGFzIG1vZHVzIGFkYWxhaCBcKDcwLTc5XCkNCg0KIyMjIyMgTGFuZ2thaCAyOiBIaXR1bmcgRWxlbWVuLUVsZW1lbiBQZW50aW5nDQoNCi0gXChUYlwpOiBUZXBpIGJhd2FoIGtlbGFzIG1vZHVzXCg9NzAtMC41PTY5LjVcKQ0KLSBcKGRfMVwpOlwoZm0tZnNlYmVsdW09MTUtMTA9NVwpDQotIFwoZF8yXCk6XChmbS1mc2VzdWRhaD0xNS0xMj0zXCkNCi0gXChwXCk6IExlYmFyIGtlbGFzXCg9NzktNzArMT0xMFwpDQoNCiMjIyMjIExhbmdrYWggMzogU3Vic3RpdHVzaSBrZSBkYWxhbSBSdW11cw0KDQpcWw0KXHRleHQgTW8gPSA2OS41ICsgXGxlZnQoIFxmcmFje2RfMX17ZF8xICsgZF8yfSBccmlnaHQpIFxjZG90IHANClxdDQoNClxbDQpcdGV4dCBNbyA9IDY5LjUgKyBcbGVmdCggXGZyYWN7NX17NSArIDN9IFxyaWdodCkgXGNkb3QgMTANClxdDQoNClxbDQpcdGV4dCBNbyA9IDY5LjUgKyBcbGVmdCggXGZyYWN7ezV9IH17OH0gXHJpZ2h0KSBcY2RvdCAxMA0KXF0NCg0KXFsNClx0ZXh0IE1vID0gNjkuNSArIDYuMjU9NzUuNzUNClxdDQoNCiMjIyMgSGFzaWwgQWtoaXIgDQpNb2R1cyBkYXRhIGtlbG9tcG9rIGFkYWxhaCBcKDc1Ljc1XCkNCg0KIyMjIyBWaXN1YWxpc2FzaSBEYXRhIG1lbmdndW5ha2FuIEJveHBsb3QNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEluc3RhbGwgZGFuIGxvYWQgbGlicmFyeQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YSBrZWxvbXBvayANCmRhdGFfMSA8LSBjKHJlcCg1NC41LDUpLCByZXAoNjQuNSwgMTApLCByZXAoNzQuNSwgMTUpLCByZXAoODQuNSwgMTIpLCByZXAoOTQuNSwgOCkpDQoNCm1vZHVzX2RhdGEgPC0gYXMubnVtZXJpYyhuYW1lcyh3aGljaC5tYXgodGFibGUoZGF0YV8xKSkpKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIE5pbGFpID0gYyhkYXRhXzEpLA0KICBLZWxvbXBvayA9IHJlcChjKCJEYXRhIE1vZHVzIiksIA0KICAgICAgICAgICAgICAgICB0aW1lcyA9IGMobGVuZ3RoKGRhdGFfMSkpKQ0KICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgIA0KIyBNZW1idWF0IGJveHBsb3QgbWVuZ2d1bmFrYW4gUGxvdGx5IGRpdGFtcGlsa2FuDQpwbG90IDwtIHBsb3RfbHkoDQogIGRhdGEsIA0KICB5ID0gfk5pbGFpLCANCiAgY29sb3IgPSB+S2Vsb21wb2ssDQogIGNvbG9ycyA9IGMoImJsdWUiKSwNCiAgdHlwZSA9ICJib3giLCANCiAgYm94cG9pbnRzID0gIm91dGxpZXJzIiAgIyBNZW5hbXBpbGthbiB0aXRpayBvdXRsaWVycw0KKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIk1vZHVzIERhdGEgS2Vsb21wb2siLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJOaWxhaSIpLA0KICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJLZWxvbXBvayIpLA0KICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHggPSAiRGF0YSBNb2R1cyIsDQogICAgICAgIHkgPSBtb2R1c19kYXRhLA0KICAgICAgICB0ZXh0ID0gcGFzdGUoIk1vZHVzOiIsIHJvdW5kKG1vZHVzX2RhdGEsIDEpKSwNCiAgICAgICAgc2hvd2Fycm93ID0gVFJVRSwNCiAgICAgICAgYXJyb3doZWFkID0gMQ0KICAgICAgKQ0KICAgICkNCiAgKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KDQpgYGANCg0KDQoNCiMgUHJha3Rpa3VtIDIgIA0KDQpDYXJpbGFoIGNvbnRvaCBzZWRlcmhhbmEgeWFuZyBtZW5nZ3VuYWthbiB1a3VyYW4gcGVtdXNhdGFuIGRhbGFtIHN0dWRpIGthc3VzDQoNCiMjIENvbnRvaCBzZWRlcmhhbmEgZGFsYW0gdWt1cmFuIHBlbXVzYXRhbiBkYXRhIGtlbG9tcG9rDQoNCiMjIEEuIEJpc25pcw0KDQojIyMjIFN0dWRpIEthc3VzOiBBbmFsaXNpcyBQZW5qdWFsYW4gSGFyaWFuIFNlYnVhaCBUb2tvIFJldGFpbA0KDQpTZWJ1YWggdG9rbyByZXRhaWwgaW5naW4gbWVuZ2V0YWh1aSByYXRhLXJhdGEgcGVuZGFwYXRhbiBoYXJpYW4gc2VsYW1hIHNhdHUgYnVsYW4gdGVyYWtoaXIgKDMwIGhhcmkpIHVudHVrIG1lbWJhbnR1IG1lbmVudHVrYW4gdGFyZ2V0IHBlbmp1YWxhbiBidWxhbiBkZXBhbi4gRGF0YSBwZW5kYXBhdGFuIGhhcmlhbiBkaWtlbG9tcG9ra2FuIGRhbGFtIHRhYmVsIGRpc3RyaWJ1c2kgZnJla3VlbnNpIGJlcmlrdXQ6DQoNCg0KfFBlbmRhcGF0YW4oZGFsYW0ganV0YSBScCl8IEZyZWt1ZW5zaShoYXJpKSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwNCnwgMTAtMTUgICAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgfA0KfCAxNS0yMCAgICAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICB8IA0KfCAyMC0yNSAgICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICB8IA0KfCAyNS0zMCAgICAgICAgICAgICAgICAgICB8IDUgICAgICAgICAgICAgICB8DQp8IDMwLTM1ICAgICAgICAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgIHwNCg0KIyMjIyBNZW5naGl0dW5nIFVrdXJhbiBQZW11c2F0YW4NCg0KIyMjIyMgMS5NZWFuIChyYXRhLVJhdGEpDQpNZW5nZ3VuYWthbiBydW11cyByYXRhLXJhdGEgdW50dWsgZGF0YSBrZWxvbXBvazoNCg0KJCQNCnt4fSA9IFxmcmFje1xzdW0gZiBcY2RvdCB4fXtcc3VtIGZ9DQokJA0KRGltYW5hIFwoeFwpIGFkYWxhaCB0aXRpayB0ZW5nYWgga2VsYXMgXCh4aVwpDQoNCjEuICoqSGl0dW5nIHRpdGlrIHRlbmdhaCBcKHhpXCkgdW50dWsgc2V0aWFwIGtlbGFzOioqDQoNCg0KJCQgMTAtMTU6ICgxMCsxNSkvMj0xMi41JCQNCiQkIDE1LTIwOiAoMTUrMjApLzI9MTcuNSQkDQokJCAyMC0yNTogKDIwKzI1KS8yPTIyLjUkJA0KJCQgMjUtMzA6ICgyNSszMCkvMj0yNy41JCQNCiQkIDMwLTM1OiAoMzArMzUpLzI9MzIuNSQkDQoyLiAqKkthbGlrYW4gZnJla3VlbnNpIFwoZlwpIGRlbmdhbiB0aXRpayB0ZW5nYWggXCh4aVwpKioNCg0KDQp8IEtlbGFzICB8IEZyZWt1ZW5zaSBcKChmKVwpIHwgVGl0aWsgVGVuZ2FoIFwoKHhpKVwpfCBcKGZcY2RvdCB4aVwpIHwNCnw6LS0tLS06IHw6LS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS06fA0KfCAxMC0xNSAgfCA1ICAgICAgICAgICAgICAgIHwgMTIuNSAgICAgICAgICAgICAgICB8IDYyLjUgICAgICAgICAgICAgICAgICAgfA0KfCAxNS0yMCAgfCAxMCAgICAgICAgICAgICAgIHwgMTcuNSAgICAgICAgICAgICAgICB8IDE3NS4wICAgICAgICAgICAgICAgICAgfA0KfCAyMC0yNSAgfCA4ICAgICAgICAgICAgICAgIHwgMjIuNSAgICAgICAgICAgICAgICB8IDE4MC4wICAgICAgICAgICAgICAgICAgfA0KfCAyNS0zMCAgfCA1ICAgICAgICAgICAgICAgIHwgMjcuNSAgICAgICAgICAgICAgICB8IDEzNy41ICAgICAgICAgICAgICAgICAgfA0KfCAzMC0zNSAgfCAyICAgICAgICAgICAgICAgIHwgMzIuNSAgICAgICAgICAgICAgICB8IDY1LjAgICAgICAgICAgICAgICAgICAgfA0KDQozLiAqKkp1bWxhaGthbjoqKg0KDQokJFxzdW0gZj01KzEwKzgrNSsyPTMwDQokJA0KJCQNClxzdW0gKGYgXGNkb3QgeCk9NjIuNSsxNzUuMCsxODAuMCsxMzcuNSs2NS4wPTYyMC4wDQokJA0KDQo0LiAqKkhpdHVuZyBNZWFuOioqDQogJCQNClwge3h9ID0gICBcZnJhY3t7NjIwLn0gIDB9ezMwfSA9MjAuNjcNCiQkDQoNCioqSGFzaWw6IE1lYW5cKD0yMC42N2p1dGEgUnBcKSoqDQoNCg0KIyMjIyMgMi5NZWRpYW4gDQoNCg0KJCQNClx0ZXh0e01lZGlhbn0gPSBMICsgKFxmcmFje1xmcmFje259ezJ9IC0gRn17Zm19KSBcY2RvdCAgYw0KJCQNCioqTGFuZ2thaC1sYW5na2FoOioqDQoNCjEuICoqQ2FyaSBrZWxhcyBtZWRpYW46KioNCg0KLSBUb3RhbCBmcmVrdWVuc2kgXChuPTMwXCkNCi0gXChcZnJhY3tufXsyfSA9IDE1XCksIGphZGkga2VsYXMgbWVkaWFuIGFkYWxhaCBcKDE1LTIwXCkgKGthcmVuYSBmcmVrdWVuc2kga3VtdWxhdGlmIGhpbmdnYSBrZWxhcyBpbmkgbWVuY2FrdXAgbmlsYWkga2UtMTUpDQoNCjIuICoqSWRlbnRpZmlrYXNpIGVsZW1lbiBydW11czoqKg0KDQotIFwoTFwpOiBUZXBpIGJhd2FoIGtlbGFzIG1lZGlhblwoPTE1LTAuNT0xNC41XCkNCi0gXChGXCk6IGZyZWt1ZW5zaSBrdW11bGF0aWYgc2ViZWx1bSBrZWxhcyBtZWRpYW5cKDVcKQ0KLSBcKGZtXCk6IEZyZWt1ZW5zaSBrZWxhcyBtZWRpYW5cKD0xMFwpDQotIFwoY1wpOiBMZWJhciBrZWxhc1woMjAtMTU9NVwpIA0KDQozLiAqKnN1YnN0aXR1c2kgbmlsYWkga2UgcnVtdXM6KioNCg0KJCQNClx0ZXh0e01lZGlhbn0gPSAxNC41ICsgIChcZnJhY3t7MTV9IC0gNX17MTB9KSBcY2RvdCAgNQ0KJCQNCg0KDQokJA0KXHRleHR7TWVkaWFufSA9MTQuNSArICAoXGZyYWN7ezEwfSB9ezEwfSkgXGNkb3QgIDUNCiQkDQokJA0KXHRleHR7TWVkaWFufSA9MTQuNSArIDUgPTE5LjUNCiQkDQoNCioqSGFzaWwgTWVkaWFuXCg9MTkuNSBqdXRhIFJwXCkqKg0KDQojIyMjIyAzLiBNZW5naGl0dW5nIE1vZHVzDQoNClJ1bXVzOg0KJCQNClx0ZXh0e01vZHVzfSA9IEwgKyBcZnJhY3tmXzEtZl8wfXsoZl8xICsgZl8wKSsoZl8xICsgZl8yKX0gXGNkb3QgYw0KJCQNCg0KKipMYW5na2FoLWxhbmdrYWg6KioNCg0KMS4gKipDYXJpIEtlbGFzIE1vZHVzOioqDQoNCi0gS2VsYXMgZGVuZ2FuIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2kgYWRhbGFoIFwoMTUtMjBcKSAoXChmXzE9MTBcKSkuDQoNCjIuICoqSWRlbnRpZmlrYXNpIGVsZW1lbiBydW11czoqKg0KDQotIFwoTFwpOiBUZXBpIGJhd2FoIGtlbGFzIG1vZHVzIFwoMTUtMC41PTE0LjVcKQ0KLSBcKGZfMFwpOiBGcmVrdWVuc2kga2VsYXMgc2ViZWx1bSBcKD01XCkNCi0gXChmXzFcKTogRnJla3VlbnNpIGtlbGFzIG1vZHVzIFwoPTEwXCkNCi0gXChmXzJcKTogRnJla3VlbnNpIEtlbGFzIHNldGVsYWggXCg9OFwpDQotIFwoY1wpOiBMZWJhciBrZWxhc1woPTIwLTE1PTE1XCkNCg0KMy4gKipTdWJzdGl0dXNpIG5pbGFpIGtlIHJ1bXVzKioNCg0KDQpcWw0KXHRleHR7TW9kdXN9ID0gMTQuNSArIFxsZWZ0KCBcZnJhY3sxMC0xNX17KDEwLTUpICsgKDEwLTgpfSBccmlnaHQpIFxjZG90IDUNClxdDQoNClxbDQpcdGV4dHtNb2R1c30gPSAxNC41ICsgXGxlZnQoIFxmcmFjezV9IHs1KzJ9IFxyaWdodCkgXGNkb3QgNQ0KXF0NCg0KXFsNClx0ZXh0e01vZHVzfSA9IDE0LjUgKyBcbGVmdCggXGZyYWN7NX0gezd9IFxyaWdodCkgXGNkb3QgNQ0KXF0NCg0KJCQNClx0ZXh0e01vZHVzfSA9MTQuNSArIDMuNTcgPTE4LjA3DQokJA0KDQoqKkhhc2lsOiBNb2R1cyBcKD0xOC4wN1wpanV0YSBScCoqDQoNCioqS2VzaW1wdWxhbioqIA0KDQotIE1lYW46XCgyMC42N1wpIGp1dGEgUnANCi0gTWVkaWFuOlwoMTkuNVwpIGp1dGEgUnANCi0gTW9kdXM6XCgxOC4wN1wpIGp1dGEgUnANCg0KDQoNCiMjIEIuIEtlc2VoYXRhbg0KDQojIyMgU3R1ZGkga2FzdXM6VGluZ2dpIEJhZGFuIFNpc3dhIFNNUA0KDQpTZWJ1YWggc2Vrb2xhaCBTTVAgaW5naW4gbWVuZ2FuYWxpc2lzIGRhdGEgdGluZ2dpIGJhZGFuIHNpc3dhIGtlbGFzIDcgdW50dWsgbWVuZ2V0YWh1aSBkaXN0cmlidXNpIGRhbiB1a3VyYW4gcGVtdXNhdGFubnlhLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHRpbmdnaSBiYWRhbiAoZGFsYW0gY20pIGRhcmkgNTAgc2lzd2EgeWFuZyB0ZWxhaCBkaWtlbG9tcG9ra2FuIGRhbGFtIHRhYmVsIGRpc3RyaWJ1c2kgZnJla3VlbnNpOg0KDQoNCnxUaW5nZ2kgQmFkYW4gICAgICAgICAgICAgfCBGcmVrdWVuc2kgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18DQp8IDE0MC0xNDQgICAgICAgICAgICAgICAgIHwgNSAgICAgICAgICAgICAgIHwNCnwgMTQ1LTE0OSAgICAgICAgICAgICAgICAgfCAxMCAgICAgICAgICAgICAgfCANCnwgMTUwLTE1NCAgICAgICAgICAgICAgICAgfCAxNSAgICAgICAgICAgICAgfCANCnwgMTU1LTE1OSAgICAgICAgICAgICAgICAgfCAxMiAgICAgICAgICAgICAgfA0KfCAxNjAtMTY0ICAgICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgICB8DQoNCiMjIyAxOiBIaXR1bmcgTWVhbiAoUmF0YS1SYXRhKSBUaW5nZ2kgQmFkYW4NCg0KR3VuYWthbiBydW11cyBtZWFuIHVudHVrIGRhdGEga2Vsb21wb2s6DQoNCiQkDQp7eH0gPSBcZnJhY3tcc3VtIGYgXGNkb3QgeGl9e1xzdW0gZn0NCiQkDQoNCi0gRGkgbWFuYSBcKHhpXCkgYWRhbGFoIHRpdGlrIHRlbmdhaCBkYXJpIHNldGlhcCBrZWxhcw0KDQokJA0KXCAxNDAtMTQ0OiBcZnJhY3t7MTQwfSArIDE0NH17Mn0pID0gIDE0Mg0KJCQNCiQkDQpcIDE0NS0xNDk6IFxmcmFje3sxNDV9ICsgMTQ5fXsyfSkgPSAgMTQ3DQokJA0KJCQNClwgMTUwLTE1NDogXGZyYWN7ezE1MH0gKyAxNTR9ezJ9KSA9ICAxNTINCiQkDQokJA0KXCAxNTUtMTU5OiBcZnJhY3t7MTU1fSArIDE1OX17Mn0pID0gIDE1Nw0KJCQNCiQkDQpcIDE2MC0xNjQ6IFxmcmFje3sxNjB9ICsgMTY0fXsyfSkgPSAgMTYyDQokJA0KDQoqKjIuS2FsaWthbiBmcmVrdWVuc2kgXChmXCkgZGVuZ2FuIHRpdGlrIHRlbmdhaCBcKHhpXCkqKg0KDQp8IEtlbGFzIFRpbmdnaSBCYWRhbiAgfCBGcmVrdWVuc2kgXCgoZilcKSB8IFRpdGlrIFRlbmdhaCBcKCh4aSlcKXwgXChmXGNkb3QgeGlcKSB8DQp8Oi0tLS0tOiB8Oi0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tOnwNCnwgMTQwLTE0NCAgfCA1ICAgICAgICAgICAgICAgIHwgMTQyICAgICAgICAgICAgICAgIHwgNzEwICAgICAgICAgICAgICAgICAgIHwNCnwgMTQ1LTE0OSAgfCAxMCAgICAgICAgICAgICAgIHwgMTQ3ICAgICAgICAgICAgICAgIHwgMTQ3MCAgICAgICAgICAgICAgICAgIHwNCnwgMTUwLTE1NCAgfCAxNSAgICAgICAgICAgICAgIHwgMTUyICAgICAgICAgICAgICAgIHwgMjI4MCAgICAgICAgICAgICAgICAgIHwNCnwgMTU1LTE1OSAgfCAxMiAgICAgICAgICAgICAgIHwgMTU3ICAgICAgICAgICAgICAgIHwgMTg4NCAgICAgICAgICAgICAgICAgIHwNCnwgMTYwLTE2NCAgfCA4ICAgICAgICAgICAgICAgIHwgMTYyICAgICAgICAgICAgICAgIHwgMTI5NiAgICAgICAgICAgICAgICAgIHwNCg0KKiozLiBKdW1sYWhrYW46KioNCg0KJCRcc3VtIGY9NSsxMCsxNSsxMis4PTUwDQokJA0KDQokJA0KXHN1bSBmIFxjZG90IHhpPTcxMCsxNDcwKzIyODArMTg4NCsxMjk2PTc2NDANCiQkDQoNCioqNC4gSGl0dW5nIE1lYW46KioNCg0KJCQNCnt4fSA9IFxmcmFje1xzdW0gZiBcY2RvdCB4aX17XHN1bSBmfT1cZnJhY3s3NjQwfXs1MH09MTUyLjgNCiQkDQoNCioqSGFzaWw6TWVhblwoPTE1Mi44XCkqKg0KDQojIyMgMi4gTWVuZ2hpdHVuZyBNZWRpYW4NCg0KUnVtdXM6DQoNCiQkDQpcdGV4dHtNZWRpYW59ID0gTCArIChcZnJhY3tcZnJhY3tufXsyfSAtIEZ9e2ZtfSkgXGNkb3QgIGMNCiQkDQoqKjEuIENhcmkga2VsYXMgbWVkaWFuKioNCg0KLSBUb3RhbCBmcmVrdWVuc2kgXChuPTUwXCkNCi0gXChcZnJhY3tufXsyfVwpID0gIFwoXGZyYWN7NTB9ezJ9XCk9IDI1DQoNCi0gRnJla3VlbnNpIGt1bXVsYXRpZg0KDQokJCAxNDAtMTQ0OjUkJA0KJCQgMTQ1LTE0OTo1KzEwPTE1JCQNCiQkIDE1MC0xNTQ6MTUrMTU9MzAkJA0KLSBLZWxhcyBtZWRpYW4gYWRhbGFoXCgxNTAtMTU0XCkgKEthcmVuYSBrdW11bGF0aWYgaGluZ2dhIGtlbGFzIGluaSBtZW5jYWt1cCBuaWxhaSBrZS0yNSkNCg0KDQoqKjIuIElkZW50aWZpa2FzaSBlbGVtZW4gcnVtdXMqKg0KDQotIFwoTFwpOiBUZXBpIGJhd2FoIGtlbGFzIG1lZGlhblwoPTE1MC0wLjU9MTQ5LjVcKQ0KLSBcKEZcKTogZnJla3VlbnNpIGt1bXVsYXRpZiBzZWJlbHVtIGtlbGFzIG1lZGlhblwoMTVcKQ0KLSBcKGZfbVwpOiBGcmVrdWVuc2kga2VsYXMgbWVkaWFuXCg9MTVcKQ0KLSBcKGNcKTogTGViYXIga2VsYXNcKDE1NC0xNTA9NVwpIA0KDQoqKlN1YnN0aXR1c2kgbmlsYWkga2UgcnVtdXM6KioNCg0KJCQNClx0ZXh0e01lZGlhbn0gPSAxNDkuNSArICAoXGZyYWN7ezI1fSAtIDE1fXsxNX0pIFxjZG90ICA1DQokJA0KJCQNClx0ZXh0e01lZGlhbn0gPTE0OS41ICsgIChcZnJhY3t7MTB9IH17MTV9KSBcY2RvdCA1DQokJA0KDQokJA0KXHRleHR7TWVkaWFufSA9IDE0OS41ICsgMy4zMz0xNTIuODMNCiQkDQoNCioqSGFzaWw6TWVkaWFuXCg9MTUyLjgzXCkqKg0KDQoqKk1lbmdoaXR1bmcgTW9kdXMqKg0KDQpSdW11czoNCg0KJCQNClx0ZXh0e01vZHVzfSA9IEwgKyBcZnJhY3tmXzEtZl8wfXsoZl8xICsgZl8wKSsoZl8xICsgZl8yKX0gXGNkb3QgYw0KJCQNCioqMS4gQ2FyaSBrZWxhcyBtb2R1czoqKg0KDQoNCi0gS2VsYXMgZGVuZ2FuIGZyZWt1ZW5zaSB0ZXJ0aW5nZ2kgYWRhbGFoIFwoMTUwLTE1NFwpIChcKGZfMT0xNVwpKS4NCg0KKioyLiBJZGVudGlmaWthc2kgZWxlbWVuIHJ1bXVzOioqDQoNCi0gXChMXCk6IFRlcGkgYmF3YWgga2VsYXMgbW9kdXMgXCgxNTAtMC41PTE0OS41XCkNCi0gXChmXzBcKTogRnJla3VlbnNpIGtlbGFzIHNlYmVsdW0gXCg9MTBcKQ0KLSBcKGZfMVwpOiBGcmVrdWVuc2kga2VsYXMgbW9kdXMgXCg9MTVcKQ0KLSBcKGZfMlwpOiBGcmVrdWVuc2kgS2VsYXMgc2V0ZWxhaCBcKD0xMlwpDQotIFwoY1wpOiBMZWJhciBrZWxhc1woPTE1NC0xNTA9NVwpDQoNCioqMy4gU3Vic3RpdHVzaSBuaWxhaSBrZSBydW11cyoqDQoNCg0KXFsNClx0ZXh0e01vZHVzfSA9IDE0OS41ICsgXGxlZnQoIFxmcmFjezE1LTEwfXsoMTUtMTApICsgKDE1LTEyKX0gXHJpZ2h0KSBcY2RvdCA1DQpcXQ0KDQpcWw0KXHRleHR7TW9kdXN9ID0gMTQ5LjUgKyBcbGVmdCggXGZyYWN7NX0gezUrM30gXHJpZ2h0KSBcY2RvdCA1DQpcXQ0KDQpcWw0KXHRleHR7TW9kdXN9ID0gMTQ5LjUgKyBcbGVmdCggXGZyYWN7NX0gezh9IFxyaWdodCkgXGNkb3QgNQ0KXF0NCg0KJCQNClx0ZXh0e01vZHVzfSA9MTQ5LjUgKyAzLjEzID0xNTIuNjMNCiQkDQoNCioqSGFzaWw6TW9kdXNcKD0xNTIuNjMgY21cKSoqDQoNCg0KDQojIyBDLiBQZW5kaWRpa2FuDQoNClN0dWRpIEthc3VzOiBSYXRhLXJhdGEgV2FrdHUgQmVsYWphciBTaXN3YQ0KDQpTZWJ1YWggc2Vrb2xhaCBpbmdpbiBtZW5nZXRhaHVpIHJhdGEtcmF0YSB3YWt0dSBiZWxhamFyIGhhcmlhbiBzaXN3YSBkaSBydW1haCBzZWxhbWEgc2F0dSBtaW5nZ3UuIEJlcmlrdXQgZGF0YSB3YWt0dSBiZWxhamFyIGhhcmlhbiAoZGFsYW0gamFtKSB5YW5nIHRlbGFoIGRpa2Vsb21wb2trYW46DQoNCg0KfFdha3R1IEJlbGFqYXIgKGphbSkgICAgICB8IEZyZWt1ZW5zaSAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwNCnwgMC0xICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgfA0KfCAxLTIgICAgICAgICAgICAgICAgICAgICB8IDYgICAgICAgICAgICAgICB8IA0KfCAyLTMgICAgICAgICAgICAgICAgICAgICB8IDEwICAgICAgICAgICAgICB8IA0KfCAzLTQgICAgICAgICAgICAgICAgICAgICB8IDE1ICAgICAgICAgICAgICB8DQp8IDQtNSAgICAgICAgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgIHwNCnwgNS02ICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgfA0KDQojIyMgMTogSGl0dW5nIE1lYW4gKFJhdGEtUmF0YSkgVGluZ2dpIEJhZGFuDQoNCkd1bmFrYW4gcnVtdXMgbWVhbiB1bnR1ayBkYXRhIGtlbG9tcG9rOg0KDQokJA0Ke3h9ID0gXGZyYWN7XHN1bSBmIFxjZG90IHhpfXtcc3VtIGZ9DQokJA0KDQotIERpIG1hbmEgXCh4aVwpIGFkYWxhaCB0aXRpayB0ZW5nYWggZGFyaSBzZXRpYXAga2VsYXMNCg0KJCQNClwgMC0xOiBcZnJhY3t7MH0gKyAxfXsyfSA9IDAuNQ0KJCQNCiQkDQpcIDEtMjogXGZyYWN7ezF9ICsgMn17Mn0gPSAxLjUNCiQkDQokJA0KXCAyLTM6IFxmcmFje3syfSArIDN9ezJ9ID0gIDIuNQ0KJCQNCiQkDQpcIDMtNDogXGZyYWN7ezN9ICsgNH17Mn0gPSAgMy41DQokJA0KJCQNClwgNC01OiBcZnJhY3t7NH0gKyA1fXsyfSA9ICA0LjUNCiQkDQokJA0KXCA1LTY6IFxmcmFje3s1fSArIDZ9ezJ9ID0gIDUuNQ0KJCQNCg0KIyMjIyMgMi5LYWxpa2FuIGZyZWt1ZW5zaSBcKGZcKSBkZW5nYW4gdGl0aWsgdGVuZ2FoIFwoeGlcKQ0KDQp8IFdha3R1IEJlbGFqYXIgKGphbSkgIHwgRnJla3VlbnNpIFwoKGYpXCkgfCBUaXRpayBUZW5nYWggXCgoeGkpXCl8IFwoZlxjZG90IHhpXCkgfA0KfDotLS0tLTogfDotLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLTp8DQp8IDAtMSAgICB8IDQgICAgICAgICAgICAgICAgfCAwLjUgICAgICAgICAgICAgICAgfCAyLjAgICAgICAgICAgICAgICAgICAgfA0KfCAxLTIgICAgfCA2ICAgICAgICAgICAgICAgIHwgMS41ICAgICAgICAgICAgICAgIHwgOS4wICAgICAgICAgICAgICAgICAgIHwNCnwgMi0zICAgIHwgMTAgICAgICAgICAgICAgICB8IDIuNSAgICAgICAgICAgICAgICB8IDI1LjAgICAgICAgICAgICAgICAgICB8DQp8IDMtNCAgICB8IDE1ICAgICAgICAgICAgICAgfCAzLjUgICAgICAgICAgICAgICAgfCA1Mi41ICAgICAgICAgICAgICAgICAgfA0KfCA0LTUgICAgfCA4ICAgICAgICAgICAgICAgIHwgNC41ICAgICAgICAgICAgICAgIHwgMzYuMCAgICAgICAgICAgICAgICAgIHwNCnwgNS02ICAgIHwgNyAgICAgICAgICAgICAgICB8IDUuNSAgICAgICAgICAgICAgICB8IDM4LjUgICAgICAgICAgICAgICAgICB8DQoNCiMjIyMjIDMuIEp1bWxhaGthbjoNCg0KJCRcc3VtIGY9NCs2KzEwKzE1KzgrNz01MA0KJCQNCg0KJCQNClxzdW0gZiBcY2RvdCB4aT0yLjArOS4wKzI1LjArNTIuNSszNi4wKzM4LjU9MTYzLjANCiQkDQoNCiMjIyMjIDQuIEhpdHVuZyBNZWFuOg0KDQokJA0Ke3h9ID0gXGZyYWN7XHN1bSBmIFxjZG90IHhpfXtcc3VtIGZ9PVxmcmFjezE2My4wfXs1MH09My4yNg0KJCQNCioqSGFzaWw6TWVhblwoPTMuMjYgamFtXCkqKg0KDQojIyMgMi4gTWVuZ2hpdHVuZyBNZWRpYW4NCg0KUnVtdXM6DQoNCiQkDQpcdGV4dHtNZWRpYW59ID0gTCArIChcZnJhY3tcZnJhY3tufXsyfSAtIEZ9e2ZtfSkgXGNkb3QgIGMNCiQkDQoNCioqMS4gQ2FyaSBrZWxhcyBtZWRpYW4qKg0KDQotIFRvdGFsIGZyZWt1ZW5zaSBcKG49NTBcKQ0KLSBcKFxmcmFje259ezJ9XCkgPSAgXChcZnJhY3s1MH17Mn1cKT0gMjUNCg0KLSBGcmVrdWVuc2kga3VtdWxhdGlmDQoNCiQkIDAtMTo0JCQNCiQkIDEtMjo0KzY9MTAkJA0KJCQgMi0zOjEwKzEwPTIwJCQNCiQkIDMtNDoyMCsxNT0zNSQkDQoNCi0gS2VsYXMgbWVkaWFuIGFkYWxhaFwoMy00XCkoa2FyZW5hIGt1bXVsYXRpZiBoaW5nZ2Ega2VsYXMgaW5pIG1lbmNha3VwIG5pbGFpIGtlLTI1KQ0KDQoqKjIuIElkZW50aWZpa2FzaSBlbGVtZW4gcnVtdXMqKg0KDQotIFwoTFwpOiBUZXBpIGJhd2FoIGtlbGFzIG1lZGlhblwoPTMtMC41PTI1LjVcKS4NCi0gXChGXCk6IGZyZWt1ZW5zaSBrdW11bGF0aWYgc2ViZWx1bSBrZWxhcyBtZWRpYW5cKDIwXCkuDQotIFwoZl9tXCk6IEZyZWt1ZW5zaSBrZWxhcyBtZWRpYW5cKD0xNVwpLg0KLSBcKGNcKTogTGViYXIga2VsYXNcKDFcKS4gDQoNCioqU3Vic3RpdHVzaSBuaWxhaSBrZSBydW11czoqKg0KDQokJA0KXHRleHR7TWVkaWFufSA9IDIuNSArICAoXGZyYWN7ezI1fSAtIDIwfXsxNX0pIFxjZG90ICAxDQokJA0KDQokJA0KXHRleHR7TWVkaWFufSA9MjUuNSArICAoXGZyYWN7ezV9IH17MTV9KQ0KJCQNCg0KDQokJA0KXHRleHR7TWVkaWFufSA9IDI1LjUgKyAwLjMzPTIuODMNCiQkDQoNCioqSGFzaWw6TWVkaWFuXCg9Mi44MyBqYW1cKSoqDQoNCioqTWVuZ2hpdHVuZyBNb2R1cyoqDQoNClJ1bXVzOg0KDQokJA0KXHRleHR7TW9kdXN9ID0gTCArIFxmcmFje2ZfMS1mXzB9eyhmXzEgKyBmXzApKyhmXzEgKyBmXzIpfSBcY2RvdCBjDQokJA0KKioxLiBDYXJpIGtlbGFzIG1vZHVzOioqDQoNCg0KLSBLZWxhcyBkZW5nYW4gZnJla3VlbnNpIHRlcnRpbmdnaSBhZGFsYWggXCgzLTRcKSAoXChmXzE9MTVcKS4NCg0KKioyLiBJZGVudGlmaWthc2kgZWxlbWVuIHJ1bXVzOioqDQoNCi0gXChMXCk6IFRlcGkgYmF3YWgga2VsYXMgbW9kdXMgXCgzLTAuNT0yLjVcKQ0KLSBcKGZfMFwpOiBGcmVrdWVuc2kga2VsYXMgc2ViZWx1bSBcKD0xMFwpDQotIFwoZl8xXCk6IEZyZWt1ZW5zaSBrZWxhcyBtb2R1cyBcKD0xNVwpDQotIFwoZl8yXCk6IEZyZWt1ZW5zaSBLZWxhcyBzZXRlbGFoIFwoPThcKQ0KLSBcKGNcKTogTGViYXIga2VsYXNcKD0xXCkNCg0KKiozLiBTdWJzdGl0dXNpIG5pbGFpIGtlIHJ1bXVzKioNCg0KDQpcWw0KXHRleHR7TW9kdXN9ID0gMi41ICsgXGxlZnQoIFxmcmFjezE1LTEwfXsoMTUtMTApICsgKDE1LTgpfSBccmlnaHQpIFxjZG90IDENClxdDQoNClxbDQpcdGV4dHtNb2R1c30gPSAyLjUgKyBcbGVmdCggXGZyYWN7NX0gezUrN30gXHJpZ2h0KSBcY2RvdCANClxdDQoNClxbDQpcdGV4dHtNb2R1c30gPSAyLjUgKyBcbGVmdCggXGZyYWN7NX0gezEyfSBccmlnaHQpIFxjZG90IA0KXF0NCg0KJCQNClx0ZXh0e01vZHVzfSA9Mi41ICsgMC40MiA9Mi45Mg0KJCQNCg0KKipIYXNpbDpNb2R1c1wgKD0yLjkyIGphbVwpKioNCg0KDQoNCiMgUkVGRVJFTlNJDQoNCjEuIERTQ2llbmNlbGFicy4gKG4uZC4pLiBVa3VyYW4gcGVtdXNhdGFuIGRhdGEuIERpYWtzZXMgZGFyaSBodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvc3RhdGlzdGlrYV9kYXNhci9fYm9vay9Va3VyYW5fUGVtdXNhdGFuX0RhdGEuaHRtbA0KDQoyLiBLdW1wYXJhbi4gKG4uZC4pLiBQZW5nZXJ0aWFuIG1lYW4sIG1lZGlhbiwgbW9kdXMsIGRhbiBjb250b2hueWEuIERpYWtzZXMgZGFyaSBodHRwczovL2t1bXBhcmFuLmNvbS9wZW5nZXJ0aWFuLWRhbi1pc3RpbGFoL3BlbmdlcnRpYW4tbWVhbi1tZWRpYW4tbW9kdXMtZGFuLWNvbnRvaG55YS0yMVNhTTVDY09JRw0KDQozLiBUZW1wby4gKG4uZC4pLiBQZW5nZXJ0aWFuIGRhbiBydW11cyBtZWFuLCBtZWRpYW4sIG1vZHVzIGJlc2VydGEgY2FyYSBtZW5naGl0dW5nbnlhLiBEaWFrc2VzIGRhcmkgaHR0cHM6Ly93d3cudGVtcG8uY28vcG9saXRpay9wZW5nZXJ0aWFuLWRhbi1ydW11cy1tZWFuLW1lZGlhbi1tb2R1cy1iZXNlcnRhLWNhcmEtbWVuZ2hpdHVuZ255YS0xMTY3Njc3DQoNCjQuIFVuaXZlcnNpdGFzIE5lZ2VyaSBZb2d5YWthcnRhLiAobi5kLikuIEJhYiBJSTogS2FqaWFuIHB1c3Rha2EuIERpYWtzZXMgZGFyaSBodHRwczovL2VwcmludHMudW55LmFjLmlkLzM2NTk2LzIvQkFCJTIwSUkucGRmDQoNCg0K