TL;DR being willing to follow rules and have a fixed focus don’t predict much. Having a work ethic, being reliable, and having grit do.

Currently using the variables I created in the post https://rpubs.com/mishav/explainedvariance to avoid unnecessarily recycling code.

Data cleaning

new_data$boybadyouth <- new_data$R1487400
new_data$boybadparent <- new_data$R1487600
new_data$girlbadyouth <- new_data$R1487300
new_data$girlbadparent <- new_data$R1487500

new_data <- new_data %>%
  rename(
    "lies_cheats_female" = "R0356500",  
    "school_work_poor_female" = "R0356600",  
    "trouble_sleeping_female" = "R0356700",  
    "unhappy_sad_depressed_female" = "R0356800",  
    "trouble_concentrating_male" = "R0356900",  
    "does_not_get_along_others_male" = "R0357000",  
    "lies_cheats_male" = "R0357100",  
    "unhappy_sad_depressed_male" = "R0357200",  
    "expects_best_uncertain_times" = "R0357500",  
    "rarely_expects_good_things" = "R0357600",  
    "optimistic_about_future" = "R0357700",  
    "hardly_expects_things_to_go_well" = "R0357800",  
    "percent_chance_arrested_steal_car" = "R0443500",  
    "uncertain_times_expect_best" = "R0624000",  
    "rarely_good_things_happen" = "R0624100",  
    "optimistic_about_future_pr" = "R0624200",  
    "hardly_expect_things_go_well_pr" = "R0624300",  
    "condition_limits_school_work" = "R0681300",  
    "learning_emotional_problem_limits_performance" = "R0681500",  
    "learning_emotional_problem_detail_1" = "R0681700",  
    "learning_emotional_problem_detail_2" = "R0681701",  
    "learning_emotional_problem_detail_3" = "R0681702",  
    "learning_emotional_problem_detail_4" = "R0681703",  
    "learning_emotional_problem_detail_5" = "R0681705",  
    "age_condition_noticed_1" = "R0681800",  
    "age_condition_noticed_2" = "R0681900",  
    "age_condition_noticed_3" = "R0682000",  
    "age_condition_noticed_4" = "R0682100",  
    "age_condition_noticed_5" = "R0682200",  
    "currently_limited_by_condition_1" = "R0682300",  
    "currently_limited_by_condition_2" = "R0682400",  
    "currently_limited_by_condition_3" = "R0682500",  
    "currently_limited_by_condition_4" = "R0682600",  
    "currently_limited_by_condition_5" = "R0682700",  
    "percent_chance_in_school_next_year" = "R0688500",  
    "percent_chance_school_and_working" = "R0688600",  
    "percent_chance_high_school_diploma_by_20" = "R0688700",  
    "percent_chance_in_jail_by_20" = "R0688800",  
    "percent_chance_parent_by_20" = "R0688900",  
    "percent_chance_college_degree_by_30" = "R0689000",  
    "percent_chance_work_20_hours_by_30" = "R0689100",  
    "lies_cheats_female_2" = "R0690500",  
    "school_work_poor_female_2" = "R0690600",  
    "trouble_sleeping_female_2" = "R0690700",  
    "unhappy_sad_depressed_female_2" = "R0690800",  
    "trouble_concentrating_male_2" = "R0690900",  
    "lies_cheats_male_2" = "R0691000",  
    "does_not_get_along_others_male_2" = "R0691100",  
    "unhappy_sad_depressed_male_2" = "R0691200",  
    "disorganized" = "S0920000",  
    "conscientious" = "S0920100",  
    "undependable" = "S0920200",  
    "thorough" = "S0920300",  
    "agreeable" = "S0920400",  
    "difficult" = "S0920500",  
    "stubborn" = "S0920600",  
    "trustful" = "S0920700",  
    "personality_extraverted_enthusiastic" = "T3162500",  
    "personality_critical_quarrelsome" = "T3162501",  
    "personality_dependable_disciplined" = "T3162502",  
    "personality_anxious_upset" = "T3162503",  
    "personality_open_complex" = "T3162504",  
    "personality_reserved_quiet" = "T3162505",  
    "personality_sympathetic_warm" = "T3162506",  
    "personality_disorganized_careless" = "T3162507",  
    "personality_calm_stable" = "T3162508",  
    "personality_conventional_uncreative" = "T3162509",  
    "personality_hard_worker" = "T3162600",  
    "personality_amount_of_work" = "T3162601",  
    "personality_work_standards" = "T3162602",  
    "personality_effort_at_work" = "T3162603",  
    "personality_following_rules" = "T3162700",  
    "personality_breaking_school_rules" = "T3162701",  
    "personality_support_for_rules_traditions" = "T3162702",  
    "personality_bending_rules" = "T3162703",  
    "personality_hard_worker_2010" = "T6216400",  
    "personality_amount_of_work_2010" = "T6216401",  
    "personality_work_standards_2010" = "T6216402",  
    "personality_effort_at_work_2010" = "T6216403",  
    "personality_following_rules_2010" = "T6216500",  
    "personality_breaking_school_rules_2010" = "T6216501",  
    "personality_support_for_rules_traditions_2010" = "T6216502",  
    "personality_bending_rules_2010" = "T6216503",  
    "grit_new_ideas_distract_2013" = "T9039400",  
    "grit_setbacks_not_discourage_2013" = "T9039500",  
    "grit_short_term_obsessions_2013" = "T9039600",  
    "grit_hard_worker_2013" = "T9039700",  
    "grit_change_goals_frequently_2013" = "T9039800",  
    "grit_maintaining_focus_2013" = "T9039900",  
    "grit_ability_to_finish_projects_2013" = "T9040000",  
    "grit_diligence_2013" = "T9040100",  
    "grit_new_ideas_distract_2015" = "U1028900",  
    "grit_setbacks_not_discourage_2015" = "U1029000",  
    "grit_short_term_obsessions_2015" = "U1029100",  
    "grit_hard_worker_2015" = "U1029200",  
    "grit_change_goals_frequently_2015" = "U1029300",  
    "grit_maintaining_focus_2015" = "U1029400",  
    "grit_ability_to_finish_projects_2015" = "U1029500",  
    "grit_diligence_2015" = "U1029600",  
    "grit_new_ideas_distract_2017" = "U2969100",  
    "grit_setbacks_not_discourage_2017" = "U2969200",  
    "grit_short_term_obsessions_2017" = "U2969300",  
    "grit_hard_worker_2017" = "U2969400",  
    "grit_change_goals_frequently_2017" = "U2969500",  
    "grit_maintaining_focus_2017" = "U2969600",  
    "grit_ability_to_finish_projects_2017" = "U2969700",  
    "grit_diligence_2017" = "U2969800"
  )

new_data$grit_diligence_2013[is.na(new_data$grit_diligence_2013)] <- new_data$grit_diligence_2015[is.na(new_data$grit_diligence_2013)]
new_data$grit_diligence_2013[is.na(new_data$grit_diligence_2013)] <- new_data$grit_diligence_2017[is.na(new_data$grit_diligence_2013)]

new_data$grit_ability_to_finish_projects_2013[is.na(new_data$grit_ability_to_finish_projects_2013)] <- new_data$grit_ability_to_finish_projects_2015[is.na(new_data$grit_ability_to_finish_projects_2013)]
new_data$grit_ability_to_finish_projects_2013[is.na(new_data$grit_ability_to_finish_projects_2013)] <- new_data$grit_ability_to_finish_projects_2017[is.na(new_data$grit_ability_to_finish_projects_2013)]

new_data$grit_maintaining_focus_2013[is.na(new_data$grit_maintaining_focus_2013)] <- new_data$grit_maintaining_focus_2015[is.na(new_data$grit_maintaining_focus_2013)]
new_data$grit_maintaining_focus_2013[is.na(new_data$grit_maintaining_focus_2013)] <- new_data$grit_maintaining_focus_2017[is.na(new_data$grit_maintaining_focus_2013)]

new_data$grit_change_goals_frequently_2013[is.na(new_data$grit_change_goals_frequently_2013)] <- new_data$grit_change_goals_frequently_2015[is.na(new_data$grit_change_goals_frequently_2013)]
new_data$grit_change_goals_frequently_2013[is.na(new_data$grit_change_goals_frequently_2013)] <- new_data$grit_change_goals_frequently_2017[is.na(new_data$grit_change_goals_frequently_2013)]

new_data$grit_hard_worker_2013[is.na(new_data$grit_hard_worker_2013)] <- new_data$grit_hard_worker_2015[is.na(new_data$grit_hard_worker_2013)]
new_data$grit_hard_worker_2013[is.na(new_data$grit_hard_worker_2013)] <- new_data$grit_hard_worker_2017[is.na(new_data$grit_hard_worker_2013)]

new_data$grit_short_term_obsessions_2013[is.na(new_data$grit_short_term_obsessions_2013)] <- new_data$grit_short_term_obsessions_2015[is.na(new_data$grit_short_term_obsessions_2013)]
new_data$grit_short_term_obsessions_2013[is.na(new_data$grit_short_term_obsessions_2013)] <- new_data$grit_short_term_obsessions_2017[is.na(new_data$grit_short_term_obsessions_2013)]

new_data$grit_setbacks_not_discourage_2013[is.na(new_data$grit_setbacks_not_discourage_2013)] <- new_data$grit_setbacks_not_discourage_2015[is.na(new_data$grit_setbacks_not_discourage_2013)]
new_data$grit_setbacks_not_discourage_2013[is.na(new_data$grit_setbacks_not_discourage_2013)] <- new_data$grit_setbacks_not_discourage_2017[is.na(new_data$grit_setbacks_not_discourage_2013)]

new_data$grit_new_ideas_distract_2013[is.na(new_data$grit_new_ideas_distract_2013)] <- new_data$grit_new_ideas_distract_2015[is.na(new_data$grit_new_ideas_distract_2013)]
new_data$grit_new_ideas_distract_2013[is.na(new_data$grit_new_ideas_distract_2013)] <- new_data$grit_new_ideas_distract_2017[is.na(new_data$grit_new_ideas_distract_2013)]

new_data$personality_hard_worker[is.na(new_data$personality_hard_worker)] <- new_data$personality_hard_worker_2010[is.na(new_data$personality_hard_worker)]
new_data$personality_amount_of_work[is.na(new_data$personality_amount_of_work)] <- new_data$personality_amount_of_work_2010[is.na(new_data$personality_amount_of_work)]
new_data$personality_work_standards[is.na(new_data$personality_work_standards)] <- new_data$personality_work_standards_2010[is.na(new_data$personality_work_standards)]
new_data$personality_effort_at_work[is.na(new_data$personality_effort_at_work)] <- new_data$personality_effort_at_work_2010[is.na(new_data$personality_effort_at_work)]
new_data$personality_following_rules[is.na(new_data$personality_following_rules)] <- new_data$personality_following_rules_2010[is.na(new_data$personality_following_rules)]
new_data$personality_breaking_school_rules[is.na(new_data$personality_breaking_school_rules)] <- new_data$personality_breaking_school_rules_2010[is.na(new_data$personality_breaking_school_rules)]
new_data$personality_support_for_rules_traditions[is.na(new_data$personality_support_for_rules_traditions)] <- new_data$personality_support_for_rules_traditions_2010[is.na(new_data$personality_support_for_rules_traditions)]

Parallel analysis to decide number of factors:

fa.parallel(new_data %>% select(grit_maintaining_focus_2013, grit_change_goals_frequently_2013, grit_short_term_obsessions_2013, grit_new_ideas_distract_2013, grit_setbacks_not_discourage_2013, grit_diligence_2013, grit_ability_to_finish_projects_2013, grit_hard_worker_2013, personality_effort_at_work, personality_work_standards, personality_amount_of_work, personality_hard_worker, personality_dependable_disciplined, undependable, thorough, conscientious, personality_bending_rules, personality_support_for_rules_traditions, personality_breaking_school_rules, personality_following_rules))
Parallel analysis suggests that the number of factors =  6  and the number of components =  6 

PCA with 6 factors

pca(new_data %>% select(grit_maintaining_focus_2013, grit_change_goals_frequently_2013, grit_short_term_obsessions_2013, grit_new_ideas_distract_2013, grit_setbacks_not_discourage_2013, grit_diligence_2013, grit_ability_to_finish_projects_2013, grit_hard_worker_2013, personality_effort_at_work, personality_work_standards, personality_amount_of_work, personality_hard_worker, personality_dependable_disciplined, undependable, thorough, conscientious, personality_bending_rules, personality_support_for_rules_traditions, personality_breaking_school_rules, personality_following_rules),nfactors=6)
Principal Components Analysis
Call: principal(r = r, nfactors = nfactors, residuals = residuals, 
    rotate = rotate, n.obs = n.obs, covar = covar, scores = scores, 
    missing = missing, impute = impute, oblique.scores = oblique.scores, 
    method = method, use = use, cor = cor, correct = 0.5, weight = NULL)
Standardized loadings (pattern matrix) based upon correlation matrix

                       RC2  RC1  RC3  RC5  RC6  RC4
SS loadings           2.45 1.97 1.77 1.62 1.51 1.41
Proportion Var        0.12 0.10 0.09 0.08 0.08 0.07
Cumulative Var        0.12 0.22 0.31 0.39 0.47 0.54
Proportion Explained  0.23 0.18 0.16 0.15 0.14 0.13
Cumulative Proportion 0.23 0.41 0.58 0.73 0.87 1.00

Mean item complexity =  1.4
Test of the hypothesis that 6 components are sufficient.

The root mean square of the residuals (RMSR) is  0.07 
 with the empirical chi square  17714.45  with prob <  0 

Fit based upon off diagonal values = 0.81

Grouping together the conscientiousness items into different facets: fixed focus, rule following, reliability, quality, tendency to work hard, and grit. Factors were reverse coded if necessary. Other constructs were added as controls.

new_data$fixedfocus <- getpc(new_data %>% select(grit_maintaining_focus_2013, grit_change_goals_frequently_2013, grit_short_term_obsessions_2013, grit_new_ideas_distract_2013), dofa=F, fillmissing=F, normalizeit=T)
new_data$rulefollow <- getpc(new_data %>% select(personality_bending_rules, personality_support_for_rules_traditions, personality_breaking_school_rules, personality_following_rules), dofa=F, fillmissing=F, normalizeit=T)
new_data$reliability <- getpc(new_data %>% select(undependable, thorough, conscientious, personality_dependable_disciplined), dofa=F, fillmissing=F, normalizeit=T)
new_data$quality <- getpc(new_data %>% select(personality_effort_at_work, personality_work_standards), dofa=F, fillmissing=F, normalizeit=T)
new_data$hardwork <- -getpc(new_data %>% select(grit_hard_worker_2013, personality_hard_worker, personality_amount_of_work), dofa=F, fillmissing=F, normalizeit=T)
new_data$grit <- -getpc(new_data %>% select(grit_ability_to_finish_projects_2013, grit_diligence_2013, grit_setbacks_not_discourage_2013), dofa=F, fillmissing=F, normalizeit=T)

new_data$agreeableness <- getpc(new_data %>% select(personality_sympathetic_warm, personality_critical_quarrelsome, trustful, difficult, agreeable), dofa=F, fillmissing=F, normalizeit=T)
new_data$optimism <- -getpc(new_data %>% select(expects_best_uncertain_times, rarely_expects_good_things, optimistic_about_future, hardly_expects_things_to_go_well, uncertain_times_expect_best, rarely_good_things_happen, optimistic_about_future_pr, hardly_expects_things_to_go_well, uncertain_times_expect_best, rarely_good_things_happen, optimistic_about_future_pr, hardly_expect_things_go_well_pr), dofa=F, fillmissing=F, normalizeit=T)

new_data$boybadyouth <- new_data$R1487400
new_data$boybadparent <- new_data$R1487600
new_data$girlbadyouth <- new_data$R1487300
new_data$girlbadparent <- new_data$R1487500
new_data$bad_youthreport <- new_data$girlbadyouth
new_data$bad_youthreport[is.na(new_data$bad_youthreport)] <- new_data$boybadyouth[is.na(new_data$bad_youthreport)]
new_data$bad_parentreport <- new_data$girlbadparent
new_data$bad_parentreport[is.na(new_data$bad_parentreport)] <- new_data$boybadparent[is.na(new_data$bad_parentreport)]

Correlation matrix (data quality check).

correlation_matrix(new_data %>% select(fixedfocus, rulefollow, reliability, quality, hardwork, grit))
            fixedfocus  rulefollow  reliability quality     hardwork    grit       
fixedfocus  "NA"        "0.164 ***" "0.177 ***" "0.174 ***" "0.204 ***" "0.339 ***"
rulefollow  "0.164 ***" "NA"        "0.159 ***" "0.278 ***" "0.175 ***" "0.119 ***"
reliability "0.177 ***" "0.159 ***" "NA"        "0.262 ***" "0.251 ***" "0.207 ***"
quality     "0.174 ***" "0.278 ***" "0.262 ***" "NA"        "0.434 ***" "0.269 ***"
hardwork    "0.204 ***" "0.175 ***" "0.251 ***" "0.434 ***" "NA"        "0.32 ***" 
grit        "0.339 ***" "0.119 ***" "0.207 ***" "0.269 ***" "0.32 ***"  "NA"       

Results

Income as DV:

lr <- lm(data=new_data, logweightedincome ~ fixedfocus + rulefollow + reliability + quality + hardwork + grit)
summary(lr)

Call:
lm(formula = logweightedincome ~ fixedfocus + rulefollow + reliability + 
    quality + hardwork + grit, data = new_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.79140 -0.29473  0.01437  0.30120  1.75139 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.399241   0.007960  50.156  < 2e-16 ***
fixedfocus   0.004169   0.008824   0.472 0.636666    
rulefollow  -0.032447   0.008497  -3.818 0.000137 ***
reliability  0.043715   0.008626   5.068 4.23e-07 ***
quality      0.016834   0.009649   1.745 0.081120 .  
hardwork     0.072362   0.009859   7.340 2.63e-13 ***
grit         0.057080   0.009121   6.258 4.35e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4771 on 3607 degrees of freedom
  (5370 observations deleted due to missingness)
Multiple R-squared:  0.0651,    Adjusted R-squared:  0.06354 
F-statistic: 41.86 on 6 and 3607 DF,  p-value: < 2.2e-16

Net worth as DV:

lr <- lm(data=new_data, logweightednw ~ fixedfocus + rulefollow + reliability + quality + hardwork + grit)
summary(lr)

Call:
lm(formula = logweightednw ~ fixedfocus + rulefollow + reliability + 
    quality + hardwork + grit, data = new_data)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.9149 -0.8172 -0.1090  0.7431  2.8043 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.61959    0.01781 -34.793  < 2e-16 ***
fixedfocus  -0.03160    0.01962  -1.610 0.107473    
rulefollow  -0.02322    0.01885  -1.232 0.218066    
reliability  0.11669    0.01909   6.114 1.10e-09 ***
quality      0.04131    0.02124   1.945 0.051908 .  
hardwork     0.07093    0.02151   3.298 0.000985 ***
grit         0.08566    0.02031   4.218 2.54e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9739 on 2995 degrees of freedom
  (5982 observations deleted due to missingness)
Multiple R-squared:  0.04058,   Adjusted R-squared:  0.03866 
F-statistic: 21.11 on 6 and 2995 DF,  p-value: < 2.2e-16

Some observations: - Tendency to work hard and grit predict both income and net worth - Wanting to follow rules negatively predicts income, and probably net worth too. The p-value is iffy, but the priors are strong given that it negatively predicts income, and income correlates positively with net worth. - Reliability predicts net worth more than income - Having a fixed focus and high standards are not that important

Trying bayesian model averaging to test for whether certain confounders (e.g. race, sex, agreeableness, optimism, parent report of bad behavior, youth report of bad behavior)

ind <- subset(new_data, select=c('fixedfocus', 'rulefollow', 'reliability', 'quality', 'grit', 'hardwork', 'logweightedincome', 'agreeableness', 'optimism', 'bad_parentreport', 'bad_youthreport', 'race', 'Female', 'IQ'))
ind <- na.omit(ind)
nrow(ind)
[1] 1782
names <- c('fixedfocus', 'rulefollow', 'reliability', 'quality', 'hardwork', 'grit', 'logweightedincome', 'agreeableness', 'optimism', 'bad_parentreport', 'bad_youthreport', 'IQ')
for(name in names) {
  ind[[name]] = normalise(ind[[name]])
}

bmalol <- bicreg(x = ind %>% select(-logweightedincome), y = ind$logweightedincome, maxCol=50, nbest=1000, strict=TRUE)
summary(bmalol)

Call:
bicreg(x = ind %>% select(-logweightedincome), y = ind$logweightedincome,     strict = TRUE, maxCol = 50, nbest = 1000)


  4  models were selected
 Best  4  models (cumulative posterior probability =  1 ): 

                  p!=0    EV       SD       model 1     model 2     model 3     model 4   
Intercept         100.0   0.25566  0.03178     0.25881     0.25383     0.25466     0.24814
fixedfocus          0.0   0.00000  0.00000       .           .           .           .    
rulefollow          0.0   0.00000  0.00000       .           .           .           .    
reliability        61.1   0.03919  0.03575     0.06074       .         0.06996       .    
quality            72.6   0.05609  0.04059     0.07260     0.08256       .           .    
grit              100.0   0.10665  0.02273     0.10061     0.10840     0.11106     0.12191
hardwork          100.0   0.11241  0.02785     0.10092     0.10704     0.13305     0.14545
agreeableness       0.0   0.00000  0.00000       .           .           .           .    
optimism            0.0   0.00000  0.00000       .           .           .           .    
bad_parentreport  100.0  -0.08858  0.02162    -0.08679    -0.08972    -0.08900    -0.09280
bad_youthreport     0.0   0.00000  0.00000       .           .           .           .    
raceBlack         100.0  -0.20417  0.05192    -0.20784    -0.20255    -0.20229    -0.19518
raceHispanic        0.0   0.00000  0.00000       .           .           .           .    
raceOther           0.0   0.00000  0.00000       .           .           .           .    
raceWhite           0.0   0.00000  0.00000       .           .           .           .    
Female            100.0  -0.41516  0.04189    -0.41969    -0.41227    -0.41408    -0.40445
IQ                100.0   0.30708  0.02391     0.30634     0.31342     0.29898     0.30612
                                                                                          
nVar                                             8           7           7           6    
r2                                             0.254       0.251       0.250       0.246  
BIC                                         -462.00833  -461.72474  -460.89265  -457.95054
post prob                                      0.389       0.337       0.223       0.051  

Largely the same results, though wanting to follow rules is no longer predictive. (Note: PIP < 90% results should not be trusted).

Looking through the regression options, it seems that controlling for sex dents the rule following the most. Then, controlling for IQ eliminates it.

lr <- lm(data=new_data, logweightedincome ~ fixedfocus + rulefollow + reliability + quality + hardwork + grit + Female)
summary(lr)

Call:
lm(formula = logweightedincome ~ fixedfocus + rulefollow + reliability + 
    quality + hardwork + grit + Female, data = new_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.89657 -0.27516  0.01014  0.29432  1.69089 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.5069072  0.0110758  45.767  < 2e-16 ***
fixedfocus  -0.0001291  0.0086124  -0.015   0.9880    
rulefollow  -0.0164354  0.0083706  -1.963   0.0497 *  
reliability  0.0523567  0.0084373   6.205 6.07e-10 ***
quality      0.0212911  0.0094165   2.261   0.0238 *  
hardwork     0.0748826  0.0096173   7.786 8.96e-15 ***
grit         0.0533609  0.0088998   5.996 2.22e-09 ***
Female      -0.2151049  0.0157822 -13.630  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4653 on 3606 degrees of freedom
  (5370 observations deleted due to missingness)
Multiple R-squared:  0.1109,    Adjusted R-squared:  0.1092 
F-statistic: 64.26 on 7 and 3606 DF,  p-value: < 2.2e-16
lr <- lm(data=new_data, logweightedincome ~ fixedfocus + rulefollow + reliability + quality + hardwork + grit + Female + IQ)
summary(lr)

Call:
lm(formula = logweightedincome ~ fixedfocus + rulefollow + reliability + 
    quality + hardwork + grit + Female + IQ, data = new_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.94350 -0.27031  0.01621  0.27188  1.40240 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.8330223  0.0589837 -14.123  < 2e-16 ***
fixedfocus   0.0225964  0.0088935   2.541 0.011111 *  
rulefollow   0.0016669  0.0084701   0.197 0.843998    
reliability  0.0188497  0.0086527   2.178 0.029450 *  
quality      0.0440178  0.0097353   4.521 6.38e-06 ***
hardwork     0.0485679  0.0099188   4.897 1.03e-06 ***
grit         0.0344693  0.0091527   3.766 0.000169 ***
Female      -0.2054886  0.0159668 -12.870  < 2e-16 ***
IQ           0.0133574  0.0005688  23.485  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4264 on 2960 degrees of freedom
  (6015 observations deleted due to missingness)
Multiple R-squared:  0.248, Adjusted R-squared:  0.246 
F-statistic:   122 on 8 and 2960 DF,  p-value: < 2.2e-16

Artefact arises out of these two correlations:

cor.test(new_data$IQ, new_data$rulefollow)

    Pearson's product-moment correlation

data:  new_data$IQ and new_data$rulefollow
t = -6.0218, df = 5933, p-value = 1.829e-09
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.10317802 -0.05260263
sample estimates:
        cor 
-0.07794047 
cor.test(new_data$rulefollow, new_data$Female)

    Pearson's product-moment correlation

data:  new_data$rulefollow and new_data$Female
t = 14.864, df = 7407, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.1479895 0.1922130
sample estimates:
      cor 
0.1701869 

I also tested what could be called the “Jensen hypothesis”, which is that the subfactors that best measure conscientiousness are also the ones that are the most predictive. Six factors is not enough power to test it, so I tested the theory at the item level.

stestlist <- c('grit_maintaining_focus_2013', 'grit_change_goals_frequently_2013', 'grit_short_term_obsessions_2013', 'grit_new_ideas_distract_2013', 'grit_setbacks_not_discourage_2013', 'grit_diligence_2013', 'grit_ability_to_finish_projects_2013', 'grit_hard_worker_2013', 'personality_effort_at_work', 'personality_work_standards', 'personality_amount_of_work', 'personality_hard_worker', 'personality_dependable_disciplined', 'undependable', 'thorough', 'conscientious', 'personality_bending_rules', 'personality_support_for_rules_traditions', 'personality_breaking_school_rules', 'personality_following_rules')
debi <- jensen_vectors(new_data, stlist=stestlist, ovector='logweightedincome')

cor.test(debi$r, debi$l)

    Pearson's product-moment correlation

data:  debi$r and debi$l
t = 5.3401, df = 18, p-value = 4.473e-05
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5209514 0.9101447
sample estimates:
      cor 
0.7829722 

Looks good. But there is a problem:

fit2 <- lm(data=debi, r ~ l)

uzi3 <- seq(from=-0.6, to=0.6, by=0.01)
uzi4 <- data.frame(l=uzi3)
uzi4$fit = predict(fit2, uzi4, interval = "confidence")

p <- ggplot(uzi4) +
  geom_point(mapping = aes(x=l, y=r), data=debi) +
  geom_line(data = uzi4, aes(x = l, y = fit[, 1]), color = "green", size = 1) +
  geom_ribbon(data = uzi4, aes(x = l, ymin = fit[, 2], ymax = fit[, 3]), alpha = 0.45) + 
  geom_text(data = debi, aes(x = l, y = r, label = v), vjust = -.44, size = 4) + 
  labs(title = "") +
  xlab('consc-loading') +
  ylab('Correlation with Income') +
  theme_bw() +
  theme(
    axis.text.x = element_text(size = 12),
    axis.text.y = element_text(size = 12),
    axis.title.x = element_text(size = 14),
    axis.title.y = element_text(size = 14),
    legend.position = "right",
    plot.background = element_rect(fill = "white")
  )

p

Some items have negative and positive loadings, so the correlation could easily be an artefact of this. Taking the absolute values of both:

cor.test(abs(debi$r), abs(debi$l))

    Pearson's product-moment correlation

data:  abs(debi$r) and abs(debi$l)
t = 0.89854, df = 18, p-value = 0.3808
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.2590823  0.5951465
sample estimates:
     cor 
0.207193 

Little correlation, if any.

Conclusion

Hard work, reliability, and reliability seem are the three conscientiousness facets most robustly linked to income and net worth. Being willing to follow rules, having high standards (though only 2 items were used to calcualte this facet), and having a more fixed focus/longer attention span don’t predict much independent of the other facets. The method of correlated vectors suggests that the correlation is not primarily on the general factor, if at all.

LS0tCnRpdGxlOiAiV2hpY2ggZmFjZXQgb2YgY29uc2NpZW50aW91c25lc3MgcHJlZGljdHMgd2VhbHRoPyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVEw7RFIgYmVpbmcgd2lsbGluZyB0byBmb2xsb3cgcnVsZXMgYW5kIGhhdmUgYSBmaXhlZCBmb2N1cyBkb24ndCBwcmVkaWN0IG11Y2guCkhhdmluZyBhIHdvcmsgZXRoaWMsIGJlaW5nIHJlbGlhYmxlLCBhbmQgaGF2aW5nIGdyaXQgZG8uCgpDdXJyZW50bHkgdXNpbmcgdGhlIHZhcmlhYmxlcyBJIGNyZWF0ZWQgaW4gdGhlIHBvc3QgaHR0cHM6Ly9ycHVicy5jb20vbWlzaGF2L2V4cGxhaW5lZHZhcmlhbmNlCnRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcmVjeWNsaW5nIGNvZGUuCgojIyMgRGF0YSBjbGVhbmluZwpgYGB7cn0KbmV3X2RhdGEkYm95YmFkeW91dGggPC0gbmV3X2RhdGEkUjE0ODc0MDAKbmV3X2RhdGEkYm95YmFkcGFyZW50IDwtIG5ld19kYXRhJFIxNDg3NjAwCm5ld19kYXRhJGdpcmxiYWR5b3V0aCA8LSBuZXdfZGF0YSRSMTQ4NzMwMApuZXdfZGF0YSRnaXJsYmFkcGFyZW50IDwtIG5ld19kYXRhJFIxNDg3NTAwCgpuZXdfZGF0YSA8LSBuZXdfZGF0YSAlPiUKICByZW5hbWUoCiAgICAibGllc19jaGVhdHNfZmVtYWxlIiA9ICJSMDM1NjUwMCIsICAKICAgICJzY2hvb2xfd29ya19wb29yX2ZlbWFsZSIgPSAiUjAzNTY2MDAiLCAgCiAgICAidHJvdWJsZV9zbGVlcGluZ19mZW1hbGUiID0gIlIwMzU2NzAwIiwgIAogICAgInVuaGFwcHlfc2FkX2RlcHJlc3NlZF9mZW1hbGUiID0gIlIwMzU2ODAwIiwgIAogICAgInRyb3VibGVfY29uY2VudHJhdGluZ19tYWxlIiA9ICJSMDM1NjkwMCIsICAKICAgICJkb2VzX25vdF9nZXRfYWxvbmdfb3RoZXJzX21hbGUiID0gIlIwMzU3MDAwIiwgIAogICAgImxpZXNfY2hlYXRzX21hbGUiID0gIlIwMzU3MTAwIiwgIAogICAgInVuaGFwcHlfc2FkX2RlcHJlc3NlZF9tYWxlIiA9ICJSMDM1NzIwMCIsICAKICAgICJleHBlY3RzX2Jlc3RfdW5jZXJ0YWluX3RpbWVzIiA9ICJSMDM1NzUwMCIsICAKICAgICJyYXJlbHlfZXhwZWN0c19nb29kX3RoaW5ncyIgPSAiUjAzNTc2MDAiLCAgCiAgICAib3B0aW1pc3RpY19hYm91dF9mdXR1cmUiID0gIlIwMzU3NzAwIiwgIAogICAgImhhcmRseV9leHBlY3RzX3RoaW5nc190b19nb193ZWxsIiA9ICJSMDM1NzgwMCIsICAKICAgICJwZXJjZW50X2NoYW5jZV9hcnJlc3RlZF9zdGVhbF9jYXIiID0gIlIwNDQzNTAwIiwgIAogICAgInVuY2VydGFpbl90aW1lc19leHBlY3RfYmVzdCIgPSAiUjA2MjQwMDAiLCAgCiAgICAicmFyZWx5X2dvb2RfdGhpbmdzX2hhcHBlbiIgPSAiUjA2MjQxMDAiLCAgCiAgICAib3B0aW1pc3RpY19hYm91dF9mdXR1cmVfcHIiID0gIlIwNjI0MjAwIiwgIAogICAgImhhcmRseV9leHBlY3RfdGhpbmdzX2dvX3dlbGxfcHIiID0gIlIwNjI0MzAwIiwgIAogICAgImNvbmRpdGlvbl9saW1pdHNfc2Nob29sX3dvcmsiID0gIlIwNjgxMzAwIiwgIAogICAgImxlYXJuaW5nX2Vtb3Rpb25hbF9wcm9ibGVtX2xpbWl0c19wZXJmb3JtYW5jZSIgPSAiUjA2ODE1MDAiLCAgCiAgICAibGVhcm5pbmdfZW1vdGlvbmFsX3Byb2JsZW1fZGV0YWlsXzEiID0gIlIwNjgxNzAwIiwgIAogICAgImxlYXJuaW5nX2Vtb3Rpb25hbF9wcm9ibGVtX2RldGFpbF8yIiA9ICJSMDY4MTcwMSIsICAKICAgICJsZWFybmluZ19lbW90aW9uYWxfcHJvYmxlbV9kZXRhaWxfMyIgPSAiUjA2ODE3MDIiLCAgCiAgICAibGVhcm5pbmdfZW1vdGlvbmFsX3Byb2JsZW1fZGV0YWlsXzQiID0gIlIwNjgxNzAzIiwgIAogICAgImxlYXJuaW5nX2Vtb3Rpb25hbF9wcm9ibGVtX2RldGFpbF81IiA9ICJSMDY4MTcwNSIsICAKICAgICJhZ2VfY29uZGl0aW9uX25vdGljZWRfMSIgPSAiUjA2ODE4MDAiLCAgCiAgICAiYWdlX2NvbmRpdGlvbl9ub3RpY2VkXzIiID0gIlIwNjgxOTAwIiwgIAogICAgImFnZV9jb25kaXRpb25fbm90aWNlZF8zIiA9ICJSMDY4MjAwMCIsICAKICAgICJhZ2VfY29uZGl0aW9uX25vdGljZWRfNCIgPSAiUjA2ODIxMDAiLCAgCiAgICAiYWdlX2NvbmRpdGlvbl9ub3RpY2VkXzUiID0gIlIwNjgyMjAwIiwgIAogICAgImN1cnJlbnRseV9saW1pdGVkX2J5X2NvbmRpdGlvbl8xIiA9ICJSMDY4MjMwMCIsICAKICAgICJjdXJyZW50bHlfbGltaXRlZF9ieV9jb25kaXRpb25fMiIgPSAiUjA2ODI0MDAiLCAgCiAgICAiY3VycmVudGx5X2xpbWl0ZWRfYnlfY29uZGl0aW9uXzMiID0gIlIwNjgyNTAwIiwgIAogICAgImN1cnJlbnRseV9saW1pdGVkX2J5X2NvbmRpdGlvbl80IiA9ICJSMDY4MjYwMCIsICAKICAgICJjdXJyZW50bHlfbGltaXRlZF9ieV9jb25kaXRpb25fNSIgPSAiUjA2ODI3MDAiLCAgCiAgICAicGVyY2VudF9jaGFuY2VfaW5fc2Nob29sX25leHRfeWVhciIgPSAiUjA2ODg1MDAiLCAgCiAgICAicGVyY2VudF9jaGFuY2Vfc2Nob29sX2FuZF93b3JraW5nIiA9ICJSMDY4ODYwMCIsICAKICAgICJwZXJjZW50X2NoYW5jZV9oaWdoX3NjaG9vbF9kaXBsb21hX2J5XzIwIiA9ICJSMDY4ODcwMCIsICAKICAgICJwZXJjZW50X2NoYW5jZV9pbl9qYWlsX2J5XzIwIiA9ICJSMDY4ODgwMCIsICAKICAgICJwZXJjZW50X2NoYW5jZV9wYXJlbnRfYnlfMjAiID0gIlIwNjg4OTAwIiwgIAogICAgInBlcmNlbnRfY2hhbmNlX2NvbGxlZ2VfZGVncmVlX2J5XzMwIiA9ICJSMDY4OTAwMCIsICAKICAgICJwZXJjZW50X2NoYW5jZV93b3JrXzIwX2hvdXJzX2J5XzMwIiA9ICJSMDY4OTEwMCIsICAKICAgICJsaWVzX2NoZWF0c19mZW1hbGVfMiIgPSAiUjA2OTA1MDAiLCAgCiAgICAic2Nob29sX3dvcmtfcG9vcl9mZW1hbGVfMiIgPSAiUjA2OTA2MDAiLCAgCiAgICAidHJvdWJsZV9zbGVlcGluZ19mZW1hbGVfMiIgPSAiUjA2OTA3MDAiLCAgCiAgICAidW5oYXBweV9zYWRfZGVwcmVzc2VkX2ZlbWFsZV8yIiA9ICJSMDY5MDgwMCIsICAKICAgICJ0cm91YmxlX2NvbmNlbnRyYXRpbmdfbWFsZV8yIiA9ICJSMDY5MDkwMCIsICAKICAgICJsaWVzX2NoZWF0c19tYWxlXzIiID0gIlIwNjkxMDAwIiwgIAogICAgImRvZXNfbm90X2dldF9hbG9uZ19vdGhlcnNfbWFsZV8yIiA9ICJSMDY5MTEwMCIsICAKICAgICJ1bmhhcHB5X3NhZF9kZXByZXNzZWRfbWFsZV8yIiA9ICJSMDY5MTIwMCIsICAKICAgICJkaXNvcmdhbml6ZWQiID0gIlMwOTIwMDAwIiwgIAogICAgImNvbnNjaWVudGlvdXMiID0gIlMwOTIwMTAwIiwgIAogICAgInVuZGVwZW5kYWJsZSIgPSAiUzA5MjAyMDAiLCAgCiAgICAidGhvcm91Z2giID0gIlMwOTIwMzAwIiwgIAogICAgImFncmVlYWJsZSIgPSAiUzA5MjA0MDAiLCAgCiAgICAiZGlmZmljdWx0IiA9ICJTMDkyMDUwMCIsICAKICAgICJzdHViYm9ybiIgPSAiUzA5MjA2MDAiLCAgCiAgICAidHJ1c3RmdWwiID0gIlMwOTIwNzAwIiwgIAogICAgInBlcnNvbmFsaXR5X2V4dHJhdmVydGVkX2VudGh1c2lhc3RpYyIgPSAiVDMxNjI1MDAiLCAgCiAgICAicGVyc29uYWxpdHlfY3JpdGljYWxfcXVhcnJlbHNvbWUiID0gIlQzMTYyNTAxIiwgIAogICAgInBlcnNvbmFsaXR5X2RlcGVuZGFibGVfZGlzY2lwbGluZWQiID0gIlQzMTYyNTAyIiwgIAogICAgInBlcnNvbmFsaXR5X2FueGlvdXNfdXBzZXQiID0gIlQzMTYyNTAzIiwgIAogICAgInBlcnNvbmFsaXR5X29wZW5fY29tcGxleCIgPSAiVDMxNjI1MDQiLCAgCiAgICAicGVyc29uYWxpdHlfcmVzZXJ2ZWRfcXVpZXQiID0gIlQzMTYyNTA1IiwgIAogICAgInBlcnNvbmFsaXR5X3N5bXBhdGhldGljX3dhcm0iID0gIlQzMTYyNTA2IiwgIAogICAgInBlcnNvbmFsaXR5X2Rpc29yZ2FuaXplZF9jYXJlbGVzcyIgPSAiVDMxNjI1MDciLCAgCiAgICAicGVyc29uYWxpdHlfY2FsbV9zdGFibGUiID0gIlQzMTYyNTA4IiwgIAogICAgInBlcnNvbmFsaXR5X2NvbnZlbnRpb25hbF91bmNyZWF0aXZlIiA9ICJUMzE2MjUwOSIsICAKICAgICJwZXJzb25hbGl0eV9oYXJkX3dvcmtlciIgPSAiVDMxNjI2MDAiLCAgCiAgICAicGVyc29uYWxpdHlfYW1vdW50X29mX3dvcmsiID0gIlQzMTYyNjAxIiwgIAogICAgInBlcnNvbmFsaXR5X3dvcmtfc3RhbmRhcmRzIiA9ICJUMzE2MjYwMiIsICAKICAgICJwZXJzb25hbGl0eV9lZmZvcnRfYXRfd29yayIgPSAiVDMxNjI2MDMiLCAgCiAgICAicGVyc29uYWxpdHlfZm9sbG93aW5nX3J1bGVzIiA9ICJUMzE2MjcwMCIsICAKICAgICJwZXJzb25hbGl0eV9icmVha2luZ19zY2hvb2xfcnVsZXMiID0gIlQzMTYyNzAxIiwgIAogICAgInBlcnNvbmFsaXR5X3N1cHBvcnRfZm9yX3J1bGVzX3RyYWRpdGlvbnMiID0gIlQzMTYyNzAyIiwgIAogICAgInBlcnNvbmFsaXR5X2JlbmRpbmdfcnVsZXMiID0gIlQzMTYyNzAzIiwgIAogICAgInBlcnNvbmFsaXR5X2hhcmRfd29ya2VyXzIwMTAiID0gIlQ2MjE2NDAwIiwgIAogICAgInBlcnNvbmFsaXR5X2Ftb3VudF9vZl93b3JrXzIwMTAiID0gIlQ2MjE2NDAxIiwgIAogICAgInBlcnNvbmFsaXR5X3dvcmtfc3RhbmRhcmRzXzIwMTAiID0gIlQ2MjE2NDAyIiwgIAogICAgInBlcnNvbmFsaXR5X2VmZm9ydF9hdF93b3JrXzIwMTAiID0gIlQ2MjE2NDAzIiwgIAogICAgInBlcnNvbmFsaXR5X2ZvbGxvd2luZ19ydWxlc18yMDEwIiA9ICJUNjIxNjUwMCIsICAKICAgICJwZXJzb25hbGl0eV9icmVha2luZ19zY2hvb2xfcnVsZXNfMjAxMCIgPSAiVDYyMTY1MDEiLCAgCiAgICAicGVyc29uYWxpdHlfc3VwcG9ydF9mb3JfcnVsZXNfdHJhZGl0aW9uc18yMDEwIiA9ICJUNjIxNjUwMiIsICAKICAgICJwZXJzb25hbGl0eV9iZW5kaW5nX3J1bGVzXzIwMTAiID0gIlQ2MjE2NTAzIiwgIAogICAgImdyaXRfbmV3X2lkZWFzX2Rpc3RyYWN0XzIwMTMiID0gIlQ5MDM5NDAwIiwgIAogICAgImdyaXRfc2V0YmFja3Nfbm90X2Rpc2NvdXJhZ2VfMjAxMyIgPSAiVDkwMzk1MDAiLCAgCiAgICAiZ3JpdF9zaG9ydF90ZXJtX29ic2Vzc2lvbnNfMjAxMyIgPSAiVDkwMzk2MDAiLCAgCiAgICAiZ3JpdF9oYXJkX3dvcmtlcl8yMDEzIiA9ICJUOTAzOTcwMCIsICAKICAgICJncml0X2NoYW5nZV9nb2Fsc19mcmVxdWVudGx5XzIwMTMiID0gIlQ5MDM5ODAwIiwgIAogICAgImdyaXRfbWFpbnRhaW5pbmdfZm9jdXNfMjAxMyIgPSAiVDkwMzk5MDAiLCAgCiAgICAiZ3JpdF9hYmlsaXR5X3RvX2ZpbmlzaF9wcm9qZWN0c18yMDEzIiA9ICJUOTA0MDAwMCIsICAKICAgICJncml0X2RpbGlnZW5jZV8yMDEzIiA9ICJUOTA0MDEwMCIsICAKICAgICJncml0X25ld19pZGVhc19kaXN0cmFjdF8yMDE1IiA9ICJVMTAyODkwMCIsICAKICAgICJncml0X3NldGJhY2tzX25vdF9kaXNjb3VyYWdlXzIwMTUiID0gIlUxMDI5MDAwIiwgIAogICAgImdyaXRfc2hvcnRfdGVybV9vYnNlc3Npb25zXzIwMTUiID0gIlUxMDI5MTAwIiwgIAogICAgImdyaXRfaGFyZF93b3JrZXJfMjAxNSIgPSAiVTEwMjkyMDAiLCAgCiAgICAiZ3JpdF9jaGFuZ2VfZ29hbHNfZnJlcXVlbnRseV8yMDE1IiA9ICJVMTAyOTMwMCIsICAKICAgICJncml0X21haW50YWluaW5nX2ZvY3VzXzIwMTUiID0gIlUxMDI5NDAwIiwgIAogICAgImdyaXRfYWJpbGl0eV90b19maW5pc2hfcHJvamVjdHNfMjAxNSIgPSAiVTEwMjk1MDAiLCAgCiAgICAiZ3JpdF9kaWxpZ2VuY2VfMjAxNSIgPSAiVTEwMjk2MDAiLCAgCiAgICAiZ3JpdF9uZXdfaWRlYXNfZGlzdHJhY3RfMjAxNyIgPSAiVTI5NjkxMDAiLCAgCiAgICAiZ3JpdF9zZXRiYWNrc19ub3RfZGlzY291cmFnZV8yMDE3IiA9ICJVMjk2OTIwMCIsICAKICAgICJncml0X3Nob3J0X3Rlcm1fb2JzZXNzaW9uc18yMDE3IiA9ICJVMjk2OTMwMCIsICAKICAgICJncml0X2hhcmRfd29ya2VyXzIwMTciID0gIlUyOTY5NDAwIiwgIAogICAgImdyaXRfY2hhbmdlX2dvYWxzX2ZyZXF1ZW50bHlfMjAxNyIgPSAiVTI5Njk1MDAiLCAgCiAgICAiZ3JpdF9tYWludGFpbmluZ19mb2N1c18yMDE3IiA9ICJVMjk2OTYwMCIsICAKICAgICJncml0X2FiaWxpdHlfdG9fZmluaXNoX3Byb2plY3RzXzIwMTciID0gIlUyOTY5NzAwIiwgIAogICAgImdyaXRfZGlsaWdlbmNlXzIwMTciID0gIlUyOTY5ODAwIgogICkKCm5ld19kYXRhJGdyaXRfZGlsaWdlbmNlXzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9kaWxpZ2VuY2VfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfZGlsaWdlbmNlXzIwMTVbaXMubmEobmV3X2RhdGEkZ3JpdF9kaWxpZ2VuY2VfMjAxMyldCm5ld19kYXRhJGdyaXRfZGlsaWdlbmNlXzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9kaWxpZ2VuY2VfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfZGlsaWdlbmNlXzIwMTdbaXMubmEobmV3X2RhdGEkZ3JpdF9kaWxpZ2VuY2VfMjAxMyldCgpuZXdfZGF0YSRncml0X2FiaWxpdHlfdG9fZmluaXNoX3Byb2plY3RzXzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9hYmlsaXR5X3RvX2ZpbmlzaF9wcm9qZWN0c18yMDEzKV0gPC0gbmV3X2RhdGEkZ3JpdF9hYmlsaXR5X3RvX2ZpbmlzaF9wcm9qZWN0c18yMDE1W2lzLm5hKG5ld19kYXRhJGdyaXRfYWJpbGl0eV90b19maW5pc2hfcHJvamVjdHNfMjAxMyldCm5ld19kYXRhJGdyaXRfYWJpbGl0eV90b19maW5pc2hfcHJvamVjdHNfMjAxM1tpcy5uYShuZXdfZGF0YSRncml0X2FiaWxpdHlfdG9fZmluaXNoX3Byb2plY3RzXzIwMTMpXSA8LSBuZXdfZGF0YSRncml0X2FiaWxpdHlfdG9fZmluaXNoX3Byb2plY3RzXzIwMTdbaXMubmEobmV3X2RhdGEkZ3JpdF9hYmlsaXR5X3RvX2ZpbmlzaF9wcm9qZWN0c18yMDEzKV0KCm5ld19kYXRhJGdyaXRfbWFpbnRhaW5pbmdfZm9jdXNfMjAxM1tpcy5uYShuZXdfZGF0YSRncml0X21haW50YWluaW5nX2ZvY3VzXzIwMTMpXSA8LSBuZXdfZGF0YSRncml0X21haW50YWluaW5nX2ZvY3VzXzIwMTVbaXMubmEobmV3X2RhdGEkZ3JpdF9tYWludGFpbmluZ19mb2N1c18yMDEzKV0KbmV3X2RhdGEkZ3JpdF9tYWludGFpbmluZ19mb2N1c18yMDEzW2lzLm5hKG5ld19kYXRhJGdyaXRfbWFpbnRhaW5pbmdfZm9jdXNfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfbWFpbnRhaW5pbmdfZm9jdXNfMjAxN1tpcy5uYShuZXdfZGF0YSRncml0X21haW50YWluaW5nX2ZvY3VzXzIwMTMpXQoKbmV3X2RhdGEkZ3JpdF9jaGFuZ2VfZ29hbHNfZnJlcXVlbnRseV8yMDEzW2lzLm5hKG5ld19kYXRhJGdyaXRfY2hhbmdlX2dvYWxzX2ZyZXF1ZW50bHlfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfY2hhbmdlX2dvYWxzX2ZyZXF1ZW50bHlfMjAxNVtpcy5uYShuZXdfZGF0YSRncml0X2NoYW5nZV9nb2Fsc19mcmVxdWVudGx5XzIwMTMpXQpuZXdfZGF0YSRncml0X2NoYW5nZV9nb2Fsc19mcmVxdWVudGx5XzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9jaGFuZ2VfZ29hbHNfZnJlcXVlbnRseV8yMDEzKV0gPC0gbmV3X2RhdGEkZ3JpdF9jaGFuZ2VfZ29hbHNfZnJlcXVlbnRseV8yMDE3W2lzLm5hKG5ld19kYXRhJGdyaXRfY2hhbmdlX2dvYWxzX2ZyZXF1ZW50bHlfMjAxMyldCgpuZXdfZGF0YSRncml0X2hhcmRfd29ya2VyXzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9oYXJkX3dvcmtlcl8yMDEzKV0gPC0gbmV3X2RhdGEkZ3JpdF9oYXJkX3dvcmtlcl8yMDE1W2lzLm5hKG5ld19kYXRhJGdyaXRfaGFyZF93b3JrZXJfMjAxMyldCm5ld19kYXRhJGdyaXRfaGFyZF93b3JrZXJfMjAxM1tpcy5uYShuZXdfZGF0YSRncml0X2hhcmRfd29ya2VyXzIwMTMpXSA8LSBuZXdfZGF0YSRncml0X2hhcmRfd29ya2VyXzIwMTdbaXMubmEobmV3X2RhdGEkZ3JpdF9oYXJkX3dvcmtlcl8yMDEzKV0KCm5ld19kYXRhJGdyaXRfc2hvcnRfdGVybV9vYnNlc3Npb25zXzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9zaG9ydF90ZXJtX29ic2Vzc2lvbnNfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfc2hvcnRfdGVybV9vYnNlc3Npb25zXzIwMTVbaXMubmEobmV3X2RhdGEkZ3JpdF9zaG9ydF90ZXJtX29ic2Vzc2lvbnNfMjAxMyldCm5ld19kYXRhJGdyaXRfc2hvcnRfdGVybV9vYnNlc3Npb25zXzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9zaG9ydF90ZXJtX29ic2Vzc2lvbnNfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfc2hvcnRfdGVybV9vYnNlc3Npb25zXzIwMTdbaXMubmEobmV3X2RhdGEkZ3JpdF9zaG9ydF90ZXJtX29ic2Vzc2lvbnNfMjAxMyldCgpuZXdfZGF0YSRncml0X3NldGJhY2tzX25vdF9kaXNjb3VyYWdlXzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9zZXRiYWNrc19ub3RfZGlzY291cmFnZV8yMDEzKV0gPC0gbmV3X2RhdGEkZ3JpdF9zZXRiYWNrc19ub3RfZGlzY291cmFnZV8yMDE1W2lzLm5hKG5ld19kYXRhJGdyaXRfc2V0YmFja3Nfbm90X2Rpc2NvdXJhZ2VfMjAxMyldCm5ld19kYXRhJGdyaXRfc2V0YmFja3Nfbm90X2Rpc2NvdXJhZ2VfMjAxM1tpcy5uYShuZXdfZGF0YSRncml0X3NldGJhY2tzX25vdF9kaXNjb3VyYWdlXzIwMTMpXSA8LSBuZXdfZGF0YSRncml0X3NldGJhY2tzX25vdF9kaXNjb3VyYWdlXzIwMTdbaXMubmEobmV3X2RhdGEkZ3JpdF9zZXRiYWNrc19ub3RfZGlzY291cmFnZV8yMDEzKV0KCm5ld19kYXRhJGdyaXRfbmV3X2lkZWFzX2Rpc3RyYWN0XzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9uZXdfaWRlYXNfZGlzdHJhY3RfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfbmV3X2lkZWFzX2Rpc3RyYWN0XzIwMTVbaXMubmEobmV3X2RhdGEkZ3JpdF9uZXdfaWRlYXNfZGlzdHJhY3RfMjAxMyldCm5ld19kYXRhJGdyaXRfbmV3X2lkZWFzX2Rpc3RyYWN0XzIwMTNbaXMubmEobmV3X2RhdGEkZ3JpdF9uZXdfaWRlYXNfZGlzdHJhY3RfMjAxMyldIDwtIG5ld19kYXRhJGdyaXRfbmV3X2lkZWFzX2Rpc3RyYWN0XzIwMTdbaXMubmEobmV3X2RhdGEkZ3JpdF9uZXdfaWRlYXNfZGlzdHJhY3RfMjAxMyldCgpuZXdfZGF0YSRwZXJzb25hbGl0eV9oYXJkX3dvcmtlcltpcy5uYShuZXdfZGF0YSRwZXJzb25hbGl0eV9oYXJkX3dvcmtlcildIDwtIG5ld19kYXRhJHBlcnNvbmFsaXR5X2hhcmRfd29ya2VyXzIwMTBbaXMubmEobmV3X2RhdGEkcGVyc29uYWxpdHlfaGFyZF93b3JrZXIpXQpuZXdfZGF0YSRwZXJzb25hbGl0eV9hbW91bnRfb2Zfd29ya1tpcy5uYShuZXdfZGF0YSRwZXJzb25hbGl0eV9hbW91bnRfb2Zfd29yayldIDwtIG5ld19kYXRhJHBlcnNvbmFsaXR5X2Ftb3VudF9vZl93b3JrXzIwMTBbaXMubmEobmV3X2RhdGEkcGVyc29uYWxpdHlfYW1vdW50X29mX3dvcmspXQpuZXdfZGF0YSRwZXJzb25hbGl0eV93b3JrX3N0YW5kYXJkc1tpcy5uYShuZXdfZGF0YSRwZXJzb25hbGl0eV93b3JrX3N0YW5kYXJkcyldIDwtIG5ld19kYXRhJHBlcnNvbmFsaXR5X3dvcmtfc3RhbmRhcmRzXzIwMTBbaXMubmEobmV3X2RhdGEkcGVyc29uYWxpdHlfd29ya19zdGFuZGFyZHMpXQpuZXdfZGF0YSRwZXJzb25hbGl0eV9lZmZvcnRfYXRfd29ya1tpcy5uYShuZXdfZGF0YSRwZXJzb25hbGl0eV9lZmZvcnRfYXRfd29yayldIDwtIG5ld19kYXRhJHBlcnNvbmFsaXR5X2VmZm9ydF9hdF93b3JrXzIwMTBbaXMubmEobmV3X2RhdGEkcGVyc29uYWxpdHlfZWZmb3J0X2F0X3dvcmspXQpuZXdfZGF0YSRwZXJzb25hbGl0eV9mb2xsb3dpbmdfcnVsZXNbaXMubmEobmV3X2RhdGEkcGVyc29uYWxpdHlfZm9sbG93aW5nX3J1bGVzKV0gPC0gbmV3X2RhdGEkcGVyc29uYWxpdHlfZm9sbG93aW5nX3J1bGVzXzIwMTBbaXMubmEobmV3X2RhdGEkcGVyc29uYWxpdHlfZm9sbG93aW5nX3J1bGVzKV0KbmV3X2RhdGEkcGVyc29uYWxpdHlfYnJlYWtpbmdfc2Nob29sX3J1bGVzW2lzLm5hKG5ld19kYXRhJHBlcnNvbmFsaXR5X2JyZWFraW5nX3NjaG9vbF9ydWxlcyldIDwtIG5ld19kYXRhJHBlcnNvbmFsaXR5X2JyZWFraW5nX3NjaG9vbF9ydWxlc18yMDEwW2lzLm5hKG5ld19kYXRhJHBlcnNvbmFsaXR5X2JyZWFraW5nX3NjaG9vbF9ydWxlcyldCm5ld19kYXRhJHBlcnNvbmFsaXR5X3N1cHBvcnRfZm9yX3J1bGVzX3RyYWRpdGlvbnNbaXMubmEobmV3X2RhdGEkcGVyc29uYWxpdHlfc3VwcG9ydF9mb3JfcnVsZXNfdHJhZGl0aW9ucyldIDwtIG5ld19kYXRhJHBlcnNvbmFsaXR5X3N1cHBvcnRfZm9yX3J1bGVzX3RyYWRpdGlvbnNfMjAxMFtpcy5uYShuZXdfZGF0YSRwZXJzb25hbGl0eV9zdXBwb3J0X2Zvcl9ydWxlc190cmFkaXRpb25zKV0KYGBgCgpQYXJhbGxlbCBhbmFseXNpcyB0byBkZWNpZGUgbnVtYmVyIG9mIGZhY3RvcnM6CmBgYHtyfQpmYS5wYXJhbGxlbChuZXdfZGF0YSAlPiUgc2VsZWN0KGdyaXRfbWFpbnRhaW5pbmdfZm9jdXNfMjAxMywgZ3JpdF9jaGFuZ2VfZ29hbHNfZnJlcXVlbnRseV8yMDEzLCBncml0X3Nob3J0X3Rlcm1fb2JzZXNzaW9uc18yMDEzLCBncml0X25ld19pZGVhc19kaXN0cmFjdF8yMDEzLCBncml0X3NldGJhY2tzX25vdF9kaXNjb3VyYWdlXzIwMTMsIGdyaXRfZGlsaWdlbmNlXzIwMTMsIGdyaXRfYWJpbGl0eV90b19maW5pc2hfcHJvamVjdHNfMjAxMywgZ3JpdF9oYXJkX3dvcmtlcl8yMDEzLCBwZXJzb25hbGl0eV9lZmZvcnRfYXRfd29yaywgcGVyc29uYWxpdHlfd29ya19zdGFuZGFyZHMsIHBlcnNvbmFsaXR5X2Ftb3VudF9vZl93b3JrLCBwZXJzb25hbGl0eV9oYXJkX3dvcmtlciwgcGVyc29uYWxpdHlfZGVwZW5kYWJsZV9kaXNjaXBsaW5lZCwgdW5kZXBlbmRhYmxlLCB0aG9yb3VnaCwgY29uc2NpZW50aW91cywgcGVyc29uYWxpdHlfYmVuZGluZ19ydWxlcywgcGVyc29uYWxpdHlfc3VwcG9ydF9mb3JfcnVsZXNfdHJhZGl0aW9ucywgcGVyc29uYWxpdHlfYnJlYWtpbmdfc2Nob29sX3J1bGVzLCBwZXJzb25hbGl0eV9mb2xsb3dpbmdfcnVsZXMpKQoKYGBgCgpQQ0Egd2l0aCA2IGZhY3RvcnMKYGBge3J9CnBjYShuZXdfZGF0YSAlPiUgc2VsZWN0KGdyaXRfbWFpbnRhaW5pbmdfZm9jdXNfMjAxMywgZ3JpdF9jaGFuZ2VfZ29hbHNfZnJlcXVlbnRseV8yMDEzLCBncml0X3Nob3J0X3Rlcm1fb2JzZXNzaW9uc18yMDEzLCBncml0X25ld19pZGVhc19kaXN0cmFjdF8yMDEzLCBncml0X3NldGJhY2tzX25vdF9kaXNjb3VyYWdlXzIwMTMsIGdyaXRfZGlsaWdlbmNlXzIwMTMsIGdyaXRfYWJpbGl0eV90b19maW5pc2hfcHJvamVjdHNfMjAxMywgZ3JpdF9oYXJkX3dvcmtlcl8yMDEzLCBwZXJzb25hbGl0eV9lZmZvcnRfYXRfd29yaywgcGVyc29uYWxpdHlfd29ya19zdGFuZGFyZHMsIHBlcnNvbmFsaXR5X2Ftb3VudF9vZl93b3JrLCBwZXJzb25hbGl0eV9oYXJkX3dvcmtlciwgcGVyc29uYWxpdHlfZGVwZW5kYWJsZV9kaXNjaXBsaW5lZCwgdW5kZXBlbmRhYmxlLCB0aG9yb3VnaCwgY29uc2NpZW50aW91cywgcGVyc29uYWxpdHlfYmVuZGluZ19ydWxlcywgcGVyc29uYWxpdHlfc3VwcG9ydF9mb3JfcnVsZXNfdHJhZGl0aW9ucywgcGVyc29uYWxpdHlfYnJlYWtpbmdfc2Nob29sX3J1bGVzLCBwZXJzb25hbGl0eV9mb2xsb3dpbmdfcnVsZXMpLG5mYWN0b3JzPTYpCgpgYGAKCgpHcm91cGluZyB0b2dldGhlciB0aGUgY29uc2NpZW50aW91c25lc3MgaXRlbXMgaW50byBkaWZmZXJlbnQgZmFjZXRzOiBmaXhlZCBmb2N1cywgCnJ1bGUgZm9sbG93aW5nLCByZWxpYWJpbGl0eSwgcXVhbGl0eSwgdGVuZGVuY3kgdG8gd29yayBoYXJkLCBhbmQgZ3JpdC4KRmFjdG9ycyB3ZXJlIHJldmVyc2UgY29kZWQgaWYgbmVjZXNzYXJ5LiBPdGhlciBjb25zdHJ1Y3RzIHdlcmUgYWRkZWQgYXMgY29udHJvbHMuCmBgYHtyfQpuZXdfZGF0YSRmaXhlZGZvY3VzIDwtIGdldHBjKG5ld19kYXRhICU+JSBzZWxlY3QoZ3JpdF9tYWludGFpbmluZ19mb2N1c18yMDEzLCBncml0X2NoYW5nZV9nb2Fsc19mcmVxdWVudGx5XzIwMTMsIGdyaXRfc2hvcnRfdGVybV9vYnNlc3Npb25zXzIwMTMsIGdyaXRfbmV3X2lkZWFzX2Rpc3RyYWN0XzIwMTMpLCBkb2ZhPUYsIGZpbGxtaXNzaW5nPUYsIG5vcm1hbGl6ZWl0PVQpCm5ld19kYXRhJHJ1bGVmb2xsb3cgPC0gZ2V0cGMobmV3X2RhdGEgJT4lIHNlbGVjdChwZXJzb25hbGl0eV9iZW5kaW5nX3J1bGVzLCBwZXJzb25hbGl0eV9zdXBwb3J0X2Zvcl9ydWxlc190cmFkaXRpb25zLCBwZXJzb25hbGl0eV9icmVha2luZ19zY2hvb2xfcnVsZXMsIHBlcnNvbmFsaXR5X2ZvbGxvd2luZ19ydWxlcyksIGRvZmE9RiwgZmlsbG1pc3Npbmc9Riwgbm9ybWFsaXplaXQ9VCkKbmV3X2RhdGEkcmVsaWFiaWxpdHkgPC0gZ2V0cGMobmV3X2RhdGEgJT4lIHNlbGVjdCh1bmRlcGVuZGFibGUsIHRob3JvdWdoLCBjb25zY2llbnRpb3VzLCBwZXJzb25hbGl0eV9kZXBlbmRhYmxlX2Rpc2NpcGxpbmVkKSwgZG9mYT1GLCBmaWxsbWlzc2luZz1GLCBub3JtYWxpemVpdD1UKQpuZXdfZGF0YSRxdWFsaXR5IDwtIGdldHBjKG5ld19kYXRhICU+JSBzZWxlY3QocGVyc29uYWxpdHlfZWZmb3J0X2F0X3dvcmssIHBlcnNvbmFsaXR5X3dvcmtfc3RhbmRhcmRzKSwgZG9mYT1GLCBmaWxsbWlzc2luZz1GLCBub3JtYWxpemVpdD1UKQpuZXdfZGF0YSRoYXJkd29yayA8LSAtZ2V0cGMobmV3X2RhdGEgJT4lIHNlbGVjdChncml0X2hhcmRfd29ya2VyXzIwMTMsIHBlcnNvbmFsaXR5X2hhcmRfd29ya2VyLCBwZXJzb25hbGl0eV9hbW91bnRfb2Zfd29yayksIGRvZmE9RiwgZmlsbG1pc3Npbmc9Riwgbm9ybWFsaXplaXQ9VCkKbmV3X2RhdGEkZ3JpdCA8LSAtZ2V0cGMobmV3X2RhdGEgJT4lIHNlbGVjdChncml0X2FiaWxpdHlfdG9fZmluaXNoX3Byb2plY3RzXzIwMTMsIGdyaXRfZGlsaWdlbmNlXzIwMTMsIGdyaXRfc2V0YmFja3Nfbm90X2Rpc2NvdXJhZ2VfMjAxMyksIGRvZmE9RiwgZmlsbG1pc3Npbmc9Riwgbm9ybWFsaXplaXQ9VCkKCm5ld19kYXRhJGFncmVlYWJsZW5lc3MgPC0gZ2V0cGMobmV3X2RhdGEgJT4lIHNlbGVjdChwZXJzb25hbGl0eV9zeW1wYXRoZXRpY193YXJtLCBwZXJzb25hbGl0eV9jcml0aWNhbF9xdWFycmVsc29tZSwgdHJ1c3RmdWwsIGRpZmZpY3VsdCwgYWdyZWVhYmxlKSwgZG9mYT1GLCBmaWxsbWlzc2luZz1GLCBub3JtYWxpemVpdD1UKQpuZXdfZGF0YSRvcHRpbWlzbSA8LSAtZ2V0cGMobmV3X2RhdGEgJT4lIHNlbGVjdChleHBlY3RzX2Jlc3RfdW5jZXJ0YWluX3RpbWVzLCByYXJlbHlfZXhwZWN0c19nb29kX3RoaW5ncywgb3B0aW1pc3RpY19hYm91dF9mdXR1cmUsIGhhcmRseV9leHBlY3RzX3RoaW5nc190b19nb193ZWxsLCB1bmNlcnRhaW5fdGltZXNfZXhwZWN0X2Jlc3QsIHJhcmVseV9nb29kX3RoaW5nc19oYXBwZW4sIG9wdGltaXN0aWNfYWJvdXRfZnV0dXJlX3ByLCBoYXJkbHlfZXhwZWN0c190aGluZ3NfdG9fZ29fd2VsbCwgdW5jZXJ0YWluX3RpbWVzX2V4cGVjdF9iZXN0LCByYXJlbHlfZ29vZF90aGluZ3NfaGFwcGVuLCBvcHRpbWlzdGljX2Fib3V0X2Z1dHVyZV9wciwgaGFyZGx5X2V4cGVjdF90aGluZ3NfZ29fd2VsbF9wciksIGRvZmE9RiwgZmlsbG1pc3Npbmc9Riwgbm9ybWFsaXplaXQ9VCkKCm5ld19kYXRhJGJveWJhZHlvdXRoIDwtIG5ld19kYXRhJFIxNDg3NDAwCm5ld19kYXRhJGJveWJhZHBhcmVudCA8LSBuZXdfZGF0YSRSMTQ4NzYwMApuZXdfZGF0YSRnaXJsYmFkeW91dGggPC0gbmV3X2RhdGEkUjE0ODczMDAKbmV3X2RhdGEkZ2lybGJhZHBhcmVudCA8LSBuZXdfZGF0YSRSMTQ4NzUwMApuZXdfZGF0YSRiYWRfeW91dGhyZXBvcnQgPC0gbmV3X2RhdGEkZ2lybGJhZHlvdXRoCm5ld19kYXRhJGJhZF95b3V0aHJlcG9ydFtpcy5uYShuZXdfZGF0YSRiYWRfeW91dGhyZXBvcnQpXSA8LSBuZXdfZGF0YSRib3liYWR5b3V0aFtpcy5uYShuZXdfZGF0YSRiYWRfeW91dGhyZXBvcnQpXQpuZXdfZGF0YSRiYWRfcGFyZW50cmVwb3J0IDwtIG5ld19kYXRhJGdpcmxiYWRwYXJlbnQKbmV3X2RhdGEkYmFkX3BhcmVudHJlcG9ydFtpcy5uYShuZXdfZGF0YSRiYWRfcGFyZW50cmVwb3J0KV0gPC0gbmV3X2RhdGEkYm95YmFkcGFyZW50W2lzLm5hKG5ld19kYXRhJGJhZF9wYXJlbnRyZXBvcnQpXQpgYGAKCkNvcnJlbGF0aW9uIG1hdHJpeCAoZGF0YSBxdWFsaXR5IGNoZWNrKS4KYGBge3J9CmNvcnJlbGF0aW9uX21hdHJpeChuZXdfZGF0YSAlPiUgc2VsZWN0KGZpeGVkZm9jdXMsIHJ1bGVmb2xsb3csIHJlbGlhYmlsaXR5LCBxdWFsaXR5LCBoYXJkd29yaywgZ3JpdCkpCmBgYAoKIyMjIFJlc3VsdHMKCkluY29tZSBhcyBEVjoKYGBge3J9CmxyIDwtIGxtKGRhdGE9bmV3X2RhdGEsIGxvZ3dlaWdodGVkaW5jb21lIH4gZml4ZWRmb2N1cyArIHJ1bGVmb2xsb3cgKyByZWxpYWJpbGl0eSArIHF1YWxpdHkgKyBoYXJkd29yayArIGdyaXQpCnN1bW1hcnkobHIpCgpgYGAKCk5ldCB3b3J0aCBhcyBEVjoKYGBge3J9CmxyIDwtIGxtKGRhdGE9bmV3X2RhdGEsIGxvZ3dlaWdodGVkbncgfiBmaXhlZGZvY3VzICsgcnVsZWZvbGxvdyArIHJlbGlhYmlsaXR5ICsgcXVhbGl0eSArIGhhcmR3b3JrICsgZ3JpdCkKc3VtbWFyeShscikKYGBgCgpTb21lIG9ic2VydmF0aW9uczoKLSBUZW5kZW5jeSB0byB3b3JrIGhhcmQgYW5kIGdyaXQgcHJlZGljdCBib3RoIGluY29tZSBhbmQgbmV0IHdvcnRoCi0gV2FudGluZyB0byBmb2xsb3cgcnVsZXMgbmVnYXRpdmVseSBwcmVkaWN0cyBpbmNvbWUsIGFuZCBwcm9iYWJseSBuZXQgd29ydGggdG9vLiBUaGUKcC12YWx1ZSBpcyBpZmZ5LCBidXQgdGhlIHByaW9ycyBhcmUgc3Ryb25nIGdpdmVuIHRoYXQgaXQgbmVnYXRpdmVseSBwcmVkaWN0cyBpbmNvbWUsIGFuZAppbmNvbWUgY29ycmVsYXRlcyBwb3NpdGl2ZWx5IHdpdGggbmV0IHdvcnRoLgotIFJlbGlhYmlsaXR5IHByZWRpY3RzIG5ldCB3b3J0aCBtb3JlIHRoYW4gaW5jb21lCi0gSGF2aW5nIGEgZml4ZWQgZm9jdXMgYW5kIGhpZ2ggc3RhbmRhcmRzIGFyZSBub3QgdGhhdCBpbXBvcnRhbnQKClRyeWluZyBiYXllc2lhbiBtb2RlbCBhdmVyYWdpbmcgdG8gdGVzdCBmb3Igd2hldGhlciBjZXJ0YWluIGNvbmZvdW5kZXJzIChlLmcuIHJhY2UsCnNleCwgYWdyZWVhYmxlbmVzcywgb3B0aW1pc20sIHBhcmVudCByZXBvcnQgb2YgYmFkIGJlaGF2aW9yLCB5b3V0aCByZXBvcnQgb2YgYmFkIGJlaGF2aW9yKQpgYGB7cn0KaW5kIDwtIHN1YnNldChuZXdfZGF0YSwgc2VsZWN0PWMoJ2ZpeGVkZm9jdXMnLCAncnVsZWZvbGxvdycsICdyZWxpYWJpbGl0eScsICdxdWFsaXR5JywgJ2dyaXQnLCAnaGFyZHdvcmsnLCAnbG9nd2VpZ2h0ZWRpbmNvbWUnLCAnYWdyZWVhYmxlbmVzcycsICdvcHRpbWlzbScsICdiYWRfcGFyZW50cmVwb3J0JywgJ2JhZF95b3V0aHJlcG9ydCcsICdyYWNlJywgJ0ZlbWFsZScsICdJUScpKQppbmQgPC0gbmEub21pdChpbmQpCm5yb3coaW5kKQoKbmFtZXMgPC0gYygnZml4ZWRmb2N1cycsICdydWxlZm9sbG93JywgJ3JlbGlhYmlsaXR5JywgJ3F1YWxpdHknLCAnaGFyZHdvcmsnLCAnZ3JpdCcsICdsb2d3ZWlnaHRlZGluY29tZScsICdhZ3JlZWFibGVuZXNzJywgJ29wdGltaXNtJywgJ2JhZF9wYXJlbnRyZXBvcnQnLCAnYmFkX3lvdXRocmVwb3J0JywgJ0lRJykKZm9yKG5hbWUgaW4gbmFtZXMpIHsKICBpbmRbW25hbWVdXSA9IG5vcm1hbGlzZShpbmRbW25hbWVdXSkKfQoKYm1hbG9sIDwtIGJpY3JlZyh4ID0gaW5kICU+JSBzZWxlY3QoLWxvZ3dlaWdodGVkaW5jb21lKSwgeSA9IGluZCRsb2d3ZWlnaHRlZGluY29tZSwgbWF4Q29sPTUwLCBuYmVzdD0xMDAwLCBzdHJpY3Q9VFJVRSkKc3VtbWFyeShibWFsb2wpCmBgYAoKTGFyZ2VseSB0aGUgc2FtZSByZXN1bHRzLCB0aG91Z2ggd2FudGluZyB0byBmb2xsb3cgcnVsZXMgaXMgbm8gbG9uZ2VyIHByZWRpY3RpdmUuIAooTm90ZTogUElQIDwgOTAlIHJlc3VsdHMgc2hvdWxkIG5vdCBiZSB0cnVzdGVkKS4KCkxvb2tpbmcgdGhyb3VnaCB0aGUgcmVncmVzc2lvbiBvcHRpb25zLCBpdCBzZWVtcyB0aGF0IGNvbnRyb2xsaW5nIGZvciBzZXggZGVudHMKdGhlIHJ1bGUgZm9sbG93aW5nIHRoZSBtb3N0LiBUaGVuLCBjb250cm9sbGluZyBmb3IgSVEgZWxpbWluYXRlcyBpdC4KYGBge3J9CmxyIDwtIGxtKGRhdGE9bmV3X2RhdGEsIGxvZ3dlaWdodGVkaW5jb21lIH4gZml4ZWRmb2N1cyArIHJ1bGVmb2xsb3cgKyByZWxpYWJpbGl0eSArIHF1YWxpdHkgKyBoYXJkd29yayArIGdyaXQgKyBGZW1hbGUpCnN1bW1hcnkobHIpCgpsciA8LSBsbShkYXRhPW5ld19kYXRhLCBsb2d3ZWlnaHRlZGluY29tZSB+IGZpeGVkZm9jdXMgKyBydWxlZm9sbG93ICsgcmVsaWFiaWxpdHkgKyBxdWFsaXR5ICsgaGFyZHdvcmsgKyBncml0ICsgRmVtYWxlICsgSVEpCnN1bW1hcnkobHIpCmBgYAoKQXJ0ZWZhY3QgYXJpc2VzIG91dCBvZiB0aGVzZSB0d28gY29ycmVsYXRpb25zOgoKYGBge3J9CmNvci50ZXN0KG5ld19kYXRhJElRLCBuZXdfZGF0YSRydWxlZm9sbG93KQpjb3IudGVzdChuZXdfZGF0YSRydWxlZm9sbG93LCBuZXdfZGF0YSRGZW1hbGUpCmBgYAoKSSBhbHNvIHRlc3RlZCB3aGF0IGNvdWxkIGJlIGNhbGxlZCB0aGUgIkplbnNlbiBoeXBvdGhlc2lzIiwgd2hpY2ggaXMgdGhhdCB0aGUgCnN1YmZhY3RvcnMgdGhhdCBiZXN0IG1lYXN1cmUgY29uc2NpZW50aW91c25lc3MKYXJlIGFsc28gdGhlIG9uZXMgdGhhdCBhcmUgdGhlIG1vc3QgcHJlZGljdGl2ZS4gU2l4IGZhY3RvcnMgaXMgbm90IGVub3VnaCBwb3dlcgp0byB0ZXN0IGl0LCBzbyBJIHRlc3RlZCB0aGUgdGhlb3J5IGF0IHRoZSBpdGVtIGxldmVsLgoKYGBge3J9CnN0ZXN0bGlzdCA8LSBjKCdncml0X21haW50YWluaW5nX2ZvY3VzXzIwMTMnLCAnZ3JpdF9jaGFuZ2VfZ29hbHNfZnJlcXVlbnRseV8yMDEzJywgJ2dyaXRfc2hvcnRfdGVybV9vYnNlc3Npb25zXzIwMTMnLCAnZ3JpdF9uZXdfaWRlYXNfZGlzdHJhY3RfMjAxMycsICdncml0X3NldGJhY2tzX25vdF9kaXNjb3VyYWdlXzIwMTMnLCAnZ3JpdF9kaWxpZ2VuY2VfMjAxMycsICdncml0X2FiaWxpdHlfdG9fZmluaXNoX3Byb2plY3RzXzIwMTMnLCAnZ3JpdF9oYXJkX3dvcmtlcl8yMDEzJywgJ3BlcnNvbmFsaXR5X2VmZm9ydF9hdF93b3JrJywgJ3BlcnNvbmFsaXR5X3dvcmtfc3RhbmRhcmRzJywgJ3BlcnNvbmFsaXR5X2Ftb3VudF9vZl93b3JrJywgJ3BlcnNvbmFsaXR5X2hhcmRfd29ya2VyJywgJ3BlcnNvbmFsaXR5X2RlcGVuZGFibGVfZGlzY2lwbGluZWQnLCAndW5kZXBlbmRhYmxlJywgJ3Rob3JvdWdoJywgJ2NvbnNjaWVudGlvdXMnLCAncGVyc29uYWxpdHlfYmVuZGluZ19ydWxlcycsICdwZXJzb25hbGl0eV9zdXBwb3J0X2Zvcl9ydWxlc190cmFkaXRpb25zJywgJ3BlcnNvbmFsaXR5X2JyZWFraW5nX3NjaG9vbF9ydWxlcycsICdwZXJzb25hbGl0eV9mb2xsb3dpbmdfcnVsZXMnKQpkZWJpIDwtIGplbnNlbl92ZWN0b3JzKG5ld19kYXRhLCBzdGxpc3Q9c3Rlc3RsaXN0LCBvdmVjdG9yPSdsb2d3ZWlnaHRlZGluY29tZScpCgpjb3IudGVzdChkZWJpJHIsIGRlYmkkbCkKYGBgCgpMb29rcyBnb29kLiBCdXQgdGhlcmUgaXMgYSBwcm9ibGVtOgoKYGBge3J9CmZpdDIgPC0gbG0oZGF0YT1kZWJpLCByIH4gbCkKCnV6aTMgPC0gc2VxKGZyb209LTAuNiwgdG89MC42LCBieT0wLjAxKQp1emk0IDwtIGRhdGEuZnJhbWUobD11emkzKQp1emk0JGZpdCA9IHByZWRpY3QoZml0MiwgdXppNCwgaW50ZXJ2YWwgPSAiY29uZmlkZW5jZSIpCgpwIDwtIGdncGxvdCh1emk0KSArCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHg9bCwgeT1yKSwgZGF0YT1kZWJpKSArCiAgZ2VvbV9saW5lKGRhdGEgPSB1emk0LCBhZXMoeCA9IGwsIHkgPSBmaXRbLCAxXSksIGNvbG9yID0gImdyZWVuIiwgc2l6ZSA9IDEpICsKICBnZW9tX3JpYmJvbihkYXRhID0gdXppNCwgYWVzKHggPSBsLCB5bWluID0gZml0WywgMl0sIHltYXggPSBmaXRbLCAzXSksIGFscGhhID0gMC40NSkgKyAKICBnZW9tX3RleHQoZGF0YSA9IGRlYmksIGFlcyh4ID0gbCwgeSA9IHIsIGxhYmVsID0gdiksIHZqdXN0ID0gLS40NCwgc2l6ZSA9IDQpICsgCiAgbGFicyh0aXRsZSA9ICIiKSArCiAgeGxhYignY29uc2MtbG9hZGluZycpICsKICB5bGFiKCdDb3JyZWxhdGlvbiB3aXRoIEluY29tZScpICsKICB0aGVtZV9idygpICsKICB0aGVtZSgKICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIpCiAgKQoKcApgYGAKU29tZSBpdGVtcyBoYXZlIG5lZ2F0aXZlIGFuZCBwb3NpdGl2ZSBsb2FkaW5ncywgc28gdGhlIGNvcnJlbGF0aW9uIGNvdWxkIGVhc2lseQpiZSBhbiBhcnRlZmFjdCBvZiB0aGlzLiBUYWtpbmcgdGhlIGFic29sdXRlIHZhbHVlcyBvZiBib3RoOgpgYGB7cn0KY29yLnRlc3QoYWJzKGRlYmkkciksIGFicyhkZWJpJGwpKQpgYGAKCkxpdHRsZSBjb3JyZWxhdGlvbiwgaWYgYW55LgoKIyMjIENvbmNsdXNpb24KCkhhcmQgd29yaywgcmVsaWFiaWxpdHksIGFuZCByZWxpYWJpbGl0eSBzZWVtIGFyZSB0aGUgdGhyZWUgY29uc2NpZW50aW91c25lc3MgZmFjZXRzCm1vc3Qgcm9idXN0bHkgbGlua2VkIHRvIGluY29tZSBhbmQgbmV0IHdvcnRoLiBCZWluZyB3aWxsaW5nIHRvIGZvbGxvdyBydWxlcywKaGF2aW5nIGhpZ2ggc3RhbmRhcmRzICh0aG91Z2ggb25seSAyIGl0ZW1zIHdlcmUgdXNlZCB0byBjYWxjdWFsdGUgdGhpcyBmYWNldCksCmFuZCBoYXZpbmcgYSBtb3JlIGZpeGVkIGZvY3VzL2xvbmdlciBhdHRlbnRpb24gc3BhbiBkb24ndCBwcmVkaWN0IG11Y2ggaW5kZXBlbmRlbnQKb2YgdGhlIG90aGVyIGZhY2V0cy4gVGhlIG1ldGhvZCBvZiBjb3JyZWxhdGVkIHZlY3RvcnMgc3VnZ2VzdHMgdGhhdCB0aGUgY29ycmVsYXRpb24KaXMgbm90IHByaW1hcmlseSBvbiB0aGUgZ2VuZXJhbCBmYWN0b3IsIGlmIGF0IGFsbC4KCg==