1 Load packages

pacman::p_load(tidyverse, arsenal,janitor, knitr)

2 Load data

This is the processed ds.

load("C:/Users/luisf/Dropbox/Puc-Rio/Projeto - Adicao a internet, imagem e alimentacao/Pesquisa/analise de dados/2020 - Grupo estudos - puc/R base - Dados after processing on December 2020 (PUCRio).RData")

3 Check names and reliability of the ds

dados %>% names
  [1] "id_unique"          "id"                 "data"               "pais"               "periodo_fac"        "idade"              "sexo"              
  [8] "altura"             "peso_atual"         "peso_desejado"      "faz_esporte"        "familia_esporte"    "cr"                 "ceri1"             
 [15] "ceri2"              "ceri3"              "ceri4"              "ceri5"              "ceri6"              "eat1"               "eat2"              
 [22] "eat3"               "eat4"               "eat5"               "eat6"               "eat7"               "eat8"               "eat9"              
 [29] "eat10"              "eat11"              "eat12"              "eat13"              "eat14"              "eat15"              "eat16"             
 [36] "eat17"              "eat18"              "eat19"              "eat20"              "eat21"              "eat22"              "eat23"             
 [43] "eat24"              "eat25"              "eat26"              "bsq1"               "bsq2"               "bsq3"               "bsq4"              
 [50] "bsq5"               "bsq6"               "bsq7"               "bsq8"               "bsq9"               "bsq10"              "bsq11"             
 [57] "bsq12"              "bsq13"              "bsq14"              "bsq15"              "bsq16"              "bsq17"              "bsq18"             
 [64] "bsq19"              "bsq20"              "bsq21"              "bsq22"              "bsq23"              "bsq24"              "bsq25"             
 [71] "bsq26"              "bsq27"              "bsq28"              "bsq29"              "bsq30"              "bsq31"              "bsq32"             
 [78] "bsq33"              "bsq34"              "imc"                "sex_female"         "eat_soma"           "bsq_soma"           "eat1_c"            
 [85] "eat2_c"             "eat3_c"             "eat4_c"             "eat5_c"             "eat6_c"             "eat7_c"             "eat8_c"            
 [92] "eat9_c"             "eat10_c"            "eat11_c"            "eat12_c"            "eat13_c"            "eat14_c"            "eat15_c"           
 [99] "eat16_c"            "eat17_c"            "eat18_c"            "eat19_c"            "eat20_c"            "eat21_c"            "eat22_c"           
[106] "eat23_c"            "eat24_c"            "eat25_c"            "eat26_c"            "bsq1_c"             "bsq2_c"             "bsq3_c"            
[113] "bsq4_c"             "bsq5_c"             "bsq6_c"             "bsq7_c"             "bsq8_c"             "bsq9_c"             "bsq10_c"           
[120] "bsq11_c"            "bsq12_c"            "bsq13_c"            "bsq14_c"            "bsq15_c"            "bsq16_c"            "bsq17_c"           
[127] "bsq18_c"            "bsq19_c"            "bsq20_c"            "bsq21_c"            "bsq22_c"            "bsq23_c"            "bsq24_c"           
[134] "bsq25_c"            "bsq26_c"            "bsq27_c"            "bsq28_c"            "bsq29_c"            "bsq30_c"            "bsq31_c"           
[141] "bsq32_c"            "bsq33_c"            "bsq34_c"            "eat_soma_c"         "bsq_soma_c"         "delta_peso"         "delta_peso_percent"
[148] "country"            "stat"               "weight_status"     

4 EAT

dados %>% 
  select(starts_with("eat") & ends_with("_c"), -eat_soma_c) %>% 
  psych::alpha()
Number of categories should be increased  in order to count frequencies. 
Some items were negatively correlated with the total scale and probably 
should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option
Some items ( eat13_c ) were negatively correlated with the total scale and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option
Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.84 0.86 0.87 

 Reliability if an item is dropped:

 Item statistics 

4.1 Fatores

dados <- dados %>% 
  mutate(eat_dieta = rowSums(select(., eat1_c, eat6_c,eat7_c,eat10_c,eat11_c,eat12_c,eat14_c,eat16_c,eat17_c,eat22_c, eat23_c, eat24_c, eat25_c))) %>% 
  mutate(eat_bulimia = rowSums(select(., eat3_c, eat4_c,eat9_c,eat18_c,eat21_c,eat26_c))) %>% 
  mutate(eat_oral = rowSums(select(., eat2_c, eat5_c,eat8_c,eat13_c,eat15_c,eat19_c,eat20_c)))

4.2 Correlacao entre fatores

dados %>% 
  select(eat_dieta, eat_bulimia, eat_oral, eat_soma_c) %>% 
  cor(.)
            eat_dieta eat_bulimia  eat_oral eat_soma_c
eat_dieta   1.0000000   0.7017194 0.3005106  0.9377941
eat_bulimia 0.7017194   1.0000000 0.2369181  0.7877045
eat_oral    0.3005106   0.2369181 1.0000000  0.5702859
eat_soma_c  0.9377941   0.7877045 0.5702859  1.0000000

4.3 Alfa Dieta

dados %>% select(., eat1_c, eat6_c,eat7_c,eat10_c,eat11_c,eat12_c,eat14_c,eat16_c,eat17_c,eat22_c, eat23_c, eat24_c, eat25_c) %>% 
  psych::alpha(.)
Number of categories should be increased  in order to count frequencies. 

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.84 0.86 0.87 

 Reliability if an item is dropped:

 Item statistics 

4.4 Alfa Bulimia

dados %>% select(eat3_c, eat4_c,eat9_c,eat18_c,eat21_c,eat26_c) %>% 
  psych::alpha(.)

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.56 0.6 0.64 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
           0 0.00676818950930626 0.0303030303030303 0.217687074829932 0.315789473684211 0.406408094435076 0.804920913884007    1    2    3 miss
eat3_c  0.52                0.00                  0              0.00              0.00                 0              0.04 0.19 0.16 0.09    0
eat4_c  0.81                0.00                  0              0.00              0.01                 0              0.00 0.08 0.07 0.03    0
eat9_c  0.99                0.01                  0              0.00              0.00                 0              0.00 0.01 0.00 0.00    0
eat18_c 0.86                0.00                  0              0.01              0.00                 0              0.00 0.06 0.04 0.02    0
eat21_c 0.76                0.00                  0              0.00              0.00                 0              0.00 0.11 0.08 0.05    0
eat26_c 0.98                0.00                  0              0.00              0.00                 0              0.00 0.01 0.00 0.01    0

4.5 Alfa Controle oral

dados %>% select(eat2_c, eat5_c,eat8_c,eat13_c,eat15_c,eat19_c,eat20_c) %>% 
  psych::alpha()

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.5 0.56 0.61 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
           0 0.194207836456559 0.294915254237288 0.306913996627319 0.597643097643098 0.648148148148148 0.738175675675676    1    2    3 miss
eat2_c  0.85              0.01              0.00                 0                 0                 0              0.00 0.09 0.02 0.02    0
eat5_c  0.67              0.00              0.00                 0                 0                 0              0.00 0.14 0.12 0.07    0
eat8_c  0.82              0.00              0.00                 0                 0                 0              0.00 0.09 0.04 0.05    0
eat13_c 0.82              0.00              0.01                 0                 0                 0              0.00 0.09 0.05 0.04    0
eat15_c 0.66              0.00              0.00                 0                 0                 0              0.00 0.13 0.11 0.10    0
eat19_c 0.57              0.00              0.00                 0                 0                 0              0.01 0.19 0.16 0.08    0
eat20_c 0.87              0.00              0.00                 0                 0                 0              0.00 0.08 0.03 0.02    0

4.6 Plot

5 BSQ-34

5.1 Alpha

dados %>% 
  select(starts_with("bsq") & ends_with("_c"), -bsq_soma_c) %>% 
  psych::alpha()
Number of categories should be increased  in order to count frequencies. 

Reliability analysis   
Call: psych::alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.97 0.97 0.97 

 Reliability if an item is dropped:

 Item statistics 

6 H1: Dados epidemiologicos

6.1 BSQ-34

dados %>% 
  mutate(corte =
           if_else(bsq_soma_c >= 110, 1,0)) %>% 
  {descr::CrossTable(.$country,.$corte, 
                     chisq = T,prop.chisq = F, 
                      
                     expected = T)}
   Cell Contents 
|-------------------------|
|                       N | 
|              Expected N | 
|           N / Row Total | 
|           N / Col Total | 
|         N / Table Total | 
|-------------------------|

==================================
             .$corte
.$country        0       1   Total
----------------------------------
br             164      56     220
             181.9    38.1        
             0.745   0.255   0.370
             0.333   0.544        
             0.276   0.094        
----------------------------------
sp             328      47     375
             310.1    64.9        
             0.875   0.125   0.630
             0.667   0.456        
             0.551   0.079        
----------------------------------
Total          492     103     595
             0.827   0.173        
==================================

Statistics for All Table Factors

Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 = 16.17242      d.f. = 1      p = 5.78e-05 

Pearson's Chi-squared test with Yates' continuity correction 
------------------------------------------------------------
Chi^2 = 15.28234      d.f. = 1      p = 9.26e-05 
dados %>% 
  #filter(sex_female == "female") %>% 
  mutate(corte =
           if_else(bsq_soma_c >= 110, 1,0)) %>% 
  {epitools::oddsratio(.$country,.$corte, rev = "r")}
$data
         Outcome
Predictor   0   1 Total
    sp    328  47   375
    br    164  56   220
    Total 492 103   595

$measure
         odds ratio with 95% C.I.
Predictor estimate    lower    upper
       sp 1.000000       NA       NA
       br 2.377962 1.546147 3.673224

$p.value
         two-sided
Predictor  midp.exact fisher.exact  chi.square
       sp          NA           NA          NA
       br 8.17943e-05 7.985849e-05 5.78299e-05

$correction
[1] FALSE

attr(,"method")
[1] "median-unbiased estimate & mid-p exact CI"

6.2 EAT-26

dados %>% 
  mutate(corte =
           if_else(eat_soma_c >= 21, 1,0)) %>% 
  count(corte) %>% 
  mutate(freq = n / sum(n))
dados %>% 
  mutate(corte =
           if_else(eat_soma_c >= 21, 1,0)) %>% 
  {descr::CrossTable(.$country,.$corte, prop.chisq = F, 
                     chisq = T, 
                     expected = T)}
   Cell Contents 
|-------------------------|
|                       N | 
|              Expected N | 
|           N / Row Total | 
|           N / Col Total | 
|         N / Table Total | 
|-------------------------|

==================================
             .$corte
.$country        0       1   Total
----------------------------------
br             160      60     220
             189.3    30.7        
             0.727   0.273   0.370
             0.312   0.723        
             0.269   0.101        
----------------------------------
sp             352      23     375
             322.7    52.3        
             0.939   0.061   0.630
             0.688   0.277        
             0.592   0.039        
----------------------------------
Total          512      83     595
             0.861   0.139        
==================================

Statistics for All Table Factors

Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 = 51.6188      d.f. = 1      p = 6.74e-13 

Pearson's Chi-squared test with Yates' continuity correction 
------------------------------------------------------------
Chi^2 = 49.87275      d.f. = 1      p = 1.64e-12 
dados %>% 
  #filter(sex_female == "female") %>% 
  mutate(corte =
           if_else(eat_soma_c >= 21, 1,0)) %>% 
  {epitools::oddsratio(.$country,.$corte, rev = "r")}
$data
         Outcome
Predictor   0  1 Total
    sp    352 23   375
    br    160 60   220
    Total 512 83   595

$measure
         odds ratio with 95% C.I.
Predictor estimate    lower    upper
       sp  1.00000       NA       NA
       br  5.69834 3.442265 9.731348

$p.value
         two-sided
Predictor   midp.exact fisher.exact   chi.square
       sp           NA           NA           NA
       br 2.102096e-12 2.098019e-12 6.739306e-13

$correction
[1] FALSE

attr(,"method")
[1] "median-unbiased estimate & mid-p exact CI"
(60*352)/(23*160)
[1] 5.73913

7 H2: Respostas diferentes por grupos

Será que a pessoa que está em risco na EAT, tem valor na BSQ alto?

dados %>% 
  #filter(sex_female == "female") %>% 
  mutate(corte_eat =
           if_else(eat_soma_c >= 21, 1,0)) %>% 
  {t.test(bsq_soma_c ~ corte_eat, data =.)}

    Welch Two Sample t-test

data:  bsq_soma_c by corte_eat
t = -13.739, df = 97.745, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -65.54413 -48.99917
sample estimates:
mean in group 0 mean in group 1 
       65.71439       122.98604 
dados %>% 
  #filter(sex_female == "female") %>% 
  mutate(corte_bsq =
           if_else(bsq_soma_c >= 110, 1,0)) %>% 
  {t.test(bsq_soma_c ~ corte_bsq, data =.)}

    Welch Two Sample t-test

data:  bsq_soma_c by corte_bsq
t = -30.262, df = 134.97, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -79.65602 -69.88326
sample estimates:
mean in group 0 mean in group 1 
       60.76023       135.52987 

7.1 Plot

7.2 Plot (Quadrantes)

7.3 Proporção de homens e mulheres

dados%>% 
  filter(!is.na(sex_female)) %>% 
  #filter(imc < 24.9) %>% 
  mutate(corte_bsq =
           if_else(bsq_soma_c >= 110, 1,0)) %>% 
    mutate(corte_eat =
           if_else(eat_soma >= 21, 1,0)) %>% 
  mutate(quadrantes = case_when(
    corte_bsq == 1 &  corte_eat == 1 ~ "risco",
    corte_bsq == 0 &  corte_eat == 0 ~ "ok",
    corte_bsq == 1 &  corte_eat == 0 ~ "risco_bsq",
    corte_bsq == 0 &  corte_eat == 1 ~ "risco_eat",
    
  )) %>% 
  group_by(quadrantes, country,sex_female) %>%
  summarise(n=n()) %>% 
  mutate(prop = n/sum(n)) %>% 
  mutate(prop = round(prop*100,1)) %>%
  select(-n) %>% 
  pivot_wider(names_from = "quadrantes", values_from = "prop")
`summarise()` has grouped output by 'quadrantes', 'country'. You can override using the `.groups` argument.

8 H3: (proporções entre homens e mulheres sobre satisfação corporal)

8.1 Gráfico

dados %>% 
  select(country, sex_female, peso_desejado, peso_atual) %>%  #select target variables
  rename(Sex = "sex_female") %>%  #rename to make easier
  mutate(Sex  = str_to_sentence(Sex)) %>% #sentene case
  na.omit() %>% #don't use missings
  mutate(razao = peso_desejado/peso_atual) %>% #fazer razao 
  group_by(Sex) %>% #agrupar por sexo
  mutate(percrank=rank(razao)/length(razao)) %>% #calcular percentil
  arrange(Sex,razao) %>% 
  ggplot(., 
  aes(x = razao, y = percrank, colour = Sex, linetype = country)) +
  geom_point(size=1) +
  geom_line(size = 2, alpha = 0.5) +
  geom_vline(xintercept = 1, linetype = "dashed") + 
  #geom_smooth(level = 0.99) +
  labs(x = "Ratio",  y = "Percentage") +
  theme_bw()

8.2 Tabela Brasil

dados %>% 
  filter(country == "br") %>% 
  filter(!is.na(sex_female), !is.na(weight_status)) %>% 
  group_by(sex_female,weight_status) %>% 
  tabyl(sex_female, weight_status) %>% 
  adorn_totals(c("row", "col")) %>%
  adorn_percentages("row") %>% 
  adorn_pct_formatting(rounding = "half up", digits = 0) %>%
  adorn_ns() %>% 
  kable()

8.3 Tabela Espanha

dados %>% 
  filter(country == "sp") %>% 
  filter(!is.na(sex_female), !is.na(weight_status)) %>% 
  group_by(sex_female,weight_status) %>% 
  tabyl(sex_female, weight_status) %>% 
  adorn_totals(c("row", "col")) %>%
  adorn_percentages("row") %>% 
  adorn_pct_formatting(rounding = "half up", digits = 0) %>%
  adorn_ns() %>% 
  kable()

8.4 Qui-quadrado

dados %>% 
  filter(country == "br") %>% 
  filter(!is.na(sex_female), !is.na(weight_status)) %>% 
  {descr::crosstab(.$sex_female, .$weight_status, chisq = T, plot = F)}
   Cell Contents 
|-------------------------|
|                   Count | 
|-------------------------|

===============================================
                .$weight_status
.$sex_female    ganhar   igual   perder   Total
-----------------------------------------------
male                25      21       37      83
-----------------------------------------------
female               9      18       94     121
-----------------------------------------------
Total               34      39      131     204
===============================================

Statistics for All Table Factors

Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 = 26.39928      d.f. = 2      p = 1.85e-06 

        Minimum expected frequency: 13.83333 

9 H4: HPossível explicação (Hipótese Erica)

dados %>% 
  filter(sex_female == "female") %>% 
  group_by(weight_status) %>% 
  summarise(mean(imc), mean(peso_atual),mean(altura), n())

10 H5: fator protetivo em fazer esporte

10.1 plot

dados %>% 
  filter(!is.na(faz_esporte)) %>% 
  ggplot(., aes(x= imc, y = bsq_soma_c, fill = faz_esporte)) +
  geom_jitter() +
  geom_smooth(method = "lm")

10.2 Regressao múltipla BSQ

dados %>% 
  lm(bsq_soma_c ~ imc + faz_esporte + country + sex_female, data = .) %>% 
  apaTables::apa.aov.table()
  olsrr::ols_regress(.)

10.3 Regressao múltipla EAT

dados %>% 
  lm(eat_soma_c ~ imc + faz_esporte + country + sex_female, data = .) %>% 
  apaTables::apa.aov.table()


ANOVA results using eat_soma_c as the dependent variable
 

Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared 
  olsrr::ols_regress(.)
Error in olsrr::ols_regress(.) : object '.' not found

11 H6: Exploratory analisys (Questionnaire’s respose)

11.1 Network plot

#install.packages("NetworkComparisonTest")

library(NetworkComparisonTest)
package 㤼㸱NetworkComparisonTest㤼㸲 was built under R version 4.0.5
netw<-NCT(data1, data2,make.positive.definite=TRUE, test.edges=FALSE, edges="all")

  |                                                                                                                                                                     
  |                                                                                                                                                               |   0%
  |                                                                                                                                                                     
  |==                                                                                                                                                             |   1%
  |                                                                                                                                                                     
  |===                                                                                                                                                            |   2%
  |                                                                                                                                                                     
  |=====                                                                                                                                                          |   3%
  |                                                                                                                                                                     
  |======                                                                                                                                                         |   4%
  |                                                                                                                                                                     
  |========                                                                                                                                                       |   5%
  |                                                                                                                                                                     
  |==========                                                                                                                                                     |   6%
  |                                                                                                                                                                     
  |===========                                                                                                                                                    |   7%
  |                                                                                                                                                                     
  |=============                                                                                                                                                  |   8%
  |                                                                                                                                                                     
  |==============                                                                                                                                                 |   9%
  |                                                                                                                                                                     
  |================                                                                                                                                               |  10%
  |                                                                                                                                                                     
  |=================                                                                                                                                              |  11%
  |                                                                                                                                                                     
  |===================                                                                                                                                            |  12%
  |                                                                                                                                                                     
  |=====================                                                                                                                                          |  13%
  |                                                                                                                                                                     
  |======================                                                                                                                                         |  14%
  |                                                                                                                                                                     
  |========================                                                                                                                                       |  15%
  |                                                                                                                                                                     
  |=========================                                                                                                                                      |  16%
  |                                                                                                                                                                     
  |===========================                                                                                                                                    |  17%
  |                                                                                                                                                                     
  |=============================                                                                                                                                  |  18%
  |                                                                                                                                                                     
  |==============================                                                                                                                                 |  19%
  |                                                                                                                                                                     
  |================================                                                                                                                               |  20%
  |                                                                                                                                                                     
  |=================================                                                                                                                              |  21%
  |                                                                                                                                                                     
  |===================================                                                                                                                            |  22%
  |                                                                                                                                                                     
  |=====================================                                                                                                                          |  23%
  |                                                                                                                                                                     
  |======================================                                                                                                                         |  24%
  |                                                                                                                                                                     
  |========================================                                                                                                                       |  25%
  |                                                                                                                                                                     
  |=========================================                                                                                                                      |  26%
  |                                                                                                                                                                     
  |===========================================                                                                                                                    |  27%
  |                                                                                                                                                                     
  |=============================================                                                                                                                  |  28%
  |                                                                                                                                                                     
  |==============================================                                                                                                                 |  29%
  |                                                                                                                                                                     
  |================================================                                                                                                               |  30%
  |                                                                                                                                                                     
  |=================================================                                                                                                              |  31%
  |                                                                                                                                                                     
  |===================================================                                                                                                            |  32%
  |                                                                                                                                                                     
  |====================================================                                                                                                           |  33%
  |                                                                                                                                                                     
  |======================================================                                                                                                         |  34%
  |                                                                                                                                                                     
  |========================================================                                                                                                       |  35%
  |                                                                                                                                                                     
  |=========================================================                                                                                                      |  36%
  |                                                                                                                                                                     
  |===========================================================                                                                                                    |  37%
  |                                                                                                                                                                     
  |============================================================                                                                                                   |  38%
  |                                                                                                                                                                     
  |==============================================================                                                                                                 |  39%
  |                                                                                                                                                                     
  |================================================================                                                                                               |  40%
  |                                                                                                                                                                     
  |=================================================================                                                                                              |  41%
  |                                                                                                                                                                     
  |===================================================================                                                                                            |  42%
  |                                                                                                                                                                     
  |====================================================================                                                                                           |  43%
  |                                                                                                                                                                     
  |======================================================================                                                                                         |  44%
  |                                                                                                                                                                     
  |========================================================================                                                                                       |  45%
  |                                                                                                                                                                     
  |=========================================================================                                                                                      |  46%
  |                                                                                                                                                                     
  |===========================================================================                                                                                    |  47%
  |                                                                                                                                                                     
  |============================================================================                                                                                   |  48%
  |                                                                                                                                                                     
  |==============================================================================                                                                                 |  49%
  |                                                                                                                                                                     
  |================================================================================                                                                               |  50%
  |                                                                                                                                                                     
  |=================================================================================                                                                              |  51%
  |                                                                                                                                                                     
  |===================================================================================                                                                            |  52%
  |                                                                                                                                                                     
  |====================================================================================                                                                           |  53%
  |                                                                                                                                                                     
  |======================================================================================                                                                         |  54%
  |                                                                                                                                                                     
  |=======================================================================================                                                                        |  55%
  |                                                                                                                                                                     
  |=========================================================================================                                                                      |  56%
  |                                                                                                                                                                     
  |===========================================================================================                                                                    |  57%
  |                                                                                                                                                                     
  |============================================================================================                                                                   |  58%
  |                                                                                                                                                                     
  |==============================================================================================                                                                 |  59%
  |                                                                                                                                                                     
  |===============================================================================================                                                                |  60%
  |                                                                                                                                                                     
  |=================================================================================================                                                              |  61%
  |                                                                                                                                                                     
  |===================================================================================================                                                            |  62%
  |                                                                                                                                                                     
  |====================================================================================================                                                           |  63%
  |                                                                                                                                                                     
  |======================================================================================================                                                         |  64%
  |                                                                                                                                                                     
  |=======================================================================================================                                                        |  65%
  |                                                                                                                                                                     
  |=========================================================================================================                                                      |  66%
  |                                                                                                                                                                     
  |===========================================================================================================                                                    |  67%
  |                                                                                                                                                                     
  |============================================================================================================                                                   |  68%
  |                                                                                                                                                                     
  |==============================================================================================================                                                 |  69%
  |                                                                                                                                                                     
  |===============================================================================================================                                                |  70%
  |                                                                                                                                                                     
  |=================================================================================================================                                              |  71%
  |                                                                                                                                                                     
  |==================================================================================================================                                             |  72%
  |                                                                                                                                                                     
  |====================================================================================================================                                           |  73%
  |                                                                                                                                                                     
  |======================================================================================================================                                         |  74%
  |                                                                                                                                                                     
  |=======================================================================================================================                                        |  75%
  |                                                                                                                                                                     
  |=========================================================================================================================                                      |  76%
  |                                                                                                                                                                     
  |==========================================================================================================================                                     |  77%
  |                                                                                                                                                                     
  |============================================================================================================================                                   |  78%
  |                                                                                                                                                                     
  |==============================================================================================================================                                 |  79%
  |                                                                                                                                                                     
  |===============================================================================================================================                                |  80%
  |                                                                                                                                                                     
  |=================================================================================================================================                              |  81%
  |                                                                                                                                                                     
  |==================================================================================================================================                             |  82%
  |                                                                                                                                                                     
  |====================================================================================================================================                           |  83%
  |                                                                                                                                                                     
  |======================================================================================================================================                         |  84%
  |                                                                                                                                                                     
  |=======================================================================================================================================                        |  85%
  |                                                                                                                                                                     
  |=========================================================================================================================================                      |  86%
  |                                                                                                                                                                     
  |==========================================================================================================================================                     |  87%
  |                                                                                                                                                                     
  |============================================================================================================================================                   |  88%
  |                                                                                                                                                                     
  |==============================================================================================================================================                 |  89%
  |                                                                                                                                                                     
  |===============================================================================================================================================                |  90%
  |                                                                                                                                                                     
  |=================================================================================================================================================              |  91%
  |                                                                                                                                                                     
  |==================================================================================================================================================             |  92%
  |                                                                                                                                                                     
  |====================================================================================================================================================           |  93%
  |                                                                                                                                                                     
  |=====================================================================================================================================================          |  94%
  |                                                                                                                                                                     
  |=======================================================================================================================================================        |  95%
  |                                                                                                                                                                     
  |=========================================================================================================================================================      |  96%
  |                                                                                                                                                                     
  |==========================================================================================================================================================     |  97%
  |                                                                                                                                                                     
  |============================================================================================================================================================   |  98%
  |                                                                                                                                                                     
  |=============================================================================================================================================================  |  99%
  |                                                                                                                                                                     
  |===============================================================================================================================================================| 100%
plot(netw,what="network")

dados %>% 
  na.omit() -> write.csv(., "dados_pesquisa_puc_no_missing.csv", row.names = F)
Error in write.csv(., "dados_pesquisa_puc_no_missing.csv", row.names = F) <- dados %>%  : 
  object '.' not found
plot(Layout)
Error in as.double(y) : 
  cannot coerce type 'environment' to vector of type 'double'
centralityPlot(GGM = list(female_br = graph_female_br, female_sp = graph_female_sp))
Note: z-scores are shown on x-axis rather than raw centrality indices.

11.2 Medias e cohens d

dados %>% 
  filter(sex_female == "female") %>% #filtrar para apenas mulheres
  select(country, eat1_c:eat26_c) %>%  #deixar países e escalas
  pivot_longer(cols = -country, values_to = 'value1') %>%  #mudar base
  group_by(country,name) %>% #criar agrupador por países e itens
  summarise_at(vars(value1), list(mean=mean, sd=sd)) %>% #criar sumario
  pivot_wider(names_from = country, values_from=mean:sd) %>% #apresentar o sumario como tablea
  mutate(cohen = (mean_br-mean_sp)/((sd_br+sd_br)/2)) %>% 
  mutate(cohen_int = factor(case_when(
    cohen < abs(0.1) ~ "neg",
    cohen < abs(0.3) ~ "small",
    cohen < abs(0.5) ~ "med",
    TRUE ~ "strong"), levels=c("neg","small","med", "strong"))) %>% 
  arrange(desc(cohen)) %>% 
  {length(.$cohen_int[.$cohen_int == "strong"])}
[1] 11
dados %>% 
  filter(sex_female == "female") %>% #filtrar para apenas mulheres
  select(country, bsq1_c:bsq34_c) %>%  #deixar países e escalas
  pivot_longer(cols = -country, values_to = 'value1') %>%  #mudar base
  group_by(country,name) %>% #criar agrupador por países e itens
  summarise_at(vars(value1), list(mean=mean, sd=sd)) %>% #criar sumario
  pivot_wider(names_from = country, values_from=mean:sd) %>% #apresentar o sumario como tablea
  mutate(cohen = (mean_br-mean_sp)/((sd_br+sd_br)/2)) %>% 
  mutate(cohen_int = factor(case_when(
    cohen < abs(0.1) ~ "neg",
    cohen < abs(0.3) ~ "small",
    cohen < abs(0.5) ~ "med",
    TRUE ~ "strong"), levels=c("neg","small","med", "strong"))) %>%   #cohens interpretation
  select(-contains("sd")) %>% 
  pivot_longer(-c(name, cohen, cohen_int), names_to ="pais") %>% 
  mutate(name = factor(name)) %>% 
  mutate(name = fct_reorder(name, cohen, .desc = TRUE)) %>% #change X order by cohens d
  mutate(pais = if_else(pais == "mean_br","BR","SP"))  %>%  #change label of pais
  ggplot(., aes(x = name, y = value, fill = pais, group=pais)) +
  geom_col(stat = "summary", position = "dodge") +
  #geom_vline(aes(xintercept=11), linetype="dashed",colour="blue",size=0.7) +
  labs(x = "Itens", y = "Resultado", fill = "País")+
  theme_bw() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  #facet_grid(. ~ cohen_int) +
  facet_wrap(~cohen_int) +
  theme(text = element_text(size=15))
Ignoring unknown parameters: stat

dados %>% 
  filter(sex_female == "female") %>% #filtrar para apenas mulheres
  select(country, bsq:eat26_c) %>%  #deixar países e escalas
  pivot_longer(cols = -country, values_to = 'value1') %>%  #mudar base
  group_by(country,name) %>% #criar agrupador por países e itens
  summarise_at(vars(value1), list(mean=mean, sd=sd)) %>% #criar sumario
  pivot_wider(names_from = country, values_from=mean:sd) %>% #apresentar o sumario como tablea
  mutate(cohen = (mean_br-mean_sp)/((sd_br+sd_br)/2)) %>% 
  mutate(cohen_int = factor(case_when(
    cohen < abs(0.1) ~ "neg",
    cohen < abs(0.3) ~ "small",
    cohen < abs(0.5) ~ "med",
    TRUE ~ "strong"), levels=c("neg","small","med", "strong"))) %>%   #cohens interpretation
  select(-contains("sd")) %>% 
  pivot_longer(-c(name, cohen, cohen_int), names_to ="pais") %>% 
  mutate(name = factor(name)) %>% 
  mutate(name = fct_reorder(name, cohen, .desc = TRUE)) %>% #change X order by cohens d
  mutate(pais = if_else(pais == "mean_br","BR","SP"))  %>%  #change label of pais
  ggplot(., aes(x = name, y = value, fill = pais, group=pais)) +
  geom_col(stat = "summary", position = "dodge") +
  #geom_vline(aes(xintercept=11), linetype="dashed",colour="blue",size=0.7) +
  labs(x = "Itens", y = "Resultado", fill = "País")+
  theme_bw() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  #facet_grid(. ~ cohen_int) +
  #facet_wrap(~cohen_int) +
  theme(text = element_text(size=15))

12 Likert plot

library(likert)
Loading required package: xtable

Attaching package: 㤼㸱likert㤼㸲

The following object is masked from 㤼㸱package:dplyr㤼㸲:

    recode
dados_eat_likert <- dados %>% #get dataset
  select(sex_female, eat1_c:eat26_c) %>% 
  as.data.frame() %>% #get dataset 
  na.omit() %>% 
  mutate_at(vars(-sex_female), ~factor(., levels=0:3)) 
plot(likert(dados_eat_likert[,2:5], grouping=dados_eat_likert$sex_female)) 
library(patchwork)
p1 <- dados %>% #get dataset
  filter(country == "br") %>% 
  select(sex_female, eat1_c:eat26_c) %>% 
  as.data.frame() %>% #get dataset 
  na.omit() %>% 
  mutate_at(vars(-sex_female), ~factor(., levels=0:3)) %>% 
  {likert(.[,2:10], grouping=.[,1])} %>%  
  plot() +  
  ggthemes::theme_few() + 
  ylab("Br") +
  theme(legend.position = "none")
 
p2 <- dados %>% #get dataset
  filter(country == "sp") %>% 
  select(sex_female, eat1_c:eat26_c) %>% 
  as.data.frame() %>% #get dataset 
  na.omit() %>% 
  mutate_at(vars(-sex_female), ~factor(., levels=0:3)) %>% 
  {likert(.[,2:10], grouping=.[,1])} %>%  
  plot() +  
  ylab("Sp") +
  ggthemes::theme_few()

p1+p2

dados %>% 
  select(country, sex_female, eat1_c:eat26_c) %>%
  na.omit() %>% 
  pivot_longer(cols = -c(country, sex_female),
               names_to = "item", values_to = "categoria") %>% 
  group_by(item, country, sex_female, categoria) %>% 
  summarise(N = n()) %>%
  mutate(Pct = N / sum(N)) %>% 
  mutate(categoria = factor(round(categoria,0))) %>% 
  ggplot(aes(x = item, y = Pct, fill = categoria)) +
  geom_bar(position="fill", stat="identity")+
  scale_y_continuous(labels = scales::percent) +
  #geom_text(aes(x=item, y=Pct, group=categoria,label = paste(Pct*100, "%"))) +
  coord_flip() +
  facet_wrap(~sex_female + country) +
  theme_bw() +
  theme(legend.position = "bottom")
`summarise()` has grouped output by 'item', 'country', 'sex_female'. You can override using the `.groups` argument.

#Hx: Sex and country differences

12.1 BSQ

apaTables::apa.aov.table(mod_sex_country_bsq)


ANOVA results using bsq_soma_c as the dependent variable
 

Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared 

12.2 Correlacao entre fatores

dados %>% 
  filter(country == "sp") %>% 
  select(eat_soma_c, bsq_soma_c) %>% 
  cor()
           eat_soma_c bsq_soma_c
eat_soma_c  1.0000000  0.6778482
bsq_soma_c  0.6778482  1.0000000
dados %>% 
  filter(country == "br") %>% 
  select(eat_soma_c, bsq_soma_c) %>% 
  cor()
           eat_soma_c bsq_soma_c
eat_soma_c   1.000000   0.694056
bsq_soma_c   0.694056   1.000000

12.3 EAT geral

apaTables::apa.aov.table(mod_sex_country_ead)


ANOVA results using eat_soma_c as the dependent variable
 

Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared 

apaTables::apa.aov.table(mod_sex_country_eat_dieta)


ANOVA results using eat_dieta as the dependent variable
 

Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared 

12.4 EAT Bulimia

apaTables::apa.aov.table(mod_sex_country_eat_bulimia)


ANOVA results using eat_bulimia as the dependent variable
 

Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared 

12.5 Controle oral

mod_sex_country_eat_controle <- lm(eat_controle ~ sex_female * country, dados)
Error in eval(predvars, data, env) : object 'eat_controle' not found
apaTables::apa.aov.table(mod_sex_country_eat_controle)


ANOVA results using eat_oral as the dependent variable
 

Note: Values in square brackets indicate the bounds of the 90% confidence interval for partial eta-squared 

##2: Weight differences

12.6 Hipotese erica

LS0tDQp0aXRsZTogIlBVQy1SaW8gLSBEYXRhIGFuYWx5c2lzIEVBVCwgQlNRICgzIGNvdW50cmllcykiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGNlcnVsZWFuIA0KICAgIGhpZ2hsaWdodDogdGV4dG1hdGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KLS0tDQoNCmBgYHtyIGdsb2JhbCBvcHRpb25zLCBpbmNsdWRlID0gRkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIA0KICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMgPSBGQUxTRSwgDQogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9ICJoaWRlIikNCmBgYA0KDQoNCiMgTG9hZCBwYWNrYWdlcw0KYGBge3J9DQpwYWNtYW46OnBfbG9hZCh0aWR5dmVyc2UsIGFyc2VuYWwsamFuaXRvciwga25pdHIpDQoNCmBgYA0KDQojIExvYWQgZGF0YSANCg0KVGhpcyBpcyB0aGUgcHJvY2Vzc2VkIGRzLg0KYGBge3J9DQpsb2FkKCJDOi9Vc2Vycy9sdWlzZi9Ecm9wYm94L1B1Yy1SaW8vUHJvamV0byAtIEFkaWNhbyBhIGludGVybmV0LCBpbWFnZW0gZSBhbGltZW50YWNhby9QZXNxdWlzYS9hbmFsaXNlIGRlIGRhZG9zLzIwMjAgLSBHcnVwbyBlc3R1ZG9zIC0gcHVjL1IgYmFzZSAtIERhZG9zIGFmdGVyIHByb2Nlc3Npbmcgb24gRGVjZW1iZXIgMjAyMCAoUFVDUmlvKS5SRGF0YSIpDQpgYGANCg0KIyBDaGVjayBuYW1lcyBhbmQgcmVsaWFiaWxpdHkgb2YgdGhlIGRzDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIG5hbWVzDQpgYGANCg0KIyBFQVQgDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBzZWxlY3Qoc3RhcnRzX3dpdGgoImVhdCIpICYgZW5kc193aXRoKCJfYyIpLCAtZWF0X3NvbWFfYykgJT4lIA0KICBwc3ljaDo6YWxwaGEoKQ0KYGBgDQoNCiMjIEZhdG9yZXMNCg0KDQpgYGB7cn0NCmRhZG9zIDwtIGRhZG9zICU+JSANCiAgbXV0YXRlKGVhdF9kaWV0YSA9IHJvd1N1bXMoc2VsZWN0KC4sIGVhdDFfYywgZWF0Nl9jLGVhdDdfYyxlYXQxMF9jLGVhdDExX2MsZWF0MTJfYyxlYXQxNF9jLGVhdDE2X2MsZWF0MTdfYyxlYXQyMl9jLCBlYXQyM19jLCBlYXQyNF9jLCBlYXQyNV9jKSkpICU+JSANCiAgbXV0YXRlKGVhdF9idWxpbWlhID0gcm93U3VtcyhzZWxlY3QoLiwgZWF0M19jLCBlYXQ0X2MsZWF0OV9jLGVhdDE4X2MsZWF0MjFfYyxlYXQyNl9jKSkpICU+JSANCiAgbXV0YXRlKGVhdF9vcmFsID0gcm93U3VtcyhzZWxlY3QoLiwgZWF0Ml9jLCBlYXQ1X2MsZWF0OF9jLGVhdDEzX2MsZWF0MTVfYyxlYXQxOV9jLGVhdDIwX2MpKSkNCmBgYA0KDQoNCg0KIyMgQ29ycmVsYWNhbyBlbnRyZSBmYXRvcmVzDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBzZWxlY3QoZWF0X2RpZXRhLCBlYXRfYnVsaW1pYSwgZWF0X29yYWwsIGVhdF9zb21hX2MpICU+JSANCiAgY29yKC4pDQpgYGANCg0KIyMgQWxmYSBEaWV0YQ0KDQpgYGB7cn0NCmRhZG9zICU+JSBzZWxlY3QoLiwgZWF0MV9jLCBlYXQ2X2MsZWF0N19jLGVhdDEwX2MsZWF0MTFfYyxlYXQxMl9jLGVhdDE0X2MsZWF0MTZfYyxlYXQxN19jLGVhdDIyX2MsIGVhdDIzX2MsIGVhdDI0X2MsIGVhdDI1X2MpICU+JSANCiAgcHN5Y2g6OmFscGhhKC4pDQoNCmBgYA0KDQoNCiMjIEFsZmEgQnVsaW1pYQ0KDQpgYGB7cn0NCmRhZG9zICU+JSBzZWxlY3QoZWF0M19jLCBlYXQ0X2MsZWF0OV9jLGVhdDE4X2MsZWF0MjFfYyxlYXQyNl9jKSAlPiUgDQogIHBzeWNoOjphbHBoYSguKQ0KYGBgDQojIyBBbGZhIENvbnRyb2xlIG9yYWwNCg0KYGBge3J9DQpkYWRvcyAlPiUgc2VsZWN0KGVhdDJfYywgZWF0NV9jLGVhdDhfYyxlYXQxM19jLGVhdDE1X2MsZWF0MTlfYyxlYXQyMF9jKSAlPiUgDQogIHBzeWNoOjphbHBoYSgpDQpgYGANCg0KIyMgUGxvdCANCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIHNlbGVjdChlYXRfZGlldGEsIGVhdF9idWxpbWlhLCBlYXRfb3JhbCkgJT4lIA0KICBwaXZvdF9sb25nZXIoZXZlcnl0aGluZygpKSAlPiUgDQogIGdncGxvdCguLCBhZXMoZmN0X3Jlb3JkZXIobmFtZSwgdmFsdWUpLCB2YWx1ZSkpICsNCiAgZ2VvbV9ib3hwbG90KCkNCmBgYA0KDQoNCiMgQlNRLTM0DQoNCiMjIEFscGhhIA0KYGBge3J9DQpkYWRvcyAlPiUgDQogIHNlbGVjdChzdGFydHNfd2l0aCgiYnNxIikgJiBlbmRzX3dpdGgoIl9jIiksIC1ic3Ffc29tYV9jKSAlPiUgDQogIHBzeWNoOjphbHBoYSgpDQpgYGANCg0KDQoNCiMgSDE6IERhZG9zIGVwaWRlbWlvbG9naWNvcw0KDQojIyBCU1EtMzQNCg0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgbXV0YXRlKGNvcnRlID0NCiAgICAgICAgICAgaWZfZWxzZShic3Ffc29tYV9jID49IDExMCwgMSwwKSkgJT4lIA0KICBjb3VudChjb3J0ZSkgJT4lIA0KICBtdXRhdGUoZnJlcSA9IG4gLyBzdW0obikpDQpgYGANCg0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgbXV0YXRlKGNvcnRlID0NCiAgICAgICAgICAgaWZfZWxzZShic3Ffc29tYV9jID49IDExMCwgMSwwKSkgJT4lIA0KICB7ZGVzY3I6OkNyb3NzVGFibGUoLiRjb3VudHJ5LC4kY29ydGUsIA0KICAgICAgICAgICAgICAgICAgICAgY2hpc3EgPSBULHByb3AuY2hpc3EgPSBGLCANCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gVCl9DQpgYGANCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogICNmaWx0ZXIoc2V4X2ZlbWFsZSA9PSAiZmVtYWxlIikgJT4lIA0KICBtdXRhdGUoY29ydGUgPQ0KICAgICAgICAgICBpZl9lbHNlKGJzcV9zb21hX2MgPj0gMTEwLCAxLDApKSAlPiUgDQogIHtlcGl0b29sczo6b2Rkc3JhdGlvKC4kY291bnRyeSwuJGNvcnRlLCByZXYgPSAiciIpfQ0KYGBgDQoNCg0KIyMgRUFULTI2DQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBtdXRhdGUoY29ydGUgPQ0KICAgICAgICAgICBpZl9lbHNlKGVhdF9zb21hX2MgPj0gMjEsIDEsMCkpICU+JSANCiAgY291bnQoY29ydGUpICU+JSANCiAgbXV0YXRlKGZyZXEgPSBuIC8gc3VtKG4pKQ0KYGBgDQoNCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIG11dGF0ZShjb3J0ZSA9DQogICAgICAgICAgIGlmX2Vsc2UoZWF0X3NvbWFfYyA+PSAyMSwgMSwwKSkgJT4lIA0KICB7ZGVzY3I6OkNyb3NzVGFibGUoLiRjb3VudHJ5LC4kY29ydGUsIHByb3AuY2hpc3EgPSBGLCANCiAgICAgICAgICAgICAgICAgICAgIGNoaXNxID0gVCwgDQogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFQpfQ0KYGBgDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICAjZmlsdGVyKHNleF9mZW1hbGUgPT0gImZlbWFsZSIpICU+JSANCiAgbXV0YXRlKGNvcnRlID0NCiAgICAgICAgICAgaWZfZWxzZShlYXRfc29tYV9jID49IDIxLCAxLDApKSAlPiUgDQogIHtlcGl0b29sczo6b2Rkc3JhdGlvKC4kY291bnRyeSwuJGNvcnRlLCByZXYgPSAiciIpfQ0KDQooNjAqMzUyKS8oMjMqMTYwKQ0KYGBgDQoNCiMgSDI6IFJlc3Bvc3RhcyBkaWZlcmVudGVzIHBvciBncnVwb3MNCg0KPiBTZXLDoSBxdWUgYSBwZXNzb2EgcXVlIGVzdMOhIGVtIHJpc2NvIG5hIEVBVCwgdGVtIHZhbG9yIG5hIEJTUSBhbHRvPw0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgbXV0YXRlKGNvcnRlX2VhdCA9DQogICAgICAgICAgIGlmX2Vsc2UoZWF0X3NvbWFfYyA+PSAyMSwgMSwwKSkgJT4lIA0KICB7dC50ZXN0KGJzcV9zb21hX2MgfiBjb3J0ZV9lYXQsIGRhdGEgPS4pfQ0KYGBgDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBtdXRhdGUoY29ydGVfYnNxID0NCiAgICAgICAgICAgaWZfZWxzZShic3Ffc29tYV9jID49IDExMCwgMSwwKSkgJT4lIA0KICB7dC50ZXN0KGJzcV9zb21hX2MgfiBjb3J0ZV9ic3EsIGRhdGEgPS4pfQ0KYGBgDQoNCiMjIFBsb3QgDQoNCmBgYHtyfQ0KZGFkb3MlPiUgDQogIGZpbHRlcighaXMubmEoc2V4X2ZlbWFsZSkpICU+JSANCiAgbXV0YXRlKGNvcnRlX2JzcSA9DQogICAgICAgICAgIGlmX2Vsc2UoYnNxX3NvbWFfYyA+PSAxMTAsIDEsMCkpICU+JSANCiAgZ2dwbG90KC4sIGFlcyh4PSBmYWN0b3IoY29ydGVfYnNxKSwgeSA9IGVhdF9zb21hX2MsIGZpbGwgPSBzZXhfZmVtYWxlKSkgKw0KICAgZ2VvbV9iYXIoc3RhdCA9ICJzdW1tYXJ5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIHN0YXRfc3VtbWFyeShnZW9tPSJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgDQogICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOTUpLCB3aWR0aCA9IC41KSArDQogICAgICBmYWNldF93cmFwKH5jb3VudHJ5KSAgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAyMSkNCmBgYA0KDQoNCiMjIFBsb3QgKFF1YWRyYW50ZXMpDQoNCmBgYHtyfQ0KZGFkb3MlPiUgDQogIGZpbHRlcighaXMubmEoc2V4X2ZlbWFsZSkpICU+JSANCiAgI2ZpbHRlcihpbWMgPCAyNC45KSAlPiUgDQogIG11dGF0ZShjb3J0ZV9ic3EgPQ0KICAgICAgICAgICBpZl9lbHNlKGJzcV9zb21hX2MgPj0gMTEwLCAxLDApKSAlPiUgDQogICAgbXV0YXRlKGNvcnRlX2VhdCA9DQogICAgICAgICAgIGlmX2Vsc2UoZWF0X3NvbWEgPj0gMjEsIDEsMCkpICU+JSANCiAgZ2dwbG90KC4sIGFlcyh5PWVhdF9zb21hX2MsIHggPSBic3Ffc29tYV9jLCBjb2xvciA9IHNleF9mZW1hbGUpKSArDQogIGdlb21faml0dGVyKHNpemUgPSAyKSArDQogICNnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKSArDQogIGZhY2V0X3dyYXAofmNvdW50cnkpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMjEpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMTEwKSArDQogIGFubm90YXRlKCJyZWN0IiwgeG1pbj0xMTAsIHhtYXg9MjEwLCB5bWluPTIxLCB5bWF4PTYwLCBhbHBoYT0wLjIsIGZpbGw9InJlZCIpICsNCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluPTAsIHhtYXg9MTEwLCB5bWluPTAsIHltYXg9MjEsIGFscGhhPTAuMSwgZmlsbD0iYmx1ZSIpICsNCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluPTAsIHhtYXg9MTEwLCB5bWluPTAsIHltYXg9MjEsIGFscGhhPTAuMSwgZmlsbD0iYmx1ZSIpICsNCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluPTAsIHhtYXg9MTEwLCB5bWluPTAsIHltYXg9MjEsIGFscGhhPTAuMSwgZmlsbD0iYmx1ZSIpICsNCiAgICBhbm5vdGF0ZSgNCiAgICBnZW9tID0gInRleHQiLCB4ID0gMTUwLCB5ID0gNjAsIA0KICAgIGxhYmVsID0gIlJpc2NvIiwgaGp1c3QgPSAwLCB2anVzdCA9IDEsIHNpemUgPSA0DQogICkgKw0KICBhbm5vdGF0ZSgNCiAgICBnZW9tID0gInRleHQiLCB4ID0gMiwgeSA9IDIsIA0KICAgIGxhYmVsID0gIk9rIiwgaGp1c3QgPSAwLCB2anVzdCA9IDEsIHNpemUgPSA0DQogICkgKw0KICBsYWJzKHggPSAiQlNRIiwgeSA9ICJFQVQiLCBjb2xvciA9ICJTZXhvIikgKw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KIyMgUHJvcG9yw6fDo28gZGUgaG9tZW5zIGUgbXVsaGVyZXMNCg0KYGBge3J9DQpkYWRvcyU+JSANCiAgZmlsdGVyKCFpcy5uYShzZXhfZmVtYWxlKSkgJT4lIA0KICAjZmlsdGVyKGltYyA8IDI0LjkpICU+JSANCiAgbXV0YXRlKGNvcnRlX2JzcSA9DQogICAgICAgICAgIGlmX2Vsc2UoYnNxX3NvbWFfYyA+PSAxMTAsIDEsMCkpICU+JSANCiAgICBtdXRhdGUoY29ydGVfZWF0ID0NCiAgICAgICAgICAgaWZfZWxzZShlYXRfc29tYSA+PSAyMSwgMSwwKSkgJT4lIA0KICBtdXRhdGUocXVhZHJhbnRlcyA9IGNhc2Vfd2hlbigNCiAgICBjb3J0ZV9ic3EgPT0gMSAmICBjb3J0ZV9lYXQgPT0gMSB+ICJyaXNjbyIsDQogICAgY29ydGVfYnNxID09IDAgJiAgY29ydGVfZWF0ID09IDAgfiAib2siLA0KICAgIGNvcnRlX2JzcSA9PSAxICYgIGNvcnRlX2VhdCA9PSAwIH4gInJpc2NvX2JzcSIsDQogICAgY29ydGVfYnNxID09IDAgJiAgY29ydGVfZWF0ID09IDEgfiAicmlzY29fZWF0IiwNCiAgICANCiAgKSkgJT4lIA0KICBncm91cF9ieShxdWFkcmFudGVzLCBjb3VudHJ5LHNleF9mZW1hbGUpICU+JQ0KICBzdW1tYXJpc2Uobj1uKCkpICU+JSANCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuKSkgJT4lIA0KICBtdXRhdGUocHJvcCA9IHJvdW5kKHByb3AqMTAwLDEpKSAlPiUNCiAgc2VsZWN0KC1uKSAlPiUgDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSAicXVhZHJhbnRlcyIsIHZhbHVlc19mcm9tID0gInByb3AiKQ0KICANCmBgYA0KDQoNCiMgSDM6IChwcm9wb3LDp8O1ZXMgZW50cmUgaG9tZW5zIGUgbXVsaGVyZXMgc29icmUgc2F0aXNmYcOnw6NvIGNvcnBvcmFsKQ0KDQojIyBHcsOhZmljbw0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgc2VsZWN0KHNleF9mZW1hbGUsIHBlc29fZGVzZWphZG8sIHBlc29fYXR1YWwpICU+JSAgI3NlbGVjdCB0YXJnZXQgdmFyaWFibGVzDQogIHJlbmFtZShTZXggPSAic2V4X2ZlbWFsZSIpICU+JSAgI3JlbmFtZSB0byBtYWtlIGVhc2llcg0KICBtdXRhdGUoU2V4ICA9IHN0cl90b19zZW50ZW5jZShTZXgpKSAlPiUgI3NlbnRlbmUgY2FzZQ0KICBuYS5vbWl0KCkgJT4lICNkb24ndCB1c2UgbWlzc2luZ3MNCiAgbXV0YXRlKHJhemFvID0gcGVzb19kZXNlamFkby9wZXNvX2F0dWFsKSAlPiUgI2ZhemVyIHJhemFvIA0KICBncm91cF9ieShTZXgpICU+JSAjYWdydXBhciBwb3Igc2V4bw0KICBtdXRhdGUocGVyY3Jhbms9cmFuayhyYXphbykvbGVuZ3RoKHJhemFvKSkgJT4lICNjYWxjdWxhciBwZXJjZW50aWwNCiAgYXJyYW5nZShTZXgscmF6YW8pICU+JSANCiAgZ2dwbG90KC4sIA0KICAgICAgIGFlcyh4ID0gcmF6YW8sIHkgPSBwZXJjcmFuaywgY29sb3VyID0gU2V4KSkgKyANCiAgZ2VvbV9saW5lKHNpemUgPSAyKSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDEsIGxpbmV0eXBlID0gImRhc2hlZCIpICsgDQogIGdlb21fc21vb3RoKGxldmVsID0gMC45OSkgKw0KICBsYWJzKHggPSAiUmF0aW8iLCAgeSA9ICJQZXJjZW50YWdlIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQpgYGB7ciwgZXZhbCA9IEZBTFNFIH0NCmRhZG9zICU+JSANCiAgc2VsZWN0KGNvdW50cnksIHNleF9mZW1hbGUsIHBlc29fZGVzZWphZG8sIHBlc29fYXR1YWwpICU+JSAgI3NlbGVjdCB0YXJnZXQgdmFyaWFibGVzDQogIHJlbmFtZShTZXggPSAic2V4X2ZlbWFsZSIpICU+JSAgI3JlbmFtZSB0byBtYWtlIGVhc2llcg0KICBtdXRhdGUoU2V4ICA9IHN0cl90b19zZW50ZW5jZShTZXgpKSAlPiUgI3NlbnRlbmUgY2FzZQ0KICBuYS5vbWl0KCkgJT4lICNkb24ndCB1c2UgbWlzc2luZ3MNCiAgbXV0YXRlKHJhemFvID0gcGVzb19kZXNlamFkby9wZXNvX2F0dWFsKSAlPiUgI2ZhemVyIHJhemFvIA0KICBncm91cF9ieShTZXgpICU+JSAjYWdydXBhciBwb3Igc2V4bw0KICBtdXRhdGUocGVyY3Jhbms9cmFuayhyYXphbykvbGVuZ3RoKHJhemFvKSkgJT4lICNjYWxjdWxhciBwZXJjZW50aWwNCiAgYXJyYW5nZShTZXgscmF6YW8pICU+JSANCiAgZ2dwbG90KC4sIA0KICBhZXMoeCA9IHJhemFvLCB5ID0gcGVyY3JhbmssIGNvbG91ciA9IFNleCwgbGluZXR5cGUgPSBjb3VudHJ5KSkgKw0KICBnZW9tX3BvaW50KHNpemU9MSkgKw0KICBnZW9tX2xpbmUoc2l6ZSA9IDIsIGFscGhhID0gMC41KSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDEsIGxpbmV0eXBlID0gImRhc2hlZCIpICsgDQogICNnZW9tX3Ntb290aChsZXZlbCA9IDAuOTkpICsNCiAgbGFicyh4ID0gIlJhdGlvIiwgIHkgPSAiUGVyY2VudGFnZSIpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCg0KIyMgVGFiZWxhIEJyYXNpbA0KDQoNCmBgYHtyLCBldmFsID0gRkFMU0UgfQ0KZGFkb3MgJT4lIA0KICBmaWx0ZXIoY291bnRyeSA9PSAiYnIiKSAlPiUgDQogIGZpbHRlcighaXMubmEoc2V4X2ZlbWFsZSksICFpcy5uYSh3ZWlnaHRfc3RhdHVzKSkgJT4lIA0KICBncm91cF9ieShzZXhfZmVtYWxlLHdlaWdodF9zdGF0dXMpICU+JSANCiAgdGFieWwoc2V4X2ZlbWFsZSwgd2VpZ2h0X3N0YXR1cykgJT4lIA0KICBhZG9ybl90b3RhbHMoYygicm93IiwgImNvbCIpKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JSANCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcocm91bmRpbmcgPSAiaGFsZiB1cCIsIGRpZ2l0cyA9IDApICU+JQ0KICBhZG9ybl9ucygpICU+JSANCiAga2FibGUoKQ0KYGBgDQoNCiMjIFRhYmVsYSBFc3BhbmhhDQoNCmBgYHtyLCBldmFsID0gRkFMU0UgfQ0KZGFkb3MgJT4lIA0KICBmaWx0ZXIoY291bnRyeSA9PSAic3AiKSAlPiUgDQogIGZpbHRlcighaXMubmEoc2V4X2ZlbWFsZSksICFpcy5uYSh3ZWlnaHRfc3RhdHVzKSkgJT4lIA0KICBncm91cF9ieShzZXhfZmVtYWxlLHdlaWdodF9zdGF0dXMpICU+JSANCiAgdGFieWwoc2V4X2ZlbWFsZSwgd2VpZ2h0X3N0YXR1cykgJT4lIA0KICBhZG9ybl90b3RhbHMoYygicm93IiwgImNvbCIpKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JSANCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcocm91bmRpbmcgPSAiaGFsZiB1cCIsIGRpZ2l0cyA9IDApICU+JQ0KICBhZG9ybl9ucygpICU+JSANCiAga2FibGUoKQ0KYGBgDQojIyBRdWktcXVhZHJhZG8NCg0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgZmlsdGVyKGNvdW50cnkgPT0gImJyIikgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNleF9mZW1hbGUpLCAhaXMubmEod2VpZ2h0X3N0YXR1cykpICU+JSANCiAge2Rlc2NyOjpjcm9zc3RhYiguJHNleF9mZW1hbGUsIC4kd2VpZ2h0X3N0YXR1cywgY2hpc3EgPSBULCBwbG90ID0gRil9DQpgYGANCg0KIyBINDogSFBvc3PDrXZlbCBleHBsaWNhw6fDo28gKEhpcMOzdGVzZSBFcmljYSkNCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIGZpbHRlcihzZXhfZmVtYWxlID09ICJmZW1hbGUiKSAlPiUgDQogIGdyb3VwX2J5KHdlaWdodF9zdGF0dXMpICU+JSANCiAgc3VtbWFyaXNlKG1lYW4oaW1jKSwgbWVhbihwZXNvX2F0dWFsKSxtZWFuKGFsdHVyYSksIG4oKSkNCmBgYA0KDQoNCg0KIyBINTogZmF0b3IgcHJvdGV0aXZvIGVtIGZhemVyIGVzcG9ydGUNCg0KIyMgcGxvdCANCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIGZpbHRlcighaXMubmEoZmF6X2VzcG9ydGUpKSAlPiUgDQogIGdncGxvdCguLCBhZXMoeD0gaW1jLCB5ID0gYnNxX3NvbWFfYywgZmlsbCA9IGZhel9lc3BvcnRlKSkgKw0KICBnZW9tX2ppdHRlcigpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIikNCmBgYA0KIyMgUmVncmVzc2FvIG3Dumx0aXBsYSBCU1ENCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIGxtKGJzcV9zb21hX2MgfiBpbWMgKyBmYXpfZXNwb3J0ZSArIGNvdW50cnkgKyBzZXhfZmVtYWxlLCBkYXRhID0gLikgJT4lIA0KICBhcGFUYWJsZXM6OmFwYS5hb3YudGFibGUoKQ0KICBvbHNycjo6b2xzX3JlZ3Jlc3MoLikNCmBgYA0KDQoNCiMjIFJlZ3Jlc3NhbyBtw7psdGlwbGEgRUFUDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBsbShlYXRfc29tYV9jIH4gaW1jICsgZmF6X2VzcG9ydGUgKyBjb3VudHJ5ICsgc2V4X2ZlbWFsZSwgZGF0YSA9IC4pICU+JSANCiAgYXBhVGFibGVzOjphcGEuYW92LnRhYmxlKCkNCiAgb2xzcnI6Om9sc19yZWdyZXNzKC4pDQpgYGANCg0KDQoNCg0KDQojIEg2OiBFeHBsb3JhdG9yeSBhbmFsaXN5cyAoUXVlc3Rpb25uYWlyZSdzIHJlc3Bvc2UpDQoNCiMjIE5ldHdvcmsgcGxvdA0KDQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJOZXR3b3JrQ29tcGFyaXNvblRlc3QiKQ0KDQpsaWJyYXJ5KE5ldHdvcmtDb21wYXJpc29uVGVzdCkNCg0KbmV0dzwtTkNUKGRhdGExLCBkYXRhMixtYWtlLnBvc2l0aXZlLmRlZmluaXRlPVRSVUUsIHRlc3QuZWRnZXM9RkFMU0UsIGVkZ2VzPSJhbGwiKQ0KcGxvdChuZXR3LHdoYXQ9Im5ldHdvcmsiKQ0KYGBgDQoNCg0KYGBge3J9DQpkYXRhMSA8LSBkYWRvcyAlPiUgDQogICNmaWx0ZXIoc2V4X2ZlbWFsZSA9PSAiZmVtYWxlIiwgY291bnRyeSA9PSAiYnIiKSAlPiUgDQogIHNlbGVjdChlYXQxX2M6ZWF0MjZfYykgJT4lIA0KICBtdXRhdGVfYWxsKC4sIH5hcy5udW1lcmljKC4pKSAlPiUgDQogIG5hLm9taXQoKSAlPiUgDQogIGRhdGEuZnJhbWUoKQ0KDQpkYXRhMiA8LSBkYWRvcyAlPiUgDQogICNmaWx0ZXIoc2V4X2ZlbWFsZSA9PSAiZmVtYWxlIiwgY291bnRyeSA9PSAic3AiKSAlPiUgDQogIHNlbGVjdChlYXQxX2M6ZWF0MjZfYykgJT4lIA0KICBtdXRhdGVfYWxsKC4sIH5hcy5udW1lcmljKC4pKSAlPiUgDQogIG5hLm9taXQoKSAlPiUgDQogIGRhdGEuZnJhbWUoKQ0KDQpkYXRhMyA8LSBkYWRvcyAlPiUgDQogIGZpbHRlcihzZXhfZmVtYWxlID09ICJtYWxlIiwgY291bnRyeSA9PSAiYnIiKSAlPiUgDQogIHNlbGVjdChlYXQxX2M6ZWF0MjZfYykgJT4lIA0KICBtdXRhdGVfYWxsKC4sIH5hcy5udW1lcmljKC4pKSAlPiUgDQogIG5hLm9taXQoKSAlPiUgDQogIGRhdGEuZnJhbWUoKQ0KDQpkYXRhNCA8LSBkYWRvcyAlPiUgDQogIGZpbHRlcihzZXhfZmVtYWxlID09ICJtYWxlIiwgY291bnRyeSA9PSAic3AiKSAlPiUgDQogIHNlbGVjdChlYXQxX2M6ZWF0MjZfYykgJT4lIA0KICBtdXRhdGVfYWxsKC4sIH5hcy5udW1lcmljKC4pKSAlPiUgDQogIG5hLm9taXQoKSAlPiUgDQogIGRhdGEuZnJhbWUoKQ0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KbGlicmFyeShxZ3JhcGgpDQoNCkNvck1hdCA8LSBjb3JfYXV0byhkYXRhMSwgZGV0ZWN0T3JkaW5hbCA9IEZBTFNFKQ0KQ29yTWF0MiA8LSBjb3JfYXV0byhkYXRhMiwgZGV0ZWN0T3JkaW5hbCA9IEZBTFNFKQ0KQ29yTWF0MyA8LSBjb3JfYXV0byhkYXRhMywgZGV0ZWN0T3JkaW5hbCA9IEZBTFNFKQ0KI0Nvck1hdDQgPC0gY29yX2F1dG8oZGF0YTQsIGRldGVjdE9yZGluYWwgPSBGQUxTRSkNCg0KIyBDb21wdXRlIGdyYXBoIHdpdGggdHVuaW5nID0gMCAoQklDKToNCmxheW91dCh0KDE6MikpDQpncmFwaF9mZW1hbGVfYnIgPC0gcWdyYXBoKENvck1hdCwgZ3JhcGggPSAiZ2xhc3NvIiwgc2FtcGxlU2l6ZSA9IG5yb3coZGFkb3MpLA0KICAgICAgICAgICAgdHVuaW5nID0gMCwgbGF5b3V0ID0gInNwcmluZyIsIHRpdGxlID0gIkJJQyIsIGRldGFpbHMgPSBUUlVFKQ0KDQoNCmdyYXBoX2ZlbWFsZV9zcCA8LSBxZ3JhcGgoQ29yTWF0MiwgZ3JhcGggPSAiZ2xhc3NvIiwgc2FtcGxlU2l6ZSA9IG5yb3coZGFkb3MpLA0KICAgICAgICAgICAgdHVuaW5nID0gMCwgbGF5b3V0ID0gInNwcmluZyIsIHRpdGxlID0gIkJJQyIsIGRldGFpbHMgPSBUUlVFKQ0KDQpMYXlvdXQgPC0gYXZlcmFnZUxheW91dChncmFwaF9mZW1hbGVfYnIsIGdyYXBoX2ZlbWFsZV9zcCkNCg0KcGxvdChMYXlvdXQpDQpgYGANCg0KYGBge3J9DQpjZW50cmFsaXR5UGxvdChHR00gPSBsaXN0KGZlbWFsZV9iciA9IGdyYXBoX2ZlbWFsZV9iciwgZmVtYWxlX3NwID0gZ3JhcGhfZmVtYWxlX3NwKSkNCmBgYA0KDQoNCiMjIE1lZGlhcyBlIGNvaGVucyBkICANCg0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgZmlsdGVyKHNleF9mZW1hbGUgPT0gImZlbWFsZSIpICU+JSAjZmlsdHJhciBwYXJhIGFwZW5hcyBtdWxoZXJlcw0KICBzZWxlY3QoY291bnRyeSwgZWF0MV9jOmVhdDI2X2MpICU+JSAgI2RlaXhhciBwYcOtc2VzIGUgZXNjYWxhcw0KICBwaXZvdF9sb25nZXIoY29scyA9IC1jb3VudHJ5LCB2YWx1ZXNfdG8gPSAndmFsdWUxJykgJT4lICAjbXVkYXIgYmFzZQ0KICBncm91cF9ieShjb3VudHJ5LG5hbWUpICU+JSAjY3JpYXIgYWdydXBhZG9yIHBvciBwYcOtc2VzIGUgaXRlbnMNCiAgc3VtbWFyaXNlX2F0KHZhcnModmFsdWUxKSwgbGlzdChtZWFuPW1lYW4sIHNkPXNkKSkgJT4lICNjcmlhciBzdW1hcmlvDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBjb3VudHJ5LCB2YWx1ZXNfZnJvbT1tZWFuOnNkKSAlPiUgI2FwcmVzZW50YXIgbyBzdW1hcmlvIGNvbW8gdGFibGVhDQogIG11dGF0ZShjb2hlbiA9IChtZWFuX2JyLW1lYW5fc3ApLygoc2RfYnIrc2RfYnIpLzIpKSAlPiUgDQogIG11dGF0ZShjb2hlbl9pbnQgPSBmYWN0b3IoY2FzZV93aGVuKA0KICAgIGNvaGVuIDwgYWJzKDAuMSkgfiAibmVnIiwNCiAgICBjb2hlbiA8IGFicygwLjMpIH4gInNtYWxsIiwNCiAgICBjb2hlbiA8IGFicygwLjUpIH4gIm1lZCIsDQogICAgVFJVRSB+ICJzdHJvbmciKSwgbGV2ZWxzPWMoIm5lZyIsInNtYWxsIiwibWVkIiwgInN0cm9uZyIpKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoY29oZW4pKQ0KYGBgDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBmaWx0ZXIoc2V4X2ZlbWFsZSA9PSAiZmVtYWxlIikgJT4lICNmaWx0cmFyIHBhcmEgYXBlbmFzIG11bGhlcmVzDQogIHNlbGVjdChjb3VudHJ5LCBlYXQxX2M6ZWF0MjZfYykgJT4lICAjZGVpeGFyIHBhw61zZXMgZSBlc2NhbGFzDQogIHBpdm90X2xvbmdlcihjb2xzID0gLWNvdW50cnksIHZhbHVlc190byA9ICd2YWx1ZTEnKSAlPiUgICNtdWRhciBiYXNlDQogIGdyb3VwX2J5KGNvdW50cnksbmFtZSkgJT4lICNjcmlhciBhZ3J1cGFkb3IgcG9yIHBhw61zZXMgZSBpdGVucw0KICBzdW1tYXJpc2VfYXQodmFycyh2YWx1ZTEpLCBsaXN0KG1lYW49bWVhbiwgc2Q9c2QpKSAlPiUgI2NyaWFyIHN1bWFyaW8NCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNvdW50cnksIHZhbHVlc19mcm9tPW1lYW46c2QpICU+JSAjYXByZXNlbnRhciBvIHN1bWFyaW8gY29tbyB0YWJsZWENCiAgbXV0YXRlKGNvaGVuID0gKG1lYW5fYnItbWVhbl9zcCkvKChzZF9icitzZF9icikvMikpICU+JSANCiAgbXV0YXRlKGNvaGVuX2ludCA9IGZhY3RvcihjYXNlX3doZW4oDQogICAgY29oZW4gPCBhYnMoMC4xKSB+ICJuZWciLA0KICAgIGNvaGVuIDwgYWJzKDAuMykgfiAic21hbGwiLA0KICAgIGNvaGVuIDwgYWJzKDAuNSkgfiAibWVkIiwNCiAgICBUUlVFIH4gInN0cm9uZyIpLCBsZXZlbHM9YygibmVnIiwic21hbGwiLCJtZWQiLCAic3Ryb25nIikpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhjb2hlbikpICU+JSANCiAge2xlbmd0aCguJGNvaGVuX2ludFsuJGNvaGVuX2ludCA9PSAic3Ryb25nIl0pfQ0KYGBgDQoNCg0KDQoNCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIGZpbHRlcihzZXhfZmVtYWxlID09ICJmZW1hbGUiKSAlPiUgI2ZpbHRyYXIgcGFyYSBhcGVuYXMgbXVsaGVyZXMNCiAgc2VsZWN0KGNvdW50cnksIGJzcTFfYzpic3EzNF9jKSAlPiUgICNkZWl4YXIgcGHDrXNlcyBlIGVzY2FsYXMNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtY291bnRyeSwgdmFsdWVzX3RvID0gJ3ZhbHVlMScpICU+JSAgI211ZGFyIGJhc2UNCiAgZ3JvdXBfYnkoY291bnRyeSxuYW1lKSAlPiUgI2NyaWFyIGFncnVwYWRvciBwb3IgcGHDrXNlcyBlIGl0ZW5zDQogIHN1bW1hcmlzZV9hdCh2YXJzKHZhbHVlMSksIGxpc3QobWVhbj1tZWFuLCBzZD1zZCkpICU+JSAjY3JpYXIgc3VtYXJpbw0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb209bWVhbjpzZCkgJT4lICNhcHJlc2VudGFyIG8gc3VtYXJpbyBjb21vIHRhYmxlYQ0KICBtdXRhdGUoY29oZW4gPSAobWVhbl9ici1tZWFuX3NwKS8oKHNkX2JyK3NkX2JyKS8yKSkgJT4lIA0KICBtdXRhdGUoY29oZW5faW50ID0gZmFjdG9yKGNhc2Vfd2hlbigNCiAgICBjb2hlbiA8IGFicygwLjEpIH4gIm5lZyIsDQogICAgY29oZW4gPCBhYnMoMC4zKSB+ICJzbWFsbCIsDQogICAgY29oZW4gPCBhYnMoMC41KSB+ICJtZWQiLA0KICAgIFRSVUUgfiAic3Ryb25nIiksIGxldmVscz1jKCJuZWciLCJzbWFsbCIsIm1lZCIsICJzdHJvbmciKSkpICU+JSAgICNjb2hlbnMgaW50ZXJwcmV0YXRpb24NCiAgc2VsZWN0KC1jb250YWlucygic2QiKSkgJT4lIA0KICBwaXZvdF9sb25nZXIoLWMobmFtZSwgY29oZW4sIGNvaGVuX2ludCksIG5hbWVzX3RvID0icGFpcyIpICU+JSANCiAgbXV0YXRlKG5hbWUgPSBmYWN0b3IobmFtZSkpICU+JSANCiAgbXV0YXRlKG5hbWUgPSBmY3RfcmVvcmRlcihuYW1lLCBjb2hlbiwgLmRlc2MgPSBUUlVFKSkgJT4lICNjaGFuZ2UgWCBvcmRlciBieSBjb2hlbnMgZA0KICBtdXRhdGUocGFpcyA9IGlmX2Vsc2UocGFpcyA9PSAibWVhbl9iciIsIkJSIiwiU1AiKSkgICU+JSAgI2NoYW5nZSBsYWJlbCBvZiBwYWlzDQogIGdncGxvdCguLCBhZXMoeCA9IG5hbWUsIHkgPSB2YWx1ZSwgZmlsbCA9IHBhaXMsIGdyb3VwPXBhaXMpKSArDQogIGdlb21fY29sKHN0YXQgPSAic3VtbWFyeSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICAjZ2VvbV92bGluZShhZXMoeGludGVyY2VwdD0xMSksIGxpbmV0eXBlPSJkYXNoZWQiLGNvbG91cj0iYmx1ZSIsc2l6ZT0wLjcpICsNCiAgbGFicyh4ID0gIkl0ZW5zIiwgeSA9ICJSZXN1bHRhZG8iLCBmaWxsID0gIlBhw61zIikrDQogIHRoZW1lX2J3KCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpICsNCiAgI2ZhY2V0X2dyaWQoLiB+IGNvaGVuX2ludCkgKw0KICAjZmFjZXRfd3JhcCh+Y29oZW5faW50KSArDQogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xNSkpDQpgYGANCg0KDQoNCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIGZpbHRlcihzZXhfZmVtYWxlID09ICJmZW1hbGUiKSAlPiUgI2ZpbHRyYXIgcGFyYSBhcGVuYXMgbXVsaGVyZXMNCiAgc2VsZWN0KGNvdW50cnksIGJzcTplYXQyNl9jKSAlPiUgICNkZWl4YXIgcGHDrXNlcyBlIGVzY2FsYXMNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtY291bnRyeSwgdmFsdWVzX3RvID0gJ3ZhbHVlMScpICU+JSAgI211ZGFyIGJhc2UNCiAgZ3JvdXBfYnkoY291bnRyeSxuYW1lKSAlPiUgI2NyaWFyIGFncnVwYWRvciBwb3IgcGHDrXNlcyBlIGl0ZW5zDQogIHN1bW1hcmlzZV9hdCh2YXJzKHZhbHVlMSksIGxpc3QobWVhbj1tZWFuLCBzZD1zZCkpICU+JSAjY3JpYXIgc3VtYXJpbw0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY291bnRyeSwgdmFsdWVzX2Zyb209bWVhbjpzZCkgJT4lICNhcHJlc2VudGFyIG8gc3VtYXJpbyBjb21vIHRhYmxlYQ0KICBtdXRhdGUoY29oZW4gPSAobWVhbl9ici1tZWFuX3NwKS8oKHNkX2JyK3NkX2JyKS8yKSkgJT4lIA0KICBtdXRhdGUoY29oZW5faW50ID0gZmFjdG9yKGNhc2Vfd2hlbigNCiAgICBjb2hlbiA8IGFicygwLjEpIH4gIm5lZyIsDQogICAgY29oZW4gPCBhYnMoMC4zKSB+ICJzbWFsbCIsDQogICAgY29oZW4gPCBhYnMoMC41KSB+ICJtZWQiLA0KICAgIFRSVUUgfiAic3Ryb25nIiksIGxldmVscz1jKCJuZWciLCJzbWFsbCIsIm1lZCIsICJzdHJvbmciKSkpICU+JSAgICNjb2hlbnMgaW50ZXJwcmV0YXRpb24NCiAgc2VsZWN0KC1jb250YWlucygic2QiKSkgJT4lIA0KICBwaXZvdF9sb25nZXIoLWMobmFtZSwgY29oZW4sIGNvaGVuX2ludCksIG5hbWVzX3RvID0icGFpcyIpICU+JSANCiAgbXV0YXRlKG5hbWUgPSBmYWN0b3IobmFtZSkpICU+JSANCiAgbXV0YXRlKG5hbWUgPSBmY3RfcmVvcmRlcihuYW1lLCBjb2hlbiwgLmRlc2MgPSBUUlVFKSkgJT4lICNjaGFuZ2UgWCBvcmRlciBieSBjb2hlbnMgZA0KICBtdXRhdGUocGFpcyA9IGlmX2Vsc2UocGFpcyA9PSAibWVhbl9iciIsIkJSIiwiU1AiKSkgICU+JSAgI2NoYW5nZSBsYWJlbCBvZiBwYWlzDQogIGdncGxvdCguLCBhZXMoeCA9IG5hbWUsIHkgPSB2YWx1ZSwgZmlsbCA9IHBhaXMsIGdyb3VwPXBhaXMpKSArDQogIGdlb21fY29sKHN0YXQgPSAic3VtbWFyeSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICAjZ2VvbV92bGluZShhZXMoeGludGVyY2VwdD0xMSksIGxpbmV0eXBlPSJkYXNoZWQiLGNvbG91cj0iYmx1ZSIsc2l6ZT0wLjcpICsNCiAgbGFicyh4ID0gIkl0ZW5zIiwgeSA9ICJSZXN1bHRhZG8iLCBmaWxsID0gIlBhw61zIikrDQogIHRoZW1lX2J3KCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpICsNCiAgI2ZhY2V0X2dyaWQoLiB+IGNvaGVuX2ludCkgKw0KICAjZmFjZXRfd3JhcCh+Y29oZW5faW50KSArDQogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xNSkpDQpgYGANCg0KIyBMaWtlcnQgcGxvdA0KDQpgYGB7cn0NCmxpYnJhcnkobGlrZXJ0KQ0KYGBgDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJlYXQiKSkgJT4lIA0KICBzdW1tYXJ5dG9vbHM6OmRlc2NyKCkNCmBgYA0KDQoNCmBgYHtyfQ0KZGFkb3MgJT4lICNnZXQgZGF0YXNldA0KICBzZWxlY3Qoc2V4X2ZlbWFsZSwgZWF0MV9jOmVhdDI2X2MpICU+JSANCiAgYXMuZGF0YS5mcmFtZSgpICU+JSAjZ2V0IGRhdGFzZXQgDQogIG11dGF0ZV9hdCh2YXJzKC1zZXhfZmVtYWxlKSwgfmZhY3RvciguLCBsZXZlbHM9MDozKSkgJT4lIA0KICBzZWxlY3QoZWF0MV9jOmVhdDI2X2MpICU+JSANCiAgbGlrZXJ0KCkgJT4lICBwbG90KCkNCiAgbGlrZXJ0KC4sIGdyb3VwaW5nID0gZGFkb3Mkc2V4X2ZlbWFsZSkgJT4lIA0KICBwbG90KCkgDQogIA0KYGBgDQoNCg0KYGBge3J9DQpkYWRvcyRzZXhfZmVtYWxlDQpgYGANCg0KDQpgYGB7ciwgZXZhbCA9IEZBTFNFIH0NCmRhZG9zX2VhdF9saWtlcnQgPC0gZGFkb3MgJT4lICNnZXQgZGF0YXNldA0KICBzZWxlY3Qoc2V4X2ZlbWFsZSwgZWF0MV9jOmVhdDI2X2MpICU+JSANCiAgYXMuZGF0YS5mcmFtZSgpICU+JSAjZ2V0IGRhdGFzZXQgDQogIG5hLm9taXQoKSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKC1zZXhfZmVtYWxlKSwgfmZhY3RvciguLCBsZXZlbHM9MDozKSkgDQpwbG90KGxpa2VydChkYWRvc19lYXRfbGlrZXJ0WywyOjVdLCBncm91cGluZz1kYWRvc19lYXRfbGlrZXJ0JHNleF9mZW1hbGUpKSANCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShwYXRjaHdvcmspDQpgYGANCg0KDQpgYGB7cn0NCnAxIDwtIGRhZG9zICU+JSAjZ2V0IGRhdGFzZXQNCiAgZmlsdGVyKGNvdW50cnkgPT0gImJyIikgJT4lIA0KICBzZWxlY3Qoc2V4X2ZlbWFsZSwgZWF0MV9jOmVhdDI2X2MpICU+JSANCiAgYXMuZGF0YS5mcmFtZSgpICU+JSAjZ2V0IGRhdGFzZXQgDQogIG5hLm9taXQoKSAlPiUgDQogIG11dGF0ZV9hdCh2YXJzKC1zZXhfZmVtYWxlKSwgfmZhY3RvciguLCBsZXZlbHM9MDozKSkgJT4lIA0KICB7bGlrZXJ0KC5bLDI6MTBdLCBncm91cGluZz0uWywxXSl9ICU+JSAgDQogIHBsb3QoKSArICANCiAgZ2d0aGVtZXM6OnRoZW1lX2ZldygpICsgDQogIHlsYWIoIkJyIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQogDQpwMiA8LSBkYWRvcyAlPiUgI2dldCBkYXRhc2V0DQogIGZpbHRlcihjb3VudHJ5ID09ICJzcCIpICU+JSANCiAgc2VsZWN0KHNleF9mZW1hbGUsIGVhdDFfYzplYXQyNl9jKSAlPiUgDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUgI2dldCBkYXRhc2V0IA0KICBuYS5vbWl0KCkgJT4lIA0KICBtdXRhdGVfYXQodmFycygtc2V4X2ZlbWFsZSksIH5mYWN0b3IoLiwgbGV2ZWxzPTA6MykpICU+JSANCiAge2xpa2VydCguWywyOjEwXSwgZ3JvdXBpbmc9LlssMV0pfSAlPiUgIA0KICBwbG90KCkgKyAgDQogIHlsYWIoIlNwIikgKw0KICBnZ3RoZW1lczo6dGhlbWVfZmV3KCkNCg0KcDErcDINCmBgYA0KDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBzZWxlY3QoY291bnRyeSwgc2V4X2ZlbWFsZSwgZWF0MV9jOmVhdDI2X2MpICU+JQ0KICBuYS5vbWl0KCkgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IC1jKGNvdW50cnksIHNleF9mZW1hbGUpLA0KICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiaXRlbSIsIHZhbHVlc190byA9ICJjYXRlZ29yaWEiKSAlPiUgDQogIGdyb3VwX2J5KGl0ZW0sIGNvdW50cnksIHNleF9mZW1hbGUsIGNhdGVnb3JpYSkgJT4lIA0KICBzdW1tYXJpc2UoTiA9IG4oKSkgJT4lDQogIG11dGF0ZShQY3QgPSBOIC8gc3VtKE4pKSAlPiUgDQogIG11dGF0ZShjYXRlZ29yaWEgPSBmYWN0b3Iocm91bmQoY2F0ZWdvcmlhLDApKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBpdGVtLCB5ID0gUGN0LCBmaWxsID0gY2F0ZWdvcmlhKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbj0iZmlsbCIsIHN0YXQ9ImlkZW50aXR5IikrDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsNCiAgI2dlb21fdGV4dChhZXMoeD1pdGVtLCB5PVBjdCwgZ3JvdXA9Y2F0ZWdvcmlhLGxhYmVsID0gcGFzdGUoUGN0KjEwMCwgIiUiKSkpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgZmFjZXRfd3JhcCh+c2V4X2ZlbWFsZSArIGNvdW50cnkpICsNCiAgdGhlbWVfYncoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KICANCg0KYGBgDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBmaWx0ZXIoc2V4X2ZlbWFsZSA9PSAibWFsZSIgJiBjb3VudHJ5ID09ICJiciIpICU+JSANCiAgY291bnQoZWF0MV9jKQ0KYGBgDQoNCg0KI0h4OiBTZXggYW5kIGNvdW50cnkgZGlmZmVyZW5jZXMNCg0KIyMgQlNRDQpgYGB7cn0NCm1vZF9zZXhfY291bnRyeV9ic3EgPC0gbG0oYnNxX3NvbWFfYyB+IHNleF9mZW1hbGUgKiBjb3VudHJ5LCBkYWRvcykNCmBgYA0KDQpgYGB7cn0NCmFwYVRhYmxlczo6YXBhLmFvdi50YWJsZShtb2Rfc2V4X2NvdW50cnlfYnNxKQ0KYGBgDQoNCiMjIENvcnJlbGFjYW8gZW50cmUgZmF0b3Jlcw0KDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBmaWx0ZXIoY291bnRyeSA9PSAic3AiKSAlPiUgDQogIHNlbGVjdChlYXRfc29tYV9jLCBic3Ffc29tYV9jKSAlPiUgDQogIGNvcigpDQpgYGANCg0KYGBge3J9DQpkYWRvcyAlPiUgDQogIGZpbHRlcihjb3VudHJ5ID09ICJiciIpICU+JSANCiAgc2VsZWN0KGVhdF9zb21hX2MsIGJzcV9zb21hX2MpICU+JSANCiAgY29yKCkNCmBgYA0KDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBzZWxlY3QoZWF0X3NvbWFfYywgYnNxX3NvbWFfYywgY291bnRyeSkgJT4lDQogIGdncGxvdCguLCBhZXMoZWF0X3NvbWFfYywgYnNxX3NvbWFfYywgY29sb3IgPSBjb3VudHJ5KSkgKw0KICBnZW9tX2ppdHRlcigpICsNCiAgc3RhdF9zbW9vdGgobWV0aG9kID0gImxtIikNCiAgDQpgYGANCg0KDQojIyBFQVQgZ2VyYWwNCg0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgc2VsZWN0KGVhdF9zb21hX2MsIGNvdW50cnkpICU+JSANCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lIA0KICBzdW1tYXJpc2UobWVhbihlYXRfc29tYV9jKSwgc2QoZWF0X3NvbWFfYykpDQoNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCm1vZF9zZXhfY291bnRyeV9lYWQ8LSBsbShlYXRfc29tYV9jIH4gc2V4X2ZlbWFsZSAqIGNvdW50cnksIGRhZG9zKQ0KDQpgYGANCg0KYGBge3J9DQphcGFUYWJsZXM6OmFwYS5hb3YudGFibGUobW9kX3NleF9jb3VudHJ5X2VhZCkNCmBgYA0KDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNleF9mZW1hbGUpKSAlPiUgDQogIGdncGxvdCguLCBhZXMoeCA9IHNleF9mZW1hbGUsIHkgPSBlYXRfc29tYV9jLCBmaWxsID0gY291bnRyeSkpKw0KICBnZW9tX2JhcihzdGF0ID0gInN1bW1hcnkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpDQpgYGANCg0KYGBge3J9DQptb2Rfc2V4X2NvdW50cnlfZWF0X2RpZXRhPC0gbG0oZWF0X2RpZXRhIH4gc2V4X2ZlbWFsZSAqIGNvdW50cnksIGRhZG9zKQ0KDQpgYGANCg0KYGBge3J9DQphcGFUYWJsZXM6OmFwYS5hb3YudGFibGUobW9kX3NleF9jb3VudHJ5X2VhdF9kaWV0YSkNCmBgYA0KIyMgRUFUIEJ1bGltaWENCmBgYHtyfQ0KbW9kX3NleF9jb3VudHJ5X2VhdF9idWxpbWlhIDwtIGxtKGVhdF9idWxpbWlhIH4gc2V4X2ZlbWFsZSAqIGNvdW50cnksIGRhZG9zKQ0KDQpgYGANCg0KYGBge3J9DQphcGFUYWJsZXM6OmFwYS5hb3YudGFibGUobW9kX3NleF9jb3VudHJ5X2VhdF9idWxpbWlhKQ0KYGBgDQoNCiMjIENvbnRyb2xlIG9yYWwgDQpgYGB7cn0NCm1vZF9zZXhfY291bnRyeV9lYXRfY29udHJvbGUgPC0gbG0oZWF0X29yYWwgfiBzZXhfZmVtYWxlICogY291bnRyeSwgZGFkb3MpDQoNCmBgYA0KDQpgYGB7cn0NCmFwYVRhYmxlczo6YXBhLmFvdi50YWJsZShtb2Rfc2V4X2NvdW50cnlfZWF0X2NvbnRyb2xlKQ0KYGBgDQoNCmBgYHtyfQ0KZGFkb3MgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKHNleF9mZW1hbGUpKSAlPiUgDQogIGdncGxvdCguLCBhZXMoeCA9IHNleF9mZW1hbGUsIHkgPSBlYXRfb3JhbCwgZmlsbCA9IGNvdW50cnkpKSsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJzdW1tYXJ5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKQ0KYGBgDQoNCiMjMjogV2VpZ2h0IGRpZmZlcmVuY2VzDQoNCmBgYHtyfQ0KZGFkb3MgJT4lDQogIHNlbGVjdChzZXhfZmVtYWxlLHBlc29fYXR1YWwsIHBlc29fZGVzZWphZG8sZGVsdGFfcGVzbykgJT4lIA0KICB0YWJsZWJ5KHNleF9mZW1hbGUgfi4sIGRhdGEgPSAuKSAlPiUgDQogIHN1bW1hcnkoKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmRhZG9zICU+JQ0KICBzZWxlY3QocGVzb19hdHVhbCwgcGVzb19kZXNlamFkbyxzZXhfZmVtYWxlKSAlPiUgDQogIG5hLm9taXQoKSAlPiUgDQogIGdncGxvdCguLCBhZXMoeD1wZXNvX2F0dWFsLCB5ID0gcGVzb19kZXNlamFkbywgZmlsbCA9IHNleF9mZW1hbGUpKSArDQogIGdlb21faml0dGVyKCkgKw0KICBnZW9tX3Ntb290aCgpICsNCiAgbGFicyh4ID0iUGVzbyBhdHVhbCIsIHkgPSAiUGVzbyBkZXNlamFkbyIsIGZpbGwgPSAiU2V4byIpICsgDQogIHRoZW1lX2J3KCkNCmBgYA0KDQpgYGB7cn0NCmxtKHBlc29fZGVzZWphZG8gfiBwZXNvX2F0dWFsICogc2V4X2ZlbWFsZSwgZGFkb3MpICU+JSANCiAgb2xzcnI6Om9sc19yZWdyZXNzKCkNCmBgYA0KDQojIyBIaXBvdGVzZSBlcmljYQ0KDQoNCmBgYHtyfQ0KZGFkb3MgJT4lDQogIHNlbGVjdChwZXNvX2F0dWFsLCBwZXNvX2Rlc2VqYWRvLHNleF9mZW1hbGUpICU+JSANCiAgbmEub21pdCgpICU+JSANCiAgcGl2b3RfbG9uZ2VyKC1zZXhfZmVtYWxlKSAlPiUgDQogIGdncGxvdCguLCBhZXMoeD1zZXhfZmVtYWxlLCB5PXZhbHVlLCBmaWxsPW5hbWUsIGdyb3VwID0gbmFtZSkpICsNCiAgIGdlb21fYmFyKHN0YXQgPSAic3VtbWFyeSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBzdGF0X3N1bW1hcnkoZ2VvbT0iZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIA0KICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjk1KSwgd2lkdGggPSAuNSkgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQoNCmBgYHtyfQ0KIA0KYGBgDQoNCg0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgZmlsdGVyKCFpcy5uYShzdGF0KSwgIWlzLm5hKHNleF9mZW1hbGUpKSAlPiUgDQogIGdncGxvdCguLCBhZXMoeD1zdGF0LCB5ID0gZWF0X3NvbWFfYywgZmlsbCA9IHNleF9mZW1hbGUpKSArDQogIGdlb21fYmFyKHN0YXQgPSAic3VtbWFyeSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICAgIHN0YXRfc3VtbWFyeShnZW9tPSJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgDQogICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOTUpLCB3aWR0aCA9IC41KSArDQogIGZhY2V0X3dyYXAofmNvdW50cnkpICsNCiAgdGhlbWVfYncoKQ0KDQpgYGANCg0KDQpgYGB7cn0NCmRhZG9zICU+JSANCiAgZmlsdGVyKCFpcy5uYShzdGF0KSwgIWlzLm5hKHNleF9mZW1hbGUpKSAlPiUgDQogIGdncGxvdCguLCBhZXMoeD1zdGF0LCB5ID0gZWF0X3NvbWFfYywgY29sb3VyID0gc2V4X2ZlbWFsZSwgc2hhcGUgPSBjb3VudHJ5LCBncm91cD1pbnRlcmFjdGlvbihzZXhfZmVtYWxlLCBjb3VudHJ5KSkpICsNCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAibGluZSIsIGZ1biA9ICJtZWFuIikgKw0KICBzdGF0X3N1bW1hcnkoZnVuLnkgPSAibWVhbiIsIGdlb20gPSAicG9pbnQiKQ0KDQogIGdlb21fYmFyKHN0YXQgPSAic3VtbWFyeSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICAgIHN0YXRfc3VtbWFyeShnZW9tPSJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgDQogICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOTUpLCB3aWR0aCA9IC41KQ0KYGBgDQoNCg0KDQo=