library(tidyverse)
library(lme4)
library(parameters)

rsultado1 <- readRDS("~/RStudio/ENEM/Resultados/Resultado_idh_prop_1_rep_1_modelo_bs_sex.rds")
rsultado2 <- readRDS("~/RStudio/ENEM/Resultados/Resultado_idh_Tipo_Ruralxurbano_prop_1_rep_1_modelo_bs_sex.rds")
rsultado3 <- readRDS("~/RStudio/ENEM/Resultados/Resultado_idh_Tipo_Escola_prop_1_rep_1_modelo_bs_sex.rds")
rsultado4 <- readRDS("~/RStudio/ENEM/Resultados/Resultado_idh_Tipo_Sexo_prop_1_rep_1_modelo_bs_sex.rds")
rsultado5 <- readRDS("~/RStudio/ENEM/Resultados/Resultado_idh_TP_2009_prop_1_rep_1_modelo_bs_sex.rds")

Modelo Basico

resultado<-rsultado1
resultado$formula[1]#Nota=Poluente+Renda+educaçãoparental+ANO+Sexo+Loc_escola+(1+poluente|Estado)
[1] "samp[[y]] ~ samp[[x]] + Q15 + Q10 + IDHM + TP_DEPENDENCIA_ADM_ESC + bs(as.numeric(NU_ANO)) + TP_SEXO + TP_LOCALIZACAO_ESC + (1 + samp[[x]] | SG_UF_RESIDENCIA)"
summary(as.factor(resultado$amostragem))
15443772 
     162 
R <-resultado %>% mutate(lowerCI=slope-1.96*SE_Slope_rand,upperCI=slope+1.96*SE_Slope_rand) %>% 
  mutate(sinal=ifelse(lowerCI>0,"Positivo",ifelse(upperCI<0,"Negativo","null")))
#print(table(R$poluente,R$sinal))
table(R$modelo,R$sinal)
                            
                             Negativo null Positivo
  no2_ppb.NU_NOTA_OBJETIVA         10    7       10
  no2_ppb.NU_NOTA_REDACAO          13    6        8
  o3_ppb.NU_NOTA_OBJETIVA          22    4        1
  o3_ppb.NU_NOTA_REDACAO           20    5        2
  pm25_ugm3.NU_NOTA_OBJETIVA       11    8        8
  pm25_ugm3.NU_NOTA_REDACAO        10    9        8
R %>%   ggplot(aes(x=slope,y=fator,xmin=lowerCI,xmax=upperCI,col=sinal))+
  #geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")



resultado$sinal<-ifelse(resultado$lowerCI_efx>0,"Positivo",ifelse(resultado$upperCI_efx<0,"Negativo","null"))
R2<-resultado[6:19] %>% distinct() 
table(R2$modelo,R2$sinal)
                            
                             Negativo null
  no2_ppb.NU_NOTA_OBJETIVA          0    1
  no2_ppb.NU_NOTA_REDACAO           0    1
  o3_ppb.NU_NOTA_OBJETIVA           1    0
  o3_ppb.NU_NOTA_REDACAO            1    0
  pm25_ugm3.NU_NOTA_OBJETIVA        0    1
  pm25_ugm3.NU_NOTA_REDACAO         0    1
R2 %>%   ggplot(aes(x=efeito_fixo,y=teste,xmin=lowerCI_efx,xmax=upperCI_efx,col=sinal))+geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=0.5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")

Modelo com Subset Rural Urbano

resultado<-rsultado2
resultado$formula[1]#Nota=Poluente+Renda+educaçãoparental+ANO+Sexo+Loc_escola+(1+poluente|Estado)
[1] "samp[[y]] ~ samp[[x]] + Q15 + Q10 + IDHM + TP_DEPENDENCIA_ADM_ESC + bs(as.numeric(NU_ANO)) + TP_SEXO + (1 + samp[[x]] | SG_UF_RESIDENCIA)"
summary(as.factor(resultado$amostragem))
 178002 8836785 
    156     162 
R <-resultado %>% mutate(lowerCI=slope-1.96*SE_Slope_rand,upperCI=slope+1.96*SE_Slope_rand) %>% 
  mutate(sinal=ifelse(lowerCI>0,"Positivo",ifelse(upperCI<0,"Negativo","null")))
#print(table(R$poluente,R$sinal))
table(R$modelo,R$sinal)
                            
                             Negativo null Positivo
  no2_ppb.NU_NOTA_OBJETIVA         21   14       18
  no2_ppb.NU_NOTA_REDACAO          19   17       17
  o3_ppb.NU_NOTA_OBJETIVA          40   11        2
  o3_ppb.NU_NOTA_REDACAO           37   12        4
  pm25_ugm3.NU_NOTA_OBJETIVA       23   14       16
  pm25_ugm3.NU_NOTA_REDACAO        22   18       13
table(R$subset,R$sinal,R$poluente)
, ,  = no2_ppb

   
    Negativo null Positivo
  1       25   11       18
  2       15   20       17

, ,  = o3_ppb

   
    Negativo null Positivo
  1       42    9        3
  2       35   14        3

, ,  = pm25_ugm3

   
    Negativo null Positivo
  1       21   16       17
  2       24   16       12
R %>%   ggplot(aes(x=slope,y=fator,xmin=lowerCI,xmax=upperCI,col=sinal))+
  #geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")



resultado$sinal<-ifelse(resultado$lowerCI_efx>0,"Positivo",ifelse(resultado$upperCI_efx<0,"Negativo","null"))
R2<-resultado[6:19] %>% distinct() 
table(R2$modelo,R2$sinal)
                            
                             Negativo null
  no2_ppb.NU_NOTA_OBJETIVA          0    2
  no2_ppb.NU_NOTA_REDACAO           0    2
  o3_ppb.NU_NOTA_OBJETIVA           2    0
  o3_ppb.NU_NOTA_REDACAO            2    0
  pm25_ugm3.NU_NOTA_OBJETIVA        0    2
  pm25_ugm3.NU_NOTA_REDACAO         0    2
R2 %>%   ggplot(aes(x=efeito_fixo,y=teste,xmin=lowerCI_efx,xmax=upperCI_efx,col=sinal))+geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=0.5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")

Modelo com subset Tipo de Escola

resultado<-rsultado3
resultado$formula[1]#Nota=Poluente+Renda+educaçãoparental+ANO+Sexo+Loc_escola+(1+poluente|Estado)
[1] "samp[[y]] ~ samp[[x]] + Q15 + Q10 + IDHM + bs(as.numeric(NU_ANO)) + TP_SEXO + TP_LOCALIZACAO_ESC + (1 + samp[[x]] | SG_UF_RESIDENCIA)"
summary(as.factor(resultado$amostragem))
  239813   302601  2825635 12075723 
     150      138      162      162 
R <-resultado %>% mutate(lowerCI=slope-1.96*SE_Slope_rand,upperCI=slope+1.96*SE_Slope_rand) %>% 
  mutate(sinal=ifelse(lowerCI>0,"Positivo",ifelse(upperCI<0,"Negativo","null")))
#print(table(R$poluente,R$sinal))
table(R$modelo,R$sinal)
                            
                             Negativo null Positivo
  no2_ppb.NU_NOTA_OBJETIVA         35   30       37
  no2_ppb.NU_NOTA_REDACAO          35   34       33
  o3_ppb.NU_NOTA_OBJETIVA          76   22        4
  o3_ppb.NU_NOTA_REDACAO           67   27        8
  pm25_ugm3.NU_NOTA_OBJETIVA       39   29       34
  pm25_ugm3.NU_NOTA_REDACAO        42   31       29
table(R$subset,R$sinal,R$poluente)
, ,  = no2_ppb

   
    Negativo null Positivo
  1       12   20       18
  2       24   13       17
  3        9   17       20
  4       25   14       15

, ,  = o3_ppb

   
    Negativo null Positivo
  1       34   13        3
  2       42   10        2
  3       28   14        4
  4       39   12        3

, ,  = pm25_ugm3

   
    Negativo null Positivo
  1       16   18       16
  2       23   14       17
  3       16   14       16
  4       26   14       14
R %>%   ggplot(aes(x=slope,y=fator,xmin=lowerCI,xmax=upperCI,col=sinal))+
  #geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")



resultado$sinal<-ifelse(resultado$lowerCI_efx>0,"Positivo",ifelse(resultado$upperCI_efx<0,"Negativo","null"))
R2<-resultado[6:19] %>% distinct() 
table(R2$modelo,R2$sinal)
                            
                             Negativo null
  no2_ppb.NU_NOTA_OBJETIVA          0    4
  no2_ppb.NU_NOTA_REDACAO           0    4
  o3_ppb.NU_NOTA_OBJETIVA           4    0
  o3_ppb.NU_NOTA_REDACAO            4    0
  pm25_ugm3.NU_NOTA_OBJETIVA        0    4
  pm25_ugm3.NU_NOTA_REDACAO         0    4
R2 %>%   ggplot(aes(x=efeito_fixo,y=teste,xmin=lowerCI_efx,xmax=upperCI_efx,col=sinal))+geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=0.5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")

Modelo com subset Sexo

resultado<-rsultado4
resultado$formula[1]#Nota=Poluente+Renda+educaçãoparental+ANO+Sexo+Loc_escola+(1+poluente|Estado)
[1] "samp[[y]] ~ samp[[x]] + Q15 + Q10 + IDHM + TP_DEPENDENCIA_ADM_ESC + bs(as.numeric(NU_ANO)) + +TP_LOCALIZACAO_ESC + (1 + samp[[x]] | SG_UF_RESIDENCIA)"
summary(as.factor(resultado$amostragem))
3983927 5030860 
    162     162 
R <-resultado %>% mutate(lowerCI=slope-1.96*SE_Slope_rand,upperCI=slope+1.96*SE_Slope_rand) %>% 
  mutate(sinal=ifelse(lowerCI>0,"Positivo",ifelse(upperCI<0,"Negativo","null")))
#print(table(R$poluente,R$sinal))
table(R$modelo,R$sinal)
                            
                             Negativo null Positivo
  no2_ppb.NU_NOTA_OBJETIVA         21   13       20
  no2_ppb.NU_NOTA_REDACAO          25   13       16
  o3_ppb.NU_NOTA_OBJETIVA          42   10        2
  o3_ppb.NU_NOTA_REDACAO           38   12        4
  pm25_ugm3.NU_NOTA_OBJETIVA       21   19       14
  pm25_ugm3.NU_NOTA_REDACAO        20   20       14
table(R$subset,R$sinal,R$poluente)
, ,  = no2_ppb

   
    Negativo null Positivo
  F       22   14       18
  M       24   12       18

, ,  = o3_ppb

   
    Negativo null Positivo
  F       39   12        3
  M       41   10        3

, ,  = pm25_ugm3

   
    Negativo null Positivo
  F       22   19       13
  M       19   20       15
R %>%   ggplot(aes(x=slope,y=fator,xmin=lowerCI,xmax=upperCI,col=sinal))+
  #geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")



resultado$sinal<-ifelse(resultado$lowerCI_efx>0,"Positivo",ifelse(resultado$upperCI_efx<0,"Negativo","null"))
R2<-resultado[6:19] %>% distinct() 
table(R2$modelo,R2$sinal)
                            
                             Negativo null
  no2_ppb.NU_NOTA_OBJETIVA          0    2
  no2_ppb.NU_NOTA_REDACAO           0    2
  o3_ppb.NU_NOTA_OBJETIVA           2    0
  o3_ppb.NU_NOTA_REDACAO            2    0
  pm25_ugm3.NU_NOTA_OBJETIVA        0    2
  pm25_ugm3.NU_NOTA_REDACAO         0    2
R2 %>%   ggplot(aes(x=efeito_fixo,y=teste,xmin=lowerCI_efx,xmax=upperCI_efx,col=sinal))+geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=0.5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")

Modelo com subset por Renda

resultado<-rsultado5
resultado$formula[1]#Nota=Poluente+Renda+educaçãoparental+ANO+Sexo+Loc_escola+(1+poluente|Estado)
[1] "samp[[y]] ~ samp[[x]] + Q15 + Q10 + IDHM + TP_DEPENDENCIA_ADM_ESC + bs(as.numeric(NU_ANO)) + TP_SEXO + TP_LOCALIZACAO_ESC + (1 + samp[[x]] | SG_UF_RESIDENCIA)"
summary(as.factor(resultado$amostragem))
2581321 6433466 
    126     162 
R <-resultado %>% mutate(lowerCI=slope-1.96*SE_Slope_rand,upperCI=slope+1.96*SE_Slope_rand) %>% 
  mutate(sinal=ifelse(lowerCI>0,"Positivo",ifelse(upperCI<0,"Negativo","null")))
#print(table(R$poluente,R$sinal))
table(R$modelo,R$sinal)
                            
                             Negativo null Positivo
  no2_ppb.NU_NOTA_OBJETIVA         14   12       22
  no2_ppb.NU_NOTA_REDACAO          16   18       14
  o3_ppb.NU_NOTA_OBJETIVA          25    7       16
  o3_ppb.NU_NOTA_REDACAO           25    7       16
  pm25_ugm3.NU_NOTA_OBJETIVA       19    8       21
  pm25_ugm3.NU_NOTA_REDACAO        23    9       16
table(R$subset,R$sinal,R$poluente)
, ,  = no2_ppb

          
           Negativo null Positivo
  pós-2008       14   16       24
  pré=2008       16   14       12

, ,  = o3_ppb

          
           Negativo null Positivo
  pós-2008       33    7       14
  pré=2008       17    7       18

, ,  = pm25_ugm3

          
           Negativo null Positivo
  pós-2008       18   10       26
  pré=2008       24    7       11
R %>%   ggplot(aes(x=slope,y=fator,xmin=lowerCI,xmax=upperCI,col=sinal))+
  #geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")



resultado$sinal<-ifelse(resultado$lowerCI_efx>0,"Positivo",ifelse(resultado$upperCI_efx<0,"Negativo","null"))
R2<-resultado[6:19] %>% distinct() 
table(R2$modelo,R2$sinal)
                            
                             Negativo null
  no2_ppb.NU_NOTA_OBJETIVA          0    2
  no2_ppb.NU_NOTA_REDACAO           0    2
  o3_ppb.NU_NOTA_OBJETIVA           1    1
  o3_ppb.NU_NOTA_REDACAO            1    1
  pm25_ugm3.NU_NOTA_OBJETIVA        0    2
  pm25_ugm3.NU_NOTA_REDACAO         0    2
R2 %>%   ggplot(aes(x=efeito_fixo,y=teste,xmin=lowerCI_efx,xmax=upperCI_efx,col=sinal))+geom_point(alpha=0.5)+
  geom_pointrange(alpha=0.5)+facet_grid(nota*subset~poluente,scales = "free")+
  geom_vline(xintercept = 0, color = "red", size=0.1,alpha=0.5)+
  #geom_errorbar(alpha=0.5)+
  labs(title = "Modelo mistos",
       subtitle = paste0("n=",R$amostragem,"
",R$formula),
       caption = "EPPG FGV")+xlab("Slope")+ylab("Estado")

Modelo com subset por Grupo de Anos

Observações:

LS0tDQp0aXRsZTogIlJlc3VsdGFkb3MgTW9kZWxvcyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICBmaWdfaGVpZ2h0OiAzMA0KICAgIGZpZ193aWR0aDogMzANCiAgICBmaWdfY2FwdGlvbjogeWVzDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkobG1lNCkNCmxpYnJhcnkocGFyYW1ldGVycykNCmBgYA0KDQpgYGB7cn0NCg0KcnN1bHRhZG8xIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL1Jlc3VsdGFkb3MvUmVzdWx0YWRvX2lkaF9wcm9wXzFfcmVwXzFfbW9kZWxvX2JzX3NleC5yZHMiKQ0KcnN1bHRhZG8yIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL1Jlc3VsdGFkb3MvUmVzdWx0YWRvX2lkaF9UaXBvX1J1cmFseHVyYmFub19wcm9wXzFfcmVwXzFfbW9kZWxvX2JzX3NleC5yZHMiKQ0KcnN1bHRhZG8zIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL1Jlc3VsdGFkb3MvUmVzdWx0YWRvX2lkaF9UaXBvX0VzY29sYV9wcm9wXzFfcmVwXzFfbW9kZWxvX2JzX3NleC5yZHMiKQ0KcnN1bHRhZG80IDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL1Jlc3VsdGFkb3MvUmVzdWx0YWRvX2lkaF9UaXBvX1NleG9fcHJvcF8xX3JlcF8xX21vZGVsb19ic19zZXgucmRzIikNCnJzdWx0YWRvNSA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9SZXN1bHRhZG9zL1Jlc3VsdGFkb19pZGhfVFBfMjAwOV9wcm9wXzFfcmVwXzFfbW9kZWxvX2JzX3NleC5yZHMiKQ0KDQoNCmBgYA0KDQojIE1vZGVsbyBCYXNpY28NCg0KYGBge3IsIGZpZy53aWR0aCA9IDIwLCBmaWcuaGVpZ2h0ID0gMTV9DQpyZXN1bHRhZG88LXJzdWx0YWRvMQ0KcmVzdWx0YWRvJGZvcm11bGFbMV0jTm90YT1Qb2x1ZW50ZStSZW5kYStlZHVjYcOnw6NvcGFyZW50YWwrQU5PK1NleG8rTG9jX2VzY29sYSsoMStwb2x1ZW50ZXxFc3RhZG8pDQpzdW1tYXJ5KGFzLmZhY3RvcihyZXN1bHRhZG8kYW1vc3RyYWdlbSkpDQpSIDwtcmVzdWx0YWRvICU+JSBtdXRhdGUobG93ZXJDST1zbG9wZS0xLjk2KlNFX1Nsb3BlX3JhbmQsdXBwZXJDST1zbG9wZSsxLjk2KlNFX1Nsb3BlX3JhbmQpICU+JSANCiAgbXV0YXRlKHNpbmFsPWlmZWxzZShsb3dlckNJPjAsIlBvc2l0aXZvIixpZmVsc2UodXBwZXJDSTwwLCJOZWdhdGl2byIsIm51bGwiKSkpDQojcHJpbnQodGFibGUoUiRwb2x1ZW50ZSxSJHNpbmFsKSkNCnRhYmxlKFIkbW9kZWxvLFIkc2luYWwpDQpSICU+JSAgIGdncGxvdChhZXMoeD1zbG9wZSx5PWZhdG9yLHhtaW49bG93ZXJDSSx4bWF4PXVwcGVyQ0ksY29sPXNpbmFsKSkrDQogICNnZW9tX3BvaW50KGFscGhhPTAuNSkrDQogIGdlb21fcG9pbnRyYW5nZShhbHBoYT0wLjUpK2ZhY2V0X2dyaWQobm90YX5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT01KSsNCiAgI2dlb21fZXJyb3JiYXIoYWxwaGE9MC41KSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgibj0iLFIkYW1vc3RyYWdlbSwiDQoiLFIkZm9ybXVsYSksDQogICAgICAgY2FwdGlvbiA9ICJFUFBHIEZHViIpK3hsYWIoIlNsb3BlIikreWxhYigiRXN0YWRvIikNCg0KDQpyZXN1bHRhZG8kc2luYWw8LWlmZWxzZShyZXN1bHRhZG8kbG93ZXJDSV9lZng+MCwiUG9zaXRpdm8iLGlmZWxzZShyZXN1bHRhZG8kdXBwZXJDSV9lZng8MCwiTmVnYXRpdm8iLCJudWxsIikpDQpSMjwtcmVzdWx0YWRvWzY6MTldICU+JSBkaXN0aW5jdCgpIA0KdGFibGUoUjIkbW9kZWxvLFIyJHNpbmFsKQ0KUjIgJT4lICAgZ2dwbG90KGFlcyh4PWVmZWl0b19maXhvLHk9dGVzdGUseG1pbj1sb3dlckNJX2VmeCx4bWF4PXVwcGVyQ0lfZWZ4LGNvbD1zaW5hbCkpK2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhfnBvbHVlbnRlLHNjYWxlcyA9ICJmcmVlIikrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIHNpemU9MC4xLGFscGhhPTAuNSkrDQogICNnZW9tX2Vycm9yYmFyKGFscGhhPTAuNSkrDQogIGxhYnModGl0bGUgPSAiTW9kZWxvIG1pc3RvcyIsDQogICAgICAgc3VidGl0bGUgPSBwYXN0ZTAoIm49IixSJGFtb3N0cmFnZW0sIg0KIixSJGZvcm11bGEpLA0KICAgICAgIGNhcHRpb24gPSAiRVBQRyBGR1YiKSt4bGFiKCJTbG9wZSIpK3lsYWIoIkVzdGFkbyIpDQpgYGANCg0KIyBNb2RlbG8gY29tIFN1YnNldCBSdXJhbCBVcmJhbm8NCg0KYGBge3IsIGZpZy53aWR0aCA9IDIwLCBmaWcuaGVpZ2h0ID0gMTV9DQpyZXN1bHRhZG88LXJzdWx0YWRvMg0KcmVzdWx0YWRvJGZvcm11bGFbMV0jTm90YT1Qb2x1ZW50ZStSZW5kYStlZHVjYcOnw6NvcGFyZW50YWwrQU5PK1NleG8rTG9jX2VzY29sYSsoMStwb2x1ZW50ZXxFc3RhZG8pDQpzdW1tYXJ5KGFzLmZhY3RvcihyZXN1bHRhZG8kYW1vc3RyYWdlbSkpDQpSIDwtcmVzdWx0YWRvICU+JSBtdXRhdGUobG93ZXJDST1zbG9wZS0xLjk2KlNFX1Nsb3BlX3JhbmQsdXBwZXJDST1zbG9wZSsxLjk2KlNFX1Nsb3BlX3JhbmQpICU+JSANCiAgbXV0YXRlKHNpbmFsPWlmZWxzZShsb3dlckNJPjAsIlBvc2l0aXZvIixpZmVsc2UodXBwZXJDSTwwLCJOZWdhdGl2byIsIm51bGwiKSkpDQojcHJpbnQodGFibGUoUiRwb2x1ZW50ZSxSJHNpbmFsKSkNCnRhYmxlKFIkbW9kZWxvLFIkc2luYWwpDQp0YWJsZShSJHN1YnNldCxSJHNpbmFsLFIkcG9sdWVudGUpDQoNClIgJT4lICAgZ2dwbG90KGFlcyh4PXNsb3BlLHk9ZmF0b3IseG1pbj1sb3dlckNJLHhtYXg9dXBwZXJDSSxjb2w9c2luYWwpKSsNCiAgI2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT01KSsNCiAgI2dlb21fZXJyb3JiYXIoYWxwaGE9MC41KSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgibj0iLFIkYW1vc3RyYWdlbSwiDQoiLFIkZm9ybXVsYSksDQogICAgICAgY2FwdGlvbiA9ICJFUFBHIEZHViIpK3hsYWIoIlNsb3BlIikreWxhYigiRXN0YWRvIikNCg0KDQpyZXN1bHRhZG8kc2luYWw8LWlmZWxzZShyZXN1bHRhZG8kbG93ZXJDSV9lZng+MCwiUG9zaXRpdm8iLGlmZWxzZShyZXN1bHRhZG8kdXBwZXJDSV9lZng8MCwiTmVnYXRpdm8iLCJudWxsIikpDQpSMjwtcmVzdWx0YWRvWzY6MTldICU+JSBkaXN0aW5jdCgpIA0KdGFibGUoUjIkbW9kZWxvLFIyJHNpbmFsKQ0KUjIgJT4lICAgZ2dwbG90KGFlcyh4PWVmZWl0b19maXhvLHk9dGVzdGUseG1pbj1sb3dlckNJX2VmeCx4bWF4PXVwcGVyQ0lfZWZ4LGNvbD1zaW5hbCkpK2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT0wLjUpKw0KICAjZ2VvbV9lcnJvcmJhcihhbHBoYT0wLjUpKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJuPSIsUiRhbW9zdHJhZ2VtLCINCiIsUiRmb3JtdWxhKSwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiU2xvcGUiKSt5bGFiKCJFc3RhZG8iKQ0KYGBgDQoNCiMgTW9kZWxvIGNvbSBzdWJzZXQgVGlwbyBkZSBFc2NvbGENCg0KYGBge3IsIGZpZy53aWR0aCA9IDIwLCBmaWcuaGVpZ2h0ID0gMTV9DQpyZXN1bHRhZG88LXJzdWx0YWRvMw0KcmVzdWx0YWRvJGZvcm11bGFbMV0jTm90YT1Qb2x1ZW50ZStSZW5kYStlZHVjYcOnw6NvcGFyZW50YWwrQU5PK1NleG8rTG9jX2VzY29sYSsoMStwb2x1ZW50ZXxFc3RhZG8pDQpzdW1tYXJ5KGFzLmZhY3RvcihyZXN1bHRhZG8kYW1vc3RyYWdlbSkpDQpSIDwtcmVzdWx0YWRvICU+JSBtdXRhdGUobG93ZXJDST1zbG9wZS0xLjk2KlNFX1Nsb3BlX3JhbmQsdXBwZXJDST1zbG9wZSsxLjk2KlNFX1Nsb3BlX3JhbmQpICU+JSANCiAgbXV0YXRlKHNpbmFsPWlmZWxzZShsb3dlckNJPjAsIlBvc2l0aXZvIixpZmVsc2UodXBwZXJDSTwwLCJOZWdhdGl2byIsIm51bGwiKSkpDQojcHJpbnQodGFibGUoUiRwb2x1ZW50ZSxSJHNpbmFsKSkNCnRhYmxlKFIkbW9kZWxvLFIkc2luYWwpDQp0YWJsZShSJHN1YnNldCxSJHNpbmFsLFIkcG9sdWVudGUpDQoNClIgJT4lICAgZ2dwbG90KGFlcyh4PXNsb3BlLHk9ZmF0b3IseG1pbj1sb3dlckNJLHhtYXg9dXBwZXJDSSxjb2w9c2luYWwpKSsNCiAgI2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT01KSsNCiAgI2dlb21fZXJyb3JiYXIoYWxwaGE9MC41KSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgibj0iLFIkYW1vc3RyYWdlbSwiDQoiLFIkZm9ybXVsYSksDQogICAgICAgY2FwdGlvbiA9ICJFUFBHIEZHViIpK3hsYWIoIlNsb3BlIikreWxhYigiRXN0YWRvIikNCg0KDQpyZXN1bHRhZG8kc2luYWw8LWlmZWxzZShyZXN1bHRhZG8kbG93ZXJDSV9lZng+MCwiUG9zaXRpdm8iLGlmZWxzZShyZXN1bHRhZG8kdXBwZXJDSV9lZng8MCwiTmVnYXRpdm8iLCJudWxsIikpDQpSMjwtcmVzdWx0YWRvWzY6MTldICU+JSBkaXN0aW5jdCgpIA0KdGFibGUoUjIkbW9kZWxvLFIyJHNpbmFsKQ0KUjIgJT4lICAgZ2dwbG90KGFlcyh4PWVmZWl0b19maXhvLHk9dGVzdGUseG1pbj1sb3dlckNJX2VmeCx4bWF4PXVwcGVyQ0lfZWZ4LGNvbD1zaW5hbCkpK2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT0wLjUpKw0KICAjZ2VvbV9lcnJvcmJhcihhbHBoYT0wLjUpKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJuPSIsUiRhbW9zdHJhZ2VtLCINCiIsUiRmb3JtdWxhKSwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiU2xvcGUiKSt5bGFiKCJFc3RhZG8iKQ0KYGBgDQoNCiMgTW9kZWxvIGNvbSBzdWJzZXQgU2V4bw0KDQpgYGB7ciwgZmlnLndpZHRoID0gMjAsIGZpZy5oZWlnaHQgPSAxNX0NCnJlc3VsdGFkbzwtcnN1bHRhZG80DQpyZXN1bHRhZG8kZm9ybXVsYVsxXSNOb3RhPVBvbHVlbnRlK1JlbmRhK2VkdWNhw6fDo29wYXJlbnRhbCtBTk8rU2V4bytMb2NfZXNjb2xhKygxK3BvbHVlbnRlfEVzdGFkbykNCnN1bW1hcnkoYXMuZmFjdG9yKHJlc3VsdGFkbyRhbW9zdHJhZ2VtKSkNClIgPC1yZXN1bHRhZG8gJT4lIG11dGF0ZShsb3dlckNJPXNsb3BlLTEuOTYqU0VfU2xvcGVfcmFuZCx1cHBlckNJPXNsb3BlKzEuOTYqU0VfU2xvcGVfcmFuZCkgJT4lIA0KICBtdXRhdGUoc2luYWw9aWZlbHNlKGxvd2VyQ0k+MCwiUG9zaXRpdm8iLGlmZWxzZSh1cHBlckNJPDAsIk5lZ2F0aXZvIiwibnVsbCIpKSkNCiNwcmludCh0YWJsZShSJHBvbHVlbnRlLFIkc2luYWwpKQ0KdGFibGUoUiRtb2RlbG8sUiRzaW5hbCkNCnRhYmxlKFIkc3Vic2V0LFIkc2luYWwsUiRwb2x1ZW50ZSkNCg0KUiAlPiUgICBnZ3Bsb3QoYWVzKHg9c2xvcGUseT1mYXRvcix4bWluPWxvd2VyQ0kseG1heD11cHBlckNJLGNvbD1zaW5hbCkpKw0KICAjZ2VvbV9wb2ludChhbHBoYT0wLjUpKw0KICBnZW9tX3BvaW50cmFuZ2UoYWxwaGE9MC41KStmYWNldF9ncmlkKG5vdGEqc3Vic2V0fnBvbHVlbnRlLHNjYWxlcyA9ICJmcmVlIikrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIHNpemU9MC4xLGFscGhhPTUpKw0KICAjZ2VvbV9lcnJvcmJhcihhbHBoYT0wLjUpKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJuPSIsUiRhbW9zdHJhZ2VtLCINCiIsUiRmb3JtdWxhKSwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiU2xvcGUiKSt5bGFiKCJFc3RhZG8iKQ0KDQoNCnJlc3VsdGFkbyRzaW5hbDwtaWZlbHNlKHJlc3VsdGFkbyRsb3dlckNJX2VmeD4wLCJQb3NpdGl2byIsaWZlbHNlKHJlc3VsdGFkbyR1cHBlckNJX2VmeDwwLCJOZWdhdGl2byIsIm51bGwiKSkNClIyPC1yZXN1bHRhZG9bNjoxOV0gJT4lIGRpc3RpbmN0KCkgDQp0YWJsZShSMiRtb2RlbG8sUjIkc2luYWwpDQpSMiAlPiUgICBnZ3Bsb3QoYWVzKHg9ZWZlaXRvX2ZpeG8seT10ZXN0ZSx4bWluPWxvd2VyQ0lfZWZ4LHhtYXg9dXBwZXJDSV9lZngsY29sPXNpbmFsKSkrZ2VvbV9wb2ludChhbHBoYT0wLjUpKw0KICBnZW9tX3BvaW50cmFuZ2UoYWxwaGE9MC41KStmYWNldF9ncmlkKG5vdGEqc3Vic2V0fnBvbHVlbnRlLHNjYWxlcyA9ICJmcmVlIikrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIHNpemU9MC4xLGFscGhhPTAuNSkrDQogICNnZW9tX2Vycm9yYmFyKGFscGhhPTAuNSkrDQogIGxhYnModGl0bGUgPSAiTW9kZWxvIG1pc3RvcyIsDQogICAgICAgc3VidGl0bGUgPSBwYXN0ZTAoIm49IixSJGFtb3N0cmFnZW0sIg0KIixSJGZvcm11bGEpLA0KICAgICAgIGNhcHRpb24gPSAiRVBQRyBGR1YiKSt4bGFiKCJTbG9wZSIpK3lsYWIoIkVzdGFkbyIpDQpgYGANCg0KIyBNb2RlbG8gY29tIHN1YnNldCBwb3IgUmVuZGENCg0KYGBge3IsIGZpZy53aWR0aCA9IDIwLCBmaWcuaGVpZ2h0ID0gMTV9DQpyZXN1bHRhZG88LXJzdWx0YWRvNQ0KcmVzdWx0YWRvJGZvcm11bGFbMV0jTm90YT1Qb2x1ZW50ZStSZW5kYStlZHVjYcOnw6NvcGFyZW50YWwrQU5PK1NleG8rTG9jX2VzY29sYSsoMStwb2x1ZW50ZXxFc3RhZG8pDQpzdW1tYXJ5KGFzLmZhY3RvcihyZXN1bHRhZG8kYW1vc3RyYWdlbSkpDQpSIDwtcmVzdWx0YWRvICU+JSBtdXRhdGUobG93ZXJDST1zbG9wZS0xLjk2KlNFX1Nsb3BlX3JhbmQsdXBwZXJDST1zbG9wZSsxLjk2KlNFX1Nsb3BlX3JhbmQpICU+JSANCiAgbXV0YXRlKHNpbmFsPWlmZWxzZShsb3dlckNJPjAsIlBvc2l0aXZvIixpZmVsc2UodXBwZXJDSTwwLCJOZWdhdGl2byIsIm51bGwiKSkpDQojcHJpbnQodGFibGUoUiRwb2x1ZW50ZSxSJHNpbmFsKSkNCnRhYmxlKFIkbW9kZWxvLFIkc2luYWwpDQp0YWJsZShSJHN1YnNldCxSJHNpbmFsLFIkcG9sdWVudGUpDQoNClIgJT4lICAgZ2dwbG90KGFlcyh4PXNsb3BlLHk9ZmF0b3IseG1pbj1sb3dlckNJLHhtYXg9dXBwZXJDSSxjb2w9c2luYWwpKSsNCiAgI2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT01KSsNCiAgI2dlb21fZXJyb3JiYXIoYWxwaGE9MC41KSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgibj0iLFIkYW1vc3RyYWdlbSwiDQoiLFIkZm9ybXVsYSksDQogICAgICAgY2FwdGlvbiA9ICJFUFBHIEZHViIpK3hsYWIoIlNsb3BlIikreWxhYigiRXN0YWRvIikNCg0KDQpyZXN1bHRhZG8kc2luYWw8LWlmZWxzZShyZXN1bHRhZG8kbG93ZXJDSV9lZng+MCwiUG9zaXRpdm8iLGlmZWxzZShyZXN1bHRhZG8kdXBwZXJDSV9lZng8MCwiTmVnYXRpdm8iLCJudWxsIikpDQpSMjwtcmVzdWx0YWRvWzY6MTldICU+JSBkaXN0aW5jdCgpIA0KdGFibGUoUjIkbW9kZWxvLFIyJHNpbmFsKQ0KUjIgJT4lICAgZ2dwbG90KGFlcyh4PWVmZWl0b19maXhvLHk9dGVzdGUseG1pbj1sb3dlckNJX2VmeCx4bWF4PXVwcGVyQ0lfZWZ4LGNvbD1zaW5hbCkpK2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT0wLjUpKw0KICAjZ2VvbV9lcnJvcmJhcihhbHBoYT0wLjUpKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJuPSIsUiRhbW9zdHJhZ2VtLCINCiIsUiRmb3JtdWxhKSwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiU2xvcGUiKSt5bGFiKCJFc3RhZG8iKQ0KYGBgDQoNCiMgTW9kZWxvIGNvbSBzdWJzZXQgcG9yIEdydXBvIGRlIEFub3MNCg0KYGBge3IsIGZpZy53aWR0aCA9IDIwLCBmaWcuaGVpZ2h0ID0gMTV9DQpyZXN1bHRhZG88LXJzdWx0YWRvNQ0KcmVzdWx0YWRvJGZvcm11bGFbMV0jTm90YT1Qb2x1ZW50ZStSZW5kYStlZHVjYcOnw6NvcGFyZW50YWwrQU5PK1NleG8rTG9jX2VzY29sYSsoMStwb2x1ZW50ZXxFc3RhZG8pDQpzdW1tYXJ5KGFzLmZhY3RvcihyZXN1bHRhZG8kYW1vc3RyYWdlbSkpDQpSIDwtcmVzdWx0YWRvICU+JSBtdXRhdGUobG93ZXJDST1zbG9wZS0xLjk2KlNFX1Nsb3BlX3JhbmQsdXBwZXJDST1zbG9wZSsxLjk2KlNFX1Nsb3BlX3JhbmQpICU+JSANCiAgbXV0YXRlKHNpbmFsPWlmZWxzZShsb3dlckNJPjAsIlBvc2l0aXZvIixpZmVsc2UodXBwZXJDSTwwLCJOZWdhdGl2byIsIm51bGwiKSkpDQojcHJpbnQodGFibGUoUiRwb2x1ZW50ZSxSJHNpbmFsKSkNCnRhYmxlKFIkbW9kZWxvLFIkc2luYWwpDQp0YWJsZShSJHN1YnNldCxSJHNpbmFsLFIkcG9sdWVudGUpDQoNClIgJT4lICAgZ2dwbG90KGFlcyh4PXNsb3BlLHk9ZmF0b3IseG1pbj1sb3dlckNJLHhtYXg9dXBwZXJDSSxjb2w9c2luYWwpKSsNCiAgI2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT01KSsNCiAgI2dlb21fZXJyb3JiYXIoYWxwaGE9MC41KSsNCiAgbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgibj0iLFIkYW1vc3RyYWdlbSwiDQoiLFIkZm9ybXVsYSksDQogICAgICAgY2FwdGlvbiA9ICJFUFBHIEZHViIpK3hsYWIoIlNsb3BlIikreWxhYigiRXN0YWRvIikNCg0KDQpyZXN1bHRhZG8kc2luYWw8LWlmZWxzZShyZXN1bHRhZG8kbG93ZXJDSV9lZng+MCwiUG9zaXRpdm8iLGlmZWxzZShyZXN1bHRhZG8kdXBwZXJDSV9lZng8MCwiTmVnYXRpdm8iLCJudWxsIikpDQpSMjwtcmVzdWx0YWRvWzY6MTldICU+JSBkaXN0aW5jdCgpIA0KdGFibGUoUjIkbW9kZWxvLFIyJHNpbmFsKQ0KUjIgJT4lICAgZ2dwbG90KGFlcyh4PWVmZWl0b19maXhvLHk9dGVzdGUseG1pbj1sb3dlckNJX2VmeCx4bWF4PXVwcGVyQ0lfZWZ4LGNvbD1zaW5hbCkpK2dlb21fcG9pbnQoYWxwaGE9MC41KSsNCiAgZ2VvbV9wb2ludHJhbmdlKGFscGhhPTAuNSkrZmFjZXRfZ3JpZChub3RhKnN1YnNldH5wb2x1ZW50ZSxzY2FsZXMgPSAiZnJlZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBzaXplPTAuMSxhbHBoYT0wLjUpKw0KICAjZ2VvbV9lcnJvcmJhcihhbHBoYT0wLjUpKw0KICBsYWJzKHRpdGxlID0gIk1vZGVsbyBtaXN0b3MiLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJuPSIsUiRhbW9zdHJhZ2VtLCINCiIsUiRmb3JtdWxhKSwNCiAgICAgICBjYXB0aW9uID0gIkVQUEcgRkdWIikreGxhYigiU2xvcGUiKSt5bGFiKCJFc3RhZG8iKQ0KYGBgDQoNCiMgT2JzZXJ2YcOnw7VlczoNCg0KLSAgIFBhZHJvbml6YXIgbyB0YW1hbmhvIGRhIGFtb3N0cmEgcGFyYSBhbsOhbGlzZXM6IGF1bWVudGFyKHRlbnRhciBjaGVnYXIgYSAxMDAlKQ0KDQotICAgRXNxdWVjZXIgcmVwZXRpw6fDtWVzOiBjb2xvY2FyIHPDsyB1bSBtb2RlbG8gbm9zIGdyYWZpY29zDQoNCi0gICBBdHJpdG86IHF1YW50b3MgcmV0aXJvdSBwb3IgY2F1c2EgZG9zIE5BJ3MNCg0KLSAgIGluY2x1aXIgdmFyaWF2ZWwgZGUgUmVuZGEgb3UgSURIIG5vIG1vZGVsbw0K