Research Question:

Is there a relationship between Sex and Survival?


Simple model:

model1 <- glm(Survived ~ Sex, family=binomial(link='logit'), data=data)
model1$coefficients


Detecting Confounding Variables

Example: Is Age a confounder of Sex?

Example: Is Pclass a confounder of Sex?

Let’s settle on considering Pclass a confounding variable and include it in the model alongside Sex.

More analysis is needed though…


Bivariate Association Analysis

Let’s check the bivariate associations between Pclass and Sex and between Pclass and Survived to see if the theory is supported by the data.

Given that both are categorical variables we must use a Chi-square test. This test allows us to determine whether there is a statistically significant difference between the expected frequencies and the observed frequencies of the relevant contingency tables:

table(Pclass, Sex)
chisq.test(Pclass, Sex)
table(Pclass, Survived)
chisq.test(Pclass, Survived)

Interpretation of the above outputs: Given that in both cases p<0.5, Pclass is significantly associated with both Sex and Survived, thus the variable seems to meet the definition of a confounding variable.


Greater than 10% change in x1 coefficient?

Now let’[s addd Pclass to the model:

model2 <- glm(Survived ~ Sex + Pclass, family=binomial(link='logit'), data=data)
model2$coefficients

The coefficient of Sexmale does not change much (only 5%) which suggests that Pclass is not confounder. This contradicts the previous finding.


Is the model better when we include the confounding variable?


The residual deviance of the model that includes Pclass is lower. Based on this we can reject \(H_0\) that there is no difference betwwen full and reduced model i.e. that the full model is not significantly better than the reduced model. Thus we conclude that we have evidence to support \(H_a\) that the model that includes Pclass is significantly better. This is confirmed by the ‘lrtest()’ function below:

lrtest(model1, model2)
#??lr.test

So, keep it or not? It depends…Keep Pclass for now….


Assessing Collinearity

Let’s look at adding collinear variables AgeGroup and AgeGroup2029.

We will assess which one is better by looking at AIC. Not that we don’t simply model say Survived and AgeGroup but rather look at how their respective additions to the existing model impact the results.

model3 <- glm(Survived ~ Sex + Pclass + AgeGroup, family=binomial(link='logit'), data=data)

model4 <- glm(Survived ~ Sex + Pclass + AgeGroup2029, family=binomial(link='logit'), data=data)

AIC for model with AgeGroup: 965.929 AIC for model with AgeGroup2029: 965.929

AIC is slightly lower for the model with *AgeGroup** so moving forward the model will include Sex, Pclass, AgeGroup explanatory variables.

careful, this only temporary, AgeGroup results in missing data.


Assess Interaction via Likelihood Ratio Test

If some variable does not meet the criteria of a confounder, it could still be an effect modifier! Does the effect that \(x1\) has on the odds of \(y\) depend on some other variable \(x2\)? If so then we call the variable \(x2\) an effect modifier

Thus now we try to answer the question:

Does the effect that Sex has on Survived depend on Pclass?

An interaction terms is the multiplication of two variable with each other e.g. Sex * Pclass.

We can use a Likelihood Ratio Test to compare models with and without a \(Sex \times Pclass\) interaction term.

To compare two models we use the anova() function.

model3bis <- glm(Survived ~ Sex + Pclass + AgeGroup + Sex * Pclass, family=binomial(link='logit'), data=data)
anova(model3, model3bis, test='Chisq')

We can see that the p-value is < 0.5 and we reject the null hypothesis that the residual deviance is the same for models that do and do not include the interaction term. The model that includes the interaction term IS significantly better.

This suggests that Pclass is an effect modifier. The effect of Sex on the odds of Survived varies, or differs, depending on Pclass.

There is significant interaction between Sex and Pclass.

This means that we want to report on the effect of Pclass for different Sex categories: anything we say about the effect of Sex on Survived needs to be Pclass-specific.

Can a class be both a confounder and an effect modifier??

model3bis <- glm(Survived ~ Sex + Pclass + AgeGroup + Sex * Pclass, family=binomial(link='logit'), data=data)
summary(model3)
#summary(model3bis)

Note that if the effect modifier was continuous e.g. Age we need to do the calculations for the Pclass-specific odds ratios by hand and assign possible values to compare groups e.g. Age=50, Age=60, etc. Example: \(b_1 + 50 \times (age \times survived interaction term)\) (see video 17:44).

Extra step (comparfed to LR) to make log-odds more interpretable is to compute the odd-ratios by exponentiating the log-odds ratios.

LS0tDQp0aXRsZTogIkludGVycHJldGluZyB0aGUgT3V0cHV0IG9mIGEgTG9naXN0aWMgUmVncmVzc2lvbiBNb2RlbCAoUGFydCAyKSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1UUlVFfQ0KbGlicmFyeShlcGlEaXNwbGF5KSAjIGxpa2VsaWhvb2QgcmF0aW8gdGVzdA0Kb3B0aW9ucyhkaWdpdHM9MykNCmF0dGFjaChkYXRhKSAjIHJ1biB0aXRhbmljX3RyYWluLlIgZmlyc3QNCmBgYA0KDQo8YnI+DQoNCiMjIyBSZXNlYXJjaCBRdWVzdGlvbjogDQoNCj4gIElzIHRoZXJlIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gU2V4IGFuZCBTdXJ2aXZhbD8NCg0KKiBCZWNhdXNlIHdlIGhhdmUgYSBiaW5hcnkgb3V0Y29tZSwgd2UgY2FuIHVzZSBsb2dpc3RpYyByZWdyZXNzaW9uLg0KKiBXaGVuIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhIHNpbmdsZSBYIHZhcmlhYmxlIGFuZCBZIGl0IGlzIHJlZmVycmVkIHRvIGFzIGEgY29tcGFyYXRpdmUsIG9yICplZmZlY3Qgc2l6ZSosIG1vZGVsLiANCiogV2Ugd2FudCB0byBpbmNsdWRlIG90aGVyIGV4cGxhbmF0b3J5IHZhcmlhYmxlcyBpbiB0aGUgbW9kZWwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBsZWFzdCBiaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFkgKFN1cnZpdmVkKSBhbmQgWCAoU2V4KS4NCg0KPGJyPg0KDQojIyMgU2ltcGxlIG1vZGVsOg0KDQpgYGB7cn0NCm1vZGVsMSA8LSBnbG0oU3Vydml2ZWQgfiBTZXgsIGZhbWlseT1iaW5vbWlhbChsaW5rPSdsb2dpdCcpLCBkYXRhPWRhdGEpDQptb2RlbDEkY29lZmZpY2llbnRzDQpgYGANCg0KKiBUaGUgbG9nLW9kZHMgb2YgU3Vydml2YWwgaXMgYHIgbW9kZWwxJGNvZWZmaWNpZW50c1syXWAgdGltZXMgaGlnaGVyIGZvciBtZW4gY29tcGFyZWQgdG8gd29tZW4uIA0KKiBPZGRzLXJhdGlvOiBNZW4gaGF2ZSBgciBleHAobW9kZWwxJGNvZWZmaWNpZW50c1syXSlgIHRpbWVzIHRoZSBvZGRzIG9mIHN1cnZpdmFsIChpLmUuIGByIHJvdW5kKChleHAobW9kZWwxJGNvZWZmaWNpZW50c1syXSkgLSAxKSAqMTAwLDApYCUpICB0aGFuIHdvbWVuLg0KKiA5NSUgQ29uZmlkZW5jZSBJbnRlcnZhbCBmb3IgT1IgaXMgYGV4cChiMSArLy0gKFN0LkVycm9yIG9mIGIxICogMS45NikpYDogDQooDQpgciBleHAobW9kZWwxJGNvZWZmaWNpZW50WzJdIC0gKHN1bW1hcnkobW9kZWwxKSRjb2VmZmljaWVudHNbLCAyXVsyXSAqIDEuOTYpKWANCiwgYHIgZXhwKG1vZGVsMSRjb2VmZmljaWVudFsyXSArIChzdW1tYXJ5KG1vZGVsMSkkY29lZmZpY2llbnRzWywgMl1bMl0gKiAxLjk2KSlgDQopICANCg0KPGJyPg0KDQojIyMgRGV0ZWN0aW5nIENvbmZvdW5kaW5nIFZhcmlhYmxlcw0KDQoqIFNhbWUgcHJpbmNpcGxlcyBhcyB3aXRoIGxpbmVhciByZWdyZXNzaW9uLg0KKiBEb2VzIHZhcmlhYmxlIG1lZXQgdGhlIGRlZmluaXRpb24gb2YgYSBjb25mb3VuZGVyPw0KICAqIERvZXMgaXQgbWFrZSBzZW5zZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBhc3NvY2lhdGVkIHdpdGggJHhfMSQgYW5kIGlzIGEgcHJlZGljdG9yIG9mICR5JCBhbmQgaXMgbm90IG9uIHRoZSBjYXVzYWwgcGF0aHdheT8NCiAgKiBIb3cgYXJlIHRoZXNlIHZhcmlhYmxlcyBhc3NvY2lhdGVkIHdoZW4gd2UgbG9vayBhdCB0aGVpciAqKmJpdmFyaWF0ZSBhc3NvY2lhdGlvbnMqKj8NCiAgKiBJcyB0aGVyZSBhIGdyZWF0ZXIgdGhhbiAxMCUgY2hhbmdlIGluICRiXzEkPw0KICANCioqRXhhbXBsZSoqOiBJcyAqQWdlKiBhIGNvbmZvdW5kZXIgb2YgKlNleCo/DQoNCiogKkFnZSogaXMgbGlrZWx5IGEgcHJlZGljdG9yIG9mICpTdXJ2aXZlZCo6IGNoaWxkcmVuIGFuZCBlbGRlcmx5IGV2YWN1YXRlZCBmaXJzdC4NCiogQlVUICpBZ2UqIGNvdWxkIGJlIG9uIHRoZSBjYXVzYWwgcGF0aHdheSBiZXR3ZWVuIFNleCBhbmQgU3Vydml2YWw6IGUuZy4geW91bmcgd29tYW4gZXZhY3VhdGVkIGZpcnN0Pw0KDQoqKkV4YW1wbGUqKjogSXMgKlBjbGFzcyogYSBjb25mb3VuZGVyIG9mICpTZXgqPw0KDQoqICpQY2xhc3MqIGlzIGxpa2VseSBhIHByZWRpY3RvciBvZiAqU3Vydml2ZWQqOiBTb2NpYWwgc3RhdHVzIGFuZCB3ZWFsdGggbWF5IGdpdmUgc29tZSBhZHZhbnRhZ2UgZHVyaW5nIGV2YWN1YXRpb24uDQoqIEl0IHdvdWxkbid0IG1ha2Ugc2Vuc2UgdGhhdCAqUGNsYXNzKiBpcyBvbiB0aGUgY2F1c2FsIHBhdGh3YXkgYmV0d2VlbiAqU2V4KiBhbmQgKlN1cnZpdmVkKi4NCiogQnV0IGNvdWxkIHRoZXJlIGJlIGFueSBmb3JtIG9mIGFzc29jaWF0aW9uIGJldHdlZW4gKlNleCogYW5kICpQY2xhc3MqPyBXb3JraW5nIGNsYXNzIG1lbiB0cmF2ZWxsaW5nIDNyZCBjbGFzcyB0byBlbWlncmF0ZSB0byB0aGUgVVNBIGZvciBhIG5ldyBsaWZlPw0KDQpMZXQncyBzZXR0bGUgb24gY29uc2lkZXJpbmcgKlBjbGFzcyogYSBjb25mb3VuZGluZyB2YXJpYWJsZSBhbmQgaW5jbHVkZSBpdCBpbiB0aGUgbW9kZWwgYWxvbmdzaWRlICpTZXgqLg0KDQpNb3JlIGFuYWx5c2lzIGlzIG5lZWRlZCB0aG91Z2guLi4NCg0KPGJyPg0KDQoqKkJpdmFyaWF0ZSBBc3NvY2lhdGlvbiBBbmFseXNpcyoqDQoNCkxldCdzIGNoZWNrIHRoZSBiaXZhcmlhdGUgYXNzb2NpYXRpb25zIGJldHdlZW4gKlBjbGFzcyogYW5kICpTZXgqIGFuZCBiZXR3ZWVuICpQY2xhc3MqIGFuZCAqU3Vydml2ZWQqIHRvIHNlZSBpZiB0aGUgdGhlb3J5IGlzIHN1cHBvcnRlZCBieSB0aGUgZGF0YS4NCg0KR2l2ZW4gdGhhdCBib3RoIGFyZSBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgd2UgbXVzdCB1c2UgYSBDaGktc3F1YXJlIHRlc3QuIFRoaXMgdGVzdCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUgaXMgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZXhwZWN0ZWQgZnJlcXVlbmNpZXMgYW5kIHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcyBvZiB0aGUgcmVsZXZhbnQgY29udGluZ2VuY3kgdGFibGVzOg0KDQoqICpQY2xhc3MqIHZzLiAqU2V4Kg0KYGBge3J9DQp0YWJsZShQY2xhc3MsIFNleCkNCmNoaXNxLnRlc3QoUGNsYXNzLCBTZXgpDQpgYGANCiogKlBjbGFzcyogdnMuICpTdXJ2aXZlZCoNCg0KYGBge3J9DQp0YWJsZShQY2xhc3MsIFN1cnZpdmVkKQ0KY2hpc3EudGVzdChQY2xhc3MsIFN1cnZpdmVkKQ0KYGBgDQoNCkludGVycHJldGF0aW9uIG9mIHRoZSBhYm92ZSBvdXRwdXRzOiBHaXZlbiB0aGF0IGluIGJvdGggY2FzZXMgcDwwLjUsICpQY2xhc3MqIGlzIHNpZ25pZmljYW50bHkgYXNzb2NpYXRlZCB3aXRoIGJvdGggKlNleCogYW5kICpTdXJ2aXZlZCosIHRodXMgdGhlIHZhcmlhYmxlIHNlZW1zIHRvIG1lZXQgdGhlIGRlZmluaXRpb24gb2YgYSBjb25mb3VuZGluZyB2YXJpYWJsZS4NCg0KPGJyPg0KDQoqKkdyZWF0ZXIgdGhhbiAxMCUgY2hhbmdlIGluIHgxIGNvZWZmaWNpZW50PyoqDQoNCiogUmVjYWxsIHRoYXQgaW4gdGhlIHNpbXBsZSBtb2RlbCBgU3Vydml2ZWQgfiBTZXhgLCB0aGUgY29lZmZpY2llbnQgb2YgKlNleG1hbGUqIHdhcyBlcXVhbCB0byBgciBtb2RlbDEkY29lZmZpY2llbnRzWzJdYC4NCg0KTm93IGxldCdbcyBhZGRkICpQY2xhc3MqIHRvIHRoZSBtb2RlbDoNCg0KYGBge3J9DQptb2RlbDIgPC0gZ2xtKFN1cnZpdmVkIH4gU2V4ICsgUGNsYXNzLCBmYW1pbHk9Ymlub21pYWwobGluaz0nbG9naXQnKSwgZGF0YT1kYXRhKQ0KbW9kZWwyJGNvZWZmaWNpZW50cw0KYGBgDQoNClRoZSBjb2VmZmljaWVudCBvZiAqU2V4bWFsZSogZG9lcyBub3QgY2hhbmdlIG11Y2ggKG9ubHkgNSUpIHdoaWNoIHN1Z2dlc3RzIHRoYXQgKlBjbGFzcyogaXMgbm90IGNvbmZvdW5kZXIuIFRoaXMgY29udHJhZGljdHMgdGhlIHByZXZpb3VzIGZpbmRpbmcuIA0KDQo8YnI+DQoNCioqSXMgdGhlIG1vZGVsIGJldHRlciB3aGVuIHdlIGluY2x1ZGUgdGhlIGNvbmZvdW5kaW5nIHZhcmlhYmxlPyoqDQoNCiogQUlDDQoNCiAgKiBBSUMgZm9yIG1vZGVsIDE6IGByIEFJQyhtb2RlbDEpYCANCiAgKiBBSUMgZm9yIG1vZGVsIDI6IGByIEFJQyhtb2RlbDIpYA0KDQo8YnI+DQoNCiogTGlrZWxpaG9vZCBSYXRpbyBUZXN0DQoNCiAgKiBTU1Jlc2lkIHJlZHVjZWQgbW9kZWwgPSAgYHIgbW9kZWwxJGRldmlhbmNlYA0KICAqIFNTUmVzaWQgZnVsbCBtb2RlbCA9IGByIG1vZGVsMiRkZXZpYW5jZWANCg0KDQogICBUaGUgcmVzaWR1YWwgZGV2aWFuY2Ugb2YgdGhlIG1vZGVsIHRoYXQgaW5jbHVkZXMgKlBjbGFzcyogaXMgbG93ZXIuIEJhc2VkIG9uIHRoaXMgd2UgY2FuIHJlamVjdCAkSF8wJCB0aGF0IHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d3dlbiBmdWxsIGFuZCByZWR1Y2VkIG1vZGVsIGkuZS4gdGhhdCB0aGUgZnVsbCBtb2RlbCBpcyBub3Qgc2lnbmlmaWNhbnRseSBiZXR0ZXIgdGhhbiB0aGUgcmVkdWNlZCBtb2RlbC4gVGh1cyB3ZSBjb25jbHVkZSB0aGF0IHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VwcG9ydCAkSF9hJCB0aGF0IHRoZSBtb2RlbCB0aGF0IGluY2x1ZGVzICpQY2xhc3MqIGlzIHNpZ25pZmljYW50bHkgYmV0dGVyLiBUaGlzIGlzIGNvbmZpcm1lZCBieSB0aGUgJ2xydGVzdCgpJyBmdW5jdGlvbiBiZWxvdzoNCg0KYGBge3J9DQpscnRlc3QobW9kZWwxLCBtb2RlbDIpDQojPz9sci50ZXN0DQpgYGANCg0KU28sIGtlZXAgaXQgb3Igbm90PyBJdCBkZXBlbmRzLi4uS2VlcCAqUGNsYXNzKiBmb3Igbm93Li4uLg0KDQo8YnI+DQoNCioqQXNzZXNzaW5nIENvbGxpbmVhcml0eSoqDQoNCkxldCdzIGxvb2sgYXQgYWRkaW5nIGNvbGxpbmVhciB2YXJpYWJsZXMgQWdlR3JvdXAgYW5kIEFnZUdyb3VwMjAyOS4NCg0KV2Ugd2lsbCBhc3Nlc3Mgd2hpY2ggb25lIGlzIGJldHRlciBieSBsb29raW5nIGF0IEFJQy4gTm90IHRoYXQgd2UgZG9uJ3Qgc2ltcGx5IG1vZGVsIHNheSBTdXJ2aXZlZCBhbmQgQWdlR3JvdXAgYnV0IHJhdGhlciBsb29rIGF0IGhvdyB0aGVpciByZXNwZWN0aXZlIGFkZGl0aW9ucyB0byB0aGUgZXhpc3RpbmcgbW9kZWwgaW1wYWN0IHRoZSByZXN1bHRzLg0KDQpgYGB7cn0NCm1vZGVsMyA8LSBnbG0oU3Vydml2ZWQgfiBTZXggKyBQY2xhc3MgKyBBZ2VHcm91cCwgZmFtaWx5PWJpbm9taWFsKGxpbms9J2xvZ2l0JyksIGRhdGE9ZGF0YSkNCg0KbW9kZWw0IDwtIGdsbShTdXJ2aXZlZCB+IFNleCArIFBjbGFzcyArIEFnZUdyb3VwMjAyOSwgZmFtaWx5PWJpbm9taWFsKGxpbms9J2xvZ2l0JyksIGRhdGE9ZGF0YSkNCmBgYA0KQUlDIGZvciBtb2RlbCB3aXRoIEFnZUdyb3VwOiBgciBBSUMobW9kZWwzKWANCkFJQyBmb3IgbW9kZWwgd2l0aCBBZ2VHcm91cDIwMjk6IGByIEFJQyhtb2RlbDMpYA0KDQpBSUMgaXMgc2xpZ2h0bHkgbG93ZXIgZm9yIHRoZSBtb2RlbCB3aXRoICpBZ2VHcm91cCoqIHNvIG1vdmluZyBmb3J3YXJkIHRoZSBtb2RlbCB3aWxsIGluY2x1ZGUgU2V4LCBQY2xhc3MsIEFnZUdyb3VwIGV4cGxhbmF0b3J5IHZhcmlhYmxlcy4NCg0KPiBjYXJlZnVsLCB0aGlzIG9ubHkgdGVtcG9yYXJ5LCBBZ2VHcm91cCByZXN1bHRzIGluIG1pc3NpbmcgZGF0YS4NCg0KPGJyPg0KDQojIyMgQXNzZXNzIEludGVyYWN0aW9uIHZpYSBMaWtlbGlob29kIFJhdGlvIFRlc3QNCg0KKipJZiBzb21lIHZhcmlhYmxlIGRvZXMgbm90IG1lZXQgdGhlIGNyaXRlcmlhIG9mIGEgY29uZm91bmRlciwgaXQgY291bGQgc3RpbGwgYmUgYW4gZWZmZWN0IG1vZGlmaWVyISoqIERvZXMgdGhlIGVmZmVjdCB0aGF0ICR4MSQgaGFzIG9uIHRoZSBvZGRzIG9mICR5JCBkZXBlbmQgb24gc29tZSBvdGhlciB2YXJpYWJsZSAkeDIkPyBJZiBzbyB0aGVuIHdlIGNhbGwgdGhlIHZhcmlhYmxlICR4MiQgYW4gKiplZmZlY3QgbW9kaWZpZXIqKiANCg0KVGh1cyBub3cgd2UgdHJ5IHRvIGFuc3dlciB0aGUgcXVlc3Rpb246DQoNCj4gRG9lcyB0aGUgZWZmZWN0IHRoYXQgKlNleCogaGFzIG9uICpTdXJ2aXZlZCogKipkZXBlbmQgb24qKiAqUGNsYXNzKj8gDQoNCkFuIGludGVyYWN0aW9uIHRlcm1zIGlzIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiB0d28gdmFyaWFibGUgd2l0aCBlYWNoIG90aGVyIGUuZy4gYFNleCAqIFBjbGFzc2AuDQoNCldlIGNhbiB1c2UgYSBMaWtlbGlob29kIFJhdGlvIFRlc3QgdG8gY29tcGFyZSBtb2RlbHMgd2l0aCBhbmQgd2l0aG91dCBhICRTZXggXHRpbWVzIFBjbGFzcyQgW2ludGVyYWN0aW9uIHRlcm1dKGh0dHBzOi8vc3RhdHMuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzEyNzU0OS9jcmVhdGluZy1pbnRlcmFjdGlvbi10ZXJtLWZvci1kdW1teS12YXJpYWJsZXMtYW5kLWNhdGVnb3JpY2FsLXZhcmlhYmxlcykuDQoNClRvIGNvbXBhcmUgdHdvIG1vZGVscyB3ZSB1c2UgdGhlIGBhbm92YSgpYCBmdW5jdGlvbi4NCg0KYGBge3J9DQptb2RlbDNiaXMgPC0gZ2xtKFN1cnZpdmVkIH4gU2V4ICsgUGNsYXNzICsgQWdlR3JvdXAgKyBTZXggKiBQY2xhc3MsIGZhbWlseT1iaW5vbWlhbChsaW5rPSdsb2dpdCcpLCBkYXRhPWRhdGEpDQphbm92YShtb2RlbDMsIG1vZGVsM2JpcywgdGVzdD0nQ2hpc3EnKQ0KYGBgDQoNCldlIGNhbiBzZWUgdGhhdCB0aGUgcC12YWx1ZSBpcyA8IDAuNSBhbmQgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgdGhhdCB0aGUgcmVzaWR1YWwgZGV2aWFuY2UgaXMgdGhlIHNhbWUgZm9yIG1vZGVscyB0aGF0IGRvIGFuZCBkbyBub3QgaW5jbHVkZSB0aGUgaW50ZXJhY3Rpb24gdGVybS4gVGhlIG1vZGVsIHRoYXQgaW5jbHVkZXMgdGhlIGludGVyYWN0aW9uIHRlcm0gSVMgc2lnbmlmaWNhbnRseSBiZXR0ZXIuDQoNClRoaXMgc3VnZ2VzdHMgdGhhdCAqUGNsYXNzKiBpcyBhbiBlZmZlY3QgbW9kaWZpZXIuIFRoZSBlZmZlY3Qgb2YgU2V4IG9uIHRoZSBvZGRzIG9mIFN1cnZpdmVkIHZhcmllcywgb3IgZGlmZmVycywgZGVwZW5kaW5nIG9uIFBjbGFzcy4NCg0KVGhlcmUgaXMgc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gYmV0d2VlbiBTZXggYW5kIFBjbGFzcy4gDQoNClRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRvIHJlcG9ydCBvbiB0aGUgZWZmZWN0IG9mIFBjbGFzcyBmb3IgZGlmZmVyZW50IFNleCBjYXRlZ29yaWVzOiBhbnl0aGluZyB3ZSBzYXkgYWJvdXQgdGhlIGVmZmVjdCBvZiBTZXggb24gU3Vydml2ZWQgbmVlZHMgdG8gYmUgUGNsYXNzLXNwZWNpZmljLg0KDQo+IENhbiBhIGNsYXNzIGJlIGJvdGggYSBjb25mb3VuZGVyIGFuZCBhbiBlZmZlY3QgbW9kaWZpZXI/Pw0KDQpgYGB7cn0NCm1vZGVsM2JpcyA8LSBnbG0oU3Vydml2ZWQgfiBTZXggKyBQY2xhc3MgKyBBZ2VHcm91cCArIFNleCAqIFBjbGFzcywgZmFtaWx5PWJpbm9taWFsKGxpbms9J2xvZ2l0JyksIGRhdGE9ZGF0YSkNCnN1bW1hcnkobW9kZWwzKQ0KYGBgDQoNCiogUGNsYXNzID0gMTogQW1vbmcgcGFzc2VuZ2VycyB0aGF0IHRyYXZlbGxlZCAxc3QgY2xhc3MsIHRoZSBsb2ctb2RkcyBvZiBzdXJ2aXZhbCBhcmUgeCB0aW1lcyBoaWdoZXIvbG93ZXIgZm9yIG1lbiBjb21wYXJlZCB0byB3b21lbiwgYWRqdXN0aW5nIGZvciBBZ2VHcm91cC4NCg0KDQoqIFBjbGFzcyA9IDI6DQoqIFBjbGFzcyA9IDM6DQoNCmBgYHtyfQ0KI3N1bW1hcnkobW9kZWwzYmlzKQ0KYGBgDQoNCk5vdGUgdGhhdCBpZiB0aGUgZWZmZWN0IG1vZGlmaWVyIHdhcyBjb250aW51b3VzIGUuZy4gQWdlIHdlIG5lZWQgdG8gZG8gdGhlIGNhbGN1bGF0aW9ucyBmb3IgdGhlIFBjbGFzcy1zcGVjaWZpYyBvZGRzIHJhdGlvcyBieSBoYW5kIGFuZCBhc3NpZ24gcG9zc2libGUgdmFsdWVzIHRvIGNvbXBhcmUgZ3JvdXBzIGUuZy4gQWdlPTUwLCBBZ2U9NjAsIGV0Yy4gRXhhbXBsZTogJGJfMSArIDUwIFx0aW1lcyAoYWdlIFx0aW1lcyBzdXJ2aXZlZCBpbnRlcmFjdGlvbiB0ZXJtKSQgKHNlZSB2aWRlbyAxNzo0NCkuDQoNCkV4dHJhIHN0ZXAgKGNvbXBhcmZlZCB0byBMUikgdG8gbWFrZSBsb2ctb2RkcyBtb3JlIGludGVycHJldGFibGUgaXMgdG8gY29tcHV0ZSB0aGUgb2RkLXJhdGlvcyBieSBleHBvbmVudGlhdGluZyB0aGUgbG9nLW9kZHMgcmF0aW9zLiAgDQoNCg==