library(TSA) library(ggplot2) library(ggfortify) library(forecast) library(fpp2) library(forecast) library(fma) library(expsmooth) library(seasonal) library(urca) library(seasonal) library(zoo) library(dynlm) library(urca) library(foreing) library(lmtest) library(vars)

TABLA DE CONTENIDOS

1. Breve referencia a los datos, frecuencia, unidad de medida, fuente, etc

2. Graficar la serie de tiempo, analizar patrones y observaciones atípicas. Apoye su análisis con una descomposición clásica.

3. Si es necesario, utilizar transformación Box-Cox / logaritmos para estabilizar la varianza. Presentar grafica

4. Modelar la serie de tiempo elegida como función de una tendencia, tendencia cuadrática y/o medias estacionales. Presente el diagnóstico del modelo elegido.

5. En caso de estacionalidad de la serie de tiempo, aplicar diferencias estacionales. Presentar grafica

6. Usar prueba Dickey-Fuller para evaluar el orden de integración de la serie. Diferenciar hasta que la serie sea estacionaria.

7. Usar herramientas ACF,PACF,EACF y/o criterios de Akaike/Bayes para construir propuestas de modelos.

8. Como parte del diagnóstico del modelo, analizar los residuos y aplicar la prueba Ljung-Box.

9. Usar la función auto.arima() y compare sus resultados con el inciso anterior.

10. Presente la ecuación final y describa.

11. Realizar el pronóstico ARIMA para dos años.

12. Utilizando métodos de pronósticos simples y/o suavizamiento exponencial generar un pronóstico para dos años. Elegir el método que presente la raíz del error medio al cuadrado más pequeño.

13. Usando el an´alisis de transferencia, modelar observaciones cambios estructurales y/o observaciones atípicas en el contexto ARIMAX (punto extra, opcional)

14. Analizar un VAR, necesita incluir los puntos siguientes

a) Buscar otra variable (incluso m´as variables) y redactar la teoría que se encuentra detrás de la relación entre variables que propone.

b) Evaluar la estacionalidad de la nueva variable.

c) Proponga el orden de rezagos óptimo para el VAR y presentar la estimaci´on.

d) Probar la correlación serial y normalidad en los residuos.

e) Resultados de la prueba de causalidad de Granger, y

f) Crear un pronóstico para dos años usando el VAR especificado.

g) Interpretar las funciones impulso-respuesta.

15. Evaluar la potencial cointegraci´on usando la metodologíia de Engle-Granger y Johansen.

1. Breve referencia a los datos, frecuencia, unidad de medida, fuente, etc.

La tasa de desempleo, también conocida como tasa de paro, mide el nivel de desocupación en relación a la población activa. En otras palabras, es la parte de la población que estando en edad, condiciones y disposición de trabajar -población activa- no tiene puesto de trabajo.

La tasa de desempleo es muy útil para conocer las personas que no están trabajando. Su fórmula de cálculo es la población de 16 años y más que no está trabajando y busca trabajo, dividido entre la población económicamente activa de 16 años y más, esto es, ocupados más desocupados. Se calcula de la siguiente manera: tasa de desempleo=(No. de desempleados/Poblacion activa)*100 datos sacdos de http://www.fao.org

2. Graficar la serie de tiempo, analizar patrones y observaciones atípicas. Apoye su análisis con una descomposición clásica.

base<-read.csv(file.choose())
tdd<-ts(base$tdd, start= c(1987,1),frequency= 12)
autoplot(tdd)

ggseasonplot(tdd)

ggseasonplot(tdd, polar=TRUE)

aquí podemos apreciar como tenemos una deserie donde aument eldesempleo en los 90’s por el efecto tequila, donde tuvimos una depresicación de la moneda mexicana, de igual manera podemos observar como baja poco a poco hasta el año 2000 donde tenemos un incremento hasta llegar a otra crisis en el años 2008-2009 pero no tan fuerte como en los 90’s

fit <- decompose(tdd, type='multiplicative')
autoplot(fit)

Para el caso clásico obtenemos los componentes separados de nuestra serie, en relacion a la estacionalidad, tendencia y residuos.

fit2 <- seas(tdd, x11="")
autoplot(fit2) + ggtitle("X11 decomposicion de la tasa de desempleo")

Se realizo una gráfica que compara el comportamiento de nuestros datos con el de un ajuste estacional y observamos un comportamiento más preciso en el componente tendencial, además de que la estacionalidad refleja cambios que van acortando los extremos verticales con una pequeña alza a mitad del periodo, que después regresa a su actividad inicial.

3. Si es necesario, utilizar transformación Box-Cox / logaritmos para estabilizar la varianza. Presentar grafica

En nuestros caso se estan trabajando con índices, por lo cual no es correcto el hacer uso de logaritmos, por lo que solo consideramos la aplicación de la diferenciación. Por lo anterior dicho, no hacemos consideración de la transformación Box Cox.

4. Modelar la serie de tiempo elegida como función de una tendencia, tendencia cuadrática y/o medias estacionales. Presente el diagnóstico del modelo elegido.

modelo1 <- lm(tdd~time(tdd))
summary(modelo1)

Call:
lm(formula = tdd ~ time(tdd))

Residuals:
    Min      1Q  Median      3Q     Max 
-1.6330 -0.6457 -0.1770  0.5039  4.0496 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -77.438827  10.736534  -7.213 3.07e-12 ***
time(tdd)     0.040584   0.005361   7.570 2.94e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9403 on 374 degrees of freedom
Multiple R-squared:  0.1329,    Adjusted R-squared:  0.1305 
F-statistic: 57.31 on 1 and 374 DF,  p-value: 2.941e-13
ggplot(base, aes(y=tdd, x=time(tdd))) + geom_point() + geom_smooth(method = 'lm')

autoplot(modelo1, which = 1:6, ncol = 2, label.size = 3)

shapiro.test(rstudent(modelo1))

    Shapiro-Wilk normality test

data:  rstudent(modelo1)
W = 0.92678, p-value = 1.326e-12
autoplot(acf(rstudent(modelo1),plot=F))

mes. <- season(tdd)
modelo2 <- lm(tdd~mes.)
summary(modelo2)

Call:
lm(formula = tdd ~ mes.)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.7656 -0.7581 -0.2223  0.7524  3.7032 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)    3.818750   0.180821  21.119   <2e-16 ***
mes.February   0.046875   0.255720   0.183    0.855    
mes.March      0.015625   0.255720   0.061    0.951    
mes.April      0.031250   0.255720   0.122    0.903    
mes.May        0.039315   0.257774   0.153    0.879    
mes.June       0.039315   0.257774   0.153    0.879    
mes.July       0.048992   0.257774   0.190    0.849    
mes.August     0.078024   0.257774   0.303    0.762    
mes.September -0.015524   0.257774  -0.060    0.952    
mes.October   -0.018750   0.257774  -0.073    0.942    
mes.November   0.007056   0.257774   0.027    0.978    
mes.December  -0.063911   0.257774  -0.248    0.804    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.023 on 364 degrees of freedom
Multiple R-squared:  0.001313,  Adjusted R-squared:  -0.02887 
F-statistic: 0.04351 on 11 and 364 DF,  p-value: 1
ggplot(base, aes(y=tdd, x=time(tdd))) + geom_point() + geom_smooth(method = 'lm')

autoplot(modelo2, which = 1:6, ncol = 2, label.size = 3)

shapiro.test(rstudent(modelo2))

    Shapiro-Wilk normality test

data:  rstudent(modelo2)
W = 0.94926, p-value = 4.545e-10
autoplot(acf(rstudent(modelo2),plot=F))

modelo3 <- lm(tdd~mes. -1)
summary(modelo3)

Call:
lm(formula = tdd ~ mes. - 1)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.7656 -0.7581 -0.2223  0.7524  3.7032 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
mes.January     3.8187     0.1808   21.12   <2e-16 ***
mes.February    3.8656     0.1808   21.38   <2e-16 ***
mes.March       3.8344     0.1808   21.20   <2e-16 ***
mes.April       3.8500     0.1808   21.29   <2e-16 ***
mes.May         3.8581     0.1837   21.00   <2e-16 ***
mes.June        3.8581     0.1837   21.00   <2e-16 ***
mes.July        3.8677     0.1837   21.05   <2e-16 ***
mes.August      3.8968     0.1837   21.21   <2e-16 ***
mes.September   3.8032     0.1837   20.70   <2e-16 ***
mes.October     3.8000     0.1837   20.68   <2e-16 ***
mes.November    3.8258     0.1837   20.82   <2e-16 ***
mes.December    3.7548     0.1837   20.44   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.023 on 364 degrees of freedom
Multiple R-squared:  0.9356,    Adjusted R-squared:  0.9335 
F-statistic: 440.7 on 12 and 364 DF,  p-value: < 2.2e-16
ggplot(base, aes(y=tdd, x=time(tdd))) + geom_point() + geom_smooth(method = 'lm')

autoplot(modelo3, which = 1:6, ncol = 2, label.size = 3)

shapiro.test(rstudent(modelo3))

    Shapiro-Wilk normality test

data:  rstudent(modelo3)
W = 0.94926, p-value = 4.545e-10
autoplot(acf(rstudent(modelo3),plot=F))

5. En caso de estacionalidad de la serie de tiempo, aplicar diferencias estacionales. Presentar grafica

tdd.d<-autoplot(diff(tdd))
autoplot(tdd.d)+ ggtitle("tasa de desempleo")

6. Usar prueba Dickey-Fuller para evaluar el orden de integración de la serie. Diferenciar hasta que la serie sea estacionaria.

Diferenciar hasta que la serie sea estacionaria. Ho: Existe raíz unitaria Ha: No existe raíz unitaria

adf.test(tdd)

    Augmented Dickey-Fuller Test

data:  tdd
Dickey-Fuller = -2.745, Lag order = 7, p-value = 0.2625
alternative hypothesis: stationary
tdd.d<-(diff(tdd))
adf.test(tdd.d)
p-value smaller than printed p-value

    Augmented Dickey-Fuller Test

data:  tdd.d
Dickey-Fuller = -5.9301, Lag order = 7, p-value = 0.01
alternative hypothesis: stationary

7. Usar herramientas ACF,PACF,EACF y/o criterios de Akaike/Bayes para construir propuestas de modelos.

ggAcf(tdd.d)

ggPacf(tdd.d)

eacf(tdd.d)
AR/MA
  0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 x x o x o x o o o o o  o  o  o 
1 o x o x o x o o o o o  o  o  o 
2 x o x o o x o o o o o  o  o  o 
3 x o x x o o o o o o o  o  o  o 
4 o x o o o o o o o o o  o  o  o 
5 o x o x x x o o o o o  o  o  o 
6 x x o o o o o o o o o  o  o  o 
7 x x o o o x o o o o o  o  o  o 
ggtsdisplay(tdd.d)

8. Como parte del diagnóstico del modelo, analizar los residuos y aplicar la prueba Ljung-Box.

fit1<-Arima(tdd.d, order=c(1,1,0), seasonal = c(1,0,0))

fit1
Series: tdd.d 
ARIMA(1,1,0)(1,0,0)[12] 

Coefficients:
          ar1     sar1
      -0.6639  -0.1436
s.e.   0.0388   0.0513

sigma^2 estimated as 0.09411:  log likelihood=-88.17
AIC=182.33   AICc=182.4   BIC=194.11
checkresiduals(fit1)

    Ljung-Box test

data:  Residuals from ARIMA(1,1,0)(1,0,0)[12]
Q* = 120.95, df = 22, p-value = 1.221e-15

Model df: 2.   Total lags used: 24

fit2<-Arima(tdd.d, order=c(2,1,0), seasonal = c(1,0,2))

fit2

Call:
seas(x = tdd, x11 = "")

Coefficients:
       AO1991.Aug         LS1995.Feb         AO1995.Aug  AR-Nonseasonal-01  AR-Nonseasonal-02  
           0.9144             0.8403             0.9726             0.4539             0.2903  
AR-Nonseasonal-03     AR-Seasonal-12  MA-Nonseasonal-01     MA-Seasonal-12  
           0.1097             0.4334             0.8006             0.6729  
checkresiduals(fit2)

fit3<-auto.arima(tdd.d)

fit3
Series: tdd.d 
ARIMA(2,0,3)(0,0,1)[12] with zero mean 

Coefficients:
          ar1     ar2     ma1      ma2     ma3     sma1
      -0.0937  0.6787  -0.232  -0.5449  0.2744  -0.1562
s.e.   0.1307  0.1070   0.133   0.1163  0.0605   0.0498

sigma^2 estimated as 0.0568:  log likelihood=8.46
AIC=-2.92   AICc=-2.62   BIC=24.56
checkresiduals(fit3)

    Ljung-Box test

data:  Residuals from ARIMA(2,0,3)(0,0,1)[12] with zero mean
Q* = 19.407, df = 18, p-value = 0.3672

Model df: 6.   Total lags used: 24

9. Usar la función auto.arima() y compare sus resultados con el inciso anterior.

fit4<-auto.arima(tdd.d, stepwise = FALSE, approximation = FALSE)

fit4
Series: tdd.d 
ARIMA(1,0,2)(1,0,0)[12] with zero mean 

Coefficients:
         ar1      ma1     ma2     sar1
      0.7387  -1.0605  0.3659  -0.1550
s.e.  0.1097   0.1097  0.0497   0.0516

sigma^2 estimated as 0.05681:  log likelihood=7.39
AIC=-4.79   AICc=-4.62   BIC=14.85
checkresiduals(fit4)

    Ljung-Box test

data:  Residuals from ARIMA(1,0,2)(1,0,0)[12] with zero mean
Q* = 24.121, df = 20, p-value = 0.2372

Model df: 4.   Total lags used: 24

10. Presente la ecuación final y describa.

fit5<-Arima(tdd.d, order=c(3,0,5), seasonal = c(0,0,2))
fit5
Series: tdd.d 
ARIMA(3,0,5)(0,0,2)[12] with non-zero mean 

Coefficients:
          ar1     ar2     ar3     ma1      ma2      ma3     ma4     ma5     sma1    sma2
      -1.3015  0.3461  0.6734  1.0451  -0.6105  -0.3802  0.3911  0.0751  -0.1701  0.0702
s.e.   0.1633  0.3220  0.1614  0.1891   0.2714   0.1153  0.0828  0.0784   0.0524  0.0520
         mean
      -0.0035
s.e.   0.0126

sigma^2 estimated as 0.05407:  log likelihood=17.53
AIC=-11.07   AICc=-10.2   BIC=36.06
checkresiduals(fit5)

    Ljung-Box test

data:  Residuals from ARIMA(3,0,5)(0,0,2)[12] with non-zero mean
Q* = 13.886, df = 13, p-value = 0.3819

Model df: 11.   Total lags used: 24

11. Realizar el pronóstico ARIMA para dos años.

getrmse<-function(x,h,...)
{
train.end<-time(x)[length(x)-h]
test.start<-time(x)[length(x)-h+1]
train<-window(x,end=train.end)
test<-window(x,start=test.start)
fit<-Arima(train,...)
fc<-forecast(fit,h=h)
return(accuracy(fc,test)[2,"RMSE"])
}
getrmse(tdd,h=24,order=c(1,0,2),seasonal=c(1,0,0))
[1] 0.4334241
getrmse(tdd,h=24,order=c(2,1,1),seasonal=c(1,1,0))
[1] 0.3770017
getrmse(tdd,h=24,order=c(2,1,0),seasonal=c(1,1,0))
[1] 0.2497599
getrmse(tdd,h=24,order=c(2,1,0),seasonal=c(1,1,2))
[1] 0.3915485
getrmse(tdd,h=24,order=c(2,1,1),seasonal=c(1,1,2))
[1] 0.1926313
getrmse(tdd,h=24,order=c(2,1,1),seasonal=c(1,1,1))
[1] 0.1992385
getrmse(tdd,h=24,order=c(2,1,1),seasonal=c(0,1,1))
[1] 0.2174223
getrmse(tdd,h=24,order=c(3,0,4),seasonal=c(1,1,0))
[1] 0.3284223
getrmse(tdd,h=24,order=c(3,0,4),seasonal=c(1,1,1))
[1] 0.3307197
getrmse(tdd,h=24,order=c(3,0,4),seasonal=c(0,1,2))
[1] 0.3475158
detach("package:bindrcpp", unload=TRUE)
<U+393C><U+3E31>bindrcpp<U+393C><U+3E32> namespace cannot be unloaded:
  namespace <U+393C><U+3E31>bindrcpp<U+393C><U+3E32> is imported by <U+393C><U+3E31>dplyr<U+393C><U+3E32> so cannot be unloaded
getrmse(tdd,h=24,order=c(3,1,4),seasonal=c(1,0,0))
[1] 0.2928143
getrmse(tdd,h=24,order=c(3,0,5),seasonal=c(0,0,2))
[1] 0.1101478
getrmse(tdd,h=24,order=c(3,1,1),seasonal=c(0,0,2))
[1] 0.2924821
fit6<-Arima(tdd, order=c(2,1,1),seasonal=c(1,1,2))
fit6
Series: tdd 
ARIMA(2,1,1)(1,1,2)[12] 

Coefficients:
         ar1     ar2      ma1     sar1     sma1    sma2
      0.5265  0.3396  -0.8141  -0.0228  -1.1079  0.1594
s.e.  0.1018  0.0549   0.0864   0.7714   0.7532  0.7576

sigma^2 estimated as 0.05989:  log likelihood=-16.06
AIC=46.13   AICc=46.44   BIC=73.39
autoplot(forecast(fit6,h=12,type='b',xlab='Time',ylab='Color  Property'))
The non-existent type arguments will be ignored.The non-existent xlab arguments will be ignored.The non-existent ylab arguments will be ignored.

12. Utilizando métodos de pronósticos simples y/o suavizamiento exponencial generar un pronóstico para dos años. Elegir el método que presente la raíz del error medio al cuadrado más pequeño.

Para poder realizar el pronostico de nuestra serie, primeramente se realizo un recorte de los ultimos dos años para despues pronosticar nuestra serie mediante los metodos mean(media), naive y naive estacional.

tdd.c <- window(tdd,start=c(1987,4),end=c(2015,12))
autoplot(tdd.c)

autoplot(tdd.c)+forecast::autolayer(meanf(tdd.c,h=42),PI=FALSE,series="Mean")+forecast::autolayer(rwf(tdd.c,h=42),PI=FALSE,series="Naïve")+forecast::autolayer(rwf(tdd.c,drift=TRUE,h=42),PI=FALSE,series="Drift")+ggtitle("Tasa de Desempleo")+xlab("Day")+ylab("año")+guides(colour=guide_legend(title="Forecast"))

13. Usando el an´alisis de transferencia, modelar observaciones cambios estructurales y/o observaciones atípicas en el contexto ARIMAX (punto extra, opcional)

14. Analizar un VAR, necesita incluir los puntos siguientes

a) Buscar otra variable (incluso más variables) y redactar la teoría que se encuentra detrás de la relación entre variables que propone

En este punto, la variable que usaremos es el IPC, durante mucho tiempo se observó alguna relación entre las tasas de inflación y las tasas de desempleo en algunos países. Así se observó que cuando una nación tenía baja inflación, tendía a experimentar tasas de desempleo más altas, y cuando sus tasas de inflación eran más elevadas, las de desempleo eran menores. Como resultado de esta relación empírica prácticamente se estableció que la sociedad debía elegir entre uno de dos males: inflación o desempleo. ¿Existe algún tipo de correlación entre inflación y empleo? Sí. La más conocida es la llamada curva de Phillips, que sirve para representar la relación inversa entre inflación y desempleo. En teoría, nos indica que a mayor inflación, menor desempleo. Es decir, el mercado laboral se resiente cuando se trata de controlar el IPC.

La teoría se basa en el estudio que Phillips, Solow y Samuelson realizaron en la década de 1960, donde el control de la inflación se tradujo en una contracción económica. La curva de Phillips sirvió (y sigue sirviendo) de excusa para que muchos paíeses mantuviesen unas tasas de inflación elevadas a costa de tener una tasa de paro relativamente baja.

base<-read.csv(file.choose())
plot(base)

plot.ts(base)

b) Evaluar la estacionalidad de la nueva variable.

ts.tdd <- ts(base$tdd, start = c(1987,1), frequency = 12)
ts.IPC <- ts(base$IPC, start = c(1987,1), frequency = 12)

c) Proponga el orden de rezagos óptimo para el VAR y presentar la estimación.

VARselect(base[,1:2],lag.max = (12),type = "const")[["selection"]]
AIC(n)  HQ(n)  SC(n) FPE(n) 
    12      2      2     12 
var1<-VAR(base[,1:2],p=2,type = "const")
summary(var1) ##Verificar que las raíces del polinomio caracteristico sean menor a 1

VAR Estimation Results:
========================= 
Endogenous variables: tdd, IPC 
Deterministic variables: const 
Sample size: 374 
Log Likelihood: -27.96 
Roots of the characteristic polynomial:
    1 0.9788 0.6137 0.2784
Call:
VAR(y = base[, 1:2], p = 2, type = "const")


Estimation results for equation tdd: 
==================================== 
tdd = tdd.l1 + IPC.l1 + tdd.l2 + IPC.l2 + const 

       Estimate Std. Error t value Pr(>|t|)    
tdd.l1  0.69948    0.05002  13.984  < 2e-16 ***
IPC.l1  0.02373    0.03870   0.613    0.540    
tdd.l2  0.27257    0.05001   5.451  9.2e-08 ***
IPC.l2 -0.02351    0.03871  -0.607    0.544    
const   0.08070    0.05052   1.597    0.111    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.244 on 369 degrees of freedom
Multiple R-Squared: 0.9422, Adjusted R-squared: 0.9416 
F-statistic:  1504 on 4 and 369 DF,  p-value: < 2.2e-16 


Estimation results for equation IPC: 
==================================== 
IPC = tdd.l1 + IPC.l1 + tdd.l2 + IPC.l2 + const 

        Estimate Std. Error t value Pr(>|t|)    
tdd.l1  0.009824   0.053711   0.183    0.855    
IPC.l1  1.614819   0.041557  38.858   <2e-16 ***
tdd.l2  0.013188   0.053698   0.246    0.806    
IPC.l2 -0.614899   0.041571 -14.791   <2e-16 ***
const   0.049229   0.054247   0.908    0.365    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.2621 on 369 degrees of freedom
Multiple R-Squared:     1,  Adjusted R-squared:     1 
F-statistic: 2.049e+06 on 4 and 369 DF,  p-value: < 2.2e-16 



Covariance matrix of residuals:
          tdd       IPC
tdd 0.0595567 0.0006551
IPC 0.0006551 0.0686740

Correlation matrix of residuals:
        tdd     IPC
tdd 1.00000 0.01024
IPC 0.01024 1.00000
serial1<-serial.test(var1,lags.pt = (12),type = "PT.asymptotic")
serial1

    Portmanteau Test (asymptotic)

data:  Residuals of VAR object var1
Chi-squared = 165.83, df = 40, p-value < 2.2e-16
var2<-VAR(base[,1:2],p=3,type = "const")
summary(var2)

VAR Estimation Results:
========================= 
Endogenous variables: tdd, IPC 
Deterministic variables: const 
Sample size: 373 
Log Likelihood: -26.093 
Roots of the characteristic polynomial:
    1 0.9789 0.5802 0.3679 0.1162 0.03518
Call:
VAR(y = base[, 1:2], p = 3, type = "const")


Estimation results for equation tdd: 
==================================== 
tdd = tdd.l1 + IPC.l1 + tdd.l2 + IPC.l2 + tdd.l3 + IPC.l3 + const 

       Estimate Std. Error t value Pr(>|t|)    
tdd.l1  0.71276    0.05192  13.729  < 2e-16 ***
IPC.l1 -0.01988    0.04902  -0.405    0.685    
tdd.l2  0.29580    0.06170   4.794 2.38e-06 ***
IPC.l2  0.08757    0.08815   0.994    0.321    
tdd.l3 -0.03713    0.05184  -0.716    0.474    
IPC.l3 -0.06754    0.04904  -1.377    0.169    
const   0.07989    0.05063   1.578    0.115    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.2433 on 366 degrees of freedom
Multiple R-Squared: 0.943,  Adjusted R-squared: 0.942 
F-statistic:  1009 on 6 and 366 DF,  p-value: < 2.2e-16 


Estimation results for equation IPC: 
==================================== 
IPC = tdd.l1 + IPC.l1 + tdd.l2 + IPC.l2 + tdd.l3 + IPC.l3 + const 

        Estimate Std. Error t value Pr(>|t|)    
tdd.l1  0.010877   0.056114   0.194    0.846    
IPC.l1  1.629899   0.052984  30.762  < 2e-16 ***
tdd.l2  0.011784   0.066683   0.177    0.860    
IPC.l2 -0.655301   0.095270  -6.878 2.63e-11 ***
tdd.l3  0.001271   0.056026   0.023    0.982    
IPC.l3  0.025312   0.053001   0.478    0.633    
const   0.050069   0.054720   0.915    0.361    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.263 on 366 degrees of freedom
Multiple R-Squared:     1,  Adjusted R-squared:     1 
F-statistic: 1.347e+06 on 6 and 366 DF,  p-value: < 2.2e-16 



Covariance matrix of residuals:
          tdd       IPC
tdd 0.0592107 0.0006755
IPC 0.0006755 0.0691697

Correlation matrix of residuals:
        tdd     IPC
tdd 1.00000 0.01056
IPC 0.01056 1.00000
var3<-VAR(base[,1:2],p=4,type = "const")
summary(var3)

VAR Estimation Results:
========================= 
Endogenous variables: tdd, IPC 
Deterministic variables: const 
Sample size: 372 
Log Likelihood: -22.284 
Roots of the characteristic polynomial:
    1 0.9744 0.5443 0.5443 0.4683 0.4683 0.4005 0.3985
Call:
VAR(y = base[, 1:2], p = 4, type = "const")


Estimation results for equation tdd: 
==================================== 
tdd = tdd.l1 + IPC.l1 + tdd.l2 + IPC.l2 + tdd.l3 + IPC.l3 + tdd.l4 + IPC.l4 + const 

       Estimate Std. Error t value Pr(>|t|)    
tdd.l1  0.71327    0.05226  13.650  < 2e-16 ***
IPC.l1 -0.01985    0.04902  -0.405   0.6857    
tdd.l2  0.31901    0.06388   4.994 9.22e-07 ***
IPC.l2  0.10536    0.09373   1.124   0.2617    
tdd.l3  0.02524    0.06358   0.397   0.6916    
IPC.l3 -0.11286    0.09385  -1.203   0.2299    
tdd.l4 -0.08824    0.05185  -1.702   0.0897 .  
IPC.l4  0.02755    0.04916   0.560   0.5755    
const   0.08900    0.05086   1.750   0.0809 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.2432 on 363 degrees of freedom
Multiple R-Squared: 0.9434, Adjusted R-squared: 0.9422 
F-statistic:   757 on 8 and 363 DF,  p-value: < 2.2e-16 


Estimation results for equation IPC: 
==================================== 
IPC = tdd.l1 + IPC.l1 + tdd.l2 + IPC.l2 + tdd.l3 + IPC.l3 + tdd.l4 + IPC.l4 + const 

       Estimate Std. Error t value Pr(>|t|)    
tdd.l1  0.02067    0.05629   0.367    0.714    
IPC.l1  1.62756    0.05280  30.826  < 2e-16 ***
tdd.l2 -0.02186    0.06881  -0.318    0.751    
IPC.l2 -0.60169    0.10096  -5.960 5.99e-09 ***
tdd.l3 -0.07389    0.06849  -1.079    0.281    
IPC.l3 -0.10811    0.10109  -1.069    0.286    
tdd.l4  0.10375    0.05585   1.858    0.064 .  
IPC.l4  0.08215    0.05295   1.551    0.122    
const   0.04409    0.05478   0.805    0.421    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 0.262 on 363 degrees of freedom
Multiple R-Squared:     1,  Adjusted R-squared:     1 
F-statistic: 1.011e+06 on 8 and 363 DF,  p-value: < 2.2e-16 



Covariance matrix of residuals:
        tdd     IPC
tdd 0.05915 0.00109
IPC 0.00109 0.06863

Correlation matrix of residuals:
        tdd     IPC
tdd 1.00000 0.01711
IPC 0.01711 1.00000
serial3<-serial.test(var3,lags.pt = 12,type = "PT.asymptotic")
serial3

    Portmanteau Test (asymptotic)

data:  Residuals of VAR object var3
Chi-squared = 144.06, df = 32, p-value = 3.331e-16
plot(serial3,names="IPC")

plot(serial3,names="tdd")

cusum<-stability(var3,type = "OLS-CUSUM")
plot(cusum)

rec.cusum<-stability(var3,type="Rec-CUSUM")
plot(rec.cusum)

Podemosobservar en las 2 Graficas, que tanto la tasa de desempleo y el IPC se mantienen en una zana contante y que estan dentro de los parametros, tambien observamos que no hay inestabilidad estructural.

base3 <- base2[-c(1:12),]  
plot(base3)

VARselect(base3, lag.max = 12)
$`selection`
AIC(n)  HQ(n)  SC(n) FPE(n) 
    12      1      1     12 

$criteria
                  1            2            3            4            5            6
AIC(n) -5.448043828 -5.435807041 -5.421545652 -5.442583684 -5.437933329 -5.440682462
HQ(n)  -5.421777717 -5.392030188 -5.360258058 -5.363785349 -5.341624253 -5.326862645
SC(n)  -5.382047483 -5.325813131 -5.267554178 -5.244594647 -5.195946728 -5.154698297
FPE(n)  0.004304721  0.004357734  0.004420356  0.004328383  0.004348639  0.004336817
                  7            8            9          10           11           12
AIC(n) -5.443706514 -5.424644215 -5.405233158 -5.42877821 -5.435680639 -5.597025509
HQ(n)  -5.312375956 -5.275802916 -5.238881118 -5.24491543 -5.234307117 -5.378141246
SC(n)  -5.113724786 -5.050664922 -4.987256302 -4.96680379 -4.929708655 -5.047055961
FPE(n)  0.004323879  0.004407302  0.004493959  0.00438971  0.004359907  0.003710672
var12 <- VAR(base3, p=12)
var12

VAR Estimation Results:
======================= 

Estimated coefficients for equation IPC: 
======================================== 
Call:
IPC = IPC.l1 + tdd.l1 + IPC.l2 + tdd.l2 + IPC.l3 + tdd.l3 + IPC.l4 + tdd.l4 + IPC.l5 + tdd.l5 + IPC.l6 + tdd.l6 + IPC.l7 + tdd.l7 + IPC.l8 + tdd.l8 + IPC.l9 + tdd.l9 + IPC.l10 + tdd.l10 + IPC.l11 + tdd.l11 + IPC.l12 + tdd.l12 + const 

      IPC.l1       tdd.l1       IPC.l2       tdd.l2       IPC.l3       tdd.l3       IPC.l4 
 0.409091415  0.060367459 -0.009991214  0.032670331 -0.020740531  0.046580793  0.102588844 
      tdd.l4       IPC.l5       tdd.l5       IPC.l6       tdd.l6       IPC.l7       tdd.l7 
 0.154294127 -0.013610391  0.088414037  0.025181607  0.126693026  0.064188138  0.095266978 
      IPC.l8       tdd.l8       IPC.l9       tdd.l9      IPC.l10      tdd.l10      IPC.l11 
 0.033639028 -0.026548320  0.084550288 -0.107012145 -0.015616196 -0.172109166  0.071161258 
     tdd.l11      IPC.l12      tdd.l12        const 
-0.027032542 -0.411724311  0.005040544  0.006237320 


Estimated coefficients for equation tdd: 
======================================== 
Call:
tdd = IPC.l1 + tdd.l1 + IPC.l2 + tdd.l2 + IPC.l3 + tdd.l3 + IPC.l4 + tdd.l4 + IPC.l5 + tdd.l5 + IPC.l6 + tdd.l6 + IPC.l7 + tdd.l7 + IPC.l8 + tdd.l8 + IPC.l9 + tdd.l9 + IPC.l10 + tdd.l10 + IPC.l11 + tdd.l11 + IPC.l12 + tdd.l12 + const 

       IPC.l1        tdd.l1        IPC.l2        tdd.l2        IPC.l3        tdd.l3 
 0.0490863711 -0.2838683881  0.0718910942 -0.0030042974 -0.0806008764  0.0982968177 
       IPC.l4        tdd.l4        IPC.l5        tdd.l5        IPC.l6        tdd.l6 
 0.1169841804  0.1624157584 -0.1271650999  0.0345887120 -0.0133020398  0.1211837230 
       IPC.l7        tdd.l7        IPC.l8        tdd.l8        IPC.l9        tdd.l9 
 0.0645135903 -0.0542317020 -0.0064755929 -0.0117792907 -0.0442486440  0.0247976959 
      IPC.l10       tdd.l10       IPC.l11       tdd.l11       IPC.l12       tdd.l12 
 0.0369768621  0.0345711688 -0.0243326036 -0.0462242283 -0.0351567562 -0.1225423937 
        const 
-0.0003585096 

d) Probar la correlación serial y normalidad en los residuos.

causality(var12, cause='tdd')$Granger

    Granger causality H0: tdd do not Granger-cause IPC

data:  VAR object var12
F-Test = 2.165, df1 = 12, df2 = 652, p-value = 0.01195
causality(var12, cause='IPC')$Granger

    Granger causality H0: IPC do not Granger-cause tdd

data:  VAR object var12
F-Test = 1.3065, df1 = 12, df2 = 652, p-value = 0.2097
plot(irf(var12, impulse='tdd', response = 'IPC'))

plot(irf(var12, impulse='IPC', response = 'tdd'))

var.serial <- serial.test(var12, lags.pt = 12, type="PT.asymptotic")
var.serial

    Portmanteau Test (asymptotic)

data:  Residuals of VAR object var12
Chi-squared = 33.752, df = 0, p-value < 2.2e-16
var.norm <- normality.test(var12, multivariate.only = T)
var.norm
$`JB`

    JB-Test (multivariate)

data:  Residuals of VAR object var12
Chi-squared = 2072.9, df = 4, p-value < 2.2e-16


$Skewness

    Skewness only (multivariate)

data:  Residuals of VAR object var12
Chi-squared = 145.38, df = 2, p-value < 2.2e-16


$Kurtosis

    Kurtosis only (multivariate)

data:  Residuals of VAR object var12
Chi-squared = 1927.6, df = 2, p-value < 2.2e-16

e) Resultados de la prueba de causalidad de Granger

causality(var3,cause="tdd")$Granger                     

    Granger causality H0: tdd do not Granger-cause IPC

data:  VAR object var3
F-Test = 1.6424, df1 = 4, df2 = 726, p-value = 0.1617
causality(var3,cause="IPC")$Grange

    Granger causality H0: IPC do not Granger-cause tdd

data:  VAR object var3
F-Test = 0.73718, df1 = 4, df2 = 726, p-value = 0.5668

Se puede observar que no se rechaza la hipotesis nula de no Grangercausalidad. ##f) Crear un pronóstico para dos años usando el VAR especificado.

predictions<-predict(var3,n.ahead=10,ci=0.95)
class(predictions)
[1] "varprd"
##  [1]  "varprd"
plot(predictions,names="IPC")

fanchart(predictions,names="tdd")

g) Interpretar las funciones impulso-respuesta.

plot(irf(var3,impulse = "tdd",response = "IPC",ortho=T))

plot(irf(var3,impulse = "IPC",response = "tdd", ortho=T))

15. Evaluar la potencial cointegracióon usando la metodologíia de Engle-Granger y Johansen.

dwtest(lr.reg)

    Durbin-Watson test

data:  lr.reg
DW = 2.5246, p-value = 1
alternative hypothesis: true autocorrelation is greater than 0
ur.df(ts.IPC)

############################################################### 
# Augmented Dickey-Fuller Test Unit Root / Cointegration Test # 
############################################################### 

The value of the test statistic is: 4.8972 
ur.df(ts.tdd)

############################################################### 
# Augmented Dickey-Fuller Test Unit Root / Cointegration Test # 
############################################################### 

The value of the test statistic is: -0.8139 
lr.reg<-dynlm(ts.tdd~L(ts.tdd)+ts.IPC+L(ts.IPC))
summary(lr.reg)

Time series regression with "ts" data:
Start = 1987(2), End = 2018(4)

Call:
dynlm(formula = ts.tdd ~ L(ts.tdd) + ts.IPC + L(ts.IPC))

Residuals:
    Min      1Q  Median      3Q     Max 
-0.7528 -0.1354 -0.0090  0.1471  0.9203 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.11297    0.05207   2.169   0.0307 *  
L(ts.tdd)    0.96313    0.01388  69.412   <2e-16 ***
ts.IPC       0.02213    0.03985   0.555   0.5791    
L(ts.IPC)   -0.02185    0.03986  -0.548   0.5839    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2533 on 371 degrees of freedom
Multiple R-squared:  0.9375,    Adjusted R-squared:  0.937 
F-statistic:  1855 on 3 and 371 DF,  p-value: < 2.2e-16
dwtest(lr.reg)

    Durbin-Watson test

data:  lr.reg
DW = 2.5246, p-value = 1
alternative hypothesis: true autocorrelation is greater than 0
error<-residuals(lr.reg)
plot(error)
abline(h=0)

ur.df(error)

############################################################### 
# Augmented Dickey-Fuller Test Unit Root / Cointegration Test # 
############################################################### 

The value of the test statistic is: -14.4901 
data<-ts.intersect(ts.IPC,ts.tdd,error)
dyn<-dynlm(d(ts.tdd)~L(error)+L(d(ts.IPC))+L(d(ts.tdd)),data=data)
summary(dyn)

Time series regression with "ts" data:
Start = 1987(4), End = 2018(4)

Call:
dynlm(formula = d(ts.tdd) ~ L(error) + L(d(ts.IPC)) + L(d(ts.tdd)), 
    data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.72952 -0.14623 -0.01204  0.12488  0.93426 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)  
(Intercept)  -0.003095   0.018370  -0.168   0.8663  
L(error)     -0.714139   0.365767  -1.952   0.0516 .
L(d(ts.IPC))  0.005410   0.038084   0.142   0.8871  
L(d(ts.tdd))  0.417836   0.362211   1.154   0.2494  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2431 on 369 degrees of freedom
Multiple R-squared:  0.09021,   Adjusted R-squared:  0.08281 
F-statistic:  12.2 on 3 and 369 DF,  p-value: 1.259e-07
LS0tDQp0aXRsZTogIlRSQUJBSk8gRklOQUwgREUgU0VSSUVTIERFIFRJRU1QTyINCmF1dGhvcjogIk5hdmFyaWpvIEdhcmPtYSBSaWNhcmRvIERhbmllbCB5DQogICAgICAgICBDYXN0aWxsZWpvcyBBcnRlYWdhIEx1aXMgRmVsaXBlIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0DQogIA0KLS0tDQoNCmxpYnJhcnkoVFNBKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ2ZvcnRpZnkpDQpsaWJyYXJ5KGZvcmVjYXN0KQ0KbGlicmFyeShmcHAyKQ0KbGlicmFyeShmb3JlY2FzdCkNCmxpYnJhcnkoZm1hKQ0KbGlicmFyeShleHBzbW9vdGgpDQpsaWJyYXJ5KHNlYXNvbmFsKQ0KbGlicmFyeSh1cmNhKQ0KbGlicmFyeShzZWFzb25hbCkNCmxpYnJhcnkoem9vKQ0KbGlicmFyeShkeW5sbSkNCmxpYnJhcnkodXJjYSkNCmxpYnJhcnkoZm9yZWluZykNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeSh2YXJzKQ0KDQojI1RBQkxBIERFIENPTlRFTklET1MNCiMjMS4gQnJldmUgcmVmZXJlbmNpYSBhIGxvcyBkYXRvcywgZnJlY3VlbmNpYSwgdW5pZGFkIGRlIG1lZGlkYSwgZnVlbnRlLCBldGMNCiMjMi4gR3JhZmljYXIgbGEgc2VyaWUgZGUgdGllbXBvLCBhbmFsaXphciBwYXRyb25lcyB5IG9ic2VydmFjaW9uZXMgYXTtcGljYXMuIEFwb3llIHN1IGFu4Wxpc2lzIGNvbiB1bmEgZGVzY29tcG9zaWNp824gY2zhc2ljYS4NCiMjMy4gU2kgZXMgbmVjZXNhcmlvLCB1dGlsaXphciB0cmFuc2Zvcm1hY2nzbiBCb3gtQ294IC8gbG9nYXJpdG1vcyBwYXJhIGVzdGFiaWxpemFyIGxhIHZhcmlhbnphLiBQcmVzZW50YXIgZ3JhZmljYQ0KIyM0LiBNb2RlbGFyIGxhIHNlcmllIGRlIHRpZW1wbyBlbGVnaWRhIGNvbW8gZnVuY2nzbiBkZSB1bmEgdGVuZGVuY2lhLCB0ZW5kZW5jaWEgY3VhZHLhdGljYSB5L28gbWVkaWFzIGVzdGFjaW9uYWxlcy4gUHJlc2VudGUgZWwgZGlhZ27zc3RpY28gZGVsIG1vZGVsbyBlbGVnaWRvLg0KIyM1LiBFbiBjYXNvIGRlIGVzdGFjaW9uYWxpZGFkIGRlIGxhIHNlcmllIGRlIHRpZW1wbywgYXBsaWNhciBkaWZlcmVuY2lhcyBlc3RhY2lvbmFsZXMuIFByZXNlbnRhciBncmFmaWNhDQojIzYuIFVzYXIgcHJ1ZWJhIERpY2tleS1GdWxsZXIgcGFyYSBldmFsdWFyIGVsIG9yZGVuIGRlIGludGVncmFjafNuIGRlIGxhIHNlcmllLiBEaWZlcmVuY2lhciBoYXN0YSBxdWUgbGEgc2VyaWUgc2VhIGVzdGFjaW9uYXJpYS4NCiMjNy4gVXNhciBoZXJyYW1pZW50YXMgQUNGLFBBQ0YsRUFDRiB5L28gY3JpdGVyaW9zIGRlIEFrYWlrZS9CYXllcyBwYXJhIGNvbnN0cnVpciBwcm9wdWVzdGFzIGRlIG1vZGVsb3MuDQojIzguIENvbW8gcGFydGUgZGVsIGRpYWdu83N0aWNvIGRlbCBtb2RlbG8sIGFuYWxpemFyIGxvcyByZXNpZHVvcyB5IGFwbGljYXIgbGEgcHJ1ZWJhIExqdW5nLUJveC4NCiMjOS4gVXNhciBsYSBmdW5jafNuIGF1dG8uYXJpbWEoKSB5IGNvbXBhcmUgc3VzIHJlc3VsdGFkb3MgY29uIGVsIGluY2lzbyBhbnRlcmlvci4NCiMjMTAuIFByZXNlbnRlIGxhIGVjdWFjafNuIGZpbmFsIHkgZGVzY3JpYmEuDQojIzExLiBSZWFsaXphciBlbCBwcm9u83N0aWNvIEFSSU1BIHBhcmEgZG9zIGHxb3MuDQojIzEyLiBVdGlsaXphbmRvIG3pdG9kb3MgZGUgcHJvbvNzdGljb3Mgc2ltcGxlcyB5L28gc3Vhdml6YW1pZW50byBleHBvbmVuY2lhbCBnZW5lcmFyIHVuIHByb27zc3RpY28gcGFyYSBkb3MgYfFvcy4gRWxlZ2lyIGVsIG3pdG9kbyBxdWUgcHJlc2VudGUgbGEgcmHteiBkZWwgZXJyb3IgbWVkaW8gYWwgY3VhZHJhZG8gbeFzIHBlcXVl8W8uDQojIzEzLiBVc2FuZG8gZWwgYW60YWxpc2lzIGRlIHRyYW5zZmVyZW5jaWEsIG1vZGVsYXIgb2JzZXJ2YWNpb25lcyBjYW1iaW9zIGVzdHJ1Y3R1cmFsZXMgeS9vIG9ic2VydmFjaW9uZXMgYXTtcGljYXMgZW4gZWwgY29udGV4dG8gQVJJTUFYIChwdW50byBleHRyYSwgb3BjaW9uYWwpDQojIzE0LiBBbmFsaXphciB1biBWQVIsIG5lY2VzaXRhIGluY2x1aXIgbG9zIHB1bnRvcyBzaWd1aWVudGVzDQojI2EpIEJ1c2NhciBvdHJhIHZhcmlhYmxlIChpbmNsdXNvIG20YXMgdmFyaWFibGVzKSB5IHJlZGFjdGFyIGxhIHRlb3LtYSBxdWUgc2UgZW5jdWVudHJhIGRldHLhcyBkZSBsYSByZWxhY2nzbiBlbnRyZSB2YXJpYWJsZXMgcXVlIHByb3BvbmUuDQojI2IpIEV2YWx1YXIgbGEgZXN0YWNpb25hbGlkYWQgZGUgbGEgbnVldmEgdmFyaWFibGUuDQojI2MpIFByb3BvbmdhIGVsIG9yZGVuIGRlIHJlemFnb3Mg83B0aW1vIHBhcmEgZWwgVkFSIHkgcHJlc2VudGFyIGxhIGVzdGltYWNptG9uLg0KIyNkKSBQcm9iYXIgbGEgY29ycmVsYWNp824gc2VyaWFsIHkgbm9ybWFsaWRhZCBlbiBsb3MgcmVzaWR1b3MuDQojI2UpIFJlc3VsdGFkb3MgZGUgbGEgcHJ1ZWJhIGRlIGNhdXNhbGlkYWQgZGUgR3JhbmdlciwgeQ0KIyNmKSBDcmVhciB1biBwcm9u83N0aWNvIHBhcmEgZG9zIGHxb3MgdXNhbmRvIGVsIFZBUiBlc3BlY2lmaWNhZG8uDQojI2cpIEludGVycHJldGFyIGxhcyBmdW5jaW9uZXMgaW1wdWxzby1yZXNwdWVzdGEuDQojIzE1LiBFdmFsdWFyIGxhIHBvdGVuY2lhbCBjb2ludGVncmFjabRvbiB1c2FuZG8gbGEgbWV0b2RvbG9n7WlhIGRlIEVuZ2xlLUdyYW5nZXIgeSBKb2hhbnNlbi4NCg0KDQojMS4gQnJldmUgcmVmZXJlbmNpYSBhIGxvcyBkYXRvcywgZnJlY3VlbmNpYSwgdW5pZGFkIGRlIG1lZGlkYSwgZnVlbnRlLCBldGMuDQpMYSB0YXNhIGRlIGRlc2VtcGxlbywgdGFtYmnpbiBjb25vY2lkYSBjb21vIHRhc2EgZGUgcGFybywgbWlkZSBlbCBuaXZlbCBkZSBkZXNvY3VwYWNp824gZW4gcmVsYWNp824gYSBsYSBwb2JsYWNp824gYWN0aXZhLiBFbiBvdHJhcyBwYWxhYnJhcywgZXMgbGEgcGFydGUgZGUgbGEgcG9ibGFjafNuIHF1ZSBlc3RhbmRvIGVuIGVkYWQsIGNvbmRpY2lvbmVzIHkgZGlzcG9zaWNp824gZGUgdHJhYmFqYXIgLXBvYmxhY2nzbiBhY3RpdmEtIG5vIHRpZW5lIHB1ZXN0byBkZSB0cmFiYWpvLg0KDQpMYSB0YXNhIGRlIGRlc2VtcGxlbyBlcyBtdXkg+nRpbCBwYXJhIGNvbm9jZXIgbGFzIHBlcnNvbmFzIHF1ZSBubyBlc3ThbiB0cmFiYWphbmRvLiBTdSBm83JtdWxhIGRlIGPhbGN1bG8gZXMgbGEgcG9ibGFjafNuIGRlIDE2IGHxb3MgeSBt4XMgcXVlIG5vIGVzdOEgdHJhYmFqYW5kbyB5IGJ1c2NhIHRyYWJham8sIGRpdmlkaWRvIGVudHJlIGxhIHBvYmxhY2nzbiBlY29u821pY2FtZW50ZSBhY3RpdmEgZGUgMTYgYfFvcyB5IG3hcywgZXN0byBlcywgb2N1cGFkb3MgbeFzIGRlc29jdXBhZG9zLiBTZSBjYWxjdWxhIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6DQp0YXNhIGRlIGRlc2VtcGxlbz0oTm8uIGRlIGRlc2VtcGxlYWRvcy9Qb2JsYWNpb24gYWN0aXZhKSoxMDANCmRhdG9zIHNhY2RvcyBkZSBodHRwOi8vd3d3LmZhby5vcmcgDQoNCiMyLiBHcmFmaWNhciBsYSBzZXJpZSBkZSB0aWVtcG8sIGFuYWxpemFyIHBhdHJvbmVzIHkgb2JzZXJ2YWNpb25lcyBhdO1waWNhcy4gQXBveWUgc3UgYW7hbGlzaXMgY29uIHVuYSBkZXNjb21wb3NpY2nzbiBjbOFzaWNhLg0KDQoNCmBgYHtyfQ0KYmFzZTwtcmVhZC5jc3YoZmlsZS5jaG9vc2UoKSkNCnRkZDwtdHMoYmFzZSR0ZGQsIHN0YXJ0PSBjKDE5ODcsMSksZnJlcXVlbmN5PSAxMikNCmF1dG9wbG90KHRkZCkNCmBgYA0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdCh0ZGQpDQpgYGANCg0KYGBge3J9DQpnZ3NlYXNvbnBsb3QodGRkLCBwb2xhcj1UUlVFKQ0KYGBgDQoNCmFxde0gcG9kZW1vcyBhcHJlY2lhciBjb21vIHRlbmVtb3MgdW5hIGRlc2VyaWUgZG9uZGUgYXVtZW50IGVsZGVzZW1wbGVvIGVuIGxvcyA5MCdzIHBvciBlbCBlZmVjdG8gdGVxdWlsYSwgZG9uZGUgdHV2aW1vcyB1bmEgZGVwcmVzaWNhY2nzbiBkZSBsYSBtb25lZGEgbWV4aWNhbmEsIGRlIGlndWFsIG1hbmVyYSBwb2RlbW9zIG9ic2VydmFyIGNvbW8gYmFqYSBwb2NvIGEgcG9jbyBoYXN0YSBlbCBh8W8gMjAwMCBkb25kZSB0ZW5lbW9zIHVuIGluY3JlbWVudG8gaGFzdGEgbGxlZ2FyIGEgb3RyYSBjcmlzaXMgZW4gZWwgYfFvcyAyMDA4LTIwMDkgcGVybyBubyB0YW4gZnVlcnRlIGNvbW8gZW4gbG9zIDkwJ3MNCg0KDQpgYGB7cn0NCmZpdCA8LSBkZWNvbXBvc2UodGRkLCB0eXBlPSdtdWx0aXBsaWNhdGl2ZScpDQphdXRvcGxvdChmaXQpDQpgYGANClBhcmEgZWwgY2FzbyBjbOFzaWNvIG9idGVuZW1vcyBsb3MgY29tcG9uZW50ZXMgc2VwYXJhZG9zIGRlIG51ZXN0cmEgc2VyaWUsIGVuIHJlbGFjaW9uIGEgbGEgZXN0YWNpb25hbGlkYWQsIHRlbmRlbmNpYSB5IHJlc2lkdW9zLg0KDQoNCmBgYHtyfQ0KZml0MiA8LSBzZWFzKHRkZCwgeDExPSIiKQ0KYXV0b3Bsb3QoZml0MikgKyBnZ3RpdGxlKCJYMTEgZGVjb21wb3NpY2lvbiBkZSBsYSB0YXNhIGRlIGRlc2VtcGxlbyIpDQpgYGANClNlIHJlYWxpem8gdW5hIGdy4WZpY2EgcXVlIGNvbXBhcmEgZWwgY29tcG9ydGFtaWVudG8gZGUgbnVlc3Ryb3MgZGF0b3MgY29uIGVsIGRlIHVuIGFqdXN0ZSBlc3RhY2lvbmFsIHkgb2JzZXJ2YW1vcyB1biBjb21wb3J0YW1pZW50byBt4XMgcHJlY2lzbyBlbiBlbCBjb21wb25lbnRlIHRlbmRlbmNpYWwsIGFkZW3hcyBkZSBxdWUgbGEgZXN0YWNpb25hbGlkYWQgcmVmbGVqYSBjYW1iaW9zIHF1ZSB2YW4gYWNvcnRhbmRvIGxvcyBleHRyZW1vcyB2ZXJ0aWNhbGVzIGNvbiB1bmEgcGVxdWXxYSBhbHphIGEgbWl0YWQgZGVsIHBlcmlvZG8sIHF1ZSBkZXNwdelzIHJlZ3Jlc2EgYSBzdSBhY3RpdmlkYWQgaW5pY2lhbC4NCg0KIzMuIFNpIGVzIG5lY2VzYXJpbywgdXRpbGl6YXIgdHJhbnNmb3JtYWNp824gQm94LUNveCAvIGxvZ2FyaXRtb3MgcGFyYSBlc3RhYmlsaXphciBsYSB2YXJpYW56YS4gUHJlc2VudGFyIGdyYWZpY2ENCkVuIG51ZXN0cm9zIGNhc28gc2UgZXN0YW4gdHJhYmFqYW5kbyBjb24g7W5kaWNlcywgcG9yIGxvIGN1YWwgbm8gZXMgY29ycmVjdG8gZWwgaGFjZXIgdXNvIGRlIGxvZ2FyaXRtb3MsIHBvciBsbyBxdWUgc29sbyBjb25zaWRlcmFtb3MgbGEgYXBsaWNhY2nzbiBkZSBsYSBkaWZlcmVuY2lhY2nzbi4gUG9yIGxvIGFudGVyaW9yIGRpY2hvLCBubyBoYWNlbW9zIGNvbnNpZGVyYWNp824gZGUgbGEgdHJhbnNmb3JtYWNp824gQm94IENveC4NCg0KIzQuIE1vZGVsYXIgbGEgc2VyaWUgZGUgdGllbXBvIGVsZWdpZGEgY29tbyBmdW5jafNuIGRlIHVuYSB0ZW5kZW5jaWEsIHRlbmRlbmNpYSBjdWFkcuF0aWNhIHkvbyBtZWRpYXMgZXN0YWNpb25hbGVzLiBQcmVzZW50ZSBlbCBkaWFnbvNzdGljbyBkZWwgbW9kZWxvIGVsZWdpZG8uDQoNCg0KYGBge3J9DQptb2RlbG8xIDwtIGxtKHRkZH50aW1lKHRkZCkpDQpzdW1tYXJ5KG1vZGVsbzEpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3QoYmFzZSwgYWVzKHk9dGRkLCB4PXRpbWUodGRkKSkpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2xtJykNCmBgYA0KDQpgYGB7cn0NCmF1dG9wbG90KG1vZGVsbzEsIHdoaWNoID0gMTo2LCBuY29sID0gMiwgbGFiZWwuc2l6ZSA9IDMpDQpgYGANCg0KYGBge3J9DQpzaGFwaXJvLnRlc3QocnN0dWRlbnQobW9kZWxvMSkpDQpgYGANCg0KYGBge3J9DQphdXRvcGxvdChhY2YocnN0dWRlbnQobW9kZWxvMSkscGxvdD1GKSkNCmBgYA0KDQoNCmBgYHtyfQ0KbWVzLiA8LSBzZWFzb24odGRkKQ0KbW9kZWxvMiA8LSBsbSh0ZGR+bWVzLikNCnN1bW1hcnkobW9kZWxvMikNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChiYXNlLCBhZXMoeT10ZGQsIHg9dGltZSh0ZGQpKSkgKyBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChtZXRob2QgPSAnbG0nKQ0KYGBgDQoNCmBgYHtyfQ0KYXV0b3Bsb3QobW9kZWxvMiwgd2hpY2ggPSAxOjYsIG5jb2wgPSAyLCBsYWJlbC5zaXplID0gMykNCmBgYA0KDQpgYGB7cn0NCnNoYXBpcm8udGVzdChyc3R1ZGVudChtb2RlbG8yKSkNCmBgYA0KDQpgYGB7cn0NCmF1dG9wbG90KGFjZihyc3R1ZGVudChtb2RlbG8yKSxwbG90PUYpKQ0KYGBgDQoNCg0KYGBge3J9DQptb2RlbG8zIDwtIGxtKHRkZH5tZXMuIC0xKQ0Kc3VtbWFyeShtb2RlbG8zKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dwbG90KGJhc2UsIGFlcyh5PXRkZCwgeD10aW1lKHRkZCkpKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKG1ldGhvZCA9ICdsbScpDQpgYGANCg0KYGBge3J9DQphdXRvcGxvdChtb2RlbG8zLCB3aGljaCA9IDE6NiwgbmNvbCA9IDIsIGxhYmVsLnNpemUgPSAzKQ0KYGBgDQoNCmBgYHtyfQ0Kc2hhcGlyby50ZXN0KHJzdHVkZW50KG1vZGVsbzMpKQ0KYGBgDQoNCmBgYHtyfQ0KYXV0b3Bsb3QoYWNmKHJzdHVkZW50KG1vZGVsbzMpLHBsb3Q9RikpDQpgYGANCg0KIzUuIEVuIGNhc28gZGUgZXN0YWNpb25hbGlkYWQgZGUgbGEgc2VyaWUgZGUgdGllbXBvLCBhcGxpY2FyIGRpZmVyZW5jaWFzIGVzdGFjaW9uYWxlcy4gUHJlc2VudGFyIGdyYWZpY2ENCmBgYHtyfQ0KdGRkLmQ8LWF1dG9wbG90KGRpZmYodGRkKSkNCmBgYA0KDQpgYGB7cn0NCmF1dG9wbG90KHRkZC5kKSsgZ2d0aXRsZSgidGFzYSBkZSBkZXNlbXBsZW8iKQ0KYGBgDQoNCiM2LiBVc2FyIHBydWViYSBEaWNrZXktRnVsbGVyIHBhcmEgZXZhbHVhciBlbCBvcmRlbiBkZSBpbnRlZ3JhY2nzbiBkZSBsYSBzZXJpZS4gRGlmZXJlbmNpYXIgaGFzdGEgcXVlIGxhIHNlcmllIHNlYSBlc3RhY2lvbmFyaWEuDQoNCkRpZmVyZW5jaWFyIGhhc3RhIHF1ZSBsYSBzZXJpZSBzZWEgZXN0YWNpb25hcmlhLg0KSG86IEV4aXN0ZSByYe16IHVuaXRhcmlhDQpIYTogTm8gZXhpc3RlIHJh7XogdW5pdGFyaWEgDQoNCmBgYHtyfQ0KYWRmLnRlc3QodGRkKQ0KYGBgDQoNCmBgYHtyfQ0KdGRkLmQ8LShkaWZmKHRkZCkpDQphZGYudGVzdCh0ZGQuZCkNCmBgYA0KDQojNy4gVXNhciBoZXJyYW1pZW50YXMgQUNGLFBBQ0YsRUFDRiB5L28gY3JpdGVyaW9zIGRlIEFrYWlrZS9CYXllcyBwYXJhIGNvbnN0cnVpciBwcm9wdWVzdGFzIGRlIG1vZGVsb3MuDQoNCmBgYHtyfQ0KZ2dBY2YodGRkLmQpDQpgYGANCg0KYGBge3J9DQpnZ1BhY2YodGRkLmQpDQpgYGANCg0KYGBge3J9DQplYWNmKHRkZC5kKQ0KYGBgDQoNCmBgYHtyfQ0KZ2d0c2Rpc3BsYXkodGRkLmQpDQpgYGANCg0KIzguIENvbW8gcGFydGUgZGVsIGRpYWdu83N0aWNvIGRlbCBtb2RlbG8sIGFuYWxpemFyIGxvcyByZXNpZHVvcyB5IGFwbGljYXIgbGEgcHJ1ZWJhIExqdW5nLUJveC4NCmZpdDE8LUFyaW1hKHRkZC5kLCBvcmRlcj1jKDEsMSwwKSwgc2Vhc29uYWwgPSBjKDEsMCwwKSkNCmBgYHtyfQ0KZml0MQ0KYGBgDQoNCmBgYHtyfQ0KY2hlY2tyZXNpZHVhbHMoZml0MSkNCmBgYA0KDQpmaXQyPC1BcmltYSh0ZGQuZCwgb3JkZXI9YygyLDEsMCksIHNlYXNvbmFsID0gYygxLDAsMikpDQpgYGB7cn0NCmZpdDINCmBgYA0KDQpgYGB7cn0NCmNoZWNrcmVzaWR1YWxzKGZpdDIpDQpgYGANCg0KZml0MzwtYXV0by5hcmltYSh0ZGQuZCkNCmBgYHtyfQ0KZml0Mw0KYGBgDQoNCmBgYHtyfQ0KY2hlY2tyZXNpZHVhbHMoZml0MykNCmBgYA0KDQojOS4gVXNhciBsYSBmdW5jafNuIGF1dG8uYXJpbWEoKSB5IGNvbXBhcmUgc3VzIHJlc3VsdGFkb3MgY29uIGVsIGluY2lzbyBhbnRlcmlvci4NCg0KZml0NDwtYXV0by5hcmltYSh0ZGQuZCwgc3RlcHdpc2UgPSBGQUxTRSwgYXBwcm94aW1hdGlvbiA9IEZBTFNFKQ0KYGBge3J9DQpmaXQ0DQpgYGANCg0KYGBge3J9DQpjaGVja3Jlc2lkdWFscyhmaXQ0KQ0KYGBgDQoNCiMxMC4gUHJlc2VudGUgbGEgZWN1YWNp824gZmluYWwgeSBkZXNjcmliYS4NCg0KYGBge3J9DQpmaXQ1PC1BcmltYSh0ZGQuZCwgb3JkZXI9YygzLDAsNSksIHNlYXNvbmFsID0gYygwLDAsMikpDQpmaXQ1DQpgYGANCg0KYGBge3J9DQpjaGVja3Jlc2lkdWFscyhmaXQ1KQ0KYGBgDQoNCiMxMS4gUmVhbGl6YXIgZWwgcHJvbvNzdGljbyBBUklNQSBwYXJhIGRvcyBh8W9zLg0KDQpgYGB7cn0NCmdldHJtc2U8LWZ1bmN0aW9uKHgsaCwuLi4pDQp7DQp0cmFpbi5lbmQ8LXRpbWUoeClbbGVuZ3RoKHgpLWhdDQp0ZXN0LnN0YXJ0PC10aW1lKHgpW2xlbmd0aCh4KS1oKzFdDQp0cmFpbjwtd2luZG93KHgsZW5kPXRyYWluLmVuZCkNCnRlc3Q8LXdpbmRvdyh4LHN0YXJ0PXRlc3Quc3RhcnQpDQpmaXQ8LUFyaW1hKHRyYWluLC4uLikNCmZjPC1mb3JlY2FzdChmaXQsaD1oKQ0KcmV0dXJuKGFjY3VyYWN5KGZjLHRlc3QpWzIsIlJNU0UiXSkNCn0NCmBgYA0KDQpgYGB7cn0NCmdldHJtc2UodGRkLGg9MjQsb3JkZXI9YygxLDAsMiksc2Vhc29uYWw9YygxLDAsMCkpDQpgYGANCmBgYHtyfQ0KZ2V0cm1zZSh0ZGQsaD0yNCxvcmRlcj1jKDIsMSwxKSxzZWFzb25hbD1jKDEsMSwwKSkNCmBgYA0KYGBge3J9DQpnZXRybXNlKHRkZCxoPTI0LG9yZGVyPWMoMiwxLDApLHNlYXNvbmFsPWMoMSwxLDApKQ0KYGBgDQpgYGB7cn0NCmdldHJtc2UodGRkLGg9MjQsb3JkZXI9YygyLDEsMCksc2Vhc29uYWw9YygxLDEsMikpDQpgYGANCmBgYHtyfQ0KZ2V0cm1zZSh0ZGQsaD0yNCxvcmRlcj1jKDIsMSwxKSxzZWFzb25hbD1jKDEsMSwyKSkNCmBgYA0KYGBge3J9DQpnZXRybXNlKHRkZCxoPTI0LG9yZGVyPWMoMiwxLDEpLHNlYXNvbmFsPWMoMSwxLDEpKQ0KYGBgDQpgYGB7cn0NCmdldHJtc2UodGRkLGg9MjQsb3JkZXI9YygyLDEsMSksc2Vhc29uYWw9YygwLDEsMSkpDQpgYGANCmBgYHtyfQ0KZ2V0cm1zZSh0ZGQsaD0yNCxvcmRlcj1jKDMsMCw0KSxzZWFzb25hbD1jKDEsMSwwKSkNCmBgYA0KYGBge3J9DQpnZXRybXNlKHRkZCxoPTI0LG9yZGVyPWMoMywwLDQpLHNlYXNvbmFsPWMoMSwxLDEpKQ0KYGBgDQpgYGB7cn0NCmdldHJtc2UodGRkLGg9MjQsb3JkZXI9YygzLDAsNCksc2Vhc29uYWw9YygwLDEsMikpDQpgYGANCmBgYHtyfQ0KZ2V0cm1zZSh0ZGQsaD0yNCxvcmRlcj1jKDMsMSw0KSxzZWFzb25hbD1jKDEsMCwwKSkNCmBgYA0KYGBge3J9DQpnZXRybXNlKHRkZCxoPTI0LG9yZGVyPWMoMywwLDUpLHNlYXNvbmFsPWMoMCwwLDIpKQ0KYGBgDQpgYGB7cn0NCmdldHJtc2UodGRkLGg9MjQsb3JkZXI9YygzLDEsMSksc2Vhc29uYWw9YygwLDAsMikpDQpgYGANCg0KYGBge3J9DQpmaXQ2PC1BcmltYSh0ZGQsIG9yZGVyPWMoMiwxLDEpLHNlYXNvbmFsPWMoMSwxLDIpKQ0KZml0Ng0KYGBgDQoNCmBgYHtyfQ0KYXV0b3Bsb3QoZm9yZWNhc3QoZml0NixoPTEyLHR5cGU9J2InLHhsYWI9J1RpbWUnLHlsYWI9J0NvbG9yICBQcm9wZXJ0eScpKQ0KYGBgDQoNCiMxMi4gVXRpbGl6YW5kbyBt6XRvZG9zIGRlIHByb27zc3RpY29zIHNpbXBsZXMgeS9vIHN1YXZpemFtaWVudG8gZXhwb25lbmNpYWwgZ2VuZXJhciB1biBwcm9u83N0aWNvIHBhcmEgZG9zIGHxb3MuIEVsZWdpciBlbCBt6XRvZG8gcXVlIHByZXNlbnRlIGxhIHJh7XogZGVsIGVycm9yIG1lZGlvIGFsIGN1YWRyYWRvIG3hcyBwZXF1ZfFvLg0KDQpQYXJhIHBvZGVyIHJlYWxpemFyIGVsIHByb25vc3RpY28gZGUgbnVlc3RyYSBzZXJpZSwgcHJpbWVyYW1lbnRlIHNlIHJlYWxpem8gdW4gcmVjb3J0ZSBkZSBsb3MgdWx0aW1vcyBkb3MgYfFvcyBwYXJhIGRlc3B1ZXMgcHJvbm9zdGljYXIgbnVlc3RyYSBzZXJpZSBtZWRpYW50ZSBsb3MgbWV0b2RvcyBtZWFuKG1lZGlhKSwgbmFpdmUgeSBuYWl2ZSBlc3RhY2lvbmFsLg0KDQoNCmBgYHtyfQ0KdGRkLmMgPC0gd2luZG93KHRkZCxzdGFydD1jKDE5ODcsNCksZW5kPWMoMjAxNSwxMikpDQphdXRvcGxvdCh0ZGQuYykNCmBgYA0KDQpgYGB7cn0NCmF1dG9wbG90KHRkZC5jKStmb3JlY2FzdDo6YXV0b2xheWVyKG1lYW5mKHRkZC5jLGg9NDIpLFBJPUZBTFNFLHNlcmllcz0iTWVhbiIpK2ZvcmVjYXN0OjphdXRvbGF5ZXIocndmKHRkZC5jLGg9NDIpLFBJPUZBTFNFLHNlcmllcz0iTmHvdmUiKStmb3JlY2FzdDo6YXV0b2xheWVyKHJ3Zih0ZGQuYyxkcmlmdD1UUlVFLGg9NDIpLFBJPUZBTFNFLHNlcmllcz0iRHJpZnQiKStnZ3RpdGxlKCJUYXNhIGRlIERlc2VtcGxlbyIpK3hsYWIoIkRheSIpK3lsYWIoImHxbyIpK2d1aWRlcyhjb2xvdXI9Z3VpZGVfbGVnZW5kKHRpdGxlPSJGb3JlY2FzdCIpKQ0KDQpgYGANCiMjMTMuIFVzYW5kbyBlbCBhbrRhbGlzaXMgZGUgdHJhbnNmZXJlbmNpYSwgbW9kZWxhciBvYnNlcnZhY2lvbmVzIGNhbWJpb3MgZXN0cnVjdHVyYWxlcyB5L28gb2JzZXJ2YWNpb25lcyBhdO1waWNhcyBlbiBlbCBjb250ZXh0byBBUklNQVggKHB1bnRvIGV4dHJhLCBvcGNpb25hbCkNCiMjMTQuIEFuYWxpemFyIHVuIFZBUiwgbmVjZXNpdGEgaW5jbHVpciBsb3MgcHVudG9zIHNpZ3VpZW50ZXMNCiMjYSkgQnVzY2FyIG90cmEgdmFyaWFibGUgKGluY2x1c28gbeFzIHZhcmlhYmxlcykgeSByZWRhY3RhciBsYSB0ZW9y7WEgcXVlIHNlIGVuY3VlbnRyYSBkZXRy4XMgZGUgbGEgcmVsYWNp824gZW50cmUgdmFyaWFibGVzIHF1ZSBwcm9wb25lDQpFbiBlc3RlIHB1bnRvLCBsYSB2YXJpYWJsZSBxdWUgdXNhcmVtb3MgZXMgZWwgSVBDLCBkdXJhbnRlIG11Y2hvIHRpZW1wbyBzZSBvYnNlcnbzIGFsZ3VuYSByZWxhY2nzbiBlbnRyZSBsYXMgdGFzYXMgZGUgaW5mbGFjafNuIHkgbGFzIHRhc2FzIGRlIGRlc2VtcGxlbyBlbiBhbGd1bm9zIHBh7XNlcy4gQXPtIHNlIG9ic2VydvMgcXVlIGN1YW5kbyB1bmEgbmFjafNuIHRlbu1hIGJhamEgaW5mbGFjafNuLCB0ZW5k7WEgYSBleHBlcmltZW50YXIgdGFzYXMgZGUgZGVzZW1wbGVvIG3hcyBhbHRhcywgeSBjdWFuZG8gc3VzIHRhc2FzIGRlIGluZmxhY2nzbiBlcmFuIG3hcyBlbGV2YWRhcywgbGFzIGRlIGRlc2VtcGxlbyBlcmFuIG1lbm9yZXMuIENvbW8gcmVzdWx0YWRvIGRlIGVzdGEgcmVsYWNp824gZW1w7XJpY2EgcHLhY3RpY2FtZW50ZSBzZSBlc3RhYmxlY2nzIHF1ZSBsYSBzb2NpZWRhZCBkZWLtYSBlbGVnaXIgZW50cmUgdW5vIGRlIGRvcyBtYWxlczogaW5mbGFjafNuIG8gZGVzZW1wbGVvLg0Kv0V4aXN0ZSBhbGf6biB0aXBvIGRlIGNvcnJlbGFjafNuIGVudHJlIGluZmxhY2nzbiB5IGVtcGxlbz8gU+0uIExhIG3hcyBjb25vY2lkYSBlcyBsYSBsbGFtYWRhIGN1cnZhIGRlIFBoaWxsaXBzLCBxdWUgc2lydmUgcGFyYSByZXByZXNlbnRhciBsYSByZWxhY2nzbiBpbnZlcnNhIGVudHJlIGluZmxhY2nzbiB5IGRlc2VtcGxlby4gRW4gdGVvcu1hLCBub3MgaW5kaWNhIHF1ZSBhIG1heW9yIGluZmxhY2nzbiwgbWVub3IgZGVzZW1wbGVvLiBFcyBkZWNpciwgZWwgbWVyY2FkbyBsYWJvcmFsIHNlIHJlc2llbnRlIGN1YW5kbyBzZSB0cmF0YSBkZSBjb250cm9sYXIgZWwgSVBDLg0KDQpMYSB0ZW9y7WEgc2UgYmFzYSBlbiBlbCBlc3R1ZGlvIHF1ZSBQaGlsbGlwcywgU29sb3cgeSBTYW11ZWxzb24gcmVhbGl6YXJvbiBlbiBsYSBk6WNhZGEgZGUgMTk2MCwgZG9uZGUgZWwgY29udHJvbCBkZSBsYSBpbmZsYWNp824gc2UgdHJhZHVqbyBlbiB1bmEgY29udHJhY2Np824gZWNvbvNtaWNhLiBMYSBjdXJ2YSBkZSBQaGlsbGlwcyBzaXJ2afMgKHkgc2lndWUgc2lydmllbmRvKSBkZSBleGN1c2EgcGFyYSBxdWUgbXVjaG9zIHBh7WVzZXMgbWFudHV2aWVzZW4gdW5hcyB0YXNhcyBkZSBpbmZsYWNp824gZWxldmFkYXMgYSBjb3N0YSBkZSB0ZW5lciB1bmEgdGFzYSBkZSBwYXJvIHJlbGF0aXZhbWVudGUgYmFqYS4NCg0KYGBge3J9DQpiYXNlPC1yZWFkLmNzdihmaWxlLmNob29zZSgpKQ0KcGxvdChiYXNlKQ0KcGxvdC50cyhiYXNlKQ0KYGBgDQoNCiMjYikgRXZhbHVhciBsYSBlc3RhY2lvbmFsaWRhZCBkZSBsYSBudWV2YSB2YXJpYWJsZS4NCmBgYHtyfQ0KdHMudGRkIDwtIHRzKGJhc2UkdGRkLCBzdGFydCA9IGMoMTk4NywxKSwgZnJlcXVlbmN5ID0gMTIpDQp0cy5JUEMgPC0gdHMoYmFzZSRJUEMsIHN0YXJ0ID0gYygxOTg3LDEpLCBmcmVxdWVuY3kgPSAxMikNCmBgYA0KDQojI2MpIFByb3BvbmdhIGVsIG9yZGVuIGRlIHJlemFnb3Mg83B0aW1vIHBhcmEgZWwgVkFSIHkgcHJlc2VudGFyIGxhIGVzdGltYWNp824uDQpgYGB7cn0NClZBUnNlbGVjdChiYXNlWywxOjJdLGxhZy5tYXggPSAoMTIpLHR5cGUgPSAiY29uc3QiKVtbInNlbGVjdGlvbiJdXQ0KdmFyMTwtVkFSKGJhc2VbLDE6Ml0scD0yLHR5cGUgPSAiY29uc3QiKQ0Kc3VtbWFyeSh2YXIxKSANCnNlcmlhbDE8LXNlcmlhbC50ZXN0KHZhcjEsbGFncy5wdCA9ICgxMiksdHlwZSA9ICJQVC5hc3ltcHRvdGljIikNCnNlcmlhbDENCnZhcjI8LVZBUihiYXNlWywxOjJdLHA9Myx0eXBlID0gImNvbnN0IikNCnN1bW1hcnkodmFyMikNCnZhcjM8LVZBUihiYXNlWywxOjJdLHA9NCx0eXBlID0gImNvbnN0IikNCnN1bW1hcnkodmFyMykNCnNlcmlhbDM8LXNlcmlhbC50ZXN0KHZhcjMsbGFncy5wdCA9IDEyLHR5cGUgPSAiUFQuYXN5bXB0b3RpYyIpDQpzZXJpYWwzDQoNCmBgYA0KDQpgYGB7cn0NCg0KcGxvdChzZXJpYWwzLG5hbWVzPSJJUEMiKQ0KcGxvdChzZXJpYWwzLG5hbWVzPSJ0ZGQiKQ0KY3VzdW08LXN0YWJpbGl0eSh2YXIzLHR5cGUgPSAiT0xTLUNVU1VNIikNCnBsb3QoY3VzdW0pDQpyZWMuY3VzdW08LXN0YWJpbGl0eSh2YXIzLHR5cGU9IlJlYy1DVVNVTSIpDQpwbG90KHJlYy5jdXN1bSkNCmBgYA0KUG9kZW1vc29ic2VydmFyIGVuIGxhcyAyIEdyYWZpY2FzLCBxdWUgdGFudG8gbGEgdGFzYSBkZSBkZXNlbXBsZW8geSBlbCBJUEMgc2UgbWFudGllbmVuIGVuIHVuYSB6YW5hIGNvbnRhbnRlIHkgcXVlIGVzdGFuIGRlbnRybyBkZSBsb3MgcGFyYW1ldHJvcywgdGFtYmllbiBvYnNlcnZhbW9zIHF1ZSBubyBoYXkgaW5lc3RhYmlsaWRhZCBlc3RydWN0dXJhbC4NCmBgYHtyfQ0KYmFzZTMgPC0gYmFzZTJbLWMoMToxMiksXSAgDQpwbG90KGJhc2UzKQ0KVkFSc2VsZWN0KGJhc2UzLCBsYWcubWF4ID0gMTIpDQp2YXIxMiA8LSBWQVIoYmFzZTMsIHA9MTIpDQp2YXIxMg0KYGBgDQoNCiMjZCkgUHJvYmFyIGxhIGNvcnJlbGFjafNuIHNlcmlhbCB5IG5vcm1hbGlkYWQgZW4gbG9zIHJlc2lkdW9zLg0KYGBge3J9DQpjYXVzYWxpdHkodmFyMTIsIGNhdXNlPSd0ZGQnKSRHcmFuZ2VyDQpjYXVzYWxpdHkodmFyMTIsIGNhdXNlPSdJUEMnKSRHcmFuZ2VyDQoNCnBsb3QoaXJmKHZhcjEyLCBpbXB1bHNlPSd0ZGQnLCByZXNwb25zZSA9ICdJUEMnKSkNCnBsb3QoaXJmKHZhcjEyLCBpbXB1bHNlPSdJUEMnLCByZXNwb25zZSA9ICd0ZGQnKSkNCg0KdmFyLnNlcmlhbCA8LSBzZXJpYWwudGVzdCh2YXIxMiwgbGFncy5wdCA9IDEyLCB0eXBlPSJQVC5hc3ltcHRvdGljIikNCnZhci5zZXJpYWwNCg0KdmFyLm5vcm0gPC0gbm9ybWFsaXR5LnRlc3QodmFyMTIsIG11bHRpdmFyaWF0ZS5vbmx5ID0gVCkNCnZhci5ub3JtDQpgYGANCg0KIyNlKSBSZXN1bHRhZG9zIGRlIGxhIHBydWViYSBkZSBjYXVzYWxpZGFkIGRlIEdyYW5nZXINCmBgYHtyfQ0KY2F1c2FsaXR5KHZhcjMsY2F1c2U9InRkZCIpJEdyYW5nZXIgICAgICAgICAgICAgICAgICAgICANCmNhdXNhbGl0eSh2YXIzLGNhdXNlPSJJUEMiKSRHcmFuZ2UNCmBgYA0KU2UgcHVlZGUgb2JzZXJ2YXIgcXVlIG5vIHNlIHJlY2hhemEgbGEgaGlwb3Rlc2lzIG51bGEgZGUgIG5vICBHcmFuZ2VyY2F1c2FsaWRhZC4NCiMjZikgQ3JlYXIgdW4gcHJvbvNzdGljbyBwYXJhIGRvcyBh8W9zIHVzYW5kbyBlbCBWQVIgZXNwZWNpZmljYWRvLg0KYGBge3J9DQpwcmVkaWN0aW9uczwtcHJlZGljdCh2YXIzLG4uYWhlYWQ9MTAsY2k9MC45NSkNCmNsYXNzKHByZWRpY3Rpb25zKQ0KIyMgIFsxXSAgInZhcnByZCINCnBsb3QocHJlZGljdGlvbnMsbmFtZXM9IklQQyIpDQpgYGANCg0KYGBge3J9DQpmYW5jaGFydChwcmVkaWN0aW9ucyxuYW1lcz0idGRkIikNCmBgYA0KDQoNCiMjZykgSW50ZXJwcmV0YXIgbGFzIGZ1bmNpb25lcyBpbXB1bHNvLXJlc3B1ZXN0YS4NCmBgYHtyfQ0KcGxvdChpcmYodmFyMyxpbXB1bHNlID0gInRkZCIscmVzcG9uc2UgPSAiSVBDIixvcnRobz1UKSkNCg0KYGBgDQoNCmBgYHtyfQ0KcGxvdChpcmYodmFyMyxpbXB1bHNlID0gIklQQyIscmVzcG9uc2UgPSAidGRkIiwgb3J0aG89VCkpDQpgYGANCg0KIyMxNS4gRXZhbHVhciBsYSBwb3RlbmNpYWwgY29pbnRlZ3JhY2nzb24gdXNhbmRvIGxhIG1ldG9kb2xvZ+1pYSBkZSBFbmdsZS1HcmFuZ2VyIHkgSm9oYW5zZW4uDQpgYGB7cn0NCnRzLnRkZCA8LSB0cyhiYXNlJHRkZCwgc3RhcnQgPSBjKDE5ODcsMSksIGZyZXF1ZW5jeSA9IDEyKQ0KdHMuSVBDIDwtIHRzKGJhc2UkSVBDLCBzdGFydCA9IGMoMTk4NywxKSwgZnJlcXVlbmN5ID0gMTIpDQpwYXIobWZyb3c9YygxLDIpKQ0KcGxvdCh0cy5JUEMsbWFpbj0iSVBDIikNCnBsb3QodHMudGRkLG1haW49IlRhc2EgZGUgZGVzZW1wZWxvIikNCmBgYA0KDQpgYGB7cn0NCnVyLmRmKHRzLklQQykNCnVyLmRmKHRzLnRkZCkNCmBgYA0KDQpgYGB7cn0NCmxyLnJlZzwtZHlubG0odHMudGRkfkwodHMudGRkKSt0cy5JUEMrTCh0cy5JUEMpKQ0Kc3VtbWFyeShsci5yZWcpDQpkd3Rlc3QobHIucmVnKQ0KYGBgDQoNCmBgYHtyfQ0KZXJyb3I8LXJlc2lkdWFscyhsci5yZWcpDQpwbG90KGVycm9yKQ0KYWJsaW5lKGg9MCkNCnVyLmRmKGVycm9yKQ0KYGBgDQpgYGB7cn0NCmRhdGE8LXRzLmludGVyc2VjdCh0cy5JUEMsdHMudGRkLGVycm9yKQ0KZHluPC1keW5sbShkKHRzLnRkZCl+TChlcnJvcikrTChkKHRzLklQQykpK0woZCh0cy50ZGQpKSxkYXRhPWRhdGEpDQpzdW1tYXJ5KGR5bikNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K