Tài liệu buổi thực hành ngày 15/9/2021: Xử lý số liệu thô với R: Bộ số liệu Điều tra mức sống dân cư 2018

Speaker: TS. Nguyễn Thị Nhung, Đại học Thăng Long và

TS. Trịnh Thị Hường, Trường ĐH Thương Mại

Chi tiết tại: https://sites.google.com/view/tkud/home?authuser=1

Tài liệu thực hành có thể download tại đây. (Chọn chuột phải tại chữ “tại đây”, chọn open new tab)

Hoặc copy link này: https://drive.google.com/drive/folders/1VN2TMp-jOk-6NIZcx845Rgv4GqKTcg7s?usp=sharing

TÓM TẮT: Trong quá trình tiến hành một nghiên cứu khoa học thực nghiệm, xử lý số liệu thô là một bước bắt buộc và quan trọng. Quá trình xử lý thô số liệu sẽ xử lý các “lỗi” trong quá trình thu thập số liệu, tổng hợp câu trả lời thành các biến để phục vụ câu hỏi nghiên cứu. Đồng thời, quá trình này cũng bao gồm quá trình ghép nối số liệu từ các nguồn khác nhau. Chúng tôi minh họa quá trình xử lý thô trong chủ đề nghiên cứu “Yếu tố ảnh hưởng đến chi tiêu cho giáo dục” tại Việt Nam, trên bộ số liệu Điều tra mức sống dân cư 2018. Phần mềm R được sử dụng để tiến hành các bước xử lý thô để chuẩn bị cho quá trình tiến hành nghiên cứu. Một số thống kê mô tả từ bộ số liệu sạch cũng được minh họa.

1. Tìm hiểu chủ đề nghiên cứu

Chúng tôi mô phỏng lại quá trình tiến hành xử lý số liệu thô của bài nghiên cứu: Ngoan, Ngô Thị, Nguyễn Thị Tuyết Mai, Đàm Thị Thu Trang, and Trịnh Thị Hường. “NGHIÊN CỨU CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN VIỆC CHI TIÊU CHO GIÁO DỤC CỦA HỘ GIA ĐÌNH TẠI CÁC TỈNH ĐỒNG BẰNG SÔNG HỒNG.” TNU Journal of Science and Technology 226, no. 04 (2021): 53-61.

Link bài báo tại: http://jst.tnu.edu.vn/jst/article/view/4084.

2. Tìm hiểu sơ lược về bộ số liệu điều tra mức sống dân cư VHLSS

  • Toàn văn Kết quả Khảo sát mức sống dân cư Việt Nam năm 2018 tại https://www.gso.gov.vn/wp-content/uploads/2020/05/VHLSS2018.pdf

  • Bảng hỏi và data sử dụng trong nghiên cứu tại Google driver chia sẻ ở trên.

  • File Rscript chuẩn bị cho buổi trình bày đã được tải lên trên folder Google driver, quý đại biểu có thể tải các file Rscript và chạy thử nghiệm.

3. Xử lý dữ liệu trên R, gói dplyr

Gói dplyr, hay gói tổng hợp tidyverse cung cấp nhiều hàm thuận lợi trong quá trình xử lý thô.

Link hướng dẫn có thể download tại đây (Chọn chuột phải tại chữ “tại đây”, chọn open new tab)

Tại link này: https://drive.google.com/file/d/1USPBCVHmzBgkezYb_em0d79ww_uChFL_/view

4. Lọc bộ ≈ 9000 hộ, rà soát tiếng Việt, tạo ID hộ Tieng Việt và tạo ID hộ

setwd("D:/Tap huan VIASM/Chuoi Seminar/Huong Trinh/15Sept")
require(tidyverse)
require(readstata13)
require(stringi)

#=====================HO1.dta==================================
HO1 <- read.dta13("HO1.dta")
#headHO1)
levels(HO1$tinh) <- c("01","02", "04",  "06", "08", "10", "11","12" , "14",  "15",
                          "17", "19", "20",  "22", "24","25", "26", "27", "30", "31","33","34",
                          "35",  "36", "37", "38","40", "42", "44", "45", "46", "48",  "49", "51",
                          "52","54","56", "58","60", "62","64","66","67","68",
                          "70","72","74","75","77", "79","80", "82", "83","84","86",
                          "87","89","91","92","93", "94", "95","96")
#headHO1 %>% select(tinh, huyen, xa, diaban, hoso))
HO1 <- HO1 %>% mutate(ID = paste(tinh, huyen, xa, diaban, hoso, sep = "_"))
#headHO1$ID)

HO1 %>% select(ID) %>% head()
##                   ID
## 1 96_973_32239_19_13
## 2 96_973_32239_19_14
## 3 96_973_32239_19_15
## 4    02_24_691_15_13
## 5    02_24_691_15_14
## 6    02_24_691_15_15
save(HO1, file="HO1.RData")

#=====================HO3.dta==================================
HO3 <- read.dta13("HO3.dta")

#headHO3)
unique(HO3$tinh)[1:5]
## [1] T<U+1EC9>nh Cà Mau T<U+1EC9>nh Hà Giang T<U+1EC9>nh Cao B<U+1EB1>ng T<U+1EC9>nh B<U+1EAF>c K<U+1EA1>n
## [5] T<U+1EC9>nh Tuyên Quang
## 63 Levels: Thành ph<U+1ED1> Hà N<U+1ED9>i T<U+1EC9>nh Hà Giang T<U+1EC9>nh Cao B<U+1EB1>ng ... T<U+1EC9>nh Cà Mau
HO3 <- HO3 %>% 
  mutate( tentinh = stri_trans_general(tinh, 'latin-ascii'))

HO3 <- HO3 %>% mutate(tentinh = str_remove_all(tentinh, "Tinh "),
                      tentinh = str_remove_all(tentinh, "Thanh pho "))

unique(HO3$tentinh)[1:5]
## [1] "Ca Mau"      "Ha Giang"    "Cao Bang"    "Bac Kan"     "Tuyen Quang"
levels(HO3$tinh) <- c("01","02", "04",  "06", "08", "10", "11","12" , "14",  "15",
                          "17", "19", "20",  "22", "24","25", "26", "27", "30", "31","33","34",
                          "35",  "36", "37", "38","40", "42", "44", "45", "46", "48",  "49", "51",
                          "52","54","56", "58","60", "62","64","66","67","68",
                          "70","72","74","75","77", "79","80", "82", "83","84","86",
                          "87","89","91","92","93", "94", "95","96" )

HO3 <- HO3 %>% 
  mutate(ID = paste(tinh, huyen, xa, diaban, hoso, sep = "_"))

HO3 <- HO3 %>% filter(ID %in% HO1$ID)

save(HO3, file="HO3.RData")


#=====================Muc1A.dta==================================
Muc1A <- read.dta13("Muc1A.dta")
head(Muc1A)
##                 tinh huyen    xa diaban hoso m1ama     m1ac2
## 1 T<U+1EC9>nh Cà Mau   973 32239     19    1     1 N<U+1EEF>
## 2 T<U+1EC9>nh Cà Mau   973 32239     19    1     2       Nam
## 3 T<U+1EC9>nh Cà Mau   973 32239     19    1     3       Nam
## 4 T<U+1EC9>nh Cà Mau   973 32239     19    1     4       Nam
## 5 T<U+1EC9>nh Cà Mau   973 32239     19    1     5       Nam
## 6 T<U+1EC9>nh Cà Mau   973 32239     19    3     1       Nam
##                          m1ac3 m1ac4a m1ac4b m1ac5 m1ac6 m1ac7a m1ac7b m1ac7c
## 1         Ch<U+1EE7> h<U+1ED9>      9   1958    60  <NA>     NA     NA     NA
## 2       V<U+1EE3>/ch<U+1ED3>ng      1   1954    64  <NA>     NA     NA     NA
## 3 Cháu n<U+1ED9>i ngo<U+1EA1>i      8   1997    21  <NA>     NA     NA     NA
## 4 Cháu n<U+1ED9>i ngo<U+1EA1>i      3   1999    19  <NA>     NA     NA     NA
## 5 Cháu n<U+1ED9>i ngo<U+1EA1>i      3   2003    15    Có      0      0      2
## 6         Ch<U+1EE7> h<U+1ED9>      5   1963    55  <NA>     NA     NA     NA
##                            m1ac8 m1ac9 m1ac10 m1ama1             m1ac11
## 1 Ðang có v<U+1EE3>/ch<U+1ED3>ng    10   <NA>      1 T<U+1EC9>nh Cà Mau
## 2 Ðang có v<U+1EE3>/ch<U+1ED3>ng    10   <NA>      2 T<U+1EC9>nh Cà Mau
## 3    Chua v<U+1EE3>/ch<U+1ED3>ng    10   <NA>      3 T<U+1EC9>nh Cà Mau
## 4    Chua v<U+1EE3>/ch<U+1ED3>ng    10   <NA>      4 T<U+1EC9>nh Cà Mau
## 5    Chua v<U+1EE3>/ch<U+1ED3>ng    10   <NA>      5 T<U+1EC9>nh Cà Mau
## 6                            Goá    12   <NA>      1 T<U+1EC9>nh Cà Mau
##                   m1ac12 m1ac13 m1ac14a m1ac14b m1ac15a m1ac15b m1ac15c m1ac15d
## 1 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
## 2 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
## 3 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
## 4 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
## 5 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
## 6 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
##   m1ac16                      m1ac1
## 1     Có         d<U+1EB7>ng thu hà
## 2     Có   h<U+1ED3> van l<U+1EAF>m
## 3     Có       lâm van cu<U+1EDD>ng
## 4     Có         lâm van b<U+1EA3>o
## 5     Có        lâm van du<U+1EE3>c
## 6  Không ph<U+1EA1>m van d<U+1EA1>n
levels(Muc1A$tinh)<-c("01","02", "04",  "06", "08", "10", "11","12" , "14",  "15",
                          "17", "19", "20",  "22", "24","25", "26", "27", "30", "31","33","34",
                          "35",  "36", "37", "38","40", "42", "44", "45", "46", "48",  "49", "51",
                          "52","54","56", "58","60", "62","64","66","67","68",
                          "70","72","74","75","77", "79","80", "82", "83","84","86",
                          "87","89","91","92","93", "94", "95","96" )
Muc1A  <- Muc1A  %>%
  mutate(ID = paste(tinh, huyen, xa, diaban, hoso, sep = "_"))

Muc1A <- Muc1A %>% filter(ID %in% HO1$ID)

levels(Muc1A$m1ac2) <- c("Male","Female")
levels(Muc1A$m1ac3) <- c("head","spouse","children","parents","grandparents","grandchildren","other","NA")
levels(Muc1A$m1ac6) <- c("Yes","No","NA")
levels(Muc1A$m1ac8) <- c("Single","Married","Widowed","Divorced","Separated","NA")

save(Muc1A, file="Muc1A.RData")


#=====================MUC2X.dta==================================
MUC2X <- read.dta13("MUC2X.dta")
head(MUC2X, 2)
##                 tinh huyen    xa diaban hoso m2xma m2xc1
## 1 T<U+1EC9>nh Cà Mau   973 32239     19   13     1    12
## 2 T<U+1EC9>nh Cà Mau   973 32239     19   13     2     5
##                      m2xc2a m2xc2b           m2xc3 m2xc4 m2xc5 m2xc6 m2xc7
## 1                      THPT  Không Công l<U+1EAD>p Không Không  <NA>    NA
## 2 K0 b<U+1EB1>ng c<U+1EA5>p  Không  Tu th<U+1EE5>c Không Không  <NA>    NA
##   m2xc8 m2xma1 m2xc9 m2xc10a m2xc10b m2xc10a1 m2xc10a2 m2xc11a m2xc11b m2xc11c
## 1  <NA>      1  <NA>      NA      NA       NA       NA      NA      NA      NA
## 2  <NA>      2  <NA>      NA      NA       NA       NA      NA      NA      NA
##   m2xc11d m2xc11e m2xc11f m2xc11g m2xc11h m2xc11i m2xc11k m2xma2 m2xc12 m2xc13
## 1      NA      NA      NA      NA      NA      NA      NA      1   <NA>     NA
## 2      NA      NA      NA      NA      NA      NA      NA      2   <NA>     NA
##   m2xc14 m2xc15 m2xc16 m2xc17 m2xc18a m2xc18b m2xc19
## 1     NA     NA     NA      0    <NA>    <NA>     NA
## 2     NA     NA     NA      0    <NA>    <NA>     NA
MUC2X <- MUC2X %>% 
  mutate( tentinh = stri_trans_general(tinh, 'latin-ascii'))

MUC2X <- MUC2X %>% mutate(tentinh = str_remove_all(tentinh, "Tinh "),
                      tentinh = str_remove_all(tentinh, "Thanh pho "))
levels(MUC2X$tinh) <- c("01","02", "04",  "06", "08", "10", "11","12" , "14",  "15",
                            "17", "19", "20",  "22", "24","25", "26", "27", "30", "31","33","34",
                            "35",  "36", "37", "38","40", "42", "44", "45", "46", "48",  "49", "51",
                            "52","54","56", "58","60", "62","64","66","67","68",
                            "70","72","74","75","77", "79","80", "82", "83","84","86",
                            "87","89","91","92","93", "94", "95","96" )
MUC2X  <- MUC2X  %>% mutate(ID = paste(tinh, huyen, xa, diaban, hoso, sep = "_"))

MUC2X <- MUC2X[which(MUC2X$ID %in% HO1$ID), ]
save(MUC2X, file="MUC2X.RData")


#=====================chitieu.dta==================================
chitieu <- read.dta13("chitieu.dta")
head(chitieu,2)
##                     tinh huyen xa diaban hoso chi_letet chi_thuongxuyen  wt9
## 1 Th<e0>nh ph? H<e0> N?i     1  4     21   13      9103            6569 6176
## 2 Th<e0>nh ph? H<e0> N?i     1  4     21   15      7671            8893 6176
##   tongchitieu tongchi_bq tongchi_gd tongchi_yte
## 1    178762.5   4965.625       6930        1925
## 2    177719.5   3702.490       6250       18621
levels(chitieu$tinh) <- c("01","02", "04",  "06", "08", "10", "11","12" , "14",  "15",
                              "17", "19", "20",  "22", "24","25", "26", "27", "30", "31","33","34",
                              "35",  "36", "37", "38","40", "42", "44", "45", "46", "48",  "49", "51",
                              "52","54","56", "58","60", "62","64","66","67","68",
                              "70","72","74","75","77", "79","80", "82", "83","84","86",
                              "87","89","91","92","93", "94", "95","96" )
chitieu  <- chitieu %>% mutate(ID = paste(tinh, huyen, xa, diaban, hoso, sep = "_"))

save(chitieu, file="chitieu.RData")


#=====================Muc4a.dta==================================
Muc4a <- read.dta13("Muc4a.dta")
head(Muc4a, 2)
##                 tinh huyen    xa diaban hoso m4ama m4ac1a m4ac1b m4ac1c m4ac2
## 1 T<U+1EC9>nh Cà Mau   973 32239     19    1     1  Không     Có  Không    Có
## 2 T<U+1EC9>nh Cà Mau   973 32239     19    1     2  Không     Có  Không    Có
##   m4ac2a m4ac3a m4ac3 m4ac4 m4ac5 m4ac6 m4ac7 m4ama1                m4ac8a
## 1   <NA>    240    92     3    Có     8     3      1 H<U+1ED9> NLT/cá nhân
## 2   <NA>    290    92     3    Có    10     6      2 H<U+1ED9> NLT/cá nhân
##   m4ac8b m4ac9 m4ac10 m4ac11 m4ac12a m4ac12b m4ac13a m4ac13b m4ac13c
## 1   <NA> Không     NA     NA      NA      NA    <NA>    <NA>    <NA>
## 2   <NA> Không     NA     NA      NA      NA    <NA>    <NA>    <NA>
##                           m4ac14 m4ama2 m4ac15 m4ac16 m4ac17 m4ac18a m4ac18
## 1 Làm vi<U+1EC7>c t<U+1EA1>i nhà      1     NA     NA  Không      NA     NA
## 2                   Ði b<U+1ED9>      2     NA      3  Không      NA     NA
##   m4ac19 m4ac20 m4ama3 m4ac21 m4ac22 m4ac23 m4ac24 m4ac25 m4ac26 m4ac27a
## 1     NA   <NA>      1     NA     NA   <NA>   <NA>     NA     NA      NA
## 2     NA   <NA>      2     NA     NA   <NA>   <NA>     NA     NA      NA
##   m4ac27b m4ama4 m4ac28 m4ac29 m4ac30 m4ac31a m4ac31b m4ac31c m4ac31d m4ac31e
## 1      NA      1   <NA>     NA  Không      NA      NA      NA      NA      NA
## 2      NA      2   <NA>     NA  Không      NA      NA      NA      NA      NA
##          m4ac3m             m4ac4c       m4ac4m m4ac18m m4ac19a m4ac19m
## 1 nuôi tôm, cua d<U+1EB7>ng thu hà tôm, cua, cá                        
## 2 nuôi tôm, cua d<U+1EB7>ng thu hà  tôm cua, cá
levels(Muc4a$tinh) <- c("01","02", "04",  "06", "08", "10", "11","12" , "14",  "15",
                            "17", "19", "20",  "22", "24","25", "26", "27", "30", "31","33","34",
                            "35",  "36", "37", "38","40", "42", "44", "45", "46", "48",  "49", "51",
                            "52","54","56", "58","60", "62","64","66","67","68",
                            "70","72","74","75","77", "79","80", "82", "83","84","86",
                            "87","89","91","92","93", "94", "95","96" )
Muc4a  <- Muc4a %>% mutate(ID = paste(tinh, huyen, xa, diaban, hoso, sep = "_"))

save(Muc4a,file="Muc4a.RData")

5. Rà soát các biến liên quan đặc điểm GIA ĐÌNH và CHỦ HỘ

#=====================1. HO3.dta==================================

load("HO3.RData")
names(HO3)
##  [1] "tinh"    "huyen"   "xa"      "diaban"  "hoso"    "thunhap" "thubq"  
##  [8] "tongthu" "chisxkd" "chikhac" "tentinh" "ID"
head(HO3, 2)
##   tinh huyen    xa diaban hoso thunhap thubq tongthu chisxkd chikhac tentinh
## 1   96   973 32239     19   13   62990  1749   63000       0       0  Ca Mau
## 2   96   973 32239     19   13   51000    NA       0       0       0  Ca Mau
##                   ID
## 1 96_973_32239_19_13
## 2 96_973_32239_19_13
#thubq: thu binh quan nguoi/thang (nghin dong)
#tongthu: tong thu nhap ho gia dinh/nam (nghin dong)
HO3 <- HO3 %>% filter(is.na(thubq) == FALSE)
HO3 <- HO3 %>%  select(ID, tinh, tentinh, thubq,  tongthu ) %>% unique()
summary(HO3)
##       ID                 tinh        tentinh              thubq       
##  Length:9168        79     : 351   Length:9168        Min.   :  -440  
##  Class :character   01     : 315   Class :character   1st Qu.:  1749  
##  Mode  :character   38     : 246   Mode  :character   Median :  2910  
##                     40     : 225                      Mean   :  3610  
##                     75     : 207                      3rd Qu.:  4407  
##                     36     : 195                      Max.   :129884  
##                     (Other):7629                                      
##     tongthu        
##  Min.   :    2800  
##  1st Qu.:   81842  
##  Median :  143762  
##  Mean   :  229608  
##  3rd Qu.:  241024  
##  Max.   :73383606  
## 
HO3 <- HO3 %>% filter(thubq > 0) # delete 2 observations

#=====================2. Muc1A.dta==================================

load("Muc1A.RData")
head(Muc1A, 2)
##   tinh huyen    xa diaban hoso m1ama  m1ac2   m1ac3 m1ac4a m1ac4b m1ac5 m1ac6
## 1   96   973 32239     19   13     1   Male    head      1   1974    44  <NA>
## 2   96   973 32239     19   13     2 Female parents      1   1933    85  <NA>
##   m1ac7a m1ac7b m1ac7c   m1ac8 m1ac9 m1ac10 m1ama1             m1ac11
## 1     NA     NA     NA Married    12   <NA>      1 T<U+1EC9>nh Cà Mau
## 2     NA     NA     NA Widowed    12   <NA>      2 T<U+1EC9>nh Cà Mau
##                   m1ac12 m1ac13 m1ac14a m1ac14b m1ac15a m1ac15b m1ac15c m1ac15d
## 1 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
## 2 Trong xã phu<U+1EDD>ng   <NA>      NA      NA   Không   Không   Không   Không
##   m1ac16                       m1ac1                 ID
## 1     Có        nguy<U+1EC5>n út anh 96_973_32239_19_13
## 2  Không tr<U+1EA7>n th<U+1ECB> phèn 96_973_32239_19_13
#==================Lay cac bien sau:

#GIOITINH_CH : m1ac2
#TUOI_CH :m1ac5
#HONNHAN_CH : m1ac8
summary(Muc1A$m1ac3 )
##          head        spouse      children       parents  grandparents 
##          9168          7092         13163           955            32 
## grandchildren         other            NA 
##          3247           580             0
Muc1A %>% filter(m1ac3 == "head") %>% 
  select(m1ama) %>% summary()
##      m1ama  
##  Min.   :1  
##  1st Qu.:1  
##  Median :1  
##  Mean   :1  
##  3rd Qu.:1  
##  Max.   :1
#IMPORTANT NOTE: chu ho = m1ac3 == "head" and ALSO m1ama == 1

Muc1A.head <- Muc1A %>% 
  rename(GIOITINH_CH = m1ac2, TUOI_CH =m1ac5, HONNHAN_CH = m1ac8) %>%
  filter(m1ac3 == "head") %>% 
  select(ID, GIOITINH_CH, TUOI_CH, HONNHAN_CH)

head(Muc1A.head, 2)
##                   ID GIOITINH_CH TUOI_CH HONNHAN_CH
## 1 96_973_32239_19_13        Male      44    Married
## 2 96_973_32239_19_14        Male      69    Widowed
#summary(Muc1A.head)
# Drop NA factor in HONNHAN_CH
Muc1A.head <- Muc1A.head %>%
  filter(HONNHAN_CH != "NA") %>% 
  droplevels()
summary(Muc1A.head)
##       ID            GIOITINH_CH      TUOI_CH           HONNHAN_CH  
##  Length:9168        Male  :6841   Min.   : 19.00   Single   : 239  
##  Class :character   Female:2327   1st Qu.: 42.00   Married  :7296  
##  Mode  :character                 Median : 52.00   Widowed  :1317  
##                                   Mean   : 52.28   Divorced : 253  
##                                   3rd Qu.: 61.00   Separated:  63  
##                                   Max.   :101.00
GIAODUC18 <- left_join(HO3, Muc1A.head) # DONE
head(GIAODUC18, 2)
##                   ID tinh tentinh thubq tongthu GIOITINH_CH TUOI_CH HONNHAN_CH
## 1 96_973_32239_19_13   96  Ca Mau  1749   63000        Male      44    Married
## 2 96_973_32239_19_14   96  Ca Mau  1199   69100        Male      69    Widowed
levels(GIAODUC18$HONNHAN_CH) <- c("Other",    "Married" , 
                                  "Other",   "Other", 
                                  "Other",   "Other"  )

summary(GIAODUC18)
##       ID                 tinh        tentinh              thubq       
##  Length:9166        79     : 351   Length:9166        Min.   :    10  
##  Class :character   01     : 315   Class :character   1st Qu.:  1749  
##  Mode  :character   38     : 246   Mode  :character   Median :  2911  
##                     40     : 225                      Mean   :  3611  
##                     75     : 207                      3rd Qu.:  4408  
##                     36     : 195                      Max.   :129884  
##                     (Other):7627                                      
##     tongthu         GIOITINH_CH      TUOI_CH         HONNHAN_CH  
##  Min.   :    2800   Male  :6839   Min.   : 19.00   Other  :1872  
##  1st Qu.:   81835   Female:2327   1st Qu.: 42.00   Married:7294  
##  Median :  143762                 Median : 52.00                 
##  Mean   :  229585                 Mean   : 52.29                 
##  3rd Qu.:  241008                 3rd Qu.: 61.00                 
##  Max.   :73383606                 Max.   :101.00                 
## 
Muc1A.head <- NULL
#==================3.  HO1.RData============================

#==================Lay cac bien sau:
#DANTOC_CH; "Kinh", "Minority"
#NOISONG: "URBAN","RURAL"
#TSNGUOI: so thanh vien ho
load("HO1.RData")
head(HO1, 2)
##                              vung tinh huyen    xa diaban hoso
## 1 Ä\220ồng bằng sông Cá»­u Long   96   973 32239     19   13
## 2 Ä\220ồng bằng sông Cá»­u Long   96   973 32239     19   14
##               quyen tsphieu        ttnt dantoc phdich dtv dt ngaydt thangdt
## 1 1B-/KSMS-QSG18-HO       1 Nông thôn      1 Không  29 10     11      12
## 2 1B-/KSMS-QSG18-HO       1 Nông thôn      1 Không  29 10     12      12
##   namdt tsnguoi tinh16 huyen16 xa16 diaban16 ttnt16 hoso16 ky   m1b1 tsmuc1b
## 1  2018       3      0      NA   NA       NA   <NA>     NA  4 Không      NA
## 2  2018       4      0      NA   NA       NA   <NA>     NA  4 Không      NA
##     m1c1 tsmuc1c m2dct m2xct m2vct m2xtn m2vtn m3c1g m3ct1 m3ct2 m3ct3 m3c13
## 1 Không      NA    NA     0    NA     0    NA   Có    60  3000     0   600
## 2 Không      NA    NA     0    NA     0    NA   Có     0 19000     0     0
##   m3c14 m3c15  m3ct m3tn test         loaiphieu                 ID
## 1     0     0  3660    0    2 1B-/KSMS-QSG18-HO 96_973_32239_19_13
## 2     0     0 19000    0    2 1B-/KSMS-QSG18-HO 96_973_32239_19_14
HO1 <- HO1 %>% rename(NOISONG = ttnt, DANTOC_CH = dantoc, TSNGUOI = tsnguoi ) %>%
  select(ID, NOISONG, DANTOC_CH, TSNGUOI)

HO1 <- HO1 %>%   mutate(DANTOC_CH = as.factor(ifelse(DANTOC_CH == 1, "Kinh", "Minority")))
  
levels(HO1$NOISONG) <- c("URBAN","RURAL")

names(GIAODUC18)
## [1] "ID"          "tinh"        "tentinh"     "thubq"       "tongthu"    
## [6] "GIOITINH_CH" "TUOI_CH"     "HONNHAN_CH"
names(HO1)
## [1] "ID"        "NOISONG"   "DANTOC_CH" "TSNGUOI"
GIAODUC18  <- left_join(GIAODUC18, HO1)
names(GIAODUC18)
##  [1] "ID"          "tinh"        "tentinh"     "thubq"       "tongthu"    
##  [6] "GIOITINH_CH" "TUOI_CH"     "HONNHAN_CH"  "NOISONG"     "DANTOC_CH"  
## [11] "TSNGUOI"
summary(GIAODUC18 )
##       ID                 tinh        tentinh              thubq       
##  Length:9166        79     : 351   Length:9166        Min.   :    10  
##  Class :character   01     : 315   Class :character   1st Qu.:  1749  
##  Mode  :character   38     : 246   Mode  :character   Median :  2911  
##                     40     : 225                      Mean   :  3611  
##                     75     : 207                      3rd Qu.:  4408  
##                     36     : 195                      Max.   :129884  
##                     (Other):7627                                      
##     tongthu         GIOITINH_CH      TUOI_CH         HONNHAN_CH    NOISONG    
##  Min.   :    2800   Male  :6839   Min.   : 19.00   Other  :1872   URBAN:2747  
##  1st Qu.:   81835   Female:2327   1st Qu.: 42.00   Married:7294   RURAL:6419  
##  Median :  143762                 Median : 52.00                              
##  Mean   :  229585                 Mean   : 52.29                              
##  3rd Qu.:  241008                 3rd Qu.: 61.00                              
##  Max.   :73383606                 Max.   :101.00                              
##                                                                               
##     DANTOC_CH       TSNGUOI      
##  Kinh    :7523   Min.   : 1.000  
##  Minority:1643   1st Qu.: 3.000  
##                  Median : 4.000  
##                  Mean   : 3.734  
##                  3rd Qu.: 5.000  
##                  Max.   :15.000  
## 
#==================3. Muc4a.RData============================
#-----------------Nghe nghiep chu ho
#LAMCONGANLUONG 
#NONGLAMTHUYSAN 
#KINHDOANHDICHVU 

load("Muc4a.RData")
head(Muc4a, 2)
##   tinh huyen    xa diaban hoso m4ama m4ac1a m4ac1b m4ac1c m4ac2 m4ac2a m4ac3a
## 1   96   973 32239     19    1     1  Không     Có  Không    Có   <NA>    240
## 2   96   973 32239     19    1     2  Không     Có  Không    Có   <NA>    290
##   m4ac3 m4ac4 m4ac5 m4ac6 m4ac7 m4ama1                m4ac8a m4ac8b m4ac9
## 1    92     3    Có     8     3      1 H<U+1ED9> NLT/cá nhân   <NA> Không
## 2    92     3    Có    10     6      2 H<U+1ED9> NLT/cá nhân   <NA> Không
##   m4ac10 m4ac11 m4ac12a m4ac12b m4ac13a m4ac13b m4ac13c
## 1     NA     NA      NA      NA    <NA>    <NA>    <NA>
## 2     NA     NA      NA      NA    <NA>    <NA>    <NA>
##                           m4ac14 m4ama2 m4ac15 m4ac16 m4ac17 m4ac18a m4ac18
## 1 Làm vi<U+1EC7>c t<U+1EA1>i nhà      1     NA     NA  Không      NA     NA
## 2                   Ði b<U+1ED9>      2     NA      3  Không      NA     NA
##   m4ac19 m4ac20 m4ama3 m4ac21 m4ac22 m4ac23 m4ac24 m4ac25 m4ac26 m4ac27a
## 1     NA   <NA>      1     NA     NA   <NA>   <NA>     NA     NA      NA
## 2     NA   <NA>      2     NA     NA   <NA>   <NA>     NA     NA      NA
##   m4ac27b m4ama4 m4ac28 m4ac29 m4ac30 m4ac31a m4ac31b m4ac31c m4ac31d m4ac31e
## 1      NA      1   <NA>     NA  Không      NA      NA      NA      NA      NA
## 2      NA      2   <NA>     NA  Không      NA      NA      NA      NA      NA
##          m4ac3m             m4ac4c       m4ac4m m4ac18m m4ac19a m4ac19m
## 1 nuôi tôm, cua d<U+1EB7>ng thu hà tôm, cua, cá                        
## 2 nuôi tôm, cua d<U+1EB7>ng thu hà  tôm cua, cá                        
##                  ID
## 1 96_973_32239_19_1
## 2 96_973_32239_19_1
length(unique(Muc4a$ID))
## [1] 45839
Muc4a <- Muc4a %>% filter(ID %in% GIAODUC18$ID)
  
# m4ama = 1 chu ho
Muc4a <- Muc4a %>% filter(m4ama == 1 & ID %in% GIAODUC18$ID) %>% 
  rename(LAMCONGANLUONG = m4ac1a, NONGLAMTHUYSAN = m4ac1b ,
         KINHDOANHDICHVU =m4ac1c) %>%
  select(ID, LAMCONGANLUONG, NONGLAMTHUYSAN, KINHDOANHDICHVU )

levels(Muc4a$LAMCONGANLUONG) <- c("Yes", "No")
levels(Muc4a$NONGLAMTHUYSAN) <- c("Yes", "No")
levels(Muc4a$KINHDOANHDICHVU) <- c("Yes", "No")

Muc4a <- Muc4a %>%
  mutate(NGHENGHIEP_CH = case_when(LAMCONGANLUONG == "Yes" ~ "LAMCONGANLUONG",
                                   NONGLAMTHUYSAN == "Yes" ~ "NONGLAMTHUYSAN",
                                   TRUE ~ "KINHDOANHDICHVU")) %>% 
  select(ID, NGHENGHIEP_CH)

GIAODUC18  <- left_join(GIAODUC18, Muc4a )
summary(GIAODUC18)
##       ID                 tinh        tentinh              thubq       
##  Length:9166        79     : 351   Length:9166        Min.   :    10  
##  Class :character   01     : 315   Class :character   1st Qu.:  1749  
##  Mode  :character   38     : 246   Mode  :character   Median :  2911  
##                     40     : 225                      Mean   :  3611  
##                     75     : 207                      3rd Qu.:  4408  
##                     36     : 195                      Max.   :129884  
##                     (Other):7627                                      
##     tongthu         GIOITINH_CH      TUOI_CH         HONNHAN_CH    NOISONG    
##  Min.   :    2800   Male  :6839   Min.   : 19.00   Other  :1872   URBAN:2747  
##  1st Qu.:   81835   Female:2327   1st Qu.: 42.00   Married:7294   RURAL:6419  
##  Median :  143762                 Median : 52.00                              
##  Mean   :  229585                 Mean   : 52.29                              
##  3rd Qu.:  241008                 3rd Qu.: 61.00                              
##  Max.   :73383606                 Max.   :101.00                              
##                                                                               
##     DANTOC_CH       TSNGUOI       NGHENGHIEP_CH     
##  Kinh    :7523   Min.   : 1.000   Length:9166       
##  Minority:1643   1st Qu.: 3.000   Class :character  
##                  Median : 4.000   Mode  :character  
##                  Mean   : 3.734                     
##                  3rd Qu.: 5.000                     
##                  Max.   :15.000                     
## 
Muc4a <- NULL



#-------------------------MUC2X.RData: BANGCAP_CH----------------------

load("MUC2X.RData")

names(MUC2X)
##  [1] "tinh"     "huyen"    "xa"       "diaban"   "hoso"     "m2xma"   
##  [7] "m2xc1"    "m2xc2a"   "m2xc2b"   "m2xc3"    "m2xc4"    "m2xc5"   
## [13] "m2xc6"    "m2xc7"    "m2xc8"    "m2xma1"   "m2xc9"    "m2xc10a" 
## [19] "m2xc10b"  "m2xc10a1" "m2xc10a2" "m2xc11a"  "m2xc11b"  "m2xc11c" 
## [25] "m2xc11d"  "m2xc11e"  "m2xc11f"  "m2xc11g"  "m2xc11h"  "m2xc11i" 
## [31] "m2xc11k"  "m2xma2"   "m2xc12"   "m2xc13"   "m2xc14"   "m2xc15"  
## [37] "m2xc16"   "m2xc17"   "m2xc18a"  "m2xc18b"  "m2xc19"   "tentinh" 
## [43] "ID"
#head(MUC2X, 2)
# m2xc2a Bang cap cao nhat

MUC2X.head <- MUC2X %>% filter(m2xma == 1&  ID %in% GIAODUC18$ID ) %>% 
  select(ID,  m2xc2a)

MUC2X.head$m2xc2a <- as.factor(MUC2X.head$m2xc2a)
summary(MUC2X.head$m2xc2a)
##          NR K0 b<U+1EB1>ng c<U+1EA5>p Ti<U+1EC3>u h<U+1ECD>c        THCS        THPT Cao d<U+1EB3>ng 
##           0        1477        2316        2699        1428         120 
## Ð<U+1EA1>i h<U+1ECD>c Th<U+1EA1>c si Ti<U+1EBF>n si        Khác        NA's 
##         573          30           3           3         517
levels(MUC2X.head$m2xc2a)
##  [1] "NR"          "K0 b<U+1EB1>ng c<U+1EA5>p" "Ti<U+1EC3>u h<U+1ECD>c" "THCS"        "THPT"       
##  [6] "Cao d<U+1EB3>ng" "Ð<U+1EA1>i h<U+1ECD>c" "Th<U+1EA1>c si" "Ti<U+1EBF>n si" "Khác"
levels(MUC2X.head$m2xc2a) <- c("No qualification", "No qualification", 
                               "Primary school",  
                               "Secondary-high school",
                               "Secondary-high school",
                                "University", "University",  "University",
                               "University",
                               "No qualification")
summary(MUC2X.head$m2xc2a)
##      No qualification        Primary school Secondary-high school 
##                  1480                  2316                  4127 
##            University                  NA's 
##                   726                   517
MUC2X.head$m2xc2a[is.na(MUC2X.head$m2xc2a)] <- "No qualification"

MUC2X.head <- MUC2X.head %>% rename(BANGCAP_CH = m2xc2a)

GIAODUC18  <- left_join(GIAODUC18, MUC2X.head)
summary(GIAODUC18)
##       ID                 tinh        tentinh              thubq       
##  Length:9166        79     : 351   Length:9166        Min.   :    10  
##  Class :character   01     : 315   Class :character   1st Qu.:  1749  
##  Mode  :character   38     : 246   Mode  :character   Median :  2911  
##                     40     : 225                      Mean   :  3611  
##                     75     : 207                      3rd Qu.:  4408  
##                     36     : 195                      Max.   :129884  
##                     (Other):7627                                      
##     tongthu         GIOITINH_CH      TUOI_CH         HONNHAN_CH    NOISONG    
##  Min.   :    2800   Male  :6839   Min.   : 19.00   Other  :1872   URBAN:2747  
##  1st Qu.:   81835   Female:2327   1st Qu.: 42.00   Married:7294   RURAL:6419  
##  Median :  143762                 Median : 52.00                              
##  Mean   :  229585                 Mean   : 52.29                              
##  3rd Qu.:  241008                 3rd Qu.: 61.00                              
##  Max.   :73383606                 Max.   :101.00                              
##                                                                               
##     DANTOC_CH       TSNGUOI       NGHENGHIEP_CH     
##  Kinh    :7523   Min.   : 1.000   Length:9166       
##  Minority:1643   1st Qu.: 3.000   Class :character  
##                  Median : 4.000   Mode  :character  
##                  Mean   : 3.734                     
##                  3rd Qu.: 5.000                     
##                  Max.   :15.000                     
##                                                     
##                  BANGCAP_CH  
##  No qualification     :1997  
##  Primary school       :2316  
##  Secondary-high school:4127  
##  University           : 726  
##                              
##                              
## 
MUC2X.head <- NULL


#-------------------------MUC2X.RData: SONAMDANGHOC, SONUDANGHOC----------------------
#head(Muc1A)
#-----------Individual ID
Muc1A <- Muc1A %>% mutate(IDind = paste0(ID, "_", m1ama))
head(Muc1A$IDind, 2)
## [1] "96_973_32239_19_13_1" "96_973_32239_19_13_2"
#Muc1A$m1ac2: GIOITINH 

Muc1A.GIOITINH <- Muc1A %>% rename(GIOITINH = m1ac2) %>% 
  select(ID, IDind, GIOITINH)
head(Muc1A.GIOITINH, 2)
##                   ID                IDind GIOITINH
## 1 96_973_32239_19_13 96_973_32239_19_13_1     Male
## 2 96_973_32239_19_13 96_973_32239_19_13_2   Female
#MUC2X$m2xc4: Hien nay co di hoc khong?
#head(MUC2X)
unique(MUC2X$m2xc4)
## [1] Không   <NA>    Có      Ngh<U+1EC9> hè
## Levels: Có Ngh<U+1EC9> hè Không
#summary(MUC2X$m2xc4)
#levels(MUC2X$m2xc4)
levels(MUC2X$m2xc4) <- c("Yes", "Yes", "No")
MUC2X$m2xc4[is.na(MUC2X$m2xc4)] <- "No"
#summary(MUC2X$m2xc4)


#-----------Individual ID
#head(MUC2X)
MUC2X <- MUC2X %>% mutate(IDind = paste0(ID, "_", m2xma))
#head(MUC2X$IDind)
#Kiem tra MUC2X$IDind thuoc Muc1A$IDind
setdiff(MUC2X$IDind, Muc1A$IDind) #DONE
## character(0)
Muc2AB_NAMNU <- MUC2X %>% filter(m2xc4 == "Yes") %>% 
  select(ID, IDind,  m2xc4)

Muc2AB_NAMNU <- left_join(Muc2AB_NAMNU, Muc1A.GIOITINH)
#head(Muc2AB_NAMNU )
#summary(Muc2AB_NAMNU )


Muc2AB_NAMNU_Count <- Muc2AB_NAMNU %>% group_by(ID,  GIOITINH) %>%
  summarise(nvalue = n()) ## Count #SONAMDANGHOC #SONUDANGHOC
#head(Muc2AB_NAMNU_Count)

SONAMDANGHOC <- Muc2AB_NAMNU_Count %>% 
  filter(GIOITINH == "Male") %>% 
  rename(SONAMDANGHOC = nvalue ) %>%
  select(ID, SONAMDANGHOC )

SONUDANGHOC <- Muc2AB_NAMNU_Count %>% 
  filter(GIOITINH == "Female") %>% 
  rename(SONUDANGHOC = nvalue ) %>%
  select(ID, SONUDANGHOC )

GIAODUC18  <- left_join(GIAODUC18, SONAMDANGHOC )
GIAODUC18  <- left_join(GIAODUC18, SONUDANGHOC )
GIAODUC18$SONAMDANGHOC[is.na(GIAODUC18$SONAMDANGHOC)] <- 0
GIAODUC18$SONUDANGHOC[is.na(GIAODUC18$SONUDANGHOC)] <- 0

GIAODUC18 <- GIAODUC18 %>% 
  mutate(songuoidihoc = SONAMDANGHOC + SONUDANGHOC)

GIAODUC18 <- GIAODUC18 %>% mutate(songuoidihocFactor = as.factor(songuoidihoc ))


summary(GIAODUC18)
##       ID                 tinh        tentinh              thubq       
##  Length:9166        79     : 351   Length:9166        Min.   :    10  
##  Class :character   01     : 315   Class :character   1st Qu.:  1749  
##  Mode  :character   38     : 246   Mode  :character   Median :  2911  
##                     40     : 225                      Mean   :  3611  
##                     75     : 207                      3rd Qu.:  4408  
##                     36     : 195                      Max.   :129884  
##                     (Other):7627                                      
##     tongthu         GIOITINH_CH      TUOI_CH         HONNHAN_CH    NOISONG    
##  Min.   :    2800   Male  :6839   Min.   : 19.00   Other  :1872   URBAN:2747  
##  1st Qu.:   81835   Female:2327   1st Qu.: 42.00   Married:7294   RURAL:6419  
##  Median :  143762                 Median : 52.00                              
##  Mean   :  229585                 Mean   : 52.29                              
##  3rd Qu.:  241008                 3rd Qu.: 61.00                              
##  Max.   :73383606                 Max.   :101.00                              
##                                                                               
##     DANTOC_CH       TSNGUOI       NGHENGHIEP_CH     
##  Kinh    :7523   Min.   : 1.000   Length:9166       
##  Minority:1643   1st Qu.: 3.000   Class :character  
##                  Median : 4.000   Mode  :character  
##                  Mean   : 3.734                     
##                  3rd Qu.: 5.000                     
##                  Max.   :15.000                     
##                                                     
##                  BANGCAP_CH    SONAMDANGHOC     SONUDANGHOC    
##  No qualification     :1997   Min.   :0.0000   Min.   :0.0000  
##  Primary school       :2316   1st Qu.:0.0000   1st Qu.:0.0000  
##  Secondary-high school:4127   Median :0.0000   Median :0.0000  
##  University           : 726   Mean   :0.4743   Mean   :0.4655  
##                               3rd Qu.:1.0000   3rd Qu.:1.0000  
##                               Max.   :5.0000   Max.   :5.0000  
##                                                                
##   songuoidihoc    songuoidihocFactor
##  Min.   :0.0000   0:3904            
##  1st Qu.:0.0000   1:2533            
##  Median :1.0000   2:2205            
##  Mean   :0.9398   3: 438            
##  3rd Qu.:2.0000   4:  74            
##  Max.   :6.0000   5:  11            
##                   6:   1
#-----------------------TROCAP
#m2xc9: TROCAP
levels(MUC2X$m2xc9) 
## [1] "Có"   "Khác"
levels(MUC2X$m2xc9) <- c("Yes", "No") 
MUC2X_TROCAP <- MUC2X %>% select(ID, m2xc9) %>% 
  filter(m2xc9 == "Yes" ) %>% unique()
MUC2X_TROCAP <- MUC2X_TROCAP %>% rename(TROCAP = m2xc9)

GIAODUC18 <- left_join(GIAODUC18, MUC2X_TROCAP)
GIAODUC18$TROCAP[is.na(GIAODUC18$TROCAP)] <- "No"
summary(GIAODUC18$TROCAP)
##  Yes   No 
## 2885 6281
#------------------------chitieu.RDATA
load("chitieu.RData")
#head(chitieu)

chitieu <- chitieu %>% mutate(CHIGD = tongchi_gd, 
                              TONGCHIGD = tongchi_gd*100/tongchitieu)



GIAODUC18 <- GIAODUC18 %>% rename(THUBQ = thubq)
GIAODUC18 <- GIAODUC18[which(GIAODUC18$THUBQ >=0), ]

GIAODUC18$tongthu <- NULL
GIAODUC18 <- left_join(GIAODUC18, chitieu %>% select(ID, CHIGD, TONGCHIGD))
summary(GIAODUC18)
##       ID                 tinh        tentinh              THUBQ       
##  Length:9166        79     : 351   Length:9166        Min.   :    10  
##  Class :character   01     : 315   Class :character   1st Qu.:  1749  
##  Mode  :character   38     : 246   Mode  :character   Median :  2911  
##                     40     : 225                      Mean   :  3611  
##                     75     : 207                      3rd Qu.:  4408  
##                     36     : 195                      Max.   :129884  
##                     (Other):7627                                      
##  GIOITINH_CH      TUOI_CH         HONNHAN_CH    NOISONG        DANTOC_CH   
##  Male  :6839   Min.   : 19.00   Other  :1872   URBAN:2747   Kinh    :7523  
##  Female:2327   1st Qu.: 42.00   Married:7294   RURAL:6419   Minority:1643  
##                Median : 52.00                                              
##                Mean   : 52.29                                              
##                3rd Qu.: 61.00                                              
##                Max.   :101.00                                              
##                                                                            
##     TSNGUOI       NGHENGHIEP_CH                      BANGCAP_CH  
##  Min.   : 1.000   Length:9166        No qualification     :1997  
##  1st Qu.: 3.000   Class :character   Primary school       :2316  
##  Median : 4.000   Mode  :character   Secondary-high school:4127  
##  Mean   : 3.734                      University           : 726  
##  3rd Qu.: 5.000                                                  
##  Max.   :15.000                                                  
##                                                                  
##   SONAMDANGHOC     SONUDANGHOC      songuoidihoc    songuoidihocFactor
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   0:3904            
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1:2533            
##  Median :0.0000   Median :0.0000   Median :1.0000   2:2205            
##  Mean   :0.4743   Mean   :0.4655   Mean   :0.9398   3: 438            
##  3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:2.0000   4:  74            
##  Max.   :5.0000   Max.   :5.0000   Max.   :6.0000   5:  11            
##                                                     6:   1            
##  TROCAP         CHIGD          TONGCHIGD     
##  Yes:2885   Min.   :     0   Min.   : 0.000  
##  No :6281   1st Qu.:     0   1st Qu.: 0.000  
##             Median :  1095   Median : 1.326  
##             Mean   :  5647   Mean   : 4.121  
##             3rd Qu.:  5124   3rd Qu.: 5.228  
##             Max.   :353480   Max.   :83.219  
## 
save(GIAODUC18, file = "GIAODUC18.RData")

6. Rà soát các biến liên quan chi tiêu cho CÁ NHÂN, từng cấp học và từng khoản mục.

#==================Back to MUC2X.RDATA

setwd("D:/Tap huan VIASM/Chuoi Seminar/Huong Trinh/15Sept")
require(tableone)
require(reshape2)
require(gridExtra)
#---- To get co cau chi tieu by individual and by cap hoc-------
load("MUC2X.RData") 
#MUC2X$m2xc4: Hien nay co di hoc khong?
head(MUC2X)
##   tinh huyen    xa diaban hoso m2xma m2xc1                    m2xc2a m2xc2b
## 1   96   973 32239     19   13     1    12                      THPT  Không
## 2   96   973 32239     19   13     2     5 K0 b<U+1EB1>ng c<U+1EA5>p  Không
## 3   96   973 32239     19   13     3     5    Ti<U+1EC3>u h<U+1ECD>c  Không
## 4   96   973 32239     19   14     1     5 K0 b<U+1EB1>ng c<U+1EA5>p  Không
## 5   96   973 32239     19   14     2    11                      THCS  Không
## 6   96   973 32239     19   14     3     8    Ti<U+1EC3>u h<U+1ECD>c  Không
##             m2xc3 m2xc4 m2xc5 m2xc6 m2xc7 m2xc8 m2xma1 m2xc9 m2xc10a m2xc10b
## 1 Công l<U+1EAD>p Không Không  <NA>    NA  <NA>      1  <NA>      NA      NA
## 2  Tu th<U+1EE5>c Không Không  <NA>    NA  <NA>      2  <NA>      NA      NA
## 3 Công l<U+1EAD>p Không Không  <NA>    NA  <NA>      3  <NA>      NA      NA
## 4  Tu th<U+1EE5>c Không Không  <NA>    NA  <NA>      1  <NA>      NA      NA
## 5 Công l<U+1EAD>p Không Không  <NA>    NA  <NA>      2  <NA>      NA      NA
## 6 Công l<U+1EAD>p Không Không  <NA>    NA  <NA>      3  <NA>      NA      NA
##   m2xc10a1 m2xc10a2 m2xc11a m2xc11b m2xc11c m2xc11d m2xc11e m2xc11f m2xc11g
## 1       NA       NA      NA      NA      NA      NA      NA      NA      NA
## 2       NA       NA      NA      NA      NA      NA      NA      NA      NA
## 3       NA       NA      NA      NA      NA      NA      NA      NA      NA
## 4       NA       NA      NA      NA      NA      NA      NA      NA      NA
## 5       NA       NA      NA      NA      NA      NA      NA      NA      NA
## 6       NA       NA      NA      NA      NA      NA      NA      NA      NA
##   m2xc11h m2xc11i m2xc11k m2xma2 m2xc12 m2xc13 m2xc14 m2xc15 m2xc16 m2xc17
## 1      NA      NA      NA      1   <NA>     NA     NA     NA     NA      0
## 2      NA      NA      NA      2   <NA>     NA     NA     NA     NA      0
## 3      NA      NA      NA      3   <NA>     NA     NA     NA     NA      0
## 4      NA      NA      NA      1   <NA>     NA     NA     NA     NA      0
## 5      NA      NA      NA      2   <NA>     NA     NA     NA     NA      0
## 6      NA      NA      NA      3   <NA>     NA     NA     NA     NA      0
##   m2xc18a m2xc18b m2xc19 tentinh                 ID
## 1    <NA>    <NA>     NA  Ca Mau 96_973_32239_19_13
## 2    <NA>    <NA>     NA  Ca Mau 96_973_32239_19_13
## 3    <NA>    <NA>     NA  Ca Mau 96_973_32239_19_13
## 4    <NA>    <NA>      0  Ca Mau 96_973_32239_19_14
## 5    <NA>    <NA>     NA  Ca Mau 96_973_32239_19_14
## 6    <NA>    <NA>     NA  Ca Mau 96_973_32239_19_14
unique(MUC2X$m2xc4)
## [1] Không   <NA>    Có      Ngh<U+1EC9> hè
## Levels: Có Ngh<U+1EC9> hè Không
summary(MUC2X$m2xc4)
##      Có Ngh<U+1EC9> hè   Không    NA's 
##    6822    1795   22352    3268
levels(MUC2X$m2xc4)
## [1] "Có"      "Ngh<U+1EC9> hè" "Không"
levels(MUC2X$m2xc4) <- c("Yes", "Yes", "No")
MUC2X$m2xc4[is.na(MUC2X$m2xc4)] <- "No"
summary(MUC2X$m2xc4)
##   Yes    No 
##  8617 25620
#-----------Individual ID
#headMUC2X)
MUC2X <- MUC2X %>% mutate(IDind = paste0(ID, "_", m2xma))
#headMUC2X$IDind)
names(MUC2X)
##  [1] "tinh"     "huyen"    "xa"       "diaban"   "hoso"     "m2xma"   
##  [7] "m2xc1"    "m2xc2a"   "m2xc2b"   "m2xc3"    "m2xc4"    "m2xc5"   
## [13] "m2xc6"    "m2xc7"    "m2xc8"    "m2xma1"   "m2xc9"    "m2xc10a" 
## [19] "m2xc10b"  "m2xc10a1" "m2xc10a2" "m2xc11a"  "m2xc11b"  "m2xc11c" 
## [25] "m2xc11d"  "m2xc11e"  "m2xc11f"  "m2xc11g"  "m2xc11h"  "m2xc11i" 
## [31] "m2xc11k"  "m2xma2"   "m2xc12"   "m2xc13"   "m2xc14"   "m2xc15"  
## [37] "m2xc16"   "m2xc17"   "m2xc18a"  "m2xc18b"  "m2xc19"   "tentinh" 
## [43] "ID"       "IDind"
CCCHIGD <- MUC2X %>% filter(m2xc4 == "Yes") %>% 
  select(ID, IDind, m2xc1, m2xc5, m2xc6, m2xc7, m2xc8 )
summary(CCCHIGD)
##       ID               IDind              m2xc1             m2xc5     
##  Length:8617        Length:8617        Length:8617        Có   :   0  
##  Class :character   Class :character   Class :character   Không:   0  
##  Mode  :character   Mode  :character   Mode  :character   NA's :8617  
##                                                                       
##                                                                       
##                                                                       
##                                                                       
##                     m2xc6          m2xc7                    m2xc8     
##  Ti<U+1EC3>u h<U+1ECD>c:2822   Min.   : 1.000   Công l<U+1EAD>p:8224  
##  THCS                  :2134   1st Qu.: 3.000   Dân l<U+1EAD>p : 165  
##  Nhà tr<U+1EBB>, MG    :1556   Median : 6.000   Tu th<U+1EE5>c : 200  
##  THPT                  :1171   Mean   : 6.056   Khác           :  28  
##  Ð<U+1EA1>i h<U+1ECD>c : 684   3rd Qu.: 9.000   NR             :   0  
##  Cao d<U+1EB3>ng       : 113   Max.   :12.000                         
##  (Other)               : 137   NA's   :2490
names(MUC2X)
##  [1] "tinh"     "huyen"    "xa"       "diaban"   "hoso"     "m2xma"   
##  [7] "m2xc1"    "m2xc2a"   "m2xc2b"   "m2xc3"    "m2xc4"    "m2xc5"   
## [13] "m2xc6"    "m2xc7"    "m2xc8"    "m2xma1"   "m2xc9"    "m2xc10a" 
## [19] "m2xc10b"  "m2xc10a1" "m2xc10a2" "m2xc11a"  "m2xc11b"  "m2xc11c" 
## [25] "m2xc11d"  "m2xc11e"  "m2xc11f"  "m2xc11g"  "m2xc11h"  "m2xc11i" 
## [31] "m2xc11k"  "m2xma2"   "m2xc12"   "m2xc13"   "m2xc14"   "m2xc15"  
## [37] "m2xc16"   "m2xc17"   "m2xc18a"  "m2xc18b"  "m2xc19"   "tentinh" 
## [43] "ID"       "IDind"
MUC2X <- MUC2X %>% mutate(HOCPHI = m2xc11a,
                          TRAITUYEN = m2xc11b,
                          DONGGOP = m2xc11c +m2xc11d,
                          QUANAO = m2xc11e,
                          SGK = m2xc11f,
                          DUNGCU = m2xc11g,
                          HOCTHEM = m2xc11h,
                          CHIGDKHAC = m2xc11i,
                          CHIALL = m2xc11k)
#ctgd: chi tieu giao duc
MUC2X.ctgd <- MUC2X %>% filter(IDind %in% CCCHIGD$IDind)%>%
  select(ID, IDind, tinh, tentinh, HOCPHI, TRAITUYEN, DONGGOP, QUANAO,
         SGK, DUNGCU, HOCTHEM, CHIGDKHAC, CHIALL, m2xc9) %>% unique()
summary(MUC2X.ctgd)
##       ID               IDind                tinh        tentinh         
##  Length:8617        Length:8617        01     : 314   Length:8617       
##  Class :character   Class :character   79     : 292   Class :character  
##  Mode  :character   Mode  :character   40     : 251   Mode  :character  
##                                        38     : 238                     
##                                        66     : 189                     
##                                        75     : 186                     
##                                        (Other):7147                     
##      HOCPHI         TRAITUYEN           DONGGOP            QUANAO      
##  Min.   :    -2   Min.   :    -2.0   Min.   :   -4.0   Min.   :  -2.0  
##  1st Qu.:     0   1st Qu.:     0.0   1st Qu.:  100.0   1st Qu.:   0.0  
##  Median :   225   Median :     0.0   Median :  250.0   Median : 200.0  
##  Mean   :  1848   Mean   :    31.8   Mean   :  426.6   Mean   : 248.9  
##  3rd Qu.:   675   3rd Qu.:     0.0   3rd Qu.:  500.0   3rd Qu.: 350.0  
##  Max.   :350000   Max.   :250000.0   Max.   :69000.0   Max.   :5000.0  
##                                                                        
##       SGK             DUNGCU           HOCTHEM        CHIGDKHAC     
##  Min.   :  -2.0   Min.   :   -2.0   Min.   :   -2   Min.   :    -2  
##  1st Qu.:   0.0   1st Qu.:  100.0   1st Qu.:    0   1st Qu.:     0  
##  Median : 200.0   Median :  200.0   Median :    0   Median :   100  
##  Mean   : 261.9   Mean   :  280.1   Mean   : 1074   Mean   :   958  
##  3rd Qu.: 350.0   3rd Qu.:  360.0   3rd Qu.:  952   3rd Qu.:   300  
##  Max.   :6000.0   Max.   :22000.0   Max.   :48000   Max.   :137350  
##                                                                     
##      CHIALL        m2xc9     
##  Min.   :     0   Có  :3892  
##  1st Qu.:  1069   Khác:4725  
##  Median :  2230              
##  Mean   :  5366              
##  3rd Qu.:  5106              
##  Max.   :353480              
## 
#add some filter here:

MUC2X.ctgd  %>% filter(CHIALL == 0) %>% summary()
##       ID               IDind                tinh      tentinh         
##  Length:142         Length:142         02     :36   Length:142        
##  Class :character   Class :character   12     :23   Class :character  
##  Mode  :character   Mode  :character   62     :12   Mode  :character  
##                                        06     : 8                     
##                                        10     : 6                     
##                                        15     : 5                     
##                                        (Other):52                     
##      HOCPHI    TRAITUYEN    DONGGOP      QUANAO       SGK        DUNGCU 
##  Min.   :0   Min.   :0   Min.   :0   Min.   :0   Min.   :0   Min.   :0  
##  1st Qu.:0   1st Qu.:0   1st Qu.:0   1st Qu.:0   1st Qu.:0   1st Qu.:0  
##  Median :0   Median :0   Median :0   Median :0   Median :0   Median :0  
##  Mean   :0   Mean   :0   Mean   :0   Mean   :0   Mean   :0   Mean   :0  
##  3rd Qu.:0   3rd Qu.:0   3rd Qu.:0   3rd Qu.:0   3rd Qu.:0   3rd Qu.:0  
##  Max.   :0   Max.   :0   Max.   :0   Max.   :0   Max.   :0   Max.   :0  
##                                                                         
##     HOCTHEM    CHIGDKHAC     CHIALL   m2xc9    
##  Min.   :0   Min.   :0   Min.   :0   Có  :127  
##  1st Qu.:0   1st Qu.:0   1st Qu.:0   Khác: 15  
##  Median :0   Median :0   Median :0             
##  Mean   :0   Mean   :0   Mean   :0             
##  3rd Qu.:0   3rd Qu.:0   3rd Qu.:0             
##  Max.   :0   Max.   :0   Max.   :0             
## 
MUC2X.ctgd <- MUC2X.ctgd %>% 
  filter(HOCPHI >=0 &  TRAITUYEN >= 0 & DONGGOP>=0 & QUANAO >= 0& SGK >= 0 & DUNGCU >=0 & HOCTHEM >=0 & CHIGDKHAC>=0)


CCCHIGD <- left_join(CCCHIGD, MUC2X.ctgd)

CCCHIGD <- CCCHIGD %>% rename(TROCAP = m2xc9)
levels(CCCHIGD $TROCAP) <- c("Yes", "No")


CCCHIGD <- CCCHIGD %>% filter(CHIALL > 0 ) #906
levels(CCCHIGD$m2xc6) <- c("Nursery School", "Primary School",
                           "Secondary school", "Secondary school", "Vocational school",
                           "Vocational school", "Vocational school", "Vocational school", 
                           "University", "University", "University", "University", "Others")

summary(CCCHIGD)
##       ID               IDind              m2xc1             m2xc5     
##  Length:7801        Length:7801        Length:7801        Có   :   0  
##  Class :character   Class :character   Class :character   Không:   0  
##  Mode  :character   Mode  :character   Mode  :character   NA's :7801  
##                                                                       
##                                                                       
##                                                                       
##                                                                       
##                m2xc6          m2xc7                    m2xc8     
##  Nursery School   :1338   Min.   : 1.000   Công l<U+1EAD>p:7435  
##  Primary School   :2584   1st Qu.: 3.000   Dân l<U+1EAD>p : 156  
##  Secondary school :3037   Median : 6.000   Tu th<U+1EE5>c : 184  
##  Vocational school:  84   Mean   : 6.065   Khác           :  26  
##  University       : 742   3rd Qu.: 9.000   NR             :   0  
##  Others           :  16   Max.   :12.000                         
##                           NA's   :2180                           
##       tinh        tentinh              HOCPHI         TRAITUYEN        
##  01     : 298   Length:7801        Min.   :     0   Min.   :     0.00  
##  79     : 261   Class :character   1st Qu.:     0   1st Qu.:     0.00  
##  40     : 250   Mode  :character   Median :   270   Median :     0.00  
##  38     : 233                      Mean   :  1895   Mean   :    35.15  
##  66     : 183                      3rd Qu.:   705   3rd Qu.:     0.00  
##  31     : 179                      Max.   :350000   Max.   :250000.00  
##  (Other):6397                                                          
##     DONGGOP            QUANAO            SGK             DUNGCU       
##  Min.   :    0.0   Min.   :   0.0   Min.   :   0.0   Min.   :    0.0  
##  1st Qu.:  100.0   1st Qu.:  80.0   1st Qu.:  85.0   1st Qu.:  120.0  
##  Median :  300.0   Median : 200.0   Median : 210.0   Median :  230.0  
##  Mean   :  462.6   Mean   : 263.9   Mean   : 281.2   Mean   :  300.7  
##  3rd Qu.:  550.0   3rd Qu.: 360.0   3rd Qu.: 370.0   3rd Qu.:  380.0  
##  Max.   :69000.0   Max.   :5000.0   Max.   :6000.0   Max.   :22000.0  
##                                                                       
##     HOCTHEM        CHIGDKHAC          CHIALL       TROCAP    
##  Min.   :    0   Min.   :     0   Min.   :    20   Yes:3480  
##  1st Qu.:    0   1st Qu.:     0   1st Qu.:  1080   No :4321  
##  Median :    0   Median :   100   Median :  2290             
##  Mean   : 1141   Mean   :  1017   Mean   :  5396             
##  3rd Qu.: 1052   3rd Qu.:   360   3rd Qu.:  5190             
##  Max.   :48000   Max.   :137350   Max.   :353480             
## 
save(CCCHIGD, file = "CCCHIGD.RData") #DONE

7.Các thống cơ cơ bản về bảng/hình của bài nghiên cứu

#--------SEC1: LOC CAC TINH DONG BANG SONG HONG--
#-------------------------------------------------------------------
GIAODUC18 <- GIAODUC18 %>%
  filter(tinh %in% c("01", "26", "27", "22", 
                     "30", "31", "33", "34", "35", "36", "37")) 
#=========SEC2: DO CLEANING MORE!!!!!!!!!!!!!!!!1
CCCHIGD_HH <- CCCHIGD %>% group_by(ID) %>% summarise(HOCTHEM = sum(HOCTHEM))

CCCHIGD_HH <- CCCHIGD_HH %>% mutate(HOCTHEM = ifelse(HOCTHEM > 0 , "Yes", "No"))
#GIAODUC18

GIAODUC18  <- GIAODUC18 [which(GIAODUC18 $CHIGD < 60000), ] #delete some outlier

summary(GIAODUC18$TONGCHIGD)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.650   4.735   7.014  46.243
length(GIAODUC18$TONGCHIGD[GIAODUC18$TONGCHIGD == 0])
## [1] 844
dim(GIAODUC18)
## [1] 1866   19
GIAODUC18 <- left_join(GIAODUC18, CCCHIGD_HH)
GIAODUC18$HOCTHEM[is.na(GIAODUC18$HOCTHEM)] <- "No"
summary(GIAODUC18)
##       ID                 tinh       tentinh              THUBQ      
##  Length:1866        01     :306   Length:1866        Min.   :  152  
##  Class :character   36     :193   Class :character   1st Qu.: 2341  
##  Mode  :character   34     :188   Mode  :character   Median : 3434  
##                     31     :184                      Mean   : 4038  
##                     30     :180                      3rd Qu.: 4873  
##                     22     :147                      Max.   :66599  
##                     (Other):668                                     
##  GIOITINH_CH      TUOI_CH         HONNHAN_CH    NOISONG        DANTOC_CH   
##  Male  :1443   Min.   : 19.00   Other  : 345   URBAN: 531   Kinh    :1841  
##  Female: 423   1st Qu.: 45.00   Married:1521   RURAL:1335   Minority:  25  
##                Median : 54.00                                              
##                Mean   : 54.67                                              
##                3rd Qu.: 63.00                                              
##                Max.   :101.00                                              
##                                                                            
##     TSNGUOI       NGHENGHIEP_CH                      BANGCAP_CH  
##  Min.   : 1.000   Length:1866        No qualification     : 156  
##  1st Qu.: 2.000   Class :character   Primary school       : 307  
##  Median : 3.000   Mode  :character   Secondary-high school:1240  
##  Mean   : 3.531                      University           : 163  
##  3rd Qu.: 5.000                                                  
##  Max.   :11.000                                                  
##                                                                  
##   SONAMDANGHOC     SONUDANGHOC      songuoidihoc    songuoidihocFactor
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   0:864             
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1:421             
##  Median :0.0000   Median :0.0000   Median :1.0000   2:480             
##  Mean   :0.4614   Mean   :0.4432   Mean   :0.9046   3: 97             
##  3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:2.0000   4:  4             
##  Max.   :3.0000   Max.   :3.0000   Max.   :4.0000   5:  0             
##                                                     6:  0             
##  TROCAP         CHIGD         TONGCHIGD        HOCTHEM         
##  Yes: 479   Min.   :    0   Min.   : 0.000   Length:1866       
##  No :1387   1st Qu.:    0   1st Qu.: 0.000   Class :character  
##             Median : 1800   Median : 1.650   Mode  :character  
##             Mean   : 6372   Mean   : 4.735                     
##             3rd Qu.: 7754   3rd Qu.: 7.014                     
##             Max.   :59990   Max.   :46.243                     
## 
#====================SEC3: BANG THONG KE MO TA

factorVars <- c("NOISONG", "DANTOC_CH", "HONNHAN_CH", "GIOITINH_CH",
                 "NGHENGHIEP_CH", "songuoidihocFactor",
                 "BANGCAP_CH", "HOCTHEM", "TROCAP")
vars <- c( "TUOI_CH", "TSNGUOI", "songuoidihoc" ,
           "NOISONG", "DANTOC_CH", "HONNHAN_CH", "GIOITINH_CH",
           "NGHENGHIEP_CH", "songuoidihocFactor",
           "BANGCAP_CH", "HOCTHEM", "TROCAP" )


Des1 <- CreateTableOne(vars = vars,
                       factorVars = factorVars, 
                       data = GIAODUC18)

Des1 <- print(Des1, format = "p")
##                           
##                            Overall      
##   n                         1866        
##   TUOI_CH (mean (SD))      54.67 (13.79)
##   TSNGUOI (mean (SD))       3.53 (1.57) 
##   songuoidihoc (mean (SD))  0.90 (0.97) 
##   NOISONG = RURAL (%)       71.5        
##   DANTOC_CH = Minority (%)   1.3        
##   HONNHAN_CH = Married (%)  81.5        
##   GIOITINH_CH = Female (%)  22.7        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        31.8        
##      LAMCONGANLUONG         40.1        
##      NONGLAMTHUYSAN         28.0        
##   songuoidihocFactor (%)                
##      0                      46.3        
##      1                      22.6        
##      2                      25.7        
##      3                       5.2        
##      4                       0.2        
##   BANGCAP_CH (%)                        
##      No qualification        8.4        
##      Primary school         16.5        
##      Secondary-high school  66.5        
##      University              8.7        
##   HOCTHEM = Yes (%)         35.6        
##   TROCAP = No (%)           74.3
write.csv(Des1, file = "Des1.csv")

#=====================SEC2: DO CLEANING MORE!!!!!!!!!!!!!!!!1
summary(GIAODUC18$songuoidihocFactor)
##   0   1   2   3   4   5   6 
## 864 421 480  97   4   0   0
levels(GIAODUC18$songuoidihocFactor) <- c("0", "1", "2", "3", "3", "3", "3" )

DesALL <- list()
for (i in unique(GIAODUC18$tentinh))
{
  Tempt <- NULL
  Tempt <-  CreateTableOne(vars = vars,
                                 factorVars = factorVars, 
                                 data = GIAODUC18 %>% 
                             filter(tentinh == i))
  DesALL[[i]] <- print( Tempt, format = "p")
}
##                           
##                            Overall      
##   n                          147        
##   TUOI_CH (mean (SD))      53.00 (13.11)
##   TSNGUOI (mean (SD))       3.59 (1.38) 
##   songuoidihoc (mean (SD))  0.85 (0.90) 
##   NOISONG = RURAL (%)       40.8        
##   DANTOC_CH = Minority (%)   9.5        
##   HONNHAN_CH = Married (%)  83.7        
##   GIOITINH_CH = Female (%)  17.0        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        36.7        
##      LAMCONGANLUONG         40.1        
##      NONGLAMTHUYSAN         23.1        
##   songuoidihocFactor (%)                
##      0                      45.6        
##      1                      27.2        
##      2                      23.8        
##      3                       3.4        
##   BANGCAP_CH (%)                        
##      No qualification       12.9        
##      Primary school         18.4        
##      Secondary-high school  57.8        
##      University             10.9        
##   HOCTHEM = Yes (%)         15.6        
##   TROCAP = No (%)           72.8        
##                           
##                            Overall      
##   n                          134        
##   TUOI_CH (mean (SD))      50.25 (12.74)
##   TSNGUOI (mean (SD))       4.07 (1.58) 
##   songuoidihoc (mean (SD))  1.22 (1.02) 
##   NOISONG = RURAL (%)       73.9        
##   DANTOC_CH = Minority (%)   5.2        
##   HONNHAN_CH = Married (%)  84.3        
##   GIOITINH_CH = Female (%)  25.4        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        25.4        
##      LAMCONGANLUONG         42.5        
##      NONGLAMTHUYSAN         32.1        
##   songuoidihocFactor (%)                
##      0                      32.8        
##      1                      22.4        
##      2                      34.3        
##      3                      10.4        
##   BANGCAP_CH (%)                        
##      No qualification        7.5        
##      Primary school         19.4        
##      Secondary-high school  62.7        
##      University             10.4        
##   HOCTHEM = Yes (%)         54.5        
##   TROCAP = No (%)           56.0        
##                           
##                            Overall      
##   n                          137        
##   TUOI_CH (mean (SD))      51.27 (11.27)
##   TSNGUOI (mean (SD))       4.18 (1.71) 
##   songuoidihoc (mean (SD))  1.20 (1.02) 
##   NOISONG = RURAL (%)       72.3        
##   DANTOC_CH = Kinh (%)     100.0        
##   HONNHAN_CH = Married (%)  86.1        
##   GIOITINH_CH = Female (%)  19.7        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        34.3        
##      LAMCONGANLUONG         42.3        
##      NONGLAMTHUYSAN         23.4        
##   songuoidihocFactor (%)                
##      0                      33.6        
##      1                      23.4        
##      2                      32.8        
##      3                      10.2        
##   BANGCAP_CH (%)                        
##      No qualification       10.2        
##      Primary school         24.1        
##      Secondary-high school  58.4        
##      University              7.3        
##   HOCTHEM = Yes (%)         30.7        
##   TROCAP = No (%)           74.5        
##                           
##                            Overall      
##   n                          180        
##   TUOI_CH (mean (SD))      55.12 (13.70)
##   TSNGUOI (mean (SD))       3.57 (1.58) 
##   songuoidihoc (mean (SD))  0.82 (0.95) 
##   NOISONG = RURAL (%)       78.3        
##   DANTOC_CH = Kinh (%)     100.0        
##   HONNHAN_CH = Married (%)  83.3        
##   GIOITINH_CH = Female (%)  18.9        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        26.1        
##      LAMCONGANLUONG         40.6        
##      NONGLAMTHUYSAN         33.3        
##   songuoidihocFactor (%)                
##      0                      51.1        
##      1                      20.6        
##      2                      23.9        
##      3                       4.4        
##   BANGCAP_CH (%)                        
##      No qualification        5.6        
##      Primary school         15.0        
##      Secondary-high school  75.0        
##      University              4.4        
##   HOCTHEM = Yes (%)         35.0        
##   TROCAP = No (%)           76.7        
##                           
##                            Overall      
##   n                          184        
##   TUOI_CH (mean (SD))      53.11 (14.41)
##   TSNGUOI (mean (SD))       3.51 (1.47) 
##   songuoidihoc (mean (SD))  0.95 (0.91) 
##   NOISONG = RURAL (%)       53.8        
##   DANTOC_CH = Minority (%)   0.5        
##   HONNHAN_CH = Married (%)  78.8        
##   GIOITINH_CH = Female (%)  27.2        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        33.7        
##      LAMCONGANLUONG         46.7        
##      NONGLAMTHUYSAN         19.6        
##   songuoidihocFactor (%)                
##      0                      41.3        
##      1                      24.5        
##      2                      32.1        
##      3                       2.2        
##   BANGCAP_CH (%)                        
##      No qualification        6.0        
##      Primary school         19.6        
##      Secondary-high school  62.0        
##      University             12.5        
##   HOCTHEM = Yes (%)         46.7        
##   TROCAP = No (%)           68.5        
##                           
##                            Overall      
##   n                          145        
##   TUOI_CH (mean (SD))      56.56 (14.34)
##   TSNGUOI (mean (SD))       3.30 (1.57) 
##   songuoidihoc (mean (SD))  0.78 (0.93) 
##   NOISONG = RURAL (%)       88.3        
##   DANTOC_CH = Kinh (%)     100.0        
##   HONNHAN_CH = Married (%)  77.2        
##   GIOITINH_CH = Female (%)  21.4        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        26.2        
##      LAMCONGANLUONG         42.1        
##      NONGLAMTHUYSAN         31.7        
##   songuoidihocFactor (%)                
##      0                      53.1        
##      1                      18.6        
##      2                      26.2        
##      3                       2.1        
##   BANGCAP_CH (%)                        
##      No qualification       11.0        
##      Primary school         11.0        
##      Secondary-high school  71.7        
##      University              6.2        
##   HOCTHEM = Yes (%)         31.7        
##   TROCAP = No (%)           75.9        
##                           
##                            Overall      
##   n                          188        
##   TUOI_CH (mean (SD))      57.19 (14.38)
##   TSNGUOI (mean (SD))       3.03 (1.51) 
##   songuoidihoc (mean (SD))  0.69 (0.89) 
##   NOISONG = RURAL (%)       90.4        
##   DANTOC_CH = Kinh (%)     100.0        
##   HONNHAN_CH = Married (%)  80.9        
##   GIOITINH_CH = Female (%)  18.1        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        25.5        
##      LAMCONGANLUONG         39.9        
##      NONGLAMTHUYSAN         34.6        
##   songuoidihocFactor (%)                
##      0                      56.4        
##      1                      22.3        
##      2                      17.6        
##      3                       3.7        
##   BANGCAP_CH (%)                        
##      No qualification        4.3        
##      Primary school         10.6        
##      Secondary-high school  81.4        
##      University              3.7        
##   HOCTHEM = Yes (%)         28.2        
##   TROCAP = No (%)           79.3        
##                           
##                            Overall      
##   n                          123        
##   TUOI_CH (mean (SD))      56.41 (14.35)
##   TSNGUOI (mean (SD))       3.11 (1.34) 
##   songuoidihoc (mean (SD))  0.81 (0.91) 
##   NOISONG = RURAL (%)       87.8        
##   DANTOC_CH = Kinh (%)     100.0        
##   HONNHAN_CH = Married (%)  78.0        
##   GIOITINH_CH = Female (%)  20.3        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        30.1        
##      LAMCONGANLUONG         35.0        
##      NONGLAMTHUYSAN         35.0        
##   songuoidihocFactor (%)                
##      0                      48.0        
##      1                      26.8        
##      2                      21.1        
##      3                       4.1        
##   BANGCAP_CH (%)                        
##      No qualification       12.2        
##      Primary school         13.0        
##      Secondary-high school  72.4        
##      University              2.4        
##   HOCTHEM = Yes (%)         41.5        
##   TROCAP = No (%)           77.2        
##                           
##                            Overall      
##   n                          193        
##   TUOI_CH (mean (SD))      57.35 (13.10)
##   TSNGUOI (mean (SD))       3.15 (1.53) 
##   songuoidihoc (mean (SD))  0.75 (0.98) 
##   NOISONG = RURAL (%)       81.3        
##   DANTOC_CH = Kinh (%)     100.0        
##   HONNHAN_CH = Married (%)  76.2        
##   GIOITINH_CH = Female (%)  22.8        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        24.4        
##      LAMCONGANLUONG         37.3        
##      NONGLAMTHUYSAN         38.3        
##   songuoidihocFactor (%)                
##      0                      58.0        
##      1                      15.0        
##      2                      21.2        
##      3                       5.7        
##   BANGCAP_CH (%)                        
##      No qualification       11.4        
##      Primary school         16.6        
##      Secondary-high school  67.4        
##      University              4.7        
##   HOCTHEM = Yes (%)         30.1        
##   TROCAP = No (%)           82.4        
##                           
##                            Overall      
##   n                          129        
##   TUOI_CH (mean (SD))      51.15 (15.32)
##   TSNGUOI (mean (SD))       3.41 (1.36) 
##   songuoidihoc (mean (SD))  1.00 (0.97) 
##   NOISONG = RURAL (%)       79.1        
##   DANTOC_CH = Minority (%)   1.6        
##   HONNHAN_CH = Married (%)  88.4        
##   GIOITINH_CH = Female (%)  19.4        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        19.4        
##      LAMCONGANLUONG         50.4        
##      NONGLAMTHUYSAN         30.2        
##   songuoidihocFactor (%)                
##      0                      39.5        
##      1                      27.9        
##      2                      25.6        
##      3                       7.0        
##   BANGCAP_CH (%)                        
##      No qualification        7.0        
##      Primary school         17.1        
##      Secondary-high school  70.5        
##      University              5.4        
##   HOCTHEM = Yes (%)         43.4        
##   TROCAP = No (%)           65.9        
##                           
##                            Overall      
##   n                          306        
##   TUOI_CH (mean (SD))      56.25 (13.05)
##   TSNGUOI (mean (SD))       3.84 (1.63) 
##   songuoidihoc (mean (SD))  0.97 (1.01) 
##   NOISONG = RURAL (%)       56.2        
##   DANTOC_CH = Minority (%)   0.3        
##   HONNHAN_CH = Married (%)  82.0        
##   GIOITINH_CH = Female (%)  30.7        
##   NGHENGHIEP_CH (%)                     
##      KINHDOANHDICHVU        50.7        
##      LAMCONGANLUONG         32.7        
##      NONGLAMTHUYSAN         16.7        
##   songuoidihocFactor (%)                
##      0                      43.8        
##      1                      22.9        
##      2                      26.5        
##      3                       6.9        
##   BANGCAP_CH (%)                        
##      No qualification        7.2        
##      Primary school         17.0        
##      Secondary-high school  57.2        
##      University             18.6        
##   HOCTHEM = Yes (%)         37.3        
##   TROCAP = No (%)           78.8
DesALPrint <- data.frame(DesALL[["Ha Noi"]])
names(DesALPrint ) <- "Ha Noi"

for (i in c("Quang Ninh", "Vinh Phuc", "Bac Ninh",
            "Hai Duong", "Hai Phong", "Hung Yen",
            "Thai Binh", "Ha Nam", "Nam Dinh", "Ninh Binh"))
{
  DesALPrint[, i] <- DesALL[[i]]
  
}
names(DesALPrint) <- c("Ha Noi", "Quang Ninh", "Vinh Phuc", "Bac Ninh",
                       "Hai Duong", "Hai Phong", "Hung Yen",
                       "Thai Binh", "Ha Nam", "Nam Dinh", "Ninh Binh")

DesALPrint
##                                 Ha Noi       Overall       Overall
## n                                  306           147           134
## TUOI_CH (mean (SD))      56.25 (13.05) 53.00 (13.11) 50.25 (12.74)
## TSNGUOI (mean (SD))        3.84 (1.63)   3.59 (1.38)   4.07 (1.58)
## songuoidihoc (mean (SD))   0.97 (1.01)   0.85 (0.90)   1.22 (1.02)
## NOISONG = RURAL (%)               56.2          40.8          73.9
## DANTOC_CH = Minority (%)           0.3           9.5           5.2
## HONNHAN_CH = Married (%)          82.0          83.7          84.3
## GIOITINH_CH = Female (%)          30.7          17.0          25.4
## NGHENGHIEP_CH (%)                                                 
##    KINHDOANHDICHVU                50.7          36.7          25.4
##    LAMCONGANLUONG                 32.7          40.1          42.5
##    NONGLAMTHUYSAN                 16.7          23.1          32.1
## songuoidihocFactor (%)                                            
##    0                              43.8          45.6          32.8
##    1                              22.9          27.2          22.4
##    2                              26.5          23.8          34.3
##    3                               6.9           3.4          10.4
## BANGCAP_CH (%)                                                    
##    No qualification                7.2          12.9           7.5
##    Primary school                 17.0          18.4          19.4
##    Secondary-high school          57.2          57.8          62.7
##    University                     18.6          10.9          10.4
## HOCTHEM = Yes (%)                 37.3          15.6          54.5
## TROCAP = No (%)                   78.8          72.8          56.0
##                                Overall       Overall       Overall
## n                                  137           180           184
## TUOI_CH (mean (SD))      51.27 (11.27) 55.12 (13.70) 53.11 (14.41)
## TSNGUOI (mean (SD))        4.18 (1.71)   3.57 (1.58)   3.51 (1.47)
## songuoidihoc (mean (SD))   1.20 (1.02)   0.82 (0.95)   0.95 (0.91)
## NOISONG = RURAL (%)               72.3          78.3          53.8
## DANTOC_CH = Minority (%)         100.0         100.0           0.5
## HONNHAN_CH = Married (%)          86.1          83.3          78.8
## GIOITINH_CH = Female (%)          19.7          18.9          27.2
## NGHENGHIEP_CH (%)                                                 
##    KINHDOANHDICHVU                34.3          26.1          33.7
##    LAMCONGANLUONG                 42.3          40.6          46.7
##    NONGLAMTHUYSAN                 23.4          33.3          19.6
## songuoidihocFactor (%)                                            
##    0                              33.6          51.1          41.3
##    1                              23.4          20.6          24.5
##    2                              32.8          23.9          32.1
##    3                              10.2           4.4           2.2
## BANGCAP_CH (%)                                                    
##    No qualification               10.2           5.6           6.0
##    Primary school                 24.1          15.0          19.6
##    Secondary-high school          58.4          75.0          62.0
##    University                      7.3           4.4          12.5
## HOCTHEM = Yes (%)                 30.7          35.0          46.7
## TROCAP = No (%)                   74.5          76.7          68.5
##                                Overall       Overall       Overall
## n                                  145           188           123
## TUOI_CH (mean (SD))      56.56 (14.34) 57.19 (14.38) 56.41 (14.35)
## TSNGUOI (mean (SD))        3.30 (1.57)   3.03 (1.51)   3.11 (1.34)
## songuoidihoc (mean (SD))   0.78 (0.93)   0.69 (0.89)   0.81 (0.91)
## NOISONG = RURAL (%)               88.3          90.4          87.8
## DANTOC_CH = Minority (%)         100.0         100.0         100.0
## HONNHAN_CH = Married (%)          77.2          80.9          78.0
## GIOITINH_CH = Female (%)          21.4          18.1          20.3
## NGHENGHIEP_CH (%)                                                 
##    KINHDOANHDICHVU                26.2          25.5          30.1
##    LAMCONGANLUONG                 42.1          39.9          35.0
##    NONGLAMTHUYSAN                 31.7          34.6          35.0
## songuoidihocFactor (%)                                            
##    0                              53.1          56.4          48.0
##    1                              18.6          22.3          26.8
##    2                              26.2          17.6          21.1
##    3                               2.1           3.7           4.1
## BANGCAP_CH (%)                                                    
##    No qualification               11.0           4.3          12.2
##    Primary school                 11.0          10.6          13.0
##    Secondary-high school          71.7          81.4          72.4
##    University                      6.2           3.7           2.4
## HOCTHEM = Yes (%)                 31.7          28.2          41.5
## TROCAP = No (%)                   75.9          79.3          77.2
##                                Overall       Overall
## n                                  193           129
## TUOI_CH (mean (SD))      57.35 (13.10) 51.15 (15.32)
## TSNGUOI (mean (SD))        3.15 (1.53)   3.41 (1.36)
## songuoidihoc (mean (SD))   0.75 (0.98)   1.00 (0.97)
## NOISONG = RURAL (%)               81.3          79.1
## DANTOC_CH = Minority (%)         100.0           1.6
## HONNHAN_CH = Married (%)          76.2          88.4
## GIOITINH_CH = Female (%)          22.8          19.4
## NGHENGHIEP_CH (%)                                   
##    KINHDOANHDICHVU                24.4          19.4
##    LAMCONGANLUONG                 37.3          50.4
##    NONGLAMTHUYSAN                 38.3          30.2
## songuoidihocFactor (%)                              
##    0                              58.0          39.5
##    1                              15.0          27.9
##    2                              21.2          25.6
##    3                               5.7           7.0
## BANGCAP_CH (%)                                      
##    No qualification               11.4           7.0
##    Primary school                 16.6          17.1
##    Secondary-high school          67.4          70.5
##    University                      4.7           5.4
## HOCTHEM = Yes (%)                 30.1          43.4
## TROCAP = No (%)                   82.4          65.9
write.csv(DesALPrint, file = "DesALPrint.csv")

#========================SEC4. Chi tieu giao duc tren tong chi tieu


p1 <- ggplot(GIAODUC18, aes(y = TONGCHIGD, x = tentinh)) +
  geom_boxplot() + ylim (c(0, 20)) +
  ylab("Phantram") +
  stat_summary(fun.y = mean, colour = "darkred", geom = "point", 
               shape = 18, size = 3,show_guide = FALSE) +
  ggtitle("Phan tram (%) chi tieu cho giao duc") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
p1

means <- aggregate(CHIGD ~ tentinh, GIAODUC18, mean)
p2 <- ggplot(GIAODUC18, aes(y  = CHIGD,  x = tentinh)) +
  geom_boxplot() + ylim (c( 0, 36000)) + ylab("nghin dong")+
  stat_summary(fun.y = mean, colour = "darkred", geom = "point", 
               shape = 18, size = 3,show_guide = FALSE) +
  ggtitle("Chi tieu cho giao duc (Nghin dong)") +
  theme(axis.text.x = element_text(angle = 90, 
                                   vjust = 0.5, hjust = 1))
p2

grid.arrange(p1, p2, ncol = 1)

#-----ghi tren folder 
op <- par(mfrow = c(1, 1))
png(filename = "Hinh1a.png", width = 800, height = 480)
p1
par(op)
dev.off()
## png 
##   2
op <- par(mfrow = c(1, 1))
png(filename = "Hinh1b.png", width = 800, height = 480)
p2
par(op)
dev.off()
## png 
##   2
#---------------SEC4: Work with CCCHIGD
#------------------4.1. LOC CAC TINH DONG BANG SONG HONG
CCCHIGD <- CCCHIGD %>% 
  filter(tinh %in% c("01", "26", "27", "22", "30", "31", 
                     "33", "34", "35", "36", "37")) 
dim(CCCHIGD) # 
## [1] 1635   19
#CCCHIGD %>% filter(CHIALL >= 40000)

CCCHIGD <- CCCHIGD %>% filter(CHIALL < 40000) # delete 13 observations

CCCHIGD$m2xc6 <- as.character(CCCHIGD$m2xc6)

p3 <- ggplot(CCCHIGD, aes(x = tentinh, y = CHIALL, fill = m2xc6)) +
  geom_boxplot(outlier.shape = NA) + ylim(0, 35000) +
  ggtitle("Chi phi 1 nam hoc theo cap hoc va theo tinh") +
  theme(axis.text.x = element_text(angle = 90, 
                                   vjust = 0.5, hjust = 1))
p3

op <- par(mfrow = c(1, 1))
png(filename = "Hinh3.png", width = 800, height = 480)
p3
par(op)
dev.off()
## png 
##   2

7.Các thống cơ cơ bản về bảng/hình của bài nghiên cứu

Tiếp tục xử lý chi tiêu theo từng khoản mục

See more at tại đây https://rpubs.com/Lucie/746058

TRÂN TRỌNG MỜI ĐẠI BIỂU THAM DỰ VÀ TRÂN TRỌNG CẢM ƠN!

LS0tDQp0aXRsZTogJ1jhu60gbMO9IHPhu5EgbGnhu4d1IHRow7QgduG7m2kgUjogQuG7mSBz4buRIGxp4buHdSDEkGnhu4F1IHRyYSBt4bupYyBz4buRbmcgZMOibiBjxrAgMjAxOCcNCmF1dGhvcjogIlRy4buLbmggVGjhu4sgSMaw4budbmcgKFRNVSkgJiBOZ3V54buFbiBUaOG7iyBOaHVuZyAoVExVKSINCmRhdGU6ICI5LzExLzIwMjEiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgaGlnaGxpZ2h0OiBweWdtZW50cw0KICAgICMgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogImZsYXRseSINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCxpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQoNClTDoGkgbGnhu4d1IGJ14buVaSB0aOG7sWMgaMOgbmggbmfDoHkgMTUvOS8yMDIxOiBY4butIGzDvSBz4buRIGxp4buHdSB0aMO0IHbhu5tpIFI6IELhu5kgc+G7kSBsaeG7h3UgxJBp4buBdSB0cmEgbeG7qWMgc+G7kW5nIGTDom4gY8awIDIwMTgNCg0KU3BlYWtlcjogVFMuIE5ndXnhu4VuIFRo4buLIE5odW5nLCDEkOG6oWkgaOG7jWMgVGjEg25nIExvbmcgdsOgDQoNClRTLiBUcuG7i25oIFRo4buLIEjGsOG7nW5nLCBUcsaw4budbmcgxJBIIFRoxrDGoW5nIE3huqFpDQoNCkNoaSB0aeG6v3QgdOG6oWk6IGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS92aWV3L3RrdWQvaG9tZT9hdXRodXNlcj0xIA0KDQpUw6BpIGxp4buHdSB0aOG7sWMgaMOgbmggY8OzIHRo4buDIGRvd25sb2FkIFt04bqhaSDEkcOieV0oaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL2ZvbGRlcnMvMVZOMlRNcC1qT2stNk5JWmN4ODQ1Umd2NEdxS1RjZzdzP3VzcD1zaGFyaW5nKS4NCihDaOG7jW4gY2h14buZdCBwaOG6o2kgdOG6oWkgY2jhu68gInThuqFpIMSRw6J5IiwgY2jhu41uIG9wZW4gbmV3IHRhYikNCg0KSG/hurdjIGNvcHkgbGluayBuw6B5OiBodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvZm9sZGVycy8xVk4yVE1wLWpPay02TklaY3g4NDVSZ3Y0R3FLVGNnN3M/dXNwPXNoYXJpbmcgDQoNClTDk00gVOG6rlQ6IFRyb25nIHF1w6EgdHLDrG5oIHRp4bq/biBow6BuaCBt4buZdCBuZ2hpw6puIGPhu6l1IGtob2EgaOG7jWMgdGjhu7FjIG5naGnhu4dtLCB44butIGzDvSBz4buRIGxp4buHdSB0aMO0IGzDoCBt4buZdCBixrDhu5tjIGLhuq90IGJ14buZYyB2w6AgcXVhbiB0cuG7jW5nLiBRdcOhIHRyw6xuaCB44butIGzDvSB0aMO0IHPhu5EgbGnhu4d1IHPhur0geOG7rSBsw70gY8OhYyDigJxs4buXaeKAnSB0cm9uZyBxdcOhIHRyw6xuaCB0aHUgdGjhuq1wIHPhu5EgbGnhu4d1LCB04buVbmcgaOG7o3AgY8OidSB0cuG6oyBs4budaSB0aMOgbmggY8OhYyBiaeG6v24gxJHhu4MgcGjhu6VjIHbhu6UgY8OidSBo4buPaSBuZ2hpw6puIGPhu6l1LiDEkOG7k25nIHRo4budaSwgcXXDoSB0csOsbmggbsOgeSBjxaluZyBiYW8gZ+G7k20gcXXDoSB0csOsbmggZ2jDqXAgbuG7kWkgc+G7kSBsaeG7h3UgdOG7qyBjw6FjIG5ndeG7k24ga2jDoWMgbmhhdS4gQ2jDum5nIHTDtGkgbWluaCBo4buNYSBxdcOhIHRyw6xuaCB44butIGzDvSB0aMO0IHRyb25nIGNo4bunIMSR4buBIG5naGnDqm4gY+G7qXUg4oCcWeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gY2hpIHRpw6p1IGNobyBnacOhbyBk4bulYyDigJ0gdOG6oWkgVmnhu4d0IE5hbSwgdHLDqm4gYuG7mSBz4buRIGxp4buHdSDEkGnhu4F1IHRyYSBt4bupYyBz4buRbmcgZMOibiBjxrAgMjAxOC4gUGjhuqduIG3hu4FtIFIgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgdGnhur9uIGjDoG5oIGPDoWMgYsaw4bubYyB44butIGzDvSB0aMO0IMSR4buDIGNodeG6qW4gYuG7iyBjaG8gcXXDoSB0csOsbmggdGnhur9uIGjDoG5oIG5naGnDqm4gY+G7qXUuIE3hu5l0IHPhu5EgdGjhu5FuZyBrw6ogbcO0IHThuqMgdOG7qyBi4buZIHPhu5EgbGnhu4d1IHPhuqFjaCBjxaluZyDEkcaw4bujYyBtaW5oIGjhu41hLg0KDQojIyAxLiBUw6xtIGhp4buDdSBjaOG7pyDEkeG7gSBuZ2hpw6puIGPhu6l1ICB7LnRhYnNldH0NCkNow7puZyB0w7RpIG3DtCBwaOG7j25nIGzhuqFpIHF1w6EgdHLDrG5oIHRp4bq/biBow6BuaCB44butIGzDvSBz4buRIGxp4buHdSB0aMO0IGPhu6dhIGLDoGkgbmdoacOqbiBj4bupdTogTmdvYW4sIE5nw7QgVGjhu4ssIE5ndXnhu4VuIFRo4buLIFR1eeG6v3QgTWFpLCDEkMOgbSBUaOG7iyBUaHUgVHJhbmcsIGFuZCBUcuG7i25oIFRo4buLIEjGsOG7nW5nLiAiTkdIScOKTiBD4buoVSBDw4FDIFnhur5VIFThu5Ag4bqiTkggSMav4bueTkcgxJDhur5OIFZJ4buGQyBDSEkgVEnDilUgQ0hPIEdJw4FPIEThu6RDIEPhu6ZBIEjhu5ggR0lBIMSQw4xOSCBU4bqgSSBDw4FDIFThu4hOSCDEkOG7kk5HIELhurBORyBTw5RORyBI4buSTkcuIiBUTlUgSm91cm5hbCBvZiBTY2llbmNlIGFuZCBUZWNobm9sb2d5IDIyNiwgbm8uIDA0ICgyMDIxKTogNTMtNjEuDQoNCkxpbmsgYsOgaSBiw6FvIHThuqFpOiA8aHR0cDovL2pzdC50bnUuZWR1LnZuL2pzdC9hcnRpY2xlL3ZpZXcvNDA4ND4uDQoNCg0KIyMgMi4gVMOsbSBoaeG7g3Ugc8ahIGzGsOG7o2MgduG7gSBi4buZIHPhu5EgbGnhu4d1IMSRaeG7gXUgdHJhIG3hu6ljIHPhu5FuZyBkw6JuIGPGsCBWSExTUyB7LnRhYnNldH0NCiogVG/DoG4gdsSDbiBL4bq/dCBxdeG6oyBLaOG6o28gc8OhdCBt4bupYyBz4buRbmcgZMOibiBjxrAgVmnhu4d0IE5hbSBuxINtIDIwMTggdOG6oWkNCjxodHRwczovL3d3dy5nc28uZ292LnZuL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzA1L1ZITFNTMjAxOC5wZGY+DQoNCiogQuG6o25nIGjhu49pIHbDoCBkYXRhIHPhu60gZOG7pW5nIHRyb25nIG5naGnDqm4gY+G7qXUgdOG6oWkgR29vZ2xlIGRyaXZlciBjaGlhIHPhursg4bufIHRyw6puLg0KDQoNCiogRmlsZSBSc2NyaXB0IGNodeG6qW4gYuG7iyBjaG8gYnXhu5VpIHRyw6xuaCBiw6B5IMSRw6MgxJHGsOG7o2MgdOG6o2kgbMOqbiB0csOqbiBmb2xkZXIgR29vZ2xlIGRyaXZlciwgcXXDvSDEkeG6oWkgYmnhu4N1IGPDsyB0aOG7gyB04bqjaSBjw6FjIGZpbGUgUnNjcmlwdCB2w6AgY2jhuqF5IHRo4butIG5naGnhu4dtLg0KDQojIyAzLiBY4butIGzDvSBk4buvIGxp4buHdSB0csOqbiBSLCBnw7NpIGRwbHlyIHsudGFic2V0fQ0KDQpHw7NpIGRwbHlyLCBoYXkgZ8OzaSB04buVbmcgaOG7o3AgdGlkeXZlcnNlIGN1bmcgY+G6pXAgbmhp4buBdSBow6BtIHRodeG6rW4gbOG7o2kgdHJvbmcgcXXDoSB0csOsbmggeOG7rSBsw70gdGjDtC4NCg0KTGluayBoxrDhu5tuZyBk4bqrbiBjw7MgdGjhu4MgZG93bmxvYWQgIFt04bqhaSDEkcOieV0oaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8xVVNQQkNWSG16QmdrZXpZYl9lbTBkNzl3d191Q2hGTF8vdmlldykNCihDaOG7jW4gY2h14buZdCBwaOG6o2kgdOG6oWkgY2jhu68gInThuqFpIMSRw6J5IiwgY2jhu41uIG9wZW4gbmV3IHRhYikNCg0KVOG6oWkgbGluayBuw6B5OiBodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzFVU1BCQ1ZIbXpCZ2tlelliX2VtMGQ3OXd3X3VDaEZMXy92aWV3DQoNCiMjIDQuIEzhu41jIGLhu5kg4omIIDkwMDAgaOG7mSwgcsOgIHNvw6F0IHRp4bq/bmcgVmnhu4d0LCB04bqhbyBJRCBo4buZIFRpZW5nIFZp4buHdCB2w6AgdOG6oW8gSUQgaOG7mQ0KYGBge3J9DQoNCnNldHdkKCJEOi9UYXAgaHVhbiBWSUFTTS9DaHVvaSBTZW1pbmFyL0h1b25nIFRyaW5oLzE1U2VwdCIpDQpyZXF1aXJlKHRpZHl2ZXJzZSkNCnJlcXVpcmUocmVhZHN0YXRhMTMpDQpyZXF1aXJlKHN0cmluZ2kpDQoNCiM9PT09PT09PT09PT09PT09PT09PT1ITzEuZHRhPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KSE8xIDwtIHJlYWQuZHRhMTMoIkhPMS5kdGEiKQ0KI2hlYWRITzEpDQpsZXZlbHMoSE8xJHRpbmgpIDwtIGMoIjAxIiwiMDIiLCAiMDQiLCAgIjA2IiwgIjA4IiwgIjEwIiwgIjExIiwiMTIiICwgIjE0IiwgICIxNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICIxNyIsICIxOSIsICIyMCIsICAiMjIiLCAiMjQiLCIyNSIsICIyNiIsICIyNyIsICIzMCIsICIzMSIsIjMzIiwiMzQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiMzUiLCAgIjM2IiwgIjM3IiwgIjM4IiwiNDAiLCAiNDIiLCAiNDQiLCAiNDUiLCAiNDYiLCAiNDgiLCAgIjQ5IiwgIjUxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjUyIiwiNTQiLCI1NiIsICI1OCIsIjYwIiwgIjYyIiwiNjQiLCI2NiIsIjY3IiwiNjgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiNzAiLCI3MiIsIjc0IiwiNzUiLCI3NyIsICI3OSIsIjgwIiwgIjgyIiwgIjgzIiwiODQiLCI4NiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICI4NyIsIjg5IiwiOTEiLCI5MiIsIjkzIiwgIjk0IiwgIjk1IiwiOTYiKQ0KI2hlYWRITzEgJT4lIHNlbGVjdCh0aW5oLCBodXllbiwgeGEsIGRpYWJhbiwgaG9zbykpDQpITzEgPC0gSE8xICU+JSBtdXRhdGUoSUQgPSBwYXN0ZSh0aW5oLCBodXllbiwgeGEsIGRpYWJhbiwgaG9zbywgc2VwID0gIl8iKSkNCiNoZWFkSE8xJElEKQ0KDQpITzEgJT4lIHNlbGVjdChJRCkgJT4lIGhlYWQoKQ0KDQpzYXZlKEhPMSwgZmlsZT0iSE8xLlJEYXRhIikNCg0KIz09PT09PT09PT09PT09PT09PT09PUhPMy5kdGE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpITzMgPC0gcmVhZC5kdGExMygiSE8zLmR0YSIpDQoNCiNoZWFkSE8zKQ0KdW5pcXVlKEhPMyR0aW5oKVsxOjVdDQpITzMgPC0gSE8zICU+JSANCiAgbXV0YXRlKCB0ZW50aW5oID0gc3RyaV90cmFuc19nZW5lcmFsKHRpbmgsICdsYXRpbi1hc2NpaScpKQ0KDQpITzMgPC0gSE8zICU+JSBtdXRhdGUodGVudGluaCA9IHN0cl9yZW1vdmVfYWxsKHRlbnRpbmgsICJUaW5oICIpLA0KICAgICAgICAgICAgICAgICAgICAgIHRlbnRpbmggPSBzdHJfcmVtb3ZlX2FsbCh0ZW50aW5oLCAiVGhhbmggcGhvICIpKQ0KDQp1bmlxdWUoSE8zJHRlbnRpbmgpWzE6NV0NCg0KDQpsZXZlbHMoSE8zJHRpbmgpIDwtIGMoIjAxIiwiMDIiLCAiMDQiLCAgIjA2IiwgIjA4IiwgIjEwIiwgIjExIiwiMTIiICwgIjE0IiwgICIxNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICIxNyIsICIxOSIsICIyMCIsICAiMjIiLCAiMjQiLCIyNSIsICIyNiIsICIyNyIsICIzMCIsICIzMSIsIjMzIiwiMzQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiMzUiLCAgIjM2IiwgIjM3IiwgIjM4IiwiNDAiLCAiNDIiLCAiNDQiLCAiNDUiLCAiNDYiLCAiNDgiLCAgIjQ5IiwgIjUxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjUyIiwiNTQiLCI1NiIsICI1OCIsIjYwIiwgIjYyIiwiNjQiLCI2NiIsIjY3IiwiNjgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiNzAiLCI3MiIsIjc0IiwiNzUiLCI3NyIsICI3OSIsIjgwIiwgIjgyIiwgIjgzIiwiODQiLCI4NiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICI4NyIsIjg5IiwiOTEiLCI5MiIsIjkzIiwgIjk0IiwgIjk1IiwiOTYiICkNCg0KSE8zIDwtIEhPMyAlPiUgDQogIG11dGF0ZShJRCA9IHBhc3RlKHRpbmgsIGh1eWVuLCB4YSwgZGlhYmFuLCBob3NvLCBzZXAgPSAiXyIpKQ0KDQpITzMgPC0gSE8zICU+JSBmaWx0ZXIoSUQgJWluJSBITzEkSUQpDQoNCnNhdmUoSE8zLCBmaWxlPSJITzMuUkRhdGEiKQ0KDQoNCiM9PT09PT09PT09PT09PT09PT09PT1NdWMxQS5kdGE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpNdWMxQSA8LSByZWFkLmR0YTEzKCJNdWMxQS5kdGEiKQ0KaGVhZChNdWMxQSkNCmxldmVscyhNdWMxQSR0aW5oKTwtYygiMDEiLCIwMiIsICIwNCIsICAiMDYiLCAiMDgiLCAiMTAiLCAiMTEiLCIxMiIgLCAiMTQiLCAgIjE1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjE3IiwgIjE5IiwgIjIwIiwgICIyMiIsICIyNCIsIjI1IiwgIjI2IiwgIjI3IiwgIjMwIiwgIjMxIiwiMzMiLCIzNCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICIzNSIsICAiMzYiLCAiMzciLCAiMzgiLCI0MCIsICI0MiIsICI0NCIsICI0NSIsICI0NiIsICI0OCIsICAiNDkiLCAiNTEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiNTIiLCI1NCIsIjU2IiwgIjU4IiwiNjAiLCAiNjIiLCI2NCIsIjY2IiwiNjciLCI2OCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICI3MCIsIjcyIiwiNzQiLCI3NSIsIjc3IiwgIjc5IiwiODAiLCAiODIiLCAiODMiLCI4NCIsIjg2IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjg3IiwiODkiLCI5MSIsIjkyIiwiOTMiLCAiOTQiLCAiOTUiLCI5NiIgKQ0KTXVjMUEgIDwtIE11YzFBICAlPiUNCiAgbXV0YXRlKElEID0gcGFzdGUodGluaCwgaHV5ZW4sIHhhLCBkaWFiYW4sIGhvc28sIHNlcCA9ICJfIikpDQoNCk11YzFBIDwtIE11YzFBICU+JSBmaWx0ZXIoSUQgJWluJSBITzEkSUQpDQoNCmxldmVscyhNdWMxQSRtMWFjMikgPC0gYygiTWFsZSIsIkZlbWFsZSIpDQpsZXZlbHMoTXVjMUEkbTFhYzMpIDwtIGMoImhlYWQiLCJzcG91c2UiLCJjaGlsZHJlbiIsInBhcmVudHMiLCJncmFuZHBhcmVudHMiLCJncmFuZGNoaWxkcmVuIiwib3RoZXIiLCJOQSIpDQpsZXZlbHMoTXVjMUEkbTFhYzYpIDwtIGMoIlllcyIsIk5vIiwiTkEiKQ0KbGV2ZWxzKE11YzFBJG0xYWM4KSA8LSBjKCJTaW5nbGUiLCJNYXJyaWVkIiwiV2lkb3dlZCIsIkRpdm9yY2VkIiwiU2VwYXJhdGVkIiwiTkEiKQ0KDQpzYXZlKE11YzFBLCBmaWxlPSJNdWMxQS5SRGF0YSIpDQoNCg0KIz09PT09PT09PT09PT09PT09PT09PU1VQzJYLmR0YT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCk1VQzJYIDwtIHJlYWQuZHRhMTMoIk1VQzJYLmR0YSIpDQpoZWFkKE1VQzJYLCAyKQ0KDQpNVUMyWCA8LSBNVUMyWCAlPiUgDQogIG11dGF0ZSggdGVudGluaCA9IHN0cmlfdHJhbnNfZ2VuZXJhbCh0aW5oLCAnbGF0aW4tYXNjaWknKSkNCg0KTVVDMlggPC0gTVVDMlggJT4lIG11dGF0ZSh0ZW50aW5oID0gc3RyX3JlbW92ZV9hbGwodGVudGluaCwgIlRpbmggIiksDQogICAgICAgICAgICAgICAgICAgICAgdGVudGluaCA9IHN0cl9yZW1vdmVfYWxsKHRlbnRpbmgsICJUaGFuaCBwaG8gIikpDQpsZXZlbHMoTVVDMlgkdGluaCkgPC0gYygiMDEiLCIwMiIsICIwNCIsICAiMDYiLCAiMDgiLCAiMTAiLCAiMTEiLCIxMiIgLCAiMTQiLCAgIjE1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTciLCAiMTkiLCAiMjAiLCAgIjIyIiwgIjI0IiwiMjUiLCAiMjYiLCAiMjciLCAiMzAiLCAiMzEiLCIzMyIsIjM0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMzUiLCAgIjM2IiwgIjM3IiwgIjM4IiwiNDAiLCAiNDIiLCAiNDQiLCAiNDUiLCAiNDYiLCAiNDgiLCAgIjQ5IiwgIjUxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNTIiLCI1NCIsIjU2IiwgIjU4IiwiNjAiLCAiNjIiLCI2NCIsIjY2IiwiNjciLCI2OCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjcwIiwiNzIiLCI3NCIsIjc1IiwiNzciLCAiNzkiLCI4MCIsICI4MiIsICI4MyIsIjg0IiwiODYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4NyIsIjg5IiwiOTEiLCI5MiIsIjkzIiwgIjk0IiwgIjk1IiwiOTYiICkNCk1VQzJYICA8LSBNVUMyWCAgJT4lIG11dGF0ZShJRCA9IHBhc3RlKHRpbmgsIGh1eWVuLCB4YSwgZGlhYmFuLCBob3NvLCBzZXAgPSAiXyIpKQ0KDQpNVUMyWCA8LSBNVUMyWFt3aGljaChNVUMyWCRJRCAlaW4lIEhPMSRJRCksIF0NCnNhdmUoTVVDMlgsIGZpbGU9Ik1VQzJYLlJEYXRhIikNCg0KDQojPT09PT09PT09PT09PT09PT09PT09Y2hpdGlldS5kdGE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpjaGl0aWV1IDwtIHJlYWQuZHRhMTMoImNoaXRpZXUuZHRhIikNCmhlYWQoY2hpdGlldSwyKQ0KbGV2ZWxzKGNoaXRpZXUkdGluaCkgPC0gYygiMDEiLCIwMiIsICIwNCIsICAiMDYiLCAiMDgiLCAiMTAiLCAiMTEiLCIxMiIgLCAiMTQiLCAgIjE1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNyIsICIxOSIsICIyMCIsICAiMjIiLCAiMjQiLCIyNSIsICIyNiIsICIyNyIsICIzMCIsICIzMSIsIjMzIiwiMzQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjM1IiwgICIzNiIsICIzNyIsICIzOCIsIjQwIiwgIjQyIiwgIjQ0IiwgIjQ1IiwgIjQ2IiwgIjQ4IiwgICI0OSIsICI1MSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNTIiLCI1NCIsIjU2IiwgIjU4IiwiNjAiLCAiNjIiLCI2NCIsIjY2IiwiNjciLCI2OCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNzAiLCI3MiIsIjc0IiwiNzUiLCI3NyIsICI3OSIsIjgwIiwgIjgyIiwgIjgzIiwiODQiLCI4NiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiODciLCI4OSIsIjkxIiwiOTIiLCI5MyIsICI5NCIsICI5NSIsIjk2IiApDQpjaGl0aWV1ICA8LSBjaGl0aWV1ICU+JSBtdXRhdGUoSUQgPSBwYXN0ZSh0aW5oLCBodXllbiwgeGEsIGRpYWJhbiwgaG9zbywgc2VwID0gIl8iKSkNCg0Kc2F2ZShjaGl0aWV1LCBmaWxlPSJjaGl0aWV1LlJEYXRhIikNCg0KDQojPT09PT09PT09PT09PT09PT09PT09TXVjNGEuZHRhPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KTXVjNGEgPC0gcmVhZC5kdGExMygiTXVjNGEuZHRhIikNCmhlYWQoTXVjNGEsIDIpDQpsZXZlbHMoTXVjNGEkdGluaCkgPC0gYygiMDEiLCIwMiIsICIwNCIsICAiMDYiLCAiMDgiLCAiMTAiLCAiMTEiLCIxMiIgLCAiMTQiLCAgIjE1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTciLCAiMTkiLCAiMjAiLCAgIjIyIiwgIjI0IiwiMjUiLCAiMjYiLCAiMjciLCAiMzAiLCAiMzEiLCIzMyIsIjM0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMzUiLCAgIjM2IiwgIjM3IiwgIjM4IiwiNDAiLCAiNDIiLCAiNDQiLCAiNDUiLCAiNDYiLCAiNDgiLCAgIjQ5IiwgIjUxIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNTIiLCI1NCIsIjU2IiwgIjU4IiwiNjAiLCAiNjIiLCI2NCIsIjY2IiwiNjciLCI2OCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjcwIiwiNzIiLCI3NCIsIjc1IiwiNzciLCAiNzkiLCI4MCIsICI4MiIsICI4MyIsIjg0IiwiODYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4NyIsIjg5IiwiOTEiLCI5MiIsIjkzIiwgIjk0IiwgIjk1IiwiOTYiICkNCk11YzRhICA8LSBNdWM0YSAlPiUgbXV0YXRlKElEID0gcGFzdGUodGluaCwgaHV5ZW4sIHhhLCBkaWFiYW4sIGhvc28sIHNlcCA9ICJfIikpDQoNCnNhdmUoTXVjNGEsZmlsZT0iTXVjNGEuUkRhdGEiKQ0KYGBgDQoNCiMjIDUuIFLDoCBzb8OhdCBjw6FjIGJp4bq/biBsacOqbiBxdWFuIMSR4bq3YyDEkWnhu4NtIEdJQSDEkMOMTkggdsOgIENI4bumIEjhu5gNCmBgYHtyfQ0KIz09PT09PT09PT09PT09PT09PT09PTEuIEhPMy5kdGE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCmxvYWQoIkhPMy5SRGF0YSIpDQpuYW1lcyhITzMpDQpoZWFkKEhPMywgMikNCiN0aHVicTogdGh1IGJpbmggcXVhbiBuZ3VvaS90aGFuZyAobmdoaW4gZG9uZykNCiN0b25ndGh1OiB0b25nIHRodSBuaGFwIGhvIGdpYSBkaW5oL25hbSAobmdoaW4gZG9uZykNCkhPMyA8LSBITzMgJT4lIGZpbHRlcihpcy5uYSh0aHVicSkgPT0gRkFMU0UpDQpITzMgPC0gSE8zICU+JSAgc2VsZWN0KElELCB0aW5oLCB0ZW50aW5oLCB0aHVicSwgIHRvbmd0aHUgKSAlPiUgdW5pcXVlKCkNCnN1bW1hcnkoSE8zKQ0KSE8zIDwtIEhPMyAlPiUgZmlsdGVyKHRodWJxID4gMCkgIyBkZWxldGUgMiBvYnNlcnZhdGlvbnMNCg0KIz09PT09PT09PT09PT09PT09PT09PTIuIE11YzFBLmR0YT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KbG9hZCgiTXVjMUEuUkRhdGEiKQ0KaGVhZChNdWMxQSwgMikNCg0KIz09PT09PT09PT09PT09PT09PUxheSBjYWMgYmllbiBzYXU6DQoNCiNHSU9JVElOSF9DSCA6IG0xYWMyDQojVFVPSV9DSCA6bTFhYzUNCiNIT05OSEFOX0NIIDogbTFhYzgNCnN1bW1hcnkoTXVjMUEkbTFhYzMgKQ0KTXVjMUEgJT4lIGZpbHRlcihtMWFjMyA9PSAiaGVhZCIpICU+JSANCiAgc2VsZWN0KG0xYW1hKSAlPiUgc3VtbWFyeSgpDQojSU1QT1JUQU5UIE5PVEU6IGNodSBobyA9IG0xYWMzID09ICJoZWFkIiBhbmQgQUxTTyBtMWFtYSA9PSAxDQoNCk11YzFBLmhlYWQgPC0gTXVjMUEgJT4lIA0KICByZW5hbWUoR0lPSVRJTkhfQ0ggPSBtMWFjMiwgVFVPSV9DSCA9bTFhYzUsIEhPTk5IQU5fQ0ggPSBtMWFjOCkgJT4lDQogIGZpbHRlcihtMWFjMyA9PSAiaGVhZCIpICU+JSANCiAgc2VsZWN0KElELCBHSU9JVElOSF9DSCwgVFVPSV9DSCwgSE9OTkhBTl9DSCkNCg0KaGVhZChNdWMxQS5oZWFkLCAyKQ0KI3N1bW1hcnkoTXVjMUEuaGVhZCkNCiMgRHJvcCBOQSBmYWN0b3IgaW4gSE9OTkhBTl9DSA0KTXVjMUEuaGVhZCA8LSBNdWMxQS5oZWFkICU+JQ0KICBmaWx0ZXIoSE9OTkhBTl9DSCAhPSAiTkEiKSAlPiUgDQogIGRyb3BsZXZlbHMoKQ0Kc3VtbWFyeShNdWMxQS5oZWFkKQ0KDQoNCkdJQU9EVUMxOCA8LSBsZWZ0X2pvaW4oSE8zLCBNdWMxQS5oZWFkKSAjIERPTkUNCmhlYWQoR0lBT0RVQzE4LCAyKQ0KDQoNCmxldmVscyhHSUFPRFVDMTgkSE9OTkhBTl9DSCkgPC0gYygiT3RoZXIiLCAgICAiTWFycmllZCIgLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3RoZXIiLCAgICJPdGhlciIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciIsICAgIk90aGVyIiAgKQ0KDQpzdW1tYXJ5KEdJQU9EVUMxOCkNCg0KTXVjMUEuaGVhZCA8LSBOVUxMDQojPT09PT09PT09PT09PT09PT09My4gIEhPMS5SRGF0YT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KIz09PT09PT09PT09PT09PT09PUxheSBjYWMgYmllbiBzYXU6DQojREFOVE9DX0NIOyAiS2luaCIsICJNaW5vcml0eSINCiNOT0lTT05HOiAiVVJCQU4iLCJSVVJBTCINCiNUU05HVU9JOiBzbyB0aGFuaCB2aWVuIGhvDQpsb2FkKCJITzEuUkRhdGEiKQ0KaGVhZChITzEsIDIpDQoNCkhPMSA8LSBITzEgJT4lIHJlbmFtZShOT0lTT05HID0gdHRudCwgREFOVE9DX0NIID0gZGFudG9jLCBUU05HVU9JID0gdHNuZ3VvaSApICU+JQ0KICBzZWxlY3QoSUQsIE5PSVNPTkcsIERBTlRPQ19DSCwgVFNOR1VPSSkNCg0KSE8xIDwtIEhPMSAlPiUgICBtdXRhdGUoREFOVE9DX0NIID0gYXMuZmFjdG9yKGlmZWxzZShEQU5UT0NfQ0ggPT0gMSwgIktpbmgiLCAiTWlub3JpdHkiKSkpDQogIA0KbGV2ZWxzKEhPMSROT0lTT05HKSA8LSBjKCJVUkJBTiIsIlJVUkFMIikNCg0KbmFtZXMoR0lBT0RVQzE4KQ0KbmFtZXMoSE8xKQ0KR0lBT0RVQzE4ICA8LSBsZWZ0X2pvaW4oR0lBT0RVQzE4LCBITzEpDQpuYW1lcyhHSUFPRFVDMTgpDQoNCnN1bW1hcnkoR0lBT0RVQzE4ICkNCg0KDQojPT09PT09PT09PT09PT09PT09My4gTXVjNGEuUkRhdGE9PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojLS0tLS0tLS0tLS0tLS0tLS1OZ2hlIG5naGllcCBjaHUgaG8NCiNMQU1DT05HQU5MVU9ORyANCiNOT05HTEFNVEhVWVNBTiANCiNLSU5IRE9BTkhESUNIVlUgDQoNCmxvYWQoIk11YzRhLlJEYXRhIikNCmhlYWQoTXVjNGEsIDIpDQpsZW5ndGgodW5pcXVlKE11YzRhJElEKSkNCk11YzRhIDwtIE11YzRhICU+JSBmaWx0ZXIoSUQgJWluJSBHSUFPRFVDMTgkSUQpDQogIA0KIyBtNGFtYSA9IDEgY2h1IGhvDQpNdWM0YSA8LSBNdWM0YSAlPiUgZmlsdGVyKG00YW1hID09IDEgJiBJRCAlaW4lIEdJQU9EVUMxOCRJRCkgJT4lIA0KICByZW5hbWUoTEFNQ09OR0FOTFVPTkcgPSBtNGFjMWEsIE5PTkdMQU1USFVZU0FOID0gbTRhYzFiICwNCiAgICAgICAgIEtJTkhET0FOSERJQ0hWVSA9bTRhYzFjKSAlPiUNCiAgc2VsZWN0KElELCBMQU1DT05HQU5MVU9ORywgTk9OR0xBTVRIVVlTQU4sIEtJTkhET0FOSERJQ0hWVSApDQoNCmxldmVscyhNdWM0YSRMQU1DT05HQU5MVU9ORykgPC0gYygiWWVzIiwgIk5vIikNCmxldmVscyhNdWM0YSROT05HTEFNVEhVWVNBTikgPC0gYygiWWVzIiwgIk5vIikNCmxldmVscyhNdWM0YSRLSU5IRE9BTkhESUNIVlUpIDwtIGMoIlllcyIsICJObyIpDQoNCk11YzRhIDwtIE11YzRhICU+JQ0KICBtdXRhdGUoTkdIRU5HSElFUF9DSCA9IGNhc2Vfd2hlbihMQU1DT05HQU5MVU9ORyA9PSAiWWVzIiB+ICJMQU1DT05HQU5MVU9ORyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PTkdMQU1USFVZU0FOID09ICJZZXMiIH4gIk5PTkdMQU1USFVZU0FOIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJLSU5IRE9BTkhESUNIVlUiKSkgJT4lIA0KICBzZWxlY3QoSUQsIE5HSEVOR0hJRVBfQ0gpDQoNCkdJQU9EVUMxOCAgPC0gbGVmdF9qb2luKEdJQU9EVUMxOCwgTXVjNGEgKQ0Kc3VtbWFyeShHSUFPRFVDMTgpDQpNdWM0YSA8LSBOVUxMDQoNCg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU1VQzJYLlJEYXRhOiBCQU5HQ0FQX0NILS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpsb2FkKCJNVUMyWC5SRGF0YSIpDQoNCm5hbWVzKE1VQzJYKQ0KI2hlYWQoTVVDMlgsIDIpDQojIG0yeGMyYSBCYW5nIGNhcCBjYW8gbmhhdA0KDQpNVUMyWC5oZWFkIDwtIE1VQzJYICU+JSBmaWx0ZXIobTJ4bWEgPT0gMSYgIElEICVpbiUgR0lBT0RVQzE4JElEICkgJT4lIA0KICBzZWxlY3QoSUQsICBtMnhjMmEpDQoNCk1VQzJYLmhlYWQkbTJ4YzJhIDwtIGFzLmZhY3RvcihNVUMyWC5oZWFkJG0yeGMyYSkNCnN1bW1hcnkoTVVDMlguaGVhZCRtMnhjMmEpDQpsZXZlbHMoTVVDMlguaGVhZCRtMnhjMmEpDQoNCmxldmVscyhNVUMyWC5oZWFkJG0yeGMyYSkgPC0gYygiTm8gcXVhbGlmaWNhdGlvbiIsICJObyBxdWFsaWZpY2F0aW9uIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByaW1hcnkgc2Nob29sIiwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWNvbmRhcnktaGlnaCBzY2hvb2wiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWNvbmRhcnktaGlnaCBzY2hvb2wiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5pdmVyc2l0eSIsICJVbml2ZXJzaXR5IiwgICJVbml2ZXJzaXR5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5pdmVyc2l0eSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIHF1YWxpZmljYXRpb24iKQ0Kc3VtbWFyeShNVUMyWC5oZWFkJG0yeGMyYSkNCg0KTVVDMlguaGVhZCRtMnhjMmFbaXMubmEoTVVDMlguaGVhZCRtMnhjMmEpXSA8LSAiTm8gcXVhbGlmaWNhdGlvbiINCg0KTVVDMlguaGVhZCA8LSBNVUMyWC5oZWFkICU+JSByZW5hbWUoQkFOR0NBUF9DSCA9IG0yeGMyYSkNCg0KR0lBT0RVQzE4ICA8LSBsZWZ0X2pvaW4oR0lBT0RVQzE4LCBNVUMyWC5oZWFkKQ0Kc3VtbWFyeShHSUFPRFVDMTgpDQpNVUMyWC5oZWFkIDwtIE5VTEwNCg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU1VQzJYLlJEYXRhOiBTT05BTURBTkdIT0MsIFNPTlVEQU5HSE9DLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KI2hlYWQoTXVjMUEpDQojLS0tLS0tLS0tLS1JbmRpdmlkdWFsIElEDQpNdWMxQSA8LSBNdWMxQSAlPiUgbXV0YXRlKElEaW5kID0gcGFzdGUwKElELCAiXyIsIG0xYW1hKSkNCmhlYWQoTXVjMUEkSURpbmQsIDIpDQojTXVjMUEkbTFhYzI6IEdJT0lUSU5IIA0KDQpNdWMxQS5HSU9JVElOSCA8LSBNdWMxQSAlPiUgcmVuYW1lKEdJT0lUSU5IID0gbTFhYzIpICU+JSANCiAgc2VsZWN0KElELCBJRGluZCwgR0lPSVRJTkgpDQpoZWFkKE11YzFBLkdJT0lUSU5ILCAyKQ0KDQojTVVDMlgkbTJ4YzQ6IEhpZW4gbmF5IGNvIGRpIGhvYyBraG9uZz8NCiNoZWFkKE1VQzJYKQ0KdW5pcXVlKE1VQzJYJG0yeGM0KQ0KDQojc3VtbWFyeShNVUMyWCRtMnhjNCkNCiNsZXZlbHMoTVVDMlgkbTJ4YzQpDQpsZXZlbHMoTVVDMlgkbTJ4YzQpIDwtIGMoIlllcyIsICJZZXMiLCAiTm8iKQ0KTVVDMlgkbTJ4YzRbaXMubmEoTVVDMlgkbTJ4YzQpXSA8LSAiTm8iDQojc3VtbWFyeShNVUMyWCRtMnhjNCkNCg0KDQojLS0tLS0tLS0tLS1JbmRpdmlkdWFsIElEDQojaGVhZChNVUMyWCkNCk1VQzJYIDwtIE1VQzJYICU+JSBtdXRhdGUoSURpbmQgPSBwYXN0ZTAoSUQsICJfIiwgbTJ4bWEpKQ0KI2hlYWQoTVVDMlgkSURpbmQpDQojS2llbSB0cmEgTVVDMlgkSURpbmQgdGh1b2MgTXVjMUEkSURpbmQNCnNldGRpZmYoTVVDMlgkSURpbmQsIE11YzFBJElEaW5kKSAjRE9ORQ0KDQpNdWMyQUJfTkFNTlUgPC0gTVVDMlggJT4lIGZpbHRlcihtMnhjNCA9PSAiWWVzIikgJT4lIA0KICBzZWxlY3QoSUQsIElEaW5kLCAgbTJ4YzQpDQoNCk11YzJBQl9OQU1OVSA8LSBsZWZ0X2pvaW4oTXVjMkFCX05BTU5VLCBNdWMxQS5HSU9JVElOSCkNCiNoZWFkKE11YzJBQl9OQU1OVSApDQojc3VtbWFyeShNdWMyQUJfTkFNTlUgKQ0KDQoNCk11YzJBQl9OQU1OVV9Db3VudCA8LSBNdWMyQUJfTkFNTlUgJT4lIGdyb3VwX2J5KElELCAgR0lPSVRJTkgpICU+JQ0KICBzdW1tYXJpc2UobnZhbHVlID0gbigpKSAjIyBDb3VudCAjU09OQU1EQU5HSE9DICNTT05VREFOR0hPQw0KI2hlYWQoTXVjMkFCX05BTU5VX0NvdW50KQ0KDQpTT05BTURBTkdIT0MgPC0gTXVjMkFCX05BTU5VX0NvdW50ICU+JSANCiAgZmlsdGVyKEdJT0lUSU5IID09ICJNYWxlIikgJT4lIA0KICByZW5hbWUoU09OQU1EQU5HSE9DID0gbnZhbHVlICkgJT4lDQogIHNlbGVjdChJRCwgU09OQU1EQU5HSE9DICkNCg0KU09OVURBTkdIT0MgPC0gTXVjMkFCX05BTU5VX0NvdW50ICU+JSANCiAgZmlsdGVyKEdJT0lUSU5IID09ICJGZW1hbGUiKSAlPiUgDQogIHJlbmFtZShTT05VREFOR0hPQyA9IG52YWx1ZSApICU+JQ0KICBzZWxlY3QoSUQsIFNPTlVEQU5HSE9DICkNCg0KR0lBT0RVQzE4ICA8LSBsZWZ0X2pvaW4oR0lBT0RVQzE4LCBTT05BTURBTkdIT0MgKQ0KR0lBT0RVQzE4ICA8LSBsZWZ0X2pvaW4oR0lBT0RVQzE4LCBTT05VREFOR0hPQyApDQpHSUFPRFVDMTgkU09OQU1EQU5HSE9DW2lzLm5hKEdJQU9EVUMxOCRTT05BTURBTkdIT0MpXSA8LSAwDQpHSUFPRFVDMTgkU09OVURBTkdIT0NbaXMubmEoR0lBT0RVQzE4JFNPTlVEQU5HSE9DKV0gPC0gMA0KDQpHSUFPRFVDMTggPC0gR0lBT0RVQzE4ICU+JSANCiAgbXV0YXRlKHNvbmd1b2lkaWhvYyA9IFNPTkFNREFOR0hPQyArIFNPTlVEQU5HSE9DKQ0KDQpHSUFPRFVDMTggPC0gR0lBT0RVQzE4ICU+JSBtdXRhdGUoc29uZ3VvaWRpaG9jRmFjdG9yID0gYXMuZmFjdG9yKHNvbmd1b2lkaWhvYyApKQ0KDQoNCnN1bW1hcnkoR0lBT0RVQzE4KQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1UUk9DQVANCiNtMnhjOTogVFJPQ0FQDQpsZXZlbHMoTVVDMlgkbTJ4YzkpIA0KbGV2ZWxzKE1VQzJYJG0yeGM5KSA8LSBjKCJZZXMiLCAiTm8iKSANCk1VQzJYX1RST0NBUCA8LSBNVUMyWCAlPiUgc2VsZWN0KElELCBtMnhjOSkgJT4lIA0KICBmaWx0ZXIobTJ4YzkgPT0gIlllcyIgKSAlPiUgdW5pcXVlKCkNCk1VQzJYX1RST0NBUCA8LSBNVUMyWF9UUk9DQVAgJT4lIHJlbmFtZShUUk9DQVAgPSBtMnhjOSkNCg0KR0lBT0RVQzE4IDwtIGxlZnRfam9pbihHSUFPRFVDMTgsIE1VQzJYX1RST0NBUCkNCkdJQU9EVUMxOCRUUk9DQVBbaXMubmEoR0lBT0RVQzE4JFRST0NBUCldIDwtICJObyINCnN1bW1hcnkoR0lBT0RVQzE4JFRST0NBUCkNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWNoaXRpZXUuUkRBVEENCmxvYWQoImNoaXRpZXUuUkRhdGEiKQ0KI2hlYWQoY2hpdGlldSkNCg0KY2hpdGlldSA8LSBjaGl0aWV1ICU+JSBtdXRhdGUoQ0hJR0QgPSB0b25nY2hpX2dkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRPTkdDSElHRCA9IHRvbmdjaGlfZ2QqMTAwL3RvbmdjaGl0aWV1KQ0KDQoNCg0KR0lBT0RVQzE4IDwtIEdJQU9EVUMxOCAlPiUgcmVuYW1lKFRIVUJRID0gdGh1YnEpDQpHSUFPRFVDMTggPC0gR0lBT0RVQzE4W3doaWNoKEdJQU9EVUMxOCRUSFVCUSA+PTApLCBdDQoNCkdJQU9EVUMxOCR0b25ndGh1IDwtIE5VTEwNCkdJQU9EVUMxOCA8LSBsZWZ0X2pvaW4oR0lBT0RVQzE4LCBjaGl0aWV1ICU+JSBzZWxlY3QoSUQsIENISUdELCBUT05HQ0hJR0QpKQ0Kc3VtbWFyeShHSUFPRFVDMTgpDQpzYXZlKEdJQU9EVUMxOCwgZmlsZSA9ICJHSUFPRFVDMTguUkRhdGEiKQ0KDQpgYGANCg0KIyMgNi4gUsOgIHNvw6F0IGPDoWMgYmnhur9uIGxpw6puIHF1YW4gY2hpIHRpw6p1IGNobyBDw4EgTkjDgk4sIHThu6tuZyBj4bqlcCBo4buNYyB2w6AgdOG7q25nIGtob+G6o24gbeG7pWMuDQpgYGB7cn0NCg0KIz09PT09PT09PT09PT09PT09PUJhY2sgdG8gTVVDMlguUkRBVEENCg0Kc2V0d2QoIkQ6L1RhcCBodWFuIFZJQVNNL0NodW9pIFNlbWluYXIvSHVvbmcgVHJpbmgvMTVTZXB0IikNCnJlcXVpcmUodGFibGVvbmUpDQpyZXF1aXJlKHJlc2hhcGUyKQ0KcmVxdWlyZShncmlkRXh0cmEpDQojLS0tLSBUbyBnZXQgY28gY2F1IGNoaSB0aWV1IGJ5IGluZGl2aWR1YWwgYW5kIGJ5IGNhcCBob2MtLS0tLS0tDQpsb2FkKCJNVUMyWC5SRGF0YSIpIA0KI01VQzJYJG0yeGM0OiBIaWVuIG5heSBjbyBkaSBob2Mga2hvbmc/DQpoZWFkKE1VQzJYKQ0KdW5pcXVlKE1VQzJYJG0yeGM0KQ0KDQpzdW1tYXJ5KE1VQzJYJG0yeGM0KQ0KbGV2ZWxzKE1VQzJYJG0yeGM0KQ0KbGV2ZWxzKE1VQzJYJG0yeGM0KSA8LSBjKCJZZXMiLCAiWWVzIiwgIk5vIikNCk1VQzJYJG0yeGM0W2lzLm5hKE1VQzJYJG0yeGM0KV0gPC0gIk5vIg0Kc3VtbWFyeShNVUMyWCRtMnhjNCkNCg0KDQojLS0tLS0tLS0tLS1JbmRpdmlkdWFsIElEDQojaGVhZE1VQzJYKQ0KTVVDMlggPC0gTVVDMlggJT4lIG11dGF0ZShJRGluZCA9IHBhc3RlMChJRCwgIl8iLCBtMnhtYSkpDQojaGVhZE1VQzJYJElEaW5kKQ0KbmFtZXMoTVVDMlgpDQoNCkNDQ0hJR0QgPC0gTVVDMlggJT4lIGZpbHRlcihtMnhjNCA9PSAiWWVzIikgJT4lIA0KICBzZWxlY3QoSUQsIElEaW5kLCBtMnhjMSwgbTJ4YzUsIG0yeGM2LCBtMnhjNywgbTJ4YzggKQ0Kc3VtbWFyeShDQ0NISUdEKQ0KDQpuYW1lcyhNVUMyWCkNCg0KTVVDMlggPC0gTVVDMlggJT4lIG11dGF0ZShIT0NQSEkgPSBtMnhjMTFhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFJVFVZRU4gPSBtMnhjMTFiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBET05HR09QID0gbTJ4YzExYyArbTJ4YzExZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgUVVBTkFPID0gbTJ4YzExZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgU0dLID0gbTJ4YzExZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgRFVOR0NVID0gbTJ4YzExZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgSE9DVEhFTSA9IG0yeGMxMWgsDQogICAgICAgICAgICAgICAgICAgICAgICAgIENISUdES0hBQyA9IG0yeGMxMWksDQogICAgICAgICAgICAgICAgICAgICAgICAgIENISUFMTCA9IG0yeGMxMWspDQojY3RnZDogY2hpIHRpZXUgZ2lhbyBkdWMNCk1VQzJYLmN0Z2QgPC0gTVVDMlggJT4lIGZpbHRlcihJRGluZCAlaW4lIENDQ0hJR0QkSURpbmQpJT4lDQogIHNlbGVjdChJRCwgSURpbmQsIHRpbmgsIHRlbnRpbmgsIEhPQ1BISSwgVFJBSVRVWUVOLCBET05HR09QLCBRVUFOQU8sDQogICAgICAgICBTR0ssIERVTkdDVSwgSE9DVEhFTSwgQ0hJR0RLSEFDLCBDSElBTEwsIG0yeGM5KSAlPiUgdW5pcXVlKCkNCnN1bW1hcnkoTVVDMlguY3RnZCkNCiNhZGQgc29tZSBmaWx0ZXIgaGVyZToNCg0KTVVDMlguY3RnZCAgJT4lIGZpbHRlcihDSElBTEwgPT0gMCkgJT4lIHN1bW1hcnkoKQ0KDQpNVUMyWC5jdGdkIDwtIE1VQzJYLmN0Z2QgJT4lIA0KICBmaWx0ZXIoSE9DUEhJID49MCAmICBUUkFJVFVZRU4gPj0gMCAmIERPTkdHT1A+PTAgJiBRVUFOQU8gPj0gMCYgU0dLID49IDAgJiBEVU5HQ1UgPj0wICYgSE9DVEhFTSA+PTAgJiBDSElHREtIQUM+PTApDQoNCg0KQ0NDSElHRCA8LSBsZWZ0X2pvaW4oQ0NDSElHRCwgTVVDMlguY3RnZCkNCg0KQ0NDSElHRCA8LSBDQ0NISUdEICU+JSByZW5hbWUoVFJPQ0FQID0gbTJ4YzkpDQpsZXZlbHMoQ0NDSElHRCAkVFJPQ0FQKSA8LSBjKCJZZXMiLCAiTm8iKQ0KDQoNCkNDQ0hJR0QgPC0gQ0NDSElHRCAlPiUgZmlsdGVyKENISUFMTCA+IDAgKSAjOTA2DQpsZXZlbHMoQ0NDSElHRCRtMnhjNikgPC0gYygiTnVyc2VyeSBTY2hvb2wiLCAiUHJpbWFyeSBTY2hvb2wiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlY29uZGFyeSBzY2hvb2wiLCAiU2Vjb25kYXJ5IHNjaG9vbCIsICJWb2NhdGlvbmFsIHNjaG9vbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiVm9jYXRpb25hbCBzY2hvb2wiLCAiVm9jYXRpb25hbCBzY2hvb2wiLCAiVm9jYXRpb25hbCBzY2hvb2wiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbml2ZXJzaXR5IiwgIlVuaXZlcnNpdHkiLCAiVW5pdmVyc2l0eSIsICJVbml2ZXJzaXR5IiwgIk90aGVycyIpDQoNCnN1bW1hcnkoQ0NDSElHRCkNCnNhdmUoQ0NDSElHRCwgZmlsZSA9ICJDQ0NISUdELlJEYXRhIikgI0RPTkUNCmBgYA0KDQojIyA3LkPDoWMgdGjhu5FuZyBjxqEgY8ahIGLhuqNuIHbhu4EgYuG6o25nL2jDrG5oIGPhu6dhIGLDoGkgbmdoacOqbiBj4bupdQ0KDQpgYGB7cn0NCiMtLS0tLS0tLVNFQzE6IExPQyBDQUMgVElOSCBET05HIEJBTkcgU09ORyBIT05HLS0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpHSUFPRFVDMTggPC0gR0lBT0RVQzE4ICU+JQ0KICBmaWx0ZXIodGluaCAlaW4lIGMoIjAxIiwgIjI2IiwgIjI3IiwgIjIyIiwgDQogICAgICAgICAgICAgICAgICAgICAiMzAiLCAiMzEiLCAiMzMiLCAiMzQiLCAiMzUiLCAiMzYiLCAiMzciKSkgDQpgYGANCg0KYGBge3J9DQojPT09PT09PT09U0VDMjogRE8gQ0xFQU5JTkcgTU9SRSEhISEhISEhISEhISEhISExDQpDQ0NISUdEX0hIIDwtIENDQ0hJR0QgJT4lIGdyb3VwX2J5KElEKSAlPiUgc3VtbWFyaXNlKEhPQ1RIRU0gPSBzdW0oSE9DVEhFTSkpDQoNCkNDQ0hJR0RfSEggPC0gQ0NDSElHRF9ISCAlPiUgbXV0YXRlKEhPQ1RIRU0gPSBpZmVsc2UoSE9DVEhFTSA+IDAgLCAiWWVzIiwgIk5vIikpDQojR0lBT0RVQzE4DQoNCkdJQU9EVUMxOCAgPC0gR0lBT0RVQzE4IFt3aGljaChHSUFPRFVDMTggJENISUdEIDwgNjAwMDApLCBdICNkZWxldGUgc29tZSBvdXRsaWVyDQoNCnN1bW1hcnkoR0lBT0RVQzE4JFRPTkdDSElHRCkNCmxlbmd0aChHSUFPRFVDMTgkVE9OR0NISUdEW0dJQU9EVUMxOCRUT05HQ0hJR0QgPT0gMF0pDQpkaW0oR0lBT0RVQzE4KQ0KR0lBT0RVQzE4IDwtIGxlZnRfam9pbihHSUFPRFVDMTgsIENDQ0hJR0RfSEgpDQpHSUFPRFVDMTgkSE9DVEhFTVtpcy5uYShHSUFPRFVDMTgkSE9DVEhFTSldIDwtICJObyINCnN1bW1hcnkoR0lBT0RVQzE4KQ0KDQojPT09PT09PT09PT09PT09PT09PT1TRUMzOiBCQU5HIFRIT05HIEtFIE1PIFRBDQoNCmZhY3RvclZhcnMgPC0gYygiTk9JU09ORyIsICJEQU5UT0NfQ0giLCAiSE9OTkhBTl9DSCIsICJHSU9JVElOSF9DSCIsDQogICAgICAgICAgICAgICAgICJOR0hFTkdISUVQX0NIIiwgInNvbmd1b2lkaWhvY0ZhY3RvciIsDQogICAgICAgICAgICAgICAgICJCQU5HQ0FQX0NIIiwgIkhPQ1RIRU0iLCAiVFJPQ0FQIikNCnZhcnMgPC0gYyggIlRVT0lfQ0giLCAiVFNOR1VPSSIsICJzb25ndW9pZGlob2MiICwNCiAgICAgICAgICAgIk5PSVNPTkciLCAiREFOVE9DX0NIIiwgIkhPTk5IQU5fQ0giLCAiR0lPSVRJTkhfQ0giLA0KICAgICAgICAgICAiTkdIRU5HSElFUF9DSCIsICJzb25ndW9pZGlob2NGYWN0b3IiLA0KICAgICAgICAgICAiQkFOR0NBUF9DSCIsICJIT0NUSEVNIiwgIlRST0NBUCIgKQ0KDQoNCkRlczEgPC0gQ3JlYXRlVGFibGVPbmUodmFycyA9IHZhcnMsDQogICAgICAgICAgICAgICAgICAgICAgIGZhY3RvclZhcnMgPSBmYWN0b3JWYXJzLCANCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEdJQU9EVUMxOCkNCg0KRGVzMSA8LSBwcmludChEZXMxLCBmb3JtYXQgPSAicCIpDQoNCndyaXRlLmNzdihEZXMxLCBmaWxlID0gIkRlczEuY3N2IikNCg0KIz09PT09PT09PT09PT09PT09PT09PVNFQzI6IERPIENMRUFOSU5HIE1PUkUhISEhISEhISEhISEhISEhMQ0Kc3VtbWFyeShHSUFPRFVDMTgkc29uZ3VvaWRpaG9jRmFjdG9yKQ0KbGV2ZWxzKEdJQU9EVUMxOCRzb25ndW9pZGlob2NGYWN0b3IpIDwtIGMoIjAiLCAiMSIsICIyIiwgIjMiLCAiMyIsICIzIiwgIjMiICkNCg0KRGVzQUxMIDwtIGxpc3QoKQ0KZm9yIChpIGluIHVuaXF1ZShHSUFPRFVDMTgkdGVudGluaCkpDQp7DQogIFRlbXB0IDwtIE5VTEwNCiAgVGVtcHQgPC0gIENyZWF0ZVRhYmxlT25lKHZhcnMgPSB2YXJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yVmFycyA9IGZhY3RvclZhcnMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEdJQU9EVUMxOCAlPiUgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcih0ZW50aW5oID09IGkpKQ0KICBEZXNBTExbW2ldXSA8LSBwcmludCggVGVtcHQsIGZvcm1hdCA9ICJwIikNCn0NCg0KRGVzQUxQcmludCA8LSBkYXRhLmZyYW1lKERlc0FMTFtbIkhhIE5vaSJdXSkNCm5hbWVzKERlc0FMUHJpbnQgKSA8LSAiSGEgTm9pIg0KDQpmb3IgKGkgaW4gYygiUXVhbmcgTmluaCIsICJWaW5oIFBodWMiLCAiQmFjIE5pbmgiLA0KICAgICAgICAgICAgIkhhaSBEdW9uZyIsICJIYWkgUGhvbmciLCAiSHVuZyBZZW4iLA0KICAgICAgICAgICAgIlRoYWkgQmluaCIsICJIYSBOYW0iLCAiTmFtIERpbmgiLCAiTmluaCBCaW5oIikpDQp7DQogIERlc0FMUHJpbnRbLCBpXSA8LSBEZXNBTExbW2ldXQ0KICANCn0NCm5hbWVzKERlc0FMUHJpbnQpIDwtIGMoIkhhIE5vaSIsICJRdWFuZyBOaW5oIiwgIlZpbmggUGh1YyIsICJCYWMgTmluaCIsDQogICAgICAgICAgICAgICAgICAgICAgICJIYWkgRHVvbmciLCAiSGFpIFBob25nIiwgIkh1bmcgWWVuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIlRoYWkgQmluaCIsICJIYSBOYW0iLCAiTmFtIERpbmgiLCAiTmluaCBCaW5oIikNCg0KRGVzQUxQcmludA0Kd3JpdGUuY3N2KERlc0FMUHJpbnQsIGZpbGUgPSAiRGVzQUxQcmludC5jc3YiKQ0KDQojPT09PT09PT09PT09PT09PT09PT09PT09U0VDNC4gQ2hpIHRpZXUgZ2lhbyBkdWMgdHJlbiB0b25nIGNoaSB0aWV1DQoNCg0KcDEgPC0gZ2dwbG90KEdJQU9EVUMxOCwgYWVzKHkgPSBUT05HQ0hJR0QsIHggPSB0ZW50aW5oKSkgKw0KICBnZW9tX2JveHBsb3QoKSArIHlsaW0gKGMoMCwgMjApKSArDQogIHlsYWIoIlBoYW50cmFtIikgKw0KICBzdGF0X3N1bW1hcnkoZnVuLnkgPSBtZWFuLCBjb2xvdXIgPSAiZGFya3JlZCIsIGdlb20gPSAicG9pbnQiLCANCiAgICAgICAgICAgICAgIHNoYXBlID0gMTgsIHNpemUgPSAzLHNob3dfZ3VpZGUgPSBGQUxTRSkgKw0KICBnZ3RpdGxlKCJQaGFuIHRyYW0gKCUpIGNoaSB0aWV1IGNobyBnaWFvIGR1YyIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0ID0gMSkpDQpwMQ0KDQptZWFucyA8LSBhZ2dyZWdhdGUoQ0hJR0QgfiB0ZW50aW5oLCBHSUFPRFVDMTgsIG1lYW4pDQpwMiA8LSBnZ3Bsb3QoR0lBT0RVQzE4LCBhZXMoeSAgPSBDSElHRCwgIHggPSB0ZW50aW5oKSkgKw0KICBnZW9tX2JveHBsb3QoKSArIHlsaW0gKGMoIDAsIDM2MDAwKSkgKyB5bGFiKCJuZ2hpbiBkb25nIikrDQogIHN0YXRfc3VtbWFyeShmdW4ueSA9IG1lYW4sIGNvbG91ciA9ICJkYXJrcmVkIiwgZ2VvbSA9ICJwb2ludCIsIA0KICAgICAgICAgICAgICAgc2hhcGUgPSAxOCwgc2l6ZSA9IDMsc2hvd19ndWlkZSA9IEZBTFNFKSArDQogIGdndGl0bGUoIkNoaSB0aWV1IGNobyBnaWFvIGR1YyAoTmdoaW4gZG9uZykiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSwgaGp1c3QgPSAxKSkNCnAyDQoNCmdyaWQuYXJyYW5nZShwMSwgcDIsIG5jb2wgPSAxKQ0KDQojLS0tLS1naGkgdHJlbiBmb2xkZXIgDQpvcCA8LSBwYXIobWZyb3cgPSBjKDEsIDEpKQ0KcG5nKGZpbGVuYW1lID0gIkhpbmgxYS5wbmciLCB3aWR0aCA9IDgwMCwgaGVpZ2h0ID0gNDgwKQ0KcDENCnBhcihvcCkNCmRldi5vZmYoKQ0KDQoNCg0Kb3AgPC0gcGFyKG1mcm93ID0gYygxLCAxKSkNCnBuZyhmaWxlbmFtZSA9ICJIaW5oMWIucG5nIiwgd2lkdGggPSA4MDAsIGhlaWdodCA9IDQ4MCkNCnAyDQpwYXIob3ApDQpkZXYub2ZmKCkNCg0KDQojLS0tLS0tLS0tLS0tLS0tU0VDNDogV29yayB3aXRoIENDQ0hJR0QNCiMtLS0tLS0tLS0tLS0tLS0tLS00LjEuIExPQyBDQUMgVElOSCBET05HIEJBTkcgU09ORyBIT05HDQpDQ0NISUdEIDwtIENDQ0hJR0QgJT4lIA0KICBmaWx0ZXIodGluaCAlaW4lIGMoIjAxIiwgIjI2IiwgIjI3IiwgIjIyIiwgIjMwIiwgIjMxIiwgDQogICAgICAgICAgICAgICAgICAgICAiMzMiLCAiMzQiLCAiMzUiLCAiMzYiLCAiMzciKSkgDQpkaW0oQ0NDSElHRCkgIyANCg0KI0NDQ0hJR0QgJT4lIGZpbHRlcihDSElBTEwgPj0gNDAwMDApDQoNCkNDQ0hJR0QgPC0gQ0NDSElHRCAlPiUgZmlsdGVyKENISUFMTCA8IDQwMDAwKSAjIGRlbGV0ZSAxMyBvYnNlcnZhdGlvbnMNCg0KQ0NDSElHRCRtMnhjNiA8LSBhcy5jaGFyYWN0ZXIoQ0NDSElHRCRtMnhjNikNCg0KcDMgPC0gZ2dwbG90KENDQ0hJR0QsIGFlcyh4ID0gdGVudGluaCwgeSA9IENISUFMTCwgZmlsbCA9IG0yeGM2KSkgKw0KICBnZW9tX2JveHBsb3Qob3V0bGllci5zaGFwZSA9IE5BKSArIHlsaW0oMCwgMzUwMDApICsNCiAgZ2d0aXRsZSgiQ2hpIHBoaSAxIG5hbSBob2MgdGhlbyBjYXAgaG9jIHZhIHRoZW8gdGluaCIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41LCBoanVzdCA9IDEpKQ0KcDMNCg0KDQpvcCA8LSBwYXIobWZyb3cgPSBjKDEsIDEpKQ0KcG5nKGZpbGVuYW1lID0gIkhpbmgzLnBuZyIsIHdpZHRoID0gODAwLCBoZWlnaHQgPSA0ODApDQpwMw0KcGFyKG9wKQ0KZGV2Lm9mZigpDQpgYGANCg0KIyMgNy5Dw6FjIHRo4buRbmcgY8ahIGPGoSBi4bqjbiB24buBIGLhuqNuZy9ow6xuaCBj4bunYSBiw6BpIG5naGnDqm4gY+G7qXUNCg0KVGnhur9wIHThu6VjIHjhu60gbMO9IGNoaSB0acOqdSB0aGVvIHThu6tuZyBraG/huqNuIG3hu6VjDQoNClNlZSBtb3JlIGF0ICBbdOG6oWkgxJHDonldKGh0dHBzOi8vcnB1YnMuY29tL0x1Y2llLzc0NjA1OCkgPGh0dHBzOi8vcnB1YnMuY29tL0x1Y2llLzc0NjA1OD4NCg0KDQpUUsOCTiBUUuG7jE5HIE3hu5xJIMSQ4bqgSSBCSeG7glUgVEhBTSBE4buwIFbDgCBUUsOCTiBUUuG7jE5HIEPhuqJNIMagTiENCg0KDQoNCg==