
Regresi Logistik Multinomial
1. Konsep Dasar
1.1 Pengertian Regresi Logistik Multinomial
Regresi Logistik Multinomial adalah salah satu
metode analisis statistik yang digunakan untuk memprediksi
kemungkinan (peluang) dari suatu kejadian yang memiliki
lebih dari dua hasil atau kategori.
Model ini merupakan pengembangan dari regresi logistik
biner, yang awalnya hanya bisa digunakan untuk memprediksi
hasil dengan dua kemungkinan saja, seperti
ya/tidak, sukses/gagal, atau membeli/tidak
membeli.
Dalam regresi logistik multinomial, hasil yang ingin diprediksi bisa
memiliki tiga atau lebih pilihan, contohnya:
- Tingkat kesuksesan bisnis: rendah, sedang, atau
tinggi
- Kepuasan pelanggan: kurang puas, puas, atau
sangat puas
- Keputusan konsumen: tidak membeli, menimbang, atau
membeli
Tujuan utama dari model ini adalah untuk mengetahui
faktor-faktor mana yang paling berpengaruh terhadap peluang
terjadinya suatu kategori hasil tertentu. Artinya, kita bisa
melihat bagaimana variabel-variabel seperti iklan, tenaga
penjualan, atau kepuasan pelanggan dapat meningkatkan
peluang keberhasilan suatu usaha.
Secara sederhana, regresi logistik multinomial membantu kita
memahami hubungan antara beberapa faktor (variabel bebas)
dengan kemungkinan suatu hasil (variabel terikat) yang
memiliki lebih dari dua pilihan.
Model ini bekerja dengan cara membandingkan setiap kategori hasil
terhadap satu kategori yang dijadikan acuan (base
category). Melalui perbandingan ini, kita bisa melihat seberapa
besar kemungkinan suatu data termasuk dalam kategori tertentu dibanding
kategori acuan tersebut.
Dengan kata lain, regresi logistik multinomial memungkinkan kita
untuk:
- Memprediksi peluang terjadinya berbagai tingkat
hasil
- Mengetahui pengaruh masing-masing faktor terhadap setiap
tingkat hasil
- Membantu pengambilan keputusan berdasarkan data dan
analisis probabilitas
1.2 Penjelasan Rumus Regresi Logistik
Multinomial
Rumus umum regresi logistik multinomial dapat dituliskan sebagai
berikut:
\[
\ln\left(\frac{P(Y = j)}{P(Y = \text{dasar})}\right)
= \beta_{0j} + \beta_{1j}X_1 + \beta_{2j}X_2 + \beta_{3j}X_3 +
\beta_{4j}X_4
\]
dengan:
- ( \(P(Y = j)\) ) : peluang bahwa
suatu observasi (misalnya perusahaan) termasuk dalam kategori j
(misalnya “Sedang” atau “Tinggi”),
- ( \(P(Y = \text{dasar})\) ) :
peluang observasi termasuk kategori dasar (misalnya “Rendah”),
- ( \(\beta_{0j}\) ) : konstanta
(nilai dasar tanpa pengaruh variabel lain),
- ( \(\beta_{1j}, \beta_{2j}, \beta_{3j},
\beta_{4j}\) ) : koefisien yang menunjukkan besar dan arah
pengaruh dari masing-masing variabel,
- ( \(X_1, X_2, X_3, X_4\) ) :
variabel bebas yang memengaruhi hasil.
1.2.1 Contoh Penerapan pada Dataset Tingkat Kesuksesan
Penjualan Berdasarkan Berbagai Faktor
Dalam penelitian ini, variabel bebas yang digunakan terdiri dari:
| ( \(X_1\) ) |
Periklanan |
Jumlah dana yang digunakan untuk promosi |
| ( \(X_2\) ) |
Tenaga Penjualan |
Jumlah karyawan bagian penjualan |
| ( \(X_3\) ) |
Kepuasan |
Tingkat kepuasan pelanggan |
| ( \(X_4\) ) |
Persaingan |
Tingkat persaingan antar perusahaan |
| ( \(Y\) ) |
Tingkat Kesuksesan |
Kategori: Rendah, Sedang, atau Tinggi |
Karena variabel terikat (Tingkat Kesuksesan)
memiliki tiga kategori, maka model akan membentuk
dua persamaan logit, dengan kategori dasar (pembanding)
adalah “Rendah”.
Persamaan pertama membandingkan kategori “Sedang”
terhadap “Rendah”, dan persamaan kedua membandingkan
kategori “Tinggi” terhadap
“Rendah”.
1⃣ Persamaan untuk kategori “Sedang” dibanding “Rendah”
\[
\ln\left(\frac{P(Y = \text{Sedang})}{P(Y = \text{Rendah})}\right)
= \beta_{0,sed} + \beta_{1,sed}(Periklanan) + \beta_{2,sed}(Tenaga\
Penjualan) + \beta_{3,sed}(Kepuasan) + \beta_{4,sed}(Persaingan)
\]
Artinya: persamaan ini menggambarkan seberapa besar
kemungkinan perusahaan memiliki tingkat kesuksesan “Sedang” dibanding
“Rendah”, berdasarkan empat faktor di atas.
2⃣ Persamaan untuk kategori “Tinggi” dibanding “Rendah”
\[
\ln\left(\frac{P(Y = \text{Tinggi})}{P(Y = \text{Rendah})}\right)
= \beta_{0,ting} + \beta_{1,ting}(Periklanan) + \beta_{2,ting}(Tenaga\
Penjualan) + \beta_{3,ting}(Kepuasan) + \beta_{4,ting}(Persaingan)
\]
Artinya: persamaan ini menunjukkan kemungkinan perusahaan
mencapai kesuksesan “Tinggi” dibanding “Rendah”, tergantung
dari seberapa besar nilai iklan, tenaga penjualan, kepuasan, dan
persaingan yang dimilikinya.
1.2.2 Makna Rumus dalam Konteks Data
Secara sederhana, rumus tersebut berfungsi untuk menghitung
peluang suatu perusahaan masuk dalam kategori
kesuksesan tertentu berdasarkan nilai dari variabel-variabelnya.
Jika koefisien (β) bernilai positif, artinya
variabel tersebut meningkatkan peluang perusahaan untuk
memiliki tingkat kesuksesan yang lebih tinggi. Contohnya, jika koefisien
“Periklanan” positif, maka semakin besar dana yang digunakan untuk
iklan, semakin tinggi kemungkinan perusahaan berada pada tingkat
kesuksesan “Sedang” atau “Tinggi”.
Sebaliknya, jika koefisien (β) bernilai negatif,
maka variabel tersebut menurunkan peluang perusahaan
untuk mencapai tingkat kesuksesan yang lebih tinggi. Misalnya, jika
“Persaingan” memiliki koefisien negatif, artinya semakin tinggi tingkat
persaingan, semakin kecil peluang perusahaan untuk mencapai kesuksesan
“Tinggi”.
2.Penerapan Regresi Logistik Multinomial
Dalam tugas kali ini, digunakan analisis regresi logistik
multinomial untuk mengetahui faktor-faktor yang
memengaruhi tingkat kesuksesan suatu usaha atau perusahaan.
Data yang digunakan berisi beberapa variabel yang dianggap dapat
memengaruhi hasil akhir (tingkat kesuksesan), yaitu:
- Periklanan → seberapa besar upaya promosi yang
dilakukan,
- Tenaga Penjualan → seberapa banyak tenaga yang
terlibat dalam proses penjualan(sales-nya),
- Kepuasan → seberapa puas pelanggan terhadap produk
atau layanan,
- Persaingan → seberapa besar tekanan dari pesaing di
pasar.
Sedangkan variabel yang ingin diprediksi adalah Tingkat
Kesuksesan, yang memiliki tiga kategori: Rendah,
Sedang, Tinggi.
Dengan menggunakan regresi logistik multinomial, analisis ini
bertujuan untuk:
- Mengetahui pengaruh masing-masing faktor terhadap
peluang suatu usaha berada pada tingkat kesuksesan tertentu.
- Membandingkan kemungkinan antar kategori, misalnya
peluang berada di tingkat Tinggi dibanding Rendah,
atau Sedang dibanding Rendah.
- Melihat faktor mana yang paling berpengaruh dalam
meningkatkan peluang keberhasilan suatu usaha.
2.1 Menampilkan Data Regresi Logisti Multinomial (Pengaruh
Faktor dalam Penjualan Penjualan terhadap Kesuksesan)
2.2 Pembangunan Model Regresi Logistik
Multinomial
2.2.1. Menampilkan Kode untuk Model Regresi Logistik
Multinomial
# 1. Panggil library yang dibutuhkan
library(nnet) # untuk fungsi multinom()
library(dplyr) # untuk olah data
# 2. Baca file CSV
data <- read.csv("data multinomial logistics regression 2.csv",
stringsAsFactors = FALSE,
colClasses = "character",
check.names = FALSE)
# 3. Ubah tipe data agar bisa dianalisis
data_multi <- data %>%
mutate(
Periklanan = as.numeric(gsub("\\.", "", Periklanan)),
`Tenaga Penjualan` = as.numeric(gsub("\\.", "", `Tenaga Penjualan`)),
Kepuasan = as.numeric(gsub("\\.", "", Kepuasan)),
Persaingan = as.numeric(gsub("\\.", "", Persaingan)),
`Tingkat Kesuksesan` = factor(`Tingkat Kesuksesan`,
levels = c("Rendah", "Sedang", "Tinggi"))
)
# 4. Bangun model regresi logistik multinomial
model_multi <- multinom(
`Tingkat Kesuksesan` ~ Periklanan + `Tenaga Penjualan` + Kepuasan + Persaingan,
data = data_multi
)
## # weights: 18 (10 variable)
## initial value 219.722458
## final value 219.722458
## converged
# 5. Tampilkan ringkasan model
summary(model_multi)
## Call:
## multinom(formula = `Tingkat Kesuksesan` ~ Periklanan + `Tenaga Penjualan` +
## Kepuasan + Persaingan, data = data_multi)
##
## Coefficients:
## (Intercept) Periklanan `Tenaga Penjualan` Kepuasan
## Sedang -4.691250e-33 -1.824321e-17 -1.026521e-17 -5.885049e-17
## Tinggi 9.382499e-33 -1.670891e-16 2.442452e-16 1.676947e-16
## Persaingan
## Sedang 1.024808e-16
## Tinggi -1.912334e-16
##
## Std. Errors:
## (Intercept) Periklanan `Tenaga Penjualan` Kepuasan Persaingan
## Sedang NaN 7.482794e-17 1.424806e-16 5.808512e-17 5.590177e-17
## Tinggi NaN 8.683027e-17 1.501287e-16 5.901390e-17 6.282393e-17
##
## Residual Deviance: 439.4449
## AIC: 459.4449
# 6. Hitung nilai z-value dan p-value
z_values <- summary(model_multi)$coefficients / summary(model_multi)$standard.errors
p_values <- 2 * (1 - pnorm(abs(z_values)))
hasil_model <- cbind(
"z-value" = round(z_values, 3),
"p-value" = round(p_values, 4)
)
# 7. Tampilkan hasil akhir
hasil_model
## (Intercept) Periklanan `Tenaga Penjualan` Kepuasan Persaingan
## Sedang NaN -0.244 -0.072 -1.013 1.833
## Tinggi NaN -1.924 1.627 2.842 -3.044
## (Intercept) Periklanan `Tenaga Penjualan` Kepuasan Persaingan
## Sedang NaN 0.8074 0.9426 0.3110 0.0668
## Tinggi NaN 0.0543 0.1038 0.0045 0.0023
2.2.2 Interpretasi Output Model
Model yang dijalankan sudah berhasil (converged),
artinya programnya bisa selesai menghitung. Tapi, hasilnya menunjukkan
bahwa tidak ada faktor yang benar-benar berpengaruh secara
signifikan.
Mari lihat satu per satu hasilnya :
a.Tabel Koefisien
| Sedang |
Periklanan |
-0.000000000000000018 |
Hampir nol → Iklan tidak berpengaruh nyata |
| Sedang |
Tenaga Penjualan |
-0.000000000000000010 |
Hampir nol → Jumlah tenaga penjualan tidak berpengaruh |
| Sedang |
Kepuasan |
-0.000000000000000059 |
Hampir nol → Kepuasan pelanggan tidak berpengaruh nyata |
| Sedang |
Persaingan |
+0.000000000000000102 |
Kecil sekali → Tidak berpengaruh |
| Tinggi |
Periklanan |
-0.000000000000000167 |
Hampir nol → Iklan tidak berpengaruh |
| Tinggi |
Tenaga Penjualan |
+0.000000000000000244 |
Hampir nol → Jumlah sales tidak berpengaruh |
| Tinggi |
Kepuasan |
+0.000000000000000168 |
Hampir nol → Kepuasan tidak berpengaruh |
| Tinggi |
Persaingan |
-0.000000000000000191 |
Hampir nol → Persaingan tidak berpengaruh |
Semua angka ini sangat-sangat kecil (mendekati nol),
artinya tidak ada hubungan nyata antara
variabel-variabel tersebut dengan “Tingkat Kesuksesan”.
b. Standard Error
Hasilnya seperti ini:
| Sedang |
Periklanan |
0.000000000000000074 |
| Sedang |
Tenaga Penjualan |
0.000000000000000142 |
| Sedang |
Kepuasan |
0.000000000000000058 |
| Sedang |
Persaingan |
0.000000000000000055 |
| Tinggi |
Periklanan |
0.000000000000000086 |
| Tinggi |
Tenaga Penjualan |
0.000000000000000150 |
| Tinggi |
Kepuasan |
0.000000000000000059 |
| Tinggi |
Persaingan |
0.000000000000000062 |
Ada juga beberapa NaN (Not a Number) di bagian
intercept, artinya:
Model tidak bisa menghitung karena datanya terlalu
mirip antar kategori (Rendah–Sedang–Tinggi).
yang artinya:
Data terlalu “seragam” — sehingga model bingung membedakan mana usaha
yang benar-benar rendah, sedang, atau tinggi.
c.Residual Deviance dan AIC
| Residual Deviance |
439.44 |
Semakin kecil nilainya semakin baik. Nilai ini masih cukup besar →
model belum cocok dengan data. |
| AIC |
459.44 |
Digunakan untuk membandingkan model. Nilai besar berarti modelnya
belum bagus. |
Model ini belum bisa menjelaskan hubungan antara faktor dan
kesuksesan dengan baik.
d.Nilai z-value dan p-value
Ini digunakan untuk melihat apakah pengaruh tiap variabel
signifikan atau tidak.
Contoh hasilnya:
| Sedang |
Periklanan |
-0.244 |
0.8074 |
| Sedang |
Tenaga Penjualan |
-0.072 |
0.9426 |
| Sedang |
Kepuasan |
-1.013 |
0.3110 |
| Sedang |
Persaingan |
1.833 |
0.0668 |
| Tinggi |
Periklanan |
-1.924 |
0.0543 |
| Tinggi |
Tenaga Penjualan |
1.627 |
0.1038 |
| Tinggi |
Kepuasan |
2.842 |
0.0045 |
| Tinggi |
Persaingan |
-3.044 |
0.0023 |
Aturan sederhananya:
- Jika p-value < 0.05, berarti signifikan
(berpengaruh nyata)
- Jika p-value > 0.05, berarti tidak
signifikan
Dari hasil di atas:
- Untuk kategori Sedang, semua p-value >
0.05 → tidak ada pengaruh signifikan.
- Untuk kategori Tinggi, hanya Kepuasan
(0.0045) dan Persaingan (0.0023) yang terlihat
signifikan secara statistik, tapi karena nilai
koefisiennya sangat kecil, efek nyatanya tetap lemah
sekali.
Kesimpulan Akhir
Peneliti membangun model multinomial logistic regression untuk
memprediksi tingkat kesuksesan berdasarkan faktor periklanan, tenaga
penjualan, kepuasan pelanggan, dan persaingan. Model telah berhasil
dijalankan (ditandai dengan status converged), namun hasilnya
menunjukkan bahwa:
Nilai koefisien semua variabel sangat kecil.
Artinya, perubahan nilai pada keempat variabel tersebut tidak memberikan
pengaruh yang nyata terhadap perubahan tingkat kesuksesan.
Nilai Standard Error yang sangat kecil dan
munculnya NaN menunjukkan bahwa model kesulitan
menghitung karena data tidak memiliki variasi yang cukup antar
kategori.
Nilai Residual Deviance sebesar 439.44 dan
AIC sebesar 459.44 menunjukkan bahwa tingkat kesalahan
model masih tinggi. Model belum mampu menggambarkan hubungan yang baik
antara variabel independen dan tingkat kesuksesan.
Secara keseluruhan, dapat disimpulkan bahwa model belum
berhasil menjelaskan perbedaan tingkat kesuksesan secara
akurat. Hal ini kemungkinan terjadi karena jumlah data
yang terlalu kecil, kategori yang tidak
seimbang, atau nilai variabel yang mirip antar
observasi.
2.3. Visualisasi Hasil

2.3.1 Penjelasan Tentang Visualisasi
Grafik ini menampilkan hubungan antara empat variabel
prediktor (Periklanan, Tenaga Penjualan, Kepuasan, dan
Persaingan) dengan kategori Tingkat Kesuksesan
(Rendah, Sedang, Tinggi).
Sumbu X (horizontal) → nilai dari tiap variabel
prediktor.
Sumbu Y (vertikal) → kategori tingkat kesuksesan
(1 = Rendah, 2 = Sedang, 3 = Tinggi).
Titik warna → masing-masing observasi (data
perusahaan).
- Ungu = Rendah
- Hijau = Sedang
- Kuning = Tinggi
Garis merah → tren (hasil smoothing LOESS),
menggambarkan arah umum hubungan.
a.Kepuasan
Terlihat semakin tinggi nilai Kepuasan,
titik-titik kuning (Tinggi) makin banyak di bagian atas
grafik.
Garis merah naik di awal, sedikit turun di akhir — tapi secara
umum menunjukkan tren positif ringan.
Ini berarti:
Semakin tinggi tingkat kepuasan pelanggan, semakin besar peluang
perusahaan berada pada tingkat kesuksesan Sedang atau
Tinggi.
Hasil ini sesuai dengan p-value model (di bagian
analisis), di mana Kepuasan (p = 0.0045) termasuk
signifikan untuk kategori “Tinggi”.
🟢 Kesimpulan: Kepuasan pelanggan mempunyai
pengaruh positif nyata terhadap peningkatan tingkat
kesuksesan.
b. Periklanan
- Polanya juga menunjukkan garis merah cenderung naik ke
kanan.
- Artinya, makin besar dana promosi, makin tinggi pula peluang
kesuksesan (lebih banyak titik kuning di kanan atas).
- Namun, tren ini tidak terlalu tajam, dan dalam
hasil model, p-value-nya tidak signifikan (0.0543 →
sedikit di atas 0.05).
🟡 Kesimpulan: Periklanan punya arah
pengaruh positif, tapi belum cukup kuat secara
statistik.
c. Persaingan
- Garis merah justru sedikit turun ketika nilai
Persaingan meningkat.
- Ini menandakan bahwa semakin tinggi tingkat
persaingan, peluang untuk mencapai kesuksesan cenderung
menurun.
- Dalam hasil regresi, variabel ini juga signifikan (p =
0.0023) untuk kategori “Tinggi”, dan koefisiennya
negatif.
🔴 Kesimpulan: Persaingan punya pengaruh
negatif yang signifikan terhadap kesuksesan — artinya,
persaingan ketat bisa menurunkan peluang sukses.
d. Tenaga Penjualan
- Garis merah naik perlahan seiring meningkatnya jumlah tenaga
penjualan.
- Namun, sebaran titiknya cukup acak, jadi hubungan
ini lemah dan tidak signifikan di hasil model (p =
0.1038).
- Jadi meskipun arahnya positif, efeknya kecil banget.
🟡 Kesimpulan: Jumlah tenaga penjualan cenderung
meningkatkan peluang sukses, tapi tidak
signifikan secara statistik.
Kesimpulan Umum dari Visualisasi
Dari empat grafik tersebut bisa disimpulkan:
| Kepuasan |
Positif |
✅ Signifikan |
Kepuasan tinggi → peluang sukses meningkat |
| Periklanan |
Positif |
⚠️ Hampir signifikan |
Iklan lebih banyak → sedikit menaikkan peluang sukses |
| Persaingan |
Negatif |
✅ Signifikan |
Persaingan tinggi → peluang sukses menurun |
| Tenaga Penjualan |
Positif lemah |
❌ Tidak signifikan |
Jumlah sales lebih banyak → pengaruh kecil |
3.Kesimpulan Keseluruhan Regresi Logistik
Multinomial
Secara keseluruhan, Regresi Logistik Multinomial
merupakan salah satu metode statistik yang digunakan untuk memprediksi
variabel dependen bersifat kategorik dengan lebih dari dua
kelas, berdasarkan beberapa variabel independen yang bersifat
numerik atau kategorik. Berbeda dengan regresi logistik biner yang hanya
membedakan dua hasil (misalnya “ya” atau “tidak”), regresi logistik
multinomial mampu menganalisis peluang suatu observasi berada
pada salah satu dari beberapa kategori.
Dalam penelitian ini, metode tersebut digunakan untuk menganalisis
faktor-faktor yang memengaruhi Tingkat Kesuksesan
Usaha, dengan empat variabel prediktor yaitu
Periklanan, Tenaga Penjualan, Kepuasan, dan Persaingan.
Analisis dilakukan untuk mengetahui bagaimana setiap variabel tersebut
berpengaruh terhadap peluang suatu usaha berada pada kategori
Rendah, Sedang, atau Tinggi.
Hasil pemodelan menunjukkan bahwa:
- Model telah berhasil dijalankan dan konvergen,
namun nilai AIC dan deviance yang tinggi menandakan
bahwa model belum sepenuhnya menggambarkan hubungan data secara
optimal.
- Variabel Kepuasan berpengaruh positif
signifikan terhadap peningkatan tingkat kesuksesan (p =
0.0045), artinya semakin tinggi tingkat kepuasan pelanggan, semakin
besar peluang usaha mencapai kesuksesan tinggi.
- Variabel Persaingan menunjukkan pengaruh
negatif signifikan (p = 0.0023), yang berarti semakin
tinggi tingkat persaingan, semakin kecil peluang mencapai kesuksesan
tinggi.
- Variabel Periklanan dan Tenaga
Penjualan menunjukkan arah hubungan positif, namun tidak
signifikan secara statistik.
- Hasil visualisasi memperkuat interpretasi model, di mana garis tren
(warna merah) pada Kepuasan dan Periklanan menunjukkan kecenderungan
naik, sedangkan pada Persaingan justru menurun.
Dengan demikian, dapat disimpulkan bahwa:
Regresi Logistik Multinomial efektif digunakan untuk
memodelkan hubungan antara beberapa variabel independen dengan variabel
dependen yang memiliki tiga atau lebih kategori. Dalam studi
ini, model berhasil menunjukkan bahwa Kepuasan
merupakan faktor yang paling berpengaruh positif terhadap tingkat
kesuksesan usaha, sedangkan Persaingan berpengaruh
negatif signifikan. Dua variabel lainnya, Periklanan
dan Tenaga Penjualan, belum memberikan pengaruh yang
signifikan terhadap perubahan tingkat kesuksesan.
Sebagai saran, model ini dapat ditingkatkan dengan:
- Menambah jumlah dan variasi data agar model lebih stabil,
- Melakukan uji lanjutan seperti analisis interaksi antar
variabel, dan
- Mencoba pendekatan klasifikasi lain (seperti
random forest atau ordinal regression) untuk melihat
perbandingan performa model.
4. Perbandingan antara Regresi Logistik Biner dan Regresi
Logistik Mutinomial
4.1 Perbedaan Konsep Dasar
| Jumlah Kategori Variabel Dependen
(Y) |
2 kategori (contoh: Ya/Tidak,
Sukses/Gagal) |
≥ 3 kategori (contoh: Rendah, Sedang,
Tinggi) |
| Jenis Analisis |
Menghitung peluang terjadinya salah satu dari dua
hasil |
Menghitung peluang observasi masuk ke salah satu dari
beberapa kategori |
| Persamaan Logit |
Hanya 1 persamaan logit |
Membentuk beberapa persamaan logit (sebanyak kategori -
1) |
| Kategori Pembanding (Base) |
Salah satu kategori dianggap sebagai pembanding
(biasanya “0”) |
Salah satu kategori dianggap dasar, dan setiap kategori
lain dibandingkan dengan dasar tersebut |
| Tujuan Analisis |
Mengetahui faktor-faktor yang memengaruhi dua
kemungkinan hasil |
Mengetahui faktor-faktor yang memengaruhi hasil dengan
banyak tingkatan |
| Contoh Kasus |
Apakah seseorang membeli produk (Ya/Tidak) |
Tingkat kepuasan pelanggan (Rendah, Sedang,
Tinggi) |
4.2 Perbandingan Berdasarkan Output Model
| Koefisien (β) |
Menunjukkan seberapa besar pengaruh tiap variabel
terhadap peluang hasil “1” (misalnya sukses). |
Menunjukkan pengaruh tiap variabel terhadap setiap
kategori dibanding kategori dasar. |
| Interpretasi Koefisien |
Jika β positif → meningkatkan peluang sukses. Jika
negatif → menurunkan peluang. |
Sama, tapi berlaku untuk tiap kategori (misal: “Sedang”
vs “Rendah”, “Tinggi” vs “Rendah”). |
| Nilai p-value |
Menunjukkan apakah pengaruh tiap variabel signifikan
terhadap hasil “1”. |
Menunjukkan signifikansi pengaruh tiap variabel
terhadap tiap kategori dibanding dasar. |
| Output Utama di R |
Coefficients, Std. Error, z-value, p-value, AIC |
Sama, tapi hasil lebih banyak karena mencakup semua
kategori hasil. |
| Kinerja Model (AIC, Deviance) |
Digunakan untuk menilai seberapa baik model memprediksi
dua hasil. |
Sama, digunakan untuk melihat kecocokan model dengan
data multi-kategori. |
4.3 Perbandingan Berdasarkan Hasil Output dari
Tugas
| Kategori Hasil (Y) |
Tingkat Kesuksesan memiliki 2 kategori:
Rendah dan Tinggi |
Tingkat Kesuksesan memiliki 3 kategori:
Rendah, Sedang, dan Tinggi |
| Jumlah Persamaan Logit |
1 persamaan (perbandingan antara Tinggi vs
Rendah) |
2 persamaan (perbandingan Sedang vs
Rendah dan Tinggi vs Rendah) |
| Variabel Signifikan |
Hanya Kepuasan yang paling berpengaruh
signifikan terhadap kesuksesan |
Kepuasan dan
Persaingan berpengaruh signifikan pada kategori
Tinggi |
| Arah Pengaruh |
Kepuasan → berpengaruh
positif terhadap peluang kesuksesan |
Kepuasan → berpengaruh
positif, sedangkan Persaingan →
negatif |
| Nilai AIC (Kecocokan Model) |
Lebih kecil, menandakan model sederhana dan
efisien |
Lebih besar karena model lebih kompleks dengan banyak
kategori |
| Kestabilan Model |
Cenderung lebih stabil karena hanya dua kategori
hasil |
Lebih bervariasi karena tiap kategori memiliki hubungan
yang berbeda-beda |
4.4 Kesimpulan Umum Perbandingan
Dari perbandingan di atas dapat disimpulkan bahwa:
- Regresi logistik biner cocok untuk analisis
sederhana dengan dua hasil, menghasilkan model yang lebih stabil dan
mudah diinterpretasikan.
- Regresi logistik multinomial lebih kompleks, karena
mampu menganalisis lebih dari dua kategori hasil, tetapi butuh
data yang lebih banyak dan variatif agar hasilnya
signifikan.
- Dalam kedua model, arah pengaruh variabel tetap
sama, hanya saja multinomial memperluas
analisisnya ke lebih banyak kategori.
- Pada kedua model, Kepuasan pelanggan tetap menjadi
faktor paling berpengaruh positif, sedangkan Persaingan
cenderung memberi pengaruh negatif terhadap tingkat kesuksesan.
🟢 Garis besar:
Regresi logistik biner lebih efisien untuk kasus sederhana, sedangkan
regresi logistik multinomial memberikan pemahaman yang lebih mendalam
tentang bagaimana variabel memengaruhi berbagai tingkatan hasil.
LS0tDQp0aXRsZTogIlR1Z2FzIEluZGl2aWR1Ig0Kc3VidGl0bGU6ICJSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsIg0KYXV0aG9yOiAiT2xpdmlhIE1laWxpbmRhIERhdnRpbiBQZXNpcmVyb24iDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIHNyYz0iY2lwcGllMi5qcGciIHdpZHRoPSIzMDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSJGb3RvIERpcmkiPg0KDQotLS0NCg0KIyAqKlJlZ3Jlc2kgTG9naXN0aWsgTXVsdGlub21pYWwqKg0KDQojIDEuICoqS29uc2VwIERhc2FyKioNCg0KIyMgMS4xICoqUGVuZ2VydGlhbiBSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKioNCg0KKipSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKiogYWRhbGFoIHNhbGFoIHNhdHUgbWV0b2RlIGFuYWxpc2lzIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiB1bnR1ayAqKm1lbXByZWRpa3NpIGtlbXVuZ2tpbmFuIChwZWx1YW5nKSoqIGRhcmkgc3VhdHUga2VqYWRpYW4geWFuZyBtZW1pbGlraSAqKmxlYmloIGRhcmkgZHVhIGhhc2lsIGF0YXUga2F0ZWdvcmkqKi4NCg0KTW9kZWwgaW5pIG1lcnVwYWthbiAqKnBlbmdlbWJhbmdhbiBkYXJpIHJlZ3Jlc2kgbG9naXN0aWsgYmluZXIqKiwgeWFuZyBhd2FsbnlhIGhhbnlhIGJpc2EgZGlndW5ha2FuIHVudHVrIG1lbXByZWRpa3NpIGhhc2lsIGRlbmdhbiAqKmR1YSBrZW11bmdraW5hbiBzYWphKiosIHNlcGVydGkgKnlhL3RpZGFrKiwgKnN1a3Nlcy9nYWdhbCosIGF0YXUgKm1lbWJlbGkvdGlkYWsgbWVtYmVsaSouDQoNCkRhbGFtIHJlZ3Jlc2kgbG9naXN0aWsgbXVsdGlub21pYWwsIGhhc2lsIHlhbmcgaW5naW4gZGlwcmVkaWtzaSBiaXNhIG1lbWlsaWtpICoqdGlnYSBhdGF1IGxlYmloIHBpbGloYW4qKiwgY29udG9obnlhOg0KDQoqIFRpbmdrYXQga2VzdWtzZXNhbiBiaXNuaXM6ICpyZW5kYWgqLCAqc2VkYW5nKiwgYXRhdSAqdGluZ2dpKg0KKiBLZXB1YXNhbiBwZWxhbmdnYW46ICprdXJhbmcgcHVhcyosICpwdWFzKiwgYXRhdSAqc2FuZ2F0IHB1YXMqDQoqIEtlcHV0dXNhbiBrb25zdW1lbjogKnRpZGFrIG1lbWJlbGkqLCAqbWVuaW1iYW5nKiwgYXRhdSAqbWVtYmVsaSoNCg0KVHVqdWFuIHV0YW1hIGRhcmkgbW9kZWwgaW5pIGFkYWxhaCB1bnR1ayBtZW5nZXRhaHVpICoqZmFrdG9yLWZha3RvciBtYW5hIHlhbmcgcGFsaW5nIGJlcnBlbmdhcnVoIHRlcmhhZGFwIHBlbHVhbmcgdGVyamFkaW55YSBzdWF0dSBrYXRlZ29yaSBoYXNpbCB0ZXJ0ZW50dSoqLg0KQXJ0aW55YSwga2l0YSBiaXNhIG1lbGloYXQgYmFnYWltYW5hIHZhcmlhYmVsLXZhcmlhYmVsIHNlcGVydGkgKmlrbGFuKiwgKnRlbmFnYSBwZW5qdWFsYW4qLCBhdGF1ICprZXB1YXNhbiBwZWxhbmdnYW4qIGRhcGF0IG1lbmluZ2thdGthbiBwZWx1YW5nIGtlYmVyaGFzaWxhbiBzdWF0dSB1c2FoYS4NCg0KU2VjYXJhIHNlZGVyaGFuYSwgKipyZWdyZXNpIGxvZ2lzdGlrIG11bHRpbm9taWFsIG1lbWJhbnR1IGtpdGEgbWVtYWhhbWkgaHVidW5nYW4gYW50YXJhIGJlYmVyYXBhIGZha3RvciAodmFyaWFiZWwgYmViYXMpKiogZGVuZ2FuICoqa2VtdW5na2luYW4gc3VhdHUgaGFzaWwgKHZhcmlhYmVsIHRlcmlrYXQpKiogeWFuZyBtZW1pbGlraSBsZWJpaCBkYXJpIGR1YSBwaWxpaGFuLg0KDQpNb2RlbCBpbmkgYmVrZXJqYSBkZW5nYW4gY2FyYSBtZW1iYW5kaW5na2FuIHNldGlhcCBrYXRlZ29yaSBoYXNpbCB0ZXJoYWRhcCBzYXR1IGthdGVnb3JpIHlhbmcgZGlqYWRpa2FuICoqYWN1YW4gKGJhc2UgY2F0ZWdvcnkpKiouDQpNZWxhbHVpIHBlcmJhbmRpbmdhbiBpbmksIGtpdGEgYmlzYSBtZWxpaGF0IHNlYmVyYXBhIGJlc2FyIGtlbXVuZ2tpbmFuIHN1YXR1IGRhdGEgdGVybWFzdWsgZGFsYW0ga2F0ZWdvcmkgdGVydGVudHUgZGliYW5kaW5nIGthdGVnb3JpIGFjdWFuIHRlcnNlYnV0Lg0KDQpEZW5nYW4ga2F0YSBsYWluLCByZWdyZXNpIGxvZ2lzdGlrIG11bHRpbm9taWFsIG1lbXVuZ2tpbmthbiBraXRhIHVudHVrOg0KDQoqICoqTWVtcHJlZGlrc2kgcGVsdWFuZyB0ZXJqYWRpbnlhIGJlcmJhZ2FpIHRpbmdrYXQgaGFzaWwqKg0KKiAqKk1lbmdldGFodWkgcGVuZ2FydWggbWFzaW5nLW1hc2luZyBmYWt0b3IgdGVyaGFkYXAgc2V0aWFwIHRpbmdrYXQgaGFzaWwqKg0KKiAqKk1lbWJhbnR1IHBlbmdhbWJpbGFuIGtlcHV0dXNhbioqIGJlcmRhc2Fya2FuIGRhdGEgZGFuIGFuYWxpc2lzIHByb2JhYmlsaXRhcw0KDQoNCiMjIDEuMiAqKlBlbmplbGFzYW4gUnVtdXMgUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqDQoNClJ1bXVzIHVtdW0gcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCBkYXBhdCBkaXR1bGlza2FuIHNlYmFnYWkgYmVyaWt1dDoNCg0KJCQNClxsblxsZWZ0KFxmcmFje1AoWSA9IGopfXtQKFkgPSBcdGV4dHtkYXNhcn0pfVxyaWdodCkNCj0gXGJldGFfezBqfSArIFxiZXRhX3sxan1YXzEgKyBcYmV0YV97Mmp9WF8yICsgXGJldGFfezNqfVhfMyArIFxiZXRhX3s0an1YXzQNCiQkDQoNCmRlbmdhbjoNCg0KKiAoICRQKFkgPSBqKSQgKSA6IHBlbHVhbmcgYmFod2Egc3VhdHUgb2JzZXJ2YXNpIChtaXNhbG55YSBwZXJ1c2FoYWFuKSB0ZXJtYXN1ayBkYWxhbSBrYXRlZ29yaSAqaiogKG1pc2FsbnlhIOKAnFNlZGFuZ+KAnSBhdGF1IOKAnFRpbmdnaeKAnSksDQoqICggJFAoWSA9IFx0ZXh0e2Rhc2FyfSkkICkgOiBwZWx1YW5nIG9ic2VydmFzaSB0ZXJtYXN1ayBrYXRlZ29yaSBkYXNhciAobWlzYWxueWEg4oCcUmVuZGFo4oCdKSwNCiogKCAkXGJldGFfezBqfSQgKSA6IGtvbnN0YW50YSAobmlsYWkgZGFzYXIgdGFucGEgcGVuZ2FydWggdmFyaWFiZWwgbGFpbiksDQoqICggJFxiZXRhX3sxan0sIFxiZXRhX3syan0sIFxiZXRhX3szan0sIFxiZXRhX3s0an0kICkgOiBrb2VmaXNpZW4geWFuZyBtZW51bmp1a2thbiBiZXNhciBkYW4gYXJhaCBwZW5nYXJ1aCBkYXJpIG1hc2luZy1tYXNpbmcgdmFyaWFiZWwsDQoqICggJFhfMSwgWF8yLCBYXzMsIFhfNCQgKSA6IHZhcmlhYmVsIGJlYmFzIHlhbmcgbWVtZW5nYXJ1aGkgaGFzaWwuDQoNCg0KIyMjIDEuMi4xICoqQ29udG9oIFBlbmVyYXBhbiBwYWRhIERhdGFzZXQgVGluZ2thdCBLZXN1a3Nlc2FuIFBlbmp1YWxhbiBCZXJkYXNhcmthbiBCZXJiYWdhaSBGYWt0b3IgKioNCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmksIHZhcmlhYmVsIGJlYmFzIHlhbmcgZGlndW5ha2FuIHRlcmRpcmkgZGFyaToNCg0KfCBTaW1ib2wgIHwgVmFyaWFiZWwgICAgICAgICAgIHwgS2V0ZXJhbmdhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDotLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKCAkWF8xJCApIHwgUGVyaWtsYW5hbiAgICAgICAgIHwgSnVtbGFoIGRhbmEgeWFuZyBkaWd1bmFrYW4gdW50dWsgcHJvbW9zaSB8DQp8ICggJFhfMiQgKSB8IFRlbmFnYSBQZW5qdWFsYW4gICB8IEp1bWxhaCBrYXJ5YXdhbiBiYWdpYW4gcGVuanVhbGFuICAgICAgICAgfA0KfCAoICRYXzMkICkgfCBLZXB1YXNhbiAgICAgICAgICAgfCBUaW5na2F0IGtlcHVhc2FuIHBlbGFuZ2dhbiAgICAgICAgICAgICAgIHwNCnwgKCAkWF80JCApIHwgUGVyc2FpbmdhbiAgICAgICAgIHwgVGluZ2thdCBwZXJzYWluZ2FuIGFudGFyIHBlcnVzYWhhYW4gICAgICB8DQp8ICggJFkkICkgICB8IFRpbmdrYXQgS2VzdWtzZXNhbiB8IEthdGVnb3JpOiBSZW5kYWgsIFNlZGFuZywgYXRhdSBUaW5nZ2kgICAgfA0KDQpLYXJlbmEgdmFyaWFiZWwgdGVyaWthdCAoKipUaW5na2F0IEtlc3Vrc2VzYW4qKikgbWVtaWxpa2kgKip0aWdhIGthdGVnb3JpKiosIG1ha2EgbW9kZWwgYWthbiBtZW1iZW50dWsgKipkdWEgcGVyc2FtYWFuIGxvZ2l0KiosIGRlbmdhbiBrYXRlZ29yaSBkYXNhciAocGVtYmFuZGluZykgYWRhbGFoICoq4oCcUmVuZGFo4oCdKiouDQoNClBlcnNhbWFhbiBwZXJ0YW1hIG1lbWJhbmRpbmdrYW4ga2F0ZWdvcmkgKirigJxTZWRhbmfigJ0qKiB0ZXJoYWRhcCAqKuKAnFJlbmRhaOKAnSoqLCBkYW4gcGVyc2FtYWFuIGtlZHVhIG1lbWJhbmRpbmdrYW4ga2F0ZWdvcmkgKirigJxUaW5nZ2nigJ0qKiB0ZXJoYWRhcCAqKuKAnFJlbmRhaOKAnSoqLg0KDQoNCg0KIyMjIyAx4oOjIFBlcnNhbWFhbiB1bnR1ayBrYXRlZ29yaSDigJxTZWRhbmfigJ0gZGliYW5kaW5nIOKAnFJlbmRhaCINCg0KJCQNClxsblxsZWZ0KFxmcmFje1AoWSA9IFx0ZXh0e1NlZGFuZ30pfXtQKFkgPSBcdGV4dHtSZW5kYWh9KX1ccmlnaHQpDQo9IFxiZXRhX3swLHNlZH0gKyBcYmV0YV97MSxzZWR9KFBlcmlrbGFuYW4pICsgXGJldGFfezIsc2VkfShUZW5hZ2FcIFBlbmp1YWxhbikgKyBcYmV0YV97MyxzZWR9KEtlcHVhc2FuKSArIFxiZXRhX3s0LHNlZH0oUGVyc2FpbmdhbikNCiQkDQoNCkFydGlueWE6DQpwZXJzYW1hYW4gaW5pIG1lbmdnYW1iYXJrYW4gKipzZWJlcmFwYSBiZXNhciBrZW11bmdraW5hbiBwZXJ1c2FoYWFuIG1lbWlsaWtpIHRpbmdrYXQga2VzdWtzZXNhbiDigJxTZWRhbmfigJ0gZGliYW5kaW5nIOKAnFJlbmRhaOKAnSoqLCBiZXJkYXNhcmthbiBlbXBhdCBmYWt0b3IgZGkgYXRhcy4NCg0KDQoNCiMjIyMgMuKDoyBQZXJzYW1hYW4gdW50dWsga2F0ZWdvcmkg4oCcVGluZ2dp4oCdIGRpYmFuZGluZyDigJxSZW5kYWjigJ0NCg0KJCQNClxsblxsZWZ0KFxmcmFje1AoWSA9IFx0ZXh0e1RpbmdnaX0pfXtQKFkgPSBcdGV4dHtSZW5kYWh9KX1ccmlnaHQpDQo9IFxiZXRhX3swLHRpbmd9ICsgXGJldGFfezEsdGluZ30oUGVyaWtsYW5hbikgKyBcYmV0YV97Mix0aW5nfShUZW5hZ2FcIFBlbmp1YWxhbikgKyBcYmV0YV97Myx0aW5nfShLZXB1YXNhbikgKyBcYmV0YV97NCx0aW5nfShQZXJzYWluZ2FuKQ0KJCQNCg0KQXJ0aW55YToNCnBlcnNhbWFhbiBpbmkgbWVudW5qdWtrYW4gKiprZW11bmdraW5hbiBwZXJ1c2FoYWFuIG1lbmNhcGFpIGtlc3Vrc2VzYW4g4oCcVGluZ2dp4oCdIGRpYmFuZGluZyDigJxSZW5kYWjigJ0qKiwgdGVyZ2FudHVuZyBkYXJpIHNlYmVyYXBhIGJlc2FyIG5pbGFpIGlrbGFuLCB0ZW5hZ2EgcGVuanVhbGFuLCBrZXB1YXNhbiwgZGFuIHBlcnNhaW5nYW4geWFuZyBkaW1pbGlraW55YS4NCg0KDQojIyMgMS4yLjIgKipNYWtuYSBSdW11cyBkYWxhbSBLb250ZWtzIERhdGEqKg0KDQpTZWNhcmEgc2VkZXJoYW5hLCBydW11cyB0ZXJzZWJ1dCBiZXJmdW5nc2kgdW50dWsgbWVuZ2hpdHVuZyAqKnBlbHVhbmcqKiBzdWF0dSBwZXJ1c2FoYWFuIG1hc3VrIGRhbGFtIGthdGVnb3JpIGtlc3Vrc2VzYW4gdGVydGVudHUgYmVyZGFzYXJrYW4gbmlsYWkgZGFyaSB2YXJpYWJlbC12YXJpYWJlbG55YS4NCg0KKiBKaWthIGtvZWZpc2llbiAozrIpIGJlcm5pbGFpICoqcG9zaXRpZioqLCBhcnRpbnlhIHZhcmlhYmVsIHRlcnNlYnV0ICoqbWVuaW5na2F0a2FuIHBlbHVhbmcqKiBwZXJ1c2FoYWFuIHVudHVrIG1lbWlsaWtpIHRpbmdrYXQga2VzdWtzZXNhbiB5YW5nIGxlYmloIHRpbmdnaS4NCiAgQ29udG9obnlhLCBqaWthIGtvZWZpc2llbiDigJxQZXJpa2xhbmFu4oCdIHBvc2l0aWYsIG1ha2Egc2VtYWtpbiBiZXNhciBkYW5hIHlhbmcgZGlndW5ha2FuIHVudHVrIGlrbGFuLCBzZW1ha2luIHRpbmdnaSBrZW11bmdraW5hbiBwZXJ1c2FoYWFuIGJlcmFkYSBwYWRhIHRpbmdrYXQga2VzdWtzZXNhbiDigJxTZWRhbmfigJ0gYXRhdSDigJxUaW5nZ2nigJ0uDQoNCiogU2ViYWxpa255YSwgamlrYSBrb2VmaXNpZW4gKM6yKSBiZXJuaWxhaSAqKm5lZ2F0aWYqKiwgbWFrYSB2YXJpYWJlbCB0ZXJzZWJ1dCAqKm1lbnVydW5rYW4gcGVsdWFuZyoqIHBlcnVzYWhhYW4gdW50dWsgbWVuY2FwYWkgdGluZ2thdCBrZXN1a3Nlc2FuIHlhbmcgbGViaWggdGluZ2dpLg0KICBNaXNhbG55YSwgamlrYSDigJxQZXJzYWluZ2Fu4oCdIG1lbWlsaWtpIGtvZWZpc2llbiBuZWdhdGlmLCBhcnRpbnlhIHNlbWFraW4gdGluZ2dpIHRpbmdrYXQgcGVyc2Fpbmdhbiwgc2VtYWtpbiBrZWNpbCBwZWx1YW5nIHBlcnVzYWhhYW4gdW50dWsgbWVuY2FwYWkga2VzdWtzZXNhbiDigJxUaW5nZ2nigJ0uDQoNCi0tLQ0KDQojIDIuKipQZW5lcmFwYW4gUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqIA0KDQpEYWxhbSB0dWdhcyBrYWxpIGluaSwgZGlndW5ha2FuICoqYW5hbGlzaXMgcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCoqIHVudHVrIG1lbmdldGFodWkgKipmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkgdGluZ2thdCBrZXN1a3Nlc2FuIHN1YXR1IHVzYWhhIGF0YXUgcGVydXNhaGFhbioqLg0KRGF0YSB5YW5nIGRpZ3VuYWthbiBiZXJpc2kgYmViZXJhcGEgdmFyaWFiZWwgeWFuZyBkaWFuZ2dhcCBkYXBhdCBtZW1lbmdhcnVoaSBoYXNpbCBha2hpciAoKnRpbmdrYXQga2VzdWtzZXNhbiopLCB5YWl0dToNCg0KKiAqKlBlcmlrbGFuYW4qKiDihpIgc2ViZXJhcGEgYmVzYXIgdXBheWEgcHJvbW9zaSB5YW5nIGRpbGFrdWthbiwNCiogKipUZW5hZ2EgUGVuanVhbGFuKiog4oaSIHNlYmVyYXBhIGJhbnlhayB0ZW5hZ2EgeWFuZyB0ZXJsaWJhdCBkYWxhbSBwcm9zZXMgcGVuanVhbGFuKHNhbGVzLW55YSksDQoqICoqS2VwdWFzYW4qKiDihpIgc2ViZXJhcGEgcHVhcyBwZWxhbmdnYW4gdGVyaGFkYXAgcHJvZHVrIGF0YXUgbGF5YW5hbiwNCiogKipQZXJzYWluZ2FuKiog4oaSIHNlYmVyYXBhIGJlc2FyIHRla2FuYW4gZGFyaSBwZXNhaW5nIGRpIHBhc2FyLg0KDQpTZWRhbmdrYW4gdmFyaWFiZWwgeWFuZyBpbmdpbiBkaXByZWRpa3NpIGFkYWxhaCAqKlRpbmdrYXQgS2VzdWtzZXNhbioqLCB5YW5nIG1lbWlsaWtpIHRpZ2Ega2F0ZWdvcmk6DQoqUmVuZGFoKiwNCipTZWRhbmcqLA0KKlRpbmdnaSouDQoNCkRlbmdhbiBtZW5nZ3VuYWthbiByZWdyZXNpIGxvZ2lzdGlrIG11bHRpbm9taWFsLCBhbmFsaXNpcyBpbmkgYmVydHVqdWFuIHVudHVrOg0KDQoxLiAqKk1lbmdldGFodWkgcGVuZ2FydWggbWFzaW5nLW1hc2luZyBmYWt0b3IqKiB0ZXJoYWRhcCBwZWx1YW5nIHN1YXR1IHVzYWhhIGJlcmFkYSBwYWRhIHRpbmdrYXQga2VzdWtzZXNhbiB0ZXJ0ZW50dS4NCjIuICoqTWVtYmFuZGluZ2thbiBrZW11bmdraW5hbiBhbnRhciBrYXRlZ29yaSoqLCBtaXNhbG55YSBwZWx1YW5nIGJlcmFkYSBkaSB0aW5na2F0ICpUaW5nZ2kqIGRpYmFuZGluZyAqUmVuZGFoKiwgYXRhdSAqU2VkYW5nKiBkaWJhbmRpbmcgKlJlbmRhaCouDQozLiAqKk1lbGloYXQgZmFrdG9yIG1hbmEgeWFuZyBwYWxpbmcgYmVycGVuZ2FydWgqKiBkYWxhbSBtZW5pbmdrYXRrYW4gcGVsdWFuZyBrZWJlcmhhc2lsYW4gc3VhdHUgdXNhaGEuDQoNCiMjIDIuMSAqKk1lbmFtcGlsa2FuIERhdGEgUmVncmVzaSBMb2dpc3RpIE11bHRpbm9taWFsIChQZW5nYXJ1aCBGYWt0b3IgZGFsYW0gUGVuanVhbGFuICBQZW5qdWFsYW4gdGVyaGFkYXAgS2VzdWtzZXNhbikqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgQmFjYSBDU1Ygc2ViYWdhaSB0ZWtzIHN1cGF5YSBhbmdrYSBnYWsgZGlwb3RvbmcgYXRhdSBkaXViYWgNCmxpYnJhcnkoRFQpDQpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhIG11bHRpbm9taWFsIGxvZ2lzdGljcyByZWdyZXNzaW9uIDIuY3N2IiwNCiAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIsDQogICAgICAgICAgICAgICAgIGNoZWNrLm5hbWVzID0gRkFMU0UpDQoNCiMgVGFtcGlsa2FuIHNlbXVhIGRhdGEgcGVyc2lzIHNlcGVydGkgZGkgQ1NWIHRhbnBhIG5vbW9yIGJhcmlzDQpkYXRhdGFibGUoDQogIGRhdGEsDQogIHJvd25hbWVzID0gRkFMU0UsICAgICAgICAgICAgICANCiAgb3B0aW9ucyA9IGxpc3Qoc2Nyb2xsWCA9IFRSVUUpIA0KKQ0KDQoNCmBgYA0KDQojIyAyLjIgKipQZW1iYW5ndW5hbiBNb2RlbCBSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKioNCg0KIyMjIDIuMi4xLiBNZW5hbXBpbGthbiBLb2RlIHVudHVrIE1vZGVsIFJlZ3Jlc2kgTG9naXN0aWsgTXVsdGlub21pYWwNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIyAxLiBQYW5nZ2lsIGxpYnJhcnkgeWFuZyBkaWJ1dHVoa2FuDQpsaWJyYXJ5KG5uZXQpICAgICMgdW50dWsgZnVuZ3NpIG11bHRpbm9tKCkNCmxpYnJhcnkoZHBseXIpICAgIyB1bnR1ayBvbGFoIGRhdGENCg0KIyAyLiBCYWNhIGZpbGUgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhIG11bHRpbm9taWFsIGxvZ2lzdGljcyByZWdyZXNzaW9uIDIuY3N2IiwNCiAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIsDQogICAgICAgICAgICAgICAgIGNoZWNrLm5hbWVzID0gRkFMU0UpDQoNCiMgMy4gVWJhaCB0aXBlIGRhdGEgYWdhciBiaXNhIGRpYW5hbGlzaXMNCmRhdGFfbXVsdGkgPC0gZGF0YSAlPiUNCiAgbXV0YXRlKA0KICAgIFBlcmlrbGFuYW4gICAgICAgICAgID0gYXMubnVtZXJpYyhnc3ViKCJcXC4iLCAiIiwgUGVyaWtsYW5hbikpLA0KICAgIGBUZW5hZ2EgUGVuanVhbGFuYCAgID0gYXMubnVtZXJpYyhnc3ViKCJcXC4iLCAiIiwgYFRlbmFnYSBQZW5qdWFsYW5gKSksDQogICAgS2VwdWFzYW4gICAgICAgICAgICAgPSBhcy5udW1lcmljKGdzdWIoIlxcLiIsICIiLCBLZXB1YXNhbikpLA0KICAgIFBlcnNhaW5nYW4gICAgICAgICAgID0gYXMubnVtZXJpYyhnc3ViKCJcXC4iLCAiIiwgUGVyc2FpbmdhbikpLA0KICAgIGBUaW5na2F0IEtlc3Vrc2VzYW5gID0gZmFjdG9yKGBUaW5na2F0IEtlc3Vrc2VzYW5gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlJlbmRhaCIsICJTZWRhbmciLCAiVGluZ2dpIikpDQogICkNCg0KIyA0LiBCYW5ndW4gbW9kZWwgcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbA0KbW9kZWxfbXVsdGkgPC0gbXVsdGlub20oDQogIGBUaW5na2F0IEtlc3Vrc2VzYW5gIH4gUGVyaWtsYW5hbiArIGBUZW5hZ2EgUGVuanVhbGFuYCArIEtlcHVhc2FuICsgUGVyc2FpbmdhbiwNCiAgZGF0YSA9IGRhdGFfbXVsdGkNCikNCg0KIyA1LiBUYW1waWxrYW4gcmluZ2thc2FuIG1vZGVsDQpzdW1tYXJ5KG1vZGVsX211bHRpKQ0KDQojIDYuIEhpdHVuZyBuaWxhaSB6LXZhbHVlIGRhbiBwLXZhbHVlDQp6X3ZhbHVlcyA8LSBzdW1tYXJ5KG1vZGVsX211bHRpKSRjb2VmZmljaWVudHMgLyBzdW1tYXJ5KG1vZGVsX211bHRpKSRzdGFuZGFyZC5lcnJvcnMNCnBfdmFsdWVzIDwtIDIgKiAoMSAtIHBub3JtKGFicyh6X3ZhbHVlcykpKQ0KDQpoYXNpbF9tb2RlbCA8LSBjYmluZCgNCiAgInotdmFsdWUiID0gcm91bmQoel92YWx1ZXMsIDMpLA0KICAicC12YWx1ZSIgPSByb3VuZChwX3ZhbHVlcywgNCkNCikNCg0KIyA3LiBUYW1waWxrYW4gaGFzaWwgYWtoaXINCmhhc2lsX21vZGVsDQoNCmBgYA0KDQojIyMgMi4yLjIgKipJbnRlcnByZXRhc2kgT3V0cHV0IE1vZGVsKioNCg0KTW9kZWwgeWFuZyBkaWphbGFua2FuIHN1ZGFoICoqYmVyaGFzaWwgKGNvbnZlcmdlZCkqKiwgYXJ0aW55YSBwcm9ncmFtbnlhIGJpc2Egc2VsZXNhaSBtZW5naGl0dW5nLg0KVGFwaSwgaGFzaWxueWEgbWVudW5qdWtrYW4gYmFod2EgKip0aWRhayBhZGEgZmFrdG9yIHlhbmcgYmVuYXItYmVuYXIgYmVycGVuZ2FydWggc2VjYXJhIHNpZ25pZmlrYW4uKioNCg0KTWFyaSBsaWhhdCBzYXR1IHBlciBzYXR1IGhhc2lsbnlhIDoNCg0KIyMjIyAgYS5UYWJlbCBLb2VmaXNpZW4NCg0KfCBLYXRlZ29yaSB8IFZhcmlhYmVsICAgICAgICAgfCBOaWxhaSBLb2VmaXNpZW4gICAgICAgfCBBcnRpIFNpbmdrYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IFNlZGFuZyAgIHwgUGVyaWtsYW5hbiAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDAxOCB8IEhhbXBpciBub2wg4oaSIElrbGFuIHRpZGFrIGJlcnBlbmdhcnVoIG55YXRhICAgICAgICAgICAgICB8DQp8IFNlZGFuZyAgIHwgVGVuYWdhIFBlbmp1YWxhbiB8IC0wLjAwMDAwMDAwMDAwMDAwMDAxMCB8IEhhbXBpciBub2wg4oaSIEp1bWxhaCB0ZW5hZ2EgcGVuanVhbGFuIHRpZGFrIGJlcnBlbmdhcnVoICB8DQp8IFNlZGFuZyAgIHwgS2VwdWFzYW4gICAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDA1OSB8IEhhbXBpciBub2wg4oaSIEtlcHVhc2FuIHBlbGFuZ2dhbiB0aWRhayBiZXJwZW5nYXJ1aCBueWF0YSB8DQp8IFNlZGFuZyAgIHwgUGVyc2FpbmdhbiAgICAgICB8ICswLjAwMDAwMDAwMDAwMDAwMDEwMiB8IEtlY2lsIHNla2FsaSDihpIgVGlkYWsgYmVycGVuZ2FydWggICAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgUGVyaWtsYW5hbiAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDE2NyB8IEhhbXBpciBub2wg4oaSIElrbGFuIHRpZGFrIGJlcnBlbmdhcnVoICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgVGVuYWdhIFBlbmp1YWxhbiB8ICswLjAwMDAwMDAwMDAwMDAwMDI0NCB8IEhhbXBpciBub2wg4oaSIEp1bWxhaCBzYWxlcyB0aWRhayBiZXJwZW5nYXJ1aCAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgS2VwdWFzYW4gICAgICAgICB8ICswLjAwMDAwMDAwMDAwMDAwMDE2OCB8IEhhbXBpciBub2wg4oaSIEtlcHVhc2FuIHRpZGFrIGJlcnBlbmdhcnVoICAgICAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgUGVyc2FpbmdhbiAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDE5MSB8IEhhbXBpciBub2wg4oaSIFBlcnNhaW5nYW4gdGlkYWsgYmVycGVuZ2FydWggICAgICAgICAgICAgICB8DQoNCg0KPiBTZW11YSBhbmdrYSBpbmkgKipzYW5nYXQtc2FuZ2F0IGtlY2lsIChtZW5kZWthdGkgbm9sKSoqLCBhcnRpbnlhICoqdGlkYWsgYWRhIGh1YnVuZ2FuIG55YXRhKiogYW50YXJhIHZhcmlhYmVsLXZhcmlhYmVsIHRlcnNlYnV0IGRlbmdhbiDigJxUaW5na2F0IEtlc3Vrc2VzYW7igJ0uDQoNCg0KIyMjIyBiLiBTdGFuZGFyZCBFcnJvciANCg0KSGFzaWxueWEgc2VwZXJ0aSBpbmk6DQoNCnwgS2F0ZWdvcmkgfCBWYXJpYWJlbCAgICAgICAgIHwgU3RhbmRhcmQgRXJyb3IgICAgICAgfA0KfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IFNlZGFuZyAgIHwgUGVyaWtsYW5hbiAgICAgICB8IDAuMDAwMDAwMDAwMDAwMDAwMDc0IHwNCnwgU2VkYW5nICAgfCBUZW5hZ2EgUGVuanVhbGFuIHwgMC4wMDAwMDAwMDAwMDAwMDAxNDIgfA0KfCBTZWRhbmcgICB8IEtlcHVhc2FuICAgICAgICAgfCAwLjAwMDAwMDAwMDAwMDAwMDA1OCB8DQp8IFNlZGFuZyAgIHwgUGVyc2FpbmdhbiAgICAgICB8IDAuMDAwMDAwMDAwMDAwMDAwMDU1IHwNCnwgVGluZ2dpICAgfCBQZXJpa2xhbmFuICAgICAgIHwgMC4wMDAwMDAwMDAwMDAwMDAwODYgfA0KfCBUaW5nZ2kgICB8IFRlbmFnYSBQZW5qdWFsYW4gfCAwLjAwMDAwMDAwMDAwMDAwMDE1MCB8DQp8IFRpbmdnaSAgIHwgS2VwdWFzYW4gICAgICAgICB8IDAuMDAwMDAwMDAwMDAwMDAwMDU5IHwNCnwgVGluZ2dpICAgfCBQZXJzYWluZ2FuICAgICAgIHwgMC4wMDAwMDAwMDAwMDAwMDAwNjIgfA0KDQpBZGEganVnYSBiZWJlcmFwYSAqKk5hTiAoTm90IGEgTnVtYmVyKSoqIGRpIGJhZ2lhbiBpbnRlcmNlcHQsIGFydGlueWE6DQoNCj4gTW9kZWwgdGlkYWsgYmlzYSBtZW5naGl0dW5nIGthcmVuYSBkYXRhbnlhICoqdGVybGFsdSBtaXJpcCoqIGFudGFyIGthdGVnb3JpIChSZW5kYWjigJNTZWRhbmfigJNUaW5nZ2kpLg0KDQp5YW5nIGFydGlueWE6DQoNCj4gRGF0YSB0ZXJsYWx1IOKAnHNlcmFnYW3igJ0g4oCUIHNlaGluZ2dhIG1vZGVsIGJpbmd1bmcgbWVtYmVkYWthbiBtYW5hIHVzYWhhIHlhbmcgYmVuYXItYmVuYXIgcmVuZGFoLCBzZWRhbmcsIGF0YXUgdGluZ2dpLg0KDQoNCiMjIyMgYy5SZXNpZHVhbCBEZXZpYW5jZSBkYW4gQUlDDQoNCnwgSXN0aWxhaCAgICAgICAgICAgICAgIHwgTmlsYWkgIHwgQXJ0aSBTZWRlcmhhbmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCAqKlJlc2lkdWFsIERldmlhbmNlKiogfCA0MzkuNDQgfCBTZW1ha2luIGtlY2lsIG5pbGFpbnlhIHNlbWFraW4gYmFpay4gTmlsYWkgaW5pIG1hc2loIGN1a3VwIGJlc2FyIOKGkiBtb2RlbCBiZWx1bSBjb2NvayBkZW5nYW4gZGF0YS4gfA0KfCAqKkFJQyoqICAgICAgICAgICAgICAgfCA0NTkuNDQgfCBEaWd1bmFrYW4gdW50dWsgbWVtYmFuZGluZ2thbiBtb2RlbC4gTmlsYWkgYmVzYXIgYmVyYXJ0aSBtb2RlbG55YSBiZWx1bSBiYWd1cy4gICAgICAgICAgICAgICAgICAgIHwNCg0KPiBNb2RlbCBpbmkgYmVsdW0gYmlzYSBtZW5qZWxhc2thbiBodWJ1bmdhbiBhbnRhcmEgZmFrdG9yIGRhbiBrZXN1a3Nlc2FuIGRlbmdhbiBiYWlrLg0KDQoNCiMjIyMgZC5OaWxhaSB6LXZhbHVlIGRhbiBwLXZhbHVlDQoNCkluaSBkaWd1bmFrYW4gdW50dWsgbWVsaWhhdCBhcGFrYWggcGVuZ2FydWggdGlhcCB2YXJpYWJlbCAqKnNpZ25pZmlrYW4gYXRhdSB0aWRhayoqLg0KDQpDb250b2ggaGFzaWxueWE6DQoNCnwgS2F0ZWdvcmkgfCBWYXJpYWJlbCAgICAgICAgIHwgei12YWx1ZSB8IHAtdmFsdWUgfA0KfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLSB8DQp8IFNlZGFuZyAgIHwgUGVyaWtsYW5hbiAgICAgICB8IC0wLjI0NCAgfCAwLjgwNzQgIHwNCnwgU2VkYW5nICAgfCBUZW5hZ2EgUGVuanVhbGFuIHwgLTAuMDcyICB8IDAuOTQyNiAgfA0KfCBTZWRhbmcgICB8IEtlcHVhc2FuICAgICAgICAgfCAtMS4wMTMgIHwgMC4zMTEwICB8DQp8IFNlZGFuZyAgIHwgUGVyc2FpbmdhbiAgICAgICB8IDEuODMzICAgfCAwLjA2NjggIHwNCnwgVGluZ2dpICAgfCBQZXJpa2xhbmFuICAgICAgIHwgLTEuOTI0ICB8IDAuMDU0MyAgfA0KfCBUaW5nZ2kgICB8IFRlbmFnYSBQZW5qdWFsYW4gfCAxLjYyNyAgIHwgMC4xMDM4ICB8DQp8IFRpbmdnaSAgIHwgS2VwdWFzYW4gICAgICAgICB8IDIuODQyICAgfCAwLjAwNDUgIHwNCnwgVGluZ2dpICAgfCBQZXJzYWluZ2FuICAgICAgIHwgLTMuMDQ0ICB8IDAuMDAyMyAgfA0KDQoqKkF0dXJhbiBzZWRlcmhhbmFueWE6KioNCg0KKiBKaWthICoqcC12YWx1ZSA8IDAuMDUqKiwgYmVyYXJ0aSBzaWduaWZpa2FuIChiZXJwZW5nYXJ1aCBueWF0YSkNCiogSmlrYSAqKnAtdmFsdWUgPiAwLjA1KiosIGJlcmFydGkgdGlkYWsgc2lnbmlmaWthbg0KDQogRGFyaSBoYXNpbCBkaSBhdGFzOg0KDQoqIFVudHVrIGthdGVnb3JpICoqU2VkYW5nKiosIHNlbXVhIHAtdmFsdWUgKio+IDAuMDUqKiDihpIgdGlkYWsgYWRhIHBlbmdhcnVoIHNpZ25pZmlrYW4uDQoqIFVudHVrIGthdGVnb3JpICoqVGluZ2dpKiosIGhhbnlhICoqS2VwdWFzYW4gKDAuMDA0NSkqKiBkYW4gKipQZXJzYWluZ2FuICgwLjAwMjMpKiogeWFuZyB0ZXJsaWhhdCAqKnNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3RpayoqLCB0YXBpIGthcmVuYSBuaWxhaSBrb2VmaXNpZW5ueWEgc2FuZ2F0IGtlY2lsLCBlZmVrIG55YXRhbnlhIHRldGFwICoqbGVtYWggc2VrYWxpKiouDQoNCg0KIyMjIyAqKktlc2ltcHVsYW4gQWtoaXIgKioNCg0KUGVuZWxpdGkgbWVtYmFuZ3VuIG1vZGVsIG11bHRpbm9taWFsIGxvZ2lzdGljIHJlZ3Jlc3Npb24gdW50dWsgbWVtcHJlZGlrc2kgdGluZ2thdCBrZXN1a3Nlc2FuIGJlcmRhc2Fya2FuIGZha3RvciBwZXJpa2xhbmFuLCB0ZW5hZ2EgcGVuanVhbGFuLCBrZXB1YXNhbiBwZWxhbmdnYW4sIGRhbiBwZXJzYWluZ2FuLg0KTW9kZWwgdGVsYWggYmVyaGFzaWwgZGlqYWxhbmthbiAoZGl0YW5kYWkgZGVuZ2FuIHN0YXR1cyAqY29udmVyZ2VkKiksIG5hbXVuIGhhc2lsbnlhIG1lbnVuanVra2FuIGJhaHdhOg0KDQoxLiAqKk5pbGFpIGtvZWZpc2llbiBzZW11YSB2YXJpYWJlbCBzYW5nYXQga2VjaWwqKi4NCiAgIEFydGlueWEsIHBlcnViYWhhbiBuaWxhaSBwYWRhIGtlZW1wYXQgdmFyaWFiZWwgdGVyc2VidXQgdGlkYWsgbWVtYmVyaWthbiBwZW5nYXJ1aCB5YW5nIG55YXRhIHRlcmhhZGFwIHBlcnViYWhhbiB0aW5na2F0IGtlc3Vrc2VzYW4uDQoNCjIuICoqTmlsYWkgU3RhbmRhcmQgRXJyb3IqKiB5YW5nIHNhbmdhdCBrZWNpbCBkYW4gbXVuY3VsbnlhICoqTmFOKiogbWVudW5qdWtrYW4gYmFod2EgbW9kZWwga2VzdWxpdGFuIG1lbmdoaXR1bmcga2FyZW5hIGRhdGEgdGlkYWsgbWVtaWxpa2kgdmFyaWFzaSB5YW5nIGN1a3VwIGFudGFyIGthdGVnb3JpLg0KDQozLiAqKk5pbGFpIFJlc2lkdWFsIERldmlhbmNlIHNlYmVzYXIgNDM5LjQ0KiogZGFuICoqQUlDIHNlYmVzYXIgNDU5LjQ0KiogbWVudW5qdWtrYW4gYmFod2EgdGluZ2thdCBrZXNhbGFoYW4gbW9kZWwgbWFzaWggdGluZ2dpLiBNb2RlbCBiZWx1bSBtYW1wdSBtZW5nZ2FtYmFya2FuIGh1YnVuZ2FuIHlhbmcgYmFpayBhbnRhcmEgdmFyaWFiZWwgaW5kZXBlbmRlbiBkYW4gdGluZ2thdCBrZXN1a3Nlc2FuLg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIGRhcGF0IGRpc2ltcHVsa2FuIGJhaHdhICoqbW9kZWwgYmVsdW0gYmVyaGFzaWwgbWVuamVsYXNrYW4gcGVyYmVkYWFuIHRpbmdrYXQga2VzdWtzZXNhbiBzZWNhcmEgYWt1cmF0KiouDQpIYWwgaW5pIGtlbXVuZ2tpbmFuIHRlcmphZGkga2FyZW5hICoqanVtbGFoIGRhdGEgeWFuZyB0ZXJsYWx1IGtlY2lsKiosICoqa2F0ZWdvcmkgeWFuZyB0aWRhayBzZWltYmFuZyoqLCBhdGF1ICoqbmlsYWkgdmFyaWFiZWwgeWFuZyBtaXJpcCBhbnRhciBvYnNlcnZhc2kqKi4NCg0KDQojIyAyLjMuICoqVmlzdWFsaXNhc2kgSGFzaWwqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIPCfk4ogVmlzdWFsaXNhc2kgTXVsdGlub21pYWwgTG9naXN0aWMgUmVncmVzc2lvbg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIDHvuI/ig6MgSW5zdGFsbCAmIHBhbmdnaWwgbGlicmFyeSB5YW5nIGRpcGVybHVrYW4NCiMgaW5zdGFsbC5wYWNrYWdlcyhjKCJubmV0IiwgImdncGxvdDIiLCAiZHBseXIiLCAidGlkeXIiKSkNCmxpYnJhcnkobm5ldCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHlyKQ0KDQojIDLvuI/ig6MgQmFjYSBkYXRhc2V0DQpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhIG11bHRpbm9taWFsIGxvZ2lzdGljcyByZWdyZXNzaW9uIDIuY3N2IiwNCiAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICBjaGVjay5uYW1lcyA9IEZBTFNFKQ0KDQojIDPvuI/ig6MgQmVyc2loa2FuIG5hbWEga29sb20gYmlhciBiaXNhIGRpcGFuZ2dpbCBkaSBSDQpuYW1lcyhkYXRhKSA8LSBtYWtlLm5hbWVzKG5hbWVzKGRhdGEpKQ0KDQojIDTvuI/ig6MgUGFzdGlrYW4gdmFyaWFiZWwgdGFyZ2V0IChUaW5na2F0IEtlc3Vrc2VzYW4pIGJlcnVwYSBmYWt0b3INCmRhdGEkVGluZ2thdC5LZXN1a3Nlc2FuIDwtIGZhY3RvcihkYXRhJFRpbmdrYXQuS2VzdWtzZXNhbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJSZW5kYWgiLCAiU2VkYW5nIiwgIlRpbmdnaSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBUUlVFKQ0KDQojIDXvuI/ig6MgQmFuZ3VuIG1vZGVsIHJlZ3Jlc2kgbG9naXN0aWsgbXVsdGlub21pYWwNCm1vZGVsIDwtIG11bHRpbm9tKFRpbmdrYXQuS2VzdWtzZXNhbiB+IFBlcmlrbGFuYW4gKyBUZW5hZ2EuUGVuanVhbGFuICsgS2VwdWFzYW4gKyBQZXJzYWluZ2FuLA0KICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEpDQoNCiMgNu+4j+KDoyBCdWF0IHByZWRpa3NpIHByb2JhYmlsaXRhcyB1bnR1ayBzZXRpYXAga2VsYXMNCnByZWRfcHJvYnMgPC0gcHJlZGljdChtb2RlbCwgdHlwZSA9ICJwcm9icyIpDQoNCiMgN++4j+KDoyBHYWJ1bmdrYW4gaGFzaWwgcHJlZGlrc2kga2UgZGF0YXNldA0KZGF0YV9wcmVkIDwtIGNiaW5kKGRhdGEsIHByZWRfcHJvYnMpDQoNCiMgOO+4j+KDoyBVYmFoIGRhdGEga2UgZm9ybWF0IHBhbmphbmcgdW50dWsgcGxvdHRpbmcNCmRhdGFfbG9uZyA8LSBkYXRhX3ByZWQgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhQZXJpa2xhbmFuLCBUZW5hZ2EuUGVuanVhbGFuLCBLZXB1YXNhbiwgUGVyc2FpbmdhbiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJWYXJpYWJlbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiTmlsYWkiKQ0KDQojIDnvuI/ig6MgQnVhdCB2aXN1YWxpc2FzaQ0KZ2dwbG90KGRhdGFfbG9uZywgYWVzKHggPSBOaWxhaSwgeSA9IGFzLm51bWVyaWMoVGluZ2thdC5LZXN1a3Nlc2FuKSkpICsNCiAgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gVGluZ2thdC5LZXN1a3Nlc2FuKSwgd2lkdGggPSAwLjIsIGFscGhhID0gMC42LCBzaXplID0gMikgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiLCBjb2xvciA9ICJyZWQiLCBzZSA9IEZBTFNFLCBzaXplID0gMS4yKSArDQogIGZhY2V0X3dyYXAoflZhcmlhYmVsLCBzY2FsZXMgPSAiZnJlZV94IiwgbmNvbCA9IDIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IDE6MywgbGFiZWxzID0gYygiUmVuZGFoIiwgIlNlZGFuZyIsICJUaW5nZ2kiKSkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIE11bHRpbm9taWFsIExvZ2lzdGljIFJlZ3Jlc3Npb24iLA0KICAgIHN1YnRpdGxlID0gIkh1YnVuZ2FuIGFudGFyYSBWYXJpYWJlbCBQcmVkaWt0b3IgZGFuIFRpbmdrYXQgS2VzdWtzZXNhbiIsDQogICAgeCA9ICJOaWxhaSBWYXJpYWJlbCBQcmVkaWt0b3IiLA0KICAgIHkgPSAiS2F0ZWdvcmkgVGluZ2thdCBLZXN1a3Nlc2FuIiwNCiAgICBjb2xvciA9ICJLYXRlZ29yaSINCiAgKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTMpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkNCiAgKQ0KDQpgYGANCg0KIyMjIDIuMy4xICoqUGVuamVsYXNhbiBUZW50YW5nIFZpc3VhbGlzYXNpKioNCg0KR3JhZmlrIGluaSBtZW5hbXBpbGthbiAqKmh1YnVuZ2FuIGFudGFyYSBlbXBhdCB2YXJpYWJlbCBwcmVkaWt0b3IqKg0KKCpQZXJpa2xhbmFuLCBUZW5hZ2EgUGVuanVhbGFuLCBLZXB1YXNhbiwgZGFuIFBlcnNhaW5nYW4qKQ0KZGVuZ2FuICoqa2F0ZWdvcmkgVGluZ2thdCBLZXN1a3Nlc2FuKiogKCpSZW5kYWgsIFNlZGFuZywgVGluZ2dpKikuDQoNCiogKipTdW1idSBYIChob3Jpem9udGFsKSoqIOKGkiBuaWxhaSBkYXJpIHRpYXAgdmFyaWFiZWwgcHJlZGlrdG9yLg0KKiAqKlN1bWJ1IFkgKHZlcnRpa2FsKSoqIOKGkiBrYXRlZ29yaSB0aW5na2F0IGtlc3Vrc2VzYW4gKDEgPSBSZW5kYWgsIDIgPSBTZWRhbmcsIDMgPSBUaW5nZ2kpLg0KKiAqKlRpdGlrIHdhcm5hKiog4oaSIG1hc2luZy1tYXNpbmcgb2JzZXJ2YXNpIChkYXRhIHBlcnVzYWhhYW4pLg0KDQogICogVW5ndSA9IFJlbmRhaA0KICAqIEhpamF1ID0gU2VkYW5nDQogICogS3VuaW5nID0gVGluZ2dpDQoqICoqR2FyaXMgbWVyYWgqKiDihpIgdHJlbiAoaGFzaWwgc21vb3RoaW5nIExPRVNTKSwgbWVuZ2dhbWJhcmthbiBhcmFoIHVtdW0gaHVidW5nYW4uDQoNCg0KIyMjIyBhLktlcHVhc2FuDQoNCiogVGVybGloYXQgKipzZW1ha2luIHRpbmdnaSBuaWxhaSBLZXB1YXNhbioqLCB0aXRpay10aXRpayAqa3VuaW5nIChUaW5nZ2kpKiBtYWtpbiBiYW55YWsgZGkgYmFnaWFuIGF0YXMgZ3JhZmlrLg0KKiBHYXJpcyBtZXJhaCBuYWlrIGRpIGF3YWwsIHNlZGlraXQgdHVydW4gZGkgYWtoaXIg4oCUIHRhcGkgc2VjYXJhIHVtdW0gbWVudW5qdWtrYW4gKip0cmVuIHBvc2l0aWYgcmluZ2FuKiouDQoqIEluaSBiZXJhcnRpOg0KDQogID4gU2VtYWtpbiB0aW5nZ2kgdGluZ2thdCBrZXB1YXNhbiBwZWxhbmdnYW4sIHNlbWFraW4gYmVzYXIgcGVsdWFuZyBwZXJ1c2FoYWFuIGJlcmFkYSBwYWRhIHRpbmdrYXQga2VzdWtzZXNhbiAqU2VkYW5nIGF0YXUgVGluZ2dpKi4NCiogSGFzaWwgaW5pICoqc2VzdWFpKiogZGVuZ2FuIHAtdmFsdWUgbW9kZWwgKGRpIGJhZ2lhbiBhbmFsaXNpcyksIGRpIG1hbmEgKipLZXB1YXNhbiAocCA9IDAuMDA0NSkqKiB0ZXJtYXN1ayBzaWduaWZpa2FuIHVudHVrIGthdGVnb3JpIOKAnFRpbmdnaeKAnS4NCg0K8J+foiAqKktlc2ltcHVsYW46KiogS2VwdWFzYW4gcGVsYW5nZ2FuICoqbWVtcHVueWFpIHBlbmdhcnVoIHBvc2l0aWYgbnlhdGEqKiB0ZXJoYWRhcCBwZW5pbmdrYXRhbiB0aW5na2F0IGtlc3Vrc2VzYW4uDQoNCg0KIyMjIyBiLiBQZXJpa2xhbmFuDQoNCiogUG9sYW55YSBqdWdhIG1lbnVuanVra2FuICoqZ2FyaXMgbWVyYWggY2VuZGVydW5nIG5haWsga2Uga2FuYW4qKi4NCiogQXJ0aW55YSwgbWFraW4gYmVzYXIgZGFuYSBwcm9tb3NpLCBtYWtpbiB0aW5nZ2kgcHVsYSBwZWx1YW5nIGtlc3Vrc2VzYW4gKGxlYmloIGJhbnlhayB0aXRpayBrdW5pbmcgZGkga2FuYW4gYXRhcykuDQoqIE5hbXVuLCB0cmVuIGluaSAqKnRpZGFrIHRlcmxhbHUgdGFqYW0qKiwgZGFuIGRhbGFtIGhhc2lsIG1vZGVsLCBwLXZhbHVlLW55YSAqKnRpZGFrIHNpZ25pZmlrYW4qKiAoMC4wNTQzIOKGkiBzZWRpa2l0IGRpIGF0YXMgMC4wNSkuDQoNCvCfn6EgKipLZXNpbXB1bGFuOioqIFBlcmlrbGFuYW4gcHVueWEgKiphcmFoIHBlbmdhcnVoIHBvc2l0aWYqKiwgdGFwaSAqKmJlbHVtIGN1a3VwIGt1YXQgc2VjYXJhIHN0YXRpc3RpayoqLg0KDQoNCiMjIyMgYy4gUGVyc2Fpbmdhbg0KDQoqIEdhcmlzIG1lcmFoIGp1c3RydSBzZWRpa2l0ICoqdHVydW4qKiBrZXRpa2EgbmlsYWkgUGVyc2FpbmdhbiBtZW5pbmdrYXQuDQoqIEluaSBtZW5hbmRha2FuIGJhaHdhICoqc2VtYWtpbiB0aW5nZ2kgdGluZ2thdCBwZXJzYWluZ2FuKiosIHBlbHVhbmcgdW50dWsgbWVuY2FwYWkga2VzdWtzZXNhbiBjZW5kZXJ1bmcgbWVudXJ1bi4NCiogRGFsYW0gaGFzaWwgcmVncmVzaSwgdmFyaWFiZWwgaW5pIGp1Z2EgKipzaWduaWZpa2FuIChwID0gMC4wMDIzKSoqIHVudHVrIGthdGVnb3JpIOKAnFRpbmdnaeKAnSwgZGFuIGtvZWZpc2llbm55YSAqKm5lZ2F0aWYqKi4NCg0K8J+UtCAqKktlc2ltcHVsYW46KiogUGVyc2FpbmdhbiBwdW55YSAqKnBlbmdhcnVoIG5lZ2F0aWYgeWFuZyBzaWduaWZpa2FuKiogdGVyaGFkYXAga2VzdWtzZXNhbiDigJQgYXJ0aW55YSwgcGVyc2FpbmdhbiBrZXRhdCBiaXNhIG1lbnVydW5rYW4gcGVsdWFuZyBzdWtzZXMuDQoNCg0KIyMjIyBkLiBUZW5hZ2EgUGVuanVhbGFuDQoNCiogR2FyaXMgbWVyYWggbmFpayBwZXJsYWhhbiBzZWlyaW5nIG1lbmluZ2thdG55YSBqdW1sYWggdGVuYWdhIHBlbmp1YWxhbi4NCiogTmFtdW4sIHNlYmFyYW4gdGl0aWtueWEgKipjdWt1cCBhY2FrKiosIGphZGkgaHVidW5nYW4gaW5pICoqbGVtYWggZGFuIHRpZGFrIHNpZ25pZmlrYW4qKiBkaSBoYXNpbCBtb2RlbCAocCA9IDAuMTAzOCkuDQoqIEphZGkgbWVza2lwdW4gYXJhaG55YSBwb3NpdGlmLCBlZmVrbnlhIGtlY2lsIGJhbmdldC4NCg0K8J+foSAqKktlc2ltcHVsYW46KiogSnVtbGFoIHRlbmFnYSBwZW5qdWFsYW4gY2VuZGVydW5nICoqbWVuaW5na2F0a2FuIHBlbHVhbmcgc3Vrc2VzKiosIHRhcGkgKip0aWRhayBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsqKi4NCg0KDQojIyMgKipLZXNpbXB1bGFuIFVtdW0gZGFyaSBWaXN1YWxpc2FzaSoqDQoNCkRhcmkgZW1wYXQgZ3JhZmlrIHRlcnNlYnV0IGJpc2EgZGlzaW1wdWxrYW46DQoNCnwgVmFyaWFiZWwgICAgICAgICAgICAgfCBBcmFoIEh1YnVuZ2FuIHwgU2lnbmlmaWthbnNpICAgICAgICAgfCBBcnRpIFZpc3VhbGlzYXNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCAqKktlcHVhc2FuKiogICAgICAgICB8IFBvc2l0aWYgICAgICAgfCDinIUgU2lnbmlmaWthbiAgICAgICAgIHwgS2VwdWFzYW4gdGluZ2dpIOKGkiBwZWx1YW5nIHN1a3NlcyBtZW5pbmdrYXQgICAgICAgICAgICB8DQp8ICoqUGVyaWtsYW5hbioqICAgICAgIHwgUG9zaXRpZiAgICAgICB8IOKaoO+4jyBIYW1waXIgc2lnbmlmaWthbiB8IElrbGFuIGxlYmloIGJhbnlhayDihpIgc2VkaWtpdCBtZW5haWtrYW4gcGVsdWFuZyBzdWtzZXMgfA0KfCAqKlBlcnNhaW5nYW4qKiAgICAgICB8IE5lZ2F0aWYgICAgICAgfCDinIUgU2lnbmlmaWthbiAgICAgICAgIHwgUGVyc2FpbmdhbiB0aW5nZ2kg4oaSIHBlbHVhbmcgc3Vrc2VzIG1lbnVydW4gICAgICAgICAgICB8DQp8ICoqVGVuYWdhIFBlbmp1YWxhbioqIHwgUG9zaXRpZiBsZW1haCB8IOKdjCBUaWRhayBzaWduaWZpa2FuICAgfCBKdW1sYWggc2FsZXMgbGViaWggYmFueWFrIOKGkiBwZW5nYXJ1aCBrZWNpbCAgICAgICAgICAgIHwNCg0KLS0tDQoNCiMgMy4qKktlc2ltcHVsYW4gS2VzZWx1cnVoYW4gUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqIA0KDQpTZWNhcmEga2VzZWx1cnVoYW4sICoqUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqIG1lcnVwYWthbiBzYWxhaCBzYXR1IG1ldG9kZSBzdGF0aXN0aWsgeWFuZyBkaWd1bmFrYW4gdW50dWsgbWVtcHJlZGlrc2kgKip2YXJpYWJlbCBkZXBlbmRlbiBiZXJzaWZhdCBrYXRlZ29yaWsgZGVuZ2FuIGxlYmloIGRhcmkgZHVhIGtlbGFzKiosIGJlcmRhc2Fya2FuIGJlYmVyYXBhIHZhcmlhYmVsIGluZGVwZW5kZW4geWFuZyBiZXJzaWZhdCBudW1lcmlrIGF0YXUga2F0ZWdvcmlrLg0KQmVyYmVkYSBkZW5nYW4gcmVncmVzaSBsb2dpc3RpayBiaW5lciB5YW5nIGhhbnlhIG1lbWJlZGFrYW4gZHVhIGhhc2lsIChtaXNhbG55YSDigJx5YeKAnSBhdGF1IOKAnHRpZGFr4oCdKSwgcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCBtYW1wdSBtZW5nYW5hbGlzaXMgKipwZWx1YW5nIHN1YXR1IG9ic2VydmFzaSBiZXJhZGEgcGFkYSBzYWxhaCBzYXR1IGRhcmkgYmViZXJhcGEga2F0ZWdvcmkqKi4NCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmksIG1ldG9kZSB0ZXJzZWJ1dCBkaWd1bmFrYW4gdW50dWsgbWVuZ2FuYWxpc2lzICoqZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIFRpbmdrYXQgS2VzdWtzZXNhbiBVc2FoYSoqLCBkZW5nYW4gZW1wYXQgdmFyaWFiZWwgcHJlZGlrdG9yIHlhaXR1ICoqUGVyaWtsYW5hbiwgVGVuYWdhIFBlbmp1YWxhbiwgS2VwdWFzYW4sIGRhbiBQZXJzYWluZ2FuKiouDQpBbmFsaXNpcyBkaWxha3VrYW4gdW50dWsgbWVuZ2V0YWh1aSBiYWdhaW1hbmEgc2V0aWFwIHZhcmlhYmVsIHRlcnNlYnV0IGJlcnBlbmdhcnVoIHRlcmhhZGFwIHBlbHVhbmcgc3VhdHUgdXNhaGEgYmVyYWRhIHBhZGEga2F0ZWdvcmkgKipSZW5kYWgsIFNlZGFuZywgYXRhdSBUaW5nZ2kqKi4NCg0KSGFzaWwgcGVtb2RlbGFuIG1lbnVuanVra2FuIGJhaHdhOg0KDQoxLiBNb2RlbCB0ZWxhaCAqKmJlcmhhc2lsIGRpamFsYW5rYW4gZGFuIGtvbnZlcmdlbioqLCBuYW11biBuaWxhaSAqKkFJQyBkYW4gZGV2aWFuY2UgeWFuZyB0aW5nZ2kqKiBtZW5hbmRha2FuIGJhaHdhIG1vZGVsIGJlbHVtIHNlcGVudWhueWEgbWVuZ2dhbWJhcmthbiBodWJ1bmdhbiBkYXRhIHNlY2FyYSBvcHRpbWFsLg0KMi4gVmFyaWFiZWwgKipLZXB1YXNhbioqIGJlcnBlbmdhcnVoICoqcG9zaXRpZiBzaWduaWZpa2FuKiogdGVyaGFkYXAgcGVuaW5na2F0YW4gdGluZ2thdCBrZXN1a3Nlc2FuIChwID0gMC4wMDQ1KSwgYXJ0aW55YSBzZW1ha2luIHRpbmdnaSB0aW5na2F0IGtlcHVhc2FuIHBlbGFuZ2dhbiwgc2VtYWtpbiBiZXNhciBwZWx1YW5nIHVzYWhhIG1lbmNhcGFpIGtlc3Vrc2VzYW4gdGluZ2dpLg0KMy4gVmFyaWFiZWwgKipQZXJzYWluZ2FuKiogbWVudW5qdWtrYW4gcGVuZ2FydWggKipuZWdhdGlmIHNpZ25pZmlrYW4qKiAocCA9IDAuMDAyMyksIHlhbmcgYmVyYXJ0aSBzZW1ha2luIHRpbmdnaSB0aW5na2F0IHBlcnNhaW5nYW4sIHNlbWFraW4ga2VjaWwgcGVsdWFuZyBtZW5jYXBhaSBrZXN1a3Nlc2FuIHRpbmdnaS4NCjQuIFZhcmlhYmVsICoqUGVyaWtsYW5hbioqIGRhbiAqKlRlbmFnYSBQZW5qdWFsYW4qKiBtZW51bmp1a2thbiBhcmFoIGh1YnVuZ2FuIHBvc2l0aWYsIG5hbXVuIHRpZGFrIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3Rpay4NCjUuIEhhc2lsIHZpc3VhbGlzYXNpIG1lbXBlcmt1YXQgaW50ZXJwcmV0YXNpIG1vZGVsLCBkaSBtYW5hIGdhcmlzIHRyZW4gKHdhcm5hIG1lcmFoKSBwYWRhIEtlcHVhc2FuIGRhbiBQZXJpa2xhbmFuIG1lbnVuanVra2FuIGtlY2VuZGVydW5nYW4gbmFpaywgc2VkYW5na2FuIHBhZGEgUGVyc2FpbmdhbiBqdXN0cnUgbWVudXJ1bi4NCg0KRGVuZ2FuIGRlbWlraWFuLCBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YToNCg0KPiAqKlJlZ3Jlc2kgTG9naXN0aWsgTXVsdGlub21pYWwgZWZla3RpZiBkaWd1bmFrYW4gdW50dWsgbWVtb2RlbGthbiBodWJ1bmdhbiBhbnRhcmEgYmViZXJhcGEgdmFyaWFiZWwgaW5kZXBlbmRlbiBkZW5nYW4gdmFyaWFiZWwgZGVwZW5kZW4geWFuZyBtZW1pbGlraSB0aWdhIGF0YXUgbGViaWgga2F0ZWdvcmkuKioNCj4gRGFsYW0gc3R1ZGkgaW5pLCBtb2RlbCBiZXJoYXNpbCBtZW51bmp1a2thbiBiYWh3YSAqKktlcHVhc2FuKiogbWVydXBha2FuIGZha3RvciB5YW5nIHBhbGluZyBiZXJwZW5nYXJ1aCBwb3NpdGlmIHRlcmhhZGFwIHRpbmdrYXQga2VzdWtzZXNhbiB1c2FoYSwgc2VkYW5na2FuICoqUGVyc2FpbmdhbioqIGJlcnBlbmdhcnVoIG5lZ2F0aWYgc2lnbmlmaWthbi4NCj4gRHVhIHZhcmlhYmVsIGxhaW5ueWEsICoqUGVyaWtsYW5hbioqIGRhbiAqKlRlbmFnYSBQZW5qdWFsYW4qKiwgYmVsdW0gbWVtYmVyaWthbiBwZW5nYXJ1aCB5YW5nIHNpZ25pZmlrYW4gdGVyaGFkYXAgcGVydWJhaGFuIHRpbmdrYXQga2VzdWtzZXNhbi4NCg0KU2ViYWdhaSBzYXJhbiwgbW9kZWwgaW5pIGRhcGF0IGRpdGluZ2thdGthbiBkZW5nYW46DQoNCiogTWVuYW1iYWgganVtbGFoIGRhbiB2YXJpYXNpIGRhdGEgYWdhciBtb2RlbCBsZWJpaCBzdGFiaWwsDQoqIE1lbGFrdWthbiB1amkgbGFuanV0YW4gc2VwZXJ0aSAqKmFuYWxpc2lzIGludGVyYWtzaSBhbnRhciB2YXJpYWJlbCoqLCBkYW4NCiogTWVuY29iYSAqKnBlbmRla2F0YW4ga2xhc2lmaWthc2kgbGFpbioqIChzZXBlcnRpICpyYW5kb20gZm9yZXN0KiBhdGF1ICpvcmRpbmFsIHJlZ3Jlc3Npb24qKSB1bnR1ayBtZWxpaGF0IHBlcmJhbmRpbmdhbiBwZXJmb3JtYSBtb2RlbC4NCg0KLS0tDQoNCiMgNC4gKipQZXJiYW5kaW5nYW4gYW50YXJhIFJlZ3Jlc2kgTG9naXN0aWsgQmluZXIgZGFuIFJlZ3Jlc2kgTG9naXN0aWsgTXV0aW5vbWlhbCoqDQoNCiMjIDQuMSAqKlBlcmJlZGFhbiBLb25zZXAgRGFzYXIqKg0KDQp8IEFzcGVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIEJpbmVyKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKipKdW1sYWggS2F0ZWdvcmkgVmFyaWFiZWwgRGVwZW5kZW4gKFkpKiogfCAyIGthdGVnb3JpIChjb250b2g6ICpZYS9UaWRhayosICpTdWtzZXMvR2FnYWwqKSAgICAgICAgICAgICAgICAgfCDiiaUgMyBrYXRlZ29yaSAoY29udG9oOiAqUmVuZGFoKiwgKlNlZGFuZyosICpUaW5nZ2kqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipKZW5pcyBBbmFsaXNpcyoqICAgICAgICAgICAgICAgICAgICAgICAgfCBNZW5naGl0dW5nIHBlbHVhbmcgdGVyamFkaW55YSBzYWxhaCBzYXR1IGRhcmkgZHVhIGhhc2lsICAgICAgICAgfCBNZW5naGl0dW5nIHBlbHVhbmcgb2JzZXJ2YXNpIG1hc3VrIGtlIHNhbGFoIHNhdHUgZGFyaSBiZWJlcmFwYSBrYXRlZ29yaSAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqUGVyc2FtYWFuIExvZ2l0KiogICAgICAgICAgICAgICAgICAgICAgIHwgSGFueWEgMSBwZXJzYW1hYW4gbG9naXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVtYmVudHVrIGJlYmVyYXBhIHBlcnNhbWFhbiBsb2dpdCAoc2ViYW55YWsga2F0ZWdvcmkgLSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkthdGVnb3JpIFBlbWJhbmRpbmcgKEJhc2UpKiogICAgICAgICAgICB8IFNhbGFoIHNhdHUga2F0ZWdvcmkgZGlhbmdnYXAgc2ViYWdhaSBwZW1iYW5kaW5nIChiaWFzYW55YSDigJww4oCdKSAgfCBTYWxhaCBzYXR1IGthdGVnb3JpIGRpYW5nZ2FwIGRhc2FyLCBkYW4gc2V0aWFwIGthdGVnb3JpIGxhaW4gZGliYW5kaW5na2FuIGRlbmdhbiBkYXNhciB0ZXJzZWJ1dCB8DQp8ICoqVHVqdWFuIEFuYWxpc2lzKiogICAgICAgICAgICAgICAgICAgICAgIHwgTWVuZ2V0YWh1aSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkgZHVhIGtlbXVuZ2tpbmFuIGhhc2lsIHwgTWVuZ2V0YWh1aSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkgaGFzaWwgZGVuZ2FuIGJhbnlhayB0aW5na2F0YW4gICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkNvbnRvaCBLYXN1cyoqICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFwYWthaCBzZXNlb3JhbmcgbWVtYmVsaSBwcm9kdWsgKFlhL1RpZGFrKSAgICAgICAgICAgICAgICAgICAgICB8IFRpbmdrYXQga2VwdWFzYW4gcGVsYW5nZ2FuIChSZW5kYWgsIFNlZGFuZywgVGluZ2dpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KDQojIyA0LjIgKipQZXJiYW5kaW5nYW4gQmVyZGFzYXJrYW4gT3V0cHV0IE1vZGVsKioNCg0KfCBBc3BlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKkJpbmFyeSBMb2dpc3RpYyBSZWdyZXNzaW9uKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqTXVsdGlub21pYWwgTG9naXN0aWMgUmVncmVzc2lvbioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKipLb2VmaXNpZW4gKM6yKSoqICAgICAgICAgICAgICAgICB8IE1lbnVuanVra2FuIHNlYmVyYXBhIGJlc2FyIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgdGVyaGFkYXAgcGVsdWFuZyBoYXNpbCDigJwx4oCdIChtaXNhbG55YSBzdWtzZXMpLiB8IE1lbnVuanVra2FuIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgdGVyaGFkYXAgc2V0aWFwIGthdGVnb3JpIGRpYmFuZGluZyBrYXRlZ29yaSBkYXNhci4gICAgICAgICAgICB8DQp8ICoqSW50ZXJwcmV0YXNpIEtvZWZpc2llbioqICAgICAgICB8IEppa2EgzrIgcG9zaXRpZiDihpIgbWVuaW5na2F0a2FuIHBlbHVhbmcgc3Vrc2VzLiBKaWthIG5lZ2F0aWYg4oaSIG1lbnVydW5rYW4gcGVsdWFuZy4gICAgICAgICAgICAgICAgfCBTYW1hLCB0YXBpIGJlcmxha3UgdW50dWsgdGlhcCBrYXRlZ29yaSAobWlzYWw6IOKAnFNlZGFuZ+KAnSB2cyDigJxSZW5kYWjigJ0sIOKAnFRpbmdnaeKAnSB2cyDigJxSZW5kYWjigJ0pLiAgICAgIHwNCnwgKipOaWxhaSBwLXZhbHVlKiogICAgICAgICAgICAgICAgIHwgTWVudW5qdWtrYW4gYXBha2FoIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgc2lnbmlmaWthbiB0ZXJoYWRhcCBoYXNpbCDigJwx4oCdLiAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVudW5qdWtrYW4gc2lnbmlmaWthbnNpIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgdGVyaGFkYXAgdGlhcCBrYXRlZ29yaSBkaWJhbmRpbmcgZGFzYXIuICAgICAgICAgIHwNCnwgKipPdXRwdXQgVXRhbWEgZGkgUioqICAgICAgICAgICAgIHwgQ29lZmZpY2llbnRzLCBTdGQuIEVycm9yLCB6LXZhbHVlLCBwLXZhbHVlLCBBSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTYW1hLCB0YXBpIGhhc2lsIGxlYmloIGJhbnlhayBrYXJlbmEgbWVuY2FrdXAgc2VtdWEga2F0ZWdvcmkgaGFzaWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKktpbmVyamEgTW9kZWwgKEFJQywgRGV2aWFuY2UpKiogfCBEaWd1bmFrYW4gdW50dWsgbWVuaWxhaSBzZWJlcmFwYSBiYWlrIG1vZGVsIG1lbXByZWRpa3NpIGR1YSBoYXNpbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNhbWEsIGRpZ3VuYWthbiB1bnR1ayBtZWxpaGF0IGtlY29jb2thbiBtb2RlbCBkZW5nYW4gZGF0YSBtdWx0aS1rYXRlZ29yaS4gICAgICAgICAgICAgICAgICAgICAgICB8DQoNCg0KIyMgNC4zICoqUGVyYmFuZGluZ2FuIEJlcmRhc2Fya2FuIEhhc2lsIE91dHB1dCBkYXJpIFR1Z2FzKioNCg0KfCAqKkFzcGVrKiogICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIEJpbmVyIChCb29rZG93bikqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsIChUdWdhcyBJbmkpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqS2F0ZWdvcmkgSGFzaWwgKFkpKiogICAgICAgICAgfCAqVGluZ2thdCBLZXN1a3Nlc2FuKiBtZW1pbGlraSAyIGthdGVnb3JpOiAqUmVuZGFoKiBkYW4gKlRpbmdnaSogICAgfCAqVGluZ2thdCBLZXN1a3Nlc2FuKiBtZW1pbGlraSAzIGthdGVnb3JpOiAqUmVuZGFoKiwgKlNlZGFuZyosIGRhbiAqVGluZ2dpKiAgICAgfA0KfCAqKkp1bWxhaCBQZXJzYW1hYW4gTG9naXQqKiAgICAgIHwgMSBwZXJzYW1hYW4gKHBlcmJhbmRpbmdhbiBhbnRhcmEgKlRpbmdnaSogdnMgKlJlbmRhaCopICAgICAgICAgICAgIHwgMiBwZXJzYW1hYW4gKHBlcmJhbmRpbmdhbiAqU2VkYW5nKiB2cyAqUmVuZGFoKiBkYW4gKlRpbmdnaSogdnMgKlJlbmRhaCopICAgICAgIHwNCnwgKipWYXJpYWJlbCBTaWduaWZpa2FuKiogICAgICAgICB8IEhhbnlhICoqS2VwdWFzYW4qKiB5YW5nIHBhbGluZyBiZXJwZW5nYXJ1aCBzaWduaWZpa2FuIHRlcmhhZGFwIGtlc3Vrc2VzYW4gfCAqKktlcHVhc2FuKiogZGFuICoqUGVyc2FpbmdhbioqIGJlcnBlbmdhcnVoIHNpZ25pZmlrYW4gcGFkYSBrYXRlZ29yaSAqVGluZ2dpKiAgfA0KfCAqKkFyYWggUGVuZ2FydWgqKiAgICAgICAgICAgICAgIHwgKipLZXB1YXNhbioqIOKGkiBiZXJwZW5nYXJ1aCAqKnBvc2l0aWYqKiB0ZXJoYWRhcCBwZWx1YW5nIGtlc3Vrc2VzYW4gfCAqKktlcHVhc2FuKiog4oaSIGJlcnBlbmdhcnVoICoqcG9zaXRpZioqLCBzZWRhbmdrYW4gKipQZXJzYWluZ2FuKiog4oaSICoqbmVnYXRpZioqIHwNCnwgKipOaWxhaSBBSUMgKEtlY29jb2thbiBNb2RlbCkqKiB8IExlYmloIGtlY2lsLCBtZW5hbmRha2FuIG1vZGVsIHNlZGVyaGFuYSBkYW4gZWZpc2llbiAgICAgICAgICAgICAgICB8IExlYmloIGJlc2FyIGthcmVuYSBtb2RlbCBsZWJpaCBrb21wbGVrcyBkZW5nYW4gYmFueWFrIGthdGVnb3JpICAgICAgICAgICAgICAgICB8DQp8ICoqS2VzdGFiaWxhbiBNb2RlbCoqICAgICAgICAgICAgfCBDZW5kZXJ1bmcgbGViaWggc3RhYmlsIGthcmVuYSBoYW55YSBkdWEga2F0ZWdvcmkgaGFzaWwgICAgICAgICAgICAgfCBMZWJpaCBiZXJ2YXJpYXNpIGthcmVuYSB0aWFwIGthdGVnb3JpIG1lbWlsaWtpIGh1YnVuZ2FuIHlhbmcgYmVyYmVkYS1iZWRhICAgICAgfA0KDQoNCiMjIDQuNCAqKktlc2ltcHVsYW4gVW11bSBQZXJiYW5kaW5nYW4qKg0KDQpEYXJpIHBlcmJhbmRpbmdhbiBkaSBhdGFzIGRhcGF0IGRpc2ltcHVsa2FuIGJhaHdhOg0KDQoxLiAqKlJlZ3Jlc2kgbG9naXN0aWsgYmluZXIqKiBjb2NvayB1bnR1ayBhbmFsaXNpcyBzZWRlcmhhbmEgZGVuZ2FuIGR1YSBoYXNpbCwgbWVuZ2hhc2lsa2FuIG1vZGVsIHlhbmcgbGViaWggc3RhYmlsIGRhbiBtdWRhaCBkaWludGVycHJldGFzaWthbi4NCjIuICoqUmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCoqIGxlYmloIGtvbXBsZWtzLCBrYXJlbmEgbWFtcHUgbWVuZ2FuYWxpc2lzIGxlYmloIGRhcmkgZHVhIGthdGVnb3JpIGhhc2lsLCB0ZXRhcGkgYnV0dWggKipkYXRhIHlhbmcgbGViaWggYmFueWFrIGRhbiB2YXJpYXRpZioqIGFnYXIgaGFzaWxueWEgc2lnbmlmaWthbi4NCjMuIERhbGFtIGtlZHVhIG1vZGVsLCAqKmFyYWggcGVuZ2FydWggdmFyaWFiZWwgdGV0YXAgc2FtYSoqLCBoYW55YSBzYWphICoqbXVsdGlub21pYWwqKiBtZW1wZXJsdWFzIGFuYWxpc2lzbnlhIGtlIGxlYmloIGJhbnlhayBrYXRlZ29yaS4NCjQuIFBhZGEga2VkdWEgbW9kZWwsICoqS2VwdWFzYW4gcGVsYW5nZ2FuKiogdGV0YXAgbWVuamFkaSBmYWt0b3IgcGFsaW5nIGJlcnBlbmdhcnVoIHBvc2l0aWYsIHNlZGFuZ2thbiAqKlBlcnNhaW5nYW4qKiBjZW5kZXJ1bmcgbWVtYmVyaSBwZW5nYXJ1aCBuZWdhdGlmIHRlcmhhZGFwIHRpbmdrYXQga2VzdWtzZXNhbi4NCg0K8J+foiAqKkdhcmlzIGJlc2FyOioqDQoNCj4gUmVncmVzaSBsb2dpc3RpayBiaW5lciBsZWJpaCBlZmlzaWVuIHVudHVrIGthc3VzIHNlZGVyaGFuYSwgc2VkYW5na2FuIHJlZ3Jlc2kgbG9naXN0aWsgbXVsdGlub21pYWwgbWVtYmVyaWthbiBwZW1haGFtYW4geWFuZyBsZWJpaCBtZW5kYWxhbSB0ZW50YW5nIGJhZ2FpbWFuYSB2YXJpYWJlbCBtZW1lbmdhcnVoaSBiZXJiYWdhaSB0aW5na2F0YW4gaGFzaWwuDQoNCg0KIyBSZWZlcmVuc2kNCg0KPlNpcmVnYXIsIEIuICgyMDI1KS4gUmVncmVzc2lvbiBNb2RlbHMg4oCTIEFuYWx5c2lzIGFuZCBQcmVkaWN0aXZlIE1vZGVsaW5nIFtCYWdpYW4gMjogUmVncmVzc2lvbiBNb2RlbHNdLiBEaWFtYmlsIGRhcmkgaHR0cHM6Ly9ib29rZG93bi5vcmcvY29udGVudC9hMTQyYjE3Mi02OWIyLTQzNmQtYmRiMC05ZGE2ZDA0NmEwZjkvMDItUmVncmVzc2lvbl9Nb2RlbC5odG1sDQoNCj5UaWJyYW5pIEVkdWNhdGlvbi4gKDIwMjMpLiBSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsIFNQU1MgSUkgTGVuZ2thcCBkZW5nYW4gcGVuamVsYXNhbm55YSBbVmlkZW9dLiBZb3VUdWJlLiBodHRwczovL3lvdXR1LmJlL2xqQU1UQkZsRkFJP3NpPWhMUVh1QWlWYUtlOE5BcG8=