El objetivo de este ejercicio es comparar los estimadores y los errores estándar obtenidos mediante la correcta aplicación de MC2E con los obtenidos mediante procedimientos inadecuados. Usa los datos de WAGE2.


APARTADO 1

Estima mediante MC2E la ecuación \[ log(wage) = \beta_0 + \beta_1 educ + \beta_2 exper + \beta_3 tenure + \beta_4 black + u \] siendo sibs la variable instrumental para educ.

mod.iv <- ivreg(lwage ~ educ + exper + tenure + black | sibs + exper + tenure + black)
mod.iv.s <- summary(mod.iv)
mod.iv.s

Call:
ivreg(formula = lwage ~ educ + exper + tenure + black | sibs + 
    exper + tenure + black)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.8176 -0.2403  0.0139  0.2567  1.3225 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  5.215976   0.543451   9.598  < 2e-16 ***
educ         0.093632   0.033719   2.777  0.00560 ** 
exper        0.020922   0.008388   2.494  0.01279 *  
tenure       0.011548   0.002740   4.215 2.74e-05 ***
black       -0.183329   0.050136  -3.657  0.00027 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3848 on 930 degrees of freedom
Multiple R-Squared: 0.1685, Adjusted R-squared: 0.165 
Wald test: 24.92 on 4 and 930 DF,  p-value: < 2.2e-16 

APARTADO 2

Realiza MC2E de forma manual, es decir:


1. Realiza la regresión de educ sobre sibs, exper, tenure y black, y los valores ajustados los guardas en educ2.

Primera etapa.

Forma reducida:

mod1 <- lm(educ ~ sibs + exper + tenure + black)
mod1.s <- summary(mod1)
mod1.s

Call:
lm(formula = educ ~ sibs + exper + tenure + black)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.7816 -1.3175 -0.2947  1.4362  5.2322 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 16.49435    0.19510  84.541  < 2e-16 ***
sibs        -0.17033    0.02818  -6.044 2.17e-09 ***
exper       -0.22765    0.01463 -15.561  < 2e-16 ***
tenure       0.02591    0.01262   2.054  0.04023 *  
black       -0.62267    0.19468  -3.198  0.00143 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.888 on 930 degrees of freedom
Multiple R-squared:  0.2642,    Adjusted R-squared:  0.261 
F-statistic: 83.48 on 4 and 930 DF,  p-value: < 2.2e-16

El p-valor de 2.17e-09 en la variable sibs nos indica que esta significativamente correlacionada con educ, en caso de no tener un p-valor significativo no sería una buena variable instrumental para educ.

Guardamos los valores ajustados:

educ2 <- mod1$fitted.values

2. En la segunda etapa ejecuta la regresión de log(wage) sobre educ2, sibs, exper, tenure y black. Comprueba que los estimadores de las β son idénticos a los obtenidos en el apartado anterior, pero que los errores estándar son totalmente diferentes.

Segunda etapa.

Estimación por variables instrumentales:

mod2 <- lm(lwage ~ educ2 + exper + tenure + black)
mod2.s <- summary(mod2)
mod2.s

Call:
lm(formula = lwage ~ educ2 + exper + tenure + black)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.97409 -0.25720  0.00997  0.26147  1.25198 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  5.215976   0.568815   9.170  < 2e-16 ***
educ2        0.093632   0.035293   2.653 0.008114 ** 
exper        0.020922   0.008779   2.383 0.017368 *  
tenure       0.011548   0.002868   4.027  6.1e-05 ***
black       -0.183329   0.052476  -3.494 0.000499 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4028 on 930 degrees of freedom
Multiple R-squared:  0.08912,   Adjusted R-squared:  0.0852 
F-statistic: 22.75 on 4 and 930 DF,  p-value: < 2.2e-16

Comparación con el modelo del apartado 1:

mtable(mod.iv, mod2)

Calls:
mod.iv: ivreg(formula = lwage ~ educ + exper + tenure + black | sibs + 
    exper + tenure + black)
mod2: lm(formula = lwage ~ educ2 + exper + tenure + black)

========================================
                   mod.iv      mod2     
----------------------------------------
  (Intercept)      5.216***   5.216***  
                  (0.543)    (0.569)    
  educ             0.094**              
                  (0.034)               
  exper            0.021*     0.021*    
                  (0.008)    (0.009)    
  tenure           0.012***   0.012***  
                  (0.003)    (0.003)    
  black           -0.183***  -0.183***  
                  (0.050)    (0.052)    
  educ2                       0.094**   
                             (0.035)    
----------------------------------------
  R-squared           0.2        0.1    
  adj. R-squared      0.2        0.1    
  sigma               0.4        0.4    
  Wald               24.9               
  p                   0.0        0.0    
  N                 935        935      
  F                             22.7    
  Log-likelihood              -474.0    
  Deviance                     150.9    
  AIC                          960.0    
  BIC                          989.0    
========================================

Podemos confirmar que las estimaciones realizadas en los dos métodos son iguales, sin embargo, los errores estándar como indica el enunciado son distintos.

Los errores estándar obtenidos por MC2E secuencialmente (manualmente) son incorrectos, esto se debe a que el término de error de la segunda etapa incluye también el error de la primera etapa.

Esto no ocurre cuando realizamos la estimación del modelo haciendo uso de la función ivreg ya que esta programada especialmente para hacer el MC2E y corregir este problema.

En consecuencia, todos los errores estándar son mayores estimando por MC2E de manera secuencial que usando la función ivreg como se puede apreciar en la tabla anterior.

La manera más adecuada de hacer las estimaciones por MC2E es con la función ivreg.

Si comparamos los R2 ajustados:

Modelo con ivreg: 0.1649637 
Modelo secuencial: 0.08520145

vemos también que gracias a lo anterior el R2 ajustado del modelo con la función ivreg es mucho mejor que haciendo el modelo secuencialmente.


3. Comprueba si son conjuntamente significativos los parámetros β2 y β3.

Generamos un modelo que no incluya las variables exper y tenure con la función ivreg que hemos visto que es más adecuada.

Con la función anova contrastamos la H0 de que ambos modelos son iguales.

mod.iv2 <- ivreg(lwage ~ educ + black | sibs + black)
anova(mod.iv2, mod.iv)
Analysis of Variance Table

Model 1: lwage ~ educ + black | sibs + black
Model 2: lwage ~ educ + exper + tenure + black | sibs + exper + tenure + 
    black
  Res.Df    RSS Df Sum of Sq      F    Pr(>F)    
1    932 148.56                                  
2    930 137.74  2    10.829 19.504 5.039e-09 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Con un p-valor de 5.039e-09 rechazamos claramente la hipotesis nula y por tanto al ser los nuestro modelo original distinto al modelo sin las variables exper y tenure quiere decir que exper y tenure son conjuntamente significativas en el modelo.


4. Comprueba si la variable educ es exógena.

Contraste de Hausman

Añadimos los residuos de la forma reducida a nuestro modelo original y comprobamos la significación de los residuos.

v1hat <- mod1$residuals
H <- lm(lwage ~ educ + exper + tenure + black + v1hat)
H.s <- summary(H)
coeftest(H, vcov=vcovHC)

t test of coefficients:

              Estimate Std. Error t value  Pr(>|t|)    
(Intercept)  5.2159759  0.5179117 10.0712 < 2.2e-16 ***
educ         0.0936325  0.0318601  2.9389 0.0033757 ** 
exper        0.0209216  0.0082806  2.5266 0.0116834 *  
tenure       0.0115482  0.0027342  4.2235 2.642e-05 ***
black       -0.1833285  0.0498736 -3.6759 0.0002506 ***
v1hat       -0.0256302  0.0327036 -0.7837 0.4334087    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

H0: el coeficiente de v1hat = 0 (educ es exógena)

Con un p-valor de 0.4334 no podemos rechazar la H0 y por tanto no podemos rechazar la exogeneidad de educ.

En este caso, siendo educ exógena, deberiamos utilizar MCO en lugar de MC2E ya que será siempre más eficiente.

Por tanto, un mejor modelo sería:

summary(lm(lwage ~ educ + exper + tenure + black ))

Call:
lm(formula = lwage ~ educ + exper + tenure + black)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.86864 -0.24505  0.01873  0.25652  1.30688 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  5.612510   0.110927  50.596  < 2e-16 ***
educ         0.068971   0.006505  10.602  < 2e-16 ***
exper        0.015186   0.003319   4.576 5.39e-06 ***
tenure       0.012243   0.002557   4.788 1.96e-06 ***
black       -0.207368   0.038100  -5.443 6.72e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3819 on 930 degrees of freedom
Multiple R-squared:  0.1812,    Adjusted R-squared:  0.1777 
F-statistic: 51.45 on 4 and 930 DF,  p-value: < 2.2e-16

5. Comprueba si se cumplen las restricciones de sobreidentificación.

No puede haber sobreidentificación cuando estamos usando solamente una variable instrumental para cada posible variable explicativa endógena, en este caso solamente usamos sibs de variable instrumental para educ y por tanto no hay sobreidentificación.

El modelo esta exactamente identificado.

LS0tDQp0aXRsZTogIkVqZXJjaWNpb3MgZGUgVmFyaWFibGVzIEluc3RydW1lbnRhbGVzIHkgTUMyRSINCmF1dGhvcjogIkFydGllbCBQYWxvbWFyIENvbGwiDQpkYXRlOiAiMzEvMDMvMjAxNyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50OiBkZWZhdWx0DQotLS0NCjxQQVJBIFZFUiBCSUVOIExPUyBBQ0VOVE9TIFkgTEEgw5E6Pg0KPEZpbGUgLyBSZW9wZW4gd2l0aCBlbmNvZGluZy4uLiAvIFVURi04Pg0KDQo8Zm9udCBzaXplPTM+DQpFbCBvYmpldGl2byBkZSBlc3RlIGVqZXJjaWNpbyBlcyBjb21wYXJhciBsb3MgZXN0aW1hZG9yZXMgeSBsb3MgZXJyb3JlcyBlc3TDoW5kYXIgb2J0ZW5pZG9zIG1lZGlhbnRlIGxhIGNvcnJlY3RhIGFwbGljYWNpw7NuIGRlIE1DMkUgY29uIGxvcyBvYnRlbmlkb3MgbWVkaWFudGUgcHJvY2VkaW1pZW50b3MgaW5hZGVjdWFkb3MuIFVzYSBsb3MgZGF0b3MgZGUgV0FHRTIuPC9mb250IHNpemU9Mz4NCmBgYHtyIExlY3R1cmEgZGUgZGF0b3MsIGluY2x1ZGU9RkFMU0V9DQpzZXR3ZCgiQzovVXNlcnMvQXJ0aWVsL0Ryb3Bib3gvRWNvbm9tZXRyaWEiKQ0KbGlicmFyeShBRVIpDQpsaWJyYXJ5KGxtdGVzdCkNCmxpYnJhcnkoc2FuZHdpY2gpDQpsaWJyYXJ5KG1lbWlzYykNCg0KI0xlY3R1cmEgZGUgZGF0b3MNCmRhdG9zIDwtIHJlYWQudGFibGUoIndhZ2UyLnJhdyIpDQpuYW1lcyhkYXRvcykgPC0gYygid2FnZSIsICJob3VycyIsICJJUSIsICJLV1ciLCAiZWR1YyIsICJleHBlciIsICJ0ZW51cmUiLCAiYWdlIiwgIm1hcnJpZWQiLCANCiAgICAgICAgICAgICAgICAgICJibGFjayIsICJzb3V0aCIsICJ1cmJhbiIsICJzaWJzIiwgImJydGhvcmQiLCAibWVkdWMiLCAiZmVkdWMiLCAibHdhZ2UiKQ0KDQphdHRhY2goZGF0b3MpDQpgYGANCg0KPEhSPioqKkFQQVJUQURPIDEqKioNCg0KKipFc3RpbWEgbWVkaWFudGUgTUMyRSBsYSBlY3VhY2nDs24qKg0KJCQNCmxvZyh3YWdlKSA9IFxiZXRhXzAgKyBcYmV0YV8xIGVkdWMgKyBcYmV0YV8yIGV4cGVyICsgXGJldGFfMyAgdGVudXJlICArIFxiZXRhXzQgYmxhY2sgKyB1IA0KJCQNCioqc2llbmRvICpzaWJzKiBsYSB2YXJpYWJsZSBpbnN0cnVtZW50YWwgcGFyYSAqZWR1YyouKioNCg0KYGBge3J9DQptb2QuaXYgPC0gaXZyZWcobHdhZ2UgfiBlZHVjICsgZXhwZXIgKyB0ZW51cmUgKyBibGFjayB8IHNpYnMgKyBleHBlciArIHRlbnVyZSArIGJsYWNrKQ0KbW9kLml2LnMgPC0gc3VtbWFyeShtb2QuaXYpDQptb2QuaXYucw0KYGBgDQoNCg0KPEhSPioqKkFQQVJUQURPIDIqKioNCg0KKipSZWFsaXphIE1DMkUgZGUgZm9ybWEgbWFudWFsLCBlcyBkZWNpcjoqKg0KDQo8SFI+KioxLiBSZWFsaXphIGxhIHJlZ3Jlc2nDs24gZGUgKmVkdWMqIHNvYnJlICpzaWJzKiwgKmV4cGVyKiwgKnRlbnVyZSogeSAqYmxhY2sqLCB5IGxvcyB2YWxvcmVzIGFqdXN0YWRvcyBsb3MgZ3VhcmRhcyBlbiAqZWR1YzIqLioqDQoNCioqKlByaW1lcmEgZXRhcGEuKioqDQoNCipGb3JtYSByZWR1Y2lkYToqDQoNCmBgYHtyfQ0KbW9kMSA8LSBsbShlZHVjIH4gc2licyArIGV4cGVyICsgdGVudXJlICsgYmxhY2spDQptb2QxLnMgPC0gc3VtbWFyeShtb2QxKQ0KbW9kMS5zDQpgYGANCg0KRWwgKnAqLXZhbG9yIGRlIDIuMTdlLTA5IGVuIGxhIHZhcmlhYmxlICpzaWJzKiBub3MgaW5kaWNhIHF1ZSBlc3RhIHNpZ25pZmljYXRpdmFtZW50ZSBjb3JyZWxhY2lvbmFkYSBjb24gKmVkdWMqLCBlbiBjYXNvIGRlIG5vIHRlbmVyIHVuICpwKi12YWxvciBzaWduaWZpY2F0aXZvIG5vIHNlcsOtYSB1bmEgYnVlbmEgdmFyaWFibGUgaW5zdHJ1bWVudGFsIHBhcmEgKmVkdWMqLg0KDQpHdWFyZGFtb3MgbG9zIHZhbG9yZXMgYWp1c3RhZG9zOg0KYGBge3J9DQplZHVjMiA8LSBtb2QxJGZpdHRlZC52YWx1ZXMNCmBgYA0KDQo8SFI+KioyLiBFbiBsYSBzZWd1bmRhIGV0YXBhIGVqZWN1dGEgbGEgcmVncmVzacOzbiBkZSBsb2coKndhZ2UqKSBzb2JyZSAqZWR1YzIqLCAqc2licyosICpleHBlciosICp0ZW51cmUqIHkgKmJsYWNrKi4gQ29tcHJ1ZWJhIHF1ZSBsb3MgZXN0aW1hZG9yZXMgZGUgbGFzICZiZXRhOyBzb24gaWTDqW50aWNvcyBhIGxvcyBvYnRlbmlkb3MgZW4gZWwgYXBhcnRhZG8gYW50ZXJpb3IsIHBlcm8gcXVlIGxvcyBlcnJvcmVzIGVzdMOhbmRhciBzb24gdG90YWxtZW50ZSBkaWZlcmVudGVzLioqDQoNCioqKlNlZ3VuZGEgZXRhcGEuKioqDQoNCipFc3RpbWFjacOzbiBwb3IgdmFyaWFibGVzIGluc3RydW1lbnRhbGVzOioNCmBgYHtyfQ0KbW9kMiA8LSBsbShsd2FnZSB+IGVkdWMyICsgZXhwZXIgKyB0ZW51cmUgKyBibGFjaykNCm1vZDIucyA8LSBzdW1tYXJ5KG1vZDIpDQptb2QyLnMNCmBgYA0KDQoqQ29tcGFyYWNpw7NuIGNvbiBlbCBtb2RlbG8gZGVsIGFwYXJ0YWRvIDE6Kg0KDQpgYGB7cn0NCm10YWJsZShtb2QuaXYsIG1vZDIpDQpgYGANCg0KUG9kZW1vcyBjb25maXJtYXIgcXVlIGxhcyBlc3RpbWFjaW9uZXMgcmVhbGl6YWRhcyBlbiBsb3MgZG9zIG3DqXRvZG9zIHNvbiBpZ3VhbGVzLCBzaW4gZW1iYXJnbywgbG9zIGVycm9yZXMgZXN0w6FuZGFyIGNvbW8gaW5kaWNhIGVsIGVudW5jaWFkbyBzb24gZGlzdGludG9zLg0KDQpMb3MgZXJyb3JlcyBlc3TDoW5kYXIgb2J0ZW5pZG9zIHBvciBNQzJFIHNlY3VlbmNpYWxtZW50ZSAobWFudWFsbWVudGUpIHNvbiBpbmNvcnJlY3RvcywgZXN0byBzZSBkZWJlIGEgcXVlIGVsIHTDqXJtaW5vIGRlIGVycm9yIGRlIGxhIHNlZ3VuZGEgZXRhcGEgaW5jbHV5ZSB0YW1iacOpbiBlbCBlcnJvciBkZSBsYSBwcmltZXJhIGV0YXBhLg0KDQpFc3RvIG5vIG9jdXJyZSBjdWFuZG8gcmVhbGl6YW1vcyBsYSBlc3RpbWFjacOzbiBkZWwgbW9kZWxvIGhhY2llbmRvIHVzbyBkZSBsYSBmdW5jacOzbiAqaXZyZWcqIHlhIHF1ZSBlc3RhIHByb2dyYW1hZGEgZXNwZWNpYWxtZW50ZSBwYXJhIGhhY2VyIGVsIE1DMkUgeSBjb3JyZWdpciBlc3RlIHByb2JsZW1hLg0KDQpFbiBjb25zZWN1ZW5jaWEsIHRvZG9zIGxvcyBlcnJvcmVzIGVzdMOhbmRhciBzb24gbWF5b3JlcyBlc3RpbWFuZG8gcG9yIE1DMkUgZGUgbWFuZXJhIHNlY3VlbmNpYWwgcXVlIHVzYW5kbyBsYSBmdW5jacOzbiAqaXZyZWcqIGNvbW8gc2UgcHVlZGUgYXByZWNpYXIgZW4gbGEgdGFibGEgYW50ZXJpb3IuDQoNCkxhIG1hbmVyYSBtw6FzIGFkZWN1YWRhIGRlIGhhY2VyIGxhcyBlc3RpbWFjaW9uZXMgcG9yIE1DMkUgZXMgY29uIGxhIGZ1bmNpw7NuICppdnJlZyouDQoNClNpIGNvbXBhcmFtb3MgbG9zIFI8c3VwPjI8L3N1cD4gYWp1c3RhZG9zOg0KYGBge3IsIGVjaG89RkFMU0V9DQpjYXQoIk1vZGVsbyBjb24gaXZyZWc6IiwgbW9kLml2LnMkYWRqLnIuc3F1YXJlZCwgIlxuIikNCmNhdCgiTW9kZWxvIHNlY3VlbmNpYWw6IiwgbW9kMi5zJGFkai5yLnNxdWFyZWQpDQpgYGANCg0KdmVtb3MgdGFtYmnDqW4gcXVlIGdyYWNpYXMgYSBsbyBhbnRlcmlvciBlbCBSPHN1cD4yPC9zdXA+IGFqdXN0YWRvIGRlbCBtb2RlbG8gY29uIGxhIGZ1bmNpw7NuICppdnJlZyogZXMgbXVjaG8gbWVqb3IgcXVlIGhhY2llbmRvIGVsIG1vZGVsbyBzZWN1ZW5jaWFsbWVudGUuDQoNCjxIUj4qKjMuIENvbXBydWViYSBzaSBzb24gY29uanVudGFtZW50ZSBzaWduaWZpY2F0aXZvcyBsb3MgcGFyw6FtZXRyb3MgJmJldGE7PHN1Yj4yPC9zdWI+IHkgJmJldGE7PHN1Yj4zPC9zdWI+LioqDQoNCkdlbmVyYW1vcyB1biBtb2RlbG8gcXVlIG5vIGluY2x1eWEgbGFzIHZhcmlhYmxlcyAqZXhwZXIqIHkgKnRlbnVyZSogY29uIGxhIGZ1bmNpw7NuICppdnJlZyogcXVlIGhlbW9zIHZpc3RvIHF1ZSBlcyBtw6FzIGFkZWN1YWRhLg0KDQpDb24gbGEgZnVuY2nDs24gKmFub3ZhKiBjb250cmFzdGFtb3MgbGEgSDxzdWI+MDwvc3ViPiBkZSBxdWUgYW1ib3MgbW9kZWxvcyBzb24gaWd1YWxlcy4NCg0KYGBge3J9DQptb2QuaXYyIDwtIGl2cmVnKGx3YWdlIH4gZWR1YyArIGJsYWNrIHwgc2licyArIGJsYWNrKQ0KYW5vdmEobW9kLml2MiwgbW9kLml2KQ0KYGBgDQoNCkNvbiB1biAqcCotdmFsb3IgZGUgNS4wMzllLTA5IHJlY2hhemFtb3MgY2xhcmFtZW50ZSBsYSBoaXBvdGVzaXMgbnVsYSB5IHBvciB0YW50byBhbCBzZXIgbG9zIG51ZXN0cm8gbW9kZWxvIG9yaWdpbmFsIGRpc3RpbnRvIGFsIG1vZGVsbyBzaW4gbGFzIHZhcmlhYmxlcyAqZXhwZXIqIHkgKnRlbnVyZSogcXVpZXJlIGRlY2lyIHF1ZSAqZXhwZXIqIHkgKnRlbnVyZSogc29uIGNvbmp1bnRhbWVudGUgc2lnbmlmaWNhdGl2YXMgZW4gZWwgbW9kZWxvLg0KDQo8SFI+Kio0LiBDb21wcnVlYmEgc2kgbGEgdmFyaWFibGUgKmVkdWMqIGVzIGV4w7NnZW5hLioqDQoNCioqKkNvbnRyYXN0ZSBkZSBIYXVzbWFuKioqDQoNCkHDsWFkaW1vcyBsb3MgcmVzaWR1b3MgZGUgbGEgZm9ybWEgcmVkdWNpZGEgYSBudWVzdHJvIG1vZGVsbyBvcmlnaW5hbCB5IGNvbXByb2JhbW9zIGxhIHNpZ25pZmljYWNpw7NuIGRlIGxvcyByZXNpZHVvcy4NCmBgYHtyfQ0KdjFoYXQgPC0gbW9kMSRyZXNpZHVhbHMNCkggPC0gbG0obHdhZ2UgfiBlZHVjICsgZXhwZXIgKyB0ZW51cmUgKyBibGFjayArIHYxaGF0KQ0KSC5zIDwtIHN1bW1hcnkoSCkNCmNvZWZ0ZXN0KEgsIHZjb3Y9dmNvdkhDKQ0KYGBgDQoNCkg8c3ViPjA8L3N1Yj46IGVsIGNvZWZpY2llbnRlIGRlIHYxaGF0ID0gMCAoKmVkdWMqIGVzIGV4w7NnZW5hKQ0KDQpDb24gdW4gKnAqLXZhbG9yIGRlIDAuNDMzNCBubyBwb2RlbW9zIHJlY2hhemFyIGxhIEg8c3ViPjA8L3N1Yj4geSBwb3IgdGFudG8gbm8gcG9kZW1vcyByZWNoYXphciBsYSBleG9nZW5laWRhZCBkZSAqZWR1YyouDQoNCkVuIGVzdGUgY2Fzbywgc2llbmRvICplZHVjKiBleMOzZ2VuYSwgZGViZXJpYW1vcyB1dGlsaXphciBNQ08gZW4gbHVnYXIgZGUgTUMyRSB5YSBxdWUgc2Vyw6Egc2llbXByZSBtw6FzIGVmaWNpZW50ZS4NCg0KUG9yIHRhbnRvLCB1biBtZWpvciBtb2RlbG8gc2Vyw61hOiANCg0KYGBge3J9DQpzdW1tYXJ5KGxtKGx3YWdlIH4gZWR1YyArIGV4cGVyICsgdGVudXJlICsgYmxhY2sgKSkNCmBgYA0KDQoNCjxIUj4qKjUuIENvbXBydWViYSBzaSBzZSBjdW1wbGVuIGxhcyByZXN0cmljY2lvbmVzIGRlIHNvYnJlaWRlbnRpZmljYWNpw7NuLioqDQoNCk5vIHB1ZWRlIGhhYmVyIHNvYnJlaWRlbnRpZmljYWNpw7NuIGN1YW5kbyBlc3RhbW9zIHVzYW5kbyBzb2xhbWVudGUgdW5hIHZhcmlhYmxlIGluc3RydW1lbnRhbCBwYXJhIGNhZGEgcG9zaWJsZSB2YXJpYWJsZSBleHBsaWNhdGl2YSBlbmTDs2dlbmEsIGVuIGVzdGUgY2FzbyBzb2xhbWVudGUgdXNhbW9zICpzaWJzKiBkZSB2YXJpYWJsZSBpbnN0cnVtZW50YWwgcGFyYSAqZWR1YyogeSBwb3IgdGFudG8gbm8gaGF5IHNvYnJlaWRlbnRpZmljYWNpw7NuLg0KDQoqKkVsIG1vZGVsbyBlc3RhIGV4YWN0YW1lbnRlIGlkZW50aWZpY2Fkby4qKg0K