Analisis Korelasi

1. Hubungan Antar Peubah

  • Analisis korelasi digunakan untuk mempelajari hubungan antara dua atau lebih peubah.
  • Jenis hubungan:
    • Hubungan Sebab-Akibat: Perubahan satu peubah secara langsung memengaruhi peubah lainnya (contoh: dosis pupuk → hasil panen).
    • Bukan Sebab-Akibat: Kedua peubah berubah bersama, tetapi tidak saling memengaruhi secara langsung (contoh: tinggi badan dan berat badan).

2. Relationship vs Causal Relationship

  • Relationship: Hubungan statistik antara dua peubah, tidak selalu berarti satu menyebabkan yang lain.
  • Causal Relationship: Hubungan sebab-akibat, di mana perubahan satu peubah menyebabkan perubahan peubah lain.
  • Penentuan hubungan sebab-akibat memerlukan pengetahuan dari bidang ilmu terkait, bukan hanya analisis statistik.

3. Alat Analisis Relationship

Pemilihan alat analisis didasarkan pada: - Skala pengukuran data (numerik atau kategorik) - Jenis hubungan antar peubah

Peubah 1 Peubah 2 Alat Analisis
Numerik Numerik Pearson, Spearman
Numerik Kategorik Korelasi Biserial
Kategorik Numerik Korelasi Biserial
Kategorik Kategorik Spearman (ordinal), Chi-Square, Tetrachoric

4. Analisis Korelasi

  • Digunakan untuk mengukur kekuatan dan arah hubungan linier antara dua peubah.
  • Tidak menyimpulkan hubungan sebab-akibat.
  • Koefisien korelasi populasi dilambangkan dengan ρ ndefined, sedangkan sampel dengan r

5. Hubungan Linier Antar Peubah Kontinu

  • Korelasi mengukur sejauh mana titik data mendekati garis lurus.
  • Nilai korelasi:
    • r = 1: Hubungan linier positif sempurna
    • r = -1 : Hubungan linier negatif sempurna
    • r = 0 : Tidak ada hubungan linier

6. Arah Korelasi

  • Positif: Jika satu peubah naik, peubah lain cenderung naik.
  • Negatif: Jika satu peubah naik, peubah lain cenderung turun.
  • Nol: Tidak ada hubungan yang konsisten.

7. Korelasi Pearson

Digunakan untuk data numerik dengan skala interval/rasio.

Rumus:

\[ r_{xy} = \frac{S_{xy}}{S_x \cdot S_y} \]

dengan:

\[ S_{xy} = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{n-1} \]

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

\[ S_y = \sqrt{\frac{\sum (y_i - \bar{y})^2}{n-1}} \]


8. Hipotesis Korelasi

  • Hipotesis Nol (H0)): ρ = 0(tidak ada korelasi)
  • Hipotesis Alternatif (H1)): ρ = 1 (ada korelasi)

Statistik Uji:

\[ t = \frac{r \sqrt{n-2}}{\sqrt{1 - r^2}} \]

dengan derajat bebas (db = n - 2 )

Kriteria:

Tolak H0 jika:

\[ |t| > t_{\alpha/2, \, (n-2)} \]


9. Korelasi Spearman

  • Digunakan untuk data ordinal atau data numerik yang diubah menjadi peringkat.
  • Cocok ketika hubungan tidak linier atau data tidak berdistribusi normal.

Rumus:

\[ \rho = 1 - \frac{6 \sum D^2}{N(N^2 - 1)} \]

dengan:

- D = selisih peringkat antara dua peubah
- N = jumlah pasangan data


10. Kesalahan Interpretasi Korelasi

  • Korelasi tinggi tidak berarti ada hubungan sebab-akibat.
  • Outlier dapat memengaruhi nilai korelasi.
  • Korelasi hanya mengukur hubungan linier, bukan non-linier.

Ringkasan

  • Analisis korelasi membantu memahami hubungan antar peubah.
  • Pilih metode berdasarkan jenis data dan tujuan analisis.
  • Selalu hati-hati dalam menginterpretasikan hasil korelasi.

Contoh Studi Kasus

Contoh Kasus Perhitungan Manual Korelasi Pearson

Hubungan antara Jam Belajar per Minggu dan Nilai Ujian Matematika

Siswa Jam Belajar (x) Nilai Ujian (y)
1 5 65
2 8 75
3 12 85
4 15 90
5 18 95
6 20 98

Langkah Perhitungan Manual:

Step 1: Hitung rata-rata x dan y

x̄ = (5 + 8 + 12 + 15 + 18 + 20)/6 = 78/6 = 13
ȳ = (65 + 75 + 85 + 90 + 95 + 98)/6 = 508/6 = 84.67

Step 2: Hitung deviasi dan produk deviasi

Siswa x y (x-x̄) (y-ȳ) (x-x̄)² (y-ȳ)² (x-x̄)(y-ȳ)
1 5 65 -8 -19.67 64 386.78 157.36
2 8 75 -5 -9.67 25 93.44 48.35
3 12 85 -1 0.33 1 0.11 -0.33
4 15 90 2 5.33 4 28.44 10.66
5 18 95 5 10.33 25 106.78 51.65
6 20 98 7 13.33 49 177.78 93.31
Total 168 793.33 361.00

Step 3: Hitung kovarians dan standar deviasi

S_xy = Σ(x-x̄)(y-ȳ)/(n-1) = 361.00/5 = 72.20
S_x = √[Σ(x-x̄)²/(n-1)] = √(168/5) = √33.6 = 5.80
S_y = √[Σ(y-ȳ)²/(n-1)] = √(793.33/5) = √158.67 = 12.60

Step 4: Hitung koefisien korelasi Pearson

r = S_xy/(S_x × S_y) = 72.20/(5.80 × 12.60) = 72.20/73.08 = 0.988

Interpretasi: Korelasi sangat kuat positif (0.988) antara jam belajar dan nilai ujian.

Contoh Kasus Perhitungan Manual Korelasi Spearman

Peringkat Kepopuleran Artis dan Jumlah Followers Media Sosial (dalam ribu)

Artis Peringkat Kepopuleran (x) Jumlah Followers (y)
A 1 150
B 2 180
C 3 120
D 4 200
E 5 170
F 6 220

Langkah Perhitungan Manual:

Step 1: Beri peringkat pada kedua variabel

Artis x (peringkat) y (followers) Rank_x Rank_y D = Rank_x - Rank_y
A 1 150 1 3 -2 4
B 2 180 2 2 0 0
C 3 120 3 6 -3 9
D 4 200 4 1 3 9
E 5 170 5 4 1 1
F 6 220 6 5 1 1
Total 24

Step 2: Hitung koefisien korelasi Spearman

ρ = 1 - [6 × ΣD²] / [n(n² - 1)] 
ρ = 1 - [6 × 24] / [6(36 - 1)] 
ρ = 1 - 144 / [6 × 35] 
ρ = 1 - 144 / 210 
ρ = 1 - 0.686 
ρ = 0.314

Interpretasi: Korelasi lemah positif (0.314) antara peringkat kepopuleran dan jumlah followers.

Kode R untuk Korelasi Pearson dan Spearman

# Data untuk Korelasi Pearson
jam_belajar <- c(5, 8, 12, 15, 18, 20)
nilai_ujian <- c(65, 75, 85, 90, 95, 98)

# Korelasi Pearson
pearson_result <- cor(jam_belajar, nilai_ujian, method = "pearson")
cat("Korelasi Pearson:", pearson_result, "\n")
## Korelasi Pearson: 0.988837
# Test signifikansi Pearson
pearson_test <- cor.test(jam_belajar, nilai_ujian, method = "pearson")
print(pearson_test)
## 
##  Pearson's product-moment correlation
## 
## data:  jam_belajar and nilai_ujian
## t = 13.273, df = 4, p-value = 0.0001862
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8976069 0.9988330
## sample estimates:
##      cor 
## 0.988837
# Data untuk Korelasi Spearman
peringkat_artis <- c(1, 2, 3, 4, 5, 6)
followers <- c(150, 180, 120, 200, 170, 220)

# Korelasi Spearman
spearman_result <- cor(peringkat_artis, followers, method = "spearman")
cat("Korelasi Spearman:", spearman_result, "\n")
## Korelasi Spearman: 0.6
# Test signifikansi Spearman
spearman_test <- cor.test(peringkat_artis, followers, method = "spearman")
print(spearman_test)
## 
##  Spearman's rank correlation rho
## 
## data:  peringkat_artis and followers
## S = 14, p-value = 0.2417
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho 
## 0.6
# Visualisasi Scatter Plot
par(mfrow = c(1, 2))

# Plot untuk Pearson
plot(jam_belajar, nilai_ujian, main = "Korelasi Pearson\nJam Belajar vs Nilai Ujian",
     xlab = "Jam Belajar", ylab = "Nilai Ujian", pch = 19, col = "blue")
abline(lm(nilai_ujian ~ jam_belajar), col = "red")

# Plot untuk Spearman
plot(peringkat_artis, followers, main = "Korelasi Spearman\nPeringkat vs Followers",
     xlab = "Peringkat Kepopuleran", ylab = "Followers (ribu)", pch = 19, col = "green")
abline(lm(followers ~ peringkat_artis), col = "red")

# Reset plot layout
par(mfrow = c(1, 1))

Kesimpulan:

  • Korelasi Pearson menunjukkan hubungan yang sangat kuat antara jam belajar dan nilai ujian

  • Korelasi Spearman menunjukkan hubungan yang lemah antara peringkat kepopuleran dan jumlah followers

LS0tDQp0aXRsZTogIkFuYWxpc2lzIEtvcmVsYXNpIg0KYXV0aG9yOiAiTmd1cmFoIFNlbnRhbmEiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdGhlbWU6IGx1bWVuDQogICAgaGlnaGxpZ2h0OiBoYWRkb2NrDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jX2RlcHRoOiA0DQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGZpZ193aWR0aDogNw0KICAgIGZpZ19oZWlnaHQ6IDUNCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCi0tLQ0KDQojIEFuYWxpc2lzIEtvcmVsYXNpDQoNCiMjIDEuIEh1YnVuZ2FuIEFudGFyIFBldWJhaA0KDQotICAgQW5hbGlzaXMga29yZWxhc2kgZGlndW5ha2FuIHVudHVrIG1lbXBlbGFqYXJpIGh1YnVuZ2FuIGFudGFyYSBkdWEgYXRhdSBsZWJpaCBwZXViYWguDQotICAgSmVuaXMgaHVidW5nYW46DQogICAgLSAgICoqSHVidW5nYW4gU2ViYWItQWtpYmF0Kio6IFBlcnViYWhhbiBzYXR1IHBldWJhaCBzZWNhcmEgbGFuZ3N1bmcgbWVtZW5nYXJ1aGkgcGV1YmFoIGxhaW5ueWEgKGNvbnRvaDogZG9zaXMgcHVwdWsg4oaSIGhhc2lsIHBhbmVuKS4NCiAgICAtICAgKipCdWthbiBTZWJhYi1Ba2liYXQqKjogS2VkdWEgcGV1YmFoIGJlcnViYWggYmVyc2FtYSwgdGV0YXBpIHRpZGFrIHNhbGluZyBtZW1lbmdhcnVoaSBzZWNhcmEgbGFuZ3N1bmcgKGNvbnRvaDogdGluZ2dpIGJhZGFuIGRhbiBiZXJhdCBiYWRhbikuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyAyLiBSZWxhdGlvbnNoaXAgdnMgQ2F1c2FsIFJlbGF0aW9uc2hpcA0KDQotICAgKipSZWxhdGlvbnNoaXAqKjogSHVidW5nYW4gc3RhdGlzdGlrIGFudGFyYSBkdWEgcGV1YmFoLCB0aWRhayBzZWxhbHUgYmVyYXJ0aSBzYXR1IG1lbnllYmFia2FuIHlhbmcgbGFpbi4NCi0gICAqKkNhdXNhbCBSZWxhdGlvbnNoaXAqKjogSHVidW5nYW4gc2ViYWItYWtpYmF0LCBkaSBtYW5hIHBlcnViYWhhbiBzYXR1IHBldWJhaCBtZW55ZWJhYmthbiBwZXJ1YmFoYW4gcGV1YmFoIGxhaW4uDQotICAgUGVuZW50dWFuIGh1YnVuZ2FuIHNlYmFiLWFraWJhdCBtZW1lcmx1a2FuIHBlbmdldGFodWFuIGRhcmkgYmlkYW5nIGlsbXUgdGVya2FpdCwgYnVrYW4gaGFueWEgYW5hbGlzaXMgc3RhdGlzdGlrLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyMgMy4gQWxhdCBBbmFsaXNpcyBSZWxhdGlvbnNoaXANCg0KUGVtaWxpaGFuIGFsYXQgYW5hbGlzaXMgZGlkYXNhcmthbiBwYWRhOiAtIFNrYWxhIHBlbmd1a3VyYW4gZGF0YSAobnVtZXJpayBhdGF1IGthdGVnb3JpaykgLSBKZW5pcyBodWJ1bmdhbiBhbnRhciBwZXViYWgNCg0KfCBQZXViYWggMSAgfCBQZXViYWggMiAgfCBBbGF0IEFuYWxpc2lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IE51bWVyaWsgICB8IE51bWVyaWsgICB8IFBlYXJzb24sIFNwZWFybWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBOdW1lcmlrICAgfCBLYXRlZ29yaWsgfCBLb3JlbGFzaSBCaXNlcmlhbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgS2F0ZWdvcmlrIHwgTnVtZXJpayAgIHwgS29yZWxhc2kgQmlzZXJpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IEthdGVnb3JpayB8IEthdGVnb3JpayB8IFNwZWFybWFuIChvcmRpbmFsKSwgQ2hpLVNxdWFyZSwgVGV0cmFjaG9yaWMgfA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyMgNC4gQW5hbGlzaXMgS29yZWxhc2kNCg0KLSAgIERpZ3VuYWthbiB1bnR1ayBtZW5ndWt1ciAqKmtla3VhdGFuKiogZGFuICoqYXJhaCoqIGh1YnVuZ2FuIGxpbmllciBhbnRhcmEgZHVhIHBldWJhaC4NCi0gICBUaWRhayBtZW55aW1wdWxrYW4gaHVidW5nYW4gc2ViYWItYWtpYmF0Lg0KLSAgIEtvZWZpc2llbiBrb3JlbGFzaSBwb3B1bGFzaSBkaWxhbWJhbmdrYW4gZGVuZ2FuIM+BIG5kZWZpbmVkLCBzZWRhbmdrYW4gc2FtcGVsIGRlbmdhbiByDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyA1LiBIdWJ1bmdhbiBMaW5pZXIgQW50YXIgUGV1YmFoIEtvbnRpbnUNCg0KLSAgIEtvcmVsYXNpIG1lbmd1a3VyIHNlamF1aCBtYW5hIHRpdGlrIGRhdGEgbWVuZGVrYXRpIGdhcmlzIGx1cnVzLg0KLSAgIE5pbGFpIGtvcmVsYXNpOg0KICAgIC0gICByID0gMTogSHVidW5nYW4gbGluaWVyIHBvc2l0aWYgc2VtcHVybmFcDQogICAgLSAgIHIgPSAtMSA6IEh1YnVuZ2FuIGxpbmllciBuZWdhdGlmIHNlbXB1cm5hXA0KICAgIC0gICByID0gMCA6IFRpZGFrIGFkYSBodWJ1bmdhbiBsaW5pZXINCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIDYuIEFyYWggS29yZWxhc2kNCg0KLSAgICoqUG9zaXRpZioqOiBKaWthIHNhdHUgcGV1YmFoIG5haWssIHBldWJhaCBsYWluIGNlbmRlcnVuZyBuYWlrLg0KLSAgICoqTmVnYXRpZioqOiBKaWthIHNhdHUgcGV1YmFoIG5haWssIHBldWJhaCBsYWluIGNlbmRlcnVuZyB0dXJ1bi4NCi0gICAqKk5vbCoqOiBUaWRhayBhZGEgaHVidW5nYW4geWFuZyBrb25zaXN0ZW4uDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyA3LiBLb3JlbGFzaSBQZWFyc29uDQoNCkRpZ3VuYWthbiB1bnR1ayBkYXRhIG51bWVyaWsgZGVuZ2FuIHNrYWxhIGludGVydmFsL3Jhc2lvLg0KDQpSdW11czoNCg0KJCQNCnJfe3h5fSA9IFxmcmFje1Nfe3h5fX17U194IFxjZG90IFNfeX0NCiQkDQoNCmRlbmdhbjoNCg0KJCQNClNfe3h5fSA9IFxmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pKHlfaSAtIFxiYXJ7eX0pfXtuLTF9DQokJA0KDQokJA0KU194ID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXGJhcnt4fSleMn17bi0xfX0NCiQkDQoNCiQkDQpTX3kgPSBcc3FydHtcZnJhY3tcc3VtICh5X2kgLSBcYmFye3l9KV4yfXtuLTF9fQ0KJCQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIDguIEhpcG90ZXNpcyBLb3JlbGFzaQ0KDQotICAgKipIaXBvdGVzaXMgTm9sIChIMCkpKio6IM+BID0gMCh0aWRhayBhZGEga29yZWxhc2kpDQotICAgKipIaXBvdGVzaXMgQWx0ZXJuYXRpZiAoSDEpKSoqOiDPgSA9IDEgKGFkYSBrb3JlbGFzaSkNCg0KKipTdGF0aXN0aWsgVWppKio6DQoNCiQkDQp0ID0gXGZyYWN7ciBcc3FydHtuLTJ9fXtcc3FydHsxIC0gcl4yfX0NCiQkDQoNCmRlbmdhbiBkZXJhamF0IGJlYmFzIChkYiA9IG4gLSAyICkNCg0KKipLcml0ZXJpYSoqOg0KDQpUb2xhayBIMCBqaWthOg0KDQokJA0KfHR8ID4gdF97XGFscGhhLzIsIFwsIChuLTIpfQ0KJCQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIDkuIEtvcmVsYXNpIFNwZWFybWFuDQoNCi0gICBEaWd1bmFrYW4gdW50dWsgZGF0YSBvcmRpbmFsIGF0YXUgZGF0YSBudW1lcmlrIHlhbmcgZGl1YmFoIG1lbmphZGkgcGVyaW5na2F0Lg0KLSAgIENvY29rIGtldGlrYSBodWJ1bmdhbiB0aWRhayBsaW5pZXIgYXRhdSBkYXRhIHRpZGFrIGJlcmRpc3RyaWJ1c2kgbm9ybWFsLg0KDQpSdW11czoNCg0KJCQNClxyaG8gPSAxIC0gXGZyYWN7NiBcc3VtIEReMn17TihOXjIgLSAxKX0NCiQkDQoNCmRlbmdhbjoNCg0KXC0gRCA9IHNlbGlzaWggcGVyaW5na2F0IGFudGFyYSBkdWEgcGV1YmFoXA0KLSBOID0ganVtbGFoIHBhc2FuZ2FuIGRhdGENCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIDEwLiBLZXNhbGFoYW4gSW50ZXJwcmV0YXNpIEtvcmVsYXNpDQoNCi0gICBLb3JlbGFzaSB0aW5nZ2kgKip0aWRhayoqIGJlcmFydGkgYWRhIGh1YnVuZ2FuIHNlYmFiLWFraWJhdC4NCi0gICAqKk91dGxpZXIqKiBkYXBhdCBtZW1lbmdhcnVoaSBuaWxhaSBrb3JlbGFzaS4NCi0gICBLb3JlbGFzaSBoYW55YSBtZW5ndWt1ciBodWJ1bmdhbiBsaW5pZXIsIGJ1a2FuIG5vbi1saW5pZXIuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyBSaW5na2FzYW4NCg0KLSAgIEFuYWxpc2lzIGtvcmVsYXNpIG1lbWJhbnR1IG1lbWFoYW1pIGh1YnVuZ2FuIGFudGFyIHBldWJhaC4NCi0gICBQaWxpaCBtZXRvZGUgYmVyZGFzYXJrYW4gamVuaXMgZGF0YSBkYW4gdHVqdWFuIGFuYWxpc2lzLg0KLSAgIFNlbGFsdSBoYXRpLWhhdGkgZGFsYW0gbWVuZ2ludGVycHJldGFzaWthbiBoYXNpbCBrb3JlbGFzaS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIENvbnRvaCBTdHVkaSBLYXN1cw0KDQojIyMgKipDb250b2ggS2FzdXMgUGVyaGl0dW5nYW4gTWFudWFsIEtvcmVsYXNpIFBlYXJzb24qKg0KDQpIdWJ1bmdhbiBhbnRhcmEgSmFtIEJlbGFqYXIgcGVyIE1pbmdndSBkYW4gTmlsYWkgVWppYW4gTWF0ZW1hdGlrYQ0KDQp8IFNpc3dhIHwgSmFtIEJlbGFqYXIgKHgpIHwgTmlsYWkgVWppYW4gKHkpIHwNCnw6LS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tfA0KfCAxICAgICB8IDUgICAgICAgICAgICAgICB8IDY1ICAgICAgICAgICAgICB8DQp8IDIgICAgIHwgOCAgICAgICAgICAgICAgIHwgNzUgICAgICAgICAgICAgIHwNCnwgMyAgICAgfCAxMiAgICAgICAgICAgICAgfCA4NSAgICAgICAgICAgICAgfA0KfCA0ICAgICB8IDE1ICAgICAgICAgICAgICB8IDkwICAgICAgICAgICAgICB8DQp8IDUgICAgIHwgMTggICAgICAgICAgICAgIHwgOTUgICAgICAgICAgICAgIHwNCnwgNiAgICAgfCAyMCAgICAgICAgICAgICAgfCA5OCAgICAgICAgICAgICAgfA0KDQoqKkxhbmdrYWggUGVyaGl0dW5nYW4gTWFudWFsOioqDQoNCioqU3RlcCAxOiBIaXR1bmcgcmF0YS1yYXRhIHggZGFuIHkqKg0KDQpgYGAgICAgICAgICANCnjMhCA9ICg1ICsgOCArIDEyICsgMTUgKyAxOCArIDIwKS82ID0gNzgvNiA9IDEzDQrIsyA9ICg2NSArIDc1ICsgODUgKyA5MCArIDk1ICsgOTgpLzYgPSA1MDgvNiA9IDg0LjY3DQpgYGANCg0KKipTdGVwIDI6IEhpdHVuZyBkZXZpYXNpIGRhbiBwcm9kdWsgZGV2aWFzaSoqDQoNCnwgU2lzd2EgICAgIHwgeCAgIHwgeSAgIHwgKHgteMyEKSB8ICh5LcizKSAgfCAoeC14zIQpwrIgIHwgKHktyLMpwrIgICAgIHwgKHgteMyEKSh5LcizKSB8DQp8Oi0tLS0tLS0tLS18Oi0tLS18Oi0tLS18Oi0tLS0tLXw6LS0tLS0tLXw6LS0tLS0tLS18Oi0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLXwNCnwgMSAgICAgICAgIHwgNSAgIHwgNjUgIHwgLTggICAgfCAtMTkuNjcgfCA2NCAgICAgIHwgMzg2Ljc4ICAgICB8IDE1Ny4zNiAgICAgfA0KfCAyICAgICAgICAgfCA4ICAgfCA3NSAgfCAtNSAgICB8IC05LjY3ICB8IDI1ICAgICAgfCA5My40NCAgICAgIHwgNDguMzUgICAgICB8DQp8IDMgICAgICAgICB8IDEyICB8IDg1ICB8IC0xICAgIHwgMC4zMyAgIHwgMSAgICAgICB8IDAuMTEgICAgICAgfCAtMC4zMyAgICAgIHwNCnwgNCAgICAgICAgIHwgMTUgIHwgOTAgIHwgMiAgICAgfCA1LjMzICAgfCA0ICAgICAgIHwgMjguNDQgICAgICB8IDEwLjY2ICAgICAgfA0KfCA1ICAgICAgICAgfCAxOCAgfCA5NSAgfCA1ICAgICB8IDEwLjMzICB8IDI1ICAgICAgfCAxMDYuNzggICAgIHwgNTEuNjUgICAgICB8DQp8IDYgICAgICAgICB8IDIwICB8IDk4ICB8IDcgICAgIHwgMTMuMzMgIHwgNDkgICAgICB8IDE3Ny43OCAgICAgfCA5My4zMSAgICAgIHwNCnwgKipUb3RhbCoqIHwgICAgIHwgICAgIHwgICAgICAgfCAgICAgICAgfCAqKjE2OCoqIHwgKio3OTMuMzMqKiB8ICoqMzYxLjAwKiogfA0KDQoqKlN0ZXAgMzogSGl0dW5nIGtvdmFyaWFucyBkYW4gc3RhbmRhciBkZXZpYXNpKioNCg0KYGBgICAgICAgICAgDQpTX3h5ID0gzqMoeC14zIQpKHktyLMpLyhuLTEpID0gMzYxLjAwLzUgPSA3Mi4yMA0KU194ID0g4oiaW86jKHgteMyEKcKyLyhuLTEpXSA9IOKImigxNjgvNSkgPSDiiJozMy42ID0gNS44MA0KU195ID0g4oiaW86jKHktyLMpwrIvKG4tMSldID0g4oiaKDc5My4zMy81KSA9IOKImjE1OC42NyA9IDEyLjYwDQpgYGANCg0KKipTdGVwIDQ6IEhpdHVuZyBrb2VmaXNpZW4ga29yZWxhc2kgUGVhcnNvbioqDQoNCmBgYCAgICAgICAgIA0KciA9IFNfeHkvKFNfeCDDlyBTX3kpID0gNzIuMjAvKDUuODAgw5cgMTIuNjApID0gNzIuMjAvNzMuMDggPSAwLjk4OA0KYGBgDQoNCioqSW50ZXJwcmV0YXNpOioqIEtvcmVsYXNpIHNhbmdhdCBrdWF0IHBvc2l0aWYgKDAuOTg4KSBhbnRhcmEgamFtIGJlbGFqYXIgZGFuIG5pbGFpIHVqaWFuLg0KDQojIyMgKipDb250b2ggS2FzdXMgUGVyaGl0dW5nYW4gTWFudWFsIEtvcmVsYXNpIFNwZWFybWFuKioNCg0KUGVyaW5na2F0IEtlcG9wdWxlcmFuIEFydGlzIGRhbiBKdW1sYWggRm9sbG93ZXJzIE1lZGlhIFNvc2lhbCAoZGFsYW0gcmlidSkNCg0KfCBBcnRpcyB8IFBlcmluZ2thdCBLZXBvcHVsZXJhbiAoeCkgfCBKdW1sYWggRm9sbG93ZXJzICh5KSB8DQp8Oi0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgQSAgICAgfCAxICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUwICAgICAgICAgICAgICAgICAgfA0KfCBCICAgICB8IDIgICAgICAgICAgICAgICAgICAgICAgICAgfCAxODAgICAgICAgICAgICAgICAgICB8DQp8IEMgICAgIHwgMyAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyMCAgICAgICAgICAgICAgICAgIHwNCnwgRCAgICAgfCA0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAwICAgICAgICAgICAgICAgICAgfA0KfCBFICAgICB8IDUgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNzAgICAgICAgICAgICAgICAgICB8DQp8IEYgICAgIHwgNiAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyMCAgICAgICAgICAgICAgICAgIHwNCg0KKipMYW5na2FoIFBlcmhpdHVuZ2FuIE1hbnVhbDoqKg0KDQoqKlN0ZXAgMTogQmVyaSBwZXJpbmdrYXQgcGFkYSBrZWR1YSB2YXJpYWJlbCoqDQoNCnwgQXJ0aXMgICAgIHwgeCAocGVyaW5na2F0KSB8IHkgKGZvbGxvd2VycykgfCBSYW5rX3ggfCBSYW5rX3kgfCBEID0gUmFua194IC0gUmFua195IHwgRMKyICAgICB8DQp8Oi0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLXw6LS0tLS0tLXw6LS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS18DQp8IEEgICAgICAgICB8IDEgICAgICAgICAgICAgfCAxNTAgICAgICAgICAgIHwgMSAgICAgIHwgMyAgICAgIHwgLTIgICAgICAgICAgICAgICAgICB8IDQgICAgICB8DQp8IEIgICAgICAgICB8IDIgICAgICAgICAgICAgfCAxODAgICAgICAgICAgIHwgMiAgICAgIHwgMiAgICAgIHwgMCAgICAgICAgICAgICAgICAgICB8IDAgICAgICB8DQp8IEMgICAgICAgICB8IDMgICAgICAgICAgICAgfCAxMjAgICAgICAgICAgIHwgMyAgICAgIHwgNiAgICAgIHwgLTMgICAgICAgICAgICAgICAgICB8IDkgICAgICB8DQp8IEQgICAgICAgICB8IDQgICAgICAgICAgICAgfCAyMDAgICAgICAgICAgIHwgNCAgICAgIHwgMSAgICAgIHwgMyAgICAgICAgICAgICAgICAgICB8IDkgICAgICB8DQp8IEUgICAgICAgICB8IDUgICAgICAgICAgICAgfCAxNzAgICAgICAgICAgIHwgNSAgICAgIHwgNCAgICAgIHwgMSAgICAgICAgICAgICAgICAgICB8IDEgICAgICB8DQp8IEYgICAgICAgICB8IDYgICAgICAgICAgICAgfCAyMjAgICAgICAgICAgIHwgNiAgICAgIHwgNSAgICAgIHwgMSAgICAgICAgICAgICAgICAgICB8IDEgICAgICB8DQp8ICoqVG90YWwqKiB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICoqMjQqKiB8DQoNCioqU3RlcCAyOiBIaXR1bmcga29lZmlzaWVuIGtvcmVsYXNpIFNwZWFybWFuKioNCg0KYGBgICAgICAgICAgDQrPgSA9IDEgLSBbNiDDlyDOo0TCsl0gLyBbbihuwrIgLSAxKV0gDQrPgSA9IDEgLSBbNiDDlyAyNF0gLyBbNigzNiAtIDEpXSANCs+BID0gMSAtIDE0NCAvIFs2IMOXIDM1XSANCs+BID0gMSAtIDE0NCAvIDIxMCANCs+BID0gMSAtIDAuNjg2IA0Kz4EgPSAwLjMxNA0KYGBgDQoNCioqSW50ZXJwcmV0YXNpOioqIEtvcmVsYXNpIGxlbWFoIHBvc2l0aWYgKDAuMzE0KSBhbnRhcmEgcGVyaW5na2F0IGtlcG9wdWxlcmFuIGRhbiBqdW1sYWggZm9sbG93ZXJzLg0KDQojIyAqKktvZGUgUiB1bnR1ayBLb3JlbGFzaSBQZWFyc29uIGRhbiBTcGVhcm1hbioqDQoNCmBgYHtyfQ0KIyBEYXRhIHVudHVrIEtvcmVsYXNpIFBlYXJzb24NCmphbV9iZWxhamFyIDwtIGMoNSwgOCwgMTIsIDE1LCAxOCwgMjApDQpuaWxhaV91amlhbiA8LSBjKDY1LCA3NSwgODUsIDkwLCA5NSwgOTgpDQoNCiMgS29yZWxhc2kgUGVhcnNvbg0KcGVhcnNvbl9yZXN1bHQgPC0gY29yKGphbV9iZWxhamFyLCBuaWxhaV91amlhbiwgbWV0aG9kID0gInBlYXJzb24iKQ0KY2F0KCJLb3JlbGFzaSBQZWFyc29uOiIsIHBlYXJzb25fcmVzdWx0LCAiXG4iKQ0KDQojIFRlc3Qgc2lnbmlmaWthbnNpIFBlYXJzb24NCnBlYXJzb25fdGVzdCA8LSBjb3IudGVzdChqYW1fYmVsYWphciwgbmlsYWlfdWppYW4sIG1ldGhvZCA9ICJwZWFyc29uIikNCnByaW50KHBlYXJzb25fdGVzdCkNCg0KIyBEYXRhIHVudHVrIEtvcmVsYXNpIFNwZWFybWFuDQpwZXJpbmdrYXRfYXJ0aXMgPC0gYygxLCAyLCAzLCA0LCA1LCA2KQ0KZm9sbG93ZXJzIDwtIGMoMTUwLCAxODAsIDEyMCwgMjAwLCAxNzAsIDIyMCkNCg0KIyBLb3JlbGFzaSBTcGVhcm1hbg0Kc3BlYXJtYW5fcmVzdWx0IDwtIGNvcihwZXJpbmdrYXRfYXJ0aXMsIGZvbGxvd2VycywgbWV0aG9kID0gInNwZWFybWFuIikNCmNhdCgiS29yZWxhc2kgU3BlYXJtYW46Iiwgc3BlYXJtYW5fcmVzdWx0LCAiXG4iKQ0KDQojIFRlc3Qgc2lnbmlmaWthbnNpIFNwZWFybWFuDQpzcGVhcm1hbl90ZXN0IDwtIGNvci50ZXN0KHBlcmluZ2thdF9hcnRpcywgZm9sbG93ZXJzLCBtZXRob2QgPSAic3BlYXJtYW4iKQ0KcHJpbnQoc3BlYXJtYW5fdGVzdCkNCg0KIyBWaXN1YWxpc2FzaSBTY2F0dGVyIFBsb3QNCnBhcihtZnJvdyA9IGMoMSwgMikpDQoNCiMgUGxvdCB1bnR1ayBQZWFyc29uDQpwbG90KGphbV9iZWxhamFyLCBuaWxhaV91amlhbiwgbWFpbiA9ICJLb3JlbGFzaSBQZWFyc29uXG5KYW0gQmVsYWphciB2cyBOaWxhaSBVamlhbiIsDQogICAgIHhsYWIgPSAiSmFtIEJlbGFqYXIiLCB5bGFiID0gIk5pbGFpIFVqaWFuIiwgcGNoID0gMTksIGNvbCA9ICJibHVlIikNCmFibGluZShsbShuaWxhaV91amlhbiB+IGphbV9iZWxhamFyKSwgY29sID0gInJlZCIpDQoNCiMgUGxvdCB1bnR1ayBTcGVhcm1hbg0KcGxvdChwZXJpbmdrYXRfYXJ0aXMsIGZvbGxvd2VycywgbWFpbiA9ICJLb3JlbGFzaSBTcGVhcm1hblxuUGVyaW5na2F0IHZzIEZvbGxvd2VycyIsDQogICAgIHhsYWIgPSAiUGVyaW5na2F0IEtlcG9wdWxlcmFuIiwgeWxhYiA9ICJGb2xsb3dlcnMgKHJpYnUpIiwgcGNoID0gMTksIGNvbCA9ICJncmVlbiIpDQphYmxpbmUobG0oZm9sbG93ZXJzIH4gcGVyaW5na2F0X2FydGlzKSwgY29sID0gInJlZCIpDQoNCiMgUmVzZXQgcGxvdCBsYXlvdXQNCnBhcihtZnJvdyA9IGMoMSwgMSkpDQpgYGANCg0KIyMjICoqS2VzaW1wdWxhbjoqKg0KDQotICAgS29yZWxhc2kgUGVhcnNvbiBtZW51bmp1a2thbiBodWJ1bmdhbiB5YW5nIHNhbmdhdCBrdWF0IGFudGFyYSBqYW0gYmVsYWphciBkYW4gbmlsYWkgdWppYW4NCg0KLSAgIEtvcmVsYXNpIFNwZWFybWFuIG1lbnVuanVra2FuIGh1YnVuZ2FuIHlhbmcgbGVtYWggYW50YXJhIHBlcmluZ2thdCBrZXBvcHVsZXJhbiBkYW4ganVtbGFoIGZvbGxvd2Vycw0K