En este ejercicio vamos a comprobar la consistencia del estimador del vector de cointegración y del R2 cuando hay y no hay cointegración.

Se trata de simular el siguiente PGD: \[ y_t = 0.2+0.7x_t+u_t \] \[ x_t = x_{t-1} + \epsilon_t \] siendo

\[\epsilon_t \to iid \, N(0, 1.5^2)\]

y distinguimos 2 casos:

  1. cuando no hay cointegración \[u_t= u_{t-1}+a_t\]

  2. cuando hay cointegración \[u_t= 0.75u_{t-1}+a_t\]

y suponemos que

\[a_t \to iid \, N(0,1)\] \[cov(\epsilon_t, a_t)=0\]

Tomamos como valores del tamaño muestral T=100,200,500,1000.

Sin Cointegración

T = 100


Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.5293 -1.8380  0.0517  1.6266  4.7967 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.51392    0.64436   2.349   0.0208 *  
x            0.28306    0.03401   8.323 5.15e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.209 on 98 degrees of freedom
Multiple R-squared:  0.4142,    Adjusted R-squared:  0.4082 
F-statistic: 69.28 on 1 and 98 DF,  p-value: 5.152e-13

T = 200


Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-8.8029 -2.2023  0.3213  2.5377  5.3601 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.58733    0.25649   33.48   <2e-16 ***
x            0.56549    0.02727   20.74   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.064 on 198 degrees of freedom
Multiple R-squared:  0.6847,    Adjusted R-squared:  0.6831 
F-statistic:   430 on 1 and 198 DF,  p-value: < 2.2e-16

T = 500


Call:
lm(formula = y ~ x)

Residuals:
     Min       1Q   Median       3Q      Max 
-14.4013  -7.3373  -0.3924   6.4840  17.7102 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -17.3296     0.7182  -24.13   <2e-16 ***
x             0.6784     0.0287   23.63   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8.185 on 498 degrees of freedom
Multiple R-squared:  0.5286,    Adjusted R-squared:  0.5277 
F-statistic: 558.5 on 1 and 498 DF,  p-value: < 2.2e-16

T = 1000


Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-30.304 -15.773  -3.497  12.332  35.087 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -33.00803    0.54125  -60.98   <2e-16 ***
x             0.54271    0.02967   18.29   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 16.87 on 998 degrees of freedom
Multiple R-squared:  0.251, Adjusted R-squared:  0.2503 
F-statistic: 334.5 on 1 and 998 DF,  p-value: < 2.2e-16

Cuando no hay cointegración podemos ver en las ACF como los retardos decrecen lentamente lo cual nos indica que hay estacionariedad y por tanto siguen un proceso I(1).

Si nos quedamos exclusivamente con los coeficientes de estas simulaciones tenemos:

        Intercept      Beta
T=100    1.513924 0.2830593
T=200    8.587331 0.5654911
T=500  -17.329627 0.6783586
T=1000 -33.008029 0.5427117

Podemos ver como las estimaciones de Beta no tienden a ningún valor cuando no hay cointegración.

Lo mismo ocurre para R2:

       R cuadrado
T=100   0.4141579
T=200   0.6847369
T=500   0.5286286
T=1000  0.2510249

El valor de R2 toma valores aleatorios y tampoco tiende a ningún número.

Veremos a continuación lo que ocurre cuando hay cointegración.

Con Cointegración

T = 100


Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.1295 -0.9783 -0.2195  0.9842  3.3322 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.17760    0.16168  -1.098    0.275    
x            0.69171    0.03644  18.982   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.418 on 98 degrees of freedom
Multiple R-squared:  0.7862,    Adjusted R-squared:  0.784 
F-statistic: 360.3 on 1 and 98 DF,  p-value: < 2.2e-16

T = 200


Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.1061 -1.1742  0.0316  1.1534  3.4016 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.02086    0.13723   0.152    0.879    
x            0.69399    0.01541  45.021   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.505 on 198 degrees of freedom
Multiple R-squared:  0.911, Adjusted R-squared:  0.9106 
F-statistic:  2027 on 1 and 198 DF,  p-value: < 2.2e-16

T = 500


Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.5054 -1.0660 -0.0109  1.0072  4.3459 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.20222    0.08886   2.276   0.0233 *  
x            0.70282    0.00557 126.170   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.431 on 498 degrees of freedom
Multiple R-squared:  0.9697,    Adjusted R-squared:  0.9696 
F-statistic: 1.592e+04 on 1 and 498 DF,  p-value: < 2.2e-16

T = 1000


Call:
lm(formula = y ~ x)

Residuals:
   Min     1Q Median     3Q    Max 
-4.037 -1.048 -0.039  1.071  5.304 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.964200   0.138300   6.972 5.68e-12 ***
x           0.686635   0.002924 234.799  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.477 on 998 degrees of freedom
Multiple R-squared:  0.9822,    Adjusted R-squared:  0.9822 
F-statistic: 5.513e+04 on 1 and 998 DF,  p-value: < 2.2e-16

T = 100000


Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.9165 -1.0210 -0.0001  1.0207  6.2006 

Coefficients:
             Estimate Std. Error  t value Pr(>|t|)    
(Intercept) 1.948e-01  4.915e-03    39.63   <2e-16 ***
x           6.999e-01  3.221e-05 21725.75   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.513 on 99998 degrees of freedom
Multiple R-squared:  0.9998,    Adjusted R-squared:  0.9998 
F-statistic: 4.72e+08 on 1 and 99998 DF,  p-value: < 2.2e-16

Cuando hay cointegración podemos ver en las ACF como los retardos decrecen rápidamente lo cual nos indica que no hay estacionariedad y siguen un proceso I(0).

Si nos quedamos exclusivamente con los coeficientes de estas simulaciones tenemos:

           Intercept      Beta
T=100    -0.17759642 0.6917098
T=200     0.02086077 0.6939882
T=500     0.20222441 0.7028233
T=1000    0.96419965 0.6866353
T=100000  0.19480330 0.6998869

Podemos ver en este caso como los estimadores de Beta tienden claramente a 0.7, lo cual quiere decir que el vector de cointegración es consistente.

Para los R2 tenemos:

         R cuadrado
T=100     0.7861732
T=200     0.9110082
T=500     0.9696656
T=1000    0.9822195
T=100000  0.9997882

En este caso el R2 tiende claramente a 1.

Por último podemos ver como en los gráficos de las series sin cointegración ambas lineas son parecidas pero son independientes entre si y toman caminos distintos mientras que en los gráficos con cointegración se ve una clara dependencia de las series.

LS0tDQp0aXRsZTogIkVqZXJjaWNpb3MgZGUgUmHDrWNlcyBVbml0YXJpYXMgeSBDb2ludGVncmFjacOzbiINCmF1dGhvcjogIkFydGllbCBQYWxvbWFyIENvbGwiDQpkYXRlOiAiMDIvMDYvMjAxNyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KRW4gZXN0ZSBlamVyY2ljaW8gdmFtb3MgYSBjb21wcm9iYXIgbGEgY29uc2lzdGVuY2lhIGRlbCBlc3RpbWFkb3IgZGVsIHZlY3RvciBkZSBjb2ludGVncmFjacOzbiB5IGRlbCBSPHN1cD4yPC9zdXA+IGN1YW5kbyBoYXkgeSBubyBoYXkgY29pbnRlZ3JhY2nDs24uDQoNClNlIHRyYXRhIGRlIHNpbXVsYXIgZWwgc2lndWllbnRlIFBHRDogDQokJA0KeV90ID0gMC4yKzAuN3hfdCt1X3QNCiQkDQokJA0KeF90ID0geF97dC0xfSArIFxlcHNpbG9uX3QgDQokJA0Kc2llbmRvIA0KDQokJFxlcHNpbG9uX3QgXHRvIGlpZCBcLCBOKDAsIDEuNV4yKSQkDQoNCnkgZGlzdGluZ3VpbW9zIDIgY2Fzb3M6DQoNCjEuIGN1YW5kbyBubyBoYXkgY29pbnRlZ3JhY2nDs24gJCR1X3Q9IHVfe3QtMX0rYV90JCQNCg0KMi4gY3VhbmRvIGhheSBjb2ludGVncmFjacOzbiAkJHVfdD0gMC43NXVfe3QtMX0rYV90JCQNCg0KeSBzdXBvbmVtb3MgcXVlIA0KDQokJGFfdCBcdG8gaWlkIFwsIE4oMCwxKSQkDQokJGNvdihcZXBzaWxvbl90LCBhX3QpPTAkJA0KDQpUb21hbW9zIGNvbW8gdmFsb3JlcyBkZWwgdGFtYcOxbyBtdWVzdHJhbCBUPTEwMCwyMDAsNTAwLDEwMDAuDQoNCiNTaW4gQ29pbnRlZ3JhY2nDs24NCg0KIyNUID0gMTAwDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSh6b28pDQpzZXQuc2VlZCg3NjU0MzIxKQ0KDQpUIDwtIDEwMA0KYSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEpDQpudSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEuNSkNCg0KeCA8LSBjdW1zdW0obnUpDQoNCiNObyBDb2ludGVncmFjacOzbg0KdSA8LSBjdW1zdW0oYSkNCg0KeSA8LSAwLjIgKyAwLjcqeCArIHUNCg0KcGxvdC56b28oeSwgbWFpbj1leHByZXNzaW9uKHBhc3RlKCJOb24gQ29pbnRlZ3JhdGVkIFN5c3RlbSAiLCBiZXRhLCAiPSgxLC0wLjcpIikpLCB4bGFiPSIiLCB5bGFiPSIiLCB5bGltID0gKG1pbih5KTptYXgoeCkpKQ0KbGluZXMoeCwgY29sPTIpDQoNCm1vZC5sbSA8LSBsbSh5fngpDQptMSA8LSBzdW1tYXJ5KG1vZC5sbSkNCm0xDQphY2YobW9kLmxtJHJlc2lkdWFscykNCmBgYA0KDQojI1QgPSAyMDANCg0KYGBge3IsIGVjaG89RkFMU0V9DQpUIDwtIDIwMA0KYSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEpDQpudSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEuNSkNCg0KeCA8LSBjdW1zdW0obnUpDQoNCiNObyBDb2ludGVncmFjacOzbg0KdSA8LSBjdW1zdW0oYSkNCg0KeSA8LSAwLjIgKyAwLjcqeCArIHUNCg0KcGxvdC56b28oeSwgbWFpbj1leHByZXNzaW9uKHBhc3RlKCJOb24gQ29pbnRlZ3JhdGVkIFN5c3RlbSAiLCBiZXRhLCAiPSgxLC0wLjcpIikpLCB4bGFiPSIiLCB5bGFiPSIiLCB5bGltID0gKG1pbih4KTptYXgoeSkpKQ0KbGluZXMoeCwgY29sPTIpDQoNCm1vZC5sbSA8LSBsbSh5fngpDQptMiA8LSBzdW1tYXJ5KG1vZC5sbSkNCm0yDQphY2YobW9kLmxtJHJlc2lkdWFscykNCmBgYA0KDQojI1QgPSA1MDANCg0KYGBge3IsIGVjaG89RkFMU0V9DQpUIDwtIDUwMA0KYSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEpDQpudSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEuNSkNCg0KeCA8LSBjdW1zdW0obnUpDQoNCiNObyBDb2ludGVncmFjacOzbg0KdSA8LSBjdW1zdW0oYSkNCg0KeSA8LSAwLjIgKyAwLjcqeCArIHUNCg0KcGxvdC56b28oeSwgbWFpbj1leHByZXNzaW9uKHBhc3RlKCJOb24gQ29pbnRlZ3JhdGVkIFN5c3RlbSAiLCBiZXRhLCAiPSgxLC0wLjcpIikpLCB4bGFiPSIiLCB5bGFiPSIiLHlsaW0gPSAobWluKHkpOm1heCh4KSkpDQpsaW5lcyh4LCBjb2w9MikNCg0KbW9kLmxtIDwtIGxtKHl+eCkNCm0zIDwtIHN1bW1hcnkobW9kLmxtKQ0KbTMNCmFjZihtb2QubG0kcmVzaWR1YWxzKQ0KYGBgDQoNCiMjVCA9IDEwMDANCg0KYGBge3IsIGVjaG89RkFMU0V9DQpUIDwtIDEwMDANCmEgPC0gcm5vcm0oVCwgbWVhbj0wLCBzZD0xKQ0KbnUgPC0gcm5vcm0oVCwgbWVhbj0wLCBzZD0xLjUpDQoNCnggPC0gY3Vtc3VtKG51KQ0KDQojTm8gQ29pbnRlZ3JhY2nDs24NCnUgPC0gY3Vtc3VtKGEpDQoNCnkgPC0gMC4yICsgMC43KnggKyB1DQoNCnBsb3Quem9vKHksIG1haW49ZXhwcmVzc2lvbihwYXN0ZSgiTm9uIENvaW50ZWdyYXRlZCBTeXN0ZW0gIiwgYmV0YSwgIiA9KDEsLTAuNykiKSksIHhsYWI9IiIsIHlsYWI9IiIseWxpbSA9IChtaW4oeSk6bWF4KHgpKSkNCmxpbmVzKHgsIGNvbD0yKQ0KDQptb2QubG0gPC0gbG0oeX54KQ0KbTQgPC0gc3VtbWFyeShtb2QubG0pDQptNA0KYWNmKG1vZC5sbSRyZXNpZHVhbHMpDQpgYGANCg0KQ3VhbmRvIG5vIGhheSBjb2ludGVncmFjacOzbiBwb2RlbW9zIHZlciBlbiBsYXMgQUNGIGNvbW8gbG9zIHJldGFyZG9zIGRlY3JlY2VuIGxlbnRhbWVudGUgbG8gY3VhbCBub3MgaW5kaWNhIHF1ZSBoYXkgZXN0YWNpb25hcmllZGFkIHkgcG9yIHRhbnRvIHNpZ3VlbiB1biBwcm9jZXNvIEkoMSkuDQoNClNpIG5vcyBxdWVkYW1vcyBleGNsdXNpdmFtZW50ZSBjb24gbG9zIGNvZWZpY2llbnRlcyBkZSBlc3RhcyBzaW11bGFjaW9uZXMgdGVuZW1vczoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpjIDwtIG1hdHJpeChOQSw0LDIpDQoNCmNbMSxdIDwtIG0xJGNvZWZmaWNpZW50c1ssMV0NCmNbMixdIDwtIG0yJGNvZWZmaWNpZW50c1ssMV0NCmNbMyxdIDwtIG0zJGNvZWZmaWNpZW50c1ssMV0NCmNbNCxdIDwtIG00JGNvZWZmaWNpZW50c1ssMV0NCg0KY29sbmFtZXMoYykgPC0gYygiSW50ZXJjZXB0IiwgIkJldGEiKQ0Kcm93bmFtZXMoYykgPC0gYygiVD0xMDAiLCJUPTIwMCIsIlQ9NTAwIiwiVD0xMDAwIikNCg0KYw0KYGBgDQoNClBvZGVtb3MgdmVyIGNvbW8gbGFzIGVzdGltYWNpb25lcyBkZSBCZXRhIG5vIHRpZW5kZW4gYSBuaW5nw7puIHZhbG9yIGN1YW5kbyBubyBoYXkgY29pbnRlZ3JhY2nDs24uDQoNCkxvIG1pc21vIG9jdXJyZSBwYXJhIFI8c3VwPjI8L3N1cD46DQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KYyA8LSBtYXRyaXgoTkEsNCwxKQ0KDQpjWzEsXSA8LSBtMSRyLnNxdWFyZWQNCmNbMixdIDwtIG0yJHIuc3F1YXJlZA0KY1szLF0gPC0gbTMkci5zcXVhcmVkDQpjWzQsXSA8LSBtNCRyLnNxdWFyZWQNCg0KY29sbmFtZXMoYykgPC0gIlIgY3VhZHJhZG8iDQpyb3duYW1lcyhjKSA8LSBjKCJUPTEwMCIsIlQ9MjAwIiwiVD01MDAiLCJUPTEwMDAiKQ0KDQpjDQpgYGANCiANCkVsIHZhbG9yIGRlIFI8c3VwPjI8L3N1cD4gdG9tYSB2YWxvcmVzIGFsZWF0b3Jpb3MgeSB0YW1wb2NvIHRpZW5kZSBhIG5pbmfDum4gbsO6bWVyby4NCg0KVmVyZW1vcyBhIGNvbnRpbnVhY2nDs24gbG8gcXVlIG9jdXJyZSBjdWFuZG8gaGF5IGNvaW50ZWdyYWNpw7NuLg0KDQojQ29uIENvaW50ZWdyYWNpw7NuDQoNCiMjVCA9IDEwMA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NClQgPC0gMTAwDQphIDwtIHJub3JtKFQsIG1lYW49MCwgc2Q9MSkNCm51IDwtIHJub3JtKFQsIG1lYW49MCwgc2Q9MS41KQ0KDQp4IDwtIGN1bXN1bShudSkNCg0KI0NvaW50ZWdyYWNpw7NuDQp1IDwtIGFyaW1hLnNpbShtb2RlbD1saXN0KGFyMT0wLjc1KSwgVCwgaW5ub3Y9YSkNCg0KeSA8LSAwLjIgKyAwLjcqeCArIHUNCg0KcGxvdC56b28oeSwgbWFpbj1leHByZXNzaW9uKHBhc3RlKCJDb2ludGVncmF0ZWQgU3lzdGVtICIsIGJldGEsICI9KDEsLTAuNykiKSksIHhsYWI9IiIsIHlsYWI9IiIseWxpbSA9IChtaW4oeCk6bWF4KHgpKSkNCmxpbmVzKHgsIGNvbD0yKQ0KDQptb2QubG0gPC0gbG0oeX54KQ0KbTEgPC0gc3VtbWFyeShtb2QubG0pDQptMQ0KYWNmKG1vZC5sbSRyZXNpZHVhbHMpDQpgYGANCg0KIyNUID0gMjAwDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KVCA8LSAyMDANCmEgPC0gcm5vcm0oVCwgbWVhbj0wLCBzZD0xKQ0KbnUgPC0gcm5vcm0oVCwgbWVhbj0wLCBzZD0xLjUpDQoNCnggPC0gY3Vtc3VtKG51KQ0KDQojQ29pbnRlZ3JhY2nDs24NCnUgPC0gYXJpbWEuc2ltKG1vZGVsPWxpc3QoYXIxPTAuNzUpLCBULCBpbm5vdj1hKQ0KDQp5IDwtIDAuMiArIDAuNyp4ICsgdQ0KDQpwbG90Lnpvbyh5LCBtYWluPWV4cHJlc3Npb24ocGFzdGUoIkNvaW50ZWdyYXRlZCBTeXN0ZW0gIiwgYmV0YSwgIj0oMSwtMC43KSIpKSwgeGxhYj0iIiwgeWxhYj0iIix5bGltID0gKG1pbih4KTptYXgoeCkpKQ0KbGluZXMoeCwgY29sPTIpDQoNCm1vZC5sbSA8LSBsbSh5fngpDQptMiA8LSBzdW1tYXJ5KG1vZC5sbSkNCm0yDQphY2YobW9kLmxtJHJlc2lkdWFscykNCmBgYA0KDQojI1QgPSA1MDANCg0KYGBge3IsIGVjaG89RkFMU0V9DQpUIDwtIDUwMA0KYSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEpDQpudSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEuNSkNCg0KeCA8LSBjdW1zdW0obnUpDQoNCiNDb2ludGVncmFjacOzbg0KdSA8LSBhcmltYS5zaW0obW9kZWw9bGlzdChhcjE9MC43NSksIFQsIGlubm92PWEpDQoNCnkgPC0gMC4yICsgMC43KnggKyB1DQoNCnBsb3Quem9vKHksIG1haW49ZXhwcmVzc2lvbihwYXN0ZSgiQ29pbnRlZ3JhdGVkIFN5c3RlbSAiLCBiZXRhLCAiPSgxLC0wLjcpIikpLCB4bGFiPSIiLCB5bGFiPSIiLHlsaW0gPSAobWluKHgpOm1heCh4KSkpDQpsaW5lcyh4LCBjb2w9MikNCg0KbW9kLmxtIDwtIGxtKHl+eCkNCm0zIDwtIHN1bW1hcnkobW9kLmxtKQ0KbTMNCmFjZihtb2QubG0kcmVzaWR1YWxzKQ0KYGBgDQoNCiMjVCA9IDEwMDANCg0KYGBge3IsIGVjaG89RkFMU0V9DQpUIDwtIDEwMDANCmEgPC0gcm5vcm0oVCwgbWVhbj0wLCBzZD0xKQ0KbnUgPC0gcm5vcm0oVCwgbWVhbj0wLCBzZD0xLjUpDQoNCnggPC0gY3Vtc3VtKG51KQ0KDQojQ29pbnRlZ3JhY2nDs24NCnUgPC0gYXJpbWEuc2ltKG1vZGVsPWxpc3QoYXIxPTAuNzUpLCBULCBpbm5vdj1hKQ0KDQp5IDwtIDAuMiArIDAuNyp4ICsgdQ0KDQpwbG90Lnpvbyh5LCBtYWluPWV4cHJlc3Npb24ocGFzdGUoIkNvaW50ZWdyYXRlZCBTeXN0ZW0gIiwgYmV0YSwgIj0oMSwtMC43KSIpKSwgeGxhYj0iIiwgeWxhYj0iIix5bGltID0gKG1pbih4KTptYXgoeCkpKQ0KbGluZXMoeCwgY29sPTIpDQoNCm1vZC5sbSA8LSBsbSh5fngpDQptNCA8LSBzdW1tYXJ5KG1vZC5sbSkNCm00DQphY2YobW9kLmxtJHJlc2lkdWFscykNCmBgYA0KDQojI1QgPSAxMDAwMDANCg0KYGBge3IsIGVjaG89RkFMU0V9DQpUIDwtIDEwMDAwMA0KYSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEpDQpudSA8LSBybm9ybShULCBtZWFuPTAsIHNkPTEuNSkNCg0KeCA8LSBjdW1zdW0obnUpDQoNCiNDb2ludGVncmFjacOzbg0KdSA8LSBhcmltYS5zaW0obW9kZWw9bGlzdChhcjE9MC43NSksIFQsIGlubm92PWEpDQoNCnkgPC0gMC4yICsgMC43KnggKyB1DQoNCnBsb3Quem9vKHksIG1haW49ZXhwcmVzc2lvbihwYXN0ZSgiQ29pbnRlZ3JhdGVkIFN5c3RlbSAiLCBiZXRhLCAiPSgxLC0wLjcpIikpLCB4bGFiPSIiLCB5bGFiPSIiLHlsaW0gPSAobWluKHgpOm1heCh4KSkpDQpsaW5lcyh4LCBjb2w9MikNCg0KbW9kLmxtIDwtIGxtKHl+eCkNCm01IDwtIHN1bW1hcnkobW9kLmxtKQ0KbTUNCmFjZihtb2QubG0kcmVzaWR1YWxzKQ0KYGBgDQoNCkN1YW5kbyBoYXkgY29pbnRlZ3JhY2nDs24gcG9kZW1vcyB2ZXIgZW4gbGFzIEFDRiBjb21vIGxvcyByZXRhcmRvcyBkZWNyZWNlbiByw6FwaWRhbWVudGUgbG8gY3VhbCBub3MgaW5kaWNhIHF1ZSBubyBoYXkgZXN0YWNpb25hcmllZGFkIHkgc2lndWVuIHVuIHByb2Nlc28gSSgwKS4NCg0KU2kgbm9zIHF1ZWRhbW9zIGV4Y2x1c2l2YW1lbnRlIGNvbiBsb3MgY29lZmljaWVudGVzIGRlIGVzdGFzIHNpbXVsYWNpb25lcyB0ZW5lbW9zOg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmMgPC0gbWF0cml4KE5BLDUsMikNCg0KY1sxLF0gPC0gbTEkY29lZmZpY2llbnRzWywxXQ0KY1syLF0gPC0gbTIkY29lZmZpY2llbnRzWywxXQ0KY1szLF0gPC0gbTMkY29lZmZpY2llbnRzWywxXQ0KY1s0LF0gPC0gbTQkY29lZmZpY2llbnRzWywxXQ0KY1s1LF0gPC0gbTUkY29lZmZpY2llbnRzWywxXQ0KDQpjb2xuYW1lcyhjKSA8LSBjKCJJbnRlcmNlcHQiLCAiQmV0YSIpDQpyb3duYW1lcyhjKSA8LSBjKCJUPTEwMCIsIlQ9MjAwIiwiVD01MDAiLCJUPTEwMDAiLCJUPTEwMDAwMCIpDQoNCmMNCmBgYA0KDQpQb2RlbW9zIHZlciBlbiBlc3RlIGNhc28gY29tbyBsb3MgZXN0aW1hZG9yZXMgZGUgQmV0YSB0aWVuZGVuIGNsYXJhbWVudGUgYSAwLjcsIGxvIGN1YWwgcXVpZXJlIGRlY2lyIHF1ZSBlbCB2ZWN0b3IgZGUgY29pbnRlZ3JhY2nDs24gZXMgY29uc2lzdGVudGUuDQoNClBhcmEgbG9zIFI8c3VwPjI8L3N1cD4gdGVuZW1vczoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpjIDwtIG1hdHJpeChOQSw1LDEpDQoNCmNbMSxdIDwtIG0xJHIuc3F1YXJlZA0KY1syLF0gPC0gbTIkci5zcXVhcmVkDQpjWzMsXSA8LSBtMyRyLnNxdWFyZWQNCmNbNCxdIDwtIG00JHIuc3F1YXJlZA0KY1s1LF0gPC0gbTUkci5zcXVhcmVkDQoNCmNvbG5hbWVzKGMpIDwtICJSIGN1YWRyYWRvIg0Kcm93bmFtZXMoYykgPC0gYygiVD0xMDAiLCJUPTIwMCIsIlQ9NTAwIiwiVD0xMDAwIiwiVD0xMDAwMDAiKQ0KDQpjDQpgYGANCg0KRW4gZXN0ZSBjYXNvIGVsIFI8c3VwPjI8L3N1cD4gdGllbmRlIGNsYXJhbWVudGUgYSAxLg0KDQpQb3Igw7psdGltbyBwb2RlbW9zIHZlciBjb21vIGVuIGxvcyBncsOhZmljb3MgZGUgbGFzIHNlcmllcyBzaW4gY29pbnRlZ3JhY2nDs24gYW1iYXMgbGluZWFzIHNvbiBwYXJlY2lkYXMgcGVybyBzb24gaW5kZXBlbmRpZW50ZXMgZW50cmUgc2kgeSB0b21hbiBjYW1pbm9zIGRpc3RpbnRvcyBtaWVudHJhcyBxdWUgZW4gbG9zIGdyw6FmaWNvcyBjb24gY29pbnRlZ3JhY2nDs24gc2UgdmUgdW5hIGNsYXJhIGRlcGVuZGVuY2lhIGRlIGxhcyBzZXJpZXMu