Licença

This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

License: CC BY-SA 4.0

Citação

Sugestão de citação: FIGUEIREDO, Adriano Marcos Rodrigues. Séries Temporais: exercício Efeitos da Isenção de Impostos nas Taxas de Fertilidade. Campo Grande-MS,Brasil: RStudio/Rpubs, 2023. Disponível em http://www.rpubs.com/amrofi/ex_wooldridge_10_4_time_series.

1 Introdução

Faremos um exemplo para o Modelo de defasagens distribuídas finitas (DDF) (Finite distributed lag - FDL) = modelo dinâmico. Neste caso precisaremos usar o pacote dynlm invés do lm no R, para considerar adequadamente as variáveis defasadas no tempo. Utilizaremos o operador defasagem (lag no R base ou L no dynlm). Veja também o código em HEISS (2016 ,p.173-174 – cap.10.3 – Example-10-4.R).

Os primeiros passos são criar ou abrir um diretório de trabalho. Se optar por criar um novo projeto, haverá a possibilidade de criar em uma pasta vazia. Os dados básicos estão no pacote wooldridge, dataset fertil3.

Example 10.4 Effects of Personal exemption on fertility rates. The general fertility rate (gfr) is the number of children born to every 1,000 women of childbearing age. For the years 1913 through 1984, the equation, \[ gfr_t= \beta _0 + \beta _1 pe_t +\beta _2 ww2_t + \beta _3 pill_t + \mu _t ,\] explains gfr in terms of the average real dollar value of the personal tax exemption (pe) and two binary variables. The variable ww2 takes on the value unity during the years 1941 through 1945, when the United States was involved in World War II. The variable pill is unity from 1963 onward, when the birth control pill was made available for contraception. Using the data in FERTIL3, which were taken from the article by Whittington, Alm, and Peters (1990).


# exemplo 10.4 do livro do Wooldridge, Introdução a Econometria - 4ed, p.332-333
# dados basicos de: 
# Wooldridge Source: L.A. Whittington, J. Alm, and H.E. Peters (1990), 
# “Fertility and the Personal Exemption: Implicit Pronatalist Policy in
# the United States,” American Economic Review 80, 545-556.

# data.frame with 72 observations on 24 variables:
  
# gfr: births per 1000 women 15-44 
#      [tgf = taxa geral de fertilidade]
# pe: real value pers. exemption, $ 
#      [ip = valor real da taxa de isenção de impostos]
# year: 1913 to 1984   [ano]
# t: time trend, t=1,...,72   [tendencia]
# tsq: t^2    [tendencia ao quadrado]
# pill: =1 if year >= 1963    
#      [pilula anticoncepcional]
# ww2: =1, 1941 to 1945  [world war dummy]
# tcu: t^3    [tendencia cubica]
# cgfr: change in gfr: gfr - gfr_1    
#      [mudanca na tx de fertilidade]

2 Exemplo do modelo de defasagens distribuídas defasadas

Seja o exemplo 10.4 de Wooldridge (2017, p.395), para analisar os Efeitos da dedução de impostos nas taxas de fertilidade.

A taxa geral de fertilidade (sigla do inglês general fertility rate - gfr) é o número de crianças nascidas para cada 1.000 mulheres em idade fértil (15-44 anos) e pe é uma dedução de impostos pessoais (valor real em dólares).

Para os anos de 1913 a 1984, deseja-se investigar se a redução de impostos está relacionada com a maior taxa de fertilidade. As variáveis ww2 e pill são dummies binárias para 1 quando for, respectivamente, o período da Segunda Guerra Mundial (1941 to 1945) e o período após descoberta da pílula anticoncepcional, após 1963.

O dataset básico chamado fertil3 pode ser obtido no pacote wooldridge e contempla mais variáveis, mas no presente caso utilizaremos apenas gfr=f(pe,ww2,pill). O dataset já contempla as variáveis pe_{t-1} e pe_{t-2}, de nome pe_1 e pe_2. O leitor poderá verificar que a pe_1 está exatamente hum período atrasado de pe, e a pe_2 consequentemente dois períodos atrasados de pe:

library(dynlm)
library(stargazer)
data(fertil3, package = "wooldridge")
print(head(fertil3[1:10, c(1:3, 6:7)], n = 10L))
     gfr    pe year  pe_1  pe_2
1  124.7  0.00 1913    NA    NA
2  126.6  0.00 1914  0.00    NA
3  125.0  0.00 1915  0.00  0.00
4  123.4  0.00 1916  0.00  0.00
5  121.0 19.27 1917  0.00  0.00
6  119.8 23.94 1918 19.27  0.00
7  111.2 20.07 1919 23.94 19.27
8  117.9 15.33 1920 20.07 23.94
9  119.8 34.32 1921 15.33 20.07
10 111.2 36.65 1922 34.32 15.33

As mesmas séries podem ser obtidas pelo operador lag do pacote stats. Em uma regressão, a defasagem pode ser obtida pelo operador \(L\) do pacote dynlm, dentro da regressão. Comparemos para os primeiros 10 anos do dataset:

# Definir time series anual iniciando em 1913 até 1922
attach(fertil3)
fertil3.ts <- ts(fertil3[, 1:3], start = 1913)

Observe que pe começa a ser não nulo em 1917 e o valor de 1917 (igual a 19.27) aparecerá na linha de 1918 para pe1 e na linha de 1919 para pe2. Ou seja, quando t for 1919, pe em t-2 será igual a pe de 1917.

# fertil3.ts[,2] é a coluna de pe no objeto fertil3.ts
pe1 <- lag(fertil3.ts[, 2], -1)
pe2 <- lag(fertil3.ts[, 2], -2)
tabela <- cbind(fertil3.ts, pe1, pe2)
knitr::kable(tabela, caption = "Dados do objeto fertil3.ts")
Dados do objeto fertil3.ts
fertil3.ts.gfr fertil3.ts.pe fertil3.ts.year pe1 pe2
124.7 0.00 1913 NA NA
126.6 0.00 1914 0.00 NA
125.0 0.00 1915 0.00 0.00
123.4 0.00 1916 0.00 0.00
121.0 19.27 1917 0.00 0.00
119.8 23.94 1918 19.27 0.00
111.2 20.07 1919 23.94 19.27
117.9 15.33 1920 20.07 23.94
119.8 34.32 1921 15.33 20.07
111.2 36.65 1922 34.32 15.33
NA NA NA 36.65 34.32
NA NA NA NA 36.65

Portanto, matematicamente deseja-se estimar a expressão:

\[\begin{equation} gfr_t= \alpha _0 + \beta _0 pe_t +\beta _1 pe_{t-1} + \beta _2 pe_{t-2} + \beta _3 ww2_{t} + \beta _4 pill_{t} + \mu _t \end{equation}\]

O gráfico da variável dependente gfr (tgr - taxa geral de fertilidade) é:

forecast::autoplot(fertil3.ts[, 1], ylab = "Nascimentos por 1000 mulheres", xlab = "Ano")

Ou pelo ggplot2:

library(ggplot2)

ggplot(fertil3) + aes(x = year, y = gfr) + geom_line(size = 1L, colour = "#0c4c8a") +
    labs(x = "Ano", y = "Nascimentos por mil mulheres", title = "Gráfico da variável dependente gfr",
        subtitle = "tgr - taxa geral de fertilidade", caption = "Fonte: Elaboração própria") +
    ggthemes::theme_economist_white()

A regressão dinâmica então será

# Regressao Linear :
library(dynlm)
library(lmtest)
library(car)
library(stargazer)
reg1 <- dynlm(gfr ~ pe + L(pe) + L(pe, 2) + ww2 + pill, data = fertil3.ts)
summary(reg1)

Time series regression with "ts" data:
Start = 1915, End = 1984

Call:
dynlm(formula = gfr ~ pe + L(pe) + L(pe, 2) + ww2 + pill, data = fertil3.ts)

Residuals:
     Min       1Q   Median       3Q      Max 
-24.6461  -9.5409  -0.0312   8.3378  29.1295 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  95.87050    3.28196  29.211  < 2e-16 ***
pe            0.07267    0.12553   0.579   0.5647    
L(pe)        -0.00578    0.15566  -0.037   0.9705    
L(pe, 2)      0.03383    0.12626   0.268   0.7896    
ww2         -22.12650   10.73197  -2.062   0.0433 *  
pill        -31.30499    3.98156  -7.862 5.63e-11 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 14.27 on 64 degrees of freedom
Multiple R-squared:  0.4986,    Adjusted R-squared:  0.4594 
F-statistic: 12.73 on 5 and 64 DF,  p-value: 1.353e-08
reg1$AIC <- AIC(reg1)  # Akaike
reg1$BIC <- BIC(reg1)  # Schwarz
stargazer(reg1, title = "Título: Resultado da Regressão OLS", align = TRUE, type = "text",
    style = "all", keep.stat = c("AIC", "BIC", "rsq", "adj.rsq", "n"))

Título: Resultado da Regressão OLS
===============================================
                        Dependent variable:    
                    ---------------------------
                                gfr            
-----------------------------------------------
pe                             0.073           
                              (0.126)          
                             t = 0.579         
                             p = 0.565         
L(pe)                         -0.006           
                              (0.156)          
                            t = -0.037         
                             p = 0.971         
L(pe, 2)                       0.034           
                              (0.126)          
                             t = 0.268         
                             p = 0.790         
ww2                          -22.126**         
                             (10.732)          
                            t = -2.062         
                             p = 0.044         
pill                        -31.305***         
                              (3.982)          
                            t = -7.862         
                             p = 0.000         
Constant                     95.870***         
                              (3.282)          
                            t = 29.211         
                             p = 0.000         
-----------------------------------------------
Observations                    70             
R2                             0.499           
Adjusted R2                    0.459           
Akaike Inf. Crit.             578.522          
Bayesian Inf. Crit.           594.261          
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01

A análise da significância dos coeficientes revela não significância dos termos de pe e suas defasagens (lags) em t-1 e t-2. É possível testar a não significância conjunta da variável pe (contemporânea e suas defasagens) fazendo uso de um teste tipo F para \(H_0: \beta _0 = \beta _1 = \beta _2 = 0\).

library(car)
car::linearHypothesis(reg1, matchCoefs(reg1, "pe"))

O valor de F = 3.973 e probabilidade de F (Pr(>F) = 0.01165) indica que se deve rejeitar a hipótese nula, e algum dos termos de pe é estatisticamente diferente de zero. Conforme Wooldridge (2017, p.395), efetivamente temos que os termos defasados são conjuntamente não-significativos com Pr(>F) = 0.948. Podemos conferir fazendo

library(car)
myH0 <- c("L(pe)", "L(pe, 2)")
car::linearHypothesis(reg1, myH0)

Ou seja, o melhor seria um modelo estático. Para fins ilustrativos, Wooldridge (2017, p.396) faz o cômputo do intervalo de confiança da propensão em longo prazo (PLP) do modelo, que indica o efeito cumulativo da mudança da variável independente sobre a dependente, e que será a soma dos coeficientes estimados dos períodos t e defasagens. Conforme Heiss (2016, p. 175), podemos obter o resultado diretamente dos coeficientes estimados pelo dynlm e refazer o teste linearHypothesis para avaliar se é estatisticamente diferente de zero. Assim, tem-se:

library(car)
# Cálculo da propensão em longo prazo (PLP) para o modelo DDF
b <- coef(reg1)
PLP = b["pe"] + b["L(pe)"] + b["L(pe, 2)"]
print(PLP)
       pe 
0.1007191 
myH0plp <- "pe+L(pe)+L(pe, 2)"
car::linearHypothesis(reg1, myH0plp)

Portanto, pode-se afirmar que a PLP é igual a 0.1007, significativa a 0.1% de significância. Conforme sugestão de Wooldridge (2017,p.396), podemos obter esta PLP e o desvio-padrão fazendo uma regressão alternativa (o leitor pode olhar a dedução no autor citado) e estimando a expressão de \(gfr_t\) em função de \(pe_t\), \((pe_{t-1}-pe_t)\), \((pe_{t-2}-pe_t)\), \(ww2_t\) e \(pill_t\).

Portanto,

\[\begin{equation} gfr_t = \alpha_0 + (\Theta_0-\delta_1-\delta_2)pe_t + \delta_1 (pe_{t-1}-pe_t)+ \delta_2 (pe_{t-2}-pe_t) + \delta_3 ww2_t + \delta_4 pill_t + \mu_t \end{equation}\]

reg2 <- dynlm(gfr ~ pe + I(L(pe) - pe) + I(L(pe, 2) - pe) + ww2 + pill, data = fertil3.ts)
summary(reg2)
Time series regression with "ts" data:
Start = 1915, End = 1984

Call:
dynlm(formula = gfr ~ pe + I(L(pe) - pe) + I(L(pe, 2) - pe) + 
    ww2 + pill, data = fertil3.ts)

Residuals:
     Min       1Q   Median       3Q      Max 
-24.6461  -9.5409  -0.0312   8.3378  29.1295 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)       95.87050    3.28196  29.211  < 2e-16 ***
pe                 0.10072    0.02980   3.380  0.00124 ** 
I(L(pe) - pe)     -0.00578    0.15566  -0.037  0.97050    
I(L(pe, 2) - pe)   0.03383    0.12626   0.268  0.78962    
ww2              -22.12650   10.73197  -2.062  0.04330 *  
pill             -31.30499    3.98156  -7.862 5.63e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 14.27 on 64 degrees of freedom
Multiple R-squared:  0.4986,    Adjusted R-squared:  0.4594 
F-statistic: 12.73 on 5 and 64 DF,  p-value: 1.353e-08

Ou seja, obtivemos o coeficiente da PLP = 0.1007, que será o coeficiente de pe na regressão alterada e o desvio-padrão estimado de 0.0298, cujo teste t indica pela significância a 0.1% (probabilidade Pr(>|t|) =0.00124), que foi exatamente o valor da probabilidade do teste F do chunk da PLP, anterior à regressão reg2. O intervalo de confiança desta estimativa será entre 0.041 e 0.160.

confint(reg2, "pe")
        2.5 %    97.5 %
pe 0.04118141 0.1602568

3 Referências

WOOLDRIDGE, J. Introdução à Econometria. São Paulo, SP : Cengage Learning, 2017. (ou 2006-2010, cap10)
HEISS, Florian. Using R for introductory econometrics. Dusseldorf, Florian Heiss, 2016. Disponível em: http://www.urfie.net/. Acesso em 24.02.2020.

HYNDMAN, Rob J.; ATHANASOPOULOS, George. Forecasting: principles and practice. 2nd Ed. OTexts: Melbourne, Australia. 2018. Disponível em: https://www.otexts.org/fpp2/. Acesso em 24.02.2020.

HYNDMAN, Rob J.; ATHANASOPOULOS, George. Forecasting: principles and practice. 3rd Ed. OTexts: Melbourne, Australia, 2021. Disponível em: https://otexts.com/fpp3/ Acesso em 25.03.2021.

SHEA J. wooldridge: 115 Data Sets from “Introductory Econometrics: A Modern Approach, 7e” by Jeffrey M. Wooldridge. R package version 1.4-2, 2021. https://CRAN.R-project.org/package=wooldridge.

LS0tDQp0aXRsZTogJ1PDqXJpZXMgVGVtcG9yYWlzOiBleGVyY8OtY2lvIEVmZWl0b3MgZGEgSXNlbsOnw6NvIGRlIEltcG9zdG9zIG5hcyBUYXhhcyBkZSBGZXJ0aWxpZGFkZScNCmF1dGhvcjogIkFkcmlhbm8gTWFyY29zIFJvZHJpZ3VlcyBGaWd1ZWlyZWRvIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJWQgJUIgJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IGRlZmF1bHQNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiBubw0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQplLW1haWw6IGFkcmlhbm8uZmlndWVpcmVkb0B1Zm1zLmJyDQphYnN0cmFjdDogV2UgYW5hbHlzZSBzcGVjaWZpY2F0aW9ucyBvZiBsYWdnZWQgdmFyaWFibGVzIHRvIHRoZSBXb29sZHJpZGdlJ3MgZXhhbXBsZXMNCiAgMTAuNC4gVGhpcyBpcyBhbiBleGVyY2lzZSB1c2luZyB0aGUgZHlubG0gcGFja2FnZS4NCi0tLQ0KYGBge3Iga25pdHJfaW5pdCwgZWNobz1GQUxTRSwgY2FjaGU9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShybWFya2Rvd24pDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iMTAwIikNCm9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9MTAwKQ0KYGBgDQoNCg0KTGljZW7Dp2Egey0jTGljZW7Dp2F9DQo9PT09PT09PT09PT09PT09PT09DQoNClRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIFRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSwgdmlzaXQgPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8+IG9yIHNlbmQgYSBsZXR0ZXIgdG8gQ3JlYXRpdmUgQ29tbW9ucywgUE8gQm94IDE4NjYsIE1vdW50YWluIFZpZXcsIENBIDk0MDQyLCBVU0EuDQoNCiFbTGljZW5zZTogQ0MgQlktU0EgNC4wXShodHRwczovL21pcnJvcnMuY3JlYXRpdmVjb21tb25zLm9yZy9wcmVzc2tpdC9idXR0b25zLzg4eDMxL3BuZy9ieS1zYS5wbmcpeyB3aWR0aD0yNSUgfQ0KDQpDaXRhw6fDo28gey0jQ2l0YcOnw6NvfQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KU3VnZXN0w6NvIGRlIGNpdGHDp8OjbzoNCkZJR1VFSVJFRE8sIEFkcmlhbm8gTWFyY29zIFJvZHJpZ3Vlcy4gU8OpcmllcyBUZW1wb3JhaXM6IGV4ZXJjw61jaW8gRWZlaXRvcyBkYSBJc2Vuw6fDo28gZGUgSW1wb3N0b3MgbmFzIFRheGFzIGRlIEZlcnRpbGlkYWRlLiBDYW1wbyBHcmFuZGUtTVMsQnJhc2lsOiBSU3R1ZGlvL1JwdWJzLCAyMDIzLiBEaXNwb27DrXZlbCBlbSA8aHR0cDovL3d3dy5ycHVicy5jb20vYW1yb2ZpL2V4X3dvb2xkcmlkZ2VfMTBfNF90aW1lX3Nlcmllcz4uIA0KDQoNCkludHJvZHXDp8Ojbw0KPT09PT09PT09PT09PT09PT09PQ0KDQpGYXJlbW9zIHVtIGV4ZW1wbG8gcGFyYSBvIE1vZGVsbyBkZSBkZWZhc2FnZW5zIGRpc3RyaWJ1w61kYXMgZmluaXRhcyAoRERGKSAoRmluaXRlIGRpc3RyaWJ1dGVkIGxhZyAtIEZETCkgPSBtb2RlbG8gZGluw6JtaWNvLiBOZXN0ZSBjYXNvIHByZWNpc2FyZW1vcyB1c2FyIG8gcGFjb3RlIGR5bmxtIGludsOpcyBkbyBsbSBubyBSLCBwYXJhIGNvbnNpZGVyYXIgYWRlcXVhZGFtZW50ZSBhcyB2YXJpw6F2ZWlzIGRlZmFzYWRhcyBubyB0ZW1wby4gVXRpbGl6YXJlbW9zIG8gb3BlcmFkb3IgZGVmYXNhZ2VtIChsYWcgbm8gUiBiYXNlIG91IEwgbm8gZHlubG0pLiBWZWphIHRhbWLDqW0gbyBjw7NkaWdvIGVtIEhFSVNTICgyMDE2ICxwLjE3My0xNzQg4oCTIGNhcC4xMC4zIOKAkyBFeGFtcGxlLTEwLTQuUikuDQoNCg0KDQpPcyBwcmltZWlyb3MgcGFzc29zIHPDo28gY3JpYXIgb3UgYWJyaXIgdW0gZGlyZXTDs3JpbyBkZSB0cmFiYWxoby4gU2Ugb3B0YXIgcG9yIGNyaWFyIHVtIG5vdm8gcHJvamV0bywgaGF2ZXLDoSBhIHBvc3NpYmlsaWRhZGUgZGUgY3JpYXIgZW0gdW1hIHBhc3RhIHZhemlhLiBPcyBkYWRvcyBiw6FzaWNvcyBlc3TDo28gbm8gcGFjb3RlIGB3b29sZHJpZGdlYCwgZGF0YXNldCBgZmVydGlsM2AuDQoNCj4gRXhhbXBsZSAxMC40ICBFZmZlY3RzIG9mIFBlcnNvbmFsIGV4ZW1wdGlvbiBvbiBmZXJ0aWxpdHkgcmF0ZXMuIFRoZSBnZW5lcmFsIGZlcnRpbGl0eSByYXRlIChnZnIpIGlzIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gYm9ybiB0byBldmVyeSAxLDAwMCB3b21lbiBvZiBjaGlsZGJlYXJpbmcgYWdlLiBGb3IgdGhlIHllYXJzIDE5MTMgdGhyb3VnaCAxOTg0LCB0aGUgZXF1YXRpb24sDQokJCBnZnJfdD0gXGJldGEgXzAgKyBcYmV0YSBfMSBwZV90ICtcYmV0YSBfMiB3dzJfdCArIFxiZXRhIF8zIHBpbGxfdCArIFxtdSBfdCAsJCQNCmV4cGxhaW5zIGdmciBpbiB0ZXJtcyBvZiB0aGUgYXZlcmFnZSByZWFsIGRvbGxhciB2YWx1ZSBvZiB0aGUgcGVyc29uYWwgdGF4IGV4ZW1wdGlvbiAocGUpIGFuZCB0d28gYmluYXJ5IHZhcmlhYmxlcy4gVGhlIHZhcmlhYmxlIHd3MiB0YWtlcyBvbiB0aGUgdmFsdWUgdW5pdHkgZHVyaW5nIHRoZSB5ZWFycyAxOTQxIHRocm91Z2ggMTk0NSwgd2hlbiB0aGUgVW5pdGVkIFN0YXRlcyB3YXMgaW52b2x2ZWQgaW4gV29ybGQgV2FyIElJLiBUaGUgdmFyaWFibGUgcGlsbCBpcyB1bml0eSBmcm9tIDE5NjMgb253YXJkLCB3aGVuIHRoZSBiaXJ0aCBjb250cm9sIHBpbGwgd2FzIG1hZGUgYXZhaWxhYmxlIGZvciBjb250cmFjZXB0aW9uLiBVc2luZyB0aGUgZGF0YSBpbiBGRVJUSUwzLCB3aGljaCB3ZXJlIHRha2VuIGZyb20gdGhlIGFydGljbGUgYnkgV2hpdHRpbmd0b24sIEFsbSwgYW5kIFBldGVycyAoMTk5MCkuDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQojIGluY2x1ZGUgdGhpcyBjb2RlIGNodW5rIGFzLWlzIHRvIHNldCBvcHRpb25zDQprbml0cjo6b3B0c19jaHVuayRzZXQoY29tbWVudD1OQSwgcHJvbXB0PVRSVUUsIG91dC53aWR0aD03NTAsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTgpDQpgYGANCg0KYGBgDQoNCiMgZXhlbXBsbyAxMC40IGRvIGxpdnJvIGRvIFdvb2xkcmlkZ2UsIEludHJvZHXDp8OjbyBhIEVjb25vbWV0cmlhIC0gNGVkLCBwLjMzMi0zMzMNCiMgZGFkb3MgYmFzaWNvcyBkZTogDQojIFdvb2xkcmlkZ2UgU291cmNlOiBMLkEuIFdoaXR0aW5ndG9uLCBKLiBBbG0sIGFuZCBILkUuIFBldGVycyAoMTk5MCksIA0KIyDigJxGZXJ0aWxpdHkgYW5kIHRoZSBQZXJzb25hbCBFeGVtcHRpb246IEltcGxpY2l0IFByb25hdGFsaXN0IFBvbGljeSBpbg0KIyB0aGUgVW5pdGVkIFN0YXRlcyzigJ0gQW1lcmljYW4gRWNvbm9taWMgUmV2aWV3IDgwLCA1NDUtNTU2Lg0KDQojIGRhdGEuZnJhbWUgd2l0aCA3MiBvYnNlcnZhdGlvbnMgb24gMjQgdmFyaWFibGVzOg0KICANCiMgZ2ZyOiBiaXJ0aHMgcGVyIDEwMDAgd29tZW4gMTUtNDQgDQojICAgICAgW3RnZiA9IHRheGEgZ2VyYWwgZGUgZmVydGlsaWRhZGVdDQojIHBlOiByZWFsIHZhbHVlIHBlcnMuIGV4ZW1wdGlvbiwgJCANCiMgICAgICBbaXAgPSB2YWxvciByZWFsIGRhIHRheGEgZGUgaXNlbsOnw6NvIGRlIGltcG9zdG9zXQ0KIyB5ZWFyOiAxOTEzIHRvIDE5ODQgICBbYW5vXQ0KIyB0OiB0aW1lIHRyZW5kLCB0PTEsLi4uLDcyICAgW3RlbmRlbmNpYV0NCiMgdHNxOiB0XjIgICAgW3RlbmRlbmNpYSBhbyBxdWFkcmFkb10NCiMgcGlsbDogPTEgaWYgeWVhciA+PSAxOTYzICAgIA0KIyAgICAgIFtwaWx1bGEgYW50aWNvbmNlcGNpb25hbF0NCiMgd3cyOiA9MSwgMTk0MSB0byAxOTQ1ICBbd29ybGQgd2FyIGR1bW15XQ0KIyB0Y3U6IHReMyAgICBbdGVuZGVuY2lhIGN1YmljYV0NCiMgY2dmcjogY2hhbmdlIGluIGdmcjogZ2ZyIC0gZ2ZyXzEgICAgDQojICAgICAgW211ZGFuY2EgbmEgdHggZGUgZmVydGlsaWRhZGVdDQoNCmBgYA0KDQojIEV4ZW1wbG8gZG8gbW9kZWxvIGRlIGRlZmFzYWdlbnMgZGlzdHJpYnXDrWRhcyBkZWZhc2FkYXMNCg0KU2VqYSBvIGV4ZW1wbG8gMTAuNCBkZSBXb29sZHJpZGdlICgyMDE3LCBwLjM5NSksIHBhcmEgYW5hbGlzYXIgb3MgX0VmZWl0b3MgZGEgZGVkdcOnw6NvIGRlIGltcG9zdG9zIG5hcyB0YXhhcyBkZSBmZXJ0aWxpZGFkZV8uICAgIA0KIA0KQSB0YXhhIGdlcmFsIGRlIGZlcnRpbGlkYWRlIChzaWdsYSBkbyBpbmdsw6pzIF9nZW5lcmFsIGZlcnRpbGl0eSByYXRlIC0gYGdmcmBfKSDDqSBvIG7Dum1lcm8gZGUgY3JpYW7Dp2FzIG5hc2NpZGFzIHBhcmEgY2FkYSAxLjAwMCBtdWxoZXJlcyBlbSBpZGFkZSBmw6lydGlsICgxNS00NCBhbm9zKSBlIGBwZWAgw6kgdW1hIGRlZHXDp8OjbyBkZSBpbXBvc3RvcyBwZXNzb2FpcyAodmFsb3IgcmVhbCBlbSBkw7NsYXJlcykuICAgICANCg0KUGFyYSBvcyBhbm9zIGRlIDE5MTMgYSAxOTg0LCBkZXNlamEtc2UgaW52ZXN0aWdhciBzZSBhIHJlZHXDp8OjbyBkZSBpbXBvc3RvcyBlc3TDoSByZWxhY2lvbmFkYSBjb20gYSBtYWlvciB0YXhhIGRlIGZlcnRpbGlkYWRlLiBBcyB2YXJpw6F2ZWlzIGB3dzJgIGUgYHBpbGxgIHPDo28gZHVtbWllcyBiaW7DoXJpYXMgcGFyYSAxIHF1YW5kbyBmb3IsIHJlc3BlY3RpdmFtZW50ZSwgbyBwZXLDrW9kbyBkYSBTZWd1bmRhIEd1ZXJyYSBNdW5kaWFsICgxOTQxIHRvIDE5NDUpIGUgbyBwZXLDrW9kbyBhcMOzcyBkZXNjb2JlcnRhIGRhIHDDrWx1bGEgYW50aWNvbmNlcGNpb25hbCwgYXDDs3MgMTk2My4gICAgDQogDQpPIGRhdGFzZXQgYsOhc2ljbyBjaGFtYWRvIGBmZXJ0aWwzYCBwb2RlIHNlciBvYnRpZG8gbm8gcGFjb3RlIGB3b29sZHJpZGdlYCBlIGNvbnRlbXBsYSBtYWlzIHZhcmnDoXZlaXMsICBtYXMgbm8gcHJlc2VudGUgY2FzbyB1dGlsaXphcmVtb3MgYXBlbmFzIGBnZnI9ZihwZSx3dzIscGlsbClgLiBPIGRhdGFzZXQgasOhIGNvbnRlbXBsYSBhcyB2YXJpw6F2ZWlzIGBwZV97dC0xfWAgZSBgcGVfe3QtMn1gLCBkZSBub21lIGBwZV8xYCBlIGBwZV8yYC4gTyBsZWl0b3IgcG9kZXLDoSB2ZXJpZmljYXIgcXVlIGEgYHBlXzFgIGVzdMOhIGV4YXRhbWVudGUgaHVtIHBlcsOtb2RvIGF0cmFzYWRvIGRlIGBwZWAsIGUgYSBgcGVfMmAgY29uc2VxdWVudGVtZW50ZSBkb2lzIHBlcsOtb2RvcyBhdHJhc2Fkb3MgZGUgcGU6DQogDQpgYGB7cn0NCmxpYnJhcnkoZHlubG0pO2xpYnJhcnkoc3RhcmdhemVyKQ0KZGF0YShmZXJ0aWwzLCBwYWNrYWdlPSd3b29sZHJpZGdlJykNCnByaW50KGhlYWQoZmVydGlsM1sxOjEwLGMoMTozLDY6NyldLG49MTBMKSkNCmBgYA0KQXMgbWVzbWFzIHPDqXJpZXMgcG9kZW0gc2VyIG9idGlkYXMgcGVsbyBvcGVyYWRvciBgbGFnYCBkbyBwYWNvdGUgYHN0YXRzYC4gRW0gdW1hIHJlZ3Jlc3PDo28sIGEgZGVmYXNhZ2VtIHBvZGUgc2VyIG9idGlkYSBwZWxvIG9wZXJhZG9yICRMJCBkbyBwYWNvdGUgYGR5bmxtYCwgZGVudHJvIGRhIHJlZ3Jlc3PDo28uIENvbXBhcmVtb3MgcGFyYSBvcyBwcmltZWlyb3MgMTAgYW5vcyBkbyBkYXRhc2V0Og0KDQpgYGB7ciwgZXZhbD1UUlVFLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCiMgRGVmaW5pciB0aW1lIHNlcmllcyBhbnVhbCBpbmljaWFuZG8gZW0gMTkxMyBhdMOpIDE5MjINCmF0dGFjaChmZXJ0aWwzKQ0KZmVydGlsMy50cyA8LSB0cyhmZXJ0aWwzWywxOjNdLCBzdGFydD0xOTEzKQ0KYGBgDQoNCk9ic2VydmUgcXVlIHBlIGNvbWXDp2EgYSBzZXIgbsOjbyBudWxvIGVtIDE5MTcgZSBvIHZhbG9yIGRlIDE5MTcgKGlndWFsIGEgMTkuMjcpIGFwYXJlY2Vyw6EgbmEgbGluaGEgZGUgMTkxOCBwYXJhICpwZTEqIGUgbmEgbGluaGEgZGUgMTkxOSBwYXJhICpwZTIqLiBPdSBzZWphLCBxdWFuZG8gdCBmb3IgMTkxOSwgKnBlKiBlbSB0LTIgc2Vyw6EgaWd1YWwgYSAqcGUqIGRlIDE5MTcuICAgIA0KDQpgYGB7ciwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9DQojIGZlcnRpbDMudHNbLDJdIMOpIGEgY29sdW5hIGRlIHBlIG5vIG9iamV0byBmZXJ0aWwzLnRzDQpwZTE8LWxhZyhmZXJ0aWwzLnRzWywyXSwgLTEpDQpwZTI8LWxhZyhmZXJ0aWwzLnRzWywyXSwgLTIpDQp0YWJlbGE8LWNiaW5kKGZlcnRpbDMudHMscGUxLHBlMikNCmtuaXRyOjprYWJsZSh0YWJlbGEsY2FwdGlvbj0iRGFkb3MgZG8gb2JqZXRvIGZlcnRpbDMudHMiKQ0KYGBgDQogICANClBvcnRhbnRvLCBtYXRlbWF0aWNhbWVudGUgZGVzZWphLXNlIGVzdGltYXIgYSBleHByZXNzw6NvOiAgICANCg0KXGJlZ2lue2VxdWF0aW9ufQ0KZ2ZyX3Q9IFxhbHBoYSBfMCArIFxiZXRhIF8wIHBlX3QgK1xiZXRhIF8xIHBlX3t0LTF9ICsgXGJldGEgXzIgcGVfe3QtMn0gKyANCiAgICAgIFxiZXRhIF8zIHd3Ml97dH0gKyBcYmV0YSBfNCBwaWxsX3t0fSArIFxtdSBfdA0KXGVuZHtlcXVhdGlvbn0NCg0KDQoNCk8gZ3LDoWZpY28gZGEgdmFyacOhdmVsIGRlcGVuZGVudGUgZ2ZyICh0Z3IgLSB0YXhhIGdlcmFsIGRlIGZlcnRpbGlkYWRlKSDDqToNCg0KYGBge3J9DQpmb3JlY2FzdDo6YXV0b3Bsb3QoZmVydGlsMy50c1ssMV0sIA0KICAgICAgICAgICAgICAgICAgIHlsYWIgPSAiTmFzY2ltZW50b3MgcG9yIDEwMDAgbXVsaGVyZXMiLCANCiAgICAgICAgICAgICAgICAgICB4bGFiID0gIkFubyINCiAgICAgICAgICAgICAgICAgICApDQpgYGANCg0KT3UgcGVsbyBnZ3Bsb3QyOg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KZ2dwbG90KGZlcnRpbDMpICsNCiBhZXMoeCA9IHllYXIsIHkgPSBnZnIpICsNCiBnZW9tX2xpbmUoc2l6ZSA9IDFMLCBjb2xvdXIgPSAiIzBjNGM4YSIpICsNCiBsYWJzKHggPSAiQW5vIiwgeSA9ICJOYXNjaW1lbnRvcyBwb3IgbWlsIG11bGhlcmVzIiwgdGl0bGUgPSAiR3LDoWZpY28gZGEgdmFyacOhdmVsIGRlcGVuZGVudGUgZ2ZyIiwgc3VidGl0bGUgPSAidGdyIC0gdGF4YSBnZXJhbCBkZSBmZXJ0aWxpZGFkZSIsIGNhcHRpb24gPSAiRm9udGU6IEVsYWJvcmHDp8OjbyBwcsOzcHJpYSIpICsNCiBnZ3RoZW1lczo6dGhlbWVfZWNvbm9taXN0X3doaXRlKCkNCmBgYA0KDQpBIHJlZ3Jlc3PDo28gZGluw6JtaWNhIGVudMOjbyBzZXLDoQ0KDQpgYGB7ciByZWdkaW4sIG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCiMgUmVncmVzc2FvIExpbmVhciA6DQpsaWJyYXJ5KGR5bmxtKTtsaWJyYXJ5KGxtdGVzdCk7bGlicmFyeShjYXIpO2xpYnJhcnkoc3RhcmdhemVyKQ0KcmVnMSA8LSBkeW5sbShnZnIgfiBwZStMKHBlKStMKHBlLDIpK3d3MitwaWxsLCBkYXRhPWZlcnRpbDMudHMpDQpzdW1tYXJ5KHJlZzEpDQpyZWcxJEFJQyA8LSBBSUMocmVnMSkgICMgQWthaWtlDQpyZWcxJEJJQyA8LSBCSUMocmVnMSkgICMgU2Nod2Fyeg0Kc3RhcmdhemVyKHJlZzEsDQogICAgICAgICAgdGl0bGUgPSAiVMOtdHVsbzogUmVzdWx0YWRvIGRhIFJlZ3Jlc3PDo28gT0xTIiwgDQogICAgICAgICAgYWxpZ24gPSBUUlVFLCB0eXBlID0gInRleHQiLCANCiAgICAgICAgICBzdHlsZSA9ICJhbGwiLCANCiAgICAgICAgICBrZWVwLnN0YXQgPSBjKCJBSUMiLCAiQklDIiwgInJzcSIsICJhZGoucnNxIiwgIm4iKSkNCg0KYGBgDQoNCkEgYW7DoWxpc2UgZGEgc2lnbmlmaWPDom5jaWEgZG9zIGNvZWZpY2llbnRlcyByZXZlbGEgbsOjbyBzaWduaWZpY8OibmNpYSBkb3MgdGVybW9zIGRlICAqcGUqIGUgc3VhcyBkZWZhc2FnZW5zIChsYWdzKSBlbSB0LTEgZSB0LTIuIMOJIHBvc3PDrXZlbCB0ZXN0YXIgYSBuw6NvIHNpZ25pZmljw6JuY2lhIGNvbmp1bnRhIGRhIHZhcmnDoXZlbCBwZSAoY29udGVtcG9yw6JuZWEgZSBzdWFzIGRlZmFzYWdlbnMpIGZhemVuZG8gdXNvIGRlIHVtIHRlc3RlIHRpcG8gRiBwYXJhICRIXzA6IFxiZXRhIF8wID0gXGJldGEgXzEgPSBcYmV0YSBfMiA9IDAkLiAgDQoNCmBgYHtyLCBtZXNzYWdlPUYsIHdhcm5pbmc9Rn0NCmxpYnJhcnkoY2FyKQ0KY2FyOjpsaW5lYXJIeXBvdGhlc2lzKHJlZzEsIG1hdGNoQ29lZnMocmVnMSwicGUiKSkNCmBgYA0KDQpPIHZhbG9yIGRlIEYgPSAzLjk3MyBlIHByb2JhYmlsaWRhZGUgZGUgRiAoUHIoPkYpID0gMC4wMTE2NSkgaW5kaWNhIHF1ZSBzZSBkZXZlIHJlamVpdGFyIGEgaGlww7N0ZXNlIG51bGEsIGUgYWxndW0gZG9zIHRlcm1vcyBkZSBwZSDDqSBlc3RhdGlzdGljYW1lbnRlIGRpZmVyZW50ZSBkZSB6ZXJvLiBDb25mb3JtZSBXb29sZHJpZGdlICgyMDE3LCBwLjM5NSksIGVmZXRpdmFtZW50ZSB0ZW1vcyBxdWUgb3MgdGVybW9zIGRlZmFzYWRvcyBzw6NvIGNvbmp1bnRhbWVudGUgbsOjby1zaWduaWZpY2F0aXZvcyBjb20gUHIoPkYpID0gMC45NDguIFBvZGVtb3MgY29uZmVyaXIgZmF6ZW5kbw0KDQpgYGB7ciwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9DQpsaWJyYXJ5KGNhcikNCm15SDA8LWMoIkwocGUpIiwiTChwZSwgMikiKQ0KY2FyOjpsaW5lYXJIeXBvdGhlc2lzKHJlZzEsIG15SDApDQpgYGANCiAgICAgDQpPdSBzZWphLCBvIG1lbGhvciBzZXJpYSB1bSBtb2RlbG8gZXN0w6F0aWNvLiBQYXJhIGZpbnMgaWx1c3RyYXRpdm9zLCBXb29sZHJpZGdlICgyMDE3LCBwLjM5NikgZmF6IG8gY8O0bXB1dG8gZG8gaW50ZXJ2YWxvIGRlIGNvbmZpYW7Dp2EgZGEgcHJvcGVuc8OjbyBlbSBsb25nbyBwcmF6byAoUExQKSBkbyBtb2RlbG8sIHF1ZSBpbmRpY2EgbyBlZmVpdG8gY3VtdWxhdGl2byBkYSBtdWRhbsOnYSBkYSB2YXJpw6F2ZWwgaW5kZXBlbmRlbnRlIHNvYnJlIGEgZGVwZW5kZW50ZSwgZSBxdWUgc2Vyw6EgYSBzb21hIGRvcyBjb2VmaWNpZW50ZXMgZXN0aW1hZG9zIGRvcyBwZXLDrW9kb3MgdCBlIGRlZmFzYWdlbnMuIENvbmZvcm1lIEhlaXNzICgyMDE2LCBwLiAxNzUpLCBwb2RlbW9zIG9idGVyIG8gcmVzdWx0YWRvIGRpcmV0YW1lbnRlIGRvcyBjb2VmaWNpZW50ZXMgZXN0aW1hZG9zIHBlbG8gYGR5bmxtYCBlIHJlZmF6ZXIgbyB0ZXN0ZSBgbGluZWFySHlwb3RoZXNpc2AgcGFyYSBhdmFsaWFyIHNlIMOpIGVzdGF0aXN0aWNhbWVudGUgZGlmZXJlbnRlIGRlIHplcm8uIEFzc2ltLCB0ZW0tc2U6DQoNCmBgYHtyIFBMUCwgbWVzc2FnZT1GLCB3YXJuaW5nPUZ9DQpsaWJyYXJ5KGNhcikNCiMgQ8OhbGN1bG8gZGEgcHJvcGVuc8OjbyBlbSBsb25nbyBwcmF6byAoUExQKSBwYXJhIG8gbW9kZWxvIERERg0KYjwtY29lZihyZWcxKQ0KUExQPWJbInBlIl0rYlsiTChwZSkiXStiWyJMKHBlLCAyKSJdDQpwcmludChQTFApDQpteUgwcGxwPC0icGUrTChwZSkrTChwZSwgMikiDQpjYXI6OmxpbmVhckh5cG90aGVzaXMocmVnMSwgbXlIMHBscCkNCmBgYA0KICAgICANClBvcnRhbnRvLCBwb2RlLXNlIGFmaXJtYXIgcXVlIGEgUExQIMOpIGlndWFsIGEgMC4xMDA3LCBzaWduaWZpY2F0aXZhIGEgMC4xJSBkZSBzaWduaWZpY8OibmNpYS4gQ29uZm9ybWUgc3VnZXN0w6NvIGRlIFdvb2xkcmlkZ2UgKDIwMTcscC4zOTYpLCBwb2RlbW9zIG9idGVyIGVzdGEgUExQIGUgbyBkZXN2aW8tcGFkcsOjbyBmYXplbmRvIHVtYSByZWdyZXNzw6NvIGFsdGVybmF0aXZhIChvIGxlaXRvciBwb2RlIG9saGFyIGEgZGVkdcOnw6NvIG5vIGF1dG9yIGNpdGFkbykgZSBlc3RpbWFuZG8gYSBleHByZXNzw6NvIGRlICRnZnJfdCQgZW0gZnVuw6fDo28gZGUgJHBlX3QkLCAkKHBlX3t0LTF9LXBlX3QpJCwgJChwZV97dC0yfS1wZV90KSQsICR3dzJfdCQgZSAkcGlsbF90JC4gICAgIA0KDQpQb3J0YW50bywNCg0KXGJlZ2lue2VxdWF0aW9ufQ0KZ2ZyX3QgPSBcYWxwaGFfMCArIChcVGhldGFfMC1cZGVsdGFfMS1cZGVsdGFfMilwZV90ICsgXGRlbHRhXzEgKHBlX3t0LTF9LXBlX3QpKw0KICAgICAgIFxkZWx0YV8yIChwZV97dC0yfS1wZV90KSArIFxkZWx0YV8zIHd3Ml90ICsgXGRlbHRhXzQgcGlsbF90ICsgXG11X3QNClxlbmR7ZXF1YXRpb259DQoNCmBgYHtyIHJlZ1BMUCxldmFsPUZBTFNFfQ0KcmVnMiA8LSBkeW5sbShnZnIgfiBwZSArIEkoTChwZSktcGUpICsgSShMKHBlLDIpLXBlKSANCiAgICAgICAgICAgICAgKyB3dzIgKyBwaWxsLCBkYXRhPWZlcnRpbDMudHMpDQpzdW1tYXJ5KHJlZzIpDQoNCmBgYA0KYGBgDQpUaW1lIHNlcmllcyByZWdyZXNzaW9uIHdpdGggInRzIiBkYXRhOg0KU3RhcnQgPSAxOTE1LCBFbmQgPSAxOTg0DQoNCkNhbGw6DQpkeW5sbShmb3JtdWxhID0gZ2ZyIH4gcGUgKyBJKEwocGUpIC0gcGUpICsgSShMKHBlLCAyKSAtIHBlKSArIA0KICAgIHd3MiArIHBpbGwsIGRhdGEgPSBmZXJ0aWwzLnRzKQ0KDQpSZXNpZHVhbHM6DQogICAgIE1pbiAgICAgICAxUSAgIE1lZGlhbiAgICAgICAzUSAgICAgIE1heCANCi0yNC42NDYxICAtOS41NDA5ICAtMC4wMzEyICAgOC4zMzc4ICAyOS4xMjk1IA0KDQpDb2VmZmljaWVudHM6DQogICAgICAgICAgICAgICAgICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkgICAgDQooSW50ZXJjZXB0KSAgICAgICA5NS44NzA1MCAgICAzLjI4MTk2ICAyOS4yMTEgIDwgMmUtMTYgKioqDQpwZSAgICAgICAgICAgICAgICAgMC4xMDA3MiAgICAwLjAyOTgwICAgMy4zODAgIDAuMDAxMjQgKiogDQpJKEwocGUpIC0gcGUpICAgICAtMC4wMDU3OCAgICAwLjE1NTY2ICAtMC4wMzcgIDAuOTcwNTAgICAgDQpJKEwocGUsIDIpIC0gcGUpICAgMC4wMzM4MyAgICAwLjEyNjI2ICAgMC4yNjggIDAuNzg5NjIgICAgDQp3dzIgICAgICAgICAgICAgIC0yMi4xMjY1MCAgIDEwLjczMTk3ICAtMi4wNjIgIDAuMDQzMzAgKiAgDQpwaWxsICAgICAgICAgICAgIC0zMS4zMDQ5OSAgICAzLjk4MTU2ICAtNy44NjIgNS42M2UtMTEgKioqDQotLS0NClNpZ25pZi4gY29kZXM6ICAwIOKAmCoqKuKAmSAwLjAwMSDigJgqKuKAmSAwLjAxIOKAmCrigJkgMC4wNSDigJgu4oCZIDAuMSDigJgg4oCZIDENCg0KUmVzaWR1YWwgc3RhbmRhcmQgZXJyb3I6IDE0LjI3IG9uIDY0IGRlZ3JlZXMgb2YgZnJlZWRvbQ0KTXVsdGlwbGUgUi1zcXVhcmVkOiAgMC40OTg2LAlBZGp1c3RlZCBSLXNxdWFyZWQ6ICAwLjQ1OTQgDQpGLXN0YXRpc3RpYzogMTIuNzMgb24gNSBhbmQgNjQgREYsICBwLXZhbHVlOiAxLjM1M2UtMDgNCmBgYA0KDQpPdSBzZWphLCBvYnRpdmVtb3MgbyBjb2VmaWNpZW50ZSBkYSBQTFAgPSAwLjEwMDcsIHF1ZSBzZXLDoSBvIGNvZWZpY2llbnRlIGRlIHBlIG5hIHJlZ3Jlc3PDo28gYWx0ZXJhZGEgZSBvIGRlc3Zpby1wYWRyw6NvIGVzdGltYWRvIGRlIDAuMDI5OCwgY3VqbyB0ZXN0ZSB0IGluZGljYSBwZWxhIHNpZ25pZmljw6JuY2lhIGEgMC4xJSAocHJvYmFiaWxpZGFkZSBQcig+fHR8KSA9MC4wMDEyNCksIHF1ZSBmb2kgZXhhdGFtZW50ZSBvIHZhbG9yIGRhIHByb2JhYmlsaWRhZGUgZG8gdGVzdGUgRiBkbyBjaHVuayBkYSBQTFAsIGFudGVyaW9yIMOgIHJlZ3Jlc3PDo28gcmVnMi4gTyBpbnRlcnZhbG8gZGUgY29uZmlhbsOnYSBkZXN0YSBlc3RpbWF0aXZhIHNlcsOhIGVudHJlIDAuMDQxIGUgMC4xNjAuDQoNCmBgYHtyLCBldmFsPUZBTFNFfQ0KY29uZmludChyZWcyLCJwZSIpDQpgYGANCmBgYA0KICAgICAgICAyLjUgJSAgICA5Ny41ICUNCnBlIDAuMDQxMTgxNDEgMC4xNjAyNTY4DQpgYGANCg0KDQojIFJlZmVyw6puY2lhcw0KDQpXT09MRFJJREdFLCBKLiBJbnRyb2R1w6fDo28gw6AgRWNvbm9tZXRyaWEuIFPDo28gUGF1bG8sIFNQIDogQ2VuZ2FnZSBMZWFybmluZywgMjAxNy4gKG91IDIwMDYtMjAxMCwgY2FwMTApICAgIA0KSEVJU1MsIEZsb3JpYW4uIFVzaW5nIFIgZm9yIGludHJvZHVjdG9yeSBlY29ub21ldHJpY3MuIER1c3NlbGRvcmYsIEZsb3JpYW4gSGVpc3MsIDIwMTYuIERpc3BvbsOtdmVsIGVtOiA8aHR0cDovL3d3dy51cmZpZS5uZXQvPi4gQWNlc3NvIGVtIDI0LjAyLjIwMjAuICAgIA0KDQpIWU5ETUFOLCBSb2IgSi47IEFUSEFOQVNPUE9VTE9TLCBHZW9yZ2UuIEZvcmVjYXN0aW5nOiBwcmluY2lwbGVzIGFuZCBwcmFjdGljZS4gMm5kIEVkLiBPVGV4dHM6IE1lbGJvdXJuZSwgQXVzdHJhbGlhLiAyMDE4LiBEaXNwb27DrXZlbCBlbTogPGh0dHBzOi8vd3d3Lm90ZXh0cy5vcmcvZnBwMi8+LiBBY2Vzc28gZW0gMjQuMDIuMjAyMC4gICANCg0KSFlORE1BTiwgUm9iIEouOyBBVEhBTkFTT1BPVUxPUywgR2VvcmdlLiBGb3JlY2FzdGluZzogcHJpbmNpcGxlcyBhbmQgcHJhY3RpY2UuIDNyZCBFZC4gT1RleHRzOiBNZWxib3VybmUsIEF1c3RyYWxpYSwgMjAyMS4gRGlzcG9uw612ZWwgZW06IDxodHRwczovL290ZXh0cy5jb20vZnBwMy8+IEFjZXNzbyBlbSAyNS4wMy4yMDIxLiAgICANCg0KU0hFQSBKLiBfd29vbGRyaWRnZTogMTE1IERhdGEgU2V0cyBmcm9tICJJbnRyb2R1Y3RvcnkgRWNvbm9tZXRyaWNzOiBBIE1vZGVybiBBcHByb2FjaCwgN2UiIGJ5IEplZmZyZXkgTS4gV29vbGRyaWRnZV8uIFIgcGFja2FnZSB2ZXJzaW9uIDEuNC0yLCAyMDIxLiAgPGh0dHBzOi8vQ1JBTi5SLXByb2plY3Qub3JnL3BhY2thZ2U9d29vbGRyaWRnZT4uDQo=