Nhiệm vụ 4

library(tidyverse)
library(DT)
library(scales)
library(psych)
library(knitr)
library(kableExtra)
library(DescTools)
library(epitools)
library(AER)
library(dplyr)

Phần 1:Tìm hiểu và chuẩn bị dữ liệu

1.1 Giới thiệu bộ dữ liệu

Bộ dữ liệu CPS1985 (Current Population Survey 1985) là một tập dữ liệu điều tra cá nhân được trích xuất từ Khảo sát Dân số Hiện hành tại Hoa Kỳ. Dữ liệu này cung cấp thông tin về mức lương theo giờ cùng các đặc điểm nhân khẩu học và nghề nghiệp của 534 cá nhân đang làm việc, bao gồm giới tính, chủng tộc, trình độ học vấn, kinh nghiệm, tuổi, tình trạng hôn nhân, nghề nghiệp và khu vực làm việc.

data("CPS1985")
k<-CPS1985
datatable(k,options = list(scrollX = TRUE)) #bật cuộn ngang
names(k)
##  [1] "wage"       "education"  "experience" "age"        "ethnicity" 
##  [6] "region"     "gender"     "occupation" "sector"     "union"     
## [11] "married"

Bộ dữ liệu với các biến định tính

Ta thực hiện tạo 1 dataframe mới chỉ chứa các biến định tính, ta gán data mới này vào object với tên k_cat.

cat<- c("ethnicity", "region","gender", "occupation", "sector","union", "married")
k_cat<-k[, cat]
# Thay đổi giá trị của biến `card`và owner
k_cat$married <- dplyr::recode(k_cat$married, "yes" = "M" , "no" = "S")
datatable(k_cat,options = list(scrollX = TRUE))

1.2 Cấu trúc của dữ liệu

Để có cái nhìn tổng quan về cấu trúc của bộ dữ liệu, bao gồm số lượng quan sát, số lượng biến, kiểu dữ liệu của từng biến và một số giá trị điển hình, ta sử dụng hàm str() như sau:

str(k) #Cấu trúc trong dữ liệu
## 'data.frame':    534 obs. of  11 variables:
##  $ wage      : num  5.1 4.95 6.67 4 7.5 ...
##  $ education : num  8 9 12 12 12 13 10 12 16 12 ...
##  $ experience: num  21 42 1 4 17 9 27 9 11 9 ...
##  $ age       : num  35 57 19 22 35 28 43 27 33 27 ...
##  $ ethnicity : Factor w/ 3 levels "cauc","hispanic",..: 2 1 1 1 1 1 1 1 1 1 ...
##  $ region    : Factor w/ 2 levels "south","other": 2 2 2 2 2 2 1 2 2 2 ...
##  $ gender    : Factor w/ 2 levels "male","female": 2 2 1 1 1 1 1 1 1 1 ...
##  $ occupation: Factor w/ 6 levels "worker","technical",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ sector    : Factor w/ 3 levels "manufacturing",..: 1 1 1 3 3 3 3 3 1 3 ...
##  $ union     : Factor w/ 2 levels "no","yes": 1 1 1 1 1 2 1 1 1 1 ...
##  $ married   : Factor w/ 2 levels "no","yes": 2 2 1 1 2 1 1 1 2 1 ...

Qua kết quả của hàm str(), ta thấy bộ dữ liệu trong nghiên cứu là CPS1985 (Current Population Survey 1985), bao gồm thông tin của 534 người đang tham gia thị trường lao động tại Hoa Kỳ. Dữ liệu được thu thập nhằm mục đích khảo sát các yếu tố nhân khẩu học và kinh tế – xã hội ảnh hưởng đến thu nhập của người lao động. Tập dữ liệu chứa tổng cộng 11 biến, bao gồm cả biến định lượng và biến định tính, cụ thể như sau:

Các biến định lượng:

  • wage: Mức lương theo giờ của cá nhân (tính bằng đô la Mỹ), là biến mục tiêu quan trọng trong nghiên cứu về thu nhập.

  • education: Tổng số năm học chính quy của cá nhân, phản ánh trình độ học vấn.

  • experience: Số năm kinh nghiệm làm việc.

  • age: Tuổi hiện tại của cá nhân.

Các biến định tính:

  • ethnicity: Chủng tộc, được phân thành ba nhóm chính (ví dụ: “cauc”, “hispanic”, “other”).

  • region: Khu vực sinh sống, gồm hai mức: miền Nam (south) và các khu vực khác (other).

  • gender: Giới tính của cá nhân, bao gồm nam và nữ.

  • occupation: Nhóm ngành nghề chính, được chia thành sáu loại khác nhau.

  • sector: Khu vực kinh tế nơi cá nhân làm việc, với ba mức như khu vực sản xuất, khu vực công, và khu vực khác.

  • union: Tình trạng tham gia công đoàn, có hai mức là “có” và “không”.

  • married: Tình trạng hôn nhân, gồm hai mức là độc thân (S) và đã kết hôn (M).

1.3 Hiển thị một vài dòng đầu và cuối của dữ liệu

Nhằm có được cái nhòn tổng quan về bộ dữ liệu ta sử dụng hàm head() và taid() để xem một số dòng đầu và dòng cuối của bộ dữ liệu Current Population Survey 1985:

head(k) #hiển thị vài dòng đầu
##       wage education experience age ethnicity region gender occupation
## 1     5.10         8         21  35  hispanic  other female     worker
## 1100  4.95         9         42  57      cauc  other female     worker
## 2     6.67        12          1  19      cauc  other   male     worker
## 3     4.00        12          4  22      cauc  other   male     worker
## 4     7.50        12         17  35      cauc  other   male     worker
## 5    13.07        13          9  28      cauc  other   male     worker
##             sector union married
## 1    manufacturing    no     yes
## 1100 manufacturing    no     yes
## 2    manufacturing    no      no
## 3            other    no      no
## 4            other    no     yes
## 5            other   yes      no
tail(k) #hiển thị vào dòng cuối 
##      wage education experience age ethnicity region gender occupation
## 528 11.79        16          6  28      cauc  other female  technical
## 529 11.36        18          5  29      cauc  other   male  technical
## 530  6.10        12         33  51     other  other female  technical
## 531 23.25        17         25  48     other  other female  technical
## 532 19.88        12         13  31      cauc  south   male  technical
## 533 15.38        16         33  55      cauc  other   male  technical
##            sector union married
## 528         other   yes      no
## 529         other    no      no
## 530         other    no     yes
## 531         other   yes     yes
## 532         other   yes     yes
## 533 manufacturing    no     yes

1.4 Kiểm tra giá trị thiếu

Nhằm đảm bảo chất lượng dữ liệu và tránh sai lệch trong quá trình phân tích, ta cần kiểm tra xem bộ dữ liệu có chứa giá trị thiếu (NA) hay không. Điều này giúp xác định liệu có cần xử lý hoặc làm sạch dữ liệu trước khi tiếp tục phân tích:

if (any(is.na(k))) {
  cat("Có giá trị thiếu trong dữ liệu.\n")
} else {
  cat("Không có giá trị thiếu trong dữ liệu.\n")
}
## Không có giá trị thiếu trong dữ liệu.

Với đoạn code trên nếu trong bộ dữ liệu có bất kì dữ liệu nào thiếu thì kết quả sẽ nhận được là có giá trị thiếu trong dữ liệu và ngược lại.

Với bộ dữ liệu được gán cho k nhận được kết quả là Không có giá trị thiếu trong dữ liệu. Điều này cho thấy dữ liệu không có ô trống hay giá trị bị thiếu trong toàn bộ bộ dữ liệu. Đây là điều kiện để tiến hành các phân tích tiếp theo mà không cần thực hiện bước xử lý giá trị thiếu.

Phần 2: Phân tích mô tả các biến định tính

2.1 Biến ethnicity

Ta thực hiện thống kê tần số và tần suất cho biến ethnicity được kết quả như sau:

Thống kê tần suất

ethnicity_1<-table(k_cat$ethnicity)
ethnicity_1
## 
##     cauc hispanic    other 
##      440       27       67
ethnicity_2<-table(k_cat$ethnicity)/sum(nrow(k_cat))*100 #tần suất
ethnicity_2
## 
##     cauc hispanic    other 
## 82.39700  5.05618 12.54682

Trực quan hóa dữ liệu

c <- as.data.frame(table(k_cat$ethnicity)) #chuyển kết quả thành bảng dữ liệu (data.frame) với 2 cột
colnames(c) <- c("ethnicity", "Count")
ggplot(c, aes(x = ethnicity, y = Count, fill = ethnicity)) +
  geom_bar(stat = "identity") +
  labs(title = "Biểu đồ biểu thị chủng tộc", x = "Chủng tộc", y = "Số lượng") +
  theme_minimal() +  
  theme(text = element_text(family = "sans"))

pie(ethnicity_2,
labels = paste(names(ethnicity_2), round(ethnicity_2, 2), "%"),
main = "Tỷ lệ chủng tộc")

Nhận xét

Biểu đồ cho thấy nhóm chủng tộc Caucasian (người da tắng) chiếm ưu thế rõ rệt với 440 người 82.4% chiếm tỷ lệ cao nhất trong 3 nhóm. Nhóm other đứng thứ hai với 67 người, trong khi Hispanic (Mỹ latinh) chỉ có 27 người. Sự chênh lệch này cho thấy mẫu khảo sát có xu hướng nghiêng nhiều về một nhóm chủng tộc nhất định, có thể ảnh hưởng đến kết quả nghiên cứu nếu mục tiêu là phản ánh sự đa dạng chủng tộc.

2.2 Biến region

Ta thực hiện thống kê tần số và tần suất cho biến region được kết quả như sau

Thống kê tần suất

region_1<-table(k_cat$region)
region_1
## 
## south other 
##   156   378
region_2<-table(k_cat$region)/sum(nrow(k_cat))*100 #tần suất
region_2
## 
##    south    other 
## 29.21348 70.78652

Trực quan hóa dữ liệu

region_1 <- k_cat |>
  group_by(region) |>
  summarise(freq = n()) |>
  mutate(per = freq / sum(freq),
         label = paste0(freq, " (", round(per * 100, 1), "%)"))

ggplot(region_1 , aes(x = "", y = per, fill = region)) +
  geom_col(width = 1, color = "white") +
  coord_polar("y") +
  geom_text(aes(label = paste0(round(per*100, 2), "%")),
            position = position_stack(vjust = 0.5),
            size = 2.5) +
  scale_fill_brewer(palette = "Pastel1") +  # Bạn có thể chọn Set1, Set2...
  labs(title = "Tỷ lệ người sinh sống ở các khu vực", fill = "Khu vực") +
  theme_void()

Nhận xét

Kết quả biểu đồ cho thấy đa số người dân sinh sống tại các khu vực ngoài miền Nam chiếm khoảng 70.79%, trong khi chỉ có 29.21% cư trú tại khu vực miền Nam. Điều này cho thấy sự phân bố dân cư trong mẫu có phần nghiêng về các vùng ngoài miền Nam.

2.3 Biến gender

Ta thực hiện thống kê tần số và tần suất cho biến region được kết quả như sau

Thống kê tần suất

gender_1<-table(k_cat$gender)
gender_1
## 
##   male female 
##    289    245
gender_2<-table(k_cat$gender)/sum(nrow(k_cat))*100 #tần suất
gender_2
## 
##     male   female 
## 54.11985 45.88015

Trực quan hóa dữ liệu

cols <- c("lightblue","lightpink")
# Nhãn phần trăm
gender_2bd<- paste0( round(gender_2, 2), "%")
# Vẽ pie 
pie(
  gender_2 ,
  labels = NA,
  main   = "Tần suất biến giới tính",
  col    = cols,
  border = "white")

# Thêm legend
legend(
  x      ="topright",
  legend = paste(names(gender_2 ),gender_2bd),
  fill   = cols,
  )

Nhận xét

Dựa vào kết quả khảo sát trên cho thấy trong số những người khảo sát có 289 người là nam giới chiếm 54.12% và 245 người là nữ giới chiếm 45.88%. Qua kết quả đó ta thấy giới tính của những khảo sát không có sự chênh lệch quá nhiều.

2.4 Biến occupation

Ta thực hiện thống kê tần số và tần suất cho biến occupation được kết quả như sau

Thống kê tần suất

occupation_1<-table(k_cat$occupation)
occupation_1
## 
##     worker  technical   services     office      sales management 
##        156        105         83         97         38         55
occupation_2<-table(k_cat$occupation)/sum(nrow(k_cat))*100 #tần suất
occupation_2
## 
##     worker  technical   services     office      sales management 
##  29.213483  19.662921  15.543071  18.164794   7.116105  10.299625

Trực quan hóa dữ liệu

c3 <- as.data.frame(occupation_1)
colnames(c3) <- c("occupation", "Count")

ggplot(c3, aes(x = occupation, y = Count, fill = occupation)) +
  geom_col(fill = "lightblue", color = "black") +
  labs(x = "Ngành nghề", y = "Tần số", title = "Các ngành nghề khảo sát") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Nhận xét

Kết quả cho thấy nhóm công nhân (worker) chiếm tỷ lệ lớn nhất trong mẫu khảo sát chiếm khoảng 28,33%, theo sau là nhóm kỹ thuật (technical) và văn phòng (office) với lần lượt 19,06% và 17,61%. Trong khi đó, nhóm bán hàng (sales) có số lượng thấp nhất, chỉ chiếm 6,90%. Sự phân bố này cho thấy rằng mẫu khảo sát có xu hướng nghiêng về các ngành lao động chân tay và kỹ thuật.

2.5 Biến sector

Ta thực hiện thống kê tần số và tần suất cho biến sector được kết quả như sau

Thống kê tần suất

sector_1<-table(k_cat$sector)
sector_1
## 
## manufacturing  construction         other 
##            99            24           411
sector_2<-table(k_cat$sector)/sum(nrow(k_cat))*100 #tần suất
sector_2
## 
## manufacturing  construction         other 
##     18.539326      4.494382     76.966292

Trực quan hóa dữ liệu

cols <- c("lightblue","lightpink", "lightgreen")
# Nhãn phần trăm
sector_2bd<- paste0( round(sector_2, 2), "%")
# Vẽ pie chart ẩn nhãn
pie(
  sector_2,
  labels = NA,
  main   = "Tần suất biến giới tính",
  col    = cols,
  border = "white")

# Thêm legend bên ngoài
legend(
  x      ="topright",
  legend = paste(names(sector_2),sector_2bd),
  fill   = cols,
  )

Nhận xét

Kết quả cho thấy phần lớn người tham gia khảo sát làm việc trong khu vực khác (chiếm khoảng 76,97%), trong khi chỉ có 18,54% thuộc khu vực sản xuất và 4,49% làm việc trong ngành xây dựng. Điều này cho thấy mẫu khảo sát tập trung chủ yếu vào các đối tượng không làm việc trong lĩnh vực công nghiệp hay xây dựng.

2.6 Biến union

Ta thực hiện thống kê tần số và tần suất cho biến union được kết quả như sau

Thống kê tần suất

union_1<-table(k_cat$union)
union_1
## 
##  no yes 
## 438  96
union_2<-table(k_cat$union)/sum(nrow(k_cat))*100 #tần suất
union_2
## 
##       no      yes 
## 82.02247 17.97753

Trực quan hóa dữ liệu

cols <- c("lightblue","lightpink")
# Nhãn phần trăm
union_2bd<- paste0( round(union_2, 2), "%")
# Vẽ pie chart ẩn nhãn
pie(
  union_2 ,
  labels = NA,
  main   = "Tần suất tham gia hoặc không gia công đoàn",
  col    = cols,
  border = "white")

# Thêm legend bên ngoài
legend(
  x      ="topright",
  legend = paste(names(union_2),union_2bd),
  fill   = cols,
  )

Nhận xét

Dựa vào kết quả trên ta nhận thấy số người tham gia công đoàn chỉ chiểm 17.98% trong khi đó số người không tham gia công đoàn chiếm tỷ lệ lớn với 82.02%. Qua kết quả trên ta thấy có sự chênh lệch quá lớn giữa 2 trang thái.

2.7 Biến married

Ta thực hiện thống kê tần số và tần suất cho biến married được kết quả như sau

Thống kê tần suất

married_1<-table(k_cat$married)
married_1
## 
##   S   M 
## 184 350
married_2<-table(k_cat$married)/sum(nrow(k_cat))*100 #tần suất
married_2
## 
##        S        M 
## 34.45693 65.54307

Trực quan hóa dữ liệu

cols <- c("lightblue","lightpink")
# Nhãn phần trăm
married_2bd<- paste0( round(married_2, 2), "%")
# Vẽ pie chart ẩn nhãn
pie(
  married_2,
  labels = NA,
  main   = "Tỷ lệ tình trạng kết hôn của người dân",
  col    = cols,
  border = "white")

# Thêm legend bên ngoài
legend(
  x      ="topright",
  legend = paste(names(married_2),married_2bd),
  fill   = cols,
  )

Nhận xét

Kết quả phân tích cho thấy phần lớn người dân trong mẫu khảo sát đã kết hôn, chiếm khoảng 65,54%, trong khi tỷ lệ người độc thân là 34,46%. Điều này phản ánh rằng đa số người được khảo sát đang sống trong các mối quan hệ hôn nhân chính thức.

Phần 3: Ước lượng khoảng và kiểm định giả thuyết cho tỷ lệ

3.1 Biến ethnicity

Xác định hạng mục quan tâm

Hạng mục được quan tâm ở đây là chủng tộc người da trắng (cauc) trong nhòm chunhr tộc (ethnicity).

n1 <- sum(k_cat$ethnicity== "cauc")     
nh1<- length(k_cat$ethnicity)             

Ước lượng Khoảng Tin cậy

Ta ước lượng khoảng tin cậy 95% cho tỷ lệ chủng tộc người da trắng trong tổng thể bằng:

prop.test(n1, nh1, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n1 out of nh1, null probability 0.5
## X-squared = 222.89, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.7883907 0.8547882
## sample estimates:
##       p 
## 0.82397

Kết quả kiểm định cho thấy tỷ lệ người có chủng tộc là người da trắng (caucasian) trong tổng thể được ước lượng là 0.82397, tức 82.4%. Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 0.7884 đến 0.8548, nghĩa là chúng ta có thể tin tưởng 95% rằng tỷ lệ thực tế người da trắng trong tổng thể nằm trong khoảng 78.8% đến 85.5%.

Kiểm định giả thuyết

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ chủng tộc người da trắng trong tổng thể là bằng 80%} \\\\ H_1: & \text{Tỷ lệ chủng tộc người da trắng trong tổng thể là khác 80%} \ \end{array} \right. \]

prop.test(n1, nh1, p = 0.8, alternative = "two.sided") #kiểm định 2 phía
## 
##  1-sample proportions test with continuity correction
## 
## data:  n1 out of nh1, null probability 0.8
## X-squared = 1.7707, df = 1, p-value = 0.1833
## alternative hypothesis: true p is not equal to 0.8
## 95 percent confidence interval:
##  0.7883907 0.8547882
## sample estimates:
##       p 
## 0.82397

Kết quả kiểm định giả thuyết tỷ lệ với p-value = 0.1833 (> 0.05) cho thấy không có đủ bằng chứng thống kê để bác bỏ giả thuyết rằng tỷ lệ chủng tộc người da trắng bằng 80% trong tổng thể.

3.2 Biến region

Xác định hạng mục quan tâm

Hạng mục được quan tâm ở đây là khu vực sinh sống ở phía nam (south) trong nhóm khu vực sống (region).

n2 <- sum(k_cat$region== "south")     
nh2<- length(k_cat$region)             

Ước lượng Khoảng Tin cậy

Ta ước lượng khoảng tin cậy 95% cho tỷ lệ khu vực sinh sống ở phía nam trong tổng thể bằng:

prop.test(n2, nh2, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n2 out of nh2, null probability 0.5
## X-squared = 91.463, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2542656 0.3330451
## sample estimates:
##         p 
## 0.2921348

Kết quả kiểm định cho thấy tỷ lệ người sống ở khuc vực phía nam trong tổng thể được ước lượng là 0.2921348, tức 29.21%. Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 0.2543 đến 0.333, nghĩa là chúng ta có thể tin tưởng 95% rằng tỷ lệ thực tế người da trắng trong tổng thể nằm trong khoảng 25.43% đến 33.3%.

Kiểm định giả thuyết

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ người khu vực sinh sống ở phía nam trong tổng thể là bằng 20%} \\\\ H_1: & \text{Tỷ lệ người khu vực sinh sống ở phía nam trong tổng thể là khác 20%} \ \end{array} \right. \]

prop.test(n2, nh2, p = 0.2, alternative = "two.sided") #kiểm định 2 phía
## 
##  1-sample proportions test with continuity correction
## 
## data:  n2 out of nh2, null probability 0.2
## X-squared = 27.759, df = 1, p-value = 1.374e-07
## alternative hypothesis: true p is not equal to 0.2
## 95 percent confidence interval:
##  0.2542656 0.3330451
## sample estimates:
##         p 
## 0.2921348

Giá trị p-value = 1.374e-07< mức ý nghĩa 5%, cho thấy kết quả có ý nghĩa thống kê rất mạnh tức là có bằng chứng rõ ràng để bác bỏ giả thuyết tỷ lệ bằng 0.2 và khẳng định rằng tỷ lệ người sống ở ở khu vực phia nam trong tổng thể khác 20%. phù hợp với tỷ lệ mẫu ước lượng (0.2921348). Điều này khẳng định rằng tỷ lệ người sống ở khu vực phia nam xấp xỉ 29.21%.

3.3 Biến gender

Xác định hạng mục quan tâm

Hạng mục được quan tâm ở đây là giới tính nam (male) trong nhóm giới tính (gender).

n3 <- sum(k_cat$gender== "male")     
nh3<- length(k_cat$gender)             

Ước lượng Khoảng Tin cậy

Ta ước lượng khoảng tin cậy 95% cho tỷ lệ giới tính nam trong tổng thể bằng:

prop.test(n3, nh3, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n3 out of nh3, null probability 0.5
## X-squared = 3.4625, df = 1, p-value = 0.06277
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4978546 0.5839409
## sample estimates:
##         p 
## 0.5411985

Kết quả kiểm định cho thấy tỷ lệ giới tính là nam trong tổng thể được ước lượng là 0.5411985, tức 54.11%. Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 0.4979 đến 0.5839, nghĩa là chúng ta có thể tin tưởng 95% rằng tỷ lệ thực tế người da trắng trong tổng thể nằm trong khoảng 49.79% đến 58.39%.

Kiểm định giả thuyết

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ giới tính nam trong tổng thể là bằng 50%} \\\\ H_1: & \text{Tỷ lệ giới tính nam trong tổng thể là khác 50%} \ \end{array} \right. \]

prop.test(n3, nh3, p = 0.5, alternative = "two.sided") #kiểm định 2 phía
## 
##  1-sample proportions test with continuity correction
## 
## data:  n3 out of nh3, null probability 0.5
## X-squared = 3.4625, df = 1, p-value = 0.06277
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4978546 0.5839409
## sample estimates:
##         p 
## 0.5411985

Giá trị p-value < 2.2e-16 rất nhỏ, cho thấy kết quả có ý nghĩa thống kê rất mạnh tức là có bằng chứng rõ ràng để bác bỏ giả thuyết \(H_0\) tỷ lệ bằng 0.2 và khẳng định rằng tỷ lệ giới tính nam trong tổng thể khác 20%. phù hợp với tỷ lệ mẫu ước lượng (0.5411985). Điều này khẳng định rằng tỷ lệ giới tính nam xấp xỉ 54.11%.

3.4 Biến occupation

Xác định hạng mục quan tâm

Hạng mục được quan tâm ở đây là công nhân trong nhóm các ngành nghề (occupation).

n4<- sum(k_cat$occupation== "worker")     
nh4<- length(k_cat$occupation)             

Ước lượng Khoảng Tin cậy

Ta ước lượng khoảng tin cậy 95% cho tỷ lệ công nhân trong tổng thể bằng:

prop.test(n4, nh4, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n4 out of nh4, null probability 0.5
## X-squared = 91.463, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2542656 0.3330451
## sample estimates:
##         p 
## 0.2921348

Kết quả kiểm định cho thấy tỷ lệ công việc là công nhân trong tổng thể được ước lượng là 0.2921348, tức 29.21%. Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 0.2543 đến 0.333, nghĩa là chúng ta có thể tin tưởng 95% rằng tỷ lệ công việc là công nhân (worker) tổng thể nằm trong khoảng 25.43% đến 33.3%.

Kiểm định giả thuyết

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ nhóm ngành công nhân trong tổng thể là bằng 20%} \\\\ H_1: & \text{Tỷ lệ nhóm ngành công nhân trong tổng thể là khác 20%} \ \end{array} \right. \]

prop.test(n4, nh4, p = 0.2, alternative = "two.sided") #kiểm định 2 phía
## 
##  1-sample proportions test with continuity correction
## 
## data:  n4 out of nh4, null probability 0.2
## X-squared = 27.759, df = 1, p-value = 1.374e-07
## alternative hypothesis: true p is not equal to 0.2
## 95 percent confidence interval:
##  0.2542656 0.3330451
## sample estimates:
##         p 
## 0.2921348

Giá trị p-value = 1.374e-07< mức ý nghĩa 5%, cho thấy kết quả có ý nghĩa thống kê rất mạnh tức là có bằng chứng rõ ràng để bác bỏ giả thuyết tỷ lệ bằng 0.2 và khẳng định rằng tỷ lệ cộng việc là công nhân trong tổng thể khác 20%. phù hợp với tỷ lệ mẫu ước lượng (0.2921348). Điều này khẳng định rằng tỷ lệ người sống ở khu vực phia nam xấp xỉ 29.21%.

3.5 Biến sector

Xác định hạng mục quan tâm

Hạng mục được quan tâm ở đây là khu vực sản xuất (manufacturing) trong nhóm Khu vực kinh tế nơi cá nhân làm việc (sector).

n5 <- sum(k_cat$sector== "manufacturing")     
nh5<- length(k_cat$sector)             

Ước lượng Khoảng Tin cậy

Ta ước lượng khoảng tin cậy 95% cho tỷ lệ khu vực sản xuất trong tổng thể bằng:

prop.test(n5, nh5, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n5 out of nh5, null probability 0.5
## X-squared = 210.16, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.1538546 0.2215529
## sample estimates:
##         p 
## 0.1853933

Kết quả kiểm định cho thấy tỷ lệ khu vực sản xuất trong tổng thể được ước lượng là 0.1853933, tức 18.54%. Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng từ 0.1539 đến 0.2216, nghĩa là chúng ta có thể tin tưởng 95% rằng tỷ lệ thực tế khu vực sản xuất trong tổng thể nằm trong khoảng 15.39% đến 22.16%.

Kiểm định giả thuyết

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Tỷ lệ khu vực sản xuất trong tổng thể là bằng 10%} \\\\ H_1: & \text{Tỷ lệ khu vực sản xuất trong tổng thể là khác 10%} \ \end{array} \right. \]

prop.test(n5, nh5, p = 0.1, alternative = "two.sided") #kiểm định 2 phía
## 
##  1-sample proportions test with continuity correction
## 
## data:  n5 out of nh5, null probability 0.1
## X-squared = 42.322, df = 1, p-value = 7.74e-11
## alternative hypothesis: true p is not equal to 0.1
## 95 percent confidence interval:
##  0.1538546 0.2215529
## sample estimates:
##         p 
## 0.1853933

Giá trị p-value = 7.74e-11 < mức ý nghĩa 5%, cho thấy kết quả có ý nghĩa thống kê rất mạnh tức là có bằng chứng rõ ràng để bác bỏ giả thuyết tỷ lệ bằng 0.1 và khẳng định rằng tỷ lệ 7.74e-11 trong tổng thể khác 10%. phù hợp với tỷ lệ mẫu ước lượng (0.1854). Điều này khẳng định rằng tỷ lệ khu vực sản suất xấp xỉ 18.54%.

Phần 4: Phân tích mối quan hệ giữa hai biến định tính

4.1 Biến gender và occupation

Để hiểu rõ hơn mối quan hệ giữa giới tính (Gender) và nhóm nghề nghiệp (occupation), chúng ta sẽ xây dựng bảng tần suất chéo thể hiện số lượng từng kết hợp giữa hai biến này. Sau đó, biểu đồ cột sẽ được sử dụng để trực quan hóa sự phân bố của các nhóm ngành nghề theo từng giới tính, giúp quan sát dễ dàng sự khác biệt và xu hướng tiêu dùng giữa các nhóm.

Bảng tần suất chéo và trực quan hóa

Bảng tần suất chéo

k1 <- table(k_cat$gender,k_cat$occupation)
addmargins(k1) 
##         
##          worker technical services office sales management Sum
##   male      126        53       34     21    21         34 289
##   female     30        52       49     76    17         21 245
##   Sum       156       105       83     97    38         55 534

Bảng tần suất chéo theo tỷ lệ hàng

prop.table(k1, margin = 1)
##         
##              worker  technical   services     office      sales management
##   male   0.43598616 0.18339100 0.11764706 0.07266436 0.07266436 0.11764706
##   female 0.12244898 0.21224490 0.20000000 0.31020408 0.06938776 0.08571429

Trực quan hóa

# Chuyển sang data frame
k1_df <- as.data.frame(k1)
colnames(k1_df) <- c("gender", "occupation", "Frequency")
# Vẽ biểu đồ từ bảng tần suất
ggplot(k1_df, aes(x = gender, y = Frequency, fill = occupation)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Biểu đồ tần suất giữa gender và occupation",
    x = "gender",
    y = "Tần suất"
  ) +
  theme_minimal()

Nhận xét

Biểu đồ tần suất giữa giới tính (gender) và nhóm ngành nghề (occupation) cho thấy sự khác biệt rõ rệt về phân bổ giới tính trong từng lĩnh vực nghề nghiệp. Cụ thể, nam giới chiếm ưu thế vượt trội trong ngành worker với 126 người, trong khi nữ giới chỉ có 30 người trong ngành này, đây cũng là ngành mà nam giới tham gia nhiều nhất và nữ giới tham gia ít nhất. Ngược lại, ngành office là nơi nữ giới chiếm ưu thế rõ rệt với 76 người, cao gần gấp 4 lần so với nam giới (21 người), đồng thời cũng là ngành có tỷ lệ nam thấp nhất.

Kiểm định thống kê (Kiểm định Chi-bình phương)

Để đánh giá xem có mối liên hệ có ý nghĩa thống kê giữa hai biến phân loại là Gender và occupation hay không, sẽ sử dụng kiểm định Chi-bình phương (Chi-square test).

# Kiểm định
chisq_result <- chisq.test(k1)
# In kết quả
chisq_result
## 
##  Pearson's Chi-squared test
## 
## data:  k1
## X-squared = 93.486, df = 5, p-value < 2.2e-16

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Biến gender và biến occupation không có mối quan hệ.} \\\\ H_1: & \text{Biến gender và biến occupation có mối quan hệ.} \ \end{array} \right. \]

Nhận xét: Kết quả kiểm định: Với mức ý nghĩa 0.05, vì p-value = 2.2e-16 < 0.05, bác bỏ giả thuyết \(H_0\). Vậy giữa biến gender và biến occupation tồn tại mối quan hệ.

4.2 Biến occupation và sector

Để hiểu rõ hơn mối quan hệ giữa nhóm khu vực làm việc (sector) và nhóm nghề nghiệp (occupation), chúng ta sẽ xây dựng bảng tần suất chéo thể hiện số lượng từng kết hợp giữa hai biến này. Sau đó, biểu đồ cột sẽ được sử dụng để trực quan hóa sự phân bố của các nhóm khu vực làm việc theo từng nhóm ngành nghề, giúp quan sát dễ dàng sự khác biệt và xu hướng tiêu dùng giữa các nhóm.

Bảng tần suất chéo và trực quan hóa

Bảng tần suất chéo

k2 <- table(k_cat$occupation,k_cat$sector)
addmargins(k2) 
##             
##              manufacturing construction other Sum
##   worker                68           20    68 156
##   technical             12            2    91 105
##   services               2            0    81  83
##   office                 7            2    88  97
##   sales                  4            0    34  38
##   management             6            0    49  55
##   Sum                   99           24   411 534

Bảng tần suất chéo theo tỷ lệ hàng

prop.table(k2, margin = 1)
##             
##              manufacturing construction      other
##   worker        0.43589744   0.12820513 0.43589744
##   technical     0.11428571   0.01904762 0.86666667
##   services      0.02409639   0.00000000 0.97590361
##   office        0.07216495   0.02061856 0.90721649
##   sales         0.10526316   0.00000000 0.89473684
##   management    0.10909091   0.00000000 0.89090909

Trực quan hóa

# Chuyển sang data frame
k2_df <- as.data.frame(k2)
colnames(k2_df) <- c("sector", "occupation", "Frequency")
# Vẽ biểu đồ từ bảng tần suất
ggplot(k2_df, aes(x = occupation, y = Frequency, fill = sector)) +
  geom_bar(stat = "identity", position = "dodge") + 
  labs(
    title = "Biểu đồ tần suất giữa sector và occupation",
    x = " sector",
    y = "Tần số"
  ) +
  theme_minimal()

Nhận xét

Dựa vào biẻu đò trên ta nhận thấy sự phân bố không đồng đều giữa các ngành nghề trong 3 khu vực kinh tế chính sản xuất, xấy dựng và khuc vực khác. Ngành worker chiếm ưu thế ở khu vực sản suất và xây dựng lần lượt là 68 và 20 người cho thấy đặc thu lao động chân tay tập trung chủ yếu ở 2 khu vực này. Ngược lại, các ngành như technical, services, office, sales và management lại tập trung chủ yếu ở khu vực “other”, với số lượng vượt trội đặc biệt là các ngành technical (91 người), office (88 người), services (81 người) và management (49 người). Các ngành này gần như vắng mặt hoặc có tần suất rất thấp ở khu vực xây dựng và sản suất. Qua đó ta thấy có sự phân hóa rõ ràng về cơ cấu lao động.

Kiểm định thống kê (Kiểm định Chi-bình phương)

Để đánh giá xem có mối liên hệ có ý nghĩa thống kê giữa hai biến phân loại là sector và occupation hay không, sẽ sử dụng kiểm định Chi-bình phương (Chi-square test).

# Kiểm định
chisq_result <- chisq.test(k2)
# In kết quả
chisq_result
## 
##  Pearson's Chi-squared test
## 
## data:  k2
## X-squared = 144.54, df = 10, p-value < 2.2e-16

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Biến sector và biến occupation không có mối quan hệ.} \\\\ H_1: & \text{Biến sector và biến occupation có mối quan hệ.} \ \end{array} \right. \]

Nhận xét: Kết quả kiểm định: Với mức ý nghĩa 0.05, vì p-value = 2.2e-16 < 0.05, bác bỏ giả thuyết \(H_0\). Vậy giữa biến sector và biến occupation tồn tại mối quan hệ.

4.3 Biến gender và union

Để hiểu rõ hơn mối quan hệ giữa nhóm giới tính (gender) và nhóm tình trạng tham gia công đoàn (union), chúng ta sẽ xây dựng bảng tần suất chéo thể hiện số lượng từng kết hợp giữa hai biến này. Sau đó, biểu đồ cột sẽ được sử dụng để trực quan hóa sự phân bố của nhóm tình trạng tham gia công đoàn theo từng giới tính, giúp quan sát dễ dàng sự khác biệt và xu hướng tiêu dùng giữa các nhóm.

Bảng tần suất chéo và trực quan hóa

Bảng tần suất chéo

k3 <- table(k_cat$gender,k_cat$union)
addmargins(k3) 
##         
##           no yes Sum
##   male   221  68 289
##   female 217  28 245
##   Sum    438  96 534

Bảng tần suất chéo theo tỷ lệ hàng

prop.table(k3, margin = 1)
##         
##                 no       yes
##   male   0.7647059 0.2352941
##   female 0.8857143 0.1142857

Trực quan hóa

# Chuyển sang data frame
k3_df <- as.data.frame(k3)
colnames(k3_df) <- c("gender", "union", "Frequency")
# Vẽ biểu đồ từ bảng tần suất
ggplot(k3_df, aes(x = gender, y = Frequency, fill = union)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Biểu đồ tần số giữa gender và union",
    x = "gender",
    y = "Tần số"
  ) +
  theme_minimal()

Nhận xét

Dựa vào biểu đồ trên ta thấy tỷ lệ nam giới tham gia công đoàn cao hơn nữ giới. Cụ thể, trong tổng số 289 nam thì có 68 người tham gia công đoàn chiếm khoảng 23,5%, trong khi ở nữ giới chỉ có 28 trên tổng số 245 người tham gia chiếm khoảng 11,4%. Điều này cho thấy nam giới có xu hướng gắn kết với công đoàn nhiều hơn so với nữ giới, phản ánh sự khác biệt về mức độ tham gia tổ chức lao động giữa hai giới. Tuy nhiên tổng thể thì nam và nữ điều không có xu hướng tham gia công đoàn bởi tỷ lệ nam và nư không tham gia chiếm tỷ lệ rất lớn.

Kiểm định thống kê (Kiểm định Chi-bình phương)

Để đánh giá xem có mối liên hệ có ý nghĩa thống kê giữa hai biến phân loại là gender và union hay không, sẽ sử dụng kiểm định Chi-bình phương (Chi-square test).

# Kiểm định
chisq_result <- chisq.test(k3)
# In kết quả
chisq_result
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  k3
## X-squared = 12.359, df = 1, p-value = 0.0004388

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Biến gender và biến union không có mối quan hệ.} \\\\ H_1: & \text{Biến gender và biến union có mối quan hệ.} \ \end{array} \right. \]

Nhận xét: Kết quả kiểm định: Với mức ý nghĩa 0.05, vì p-value = 0.0004388 < 0.05, bác bỏ giả thuyết \(H_0\). Vậy giữa biến gender và biến union tồn tại mối quan hệ.

4.4 Biến region và ethnicity

Để hiểu rõ hơn mối quan hệ giữa nhóm khu vực sinh sống (region) và nhóm chủng tộc (ethnicity), chúng ta sẽ xây dựng bảng tần suất chéo thể hiện số lượng từng kết hợp giữa hai biến này. Sau đó, biểu đồ cột sẽ được sử dụng để trực quan hóa sự phân bố của nhóm khcj vực sinh sống theo nhóm chủng tộc, giúp quan sát dễ dàng sự khác biệt và xu hướng tiêu dùng giữa các nhóm.

Bảng tần suất chéo và trực quan hóa

Bảng tần suất chéo

k4 <- table(k_cat$region,k_cat$ethnicity)
addmargins(k4) 
##        
##         cauc hispanic other Sum
##   south  117       12    27 156
##   other  323       15    40 378
##   Sum    440       27    67 534

Bảng tần suất chéo theo tỷ lệ hàng

prop.table(k4, margin = 1)
##        
##               cauc   hispanic      other
##   south 0.75000000 0.07692308 0.17307692
##   other 0.85449735 0.03968254 0.10582011

Trực quan hóa

# Chuyển sang data frame
k4_df <- as.data.frame(k4)
colnames(k4_df) <- c("region", "ethnicity", "Frequency")
# Vẽ biểu đồ từ bảng tần suất
ggplot(k4_df, aes(x = ethnicity, y = Frequency, fill = region)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "Biểu đồ tần suất giữa ethnicity và region",
    x = "ethnicity",
    y = "Tần suất"
  ) +
  theme_minimal()

Nhận xét

Biểu đồ trên thể hiện tần suất chéo giữ nhóm chủng tộc và nhóm khu vực sinh sống cho thấy sự phân bố không đồng điều giữa các nhóm. Cụ thể, nhóm người da trắng (cauc) chiếm tỷ lệ rất cao trong tổng thể, có 323 người ở khuc vực khác và 117 người ở khu vực phía nam. Nhóm người gốc Tây Ban Nha (hispanic) có số lượng rất ít và phân bố khá đồng đều giữa hai khu vực, chỉ chiếm tổng cộng 27 người. Nhóm các chủng tộc khác (other) cũng có số lượng tương đối nhỏ, với 27 người ở khu vực south và 40 người ở khu vực other. Nhìn chung, người da trắng có xu hướng sinh sống nhiều hơn ở khu vực khác ngoài miền Nam

Kiểm định thống kê (Kiểm định Chi-bình phương)

Để đánh giá xem có mối liên hệ có ý nghĩa thống kê giữa hai biến phân loại là region và ethnicity hay không, sẽ sử dụng kiểm định Chi-bình phương (Chi-square test).

# Kiểm định
chisq_result <- chisq.test(k4)
# In kết quả
chisq_result
## 
##  Pearson's Chi-squared test
## 
## data:  k4
## X-squared = 8.4735, df = 2, p-value = 0.01445

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Biến region và biến ethnicity không có mối quan hệ.} \\\\ H_1: & \text{Biến region và biến ethnicity có mối quan hệ.} \ \end{array} \right. \]

Nhận xét: Kết quả kiểm định: Với mức ý nghĩa 0.05, vì p-value = 0.01445 < 0.05, bác bỏ giả thuyết \(H_0\). Vậy giữa biến region và biến ethnicity tồn tại mối quan hệ.

Phần 5: Relative risk

Nhằm phân tích mối quan hệ giữa các biến, chúng ta sử dụng chỉ số Relative Risk (RR) để đo lường mức độ rủi ro hoặc khả năng xảy ra của một sự kiện.

5.1 Biến gender và union

TH1: Nam làm tham chiếu

RRGU1<- riskratio(k3)
RRGU1
## $data
##         
##           no yes Total
##   male   221  68   289
##   female 217  28   245
##   Total  438  96   534
## 
## $measure
##         risk ratio with 95% C.I.
##           estimate     lower     upper
##   male   1.0000000        NA        NA
##   female 0.4857143 0.3236845 0.7288529
## 
## $p.value
##         two-sided
##            midp.exact fisher.exact   chi.square
##   male             NA           NA           NA
##   female 0.0002542858 0.0002800058 0.0002849038
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét: Kết quả phân tích Relative Risk (RR) giữa giới tính (gender) và tình trạng tham gia công đoàn (union) cho thấy sự khác biệt rõ rệt giữa nam và nữ. Cụ thể, nam giới được chọn làm nhóm tham chiếu với RR = 1.00, trong khi nữ giới có RR = 0.486 tức là khả năng tham gia công đoàn của nữ khoảng 48.6% so với nam. Khoảng tin cậy 95% cho RR của nữ nằm trong khoảng từ 0.324 đến 0.729, cho thấy kết quả này có độ tin cậy cao. Hơn nữa, các kiểm định thống kê (midp.exact, fisher.exact, chi.square) đều cho giá trị p rất nhỏ (< 0.05), chứng tỏ sự khác biệt này có ý nghĩa thống kê.

TH2: Nữ làm tham chiếu

RRGU2<- riskratio(k3, rev ="r")
RRGU2
## $data
##         
##           no yes Total
##   female 217  28   245
##   male   221  68   289
##   Total  438  96   534
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate    lower    upper
##   female 1.000000       NA       NA
##   male   2.058824 1.372019 3.089428
## 
## $p.value
##         two-sided
##            midp.exact fisher.exact   chi.square
##   female           NA           NA           NA
##   male   0.0002542858 0.0002800058 0.0002849038
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét: Kết quả phân tích cho thấy, khi lấy nhóm nữ làm tham chiếu tỷ số rủi ro (RR) của nam là 2.06 với khoảng tin cậy 95% từ 1.37 đến 3.09, cho thấy nam giới có nguy cơ xảy ra sự kiện “yes” cao gấp hơn 2 lần so với nữ giới. Kết quả này có ý nghĩa thống kê với giá trị p < 0.05 ở cả ba phương pháp kiểm định (midp.exact, fisher.exact và chi-square). Như vậy, giới tính là yếu tố ảnh hưởng đáng kể đến nguy cơ xảy ra sự kiện.

5.2 Biến region và ethnicity

Kết hợp dữ liệu chủng tộc thành hai nhóm chính: nhóm người da trắng (Caucasian) và nhóm không phải da trắng (gồm Hispanic và các nhóm khác).

k4_new <- cbind(   # kết hợp hai cột này thành một bảng dữ liệu mới gọi là k4_new.
  cauc = k4[, "cauc"],  #lấy dữ liệu cột "cauc" từ bảng k4
  noncauc = k4[, "hispanic"] + k4[, "other"] # cộng dữ liệu hai cột "hispanic" và "other" từ bảng k4.
)
k4_new
##       cauc noncauc
## south  117      39
## other  323      55

TH1:South làm biến tham chiếu với noncauc

RRRE1<- riskratio(k4_new)
RRRE1
## $data
##       cauc noncauc Total
## south  117      39   156
## other  323      55   378
## Total  440      94   534
## 
## $measure
##                         NA
## risk ratio with 95% C.I.  estimate     lower     upper
##                    south 1.0000000        NA        NA
##                    other 0.5820106 0.4038466 0.8387748
## 
## $p.value
##          NA
## two-sided  midp.exact fisher.exact  chi.square
##     south          NA           NA          NA
##     other 0.005101815  0.005741448 0.003934991
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét: Kết quả phân tích tỷ số rủi ro (risk ratio) khi chọn khu vực South làm nhóm tham chiếu cho thấy rằng tỷ lệ xuất hiện nhóm không phải người da trắng (noncauc) ở khu vực Other thấp hơn đáng kể so với khu vực South, với risk ratio (RR) = 0.582. Điều này có nghĩa là nguy cơ thuộc nhóm noncauc ở khu vực Other chỉ bằng khoảng 58.2% so với khu vực South. Khoảng tin cậy 95% cho RR là từ 0.404 đến 0.839, không chứa giá trị 1 cho thấy sự khác biệt này có ý nghĩa thống kê. Hơn nữa, các giá trị p từ kiểm định mid-p exact, Fisher’s exact và chi-square đều nhỏ hơn 0.05, củng cố rằng sự khác biệt về tỷ lệ giữa hai khu vực là có ý nghĩa thống kê.

TH2: South làm biến tham chiếu với cauc

RRRE2<- riskratio(k4_new, rev ="c")
RRRE2
## $data
##       noncauc cauc Total
## south      39  117   156
## other      55  323   378
## Total      94  440   534
## 
## $measure
##                         NA
## risk ratio with 95% C.I. estimate    lower    upper
##                    south  1.00000       NA       NA
##                    other  1.13933 1.031225 1.258768
## 
## $p.value
##          NA
## two-sided  midp.exact fisher.exact  chi.square
##     south          NA           NA          NA
##     other 0.005101815  0.005741448 0.003934991
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét: Khi chọn khu vực South làm nhóm tham chiếu và so sánh tỷ lệ thuộc nhóm cauc (người da trắng), kết quả cho thấy khu vực Other có tỷ số rủi ro (RR) là 1.139, tức là nguy cơ thuộc nhóm cauc ở khu vực Other cao hơn 13.9% so với khu vực South. Khoảng tin cậy 95% của RR là từ 1.031 đến 1.259, không bao gồm 1 cho thấy sự khác biệt có ý nghĩa thống kê. Các kiểm định thống kê đi kèm như mid-p exact, Fisher’s exact và chi-square đều cho p-value < 0.05, củng cố rằng sự khác biệt giữa hai khu vực là có ý nghĩa.

Phần 6: Odd ratio

Chúng ta sẽ sử dụng odds ratio để phân tích mối liên hệ giữa hai biến định tính nhằm xác định xem có sự khác biệt đáng kể nào giữa các nhóm được so sánh hay không.

6.1 Biến gender và union

orgu <- oddsratio(k3)
orgu
## $data
##         
##           no yes Total
##   male   221  68   289
##   female 217  28   245
##   Total  438  96   534
## 
## $measure
##         odds ratio with 95% C.I.
##          estimate     lower     upper
##   male    1.00000        NA        NA
##   female  0.42126 0.2572726 0.6737883
## 
## $p.value
##         two-sided
##            midp.exact fisher.exact   chi.square
##   male             NA           NA           NA
##   female 0.0002542858 0.0002800058 0.0002849038
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Nhận xét

  • Giá trị OR = 0.42126 < 1 cho thấy tỷ số chênh (odds ratio) về khả năng tham gia công đoàn của nữ giới thấp hơn so với nam giới.

  • Nói cách khác, trong tập dữ liệu này là nữ giới có liên quan đến việc giảm odds tham gia công đoàn so với nam giới. Cụ thể, odds tham gia công đoàn của nữ thấp hơn khoảng 57.9% so với nam giới (vì 1 - 0.42126 = 0.57874), nếu giữ các yếu tố khác không đổi.

  • Khi xét đến khoảng tin cậy 95% của OR (từ 0.257 đến 0.674), ta thấy khoảng này không bao gồm giá trị 1 điều đó có nghĩa là kết quả có ý nghĩa thống kê ở mức tin cậy 95%.

  • Tóm lại, OR < 1 cho thấy một xu hướng rõ ràng và có ý nghĩa thống kê: nữ giới ít có khả năng tham gia công đoàn hơn nam giới trong bộ dữ liệu này.

⇒ Kết luận: Trong phạm vi dữ liệu hiện tại, giới tính là một yếu tố có ảnh hưởng đáng kể đến khả năng tham gia công đoàn, với odds ở nữ giới thấp hơn đáng kể so với nam giới.

6.2 Biến region và ethnicity

orre<- oddsratio(k4_new)
orre
## $data
##       cauc noncauc Total
## south  117      39   156
## other  323      55   378
## Total  440      94   534
## 
## $measure
##                         NA
## odds ratio with 95% C.I.  estimate     lower     upper
##                    south 1.0000000        NA        NA
##                    other 0.5111562 0.3223839 0.8154945
## 
## $p.value
##          NA
## two-sided  midp.exact fisher.exact  chi.square
##     south          NA           NA          NA
##     other 0.005101815  0.005741448 0.003934991
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Nhận xét

  • Giá trị OR = 0.5112 < 1 ⇒ cho thấy odds (tỷ số chênh) để một cá nhân là người non-caucasian (gồm hispanic + other) so với caucasian ở khu vực other là thấp hơn đáng kể so với khu vực south (nhóm Nói cách khác, cá nhân ở khu vực “other” có odds là non-caucasian khoảng 51.12% so với cá nhân ở khu vực “south”.

  • Khoảng tin cậy 95% của OR là từ 0.3224 đến 0.8155 và không bao gồm giá trị 1 ⇒ điều này cho thấy kết quả có ý nghĩa thống kê ở mức 95%.

  • Các kiểm định thống kê như fisher.exact, chi.square và midp.exact đều cho ra p-value < 0.05, ⇒ tăng thêm độ tin cậy cho kết luận trên.

LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSBUdeG6p24gNCINCmF1dGhvcjogIlF14buzbmggSMawxqFuZyINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVIOiVNOiVTLCAlZCAtICVtIC0gJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UgIA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNQ0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQoNCmBgYHtjc3MsZWNobyA9IEZBTFNFfQ0KaDEgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAzMnB4Ow0KICBmb250LXdlaWdodDogYm9sZA0KICB9DQoNCmgyIHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMjhweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogDQp9DQoNCmgzIHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMjRweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc3R5bGU6IGl0YWxpYzsNCn0NCg0KaDQge2ZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDIwcHg7DQogIGZvbnQtc3R5bGU6IGl0YWxpY30NCg0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDE4cHg7DQogIA0KfQ0KcDpub3QoaDEpOm5vdChoMik6bm90KGgzKTpub3QoaDQpOm5vdChoNSkgew0KICB0ZXh0LWluZGVudDogMmVtO30NCnAgew0KICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICB9DQoudG9jaWZ5LWhlYWRlciB7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQpgYGANCg0KIyAqKk5oaeG7h20gduG7pSA0KioNCg0KYGBge3IsbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShwc3ljaCkNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KERlc2NUb29scykNCmxpYnJhcnkoZXBpdG9vbHMpDQpsaWJyYXJ5KEFFUikNCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KDQojIyAqKlBo4bqnbiAxOlTDrG0gaGnhu4N1IHbDoCBjaHXhuqluIGLhu4sgZOG7ryBsaeG7h3UqKg0KDQojIyMgKioxLjEgR2nhu5tpIHRoaeG7h3UgYuG7mSBk4buvIGxp4buHdSoqDQoNCkLhu5kgZOG7ryBsaeG7h3UgQ1BTMTk4NSAoQ3VycmVudCBQb3B1bGF0aW9uIFN1cnZleSAxOTg1KSBsw6AgbeG7mXQgdOG6rXAgZOG7ryBsaeG7h3UgxJFp4buBdSB0cmEgY8OhIG5ow6JuIMSRxrDhu6NjIHRyw61jaCB4deG6pXQgdOG7qyBLaOG6o28gc8OhdCBEw6JuIHPhu5EgSGnhu4duIGjDoG5oIHThuqFpIEhvYSBL4buzLiBE4buvIGxp4buHdSBuw6B5IGN1bmcgY+G6pXAgdGjDtG5nIHRpbiB24buBIG3hu6ljIGzGsMahbmcgdGhlbyBnaeG7nSBjw7luZyBjw6FjIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYyB2w6Agbmdo4buBIG5naGnhu4dwIGPhu6dhIDUzNCBjw6EgbmjDom4gxJFhbmcgbMOgbSB2aeG7h2MsIGJhbyBn4buTbSBnaeG7m2kgdMOtbmgsIGNo4bunbmcgdOG7mWMsIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiwga2luaCBuZ2hp4buHbSwgdHXhu5VpLCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4sIG5naOG7gSBuZ2hp4buHcCB2w6Aga2h1IHbhu7FjIGzDoG0gdmnhu4djLiANCg0KYGBge3J9DQpkYXRhKCJDUFMxOTg1IikNCms8LUNQUzE5ODUNCmRhdGF0YWJsZShrLG9wdGlvbnMgPSBsaXN0KHNjcm9sbFggPSBUUlVFKSkgI2Lhuq10IGN14buZbiBuZ2FuZw0KYGBgDQoNCmBgYHtyfQ0KbmFtZXMoaykNCmBgYA0KDQoqKkLhu5kgZOG7ryBsaeG7h3UgduG7m2kgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQogDQpUYSB0aOG7sWMgaGnhu4duIHThuqFvIDEgZGF0YWZyYW1lIG3hu5tpIGNo4buJIGNo4bupYSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oLCB0YSBnw6FuIGRhdGEgbeG7m2kgbsOgeSB2w6BvIG9iamVjdCB24bubaSB0w6puIGtfY2F0Lg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmNhdDwtIGMoImV0aG5pY2l0eSIsICJyZWdpb24iLCJnZW5kZXIiLCAib2NjdXBhdGlvbiIsICJzZWN0b3IiLCJ1bmlvbiIsICJtYXJyaWVkIikNCmtfY2F0PC1rWywgY2F0XQ0KIyBUaGF5IMSR4buVaSBnacOhIHRy4buLIGPhu6dhIGJp4bq/biBgY2FyZGB2w6Agb3duZXINCmtfY2F0JG1hcnJpZWQgPC0gZHBseXI6OnJlY29kZShrX2NhdCRtYXJyaWVkLCAieWVzIiA9ICJNIiAsICJubyIgPSAiUyIpDQpkYXRhdGFibGUoa19jYXQsb3B0aW9ucyA9IGxpc3Qoc2Nyb2xsWCA9IFRSVUUpKQ0KYGBgDQoNCiMjIyAqKjEuMiBD4bqldSB0csO6YyBj4bunYSBk4buvIGxp4buHdSoqIA0KDQrEkOG7gyBjw7MgY8OhaSBuaMOsbiB04buVbmcgcXVhbiB24buBIGPhuqV1IHRyw7pjIGPhu6dhIGLhu5kgZOG7ryBsaeG7h3UsIGJhbyBn4buTbSBz4buRIGzGsOG7o25nIHF1YW4gc8OhdCwgc+G7kSBsxrDhu6NuZyBiaeG6v24sIGtp4buDdSBk4buvIGxp4buHdSBj4bunYSB04burbmcgYmnhur9uIHbDoCBt4buZdCBz4buRIGdpw6EgdHLhu4sgxJFp4buDbiBow6xuaCwgdGEgc+G7rSBk4bulbmcgaMOgbSBzdHIoKSBuaMawIHNhdToNCg0KYGBge3J9DQpzdHIoaykgI0PhuqV1IHRyw7pjIHRyb25nIGThu68gbGnhu4d1DQpgYGANCg0KUXVhIGvhur90IHF14bqjIGPhu6dhIGjDoG0gc3RyKCksIHRhIHRo4bqleSBi4buZIGThu68gbGnhu4d1IHRyb25nIG5naGnDqm4gY+G7qXUgbMOgIENQUzE5ODUgKEN1cnJlbnQgUG9wdWxhdGlvbiBTdXJ2ZXkgMTk4NSksIGJhbyBn4buTbSB0aMO0bmcgdGluIGPhu6dhIDUzNCBuZ8aw4budaSDEkWFuZyB0aGFtIGdpYSB0aOG7iyB0csaw4budbmcgbGFvIMSR4buZbmcgdOG6oWkgSG9hIEvhu7MuIEThu68gbGnhu4d1IMSRxrDhu6NjIHRodSB0aOG6rXAgbmjhurFtIG3hu6VjIMSRw61jaCBraOG6o28gc8OhdCBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIHbDoCBraW5oIHThur8g4oCTIHjDoyBo4buZaSDhuqNuaCBoxrDhu59uZyDEkeG6v24gdGh1IG5o4bqtcCBj4bunYSBuZ8aw4budaSBsYW8gxJHhu5luZy4gVOG6rXAgZOG7ryBsaeG7h3UgY2jhu6lhIHThu5VuZyBj4buZbmcgMTEgYmnhur9uLCBiYW8gZ+G7k20gY+G6oyBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZyB2w6AgYmnhur9uIMSR4buLbmggdMOtbmgsIGPhu6UgdGjhu4MgbmjGsCBzYXU6DQoNCioqQ8OhYyBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZzoqKg0KDQotIHdhZ2U6IE3hu6ljIGzGsMahbmcgdGhlbyBnaeG7nSBj4bunYSBjw6EgbmjDom4gKHTDrW5oIGLhurFuZyDEkcO0IGxhIE3hu7kpLCBsw6AgYmnhur9uIG3hu6VjIHRpw6p1IHF1YW4gdHLhu41uZyB0cm9uZyBuZ2hpw6puIGPhu6l1IHbhu4EgdGh1IG5o4bqtcC4NCg0KLSBlZHVjYXRpb246IFThu5VuZyBz4buRIG7Eg20gaOG7jWMgY2jDrW5oIHF1eSBj4bunYSBjw6EgbmjDom4sIHBo4bqjbiDDoW5oIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbi4NCg0KLSBleHBlcmllbmNlOiBT4buRIG7Eg20ga2luaCBuZ2hp4buHbSBsw6BtIHZp4buHYy4NCg0KLSBhZ2U6IFR14buVaSBoaeG7h24gdOG6oWkgY+G7p2EgY8OhIG5ow6JuLg0KDQoqKkPDoWMgYmnhur9uIMSR4buLbmggdMOtbmg6KioNCg0KLSBldGhuaWNpdHk6IENo4bunbmcgdOG7mWMsIMSRxrDhu6NjIHBow6JuIHRow6BuaCBiYSBuaMOzbSBjaMOtbmggKHbDrSBk4bulOiAiY2F1YyIsICJoaXNwYW5pYyIsICJvdGhlciIpLg0KDQotIHJlZ2lvbjogS2h1IHbhu7FjIHNpbmggc+G7kW5nLCBn4buTbSBoYWkgbeG7qWM6IG1p4buBbiBOYW0gKHNvdXRoKSB2w6AgY8OhYyBraHUgduG7sWMga2jDoWMgKG90aGVyKS4NCg0KLSBnZW5kZXI6IEdp4bubaSB0w61uaCBj4bunYSBjw6EgbmjDom4sIGJhbyBn4buTbSBuYW0gdsOgIG7hu68uDQoNCi0gb2NjdXBhdGlvbjogTmjDs20gbmfDoG5oIG5naOG7gSBjaMOtbmgsIMSRxrDhu6NjIGNoaWEgdGjDoG5oIHPDoXUgbG/huqFpIGtow6FjIG5oYXUuDQoNCi0gc2VjdG9yOiBLaHUgduG7sWMga2luaCB04bq/IG7GoWkgY8OhIG5ow6JuIGzDoG0gdmnhu4djLCB24bubaSBiYSBt4bupYyBuaMawIGtodSB24buxYyBz4bqjbiB4deG6pXQsIGtodSB24buxYyBjw7RuZywgdsOgIGtodSB24buxYyBraMOhYy4NCg0KLSB1bmlvbjogVMOsbmggdHLhuqFuZyB0aGFtIGdpYSBjw7RuZyDEkW/DoG4sIGPDsyBoYWkgbeG7qWMgbMOgIOKAnGPDs+KAnSB2w6Ag4oCca2jDtG5n4oCdLg0KDQotIG1hcnJpZWQ6IFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiwgZ+G7k20gaGFpIG3hu6ljIGzDoCDEkeG7mWMgdGjDom4gKFMpIHbDoCDEkcOjIGvhur90IGjDtG4gKE0pLg0KDQojIyMgKioxLjMgSGnhu4NuIHRo4buLIG3hu5l0IHbDoGkgZMOybmcgxJHhuqd1IHbDoCBjdeG7kWkgY+G7p2EgZOG7ryBsaeG7h3UqKg0KDQpOaOG6sW0gY8OzIMSRxrDhu6NjIGPDoWkgbmjDsm4gdOG7lW5nIHF1YW4gduG7gSBi4buZIGThu68gbGnhu4d1IHRhIHPhu60gZOG7pW5nIGjDoG0gaGVhZCgpIHbDoCB0YWlkKCkgxJHhu4MgeGVtIG3hu5l0IHPhu5EgZMOybmcgxJHhuqd1IHbDoCBkw7JuZyBjdeG7kWkgY+G7p2EgYuG7mSBk4buvIGxp4buHdSBDdXJyZW50IFBvcHVsYXRpb24gU3VydmV5IDE5ODU6IA0KDQpgYGB7cn0NCmhlYWQoaykgI2hp4buDbiB0aOG7iyB2w6BpIGTDsm5nIMSR4bqndQ0KYGBgDQpgYGB7cn0NCnRhaWwoaykgI2hp4buDbiB0aOG7iyB2w6BvIGTDsm5nIGN14buRaSANCmBgYA0KDQojIyMgKioxLjQgS2nhu4NtIHRyYSBnacOhIHRy4buLIHRoaeG6v3UqKg0KIA0KTmjhurFtIMSR4bqjbSBi4bqjbyBjaOG6pXQgbMaw4bujbmcgZOG7ryBsaeG7h3UgdsOgIHRyw6FuaCBzYWkgbOG7h2NoIHRyb25nIHF1w6EgdHLDrG5oIHBow6JuIHTDrWNoLCB0YSBj4bqnbiBraeG7g20gdHJhIHhlbSBi4buZIGThu68gbGnhu4d1IGPDsyBjaOG7qWEgZ2nDoSB0cuG7iyB0aGnhur91IChOQSkgaGF5IGtow7RuZy4gxJBp4buBdSBuw6B5IGdpw7pwIHjDoWMgxJHhu4tuaCBsaeG7h3UgY8OzIGPhuqduIHjhu60gbMO9IGhv4bq3YyBsw6BtIHPhuqFjaCBk4buvIGxp4buHdSB0csaw4bubYyBraGkgdGnhur9wIHThu6VjIHBow6JuIHTDrWNoOg0KDQpgYGB7cn0NCmlmIChhbnkoaXMubmEoaykpKSB7DQogIGNhdCgiQ8OzIGdpw6EgdHLhu4sgdGhp4bq/dSB0cm9uZyBk4buvIGxp4buHdS5cbiIpDQp9IGVsc2Ugew0KICBjYXQoIktow7RuZyBjw7MgZ2nDoSB0cuG7iyB0aGnhur91IHRyb25nIGThu68gbGnhu4d1LlxuIikNCn0NCmBgYA0KDQpW4bubaSDEkW/huqFuIGNvZGUgdHLDqm4gbuG6v3UgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBjw7MgYuG6pXQga8OsIGThu68gbGnhu4d1IG7DoG8gdGhp4bq/dSB0aMOsIGvhur90IHF14bqjIHPhur0gbmjhuq1uIMSRxrDhu6NjIGzDoCBjw7MgZ2nDoSB0cuG7iyB0aGnhur91IHRyb25nIGThu68gbGnhu4d1IHbDoCBuZ8aw4bujYyBs4bqhaS4gDQoNClbhu5tpIGLhu5kgZOG7ryBsaeG7h3UgxJHGsOG7o2MgZ8OhbiBjaG8gKiprKiogbmjhuq1uIMSRxrDhu6NjIGvhur90IHF14bqjIGzDoCBLaMO0bmcgY8OzIGdpw6EgdHLhu4sgdGhp4bq/dSB0cm9uZyBk4buvIGxp4buHdS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgZOG7ryBsaeG7h3UgIGtow7RuZyBjw7Mgw7QgdHLhu5FuZyBoYXkgZ2nDoSB0cuG7iyBi4buLIHRoaeG6v3UgdHJvbmcgdG/DoG4gYuG7mSBi4buZIGThu68gbGnhu4d1LiDEkMOieSBsw6AgxJFp4buBdSBraeG7h24gxJHhu4MgdGnhur9uIGjDoG5oIGPDoWMgcGjDom4gdMOtY2ggdGnhur9wIHRoZW8gbcOgIGtow7RuZyBj4bqnbiB0aOG7sWMgaGnhu4duIGLGsOG7m2MgeOG7rSBsw70gZ2nDoSB0cuG7iyB0aGnhur91Lg0KDQoNCiMjICoqUGjhuqduIDI6IFBow6JuIHTDrWNoIG3DtCB04bqjIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmgqKg0KDQojIyMgKioyLjEgQmnhur9uIGV0aG5pY2l0eSoqDQoNClRhIHRo4buxYyBoaeG7h24gdGjhu5FuZyBrw6ogdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0IGNobyBiaeG6v24gZXRobmljaXR5IMSRxrDhu6NjIGvhur90IHF14bqjIG5oxrAgc2F1Og0KDQoqVGjhu5FuZyBrw6ogdOG6p24gc3XhuqV0KiANCg0KYGBge3J9DQpldGhuaWNpdHlfMTwtdGFibGUoa19jYXQkZXRobmljaXR5KQ0KZXRobmljaXR5XzENCmBgYA0KDQpgYGB7cn0NCmV0aG5pY2l0eV8yPC10YWJsZShrX2NhdCRldGhuaWNpdHkpL3N1bShucm93KGtfY2F0KSkqMTAwICN04bqnbiBzdeG6pXQNCmV0aG5pY2l0eV8yDQpgYGANCg0KKlRy4buxYyBxdWFuIGjDs2EgZOG7ryBsaeG7h3UqDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpjIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoa19jYXQkZXRobmljaXR5KSkgI2NodXnhu4NuIGvhur90IHF14bqjIHRow6BuaCBi4bqjbmcgZOG7ryBsaeG7h3UgKGRhdGEuZnJhbWUpIHbhu5tpIDIgY+G7mXQNCmNvbG5hbWVzKGMpIDwtIGMoImV0aG5pY2l0eSIsICJDb3VudCIpDQpnZ3Bsb3QoYywgYWVzKHggPSBldGhuaWNpdHksIHkgPSBDb3VudCwgZmlsbCA9IGV0aG5pY2l0eSkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgbGFicyh0aXRsZSA9ICJCaeG7g3UgxJHhu5MgYmnhu4N1IHRo4buLIGNo4bunbmcgdOG7mWMiLCB4ID0gIkNo4bunbmcgdOG7mWMiLCB5ID0gIlPhu5EgbMaw4bujbmciKSArDQogIHRoZW1lX21pbmltYWwoKSArICANCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAic2FucyIpKQ0KYGBgDQoNCmBgYHtyfQ0KcGllKGV0aG5pY2l0eV8yLA0KbGFiZWxzID0gcGFzdGUobmFtZXMoZXRobmljaXR5XzIpLCByb3VuZChldGhuaWNpdHlfMiwgMiksICIlIiksDQptYWluID0gIlThu7cgbOG7hyBjaOG7p25nIHThu5ljIikNCmBgYA0KDQoqTmjhuq1uIHjDqXQqDQoNCkJp4buDdSDEkeG7kyBjaG8gdGjhuqV5IG5ow7NtIGNo4bunbmcgdOG7mWMgQ2F1Y2FzaWFuIChuZ8aw4budaSBkYSB04bqvbmcpIGNoaeG6v20gxrB1IHRo4bq/IHLDtSBy4buHdCB24bubaSA0NDAgbmfGsOG7nWkgODIuNCUgY2hp4bq/bSB04bu3IGzhu4cgY2FvIG5o4bqldCB0cm9uZyAzIG5ow7NtLiBOaMOzbSBvdGhlciDEkeG7qW5nIHRo4bupIGhhaSB24bubaSA2NyBuZ8aw4budaSwgdHJvbmcga2hpIEhpc3BhbmljIChN4bu5IGxhdGluaCkgY2jhu4kgY8OzIDI3IG5nxrDhu51pLiBT4buxIGNow6puaCBs4buHY2ggbsOgeSBjaG8gdGjhuqV5IG3huqt1IGto4bqjbyBzw6F0IGPDsyB4dSBoxrDhu5tuZyBuZ2hpw6puZyBuaGnhu4F1IHbhu4EgbeG7mXQgbmjDs20gY2jhu6duZyB04buZYyBuaOG6pXQgxJHhu4tuaCwgY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIMSR4bq/biBr4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1IG7hur91IG3hu6VjIHRpw6p1IGzDoCBwaOG6o24gw6FuaCBz4buxIMSRYSBk4bqhbmcgY2jhu6duZyB04buZYy4NCg0KIyMjICoqMi4yIEJp4bq/biByZWdpb24qKg0KDQpUYSB0aOG7sWMgaGnhu4duIHRo4buRbmcga8OqIHThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCBjaG8gYmnhur9uIHJlZ2lvbiDEkcaw4bujYyBr4bq/dCBxdeG6oyBuaMawIHNhdQ0KDQoqVGjhu5FuZyBrw6ogdOG6p24gc3XhuqV0KiANCg0KYGBge3J9DQpyZWdpb25fMTwtdGFibGUoa19jYXQkcmVnaW9uKQ0KcmVnaW9uXzENCmBgYA0KDQpgYGB7cn0NCnJlZ2lvbl8yPC10YWJsZShrX2NhdCRyZWdpb24pL3N1bShucm93KGtfY2F0KSkqMTAwICN04bqnbiBzdeG6pXQNCnJlZ2lvbl8yDQpgYGANCg0KKlRy4buxYyBxdWFuIGjDs2EgZOG7ryBsaeG7h3UqDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpyZWdpb25fMSA8LSBrX2NhdCB8Pg0KICBncm91cF9ieShyZWdpb24pIHw+DQogIHN1bW1hcmlzZShmcmVxID0gbigpKSB8Pg0KICBtdXRhdGUocGVyID0gZnJlcSAvIHN1bShmcmVxKSwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKGZyZXEsICIgKCIsIHJvdW5kKHBlciAqIDEwMCwgMSksICIlKSIpKQ0KDQpnZ3Bsb3QocmVnaW9uXzEgLCBhZXMoeCA9ICIiLCB5ID0gcGVyLCBmaWxsID0gcmVnaW9uKSkgKw0KICBnZW9tX2NvbCh3aWR0aCA9IDEsIGNvbG9yID0gIndoaXRlIikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChyb3VuZChwZXIqMTAwLCAyKSwgIiUiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwNCiAgICAgICAgICAgIHNpemUgPSAyLjUpICsNCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYXN0ZWwxIikgKyAgIyBC4bqhbiBjw7MgdGjhu4MgY2jhu41uIFNldDEsIFNldDIuLi4NCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgbmfGsOG7nWkgc2luaCBz4buRbmcg4bufIGPDoWMga2h1IHbhu7FjIiwgZmlsbCA9ICJLaHUgduG7sWMiKSArDQogIHRoZW1lX3ZvaWQoKQ0KDQpgYGANCg0KKk5o4bqtbiB4w6l0Kg0KDQpL4bq/dCBxdeG6oyBiaeG7g3UgxJHhu5MgY2hvIHRo4bqleSDEkWEgc+G7kSBuZ8aw4budaSBkw6JuIHNpbmggc+G7kW5nIHThuqFpIGPDoWMga2h1IHbhu7FjIG5nb8OgaSBtaeG7gW4gTmFtIGNoaeG6v20ga2hv4bqjbmcgNzAuNzklLCB0cm9uZyBraGkgY2jhu4kgY8OzIDI5LjIxJSBjxrAgdHLDuiB04bqhaSBraHUgduG7sWMgbWnhu4FuIE5hbS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgc+G7sSBwaMOibiBi4buRIGTDom4gY8awIHRyb25nIG3huqt1IGPDsyBwaOG6p24gbmdoacOqbmcgduG7gSBjw6FjIHbDuW5nIG5nb8OgaSBtaeG7gW4gTmFtLg0KDQojIyMgKioyLjMgQmnhur9uIGdlbmRlcioqDQoNClRhIHRo4buxYyBoaeG7h24gdGjhu5FuZyBrw6ogdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0IGNobyBiaeG6v24gcmVnaW9uIMSRxrDhu6NjIGvhur90IHF14bqjIG5oxrAgc2F1DQoNCipUaOG7kW5nIGvDqiB04bqnbiBzdeG6pXQqIA0KDQpgYGB7cn0NCmdlbmRlcl8xPC10YWJsZShrX2NhdCRnZW5kZXIpDQpnZW5kZXJfMQ0KYGBgDQoNCmBgYHtyfQ0KZ2VuZGVyXzI8LXRhYmxlKGtfY2F0JGdlbmRlcikvc3VtKG5yb3coa19jYXQpKSoxMDAgI3ThuqduIHN14bqldA0KZ2VuZGVyXzINCmBgYA0KDQoqVHLhu7FjIHF1YW4gaMOzYSBk4buvIGxp4buHdSoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmNvbHMgPC0gYygibGlnaHRibHVlIiwibGlnaHRwaW5rIikNCiMgTmjDo24gcGjhuqduIHRyxINtDQpnZW5kZXJfMmJkPC0gcGFzdGUwKCByb3VuZChnZW5kZXJfMiwgMiksICIlIikNCiMgVuG6vSBwaWUgDQpwaWUoDQogIGdlbmRlcl8yICwNCiAgbGFiZWxzID0gTkEsDQogIG1haW4gICA9ICJU4bqnbiBzdeG6pXQgYmnhur9uIGdp4bubaSB0w61uaCIsDQogIGNvbCAgICA9IGNvbHMsDQogIGJvcmRlciA9ICJ3aGl0ZSIpDQoNCiMgVGjDqm0gbGVnZW5kDQpsZWdlbmQoDQogIHggICAgICA9InRvcHJpZ2h0IiwNCiAgbGVnZW5kID0gcGFzdGUobmFtZXMoZ2VuZGVyXzIgKSxnZW5kZXJfMmJkKSwNCiAgZmlsbCAgID0gY29scywNCiAgKQ0KYGBgDQoNCipOaOG6rW4geMOpdCoNCg0KROG7sWEgdsOgbyBr4bq/dCBxdeG6oyBraOG6o28gc8OhdCB0csOqbiBjaG8gdGjhuqV5IHRyb25nIHPhu5Egbmjhu69uZyBuZ8aw4budaSBraOG6o28gc8OhdCBjw7MgMjg5IG5nxrDhu51pIGzDoCBuYW0gZ2nhu5tpIGNoaeG6v20gNTQuMTIlIHbDoCAyNDUgbmfGsOG7nWkgbMOgIG7hu68gZ2nhu5tpIGNoaeG6v20gNDUuODglLiBRdWEga+G6v3QgcXXhuqMgxJHDsyB0YSB0aOG6pXkgZ2nhu5tpIHTDrW5oIGPhu6dhIG5o4buvbmcga2jhuqNvIHPDoXQga2jDtG5nIGPDsyBz4buxIGNow6puaCBs4buHY2ggcXXDoSBuaGnhu4F1Lg0KDQojIyMgKioyLjQgQmnhur9uIG9jY3VwYXRpb24qKg0KDQpUYSB0aOG7sWMgaGnhu4duIHRo4buRbmcga8OqIHThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCBjaG8gYmnhur9uIG9jY3VwYXRpb24gxJHGsOG7o2Mga+G6v3QgcXXhuqMgbmjGsCBzYXUNCg0KKlRo4buRbmcga8OqIHThuqduIHN14bqldCogDQoNCmBgYHtyfQ0Kb2NjdXBhdGlvbl8xPC10YWJsZShrX2NhdCRvY2N1cGF0aW9uKQ0Kb2NjdXBhdGlvbl8xDQpgYGANCg0KYGBge3J9DQpvY2N1cGF0aW9uXzI8LXRhYmxlKGtfY2F0JG9jY3VwYXRpb24pL3N1bShucm93KGtfY2F0KSkqMTAwICN04bqnbiBzdeG6pXQNCm9jY3VwYXRpb25fMg0KYGBgDQoNCipUcuG7sWMgcXVhbiBow7NhIGThu68gbGnhu4d1Kg0KDQpgYGB7cn0NCmMzIDwtIGFzLmRhdGEuZnJhbWUob2NjdXBhdGlvbl8xKQ0KY29sbmFtZXMoYzMpIDwtIGMoIm9jY3VwYXRpb24iLCAiQ291bnQiKQ0KDQpnZ3Bsb3QoYzMsIGFlcyh4ID0gb2NjdXBhdGlvbiwgeSA9IENvdW50LCBmaWxsID0gb2NjdXBhdGlvbikpICsNCiAgZ2VvbV9jb2woZmlsbCA9ICJsaWdodGJsdWUiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh4ID0gIk5nw6BuaCBuZ2jhu4EiLCB5ID0gIlThuqduIHPhu5EiLCB0aXRsZSA9ICJDw6FjIG5nw6BuaCBuZ2jhu4Ega2jhuqNvIHPDoXQiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KKk5o4bqtbiB4w6l0Kg0KDQpL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IG5ow7NtIGPDtG5nIG5ow6JuICh3b3JrZXIpIGNoaeG6v20gdOG7tyBs4buHIGzhu5tuIG5o4bqldCB0cm9uZyBt4bqrdSBraOG6o28gc8OhdCBjaGnhur9tIGtob+G6o25nIDI4LDMzJSwgdGhlbyBzYXUgbMOgIG5ow7NtIGvhu7kgdGh14bqtdCAodGVjaG5pY2FsKSB2w6AgdsSDbiBwaMOybmcgKG9mZmljZSkgduG7m2kgbOG6p24gbMaw4bujdCAxOSwwNiUgdsOgIDE3LDYxJS4gVHJvbmcga2hpIMSRw7MsIG5ow7NtIGLDoW4gaMOgbmcgKHNhbGVzKSBjw7Mgc+G7kSBsxrDhu6NuZyB0aOG6pXAgbmjhuqV0LCBjaOG7iSBjaGnhur9tIDYsOTAlLiBT4buxIHBow6JuIGLhu5EgbsOgeSBjaG8gdGjhuqV5IHLhurFuZyBt4bqrdSBraOG6o28gc8OhdCBjw7MgeHUgaMaw4bubbmcgbmdoacOqbmcgduG7gSBjw6FjIG5nw6BuaCBsYW8gxJHhu5luZyBjaMOibiB0YXkgdsOgIGvhu7kgdGh14bqtdC4gDQoNCiMjIyAqKjIuNSBCaeG6v24gc2VjdG9yKioNCg0KVGEgdGjhu7FjIGhp4buHbiB0aOG7kW5nIGvDqiB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY2hvIGJp4bq/biBzZWN0b3IgxJHGsOG7o2Mga+G6v3QgcXXhuqMgbmjGsCBzYXUNCg0KKlRo4buRbmcga8OqIHThuqduIHN14bqldCogDQoNCmBgYHtyfQ0Kc2VjdG9yXzE8LXRhYmxlKGtfY2F0JHNlY3RvcikNCnNlY3Rvcl8xDQpgYGANCmBgYHtyfQ0Kc2VjdG9yXzI8LXRhYmxlKGtfY2F0JHNlY3Rvcikvc3VtKG5yb3coa19jYXQpKSoxMDAgI3ThuqduIHN14bqldA0Kc2VjdG9yXzINCmBgYA0KDQoqVHLhu7FjIHF1YW4gaMOzYSBk4buvIGxp4buHdSoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCmNvbHMgPC0gYygibGlnaHRibHVlIiwibGlnaHRwaW5rIiwgImxpZ2h0Z3JlZW4iKQ0KIyBOaMOjbiBwaOG6p24gdHLEg20NCnNlY3Rvcl8yYmQ8LSBwYXN0ZTAoIHJvdW5kKHNlY3Rvcl8yLCAyKSwgIiUiKQ0KIyBW4bq9IHBpZSBjaGFydCDhuqluIG5ow6NuDQpwaWUoDQogIHNlY3Rvcl8yLA0KICBsYWJlbHMgPSBOQSwNCiAgbWFpbiAgID0gIlThuqduIHN14bqldCBiaeG6v24gZ2nhu5tpIHTDrW5oIiwNCiAgY29sICAgID0gY29scywNCiAgYm9yZGVyID0gIndoaXRlIikNCg0KIyBUaMOqbSBsZWdlbmQgYsOqbiBuZ2/DoGkNCmxlZ2VuZCgNCiAgeCAgICAgID0idG9wcmlnaHQiLA0KICBsZWdlbmQgPSBwYXN0ZShuYW1lcyhzZWN0b3JfMiksc2VjdG9yXzJiZCksDQogIGZpbGwgICA9IGNvbHMsDQogICkNCmBgYA0KDQoqTmjhuq1uIHjDqXQqDQoNCkvhur90IHF14bqjIGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIG5nxrDhu51pIHRoYW0gZ2lhIGto4bqjbyBzw6F0IGzDoG0gdmnhu4djIHRyb25nIGtodSB24buxYyBraMOhYyAoY2hp4bq/bSBraG/huqNuZyA3Niw5NyUpLCB0cm9uZyBraGkgY2jhu4kgY8OzIDE4LDU0JSB0aHXhu5ljIGtodSB24buxYyBz4bqjbiB4deG6pXQgdsOgIDQsNDklIGzDoG0gdmnhu4djIHRyb25nIG5nw6BuaCB4w6J5IGThu7FuZy4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbeG6q3Uga2jhuqNvIHPDoXQgdOG6rXAgdHJ1bmcgY2jhu6cgeeG6v3UgdsOgbyBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgbMOgbSB2aeG7h2MgdHJvbmcgbMSpbmggduG7sWMgY8O0bmcgbmdoaeG7h3AgaGF5IHjDonkgZOG7sW5nLg0KDQojIyMgKioyLjYgQmnhur9uIHVuaW9uKioNCg0KVGEgdGjhu7FjIGhp4buHbiB0aOG7kW5nIGvDqiB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY2hvIGJp4bq/biB1bmlvbiDEkcaw4bujYyBr4bq/dCBxdeG6oyBuaMawIHNhdQ0KDQoqVGjhu5FuZyBrw6ogdOG6p24gc3XhuqV0KiANCg0KYGBge3J9DQp1bmlvbl8xPC10YWJsZShrX2NhdCR1bmlvbikNCnVuaW9uXzENCmBgYA0KYGBge3J9DQp1bmlvbl8yPC10YWJsZShrX2NhdCR1bmlvbikvc3VtKG5yb3coa19jYXQpKSoxMDAgI3ThuqduIHN14bqldA0KdW5pb25fMg0KYGBgDQoNCipUcuG7sWMgcXVhbiBow7NhIGThu68gbGnhu4d1Kg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KY29scyA8LSBjKCJsaWdodGJsdWUiLCJsaWdodHBpbmsiKQ0KIyBOaMOjbiBwaOG6p24gdHLEg20NCnVuaW9uXzJiZDwtIHBhc3RlMCggcm91bmQodW5pb25fMiwgMiksICIlIikNCiMgVuG6vSBwaWUgY2hhcnQg4bqpbiBuaMOjbg0KcGllKA0KICB1bmlvbl8yICwNCiAgbGFiZWxzID0gTkEsDQogIG1haW4gICA9ICJU4bqnbiBzdeG6pXQgdGhhbSBnaWEgaG/hurdjIGtow7RuZyBnaWEgY8O0bmcgxJFvw6BuIiwNCiAgY29sICAgID0gY29scywNCiAgYm9yZGVyID0gIndoaXRlIikNCg0KIyBUaMOqbSBsZWdlbmQgYsOqbiBuZ2/DoGkNCmxlZ2VuZCgNCiAgeCAgICAgID0idG9wcmlnaHQiLA0KICBsZWdlbmQgPSBwYXN0ZShuYW1lcyh1bmlvbl8yKSx1bmlvbl8yYmQpLA0KICBmaWxsICAgPSBjb2xzLA0KICApDQpgYGANCg0KKk5o4bqtbiB4w6l0Kg0KDQpE4buxYSB2w6BvIGvhur90IHF14bqjIHRyw6puIHRhIG5o4bqtbiB0aOG6pXkgc+G7kSBuZ8aw4budaSB0aGFtIGdpYSBjw7RuZyDEkW/DoG4gY2jhu4kgY2hp4buDbSAxNy45OCUgdHJvbmcga2hpIMSRw7Mgc+G7kSBuZ8aw4budaSBraMO0bmcgdGhhbSBnaWEgY8O0bmcgxJFvw6BuIGNoaeG6v20gdOG7tyBs4buHIGzhu5tuIHbhu5tpIDgyLjAyJS4gUXVhIGvhur90IHF14bqjIHRyw6puIHRhIHRo4bqleSBjw7Mgc+G7sSBjaMOqbmggbOG7h2NoIHF1w6EgbOG7m24gZ2nhu69hIDIgdHJhbmcgdGjDoWkuDQoNCiMjIyAqKjIuNyBCaeG6v24gbWFycmllZCoqDQoNClRhIHRo4buxYyBoaeG7h24gdGjhu5FuZyBrw6ogdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0IGNobyBiaeG6v24gbWFycmllZCDEkcaw4bujYyBr4bq/dCBxdeG6oyBuaMawIHNhdQ0KDQoqVGjhu5FuZyBrw6ogdOG6p24gc3XhuqV0KiANCg0KYGBge3J9DQptYXJyaWVkXzE8LXRhYmxlKGtfY2F0JG1hcnJpZWQpDQptYXJyaWVkXzENCmBgYA0KYGBge3J9DQptYXJyaWVkXzI8LXRhYmxlKGtfY2F0JG1hcnJpZWQpL3N1bShucm93KGtfY2F0KSkqMTAwICN04bqnbiBzdeG6pXQNCm1hcnJpZWRfMg0KYGBgDQoNCipUcuG7sWMgcXVhbiBow7NhIGThu68gbGnhu4d1Kg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KY29scyA8LSBjKCJsaWdodGJsdWUiLCJsaWdodHBpbmsiKQ0KIyBOaMOjbiBwaOG6p24gdHLEg20NCm1hcnJpZWRfMmJkPC0gcGFzdGUwKCByb3VuZChtYXJyaWVkXzIsIDIpLCAiJSIpDQojIFbhur0gcGllIGNoYXJ0IOG6qW4gbmjDo24NCnBpZSgNCiAgbWFycmllZF8yLA0KICBsYWJlbHMgPSBOQSwNCiAgbWFpbiAgID0gIlThu7cgbOG7hyB0w6xuaCB0cuG6oW5nIGvhur90IGjDtG4gY+G7p2EgbmfGsOG7nWkgZMOibiIsDQogIGNvbCAgICA9IGNvbHMsDQogIGJvcmRlciA9ICJ3aGl0ZSIpDQoNCiMgVGjDqm0gbGVnZW5kIGLDqm4gbmdvw6BpDQpsZWdlbmQoDQogIHggICAgICA9InRvcHJpZ2h0IiwNCiAgbGVnZW5kID0gcGFzdGUobmFtZXMobWFycmllZF8yKSxtYXJyaWVkXzJiZCksDQogIGZpbGwgICA9IGNvbHMsDQogICkNCmBgYA0KDQoqTmjhuq1uIHjDqXQqDQoNCkvhur90IHF14bqjIHBow6JuIHTDrWNoIGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIG5nxrDhu51pIGTDom4gdHJvbmcgbeG6q3Uga2jhuqNvIHPDoXQgxJHDoyBr4bq/dCBow7RuLCBjaGnhur9tIGtob+G6o25nIDY1LDU0JSwgdHJvbmcga2hpIHThu7cgbOG7hyBuZ8aw4budaSDEkeG7mWMgdGjDom4gbMOgIDM0LDQ2JS4gxJBp4buBdSBuw6B5IHBo4bqjbiDDoW5oIHLhurFuZyDEkWEgc+G7kSBuZ8aw4budaSDEkcaw4bujYyBraOG6o28gc8OhdCDEkWFuZyBz4buRbmcgdHJvbmcgY8OhYyBt4buRaSBxdWFuIGjhu4cgaMO0biBuaMOibiBjaMOtbmggdGjhu6ljLiANCg0KIyMgKipQaOG6p24gMzogxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHbDoCBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCBjaG8gdOG7tyBs4buHKioNCg0KIyMjICoqMy4xIEJp4bq/biBldGhuaWNpdHkqKg0KDQoqKljDoWMgxJHhu4tuaCBo4bqhbmcgbeG7pWMgcXVhbiB0w6JtKioNCg0KSOG6oW5nIG3hu6VjIMSRxrDhu6NjIHF1YW4gdMOibSDhu58gxJHDonkgbMOgIGNo4bunbmcgdOG7mWMgbmfGsOG7nWkgZGEgdHLhuq9uZyAoY2F1YykgdHJvbmcgbmjDsm0gY2h1bmhyIHThu5ljIChldGhuaWNpdHkpLg0KDQpgYGB7cn0NCm4xIDwtIHN1bShrX2NhdCRldGhuaWNpdHk9PSAiY2F1YyIpICAgICANCm5oMTwtIGxlbmd0aChrX2NhdCRldGhuaWNpdHkpICAgICAgICAgICAgIA0KYGBgDQoNCioqxq/hu5tjIGzGsOG7o25nIEtob+G6o25nIFRpbiBj4bqteSoqDQoNClRhIMaw4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgY2jhu6duZyB04buZYyBuZ8aw4budaSBkYSB0cuG6r25nIHRyb25nIHThu5VuZyB0aOG7gyBi4bqxbmc6DQoNCmBgYHtyfQ0KcHJvcC50ZXN0KG4xLCBuaDEsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgdOG7tyBs4buHIG5nxrDhu51pIGPDsyBjaOG7p25nIHThu5ljIGzDoCBuZ8aw4budaSBkYSB0cuG6r25nIChjYXVjYXNpYW4pIHRyb25nIHThu5VuZyB0aOG7gyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgbMOgIDAuODIzOTcsIHThu6ljIDgyLjQlLiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbsOgeSBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDAuNzg4NCDEkeG6v24gMC44NTQ4LCBuZ2jEqWEgbMOgIGNow7puZyB0YSBjw7MgdGjhu4MgdGluIHTGsOG7n25nIDk1JSBy4bqxbmcgdOG7tyBs4buHIHRo4buxYyB04bq/IG5nxrDhu51pIGRhIHRy4bqvbmcgdHJvbmcgdOG7lW5nIHRo4buDIG7hurFtIHRyb25nIGtob+G6o25nIDc4LjglIMSR4bq/biA4NS41JS4NCg0KKipLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCoqDQoNCkdp4bqjIHRodXnhur90Og0KDQokJA0KXGxlZnRcew0KXGJlZ2lue2FycmF5fXtsbH0NCkhfMDogJiBcdGV4dHtU4bu3IGzhu4cgY2jhu6duZyB04buZYyBuZ8aw4budaSBkYSB0cuG6r25nIHRyb25nIHThu5VuZyB0aOG7gyBsw6AgYuG6sW5nIDgwJX0gIFxcXFwNCkhfMTogJiBcdGV4dHtU4bu3IGzhu4cgY2jhu6duZyB04buZYyBuZ8aw4budaSBkYSB0cuG6r25nIHRyb25nIHThu5VuZyB0aOG7gyBsw6Aga2jDoWMgODAlfSBcDQpcZW5ke2FycmF5fQ0KXHJpZ2h0Lg0KJCQNCg0KYGBge3J9DQpwcm9wLnRlc3QobjEsIG5oMSwgcCA9IDAuOCwgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikgI2tp4buDbSDEkeG7i25oIDIgcGjDrWENCmBgYA0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cgduG7m2kgcC12YWx1ZSA9IDAuMTgzMyAoPiAwLjA1KSBjaG8gdGjhuqV5IGtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IHLhurFuZyB04bu3IGzhu4cgY2jhu6duZyB04buZYyBuZ8aw4budaSBkYSB0cuG6r25nIGLhurFuZyA4MCUgdHJvbmcgdOG7lW5nIHRo4buDLg0KDQojIyMgKiozLjIgQmnhur9uIHJlZ2lvbioqDQoNCioqWMOhYyDEkeG7i25oIGjhuqFuZyBt4bulYyBxdWFuIHTDom0qKg0KDQpI4bqhbmcgbeG7pWMgxJHGsOG7o2MgcXVhbiB0w6JtIOG7nyDEkcOieSBsw6Aga2h1IHbhu7FjIHNpbmggc+G7kW5nIOG7nyBwaMOtYSBuYW0gKHNvdXRoKSB0cm9uZyBuaMOzbSBraHUgduG7sWMgc+G7kW5nIChyZWdpb24pLg0KDQpgYGB7cn0NCm4yIDwtIHN1bShrX2NhdCRyZWdpb249PSAic291dGgiKSAgICAgDQpuaDI8LSBsZW5ndGgoa19jYXQkcmVnaW9uKSAgICAgICAgICAgICANCmBgYA0KDQoqKsav4bubYyBsxrDhu6NuZyBLaG/huqNuZyBUaW4gY+G6rXkqKg0KDQpUYSDGsOG7m2MgbMaw4bujbmcga2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gdOG7tyBs4buHIGtodSB24buxYyBzaW5oIHPhu5FuZyDhu58gcGjDrWEgbmFtIHRyb25nIHThu5VuZyB0aOG7gyBi4bqxbmc6DQoNCmBgYHtyfQ0KcHJvcC50ZXN0KG4yLCBuaDIsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgdOG7tyBs4buHIG5nxrDhu51pIHPhu5FuZyDhu58ga2h1YyB24buxYyBwaMOtYSBuYW0gdHJvbmcgdOG7lW5nIHRo4buDIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBsw6AgMC4yOTIxMzQ4LCB04bupYyAyOS4yMSUuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBuw6B5IG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgMC4yNTQzIMSR4bq/biAwLjMzMywgbmdoxKlhIGzDoCBjaMO6bmcgdGEgY8OzIHRo4buDIHRpbiB0xrDhu59uZyA5NSUgcuG6sW5nIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBuZ8aw4budaSBkYSB0cuG6r25nIHRyb25nIHThu5VuZyB0aOG7gyBu4bqxbSB0cm9uZyBraG/huqNuZyAyNS40MyUgxJHhur9uIDMzLjMlLiANCg0KKipLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCoqDQoNCkdp4bqjIHRodXnhur90Og0KDQokJA0KXGxlZnRcew0KXGJlZ2lue2FycmF5fXtsbH0NCkhfMDogJiBcdGV4dHtU4bu3IGzhu4cgbmfGsOG7nWkga2h1IHbhu7FjIHNpbmggc+G7kW5nIOG7nyBwaMOtYSBuYW0gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCBi4bqxbmcgMjAlfSAgXFxcXA0KSF8xOiAmIFx0ZXh0e1Thu7cgbOG7hyBuZ8aw4budaSBraHUgduG7sWMgc2luaCBz4buRbmcg4bufIHBow61hIG5hbSB0cm9uZyB04buVbmcgdGjhu4MgbMOgIGtow6FjIDIwJX0gXA0KXGVuZHthcnJheX0NClxyaWdodC4NCiQkDQoNCmBgYHtyfQ0KcHJvcC50ZXN0KG4yLCBuaDIsIHAgPSAwLjIsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpICNraeG7g20gxJHhu4tuaCAyIHBow61hDQpgYGANCg0KR2nDoSB0cuG7iyBwLXZhbHVlID0gMS4zNzRlLTA3PCBt4bupYyDDvSBuZ2jEqWEgNSUsIGNobyB0aOG6pXkga+G6v3QgcXXhuqMgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmggdOG7qWMgbMOgIGPDsyBi4bqxbmcgY2jhu6luZyByw7UgcsOgbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBi4bqxbmcgMC4yIHbDoCBraOG6s25nIMSR4buLbmggcuG6sW5nIHThu7cgbOG7hyBuZ8aw4budaSBz4buRbmcg4bufIOG7nyBraHUgduG7sWMgcGhpYSBuYW0gdHJvbmcgdOG7lW5nIHRo4buDIGtow6FjIDIwJS4gcGjDuSBo4bujcCB24bubaSB04bu3IGzhu4cgbeG6q3UgxrDhu5tjIGzGsOG7o25nICgwLjI5MjEzNDgpLiDEkGnhu4F1IG7DoHkga2jhurNuZyDEkeG7i25oIHLhurFuZyB04bu3IGzhu4cgbmfGsOG7nWkgc+G7kW5nIOG7nyBraHUgduG7sWMgcGhpYSBuYW0geOG6pXAgeOG7iSAyOS4yMSUuDQoNCiMjIyAqKjMuMyBCaeG6v24gZ2VuZGVyKioNCg0KKipYw6FjIMSR4buLbmggaOG6oW5nIG3hu6VjIHF1YW4gdMOibSoqDQoNCkjhuqFuZyBt4bulYyDEkcaw4bujYyBxdWFuIHTDom0g4bufIMSRw6J5IGzDoCBnaeG7m2kgdMOtbmggbmFtIChtYWxlKSB0cm9uZyBuaMOzbSBnaeG7m2kgdMOtbmggKGdlbmRlcikuDQoNCmBgYHtyfQ0KbjMgPC0gc3VtKGtfY2F0JGdlbmRlcj09ICJtYWxlIikgICAgIA0KbmgzPC0gbGVuZ3RoKGtfY2F0JGdlbmRlcikgICAgICAgICAgICAgDQpgYGANCg0KKirGr+G7m2MgbMaw4bujbmcgS2hv4bqjbmcgVGluIGPhuq15KioNCg0KVGEgxrDhu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBnaeG7m2kgdMOtbmggbmFtIHRyb25nIHThu5VuZyB0aOG7gyBi4bqxbmc6DQoNCmBgYHtyfQ0KcHJvcC50ZXN0KG4zLCBuaDMsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgdOG7tyBs4buHIGdp4bubaSB0w61uaCBsw6AgbmFtIHRyb25nIHThu5VuZyB0aOG7gyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgbMOgIDAuNTQxMTk4NSwgdOG7qWMgNTQuMTElLiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbsOgeSBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDAuNDk3OSDEkeG6v24gMC41ODM5LCBuZ2jEqWEgbMOgIGNow7puZyB0YSBjw7MgdGjhu4MgdGluIHTGsOG7n25nIDk1JSBy4bqxbmcgdOG7tyBs4buHIHRo4buxYyB04bq/IG5nxrDhu51pIGRhIHRy4bqvbmcgdHJvbmcgdOG7lW5nIHRo4buDIG7hurFtIHRyb25nIGtob+G6o25nIDQ5Ljc5JSDEkeG6v24gNTguMzklLiANCg0KKipLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCoqDQoNCkdp4bqjIHRodXnhur90Og0KDQokJA0KXGxlZnRcew0KXGJlZ2lue2FycmF5fXtsbH0NCkhfMDogJiBcdGV4dHtU4bu3IGzhu4cgZ2nhu5tpIHTDrW5oIG5hbSB0cm9uZyB04buVbmcgdGjhu4MgbMOgIGLhurFuZyA1MCV9ICBcXFxcDQpIXzE6ICYgXHRleHR7VOG7tyBs4buHIGdp4bubaSB0w61uaCBuYW0gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCBraMOhYyA1MCV9IFwNClxlbmR7YXJyYXl9DQpccmlnaHQuDQokJA0KDQpgYGB7cn0NCnByb3AudGVzdChuMywgbmgzLCBwID0gMC41LCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKSAja2nhu4NtIMSR4buLbmggMiBwaMOtYQ0KYGBgDQoNCkdpw6EgdHLhu4sgcC12YWx1ZSA8IDIuMmUtMTYgcuG6pXQgbmjhu48sIGNobyB0aOG6pXkga+G6v3QgcXXhuqMgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmggdOG7qWMgbMOgIGPDsyBi4bqxbmcgY2jhu6luZyByw7UgcsOgbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkIHThu7cgbOG7hyBi4bqxbmcgMC4yIHbDoCBraOG6s25nIMSR4buLbmggcuG6sW5nIHThu7cgbOG7hyBnaeG7m2kgdMOtbmggbmFtIHRyb25nIHThu5VuZyB0aOG7gyBraMOhYyAyMCUuIHBow7kgaOG7o3AgduG7m2kgdOG7tyBs4buHIG3huqt1IMaw4bubYyBsxrDhu6NuZyAoMC41NDExOTg1KS4gxJBp4buBdSBuw6B5IGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgdOG7tyBs4buHIGdp4bubaSB0w61uaCBuYW0geOG6pXAgeOG7iSA1NC4xMSUuDQoNCiMjIyAqKjMuNCBCaeG6v24gb2NjdXBhdGlvbioqDQoNCioqWMOhYyDEkeG7i25oIGjhuqFuZyBt4bulYyBxdWFuIHTDom0qKg0KDQpI4bqhbmcgbeG7pWMgxJHGsOG7o2MgcXVhbiB0w6JtIOG7nyDEkcOieSBsw6AgY8O0bmcgbmjDom4gdHJvbmcgbmjDs20gY8OhYyBuZ8Ogbmggbmdo4buBIChvY2N1cGF0aW9uKS4NCg0KYGBge3J9DQpuNDwtIHN1bShrX2NhdCRvY2N1cGF0aW9uPT0gIndvcmtlciIpICAgICANCm5oNDwtIGxlbmd0aChrX2NhdCRvY2N1cGF0aW9uKSAgICAgICAgICAgICANCmBgYA0KDQoqKsav4bubYyBsxrDhu6NuZyBLaG/huqNuZyBUaW4gY+G6rXkqKg0KDQpUYSDGsOG7m2MgbMaw4bujbmcga2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gdOG7tyBs4buHIGPDtG5nIG5ow6JuIHRyb25nIHThu5VuZyB0aOG7gyBi4bqxbmc6DQoNCmBgYHtyfQ0KcHJvcC50ZXN0KG40LCBuaDQsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgdOG7tyBs4buHIGPDtG5nIHZp4buHYyBsw6AgY8O0bmcgbmjDom4gdHJvbmcgdOG7lW5nIHRo4buDIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBsw6AgMC4yOTIxMzQ4LCB04bupYyAyOS4yMSUuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBuw6B5IG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgMC4yNTQzIMSR4bq/biAwLjMzMywgbmdoxKlhIGzDoCBjaMO6bmcgdGEgY8OzIHRo4buDIHRpbiB0xrDhu59uZyA5NSUgcuG6sW5nICB04bu3IGzhu4cgY8O0bmcgdmnhu4djIGzDoCBjw7RuZyBuaMOibiAod29ya2VyKSB04buVbmcgdGjhu4MgbuG6sW0gdHJvbmcga2hv4bqjbmcgMjUuNDMlIMSR4bq/biAzMy4zJS4gDQoNCioqS2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QqKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJCQNClxsZWZ0XHsNClxiZWdpbnthcnJheX17bGx9DQpIXzA6ICYgXHRleHR7VOG7tyBs4buHIG5ow7NtIG5nw6BuaCBjw7RuZyBuaMOibiB0cm9uZyB04buVbmcgdGjhu4MgbMOgIGLhurFuZyAyMCV9ICBcXFxcDQpIXzE6ICYgXHRleHR7VOG7tyBs4buHIG5ow7NtIG5nw6BuaCBjw7RuZyBuaMOibiAgdHJvbmcgdOG7lW5nIHRo4buDIGzDoCBraMOhYyAyMCV9IFwNClxlbmR7YXJyYXl9DQpccmlnaHQuDQokJA0KDQpgYGB7cn0NCnByb3AudGVzdChuNCwgbmg0LCBwID0gMC4yLCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKSAja2nhu4NtIMSR4buLbmggMiBwaMOtYQ0KYGBgDQoNCkdpw6EgdHLhu4sgcC12YWx1ZSA9IDEuMzc0ZS0wNzwgbeG7qWMgw70gbmdoxKlhIDUlLCBjaG8gdGjhuqV5IGvhur90IHF14bqjIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgbeG6oW5oIHThu6ljIGzDoCBjw7MgYuG6sW5nIGNo4bupbmcgcsO1IHLDoG5nIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cgYuG6sW5nIDAuMiB2w6Aga2jhurNuZyDEkeG7i25oIHLhurFuZyB04bu3IGzhu4cgY+G7mW5nIHZp4buHYyBsw6AgY8O0bmcgbmjDom4gdHJvbmcgdOG7lW5nIHRo4buDIGtow6FjIDIwJS4gcGjDuSBo4bujcCB24bubaSB04bu3IGzhu4cgbeG6q3UgxrDhu5tjIGzGsOG7o25nICgwLjI5MjEzNDgpLiDEkGnhu4F1IG7DoHkga2jhurNuZyDEkeG7i25oIHLhurFuZyB04bu3IGzhu4cgbmfGsOG7nWkgc+G7kW5nIOG7nyBraHUgduG7sWMgcGhpYSBuYW0geOG6pXAgeOG7iSAyOS4yMSUuDQoNCiMjIyAqKjMuNSBCaeG6v24gc2VjdG9yKioNCg0KKipYw6FjIMSR4buLbmggaOG6oW5nIG3hu6VjIHF1YW4gdMOibSoqDQoNCkjhuqFuZyBt4bulYyDEkcaw4bujYyBxdWFuIHTDom0g4bufIMSRw6J5IGzDoCBraHUgduG7sWMgc+G6o24geHXhuqV0IChtYW51ZmFjdHVyaW5nKSB0cm9uZyBuaMOzbSBLaHUgduG7sWMga2luaCB04bq/IG7GoWkgY8OhIG5ow6JuIGzDoG0gdmnhu4djIChzZWN0b3IpLg0KDQpgYGB7cn0NCm41IDwtIHN1bShrX2NhdCRzZWN0b3I9PSAibWFudWZhY3R1cmluZyIpICAgICANCm5oNTwtIGxlbmd0aChrX2NhdCRzZWN0b3IpICAgICAgICAgICAgIA0KYGBgDQoNCioqxq/hu5tjIGzGsOG7o25nIEtob+G6o25nIFRpbiBj4bqteSoqDQoNClRhIMaw4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cga2h1IHbhu7FjIHPhuqNuIHh14bqldCB0cm9uZyB04buVbmcgdGjhu4MgYuG6sW5nOg0KDQpgYGB7cn0NCnByb3AudGVzdChuNSwgbmg1LCBjb25mLmxldmVsID0gMC45NSkNCmBgYA0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IHThu7cgbOG7hyAga2h1IHbhu7FjIHPhuqNuIHh14bqldCB0cm9uZyB04buVbmcgdGjhu4MgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGzDoCAwLjE4NTM5MzMsIHThu6ljIDE4LjU0JS4gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gdOG7tyBs4buHIG7DoHkgbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyAwLjE1MzkgxJHhur9uIDAuMjIxNiwgbmdoxKlhIGzDoCBjaMO6bmcgdGEgY8OzIHRo4buDIHRpbiB0xrDhu59uZyA5NSUgcuG6sW5nIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBraHUgduG7sWMgc+G6o24geHXhuqV0IHRyb25nIHThu5VuZyB0aOG7gyBu4bqxbSB0cm9uZyBraG/huqNuZyAxNS4zOSUgxJHhur9uIDIyLjE2JS4gDQoNCioqS2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QqKg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJCQNClxsZWZ0XHsNClxiZWdpbnthcnJheX17bGx9DQpIXzA6ICYgXHRleHR7VOG7tyBs4buHIGtodSB24buxYyBz4bqjbiB4deG6pXQgdHJvbmcgdOG7lW5nIHRo4buDIGzDoCBi4bqxbmcgMTAlfSAgXFxcXA0KSF8xOiAmIFx0ZXh0e1Thu7cgbOG7hyBraHUgduG7sWMgc+G6o24geHXhuqV0IHRyb25nIHThu5VuZyB0aOG7gyBsw6Aga2jDoWMgMTAlfSBcDQpcZW5ke2FycmF5fQ0KXHJpZ2h0Lg0KJCQNCg0KYGBge3J9DQpwcm9wLnRlc3QobjUsIG5oNSwgcCA9IDAuMSwgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIikgI2tp4buDbSDEkeG7i25oIDIgcGjDrWENCmBgYA0KDQpHacOhIHRy4buLIHAtdmFsdWUgPSA3Ljc0ZS0xMSA8IG3hu6ljIMO9IG5naMSpYSA1JSwgY2hvIHRo4bqleSBr4bq/dCBxdeG6oyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaCB04bupYyBsw6AgY8OzIGLhurFuZyBjaOG7qW5nIHLDtSByw6BuZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgdOG7tyBs4buHIGLhurFuZyAwLjEgdsOgIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgdOG7tyBs4buHIDcuNzRlLTExIHRyb25nIHThu5VuZyB0aOG7gyBraMOhYyAxMCUuIHBow7kgaOG7o3AgduG7m2kgdOG7tyBs4buHIG3huqt1IMaw4bubYyBsxrDhu6NuZyAoMC4xODU0KS4gxJBp4buBdSBuw6B5IGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgdOG7tyBs4buHIGtodSB24buxYyBz4bqjbiBzdeG6pXQgeOG6pXAgeOG7iSAxOC41NCUuDQoNCiMjICoqUGjhuqduIDQ6IFBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgaGFpIGJp4bq/biDEkeG7i25oIHTDrW5oKioNCg0KIyMjICoqNC4xIEJp4bq/biAgZ2VuZGVyIHbDoCBvY2N1cGF0aW9uKioNCg0KxJDhu4MgaGnhu4N1IHLDtSBoxqFuIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgZ2nhu5tpIHTDrW5oIChHZW5kZXIpIHbDoCBuaMOzbSBuZ2jhu4EgbmdoaeG7h3AgKG9jY3VwYXRpb24pLCBjaMO6bmcgdGEgc+G6vSB4w6J5IGThu7FuZyBi4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvIHRo4buDIGhp4buHbiBz4buRIGzGsOG7o25nIHThu6tuZyBr4bq/dCBo4bujcCBnaeG7r2EgaGFpIGJp4bq/biBuw6B5LiBTYXUgxJHDsywgYmnhu4N1IMSR4buTIGPhu5l0IHPhur0gxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgdHLhu7FjIHF1YW4gaMOzYSBz4buxIHBow6JuIGLhu5EgY+G7p2EgY8OhYyBuaMOzbSBuZ8Ogbmggbmdo4buBIHRoZW8gdOG7q25nIGdp4bubaSB0w61uaCwgZ2nDunAgcXVhbiBzw6F0IGThu4UgZMOgbmcgc+G7sSBraMOhYyBiaeG7h3QgdsOgIHh1IGjGsOG7m25nIHRpw6p1IGTDuW5nIGdp4buvYSBjw6FjIG5ow7NtLg0KDQoqKkLhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8gdsOgIHRy4buxYyBxdWFuIGjDs2EqKg0KDQoqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyoNCg0KYGBge3J9DQprMSA8LSB0YWJsZShrX2NhdCRnZW5kZXIsa19jYXQkb2NjdXBhdGlvbikNCmFkZG1hcmdpbnMoazEpIA0KYGBgDQoNCipC4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvIHRoZW8gdOG7tyBs4buHIGjDoG5nKg0KDQpgYGB7cn0NCnByb3AudGFibGUoazEsIG1hcmdpbiA9IDEpDQpgYGANCg0KKlRy4buxYyBxdWFuIGjDs2EqDQogDQpgYGB7cn0NCiMgQ2h1eeG7g24gc2FuZyBkYXRhIGZyYW1lDQprMV9kZiA8LSBhcy5kYXRhLmZyYW1lKGsxKQ0KY29sbmFtZXMoazFfZGYpIDwtIGMoImdlbmRlciIsICJvY2N1cGF0aW9uIiwgIkZyZXF1ZW5jeSIpDQojIFbhur0gYmnhu4N1IMSR4buTIHThu6sgYuG6o25nIHThuqduIHN14bqldA0KZ2dwbG90KGsxX2RmLCBhZXMoeCA9IGdlbmRlciwgeSA9IEZyZXF1ZW5jeSwgZmlsbCA9IG9jY3VwYXRpb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJCaeG7g3UgxJHhu5MgdOG6p24gc3XhuqV0IGdp4buvYSBnZW5kZXIgdsOgIG9jY3VwYXRpb24iLA0KICAgIHggPSAiZ2VuZGVyIiwNCiAgICB5ID0gIlThuqduIHN14bqldCINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQpgYGANCg0KKk5o4bqtbiB4w6l0Kg0KDQpCaeG7g3UgxJHhu5MgdOG6p24gc3XhuqV0IGdp4buvYSBnaeG7m2kgdMOtbmggKGdlbmRlcikgdsOgIG5ow7NtIG5nw6BuaCBuZ2jhu4EgKG9jY3VwYXRpb24pIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IHbhu4EgcGjDom4gYuG7lSBnaeG7m2kgdMOtbmggdHJvbmcgdOG7q25nIGzEqW5oIHbhu7FjIG5naOG7gSBuZ2hp4buHcC4gQ+G7pSB0aOG7gywgbmFtIGdp4bubaSBjaGnhur9tIMawdSB0aOG6vyB2xrDhu6N0IHRy4buZaSB0cm9uZyBuZ8Ogbmggd29ya2VyIHbhu5tpIDEyNiBuZ8aw4budaSwgdHJvbmcga2hpIG7hu68gZ2nhu5tpIGNo4buJIGPDsyAzMCBuZ8aw4budaSB0cm9uZyBuZ8OgbmggbsOgeSwgxJHDonkgY8WpbmcgbMOgIG5nw6BuaCBtw6AgbmFtIGdp4bubaSB0aGFtIGdpYSBuaGnhu4F1IG5o4bqldCB2w6AgbuG7ryBnaeG7m2kgdGhhbSBnaWEgw610IG5o4bqldC4gTmfGsOG7o2MgbOG6oWksIG5nw6BuaCBvZmZpY2UgbMOgIG7GoWkgbuG7ryBnaeG7m2kgY2hp4bq/bSDGsHUgdGjhur8gcsO1IHLhu4d0IHbhu5tpIDc2IG5nxrDhu51pLCBjYW8gZ+G6p24gZ+G6pXAgNCBs4bqnbiBzbyB24bubaSBuYW0gZ2nhu5tpICgyMSBuZ8aw4budaSksIMSR4buTbmcgdGjhu51pIGPFqW5nIGzDoCBuZ8OgbmggY8OzIHThu7cgbOG7hyBuYW0gdGjhuqVwIG5o4bqldC4gDQoNCipLaeG7g20gxJHhu4tuaCB0aOG7kW5nIGvDqiAoS2nhu4NtIMSR4buLbmggQ2hpLWLDrG5oIHBoxrDGoW5nKSoNCg0KxJDhu4MgxJHDoW5oIGdpw6EgeGVtIGPDsyBt4buRaSBsacOqbiBo4buHIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogZ2nhu69hIGhhaSBiaeG6v24gcGjDom4gbG/huqFpIGzDoCBHZW5kZXIgdsOgIG9jY3VwYXRpb24gaGF5IGtow7RuZywgc+G6vSBz4butIGThu6VuZyBraeG7g20gxJHhu4tuaCBDaGktYsOsbmggcGjGsMahbmcgKENoaS1zcXVhcmUgdGVzdCkuIA0KDQpgYGB7cn0NCiMgS2nhu4NtIMSR4buLbmgNCmNoaXNxX3Jlc3VsdCA8LSBjaGlzcS50ZXN0KGsxKQ0KIyBJbiBr4bq/dCBxdeG6ow0KY2hpc3FfcmVzdWx0DQpgYGANCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiQkDQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2xsfQ0KSF8wOiAmIFx0ZXh0e0Jp4bq/biBnZW5kZXIgdsOgIGJp4bq/biBvY2N1cGF0aW9uIGtow7RuZyBjw7MgbeG7kWkgcXVhbiBo4buHLn0gIFxcXFwNCkhfMTogJiBcdGV4dHtCaeG6v24gZ2VuZGVyIHbDoCBiaeG6v24gb2NjdXBhdGlvbiBjw7MgbeG7kWkgcXVhbiBo4buHLn0gXA0KXGVuZHthcnJheX0NClxyaWdodC4NCiQkDQoNCipOaOG6rW4geMOpdCo6IEvhur90IHF14bqjIGtp4buDbSDEkeG7i25oOiBW4bubaSBt4bupYyDDvSBuZ2jEqWEgMC4wNSwgdsOsIHAtdmFsdWUgPSAyLjJlLTE2IDwgMC4wNSwgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkLiBW4bqteSAgZ2nhu69hIGJp4bq/biBnZW5kZXIgdsOgIGJp4bq/biBvY2N1cGF0aW9uIHThu5NuIHThuqFpIG3hu5FpIHF1YW4gaOG7hy4gDQoNCiMjIyAqKjQuMiBCaeG6v24gIG9jY3VwYXRpb24gdsOgIHNlY3RvcioqDQoNCsSQ4buDIGhp4buDdSByw7UgaMahbiBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIG5ow7NtIGtodSB24buxYyBsw6BtIHZp4buHYyAoc2VjdG9yKSB2w6AgbmjDs20gbmdo4buBIG5naGnhu4dwIChvY2N1cGF0aW9uKSwgY2jDum5nIHRhIHPhur0geMOieSBk4buxbmcgYuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aOG7gyBoaeG7h24gc+G7kSBsxrDhu6NuZyB04burbmcga+G6v3QgaOG7o3AgZ2nhu69hIGhhaSBiaeG6v24gbsOgeS4gU2F1IMSRw7MsIGJp4buDdSDEkeG7kyBj4buZdCBz4bq9IMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHRy4buxYyBxdWFuIGjDs2Egc+G7sSBwaMOibiBi4buRIGPhu6dhIGPDoWMgbmjDs20ga2h1IHbhu7FjIGzDoG0gdmnhu4djIHRoZW8gdOG7q25nIG5ow7NtIG5nw6BuaCBuZ2jhu4EsIGdpw7pwIHF1YW4gc8OhdCBk4buFIGTDoG5nIHPhu7Ega2jDoWMgYmnhu4d0IHbDoCB4dSBoxrDhu5tuZyB0acOqdSBkw7luZyBnaeG7r2EgY8OhYyBuaMOzbS4NCg0KKipC4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvIHbDoCB0cuG7sWMgcXVhbiBow7NhKioNCg0KKkLhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8qDQoNCmBgYHtyfQ0KazIgPC0gdGFibGUoa19jYXQkb2NjdXBhdGlvbixrX2NhdCRzZWN0b3IpDQphZGRtYXJnaW5zKGsyKSANCmBgYA0KDQoqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aGVvIHThu7cgbOG7hyBow6BuZyoNCg0KYGBge3J9DQpwcm9wLnRhYmxlKGsyLCBtYXJnaW4gPSAxKQ0KYGBgDQoNCipUcuG7sWMgcXVhbiBow7NhKg0KIA0KYGBge3J9DQojIENodXnhu4NuIHNhbmcgZGF0YSBmcmFtZQ0KazJfZGYgPC0gYXMuZGF0YS5mcmFtZShrMikNCmNvbG5hbWVzKGsyX2RmKSA8LSBjKCJzZWN0b3IiLCAib2NjdXBhdGlvbiIsICJGcmVxdWVuY3kiKQ0KIyBW4bq9IGJp4buDdSDEkeG7kyB04burIGLhuqNuZyB04bqnbiBzdeG6pXQNCmdncGxvdChrMl9kZiwgYWVzKHggPSBvY2N1cGF0aW9uLCB5ID0gRnJlcXVlbmN5LCBmaWxsID0gc2VjdG9yKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArIA0KICBsYWJzKA0KICAgIHRpdGxlID0gIkJp4buDdSDEkeG7kyB04bqnbiBzdeG6pXQgZ2nhu69hIHNlY3RvciB2w6Agb2NjdXBhdGlvbiIsDQogICAgeCA9ICIgc2VjdG9yIiwNCiAgICB5ID0gIlThuqduIHPhu5EiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCipOaOG6rW4geMOpdCoNCg0KROG7sWEgdsOgbyBiaeG6u3UgxJHDsiB0csOqbiB0YSBuaOG6rW4gdGjhuqV5IHPhu7EgcGjDom4gYuG7kSBraMO0bmcgxJHhu5NuZyDEkeG7gXUgZ2nhu69hIGPDoWMgbmfDoG5oIG5naOG7gSB0cm9uZyAzIGtodSB24buxYyBraW5oIHThur8gY2jDrW5oIHPhuqNuIHh14bqldCwgeOG6pXkgZOG7sW5nIHbDoCBraHVjIHbhu7FjIGtow6FjLiBOZ8Ogbmggd29ya2VyIGNoaeG6v20gxrB1IHRo4bq/IOG7nyBraHUgduG7sWMgc+G6o24gc3XhuqV0IHbDoCB4w6J5IGThu7FuZyBs4bqnbiBsxrDhu6N0IGzDoCA2OCB2w6AgMjAgbmfGsOG7nWkgY2hvIHRo4bqleSDEkeG6t2MgdGh1IGxhbyDEkeG7mW5nIGNow6JuIHRheSB04bqtcCB0cnVuZyBjaOG7pyB54bq/dSDhu58gMiBraHUgduG7sWMgbsOgeS4gIE5nxrDhu6NjIGzhuqFpLCBjw6FjIG5nw6BuaCBuaMawIHRlY2huaWNhbCwgc2VydmljZXMsIG9mZmljZSwgc2FsZXMgdsOgIG1hbmFnZW1lbnQgbOG6oWkgdOG6rXAgdHJ1bmcgY2jhu6cgeeG6v3Ug4bufIGtodSB24buxYyDigJxvdGhlcuKAnSwgduG7m2kgc+G7kSBsxrDhu6NuZyB2xrDhu6N0IHRy4buZaSDEkeG6t2MgYmnhu4d0IGzDoCBjw6FjIG5nw6BuaCB0ZWNobmljYWwgKDkxIG5nxrDhu51pKSwgb2ZmaWNlICg4OCBuZ8aw4budaSksIHNlcnZpY2VzICg4MSBuZ8aw4budaSkgdsOgIG1hbmFnZW1lbnQgKDQ5IG5nxrDhu51pKS4gQ8OhYyBuZ8OgbmggbsOgeSBn4bqnbiBuaMawIHbhuq9uZyBt4bq3dCBob+G6t2MgY8OzIHThuqduIHN14bqldCBy4bqldCB0aOG6pXAg4bufIGtodSB24buxYyB4w6J5IGThu7FuZyB2w6Agc+G6o24gc3XhuqV0LiBRdWEgxJHDsyB0YSB0aOG6pXkgY8OzIHPhu7EgcGjDom4gaMOzYSByw7UgcsOgbmcgduG7gSBjxqEgY+G6pXUgbGFvIMSR4buZbmcuIA0KDQoqS2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogKEtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZykqDQoNCsSQ4buDIMSRw6FuaCBnacOhIHhlbSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBoYWkgYmnhur9uIHBow6JuIGxv4bqhaSBsw6Agc2VjdG9yIHbDoCBvY2N1cGF0aW9uIGhheSBraMO0bmcsIHPhur0gc+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpLWLDrG5oIHBoxrDGoW5nIChDaGktc3F1YXJlIHRlc3QpLiANCg0KYGBge3IsIHdhcm5pbmcgPSBGQUxTRX0NCiMgS2nhu4NtIMSR4buLbmgNCmNoaXNxX3Jlc3VsdCA8LSBjaGlzcS50ZXN0KGsyKQ0KIyBJbiBr4bq/dCBxdeG6ow0KY2hpc3FfcmVzdWx0DQpgYGANCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiQkDQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2xsfQ0KSF8wOiAmIFx0ZXh0e0Jp4bq/biBzZWN0b3IgdsOgIGJp4bq/biBvY2N1cGF0aW9uIGtow7RuZyBjw7MgbeG7kWkgcXVhbiBo4buHLn0gIFxcXFwNCkhfMTogJiBcdGV4dHtCaeG6v24gc2VjdG9yIHbDoCBiaeG6v24gb2NjdXBhdGlvbiBjw7MgbeG7kWkgcXVhbiBo4buHLn0gXA0KXGVuZHthcnJheX0NClxyaWdodC4NCiQkDQoNCipOaOG6rW4geMOpdCo6IEvhur90IHF14bqjIGtp4buDbSDEkeG7i25oOiBW4bubaSBt4bupYyDDvSBuZ2jEqWEgMC4wNSwgdsOsIHAtdmFsdWUgPSAyLjJlLTE2IDwgMC4wNSwgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkLiBW4bqteSAgZ2nhu69hIGJp4bq/biBzZWN0b3IgdsOgIGJp4bq/biBvY2N1cGF0aW9uIHThu5NuIHThuqFpIG3hu5FpIHF1YW4gaOG7hy4gDQoNCg0KIyMjICoqNC4zIEJp4bq/biAgZ2VuZGVyIHbDoCB1bmlvbioqDQoNCsSQ4buDIGhp4buDdSByw7UgaMahbiBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIG5ow7NtIGdp4bubaSB0w61uaCAoZ2VuZGVyKSB2w6AgbmjDs20gdMOsbmggdHLhuqFuZyB0aGFtIGdpYSBjw7RuZyDEkW/DoG4gKHVuaW9uKSwgY2jDum5nIHRhIHPhur0geMOieSBk4buxbmcgYuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aOG7gyBoaeG7h24gc+G7kSBsxrDhu6NuZyB04burbmcga+G6v3QgaOG7o3AgZ2nhu69hIGhhaSBiaeG6v24gbsOgeS4gU2F1IMSRw7MsIGJp4buDdSDEkeG7kyBj4buZdCBz4bq9IMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHRy4buxYyBxdWFuIGjDs2Egc+G7sSBwaMOibiBi4buRIGPhu6dhIG5ow7NtIHTDrG5oIHRy4bqhbmcgdGhhbSBnaWEgY8O0bmcgxJFvw6BuIHRoZW8gdOG7q25nIGdp4bubaSB0w61uaCwgZ2nDunAgcXVhbiBzw6F0IGThu4UgZMOgbmcgc+G7sSBraMOhYyBiaeG7h3QgdsOgIHh1IGjGsOG7m25nIHRpw6p1IGTDuW5nIGdp4buvYSBjw6FjIG5ow7NtLg0KDQoqKkLhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8gdsOgIHRy4buxYyBxdWFuIGjDs2EqKg0KDQoqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyoNCg0KYGBge3J9DQprMyA8LSB0YWJsZShrX2NhdCRnZW5kZXIsa19jYXQkdW5pb24pDQphZGRtYXJnaW5zKGszKSANCmBgYA0KDQoqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aGVvIHThu7cgbOG7hyBow6BuZyoNCg0KYGBge3J9DQpwcm9wLnRhYmxlKGszLCBtYXJnaW4gPSAxKQ0KYGBgDQoNCipUcuG7sWMgcXVhbiBow7NhKg0KIA0KYGBge3J9DQojIENodXnhu4NuIHNhbmcgZGF0YSBmcmFtZQ0KazNfZGYgPC0gYXMuZGF0YS5mcmFtZShrMykNCmNvbG5hbWVzKGszX2RmKSA8LSBjKCJnZW5kZXIiLCAidW5pb24iLCAiRnJlcXVlbmN5IikNCiMgVuG6vSBiaeG7g3UgxJHhu5MgdOG7qyBi4bqjbmcgdOG6p24gc3XhuqV0DQpnZ3Bsb3QoazNfZGYsIGFlcyh4ID0gZ2VuZGVyLCB5ID0gRnJlcXVlbmN5LCBmaWxsID0gdW5pb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJCaeG7g3UgxJHhu5MgdOG6p24gc+G7kSBnaeG7r2EgZ2VuZGVyIHbDoCB1bmlvbiIsDQogICAgeCA9ICJnZW5kZXIiLA0KICAgIHkgPSAiVOG6p24gc+G7kSINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQpgYGANCg0KKk5o4bqtbiB4w6l0Kg0KDQpE4buxYSB2w6BvIGJp4buDdSDEkeG7kyB0csOqbiB0YSB0aOG6pXkgdOG7tyBs4buHIG5hbSBnaeG7m2kgdGhhbSBnaWEgY8O0bmcgxJFvw6BuIGNhbyBoxqFuIG7hu68gZ2nhu5tpLiBD4bulIHRo4buDLCB0cm9uZyB04buVbmcgc+G7kSAyODkgbmFtIHRow6wgY8OzIDY4IG5nxrDhu51pIHRoYW0gZ2lhIGPDtG5nIMSRb8OgbiBjaGnhur9tIGtob+G6o25nIDIzLDUlLCB0cm9uZyBraGkg4bufIG7hu68gZ2nhu5tpIGNo4buJIGPDsyAyOCB0csOqbiB04buVbmcgc+G7kSAyNDUgbmfGsOG7nWkgdGhhbSBnaWEgY2hp4bq/bSBraG/huqNuZyAxMSw0JS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbmFtIGdp4bubaSBjw7MgeHUgaMaw4bubbmcgZ+G6r24ga+G6v3QgduG7m2kgY8O0bmcgxJFvw6BuIG5oaeG7gXUgaMahbiBzbyB24bubaSBu4buvIGdp4bubaSwgcGjhuqNuIMOhbmggc+G7sSBraMOhYyBiaeG7h3QgduG7gSBt4bupYyDEkeG7mSB0aGFtIGdpYSB04buVIGNo4bupYyBsYW8gxJHhu5luZyBnaeG7r2EgaGFpIGdp4bubaS4gVHV5IG5oacOqbiB04buVbmcgdGjhu4MgdGjDrCBuYW0gdsOgIG7hu68gxJFp4buBdSBraMO0bmcgY8OzIHh1IGjGsOG7m25nIHRoYW0gZ2lhIGPDtG5nIMSRb8OgbiBi4bufaSB04bu3IGzhu4cgbmFtIHbDoCBuxrAga2jDtG5nIHRoYW0gZ2lhIGNoaeG6v20gdOG7tyBs4buHIHLhuqV0IGzhu5tuLg0KDQoqS2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogKEtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZykqDQoNCsSQ4buDIMSRw6FuaCBnacOhIHhlbSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBoYWkgYmnhur9uIHBow6JuIGxv4bqhaSBsw6AgZ2VuZGVyIHbDoCB1bmlvbiBoYXkga2jDtG5nLCBz4bq9IHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyAoQ2hpLXNxdWFyZSB0ZXN0KS4gDQoNCmBgYHtyfQ0KIyBLaeG7g20gxJHhu4tuaA0KY2hpc3FfcmVzdWx0IDwtIGNoaXNxLnRlc3QoazMpDQojIEluIGvhur90IHF14bqjDQpjaGlzcV9yZXN1bHQNCmBgYA0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJCQNClxsZWZ0XHsNClxiZWdpbnthcnJheX17bGx9DQpIXzA6ICYgXHRleHR7Qmnhur9uIGdlbmRlciB2w6AgYmnhur9uIHVuaW9uIGtow7RuZyBjw7MgbeG7kWkgcXVhbiBo4buHLn0gIFxcXFwNCkhfMTogJiBcdGV4dHtCaeG6v24gZ2VuZGVyIHbDoCBiaeG6v24gdW5pb24gY8OzIG3hu5FpIHF1YW4gaOG7hy59IFwNClxlbmR7YXJyYXl9DQpccmlnaHQuDQokJA0KDQoqTmjhuq1uIHjDqXQqOiBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDogVuG7m2kgbeG7qWMgw70gbmdoxKlhIDAuMDUsIHbDrCBwLXZhbHVlID0gMC4wMDA0Mzg4IDwgMC4wNSwgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkLiBW4bqteSAgZ2nhu69hIGJp4bq/biBnZW5kZXIgdsOgIGJp4bq/biB1bmlvbiB04buTbiB04bqhaSBt4buRaSBxdWFuIGjhu4cuIA0KDQojIyMgKio0LjQgQmnhur9uICByZWdpb24gdsOgIGV0aG5pY2l0eSoqDQoNCsSQ4buDIGhp4buDdSByw7UgaMahbiBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIG5ow7NtIGtodSB24buxYyBzaW5oIHPhu5FuZyAocmVnaW9uKSB2w6AgbmjDs20gY2jhu6duZyB04buZYyAoZXRobmljaXR5KSwgY2jDum5nIHRhIHPhur0geMOieSBk4buxbmcgYuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aOG7gyBoaeG7h24gc+G7kSBsxrDhu6NuZyB04burbmcga+G6v3QgaOG7o3AgZ2nhu69hIGhhaSBiaeG6v24gbsOgeS4gU2F1IMSRw7MsIGJp4buDdSDEkeG7kyBj4buZdCBz4bq9IMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHRy4buxYyBxdWFuIGjDs2Egc+G7sSBwaMOibiBi4buRIGPhu6dhIG5ow7NtIGtoY2ogduG7sWMgc2luaCBz4buRbmcgdGhlbyBuaMOzbSBjaOG7p25nIHThu5ljLCBnacO6cCBxdWFuIHPDoXQgZOG7hSBkw6BuZyBz4buxIGtow6FjIGJp4buHdCB2w6AgeHUgaMaw4bubbmcgdGnDqnUgZMO5bmcgZ2nhu69hIGPDoWMgbmjDs20uDQoNCioqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyB2w6AgdHLhu7FjIHF1YW4gaMOzYSoqDQoNCipC4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvKg0KDQpgYGB7cn0NCms0IDwtIHRhYmxlKGtfY2F0JHJlZ2lvbixrX2NhdCRldGhuaWNpdHkpDQphZGRtYXJnaW5zKGs0KSANCmBgYA0KDQoqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aGVvIHThu7cgbOG7hyBow6BuZyoNCg0KYGBge3J9DQpwcm9wLnRhYmxlKGs0LCBtYXJnaW4gPSAxKQ0KYGBgDQoNCipUcuG7sWMgcXVhbiBow7NhKg0KIA0KYGBge3J9DQojIENodXnhu4NuIHNhbmcgZGF0YSBmcmFtZQ0KazRfZGYgPC0gYXMuZGF0YS5mcmFtZShrNCkNCmNvbG5hbWVzKGs0X2RmKSA8LSBjKCJyZWdpb24iLCAiZXRobmljaXR5IiwgIkZyZXF1ZW5jeSIpDQojIFbhur0gYmnhu4N1IMSR4buTIHThu6sgYuG6o25nIHThuqduIHN14bqldA0KZ2dwbG90KGs0X2RmLCBhZXMoeCA9IGV0aG5pY2l0eSwgeSA9IEZyZXF1ZW5jeSwgZmlsbCA9IHJlZ2lvbikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkJp4buDdSDEkeG7kyB04bqnbiBzdeG6pXQgZ2nhu69hIGV0aG5pY2l0eSB2w6AgcmVnaW9uIiwNCiAgICB4ID0gImV0aG5pY2l0eSIsDQogICAgeSA9ICJU4bqnbiBzdeG6pXQiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCipOaOG6rW4geMOpdCoNCg0KQmnhu4N1IMSR4buTIHRyw6puIHRo4buDIGhp4buHbiB04bqnbiBzdeG6pXQgY2jDqW8gZ2nhu68gbmjDs20gY2jhu6duZyB04buZYyB2w6AgbmjDs20ga2h1IHbhu7FjIHNpbmggc+G7kW5nIGNobyB0aOG6pXkgc+G7sSBwaMOibiBi4buRIGtow7RuZyDEkeG7k25nIMSRaeG7gXUgZ2nhu69hIGPDoWMgbmjDs20uIEPhu6UgdGjhu4MsIG5ow7NtIG5nxrDhu51pIGRhIHRy4bqvbmcgKGNhdWMpIGNoaeG6v20gdOG7tyBs4buHIHLhuqV0IGNhbyB0cm9uZyB04buVbmcgdGjhu4MsIGPDsyAzMjMgbmfGsOG7nWkg4bufIGtodWMgduG7sWMga2jDoWMgdsOgIDExNyBuZ8aw4budaSDhu58ga2h1IHbhu7FjIHBow61hIG5hbS4gTmjDs20gbmfGsOG7nWkgZ+G7kWMgVMOieSBCYW4gTmhhIChoaXNwYW5pYykgY8OzIHPhu5EgbMaw4bujbmcgcuG6pXQgw610IHbDoCBwaMOibiBi4buRIGtow6EgxJHhu5NuZyDEkeG7gXUgZ2nhu69hIGhhaSBraHUgduG7sWMsIGNo4buJIGNoaeG6v20gdOG7lW5nIGPhu5luZyAyNyBuZ8aw4budaS4gTmjDs20gY8OhYyBjaOG7p25nIHThu5ljIGtow6FjIChvdGhlcikgY8WpbmcgY8OzIHPhu5EgbMaw4bujbmcgdMawxqFuZyDEkeG7kWkgbmjhu48sIHbhu5tpIDI3IG5nxrDhu51pIOG7nyBraHUgduG7sWMgc291dGggdsOgIDQwIG5nxrDhu51pIOG7nyBraHUgduG7sWMgb3RoZXIuIE5ow6xuIGNodW5nLCBuZ8aw4budaSBkYSB0cuG6r25nIGPDsyB4dSBoxrDhu5tuZyBzaW5oIHPhu5FuZyBuaGnhu4F1IGjGoW4g4bufIGtodSB24buxYyBraMOhYyBuZ2/DoGkgbWnhu4FuIE5hbQ0KDQoqS2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogKEtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZykqDQoNCsSQ4buDIMSRw6FuaCBnacOhIHhlbSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBoYWkgYmnhur9uIHBow6JuIGxv4bqhaSBsw6AgcmVnaW9uIHbDoCBldGhuaWNpdHkgaGF5IGtow7RuZywgc+G6vSBz4butIGThu6VuZyBraeG7g20gxJHhu4tuaCBDaGktYsOsbmggcGjGsMahbmcgKENoaS1zcXVhcmUgdGVzdCkuIA0KDQpgYGB7cn0NCiMgS2nhu4NtIMSR4buLbmgNCmNoaXNxX3Jlc3VsdCA8LSBjaGlzcS50ZXN0KGs0KQ0KIyBJbiBr4bq/dCBxdeG6ow0KY2hpc3FfcmVzdWx0DQpgYGANCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiQkDQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2xsfQ0KSF8wOiAmIFx0ZXh0e0Jp4bq/biByZWdpb24gdsOgIGJp4bq/biBldGhuaWNpdHkga2jDtG5nIGPDsyBt4buRaSBxdWFuIGjhu4cufSAgXFxcXA0KSF8xOiAmIFx0ZXh0e0Jp4bq/biByZWdpb24gdsOgIGJp4bq/biBldGhuaWNpdHkgY8OzIG3hu5FpIHF1YW4gaOG7hy59IFwNClxlbmR7YXJyYXl9DQpccmlnaHQuDQokJA0KDQoqTmjhuq1uIHjDqXQqOiBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDogVuG7m2kgbeG7qWMgw70gbmdoxKlhIDAuMDUsIHbDrCBwLXZhbHVlID0gMC4wMTQ0NSA8IDAuMDUsIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJC4gVuG6rXkgIGdp4buvYSBiaeG6v24gcmVnaW9uIHbDoCBiaeG6v24gZXRobmljaXR5IHThu5NuIHThuqFpIG3hu5FpIHF1YW4gaOG7hy4gDQoNCiMjICoqUGjhuqduIDU6IFJlbGF0aXZlIHJpc2sqKg0KDQpOaOG6sW0gcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBjw6FjIGJp4bq/biwgY2jDum5nIHRhIHPhu60gZOG7pW5nIGNo4buJIHPhu5EgUmVsYXRpdmUgUmlzayAoUlIpIMSR4buDIMSRbyBsxrDhu51uZyBt4bupYyDEkeG7mSBy4bunaSBybyBob+G6t2Mga2jhuqMgbsSDbmcgeOG6o3kgcmEgY+G7p2EgbeG7mXQgc+G7sSBraeG7h24uDQoNCiMjIyAqKjUuMSBCaeG6v24gZ2VuZGVyIHbDoCB1bmlvbioqDQoNCioqVEgxOiBOYW0gbMOgbSB0aGFtIGNoaeG6v3UqKg0KDQpgYGB7ciwgd2FybmluZz1GQUxTRX0NClJSR1UxPC0gcmlza3JhdGlvKGszKQ0KUlJHVTENCmBgYA0KDQoqTmjhuq1uIHjDqXQ6KiBL4bq/dCBxdeG6oyBwaMOibiB0w61jaCBSZWxhdGl2ZSBSaXNrIChSUikgZ2nhu69hIGdp4bubaSB0w61uaCAoZ2VuZGVyKSB2w6AgdMOsbmggdHLhuqFuZyB0aGFtIGdpYSBjw7RuZyDEkW/DoG4gKHVuaW9uKSBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IHLDtSBy4buHdCBnaeG7r2EgbmFtIHbDoCBu4buvLiBD4bulIHRo4buDLCBuYW0gZ2nhu5tpIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSB24bubaSBSUiA9IDEuMDAsIHRyb25nIGtoaSBu4buvIGdp4bubaSBjw7MgUlIgPSAwLjQ4NiB04bupYyBsw6Aga2jhuqMgbsSDbmcgdGhhbSBnaWEgY8O0bmcgxJFvw6BuIGPhu6dhIG7hu68ga2hv4bqjbmcgNDguNiUgc28gduG7m2kgbmFtLiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBSUiBj4bunYSBu4buvIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgMC4zMjQgxJHhur9uIDAuNzI5LCBjaG8gdGjhuqV5IGvhur90IHF14bqjIG7DoHkgY8OzIMSR4buZIHRpbiBj4bqteSBjYW8uIEjGoW4gbuG7r2EsIGPDoWMga2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogKG1pZHAuZXhhY3QsIGZpc2hlci5leGFjdCwgY2hpLnNxdWFyZSkgxJHhu4F1IGNobyBnacOhIHRy4buLIHAgcuG6pXQgbmjhu48gKDwgMC4wNSksIGNo4bupbmcgdOG7jyBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQoNCioqVEgyOiBO4buvIGzDoG0gdGhhbSBjaGnhur91KioNCg0KYGBge3IsIHdhcm5pbmc9RkFMU0V9DQpSUkdVMjwtIHJpc2tyYXRpbyhrMywgcmV2ID0iciIpDQpSUkdVMg0KYGBgDQoNCipOaOG6rW4geMOpdDoqIEvhur90IHF14bqjIHBow6JuIHTDrWNoIGNobyB0aOG6pXksIGtoaSBs4bqleSBuaMOzbSBu4buvIGzDoG0gdGhhbSBjaGnhur91IHThu7cgc+G7kSBy4bunaSBybyAoUlIpIGPhu6dhIG5hbSBsw6AgMi4wNiB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlIHThu6sgMS4zNyDEkeG6v24gMy4wOSwgY2hvIHRo4bqleSBuYW0gZ2nhu5tpIGPDsyBuZ3V5IGPGoSB44bqjeSByYSBz4buxIGtp4buHbiDigJx5ZXPigJ0gY2FvIGfhuqVwIGjGoW4gMiBs4bqnbiBzbyB24bubaSBu4buvIGdp4bubaS4gS+G6v3QgcXXhuqMgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHbhu5tpIGdpw6EgdHLhu4sgcCA8IDAuMDUg4bufIGPhuqMgYmEgcGjGsMahbmcgcGjDoXAga2nhu4NtIMSR4buLbmggKG1pZHAuZXhhY3QsIGZpc2hlci5leGFjdCB2w6AgY2hpLXNxdWFyZSkuIE5oxrAgduG6rXksIGdp4bubaSB0w61uaCBsw6AgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24gbmd1eSBjxqEgeOG6o3kgcmEgc+G7sSBraeG7h24uDQoNCiMjIyAqKjUuMiBCaeG6v24gIHJlZ2lvbiB2w6AgZXRobmljaXR5KioNCg0KS+G6v3QgaOG7o3AgZOG7ryBsaeG7h3UgY2jhu6duZyB04buZYyB0aMOgbmggaGFpIG5ow7NtIGNow61uaDogbmjDs20gbmfGsOG7nWkgZGEgdHLhuq9uZyAoQ2F1Y2FzaWFuKSB2w6AgbmjDs20ga2jDtG5nIHBo4bqjaSBkYSB0cuG6r25nIChn4buTbSBIaXNwYW5pYyB2w6AgY8OhYyBuaMOzbSBraMOhYykuIA0KDQpgYGB7cn0NCms0X25ldyA8LSBjYmluZCggICAjIGvhur90IGjhu6NwIGhhaSBj4buZdCBuw6B5IHRow6BuaCBt4buZdCBi4bqjbmcgZOG7ryBsaeG7h3UgbeG7m2kgZ+G7jWkgbMOgIGs0X25ldy4NCiAgY2F1YyA9IGs0WywgImNhdWMiXSwgICNs4bqleSBk4buvIGxp4buHdSBj4buZdCAiY2F1YyIgdOG7qyBi4bqjbmcgazQNCiAgbm9uY2F1YyA9IGs0WywgImhpc3BhbmljIl0gKyBrNFssICJvdGhlciJdICMgY+G7mW5nIGThu68gbGnhu4d1IGhhaSBj4buZdCAiaGlzcGFuaWMiIHbDoCAib3RoZXIiIHThu6sgYuG6o25nIGs0Lg0KKQ0KazRfbmV3DQpgYGANCg0KKipUSDE6U291dGggbMOgbSBiaeG6v24gdGhhbSBjaGnhur91IHbhu5tpIG5vbmNhdWMqKg0KDQpgYGB7ciwgd2FybmluZz1GQUxTRX0NClJSUkUxPC0gcmlza3JhdGlvKGs0X25ldykNClJSUkUxDQpgYGANCg0KKk5o4bqtbiB4w6l0OiogS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggdOG7tyBz4buRIHLhu6dpIHJvIChyaXNrIHJhdGlvKSBraGkgY2jhu41uIGtodSB24buxYyBTb3V0aCBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSBjaG8gdGjhuqV5IHLhurFuZyB04bu3IGzhu4cgeHXhuqV0IGhp4buHbiBuaMOzbSBraMO0bmcgcGjhuqNpIG5nxrDhu51pIGRhIHRy4bqvbmcgKG5vbmNhdWMpIOG7nyBraHUgduG7sWMgT3RoZXIgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kga2h1IHbhu7FjIFNvdXRoLCB24bubaSByaXNrIHJhdGlvIChSUikgPSAwLjU4Mi4gxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIG5ndXkgY8ahIHRodeG7mWMgbmjDs20gbm9uY2F1YyDhu58ga2h1IHbhu7FjIE90aGVyIGNo4buJIGLhurFuZyBraG/huqNuZyA1OC4yJSBzbyB24bubaSBraHUgduG7sWMgU291dGguIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIFJSIGzDoCB04burIDAuNDA0IMSR4bq/biAwLjgzOSwga2jDtG5nIGNo4bupYSBnacOhIHRy4buLIDEgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIEjGoW4gbuG7r2EsIGPDoWMgZ2nDoSB0cuG7iyBwIHThu6sga2nhu4NtIMSR4buLbmggbWlkLXAgZXhhY3QsIEZpc2hlcuKAmXMgZXhhY3QgdsOgIGNoaS1zcXVhcmUgxJHhu4F1IG5o4buPIGjGoW4gMC4wNSwgY+G7p25nIGPhu5EgcuG6sW5nIHPhu7Ega2jDoWMgYmnhu4d0IHbhu4EgdOG7tyBs4buHIGdp4buvYSBoYWkga2h1IHbhu7FjIGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiANCg0KKipUSDI6IFNvdXRoIGzDoG0gYmnhur9uIHRoYW0gY2hp4bq/dSB24bubaSBjYXVjKioNCg0KYGBge3IsIHdhcm5pbmc9RkFMU0V9DQpSUlJFMjwtIHJpc2tyYXRpbyhrNF9uZXcsIHJldiA9ImMiKQ0KUlJSRTINCmBgYA0KDQoqTmjhuq1uIHjDqXQ6KiBLaGkgY2jhu41uIGtodSB24buxYyBTb3V0aCBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSB2w6Agc28gc8OhbmggdOG7tyBs4buHIHRodeG7mWMgbmjDs20gY2F1YyAobmfGsOG7nWkgZGEgdHLhuq9uZyksIGvhur90IHF14bqjIGNobyB0aOG6pXkga2h1IHbhu7FjIE90aGVyIGPDsyB04bu3IHPhu5EgcuG7p2kgcm8gKFJSKSBsw6AgMS4xMzksIHThu6ljIGzDoCBuZ3V5IGPGoSB0aHXhu5ljIG5ow7NtIGNhdWMg4bufIGtodSB24buxYyBPdGhlciBjYW8gaMahbiAxMy45JSBzbyB24bubaSBraHUgduG7sWMgU291dGguIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY+G7p2EgUlIgbMOgIHThu6sgMS4wMzEgxJHhur9uIDEuMjU5LCBraMO0bmcgYmFvIGfhu5NtIDEgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiBDw6FjIGtp4buDbSDEkeG7i25oIHRo4buRbmcga8OqIMSRaSBrw6htIG5oxrAgbWlkLXAgZXhhY3QsIEZpc2hlcuKAmXMgZXhhY3QgdsOgIGNoaS1zcXVhcmUgxJHhu4F1IGNobyBwLXZhbHVlIDwgMC4wNSwgY+G7p25nIGPhu5EgcuG6sW5nIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkga2h1IHbhu7FjIGzDoCBjw7Mgw70gbmdoxKlhLg0KDQojIyAqKlBo4bqnbiA2OiBPZGQgcmF0aW8qKg0KDQpDaMO6bmcgdGEgc+G6vSBz4butIGThu6VuZyBvZGRzIHJhdGlvIMSR4buDIHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGhhaSBiaeG6v24gxJHhu4tuaCB0w61uaCBuaOG6sW0geMOhYyDEkeG7i25oIHhlbSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgbsOgbyBnaeG7r2EgY8OhYyBuaMOzbSDEkcaw4bujYyBzbyBzw6FuaCBoYXkga2jDtG5nLg0KDQojIyMgKio2LjEgQmnhur9uIGdlbmRlciB2w6AgdW5pb24qKg0KDQpgYGB7cn0NCm9yZ3UgPC0gb2Rkc3JhdGlvKGszKQ0Kb3JndQ0KYGBgDQoNCipOaOG6rW4geMOpdCoNCg0KLSBHacOhIHRy4buLIE9SID0gMC40MjEyNiA8IDEgY2hvIHRo4bqleSB04bu3IHPhu5EgY2jDqm5oIChvZGRzIHJhdGlvKSB24buBIGto4bqjIG7Eg25nIHRoYW0gZ2lhIGPDtG5nIMSRb8OgbiBj4bunYSBu4buvIGdp4bubaSB0aOG6pXAgaMahbiBzbyB24bubaSBuYW0gZ2nhu5tpLg0KDQotIE7Ds2kgY8OhY2gga2jDoWMsIHRyb25nIHThuq1wIGThu68gbGnhu4d1IG7DoHkgbMOgIG7hu68gZ2nhu5tpIGPDsyBsacOqbiBxdWFuIMSR4bq/biB2aeG7h2MgZ2nhuqNtIG9kZHMgdGhhbSBnaWEgY8O0bmcgxJFvw6BuIHNvIHbhu5tpIG5hbSBnaeG7m2kuIEPhu6UgdGjhu4MsIG9kZHMgdGhhbSBnaWEgY8O0bmcgxJFvw6BuIGPhu6dhIG7hu68gdGjhuqVwIGjGoW4ga2hv4bqjbmcgNTcuOSUgc28gduG7m2kgbmFtIGdp4bubaSAodsOsIDEgLSAwLjQyMTI2ID0gMC41Nzg3NCksIG7hur91IGdp4buvIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpLg0KDQotIEtoaSB4w6l0IMSR4bq/biBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGPhu6dhIE9SICh04burIDAuMjU3IMSR4bq/biAwLjY3NCksIHRhIHRo4bqleSBraG/huqNuZyBuw6B5IGtow7RuZyBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxIMSRaeG7gXUgxJHDsyBjw7MgbmdoxKlhIGzDoCBr4bq/dCBxdeG6oyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIOG7nyBt4bupYyB0aW4gY+G6rXkgOTUlLg0KDQotIFTDs20gbOG6oWksIE9SIDwgMSBjaG8gdGjhuqV5IG3hu5l0IHh1IGjGsOG7m25nIHLDtSByw6BuZyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqjogbuG7ryBnaeG7m2kgw610IGPDsyBraOG6oyBuxINuZyB0aGFtIGdpYSBjw7RuZyDEkW/DoG4gaMahbiBuYW0gZ2nhu5tpIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgeS4NCg0KIOKHkiBL4bq/dCBsdeG6rW46IFRyb25nIHBo4bqhbSB2aSBk4buvIGxp4buHdSBoaeG7h24gdOG6oWksIGdp4bubaSB0w61uaCBsw6AgbeG7mXQgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIGto4bqjIG7Eg25nIHRoYW0gZ2lhIGPDtG5nIMSRb8OgbiwgduG7m2kgb2RkcyDhu58gbuG7ryBnaeG7m2kgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmFtIGdp4bubaS4NCg0KIyMjICoqNi4yIEJp4bq/biAgcmVnaW9uIHbDoCBldGhuaWNpdHkqKg0KDQpgYGB7cn0NCm9ycmU8LSBvZGRzcmF0aW8oazRfbmV3KQ0Kb3JyZQ0KYGBgDQoNCipOaOG6rW4geMOpdCoNCg0KLSBHacOhIHRy4buLIE9SID0gMC41MTEyIDwgMSDih5IgY2hvIHRo4bqleSBvZGRzICh04bu3IHPhu5EgY2jDqm5oKSDEkeG7gyBt4buZdCBjw6EgbmjDom4gbMOgIG5nxrDhu51pIG5vbi1jYXVjYXNpYW4gKGfhu5NtIGhpc3BhbmljICsgb3RoZXIpIHNvIHbhu5tpIGNhdWNhc2lhbiDhu58ga2h1IHbhu7FjIG90aGVyIGzDoCB0aOG6pXAgaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBraHUgduG7sWMgc291dGggKG5ow7NtDQpOw7NpIGPDoWNoIGtow6FjLCBjw6EgbmjDom4g4bufIGtodSB24buxYyDigJxvdGhlcuKAnSBjw7Mgb2RkcyBsw6Agbm9uLWNhdWNhc2lhbiBraG/huqNuZyA1MS4xMiUgc28gduG7m2kgY8OhIG5ow6JuIOG7nyBraHUgduG7sWMg4oCcc291dGjigJ0uDQoNCi0gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBj4bunYSBPUiBsw6AgdOG7qyAwLjMyMjQgxJHhur9uIDAuODE1NSB2w6Aga2jDtG5nIGJhbyBn4buTbSBnacOhIHRy4buLIDEg4oeSIMSRaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGvhur90IHF14bqjIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIDk1JS4NCg0KLSBDw6FjIGtp4buDbSDEkeG7i25oIHRo4buRbmcga8OqIG5oxrAgZmlzaGVyLmV4YWN0LCBjaGkuc3F1YXJlIHbDoCBtaWRwLmV4YWN0IMSR4buBdSBjaG8gcmEgcC12YWx1ZSA8IDAuMDUsIOKHkiB0xINuZyB0aMOqbSDEkeG7mSB0aW4gY+G6rXkgY2hvIGvhur90IGx14bqtbiB0csOqbi4NCg0KDQoNCg0KDQoNCg0KDQo=