Thống kê mô tả
Lập bảng tần số
Lập bảng tần số với biến “gender” và “call” để xem xét
rằng:
Có bao nhiêu người nộp đơn là nữ được/ không được gọi
lại?
Có bao nhiêu người nộp đơn là nam được/ không được gọi
lại?
table(d$gender, d$call)
##
## no yes
## female 3437 309
## male 1041 83
Bảng tần số trên cho thấy:
Có 3437 số người là nữ không được gọi lại sau khi nộp
đơn
Có 309 số người là nữ được gọi lại sau khi nộp đơn
Có 1041 số người là nam không được gọi lại sau khi nộp
đơn
Có 83 số người là nam được gọi lại sau khi nộp đơn
Để tìm hiểu rõ hơn ở 2 thành phố Boston và Chicago có bao nhiêu
người nam/ nữ, được gọi/ không được gọi lại ta lập bảng tần số với 3
biến “gender”, “call” và “city”
table(d$gender, d$call, d$city)
## , , = boston
##
##
## no yes
## female 1224 161
## male 732 49
##
## , , = chicago
##
##
## no yes
## female 2213 148
## male 309 34
Bảng tần số trên cho thấy:
Ở thành phố Boston:
Có 1224 số người là nữ không được gọi lại sau khi nộp
đơn
Có 161 số người là nữ được gọi lại sau khi nộp đơn
Có 732 số người là nam không được gọi lại sau khi nộp
đơn
Có 49 số người là nam không được gọi lại sau khi nộp đơn
Ở thành phố Chicago:
Có 2213 số người là nữ không được gọi lại sau khi nộp
đơn
Có 148 số người là nữ được gọi lại sau khi nộp đơn
Có 309 số người là nam không được gọi lại sau khi nộp
đơn
Có 34 số người là nam không được gọi lại sau khi nộp đơn
Tương tự với những biến định tính khác
Đồ thị
- Đồ thị dựa trên bảng tần suất của biến gender và call
d |> ggplot(aes(x = gender, fill = call)) +
geom_bar() +
labs(title = "Stacked Bar Chart",
x = "Gender",
y = "Count",
fill = "Call")

Đồ thị trên cho ta thấy:
Tổng số người nữ được gọi lại và không được gọi lại sau khi nộp
đơn lớn hơn rất nhiều so với tổng số người nam được gọi lại và không
được gọi lại sau khi nộp đơn. Điều này cho thấy tỷ lệ người nữ tham gia
vào quá trình tuyển dụng có thể lớn hơn so với người nam
Đối với nữ thì số người được gọi lại sau khi nộp đơn là chưa đến
500 người
Đối với nam thì số người được gọi lại sau khi nộp đơn là rất
ít
Đồ thị dựa trên bảng tần suất của biến gender, call và
city
d |>
ggplot(aes(x = gender, fill = call)) +
geom_bar(position = "stack") +
facet_wrap(~city) +
labs(title = "Stacked Bar Chart",
x = "Gender",
y = "Count",
fill = "Call")

Đồ thị trên cho ta thấy:
Tổng số người nộp đơn ứng tuyển ở thành phố Chicago lớn hơn tổng
số người nộp đơn ứng tuyển ở thành phố Boston
Tổng số người nữ được gọi lại và không được gọi lại sau khi nộp
đơn ở Chicago lớn hơn rất nhiều so với tổng số người nữ được gọi lại và
không được gọi lại sau khi nộp đơn ở Boston. Nhưng tổng số người nam đc
gọi lại và không được gọi lại ở thành phố Chicago lại thấp hơn so với
thành phố Boston.
prop.table(table(d$gender, d$call))
##
## no yes
## female 0.70575 0.06345
## male 0.21376 0.01704
prop.table(addmargins(table(d$gender, d$call)))
##
## no yes Sum
## female 0.176437 0.015862 0.192300
## male 0.053439 0.004261 0.057700
## Sum 0.229877 0.020123 0.250000
Trong bảng trên thì:
Có 17.64% số người là nữ nộp đơn mà không được gọi lại
Có 1.6% số người là nữ nộp đơn được gọi lại
Tổng số người nộp đơn là nữ chiếm 19.23%
Tổng số người nộp đơn mà không được gọi lại chiểm 23%
Có 5.3% số người là nam nộp đơn mà không được gọi lại
Có 0.43% số người là nam nộp đơn được gọi lại
Tổng số người nộp đơn là nam chiếm 5.77%
Tổng số người nộp đơn mà không được gọi lại chiểm 2.01%
prop.table(table(d$gender, d$call, d$city))
## , , = boston
##
##
## no yes
## female 0.251335 0.033060
## male 0.150308 0.010062
##
## , , = chicago
##
##
## no yes
## female 0.454415 0.030390
## male 0.063450 0.006982
Bảng tần suất trên cho thấy:
Ở thành phố Boston:
Số người là nữ không được gọi lại sau khi nộp đơn chiếm 25.13%,
số người là nữ được gọi lại sau khi nộp đơn chiếm 3.31%
Số người là nam không được gọi lại sau khi nộp đơn chiếm 15.03%,
số người là nam được gọi lại sau khi nộp đơn chiếm 1%
Ở thành phố Chicago:
Số người là nữ không được gọi lại sau khi nộp đơn chiếm 45.44%,
số người là nữ được gọi lại sau khi nộp đơn chiếm 3.04%
Số người là nam không được gọi lại sau khi nộp đơn chiếm 6.34%,
số người là nam được gọi lại sau khi nộp đơn chiếm 0.7%
prop.table(addmargins(table(d$gender, d$call, d$city)))
## , , = boston
##
##
## no yes Sum
## female 0.0314168 0.0041324 0.0355493
## male 0.0187885 0.0012577 0.0200462
## Sum 0.0502053 0.0053901 0.0555955
##
## , , = chicago
##
##
## no yes Sum
## female 0.0568018 0.0037988 0.0606006
## male 0.0079312 0.0008727 0.0088039
## Sum 0.0647331 0.0046715 0.0694045
##
## , , = Sum
##
##
## no yes Sum
## female 0.0882187 0.0079312 0.0961499
## male 0.0267197 0.0021304 0.0288501
## Sum 0.1149384 0.0100616 0.1250000
Trong bảng trên thì:
Ở thành phố Boston:
Có 3.14% số người là nữ nộp đơn mà không được gọi lại
Có 0.41% số người là nữ nộp đơn được gọi lại
Tổng số người nộp đơn là nữ chiếm 3.55%
Tổng số người nộp đơn mà không được gọi lại chiểm 5%
Có 1.88% số người là nam nộp đơn mà không được gọi lại
Có 0.13% số người là nam nộp đơn được gọi lại
Tổng số người nộp đơn là nam chiếm 2%
Tổng số người nộp đơn mà không được gọi lại chiểm 0.54%
Ở thành phố Chicago: Phân tích tương tự như Boston
Ở cả 2 thành phố :
Có 8.82% số người là nữ nộp đơn mà không được gọi lại
Có 0.79% số người là nữ nộp đơn được gọi lại
Tổng số người nộp đơn là nữ chiếm 9.61%
Tổng số người nộp đơn mà không được gọi lại chiểm 11.49%
Có 2.67% số người là nam nộp đơn mà không được gọi lại
Có 0.21% số người là nam nộp đơn được gọi lại
Tổng số người nộp đơn là nam chiếm 2.89%
Tổng số người nộp đơn mà không được gọi lại chiểm 10%
Ước lượng tỷ lệ và ước lượng chệnh lệch tỷ lệ
- Ước lượng với số người nộp đơn được gọi lại
Để kiểm định xem tỷ lệ (%) Tổng số người nộp đơn được gọi lại có bằng
50% không ta có giả thiết sau:
Gọi H(0): p = 0.5, tức là tổng số người nộp đơn được gọi lại bằng
50%
d1 <- d[d$call == 'yes',]
prop.test(length(d1$call), length(d1$call), p = 0.05)
##
## 1-sample proportions test with continuity correction
##
## data: length(d1$call) out of length(d1$call), null probability 0.05
## X-squared = 7428, df = 1, p-value <2e-16
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
## 0.9879 1.0000
## sample estimates:
## p
## 1
Dựa vào kết quả trên ta thấy, giá trị p-value = 1 > 0.5%. Vậy ta
bác bỏ H(0), tức là
tổng số người nộp đơn được gọi lại không bằng 50%
- Ước lượng với số người nộp đơn không được gọi lại
Để kiểm định xem tỷ lệ (%) Tổng số người nộp đơn không được gọi lại
có bằng 50% không ta có giả thiết sau:
Gọi H(0): p = 0.5, tức là tổng số người nộp đơn không được gọi lại
bằng 50%
d2 <- d[d$call == 'no',]
prop.test(length(d2$call), length(d2$call), p = 0.05)
##
## 1-sample proportions test with continuity correction
##
## data: length(d2$call) out of length(d2$call), null probability 0.05
## X-squared = 85062, df = 1, p-value <2e-16
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
## 0.9989 1.0000
## sample estimates:
## p
## 1
Dựa vào kết quả trên ta thấy, giá trị p-value = 1 > 0.5%. Vậy ta
bác bỏ H(0), tức là
tổng số người nộp đơn không được gọi lại bé hơn 50%
- Ước lượng tỷ lệ chênh lệch giữa nam và nữ của những người nộp đơn
được gọi lại
Để kiểm định xem tỷ lệ (%) của số người nộp đơn được gọi lại giữa nam
và nữ có bằng nhau hay không ta có giả thiết sau:
Gọi H(0): p1 = p2, tức là số người nộp đơn được gọi lại giữa nam và
nữ có bằng nhau
dm <- d[d$gender == 'male',]
df <- d[d$gender == 'female',]
dmyes <- dm[dm$call == "yes",]
dfyes <- df[df$call == "yes",]
a <- c(nrow(dm), nrow(df))
b <- c(nrow(dmyes), nrow(dfyes))
prop.test(b,a)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: b out of a
## X-squared = 0.76, df = 1, p-value = 0.4
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.026868 0.009579
## sample estimates:
## prop 1 prop 2
## 0.07384 0.08249
Dựa vào kết quả trên ta thấy, giá trị p-value = 0.4 > mức ý nghĩa
0.05. Điều này có nghĩa là không có đủ bằng chứng để bác bỏ giả thiết
không H(0). Do đó, chúng ta không thể kết luận rằng tỷ lệ người nộp đơn
được gọi lại giữa nam và nữ là khác nhau.
- Ước lượng tỷ lệ chênh lệch giữa nam và nữ của những người nộp đơn
không được gọi lại
Để kiểm định xem tỷ lệ (%) của số người nộp đơn không được gọi lại
giữa nam và nữ có bằng nhau hay không ta có giả thiết sau:
Gọi H(0): p1 = p2, tức là số người nộp đơn không được gọi lại giữa
nam và nữ có bằng nhau
dmno <- dm[dm$call == "no",]
dfno <- df[df$call == "no",]
y <- c(nrow(dm), nrow(df))
k <- c(nrow(dmno), nrow(dfno))
prop.test(k,y)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: k out of y
## X-squared = 0.76, df = 1, p-value = 0.4
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.009579 0.026868
## sample estimates:
## prop 1 prop 2
## 0.9262 0.9175
Dựa vào kết quả trên ta thấy, giá trị p-value = 0.4 > mức ý nghĩa
0.05. Điều này có nghĩa là không có đủ bằng chứng để bác bỏ giả thiết
không H(0). Do đó, chúng ta không thể kết luận rằng tỷ lệ người nộp đơn
không được gọi lại giữa nam và nữ là khác nhau.
relative risk, oddsratio và khoảng ước lượng của 2 chỉ số đó, ý
nghĩa
d$quality[d$quality == "high"] <- "high"
qual <- table(d$gender, d$quality)
addmargins(qual)
##
## high low Sum
## female 1879 1867 3746
## male 567 557 1124
## Sum 2446 2424 4870
RelRisk(qual)
## [1] 0.9944
oddsratio(qual)
## $data
##
## high low Total
## female 1879 1867 3746
## male 567 557 1124
## Total 2446 2424 4870
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## female 1.0000 NA NA
## male 0.9887 0.8652 1.13
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## female NA NA NA
## male 0.8672 0.8918 0.867
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Dựa vào bảng trên: Tỷ số chênh lệch (oddsratio) cho nam so với nữ là
0.9887, với khoảng tin cậy 95% từ 0.8652 đến 1.1300. Vì khoảng tin cậy
bao gồm giá trị 1, chúng ta không có đủ bằng chứng để kết luận rằng odds
của việc rơi vào nhóm “high” so với “low” khác biệt có ý nghĩa giữa nam
và nữ.
LS0tDQp0aXRsZTogIkJUVk4iDQphdXRob3I6ICJOZ3V54buFbiBUaOG7iyBUaGFuaCBUcsO6YyINCmRhdGU6ICIyMDI0LTA2LTAzIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogIHBkZl9kb2N1bWVudDoNCiAgICBleHRyYV9kZXBlbmRlbmNpZXM6DQogICAgICB2aWV0bmFtOiB1dGY4DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCmdlb21ldHJ5Og0KICAgICAgLSBpbm5lcj0zY20NCiAgICAgIC0gb3V0ZXI9NGNtDQogICAgICAtIHRvcD0zY20NCiAgICAgIC0gYm90dG9tPTRjbQ0KICAgICAgLSBoZWFkc2VwPTIycHQNCiAgICAgIC0gaGVhZGhlaWdodD0xMXB0DQogICAgICAtIGZvb3Rza2lwPTMzcHQNCiAgICAgIC0gaWdub3JlaGVhZA0KICAgICAgLSBpZ25vcmVmb290DQogICAgICAtIGhlaWdodHJvdW5kZWQNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgb3B0aW9ucyhkaWdpdHMgPSA0KSwgIGF0dHIuc291cmNlPScubnVtYmVyTGluZXMnKQ0KbGlicmFyeSh4bHN4KQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpkIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL0hvYW4gTmd1eWVuL0Rvd25sb2Fkcy9SZXN1bWVOYW1lcy54bHN4IikNClZpZXcoZCkNCnIgPSBnZXRPcHRpb24oInJlcG9zIikNCnJbIkNSQU4iXSA9ICJodHRwOi8vY3Jhbi51cy5yLXByb2plY3Qub3JnIg0Kb3B0aW9ucyhyZXBvcyA9IHIpDQppbnN0YWxsLnBhY2thZ2VzKCJEZXNjVG9vbHMiKQ0KbGlicmFyeShEZXNjVG9vbHMpDQppbnN0YWxsLnBhY2thZ2VzKCJlcGl0b29scyIpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KYGBgDQoNCiMgR2nhu5tpIHRoaeG7h3UgduG7gSBkYXRhc2V0ICJQU0lEMTk4MiINCg0KICAqIE1pw6p1IHThuqM6IEThu68gbGnhu4d1IGNow6lvIHbhu4Egc8ahIHnhur91IGzDvSBs4buLY2gsIGN14buZYyBn4buNaSBs4bqhaSB2w6AgdGjDtG5nIHRpbiB24buBIG5ow6AgdHV54buDbiBk4bulbmcgY2hvIDQuODcwIHPGoSB54bq/dSBsw70gbOG7i2NoIGdp4bqjIG3huqFvLg0KDQogICogS2h1bmcgZOG7ryBsaeG7h3UgZ+G7k20gY8OzIDQsODcwIHF1YW4gc8OhdCB2w6AgMjcgYmnhur9uLg0KICANCiAgKiBNw7QgdOG6ozogROG7ryBsaeG7h3UgY2jDqW8gduG7gSBzxqEgeeG6v3UgbMO9IGzhu4tjaCwgY3Xhu5ljIGfhu41pIGzhuqFpIHbDoCB0aMO0bmcgdGluIG5ow6AgdHV54buDbiBk4bulbmcgY2hvIDQuODcwIHPGoSB54bq/dSBsw70gbOG7i2NoIGdp4bqjIG3huqFvIMSRxrDhu6NjIGfhu61pIMSR4buDIMSRw6FwIGzhuqFpIGPDoWMgcXXhuqNuZyBjw6FvIHR1eeG7g24gZOG7pW5nIOG7nyBDaGljYWdvIHbDoCBCb3N0b24gdsOgbyBuxINtIDIwMDEsIHRyb25nIG3hu5l0IHRo4butIG5naGnhu4dtIG5n4bqrdSBuaGnDqm4gY8OzIGtp4buDbSBzb8OhdCBkbyBCZXJ0cmFuZCB2w6AgTXVsbGFpbmF0aGFuICgyMDA0KSB0aOG7sWMgaGnhu4duLiBTxqEgeeG6v3UgbMO9IGzhu4tjaCBjaOG7qWEgdGjDtG5nIHRpbiBsacOqbiBxdWFuIMSR4bq/biBkw6JuIHThu5ljIGPhu6dhIG5nxrDhu51pIG7hu5lwIMSRxqFuLiBC4bufaSB2w6wgZMOibiB04buZYyB0aMaw4budbmcga2jDtG5nIMSRxrDhu6NjIMSRxrBhIHbDoG8gc8ahIHnhur91IGzDvSBs4buLY2ggbsOqbiBjw6FjIHPGoSB54bq/dSBsw70gbOG7i2NoIMSRxrDhu6NjIHBow6JuIGJp4buHdCBk4buxYSB0csOqbiBjw6FpIGfhu41pIGzDoCDigJx0w6puIG5naGUgZ2nhu5FuZyBuZ8aw4budaSBkYSB0cuG6r25n4oCdIChjaOG6s25nIGjhuqFuIG5oxrAgRW1pbHkgV2Fsc2ggaG/hurdjIEdyZWdvcnkgQmFrZXIpIHbDoCDigJx0w6puIG5naGUgZ2nhu5FuZyBuZ8aw4budaSBN4bu5IGfhu5FjIFBoaeKAnSAoY2jhurNuZyBo4bqhbiBuaMawIExha2lzaGEgV2FzaGluZ3RvbiBob+G6t2MgSmFtYWwgSm9uZXMpIC4gTeG7mXQgYuG7mSBzxrB1IHThuq1wIGzhu5tuIGPDoWMgc8ahIHnhur91IGzDvSBs4buLY2ggZ2nhuqMgbeG6oW8gxJHDoyDEkcaw4bujYyB04bqhbyByYSB2w6AgZMOibiB04buZYyDEkcaw4bujYyBjaG8gbMOgIHRyxrDhu5tjIChk4buxYSB0csOqbiDDom0gdGhhbmggY+G7p2EgdMOqbikgxJHGsOG7o2MgY2jhu4kgxJHhu4tuaCBuZ+G6q3Ugbmhpw6puIGNobyBt4buXaSBzxqEgeeG6v3UgbMO9IGzhu4tjaC4gTmjhu69uZyBo4buTIHPGoSBuw6B5IMSRxrDhu6NjIGfhu61pIMSR4bq/biBjw6FjIG5ow6AgdHV54buDbiBk4bulbmcgdGnhu4FtIG7Eg25nIMSR4buDIHhlbSBo4buTIHPGoSBuw6BvIMSRw6Mgbmjhuq1uIMSRxrDhu6NjIGN14buZYyBn4buNaSB04burIG5ow6AgdHV54buDbiBk4bulbmcgdGnhu4FtIG7Eg25nLg0KDQojIFRo4buRbmcga8OqIG3DtCB04bqjDQoNCiMjIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRDQoNCiAqIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbhu5tpIGJp4bq/biAiZ2VuZGVyIiB2w6AgImNhbGwiIMSR4buDIHhlbSB4w6l0IHLhurFuZzogIA0KICANCiAgLSBDw7MgYmFvIG5oacOqdSBuZ8aw4budaSBu4buZcCDEkcahbiBsw6AgbuG7ryDEkcaw4bujYy8ga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpPw0KICAgIA0KICAtIEPDsyBiYW8gbmhpw6p1IG5nxrDhu51pIG7hu5lwIMSRxqFuIGzDoCBuYW0gxJHGsOG7o2MvIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaT8NCg0KYGBge3J9DQp0YWJsZShkJGdlbmRlciwgZCRjYWxsKQ0KYGBgDQoNCkLhuqNuZyB04bqnbiBz4buRIHRyw6puIGNobyB0aOG6pXk6DQoNCiAgLSBDw7MgMzQzNyBz4buRIG5nxrDhu51pIGzDoCBu4buvIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuDQogIA0KICAtIEPDsyAzMDkgc+G7kSBuZ8aw4budaSBsw6AgbuG7ryDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuDQogIA0KICAtIEPDsyAxMDQxIHPhu5EgbmfGsOG7nWkgbMOgIG5hbSBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbg0KICANCiAgLSBDw7MgODMgc+G7kSBuZ8aw4budaSBsw6AgbmFtIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4NCiAgDQogKiDEkOG7gyB0w6xtIGhp4buDdSByw7UgaMahbiDhu58gMiB0aMOgbmggcGjhu5EgQm9zdG9uIHbDoCBDaGljYWdvIGPDsyBiYW8gbmhpw6p1IG5nxrDhu51pIG5hbS8gbuG7rywgxJHGsOG7o2MgZ+G7jWkvIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSB0YSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB24bubaSAzIGJp4bq/biAiZ2VuZGVyIiwgImNhbGwiIHbDoCAiY2l0eSIgDQogIA0KYGBge3J9DQp0YWJsZShkJGdlbmRlciwgZCRjYWxsLCBkJGNpdHkpDQpgYGANCiAgDQpC4bqjbmcgdOG6p24gc+G7kSB0csOqbiBjaG8gdGjhuqV5Og0KDQogKiDhu54gdGjDoG5oIHBo4buRIEJvc3RvbjoNCiAgIA0KICAgIC0gQ8OzIDEyMjQgc+G7kSBuZ8aw4budaSBsw6AgbuG7ryBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbg0KICAgICAgDQogICAgLSBDw7MgMTYxIHPhu5EgbmfGsOG7nWkgbMOgIG7hu68gxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbg0KICAgICAgDQogICAgLSBDw7MgNzMyIHPhu5EgbmfGsOG7nWkgbMOgIG5hbSBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbg0KICAgICAgDQogICAgLSBDw7MgNDkgc+G7kSBuZ8aw4budaSBsw6AgbmFtIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuDQoNCiAqIOG7niB0aMOgbmggcGjhu5EgQ2hpY2FnbzoNCiAgIA0KICAgIC0gQ8OzIDIyMTMgc+G7kSBuZ8aw4budaSBsw6AgbuG7ryBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbg0KICAgICAgDQogICAgLSBDw7MgMTQ4IHPhu5EgbmfGsOG7nWkgbMOgIG7hu68gxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbg0KICAgICAgDQogICAgLSBDw7MgMzA5IHPhu5EgbmfGsOG7nWkgbMOgIG5hbSBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbg0KICAgICAgDQogICAgLSBDw7MgMzQgc+G7kSBuZ8aw4budaSBsw6AgbmFtIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuICANCiAgICANClTGsMahbmcgdOG7sSB24bubaSBuaOG7r25nIGJp4bq/biDEkeG7i25oIHTDrW5oIGtow6FjICAgIA0KICANCiMjIMSQ4buTIHRo4buLDQoNCiAqIMSQ4buTIHRo4buLIGThu7FhIHRyw6puIGLhuqNuZyB04bqnbiBzdeG6pXQgY+G7p2EgYmnhur9uIGdlbmRlciB2w6AgY2FsbA0KDQpgYGB7cn0NCmQgfD4gZ2dwbG90KGFlcyh4ID0gZ2VuZGVyLCBmaWxsID0gY2FsbCkpICsNCiAgZ2VvbV9iYXIoKSArDQogIGxhYnModGl0bGUgPSAiU3RhY2tlZCBCYXIgQ2hhcnQiLA0KICAgICAgIHggPSAiR2VuZGVyIiwNCiAgICAgICB5ID0gIkNvdW50IiwNCiAgICAgICBmaWxsID0gIkNhbGwiKQ0KYGBgDQoNCsSQ4buTIHRo4buLIHRyw6puIGNobyB0YSB0aOG6pXk6IA0KDQogIC0gVOG7lW5nIHPhu5EgbmfGsOG7nWkgbuG7ryDEkcaw4bujYyBn4buNaSBs4bqhaSB2w6Aga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4gbOG7m24gaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIHThu5VuZyBz4buRIG5nxrDhu51pIG5hbSDEkcaw4bujYyBn4buNaSBs4bqhaSB2w6Aga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4uIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHThu7cgbOG7hyBuZ8aw4budaSBu4buvIHRoYW0gZ2lhIHbDoG8gcXXDoSB0csOsbmggdHV54buDbiBk4bulbmcgY8OzIHRo4buDIGzhu5tuIGjGoW4gc28gduG7m2kgbmfGsOG7nWkgbmFtDQogIA0KICAtIMSQ4buRaSB24bubaSBu4buvIHRow6wgc+G7kSBuZ8aw4budaSDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuIGzDoCBjaMawYSDEkeG6v24gNTAwIG5nxrDhu51pDQogIA0KICAtIMSQ4buRaSB24bubaSBuYW0gdGjDrCBz4buRIG5nxrDhu51pIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4gbMOgIHLhuqV0IMOtdA0KICANCiAqIMSQ4buTIHRo4buLIGThu7FhIHRyw6puIGLhuqNuZyB04bqnbiBzdeG6pXQgY+G7p2EgYmnhur9uIGdlbmRlciwgY2FsbCB2w6AgY2l0eSAgDQoNCmBgYHtyfQ0KZCB8PiANCiAgZ2dwbG90KGFlcyh4ID0gZ2VuZGVyLCBmaWxsID0gY2FsbCkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAic3RhY2siKSArDQogIGZhY2V0X3dyYXAofmNpdHkpICsNCiAgbGFicyh0aXRsZSA9ICJTdGFja2VkIEJhciBDaGFydCIsDQogICAgICAgeCA9ICJHZW5kZXIiLA0KICAgICAgIHkgPSAiQ291bnQiLA0KICAgICAgIGZpbGwgPSAiQ2FsbCIpDQpgYGANCg0KxJDhu5MgdGjhu4sgdHLDqm4gY2hvIHRhIHRo4bqleTogDQoNCiAgLSBU4buVbmcgc+G7kSBuZ8aw4budaSBu4buZcCDEkcahbiDhu6luZyB0dXnhu4NuIOG7nyB0aMOgbmggcGjhu5EgQ2hpY2FnbyBs4bubbiBoxqFuIHThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIOG7qW5nIHR1eeG7g24g4bufIHRow6BuaCBwaOG7kSBCb3N0b24NCg0KICAtIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu68gxJHGsOG7o2MgZ+G7jWkgbOG6oWkgdsOgIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuIOG7nyBDaGljYWdvIGzhu5tuIGjGoW4gcuG6pXQgbmhp4buBdSBzbyB24bubaSB04buVbmcgc+G7kSBuZ8aw4budaSBu4buvIMSRxrDhu6NjIGfhu41pIGzhuqFpIHbDoCBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbiDhu58gQm9zdG9uLiBOaMawbmcgdOG7lW5nIHPhu5EgbmfGsOG7nWkgbmFtIMSRYyBn4buNaSBs4bqhaSB2w6Aga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIOG7nyB0aMOgbmggcGjhu5EgQ2hpY2FnbyBs4bqhaSB0aOG6pXAgaMahbiBzbyB24bubaSB0aMOgbmggcGjhu5EgQm9zdG9uLg0KICANCg0KYGBge3J9DQpwcm9wLnRhYmxlKHRhYmxlKGQkZ2VuZGVyLCBkJGNhbGwpKQ0KYGBgDQoNCiAgKiBE4buxYSB2w6BvIGLhuqNuZyB04bqnbiBzdeG6pXQgdHLDqm4gdGEgdGjhuqV5Og0KICANCiAgICAtIFPhu5EgbmfGsOG7nWkgbMOgIG7hu68ga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4gY2hp4bq/bSA3MC41NyUsIHPhu5EgbmfGsOG7nWkgbMOgIG7hu68gxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbiBjaGnhur9tIDYuMyUNCiAgICANCiAgICAtIFPhu5EgbmfGsOG7nWkgbMOgIG5hbSBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbiBjaGnhur9tIDIxLjM4JSwgc+G7kSBuZ8aw4budaSBsw6AgbmFtIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4gY2hp4bq/bSAxLjclDQogICAgDQpgYGB7cn0NCnByb3AudGFibGUoYWRkbWFyZ2lucyh0YWJsZShkJGdlbmRlciwgZCRjYWxsKSkpDQpgYGANCg0KVHJvbmcgYuG6o25nIHRyw6puIHRow6w6DQoNCiAgLSBDw7MgMTcuNjQlIHPhu5EgbmfGsOG7nWkgbMOgIG7hu68gbuG7mXAgxJHGoW4gbcOgIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaQ0KICANCiAgLSBDw7MgMS42JSBz4buRIG5nxrDhu51pIGzDoCBu4buvIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpDQogIA0KICAtIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGzDoCBu4buvIGNoaeG6v20gMTkuMjMlDQogIA0KICAtIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIG3DoCBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgY2hp4buDbSAyMyUNCiAgDQogIC0gQ8OzIDUuMyUgc+G7kSBuZ8aw4budaSBsw6AgbmFtIG7hu5lwIMSRxqFuIG3DoCBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkNCiAgDQogIC0gQ8OzIDAuNDMlIHPhu5EgbmfGsOG7nWkgbMOgIG5hbSBu4buZcCDEkcahbiDEkcaw4bujYyBn4buNaSBs4bqhaQ0KICANCiAgLSBU4buVbmcgc+G7kSBuZ8aw4budaSBu4buZcCDEkcahbiBsw6AgbmFtIGNoaeG6v20gNS43NyUNCiAgDQogIC0gVOG7lW5nIHPhu5EgbmfGsOG7nWkgbuG7mXAgxJHGoW4gbcOgIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBjaGnhu4NtIDIuMDElICANCiAgICANCiAgICANCmBgYHtyfQ0KcHJvcC50YWJsZSh0YWJsZShkJGdlbmRlciwgZCRjYWxsLCBkJGNpdHkpKQ0KYGBgDQogICANCkLhuqNuZyB04bqnbiBzdeG6pXQgdHLDqm4gY2hvIHRo4bqleToNCg0KICog4bueIHRow6BuaCBwaOG7kSBCb3N0b246DQogICANCiAgICAtIFPhu5EgbmfGsOG7nWkgbMOgIG7hu68ga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4gY2hp4bq/bSAyNS4xMyUsIHPhu5EgbmfGsOG7nWkgbMOgIG7hu68gxJHGsOG7o2MgZ+G7jWkgbOG6oWkgc2F1IGtoaSBu4buZcCDEkcahbiBjaGnhur9tIDMuMzElDQogICAgDQogICAgLSBT4buRIG5nxrDhu51pIGzDoCBuYW0ga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4gY2hp4bq/bSAxNS4wMyUsIHPhu5EgbmfGsOG7nWkgbMOgIG5hbSDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuIGNoaeG6v20gMSUNCg0KICog4bueIHRow6BuaCBwaOG7kSBDaGljYWdvOg0KICAgDQogICAgLSBT4buRIG5nxrDhu51pIGzDoCBu4buvIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuIGNoaeG6v20gNDUuNDQlLCBz4buRIG5nxrDhu51pIGzDoCBu4buvIMSRxrDhu6NjIGfhu41pIGzhuqFpIHNhdSBraGkgbuG7mXAgxJHGoW4gY2hp4bq/bSAzLjA0JQ0KICAgIA0KICAgIC0gU+G7kSBuZ8aw4budaSBsw6AgbmFtIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuIGNoaeG6v20gNi4zNCUsIHPhu5EgbmfGsOG7nWkgbMOgIG5hbSDEkcaw4bujYyBn4buNaSBs4bqhaSBzYXUga2hpIG7hu5lwIMSRxqFuIGNoaeG6v20gMC43JQ0KICAgIA0KDQpgYGB7cn0NCnByb3AudGFibGUoYWRkbWFyZ2lucyh0YWJsZShkJGdlbmRlciwgZCRjYWxsLCBkJGNpdHkpKSkNCmBgYA0KDQpUcm9uZyBi4bqjbmcgdHLDqm4gdGjDrDoNCg0KICog4bueIHRow6BuaCBwaOG7kSBCb3N0b246DQoNCiAgLSBDw7MgMy4xNCUgc+G7kSBuZ8aw4budaSBsw6AgbuG7ryBu4buZcCDEkcahbiBtw6Aga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpDQogIA0KICAtIEPDsyAwLjQxJSBz4buRIG5nxrDhu51pIGzDoCBu4buvIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpDQogIA0KICAtIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGzDoCBu4buvIGNoaeG6v20gMy41NSUNCiAgDQogIC0gVOG7lW5nIHPhu5EgbmfGsOG7nWkgbuG7mXAgxJHGoW4gbcOgIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBjaGnhu4NtIDUlDQogIA0KICAtIEPDsyAxLjg4JSBz4buRIG5nxrDhu51pIGzDoCBuYW0gbuG7mXAgxJHGoW4gbcOgIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaQ0KICANCiAgLSBDw7MgMC4xMyUgc+G7kSBuZ8aw4budaSBsw6AgbmFtIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpDQogIA0KICAtIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGzDoCBuYW0gY2hp4bq/bSAyJQ0KICANCiAgLSBU4buVbmcgc+G7kSBuZ8aw4budaSBu4buZcCDEkcahbiBtw6Aga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIGNoaeG7g20gMC41NCUgIA0KICANCiAqIOG7niB0aMOgbmggcGjhu5EgQ2hpY2FnbzogUGjDom4gdMOtY2ggdMawxqFuZyB04buxIG5oxrAgQm9zdG9uDQogDQogKiDhu54gY+G6oyAyIHRow6BuaCBwaOG7kSA6DQoNCiAgLSBDw7MgOC44MiUgc+G7kSBuZ8aw4budaSBsw6AgbuG7ryBu4buZcCDEkcahbiBtw6Aga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpDQogIA0KICAtIEPDsyAwLjc5JSBz4buRIG5nxrDhu51pIGzDoCBu4buvIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpDQogIA0KICAtIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGzDoCBu4buvIGNoaeG6v20gOS42MSUNCiAgDQogIC0gVOG7lW5nIHPhu5EgbmfGsOG7nWkgbuG7mXAgxJHGoW4gbcOgIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBjaGnhu4NtIDExLjQ5JQ0KICANCiAgLSBDw7MgMi42NyUgc+G7kSBuZ8aw4budaSBsw6AgbmFtIG7hu5lwIMSRxqFuIG3DoCBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkNCiAgDQogIC0gQ8OzIDAuMjElIHPhu5EgbmfGsOG7nWkgbMOgIG5hbSBu4buZcCDEkcahbiDEkcaw4bujYyBn4buNaSBs4bqhaQ0KICANCiAgLSBU4buVbmcgc+G7kSBuZ8aw4budaSBu4buZcCDEkcahbiBsw6AgbmFtIGNoaeG6v20gMi44OSUNCiAgDQogIC0gVOG7lW5nIHPhu5EgbmfGsOG7nWkgbuG7mXAgxJHGoW4gbcOgIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBjaGnhu4NtIDEwJSAgDQogDQogICAgDQojIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgdsOgIMaw4bubYyBsxrDhu6NuZyBjaOG7h25oIGzhu4djaCB04bu3IGzhu4cNCg0KICAqIMav4bubYyBsxrDhu6NuZyB24bubaSBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpDQoNCsSQ4buDIGtp4buDbSDEkeG7i25oIHhlbSB04bu3IGzhu4cgKCUpIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpIGPDsyBi4bqxbmcgNTAlIGtow7RuZyB0YSBjw7MgZ2nhuqMgdGhp4bq/dCBzYXU6DQoNCiAgR+G7jWkgSCgwKTogcCA9IDAuNSwgdOG7qWMgbMOgIHThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpIGLhurFuZyA1MCUNCg0KYGBge3J9DQpkMSA8LSBkW2QkY2FsbCA9PSAneWVzJyxdDQpwcm9wLnRlc3QobGVuZ3RoKGQxJGNhbGwpLCBsZW5ndGgoZDEkY2FsbCksIHAgPSAwLjA1KQ0KYGBgDQoNCkThu7FhIHbDoG8ga+G6v3QgcXXhuqMgdHLDqm4gdGEgdGjhuqV5LCBnacOhIHRy4buLIHAtdmFsdWUgPSAxID4gMC41JS4gVuG6rXkgdGEgYsOhYyBi4buPIEgoMCksIHThu6ljIGzDoA0KDQp04buVbmcgc+G7kSBuZ8aw4budaSBu4buZcCDEkcahbiDEkcaw4bujYyBn4buNaSBs4bqhaSBraMO0bmcgYuG6sW5nIDUwJSANCg0KICAqIMav4bubYyBsxrDhu6NuZyB24bubaSBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaQ0KICANCsSQ4buDIGtp4buDbSDEkeG7i25oIHhlbSB04bu3IGzhu4cgKCUpIFThu5VuZyBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBjw7MgYuG6sW5nIDUwJSBraMO0bmcgdGEgY8OzIGdp4bqjIHRoaeG6v3Qgc2F1Og0KDQogIEfhu41pIEgoMCk6IHAgPSAwLjUsIHThu6ljIGzDoCB04buVbmcgc+G7kSBuZ8aw4budaSBu4buZcCDEkcahbiBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgYuG6sW5nIDUwJQ0KDQpgYGB7cn0NCmQyIDwtIGRbZCRjYWxsID09ICdubycsXQ0KcHJvcC50ZXN0KGxlbmd0aChkMiRjYWxsKSwgbGVuZ3RoKGQyJGNhbGwpLCBwID0gMC4wNSkNCmBgYA0KDQpE4buxYSB2w6BvIGvhur90IHF14bqjIHRyw6puIHRhIHRo4bqleSwgZ2nDoSB0cuG7iyBwLXZhbHVlID0gMSA+IDAuNSUuIFbhuq15IHRhIGLDoWMgYuG7jyBIKDApLCB04bupYyBsw6ANCg0KdOG7lW5nIHPhu5EgbmfGsOG7nWkgbuG7mXAgxJHGoW4ga2jDtG5nIMSRxrDhu6NjIGfhu41pIGzhuqFpIGLDqSBoxqFuIDUwJSANCg0KICAqIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgY2jDqm5oIGzhu4djaCBnaeG7r2EgbmFtIHbDoCBu4buvIGPhu6dhIG5o4buvbmcgbmfGsOG7nWkgbuG7mXAgxJHGoW4gxJHGsOG7o2MgZ+G7jWkgbOG6oWkNCiAgDQrEkOG7gyBraeG7g20gxJHhu4tuaCB4ZW0gdOG7tyBs4buHICglKSBj4bunYSBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpIGdp4buvYSBuYW0gdsOgIG7hu68gY8OzIGLhurFuZyBuaGF1IGhheSBraMO0bmcgdGEgY8OzIGdp4bqjIHRoaeG6v3Qgc2F1Og0KDQogIEfhu41pIEgoMCk6IHAxID0gcDIsIHThu6ljIGzDoCBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIMSRxrDhu6NjIGfhu41pIGzhuqFpIGdp4buvYSBuYW0gdsOgIG7hu68gY8OzIGLhurFuZyBuaGF1DQoNCmBgYHtyfQ0KZG0gPC0gZFtkJGdlbmRlciA9PSAnbWFsZScsXQ0KZGYgPC0gZFtkJGdlbmRlciA9PSAnZmVtYWxlJyxdDQoNCmRteWVzIDwtIGRtW2RtJGNhbGwgPT0gInllcyIsXQ0KZGZ5ZXMgPC0gZGZbZGYkY2FsbCA9PSAieWVzIixdDQoNCmEgPC0gYyhucm93KGRtKSwgbnJvdyhkZikpDQpiIDwtIGMobnJvdyhkbXllcyksIG5yb3coZGZ5ZXMpKQ0KDQpwcm9wLnRlc3QoYixhKQ0KYGBgDQoNCkThu7FhIHbDoG8ga+G6v3QgcXXhuqMgdHLDqm4gdGEgdGjhuqV5LCBnacOhIHRy4buLIHAtdmFsdWUgPSAwLjQgPiBt4bupYyDDvSBuZ2jEqWEgMC4wNS4gxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgDQpraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aGnhur90IGtow7RuZyBIKDApLiBEbyDEkcOzLCBjaMO6bmcgdGEga2jDtG5nIHRo4buDIGvhur90IGx14bqtbiANCnLhurFuZyB04bu3IGzhu4cgbmfGsOG7nWkgbuG7mXAgxJHGoW4gxJHGsOG7o2MgZ+G7jWkgbOG6oWkgZ2nhu69hIG5hbSB2w6AgbuG7ryBsw6Aga2jDoWMgbmhhdS4NCg0KICogxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyBjaMOqbmggbOG7h2NoIGdp4buvYSBuYW0gdsOgIG7hu68gY+G7p2Egbmjhu69uZyBuZ8aw4budaSBu4buZcCDEkcahbiBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkNCiAgDQrEkOG7gyBraeG7g20gxJHhu4tuaCB4ZW0gdOG7tyBs4buHICglKSBj4bunYSBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBnaeG7r2EgbmFtIHbDoCBu4buvIGPDsyBi4bqxbmcgDQpuaGF1IGhheSBraMO0bmcgdGEgY8OzIGdp4bqjIHRoaeG6v3Qgc2F1Og0KDQogIEfhu41pIEgoMCk6IHAxID0gcDIsIHThu6ljIGzDoCBz4buRIG5nxrDhu51pIG7hu5lwIMSRxqFuIGtow7RuZyDEkcaw4bujYyBn4buNaSBs4bqhaSBnaeG7r2EgbmFtIHbDoCBu4buvIGPDsyBi4bqxbmcgbmhhdQ0KDQpgYGB7cn0NCg0KZG1ubyA8LSBkbVtkbSRjYWxsID09ICJubyIsXQ0KZGZubyA8LSBkZltkZiRjYWxsID09ICJubyIsXQ0KDQp5IDwtIGMobnJvdyhkbSksIG5yb3coZGYpKQ0KayA8LSBjKG5yb3coZG1ubyksIG5yb3coZGZubykpDQoNCnByb3AudGVzdChrLHkpDQpgYGANCg0KROG7sWEgdsOgbyBr4bq/dCBxdeG6oyB0csOqbiB0YSB0aOG6pXksIGdpw6EgdHLhu4sgcC12YWx1ZSA9IDAuNCA+IG3hu6ljIMO9IG5naMSpYSAwLjA1LiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6ANCmtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRoaeG6v3Qga2jDtG5nIEgoMCkuIERvIMSRw7MsIGNow7puZyB0YSBraMO0bmcgdGjhu4Mga+G6v3QgbHXhuq1uIA0KcuG6sW5nIHThu7cgbOG7hyBuZ8aw4budaSBu4buZcCDEkcahbiBraMO0bmcgxJHGsOG7o2MgZ+G7jWkgbOG6oWkgZ2nhu69hIG5hbSB2w6AgbuG7ryBsw6Aga2jDoWMgbmhhdS4NCg0KIyByZWxhdGl2ZSByaXNrLCBvZGRzcmF0aW8gdsOgIGtob+G6o25nIMaw4bubYyBsxrDhu6NuZyBj4bunYSAyIGNo4buJIHPhu5EgxJHDsywgw70gbmdoxKlhDQoNCg0KYGBge3J9DQpkJHF1YWxpdHlbZCRxdWFsaXR5ID09ICJoaWdoIl0gPC0gImhpZ2giDQpxdWFsIDwtIHRhYmxlKGQkZ2VuZGVyLCBkJHF1YWxpdHkpDQoNCmFkZG1hcmdpbnMocXVhbCkNCmBgYA0KDQpgYGB7cn0NClJlbFJpc2socXVhbCkNCmBgYA0KDQoNCmBgYHtyfQ0Kb2Rkc3JhdGlvKHF1YWwpDQpgYGANCg0KROG7sWEgdsOgbyBi4bqjbmcgdHLDqm46IFThu7cgc+G7kSBjaMOqbmggbOG7h2NoIChvZGRzcmF0aW8pIGNobyBuYW0gc28gduG7m2kgbuG7ryBsw6AgMC45ODg3LCB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlIHThu6sgMC44NjUyIMSR4bq/biAxLjEzMDAuIFbDrCBraG/huqNuZyB0aW4gY+G6rXkgYmFvIGfhu5NtIGdpw6EgdHLhu4sgMSwgY2jDum5nIHRhIGtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyBvZGRzIGPhu6dhIHZp4buHYyByxqFpIHbDoG8gbmjDs20gImhpZ2giIHNvIHbhu5tpICJsb3ciIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIGdp4buvYSBuYW0gdsOgIG7hu68uDQoNCiMgS2nhu4NtIMSR4buLbmggdMOtbmggxJHhu41jIGzhuq1wIGNobyAyIGJp4bq/bg0KDQpHaeG6oyB0aHV54bq/dCBIKDApOiBnZW5kZXIsIHF1YWxpdHkgxJHhu5ljIGzhuq1wDQoNCmBgYHtyfQ0KY2hpc3EudGVzdChxdWFsKQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgcOKIknZhbHVlID0gMC45ID4gMC4wNS4gVuG6rXkgdGEgY2jhuqVwIG5o4bqtbiBnaeG6oyB0aGnhur90IEgoMCksIG5naMSpYSBsw6AgZ2nhu5tpIHTDrW5oIHbDoCBi4bqxbmcgY+G6pXAga2jDtG5nIGxpw6puIHF1YW4gxJHhur9uIG5oYXUuDQoNCiMgSOG7k2kgcXV5DQoNCmBgYHtyfQ0KZml0dGVkIDwtIGdsbShmYWN0b3IoY2FsbCkgfiBjaXR5LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gJ2xvZ2l0JyksIGRhdGEgPSBkKQ0KDQpzdW1tYXJ5KGZpdHRlZCkNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=