Maldonado Mosqueda Fabiola / Álvarez Díaz Carlos Alberto

Group: 2EV9

As part of the final project, the ENOE database will be analyzed, so, we need the next bookstore:

library(haven)
library(car)
library(stargazer)
library(lmtest)
SDEMT118 <- read_dta("C:/Users/HP 425/Downloads/SDEMT118.dta")
View(SDEMT118)

We have the next model:

ingocup = B0 + B1mujer + B2eda + B3eda2 + B4aniosesc + B5casado + B6hrsocup + u

With the independent variables:

table(SDEMT118$sex) # sex
table(SDEMT118$eda) # age
table(SDEMT118$anios_esc) # years of school
table(SDEMT118$e_con) # civil status
table(SDEMT118$hrsocup) # hours worked per week

And the dependent variable:

summary(SDEMT118$ingocup) # monthly income

Deleted rows:

SDEMT118 <- SDEMT118[SDEMT118$eda > 18,] # only adults
SDEMT118 <- SDEMT118[SDEMT118$ingocup > 0,] # only income higher than 0
SDEMT118 <- SDEMT118[SDEMT118$anios_esc != 99,] # years of school (no disponible information)

Redecodified variables:

SDEMT118$mujer <- recode(SDEMT118$sex, "1=0; 2=1") # mujer=1; 0=hombre
table(SDEMT118$mujer)

SDEMT118$casado <- recode(SDEMT118$e_con, "5=1; 1=0; 2=0; 3=0; 4=0; 6=0; 9=0") # mujer=1; 0= hombre
table(SDEMT118$casado)

Regression

stargazer(reg, type = 'text')

=================================================
                         Dependent variable:     
                    -----------------------------
                            log(ingocup)         
-------------------------------------------------
mujer                         -0.283***          
                               (0.004)           
                                                 
eda                           0.040***           
                               (0.001)           
                                                 
I(eda2)                      -0.0004***          
                              (0.00001)          
                                                 
anios_esc                     0.075***           
                              (0.0005)           
                                                 
casado                        0.038***           
                               (0.004)           
                                                 
hrsocup                       0.011***           
                              (0.0001)           
                                                 
Constant                      6.540***           
                               (0.017)           
                                                 
-------------------------------------------------
Observations                   112,660           
R2                              0.301            
Adjusted R2                     0.301            
Residual Std. Error      0.641 (df = 112653)     
F Statistic         8,081.319*** (df = 6; 112653)
=================================================
Note:                 *p<0.1; **p<0.05; ***p<0.01

The coefficients are next: -0.283mujer + 0.40eda - 0.0004eda2 + 0.075anios_esc + 0.038casado + 0.011hrsocup

This means:

-Monthly income for woman is lower in 28.3% than a man

-Young people have 40% more income than older people

-One more year of education equals 7.5% more income per month

-Someone who´s married has a monthly income higher in a 3.8% than a single person

-A person who works more hours a week has a slightly higher income (1.1%) per month

Histogram

T Test

We want to know if our independent variables (female, eda, eda2, anios_esc, married and hrsocup) have an impact on our dependent variable (ingocup).

The coefficient in women and eda2 is negative, this tells us that: a woman has a lower income. The coefficient of eda has a favorable sign as well as anios_esc, married and hrsocup. But to convince ourselves of that effect, we’re going to perform a t test.

We want to use the data to prove:

  1. The null hypothesis that the variable “female” has no effect on the monthly income in pesos against the alternative that the variable female has an effect on income. The null hypothesis is H0: b (female) = <0, and the alternative is H1: b (female)> 0.

  2. The null hypothesis that the “eda” has no effect on the monthly income in pesos against the alternative that the age variable has an effect on income. Then the null hypothesis is H0: b (eda) = 0, and the alternative is H1: b (eda)> 0.

  3. The null hypothesis that the “eda2” has no effect on the monthly income in pesos against the alternative that the variable eda2 has an effect on income. Then the null hypothesis is H0: b (eda2) = 0, and the alternative is H1: b (eda2)> 0.

  4. The null hypothesis that “the years of schooling” do not have an estimate in the monthly income in pesos against the alternative that the years of schooling have an effect on income. Then the null hypothesis is H0: B (anios_esc) = 0, and the alternative is H1: b (anios_esc)> 0.

  5. The null hypothesis that marital status “married” has no effect on the monthly income in pesos against the alternative that the married situation has an effect on income. Then the null hypothesis is H0: B (married) = 0, and the alternative is H1: b (married)> 0.

  6. The null hypothesis that the “hours worked per week” do not have an estimate in the monthly income in pesos against the alternative that the hours worked per week have an effect on income. Then the null hypothesis is H0: B (hrsocup) = 0, and the alternative is H1: b (hrsocup)> 0.

Hypothesis

Since N - K - 1 = 112.653 at the 5% level, the critical value is 1.65; the t-statistic in female must be less than 1.65 at the 5% level. The t statistic in female is -0.283 / 0.004 = - 70.75, which is higher than -1.65, therefore the null hypothesis is rejected, at a level of significance of 5%.

Since N - K - 1 = 112.653 at the 5% level, the critical value is 1.65; The statistic in eda should be less than 1.65 at the 5% level. The t statistic in eda is 0.040 / 0.001 = 40, which is higher than 1.65, therefore the null hypothesis is rejected, at a level of significance of 5%.

Since N - K - 1 = 112.653 at the 5% level, the critical value is 1.65; the statistic t in I (eda2) must be less than 1.65 at the 5% level. The statistic t in I (eda2) is -0.0004 / 0.00001 = - 40, which is higher than -1.65 therefore the null hypothesis is rejected, at a level of significance of 5%.

Since N - K - 1 = 112.653 at the 5% level, the critical value is 1.65; the t statistic in anios_esc must be less than 1.65 at the 5% level. The t statistic in anios_esc is 0.075 / 0.0005 = 150, which is higher than 1.65, therefore the null hypothesis is rejected, at a level of significance of 5%.

Since N - K - 1 = 112.653 at the 5% level, the critical value is 1.65; The statistic t in married should be less than 1.65 at the 5% level. The statistic t in married is 0.038 / 0.004 = 9.5, which is higher than 1.65, therefore the null hypothesis is rejected, at a level of significance of 5%.

Since N - K - 1 = 112.653 at the 5% level, the critical value is 1.65; the t statistic in hrsocup must be less than 1.65 at the 5% level. The t statistic in hrsocup is 0.011 / 0.0001 = 110, which is higher than 1.65, therefore the null hypothesis is rejected, at a level of significance of 5%.

Breusch Pagan Test

bptest(reg)

    studentized Breusch-Pagan test

data:  reg
BP = 4151.9, df = 6, p-value < 2.2e-16

-If p-value < 0.05; then null hypothesis is rejected, we have heteroscedasticity

-If p-value > 0.05; then we fail to reject the null hypothesis, we have homoscedasticity

So, in this case 2.2e-16 is smaller than 0.05, the null hypothesis is reject, we have heteroscedasticity

White Test

bptest(reg, ~ fitted(reg) + I(fitted(reg)^2))

    studentized Breusch-Pagan test

data:  reg
BP = 2774.6, df = 2, p-value < 2.2e-16

-If p-value < 0.05; then null hypothesis is rejected, we have heteroscedasticity

-If p-value > 0.05; then we fail to reject the null hypothesis, we have homoscedasticity

So, like Breusch Pagan test, here we can observe 2.2e-16 is smaller than 0.05, the null hypothesis is reject, we have heteroscedasticity

Regression with Heteroskedasticity Corrected Standard Errors

coeftest(reg, vcov = hccm(reg, type="hc0"))

t test of coefficients:

               Estimate  Std. Error  t value  Pr(>|t|)    
(Intercept)  6.54015639  0.01919766 340.6746 < 2.2e-16 ***
mujer       -0.28333031  0.00411492 -68.8544 < 2.2e-16 ***
eda          0.03991880  0.00090668  44.0274 < 2.2e-16 ***
I(eda^2)    -0.00041783  0.00001079 -38.7245 < 2.2e-16 ***
anios_esc    0.07457117  0.00052620 141.7169 < 2.2e-16 ***
casado       0.03820120  0.00421374   9.0659 < 2.2e-16 ***
hrsocup      0.01123985  0.00013674  82.1986 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Dummy Variables

Now, we create three dummy variables (married-female, single-man, and single-female) and remove the mujer and casado from the original equation.

marrfem <- as.numeric(SDEMT118$mujer==1 & SDEMT118$casado==1)
singman <- as.numeric(SDEMT118$mujer==0 & SDEMT118$casado==0)
singfem <- as.numeric(SDEMT118$mujer==1 & SDEMT118$casado==0)

Regression with Dummy Variables

stargazer(reg2, type = 'text')

=================================================
                         Dependent variable:     
                    -----------------------------
                            log(ingocup)         
-------------------------------------------------
marrfem                       -0.352***          
                               (0.006)           
                                                 
singman                       -0.085***          
                               (0.005)           
                                                 
singfem                       -0.319***          
                               (0.005)           
                                                 
eda                           0.040***           
                               (0.001)           
                                                 
I(eda2)                      -0.0004***          
                              (0.00001)          
                                                 
anios_esc                     0.074***           
                              (0.0005)           
                                                 
hrsocup                       0.011***           
                              (0.0001)           
                                                 
Constant                      6.617***           
                               (0.019)           
                                                 
-------------------------------------------------
Observations                   112,660           
R2                              0.302            
Adjusted R2                     0.302            
Residual Std. Error      0.641 (df = 112652)     
F Statistic         6,971.641*** (df = 7; 112652)
=================================================
Note:                 *p<0.1; **p<0.05; ***p<0.01

We have the results:

log(ingocup) = - 0.352marrfem - 0.085singman - 0.319singfem + 0.40eda - 0.0004eda2 + 0.075anios_esc + 0.011hrsocup

This means:

-Woman who is married has a lower monthly income (35.2%) than a married man

-A man who isn´t married has a lower monthly income (8.5%) than a married man

-A woman who isn´t married has a lower monthly income (31.9%) than a married man

Economic Theory

According to the economic theory, yes, we consider that the first regression model has problems of redundant variables, the second model classifies better the relationship between the civil status, the gender and the impact they have on monthly income of the people.

LS0tDQp0aXRsZTogIkZpbmFsIFByb2plY3Qgd2l0aCBFTk9FIERhdGFiYXNlIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMjI01hbGRvbmFkbyBNb3NxdWVkYSBGYWJpb2xhIC8gwWx2YXJleiBE7WF6IENhcmxvcyBBbGJlcnRvDQojIyMjR3JvdXA6IDJFVjkNCg0KDQoNCkFzIHBhcnQgb2YgdGhlIGZpbmFsIHByb2plY3QsIHRoZSBFTk9FIGRhdGFiYXNlIHdpbGwgYmUgYW5hbHl6ZWQsIHNvLCB3ZSBuZWVkIHRoZSBuZXh0IGJvb2tzdG9yZToNCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSkNCmBgYA0KDQoNCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQ0KbGlicmFyeShoYXZlbikNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShzdGFyZ2F6ZXIpDQpsaWJyYXJ5KGxtdGVzdCkNCmBgYA0KDQoNCmBgYHtyfQ0KU0RFTVQxMTggPC0gcmVhZF9kdGEoIkM6L1VzZXJzL0hQIDQyNS9Eb3dubG9hZHMvU0RFTVQxMTguZHRhIikNClZpZXcoU0RFTVQxMTgpDQpgYGANCg0KKipXZSBoYXZlIHRoZSBuZXh0IG1vZGVsOioqDQoNCmluZ29jdXAgPSBCMCArIEIxbXVqZXIgKyBCMmVkYSArIEIzZWRhMiArIEI0YW5pb3Nlc2MgKyBCNWNhc2FkbyArIEI2aHJzb2N1cCArIHUNCg0KDQpXaXRoIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZXM6DQpgYGB7cn0NCnRhYmxlKFNERU1UMTE4JHNleCkgIyBzZXgNCnRhYmxlKFNERU1UMTE4JGVkYSkgIyBhZ2UNCnRhYmxlKFNERU1UMTE4JGFuaW9zX2VzYykgIyB5ZWFycyBvZiBzY2hvb2wNCnRhYmxlKFNERU1UMTE4JGVfY29uKSAjIGNpdmlsIHN0YXR1cw0KdGFibGUoU0RFTVQxMTgkaHJzb2N1cCkgIyBob3VycyB3b3JrZWQgcGVyIHdlZWsNCmBgYA0KDQpBbmQgdGhlIGRlcGVuZGVudCB2YXJpYWJsZToNCmBgYHtyfQ0Kc3VtbWFyeShTREVNVDExOCRpbmdvY3VwKSAjIG1vbnRobHkgaW5jb21lDQpgYGANCg0KRGVsZXRlZCByb3dzOg0KDQpgYGB7cn0NClNERU1UMTE4IDwtIFNERU1UMTE4W1NERU1UMTE4JGVkYSA+IDE4LF0gIyBvbmx5IGFkdWx0cw0KU0RFTVQxMTggPC0gU0RFTVQxMThbU0RFTVQxMTgkaW5nb2N1cCA+IDAsXSAjIG9ubHkgaW5jb21lIGhpZ2hlciB0aGFuIDANClNERU1UMTE4IDwtIFNERU1UMTE4W1NERU1UMTE4JGFuaW9zX2VzYyAhPSA5OSxdICMgeWVhcnMgb2Ygc2Nob29sIChubyBkaXNwb25pYmxlIGluZm9ybWF0aW9uKQ0KYGBgDQoNClJlZGVjb2RpZmllZCB2YXJpYWJsZXM6IA0KYGBge3J9DQpTREVNVDExOCRtdWplciA8LSByZWNvZGUoU0RFTVQxMTgkc2V4LCAiMT0wOyAyPTEiKSAjIG11amVyPTE7IDA9aG9tYnJlDQp0YWJsZShTREVNVDExOCRtdWplcikNCg0KU0RFTVQxMTgkY2FzYWRvIDwtIHJlY29kZShTREVNVDExOCRlX2NvbiwgIjU9MTsgMT0wOyAyPTA7IDM9MDsgND0wOyA2PTA7IDk9MCIpICMgbXVqZXI9MTsgMD0gaG9tYnJlDQp0YWJsZShTREVNVDExOCRjYXNhZG8pDQpgYGANCg0KIyMjUmVncmVzc2lvbg0KYGBge3J9DQpyZWcgPC0gbG0obG9nKGluZ29jdXApIH4gbXVqZXIgKyBlZGEgKyBJKGVkYV4yKSArIGFuaW9zX2VzYyArIGNhc2FkbyArIGhyc29jdXAsIGRhdGE9U0RFTVQxMTgpDQpzdGFyZ2F6ZXIocmVnLCB0eXBlID0gJ3RleHQnKQ0KYGBgDQoNClRoZSBjb2VmZmljaWVudHMgYXJlIG5leHQ6IC0wLjI4M211amVyICsgMC40MGVkYSAtIDAuMDAwNGVkYTIgKyAwLjA3NWFuaW9zX2VzYyArIDAuMDM4Y2FzYWRvICsgMC4wMTFocnNvY3VwDQoNClRoaXMgbWVhbnM6IA0KDQogICAtTW9udGhseSBpbmNvbWUgZm9yIHdvbWFuIGlzIGxvd2VyIGluIDI4LjMlIHRoYW4gYSBtYW4NCiANCiAgIC1Zb3VuZyBwZW9wbGUgaGF2ZSA0MCUgbW9yZSBpbmNvbWUgdGhhbiBvbGRlciBwZW9wbGUNCiANCiAgIC1PbmUgbW9yZSB5ZWFyIG9mIGVkdWNhdGlvbiBlcXVhbHMgNy41JSBtb3JlIGluY29tZSBwZXIgbW9udGgNCiANCiAgIC1Tb21lb25lIHdob7RzIG1hcnJpZWQgaGFzIGEgbW9udGhseSBpbmNvbWUgaGlnaGVyIGluIGEgMy44JSB0aGFuIGEgc2luZ2xlIHBlcnNvbg0KIA0KICAgLUEgcGVyc29uIHdobyB3b3JrcyBtb3JlIGhvdXJzIGEgd2VlayBoYXMgYSBzbGlnaHRseSBoaWdoZXIgaW5jb21lICgxLjElKSBwZXIgbW9udGgNCg0KIyMjSGlzdG9ncmFtDQpgYGB7cn0NCmhpc3QobG9nKFNERU1UMTE4JGluZ29jdXApLCBjb2wgPSAicHVycGxlIiwgbWFpbj0iSGlzdG9ncmFtIG9mIHRoZSBtb250aGx5IGluY29tZSIsIHhsYWI9ImluZ29jdXAiKQ0KYGBgDQoNCg0KIyMjVCBUZXN0DQpXZSB3YW50IHRvIGtub3cgaWYgb3VyIGluZGVwZW5kZW50IHZhcmlhYmxlcyAoZmVtYWxlLCBlZGEsIGVkYTIsIGFuaW9zX2VzYywgbWFycmllZCBhbmQgaHJzb2N1cCkgaGF2ZSBhbiBpbXBhY3Qgb24gb3VyIGRlcGVuZGVudCB2YXJpYWJsZSAoaW5nb2N1cCkuDQoJDQpUaGUgY29lZmZpY2llbnQgaW4gd29tZW4gYW5kIGVkYTIgaXMgbmVnYXRpdmUsIHRoaXMgdGVsbHMgdXMgdGhhdDogYSB3b21hbiBoYXMgYSBsb3dlciBpbmNvbWUuIFRoZSBjb2VmZmljaWVudCBvZiBlZGEgaGFzIGEgZmF2b3JhYmxlIHNpZ24gYXMgd2VsbCBhcyBhbmlvc19lc2MsIG1hcnJpZWQgYW5kIGhyc29jdXAuIEJ1dCB0byBjb252aW5jZSBvdXJzZWx2ZXMgb2YgdGhhdCBlZmZlY3QsIHdlJ3JlIGdvaW5nIHRvIHBlcmZvcm0gYSB0IHRlc3QuDQoNCioqV2Ugd2FudCB0byB1c2UgdGhlIGRhdGEgdG8gcHJvdmU6KioNCg0KMSkgVGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSB2YXJpYWJsZSAiZmVtYWxlIiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtb250aGx5IGluY29tZSBpbiBwZXNvcyBhZ2FpbnN0IHRoZSBhbHRlcm5hdGl2ZSB0aGF0IHRoZSB2YXJpYWJsZSBmZW1hbGUgaGFzIGFuIGVmZmVjdCBvbiBpbmNvbWUuIFRoZSBudWxsIGh5cG90aGVzaXMgaXMgSDA6IGIgKGZlbWFsZSkgPSA8MCwgYW5kIHRoZSBhbHRlcm5hdGl2ZSBpcyBIMTogYiAoZmVtYWxlKT4gMC4NCg0KMikgVGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZSAiZWRhIiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtb250aGx5IGluY29tZSBpbiBwZXNvcyBhZ2FpbnN0IHRoZSBhbHRlcm5hdGl2ZSB0aGF0IHRoZSBhZ2UgdmFyaWFibGUgaGFzIGFuIGVmZmVjdCBvbiBpbmNvbWUuIFRoZW4gdGhlIG51bGwgaHlwb3RoZXNpcyBpcyBIMDogYiAoZWRhKSA9IDAsIGFuZCB0aGUgYWx0ZXJuYXRpdmUgaXMgSDE6IGIgKGVkYSk+IDAuDQoNCjMpIFRoZSBudWxsIGh5cG90aGVzaXMgdGhhdCB0aGUgImVkYTIiIGhhcyBubyBlZmZlY3Qgb24gdGhlIG1vbnRobHkgaW5jb21lIGluIHBlc29zIGFnYWluc3QgdGhlIGFsdGVybmF0aXZlIHRoYXQgdGhlIHZhcmlhYmxlIGVkYTIgaGFzIGFuIGVmZmVjdCBvbiBpbmNvbWUuIFRoZW4gdGhlIG51bGwgaHlwb3RoZXNpcyBpcyBIMDogYiAoZWRhMikgPSAwLCBhbmQgdGhlIGFsdGVybmF0aXZlIGlzIEgxOiBiIChlZGEyKT4gMC4NCg0KNCkgVGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0ICJ0aGUgeWVhcnMgb2Ygc2Nob29saW5nIiBkbyBub3QgaGF2ZSBhbiBlc3RpbWF0ZSBpbiB0aGUgbW9udGhseSBpbmNvbWUgaW4gcGVzb3MgYWdhaW5zdCB0aGUgYWx0ZXJuYXRpdmUgdGhhdCB0aGUgeWVhcnMgb2Ygc2Nob29saW5nIGhhdmUgYW4gZWZmZWN0IG9uIGluY29tZS4gVGhlbiB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIEgwOiBCIChhbmlvc19lc2MpID0gMCwgYW5kIHRoZSBhbHRlcm5hdGl2ZSBpcyBIMTogYiAoYW5pb3NfZXNjKT4gMC4NCg0KNSkgVGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IG1hcml0YWwgc3RhdHVzICJtYXJyaWVkIiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtb250aGx5IGluY29tZSBpbiBwZXNvcyBhZ2FpbnN0IHRoZSBhbHRlcm5hdGl2ZSB0aGF0IHRoZSBtYXJyaWVkIHNpdHVhdGlvbiBoYXMgYW4gZWZmZWN0IG9uIGluY29tZS4gVGhlbiB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIEgwOiBCIChtYXJyaWVkKSA9IDAsIGFuZCB0aGUgYWx0ZXJuYXRpdmUgaXMgSDE6IGIgKG1hcnJpZWQpPiAwLg0KDQo2KSBUaGUgbnVsbCBoeXBvdGhlc2lzIHRoYXQgdGhlICJob3VycyB3b3JrZWQgcGVyIHdlZWsiIGRvIG5vdCBoYXZlIGFuIGVzdGltYXRlIGluIHRoZSBtb250aGx5IGluY29tZSBpbiBwZXNvcyBhZ2FpbnN0IHRoZSBhbHRlcm5hdGl2ZSB0aGF0IHRoZSBob3VycyB3b3JrZWQgcGVyIHdlZWsgaGF2ZSBhbiBlZmZlY3Qgb24gaW5jb21lLiBUaGVuIHRoZSBudWxsIGh5cG90aGVzaXMgaXMgSDA6IEIgKGhyc29jdXApID0gMCwgYW5kIHRoZSBhbHRlcm5hdGl2ZSBpcyBIMTogYiAoaHJzb2N1cCk+IDAuDQoNCioqSHlwb3RoZXNpcyoqDQoNClNpbmNlIE4gLSBLIC0gMSA9IDExMi42NTMgYXQgdGhlIDUlIGxldmVsLCB0aGUgY3JpdGljYWwgdmFsdWUgaXMgMS42NTsgdGhlIHQtc3RhdGlzdGljIGluIGZlbWFsZSBtdXN0IGJlIGxlc3MgdGhhbiAxLjY1IGF0IHRoZSA1JSBsZXZlbC4gVGhlIHQgc3RhdGlzdGljIGluIGZlbWFsZSBpcyAtMC4yODMgLyAwLjAwNCA9IC0gNzAuNzUsIHdoaWNoIGlzIGhpZ2hlciB0aGFuIC0xLjY1LCB0aGVyZWZvcmUgdGhlIG51bGwgaHlwb3RoZXNpcyBpcyByZWplY3RlZCwgYXQgYSBsZXZlbCBvZiBzaWduaWZpY2FuY2Ugb2YgNSUuDQoNClNpbmNlIE4gLSBLIC0gMSA9IDExMi42NTMgYXQgdGhlIDUlIGxldmVsLCB0aGUgY3JpdGljYWwgdmFsdWUgaXMgMS42NTsgVGhlIHN0YXRpc3RpYyBpbiBlZGEgc2hvdWxkIGJlIGxlc3MgdGhhbiAxLjY1IGF0IHRoZSA1JSBsZXZlbC4gVGhlIHQgc3RhdGlzdGljIGluIGVkYSBpcyAwLjA0MCAvIDAuMDAxID0gNDAsIHdoaWNoIGlzIGhpZ2hlciB0aGFuIDEuNjUsIHRoZXJlZm9yZSB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIHJlamVjdGVkLCBhdCBhIGxldmVsIG9mIHNpZ25pZmljYW5jZSBvZiA1JS4NCg0KU2luY2UgTiAtIEsgLSAxID0gMTEyLjY1MyBhdCB0aGUgNSUgbGV2ZWwsIHRoZSBjcml0aWNhbCB2YWx1ZSBpcyAxLjY1OyB0aGUgc3RhdGlzdGljIHQgaW4gSSAoZWRhMikgbXVzdCBiZSBsZXNzIHRoYW4gMS42NSBhdCB0aGUgNSUgbGV2ZWwuIFRoZSBzdGF0aXN0aWMgdCBpbiBJIChlZGEyKSBpcyAtMC4wMDA0IC8gMC4wMDAwMSA9IC0gNDAsIHdoaWNoIGlzIGhpZ2hlciB0aGFuIC0xLjY1IHRoZXJlZm9yZSB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIHJlamVjdGVkLCBhdCBhIGxldmVsIG9mIHNpZ25pZmljYW5jZSBvZiA1JS4NCg0KU2luY2UgTiAtIEsgLSAxID0gMTEyLjY1MyBhdCB0aGUgNSUgbGV2ZWwsIHRoZSBjcml0aWNhbCB2YWx1ZSBpcyAxLjY1OyB0aGUgdCBzdGF0aXN0aWMgaW4gYW5pb3NfZXNjIG11c3QgYmUgbGVzcyB0aGFuIDEuNjUgYXQgdGhlIDUlIGxldmVsLiBUaGUgdCBzdGF0aXN0aWMgaW4gYW5pb3NfZXNjIGlzIDAuMDc1IC8gMC4wMDA1ID0gMTUwLCB3aGljaCBpcyBoaWdoZXIgdGhhbiAxLjY1LCB0aGVyZWZvcmUgdGhlIG51bGwgaHlwb3RoZXNpcyBpcyByZWplY3RlZCwgYXQgYSBsZXZlbCBvZiBzaWduaWZpY2FuY2Ugb2YgNSUuDQoNClNpbmNlIE4gLSBLIC0gMSA9IDExMi42NTMgYXQgdGhlIDUlIGxldmVsLCB0aGUgY3JpdGljYWwgdmFsdWUgaXMgMS42NTsgVGhlIHN0YXRpc3RpYyB0IGluIG1hcnJpZWQgc2hvdWxkIGJlIGxlc3MgdGhhbiAxLjY1IGF0IHRoZSA1JSBsZXZlbC4gVGhlIHN0YXRpc3RpYyB0IGluIG1hcnJpZWQgaXMgMC4wMzggLyAwLjAwNCA9IDkuNSwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gMS42NSwgdGhlcmVmb3JlIHRoZSBudWxsIGh5cG90aGVzaXMgaXMgcmVqZWN0ZWQsIGF0IGEgbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlIG9mIDUlLg0KDQpTaW5jZSBOIC0gSyAtIDEgPSAxMTIuNjUzIGF0IHRoZSA1JSBsZXZlbCwgdGhlIGNyaXRpY2FsIHZhbHVlIGlzIDEuNjU7IHRoZSB0IHN0YXRpc3RpYyBpbiBocnNvY3VwIG11c3QgYmUgbGVzcyB0aGFuIDEuNjUgYXQgdGhlIDUlIGxldmVsLiBUaGUgdCBzdGF0aXN0aWMgaW4gaHJzb2N1cCBpcyAwLjAxMSAvIDAuMDAwMSA9IDExMCwgd2hpY2ggaXMgaGlnaGVyIHRoYW4gMS42NSwgdGhlcmVmb3JlIHRoZSBudWxsIGh5cG90aGVzaXMgaXMgcmVqZWN0ZWQsIGF0IGEgbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlIG9mIDUlLg0KDQoNCg0KIyMjQnJldXNjaCBQYWdhbiBUZXN0DQpgYGB7cn0NCmJwdGVzdChyZWcpDQpgYGANCg0KDQogLUlmIHAtdmFsdWUgPCAwLjA1OyB0aGVuIG51bGwgaHlwb3RoZXNpcyBpcyByZWplY3RlZCwgd2UgaGF2ZSBoZXRlcm9zY2VkYXN0aWNpdHkNCiANCiAtSWYgcC12YWx1ZSA+IDAuMDU7IHRoZW4gd2UgZmFpbCB0byByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcywgd2UgaGF2ZSBob21vc2NlZGFzdGljaXR5DQogDQogDQpTbywgaW4gdGhpcyBjYXNlIDIuMmUtMTYgaXMgc21hbGxlciB0aGFuIDAuMDUsIHRoZSBudWxsIGh5cG90aGVzaXMgaXMgcmVqZWN0LCB3ZSBoYXZlIGhldGVyb3NjZWRhc3RpY2l0eQ0KDQoNCiMjI1doaXRlIFRlc3QNCmBgYHtyfQ0KYnB0ZXN0KHJlZywgfiBmaXR0ZWQocmVnKSArIEkoZml0dGVkKHJlZyleMikpDQpgYGANCg0KIC1JZiBwLXZhbHVlIDwgMC4wNTsgdGhlbiBudWxsIGh5cG90aGVzaXMgaXMgcmVqZWN0ZWQsIHdlIGhhdmUgaGV0ZXJvc2NlZGFzdGljaXR5DQogDQogLUlmIHAtdmFsdWUgPiAwLjA1OyB0aGVuIHdlIGZhaWwgdG8gcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMsIHdlIGhhdmUgaG9tb3NjZWRhc3RpY2l0eQ0KIA0KIA0KU28sIGxpa2UgQnJldXNjaCBQYWdhbiB0ZXN0LCBoZXJlIHdlIGNhbiBvYnNlcnZlIDIuMmUtMTYgaXMgc21hbGxlciB0aGFuIDAuMDUsIHRoZSBudWxsIGh5cG90aGVzaXMgaXMgcmVqZWN0LCB3ZSBoYXZlIGhldGVyb3NjZWRhc3RpY2l0eQ0KDQoNCiMjI1JlZ3Jlc3Npb24gd2l0aCBIZXRlcm9za2VkYXN0aWNpdHkgQ29ycmVjdGVkIFN0YW5kYXJkIEVycm9ycw0KYGBge3J9DQpjb2VmdGVzdChyZWcsIHZjb3YgPSBoY2NtKHJlZywgdHlwZT0iaGMwIikpDQpgYGANCg0KDQojIyNEdW1teSBWYXJpYWJsZXMNCk5vdywgd2UgY3JlYXRlICB0aHJlZSAgZHVtbXkgIHZhcmlhYmxlcyAgKG1hcnJpZWQtZmVtYWxlLCAgc2luZ2xlLW1hbiwgIGFuZCAgc2luZ2xlLWZlbWFsZSkgIGFuZCByZW1vdmUgIHRoZSBtdWplciBhbmQgY2FzYWRvIGZyb20gIHRoZSAgb3JpZ2luYWwgIGVxdWF0aW9uLg0KDQpgYGB7cn0NCm1hcnJmZW0gPC0gYXMubnVtZXJpYyhTREVNVDExOCRtdWplcj09MSAmIFNERU1UMTE4JGNhc2Fkbz09MSkNCnNpbmdtYW4gPC0gYXMubnVtZXJpYyhTREVNVDExOCRtdWplcj09MCAmIFNERU1UMTE4JGNhc2Fkbz09MCkNCnNpbmdmZW0gPC0gYXMubnVtZXJpYyhTREVNVDExOCRtdWplcj09MSAmIFNERU1UMTE4JGNhc2Fkbz09MCkNCmBgYA0KDQoNCiMjI1JlZ3Jlc3Npb24gd2l0aCBEdW1teSBWYXJpYWJsZXMNCmBgYHtyfQ0KcmVnMiA8LSBsbShsb2coaW5nb2N1cCkgfiBtYXJyZmVtICsgc2luZ21hbiArIHNpbmdmZW0gKyBlZGEgKyBJKGVkYV4yKSArIGFuaW9zX2VzYyArIGhyc29jdXAsIGRhdGE9U0RFTVQxMTgpDQpzdGFyZ2F6ZXIocmVnMiwgdHlwZSA9ICd0ZXh0JykNCmBgYA0KDQpXZSBoYXZlIHRoZSByZXN1bHRzOiANCg0KbG9nKGluZ29jdXApID0gLSAwLjM1Mm1hcnJmZW0gLSAwLjA4NXNpbmdtYW4gLSAwLjMxOXNpbmdmZW0gKyAwLjQwZWRhIC0gMC4wMDA0ZWRhMiArIDAuMDc1YW5pb3NfZXNjICsgMC4wMTFocnNvY3VwDQoNClRoaXMgbWVhbnM6DQoNCiAtV29tYW4gd2hvIGlzIG1hcnJpZWQgaGFzIGEgbG93ZXIgbW9udGhseSBpbmNvbWUgKDM1LjIlKSB0aGFuIGEgbWFycmllZCBtYW4NCiANCiAtQSBtYW4gd2hvIGlzbrR0IG1hcnJpZWQgaGFzIGEgbG93ZXIgbW9udGhseSBpbmNvbWUgKDguNSUpIHRoYW4gYSBtYXJyaWVkIG1hbg0KIA0KIC1BIHdvbWFuIHdobyBpc260dCBtYXJyaWVkIGhhcyBhIGxvd2VyIG1vbnRobHkgaW5jb21lICgzMS45JSkgdGhhbiBhIG1hcnJpZWQgbWFuDQoNCg0KIyMjRWNvbm9taWMgVGhlb3J5DQpBY2NvcmRpbmcgdG8gdGhlIGVjb25vbWljIHRoZW9yeSwgeWVzLCB3ZSBjb25zaWRlciB0aGF0IHRoZSBmaXJzdCByZWdyZXNzaW9uIG1vZGVsIGhhcyBwcm9ibGVtcyBvZiByZWR1bmRhbnQgdmFyaWFibGVzLCB0aGUgc2Vjb25kIG1vZGVsIGNsYXNzaWZpZXMgYmV0dGVyIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY2l2aWwgc3RhdHVzLCB0aGUgZ2VuZGVyIGFuZCB0aGUgaW1wYWN0IHRoZXkgaGF2ZSBvbiBtb250aGx5IGluY29tZSBvZiB0aGUgcGVvcGxlLg0KDQoNCg0KDQoNCg0K