setwd('C:\\Users\\momob\\OneDrive\\Desktop\\STAT400')
female <- read.csv('female.csv')
is.data.frame(female)
[1] TRUE
head(female)
library(tidyverse)
── Attaching core tidyverse packages ────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.4 ── Conflicts ──────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
female <- female %>%
filter(Country.Name == "Brazil" | Country.Name == "India" | Country.Name == "United States")
head(female)
colnames(female)
[1] "Series.Name" "Series.Code" "Country.Name" "Country.Code"
[5] "X1990..YR1990." "X2000..YR2000." "X2014..YR2014." "X2015..YR2015."
[9] "X2016..YR2016." "X2017..YR2017." "X2018..YR2018." "X2019..YR2019."
[13] "X2020..YR2020." "X2021..YR2021." "X2022..YR2022." "X2023..YR2023."
rel_col <- which(colnames(female)=="Country.Name" | colnames(female)== "X2014..YR2014." | colnames(female)== "X2017..YR2017." | colnames(female) == "X2021..YR2021." )
rel_col
[1] 3 7 10 14
female <- female[rel_col] %>% rename("2014" = 2, "2017" = 3, "2021" = 4)
head(female)
transpose_f <- data.frame(t(female[-1]))
colnames(transpose_f) <- female[, 1]
head(transpose_f)
print(sapply(transpose_f, class))
Brazil India United States
"character" "character" "character"
transpose_f$Brazil = as.numeric(transpose_f$Brazil)
transpose_f$India = as.numeric(transpose_f$India)
transpose_f$"United States" = as.numeric(transpose_f$"United States")
head(transpose_f)
summarise_each(transpose_f, list(mean))
Warning: `summarise_each()` was deprecated in dplyr 0.7.0.
Please use `across()` instead.
transpose_f %>%
summarise(across(c(Brazil, India, "United States"), list(mean=mean, sd=sd)))
year <- c(2014, 2017,2021)
ggplot(data=transpose_f, aes(x=year, y=India, group=1)) +
geom_line()+
geom_point()

setwd('C:\\Users\\momob\\OneDrive\\Desktop\\STAT400')
male <- read.csv(file = "male.csv")
male <- male %>%
filter(Country.Name == "Brazil" | Country.Name == "India" | Country.Name == "United States")
male <- male[rel_col] %>%
rename("2014" = 2, "2017" = 3, "2021" = 4)
transpose_m <- data.frame(t(male[-1]))
colnames(transpose_m) <- male[, 1]
transpose_m$Brazil = as.numeric(as.character(transpose_m$Brazil))
transpose_m$India = as.numeric(as.character(transpose_m$India))
transpose_m$"United States" = as.numeric(as.character((transpose_m$"United States")))
head(transpose_m)
transpose_m <- rename(transpose_m, "Brazil_m" = 1, "India_m" = 2, "United_States_m" = 3)
head(transpose_m)
transpose_m <- rownames_to_column(transpose_m, var="Year")
transpose_f <- rownames_to_column(transpose_f, var="Year")
acct_owner_by_gender <- merge(x = transpose_m, y = transpose_f, by = "Year", all.x = TRUE)
acct_owner_by_gender <- rename(acct_owner_by_gender, "United_States" = 7)
head(acct_owner_by_gender)
gfg_plot <- ggplot(acct_owner_by_gender, aes(x=year)) +
geom_line(aes(y = India), color = "black") +
geom_line(aes(y = India_m), color = "red") +
geom_line(aes(y = Brazil), color = "green") +
geom_line(aes(y = Brazil_m), color = "blue") +
geom_line(aes(y = United_States), color = "purple") +
geom_line(aes(y = United_States_m), color = "violet")
gfg_plot

Project 1 Question 1
gfg_plot <- ggplot(acct_owner_by_gender, aes(x=year)) +
geom_line(aes(y = India), color = "black") +
geom_line(aes(y = India_m), color = "red") +
geom_line(aes(y = Brazil), color = "green") +
geom_line(aes(y = Brazil_m), color = "blue") +
geom_line(aes(y = United_States), color = "purple") +
geom_line(aes(y = United_States_m), color = "violet") +
labs(y = "percentage ownership")
gfg_plot

Question 2: The ownership percentages appear to vary by country and
gender. In the US, both males and females appear to stagnate. Males and
females in Brazil both stagnated until 2018, where they were both
strictly increasing at similar rates. India is an interesting case
because while females strictly increased until 2017 where they
plateaued, males actually began to decrease until 2021 where it was the
same percentage ownership as females.
Question 3: Excluding India, both male and female account ownership
percentages from all countries are either net positive or almost neutral
by 2021. India itself is an interesting case though. From 2014 to 2017,
India account ownership percentages were skyrocketing, with males having
a higher baseline. Afterwards, account ownership percentages steadily
decreased for both males and females, with males in particular
decreasing far faster than females. In 2021, male percentages converged
with female percentages.
Question 4:
setwd('C:\\Users\\momob\\OneDrive\\Desktop\\STAT400')
primary_ed <- read.csv('primary_ed.csv')
primary_ed <- primary_ed %>%
filter(Country.Name == "United Kingdom" | Country.Name == "Armenia" | Country.Name == "Ghana" | Country.Name == "Albania" | Country.Name == "Finland")
rel_col <- which(colnames(primary_ed)=="Country.Name" | colnames(primary_ed)== "X2014..YR2014." | colnames(primary_ed)== "X2017..YR2017." | colnames(primary_ed) == "X2021..YR2021." )
primary_ed <- primary_ed[rel_col] %>%
rename("2014" = 2, "2017" = 3, "2021" = 4)
transpose_prim <- data.frame(t(primary_ed[-1]))
colnames(transpose_prim) <- primary_ed[, 1]
transpose_prim$"United Kingdom" <- as.numeric(as.character(transpose_prim$"United Kingdom"))
transpose_prim$Armenia <- as.numeric(as.character(transpose_prim$Armenia))
transpose_prim$Ghana <- as.numeric(as.character(transpose_prim$Ghana))
transpose_prim$Albania <- as.numeric(as.character(transpose_prim$Albania))
transpose_prim$Finland <- as.numeric(as.character(transpose_prim$Finland))
transpose_prim <- rename(transpose_prim, "United Kingdom_prim" = 1, "Armenia_prim" = 2, "Ghana_prim" = 3, "Albania_prim" = 4, "Finland_prim" = 5)
head(transpose_prim)
gfg_plot <- ggplot(transpose_prim, aes(x=year)) +
geom_line(aes(y = `United Kingdom_prim`), color = "black") +
geom_line(aes(y = Armenia_prim), color = "red") +
geom_line(aes(y = Ghana_prim), color = "green") +
geom_line(aes(y = Albania_prim), color = "blue") +
geom_line(aes(y = Finland_prim), color = "purple") +
labs(y = "percentage ownership")
gfg_plot

setwd('C:\\Users\\momob\\OneDrive\\Desktop\\STAT400')
secondary_ed <- read.csv('secondary_ed.csv')
secondary_ed <- secondary_ed %>%
filter(Country.Name == "United Kingdom" | Country.Name == "Armenia" | Country.Name == "Ghana" | Country.Name == "Albania" | Country.Name == "Finland")
secondary_ed <- secondary_ed[rel_col] %>%
rename("2014" = 2, "2017" = 3, "2021" = 4)
transpose_sec <- data.frame(t(secondary_ed[-1]))
colnames(transpose_sec) <- secondary_ed[, 1]
transpose_sec$"United Kingdom" <- as.numeric(as.character(transpose_sec$"United Kingdom"))
transpose_sec$Armenia <- as.numeric(as.character(transpose_sec$Armenia))
transpose_sec$Ghana <- as.numeric(as.character(transpose_sec$Ghana))
transpose_sec$Albania <- as.numeric(as.character(transpose_sec$Albania))
transpose_sec$Finland <- as.numeric(as.character(transpose_sec$Finland))
transpose_sec <- rename(transpose_sec, "United Kingdom_sec" = 1, "Armenia_sec" = 2, "Ghana_sec" = 3, "Albania_sec" = 4, "Finland_sec" = 5)
head(transpose_sec)
gfg_plot <- ggplot(transpose_sec, aes(x=year)) +
geom_line(aes(y = `United Kingdom_sec`), color = "black") +
geom_line(aes(y = Armenia_sec), color = "red") +
geom_line(aes(y = Ghana_sec), color = "green") +
geom_line(aes(y = Albania_sec), color = "blue") +
geom_line(aes(y = Finland_sec), color = "purple") +
labs(y = "percentage ownership")
gfg_plot

transpose_prim <- rownames_to_column(transpose_prim, var="Year")
transpose_sec <- rownames_to_column(transpose_sec, var="Year")
acct_owner_by_education <- merge(x = transpose_prim, y = transpose_sec, by = "Year", all.x = TRUE)
acct_owner_by_education <- rename(acct_owner_by_education, "Finland_sec" = 11)
head(acct_owner_by_education)
gfg_plot <- ggplot(acct_owner_by_education, aes(x = year)) +
geom_line(aes(y = `United Kingdom_prim`), color = "black") +
geom_line(aes(y = `United Kingdom_sec`), color = "red") +
geom_line(aes(y = `Armenia_prim`), color = "green") +
geom_line(aes(y = `Armenia_sec`), color = "blue") +
geom_line(aes(y = Ghana_prim), color = "purple") +
geom_line(aes(y = Ghana_sec), color = "violet") +
geom_line(aes(y = Albania_prim), color = "orange") +
geom_line(aes(y = Albania_sec), color = "pink") +
geom_line(aes(y = Finland_prim), color = "brown") +
geom_line(aes(y = Finland_sec), color = "yellow") +
labs(y = "percentage ownership")
gfg_plot

Overall, the percentage of account owners with primary or secondary
education for most countries either net positive or net neutral. The
percentage of account holders in Ghana and Finland were similar no
matter if they had primary or secondary education. The United Kingdom
percentage ownership for primary educated people was significantly
higher than secondary educated people. Armenia stood out as the biggest
winners from 2014 to 2017, as percentage ownership for both primary and
secondary educated people significantly increased from under 25% to
close to 50%. However, after 2017, it stood more in line with other
countries in that the rate of increased tapered off.
LS0tDQp0aXRsZTogIlNUQVQ0MDAgUHJvamVjdCAxIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KYGBge3J9DQpzZXR3ZCgnQzpcXFVzZXJzXFxtb21vYlxcT25lRHJpdmVcXERlc2t0b3BcXFNUQVQ0MDAnKQ0KZmVtYWxlIDwtIHJlYWQuY3N2KCdmZW1hbGUuY3N2JykNCmlzLmRhdGEuZnJhbWUoZmVtYWxlKQ0KYGBgDQoNCmBgYHtyfQ0KaGVhZChmZW1hbGUpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCg0KZmVtYWxlIDwtIGZlbWFsZSAlPiUNCiAgZmlsdGVyKENvdW50cnkuTmFtZSA9PSAiQnJhemlsIiB8IENvdW50cnkuTmFtZSA9PSAiSW5kaWEiIHwgQ291bnRyeS5OYW1lID09ICJVbml0ZWQgU3RhdGVzIikNCmhlYWQoZmVtYWxlKQ0KYGBgDQoNCmBgYHtyfQ0KY29sbmFtZXMoZmVtYWxlKQ0KYGBgDQoNCmBgYHtyfQ0KcmVsX2NvbCA8LSB3aGljaChjb2xuYW1lcyhmZW1hbGUpPT0iQ291bnRyeS5OYW1lIiB8IGNvbG5hbWVzKGZlbWFsZSk9PSAiWDIwMTQuLllSMjAxNC4iIHwgY29sbmFtZXMoZmVtYWxlKT09ICJYMjAxNy4uWVIyMDE3LiIgfCBjb2xuYW1lcyhmZW1hbGUpID09ICJYMjAyMS4uWVIyMDIxLiIgKQ0KcmVsX2NvbA0KYGBgDQoNCmBgYHtyfQ0KZmVtYWxlIDwtIGZlbWFsZVtyZWxfY29sXSAlPiUgcmVuYW1lKCIyMDE0IiA9IDIsICIyMDE3IiA9IDMsICIyMDIxIiA9IDQpDQpoZWFkKGZlbWFsZSkNCmBgYA0KDQpgYGB7cn0NCnRyYW5zcG9zZV9mIDwtIGRhdGEuZnJhbWUodChmZW1hbGVbLTFdKSkNCmNvbG5hbWVzKHRyYW5zcG9zZV9mKSA8LSBmZW1hbGVbLCAxXQ0KaGVhZCh0cmFuc3Bvc2VfZikNCmBgYA0KDQpgYGB7cn0NCnByaW50KHNhcHBseSh0cmFuc3Bvc2VfZiwgY2xhc3MpKQ0KYGBgDQoNCmBgYHtyfQ0KdHJhbnNwb3NlX2YkQnJhemlsID0gYXMubnVtZXJpYyh0cmFuc3Bvc2VfZiRCcmF6aWwpIA0KdHJhbnNwb3NlX2YkSW5kaWEgPSBhcy5udW1lcmljKHRyYW5zcG9zZV9mJEluZGlhKQ0KdHJhbnNwb3NlX2YkIlVuaXRlZCBTdGF0ZXMiID0gYXMubnVtZXJpYyh0cmFuc3Bvc2VfZiQiVW5pdGVkIFN0YXRlcyIpDQpoZWFkKHRyYW5zcG9zZV9mKQ0KYGBgDQoNCmBgYHtyfQ0Kc3VtbWFyaXNlX2VhY2godHJhbnNwb3NlX2YsIGxpc3QobWVhbikpDQpgYGANCg0KYGBge3J9DQp0cmFuc3Bvc2VfZiAlPiUNCiAgc3VtbWFyaXNlKGFjcm9zcyhjKEJyYXppbCwgSW5kaWEsICJVbml0ZWQgU3RhdGVzIiksIGxpc3QobWVhbj1tZWFuLCBzZD1zZCkpKQ0KYGBgDQoNCmBgYHtyfQ0KeWVhciA8LSBjKDIwMTQsIDIwMTcsMjAyMSkNCmdncGxvdChkYXRhPXRyYW5zcG9zZV9mLCBhZXMoeD15ZWFyLCB5PUluZGlhLCBncm91cD0xKSkgKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV9wb2ludCgpDQpgYGANCg0KYGBge3J9DQpzZXR3ZCgnQzpcXFVzZXJzXFxtb21vYlxcT25lRHJpdmVcXERlc2t0b3BcXFNUQVQ0MDAnKQ0KbWFsZSA8LSByZWFkLmNzdihmaWxlID0gIm1hbGUuY3N2IikNCm1hbGUgPC0gbWFsZSAlPiUNCiAgZmlsdGVyKENvdW50cnkuTmFtZSA9PSAiQnJhemlsIiB8IENvdW50cnkuTmFtZSA9PSAiSW5kaWEiIHwgQ291bnRyeS5OYW1lID09ICJVbml0ZWQgU3RhdGVzIikgDQoNCm1hbGUgPC0gbWFsZVtyZWxfY29sXSAlPiUgDQogIHJlbmFtZSgiMjAxNCIgPSAyLCAiMjAxNyIgPSAzLCAiMjAyMSIgPSA0KQ0KDQp0cmFuc3Bvc2VfbSA8LSBkYXRhLmZyYW1lKHQobWFsZVstMV0pKQ0KY29sbmFtZXModHJhbnNwb3NlX20pIDwtIG1hbGVbLCAxXQ0KDQp0cmFuc3Bvc2VfbSRCcmF6aWwgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih0cmFuc3Bvc2VfbSRCcmF6aWwpKSANCnRyYW5zcG9zZV9tJEluZGlhID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodHJhbnNwb3NlX20kSW5kaWEpKQ0KdHJhbnNwb3NlX20kIlVuaXRlZCBTdGF0ZXMiID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoKHRyYW5zcG9zZV9tJCJVbml0ZWQgU3RhdGVzIikpKQ0KDQpoZWFkKHRyYW5zcG9zZV9tKQ0KYGBgDQpgYGB7cn0NCnRyYW5zcG9zZV9tIDwtIHJlbmFtZSh0cmFuc3Bvc2VfbSwgIkJyYXppbF9tIiA9IDEsICJJbmRpYV9tIiA9IDIsICJVbml0ZWRfU3RhdGVzX20iID0gMykNCg0KaGVhZCh0cmFuc3Bvc2VfbSkNCmBgYA0KDQpgYGB7cn0NCnRyYW5zcG9zZV9tIDwtIHJvd25hbWVzX3RvX2NvbHVtbih0cmFuc3Bvc2VfbSwgdmFyPSJZZWFyIikgDQp0cmFuc3Bvc2VfZiA8LSByb3duYW1lc190b19jb2x1bW4odHJhbnNwb3NlX2YsIHZhcj0iWWVhciIpDQphY2N0X293bmVyX2J5X2dlbmRlciA8LSBtZXJnZSh4ID0gdHJhbnNwb3NlX20sIHkgPSB0cmFuc3Bvc2VfZiwgYnkgPSAiWWVhciIsIGFsbC54ID0gVFJVRSkNCmFjY3Rfb3duZXJfYnlfZ2VuZGVyIDwtIHJlbmFtZShhY2N0X293bmVyX2J5X2dlbmRlciwgIlVuaXRlZF9TdGF0ZXMiID0gNykNCmhlYWQoYWNjdF9vd25lcl9ieV9nZW5kZXIpDQpgYGANCg0KYGBge3J9DQpnZmdfcGxvdCA8LSBnZ3Bsb3QoYWNjdF9vd25lcl9ieV9nZW5kZXIsIGFlcyh4PXllYXIpKSArICANCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBJbmRpYSksIGNvbG9yID0gImJsYWNrIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEluZGlhX20pLCBjb2xvciA9ICJyZWQiKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gQnJhemlsKSwgY29sb3IgPSAiZ3JlZW4iKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gQnJhemlsX20pLCBjb2xvciA9ICJibHVlIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9TdGF0ZXMpLCBjb2xvciA9ICJwdXJwbGUiKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gVW5pdGVkX1N0YXRlc19tKSwgY29sb3IgPSAidmlvbGV0IikgDQogICAgDQpnZmdfcGxvdA0KYGBgDQoNClByb2plY3QgMQ0KUXVlc3Rpb24gMQ0KYGBge3J9DQpnZmdfcGxvdCA8LSBnZ3Bsb3QoYWNjdF9vd25lcl9ieV9nZW5kZXIsIGFlcyh4PXllYXIpKSArICANCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBJbmRpYSksIGNvbG9yID0gImJsYWNrIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEluZGlhX20pLCBjb2xvciA9ICJyZWQiKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gQnJhemlsKSwgY29sb3IgPSAiZ3JlZW4iKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gQnJhemlsX20pLCBjb2xvciA9ICJibHVlIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IFVuaXRlZF9TdGF0ZXMpLCBjb2xvciA9ICJwdXJwbGUiKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gVW5pdGVkX1N0YXRlc19tKSwgY29sb3IgPSAidmlvbGV0IikgKw0KICAgIGxhYnMoeSA9ICJwZXJjZW50YWdlIG93bmVyc2hpcCIpDQogICAgDQpnZmdfcGxvdA0KDQpgYGANClF1ZXN0aW9uIDI6DQogIFRoZSBvd25lcnNoaXAgcGVyY2VudGFnZXMgYXBwZWFyIHRvIHZhcnkgYnkgY291bnRyeSBhbmQgZ2VuZGVyLiBJbiB0aGUgVVMsIGJvdGggbWFsZXMgYW5kIGZlbWFsZXMgYXBwZWFyIHRvIHN0YWduYXRlLiBNYWxlcyBhbmQgZmVtYWxlcyBpbiBCcmF6aWwgYm90aCBzdGFnbmF0ZWQgdW50aWwgMjAxOCwgd2hlcmUgdGhleSB3ZXJlIGJvdGggc3RyaWN0bHkgaW5jcmVhc2luZyBhdCBzaW1pbGFyIHJhdGVzLiBJbmRpYSBpcyBhbiBpbnRlcmVzdGluZyBjYXNlIGJlY2F1c2Ugd2hpbGUgZmVtYWxlcyBzdHJpY3RseSBpbmNyZWFzZWQgdW50aWwgMjAxNyB3aGVyZSB0aGV5IHBsYXRlYXVlZCwgbWFsZXMgYWN0dWFsbHkgYmVnYW4gdG8gZGVjcmVhc2UgdW50aWwgMjAyMSB3aGVyZSBpdCB3YXMgdGhlIHNhbWUgcGVyY2VudGFnZSBvd25lcnNoaXAgYXMgZmVtYWxlcy4NCiAgDQpRdWVzdGlvbiAzOg0KICBFeGNsdWRpbmcgSW5kaWEsIGJvdGggbWFsZSBhbmQgZmVtYWxlIGFjY291bnQgb3duZXJzaGlwIHBlcmNlbnRhZ2VzIGZyb20gYWxsIGNvdW50cmllcyBhcmUgZWl0aGVyIG5ldCBwb3NpdGl2ZSBvciBhbG1vc3QgbmV1dHJhbCBieSAyMDIxLiBJbmRpYSBpdHNlbGYgaXMgYW4gaW50ZXJlc3RpbmcgY2FzZSB0aG91Z2guIEZyb20gMjAxNCB0byAyMDE3LCBJbmRpYSBhY2NvdW50IG93bmVyc2hpcCBwZXJjZW50YWdlcyB3ZXJlIHNreXJvY2tldGluZywgd2l0aCBtYWxlcyBoYXZpbmcgYSBoaWdoZXIgYmFzZWxpbmUuIEFmdGVyd2FyZHMsIGFjY291bnQgb3duZXJzaGlwIHBlcmNlbnRhZ2VzIHN0ZWFkaWx5IGRlY3JlYXNlZCBmb3IgYm90aCBtYWxlcyBhbmQgZmVtYWxlcywgd2l0aCBtYWxlcyBpbiBwYXJ0aWN1bGFyIGRlY3JlYXNpbmcgZmFyIGZhc3RlciB0aGFuIGZlbWFsZXMuIEluIDIwMjEsIG1hbGUgcGVyY2VudGFnZXMgY29udmVyZ2VkIHdpdGggZmVtYWxlIHBlcmNlbnRhZ2VzLg0KICANClF1ZXN0aW9uIDQ6DQoNCmBgYHtyfQ0Kc2V0d2QoJ0M6XFxVc2Vyc1xcbW9tb2JcXE9uZURyaXZlXFxEZXNrdG9wXFxTVEFUNDAwJykNCnByaW1hcnlfZWQgPC0gcmVhZC5jc3YoJ3ByaW1hcnlfZWQuY3N2JykNCnByaW1hcnlfZWQgPC0gcHJpbWFyeV9lZCAlPiUNCiAgZmlsdGVyKENvdW50cnkuTmFtZSA9PSAiVW5pdGVkIEtpbmdkb20iIHwgQ291bnRyeS5OYW1lID09ICJBcm1lbmlhIiB8IENvdW50cnkuTmFtZSA9PSAiR2hhbmEiIHwgQ291bnRyeS5OYW1lID09ICJBbGJhbmlhIiB8IENvdW50cnkuTmFtZSA9PSAiRmlubGFuZCIpDQoNCnJlbF9jb2wgPC0gd2hpY2goY29sbmFtZXMocHJpbWFyeV9lZCk9PSJDb3VudHJ5Lk5hbWUiIHwgY29sbmFtZXMocHJpbWFyeV9lZCk9PSAiWDIwMTQuLllSMjAxNC4iIHwgY29sbmFtZXMocHJpbWFyeV9lZCk9PSAiWDIwMTcuLllSMjAxNy4iIHwgY29sbmFtZXMocHJpbWFyeV9lZCkgPT0gIlgyMDIxLi5ZUjIwMjEuIiApDQoNCg0KcHJpbWFyeV9lZCA8LSBwcmltYXJ5X2VkW3JlbF9jb2xdICU+JSANCiAgcmVuYW1lKCIyMDE0IiA9IDIsICIyMDE3IiA9IDMsICIyMDIxIiA9IDQpDQoNCnRyYW5zcG9zZV9wcmltIDwtIGRhdGEuZnJhbWUodChwcmltYXJ5X2VkWy0xXSkpDQpjb2xuYW1lcyh0cmFuc3Bvc2VfcHJpbSkgPC0gcHJpbWFyeV9lZFssIDFdDQoNCnRyYW5zcG9zZV9wcmltJCJVbml0ZWQgS2luZ2RvbSIgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodHJhbnNwb3NlX3ByaW0kIlVuaXRlZCBLaW5nZG9tIikpDQp0cmFuc3Bvc2VfcHJpbSRBcm1lbmlhIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHRyYW5zcG9zZV9wcmltJEFybWVuaWEpKQ0KdHJhbnNwb3NlX3ByaW0kR2hhbmEgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodHJhbnNwb3NlX3ByaW0kR2hhbmEpKQ0KdHJhbnNwb3NlX3ByaW0kQWxiYW5pYSA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih0cmFuc3Bvc2VfcHJpbSRBbGJhbmlhKSkNCnRyYW5zcG9zZV9wcmltJEZpbmxhbmQgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodHJhbnNwb3NlX3ByaW0kRmlubGFuZCkpDQoNCg0KdHJhbnNwb3NlX3ByaW0gPC0gcmVuYW1lKHRyYW5zcG9zZV9wcmltLCAiVW5pdGVkIEtpbmdkb21fcHJpbSIgPSAxLCAiQXJtZW5pYV9wcmltIiA9IDIsICJHaGFuYV9wcmltIiA9IDMsICJBbGJhbmlhX3ByaW0iID0gNCwgIkZpbmxhbmRfcHJpbSIgPSA1KQ0KDQpoZWFkKHRyYW5zcG9zZV9wcmltKQ0KYGBgDQoNCmBgYHtyfQ0KZ2ZnX3Bsb3QgPC0gZ2dwbG90KHRyYW5zcG9zZV9wcmltLCBhZXMoeD15ZWFyKSkgKyAgDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gYFVuaXRlZCBLaW5nZG9tX3ByaW1gKSwgY29sb3IgPSAiYmxhY2siKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gQXJtZW5pYV9wcmltKSwgY29sb3IgPSAicmVkIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEdoYW5hX3ByaW0pLCBjb2xvciA9ICJncmVlbiIpICsNCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBBbGJhbmlhX3ByaW0pLCBjb2xvciA9ICJibHVlIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEZpbmxhbmRfcHJpbSksIGNvbG9yID0gInB1cnBsZSIpICsNCiAgICBsYWJzKHkgPSAicGVyY2VudGFnZSBvd25lcnNoaXAiKQ0KICAgIA0KZ2ZnX3Bsb3QNCmBgYA0KDQpgYGB7cn0NCnNldHdkKCdDOlxcVXNlcnNcXG1vbW9iXFxPbmVEcml2ZVxcRGVza3RvcFxcU1RBVDQwMCcpDQpzZWNvbmRhcnlfZWQgPC0gcmVhZC5jc3YoJ3NlY29uZGFyeV9lZC5jc3YnKQ0KDQpzZWNvbmRhcnlfZWQgPC0gc2Vjb25kYXJ5X2VkICU+JQ0KICBmaWx0ZXIoQ291bnRyeS5OYW1lID09ICJVbml0ZWQgS2luZ2RvbSIgfCBDb3VudHJ5Lk5hbWUgPT0gIkFybWVuaWEiIHwgQ291bnRyeS5OYW1lID09ICJHaGFuYSIgfCBDb3VudHJ5Lk5hbWUgPT0gIkFsYmFuaWEiIHwgQ291bnRyeS5OYW1lID09ICJGaW5sYW5kIikNCg0Kc2Vjb25kYXJ5X2VkIDwtIHNlY29uZGFyeV9lZFtyZWxfY29sXSAlPiUNCiAgcmVuYW1lKCIyMDE0IiA9IDIsICIyMDE3IiA9IDMsICIyMDIxIiA9IDQpDQoNCnRyYW5zcG9zZV9zZWMgPC0gZGF0YS5mcmFtZSh0KHNlY29uZGFyeV9lZFstMV0pKQ0KY29sbmFtZXModHJhbnNwb3NlX3NlYykgPC0gc2Vjb25kYXJ5X2VkWywgMV0NCg0KdHJhbnNwb3NlX3NlYyQiVW5pdGVkIEtpbmdkb20iIDwtIGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHRyYW5zcG9zZV9zZWMkIlVuaXRlZCBLaW5nZG9tIikpDQp0cmFuc3Bvc2Vfc2VjJEFybWVuaWEgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodHJhbnNwb3NlX3NlYyRBcm1lbmlhKSkNCnRyYW5zcG9zZV9zZWMkR2hhbmEgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodHJhbnNwb3NlX3NlYyRHaGFuYSkpDQp0cmFuc3Bvc2Vfc2VjJEFsYmFuaWEgPC0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIodHJhbnNwb3NlX3NlYyRBbGJhbmlhKSkNCnRyYW5zcG9zZV9zZWMkRmlubGFuZCA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih0cmFuc3Bvc2Vfc2VjJEZpbmxhbmQpKQ0KDQp0cmFuc3Bvc2Vfc2VjIDwtIHJlbmFtZSh0cmFuc3Bvc2Vfc2VjLCAiVW5pdGVkIEtpbmdkb21fc2VjIiA9IDEsICJBcm1lbmlhX3NlYyIgPSAyLCAiR2hhbmFfc2VjIiA9IDMsICJBbGJhbmlhX3NlYyIgPSA0LCAiRmlubGFuZF9zZWMiID0gNSkNCg0KaGVhZCh0cmFuc3Bvc2Vfc2VjKQ0KYGBgDQoNCmBgYHtyfQ0KZ2ZnX3Bsb3QgPC0gZ2dwbG90KHRyYW5zcG9zZV9zZWMsIGFlcyh4PXllYXIpKSArICANCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBgVW5pdGVkIEtpbmdkb21fc2VjYCksIGNvbG9yID0gImJsYWNrIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEFybWVuaWFfc2VjKSwgY29sb3IgPSAicmVkIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEdoYW5hX3NlYyksIGNvbG9yID0gImdyZWVuIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEFsYmFuaWFfc2VjKSwgY29sb3IgPSAiYmx1ZSIpICsNCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBGaW5sYW5kX3NlYyksIGNvbG9yID0gInB1cnBsZSIpICsNCiAgICBsYWJzKHkgPSAicGVyY2VudGFnZSBvd25lcnNoaXAiKQ0KICAgIA0KZ2ZnX3Bsb3QNCmBgYA0KDQpgYGB7cn0NCnRyYW5zcG9zZV9wcmltIDwtIHJvd25hbWVzX3RvX2NvbHVtbih0cmFuc3Bvc2VfcHJpbSwgdmFyPSJZZWFyIikgDQp0cmFuc3Bvc2Vfc2VjIDwtIHJvd25hbWVzX3RvX2NvbHVtbih0cmFuc3Bvc2Vfc2VjLCB2YXI9IlllYXIiKQ0KYWNjdF9vd25lcl9ieV9lZHVjYXRpb24gPC0gbWVyZ2UoeCA9IHRyYW5zcG9zZV9wcmltLCB5ID0gdHJhbnNwb3NlX3NlYywgYnkgPSAiWWVhciIsIGFsbC54ID0gVFJVRSkNCmBgYA0KDQpgYGB7cn0NCmhlYWQoYWNjdF9vd25lcl9ieV9lZHVjYXRpb24pDQpgYGANCg0KYGBge3J9DQpnZmdfcGxvdCA8LSBnZ3Bsb3QoYWNjdF9vd25lcl9ieV9lZHVjYXRpb24sIGFlcyh4ID0geWVhcikpICsgICANCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBgVW5pdGVkIEtpbmdkb21fcHJpbWApLCBjb2xvciA9ICJibGFjayIpICsNCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBgVW5pdGVkIEtpbmdkb21fc2VjYCksIGNvbG9yID0gInJlZCIpICsNCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBgQXJtZW5pYV9wcmltYCksIGNvbG9yID0gImdyZWVuIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IGBBcm1lbmlhX3NlY2ApLCBjb2xvciA9ICJibHVlIikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEdoYW5hX3ByaW0pLCBjb2xvciA9ICJwdXJwbGUiKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gR2hhbmFfc2VjKSwgY29sb3IgPSAidmlvbGV0IikgKw0KICAgIGdlb21fbGluZShhZXMoeSA9IEFsYmFuaWFfcHJpbSksIGNvbG9yID0gIm9yYW5nZSIpICsNCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBBbGJhbmlhX3NlYyksIGNvbG9yID0gInBpbmsiKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gRmlubGFuZF9wcmltKSwgY29sb3IgPSAiYnJvd24iKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gRmlubGFuZF9zZWMpLCBjb2xvciA9ICJ5ZWxsb3ciKSArDQogICAgbGFicyh5ID0gInBlcmNlbnRhZ2Ugb3duZXJzaGlwIikNCg0KZ2ZnX3Bsb3QNCmBgYA0KT3ZlcmFsbCwgdGhlIHBlcmNlbnRhZ2Ugb2YgYWNjb3VudCBvd25lcnMgd2l0aCBwcmltYXJ5IG9yIHNlY29uZGFyeSBlZHVjYXRpb24gZm9yIG1vc3QgY291bnRyaWVzIGVpdGhlciBuZXQgcG9zaXRpdmUgb3IgbmV0IG5ldXRyYWwuIFRoZSBwZXJjZW50YWdlIG9mIGFjY291bnQgaG9sZGVycyBpbiBHaGFuYSBhbmQgRmlubGFuZCB3ZXJlIHNpbWlsYXIgbm8gbWF0dGVyIGlmIHRoZXkgaGFkIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGVkdWNhdGlvbi4gVGhlIFVuaXRlZCBLaW5nZG9tIHBlcmNlbnRhZ2Ugb3duZXJzaGlwIGZvciBwcmltYXJ5IGVkdWNhdGVkIHBlb3BsZSB3YXMgc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiBzZWNvbmRhcnkgZWR1Y2F0ZWQgcGVvcGxlLiBBcm1lbmlhIHN0b29kIG91dCBhcyB0aGUgYmlnZ2VzdCB3aW5uZXJzIGZyb20gMjAxNCB0byAyMDE3LCBhcyBwZXJjZW50YWdlIG93bmVyc2hpcCBmb3IgYm90aCBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgZWR1Y2F0ZWQgcGVvcGxlIHNpZ25pZmljYW50bHkgaW5jcmVhc2VkIGZyb20gdW5kZXIgMjUlIHRvIGNsb3NlIHRvIDUwJS4gSG93ZXZlciwgYWZ0ZXIgMjAxNywgaXQgc3Rvb2QgbW9yZSBpbiBsaW5lIHdpdGggb3RoZXIgY291bnRyaWVzIGluIHRoYXQgdGhlIHJhdGUgb2YgaW5jcmVhc2VkIHRhcGVyZWQgb2ZmLg==