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:
cuando no hay cointegración \[u_t= u_{t-1}+a_t\]
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