library(tidyverse)
library(openintro)
ex1_1a=read_csv("data/ex1_1a.csv", show_col_types = FALSE)
ex1_1b=read_csv("data/ex1_1b.csv", show_col_types = FALSE)
ex1_2a=read_csv("data/ex1_2a.csv", show_col_types = FALSE)
ex1_2b=read_csv("data/ex1_2b.csv", show_col_types = FALSE)
ex2_1a=read_csv("data/ex2_1a.csv", show_col_types = FALSE)
ex2_1b=read_csv("data/ex2_1b.csv", show_col_types = FALSE)
ex2_2a=read_csv("data/ex2_2a.csv", show_col_types = FALSE)
ex2_2b=read_csv("data/ex2_2b.csv", show_col_types = FALSE)
ex3_1a=read_csv("data/ex3_1a.csv", show_col_types = FALSE)
ex3_1b=read_csv("data/ex3_1b.csv", show_col_types = FALSE)
ex3_2a=read_csv("data/ex3_2a.csv", show_col_types = FALSE)
ex3_2b=read_csv("data/ex3_2b.csv", show_col_types = FALSE)
ex4_1a=read_csv("data/ex4_1a.csv", show_col_types = FALSE)
ex4_1b=read_csv("data/ex4_1b.csv", show_col_types = FALSE)
ex4_2a=read_csv("data/ex4_2a.csv", show_col_types = FALSE)
ex4_2b=read_csv("data/ex4_2b.csv", show_col_types = FALSE)
Exercise 1
Plotting the 50% and the 100% of the data from experiment 1 (with a 0 degree angle)
ggplot(data=ex1_1a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex1_1b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex1_2a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex1_2b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

Exercise 2
Calculating the mean and the standard deviation of the above data
df = ex1_1a;
Mean = sum(df$Bin*df$Count)/sum(df$Count)
SD = sqrt(sum((df$Bin-Mean)**2*df$Count)/(sum(df$Count)-1))
cat("Mean=",Mean,"\n","Sample-SD=",SD)
## Mean= 13.52471
## Sample-SD= 5.367182
df = ex1_1b;
Mean = sum(df$Bin*df$Count)/sum(df$Count)
SD = sqrt(sum((df$Bin-Mean)**2*df$Count)/(sum(df$Count)-1))
cat("Mean=",Mean,"\n","Sample-SD=",SD)
## Mean= 12.84914
## Sample-SD= 5.09997
df = ex1_2a;
Mean = sum(df$Bin*df$Count)/sum(df$Count)
SD = sqrt(sum((df$Bin-Mean)**2*df$Count)/(sum(df$Count)-1))
cat("Mean=",Mean,"\n","Sample-SD=",SD)
## Mean= 12.803
## Sample-SD= 4.720793
df = ex1_2b;
Mean = sum(df$Bin*df$Count)/sum(df$Count)
SD = sqrt(sum((df$Bin-Mean)**2*df$Count)/(sum(df$Count)-1))
cat("Mean=",Mean,"\n","Sample-SD=",SD)
## Mean= 13.43869
## Sample-SD= 4.409267
Exercise 3
How do means compare between the different cases?
Between the different cases, the mean of the data all agree with each other: between the range of 12.8 and 13.5; which out of a data of nearly 27 bins, seems to indicate that the mean did not change in the first experiment that greatly.
Exercise 4
How does tilting the Galton board vary the results (Try to use the height of the legs, the distance between legs and the height of the pen to make conclusions)?
Experiment 2
ggplot(data=ex2_1a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex2_1b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex2_2a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex2_2b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

#finding the mean the standard deviation with a small anglular tilt.
df2_1a = ex2_1a;
Mean = sum(df2_1a$Bin*df2_1a$Count)/sum(df2_1a$Count)
SD = sqrt(sum((df2_1a$Bin-Mean)**2*df2_1a$Count)/(sum(df2_1a$Count)-1))
cat("Mean 2_1a =",Mean,"\n","Sample-SD 2_1a=",SD,"\n")
## Mean 2_1a = 17.02365
## Sample-SD 2_1a= 4.290046
df2_1b = ex2_1b;
Mean = sum(df2_1b$Bin*df2_1b$Count)/sum(df2_1b$Count)
SD = sqrt(sum((df2_1b$Bin-Mean)**2*df2_1b$Count)/(sum(df2_1b$Count)-1))
cat("Mean 2_1b =",Mean,"\n","Sample-SD 2_1b=",SD,"\n")
## Mean 2_1b = 15.79959
## Sample-SD 2_1b= 5.033724
df2_2a = ex2_2a;
Mean = sum(df2_2a$Bin*df2_2a$Count)/sum(df2_2a$Count)
SD = sqrt(sum((df2_2a$Bin-Mean)**2*df2_2a$Count)/(sum(df2_2a$Count)-1))
cat("Mean 2_2a =",Mean,"\n","Sample-SD 2_2a=",SD,"\n")
## Mean 2_2a = 15.89836
## Sample-SD 2_2a= 5.91973
df2_2b = ex2_2b;
Mean = sum(df2_2b$Bin*df2_2b$Count)/sum(df2_2b$Count)
SD = sqrt(sum((df2_2b$Bin-Mean)**2*df2_2b$Count)/(sum(df2_2b$Count)-1))
cat("Mean 2_2b =",Mean,"\n","Sample-SD 2_2b=",SD,"\n")
## Mean 2_2b = 15.71726
## Sample-SD 2_2b= 5.164004
Experiment 3
ggplot(data=ex3_1a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex3_1b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex3_2a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex3_2b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

#finding the mean the standard deviation with a large anglular tilt.
df3_1a = ex3_1a;
Mean = sum(df3_1a$Bin*df3_1a$Count)/sum(df3_1a$Count)
SD = sqrt(sum((df3_1a$Bin-Mean)**2*df3_1a$Count)/(sum(df3_1a$Count)-1))
cat("Mean 3_1a =",Mean,"\n","Sample-SD 3_1a=",SD,"\n")
## Mean 3_1a = 16.38649
## Sample-SD 3_1a= 5.865318
df3_1b = ex3_1b;
Mean = sum(df3_1b$Bin*df3_1b$Count)/sum(df3_1b$Count)
SD = sqrt(sum((df3_1b$Bin-Mean)**2*df3_1b$Count)/(sum(df3_1b$Count)-1))
cat("Mean 3_1b =",Mean,"\n","Sample-SD 3_1b=",SD,"\n")
## Mean 3_1b = 16.35318
## Sample-SD 3_1b= 5.282569
df3_2a = ex3_2a;
Mean = sum(df3_2a$Bin*df3_2a$Count)/sum(df3_2a$Count)
SD = sqrt(sum((df3_2a$Bin-Mean)**2*df3_2a$Count)/(sum(df3_2a$Count)-1))
cat("Mean 3_2a =",Mean,"\n","Sample-SD 3_2a=",SD,"\n")
## Mean 3_2a = 16.10688
## Sample-SD 3_2a= 5.706999
df3_2b = ex3_2b;
Mean = sum(df3_2b$Bin*df3_2b$Count)/sum(df3_2b$Count)
SD = sqrt(sum((df3_2b$Bin-Mean)**2*df3_2b$Count)/(sum(df3_2b$Count)-1))
cat("Mean 3_2b =",Mean,"\n","Sample-SD 3_2b=",SD,"\n")
## Mean 3_2b = 16.39186
## Sample-SD 3_2b= 5.389525
Experiment 4
ggplot(data=ex4_1a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex4_1b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex4_2a)+geom_bar(aes(x=Bin, y=Count), stat='identity')

ggplot(data=ex4_2b)+geom_bar(aes(x=Bin, y=Count), stat='identity')

#finding the mean the standard deviation with a small anglular tilt in the opposing direction.
df4_1a = ex4_1a;
Mean = sum(df4_1a$Bin*df4_1a$Count)/sum(df4_1a$Count)
SD = sqrt(sum((df4_1a$Bin-Mean)**2*df4_1a$Count)/(sum(df4_1a$Count)-1))
cat("Mean 4_1a =",Mean,"\n","Sample-SD 4_1a=",SD,"\n")
## Mean 4_1a = 11.61041
## Sample-SD 4_1a= 5.349967
df4_1b = ex4_1b;
Mean = sum(df4_1b$Bin*df4_1b$Count)/sum(df4_1b$Count)
SD = sqrt(sum((df4_1b$Bin-Mean)**2*df4_1b$Count)/(sum(df4_1b$Count)-1))
cat("Mean 4_1b =",Mean,"\n","Sample-SD 4_1b=",SD,"\n")
## Mean 4_1b = 11.44335
## Sample-SD 4_1b= 5.093633
df4_2a = ex4_2a;
Mean = sum(df4_2a$Bin*df4_2a$Count)/sum(df4_2a$Count)
SD = sqrt(sum((df4_2a$Bin-Mean)**2*df4_2a$Count)/(sum(df4_2a$Count)-1))
cat("Mean 4_2a =",Mean,"\n","Sample-SD 4_2a=",SD,"\n")
## Mean 4_2a = 11.48582
## Sample-SD 4_2a= 5.326175
df4_2b = ex4_2b;
Mean = sum(df4_2b$Bin*df4_2b$Count)/sum(df4_2b$Count)
SD = sqrt(sum((df4_2b$Bin-Mean)**2*df4_2b$Count)/(sum(df4_2b$Count)-1))
cat("Mean 4_2b =",Mean,"\n","Sample-SD 4_2b=",SD,"\n")
## Mean 4_2b = 11.88596
## Sample-SD 4_2b= 5.373549
Answer: Through these above measurements and graphs, one realizes that tilting the graph does not affect the binomial distribution; but it shifts the graph along the x-axis.
LS0tDQp0aXRsZTogIkxhYiAwNDogU2ltcGxlIERhdGEgQ29sbGVjdGlvbiBhbmQgRGF0YSB2aXN1YWxpemF0aW9uIg0KYXV0aG9yOiAiU21pdCBTd2FwbmVzaCBNZWh0YSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3IgbG9hZC1wYWNrYWdlcywgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShvcGVuaW50cm8pDQpgYGANCg0KYGBge3IgbG9hZC1kYXRhLCBtZXNzYWdlPUZBTFNFfQ0KZXgxXzFhPXJlYWRfY3N2KCJkYXRhL2V4MV8xYS5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KZXgxXzFiPXJlYWRfY3N2KCJkYXRhL2V4MV8xYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KZXgxXzJhPXJlYWRfY3N2KCJkYXRhL2V4MV8yYS5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KZXgxXzJiPXJlYWRfY3N2KCJkYXRhL2V4MV8yYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KDQpleDJfMWE9cmVhZF9jc3YoImRhdGEvZXgyXzFhLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpDQpleDJfMWI9cmVhZF9jc3YoImRhdGEvZXgyXzFiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpDQpleDJfMmE9cmVhZF9jc3YoImRhdGEvZXgyXzJhLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpDQpleDJfMmI9cmVhZF9jc3YoImRhdGEvZXgyXzJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpDQoNCmV4M18xYT1yZWFkX2NzdigiZGF0YS9leDNfMWEuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkNCmV4M18xYj1yZWFkX2NzdigiZGF0YS9leDNfMWIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkNCmV4M18yYT1yZWFkX2NzdigiZGF0YS9leDNfMmEuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkNCmV4M18yYj1yZWFkX2NzdigiZGF0YS9leDNfMmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkNCg0KZXg0XzFhPXJlYWRfY3N2KCJkYXRhL2V4NF8xYS5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KZXg0XzFiPXJlYWRfY3N2KCJkYXRhL2V4NF8xYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KZXg0XzJhPXJlYWRfY3N2KCJkYXRhL2V4NF8yYS5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KZXg0XzJiPXJlYWRfY3N2KCJkYXRhL2V4NF8yYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KYGBgDQojIyMgRXhlcmNpc2UgMQ0KDQpQbG90dGluZyB0aGUgNTAlIGFuZCB0aGUgMTAwJSBvZiB0aGUgZGF0YSBmcm9tIGV4cGVyaW1lbnQgMSAod2l0aCBhIDAgZGVncmVlIGFuZ2xlKQ0KDQpgYGB7ciBFeGVyY2lzZSAxLCBQbG90fQ0KZ2dwbG90KGRhdGE9ZXgxXzFhKStnZW9tX2JhcihhZXMoeD1CaW4sIHk9Q291bnQpLCBzdGF0PSdpZGVudGl0eScpDQpnZ3Bsb3QoZGF0YT1leDFfMWIpK2dlb21fYmFyKGFlcyh4PUJpbiwgeT1Db3VudCksIHN0YXQ9J2lkZW50aXR5JykNCmdncGxvdChkYXRhPWV4MV8yYSkrZ2VvbV9iYXIoYWVzKHg9QmluLCB5PUNvdW50KSwgc3RhdD0naWRlbnRpdHknKQ0KZ2dwbG90KGRhdGE9ZXgxXzJiKStnZW9tX2JhcihhZXMoeD1CaW4sIHk9Q291bnQpLCBzdGF0PSdpZGVudGl0eScpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDINCkNhbGN1bGF0aW5nIHRoZSBtZWFuIGFuZCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBhYm92ZSBkYXRhDQoNCmBgYHtyIGRhdGEtY2FsY3VsYXRpb25zIGZvciBleDFfMWF9DQpkZiA9IGV4MV8xYTsNCk1lYW4gPSBzdW0oZGYkQmluKmRmJENvdW50KS9zdW0oZGYkQ291bnQpDQpTRCA9IHNxcnQoc3VtKChkZiRCaW4tTWVhbikqKjIqZGYkQ291bnQpLyhzdW0oZGYkQ291bnQpLTEpKQ0KY2F0KCJNZWFuPSIsTWVhbiwiXG4iLCJTYW1wbGUtU0Q9IixTRCkNCmBgYA0KDQpgYGB7ciBkYXRhLWNhbGN1bGF0aW9ucyBmb3IgZXgxXzFifQ0KZGYgPSBleDFfMWI7DQpNZWFuID0gc3VtKGRmJEJpbipkZiRDb3VudCkvc3VtKGRmJENvdW50KQ0KU0QgPSBzcXJ0KHN1bSgoZGYkQmluLU1lYW4pKioyKmRmJENvdW50KS8oc3VtKGRmJENvdW50KS0xKSkNCmNhdCgiTWVhbj0iLE1lYW4sIlxuIiwiU2FtcGxlLVNEPSIsU0QpDQpgYGANCg0KYGBge3IgZGF0YS1jYWxjdWxhdGlvbnMgZm9yIGV4MV8yYX0NCmRmID0gZXgxXzJhOw0KTWVhbiA9IHN1bShkZiRCaW4qZGYkQ291bnQpL3N1bShkZiRDb3VudCkNClNEID0gc3FydChzdW0oKGRmJEJpbi1NZWFuKSoqMipkZiRDb3VudCkvKHN1bShkZiRDb3VudCktMSkpDQpjYXQoIk1lYW49IixNZWFuLCJcbiIsIlNhbXBsZS1TRD0iLFNEKQ0KYGBgDQoNCmBgYHtyIGRhdGEtY2FsY3VsYXRpb25zIGZvciBleDFfMmJ9DQpkZiA9IGV4MV8yYjsNCk1lYW4gPSBzdW0oZGYkQmluKmRmJENvdW50KS9zdW0oZGYkQ291bnQpDQpTRCA9IHNxcnQoc3VtKChkZiRCaW4tTWVhbikqKjIqZGYkQ291bnQpLyhzdW0oZGYkQ291bnQpLTEpKQ0KY2F0KCJNZWFuPSIsTWVhbiwiXG4iLCJTYW1wbGUtU0Q9IixTRCkNCmBgYA0KDQojIyMgRXhlcmNpc2UgMw0KSG93IGRvIG1lYW5zIGNvbXBhcmUgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNhc2VzPw0KDQpCZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY2FzZXMsIHRoZSBtZWFuIG9mIHRoZSBkYXRhIGFsbCBhZ3JlZSB3aXRoIGVhY2ggb3RoZXI6IGJldHdlZW4gdGhlIHJhbmdlIG9mIDEyLjggYW5kIDEzLjU7IHdoaWNoIG91dCBvZiBhIGRhdGEgb2YgbmVhcmx5ICAyNyBiaW5zLCBzZWVtcyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtZWFuIGRpZCBub3QgY2hhbmdlIGluIHRoZSBmaXJzdCBleHBlcmltZW50IHRoYXQgZ3JlYXRseS4NCg0KIyMjIEV4ZXJjaXNlIDQNCkhvdyBkb2VzIHRpbHRpbmcgdGhlIEdhbHRvbiBib2FyZCB2YXJ5IHRoZSByZXN1bHRzIChUcnkgdG8gdXNlIHRoZSBoZWlnaHQgb2YgdGhlIGxlZ3MsIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGxlZ3MgYW5kIHRoZSBoZWlnaHQgb2YgdGhlIHBlbiB0byBtYWtlIGNvbmNsdXNpb25zKT8NCg0KIyBFeHBlcmltZW50IDINCg0KYGBge3IgRXhwZXJpbWVudCAyfQ0KZ2dwbG90KGRhdGE9ZXgyXzFhKStnZW9tX2JhcihhZXMoeD1CaW4sIHk9Q291bnQpLCBzdGF0PSdpZGVudGl0eScpDQpnZ3Bsb3QoZGF0YT1leDJfMWIpK2dlb21fYmFyKGFlcyh4PUJpbiwgeT1Db3VudCksIHN0YXQ9J2lkZW50aXR5JykNCmdncGxvdChkYXRhPWV4Ml8yYSkrZ2VvbV9iYXIoYWVzKHg9QmluLCB5PUNvdW50KSwgc3RhdD0naWRlbnRpdHknKQ0KZ2dwbG90KGRhdGE9ZXgyXzJiKStnZW9tX2JhcihhZXMoeD1CaW4sIHk9Q291bnQpLCBzdGF0PSdpZGVudGl0eScpDQoNCiNmaW5kaW5nIHRoZSBtZWFuIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gd2l0aCBhIHNtYWxsIGFuZ2x1bGFyIHRpbHQuDQpkZjJfMWEgPSBleDJfMWE7DQpNZWFuID0gc3VtKGRmMl8xYSRCaW4qZGYyXzFhJENvdW50KS9zdW0oZGYyXzFhJENvdW50KQ0KU0QgPSBzcXJ0KHN1bSgoZGYyXzFhJEJpbi1NZWFuKSoqMipkZjJfMWEkQ291bnQpLyhzdW0oZGYyXzFhJENvdW50KS0xKSkNCmNhdCgiTWVhbiAyXzFhID0iLE1lYW4sIlxuIiwiU2FtcGxlLVNEIDJfMWE9IixTRCwiXG4iKQ0KDQpkZjJfMWIgPSBleDJfMWI7DQpNZWFuID0gc3VtKGRmMl8xYiRCaW4qZGYyXzFiJENvdW50KS9zdW0oZGYyXzFiJENvdW50KQ0KU0QgPSBzcXJ0KHN1bSgoZGYyXzFiJEJpbi1NZWFuKSoqMipkZjJfMWIkQ291bnQpLyhzdW0oZGYyXzFiJENvdW50KS0xKSkNCmNhdCgiTWVhbiAyXzFiID0iLE1lYW4sIlxuIiwiU2FtcGxlLVNEIDJfMWI9IixTRCwiXG4iKQ0KDQpkZjJfMmEgPSBleDJfMmE7DQpNZWFuID0gc3VtKGRmMl8yYSRCaW4qZGYyXzJhJENvdW50KS9zdW0oZGYyXzJhJENvdW50KQ0KU0QgPSBzcXJ0KHN1bSgoZGYyXzJhJEJpbi1NZWFuKSoqMipkZjJfMmEkQ291bnQpLyhzdW0oZGYyXzJhJENvdW50KS0xKSkNCmNhdCgiTWVhbiAyXzJhID0iLE1lYW4sIlxuIiwiU2FtcGxlLVNEIDJfMmE9IixTRCwiXG4iKQ0KDQpkZjJfMmIgPSBleDJfMmI7DQpNZWFuID0gc3VtKGRmMl8yYiRCaW4qZGYyXzJiJENvdW50KS9zdW0oZGYyXzJiJENvdW50KQ0KU0QgPSBzcXJ0KHN1bSgoZGYyXzJiJEJpbi1NZWFuKSoqMipkZjJfMmIkQ291bnQpLyhzdW0oZGYyXzJiJENvdW50KS0xKSkNCmNhdCgiTWVhbiAyXzJiID0iLE1lYW4sIlxuIiwiU2FtcGxlLVNEIDJfMmI9IixTRCwiXG4iKQ0KDQpgYGANCg0KIyBFeHBlcmltZW50IDMNCmBgYHtyIEV4cGVyaW1lbnQgM30NCmdncGxvdChkYXRhPWV4M18xYSkrZ2VvbV9iYXIoYWVzKHg9QmluLCB5PUNvdW50KSwgc3RhdD0naWRlbnRpdHknKQ0KZ2dwbG90KGRhdGE9ZXgzXzFiKStnZW9tX2JhcihhZXMoeD1CaW4sIHk9Q291bnQpLCBzdGF0PSdpZGVudGl0eScpDQpnZ3Bsb3QoZGF0YT1leDNfMmEpK2dlb21fYmFyKGFlcyh4PUJpbiwgeT1Db3VudCksIHN0YXQ9J2lkZW50aXR5JykNCmdncGxvdChkYXRhPWV4M18yYikrZ2VvbV9iYXIoYWVzKHg9QmluLCB5PUNvdW50KSwgc3RhdD0naWRlbnRpdHknKQ0KDQojZmluZGluZyB0aGUgbWVhbiB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIHdpdGggYSBsYXJnZSBhbmdsdWxhciB0aWx0Lg0KZGYzXzFhID0gZXgzXzFhOw0KTWVhbiA9IHN1bShkZjNfMWEkQmluKmRmM18xYSRDb3VudCkvc3VtKGRmM18xYSRDb3VudCkNClNEID0gc3FydChzdW0oKGRmM18xYSRCaW4tTWVhbikqKjIqZGYzXzFhJENvdW50KS8oc3VtKGRmM18xYSRDb3VudCktMSkpDQpjYXQoIk1lYW4gM18xYSA9IixNZWFuLCJcbiIsIlNhbXBsZS1TRCAzXzFhPSIsU0QsIlxuIikNCg0KZGYzXzFiID0gZXgzXzFiOw0KTWVhbiA9IHN1bShkZjNfMWIkQmluKmRmM18xYiRDb3VudCkvc3VtKGRmM18xYiRDb3VudCkNClNEID0gc3FydChzdW0oKGRmM18xYiRCaW4tTWVhbikqKjIqZGYzXzFiJENvdW50KS8oc3VtKGRmM18xYiRDb3VudCktMSkpDQpjYXQoIk1lYW4gM18xYiA9IixNZWFuLCJcbiIsIlNhbXBsZS1TRCAzXzFiPSIsU0QsIlxuIikNCg0KZGYzXzJhID0gZXgzXzJhOw0KTWVhbiA9IHN1bShkZjNfMmEkQmluKmRmM18yYSRDb3VudCkvc3VtKGRmM18yYSRDb3VudCkNClNEID0gc3FydChzdW0oKGRmM18yYSRCaW4tTWVhbikqKjIqZGYzXzJhJENvdW50KS8oc3VtKGRmM18yYSRDb3VudCktMSkpDQpjYXQoIk1lYW4gM18yYSA9IixNZWFuLCJcbiIsIlNhbXBsZS1TRCAzXzJhPSIsU0QsIlxuIikNCg0KZGYzXzJiID0gZXgzXzJiOw0KTWVhbiA9IHN1bShkZjNfMmIkQmluKmRmM18yYiRDb3VudCkvc3VtKGRmM18yYiRDb3VudCkNClNEID0gc3FydChzdW0oKGRmM18yYiRCaW4tTWVhbikqKjIqZGYzXzJiJENvdW50KS8oc3VtKGRmM18yYiRDb3VudCktMSkpDQpjYXQoIk1lYW4gM18yYiA9IixNZWFuLCJcbiIsIlNhbXBsZS1TRCAzXzJiPSIsU0QsIlxuIikNCmBgYA0KDQojIEV4cGVyaW1lbnQgNA0KYGBge3IgRXhwZXJpbWVudCA0fQ0KZ2dwbG90KGRhdGE9ZXg0XzFhKStnZW9tX2JhcihhZXMoeD1CaW4sIHk9Q291bnQpLCBzdGF0PSdpZGVudGl0eScpDQpnZ3Bsb3QoZGF0YT1leDRfMWIpK2dlb21fYmFyKGFlcyh4PUJpbiwgeT1Db3VudCksIHN0YXQ9J2lkZW50aXR5JykNCmdncGxvdChkYXRhPWV4NF8yYSkrZ2VvbV9iYXIoYWVzKHg9QmluLCB5PUNvdW50KSwgc3RhdD0naWRlbnRpdHknKQ0KZ2dwbG90KGRhdGE9ZXg0XzJiKStnZW9tX2JhcihhZXMoeD1CaW4sIHk9Q291bnQpLCBzdGF0PSdpZGVudGl0eScpDQoNCiNmaW5kaW5nIHRoZSBtZWFuIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gd2l0aCBhIHNtYWxsIGFuZ2x1bGFyIHRpbHQgaW4gdGhlIG9wcG9zaW5nIGRpcmVjdGlvbi4NCmRmNF8xYSA9IGV4NF8xYTsNCk1lYW4gPSBzdW0oZGY0XzFhJEJpbipkZjRfMWEkQ291bnQpL3N1bShkZjRfMWEkQ291bnQpDQpTRCA9IHNxcnQoc3VtKChkZjRfMWEkQmluLU1lYW4pKioyKmRmNF8xYSRDb3VudCkvKHN1bShkZjRfMWEkQ291bnQpLTEpKQ0KY2F0KCJNZWFuIDRfMWEgPSIsTWVhbiwiXG4iLCJTYW1wbGUtU0QgNF8xYT0iLFNELCJcbiIpDQoNCmRmNF8xYiA9IGV4NF8xYjsNCk1lYW4gPSBzdW0oZGY0XzFiJEJpbipkZjRfMWIkQ291bnQpL3N1bShkZjRfMWIkQ291bnQpDQpTRCA9IHNxcnQoc3VtKChkZjRfMWIkQmluLU1lYW4pKioyKmRmNF8xYiRDb3VudCkvKHN1bShkZjRfMWIkQ291bnQpLTEpKQ0KY2F0KCJNZWFuIDRfMWIgPSIsTWVhbiwiXG4iLCJTYW1wbGUtU0QgNF8xYj0iLFNELCJcbiIpDQoNCmRmNF8yYSA9IGV4NF8yYTsNCk1lYW4gPSBzdW0oZGY0XzJhJEJpbipkZjRfMmEkQ291bnQpL3N1bShkZjRfMmEkQ291bnQpDQpTRCA9IHNxcnQoc3VtKChkZjRfMmEkQmluLU1lYW4pKioyKmRmNF8yYSRDb3VudCkvKHN1bShkZjRfMmEkQ291bnQpLTEpKQ0KY2F0KCJNZWFuIDRfMmEgPSIsTWVhbiwiXG4iLCJTYW1wbGUtU0QgNF8yYT0iLFNELCJcbiIpDQoNCmRmNF8yYiA9IGV4NF8yYjsNCk1lYW4gPSBzdW0oZGY0XzJiJEJpbipkZjRfMmIkQ291bnQpL3N1bShkZjRfMmIkQ291bnQpDQpTRCA9IHNxcnQoc3VtKChkZjRfMmIkQmluLU1lYW4pKioyKmRmNF8yYiRDb3VudCkvKHN1bShkZjRfMmIkQ291bnQpLTEpKQ0KY2F0KCJNZWFuIDRfMmIgPSIsTWVhbiwiXG4iLCJTYW1wbGUtU0QgNF8yYj0iLFNELCJcbiIpDQpgYGANCg0KQW5zd2VyOg0KVGhyb3VnaCB0aGVzZSBhYm92ZSBtZWFzdXJlbWVudHMgYW5kIGdyYXBocywgb25lIHJlYWxpemVzIHRoYXQgdGlsdGluZyB0aGUgZ3JhcGggZG9lcyBub3QgYWZmZWN0IHRoZSBiaW5vbWlhbCBkaXN0cmlidXRpb247IGJ1dCBpdCBzaGlmdHMgdGhlIGdyYXBoIGFsb25nIHRoZSB4LWF4aXMu