library(tidyverse)
df<-readRDS("Energia_ambiental_diário.rds")
head(df)
NA
#amostragem
slice_sample(df,prop = 0.1)->df1
Estatisticas Descritivas
library(stargazer)
summary(df)
Date cod_modalidadeoperacao nom_subsistema
Min. :2000-01-01 TIPO I :1066453 NORDESTE:280479
1st Qu.:2007-12-21 TIPO III : 153508 NORTE : 64771
Median :2013-05-10 Pequenas Usinas (Tipo III): 125774 PARAGUAI: 8024
Mean :2012-06-05 TIPO II-A : 66201 SUDESTE :901432
3rd Qu.:2017-02-13 Conjunto de Usinas : 52636 SUL :294171
Max. :2021-12-31 (Other) : 84304
NA's : 1
nom_estado nom_tipousina nom_tipocombustivel preciptation
SAO PAULO :253521 BOMBEAMENTO : 737 Hidráulica :948047 Min. : 0.0
MINAS GERAIS :219349 EOLIELÉTRICA : 69677 Gás :158366 1st Qu.: 0.0
RIO GRANDE DO SUL:142434 FOTOVOLTAICA : 17813 Biomassa : 99819 Median : 0.0
BAHIA :109287 HIDROELÉTRICA:947310 Óleo Diesel : 99602 Mean : 3.5
GOIAS :100989 NUCLEAR : 8024 Óleo Combustível: 86652 3rd Qu.: 3.0
PARANA : 91966 TÉRMICA :505316 (Other) :156184 Max. :256.0
(Other) :631331 NA's : 207 NA's :454069
temperature humidity wind_speed co_ppb no2_ppb
Min. : 1.2 Min. : 21.0 Min. : 0.3 Min. : 0.0 Min. : 0.0
1st Qu.:20.9 1st Qu.: 69.0 1st Qu.: 2.1 1st Qu.: 92.0 1st Qu.: 0.8
Median :23.7 Median : 79.0 Median : 2.7 Median : 118.5 Median : 1.2
Mean :23.0 Mean : 76.9 Mean : 3.0 Mean : 140.6 Mean : 1.9
3rd Qu.:25.9 3rd Qu.: 87.5 3rd Qu.: 3.6 3rd Qu.: 155.2 3rd Qu.: 2.0
Max. :34.5 Max. :100.0 Max. :13.3 Max. :12303.9 Max. :64.0
NA's :454069 NA's :454069 NA's :454069 NA's :454069 NA's :545830
o3_ppb pm25_ugm3 so2_ugm3 val_geracao
Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 0
1st Qu.: 14.9 1st Qu.: 5.2 1st Qu.: 0.4 1st Qu.: 216
Median : 19.3 Median : 8.1 Median : 0.7 Median : 1440
Mean : 20.0 Mean : 12.9 Mean : 1.8 Mean : 6676
3rd Qu.: 24.5 3rd Qu.: 12.7 3rd Qu.: 1.6 3rd Qu.: 5144
Max. :118.4 Max. :1853.6 Max. :110.9 Max. :392779
NA's :454069 NA's :466094 NA's :466142
modelo linear simples
for( i in 1:14){
print(names(df)[i])
formula <- as.formula(paste("val_geracao", "~", names(df)[i]))
m<-lm(formula,df)
print(summary(m))
}
[1] "Date"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-7626 -6240 -5248 -1512 386698
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9918.21230 102.59680 96.67 <2e-16 ***
Date -0.20921 0.00656 -31.89 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17220 on 1548875 degrees of freedom
Multiple R-squared: 0.0006563, Adjusted R-squared: 0.0006556
F-statistic: 1017 on 1 and 1548875 DF, p-value: < 2.2e-16
[1] "cod_modalidadeoperacao"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-8986 -7679 -3042 -57 383793
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6872.29 73.43 93.59 <2e-16 ***
cod_modalidadeoperacaoPequenas Usinas (Tipo III) -5207.95 87.45 -59.55 <2e-16 ***
cod_modalidadeoperacaoTIPO I 2113.53 75.22 28.10 <2e-16 ***
cod_modalidadeoperacaoTIPO II-A -6657.63 98.38 -67.67 <2e-16 ***
cod_modalidadeoperacaoTIPO II-B -5946.71 107.66 -55.23 <2e-16 ***
cod_modalidadeoperacaoTIPO II-C -5882.05 112.95 -52.08 <2e-16 ***
cod_modalidadeoperacaoTIPO III -6275.22 85.09 -73.75 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16850 on 1548869 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.04362, Adjusted R-squared: 0.04361
F-statistic: 1.177e+04 on 6 and 1548869 DF, p-value: < 2.2e-16
[1] "nom_subsistema"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-83655 -5373 -4469 -891 376088
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5005.28 29.55 169.36 <2e-16 ***
nom_subsistemaNORTE 11686.12 68.23 171.27 <2e-16 ***
nom_subsistemaPARAGUAI 96447.04 177.21 544.24 <2e-16 ***
nom_subsistemaSUDESTE 1032.67 33.84 30.52 <2e-16 ***
nom_subsistemaSUL 428.78 41.31 10.38 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 15650 on 1548872 degrees of freedom
Multiple R-squared: 0.1744, Adjusted R-squared: 0.1744
F-statistic: 8.182e+04 on 4 and 1548872 DF, p-value: < 2.2e-16
[1] "nom_estado"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-83655 -4657 -2334 393 355352
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 57.15 222.23 0.257 0.797064
nom_estadoALAGOAS 29060.26 262.88 110.547 < 2e-16 ***
nom_estadoAMAPA 4036.96 285.97 14.117 < 2e-16 ***
nom_estadoAMAZONAS 3281.37 246.29 13.323 < 2e-16 ***
nom_estadoBAHIA 4704.44 226.63 20.758 < 2e-16 ***
nom_estadoCEARA 2764.36 231.86 11.922 < 2e-16 ***
nom_estadoDISTRITO FEDERAL 87.74 254.72 0.344 0.730495
nom_estadoESPIRITO SANTO 1929.15 232.60 8.294 < 2e-16 ***
nom_estadoGOIAS 3148.79 226.99 13.872 < 2e-16 ***
nom_estadoMARANHAO 7260.96 245.52 29.574 < 2e-16 ***
nom_estadoMATO GROSSO 2910.00 229.50 12.680 < 2e-16 ***
nom_estadoMATO GROSSO DO SUL 1191.23 230.54 5.167 0.00000023760 ***
nom_estadoMINAS GERAIS 5352.31 224.43 23.848 < 2e-16 ***
nom_estadoPARA 37370.45 241.63 154.658 < 2e-16 ***
nom_estadoPARAIBA 1419.42 263.64 5.384 0.00000007292 ***
nom_estadoPARANA 18434.25 227.45 81.047 < 2e-16 ***
nom_estadoPERNAMBUCO 4182.19 231.72 18.049 < 2e-16 ***
nom_estadoPIAUI 3292.46 245.81 13.395 < 2e-16 ***
nom_estadoRIO DE JANEIRO 8384.39 227.71 36.820 < 2e-16 ***
nom_estadoRIO GRANDE DO NORTE 4482.72 239.22 18.739 < 2e-16 ***
nom_estadoRIO GRANDE DO SUL 2277.16 225.62 10.093 < 2e-16 ***
nom_estadoRONDONIA 10986.94 242.32 45.342 < 2e-16 ***
nom_estadoRORAIMA 3207.56 881.22 3.640 0.000273 ***
nom_estadoSANTA CATARINA 7292.64 229.29 31.806 < 2e-16 ***
nom_estadoSAO PAULO 5708.48 224.14 25.468 < 2e-16 ***
nom_estadoSERGIPE 2220.50 366.03 6.066 0.00000000131 ***
nom_estadoTOCANTINS 7697.16 249.67 30.829 < 2e-16 ***
nom_estadoz - INTERNACIONAL 101395.17 276.23 367.072 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 14700 on 1548849 degrees of freedom
Multiple R-squared: 0.2722, Adjusted R-squared: 0.2722
F-statistic: 2.146e+04 on 27 and 1548849 DF, p-value: < 2.2e-16
[1] "nom_tipousina"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-37953 -7440 -2347 -685 383815
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.2537 618.3946 0.000 0.99967
nom_tipousinaEOLIELÉTRICA 4850.5892 621.6565 7.803 6.06e-15 ***
nom_tipousinaFOTOVOLTAICA 1132.9926 631.0578 1.795 0.07259 .
nom_tipousinaHIDROELÉTRICA 8963.9442 618.6351 14.490 < 2e-16 ***
nom_tipousinaNUCLEAR 37953.2025 646.1705 58.736 < 2e-16 ***
nom_tipousinaTÉRMICA 2346.4024 618.8454 3.792 0.00015 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16790 on 1548871 degrees of freedom
Multiple R-squared: 0.05024, Adjusted R-squared: 0.05024
F-statistic: 1.639e+04 on 5 and 1548871 DF, p-value: < 2.2e-16
[1] "nom_tipocombustivel"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-37953 -7438 -3985 -274 383822
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 705.48 53.02 13.306 < 2e-16 ***
nom_tipocombustivelCarvão 5587.60 105.26 53.083 < 2e-16 ***
nom_tipocombustivelEólica 4159.56 82.88 50.189 < 2e-16 ***
nom_tipocombustivelFotovoltaica 481.09 134.58 3.575 0.000350 ***
nom_tipocombustivelGás 3583.88 67.70 52.940 < 2e-16 ***
nom_tipocombustivelHidráulica 8251.75 55.74 148.039 < 2e-16 ***
nom_tipocombustivelNuclear 37247.98 194.37 191.633 < 2e-16 ***
nom_tipocombustivelÓleo Combustível 131.23 77.78 1.687 0.091544 .
nom_tipocombustivelÓleo Diesel -258.93 75.02 -3.451 0.000558 ***
nom_tipocombustivelOutras Multi-Combustível 1445.16 221.13 6.535 0.0000000000635 ***
nom_tipocombustivelResíduos Industriais 3771.90 128.06 29.454 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16750 on 1548659 degrees of freedom
(207 observations deleted due to missingness)
Multiple R-squared: 0.05455, Adjusted R-squared: 0.05454
F-statistic: 8936 on 10 and 1548659 DF, p-value: < 2.2e-16
[1] "preciptation"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-19262 -6951 -5622 -1179 175877
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7264.336 17.877 406.34 <2e-16 ***
preciptation 46.867 1.996 23.48 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17180 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.0005035, Adjusted R-squared: 0.0005026
F-statistic: 551.5 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "temperature"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-9100 -6905 -5477 -1164 175086
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3920.673 95.779 40.94 <2e-16 ***
temperature 152.444 4.099 37.19 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17180 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.001262, Adjusted R-squared: 0.001261
F-statistic: 1383 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "humidity"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-7743 -6975 -5652 -1204 175782
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7860.70 92.96 84.561 < 2e-16 ***
humidity -5.60 1.19 -4.705 0.00000253 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17190 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 2.022e-05, Adjusted R-squared: 1.931e-05
F-statistic: 22.14 on 1 and 1094806 DF, p-value: 0.000002533
[1] "wind_speed"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-8395 -6930 -5618 -1161 175317
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8523.43 42.49 200.6 <2e-16 ***
wind_speed -367.96 13.19 -27.9 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17180 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.0007105, Adjusted R-squared: 0.0007096
F-statistic: 778.4 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "co_ppb"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-21116 -6973 -5654 -1200 175783
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7259.4715 26.0830 278.322 <2e-16 ***
co_ppb 1.2137 0.1441 8.425 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17190 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 6.483e-05, Adjusted R-squared: 6.392e-05
F-statistic: 70.98 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "no2_ppb"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-8069 -6797 -5301 -996 175162
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8069.189 21.213 380.4 <2e-16 ***
no2_ppb -512.292 6.999 -73.2 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16820 on 1003045 degrees of freedom
(545830 observations deleted due to missingness)
Multiple R-squared: 0.005313, Adjusted R-squared: 0.005312
F-statistic: 5358 on 1 and 1003045 DF, p-value: < 2.2e-16
[1] "o3_ppb"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-9553 -6891 -5466 -1140 174711
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9553.073 47.523 201.0 <2e-16 ***
o3_ppb -105.907 2.225 -47.6 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17170 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.002065, Adjusted R-squared: 0.002064
F-statistic: 2266 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "pm25_ugm3"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-43278 -6940 -5589 -1179 175784
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7109.5911 18.9254 375.66 <2e-16 ***
pm25_ugm3 23.0642 0.7203 32.02 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17170 on 1082781 degrees of freedom
(466094 observations deleted due to missingness)
Multiple R-squared: 0.0009461, Adjusted R-squared: 0.0009452
F-statistic: 1025 on 1 and 1082781 DF, p-value: < 2.2e-16
modelo linear multivariado
modelo por tipo de usina
modelo de penalidade
library(glmnet)
# Ajustar um modelo de regressão ridge (alpha = 0) ou lasso (alpha = 1) com glmnet
#x<-subset_df %>% select(,Date , preciptation , temperature , humidity , wind_speed , co_ppb , no2_ppb , o3_ppb , pm25_ugm3,cod_modalidadeoperacao , nom_subsistema , nom_estado , nom_tipousina , nom_tipocombustivel) %>% as.matrix()
modelo_penalizado <- glmnet(x, subset_df$val_geracao, alpha = 0)
# Coeficientes do modelo não penalizado (Regressão Linear)
coeficientes_nao_penalizados <- coef(n)
# Coeficientes do modelo penalizado (Regressão Ridge ou Lasso)
coeficientes_penalizados <- coef(modelo_penalizado)
print(coeficientes_penalizados)
# Selecionar apenas as variáveis numéricas relevantes para o PCA
data_for_pca <- df´´[,7:16] %>% na.omit()
Error: unexpected input in "data_for_pca <- df´"
library(factoextra)
library(FactoMineR)


pca_result2$eig
eigenvalue percentage of variance cumulative percentage of variance
comp 1 3.11417223 31.1417223 31.14172
comp 2 1.73448227 17.3448227 48.48654
comp 3 1.18468509 11.8468509 60.33340
comp 4 1.01108316 10.1108316 70.44423
comp 5 0.94508154 9.4508154 79.89504
comp 6 0.72615665 7.2615665 87.15661
comp 7 0.64244777 6.4244777 93.58109
comp 8 0.47017946 4.7017946 98.28288
comp 9 0.09698142 0.9698142 99.25270
comp 10 0.07473041 0.7473041 100.00000
pca_result2$call$centre
[1] 3.245838e-14 -5.644361e-16 1.112571e-14 1.203773e-15 -7.553955e-16 -1.800661e-14 2.204141e-15 1.065543e-15
[9] -1.046605e-14 -3.113405e-14
options(scipen = 9)
pca_result2$var$contrib
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
preciptation 0.33570051 14.77439845 1.977472 32.4149955 19.0418272
temperature 0.00715783 6.70824396 34.732898 1.0588626 26.3239537
humidity 0.85974240 32.04779814 5.862930 1.7087800 0.2447823
wind_speed 0.93741864 16.96662224 18.841506 18.1503456 2.4859583
co_ppb 22.95036247 0.07958316 4.694254 1.8644901 1.6063753
no2_ppb 26.38160434 0.72372272 1.895669 0.9155119 0.7291454
o3_ppb 2.21921996 27.84300927 10.515181 4.1749070 0.2300643
pm25_ugm3 25.54276466 0.29480425 1.381312 2.4549985 1.4972474
so2_ugm3 20.69374250 0.48744757 6.028877 0.2797480 1.1663384
val_geracao 0.07228668 0.07437025 14.069902 36.9773609 46.6743078
LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gR2VyYcOnw6NvIEFuYWxpc2UgRXhwbG9yYXTDs3JpYSINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KZWRpdG9yX29wdGlvbnM6DQogIG1hcmtkb3duOg0KICAgIHdyYXA6IDgwDQotLS0NCg0KIyMgDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpkZjwtcmVhZFJEUygiRW5lcmdpYV9hbWJpZW50YWxfZGnDoXJpby5yZHMiKQ0KaGVhZChkZikNCg0KYGBgDQoNCmBgYHtyfQ0KI2Ftb3N0cmFnZW0NCnNsaWNlX3NhbXBsZShkZiwgcHJvcCA9IDAuMjUpLT5hDQoNCmBgYA0KDQojIyBFc3RhdGlzdGljYXMgRGVzY3JpdGl2YXMNCg0KYGBge3J9DQpsaWJyYXJ5KHN0YXJnYXplcikNCnN1bW1hcnkoZGYpDQpgYGANCg0KIyMgdmlzdWFsaXphw6fDo28NCg0KYGBge3IgZWNobz1GQUxTRX0NCiN2aXN1YWxpemHDp8Ojbw0KbGlicmFyeSh0aWR5dmVyc2UpDQpkZiAlPiUgZ2dwbG90KGFlcyh0ZW1wZXJhdHVyZSx2YWxfZ2VyYWNhbykpICtnZW9tX3Ntb290aCgpK2ZhY2V0X3dyYXAofm5vbV90aXBvY29tYnVzdGl2ZWwsc2NhbGU9ImZyZWUiKQ0KZGYgJT4lIGdncGxvdChhZXMoRGF0ZSx2YWxfZ2VyYWNhbykpICtnZW9tX3Ntb290aCgpK2ZhY2V0X3dyYXAofm5vbV90aXBvY29tYnVzdGl2ZWwsc2NhbGU9ImZyZWUiKQ0KZGYgJT4lIGdncGxvdChhZXMocHJlY2lwdGF0aW9uLHZhbF9nZXJhY2FvKSkgK2dlb21fc21vb3RoKCkrZmFjZXRfd3JhcCh+bm9tX3RpcG9jb21idXN0aXZlbCxzY2FsZT0iZnJlZSIpDQpkZiAlPiUgZ2dwbG90KGFlcyhwbTI1X3VnbTMsdmFsX2dlcmFjYW8pKSArZ2VvbV9zbW9vdGgoKStmYWNldF93cmFwKH5ub21fdGlwb2NvbWJ1c3RpdmVsLHNjYWxlPSJmcmVlIikNCmRmICU+JSBnZ3Bsb3QoYWVzKHdpbmRfc3BlZWQsdmFsX2dlcmFjYW8pKSArZ2VvbV9zbW9vdGgoKStmYWNldF93cmFwKH5ub21fdGlwb2NvbWJ1c3RpdmVsLHNjYWxlPSJmcmVlIikNCg0KYGBgDQoNCiMgbW9kZWxvIGxpbmVhciBzaW1wbGVzDQoNCmBgYHtyfQ0KZm9yKCBpIGluIDE6MTQpew0KICBwcmludChuYW1lcyhkZilbaV0pDQogIGZvcm11bGEgPC0gYXMuZm9ybXVsYShwYXN0ZSgidmFsX2dlcmFjYW8iLCAifiIsIG5hbWVzKGRmKVtpXSkpDQogIG08LWxtKGZvcm11bGEsZGYpDQogIHByaW50KHN1bW1hcnkobSkpDQp9DQoNCmBgYA0KDQojIG1vZGVsbyBsaW5lYXIgbXVsdGl2YXJpYWRvDQoNCmBgYHtyfQ0KDQojZm9ybXVsYTwtInZhbF9nZXJhY2FvfiINCiNmb3IoIGkgaW4gMToxNCl7DQojICBwcmludChuYW1lcyhkZilbaV0pDQojICBmb3JtdWxhIDwtIHBhc3RlKGZvcm11bGEsIisiLG5hbWVzKGRmKVtpXSkNCiMgDQojfQ0KbTwtbG0odmFsX2dlcmFjYW9+IERhdGUgKyAgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zK2NvZF9tb2RhbGlkYWRlb3BlcmFjYW8gKyBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gKyBub21fdGlwb3VzaW5hICsgbm9tX3RpcG9jb21idXN0aXZlbCAsZGYpDQpzdW1tYXJ5KG0pDQpgYGANCg0KIyMgbW9kZWxvIHBvciB0aXBvIGRlIHVzaW5hDQoNCmBgYHtyfQ0KYTwtdW5pcXVlKGRmJG5vbV90aXBvdXNpbmEpDQoNCmZvciAoaSBpbiBhKSB7DQogIHByaW50KGkpDQogIHN1YnNldF9kZiA8LSBzdWJzZXQoZGYsIG5vbV90aXBvdXNpbmEgPT0gaSkNCg0KIG08LWxtKHZhbF9nZXJhY2FvfiBEYXRlICsgIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMyArIG5vbV9zdWJzaXN0ZW1hICsgbm9tX2VzdGFkbyAsc3Vic2V0X2RmKQ0KIHByaW50KHN1bW1hcnkobSkpDQp9DQojbTwtbG0odmFsX2dlcmFjYW9+IERhdGUgKyAgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zK2NvZF9tb2RhbGlkYWRlb3BlcmFjYW8gKyBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gKyBub21fdGlwb3VzaW5hICsgbm9tX3RpcG9jb21idXN0aXZlbCAsZGYpDQojc3VtbWFyeShtKQ0KYGBgDQoNCmBgYHtyfQ0KI2ENCiAgc3Vic2V0X2RmIDwtIHN1YnNldChkZiwgbm9tX3RpcG91c2luYSA9PSAiTlVDTEVBUiIpDQojc3VtbWFyeShzdWJzZXRfZGYpDQogbTwtbG0odmFsX2dlcmFjYW9+IERhdGUgKyAgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zICxzdWJzZXRfZGYpDQogcHJpbnQoc3VtbWFyeShtKSkNCmBgYA0KDQpgYGB7cn0NCmENCiAgc3Vic2V0X2RmIDwtIHN1YnNldChkZiwgbm9tX3RpcG91c2luYSA9PSAiQk9NQkVBTUVOVE8iKQ0Kc3VtbWFyeShzdWJzZXRfZGYpDQogbTwtbG0odmFsX2dlcmFjYW8gfiBEYXRlICsgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyANCiAgICBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zICxzdWJzZXRfZGYpDQogcHJpbnQoc3VtbWFyeShtKSkNCmBgYA0KDQpgYGB7cn0NCiAgc3Vic2V0X2RmIDwtIHN1YnNldChkZiwgbm9tX3RpcG91c2luYSA9PSAiRk9UT1ZPTFRBSUNBIikgJT4lIGRyb3BfbmEoKQ0KI3N1bW1hcnkoc3Vic2V0X2RmKQ0KIG08LWxtKHZhbF9nZXJhY2FvIH4gRGF0ZSArIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgDQogICAgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMyAsc3Vic2V0X2RmKQ0KIHByaW50KHN1bW1hcnkobSkpDQpgYGANCg0KYGBge3J9DQoNCg0KICBzdWJzZXRfZGYgPC0gc3Vic2V0KGRmLCBub21fdGlwb3VzaW5hID09ICJFT0xJRUzDiVRSSUNBIikNCiNzdW1tYXJ5KHN1YnNldF9kZikNCiBtPC1sbSh2YWxfZ2VyYWNhbyB+IERhdGUgKyBwcmVjaXB0YXRpb24gKyB0ZW1wZXJhdHVyZSArIA0KICAgIGh1bWlkaXR5ICsgd2luZF9zcGVlZCArIGNvX3BwYiArIG5vMl9wcGIgKyBvM19wcGIgKyBwbTI1X3VnbTMgKyANCiAgICBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gLHN1YnNldF9kZikNCiBwcmludChzdW1tYXJ5KG0pKQ0KYGBgDQoNCiMgbW9kZWxvIGRlIHBlbmFsaWRhZGUNCg0KYGBge3J9DQojIEFqdXN0YXIgdW0gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gbGluZWFyIHNpbXBsZXMNCmRmICU+JSAgZHJvcF9uYSgpIC0+c3Vic2V0X2RmDQptPC1sbSh2YWxfZ2VyYWNhb34gRGF0ZSArICBwcmVjaXB0YXRpb24gKyB0ZW1wZXJhdHVyZSArIGh1bWlkaXR5ICsgd2luZF9zcGVlZCArIGNvX3BwYiArIG5vMl9wcGIgKyBvM19wcGIgKyBwbTI1X3VnbTMrY29kX21vZGFsaWRhZGVvcGVyYWNhbyArIG5vbV9zdWJzaXN0ZW1hICsgbm9tX2VzdGFkbyArIG5vbV90aXBvdXNpbmEgKyBub21fdGlwb2NvbWJ1c3RpdmVsICxzdWJzZXRfZGYpDQpzdW1tYXJ5KG0pDQojKG1vZGVsb19uYW9fcGVuYWxpemFkbykNCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShnbG1uZXQpDQoNCmBgYA0KDQpgYGB7cn0NCiMgQWp1c3RhciB1bSBtb2RlbG8gZGUgcmVncmVzc8OjbyByaWRnZSAoYWxwaGEgPSAwKSBvdSBsYXNzbyAoYWxwaGEgPSAxKSBjb20gZ2xtbmV0DQojeDwtc3Vic2V0X2RmICU+JSBzZWxlY3QoLERhdGUgLCAgcHJlY2lwdGF0aW9uICwgdGVtcGVyYXR1cmUgLCBodW1pZGl0eSAsIHdpbmRfc3BlZWQgLCBjb19wcGIgLCBubzJfcHBiICwgbzNfcHBiICwgcG0yNV91Z20zLGNvZF9tb2RhbGlkYWRlb3BlcmFjYW8gLCBub21fc3Vic2lzdGVtYSAsIG5vbV9lc3RhZG8gLCBub21fdGlwb3VzaW5hICwgbm9tX3RpcG9jb21idXN0aXZlbCkgJT4lIGFzLm1hdHJpeCgpDQoNCm1vZGVsb19wZW5hbGl6YWRvIDwtIGdsbW5ldCh4LCBzdWJzZXRfZGYkdmFsX2dlcmFjYW8sIGFscGhhID0gMCkNCiMgQ29lZmljaWVudGVzIGRvIG1vZGVsbyBuw6NvIHBlbmFsaXphZG8gKFJlZ3Jlc3PDo28gTGluZWFyKQ0KY29lZmljaWVudGVzX25hb19wZW5hbGl6YWRvcyA8LSBjb2VmKG4pDQoNCiMgQ29lZmljaWVudGVzIGRvIG1vZGVsbyBwZW5hbGl6YWRvIChSZWdyZXNzw6NvIFJpZGdlIG91IExhc3NvKQ0KY29lZmljaWVudGVzX3BlbmFsaXphZG9zIDwtIGNvZWYobW9kZWxvX3BlbmFsaXphZG8pDQpwcmludChjb2VmaWNpZW50ZXNfcGVuYWxpemFkb3MpDQpgYGANCg0KYGBge3J9DQojUENBDQojIFN1cG9uZG8gcXVlIHZvY8OqIHRlbmhhIHVtIGNvbmp1bnRvIGRlIGRhZG9zIEFtYl9PcmMNCg0KIyBTZWxlY2lvbmFyIGFwZW5hcyBhcyB2YXJpw6F2ZWlzIG51bcOpcmljYXMgcmVsZXZhbnRlcyBwYXJhIG8gUENBDQpkYXRhX2Zvcl9wY2EgPC0gZGZbLDc6MTZdICU+JSBuYS5vbWl0KCkNCg0KDQojIE5vcm1hbGl6YXIgb3MgZGFkb3MgKHNlIG5lY2Vzc8OhcmlvKQ0Kbm9ybWFsaXplZF9kYXRhIDwtIHNjYWxlKGRhdGFfZm9yX3BjYSkNCiMgUmVtb3ZlciBsaW5oYXMgY29tIHZhbG9yZXMgaW5maW5pdG9zDQpub3JtYWxpemVkX2RhdGEgPC0gbm9ybWFsaXplZF9kYXRhW2lzLmZpbml0ZShyb3dTdW1zKG5vcm1hbGl6ZWRfZGF0YSkpLCBdDQoNCiMgUmVhbGl6YXIgbyBQQ0ENCiNwY2FfcmVzdWx0IDwtIHByY29tcChub3JtYWxpemVkX2RhdGEsIHNjYWxlLiA9IFRSVUUsY2VudGVyID0gVCkNCg0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShmYWN0b2V4dHJhKQ0KbGlicmFyeShGYWN0b01pbmVSKQ0KDQpgYGANCg0KYGBge3J9DQpwY2FfcmVzdWx0MjwtUENBKG5vcm1hbGl6ZWRfZGF0YSkNCg0KYGBgDQoNCmBgYHtyfQ0KcGNhX3Jlc3VsdDIkZWlnDQpwY2FfcmVzdWx0MiRjYWxsJGNlbnRyZQ0Kb3B0aW9ucyhzY2lwZW4gPSA5KQ0KcGNhX3Jlc3VsdDIkdmFyJGNvbnRyaWINCmBgYA0K