library(ipumsr)
ddi <- read_ipums_ddi("nhis_00002.xml")
data <- read_ipums_micro(ddi)
## Use of data from IPUMS NHIS is subject to conditions including that users
## should cite the data appropriately. Use command `ipums_conditions()` for more
## details.
data<- haven::zap_labels(data)
names(data) <- tolower(gsub(pattern = "_",replacement =  "",x =  names(data)))
data <- data%>%
filter(age >=18 & age<=24)

Perform a mean (a mean for numeric data) or a modal imputation (for categorical data) of all values. Perform the analysis using this imputed data. What are your results?

summary(data[, c("badhealth", "smoke_100cig",  "opportunity_youth_cat", "educ", "healthinsurace_coverage",  "medication_for_depression", "medication_for_worry", "anxiety_disoreder")])
##    badhealth       smoke_100cig           opportunity_youth_cat
##  Min.   :0.00000   yes : 522    Opportunity youth    : 402     
##  1st Qu.:0.00000   no  :3270    Not opportunity youth:3373     
##  Median :0.00000   NA's:  80    NA's                 :  97     
##  Mean   :0.05528                                               
##  3rd Qu.:0.00000                                               
##  Max.   :1.00000                                               
##  NA's   :1                                                     
##             educ          healthinsurace_coverage medication_for_depression
##  1Less than HS: 379   yes, no coverage: 562       yes : 303                
##  2hsgrad      :1277   no, has coverage:3278       no  :3519                
##  3More than HS:2206   NA's            :  32       NA's:  50                
##  NA's         :  10                                                        
##                                                                            
##                                                                            
##                                                                            
##  medication_for_worry anxiety_disoreder
##  yes : 369            yes : 673        
##  no  :3453            no  :3193        
##  NA's:  50            NA's:   6        
##                                        
##                                        
##                                        
## 

Which shows that, among these recoded variables, opportunity_youth_cat , the opportunity youth variable, 97 people in the IPUMS NHIS, or 2.5051653% of the sample.

The lowest number of missings is in the bad health variable, which only has 0.0258264% missing.

summary(data$badhealth) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## 0.00000 0.00000 0.00000 0.05528 0.00000 1.00000       1
data$badhealth.imp.mode<-ifelse(is.na(data$badhealth)==T, mode(data$badhealth), data$badhealth)

mode(data$badhealth)
## [1] "numeric"
mode(data$badhealth.imp.mode) #no difference!
## [1] "character"
fit<-lm(badhealth ~ opportunity_youth_cat  + race_eth + educ + smoke_100cig +healthinsurace_coverage +anxiety_disoreder+ medication_for_depression, data)
summary(fit)
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + educ + 
##     smoke_100cig + healthinsurace_coverage + anxiety_disoreder + 
##     medication_for_depression, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.27940 -0.07317 -0.02979 -0.01306  0.98793 
## 
## Coefficients:
##                                             Estimate Std. Error t value
## (Intercept)                                 0.276535   0.022511  12.284
## opportunity_youth_catNot opportunity youth -0.058798   0.012144  -4.842
## race_ethotherminority                       0.016730   0.007575   2.209
## educ2hsgrad                                -0.028887   0.013266  -2.178
## educ3More than HS                          -0.027892   0.012818  -2.176
## smoke_100cigno                             -0.047244   0.010832  -4.361
## healthinsurace_coverageno, has coverage    -0.013861   0.010709  -1.294
## anxiety_disorederno                        -0.072285   0.010904  -6.629
## medication_for_depressionno                -0.043391   0.015151  -2.864
##                                            Pr(>|t|)    
## (Intercept)                                 < 2e-16 ***
## opportunity_youth_catNot opportunity youth 1.34e-06 ***
## race_ethotherminority                       0.02726 *  
## educ2hsgrad                                 0.02950 *  
## educ3More than HS                           0.02962 *  
## smoke_100cigno                             1.33e-05 ***
## healthinsurace_coverageno, has coverage     0.19563    
## anxiety_disorederno                        3.86e-11 ***
## medication_for_depressionno                 0.00421 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2209 on 3712 degrees of freedom
##   (151 observations deleted due to missingness)
## Multiple R-squared:  0.04272,    Adjusted R-squared:  0.04065 
## F-statistic:  20.7 on 8 and 3712 DF,  p-value: < 2.2e-16
table(data$opportunity_youth_cat)
## 
##     Opportunity youth Not opportunity youth 
##                   402                  3373
#find the most common value
mcv.opportunity_youth_cat<-factor(names(which.max(table(data$opportunity_youth_cat))), levels=levels(data$opportunity_youth_cat))
mcv.opportunity_youth_cat
## [1] Not opportunity youth
## Levels: Opportunity youth Not opportunity youth
#impute the cases
data$opportunity_youth_cat.imp<-as.factor(ifelse(is.na(data$opportunity_youth_cat)==T, mcv.opportunity_youth_cat, data$opportunity_youth_cat))
levels(data$opportunity_youth_cat.imp)<-levels(data$opportunity_youth_cat)

prop.table(table(data$opportunity_youth_cat))
## 
##     Opportunity youth Not opportunity youth 
##             0.1064901             0.8935099
prop.table(table(data$opportunity_youth_cat.imp))
## 
##     Opportunity youth Not opportunity youth 
##             0.1038223             0.8961777
barplot(prop.table(table(data$opportunity_youth_cat)), main="Original Data",ylim=c(0, 0.9))

barplot(prop.table(table(data$opportunity_youth_cat)), main="Imputed Data",ylim=c(0, 0.9))

Measure an outcome variable and at least 5 predictors

Outcome variable: Health status

Predictors

  1. Opportunity youth status

  2. level of educcation

  3. smoking behavior

  4. health insurance coverage

  5. anxiety disorder

  6. medication for depression

Linear model result without missing data

fit1<- lm(badhealth ~ opportunity_youth_cat  + educ +sex + smoke_100cig +healthinsurace_coverage +anxiety_disoreder+ medication_for_depression , data= data)
summary(fit1)
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + educ + sex + 
##     smoke_100cig + healthinsurace_coverage + anxiety_disoreder + 
##     medication_for_depression, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.26821 -0.07499 -0.02514 -0.01660  0.98393 
## 
## Coefficients:
##                                             Estimate Std. Error t value
## (Intercept)                                 0.286058   0.022363  12.792
## opportunity_youth_catNot opportunity youth -0.058918   0.012165  -4.843
## educ2hsgrad                                -0.029137   0.013271  -2.195
## educ3More than HS                          -0.029662   0.012819  -2.314
## sexMale                                    -0.008544   0.007436  -1.149
## smoke_100cigno                             -0.045601   0.010810  -4.218
## healthinsurace_coverageno, has coverage    -0.017844   0.010543  -1.693
## anxiety_disorederno                        -0.067871   0.010967  -6.189
## medication_for_depressionno                -0.041543   0.015168  -2.739
##                                            Pr(>|t|)    
## (Intercept)                                 < 2e-16 ***
## opportunity_youth_catNot opportunity youth 1.33e-06 ***
## educ2hsgrad                                 0.02819 *  
## educ3More than HS                           0.02073 *  
## sexMale                                     0.25066    
## smoke_100cigno                             2.52e-05 ***
## healthinsurace_coverageno, has coverage     0.09061 .  
## anxiety_disorederno                        6.73e-10 ***
## medication_for_depressionno                 0.00619 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.221 on 3712 degrees of freedom
##   (151 observations deleted due to missingness)
## Multiple R-squared:  0.0418, Adjusted R-squared:  0.03973 
## F-statistic: 20.24 on 8 and 3712 DF,  p-value: < 2.2e-16

Testing for MAR

Flag variables

fit1<-lm(badhealth~is.na(smoke_100cig), data=data)
fit2<-lm(badhealth~is.na(opportunity_youth_cat), data=data)
fit3<-lm(badhealth~is.na(medication_for_depression), data=data)


summary(fit1)
## 
## Call:
## lm(formula = badhealth ~ is.na(smoke_100cig), data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.0875 -0.0546 -0.0546 -0.0546  0.9454 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             0.054603   0.003712  14.710   <2e-16 ***
## is.na(smoke_100cig)TRUE 0.032897   0.025820   1.274    0.203    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2285 on 3869 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.0004194,  Adjusted R-squared:  0.000161 
## F-statistic: 1.623 on 1 and 3869 DF,  p-value: 0.2027
summary(fit2)
## 
## Call:
## lm(formula = badhealth ~ is.na(opportunity_youth_cat), data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.07216 -0.05485 -0.05485 -0.05485  0.94515 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      0.054849   0.003721  14.741   <2e-16 ***
## is.na(opportunity_youth_cat)TRUE 0.017316   0.023505   0.737    0.461    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2286 on 3869 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.0001403,  Adjusted R-squared:  -0.0001182 
## F-statistic: 0.5427 on 1 and 3869 DF,  p-value: 0.4613
summary(fit3)
## 
## Call:
## lm(formula = badhealth ~ is.na(medication_for_depression), data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.08000 -0.05496 -0.05496 -0.05496  0.94504 
## 
## Coefficients:
##                                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                          0.054959   0.003698   14.86   <2e-16 ***
## is.na(medication_for_depression)TRUE 0.025041   0.032536    0.77    0.442    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2286 on 3869 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.0001531,  Adjusted R-squared:  -0.0001054 
## F-statistic: 0.5923 on 1 and 3869 DF,  p-value: 0.4416

The above shows that the variables are missing at random as they are insignificant

Report the pattern of missingness among all of these variables

#look at the patterns of missingness
md.pattern(data[,c("race_eth", "badhealth", "opportunity_youth_cat","smoke_100cig","educ", "anxiety_disoreder")])

##      race_eth badhealth anxiety_disoreder educ smoke_100cig
## 3754        1         1                 1    1            1
## 22          1         1                 1    1            1
## 6           1         1                 1    1            0
## 73          1         1                 1    1            0
## 9           1         1                 1    0            1
## 1           1         1                 1    0            0
## 5           1         1                 0    1            1
## 1           1         1                 0    1            1
## 1           1         0                 1    1            1
##             0         1                 6   10           80
##      opportunity_youth_cat    
## 3754                     1   0
## 22                       0   1
## 6                        1   1
## 73                       0   2
## 9                        1   1
## 1                        0   3
## 5                        1   1
## 1                        0   2
## 1                        1   1
##                         97 194
library(Amelia)
## Loading required package: Rcpp
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.8.0, built: 2021-05-26)
## ## Copyright (C) 2005-2022 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
md.pairs(data[,c("race_eth", "badhealth", "opportunity_youth_cat","smoke_100cig","educ", "anxiety_disoreder")])
## $rr
##                       race_eth badhealth opportunity_youth_cat smoke_100cig
## race_eth                  3872      3871                  3775         3792
## badhealth                 3871      3871                  3774         3791
## opportunity_youth_cat     3775      3774                  3775         3769
## smoke_100cig              3792      3791                  3769         3792
## educ                      3862      3861                  3766         3783
## anxiety_disoreder         3866      3865                  3770         3786
##                       educ anxiety_disoreder
## race_eth              3862              3866
## badhealth             3861              3865
## opportunity_youth_cat 3766              3770
## smoke_100cig          3783              3786
## educ                  3862              3856
## anxiety_disoreder     3856              3866
## 
## $rm
##                       race_eth badhealth opportunity_youth_cat smoke_100cig
## race_eth                     0         1                    97           80
## badhealth                    0         0                    97           80
## opportunity_youth_cat        0         1                     0            6
## smoke_100cig                 0         1                    23            0
## educ                         0         1                    96           79
## anxiety_disoreder            0         1                    96           80
##                       educ anxiety_disoreder
## race_eth                10                 6
## badhealth               10                 6
## opportunity_youth_cat    9                 5
## smoke_100cig             9                 6
## educ                     0                 6
## anxiety_disoreder       10                 0
## 
## $mr
##                       race_eth badhealth opportunity_youth_cat smoke_100cig
## race_eth                     0         0                     0            0
## badhealth                    1         0                     1            1
## opportunity_youth_cat       97        97                     0           23
## smoke_100cig                80        80                     6            0
## educ                        10        10                     9            9
## anxiety_disoreder            6         6                     5            6
##                       educ anxiety_disoreder
## race_eth                 0                 0
## badhealth                1                 1
## opportunity_youth_cat   96                96
## smoke_100cig            79                80
## educ                     0                10
## anxiety_disoreder        6                 0
## 
## $mm
##                       race_eth badhealth opportunity_youth_cat smoke_100cig
## race_eth                     0         0                     0            0
## badhealth                    0         1                     0            0
## opportunity_youth_cat        0         0                    97           74
## smoke_100cig                 0         0                    74           80
## educ                         0         0                     1            1
## anxiety_disoreder            0         0                     1            0
##                       educ anxiety_disoreder
## race_eth                 0                 0
## badhealth                0                 0
## opportunity_youth_cat    1                 1
## smoke_100cig             1                 0
## educ                    10                 0
## anxiety_disoreder        0                 6
dat2<-data

imp<-mice(data = dat2[,c("race_eth", "badhealth", "opportunity_youth_cat","smoke_100cig","educ", "anxiety_disoreder")], seed = 22, m = 10)
## 
##  iter imp variable
##   1   1  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   2  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   3  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   4  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   5  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   6  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   7  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   8  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   9  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   1   10  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   1  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   2  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   3  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   4  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   5  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   6  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   7  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   8  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   9  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   2   10  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   1  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   2  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   3  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   4  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   5  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   6  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   7  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   8  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   9  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   3   10  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   1  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   2  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   3  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   4  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   5  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   6  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   7  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   8  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   9  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   4   10  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   1  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   2  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   3  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   4  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   5  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   6  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   7  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   8  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   9  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
##   5   10  badhealth  opportunity_youth_cat  smoke_100cig  educ  anxiety_disoreder
print(imp)
## Class: mids
## Number of multiple imputations:  10 
## Imputation methods:
##              race_eth             badhealth opportunity_youth_cat 
##                    ""                 "pmm"              "logreg" 
##          smoke_100cig                  educ     anxiety_disoreder 
##              "logreg"             "polyreg"              "logreg" 
## PredictorMatrix:
##                       race_eth badhealth opportunity_youth_cat smoke_100cig
## race_eth                     0         1                     1            1
## badhealth                    1         0                     1            1
## opportunity_youth_cat        1         1                     0            1
## smoke_100cig                 1         1                     1            0
## educ                         1         1                     1            1
## anxiety_disoreder            1         1                     1            1
##                       educ anxiety_disoreder
## race_eth                 1                 1
## badhealth                1                 1
## opportunity_youth_cat    1                 1
## smoke_100cig             1                 1
## educ                     0                 1
## anxiety_disoreder        1                 0
plot(imp)

head(imp$imp$badhealth)
summary(imp$imp$badhealth)
##        1           2           3           4           5           6    
##  Min.   :1   Min.   :0   Min.   :0   Min.   :1   Min.   :0   Min.   :0  
##  1st Qu.:1   1st Qu.:0   1st Qu.:0   1st Qu.:1   1st Qu.:0   1st Qu.:0  
##  Median :1   Median :0   Median :0   Median :1   Median :0   Median :0  
##  Mean   :1   Mean   :0   Mean   :0   Mean   :1   Mean   :0   Mean   :0  
##  3rd Qu.:1   3rd Qu.:0   3rd Qu.:0   3rd Qu.:1   3rd Qu.:0   3rd Qu.:0  
##  Max.   :1   Max.   :0   Max.   :0   Max.   :1   Max.   :0   Max.   :0  
##        7           8           9           10   
##  Min.   :0   Min.   :0   Min.   :0   Min.   :0  
##  1st Qu.:0   1st Qu.:0   1st Qu.:0   1st Qu.:0  
##  Median :0   Median :0   Median :0   Median :0  
##  Mean   :0   Mean   :0   Mean   :0   Mean   :0  
##  3rd Qu.:0   3rd Qu.:0   3rd Qu.:0   3rd Qu.:0  
##  Max.   :0   Max.   :0   Max.   :0   Max.   :0
summary(data$badhealth)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
## 0.00000 0.00000 0.00000 0.05528 0.00000 1.00000       1

Perform a multiple imputation of all values. Perform the analysis using this imputed data set. What are your results?

dat.imp<-complete(imp, action = 1)
head(dat.imp, n=10)
#Compare to the original data
head(data[,c("race_eth", "badhealth", "opportunity_youth_cat","smoke_100cig","educ", "anxiety_disoreder")], n=10)
head(dat.imp[is.na(data$badhealth)==T,], n=10)
head(data[is.na(data$badhealth)==T,c("race_eth", "badhealth", "opportunity_youth_cat","smoke_100cig","educ", "anxiety_disoreder")], n=10)
fit.badhealth<-with(data=imp ,expr=lm(badhealth~opportunity_youth_cat + race_eth + smoke_100cig + educ  
                                +anxiety_disoreder))
fit.badhealth
## call :
## with.mids(data = imp, expr = lm(badhealth ~ opportunity_youth_cat + 
##     race_eth + smoke_100cig + educ + anxiety_disoreder))
## 
## call1 :
## mice(data = dat2[, c("race_eth", "badhealth", "opportunity_youth_cat", 
##     "smoke_100cig", "educ", "anxiety_disoreder")], m = 10, seed = 22)
## 
## nmis :
##              race_eth             badhealth opportunity_youth_cat 
##                     0                     1                    97 
##          smoke_100cig                  educ     anxiety_disoreder 
##                    80                    10                     6 
## 
## analyses :
## [[1]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.24618  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06337  
##                      race_ethotherminority  
##                                    0.01571  
##                             smoke_100cigno  
##                                   -0.05293  
##                                educ2hsgrad  
##                                   -0.02264  
##                          educ3More than HS  
##                                   -0.02892  
##                        anxiety_disorederno  
##                                   -0.08656  
## 
## 
## [[2]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.25359  
## opportunity_youth_catNot opportunity youth  
##                                   -0.07072  
##                      race_ethotherminority  
##                                    0.01583  
##                             smoke_100cigno  
##                                   -0.05330  
##                                educ2hsgrad  
##                                   -0.02507  
##                          educ3More than HS  
##                                   -0.02868  
##                        anxiety_disorederno  
##                                   -0.08667  
## 
## 
## [[3]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.24961  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06754  
##                      race_ethotherminority  
##                                    0.01597  
##                             smoke_100cigno  
##                                   -0.05030  
##                                educ2hsgrad  
##                                   -0.02464  
##                          educ3More than HS  
##                                   -0.02888  
##                        anxiety_disorederno  
##                                   -0.08854  
## 
## 
## [[4]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.24507  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06059  
##                      race_ethotherminority  
##                                    0.01588  
##                             smoke_100cigno  
##                                   -0.05361  
##                                educ2hsgrad  
##                                   -0.02432  
##                          educ3More than HS  
##                                   -0.02857  
##                        anxiety_disorederno  
##                                   -0.08720  
## 
## 
## [[5]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.25344  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06745  
##                      race_ethotherminority  
##                                    0.01639  
##                             smoke_100cigno  
##                                   -0.05406  
##                                educ2hsgrad  
##                                   -0.02736  
##                          educ3More than HS  
##                                   -0.03164  
##                        anxiety_disorederno  
##                                   -0.08655  
## 
## 
## [[6]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.24750  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06435  
##                      race_ethotherminority  
##                                    0.01624  
##                             smoke_100cigno  
##                                   -0.05271  
##                                educ2hsgrad  
##                                   -0.02432  
##                          educ3More than HS  
##                                   -0.02866  
##                        anxiety_disorederno  
##                                   -0.08732  
## 
## 
## [[7]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.24452  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06141  
##                      race_ethotherminority  
##                                    0.01592  
##                             smoke_100cigno  
##                                   -0.05317  
##                                educ2hsgrad  
##                                   -0.02370  
##                          educ3More than HS  
##                                   -0.02950  
##                        anxiety_disorederno  
##                                   -0.08597  
## 
## 
## [[8]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.24557  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06202  
##                      race_ethotherminority  
##                                    0.01611  
##                             smoke_100cigno  
##                                   -0.04982  
##                                educ2hsgrad  
##                                   -0.02414  
##                          educ3More than HS  
##                                   -0.03025  
##                        anxiety_disorederno  
##                                   -0.08946  
## 
## 
## [[9]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.25096  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06529  
##                      race_ethotherminority  
##                                    0.01599  
##                             smoke_100cigno  
##                                   -0.05306  
##                                educ2hsgrad  
##                                   -0.02758  
##                          educ3More than HS  
##                                   -0.03172  
##                        anxiety_disorederno  
##                                   -0.08668  
## 
## 
## [[10]]
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + race_eth + smoke_100cig + 
##     educ + anxiety_disoreder)
## 
## Coefficients:
##                                (Intercept)  
##                                    0.24351  
## opportunity_youth_catNot opportunity youth  
##                                   -0.06331  
##                      race_ethotherminority  
##                                    0.01586  
##                             smoke_100cigno  
##                                   -0.04854  
##                                educ2hsgrad  
##                                   -0.02528  
##                          educ3More than HS  
##                                   -0.03012  
##                        anxiety_disorederno  
##                                   -0.08629

variation in bad health

with (data=imp, exp=(sd(badhealth)))
## call :
## with.mids(data = imp, expr = (sd(badhealth)))
## 
## call1 :
## mice(data = dat2[, c("race_eth", "badhealth", "opportunity_youth_cat", 
##     "smoke_100cig", "educ", "anxiety_disoreder")], m = 10, seed = 22)
## 
## nmis :
##              race_eth             badhealth opportunity_youth_cat 
##                     0                     1                    97 
##          smoke_100cig                  educ     anxiety_disoreder 
##                    80                    10                     6 
## 
## analyses :
## [[1]]
## [1] 0.2290353
## 
## [[2]]
## [1] 0.2285333
## 
## [[3]]
## [1] 0.2285333
## 
## [[4]]
## [1] 0.2290353
## 
## [[5]]
## [1] 0.2285333
## 
## [[6]]
## [1] 0.2285333
## 
## [[7]]
## [1] 0.2285333
## 
## [[8]]
## [1] 0.2285333
## 
## [[9]]
## [1] 0.2285333
## 
## [[10]]
## [1] 0.2285333

Frequency table for opportunity youth

with (data=imp, exp=(prop.table(table(opportunity_youth_cat))))
## call :
## with.mids(data = imp, expr = (prop.table(table(opportunity_youth_cat))))
## 
## call1 :
## mice(data = dat2[, c("race_eth", "badhealth", "opportunity_youth_cat", 
##     "smoke_100cig", "educ", "anxiety_disoreder")], m = 10, seed = 22)
## 
## nmis :
##              race_eth             badhealth opportunity_youth_cat 
##                     0                     1                    97 
##          smoke_100cig                  educ     anxiety_disoreder 
##                    80                    10                     6 
## 
## analyses :
## [[1]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##             0.1066632             0.8933368 
## 
## [[2]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##              0.106405              0.893595 
## 
## [[3]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##             0.1066632             0.8933368 
## 
## [[4]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##              0.107438              0.892562 
## 
## [[5]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##              0.106405              0.893595 
## 
## [[6]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##             0.1069215             0.8930785 
## 
## [[7]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##             0.1069215             0.8930785 
## 
## [[8]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##              0.106405              0.893595 
## 
## [[9]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##             0.1061467             0.8938533 
## 
## [[10]]
## opportunity_youth_cat
##     Opportunity youth Not opportunity youth 
##             0.1061467             0.8938533
est.p<-pool(fit.badhealth)
print(est.p)
## Class: mipo    m = 10 
##                                         term  m    estimate         ubar
## 1                                (Intercept) 10  0.24799478 3.332444e-04
## 2 opportunity_youth_catNot opportunity youth 10 -0.06460482 1.423434e-04
## 3                      race_ethotherminority 10  0.01599045 5.465086e-05
## 4                             smoke_100cigno 10 -0.05215022 1.140941e-04
## 5                                educ2hsgrad 10 -0.02490614 1.713281e-04
## 6                          educ3More than HS 10 -0.02969375 1.586324e-04
## 7                        anxiety_disorederno 10 -0.08712492 9.358192e-05
##              b            t dfcom       df          riv       lambda        fmi
## 1 1.361550e-05 3.482214e-04  3865 2100.657 0.0449431425 0.0430101320 0.04391997
## 2 1.010216e-05 1.534558e-04  3865 1160.468 0.0780673722 0.0724141869 0.07400871
## 3 4.141546e-08 5.469641e-05  3865 3858.636 0.0008336009 0.0008329066 0.00135039
## 4 3.523066e-06 1.179694e-04  3865 2580.205 0.0339664672 0.0328506468 0.03359944
## 5 2.364498e-06 1.739290e-04  3865 3476.531 0.0151810969 0.0149540776 0.01552027
## 6 1.449799e-06 1.602272e-04  3865 3670.049 0.0100532957 0.0099532329 0.01049232
## 7 1.175686e-06 9.487517e-05  3865 3532.461 0.0138194952 0.0136311200 0.01418911
summary(est.p)
lam<-data.frame(lam=est.p$pooled$lambda, param=row.names(est.p$pooled))

ggplot(data=lam,aes(x=param, y=lam))+geom_col()+theme(axis.text.x = element_text(angle = 45, hjust = 1))

library(dplyr)
bnm<-data%>%
  select(race_eth, badhealth, opportunity_youth_cat,smoke_100cig,educ, anxiety_disoreder)%>%
  filter(complete.cases(.))%>%
  as.data.frame()

summary(lm(badhealth~opportunity_youth_cat + educ+ race_eth + smoke_100cig +anxiety_disoreder, bnm))
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + educ + race_eth + 
##     smoke_100cig + anxiety_disoreder, data = bnm)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25887 -0.07905 -0.03136 -0.01594  0.98406 
## 
## Coefficients:
##                                             Estimate Std. Error t value
## (Intercept)                                 0.243443   0.018388  13.239
## opportunity_youth_catNot opportunity youth -0.064913   0.012033  -5.395
## educ2hsgrad                                -0.029375   0.013201  -2.225
## educ3More than HS                          -0.029525   0.012702  -2.325
## race_ethotherminority                       0.015422   0.007438   2.073
## smoke_100cigno                             -0.047686   0.010782  -4.423
## anxiety_disorederno                        -0.085380   0.009699  -8.803
##                                            Pr(>|t|)    
## (Intercept)                                 < 2e-16 ***
## opportunity_youth_catNot opportunity youth  7.3e-08 ***
## educ2hsgrad                                  0.0261 *  
## educ3More than HS                            0.0202 *  
## race_ethotherminority                        0.0382 *  
## smoke_100cigno                              1.0e-05 ***
## anxiety_disorederno                         < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2217 on 3747 degrees of freedom
## Multiple R-squared:  0.04061,    Adjusted R-squared:  0.03908 
## F-statistic: 26.44 on 6 and 3747 DF,  p-value: < 2.2e-16

Compare imputed model to original data

fit1<- lm(badhealth~opportunity_youth_cat + educ+ race_eth + smoke_100cig +anxiety_disoreder, data= data)
summary(fit1)
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + educ + race_eth + 
##     smoke_100cig + anxiety_disoreder, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25887 -0.07905 -0.03136 -0.01594  0.98406 
## 
## Coefficients:
##                                             Estimate Std. Error t value
## (Intercept)                                 0.243443   0.018388  13.239
## opportunity_youth_catNot opportunity youth -0.064913   0.012033  -5.395
## educ2hsgrad                                -0.029375   0.013201  -2.225
## educ3More than HS                          -0.029525   0.012702  -2.325
## race_ethotherminority                       0.015422   0.007438   2.073
## smoke_100cigno                             -0.047686   0.010782  -4.423
## anxiety_disorederno                        -0.085380   0.009699  -8.803
##                                            Pr(>|t|)    
## (Intercept)                                 < 2e-16 ***
## opportunity_youth_catNot opportunity youth  7.3e-08 ***
## educ2hsgrad                                  0.0261 *  
## educ3More than HS                            0.0202 *  
## race_ethotherminority                        0.0382 *  
## smoke_100cigno                              1.0e-05 ***
## anxiety_disorederno                         < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2217 on 3747 degrees of freedom
##   (118 observations deleted due to missingness)
## Multiple R-squared:  0.04061,    Adjusted R-squared:  0.03908 
## F-statistic: 26.44 on 6 and 3747 DF,  p-value: < 2.2e-16
fit.imp<-lm(badhealth~opportunity_youth_cat + educ+ race_eth + smoke_100cig +anxiety_disoreder, data=dat.imp)
summary(fit.imp)
## 
## Call:
## lm(formula = badhealth ~ opportunity_youth_cat + educ + race_eth + 
##     smoke_100cig + anxiety_disoreder, data = dat.imp)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.26189 -0.07908 -0.03010 -0.01439  0.98561 
## 
## Coefficients:
##                                             Estimate Std. Error t value
## (Intercept)                                 0.246178   0.018216  13.515
## opportunity_youth_catNot opportunity youth -0.063370   0.011964  -5.297
## educ2hsgrad                                -0.022643   0.013103  -1.728
## educ3More than HS                          -0.028922   0.012617  -2.292
## race_ethotherminority                       0.015715   0.007409   2.121
## smoke_100cigno                             -0.052934   0.010683  -4.955
## anxiety_disorederno                        -0.086563   0.009687  -8.936
##                                            Pr(>|t|)    
## (Intercept)                                 < 2e-16 ***
## opportunity_youth_catNot opportunity youth 1.25e-07 ***
## educ2hsgrad                                  0.0841 .  
## educ3More than HS                            0.0219 *  
## race_ethotherminority                        0.0340 *  
## smoke_100cigno                             7.53e-07 ***
## anxiety_disorederno                         < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2244 on 3865 degrees of freedom
## Multiple R-squared:  0.04182,    Adjusted R-squared:  0.04033 
## F-statistic: 28.11 on 6 and 3865 DF,  p-value: < 2.2e-16

##Were the results similar between the modal and multiply imputed data sets? How do the results compare to the results from the model fit with the data source with missing values?

No the results were not different as the variable that were significant remained significant. This could be because there were no much missing data in my data sets.

LS0tCnRpdGxlOiAiQXNzaWdubWVudCA4IgphdXRob3I6ICJKb3NlcGggSmFpeWVvbGEiCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDoKICAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgoKCgoKYGBge3IgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShmb3JjYXRzKQpsaWJyYXJ5KHN0YXJnYXplciwgcXVpZXRseSA9IFQpCmxpYnJhcnkoc3VydmV5LCBxdWlldGx5ID0gVCkKbGlicmFyeShjYXIsIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KHF1ZXN0aW9uciwgcXVpZXRseSA9IFQpCmxpYnJhcnkoZHBseXIsIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KGZvcmNhdHMsIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KHRpZHl2ZXJzZSwgcXVpZXRseSA9IFQpCmxpYnJhcnkoc3J2eXIsIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KCBndHN1bW1hcnksIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KGNhcmV0LCBxdWlldGx5ID0gVCkKbGlicmFyeSh0YWJsZW9uZSwgIHF1aWV0bHkgPSBUKQpgYGAKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoY2FyKQpsaWJyYXJ5KHN0YXJnYXplciwgcXVpZXRseSA9IFQpCmxpYnJhcnkoc3VydmV5LCBxdWlldGx5ID0gVCkKbGlicmFyeShnZ3Bsb3QyLCBxdWlldGx5ID0gVCkKbGlicmFyeShwYW5kZXIsIHF1aWV0bHkgPSBUKQpsaWJyYXJ5KGtuaXRyLCBxdWlldGx5ID0gVCkKbGlicmFyeShkcGx5ciwgcXVpZXRseSA9IFQpCmxpYnJhcnkoZmFjdG9leHRyYSwgcXVpZXRseSA9IFQpCmxpYnJhcnkoRmFjdG9NaW5lUiwgcXVpZXRseSA9IFQpCgoKbGlicmFyeShjYXIpCmxpYnJhcnkobWljZSkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGRwbHlyKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KGlwdW1zcikKYGBgCgpgYGB7cn0KZGRpIDwtIHJlYWRfaXB1bXNfZGRpKCJuaGlzXzAwMDAyLnhtbCIpCmRhdGEgPC0gcmVhZF9pcHVtc19taWNybyhkZGkpCmRhdGE8LSBoYXZlbjo6emFwX2xhYmVscyhkYXRhKQpgYGAKCgpgYGB7cn0KbmFtZXMoZGF0YSkgPC0gdG9sb3dlcihnc3ViKHBhdHRlcm4gPSAiXyIscmVwbGFjZW1lbnQgPSAgIiIseCA9ICBuYW1lcyhkYXRhKSkpCmBgYAoKCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQojc2V4CmRhdGEkc2V4PC1hcy5mYWN0b3IoaWZlbHNlKGRhdGEkc2V4PT0xLCAiTWFsZSIsICJGZW1hbGUiKSkKCiNBZ2UKCmRhdGEkYWdlMjwtIGNhcjo6UmVjb2RlKGRhdGEkYWdlLAogICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxNjoxOT0nQWdlcyAxNi0xOSc7IDIwOjI0PSdBZ2VzIDIwLTI0JzsgMTY6MjQ9J0FnZXMgMTYtMjQnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKCgpkYXRhJGFnZTI8LXJlbGV2ZWwoZGF0YSRhZ2UyLCByZWY9J0FnZXMgMTYtMTknKQoKI1BvdmVydHkgCgpkYXRhJHBvdmVydHkyPC0gY2FyOjpSZWNvZGUoZGF0YSRwb3ZlcnR5LAogICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxMDoxND0nTGVzcyB0aGFuIDEuMCc7IDIwOjI1PSdCdHcgMS4wLSAxLjk5JzsgMzA6Mzc9J0Fib3ZlIDIuMCc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJHBvdmVydHkyPC1mY3RfcmVsZXZlbChkYXRhJHBvdmVydHkyLCdMZXNzIHRoYW4gMS4wJywnQnR3IDEuMC0gMS45OScsJ0Fib3ZlIDIuMCcpIAoKCiNyYWNlL2V0aG5pY2l0eQpkYXRhJHdoaXRlbWFqb3JpdHk8LSBjYXI6OlJlY29kZShkYXRhJGhpc3ByYWNlLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjAyPTE7IDk5PU5BOyBlbHNlPTAiKQoKZGF0YSRvdGhlcm1pbm9yaXR5PC0gY2FyOjpSZWNvZGUoZGF0YSRoaXNwcmFjZSwKICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9ImMoMSwzLDQsNSw2LDcpPTE7IDk5PU5BOyBlbHNlPTAiKQoKZGF0YSRyYWNlX2V0aDwtY2FyOjpSZWNvZGUoZGF0YSRoaXNwcmFjZSwKcmVjb2Rlcz0iMDI9J3doaXRlbWFqb3JpdHknOyBjKDEsMyw0LDUsNiw3KT0nb3RoZXJtaW5vcml0eSc7ZWxzZT1OQSIsCmFzLmZhY3RvciA9IFQpCmRhdGEkcmFjZV9ldGg8LXJlbGV2ZWwoZGF0YSRyYWNlX2V0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSAid2hpdGVtYWpvcml0eSIpCgoKI2VkdWNhdGlvbiBsZXZlbAoKCmRhdGEkZWR1YzwtIGNhcjo6UmVjb2RlKGRhdGEkZWR1YywKICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMTAyOjExNj0nMUxlc3MgdGhhbiBIUyc7IDIwMToyMDI9JzJoc2dyYWQnOyAzMDE6NTAzPSczTW9yZSB0aGFuIEhTJzs5OTc6OTk5PU5BOzAwMD1OQSIsCiAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGVkdWM8LWZjdF9yZWxldmVsKGRhdGEkZWR1YywnMUxlc3MgdGhhbiBIUycsJzJoc2dyYWQnLCczTW9yZSB0aGFuIEhTJykgCgoKCiNVcmJhbi1ydXJhbCBjbGFzc2lmaWNhdGlvbgoKCmRhdGEkdXJiYW5fcnVyYWw8LSBjYXI6OlJlY29kZShkYXRhJHVyYnJybCwKICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMTozPSd1cmJhbic7IDQ9J3J1cmFsJzswMDA9TkEiLAogICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSR1cmJhbl9ydXJhbDwtcmVsZXZlbChkYXRhJHVyYmFuX3J1cmFsLCByZWY9J3J1cmFsJykgCgoKZGF0YSRydXJhbDwtIGNhcjo6UmVjb2RlKGRhdGEkaGlzcHJhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iND0xOyA5OT1OQTsgZWxzZT0wIikKCmRhdGEkdXJiYW48LSBjYXI6OlJlY29kZShkYXRhJGhpc3ByYWNlLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE6Mz0xOyA5OT1OQTsgZWxzZT0wIikKCgoKCiNlbXBsb3ltZW50IHN0YXR1cwoKCmRhdGEkdW5lbXBsb3k8LSBjYXI6OlJlY29kZShkYXRhJGVtcHN0YXQsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMjAwPTE7IDAwPU5BOyA5OTk9TkE7IGVsc2U9MCIpCgoKZGF0YSRlbXBsb3lfc3RhdHVzPC0gY2FyOjpSZWNvZGUoZGF0YSRlbXBzdGF0LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjEwMD0nRW1wbG95ZWQnOyAyMDA9J3VuZW1wbG95ZWQnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGVtcGxveV9zdGF0dXM8LXJlbGV2ZWwoZGF0YSRlbXBsb3lfc3RhdHVzLCByZWY9J0VtcGxveWVkJykKCgojIGN1cnJlbnRseSBpbiBzY2hvb2wKCmRhdGEkbm9uX3NjaG9vbGluZzwtIGNhcjo6UmVjb2RlKGRhdGEkc2Nob29sbm93LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9MTsgMD1OQTsgNzo5PU5BOyBlbHNlPTAiKQoKZGF0YSRzY2hvb2xzdGF0dXM8LSBjYXI6OlJlY29kZShkYXRhJHNjaG9vbG5vdywKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSdubyc7IDI9J3llcyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkc2Nob29sc3RhdHVzPC1yZWxldmVsKGRhdGEkc2Nob29sc3RhdHVzLCByZWY9J25vJykKCgojaW5jb21lIGdyb3VwaW5nCgpkYXRhJGZhbWlseWluY29tZSA8LSBkYXRhJGluY2ZhbTA3b24KCmRhdGEkZmFtaWx5aW5jb21lPC0gY2FyOjpSZWNvZGUoZGF0YSRpbmNmYW0wN29uLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjExPSckMCAtICQzNCw5OTknOzEyPSckMzUsMDAwIC0gJDQ5LDk5OSc7MjI9JyQ1MCwwMDAgLSAkNzQsOTk5JzsyMz0nJDc1LDAwMCAtICQ5OSw5OTknOzI0PSckMTAwLDAwMCBhbmQgb3Zlcic7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkZmFtaWx5aW5jb21lIDwtZmN0X3JlbGV2ZWwoZGF0YSRmYW1pbHlpbmNvbWUgLCckMCAtICQzNCw5OTknLCckMzUsMDAwIC0gJDQ5LDk5OScsJyQ1MCwwMDAgLSAkNzQsOTk5JywnJDc1LDAwMCAtICQ5OSw5OTknLCckMTAwLDAwMCBhbmQgb3ZlcicpIAoKZGF0YSRmYW1pbHlpbmNvbWVfbnVtIDwtIGRhdGEkZmFtdG90aW5jCiMgYm9ybiBpbiB0aGUgVVMKCmRhdGEkdXNib3JuPC0gY2FyOjpSZWNvZGUoZGF0YSR1c2Jvcm4sCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMjA9MTsgOTc6OTg9TkE7IGVsc2U9MCIpCgojIFVTIENpdGl6ZW4KZGF0YSRjaXRpemVuPC0gY2FyOjpSZWNvZGUoZGF0YSRjaXRpemVuLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjI9MTsgODo5PU5BOyBlbHNlPTAiKQoKI2xhc3QgZW1wbG95ZWQKCgoKZGF0YSRlbXBsb3llZGxhc3Q8LSBjYXI6OlJlY29kZShkYXRhJGVtcGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nV2l0aGluIHBhc3QgMTJtb250aHMnOyAyPScxLTV5ZWFycyBhZ28nOyAzPSdvdmVyIDV5ZWFycyBhZ28nOyA0PSduZXZlciB3b3JrZWQnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGVtcGxveWVkbGFzdDwtcmVsZXZlbChkYXRhJGVtcGxveWVkbGFzdCwgcmVmPScxLTV5ZWFycyBhZ28nKQoKCiNIRUFMVEggVkFSSUFCTEVTCgojUG9vciBvciBmYWlyIHNlbGYgcmF0ZWQgaGVhbHRoCmRhdGEkYmFkaGVhbHRoPC1jYXI6OlJlY29kZShkYXRhJGhlYWx0aCwgcmVjb2Rlcz0iNDo1PTE7IDE6Mz0wOyBlbHNlPU5BIikKCgojZGF0YSRiYWRoZWFsdGggPC0gCiAgI2ZhY3RvcihkYXRhJGJhZGhlYWx0aCwgbGV2ZWxzPWMoMSwwKSwKICAgICAgICAgI2xhYmVscz1jKCJZZXMiLCAKICAgICAgICAgICAgICAgICAjICJObyIpKQoKCmRhdGEkZ2VuZXJhbGhlYWx0aDwtUmVjb2RlKGRhdGEkaGVhbHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMToyPTE7Mz0yOzQ6NT0zOyBlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3RvciA9IFQpCgoKCmRhdGEkZ2VuZXJhbGhlYWx0aDwtcmVsZXZlbChkYXRhJGdlbmVyYWxoZWFsdGgsIHJlZiA9ICIxIikKCmRhdGEkaGVhbHRobnVtPC1jYXI6OlJlY29kZShkYXRhJGhlYWx0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxOjI9MTszPTI7NDo1PTM7IGVsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3RvciA9IEYpCgojcGxhY2UgZm9yIG1lZGljYWwgY2FyZQoKCmRhdGEkbWVkaWNhbHBsYWNlPC0gY2FyOjpSZWNvZGUoZGF0YSR1c3VhbHBsLAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9J25vJzsgMjozOj0neWVzJztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRtZWRpY2FscGxhY2U8LXJlbGV2ZWwoZGF0YSRtZWRpY2FscGxhY2UsIHJlZj0nbm8nKQoKCiMgZGVsYXllZCBtZWRpY2FsIGNhcmUgZHVlIHRvIGNvc3QKCgpkYXRhJG1lZGljYWxfY2FyZV9jb3N0PC0gY2FyOjpSZWNvZGUoZGF0YSRkZWxheWNvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMj0xIDsgMT0gMDtlbHNlPU5BIikKI2RhdGEkbWVkaWNhbF9jYXJlX2Nvc3Q8LXJlbGV2ZWwoZGF0YSRtZWRpY2FsX2NhcmVfY29zdCwgcmVmPSd5ZXMnKQoKIyB3b3JyaWVkIGFib3V0IHBheWluZyBtZWRpY2FsIGJpbGxzCgoKZGF0YSRtZWRpY2FsX2JpbGxfd29ycmllZDwtIGNhcjo6UmVjb2RlKGRhdGEkd29ybWVkYmlsbCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSd2ZXJ5IHdvcnJpZWQnOyAyPSdzb21ld2hhdCB3b3JyaWVkJzsgMz0nbm90IGF0IGFsbCc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkbWVkaWNhbF9iaWxsX3dvcnJpZWQ8LXJlbGV2ZWwoZGF0YSRtZWRpY2FsX2JpbGxfd29ycmllZCwgcmVmPSd2ZXJ5IHdvcnJpZWQnKQoKIyB1bmFibGUgdG8gcGF5IG1lZGljYWwgYmlsbHMKCgpkYXRhJG1lZGljYWxfYmlsbF91bmFibGV0b3BheTwtIGNhcjo6UmVjb2RlKGRhdGEkaGl1bmFibGVwYXksCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0gMCA7IDI9IDEgO2Vsc2U9TkEiKQojZGF0YSRtZWRpY2FsX2JpbGxfdW5hYmxldG9wYXk8LXJlbGV2ZWwoZGF0YSRtZWRpY2FsX2JpbGxfdW5hYmxldG9wYXksIHJlZj0neWVzJykKCgojIGhlYWx0aCBpbnN1cmFuY2UgY292ZXJhZ2UKCgpkYXRhJGhlYWx0aGluc3VyYWNlX2NvdmVyYWdlPC0gY2FyOjpSZWNvZGUoZGF0YSRoaW5vdGNvdmUsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nbm8sIGhhcyBjb3ZlcmFnZSc7IDI9J3llcywgbm8gY292ZXJhZ2UnO2Vsc2U9TkEiLAogICAgICAgICAgICAgICAgICAgICAgIGFzLmZhY3Rvcj1UKQpkYXRhJGhlYWx0aGluc3VyYWNlX2NvdmVyYWdlPC1yZWxldmVsKGRhdGEkaGVhbHRoaW5zdXJhY2VfY292ZXJhZ2UsIHJlZj0neWVzLCBubyBjb3ZlcmFnZScpCgojIGRvbnQgaGF2ZSBoZWFsdGggaW5zdXJhbmNlIGN1eiBvZiBjb3N0CgoKZGF0YSRub2hlYWx0aGluc3VyYWNlX2Nvc3Q8LSBjYXI6OlJlY29kZShkYXRhJGhpbm9jb3N0ciwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPTAgOyAyPSAxO2Vsc2U9TkEiKQojZGF0YSRub2hlYWx0aGluc3VyYWNlX2Nvc3Q8LXJlbGV2ZWwoZGF0YSRub2hlYWx0aGluc3VyYWNlX2Nvc3QsIHJlZj0neWVzJykKCiMgdXNlZCBtZWRpY2F0aW9uIGluIHRoZSBwYXN0IHllYXIKCgpkYXRhJHVzZWRtZWRpY2F0aW9uczwtIGNhcjo6UmVjb2RlKGRhdGEkcHJlbWVkeXIsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0wOyAyPTE7ZWxzZT1OQSIpCiNkYXRhJHVzZWRtZWRpY2F0aW9uczwtcmVsZXZlbChkYXRhJHVzZWRtZWRpY2F0aW9ucywgcmVmPSd5ZXMnKQoKCiMgaWYgdGhleSBzbW9rZWQKCgpkYXRhJHNtb2tlX2ZyZXF1ZW50bHk8LSBjYXI6OlJlY29kZShkYXRhJHNtb2tmcmVxbm93LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9J25vJzsgMjozPSdzb21lZGF5cy9ldmVyeWRheSc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkc21va2VfZnJlcXVlbnRseTwtcmVsZXZlbChkYXRhJHNtb2tlX2ZyZXF1ZW50bHksIHJlZj0nc29tZWRheXMvZXZlcnlkYXknKQoKIyBzbW9rZWQgdXAgdG8gMTAwIGNpZ2FycmV0aCBpbiBsaWZlIHRpbWUKCgpkYXRhJHNtb2tlXzEwMGNpZzwtIGNhcjo6UmVjb2RlKGRhdGEkc21va2V2LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9J25vJzsgMj0neWVzJztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRzbW9rZV8xMDBjaWc8LXJlbGV2ZWwoZGF0YSRzbW9rZV8xMDBjaWcsIHJlZj0neWVzJykKCgojTWVudGFsIGhlYWx0aAoKIyBldmVyIGhhZCBhbnhpZXR5IGRpc29yZWRlcgoKZGF0YSRhbnhpZXR5X2Rpc29yZWRlcjwtIGNhcjo6UmVjb2RlKGRhdGEkYW54aWV0eWV2LAogICAgICAgICAgICAgICAgICAgICAgIHJlY29kZXM9IjE9J25vJzsgMj0neWVzJztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRhbnhpZXR5X2Rpc29yZWRlcjwtcmVsZXZlbChkYXRhJGFueGlldHlfZGlzb3JlZGVyLCByZWY9J3llcycpCgojIG1lZGljYXRpb24gZm9yIHdvcnJ5aW5nCgpkYXRhJG1lZGljYXRpb25fZm9yX3dvcnJ5PC0gY2FyOjpSZWNvZGUoZGF0YSR3b3JyeCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSdubyc7IDI9J3llcyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkbWVkaWNhdGlvbl9mb3Jfd29ycnk8LXJlbGV2ZWwoZGF0YSRtZWRpY2F0aW9uX2Zvcl93b3JyeSwgcmVmPSd5ZXMnKQoKCiMgbWVkaWNhdGlvbiBmb3IgZGVwcmVzc2lvbgoKCgoKZGF0YSRtZWRpY2F0aW9uX2Zvcl9kZXByZXNzaW9uPC0gY2FyOjpSZWNvZGUoZGF0YSRkZXByeCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSdubyc7IDI9J3llcyc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkbWVkaWNhdGlvbl9mb3JfZGVwcmVzc2lvbjwtcmVsZXZlbChkYXRhJG1lZGljYXRpb25fZm9yX2RlcHJlc3Npb24sIHJlZj0neWVzJykKCiMgbGV2ZWwgb2Ygd29ycnkKCgoKZGF0YSRsZXZlbF9vZl93b3JyeTwtIGNhcjo6UmVjb2RlKGRhdGEkd29yZmVlbGV2bCwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIxPSdhbG90JzsgMj0nYSBsaXR0bGUnOyAzPSdidHcgbGl0dGxlIGFuZCBhbG90JztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRsZXZlbF9vZl93b3JyeTwtcmVsZXZlbChkYXRhJGxldmVsX29mX3dvcnJ5LCByZWY9J2Fsb3QnKQoKCiMgbGV2ZWwgb2YgZGVwcmVzc2lvbgoKCgpkYXRhJGxldmVsX29mX2RlcHJlc3Npb248LSBjYXI6OlJlY29kZShkYXRhJGRlcGZlZWxldmwsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMT0nYWxvdCc7IDI9J2EgbGl0dGxlJzsgMz0nYnR3IGxpdHRsZSBhbmQgYWxvdCc7ZWxzZT1OQSIsCiAgICAgICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yPVQpCmRhdGEkbGV2ZWxfb2ZfZGVwcmVzc2lvbjwtcmVsZXZlbChkYXRhJGxldmVsX29mX2RlcHJlc3Npb24sIHJlZj0nYWxvdCcpCgoKCgpkYXRhIDwtIGRhdGElPiUKZmlsdGVyKGFnZSA+PTE4ICYgYWdlPD0yNCkKCgojZGF0YTwtZGF0YSU+JQogICNmaWx0ZXIoY29tcGxldGUuY2FzZXModW5lbXBsb3ksbm9uX3NjaG9vbGluZykpCgoKIyBtZXJnaW5nIHNjaG9vbGluZyBhbmQgd29ya2luZwoKZGF0YSRvcHBvcnR1bml0eV95b3V0aCA8LSBwYXN0ZSggZGF0YSR1bmVtcGxveSwgZGF0YSRub25fc2Nob29saW5nLCBzZXAgPSIiKQoKCmRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0X251bTwtIGNhcjo6UmVjb2RlKGRhdGEkb3Bwb3J0dW5pdHlfeW91dGgsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMTE9MTsgMDA6MTA9MDtlbHNlPU5BIikKCgpkYXRhJG9wcG9ydHVuaXR5X3lvdXRoX2NhdDwtIGNhcjo6UmVjb2RlKGRhdGEkb3Bwb3J0dW5pdHlfeW91dGgsCiAgICAgICAgICAgICAgICAgICAgICAgcmVjb2Rlcz0iMTE9J09wcG9ydHVuaXR5IHlvdXRoJzswMDoxMD0nTm90IG9wcG9ydHVuaXR5IHlvdXRoJztlbHNlPU5BIiwKICAgICAgICAgICAgICAgICAgICAgICBhcy5mYWN0b3I9VCkKZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQ8LXJlbGV2ZWwoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQsIHJlZj0nT3Bwb3J0dW5pdHkgeW91dGgnKQoKZGF0YSRub25fb3Bwb3J0dW5pdHlfeW91dGhfY2F0X251bTwtIGNhcjo6UmVjb2RlKGRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0X251bSwKICAgICAgICAgICAgICAgICAgICAgICByZWNvZGVzPSIwPTE7IDk5PU5BOyBlbHNlPTAiKQoKCmBgYAoKCmBgYHtyfQoKZGF0YSA8LSBkYXRhJT4lCmZpbHRlcihhZ2UgPj0xOCAmIGFnZTw9MjQpCgoKYGBgCgoKIyMgUGVyZm9ybSBhIG1lYW4gKGEgbWVhbiBmb3IgbnVtZXJpYyBkYXRhKSBvciBhIG1vZGFsIGltcHV0YXRpb24gKGZvciBjYXRlZ29yaWNhbCBkYXRhKSBvZiBhbGwgdmFsdWVzLiBQZXJmb3JtIHRoZSBhbmFseXNpcyB1c2luZyB0aGlzIGltcHV0ZWQgZGF0YS4gV2hhdCBhcmUgeW91ciByZXN1bHRzPwpgYGB7cn0Kc3VtbWFyeShkYXRhWywgYygiYmFkaGVhbHRoIiwgInNtb2tlXzEwMGNpZyIsICAib3Bwb3J0dW5pdHlfeW91dGhfY2F0IiwgImVkdWMiLCAiaGVhbHRoaW5zdXJhY2VfY292ZXJhZ2UiLCAgIm1lZGljYXRpb25fZm9yX2RlcHJlc3Npb24iLCAibWVkaWNhdGlvbl9mb3Jfd29ycnkiLCAiYW54aWV0eV9kaXNvcmVkZXIiKV0pCmBgYAoKCgpXaGljaCBzaG93cyB0aGF0LCBhbW9uZyB0aGVzZSByZWNvZGVkIHZhcmlhYmxlcywgYG9wcG9ydHVuaXR5X3lvdXRoX2NhdGAgLCB0aGUgb3Bwb3J0dW5pdHkgeW91dGggdmFyaWFibGUsIGByIHRhYmxlKGlzLm5hKGRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0KSlbMl1gIHBlb3BsZSBpbiB0aGUgSVBVTVMgTkhJUywgb3IgYHIgMTAwKiAodGFibGUoaXMubmEoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQpKVsyXS9sZW5ndGgoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQpKWAlIG9mIHRoZSBzYW1wbGUuIAoKVGhlIGxvd2VzdCBudW1iZXIgb2YgbWlzc2luZ3MgaXMgaW4gdGhlIGJhZCBoZWFsdGggdmFyaWFibGUsIHdoaWNoIG9ubHkgaGFzIGByIDEwMCogKHRhYmxlKGlzLm5hKGRhdGEkYmFkaGVhbHRoKSlbMl0vbGVuZ3RoKGRhdGEkYmFkaGVhbHRoKSlgJSBtaXNzaW5nLgoKCgpgYGB7cn0KCnN1bW1hcnkoZGF0YSRiYWRoZWFsdGgpIAoKCmRhdGEkYmFkaGVhbHRoLmltcC5tb2RlPC1pZmVsc2UoaXMubmEoZGF0YSRiYWRoZWFsdGgpPT1ULCBtb2RlKGRhdGEkYmFkaGVhbHRoKSwgZGF0YSRiYWRoZWFsdGgpCgptb2RlKGRhdGEkYmFkaGVhbHRoKQptb2RlKGRhdGEkYmFkaGVhbHRoLmltcC5tb2RlKSAjbm8gZGlmZmVyZW5jZSEKZml0PC1sbShiYWRoZWFsdGggfiBvcHBvcnR1bml0eV95b3V0aF9jYXQgICsgcmFjZV9ldGggKyBlZHVjICsgc21va2VfMTAwY2lnICtoZWFsdGhpbnN1cmFjZV9jb3ZlcmFnZSArYW54aWV0eV9kaXNvcmVkZXIrIG1lZGljYXRpb25fZm9yX2RlcHJlc3Npb24sIGRhdGEpCnN1bW1hcnkoZml0KQpgYGAKCgoKCmBgYHtyfQp0YWJsZShkYXRhJG9wcG9ydHVuaXR5X3lvdXRoX2NhdCkKI2ZpbmQgdGhlIG1vc3QgY29tbW9uIHZhbHVlCm1jdi5vcHBvcnR1bml0eV95b3V0aF9jYXQ8LWZhY3RvcihuYW1lcyh3aGljaC5tYXgodGFibGUoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQpKSksIGxldmVscz1sZXZlbHMoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQpKQptY3Yub3Bwb3J0dW5pdHlfeW91dGhfY2F0CiNpbXB1dGUgdGhlIGNhc2VzCmRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0LmltcDwtYXMuZmFjdG9yKGlmZWxzZShpcy5uYShkYXRhJG9wcG9ydHVuaXR5X3lvdXRoX2NhdCk9PVQsIG1jdi5vcHBvcnR1bml0eV95b3V0aF9jYXQsIGRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0KSkKbGV2ZWxzKGRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0LmltcCk8LWxldmVscyhkYXRhJG9wcG9ydHVuaXR5X3lvdXRoX2NhdCkKCnByb3AudGFibGUodGFibGUoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQpKQpwcm9wLnRhYmxlKHRhYmxlKGRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0LmltcCkpCgoKYmFycGxvdChwcm9wLnRhYmxlKHRhYmxlKGRhdGEkb3Bwb3J0dW5pdHlfeW91dGhfY2F0KSksIG1haW49Ik9yaWdpbmFsIERhdGEiLHlsaW09YygwLCAwLjkpKQpiYXJwbG90KHByb3AudGFibGUodGFibGUoZGF0YSRvcHBvcnR1bml0eV95b3V0aF9jYXQpKSwgbWFpbj0iSW1wdXRlZCBEYXRhIix5bGltPWMoMCwgMC45KSkKICAgICAgICAKYGBgCgojIE1lYXN1cmUgYW4gb3V0Y29tZSB2YXJpYWJsZSBhbmQgYXQgbGVhc3QgNSBwcmVkaWN0b3JzCgojIyMgT3V0Y29tZSB2YXJpYWJsZTogSGVhbHRoIHN0YXR1cwoKIyMjIFByZWRpY3RvcnMKCmEuIE9wcG9ydHVuaXR5IHlvdXRoIHN0YXR1cwoKYi4gbGV2ZWwgb2YgZWR1Y2NhdGlvbgoKYy4gc21va2luZyBiZWhhdmlvcgoKZC4gaGVhbHRoIGluc3VyYW5jZSBjb3ZlcmFnZQoKZS4gYW54aWV0eSBkaXNvcmRlcgoKZi4gbWVkaWNhdGlvbiBmb3IgZGVwcmVzc2lvbgoKCiMjIExpbmVhciBtb2RlbCByZXN1bHQgd2l0aG91dCBtaXNzaW5nIGRhdGEKCmBgYHtyfQpmaXQxPC0gbG0oYmFkaGVhbHRoIH4gb3Bwb3J0dW5pdHlfeW91dGhfY2F0ICArIGVkdWMgK3NleCArIHNtb2tlXzEwMGNpZyAraGVhbHRoaW5zdXJhY2VfY292ZXJhZ2UgK2FueGlldHlfZGlzb3JlZGVyKyBtZWRpY2F0aW9uX2Zvcl9kZXByZXNzaW9uICwgZGF0YT0gZGF0YSkKc3VtbWFyeShmaXQxKQpgYGAKCgoKCiMjIFRlc3RpbmcgZm9yIE1BUgojIyMgRmxhZyB2YXJpYWJsZXMKCmBgYHtyfQpmaXQxPC1sbShiYWRoZWFsdGh+aXMubmEoc21va2VfMTAwY2lnKSwgZGF0YT1kYXRhKQpmaXQyPC1sbShiYWRoZWFsdGh+aXMubmEob3Bwb3J0dW5pdHlfeW91dGhfY2F0KSwgZGF0YT1kYXRhKQpmaXQzPC1sbShiYWRoZWFsdGh+aXMubmEobWVkaWNhdGlvbl9mb3JfZGVwcmVzc2lvbiksIGRhdGE9ZGF0YSkKCgpzdW1tYXJ5KGZpdDEpCnN1bW1hcnkoZml0MikKc3VtbWFyeShmaXQzKQoKCmBgYAoKIyMgVGhlIGFib3ZlIHNob3dzIHRoYXQgdGhlIHZhcmlhYmxlcyBhcmUgbWlzc2luZyBhdCByYW5kb20gYXMgdGhleSBhcmUgaW5zaWduaWZpY2FudCAKCgoKIyMgUmVwb3J0IHRoZSBwYXR0ZXJuIG9mIG1pc3NpbmduZXNzIGFtb25nIGFsbCBvZiB0aGVzZSB2YXJpYWJsZXMKYGBge3IsIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD02fQojbG9vayBhdCB0aGUgcGF0dGVybnMgb2YgbWlzc2luZ25lc3MKbWQucGF0dGVybihkYXRhWyxjKCJyYWNlX2V0aCIsICJiYWRoZWFsdGgiLCAib3Bwb3J0dW5pdHlfeW91dGhfY2F0Iiwic21va2VfMTAwY2lnIiwiZWR1YyIsICJhbnhpZXR5X2Rpc29yZWRlciIpXSkKCmBgYAoKCmBgYHtyfQpsaWJyYXJ5KEFtZWxpYSkKbWQucGFpcnMoZGF0YVssYygicmFjZV9ldGgiLCAiYmFkaGVhbHRoIiwgIm9wcG9ydHVuaXR5X3lvdXRoX2NhdCIsInNtb2tlXzEwMGNpZyIsImVkdWMiLCAiYW54aWV0eV9kaXNvcmVkZXIiKV0pCmBgYAoKCgpgYGB7cn0KCmRhdDI8LWRhdGEKCmltcDwtbWljZShkYXRhID0gZGF0MlssYygicmFjZV9ldGgiLCAiYmFkaGVhbHRoIiwgIm9wcG9ydHVuaXR5X3lvdXRoX2NhdCIsInNtb2tlXzEwMGNpZyIsImVkdWMiLCAiYW54aWV0eV9kaXNvcmVkZXIiKV0sIHNlZWQgPSAyMiwgbSA9IDEwKQoKcHJpbnQoaW1wKQoKcGxvdChpbXApCmBgYAoKCmBgYHtyfQpoZWFkKGltcCRpbXAkYmFkaGVhbHRoKQpzdW1tYXJ5KGltcCRpbXAkYmFkaGVhbHRoKQpzdW1tYXJ5KGRhdGEkYmFkaGVhbHRoKQpgYGAKCgoKIyMgUGVyZm9ybSBhIG11bHRpcGxlIGltcHV0YXRpb24gb2YgYWxsIHZhbHVlcy4gUGVyZm9ybSB0aGUgYW5hbHlzaXMgdXNpbmcgdGhpcyBpbXB1dGVkIGRhdGEgc2V0LiBXaGF0IGFyZSB5b3VyIHJlc3VsdHM/IApgYGB7cn0KZGF0LmltcDwtY29tcGxldGUoaW1wLCBhY3Rpb24gPSAxKQpoZWFkKGRhdC5pbXAsIG49MTApCgojQ29tcGFyZSB0byB0aGUgb3JpZ2luYWwgZGF0YQpoZWFkKGRhdGFbLGMoInJhY2VfZXRoIiwgImJhZGhlYWx0aCIsICJvcHBvcnR1bml0eV95b3V0aF9jYXQiLCJzbW9rZV8xMDBjaWciLCJlZHVjIiwgImFueGlldHlfZGlzb3JlZGVyIildLCBuPTEwKQpgYGAKCgoKYGBge3J9CmhlYWQoZGF0LmltcFtpcy5uYShkYXRhJGJhZGhlYWx0aCk9PVQsXSwgbj0xMCkKCmhlYWQoZGF0YVtpcy5uYShkYXRhJGJhZGhlYWx0aCk9PVQsYygicmFjZV9ldGgiLCAiYmFkaGVhbHRoIiwgIm9wcG9ydHVuaXR5X3lvdXRoX2NhdCIsInNtb2tlXzEwMGNpZyIsImVkdWMiLCAiYW54aWV0eV9kaXNvcmVkZXIiKV0sIG49MTApCgpgYGAKCgoKCmBgYHtyfQoKZml0LmJhZGhlYWx0aDwtd2l0aChkYXRhPWltcCAsZXhwcj1sbShiYWRoZWFsdGh+b3Bwb3J0dW5pdHlfeW91dGhfY2F0ICsgcmFjZV9ldGggKyBzbW9rZV8xMDBjaWcgKyBlZHVjICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArYW54aWV0eV9kaXNvcmVkZXIpKQpmaXQuYmFkaGVhbHRoCmBgYAoKCgoKIyMjIHZhcmlhdGlvbiBpbiBiYWQgaGVhbHRoCmBgYHtyfQoKd2l0aCAoZGF0YT1pbXAsIGV4cD0oc2QoYmFkaGVhbHRoKSkpCmBgYAoKCiMjIyBGcmVxdWVuY3kgdGFibGUgZm9yIG9wcG9ydHVuaXR5IHlvdXRoCmBgYHtyfQp3aXRoIChkYXRhPWltcCwgZXhwPShwcm9wLnRhYmxlKHRhYmxlKG9wcG9ydHVuaXR5X3lvdXRoX2NhdCkpKSkKYGBgCgoKYGBge3J9CmVzdC5wPC1wb29sKGZpdC5iYWRoZWFsdGgpCnByaW50KGVzdC5wKQpzdW1tYXJ5KGVzdC5wKQpgYGAKCmBgYHtyfQpsYW08LWRhdGEuZnJhbWUobGFtPWVzdC5wJHBvb2xlZCRsYW1iZGEsIHBhcmFtPXJvdy5uYW1lcyhlc3QucCRwb29sZWQpKQoKZ2dwbG90KGRhdGE9bGFtLGFlcyh4PXBhcmFtLCB5PWxhbSkpK2dlb21fY29sKCkrdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkKYGBgCgpgYGB7cn0KbGlicmFyeShkcGx5cikKYm5tPC1kYXRhJT4lCiAgc2VsZWN0KHJhY2VfZXRoLCBiYWRoZWFsdGgsIG9wcG9ydHVuaXR5X3lvdXRoX2NhdCxzbW9rZV8xMDBjaWcsZWR1YywgYW54aWV0eV9kaXNvcmVkZXIpJT4lCiAgZmlsdGVyKGNvbXBsZXRlLmNhc2VzKC4pKSU+JQogIGFzLmRhdGEuZnJhbWUoKQoKc3VtbWFyeShsbShiYWRoZWFsdGh+b3Bwb3J0dW5pdHlfeW91dGhfY2F0ICsgZWR1YysgcmFjZV9ldGggKyBzbW9rZV8xMDBjaWcgK2FueGlldHlfZGlzb3JlZGVyLCBibm0pKQpgYGAKCgojIyMgQ29tcGFyZSBpbXB1dGVkIG1vZGVsIHRvIG9yaWdpbmFsIGRhdGEKCmBgYHtyfQpmaXQxPC0gbG0oYmFkaGVhbHRofm9wcG9ydHVuaXR5X3lvdXRoX2NhdCArIGVkdWMrIHJhY2VfZXRoICsgc21va2VfMTAwY2lnICthbnhpZXR5X2Rpc29yZWRlciwgZGF0YT0gZGF0YSkKc3VtbWFyeShmaXQxKQoKZml0LmltcDwtbG0oYmFkaGVhbHRofm9wcG9ydHVuaXR5X3lvdXRoX2NhdCArIGVkdWMrIHJhY2VfZXRoICsgc21va2VfMTAwY2lnICthbnhpZXR5X2Rpc29yZWRlciwgZGF0YT1kYXQuaW1wKQpzdW1tYXJ5KGZpdC5pbXApCgpgYGAKCgojI1dlcmUgdGhlIHJlc3VsdHMgc2ltaWxhciBiZXR3ZWVuIHRoZSBtb2RhbCBhbmQgbXVsdGlwbHkgaW1wdXRlZCBkYXRhIHNldHM/ICBIb3cgZG8gdGhlIHJlc3VsdHMgY29tcGFyZSB0byB0aGUgcmVzdWx0cyBmcm9tIHRoZSBtb2RlbCBmaXQgd2l0aCB0aGUgZGF0YSBzb3VyY2Ugd2l0aCBtaXNzaW5nIHZhbHVlcz8KCgojIyMgTm8gdGhlIHJlc3VsdHMgd2VyZSBub3QgZGlmZmVyZW50IGFzIHRoZSB2YXJpYWJsZSB0aGF0IHdlcmUgc2lnbmlmaWNhbnQgcmVtYWluZWQgc2lnbmlmaWNhbnQuIFRoaXMgY291bGQgYmUgYmVjYXVzZSB0aGVyZSB3ZXJlIG5vIG11Y2ggbWlzc2luZyBkYXRhIGluIG15IGRhdGEgc2V0cy4K