Packages and dataset

library(tidyverse)
library(stargazer)
library(ggthemes)
library(fifer)
options(digits = 3)
# df <- read.csv2("df.csv", header = T, sep = ";")
df <- read_csv2("df.csv", na = c("", " ", "NA"))
df <- df[, !duplicated(colnames(df))]
 df <- df %>% 
        select(-c(C37V:Trauma_37))
Error in select(., -c(C37V:Trauma_37)) : 
  unused argument (-c(C37V:Trauma_37))
dim(df)
[1] 2138  416

Exploratory Data Analysis

df %>% 
  group_by(RegionName, `1_gender`) %>% 
  summarise(n=n()) %>% 
  spread(`1_gender`, n)
addmargins(table(df$RegionName, df$`1_gender`))
         
             F    M  Sum
  Kurzeme  145  144  289
  Latgale  157  137  294
  Pieriga  198  215  413
  Riga     292  353  645
  Vidzeme   86  116  202
  Zemgale  153  142  295
  Sum     1031 1107 2138

FAS

df %>% 
        group_by(`2_Live_in`, FAS) %>% 
        summarise( n = n() ) %>% 
        spread(FAS, n, fill = 0)
df %>% 
        group_by(`1_gender`, FAS) %>% 
        summarise( n = n()) %>% 
        spread(FAS, n)

Prevalence caries

Children with at least one tooth with D1

nrow(subset(df, D1T > 0))
[1] 2023

Children with at least one tooth with D3

nrow(subset(df,D3T > 0))
[1] 937

Children with at least one tooth with D5

nrow(subset(df,D5T > 0))
[1] 470

Children with at least one tooth with F

nrow(subset(df, FT > 0))
[1] 1411

Children with at least one tooth with M

nrow(subset(df, MT > 0))
[1] 36

Children with at least one tooth with D1MFT

nrow(subset(df, D1MFT > 0))
[1] 2105

Children with at least one tooth with D3MFT

nrow(subset(df, D3MFT > 0))
[1] 1705

DMFS

All

df %>% 
  summarise_each(funs(mean, median, sd) , D1S:Sealants)
df %>% 
  summarise_each(funs(quantile(., probs = 0.25)) , D1S:Sealants)
df %>% 
  summarise_each(funs(quantile(., probs = 0.75)) , D1S:Sealants)

Recode D3MFT in 0, 1

df <- df %>% 
        mutate( bin.D3T = ifelse(D3MFT == 0, 0, 1))
df$bin.D3T <- as.factor(df$bin.D3T)

Comparison by gender, DMFT and DMFS

df %>% 
        group_by(`1_gender`) %>% 
        summarise_each(funs(mean) , D1T:Sealants)
t.test(df$D1T~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D1T by df$`1_gender`
t = -1, df = 2000, p-value = 0.2
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.59  0.14
sample estimates:
mean in group F mean in group M 
           5.74            5.96 
t.test(df$D3T~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D3T by df$`1_gender`
t = 1, df = 2000, p-value = 0.3
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0537  0.1744
sample estimates:
mean in group F mean in group M 
          0.919           0.858 
t.test(df$D5T~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D5T by df$`1_gender`
t = -0.5, df = 2000, p-value = 0.6
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.112  0.066
sample estimates:
mean in group F mean in group M 
          0.400           0.423 
t.test(df$FT~df$`1_gender`)

    Welch Two Sample t-test

data:  df$FT by df$`1_gender`
t = 2, df = 2000, p-value = 0.08
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0227  0.3572
sample estimates:
mean in group F mean in group M 
           2.12            1.95 
t.test(df$MT~df$`1_gender`)

    Welch Two Sample t-test

data:  df$MT by df$`1_gender`
t = 0.8, df = 2000, p-value = 0.4
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.00801  0.02024
sample estimates:
mean in group F mean in group M 
         0.0233          0.0172 
t.test(df$D1MFT~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D1MFT by df$`1_gender`
t = -0.06, df = 2000, p-value = 1
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.469  0.440
sample estimates:
mean in group F mean in group M 
           9.20            9.21 
t.test(df$D3MFT~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D3MFT by df$`1_gender`
t = 2, df = 2000, p-value = 0.1
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0439  0.4650
sample estimates:
mean in group F mean in group M 
           3.46            3.25 
t.test(df$D5MFT~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D5MFT by df$`1_gender`
t = 1, df = 2000, p-value = 0.2
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.061  0.361
sample estimates:
mean in group F mean in group M 
           2.54            2.39 
t.test(df$D1S~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D1S by df$`1_gender`
t = -2, df = 2000, p-value = 0.1
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.610  0.161
sample estimates:
mean in group F mean in group M 
           12.3            13.0 
t.test(df$D3S~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D3S by df$`1_gender`
t = 0.4, df = 2000, p-value = 0.7
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.113  0.162
sample estimates:
mean in group F mean in group M 
           1.03            1.00 
t.test(df$D5S~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D5S by df$`1_gender`
t = -1, df = 2000, p-value = 0.3
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2595  0.0761
sample estimates:
mean in group F mean in group M 
          0.572           0.664 
t.test(df$FS~df$`1_gender`)

    Welch Two Sample t-test

data:  df$FS by df$`1_gender`
t = 0.5, df = 2000, p-value = 0.6
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.249  0.436
sample estimates:
mean in group F mean in group M 
           3.28            3.19 
t.test(df$MS~df$`1_gender`)

    Welch Two Sample t-test

data:  df$MS by df$`1_gender`
t = 0.6, df = 2000, p-value = 0.5
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0480  0.0901
sample estimates:
mean in group F mean in group M 
         0.1096          0.0885 
t.test(df$D1MFS~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D1MFS by df$`1_gender`
t = -1, df = 2000, p-value = 0.2
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.789  0.435
sample estimates:
mean in group F mean in group M 
           17.2            17.9 
t.test(df$D3MFS~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D3MFS by df$`1_gender`
t = 0.2, df = 2000, p-value = 0.8
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.428  0.522
sample estimates:
mean in group F mean in group M 
           4.99            4.95 
t.test(df$D5MFS~df$`1_gender`)

    Welch Two Sample t-test

data:  df$D5MFS by df$`1_gender`
t = 0.1, df = 2000, p-value = 0.9
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.395  0.441
sample estimates:
mean in group F mean in group M 
           3.96            3.94 
t.test(df$Sealants~df$`1_gender`)

    Welch Two Sample t-test

data:  df$Sealants by df$`1_gender`
t = 0.4, df = 2000, p-value = 0.7
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0473  0.0695
sample estimates:
mean in group F mean in group M 
          0.148           0.137 
df.long <- df %>%
        gather("byTooth", "valueByTooth", D1T:D5MFT) %>% 
        gather("bySurface", "valueBySurface", D1S:Sealants)
df.long$byTooth <- ordered(df.long$byTooth, levels = c(
        "D1T", "D3T", "D5T", "FT",
        "MT", "D1MFT", "D3MFT", "D5MFT"))
df.long$bySurface <- ordered(df.long$bySurface, levels = c(
         "D1S", "D3S", "D5S", "FS", "MS",
         "D1MFS", "D3MFS", "D5MFS", "Sealants"))
df.long %>% 
        ggplot(aes(factor(byTooth), valueByTooth)) +
        geom_boxplot(aes( fill = `1_gender` ) ) + 
        theme_minimal() +
        labs(title = " ", x = " ", y = "Zobi", color = "Dzimums\n")+
        ggsave("./plots/dmftByGender.png", width=8, height=6, dpi=250)

df.long %>% 
        ggplot(aes(factor(bySurface), valueBySurface)) +
        geom_boxplot(aes(fill = factor(`1_gender`))) + 
        theme_minimal() +
        labs(title = " ", x = " ", y = "Zobi", color = "Dzimums\n") +
        ggsave("./plots/dmfsByGender.png", width=8, height=6, dpi=250)

by region

Prevalence region

df %>% 
        group_by(RegionName, bin.D3T) %>% 
        summarise(n=n()) %>% 
        spread(bin.D3T, n)
regionxD3T <- table(df$RegionName, df$bin.D3T) 
chisq.test(regionxD3T)

    Pearson's Chi-squared test

data:  regionxD3T
X-squared = 20, df = 5, p-value = 0.005
chisq.post.hoc(regionxD3T)
Adjusted p-values used the fdr method.

Severity region

df %>% 
        group_by(RegionName) %>% 
        summarise_each(funs(mean) , D1T:Sealants)
summary(aov(df$D3MFT~df$RegionName))
                Df Sum Sq Mean Sq F value  Pr(>F)    
df$RegionName    5    240    48.0    5.38 6.3e-05 ***
Residuals     2132  19028     8.9                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
TukeyHSD(aov(df$D3MFT~df$RegionName))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = df$D3MFT ~ df$RegionName)

$`df$RegionName`
                   diff      lwr     upr p adj
Latgale-Kurzeme  0.8137  0.10785  1.5195 0.013
Pieriga-Kurzeme  0.2460 -0.40754  0.8994 0.892
Riga-Kurzeme     0.1520 -0.45121  0.7551 0.980
Vidzeme-Kurzeme  0.9262  0.14470  1.7076 0.010
Zemgale-Kurzeme  0.7602  0.05499  1.4655 0.026
Pieriga-Latgale -0.5677 -1.21796  0.0825 0.127
Riga-Latgale    -0.6617 -1.26135 -0.0621 0.021
Vidzeme-Latgale  0.1125 -0.66625  0.8912 0.998
Zemgale-Latgale -0.0535 -0.75567  0.6488 1.000
Riga-Pieriga    -0.0940 -0.63101  0.4430 0.996
Vidzeme-Pieriga  0.6802 -0.05140  1.4118 0.086
Zemgale-Pieriga  0.5143 -0.13529  1.1639 0.212
Vidzeme-Riga     0.7742  0.08717  1.4613 0.017
Zemgale-Riga     0.6083  0.00936  1.2072 0.044
Zemgale-Vidzeme -0.1659 -0.94413  0.6123 0.990
df.long %>% 
        ggplot(aes(factor(bySurface), valueBySurface)) +
        geom_boxplot(aes(fill = factor(RegionName))) + 
        theme_minimal() +
        labs(title = " ", x = " ", y = "Zobi", color = "Dzimums\n") +
        ggsave("./plots/dmfsByRegion.png", width=8, height=6, dpi=250)

TukeyHSD(aov(df$D3MFT~df$RegionName))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = df$D3MFT ~ df$RegionName)

$`df$RegionName`
                   diff      lwr     upr p adj
Latgale-Kurzeme  0.8137  0.10785  1.5195 0.013
Pieriga-Kurzeme  0.2460 -0.40754  0.8994 0.892
Riga-Kurzeme     0.1520 -0.45121  0.7551 0.980
Vidzeme-Kurzeme  0.9262  0.14470  1.7076 0.010
Zemgale-Kurzeme  0.7602  0.05499  1.4655 0.026
Pieriga-Latgale -0.5677 -1.21796  0.0825 0.127
Riga-Latgale    -0.6617 -1.26135 -0.0621 0.021
Vidzeme-Latgale  0.1125 -0.66625  0.8912 0.998
Zemgale-Latgale -0.0535 -0.75567  0.6488 1.000
Riga-Pieriga    -0.0940 -0.63101  0.4430 0.996
Vidzeme-Pieriga  0.6802 -0.05140  1.4118 0.086
Zemgale-Pieriga  0.5143 -0.13529  1.1639 0.212
Vidzeme-Riga     0.7742  0.08717  1.4613 0.017
Zemgale-Riga     0.6083  0.00936  1.2072 0.044
Zemgale-Vidzeme -0.1659 -0.94413  0.6123 0.990
TukeyHSD(aov(df$D3MFS~df$RegionName))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = df$D3MFS ~ df$RegionName)

$`df$RegionName`
                   diff     lwr   upr p adj
Latgale-Kurzeme  1.0610 -0.2634 2.385 0.200
Pieriga-Kurzeme  0.7550 -0.4711 1.981 0.494
Riga-Kurzeme     0.5858 -0.5459 1.718 0.679
Vidzeme-Kurzeme  1.8483  0.3820 3.315 0.004
Zemgale-Kurzeme  0.8296 -0.4937 2.153 0.474
Pieriga-Latgale -0.3060 -1.5260 0.914 0.980
Riga-Latgale    -0.4752 -1.6003 0.650 0.835
Vidzeme-Latgale  0.7873 -0.6739 2.248 0.640
Zemgale-Latgale -0.2314 -1.5490 1.086 0.996
Riga-Pieriga    -0.1692 -1.1768 0.838 0.997
Vidzeme-Pieriga  1.0933 -0.2794 2.466 0.206
Zemgale-Pieriga  0.0746 -1.1442 1.293 1.000
Vidzeme-Riga     1.2625 -0.0266 2.552 0.059
Zemgale-Riga     0.2438 -0.8800 1.368 0.990
Zemgale-Vidzeme -1.0187 -2.4789 0.441 0.348
df.long %>% 
        ggplot(aes(factor(byTooth), valueByTooth)) +
        geom_boxplot(aes(fill = factor(RegionName))) + 
        theme_minimal() +
        labs(title = " ", x = " ", y = "Zobi", color = "Dzimums\n") +
        ggsave("./plots/dmftByRegion.png", width=8, height=6, dpi=250)

by FAS

Prevalence FAS

chisq.test(df$bin.D3T, df$FAS_cat)

Severity FAS

df %>% 
        group_by(FAS_cat) %>% 
        summarise_each(funs(mean) , D1T:Sealants)
TukeyHSD(aov(df$D3MFT~df$FAS_cat))

By live in

df %>% 
        group_by(`2_Live_in`, bin.D3T) %>% 
        summarise(n=n()) %>% 
        spread(bin.D3T, n)
chisq.test(df$`2_Live_in`, df$bin.D3T)
df %>% 
        group_by(`2_Live_in`) %>% 
        summarise_each(funs(mean) , D1T:Sealants)
TukeyHSD(aov(df$D3MFT~df$`2_Live_in`))

Sugar

df$tsp_daily <- as.numeric(df$tsp_daily)

Elimino los outliers

outlierKD <- function(dt, var) {
     var_name <- eval(substitute(var),eval(dt))
     tot <- sum(!is.na(var_name))
     na1 <- sum(is.na(var_name))
     m1 <- mean(var_name, na.rm = T)
     par(mfrow=c(2, 2), oma=c(0,0,3,0))
     boxplot(var_name, main="With outliers")
     hist(var_name, main="With outliers", xlab=NA, ylab=NA)
     outlier <- boxplot.stats(var_name)$out
     mo <- mean(outlier)
     var_name <- ifelse(var_name %in% outlier, NA, var_name)
     boxplot(var_name, main="Without outliers")
     hist(var_name, main="Without outliers", xlab=NA, ylab=NA)
     title("Outlier Check", outer=TRUE)
     na2 <- sum(is.na(var_name))
     cat("Outliers identified:", na2 - na1, "\n")
     cat("Propotion (%) of outliers:", round((na2 - na1) / tot*100, 1), "\n")
     cat("Mean of the outliers:", round(mo, 2), "\n")
     m2 <- mean(var_name, na.rm = T)
     cat("Mean without removing outliers:", round(m1, 2), "\n")
     cat("Mean if we remove outliers:", round(m2, 2), "\n")
     response <- readline(prompt="Do you want to remove outliers and to replace with NA? [yes/no]: ")
     if(response == "y" | response == "yes"){
          dt[as.character(substitute(var))] <- invisible(var_name)
          assign(as.character(as.list(match.call())$dt), dt, envir = .GlobalEnv)
          cat("Outliers successfully removed", "\n")
          return(invisible(dt))
     } else{
          cat("Nothing changed", "\n")
          return(invisible(var_name))
     }
}
df.log$df.log$tsp_daily <- ifelse(df.log$df.log$tsp_daily < 5, 0 ,1)
Unknown column 'df.log'Unknown column 'df.log'

Sugar

TukeyHSD(aov(df$tsp_daily ~ df$RegionName))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = df$tsp_daily ~ df$RegionName)

$`df$RegionName`
                   diff    lwr     upr p adj
Latgale-Kurzeme  1.1131  0.456  1.7706 0.000
Pieriga-Kurzeme  0.4413 -0.166  1.0483 0.302
Riga-Kurzeme     0.2259 -0.336  0.7878 0.862
Vidzeme-Kurzeme  0.0109 -0.712  0.7334 1.000
Zemgale-Kurzeme  0.3814 -0.274  1.0371 0.559
Pieriga-Latgale -0.6718 -1.276 -0.0680 0.019
Riga-Latgale    -0.8872 -1.446 -0.3288 0.000
Vidzeme-Latgale -1.1021 -1.822 -0.3824 0.000
Zemgale-Latgale -0.7317 -1.384 -0.0789 0.018
Riga-Pieriga    -0.2153 -0.713  0.2826 0.820
Vidzeme-Pieriga -0.4303 -1.104  0.2436 0.452
Zemgale-Pieriga -0.0599 -0.662  0.5420 1.000
Vidzeme-Riga    -0.2150 -0.849  0.4186 0.928
Zemgale-Riga     0.1554 -0.401  0.7118 0.968
Zemgale-Vidzeme  0.3704 -0.348  1.0886 0.683
df[tsp_daily_cat] <- NA
Error in `[<-.data.frame`(`*tmp*`, tsp_daily_cat, value = NA) : 
  object 'tsp_daily_cat' not found

DIETA

ggplot(df, aes(x=tsp_daily)) + geom_histogram()
sd(df$tsp_daily, na.rm = T)

Regresion

df.log <- df
df.log$`8_Frequency_of_toothbrushing`[df.log$`8_Frequency_of_toothbrushing`=="Once per day"] <- "0"
df.log$`8_Frequency_of_toothbrushing`[df.log$`8_Frequency_of_toothbrushing`=="Two or more times per day"] <- "0"
df.log$`1_gender` <- ifelse(df.log$`1_gender`  == "F", 0 ,1)
df.log$FAS_cat <- ifelse(df.log$FAS_cat  == "High affluence", 0 ,1)
df.log$`8_Frequency_of_toothbrushing` <- ifelse(df.log$`8_Frequency_of_toothbrushing`  == "0", 0 ,1)
df.log$`4_Frequency_of_dentist_visits_in_last_12_months` <- ifelse(df.log$`4_Frequency_of_dentist_visits_in_last_12_months`  == "Two or more times", 0 ,1)
df.log$`7_Frequency_of_dental_hygienist_visits` <- ifelse(df.log$`7_Frequency_of_dental_hygienist_visits`  == "Two or more times per year", 0 ,1)
df.log$`9_Usage_of_dental_floss` <- ifelse(df.log$`9_Usage_of_dental_floss`  == "Yes", 0 ,1)
df.log$`9_Usage_of_mouth_wash` <- ifelse(df.log$`9_Usage_of_mouth_wash`  == "Yes", 0 ,1)
df.log$`11_Usage_of_fluoride_supplements` <- ifelse(df.log$`11_Usage_of_fluoride_supplements`  == "Yes, now", 0 ,1)
df.log$`13_Eating_habits_grouped` <- ifelse(df.log$`13_Eating_habits_grouped`  == 1, 1 ,0)
df.log$`18_Frequency_of_smoking` <- ifelse(df.log$`18_Frequency_of_smoking`  == "Never", 1 ,0)
df.log$tsp_daily <- ifelse(df.log$tsp_daily < 5, 0 ,1)
df.log$D1MFT <- ifelse(df.log$D1MFT > 2, 1 ,0) #menos que dos es "sin caries"
df.log$D3MFT <- ifelse(df.log$D3MFT > 2, 1 ,0)
df.log$D5MFT <- ifelse(df.log$D5MFT == 0, 0 ,1)
d1 <- glm(D1MFT ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `9_Usage_of_dental_floss`  +
                  `9_Usage_of_mouth_wash` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
                  `18_Frequency_of_smoking` + 
                  tsp_daily, 
                data = df.log, 
                family = binomial)
summary(d1)

Call:
glm(formula = D1MFT ~ `1_gender` + FAS_cat + `8_Frequency_of_toothbrushing` + 
    `4_Frequency_of_dentist_visits_in_last_12_months` + `7_Frequency_of_dental_hygienist_visits` + 
    `9_Usage_of_dental_floss` + `9_Usage_of_mouth_wash` + `11_Usage_of_fluoride_supplements` + 
    `13_Eating_habits_grouped` + `18_Frequency_of_smoking` + 
    tsp_daily, family = binomial, data = df.log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.8463   0.2680   0.3389   0.4147   0.6032  

Coefficients:
                                                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)                                        2.75073    1.07449   2.560   0.0105 *  
`1_gender`                                        -0.10362    0.18718  -0.554   0.5799    
FAS_cat                                           -0.28642    0.25492  -1.124   0.2612    
`8_Frequency_of_toothbrushing`                     0.41041    0.28936   1.418   0.1561    
`4_Frequency_of_dentist_visits_in_last_12_months` -0.94584    0.21374  -4.425 9.63e-06 ***
`7_Frequency_of_dental_hygienist_visits`           0.37377    0.20676   1.808   0.0706 .  
`9_Usage_of_dental_floss`                          0.16756    0.19820   0.845   0.3979    
`9_Usage_of_mouth_wash`                           -0.19833    0.18573  -1.068   0.2856    
`11_Usage_of_fluoride_supplements`                -0.07959    0.74614  -0.107   0.9151    
`13_Eating_habits_grouped`                         0.22193    0.21989   1.009   0.3128    
`18_Frequency_of_smoking`                          0.47470    0.76250   0.623   0.5336    
tsp_daily                                          0.32335    0.23933   1.351   0.1767    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 963.64  on 2011  degrees of freedom
Residual deviance: 933.33  on 2000  degrees of freedom
  (126 observations deleted due to missingness)
AIC: 957.33

Number of Fisher Scoring iterations: 6
d2 <- glm(D1MFT ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
                  `18_Frequency_of_smoking` + 
                  tsp_daily, 
                data = df.log, 
                family = binomial)
summary(d2)

Call:
glm(formula = D1MFT ~ `1_gender` + FAS_cat + `8_Frequency_of_toothbrushing` + 
    `4_Frequency_of_dentist_visits_in_last_12_months` + `7_Frequency_of_dental_hygienist_visits` + 
    `11_Usage_of_fluoride_supplements` + `13_Eating_habits_grouped` + 
    `18_Frequency_of_smoking` + tsp_daily, family = binomial, 
    data = df.log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.7959   0.2787   0.3383   0.4143   0.5683  

Coefficients:
                                                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)                                        2.68440    1.06914   2.511   0.0120 *  
`1_gender`                                        -0.09274    0.18645  -0.497   0.6189    
FAS_cat                                           -0.28502    0.25329  -1.125   0.2605    
`8_Frequency_of_toothbrushing`                     0.41969    0.28862   1.454   0.1459    
`4_Frequency_of_dentist_visits_in_last_12_months` -0.93914    0.21291  -4.411 1.03e-05 ***
`7_Frequency_of_dental_hygienist_visits`           0.38704    0.20425   1.895   0.0581 .  
`11_Usage_of_fluoride_supplements`                -0.01283    0.74340  -0.017   0.9862    
`13_Eating_habits_grouped`                         0.21499    0.21928   0.980   0.3269    
`18_Frequency_of_smoking`                          0.45558    0.75954   0.600   0.5486    
tsp_daily                                          0.33208    0.23915   1.389   0.1650    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 963.64  on 2011  degrees of freedom
Residual deviance: 935.11  on 2002  degrees of freedom
  (126 observations deleted due to missingness)
AIC: 955.11

Number of Fisher Scoring iterations: 6
stargazer(d1, d2, type="text", digits=3, 
          dep.var.labels=c("Caries at D1 more than two ( = 1)"),
          covariate.labels=c("Sex (male = 1)",
                    "FAS (Low = 1)",
                    "Freq Toothbrushing ( < once per week = 1)",
                     "Freq visit dentist ( < once per year = 1)",
                    "Freq visit hygienist ( < once per year = 1)", 
                    "Dental floss (no use = 1)", 
                    "Mouthwash (no use = 1)",
                    "Use of fluoride supplement (no use = 1)", 
                    "Eating habits (high in sweet = 1)",
  
                    "More than one teaspoon in tea, coffee or cacao"), 
 out="./models/modelsd1-d2.txt")
the condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usednumber of rows of result is not a multiple of vector length (arg 2)

=================================================================================
                                                      Dependent variable:        
                                               ----------------------------------
                                               Caries at D1 more than two ( = 1) 
                                                      (1)              (2)       
---------------------------------------------------------------------------------
Sex (male = 1)                                      -0.104            -0.093     
                                                    (0.187)          (0.186)     
                                                                                 
FAS (Low = 1)                                       -0.286            -0.285     
                                                    (0.255)          (0.253)     
                                                                                 
Freq Toothbrushing ( < once per week = 1)            0.410            0.420      
                                                    (0.289)          (0.289)     
                                                                                 
Freq visit dentist ( < once per year = 1)          -0.946***        -0.939***    
                                                    (0.214)          (0.213)     
                                                                                 
Freq visit hygienist ( < once per year = 1)         0.374*            0.387*     
                                                    (0.207)          (0.204)     
                                                                                 
Dental floss (no use = 1)                            0.168                       
                                                    (0.198)                      
                                                                                 
Mouthwash (no use = 1)                              -0.198                       
                                                    (0.186)                      
                                                                                 
Use of fluoride supplement (no use = 1)             -0.080            -0.013     
                                                    (0.746)          (0.743)     
                                                                                 
Eating habits (high in sweet = 1)                    0.222            0.215      
                                                    (0.220)          (0.219)     
                                                                                 
More than one teaspoon in tea, coffee or cacao       0.475            0.456      
                                                    (0.763)          (0.760)     
                                                                                 
tsp_daily                                            0.323            0.332      
                                                    (0.239)          (0.239)     
                                                                                 
Constant                                            2.751**          2.684**     
                                                    (1.074)          (1.069)     
                                                                                 
---------------------------------------------------------------------------------
Observations                                         2,012            2,012      
Log Likelihood                                     -466.664          -467.557    
Akaike Inf. Crit.                                   957.329          955.114     
=================================================================================
Note:                                                 *p<0.1; **p<0.05; ***p<0.01
d3 <- glm(D3MFT ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `9_Usage_of_dental_floss`  +
                  `9_Usage_of_mouth_wash` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
                  `18_Frequency_of_smoking` + 
                  tsp_daily, 
                data = df.log, 
                family = binomial)
summary(d3)

Call:
glm(formula = D3MFT ~ `1_gender` + FAS_cat + `8_Frequency_of_toothbrushing` + 
    `4_Frequency_of_dentist_visits_in_last_12_months` + `7_Frequency_of_dental_hygienist_visits` + 
    `9_Usage_of_dental_floss` + `9_Usage_of_mouth_wash` + `11_Usage_of_fluoride_supplements` + 
    `13_Eating_habits_grouped` + `18_Frequency_of_smoking` + 
    tsp_daily, family = binomial, data = df.log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7257  -1.1872   0.8479   1.0903   1.5071  

Coefficients:
                                                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)                                        0.18476    0.56145   0.329 0.742105    
`1_gender`                                        -0.18530    0.09369  -1.978 0.047956 *  
FAS_cat                                            0.43178    0.11803   3.658 0.000254 ***
`8_Frequency_of_toothbrushing`                     0.29642    0.13185   2.248 0.024567 *  
`4_Frequency_of_dentist_visits_in_last_12_months` -0.62962    0.09652  -6.523 6.89e-11 ***
`7_Frequency_of_dental_hygienist_visits`           0.03897    0.10613   0.367 0.713470    
`9_Usage_of_dental_floss`                          0.07530    0.10031   0.751 0.452860    
`9_Usage_of_mouth_wash`                           -0.26421    0.09215  -2.867 0.004143 ** 
`11_Usage_of_fluoride_supplements`                -0.06927    0.36010  -0.192 0.847466    
`13_Eating_habits_grouped`                         0.06064    0.10611   0.571 0.567701    
`18_Frequency_of_smoking`                          0.17637    0.43084   0.409 0.682277    
tsp_daily                                          0.15274    0.11203   1.363 0.172755    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2765.6  on 2011  degrees of freedom
Residual deviance: 2688.5  on 2000  degrees of freedom
  (126 observations deleted due to missingness)
AIC: 2712.5

Number of Fisher Scoring iterations: 4
d4 <- glm(D3MFT ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `9_Usage_of_mouth_wash` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
 
                  tsp_daily, 
                data = df.log, 
                family = binomial)
summary(d4)

Call:
glm(formula = D3MFT ~ `1_gender` + FAS_cat + `8_Frequency_of_toothbrushing` + 
    `4_Frequency_of_dentist_visits_in_last_12_months` + `7_Frequency_of_dental_hygienist_visits` + 
    `9_Usage_of_mouth_wash` + `11_Usage_of_fluoride_supplements` + 
    `13_Eating_habits_grouped` + tsp_daily, family = binomial, 
    data = df.log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7439  -1.1901   0.8557   1.0931   1.5071  

Coefficients:
                                                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)                                        0.36606    0.37495   0.976 0.328918    
`1_gender`                                        -0.18153    0.09312  -1.949 0.051247 .  
FAS_cat                                            0.44127    0.11763   3.751 0.000176 ***
`8_Frequency_of_toothbrushing`                     0.30240    0.13120   2.305 0.021171 *  
`4_Frequency_of_dentist_visits_in_last_12_months` -0.62564    0.09623  -6.502 7.95e-11 ***
`7_Frequency_of_dental_hygienist_visits`           0.05080    0.10492   0.484 0.628295    
`9_Usage_of_mouth_wash`                           -0.26068    0.09197  -2.834 0.004591 ** 
`11_Usage_of_fluoride_supplements`                -0.04647    0.35906  -0.129 0.897026    
`13_Eating_habits_grouped`                         0.05530    0.10595   0.522 0.601733    
tsp_daily                                          0.15530    0.11193   1.387 0.165304    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2767.9  on 2013  degrees of freedom
Residual deviance: 2691.1  on 2004  degrees of freedom
  (124 observations deleted due to missingness)
AIC: 2711.1

Number of Fisher Scoring iterations: 4
stargazer(d3, d4, type="text", digits=3, 
          dep.var.labels=c("Caries at D3 more than 2 ( = 1)"),
          covariate.labels=c("Sex (male = 1)",
                    "FAS (Low = 1)",
                    "Freq Toothbrushing ( < once per week = 1)",
                     "Freq visit dentist ( < once per year = 1)",
                    "Freq visit hygienist ( < once per year = 1)", 
                    "Dental floss (no use = 1)", 
                    "Mouthwash (no use = 1)",
                    "Use of fluoride supplement (no use = 1)", 
                    "Eating habits (high in sweet = 1)",
  
                    "More than one teaspoon in tea, coffee or cacao"), 
 out="./models/modelsD3-4.txt")
the condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usednumber of rows of result is not a multiple of vector length (arg 2)

===============================================================================
                                                     Dependent variable:       
                                               --------------------------------
                                               Caries at D3 more than 2 ( = 1) 
                                                     (1)              (2)      
-------------------------------------------------------------------------------
Sex (male = 1)                                     -0.185**         -0.182*    
                                                   (0.094)          (0.093)    
                                                                               
FAS (Low = 1)                                      0.432***        0.441***    
                                                   (0.118)          (0.118)    
                                                                               
Freq Toothbrushing ( < once per week = 1)          0.296**          0.302**    
                                                   (0.132)          (0.131)    
                                                                               
Freq visit dentist ( < once per year = 1)         -0.630***        -0.626***   
                                                   (0.097)          (0.096)    
                                                                               
Freq visit hygienist ( < once per year = 1)         0.039            0.051     
                                                   (0.106)          (0.105)    
                                                                               
Dental floss (no use = 1)                           0.075                      
                                                   (0.100)                     
                                                                               
Mouthwash (no use = 1)                            -0.264***        -0.261***   
                                                   (0.092)          (0.092)    
                                                                               
Use of fluoride supplement (no use = 1)             -0.069          -0.046     
                                                   (0.360)          (0.359)    
                                                                               
Eating habits (high in sweet = 1)                   0.061            0.055     
                                                   (0.106)          (0.106)    
                                                                               
More than one teaspoon in tea, coffee or cacao      0.176                      
                                                   (0.431)                     
                                                                               
tsp_daily                                           0.153            0.155     
                                                   (0.112)          (0.112)    
                                                                               
Constant                                            0.185            0.366     
                                                   (0.561)          (0.375)    
                                                                               
-------------------------------------------------------------------------------
Observations                                        2,012            2,014     
Log Likelihood                                    -1,344.229      -1,345.547   
Akaike Inf. Crit.                                 2,712.459        2,711.095   
===============================================================================
Note:                                               *p<0.1; **p<0.05; ***p<0.01

D5MFT regresion

d5 <- glm(D5MFT ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `9_Usage_of_dental_floss`  +
                  `9_Usage_of_mouth_wash` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
                  `18_Frequency_of_smoking` + 
                  tsp_daily, 
                data = df.log, 
                family = binomial)
summary(d5)

Call:
glm(formula = D5MFT ~ `1_gender` + FAS_cat + `8_Frequency_of_toothbrushing` + 
    `4_Frequency_of_dentist_visits_in_last_12_months` + `7_Frequency_of_dental_hygienist_visits` + 
    `9_Usage_of_dental_floss` + `9_Usage_of_mouth_wash` + `11_Usage_of_fluoride_supplements` + 
    `13_Eating_habits_grouped` + `18_Frequency_of_smoking` + 
    tsp_daily, family = binomial, data = df.log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.2043  -1.3152   0.6430   0.8882   1.2015  

Coefficients:
                                                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)                                        2.41279    0.72504   3.328 0.000875 ***
`1_gender`                                        -0.10881    0.10451  -1.041 0.297798    
FAS_cat                                            0.26598    0.12955   2.053 0.040057 *  
`8_Frequency_of_toothbrushing`                     0.33829    0.15095   2.241 0.025017 *  
`4_Frequency_of_dentist_visits_in_last_12_months` -0.95454    0.11225  -8.503  < 2e-16 ***
`7_Frequency_of_dental_hygienist_visits`          -0.05616    0.12083  -0.465 0.642060    
`9_Usage_of_dental_floss`                          0.14923    0.11181   1.335 0.181974    
`9_Usage_of_mouth_wash`                           -0.25926    0.10307  -2.515 0.011889 *  
`11_Usage_of_fluoride_supplements`                -0.68725    0.49943  -1.376 0.168804    
`13_Eating_habits_grouped`                        -0.08052    0.11697  -0.688 0.491211    
`18_Frequency_of_smoking`                         -0.28543    0.52165  -0.547 0.584258    
tsp_daily                                         -0.11797    0.12257  -0.963 0.335793    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2385.4  on 2011  degrees of freedom
Residual deviance: 2280.1  on 2000  degrees of freedom
  (126 observations deleted due to missingness)
AIC: 2304.1

Number of Fisher Scoring iterations: 4
d6 <- glm(D5MFT ~ 
                  `1_gender` +
                  FAS_cat + 
                  `8_Frequency_of_toothbrushing` + 
                  `4_Frequency_of_dentist_visits_in_last_12_months`  +
                  `7_Frequency_of_dental_hygienist_visits` + 
                  `9_Usage_of_mouth_wash` + 
                  `11_Usage_of_fluoride_supplements`  +
                  `13_Eating_habits_grouped` + 
 
                  tsp_daily, 
                data = df.log, 
                family = binomial)
summary(d5)

Call:
glm(formula = D5MFT ~ `1_gender` + FAS_cat + `8_Frequency_of_toothbrushing` + 
    `4_Frequency_of_dentist_visits_in_last_12_months` + `7_Frequency_of_dental_hygienist_visits` + 
    `9_Usage_of_dental_floss` + `9_Usage_of_mouth_wash` + `11_Usage_of_fluoride_supplements` + 
    `13_Eating_habits_grouped` + `18_Frequency_of_smoking` + 
    tsp_daily, family = binomial, data = df.log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.2043  -1.3152   0.6430   0.8882   1.2015  

Coefficients:
                                                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)                                        2.41279    0.72504   3.328 0.000875 ***
`1_gender`                                        -0.10881    0.10451  -1.041 0.297798    
FAS_cat                                            0.26598    0.12955   2.053 0.040057 *  
`8_Frequency_of_toothbrushing`                     0.33829    0.15095   2.241 0.025017 *  
`4_Frequency_of_dentist_visits_in_last_12_months` -0.95454    0.11225  -8.503  < 2e-16 ***
`7_Frequency_of_dental_hygienist_visits`          -0.05616    0.12083  -0.465 0.642060    
`9_Usage_of_dental_floss`                          0.14923    0.11181   1.335 0.181974    
`9_Usage_of_mouth_wash`                           -0.25926    0.10307  -2.515 0.011889 *  
`11_Usage_of_fluoride_supplements`                -0.68725    0.49943  -1.376 0.168804    
`13_Eating_habits_grouped`                        -0.08052    0.11697  -0.688 0.491211    
`18_Frequency_of_smoking`                         -0.28543    0.52165  -0.547 0.584258    
tsp_daily                                         -0.11797    0.12257  -0.963 0.335793    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2385.4  on 2011  degrees of freedom
Residual deviance: 2280.1  on 2000  degrees of freedom
  (126 observations deleted due to missingness)
AIC: 2304.1

Number of Fisher Scoring iterations: 4
stargazer(d5, d6, type="text", digits=3, 
          dep.var.labels=c("Caries at D5 different than 0 (= 1)"),
          covariate.labels=c("Sex (male = 1)",
                    "FAS (Low = 1)",
                    "Freq Toothbrushing ( < once per week = 1)",
                     "Freq visit dentist ( < once per year = 1)",
                    "Freq visit hygienist ( < once per year = 1)", 
                    "Dental floss (no use = 1)", 
                    "Mouthwash (no use = 1)",
                    "Use of fluoride supplement (no use = 1)", 
                    "Eating habits (high in sweet = 1)",
  
                    "More than one teaspoon in tea, coffee or cacao"), 
 out="./models/modelsD5-6.txt")
the condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usednumber of rows of result is not a multiple of vector length (arg 2)

===================================================================================
                                                       Dependent variable:         
                                               ------------------------------------
                                               Caries at D5 different than 0 (= 1) 
                                                      (1)                (2)       
-----------------------------------------------------------------------------------
Sex (male = 1)                                       -0.109            -0.094      
                                                    (0.105)            (0.104)     
                                                                                   
FAS (Low = 1)                                       0.266**            0.280**     
                                                    (0.130)            (0.129)     
                                                                                   
Freq Toothbrushing ( < once per week = 1)           0.338**            0.358**     
                                                    (0.151)            (0.150)     
                                                                                   
Freq visit dentist ( < once per year = 1)          -0.955***          -0.946***    
                                                    (0.112)            (0.112)     
                                                                                   
Freq visit hygienist ( < once per year = 1)          -0.056            -0.030      
                                                    (0.121)            (0.119)     
                                                                                   
Dental floss (no use = 1)                            0.149                         
                                                    (0.112)                        
                                                                                   
Mouthwash (no use = 1)                              -0.259**          -0.256**     
                                                    (0.103)            (0.103)     
                                                                                   
Use of fluoride supplement (no use = 1)              -0.687            -0.651      
                                                    (0.499)            (0.498)     
                                                                                   
Eating habits (high in sweet = 1)                    -0.081            -0.091      
                                                    (0.117)            (0.117)     
                                                                                   
More than one teaspoon in tea, coffee or cacao       -0.285                        
                                                    (0.522)                        
                                                                                   
tsp_daily                                            -0.118            -0.115      
                                                    (0.123)            (0.122)     
                                                                                   
Constant                                            2.413***          2.150***     
                                                    (0.725)            (0.513)     
                                                                                   
-----------------------------------------------------------------------------------
Observations                                         2,012              2,014      
Log Likelihood                                     -1,140.061        -1,141.603    
Akaike Inf. Crit.                                  2,304.122          2,303.205    
===================================================================================
Note:                                                   *p<0.1; **p<0.05; ***p<0.01
LS0tDQp0aXRsZTogIkFuYWx5c2lzIE9yYWwgSGVhbHRoIExhdHZpYSAyMDE2Ig0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0DQogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KIyBQYWNrYWdlcyBhbmQgZGF0YXNldA0KYGBge3IgUGFxdWV0ZXMsIGV2YWw9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoc3RhcmdhemVyKQ0KbGlicmFyeShnZ3RoZW1lcykNCmxpYnJhcnkoZmlmZXIpDQpgYGANCg0KYGBge3IgZGlnaXRzIHR3byBkZWNpbWFsc30NCm9wdGlvbnMoZGlnaXRzID0gMykNCmBgYA0KDQoNCmBgYHtyIGRhdGFzZXR9DQojIGRmIDwtIHJlYWQuY3N2MigiZGYuY3N2IiwgaGVhZGVyID0gVCwgc2VwID0gIjsiKQ0KZGYgPC0gcmVhZF9jc3YyKCJkZi5jc3YiLCBuYSA9IGMoIiIsICIgIiwgIk5BIikpDQpgYGANCg0KYGBge3IgcmVtb3ZlIGR1cGxpY2F0ZXN9DQpkZiA8LSBkZlssICFkdXBsaWNhdGVkKGNvbG5hbWVzKGRmKSldDQpgYGANCg0KDQpgYGB7ciByZW1vdmUgc29tZSB1bnVzZWQgY29sdW1uc30NCiBkZiA8LSBkZiAlPiUgDQogICAgICAgIHNlbGVjdCgtYyhDMzdWOlRyYXVtYV8zNykpDQoNCg0KYGBgDQoNCmBgYHtyIGRpbWVuc2lvbnN9DQpkaW0oZGYpDQpgYGANCg0KDQoNCiNFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzDQpgYGB7ciBFREEgMX0NCmRmICU+JSANCiAgZ3JvdXBfYnkoUmVnaW9uTmFtZSwgYDFfZ2VuZGVyYCkgJT4lIA0KICBzdW1tYXJpc2Uobj1uKCkpICU+JSANCiAgc3ByZWFkKGAxX2dlbmRlcmAsIG4pDQpgYGANCmBgYHtyIHRhYmxhIHJlZ2lvbiBnZW5kZXJ9DQphZGRtYXJnaW5zKHRhYmxlKGRmJFJlZ2lvbk5hbWUsIGRmJGAxX2dlbmRlcmApKQ0KYGBgDQoNCiMjIEZBUw0KYGBge3IgRkFTIGxpdmUgaW59DQpkZiAlPiUgDQogICAgICAgIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBGQVMpICU+JSANCiAgICAgICAgc3VtbWFyaXNlKCBuID0gbigpICkgJT4lIA0KICAgICAgICBzcHJlYWQoRkFTLCBuLCBmaWxsID0gMCkNCmBgYA0KYGBge3IgRkFTIGdlbmRlcn0NCmRmICU+JSANCiAgICAgICAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCwgRkFTKSAlPiUgDQogICAgICAgIHN1bW1hcmlzZSggbiA9IG4oKSkgJT4lIA0KICAgICAgICBzcHJlYWQoRkFTLCBuKQ0KYGBgDQoNCiMgUHJldmFsZW5jZSBjYXJpZXMNCiMjIENoaWxkcmVuIHdpdGggYXQgbGVhc3Qgb25lIHRvb3RoIHdpdGggRDENCmBgYHtyfQ0KbnJvdyhzdWJzZXQoZGYsIEQxVCA+IDApKQ0KDQpgYGANCg0KIyMgQ2hpbGRyZW4gd2l0aCBhdCBsZWFzdCBvbmUgdG9vdGggd2l0aCBEMw0KYGBge3J9DQpucm93KHN1YnNldChkZixEM1QgPiAwKSkNCg0KYGBgDQojIyBDaGlsZHJlbiB3aXRoIGF0IGxlYXN0IG9uZSB0b290aCB3aXRoIEQ1DQpgYGB7cn0NCm5yb3coc3Vic2V0KGRmLEQ1VCA+IDApKQ0KDQpgYGANCiMjIENoaWxkcmVuIHdpdGggYXQgbGVhc3Qgb25lIHRvb3RoIHdpdGggRg0KYGBge3J9DQpucm93KHN1YnNldChkZiwgRlQgPiAwKSkNCg0KYGBgDQojIyBDaGlsZHJlbiB3aXRoIGF0IGxlYXN0IG9uZSB0b290aCB3aXRoIE0NCmBgYHtyfQ0KbnJvdyhzdWJzZXQoZGYsIE1UID4gMCkpDQoNCmBgYA0KIyMgQ2hpbGRyZW4gd2l0aCBhdCBsZWFzdCBvbmUgdG9vdGggd2l0aCBEMU1GVA0KYGBge3J9DQpucm93KHN1YnNldChkZiwgRDFNRlQgPiAwKSkNCg0KYGBgDQoNCiMjIENoaWxkcmVuIHdpdGggYXQgbGVhc3Qgb25lIHRvb3RoIHdpdGggRDNNRlQNCmBgYHtyfQ0KbnJvdyhzdWJzZXQoZGYsIEQzTUZUID4gMCkpDQoNCmBgYA0KDQoNCg0KIyBETUZTDQojIyBBbGwNCmBgYHtyIHN1bW1hcnkgYWxsIERNRlN9DQpkZiAlPiUgDQogIHN1bW1hcmlzZV9lYWNoKGZ1bnMobWVhbiwgbWVkaWFuLCBzZCkgLCBEMVM6U2VhbGFudHMpDQpgYGANCmBgYHtyfQ0KZGYgJT4lIA0KICBzdW1tYXJpc2VfZWFjaChmdW5zKHF1YW50aWxlKC4sIHByb2JzID0gMC4yNSkpICwgRDFTOlNlYWxhbnRzKQ0KZGYgJT4lIA0KICBzdW1tYXJpc2VfZWFjaChmdW5zKHF1YW50aWxlKC4sIHByb2JzID0gMC43NSkpICwgRDFTOlNlYWxhbnRzKQ0KYGBgDQoNClJlY29kZSBEM01GVCBpbiAwLCAxDQpgYGB7cn0NCmRmIDwtIGRmICU+JSANCiAgICAgICAgbXV0YXRlKCBiaW4uRDNUID0gaWZlbHNlKEQzTUZUID09IDAsIDAsIDEpKQ0KZGYkYmluLkQzVCA8LSBhcy5mYWN0b3IoZGYkYmluLkQzVCkNCmBgYA0KDQoNCiMjIENvbXBhcmlzb24gYnkgZ2VuZGVyLCBETUZUIGFuZCBETUZTDQpgYGB7cn0NCmRmICU+JSANCiAgICAgICAgZ3JvdXBfYnkoYDFfZ2VuZGVyYCkgJT4lIA0KICAgICAgICBzdW1tYXJpc2VfZWFjaChmdW5zKG1lYW4pICwgRDFUOlNlYWxhbnRzKQ0KYGBgDQoNCmBgYHtyfQ0KdC50ZXN0KGRmJEQxVH5kZiRgMV9nZW5kZXJgKQ0KdC50ZXN0KGRmJEQzVH5kZiRgMV9nZW5kZXJgKQ0KdC50ZXN0KGRmJEQ1VH5kZiRgMV9nZW5kZXJgKQ0KdC50ZXN0KGRmJEZUfmRmJGAxX2dlbmRlcmApDQp0LnRlc3QoZGYkTVR+ZGYkYDFfZ2VuZGVyYCkNCnQudGVzdChkZiREMU1GVH5kZiRgMV9nZW5kZXJgKQ0KdC50ZXN0KGRmJEQzTUZUfmRmJGAxX2dlbmRlcmApDQp0LnRlc3QoZGYkRDVNRlR+ZGYkYDFfZ2VuZGVyYCkNCmBgYA0KDQpgYGB7cn0NCnQudGVzdChkZiREMVN+ZGYkYDFfZ2VuZGVyYCkNCnQudGVzdChkZiREM1N+ZGYkYDFfZ2VuZGVyYCkNCnQudGVzdChkZiRENVN+ZGYkYDFfZ2VuZGVyYCkNCnQudGVzdChkZiRGU35kZiRgMV9nZW5kZXJgKQ0KdC50ZXN0KGRmJE1TfmRmJGAxX2dlbmRlcmApDQp0LnRlc3QoZGYkRDFNRlN+ZGYkYDFfZ2VuZGVyYCkNCnQudGVzdChkZiREM01GU35kZiRgMV9nZW5kZXJgKQ0KdC50ZXN0KGRmJEQ1TUZTfmRmJGAxX2dlbmRlcmApDQp0LnRlc3QoZGYkU2VhbGFudHN+ZGYkYDFfZ2VuZGVyYCkNCmBgYA0KDQoNCmBgYHtyfQ0KZGYubG9uZyA8LSBkZiAlPiUNCiAgICAgICAgZ2F0aGVyKCJieVRvb3RoIiwgInZhbHVlQnlUb290aCIsIEQxVDpENU1GVCkgJT4lIA0KICAgICAgICBnYXRoZXIoImJ5U3VyZmFjZSIsICJ2YWx1ZUJ5U3VyZmFjZSIsIEQxUzpTZWFsYW50cykNCmRmLmxvbmckYnlUb290aCA8LSBvcmRlcmVkKGRmLmxvbmckYnlUb290aCwgbGV2ZWxzID0gYygNCiAgICAgICAgIkQxVCIsICJEM1QiLCAiRDVUIiwgIkZUIiwNCiAgICAgICAgIk1UIiwgIkQxTUZUIiwgIkQzTUZUIiwgIkQ1TUZUIikpDQoNCmRmLmxvbmckYnlTdXJmYWNlIDwtIG9yZGVyZWQoZGYubG9uZyRieVN1cmZhY2UsIGxldmVscyA9IGMoDQogICAgICAgICAiRDFTIiwgIkQzUyIsICJENVMiLCAiRlMiLCAiTVMiLA0KICAgICAgICAgIkQxTUZTIiwgIkQzTUZTIiwgIkQ1TUZTIiwgIlNlYWxhbnRzIikpDQoNCmBgYA0KYGBge3IgcGxvdCBieSB0b290aCBnZW5kZXJ9DQoNCmRmLmxvbmcgJT4lIA0KICAgICAgICBnZ3Bsb3QoYWVzKGZhY3RvcihieVRvb3RoKSwgdmFsdWVCeVRvb3RoKSkgKw0KICAgICAgICBnZW9tX2JveHBsb3QoYWVzKCBmaWxsID0gYDFfZ2VuZGVyYCApICkgKyANCiAgICAgICAgdGhlbWVfbWluaW1hbCgpICsNCiAgICAgICAgbGFicyh0aXRsZSA9ICIgIiwgeCA9ICIgIiwgeSA9ICJab2JpIiwgY29sb3IgPSAiRHppbXVtc1xuIikrDQogICAgICAgIGdnc2F2ZSgiLi9wbG90cy9kbWZ0QnlHZW5kZXIucG5nIiwgd2lkdGg9OCwgaGVpZ2h0PTYsIGRwaT0yNTApDQoNCg0KYGBgDQpgYGB7ciBwbG90IGJ5IHN1cmZhY2UgZ2VuZGVyfQ0KDQpkZi5sb25nICU+JSANCiAgICAgICAgZ2dwbG90KGFlcyhmYWN0b3IoYnlTdXJmYWNlKSwgdmFsdWVCeVN1cmZhY2UpKSArDQogICAgICAgIGdlb21fYm94cGxvdChhZXMoZmlsbCA9IGZhY3RvcihgMV9nZW5kZXJgKSkpICsgDQogICAgICAgIHRoZW1lX21pbmltYWwoKSArDQogICAgICAgIGxhYnModGl0bGUgPSAiICIsIHggPSAiICIsIHkgPSAiWm9iaSIsIGNvbG9yID0gIkR6aW11bXNcbiIpICsNCiAgICAgICAgZ2dzYXZlKCIuL3Bsb3RzL2RtZnNCeUdlbmRlci5wbmciLCB3aWR0aD04LCBoZWlnaHQ9NiwgZHBpPTI1MCkNCg0KDQpgYGANCg0KIyBieSByZWdpb24NCiMjIFByZXZhbGVuY2UgcmVnaW9uDQpgYGB7cn0NCmRmICU+JSANCiAgICAgICAgZ3JvdXBfYnkoUmVnaW9uTmFtZSwgYmluLkQzVCkgJT4lIA0KICAgICAgICBzdW1tYXJpc2Uobj1uKCkpICU+JSANCiAgICAgICAgc3ByZWFkKGJpbi5EM1QsIG4pDQpgYGANCmBgYHtyfQ0KcmVnaW9ueEQzVCA8LSB0YWJsZShkZiRSZWdpb25OYW1lLCBkZiRiaW4uRDNUKSANCmNoaXNxLnRlc3QocmVnaW9ueEQzVCkNCmBgYA0KYGBge3J9DQpjaGlzcS5wb3N0LmhvYyhyZWdpb254RDNUKQ0KYGBgDQoNCiMjIFNldmVyaXR5IHJlZ2lvbg0KDQpgYGB7ciBETUZTIHJlZ2lvbn0NCmRmICU+JSANCiAgICAgICAgZ3JvdXBfYnkoUmVnaW9uTmFtZSkgJT4lIA0KICAgICAgICBzdW1tYXJpc2VfZWFjaChmdW5zKG1lYW4pICwgRDFUOlNlYWxhbnRzKQ0KYGBgDQoNCmBgYHtyIGFub3ZhIHBhcmEgVCBwb3IgcmVnaW9ufQ0KDQpzdW1tYXJ5KGFvdihkZiREM01GVH5kZiRSZWdpb25OYW1lKSkNCg0KYGBgDQpgYGB7cn0NCg0KDQpUdWtleUhTRChhb3YoZGYkRDNNRlR+ZGYkUmVnaW9uTmFtZSkpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KZGYubG9uZyAlPiUgDQogICAgICAgIGdncGxvdChhZXMoZmFjdG9yKGJ5U3VyZmFjZSksIHZhbHVlQnlTdXJmYWNlKSkgKw0KICAgICAgICBnZW9tX2JveHBsb3QoYWVzKGZpbGwgPSBmYWN0b3IoUmVnaW9uTmFtZSkpKSArIA0KICAgICAgICB0aGVtZV9taW5pbWFsKCkgKw0KICAgICAgICBsYWJzKHRpdGxlID0gIiAiLCB4ID0gIiAiLCB5ID0gIlpvYmkiLCBjb2xvciA9ICJEemltdW1zXG4iKSArDQogICAgICAgIGdnc2F2ZSgiLi9wbG90cy9kbWZzQnlSZWdpb24ucG5nIiwgd2lkdGg9OCwgaGVpZ2h0PTYsIGRwaT0yNTApDQpgYGANCg0KDQpgYGB7cn0NClR1a2V5SFNEKGFvdihkZiREM01GVH5kZiRSZWdpb25OYW1lKSkNCmBgYA0KDQoNCmBgYHtyfQ0KVHVrZXlIU0QoYW92KGRmJEQzTUZTfmRmJFJlZ2lvbk5hbWUpKQ0KYGBgDQoNCg0KYGBge3J9DQpkZi5sb25nICU+JSANCiAgICAgICAgZ2dwbG90KGFlcyhmYWN0b3IoYnlUb290aCksIHZhbHVlQnlUb290aCkpICsNCiAgICAgICAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsID0gZmFjdG9yKFJlZ2lvbk5hbWUpKSkgKyANCiAgICAgICAgdGhlbWVfbWluaW1hbCgpICsNCiAgICAgICAgbGFicyh0aXRsZSA9ICIgIiwgeCA9ICIgIiwgeSA9ICJab2JpIiwgY29sb3IgPSAiRHppbXVtc1xuIikgKw0KICAgICAgICBnZ3NhdmUoIi4vcGxvdHMvZG1mdEJ5UmVnaW9uLnBuZyIsIHdpZHRoPTgsIGhlaWdodD02LCBkcGk9MjUwKQ0KYGBgDQoNCiMgYnkgRkFTDQojIyBQcmV2YWxlbmNlIEZBUw0KDQpgYGB7cn0NCmRmICU+JSANCiAgICAgICAgZ3JvdXBfYnkoRkFTX2NhdCwgYmluLkQzVCkgJT4lIA0KICAgICAgICBzdW1tYXJpc2Uobj1uKCkpICU+JSANCiAgICAgICAgc3ByZWFkKGJpbi5EM1QsIG4pDQpgYGANCmBgYHtyfQ0KY2hpc3EudGVzdChkZiRiaW4uRDNULCBkZiRGQVNfY2F0KQ0KYGBgDQojIyBTZXZlcml0eSBGQVMNCg0KYGBge3IgRE1GUyBGQVNfY2F0fQ0KZGYgJT4lIA0KICAgICAgICBncm91cF9ieShGQVNfY2F0KSAlPiUgDQogICAgICAgIHN1bW1hcmlzZV9lYWNoKGZ1bnMobWVhbikgLCBEMVQ6U2VhbGFudHMpDQpgYGANCg0KYGBge3J9DQpUdWtleUhTRChhb3YoZGYkRDNNRlR+ZGYkRkFTX2NhdCkpDQpgYGANCg0KDQojIEJ5IGxpdmUgaW4NCg0KYGBge3J9DQpkZiAlPiUgDQogICAgICAgIGdyb3VwX2J5KGAyX0xpdmVfaW5gLCBiaW4uRDNUKSAlPiUgDQogICAgICAgIHN1bW1hcmlzZShuPW4oKSkgJT4lIA0KICAgICAgICBzcHJlYWQoYmluLkQzVCwgbikNCmBgYA0KYGBge3J9DQpjaGlzcS50ZXN0KGRmJGAyX0xpdmVfaW5gLCBkZiRiaW4uRDNUKQ0KYGBgDQpgYGB7ciBETUZTIGxpdmVpbn0NCmRmICU+JSANCiAgICAgICAgZ3JvdXBfYnkoYDJfTGl2ZV9pbmApICU+JSANCiAgICAgICAgc3VtbWFyaXNlX2VhY2goZnVucyhtZWFuKSAsIEQxVDpTZWFsYW50cykNCmBgYA0KYGBge3J9DQpUdWtleUhTRChhb3YoZGYkRDNNRlR+ZGYkYDJfTGl2ZV9pbmApKQ0KYGBgDQoNCiMgU3VnYXINCmBgYHtyfQ0KZGYkdHNwX2RhaWx5IDwtIGFzLm51bWVyaWMoZGYkdHNwX2RhaWx5KQ0KYGBgDQoNCkVsaW1pbm8gbG9zIG91dGxpZXJzDQpgYGB7cn0NCm91dGxpZXJLRCA8LSBmdW5jdGlvbihkdCwgdmFyKSB7DQogICAgIHZhcl9uYW1lIDwtIGV2YWwoc3Vic3RpdHV0ZSh2YXIpLGV2YWwoZHQpKQ0KICAgICB0b3QgPC0gc3VtKCFpcy5uYSh2YXJfbmFtZSkpDQogICAgIG5hMSA8LSBzdW0oaXMubmEodmFyX25hbWUpKQ0KICAgICBtMSA8LSBtZWFuKHZhcl9uYW1lLCBuYS5ybSA9IFQpDQogICAgIHBhcihtZnJvdz1jKDIsIDIpLCBvbWE9YygwLDAsMywwKSkNCiAgICAgYm94cGxvdCh2YXJfbmFtZSwgbWFpbj0iV2l0aCBvdXRsaWVycyIpDQogICAgIGhpc3QodmFyX25hbWUsIG1haW49IldpdGggb3V0bGllcnMiLCB4bGFiPU5BLCB5bGFiPU5BKQ0KICAgICBvdXRsaWVyIDwtIGJveHBsb3Quc3RhdHModmFyX25hbWUpJG91dA0KICAgICBtbyA8LSBtZWFuKG91dGxpZXIpDQogICAgIHZhcl9uYW1lIDwtIGlmZWxzZSh2YXJfbmFtZSAlaW4lIG91dGxpZXIsIE5BLCB2YXJfbmFtZSkNCiAgICAgYm94cGxvdCh2YXJfbmFtZSwgbWFpbj0iV2l0aG91dCBvdXRsaWVycyIpDQogICAgIGhpc3QodmFyX25hbWUsIG1haW49IldpdGhvdXQgb3V0bGllcnMiLCB4bGFiPU5BLCB5bGFiPU5BKQ0KICAgICB0aXRsZSgiT3V0bGllciBDaGVjayIsIG91dGVyPVRSVUUpDQogICAgIG5hMiA8LSBzdW0oaXMubmEodmFyX25hbWUpKQ0KICAgICBjYXQoIk91dGxpZXJzIGlkZW50aWZpZWQ6IiwgbmEyIC0gbmExLCAiXG4iKQ0KICAgICBjYXQoIlByb3BvdGlvbiAoJSkgb2Ygb3V0bGllcnM6Iiwgcm91bmQoKG5hMiAtIG5hMSkgLyB0b3QqMTAwLCAxKSwgIlxuIikNCiAgICAgY2F0KCJNZWFuIG9mIHRoZSBvdXRsaWVyczoiLCByb3VuZChtbywgMiksICJcbiIpDQogICAgIG0yIDwtIG1lYW4odmFyX25hbWUsIG5hLnJtID0gVCkNCiAgICAgY2F0KCJNZWFuIHdpdGhvdXQgcmVtb3Zpbmcgb3V0bGllcnM6Iiwgcm91bmQobTEsIDIpLCAiXG4iKQ0KICAgICBjYXQoIk1lYW4gaWYgd2UgcmVtb3ZlIG91dGxpZXJzOiIsIHJvdW5kKG0yLCAyKSwgIlxuIikNCiAgICAgcmVzcG9uc2UgPC0gcmVhZGxpbmUocHJvbXB0PSJEbyB5b3Ugd2FudCB0byByZW1vdmUgb3V0bGllcnMgYW5kIHRvIHJlcGxhY2Ugd2l0aCBOQT8gW3llcy9ub106ICIpDQogICAgIGlmKHJlc3BvbnNlID09ICJ5IiB8IHJlc3BvbnNlID09ICJ5ZXMiKXsNCiAgICAgICAgICBkdFthcy5jaGFyYWN0ZXIoc3Vic3RpdHV0ZSh2YXIpKV0gPC0gaW52aXNpYmxlKHZhcl9uYW1lKQ0KICAgICAgICAgIGFzc2lnbihhcy5jaGFyYWN0ZXIoYXMubGlzdChtYXRjaC5jYWxsKCkpJGR0KSwgZHQsIGVudmlyID0gLkdsb2JhbEVudikNCiAgICAgICAgICBjYXQoIk91dGxpZXJzIHN1Y2Nlc3NmdWxseSByZW1vdmVkIiwgIlxuIikNCiAgICAgICAgICByZXR1cm4oaW52aXNpYmxlKGR0KSkNCiAgICAgfSBlbHNlew0KICAgICAgICAgIGNhdCgiTm90aGluZyBjaGFuZ2VkIiwgIlxuIikNCiAgICAgICAgICByZXR1cm4oaW52aXNpYmxlKHZhcl9uYW1lKSkNCiAgICAgfQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KZGYubG9nIDwtIGRmDQpkZi5sb2ckYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgW2RmLmxvZyRgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2A9PSJPbmNlIHBlciBkYXkiXSA8LSAiMCINCmRmLmxvZyRgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2BbZGYubG9nJGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYD09IlR3byBvciBtb3JlIHRpbWVzIHBlciBkYXkiXSA8LSAiMCINCg0KZGYubG9nJGAxX2dlbmRlcmAgPC0gaWZlbHNlKGRmLmxvZyRgMV9nZW5kZXJgICA9PSAiRiIsIDAgLDEpDQpkZi5sb2ckRkFTX2NhdCA8LSBpZmVsc2UoZGYubG9nJEZBU19jYXQgID09ICJIaWdoIGFmZmx1ZW5jZSIsIDEgLDApDQpkZi5sb2ckYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgIDwtIGlmZWxzZShkZi5sb2ckYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICA9PSAiMCIsIDEgLDApDQpkZi5sb2ckYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCA8LSBpZmVsc2UoZGYubG9nJGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2AgID09ICJUd28gb3IgbW9yZSB0aW1lcyIsIDAgLDEpDQpkZi5sb2ckYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCA8LSBpZmVsc2UoZGYubG9nJGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AgID09ICJUd28gb3IgbW9yZSB0aW1lcyBwZXIgeWVhciIsIDAgLDEpDQpkZi5sb2ckYDlfVXNhZ2Vfb2ZfZGVudGFsX2Zsb3NzYCA8LSBpZmVsc2UoZGYubG9nJGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgID09ICJZZXMiLCAwICwxKQ0KZGYubG9nJGA5X1VzYWdlX29mX21vdXRoX3dhc2hgIDwtIGlmZWxzZShkZi5sb2ckYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgID09ICJZZXMiLCAwICwxKQ0KZGYubG9nJGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgPC0gaWZlbHNlKGRmLmxvZyRgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICA9PSAiWWVzLCBub3ciLCAwICwxKQ0KZGYubG9nJGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgIDwtIGlmZWxzZShkZi5sb2ckYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgID09IDEsIDEgLDApDQpkZi5sb2ckYDE4X0ZyZXF1ZW5jeV9vZl9zbW9raW5nYCA8LSBpZmVsc2UoZGYubG9nJGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgID09ICJOZXZlciIsIDEgLDApDQpkZi5sb2ckdHNwX2RhaWx5IDwtIGlmZWxzZShkZi5sb2ckdHNwX2RhaWx5IDwgNSwgMCAsMSkNCg0KZGYkRDFNRlQgPC0gaWZlbHNlKGRmJEQxTUZUID09IDAsIDAgLDEpDQpkZiREM01GVCA8LSBpZmVsc2UoZGYkRDNNRlQgPT0gMCwgMCAsMSkNCg0KYGBgDQoNCg0KIyBTdWdhcg0KYGBge3J9DQpUdWtleUhTRChhb3YoZGYkdHNwX2RhaWx5IH4gZGYkUmVnaW9uTmFtZSkpDQpgYGANCmBgYHtyfQ0KZGZbInRzcF9kYWlseV9jYXQiXSA8LSBOQQ0KZGYkdHNwX2RhaWx5X2NhdCA8LSBjdXQoZGYkdHNwX2RhaWx5LA0KICAgICAgICAgICAgICAgICAgICAgYnJlYWtzPWMoMCwxLDQsIEluZiksDQogICAgICAgICAgICAgICAgICAgICBsYWJlbHM9Yygibm8iLCJsb3ciLCJoaWdoIikpDQpgYGANCg0KDQojIERJRVRBDQpgYGB7cn0NCmRmLmRpZXRhIDwtIGRmICAlPiUgDQogICAgICAgIGdhdGhlcigiRGlldCIsICJ0cHciLCBgMTRfU3dlZXRfeW9ndXJ0X3dlZWtseWA6YDE0X0NoZXdpbmdfZ3VtX3dpdGhfc3VnYXJfd2Vla2x5YCkNCmhpc3QoZGYuZGlldGEkdHB3KQ0Kc2QoZGYuZGlldGEkdHB3LCBuYS5ybSA9IFQpDQp0YWJsZShkZi5kaWV0YSR0cHcpDQpkZi5kaWV0YSAlPiUgDQogICAgICAgIGdyb3VwX2J5KERpZXQpICU+JSANCiAgICAgICAgc3VtbWFyaXNlKG1lZGlhblRQVyA9IG1lZGlhbih0cHcsIG5hLnJtPVQpLCBTRCA9IHNkKHRwdywgbmEucm09VCkpICU+JSANCiAgICAgICAgYXJyYW5nZShkZXNjKG1lZGlhblRQVykpDQoNCmRmLmRpZXRhICU+JSANCiAgICAgICAgZ2dwbG90KGFlcyggeD1yZW9yZGVyKERpZXQsIHRwdywgbWVhbiksIHkgPSB0cHcpKSArDQogICAgICAgIGdlb21fYm94cGxvdCgpDQoNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChkZiwgYWVzKHg9dHNwX2RhaWx5KSkgKyBnZW9tX2hpc3RvZ3JhbSgpDQpzZChkZiR0c3BfZGFpbHksIG5hLnJtID0gVCkNCg0KYGBgDQoNCiMgUmVncmVzaW9uDQpgYGB7cn0NCmRmLmxvZyA8LSBkZg0KZGYubG9nJGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYFtkZi5sb2ckYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgPT0iT25jZSBwZXIgZGF5Il0gPC0gIjAiDQpkZi5sb2ckYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgW2RmLmxvZyRgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2A9PSJUd28gb3IgbW9yZSB0aW1lcyBwZXIgZGF5Il0gPC0gIjAiDQoNCmRmLmxvZyRgMV9nZW5kZXJgIDwtIGlmZWxzZShkZi5sb2ckYDFfZ2VuZGVyYCAgPT0gIkYiLCAwICwxKQ0KZGYubG9nJEZBU19jYXQgPC0gaWZlbHNlKGRmLmxvZyRGQVNfY2F0ICA9PSAiSGlnaCBhZmZsdWVuY2UiLCAwICwxKQ0KZGYubG9nJGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCA8LSBpZmVsc2UoZGYubG9nJGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCAgPT0gIjAiLCAwICwxKQ0KZGYubG9nJGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2AgPC0gaWZlbHNlKGRmLmxvZyRgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgICA9PSAiVHdvIG9yIG1vcmUgdGltZXMiLCAwICwxKQ0KZGYubG9nJGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AgPC0gaWZlbHNlKGRmLmxvZyRgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgICA9PSAiVHdvIG9yIG1vcmUgdGltZXMgcGVyIHllYXIiLCAwICwxKQ0KZGYubG9nJGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgPC0gaWZlbHNlKGRmLmxvZyRgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICA9PSAiWWVzIiwgMCAsMSkNCmRmLmxvZyRgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCA8LSBpZmVsc2UoZGYubG9nJGA5X1VzYWdlX29mX21vdXRoX3dhc2hgICA9PSAiWWVzIiwgMCAsMSkNCmRmLmxvZyRgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgIDwtIGlmZWxzZShkZi5sb2ckYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgPT0gIlllcywgbm93IiwgMCAsMSkNCmRmLmxvZyRgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCA8LSBpZmVsc2UoZGYubG9nJGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICA9PSAxLCAxICwwKQ0KZGYubG9nJGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgPC0gaWZlbHNlKGRmLmxvZyRgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICA9PSAiTmV2ZXIiLCAxICwwKQ0KZGYubG9nJHRzcF9kYWlseSA8LSBpZmVsc2UoZGYubG9nJHRzcF9kYWlseSA8IDUsIDAgLDEpDQoNCmRmLmxvZyREMU1GVCA8LSBpZmVsc2UoZGYubG9nJEQxTUZUID4gMiwgMSAsMCkgI21lbm9zIHF1ZSBkb3MgZXMgInNpbiBjYXJpZXMiDQpkZi5sb2ckRDNNRlQgPC0gaWZlbHNlKGRmLmxvZyREM01GVCA+IDIsIDEgLDApDQpkZi5sb2ckRDVNRlQgPC0gaWZlbHNlKGRmLmxvZyRENU1GVCA9PSAwLCAwICwxKQ0KDQpgYGANCg0KYGBge3IgZDF9DQpkMSA8LSBnbG0oRDFNRlQgfiANCiAgICAgICAgICAgICAgICAgIGAxX2dlbmRlcmAgKw0KICAgICAgICAgICAgICAgICAgRkFTX2NhdCArIA0KICAgICAgICAgICAgICAgICAgYDhfRnJlcXVlbmN5X29mX3Rvb3RoYnJ1c2hpbmdgICsgDQogICAgICAgICAgICAgICAgICBgNF9GcmVxdWVuY3lfb2ZfZGVudGlzdF92aXNpdHNfaW5fbGFzdF8xMl9tb250aHNgICArDQogICAgICAgICAgICAgICAgICBgN19GcmVxdWVuY3lfb2ZfZGVudGFsX2h5Z2llbmlzdF92aXNpdHNgICsgDQogICAgICAgICAgICAgICAgICBgOV9Vc2FnZV9vZl9kZW50YWxfZmxvc3NgICArDQogICAgICAgICAgICAgICAgICBgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCArIA0KICAgICAgICAgICAgICAgICAgYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgKw0KICAgICAgICAgICAgICAgICAgYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgKyANCiAgICAgICAgICAgICAgICAgIGAxOF9GcmVxdWVuY3lfb2Zfc21va2luZ2AgKyANCiAgICAgICAgICAgICAgICAgIHRzcF9kYWlseSwgDQogICAgICAgICAgICAgICAgZGF0YSA9IGRmLmxvZywgDQogICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwpDQoNCnN1bW1hcnkoZDEpDQpgYGANCg0KDQpgYGB7ciBkMSAyfQ0KZDIgPC0gZ2xtKEQxTUZUIH4gDQogICAgICAgICAgICAgICAgICBgMV9nZW5kZXJgICsNCiAgICAgICAgICAgICAgICAgIEZBU19jYXQgKyANCiAgICAgICAgICAgICAgICAgIGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCArIA0KICAgICAgICAgICAgICAgICAgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCAgKw0KICAgICAgICAgICAgICAgICAgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCArIA0KDQoNCiAgICAgICAgICAgICAgICAgIGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgICsNCiAgICAgICAgICAgICAgICAgIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICsgDQogICAgICAgICAgICAgICAgICBgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICsgDQogICAgICAgICAgICAgICAgICB0c3BfZGFpbHksIA0KICAgICAgICAgICAgICAgIGRhdGEgPSBkZi5sb2csIA0KICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKQ0KDQpzdW1tYXJ5KGQyKQ0KYGBgDQpgYGB7cn0NCnN0YXJnYXplcihkMSwgZDIsIHR5cGU9InRleHQiLCBkaWdpdHM9MywgDQogICAgICAgICAgZGVwLnZhci5sYWJlbHM9YygiQ2FyaWVzIGF0IEQxIG1vcmUgdGhhbiB0d28gKCA9IDEpIiksDQogICAgICAgICAgY292YXJpYXRlLmxhYmVscz1jKCJTZXggKG1hbGUgPSAxKSIsDQogICAgICAgICAgICAgICAgICAgICJGQVMgKExvdyA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgIkZyZXEgVG9vdGhicnVzaGluZyAoIDwgb25jZSBwZXIgd2VlayA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgICJGcmVxIHZpc2l0IGRlbnRpc3QgKCA8IG9uY2UgcGVyIHllYXIgPSAxKSIsDQogICAgICAgICAgICAgICAgICAgICJGcmVxIHZpc2l0IGh5Z2llbmlzdCAoIDwgb25jZSBwZXIgeWVhciA9IDEpIiwgDQogICAgICAgICAgICAgICAgICAgICJEZW50YWwgZmxvc3MgKG5vIHVzZSA9IDEpIiwgDQogICAgICAgICAgICAgICAgICAgICJNb3V0aHdhc2ggKG5vIHVzZSA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgIlVzZSBvZiBmbHVvcmlkZSBzdXBwbGVtZW50IChubyB1c2UgPSAxKSIsIA0KICAgICAgICAgICAgICAgICAgICAiRWF0aW5nIGhhYml0cyAoaGlnaCBpbiBzd2VldCA9IDEpIiwNCiAgDQogICAgICAgICAgICAgICAgICAgICJNb3JlIHRoYW4gb25lIHRlYXNwb29uIGluIHRlYSwgY29mZmVlIG9yIGNhY2FvIiksIA0KIG91dD0iLi9tb2RlbHMvbW9kZWxzZDEtZDIudHh0IikNCmBgYA0KDQpgYGB7ciBkMyB5IGQ0fQ0KZDMgPC0gZ2xtKEQzTUZUIH4gDQogICAgICAgICAgICAgICAgICBgMV9nZW5kZXJgICsNCiAgICAgICAgICAgICAgICAgIEZBU19jYXQgKyANCiAgICAgICAgICAgICAgICAgIGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCArIA0KICAgICAgICAgICAgICAgICAgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCAgKw0KICAgICAgICAgICAgICAgICAgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCArIA0KICAgICAgICAgICAgICAgICAgYDlfVXNhZ2Vfb2ZfZGVudGFsX2Zsb3NzYCAgKw0KICAgICAgICAgICAgICAgICAgYDlfVXNhZ2Vfb2ZfbW91dGhfd2FzaGAgKyANCiAgICAgICAgICAgICAgICAgIGAxMV9Vc2FnZV9vZl9mbHVvcmlkZV9zdXBwbGVtZW50c2AgICsNCiAgICAgICAgICAgICAgICAgIGAxM19FYXRpbmdfaGFiaXRzX2dyb3VwZWRgICsgDQogICAgICAgICAgICAgICAgICBgMThfRnJlcXVlbmN5X29mX3Ntb2tpbmdgICsgDQogICAgICAgICAgICAgICAgICB0c3BfZGFpbHksIA0KICAgICAgICAgICAgICAgIGRhdGEgPSBkZi5sb2csIA0KICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKQ0KDQpzdW1tYXJ5KGQzKQ0KYGBgDQoNCmBgYHtyIGQ0fQ0KZDQgPC0gZ2xtKEQzTUZUIH4gDQogICAgICAgICAgICAgICAgICBgMV9nZW5kZXJgICsNCiAgICAgICAgICAgICAgICAgIEZBU19jYXQgKyANCiAgICAgICAgICAgICAgICAgIGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCArIA0KICAgICAgICAgICAgICAgICAgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCAgKw0KICAgICAgICAgICAgICAgICAgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCArIA0KDQogICAgICAgICAgICAgICAgICBgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCArIA0KICAgICAgICAgICAgICAgICAgYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgKw0KICAgICAgICAgICAgICAgICAgYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgKyANCiANCiAgICAgICAgICAgICAgICAgIHRzcF9kYWlseSwgDQogICAgICAgICAgICAgICAgZGF0YSA9IGRmLmxvZywgDQogICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwpDQoNCnN1bW1hcnkoZDQpDQpgYGANCg0KYGBge3J9DQpzdGFyZ2F6ZXIoZDMsIGQ0LCB0eXBlPSJ0ZXh0IiwgZGlnaXRzPTMsIA0KICAgICAgICAgIGRlcC52YXIubGFiZWxzPWMoIkNhcmllcyBhdCBEMyBtb3JlIHRoYW4gMiAoID0gMSkiKSwNCiAgICAgICAgICBjb3ZhcmlhdGUubGFiZWxzPWMoIlNleCAobWFsZSA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgIkZBUyAoTG93ID0gMSkiLA0KICAgICAgICAgICAgICAgICAgICAiRnJlcSBUb290aGJydXNoaW5nICggPCBvbmNlIHBlciB3ZWVrID0gMSkiLA0KICAgICAgICAgICAgICAgICAgICAgIkZyZXEgdmlzaXQgZGVudGlzdCAoIDwgb25jZSBwZXIgeWVhciA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgIkZyZXEgdmlzaXQgaHlnaWVuaXN0ICggPCBvbmNlIHBlciB5ZWFyID0gMSkiLCANCiAgICAgICAgICAgICAgICAgICAgIkRlbnRhbCBmbG9zcyAobm8gdXNlID0gMSkiLCANCiAgICAgICAgICAgICAgICAgICAgIk1vdXRod2FzaCAobm8gdXNlID0gMSkiLA0KICAgICAgICAgICAgICAgICAgICAiVXNlIG9mIGZsdW9yaWRlIHN1cHBsZW1lbnQgKG5vIHVzZSA9IDEpIiwgDQogICAgICAgICAgICAgICAgICAgICJFYXRpbmcgaGFiaXRzIChoaWdoIGluIHN3ZWV0ID0gMSkiLA0KICANCiAgICAgICAgICAgICAgICAgICAgIk1vcmUgdGhhbiBvbmUgdGVhc3Bvb24gaW4gdGVhLCBjb2ZmZWUgb3IgY2FjYW8iKSwgDQogb3V0PSIuL21vZGVscy9tb2RlbHNEMy00LnR4dCIpDQpgYGANCg0KIyMgRDVNRlQgcmVncmVzaW9uDQpgYGB7ciBENSAxfQ0KDQoNCmQ1IDwtIGdsbShENU1GVCB+IA0KICAgICAgICAgICAgICAgICAgYDFfZ2VuZGVyYCArDQogICAgICAgICAgICAgICAgICBGQVNfY2F0ICsgDQogICAgICAgICAgICAgICAgICBgOF9GcmVxdWVuY3lfb2ZfdG9vdGhicnVzaGluZ2AgKyANCiAgICAgICAgICAgICAgICAgIGA0X0ZyZXF1ZW5jeV9vZl9kZW50aXN0X3Zpc2l0c19pbl9sYXN0XzEyX21vbnRoc2AgICsNCiAgICAgICAgICAgICAgICAgIGA3X0ZyZXF1ZW5jeV9vZl9kZW50YWxfaHlnaWVuaXN0X3Zpc2l0c2AgKyANCiAgICAgICAgICAgICAgICAgIGA5X1VzYWdlX29mX2RlbnRhbF9mbG9zc2AgICsNCiAgICAgICAgICAgICAgICAgIGA5X1VzYWdlX29mX21vdXRoX3dhc2hgICsgDQogICAgICAgICAgICAgICAgICBgMTFfVXNhZ2Vfb2ZfZmx1b3JpZGVfc3VwcGxlbWVudHNgICArDQogICAgICAgICAgICAgICAgICBgMTNfRWF0aW5nX2hhYml0c19ncm91cGVkYCArIA0KICAgICAgICAgICAgICAgICAgYDE4X0ZyZXF1ZW5jeV9vZl9zbW9raW5nYCArIA0KICAgICAgICAgICAgICAgICAgdHNwX2RhaWx5LCANCiAgICAgICAgICAgICAgICBkYXRhID0gZGYubG9nLCANCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCkNCg0Kc3VtbWFyeShkNSkNCg0KYGBgDQoNCmBgYHtyIGQ2fQ0KZDYgPC0gZ2xtKEQ1TUZUIH4gDQogICAgICAgICAgICAgICAgICBgMV9nZW5kZXJgICsNCiAgICAgICAgICAgICAgICAgIEZBU19jYXQgKyANCiAgICAgICAgICAgICAgICAgIGA4X0ZyZXF1ZW5jeV9vZl90b290aGJydXNoaW5nYCArIA0KICAgICAgICAgICAgICAgICAgYDRfRnJlcXVlbmN5X29mX2RlbnRpc3RfdmlzaXRzX2luX2xhc3RfMTJfbW9udGhzYCAgKw0KICAgICAgICAgICAgICAgICAgYDdfRnJlcXVlbmN5X29mX2RlbnRhbF9oeWdpZW5pc3RfdmlzaXRzYCArIA0KDQogICAgICAgICAgICAgICAgICBgOV9Vc2FnZV9vZl9tb3V0aF93YXNoYCArIA0KICAgICAgICAgICAgICAgICAgYDExX1VzYWdlX29mX2ZsdW9yaWRlX3N1cHBsZW1lbnRzYCAgKw0KICAgICAgICAgICAgICAgICAgYDEzX0VhdGluZ19oYWJpdHNfZ3JvdXBlZGAgKyANCiANCiAgICAgICAgICAgICAgICAgIHRzcF9kYWlseSwgDQogICAgICAgICAgICAgICAgZGF0YSA9IGRmLmxvZywgDQogICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwpDQoNCnN1bW1hcnkoZDUpDQpgYGANCg0KYGBge3J9DQpzdGFyZ2F6ZXIoZDUsIGQ2LCB0eXBlPSJ0ZXh0IiwgZGlnaXRzPTMsIA0KICAgICAgICAgIGRlcC52YXIubGFiZWxzPWMoIkNhcmllcyBhdCBENSBkaWZmZXJlbnQgdGhhbiAwICg9IDEpIiksDQogICAgICAgICAgY292YXJpYXRlLmxhYmVscz1jKCJTZXggKG1hbGUgPSAxKSIsDQogICAgICAgICAgICAgICAgICAgICJGQVMgKExvdyA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgIkZyZXEgVG9vdGhicnVzaGluZyAoIDwgb25jZSBwZXIgd2VlayA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgICJGcmVxIHZpc2l0IGRlbnRpc3QgKCA8IG9uY2UgcGVyIHllYXIgPSAxKSIsDQogICAgICAgICAgICAgICAgICAgICJGcmVxIHZpc2l0IGh5Z2llbmlzdCAoIDwgb25jZSBwZXIgeWVhciA9IDEpIiwgDQogICAgICAgICAgICAgICAgICAgICJEZW50YWwgZmxvc3MgKG5vIHVzZSA9IDEpIiwgDQogICAgICAgICAgICAgICAgICAgICJNb3V0aHdhc2ggKG5vIHVzZSA9IDEpIiwNCiAgICAgICAgICAgICAgICAgICAgIlVzZSBvZiBmbHVvcmlkZSBzdXBwbGVtZW50IChubyB1c2UgPSAxKSIsIA0KICAgICAgICAgICAgICAgICAgICAiRWF0aW5nIGhhYml0cyAoaGlnaCBpbiBzd2VldCA9IDEpIiwNCiAgDQogICAgICAgICAgICAgICAgICAgICJNb3JlIHRoYW4gb25lIHRlYXNwb29uIGluIHRlYSwgY29mZmVlIG9yIGNhY2FvIiksIA0KIG91dD0iLi9tb2RlbHMvbW9kZWxzRDUtNi50eHQiKQ0KYGBg