1. Giới thiệu data

Dữ liệu khảo sát về thói quen hút thuốc lá ở Vương quốc Anh. Bộ dữ liệu này có thể được sử dụng để phân tích đặc điểm dân cư của người hút thuốc và các loại thuốc lá được sử dụng.

Bộ dữ liệu chứa 1691 quan sát trên 12 biến

Chúng ta sẽ phân tích xem giới tính, tình trạng hôn nhân có ảnh hưởng đến việc hút thuốc hay không dựa vào hai biến định tính là gender, marital_status và smoke:

  • gender: Giới tính: Nữ và Nam

  • marital_status: Trạng thái hôn nhân với các biểu hiện: Ly hôn, Đã kết hôn, Ly thân, Độc thân và Góa vợ/chồng.

  • smoke: Trạng thái hút thuốc: Không và Có

2. Lập bảng tần số

Tần số và tần suất biến gender

## 
## Female   Male 
##    965    726
## 
##    Female      Male 
## 0.5706682 0.4293318
  • Từ kết quả trên ta có thể thấy được trong 1691 lượt tham gia khảo sát có 965 người có giới tính là nữ (chiếm 57,07%) và 726 người có giới tính là nam (chiếm 42,93%)

Tần số và tần suất biến marital_status

table(S$marital_status)
## 
##  Divorced   Married Separated    Single   Widowed 
##       161       812        68       427       223
prop.table(table(S$marital_status))
## 
##   Divorced    Married  Separated     Single    Widowed 
## 0.09520993 0.48018924 0.04021289 0.25251331 0.13187463
  • Thông qua kết quả ta thấy được trong 1691 người khảo sát có 812 người là đã có gia đình, chiếm 48,02% - đây là tỷ lệ cao nhất trong tất cả các biểu hiện; tiếp theo là tỷ lệ người độc thân chiếm 25,25% (427 người), tỷ lệ người góa vợ/chồng là 13,19% (223 người), người đã ly hôn là 9,52% (161) và cuối cùng là tỷ lệ người ly thân chiếm tỷ lệ thấp nhất 4,02% (68 người).

Tần số và tần suất biến smoke

## 
##   No  Yes 
## 1270  421
## 
##        No       Yes 
## 0.7510349 0.2489651
  • Kết quả cho thấy trong 1691 lượt tham gia khảo sát có 421 câu trả lời là có hút thuốc (24,9%) và 1270 câu trả lời là không (75,1%).

Bảng tần số, tần suất và Vẽ đồ thị cho hai biến gender và biến smoke

##         
##           No Yes
##   Female 731 234
##   Male   539 187
##         
##                 No       Yes
##   Female 0.4322886 0.1383797
##   Male   0.3187463 0.1105855

Thông qua kết quả trên ta thấy

  • Trong nhóm người không hút thuốc có 731 người là nữ (43,23%) và 539 người là nam (31,87%)

  • Trong nhóm người có câu trả lời “có hút thuốc” có 234 người là nữ (13,84%) và 187 người là nam (11,06%)

Bảng tần số, tần suất và Vẽ đồ thị cho hai biến gender và biến smoke

m <- table(S$marital_status, S$smoke)
m
##            
##              No Yes
##   Divorced  103  58
##   Married   669 143
##   Separated  46  22
##   Single    269 158
##   Widowed   183  40
prop.table(m)
##            
##                     No        Yes
##   Divorced  0.06091070 0.03429923
##   Married   0.39562389 0.08456535
##   Separated 0.02720284 0.01301005
##   Single    0.15907747 0.09343584
##   Widowed   0.10821999 0.02365464
barplot(m, beside=T, legend=T)

Thông qua kết quả trên ta thấy

  • Trong nhóm người ‘không hút thuốc’ có 103 người đã ly hôn (6,09%), 669 người đã kết hôn (39,56%), 46 người đã ly thân (2,72%), 269 người còn độc thân (15,91%) và 183 người là góa vợ/chồng (10,82%).

  • Trong nhóm người ‘có hút thuốc’ có 58 người đã ly hôn (3.43%), 143 người đã kết hôn (8,46%), 22 người đã ly thân (1,3%), 158 người còn độc thân (9,34%) và 40 người là góa vợ/chồng (2,37%).

3. Ước lượng tỷ lệ

Tỷ lệ người có hút thuốc là 0.24897 và không hút thuốc là 0.75103.

Ước lượng với giới tính nữ

Ước lương tỷ lệ người có hút thuốc có giới tính là nữ có thực sự chiếm 13,84% không

yf <- table(S[S$smoke == "Yes", ]$gender)
yf 
## 
## Female   Male 
##    234    187
prop.test(yf["Female"], sum(yf), p = 0.1384)
## 
##  1-sample proportions test with continuity correction
## 
## data:  yf["Female"] out of sum(yf), null probability 0.1384
## X-squared = 611.66, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.1384
## 95 percent confidence interval:
##  0.5068749 0.6037294
## sample estimates:
##         p 
## 0.5558195

Vì p_value = 2.2e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ người có hút thuốc có giới tính là nữ chiếm 13,84%.

Ước lương tỷ lệ người không hút thuốc có giới tính là nữ có thực sự chiếm 43,23% không

nf <- table(S[S$smoke == "No", ]$gender)
nf
## 
## Female   Male 
##    731    539
prop.test(nf["Female"], sum(nf), p = 0.4323)
## 
##  1-sample proportions test with continuity correction
## 
## data:  nf["Female"] out of sum(nf), null probability 0.4323
## X-squared = 105.67, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.4323
## 95 percent confidence interval:
##  0.5478240 0.6028946
## sample estimates:
##         p 
## 0.5755906

Vì p_value = 2.2e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ người không hút thuốc có giới tính là nữ chiếm 13,84%.

Ước lượng với giới tính nam

Ước lương tỷ lệ người có hút thuốc có giới tính là nam có thực sự chiếm 11,05% không

ym <- table(S[S$smoke == "Yes", ]$gender)
ym
## 
## Female   Male 
##    234    187
prop.test(ym["Male"], sum(ym), p = 0.1105)
## 
##  1-sample proportions test with continuity correction
## 
## data:  ym["Male"] out of sum(ym), null probability 0.1105
## X-squared = 473.52, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.1105
## 95 percent confidence interval:
##  0.3962706 0.4931251
## sample estimates:
##         p 
## 0.4441805

Vì p_value = 2.2e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ người có hút thuốc có giới tính là nam chiếm 11,05%.

Ước lương tỷ lệ người không hút thuốc có giới tính là nam có thực sự chiếm 31,87% không

nm <- table(S[S$smoke == "No", ]$gender)
nm
## 
## Female   Male 
##    731    539
prop.test(nm["Male"], sum(nm), p = 0.3187)
## 
##  1-sample proportions test with continuity correction
## 
## data:  nm["Male"] out of sum(nm), null probability 0.3187
## X-squared = 64.874, df = 1, p-value = 7.985e-16
## alternative hypothesis: true p is not equal to 0.3187
## 95 percent confidence interval:
##  0.3971054 0.4521760
## sample estimates:
##         p 
## 0.4244094

Vì p_value = 7.985e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ người không hút thuốc có giới tính là nam chiếm 31,87%.

4. Relative Risk

addmargins(n)
##         
##            No  Yes  Sum
##   Female  731  234  965
##   Male    539  187  726
##   Sum    1270  421 1691
RelRisk(n)
## [1] 1.020324
  • n > 1 (1.020324) cho thấy rằng nhóm người có giới tính là nam có xu hướng hút thuốc cao hơn so với nhóm nữ.

5. Odd Ratio

OddsRatio(n)
## [1] 1.083813
oddsratio(n)
## $data
##         
##            No Yes Total
##   Female  731 234   965
##   Male    539 187   726
##   Total  1270 421  1691
## 
## $measure
##         odds ratio with 95% C.I.
##          estimate     lower    upper
##   Female 1.000000        NA       NA
##   Male   1.083878 0.8673937 1.353222
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male    0.4778695    0.4955885  0.4775473
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
  • Tỷ lệ chênh (1.083813) > 1: thể hiện khả năng không hút thuốc ở nhóm giới tính nữ cao hơn nhóm giới tính nam gấp 1.083813 lần.

  • Trong khoảng tin cậy 95%, Khả năng hút thuốc ở giới tính nam từ 0.8673937 đến 1.353222 với tiêu chuẩn là 1.083878.

LS0tDQp0aXRsZTogIkJUVk4gQnVvaSAzIg0KYXV0aG9yOiAiVHJ1b25nIExlIE5nb2MgRGllcCINCmRhdGU6ICIyMDI0LTA2LTAxIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgcGRmX2RvY3VtZW50Og0KICAgIGV4dHJhX2RlcGVuZGVuY2llczoNCiAgICAgIHZpZXRuYW06IHV0ZjgNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KZ2VvbWV0cnk6DQogICAgICAtIGlubmVyPTNjbQ0KICAgICAgLSBvdXRlcj00Y20NCiAgICAgIC0gdG9wPTNjbQ0KICAgICAgLSBib3R0b209NGNtDQogICAgICAtIGhlYWRzZXA9MjJwdA0KICAgICAgLSBoZWFkaGVpZ2h0PTExcHQNCiAgICAgIC0gZm9vdHNraXA9MzNwdA0KICAgICAgLSBpZ25vcmVoZWFkDQogICAgICAtIGlnbm9yZWZvb3QNCiAgICAgIC0gaGVpZ2h0cm91bmRlZA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeShlcGl0b29scykNCmBgYA0KDQoNCiMgKioxLiBHaeG7m2kgdGhp4buHdSBkYXRhKioNCg0KROG7ryBsaeG7h3Uga2jhuqNvIHPDoXQgduG7gSB0aMOzaSBxdWVuIGjDunQgdGh14buRYyBsw6Eg4bufIFbGsMahbmcgcXXhu5FjIEFuaC4gQuG7mSBk4buvIGxp4buHdSBuw6B5IGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBwaMOibiB0w61jaCDEkeG6t2MgxJFp4buDbSBkw6JuIGPGsCBj4bunYSBuZ8aw4budaSBow7p0IHRodeG7kWMgdsOgIGPDoWMgbG/huqFpIHRodeG7kWMgbMOhIMSRxrDhu6NjIHPhu60gZOG7pW5nLg0KDQpC4buZIGThu68gbGnhu4d1IGNo4bupYSAxNjkxIHF1YW4gc8OhdCB0csOqbiAxMiBiaeG6v24NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NClMgPC0gcmVhZF9jc3YoIkQ6L0Rvd25sb2FkL3Ntb2tpbmcuY3N2IikNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZGF0YXRhYmxlKFMpDQpgYGANCg0KQ2jDum5nIHRhIHPhur0gcGjDom4gdMOtY2ggeGVtIGdp4bubaSB0w61uaCwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gdmnhu4djIGjDunQgdGh14buRYyBoYXkga2jDtG5nIGThu7FhIHbDoG8gaGFpIGJp4bq/biDEkeG7i25oIHTDrW5oIGzDoCBnZW5kZXIsIG1hcml0YWxfc3RhdHVzIHbDoCBzbW9rZToNCg0KLSAgIGdlbmRlcjogR2nhu5tpIHTDrW5oOiBO4buvIHbDoCBOYW0NCg0KLSAgIG1hcml0YWxfc3RhdHVzOiBUcuG6oW5nIHRow6FpIGjDtG4gbmjDom4gduG7m2kgY8OhYyBiaeG7g3UgaGnhu4duOiBMeSBow7RuLCDEkMOjIGvhur90IGjDtG4sIEx5IHRow6JuLCDEkOG7mWMgdGjDom4gdsOgIEfDs2EgduG7oy9jaOG7k25nLg0KDQotICAgc21va2U6IFRy4bqhbmcgdGjDoWkgaMO6dCB0aHXhu5FjOiBLaMO0bmcgdsOgIEPDsw0KDQojICoqMi4gTOG6rXAgYuG6o25nIHThuqduIHPhu5EqKg0KDQojIyAqKlThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCBiaeG6v24gZ2VuZGVyKioNCg0KYGBge3IgZWNobz1GQUxTRX0NCnRhYmxlKFMkZ2VuZGVyKQ0KcHJvcC50YWJsZSh0YWJsZShTJGdlbmRlcikpDQpgYGANCi0gICBU4burIGvhur90IHF14bqjIHRyw6puIHRhIGPDsyB0aOG7gyB0aOG6pXkgxJHGsOG7o2MgdHJvbmcgMTY5MSBsxrDhu6N0IHRoYW0gZ2lhIGto4bqjbyBzw6F0IGPDsyA5NjUgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBsw6AgbuG7ryAoY2hp4bq/bSA1NywwNyUpIHbDoCA3MjYgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBsw6AgbmFtIChjaGnhur9tIDQyLDkzJSkNCg0KIyMgKipU4bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgYmnhur9uIG1hcml0YWxfc3RhdHVzKioNCg0KYGBge3J9DQp0YWJsZShTJG1hcml0YWxfc3RhdHVzKQ0KcHJvcC50YWJsZSh0YWJsZShTJG1hcml0YWxfc3RhdHVzKSkNCmBgYA0KLSAgIFRow7RuZyBxdWEga+G6v3QgcXXhuqMgdGEgdGjhuqV5IMSRxrDhu6NjIHRyb25nIDE2OTEgbmfGsOG7nWkga2jhuqNvIHPDoXQgY8OzIDgxMiBuZ8aw4budaSBsw6AgxJHDoyBjw7MgZ2lhIMSRw6xuaCwgY2hp4bq/bSA0OCwwMiUgLSDEkcOieSBsw6AgdOG7tyBs4buHIGNhbyBuaOG6pXQgdHJvbmcgdOG6pXQgY+G6oyBjw6FjIGJp4buDdSBoaeG7h247IHRp4bq/cCB0aGVvIGzDoCB04bu3IGzhu4cgbmfGsOG7nWkgxJHhu5ljIHRow6JuIGNoaeG6v20gMjUsMjUlICg0MjcgbmfGsOG7nWkpLCB04bu3IGzhu4cgbmfGsOG7nWkgZ8OzYSB24bujL2No4buTbmcgbMOgIDEzLDE5JSAoMjIzIG5nxrDhu51pKSwgbmfGsOG7nWkgxJHDoyBseSBow7RuIGzDoCA5LDUyJSAoMTYxKSB2w6AgY3Xhu5FpIGPDuW5nIGzDoCB04bu3IGzhu4cgbmfGsOG7nWkgbHkgdGjDom4gY2hp4bq/bSB04bu3IGzhu4cgdGjhuqVwIG5o4bqldCA0LDAyJSAoNjggbmfGsOG7nWkpLg0KDQojIyBU4bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgYmnhur9uIHNtb2tlDQoNCmBgYHtyIGVjaG89RkFMU0V9DQp0YWJsZShTJHNtb2tlKQ0KcHJvcC50YWJsZSh0YWJsZShTJHNtb2tlKSkNCmBgYA0KLSAgIEvhur90IHF14bqjIGNobyB0aOG6pXkgdHJvbmcgMTY5MSBsxrDhu6N0IHRoYW0gZ2lhIGto4bqjbyBzw6F0IGPDsyA0MjEgY8OidSB0cuG6oyBs4budaSBsw6AgY8OzIGjDunQgdGh14buRYyAoMjQsOSUpIHbDoCAxMjcwIGPDonUgdHLhuqMgbOG7nWkgbMOgIGtow7RuZyAoNzUsMSUpLg0KDQojIyBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCBW4bq9IMSR4buTIHRo4buLIGNobyBoYWkgYmnhur9uIGdlbmRlciB2w6AgYmnhur9uIHNtb2tlDQoNCmBgYHtyIGVjaG89RkFMU0V9DQpuIDwtIHRhYmxlKFMkZ2VuZGVyLCBTJHNtb2tlKQ0Kbg0KcHJvcC50YWJsZShuKQ0KYmFycGxvdChuLCBiZXNpZGU9VCwgbGVnZW5kPVQpDQpgYGANCg0KVGjDtG5nIHF1YSBr4bq/dCBxdeG6oyB0csOqbiB0YSB0aOG6pXkNCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMgY8OzIDczMSBuZ8aw4budaSBsw6AgbuG7ryAoNDMsMjMlKSB2w6AgNTM5IG5nxrDhu51pIGzDoCBuYW0gKDMxLDg3JSkNCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pIGPDsyBjw6J1IHRy4bqjIGzhu51pICJjw7MgaMO6dCB0aHXhu5FjIiBjw7MgMjM0IG5nxrDhu51pIGzDoCBu4buvICgxMyw4NCUpIHbDoCAxODcgbmfGsOG7nWkgbMOgIG5hbSAoMTEsMDYlKQ0KDQojIyBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCBW4bq9IMSR4buTIHRo4buLIGNobyBoYWkgYmnhur9uIGdlbmRlciB2w6AgYmnhur9uIHNtb2tlDQoNCmBgYHtyfQ0KbSA8LSB0YWJsZShTJG1hcml0YWxfc3RhdHVzLCBTJHNtb2tlKQ0KbQ0KcHJvcC50YWJsZShtKQ0KYmFycGxvdChtLCBiZXNpZGU9VCwgbGVnZW5kPVQpDQpgYGANCg0KVGjDtG5nIHF1YSBr4bq/dCBxdeG6oyB0csOqbiB0YSB0aOG6pXkNCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pICdraMO0bmcgaMO6dCB0aHXhu5FjJyBjw7MgMTAzIG5nxrDhu51pIMSRw6MgbHkgaMO0biAoNiwwOSUpLCA2NjkgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuICgzOSw1NiUpLCA0NiBuZ8aw4budaSDEkcOjIGx5IHRow6JuICgyLDcyJSksIDI2OSBuZ8aw4budaSBjw7JuIMSR4buZYyB0aMOibiAoMTUsOTElKSB2w6AgMTgzIG5nxrDhu51pIGzDoCBnw7NhIHbhu6MvY2jhu5NuZyAoMTAsODIlKS4NCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pICdjw7MgaMO6dCB0aHXhu5FjJyBjw7MgNTggbmfGsOG7nWkgxJHDoyBseSBow7RuICgzLjQzJSksIDE0MyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gKDgsNDYlKSwgMjIgbmfGsOG7nWkgxJHDoyBseSB0aMOibiAoMSwzJSksIDE1OCBuZ8aw4budaSBjw7JuIMSR4buZYyB0aMOibiAoOSwzNCUpIHbDoCA0MCBuZ8aw4budaSBsw6AgZ8OzYSB24bujL2No4buTbmcgKDIsMzclKS4NCg0KIyAqKjMuIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cqKg0KDQpU4bu3IGzhu4cgbmfGsOG7nWkgY8OzIGjDunQgdGh14buRYyBsw6AgMC4yNDg5NyB2w6Aga2jDtG5nIGjDunQgdGh14buRYyBsw6AgMC43NTEwMy4NCg0KIyMjIMav4bubYyBsxrDhu6NuZyB24bubaSBnaeG7m2kgdMOtbmggbuG7rw0KDQogICoqxq/hu5tjIGzGsMahbmcgdOG7tyBs4buHIG5nxrDhu51pIGPDsyBow7p0IHRodeG7kWMgY8OzIGdp4bubaSB0w61uaCBsw6AgbuG7ryBjw7MgdGjhu7FjIHPhu7EgY2hp4bq/bSAxMyw4NCUga2jDtG5nKioNCg0KYGBge3J9DQp5ZiA8LSB0YWJsZShTW1Mkc21va2UgPT0gIlllcyIsIF0kZ2VuZGVyKQ0KeWYgDQpgYGANCg0KYGBge3J9DQpwcm9wLnRlc3QoeWZbIkZlbWFsZSJdLCBzdW0oeWYpLCBwID0gMC4xMzg0KQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLDA1LCB0YSBjw7MgdGjhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBuZ8aw4budaSBjw7MgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG7hu68gY2hp4bq/bSAxMyw4NCUuDQoNCiAgKirGr+G7m2MgbMawxqFuZyB04bu3IGzhu4cgbmfGsOG7nWkga2jDtG5nIGjDunQgdGh14buRYyBjw7MgZ2nhu5tpIHTDrW5oIGzDoCBu4buvIGPDsyB0aOG7sWMgc+G7sSBjaGnhur9tIDQzLDIzJSBraMO0bmcqKg0KDQpgYGB7cn0NCm5mIDwtIHRhYmxlKFNbUyRzbW9rZSA9PSAiTm8iLCBdJGdlbmRlcikNCm5mDQpgYGANCmBgYHtyfQ0KcHJvcC50ZXN0KG5mWyJGZW1hbGUiXSwgc3VtKG5mKSwgcCA9IDAuNDMyMykNCmBgYA0KVsOsIHBfdmFsdWUgPSAyLjJlLTE2IDwgMCwwNSwgdGEgY8OzIHRo4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cgbmfGsOG7nWkga2jDtG5nIGjDunQgdGh14buRYyBjw7MgZ2nhu5tpIHTDrW5oIGzDoCBu4buvIGNoaeG6v20gMTMsODQlLg0KDQojIyMgxq/hu5tjIGzGsOG7o25nIHbhu5tpIGdp4bubaSB0w61uaCBuYW0NCg0KICAqKsav4bubYyBsxrDGoW5nIHThu7cgbOG7hyBuZ8aw4budaSBjw7MgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG5hbSBjw7MgdGjhu7FjIHPhu7EgY2hp4bq/bSAxMSwwNSUga2jDtG5nKioNCiAgDQpgYGB7cn0NCnltIDwtIHRhYmxlKFNbUyRzbW9rZSA9PSAiWWVzIiwgXSRnZW5kZXIpDQp5bQ0KYGBgDQpgYGB7cn0NCnByb3AudGVzdCh5bVsiTWFsZSJdLCBzdW0oeW0pLCBwID0gMC4xMTA1KQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLDA1LCB0YSBjw7MgdGjhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBuZ8aw4budaSBjw7MgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG5hbSBjaGnhur9tIDExLDA1JS4NCg0KICAqKsav4bubYyBsxrDGoW5nIHThu7cgbOG7hyBuZ8aw4budaSBraMO0bmcgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG5hbSBjw7MgdGjhu7FjIHPhu7EgY2hp4bq/bSAzMSw4NyUga2jDtG5nKioNCg0KYGBge3J9DQpubSA8LSB0YWJsZShTW1Mkc21va2UgPT0gIk5vIiwgXSRnZW5kZXIpDQpubQ0KYGBgDQpgYGB7cn0NCnByb3AudGVzdChubVsiTWFsZSJdLCBzdW0obm0pLCBwID0gMC4zMTg3KQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDcuOTg1ZS0xNiA8IDAsMDUsIHRhIGPDsyB0aOG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgdOG7tyBs4buHIG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMgY8OzIGdp4bubaSB0w61uaCBsw6AgbmFtIGNoaeG6v20gMzEsODclLg0KDQojICoqNC4gUmVsYXRpdmUgUmlzayoqDQoNCmBgYHtyfQ0KYWRkbWFyZ2lucyhuKQ0KUmVsUmlzayhuKQ0KYGBgDQotICAgbiA+IDEgKDEuMDIwMzI0KSBjaG8gdGjhuqV5IHLhurFuZyBuaMOzbSBuZ8aw4budaSBjw7MgZ2nhu5tpIHTDrW5oIGzDoCBuYW0gY8OzIHh1IGjGsOG7m25nIGjDunQgdGh14buRYyBjYW8gaMahbiBzbyB24bubaSBuaMOzbSBu4buvLg0KDQojICoqNS4gT2RkIFJhdGlvKioNCg0KYGBge3J9DQpPZGRzUmF0aW8obikNCmBgYA0KDQpgYGB7cn0NCm9kZHNyYXRpbyhuKQ0KYGBgDQotICAgVOG7tyBs4buHIGNow6puaCAoMS4wODM4MTMpID4gMTogdGjhu4MgaGnhu4duIGto4bqjIG7Eg25nIGtow7RuZyBow7p0IHRodeG7kWMg4bufIG5ow7NtIGdp4bubaSB0w61uaCBu4buvIGNhbyBoxqFuIG5ow7NtIGdp4bubaSB0w61uaCBuYW0gZ+G6pXAgMS4wODM4MTMgbOG6p24uDQoNCi0gICBUcm9uZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlLCBLaOG6oyBuxINuZyBow7p0IHRodeG7kWMg4bufIGdp4bubaSB0w61uaCBuYW0gdOG7qyAwLjg2NzM5MzcgxJHhur9uIDEuMzUzMjIyIHbhu5tpIHRpw6p1IGNodeG6qW4gbMOgIDEuMDgzODc4Lg0K