# Libraries
library(texreg)
source("functions/extract_ols_custom.R")
source("./functions/custom_texreg.R")
Table D.1: Individual Effects of Power-Sharing and Foreign Aid on Post-Conflict
Rule of Law (V-Dem Results)
# Libraries
library(texreg)
# source("functions/extract_ols_custom.R")
# source("./functions/custom_texreg.R")
library(rms)
# load Data
load("./data/diss_df.rda")
# Models
model_ps_v2x_jucon_cabcount <- rms::ols(v2x_jucon_t2 ~
cabinetCOUNT +
aiddata_AidGDP_ln +
ln_gdp_pc +
ln_pop +
conf_intens +
nonstate +
WBnatres +
fh
,
data = diss_df,
x = T, y = T)
model_ps_v2x_jucon_cabcount <- rms::robcov(model_ps_v2x_jucon_cabcount, diss_df$GWNo)
model_ps_v2x_jucon_seniorcount <- rms::ols(v2x_jucon_t2 ~
seniorCOUNT +
aiddata_AidGDP_ln +
ln_gdp_pc +
ln_pop +
conf_intens +
nonstate +
WBnatres +
fh
,
data = diss_df,
x = T, y = T)
model_ps_v2x_jucon_seniorcount <- rms::robcov(model_ps_v2x_jucon_seniorcount, diss_df$GWNo)
model_ps_v2x_jucon_nonseniorcount <- rms::ols(v2x_jucon_t2 ~
nonseniorCOUNT +
aiddata_AidGDP_ln +
ln_gdp_pc +
ln_pop +
conf_intens +
nonstate +
WBnatres +
fh
,
data = diss_df,
x = T, y = T)
model_ps_v2x_jucon_nonseniorcount <- rms::robcov(model_ps_v2x_jucon_nonseniorcount, diss_df$GWNo)
# Aid
model_dga_v2x_jucon_cabcount <- rms::ols(v2x_jucon_t2 ~
cabinetCOUNT +
log(dga_gdp_zero + 1) +
aiddata_AidGDP_ln +
ln_gdp_pc +
ln_pop +
conf_intens +
nonstate +
WBnatres +
fh
,
data = diss_df,
x = T, y = T)
model_dga_v2x_jucon_cabcount <- rms::robcov(model_dga_v2x_jucon_cabcount, diss_df$GWNo)
model_pga_v2x_jucon_cabcount <- rms::ols(v2x_jucon_t2 ~
cabinetCOUNT +
log(program_aid_gdp_zero + 1) +
aiddata_AidGDP_ln +
ln_gdp_pc +
ln_pop +
conf_intens +
nonstate +
WBnatres +
fh
,
data = diss_df,
x = T, y = T)
model_pga_v2x_jucon_cabcount <- rms::robcov(model_pga_v2x_jucon_cabcount, diss_df$GWNo)
model_bga_v2x_jucon_cabcount <- rms::ols(v2x_jucon_t2 ~
cabinetCOUNT +
log(commodity_aid_gdp_zero + 1) +
aiddata_AidGDP_ln +
ln_gdp_pc +
ln_pop +
conf_intens +
nonstate +
WBnatres +
fh
,
data = diss_df,
x = T, y = T)
model_bga_v2x_jucon_cabcount <- rms::robcov(model_bga_v2x_jucon_cabcount, diss_df$GWNo)
# Output
model_list <- list(model_ps_v2x_jucon_cabcount,
model_ps_v2x_jucon_seniorcount,
model_ps_v2x_jucon_nonseniorcount,
model_dga_v2x_jucon_cabcount,
model_pga_v2x_jucon_cabcount,
model_bga_v2x_jucon_cabcount)
coef_name_map <- list(cabinetCOUNT = "Power-Sharing (cabinet)",
seniorCOUNT = "Power-Sharing (senior)",
nonseniorCOUNT = "Power-Sharing (nonsenior)",
"cabinetCOUNT * aiddata_AidGDP_ln" = "PS (cabinet) * Aid",
"cabinetCOUNT:aiddata_AidGDP_ln" = "PS (cabinet) * Aid",
ps_share = "PS (cabinet share)",
"ps_share * aiddata_AidGDP_ln" = "PS (cabinet share) * Aid",
dga_gdp_zero = "DGA/GDP (log)",
program_aid_gdp_zero = "Program Aid/GDP (log)",
commodity_aid_gdp_zero = "Budget Aid/GDP (log)",
aiddata_AidGDP_ln = "Aid / GDP (log)",
ln_gdp_pc = "GDP p/c",
ln_pop = "Population",
conf_intens = "Conflict Intensity",
nonstate = "Non-State Violence",
WBnatres = "Nat. Res. Rents",
polity2 = "Polity",
fh = "Regime Type (FH)",
Ethnic = "Ethnic Frac.",
DS_ordinal = "UN PKO")
# custom functions to write tex output
source("./functions/custom_texreg.R")
environment(custom_texreg) <- asNamespace('texreg')
# # Output Manuscript
# custom_texreg(model_list,
# file = "../output/aid_ps_indeff_judind_vdem.tex",
# stars = c(0.001, 0.01, 0.05, 0.1),
# custom.coef.map = coef_name_map,
# symbol = "+",
# table = F,
# booktabs = T,
# use.packages = F,
# dcolumn = T,
# include.rsquared = F,
# include.cluster = T,
# star.symbol = "\\*",
# caption = "",
# include.lr = F,
# custom.multicol = T,
# custom.model.names = c(" \\multicolumn{3}{c}{ \\textbf{Power-Sharing}} & \\multicolumn{3}{c}{ \\textbf{Foreign Aid}} \\\\ \\cmidrule(r){2-4} \\cmidrule(l){5-7} & \\multicolumn{1}{c}{(1) }",
# "\\multicolumn{1}{c}{(2) }",
# "\\multicolumn{1}{c}{(3) }",
# "\\multicolumn{1}{c}{(4) }",
# "\\multicolumn{1}{c}{(5) }",
# "\\multicolumn{1}{c}{(6) }"))
# Output Replication Archive
htmlreg(model_list,
stars = c(0.001, 0.01, 0.05, 0.1),
custom.coef.map = coef_name_map,
symbol = "+",
table = F,
booktabs = T,
use.packages = F,
include.cluster = T,
dcolumn = T,
star.symbol = "\\*",
caption = "",
include.lr = F)
|
Model 1
|
Model 2
|
Model 3
|
Model 4
|
Model 5
|
Model 6
|
Power-Sharing (cabinet)
|
0.02*
|
|
|
0.02*
|
0.02*
|
0.02*
|
|
(0.01)
|
|
|
(0.01)
|
(0.01)
|
(0.01)
|
Power-Sharing (senior)
|
|
0.05*
|
|
|
|
|
|
|
(0.02)
|
|
|
|
|
Power-Sharing (nonsenior)
|
|
|
0.03*
|
|
|
|
|
|
|
(0.01)
|
|
|
|
DGA/GDP (log)
|
|
|
|
0.06
|
|
|
|
|
|
|
(0.04)
|
|
|
Program Aid/GDP (log)
|
|
|
|
|
-0.00
|
|
|
|
|
|
|
(0.04)
|
|
Budget Aid/GDP (log)
|
|
|
|
|
|
0.02
|
|
|
|
|
|
|
(0.02)
|
Aid / GDP (log)
|
-0.02**
|
-0.02**
|
-0.02**
|
-0.03***
|
-0.02+
|
-0.03**
|
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
GDP p/c
|
-0.05+
|
-0.05+
|
-0.05+
|
-0.04
|
-0.05
|
-0.05
|
|
(0.03)
|
(0.03)
|
(0.03)
|
(0.03)
|
(0.03)
|
(0.03)
|
Population
|
-0.00
|
-0.00
|
-0.00
|
-0.00
|
-0.00
|
-0.00
|
|
(0.02)
|
(0.02)
|
(0.02)
|
(0.01)
|
(0.02)
|
(0.02)
|
Conflict Intensity
|
-0.02
|
-0.02
|
-0.02
|
-0.04
|
-0.02
|
-0.03
|
|
(0.04)
|
(0.05)
|
(0.04)
|
(0.04)
|
(0.05)
|
(0.04)
|
Non-State Violence
|
-0.00
|
-0.00
|
-0.00
|
0.01
|
-0.00
|
0.00
|
|
(0.05)
|
(0.05)
|
(0.05)
|
(0.06)
|
(0.05)
|
(0.05)
|
Nat. Res. Rents
|
-0.00
|
-0.00
|
-0.00
|
-0.00
|
-0.00
|
-0.00
|
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
Regime Type (FH)
|
0.13***
|
0.13***
|
0.13***
|
0.13***
|
0.13***
|
0.13***
|
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
Num. obs.
|
273
|
273
|
273
|
273
|
273
|
273
|
R2
|
0.55
|
0.54
|
0.55
|
0.56
|
0.55
|
0.55
|
Adj. R2
|
0.53
|
0.53
|
0.53
|
0.54
|
0.53
|
0.53
|
***p < 0.001, **p < 0.01, *p < 0.05, +p < 0.1
|
Table D.2: Technical Robustness Checks: Outliers, Time, and Power-Sharing Codings
# Libraries
library(texreg)
source("./functions/extract_ols_custom.R")
source("./functions/extract_plm_custom.R")
library(tidyverse)
library(rms)
# load Data
load("./data/diss_df.rda")
# Outliers
# Load outlier function
source("./functions/outlier_analysis.R")
# Estimate baseline model
model_judind_cabcount <- rms::ols(LJI_t2 ~
cabinetCOUNT *
aiddata_AidGDP_ln +
log(GDP_per_capita) +
log(population) +
conf_intens +
nonstate +
WBnatres +
fh ,
data=diss_df, x=T, y=T)
model_judind_cabcount <- rms::robcov(model_judind_cabcount, diss_df$GWNo)
# selector variables
selectvars = c("Location", "year", "identifiers")
diss_df$identifiers <- paste(diss_df$GWNo, diss_df$year, sep = "-")
# Estimate outliers
judind_outliers <- check_outlier(model_judind_cabcount,
data = diss_df,
selectvars = selectvars,
clustervar = "GWNo")
# Time
model_judind_time <- rms::ols(LJI_t2 ~
cabinetCOUNT *
aiddata_AidGDP_ln +
log(GDP_per_capita) +
log(population) +
conf_intens +
nonstate +
WBnatres +
fh +
pcy + pcy2 + pcy3,
data=diss_df, x=T, y=T)
model_judind_time <- rms::robcov(model_judind_time, diss_df$GWNo)
# year FE
diss_df$yearFE <- as.factor(diss_df$year)
model_judind_yearfe <- rms::ols(LJI_t2 ~
cabinetCOUNT *
aiddata_AidGDP_ln +
log(GDP_per_capita) +
log(population) +
conf_intens +
nonstate +
WBnatres +
fh +
yearFE,
data=diss_df, x=T, y=T)
model_judind_yearfe <- rms::robcov(model_judind_yearfe, diss_df$GWNo)
# different cabinet aggregation types
model_judind_cabmax <- rms::ols(LJI_t2 ~
cabinetCOUNT_max *
aiddata_AidGDP_ln +
log(GDP_per_capita) +
log(population) +
conf_intens +
nonstate +
WBnatres +
fh ,
data=diss_df, x=T, y=T)
model_judind_cabmax <- rms::robcov(model_judind_cabmax, diss_df$GWNo)
model_judind_cabmin <- rms::ols(LJI_t2 ~
cabinetCOUNT_min *
aiddata_AidGDP_ln +
log(GDP_per_capita) +
log(population) +
conf_intens +
nonstate +
WBnatres +
fh ,
data=diss_df, x=T, y=T)
model_judind_cabmin <- rms::robcov(model_judind_cabmin, diss_df$GWNo)
model_judind_cabsix <- rms::ols(LJI_t2 ~
cabinetCOUNT_six *
aiddata_AidGDP_ln +
log(GDP_per_capita) +
log(population) +
conf_intens +
nonstate +
WBnatres +
fh ,
data=diss_df, x=T, y=T)
model_judind_cabsix <- rms::robcov(model_judind_cabsix, diss_df$GWNo)
model_list <- list(judind_outliers[[2]],
judind_outliers[[4]],
judind_outliers[[6]],
model_judind_time,
model_judind_yearfe,
model_judind_cabmax,
model_judind_cabmin,
model_judind_cabsix)
coef_map <- list(cabinetCOUNT = "Power-Sharing (cabinet)",
cabinetCOUNT_max = "Power-Sharing (cabinet)",
cabinetCOUNT_min = "Power-Sharing (cabinet)",
cabinetCOUNT_six = "Power-Sharing (cabinet)",
"cabinetCOUNT * aiddata_AidGDP_ln" = "Power-Sharing (cabinet) * Aid",
"cabinetCOUNT_max * aiddata_AidGDP_ln" = "Power-Sharing (cabinet) * Aid",
"cabinetCOUNT_min * aiddata_AidGDP_ln" = "Power-Sharing (cabinet) * Aid",
"cabinetCOUNT_six * aiddata_AidGDP_ln" = "Power-Sharing (cabinet) * Aid",
aiddata_AidGDP_ln = "Aid / GDP (log)",
GDP_per_capita = "GDP p/c",
population = "Population",
conf_intens = "Conflict Intensity",
nonstate = "Non-State Violence",
WBnatres = "Nat. Res. Rents",
polity2 = "Polity",
fh = "Regime Type",
pcy = "Time",
pcy2 = "Time$^2$",
pcy3 = "Time$^3$")
#
texreg::texreg(model_list,
stars = c(0.001, 0.01, 0.05, 0.1),
custom.coef.map = coef_map,
file = "../output/aidps_judind_tech_rob.tex",
symbol = "+",
table = F,
booktabs = T,
use.packages = F,
dcolumn = T,
include.lr = F,
custom.model.names = c("(1) Hat Values",
"(2) Cook's Distance",
"(3) DFBETA",
"(4) Cubic Time Trend",
"(5) Year FE",
"(6) PS: Max",
"(7) PS: Min",
"(8) PS: Six Months"),
include.adjrs = T,
caption = "",
star.symbol = "\\*",
include.rsquared = F,
include.cluster = T,
include.variance = F)
# Output Replication Archive
htmlreg(model_list,
stars = c(0.001, 0.01, 0.05, 0.1),
custom.coef.map = coef_map,
symbol = "+",
table = F,
booktabs = T,
use.packages = F,
dcolumn = T,
custom.model.names = c("(1) Hat Values",
"(2) Cook's Distance",
"(3) DFBETA",
"(2) Cubic Time Trend",
"(3) Year FE",
"(4) PS: Max",
"(5) PS: Min",
"(6) PS: Six Months"),
include.lr = F,
include.adjrs = T,
caption = "",
star.symbol = "\\*",
include.rsquared = F,
include.cluster = T,
include.variance = F)
|
(1) Hat Values
|
(2) Cook’s Distance
|
(3) DFBETA
|
(2) Cubic Time Trend
|
(3) Year FE
|
(4) PS: Max
|
(5) PS: Min
|
(6) PS: Six Months
|
Power-Sharing (cabinet)
|
0.08***
|
0.02***
|
0.04***
|
0.02**
|
0.03***
|
0.02**
|
0.02**
|
0.02**
|
|
(0.02)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
Power-Sharing (cabinet) * Aid
|
-0.04***
|
-0.01***
|
-0.01***
|
-0.01**
|
-0.01**
|
-0.01**
|
-0.01**
|
-0.01**
|
|
(0.01)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
Aid / GDP (log)
|
-0.02+
|
-0.01+
|
-0.01*
|
-0.02*
|
-0.02+
|
-0.02*
|
-0.02*
|
-0.02*
|
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
GDP p/c
|
-0.02
|
-0.00
|
-0.01
|
-0.02
|
-0.02
|
-0.02
|
-0.02
|
-0.02
|
|
(0.03)
|
(0.02)
|
(0.01)
|
(0.02)
|
(0.02)
|
(0.02)
|
(0.02)
|
(0.02)
|
Population
|
-0.02
|
-0.01
|
-0.01*
|
-0.02+
|
-0.02+
|
-0.02+
|
-0.02+
|
-0.02+
|
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
Conflict Intensity
|
0.02
|
0.04
|
0.03
|
0.02
|
0.02
|
0.02
|
0.02
|
0.02
|
|
(0.04)
|
(0.03)
|
(0.02)
|
(0.04)
|
(0.03)
|
(0.04)
|
(0.04)
|
(0.04)
|
Non-State Violence
|
-0.01
|
-0.01
|
0.00
|
0.01
|
0.02
|
0.01
|
0.01
|
0.01
|
|
(0.04)
|
(0.02)
|
(0.03)
|
(0.04)
|
(0.03)
|
(0.04)
|
(0.04)
|
(0.04)
|
Nat. Res. Rents
|
-0.00*
|
-0.00*
|
-0.00***
|
-0.00*
|
-0.00**
|
-0.00*
|
-0.00*
|
-0.00**
|
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
(0.00)
|
Regime Type
|
0.10***
|
0.10***
|
0.10***
|
0.10***
|
0.10***
|
0.10***
|
0.10***
|
0.10***
|
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
(0.01)
|
Time
|
|
|
|
-0.11*
|
|
|
|
|
|
|
|
|
(0.04)
|
|
|
|
|
Time\(^2\)
|
|
|
|
0.04*
|
|
|
|
|
|
|
|
|
(0.02)
|
|
|
|
|
Time\(^3\)
|
|
|
|
-0.00*
|
|
|
|
|
|
|
|
|
(0.00)
|
|
|
|
|
Num. obs.
|
250
|
257
|
204
|
272
|
272
|
272
|
272
|
272
|
Countries
|
45
|
45
|
42
|
46
|
46
|
46
|
46
|
46
|
Adj. R2
|
0.54
|
0.70
|
0.76
|
0.58
|
0.59
|
0.59
|
0.58
|
0.58
|
***p < 0.001, **p < 0.01, *p < 0.05, +p < 0.1
|
Table D.3: Power-Sharing, Foreign Aid and Post-Conflict Rule of Law: Reduced
Form Results
# Libraries
library(texreg)
source("./functions/extract_ols_custom.R")
source("./functions/extract_plm_custom.R")
library(tidyverse)
library(rms)
# load instrument
load(file = "./data/instrumentedAid2.RData")
load("./data/diss_df.rda")
diss_df <- merge(diss_df, instrument_df, by = c("year", "iso2c"), all.x = TRUE)
diss_df$total_sum_except <- as.numeric(diss_df$total_sum_except)
# subset only complete.cases / necessary for cluster.robust.se()
iv_na <- na.omit(diss_df[, c(
"cabinetCOUNT",
"cabinetINC",
"aiddata_Aid",
"aiddata_AidGDP_ln",
"aiddata_AidPC_ln",
"fh",
"GDP_per_capita",
"population",
"conf_intens",
"WBnatres",
"total_sum_except",
"year",
"GWNo",
"GDP",
"nonstate", "LJI_t2", "v2x_jucon_t2")])
##### IV #####
iv_na$aid_instrumented_gdp_ln <- log(iv_na$total_sum_except / iv_na$GDP)
diss_df$aid_instrumented_gdp_ln <- log(diss_df$total_sum_except / diss_df$GDP)
# to proceed with IV estimation I first hard-code the instrument
iv_na$instr_aid_gdp_ln <- log(iv_na$total_sum_except / iv_na$GDP)
# data transformation for Stata
iv_na$ln_gdp_pc <- log(iv_na$GDP_per_capita)
iv_na$ln_pop <- log(iv_na$population)
# stuff for stata
# diss_df$region_num <- as.numeric(as.factor(diss_df$region))
# diss_df$country_year_num <- as.numeric(as.factor(diss_df$country_year))
foreign::write.dta(iv_na, "./data/diss_df_IV.dta")
# hard code interaction variable
iv_na$cabincXaid <- iv_na$aiddata_AidGDP_ln * iv_na$cabinetINC
iv_na$cabincXaid_instr <- iv_na$aid_instrumented_gdp_ln * iv_na$cabinetINC
# Estimate Models
reduced_form_LJI <- ols(LJI_t2 ~
cabinetINC * aid_instrumented_gdp_ln +
log(GDP_per_capita) +
log(population) +
nonstate +
conf_intens +
WBnatres +
fh,
data = iv_na, x = T, y = T)
reduced_form_LJI <- robcov(reduced_form_LJI, iv_na$GWNo)
reduced_form_vdem <- ols(v2x_jucon_t2 ~
cabinetINC * aid_instrumented_gdp_ln +
log(GDP_per_capita) +
log(population) +
nonstate +
conf_intens +
WBnatres +
fh,
data = iv_na, x = T, y = T)
reduced_form_vdem <- robcov(reduced_form_vdem, iv_na$GWNo)
# Output
coef_name_map <- list(
cabinetINC = "Power-Sharing (binary)",
"cabinetINC * aid_instrumented_gdp_ln" = "Power-Sharing (binary) * Aid",
cabinetCOUNT = "Power-Sharing (cabinet)",
"cabinetCOUNT * aiddata_AidGDP_ln" = "Power-Sharing (cabinet) * Aid",
"cabinetCOUNT:aiddata_AidGDP_ln" = "PS (cabinet) * Aid",
aid_instrumented_gdp_ln = "Aid / GDP (log) instrumented",
"GDP_per_capita" = "GDP p/c (log)",
"population" = "Population (log)",
conf_intens = "Conflict Intensity",
nonstate = "Non-State Violence",
WBnatres = "Nat. Res. Rents",
polity2 = "Polity",
fh = "Regime Type (FH)",
Ethnic = "Ethnic Frac.",
DS_ordinal = "UN PKO")
#
# texreg(l = list(reduced_form_LJI,
# reduced_form_vdem),
# stars = c(0.001, 0.01, 0.05, 0.1),
# symbol = "+",
# file = "../output/iv_judind_reducedform.tex",
# table = F,
# booktabs = T,
# use.packages = F,
# dcolumn = T,
# custom.coef.map = coef_name_map,
# custom.model.names = c("(1) LJI",
# "(2) V-Dem"),
#
# star.symbol = "\\*",
# include.lr = F,
# include.cluster = T,
# include.rsquared = F,
# include.variance = F)
htmlreg(l = list(reduced_form_LJI,
reduced_form_vdem),
stars = c(0.001, 0.01, 0.05, 0.1),
symbol = "+",
table = F,
booktabs = T,
use.packages = F,
dcolumn = T,
custom.coef.map = coef_name_map,
custom.model.names = c("(1) LJI",
"(2) V-Dem"),
star.symbol = "\\*",
include.lr = F,
include.cluster = T,
include.rsquared = F,
include.variance = F)
Statistical models
|
(1) LJI
|
(2) V-Dem
|
Power-Sharing (binary)
|
1.18**
|
1.47+
|
|
(0.44)
|
(0.83)
|
Power-Sharing (binary) * Aid
|
-0.06**
|
-0.07+
|
|
(0.02)
|
(0.04)
|
Aid / GDP (log) instrumented
|
-0.00
|
0.01
|
|
(0.01)
|
(0.02)
|
GDP p/c (log)
|
0.00
|
-0.02
|
|
(0.02)
|
(0.03)
|
Population (log)
|
-0.02+
|
0.01
|
|
(0.01)
|
(0.02)
|
Conflict Intensity
|
0.00
|
-0.03
|
|
(0.04)
|
(0.05)
|
Non-State Violence
|
0.01
|
0.00
|
|
(0.04)
|
(0.05)
|
Nat. Res. Rents
|
-0.00*
|
-0.00
|
|
(0.00)
|
(0.00)
|
Regime Type (FH)
|
0.10***
|
0.13***
|
|
(0.01)
|
(0.01)
|
Num. obs.
|
270
|
270
|
Countries
|
46
|
46
|
Adj. R2
|
0.58
|
0.53
|
***p < 0.001, **p < 0.01, *p < 0.05, +p < 0.1
|
LS0tDQp0aXRsZTogIkNoYXB0ZXIgNzogUnVsZSBvZiBMYXciDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogDQogICAgICBjb2xsYXBzZWQ6IGZhbHNlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogImhpZGUiDQoNCi0tLQ0KDQoNCmBgYHtyLCBldmFsPUYsIG1lc3NhZ2U9Riwgd2FybmluZz1GLCBjYWNoZSA9IEYsIGNvbW1lbnRzID0gRn0NCiMgTGlicmFyaWVzDQpsaWJyYXJ5KHRleHJlZykNCnNvdXJjZSgiZnVuY3Rpb25zL2V4dHJhY3Rfb2xzX2N1c3RvbS5SIikNCnNvdXJjZSgiLi9mdW5jdGlvbnMvY3VzdG9tX3RleHJlZy5SIikNCg0KYGBgDQoNCiMgVGFibGUgRC4xOiAgSW5kaXZpZHVhbCBFZmZlY3RzIG9mIFBvd2VyLVNoYXJpbmcgYW5kIEZvcmVpZ24gQWlkIG9uIFBvc3QtQ29uZmxpY3QNClJ1bGUgb2YgTGF3IChWLURlbSBSZXN1bHRzKQ0KDQpgYGB7ciwgcmVzdWx0cz0iYXNpcyIsIG1lc3NhZ2U9Riwgd2FybmluZz1GLCBjYWNoZSA9IEYsIGNvbW1lbnRzID0gRn0NCiMgTGlicmFyaWVzDQpsaWJyYXJ5KHRleHJlZykNCiMgc291cmNlKCJmdW5jdGlvbnMvZXh0cmFjdF9vbHNfY3VzdG9tLlIiKQ0KIyBzb3VyY2UoIi4vZnVuY3Rpb25zL2N1c3RvbV90ZXhyZWcuUiIpDQpsaWJyYXJ5KHJtcykNCiMgbG9hZCBEYXRhDQpsb2FkKCIuL2RhdGEvZGlzc19kZi5yZGEiKQ0KDQoNCiMgTW9kZWxzIA0KbW9kZWxfcHNfdjJ4X2p1Y29uX2NhYmNvdW50IDwtIHJtczo6b2xzKHYyeF9qdWNvbl90MiB+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FiaW5ldENPVU5UICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWRkYXRhX0FpZEdEUF9sbiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5fZ2RwX3BjICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbl9wb3AgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25zdGF0ZSArIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdCbmF0cmVzICsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGlzc19kZiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBULCB5ID0gVCkNCm1vZGVsX3BzX3YyeF9qdWNvbl9jYWJjb3VudCA8LSBybXM6OnJvYmNvdihtb2RlbF9wc192MnhfanVjb25fY2FiY291bnQsIGRpc3NfZGYkR1dObykNCg0KbW9kZWxfcHNfdjJ4X2p1Y29uX3NlbmlvcmNvdW50IDwtIHJtczo6b2xzKHYyeF9qdWNvbl90MiB+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuaW9yQ09VTlQgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZGRhdGFfQWlkR0RQX2xuICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbl9nZHBfcGMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxuX3BvcCArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZl9pbnRlbnMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbnN0YXRlICsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0JuYXRyZXMgKyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkaXNzX2RmLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFQsIHkgPSBUKQ0KbW9kZWxfcHNfdjJ4X2p1Y29uX3NlbmlvcmNvdW50IDwtIHJtczo6cm9iY292KG1vZGVsX3BzX3YyeF9qdWNvbl9zZW5pb3Jjb3VudCwgZGlzc19kZiRHV05vKQ0KDQptb2RlbF9wc192MnhfanVjb25fbm9uc2VuaW9yY291bnQgPC0gcm1zOjpvbHModjJ4X2p1Y29uX3QyIH4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25zZW5pb3JDT1VOVCArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkZGF0YV9BaWRHRFBfbG4gKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxuX2dkcF9wYyArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5fcG9wICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mX2ludGVucyArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uc3RhdGUgKyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQm5hdHJlcyArIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRpc3NfZGYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gVCwgeSA9IFQpDQptb2RlbF9wc192MnhfanVjb25fbm9uc2VuaW9yY291bnQgPC0gcm1zOjpyb2Jjb3YobW9kZWxfcHNfdjJ4X2p1Y29uX25vbnNlbmlvcmNvdW50LCBkaXNzX2RmJEdXTm8pDQoNCiMgQWlkDQptb2RlbF9kZ2FfdjJ4X2p1Y29uX2NhYmNvdW50IDwtIHJtczo6b2xzKHYyeF9qdWNvbl90MiB+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmluZXRDT1VOVCArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhkZ2FfZ2RwX3plcm8gICsgMSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWRkYXRhX0FpZEdEUF9sbiArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxuX2dkcF9wYyArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxuX3BvcCArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uc3RhdGUgKyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0JuYXRyZXMgKyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkaXNzX2RmLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBULCB5ID0gVCkNCm1vZGVsX2RnYV92MnhfanVjb25fY2FiY291bnQgPC0gcm1zOjpyb2Jjb3YobW9kZWxfZGdhX3YyeF9qdWNvbl9jYWJjb3VudCwgZGlzc19kZiRHV05vKQ0KDQoNCm1vZGVsX3BnYV92MnhfanVjb25fY2FiY291bnQgPC0gcm1zOjpvbHModjJ4X2p1Y29uX3QyIH4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FiaW5ldENPVU5UICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKHByb2dyYW1fYWlkX2dkcF96ZXJvICArIDEpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkZGF0YV9BaWRHRFBfbG4gKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbl9nZHBfcGMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbl9wb3AgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mX2ludGVucyArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbnN0YXRlICsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdCbmF0cmVzICsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGlzc19kZiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gVCwgeSA9IFQpDQptb2RlbF9wZ2FfdjJ4X2p1Y29uX2NhYmNvdW50IDwtIHJtczo6cm9iY292KG1vZGVsX3BnYV92MnhfanVjb25fY2FiY291bnQsIGRpc3NfZGYkR1dObykNCg0KbW9kZWxfYmdhX3YyeF9qdWNvbl9jYWJjb3VudCA8LSBybXM6Om9scyh2MnhfanVjb25fdDIgfg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWJpbmV0Q09VTlQgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coY29tbW9kaXR5X2FpZF9nZHBfemVybyAgKyAxKSArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZGRhdGFfQWlkR0RQX2xuICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5fZ2RwX3BjICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5fcG9wICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZl9pbnRlbnMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25zdGF0ZSArIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQm5hdHJlcyArIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRpc3NfZGYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFQsIHkgPSBUKQ0KbW9kZWxfYmdhX3YyeF9qdWNvbl9jYWJjb3VudCA8LSBybXM6OnJvYmNvdihtb2RlbF9iZ2FfdjJ4X2p1Y29uX2NhYmNvdW50LCBkaXNzX2RmJEdXTm8pDQoNCiMgT3V0cHV0DQptb2RlbF9saXN0IDwtIGxpc3QobW9kZWxfcHNfdjJ4X2p1Y29uX2NhYmNvdW50LCANCiAgICAgICAgICAgICAgICAgICBtb2RlbF9wc192MnhfanVjb25fc2VuaW9yY291bnQsIA0KICAgICAgICAgICAgICAgICAgIG1vZGVsX3BzX3YyeF9qdWNvbl9ub25zZW5pb3Jjb3VudCwgDQogICAgICAgICAgICAgICAgICAgbW9kZWxfZGdhX3YyeF9qdWNvbl9jYWJjb3VudCwgDQogICAgICAgICAgICAgICAgICAgbW9kZWxfcGdhX3YyeF9qdWNvbl9jYWJjb3VudCwgDQogICAgICAgICAgICAgICAgICAgbW9kZWxfYmdhX3YyeF9qdWNvbl9jYWJjb3VudCkNCg0KY29lZl9uYW1lX21hcCA8LSBsaXN0KGNhYmluZXRDT1VOVCA9ICJQb3dlci1TaGFyaW5nIChjYWJpbmV0KSIsDQogICAgICAgICAgICAgICAgICAgICAgc2VuaW9yQ09VTlQgPSAiUG93ZXItU2hhcmluZyAoc2VuaW9yKSIsDQogICAgICAgICAgICAgICAgICAgICAgbm9uc2VuaW9yQ09VTlQgPSAiUG93ZXItU2hhcmluZyAobm9uc2VuaW9yKSIsDQogICAgICAgICAgICAgICAgICAgICAgImNhYmluZXRDT1VOVCAqIGFpZGRhdGFfQWlkR0RQX2xuIiA9ICJQUyAoY2FiaW5ldCkgKiBBaWQiLCANCiAgICAgICAgICAgICAgICAgICAgICAiY2FiaW5ldENPVU5UOmFpZGRhdGFfQWlkR0RQX2xuIiA9ICJQUyAoY2FiaW5ldCkgKiBBaWQiLA0KICAgICAgICAgICAgICAgICAgICAgIHBzX3NoYXJlID0gIlBTIChjYWJpbmV0IHNoYXJlKSIsDQogICAgICAgICAgICAgICAgICAgICAgInBzX3NoYXJlICogYWlkZGF0YV9BaWRHRFBfbG4iID0gIlBTIChjYWJpbmV0IHNoYXJlKSAqIEFpZCIsDQogICAgICAgICAgICAgICAgICAgICAgZGdhX2dkcF96ZXJvID0gIkRHQS9HRFAgKGxvZykiLCANCiAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtX2FpZF9nZHBfemVybyA9ICJQcm9ncmFtIEFpZC9HRFAgKGxvZykiLCANCiAgICAgICAgICAgICAgICAgICAgICBjb21tb2RpdHlfYWlkX2dkcF96ZXJvID0gIkJ1ZGdldCBBaWQvR0RQIChsb2cpIiwgDQogICAgICAgICAgICAgICAgICAgICAgYWlkZGF0YV9BaWRHRFBfbG4gPSAiQWlkIC8gR0RQIChsb2cpIiwNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICBsbl9nZHBfcGMgPSAiR0RQIHAvYyIsDQogICAgICAgICAgICAgICAgICAgICAgbG5fcG9wID0gIlBvcHVsYXRpb24iLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zID0gIkNvbmZsaWN0IEludGVuc2l0eSIsDQogICAgICAgICAgICAgICAgICAgICAgbm9uc3RhdGUgPSAiTm9uLVN0YXRlIFZpb2xlbmNlIiwNCiAgICAgICAgICAgICAgICAgICAgICBXQm5hdHJlcyA9ICJOYXQuIFJlcy4gUmVudHMiLA0KICAgICAgICAgICAgICAgICAgICAgIHBvbGl0eTIgPSAiUG9saXR5IiwNCiAgICAgICAgICAgICAgICAgICAgICBmaCA9ICJSZWdpbWUgVHlwZSAoRkgpIiwNCiAgICAgICAgICAgICAgICAgICAgICBFdGhuaWMgPSAiRXRobmljIEZyYWMuIiwNCiAgICAgICAgICAgICAgICAgICAgICBEU19vcmRpbmFsID0gIlVOIFBLTyIpDQoNCg0KIyBjdXN0b20gZnVuY3Rpb25zIHRvIHdyaXRlIHRleCBvdXRwdXQNCnNvdXJjZSgiLi9mdW5jdGlvbnMvY3VzdG9tX3RleHJlZy5SIikNCmVudmlyb25tZW50KGN1c3RvbV90ZXhyZWcpIDwtIGFzTmFtZXNwYWNlKCd0ZXhyZWcnKQ0KDQoNCiMgIyBPdXRwdXQgTWFudXNjcmlwdA0KIyBjdXN0b21fdGV4cmVnKG1vZGVsX2xpc3QsIA0KIyAgICAgICAgICAgICAgIGZpbGUgPSAiLi4vb3V0cHV0L2FpZF9wc19pbmRlZmZfanVkaW5kX3ZkZW0udGV4IiwNCiMgICAgICAgICAgICAgICBzdGFycyA9IGMoMC4wMDEsIDAuMDEsIDAuMDUsIDAuMSksIA0KIyAgICAgICAgICAgICAgIGN1c3RvbS5jb2VmLm1hcCAgPSBjb2VmX25hbWVfbWFwLA0KIyAgICAgICAgICAgICAgIHN5bWJvbCA9ICIrIiwNCiMgICAgICAgICAgICAgICB0YWJsZSA9IEYsDQojICAgICAgICAgICAgICAgYm9va3RhYnMgPSBULA0KIyAgICAgICAgICAgICAgIHVzZS5wYWNrYWdlcyA9IEYsDQojICAgICAgICAgICAgICAgZGNvbHVtbiA9IFQsDQojICAgICAgICAgICAgICAgaW5jbHVkZS5yc3F1YXJlZCA9IEYsDQojICAgICAgICAgICAgICAgaW5jbHVkZS5jbHVzdGVyID0gVCwgDQojICAgICAgICAgICAgICAgc3Rhci5zeW1ib2wgPSAiXFwqIiwgDQojICAgICAgICAgICAgICAgY2FwdGlvbiA9ICIiLA0KIyAgICAgICAgICAgICAgIGluY2x1ZGUubHIgPSBGLA0KIyAgICAgICAgICAgICAgIGN1c3RvbS5tdWx0aWNvbCA9IFQsIA0KIyAgICAgICAgICAgICAgIGN1c3RvbS5tb2RlbC5uYW1lcyA9IGMoIiBcXG11bHRpY29sdW1uezN9e2N9eyBcXHRleHRiZntQb3dlci1TaGFyaW5nfX0gJiBcXG11bHRpY29sdW1uezN9e2N9eyBcXHRleHRiZntGb3JlaWduIEFpZH19IFxcXFwgXFxjbWlkcnVsZShyKXsyLTR9IFxcY21pZHJ1bGUobCl7NS03fSAmIFxcbXVsdGljb2x1bW57MX17Y317KDEpICB9IiwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXG11bHRpY29sdW1uezF9e2N9eygyKSAgfSIsDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFxtdWx0aWNvbHVtbnsxfXtjfXsoMykgIH0iLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcbXVsdGljb2x1bW57MX17Y317KDQpICB9IiwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXG11bHRpY29sdW1uezF9e2N9eyg1KSAgIH0iLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcbXVsdGljb2x1bW57MX17Y317KDYpICAgfSIpKQ0KDQojIE91dHB1dCBSZXBsaWNhdGlvbiBBcmNoaXZlDQpodG1scmVnKG1vZGVsX2xpc3QsIA0KICAgICAgICBzdGFycyA9IGMoMC4wMDEsIDAuMDEsIDAuMDUsIDAuMSksIA0KICAgICAgICBjdXN0b20uY29lZi5tYXAgID0gY29lZl9uYW1lX21hcCwNCiAgICAgICAgc3ltYm9sID0gIisiLA0KICAgICAgICB0YWJsZSA9IEYsDQogICAgICAgIGJvb2t0YWJzID0gVCwNCiAgICAgICAgdXNlLnBhY2thZ2VzID0gRiwNCiAgICAgICAgaW5jbHVkZS5jbHVzdGVyID0gVCwgDQogICAgICAgIGRjb2x1bW4gPSBULA0KICAgICAgICBzdGFyLnN5bWJvbCA9ICJcXCoiLCANCiAgICAgICAgY2FwdGlvbiA9ICIiLA0KICAgICAgICBpbmNsdWRlLmxyID0gRikNCg0KYGBgDQoNCg0KDQojIFRhYmxlIEQuMjogVGVjaG5pY2FsIFJvYnVzdG5lc3MgQ2hlY2tzOiBPdXRsaWVycywgVGltZSwgYW5kIFBvd2VyLVNoYXJpbmcgQ29kaW5ncw0KDQpgYGB7ciwgcmVzdWx0cz0iYXNpcyIsIG1lc3NhZ2U9Riwgd2FybmluZz1GLCBjYWNoZSA9IFQsIGNvbW1lbnRzID0gRn0NCiMgTGlicmFyaWVzDQpsaWJyYXJ5KHRleHJlZykNCnNvdXJjZSgiLi9mdW5jdGlvbnMvZXh0cmFjdF9vbHNfY3VzdG9tLlIiKQ0Kc291cmNlKCIuL2Z1bmN0aW9ucy9leHRyYWN0X3BsbV9jdXN0b20uUiIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocm1zKQ0KDQojIGxvYWQgRGF0YQ0KbG9hZCgiLi9kYXRhL2Rpc3NfZGYucmRhIikNCg0KIyBPdXRsaWVycw0KIyBMb2FkIG91dGxpZXIgZnVuY3Rpb24NCnNvdXJjZSgiLi9mdW5jdGlvbnMvb3V0bGllcl9hbmFseXNpcy5SIikNCg0KIyBFc3RpbWF0ZSBiYXNlbGluZSBtb2RlbA0KbW9kZWxfanVkaW5kX2NhYmNvdW50IDwtIHJtczo6b2xzKExKSV90MiB+ICANCiAgICAgICAgICAgICAgICAgICAgICAgIGNhYmluZXRDT1VOVCAqIA0KICAgICAgICAgICAgICAgICAgICAgICAgYWlkZGF0YV9BaWRHRFBfbG4gKw0KICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEdEUF9wZXJfY2FwaXRhKSArDQogICAgICAgICAgICAgICAgICAgICAgICBsb2cocG9wdWxhdGlvbikgKw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZl9pbnRlbnMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgbm9uc3RhdGUgKyANCiAgICAgICAgICAgICAgICAgICAgICAgIFdCbmF0cmVzICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZoICwNCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRpc3NfZGYsIHg9VCwgeT1UKQ0KbW9kZWxfanVkaW5kX2NhYmNvdW50IDwtIHJtczo6cm9iY292KG1vZGVsX2p1ZGluZF9jYWJjb3VudCwgZGlzc19kZiRHV05vKQ0KDQojIHNlbGVjdG9yIHZhcmlhYmxlcw0Kc2VsZWN0dmFycyA9IGMoIkxvY2F0aW9uIiwgInllYXIiLCAiaWRlbnRpZmllcnMiKQ0KZGlzc19kZiRpZGVudGlmaWVycyA8LSBwYXN0ZShkaXNzX2RmJEdXTm8sIGRpc3NfZGYkeWVhciwgc2VwID0gIi0iKQ0KDQojIEVzdGltYXRlIG91dGxpZXJzDQpqdWRpbmRfb3V0bGllcnMgPC0gY2hlY2tfb3V0bGllcihtb2RlbF9qdWRpbmRfY2FiY291bnQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGlzc19kZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0dmFycyA9IHNlbGVjdHZhcnMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVydmFyID0gIkdXTm8iKQ0KDQoNCg0KDQojIFRpbWUgDQptb2RlbF9qdWRpbmRfdGltZSA8LSBybXM6Om9scyhMSklfdDIgfiAgDQogICAgICAgICAgICAgICAgICAgICAgICBjYWJpbmV0Q09VTlQgKiANCiAgICAgICAgICAgICAgICAgICAgICAgIGFpZGRhdGFfQWlkR0RQX2xuICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhHRFBfcGVyX2NhcGl0YSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgbG9nKHBvcHVsYXRpb24pICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zICsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5vbnN0YXRlICsgDQogICAgICAgICAgICAgICAgICAgICAgICBXQm5hdHJlcyArDQogICAgICAgICAgICAgICAgICAgICAgICBmaCArDQogICAgICAgICAgICAgICAgICAgICAgICAgIHBjeSArIHBjeTIgKyBwY3kzLA0KICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGlzc19kZiwgeD1ULCB5PVQpDQptb2RlbF9qdWRpbmRfdGltZSA8LSBybXM6OnJvYmNvdihtb2RlbF9qdWRpbmRfdGltZSwgZGlzc19kZiRHV05vKQ0KDQojIHllYXIgRkUNCmRpc3NfZGYkeWVhckZFIDwtIGFzLmZhY3RvcihkaXNzX2RmJHllYXIpDQptb2RlbF9qdWRpbmRfeWVhcmZlIDwtIHJtczo6b2xzKExKSV90MiB+ICANCiAgICAgICAgICAgICAgICAgICAgICAgIGNhYmluZXRDT1VOVCAqIA0KICAgICAgICAgICAgICAgICAgICAgICAgYWlkZGF0YV9BaWRHRFBfbG4gKw0KICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEdEUF9wZXJfY2FwaXRhKSArDQogICAgICAgICAgICAgICAgICAgICAgICBsb2cocG9wdWxhdGlvbikgKw0KICAgICAgICAgICAgICAgICAgICAgICAgY29uZl9pbnRlbnMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgbm9uc3RhdGUgKyANCiAgICAgICAgICAgICAgICAgICAgICAgIFdCbmF0cmVzICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZoICsNCiAgICAgICAgICAgICAgICAgICAgICAgIHllYXJGRSwNCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRpc3NfZGYsIHg9VCwgeT1UKQ0KbW9kZWxfanVkaW5kX3llYXJmZSA8LSBybXM6OnJvYmNvdihtb2RlbF9qdWRpbmRfeWVhcmZlLCBkaXNzX2RmJEdXTm8pDQoNCg0KIyBkaWZmZXJlbnQgY2FiaW5ldCBhZ2dyZWdhdGlvbiB0eXBlcw0KbW9kZWxfanVkaW5kX2NhYm1heCA8LSBybXM6Om9scyhMSklfdDIgfiAgDQogICAgICAgICAgICAgICAgICAgICAgICBjYWJpbmV0Q09VTlRfbWF4ICogDQogICAgICAgICAgICAgICAgICAgICAgICBhaWRkYXRhX0FpZEdEUF9sbiArDQogICAgICAgICAgICAgICAgICAgICAgICBsb2coR0RQX3Blcl9jYXBpdGEpICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhwb3B1bGF0aW9uKSArDQogICAgICAgICAgICAgICAgICAgICAgICBjb25mX2ludGVucyArDQogICAgICAgICAgICAgICAgICAgICAgICBub25zdGF0ZSArIA0KICAgICAgICAgICAgICAgICAgICAgICAgV0JuYXRyZXMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgZmggLA0KICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGlzc19kZiwgeD1ULCB5PVQpDQptb2RlbF9qdWRpbmRfY2FibWF4IDwtIHJtczo6cm9iY292KG1vZGVsX2p1ZGluZF9jYWJtYXgsIGRpc3NfZGYkR1dObykNCg0KbW9kZWxfanVkaW5kX2NhYm1pbiA8LSBybXM6Om9scyhMSklfdDIgfiAgDQogICAgICAgICAgICAgICAgICAgICAgICBjYWJpbmV0Q09VTlRfbWluICogDQogICAgICAgICAgICAgICAgICAgICAgICBhaWRkYXRhX0FpZEdEUF9sbiArDQogICAgICAgICAgICAgICAgICAgICAgICBsb2coR0RQX3Blcl9jYXBpdGEpICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhwb3B1bGF0aW9uKSArDQogICAgICAgICAgICAgICAgICAgICAgICBjb25mX2ludGVucyArDQogICAgICAgICAgICAgICAgICAgICAgICBub25zdGF0ZSArIA0KICAgICAgICAgICAgICAgICAgICAgICAgV0JuYXRyZXMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgZmggLA0KICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGlzc19kZiwgeD1ULCB5PVQpDQptb2RlbF9qdWRpbmRfY2FibWluIDwtIHJtczo6cm9iY292KG1vZGVsX2p1ZGluZF9jYWJtaW4sIGRpc3NfZGYkR1dObykNCg0KDQptb2RlbF9qdWRpbmRfY2Fic2l4IDwtIHJtczo6b2xzKExKSV90MiB+ICANCiAgICAgICAgICAgICAgICAgICAgICAgIGNhYmluZXRDT1VOVF9zaXggKiANCiAgICAgICAgICAgICAgICAgICAgICAgIGFpZGRhdGFfQWlkR0RQX2xuICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhHRFBfcGVyX2NhcGl0YSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgbG9nKHBvcHVsYXRpb24pICsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zICsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5vbnN0YXRlICsgDQogICAgICAgICAgICAgICAgICAgICAgICBXQm5hdHJlcyArDQogICAgICAgICAgICAgICAgICAgICAgICBmaCAsDQogICAgICAgICAgICAgICAgICAgICAgZGF0YT1kaXNzX2RmLCB4PVQsIHk9VCkNCm1vZGVsX2p1ZGluZF9jYWJzaXggPC0gcm1zOjpyb2Jjb3YobW9kZWxfanVkaW5kX2NhYnNpeCwgZGlzc19kZiRHV05vKQ0KDQptb2RlbF9saXN0IDwtIGxpc3QoanVkaW5kX291dGxpZXJzW1syXV0sIA0KICAgICAgICAgIGp1ZGluZF9vdXRsaWVyc1tbNF1dLA0KICAgICAgICAgIGp1ZGluZF9vdXRsaWVyc1tbNl1dLA0KICAgICAgICAgIG1vZGVsX2p1ZGluZF90aW1lLCANCiAgICAgICAgICBtb2RlbF9qdWRpbmRfeWVhcmZlLCANCiAgICAgICAgICBtb2RlbF9qdWRpbmRfY2FibWF4LCANCiAgICAgICAgICBtb2RlbF9qdWRpbmRfY2FibWluLCANCiAgICAgICAgICBtb2RlbF9qdWRpbmRfY2Fic2l4KQ0KDQpjb2VmX21hcCA8LSBsaXN0KGNhYmluZXRDT1VOVCA9ICJQb3dlci1TaGFyaW5nIChjYWJpbmV0KSIsDQogICAgICAgICAgICAgICAgICAgY2FiaW5ldENPVU5UX21heCA9ICJQb3dlci1TaGFyaW5nIChjYWJpbmV0KSIsDQogICAgICAgICAgICAgICAgICAgY2FiaW5ldENPVU5UX21pbiA9ICJQb3dlci1TaGFyaW5nIChjYWJpbmV0KSIsDQogICAgICAgICAgICAgICAgICAgY2FiaW5ldENPVU5UX3NpeCA9ICJQb3dlci1TaGFyaW5nIChjYWJpbmV0KSIsDQogICAgICAgICAgICAgICAgICAgImNhYmluZXRDT1VOVCAqIGFpZGRhdGFfQWlkR0RQX2xuIiA9ICJQb3dlci1TaGFyaW5nIChjYWJpbmV0KSAqIEFpZCIsIA0KICAgICAgICAgICAgICAgICAgICJjYWJpbmV0Q09VTlRfbWF4ICogYWlkZGF0YV9BaWRHRFBfbG4iID0gIlBvd2VyLVNoYXJpbmcgKGNhYmluZXQpICogQWlkIiwgDQogICAgICAgICAgICAgICAgICAgImNhYmluZXRDT1VOVF9taW4gKiBhaWRkYXRhX0FpZEdEUF9sbiIgPSAiUG93ZXItU2hhcmluZyAoY2FiaW5ldCkgKiBBaWQiLCANCiAgICAgICAgICAgICAgICAgICAiY2FiaW5ldENPVU5UX3NpeCAqIGFpZGRhdGFfQWlkR0RQX2xuIiA9ICJQb3dlci1TaGFyaW5nIChjYWJpbmV0KSAqIEFpZCIsIA0KICAgICAgICAgICAgICAgICAgIGFpZGRhdGFfQWlkR0RQX2xuID0gIkFpZCAvIEdEUCAobG9nKSIsDQogICAgICAgICAgICAgICAgICAgR0RQX3Blcl9jYXBpdGEgPSAiR0RQIHAvYyIsDQogICAgICAgICAgICAgICAgICAgcG9wdWxhdGlvbiA9ICJQb3B1bGF0aW9uIiwNCiAgICAgICAgICAgICAgICAgICBjb25mX2ludGVucyA9ICJDb25mbGljdCBJbnRlbnNpdHkiLA0KICAgICAgICAgICAgICAgICAgIG5vbnN0YXRlID0gIk5vbi1TdGF0ZSBWaW9sZW5jZSIsDQogICAgICAgICAgICAgICAgICAgV0JuYXRyZXMgPSAiTmF0LiBSZXMuIFJlbnRzIiwNCiAgICAgICAgICAgICAgICAgICBwb2xpdHkyID0gIlBvbGl0eSIsIA0KICAgICAgICAgICAgICAgICBmaCA9ICJSZWdpbWUgVHlwZSIsIA0KICAgICAgICAgICAgICAgICAgIHBjeSA9ICJUaW1lIiwgDQogICAgICAgICAgICAgICAgICAgcGN5MiA9ICJUaW1lJF4yJCIsIA0KICAgICAgICAgICAgICAgICAgIHBjeTMgPSAiVGltZSReMyQiKQ0KIyANCnRleHJlZzo6dGV4cmVnKG1vZGVsX2xpc3QsDQogICAgICAgc3RhcnMgPSBjKDAuMDAxLCAwLjAxLCAwLjA1LCAwLjEpLA0KICAgICAgIGN1c3RvbS5jb2VmLm1hcCA9IGNvZWZfbWFwLA0KICAgICAgIGZpbGUgPSAiLi4vb3V0cHV0L2FpZHBzX2p1ZGluZF90ZWNoX3JvYi50ZXgiLA0KICAgICAgIHN5bWJvbCA9ICIrIiwNCiAgICAgICB0YWJsZSA9IEYsDQogICAgICAgYm9va3RhYnMgPSBULA0KICAgICAgIHVzZS5wYWNrYWdlcyA9IEYsDQogICAgICAgZGNvbHVtbiA9IFQsDQogICAgICAgaW5jbHVkZS5sciA9IEYsDQogICAgICAgY3VzdG9tLm1vZGVsLm5hbWVzID0gYygiKDEpIEhhdCBWYWx1ZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigyKSBDb29rJ3MgRGlzdGFuY2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigzKSBERkJFVEEiLA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDQpIEN1YmljIFRpbWUgVHJlbmQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoNSkgWWVhciBGRSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIig2KSBQUzogTWF4IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDcpIFBTOiBNaW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoOCkgUFM6IFNpeCBNb250aHMiKSwNCiAgICAgICBpbmNsdWRlLmFkanJzID0gVCwNCiAgICAgICBjYXB0aW9uID0gIiIsDQogICAgICAgc3Rhci5zeW1ib2wgPSAiXFwqIiwNCiAgICAgICBpbmNsdWRlLnJzcXVhcmVkID0gRiwNCiAgICAgICBpbmNsdWRlLmNsdXN0ZXIgPSBULA0KICAgICAgIGluY2x1ZGUudmFyaWFuY2UgPSBGKQ0KDQojIE91dHB1dCBSZXBsaWNhdGlvbiBBcmNoaXZlDQpodG1scmVnKG1vZGVsX2xpc3QsIA0KICAgICAgICAgICAgICAgIHN0YXJzID0gYygwLjAwMSwgMC4wMSwgMC4wNSwgMC4xKSwNCiAgICAgICAgICAgICAgICBjdXN0b20uY29lZi5tYXAgPSBjb2VmX21hcCwNCiAgICAgICAgICAgICAgICBzeW1ib2wgPSAiKyIsDQogICAgICAgICAgICAgICAgdGFibGUgPSBGLA0KICAgICAgICAgICAgICAgIGJvb2t0YWJzID0gVCwNCiAgICAgICAgICAgICAgICB1c2UucGFja2FnZXMgPSBGLA0KICAgICAgICAgICAgICAgIGRjb2x1bW4gPSBULA0KICAgICAgICAgICAgICAgICBjdXN0b20ubW9kZWwubmFtZXMgPSBjKCIoMSkgSGF0IFZhbHVlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDIpIENvb2sncyBEaXN0YW5jZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigzKSBERkJFVEEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigyKSBDdWJpYyBUaW1lIFRyZW5kIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigzKSBZZWFyIEZFIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDQpIFBTOiBNYXgiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDUpIFBTOiBNaW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDYpIFBTOiBTaXggTW9udGhzIiksDQogICAgICAgICAgICAgICAgaW5jbHVkZS5sciA9IEYsDQogICAgICAgICAgICAgICAgaW5jbHVkZS5hZGpycyA9IFQsDQogICAgICAgICAgICAgICAgY2FwdGlvbiA9ICIiLCANCiAgICAgICAgICAgICAgICBzdGFyLnN5bWJvbCA9ICJcXCoiLCANCiAgICAgICAgICAgICAgICBpbmNsdWRlLnJzcXVhcmVkID0gRiwNCiAgICAgICAgICAgICAgICBpbmNsdWRlLmNsdXN0ZXIgPSBULA0KICAgICAgICAgICAgICAgIGluY2x1ZGUudmFyaWFuY2UgPSBGKQ0KDQoNCg0KYGBgDQoNCg0KIyBUYWJsZSBELjM6ICBQb3dlci1TaGFyaW5nLCBGb3JlaWduIEFpZCBhbmQgUG9zdC1Db25mbGljdCBSdWxlIG9mIExhdzogUmVkdWNlZA0KRm9ybSBSZXN1bHRzDQoNCg0KYGBge3IsIHJlc3VsdHM9ImFzaXMiLCBtZXNzYWdlPUYsIHdhcm5pbmc9RiwgY2FjaGUgPSBULCBjb21tZW50cyA9IEZ9DQojIExpYnJhcmllcw0KbGlicmFyeSh0ZXhyZWcpDQpzb3VyY2UoIi4vZnVuY3Rpb25zL2V4dHJhY3Rfb2xzX2N1c3RvbS5SIikNCnNvdXJjZSgiLi9mdW5jdGlvbnMvZXh0cmFjdF9wbG1fY3VzdG9tLlIiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJtcykNCg0KIyBsb2FkIGluc3RydW1lbnQNCmxvYWQoZmlsZSA9ICIuL2RhdGEvaW5zdHJ1bWVudGVkQWlkMi5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZGlzc19kZi5yZGEiKQ0KDQpkaXNzX2RmIDwtIG1lcmdlKGRpc3NfZGYsIGluc3RydW1lbnRfZGYsIGJ5ID0gYygieWVhciIsICJpc28yYyIpLCBhbGwueCA9IFRSVUUpDQpkaXNzX2RmJHRvdGFsX3N1bV9leGNlcHQgPC0gYXMubnVtZXJpYyhkaXNzX2RmJHRvdGFsX3N1bV9leGNlcHQpDQoNCg0KIyBzdWJzZXQgb25seSBjb21wbGV0ZS5jYXNlcyAvIG5lY2Vzc2FyeSBmb3IgY2x1c3Rlci5yb2J1c3Quc2UoKQ0KaXZfbmEgPC0gbmEub21pdChkaXNzX2RmWywgYygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FiaW5ldENPVU5UIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhYmluZXRJTkMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWlkZGF0YV9BaWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhaWRkYXRhX0FpZEdEUF9sbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFpZGRhdGFfQWlkUENfbG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdEUF9wZXJfY2FwaXRhIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHVsYXRpb24iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZl9pbnRlbnMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0JuYXRyZXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG90YWxfc3VtX2V4Y2VwdCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZWFyIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdXTm8iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0RQIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uc3RhdGUiLCAiTEpJX3QyIiwgInYyeF9qdWNvbl90MiIpXSkNCg0KDQoNCiMjIyMjIElWICMjIyMjDQoNCml2X25hJGFpZF9pbnN0cnVtZW50ZWRfZ2RwX2xuIDwtIGxvZyhpdl9uYSR0b3RhbF9zdW1fZXhjZXB0IC8gaXZfbmEkR0RQKQ0KZGlzc19kZiRhaWRfaW5zdHJ1bWVudGVkX2dkcF9sbiA8LSBsb2coZGlzc19kZiR0b3RhbF9zdW1fZXhjZXB0IC8gZGlzc19kZiRHRFApDQoNCiMgdG8gcHJvY2VlZCB3aXRoIElWIGVzdGltYXRpb24gSSBmaXJzdCBoYXJkLWNvZGUgdGhlIGluc3RydW1lbnQNCml2X25hJGluc3RyX2FpZF9nZHBfbG4gPC0gbG9nKGl2X25hJHRvdGFsX3N1bV9leGNlcHQgLyBpdl9uYSRHRFApDQoNCiMgZGF0YSB0cmFuc2Zvcm1hdGlvbiBmb3IgU3RhdGENCml2X25hJGxuX2dkcF9wYyA8LSBsb2coaXZfbmEkR0RQX3Blcl9jYXBpdGEpDQppdl9uYSRsbl9wb3AgPC0gbG9nKGl2X25hJHBvcHVsYXRpb24pDQoNCiMgc3R1ZmYgZm9yIHN0YXRhDQojIGRpc3NfZGYkcmVnaW9uX251bSA8LSBhcy5udW1lcmljKGFzLmZhY3RvcihkaXNzX2RmJHJlZ2lvbikpDQojIGRpc3NfZGYkY291bnRyeV95ZWFyX251bSA8LSBhcy5udW1lcmljKGFzLmZhY3RvcihkaXNzX2RmJGNvdW50cnlfeWVhcikpDQpmb3JlaWduOjp3cml0ZS5kdGEoaXZfbmEsICIuL2RhdGEvZGlzc19kZl9JVi5kdGEiKQ0KDQojIGhhcmQgY29kZSBpbnRlcmFjdGlvbiB2YXJpYWJsZQ0KaXZfbmEkY2FiaW5jWGFpZCA8LSBpdl9uYSRhaWRkYXRhX0FpZEdEUF9sbiAqIGl2X25hJGNhYmluZXRJTkMNCml2X25hJGNhYmluY1hhaWRfaW5zdHIgPC0gaXZfbmEkYWlkX2luc3RydW1lbnRlZF9nZHBfbG4gKiBpdl9uYSRjYWJpbmV0SU5DDQoNCiMgRXN0aW1hdGUgTW9kZWxzDQpyZWR1Y2VkX2Zvcm1fTEpJIDwtIG9scyhMSklfdDIgfiANCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWJpbmV0SU5DICogYWlkX2luc3RydW1lbnRlZF9nZHBfbG4gKw0KICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhHRFBfcGVyX2NhcGl0YSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhwb3B1bGF0aW9uKSArDQogICAgICAgICAgICAgICAgICAgICAgICAgbm9uc3RhdGUgKw0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zICsNCiAgICAgICAgICAgICAgICAgICAgICAgICBXQm5hdHJlcyArDQogICAgICAgICAgICAgICAgICAgICAgICAgZmgsDQogICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpdl9uYSwgeCA9IFQsIHkgPSBUKQ0KcmVkdWNlZF9mb3JtX0xKSSA8LSByb2Jjb3YocmVkdWNlZF9mb3JtX0xKSSwgaXZfbmEkR1dObykNCg0KDQpyZWR1Y2VkX2Zvcm1fdmRlbSA8LSBvbHModjJ4X2p1Y29uX3QyIH4gDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhYmluZXRJTkMgKiBhaWRfaW5zdHJ1bWVudGVkX2dkcF9sbiArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhHRFBfcGVyX2NhcGl0YSkgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cocG9wdWxhdGlvbikgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICBub25zdGF0ZSArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgV0JuYXRyZXMgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpdl9uYSwgeCA9IFQsIHkgPSBUKQ0KcmVkdWNlZF9mb3JtX3ZkZW0gPC0gcm9iY292KHJlZHVjZWRfZm9ybV92ZGVtLCBpdl9uYSRHV05vKQ0KDQoNCiMgT3V0cHV0DQoNCg0KY29lZl9uYW1lX21hcCA8LSBsaXN0KA0KICAgICAgICAgICAgICAgICAgICAgIGNhYmluZXRJTkMgPSAiUG93ZXItU2hhcmluZyAoYmluYXJ5KSIsDQogICAgICAgICAgICAgICAgICAgICAgImNhYmluZXRJTkMgKiBhaWRfaW5zdHJ1bWVudGVkX2dkcF9sbiIgPSAiUG93ZXItU2hhcmluZyAoYmluYXJ5KSAqIEFpZCIsDQogICAgICAgICAgICAgICAgICAgICAgY2FiaW5ldENPVU5UID0gIlBvd2VyLVNoYXJpbmcgKGNhYmluZXQpIiwNCiAgICAgICAgICAgICAgICAgICAgICAiY2FiaW5ldENPVU5UICogYWlkZGF0YV9BaWRHRFBfbG4iID0gIlBvd2VyLVNoYXJpbmcgKGNhYmluZXQpICogQWlkIiwgDQogICAgICAgICAgICAgICAgICAgICAgImNhYmluZXRDT1VOVDphaWRkYXRhX0FpZEdEUF9sbiIgPSAiUFMgKGNhYmluZXQpICogQWlkIiwNCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIGFpZF9pbnN0cnVtZW50ZWRfZ2RwX2xuID0gIkFpZCAvIEdEUCAobG9nKSBpbnN0cnVtZW50ZWQiLA0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICJHRFBfcGVyX2NhcGl0YSIgPSAiR0RQIHAvYyAobG9nKSIsDQogICAgICAgICAgICAgICAgICAgICAgInBvcHVsYXRpb24iID0gIlBvcHVsYXRpb24gKGxvZykiLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbmZfaW50ZW5zID0gIkNvbmZsaWN0IEludGVuc2l0eSIsDQogICAgICAgICAgICAgICAgICAgICAgbm9uc3RhdGUgPSAiTm9uLVN0YXRlIFZpb2xlbmNlIiwNCiAgICAgICAgICAgICAgICAgICAgICBXQm5hdHJlcyA9ICJOYXQuIFJlcy4gUmVudHMiLA0KICAgICAgICAgICAgICAgICAgICAgIHBvbGl0eTIgPSAiUG9saXR5IiwNCiAgICAgICAgICAgICAgICAgICAgICBmaCA9ICJSZWdpbWUgVHlwZSAoRkgpIiwNCiAgICAgICAgICAgICAgICAgICAgICBFdGhuaWMgPSAiRXRobmljIEZyYWMuIiwNCiAgICAgICAgICAgICAgICAgICAgICBEU19vcmRpbmFsID0gIlVOIFBLTyIpDQojIA0KIyB0ZXhyZWcobCA9IGxpc3QocmVkdWNlZF9mb3JtX0xKSSwgDQojICAgICAgICAgICAgICAgICAgICByZWR1Y2VkX2Zvcm1fdmRlbSksDQojICAgICAgICAgICBzdGFycyA9IGMoMC4wMDEsIDAuMDEsIDAuMDUsIDAuMSksDQojICAgICAgICAgICBzeW1ib2wgPSAiKyIsDQojICAgICAgICBmaWxlID0gIi4uL291dHB1dC9pdl9qdWRpbmRfcmVkdWNlZGZvcm0udGV4IiwNCiMgICAgICAgICAgIHRhYmxlID0gRiwNCiMgICAgICAgICAgIGJvb2t0YWJzID0gVCwNCiMgICAgICAgICAgIHVzZS5wYWNrYWdlcyA9IEYsDQojICAgICAgICAgICBkY29sdW1uID0gVCwNCiMgICAgICAgICAgIGN1c3RvbS5jb2VmLm1hcCA9IGNvZWZfbmFtZV9tYXAsDQojICAgICAgICAgICBjdXN0b20ubW9kZWwubmFtZXMgPSBjKCIoMSkgTEpJIiwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigyKSBWLURlbSIpLA0KIyAgICAgICAgDQojICAgICAgICAgc3Rhci5zeW1ib2wgPSAiXFwqIiwNCiMgICAgICAgICBpbmNsdWRlLmxyID0gRiwgDQojICAgICAgICAgaW5jbHVkZS5jbHVzdGVyID0gVCwgDQojICAgICAgICAgaW5jbHVkZS5yc3F1YXJlZCA9IEYsIA0KIyAgICAgICAgIGluY2x1ZGUudmFyaWFuY2UgPSBGKQ0KDQpodG1scmVnKGwgPSBsaXN0KHJlZHVjZWRfZm9ybV9MSkksIA0KICAgICAgICAgICAgICAgICAgIHJlZHVjZWRfZm9ybV92ZGVtKSwNCiAgICAgICAgICBzdGFycyA9IGMoMC4wMDEsIDAuMDEsIDAuMDUsIDAuMSksDQogICAgICAgICAgc3ltYm9sID0gIisiLA0KICAgICAgICAgIHRhYmxlID0gRiwNCiAgICAgICAgICBib29rdGFicyA9IFQsDQogICAgICAgICAgdXNlLnBhY2thZ2VzID0gRiwNCiAgICAgICAgICBkY29sdW1uID0gVCwNCiAgICAgICAgICBjdXN0b20uY29lZi5tYXAgPSBjb2VmX25hbWVfbWFwLA0KICAgICAgICAgIGN1c3RvbS5tb2RlbC5uYW1lcyA9IGMoIigxKSBMSkkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigyKSBWLURlbSIpLA0KICAgICAgIA0KICAgICAgICBzdGFyLnN5bWJvbCA9ICJcXCoiLA0KICAgICAgICBpbmNsdWRlLmxyID0gRiwgDQogICAgICAgIGluY2x1ZGUuY2x1c3RlciA9IFQsIA0KICAgICAgICBpbmNsdWRlLnJzcXVhcmVkID0gRiwgDQogICAgICAgIGluY2x1ZGUudmFyaWFuY2UgPSBGKQ0KDQpgYGANCg0K