Introduction
In practice, we may want to compare some characteristics of two
populations. Two-sample tests are used for this purpose. In the previous
topic, we introduced a special two-sample test - paired t-test in which
the two populations are defined based on the same group of subjects, but
measurements are taken under different conditions. In this note, we
discuss two independent samples that are taken from two independent
populations. For example, we want to know whether the percentages of
STEM majors at WCU and Bloomsburg University are different. We take a
random sample for WCU and one from Bloomsburg. There is no way to pair
observations from WCU with those from Bloomsburg.
In practice, we often compare characteristics between two populations
using two-sample tests. Previously, we discussed the paired t-test - a
special two-sample test, where measurements are taken from the same
group of subjects under different conditions.
In this note, we focus on independent samples drawn from two distinct
populations. For example, suppose we want to determine whether the start
salaries of STEM majors differ between WCU and Bloomsburg University. We
collect separate random samples from each university—since there is no
natural pairing between observations from WCU and Bloomsburg, an
independent two-sample test is appropriate.

The objective of this topic is to test various hypotheses about the
difference between the two population means based on both large sample
and small sample scenarios.
Testing Two Populations
Means: Large Samples
The general 6-step procedure will be used in the two-sample test.
Before we use examples to illustrate the steps, we need to know how to
define the test statistic and what is the sampling distribution of the
test statistic.
Setting Up
The problem is called two-large-sample test for two population means.
The key assumption of this test is:
- both sample sizes are large (i.e., \(n_1 > 30\) AND \(n_2 > 30\)).
OR
- Both population are normal AND both
population variances are known.
Under any one of the above assumptions, the Test Statistic
and Its Sampling Distribution can be determined based on the
following reasoning process.
The claimed the difference \(\mu_1 -
\mu_2\) can be estimated by \(\bar{x}_1
- \bar{x}_2\). In order to define the test statistic, we need the
variance of \(\bar{x}_1 - \bar{x}_2\)
which has form \(\frac{\sigma_1^2}{n_1} +
\frac{\sigma_2^2}{n_2}\). In practice, population variances \(\sigma_1^2\) and \(\sigma_2^2\) are estimated by their
corresponding sample variances \(s_1^2\) and \(s_2^2\), respectively.
The test statistic for testing \(\mu_1
-\mu_2 = 0\) can be defined to be of the following form
\[
TS = \frac{(\bar{x}_1 - \bar{x}_2) -0}{\sqrt{\frac{s_1^2}{n_1} +
\frac{s_2^2}{n_2}}} \to N(0, 1)
\]
Steps for Testing Two
Means
The 6-step procedure for testing the difference between two
population means. The next example shows the detailed steps for the
two-sample test based on large samples.
Example 1. The
American Automobile Association claims that the average daily cost for
meals and lodging for vacationing in Texas is less than the same average
cost for vacationing in Virginia. The table shows the results of a
random survey of vacationers in each state. The two samples are
independent. At \(\alpha = 0.01\), is
there enough evidence to support the claim?

Solution: We follow the 6-step to perform the
hypothesis testing.
Step 1: The statement ” the average daily cost
for meals and lodging for vacationing in Texas (\(\mu_1\)) is less than the same average cost
for vacationing in Virginia (\(\mu_2\)).” Therefore, the claim is
\(\mu_1 - \mu_2 < 0\).
Step 2: The null and alternative hypotheses are
given by \[
H_0: \ \mu_1 - \mu_2 \ge 0 \ \ v.s. \ \ H_a: \ \mu_1 - \mu_2 <
0.
\]
The alternative hypothesis indicates that this is left tailed
test.
Step 3: The test statistic is defined to be \[
TS = \frac{(\bar{x}_1 - \bar{x}_2) -0}{\sqrt{\frac{s_1^2}{n_1} +
\frac{s_2^2}{n_2}}} = \frac{(248 - 252) -0}{\sqrt{\frac{15^2}{50} +
\frac{22^2}{35}}}= -0.934
\]
Step 4: Since the test statistic is normally
distributed. The critical value of this left-tailed test is \(CV = -z_{0.01} = -2.33\)

We can also find the p-value \(=P(Z <
-0.934) \approx 0.1752.\)
Step 5: Both critical value and p-value methods
indicate that the null hypothesis is NOT rejected. This implies that the
alternative hypothesis is supported.
Step 6: The sample evidence does not
support the claim that the average daily cost for meals and lodging for
vacationing in Texas is less than the same average cost for vacationing
in Virginia.
Remark: For all two-sample tests of the difference
between two population means, we need to keep the form of difference of
the two means consistent in (1) claim; (2) null and alternative
hypotheses; and (3) the test statistic.
Two-sample t-tests
In the previous section, we test the difference between two
population means based on a large sample assumption so that the test
statistic is approximately normally distributed.
Now, we want to test the difference of means of
two normal populations with unknown but
equal variances. Since the two population variances are
assumed to be equal, we need to combine the two samples to estimate the
common variance. \[
s_{pool}^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 -2}
\]
The test statistic is defined by \[
TS = \frac{(\bar{x}_1 -\bar{x}_2)-0}{\sqrt{s_{pool}^2/n_1 +
s_{pool}^2/n_2}} \to t_{n_1+n_2-2}
\]
The sampling distribution of \(TS\)
is t-distribution with \(n_1+n2-2\)
degrees of freedom. We next perform the two-sample t-test using the
above test statistic and its sampling distribution with a numerical
example.
Example 2. The
braking distances of 8 Volkswagen GTIs and 10 Ford Focuses were tested
when traveling at 60 miles per hour on dry pavement. The results are
shown below. Can you conclude that there is a difference in the mean
braking distances of the two types of cars? Use \(\alpha = 0.01\). Assume the populations are
normally distributed and the population variances are equal.

Solution: The 6-step procedure is given below.
Step 1: The claim there is a
difference in the mean braking distances of
the two types of cars implies that \(\mu_{GTI} - \mu_{Ford} \ne 0\).
Step 2: The null and alternative hypotheses are
given below. \[
H_0: \ \mu_{GTI} - \mu_{Ford} = 0 \ \ v.s. \ \ H_a: \ \mu_{GTI} -
\mu_{Ford} \ne 0
\]
This is a two-tailed test.
Step 3: The pooled sample variance is calculated as
follows \[
s_{pool}^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 -2} =
\frac{(8-1)6.9^2 + (10-1)6.6^2}{8 + 10 -2}=45.33.
\] The test statistic is given by \[
TS = \frac{(\bar{x}_1 -\bar{x}_2)-0}{\sqrt{s_{pool}^2/n_1 +
s_{pool}^2/n_2}} = \frac{(134 -143)-0}{\sqrt{45.33/8 + 45.33/10}}
\approx -2.818.
\]
Step 4: The t-critical value of this two-tailed test
with 16 degrees of freedom is \(CV = \pm
2.921\).

Step 5: Since the test statistic is NOT inside the
rejection, we fail to reject the null hypothesis. That is, we reject the
alternative hypothesis.
Step 6: There is no enough sample evidence to
support the claim that there is a difference
in the mean braking distances of the two types of cars.
Remarks: (1). If one of the sample sizes is small,
we have to assume both populations to be normal and variance are unknown
but equal; (2). If any of the assumptions are not satisfied, we cannot
perform any two-sample test in this class.
Two-sample Test
Workflow: Summary
The following flow chart shows the workflow of two-sample tests.

Practice Exercises
- Suppose we have a dataset containing 130 observations of body
temperature, along with the gender of each individual and his or her
heart rate. Is there a significant difference between the mean body
temperatures for men and women? Summarized sample statistics are:
n Mean Stdev
Women 65 98.105 0.699
Men 65 98.395 0.743
- A consumer education organization claims that there is a difference
in the mean credit card debt of males and females in the United States.
The results of a random survey of 200 individuals from each group are
shown below. The two samples are independent. Do the results support the
organization’s claim? Use \(\alpha =
0.05\).

- A manufacturer claims that the calling range (in feet) of its
2.4-GHz cordless telephone is greater than that of its leading
competitor. You perform a study using 14 randomly selected phones from
the manufacturer and 16 selected similar phones from its competitor. The
results are shown below. At \(\alpha =
0.05\), can you support the manufacturer’s claim? Assume the
populations are normally distributed and the population variances are
equal.

Use of Technology
The Stats Apps for the two-sample test is at: (https://chpeng.shinyapps.io/twoSampleTests/).
CAUTION::
The ISLA app only accepts variances in the
input panel. If you are given standard deviations, you must
square them before entering them into the app.
Two-sample Test:
Large Samples

Two-sample
t-test

LS0tDQp0aXRsZTogIlRvcGljIDExLiBUd28tc2FtcGxlIFRlc3RzIg0KYXV0aG9yOiAiQ2hlbmcgUGVuZyINCmRhdGU6ICIgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMNCiAgICB0aGVtZTogbHVtZW4NCiAgcGRmX2RvY3VtZW50OiANCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIGZpZ193aWR0aDogNQ0KICAgIGZpZ19oZWlnaHQ6IDQNCi0tLQ0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KZGl2I1RPQyBsaSB7DQogICAgbGlzdC1zdHlsZTpub25lOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMSB7IC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAyMHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmgyIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQo8L3N0eWxlPg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCANCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLg0KaWYoIXJlcXVpcmUoJ3ZlbWJlZHInKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCd2ZW1iZWRyJykNCiAgbGlicmFyeSgndmVtYmVkcicpDQp9DQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsNCiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikNCiAgIGxpYnJhcnkoa25pdHIpDQp9DQojIGtuaXRyOjpvcHRzX2tuaXQkc2V0KHJvb3QuZGlyID0gIkM6L1VzZXJzLzc1Q1BFTkcvT25lRHJpdmUgLSBXZXN0IENoZXN0ZXIgVW5pdmVyc2l0eSBvZiBQQS9Eb2N1bWVudHMiKQ0KIyBrbml0cjo6b3B0c19rbml0JHNldChyb290LmRpciA9ICJDOlxcU1RBNDkwXFx3MDUiKQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgDQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJVRSwgICANCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UpDQpgYGANCg0KXA0KXA0KDQojIEludHJvZHVjdGlvbg0KDQpJbiBwcmFjdGljZSwgd2UgbWF5IHdhbnQgdG8gY29tcGFyZSBzb21lIGNoYXJhY3RlcmlzdGljcyBvZiB0d28gcG9wdWxhdGlvbnMuIFR3by1zYW1wbGUgdGVzdHMgYXJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gSW4gdGhlIHByZXZpb3VzIHRvcGljLCB3ZSBpbnRyb2R1Y2VkIGEgc3BlY2lhbCB0d28tc2FtcGxlIHRlc3QgLSBwYWlyZWQgdC10ZXN0IGluIHdoaWNoIHRoZSB0d28gcG9wdWxhdGlvbnMgYXJlIGRlZmluZWQgYmFzZWQgb24gdGhlIHNhbWUgZ3JvdXAgb2Ygc3ViamVjdHMsIGJ1dCBtZWFzdXJlbWVudHMgYXJlIHRha2VuIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLiBJbiB0aGlzIG5vdGUsIHdlIGRpc2N1c3MgdHdvIGluZGVwZW5kZW50IHNhbXBsZXMgdGhhdCBhcmUgdGFrZW4gZnJvbSB0d28gaW5kZXBlbmRlbnQgcG9wdWxhdGlvbnMuIEZvciBleGFtcGxlLCB3ZSB3YW50IHRvIGtub3cgd2hldGhlciB0aGUgcGVyY2VudGFnZXMgb2YgU1RFTSBtYWpvcnMgYXQgV0NVIGFuZCBCbG9vbXNidXJnIFVuaXZlcnNpdHkNCmFyZSBkaWZmZXJlbnQuIFdlIHRha2UgYSByYW5kb20gc2FtcGxlIGZvciBXQ1UgYW5kIG9uZSBmcm9tIEJsb29tc2J1cmcuIFRoZXJlIGlzIG5vIHdheSB0byBwYWlyIG9ic2VydmF0aW9ucyBmcm9tIFdDVSB3aXRoIHRob3NlIGZyb20gQmxvb21zYnVyZy4NCg0KDQpJbiBwcmFjdGljZSwgd2Ugb2Z0ZW4gY29tcGFyZSBjaGFyYWN0ZXJpc3RpY3MgYmV0d2VlbiB0d28gcG9wdWxhdGlvbnMgdXNpbmcgdHdvLXNhbXBsZSB0ZXN0cy4gUHJldmlvdXNseSwgd2UgZGlzY3Vzc2VkIHRoZSBwYWlyZWQgdC10ZXN0IC0gYSBzcGVjaWFsIHR3by1zYW1wbGUgdGVzdCwgd2hlcmUgbWVhc3VyZW1lbnRzIGFyZSB0YWtlbiBmcm9tIHRoZSBzYW1lIGdyb3VwIG9mIHN1YmplY3RzIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLg0KDQpJbiB0aGlzIG5vdGUsIHdlIGZvY3VzIG9uIGluZGVwZW5kZW50IHNhbXBsZXMgZHJhd24gZnJvbSB0d28gZGlzdGluY3QgcG9wdWxhdGlvbnMuIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIHdhbnQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN0YXJ0IHNhbGFyaWVzIG9mIFNURU0gbWFqb3JzIGRpZmZlciBiZXR3ZWVuIFdDVSBhbmQgQmxvb21zYnVyZyBVbml2ZXJzaXR5LiBXZSBjb2xsZWN0IHNlcGFyYXRlIHJhbmRvbSBzYW1wbGVzIGZyb20gZWFjaCB1bml2ZXJzaXR54oCUc2luY2UgdGhlcmUgaXMgbm8gbmF0dXJhbCBwYWlyaW5nIGJldHdlZW4gb2JzZXJ2YXRpb25zIGZyb20gV0NVIGFuZCBCbG9vbXNidXJnLCBhbiBpbmRlcGVuZGVudCB0d28tc2FtcGxlIHRlc3QgaXMgYXBwcm9wcmlhdGUuDQoNCg0KDQoNCmBgYHtyIGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzcwJSd9DQppbmNsdWRlX2dyYXBoaWNzKCJ3ZWVrMTEvaW5kZXBQYWlyZWRTYW1wbGVzLnBuZyIpDQpgYGANCg0KVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHRvcGljIGlzIHRvIHRlc3QgdmFyaW91cyBoeXBvdGhlc2VzIGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwb3B1bGF0aW9uIG1lYW5zIGJhc2VkIG9uIGJvdGggbGFyZ2Ugc2FtcGxlIGFuZCBzbWFsbCBzYW1wbGUgc2NlbmFyaW9zLiANCg0KXA0KDQojIFRlc3RpbmcgVHdvIFBvcHVsYXRpb25zIE1lYW5zOiBMYXJnZSBTYW1wbGVzDQoNCg0KDQpUaGUgZ2VuZXJhbCA2LXN0ZXAgcHJvY2VkdXJlIHdpbGwgYmUgdXNlZCBpbiB0aGUgdHdvLXNhbXBsZSB0ZXN0LiBCZWZvcmUgd2UgdXNlIGV4YW1wbGVzIHRvIGlsbHVzdHJhdGUgdGhlIHN0ZXBzLCB3ZSBuZWVkIHRvIGtub3cgaG93IHRvIGRlZmluZSB0aGUgdGVzdCBzdGF0aXN0aWMgYW5kIHdoYXQgaXMgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBvZiB0aGUgdGVzdCBzdGF0aXN0aWMuDQoNCiMjIFNldHRpbmcgVXANCg0KVGhlIHByb2JsZW0gaXMgY2FsbGVkIHR3by1sYXJnZS1zYW1wbGUgdGVzdCBmb3IgdHdvIHBvcHVsYXRpb24gbWVhbnMuIFRoZSBrZXkgYXNzdW1wdGlvbiBvZiB0aGlzIHRlc3QgaXM6IA0KDQoqICoqYm90aCBzYW1wbGUgc2l6ZXMgYXJlIGxhcmdlKiogKGkuZS4sICRuXzEgPiAzMCQgQU5EICRuXzIgPiAzMCQpLg0KDQoqKk9SKioNCg0KKiAqKkJvdGggcG9wdWxhdGlvbiBhcmUgbm9ybWFsKiogQU5EICoqYm90aCBwb3B1bGF0aW9uIHZhcmlhbmNlcyBhcmUga25vd24qKi4NCg0KDQpVbmRlciBhbnkgb25lIG9mIHRoZSBhYm92ZSBhc3N1bXB0aW9ucywgdGhlICoqVGVzdCBTdGF0aXN0aWMgYW5kIEl0cyBTYW1wbGluZyBEaXN0cmlidXRpb24qKiBjYW4gYmUgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIHJlYXNvbmluZyBwcm9jZXNzLg0KDQpUaGUgY2xhaW1lZCB0aGUgZGlmZmVyZW5jZSAkXG11XzEgLSBcbXVfMiQgY2FuIGJlIGVzdGltYXRlZCBieSAkXGJhcnt4fV8xIC0gXGJhcnt4fV8yJC4gSW4gb3JkZXIgdG8gZGVmaW5lIHRoZSB0ZXN0IHN0YXRpc3RpYywgd2UgbmVlZCB0aGUgdmFyaWFuY2Ugb2YgJFxiYXJ7eH1fMSAtIFxiYXJ7eH1fMiQgd2hpY2ggaGFzIGZvcm0gJFxmcmFje1xzaWdtYV8xXjJ9e25fMX0gKyBcZnJhY3tcc2lnbWFfMl4yfXtuXzJ9JC4gIEluIHByYWN0aWNlLCBwb3B1bGF0aW9uIHZhcmlhbmNlcyAkXHNpZ21hXzFeMiQgYW5kICRcc2lnbWFfMl4yJCBhcmUgZXN0aW1hdGVkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgc2FtcGxlIHZhcmlhbmNlcyAkc18xXjIkIGFuZCAkc18yXjIkLCByZXNwZWN0aXZlbHkuIA0KDQpUaGUgdGVzdCBzdGF0aXN0aWMgZm9yIHRlc3RpbmcgJFxtdV8xIC1cbXVfMiA9IDAkIGNhbiBiZSBkZWZpbmVkIHRvIGJlIG9mIHRoZSBmb2xsb3dpbmcgZm9ybQ0KDQokJA0KVFMgPSBcZnJhY3soXGJhcnt4fV8xIC0gXGJhcnt4fV8yKSAtMH17XHNxcnR7XGZyYWN7c18xXjJ9e25fMX0gKyBcZnJhY3tzXzJeMn17bl8yfX19IFx0byBOKDAsIDEpDQokJA0KDQoNCiMjIFN0ZXBzIGZvciBUZXN0aW5nIFR3byBNZWFucw0KDQpUaGUgNi1zdGVwIHByb2NlZHVyZSBmb3IgdGVzdGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBwb3B1bGF0aW9uIG1lYW5zLiBUaGUgbmV4dCBleGFtcGxlIHNob3dzIHRoZSBkZXRhaWxlZCBzdGVwcyBmb3IgdGhlIHR3by1zYW1wbGUgdGVzdCBiYXNlZCBvbiBsYXJnZSBzYW1wbGVzLg0KDQpcDQoNCjxmb250IGNvbG9yID0gImRhcmtyZWQiPioqRXhhbXBsZSAxLioqIDwvZm9udD4gVGhlIEFtZXJpY2FuIEF1dG9tb2JpbGUgQXNzb2NpYXRpb24gY2xhaW1zIHRoYXQgdGhlIGF2ZXJhZ2UgZGFpbHkgY29zdCBmb3IgbWVhbHMgYW5kIGxvZGdpbmcgZm9yIHZhY2F0aW9uaW5nIGluIFRleGFzIGlzIGxlc3MgdGhhbiB0aGUgc2FtZSBhdmVyYWdlIGNvc3QgZm9yIHZhY2F0aW9uaW5nIGluIFZpcmdpbmlhLiBUaGUgdGFibGUgc2hvd3MgdGhlIHJlc3VsdHMgb2YgYSByYW5kb20gc3VydmV5IG9mIHZhY2F0aW9uZXJzIGluIGVhY2ggc3RhdGUuIFRoZSB0d28gc2FtcGxlcyBhcmUgaW5kZXBlbmRlbnQuIEF0ICRcYWxwaGEgPSAwLjAxJCwgaXMgdGhlcmUgZW5vdWdoIGV2aWRlbmNlIHRvIHN1cHBvcnQgdGhlIGNsYWltPw0KDQpgYGB7ciBmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aCA9ICczMCUnfQ0KaW5jbHVkZV9ncmFwaGljcygid2VlazExL2V4YW1wbGUwMURhdGEucG5nIikNCmBgYA0KDQoNCg0KKipTb2x1dGlvbioqOiBXZSBmb2xsb3cgdGhlIDYtc3RlcCB0byBwZXJmb3JtIHRoZSBoeXBvdGhlc2lzIHRlc3RpbmcuDQoNCioqU3RlcCAxKio6IFRoZSBzdGF0ZW1lbnQgKiIgdGhlIGF2ZXJhZ2UgZGFpbHkgY29zdCBmb3IgbWVhbHMgYW5kIGxvZGdpbmcgZm9yIHZhY2F0aW9uaW5nIGluIFRleGFzICgkXG11XzEkKSBpcyBsZXNzIHRoYW4gdGhlIHNhbWUgYXZlcmFnZSBjb3N0IGZvciB2YWNhdGlvbmluZyBpbiBWaXJnaW5pYSAoJFxtdV8yJCkuIiogVGhlcmVmb3JlLCB0aGUgY2xhaW0gaXMgJFxtdV8xIC0gXG11XzIgPCAwJC4NCg0KKipTdGVwIDIqKjogVGhlIG51bGwgYW5kIGFsdGVybmF0aXZlIGh5cG90aGVzZXMgYXJlIGdpdmVuIGJ5DQokJA0KSF8wOiBcIFxtdV8xIC0gXG11XzIgXGdlIDAgICAgXCAgXCAgdi5zLiBcICBcICBIX2E6IFwgXG11XzEgLSBcbXVfMiA8IDAuDQokJA0KDQpUaGUgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGxlZnQgdGFpbGVkIHRlc3QuDQoNCioqU3RlcCAzKio6IFRoZSB0ZXN0IHN0YXRpc3RpYyBpcyBkZWZpbmVkIHRvIGJlDQokJA0KVFMgPSBcZnJhY3soXGJhcnt4fV8xIC0gXGJhcnt4fV8yKSAtMH17XHNxcnR7XGZyYWN7c18xXjJ9e25fMX0gKyBcZnJhY3tzXzJeMn17bl8yfX19ID0gXGZyYWN7KDI0OCAtIDI1MikgLTB9e1xzcXJ0e1xmcmFjezE1XjJ9ezUwfSArIFxmcmFjezIyXjJ9ezM1fX19PSAtMC45MzQNCiQkDQoNCioqU3RlcCA0Kio6IFNpbmNlIHRoZSB0ZXN0IHN0YXRpc3RpYyBpcyBub3JtYWxseSBkaXN0cmlidXRlZC4gVGhlIGNyaXRpY2FsIHZhbHVlIG9mIHRoaXMgbGVmdC10YWlsZWQgdGVzdCBpcyAkQ1YgPSAtel97MC4wMX0gPSAtMi4zMyQNCg0KYGBge3IgZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnNzAlJ30NCmluY2x1ZGVfZ3JhcGhpY3MoIndlZWsxMS9leGFtcGxlMDEucG5nIikNCmBgYA0KDQpXZSBjYW4gYWxzbyBmaW5kIHRoZSBwLXZhbHVlICQ9UChaIDwgLTAuOTM0KSBcYXBwcm94IDAuMTc1Mi4kDQoNCioqU3RlcCA1Kio6IEJvdGggY3JpdGljYWwgdmFsdWUgYW5kIHAtdmFsdWUgbWV0aG9kcyBpbmRpY2F0ZSB0aGF0IHRoZSBudWxsIGh5cG90aGVzaXMgaXMgTk9UIHJlamVjdGVkLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcyBpcyBzdXBwb3J0ZWQuDQoNCioqU3RlcCA2Kio6IFRoZSBzYW1wbGUgZXZpZGVuY2UgKmRvZXMgbm90KiBzdXBwb3J0IHRoZSBjbGFpbSB0aGF0IHRoZSBhdmVyYWdlIGRhaWx5IGNvc3QgZm9yIG1lYWxzIGFuZCBsb2RnaW5nIGZvciB2YWNhdGlvbmluZyBpbiBUZXhhcyBpcyBsZXNzIHRoYW4gdGhlIHNhbWUgYXZlcmFnZSBjb3N0IGZvciB2YWNhdGlvbmluZyBpbiBWaXJnaW5pYS4NCg0KXA0KKipSZW1hcmsqKjogRm9yIGFsbCB0d28tc2FtcGxlIHRlc3RzIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHBvcHVsYXRpb24gbWVhbnMsIHdlIG5lZWQgdG8ga2VlcCB0aGUgZm9ybSBvZiBkaWZmZXJlbmNlIG9mIHRoZSB0d28gbWVhbnMgY29uc2lzdGVudCBpbiAoMSkgY2xhaW07ICgyKSBudWxsIGFuZCBhbHRlcm5hdGl2ZSBoeXBvdGhlc2VzOyBhbmQgKDMpIHRoZSB0ZXN0IHN0YXRpc3RpYy4NCg0KDQpcDQoNCjwhLS1jZW50ZXI+PGEgaHJlZj0iaHR0cHM6Ly9tYXQxMjEuczMuYW1hem9uYXdzLmNvbS8yc2FtcGxlWnRlc3QubXA0Ij48aW1nIHNyYyA9ICJodHRwczovL2dpdGh1Yi5jb20vcGVuZ2RzY2kvTUFUMTIxL2Jsb2IvbWFpbi9WaWRlb0ljb24ucG5nP3Jhdz10cnVlIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjI1MCI+PC9hLS0+DQoNClwNCg0KDQoNCg0KDQoNCg0KDQojIFR3by1zYW1wbGUgdC10ZXN0cw0KDQpJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgd2UgdGVzdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBwb3B1bGF0aW9uIG1lYW5zIGJhc2VkIG9uIGEgbGFyZ2Ugc2FtcGxlIGFzc3VtcHRpb24gc28gdGhhdCB0aGUgdGVzdCBzdGF0aXN0aWMgaXMgYXBwcm94aW1hdGVseSBub3JtYWxseSBkaXN0cmlidXRlZC4NCg0KTm93LCB3ZSB3YW50IHRvIHRlc3QgdGhlIGRpZmZlcmVuY2Ugb2YgbWVhbnMgb2YgPGZvbnQgY29sb3IgPSAiYmx1ZSI+Kip0d28gbm9ybWFsIHBvcHVsYXRpb25zIHdpdGggdW5rbm93biBidXQgZXF1YWwgdmFyaWFuY2VzKiouIDwvZm9udD4gU2luY2UgdGhlIHR3byBwb3B1bGF0aW9uIHZhcmlhbmNlcyBhcmUgYXNzdW1lZCB0byBiZSBlcXVhbCwgd2UgbmVlZCB0byBjb21iaW5lIHRoZSB0d28gc2FtcGxlcyB0byBlc3RpbWF0ZSB0aGUgY29tbW9uIHZhcmlhbmNlLiANCiQkDQpzX3twb29sfV4yID0gXGZyYWN7KG5fMS0xKXNfMV4yICsgKG5fMi0xKXNfMl4yfXtuXzEgKyBuXzIgLTJ9DQokJA0KDQpUaGUgdGVzdCBzdGF0aXN0aWMgaXMgZGVmaW5lZCBieQ0KJCQNClRTID0gXGZyYWN7KFxiYXJ7eH1fMSAtXGJhcnt4fV8yKS0wfXtcc3FydHtzX3twb29sfV4yL25fMSArIHNfe3Bvb2x9XjIvbl8yfX0gXHRvIHRfe25fMStuXzItMn0NCiQkDQoNClRoZSBzYW1wbGluZyBkaXN0cmlidXRpb24gb2YgJFRTJCBpcyB0LWRpc3RyaWJ1dGlvbiB3aXRoICRuXzErbjItMiQgZGVncmVlcyBvZiBmcmVlZG9tLiBXZSBuZXh0IHBlcmZvcm0gdGhlIHR3by1zYW1wbGUgdC10ZXN0IHVzaW5nIHRoZSBhYm92ZSB0ZXN0IHN0YXRpc3RpYyBhbmQgaXRzIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiB3aXRoIGEgbnVtZXJpY2FsIGV4YW1wbGUuDQoNClwNCg0KPGZvbnQgY29sb3IgPSAiZGFya3JlZCI+KipFeGFtcGxlIDIuKiogPC9mb250PiBUaGUgYnJha2luZyBkaXN0YW5jZXMgb2YgOCBWb2xrc3dhZ2VuIEdUSXMgYW5kIDEwIEZvcmQgRm9jdXNlcyB3ZXJlIHRlc3RlZCB3aGVuIHRyYXZlbGluZyBhdCA2MCBtaWxlcyBwZXIgaG91ciBvbiBkcnkgcGF2ZW1lbnQuIFRoZSByZXN1bHRzIGFyZSBzaG93biBiZWxvdy4gQ2FuIHlvdSBjb25jbHVkZSB0aGF0IHRoZXJlIGlzIGEgZGlmZmVyZW5jZSBpbiB0aGUgbWVhbiBicmFraW5nIGRpc3RhbmNlcyBvZiB0aGUgdHdvIHR5cGVzIG9mIGNhcnM/IFVzZSAkXGFscGhhID0gMC4wMSQuIEFzc3VtZSB0aGUgcG9wdWxhdGlvbnMgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGFuZCB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZXMgYXJlIGVxdWFsLiANCmBgYHtyIGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzI1JSd9DQppbmNsdWRlX2dyYXBoaWNzKCJ3ZWVrMTEvZXhhbXBsZTAyRGF0YS5wbmciKQ0KYGBgDQoNCioqU29sdXRpb24qKjogVGhlIDYtc3RlcCBwcm9jZWR1cmUgaXMgZ2l2ZW4gYmVsb3cuDQoNCioqU3RlcCAxKio6IFRoZSBjbGFpbSAqdGhlcmUgaXMgYSA8Zm9udCBjb2xvciA9ICJyZWQiPmRpZmZlcmVuY2U8L2ZvbnQ+IGluIHRoZSBtZWFuIGJyYWtpbmcgZGlzdGFuY2VzIG9mIHRoZSB0d28gdHlwZXMgb2YgY2FycyogaW1wbGllcyB0aGF0ICRcbXVfe0dUSX0gLSBcbXVfe0ZvcmR9IFxuZSAwJC4NCg0KKipTdGVwIDIqKjogVGhlIG51bGwgYW5kIGFsdGVybmF0aXZlIGh5cG90aGVzZXMgYXJlIGdpdmVuIGJlbG93Lg0KJCQNCkhfMDogXCBcbXVfe0dUSX0gLSBcbXVfe0ZvcmR9ID0gMCBcIFwgdi5zLiAgXCBcIEhfYTogXCBcbXVfe0dUSX0gLSBcbXVfe0ZvcmR9IFxuZSAwDQokJA0KDQpUaGlzIGlzIGEgdHdvLXRhaWxlZCB0ZXN0Lg0KDQoqKlN0ZXAgMyoqOiBUaGUgcG9vbGVkIHNhbXBsZSB2YXJpYW5jZSBpcyBjYWxjdWxhdGVkIGFzIGZvbGxvd3MNCiQkDQpzX3twb29sfV4yID0gXGZyYWN7KG5fMS0xKXNfMV4yICsgKG5fMi0xKXNfMl4yfXtuXzEgKyBuXzIgLTJ9ID0gXGZyYWN7KDgtMSk2LjleMiArICgxMC0xKTYuNl4yfXs4ICsgMTAgLTJ9PTQ1LjMzLg0KJCQNClRoZSB0ZXN0IHN0YXRpc3RpYyBpcyBnaXZlbiBieSANCiQkDQpUUyA9IFxmcmFjeyhcYmFye3h9XzEgLVxiYXJ7eH1fMiktMH17XHNxcnR7c197cG9vbH1eMi9uXzEgKyBzX3twb29sfV4yL25fMn19ID0gXGZyYWN7KDEzNCAtMTQzKS0wfXtcc3FydHs0NS4zMy84ICsgNDUuMzMvMTB9fSBcYXBwcm94IC0yLjgxOC4NCiQkDQoNCioqU3RlcCA0Kio6IFRoZSB0LWNyaXRpY2FsIHZhbHVlIG9mIHRoaXMgdHdvLXRhaWxlZCB0ZXN0IHdpdGggMTYgZGVncmVlcyBvZiBmcmVlZG9tIGlzICRDViA9IFxwbSAyLjkyMSQuDQoNCmBgYHtyIGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzcwJSd9DQppbmNsdWRlX2dyYXBoaWNzKCJ3ZWVrMTEvZXhhbXBsZTAyLnBuZyIpDQpgYGANCg0KDQoqKlN0ZXAgNSoqOiBTaW5jZSB0aGUgdGVzdCBzdGF0aXN0aWMgaXMgTk9UIGluc2lkZSB0aGUgcmVqZWN0aW9uLCB3ZSBmYWlsIHRvIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLiBUaGF0IGlzLCB3ZSByZWplY3QgdGhlIGFsdGVybmF0aXZlIGh5cG90aGVzaXMuDQoNCioqU3RlcCA2Kio6ICBUaGVyZSBpcyBubyBlbm91Z2ggc2FtcGxlIGV2aWRlbmNlIHRvIHN1cHBvcnQgdGhlIGNsYWltIHRoYXQgdGhlcmUgaXMgYSA8Zm9udCBjb2xvciA9ICJyZWQiPmRpZmZlcmVuY2U8L2ZvbnQ+IGluIHRoZSBtZWFuIGJyYWtpbmcgZGlzdGFuY2VzIG9mIHRoZSB0d28gdHlwZXMgb2YgY2Fycy4NCg0KKipSZW1hcmtzKio6ICgxKS4gSWYgb25lIG9mIHRoZSBzYW1wbGUgc2l6ZXMgaXMgc21hbGwsIHdlIGhhdmUgdG8gYXNzdW1lIGJvdGggcG9wdWxhdGlvbnMgdG8gYmUgbm9ybWFsIGFuZCB2YXJpYW5jZSBhcmUgdW5rbm93biBidXQgZXF1YWw7ICgyKS4gSWYgYW55IG9mIHRoZSBhc3N1bXB0aW9ucyBhcmUgbm90IHNhdGlzZmllZCwgd2UgY2Fubm90IHBlcmZvcm0gYW55IHR3by1zYW1wbGUgdGVzdCBpbiB0aGlzIGNsYXNzLg0KDQoNClwNCg0KPCEtLWNlbnRlcj48YSBocmVmPSJodHRwczovL21hdDEyMS5zMy5hbWF6b25hd3MuY29tLzJzYW1wbGVUdGVzdC5tcDQiPjxpbWcgc3JjID0gImh0dHBzOi8vZ2l0aHViLmNvbS9wZW5nZHNjaS9NQVQxMjEvYmxvYi9tYWluL1ZpZGVvSWNvbi5wbmc/cmF3PXRydWUiIHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIj48L2EtLT4NCg0KXA0KDQojIFR3by1zYW1wbGUgVGVzdCBXb3JrZmxvdzogU3VtbWFyeQ0KDQpUaGUgZm9sbG93aW5nIGZsb3cgY2hhcnQgc2hvd3MgdGhlIHdvcmtmbG93IG9mIHR3by1zYW1wbGUgdGVzdHMuDQoNCmBgYHtyIGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzcwJSd9DQppbmNsdWRlX2dyYXBoaWNzKCJ3ZWVrMTEvdHdvU2FtcGxlV29ya0Zsb3cucG5nIikNCmBgYA0KDQpcDQoNCiMgUHJhY3RpY2UgRXhlcmNpc2VzDQoNCjEuIFN1cHBvc2Ugd2UgaGF2ZSBhIGRhdGFzZXQgY29udGFpbmluZyAxMzAgb2JzZXJ2YXRpb25zIG9mIGJvZHkgdGVtcGVyYXR1cmUsIGFsb25nIHdpdGggdGhlIGdlbmRlciBvZiBlYWNoIGluZGl2aWR1YWwgYW5kIGhpcyBvciBoZXIgaGVhcnQgcmF0ZS4gSXMgdGhlcmUgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1lYW4gYm9keSB0ZW1wZXJhdHVyZXMgZm9yIG1lbiBhbmQgd29tZW4/IFN1bW1hcml6ZWQgc2FtcGxlIHN0YXRpc3RpY3MgYXJlOg0KDQpgYGANCiAgICAgICAgCW4JICAgICAgTWVhbgkgICAgICBTdGRldg0KV29tZW4JICA2NSAgIAkgICA5OC4xMDUgICAgICAgIDAuNjk5DQpNZW4gICAgCSAgNjUJICAgOTguMzk1CSAgICAgIDAuNzQzDQpgYGANCg0KXA0KDQoyLiBBIGNvbnN1bWVyIGVkdWNhdGlvbiBvcmdhbml6YXRpb24gY2xhaW1zIHRoYXQgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGluIHRoZSBtZWFuIGNyZWRpdCBjYXJkIGRlYnQgb2YgbWFsZXMgYW5kIGZlbWFsZXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMuIFRoZSByZXN1bHRzIG9mIGEgcmFuZG9tIHN1cnZleSBvZiAyMDAgaW5kaXZpZHVhbHMgZnJvbSBlYWNoIGdyb3VwIGFyZSBzaG93biBiZWxvdy4gVGhlIHR3byBzYW1wbGVzIGFyZSBpbmRlcGVuZGVudC4gRG8gdGhlIHJlc3VsdHMgc3VwcG9ydCB0aGUgb3JnYW5pemF0aW9u4oCZcyBjbGFpbT8gVXNlICRcYWxwaGEgPSAwLjA1JC4NCg0KDQpgYGB7ciBmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aCA9ICczMCUnfQ0KaW5jbHVkZV9ncmFwaGljcygid2VlazExL2V4MDIucG5nIikNCmBgYA0KDQpcDQoNCjMuIEEgbWFudWZhY3R1cmVyIGNsYWltcyB0aGF0IHRoZSBjYWxsaW5nIHJhbmdlIChpbiBmZWV0KSBvZiBpdHMgMi40LUdIeiBjb3JkbGVzcyB0ZWxlcGhvbmUgaXMgZ3JlYXRlciB0aGFuIHRoYXQgb2YgaXRzIGxlYWRpbmcgY29tcGV0aXRvci4gWW91IHBlcmZvcm0gYSBzdHVkeSB1c2luZyAxNCByYW5kb21seSBzZWxlY3RlZCBwaG9uZXMgZnJvbSB0aGUgbWFudWZhY3R1cmVyIGFuZCAxNiBzZWxlY3RlZCBzaW1pbGFyIHBob25lcyBmcm9tIGl0cyBjb21wZXRpdG9yLiBUaGUgcmVzdWx0cyBhcmUgc2hvd24gYmVsb3cuIEF0ICRcYWxwaGEgPSAwLjA1JCwgY2FuIHlvdSBzdXBwb3J0IHRoZSBtYW51ZmFjdHVyZXLigJlzIGNsYWltPyBBc3N1bWUgdGhlIHBvcHVsYXRpb25zIGFyZSBub3JtYWxseSBkaXN0cmlidXRlZCBhbmQgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2VzIGFyZSBlcXVhbC4NCg0KDQpgYGB7ciBmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aCA9ICczMCUnfQ0KaW5jbHVkZV9ncmFwaGljcygid2VlazExL2V4MDMucG5nIikNCmBgYA0KDQpcDQoNCiMgVXNlIG9mIFRlY2hub2xvZ3kNCg0KVGhlIFN0YXRzIEFwcHMgZm9yIHRoZSB0d28tc2FtcGxlIHRlc3QgaXMgYXQ6IChodHRwczovL2NocGVuZy5zaGlueWFwcHMuaW8vdHdvU2FtcGxlVGVzdHMvKS4gIDxmb250IGNvbG9yID0gInJlZCI+KipcY29sb3J7cmVkfUNBVVRJT046Kio8L2ZvbnQ+OiA8Zm9udCBjb2xvciA9ICJibHVlIj4qXGNvbG9ye3JlZH0gVGhlIElTTEEgYXBwIG9ubHkgYWNjZXB0cyB2YXJpYW5jZXMgaW4gdGhlIGlucHV0IHBhbmVsLio8L2ZvbnQ+IElmIHlvdSBhcmUgZ2l2ZW4gc3RhbmRhcmQgZGV2aWF0aW9ucywgeW91IG11c3Qgc3F1YXJlIHRoZW0gYmVmb3JlIGVudGVyaW5nIHRoZW0gaW50byB0aGUgYXBwLg0KDQoNCiMjIFR3by1zYW1wbGUgVGVzdDogTGFyZ2UgU2FtcGxlcyANCg0KYGBge3IgZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMTAwJSd9DQppbmNsdWRlX2dyYXBoaWNzKCJ3ZWVrMTEvdGVjaDAxLnBuZyIpDQpgYGANCg0KDQojIyBUd28tc2FtcGxlIHQtdGVzdA0KDQpgYGB7ciBmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aCA9ICcxMDAlJ30NCmluY2x1ZGVfZ3JhcGhpY3MoIndlZWsxMS90ZWNoMDIucG5nIikNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K