Analisis panel faktor-faktor memengaruhi tingkat pengangguran terbuka di Jawa Barat Tahun 2019-2024

Nabil Ibni Nawawi

2025-11-11

Author:

  • G1401221027 Nabil Ibni Nawawi
lapply(c("kableExtra","tidyverse","plm","tinytex","tseries","lmtest", 
         "broom", "stargazer", "RColorBrewer"), library, character.only = T)[[1]]
## Warning: package 'kableExtra' was built under R version 4.3.3
## Warning: package 'tidyverse' was built under R version 4.3.2
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.2
## Warning: package 'lubridate' was built under R version 4.3.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter()     masks stats::filter()
## ✖ dplyr::group_rows() masks kableExtra::group_rows()
## ✖ dplyr::lag()        masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## 
## Attaching package: 'plm'
## 
## 
## The following objects are masked from 'package:dplyr':
## 
##     between, lag, lead
## Warning: package 'tinytex' was built under R version 4.3.2
## Warning: package 'tseries' was built under R version 4.3.2
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Warning: package 'lmtest' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.2
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## 
## Please cite as: 
## 
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
## [1] "kableExtra" "stats"      "graphics"   "grDevices"  "utils"     
## [6] "datasets"   "methods"    "base"

Data

Data yang digunakan adalah data Tingkat Pengangguran Terbuka atau TPT Dengan 5 Peubah bebas. Data ini berjenis data panel dengan individunya adalah 27 Kab/Kota di Provinsi Jawa Barat selama 6 tahun (Tahun 2019-2024) dengan peubah-peubah sebagai berikut:

  • TPT : Tingkat Pengangguran Terbuka (%)

  • PPP : Pengeluaran per Kapita Disesuaikan (000 Rp)

  • TPAK : Tingkat Partisipasi Angkatan Kerja (%)

  • IPM : Indeks Pembangunan Manusia

  • Persen_miskin : Persentase Penduduk Miskin Menurut Kabupaten/Kota di Jawa Barat (%)

  • Upah_minimum : Upah minimum Kabupaten/Kota di Jawa Barat (Rupiah)

library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
data <- read_xlsx("C:/Users/Nabil Ibni Nawawi/Documents/KULIAH/Semester 7/Data laporan individu 2.xlsx")
# Ganti nama "Kab/kota" menjadi "Kab_Kota"
data <- data %>% 
  rename(Kab_Kota = "Kab/kota")
glimpse(data)
## Rows: 162
## Columns: 8
## $ Kab_Kota      <chr> "Bogor", "Bogor", "Bogor", "Bogor", "Bogor", "Bogor", "S…
## $ Tahun         <dbl> 2019, 2020, 2021, 2022, 2023, 2024, 2019, 2020, 2021, 20…
## $ TPT           <dbl> 9.11, 14.29, 12.22, 10.64, 8.47, 7.34, 8.05, 9.60, 9.51,…
## $ PPP           <dbl> 10683, 10317, 10410, 10860, 11153, 11563, 8973, 8823, 88…
## $ TPAK          <dbl> 65.41, 62.65, 62.55, 63.75, 64.22, 66.30, 62.65, 61.56, …
## $ IPM           <dbl> 70.65, 70.40, 70.60, 71.20, 71.78, 73.02, 66.87, 66.88, …
## $ Persen_miskin <dbl> 6.66, 7.69, 8.13, 7.73, 7.27, 7.05, 6.22, 7.09, 7.70, 7.…
## $ Upah_minimum  <dbl> 3763406, 4083670, 4217206, 4217206, 4520212, 4579541, 27…
data %>% head(6)

Memunculkan 6 data teratas yaitu Kabupaten Bogor dari tahun 2019-2024

Metodologi

Metodologi yang digunakan adalah sebagai berikut:

  1. Eksplorasi Data

  2. Menduga parameter model CEM

  3. Menduga parameter model FEM

  4. Melakukan Uji Chow

  5. Menduga Parameter model REM

  6. Melakukan Uji Hausman

  7. Pengujian asumsi terhadap Model terpilih

  8. Jika asumsi tidak terpenuhi, akan dilakukan penanganan asumsi

  9. Interpretasi model terbaik

Eksplorasi Data

ggplot(data=data, aes(x=Tahun, y=TPT, group = Kab_Kota, colour = `Kab_Kota`))+ theme_bw()+
  geom_line(size=1.2) +
  geom_point( size=3, shape=19, fill="red") + 
  labs(colour="Kab/kota di Jawa Barat", title = "Tingkat Pengangguran Terbuka di Provinsi Jaa Barat", subtitle = "Tahun 2019-2024") +
  theme(plot.title = element_text(hjust = 0.5,face = "bold"), plot.subtitle = element_text(hjust = 0.5))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Pemeriksaan Multikolinearitas

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
model1 <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data%>%filter(Tahun==2019))
model2 <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data%>%filter(Tahun==2020))
model3 <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data%>%filter(Tahun==2021))
model4 <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data%>%filter(Tahun==2022))
model5 <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data%>%filter(Tahun==2023))
model6 <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data%>%filter(Tahun==2024))
model7 <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data)


Multikol <- rbind(as.vector(vif(model1)),as.vector(vif(model2)),as.vector(vif(model3)),
           as.vector(vif(model4)),as.vector(vif(model5)),as.vector(vif(model6)),
           as.vector(vif(model7))
           )

rownames(Multikol) <- c("Tahun 2019","Tahun 2020","Tahun 2021","Tahun 2022","Tahun 2023","Tahun 2024","Tahun 2019-2024")

colnames(Multikol) <- c("PPP","TPAK","IPM","Persen_miskin","Upah_minimum")

Multikol
##                      PPP     TPAK      IPM Persen_miskin Upah_minimum
## Tahun 2019      1.530659 1.210733 2.696826      2.878604     1.910709
## Tahun 2020      8.142932 1.267635 8.806496      2.613486     2.080959
## Tahun 2021      8.391678 1.291695 9.471401      2.931518     2.114175
## Tahun 2022      8.059022 1.349495 9.292990      3.096018     2.261014
## Tahun 2023      7.738800 1.428790 9.314730      3.428071     2.293339
## Tahun 2024      7.808121 1.512907 9.427272      3.214549     2.336777
## Tahun 2019-2024 2.818855 1.141777 4.009271      2.466057     1.831579

Pada model7 yaitu gabungan semua tahun tidak ada multikolinearitas

Common-Effect Model

cem <- plm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, data = data, model = "pooling")
summary(cem)
## Pooling Model
## 
## Call:
## plm(formula = TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
##     data = data, model = "pooling")
## 
## Balanced Panel: n = 27, T = 6, N = 162
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -3.57389 -1.10230 -0.10118  1.11243  4.25943 
## 
## Coefficients:
##                  Estimate  Std. Error t-value  Pr(>|t|)    
## (Intercept)    2.6741e+01  5.2770e+00  5.0675 1.127e-06 ***
## PPP           -1.0414e-04  7.7232e-05 -1.3484   0.17949    
## TPAK          -3.7393e-01  3.8505e-02 -9.7112 < 2.2e-16 ***
## IPM            4.1991e-02  5.7069e-02  0.7358   0.46296    
## Persen_miskin  1.6354e-01  7.6671e-02  2.1331   0.03448 *  
## Upah_minimum   9.2323e-07  1.7802e-07  5.1860 6.581e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    933.39
## Residual Sum of Squares: 448.37
## R-Squared:      0.51963
## Adj. R-Squared: 0.50423
## F-statistic: 33.7497 on 5 and 156 DF, p-value: < 2.22e-16

Fixed-Effect Model

FEM Individual

fem <- plm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
                  index = c("Kab_Kota", "Tahun"), 
                  model = "within", effect = "individual", data = data)
summary(fem)
## Oneway (individual) effect Within Model
## 
## Call:
## plm(formula = TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
##     data = data, effect = "individual", model = "within", index = c("Kab_Kota", 
##         "Tahun"))
## 
## Balanced Panel: n = 27, T = 6, N = 162
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -2.704984 -0.619738 -0.034773  0.589112  2.823592 
## 
## Coefficients:
##                  Estimate  Std. Error t-value  Pr(>|t|)    
## PPP           -5.7110e-05  5.5290e-05 -1.0329 0.3035613    
## TPAK          -1.1061e-01  4.3808e-02 -2.5249 0.0127744 *  
## IPM           -1.0716e+00  1.5802e-01 -6.7815 3.771e-10 ***
## Persen_miskin  6.3928e-01  1.6029e-01  3.9884 0.0001104 ***
## Upah_minimum   1.2469e-06  6.0842e-07  2.0495 0.0424292 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    306.07
## Residual Sum of Squares: 118.65
## R-Squared:      0.61233
## Adj. R-Squared: 0.51988
## F-statistic: 41.0666 on 5 and 130 DF, p-value: < 2.22e-16

Nilai intersep dari setiap individu

summary(fixef(fem, effect="individual"))
##                  Estimate Std. Error t-value  Pr(>|t|)    
## Bandung           84.9098     9.6943  8.7588 9.140e-15 ***
## Bandung Barat     80.0931     9.4210  8.5015 3.818e-14 ***
## Bekasi            88.8250     9.2187  9.6353 < 2.2e-16 ***
## Bogor             84.4207     9.0773  9.3002 4.374e-16 ***
## Ciamis            81.9117    10.1042  8.1067 3.351e-13 ***
## Cianjur           77.8617     9.2477  8.4196 6.007e-14 ***
## Cirebon           81.7636    10.0470  8.1381 2.821e-13 ***
## Garut             78.8436     9.6692  8.1541 2.585e-13 ***
## Indramayu         77.8797     9.8485  7.9078 9.889e-13 ***
## Karawang          83.3398     8.9339  9.3285 3.728e-16 ***
## Kota Bandung      98.7745    10.5928  9.3247 3.809e-16 ***
## Kota Banjar       85.2947    10.1992  8.3628 8.214e-14 ***
## Kota Bekasi       96.6287    10.1918  9.4810 < 2.2e-16 ***
## Kota Bogor        90.9846     9.8381  9.2482 5.868e-16 ***
## Kota Cimahi       95.7950    10.3830  9.2262 6.643e-16 ***
## Kota Cirebon      89.0422    10.7558  8.2786 1.306e-13 ***
## Kota Depok        96.2202    10.1679  9.4631 < 2.2e-16 ***
## Kota Sukabumi     89.5015    10.4213  8.5884 2.359e-14 ***
## Kota Tasikmalaya  83.3523    10.6643  7.8160 1.625e-12 ***
## Kuningan          82.1898    10.3351  7.9525 7.760e-13 ***
## Majalengka        76.5375     9.9401  7.6999 3.038e-12 ***
## Pangandaran       77.8525     9.8243  7.9245 9.034e-13 ***
## Purwakarta        83.1610     9.2042  9.0351 1.947e-15 ***
## Subang            81.5776     9.4814  8.6040 2.163e-14 ***
## Sukabumi          80.2715     8.9967  8.9224 3.663e-15 ***
## Sumedang          83.3336     9.8511  8.4593 4.822e-14 ***
## Tasikmalaya       75.4132     9.4925  7.9445 8.103e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Nilai diatas adalah nilai pengaruh konstan dari masing-masing individu pada model.

FEM TIME

Efek komponen sisaaan satu arah pada waktu.

fem_time <- plm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
                  index = c("Kab_Kota", "Tahun"), 
                  model = "within", effect = "time", data = data)
summary(fem_time)
## Oneway (time) effect Within Model
## 
## Call:
## plm(formula = TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
##     data = data, effect = "time", model = "within", index = c("Kab_Kota", 
##         "Tahun"))
## 
## Balanced Panel: n = 27, T = 6, N = 162
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -2.962589 -0.959993  0.014052  0.879758  3.708087 
## 
## Coefficients:
##                  Estimate  Std. Error t-value  Pr(>|t|)    
## PPP           -1.5034e-04  6.5464e-05 -2.2965 0.0230239 *  
## TPAK          -2.6474e-01  3.4969e-02 -7.5707 3.421e-12 ***
## IPM            1.2883e-01  4.8220e-02  2.6717 0.0083748 ** 
## Persen_miskin  2.3583e-01  6.9301e-02  3.4030 0.0008534 ***
## Upah_minimum   1.1353e-06  1.5356e-07  7.3930 9.172e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    698.67
## Residual Sum of Squares: 293.78
## R-Squared:      0.57951
## Adj. R-Squared: 0.55167
## F-statistic: 41.6218 on 5 and 151 DF, p-value: < 2.22e-16

Nilai Intersep dari setiap waktu

summary(fixef(fem_time, effect="time"))
##      Estimate Std. Error t-value Pr(>|t|)   
## 2019  12.4145     4.7538  2.6115 0.009924 **
## 2020  14.2219     4.7684  2.9825 0.003334 **
## 2021  13.4009     4.8077  2.7874 0.005997 **
## 2022  12.1966     4.8492  2.5152 0.012944 * 
## 2023  11.5396     4.8672  2.3709 0.019008 * 
## 2024  11.0721     4.9159  2.2523 0.025745 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

FEM TWO WAYS

fem_twoways <- plm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
                  index = c("Kab_Kota", "Tahun"), 
                  model = "within", effect = "twoways", data = data)
summary(fem_twoways)
## Twoways effects Within Model
## 
## Call:
## plm(formula = TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
##     data = data, effect = "twoways", model = "within", index = c("Kab_Kota", 
##         "Tahun"))
## 
## Balanced Panel: n = 27, T = 6, N = 162
## 
## Residuals:
##      Min.   1st Qu.    Median   3rd Qu.      Max. 
## -1.869071 -0.393930  0.021576  0.407810  2.189397 
## 
## Coefficients:
##                  Estimate  Std. Error t-value  Pr(>|t|)    
## PPP           -7.9006e-05  3.9299e-05 -2.0104   0.04654 *  
## TPAK          -5.7802e-02  3.1394e-02 -1.8412   0.06796 .  
## IPM            4.8644e-02  2.5092e-01  0.1939   0.84660    
## Persen_miskin -1.0910e+00  2.6190e-01 -4.1658 5.742e-05 ***
## Upah_minimum   7.2692e-07  7.0089e-07  1.0371   0.30167    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    71.353
## Residual Sum of Squares: 55.934
## R-Squared:      0.2161
## Adj. R-Squared: -0.0096642
## F-statistic: 6.89179 on 5 and 125 DF, p-value: 1.0304e-05

Nilai Intersep dari setiap individu dan waktu

data.frame(summary(fixef(fem_twoways, effect="twoways")))

FEM LSDV

fem_lsdv <- lm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum + factor(Tahun) + factor(Kab_Kota), data)
summary(fem_lsdv)
## 
## Call:
## lm(formula = TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum + 
##     factor(Tahun) + factor(Kab_Kota), data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.86907 -0.39393  0.02158  0.40781  2.18940 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                       1.178e+01  1.907e+01   0.618 0.537848    
## PPP                              -7.901e-05  3.930e-05  -2.010 0.046545 *  
## TPAK                             -5.780e-02  3.139e-02  -1.841 0.067965 .  
## IPM                               4.864e-02  2.509e-01   0.194 0.846598    
## Persen_miskin                    -1.091e+00  2.619e-01  -4.166 5.74e-05 ***
## Upah_minimum                      7.269e-07  7.009e-07   1.037 0.301674    
## factor(Tahun)2020                 3.180e+00  3.669e-01   8.668 1.92e-14 ***
## factor(Tahun)2021                 3.130e+00  5.226e-01   5.990 2.08e-08 ***
## factor(Tahun)2022                 1.245e+00  5.506e-01   2.260 0.025521 *  
## factor(Tahun)2023                -2.826e-02  7.167e-01  -0.039 0.968603    
## factor(Tahun)2024                -8.668e-01  9.203e-01  -0.942 0.348083    
## factor(Kab_Kota)Bandung Barat     6.665e+00  1.509e+00   4.415 2.16e-05 ***
## factor(Kab_Kota)Bekasi           -4.498e-01  1.400e+00  -0.321 0.748571    
## factor(Kab_Kota)Bogor             3.572e+00  8.192e-01   4.360 2.68e-05 ***
## factor(Kab_Kota)Ciamis           -4.783e-01  1.215e+00  -0.394 0.694441    
## factor(Kab_Kota)Cianjur           6.469e+00  2.156e+00   3.001 0.003246 ** 
## factor(Kab_Kota)Cirebon           8.007e+00  1.726e+00   4.639 8.69e-06 ***
## factor(Kab_Kota)Garut             5.492e+00  2.130e+00   2.579 0.011082 *  
## factor(Kab_Kota)Indramayu         7.561e+00  2.113e+00   3.578 0.000494 ***
## factor(Kab_Kota)Karawang          3.636e+00  1.189e+00   3.058 0.002722 ** 
## factor(Kab_Kota)Kota Bandung     -6.354e-01  2.568e+00  -0.247 0.805001    
## factor(Kab_Kota)Kota Banjar      -3.909e-01  1.098e+00  -0.356 0.722362    
## factor(Kab_Kota)Kota Bekasi      -1.655e+00  2.928e+00  -0.565 0.572893    
## factor(Kab_Kota)Kota Bogor        2.455e+00  1.490e+00   1.647 0.102018    
## factor(Kab_Kota)Kota Cimahi       1.704e+00  1.515e+00   1.125 0.262821    
## factor(Kab_Kota)Kota Cirebon      5.335e+00  1.090e+00   4.896 2.96e-06 ***
## factor(Kab_Kota)Kota Depok       -4.727e+00  2.748e+00  -1.720 0.087918 .  
## factor(Kab_Kota)Kota Sukabumi     3.707e+00  7.629e-01   4.859 3.47e-06 ***
## factor(Kab_Kota)Kota Tasikmalaya  6.777e+00  1.574e+00   4.305 3.34e-05 ***
## factor(Kab_Kota)Kuningan          1.013e+01  2.046e+00   4.948 2.37e-06 ***
## factor(Kab_Kota)Majalengka        4.059e+00  2.031e+00   1.998 0.047860 *  
## factor(Kab_Kota)Pangandaran       2.347e-01  1.764e+00   0.133 0.894343    
## factor(Kab_Kota)Purwakarta        3.587e+00  8.922e-01   4.021 9.96e-05 ***
## factor(Kab_Kota)Subang            4.918e+00  1.193e+00   4.124 6.75e-05 ***
## factor(Kab_Kota)Sukabumi          1.977e+00  1.413e+00   1.399 0.164147    
## factor(Kab_Kota)Sumedang          4.543e+00  9.303e-01   4.884 3.12e-06 ***
## factor(Kab_Kota)Tasikmalaya       3.238e+00  2.121e+00   1.527 0.129331    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6689 on 125 degrees of freedom
## Multiple R-squared:  0.9401, Adjusted R-squared:  0.9228 
## F-statistic: 54.47 on 36 and 125 DF,  p-value: < 2.2e-16

Uji-Chow

Uji Chow adalah uji formal untuk menguji ada atau tidaknya pengaruh spesifik individu dan pengaruh spesifik waktu pada data panel.

Hipotesis pada uji ini yaitu :

  • Untuk menguji pengaruh individu

\[ \begin{aligned} H_{01} &: \text{Tidak ada pengaruh spesifik individu} \\ H_{11} &: \text{Ada pengaruh spesifik individu} \end{aligned} \]

  • Untuk menguji pengaruh waktu

\[ \begin{aligned} H_{02} &: \text{Tidak ada pengaruh spesifik waktu} \\ H_{12} &: \text{Ada pengaruh spesifik waktu} \end{aligned} \]

Statsitik Uji yang digunakan :

  • Pengaruh individu

\[ \begin{aligned} F_{Hitung} = \frac{JKG_{MG} - JKG_{MPTI}}{JKG_{MPTI}} . \frac{NT-N-K}{N-1} \end{aligned} \]

  • Pengaruh Waktu

\[ \begin{aligned} F_{Hitung} = \frac{JKG_{MG} - JKG_{MPTW}}{JKG_{MPTW}} . \frac{N-T-K}{T-1} \end{aligned} \]

Uji Chow

\[ \begin{aligned} H_0 &: \text{Model Common Effect} \\ H_1 &: \text{Model Fixed Effect} \end{aligned} \]

\(H_0\) akan ditolak apabila p-value lebih kecil dari alpha yaitu 0.05

pooltest(cem, fem)
## 
##  F statistic
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## F = 13.894, df1 = 26, df2 = 130, p-value < 2.2e-16
## alternative hypothesis: unstability

Nilai p-value sebesar \(2.2e-16\) berarti keputusan Tolak H0 atau model fixed effect lebih layak digunakan pada data ini.

Uji pengaruh individu / waktu

Selanjutnya karena yang terpilih adalah model Fixed-Effect akan dilihat komponen yang memiliki pengaruh tetap apakah individu, waktu, atau keduanya.

Efek Individu dan Waktu

plmtest(fem, type = "bp", effect = "twoways")
## 
##  Lagrange Multiplier Test - two-ways effects (Breusch-Pagan)
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## chisq = 201.69, df = 2, p-value < 2.2e-16
## alternative hypothesis: significant effects

Efek Individu dan Waktu

plmtest(fem, type = "bp", effect = "individual")
## 
##  Lagrange Multiplier Test - (Breusch-Pagan)
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## chisq = 51.736, df = 1, p-value = 6.348e-13
## alternative hypothesis: significant effects

Efek Waktu

plmtest(fem, type = "bp", effect = "time")
## 
##  Lagrange Multiplier Test - time effects (Breusch-Pagan)
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## chisq = 149.95, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects

Dari ketiga uji diatas didapat nilai p-value yang lebih kecil dari 0.05 yang berarti keputusannya adalah Tolak \(H_0\) atau terdapat pengaruh yang signifikan dari individu maupun waktu. Sehingga akan diduga parameter pengaruh twoways pada Random Effect Model.

pFtest(fem_twoways, fem)
## 
##  F test for twoways effects
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## F = 28.033, df1 = 5, df2 = 125, p-value < 2.2e-16
## alternative hypothesis: significant effects

Random-Effect Model

Model pengaruh acak mengasumsikan tidak ada korelasi antara pengaruh spesifik individu dan pengaruh spesifik waktu dengan peubah bebas. Asumsi ini membuat komponen sisaan dari pengaruh spesifik individu dan pengaruh spesifik waktu dimasukan kedalam sisaan.

REM Generalized Least Square

rem_gls2 <- plm(TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
                  index = c("Kab_Kota", "Tahun"), 
                  model = "random", effect = "twoways", random.method = "walhus", data = data)
summary(rem_gls2)
## Twoways effects Random Effect Model 
##    (Wallace-Hussain's transformation)
## 
## Call:
## plm(formula = TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
##     data = data, effect = "twoways", model = "random", random.method = "walhus", 
##     index = c("Kab_Kota", "Tahun"))
## 
## Balanced Panel: n = 27, T = 6, N = 162
## 
## Effects:
##                  var std.dev share
## idiosyncratic 0.8329  0.9127 0.302
## individual    1.1468  1.0709 0.415
## time          0.7828  0.8848 0.283
## theta: 0.6714 (id) 0.8053 (time) 0.6466 (total)
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -1.74419 -0.57779 -0.01722  0.57810  2.65312 
## 
## Coefficients:
##                  Estimate  Std. Error z-value  Pr(>|z|)    
## (Intercept)    9.4493e+00  5.9734e+00  1.5819   0.11368    
## PPP           -1.1719e-04  4.5983e-05 -2.5487   0.01081 *  
## TPAK          -1.5033e-01  3.3374e-02 -4.5044 6.655e-06 ***
## IPM            7.7960e-02  6.6343e-02  1.1751   0.23996    
## Persen_miskin  1.0945e-01  1.1070e-01  0.9887   0.32280    
## Upah_minimum   1.0816e-06  2.4580e-07  4.4001 1.082e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    147.99
## Residual Sum of Squares: 104.9
## R-Squared:      0.2912
## Adj. R-Squared: 0.26848
## Chisq: 64.0902 on 5 DF, p-value: 1.7304e-12

Cek Signifikansi Pengaruh Individu

#efek individu 
plmtest(rem_gls2,type = "bp", effect="individu")
## 
##  Lagrange Multiplier Test - (Breusch-Pagan)
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## chisq = 51.736, df = 1, p-value = 6.348e-13
## alternative hypothesis: significant effects

Karena nilai p-value < 0.05, maka tolak \(H_0\) atau pengaruh individu signifikan terhadap model.

Cek Signifikansi Pengaruh Waktu

#efek waktu 
plmtest(rem_gls2,type = "bp", effect="time")
## 
##  Lagrange Multiplier Test - time effects (Breusch-Pagan)
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## chisq = 149.95, df = 1, p-value < 2.2e-16
## alternative hypothesis: significant effects

Karena nilai p-value < 0.05, maka tolak \(H_0\) atau pengaruh waktu signifikan terhadap model. Artinya, model twoways tepat digunakan untuk metode REM.

tidy_ranef <- tidy(ranef(rem_gls2, effect="individual"))
## Warning: 'tidy.numeric' is deprecated.
## See help("Deprecated")
kable(tidy_ranef, digits=3, caption = "Pengaruh Acak Individu", 
      col.names = c("Kab/kota", "Pengaruh Acak Individu"))
Pengaruh Acak Individu
Kab/kota Pengaruh Acak Individu
Bandung -1.164
Bandung Barat 0.504
Bekasi -0.233
Bogor 0.771
Ciamis -1.834
Cianjur 1.274
Cirebon 1.321
Garut 0.704
Indramayu 0.012
Karawang -0.077
Kota Bandung 1.008
Kota Banjar -0.608
Kota Bekasi -0.700
Kota Bogor 0.417
Kota Cimahi 2.109
Kota Cirebon 0.877
Kota Depok -1.457
Kota Sukabumi 0.867
Kota Tasikmalaya -0.761
Kuningan 1.956
Majalengka -1.868
Pangandaran -1.915
Purwakarta -0.175
Subang 0.689
Sukabumi 0.291
Sumedang -0.352
Tasikmalaya -1.654

Output diatas merupakan pengaruh acak dari setiap unit individu, nilai tersebut tersebut menunjukkan seberapa besar perbedaan nilai komponen error acak masing-masing unit indvidu terhadap nilai intersep umum.

tidy_ranef <- tidy(ranef(rem_gls2, effect="time"))
## Warning: 'tidy.numeric' is deprecated.
## See help("Deprecated")
kable(tidy_ranef, digits=3, caption = "Pengaruh Acak Waktu", 
      col.names = c("Kab/Kota", "Pengaruh Acak Waktu"))
Pengaruh Acak Waktu
Kab/Kota Pengaruh Acak Waktu
2019 -0.067
2020 1.778
2021 1.069
2022 -0.266
2023 -0.978
2024 -1.535

Output diatas merupakan pengaruh acak dari setiap unit waktu, nilai tersebut tersebut menunjukkan seberapa besar perbedaan nilai komponen error acak masing-masing unit waktu terhadap nilai intersep umum.

FEM vs REM

Pada bagian sebelumnya, cukup bukti yang menyatakan bahwa model FEM lebih baik daripada model CEM. Oleh karena itu, tahap selanjutnya akan dibandingkan kebaikan model FEM jika dibanding model REM. Uji yang digunakan adalah uji Hausman dengan menggunakan fungsi phtest(FEM,REM).

Pengujian ini dilakukan untuk memilih model antara model pengaruh tetap atau model pengaruh acak yang sesuai untuk menggambarkan suatu data panel. Uji Hausman didasarkan pada perbedaan penduga model pengaruh tetap \(\hat{\beta}_{MPT}\) dengan penduga model pengaruh acak \(\hat{\beta}_{MPA}\). Kedua penduga konsisten dalam kondisi \(H_0\), tetapi \(\hat{\beta}_{MPA}\) akan bias dan tidak konsisten pada \(H_1\). Pengujian hipotesisnya adalah:

\(H_0\): Model pengaruh acak (REM) adalah model yang tepat

\(H_1\): Model pengaruh tetap (FEM) adalah model yang tepat

Karena nilai p-value yang diperoleh kurang dari dari alpha 5%, maka Tolak H0 yang mengindikasikan bahwa model yang sesuai adalah model FEM.

#fem_twoways dengan rem_gls2
phtest(fem_twoways, rem_gls2)
## 
##  Hausman Test
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## chisq = 6.5853, df = 5, p-value = 0.2534
## alternative hypothesis: one model is inconsistent

Karena nilai p-value yang diperoleh lebih besar dari dari alpha 5%, maka Tak Tolak H0 yang mengindikasikan bahwa model yang sesuai adalah model REM two ways.

Uji Diagnostik Sisaan

res <- residuals(rem_gls2)

Uji Normalitas

jarque.bera.test(res)
## 
##  Jarque Bera Test
## 
## data:  res
## X-squared = 0.99153, df = 2, p-value = 0.6091

Tak Tolak \(H_0\) sisaan menyebar normal.

# Histogram 
ggplot(as.data.frame(res), aes(x = res)) +
  geom_histogram(aes(y = after_stat(density)), color = "white", fill = "steelblue") +
  geom_density(color = "red", linewidth = 1) +
  theme_minimal()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Uji Autokorelasi

pbgtest(rem_gls2)
## 
##  Breusch-Godfrey/Wooldridge test for serial correlation in panel models
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## chisq = 38.257, df = 6, p-value = 1e-06
## alternative hypothesis: serial correlation in idiosyncratic errors

Tolak \(H_0\) terdapat autokorelasi antar sisaan

# Durbin Watson
pdwtest(rem_gls2)
## 
##  Durbin-Watson test for serial correlation in panel models
## 
## data:  TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum
## DW = 1.1336, p-value = 3.872e-09
## alternative hypothesis: serial correlation in idiosyncratic errors

Tolak \(H_0\) terdapat autokorelasi antar sisaan

Uji Kehomogenan

bptest(rem_gls2)
## 
##  studentized Breusch-Pagan test
## 
## data:  rem_gls2
## BP = 2.2758, df = 5, p-value = 0.8098

Tak tolak \(H_0\)

Kesimpulan

Hasil uji Hausman menunjukkan bahwa model yang terpilih adalah REM two ways dengan hasil sebagai berikut. Dapat dilihat bahwa model tersebut menghasilkan nilai p-value sebesar \(1.7304e-12\) menunjukkan Tolak \(H_0\) artinya model REM Two ways layak. Selain itu, dapat dilihat peubah-peubah yang berpengaruh dalam menduga Tingkat Pengangguran Terbuka berdasarkan Kabupaten/Kota di Provinsi Jawa Barat adalah Pengeluaran per Kapita Disesuaikan dengan satuan Ribu Rupiah (PPP), Tingkat Partisipasi Angkatan Kerja dengan satuan persen (TPAK), dan Upah minimum Kabupaten/Kota di Jawa Barat dengan satuan Rupiah (Upah_minimum).

summary(rem_gls2)
## Twoways effects Random Effect Model 
##    (Wallace-Hussain's transformation)
## 
## Call:
## plm(formula = TPT ~ PPP + TPAK + IPM + Persen_miskin + Upah_minimum, 
##     data = data, effect = "twoways", model = "random", random.method = "walhus", 
##     index = c("Kab_Kota", "Tahun"))
## 
## Balanced Panel: n = 27, T = 6, N = 162
## 
## Effects:
##                  var std.dev share
## idiosyncratic 0.8329  0.9127 0.302
## individual    1.1468  1.0709 0.415
## time          0.7828  0.8848 0.283
## theta: 0.6714 (id) 0.8053 (time) 0.6466 (total)
## 
## Residuals:
##     Min.  1st Qu.   Median  3rd Qu.     Max. 
## -1.74419 -0.57779 -0.01722  0.57810  2.65312 
## 
## Coefficients:
##                  Estimate  Std. Error z-value  Pr(>|z|)    
## (Intercept)    9.4493e+00  5.9734e+00  1.5819   0.11368    
## PPP           -1.1719e-04  4.5983e-05 -2.5487   0.01081 *  
## TPAK          -1.5033e-01  3.3374e-02 -4.5044 6.655e-06 ***
## IPM            7.7960e-02  6.6343e-02  1.1751   0.23996    
## Persen_miskin  1.0945e-01  1.1070e-01  0.9887   0.32280    
## Upah_minimum   1.0816e-06  2.4580e-07  4.4001 1.082e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Total Sum of Squares:    147.99
## Residual Sum of Squares: 104.9
## R-Squared:      0.2912
## Adj. R-Squared: 0.26848
## Chisq: 64.0902 on 5 DF, p-value: 1.7304e-12

\[ \begin{aligned} TPT_{it} &= 9.449+\lambda_t-1.172(10^{-4})PPP_{it}-0.150TPAK_{it}+7.796(10^{-2})IPM_{it}+0.109Persen\_miskin_{it}+1.082(10^{-6})Upah\_minimum_{it}+f_{i}+ \lambda_{t}+\varepsilon_{it} \\ \end{aligned} \]

Interpretasi :

  • Setiap kenaikan satu satuan Pengeluaran per Kapita Disesuaikan (000 Rp) menyebabkan Tingkat Pengangguran Terbuka menurun sebesar 1.172x10^-4 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Tingkat Partisipasi Angkatan Kerja (%) menyebabkan Tingkat Pengangguran Terbuka menurun sebesar 0.150 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Indeks Pembangunan Manusiamenyebabkan Tingkat Pengangguran Terbuka meningkat sebesar 7.796x10^-2 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Persentase Penduduk Miskin Menurut Kabupaten/Kota di Jawa Barat (%) menyebabkan Tingkat Pengangguran Terbuka meningkat sebesar 0.109 persen dengan menganggap peubah lain konstan.

  • Setiap kenaikan satu satuan Upah minimum Kabupaten/Kota di Jawa Barat (Rupiah) menyebabkan Tingkat Pengangguran Terbuka meningkat sebesar 1.082x10^-6 persen dengan menganggap peubah lain konstan.

Untuk semua p-value di bawah 5%, maka terdapat cukup bukti untuk menolak \(H_0\) (kurang dari 5% kemungkinan bahwa \(H_0\) benar).

  • Model memiliki p-value pada uji F yang lebih kecil dari 0.05 (1.7304e-12) yang berarti model ini layak untuk digunakan
  • p-value uji-T untuk peubah PPP, TPAK, Upah_minimum < 5%. Artinya, dapat dikatakan bahwa peubah tersebut berpengaruh signifikan terhadap model.

\(R^2\) merupakan nilai yang menunjukan kekuatan hubungan antara peubah bebas dan peubah respons. Semakin tinggi nilai \(R^2\), maka semakin baik model tersebut.

  • \(R^2\) pada model sebesar 0.2912 atau 29.12% yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

  • Model dapat menjelaskan sebesar 26.848% dari keragaman data yang dilihat dari \(R^2 Adj\) yang mengindikasikan bahwa peubah yang digunakan tidak baik dalam menggambarkan model.

LS0tDQp0aXRsZTogIkFuYWxpc2lzIHBhbmVsIGZha3Rvci1mYWt0b3IgbWVtZW5nYXJ1aGkgdGluZ2thdCBwZW5nYW5nZ3VyYW4gdGVyYnVrYSBkaSBKYXdhIEJhcmF0IFRhaHVuIDIwMTktMjAyNCINCmF1dGhvcjogIk5hYmlsIElibmkgTmF3YXdpIg0KZGF0ZTogIjIwMjUtMTEtMTEiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OmRvd25jdXRlOg0KICAgIGRvd25jdXRlX3RoZW1lOiAiY2hhb3MiDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jX2RlcHRoOiAzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgdGhlbWU6IGNlcnVsZWFuDQogICAgaGlnaGxpZ2h0OiAia2F0ZSINCi0tLQ0KDQo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+DQoNCioqQXV0aG9yOioqDQoNCjwvcD4NCg0KLSAgIEcxNDAxMjIxMDI3IE5hYmlsIElibmkgTmF3YXdpDQoNCmBgYHtyfQ0KbGFwcGx5KGMoImthYmxlRXh0cmEiLCJ0aWR5dmVyc2UiLCJwbG0iLCJ0aW55dGV4IiwidHNlcmllcyIsImxtdGVzdCIsIA0KICAgICAgICAgImJyb29tIiwgInN0YXJnYXplciIsICJSQ29sb3JCcmV3ZXIiKSwgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUKVtbMV1dDQpgYGANCg0KDQojIERhdGENCg0KRGF0YSB5YW5nIGRpZ3VuYWthbiBhZGFsYWggZGF0YSBUaW5na2F0IFBlbmdhbmdndXJhbiBUZXJidWthIGF0YXUgVFBUIERlbmdhbiA1IFBldWJhaCBiZWJhcy4gRGF0YSBpbmkgYmVyamVuaXMgZGF0YSBwYW5lbCBkZW5nYW4gaW5kaXZpZHVueWEgYWRhbGFoIDI3IEthYi9Lb3RhIGRpIFByb3ZpbnNpIEphd2EgQmFyYXQgc2VsYW1hIDYgdGFodW4gKFRhaHVuIDIwMTktMjAyNCkgZGVuZ2FuIHBldWJhaC1wZXViYWggc2ViYWdhaSBiZXJpa3V0Og0KDQotICAgVFBUIDogVGluZ2thdCBQZW5nYW5nZ3VyYW4gVGVyYnVrYSAoJSkNCg0KLSAgIFBQUCA6IFBlbmdlbHVhcmFuIHBlciBLYXBpdGEgRGlzZXN1YWlrYW4gKDAwMCBScCkNCg0KLSAgIFRQQUsgOiBUaW5na2F0IFBhcnRpc2lwYXNpIEFuZ2thdGFuIEtlcmphICglKQ0KDQotICAgSVBNIDogSW5kZWtzIFBlbWJhbmd1bmFuIE1hbnVzaWENCg0KLSAgIFBlcnNlbl9taXNraW4gOiBQZXJzZW50YXNlIFBlbmR1ZHVrIE1pc2tpbiBNZW51cnV0IEthYnVwYXRlbi9Lb3RhIGRpIEphd2EgQmFyYXQgKCUpDQoNCi0gICBVcGFoX21pbmltdW0gOiBVcGFoIG1pbmltdW0gS2FidXBhdGVuL0tvdGEgZGkgSmF3YSBCYXJhdCAoUnVwaWFoKQ0KDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQpkYXRhIDwtIHJlYWRfeGxzeCgiQzovVXNlcnMvTmFiaWwgSWJuaSBOYXdhd2kvRG9jdW1lbnRzL0tVTElBSC9TZW1lc3RlciA3L0RhdGEgbGFwb3JhbiBpbmRpdmlkdSAyLnhsc3giKQ0KYGBgDQoNCmBgYHtyfQ0KIyBHYW50aSBuYW1hICJLYWIva290YSIgbWVuamFkaSAiS2FiX0tvdGEiDQpkYXRhIDwtIGRhdGEgJT4lIA0KICByZW5hbWUoS2FiX0tvdGEgPSAiS2FiL2tvdGEiKQ0KYGBgDQoNCg0KYGBge3J9DQpnbGltcHNlKGRhdGEpDQpgYGANCg0KYGBge3J9DQpkYXRhICU+JSBoZWFkKDYpDQpgYGANCg0KTWVtdW5jdWxrYW4gNiBkYXRhIHRlcmF0YXMgeWFpdHUgS2FidXBhdGVuIEJvZ29yIGRhcmkgdGFodW4gMjAxOS0yMDI0DQoNCiMgTWV0b2RvbG9naQ0KDQpNZXRvZG9sb2dpIHlhbmcgZGlndW5ha2FuIGFkYWxhaCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCjEuICBFa3NwbG9yYXNpIERhdGENCg0KMi4gIE1lbmR1Z2EgcGFyYW1ldGVyIG1vZGVsIENFTQ0KDQozLiAgTWVuZHVnYSBwYXJhbWV0ZXIgbW9kZWwgRkVNDQoNCjQuICBNZWxha3VrYW4gVWppIENob3cNCg0KNS4gIE1lbmR1Z2EgUGFyYW1ldGVyIG1vZGVsIFJFTQ0KDQo2LiAgTWVsYWt1a2FuIFVqaSBIYXVzbWFuDQoNCjcuICBQZW5ndWppYW4gYXN1bXNpIHRlcmhhZGFwIE1vZGVsIHRlcnBpbGloDQoNCjguICBKaWthIGFzdW1zaSB0aWRhayB0ZXJwZW51aGksIGFrYW4gZGlsYWt1a2FuIHBlbmFuZ2FuYW4gYXN1bXNpDQoNCjkuICBJbnRlcnByZXRhc2kgbW9kZWwgdGVyYmFpaw0KDQojIEVrc3Bsb3Jhc2kgRGF0YQ0KDQpgYGB7cn0NCmdncGxvdChkYXRhPWRhdGEsIGFlcyh4PVRhaHVuLCB5PVRQVCwgZ3JvdXAgPSBLYWJfS290YSwgY29sb3VyID0gYEthYl9Lb3RhYCkpKyB0aGVtZV9idygpKw0KICBnZW9tX2xpbmUoc2l6ZT0xLjIpICsNCiAgZ2VvbV9wb2ludCggc2l6ZT0zLCBzaGFwZT0xOSwgZmlsbD0icmVkIikgKyANCiAgbGFicyhjb2xvdXI9IkthYi9rb3RhIGRpIEphd2EgQmFyYXQiLCB0aXRsZSA9ICJUaW5na2F0IFBlbmdhbmdndXJhbiBUZXJidWthIGRpIFByb3ZpbnNpIEphYSBCYXJhdCIsIHN1YnRpdGxlID0gIlRhaHVuIDIwMTktMjAyNCIpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSxmYWNlID0gImJvbGQiKSwgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KIyMgUGVtZXJpa3NhYW4gTXVsdGlrb2xpbmVhcml0YXMNCg0KYGBge3J9DQpsaWJyYXJ5KGNhcikNCm1vZGVsMSA8LSBsbShUUFQgfiBQUFAgKyBUUEFLICsgSVBNICsgUGVyc2VuX21pc2tpbiArIFVwYWhfbWluaW11bSwgZGF0YSU+JWZpbHRlcihUYWh1bj09MjAxOSkpDQptb2RlbDIgPC0gbG0oVFBUIH4gUFBQICsgVFBBSyArIElQTSArIFBlcnNlbl9taXNraW4gKyBVcGFoX21pbmltdW0sIGRhdGElPiVmaWx0ZXIoVGFodW49PTIwMjApKQ0KbW9kZWwzIDwtIGxtKFRQVCB+IFBQUCArIFRQQUsgKyBJUE0gKyBQZXJzZW5fbWlza2luICsgVXBhaF9taW5pbXVtLCBkYXRhJT4lZmlsdGVyKFRhaHVuPT0yMDIxKSkNCm1vZGVsNCA8LSBsbShUUFQgfiBQUFAgKyBUUEFLICsgSVBNICsgUGVyc2VuX21pc2tpbiArIFVwYWhfbWluaW11bSwgZGF0YSU+JWZpbHRlcihUYWh1bj09MjAyMikpDQptb2RlbDUgPC0gbG0oVFBUIH4gUFBQICsgVFBBSyArIElQTSArIFBlcnNlbl9taXNraW4gKyBVcGFoX21pbmltdW0sIGRhdGElPiVmaWx0ZXIoVGFodW49PTIwMjMpKQ0KbW9kZWw2IDwtIGxtKFRQVCB+IFBQUCArIFRQQUsgKyBJUE0gKyBQZXJzZW5fbWlza2luICsgVXBhaF9taW5pbXVtLCBkYXRhJT4lZmlsdGVyKFRhaHVuPT0yMDI0KSkNCm1vZGVsNyA8LSBsbShUUFQgfiBQUFAgKyBUUEFLICsgSVBNICsgUGVyc2VuX21pc2tpbiArIFVwYWhfbWluaW11bSwgZGF0YSkNCg0KDQpNdWx0aWtvbCA8LSByYmluZChhcy52ZWN0b3IodmlmKG1vZGVsMSkpLGFzLnZlY3Rvcih2aWYobW9kZWwyKSksYXMudmVjdG9yKHZpZihtb2RlbDMpKSwNCiAgICAgICAgICAgYXMudmVjdG9yKHZpZihtb2RlbDQpKSxhcy52ZWN0b3IodmlmKG1vZGVsNSkpLGFzLnZlY3Rvcih2aWYobW9kZWw2KSksDQogICAgICAgICAgIGFzLnZlY3Rvcih2aWYobW9kZWw3KSkNCiAgICAgICAgICAgKQ0KDQpyb3duYW1lcyhNdWx0aWtvbCkgPC0gYygiVGFodW4gMjAxOSIsIlRhaHVuIDIwMjAiLCJUYWh1biAyMDIxIiwiVGFodW4gMjAyMiIsIlRhaHVuIDIwMjMiLCJUYWh1biAyMDI0IiwiVGFodW4gMjAxOS0yMDI0IikNCg0KY29sbmFtZXMoTXVsdGlrb2wpIDwtIGMoIlBQUCIsIlRQQUsiLCJJUE0iLCJQZXJzZW5fbWlza2luIiwiVXBhaF9taW5pbXVtIikNCg0KTXVsdGlrb2wNCmBgYA0KDQpQYWRhIG1vZGVsNyB5YWl0dSBnYWJ1bmdhbiBzZW11YSB0YWh1biB0aWRhayBhZGEgbXVsdGlrb2xpbmVhcml0YXMNCg0KDQojIENvbW1vbi1FZmZlY3QgTW9kZWwNCg0KYGBge3J9DQpjZW0gPC0gcGxtKFRQVCB+IFBQUCArIFRQQUsgKyBJUE0gKyBQZXJzZW5fbWlza2luICsgVXBhaF9taW5pbXVtLCBkYXRhID0gZGF0YSwgbW9kZWwgPSAicG9vbGluZyIpDQpzdW1tYXJ5KGNlbSkNCmBgYA0KDQojIEZpeGVkLUVmZmVjdCBNb2RlbA0KDQojIyBGRU0gSW5kaXZpZHVhbA0KDQpgYGB7cn0NCmZlbSA8LSBwbG0oVFBUIH4gUFBQICsgVFBBSyArIElQTSArIFBlcnNlbl9taXNraW4gKyBVcGFoX21pbmltdW0sIA0KICAgICAgICAgICAgICAgICAgaW5kZXggPSBjKCJLYWJfS290YSIsICJUYWh1biIpLCANCiAgICAgICAgICAgICAgICAgIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJpbmRpdmlkdWFsIiwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KGZlbSkNCmBgYA0KDQpOaWxhaSBpbnRlcnNlcCBkYXJpIHNldGlhcCBpbmRpdmlkdQ0KDQpgYGB7cn0NCnN1bW1hcnkoZml4ZWYoZmVtLCBlZmZlY3Q9ImluZGl2aWR1YWwiKSkNCmBgYA0KDQpOaWxhaSBkaWF0YXMgYWRhbGFoIG5pbGFpIHBlbmdhcnVoIGtvbnN0YW4gZGFyaSBtYXNpbmctbWFzaW5nIGluZGl2aWR1IHBhZGEgbW9kZWwuDQoNCiMjIEZFTSBUSU1FDQoNCkVmZWsga29tcG9uZW4gc2lzYWFhbiBzYXR1IGFyYWggcGFkYSB3YWt0dS4NCg0KYGBge3J9DQpmZW1fdGltZSA8LSBwbG0oVFBUIH4gUFBQICsgVFBBSyArIElQTSArIFBlcnNlbl9taXNraW4gKyBVcGFoX21pbmltdW0sIA0KICAgICAgICAgICAgICAgICAgaW5kZXggPSBjKCJLYWJfS290YSIsICJUYWh1biIpLCANCiAgICAgICAgICAgICAgICAgIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIiwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KGZlbV90aW1lKQ0KYGBgDQoNCk5pbGFpIEludGVyc2VwIGRhcmkgc2V0aWFwIHdha3R1DQoNCmBgYHtyfQ0Kc3VtbWFyeShmaXhlZihmZW1fdGltZSwgZWZmZWN0PSJ0aW1lIikpDQpgYGANCg0KIyMgRkVNIFRXTyBXQVlTDQoNCmBgYHtyfQ0KZmVtX3R3b3dheXMgPC0gcGxtKFRQVCB+IFBQUCArIFRQQUsgKyBJUE0gKyBQZXJzZW5fbWlza2luICsgVXBhaF9taW5pbXVtLCANCiAgICAgICAgICAgICAgICAgIGluZGV4ID0gYygiS2FiX0tvdGEiLCAiVGFodW4iKSwgDQogICAgICAgICAgICAgICAgICBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidHdvd2F5cyIsIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShmZW1fdHdvd2F5cykNCmBgYA0KDQpOaWxhaSBJbnRlcnNlcCBkYXJpIHNldGlhcCBpbmRpdmlkdSBkYW4gd2FrdHUNCg0KYGBge3J9DQpkYXRhLmZyYW1lKHN1bW1hcnkoZml4ZWYoZmVtX3R3b3dheXMsIGVmZmVjdD0idHdvd2F5cyIpKSkNCmBgYA0KDQojIyBGRU0gTFNEVg0KDQpgYGB7cn0NCmZlbV9sc2R2IDwtIGxtKFRQVCB+IFBQUCArIFRQQUsgKyBJUE0gKyBQZXJzZW5fbWlza2luICsgVXBhaF9taW5pbXVtICsgZmFjdG9yKFRhaHVuKSArIGZhY3RvcihLYWJfS290YSksIGRhdGEpDQpzdW1tYXJ5KGZlbV9sc2R2KQ0KYGBgDQoNCg0KDQoNCiMgVWppLUNob3cNCg0KVWppIENob3cgYWRhbGFoIHVqaSBmb3JtYWwgdW50dWsgbWVuZ3VqaSBhZGEgYXRhdSB0aWRha255YSBwZW5nYXJ1aCBzcGVzaWZpayBpbmRpdmlkdSBkYW4gcGVuZ2FydWggc3Blc2lmaWsgd2FrdHUgcGFkYSBkYXRhIHBhbmVsLg0KDQpIaXBvdGVzaXMgcGFkYSB1amkgaW5pIHlhaXR1IDoNCg0KLSAgIFVudHVrIG1lbmd1amkgcGVuZ2FydWggaW5kaXZpZHUNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KSF97MDF9ICY6IFx0ZXh0e1RpZGFrIGFkYSBwZW5nYXJ1aCBzcGVzaWZpayBpbmRpdmlkdX0gXFwNCkhfezExfSAmOiBcdGV4dHtBZGEgcGVuZ2FydWggc3Blc2lmaWsgaW5kaXZpZHV9DQpcZW5ke2FsaWduZWR9DQokJA0KDQotICAgVW50dWsgbWVuZ3VqaSBwZW5nYXJ1aCB3YWt0dQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpIX3swMn0gJjogXHRleHR7VGlkYWsgYWRhIHBlbmdhcnVoIHNwZXNpZmlrIHdha3R1fSBcXA0KSF97MTJ9ICY6IFx0ZXh0e0FkYSBwZW5nYXJ1aCBzcGVzaWZpayB3YWt0dX0NClxlbmR7YWxpZ25lZH0NCiQkDQoNClN0YXRzaXRpayBVamkgeWFuZyBkaWd1bmFrYW4gOg0KDQotICAgUGVuZ2FydWggaW5kaXZpZHUNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KRl97SGl0dW5nfSA9IFxmcmFje0pLR197TUd9IC0gSktHX3tNUFRJfX17SktHX3tNUFRJfX0gLiBcZnJhY3tOVC1OLUt9e04tMX0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCi0gICBQZW5nYXJ1aCBXYWt0dQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpGX3tIaXR1bmd9ID0gXGZyYWN7SktHX3tNR30gLSBKS0dfe01QVFd9fXtKS0dfe01QVFd9fSAuIFxmcmFje04tVC1LfXtULTF9DQpcZW5ke2FsaWduZWR9DQokJA0KDQojIyBVamkgQ2hvdw0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpIXzAgJjogXHRleHR7TW9kZWwgQ29tbW9uIEVmZmVjdH0gXFwNCkhfMSAmOiBcdGV4dHtNb2RlbCBGaXhlZCBFZmZlY3R9DQpcZW5ke2FsaWduZWR9DQokJA0KDQokSF8wJCBha2FuIGRpdG9sYWsgYXBhYmlsYSBgcC12YWx1ZWAgbGViaWgga2VjaWwgZGFyaSBgYWxwaGFgIHlhaXR1IDAuMDUNCg0KYGBge3J9DQpwb29sdGVzdChjZW0sIGZlbSkNCmBgYA0KDQpOaWxhaSBgcC12YWx1ZWAgc2ViZXNhciAkMi4yZS0xNiQgYmVyYXJ0aSBrZXB1dHVzYW4gKlRvbGFrIEgwKiBhdGF1IG1vZGVsIGZpeGVkIGVmZmVjdCBsZWJpaCBsYXlhayBkaWd1bmFrYW4gcGFkYSBkYXRhIGluaS4NCg0KIyMgVWppIHBlbmdhcnVoIGluZGl2aWR1IC8gd2FrdHUNCg0KU2VsYW5qdXRueWEga2FyZW5hIHlhbmcgdGVycGlsaWggYWRhbGFoIG1vZGVsIEZpeGVkLUVmZmVjdCBha2FuIGRpbGloYXQga29tcG9uZW4geWFuZyBtZW1pbGlraSBwZW5nYXJ1aCB0ZXRhcCBhcGFrYWggaW5kaXZpZHUsIHdha3R1LCBhdGF1IGtlZHVhbnlhLg0KDQojIyMgRWZlayBJbmRpdmlkdSBkYW4gV2FrdHUNCg0KYGBge3J9DQpwbG10ZXN0KGZlbSwgdHlwZSA9ICJicCIsIGVmZmVjdCA9ICJ0d293YXlzIikNCmBgYA0KDQojIyMgRWZlayBJbmRpdmlkdSBkYW4gV2FrdHUNCg0KYGBge3J9DQpwbG10ZXN0KGZlbSwgdHlwZSA9ICJicCIsIGVmZmVjdCA9ICJpbmRpdmlkdWFsIikNCmBgYA0KDQojIyMgRWZlayBXYWt0dQ0KDQpgYGB7cn0NCnBsbXRlc3QoZmVtLCB0eXBlID0gImJwIiwgZWZmZWN0ID0gInRpbWUiKQ0KYGBgDQoNCkRhcmkga2V0aWdhIHVqaSBkaWF0YXMgZGlkYXBhdCBuaWxhaSAqcC12YWx1ZSogeWFuZyBsZWJpaCBrZWNpbCBkYXJpIDAuMDUgeWFuZyBiZXJhcnRpIGtlcHV0dXNhbm55YSBhZGFsYWggVG9sYWsgJEhfMCQgYXRhdSB0ZXJkYXBhdCBwZW5nYXJ1aCB5YW5nIHNpZ25pZmlrYW4gZGFyaSBpbmRpdmlkdSBtYXVwdW4gd2FrdHUuIFNlaGluZ2dhIGFrYW4gZGlkdWdhIHBhcmFtZXRlciBwZW5nYXJ1aCB0d293YXlzIHBhZGEgUmFuZG9tIEVmZmVjdCBNb2RlbC4NCg0KDQpgYGB7cn0NCnBGdGVzdChmZW1fdHdvd2F5cywgZmVtKQ0KYGBgDQoNCiMgUmFuZG9tLUVmZmVjdCBNb2RlbA0KDQpNb2RlbCBwZW5nYXJ1aCBhY2FrIG1lbmdhc3Vtc2lrYW4gdGlkYWsgYWRhIGtvcmVsYXNpIGFudGFyYSBwZW5nYXJ1aCBzcGVzaWZpayBpbmRpdmlkdSBkYW4gcGVuZ2FydWggc3Blc2lmaWsgd2FrdHUgZGVuZ2FuIHBldWJhaCBiZWJhcy4gQXN1bXNpIGluaSBtZW1idWF0IGtvbXBvbmVuIHNpc2FhbiBkYXJpIHBlbmdhcnVoIHNwZXNpZmlrIGluZGl2aWR1IGRhbiBwZW5nYXJ1aCBzcGVzaWZpayB3YWt0dSBkaW1hc3VrYW4ga2VkYWxhbSBzaXNhYW4uDQoNCiMjIFJFTSBHZW5lcmFsaXplZCBMZWFzdCBTcXVhcmUNCg0KYGBge3J9DQpyZW1fZ2xzMiA8LSBwbG0oVFBUIH4gUFBQICsgVFBBSyArIElQTSArIFBlcnNlbl9taXNraW4gKyBVcGFoX21pbmltdW0sIA0KICAgICAgICAgICAgICAgICAgaW5kZXggPSBjKCJLYWJfS290YSIsICJUYWh1biIpLCANCiAgICAgICAgICAgICAgICAgIG1vZGVsID0gInJhbmRvbSIsIGVmZmVjdCA9ICJ0d293YXlzIiwgcmFuZG9tLm1ldGhvZCA9ICJ3YWxodXMiLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkocmVtX2dsczIpDQpgYGANCg0KIyMgQ2VrIFNpZ25pZmlrYW5zaSBQZW5nYXJ1aCBJbmRpdmlkdQ0KDQpgYGB7cn0NCiNlZmVrIGluZGl2aWR1IA0KcGxtdGVzdChyZW1fZ2xzMix0eXBlID0gImJwIiwgZWZmZWN0PSJpbmRpdmlkdSIpDQpgYGANCg0KS2FyZW5hIG5pbGFpIHAtdmFsdWUgPCAwLjA1LCBtYWthIHRvbGFrICRIXzAkIGF0YXUgcGVuZ2FydWggaW5kaXZpZHUgc2lnbmlmaWthbiB0ZXJoYWRhcCBtb2RlbC4NCg0KIyMgQ2VrIFNpZ25pZmlrYW5zaSBQZW5nYXJ1aCBXYWt0dQ0KDQpgYGB7cn0NCiNlZmVrIHdha3R1IA0KcGxtdGVzdChyZW1fZ2xzMix0eXBlID0gImJwIiwgZWZmZWN0PSJ0aW1lIikNCmBgYA0KS2FyZW5hIG5pbGFpIHAtdmFsdWUgPCAwLjA1LCBtYWthIHRvbGFrICRIXzAkIGF0YXUgcGVuZ2FydWggd2FrdHUgc2lnbmlmaWthbiB0ZXJoYWRhcCBtb2RlbC4gQXJ0aW55YSwgbW9kZWwgdHdvd2F5cyB0ZXBhdCBkaWd1bmFrYW4gdW50dWsgbWV0b2RlIFJFTS4NCg0KYGBge3J9DQp0aWR5X3JhbmVmIDwtIHRpZHkocmFuZWYocmVtX2dsczIsIGVmZmVjdD0iaW5kaXZpZHVhbCIpKQ0Ka2FibGUodGlkeV9yYW5lZiwgZGlnaXRzPTMsIGNhcHRpb24gPSAiUGVuZ2FydWggQWNhayBJbmRpdmlkdSIsIA0KICAgICAgY29sLm5hbWVzID0gYygiS2FiL2tvdGEiLCAiUGVuZ2FydWggQWNhayBJbmRpdmlkdSIpKQ0KYGBgDQoNCk91dHB1dCBkaWF0YXMgbWVydXBha2FuIHBlbmdhcnVoIGFjYWsgZGFyaSBzZXRpYXAgdW5pdCBpbmRpdmlkdSwgbmlsYWkgdGVyc2VidXQgdGVyc2VidXQgbWVudW5qdWtrYW4gc2ViZXJhcGEgYmVzYXIgcGVyYmVkYWFuIG5pbGFpIGtvbXBvbmVuIGVycm9yIGFjYWsgbWFzaW5nLW1hc2luZyB1bml0IGluZHZpZHUgdGVyaGFkYXAgbmlsYWkgaW50ZXJzZXAgdW11bS4NCg0KYGBge3J9DQp0aWR5X3JhbmVmIDwtIHRpZHkocmFuZWYocmVtX2dsczIsIGVmZmVjdD0idGltZSIpKQ0Ka2FibGUodGlkeV9yYW5lZiwgZGlnaXRzPTMsIGNhcHRpb24gPSAiUGVuZ2FydWggQWNhayBXYWt0dSIsIA0KICAgICAgY29sLm5hbWVzID0gYygiS2FiL0tvdGEiLCAiUGVuZ2FydWggQWNhayBXYWt0dSIpKQ0KYGBgDQoNCk91dHB1dCBkaWF0YXMgbWVydXBha2FuIHBlbmdhcnVoIGFjYWsgZGFyaSBzZXRpYXAgdW5pdCB3YWt0dSwgbmlsYWkgdGVyc2VidXQgdGVyc2VidXQgbWVudW5qdWtrYW4gc2ViZXJhcGEgYmVzYXIgcGVyYmVkYWFuIG5pbGFpIGtvbXBvbmVuIGVycm9yIGFjYWsgbWFzaW5nLW1hc2luZyB1bml0IHdha3R1IHRlcmhhZGFwIG5pbGFpIGludGVyc2VwIHVtdW0uDQoNCiMgRkVNIHZzIFJFTQ0KDQpQYWRhIGJhZ2lhbiBzZWJlbHVtbnlhLCBjdWt1cCBidWt0aSB5YW5nIG1lbnlhdGFrYW4gYmFod2EgbW9kZWwgRkVNIGxlYmloIGJhaWsgZGFyaXBhZGEgbW9kZWwgQ0VNLiBPbGVoIGthcmVuYSBpdHUsIHRhaGFwIHNlbGFuanV0bnlhIGFrYW4gZGliYW5kaW5na2FuIGtlYmFpa2FuIG1vZGVsIEZFTSBqaWthIGRpYmFuZGluZyBtb2RlbCBSRU0uIFVqaSB5YW5nIGRpZ3VuYWthbiBhZGFsYWggdWppIGBIYXVzbWFuYCBkZW5nYW4gbWVuZ2d1bmFrYW4gZnVuZ3NpIGBwaHRlc3QoRkVNLFJFTSlgLg0KDQpQZW5ndWppYW4gaW5pIGRpbGFrdWthbiB1bnR1ayBtZW1pbGloIG1vZGVsIGFudGFyYSBtb2RlbCBwZW5nYXJ1aCB0ZXRhcCBhdGF1IG1vZGVsIHBlbmdhcnVoIGFjYWsgeWFuZyBzZXN1YWkgdW50dWsgbWVuZ2dhbWJhcmthbiBzdWF0dSBkYXRhIHBhbmVsLiBVamkgSGF1c21hbiBkaWRhc2Fya2FuIHBhZGEgcGVyYmVkYWFuIHBlbmR1Z2EgbW9kZWwgcGVuZ2FydWggdGV0YXAgJFxoYXR7XGJldGF9X3tNUFR9JCBkZW5nYW4gcGVuZHVnYSBtb2RlbCBwZW5nYXJ1aCBhY2FrICRcaGF0e1xiZXRhfV97TVBBfSQuIEtlZHVhIHBlbmR1Z2Ega29uc2lzdGVuIGRhbGFtIGtvbmRpc2kgJEhfMCQsIHRldGFwaSAkXGhhdHtcYmV0YX1fe01QQX0kIGFrYW4gYmlhcyBkYW4gdGlkYWsga29uc2lzdGVuIHBhZGEgJEhfMSQuIFBlbmd1amlhbiBoaXBvdGVzaXNueWEgYWRhbGFoOg0KDQokSF8wJDogTW9kZWwgcGVuZ2FydWggYWNhayAoUkVNKSBhZGFsYWggbW9kZWwgeWFuZyB0ZXBhdA0KDQokSF8xJDogTW9kZWwgcGVuZ2FydWggdGV0YXAgKEZFTSkgYWRhbGFoIG1vZGVsIHlhbmcgdGVwYXQNCg0KS2FyZW5hIG5pbGFpIHAtdmFsdWUgeWFuZyBkaXBlcm9sZWgga3VyYW5nIGRhcmkgZGFyaSBhbHBoYSA1JSwgbWFrYSBUb2xhayBIMCB5YW5nIG1lbmdpbmRpa2FzaWthbiBiYWh3YSAqKm1vZGVsIHlhbmcgc2VzdWFpIGFkYWxhaCBtb2RlbCBGRU0qKi4NCg0KYGBge3J9DQojZmVtX3R3b3dheXMgZGVuZ2FuIHJlbV9nbHMyDQpwaHRlc3QoZmVtX3R3b3dheXMsIHJlbV9nbHMyKQ0KYGBgDQoNCkthcmVuYSBuaWxhaSBwLXZhbHVlIHlhbmcgZGlwZXJvbGVoIGxlYmloIGJlc2FyIGRhcmkgZGFyaSBhbHBoYSA1JSwgbWFrYSBUYWsgVG9sYWsgSDAgeWFuZyBtZW5naW5kaWthc2lrYW4gYmFod2EgKiptb2RlbCB5YW5nIHNlc3VhaSBhZGFsYWggbW9kZWwgUkVNIHR3byB3YXlzKiouDQoNCiMgVWppIERpYWdub3N0aWsgU2lzYWFuDQoNCmBgYHtyfQ0KcmVzIDwtIHJlc2lkdWFscyhyZW1fZ2xzMikNCmBgYA0KDQojIyBVamkgTm9ybWFsaXRhcw0KDQpgYGB7cn0NCmphcnF1ZS5iZXJhLnRlc3QocmVzKQ0KYGBgDQpUYWsgVG9sYWsgJEhfMCQgc2lzYWFuIG1lbnllYmFyIG5vcm1hbC4NCg0KYGBge3J9DQojIEhpc3RvZ3JhbSANCmdncGxvdChhcy5kYXRhLmZyYW1lKHJlcyksIGFlcyh4ID0gcmVzKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IGFmdGVyX3N0YXQoZGVuc2l0eSkpLCBjb2xvciA9ICJ3aGl0ZSIsIGZpbGwgPSAic3RlZWxibHVlIikgKw0KICBnZW9tX2RlbnNpdHkoY29sb3IgPSAicmVkIiwgbGluZXdpZHRoID0gMSkgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQojIyBVamkgQXV0b2tvcmVsYXNpDQoNCmBgYHtyfQ0KcGJndGVzdChyZW1fZ2xzMikNCmBgYA0KVG9sYWsgJEhfMCQgdGVyZGFwYXQgYXV0b2tvcmVsYXNpIGFudGFyIHNpc2Fhbg0KDQpgYGB7cn0NCiMgRHVyYmluIFdhdHNvbg0KcGR3dGVzdChyZW1fZ2xzMikNCmBgYA0KDQpUb2xhayAkSF8wJCB0ZXJkYXBhdCBhdXRva29yZWxhc2kgYW50YXIgc2lzYWFuDQoNCiMjIFVqaSBLZWhvbW9nZW5hbg0KDQpgYGB7cn0NCmJwdGVzdChyZW1fZ2xzMikNCmBgYA0KVGFrIHRvbGFrICRIXzAkDQoNCiMgS2VzaW1wdWxhbg0KDQpIYXNpbCB1amkgSGF1c21hbiBtZW51bmp1a2thbiBiYWh3YSBtb2RlbCB5YW5nIHRlcnBpbGloIGFkYWxhaCBSRU0gdHdvIHdheXMgZGVuZ2FuIGhhc2lsIHNlYmFnYWkgYmVyaWt1dC4gRGFwYXQgZGlsaWhhdCBiYWh3YSBtb2RlbCB0ZXJzZWJ1dCBtZW5naGFzaWxrYW4gbmlsYWkgYHAtdmFsdWVgIHNlYmVzYXIgJDEuNzMwNGUtMTIkIG1lbnVuanVra2FuIFRvbGFrICRIXzAkIGFydGlueWEgbW9kZWwgUkVNIFR3byB3YXlzIGxheWFrLiBTZWxhaW4gaXR1LCBkYXBhdCBkaWxpaGF0IHBldWJhaC1wZXViYWggeWFuZyBiZXJwZW5nYXJ1aCBkYWxhbSBtZW5kdWdhIFRpbmdrYXQgUGVuZ2FuZ2d1cmFuIFRlcmJ1a2EgYmVyZGFzYXJrYW4gS2FidXBhdGVuL0tvdGEgZGkgUHJvdmluc2kgSmF3YSBCYXJhdCBhZGFsYWggUGVuZ2VsdWFyYW4gcGVyIEthcGl0YSBEaXNlc3VhaWthbiBkZW5nYW4gc2F0dWFuIFJpYnUgUnVwaWFoIChQUFApLCBUaW5na2F0IFBhcnRpc2lwYXNpIEFuZ2thdGFuIEtlcmphIGRlbmdhbiBzYXR1YW4gcGVyc2VuIChUUEFLKSwgZGFuIFVwYWggbWluaW11bSBLYWJ1cGF0ZW4vS290YSBkaSBKYXdhIEJhcmF0IGRlbmdhbiBzYXR1YW4gUnVwaWFoIChVcGFoX21pbmltdW0pLg0KDQpgYGB7cn0NCnN1bW1hcnkocmVtX2dsczIpDQpgYGANCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KVFBUX3tpdH0gJj0gOS40NDkrXGxhbWJkYV90LTEuMTcyKDEwXnstNH0pUFBQX3tpdH0tMC4xNTBUUEFLX3tpdH0rNy43OTYoMTBeey0yfSlJUE1fe2l0fSswLjEwOVBlcnNlblxfbWlza2luX3tpdH0rMS4wODIoMTBeey02fSlVcGFoXF9taW5pbXVtX3tpdH0rZl97aX0rIFxsYW1iZGFfe3R9K1x2YXJlcHNpbG9uX3tpdH0gXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNCkludGVycHJldGFzaSA6DQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBQZW5nZWx1YXJhbiBwZXIgS2FwaXRhIERpc2VzdWFpa2FuICgwMDAgUnApYCBtZW55ZWJhYmthbiBgVGluZ2thdCBQZW5nYW5nZ3VyYW4gVGVyYnVrYWAgbWVudXJ1biBzZWJlc2FyIGAxLjE3MngxMF4tNGAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBUaW5na2F0IFBhcnRpc2lwYXNpIEFuZ2thdGFuIEtlcmphICglKWAgbWVueWViYWJrYW4gYFRpbmdrYXQgUGVuZ2FuZ2d1cmFuIFRlcmJ1a2FgIG1lbnVydW4gc2ViZXNhciBgMC4xNTBgIHBlcnNlbiBkZW5nYW4gbWVuZ2FuZ2dhcCBwZXViYWggbGFpbiBrb25zdGFuLg0KDQotIFNldGlhcCBrZW5haWthbiBzYXR1IHNhdHVhbiBgSW5kZWtzIFBlbWJhbmd1bmFuIE1hbnVzaWFgbWVueWViYWJrYW4gYFRpbmdrYXQgUGVuZ2FuZ2d1cmFuIFRlcmJ1a2FgIG1lbmluZ2thdCBzZWJlc2FyIGA3Ljc5NngxMF4tMmAgcGVyc2VuIGRlbmdhbiBtZW5nYW5nZ2FwIHBldWJhaCBsYWluIGtvbnN0YW4uDQoNCi0gU2V0aWFwIGtlbmFpa2FuIHNhdHUgc2F0dWFuIGBQZXJzZW50YXNlIFBlbmR1ZHVrIE1pc2tpbiBNZW51cnV0IEthYnVwYXRlbi9Lb3RhIGRpIEphd2EgQmFyYXQgKCUpYCBtZW55ZWJhYmthbiBgVGluZ2thdCBQZW5nYW5nZ3VyYW4gVGVyYnVrYWAgbWVuaW5na2F0IHNlYmVzYXIgYDAuMTA5YCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KLSBTZXRpYXAga2VuYWlrYW4gc2F0dSBzYXR1YW4gYFVwYWggbWluaW11bSBLYWJ1cGF0ZW4vS290YSBkaSBKYXdhIEJhcmF0IChSdXBpYWgpYCBtZW55ZWJhYmthbiBgVGluZ2thdCBQZW5nYW5nZ3VyYW4gVGVyYnVrYWAgbWVuaW5na2F0IHNlYmVzYXIgYDEuMDgyeDEwXi02YCBwZXJzZW4gZGVuZ2FuIG1lbmdhbmdnYXAgcGV1YmFoIGxhaW4ga29uc3Rhbi4NCg0KVW50dWsgc2VtdWEgcC12YWx1ZSBkaSBiYXdhaCA1JSwgbWFrYSB0ZXJkYXBhdCBjdWt1cCBidWt0aSB1bnR1ayBtZW5vbGFrICRIXzAkIChrdXJhbmcgZGFyaSA1JSBrZW11bmdraW5hbiBiYWh3YSAkSF8wJCBiZW5hcikuDQoNCi0gICBNb2RlbCBtZW1pbGlraSBgcC12YWx1ZWAgcGFkYSB1amkgRiB5YW5nIGxlYmloIGtlY2lsIGRhcmkgMC4wNSAoMS43MzA0ZS0xMikgeWFuZyBiZXJhcnRpIG1vZGVsIGluaSBsYXlhayB1bnR1ayBkaWd1bmFrYW4NCi0gICBwLXZhbHVlIHVqaS1UIHVudHVrIHBldWJhaCBQUFAsIFRQQUssIFVwYWhfbWluaW11bSA8IDUlLiBBcnRpbnlhLCBkYXBhdCBkaWthdGFrYW4gYmFod2EgcGV1YmFoIHRlcnNlYnV0IGJlcnBlbmdhcnVoIHNpZ25pZmlrYW4gdGVyaGFkYXAgbW9kZWwuDQoNCiRSXjIkIG1lcnVwYWthbiBuaWxhaSB5YW5nIG1lbnVuanVrYW4ga2VrdWF0YW4gaHVidW5nYW4gYW50YXJhIHBldWJhaCBiZWJhcyBkYW4gcGV1YmFoIHJlc3BvbnMuIFNlbWFraW4gdGluZ2dpIG5pbGFpICRSXjIkLCBtYWthIHNlbWFraW4gYmFpayBtb2RlbCB0ZXJzZWJ1dC4NCg0KLSAgICRSXjIkIHBhZGEgbW9kZWwgc2ViZXNhciAgMC4yOTEyIGF0YXUgMjkuMTIlIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBldWJhaCB5YW5nIGRpZ3VuYWthbiB0aWRhayBiYWlrIGRhbGFtIG1lbmdnYW1iYXJrYW4gbW9kZWwuDQoNCi0gICBNb2RlbCBkYXBhdCBtZW5qZWxhc2thbiBzZWJlc2FyIDI2Ljg0OCUgZGFyaSBrZXJhZ2FtYW4gZGF0YSB5YW5nIGRpbGloYXQgZGFyaSAkUl4yIEFkaiQgeWFuZyBtZW5naW5kaWthc2lrYW4gYmFod2EgcGV1YmFoIHlhbmcgZGlndW5ha2FuIHRpZGFrIGJhaWsgZGFsYW0gbWVuZ2dhbWJhcmthbiBtb2RlbC4NCg0K