library(tidyverse)
library(openintro)
library(infer)

In this lab, one considers the real estate transaction data received from the town on Ames, Iowa.

data(ames)
set.seed(153)

One now proceeds to take a random sample of size 60 from the populations:

n<-60
samp<-ames%>%
  rep_sample_n(size=n)

Exercise 1

Describe the distribution of house area in your sample. What would you say is the “typical” size within your sample? Also state precisely what you interpreted “typical” to mean.

Ans: The house sample does not really follow a pattern, but one can see a high clustering of areas in the range of 750 square feet to 1750 square feet: although this can be interpreted as a normal distribution, spread out wide across the sampled data). The “typical” is interpreted hither as the maximum clustering, or the histogram bin wherein the mode and the median of the data are located.

hist(samp$area, breaks=10)

summary(samp$area)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     492    1148    1463    1531    1798    3082

Exercise 2

Would you expect another student’s distribution to be identical to yours? Would you expect it to be similar? Why or why not?

Ans: No, I would not expect another student’s distribution to be identical to mine as the sample is randomly generated (and the seed used for this purpose might vary from student to student.)

Confidence Intervals

The code given below will establish the confidence interval for the data that we have sampled:

samp%>%
  specify(formula=area~NULL)%>%
  generate(reps=1000,type="bootstrap")%>%
  calculate(stat="mean")%>%
  get_ci(level=0.95)
## # A tibble: 1 x 2
##   lower_ci upper_ci
##      <dbl>    <dbl>
## 1    1407.    1663.

Exercise 3

For the confidence interval to be valid, the sample mean must be normally distributed and have standard error s/sqrt(n). What conditions must be met for this to be true?

Ans: This means that the sample gathered must be randomly generated, and must not display a huge skew. The sample must be independent; i.e., the sample size must be small enought to not be influenced by outliers, nor should it so small that any outlier might cause a major skew in the given data.

Exercise 4

What does “95% confidence” mean?

Ans: 95% confidence means that that we have a 95% chance that the actual/true average of the data lies within the bounds we received; and that although all the students might have received varying data samples, 95% of the students would have received the mean of the data sample within the above received bounds for the confidence interval.

params<-ames%>%
  summarise(mu=mean(area))

Exercise 5

Does your confidence interval capture the true average size of houses in Ames? If you are working on this lab in a classroom, does your neighbor’s interval capture this value?

Ans: Yes, my confidence interval captures the true average size of houses in Ames.

Exercise 6

Each student should have gotten a slightly different confidence interval. What proportion of those intervals would you expect to capture the true population mean? Why?

Ans: I would expect 95% of the students to capture the true population due to one having the confidence interval of 95%.

ci<-ames%>%
  rep_sample_n(size=n, reps=50, replace=TRUE)%>%
  summarise(x_bar=mean(area),
            se=sd(area)/sqrt(n),
            me=qnorm(0.975)*se,
            lower=x_bar-me,
            upper=x_bar+me)

ci%>%
  slice(1:5)
## # A tibble: 5 x 6
##   replicate x_bar    se    me lower upper
##       <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1 1457.  56.7  111. 1346. 1568.
## 2         2 1550.  54.8  107. 1442. 1657.
## 3         3 1420.  67.5  132. 1288. 1552.
## 4         4 1577.  66.9  131. 1446. 1708.
## 5         5 1470.  64.3  126. 1343. 1596.
ci<-ci%>%
  mutate(capture_mu=ifelse(lower<params$mu & upper>params$mu,"yes","no"))

ci_data<-gather(ci, type, bound, lower:upper)

ggplot(data=ci_data, aes(x=bound, y=replicate,
                         group=replicate, color=capture_mu))+
  geom_point(size=2)+
  geom_line()+
  geom_vline(xintercept=params$mu, color="darkgray")

Exercise 7

What proportion of your confidence intervals include the true population mean? Is this proportion exactly equal to the confidence level? If not, explain why. Make sure to include your plot in your answer.

Ans: As seen from the plot below, 46 out of the 50 samples include the true population mean. This leads to a confidence level of 92. This proportion nears, but does not exactly equal the confidence level due to the massive spread covered by the sample.

ggplot(data=ci_data, aes(x=bound, y=replicate,
                         group=replicate, color=capture_mu))+
  geom_point(size=2)+
  geom_line()+
  geom_vline(xintercept=params$mu, color="darkgray")

Exercise 8 and Exercise 9

Find a confidence interval with a percentage of your choosing (other than 95%) and interpret it. Calculate 50 confidence intervals at the confidence level you chose in the previous question, and plot all intervals on one plot, and calculate the proportion of intervals that include the true population mean. How does this percentage compare to the confidence level selected for the intervals? Make sure to include your plot in your answer.

Ans: Assuming a confidence interval of 98%:

samp%>%
  specify(formula=area~NULL)%>%
  generate(reps=1000,type="bootstrap")%>%
  calculate(stat="mean")%>%
  get_ci(level=0.98)
## # A tibble: 1 x 2
##   lower_ci upper_ci
##      <dbl>    <dbl>
## 1    1384.    1688.

and the corresponding graph being:

ci<-ames%>%
  rep_sample_n(size=n, reps=50, replace=TRUE)%>%
  summarise(x_bar=mean(area),
            se=sd(area)/sqrt(n),
            me=qnorm(0.985)*se,
            lower=x_bar-me,
            upper=x_bar+me)

ci%>%
  slice(1:5)
## # A tibble: 5 x 6
##   replicate x_bar    se    me lower upper
##       <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1         1 1527.  58.3  127. 1401. 1654.
## 2         2 1458.  64.7  140. 1318. 1598.
## 3         3 1586.  63.4  138. 1449. 1724.
## 4         4 1470.  53.6  116. 1353. 1586.
## 5         5 1503.  65.8  143. 1361. 1646.
ci<-ci%>%
  mutate(capture_mu=ifelse(lower<params$mu & upper>params$mu,"yes","no"))

ci_data<-gather(ci, type, bound, lower:upper)

ggplot(data=ci_data, aes(x=bound, y=replicate,
                         group=replicate, color=capture_mu))+
  geom_point(size=2)+
  geom_line()+
  geom_vline(xintercept=params$mu, color="darkgray")

we can see from the above graph, that by choosing a confidence level of 98%, we receive 4 samples whose confidence interval does not include the true mean i.e., our confidence level does not match with the data received.

LS0tDQp0aXRsZTogIkxhYiA2OiBGb3VuZGF0aW9ucyBmb3Igc3RhdGlzdGljYWwgaW5mZXJlbmNlIC0gQ29uZmlkZW5jZSBpbnRlcnZhbHMiDQphdXRob3I6ICJTbWl0IE1laHRhIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQNCi0tLQ0KDQpgYGB7ciBsb2FkLXBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KG9wZW5pbnRybykNCmxpYnJhcnkoaW5mZXIpDQpgYGANCg0KSW4gdGhpcyBsYWIsIG9uZSBjb25zaWRlcnMgdGhlIHJlYWwgZXN0YXRlIHRyYW5zYWN0aW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgdG93biBvbiBBbWVzLCBJb3dhLg0KYGBge3IgbG9hZCBkYXRhfQ0KZGF0YShhbWVzKQ0Kc2V0LnNlZWQoMTUzKQ0KYGBgDQoNCk9uZSBub3cgcHJvY2VlZHMgdG8gdGFrZSBhIHJhbmRvbSBzYW1wbGUgb2Ygc2l6ZSA2MCBmcm9tIHRoZSBwb3B1bGF0aW9uczoNCmBgYHtyIHRha2Ugc2FtcGxlfQ0KbjwtNjANCnNhbXA8LWFtZXMlPiUNCiAgcmVwX3NhbXBsZV9uKHNpemU9bikNCmBgYCANCg0KIyMjIEV4ZXJjaXNlIDENCkRlc2NyaWJlIHRoZSBkaXN0cmlidXRpb24gb2YgaG91c2UgYXJlYSBpbiB5b3VyIHNhbXBsZS4gV2hhdCB3b3VsZCB5b3Ugc2F5IGlzIHRoZSDigJx0eXBpY2Fs4oCdIHNpemUgd2l0aGluIHlvdXIgc2FtcGxlPyBBbHNvIHN0YXRlIHByZWNpc2VseSB3aGF0IHlvdSBpbnRlcnByZXRlZCDigJx0eXBpY2Fs4oCdIHRvIG1lYW4uDQoNCkFuczogVGhlIGhvdXNlIHNhbXBsZSBkb2VzIG5vdCByZWFsbHkgZm9sbG93IGEgcGF0dGVybiwgYnV0IG9uZSBjYW4gc2VlIGEgaGlnaCBjbHVzdGVyaW5nIG9mIGFyZWFzIGluIHRoZSByYW5nZSBvZiA3NTAgc3F1YXJlIGZlZXQgdG8gMTc1MCBzcXVhcmUgZmVldDogYWx0aG91Z2ggdGhpcyBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYSBub3JtYWwgZGlzdHJpYnV0aW9uLCBzcHJlYWQgb3V0IHdpZGUgYWNyb3NzIHRoZSBzYW1wbGVkIGRhdGEpLiBUaGUgInR5cGljYWwiIGlzIGludGVycHJldGVkIGhpdGhlciBhcyB0aGUgbWF4aW11bSBjbHVzdGVyaW5nLCBvciB0aGUgaGlzdG9ncmFtIGJpbiB3aGVyZWluIHRoZSBtb2RlIGFuZCB0aGUgbWVkaWFuIG9mIHRoZSBkYXRhIGFyZSBsb2NhdGVkLg0KYGBge3IgY29kZS1jaHVuay1sYWJlbH0NCmhpc3Qoc2FtcCRhcmVhLCBicmVha3M9MTApDQpzdW1tYXJ5KHNhbXAkYXJlYSkNCmBgYA0KDQojIyMgRXhlcmNpc2UgMg0KV291bGQgeW91IGV4cGVjdCBhbm90aGVyIHN0dWRlbnTigJlzIGRpc3RyaWJ1dGlvbiB0byBiZSBpZGVudGljYWwgdG8geW91cnM/IFdvdWxkIHlvdSBleHBlY3QgaXQgdG8gYmUgc2ltaWxhcj8gV2h5IG9yIHdoeSBub3Q/DQoNCkFuczogTm8sIEkgd291bGQgbm90IGV4cGVjdCBhbm90aGVyIHN0dWRlbnQncyBkaXN0cmlidXRpb24gdG8gYmUgaWRlbnRpY2FsIHRvIG1pbmUgYXMgdGhlIHNhbXBsZSBpcyByYW5kb21seSBnZW5lcmF0ZWQgKGFuZCB0aGUgc2VlZCB1c2VkIGZvciB0aGlzIHB1cnBvc2UgbWlnaHQgdmFyeSBmcm9tIHN0dWRlbnQgdG8gc3R1ZGVudC4pDQoNCiMjIENvbmZpZGVuY2UgSW50ZXJ2YWxzDQpUaGUgY29kZSBnaXZlbiBiZWxvdyB3aWxsIGVzdGFibGlzaCB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgdGhlIGRhdGEgdGhhdCB3ZSBoYXZlIHNhbXBsZWQ6DQpgYGB7ciBDb25maWRlbmNlIEludGVydmFsfQ0Kc2FtcCU+JQ0KICBzcGVjaWZ5KGZvcm11bGE9YXJlYX5OVUxMKSU+JQ0KICBnZW5lcmF0ZShyZXBzPTEwMDAsdHlwZT0iYm9vdHN0cmFwIiklPiUNCiAgY2FsY3VsYXRlKHN0YXQ9Im1lYW4iKSU+JQ0KICBnZXRfY2kobGV2ZWw9MC45NSkNCmBgYA0KDQojIyMgRXhlcmNpc2UgMw0KRm9yIHRoZSBjb25maWRlbmNlIGludGVydmFsIHRvIGJlIHZhbGlkLCB0aGUgc2FtcGxlIG1lYW4gbXVzdCBiZSBub3JtYWxseSBkaXN0cmlidXRlZCBhbmQgaGF2ZSBzdGFuZGFyZCBlcnJvciBzL3NxcnQobikuIFdoYXQgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBmb3IgdGhpcyB0byBiZSB0cnVlPw0KDQpBbnM6IFRoaXMgbWVhbnMgdGhhdCB0aGUgc2FtcGxlIGdhdGhlcmVkIG11c3QgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLCBhbmQgbXVzdCBub3QgZGlzcGxheSBhIGh1Z2Ugc2tldy4gVGhlIHNhbXBsZSBtdXN0IGJlIGluZGVwZW5kZW50OyBpLmUuLCB0aGUgc2FtcGxlIHNpemUgbXVzdCBiZSBzbWFsbCBlbm91Z2h0IHRvIG5vdCBiZSBpbmZsdWVuY2VkIGJ5IG91dGxpZXJzLCBub3Igc2hvdWxkIGl0IHNvIHNtYWxsIHRoYXQgYW55IG91dGxpZXIgbWlnaHQgY2F1c2UgYSBtYWpvciBza2V3IGluIHRoZSBnaXZlbiBkYXRhLg0KDQojIyMgRXhlcmNpc2UgNA0KV2hhdCBkb2VzIOKAnDk1JSBjb25maWRlbmNl4oCdIG1lYW4/DQoNCkFuczogOTUlIGNvbmZpZGVuY2UgbWVhbnMgdGhhdCB0aGF0IHdlIGhhdmUgYSA5NSUgY2hhbmNlIHRoYXQgdGhlIGFjdHVhbC90cnVlIGF2ZXJhZ2Ugb2YgdGhlIGRhdGEgbGllcyB3aXRoaW4gdGhlIGJvdW5kcyB3ZSByZWNlaXZlZDsgYW5kIHRoYXQgYWx0aG91Z2ggYWxsIHRoZSBzdHVkZW50cyBtaWdodCBoYXZlIHJlY2VpdmVkIHZhcnlpbmcgZGF0YSBzYW1wbGVzLCA5NSUgb2YgdGhlIHN0dWRlbnRzIHdvdWxkIGhhdmUgcmVjZWl2ZWQgdGhlIG1lYW4gb2YgdGhlIGRhdGEgc2FtcGxlIHdpdGhpbiB0aGUgYWJvdmUgcmVjZWl2ZWQgYm91bmRzIGZvciB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbC4NCg0KYGBge3IgdHJ1ZSBkYXRlfQ0KcGFyYW1zPC1hbWVzJT4lDQogIHN1bW1hcmlzZShtdT1tZWFuKGFyZWEpKQ0KYGBgIA0KDQojIyMgRXhlcmNpc2UgNQ0KRG9lcyB5b3VyIGNvbmZpZGVuY2UgaW50ZXJ2YWwgY2FwdHVyZSB0aGUgdHJ1ZSBhdmVyYWdlIHNpemUgb2YgaG91c2VzIGluIEFtZXM/IElmIHlvdSBhcmUgd29ya2luZyBvbiB0aGlzIGxhYiBpbiBhIGNsYXNzcm9vbSwgZG9lcyB5b3VyIG5laWdoYm9y4oCZcyBpbnRlcnZhbCBjYXB0dXJlIHRoaXMgdmFsdWU/DQoNCkFuczogWWVzLCBteSBjb25maWRlbmNlIGludGVydmFsIGNhcHR1cmVzIHRoZSB0cnVlIGF2ZXJhZ2Ugc2l6ZSBvZiBob3VzZXMgaW4gQW1lcy4NCg0KIyMjIEV4ZXJjaXNlIDYNCkVhY2ggc3R1ZGVudCBzaG91bGQgaGF2ZSBnb3R0ZW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlkZW5jZSBpbnRlcnZhbC4gV2hhdCBwcm9wb3J0aW9uIG9mIHRob3NlIGludGVydmFscyB3b3VsZCB5b3UgZXhwZWN0IHRvIGNhcHR1cmUgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuPyBXaHk/DQoNCkFuczogSSB3b3VsZCBleHBlY3QgOTUlIG9mIHRoZSBzdHVkZW50cyB0byBjYXB0dXJlIHRoZSB0cnVlIHBvcHVsYXRpb24gZHVlIHRvIG9uZSBoYXZpbmcgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgb2YgOTUlLg0KDQpgYGB7cn0NCmNpPC1hbWVzJT4lDQogIHJlcF9zYW1wbGVfbihzaXplPW4sIHJlcHM9NTAsIHJlcGxhY2U9VFJVRSklPiUNCiAgc3VtbWFyaXNlKHhfYmFyPW1lYW4oYXJlYSksDQogICAgICAgICAgICBzZT1zZChhcmVhKS9zcXJ0KG4pLA0KICAgICAgICAgICAgbWU9cW5vcm0oMC45NzUpKnNlLA0KICAgICAgICAgICAgbG93ZXI9eF9iYXItbWUsDQogICAgICAgICAgICB1cHBlcj14X2JhcittZSkNCg0KY2klPiUNCiAgc2xpY2UoMTo1KQ0KDQpjaTwtY2klPiUNCiAgbXV0YXRlKGNhcHR1cmVfbXU9aWZlbHNlKGxvd2VyPHBhcmFtcyRtdSAmIHVwcGVyPnBhcmFtcyRtdSwieWVzIiwibm8iKSkNCg0KY2lfZGF0YTwtZ2F0aGVyKGNpLCB0eXBlLCBib3VuZCwgbG93ZXI6dXBwZXIpDQoNCmdncGxvdChkYXRhPWNpX2RhdGEsIGFlcyh4PWJvdW5kLCB5PXJlcGxpY2F0ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1yZXBsaWNhdGUsIGNvbG9yPWNhcHR1cmVfbXUpKSsNCiAgZ2VvbV9wb2ludChzaXplPTIpKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0PXBhcmFtcyRtdSwgY29sb3I9ImRhcmtncmF5IikNCmBgYA0KDQojIyMgRXhlcmNpc2UgNw0KV2hhdCBwcm9wb3J0aW9uIG9mIHlvdXIgY29uZmlkZW5jZSBpbnRlcnZhbHMgaW5jbHVkZSB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4/IElzIHRoaXMgcHJvcG9ydGlvbiBleGFjdGx5IGVxdWFsIHRvIHRoZSBjb25maWRlbmNlIGxldmVsPyBJZiBub3QsIGV4cGxhaW4gd2h5LiBNYWtlIHN1cmUgdG8gaW5jbHVkZSB5b3VyIHBsb3QgaW4geW91ciBhbnN3ZXIuDQoNCkFuczogQXMgc2VlbiBmcm9tIHRoZSBwbG90IGJlbG93LCA0NiBvdXQgb2YgdGhlIDUwIHNhbXBsZXMgaW5jbHVkZSB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4uIFRoaXMgbGVhZHMgdG8gYSBjb25maWRlbmNlIGxldmVsIG9mIDkyLiBUaGlzIHByb3BvcnRpb24gbmVhcnMsIGJ1dCBkb2VzIG5vdCBleGFjdGx5IGVxdWFsIHRoZSBjb25maWRlbmNlIGxldmVsIGR1ZSB0byB0aGUgbWFzc2l2ZSBzcHJlYWQgY292ZXJlZCBieSB0aGUgc2FtcGxlLg0KDQpgYGB7ciBpbmNsdWRlIHBsb3R9DQpnZ3Bsb3QoZGF0YT1jaV9kYXRhLCBhZXMoeD1ib3VuZCwgeT1yZXBsaWNhdGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9cmVwbGljYXRlLCBjb2xvcj1jYXB0dXJlX211KSkrDQogIGdlb21fcG9pbnQoc2l6ZT0yKSsNCiAgZ2VvbV9saW5lKCkrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdD1wYXJhbXMkbXUsIGNvbG9yPSJkYXJrZ3JheSIpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDggYW5kIEV4ZXJjaXNlIDkNCkZpbmQgYSBjb25maWRlbmNlIGludGVydmFsIHdpdGggYSBwZXJjZW50YWdlIG9mIHlvdXIgY2hvb3NpbmcgKG90aGVyIHRoYW4gOTUlKSBhbmQgaW50ZXJwcmV0IGl0Lg0KQ2FsY3VsYXRlIDUwIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGF0IHRoZSBjb25maWRlbmNlIGxldmVsIHlvdSBjaG9zZSBpbiB0aGUgcHJldmlvdXMgcXVlc3Rpb24sIGFuZCBwbG90IGFsbCBpbnRlcnZhbHMgb24gb25lIHBsb3QsIGFuZCBjYWxjdWxhdGUgdGhlIHByb3BvcnRpb24gb2YgaW50ZXJ2YWxzIHRoYXQgaW5jbHVkZSB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4uIEhvdyBkb2VzIHRoaXMgcGVyY2VudGFnZSBjb21wYXJlIHRvIHRoZSBjb25maWRlbmNlIGxldmVsIHNlbGVjdGVkIGZvciB0aGUgaW50ZXJ2YWxzPyBNYWtlIHN1cmUgdG8gaW5jbHVkZSB5b3VyIHBsb3QgaW4geW91ciBhbnN3ZXIuDQoNCg0KQW5zOiBBc3N1bWluZyBhIGNvbmZpZGVuY2UgaW50ZXJ2YWwgb2YgOTglOg0KYGBge3IgbmV3IGNvbmZpZGVuY2UgaW50ZXJ2YWx9DQpzYW1wJT4lDQogIHNwZWNpZnkoZm9ybXVsYT1hcmVhfk5VTEwpJT4lDQogIGdlbmVyYXRlKHJlcHM9MTAwMCx0eXBlPSJib290c3RyYXAiKSU+JQ0KICBjYWxjdWxhdGUoc3RhdD0ibWVhbiIpJT4lDQogIGdldF9jaShsZXZlbD0wLjk4KQ0KYGBgDQoNCmFuZCB0aGUgY29ycmVzcG9uZGluZyBncmFwaCBiZWluZzoNCmBgYHtyfQ0KY2k8LWFtZXMlPiUNCiAgcmVwX3NhbXBsZV9uKHNpemU9biwgcmVwcz01MCwgcmVwbGFjZT1UUlVFKSU+JQ0KICBzdW1tYXJpc2UoeF9iYXI9bWVhbihhcmVhKSwNCiAgICAgICAgICAgIHNlPXNkKGFyZWEpL3NxcnQobiksDQogICAgICAgICAgICBtZT1xbm9ybSgwLjk4NSkqc2UsDQogICAgICAgICAgICBsb3dlcj14X2Jhci1tZSwNCiAgICAgICAgICAgIHVwcGVyPXhfYmFyK21lKQ0KDQpjaSU+JQ0KICBzbGljZSgxOjUpDQoNCmNpPC1jaSU+JQ0KICBtdXRhdGUoY2FwdHVyZV9tdT1pZmVsc2UobG93ZXI8cGFyYW1zJG11ICYgdXBwZXI+cGFyYW1zJG11LCJ5ZXMiLCJubyIpKQ0KDQpjaV9kYXRhPC1nYXRoZXIoY2ksIHR5cGUsIGJvdW5kLCBsb3dlcjp1cHBlcikNCg0KZ2dwbG90KGRhdGE9Y2lfZGF0YSwgYWVzKHg9Ym91bmQsIHk9cmVwbGljYXRlLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPXJlcGxpY2F0ZSwgY29sb3I9Y2FwdHVyZV9tdSkpKw0KICBnZW9tX3BvaW50KHNpemU9MikrDQogIGdlb21fbGluZSgpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9cGFyYW1zJG11LCBjb2xvcj0iZGFya2dyYXkiKQ0KYGBgDQp3ZSBjYW4gc2VlIGZyb20gdGhlIGFib3ZlIGdyYXBoLCB0aGF0IGJ5IGNob29zaW5nIGEgY29uZmlkZW5jZSBsZXZlbCBvZiA5OCUsIHdlIHJlY2VpdmUgNCBzYW1wbGVzIHdob3NlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZG9lcyBub3QgaW5jbHVkZSB0aGUgdHJ1ZSBtZWFuIGkuZS4sIG91ciBjb25maWRlbmNlIGxldmVsIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGRhdGEgcmVjZWl2ZWQuDQo=