diff --git a/.DS_Store b/.DS_Store index 63d1620..f1a82d4 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 651ba6e..ef5beb7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea/* /.idea/* /.idea/trust_in_science.iml +node_modules/ diff --git a/README.md b/README.md index 2d54a0d..22eaea7 100644 --- a/README.md +++ b/README.md @@ -1 +1,116 @@ -# trust_in_science \ No newline at end of file +# VisTrust: a Multidimensional Framework and Empirical Study of Trust in Data Visualizations + +## Data Dictionary + +Data for the full study can be found in the [data_clean.csv](./study_data/full_Study/data_clean.csv) file. + +| Label of data column in [data_clean.csv](./study_data/full_Study/data_clean.csv) | Explanation of the contents of the data column | +| ---------------------------------------- | ---------------------------------------------- | +| Consent Form | Whether the participant agreed to the consent form (1 indicates a response of "I agree") | +| consent-time_Page Submit | The amount of time the participant took to agree or disagree to the consent form (in seconds) | +| covid-vaccine | Whether the participant has received a Covid-19 vaccine (1 indicates a response of "Yes") | +| covid-vaccine-doses | The number of vaccines the participant has received (if they answered "Yes" to the covid-vaccines question) | +| covid-infection | Whether the participant has been verifiably infected with Covid-19 (1 indicates a response of "Yes") | +| covid-time_Page Submit | The amount of time the participant took to answer the covid vaccine/infection questions (in seconds) | +| intro-vis-time_Page Submit | The amount of time the participant viewed the visualization during the intro (in seconds) | +| affect-science_1 | The participant's rating of the visualization as Scientific (on a scale from 0-Unscientific to 100-Scientific) | +| affect-clarity_1 | The participant's rating of the visualization as Clear (on a scale from 0-Confusing to 100-Clear) | +| affect-aesthetic_1 | The participant's rating of the visualization as Pretty (on a scale from 0-Ugly to 100-Pretty) | +| initial-time_Page Submit | The amount of time the participant took to answer the affect questions (in seconds) | +| tour-time_Page Submit | The amount of time the participant took to complete the guided tour of the visualization (in seconds) | +| simple-vlat-1 | The participant's answer to the first visual literacy question regarding the simple visualization | +| simple-vlat-2 | The participant's answer to the second visual literacy question regarding the simple visualization | +| simple-vlat-time_Page Submit | The amount of time the participant took to answer the visual literacy questions regarding the simple visualization | +| moderate-vlat-1 | The participant's answer to the first visual literacy question regarding the moderate visualization | +| moderate-vlat-2 | The participant's answer to the second visual literacy question regarding the moderate visualization | +| moderate-vlat-time_Page Submit | The amount of time the participant took to answer the visual literacy questions regarding the moderate visualization | +| complex-vlat-1 | The participant's answer to the visual literacy question regarding the complex visualization | +| complex-vlat-time_Page Submit | The amount of time the participant took to answer the visual literacy questions regarding the complex visualization | +| explore-time_Page Submit | The amount of time the participant took to explore the visualization during the designated explore section of the study | +| data-trust_1 | Participant's level of agreement with the statement "The data is accurate" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| data-trust_2 | Participant's level of agreement with the statement "The data is complete and does not leave out important information" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| data-trust_3 | Participant's level of agreement with the statement "The data is unbiased and trustworthy" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| data-trust_4 | Participant's level of agreement with the statement "I understand the meaning of this data well" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| data-trust_5 | Participant's level of agreement with the statement "The data source was clearly displayed" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| data-trust_6 | Participant's level of agreement with the statement "I trust this data" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| data-trust-exp | Additional comments the participant may have after completing the data trust section | +| data-trust-time_Page Submit | The amount of time the participant took to complete the data trust section | +| vis-trust_1 | Participant's level of agreement with the statement "The visualization transparently includes all important elements of the data" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| vis-trust_2 | Participant's level of agreement with the statement "I find it easy to understand this visualization" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| vis-trust_3 | Participant's level of agreement with the statement "I like this visualization" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| vis-trust_4 | Participant's level of agreement with the statement "I would likely share this visualization with my family, friends or on social media" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| vis-trust_5 | Participant's level of agreement with the statement "I would likely use this visualization and its information in my daily life" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| vis-trust_6 | Participant's level of agreement with the statement "I trust this visualization" (on a scale from 1-Strongly Disagree to 7-Strongly Agree) | +| vis-trust-exp | Additional comments the participant may have after completing the visualization trust section | +| vis-trust-time_Page Submit | The amount of time the participant took to complete the visualization trust section | +| interpersonal-trust_1 | Participant's answer to the statement "Generally speaking, would you say that most people can be trusted or that you can't be too careful in dealing with people?" (on a scale from 1-"Most people cannot be trusted" to 7-"Most people can be trusted") | +| interper-trust-exp | Additional comments the participant may have after completing the interpersonal trust question | +| interper-trust-time_Page Submit | The amount of time the participant took to complete the interpersonal trust section | +| attention-check_1 | The answer ranked in position 1 by the participant when answering the attention check question (Correct answer is 5) | +| attention-check_2 | The answer ranked in position 2 by the participant when answering the attention check question (Not relevant) | +| attention-check_3 | The answer ranked in position 3 by the participant when answering the attention check question (Not relevant) | +| attention-check_4 | The answer ranked in position 4 by the participant when answering the attention check question (Not relevant) | +| attention-check_5 | The answer ranked in position 5 by the participant when answering the attention check question (Not relevant) | +| attention-check_6 | The answer ranked in position 6 by the participant when answering the attention check question (Not relevant) | +| attention-check_7 | The answer ranked in position 7 by the participant when answering the attention check question (Not relevant) | +| attention-check-time_Page Submit | The amount of time the participant took to complete the attention check question | +| trust-in-science_1 | Participant's level of trust in political parties (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-in-science_2 | Participant's level of trust in the government (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-in-science_3 | Participant's level of trust in the police (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-in-science_4 | Participant's level of trust in the legal system (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-in-science_5 | Participant's level of trust in the news media (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-in-science_6 | Participant's level of trust in business and industry (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-in-science_7 | Participant's level of trust in scientists/science (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-in-science_8 | Participant's level of trust in doctors (on a scale from 0-"Do not trust at all" to 10-"Trust it completely") | +| trust-science-exp | Additional comments the participant may have after completing the trust in science section | +| trust-science-time_Page Submit | The amount of time the participant took to complete the trust in science section | +| cognition_1 | Participant's response to the statement "I would prefer complex to simple problems" (on a scale from 1-"extremely uncharacteristic of me" to 5-"extremely characteristic of me") | +| cognition_2 | Participant's response to the statement "I like to have the responsibility of handling a situation that requires a lot of thinking" (on a scale from 1-"extremely uncharacteristic of me" to 5-"extremely characteristic of me") | +| cognition_3 | Participant's response to the statement "Thinking is not my idea of fun" (on a scale from 1-"extremely uncharacteristic of me" to 5-"extremely characteristic of me") | +| cognition_4 | Participant's response to the statement "I would rather do something that requires little thought than something that is sure to challenge my thinking abilities" (on a scale from 1-"extremely uncharacteristic of me" to 5-"extremely characteristic of me") | +| cognition_5 | Participant's response to the statement "I really enjoy a task that involves coming up with new solutions to problems" (on a scale from 1-"extremely uncharacteristic of me" to 5-"extremely characteristic of me") | +| cognition_6 | Participant's response to the statement "I would prefer a task that is intellectual, difficult, and important to one that is somewhat important but does not require much thought" (on a scale from 1-"extremely uncharacteristic of me" to 5-"extremely characteristic of me") | +| need-cognition-time_Page Submit | The amount of time the participant took to complete the need for cognition section | +| political_views | Participant's identification of political beliefs (on a scale from 1-"extremely liberal" to 7-"extremely conservative", 8-"Do not know/Refused") | +| covid_information | How much the participant actively sought out information regarding Covid-19 (on a scale from 1-"Once a day" to 5-"Never") | +| politics_time_Page Submit | The amount of time the pariticipant took to complete the politics section | +| Gender | The gender of the participant (1-"Man", 2-"Woman", 3-"Non-binary/third gender", 4-"Other", 5-"Prefer not to disclose") | +| Age | The year the participant was born (in the format YYYY) | +| State_1 | The U.S. State the participant currently lives in | +| Education | The highest level of school / highest degree completed by the participant (1-"Maximum 12 grade no diploma", 2-"High school graduate", 3-"Some college but no degree", 4-"Associate degree in college - Occupational/vocational program", 5-"Associate degree in college - Academic Program", 6-"Bachelor's degree (For example: BA, AB, BS)", 7-"Master's degree (For example: MA, MS, MEng, MEd, MSW, MBA)", 8-"Professional school degree (For example: MD, DDS, DVM, LLB, JD)", 9-"Doctorate degree (For example: PhD, EdD)", 10-"Other") | +| Parents_education | Whether the pariticipant's parents have completed a bachelor's degree (1-"One", 2-"Both", 3-"None") | +| Language | The language spoken at the participant's home (1-"English", 2-"Spanish", 3-"Chinese", 4-"Other") | +| Language_4_TEXT | The language spoken at the participant's home if they answered "Other" to the previous question | +| Ethnicity | The participant's ethnicity (1-"American Indian or Alaska Native (For example, Navajo Nation, Blackfeet Tribe, Mayan, Aztec, Nome Eskimo Community, etc)", 2-"Asian (For example, Chinese, Filipino, Asian Indian, Vietnamese, Korean, Japanese, etc)", 3-"Black or African-American (For example, African American, Jamaican, Haitian, Nigerian, Ethiopian, Somalian, etc)", 4-"Hispanic, Latino/a, or Chicano/a (For example, Mexican or Mexican American, Puerto Rican, Cuban, Salvadoran, Colombian, etc)", 5-"Middle Eastern or North African (For example, Lebanese, Iranian, Egyptian, Syrian, Moroccan, Algerian, etc)", 6-"Native Hawaiian or Pacific Islander (For example, Native Hawaiian, Samoan, Chamorro, Tongan, Fijian, Marshallese, etc)", 7-"White (For example, German, Irish, English, Italian, Polish, French, etc)", 8-"Other race, ethnicity, or origin (please specify)", 9-"Mixed race, ethnicity (please specify)", 10-"Prefer not to disclose") | +| Ethnicity_8_TEXT | The participant's ethnicity if they answered "Other race, ethnicity, or origin" to the Ethnicity question | +| Ethnicity_9_TEXT | The participant's ethnicity if they answered "Mixed race, ethnicity" to the Ethnicity question | +| Income | The total family income of the participant's household (1-"None or less than $4,999", 2-"$5,000–$9,999", 3-"$10,000–$19,999", 4-"$20,000–29,999", 5-"$30,000–39,999", 6-"40,000–49,999", 7-"$50,000–59,999", 8-"90,000–99,999", 9-"$100,000–109,999", 10-"$110,000–119,999", 11-"$120,000–129,999", 12-"$130,000–139,999", 13-"$140,000–149,999", 14-"$150,000 and over", 15-"Do not know", 16-"Prefer not to disclose") | +| Religion | How religious the participant is (on a scale from 1-"Very religious" to 7-"Not religious at all", 8-"Prefer not to disclose") | +| demographics_time_Page Submit | The amount of time it took the participant's the complete the demographics section | +| provenance-data | An array of the participant's interactions with the visualization during the data trust section | +| provenance-vis | An array of the participant's interactions with the visualization during the vis trust section | +| provenance-tour | An array of the participant's interactions with the visualization during the guided tour section | +| provenance-explore | An array of the participant's interactions with the visualization during the explore section | +| isCovidData | Whether the participant was shown a visualization of Covid-19 data (1 indicates "Yes") | +| complexity | The visual complexity of the visualization shown to the participant (e.g., simple, moderate, complex) | +| chartType | The chart type of the visualization shown to the participant (e.g., bar, line) | +| need_for_cognition | Aggregate score for the participant based on their responses to the need for cognition section | +| brushed | Whether the participant used the brush filter (only applies for complex visualizations) | +| explore_interactions | Aggregated list of explore interactions for the participant | +| hover_interactions | Aggregated list of hover interactions for the participant | +| total_hover_time | The total amount of time the participant hovered over a visualization element | +| avg_hover_time | The average amount of time the participant hovered over a visualization element | +| explore_time | The total amount of time the participant spent exploring the visualization | +| explore_active_time | The amount of time the participant spent actively exploring the visualization | +| vlat_simple | Participant's overall score on the visual literacy test for the simple visualization | +| vlat_moderate | Participant's overall score on the visual literacy test for the moderate visualization | +| vlat_complex | Participant's overall score on the visual literacy test for the complex visualization | +| assigned_vlat | The visualization that was shown to the participant | +| ordinal_complexity | The visual complexity of the visualization shown to the participant (1-"simple", 2-"moderate", 3-"complex") | + +## Supplementary Materials + +Supplementary Materials for the VisTrust submission to IEEE VIS 2023 can be found in the *supplementary_materials* directory and include the following: + +- PDF of tables containing the full study results +- PDF of the full study presented to participants (exported from Qualtrics) \ No newline at end of file diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000..d313296 Binary files /dev/null and b/README.pdf differ diff --git a/data_testing.py b/data_testing.py deleted file mode 100644 index b3d286c..0000000 --- a/data_testing.py +++ /dev/null @@ -1,21 +0,0 @@ -import pandas as pd, os - -filenames = [ - 'full_Study/data_clean.csv', - 'pilot4/data.csv', - 'pilot3/pilot3.csv', - 'pilot2/Complexity vs. Trust in Vis_March 6, 2023_07.54.csv', - 'pilot1/Complexity vs. Trust in Vis_March 5, 2023_09.12.csv' -] - -dfs = [] - -full_df = pd.read_csv(os.path.join('study_data',filenames[0])) - -full_cols = set(full_df.columns.tolist()) - -for filename in filenames[1:]: - df = pd.read_csv(os.path.join('study_data',filename)) - df_cols = set(df.columns.tolist()) - print(len(df_cols), len(full_cols), len(df_cols.difference(full_cols))) - dfs.append(df) \ No newline at end of file diff --git a/study_data/.DS_Store b/study_data/.DS_Store index 6cf21fd..0617ec5 100644 Binary files a/study_data/.DS_Store and b/study_data/.DS_Store differ diff --git a/study_data/full_Study/.DS_Store b/study_data/full_Study/.DS_Store index c9fa694..20cd533 100644 Binary files a/study_data/full_Study/.DS_Store and b/study_data/full_Study/.DS_Store differ diff --git a/study_data/full_Study/affectMeasures.png b/study_data/full_Study/affectMeasures.png index fabc57b..03f1228 100644 Binary files a/study_data/full_Study/affectMeasures.png and b/study_data/full_Study/affectMeasures.png differ diff --git a/study_data/full_Study/complexity_dataType_interaction.pdf b/study_data/full_Study/complexity_dataType_interaction.pdf index 4febe40..22da269 100644 Binary files a/study_data/full_Study/complexity_dataType_interaction.pdf and b/study_data/full_Study/complexity_dataType_interaction.pdf differ diff --git a/study_data/full_Study/complexity_interaction.pdf b/study_data/full_Study/complexity_interaction.pdf index 701650e..dbdbead 100644 Binary files a/study_data/full_Study/complexity_interaction.pdf and b/study_data/full_Study/complexity_interaction.pdf differ diff --git a/study_data/full_Study/f7.pdf b/study_data/full_Study/f7.pdf index d905ef2..45ce917 100644 Binary files a/study_data/full_Study/f7.pdf and b/study_data/full_Study/f7.pdf differ diff --git a/study_data/full_Study/provenanceResults.png b/study_data/full_Study/provenanceResults.png index 3aaf42d..b47a346 100644 Binary files a/study_data/full_Study/provenanceResults.png and b/study_data/full_Study/provenanceResults.png differ diff --git a/study_data/full_Study/trustFullAnalysis_6.12.2023.Rmd b/study_data/full_Study/trustFullAnalysis_6.12.2023.Rmd index 171aab9..5b4eb4a 100644 --- a/study_data/full_Study/trustFullAnalysis_6.12.2023.Rmd +++ b/study_data/full_Study/trustFullAnalysis_6.12.2023.Rmd @@ -69,7 +69,7 @@ results %>% group_by(complexity, isCovidData) %>% summarize(n = n(), mean = mean(vis.trust_6), - se = sd(data.trust_6)/sqrt(n)), + se = sd(vis.trust_6)/sqrt(n)), aes(x = mean, xend = mean, y = -.25, yend = .25, colour = as.factor(isCovidData)), size = 1) + # stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 0.5, position = position_nudge(x=0.25, y=0), alpha=0.5) + @@ -118,18 +118,27 @@ results %>% geom_jitter(data = results, width = 0.25, height = 0.2, color = "light gray", alpha = 0.5) + geom_boxplot(lwd = 1, fatten = NULL, width = 0.25, alpha = 0.5, color = "salmon") + # labs(title = "Trust in data") + - geom_vline(data = results %>% + + + geom_segment(data = results %>% group_by(complexity) %>% summarize(n = n(), - data.trust_6 = mean(data.trust_6)), - aes(xintercept = data.trust_6), size = 1,colour = "salmon") + + mean = mean(data.trust_6), + se = sd(data.trust_6)/sqrt(n)), + aes(x = mean, xend = mean, y = -.25, yend = .25, colour ="salmon"), size = 1) + + + geom_text( data = results %>% group_by(complexity) %>% summarize(n = n(), mean = round(mean(data.trust_6),digits=2), se = round(sd(data.trust_6)/sqrt(n),digits=2), - vis.trust_6 = mean(vis.trust_6)), - aes(label = paste(mean, "[",mean-se,",",mean+se,"]"), x = 6.8, y = 0.43, fontface = 3), size=3, colour = "black")+ + dadta.trust_6 = mean(data.trust_6)), + # aes(label = paste(mean, "[",mean-se,",",mean+se,"]"), x = 6.2, y = 0.43, fontface = 3), size=3, colour = "black")+ + aes(label = paste(mean), x = mean, y = .35, fontface = 3), size=4, colour = "black")+ + + + facet_grid(rows = vars(complexity)) + xlab("Trust in Data") + theme_minimal() + @@ -146,21 +155,56 @@ ggsave(paste("complexity_interaction.pdf", sep="")) ```{r} results %>% + filter(isCovidData ==0 ) %>% group_by(complexity) %>% summarize(n = n(), - mean = mean(data.trust_6), - se = sd(data.trust_6)/sqrt(n), + mean = mean(vis.trust_6), + se = sd(vis.trust_6)/sqrt(n), n = n) ``` +```{r} +model <- lm(formula = vis.trust_6 ~ complexity * chartType + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 , + data = results%>%filter(isCovidData == 1) + filter(isCovidData ==1 )) +anova(model) +``` +```{r} +model <- lm(formula = vis.trust_6 ~ complexity * as.factor(isCovidData) + chartType + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 , + data = results%>% filter(complexity !='moderatex')) +anova(model) + + +``` + + +```{r} +model <- lm(formula = vis.trust_6 ~ complexity * as.factor(isCovidData) + chartType + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 , + data = results) +anova(model) + + +``` + + Linear Regression Model for trust in vis as a function of ```{r} -model <- lm(formula = vis.trust_6 ~ complexity * as.factor(isCovidData) * chartType - + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 , +model <- lm(formula = vis.trust_6 ~ complexity * as.factor(isCovidData) * chartType + Age + Gender + State_1 + Income + Education + Parents_education + Language + Ethnicity + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 , data = results) anova(model) +``` +```{r} +# can change the predictor to bar.vis +model<- manova(cbind(vis.trust_6, + vis.trust_5, + vis.trust_4, + vis.trust_3, + vis.trust_2, + vis.trust_1) ~ complexity * chartType + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 , + data = results %>%filter(isCovidData == 1)) +summary.aov(model) ``` ```{r} @@ -174,14 +218,14 @@ eta_squared(aov(vis.trust_6 ~ complexity * as.factor(isCovidData) * chartType + ``` # Colinearity of trust in vis and trust in data ```{r} -colinearity_model <- lm(formula = trust.in.science_7 ~ affect.aesthetic_1 + affect.clarity_1 + affect.science_1 + vis.trust_1 + vis.trust_2 + vis.trust_3 + vis.trust_4 + vis.trust_5 + vis.trust_6 + data.trust_6 + data.trust_5 + data.trust_4 + data.trust_3 + data.trust_2 + data.trust_1, +colinearity_model <- lm(formula = Age ~ vis.trust_1 + vis.trust_2 + vis.trust_3 + affect.science_1 + affect.clarity_1 + affect.aesthetic_1 + vis.trust_6 + data.trust_1 + data.trust_2 + data.trust_3 + data.trust_4 + data.trust_5 + data.trust_6 + interpersonal.trust_1 + trust.in.science_7 + need_for_cognition, data = results) vif(colinearity_model) ``` vif(colinearity_model)relation of trust in vis and trust in data ```{r} -data_frame = data.frame(results$vis.trust_1, results$vis.trust_2, results$vis.trust_3, results$vis.trust_4, results$vis.trust_5, results$vis.trust_6, results$data.trust_1, results$data.trust_2, results$data.trust_3, results$data.trust_4, results$data.trust_5, results$data.trust_6) +data_frame = data.frame(results$vis.trust_1, results$vis.trust_2, results$vis.trust_3, results$affect.science_1, results$affect.clarity_1, results$affect.aesthetic_1, results$vis.trust_6, results$data.trust_1, results$data.trust_2, results$data.trust_3, results$data.trust_4, results$data.trust_5, results$data.trust_6, results$interpersonal.trust_1, results$trust.in.science_7, results$need_for_cognition) cor(data_frame) ``` @@ -229,9 +273,9 @@ results %>% ``` ```{r} -model <- lm(formula = data.trust_6 ~ complexity * as.factor(isCovidData) * chartType +model <- lm(formula = data.trust_6 ~ complexity * chartType + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 , - data = results) + data = results%>% filter(isCovidData == 0)) anova(model) @@ -435,7 +479,7 @@ results %>% How does performance on VLAT questions predict trust? ```{r} -model <- lm(formula = vis.trust_6 ~ vlat_simple * vlat_moderate * vlat_complex + +model <- lm(formula = vis.trust_6 ~ assigned_vlat * Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1, diff --git a/study_data/full_Study/trustFullAnalysis_6.12.2023.nb.html b/study_data/full_Study/trustFullAnalysis_6.12.2023.nb.html index fd9b5c7..65d7356 100644 --- a/study_data/full_Study/trustFullAnalysis_6.12.2023.nb.html +++ b/study_data/full_Study/trustFullAnalysis_6.12.2023.nb.html @@ -1754,73 +1754,8 @@

Trust in Science Analysis Notebook

- -
Loading required package: tidyverse
-── Attaching core tidyverse packages ─────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
-✔ dplyr     1.1.0     ✔ readr     2.1.4
-✔ forcats   1.0.0     ✔ stringr   1.5.0
-✔ ggplot2   3.4.1     ✔ tibble    3.2.0
-✔ lubridate 1.9.2     ✔ tidyr     1.3.0
-✔ purrr     1.0.1     ── Conflicts ───────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
-✖ dplyr::filter() masks stats::filter()
-✖ dplyr::lag()    masks stats::lag()
-ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
-Attaching package: ‘psych’
-
-The following objects are masked from ‘package:ggplot2’:
-
-    %+%, alpha
-
-Loading required package: carData
-
-Attaching package: ‘car’
-
-The following object is masked from ‘package:psych’:
-
-    logit
-
-The following object is masked from ‘package:dplyr’:
-
-    recode
-
-The following object is masked from ‘package:purrr’:
-
-    some
-
-Loading required package: Matrix
-
-Attaching package: ‘Matrix’
-
-The following objects are masked from ‘package:tidyr’:
-
-    expand, pack, unpack
-
-
-Attaching package: ‘rstatix’
-
-The following object is masked from ‘package:stats’:
-
-    filter
-
-
-Attaching package: ‘effectsize’
-
-The following objects are masked from ‘package:rstatix’:
-
-    cohens_d, eta_squared
-
-The following object is masked from ‘package:psych’:
-
-    phi
-
-
-Attaching package: ‘GPArotation’
-
-The following objects are masked from ‘package:psych’:
-
-    equamax, varimin
-
-Warning: namespace ‘ez’ is not available and has been replaced
+
+
Warning: namespace ‘ez’ is not available and has been replaced
 by .GlobalEnv when processing object ‘anova_result’
@@ -1861,7 +1796,7 @@

Trust in Science Analysis Notebook

- +

 MinMeanSEMMax <- function(x) {
   v <- c(min(x), mean(x) - sd(x)/sqrt(length(x)), mean(x), mean(x) + sd(x)/sqrt(length(x)), max(x))
@@ -1883,7 +1818,7 @@ 

Trust in Science Analysis Notebook

group_by(complexity, isCovidData) %>% summarize(n = n(), mean = mean(vis.trust_6), - se = sd(data.trust_6)/sqrt(n)), + se = sd(vis.trust_6)/sqrt(n)), aes(x = mean, xend = mean, y = -.25, yend = .25, colour = as.factor(isCovidData)), size = 1) + # stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 0.5, position = position_nudge(x=0.25, y=0), alpha=0.5) + @@ -1903,13 +1838,20 @@

Trust in Science Analysis Notebook

legend.position = "none", axis.text.y = element_blank(), axis.title.y = element_blank(), - axis.ticks.y = element_blank()) - - - -ggsave(paste("complexity_dataType_interaction.pdf", sep="")) -
+ axis.ticks.y = element_blank())
+ + +
`summarise()` has grouped output by 'complexity'. You can override using the `.groups` argument.`summarise()` has grouped output by 'complexity'. You can override using the `.groups` argument.
+ + +
ggsave(paste("complexity_dataType_interaction.pdf", sep=""))
+ +
Saving 7.29 x 4.51 in image
+ + +

+ @@ -1922,11 +1864,21 @@

Trust in Science Analysis Notebook

se = sd(vis.trust_6)/sqrt(n), n = n) + +
`summarise()` has grouped output by 'complexity'. You can override using the `.groups` argument.
+ + +
+ +
+ - +
# results$isCovidData <- factor(results$isCovidData, levels = c(0, 1),
 #                   labels = c("Crop Data", "Covid Data"))
 
@@ -1937,18 +1889,27 @@ 

Trust in Science Analysis Notebook

geom_jitter(data = results, width = 0.25, height = 0.2, color = "light gray", alpha = 0.5) + geom_boxplot(lwd = 1, fatten = NULL, width = 0.25, alpha = 0.5, color = "salmon") + # labs(title = "Trust in data") + - geom_vline(data = results %>% + + + geom_segment(data = results %>% group_by(complexity) %>% summarize(n = n(), - data.trust_6 = mean(data.trust_6)), - aes(xintercept = data.trust_6), size = 1,colour = "salmon") + + mean = mean(data.trust_6), + se = sd(data.trust_6)/sqrt(n)), + aes(x = mean, xend = mean, y = -.25, yend = .25, colour ="salmon"), size = 1) + + + geom_text( data = results %>% group_by(complexity) %>% summarize(n = n(), mean = round(mean(data.trust_6),digits=2), se = round(sd(data.trust_6)/sqrt(n),digits=2), - vis.trust_6 = mean(vis.trust_6)), - aes(label = paste(mean, "[",mean-se,",",mean+se,"]"), x = 6.8, y = 0.43, fontface = 3), size=3, colour = "black")+ + dadta.trust_6 = mean(data.trust_6)), + # aes(label = paste(mean, "[",mean-se,",",mean+se,"]"), x = 6.2, y = 0.43, fontface = 3), size=3, colour = "black")+ + aes(label = paste(mean), x = mean, y = .35, fontface = 3), size=4, colour = "black")+ + + + facet_grid(rows = vars(complexity)) + xlab("Trust in Data") + theme_minimal() + @@ -1958,33 +1919,285 @@

Trust in Science Analysis Notebook

axis.title.y = element_blank(), axis.ticks.y = element_blank()) -ggsave(paste("complexity_interaction.pdf", sep="")) -
+ggsave(paste("complexity_interaction.pdf", sep="")) + +
Saving 7.29 x 4.51 in image
+ + +

+ - +
results %>%
+ filter(isCovidData ==0 ) %>%
   group_by(complexity) %>%
   summarize(n = n(),
-            mean = mean(data.trust_6),
-            se = sd(data.trust_6)/sqrt(n),
+            mean = mean(vis.trust_6),
+            se = sd(vis.trust_6)/sqrt(n),
             n = n)
+ +
+ +
+ + + + + + +
model <- lm(formula = vis.trust_6 ~ complexity  * chartType + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 ,
+            data = results%>%filter(isCovidData == 1)
+ filter(isCovidData ==1 ))
+ + +
Error: unexpected symbol in:
+"            data = results%>%filter(isCovidData == 1)
+ filter"
+ + + + +
model <- lm(formula = vis.trust_6 ~ complexity  * as.factor(isCovidData) + chartType + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 ,
+            data = results%>% filter(complexity !='moderate'))
+anova(model)
+ + +
Analysis of Variance Table
+
+Response: vis.trust_6
+                                   Df Sum Sq Mean Sq F value    Pr(>F)    
+complexity                          1   3.65   3.652  2.8909  0.090261 .  
+as.factor(isCovidData)              1   0.23   0.227  0.1795  0.672144    
+chartType                           1   1.19   1.189  0.9414  0.332810    
+Age                                 1   5.32   5.317  4.2082  0.041219 *  
+Gender                              2   6.04   3.022  2.3917  0.093460 .  
+State_1                            42  95.82   2.282  1.8059  0.003007 ** 
+Education                           8  12.17   1.521  1.2038  0.296826    
+Parents_education                   2   0.30   0.149  0.1182  0.888523    
+Language                            3   4.19   1.395  1.1043  0.347861    
+Ethnicity                           7   9.78   1.396  1.1053  0.359993    
+Income                             18  25.04   1.391  1.1010  0.351114    
+Religion                            4  10.79   2.699  2.1361  0.076715 .  
+trust.in.science_7                  1  77.24  77.236 61.1342 1.291e-13 ***
+need_for_cognition                  1   4.73   4.726  3.7406  0.054177 .  
+interpersonal.trust_1               1   1.17   1.170  0.9258  0.336843    
+complexity:as.factor(isCovidData)   1   0.36   0.362  0.2863  0.593068    
+Residuals                         263 332.27   1.263                      
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+ + + + + + +
model <- lm(formula = vis.trust_6 ~ complexity * as.factor(isCovidData) + chartType + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 ,
+            data = results)
+anova(model)
+ + +
Analysis of Variance Table
+
+Response: vis.trust_6
+                                   Df Sum Sq Mean Sq  F value  Pr(>F)    
+complexity                          2   4.32   2.161   1.5759 0.20777    
+as.factor(isCovidData)              1   2.48   2.480   1.8087 0.17923    
+chartType                           1   0.03   0.025   0.0185 0.89188    
+trust.in.science_7                  1 209.08 209.076 152.4880 < 2e-16 ***
+need_for_cognition                  1   8.73   8.729   6.3664 0.01192 *  
+interpersonal.trust_1               1   6.28   6.284   4.5831 0.03274 *  
+complexity:as.factor(isCovidData)   2   5.26   2.629   1.9177 0.14795    
+Residuals                         539 739.02   1.371                     
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+

Linear Regression Model for trust in vis as a function of

- -
model <- lm(formula = vis.trust_6 ~ complexity * as.factor(isCovidData) * chartType
-                                    + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 ,
+
+
model <- lm(formula = vis.trust_6 ~ complexity * as.factor(isCovidData) * chartType  + Age + Gender + State_1 + Income + Education + Parents_education + Language + Ethnicity  + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 ,
             data = results)
-anova(model)
-
+anova(model)
+ +
Analysis of Variance Table
+
+Response: vis.trust_6
+                                             Df Sum Sq Mean Sq  F value    Pr(>F)    
+complexity                                    2   4.45   2.226   1.7237  0.179624    
+as.factor(isCovidData)                        1   2.74   2.736   2.1181  0.146282    
+chartType                                     1   0.02   0.020   0.0153  0.901530    
+Age                                           1   9.31   9.308   7.2072  0.007537 ** 
+Gender                                        3   7.63   2.544   1.9699  0.117759    
+State_1                                      46 127.87   2.780   2.1523 4.266e-05 ***
+Income                                       18  36.70   2.039   1.5788  0.061567 .  
+Education                                     9  27.94   3.105   2.4040  0.011443 *  
+Parents_education                             2   0.91   0.455   0.3526  0.703060    
+Language                                      3   2.25   0.749   0.5797  0.628627    
+Ethnicity                                     8  16.18   2.022   1.5659  0.132820    
+Religion                                      4  14.44   3.610   2.7951  0.025844 *  
+trust.in.science_7                            1 138.52 138.515 107.2476 < 2.2e-16 ***
+need_for_cognition                            1   6.54   6.541   5.0644  0.024919 *  
+interpersonal.trust_1                         1   6.90   6.900   5.3428  0.021273 *  
+complexity:as.factor(isCovidData)             2   3.13   1.564   1.2108  0.298943    
+complexity:chartType                          2   3.36   1.680   1.3006  0.273429    
+as.factor(isCovidData):chartType              1   0.64   0.639   0.4945  0.482305    
+complexity:as.factor(isCovidData):chartType   2   0.35   0.175   0.1353  0.873503    
+Residuals                                   437 564.41   1.292                       
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+ + + + +
# can change the predictor to bar.vis
+model<- manova(cbind(vis.trust_6, 
+                     vis.trust_5, 
+                     vis.trust_4, 
+                     vis.trust_3, 
+                     vis.trust_2, 
+                     vis.trust_1) ~ complexity  * chartType  + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 ,
+               data = results %>%filter(isCovidData == 1))
+summary.aov(model)
+ + +
 Response vis.trust_6 :
+                       Df  Sum Sq Mean Sq F value    Pr(>F)    
+complexity              2  11.493   5.746  4.6180  0.011151 *  
+chartType               1   0.021   0.021  0.0168  0.897075    
+Age                     1   6.963   6.963  5.5957  0.019138 *  
+Gender                  3   5.465   1.822  1.4639  0.226227    
+State_1                44 138.867   3.156  2.5364 1.075e-05 ***
+Education               9  27.573   3.064  2.4621  0.011600 *  
+Parents_education       2   7.254   3.627  2.9150  0.056936 .  
+Language                3   5.740   1.913  1.5376  0.206617    
+Ethnicity               8  29.014   3.627  2.9146  0.004517 ** 
+Income                 18  39.852   2.214  1.7792  0.031312 *  
+Religion                4  27.389   6.847  5.5028  0.000345 ***
+trust.in.science_7      1  94.704  94.704 76.1086 2.463e-15 ***
+need_for_cognition      1   0.249   0.249  0.2004  0.654956    
+interpersonal.trust_1   1   7.605   7.605  6.1114  0.014421 *  
+complexity:chartType    2   1.003   0.502  0.4032  0.668814    
+Residuals             169 210.292   1.244                      
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+ Response vis.trust_5 :
+                       Df Sum Sq Mean Sq F value    Pr(>F)    
+complexity              2  30.29  15.146  5.1029 0.0070499 ** 
+chartType               1   2.06   2.057  0.6931 0.4062850    
+Age                     1   6.87   6.872  2.3153 0.1299766    
+Gender                  3   3.30   1.100  0.3706 0.7742962    
+State_1                44 122.01   2.773  0.9342 0.5927361    
+Education               9  30.20   3.356  1.1305 0.3438199    
+Parents_education       2  21.91  10.955  3.6908 0.0269858 *  
+Language                3   4.89   1.631  0.5494 0.6491861    
+Ethnicity               8  26.48   3.310  1.1150 0.3554987    
+Income                 18  75.86   4.214  1.4198 0.1276477    
+Religion                4  15.18   3.794  1.2783 0.2805024    
+trust.in.science_7      1  40.05  40.055 13.4946 0.0003208 ***
+need_for_cognition      1   9.52   9.516  3.2059 0.0751611 .  
+interpersonal.trust_1   1   0.86   0.862  0.2904 0.5906510    
+complexity:chartType    2   3.42   1.709  0.5757 0.5634154    
+Residuals             169 501.62   2.968                      
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+ Response vis.trust_4 :
+                       Df Sum Sq Mean Sq F value    Pr(>F)    
+complexity              2  18.79   9.393  2.8811   0.05883 .  
+chartType               1   0.01   0.008  0.0026   0.95962    
+Age                     1   1.23   1.230  0.3774   0.53982    
+Gender                  3   3.55   1.183  0.3629   0.77986    
+State_1                44 144.29   3.279  1.0058   0.47167    
+Education               9  36.19   4.021  1.2333   0.27773    
+Parents_education       2  14.48   7.242  2.2211   0.11165    
+Language                3   1.42   0.473  0.1452   0.93266    
+Ethnicity               8  40.47   5.059  1.5516   0.14299    
+Income                 18  66.24   3.680  1.1288   0.32848    
+Religion                4  25.68   6.421  1.9695   0.10138    
+trust.in.science_7      1  73.52  73.520 22.5499 4.347e-06 ***
+need_for_cognition      1  17.75  17.748  5.4435   0.02082 *  
+interpersonal.trust_1   1   0.54   0.542  0.1664   0.68386    
+complexity:chartType    2   5.59   2.793  0.8567   0.42640    
+Residuals             169 550.99   3.260                      
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+ Response vis.trust_3 :
+                       Df  Sum Sq Mean Sq F value    Pr(>F)    
+complexity              2  19.559  9.7794  5.2355 0.0062214 ** 
+chartType               1   1.574  1.5745  0.8429 0.3598694    
+Age                     1   2.247  2.2467  1.2028 0.2743263    
+Gender                  3  12.010  4.0033  2.1432 0.0966560 .  
+State_1                44 118.874  2.7017  1.4464 0.0506440 .  
+Education               9  24.871  2.7635  1.4795 0.1590611    
+Parents_education       2  14.778  7.3889  3.9558 0.0209426 *  
+Language                3   0.228  0.0759  0.0406 0.9890404    
+Ethnicity               8   9.536  1.1920  0.6381 0.7448722    
+Income                 18  33.244  1.8469  0.9888 0.4750210    
+Religion                4  14.803  3.7006  1.9812 0.0995774 .  
+trust.in.science_7      1  26.452 26.4515 14.1612 0.0002312 ***
+need_for_cognition      1   3.476  3.4764  1.8611 0.1743091    
+interpersonal.trust_1   1   4.961  4.9615  2.6562 0.1050099    
+complexity:chartType    2   1.600  0.8000  0.4283 0.6523172    
+Residuals             169 315.673  1.8679                      
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+ Response vis.trust_2 :
+                       Df  Sum Sq Mean Sq F value    Pr(>F)    
+complexity              2  38.917 19.4584 13.2888 4.365e-06 ***
+chartType               1   4.965  4.9649  3.3907   0.06732 .  
+Age                     1   0.610  0.6097  0.4164   0.51962    
+Gender                  3  13.188  4.3961  3.0023   0.03206 *  
+State_1                44 105.817  2.4049  1.6424   0.01352 *  
+Education               9   7.175  0.7972  0.5444   0.84042    
+Parents_education       2   7.305  3.6523  2.4943   0.08559 .  
+Language                3   0.245  0.0816  0.0557   0.98264    
+Ethnicity               8  14.155  1.7693  1.2083   0.29684    
+Income                 18  33.283  1.8491  1.2628   0.21827    
+Religion                4   9.240  2.3100  1.5776   0.18250    
+trust.in.science_7      1   5.291  5.2911  3.6135   0.05902 .  
+need_for_cognition      1   3.732  3.7323  2.5489   0.11224    
+interpersonal.trust_1   1   1.851  1.8509  1.2640   0.26248    
+complexity:chartType    2   0.428  0.2141  0.1462   0.86406    
+Residuals             169 247.462  1.4643                      
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+ Response vis.trust_1 :
+                       Df Sum Sq Mean Sq F value    Pr(>F)    
+complexity              2   5.55   2.774  1.4342   0.24120    
+chartType               1   0.00   0.003  0.0013   0.97098    
+Age                     1   7.35   7.349  3.7990   0.05294 .  
+Gender                  3   6.91   2.302  1.1901   0.31516    
+State_1                44 126.21   2.868  1.4828   0.04008 *  
+Education               9   7.14   0.794  0.4104   0.92833    
+Parents_education       2   4.62   2.312  1.1952   0.30519    
+Language                3   2.86   0.953  0.4929   0.68769    
+Ethnicity               8  16.68   2.085  1.0779   0.38093    
+Income                 18  34.76   1.931  0.9982   0.46434    
+Religion                4  12.66   3.166  1.6366   0.16730    
+trust.in.science_7      1  39.14  39.145 20.2362 1.268e-05 ***
+need_for_cognition      1   2.43   2.435  1.2586   0.26350    
+interpersonal.trust_1   1  10.48  10.477  5.4160   0.02114 *  
+complexity:chartType    2   1.76   0.878  0.4541   0.63577    
+Residuals             169 326.91   1.934                      
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+2 observations deleted due to missingness
+ @@ -2004,18 +2217,24 @@

Trust in Science Analysis Notebook

Colinearity of trust in vis and trust in data

- -
colinearity_model <- lm(formula = trust.in.science_7 ~ affect.aesthetic_1 + affect.clarity_1 + affect.science_1 + vis.trust_1 + vis.trust_2 + vis.trust_3 + vis.trust_4 + vis.trust_5 + vis.trust_6 + data.trust_6 + data.trust_5 + data.trust_4 + data.trust_3 + data.trust_2 + data.trust_1,
+
+
colinearity_model <- lm(formula = Age ~ vis.trust_1 + vis.trust_2 + vis.trust_3 + affect.science_1 + affect.clarity_1 + affect.aesthetic_1 + vis.trust_6 + data.trust_1 + data.trust_2 + data.trust_3 + data.trust_4 + data.trust_5 + data.trust_6 + interpersonal.trust_1 + trust.in.science_7 + need_for_cognition,
             data = results)
 vif(colinearity_model)
+ +
          vis.trust_1           vis.trust_2           vis.trust_3      affect.science_1      affect.clarity_1    affect.aesthetic_1           vis.trust_6          data.trust_1          data.trust_2 
+             2.203331              3.076587              2.611914              1.417935              1.562866              1.263335              3.161843              3.324068              2.300680 
+         data.trust_3          data.trust_4          data.trust_5          data.trust_6 interpersonal.trust_1    trust.in.science_7    need_for_cognition 
+             2.229731              2.125802              1.689881              4.388363              1.149877              1.422811              1.117929 
+

vif(colinearity_model)relation of trust in vis and trust in data

- -
data_frame = data.frame(results$vis.trust_1, results$vis.trust_2, results$vis.trust_3, results$vis.trust_4, results$vis.trust_5, results$vis.trust_6, results$data.trust_1, results$data.trust_2, results$data.trust_3, results$data.trust_4, results$data.trust_5, results$data.trust_6)
+
+
data_frame = data.frame(results$vis.trust_1, results$vis.trust_2, results$vis.trust_3, results$affect.science_1, results$affect.clarity_1, results$affect.aesthetic_1, results$vis.trust_6, results$data.trust_1, results$data.trust_2, results$data.trust_3, results$data.trust_4, results$data.trust_5, results$data.trust_6, results$interpersonal.trust_1, results$trust.in.science_7, results$need_for_cognition)
 cor(data_frame)
@@ -2068,13 +2287,36 @@

Trust in science, need for cognition, and interpersonal trust on - -
model <- lm(formula = data.trust_6 ~ complexity * as.factor(isCovidData) * chartType
+
+
model <- lm(formula = data.trust_6 ~ complexity * chartType
                                     + Age + Gender + State_1 + Education + Parents_education + Language + Ethnicity + Income + Religion + trust.in.science_7 + need_for_cognition + interpersonal.trust_1 ,
-            data = results)
-anova(model)
-
+ data = results%>% filter(isCovidData == 1)) +anova(model)
+ +
Analysis of Variance Table
+
+Response: data.trust_6
+                       Df  Sum Sq Mean Sq  F value    Pr(>F)    
+complexity              2   3.497   1.749   1.3088  0.272876    
+chartType               1   0.889   0.889   0.6653  0.415858    
+Age                     1  13.358  13.358   9.9976  0.001858 ** 
+Gender                  3   6.582   2.194   1.6421  0.181552    
+State_1                44 187.576   4.263   3.1907 4.012e-08 ***
+Education               9  26.902   2.989   2.2372  0.021915 *  
+Parents_education       2   9.807   4.903   3.6700  0.027529 *  
+Language                3   1.136   0.379   0.2835  0.837286    
+Ethnicity               8  19.808   2.476   1.8532  0.070531 .  
+Income                 18  52.288   2.905   2.1742  0.005527 ** 
+Religion                4  25.772   6.443   4.8222  0.001044 ** 
+trust.in.science_7      1 153.507 153.507 114.8923 < 2.2e-16 ***
+need_for_cognition      1   0.377   0.377   0.2823  0.595918    
+interpersonal.trust_1   1   8.065   8.065   6.0361  0.015026 *  
+complexity:chartType    2   0.103   0.051   0.0384  0.962300    
+Residuals             169 225.800   1.336                       
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+ @@ -2206,6 +2448,137 @@

Do the trust items predict trust?

data = results) summary(model)
+ +

+Call:
+lm(formula = vis.trust_6 ~ vis.trust_1 + vis.trust_2 + vis.trust_3 + 
+    vis.trust_4 + vis.trust_5 + affect.science_1 + affect.clarity_1 + 
+    affect.aesthetic_1 + Age + Gender + State_1 + Education + 
+    Parents_education + Language + Ethnicity + Income + Religion + 
+    trust.in.science_7 + need_for_cognition + interpersonal.trust_1, 
+    data = results)
+
+Residuals:
+     Min       1Q   Median       3Q      Max 
+-2.83565 -0.50664  0.01138  0.51001  2.58176 
+
+Coefficients: (1 not defined because of singularities)
+                        Estimate Std. Error t value Pr(>|t|)    
+(Intercept)           -11.568583   5.984157  -1.933 0.053853 .  
+vis.trust_1             0.215786   0.038071   5.668 2.62e-08 ***
+vis.trust_2             0.150292   0.047905   3.137 0.001820 ** 
+vis.trust_3             0.188862   0.048434   3.899 0.000111 ***
+vis.trust_4             0.056337   0.034117   1.651 0.099392 .  
+vis.trust_5             0.020632   0.033502   0.616 0.538318    
+affect.science_1        0.006861   0.002558   2.682 0.007601 ** 
+affect.clarity_1       -0.000636   0.001958  -0.325 0.745437    
+affect.aesthetic_1     -0.001043   0.002041  -0.511 0.609684    
+Age                     0.007716   0.002930   2.633 0.008758 ** 
+Gender2                 0.086332   0.085376   1.011 0.312475    
+Gender3                -0.545730   0.405884  -1.345 0.179464    
+Gender5                -1.519986   1.377488  -1.103 0.270436    
+State_1Alaska           1.322914   1.734212   0.763 0.445972    
+State_1Arizona          0.121891   0.383528   0.318 0.750776    
+State_1Arkansas        -0.031368   0.531276  -0.059 0.952944    
+State_1California      -0.052693   0.268334  -0.196 0.844409    
+State_1Colorado        -0.162685   0.376532  -0.432 0.665908    
+State_1Connecticut     -0.319555   0.477459  -0.669 0.503665    
+State_1Delaware         0.335401   0.691998   0.485 0.628141    
+State_1Florida         -0.267266   0.287427  -0.930 0.352956    
+State_1Georgia         -0.212548   0.304372  -0.698 0.485348    
+State_1Hawaii          -0.274540   0.601487  -0.456 0.648302    
+State_1Illinois        -0.392732   0.321003  -1.223 0.221813    
+State_1Indiana         -0.359962   0.397884  -0.905 0.366124    
+State_1Iowa            -0.343904   0.532551  -0.646 0.518767    
+State_1Kansas          -0.112709   0.421055  -0.268 0.789069    
+State_1Kentucky        -0.693997   0.390328  -1.778 0.076097 .  
+State_1Louisiana       -0.551437   0.445468  -1.238 0.216420    
+State_1Maine            0.801057   0.583361   1.373 0.170397    
+State_1Maryland        -0.143161   0.344298  -0.416 0.677755    
+State_1Massachusetts   -0.111028   0.351510  -0.316 0.752258    
+State_1Michigan        -0.313457   0.330148  -0.949 0.342916    
+State_1Minnesota       -0.376869   0.476941  -0.790 0.429848    
+State_1Mississippi     -1.239929   0.519474  -2.387 0.017413 *  
+State_1Missouri        -0.818462   0.389421  -2.102 0.036144 *  
+State_1Montana          0.049043   0.707315   0.069 0.944754    
+State_1Nebraska        -0.047164   0.585113  -0.081 0.935791    
+State_1Nevada          -1.201963   0.507768  -2.367 0.018358 *  
+State_1New Hampshire   -1.584564   0.947064  -1.673 0.095012 .  
+State_1New Jersey      -0.114745   0.409673  -0.280 0.779541    
+State_1New York         0.100077   0.297830   0.336 0.737016    
+State_1North Carolina  -0.237599   0.317988  -0.747 0.455345    
+State_1Ohio            -0.205485   0.338339  -0.607 0.543941    
+State_1Oklahoma         0.042281   0.455457   0.093 0.926079    
+State_1Oregon          -0.426634   0.410003  -1.041 0.298650    
+State_1Pennsylvania    -0.233936   0.296140  -0.790 0.429981    
+State_1Rhode Island    -0.488928   0.590033  -0.829 0.407755    
+State_1South Carolina  -0.507633   0.477715  -1.063 0.288534    
+State_1South Dakota    -2.119380   0.964038  -2.198 0.028438 *  
+State_1Tennessee       -0.407836   0.361310  -1.129 0.259610    
+State_1Texas           -0.391497   0.286211  -1.368 0.172054    
+State_1Utah            -0.430443   0.446138  -0.965 0.335165    
+State_1Vermont         -1.340000   0.693503  -1.932 0.053974 .  
+State_1Virginia        -0.404289   0.406598  -0.994 0.320614    
+State_1Washington       0.158682   0.321748   0.493 0.622127    
+State_1West Virginia   -0.452496   0.578523  -0.782 0.434542    
+State_1Wisconsin       -0.183009   0.327284  -0.559 0.576327    
+State_1Wyoming         -0.378580   0.959063  -0.395 0.693226    
+Education2             -0.293617   0.395770  -0.742 0.458550    
+Education3             -0.477211   0.384007  -1.243 0.214635    
+Education4             -0.569974   0.410837  -1.387 0.166038    
+Education5             -0.424505   0.415909  -1.021 0.307972    
+Education6             -0.662040   0.377600  -1.753 0.080249 .  
+Education7             -0.413820   0.390888  -1.059 0.290333    
+Education8             -0.174992   0.464790  -0.376 0.706729    
+Education9             -0.047943   0.632478  -0.076 0.939612    
+Education10            -3.043541   0.998056  -3.049 0.002431 ** 
+Parents_education2      0.030904   0.104267   0.296 0.767069    
+Parents_education3     -0.012182   0.117568  -0.104 0.917520    
+Language2              -0.105108   0.529395  -0.199 0.842711    
+Language3               0.334894   0.512609   0.653 0.513896    
+Language4              -0.865349   0.857233  -1.009 0.313305    
+Ethnicity2             -1.889884   1.029641  -1.835 0.067110 .  
+Ethnicity3             -1.646928   1.012601  -1.626 0.104574    
+Ethnicity4             -1.638000   1.045092  -1.567 0.117757    
+Ethnicity5             -0.808707   1.195565  -0.676 0.499128    
+Ethnicity6             -0.345946   1.369488  -0.253 0.800687    
+Ethnicity7             -1.825416   1.010992  -1.806 0.071669 .  
+Ethnicity8             -1.621890   1.019411  -1.591 0.112326    
+Ethnicity9             -1.733401   1.014518  -1.709 0.088231 .  
+Ethnicity10                   NA         NA      NA       NA    
+Income2                -0.863563   0.425063  -2.032 0.042793 *  
+Income3                -0.847871   0.350137  -2.422 0.015858 *  
+Income4                -0.979911   0.333680  -2.937 0.003492 ** 
+Income5                -0.777323   0.336630  -2.309 0.021399 *  
+Income6                -0.930965   0.335217  -2.777 0.005717 ** 
+Income7                -0.834286   0.338312  -2.466 0.014042 *  
+Income8                -0.571733   0.355942  -1.606 0.108936    
+Income9                -0.913670   0.353118  -2.587 0.009989 ** 
+Income10               -0.594093   0.357703  -1.661 0.097454 .  
+Income11               -1.063443   0.355617  -2.990 0.002942 ** 
+Income12               -0.929792   0.367972  -2.527 0.011860 *  
+Income13               -0.950678   0.377698  -2.517 0.012189 *  
+Income14               -1.177312   0.352011  -3.345 0.000895 ***
+Income15               -0.589763   0.474481  -1.243 0.214543    
+Income16               -1.139667   0.369668  -3.083 0.002179 ** 
+Income17               -0.838200   0.340184  -2.464 0.014122 *  
+Income18               -1.494424   0.721342  -2.072 0.038873 *  
+Income19               -1.057261   0.400257  -2.641 0.008549 ** 
+Religion2              -0.118556   0.189118  -0.627 0.531056    
+Religion3              -0.197893   0.186632  -1.060 0.289570    
+Religion4              -0.036543   0.180259  -0.203 0.839444    
+Religion5               0.032519   0.404114   0.080 0.935901    
+trust.in.science_7      0.161617   0.022364   7.227 2.20e-12 ***
+need_for_cognition     -0.046815   0.071523  -0.655 0.513109    
+interpersonal.trust_1   0.055705   0.033848   1.646 0.100526    
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+Residual standard error: 0.8806 on 440 degrees of freedom
+  (3 observations deleted due to missingness)
+Multiple R-squared:  0.6498,    Adjusted R-squared:  0.5662 
+F-statistic: 7.776 on 105 and 440 DF,  p-value: < 2.2e-16
+ @@ -2222,6 +2595,133 @@

Do the trust items predict trust?

data = results) summary(model)
+ +

+Call:
+lm(formula = data.trust_6 ~ data.trust_1 + data.trust_2 + data.trust_3 + 
+    data.trust_4 + data.trust_5 + Age + Gender + State_1 + Education + 
+    Parents_education + Language + Ethnicity + Income + Religion + 
+    trust.in.science_7 + need_for_cognition + interpersonal.trust_1, 
+    data = results)
+
+Residuals:
+    Min      1Q  Median      3Q     Max 
+-2.2352 -0.3538  0.0000  0.4104  2.2492 
+
+Coefficients: (1 not defined because of singularities)
+                        Estimate Std. Error t value Pr(>|t|)    
+(Intercept)           -1.316e+01  5.014e+00  -2.623 0.009005 ** 
+data.trust_1           5.598e-01  4.243e-02  13.194  < 2e-16 ***
+data.trust_2           1.124e-01  3.145e-02   3.573 0.000392 ***
+data.trust_3           1.875e-01  3.387e-02   5.535 5.33e-08 ***
+data.trust_4           1.912e-02  3.519e-02   0.543 0.587117    
+data.trust_5           6.567e-02  3.099e-02   2.119 0.034662 *  
+Age                    6.111e-03  2.460e-03   2.485 0.013339 *  
+Gender2               -3.429e-02  7.182e-02  -0.477 0.633319    
+Gender3               -6.200e-01  3.463e-01  -1.791 0.074037 .  
+Gender5                2.591e-01  1.164e+00   0.222 0.824036    
+State_1Alaska          2.958e-01  1.446e+00   0.205 0.838027    
+State_1Arizona        -2.353e-01  3.235e-01  -0.727 0.467429    
+State_1Arkansas        3.650e-02  4.519e-01   0.081 0.935655    
+State_1California     -2.765e-01  2.268e-01  -1.219 0.223556    
+State_1Colorado       -1.135e-01  3.185e-01  -0.357 0.721633    
+State_1Connecticut    -2.469e-01  4.076e-01  -0.606 0.545041    
+State_1Delaware       -3.506e-02  5.847e-01  -0.060 0.952203    
+State_1Florida         3.851e-03  2.433e-01   0.016 0.987376    
+State_1Georgia        -2.070e-02  2.573e-01  -0.080 0.935920    
+State_1Hawaii         -1.198e-01  5.066e-01  -0.236 0.813221    
+State_1Illinois       -2.293e-01  2.744e-01  -0.835 0.403907    
+State_1Indiana        -9.702e-01  3.353e-01  -2.894 0.003993 ** 
+State_1Iowa           -2.097e-01  4.502e-01  -0.466 0.641602    
+State_1Kansas         -1.939e-01  3.543e-01  -0.547 0.584541    
+State_1Kentucky       -2.129e-01  3.305e-01  -0.644 0.519800    
+State_1Louisiana      -4.327e-01  3.758e-01  -1.151 0.250216    
+State_1Maine          -9.343e-04  4.892e-01  -0.002 0.998477    
+State_1Maryland        6.313e-02  2.910e-01   0.217 0.828371    
+State_1Massachusetts  -1.000e-02  2.966e-01  -0.034 0.973111    
+State_1Michigan       -1.170e-01  2.784e-01  -0.420 0.674586    
+State_1Minnesota      -1.259e-02  4.022e-01  -0.031 0.975048    
+State_1Mississippi    -8.418e-01  4.401e-01  -1.913 0.056430 .  
+State_1Missouri       -2.860e-01  3.271e-01  -0.874 0.382468    
+State_1Montana        -3.628e-01  5.914e-01  -0.613 0.539903    
+State_1Nebraska       -1.390e-02  4.931e-01  -0.028 0.977530    
+State_1Nevada         -5.972e-02  4.258e-01  -0.140 0.888509    
+State_1New Hampshire   8.429e-02  7.988e-01   0.106 0.916012    
+State_1New Jersey     -4.443e-01  3.448e-01  -1.289 0.198243    
+State_1New York       -2.169e-02  2.528e-01  -0.086 0.931673    
+State_1North Carolina  3.833e-02  2.667e-01   0.144 0.885784    
+State_1Ohio           -3.252e-02  2.841e-01  -0.114 0.908943    
+State_1Oklahoma        3.489e-01  3.843e-01   0.908 0.364442    
+State_1Oregon          1.630e-01  3.457e-01   0.471 0.637568    
+State_1Pennsylvania   -1.478e-01  2.489e-01  -0.594 0.552877    
+State_1Rhode Island   -4.683e-01  4.941e-01  -0.948 0.343804    
+State_1South Carolina -2.846e-01  4.037e-01  -0.705 0.481187    
+State_1South Dakota   -2.177e+00  8.041e-01  -2.707 0.007051 ** 
+State_1Tennessee      -5.759e-01  3.043e-01  -1.893 0.059033 .  
+State_1Texas          -2.713e-01  2.417e-01  -1.123 0.262213    
+State_1Utah           -1.505e-01  3.770e-01  -0.399 0.689941    
+State_1Vermont         3.256e-02  5.842e-01   0.056 0.955578    
+State_1Virginia        1.386e-01  3.438e-01   0.403 0.686999    
+State_1Washington     -1.624e-01  2.694e-01  -0.603 0.546903    
+State_1West Virginia  -2.660e-01  4.864e-01  -0.547 0.584694    
+State_1Wisconsin       1.575e-02  2.755e-01   0.057 0.954439    
+State_1Wyoming        -8.592e-02  8.082e-01  -0.106 0.915383    
+Education2             1.740e-01  3.308e-01   0.526 0.599145    
+Education3             1.638e-01  3.213e-01   0.510 0.610480    
+Education4             3.578e-01  3.436e-01   1.041 0.298215    
+Education5             4.338e-01  3.504e-01   1.238 0.216359    
+Education6             1.346e-01  3.159e-01   0.426 0.670237    
+Education7             1.471e-01  3.283e-01   0.448 0.654383    
+Education8             6.090e-01  3.919e-01   1.554 0.120852    
+Education9            -8.566e-01  5.304e-01  -1.615 0.107015    
+Education10            7.685e-02  8.248e-01   0.093 0.925809    
+Parents_education2     3.662e-02  8.801e-02   0.416 0.677566    
+Parents_education3     4.423e-03  9.821e-02   0.045 0.964097    
+Language2              3.625e-01  4.464e-01   0.812 0.417253    
+Language3              2.926e-01  4.337e-01   0.675 0.500217    
+Language4              5.497e-01  7.222e-01   0.761 0.446967    
+Ethnicity2            -1.413e-01  8.710e-01  -0.162 0.871231    
+Ethnicity3            -6.553e-02  8.571e-01  -0.076 0.939095    
+Ethnicity4            -1.685e-01  8.846e-01  -0.190 0.849045    
+Ethnicity5            -3.473e-01  1.008e+00  -0.345 0.730541    
+Ethnicity6             1.352e+00  1.149e+00   1.176 0.240098    
+Ethnicity7            -1.305e-01  8.561e-01  -0.152 0.878884    
+Ethnicity8            -4.033e-01  8.620e-01  -0.468 0.640066    
+Ethnicity9            -6.418e-02  8.591e-01  -0.075 0.940487    
+Ethnicity10                   NA         NA      NA       NA    
+Income2                1.390e-01  3.571e-01   0.389 0.697266    
+Income3                1.915e-01  2.922e-01   0.655 0.512637    
+Income4                2.520e-01  2.806e-01   0.898 0.369530    
+Income5                2.478e-01  2.819e-01   0.879 0.379910    
+Income6                2.070e-01  2.816e-01   0.735 0.462661    
+Income7                3.353e-01  2.826e-01   1.186 0.236205    
+Income8                3.153e-01  2.976e-01   1.059 0.290062    
+Income9                3.141e-01  2.950e-01   1.065 0.287521    
+Income10               4.680e-01  2.997e-01   1.562 0.119034    
+Income11               3.063e-01  2.966e-01   1.033 0.302300    
+Income12               2.137e-01  3.097e-01   0.690 0.490494    
+Income13               1.122e-01  3.176e-01   0.353 0.723933    
+Income14               2.085e-01  2.960e-01   0.704 0.481544    
+Income15               5.904e-01  3.992e-01   1.479 0.139880    
+Income16              -9.696e-04  3.092e-01  -0.003 0.997499    
+Income17               4.046e-01  2.846e-01   1.421 0.155949    
+Income18               4.514e-01  6.083e-01   0.742 0.458455    
+Income19              -8.688e-02  3.360e-01  -0.259 0.796119    
+Religion2              9.832e-02  1.591e-01   0.618 0.536837    
+Religion3              8.967e-02  1.567e-01   0.572 0.567443    
+Religion4              9.837e-02  1.521e-01   0.647 0.518024    
+Religion5              6.231e-01  3.376e-01   1.845 0.065640 .  
+trust.in.science_7     6.755e-02  1.965e-02   3.438 0.000642 ***
+need_for_cognition     1.162e-01  5.983e-02   1.942 0.052722 .  
+interpersonal.trust_1  4.233e-02  2.839e-02   1.491 0.136678    
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+
+Residual standard error: 0.7431 on 443 degrees of freedom
+  (3 observations deleted due to missingness)
+Multiple R-squared:  0.7791,    Adjusted R-squared:  0.7282 
+F-statistic: 15.32 on 102 and 443 DF,  p-value: < 2.2e-16
+ @@ -2278,8 +2778,8 @@

Which trust measurements predict behavioral outcomes?

How does performance on VLAT questions predict trust?

- -
model <- lm(formula = vis.trust_6 ~ vlat_simple * vlat_moderate * vlat_complex +
+
+
model <- lm(formula = vis.trust_6 ~  assigned_vlat *
               Age + Gender + State_1 + Education + Parents_education + Language + 
               Ethnicity + Income + Religion + trust.in.science_7 + 
               need_for_cognition + interpersonal.trust_1,
@@ -2703,16 +3203,54 @@ 

Affect on Trust {it’s own section}

Trust in Data

- +
model <- lm(formula = data.trust_6 ~ affect.science_1 * affect.clarity_1 * affect.aesthetic_1 +
               Age + Gender + State_1 + Education + Parents_education + Language + 
               Ethnicity + Income + Religion + trust.in.science_7 + 
               need_for_cognition + interpersonal.trust_1,
             data = results)
-anova(model)
-
-emmeans(aov(data.trust_6 ~ affect.science_1 * affect.clarity_1 , data = results) , ~ affect.clarity_1)
+anova(model)
+ + +
Analysis of Variance Table
+
+Response: data.trust_6
+                                                      Df Sum Sq Mean Sq  F value    Pr(>F)    
+affect.science_1                                       1 215.22 215.219 177.0086 < 2.2e-16 ***
+affect.clarity_1                                       1   9.25   9.255   7.6117 0.0060405 ** 
+affect.aesthetic_1                                     1   7.35   7.346   6.0415 0.0143574 *  
+Age                                                    1  11.87  11.874   9.7662 0.0018948 ** 
+Gender                                                 3  12.52   4.175   3.4337 0.0169859 *  
+State_1                                               46 102.32   2.224   1.8295 0.0011628 ** 
+Education                                              9  23.48   2.609   2.1460 0.0247518 *  
+Parents_education                                      2   2.76   1.378   1.1336 0.3228214    
+Language                                               3   3.61   1.204   0.9902 0.3972282    
+Ethnicity                                              8   9.34   1.168   0.9605 0.4663668    
+Income                                                18  24.73   1.374   1.1301 0.3192198    
+Religion                                               4  25.11   6.279   5.1638 0.0004495 ***
+trust.in.science_7                                     1  99.73  99.728  82.0222 < 2.2e-16 ***
+need_for_cognition                                     1   1.99   1.989   1.6360 0.2015540    
+interpersonal.trust_1                                  1  10.18  10.178   8.3706 0.0040023 ** 
+affect.science_1:affect.clarity_1                      1   7.06   7.065   5.8105 0.0163391 *  
+affect.science_1:affect.aesthetic_1                    1   0.60   0.604   0.4971 0.4811667    
+affect.clarity_1:affect.aesthetic_1                    1   3.71   3.706   3.0481 0.0815296 .  
+affect.science_1:affect.clarity_1:affect.aesthetic_1   1   0.30   0.304   0.2501 0.6172265    
+Residuals                                            441 536.20   1.216                       
+---
+Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
+ + +
emmeans(aov(data.trust_6 ~ affect.science_1 * affect.clarity_1 , data = results) , ~ affect.clarity_1)
+ +
NOTE: Results may be misleading due to involvement in interactions
+ + +
 affect.clarity_1 emmean     SE  df lower.CL upper.CL
+             75.7   5.17 0.0558 545     5.06     5.28
+
+Confidence level used: 0.95 
+ @@ -2756,7 +3294,7 @@

Factor Analysis

-
LS0tCnRpdGxlOiAiVHJ1c3QgaW4gU2NpZW5jZSBBbmFseXNpcyBOb3RlYm9vayIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCmBgYHtyIGVjaG8gPSBGQUxTRX0KcmVxdWlyZSh0aWR5dmVyc2UpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShjYXIpCmxpYnJhcnkobG1lNCkKbGlicmFyeShlbW1lYW5zKQpsaWJyYXJ5KHB3cikKbGlicmFyeShwYXRjaHdvcmspCmxpYnJhcnkocnN0YXRpeCkKbGlicmFyeShlZmZlY3RzaXplKQpsaWJyYXJ5KEdQQXJvdGF0aW9uKQojIGVudmlyb25tZW50IHRvIGluY2x1ZGUgdGhlIHNzX3BzeWNoNDUwX3J3czMgcGxhdGZvcm0KbG9hZCgic3NfcHN5Y2g0NTBfcndzMyIpCmBgYAoKTG9hZCBEYXRhCgpgYGB7cn0KcmVzdWx0cyA8LSByZWFkLmNzdigiZGF0YV9jbGVhbl9qdW5lMzAuY3N2IikKCiMgdHJ1c3QgaW4gZGF0YSBpcyB0aGUgY29sdW1uOiBiYXItZGF0YV82CiMgdHJ1c3QgaW4gdmlzIGlzIHRoZSBjb2x1bW46IGJhci12aXNfNgpgYGAKCkNvbnZlcnRpbmcgY292YXJpYXRlcyB0byBmYWN0b3JzCmBgYHtyfQpyZXN1bHRzJEdlbmRlciA8LSBhcy5mYWN0b3IocmVzdWx0cyRHZW5kZXIpCnJlc3VsdHMkRWR1Y2F0aW9uIDwtIGFzLmZhY3RvcihyZXN1bHRzJEVkdWNhdGlvbikKcmVzdWx0cyRQYXJlbnRzX2VkdWNhdGlvbiA8LSBhcy5mYWN0b3IocmVzdWx0cyRQYXJlbnRzX2VkdWNhdGlvbikKcmVzdWx0cyRMYW5ndWFnZSA8LSBhcy5mYWN0b3IocmVzdWx0cyRMYW5ndWFnZSkKcmVzdWx0cyRFdGhuaWNpdHkgPC0gYXMuZmFjdG9yKHJlc3VsdHMkRXRobmljaXR5KQpyZXN1bHRzJEluY29tZSA8LSBhcy5mYWN0b3IocmVzdWx0cyRJbmNvbWUpCnJlc3VsdHMkUmVsaWdpb24gPC0gYXMuZmFjdG9yKHJlc3VsdHMkUmVsaWdpb24pCmBgYAoKVHJ1c3QgaW4gVmlzCgpgYGB7cn0KIyByZXN1bHRzJGlzQ292aWREYXRhIDwtIGZhY3RvcihyZXN1bHRzJGlzQ292aWREYXRhLCBsZXZlbHMgPSBjKDAsIDEpLAojICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkNyb3AgRGF0YSIsICJDb3ZpZCBEYXRhIikpCmBgYAoKYGBge3J9CgpNaW5NZWFuU0VNTWF4IDwtIGZ1bmN0aW9uKHgpIHsKICB2IDwtIGMobWluKHgpLCBtZWFuKHgpIC0gc2QoeCkvc3FydChsZW5ndGgoeCkpLCBtZWFuKHgpLCBtZWFuKHgpICsgc2QoeCkvc3FydChsZW5ndGgoeCkpLCBtYXgoeCkpCiAgbmFtZXModikgPC0gYygieW1pbiIsICJsb3dlciIsICJtaWRkbGUiLCAidXBwZXIiLCAieW1heCIpCiAgdgp9CgpyZXN1bHRzICU+JQogICMgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogIGdncGxvdChhZXMoIHggPSB2aXMudHJ1c3RfNiwgeSA9IDAsIGNleD0xLjUsIGNvbG91ciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInB1cnBsZSIsICJvcmFuZ2UiKSkgKwogIHlsaW0oLTAuNSwgMC41KSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IHJlc3VsdHMsIHdpZHRoID0gMC4zLCBoZWlnaHQgPSAwLjIsIGNvbG9yID0gImxpZ2h0IGdyYXkiLCBhbHBoYSA9IDAuNSkgKwogICNzdGF0X3N1bW1hcnkoZnVuLmRhdGE9TWluTWVhblNFTU1heCwgZ2VvbT0iYm94cGxvdCIsIGNvbG91cj0icmVkIikgKwoKICBnZW9tX2JveHBsb3QobHdkID0gMSwgZmF0dGVuID0gTlVMTCwgd2lkdGggPSAwLjI1LCBhbHBoYSA9IDAuNSkgKwoKICBnZW9tX3NlZ21lbnQoZGF0YSA9IHJlc3VsdHMgJT4lIAogICAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogICAgICAgICAgICAgICAgc3VtbWFyaXplKG4gPSBuKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuID0gbWVhbih2aXMudHJ1c3RfNiksCiAgICAgICAgICAgIHNlID0gc2QoZGF0YS50cnVzdF82KS9zcXJ0KG4pKSwgCiAgICAgICAgICAgICAgYWVzKHggPSBtZWFuLCB4ZW5kID0gbWVhbiwgeSA9IC0uMjUsIHllbmQgPSAuMjUsICBjb2xvdXIgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSwgc2l6ZSA9IDEpICsKICAgICAgICAjIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9ICJtZWFuX2NsX2Jvb3QiLCBjb2xvdXIgPSAicmVkIiwgc2l6ZSA9IDAuNSwgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSh4PTAuMjUsIHk9MCksIGFscGhhPTAuNSkgKwoKICBnZW9tX3RleHQoIGRhdGEgPSByZXN1bHRzICU+JSAKICAgICAgICAgICAgICAgIGdyb3VwX2J5KGNvbXBsZXhpdHksIGlzQ292aWREYXRhKSAlPiUKICAgICAgICAgICAgICAgIHN1bW1hcml6ZShuID0gbigpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbiA9IHJvdW5kKG1lYW4odmlzLnRydXN0XzYpLGRpZ2l0cz0yKSwKICAgICAgICAgICAgc2UgPSByb3VuZChzZChkYXRhLnRydXN0XzYpL3NxcnQobiksZGlnaXRzPTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZpcy50cnVzdF82ID0gbWVhbih2aXMudHJ1c3RfNikpLAogICAgICAgICAgICAjIGFlcyhsYWJlbCA9IHBhc3RlKG1lYW4sICJbIixtZWFuLXNlLCIsIixtZWFuK3NlLCJdIiksIHggPSA2LjIsIHkgPSAwLjQzLCBmb250ZmFjZSA9IDMpLCBzaXplPTMsIGNvbG91ciA9ICJibGFjayIpKwogICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlKG1lYW4pLCB4ID0gbWVhbiwgeSA9IC4zNSwgZm9udGZhY2UgPSAzKSwgc2l6ZT00LCBjb2xvdXIgPSAiYmxhY2siKSsKCiAgZmFjZXRfZ3JpZChjb21wbGV4aXR5IH4gaXNDb3ZpZERhdGEpICsKICB4bGFiKCJUcnVzdCBpbiBWaXN1YWxpemF0aW9uIikgKwogIHRoZW1lX21pbmltYWwoKSArIAogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpKQoKCgpnZ3NhdmUocGFzdGUoImNvbXBsZXhpdHlfZGF0YVR5cGVfaW50ZXJhY3Rpb24ucGRmIiwgc2VwPSIiKSkKCmBgYAoKCmBgYHtyfQpyZXN1bHRzICU+JQogIGdyb3VwX2J5KGNvbXBsZXhpdHksIGlzQ292aWREYXRhKSAlPiUKICBzdW1tYXJpemUobiA9IG4oKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4odmlzLnRydXN0XzYpLAogICAgICAgICAgICBzZSA9IHNkKHZpcy50cnVzdF82KS9zcXJ0KG4pLAogICAgICAgICAgICBuID0gbikKYGBgCgpgYGB7cn0KIyByZXN1bHRzJGlzQ292aWREYXRhIDwtIGZhY3RvcihyZXN1bHRzJGlzQ292aWREYXRhLCBsZXZlbHMgPSBjKDAsIDEpLAojICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkNyb3AgRGF0YSIsICJDb3ZpZCBEYXRhIikpCgpyZXN1bHRzICU+JQogIGdncGxvdChhZXMoeCA9IGRhdGEudHJ1c3RfNiwgeSA9IDApKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygicHVycGxlIiwgIm9yYW5nZSIpKSArCiAgeWxpbSgtMC41LCAwLjUpICsKICBnZW9tX2ppdHRlcihkYXRhID0gcmVzdWx0cywgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjIsIGNvbG9yID0gImxpZ2h0IGdyYXkiLCBhbHBoYSA9IDAuNSkgKwogIGdlb21fYm94cGxvdChsd2QgPSAxLCBmYXR0ZW4gPSBOVUxMLCB3aWR0aCA9IDAuMjUsIGFscGhhID0gMC41LCBjb2xvciA9ICJzYWxtb24iKSArCiAgIyBsYWJzKHRpdGxlID0gIlRydXN0IGluIGRhdGEiKSArIAogIGdlb21fdmxpbmUoZGF0YSA9IHJlc3VsdHMgJT4lIAogICAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSkgJT4lCiAgICAgICAgICAgICAgICBzdW1tYXJpemUobiA9IG4oKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50cnVzdF82ID0gbWVhbihkYXRhLnRydXN0XzYpKSwgCiAgICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBkYXRhLnRydXN0XzYpLCBzaXplID0gMSxjb2xvdXIgPSAic2FsbW9uIikgKwogIGdlb21fdGV4dCggZGF0YSA9IHJlc3VsdHMgJT4lIAogICAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSkgJT4lCiAgICAgICAgICAgICAgICBzdW1tYXJpemUobiA9IG4oKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4gPSByb3VuZChtZWFuKGRhdGEudHJ1c3RfNiksZGlnaXRzPTIpLAogICAgICAgICAgICBzZSA9IHJvdW5kKHNkKGRhdGEudHJ1c3RfNikvc3FydChuKSxkaWdpdHM9MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzYgPSBtZWFuKHZpcy50cnVzdF82KSksCiAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlKG1lYW4sICJbIixtZWFuLXNlLCIsIixtZWFuK3NlLCJdIiksIHggPSA2LjgsIHkgPSAwLjQzLCBmb250ZmFjZSA9IDMpLCBzaXplPTMsIGNvbG91ciA9ICJibGFjayIpKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoY29tcGxleGl0eSkpICsKICB4bGFiKCJUcnVzdCBpbiBEYXRhIikgKwogIHRoZW1lX21pbmltYWwoKSArIAogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpKQoKZ2dzYXZlKHBhc3RlKCJjb21wbGV4aXR5X2ludGVyYWN0aW9uLnBkZiIsIHNlcD0iIikpCgpgYGAKCgpgYGB7cn0KcmVzdWx0cyAlPiUKICBncm91cF9ieShjb21wbGV4aXR5KSAlPiUKICBzdW1tYXJpemUobiA9IG4oKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4oZGF0YS50cnVzdF82KSwKICAgICAgICAgICAgc2UgPSBzZChkYXRhLnRydXN0XzYpL3NxcnQobiksCiAgICAgICAgICAgIG4gPSBuKQpgYGAKCkxpbmVhciBSZWdyZXNzaW9uIE1vZGVsIGZvciB0cnVzdCBpbiB2aXMgYXMgYSBmdW5jdGlvbiBvZiAKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSB2aXMudHJ1c3RfNiB+IGNvbXBsZXhpdHkgKiBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpICogY2hhcnRUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKCgpgYGAKCmBgYHtyfQojIHBvc3QtaG9jIHRlc3RzCmFvdih2aXMudHJ1c3RfNiB+IGNvbXBsZXhpdHkgKiBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpLCBkYXRhID0gcmVzdWx0cykgJT4lIHR1a2V5X2hzZCgpCiMgZWZmZWN0IHNpemVzCmV0YV9zcXVhcmVkKGFvdih2aXMudHJ1c3RfNiB+IGNvbXBsZXhpdHkgKiBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpICogY2hhcnRUeXBlICsgCiAgICAgICAgICAgICAgICAgICsgQWdlICsgYXMuZmFjdG9yKEdlbmRlcikgKyBTdGF0ZV8xICsgYXMuZmFjdG9yKEVkdWNhdGlvbikgKyBhcy5mYWN0b3IoUGFyZW50c19lZHVjYXRpb24pICsgYXMuZmFjdG9yKExhbmd1YWdlKSArIGFzLmZhY3RvcihFdGhuaWNpdHkpICsgYXMuZmFjdG9yKEluY29tZSkgKyBhcy5mYWN0b3IoUmVsaWdpb24pICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgCiAgICAgICAgICAgICAgICAgIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKSkKYGBgIAojIENvbGluZWFyaXR5IG9mIHRydXN0IGluIHZpcyBhbmQgdHJ1c3QgaW4gZGF0YQpgYGB7cn0KY29saW5lYXJpdHlfbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHRydXN0LmluLnNjaWVuY2VfNyB+IGFmZmVjdC5hZXN0aGV0aWNfMSArIGFmZmVjdC5jbGFyaXR5XzEgKyBhZmZlY3Quc2NpZW5jZV8xICsgdmlzLnRydXN0XzEgKyB2aXMudHJ1c3RfMiArIHZpcy50cnVzdF8zICsgdmlzLnRydXN0XzQgKyB2aXMudHJ1c3RfNSArIHZpcy50cnVzdF82ICsgZGF0YS50cnVzdF82ICsgZGF0YS50cnVzdF81ICsgZGF0YS50cnVzdF80ICsgZGF0YS50cnVzdF8zICsgZGF0YS50cnVzdF8yICsgZGF0YS50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKdmlmKGNvbGluZWFyaXR5X21vZGVsKQpgYGAKCnZpZihjb2xpbmVhcml0eV9tb2RlbClyZWxhdGlvbiBvZiB0cnVzdCBpbiB2aXMgYW5kIHRydXN0IGluIGRhdGEKYGBge3J9CmRhdGFfZnJhbWUgPSBkYXRhLmZyYW1lKHJlc3VsdHMkdmlzLnRydXN0XzEsIHJlc3VsdHMkdmlzLnRydXN0XzIsIHJlc3VsdHMkdmlzLnRydXN0XzMsIHJlc3VsdHMkdmlzLnRydXN0XzQsIHJlc3VsdHMkdmlzLnRydXN0XzUsIHJlc3VsdHMkdmlzLnRydXN0XzYsIHJlc3VsdHMkZGF0YS50cnVzdF8xLCByZXN1bHRzJGRhdGEudHJ1c3RfMiwgcmVzdWx0cyRkYXRhLnRydXN0XzMsIHJlc3VsdHMkZGF0YS50cnVzdF80LCByZXN1bHRzJGRhdGEudHJ1c3RfNSwgcmVzdWx0cyRkYXRhLnRydXN0XzYpCmNvcihkYXRhX2ZyYW1lKQpgYGAKCiMgVHJ1c3QgaW4gc2NpZW5jZSwgbmVlZCBmb3IgY29nbml0aW9uLCBhbmQgaW50ZXJwZXJzb25hbCB0cnVzdCBvbiB0cnVzdCBpbiBWaXMKYGBge3J9CnJlc3VsdHMgJT4lCiAgZ2F0aGVyKGtleSA9IHZhcmlhYmxlcywgdmFsdWUgPSB2YWx1ZXMsIAogICAgICAgICB0cnVzdC5pbi5zY2llbmNlXzcsIG5lZWRfZm9yX2NvZ25pdGlvbiwgaW50ZXJwZXJzb25hbC50cnVzdF8xKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB2YWx1ZXMsIHkgPSB2aXMudHJ1c3RfNiwgY29sb3IgPSB2YXJpYWJsZXMpKSArCgogIGZhY2V0X2dyaWQoY29scyA9IHZhcnModmFyaWFibGVzKSkgKwogICAgZ2VvbV9qaXR0ZXIoKSArCiAgZ2VvbV9zbW9vdGgoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9ibGFuaygpICsgCiAgIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGFuZWwuc3BhY2luZyA9IHVuaXQoMiwgImxpbmVzIikpCmBgYAoKCgoKCgpUcnVzdCBpbiBEYXRhCgpgYGB7cn0KcmVzdWx0cyAlPiUKICBnZ3Bsb3QoYWVzKHggPSBkYXRhLnRydXN0XzYsIHkgPSBpc0NvdmlkRGF0YSwgY29sb3VyID0gYXMuZmFjdG9yKGlzQ292aWREYXRhKSkpICsKICBnZW9tX2ppdHRlcihkYXRhID0gcmVzdWx0cywgd2lkdGggPSAwLjUpICsKICAjIGxhYnModGl0bGUgPSAiVHJ1c3QgaW4gZGF0YSIpICsgCiAgZ2VvbV92bGluZShkYXRhID0gcmVzdWx0cyAlPiUgCiAgICAgICAgICAgICAgICBncm91cF9ieShjb21wbGV4aXR5LCBpc0NvdmlkRGF0YSwgY2hhcnRUeXBlKSAlPiUKICAgICAgICAgICAgICAgIHN1bW1hcml6ZShuID0gbigpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnRydXN0XzYgPSBtZWFuKGRhdGEudHJ1c3RfNikpLCAKICAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IGRhdGEudHJ1c3RfNiwgY29sb3VyID0gYXMuZmFjdG9yKGlzQ292aWREYXRhKSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKGNvbXBsZXhpdHkpLCBjb2xzID0gdmFycyhjaGFydFR5cGUpKSArCiAgdGhlbWVfbWluaW1hbCgpCgpyZXN1bHRzICU+JSAKICBncm91cF9ieShjb21wbGV4aXR5LCBpc0NvdmlkRGF0YSkgJT4lCiAgc3VtbWFyaXplKG4gPSBuKCksIAogICAgICAgICAgICBtZWFuID0gbWVhbihkYXRhLnRydXN0XzYpLAogICAgICAgICAgICBzZSA9IHNkKGRhdGEudHJ1c3RfNikvc3FydChuKSwKICAgICAgICAgICAgbiA9IG4pCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBkYXRhLnRydXN0XzYgfiBjb21wbGV4aXR5ICogYXMuZmFjdG9yKGlzQ292aWREYXRhKSAqIGNoYXJ0VHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCgoKYGBgCgpgYGB7cn0KIyBwb3N0LWhvYyB0ZXN0cwphb3YoZGF0YS50cnVzdF82IH4gY29tcGxleGl0eSAqIGFzLmZhY3Rvcihpc0NvdmlkRGF0YSksIGRhdGEgPSByZXN1bHRzKSAlPiUgdHVrZXlfaHNkKCkKYW92KGRhdGEudHJ1c3RfNiB+IGNoYXJ0VHlwZSAqIGFzLmZhY3Rvcihpc0NvdmlkRGF0YSksIGRhdGEgPSByZXN1bHRzKSAlPiUgdHVrZXlfaHNkKCkKIyBlZmZlY3Qgc2l6ZXMKZXRhX3NxdWFyZWQoYW92KGRhdGEudHJ1c3RfNiB+IGNvbXBsZXhpdHkgKiBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpICogY2hhcnRUeXBlICsgCiAgICAgICAgICAgICAgICAgIEFnZSArIGFzLmZhY3RvcihHZW5kZXIpICsgU3RhdGVfMSArIGFzLmZhY3RvcihFZHVjYXRpb24pICsgYXMuZmFjdG9yKFBhcmVudHNfZWR1Y2F0aW9uKSArIGFzLmZhY3RvcihMYW5ndWFnZSkgKyAKICAgICAgICAgICAgICAgICAgYXMuZmFjdG9yKEV0aG5pY2l0eSkgKyBhcy5mYWN0b3IoSW5jb21lKSArIGFzLmZhY3RvcihSZWxpZ2lvbikgKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyAKICAgICAgICAgICAgICAgICAgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpKQplbW1lYW5zKGFvdihkYXRhLnRydXN0XzYgfiBjb21wbGV4aXR5ICwgZGF0YSA9IHJlc3VsdHMpICwgfiBjb21wbGV4aXR5KQpgYGAKClRydXN0IGluIHNjaWVuY2UsIG5lZWQgZm9yIGNvZ25pdGlvbiwgYW5kIGludGVycGVyc29uYWwgdHJ1c3Qgb24gdHJ1c3QgaW4gRGF0YQpgYGB7cn0KcmVzdWx0cyAlPiUKICBnYXRoZXIoa2V5ID0gdmFyaWFibGVzLCB2YWx1ZSA9IHZhbHVlcywgCiAgICAgICAgIHRydXN0LmluLnNjaWVuY2VfNywgbmVlZF9mb3JfY29nbml0aW9uLCBpbnRlcnBlcnNvbmFsLnRydXN0XzEpICU+JQogIGdncGxvdChhZXMoeCA9IHZhbHVlcywgeSA9IGRhdGEudHJ1c3RfNiwgY29sb3IgPSB2YXJpYWJsZXMpKSArCgogIGZhY2V0X2dyaWQoY29scyA9IHZhcnModmFyaWFibGVzKSkgKwogICAgZ2VvbV9qaXR0ZXIoKSArCiAgZ2VvbV9zbW9vdGgoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV9ibGFuaygpICsgCiAgIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGFuZWwuc3BhY2luZyA9IHVuaXQoMiwgImxpbmVzIikpCmBgYAoKCgoKCgoKCgoKCgoKCgoKCgpgYGB7cn0KcmVzdWx0c19sb25nX2RhdGEgPC0gcmVzdWx0cyAlPiUKICBzZWxlY3QoZGF0YS50cnVzdF8xLCBkYXRhLnRydXN0XzIsIGRhdGEudHJ1c3RfMywKICAgICAgICAgZGF0YS50cnVzdF80LCBkYXRhLnRydXN0XzUsIGRhdGEudHJ1c3RfNiwKICAgICAgICAgUmVzcG9uc2VJZCwgY29tcGxleGl0eSwKICAgICAgICAgdmxhdF9zaW1wbGUsIHZsYXRfbW9kZXJhdGUsIHZsYXRfY29tcGxleCkgJT4lCiAgZ2F0aGVyKGtleSA9IHRydXN0SXRlbURhdGEsIHZhbHVlID0gdHJ1c3RSYXRpbmdEYXRhLCAKICAgICAgICAgZGF0YS50cnVzdF8xLCBkYXRhLnRydXN0XzIsIGRhdGEudHJ1c3RfMywgZGF0YS50cnVzdF80LCBkYXRhLnRydXN0XzUsIGRhdGEudHJ1c3RfNikKCnJlc3VsdHNfbG9uZ19kYXRhICU+JQogIGdncGxvdChhZXMoeCA9IHRydXN0UmF0aW5nRGF0YSwgeSA9IDEsIGNvbG9yID0gY29tcGxleGl0eSkpICsKICBnZW9tX2ppdHRlcigpICsKICB5bGltKDAsIDIpICsgCiAgbGFicyh0aXRsZSA9ICJUcnVzdCBpbiBkYXRhIChBbGwpIikgKyAKICBnZW9tX3ZsaW5lKGRhdGEgPSByZXN1bHRzX2xvbmdfZGF0YSAlPiUgCiAgICAgICAgICAgICAgIGdyb3VwX2J5KGNvbXBsZXhpdHksIHRydXN0SXRlbURhdGEpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpemUobiA9IG4oKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBhdmVyYWdlID0gbWVhbih0cnVzdFJhdGluZ0RhdGEpKSwgCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IGF2ZXJhZ2UsIGNvbG9yID0gY29tcGxleGl0eSkpICsKICBmYWNldF9ncmlkKHZhcnModHJ1c3RJdGVtRGF0YSkpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgoKIyBSZWxhdGlvbnNoaXAgYmV0d2VlbiB0cnVzdCBpbiBkYXRhIGFuZCB2aXMsIGFjcm9zcyBjb21wbGV4aXR5CgpgYGB7cn0KcmVzdWx0c19sb25nX2RhdGEgPC0gcmVzdWx0cyAlPiUKICBzZWxlY3QoZGF0YS50cnVzdF8xLCBkYXRhLnRydXN0XzIsIGRhdGEudHJ1c3RfMywKICAgICAgICAgZGF0YS50cnVzdF80LCBkYXRhLnRydXN0XzUsIGRhdGEudHJ1c3RfNiwKICAgICAgICAgUmVzcG9uc2VJZCwgY29tcGxleGl0eSwKICAgICAgICAgY2hhcnRUeXBlLCBpc0NvdmlkRGF0YSwgCiAgICAgICAgIHZsYXRfc2ltcGxlLCB2bGF0X21vZGVyYXRlLCB2bGF0X2NvbXBsZXgpICU+JQogIGdhdGhlcihrZXkgPSB0cnVzdEl0ZW1EYXRhLCB2YWx1ZSA9IHRydXN0UmF0aW5nRGF0YSwgCiAgICAgICAgICMgZGF0YS50cnVzdF8xLCBkYXRhLnRydXN0XzIsIGRhdGEudHJ1c3RfMywgZGF0YS50cnVzdF80LCBkYXRhLnRydXN0XzUsIAogICAgICAgICBkYXRhLnRydXN0XzYpCgpyZXN1bHRzX2xvbmdfdmlzIDwtIHJlc3VsdHMgJT4lCiAgZ2F0aGVyKGtleSA9IHRydXN0SXRlbVZpcywgdmFsdWUgPSB0cnVzdFJhdGluZ1ZpcywgCiAgICAgICAgICMgdmlzLnRydXN0XzEsIHZpcy50cnVzdF8yLCB2aXMudHJ1c3RfMywgdmlzLnRydXN0XzQsIHZpcy50cnVzdF81LCAKICAgICAgICAgdmlzLnRydXN0XzYpCgpyZXN1bHRzX2xvbmdfYWxsIDwtIG1lcmdlKHJlc3VsdHNfbG9uZ192aXMsIHJlc3VsdHNfbG9uZ19kYXRhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9IGMoIlJlc3BvbnNlSWQiLCAiY29tcGxleGl0eSIsICJjaGFydFR5cGUiLCAiaXNDb3ZpZERhdGEiKSkKCm1vZGVsPC0gZ2xtKHRydXN0UmF0aW5nVmlzIH4gIHRydXN0UmF0aW5nRGF0YSAqIGNvbXBsZXhpdHkgKyAKICAgICAgICAgICAgICB0cnVzdFJhdGluZ0RhdGEgKiAgY2hhcnRUeXBlICsgCiAgICAgICAgICAgICAgdHJ1c3RSYXRpbmdEYXRhICogIGFzLmZhY3Rvcihpc0NvdmlkRGF0YSksCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcmVzdWx0c19sb25nX2FsbCkKQW5vdmEobW9kZWwpCmBgYAoKYGBge3J9CnJlc3VsdHNfbG9uZ19hbGwgJT4lCiAgIyBmaWx0ZXIodHJ1c3RJdGVtVmlzID09ICJiYXIudmlzXzIiKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0cnVzdFJhdGluZ1ZpcywgeSA9IHRydXN0UmF0aW5nRGF0YSwgY29sb3IgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSkgKwogIHN0YXRfc21vb3RoKG1ldGhvZCA9ICJsbSIsCiAgICAgICAgICAgICAgZm9ybXVsYSA9IHkgfiB4LAogICAgICAgICAgICAgIGdlb20gPSAic21vb3RoIiwgY29sb3IgPSAiYmxhY2siKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV3dGVlbiB0cnVzdCBpbiBWaXMgYW5kIERhdGEiKSArIAogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoY2hhcnRUeXBlKSwgY29scyA9IHZhcnMoY29tcGxleGl0eSkpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgoKCiMgRG8gdGhlIHRydXN0IGl0ZW1zIHByZWRpY3QgdHJ1c3Q/CgoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSB2aXMudHJ1c3RfNiB+IHZpcy50cnVzdF8xICsgCiAgICAgICAgICAgICAgdmlzLnRydXN0XzIgKyAKICAgICAgICAgICAgICB2aXMudHJ1c3RfMyArIAogICAgICAgICAgICAgIHZpcy50cnVzdF80ICsgCiAgICAgICAgICAgICAgdmlzLnRydXN0XzUgKyAKICAgICAgICAgICAgICBhZmZlY3Quc2NpZW5jZV8xICsKICAgICAgICAgICAgICBhZmZlY3QuY2xhcml0eV8xICsgCiAgICAgICAgICAgICAgYWZmZWN0LmFlc3RoZXRpY18xICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKc3VtbWFyeShtb2RlbCkKYGBgCgoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBkYXRhLnRydXN0XzYgfiBkYXRhLnRydXN0XzEgKyAKICAgICAgICAgICAgICBkYXRhLnRydXN0XzIgKyAKICAgICAgICAgICAgICBkYXRhLnRydXN0XzMgKyAKICAgICAgICAgICAgICBkYXRhLnRydXN0XzQgKyAKICAgICAgICAgICAgICBkYXRhLnRydXN0XzUgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQpzdW1tYXJ5KG1vZGVsKQpgYGAKCiMgV2hpY2ggdHJ1c3QgbWVhc3VyZW1lbnRzIHByZWRpY3QgYmVoYXZpb3JhbCBvdXRjb21lcz8KCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gdmlzLnRydXN0XzQgfiB2aXMudHJ1c3RfMSArIAogICAgICAgICAgICAgIHZpcy50cnVzdF8yICsgCiAgICAgICAgICAgICAgdmlzLnRydXN0XzMgKwogICAgICAgICAgICAgIHZpcy50cnVzdF82ICsKICAgICAgICAgICAgICBhZmZlY3Quc2NpZW5jZV8xICsKICAgICAgICAgICAgICBhZmZlY3QuY2xhcml0eV8xICsgCiAgICAgICAgICAgICAgYWZmZWN0LmFlc3RoZXRpY18xICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKc3VtbWFyeShtb2RlbCkKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF81IH4gdmlzLnRydXN0XzEgKyAKICAgICAgICAgICAgICB2aXMudHJ1c3RfMiArIAogICAgICAgICAgICAgIHZpcy50cnVzdF8zICsKICAgICAgICAgICAgICB2aXMudHJ1c3RfNiArCiAgICAgICAgICAgICAgYWZmZWN0LnNjaWVuY2VfMSArCiAgICAgICAgICAgICAgYWZmZWN0LmNsYXJpdHlfMSArIAogICAgICAgICAgICAgIGFmZmVjdC5hZXN0aGV0aWNfMSArCiAgICAgICAgICAgICAgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyAKICAgICAgICAgICAgICBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIAogICAgICAgICAgICAgIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCnN1bW1hcnkobW9kZWwpCmBgYAoKCmBgYHtyfQpyZXN1bHRzICU+JQogIGdncGxvdChhZXMoeCA9IGRhdGEudHJ1c3RfMSwgeSA9IGRhdGEudHJ1c3RfNiwgY29sb3IgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGdlb21faml0dGVyKCkgKwogIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iKSArCiAgZmFjZXRfd3JhcCh+aXNDb3ZpZERhdGEpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgoKCgoKCgoKCkhvdyBkb2VzIHBlcmZvcm1hbmNlIG9uIFZMQVQgcXVlc3Rpb25zIHByZWRpY3QgdHJ1c3Q/CgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF82IH4gdmxhdF9zaW1wbGUgKiB2bGF0X21vZGVyYXRlICogdmxhdF9jb21wbGV4ICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCgplbW1lYW5zKGFvdih2aXMudHJ1c3RfNiB+IHZsYXRfc2ltcGxlICogdmxhdF9jb21wbGV4ICwgZGF0YSA9IHJlc3VsdHMpICwgfiB2bGF0X3NpbXBsZSB8IHZsYXRfY29tcGxleCkKYGBgCgpgYGB7cn0KcmVzdWx0cyAlPiUKICBnYXRoZXIoa2V5ID0gdmxhdF9sZXZlbCwgdmFsdWUgPSB2bGF0X3BlcmZvcm1hbmNlLCB2bGF0X3NpbXBsZSwgIHZsYXRfbW9kZXJhdGUsIHZsYXRfY29tcGxleCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdmlzLnRydXN0XzYsIHkgPSB2bGF0X3BlcmZvcm1hbmNlLCBjb2xvdXIgPSBhcy5mYWN0b3IoYXNzaWduZWRfdmxhdCkpKSArCiAgZ2VvbV9qaXR0ZXIod2lkdGggPSAwLjUpICsKICAjIHkoMCwgMikgKyAKICAjIGxhYnModGl0bGUgPSAiVHJ1c3QgaW4gZGF0YSIpICsgCiAgIyBnZW9tX3ZsaW5lKGRhdGEgPSByZXN1bHRzICU+JSAKICAjICAgICAgICAgICAgICBncm91cF9ieShjb21wbGV4aXR5LCBpc0NvdmlkRGF0YSkgJT4lCiAgIyAgICAgICAgICAgICAgc3VtbWFyaXplKG4gPSBuKCksIAogICMgICAgICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfNiA9IG1lYW4odmlzLnRydXN0XzYpKSwgCiAgIyAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gdmlzLnRydXN0XzYsIGNvbG91ciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyh2bGF0X2xldmVsKSwgY29scyA9IHZhcnMoY2hhcnRUeXBlKSkgKwogIHRoZW1lX21pbmltYWwoKSArIAogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpKQogICAgICAgICMgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCgpPdmVyYWxsIGRpc3RyaWJ1dGlvbiBvZiBWTEFUIHBlcmZvcm1hbmNlCgpUcnVzdCBpbiBWaXMgCmBgYHtyfQojIHZsYXRfbG9uZyA8LSByZXN1bHRzICU+JQojICAgZ2F0aGVyKGtleSA9IHZsYXRfbGV2ZWwsIHZhbHVlID0gdmxhdF9wZXJmb3JtYW5jZSwgdmxhdF9zaW1wbGUsICB2bGF0X21vZGVyYXRlLCB2bGF0X2NvbXBsZXgpIAojIAojIG1vZGVsIDwtIGxtZXIoZm9ybXVsYSA9IHZsYXRfcGVyZm9ybWFuY2UgfiB2bGF0X2xldmVsICogaXNDb3ZpZERhdGEgKiBjaGFydFR5cGUgKwojICAgICAgICAgICAgICAgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyAKIyAgICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiMgICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgKyAoMXxSZXNwb25zZUlkKSwKIyAgICAgICAgICAgICBkYXRhID0gdmxhdF9sb25nKQojIEFub3ZhKG1vZGVsKQojIAojIGVtbWVhbnMoYW92KHZsYXRfcGVyZm9ybWFuY2UgfiB2bGF0X2xldmVsICwgZGF0YSA9IHJlc3VsdHMpICwgfiB2bGF0X3NpbXBsZSB8IHZsYXRfY29tcGxleCkKIyAKIyAjIHBvc3QtaG9jIHRlc3RzCiMgYW92KHZsYXRfcGVyZm9ybWFuY2UgfiB2bGF0X2xldmVsICogYXMuZmFjdG9yKGlzQ292aWREYXRhKSwgZGF0YSA9IHZsYXRfbG9uZykgJT4lIHR1a2V5X2hzZCgpCmBgYAoKYGBge3J9CnJlc3VsdHMgJT4lCiAgZ2F0aGVyKGtleSA9IHZsYXRfbGV2ZWwsIHZhbHVlID0gdmxhdF9wZXJmb3JtYW5jZSwgdmxhdF9zaW1wbGUsICB2bGF0X21vZGVyYXRlLCB2bGF0X2NvbXBsZXgpICU+JQogIGdyb3VwX2J5KHZsYXRfbGV2ZWwsIGNoYXJ0VHlwZSwgaXNDb3ZpZERhdGEpICU+JQogIHN1bW1hcml6ZShuID0gbigpLAogICAgICAgICAgICBtZWFuX3ZsYXRfcGVyZm9ybWFuY2UgPSBtZWFuKHZsYXRfcGVyZm9ybWFuY2UpLAogICAgICAgICAgICBzZSA9IHNkKHZsYXRfcGVyZm9ybWFuY2UpL3NxcnQobiksCiAgICAgICAgICAgIG4gPSBuKCkpICU+JQogIGdncGxvdChhZXMoeCA9IHZsYXRfbGV2ZWwsIHkgPSBtZWFuX3ZsYXRfcGVyZm9ybWFuY2UsIAogICAgICAgICAgICAgeW1heCA9IG1lYW5fdmxhdF9wZXJmb3JtYW5jZSArIHNlLCB5bWluID0gbWVhbl92bGF0X3BlcmZvcm1hbmNlIC0gc2UsCiAgICAgICAgICAgICBjb2xvdXIgPSB2bGF0X2xldmVsKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9lcnJvcmJhcigpICsKICAjIGxhYnModGl0bGUgPSAiVHJ1c3QgaW4gZGF0YSIpICsgCiAgIyBnZW9tX3ZsaW5lKGRhdGEgPSByZXN1bHRzICU+JSAKICAjICAgICAgICAgICAgICBncm91cF9ieShjb21wbGV4aXR5LCBpc0NvdmlkRGF0YSkgJT4lCiAgIyAgICAgICAgICAgICAgc3VtbWFyaXplKG4gPSBuKCksIAogICMgICAgICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfNiA9IG1lYW4odmlzLnRydXN0XzYpKSwgCiAgIyAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gdmlzLnRydXN0XzYsIGNvbG91ciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhpc0NvdmlkRGF0YSkpICsKICB0aGVtZV9taW5pbWFsKCkgKyAKICB0aGVtZShwYW5lbC5zcGFjaW5nID0gdW5pdCgyLCAibGluZXMiKSkKICAgICAgICAjIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgoKVHJ1c3QgaW4gRGF0YQoKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZGF0YS50cnVzdF82IH4gdmxhdF9zaW1wbGUgKiB2bGF0X21vZGVyYXRlICogdmxhdF9jb21wbGV4ICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCgplbW1lYW5zKGFvdihkYXRhLnRydXN0XzYgfiB2bGF0X3NpbXBsZSAqIHZsYXRfY29tcGxleCAsIGRhdGEgPSByZXN1bHRzKSAsIH4gdmxhdF9zaW1wbGUgfCB2bGF0X2NvbXBsZXgpCmBgYAoKCgoKCgoKCgoKIyBXaGljaCBhbnRlY2VkZW50IGRyaXZlcyB0aGUgaW50ZXJhY3Rpb24gZWZmZWN0IGZvciB0cnVzdCBpbiB2aXN1YWxpemF0aW9uIGZvciBjb3ZpZCBkYXRhPwoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSB2aXMudHJ1c3RfMSB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMgJT4lIGZpbHRlcihpc0NvdmlkRGF0YSA9PSAxKSkKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSB2aXMudHJ1c3RfMiB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMgJT4lIGZpbHRlcihpc0NvdmlkRGF0YSA9PSAxKSkKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSB2aXMudHJ1c3RfMyB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMgJT4lIGZpbHRlcihpc0NvdmlkRGF0YSA9PSAxKSkKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBhZmZlY3Quc2NpZW5jZV8xIH4gY29tcGxleGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cyAlPiUgZmlsdGVyKGlzQ292aWREYXRhID09IDEpKQphbm92YShtb2RlbCkKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGFmZmVjdC5jbGFyaXR5XzEgfiBjb21wbGV4aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzICU+JSBmaWx0ZXIoaXNDb3ZpZERhdGEgPT0gMSkpCmFub3ZhKG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gYWZmZWN0LmFlc3RoZXRpY18xIH4gY29tcGxleGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cyAlPiUgZmlsdGVyKGlzQ292aWREYXRhID09IDEpKQphbm92YShtb2RlbCkKYGBgCgojIFdoaWNoIGFudGVjZWRlbnQgZHJpdmVzIHRoZSBtYWluIGVmZmVjdCBmb3IgdHJ1c3QgaW4gZGF0YT8KCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZGF0YS50cnVzdF8xIH4gY29tcGxleGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBkYXRhLnRydXN0XzIgfiBjb21wbGV4aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGRhdGEudHJ1c3RfMyB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCmFub3ZhKG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZGF0YS50cnVzdF80IH4gY29tcGxleGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBkYXRhLnRydXN0XzUgfiBjb21wbGV4aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKYGBgCgojIEhvdyBkb2VzIHByb3ZlbmFuY2UgZGF0YSBwcmVkaWN0IHRydXN0PwoKT3ZlcmFsbAoKYGBge3J9CmJydXNoZWQgPC0gcmVzdWx0cyAlPiUKICBnYXRoZXIoa2V5ID0gcHJvdmVuYW5jZV90eXBlLCB2YWx1ZSA9IHByb3ZlbmFuY2VfdmFsdWUsIGJydXNoZWQsIGV4cGxvcmVfaW50ZXJhY3Rpb25zLCBleHBsb3JlX3RpbWUpICU+JQogIGdyb3VwX2J5KHByb3ZlbmFuY2VfdHlwZSwgY2hhcnRUeXBlLCBpc0NvdmlkRGF0YSwgY29tcGxleGl0eSkgJT4lCiAgc3VtbWFyaXplKG4gPSBuKCksIAogICAgICAgICAgICBtZWFuID0gbWVhbihwcm92ZW5hbmNlX3ZhbHVlKSwgCiAgICAgICAgICAgIHNlID0gc2QocHJvdmVuYW5jZV92YWx1ZSkvc3FydChuKSwKICAgICAgICAgICAgbiA9IG4pICU+JQogIGZpbHRlcihwcm92ZW5hbmNlX3R5cGUgPT0gImJydXNoZWQiKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm92ZW5hbmNlX3R5cGUsIHkgPSBtZWFuLCB5bWF4ID0gbWVhbiArIHNlLCB5bWluID0gbWVhbiAtIHNlLCBjb2xvciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuNSkpICsKICBnZW9tX2Vycm9yYmFyKHdpZHRoID0gMC41LCBzaXplID0gMC42NiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhjb21wbGV4aXR5KSwgY29scyA9IHZhcnMoaXNDb3ZpZERhdGEpKSArIAogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGFuZWwuc3BhY2luZyA9IHVuaXQoMiwgImxpbmVzIikpCmJydXNoZWQKCmludGVyYWN0aW9ucyA8LSByZXN1bHRzICU+JQogIGdhdGhlcihrZXkgPSBwcm92ZW5hbmNlX3R5cGUsIHZhbHVlID0gcHJvdmVuYW5jZV92YWx1ZSwgYnJ1c2hlZCwgZXhwbG9yZV9pbnRlcmFjdGlvbnMsIGV4cGxvcmVfdGltZSkgJT4lCiAgZ3JvdXBfYnkocHJvdmVuYW5jZV90eXBlLCBjaGFydFR5cGUsIGlzQ292aWREYXRhLCBjb21wbGV4aXR5KSAlPiUKICBzdW1tYXJpemUobiA9IG4oKSwgCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHByb3ZlbmFuY2VfdmFsdWUpLCAKICAgICAgICAgICAgc2UgPSBzZChwcm92ZW5hbmNlX3ZhbHVlKS9zcXJ0KG4pLAogICAgICAgICAgICBuID0gbikgJT4lCiAgZmlsdGVyKHByb3ZlbmFuY2VfdHlwZSA9PSAiZXhwbG9yZV9pbnRlcmFjdGlvbnMiKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm92ZW5hbmNlX3R5cGUsIHkgPSBtZWFuLCB5bWF4ID0gbWVhbiArIHNlLCB5bWluID0gbWVhbiAtIHNlLCBjb2xvciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuNSkpICsKICBnZW9tX2Vycm9yYmFyKHdpZHRoID0gMC41LCBzaXplID0gMC42NiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhjb21wbGV4aXR5KSwgY29scyA9IHZhcnMoY2hhcnRUeXBlKSkgKyAKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpKQppbnRlcmFjdGlvbnMKCmV4cGxvcmVUaW1lIDwtIHJlc3VsdHMgJT4lCiAgZ2F0aGVyKGtleSA9IHByb3ZlbmFuY2VfdHlwZSwgdmFsdWUgPSBwcm92ZW5hbmNlX3ZhbHVlLCBicnVzaGVkLCBleHBsb3JlX2ludGVyYWN0aW9ucywgZXhwbG9yZV90aW1lKSAlPiUKICBncm91cF9ieShwcm92ZW5hbmNlX3R5cGUsIGNoYXJ0VHlwZSwgaXNDb3ZpZERhdGEsIGNvbXBsZXhpdHkpICU+JQogIHN1bW1hcml6ZShuID0gbigpLCAKICAgICAgICAgICAgbWVhbiA9IG1lYW4ocHJvdmVuYW5jZV92YWx1ZSksIAogICAgICAgICAgICBzZSA9IHNkKHByb3ZlbmFuY2VfdmFsdWUpL3NxcnQobiksCiAgICAgICAgICAgIG4gPSBuKSAlPiUKICBmaWx0ZXIocHJvdmVuYW5jZV90eXBlID09ICJleHBsb3JlX3RpbWUiKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwcm92ZW5hbmNlX3R5cGUsIHkgPSBtZWFuLCB5bWF4ID0gbWVhbiArIHNlLCB5bWluID0gbWVhbiAtIHNlLCBjb2xvciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlMih3aWR0aCA9IDAuNSkpICsKICBnZW9tX2Vycm9yYmFyKHdpZHRoID0gMC41LCBzaXplID0gMC42NiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhjaGFydFR5cGUpLCBjb2xzID0gdmFycyhjb21wbGV4aXR5KSkgKyAKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpKQpleHBsb3JlVGltZQoKZXhwbG9yZVRpbWUgKyBpbnRlcmFjdGlvbnMgKyBicnVzaGVkCmdnc2F2ZSgicHJvdmVuYW5jZVJlc3VsdHMucG5nIiwgd2lkdGggPSAyNiwgaGVpZ2h0ID0gMTQpCmBgYApleHBsb3JlX2ludGVyYWN0aW9ucwoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBleHBsb3JlX2ludGVyYWN0aW9ucyB+IGNvbXBsZXhpdHkgKiBjaGFydFR5cGUgKiBpc0NvdmlkRGF0YSArCiAgICAgICAgICAgICAgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyAKICAgICAgICAgICAgICBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIAogICAgICAgICAgICAgIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCmFub3ZhKG1vZGVsKQpgYGAKCmV4cGxvcmVfdGltZQoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBleHBsb3JlX3RpbWUgfiBjb21wbGV4aXR5ICogY2hhcnRUeXBlICogaXNDb3ZpZERhdGEgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKYGBgCgoKCkh5cG90aGVzaXM6CmZvciB0aGUgY29tcGxleCBjb25kaXRpb24sIHdlIGV4cGVjdCBwZW9wbGUgd2hvIGJydXNoZWQgbW9yZSB0byBoYXZlIGhpZ2hlciB0cnVzdAoKYGBge3J9CmNvbXBsZXhDb25kaXRpb24gPC0gcmVzdWx0cyAlPiUKICBmaWx0ZXIoY29tcGxleGl0eSA9PSAiY29tcGxleCIpCgojIGNhbiBjaGFuZ2UgdGhlIHByZWRpY3RvciB0byBiYXIudmlzCm1vZGVsPC0gbWFub3ZhKGNiaW5kKGRhdGEudHJ1c3RfMSwgCiAgICAgICAgICAgICAgICAgICAgIGRhdGEudHJ1c3RfMiwgCiAgICAgICAgICAgICAgICAgICAgIGRhdGEudHJ1c3RfMywgCiAgICAgICAgICAgICAgICAgICAgIGRhdGEudHJ1c3RfNCwgCiAgICAgICAgICAgICAgICAgICAgIGRhdGEudHJ1c3RfNSwgCiAgICAgICAgICAgICAgICAgICAgIGRhdGEudHJ1c3RfNikgfiBicnVzaGVkICsgZXhwbG9yZV9pbnRlcmFjdGlvbnMgKyBleHBsb3JlX3RpbWUsIAogICAgICAgICAgICAgICBkYXRhID0gY29tcGxleENvbmRpdGlvbikKc3VtbWFyeS5hb3YobW9kZWwpCmBgYAoKSHlwb3RoZXNpczoKZm9yIGFsbCB0aGUgY29uZGl0aW9ucywgd2UgZXhwZWN0IHBlb3BsZSB3aG8gaG92ZXJlZCBtb3JlIHRvIGhhdmUgaGlnaGVyIHRydXN0CgoKYGBge3J9CiMgY2FuIGNoYW5nZSB0aGUgcHJlZGljdG9yIHRvIGJhci52aXMKbW9kZWw8LSBtYW5vdmEoY2JpbmQodmlzLnRydXN0XzYsIAogICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfNSwgCiAgICAgICAgICAgICAgICAgICAgIHZpcy50cnVzdF80LCAKICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzMsIAogICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfMiwgCiAgICAgICAgICAgICAgICAgICAgIHZpcy50cnVzdF8xKSB+IGJydXNoZWQgKyBleHBsb3JlX2ludGVyYWN0aW9ucyArIGV4cGxvcmVfdGltZSwgCiAgICAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQpzdW1tYXJ5LmFvdihtb2RlbCkKYGBgCgoKCiMgQWZmZWN0IG9uIFRydXN0IHtpdCdzIG93biBzZWN0aW9ufQoKYGBge3J9CnJlc3VsdHMgJT4lCiAgZ2F0aGVyKGtleSA9IGFmZmVjdHMsIHZhbHVlID0gYWZmZWN0UmF0aW5ncywgYWZmZWN0LnNjaWVuY2VfMSwgIGFmZmVjdC5jbGFyaXR5XzEsIGFmZmVjdC5hZXN0aGV0aWNfMSkgJT4lCiAgZ3JvdXBfYnkoYWZmZWN0cywgY2hhcnRUeXBlLCBpc0NvdmlkRGF0YSwgY29tcGxleGl0eSkgJT4lCiAgc3VtbWFyaXplKG4gPSBuKCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKGFmZmVjdFJhdGluZ3MpLAogICAgICAgICAgICBzZSA9IHNkKGFmZmVjdFJhdGluZ3MpL3NxcnQobiksCiAgICAgICAgICAgIG4gPSBuKCkpICU+JQogIGdncGxvdChhZXMoeCA9IGFmZmVjdHMsIHkgPSBtZWFuLCAKICAgICAgICAgICAgIHltYXggPSBtZWFuICsgc2UsIHltaW4gPSBtZWFuIC0gc2UsCiAgICAgICAgICAgICBjb2xvdXIgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjUpKSArCiAgZ2VvbV9lcnJvcmJhcih3aWR0aCA9IDAuNSwgc2l6ZSA9IDAuNjYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogICMgbGFicyh0aXRsZSA9ICJUcnVzdCBpbiBkYXRhIikgKyAKICAjIGdlb21fdmxpbmUoZGF0YSA9IHJlc3VsdHMgJT4lIAogICMgICAgICAgICAgICAgIGdyb3VwX2J5KGNvbXBsZXhpdHksIGlzQ292aWREYXRhKSAlPiUKICAjICAgICAgICAgICAgICBzdW1tYXJpemUobiA9IG4oKSwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAgIHZpcy50cnVzdF82ID0gbWVhbih2aXMudHJ1c3RfNikpLCAKICAjICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSB2aXMudHJ1c3RfNiwgY29sb3VyID0gYXMuZmFjdG9yKGlzQ292aWREYXRhKSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKGNoYXJ0VHlwZSksIGNvbHMgPSB2YXJzKGNvbXBsZXhpdHkpKSArCiAgdGhlbWVfbWluaW1hbCgpICsgCiAgdGhlbWUocGFuZWwuc3BhY2luZyA9IHVuaXQoMiwgImxpbmVzIikpCiAgICAgICAgIyBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmdnc2F2ZSgiYWZmZWN0TWVhc3VyZXMucG5nIiwgd2lkdGggPSAxNywgaGVpZ2h0ID0gOSkKYGBgCgoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBhZmZlY3Quc2NpZW5jZV8xIH4gY29tcGxleGl0eSAqIGNoYXJ0VHlwZSAqIGlzQ292aWREYXRhICsKICAgICAgICAgICAgICBBZ2UgKyBhcy5mYWN0b3IoR2VuZGVyKSArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGFmZmVjdC5jbGFyaXR5XzEgfiBjb21wbGV4aXR5ICogY2hhcnRUeXBlICogaXNDb3ZpZERhdGEgKwogICAgICAgICAgICAgIEFnZSArIGFzLmZhY3RvcihHZW5kZXIpICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyAKICAgICAgICAgICAgICBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIAogICAgICAgICAgICAgIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCmFub3ZhKG1vZGVsKQpzdW1tYXJ5KG1vZGVsKQpgYGAKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBhZmZlY3QuYWVzdGhldGljXzEgfiBjb21wbGV4aXR5ICogY2hhcnRUeXBlICogaXNDb3ZpZERhdGEgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKc3VtbWFyeShtb2RlbCkKYGBgCgpUcnVzdCBpbiBWaXMKCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF82IH4gYWZmZWN0LnNjaWVuY2VfMSAqIGFmZmVjdC5jbGFyaXR5XzEgKiBhZmZlY3QuYWVzdGhldGljXzEgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKc3VtbWFyeShtb2RlbCkKCmVtbWVhbnMoYW92KHZpcy50cnVzdF82IH4gYWZmZWN0LnNjaWVuY2VfMSAqIGFmZmVjdC5jbGFyaXR5XzEgLCBkYXRhID0gcmVzdWx0cykgLCB+IGFmZmVjdC5jbGFyaXR5XzEpCmBgYAoKClRydXN0IGluIERhdGEKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZGF0YS50cnVzdF82IH4gYWZmZWN0LnNjaWVuY2VfMSAqIGFmZmVjdC5jbGFyaXR5XzEgKiBhZmZlY3QuYWVzdGhldGljXzEgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKCmVtbWVhbnMoYW92KGRhdGEudHJ1c3RfNiB+IGFmZmVjdC5zY2llbmNlXzEgKiBhZmZlY3QuY2xhcml0eV8xICwgZGF0YSA9IHJlc3VsdHMpICwgfiBhZmZlY3QuY2xhcml0eV8xKQpgYGAKCgoKCgoKCgoKCiMgRmFjdG9yIEFuYWx5c2lzIAoKCmBgYHtyfQpmYWN0b3JBbmFseXNpcyA8LSByZXN1bHRzICU+JQogIHNlbGVjdChkYXRhLnRydXN0XzEsIGRhdGEudHJ1c3RfMiwgZGF0YS50cnVzdF8zLCBkYXRhLnRydXN0XzQsIGRhdGEudHJ1c3RfNSwgZGF0YS50cnVzdF82LAogICAgICAgICB2aXMudHJ1c3RfMSwgdmlzLnRydXN0XzIsIHZpcy50cnVzdF8zLCB2aXMudHJ1c3RfNCwgdmlzLnRydXN0XzUsIHZpcy50cnVzdF82LAogICAgICAgICB0cnVzdC5pbi5zY2llbmNlXzEsIHRydXN0LmluLnNjaWVuY2VfMiwgdHJ1c3QuaW4uc2NpZW5jZV8zLCB0cnVzdC5pbi5zY2llbmNlXzQsIHRydXN0LmluLnNjaWVuY2VfNSwKICAgICAgICAgdHJ1c3QuaW4uc2NpZW5jZV82LCB0cnVzdC5pbi5zY2llbmNlXzcsIHRydXN0LmluLnNjaWVuY2VfOCwgCiAgICAgICAgIGNvZ25pdGlvbl8xLCBjb2duaXRpb25fMiwgY29nbml0aW9uXzMsIGNvZ25pdGlvbl80LCBjb2duaXRpb25fNSwgY29nbml0aW9uXzYsCiAgICAgICAgICMgYnJ1c2hlZCwgZXhwbG9yZV9pbnRlcmFjdGlvbnMsICMgZXhwbG9yZV90aW1lLCAKICAgICAgICAgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICB2bGF0X3NpbXBsZSwgdmxhdF9tb2RlcmF0ZSwgdmxhdF9jb21wbGV4LAogICAgICAgICAjIGluaXRpYWwgaW1wcmVzc2lvbgogICAgICAgICBhZmZlY3Quc2NpZW5jZV8xLCBhZmZlY3QuY2xhcml0eV8xLCBhZmZlY3QuYWVzdGhldGljXzEpCgpuZmFjdG9ycyhmYWN0b3JBbmFseXNpcykKYGBgCgpGYWN0b3IgNCBzZWVtIHRvIGhhdmUgbWluaW11bSBjb21wZWx4aXR5LCBCSUMgaXMgcHJldHR5IGxvdywgYW5kIGJpZyBqdW1wIGZvciByb290IG1lYW4KNSBzZWVtcyBtZWggYmVjdWFzZSBvZiB0aGUgYmlnIGp1bXAgZnJvbSA0LTUgb24gY29tcGxleGl0eS4gCgpgYGB7cn0KZjcgPC0gZmEoZmFjdG9yQW5hbHlzaXMsIDcpCnBkZihmaWxlID0gImY3LnBkZiIsICAgIyBUaGUgZGlyZWN0b3J5IHlvdSB3YW50IHRvIHNhdmUgdGhlIGZpbGUgaW4KICAgIHdpZHRoID0gMTUsICMgVGhlIHdpZHRoIG9mIHRoZSBwbG90IGluIGluY2hlcwogICAgaGVpZ2h0ID0gMjMpICMgVGhlIGhlaWdodCBvZiB0aGUgcGxvdCBpbiBpbmNoZXMKZmEuZGlhZ3JhbShmNykKZGV2Lm9mZigpCiMgYmFzZWQgb24gdGhlIGZhY3RvciBhbmFseXNpcywgaXQgbG9va3MgbGlrZSBub3QgYWxsIHRoZSB2aXMgUXMgZ28gdG9nZXRoZXIgYW5kIG5vdCBhbGwgdGhlIGRhdGEgUXMgZ28gdG9nZXRoZXIuIApgYGAKCgoK
+
LS0tCnRpdGxlOiAiVHJ1c3QgaW4gU2NpZW5jZSBBbmFseXNpcyBOb3RlYm9vayIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCmBgYHtyIGVjaG8gPSBGQUxTRX0KcmVxdWlyZSh0aWR5dmVyc2UpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShjYXIpCmxpYnJhcnkobG1lNCkKbGlicmFyeShlbW1lYW5zKQpsaWJyYXJ5KHB3cikKbGlicmFyeShwYXRjaHdvcmspCmxpYnJhcnkocnN0YXRpeCkKbGlicmFyeShlZmZlY3RzaXplKQpsaWJyYXJ5KEdQQXJvdGF0aW9uKQojIGVudmlyb25tZW50IHRvIGluY2x1ZGUgdGhlIHNzX3BzeWNoNDUwX3J3czMgcGxhdGZvcm0KbG9hZCgic3NfcHN5Y2g0NTBfcndzMyIpCmBgYAoKTG9hZCBEYXRhCgpgYGB7cn0KcmVzdWx0cyA8LSByZWFkLmNzdigiZGF0YV9jbGVhbl9qdW5lMzAuY3N2IikKCiMgdHJ1c3QgaW4gZGF0YSBpcyB0aGUgY29sdW1uOiBiYXItZGF0YV82CiMgdHJ1c3QgaW4gdmlzIGlzIHRoZSBjb2x1bW46IGJhci12aXNfNgpgYGAKCkNvbnZlcnRpbmcgY292YXJpYXRlcyB0byBmYWN0b3JzCmBgYHtyfQpyZXN1bHRzJEdlbmRlciA8LSBhcy5mYWN0b3IocmVzdWx0cyRHZW5kZXIpCnJlc3VsdHMkRWR1Y2F0aW9uIDwtIGFzLmZhY3RvcihyZXN1bHRzJEVkdWNhdGlvbikKcmVzdWx0cyRQYXJlbnRzX2VkdWNhdGlvbiA8LSBhcy5mYWN0b3IocmVzdWx0cyRQYXJlbnRzX2VkdWNhdGlvbikKcmVzdWx0cyRMYW5ndWFnZSA8LSBhcy5mYWN0b3IocmVzdWx0cyRMYW5ndWFnZSkKcmVzdWx0cyRFdGhuaWNpdHkgPC0gYXMuZmFjdG9yKHJlc3VsdHMkRXRobmljaXR5KQpyZXN1bHRzJEluY29tZSA8LSBhcy5mYWN0b3IocmVzdWx0cyRJbmNvbWUpCnJlc3VsdHMkUmVsaWdpb24gPC0gYXMuZmFjdG9yKHJlc3VsdHMkUmVsaWdpb24pCmBgYAoKVHJ1c3QgaW4gVmlzCgpgYGB7cn0KIyByZXN1bHRzJGlzQ292aWREYXRhIDwtIGZhY3RvcihyZXN1bHRzJGlzQ292aWREYXRhLCBsZXZlbHMgPSBjKDAsIDEpLAojICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkNyb3AgRGF0YSIsICJDb3ZpZCBEYXRhIikpCmBgYAoKYGBge3J9CgpNaW5NZWFuU0VNTWF4IDwtIGZ1bmN0aW9uKHgpIHsKICB2IDwtIGMobWluKHgpLCBtZWFuKHgpIC0gc2QoeCkvc3FydChsZW5ndGgoeCkpLCBtZWFuKHgpLCBtZWFuKHgpICsgc2QoeCkvc3FydChsZW5ndGgoeCkpLCBtYXgoeCkpCiAgbmFtZXModikgPC0gYygieW1pbiIsICJsb3dlciIsICJtaWRkbGUiLCAidXBwZXIiLCAieW1heCIpCiAgdgp9CgpyZXN1bHRzICU+JQogICMgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogIGdncGxvdChhZXMoIHggPSB2aXMudHJ1c3RfNiwgeSA9IDAsIGNleD0xLjUsIGNvbG91ciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInB1cnBsZSIsICJvcmFuZ2UiKSkgKwogIHlsaW0oLTAuNSwgMC41KSArCiAgZ2VvbV9qaXR0ZXIoZGF0YSA9IHJlc3VsdHMsIHdpZHRoID0gMC4zLCBoZWlnaHQgPSAwLjIsIGNvbG9yID0gImxpZ2h0IGdyYXkiLCBhbHBoYSA9IDAuNSkgKwogICNzdGF0X3N1bW1hcnkoZnVuLmRhdGE9TWluTWVhblNFTU1heCwgZ2VvbT0iYm94cGxvdCIsIGNvbG91cj0icmVkIikgKwoKICBnZW9tX2JveHBsb3QobHdkID0gMSwgZmF0dGVuID0gTlVMTCwgd2lkdGggPSAwLjI1LCBhbHBoYSA9IDAuNSkgKwoKICBnZW9tX3NlZ21lbnQoZGF0YSA9IHJlc3VsdHMgJT4lIAogICAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogICAgICAgICAgICAgICAgc3VtbWFyaXplKG4gPSBuKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuID0gbWVhbih2aXMudHJ1c3RfNiksCiAgICAgICAgICAgIHNlID0gc2QodmlzLnRydXN0XzYpL3NxcnQobikpLCAKICAgICAgICAgICAgICBhZXMoeCA9IG1lYW4sIHhlbmQgPSBtZWFuLCB5ID0gLS4yNSwgeWVuZCA9IC4yNSwgIGNvbG91ciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpLCBzaXplID0gMSkgKwogICAgICAgICMgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gIm1lYW5fY2xfYm9vdCIsIGNvbG91ciA9ICJyZWQiLCBzaXplID0gMC41LCBwb3NpdGlvbiA9IHBvc2l0aW9uX251ZGdlKHg9MC4yNSwgeT0wKSwgYWxwaGE9MC41KSArCgogIGdlb21fdGV4dCggZGF0YSA9IHJlc3VsdHMgJT4lIAogICAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogICAgICAgICAgICAgICAgc3VtbWFyaXplKG4gPSBuKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuID0gcm91bmQobWVhbih2aXMudHJ1c3RfNiksZGlnaXRzPTIpLAogICAgICAgICAgICBzZSA9IHJvdW5kKHNkKGRhdGEudHJ1c3RfNikvc3FydChuKSxkaWdpdHM9MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzYgPSBtZWFuKHZpcy50cnVzdF82KSksCiAgICAgICAgICAgICMgYWVzKGxhYmVsID0gcGFzdGUobWVhbiwgIlsiLG1lYW4tc2UsIiwiLG1lYW4rc2UsIl0iKSwgeCA9IDYuMiwgeSA9IDAuNDMsIGZvbnRmYWNlID0gMyksIHNpemU9MywgY29sb3VyID0gImJsYWNrIikrCiAgICAgICAgICAgICAgYWVzKGxhYmVsID0gcGFzdGUobWVhbiksIHggPSBtZWFuLCB5ID0gLjM1LCBmb250ZmFjZSA9IDMpLCBzaXplPTQsIGNvbG91ciA9ICJibGFjayIpKwoKICBmYWNldF9ncmlkKGNvbXBsZXhpdHkgfiBpc0NvdmlkRGF0YSkgKwogIHhsYWIoIlRydXN0IGluIFZpc3VhbGl6YXRpb24iKSArCiAgdGhlbWVfbWluaW1hbCgpICsgCiAgdGhlbWUocGFuZWwuc3BhY2luZyA9IHVuaXQoMiwgImxpbmVzIiksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnkgPSBlbGVtZW50X2JsYW5rKCkpCgoKCmdnc2F2ZShwYXN0ZSgiY29tcGxleGl0eV9kYXRhVHlwZV9pbnRlcmFjdGlvbi5wZGYiLCBzZXA9IiIpKQoKYGBgCgoKYGBge3J9CnJlc3VsdHMgJT4lCiAgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogIHN1bW1hcml6ZShuID0gbigpLAogICAgICAgICAgICBtZWFuID0gbWVhbih2aXMudHJ1c3RfNiksCiAgICAgICAgICAgIHNlID0gc2QodmlzLnRydXN0XzYpL3NxcnQobiksCiAgICAgICAgICAgIG4gPSBuKQpgYGAKCmBgYHtyfQojIHJlc3VsdHMkaXNDb3ZpZERhdGEgPC0gZmFjdG9yKHJlc3VsdHMkaXNDb3ZpZERhdGEsIGxldmVscyA9IGMoMCwgMSksCiMgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQ3JvcCBEYXRhIiwgIkNvdmlkIERhdGEiKSkKCnJlc3VsdHMgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZGF0YS50cnVzdF82LCB5ID0gMCkpICsKICAjIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJwdXJwbGUiLCAib3JhbmdlIikpICsKICB5bGltKC0wLjUsIDAuNSkgKwogIGdlb21faml0dGVyKGRhdGEgPSByZXN1bHRzLCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMiwgY29sb3IgPSAibGlnaHQgZ3JheSIsIGFscGhhID0gMC41KSArCiAgZ2VvbV9ib3hwbG90KGx3ZCA9IDEsIGZhdHRlbiA9IE5VTEwsIHdpZHRoID0gMC4yNSwgYWxwaGEgPSAwLjUsIGNvbG9yID0gInNhbG1vbiIpICsKICAjIGxhYnModGl0bGUgPSAiVHJ1c3QgaW4gZGF0YSIpICsgCgogIAogICBnZW9tX3NlZ21lbnQoZGF0YSA9IHJlc3VsdHMgJT4lIAogICAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSkgJT4lCiAgICAgICAgICAgICAgICBzdW1tYXJpemUobiA9IG4oKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4gPSBtZWFuKGRhdGEudHJ1c3RfNiksCiAgICAgICAgICAgIHNlID0gc2QoZGF0YS50cnVzdF82KS9zcXJ0KG4pKSwgCiAgICAgICAgICAgICAgYWVzKHggPSBtZWFuLCB4ZW5kID0gbWVhbiwgeSA9IC0uMjUsIHllbmQgPSAuMjUsICBjb2xvdXIgPSJzYWxtb24iKSwgc2l6ZSA9IDEpICsKCiAgCiAgZ2VvbV90ZXh0KCBkYXRhID0gcmVzdWx0cyAlPiUgCiAgICAgICAgICAgICAgICBncm91cF9ieShjb21wbGV4aXR5KSAlPiUKICAgICAgICAgICAgICAgIHN1bW1hcml6ZShuID0gbigpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbiA9IHJvdW5kKG1lYW4oZGF0YS50cnVzdF82KSxkaWdpdHM9MiksCiAgICAgICAgICAgIHNlID0gcm91bmQoc2QoZGF0YS50cnVzdF82KS9zcXJ0KG4pLGRpZ2l0cz0yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkYWR0YS50cnVzdF82ID0gbWVhbihkYXRhLnRydXN0XzYpKSwKICAgICAgICAgICAgIyBhZXMobGFiZWwgPSBwYXN0ZShtZWFuLCAiWyIsbWVhbi1zZSwiLCIsbWVhbitzZSwiXSIpLCB4ID0gNi4yLCB5ID0gMC40MywgZm9udGZhY2UgPSAzKSwgc2l6ZT0zLCBjb2xvdXIgPSAiYmxhY2siKSsKICAgICAgICAgICAgICBhZXMobGFiZWwgPSBwYXN0ZShtZWFuKSwgeCA9IG1lYW4sIHkgPSAuMzUsIGZvbnRmYWNlID0gMyksIHNpemU9NCwgY29sb3VyID0gImJsYWNrIikrCiAgCgogIAogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoY29tcGxleGl0eSkpICsKICB4bGFiKCJUcnVzdCBpbiBEYXRhIikgKwogIHRoZW1lX21pbmltYWwoKSArIAogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpKQoKZ2dzYXZlKHBhc3RlKCJjb21wbGV4aXR5X2ludGVyYWN0aW9uLnBkZiIsIHNlcD0iIikpCgpgYGAKCgpgYGB7cn0KcmVzdWx0cyAlPiUKIGZpbHRlcihpc0NvdmlkRGF0YSA9PTAgKSAlPiUKICBncm91cF9ieShjb21wbGV4aXR5KSAlPiUKICBzdW1tYXJpemUobiA9IG4oKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4odmlzLnRydXN0XzYpLAogICAgICAgICAgICBzZSA9IHNkKHZpcy50cnVzdF82KS9zcXJ0KG4pLAogICAgICAgICAgICBuID0gbikKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF82IH4gY29tcGxleGl0eSAgKiBjaGFydFR5cGUgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMlPiVmaWx0ZXIoaXNDb3ZpZERhdGEgPT0gMSkKIGZpbHRlcihpc0NvdmlkRGF0YSA9PTEgKSkKYW5vdmEobW9kZWwpCmBgYApgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF82IH4gY29tcGxleGl0eSAgKiBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpICsgY2hhcnRUeXBlICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzJT4lIGZpbHRlcihjb21wbGV4aXR5ICE9J21vZGVyYXRleCcpKQphbm92YShtb2RlbCkKCgpgYGAKCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF82IH4gY29tcGxleGl0eSAqIGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkgKyBjaGFydFR5cGUgKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCgoKYGBgCgoKTGluZWFyIFJlZ3Jlc3Npb24gTW9kZWwgZm9yIHRydXN0IGluIHZpcyBhcyBhIGZ1bmN0aW9uIG9mIApgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF82IH4gY29tcGxleGl0eSAqIGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkgKiBjaGFydFR5cGUgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEluY29tZSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCgoKYGBgCmBgYHtyfQojIGNhbiBjaGFuZ2UgdGhlIHByZWRpY3RvciB0byBiYXIudmlzCm1vZGVsPC0gbWFub3ZhKGNiaW5kKHZpcy50cnVzdF82LCAKICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzUsIAogICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfNCwgCiAgICAgICAgICAgICAgICAgICAgIHZpcy50cnVzdF8zLCAKICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzIsIAogICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfMSkgfiBjb21wbGV4aXR5ICAqIGNoYXJ0VHlwZSAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMgJT4lZmlsdGVyKGlzQ292aWREYXRhID09IDEpKQpzdW1tYXJ5LmFvdihtb2RlbCkKYGBgCgpgYGB7cn0KIyBwb3N0LWhvYyB0ZXN0cwphb3YodmlzLnRydXN0XzYgfiBjb21wbGV4aXR5ICogYXMuZmFjdG9yKGlzQ292aWREYXRhKSwgZGF0YSA9IHJlc3VsdHMpICU+JSB0dWtleV9oc2QoKQojIGVmZmVjdCBzaXplcwpldGFfc3F1YXJlZChhb3YodmlzLnRydXN0XzYgfiBjb21wbGV4aXR5ICogYXMuZmFjdG9yKGlzQ292aWREYXRhKSAqIGNoYXJ0VHlwZSArIAogICAgICAgICAgICAgICAgICArIEFnZSArIGFzLmZhY3RvcihHZW5kZXIpICsgU3RhdGVfMSArIGFzLmZhY3RvcihFZHVjYXRpb24pICsgYXMuZmFjdG9yKFBhcmVudHNfZWR1Y2F0aW9uKSArIGFzLmZhY3RvcihMYW5ndWFnZSkgKyBhcy5mYWN0b3IoRXRobmljaXR5KSArIGFzLmZhY3RvcihJbmNvbWUpICsgYXMuZmFjdG9yKFJlbGlnaW9uKSArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIAogICAgICAgICAgICAgICAgICBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgICBkYXRhID0gcmVzdWx0cykpCmBgYCAKIyBDb2xpbmVhcml0eSBvZiB0cnVzdCBpbiB2aXMgYW5kIHRydXN0IGluIGRhdGEKYGBge3J9CmNvbGluZWFyaXR5X21vZGVsIDwtIGxtKGZvcm11bGEgPSBBZ2UgfiB2aXMudHJ1c3RfMSArIHZpcy50cnVzdF8yICsgdmlzLnRydXN0XzMgKyBhZmZlY3Quc2NpZW5jZV8xICsgYWZmZWN0LmNsYXJpdHlfMSArIGFmZmVjdC5hZXN0aGV0aWNfMSArIHZpcy50cnVzdF82ICsgZGF0YS50cnVzdF8xICsgZGF0YS50cnVzdF8yICsgZGF0YS50cnVzdF8zICsgZGF0YS50cnVzdF80ICsgZGF0YS50cnVzdF81ICsgZGF0YS50cnVzdF82ICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKdmlmKGNvbGluZWFyaXR5X21vZGVsKQpgYGAKCnZpZihjb2xpbmVhcml0eV9tb2RlbClyZWxhdGlvbiBvZiB0cnVzdCBpbiB2aXMgYW5kIHRydXN0IGluIGRhdGEKYGBge3J9CmRhdGFfZnJhbWUgPSBkYXRhLmZyYW1lKHJlc3VsdHMkdmlzLnRydXN0XzEsIHJlc3VsdHMkdmlzLnRydXN0XzIsIHJlc3VsdHMkdmlzLnRydXN0XzMsIHJlc3VsdHMkYWZmZWN0LnNjaWVuY2VfMSwgcmVzdWx0cyRhZmZlY3QuY2xhcml0eV8xLCByZXN1bHRzJGFmZmVjdC5hZXN0aGV0aWNfMSwgcmVzdWx0cyR2aXMudHJ1c3RfNiwgcmVzdWx0cyRkYXRhLnRydXN0XzEsIHJlc3VsdHMkZGF0YS50cnVzdF8yLCByZXN1bHRzJGRhdGEudHJ1c3RfMywgcmVzdWx0cyRkYXRhLnRydXN0XzQsIHJlc3VsdHMkZGF0YS50cnVzdF81LCByZXN1bHRzJGRhdGEudHJ1c3RfNiwgcmVzdWx0cyRpbnRlcnBlcnNvbmFsLnRydXN0XzEsIHJlc3VsdHMkdHJ1c3QuaW4uc2NpZW5jZV83LCByZXN1bHRzJG5lZWRfZm9yX2NvZ25pdGlvbikKY29yKGRhdGFfZnJhbWUpCmBgYAoKIyBUcnVzdCBpbiBzY2llbmNlLCBuZWVkIGZvciBjb2duaXRpb24sIGFuZCBpbnRlcnBlcnNvbmFsIHRydXN0IG9uIHRydXN0IGluIFZpcwpgYGB7cn0KcmVzdWx0cyAlPiUKICBnYXRoZXIoa2V5ID0gdmFyaWFibGVzLCB2YWx1ZSA9IHZhbHVlcywgCiAgICAgICAgIHRydXN0LmluLnNjaWVuY2VfNywgbmVlZF9mb3JfY29nbml0aW9uLCBpbnRlcnBlcnNvbmFsLnRydXN0XzEpICU+JQogIGdncGxvdChhZXMoeCA9IHZhbHVlcywgeSA9IHZpcy50cnVzdF82LCBjb2xvciA9IHZhcmlhYmxlcykpICsKCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyh2YXJpYWJsZXMpKSArCiAgICBnZW9tX2ppdHRlcigpICsKICBnZW9tX3Ntb290aChjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2JsYW5rKCkgKyAKICAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShwYW5lbC5zcGFjaW5nID0gdW5pdCgyLCAibGluZXMiKSkKYGBgCgoKCgoKClRydXN0IGluIERhdGEKCmBgYHtyfQpyZXN1bHRzICU+JQogIGdncGxvdChhZXMoeCA9IGRhdGEudHJ1c3RfNiwgeSA9IGlzQ292aWREYXRhLCBjb2xvdXIgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGdlb21faml0dGVyKGRhdGEgPSByZXN1bHRzLCB3aWR0aCA9IDAuNSkgKwogICMgbGFicyh0aXRsZSA9ICJUcnVzdCBpbiBkYXRhIikgKyAKICBnZW9tX3ZsaW5lKGRhdGEgPSByZXN1bHRzICU+JSAKICAgICAgICAgICAgICAgIGdyb3VwX2J5KGNvbXBsZXhpdHksIGlzQ292aWREYXRhLCBjaGFydFR5cGUpICU+JQogICAgICAgICAgICAgICAgc3VtbWFyaXplKG4gPSBuKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudHJ1c3RfNiA9IG1lYW4oZGF0YS50cnVzdF82KSksIAogICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gZGF0YS50cnVzdF82LCBjb2xvdXIgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoY29tcGxleGl0eSksIGNvbHMgPSB2YXJzKGNoYXJ0VHlwZSkpICsKICB0aGVtZV9taW5pbWFsKCkKCnJlc3VsdHMgJT4lIAogIGdyb3VwX2J5KGNvbXBsZXhpdHksIGlzQ292aWREYXRhKSAlPiUKICBzdW1tYXJpemUobiA9IG4oKSwgCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKGRhdGEudHJ1c3RfNiksCiAgICAgICAgICAgIHNlID0gc2QoZGF0YS50cnVzdF82KS9zcXJ0KG4pLAogICAgICAgICAgICBuID0gbikKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGRhdGEudHJ1c3RfNiB+IGNvbXBsZXhpdHkgKiBjaGFydFR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMlPiUgZmlsdGVyKGlzQ292aWREYXRhID09IDApKQphbm92YShtb2RlbCkKCgpgYGAKCmBgYHtyfQojIHBvc3QtaG9jIHRlc3RzCmFvdihkYXRhLnRydXN0XzYgfiBjb21wbGV4aXR5ICogYXMuZmFjdG9yKGlzQ292aWREYXRhKSwgZGF0YSA9IHJlc3VsdHMpICU+JSB0dWtleV9oc2QoKQphb3YoZGF0YS50cnVzdF82IH4gY2hhcnRUeXBlICogYXMuZmFjdG9yKGlzQ292aWREYXRhKSwgZGF0YSA9IHJlc3VsdHMpICU+JSB0dWtleV9oc2QoKQojIGVmZmVjdCBzaXplcwpldGFfc3F1YXJlZChhb3YoZGF0YS50cnVzdF82IH4gY29tcGxleGl0eSAqIGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkgKiBjaGFydFR5cGUgKyAKICAgICAgICAgICAgICAgICAgQWdlICsgYXMuZmFjdG9yKEdlbmRlcikgKyBTdGF0ZV8xICsgYXMuZmFjdG9yKEVkdWNhdGlvbikgKyBhcy5mYWN0b3IoUGFyZW50c19lZHVjYXRpb24pICsgYXMuZmFjdG9yKExhbmd1YWdlKSArIAogICAgICAgICAgICAgICAgICBhcy5mYWN0b3IoRXRobmljaXR5KSArIGFzLmZhY3RvcihJbmNvbWUpICsgYXMuZmFjdG9yKFJlbGlnaW9uKSArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIAogICAgICAgICAgICAgICAgICBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgICBkYXRhID0gcmVzdWx0cykpCmVtbWVhbnMoYW92KGRhdGEudHJ1c3RfNiB+IGNvbXBsZXhpdHkgLCBkYXRhID0gcmVzdWx0cykgLCB+IGNvbXBsZXhpdHkpCmBgYAoKVHJ1c3QgaW4gc2NpZW5jZSwgbmVlZCBmb3IgY29nbml0aW9uLCBhbmQgaW50ZXJwZXJzb25hbCB0cnVzdCBvbiB0cnVzdCBpbiBEYXRhCmBgYHtyfQpyZXN1bHRzICU+JQogIGdhdGhlcihrZXkgPSB2YXJpYWJsZXMsIHZhbHVlID0gdmFsdWVzLCAKICAgICAgICAgdHJ1c3QuaW4uc2NpZW5jZV83LCBuZWVkX2Zvcl9jb2duaXRpb24sIGludGVycGVyc29uYWwudHJ1c3RfMSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdmFsdWVzLCB5ID0gZGF0YS50cnVzdF82LCBjb2xvciA9IHZhcmlhYmxlcykpICsKCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyh2YXJpYWJsZXMpKSArCiAgICBnZW9tX2ppdHRlcigpICsKICBnZW9tX3Ntb290aChjb2xvciA9ICJibGFjayIpICsKICBnZW9tX2JsYW5rKCkgKyAKICAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShwYW5lbC5zcGFjaW5nID0gdW5pdCgyLCAibGluZXMiKSkKYGBgCgoKCgoKCgoKCgoKCgoKCgoKCmBgYHtyfQpyZXN1bHRzX2xvbmdfZGF0YSA8LSByZXN1bHRzICU+JQogIHNlbGVjdChkYXRhLnRydXN0XzEsIGRhdGEudHJ1c3RfMiwgZGF0YS50cnVzdF8zLAogICAgICAgICBkYXRhLnRydXN0XzQsIGRhdGEudHJ1c3RfNSwgZGF0YS50cnVzdF82LAogICAgICAgICBSZXNwb25zZUlkLCBjb21wbGV4aXR5LAogICAgICAgICB2bGF0X3NpbXBsZSwgdmxhdF9tb2RlcmF0ZSwgdmxhdF9jb21wbGV4KSAlPiUKICBnYXRoZXIoa2V5ID0gdHJ1c3RJdGVtRGF0YSwgdmFsdWUgPSB0cnVzdFJhdGluZ0RhdGEsIAogICAgICAgICBkYXRhLnRydXN0XzEsIGRhdGEudHJ1c3RfMiwgZGF0YS50cnVzdF8zLCBkYXRhLnRydXN0XzQsIGRhdGEudHJ1c3RfNSwgZGF0YS50cnVzdF82KQoKcmVzdWx0c19sb25nX2RhdGEgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdHJ1c3RSYXRpbmdEYXRhLCB5ID0gMSwgY29sb3IgPSBjb21wbGV4aXR5KSkgKwogIGdlb21faml0dGVyKCkgKwogIHlsaW0oMCwgMikgKyAKICBsYWJzKHRpdGxlID0gIlRydXN0IGluIGRhdGEgKEFsbCkiKSArIAogIGdlb21fdmxpbmUoZGF0YSA9IHJlc3VsdHNfbG9uZ19kYXRhICU+JSAKICAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSwgdHJ1c3RJdGVtRGF0YSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcml6ZShuID0gbigpLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGF2ZXJhZ2UgPSBtZWFuKHRydXN0UmF0aW5nRGF0YSkpLCAKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gYXZlcmFnZSwgY29sb3IgPSBjb21wbGV4aXR5KSkgKwogIGZhY2V0X2dyaWQodmFycyh0cnVzdEl0ZW1EYXRhKSkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCgojIFJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRydXN0IGluIGRhdGEgYW5kIHZpcywgYWNyb3NzIGNvbXBsZXhpdHkKCmBgYHtyfQpyZXN1bHRzX2xvbmdfZGF0YSA8LSByZXN1bHRzICU+JQogIHNlbGVjdChkYXRhLnRydXN0XzEsIGRhdGEudHJ1c3RfMiwgZGF0YS50cnVzdF8zLAogICAgICAgICBkYXRhLnRydXN0XzQsIGRhdGEudHJ1c3RfNSwgZGF0YS50cnVzdF82LAogICAgICAgICBSZXNwb25zZUlkLCBjb21wbGV4aXR5LAogICAgICAgICBjaGFydFR5cGUsIGlzQ292aWREYXRhLCAKICAgICAgICAgdmxhdF9zaW1wbGUsIHZsYXRfbW9kZXJhdGUsIHZsYXRfY29tcGxleCkgJT4lCiAgZ2F0aGVyKGtleSA9IHRydXN0SXRlbURhdGEsIHZhbHVlID0gdHJ1c3RSYXRpbmdEYXRhLCAKICAgICAgICAgIyBkYXRhLnRydXN0XzEsIGRhdGEudHJ1c3RfMiwgZGF0YS50cnVzdF8zLCBkYXRhLnRydXN0XzQsIGRhdGEudHJ1c3RfNSwgCiAgICAgICAgIGRhdGEudHJ1c3RfNikKCnJlc3VsdHNfbG9uZ192aXMgPC0gcmVzdWx0cyAlPiUKICBnYXRoZXIoa2V5ID0gdHJ1c3RJdGVtVmlzLCB2YWx1ZSA9IHRydXN0UmF0aW5nVmlzLCAKICAgICAgICAgIyB2aXMudHJ1c3RfMSwgdmlzLnRydXN0XzIsIHZpcy50cnVzdF8zLCB2aXMudHJ1c3RfNCwgdmlzLnRydXN0XzUsIAogICAgICAgICB2aXMudHJ1c3RfNikKCnJlc3VsdHNfbG9uZ19hbGwgPC0gbWVyZ2UocmVzdWx0c19sb25nX3ZpcywgcmVzdWx0c19sb25nX2RhdGEsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gYygiUmVzcG9uc2VJZCIsICJjb21wbGV4aXR5IiwgImNoYXJ0VHlwZSIsICJpc0NvdmlkRGF0YSIpKQoKbW9kZWw8LSBnbG0odHJ1c3RSYXRpbmdWaXMgfiAgdHJ1c3RSYXRpbmdEYXRhICogY29tcGxleGl0eSArIAogICAgICAgICAgICAgIHRydXN0UmF0aW5nRGF0YSAqICBjaGFydFR5cGUgKyAKICAgICAgICAgICAgICB0cnVzdFJhdGluZ0RhdGEgKiAgYXMuZmFjdG9yKGlzQ292aWREYXRhKSwKICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzX2xvbmdfYWxsKQpBbm92YShtb2RlbCkKYGBgCgpgYGB7cn0KcmVzdWx0c19sb25nX2FsbCAlPiUKICAjIGZpbHRlcih0cnVzdEl0ZW1WaXMgPT0gImJhci52aXNfMiIpICU+JQogIGdncGxvdChhZXMoeCA9IHRydXN0UmF0aW5nVmlzLCB5ID0gdHJ1c3RSYXRpbmdEYXRhLCBjb2xvciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1KSArCiAgc3RhdF9zbW9vdGgobWV0aG9kID0gImxtIiwKICAgICAgICAgICAgICBmb3JtdWxhID0geSB+IHgsCiAgICAgICAgICAgICAgZ2VvbSA9ICJzbW9vdGgiLCBjb2xvciA9ICJibGFjayIpICsKICBsYWJzKHRpdGxlID0gIlJlbGF0aW9uc2hpcCBiZXd0ZWVuIHRydXN0IGluIFZpcyBhbmQgRGF0YSIpICsgCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhjaGFydFR5cGUpLCBjb2xzID0gdmFycyhjb21wbGV4aXR5KSkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCgoKIyBEbyB0aGUgdHJ1c3QgaXRlbXMgcHJlZGljdCB0cnVzdD8KCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IHZpcy50cnVzdF82IH4gdmlzLnRydXN0XzEgKyAKICAgICAgICAgICAgICB2aXMudHJ1c3RfMiArIAogICAgICAgICAgICAgIHZpcy50cnVzdF8zICsgCiAgICAgICAgICAgICAgdmlzLnRydXN0XzQgKyAKICAgICAgICAgICAgICB2aXMudHJ1c3RfNSArIAogICAgICAgICAgICAgIGFmZmVjdC5zY2llbmNlXzEgKwogICAgICAgICAgICAgIGFmZmVjdC5jbGFyaXR5XzEgKyAKICAgICAgICAgICAgICBhZmZlY3QuYWVzdGhldGljXzEgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQpzdW1tYXJ5KG1vZGVsKQpgYGAKCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGRhdGEudHJ1c3RfNiB+IGRhdGEudHJ1c3RfMSArIAogICAgICAgICAgICAgIGRhdGEudHJ1c3RfMiArIAogICAgICAgICAgICAgIGRhdGEudHJ1c3RfMyArIAogICAgICAgICAgICAgIGRhdGEudHJ1c3RfNCArIAogICAgICAgICAgICAgIGRhdGEudHJ1c3RfNSArCiAgICAgICAgICAgICAgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyAKICAgICAgICAgICAgICBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIAogICAgICAgICAgICAgIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCnN1bW1hcnkobW9kZWwpCmBgYAoKIyBXaGljaCB0cnVzdCBtZWFzdXJlbWVudHMgcHJlZGljdCBiZWhhdmlvcmFsIG91dGNvbWVzPwoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSB2aXMudHJ1c3RfNCB+IHZpcy50cnVzdF8xICsgCiAgICAgICAgICAgICAgdmlzLnRydXN0XzIgKyAKICAgICAgICAgICAgICB2aXMudHJ1c3RfMyArCiAgICAgICAgICAgICAgdmlzLnRydXN0XzYgKwogICAgICAgICAgICAgIGFmZmVjdC5zY2llbmNlXzEgKwogICAgICAgICAgICAgIGFmZmVjdC5jbGFyaXR5XzEgKyAKICAgICAgICAgICAgICBhZmZlY3QuYWVzdGhldGljXzEgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQpzdW1tYXJ5KG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gdmlzLnRydXN0XzUgfiB2aXMudHJ1c3RfMSArIAogICAgICAgICAgICAgIHZpcy50cnVzdF8yICsgCiAgICAgICAgICAgICAgdmlzLnRydXN0XzMgKwogICAgICAgICAgICAgIHZpcy50cnVzdF82ICsKICAgICAgICAgICAgICBhZmZlY3Quc2NpZW5jZV8xICsKICAgICAgICAgICAgICBhZmZlY3QuY2xhcml0eV8xICsgCiAgICAgICAgICAgICAgYWZmZWN0LmFlc3RoZXRpY18xICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKc3VtbWFyeShtb2RlbCkKYGBgCgoKYGBge3J9CnJlc3VsdHMgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZGF0YS50cnVzdF8xLCB5ID0gZGF0YS50cnVzdF82LCBjb2xvciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZ2VvbV9qaXR0ZXIoKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIpICsKICBmYWNldF93cmFwKH5pc0NvdmlkRGF0YSkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCgoKCgoKCgoKSG93IGRvZXMgcGVyZm9ybWFuY2Ugb24gVkxBVCBxdWVzdGlvbnMgcHJlZGljdCB0cnVzdD8KCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gdmlzLnRydXN0XzYgfiAgYXNzaWduZWRfdmxhdCAqCiAgICAgICAgICAgICAgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyAKICAgICAgICAgICAgICBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIAogICAgICAgICAgICAgIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCmFub3ZhKG1vZGVsKQoKZW1tZWFucyhhb3YodmlzLnRydXN0XzYgfiB2bGF0X3NpbXBsZSAqIHZsYXRfY29tcGxleCAsIGRhdGEgPSByZXN1bHRzKSAsIH4gdmxhdF9zaW1wbGUgfCB2bGF0X2NvbXBsZXgpCmBgYAoKYGBge3J9CnJlc3VsdHMgJT4lCiAgZ2F0aGVyKGtleSA9IHZsYXRfbGV2ZWwsIHZhbHVlID0gdmxhdF9wZXJmb3JtYW5jZSwgdmxhdF9zaW1wbGUsICB2bGF0X21vZGVyYXRlLCB2bGF0X2NvbXBsZXgpICU+JQogIGdncGxvdChhZXMoeCA9IHZpcy50cnVzdF82LCB5ID0gdmxhdF9wZXJmb3JtYW5jZSwgY29sb3VyID0gYXMuZmFjdG9yKGFzc2lnbmVkX3ZsYXQpKSkgKwogIGdlb21faml0dGVyKHdpZHRoID0gMC41KSArCiAgIyB5KDAsIDIpICsgCiAgIyBsYWJzKHRpdGxlID0gIlRydXN0IGluIGRhdGEiKSArIAogICMgZ2VvbV92bGluZShkYXRhID0gcmVzdWx0cyAlPiUgCiAgIyAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogICMgICAgICAgICAgICAgIHN1bW1hcml6ZShuID0gbigpLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzYgPSBtZWFuKHZpcy50cnVzdF82KSksIAogICMgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IHZpcy50cnVzdF82LCBjb2xvdXIgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnModmxhdF9sZXZlbCksIGNvbHMgPSB2YXJzKGNoYXJ0VHlwZSkpICsKICB0aGVtZV9taW5pbWFsKCkgKyAKICB0aGVtZShwYW5lbC5zcGFjaW5nID0gdW5pdCgyLCAibGluZXMiKSkKICAgICAgICAjIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgoKT3ZlcmFsbCBkaXN0cmlidXRpb24gb2YgVkxBVCBwZXJmb3JtYW5jZQoKVHJ1c3QgaW4gVmlzIApgYGB7cn0KIyB2bGF0X2xvbmcgPC0gcmVzdWx0cyAlPiUKIyAgIGdhdGhlcihrZXkgPSB2bGF0X2xldmVsLCB2YWx1ZSA9IHZsYXRfcGVyZm9ybWFuY2UsIHZsYXRfc2ltcGxlLCAgdmxhdF9tb2RlcmF0ZSwgdmxhdF9jb21wbGV4KSAKIyAKIyBtb2RlbCA8LSBsbWVyKGZvcm11bGEgPSB2bGF0X3BlcmZvcm1hbmNlIH4gdmxhdF9sZXZlbCAqIGlzQ292aWREYXRhICogY2hhcnRUeXBlICsKIyAgICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiMgICAgICAgICAgICAgICBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIAojICAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICsgKDF8UmVzcG9uc2VJZCksCiMgICAgICAgICAgICAgZGF0YSA9IHZsYXRfbG9uZykKIyBBbm92YShtb2RlbCkKIyAKIyBlbW1lYW5zKGFvdih2bGF0X3BlcmZvcm1hbmNlIH4gdmxhdF9sZXZlbCAsIGRhdGEgPSByZXN1bHRzKSAsIH4gdmxhdF9zaW1wbGUgfCB2bGF0X2NvbXBsZXgpCiMgCiMgIyBwb3N0LWhvYyB0ZXN0cwojIGFvdih2bGF0X3BlcmZvcm1hbmNlIH4gdmxhdF9sZXZlbCAqIGFzLmZhY3Rvcihpc0NvdmlkRGF0YSksIGRhdGEgPSB2bGF0X2xvbmcpICU+JSB0dWtleV9oc2QoKQpgYGAKCmBgYHtyfQpyZXN1bHRzICU+JQogIGdhdGhlcihrZXkgPSB2bGF0X2xldmVsLCB2YWx1ZSA9IHZsYXRfcGVyZm9ybWFuY2UsIHZsYXRfc2ltcGxlLCAgdmxhdF9tb2RlcmF0ZSwgdmxhdF9jb21wbGV4KSAlPiUKICBncm91cF9ieSh2bGF0X2xldmVsLCBjaGFydFR5cGUsIGlzQ292aWREYXRhKSAlPiUKICBzdW1tYXJpemUobiA9IG4oKSwKICAgICAgICAgICAgbWVhbl92bGF0X3BlcmZvcm1hbmNlID0gbWVhbih2bGF0X3BlcmZvcm1hbmNlKSwKICAgICAgICAgICAgc2UgPSBzZCh2bGF0X3BlcmZvcm1hbmNlKS9zcXJ0KG4pLAogICAgICAgICAgICBuID0gbigpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB2bGF0X2xldmVsLCB5ID0gbWVhbl92bGF0X3BlcmZvcm1hbmNlLCAKICAgICAgICAgICAgIHltYXggPSBtZWFuX3ZsYXRfcGVyZm9ybWFuY2UgKyBzZSwgeW1pbiA9IG1lYW5fdmxhdF9wZXJmb3JtYW5jZSAtIHNlLAogICAgICAgICAgICAgY29sb3VyID0gdmxhdF9sZXZlbCkpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fZXJyb3JiYXIoKSArCiAgIyBsYWJzKHRpdGxlID0gIlRydXN0IGluIGRhdGEiKSArIAogICMgZ2VvbV92bGluZShkYXRhID0gcmVzdWx0cyAlPiUgCiAgIyAgICAgICAgICAgICAgZ3JvdXBfYnkoY29tcGxleGl0eSwgaXNDb3ZpZERhdGEpICU+JQogICMgICAgICAgICAgICAgIHN1bW1hcml6ZShuID0gbigpLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzYgPSBtZWFuKHZpcy50cnVzdF82KSksIAogICMgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IHZpcy50cnVzdF82LCBjb2xvdXIgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoaXNDb3ZpZERhdGEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsgCiAgdGhlbWUocGFuZWwuc3BhY2luZyA9IHVuaXQoMiwgImxpbmVzIikpCiAgICAgICAgIyBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKClRydXN0IGluIERhdGEKCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGRhdGEudHJ1c3RfNiB+IHZsYXRfc2ltcGxlICogdmxhdF9tb2RlcmF0ZSAqIHZsYXRfY29tcGxleCArCiAgICAgICAgICAgICAgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyAKICAgICAgICAgICAgICBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIAogICAgICAgICAgICAgIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCmFub3ZhKG1vZGVsKQoKZW1tZWFucyhhb3YoZGF0YS50cnVzdF82IH4gdmxhdF9zaW1wbGUgKiB2bGF0X2NvbXBsZXggLCBkYXRhID0gcmVzdWx0cykgLCB+IHZsYXRfc2ltcGxlIHwgdmxhdF9jb21wbGV4KQpgYGAKCgoKCgoKCgoKCiMgV2hpY2ggYW50ZWNlZGVudCBkcml2ZXMgdGhlIGludGVyYWN0aW9uIGVmZmVjdCBmb3IgdHJ1c3QgaW4gdmlzdWFsaXphdGlvbiBmb3IgY292aWQgZGF0YT8KCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gdmlzLnRydXN0XzEgfiBjb21wbGV4aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzICU+JSBmaWx0ZXIoaXNDb3ZpZERhdGEgPT0gMSkpCmFub3ZhKG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gdmlzLnRydXN0XzIgfiBjb21wbGV4aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzICU+JSBmaWx0ZXIoaXNDb3ZpZERhdGEgPT0gMSkpCmFub3ZhKG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gdmlzLnRydXN0XzMgfiBjb21wbGV4aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzICU+JSBmaWx0ZXIoaXNDb3ZpZERhdGEgPT0gMSkpCmFub3ZhKG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gYWZmZWN0LnNjaWVuY2VfMSB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMgJT4lIGZpbHRlcihpc0NvdmlkRGF0YSA9PSAxKSkKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBhZmZlY3QuY2xhcml0eV8xIH4gY29tcGxleGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cyAlPiUgZmlsdGVyKGlzQ292aWREYXRhID09IDEpKQphbm92YShtb2RlbCkKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGFmZmVjdC5hZXN0aGV0aWNfMSB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMgJT4lIGZpbHRlcihpc0NvdmlkRGF0YSA9PSAxKSkKYW5vdmEobW9kZWwpCmBgYAoKIyBXaGljaCBhbnRlY2VkZW50IGRyaXZlcyB0aGUgbWFpbiBlZmZlY3QgZm9yIHRydXN0IGluIGRhdGE/CgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGRhdGEudHJ1c3RfMSB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCmFub3ZhKG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZGF0YS50cnVzdF8yIH4gY29tcGxleGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBkYXRhLnRydXN0XzMgfiBjb21wbGV4aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWdlICsgR2VuZGVyICsgU3RhdGVfMSArIEVkdWNhdGlvbiArIFBhcmVudHNfZWR1Y2F0aW9uICsgTGFuZ3VhZ2UgKyBFdGhuaWNpdHkgKyBJbmNvbWUgKyBSZWxpZ2lvbiArIHRydXN0LmluLnNjaWVuY2VfNyArIG5lZWRfZm9yX2NvZ25pdGlvbiArIGludGVycGVyc29uYWwudHJ1c3RfMSAsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKYGBgCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGRhdGEudHJ1c3RfNCB+IGNvbXBsZXhpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xICwKICAgICAgICAgICAgZGF0YSA9IHJlc3VsdHMpCmFub3ZhKG1vZGVsKQpgYGAKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZGF0YS50cnVzdF81IH4gY29tcGxleGl0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEgLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCmBgYAoKIyBIb3cgZG9lcyBwcm92ZW5hbmNlIGRhdGEgcHJlZGljdCB0cnVzdD8KCk92ZXJhbGwKCmBgYHtyfQpicnVzaGVkIDwtIHJlc3VsdHMgJT4lCiAgZ2F0aGVyKGtleSA9IHByb3ZlbmFuY2VfdHlwZSwgdmFsdWUgPSBwcm92ZW5hbmNlX3ZhbHVlLCBicnVzaGVkLCBleHBsb3JlX2ludGVyYWN0aW9ucywgZXhwbG9yZV90aW1lKSAlPiUKICBncm91cF9ieShwcm92ZW5hbmNlX3R5cGUsIGNoYXJ0VHlwZSwgaXNDb3ZpZERhdGEsIGNvbXBsZXhpdHkpICU+JQogIHN1bW1hcml6ZShuID0gbigpLCAKICAgICAgICAgICAgbWVhbiA9IG1lYW4ocHJvdmVuYW5jZV92YWx1ZSksIAogICAgICAgICAgICBzZSA9IHNkKHByb3ZlbmFuY2VfdmFsdWUpL3NxcnQobiksCiAgICAgICAgICAgIG4gPSBuKSAlPiUKICBmaWx0ZXIocHJvdmVuYW5jZV90eXBlID09ICJicnVzaGVkIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJvdmVuYW5jZV90eXBlLCB5ID0gbWVhbiwgeW1heCA9IG1lYW4gKyBzZSwgeW1pbiA9IG1lYW4gLSBzZSwgY29sb3IgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjUpKSArCiAgZ2VvbV9lcnJvcmJhcih3aWR0aCA9IDAuNSwgc2l6ZSA9IDAuNjYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoY29tcGxleGl0eSksIGNvbHMgPSB2YXJzKGlzQ292aWREYXRhKSkgKyAKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpKQpicnVzaGVkCgppbnRlcmFjdGlvbnMgPC0gcmVzdWx0cyAlPiUKICBnYXRoZXIoa2V5ID0gcHJvdmVuYW5jZV90eXBlLCB2YWx1ZSA9IHByb3ZlbmFuY2VfdmFsdWUsIGJydXNoZWQsIGV4cGxvcmVfaW50ZXJhY3Rpb25zLCBleHBsb3JlX3RpbWUpICU+JQogIGdyb3VwX2J5KHByb3ZlbmFuY2VfdHlwZSwgY2hhcnRUeXBlLCBpc0NvdmlkRGF0YSwgY29tcGxleGl0eSkgJT4lCiAgc3VtbWFyaXplKG4gPSBuKCksIAogICAgICAgICAgICBtZWFuID0gbWVhbihwcm92ZW5hbmNlX3ZhbHVlKSwgCiAgICAgICAgICAgIHNlID0gc2QocHJvdmVuYW5jZV92YWx1ZSkvc3FydChuKSwKICAgICAgICAgICAgbiA9IG4pICU+JQogIGZpbHRlcihwcm92ZW5hbmNlX3R5cGUgPT0gImV4cGxvcmVfaW50ZXJhY3Rpb25zIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJvdmVuYW5jZV90eXBlLCB5ID0gbWVhbiwgeW1heCA9IG1lYW4gKyBzZSwgeW1pbiA9IG1lYW4gLSBzZSwgY29sb3IgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjUpKSArCiAgZ2VvbV9lcnJvcmJhcih3aWR0aCA9IDAuNSwgc2l6ZSA9IDAuNjYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoY29tcGxleGl0eSksIGNvbHMgPSB2YXJzKGNoYXJ0VHlwZSkpICsgCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShwYW5lbC5zcGFjaW5nID0gdW5pdCgyLCAibGluZXMiKSkKaW50ZXJhY3Rpb25zCgpleHBsb3JlVGltZSA8LSByZXN1bHRzICU+JQogIGdhdGhlcihrZXkgPSBwcm92ZW5hbmNlX3R5cGUsIHZhbHVlID0gcHJvdmVuYW5jZV92YWx1ZSwgYnJ1c2hlZCwgZXhwbG9yZV9pbnRlcmFjdGlvbnMsIGV4cGxvcmVfdGltZSkgJT4lCiAgZ3JvdXBfYnkocHJvdmVuYW5jZV90eXBlLCBjaGFydFR5cGUsIGlzQ292aWREYXRhLCBjb21wbGV4aXR5KSAlPiUKICBzdW1tYXJpemUobiA9IG4oKSwgCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHByb3ZlbmFuY2VfdmFsdWUpLCAKICAgICAgICAgICAgc2UgPSBzZChwcm92ZW5hbmNlX3ZhbHVlKS9zcXJ0KG4pLAogICAgICAgICAgICBuID0gbikgJT4lCiAgZmlsdGVyKHByb3ZlbmFuY2VfdHlwZSA9PSAiZXhwbG9yZV90aW1lIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJvdmVuYW5jZV90eXBlLCB5ID0gbWVhbiwgeW1heCA9IG1lYW4gKyBzZSwgeW1pbiA9IG1lYW4gLSBzZSwgY29sb3IgPSBhcy5mYWN0b3IoaXNDb3ZpZERhdGEpKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZTIod2lkdGggPSAwLjUpKSArCiAgZ2VvbV9lcnJvcmJhcih3aWR0aCA9IDAuNSwgc2l6ZSA9IDAuNjYsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoY2hhcnRUeXBlKSwgY29scyA9IHZhcnMoY29tcGxleGl0eSkpICsgCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShwYW5lbC5zcGFjaW5nID0gdW5pdCgyLCAibGluZXMiKSkKZXhwbG9yZVRpbWUKCmV4cGxvcmVUaW1lICsgaW50ZXJhY3Rpb25zICsgYnJ1c2hlZApnZ3NhdmUoInByb3ZlbmFuY2VSZXN1bHRzLnBuZyIsIHdpZHRoID0gMjYsIGhlaWdodCA9IDE0KQpgYGAKZXhwbG9yZV9pbnRlcmFjdGlvbnMKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZXhwbG9yZV9pbnRlcmFjdGlvbnMgfiBjb21wbGV4aXR5ICogY2hhcnRUeXBlICogaXNDb3ZpZERhdGEgKwogICAgICAgICAgICAgIEFnZSArIEdlbmRlciArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKYGBgCgpleHBsb3JlX3RpbWUKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gZXhwbG9yZV90aW1lIH4gY29tcGxleGl0eSAqIGNoYXJ0VHlwZSAqIGlzQ292aWREYXRhICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCmBgYAoKCgpIeXBvdGhlc2lzOgpmb3IgdGhlIGNvbXBsZXggY29uZGl0aW9uLCB3ZSBleHBlY3QgcGVvcGxlIHdobyBicnVzaGVkIG1vcmUgdG8gaGF2ZSBoaWdoZXIgdHJ1c3QKCmBgYHtyfQpjb21wbGV4Q29uZGl0aW9uIDwtIHJlc3VsdHMgJT4lCiAgZmlsdGVyKGNvbXBsZXhpdHkgPT0gImNvbXBsZXgiKQoKIyBjYW4gY2hhbmdlIHRoZSBwcmVkaWN0b3IgdG8gYmFyLnZpcwptb2RlbDwtIG1hbm92YShjYmluZChkYXRhLnRydXN0XzEsIAogICAgICAgICAgICAgICAgICAgICBkYXRhLnRydXN0XzIsIAogICAgICAgICAgICAgICAgICAgICBkYXRhLnRydXN0XzMsIAogICAgICAgICAgICAgICAgICAgICBkYXRhLnRydXN0XzQsIAogICAgICAgICAgICAgICAgICAgICBkYXRhLnRydXN0XzUsIAogICAgICAgICAgICAgICAgICAgICBkYXRhLnRydXN0XzYpIH4gYnJ1c2hlZCArIGV4cGxvcmVfaW50ZXJhY3Rpb25zICsgZXhwbG9yZV90aW1lLCAKICAgICAgICAgICAgICAgZGF0YSA9IGNvbXBsZXhDb25kaXRpb24pCnN1bW1hcnkuYW92KG1vZGVsKQpgYGAKCkh5cG90aGVzaXM6CmZvciBhbGwgdGhlIGNvbmRpdGlvbnMsIHdlIGV4cGVjdCBwZW9wbGUgd2hvIGhvdmVyZWQgbW9yZSB0byBoYXZlIGhpZ2hlciB0cnVzdAoKCmBgYHtyfQojIGNhbiBjaGFuZ2UgdGhlIHByZWRpY3RvciB0byBiYXIudmlzCm1vZGVsPC0gbWFub3ZhKGNiaW5kKHZpcy50cnVzdF82LCAKICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzUsIAogICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfNCwgCiAgICAgICAgICAgICAgICAgICAgIHZpcy50cnVzdF8zLCAKICAgICAgICAgICAgICAgICAgICAgdmlzLnRydXN0XzIsIAogICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfMSkgfiBicnVzaGVkICsgZXhwbG9yZV9pbnRlcmFjdGlvbnMgKyBleHBsb3JlX3RpbWUsIAogICAgICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKc3VtbWFyeS5hb3YobW9kZWwpCmBgYAoKCgojIEFmZmVjdCBvbiBUcnVzdCB7aXQncyBvd24gc2VjdGlvbn0KCmBgYHtyfQpyZXN1bHRzICU+JQogIGdhdGhlcihrZXkgPSBhZmZlY3RzLCB2YWx1ZSA9IGFmZmVjdFJhdGluZ3MsIGFmZmVjdC5zY2llbmNlXzEsICBhZmZlY3QuY2xhcml0eV8xLCBhZmZlY3QuYWVzdGhldGljXzEpICU+JQogIGdyb3VwX2J5KGFmZmVjdHMsIGNoYXJ0VHlwZSwgaXNDb3ZpZERhdGEsIGNvbXBsZXhpdHkpICU+JQogIHN1bW1hcml6ZShuID0gbigpLAogICAgICAgICAgICBtZWFuID0gbWVhbihhZmZlY3RSYXRpbmdzKSwKICAgICAgICAgICAgc2UgPSBzZChhZmZlY3RSYXRpbmdzKS9zcXJ0KG4pLAogICAgICAgICAgICBuID0gbigpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhZmZlY3RzLCB5ID0gbWVhbiwgCiAgICAgICAgICAgICB5bWF4ID0gbWVhbiArIHNlLCB5bWluID0gbWVhbiAtIHNlLAogICAgICAgICAgICAgY29sb3VyID0gYXMuZmFjdG9yKGlzQ292aWREYXRhKSkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UyKHdpZHRoID0gMC41KSkgKwogIGdlb21fZXJyb3JiYXIod2lkdGggPSAwLjUsIHNpemUgPSAwLjY2LCBwb3NpdGlvbiA9ICJkb2RnZSIpICsKICAjIGxhYnModGl0bGUgPSAiVHJ1c3QgaW4gZGF0YSIpICsgCiAgIyBnZW9tX3ZsaW5lKGRhdGEgPSByZXN1bHRzICU+JSAKICAjICAgICAgICAgICAgICBncm91cF9ieShjb21wbGV4aXR5LCBpc0NvdmlkRGF0YSkgJT4lCiAgIyAgICAgICAgICAgICAgc3VtbWFyaXplKG4gPSBuKCksIAogICMgICAgICAgICAgICAgICAgICAgICAgICB2aXMudHJ1c3RfNiA9IG1lYW4odmlzLnRydXN0XzYpKSwgCiAgIyAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gdmlzLnRydXN0XzYsIGNvbG91ciA9IGFzLmZhY3Rvcihpc0NvdmlkRGF0YSkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhjaGFydFR5cGUpLCBjb2xzID0gdmFycyhjb21wbGV4aXR5KSkgKwogIHRoZW1lX21pbmltYWwoKSArIAogIHRoZW1lKHBhbmVsLnNwYWNpbmcgPSB1bml0KDIsICJsaW5lcyIpKQogICAgICAgICMgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpnZ3NhdmUoImFmZmVjdE1lYXN1cmVzLnBuZyIsIHdpZHRoID0gMTcsIGhlaWdodCA9IDkpCmBgYAoKCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gYWZmZWN0LnNjaWVuY2VfMSB+IGNvbXBsZXhpdHkgKiBjaGFydFR5cGUgKiBpc0NvdmlkRGF0YSArCiAgICAgICAgICAgICAgQWdlICsgYXMuZmFjdG9yKEdlbmRlcikgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCmBgYAoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSBhZmZlY3QuY2xhcml0eV8xIH4gY29tcGxleGl0eSAqIGNoYXJ0VHlwZSAqIGlzQ292aWREYXRhICsKICAgICAgICAgICAgICBBZ2UgKyBhcy5mYWN0b3IoR2VuZGVyKSArIFN0YXRlXzEgKyBFZHVjYXRpb24gKyBQYXJlbnRzX2VkdWNhdGlvbiArIExhbmd1YWdlICsgCiAgICAgICAgICAgICAgRXRobmljaXR5ICsgSW5jb21lICsgUmVsaWdpb24gKyB0cnVzdC5pbi5zY2llbmNlXzcgKyAKICAgICAgICAgICAgICBuZWVkX2Zvcl9jb2duaXRpb24gKyBpbnRlcnBlcnNvbmFsLnRydXN0XzEsCiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRzKQphbm92YShtb2RlbCkKc3VtbWFyeShtb2RlbCkKYGBgCmBgYHtyfQptb2RlbCA8LSBsbShmb3JtdWxhID0gYWZmZWN0LmFlc3RoZXRpY18xIH4gY29tcGxleGl0eSAqIGNoYXJ0VHlwZSAqIGlzQ292aWREYXRhICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCnN1bW1hcnkobW9kZWwpCmBgYAoKVHJ1c3QgaW4gVmlzCgoKYGBge3J9Cm1vZGVsIDwtIGxtKGZvcm11bGEgPSB2aXMudHJ1c3RfNiB+IGFmZmVjdC5zY2llbmNlXzEgKiBhZmZlY3QuY2xhcml0eV8xICogYWZmZWN0LmFlc3RoZXRpY18xICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCnN1bW1hcnkobW9kZWwpCgplbW1lYW5zKGFvdih2aXMudHJ1c3RfNiB+IGFmZmVjdC5zY2llbmNlXzEgKiBhZmZlY3QuY2xhcml0eV8xICwgZGF0YSA9IHJlc3VsdHMpICwgfiBhZmZlY3QuY2xhcml0eV8xKQpgYGAKCgpUcnVzdCBpbiBEYXRhCgpgYGB7cn0KbW9kZWwgPC0gbG0oZm9ybXVsYSA9IGRhdGEudHJ1c3RfNiB+IGFmZmVjdC5zY2llbmNlXzEgKiBhZmZlY3QuY2xhcml0eV8xICogYWZmZWN0LmFlc3RoZXRpY18xICsKICAgICAgICAgICAgICBBZ2UgKyBHZW5kZXIgKyBTdGF0ZV8xICsgRWR1Y2F0aW9uICsgUGFyZW50c19lZHVjYXRpb24gKyBMYW5ndWFnZSArIAogICAgICAgICAgICAgIEV0aG5pY2l0eSArIEluY29tZSArIFJlbGlnaW9uICsgdHJ1c3QuaW4uc2NpZW5jZV83ICsgCiAgICAgICAgICAgICAgbmVlZF9mb3JfY29nbml0aW9uICsgaW50ZXJwZXJzb25hbC50cnVzdF8xLAogICAgICAgICAgICBkYXRhID0gcmVzdWx0cykKYW5vdmEobW9kZWwpCgplbW1lYW5zKGFvdihkYXRhLnRydXN0XzYgfiBhZmZlY3Quc2NpZW5jZV8xICogYWZmZWN0LmNsYXJpdHlfMSAsIGRhdGEgPSByZXN1bHRzKSAsIH4gYWZmZWN0LmNsYXJpdHlfMSkKYGBgCgoKCgoKCgoKCgojIEZhY3RvciBBbmFseXNpcyAKCgpgYGB7cn0KZmFjdG9yQW5hbHlzaXMgPC0gcmVzdWx0cyAlPiUKICBzZWxlY3QoZGF0YS50cnVzdF8xLCBkYXRhLnRydXN0XzIsIGRhdGEudHJ1c3RfMywgZGF0YS50cnVzdF80LCBkYXRhLnRydXN0XzUsIGRhdGEudHJ1c3RfNiwKICAgICAgICAgdmlzLnRydXN0XzEsIHZpcy50cnVzdF8yLCB2aXMudHJ1c3RfMywgdmlzLnRydXN0XzQsIHZpcy50cnVzdF81LCB2aXMudHJ1c3RfNiwKICAgICAgICAgdHJ1c3QuaW4uc2NpZW5jZV8xLCB0cnVzdC5pbi5zY2llbmNlXzIsIHRydXN0LmluLnNjaWVuY2VfMywgdHJ1c3QuaW4uc2NpZW5jZV80LCB0cnVzdC5pbi5zY2llbmNlXzUsCiAgICAgICAgIHRydXN0LmluLnNjaWVuY2VfNiwgdHJ1c3QuaW4uc2NpZW5jZV83LCB0cnVzdC5pbi5zY2llbmNlXzgsIAogICAgICAgICBjb2duaXRpb25fMSwgY29nbml0aW9uXzIsIGNvZ25pdGlvbl8zLCBjb2duaXRpb25fNCwgY29nbml0aW9uXzUsIGNvZ25pdGlvbl82LAogICAgICAgICAjIGJydXNoZWQsIGV4cGxvcmVfaW50ZXJhY3Rpb25zLCAjIGV4cGxvcmVfdGltZSwgCiAgICAgICAgIGludGVycGVyc29uYWwudHJ1c3RfMSwKICAgICAgICAgdmxhdF9zaW1wbGUsIHZsYXRfbW9kZXJhdGUsIHZsYXRfY29tcGxleCwKICAgICAgICAgIyBpbml0aWFsIGltcHJlc3Npb24KICAgICAgICAgYWZmZWN0LnNjaWVuY2VfMSwgYWZmZWN0LmNsYXJpdHlfMSwgYWZmZWN0LmFlc3RoZXRpY18xKQoKbmZhY3RvcnMoZmFjdG9yQW5hbHlzaXMpCmBgYAoKRmFjdG9yIDQgc2VlbSB0byBoYXZlIG1pbmltdW0gY29tcGVseGl0eSwgQklDIGlzIHByZXR0eSBsb3csIGFuZCBiaWcganVtcCBmb3Igcm9vdCBtZWFuCjUgc2VlbXMgbWVoIGJlY3Vhc2Ugb2YgdGhlIGJpZyBqdW1wIGZyb20gNC01IG9uIGNvbXBsZXhpdHkuIAoKYGBge3J9CmY3IDwtIGZhKGZhY3RvckFuYWx5c2lzLCA3KQpwZGYoZmlsZSA9ICJmNy5wZGYiLCAgICMgVGhlIGRpcmVjdG9yeSB5b3Ugd2FudCB0byBzYXZlIHRoZSBmaWxlIGluCiAgICB3aWR0aCA9IDE1LCAjIFRoZSB3aWR0aCBvZiB0aGUgcGxvdCBpbiBpbmNoZXMKICAgIGhlaWdodCA9IDIzKSAjIFRoZSBoZWlnaHQgb2YgdGhlIHBsb3QgaW4gaW5jaGVzCmZhLmRpYWdyYW0oZjcpCmRldi5vZmYoKQojIGJhc2VkIG9uIHRoZSBmYWN0b3IgYW5hbHlzaXMsIGl0IGxvb2tzIGxpa2Ugbm90IGFsbCB0aGUgdmlzIFFzIGdvIHRvZ2V0aGVyIGFuZCBub3QgYWxsIHRoZSBkYXRhIFFzIGdvIHRvZ2V0aGVyLiAKYGBgCgoKCg==
diff --git a/supplementary_materials/VisTrust_Survey.pdf b/supplementary_materials/VisTrust_Survey.pdf new file mode 100644 index 0000000..f5bc168 Binary files /dev/null and b/supplementary_materials/VisTrust_Survey.pdf differ diff --git a/supplementary_materials/Vistrust_Supplementary_Tables.pdf b/supplementary_materials/Vistrust_Supplementary_Tables.pdf new file mode 100644 index 0000000..7028145 Binary files /dev/null and b/supplementary_materials/Vistrust_Supplementary_Tables.pdf differ