library(tidyverse)
library(openintro)

Exercise 1

To extract all counts of the births of girls, I would simply use arbuthnot$girls.

arbuthnot$girls
##  [1] 4683 4457 4102 4590 4839 4820 4928 4605 4457 4952 4784 5332 5200 4910 4617
## [16] 3997 3919 3395 3536 3181 2746 2722 2840 2908 2959 3179 3349 3382 3289 3013
## [31] 2781 3247 4107 4803 4881 5681 4858 4319 5322 5560 5829 5719 6061 6120 5822
## [46] 5738 5717 5847 6203 6033 6041 6299 6533 6744 7158 7127 7246 7119 7214 7101
## [61] 7167 7302 7392 7316 7483 6647 6713 7229 7767 7626 7452 7061 7514 7656 7683
## [76] 5738 7779 7417 7687 7623 7380 7288
ggplot(data = arbuthnot, aes(x = year, y = girls)) +
  geom_point()+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = arbuthnot, aes(x = year, y = girls)) +
  geom_line(color = 'pink')

Exercise 2

There is a general increase in the number of girls baptized over the years, but the plot looks like a portion of a sine wave. It appears as though the number of girls baptized in the 40 years after the end of the plot will see a gradual decline.

To add the new variable column, I took an approach that I personally find more appealing, but for the sake of the exercise I did follow the piping and mutation steps. I have included my approach in the code block as a comment. It seems that piping is much more versatile than attach() and detach()

arbuthnot <- arbuthnot %>%
  mutate(total = boys + girls)

#arbuthnot$total <- arbuthnot$boys + arbuthnot$girls
ggplot(data = arbuthnot, aes(x = year, y = total)) +
  geom_line(color = 'chartreuse')+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

arbuthnot <- arbuthnot %>%
  mutate(boy_to_girl_ratio = boys / girls)
arbuthnot <- arbuthnot %>%
  mutate(boy_ratio = boys / total)
arbuthnot <- arbuthnot %>%
  mutate(girl_ratio = girls / total)

Exercise 3

Around the same time that the girls saw their lowest baptism numbers, boys proportionally saw their highest spike, which indicates that the girls’ recovery from whatever decreased their baptism numbers was significantly slower than that of the boys.

ggplot(data = arbuthnot, aes(x = year, y = boy_ratio)) +
  geom_line(color = 'skyblue')+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

arbuthnot <- arbuthnot %>%
  mutate(more_boys = boys > girls)

data('present', package = 'openintro')

arbuthnot %>%
  summarize(min = min(boys), max = max(boys))
## # A tibble: 1 × 2
##     min   max
##   <int> <int>
## 1  2890  8426

Exercise 4

The data set ranges from 1629-1710. The dimensions are 82 rows by 8 columns (after adding columns to the data frame) Note: I added a girl_ratio column as well. The column names are: year, boys, girls, total, boy_to_girl_ratio, boy_ratio, girl_ratio, and more_boys.

attach(arbuthnot)
y1 <- year[as.numeric(which(year == min(year)))]
y2 <- year[as.numeric(which(year == max(year)))]
detach(arbuthnot)
dims <- dim(arbuthnot)
names <- colnames(arbuthnot)

y1
## [1] 1629
y2
## [1] 1710
dims
## [1] 82  8
names
## [1] "year"              "boys"              "girls"            
## [4] "total"             "boy_to_girl_ratio" "boy_ratio"        
## [7] "girl_ratio"        "more_boys"

Exercise 5

Present day birth numbers are significantly higher, so at a glance, the data is tremendously different. The ratios offer a much more clear comparison than counts would provide. In the present dataframe, the proportion for births of girls is sharply increasing, while that of boys is decreasing. While girls may be trending towards a larger set of the proportion of births, in the two data sets, girls born never exceeds 50% of children in a given year.

In both samples, the number of boys exceeds that of girls in every single year.

present <- present %>%
  mutate(total = boys + girls)
present <- present %>%
  mutate(boy_to_girl_ratio = boys / girls)
present <- present %>%
  mutate(boy_ratio = boys / total)
present <- present %>%
  mutate(girl_ratio = girls / total)
present <- present %>%
  mutate(more_boys = boys > girls)

present %>%
  summarize(min = min(boys), max = max(boys))
## # A tibble: 1 × 2
##       min     max
##     <dbl>   <dbl>
## 1 1211684 2186274
max(arbuthnot$girl_ratio)
## [1] 0.4973459
max(present$girl_ratio)
## [1] 0.4888335
ggplot(data = present, aes(x = year, y = total)) +
  geom_line(color = 'darkgreen')+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = present, aes(x = year, y = girl_ratio)) +
  geom_line(color = 'pink')+
  ggtitle("Present Girl Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = arbuthnot, aes(x = year, y = girl_ratio)) +
  geom_line(color = 'pink2')+
  ggtitle("Arbuthnot Girl Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = present, aes(x = year, y = boy_ratio)) +
  geom_line(color = 'aquamarine')+
  ggtitle("Present Boy Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = arbuthnot, aes(x = year, y = boy_ratio)) +
  geom_line(color = 'aquamarine')+
  ggtitle("Arbuthnot Boy Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Exercise 6

The plots I will display here are the same as the plots that I used to more fully grasp the comparison between the two data sets in exercise 5. As mentioned in the text of exercise 5, the number of boys always exceeds that of girls.

It is interesting to note that the two plotting strategies yield identical results with the exception of the scale for the y-axis. Dare I say, they are \(proportionate\).

ggplot(data = arbuthnot, aes(x = year, y = boy_ratio)) +
  geom_line(color = 'aquamarine')+
  ggtitle("Arbuthnot Boy Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = present, aes(x = year, y = boy_ratio)) +
  geom_line(color = 'aquamarine')+
  ggtitle("Present Boy Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = arbuthnot, aes(x = year, y = boy_to_girl_ratio)) +
  geom_line(color = 'aquamarine')+
  ggtitle("Arbuthnot Boy to Girl Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ggplot(data = present, aes(x = year, y = boy_to_girl_ratio)) +
  geom_line(color = 'aquamarine')+
  ggtitle("Present Boy to Girl Ratio")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Exercise 7

The most births in the US was in 1961. This makes sense because it took place within the baby boom. In the plot below, we can see the sharp increase in births that coincides with the end of WWII.

ggplot(data = present, aes(x = year, y = total)) +
  geom_line(color = 'darkorange1')+
  ggtitle("Present Total Births")+
  theme(plot.title = element_text(hjust = 0.5))+
  geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

present[as.numeric(which(present$total == max(present$total))), 1]
## # A tibble: 1 × 1
##    year
##   <dbl>
## 1  1961
present %>%
  arrange(desc(total))
## # A tibble: 63 × 8
##     year    boys   girls   total boy_to_girl_rat… boy_ratio girl_ratio more_boys
##    <dbl>   <dbl>   <dbl>   <dbl>            <dbl>     <dbl>      <dbl> <lgl>    
##  1  1961 2186274 2082052 4268326             1.05     0.512      0.488 TRUE     
##  2  1960 2179708 2078142 4257850             1.05     0.512      0.488 TRUE     
##  3  1957 2179960 2074824 4254784             1.05     0.512      0.488 TRUE     
##  4  1959 2173638 2071158 4244796             1.05     0.512      0.488 TRUE     
##  5  1958 2152546 2051266 4203812             1.05     0.512      0.488 TRUE     
##  6  1962 2132466 2034896 4167362             1.05     0.512      0.488 TRUE     
##  7  1956 2133588 2029502 4163090             1.05     0.513      0.487 TRUE     
##  8  1990 2129495 2028717 4158212             1.05     0.512      0.488 TRUE     
##  9  1991 2101518 2009389 4110907             1.05     0.511      0.489 TRUE     
## 10  1963 2101632 1996388 4098020             1.05     0.513      0.487 TRUE     
## # … with 53 more rows
LS0tCnRpdGxlOiAiTGFiIDE6IEludHJvIHRvIFIiCmF1dGhvcjogIlNoYW5lIEh5bHRvbiIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydAotLS0KCmBgYHtyIGxvYWQtcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KG9wZW5pbnRybykKYGBgCgojIyMgRXhlcmNpc2UgMQoKVG8gZXh0cmFjdCBhbGwgY291bnRzIG9mIHRoZSBiaXJ0aHMgb2YgZ2lybHMsIEkgd291bGQgc2ltcGx5IHVzZSBhcmJ1dGhub3QkZ2lybHMuIAoKYGBge3Igdmlldy1naXJscy1jb3VudHN9CmFyYnV0aG5vdCRnaXJscwpnZ3Bsb3QoZGF0YSA9IGFyYnV0aG5vdCwgYWVzKHggPSB5ZWFyLCB5ID0gZ2lybHMpKSArCiAgZ2VvbV9wb2ludCgpKwogIGdlb21fc21vb3RoKCkKCmdncGxvdChkYXRhID0gYXJidXRobm90LCBhZXMoeCA9IHllYXIsIHkgPSBnaXJscykpICsKICBnZW9tX2xpbmUoY29sb3IgPSAncGluaycpCgoKYGBgCgoKIyMjIEV4ZXJjaXNlIDIKClRoZXJlIGlzIGEgZ2VuZXJhbCBpbmNyZWFzZSBpbiB0aGUgbnVtYmVyIG9mIGdpcmxzIGJhcHRpemVkIG92ZXIgdGhlIHllYXJzLCBidXQgdGhlIHBsb3QgbG9va3MgbGlrZSBhIHBvcnRpb24gb2YgYSBzaW5lIHdhdmUuIEl0IGFwcGVhcnMgYXMgdGhvdWdoIHRoZSBudW1iZXIgb2YgZ2lybHMgYmFwdGl6ZWQgaW4gdGhlIDQwIHllYXJzIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHBsb3Qgd2lsbCBzZWUgYSBncmFkdWFsIGRlY2xpbmUuIAoKVG8gYWRkIHRoZSBuZXcgdmFyaWFibGUgY29sdW1uLCBJIHRvb2sgYW4gYXBwcm9hY2ggdGhhdCBJIHBlcnNvbmFsbHkgZmluZCBtb3JlIGFwcGVhbGluZywgYnV0IGZvciB0aGUgc2FrZSBvZiB0aGUgZXhlcmNpc2UgSSBkaWQgZm9sbG93IHRoZSBwaXBpbmcgYW5kIG11dGF0aW9uIHN0ZXBzLiBJIGhhdmUgaW5jbHVkZWQgbXkgYXBwcm9hY2ggaW4gdGhlIGNvZGUgYmxvY2sgYXMgYSBjb21tZW50LiBJdCBzZWVtcyB0aGF0IHBpcGluZyBpcyBtdWNoIG1vcmUgdmVyc2F0aWxlIHRoYW4gYXR0YWNoKCkgYW5kIGRldGFjaCgpIAoKCmBgYHtyIHRyZW5kLWdpcmxzfQphcmJ1dGhub3QgPC0gYXJidXRobm90ICU+JQogIG11dGF0ZSh0b3RhbCA9IGJveXMgKyBnaXJscykKCiNhcmJ1dGhub3QkdG90YWwgPC0gYXJidXRobm90JGJveXMgKyBhcmJ1dGhub3QkZ2lybHMKZ2dwbG90KGRhdGEgPSBhcmJ1dGhub3QsIGFlcyh4ID0geWVhciwgeSA9IHRvdGFsKSkgKwogIGdlb21fbGluZShjb2xvciA9ICdjaGFydHJldXNlJykrCiAgZ2VvbV9zbW9vdGgoKQoKYXJidXRobm90IDwtIGFyYnV0aG5vdCAlPiUKICBtdXRhdGUoYm95X3RvX2dpcmxfcmF0aW8gPSBib3lzIC8gZ2lybHMpCmFyYnV0aG5vdCA8LSBhcmJ1dGhub3QgJT4lCiAgbXV0YXRlKGJveV9yYXRpbyA9IGJveXMgLyB0b3RhbCkKYXJidXRobm90IDwtIGFyYnV0aG5vdCAlPiUKICBtdXRhdGUoZ2lybF9yYXRpbyA9IGdpcmxzIC8gdG90YWwpCgpgYGAKCgojIyMgRXhlcmNpc2UgMwoKQXJvdW5kIHRoZSBzYW1lIHRpbWUgdGhhdCB0aGUgZ2lybHMgc2F3IHRoZWlyIGxvd2VzdCBiYXB0aXNtIG51bWJlcnMsIGJveXMgcHJvcG9ydGlvbmFsbHkgc2F3IHRoZWlyIGhpZ2hlc3Qgc3Bpa2UsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBnaXJscycgcmVjb3ZlcnkgZnJvbSB3aGF0ZXZlciBkZWNyZWFzZWQgdGhlaXIgYmFwdGlzbSBudW1iZXJzIHdhcyBzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIHRoYXQgb2YgdGhlIGJveXMuIAoKYGBge3IgcGxvdC1wcm9wLWJveXMtYXJidXRobm90fQpnZ3Bsb3QoZGF0YSA9IGFyYnV0aG5vdCwgYWVzKHggPSB5ZWFyLCB5ID0gYm95X3JhdGlvKSkgKwogIGdlb21fbGluZShjb2xvciA9ICdza3libHVlJykrCiAgZ2VvbV9zbW9vdGgoKQoKYXJidXRobm90IDwtIGFyYnV0aG5vdCAlPiUKICBtdXRhdGUobW9yZV9ib3lzID0gYm95cyA+IGdpcmxzKQoKZGF0YSgncHJlc2VudCcsIHBhY2thZ2UgPSAnb3BlbmludHJvJykKCmFyYnV0aG5vdCAlPiUKICBzdW1tYXJpemUobWluID0gbWluKGJveXMpLCBtYXggPSBtYXgoYm95cykpCmBgYAoKCiMjIyBFeGVyY2lzZSA0CgpUaGUgZGF0YSBzZXQgcmFuZ2VzIGZyb20gMTYyOS0xNzEwLgpUaGUgZGltZW5zaW9ucyBhcmUgODIgcm93cyBieSA4IGNvbHVtbnMgKGFmdGVyIGFkZGluZyBjb2x1bW5zIHRvIHRoZSBkYXRhIGZyYW1lKQpOb3RlOiBJIGFkZGVkIGEgZ2lybF9yYXRpbyBjb2x1bW4gYXMgd2VsbC4gClRoZSBjb2x1bW4gbmFtZXMgYXJlOiB5ZWFyLCBib3lzLCBnaXJscywgdG90YWwsIGJveV90b19naXJsX3JhdGlvLCBib3lfcmF0aW8sIGdpcmxfcmF0aW8sIGFuZCBtb3JlX2JveXMuIAoKCmBgYHtyIGRpbS1wcmVzZW50fQphdHRhY2goYXJidXRobm90KQp5MSA8LSB5ZWFyW2FzLm51bWVyaWMod2hpY2goeWVhciA9PSBtaW4oeWVhcikpKV0KeTIgPC0geWVhclthcy5udW1lcmljKHdoaWNoKHllYXIgPT0gbWF4KHllYXIpKSldCmRldGFjaChhcmJ1dGhub3QpCmRpbXMgPC0gZGltKGFyYnV0aG5vdCkKbmFtZXMgPC0gY29sbmFtZXMoYXJidXRobm90KQoKeTEKeTIKZGltcwpuYW1lcwoKYGBgCgoKIyMjIEV4ZXJjaXNlIDUKClByZXNlbnQgZGF5IGJpcnRoIG51bWJlcnMgYXJlIHNpZ25pZmljYW50bHkgaGlnaGVyLCBzbyBhdCBhIGdsYW5jZSwgdGhlIGRhdGEgaXMgdHJlbWVuZG91c2x5IGRpZmZlcmVudC4gClRoZSByYXRpb3Mgb2ZmZXIgYSBtdWNoIG1vcmUgY2xlYXIgY29tcGFyaXNvbiB0aGFuIGNvdW50cyB3b3VsZCBwcm92aWRlLiBJbiB0aGUgcHJlc2VudCBkYXRhZnJhbWUsIHRoZSBwcm9wb3J0aW9uIGZvciBiaXJ0aHMgb2YgZ2lybHMgaXMgc2hhcnBseSBpbmNyZWFzaW5nLCB3aGlsZSB0aGF0IG9mIGJveXMgaXMgZGVjcmVhc2luZy4gV2hpbGUgZ2lybHMgbWF5IGJlIHRyZW5kaW5nIHRvd2FyZHMgYSBsYXJnZXIgc2V0IG9mIHRoZSBwcm9wb3J0aW9uIG9mIGJpcnRocywgaW4gdGhlIHR3byBkYXRhIHNldHMsIGdpcmxzIGJvcm4gbmV2ZXIgZXhjZWVkcyA1MCUgb2YgY2hpbGRyZW4gaW4gYSBnaXZlbiB5ZWFyLiAKCkluIGJvdGggc2FtcGxlcywgdGhlIG51bWJlciBvZiBib3lzIGV4Y2VlZHMgdGhhdCBvZiBnaXJscyBpbiBldmVyeSBzaW5nbGUgeWVhci4gCgoKCmBgYHtyIGNvdW50LWNvbXBhcmV9CnByZXNlbnQgPC0gcHJlc2VudCAlPiUKICBtdXRhdGUodG90YWwgPSBib3lzICsgZ2lybHMpCnByZXNlbnQgPC0gcHJlc2VudCAlPiUKICBtdXRhdGUoYm95X3RvX2dpcmxfcmF0aW8gPSBib3lzIC8gZ2lybHMpCnByZXNlbnQgPC0gcHJlc2VudCAlPiUKICBtdXRhdGUoYm95X3JhdGlvID0gYm95cyAvIHRvdGFsKQpwcmVzZW50IDwtIHByZXNlbnQgJT4lCiAgbXV0YXRlKGdpcmxfcmF0aW8gPSBnaXJscyAvIHRvdGFsKQpwcmVzZW50IDwtIHByZXNlbnQgJT4lCiAgbXV0YXRlKG1vcmVfYm95cyA9IGJveXMgPiBnaXJscykKCnByZXNlbnQgJT4lCiAgc3VtbWFyaXplKG1pbiA9IG1pbihib3lzKSwgbWF4ID0gbWF4KGJveXMpKQoKbWF4KGFyYnV0aG5vdCRnaXJsX3JhdGlvKQptYXgocHJlc2VudCRnaXJsX3JhdGlvKQoKCmdncGxvdChkYXRhID0gcHJlc2VudCwgYWVzKHggPSB5ZWFyLCB5ID0gdG90YWwpKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gJ2RhcmtncmVlbicpKwogIGdlb21fc21vb3RoKCkKCmdncGxvdChkYXRhID0gcHJlc2VudCwgYWVzKHggPSB5ZWFyLCB5ID0gZ2lybF9yYXRpbykpICsKICBnZW9tX2xpbmUoY29sb3IgPSAncGluaycpKwogIGdndGl0bGUoIlByZXNlbnQgR2lybCBSYXRpbyIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsKICBnZW9tX3Ntb290aCgpCgpnZ3Bsb3QoZGF0YSA9IGFyYnV0aG5vdCwgYWVzKHggPSB5ZWFyLCB5ID0gZ2lybF9yYXRpbykpICsKICBnZW9tX2xpbmUoY29sb3IgPSAncGluazInKSsKICBnZ3RpdGxlKCJBcmJ1dGhub3QgR2lybCBSYXRpbyIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsKICBnZW9tX3Ntb290aCgpCgpnZ3Bsb3QoZGF0YSA9IHByZXNlbnQsIGFlcyh4ID0geWVhciwgeSA9IGJveV9yYXRpbykpICsKICBnZW9tX2xpbmUoY29sb3IgPSAnYXF1YW1hcmluZScpKwogIGdndGl0bGUoIlByZXNlbnQgQm95IFJhdGlvIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGdlb21fc21vb3RoKCkKCmdncGxvdChkYXRhID0gYXJidXRobm90LCBhZXMoeCA9IHllYXIsIHkgPSBib3lfcmF0aW8pKSArCiAgZ2VvbV9saW5lKGNvbG9yID0gJ2FxdWFtYXJpbmUnKSsKICBnZ3RpdGxlKCJBcmJ1dGhub3QgQm95IFJhdGlvIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGdlb21fc21vb3RoKCkKYGBgCgoKIyMjIEV4ZXJjaXNlIDYKClRoZSBwbG90cyBJIHdpbGwgZGlzcGxheSBoZXJlIGFyZSB0aGUgc2FtZSBhcyB0aGUgcGxvdHMgdGhhdCBJIHVzZWQgdG8gbW9yZSBmdWxseSBncmFzcCB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSB0d28gZGF0YSBzZXRzIGluIGV4ZXJjaXNlIDUuIEFzIG1lbnRpb25lZCBpbiB0aGUgdGV4dCBvZiBleGVyY2lzZSA1LCB0aGUgbnVtYmVyIG9mIGJveXMgYWx3YXlzIGV4Y2VlZHMgdGhhdCBvZiBnaXJscy4KCkl0IGlzIGludGVyZXN0aW5nIHRvIG5vdGUgdGhhdCB0aGUgdHdvIHBsb3R0aW5nIHN0cmF0ZWdpZXMgeWllbGQgaWRlbnRpY2FsIHJlc3VsdHMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBzY2FsZSBmb3IgdGhlIHktYXhpcy4gRGFyZSBJIHNheSwgdGhleSBhcmUgJHByb3BvcnRpb25hdGUkLiAKCmBgYHtyIHBsb3QtcHJvcC1ib3lzLXByZXNlbnR9CgpnZ3Bsb3QoZGF0YSA9IGFyYnV0aG5vdCwgYWVzKHggPSB5ZWFyLCB5ID0gYm95X3JhdGlvKSkgKwogIGdlb21fbGluZShjb2xvciA9ICdhcXVhbWFyaW5lJykrCiAgZ2d0aXRsZSgiQXJidXRobm90IEJveSBSYXRpbyIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsKICBnZW9tX3Ntb290aCgpCgpnZ3Bsb3QoZGF0YSA9IHByZXNlbnQsIGFlcyh4ID0geWVhciwgeSA9IGJveV9yYXRpbykpICsKICBnZW9tX2xpbmUoY29sb3IgPSAnYXF1YW1hcmluZScpKwogIGdndGl0bGUoIlByZXNlbnQgQm95IFJhdGlvIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGdlb21fc21vb3RoKCkKCmdncGxvdChkYXRhID0gYXJidXRobm90LCBhZXMoeCA9IHllYXIsIHkgPSBib3lfdG9fZ2lybF9yYXRpbykpICsKICBnZW9tX2xpbmUoY29sb3IgPSAnYXF1YW1hcmluZScpKwogIGdndGl0bGUoIkFyYnV0aG5vdCBCb3kgdG8gR2lybCBSYXRpbyIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsKICBnZW9tX3Ntb290aCgpCgpnZ3Bsb3QoZGF0YSA9IHByZXNlbnQsIGFlcyh4ID0geWVhciwgeSA9IGJveV90b19naXJsX3JhdGlvKSkgKwogIGdlb21fbGluZShjb2xvciA9ICdhcXVhbWFyaW5lJykrCiAgZ2d0aXRsZSgiUHJlc2VudCBCb3kgdG8gR2lybCBSYXRpbyIpKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSsKICBnZW9tX3Ntb290aCgpCmBgYAoKCiMjIyBFeGVyY2lzZSA3CgpUaGUgbW9zdCBiaXJ0aHMgaW4gdGhlIFVTIHdhcyBpbiAxOTYxLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgaXQgdG9vayBwbGFjZSB3aXRoaW4gdGhlIGJhYnkgYm9vbS4gSW4gdGhlIHBsb3QgYmVsb3csIHdlIGNhbiBzZWUgdGhlIHNoYXJwIGluY3JlYXNlIGluIGJpcnRocyB0aGF0IGNvaW5jaWRlcyB3aXRoIHRoZSBlbmQgb2YgV1dJSS4KCmBgYHtyIGZpbmQtbWF4LXRvdGFsfQpnZ3Bsb3QoZGF0YSA9IHByZXNlbnQsIGFlcyh4ID0geWVhciwgeSA9IHRvdGFsKSkgKwogIGdlb21fbGluZShjb2xvciA9ICdkYXJrb3JhbmdlMScpKwogIGdndGl0bGUoIlByZXNlbnQgVG90YWwgQmlydGhzIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpKwogIGdlb21fc21vb3RoKCkKCnByZXNlbnRbYXMubnVtZXJpYyh3aGljaChwcmVzZW50JHRvdGFsID09IG1heChwcmVzZW50JHRvdGFsKSkpLCAxXQoKcHJlc2VudCAlPiUKICBhcnJhbmdlKGRlc2ModG90YWwpKQpgYGAKCg==