Package: Ecdat - Datasets: FriendFoe(Data from the Television Game
Show Friend Or Foe ?)
“Dữ liệu quan sát về một game show Bạn hay thù? là một chương trình
trò chơi của Mỹ dựa trên kiến thức và sự tin tưởng được phát sóng trên
Game Show Network”.
Ta có thể tìm hiểu kỹ hơn về dữ liệu thông qua trang web được gắn
link ở đây: Friend_or_Foe
Mô tả dữ liệu
Số quan sát : 227
Quan sát : Cá nhân
Quốc gia : Mỹ
Ý nghĩa các biến thuộc dữ liệu FriendFoe
Biến Giải thích sex Giới tính thí sinh white Thí sinh có phải là
người da trắng không? age Tuổi của thí sinh play Lựa chọn của thí sinh:
một yếu tố có cấp độ “kẻ thù” và “bạn bè” round Vòng chơi thí sinh bị
loại, theo từng cấp độ 1,2,3 season Mùa chương trình ( mùa 1,2) cash Số
tiền trong hộp ủy thác sex1 Giới tính của đối thủ white1 Đối thủ có phải
là người da trắng hay không? age1 Tuổi của đối thủ play1 Sự lựa chọn của
đối tác : một yếu tố có cấp độ “kẻ thù” và “bạn bè” win Số tiền thí sinh
giành được (tính theo đôla $) win1 Số tiền đối thủ giành được (tính theo
đôla $)
library(kableExtra)
library(tidyverse)
library(dplyr)
library(ggplot2)
library(gridExtra)
library(DescTools)
library(ggplot2)
library(tidyverse)
library(DT)
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
library(dplyr)
library(cowplot)
##
## Attaching package: 'cowplot'
## The following object is masked from 'package:lubridate':
##
## stamp
#Bộ dữ liệu chương trình game show "Bạn hay thù" trong packages Ecdat
library(Ecdat)
## Loading required package: Ecfun
##
## Attaching package: 'Ecfun'
## The following object is masked from 'package:DescTools':
##
## BoxCox
## The following object is masked from 'package:base':
##
## sign
##
## Attaching package: 'Ecdat'
## The following object is masked from 'package:datasets':
##
## Orange
data(FriendFoe)
ffoe <- na.omit(FriendFoe)
#Xem cấu trúc data frame
str(ffoe)
## 'data.frame': 227 obs. of 13 variables:
## $ sex : Factor w/ 2 levels "female","male": 2 2 1 2 1 1 1 2 1 1 ...
## $ white : Factor w/ 2 levels "no","yes": 2 2 1 2 2 2 2 1 2 2 ...
## $ age : int 20 40 35 26 40 28 26 30 30 25 ...
## $ play : Factor w/ 2 levels "friend","foe": 2 2 2 1 1 2 1 2 1 1 ...
## $ round : Factor w/ 3 levels "1","2","3": 1 3 2 1 3 2 1 3 2 1 ...
## $ season: Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
## $ cash : num 1.2 7.7 3.2 1.2 5.7 3.7 1.2 7.2 3.7 0.7 ...
## $ sex1 : Factor w/ 2 levels "female","male": 2 1 1 2 2 1 1 2 2 2 ...
## $ white1: Factor w/ 2 levels "no","yes": 2 2 1 2 2 2 2 1 2 2 ...
## $ age1 : int 32 31 24 40 26 23 48 27 22 61 ...
## $ play1 : Factor w/ 2 levels "friend","foe": 1 2 2 1 2 1 1 1 2 1 ...
## $ win : num 1.2 0 0 0.6 0 3.7 0.6 7.2 0 0.35 ...
## $ win1 : num 0 0 0 0.6 5.7 0 0.6 0 3.7 0.35 ...
#Tạo bảng cho data frame
datatable(ffoe)
1 Lập bảng tần số
Ta muốn xem xét trong các thí sinh tham gia thì có bao nhiêu người là
da trắng và bao nhiêu người không phải da trắng theo từng giới tính
#Tạo bảng tần số và tính toán bảng tần số đó
f <-table(ffoe$white,ffoe$sex)
addmargins(f)
##
## female male Sum
## no 17 20 37
## yes 102 88 190
## Sum 119 108 227
ff <- prop.table(table(ffoe$white,ffoe$sex))
addmargins (ff)
##
## female male Sum
## no 0.07488987 0.08810573 0.16299559
## yes 0.44933921 0.38766520 0.83700441
## Sum 0.52422907 0.47577093 1.00000000
# Bảng phân phối biên
2 Vẽ đồ thị
#Trực quan hóa dữ liệu
w1 <- ggplot(ffoe, aes(x = sex,
y = after_stat(count))) +
geom_bar(fill = "cornflowerblue",
color="black") +
geom_text(aes(label = (after_stat(count))), stat = 'count', color = 'black', vjust = - .25) +
theme_classic() +
labs(x = "Giới tính",
y = "Số người",
title = "Giới tính và màu da") +
facet_grid(. ~ white)
w2 <- ggplot(ffoe, aes(x = sex,
y = after_stat(count))) +
geom_bar( fill = "indianred3",
color = "black") +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))),
stat = 'count', color = 'black', vjust = - .25) +
theme_classic() +
labs(x = "Giới tính",
y = "Phần trăm",
title = "Phần trăm thí sinh tham gia theo màu da") +
facet_grid(. ~ white)
plot_grid(w1,w2)

Nhận xét:Nhìn vào kết quả sau khi trực quan hóa dữ
liệu ta có thể thấy được số thí sinh tham gia là giới tính nữ màu da
trắng có 102 người (44.9%) và không phải da trắng có 17 người (7.5%).
Thí sinh tham gia là giới tính nam có 88 người (38.8%) da trắng và 20
người (8.8%) người không phải da trắng.
#Chia đồ thị giá trị số theo biến sex (giới tính)
g7 <- ggplot(ffoe, aes(x = round,
y = after_stat(count))) +
geom_bar(fill = "cornflowerblue",
color="black") +
geom_text(aes(label = (after_stat(count))), stat = 'count', color = 'black', vjust = - .25) +
theme_classic() +
labs(x = "Cấp độ trò chơi",
y = "Số người",
title = "Số người và cấp độ bị loại của từng giới tính thí sinh") +
facet_grid(. ~ sex)
# Chia đồ thị theo tỷ lệ phần trăm giới tính đối thủ
g8 <- ggplot(ffoe, aes(x = round,
y = after_stat(count/sum(count)))) +
geom_bar( fill = "indianred3",
color = "black") +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))),
stat = 'count', color = 'black', vjust = - .1) +
theme_classic() +
labs(x = "Cấp độ trò chơi",
y = "Số người",
title = "Phần trăm số người và cấp độ bị loại của từng giới tính thí sinh") +
scale_y_continuous(labels = scales::percent) +
facet_grid(.~ sex)
plot_grid(g7,g8)

3 Ước lượng tỷ lệ
f <-table(ffoe$white,ffoe$sex)
addmargins(f)
##
## female male Sum
## no 17 20 37
## yes 102 88 190
## Sum 119 108 227
RelRisk(f)
## [1] 0.8558559
4 Ước lượng chênh lệch 2 tỷ lệ
table(ffoe$white,ffoe$sex)
##
## female male
## no 17 20
## yes 102 88
m <- matrix(c(17,102,20,88),nrow = 2)
# Ước lượng Relative risk
RelRisk(m, conf.level = .95)
## rel. risk lwr.ci upr.ci
## 0.8558559 0.5672504 1.1895780
# Ước lượng Odd ratio
OddsRatio(f)
## [1] 0.7333333
OddsRatio(f,conf.level = .95)
## odds ratio lwr.ci upr.ci
## 0.7333333 0.3617486 1.4866064
7 Hồi quy
hoiquytuyentinh <- function(data,x, y) {
# Chạy hồi quy tuyến tính
fit <- lm(formula = paste(y, "~", x), data = data)
# Trả về mô hình hồi quy tuyến tính
options(digits = 10)
return(summary(fit))
}
bieudo <- function(data, x, y) {
library(ggplot2)
# Vẽ đồ thị phân tán và đường hồi quy
ggplot(data, aes_string(x = x, y = y)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "yellow") +
labs(title = "Biểu đồ phân tán và đường hồi quy",
x = x,
y = y) +
theme_minimal()
}
LS0tDQp0aXRsZTogIkJULVQzIg0KYXV0aG9yOiAiTmd1eeG7hW4gVGjhu4sgSHXhu7NuaCBOaMawIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgcGRmX2RvY3VtZW50Og0KICAgIGV4dHJhX2RlcGVuZGVuY2llczoNCiAgICAgIHZpZXRuYW06IHV0ZjgNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KZ2VvbWV0cnk6DQogICAgICAtIGlubmVyPTNjbQ0KICAgICAgLSBvdXRlcj00Y20NCiAgICAgIC0gdG9wPTNjbQ0KICAgICAgLSBib3R0b209NGNtDQogICAgICAtIGhlYWRzZXA9MjJwdA0KICAgICAgLSBoZWFkaGVpZ2h0PTExcHQNCiAgICAgIC0gZm9vdHNraXA9MzNwdA0KICAgICAgLSBpZ25vcmVoZWFkDQogICAgICAtIGlnbm9yZWZvb3QNCiAgICAgIC0gaGVpZ2h0cm91bmRlZA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNClBhY2thZ2U6IEVjZGF0IC0gRGF0YXNldHM6IEZyaWVuZEZvZShEYXRhIGZyb20gdGhlIFRlbGV2aXNpb24gR2FtZSBTaG93DQpGcmllbmQgT3IgRm9lID8pDQoNCiJE4buvIGxp4buHdSBxdWFuIHPDoXQgduG7gSBt4buZdCBnYW1lIHNob3cgQuG6oW4gaGF5IHRow7k/IGzDoCBt4buZdCBjaMawxqFuZyB0csOsbmggdHLDsg0KY2jGoWkgY+G7p2EgTeG7uSBk4buxYSB0csOqbiBraeG6v24gdGjhu6ljIHbDoCBz4buxIHRpbiB0xrDhu59uZyDEkcaw4bujYyBwaMOhdCBzw7NuZyB0csOqbiBHYW1lDQpTaG93IE5ldHdvcmsiLg0KDQpUYSBjw7MgdGjhu4MgdMOsbSBoaeG7g3Uga+G7uSBoxqFuIHbhu4EgZOG7ryBsaeG7h3UgdGjDtG5nIHF1YSB0cmFuZyB3ZWIgxJHGsOG7o2MgZ+G6r24gbGluayDhu58NCsSRw6J5OiBGcmllbmRfb3JfRm9lDQoNCk3DtCB04bqjIGThu68gbGnhu4d1DQoNClPhu5EgcXVhbiBzw6F0IDogMjI3DQoNClF1YW4gc8OhdCA6IEPDoSBuaMOibg0KDQpRdeG7kWMgZ2lhIDogTeG7uQ0KDQrDnSBuZ2jEqWEgY8OhYyBiaeG6v24gdGh14buZYyBk4buvIGxp4buHdSBGcmllbmRGb2UNCg0KQmnhur9uIEdp4bqjaSB0aMOtY2ggc2V4IEdp4bubaSB0w61uaCB0aMOtIHNpbmggd2hpdGUgVGjDrSBzaW5oIGPDsyBwaOG6o2kgbMOgIG5nxrDhu51pDQpkYSB0cuG6r25nIGtow7RuZz8gYWdlIFR14buVaSBj4bunYSB0aMOtIHNpbmggcGxheSBM4buxYSBjaOG7jW4gY+G7p2EgdGjDrSBzaW5oOiBt4buZdA0KeeG6v3UgdOG7kSBjw7MgY+G6pXAgxJHhu5kgImvhursgdGjDuSIgdsOgICJi4bqhbiBiw6giIHJvdW5kIFbDsm5nIGNoxqFpIHRow60gc2luaCBi4buLIGxv4bqhaSwNCnRoZW8gdOG7q25nIGPhuqVwIMSR4buZIDEsMiwzIHNlYXNvbiBNw7lhIGNoxrDGoW5nIHRyw6xuaCAoIG3DuWEgMSwyKSBjYXNoIFPhu5EgdGnhu4FuDQp0cm9uZyBo4buZcCDhu6d5IHRow6FjIHNleDEgR2nhu5tpIHTDrW5oIGPhu6dhIMSR4buRaSB0aOG7pyB3aGl0ZTEgxJDhu5FpIHRo4bunIGPDsyBwaOG6o2kgbMOgDQpuZ8aw4budaSBkYSB0cuG6r25nIGhheSBraMO0bmc/IGFnZTEgVHXhu5VpIGPhu6dhIMSR4buRaSB0aOG7pyBwbGF5MSBT4buxIGzhu7FhIGNo4buNbiBj4bunYQ0KxJHhu5FpIHTDoWMgOiBt4buZdCB54bq/dSB04buRIGPDsyBj4bqlcCDEkeG7mSAia+G6uyB0aMO5IiB2w6AgImLhuqFuIGLDqCIgd2luIFPhu5EgdGnhu4FuIHRow60gc2luaA0KZ2nDoG5oIMSRxrDhu6NjICh0w61uaCB0aGVvIMSRw7RsYSBcJCkgd2luMSBT4buRIHRp4buBbiDEkeG7kWkgdGjhu6cgZ2nDoG5oIMSRxrDhu6NjICh0w61uaA0KdGhlbyDEkcO0bGEgXCQpDQoNCmBgYHtyLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShEZXNjVG9vbHMpDQpgYGANCg0KYGBge3Isd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoY293cGxvdCkNCiNC4buZIGThu68gbGnhu4d1IGNoxrDGoW5nIHRyw6xuaCBnYW1lIHNob3cgIkLhuqFuIGhheSB0aMO5IiB0cm9uZyBwYWNrYWdlcyBFY2RhdCANCmxpYnJhcnkoRWNkYXQpDQpkYXRhKEZyaWVuZEZvZSkNCmZmb2UgPC0gbmEub21pdChGcmllbmRGb2UpDQojWGVtIGPhuqV1IHRyw7pjIGRhdGEgZnJhbWUgDQpzdHIoZmZvZSkNCiNU4bqhbyBi4bqjbmcgY2hvIGRhdGEgZnJhbWUgDQpkYXRhdGFibGUoZmZvZSkNCmBgYA0KDQoqKjEgTOG6rXAgYuG6o25nIHThuqduIHPhu5EqKg0KDQpUYSBtdeG7kW4geGVtIHjDqXQgdHJvbmcgY8OhYyB0aMOtIHNpbmggdGhhbSBnaWEgdGjDrCBjw7MgYmFvIG5oacOqdSBuZ8aw4budaSBsw6AgZGENCnRy4bqvbmcgdsOgIGJhbyBuaGnDqnUgbmfGsOG7nWkga2jDtG5nIHBo4bqjaSBkYSB0cuG6r25nIHRoZW8gdOG7q25nIGdp4bubaSB0w61uaA0KDQpgYGB7cn0NCiNU4bqhbyBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdMOtbmggdG/DoW4gYuG6o25nIHThuqduIHPhu5EgxJHDsyANCmYgPC10YWJsZShmZm9lJHdoaXRlLGZmb2Ukc2V4KQ0KYWRkbWFyZ2lucyhmKQ0KZmYgPC0gcHJvcC50YWJsZSh0YWJsZShmZm9lJHdoaXRlLGZmb2Ukc2V4KSkNCmFkZG1hcmdpbnMgKGZmKQ0KIyBC4bqjbmcgcGjDom4gcGjhu5FpIGJpw6puDQpgYGANCg0KKioyIFbhur0gxJHhu5MgdGjhu4sqKg0KDQpgYGB7cn0NCiNUcuG7sWMgcXVhbiBow7NhIGThu68gbGnhu4d1IA0KdzEgPC0gZ2dwbG90KGZmb2UsIGFlcyh4ID0gc2V4LA0KICAgICAgICAgICAgICAgIHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV9iYXIoZmlsbCA9ICJjb3JuZmxvd2VyYmx1ZSIsIA0KICAgICAgICAgICBjb2xvcj0iYmxhY2siKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSAoYWZ0ZXJfc3RhdChjb3VudCkpKSwgc3RhdCA9ICdjb3VudCcsIGNvbG9yID0gJ2JsYWNrJywgdmp1c3QgPSAtIC4yNSkgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICBsYWJzKHggPSAiR2nhu5tpIHTDrW5oIiwNCiAgICAgICB5ID0gIlPhu5EgbmfGsOG7nWkiLA0KICAgICAgIHRpdGxlID0gIkdp4bubaSB0w61uaCB2w6AgbcOgdSBkYSIpICsNCmZhY2V0X2dyaWQoLiB+IHdoaXRlKSANCiANCncyIDwtIGdncGxvdChmZm9lLCBhZXMoeCA9IHNleCwNCiAgICAgICAgICAgICAgICB5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fYmFyKCBmaWxsID0gImluZGlhbnJlZDMiLCANCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCANCiAgICAgICAgICAgIHN0YXQgPSAnY291bnQnLCBjb2xvciA9ICdibGFjaycsIHZqdXN0ID0gLSAuMjUpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgbGFicyh4ID0gIkdp4bubaSB0w61uaCIsDQogICAgICAgeSA9ICJQaOG6p24gdHLEg20iLA0KICAgICAgIHRpdGxlID0gIlBo4bqnbiB0csSDbSB0aMOtIHNpbmggdGhhbSBnaWEgdGhlbyBtw6B1IGRhIikgKw0KICBmYWNldF9ncmlkKC4gfiB3aGl0ZSkNCg0KcGxvdF9ncmlkKHcxLHcyKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KipOaMOsbiB2w6BvIGvhur90IHF14bqjIHNhdSBraGkgdHLhu7FjIHF1YW4gaMOzYSBk4buvIGxp4buHdSB0YSBjw7MgdGjhu4MgdGjhuqV5IMSRxrDhu6NjIHPhu5EgdGjDrSBzaW5oIHRoYW0gZ2lhIGzDoCBnaeG7m2kgdMOtbmggbuG7ryBtw6B1IGRhIHRy4bqvbmcgY8OzIDEwMiBuZ8aw4budaSAoNDQuOSUpIHbDoCBraMO0bmcgcGjhuqNpIGRhIHRy4bqvbmcgY8OzIDE3IG5nxrDhu51pICg3LjUlKS4gVGjDrSBzaW5oIHRoYW0gZ2lhIGzDoCBnaeG7m2kgdMOtbmggbmFtIGPDsyA4OCBuZ8aw4budaSAoMzguOCUpIGRhIHRy4bqvbmcgdsOgIDIwIG5nxrDhu51pICg4LjglKSBuZ8aw4budaSBraMO0bmcgcGjhuqNpIGRhIHRy4bqvbmcuDQoNCmBgYHtyfQ0KI0NoaWEgxJHhu5MgdGjhu4sgZ2nDoSB0cuG7iyBz4buRIHRoZW8gYmnhur9uIHNleCAoZ2nhu5tpIHTDrW5oKQ0KZzcgPC0gZ2dwbG90KGZmb2UsIGFlcyh4ID0gcm91bmQsDQogICAgICAgICAgICAgICAgeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX2JhcihmaWxsID0gImNvcm5mbG93ZXJibHVlIiwgDQogICAgICAgICAgIGNvbG9yPSJibGFjayIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IChhZnRlcl9zdGF0KGNvdW50KSkpLCBzdGF0ID0gJ2NvdW50JywgY29sb3IgPSAnYmxhY2snLCB2anVzdCA9IC0gLjI1KSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIGxhYnMoeCA9ICJD4bqlcCDEkeG7mSB0csOyIGNoxqFpIiwNCiAgICAgICB5ID0gIlPhu5EgbmfGsOG7nWkiLA0KICAgICAgIHRpdGxlID0gIlPhu5EgbmfGsOG7nWkgdsOgIGPhuqVwIMSR4buZIGLhu4sgbG/huqFpIGPhu6dhIHThu6tuZyBnaeG7m2kgdMOtbmggdGjDrSBzaW5oIikgKw0KZmFjZXRfZ3JpZCguIH4gc2V4KQ0KDQojIENoaWEgxJHhu5MgdGjhu4sgdGhlbyB04bu3IGzhu4cgcGjhuqduIHRyxINtIGdp4bubaSB0w61uaCDEkeG7kWkgdGjhu6cNCmc4ICA8LSBnZ3Bsb3QoZmZvZSwgYWVzKHggPSByb3VuZCwNCiAgICAgICAgICAgICAgICB5ID0gYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpICsNCiAgZ2VvbV9iYXIoIGZpbGwgPSAiaW5kaWFucmVkMyIsIA0KICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIA0KICAgICAgICAgICAgc3RhdCA9ICdjb3VudCcsIGNvbG9yID0gJ2JsYWNrJywgdmp1c3QgPSAtIC4xKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIGxhYnMoeCA9ICJD4bqlcCDEkeG7mSB0csOyIGNoxqFpIiwNCiAgICAgICB5ID0gIlPhu5EgbmfGsOG7nWkiLA0KICAgICAgIHRpdGxlID0gIlBo4bqnbiB0csSDbSBz4buRIG5nxrDhu51pIHbDoCBj4bqlcCDEkeG7mSBi4buLIGxv4bqhaSBj4bunYSB04burbmcgZ2nhu5tpIHTDrW5oIHRow60gc2luaCIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKw0KICBmYWNldF9ncmlkKC5+IHNleCkNCnBsb3RfZ3JpZChnNyxnOCkNCmBgYA0KDQoqKjMgxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyoqDQoNCmBgYHtyfQ0KZiA8LXRhYmxlKGZmb2Ukd2hpdGUsZmZvZSRzZXgpDQphZGRtYXJnaW5zKGYpDQpSZWxSaXNrKGYpDQpgYGANCg0KKio0IMav4bubYyBsxrDhu6NuZyBjaMOqbmggbOG7h2NoIDIgdOG7tyBs4buHKioNCg0KYGBge3J9DQp0YWJsZShmZm9lJHdoaXRlLGZmb2Ukc2V4KQ0KbSA8LSBtYXRyaXgoYygxNywxMDIsMjAsODgpLG5yb3cgPSAyKQ0KDQojIMav4bubYyBsxrDhu6NuZyBSZWxhdGl2ZSByaXNrDQpSZWxSaXNrKG0sIGNvbmYubGV2ZWwgPSAuOTUpDQoNCiMgxq/hu5tjIGzGsOG7o25nIE9kZCByYXRpbw0KT2Rkc1JhdGlvKGYpDQoNCk9kZHNSYXRpbyhmLGNvbmYubGV2ZWwgPSAuOTUpDQpgYGANCg0KKio3IEjhu5NpIHF1eSoqDQoNCmBgYHtyfQ0KaG9pcXV5dHV5ZW50aW5oIDwtIGZ1bmN0aW9uKGRhdGEseCwgeSkgew0KICAjIENo4bqheSBo4buTaSBxdXkgdHV54bq/biB0w61uaA0KICBmaXQgPC0gbG0oZm9ybXVsYSA9IHBhc3RlKHksICJ+IiwgeCksIGRhdGEgPSBkYXRhKQ0KICAjIFRy4bqjIHbhu4EgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oDQogIG9wdGlvbnMoZGlnaXRzID0gMTApDQogIHJldHVybihzdW1tYXJ5KGZpdCkpDQp9DQoNCmJpZXVkbyA8LSBmdW5jdGlvbihkYXRhLCB4LCB5KSB7DQogIGxpYnJhcnkoZ2dwbG90MikgDQogICAjIFbhur0gxJHhu5MgdGjhu4sgcGjDom4gdMOhbiB2w6AgxJHGsOG7nW5nIGjhu5NpIHF1eQ0KICBnZ3Bsb3QoZGF0YSwgYWVzX3N0cmluZyh4ID0geCwgeSA9IHkpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBjb2xvciA9ICJ5ZWxsb3ciKSArDQogICAgbGFicyh0aXRsZSA9ICJCaeG7g3UgxJHhu5MgcGjDom4gdMOhbiB2w6AgxJHGsOG7nW5nIGjhu5NpIHF1eSIsDQogICAgICAgICB4ID0geCwNCiAgICAgICAgIHkgPSB5KSArDQogICAgdGhlbWVfbWluaW1hbCgpDQp9DQpgYGANCg==