library("haven")
library("tidyverse")
library("dplyr")
library("foreign")
library("survey")
library("ggplot2")
library("car")
library("rms")
library("SciViews")
#list variable
Fulldat_Pheno <- Falldat_Pheno
colnames(Fulldat_Pheno)
#Perfluorohexane_sulfonic_acid_comment
#Perfluorononanoic_acid_comment #perfluorooctanoic_acid_comment
#perfluorooctane_sulfonic_acid_comment
#check effect modifiers Subgroup analysis for gender, race, BMI,
income, smoking and cancer #for subgroup analysis by gender
#for subgroup analysis by Race
##for subgroup analysis by BMI
#for subgroup analysis by income
#for subgroup analysis by cancer
#for subgroup analysis by smoking
#sensitivity analysis without cancer patient only for pfas
#subset cancer
cancer <- Fulldat_Pheno[Fulldat_Pheno$had_cancer == 1, ]
cancer$had_cancer[is.na(cancer$had_cancer)] <- 0
cancer <- cancer[cancer$had_cancer != 0, , drop = FALSE]
non_cancer <- Fulldat_Pheno[Fulldat_Pheno$had_cancer == 2, ]
non_cancer$had_cancer[is.na(non_cancer$had_cancer)] <- 0
non_cancer <- non_cancer[non_cancer$had_cancer != 0, , drop = FALSE]
des_cancer <- svydesign(id =~ psu, strata =~ Strata, weights =~ weight_2, nest = TRUE, data = cancer)
des_non_cancer <- svydesign(id =~ psu, strata =~ Strata, weights =~ weight_2, nest = TRUE, data = non_cancer)
#sensitivity Perfluorohexane_sulfonic_acid
Call:
svyglm(formula = Phenotypic_Age ~ Perfluorohexane_sulfonic_acid_comment,
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.6245 0.2667 167.301 <2e-16 ***
Perfluorohexane_sulfonic_acid_comment 4.8407 2.0529 2.358 0.0198 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 332.6811)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 44.096876 45.152048
Perfluorohexane_sulfonic_acid_comment 0.780117 8.901293
Call:
svyglm(formula = Phenotypic_Age ~ Perfluorohexane_sulfonic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 47.83787 1.37179 34.872 < 2e-16 ***
Perfluorohexane_sulfonic_acid_comment 5.55320 2.11376 2.627 0.00965 **
Gender 0.04351 0.40657 0.107 0.91495
Race 1.14035 0.17980 6.342 3.51e-09 ***
Marital_Status -2.54217 0.34874 -7.290 2.77e-11 ***
Ratio_income_poverty -0.39227 0.16804 -2.334 0.02112 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 306.415)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 45.1237386 50.55199385
Perfluorohexane_sulfonic_acid_comment 1.3710780 9.73531365
Gender -0.7608969 0.84790758
Race 0.7846059 1.49608745
Marital_Status -3.2321619 -1.85218772
Ratio_income_poverty -0.7247400 -0.05980344
Call:
svyglm(formula = Phenotypic_Age ~ Perfluorohexane_sulfonic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.742e+01 5.174e+00 9.166 1.00e-14 ***
Perfluorohexane_sulfonic_acid_comment 1.558e+01 3.553e+00 4.385 2.99e-05 ***
Gender -8.189e-02 1.116e+00 -0.073 0.941634
Race 1.509e+00 3.901e-01 3.867 0.000202 ***
Marital_Status -3.002e+00 3.904e-01 -7.689 1.35e-11 ***
Ratio_income_poverty -8.517e-01 4.413e-01 -1.930 0.056587 .
BMI 2.188e-01 8.455e-02 2.588 0.011182 *
sleep_disorders -3.892e+00 1.263e+00 -3.080 0.002703 **
quit_smoking 3.628e-04 3.184e-05 11.395 < 2e-16 ***
Avg_alcohol_drinks 6.103e+00 1.332e+00 4.580 1.41e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 307.1396)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 37.148486566 57.6899416270
Perfluorohexane_sulfonic_acid_comment 8.527776239 22.6351898716
Gender -2.296491768 2.1327107901
Race 0.734150359 2.2831598604
Marital_Status -3.777281718 -2.2270057290
Ratio_income_poverty -1.727711751 0.0243707648
BMI 0.050924375 0.3866347360
sleep_disorders -6.399543048 -1.3835739254
quit_smoking 0.000299598 0.0004260178
Avg_alcohol_drinks 3.457734609 8.7480314979
Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorohexane_sulfonic_acid),
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.1631 0.2746 160.838 < 2e-16 ***
ln(Perfluorohexane_sulfonic_acid) 1.5232 0.2572 5.923 2.55e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 330.9378)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 43.619957 44.706181
ln(Perfluorohexane_sulfonic_acid) 1.014574 2.031878
Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorohexane_sulfonic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 46.1855 1.3801 33.466 < 2e-16 ***
ln(Perfluorohexane_sulfonic_acid) 1.8568 0.2816 6.595 9.94e-10 ***
Gender 1.1405 0.4457 2.559 0.01165 *
Race 1.0963 0.1711 6.408 2.53e-09 ***
Marital_Status -2.5622 0.3502 -7.317 2.40e-11 ***
Ratio_income_poverty -0.5316 0.1698 -3.130 0.00216 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 304.0731)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 43.4550043 48.9160862
ln(Perfluorohexane_sulfonic_acid) 1.2996920 2.4138232
Gender 0.2587302 2.0223196
Race 0.7578093 1.4347333
Marital_Status -3.2551073 -1.8693883
Ratio_income_poverty -0.8675985 -0.1955677
Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorohexane_sulfonic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.412e+01 5.391e+00 8.185 1.23e-12 ***
ln(Perfluorohexane_sulfonic_acid) 3.033e+00 7.845e-01 3.867 0.000202 ***
Gender 1.527e+00 1.230e+00 1.241 0.217721
Race 1.309e+00 3.871e-01 3.381 0.001049 **
Marital_Status -2.959e+00 3.833e-01 -7.720 1.17e-11 ***
Ratio_income_poverty -9.898e-01 4.272e-01 -2.317 0.022655 *
BMI 2.460e-01 8.304e-02 2.963 0.003854 **
sleep_disorders -4.074e+00 1.265e+00 -3.222 0.001743 **
quit_smoking 3.492e-04 3.221e-05 10.842 < 2e-16 ***
Avg_alcohol_drinks 6.344e+00 1.368e+00 4.638 1.12e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 302.7751)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 33.417934749 54.8213604517
ln(Perfluorohexane_sulfonic_acid) 1.475940598 4.5906066145
Gender -0.915816707 3.9689045302
Race 0.540269531 2.0770653247
Marital_Status -3.720068796 -2.1981281084
Ratio_income_poverty -1.837824144 -0.1416952778
BMI 0.081163854 0.4108765925
sleep_disorders -6.584857357 -1.5641029625
quit_smoking 0.000285278 0.0004131744
Avg_alcohol_drinks 3.628730652 9.0595277075
#sensitivity “Perfluorononanoic_acid”
“Perfluorononanoic_acid_comment”
Call:
svyglm(formula = Phenotypic_Age ~ Perfluorononanoic_acid_comment,
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.6663 0.2648 168.688 <2e-16 ***
Perfluorononanoic_acid_comment 1.1880 2.6807 0.443 0.658
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 332.9529)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 44.142540 45.190011
Perfluorononanoic_acid_comment -4.114385 6.490335
Call:
svyglm(formula = Phenotypic_Age ~ Perfluorononanoic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 47.96844 1.36894 35.041 < 2e-16 ***
Perfluorononanoic_acid_comment -0.54634 2.55638 -0.214 0.8311
Gender 0.07089 0.40506 0.175 0.8614
Race 1.13497 0.17821 6.369 3.08e-09 ***
Marital_Status -2.54354 0.34880 -7.292 2.73e-11 ***
Ratio_income_poverty -0.41820 0.16749 -2.497 0.0138 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 306.7814)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 45.2599719 50.67691678
Perfluorononanoic_acid_comment -5.6042017 4.51152640
Gender -0.7305384 0.87230973
Race 0.7823703 1.48757454
Marital_Status -3.2336439 -1.85342950
Ratio_income_poverty -0.7495801 -0.08682529
Call:
svyglm(formula = Phenotypic_Age ~ Perfluorononanoic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.710e+01 5.141e+00 9.162 1.02e-14 ***
Perfluorononanoic_acid_comment -7.793e+00 5.212e+00 -1.495 0.138145
Gender 6.156e-02 1.095e+00 0.056 0.955276
Race 1.427e+00 3.877e-01 3.680 0.000386 ***
Marital_Status -3.056e+00 3.809e-01 -8.023 2.69e-12 ***
Ratio_income_poverty -9.208e-01 4.392e-01 -2.097 0.038679 *
BMI 2.360e-01 8.534e-02 2.766 0.006828 **
sleep_disorders -3.793e+00 1.266e+00 -2.997 0.003481 **
quit_smoking 3.665e-04 3.362e-05 10.900 < 2e-16 ***
Avg_alcohol_drinks 6.367e+00 1.373e+00 4.639 1.12e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 308.2944)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 36.891707662 57.3022904321
Perfluorononanoic_acid_comment -18.139404305 2.5533216819
Gender -2.111959935 2.2350873006
Race 0.657264298 2.1967635773
Marital_Status -3.811967581 -2.2996545491
Ratio_income_poverty -1.792726348 -0.0489397302
BMI 0.066590377 0.4054362591
sleep_disorders -6.304927196 -1.2801494135
quit_smoking 0.000299724 0.0004332221
Avg_alcohol_drinks 3.642423234 9.0922434957
Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorononanoic_acid),
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.9033 0.2669 168.268 <2e-16 ***
ln(Perfluorononanoic_acid) 1.0188 0.3216 3.168 0.0019 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 332.3029)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 44.3754437 45.431107
ln(Perfluorononanoic_acid) 0.3827299 1.654808
Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorononanoic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 48.4186 1.3770 35.163 < 2e-16 ***
ln(Perfluorononanoic_acid) 1.4180 0.3194 4.439 1.92e-05 ***
Gender 0.3409 0.4078 0.836 0.40478
Race 1.0443 0.1797 5.812 4.57e-08 ***
Marital_Status -2.5693 0.3520 -7.300 2.63e-11 ***
Ratio_income_poverty -0.4966 0.1703 -2.917 0.00418 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 305.5234)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 45.6941722 51.1429897
ln(Perfluorononanoic_acid) 0.7860387 2.0499562
Gender -0.4659615 1.1476630
Race 0.6887773 1.3997519
Marital_Status -3.2656669 -1.8728755
Ratio_income_poverty -0.8334882 -0.1597213
Call:
svyglm(formula = Phenotypic_Age ~ ln(Perfluorononanoic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.799e+01 5.105e+00 9.401 3.15e-15 ***
ln(Perfluorononanoic_acid) 1.997e+00 9.115e-01 2.191 0.03089 *
Gender 2.157e-01 1.129e+00 0.191 0.84890
Race 1.247e+00 3.868e-01 3.225 0.00173 **
Marital_Status -3.004e+00 3.868e-01 -7.767 9.27e-12 ***
Ratio_income_poverty -9.505e-01 4.409e-01 -2.156 0.03364 *
BMI 2.433e-01 8.306e-02 2.930 0.00425 **
sleep_disorders -3.943e+00 1.285e+00 -3.069 0.00280 **
quit_smoking 3.640e-04 3.264e-05 11.152 < 2e-16 ***
Avg_alcohol_drinks 6.150e+00 1.337e+00 4.601 1.30e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 306.9602)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 37.8583239859 58.1287921366
ln(Perfluorononanoic_acid) 0.1875837069 3.8068479841
Gender -2.0259826022 2.4574311049
Race 0.4795755142 2.0153677214
Marital_Status -3.7723181394 -2.2365442551
Ratio_income_poverty -1.8258081127 -0.0751049723
BMI 0.0784339819 0.4082412405
sleep_disorders -6.4938307821 -1.3920359025
quit_smoking 0.0002992119 0.0004288186
Avg_alcohol_drinks 3.4959229980 8.8033786625
#sensitivity “perfluorooctanoic_acid”
“perfluorooctanoic_acid_comment”
Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctanoic_acid_comment,
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 42.8717 0.3396 126.252 < 2e-16 ***
perfluorooctanoic_acid_comment 4.0902 0.6417 6.374 3.71e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 326.0826)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 42.19925 43.544148
perfluorooctanoic_acid_comment 2.81948 5.360832
Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctanoic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 46.41593 1.51423 30.653 < 2e-16 ***
perfluorooctanoic_acid_comment 2.48811 0.61706 4.032 0.0001 ***
Gender 0.01509 0.44733 0.034 0.9731
Race 1.19996 0.19338 6.205 9.07e-09 ***
Marital_Status -2.47831 0.36859 -6.724 7.39e-10 ***
Ratio_income_poverty -0.42265 0.17260 -2.449 0.0159 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 301.5538)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 43.4162538 49.41561292
perfluorooctanoic_acid_comment 1.2657192 3.71049195
Gender -0.8710606 0.90124972
Race 0.8168709 1.58304546
Marital_Status -3.2084886 -1.74813571
Ratio_income_poverty -0.7645623 -0.08072992
Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctanoic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.631e+01 5.647e+00 8.201 3.27e-12 ***
perfluorooctanoic_acid_comment 1.622e+00 1.302e+00 1.246 0.216452
Gender -3.823e-01 1.213e+00 -0.315 0.753489
Race 1.398e+00 4.325e-01 3.232 0.001786 **
Marital_Status -3.160e+00 4.001e-01 -7.897 1.29e-11 ***
Ratio_income_poverty -8.345e-01 4.463e-01 -1.870 0.065160 .
BMI 2.326e-01 9.104e-02 2.555 0.012522 *
sleep_disorders -3.827e+00 1.390e+00 -2.753 0.007301 **
quit_smoking 3.435e-04 4.046e-05 8.490 8.84e-13 ***
Avg_alcohol_drinks 6.378e+00 1.700e+00 3.751 0.000332 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 307.4315)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 35.0706171983 57.5461226524
perfluorooctanoic_acid_comment -0.9689731913 4.2132718195
Gender -2.7966650387 2.0320466420
Race 0.5371302337 2.2584986151
Marital_Status -3.9559210987 -2.3634161976
Ratio_income_poverty -1.7225824386 0.0536372927
BMI 0.0514141615 0.4137807433
sleep_disorders -6.5931656862 -1.0607604572
quit_smoking 0.0002630027 0.0004240497
Avg_alcohol_drinks 2.9939154785 9.7620641514
Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctanoic_acid),
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.1172 0.3914 112.705 <2e-16 ***
ln(perfluorooctanoic_acid) 0.1883 0.2831 0.665 0.507
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 329.8706)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 43.342007 44.8923166
ln(perfluorooctanoic_acid) -0.372333 0.7489362
Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctanoic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 46.3438 1.4802 31.310 < 2e-16 ***
ln(perfluorooctanoic_acid) 0.9657 0.3032 3.185 0.00186 **
Gender 0.2967 0.4612 0.643 0.52130
Race 1.2253 0.1912 6.408 3.43e-09 ***
Marital_Status -2.5883 0.3828 -6.761 6.13e-10 ***
Ratio_income_poverty -0.4973 0.1828 -2.721 0.00753 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 302.3885)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 43.4116407 49.2760111
ln(perfluorooctanoic_acid) 0.3651383 1.5662865
Gender -0.6169626 1.2104153
Race 0.8465337 1.6041159
Marital_Status -3.3465716 -1.8299400
Ratio_income_poverty -0.8592872 -0.1352337
Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctanoic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.591e+01 5.715e+00 8.034 6.93e-12 ***
ln(perfluorooctanoic_acid) 1.598e+00 9.643e-01 1.658 0.10131
Gender -2.301e-02 1.252e+00 -0.018 0.98538
Race 1.380e+00 4.323e-01 3.192 0.00202 **
Marital_Status -3.275e+00 4.225e-01 -7.752 2.47e-11 ***
Ratio_income_poverty -9.275e-01 4.632e-01 -2.002 0.04867 *
BMI 2.550e-01 8.850e-02 2.881 0.00508 **
sleep_disorders -4.031e+00 1.397e+00 -2.884 0.00504 **
quit_smoking 3.538e-04 4.071e-05 8.691 3.55e-13 ***
Avg_alcohol_drinks 5.900e+00 1.603e+00 3.681 0.00042 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 306.6574)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 34.5411696039 57.2861295678
ln(perfluorooctanoic_acid) -0.3205654305 3.5173757614
Gender -2.5139770658 2.4679489908
Race 0.5196506440 2.2403635368
Marital_Status -4.1158973016 -2.4343510499
Ratio_income_poverty -1.8493559368 -0.0055649759
BMI 0.0788623493 0.4311003890
sleep_disorders -6.8116762815 -1.2494731695
quit_smoking 0.0002727828 0.0004347966
Avg_alcohol_drinks 2.7104232201 9.0889779036
#sensitivity “perfluorooctane_sulfonic_acid”
“perfluorooctane_sulfonic_acid_comment”
Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctane_sulfonic_acid_comment,
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.2510 0.2882 153.558 <2e-16 ***
perfluorooctane_sulfonic_acid_comment 7.7446 3.8173 2.029 0.0447 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 329.6064)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 43.6803876 44.82171
perfluorooctane_sulfonic_acid_comment 0.1851965 15.30397
Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctane_sulfonic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 47.280284 1.509515 31.322 < 2e-16 ***
perfluorooctane_sulfonic_acid_comment 9.095359 4.573562 1.989 0.0491 *
Gender 0.003878 0.445615 0.009 0.9931
Race 1.233430 0.191275 6.448 2.83e-09 ***
Marital_Status -2.549983 0.375619 -6.789 5.36e-10 ***
Ratio_income_poverty -0.417543 0.175685 -2.377 0.0191 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 302.5686)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 44.28994702 50.27062179
perfluorooctane_sulfonic_acid_comment 0.03516839 18.15554959
Gender -0.87888197 0.88663735
Race 0.85451578 1.61234431
Marital_Status -3.29408078 -1.80588586
Ratio_income_poverty -0.76557344 -0.06951231
Call:
svyglm(formula = Phenotypic_Age ~ perfluorooctane_sulfonic_acid_comment +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.734e+01 5.569e+00 8.500 8.45e-13 ***
perfluorooctane_sulfonic_acid_comment 3.879e+00 9.606e+00 0.404 0.687413
Gender -3.244e-01 1.225e+00 -0.265 0.791897
Race 1.428e+00 4.277e-01 3.339 0.001281 **
Marital_Status -3.236e+00 4.227e-01 -7.655 3.82e-11 ***
Ratio_income_poverty -8.412e-01 4.513e-01 -1.864 0.065997 .
BMI 2.391e-01 8.970e-02 2.665 0.009309 **
sleep_disorders -3.977e+00 1.394e+00 -2.852 0.005521 **
quit_smoking 3.538e-04 4.062e-05 8.709 3.28e-13 ***
Avg_alcohol_drinks 6.115e+00 1.629e+00 3.754 0.000328 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 307.9629)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 3.625483e+01 58.4213865517
perfluorooctane_sulfonic_acid_comment -1.523723e+01 22.9956009513
Gender -2.762962e+00 2.1141731392
Race 5.767528e-01 2.2791218918
Marital_Status -4.077069e+00 -2.3946425386
Ratio_income_poverty -1.739298e+00 0.0569125135
BMI 6.054745e-02 0.4175740423
sleep_disorders -6.751021e+00 -1.2021729804
quit_smoking 2.729601e-04 0.0004346497
Avg_alcohol_drinks 2.873375e+00 9.3561086956
Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctane_sulfonic_acid),
design = des_non_cancer, family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 39.7506 0.5994 66.319 < 2e-16 ***
ln(perfluorooctane_sulfonic_acid) 2.1196 0.2489 8.518 6.16e-14 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 325.5034)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 38.563667 40.937566
ln(perfluorooctane_sulfonic_acid) 1.626804 2.612394
Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctane_sulfonic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 41.3150 1.6036 25.764 < 2e-16 ***
ln(perfluorooctane_sulfonic_acid) 2.4634 0.2805 8.783 1.87e-14 ***
Gender 1.1298 0.4656 2.427 0.01681 *
Race 1.0454 0.1912 5.467 2.74e-07 ***
Marital_Status -2.5761 0.3784 -6.808 4.88e-10 ***
Ratio_income_poverty -0.5421 0.1759 -3.081 0.00259 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 297.3742)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 38.1383445 44.491679
ln(perfluorooctane_sulfonic_acid) 1.9077359 3.018973
Gender 0.2074995 2.052167
Race 0.6665602 1.424178
Marital_Status -3.3257303 -1.826511
Ratio_income_poverty -0.8906493 -0.193542
Call:
svyglm(formula = Phenotypic_Age ~ ln(perfluorooctane_sulfonic_acid) +
Gender + Race + Marital_Status + Ratio_income_poverty + BMI +
sleep_disorders + Smoked_days + now_smoke + quit_smoking +
Avg_alcohol_drinks + had_cancer, design = des_non_cancer,
family = "gaussian", data = non_cancer)
Survey design:
svydesign(id = ~psu, strata = ~Strata, weights = ~weight_2, nest = TRUE,
data = non_cancer)
Coefficients: (3 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.779e+01 5.928e+00 6.375 1.10e-08 ***
ln(perfluorooctane_sulfonic_acid) 3.905e+00 8.399e-01 4.649 1.30e-05 ***
Gender 1.679e+00 1.258e+00 1.335 0.185812
Race 9.525e-01 4.197e-01 2.270 0.025926 *
Marital_Status -3.174e+00 4.190e-01 -7.576 5.45e-11 ***
Ratio_income_poverty -9.358e-01 4.263e-01 -2.195 0.031063 *
BMI 2.921e-01 8.506e-02 3.434 0.000946 ***
sleep_disorders -4.074e+00 1.408e+00 -2.895 0.004893 **
quit_smoking 3.371e-04 4.011e-05 8.406 1.29e-12 ***
Avg_alcohol_drinks 5.427e+00 1.596e+00 3.401 0.001052 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 295.7605)
Number of Fisher Scoring iterations: 2
2.5 % 97.5 %
(Intercept) 25.992011394 49.5865423537
ln(perfluorooctane_sulfonic_acid) 2.233695705 5.5767921885
Gender -0.824589458 4.1820719340
Race 0.117303667 1.7877055767
Marital_Status -4.008233517 -2.3405483456
Ratio_income_poverty -1.784171445 -0.0873677205
BMI 0.122781843 0.4613338368
sleep_disorders -6.875704479 -1.2731266854
quit_smoking 0.000257335 0.0004169684
Avg_alcohol_drinks 2.250880283 8.6021872146
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCmBgYHtyfQ0KbGlicmFyeSgiaGF2ZW4iKQ0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkoImRwbHlyIikNCmxpYnJhcnkoImZvcmVpZ24iKQ0KbGlicmFyeSgic3VydmV5IikNCmxpYnJhcnkoImdncGxvdDIiKQ0KbGlicmFyeSgiY2FyIikNCmxpYnJhcnkoInJtcyIpDQpsaWJyYXJ5KCJTY2lWaWV3cyIpDQpgYGANCg0KDQojbGlzdCB2YXJpYWJsZQ0KYGBge3J9DQpGdWxsZGF0X1BoZW5vIDwtIEZhbGxkYXRfUGhlbm8NCmNvbG5hbWVzKEZ1bGxkYXRfUGhlbm8pDQpgYGANCiNQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQojcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50DQojcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudA0KDQojY2hlY2sgZWZmZWN0IG1vZGlmaWVycyBTdWJncm91cCBhbmFseXNpcyBmb3IgZ2VuZGVyLCByYWNlLCBCTUksIGluY29tZSwgc21va2luZyBhbmQgY2FuY2VyDQojZm9yIHN1Ymdyb3VwIGFuYWx5c2lzIGJ5IGdlbmRlcg0KYGBge3IgZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9VFJVRX0NCm1lbiA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kR2VuZGVyID09IDEsIF0NCndvbWVuIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRHZW5kZXIgPT0gMiwgXQ0KZGVzbWVuIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gbWVuKSAjc2VsZWN0IG1lbg0KZGVzd29tZW4gPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSB3b21lbikgI3NlbGVjdCB3b21lbg0KDQojUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudA0KbW9kZWxfc2V4IDwtIGdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50KkdlbmRlciwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX3NleCkNCg0KbW9kZWxfbWVuIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBtZW4sIGRlc2lnbiA9IGRlc21lbiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfbWVuKQ0KY29uZmludChtb2RlbF9tZW4pWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF93b21lbiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gd29tZW4sIGRlc2lnbiA9IGRlc3dvbWVuLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF93b21lbikNCmNvbmZpbnQobW9kZWxfd29tZW4pWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQoNCiNQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3NleCA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQqR2VuZGVyLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfc2V4KQ0KDQptb2RlbF9tZW4gPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbWVuLCBkZXNpZ24gPSBkZXNtZW4sIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX21lbikNCmNvbmZpbnQobW9kZWxfbWVuKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF93b21lbiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSB3b21lbiwgZGVzaWduID0gZGVzd29tZW4sIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX3dvbWVuKQ0KY29uZmludChtb2RlbF93b21lbilbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KDQojcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9zZXggPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50KkdlbmRlciwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX3NleCkNCg0KbW9kZWxfbWVuIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IG1lbiwgZGVzaWduID0gZGVzbWVuLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9tZW4pDQpjb25maW50KG1vZGVsX21lbilbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd29tZW4gPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gd29tZW4sIGRlc2lnbiA9IGRlc3dvbWVuLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF93b21lbikNCmNvbmZpbnQobW9kZWxfd29tZW4pWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCg0KI3BlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3NleCA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpHZW5kZXIsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9zZXgpDQoNCm1vZGVsX21lbiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbWVuLCBkZXNpZ24gPSBkZXNtZW4sIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX21lbikNCmNvbmZpbnQobW9kZWxfbWVuKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd29tZW4gPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IHdvbWVuLCBkZXNpZ24gPSBkZXN3b21lbiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfd29tZW4pDQpjb25maW50KG1vZGVsX3dvbWVuKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KDQpgYGANCiNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgUmFjZQ0KYGBge3IgZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHdhcm5pbmc9VFJVRX0NCk1leGljYW4gPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhY2UgPT0gMSwgXQ0KT3RoZXJfSGlzcGFuaWMgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhY2UgPT0gMiwgXQ0KTm9uX0hpc3BhbmljX3doaXRlIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRSYWNlID09IDMsIF0NCk5vbl9IaXNwYW5pY19CbGFjayA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kUmFjZSA9PSA0LCBdDQpPdGhlcl9SYWNlIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRSYWNlID09IDUsIF0NCg0KZGVzX01lIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gTWV4aWNhbikgDQpkZXNfSGlzcGFuaWMgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBPdGhlcl9IaXNwYW5pYykgDQpkZXNfd2hpdGUgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBOb25fSGlzcGFuaWNfd2hpdGUpIA0KZGVzX0JsYWNrIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gTm9uX0hpc3BhbmljX0JsYWNrKSANCmRlc19PdGhlciA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IE90aGVyX1JhY2UpIA0KDQpvcHRpb25zKHN1cnZleS5hZGp1c3QuZG9tYWluLmxvbmVseT1UUlVFKQ0Kb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdT0iYWRqdXN0IikNCg0KI1BlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3JhY2UgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE1leGljYW4sIGRlc2lnbiA9IGRlc19NZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfTWUpDQpjb25maW50KG1vZGVsX01lKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfSGlzcGFuaWMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbIlBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX3doaXRlIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBOb25fSGlzcGFuaWNfd2hpdGUsIGRlc2lnbiA9IGRlc193aGl0ZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfd2hpdGUpDQpjb25maW50KG1vZGVsX3doaXRlKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE5vbl9IaXNwYW5pY19CbGFjaywgZGVzaWduID0gZGVzX0JsYWNrLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CbGFjaykNCmNvbmZpbnQobW9kZWxfQmxhY2spWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF9PdGhlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQoNCg0KI1BlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfcmFjZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTWV4aWNhbiwgZGVzaWduID0gZGVzX01lLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9NZSkNCmNvbmZpbnQobW9kZWxfTWUpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0hpc3BhbmljIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd2hpdGUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX3doaXRlLCBkZXNpZ24gPSBkZXNfd2hpdGUsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX3doaXRlKQ0KY29uZmludChtb2RlbF93aGl0ZSlbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX0JsYWNrLCBkZXNpZ24gPSBkZXNfQmxhY2ssIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JsYWNrKQ0KY29uZmludChtb2RlbF9CbGFjaylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfT3RoZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfcmFjZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQgKyBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTWV4aWNhbiwgZGVzaWduID0gZGVzX01lLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9NZSkNCmNvbmZpbnQobW9kZWxfTWUpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0hpc3BhbmljIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfd2hpdGUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX3doaXRlLCBkZXNpZ24gPSBkZXNfd2hpdGUsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX3doaXRlKQ0KY29uZmludChtb2RlbF93aGl0ZSlbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gTm9uX0hpc3BhbmljX0JsYWNrLCBkZXNpZ24gPSBkZXNfQmxhY2ssIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JsYWNrKQ0KY29uZmludChtb2RlbF9CbGFjaylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfT3RoZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCg0KI3BlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX3JhY2UgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKFJhY2UpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfcmFjZSkNCg0KbW9kZWxfTWUgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE1leGljYW4sIGRlc2lnbiA9IGRlc19NZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfTWUpDQpjb25maW50KG1vZGVsX01lKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfSGlzcGFuaWMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE90aGVyX0hpc3BhbmljLCBkZXNpZ24gPSBkZXNfSGlzcGFuaWMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0hpc3BhbmljKQ0KY29uZmludChtb2RlbF9IaXNwYW5pYylbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX3doaXRlIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBOb25fSGlzcGFuaWNfd2hpdGUsIGRlc2lnbiA9IGRlc193aGl0ZSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfd2hpdGUpDQpjb25maW50KG1vZGVsX3doaXRlKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQmxhY2sgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IE5vbl9IaXNwYW5pY19CbGFjaywgZGVzaWduID0gZGVzX0JsYWNrLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CbGFjaykNCmNvbmZpbnQobW9kZWxfQmxhY2spWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF9PdGhlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gT3RoZXJfUmFjZSwgZGVzaWduID0gZGVzX090aGVyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9PdGhlcikNCmNvbmZpbnQobW9kZWxfT3RoZXIpWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXSAgDQoNCmBgYA0KIyNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgQk1JDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KRnVsbGRhdF9QaGVubyRCTUlbaXMubmEoRnVsbGRhdF9QaGVubyRCTUkpXSA8LSAwDQpCTUlfMSA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kQk1JIDwgMjUsIF0NCkJNSV8yIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRCTUkgPj0gMjUgJiBGdWxsZGF0X1BoZW5vJEJNSSA8IDMwLCBdDQpCTUlfMyA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kQk1JID49IDMwLCBdDQoNCkZ1bGxkYXRfUGhlbm8gPC0gRnVsbGRhdF9QaGVubyAlPiUgbXV0YXRlKEJNSV9jYXQgPSBjYXNlX3doZW4oDQogIEJNSSA+PSAzMCB+ICJvYmVzaXR5IiwNCiAgQk1JIDw9IDI1IH4gIm5vcm1hbCIsDQogIFRSVUUgfiAib3ZlcndlaWdodCINCikgKQ0KDQpkZXNCTUlfMSA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IEJNSV8xKSAjc2VsZWN0IEJNSSA8IDI1DQpkZXNCTUlfMiA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IEJNSV8yKSAjc2VsZWN0IDI1ID08IEJNSSA8MzANCmRlc0JNSV8zIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gQk1JXzMpICNzZWxlY3QgPj0gMzANCg0KI1BlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX0JNSSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpCTUlfY2F0LCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfQk1JKQ0KbW9kZWxfQk1JXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8xLCBkZXNpZ24gPSBkZXNCTUlfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzEpDQpjb25maW50KG1vZGVsX0JNSV8xKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQk1JXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8yLCBkZXNpZ24gPSBkZXNCTUlfMiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzIpDQpjb25maW50KG1vZGVsX0JNSV8yKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQk1JXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8zLCBkZXNpZ24gPSBkZXNCTUlfMywgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzMpDQpjb25maW50KG1vZGVsX0JNSV8zKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0gIA0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9CTUkgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50KkJNSV9jYXQsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9CTUkpDQptb2RlbF9CTUlfMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMSwgZGVzaWduID0gZGVzQk1JXzEsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8xKQ0KY29uZmludChtb2RlbF9CTUlfMSlbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0gIA0KbW9kZWxfQk1JXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gQk1JXzIsIGRlc2lnbiA9IGRlc0JNSV8yLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CTUlfMikNCmNvbmZpbnQobW9kZWxfQk1JXzIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8zIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8zLCBkZXNpZ24gPSBkZXNCTUlfMywgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzMpDQpjb25maW50KG1vZGVsX0JNSV8zKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXSANCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfQk1JIDwtIGdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCpCTUlfY2F0LCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfQk1JKQ0KbW9kZWxfQk1JXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gQk1JXzEsIGRlc2lnbiA9IGRlc0JNSV8xLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9CTUlfMSkNCmNvbmZpbnQobW9kZWxfQk1JXzEpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IEJNSV8yLCBkZXNpZ24gPSBkZXNCTUlfMiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfQk1JXzIpDQpjb25maW50KG1vZGVsX0JNSV8yKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXSAgDQptb2RlbF9CTUlfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMywgZGVzaWduID0gZGVzQk1JXzMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8zKQ0KY29uZmludChtb2RlbF9CTUlfMylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0gDQoNCiNwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9CTUkgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqQk1JX2NhdCwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX0JNSSkNCm1vZGVsX0JNSV8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMSwgZGVzaWduID0gZGVzQk1JXzEsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8xKQ0KY29uZmludChtb2RlbF9CTUlfMSlbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMiwgZGVzaWduID0gZGVzQk1JXzIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8yKQ0KY29uZmludChtb2RlbF9CTUlfMilbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdICANCm1vZGVsX0JNSV8zIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBCTUlfMywgZGVzaWduID0gZGVzQk1JXzMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX0JNSV8zKQ0KY29uZmludChtb2RlbF9CTUlfMylbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdIA0KDQpgYGANCiNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgaW5jb21lDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KRnVsbGRhdF9QaGVubyRSYXRpb19pbmNvbWVfcG92ZXJ0eVtpcy5uYShGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5KV0gPC0gMA0KaW5jb21lXzEgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5IDw9IDEsIF0NCmluY29tZV8yIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRSYXRpb19pbmNvbWVfcG92ZXJ0eSA+IDEgJiBGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5IDwgNCwgXQ0KaW5jb21lXzMgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFJhdGlvX2luY29tZV9wb3ZlcnR5ID49IDQsIF0NCg0KDQpGdWxsZGF0X1BoZW5vIDwtIEZ1bGxkYXRfUGhlbm8gJT4lIG11dGF0ZShpbmNvbWVfY2F0ID0gY2FzZV93aGVuKA0KICBSYXRpb19pbmNvbWVfcG92ZXJ0eSA+PSA0IH4gInJpY2giLA0KICBSYXRpb19pbmNvbWVfcG92ZXJ0eSA8PSAxIH4gInBvb3IiLA0KICBUUlVFIH4gImF2ZXJhZ2UiDQopICkNCg0KZGVzaW5jb21lXzEgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBpbmNvbWVfMSkgI3NlbGVjdCBpbmNvbWUgPD0gMQ0KZGVzaW5jb21lXzIgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBpbmNvbWVfMikgI3NlbGVjdCAxIDwgaW5jb21lIDwgNA0KZGVzaW5jb21lXzMgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBpbmNvbWVfMykgI3NlbGVjdCA+PSA0DQoNCiNQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9pbmNvbWUgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKGluY29tZV9jYXQpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfaW5jb21lKQ0KbW9kZWxfaW5jb21lXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8xLCBkZXNpZ24gPSBkZXNpbmNvbWVfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzEpDQpjb25maW50KG1vZGVsX2luY29tZV8xKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2luY29tZV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMiwgZGVzaWduID0gZGVzaW5jb21lXzIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8yKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMilbIlBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9pbmNvbWVfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzMsIGRlc2lnbiA9IGRlc2luY29tZV8zLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMykNCmNvbmZpbnQobW9kZWxfaW5jb21lXzMpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9pbmNvbWUgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50KmFzLmZhY3RvcihpbmNvbWVfY2F0KSwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX2luY29tZSkNCm1vZGVsX2luY29tZV8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8xLCBkZXNpZ24gPSBkZXNpbmNvbWVfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzEpDQpjb25maW50KG1vZGVsX2luY29tZV8xKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfaW5jb21lXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzIsIGRlc2lnbiA9IGRlc2luY29tZV8yLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMikNCmNvbmZpbnQobW9kZWxfaW5jb21lXzIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9pbmNvbWVfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMywgZGVzaWduID0gZGVzaW5jb21lXzMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8zKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0NCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfaW5jb21lIDwtIGdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCphcy5mYWN0b3IoaW5jb21lX2NhdCksIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWUpDQptb2RlbF9pbmNvbWVfMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMSwgZGVzaWduID0gZGVzaW5jb21lXzEsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8xKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMSlbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2luY29tZV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8yLCBkZXNpZ24gPSBkZXNpbmNvbWVfMiwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzIpDQpjb25maW50KG1vZGVsX2luY29tZV8yKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfaW5jb21lXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzMsIGRlc2lnbiA9IGRlc2luY29tZV8zLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMykNCmNvbmZpbnQobW9kZWxfaW5jb21lXzMpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdDQoNCiNwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9pbmNvbWUgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQqYXMuZmFjdG9yKGluY29tZV9jYXQpLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfaW5jb21lKQ0KbW9kZWxfaW5jb21lXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IGluY29tZV8xLCBkZXNpZ24gPSBkZXNpbmNvbWVfMSwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfaW5jb21lXzEpDQpjb25maW50KG1vZGVsX2luY29tZV8xKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2luY29tZV8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBpbmNvbWVfMiwgZGVzaWduID0gZGVzaW5jb21lXzIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2luY29tZV8yKQ0KY29uZmludChtb2RlbF9pbmNvbWVfMilbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9pbmNvbWVfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gaW5jb21lXzMsIGRlc2lnbiA9IGRlc2luY29tZV8zLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9pbmNvbWVfMykNCmNvbmZpbnQobW9kZWxfaW5jb21lXzMpWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQpgYGANCiNmb3Igc3ViZ3JvdXAgYW5hbHlzaXMgYnkgY2FuY2VyDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KY2FuY2VyIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRoYWRfY2FuY2VyID09IDEsIF0NCmNhbmNlciRoYWRfY2FuY2VyW2lzLm5hKGNhbmNlciRoYWRfY2FuY2VyKV0gPC0gMA0KY2FuY2VyIDwtIGNhbmNlcltjYW5jZXIkaGFkX2NhbmNlciAhPSAwLCAsIGRyb3AgPSBGQUxTRV0NCg0Kbm9uX2NhbmNlciA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kaGFkX2NhbmNlciA9PSAyLCBdDQpub25fY2FuY2VyJGhhZF9jYW5jZXJbaXMubmEobm9uX2NhbmNlciRoYWRfY2FuY2VyKV0gPC0gMA0Kbm9uX2NhbmNlciA8LSBub25fY2FuY2VyW25vbl9jYW5jZXIkaGFkX2NhbmNlciAhPSAwLCAsIGRyb3AgPSBGQUxTRV0NCg0KZGVzX2NhbmNlciA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IGNhbmNlcikgDQpkZXNfbm9uX2NhbmNlciA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IG5vbl9jYW5jZXIpIA0KDQojUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudA0KbW9kZWxfY2FuY2VyIDwtIGdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50KmhhZF9jYW5jZXIsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9jYW5jZXIpDQptb2RlbF9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IGNhbmNlciwgZGVzaWduID0gZGVzX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfY2FuY2VyKQ0KY29uZmludChtb2RlbF9jYW5jZXIpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfbm9uX2NhbmNlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX25vbl9jYW5jZXIpDQpjb25maW50KG1vZGVsX25vbl9jYW5jZXIpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9jYW5jZXIgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50KmhhZF9jYW5jZXIsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9jYW5jZXIpDQptb2RlbF9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY2FuY2VyLCBkZXNpZ24gPSBkZXNfY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9jYW5jZXIpDQpjb25maW50KG1vZGVsX2NhbmNlcilbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX25vbl9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX25vbl9jYW5jZXIpDQpjb25maW50KG1vZGVsX25vbl9jYW5jZXIpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdDQoNCiNwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQNCm1vZGVsX2NhbmNlciA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQgKyBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQqaGFkX2NhbmNlciwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX2NhbmNlcikNCm1vZGVsX2NhbmNlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBjYW5jZXIsIGRlc2lnbiA9IGRlc19jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2NhbmNlcikNCmNvbmZpbnQobW9kZWxfY2FuY2VyKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfbm9uX2NhbmNlciA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfbm9uX2NhbmNlcikNCmNvbmZpbnQobW9kZWxfbm9uX2NhbmNlcilbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0NCg0KI3BlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQNCm1vZGVsX2NhbmNlciA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpoYWRfY2FuY2VyLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfY2FuY2VyKQ0KbW9kZWxfY2FuY2VyIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBjYW5jZXIsIGRlc2lnbiA9IGRlc19jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2NhbmNlcikNCmNvbmZpbnQobW9kZWxfY2FuY2VyKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX25vbl9jYW5jZXIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fY2FuY2VyKQ0KY29uZmludChtb2RlbF9ub25fY2FuY2VyKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCmBgYA0KDQojZm9yIHN1Ymdyb3VwIGFuYWx5c2lzIGJ5IHNtb2tpbmcNCmBgYHtyIGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPVRSVUV9DQpGdWxsZGF0X1BoZW5vJHF1aXRfc21va2luZ1tpcy5uYShGdWxsZGF0X1BoZW5vJHF1aXRfc21va2luZyldIDwtIDANCkZ1bGxkYXRfUGhlbm8kbm93X3Ntb2tlW2lzLm5hKEZ1bGxkYXRfUGhlbm8kbm93X3Ntb2tlKV0gPC0gMA0KY3VycmVudF9zbW9rZXJzIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRTbW9rZWRfZGF5cyA9PSAxICYgRnVsbGRhdF9QaGVubyRub3dfc21va2UgPT0gMSwgXQ0KZm9ybWVyX3Ntb2tlcnMgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJFNtb2tlZF9kYXlzID09IDEgJiBGdWxsZGF0X1BoZW5vJHF1aXRfc21va2luZyA+IDEsIF0NCmZvcm1lcl9zbW9rZXJzJHBzdVtpcy5uYShmb3JtZXJfc21va2VycyRwc3UpXSA8LSAwDQpmb3JtZXJfc21va2VycyA8LSBmb3JtZXJfc21va2Vyc1tmb3JtZXJfc21va2VycyRwc3UgIT0gMCwgLCBkcm9wID0gRkFMU0VdDQoNCm5vbl9zbW9rZXJzIDwtIEZ1bGxkYXRfUGhlbm9bRnVsbGRhdF9QaGVubyRTbW9rZWRfZGF5cyA9PSAyLCBdDQpub25fc21va2VycyRTbW9rZWRfZGF5c1tpcy5uYShub25fc21va2VycyRTbW9rZWRfZGF5cyldIDwtIDANCm5vbl9zbW9rZXJzIDwtIG5vbl9zbW9rZXJzW25vbl9zbW9rZXJzJFNtb2tlZF9kYXlzICE9IDAsICwgZHJvcCA9IEZBTFNFXQ0KDQojc2VsZWN0IGhvc2Ugd2hvIHdlcmUgY29uc2lkZXJlZCBjdXJyZW50IHNtb2tlcnMgc21va2VkIG9uIGEgcmVndWxhciBiYXNpcyBhbmQgaGFkIHNtb2tlZCBhdCBsZWFzdCAxMDAgY2lnYXJldHRlcyBpbiB0aGVpciBsaWZldGltZS4NCmRlc2N1cnJlbnRfc21va2VycyA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IGN1cnJlbnRfc21va2VycykNCiNzZWxlY3QgRm9ybWVyIHNtb2tlcnMgaGFkIHNtb2tlZCBhdCBsZWFzdCAxMDAgY2lnYXJldHRlcyBhbmQgaGFkIHNpbmNlIHF1aXQuDQpkZXNmb3JtZXJfc21va2VycyA8LSBzdnlkZXNpZ24oaWQgPX4gcHN1LCBzdHJhdGEgPX4gU3RyYXRhLCB3ZWlnaHRzID1+IHdlaWdodF8yLCBuZXN0ID0gVFJVRSwgZGF0YSA9IGZvcm1lcl9zbW9rZXJzKSANCiNzZWxlY3QgTm9uLXNtb2tlcnMgaGFkIGVpdGhlciBuZXZlciBzbW9rZWQgb3Igc21va2VkIGZld2VyIHRoYW4gMTAwIGNpZ2FyZXR0ZXMNCmRlc25vbl9zbW9rZXJzIDwtIHN2eWRlc2lnbihpZCA9fiBwc3UsIHN0cmF0YSA9fiBTdHJhdGEsIHdlaWdodHMgPX4gd2VpZ2h0XzIsIG5lc3QgPSBUUlVFLCBkYXRhID0gbm9uX3Ntb2tlcnMpIA0KDQoNCiNQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9zbW9rZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpub3dfc21va2UsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9zbW9rZSkNCm1vZGVsX2N1cnJlbnRfc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY3VycmVudF9zbW9rZXJzLCBkZXNpZ24gPSBkZXNjdXJyZW50X3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2N1cnJlbnRfc21va2VycykNCmNvbmZpbnQobW9kZWxfY3VycmVudF9zbW9rZXJzKVsiUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2Zvcm1lcl9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBmb3JtZXJfc21va2VycywgZGVzaWduID0gZGVzZm9ybWVyX3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2Zvcm1lcl9zbW9rZXJzKQ0KY29uZmludChtb2RlbF9mb3JtZXJfc21va2VycylbIlBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9ub25fc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc25vbl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fc21va2VycykNCmNvbmZpbnQobW9kZWxfbm9uX3Ntb2tlcnMpWyJQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQojUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50DQptb2RlbF9zbW9rZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQgKyBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQqbm93X3Ntb2tlLCBkYXRhID0gRnVsbGRhdF9QaGVubykNCnN1bW1hcnkobW9kZWxfc21va2UpDQptb2RlbF9jdXJyZW50X3Ntb2tlcnMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY3VycmVudF9zbW9rZXJzLCBkZXNpZ24gPSBkZXNjdXJyZW50X3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2N1cnJlbnRfc21va2VycykNCmNvbmZpbnQobW9kZWxfY3VycmVudF9zbW9rZXJzKVsiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfZm9ybWVyX3Ntb2tlcnMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gZm9ybWVyX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc2Zvcm1lcl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9mb3JtZXJfc21va2VycykNCmNvbmZpbnQobW9kZWxfZm9ybWVyX3Ntb2tlcnMpWyJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9ub25fc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBub25fc21va2VycywgZGVzaWduID0gZGVzbm9uX3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX25vbl9zbW9rZXJzKQ0KY29uZmludChtb2RlbF9ub25fc21va2VycylbIlBlcmZsdW9yb25vbmFub2ljX2FjaWRfY29tbWVudCIsIF0NCg0KI3BlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudA0KbW9kZWxfc21va2UgPC0gZ2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50Km5vd19zbW9rZSwgZGF0YSA9IEZ1bGxkYXRfUGhlbm8pDQpzdW1tYXJ5KG1vZGVsX3Ntb2tlKQ0KbW9kZWxfY3VycmVudF9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGN1cnJlbnRfc21va2VycywgZGVzaWduID0gZGVzY3VycmVudF9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9jdXJyZW50X3Ntb2tlcnMpDQpjb25maW50KG1vZGVsX2N1cnJlbnRfc21va2VycylbInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2Zvcm1lcl9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IGZvcm1lcl9zbW9rZXJzLCBkZXNpZ24gPSBkZXNmb3JtZXJfc21va2VycywgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfZm9ybWVyX3Ntb2tlcnMpDQpjb25maW50KG1vZGVsX2Zvcm1lcl9zbW9rZXJzKVsicGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50IiwgXQ0KbW9kZWxfbm9uX3Ntb2tlcnMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc25vbl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fc21va2VycykNCmNvbmZpbnQobW9kZWxfbm9uX3Ntb2tlcnMpWyJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkX2NvbW1lbnQiLCBdDQoNCiNwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50DQptb2RlbF9zbW9rZSA8LSBnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCpub3dfc21va2UsIGRhdGEgPSBGdWxsZGF0X1BoZW5vKQ0Kc3VtbWFyeShtb2RlbF9zbW9rZSkNCm1vZGVsX2N1cnJlbnRfc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gY3VycmVudF9zbW9rZXJzLCBkZXNpZ24gPSBkZXNjdXJyZW50X3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2N1cnJlbnRfc21va2VycykNCmNvbmZpbnQobW9kZWxfY3VycmVudF9zbW9rZXJzKVsicGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCIsIF0NCm1vZGVsX2Zvcm1lcl9zbW9rZXJzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBmb3JtZXJfc21va2VycywgZGVzaWduID0gZGVzZm9ybWVyX3Ntb2tlcnMsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX2Zvcm1lcl9zbW9rZXJzKQ0KY29uZmludChtb2RlbF9mb3JtZXJfc21va2VycylbInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiLCBdDQptb2RlbF9ub25fc21va2VycyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX3Ntb2tlcnMsIGRlc2lnbiA9IGRlc25vbl9zbW9rZXJzLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9ub25fc21va2VycykNCmNvbmZpbnQobW9kZWxfbm9uX3Ntb2tlcnMpWyJwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50IiwgXQ0KDQpgYGANCg0KDQoNCg0KDQoNCiNzZW5zaXRpdml0eSBhbmFseXNpcyB3aXRob3V0IGNhbmNlciBwYXRpZW50IG9ubHkgZm9yIHBmYXMNCmBgYHtyfQ0KI3N1YnNldCBjYW5jZXINCmNhbmNlciA8LSBGdWxsZGF0X1BoZW5vW0Z1bGxkYXRfUGhlbm8kaGFkX2NhbmNlciA9PSAxLCBdDQpjYW5jZXIkaGFkX2NhbmNlcltpcy5uYShjYW5jZXIkaGFkX2NhbmNlcildIDwtIDANCmNhbmNlciA8LSBjYW5jZXJbY2FuY2VyJGhhZF9jYW5jZXIgIT0gMCwgLCBkcm9wID0gRkFMU0VdDQoNCm5vbl9jYW5jZXIgPC0gRnVsbGRhdF9QaGVub1tGdWxsZGF0X1BoZW5vJGhhZF9jYW5jZXIgPT0gMiwgXQ0Kbm9uX2NhbmNlciRoYWRfY2FuY2VyW2lzLm5hKG5vbl9jYW5jZXIkaGFkX2NhbmNlcildIDwtIDANCm5vbl9jYW5jZXIgPC0gbm9uX2NhbmNlcltub25fY2FuY2VyJGhhZF9jYW5jZXIgIT0gMCwgLCBkcm9wID0gRkFMU0VdDQoNCmRlc19jYW5jZXIgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBjYW5jZXIpIA0KZGVzX25vbl9jYW5jZXIgPC0gc3Z5ZGVzaWduKGlkID1+IHBzdSwgc3RyYXRhID1+IFN0cmF0YSwgd2VpZ2h0cyA9fiB3ZWlnaHRfMiwgbmVzdCA9IFRSVUUsIGRhdGEgPSBub25fY2FuY2VyKSANCmBgYA0KDQojc2Vuc2l0aXZpdHkgUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWQNCmBgYHtyIGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPVRSVUV9DQojYmluYXJ5IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkDQojbW9kZWxfMSAtLSBub24tYWRqdXN0ZWQNCm1vZGVsXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3JvaGV4YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMSkNCmNvbmZpbnQobW9kZWxfMSkNCg0KI21vZGVsXzIgLS0gYWRqdXN0ZWQgZm9yIGNocm9ub2xvZ2ljYWxfYWdlLCBHZW5kZXIsIFJhY2UsIENEQUksIE1hcml0YWxfU3RhdHVzIGFuZCBmYW1pbHkgUmF0aW9faW5jb21lX3BvdmVydHkuDQptb2RlbF8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQgKyBHZW5kZXIgKyBSYWNlICsgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eQ0KICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8yKQ0KY29uZmludChtb2RlbF8yKQ0KDQojbW9kZWxfMyAtLSBhZGp1c3RlZCBmb3IgQk1JICsgc2xlZXBfZGlzb3JkZXJzICsgU21va2VkX2RheXMgKyBBdmdfYWxjb2hvbF9kcmlua3MgKyBoYWRfY2FuY2VyLg0KbW9kZWxfMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkgDQogICAgICAgICAgICAgICAgICArIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgbm93X3Ntb2tlICsgcXVpdF9zbW9raW5nICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlcg0KICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8zKQ0KY29uZmludChtb2RlbF8zKQ0KDQoNCiNjb250aW51b3VzIFBlcmZsdW9yb2hleGFuZV9zdWxmb25pY19hY2lkDQptb2RlbF9YMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZCksIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDEpDQpjb25maW50KG1vZGVsX1gxKQ0KDQptb2RlbF9YMiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZCkgKyBHZW5kZXIgKyBSYWNlICsgIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkNCiAgICAgICAgICAgICAgICAgICAsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDIpDQpjb25maW50KG1vZGVsX1gyKQ0KDQptb2RlbF9YMyA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9oZXhhbmVfc3VsZm9uaWNfYWNpZCkrIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXIsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDMpDQpjb25maW50KG1vZGVsX1gzKQ0KYGBgDQoNCiNzZW5zaXRpdml0eSAiUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZCIgICJQZXJmbHVvcm9ub25hbm9pY19hY2lkX2NvbW1lbnQiICANCmBgYHtyIGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSx3YXJuaW5nPVRSVUV9DQojYmluYXJ5DQojbW9kZWxfMSAtLSBub24tYWRqdXN0ZWQNCm1vZGVsXzEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50LCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8xKQ0KY29uZmludChtb2RlbF8xKQ0KDQojbW9kZWxfMiAtLSBhZGp1c3RlZCBmb3IgY2hyb25vbG9naWNhbF9hZ2UsIEdlbmRlciwgUmFjZSwgQ0RBSSwgTWFyaXRhbF9TdGF0dXMgYW5kIGZhbWlseSBSYXRpb19pbmNvbWVfcG92ZXJ0eS4NCm1vZGVsXzIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkNCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMikNCmNvbmZpbnQobW9kZWxfMikNCg0KI21vZGVsXzMgLS0gYWRqdXN0ZWQgZm9yIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlci4NCm1vZGVsXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkgDQogICAgICAgICAgICAgICAgICArIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgbm93X3Ntb2tlICsgcXVpdF9zbW9raW5nICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlcg0KICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpIA0Kc3VtbWFyeShtb2RlbF8zKQ0KY29uZmludChtb2RlbF8zKQ0KDQoNCiNjb250aW51b3VzDQptb2RlbF9YMSA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihQZXJmbHVvcm9ub25hbm9pY19hY2lkKSwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9YMSkNCmNvbmZpbnQobW9kZWxfWDEpDQoNCm1vZGVsX1gyIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IGxuKFBlcmZsdW9yb25vbmFub2ljX2FjaWQpICsgR2VuZGVyICsgUmFjZSArICBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5DQogICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gyKQ0KY29uZmludChtb2RlbF9YMikNCg0KbW9kZWxfWDMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4oUGVyZmx1b3Jvbm9uYW5vaWNfYWNpZCkrIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXIsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDMpDQpjb25maW50KG1vZGVsX1gzKQ0KYGBgDQoNCg0KI3NlbnNpdGl2aXR5ICJwZXJmbHVvcm9vY3Rhbm9pY19hY2lkIiAgInBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCIgICAgDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KI2JpbmFyeQ0KI21vZGVsXzEgLS0gbm9uLWFkanVzdGVkDQptb2RlbF8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMSkNCmNvbmZpbnQobW9kZWxfMSkNCg0KI21vZGVsXzIgLS0gYWRqdXN0ZWQgZm9yIGNocm9ub2xvZ2ljYWxfYWdlLCBHZW5kZXIsIFJhY2UsIENEQUksIE1hcml0YWxfU3RhdHVzIGFuZCBmYW1pbHkgUmF0aW9faW5jb21lX3BvdmVydHkuDQptb2RlbF8yIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5DQogICAgICAgICAgICAgICAgICAsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikgDQpzdW1tYXJ5KG1vZGVsXzIpDQpjb25maW50KG1vZGVsXzIpDQoNCiNtb2RlbF8zIC0tIGFkanVzdGVkIGZvciBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXIuDQptb2RlbF8zIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFub2ljX2FjaWRfY29tbWVudCArIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXINCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMykNCmNvbmZpbnQobW9kZWxfMykNCg0KDQojY29udGludW91cw0KbW9kZWxfWDEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5vaWNfYWNpZCksIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikNCnN1bW1hcnkobW9kZWxfWDEpDQpjb25maW50KG1vZGVsX1gxKQ0KDQptb2RlbF9YMiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBsbihwZXJmbHVvcm9vY3Rhbm9pY19hY2lkKSArIEdlbmRlciArIFJhY2UgKyAgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eQ0KICAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKQ0Kc3VtbWFyeShtb2RlbF9YMikNCmNvbmZpbnQobW9kZWxfWDIpDQoNCm1vZGVsX1gzIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IGxuKHBlcmZsdW9yb29jdGFub2ljX2FjaWQpKyBHZW5kZXIgKyBSYWNlICsgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eSANCiAgICAgICAgICAgICAgICAgICsgQk1JICsgc2xlZXBfZGlzb3JkZXJzICsgU21va2VkX2RheXMgKyBub3dfc21va2UgKyBxdWl0X3Ntb2tpbmcgKyBBdmdfYWxjb2hvbF9kcmlua3MgKyBoYWRfY2FuY2VyLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gzKQ0KY29uZmludChtb2RlbF9YMykNCmBgYA0KDQojc2Vuc2l0aXZpdHkgInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkIiAgICAgInBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQiDQpgYGB7ciBlY2hvPUZBTFNFLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1UUlVFfQ0KI2JpbmFyeQ0KI21vZGVsXzEgLS0gbm9uLWFkanVzdGVkDQptb2RlbF8xIDwtIHN2eWdsbShQaGVub3R5cGljX0FnZSB+IHBlcmZsdW9yb29jdGFuZV9zdWxmb25pY19hY2lkX2NvbW1lbnQsIGRhdGEgPSBub25fY2FuY2VyLCBkZXNpZ24gPSBkZXNfbm9uX2NhbmNlciwgZmFtaWx5ID0gImdhdXNzaWFuIikgDQpzdW1tYXJ5KG1vZGVsXzEpDQpjb25maW50KG1vZGVsXzEpDQoNCiNtb2RlbF8yIC0tIGFkanVzdGVkIGZvciBjaHJvbm9sb2dpY2FsX2FnZSwgR2VuZGVyLCBSYWNlLCBDREFJLCBNYXJpdGFsX1N0YXR1cyBhbmQgZmFtaWx5IFJhdGlvX2luY29tZV9wb3ZlcnR5Lg0KbW9kZWxfMiA8LSBzdnlnbG0oUGhlbm90eXBpY19BZ2UgfiBwZXJmbHVvcm9vY3RhbmVfc3VsZm9uaWNfYWNpZF9jb21tZW50ICsgR2VuZGVyICsgUmFjZSArIE1hcml0YWxfU3RhdHVzICsgUmF0aW9faW5jb21lX3BvdmVydHkNCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMikNCmNvbmZpbnQobW9kZWxfMikNCg0KI21vZGVsXzMgLS0gYWRqdXN0ZWQgZm9yIEJNSSArIHNsZWVwX2Rpc29yZGVycyArIFNtb2tlZF9kYXlzICsgQXZnX2FsY29ob2xfZHJpbmtzICsgaGFkX2NhbmNlci4NCm1vZGVsXzMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gcGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWRfY29tbWVudCArIEdlbmRlciArIFJhY2UgKyBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5IA0KICAgICAgICAgICAgICAgICAgKyBCTUkgKyBzbGVlcF9kaXNvcmRlcnMgKyBTbW9rZWRfZGF5cyArIG5vd19zbW9rZSArIHF1aXRfc21va2luZyArIEF2Z19hbGNvaG9sX2RyaW5rcyArIGhhZF9jYW5jZXINCiAgICAgICAgICAgICAgICAgICwgZGF0YSA9IG5vbl9jYW5jZXIsIGRlc2lnbiA9IGRlc19ub25fY2FuY2VyLCBmYW1pbHkgPSAiZ2F1c3NpYW4iKSANCnN1bW1hcnkobW9kZWxfMykNCmNvbmZpbnQobW9kZWxfMykNCg0KDQojY29udGludW91cw0KbW9kZWxfWDEgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWQpLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gxKQ0KY29uZmludChtb2RlbF9YMSkNCg0KbW9kZWxfWDIgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWQpICsgR2VuZGVyICsgUmFjZSArICBNYXJpdGFsX1N0YXR1cyArIFJhdGlvX2luY29tZV9wb3ZlcnR5DQogICAgICAgICAgICAgICAgICAgLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gyKQ0KY29uZmludChtb2RlbF9YMikNCg0KbW9kZWxfWDMgPC0gc3Z5Z2xtKFBoZW5vdHlwaWNfQWdlIH4gbG4ocGVyZmx1b3Jvb2N0YW5lX3N1bGZvbmljX2FjaWQpKyBHZW5kZXIgKyBSYWNlICsgTWFyaXRhbF9TdGF0dXMgKyBSYXRpb19pbmNvbWVfcG92ZXJ0eSANCiAgICAgICAgICAgICAgICAgICsgQk1JICsgc2xlZXBfZGlzb3JkZXJzICsgU21va2VkX2RheXMgKyBub3dfc21va2UgKyBxdWl0X3Ntb2tpbmcgKyBBdmdfYWxjb2hvbF9kcmlua3MgKyBoYWRfY2FuY2VyLCBkYXRhID0gbm9uX2NhbmNlciwgZGVzaWduID0gZGVzX25vbl9jYW5jZXIsIGZhbWlseSA9ICJnYXVzc2lhbiIpDQpzdW1tYXJ5KG1vZGVsX1gzKQ0KY29uZmludChtb2RlbF9YMykNCmBgYA0KDQoNCg0K