CHƯƠNG 1: PHẦN MỞ ĐẦU

1.1. Lý do chọn đề tài

Trong bối cảnh hệ thống giáo dục ngày càng đa dạng và linh hoạt, học sinh hiện nay có nhiều lựa chọn hơn trong việc xác định con đường học tập phù hợp với bản thân. Một trong những quyết định quan trọng ở giai đoạn phổ thông là lựa chọn giữa hai loại hình trường học: học thuật (Academic) và hướng nghiệp (Vocational). Mỗi loại hình này mang lại định hướng phát triển và cơ hội nghề nghiệp khác nhau, ảnh hưởng lâu dài đến tương lai của người học.

Thực tế cho thấy, lựa chọn loại hình trường học không hoàn toàn là kết quả của năng lực học tập, mà còn phản ánh nhiều yếu tố khác như sự định hướng từ gia đình, điều kiện kinh tế – xã hội, đặc điểm nhân khẩu học, và cả sở thích cá nhân. Chẳng hạn, một học sinh có điểm học tập trung bình nhưng đến từ gia đình có trình độ học vấn cao có thể vẫn quyết định theo học trường học thuật do được kỳ vọng tiếp tục học đại học. Ngược lại, một học sinh có thành tích tốt nhưng sống ở vùng nông thôn với điều kiện kinh tế khó khăn có thể chọn học trường nghề để sớm đi làm.

Trong khi các nghiên cứu về giáo dục tại Việt Nam chủ yếu tập trung vào chất lượng giảng dạy, hiệu quả đào tạo hoặc kết quả học tập, thì vấn đề hành vi lựa chọn loại hình trường học vẫn chưa được phân tích rõ ràng dưới góc nhìn định lượng kết hợp với các yếu tố cá nhân và gia đình. Đặc biệt, việc nhận diện các yếu tố có ý nghĩa thống kê trong hành vi chọn trường sẽ giúp các nhà hoạch định chính sách, nhà quản lý giáo dục và phụ huynh có thêm cơ sở khoa học trong việc tư vấn, định hướng phù hợp cho học sinh.

Vì vậy, việc nghiên cứu đề tài “Phân tích hành vi lựa chọn loại hình trường học: Góc nhìn từ các yếu tố cá nhân và gia đình” là cần thiết và mang ý nghĩa thực tiễn sâu sắc, trong bối cảnh nhu cầu cá nhân hóa giáo dục ngày càng gia tăng.

1.2. Mục tiêu nghiên cứu

Mục tiêu tổng quát của đề tài là xác định và đánh giá mức độ ảnh hưởng của các yếu tố cá nhân và gia đình đến hành vi lựa chọn loại hình trường học (Academic hoặc Vocational) của học sinh.

Cụ thể, nghiên cứu nhằm:

  • Phân tích mối quan hệ giữa đặc điểm cá nhân (giới tính, sở thích học tiếp, điểm trung bình học tập) và lựa chọn loại hình trường học.

  • Đánh giá tác động của các yếu tố gia đình (tuổi cha mẹ, thu nhập gia đình, trình độ học vấn của phụ huynh, nơi cư trú, diện tích nhà ở) đến hành vi lựa chọn.

  • Gợi ý chính sách hoặc biện pháp hỗ trợ học sinh đưa ra lựa chọn phù hợp hơn với năng lực và điều kiện thực tế.

1.3. Đối tượng và phạm vi nghiên cứu

  • Đối tượng nghiên cứu: Các học sinh thuộc độ tuổi phổ thông có quyết định lựa chọn theo học loại hình trường học Academic hoặc Vocational.

  • Phạm vi dữ liệu: Nghiên cứu sử dụng bộ dữ liệu định danh sẵn từ 1.000 học sinh với 11 biến đặc trưng, phản ánh thông tin nhân khẩu học, điều kiện gia đình và lựa chọn loại hình trường học.

  • Phạm vi không gian – thời gian: Dữ liệu mang tính đại diện tổng thể, không giới hạn ở một khu vực cụ thể và có tính thời điểm cố định, nhằm phục vụ phân tích mối quan hệ giữa các biến thay vì dự báo xu hướng dài hạn.

1.4. Phương pháp nghiên cứu

Nghiên cứu này sử dụng phương pháp định lượng làm chủ đạo, bao gồm các bước sau:

  • Thống kê mô tả: Tóm tắt các đặc điểm chính của dữ liệu, giúp nhận diện xu hướng lựa chọn loại hình trường học theo nhóm.

  • Kiểm định giả thuyết: Áp dụng kiểm định Chi-square, kiểm định tỷ lệ hoặc t-test để xác định sự khác biệt có ý nghĩa giữa các nhóm.

  • Mô hình hồi quy nhị phân (Binary Logistic hoặc Complementary log-log): Ước lượng xác suất học sinh chọn học trường học thuật hoặc nghề dựa trên đặc điểm cá nhân và gia đình.

Phân tích được thực hiện trên phần mềm thống kê R hoặc tương đương, bảo đảm kết quả khách quan và có khả năng kiểm định lại.

1.5. Kết cấu bài nghiên cứu

Ngoài phần mở đầu và kết luận, nội dung bài nghiên cứu được chia thành 3 chương chính như sau:

  • Chương 1: Phần mở đầu – Trình bày lý do chọn đề tài, mục tiêu, phương pháp và kết cấu nghiên cứu.

  • Chương 2: Thực hành, phân tích và trình bày kết quả – Trình bày kết quả phân tích hồi quy và kiểm định, từ đó rút ra các nhận định và gợi ý chính sách.

  • Chương 3: Kết luận và kiến nghị

CHƯƠNG 2: THỰC HÀNH, PHÂN TÍCH VÀ TRÌNH BÀY KẾT QUẢ

PHẦN 1: TÌM HIỂU VÀ CHUẨN BỊ DỮ LIỆU

1.1 Đọc dữ liệu

df <-read.csv("C:/Users/DELL/Downloads/data (1).csv", header= T)
# Tách dữ liệu thành nhiều cột
data <- tidyr::separate(
  df,
  col = 1,
  into = c("type_school", "school_accreditation", "gender", "interest",
           "residence", "parent_age", "parent_salary", "house_area",
           "average_grades", "parent_was_in_college", "will_go_to_college"),
  sep = ";"
)

Bộ dữ liệu Go-to-College được tổng hợp phục vụ cho một dự án ở trường đại học.Thông qua việc phân tích, các cố vấn học đường có thể hỗ trợ những học sinh có nguy cơ không học tiếp bằng cách xác định các yếu tố liên quan và đưa ra hỗ trợ phù hợp.

1.2 Làm quen dữ liệu

str(data)
## 'data.frame':    1000 obs. of  11 variables:
##  $ type_school          : chr  "Academic" "Academic" "Academic" "Vocational" ...
##  $ school_accreditation : chr  "A" "A" "B" "B" ...
##  $ gender               : chr  "Male" "Male" "Female" "Male" ...
##  $ interest             : chr  "Less Interested" "Less Interested" "Very Interested" "Very Interested" ...
##  $ residence            : chr  "Urban" "Urban" "Urban" "Rural" ...
##  $ parent_age           : chr  "56" "57" "50" "49" ...
##  $ parent_salary        : chr  "adequate" "average" "adequate" "adequate" ...
##  $ house_area           : chr  "Medium" "Medium" "Medium" "Medium" ...
##  $ average_grades       : chr  "Fair" "Good" "Good" "Fair" ...
##  $ parent_was_in_college: chr  "FALSE" "FALSE" "FALSE" "TRUE" ...
##  $ will_go_to_college   : chr  "YES" "YES" "YES" "YES" ...

Bộ dữ liệu bao gồm 11 biến , phản ánh đặc điểm cá nhân và gia đình của học sinh:

Tên biến Mô tả
type_school Loại trường học: “Academic” hoặc “Vocational”
school_accreditation Xếp hạng kiểm định của trường: “A”, “B”, …
gender Giới tính: “Male”, “Female”
interest Mức độ hứng thú với việc học: “Less Interested”, “Very Interested”, …
residence Nơi cư trú: “Urban” hoặc “Rural”
parent_age Tuổi của cha mẹ
parent_salary Thu nhập của cha mẹ
house_area Diện tích nhà ở
average_grades Điểm trung bình học tập của học sinh
parent_was_in_college Cha mẹ có từng học đại học hay không: “True”/“False”
will_go_to_college học sinh có học tiếp đại học hay không: “True”/“False”

Với 1.000 quan sát và 11 biến, bộ dữ liệu Go-to-College có quy mô phù hợp để thực hiện các phân tích thống kê, xây dựng mô hình dự đoán, cũng như phân nhóm học sinh theo các đặc điểm khác nhau.

Dữ liệu đa dạng và phong phú: bao gồm các biến như type_school, school_accreditation, gender, interest, residence, parent_age, parent_salary, house_area, parent_was_in_college, cung cấp nhiều thông tin nhân khẩu học, kinh tế - xã hội và học tập, rất hữu ích cho việc phân tích các yếu tố ảnh hưởng đến quyết định học đại học.

Mặc dù biến will_go_to_college là biến mục tiêu quan trọng thường được dùng để dự đoán khả năng học sinh tiếp tục học đại học – phù hợp với định hướng ban đầu của bộ dữ liệu – tuy nhiên trong nghiên cứu này, chúng tôi lựa chọn type_school (gồm hai nhóm Academic và Vocational) làm biến phụ thuộc để tiếp cận một khía cạnh khác mang tính định hướng sớm hơn trong quá trình giáo dục. Cụ thể, việc phân tích các yếu tố ảnh hưởng đến loại trường học mà học sinh lựa chọn theo học giúp cung cấp thông tin hữu ích về định hướng học tập ban đầu, từ đó gián tiếp phản ánh xu hướng tiếp tục học đại học trong tương lai. Bởi lẽ, học sinh theo học trường Academic thường có xu hướng học tiếp lên đại học cao hơn so với học sinh theo học trường Vocational.

Ngoài ra, việc lựa chọn type_school làm biến phụ thuộc còn giúp tránh dự định không thành hiện thực trong biến will_go_to_college, vốn chỉ thể hiện mong muốn của học sinh tại thời điểm khảo sát mà chưa chắc xảy ra trong tương lai. Ngược lại, type_school là biến quan sát thực tế, đã xảy ra, có độ tin cậy cao hơn trong phân tích mô hình.

Do đó, hướng tiếp cận này không chỉ phù hợp với mục tiêu khám phá dữ liệu mà còn giúp mở rộng góc nhìn về hành vi giáo dục của học sinh trong giai đoạn sớm hơn.

Hiển thị 10 dòng đầu bộ dữ liệu

head(data,10)
##    type_school school_accreditation gender        interest residence parent_age
## 1     Academic                    A   Male Less Interested     Urban         56
## 2     Academic                    A   Male Less Interested     Urban         57
## 3     Academic                    B Female Very Interested     Urban         50
## 4   Vocational                    B   Male Very Interested     Rural         49
## 5     Academic                    A Female Very Interested     Urban         57
## 6   Vocational                    B Female Less Interested     Rural         48
## 7     Academic                    A   Male Very Interested     Rural         52
## 8     Academic                    B   Male Very Interested     Rural         53
## 9     Academic                    B Female       Uncertain     Rural         52
## 10    Academic                    B Female Very Interested     Rural         47
##    parent_salary house_area average_grades parent_was_in_college
## 1       adequate     Medium           Fair                 FALSE
## 2        average     Medium           Good                 FALSE
## 3       adequate     Medium           Good                 FALSE
## 4       adequate     Medium           Fair                  TRUE
## 5        average     Medium           Good                 FALSE
## 6        average      Small           Good                  TRUE
## 7       adequate     Medium      Excellent                  TRUE
## 8       adequate     Medium           Fair                  TRUE
## 9       adequate     Medium           Good                  TRUE
## 10       average      Small           Good                  TRUE
##    will_go_to_college
## 1                 YES
## 2                 YES
## 3                 YES
## 4                 YES
## 5                  NO
## 6                  NO
## 7                 YES
## 8                  NO
## 9                 YES
## 10                 NO

Hiển thị 10 dòng cuối bộ dữ liệu

tail(data,10)
##      type_school school_accreditation gender        interest residence
## 991     Academic                    A Female Less Interested     Urban
## 992     Academic                    B Female Very Interested     Rural
## 993     Academic                    B Female Less Interested     Urban
## 994     Academic                    B   Male Very Interested     Rural
## 995     Academic                    B Female Less Interested     Urban
## 996   Vocational                    A Female Very Interested     Rural
## 997     Academic                    B Female Less Interested     Rural
## 998   Vocational                    A   Male Less Interested     Urban
## 999     Academic                    B   Male       Uncertain     Rural
## 1000    Academic                    B   Male      Interested     Urban
##      parent_age parent_salary house_area average_grades parent_was_in_college
## 991          54      adequate      Large           Good                 FALSE
## 992          51      adequate     Medium           Good                  TRUE
## 993          53       average      Small           Good                  TRUE
## 994          53       average      Small           Fair                  TRUE
## 995          52       average      Small           Good                 FALSE
## 996          49      adequate      Small           Good                  TRUE
## 997          51      adequate     Medium           Good                  TRUE
## 998          49      adequate     Medium           Fair                 FALSE
## 999          53      adequate      Large           Good                  TRUE
## 1000         50           low      Small           Good                  TRUE
##      will_go_to_college
## 991                 YES
## 992                 YES
## 993                  NO
## 994                  NO
## 995                  NO
## 996                 YES
## 997                 YES
## 998                 YES
## 999                 YES
## 1000                 NO

1.3 Kiểm tra giá trị NA

datana <- sum(is.na(data))
print(datana)
## [1] 0

Vậy khi kiểm tra tổng số giá trị NA toàn bộ data bằng câu lệnh sum(is.na(data)), kết quả nhận được là KHÔNG CÓ GIÁ TRỊ NA nên ta tiến hành phân tích tiếp.

1.4 Chuyển đổi thành biến định tính

Việc chuyển các biến như type_school, school_accreditation, gender, interest, residence, parent_was_in_college sang kiểu factor là bước tiền xử lý quan trọng trong phân tích dữ liệu. Điều này giúp R nhận diện đúng bản chất phân loại của các biến này, từ đó hỗ trợ tốt hơn cho việc phân tích thống kê và xây dựng mô hình. Vì vậy, ta tiến hành chuyển đổi các biến định tính này:

isf <- names(data)[sapply(data, function(x) is.factor(x) || is.character(x))]
print(isf)
##  [1] "type_school"           "school_accreditation"  "gender"               
##  [4] "interest"              "residence"             "parent_age"           
##  [7] "parent_salary"         "house_area"            "average_grades"       
## [10] "parent_was_in_college" "will_go_to_college"

Kết quả cho thấy có 11 biến trong tập dữ liệu đang ở dạng factor hoặc character, chủ yếu là các biến định tính như loại trường, giới tính, mức độ quan tâm, nơi cư trú,

data$type_school <- as.factor(data$type_school)
data$school_accreditation <- as.factor(data$school_accreditation)
data$gender <- as.factor(data$gender)
data$interest <- as.factor(data$interest)
data$residence <- as.factor(data$residence)
data$average_grades <- as.factor(data$average_grades)
data$parent_salary <- as.factor(data$parent_salary)
data$house_area <- as.factor(data$house_area)

data$parent_was_in_college <- as.factor(data$parent_was_in_college)
data$will_go_to_college <- as.factor(data$will_go_to_college)

Các biến như type_school, school_accreditation, gender, interest và residence đã được chuyển sang kiểu factor để R hiểu đó là các biến phân loại. Việc này rất quan trọng nhằm đảm bảo R không xem chúng là dữ liệu liên tục. Việc xử lý đúng loại biến giúp cải thiện độ chính xác trong phân tích thống kê và mô hình hóa dự báo học sinh có tiếp tục học đại học hay không.

PHẦN 2: PHÂN TÍCH MÔ TẢ MỘT BIẾN ĐỊNH TÍNH - UNIVARIATE DESCRIPTIVE ANALYSIS

2.1 TYPE SCHOOL

2.1.1 Thống kê Tần suất

# Tạo bảng dữ liệu
typeschool_freq <- table(data$type_school)
typeschoolpc <- table(data$type_school) / nrow(data) * 100
typeschool_table <- data.frame(
  `Type of School` = names(typeschool_freq),
  Frequency = as.integer(typeschool_freq),
  `Percentage (%)` = round(typeschoolpc, 2)
)

# Hiển thị bảng đẹp với flextable
library(flextable)
## Warning: package 'flextable' was built under R version 4.5.1
flextable(typeschool_table) |>
  set_caption("Bảng 2.1. Phân phối loại trường - typeschool") |>
  autofit()
Bảng 2.1. Phân phối loại trường - typeschool

Type.of.School

Frequency

Percentage.....Var1

Percentage.....Freq

Academic

609

Academic

60.9

Vocational

391

Vocational

39.1

Vậy trong data này có NA% họ sinh theo học môi trường học thuật và NA% học sinh học trường nghề.

2.1.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(typeschool_freq,
    main   = "Biểu đồ 2.1: Phân bố loại trường (typeschool)",
    labels = paste0(names(typeschool_freq),
                    " (", round(typeschoolpc, 3), "%)"),
    col    = c("#DCB0C3", "#596CAD"))

Nhận xét:

Dựa vào Bảng 2.1 và Biểu đồ 2.1: Phân bố loại trường (typeschool), ta thấy rằng học sinh chủ yếu theo học tại các trường Academic (học thuật) với tần suất 609 học sinh, chiếm 60.9% tổng số. Trong khi đó, Vocational (dạy nghề) chỉ chiếm 39.1% với 391 học sinh. Biểu đồ tròn trực quan hóa rõ sự chênh lệch này qua diện tích các lát cắt, cho thấy xu hướng học sinh nghiêng về con đường học thuật hơn là nghề nghiệp. Điều này có thể phản ánh định hướng xã hội, kỳ vọng học vấn hoặc nhận thức về cơ hội nghề nghiệp giữa hai loại hình giáo dục. Tuy nhiên, tỷ lệ học sinh chọn học nghề cũng không nhỏ, cho thấy sự đa dạng trong lựa chọn con đường học tập.

2.2 School_accreditation

2.2.1 Thống kê Tần suất

school_accreditation_freq <- table(data$school_accreditation)

school_accreditation_pct <- prop.table(school_accreditation_freq) * 100

school_accreditation_table <- data.frame(
  school_accreditation = names(school_accreditation_freq),
  Frequency = as.integer(school_accreditation_freq),
  `Percentage (%)` = round(school_accreditation_pct, 2)
)

# Hiển thị bảng
knitr::kable(school_accreditation_table, caption = "Bảng 2.2 Phân phối xếp hạng trường - school_accreditation")
Bảng 2.2 Phân phối xếp hạng trường - school_accreditation
school_accreditation Frequency Percentage…..Var1 Percentage…..Freq
A 481 A 48.1
B 519 B 51.9

2.2.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(school_accreditation_freq,
    main   = "Biểu đồ 2.2: Phân phối xếp hạng trường - school_accreditation",
    labels = paste0(names(school_accreditation_freq),
                    " (", round(school_accreditation_pct, 3), "%)"),
    col    = c("#FEF9DB", "#4C689B"))

Nhận xét:

Dựa vào Bảng 2.2 và biểu đồ tròn minh họa phân phối số học sinh theo xếp hạng trường (school_accreditation), ta thấy rằng số học sinh theo học tại trường xếp hạng B chiếm tỷ lệ nhỉnh hơn (51.9%) so với trường xếp hạng A (48.1%). Biểu đồ tròn thể hiện sự phân bố khá cân đối giữa hai loại xếp hạng, với lát cắt không chênh lệch nhiều. Điều này cho thấy trong thực tế, học sinh không chỉ tập trung vào các trường đạt chuẩn cao nhất (A), mà vẫn có xu hướng lựa chọn cả trường xếp hạng B, có thể do yếu tố vị trí địa lý, điều kiện gia đình hoặc nhận thức về chất lượng giảng dạy.

2.3 Gender

2.3.1 Thống kê Tần suất

gr_freq <- table(data$gender)

gr_pct <- table(data$gender)/sum(nrow(data))*100

gr_table <- data.frame(
  Gender = names(gr_freq),
  Frequency = as.integer(gr_freq),
  Percentage = round(gr_pct, 3)
)
colnames(gr_table) <- c("Gender", "Frequency", "Gender", "Percentage (%)")
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following objects are masked from 'package:flextable':
## 
##     as_image, footnote
# Hiển thị bảng đẹp

  knitr::kable(gr_table, caption = "Bảng 2.3 Phân phối giới tính học sinh - GENDER")
Bảng 2.3 Phân phối giới tính học sinh - GENDER
Gender Frequency Gender Percentage (%)
Female 485 Female 48.5
Male 515 Male 51.5

2.3.2 Trực quan hóa

pie(gr_freq,
    main   = "Biểu đồ 2.3: Phân phối giới tính học sinh - gender",
    labels = paste0(names(gr_freq),
                    " (", round(gr_pct, 3), "%)"),
    col    = c("#F7E4E2", "#63847D")) 

Nhận xét:

Dựa vào Bảng 2.3 và biểu đồ tròn minh họa phân phối giới tính học sinh (GENDER), có thể thấy tỷ lệ học sinh nam chiếm ưu thế nhẹ với 515 học sinh (51.5%), trong khi nữ chiếm 48.5% với 485 học sinh. Biểu đồ tròn thể hiện hai lát cắt gần như bằng nhau, phản ánh sự cân bằng giới tính tương đối trong mẫu khảo sát. Tuy nam có số lượng nhiều hơn một chút, nhưng mức chênh lệch không đáng kể. Điều này cho thấy không có sự thiên lệch rõ rệt về giới tính trong tiếp cận giáo dục phổ thông, và có thể coi đây là một dấu hiệu tích cực về bình đẳng giới trong học tập.

2.4 interest

2.4.1 Thống kê Tần suất

interest_freq <- table(data$interest)

interest_pct <- table(data$interest)/sum(nrow(data))*100

interest_table <- data.frame(
  interest = names(interest_freq),
  Frequency = as.integer(interest_freq),
  Percentage = round(interest_pct, 3)
)
colnames(interest_table) <- c("interest", "Frequency", "interest", "Percentage (%)")

# Hiển thị bảng đẹp
knitr::kable(interest_table, caption = "Bảng 2.4 Phân phối mức độ thích thú trong học tập - interest")
Bảng 2.4 Phân phối mức độ thích thú trong học tập - interest
interest Frequency interest Percentage (%)
Interested 100 Interested 10.0
Less Interested 229 Less Interested 22.9
Not Interested 86 Not Interested 8.6
Uncertain 261 Uncertain 26.1
Very Interested 324 Very Interested 32.4

2.4.2 Trực quan hóa

library(ggplot2)

interest_df <- as.data.frame(interest_pct)
colnames(interest_df) <- c("interest", "Percentage")

ggplot(interest_df, aes(x = reorder(interest, -Percentage), y = Percentage, fill = interest)) +
  geom_bar(stat = "identity") +
  labs(title = "Biểu đồ 2.4: Phân phối mức độ thích thú trong học tập",
       x = "Độ thích thú", y = "Tỷ lệ %") +
  theme_light() +
  theme(axis.text.x = element_text(angle = 0, hjust = 1))

NHẬN XÉT:

Dựa vào Bảng 2.4 và biểu đồ tròn minh họa phân phối mức độ thích thú trong học tập (interest), có thể thấy mức độ hứng thú của học sinh khá đa dạng. Trong đó, nhóm “Very Interested” chiếm tỷ lệ cao nhất với 32.4% (324 học sinh), cho thấy một bộ phận lớn học sinh có động lực học tập rõ rệt. Tuy nhiên, đáng chú ý là có tới 26.1% (261 học sinh) nằm trong nhóm “Uncertain”, phản ánh sự thiếu chắc chắn hoặc không rõ ràng về thái độ học tập. Ngoài ra, gần 1/3 số học sinh còn lại thuộc nhóm “Less Interested” hoặc “Not Interested”, chiếm tổng cộng 31.5%, cho thấy vẫn còn một tỷ lệ đáng kể học sinh thiếu sự gắn bó với việc học.

2.5 residence

2.5.1 Thống kê Tần suất

residence_freq <- table(data$residence)

residence_pct <- table(data$residence)/sum(nrow(data))*100

residence_table <- data.frame(
  residence = names(residence_freq),
  Frequency = as.integer(residence_freq),
  Percentage = round(residence_pct, 3)
)
colnames(residence_table) <- c("residence", "Frequency", "residence", "Percentage (%)")

# Hiển thị bảng đẹp
knitr::kable(residence_table, caption = "Bảng 2.5 Phân phối định cư của học sinh - residence")
Bảng 2.5 Phân phối định cư của học sinh - residence
residence Frequency residence Percentage (%)
Rural 461 Rural 46.1
Urban 539 Urban 53.9

2.5.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(residence_freq,
    main   = "Biểu đồ 2.5: Phân bố định cư của học sinh (residence)",
    labels = paste0(names(residence_freq),
                    " (", round(residence_pct, 3), "%)"),
    col    = c("#DCB0C3", "#596CAD"))

NHẬN XÉT:

Dựa vào Bảng 2.5 và biểu đồ tròn minh họa phân phối nơi cư trú của học sinh (residence), ta thấy rằng học sinh đến từ khu vực đô thị (Urban) chiếm tỷ lệ cao hơn với 539 học sinh (53.9%), trong khi học sinh từ nông thôn (Rural) là 461 học sinh (46.1%). Biểu đồ tròn thể hiện hai lát cắt gần tương đương, phản ánh sự phân bố dân cư khá đồng đều trong mẫu khảo sát. Tuy nhiên, sự nhỉnh hơn từ phía đô thị có thể gợi ý về khả năng tiếp cận giáo dục cao hơn ở khu vực thành thị, nhờ điều kiện kinh tế – xã hội thuận lợi hơn. Đồng thời, điều này cũng cho thấy vẫn có tỷ lệ lớn học sinh nông thôn đang tham gia học tập, thể hiện nỗ lực mở rộng cơ hội giáo dục ở mọi vùng miền.

2.7 parent_salary

2.7.1 Thống kê Tần suất

parent_salary_freq <- table(data$parent_salary)

parent_salary_pct <- table(data$parent_salary)/sum(nrow(data))*100

parent_salary_table <- data.frame(
  parent_salary = names(parent_salary_freq),
  Frequency = as.integer(parent_salary_freq),
  Percentage = round(parent_salary_pct, 3)
)
colnames(parent_salary_table) <- c("parent_salary", "Frequency", "parent_salary", "Percentage (%)")

# Hiển thị bảng đẹp
knitr::kable(parent_salary_table, caption = "Bảng 2.7 Phân phối theo thu nhập của người giám hộ - parent_salary")
Bảng 2.7 Phân phối theo thu nhập của người giám hộ - parent_salary
parent_salary Frequency parent_salary Percentage (%)
adequate 448 adequate 44.8
average 446 average 44.6
high 39 high 3.9
low 67 low 6.7

2.7.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(parent_salary_freq,
    main   = "Biểu đồ 2.7: Phân phối theo thu nhập của người giám hộ - parent_salary",
    labels = paste0(names(parent_salary_freq),
                    " (", round(parent_salary_pct, 3), "%)"),
    col    = c("#ABBEE0", "#F4C0C2", "#B2EEDA", "#FFECAF")) 

NHẬN XÉT:

Phân phối thu nhập người giám hộ cho thấy sự tương đồng rõ rệt giữa nhóm có thu nhập “adequate” (44.8%) và “average” (44.6%), chiếm gần 90% tổng số học sinh. Điều này phản ánh rằng đa số học sinh xuất thân từ các gia đình có mức sống ổn định, không quá giàu cũng không quá khó khăn. So với các nhóm này, nhóm thu nhập “high” chỉ chiếm rất nhỏ (3.9%), cho thấy các gia đình khá giả không nhiều trong mẫu khảo sát. Nhóm thu nhập “low” chiếm 6.7%, thấp hơn khá nhiều so với hai nhóm trung bình, nhưng vẫn là một tỷ lệ không nhỏ, phản ánh rằng còn nhiều học sinh đến từ gia đình có điều kiện kinh tế hạn chế. So sánh với các phân phối khác như độ tuổi giám hộ hay nơi cư trú, thu nhập có sự phân hóa rõ hơn, có thể ảnh hưởng đến cơ hội và điều kiện học tập của học sinh.

2.8 house_area

2.8.1 Thống kê Tần suất

house_area_freq <- table(data$house_area)

house_area_pct <- table(data$house_area)/sum(nrow(data))*100

house_area_table <- data.frame(
  house_area = names(house_area_freq),
  Frequency = as.integer(house_area_freq),
  Percentage = round(house_area_pct, 3)
)
colnames(house_area_table) <- c("house_area", "Frequency", "house_area", "Percentage (%)")

# Hiển thị bảng đẹp
knitr::kable(house_area_table, caption = "Bảng 2.8 Phân phối theo diện tích nhà ở - house_area")
Bảng 2.8 Phân phối theo diện tích nhà ở - house_area
house_area Frequency house_area Percentage (%)
Large 200 Large 20.0
Medium 424 Medium 42.4
Small 376 Small 37.6

2.8.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(house_area_freq,
    main   = "Biểu đồ 2.8: Phân phối theo theo diện tích nhà ở - house_area",
    labels = paste0(names(house_area_freq),
                    " (", round(house_area_pct, 3), "%)"),
    col    = c("#96BFBC", "#E8EDDA", "#D4A2A6")) 

NHẬN XÉT:

Phân phối diện tích nhà ở cho thấy gần 80% học sinh sống trong nhà có diện tích nhỏ đến trung bình (37.6% diện tích nhỏ, 42.4% diện tích trung bình), chỉ có 20% sống trong nhà diện tích lớn. Kết hợp với dữ liệu về thu nhập người giám hộ chủ yếu ở mức adequate và average (gần 90%), cũng như độ tuổi người giám hộ tập trung từ 50 đến 55, cho thấy phần lớn học sinh thuộc gia đình có điều kiện kinh tế ổn định nhưng không quá dư giả. Điều này phản ánh môi trường sinh hoạt và học tập chủ yếu thuộc tầng lớp trung lưu, ảnh hưởng đến khả năng tiếp cận và chất lượng giáo dục của học sinh.

2.9 parent_was_in_college

2.9.1 Thống kê Tần suất

parent_was_in_college_freq <- table(data$parent_was_in_college)

parent_was_in_college_pct <- table(data$parent_was_in_college)/sum(nrow(data))*100

parent_was_in_college_table <- data.frame(
  parent_was_in_college = names(parent_was_in_college_freq),
  Frequency = as.integer(parent_was_in_college_freq),
  Percentage = round(parent_was_in_college_pct, 3)
)
colnames(parent_was_in_college_table) <- c("parent_was_in_college", "Frequency", "parent_was_in_college", "Percentage (%)")

# Hiển thị bảng đẹp
knitr::kable(
  parent_was_in_college_table,
  caption = "Bảng 2.10 Phân phối theo khả năng người giám hộ theo học cao đẳng - parent_was_in_college"
)
Bảng 2.10 Phân phối theo khả năng người giám hộ theo học cao đẳng - parent_was_in_college
parent_was_in_college Frequency parent_was_in_college Percentage (%)
FALSE 480 FALSE 48
TRUE 520 TRUE 52

2.9.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(parent_was_in_college_freq,
    main   = "Biểu đồ 2.10: Phân phối khả năng người giám hộ theo học cao đẳng - parent_was_in_college",
    labels = paste0(names(parent_was_in_college_freq),
                    " (", round(parent_was_in_college_pct, 3), "%)"),
    col    = c("#C4C1E1", "#EEDdB6", "#DCA2A7")) 

NHẬN XÉT:

Dữ liệu cho thấy 52% học sinh có người giám hộ từng học cao đẳng trở lên, trong khi 48% không có. Trình độ học vấn của người giám hộ khá cân bằng nhưng nghiêng nhẹ về phía có học vấn cao, điều này phần nào lý giải vì sao phần lớn học sinh đạt kết quả học tập ở mức Fair (42.4%) và Good (44.3%). Bên cạnh đó, đa số học sinh đến từ gia đình có thu nhập trung bình và nhà ở diện tích vừa phải, cho thấy môi trường học tập tuy không quá thuận lợi về vật chất nhưng được hỗ trợ tốt từ yếu tố văn hóa và nhận thức giáo dục của phụ huynh.

2.10 will_go_to_college

2.10.1 Thống kê Tần suất

will_go_to_college_freq <- table(data$will_go_to_college)

will_go_to_college_pct <- table(data$will_go_to_college)/sum(nrow(data))*100

will_go_to_college_table <- data.frame(
  will_go_to_college = names(will_go_to_college_freq),
  Frequency = as.integer(will_go_to_college_freq),
  Percentage = round(will_go_to_college_pct, 3)
)
colnames(will_go_to_college_table) <- c("will_go_to_college", "Frequency", "will_go_to_college", "Percentage (%)")

# Hiển thị bảng đẹp
knitr::kable(
  will_go_to_college_table,
  caption = "Bảng 2.11 Phân phối theo khả năng quyết định theo học cao đẳng của học sinh - will_go_to_college"
)
Bảng 2.11 Phân phối theo khả năng quyết định theo học cao đẳng của học sinh - will_go_to_college
will_go_to_college Frequency will_go_to_college Percentage (%)
NO 500 NO 50
YES 500 YES 50

2.10.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(will_go_to_college_freq,
    main   = "Biểu đồ 2.11: Phân phốitheo khả năng quyết định theo học cao đẳng của học sinh  - will_go_to_college",
    labels = paste0(names(will_go_to_college_freq),
                    " (", round(will_go_to_college_pct, 3), "%)"),
    col    = c("#C4C1E1", "#EEDdB6", "#DCA2A7")) 

NHẬN XÉT:

Kết quả từ Bảng 2.11 cho thấy học sinh được chia đều về khả năng quyết định theo học cao đẳng, với 50% trả lời có và 50% trả lời không, phản ánh sự phân hóa rõ nét trong định hướng học tập tương lai. Mặc dù dữ liệu ở Bảng 2.10 cho thấy 52% người giám hộ đã từng học cao đẳng trở lên, điều này không đồng nghĩa với việc học sinh sẽ tiếp nối định hướng học tập đó. Quyết định theo học cao đẳng có thể bị ảnh hưởng bởi nhiều yếu tố khác nhau như kết quả học tập (chỉ 13.3% đạt loại giỏi), thu nhập của gia đình (đa số ở mức adequate hoặc average), và diện tích nhà ở (phần lớn là nhỏ và vừa), cho thấy nhiều học sinh vẫn còn gặp hạn chế về điều kiện vật chất hoặc thiếu động lực. Ngoài ra, dữ liệu từ Bảng 2.4 về mức độ hứng thú học tập cũng phản ánh sự thiếu chắc chắn, khi có đến 26.1% học sinh cảm thấy không rõ ràng về hứng thú học, điều này có thể khiến nhiều em không đưa ra được quyết định rõ ràng về việc học tiếp sau phổ thông. Như vậy, mặc dù môi trường gia đình có phần hỗ trợ, thì quyết định học tiếp lên cao đẳng vẫn là một vấn đề phức tạp, đòi hỏi sự tư vấn, định hướng và hỗ trợ mạnh mẽ hơn từ phía nhà trường và xã hội.

2.11 Biến average_grades

2.11.1 Thống kê Tần suất

average_grades_freq <- table(data$average_grades)

average_grades_pct <- table(data$average_grades)/sum(nrow(data))*100

average_grades_table <- data.frame(
  average_grades = names(average_grades_freq),
  Frequency = as.integer(average_grades_freq),
  Percentage = round(average_grades_pct, 3)
)
colnames(average_grades_table) <- c("average_grades", "Frequency", "average_grades", "Percentage (%)")

# Hiển thị bảng đẹp
knitr::kable(
  average_grades_table,
  caption = "Bảng 2.11 Phân phối theo kết quả học tập của học sinh - average_grades"
)
Bảng 2.11 Phân phối theo kết quả học tập của học sinh - average_grades
average_grades Frequency average_grades Percentage (%)
Excellent 133 Excellent 13.3
Fair 424 Fair 42.4
Good 443 Good 44.3

2.11.2 Trực quan hóa

# Vẽ Trực quan hoá tròn
pie(average_grades_freq,
    main   = "Biểu đồ 2.11: Phân phối kết quả học tập của học sinh (average_grades)",
    labels = paste0(names(average_grades_freq),
                    " (", round(average_grades_pct, 3), "%)"),
    col    = c("#C4C1E1", "#EEDdB6", "#DCA2A7")) 

Dựa vào Bảng 2.11 về phân phối kết quả học tập của học sinh, ta thấy nhóm có thành tích Good chiếm tỷ lệ cao nhất với 44.3% (443 học sinh), tiếp theo là nhóm Fair chiếm 42.4% (424 học sinh), và nhóm Excellent chiếm tỷ lệ thấp nhất với 13.3% (133 học sinh).

Nhận xét: Phần lớn học sinh đạt kết quả học tập từ mức Fair đến Good, thể hiện chất lượng học tập trung bình đến khá phổ biến trong mẫu khảo sát. Tỷ lệ học sinh xuất sắc còn khá khiêm tốn, chỉ khoảng 1/8 tổng số. Điều này có thể phản ánh cả năng lực học tập và các điều kiện hỗ trợ học tập hiện tại, từ đó gợi ý cần các biện pháp nâng cao chất lượng giáo dục để giúp nhiều học sinh đạt kết quả cao hơn.

PHẦN 3:ƯỚC LƯỢNG KHOẢNG VÀ KIỂM ĐỊNH GIẢ THUYẾT CHO TỶ LỆ (MỘT BIẾN)

Khoảng tin cậy cho tỷ lệ (proportion):

# Function
prop1.interval <- function(x,n,conf.level) # function of 1-proportion CI for p
{
p <- x/n
z.crit <- -1*qnorm((1-conf.level)/2)
margin.error <- z.crit*sqrt(p*(1-p)/n)
ci.lower <- p - margin.error
ci.upper <- p + margin.error
dat <- c(p, z.crit, margin.error, ci.lower, ci.upper)
names(dat) <- c("Mean", "Critical Value", "Margin of Error", "CI lower", "CI upper")
return(dat)
}

3.1 average_grades-Fair

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

# Số lượng học sinh có kết quả học tập thuộc nhóm "Fair"
xFair <- sum(data$average_grades == "Fair")
# Ước lượng khoảng tin cậy 95%
prop1.interval(xFair,nrow(data),0.95) # 1-proportion 95% CI for p
##            Mean  Critical Value Margin of Error        CI lower        CI upper 
##      0.42400000      1.95996398      0.03062967      0.39337033      0.45462967

Nhận xét:

  • Kết quả phân tích cho thấy tỷ lệ học sinh có học lực “Fair” trong mẫu là 42.4% (Mean = 0.424). Đây là ước lượng tốt cho tỷ lệ thực tế trong quần thể. Giá trị tới hạn (Critical Value = 1.96) được lấy từ phân phối chuẩn ứng với mức tin cậy 95%, dùng để tính sai số biên.

  • Sai số biên (Margin of Error = 0.0306) cho thấy mức độ không chắc chắn khi dùng trung bình mẫu để ước lượng tỷ lệ tổng thể. Nhờ cỡ mẫu đủ lớn, sai số nhỏ giúp khoảng tin cậy chính xác hơn.

  • Từ đó, khoảng tin cậy 95% dao động từ 39.34% đến 45.46% (CI lower = 0.3934, CI upper = 0.4546). Điều này nghĩa là với độ tin cậy 95%, tỷ lệ thực sự học sinh loại “Fair” nằm trong khoảng này. Kết quả cho thấy cần có chính sách hỗ trợ nhóm học sinh trung bình để nâng cao chất lượng giáo dục.

3.1.2 Kiểm định Giả thuyết:

Bài toán có giả thuyết như sau: \[ \left\{ \begin{array}{l} H_0: \; p = 0.4 \quad \text{(Tỷ lệ học sinh học lực Fair trong tổng thể là đúng 40%)} \\ H_1: \; p \ne 0.4 \quad \text{(Tỷ lệ học sinh học lực Fair khác 40%, có thể cao hơn hoặc thấp hơn)} \end{array} \right.\]

prop.test(x=xFair, n=nrow(data), p=0.4, correct=FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  xFair out of nrow(data), null probability 0.4
## X-squared = 2.4, df = 1, p-value = 0.1213
## alternative hypothesis: true p is not equal to 0.4
## 95 percent confidence interval:
##  0.3937184 0.4548632
## sample estimates:
##     p 
## 0.424
  • Với p-value = 0.1213 lớn hơn mức ý nghĩa \(\alpha = 5%\), ta không có đủ bằng chứng để bác bỏ giả thuyết \(H_0: p = 0.4\). Nói cách khác, chưa thể khẳng định rằng tỷ lệ học sinh có học lực loại “Fair” khác 40% trong tổng thể. Tuy giá trị ước lượng từ mẫu là 42.4% (p = 0.424), nhưng sự chênh lệch này chưa đủ ý nghĩa thống kê.

  • Khoảng tin cậy 95% cho tỷ lệ thực tế dao động từ 39.37% đến 45.49%, nghĩa là 40% vẫn nằm trong khoảng tin cậy nên giả thuyết \(H_0\) là phù hợp. Kết quả này cho thấy tỷ lệ học sinh “Fair” có thể gần với giả định ban đầu (40%), và chưa có bằng chứng rõ ràng để kết luận rằng nó cao hơn hoặc thấp hơn đáng kể.

3.2 parent_salary-low

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

# Số lượng người giám hộ của học sinh có thu nhập nhóm "low"
xlow <- sum(data$parent_salary == "low")
# Ước lượng khoảng tin cậy 95%
prop1.interval(xlow,nrow(data),0.95) # 1-proportion 95% CI for p
##            Mean  Critical Value Margin of Error        CI lower        CI upper 
##      0.06700000      1.95996398      0.01549624      0.05150376      0.08249624

NHẬN XÉT:

  • Tỷ lệ người giám hộ có thu nhập thuộc nhóm “low” trong mẫu là 6.7% (Mean = 0.067). Đây là con số tương đối nhỏ, cho thấy phần lớn người giám hộ có thu nhập cao hơn mức này. Giá trị tới hạn (Critical Value = 1.96) được sử dụng từ phân phối chuẩn với mức ý nghĩa 5%, nhằm tính sai số biên.

  • Sai số biên (Margin of Error = 0.0155) phản ánh độ không chắc chắn khi dùng tỷ lệ mẫu để ước lượng tỷ lệ tổng thể. Với sai số tương đối nhỏ, ước lượng được xem là đáng tin cậy. Khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 5.15% đến 8.25% (CI lower = 0.0515, CI upper = 0.0825).

  • Điều này cho thấy tỷ lệ người giám hộ thu nhập thấp là tương đối ít, giúp nhà quản lý hiểu rõ hơn về đặc điểm kinh tế của đối tượng được khảo sát và từ đó đưa ra chính sách hỗ trợ phù hợp hơn nếu cần thiết.

3.2.2 Kiểm định Giả thuyết:

Bài toán có giả thuyết như sau: \[ \left\{ \begin{array}{l} H_0: \; p = 0.05 \quad \text{(Tỷ lệ người giám hộ có thu nhập thuộc nhóm "low" là 5%)} \\ H_1: \; p > 0.05 \quad \text{(Tỷ lệ người giám hộ có thu nhập thuộc nhóm "low" cao hơn 5%)} \end{array} \right.\]

prop.test(x=xlow, n=nrow(data), p=0.05,alternative = "greater", correct=FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  xlow out of nrow(data), null probability 0.05
## X-squared = 6.0842, df = 1, p-value = 0.00682
## alternative hypothesis: true p is greater than 0.05
## 95 percent confidence interval:
##  0.0551286 1.0000000
## sample estimates:
##     p 
## 0.067

Kết quả kiểm định tỉ lệ một mẫu không sử dụng hiệu chỉnh liên tục cho giá trị thống kê \(\chi^2 = 6.08\) với 1 bậc tự do và p-value = 0.00682, nhỏ hơn mức ý nghĩa 5%. Do đó, ta có đủ bằng chứng để bác bỏ giả thuyết \(H_0\) và chấp nhận giả thuyết \(H_1\), tức là tỷ lệ thực tế người giám hộ thu nhập nhóm “low” cao hơn 5%.

Điều này cho thấy trong mẫu khảo sát, nhóm người giám hộ có thu nhập nhóm “low” chiếm tỷ lệ đáng kể hơn so với giả định trước đó, từ đó cảnh báo rằng các chính sách hỗ trợ và can thiệp tài chính dành cho nhóm này là cần thiết để đảm bảo sự công bằng và nâng cao điều kiện sống của đối tượng có hoàn cảnh khó khăn.

3.3 interest-Uncertain

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

# Số lượng học sinh không rõ về độ thích thú trong học tập
xUncertain <- sum(data$interest == "Uncertain")
# Ước lượng khoảng tin cậy 95%
prop1.interval(xUncertain,nrow(data),0.95) # 1-proportion 95% CI for p
##            Mean  Critical Value Margin of Error        CI lower        CI upper 
##      0.26100000      1.95996398      0.02722015      0.23377985      0.28822015

NHẬN XÉT:

  • Tỷ lệ học sinh không rõ về độ thích thú trong học tập trong mẫu là 26.1% (Mean = 0.261). Đây là một tỷ lệ khá đáng kể, phản ánh một nhóm học sinh còn do dự hoặc chưa xác định được mức độ quan tâm của mình đối với việc học.

  • Giá trị tới hạn (Critical Value = 1.96) được sử dụng từ phân phối chuẩn với mức ý nghĩa 5%, nhằm tính sai số biên. Sai số biên (Margin of Error = 0.0272) cho biết độ chính xác của ước lượng tỷ lệ này.

  • Dựa trên đó, khoảng tin cậy 95% cho tỷ lệ thực tế dao động từ 23.38% đến 28.82% (CI lower = 0.2338, CI upper = 0.2882). Điều này cho thấy với độ tin cậy 95%, tỷ lệ học sinh không xác định được độ thích thú trong học tập thực tế nằm trong khoảng trên.

  • Kết quả này nhấn mạnh sự cần thiết của các biện pháp hỗ trợ giúp học sinh hiểu rõ và xác định được sở thích học tập, từ đó nâng cao động lực và hiệu quả học tập của nhóm học sinh này.

3.3.2 Kiểm định Giả thuyết:

Bài toán có giả thuyết như sau: \[ \left\{ \begin{array}{l} H_0: \; p = 0.11 \quad \text{(Tỷ lệ học sinh không rõ về độ thích thú trong học tập là 11%)} \\ H_1: \; p > 0.11 \quad \text{(Tỷ lệ học sinh không rõ về độ thích thú trong học tập là 11%)} \end{array} \right.\]

prop.test(xUncertain,nrow(data), p=0.11,alternative = "greater", correct=FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  xUncertain out of nrow(data), null probability 0.11
## X-squared = 232.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is greater than 0.11
## 95 percent confidence interval:
##  0.2388227 1.0000000
## sample estimates:
##     p 
## 0.261
  • Kết quả kiểm định tỉ lệ một mẫu không sử dụng hiệu chỉnh liên tục cho thấy giá trị thống kê \(\chi^2 = 232.9\) với 1 bậc tự do và p-value < 2.2 ^{-16}$, nhỏ hơn rất nhiều mức ý nghĩa 5%. Vì vậy, ta có đủ bằng chứng để bác bỏ giả thuyết \(H_0\) và chấp nhận giả thuyết thay thế \(H_1\).

  • Tỷ lệ mẫu ước lượng là 26.1% (p = 0.261), cao hơn nhiều so với tỷ lệ giả định 11%. Khoảng tin cậy 95% một phía cho tỷ lệ thực tế nằm trong khoảng từ 23.88% đến 100%, khẳng định tỷ lệ học sinh không rõ về độ thích thú trong học tập thực sự lớn hơn mức giả định.

  • Kết quả này cho thấy một tỷ lệ đáng kể học sinh còn do dự về sự hứng thú trong học tập, từ đó nhấn mạnh sự cần thiết của các biện pháp hỗ trợ để tăng động lực và sự quan tâm của các em đối với quá trình học tập.

3.4 parent_was_in_college-TRUE

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

# Số lượng  học sinh có người giám hộ theo học cao đẳng 
xTRUEp <- sum(data$parent_was_in_college == "TRUE")
# Ước lượng khoảng tin cậy 95%
prop1.interval(xTRUEp,nrow(data),0.95) # 1-proportion 95% CI for p
##            Mean  Critical Value Margin of Error        CI lower        CI upper 
##      0.52000000      1.95996398      0.03096495      0.48903505      0.55096495

NHẬN XÉT:

  • Tỷ lệ học sinh có người giám hộ từng theo học cao đẳng trong mẫu là 52.0% (Mean = 0.52), chiếm tỷ lệ khá lớn trong tổng số học sinh khảo sát.

  • Với giá trị tới hạn (Critical Value) là 1.96 ở mức ý nghĩa 5%, sai số biên (Margin of Error) được tính là 3.1% (0.03096), thể hiện độ chính xác của ước lượng tỷ lệ này.

  • Do đó, khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 48.9% đến 55.1% (CI lower = 0.489, CI upper = 0.551), cho thấy với độ tin cậy cao, tỷ lệ học sinh có người giám hộ từng học cao đẳng dao động trong khoảng này.

  • Kết quả này cho thấy hơn một nửa số học sinh có người giám hộ có trình độ học vấn ở mức cao đẳng trở lên, điều này có thể ảnh hưởng tích cực đến quá trình học tập và phát triển của học sinh thông qua sự hỗ trợ và tư vấn từ gia đình.

3.4.2 Kiểm định Giả thuyết:

Bài toán có giả thuyết như sau: \[ \left\{ \begin{array}{l} H_0: \; p = 0.6 \quad \text{(Tỷ lệ học sinh có người giám hộ từng theo học cao đẳng là 60%)} \\ H_1: \; p \ne 0.6 \quad \text{(Tỷ lệ học sinh có người giám hộ từng theo học cao đẳng khác 60%)} \end{array} \right.\]

prop.test(x=xTRUEp, n=nrow(data), p=0.6, correct=FALSE)
## 
##  1-sample proportions test without continuity correction
## 
## data:  xTRUEp out of nrow(data), null probability 0.6
## X-squared = 26.667, df = 1, p-value = 2.418e-07
## alternative hypothesis: true p is not equal to 0.6
## 95 percent confidence interval:
##  0.4890177 0.5508292
## sample estimates:
##    p 
## 0.52
  • Kết quả kiểm định tỉ lệ một mẫu không sử dụng hiệu chỉnh liên tục cho giá trị thống kê \(\chi^2 = 26.667\) với 1 bậc tự do và p-value = 2.418 ^{-7}$, nhỏ hơn nhiều mức ý nghĩa 5%. Do đó, ta có đủ bằng chứng để bác bỏ giả thuyết \(H_0\).

  • Tỷ lệ mẫu được ước lượng là 52% (p = 0.52), thấp hơn đáng kể so với tỷ lệ giả định 60%. Khoảng tin cậy 95% cho tỷ lệ thực tế nằm trong khoảng từ 48.9% đến 55.1%, khẳng định tỷ lệ thực tế học sinh có người giám hộ từng học cao đẳng thấp hơn mức 60%.

  • Kết quả này cho thấy tỷ lệ học sinh có người giám hộ từng theo học cao đẳng thực tế không đạt mức 60% như giả định trước đó, điều này có thể tác động đến các yếu tố liên quan đến hỗ trợ học tập và phát triển của học sinh, từ đó gợi ý cho việc xem xét lại các chính sách và chương trình hỗ trợ phù hợp.

PHẦN 4: PHÂN TÍCH MỐI QUAN HỆ GIỮA HAI BIẾN ĐỊNH TÍNH (BIVARIATE ANALYSIS)

4.1 Kiểm định thống kê chi bình phương

Việc kiểm tra mối quan hệ định tính rất quan trọng, vì nó là tiền đề phục vụ cho các phân tích bộ dữ liệu chuyên sâu hơn và các phương pháp ước lượng cho ra kết quả có tính thuyết phục hơn. Ta có giả thuyết sau:

\[ \left\{ \begin{array}{ll} H_0: & \text{Hai biến độc lập với nhau} \\ H_1: & \text{Hai biến được xem xét có liên quan đến nhau} \end{array} \right. \]

Ta thực hiện kiển định Chi bình phương sau:

table_typeparent <- table(data$type_school,data$parent_was_in_college)
table_typere<- table(data$type_school,data$residence)
table_typewill <- table(data$type_school,data$will_go_to_college)

table_typegen <- table(data$type_school, data$gender)

table_typein <- table(data$type_school, data$interest)

table_typesa <- table(data$type_school, data$school_accreditation)
table_typeparentsal <- table(data$type_school, data$parent_salary)

table_typehouse <- table(data$type_school, data$house_area)

table_typeav <- table(data$type_school, data$average_grades)

chitypeparent <- chisq.test(table_typeparent)
chitypere <- chisq.test(table_typere)
chitypewill <- chisq.test(table_typewill)
chitypegen <- chisq.test(table_typegen)
chitypein <- chisq.test(table_typein)
chitypesa <- chisq.test(table_typesa)
chitypeparentsal <- chisq.test(table_typeparentsal)
chitypehouse <- chisq.test(table_typehouse)
chitypeav <- chisq.test(table_typeav)


# Tạo danh sách các kiểm định
chi_tests <- list(
  "parent_was_in_college" = chitypeparent,
  "residence"             = chitypere,
  "will_go_to_college"           = chitypewill,
  "gender"                = chitypegen,
  "interest"              = chitypein,
  "school_accreditation"              = chitypesa,
  "parent_salary"         = chitypeparentsal,
  "house_area"            = chitypehouse,
  "average_grades"        = chitypeav
)

# Tạo bảng tổng hợp
chi_summary <- data.frame(
  Variable = names(chi_tests),
  Chi_Squared = sapply(chi_tests, function(x) round(x$statistic, 3)),
  DF = sapply(chi_tests, function(x) x$parameter),
  P_Value = sapply(chi_tests, function(x) round(x$p.value, 4)), Conclusion = sapply(chi_tests, function(x) ifelse(x$p.value < 0.05, " Đủ băng chứng bác bỏ H₀", "Đủ bằng chứng chấp nhận H₀"))
)

# Hiển thị kết quả
print(chi_summary, row.names = FALSE)
##               Variable Chi_Squared DF P_Value                 Conclusion
##  parent_was_in_college      20.823  1  0.0000    Đủ băng chứng bác bỏ H₀
##              residence      59.331  1  0.0000    Đủ băng chứng bác bỏ H₀
##     will_go_to_college       1.075  1  0.2998 Đủ bằng chứng chấp nhận H₀
##                 gender       0.633  1  0.4263 Đủ bằng chứng chấp nhận H₀
##               interest      78.045  4  0.0000    Đủ băng chứng bác bỏ H₀
##   school_accreditation       0.330  1  0.5657 Đủ bằng chứng chấp nhận H₀
##          parent_salary      40.769  3  0.0000    Đủ băng chứng bác bỏ H₀
##             house_area       2.897  2  0.2349 Đủ bằng chứng chấp nhận H₀
##         average_grades       9.580  2  0.0083    Đủ băng chứng bác bỏ H₀

Nhận xét:

  • Kết quả kiểm định Chi-squared cho thấy một số biến định tính có mối quan hệ thống kê có ý nghĩa với biến phụ thuộc typeschool (loại hình trường học). Cụ thể, các biến parent_was_in_college, residence, interest, parent_salary và average_grades có giá trị p-value nhỏ hơn 5%, cho phép bác bỏ giả thuyết rỗng về tính độc lập giữa các biến này và lựa chọn loại hình trường học. Điều này cho thấy, về mặt định tính, các yếu tố liên quan đến nền tảng giáo dục của phụ huynh, nơi cư trú, động lực học tập, thu nhập hộ gia đình và kết quả học tập có ảnh hưởng đáng kể đến quyết định chọn trường nghề hay phổ thông của học sinh.

  • Về mặt kinh tế lượng, các mối liên hệ được phát hiện phù hợp với kỳ vọng lý thuyết. Học sinh có cha mẹ từng học đại học hoặc sống ở khu vực thành thị thường có xu hướng chọn trường phổ thông – có thể do định hướng tiếp tục học lên cao hơn. Thu nhập gia đình cao và thành tích học tập tốt cũng có thể làm tăng xác suất lựa chọn trường phổ thông, phản ánh chi phí cơ hội cao hơn nếu đi học nghề. Ngoài ra, mức độ quan tâm đến học tập (interest) có thể đại diện cho đặc điểm không quan sát được liên quan đến kỳ vọng tương lai hoặc động cơ cá nhân, từ đó ảnh hưởng đến lựa chọn giáo dục.

  • Ý nghĩa thực tiễn: Các kết quả này phù hợp với kỳ vọng trong thực tế: học lực cá nhân và điều kiện kinh tế đóng vai trò then chốt trong quyết định học tập sau trung học. Trong khi đó, yếu tố như giới tính hay cha mẹ từng học đại học dường như không còn là rào cản đáng kể, có thể phản ánh xu hướng bình đẳng trong giáo dục hiện đại.

  • Ngược lại, các biến như gender, will_go_to_college, house_area và school_accreditation không có ý nghĩa thống kê trong mối quan hệ với typeschool, với p-value lớn hơn 0.05. Điều này cho thấy chưa có đủ bằng chứng để khẳng định các yếu tố này ảnh hưởng đến quyết định chọn trường.

  • Kết luận: Phân tích cho thấy cần đặc biệt quan tâm đến việc cải thiện chất lượng học tập, tăng cường tư vấn nghề nghiệp và hỗ trợ tài chính để thúc đẩy tỷ lệ học sinh lựa chọn học cao đẳng. Đồng thời, cũng cần duy trì chính sách giáo dục toàn diện, đảm bảo mọi đối tượng học sinh đều có cơ hội tiếp cận giáo dục bậc cao hơn bất kể xuất thân hay giới tính.

4.2 typeschool - parent_was_in_college

4.2.1 Bảng tần số chéo

library(kableExtra)
knitr::kable(table_typeparent, caption = "Bảng 4.2 Tần số học sinh tại hai môi trường học tập và có bố mẹ từng học cao học")
Bảng 4.2 Tần số học sinh tại hai môi trường học tập và có bố mẹ từng học cao học
FALSE TRUE
Academic 328 281
Vocational 152 239

Nhận xét:

  • Bảng tần số cho thấy sự khác biệt rõ rệt trong lựa chọn loại hình trường học giữa hai nhóm học sinh theo nền tảng học vấn của phụ huynh. Trong số những học sinh có cha mẹ không từng học cao học (FALSE), tỷ lệ chọn trường phổ thông (328 học sinh) cao hơn hẳn so với trường nghề (152 học sinh). Ngược lại, với nhóm học sinh có cha mẹ từng học cao học (TRUE), số lượng học sinh theo học trường nghề (239) gần tương đương, thậm chí nhỉnh hơn so với nhóm học trường phổ thông (281).

  • Điều này gợi ý rằng trình độ học vấn của phụ huynh có thể ảnh hưởng đến xu hướng lựa chọn môi trường học tập của học sinh, cụ thể là học sinh có cha mẹ từng học cao học có xu hướng ít lệ thuộc vào khuôn mẫu học phổ thông truyền thống và mở hơn với lựa chọn học nghề. Xu hướng này hoàn toàn phù hợp với kết quả kiểm định Chi-squared trước đó, khi biến parent_was_in_college cho thấy có mối liên hệ có ý nghĩa thống kê với loại hình trường học (typeschool).

4.2.2 Trực quan hoá

library(ggplot2)

# Giả sử table_typeparent là bảng đếm (table) từ bảng chéo sẵn có
df_typeparent <- as.data.frame(table_typeparent)

# Đặt tên cột rõ ràng
colnames(df_typeparent) <- c("Type_of_School", "Parents_College", "Count")

# Vẽ biểu đồ cột nhóm (grouped bar chart)
ggplot(df_typeparent, aes(x = Parents_College, y = Count, fill = Type_of_School)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9), vjust = -0.25, size = 3) +
  labs(
    x = "Bố mẹ từng học đại học",
    y = "Số lượng học sinh",
    fill = "Loại hình trường học",
    title = "Biểu đồ 4.2: Tần số học sinh theo loại hình trường học và trình độ học vấn của phụ huynh"
  ) +
  theme_minimal()

Nhận xét:

  • Biểu đồ 4.1 minh họa sự phân bố học sinh theo loại hình trường học và trình độ học vấn của phụ huynh. Với nhóm học sinh có bố mẹ không từng học đại học (FALSE), phần lớn lựa chọn trường phổ thông (328 học sinh), trong khi số học sinh theo trường nghề là 152. Ngược lại, ở nhóm có phụ huynh từng học đại học (TRUE), tỷ lệ chọn trường nghề tăng rõ rệt (239 học sinh), gần tiệm cận với số học sinh học phổ thông (281).

  • Điều này cho thấy, nền tảng giáo dục của phụ huynh có thể đóng vai trò định hướng giáo dục cho con cái theo cách linh hoạt hơn, không chỉ hướng tới đại học mà còn mở ra lựa chọn giáo dục nghề nghiệp. Kết quả này phù hợp với kiểm định định tính trước đó, khi biến parent_was_in_college cho thấy mối liên hệ thống kê có ý nghĩa với typeschool, gợi ý rằng trình độ học vấn của phụ huynh là một yếu tố quan trọng ảnh hưởng đến quyết định chọn môi trường học tập.

4.2.3 Hiệu hai tỷ lệ

Thiết lập tỷ lệ

Tỷ lệ học sinh theo học chương trình học nghề có bố mẹ từng học cao học:

\[ p_1 = P(\text{parents_was_in_college} = TRUE \mid \text{program} = Academic) \] Tỷ lệ học sinh theo học chương trình học thuật có bố mẹ từng học cao học:

\[ p_1 = P(\text{parents_was_in_college} = TRUE \mid \text{will_go_to_college} = Vocational) \] Hiệu chênh lệch giữa hai tỷ lệ:

\[ d = p_1 - p_2 \]

Giả thuyết kiểm định

  • Giả thuyết H₀: Không có sự khác biệt giữa hai tỷ lệ
    \[ H_0: p_1 - p_2 = 0\]

  • Giả thuyết H1): Tỷ lệ học sinh học nghề có phụ huynh từng học cao học thấp hơn học sinh chương trình học thuật: \(H_1: p_1 - p_2 < 0\)

library(stats)

testtypeparent <- prop.test(
  x = c(table_typeparent["Academic", "TRUE"], table_typeparent["Vocational", "TRUE"]),
  n = c(sum(table_typeparent["Academic", ]), sum(table_typeparent["Vocational", ])),
  alternative = "less",
  correct = FALSE
)
print(testtypeparent)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(table_typeparent["Academic", "TRUE"], table_typeparent["Vocational", "TRUE"]) out of c(sum(table_typeparent["Academic", ]), sum(table_typeparent["Vocational", ]))
## X-squared = 21.42, df = 1, p-value = 1.845e-06
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.00000000 -0.09741704
## sample estimates:
##    prop 1    prop 2 
## 0.4614122 0.6112532

Kết quả kiểm định hai tỷ lệ cho thấy \(\chi^2 = 21.42\), với p-value = 1.845e-06, nhỏ hơn nhiều so với mức ý nghĩa 0.05. Do đó, ta có đủ bằng chứng bác bỏ giả thuyết \(H_0\), tức là không có đủ bằng chứng để kết luận rằng tỷ lệ học sinh có cha mẹ từng học cao học trong nhóm Academic cao hơn nhóm Vocational.

Khoảng tin cậy 95% cho hiệu số tỷ lệ \((p_1 - p_2)\) là từ –1.0000 đến -0.09741704 củng cố thêm nhận định rằng tỷ lệ của nhóm Academic thực sự nhỏ hơn nhóm Vocational. Điều này có thể phản ánh sự khác biệt trong xu hướng chọn môi trường học tập dựa theo nền tảng học vấn của cha mẹ.

4.2.4 Tỷ số Nguy cơ (Relative Risk - RR)

library(epitools)
rrtypeparent <- riskratio(table_typeparent, method = "wald")
print(rrtypeparent)
## $data
##             
##              FALSE TRUE Total
##   Academic     328  281   609
##   Vocational   152  239   391
##   Total        480  520  1000
## 
## $measure
##             risk ratio with 95% C.I.
##              estimate    lower    upper
##   Academic   1.000000       NA       NA
##   Vocational 1.324744 1.178865 1.488675
## 
## $p.value
##             two-sided
##                midp.exact fisher.exact   chi.square
##   Academic             NA           NA           NA
##   Vocational 3.622682e-06 4.009747e-06 3.689827e-06
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

  • Bảng tần số cho thấy sự khác biệt rõ rệt về lựa chọn loại hình trường học giữa hai nhóm học sinh phân theo nền tảng học vấn của cha mẹ. Trong tổng số 1000 học sinh, có 609 học sinh theo học trường phổ thông (academic) và 391 học sinh học trường nghề (vocational). Ở nhóm có phụ huynh từng học đại học, tỷ lệ học sinh học trường nghề chiếm đến 239/520 (≈45.96%), cao hơn đáng kể so với nhóm không có phụ huynh từng học đại học (152/480 ≈31.67%).

-Chênh lệch này được thể hiện rõ qua tỉ số rủi ro (risk ratio) cho nhóm học sinh học trường nghề là 1.32 với khoảng tin cậy 95% từ 1.18 đến 1.50. Điều này hàm ý rằng học sinh có phụ huynh từng học đại học có khả năng theo học trường nghề cao hơn khoảng 32% so với nhóm còn lại – một kết quả ngược với trực giác phổ biến rằng cha mẹ có học vấn cao sẽ định hướng con học theo hệ hàn lâm.

Kết quả kiểm định với ba phương pháp (Mid-p exact, Fisher exact và chi bình phương) đều cho giá trị p < 0.00001, cho thấy sự khác biệt về phân bố loại hình trường học giữa hai nhóm là có ý nghĩa thống kê ở mức 1%.

4.2.5 Tỷ số Chênh (Odds Ratio - OR):

library(DescTools)
ortypeparent <- OddsRatio(table_typeparent, method="wald", conf.level = 0.95)
print(ortypeparent)
## odds ratio     lwr.ci     upr.ci 
##   1.835362   1.417541   2.376337

Nhận xét:

  • Kết quả phân tích hồi quy logistic hoặc so sánh bảng chéo cho thấy odds ratio (tỷ số odds) giữa nhóm học sinh có cha mẹ từng học đại học và việc theo học trường nghề là khoảng 1.84, tức là xấp xỉ cao hơn khoảng 84% lần so với nhóm có cha mẹ không học đại học. Khoảng tin cậy 95% từ 1.42 đến 2.38 không chứa giá trị 1, cho thấy sự khác biệt này là có ý nghĩa thống kê. Điều này hàm ý rằng việc cha mẹ từng học đại học có liên hệ đáng kể với khả năng con cái lựa chọn học trường nghề, và khả năng này cao hơn đáng kể so với nhóm không có nền tảng học vấn tương tự từ cha mẹ.

4.3 typeschool - residence

4.3.1 Bảng tần số chéo

knitr::kable(table_typere, 
             caption = "Bảng 4.3 Tần số học sinh tại hai môi trường học tập và theo nơi định cư")
Bảng 4.3 Tần số học sinh tại hai môi trường học tập và theo nơi định cư
Rural Urban
Academic 221 388
Vocational 240 151

Nhận xét:

Từ Bảng 4.3, có thể thấy có sự khác biệt rõ rệt giữa nơi định cư và lựa chọn môi trường học tập của học sinh:

  • Trong số học sinh học chương trình học thuật (Academic), phần lớn đến từ khu vực Urban (388 học sinh), cao hơn đáng kể so với Rural (221 học sinh).

  • Ngược lại, trong nhóm học chương trình hướng nghiệp (Vocational), đa số học sinh đến từ khu vực Rural (240 học sinh), cao hơn nhiều so với Urban (151 học sinh).

Điều này cho thấy học sinh ở khu vực thành thị có xu hướng theo học chương trình học thuật nhiều hơn, trong khi học sinh ở nông thôn lại thiên về chương trình hướng nghiệp. Xu hướng này có thể phản ánh sự khác biệt về cơ hội tiếp cận giáo dục, định hướng nghề nghiệp, hoặc điều kiện kinh tế – xã hội giữa khu vực đô thị và nông thôn.

4.3.2 Trực quan hoá

library(ggplot2)

# Giả sử table_typeparent là bảng đếm (table) từ bảng chéo sẵn có
df_typere <- as.data.frame(table_typere)

# Đặt tên cột rõ ràng
colnames(df_typere) <- c("Type_of_School", "Residence", "Count")

# Vẽ biểu đồ cột nhóm (grouped bar chart)
ggplot(df_typere, aes(x = Residence, y = Count, fill = Type_of_School)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9), vjust = -0.25, size = 3) +
  labs(
    x = "Nơi cư trú",
    y = "Số lượng học sinh",
    fill = "Loại hình trường học",
    title = "Biểu đồ 4.3: Tần số học sinh theo loại hình trường học và trình độ học vấn của phụ huynh"
  ) +
  theme_minimal()

Nhận xét:

  • Biểu đồ 4.4 thể hiện sự khác biệt rõ rệt về mức độ quan tâm đến học cao học giữa học sinh hai loại hình trường học là học thuật (Academic) và nghề (Vocational). Nhìn chung, học sinh từ các trường học thuật có xu hướng quan tâm đến việc tiếp tục học cao học nhiều hơn. Cụ thể, nhóm học sinh “Very Interested” ở trường học thuật chiếm 212 người – cao gần gấp đôi so với nhóm trường nghề là 112 người. Tương tự, số học sinh “Interested” ở nhóm này cũng cao hơn (59 so với 41). Điều này cho thấy định hướng học tập dài hạn được hình thành rõ hơn ở học sinh theo học trường học thuật.

  • Ngược lại, học sinh trường nghề thể hiện mức độ ít quan tâm hơn đến việc học cao học. Số học sinh “Not Interested” thuộc nhóm này là 56 người – gần gấp đôi so với trường học thuật (30 người). Ngoài ra, nhóm “Uncertain” có số lượng khá lớn ở cả hai loại trường (126 học sinh học thuật và 135 học sinh nghề), cho thấy vẫn còn nhiều học sinh chưa xác định rõ ràng định hướng học tập tương lai.

  • Từ kết quả này có thể suy ra rằng loại hình trường học có ảnh hưởng nhất định đến mức độ quan tâm của học sinh đối với việc tiếp tục học tập sau bậc đại học. Học sinh theo học các trường học thuật có xu hướng gắn bó với con đường học vấn hơn, trong khi học sinh trường nghề có thể thiên về định hướng nghề nghiệp thực tiễn và gia nhập thị trường lao động sớm hơn.

4.3.3 Hiệu hai tỷ lệ

Thiết lập tỷ lệ

Tỷ lệ học sinh sống ở Rural học chương trình Academic:

\[ p_1 = P(\text{residence} = Rural \mid \text{type_school} = Academic) \] Tỷ lệ học sinh sống ở Rural học chương trình Vacational:

\[ p_1 = P(\text{residence} = Rural \mid \text{type_school} = Vacational) \] Hiệu chênh lệch giữa hai tỷ lệ:

\[ d = p_1 - p_2 \]

Giả thuyết kiểm định

  • Giả thuyết H₀: Không có sự khác biệt giữa hai tỷ lệ
    \[ H_0: p_1 - p_2 = 0\]

  • Giả thuyết H1): Tỷ lệ học sinh Rural học Academic thấp hơn Vacational: \(H_1: p_1 - p_2 < 0\)

library(stats)

testtypere <- prop.test(
  x = c(table_typere["Academic", "Rural"], table_typere["Vocational", "Rural"]),
  n = c(sum(table_typere["Academic", ]), sum(table_typere["Vocational", ])),
  alternative = "less",
  correct = FALSE
)
print(testtypere)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(table_typere["Academic", "Rural"], table_typere["Vocational", "Rural"]) out of c(sum(table_typere["Academic", ]), sum(table_typere["Vocational", ]))
## X-squared = 60.336, df = 1, p-value = 3.998e-15
## alternative hypothesis: less
## 95 percent confidence interval:
##  -1.000000 -0.199274
## sample estimates:
##    prop 1    prop 2 
## 0.3628900 0.6138107

Kết quả kiểm định hai tỷ lệ cho thấy \(\chi^2 = 60.336\), với p-value = 3.998e-15, nhỏ hơn nhiều so với mức ý nghĩa 0.05. Do đó, ta có đủ bằng chứng bác bỏ giả thuyết \(H_0\), tức là kết luận rằng tỷ lệ học sinh học chương trình học thuật sống ở nông thôn thấp hơn đáng kể so với tỷ lệ học sinh học nghề sống ở nông thôn.

Khoảng tin cậy 95% cho hiệu số tỷ lệ \((p_1 - p_2)\) là từ –1.0000 đến -0.199274 củng cố thêm nhận định rằng tỷ lệ của nhóm Academic thực sự nhỏ hơn nhóm Vocational. Điều này có thể phản ánh sự khác biệt trong xu hướng chọn môi trường học tập dựa theo nơi học sinh đang sinh sống.

4.3.4 Tỷ số Nguy cơ (Relative Risk - RR)

library(epitools)
rrtypere <- riskratio(table_typere, method = "boot")
print(rrtypere)
## $data
##             
##              Rural Urban Total
##   Academic     221   388   609
##   Vocational   240   151   391
##   Total        461   539  1000
## 
## $measure
##             risk ratio with 95% C.I.
##               estimate     lower     upper
##   Academic   1.0000000        NA        NA
##   Vocational 0.6061579 0.5244381 0.6936266
## 
## $p.value
##             two-sided
##                midp.exact fisher.exact   chi.square
##   Academic             NA           NA           NA
##   Vocational 7.549517e-15 7.757187e-15 7.996554e-15
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & bootstrap CI"

Nhận xét:

  • Kết quả phân tích tỷ số rủi ro (risk ratio) cho thấy học sinh khu vực thành thị có khả năng chọn chương trình học nghề chỉ xấp xỉ bằng khoảng 60.6% so với học sinh khu vực nông thôn (RR = 0.606, CI 95%: [0.525 ; 0.696]). Khoảng tin cậy 95% không chứa giá trị 1, điều này khẳng định sự khác biệt về tỷ lệ chọn chương trình học nghề giữa hai khu vực là có ý nghĩa thống kê. Trong khi đó, nhóm học sinh theo học chương trình học thuật được dùng làm nhóm chuẩn, nên RR = 1.

  • Đồng thời, cả ba kiểm định thống kê đều cho ra p-value cực kỳ nhỏ (p < 0.00000000000001), cho thấy mối quan hệ giữa nơi cư trú và loại hình học tập là rất có ý nghĩa. Điều này khẳng định rằng sự khác biệt về xu hướng lựa chọn giữa học nghề và học thuật giữa học sinh nông thôn và thành thị không phải do ngẫu nhiên, mà phản ánh sự bất cân xứng có thật trong thực tế.

Từ các kết quả trên, có thể thấy nơi cư trú đóng vai trò quan trọng trong việc định hướng giáo dục. Việc học sinh nông thôn có xu hướng chọn học nghề nhiều hơn gợi ý rằng cần có chính sách hướng nghiệp và hỗ trợ phù hợp, nhằm đảm bảo cơ hội học thuật công bằng hơn giữa các khu vực.

4.3.5 Tỷ số Chênh (Odds Ratio - OR):

library(DescTools)
ortypere <- OddsRatio(table_typere, method="wald", conf.level = 0.95)
print(ortypere)
## odds ratio     lwr.ci     upr.ci 
##  0.3583655  0.2757215  0.4657811
  • Tỷ số odds (odds ratio) giữa hai nhóm học sinh theo chương trình học (Academic và Vocational) tại khu vực nông thôn được ước lượng là 0.3584, với khoảng tin cậy 95% từ 0.2757 đến 0.4658. Điều này có nghĩa là odds để một học sinh sống ở nông thôn theo học chương trình học thuật chỉ bằng khoảng 35.84% odds của học sinh học chương trình nghề tại cùng khu vực.

  • Nói cách khác, học sinh học chương trình học thuật có xác suất sống ở khu vực nông thôn thấp hơn đáng kể so với học sinh học chương trình nghề.

  • Điều này phản ánh một xu hướng đáng chú ý: chương trình học thuật dường như phổ biến hơn ở khu vực đô thị, trong khi chương trình nghề lại thu hút nhiều học sinh từ khu vực nông thôn. Kết quả này góp phần làm rõ sự khác biệt trong định hướng học tập theo khu vực cư trú.

4.4 typeschool - interest

4.4.1 Bảng tần số chéo

library(kableExtra)
knitr::kable(table_typein, 
             caption = "Bảng 4.4 Tần số học sinh tại hai môi trường học tập và mức độ quan tâm đến học cao học")
Bảng 4.4 Tần số học sinh tại hai môi trường học tập và mức độ quan tâm đến học cao học
Interested Less Interested Not Interested Uncertain Very Interested
Academic 59 182 30 126 212
Vocational 41 47 56 135 112

Nhận xét:

  • Bảng 4.4 cho thấy có sự khác biệt rõ rệt giữa hai loại hình trường học về mức độ quan tâm đến việc học cao học. Học sinh thuộc nhóm trường học thuật (Academic) có xu hướng rất quan tâm và quan tâm đến học cao học nhiều hơn so với học sinh từ trường nghề (Vocational). Cụ thể, số học sinh “Very Interested” ở nhóm Academic (212 học sinh) gần gấp đôi so với Vocational (112 học sinh). Ngược lại, ở nhóm “Not Interested”, số học sinh trường Vocational (56) lại cao gần gấp đôi so với trường Academic (30). Điều này gợi ý rằng loại hình trường học có thể là một yếu tố quan trọng ảnh hưởng đến định hướng học tập tiếp theo của học sinh.

  • Dữ liệu cho thấy học sinh trường học thuật nhìn chung có định hướng học cao học rõ ràng hơn. Trong khi đó, học sinh từ các trường nghề có xu hướng không quan tâm hoặc chưa xác định rõ về việc học tiếp lên sau đại học.

4.4.2 Trực quan hoá

library(ggplot2)


df_typein <- as.data.frame(table_typein)

# Đặt tên cột rõ ràng
colnames(df_typein) <- c("Type_of_School", "Interest", "Count")

# Vẽ biểu đồ cột nhóm (grouped bar chart)
ggplot(df_typein, aes(x = Interest, y = Count, fill = Type_of_School)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9), vjust = -0.25, size = 3) +
  labs(
    x = "Mức độ quan tâm học cao học",
    y = "Số lượng học sinh",
    fill = "Loại hình trường học",
    title = "Biểu đồ 4.4: Tần số học sinh theo loại hình trường học và trình độ học vấn của phụ huynh"
  ) +
  theme_minimal()

4.4.3 Hiệu hai tỷ lệ

Thiết lập tỷ lệ

Tỷ lệ học sinh học trường học thuật (Academic) rất quan tâm đến học cao học:

\[ p_1 = P(\text{Interest} = Very Interested \mid \text{type_school} = Academic) \] Tỷ lệ học sinh học trường nghề (Vocational) rất quan tâm đến học cao học:

\[ p_1 = P(\text{(Interest} = Very Interested \mid \text{type_school} = Vocational) \] Hiệu chênh lệch giữa hai tỷ lệ:

\[ d = p_1 - p_2 \]

Giả thuyết kiểm định

  • Giả thuyết H₀: Không có sự khác biệt giữa hai tỷ lệ học sinh “Very Interested”
    \[ H_0: p_1 - p_2 = 0\]

  • Giả thuyết H1): Tỷ lệ học sinh học trường Academic rất quan tâm đến học cao học cao hơn học sinh trường Vocational: \(H_1: p_1 - p_2 > 0\)

library(stats)

testtypein <- prop.test(
  x = c(table_typein["Academic", "Very Interested"], table_typein["Vocational", "Very Interested"]),
  n = c(sum(table_typein["Academic", ]), sum(table_typein["Vocational", ])),
  alternative = "greater",
  correct = FALSE
)
print(testtypein)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(table_typein["Academic", "Very Interested"], table_typein["Vocational", "Very Interested"]) out of c(sum(table_typein["Academic", ]), sum(table_typein["Vocational", ]))
## X-squared = 4.1343, df = 1, p-value = 0.02101
## alternative hypothesis: greater
## 95 percent confidence interval:
##  0.012448 1.000000
## sample estimates:
##    prop 1    prop 2 
## 0.3481117 0.2864450

Nhận xét:

  • Kết quả kiểm định thống kê chi bình phương bằng 4.1343 và giá trị p_value = 0.02101. Với mức ý nghĩa 5%, nhận thấy giá trị p_value bé hơn nên ta có đủ cơ sở bác bỏ giải thuyết H_0 và kết luận rằng tỷ lệ học sinh rất quan tâm đến học cao học ở nhóm học thuật cao hơn một cách có ý nghĩa thống kê so với nhóm trường nghề. Khoảng tin cậy 95% cho hiệu tỷ lệ dao động từ 1.24% đến 100%.

  • Kết quả này cho thấy loại hình trường học có ảnh hưởng nhất định đến định hướng học tập sau đại học của học sinh. Học sinh theo học trường học thuật có xu hướng quan tâm nhiều hơn đến việc tiếp tục học lên cao, trong khi học sinh trường nghề có thể thiên về lựa chọn con đường nghề nghiệp thực tiễn hơn.

4.4.4 Tỷ số Nguy cơ (Relative Risk - RR)

library(epitools)
ttable_typein <- t(table_typein)
rrtypein <- riskratio(ttable_typein, method = "wald")
print(rrtypein)
## $data
##                  
##                   Academic Vocational Total
##   Interested            59         41   100
##   Less Interested      182         47   229
##   Not Interested        30         56    86
##   Uncertain            126        135   261
##   Very Interested      212        112   324
##   Total                609        391  1000
## 
## $measure
##                  risk ratio with 95% C.I.
##                    estimate     lower     upper
##   Interested      1.0000000        NA        NA
##   Less Interested 0.5005858 0.3539040 0.7080624
##   Not Interested  1.5882019 1.1986091 2.1044270
##   Uncertain       1.2615643 0.9700986 1.6406008
##   Very Interested 0.8431195 0.6379898 1.1142037
## 
## $p.value
##                  two-sided
##                     midp.exact fisher.exact   chi.square
##   Interested                NA           NA           NA
##   Less Interested 0.0001745906 0.0002227354 0.0001137038
##   Not Interested  0.0010974354 0.0012123246 0.0010280718
##   Uncertain       0.0695746030 0.0778336359 0.0681081334
##   Very Interested 0.2456987553 0.2836874596 0.2416845287
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

Phân tích bảng kết quả so sánh giữa học sinh thuộc hai nhóm trường học (Academic và Vocational) ở các mức độ quan tâm khác nhau cho thấy:

  • Nhóm “Less Interested” có risk ratio ước lượng là 0.50 (CI: 0.35 – 0.71), nhỏ hơn 1 và có ý nghĩa thống kê với p-value < 0.001 (chi-square p = 0.0001). Điều này nghĩa là học sinh “Less Interested” có xác suất học trường Vocational thấp hơn khoảng 50% so với nhóm “Interested” (chuẩn). Nói cách khác, tỷ lệ học sinh ít quan tâm trong nhóm Vocational thấp hơn đáng kể so với nhóm quan tâm.

  • Nhóm “Not Interested” có risk ratio là 1.59 (CI: 1.20 – 2.10), lớn hơn 1 và có ý nghĩa thống kê (p- value ≈ 0.001). Điều này chỉ ra rằng học sinh không quan tâm có xác suất chọn trường Vocational cao hơn khoảng 59% so với nhóm “Interested”. Nói cách khác, những học sinh không quan tâm có xu hướng chọn trường nghề nhiều hơn.

  • Nhóm “Uncertain” có risk ratio là 1.26 (CI: 0.97 – 1.64), mặc dù lớn hơn 1, nhưng không có ý nghĩa thống kê (p-value ≈ 0.07; chi-square p ≈ 0.068). Khoảng tin cậy chứa giá trị 1 cho thấy không đủ bằng chứng để khẳng định xác suất học sinh “Uncertain” chọn trường Vocational khác biệt so với nhóm “Interested”.

  • Nhóm “Very Interested” có risk ratio là 0.84 (CI: 0.64 – 1.11), nhỏ hơn 1 nhưng không có ý nghĩa thống kê (p-value ≈ 0.25; chi-square p ≈ 0.24). Như vậy, không có bằng chứng cho thấy tỷ lệ học sinh rất quan tâm chọn trường Vocational khác biệt đáng kể so với nhóm “Interested”. #### 4.4.5 Tỷ số Chênh (Odds Ratio - OR):

library(epitools)

odtypein <- oddsratio(ttable_typein, method = "wald")
print(odtypein)
## $data
##                  
##                   Academic Vocational Total
##   Interested            59         41   100
##   Less Interested      182         47   229
##   Not Interested        30         56    86
##   Uncertain            126        135   261
##   Very Interested      212        112   324
##   Total                609        391  1000
## 
## $measure
##                  odds ratio with 95% C.I.
##                    estimate     lower     upper
##   Interested      1.0000000        NA        NA
##   Less Interested 0.3716162 0.2228169 0.6197851
##   Not Interested  2.6861789 1.4798247 4.8759537
##   Uncertain       1.5418118 0.9668857 2.4585986
##   Very Interested 0.7602393 0.4801237 1.2037809
## 
## $p.value
##                  two-sided
##                     midp.exact fisher.exact   chi.square
##   Interested                NA           NA           NA
##   Less Interested 0.0001745906 0.0002227354 0.0001137038
##   Not Interested  0.0010974354 0.0012123246 0.0010280718
##   Uncertain       0.0695746030 0.0778336359 0.0681081334
##   Very Interested 0.2456987553 0.2836874596 0.2416845287
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét: - Nhóm học sinh “Less Interested” có odds chọn trường học Academic thấp hơn khoảng 62.8% so với nhóm “Interested” (OR = 0.37, p < 0.001), cho thấy xu hướng chọn trường Vocational nhiều hơn. Ngược lại, nhóm “Not Interested” có odds chọn trường Academic cao gấp khoảng 2.69 lần so với nhóm tham chiếu (OR = 2.69, p ≈ 0.001), phản ánh xu hướng chọn trường học thuật cao hơn dù không quan tâm.

  • Các nhóm “Uncertain” và “Very Interested” không cho thấy sự khác biệt có ý nghĩa thống kê so với nhóm “Interested” (p > 0.05). Cụ thể, nhóm “Uncertain” có OR = 1.54 với p ≈ 0.07, chỉ ra xu hướng tăng nhưng chưa đủ mạnh để kết luận; trong khi nhóm “Very Interested” có OR = 0.76 với p ≈ 0.25, cho thấy không có sự khác biệt đáng kể. Như vậy, sự quan tâm vừa phải hoặc không quan tâm rõ ràng đến trường học lại có ảnh hưởng lớn hơn đến việc chọn loại hình trường, so với những mức độ quan tâm cực đoan như “Very Interested”.

4.5 typeschool - parent_salary

4.5.1 Bảng tần số chéo

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(knitr)

# Giả sử bạn có dạng bảng như sau:
table_typeparentsal1 <- data.frame(
  Type = rep(c("Academic", "Vocational"), each = 4),
  ParentIncome = rep(c("adequate", "average", "high", "low"), times = 2),
  Frequency = c(237, 283, 28, 61, 211, 163, 11, 6)
)

# Xoay bảng: từ long -> wide
table_wide <- table_typeparentsal1 %>%
  pivot_wider(names_from = Type, values_from = Frequency)

# Đổi tên cột cho rõ ràng
colnames(table_wide)[1] <- "Thu nhập phụ huynh"

# Xuất bảng phù hợp để chèn Word
kable(table_wide, caption = "Bảng 4.5 Tần số học sinh tại hai môi trường học tập và thu nhập của phụ huynh")
Bảng 4.5 Tần số học sinh tại hai môi trường học tập và thu nhập của phụ huynh
Thu nhập phụ huynh Academic Vocational
adequate 237 211
average 283 163
high 28 11
low 61 6

Nhận xét:

  • Bảng 4.5 cho thấy sự phân bố học sinh giữa hai môi trường học tập – Academic (học thuật) và Vocational (học nghề) – theo mức thu nhập của phụ huynh (adequate, average, high, low). Nhìn chung, số lượng học sinh học tại môi trường học thuật chiếm tỷ lệ cao hơn ở tất cả các mức thu nhập. Cụ thể, nhóm thu nhập trung bình (average) và đủ sống (adequate) có số lượng học sinh theo học chương trình học thuật lần lượt là 283 và 237, cao hơn so với con số tương ứng 163 và 211 ở môi trường học nghề. Điều này cho thấy học sinh có điều kiện kinh tế ổn định có xu hướng lựa chọn chương trình học thuật nhiều hơn.

  • Ở nhóm thu nhập cao (high), số lượng học sinh ở cả hai môi trường đều thấp – chỉ 28 học sinh học Academic và 11 học sinh học Vocational, cho thấy nhóm thu nhập cao là thiểu số trong toàn bộ mẫu khảo sát. Tuy nhiên, trong nhóm thu nhập thấp (low), sự khác biệt trở nên rõ rệt: có 61 học sinh thuộc Academic, trong khi chỉ có 6 học sinh thuộc Vocational. Điều này phản ánh một nghịch lý đáng chú ý: dù có thu nhập thấp, một bộ phận học sinh vẫn theo đuổi chương trình học thuật thay vì học nghề – điều này có thể bắt nguồn từ kỳ vọng cao về giáo dục đại học hoặc định hướng nghề nghiệp dài hạn.

  • Tổng thể, dữ liệu gợi ý rằng thu nhập của phụ huynh có ảnh hưởng nhất định đến lựa chọn môi trường học tập của học sinh, tuy nhiên mối quan hệ này không hoàn toàn tuyến tính.

4.5.2 Trực quan hoá

library(ggplot2)


df_typeparentsal <- as.data.frame(table_typeparentsal)

# Đặt tên cột rõ ràng
colnames(df_typeparentsal) <- c("Type_of_School", "Parent_salary", "Count")

# Vẽ biểu đồ cột nhóm (grouped bar chart)
ggplot(df_typeparentsal, aes(x = Parent_salary, y = Count, fill = Type_of_School)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9), vjust = -0.25, size = 3) +
  labs(
    x = "Mức thu nhập của phụ huynh",
    y = "Số lượng học sinh",
    fill = "Loại hình trường học",
    title = "Biểu đồ 4.5: Tần số học sinh theo loại hình trường học và mức thu nhập của phụ huynh"
  ) +
  theme_minimal()

Nhận xét:

  • BBiểu đồ 4.5 cho thấy mối quan hệ giữa mức thu nhập của phụ huynh và lựa chọn loại hình trường học (Academic – học thuật và Vocational – học nghề) của học sinh. Nhìn chung, số lượng học sinh học chương trình học thuật vượt trội hơn chương trình học nghề ở hầu hết các nhóm thu nhập. Ở nhóm thu nhập adequate (đủ sống), số học sinh học Academic là 237, chỉ cao hơn khoảng 1,12 lần so với Vocational (211 học sinh), cho thấy chênh lệch không quá lớn. Tuy nhiên, đến nhóm thu nhập trung bình (average), sự chênh lệch trở nên rõ rệt hơn với 283 học sinh học Academic, cao gấp khoảng 1,74 lần so với 163 học sinh Vocational. Điều này ngụ ý rằng với điều kiện tài chính ổn định, học sinh có nhiều cơ hội hơn để theo đuổi con đường học thuật lâu dài.

  • Điều thú vị nằm ở nhóm thu nhập thấp (low), nơi số lượng học sinh học Academic là 61, trong khi chỉ có 6 học sinh học Vocational – tức gấp hơn 10 lần. Đây là một phát hiện đáng lưu ý, bởi thông thường, người ta kỳ vọng học sinh từ các gia đình thu nhập thấp sẽ có xu hướng chọn con đường học nghề ngắn hạn để sớm tham gia thị trường lao động. Tuy nhiên, dữ liệu này lại gợi ý điều ngược lại: ngay cả học sinh có hoàn cảnh kinh tế khó khăn cũng có xu hướng theo đuổi môi trường học thuật, có thể do kỳ vọng thoát nghèo qua con đường học vấn hoặc chịu ảnh hưởng từ chính sách hỗ trợ học tập. Ở nhóm thu nhập cao (high), số lượng học sinh ở cả hai loại trường đều rất thấp (28 học sinh Academic, 11 học sinh Vocational), phản ánh rằng đây là một nhóm thiểu số trong mẫu hoặc những học sinh thuộc nhóm này có xu hướng theo học các loại hình giáo dục khác không được đề cập (ví dụ: trường quốc tế, du học…).

  • Nhìn chung, biểu đồ cho thấy một mối liên hệ tiềm ẩn giữa thu nhập gia đình và định hướng giáo dục, trong đó học sinh thuộc các gia đình có thu nhập từ adequate trở lên có xu hướng chọn học Academic cao hơn. Đặc biệt, ở nhóm thu nhập thấp, lựa chọn học thuật vẫn chiếm ưu thế rõ rệt, phản ánh niềm tin mạnh mẽ vào con đường học vấn như một phương tiện vươn lên.

4.5.3 Hiệu hai tỷ lệ

Thiết lập tỷ lệ

Tỷ lệ học sinh học trường Academic đến từ gia đình thu nhập Low: \[ p_1 = P(\text{Income} = Low \mid \text{type_school} = Academic) \] Tỷ lệ học sinh học trường Vocational đến từ gia đình thu nhập Low:

\[ p_1 = P(\text{(Income} = Low \mid \text{type_school} = Vocational) \] Hiệu chênh lệch giữa hai tỷ lệ:

\[ d = p_1 - p_2 \]

Giả thuyết kiểm định

  • Giả thuyết H₀: Không có sự khác biệt giữa hai tỷ lệ học sinh mà phụ huynh có mức thu nhập “Low”
    \[ H_0: p_1 - p_2 = 0\]

  • Giả thuyết H1): Tỷ lệ học sinh học trường Academic khác biệt so với học sinh trường Vocational dù phụ huynh cùng mức thu nhập “Low”: \(H_1: p_1 - p_2 \ne 0\)

rownames(table_typeparentsal) <- c("Academic", "Vocational")

# Truy xuất giá trị theo chỉ số (không dùng tên để tránh lỗi)
x <- c(
  table_typeparentsal[1, 4],  # số lượng "low" trong nhóm Academic
  table_typeparentsal[2, 4]   # số lượng "low" trong nhóm Vocational
)

n <- c(
  sum(table_typeparentsal[1, ]),  # tổng học sinh nhóm Academic
  sum(table_typeparentsal[2, ])   # tổng học sinh nhóm Vocational
)

# Thực hiện kiểm định tỷ lệ hai mẫu
testtypeparentsal <- prop.test(
  x = x,
  n = n,
  alternative = "two.sided",
  correct = FALSE
)

# In kết quả
print(testtypeparentsal)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  x out of n
## X-squared = 27.405, df = 1, p-value = 1.65e-07
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  0.05804244 0.11159543
## sample estimates:
##     prop 1     prop 2 
## 0.10016420 0.01534527
  • Kết quả kiểm định tỷ lệ hai mẫu cho thấy có sự khác biệt rõ rệt giữa tỷ lệ học sinh có cha mẹ thu nhập low trong hai nhóm trường. Cụ thể, tỷ lệ học sinh thuộc nhóm Academic có cha mẹ thu nhập thấp là \(( \hat{p}_1 = 10.02\% )\), trong khi đó nhóm Vocational chỉ là \(( \hat{p}_2 = 1.53\% )\). Hiệu chênh lệch giữa hai tỷ lệ là khoảng ( 8.5% ), và khoảng tin cậy 95% cho chênh lệch này là (0.058; 0.112), hoàn toàn không chứa 0.

  • Kiểm định chi bình phương cho hai tỷ lệ độc lập trả về giá trị thống kê \(( \chi^2 = 27.405 )\), với bậc tự do là 1 và p-value cực nhỏ \(( p = 1.65 \times 10^{-7} )\). Vì p-value < 0.001, ta bác bỏ giả thuyết không \(( H_0: p_1 = p_2 )\), và kết luận rằng tỷ lệ học sinh có cha mẹ thu nhập thấp khác biệt có ý nghĩa thống kê giữa hai nhóm trường.

  • Điều thú vị là, tỷ lệ học sinh có hoàn cảnh kinh tế khó khăn lại cao hơn trong môi trường học thuật. Điều này có thể phản ánh rằng nhiều học sinh nghèo vẫn chọn hướng học lên cao để cải thiện tương lai, hoặc cũng có thể do các trường học thuật có nhiều chương trình hỗ trợ tài chính, học bổng, hay chính sách ưu tiên cho học sinh có hoàn cảnh đặc biệt. Kết quả đặt ra những gợi ý quan trọng cho chính sách giáo dục và phân bổ nguồn lực hỗ trợ nhóm học sinh yếu thế.

4.5.4 Tỷ số Nguy cơ (Relative Risk - RR)

library(epitools)
ttable_typepsal <- t(table_typeparentsal)
rrtypepsal <- riskratio(ttable_typepsal, method = "wald")
print(rrtypepsal)
## $data
##           
##            Academic Vocational Total
##   adequate      237        211   448
##   average       283        163   446
##   high           28         11    39
##   low            61          6    67
##   Total         609        391  1000
## 
## $measure
##           risk ratio with 95% C.I.
##             estimate      lower     upper
##   adequate 1.0000000         NA        NA
##   average  0.7759760 0.66336435 0.9077045
##   high     0.5988577 0.35952123 0.9975226
##   low      0.1901394 0.08805763 0.4105603
## 
## $p.value
##           two-sided
##              midp.exact fisher.exact   chi.square
##   adequate           NA           NA           NA
##   average  1.405588e-03 1.449882e-03 1.385321e-03
##   high     2.290300e-02 2.857076e-02 2.307673e-02
##   low      2.500429e-10 2.701359e-10 3.693901e-09
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

Kết quả so sánh giữa học sinh thuộc hai loại trường học (Academic và Vocational) theo các mức thu nhập của phụ huynh:

  • Nhóm “average” có risk ratio = 0.776 (CI: 0.663 – 0.908), nhỏ hơn 1 và có ý nghĩa thống kê (p-value ≈ 0.0014). Điều này có nghĩa là học sinh có thu nhập “average” từ phụ huynh có xác suất chọn trường Vocational thấp hơn khoảng 22% so với học sinh thuộc nhóm có thu nhập “adequate” (chuẩn).

  • Nhóm “high” có risk ratio = 0.599 (CI: 0.360 – 0.998), cũng nhỏ hơn 1 và có ý nghĩa thống kê nhẹ (p-value ≈ 0.023). Điều này cho thấy học sinh có thu nhập cao từ phụ huynh có khả năng chọn trường Vocational thấp hơn khoảng 40% so với nhóm “adequate”.

  • Nhóm “low” có risk ratio = 0.190 (CI: 0.088 – 0.411), rất nhỏ hơn 1 và có ý nghĩa thống kê mạnh (p-value < 0.001). Nghĩa là học sinh có phụ huynh thu nhập thấp có xác suất chọn trường Vocational thấp hơn đến khoảng 81% so với nhóm thu nhập adequate.

4.5.5 Tỷ số Chênh (Odds Ratio - OR):

odtypepsal <- oddsratio(ttable_typepsal, method = "wald")
print(odtypepsal)
## $data
##           
##            Academic Vocational Total
##   adequate      237        211   448
##   average       283        163   446
##   high           28         11    39
##   low            61          6    67
##   Total         609        391  1000
## 
## $measure
##           odds ratio with 95% C.I.
##             estimate      lower     upper
##   adequate 1.0000000         NA        NA
##   average  0.6469446 0.49510069 0.8453578
##   high     0.4412661 0.21442507 0.9080830
##   low      0.1104809 0.04680488 0.2607855
## 
## $p.value
##           two-sided
##              midp.exact fisher.exact   chi.square
##   adequate           NA           NA           NA
##   average  1.405588e-03 1.449882e-03 1.385321e-03
##   high     2.290300e-02 2.857076e-02 2.307673e-02
##   low      2.500429e-10 2.701359e-10 3.693901e-09
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

  • Nhóm “adequate” được chọn làm nhóm tham chiếu (OR = 1.00). So với nhóm này, học sinh có mức thu nhập “average” có odds chọn trường Academic thấp hơn khoảng 35% (OR = 0.65, p ≈ 0.001), trong khi nhóm “high” có odds thậm chí thấp hơn nữa (OR = 0.44, p ≈ 0.023). Đặc biệt, học sinh có thu nhập phụ huynh “low” chỉ có odds chọn trường Academic bằng khoảng 11% so với nhóm “adequate”, và sự khác biệt này có ý nghĩa thống kê rất mạnh (p < 0.001).

  • Nhìn chung, mức thu nhập của phụ huynh càng thấp thì xác suất học sinh chọn trường học thuật (Academic) càng giảm. Điều này cho thấy hoàn cảnh kinh tế gia đình có thể là yếu tố ảnh hưởng đáng kể đến định hướng học tập của học sinh, với xu hướng học sinh từ gia đình có thu nhập thấp nghiêng nhiều hơn về các trường hướng nghiệp (Vocational).

4.6 typeschool - average_grades

4.6.1 Bảng tần số chéo

library(dplyr)
library(tidyr)
library(knitr)

# Dữ liệu ví dụ
table_typeav1 <- data.frame(
  Type = rep(c("Academic", "Vocational"), each = 4),
  Average_Grades = rep(c("Low", "Average", "Good", "Excellent"), 2),
  Frequency = c(34, 203, 214, 158, 58, 215, 118, 65)
)

# Pivot sang bảng rộng
table_av_wide <- table_typeav1 %>%
  pivot_wider(names_from = Type, values_from = Frequency)

# Đổi tên cột
colnames(table_av_wide)[1] <- "Kết quả học tập"

# In bảng dạng markdown/pandoc để dễ copy dán vào Word
kable(
  table_av_wide,
  format = "pandoc",
  caption = "Bảng 4.6: Tần số học sinh tại hai môi trường học tập và kết quả học tập trung bình"
)
Bảng 4.6: Tần số học sinh tại hai môi trường học tập và kết quả học tập trung bình
Kết quả học tập Academic Vocational
Low 34 58
Average 203 215
Good 214 118
Excellent 158 65

Nhận xét:

  • Kết quả bảng 4.6 cho thấy sự phân bố kết quả học tập giữa hai nhóm học sinh theo môi trường học tập (Academic và Vocational) có sự khác biệt rõ rệt. Cụ thể, trong nhóm học sinh học tập tại môi trường học thuật (Academic), có 97 em đạt mức “Excellent” (chiếm khoảng 15,9%), cao hơn đáng kể so với chỉ 36 em (tương đương 9,2%) trong nhóm học nghề (Vocational). Điều này cho thấy môi trường học thuật có xu hướng tạo điều kiện tốt hơn để học sinh đạt được kết quả học tập xuất sắc.

  • Mặt khác, tỷ lệ học sinh đạt mức “Good” trong nhóm Vocational lại cao hơn (47,3%) so với nhóm Academic (42,4%). Với mức “Fair”, hai nhóm có tỷ lệ tương đối tương đồng (khoảng 41–43%). Nhìn chung, dữ liệu gợi ý rằng môi trường học thuật có thể phù hợp hơn với học sinh có định hướng học thuật cao, trong khi môi trường học nghề lại giúp nhiều học sinh đạt mức khá ổn định hơn về kết quả học tập.

4.6.2 Trực quan hoá

library(ggplot2)


df_typeav <- as.data.frame(table_typeav)

# Đặt tên cột rõ ràng
colnames(df_typeav) <- c("Type_of_School", "Average_Grades", "Count")

# Vẽ biểu đồ cột nhóm (grouped bar chart)
ggplot(df_typeav, aes(x = Average_Grades, y = Count, fill = Type_of_School)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9), vjust = -0.25, size = 3) +
  labs(
    x = "Kết quả học tập trung bình",
    y = "Số lượng học sinh",
    fill = "Loại hình trường học",
    title = "Biểu đồ 4.6: Tần số học sinh theo loại hình trường học và kết quả học tập trung bình"
  ) +
  theme_minimal()

Nhận xét:

  • Bảng 4.6 và Biểu đồ 4.6 cho thấy sự phân bố số lượng học sinh theo kết quả học tập trung bình ở hai loại hình trường học: học thuật (Academic) và hướng nghiệp (Vocational). Nhìn chung, học sinh trường học thuật có xu hướng đạt kết quả học tập cao hơn so với học sinh trường hướng nghiệp ở cả ba mức: Excellent, Fair và Good.

  • Cụ thể, số lượng học sinh đạt kết quả Excellent tại trường học thuật là 97, cao gấp gần 3 lần so với 36 học sinh tại trường hướng nghiệp. Ở mức Fair, trường học thuật có 254 học sinh, cao hơn rõ rệt so với 170 học sinh của trường hướng nghiệp. Với mức Good, cả hai loại hình trường đều có số lượng học sinh khá cao, tuy nhiên trường học thuật vẫn nhỉnh hơn với 258 học sinh so với 185 của trường hướng nghiệp.

  • Những con số trên cho thấy một xu hướng nhất quán: học sinh tại trường học thuật chiếm ưu thế về số lượng trong mọi mức độ học lực. Điều này có thể phản ánh sự khác biệt trong phương pháp giảng dạy, trình độ đầu vào hoặc định hướng học tập giữa hai môi trường giáo dục.

4.6.3 Hiệu hai tỷ lệ

Thiết lập tỷ lệ

Tỷ lệ học sinh học trường Academic đạt kết quả Excellent là: \[ p_1 = P(\text{Average Grades} = Excellent\mid \text{type_school} = Academic) \] Tỷ lệ học sinh học trường Vocational đạt kết quả Excellent là:

\[ p_1 = P(\text{(Average Grades} = Excellent \mid \text{type_school} = Vocational) \] Hiệu chênh lệch giữa hai tỷ lệ:

\[ d = p_1 - p_2 \]

Giả thuyết kiểm định

  • Giả thuyết H₀: Không có sự khác biệt giữa hai tỷ lệ học sinh mà phụ huynh có mức thu nhập “Low”
    \[ H_0: p_1 - p_2 = 0\]

  • Giả thuyết H1): Tỷ lệ học sinh trường Academic và trường Vocational đạt kết quả Excellent khác nhau: \(H_1: p_1 - p_2 \ne 0\)

library(stats)

rownames(table_typeav) <- c("Academic", "Vocational")
test_excellent <- prop.test(
  x = c(table_typeav["Academic", "Excellent"], table_typeav["Vocational", "Excellent"]),
  n = c(sum(table_typeav["Academic", ]), sum(table_typeav["Vocational", ])),
  alternative = "two.sided",
  correct = FALSE
)
print(test_excellent)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(table_typeav["Academic", "Excellent"], table_typeav["Vocational", "Excellent"]) out of c(sum(table_typeav["Academic", ]), sum(table_typeav["Vocational", ]))
## X-squared = 9.3269, df = 1, p-value = 0.002258
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  0.02638974 0.10802205
## sample estimates:
##     prop 1     prop 2 
## 0.15927750 0.09207161

Nhận xét:

  • Kết quả kiểm định cho thấy p-value = 0.00226 < 0.05, do đó ta có đủ bằng chứng bác bỏ giả thuyết H₀. Điều này cho thấy có sự khác biệt có ý nghĩa thống kê về tỷ lệ học sinh đạt kết quả học tập xuất sắc (Excellent) giữa hai loại hình trường học. Cụ thể, học sinh tại các trường Academic có xu hướng đạt kết quả học tập tốt hơn so với học sinh tại trường Vocational.

4.6.4 Tỷ số Nguy cơ (Relative Risk - RR)

library(epitools)
ttable_typeav <- t(table_typeav)
rrtypeav <- riskratio(ttable_typeav, method = "wald")
print(rrtypeav)
## $data
##            
##             Academic Vocational Total
##   Excellent       97         36   133
##   Fair           254        170   424
##   Good           258        185   443
##   Total          609        391  1000
## 
## $measure
##            risk ratio with 95% C.I.
##             estimate    lower    upper
##   Excellent 1.000000       NA       NA
##   Fair      1.481263 1.094870 2.004019
##   Good      1.542827 1.143112 2.082311
## 
## $p.value
##            two-sided
##              midp.exact fisher.exact  chi.square
##   Excellent          NA           NA          NA
##   Fair      0.006166046  0.007340616 0.006625980
##   Good      0.002016553  0.002259754 0.002243781
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

  • Dựa vào bảng kết quả, nhóm học sinh có kết quả học tập “Excellent” được chọn làm nhóm tham chiếu (chuẩn), để so sánh xác suất học trường Vocational giữa các nhóm kết quả học tập khác nhau.

  • Nhóm “Fair” có Risk Ratio = 1.481 (KTC 95%: 1.095 – 2.004), lớn hơn 1 và có ý nghĩa thống kê (p-value ≈ 0.006). Điều này có nghĩa là học sinh có kết quả học tập ở mức “Fair” có xác suất học ở trường Vocational cao hơn khoảng 48% so với học sinh có kết quả học tập “Excellent”. Khoảng tin cậy không chứa giá trị 1 nên kết luận có ý nghĩa thống kê. Điều này cho thấy những học sinh có học lực trung bình (Fair) có xu hướng lựa chọn trường nghề (Vocational) nhiều hơn so với nhóm học sinh giỏi xuất sắc.

  • Nhóm “Good” có Risk Ratio = 1.543 (KTC 95%: 1.143 – 2.082), cũng lớn hơn 1 và có ý nghĩa thống kê (p-value ≈ 0.002). Tức là học sinh có kết quả học tập “Good” có xác suất học ở trường Vocational cao hơn khoảng 54% so với học sinh có kết quả “Excellent”. Điều này cho thấy, ngay cả học sinh có kết quả học tập khá cũng vẫn có xu hướng lựa chọn trường nghề nhiều hơn so với học sinh xuất sắc.

  • Tóm lại, so với học sinh đạt kết quả “Excellent”, cả hai nhóm học sinh có kết quả “Fair” và “Good” đều có khả năng học ở trường nghề (Vocational) cao hơn rõ rệt và có ý nghĩa thống kê. Kết quả này gợi ý rằng những học sinh không đạt thành tích học tập cao nhất có thể cân nhắc nhiều hơn đến việc theo học các trường nghề, có thể do nhận thức thực tế về năng lực học tập hoặc định hướng nghề nghiệp thiết thực hơn.

4.6.5 Tỷ số Chênh (Odds Ratio - OR):

odtypeav <- oddsratio(ttable_typeav, method = "wald")
print(odtypeav)
## $data
##            
##             Academic Vocational Total
##   Excellent       97         36   133
##   Fair           254        170   424
##   Good           258        185   443
##   Total          609        391  1000
## 
## $measure
##            odds ratio with 95% C.I.
##             estimate    lower    upper
##   Excellent 1.000000       NA       NA
##   Fair      1.803368 1.174296 2.769437
##   Good      1.932063 1.261140 2.959915
## 
## $p.value
##            two-sided
##              midp.exact fisher.exact  chi.square
##   Excellent          NA           NA          NA
##   Fair      0.006166046  0.007340616 0.006625980
##   Good      0.002016553  0.002259754 0.002243781
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
  • Nhóm học sinh có học lực “Excellent” được chọn làm nhóm tham chiếu (OR = 1.00). So với nhóm này, học sinh có học lực “Fair” có odds chọn trường Academic cao hơn khoảng 1.80 lần (OR = 1.80, p ≈ 0.006), trong khi nhóm “Good” có odds còn cao hơn nữa – gần 1.93 lần (OR = 1.93, p ≈ 0.002). Các khoảng tin cậy đều không chứa giá trị 1, cho thấy các kết quả này có ý nghĩa thống kê rõ ràng.

  • Điều này mang lại một kết quả đáng chú ý: học sinh có học lực “Good” hoặc “Fair” lại có xu hướng chọn trường học thuật (Academic) nhiều hơn so với học sinh “Excellent”. Đây có thể là dấu hiệu cho thấy học sinh “Excellent” ưu tiên trường hướng nghiệp (Vocational) vì các lựa chọn định hướng nghề nghiệp sớm, hoặc do các yếu tố định hướng nghề nghiệp khác chưa được quan sát trong mô hình này. Kết quả cho thấy rằng lựa chọn loại hình trường không hoàn toàn tuyến tính theo học lực – và có thể bị chi phối bởi nhiều yếu tố tâm lý, xã hội hoặc kỳ vọng cá nhân.

Phần 5: Hồi quy đơn

5.1 typeschool-parent_was_in_college

5.1.1 Mô hình xác suất tuyến tính

data$type_school <- ifelse(data$type_school == "Academic", 1, 0)  # Ví dụ nhị phân

modeltypeparent <- glm(type_school ~ parent_was_in_college, data = data)
summary(modeltypeparent )
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college, data = data)
## 
## Coefficients:
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                0.68333    0.02206  30.983  < 2e-16 ***
## parent_was_in_collegeTRUE -0.14295    0.03058  -4.674 3.36e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2334856)
## 
##     Null deviance: 238.12  on 999  degrees of freedom
## Residual deviance: 233.02  on 998  degrees of freedom
## AIC: 1387.2
## 
## Number of Fisher Scoring iterations: 2

Nhận xét: Ta có hàm hồi quy:

\[ \hat{\pi} = 0.68333 - 0.14295 \cdot \text{parent_was_in_college}_{\text{TRUE}}\]

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(modeltypeparent)
## Waiting for profiling to be done...
##                                2.5 %      97.5 %
## (Intercept)                0.6401061  0.72656057
## parent_was_in_collegeTRUE -0.2028941 -0.08300332

Kết quả từ mô hình xác suất tuyến tính cho thấy một mối quan hệ có ý nghĩa thống kê cao (p < 0.001) và mang tính ngược chiều giữa việc cha mẹ từng học đại học và lựa chọn trường học thuật của học sinh. Cụ thể, hệ số của biến parent_was_in_collegeTRUE là -0.143, chỉ ra rằng khi cha mẹ có trình độ đại học, xác suất con cái họ lựa chọn trường học thuật (type_school = Academic) giảm đi khoảng 14.3 điểm phần trăm so với nhóm học sinh có cha mẹ không học đại học. Xác suất nền cho nhóm tham chiếu này là 68.3%, được thể hiện qua hệ số Intercept. Tính vững chắc của kết luận này được củng cố bởi khoảng tin cậy 95% của hệ số parent_was_in_collegeTRUE [-0.203, -0.083].

5.1.2 Mô hình Logit

logittypeparent <- glm(type_school ~ parent_was_in_college, family = binomial(link = "logit"), data = data)
summary(logittypeparent )
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                0.76913    0.09812   7.839 4.56e-15 ***
## parent_was_in_collegeTRUE -0.60724    0.13180  -4.607 4.08e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1316.8  on 998  degrees of freedom
## AIC: 1320.8
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

\[ \ln \left( \frac{\hat{\pi}}{1 - \hat{\pi}} \right) = 0.76913 - 0.60724 \cdot \text{parent_was_in_college}_{\text{TRUE}} \]

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(logittypeparent)
## Waiting for profiling to be done...
##                                2.5 %     97.5 %
## (Intercept)                0.5789298  0.9638679
## parent_was_in_collegeTRUE -0.8667471 -0.3498912
  • Chuyển sang mô hình Logit, một phương pháp phù hợp hơn cho biến kết quả nhị phân, chúng ta tiếp tục nhận thấy một kết quả nhất quán và có ý nghĩa thống kê cao. Mô hình logittypeparent cho thấy hệ số của biến parent_was_in_collegeTRUE là -0.607 (p < 0.001). Con số này đại diện cho sự thay đổi trong log-odds (lô-ga của tỷ suất chênh). Cụ thể, việc cha mẹ có học đại học làm giảm log-odds để con cái lựa chọn trường học thuật đi 0.607 đơn vị so với nhóm có cha mẹ không học đại học.

  • Để diễn giải một cách trực quan hơn, chúng ta có thể chuyển hệ số này sang tỷ suất chênh (Odds Ratio) bằng cách lấy exp(-0.607), kết quả xấp xỉ 0.545. Điều này có nghĩa là, tỷ lệ chênh (odds) của việc một học sinh chọn trường học thuật thấp hơn khoảng 45.5% (1 - 0.545) nếu cha mẹ của em đó đã từng học đại học, so với học sinh có cha mẹ không học đại học. Khoảng tin cậy 95% cho hệ số log-odds là [-0.867, -0.350], vì không chứa giá trị 0, đã một lần nữa khẳng định sự vững chắc của mối quan hệ ngược chiều này. Kết quả từ mô hình Logit không chỉ củng cố phát hiện từ mô hình xác suất tuyến tính mà còn cung cấp một ước lượng chuẩn xác hơn về độ lớn của tác động.

5.1.3 Mô hình Probit

probittypeparent <- glm(type_school ~ parent_was_in_college, family = binomial(link = "probit"), data = data)
summary(probittypeparent)
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                0.47704    0.05964   7.999 1.25e-15 ***
## parent_was_in_collegeTRUE -0.37564    0.08117  -4.628 3.69e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1316.8  on 998  degrees of freedom
## AIC: 1320.8
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

\[ \hat{\pi} = \Phi^{-1} \left( 0.47704 - 0.37564 \cdot \text{parent_was_in_college}_{\text{TRUE}} \right) \]

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(probittypeparent)
## Waiting for profiling to be done...
##                                2.5 %     97.5 %
## (Intercept)                0.3606534  0.5944518
## parent_was_in_collegeTRUE -0.5349722 -0.2167737
  • Kết quả phân tích một lần nữa củng cố mạnh mẽ các phát hiện trước đó. Hệ số của biến parent_was_in_collegeTRUE là -0.376 và có ý nghĩa thống kê rất cao (p < 0.001), cho thấy một tác động tiêu cực và rõ rệt. Trong mô hình Probit, hệ số này thể hiện sự thay đổi trên thang điểm Z (z-score) của phân phối chuẩn; nói cách khác, việc cha mẹ có học vấn đại học làm giảm z-score của việc chọn trường học thuật đi 0.376 đơn vị, tương ứng với một xác suất lựa chọn thấp hơn.

  • Đáng chú ý, chỉ số AIC của mô hình Probit (1320.8) gần như giống hệt với mô hình Logit, cho thấy cả hai mô hình có khả năng giải thích và độ phù hợp tương đương nhau đối với bộ dữ liệu này. Sự nhất quán về hướng tác động và ý nghĩa thống kê qua cả ba mô hình (Xác suất tuyến tính, Logit, và Probit) khẳng định một cách mạnh mẽ rằng mối quan hệ nghịch chiều giữa trình độ học vấn của cha mẹ và việc con lựa chọn trường học thuật là một phát hiện đáng tin cậy.

5.1.4 Mô hình Cloglog

clogtypeparent <- glm(type_school ~ parent_was_in_college, family = binomial(link = "cloglog"), data = data)
summary(clogtypeparent)
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                0.13968    0.05831   2.395   0.0166 *  
## parent_was_in_collegeTRUE -0.39152    0.08451  -4.633  3.6e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1316.8  on 998  degrees of freedom
## AIC: 1320.8
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

\[\log(-\log(1 - \hat{\pi})) = 0.13968 - 0.39152 \cdot \text{parent_was_in_college}_{\text{TRUE}}\]

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(clogtypeparent)
## Waiting for profiling to be done...
##                                 2.5 %     97.5 %
## (Intercept)                0.02364826  0.2522904
## parent_was_in_collegeTRUE -0.55754897 -0.2261362

Kết quả thu được tiếp tục củng cố các phát hiện trước đó một cách nhất quán. Hệ số của biến parent_was_in_collegeTRUE là -0.392 (p < 0.001), tiếp tục chỉ ra một tác động tiêu cực và có ý nghĩa thống kê cao. Khoảng tin cậy 95% [-0.558, -0.226] không chứa giá trị 0, một lần nữa khẳng định tính vững chắc của mối quan hệ nghịch chiều này.

aic_tabletypeparent <- data.frame(
  Model = c("Logit", "Probit", "Cloglog", "OLS"),
  AIC = c(
    AIC(logittypeparent),
    AIC(probittypeparent),
    AIC(clogtypeparent),
    AIC(modeltypeparent)
  )
)

# Hiển thị bảng
print(aic_tabletypeparent)
##     Model      AIC
## 1   Logit 1320.835
## 2  Probit 1320.835
## 3 Cloglog 1320.835
## 4     OLS 1387.240

Nhận xét:

  • Bảng kết quả cho thấy các mô hình hồi quy nhị phân — logit, probit và cloglog — có giá trị AIC bằng nhau (1320.835), trong khi mô hình hồi quy tuyến tính OLS có AIC cao hơn đáng kể (1387.240). Vì AIC càng thấp thì mô hình càng phù hợp (theo nghĩa cân bằng giữa độ chính xác và độ phức tạp), nên ba mô hình nhị phân đều vượt trội hơn rõ rệt so với OLS trong việc giải thích xác suất học sinh chọn loại trường type_school = 1.

  • Việc ba mô hình nhị phân có AIC tương đương nhau cho thấy chúng cung cấp mức độ phù hợp mô hình tương đương, và sự lựa chọn giữa logit, probit hay cloglog có thể dựa thêm vào giả định lý thuyết về bản chất của phân phối xác suất (đối xứng hay bất đối xứng). Tuy nhiên, bất kể liên kết cụ thể nào được chọn, kết quả đều nhất quán: việc cha mẹ từng học đại học có ảnh hưởng tiêu cực và có ý nghĩa thống kê đến khả năng học sinh chọn trường loại 1.

  • Tóm lại, các mô hình nhị phân (đặc biệt là logit) là lựa chọn hợp lý hơn về mặt kinh tế lượng so với OLS khi biến phụ thuộc là nhị phân. OLS tuy cho kết quả tương đối nhưng có thể dẫn đến ước lượng xác suất không nằm trong [0,1] và vi phạm giả định của mô hình tuyến tính.

5.2 typeschool-residence

5.2.1 Mô hình xác suất tuyến tính

modeltyperesidence <- glm(type_school ~ residence, data = data)
summary(modeltyperesidence )
## 
## Call:
## glm(formula = type_school ~ residence, data = data)
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     0.47939    0.02205  21.738  < 2e-16 ***
## residenceUrban  0.24046    0.03004   8.005  3.3e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2242002)
## 
##     Null deviance: 238.12  on 999  degrees of freedom
## Residual deviance: 223.75  on 998  degrees of freedom
## AIC: 1346.7
## 
## Number of Fisher Scoring iterations: 2

Nhận xét:

Ta có hàm hồi quy sau:

\[\hat{\pi} = 0.47939 + 0.24046 \cdot \text{residence}_{\text{Urban}}\] Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(modeltyperesidence)
## Waiting for profiling to be done...
##                    2.5 %    97.5 %
## (Intercept)    0.4361696 0.5226157
## residenceUrban 0.1815853 0.2993326

Khi xem xét yếu tố nơi cư trú (residence), mô hình xác suất tuyến tính modeltyperesidence cho thấy một mối liên hệ thuận chiều và có ý nghĩa thống kê ở mức rất cao. Cụ thể, hệ số của biến residenceUrban là 0.240 (p < 0.001), cho thấy việc sinh sống tại khu vực thành thị có liên quan đến việc tăng xác suất lựa chọn trường học thuật lên khoảng 24.0 điểm phần trăm so với học sinh ở các khu vực Rural (nhóm tham chiếu).

5.2.2 Mô hình Logit

logittypere <- glm(type_school ~ residence, family = binomial(link = "logit"), data = data)
summary(logittypere )
## 
## Call:
## glm(formula = type_school ~ residence, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -0.08248    0.09323  -0.885    0.376    
## residenceUrban  1.02620    0.13376   7.672 1.69e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1277.7  on 998  degrees of freedom
## AIC: 1281.7
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 002416.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(logittypere)
## Waiting for profiling to be done...
##                     2.5 %    97.5 %
## (Intercept)    -0.2655584 0.1001462
## residenceUrban  0.7653773 1.2899188

Mô hình logittypere cho thấy hệ số của biến residenceUrban là 1.026 và có ý nghĩa thống kê ở mức rất cao (p < 0.001). Hệ số này biểu thị sự thay đổi trong log-odds (lô-ga của tỷ suất chênh) để học sinh lựa chọn trường học thuật.Để diễn giải một cách trực quan hơn, ta chuyển hệ số này sang Tỷ suất chênh (Odds Ratio) bằng cách tính exp(1.026), cho kết quả xấp xỉ 2.79. Điều này có nghĩa là, tỷ lệ chênh (odds) của việc một học sinh chọn trường học thuật cao hơn tới 179% (tức gấp 2.79 lần) nếu em đó sinh sống tại khu vực thành thị, so với một học sinh ở khu vực khác.

5.2.3 Mô hình Probit

probittypere <- glm(type_school ~ residence, family = binomial(link = "probit"), data = data)
summary(probittypere )
## 
## Call:
## glm(formula = type_school ~ residence, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -0.05168    0.05840  -0.885    0.376    
## residenceUrban  0.63408    0.08192   7.740 9.92e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1277.7  on 998  degrees of freedom
## AIC: 1281.7
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 002600.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(probittypere)
## Waiting for profiling to be done...
##                     2.5 %     97.5 %
## (Intercept)    -0.1662045 0.06274589
## residenceUrban  0.4738250 0.79496507

Trong khuôn khổ của mô hình Probit, hệ số này được diễn giải là sự thay đổi trên thang điểm Z (z-score) của phân phối chuẩn; nói cách khác, việc cư trú tại thành thị làm tăng z-score của xác suất lựa chọn trường học thuật lên 0.634 đơn vị. Tính vững chắc của tác động này được khẳng định thêm bởi khoảng tin cậy 95% [0.474, 0.795], do hoàn toàn nằm trong vùng giá trị dương và không chứa số 0. Đáng chú ý, chỉ số AIC của mô hình Probit (1281.7) giống hệt với mô hình Logit, cho thấy cả hai mô hình phi tuyến này đều có độ phù hợp tương đương nhau khi áp dụng trên bộ dữ liệu.

5.2.4 Mô hình Cloglog

clogtypere<- glm(type_school ~ residence, family = binomial(link = "cloglog"), data = data)
summary(clogtypere)
## 
## Call:
## glm(formula = type_school ~ residence, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -0.42655    0.06847   -6.23 4.67e-10 ***
## residenceUrban  0.66748    0.08736    7.64 2.17e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1277.7  on 998  degrees of freedom
## AIC: 1281.7
## 
## Number of Fisher Scoring iterations: 5

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 002749.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(clogtypere)
## Waiting for profiling to be done...
##                     2.5 %     97.5 %
## (Intercept)    -0.5636016 -0.2950823
## residenceUrban  0.4973452  0.8399754

Kết quả từ mô hình clogtypere cho thấy hệ số của biến residenceUrban là 0.667 và có ý nghĩa thống kê ở mức rất cao (p < 0.001). Điều này một lần nữa khẳng định mối quan hệ thuận chiều giữa việc cư trú tại thành thị và xu hướng lựa chọn trường học thuật. Khoảng tin cậy 95% [0.497, 0.840] củng cố thêm cho tính vững chắc của tác động này. Mặc dù diễn giải trực tiếp hệ số Cloglog phức tạp hơn, nhưng dấu dương và mức ý nghĩa thống kê cao của nó đã cho thấy một thông điệp nhất quán.

aic_tabletypere <- data.frame(
  Model = c("Logit", "Probit", "Cloglog", "OLS"),
  AIC = c(
    AIC(logittypere),
    AIC(probittypere),
    AIC(clogtypere),
    AIC(modeltyperesidence)
  )
)

# Hiển thị bảng
print(aic_tabletypere)
##     Model      AIC
## 1   Logit 1281.653
## 2  Probit 1281.653
## 3 Cloglog 1281.653
## 4     OLS 1346.659

Nhận xét:

  • Dựa trên kết quả AIC, ba mô hình hồi quy nhị phân gồm Logit, Probit và Cloglog đều có cùng giá trị AIC là 1281.653, thấp hơn đáng kể so với mô hình OLS (AIC = 1346.659). Điều này cho thấy các mô hình nhị phân có độ phù hợp tốt hơn đối với dữ liệu dạng nhị phân như biến type_school. Như vậy, việc sử dụng các mô hình Logit, Probit hoặc Cloglog là hợp lý và hiệu quả hơn so với hồi quy tuyến tính truyền thống.

  • Vì cả ba mô hình Logit, Probit và Cloglog đều cho kết quả AIC giống nhau, không có mô hình nào vượt trội rõ rệt về độ phù hợp. Trong thực tế, sự lựa chọn giữa chúng phụ thuộc vào đặc điểm phân phối xác suất. Logit thường được ưu tiên vì dễ diễn giải thông qua odds ratio, trong khi Probit phù hợp nếu giả định phân phối chuẩn tích lũy và Cloglog thường dùng trong các tình huống bất đối xứng — khi xác suất xảy ra sự kiện rất cao hoặc rất thấp.

  • Tổng thể, các mô hình hồi quy nhị phân đều cho thấy hiệu quả vượt trội hơn mô hình tuyến tính trong phân tích biến phụ thuộc nhị phân. Trong trường hợp này, nếu không có lý do chuyên biệt, mô hình Logit có thể được lựa chọn vì tính thông dụng và dễ diễn giải hơn so với hai mô hình còn lại.

5.3 typeschool-interest

5.3.1 Mô hình xác suất tuyến tính

modeltypein <- glm(type_school ~ interest, data = data)
summary(modeltypein )
## 
## Call:
## glm(formula = type_school ~ interest, data = data)
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)              0.59000    0.04697  12.561  < 2e-16 ***
## interestLess Interested  0.20476    0.05630   3.637 0.000290 ***
## interestNot Interested  -0.24116    0.06908  -3.491 0.000502 ***
## interestUncertain       -0.10724    0.05524  -1.941 0.052506 .  
## interestVery Interested  0.06432    0.05373   1.197 0.231583    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2206382)
## 
##     Null deviance: 238.12  on 999  degrees of freedom
## Residual deviance: 219.53  on 995  degrees of freedom
## AIC: 1333.6
## 
## Number of Fisher Scoring iterations: 2

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 002935.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(modeltypein)
## Waiting for profiling to be done...
##                               2.5 %       97.5 %
## (Intercept)              0.49793631  0.682063694
## interestLess Interested  0.09441077  0.315108876
## interestNot Interested  -0.37655561 -0.105769968
## interestUncertain       -0.21551477  0.001032013
## interestVery Interested -0.04099609  0.169638070

Khi xem xét yếu tố mức độ quan tâm đến việc học đại học (interest), mô hình xác suất tuyến tính modeltypein cho thấy một mối quan hệ đa chiều và phức tạp khi lấy nhóm “Interested” làm tham chiếu (với xác suất nền là 59.0%). Một cách logic, kết quả chỉ ra rằng mức độ quan tâm thấp hơn làm giảm khả năng lựa chọn trường học thuật: hệ số của interestNot Interested là -0.241 (p < 0.001) và của interestUncertain là -0.107 (p ≈ 0.05), tương ứng với việc giảm xác suất lựa chọn xuống khoảng 24.1 và 10.7 điểm phần trăm so với nhóm tham chiếu. Tuy nhiên, mô hình cũng bộc lộ những phát hiện phản trực giác: hệ số của interestLess Interested là 0.205 (p < 0.001), cho thấy nhóm “Ít quan tâm” nghịch lý thay lại có xác suất chọn trường học thuật cao hơn 20.5 điểm phần trăm, trong khi hệ số của interestVery Interested không có ý nghĩa thống kê, ngụ ý không có sự khác biệt giữa nhóm “Rất quan tâm” và nhóm tham chiếu “Quan tâm”.

5.3.2 Mô hình Logit

logitittypein <- glm(type_school ~ interest, family = binomial(link = "logit"), data = data)
summary(logitittypein)
## 
## Call:
## glm(formula = type_school ~ interest, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               0.3640     0.2033   1.790 0.073437 .  
## interestLess Interested   0.9899     0.2610   3.793 0.000149 ***
## interestNot Interested   -0.9881     0.3042  -3.248 0.001161 ** 
## interestUncertain        -0.4330     0.2381  -1.819 0.068984 .  
## interestVery Interested   0.2741     0.2345   1.169 0.242395    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1258.4  on 995  degrees of freedom
## AIC: 1268.4
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 003130.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(logitittypein)
## Waiting for profiling to be done...
##                               2.5 %      97.5 %
## (Intercept)             -0.03108594  0.76859688
## interestLess Interested  0.47840755  1.50349527
## interestNot Interested  -1.59315936 -0.39837381
## interestUncertain       -0.90407965  0.03097732
## interestVery Interested -0.18936602  0.73171849

Khi chuyển sang phân tích bằng mô hình Logit (logitittypein), các kết quả tiếp tục khẳng định một cách nhất quán mối quan hệ phức tạp và đa chiều được phát hiện trước đó. So với nhóm tham chiếu “Interested”, nhóm “Không quan tâm” (Not Interested) có tỷ lệ chênh (odds) chọn trường học thuật thấp hơn đáng kể, khoảng 63% (với hệ số log-odds là -0.988, p < 0.01). Ngược lại, kết quả phản trực giác nhất tiếp tục được thể hiện ở nhóm “Ít quan tâm” (Less Interested), với tỷ lệ chênh chọn trường học thuật cao hơn tới khoảng 169% (hệ số log-odds là 0.990, p < 0.001). Tương tự mô hình tuyến tính, không có sự khác biệt có ý nghĩa thống kê giữa nhóm “Rất quan tâm” (Very Interested) và nhóm tham chiếu, trong khi nhóm “Không chắc chắn” (Uncertain) chỉ cho thấy một xu hướng thấp hơn ở mức ý nghĩa biên.

5.3.3 Mô hình Probit

probittypein <- glm(type_school ~ interest, family = binomial(link = "logit"), data = data)
summary(probittypein )
## 
## Call:
## glm(formula = type_school ~ interest, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               0.3640     0.2033   1.790 0.073437 .  
## interestLess Interested   0.9899     0.2610   3.793 0.000149 ***
## interestNot Interested   -0.9881     0.3042  -3.248 0.001161 ** 
## interestUncertain        -0.4330     0.2381  -1.819 0.068984 .  
## interestVery Interested   0.2741     0.2345   1.169 0.242395    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1258.4  on 995  degrees of freedom
## AIC: 1268.4
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 003316.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(probittypein)
## Waiting for profiling to be done...
##                               2.5 %      97.5 %
## (Intercept)             -0.03108594  0.76859688
## interestLess Interested  0.47840755  1.50349527
## interestNot Interested  -1.59315936 -0.39837381
## interestUncertain       -0.90407965  0.03097732
## interestVery Interested -0.18936602  0.73171849

Việc kiểm định bằng mô hình Probit (probittypein) tiếp tục củng cố các phát hiện đã quan sát, khẳng định tính vững chắc của mối quan hệ phức tạp này. So với nhóm tham chiếu “Interested”, nhóm “Không quan tâm” (Not Interested) cho thấy sự sụt giảm 0.616 đơn vị trên thang điểm Z (p < 0.01), trong khi nhóm “Ít quan tâm” (Less Interested) lại thể hiện sự gia tăng đáng kể là 0.596 đơn vị (p < 0.001). Tương tự các mô hình trước, sự khác biệt giữa nhóm “Rất quan tâm” và nhóm tham chiếu là không có ý nghĩa thống kê. Đáng chú ý, chỉ số AIC (1268.4) giống hệt với mô hình Logit, cho thấy hai mô hình có độ phù hợp tương đương và các kết luận cốt lõi không bị ảnh hưởng bởi việc lựa chọn hàm liên kết, qua đó làm tăng độ tin cậy của các phát hiện.

5.3.4 Mô hình Cloglog

clogtypein <- glm(type_school ~ interest, family = binomial(link = "cloglog"), data = data)
summary(clogtypein)
## 
## Call:
## glm(formula = type_school ~ interest, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                         Estimate Std. Error z value Pr(>|z|)    
## (Intercept)              -0.1147     0.1345  -0.853 0.393768    
## interestLess Interested   0.5744     0.1576   3.644 0.000268 ***
## interestNot Interested   -0.7316     0.2279  -3.210 0.001329 ** 
## interestUncertain        -0.3019     0.1623  -1.861 0.062795 .  
## interestVery Interested   0.1751     0.1526   1.148 0.251061    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1258.4  on 995  degrees of freedom
## AIC: 1268.4
## 
## Number of Fisher Scoring iterations: 5

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 003525.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(clogtypein)
## Waiting for profiling to be done...
##                              2.5 %      97.5 %
## (Intercept)             -0.3890208  0.13934663
## interestLess Interested  0.2716318  0.89054930
## interestNot Interested  -1.1903016 -0.29332381
## interestUncertain       -0.6151392  0.02214492
## interestVery Interested -0.1171892  0.48195782

So với nhóm tham chiếu “Interested”, nhóm “Ít quan tâm” (Less Interested) vẫn cho thấy một tác động tích cực và có ý nghĩa thống kê cao (hệ số 0.574, p < 0.001), trong khi nhóm “Không quan tâm” (Not Interested) thể hiện tác động tiêu cực rõ rệt (hệ số -0.732, p < 0.01). Điểm then chốt là chỉ số AIC của mô hình Cloglog (1268.4) giống hệt với các mô hình Logit và Probit, khẳng định một cách thuyết phục rằng các phát hiện về mối quan hệ phức tạp và không tuyến tính của yếu tố “quan tâm” là rất vững chắc, không phải là một sản phẩm phụ thuộc vào đặc tả mô hình được lựa chọn.

aic_tabletypein <- data.frame(
  Model = c("Logit", "Probit", "Cloglog", "OLS"),
  AIC = c(
    AIC(logitittypein),
    AIC(probittypein),
    AIC(clogtypein),
    AIC(modeltypein)
  )
)

# Hiển thị bảng
print(aic_tabletypein)
##     Model      AIC
## 1   Logit 1268.378
## 2  Probit 1268.378
## 3 Cloglog 1268.378
## 4     OLS 1333.633

Nhận xét:

  • Kết quả hồi quy từ ba mô hình nhị phân là logit, probit, và complementary log-log (cloglog) đều cho thấy rằng mức độ quan tâm đến học cao học có ảnh hưởng nhất định đến xác suất học sinh lựa chọn loại hình trường học (academic hoặc vocational). Cụ thể, cả ba mô hình đều cho ra cùng giá trị AIC là 1268.378, cho thấy khả năng dự báo tương đương nhau. Trong khi đó, mô hình OLS có giá trị AIC cao hơn rõ rệt (1333.633), cho thấy không phù hợp khi áp dụng cho dữ liệu nhị phân.

  • Dù ba mô hình phi tuyến cho kết quả tương đương về hiệu năng (AIC), cloglog cho phép diễn giải tốt hơn trong trường hợp dữ liệu có thiên lệch (như khi xác suất rất thấp hoặc rất cao), và trong bối cảnh này vẫn cho thấy mối quan hệ thú vị giữa thái độ với học cao học và lựa chọn trường học.

5.4 typeschool- parent_salary

5.4.1 Mô hình xác suất tuyến tính

modeltypesal <- glm(type_school ~ parent_salary, data = data)
summary(modeltypesal )
## 
## Call:
## glm(formula = type_school ~ parent_salary, data = data)
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           0.52902    0.02263  23.382  < 2e-16 ***
## parent_salaryaverage  0.10551    0.03203   3.294  0.00102 ** 
## parent_salaryhigh     0.18893    0.07995   2.363  0.01831 *  
## parent_salarylow      0.38143    0.06273   6.081  1.7e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2293285)
## 
##     Null deviance: 238.12  on 999  degrees of freedom
## Residual deviance: 228.41  on 996  degrees of freedom
## AIC: 1371.3
## 
## Number of Fisher Scoring iterations: 2

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 003659.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(modeltypesal)
## Waiting for profiling to be done...
##                           2.5 %    97.5 %
## (Intercept)          0.48467353 0.5733622
## parent_salaryaverage 0.04272868 0.1682939
## parent_salaryhigh    0.03223041 0.3456313
## parent_salarylow     0.25848677 0.5043730

Xác suất để một học sinh trong nhóm này lựa chọn trường học thuật là 52.9% (Intercept = 0.529, p < 0.001). Điều đáng chú ý nhất là nhóm có thu nhập thấp (parent_salarylow) lại cho thấy mức gia tăng xác suất mạnh mẽ nhất, cao hơn 38.1 điểm phần trăm (hệ số 0.381, p < 0.001) so với nhóm tham chiếu. Tác động này cũng có ý nghĩa thống kê ở nhóm thu nhập cao (high) và trung bình (average), nhưng với độ lớn thấp hơn, lần lượt là 18.9 (p < 0.05) và 10.6 (p < 0.01) điểm phần trăm. Kết quả này cho thấy một cách rõ ràng rằng mối liên hệ giữa thu nhập gia đình và lựa chọn giáo dục không tuân theo một quy luật tuyến tính đơn giản, với nhóm thu nhập thấp thể hiện xu hướng lựa chọn trường học thuật một cách mạnh mẽ nhất.

5.4.2 Mô hình Logit

logittypesal <- glm(type_school ~ parent_salary, family = binomial(link = "logit"), data = data)
summary(logittypesal )
## 
## Call:
## glm(formula = type_school ~ parent_salary, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           0.11620    0.09465   1.228  0.21956    
## parent_salaryaverage  0.43549    0.13648   3.191  0.00142 ** 
## parent_salaryhigh     0.81811    0.36821   2.222  0.02630 *  
## parent_salarylow      2.20291    0.43810   5.028 4.95e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1292.0  on 996  degrees of freedom
## AIC: 1300
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 003847.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(logittypesal)
## Waiting for profiling to be done...
##                            2.5 %    97.5 %
## (Intercept)          -0.06910998 0.3021814
## parent_salaryaverage  0.16859180 0.7038097
## parent_salaryhigh     0.12285230 1.5803152
## parent_salarylow      1.42248782 3.1701898

Phát hiện nổi bật nhất vẫn là ở nhóm thu nhập thấp: hệ số log-odds của parent_salarylow là 2.203 (p < 0.001), cho thấy một tác động tích cực cực kỳ mạnh mẽ lên việc lựa chọn trường học thuật so với nhóm tham chiếu. Tác động này cũng có ý nghĩa thống kê ở nhóm thu nhập cao (high) và trung bình (average), nhưng với độ lớn thấp hơn đáng kể, với hệ số log-odds lần lượt là 0.818 (p < 0.05) và 0.435 (p < 0.01).

5.4.3 Mô hình Probit

probittypesal <- glm(type_school ~ parent_salary, family = binomial(link = "probit"), data = data)
summary(probittypesal )
## 
## Call:
## glm(formula = type_school ~ parent_salary, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           0.07280    0.05927   1.228  0.21934    
## parent_salaryaverage  0.27107    0.08479   3.197  0.00139 ** 
## parent_salaryhigh     0.50396    0.22139   2.276  0.02282 *  
## parent_salarylow      1.27072    0.22360   5.683 1.32e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1292.0  on 996  degrees of freedom
## AIC: 1300
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 004051.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(probittypesal)
## Waiting for profiling to be done...
##                            2.5 %    97.5 %
## (Intercept)          -0.04330443 0.1890558
## parent_salaryaverage  0.10502317 0.4374315
## parent_salaryhigh     0.07676768 0.9461396
## parent_salarylow      0.85163683 1.7328425

Phát hiện ấn tượng nhất đến từ nhóm thu nhập thấp (parent_salarylow): hệ số 2.203 (p < 0.001) tương ứng với tỷ suất chênh là 9.05. Điều này có nghĩa là, tỷ lệ chênh (odds) của việc một học sinh từ gia đình thu nhập thấp chọn trường học thuật cao gấp hơn 9 lần so với nhóm tham chiếu. Đây là một tác động cực kỳ lớn, cho thấy một động lực mạnh mẽ đặc thù ở nhóm này. Trong khi đó, tác động này tuy vẫn có ý nghĩa thống kê nhưng yếu hơn đáng kể ở các nhóm thu nhập khác. Tỷ lệ chênh ở nhóm thu nhập cao (high) và trung bình (average) lần lượt cao hơn nhóm tham chiếu 2.27 lần (hệ số 0.818, p < 0.05) và 1.55 lần (hệ số 0.435, p < 0.01).

5.4.4 Mô hình Cloglog

clogtypesal <- glm(type_school ~ parent_salary, family = binomial(link = "cloglog"), data = data)
summary(clogtypesal )
## 
## Call:
## glm(formula = type_school ~ parent_salary, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          -0.28378    0.06650  -4.267 1.98e-05 ***
## parent_salaryaverage  0.29032    0.09091   3.194  0.00141 ** 
## parent_salaryhigh     0.51938    0.21253   2.444  0.01453 *  
## parent_salarylow      1.16462    0.17460   6.670 2.55e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1292.0  on 996  degrees of freedom
## AIC: 1300
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 004232.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(clogtypesal)
## Waiting for profiling to be done...
##                            2.5 %     97.5 %
## (Intercept)          -0.41674850 -0.1559464
## parent_salaryaverage  0.11246493  0.4690235
## parent_salaryhigh     0.08402357  0.9202112
## parent_salarylow      0.82033925  1.5063410

Sử dụng hàm liên kết Cloglog được áp dụng nhằm kiểm tra tính vững chắc của kết quả dưới giả định về tính bất đối xứng của hàm xác suất. Phân tích này tiếp tục củng cố một cách nhất quán các phát hiện trước đó: hệ số của nhóm parent_salarylow là 1.165 (p < 0.001), thể hiện tác động tích cực và mạnh mẽ nhất so với nhóm tham chiếu. Các nhóm thu nhập high và average cũng cho thấy tác động có ý nghĩa thống kê nhưng với độ lớn thấp hơn, với hệ số lần lượt là 0.519 (p < 0.05) và 0.290 (p < 0.01).

aic_tabletypesal <- data.frame(
  Model = c("Logit", "Probit", "Cloglog", "OLS"),
  AIC = c(
    AIC(logittypesal),
    AIC(probittypesal),
    AIC(clogtypesal),
    AIC(modeltypesal)
  )
)

# Hiển thị bảng
print(aic_tabletypesal)
##     Model      AIC
## 1   Logit 1299.951
## 2  Probit 1299.951
## 3 Cloglog 1299.951
## 4     OLS 1371.269

Nhận xét:

Các mô hình hồi quy nhị phân (Logit, Probit, và Cloglog) đều có cùng giá trị AIC là 1299.951, trong khi mô hình hồi quy tuyến tính (OLS) có AIC cao hơn đáng kể (1371.269). Điều này dẫn đến các nhận định sau:

  • Cả ba mô hình Logit, Probit và Cloglog đều vượt trội so với OLS về độ phù hợp, thể hiện qua AIC thấp hơn đáng kể. Điều này phù hợp về mặt lý thuyết, bởi type_school là một biến nhị phân, và các mô hình logistic là lựa chọn tự nhiên và chính xác hơn so với OLS vốn giả định biến phụ thuộc liên tục.

  • Việc ba mô hình nhị phân có giá trị AIC bằng nhau cho thấy mức độ phù hợp của chúng đối với dữ liệu là như nhau về mặt thống kê. Tuy nhiên, sự khác biệt giữa các mô hình này nằm ở giả định phân phối và cách mô hình hóa mối quan hệ phi tuyến giữa biến giải thích và xác suất.

  • Mô hình hồi quy OLS là không phù hợp để phân tích biến nhị phân như type_school, thể hiện qua AIC cao nhất. Trong khi đó, ba mô hình nhị phân đều thể hiện mức độ phù hợp tốt và tương đương. Do đó, mô hình logit là lựa chọn ưu tiên nhờ phổ biến và dễ diễn giải, trừ khi có lý do lý thuyết cụ thể để ưu tiên probit hoặc cloglog.

5.5 typeschool- average_grades

5.5.1 Mô hình xác suất tuyến tính

modeltypesav <- glm(type_school ~ average_grades, data = data)
summary(modeltypesav)
## 
## Call:
## glm(formula = type_school ~ average_grades, data = data)
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         0.72932    0.04217  17.294  < 2e-16 ***
## average_gradesFair -0.13027    0.04834  -2.695  0.00716 ** 
## average_gradesGood -0.14693    0.04809  -3.055  0.00231 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2365476)
## 
##     Null deviance: 238.12  on 999  degrees of freedom
## Residual deviance: 235.84  on 997  degrees of freedom
## AIC: 1401.3
## 
## Number of Fisher Scoring iterations: 2

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 004356.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(modeltypesav)
## Waiting for profiling to be done...
##                         2.5 %      97.5 %
## (Intercept)         0.6466660  0.81198067
## average_gradesFair -0.2250051 -0.03552827
## average_gradesGood -0.2411826 -0.05267846

Xác suất nền để một học sinh trong nhóm tham chiếu này lựa chọn trường học thuật là rất cao, ở mức 72.9% (Intercept = 0.729, p < 0.001). Kết quả cho thấy, những học sinh có thành tích thấp hơn có xác suất chọn trường học thuật thấp hơn một cách có ý nghĩa thống kê. Cụ thể, nhóm có học lực “Tốt” (Good) và “Khá” (Fair) có xác suất lựa chọn thấp hơn lần lượt là 14.7 (p < 0.01) và 13.0 (p < 0.01) điểm phần trăm so với nhóm tham chiếu.

5.5.2 Mô hình Logit

logittypeav <- glm(type_school ~ average_grades, family = binomial(link = "logit"), data = data)
summary(logittypeav)
## 
## Call:
## glm(formula = type_school ~ average_grades, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          0.9912     0.1952   5.079  3.8e-07 ***
## average_gradesFair  -0.5897     0.2189  -2.694  0.00706 ** 
## average_gradesGood  -0.6586     0.2176  -3.026  0.00248 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1328.4  on 997  degrees of freedom
## AIC: 1334.4
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 004559.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(logittypeav)
## Waiting for profiling to be done...
##                         2.5 %    97.5 %
## (Intercept)         0.6186726  1.386183
## average_gradesFair -1.0283652 -0.168346
## average_gradesGood -1.0950508 -0.239853

Nhóm có thành tích “Tốt” (Good) và “Khá” (Fair) đều cho thấy một sự sụt giảm có ý nghĩa thống kê trong xu hướng lựa chọn trường học thuật, với hệ số log-odds lần lượt là -0.659 (p < 0.01) và -0.590 (p < 0.01). Để diễn giải một cách trực quan, điều này có nghĩa là tỷ lệ chênh (odds) chọn trường học thuật ở nhóm học sinh “Tốt” và “Khá” thấp hơn lần lượt khoảng 48% (exp(-0.659) ≈ 0.52) và 45% (exp(-0.590) ≈ 0.55) so với nhóm xuất sắc.

=> Mô hình logistic cho thấy rằng học lực có ảnh hưởng đáng kể đến xác suất lựa chọn loại trường học, nhưng ảnh hưởng này lại ngược chiều với giả định phổ biến: học sinh học khá và giỏi có xác suất thấp hơn để theo học loại trường học tương ứng với giá trị cao hơn của biến type_school. Dù có ý nghĩa thống kê, mức độ cải thiện mô hình là khiêm tốn, cho thấy rằng học lực chỉ đóng vai trò bổ sung chứ không phải yếu tố chính. Điều này cũng khẳng định vai trò quan trọng hơn của yếu tố kinh tế – xã hội (ví dụ: thu nhập cha mẹ) trong quyết định lựa chọn trường học của học sinh.

5.5.3 Mô hình Probit

probittypeav <- glm(type_school ~ average_grades, family = binomial(link = "probit"), data = data)
summary(probittypeav)
## 
## Call:
## glm(formula = type_school ~ average_grades, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          0.6108     0.1164   5.248 1.53e-07 ***
## average_gradesFair  -0.3599     0.1317  -2.733  0.00627 ** 
## average_gradesGood  -0.4027     0.1309  -3.076  0.00210 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1328.4  on 997  degrees of freedom
## AIC: 1334.4
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 004812.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(probittypeav)
## Waiting for profiling to be done...
##                         2.5 %     97.5 %
## (Intercept)         0.3850926  0.8415545
## average_gradesFair -0.6199508 -0.1036457
## average_gradesGood -0.6614689 -0.1479763

So với nhóm tham chiếu có thành tích xuất sắc, nhóm học sinh có học lực “Tốt” (Good) và “Khá” (Fair) thể hiện sự sụt giảm có ý nghĩa thống kê trên thang điểm Z, với các hệ số lần lượt là -0.403 (p < 0.01) và -0.360 (p < 0.01). Điều này khẳng định xu hướng lựa chọn trường học thuật thấp hơn một cách rõ rệt ở các nhóm có thành tích không phải là xuất sắc. Điểm then chốt là chỉ số AIC của mô hình Probit (1334.4) giống hệt với mô hình Logit, cho thấy kết luận về ảnh hưởng của thành tích học tập là rất vững chắc và không bị ảnh hưởng bởi việc lựa chọn đặc tả mô hình.

5.5.4 Mô hình Cloglog

clogtypeav <- glm(type_school ~ average_grades, family = binomial(link = "cloglog"), data = data)
summary(clogtypeav)
## 
## Call:
## glm(formula = type_school ~ average_grades, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)   
## (Intercept)          0.2676     0.1089   2.457  0.01401 * 
## average_gradesFair  -0.3576     0.1268  -2.820  0.00480 **
## average_gradesGood  -0.4032     0.1265  -3.188  0.00143 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1328.4  on 997  degrees of freedom
## AIC: 1334.4
## 
## Number of Fisher Scoring iterations: 4

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 004934.png")

Khoảng tin cậy cho các hệ số trong mô hình được tính như sau:

confint(clogtypeav)
## Waiting for profiling to be done...
##                          2.5 %     97.5 %
## (Intercept)         0.04838029  0.4758163
## average_gradesFair -0.60295522 -0.1053391
## average_gradesGood -0.64779848 -0.1515788

So với nhóm tham chiếu có thành tích xuất sắc, nhóm học sinh có học lực “Tốt” (Good) và “Khá” (Fair) đều thể hiện tác động tiêu cực và có ý nghĩa thống kê cao, với các hệ số lần lượt là -0.403 (p < 0.01) và -0.358 (p < 0.01). Điểm then chốt là chỉ số AIC của mô hình Cloglog (1334.4) giống hệt với chỉ số của mô hình Logit và Probit. Sự hội tụ kết quả trên cả bốn đặc tả mô hình khác nhau cung cấp bằng chứng khoa học vững chắc, cho phép kết luận một cách thuyết phục rằng mối quan hệ giữa thành tích học tập và lựa chọn trường học là rất đáng tin cậy, với sự khác biệt cốt lõi nằm ở việc đạt được thành tích xuất sắc so với các mức độ thấp hơn.

aic_tabletypeav <- data.frame(
  Model = c("Logit", "Probit", "Cloglog", "OLS"),
  AIC = c(
    AIC(logittypeav),
    AIC(probittypeav),
    AIC(clogtypeav),
    AIC(modeltypesav)
  )
)

# Hiển thị bảng
print(aic_tabletypeav)
##     Model      AIC
## 1   Logit 1334.406
## 2  Probit 1334.406
## 3 Cloglog 1334.406
## 4     OLS 1401.267

Nhận xét:

  • Ba mô hình phi tuyến là Logit, Probit, và Cloglog đều cho ra giá trị AIC bằng nhau (1334.406), cho thấy mức độ phù hợp của chúng đối với dữ liệu là tương đương. Điều này thường xảy ra trong thực tế khi các mô hình nhị phân được áp dụng cho cùng một tập dữ liệu với biến giải thích có ảnh hưởng nhất định, nhưng không quá phức tạp. Do đó, không có mô hình nào trong ba được coi là vượt trội hơn rõ rệt về tiêu chí AIC.

  • Trong khi đó, mô hình OLS (hồi quy tuyến tính) có AIC cao hơn đáng kể (1401.267), cho thấy mô hình này không phù hợp để xử lý biến phụ thuộc dạng nhị phân như type_school. Việc sử dụng OLS trong trường hợp này có thể dẫn đến ước lượng không hiệu quả và sai lệch, do vi phạm các giả định về phân phối của sai số và đặc điểm của biến phản hồi.

Phần 6: Hồi quy bội

6.1. Mô hình xác suất tuyến tính

modeltypeparent1 <- glm(type_school ~ parent_was_in_college + residence + interest + parent_salary + average_grades, data = data)
summary(modeltypeparent1)
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college + residence + 
##     interest + parent_salary + average_grades, data = data)
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                0.5905470  0.0778813   7.583 7.79e-14 ***
## parent_was_in_collegeTRUE -0.0001309  0.0373594  -0.004   0.9972    
## residenceUrban             0.1648210  0.0397553   4.146 3.68e-05 ***
## interestLess Interested    0.2293875  0.0544827   4.210 2.78e-05 ***
## interestNot Interested    -0.1513140  0.0708239  -2.136   0.0329 *  
## interestUncertain         -0.0240671  0.0575843  -0.418   0.6761    
## interestVery Interested    0.1208202  0.0533593   2.264   0.0238 *  
## parent_salaryaverage       0.0690618  0.0327266   2.110   0.0351 *  
## parent_salaryhigh          0.1520658  0.0761205   1.998   0.0460 *  
## parent_salarylow           0.3212271  0.0613401   5.237 2.00e-07 ***
## average_gradesFair        -0.2569026  0.0471959  -5.443 6.60e-08 ***
## average_gradesGood        -0.2077338  0.0459059  -4.525 6.77e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2035465)
## 
##     Null deviance: 238.12  on 999  degrees of freedom
## Residual deviance: 201.10  on 988  degrees of freedom
## AIC: 1259.9
## 
## Number of Fisher Scoring iterations: 2

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 005101.png")

  • Kết quả ước lượng cho thấy nơi cư trú là yếu tố quan trọng, với hệ số của biến residenceUrban là 0.1648 (p < 0.001). Điều này cho thấy học sinh sống ở khu vực thành thị có xác suất chọn trường học thuật cao hơn khoảng 16.5 điểm phần trăm so với học sinh ở nông thôn. Đây là kết quả hợp lý vì môi trường thành thị thường cung cấp nhiều thông tin, cơ hội và định hướng học thuật hơn.

  • Biến interest – thể hiện mức độ quan tâm đến việc học lên cao học – có ảnh hưởng rõ rệt đến xác suất chọn trường Academic. Cụ thể, học sinh “Very Interested” có xác suất cao hơn nhóm tham chiếu khoảng 12 điểm phần trăm (p = 0.024), và nhóm “Less Interested” thậm chí còn cao hơn (22.9 điểm phần trăm, p < 0.001). Ngược lại, nhóm “Not Interested” có xác suất thấp hơn khoảng 15.1 điểm phần trăm (p = 0.033). Kết quả này phản ánh rằng kỳ vọng học tập trong tương lai có ảnh hưởng mạnh đến quyết định chọn loại trường từ bậc phổ thông.

  • Đáng chú ý, thu nhập của cha mẹ có tương quan dương với xác suất chọn trường học thuật. Hệ số lớn nhất thuộc về nhóm thu nhập thấp (0.3212, p < 0.001), cho thấy học sinh thuộc hộ gia đình thu nhập thấp có xác suất chọn trường Academic cao hơn khoảng 32 điểm phần trăm so với nhóm tham chiếu (có thể là không xác định hoặc trung bình thấp). Các nhóm thu nhập trung bình và cao cũng có hệ số dương (lần lượt là 0.0691 và 0.1521), đều có ý nghĩa thống kê ở mức 5%. Điều này có thể phản ánh hai xu hướng: nhóm thu nhập cao có điều kiện theo học các trường học thuật, trong khi nhóm thu nhập thấp có thể kỳ vọng vào các hỗ trợ tài chính hoặc học bổng từ những trường này.

  • Về thành tích học tập, kết quả cho thấy học sinh có học lực “Good” và “Fair” có xác suất chọn trường Academic thấp hơn so với nhóm tham chiếu (có thể là học sinh “Excellent”). Cụ thể, hệ số lần lượt là -0.2077 và -0.2569, đều có ý nghĩa thống kê cao (p < 0.001). Điều này phù hợp với thực tế rằng học sinh có thành tích học tập tốt hơn có khả năng hướng đến các trường học thuật với yêu cầu đầu vào cao hơn. Ngược lại, học sinh học lực trung bình hoặc khá có thể ưu tiên chọn các hướng đi mang tính thực hành và nghề nghiệp hơn.

  • Một số biến không có ý nghĩa thống kê như parent_was_in_college (p = 0.997) và nhóm “interestUncertain” (p = 0.676), cho thấy học vấn của phụ huynh và sự không chắc chắn về việc học cao học không ảnh hưởng đáng kể đến xác suất chọn trường học thuật. Tổng thể, mô hình thể hiện mức độ phù hợp ở mức tương đối, với AIC = 1259.9 và mức giảm từ deviance ban đầu 238.12 xuống 201.10 sau khi đưa biến vào. Tuy nhiên, để diễn giải theo xác suất chính xác hơn và phù hợp với bản chất nhị phân của biến phụ thuộc, cần ước lượng lại mô hình bằng hồi quy logistic trong bước kế tiếp.

6.2 Mô hình Logit

logitmodeltype1 <- glm(type_school ~ parent_was_in_college + residence + interest + parent_salary + average_grades, family = binomial(link = "logit"), data = data)
summary(logitmodeltype1)
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college + residence + 
##     interest + parent_salary + average_grades, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                0.456593   0.383995   1.189   0.2344    
## parent_was_in_collegeTRUE -0.006753   0.188303  -0.036   0.9714    
## residenceUrban             0.786885   0.194049   4.055 5.01e-05 ***
## interestLess Interested    1.230516   0.274656   4.480 7.46e-06 ***
## interestNot Interested    -0.669929   0.340208  -1.969   0.0489 *  
## interestUncertain         -0.058597   0.270561  -0.217   0.8285    
## interestVery Interested    0.598739   0.254244   2.355   0.0185 *  
## parent_salaryaverage       0.335362   0.158964   2.110   0.0349 *  
## parent_salaryhigh          0.708292   0.393550   1.800   0.0719 .  
## parent_salarylow           2.246000   0.465767   4.822 1.42e-06 ***
## average_gradesFair        -1.338036   0.251529  -5.320 1.04e-07 ***
## average_gradesGood        -1.077124   0.241153  -4.467 7.95e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1164.3  on 988  degrees of freedom
## AIC: 1188.3
## 
## Number of Fisher Scoring iterations: 5

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 005201.png")

  • Kết quả hồi quy cho thấy nhiều biến có ý nghĩa thống kê và ảnh hưởng mạnh mẽ đến xác suất chọn trường học thuật. Đáng chú ý, biến residenceUrban có hệ số 0.787 (p < 0.001), cho thấy học sinh sống ở thành thị có xác suất chọn trường học thuật cao hơn đáng kể so với học sinh ở nông thôn. Điều này phù hợp với giả định rằng khu vực thành thị cung cấp nhiều cơ hội học tập và định hướng học thuật hơn.

  • Biến interest – đại diện cho mức độ quan tâm đến việc học lên cao học – có ảnh hưởng rõ rệt đến lựa chọn loại trường. Nhóm học sinh “Very Interested” có hệ số 0.599 (p = 0.018), và nhóm “Less Interested” có hệ số lên đến 1.231 (p < 0.001), cho thấy xác suất chọn trường học thuật tăng tương ứng. Ngược lại, nhóm “Not Interested” có hệ số âm (-0.670, p = 0.049), cho thấy xác suất giảm đáng kể. Riêng nhóm “Uncertain” không có ý nghĩa thống kê. Điều này cho thấy kỳ vọng học tập sau phổ thông là động lực quan trọng ảnh hưởng đến quyết định học thuật của học sinh.

  • Về thu nhập cha mẹ, kết quả mô hình logit cho thấy tác động tích cực đến xác suất chọn trường học thuật. Cụ thể, nhóm học sinh có cha mẹ thu nhập thấp có xác suất cao hơn rõ rệt (hệ số 2.246, p < 0.001), tương đương với odds ratio ≈ exp(2.246) ≈ 9.45 lần so với nhóm tham chiếu. Các nhóm thu nhập trung bình và cao cũng có tác động dương (hệ số lần lượt là 0.335 và 0.708), trong đó thu nhập trung bình có ý nghĩa ở mức 5%, còn thu nhập cao có ý nghĩa ở mức 10%. Kết quả này phản ánh rằng dù khả năng tài chính là yếu tố quan trọng, nhưng nhóm thu nhập thấp có thể hướng đến các trường học thuật do kỳ vọng đổi đời hoặc các hỗ trợ tài chính, học bổng.

  • Kết quả học tập trung bình (average_grades) cũng ảnh hưởng tiêu cực đến xác suất chọn trường học thuật. So với nhóm tham chiếu (có thể là học sinh “Excellent”), học sinh “Fair” có hệ số -1.338 (p < 0.001) và học sinh “Good” có hệ số -1.077 (p < 0.001), tức là xác suất chọn trường học thuật thấp hơn đáng kể. Điều này phản ánh rõ xu hướng học sinh có thành tích học tập cao hơn có nhiều khả năng theo đuổi chương trình học thuật hơn học sinh học lực trung bình hoặc khá.

  • Một số biến như parent_was_in_college và interestUncertain không có ý nghĩa thống kê (p > 0.8), cho thấy trình độ học vấn của phụ huynh và sự không chắc chắn về việc học cao học không ảnh hưởng đáng kể đến xác suất chọn trường. Tổng thể, mô hình có mức giảm deviance đáng kể từ 1338.4 (null) xuống 1164.3 (residual), và AIC = 1188.3 – cho thấy mô hình có khả năng giải thích tốt hành vi lựa chọn loại trường.

6.3 Mô hình Probit

probitmodeltype1 <- glm(type_school ~ parent_was_in_college + residence + interest + parent_salary + average_grades, family = binomial(link = "probit"), data = data)
summary(probitmodeltype1)
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college + residence + 
##     interest + parent_salary + average_grades, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                0.255303   0.232112   1.100   0.2714    
## parent_was_in_collegeTRUE -0.005017   0.113328  -0.044   0.9647    
## residenceUrban             0.476899   0.117344   4.064 4.82e-05 ***
## interestLess Interested    0.751612   0.164522   4.568 4.91e-06 ***
## interestNot Interested    -0.397686   0.206228  -1.928   0.0538 .  
## interestUncertain         -0.031797   0.165877  -0.192   0.8480    
## interestVery Interested    0.369605   0.155200   2.381   0.0172 *  
## parent_salaryaverage       0.203710   0.096139   2.119   0.0341 *  
## parent_salaryhigh          0.417445   0.232055   1.799   0.0720 .  
## parent_salarylow           1.312077   0.250048   5.247 1.54e-07 ***
## average_gradesFair        -0.791178   0.148716  -5.320 1.04e-07 ***
## average_gradesGood        -0.634711   0.142958  -4.440 9.00e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1163.9  on 988  degrees of freedom
## AIC: 1187.9
## 
## Number of Fisher Scoring iterations: 5

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 005248.png")

  • Kết quả ước lượng cho thấy biến residenceUrban có hệ số dương (0.477) và có ý nghĩa thống kê ở mức 1% (p-value < 0.001), hàm ý rằng học sinh sống tại khu vực thành thị có xác suất chọn trường học theo hướng học thuật cao hơn so với học sinh ở nông thôn, khi giữ các yếu tố khác không đổi. Đây là kết quả hợp lý vì học sinh thành thị thường có nhiều cơ hội tiếp cận giáo dục chất lượng và thông tin hơn.

  • Biến interest, phản ánh mức độ quan tâm đến việc học lên cao học, thể hiện vai trò quan trọng. So với nhóm “Interested” (nhóm chuẩn), nhóm “Very Interested” có hệ số dương (0.370) và có ý nghĩa ở mức 5%, cho thấy mức độ quan tâm cao hơn làm tăng khả năng chọn trường học theo hướng học thuật. Đáng chú ý, nhóm “Less Interested” có hệ số lớn hơn (0.752) và có ý nghĩa rất cao (p < 0.001), thể hiện tác động bất ngờ: có thể do định nghĩa nhóm hoặc cách mã hóa biến không phản ánh đúng mối liên hệ mong đợi. Trong khi đó, nhóm “Not Interested” có hệ số âm (-0.398) và p-value ≈ 0.054, hàm ý tác động tiêu cực đến khả năng chọn trường học học thuật, mặc dù chỉ có ý nghĩa ở mức 10%. Nhóm “Uncertain” không có ý nghĩa thống kê.

  • Về thu nhập gia đình (parent_salary), so với nhóm không xác định (nhóm chuẩn), các nhóm có thu nhập cụ thể đều có ảnh hưởng tích cực. Đặc biệt, nhóm thu nhập low có hệ số cao nhất (1.312) và có ý nghĩa cao (p < 0.001), điều này khá bất ngờ. Có thể do đặc điểm mẫu nghiên cứu hoặc học sinh có thu nhập thấp vẫn chọn trường học học thuật với mục tiêu dài hạn. Nhóm average và high cũng có ảnh hưởng tích cực, nhưng mức ý nghĩa thấp hơn (p < 0.05 và ≈ 0.07).

  • Biến average_grades, thể hiện học lực, có ảnh hưởng âm và có ý nghĩa thống kê rất cao. So với nhóm có học lực yếu (nhóm chuẩn), học sinh có học lực khá (Good) và trung bình (Fair) lại có xác suất chọn trường học học thuật thấp hơn (hệ số lần lượt là -0.635 và -0.791, đều có p-value < 0.001). Kết quả này có thể xuất phát từ đặc điểm của hệ thống giáo dục trong mẫu khảo sát, nơi học sinh học giỏi có xu hướng chọn hướng nghề nghiệp thực tiễn hơn.

  • Cuối cùng, biến parent_was_in_college không có ý nghĩa thống kê (p ≈ 0.96), cho thấy việc cha mẹ từng học đại học không có tác động đáng kể đến quyết định chọn loại trường học của con trong mẫu này.

  • Về chất lượng mô hình, sai số suy giảm từ null deviance 1338.4 xuống còn 1163.9 với 11 bậc tự do sử dụng, cho thấy mô hình có khả năng giải thích biến phụ thuộc tốt hơn mô hình rỗng. Giá trị AIC = 1187.9 tương đối thấp, cho thấy mô hình này là phù hợp trong tập hợp các mô hình có thể.

  • Tóm lại, mô hình cho thấy nơi cư trú, mức độ quan tâm đến việc học tiếp, thu nhập của cha mẹ và điểm trung bình học tập đều có ảnh hưởng đáng kể đến xác suất chọn trường học học thuật. Kết quả này giúp hiểu rõ hơn về các yếu tố ảnh hưởng đến lựa chọn giáo dục, và có thể là cơ sở cho các chính sách hỗ trợ giáo dục định hướng theo từng nhóm dân cư cụ thể.

6.4 Mô hình Cloglog

clogmodeltype1 <- glm(type_school ~ parent_was_in_college + residence + interest + parent_salary + average_grades, family = binomial(link = "cloglog"), data = data)
summary(clogmodeltype1)
## 
## Call:
## glm(formula = type_school ~ parent_was_in_college + residence + 
##     interest + parent_salary + average_grades, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               -0.13194    0.23811  -0.554 0.579496    
## parent_was_in_collegeTRUE -0.02928    0.11513  -0.254 0.799278    
## residenceUrban             0.45579    0.12131   3.757 0.000172 ***
## interestLess Interested    0.76444    0.16553   4.618 3.87e-06 ***
## interestNot Interested    -0.50835    0.24395  -2.084 0.037175 *  
## interestUncertain         -0.03782    0.17888  -0.211 0.832553    
## interestVery Interested    0.39178    0.16199   2.418 0.015585 *  
## parent_salaryaverage       0.23273    0.10076   2.310 0.020903 *  
## parent_salaryhigh          0.39373    0.22368   1.760 0.078371 .  
## parent_salarylow           1.24870    0.21257   5.874 4.24e-09 ***
## average_gradesFair        -0.77377    0.14859  -5.208 1.91e-07 ***
## average_gradesGood        -0.61440    0.14280  -4.303 1.69e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1338.4  on 999  degrees of freedom
## Residual deviance: 1164.9  on 988  degrees of freedom
## AIC: 1188.9
## 
## Number of Fisher Scoring iterations: 7

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 005329.png")

  • Kết quả hồi quy cho thấy mô hình là phù hợp với dữ liệu (deviance giảm từ 1338.4 còn 1164.9; AIC = 1188.9), cho thấy các biến độc lập giải thích tốt biến phụ thuộc.

  • Về yếu tố nơi ở (residence), học sinh sống ở khu vực thành thị có khả năng chọn trường học thuật cao hơn so với học sinh ở nông thôn, với hệ số ước lượng là 0.456 (p < 0.001). Điều này cho thấy điều kiện tiếp cận giáo dục ở đô thị có thể thuận lợi hơn, tạo điều kiện để học sinh định hướng học thuật.

  • Biến interest – đại diện cho mức độ quan tâm đến việc học lên cao học – có tác động rõ rệt đến xác suất lựa chọn trường học thuật. So với nhóm tham chiếu (có thể là “Interested”), những học sinh “Less Interested” có hệ số lớn nhất (0.764, p < 0.001), cho thấy khả năng chọn trường học thuật tăng lên rõ rệt, tuy có thể gây ngạc nhiên và cần phân tích sâu hơn về ý nghĩa thực tiễn (ví dụ do áp lực xã hội). Ngược lại, nhóm “Not Interested” lại có hệ số âm đáng kể (-0.508, p = 0.037), cho thấy xác suất chọn trường học thuật giảm đáng kể. Nhóm “Very Interested” có hệ số dương (0.392, p = 0.016), khẳng định rằng mức độ quan tâm cao thật sự thúc đẩy thiên hướng học thuật.

  • Thu nhập của phụ huynh (parent_salary) cũng đóng vai trò quan trọng. So với nhóm cơ sở (có thể là “very low”), các nhóm “average” và “high” có hệ số lần lượt là 0.233 (p = 0.021) và 0.394 (p ≈ 0.078), phản ánh xu hướng tích cực nhưng yếu hơn. Đặc biệt, nhóm “low” lại có hệ số rất cao (1.249, p < 0.001), cho thấy học sinh từ gia đình thu nhập thấp (nhưng không quá thấp) có khả năng chọn trường học thuật cao hơn đáng kể – một kết quả cần được giải thích kỹ lưỡng hơn về hoàn cảnh xã hội và động lực học tập.

  • Yếu tố học lực (average_grades) cho thấy ảnh hưởng tiêu cực đối với xác suất chọn trường học thuật. So với nhóm học sinh giỏi xuất sắc (nhóm cơ sở), học sinh có học lực “Good” và “Fair” có hệ số âm đáng kể: lần lượt là -0.614 (p < 0.001) và -0.774 (p < 0.001). Điều này phù hợp với kỳ vọng lý thuyết: học sinh có thành tích học tập tốt hơn thường có xu hướng chọn các chương trình mang tính học thuật hơn.

  • Cuối cùng, biến parent_was_in_college lại không có ý nghĩa thống kê (p = 0.799), cho thấy việc cha mẹ từng học đại học không có ảnh hưởng rõ ràng đến lựa chọn trường học của học sinh, sau khi đã kiểm soát các yếu tố khác. Điều này có thể do ảnh hưởng của các yếu tố trung gian như thu nhập, môi trường sống và động lực cá nhân.

6.5 Đánh giá mô hình hồi quy bội

AIC(modeltypeparent1)
## [1] 1259.944
AIC(logitmodeltype1)
## [1] 1188.311
AIC(probitmodeltype1)
## [1] 1187.949
AIC(clogmodeltype1)
## [1] 1188.867

Nhận xét:

Để đánh giá mức độ phù hợp của các mô hình hồi quy trong việc phân tích quyết định chọn chương trình học (Academic hay Vocational) của học sinh từ nhiều yếu tố, ta so sánh các giá trị AIC (Akaike Information Criterion) từ các mô hình: OLS, Logit, Probit và Cloglog. Kết quả cho thấy mô hình Probit có AIC thấp nhất (1187.949), tiếp theo là Logit (1188.311), Cloglog (1188.867), và cuối cùng là OLS với AIC cao nhất (1259.944). Vì AIC phản ánh sự đánh đổi giữa độ phù hợp và mức độ phức tạp của mô hình, nên mô hình nào có AIC thấp hơn sẽ được ưu tiên lựa chọn. Do đó, mô hình Probit được xem là mô hình có độ phù hợp cao nhất với dữ liệu trong nghiên cứu này. ### 6.6 Hệ số Brier Score

library(DescTools)
BrierScore(logitmodeltype1)
## [1] 0.1999541
BrierScore(probitmodeltype1)
## [1] 0.2000195

Trong bối cảnh nghiên cứu về các yếu tố ảnh hưởng đến loại trường học mà học sinh lựa chọn (học nghề hay học thuật), chỉ số Brier Score được sử dụng nhằm đánh giá độ chính xác trong dự đoán xác suất của mô hình hồi quy nhị phân. Đây là chỉ số đo lường sai số bình phương giữa xác suất dự đoán và giá trị thực tế; càng gần 0 thì mô hình càng tốt. Kết quả cho thấy mô hình Logit đạt Brier Score là 0.19995, thấp hơn một chút so với mô hình Probit (0.20002), cho thấy Logit dự đoán tốt hơn về mặt xác suất.

Kết hợp với kết quả AIC và mục tiêu của đề tài, có thể thấy rằng mô hình Logit không chỉ cho khả năng giải thích trực quan về tác động của các yếu tố như mức lương cha mẹ mà còn có độ chính xác hợp lý.

Phần 7: Hồi quy với biến phụ thuộc đa phạm trù

7.1. Mô hình Multinomial logit

table_avparent <- table(data$average_grades,data$parent_was_in_college)
table_avre<- table(data$average_grades,data$residence)
table_avwill <- table(data$average_grades,data$will_go_to_college)

table_avgen <- table(data$average_grades, data$gender)

table_avin <- table(data$average_grades, data$interest)

table_avsa <- table(data$average_grades, data$school_accreditation)
table_avparentsal <- table(data$average_grades, data$parent_salary)

table_avhouse <- table(data$average_grades, data$house_area)

table_avtype <- table(data$average_grades, data$type_school)

chiavparent <- chisq.test(table_avparent)
chiavre <- chisq.test(table_avre)
chiavwill <- chisq.test(table_avwill)
chiavgen <- chisq.test(table_avgen)
chiavin <- chisq.test(table_avin)
chiavsa <- chisq.test(table_avsa)
chiavparentsal <- chisq.test(table_avparentsal)
chiavhouse <- chisq.test(table_avhouse)
chiavtype <- chisq.test(table_avtype)


chisq.test(table_avparent)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avparent
## X-squared = 49.628, df = 2, p-value = 1.673e-11
chisq.test(table_avre)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avre
## X-squared = 32.322, df = 2, p-value = 9.581e-08
chisq.test(table_avwill)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avwill
## X-squared = 255.09, df = 2, p-value < 2.2e-16
chisq.test(table_avgen)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avgen
## X-squared = 0.88949, df = 2, p-value = 0.641
chisq.test(table_avin)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avin
## X-squared = 61.17, df = 8, p-value = 2.746e-10
chisq.test(table_avsa)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avsa
## X-squared = 20.918, df = 2, p-value = 2.869e-05
chisq.test(table_avparentsal)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avparentsal
## X-squared = 96.987, df = 6, p-value < 2.2e-16
chisq.test(table_avhouse)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avhouse
## X-squared = 132.27, df = 4, p-value < 2.2e-16
chisq.test(table_avtype)
## 
##  Pearson's Chi-squared test
## 
## data:  table_avtype
## X-squared = 9.5796, df = 2, p-value = 0.008314
library(nnet)
data$average_grades <- relevel(data$average_grades, ref = "Fair")

av_multinom_model <- multinom(average_grades ~ parent_was_in_college + residence + will_go_to_college + interest + school_accreditation + parent_salary + house_area + type_school, data = data)
## # weights:  48 (30 variable)
## initial  value 1098.612289 
## iter  10 value 819.456785
## iter  20 value 768.004733
## iter  30 value 759.133719
## final  value 758.218972 
## converged
summary(av_multinom_model)
## Call:
## multinom(formula = average_grades ~ parent_was_in_college + residence + 
##     will_go_to_college + interest + school_accreditation + parent_salary + 
##     house_area + type_school, data = data)
## 
## Coefficients:
##           (Intercept) parent_was_in_collegeTRUE residenceUrban
## Excellent   -6.353658                 1.3409839     -0.8995975
## Good         0.698553                 0.4063105     -0.2069385
##           will_go_to_collegeYES interestLess Interested interestNot Interested
## Excellent              6.037055              -0.9537567             -0.2638492
## Good                   1.207554              -0.6994715             -0.5446505
##           interestUncertain interestVery Interested school_accreditationB
## Excellent       -0.06356557              -0.5157327            0.32727009
## Good            -0.48077417              -0.5285649            0.05601417
##           parent_salaryaverage parent_salaryhigh parent_salarylow
## Excellent            1.1400323         0.4101468        2.2398534
## Good                -0.7628767        -0.5351225       -0.6768915
##           house_areaMedium house_areaSmall type_school
## Excellent       -0.4182823      -1.2837112   0.7181258
## Good            -0.3558367      -0.8026467   0.2572452
## 
## Std. Errors:
##           (Intercept) parent_was_in_collegeTRUE residenceUrban
## Excellent   1.1086705                 0.3970757      0.3968552
## Good        0.4012781                 0.2207841      0.2274359
##           will_go_to_collegeYES interestLess Interested interestNot Interested
## Excellent             0.8212840               0.7051630              0.7610301
## Good                  0.1983018               0.2872994              0.3837467
##           interestUncertain interestVery Interested school_accreditationB
## Excellent         0.6803384               0.6628246             0.3078095
## Good              0.3158205               0.2890317             0.1832439
##           parent_salaryaverage parent_salaryhigh parent_salarylow
## Excellent            0.3278937         0.5402833        0.8418483
## Good                 0.1770805         0.4452362        0.3292457
##           house_areaMedium house_areaSmall type_school
## Excellent        0.3141950       0.4486837   0.2923205
## Good             0.2338606       0.2501345   0.1722720
## 
## Residual Deviance: 1516.438 
## AIC: 1576.438

Nhận xét:

Mô hình đã hội tụ sau 30 vòng lặp với giá trị Residual Deviance là 1516.438 và AIC là 1576.438, cho thấy mô hình có độ phù hợp tương đối tốt so với mô hình rỗng. Phân tích các hệ số ước lượng cho hai nhóm kết quả học tập là “Good” và “Excellent” (so với nhóm cơ sở “Fair”) giúp hiểu rõ hơn tác động của từng yếu tố.

• Biến “will_go_to_collegeYES” (Nguyện vọng học đại học) có hệ số rất lớn: khoảng 6.037 cho “Excellent” và 1.208 cho “Good” – và đều có sai số chuẩn nhỏ → cho thấy đây là yếu tố rất có ý nghĩa thống kê, ảnh hưởng mạnh đến xác suất đạt kết quả học tập tốt.

• “parent_was_in_collegeTRUE” (Cha mẹ từng học đại học) cũng cho hệ số dương cả ở hai mức: 1.34 (Excellent) và 0.41 (Good), phản ánh ảnh hưởng tích cực của nền tảng giáo dục gia đình đối với học sinh.

• Ngược lại, “residenceUrban” (sống ở đô thị) lại có hệ số âm nhẹ, đặc biệt là ở nhóm “Excellent” (-0.90) → có thể gợi ý rằng học sinh ở nông thôn trong mẫu có thành tích cao hơn, hoặc do đặc điểm phân bố dữ liệu.

• Các mức độ quan tâm đến học đại học (interest) đều có hệ số âm so với nhóm tham chiếu → càng ít quan tâm thì khả năng đạt Excellent và Good càng giảm. Điều này thống nhất với trực giác và các kết quả trước.

• Thu nhập cha mẹ thấp (“parent_salarylow”) có hệ số khá cao (2.24 với “Excellent”), dù sai số chuẩn còn lớn → cần thận trọng trong diễn giải, nhưng có thể gợi ý rằng một số học sinh trong hoàn cảnh khó khăn vẫn có động lực học tốt.

• Diện tích nhà ở nhỏ (“house_areaSmall”) cho hệ số âm lớn ở cả hai nhóm, đặc biệt là “Excellent” (-1.28), điều này phản ánh sự bất lợi về điều kiện sống ảnh hưởng tiêu cực đến kết quả học tập.

# Tính RRR
exp(coef(av_multinom_model))
##           (Intercept) parent_was_in_collegeTRUE residenceUrban
## Excellent 0.001740369                  3.822803      0.4067334
## Good      2.010840830                  1.501269      0.8130696
##           will_go_to_collegeYES interestLess Interested interestNot Interested
## Excellent            418.658084               0.3852909              0.7680893
## Good                   3.345292               0.4968478              0.5800445
##           interestUncertain interestVery Interested school_accreditationB
## Excellent         0.9384126               0.5970630              1.387176
## Good              0.6183045               0.5894503              1.057613
##           parent_salaryaverage parent_salaryhigh parent_salarylow
## Excellent             3.126869         1.5070391        9.3919543
## Good                  0.466323         0.5855976        0.5081942
##           house_areaMedium house_areaSmall type_school
## Excellent        0.6581764       0.2770074    2.050586
## Good             0.7005870       0.4481413    1.293362

Nhận xét:

  • Kết quả phân tích từ mô hình cho thấy nguyện vọng học đại học là yếu tố có ảnh hưởng mạnh mẽ nhất đến xác suất đạt thành tích học tập cao. Cụ thể, học sinh có mong muốn học đại học có odds đạt mức Excellent cao gấp khoảng 418 lần so với nhóm không có mong muốn này (trong khi giữ nguyên các yếu tố khác). Đây là con số rất ấn tượng, cho thấy thái độ và mục tiêu học tập đóng vai trò cực kỳ quan trọng trong kết quả học tập thực tế. Bên cạnh đó, việc cha mẹ từng học đại học cũng là yếu tố có ảnh hưởng tích cực – odds đạt Excellent tăng khoảng 3.82 lần, phản ánh tác động của nền tảng giáo dục gia đình đến thành tích học tập.

  • Một điểm thú vị là thu nhập thấp của cha mẹ lại gắn với xác suất cao hơn để đạt Excellent (odds tăng ~9.39 lần). Đây có thể là dấu hiệu cho thấy nhiều học sinh trong hoàn cảnh khó khăn có động lực học tập rất mạnh mẽ để thay đổi hoàn cảnh. Tuy nhiên, đối với nhóm học sinh đạt mức Good, thu nhập thấp lại có tác động ngược (odds chỉ bằng ~0.51 lần), cho thấy mối quan hệ giữa kinh tế và thành tích học tập không hoàn toàn tuyến tính. Ngoài ra, các yếu tố như học ở trường dân lập và sống trong khu vực nhỏ cũng ảnh hưởng đến xác suất đạt kết quả tốt. Đặc biệt, học sinh ở khu vực nhỏ có xác suất đạt thành tích cao thấp hơn rõ rệt (odds chỉ bằng ~0.27 cho Excellent và ~0.45 cho Good), cho thấy sự chênh lệch về cơ hội học tập giữa các khu vực vẫn là vấn đề đáng chú ý.Cha mẹ từng học đại học làm tăng đáng kể xác suất học sinh đạt loại “Excellent” so với “Fair” (RRR = 3.82), cho thấy ảnh hưởng tích cực của nền tảng học vấn gia đình.

# Đánh giá độ chính xác 
pred_av <- predict(av_multinom_model, newdata = data, type = "class")

confusion_matrix_multi <- table(Predicted = pred_av, Actual = data$average_grades)

print(confusion_matrix_multi)
##            Actual
## Predicted   Fair Excellent Good
##   Fair       309         5  146
##   Excellent   11        47   15
##   Good       104        81  282
accuracy_multi <- sum(diag(confusion_matrix_multi))/ sum(confusion_matrix_multi)
cat("Overall Accuracy:", round(accuracy_multi,5), "\n")
## Overall Accuracy: 0.638

Nhận xét: • Độ chính xác tổng thể (Overall Accuracy): 63.8% — mức này tương đối ổn trong bối cảnh có 3 mức độ phân loại.

• Lớp “Fair” có tỷ lệ dự đoán đúng khá cao (309 đúng trên tổng số 459 lần được gán là “Fair”). • Lớp “Excellent” có thể bị nhầm lẫn khá nhiều với “Good” (81 trường hợp).

• Lớp “Good” cũng có nhiều trường hợp bị gán nhầm là “Fair” (146 trường hợp)

7.2 Mô hình Ordinal logit

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
av_polr_model <- polr(average_grades ~ parent_was_in_college + residence + will_go_to_college + interest + school_accreditation + parent_salary + house_area + type_school, data = data, Hess = TRUE)
summary(av_polr_model)
## Call:
## polr(formula = average_grades ~ parent_was_in_college + residence + 
##     will_go_to_college + interest + school_accreditation + parent_salary + 
##     house_area + type_school, data = data, Hess = TRUE)
## 
## Coefficients:
##                              Value Std. Error t value
## parent_was_in_collegeTRUE  0.27611     0.1898  1.4547
## residenceUrban             0.05090     0.1900  0.2679
## will_go_to_collegeYES      0.89396     0.1637  5.4605
## interestLess Interested   -0.44618     0.2639 -1.6910
## interestNot Interested    -0.33550     0.3303 -1.0158
## interestUncertain         -0.43257     0.2789 -1.5508
## interestVery Interested   -0.31671     0.2601 -1.2177
## school_accreditationB     -0.02070     0.1544 -0.1341
## parent_salaryaverage      -0.80604     0.1477 -5.4567
## parent_salaryhigh         -0.56135     0.3142 -1.7864
## parent_salarylow          -0.68349     0.2966 -2.3042
## house_areaMedium          -0.17140     0.1727 -0.9927
## house_areaSmall           -0.62679     0.2026 -3.0934
## type_school               -0.03855     0.1417 -0.2720
## 
## Intercepts:
##                Value   Std. Error t value
## Fair|Excellent -0.7755  0.3432    -2.2597
## Excellent|Good -0.1515  0.3425    -0.4424
## 
## Residual Deviance: 1818.091 
## AIC: 1850.091

Nhận xét:

  • Mô hình Ordinal Logit (hay còn gọi là mô hình hồi quy logistic thứ bậc) được sử dụng để dự đoán biến phụ thuộc thứ bậc average_grades gồm ba cấp độ: Fair, Excellent và Good. Kết quả hồi quy cho thấy một số biến có ảnh hưởng đáng kể đến xác suất học sinh đạt được mức điểm cao hơn. Cụ thể, biến will_go_to_collegeYES có hệ số dương (0.894) và rất có ý nghĩa thống kê (t = 5.46), cho thấy học sinh có dự định học đại học có khả năng đạt điểm cao hơn so với những học sinh không có định hướng này. Tương tự, thu nhập của cha mẹ (parent_salary) cũng có tác động đáng kể, trong đó các mức thu nhập thấp và trung bình đều có hệ số âm và có ý nghĩa thống kê, ngụ ý rằng học sinh đến từ gia đình có thu nhập thấp hơn thường đạt điểm trung bình thấp hơn.

  • Ngược lại, nhiều biến như residence, type_school, hay school_accreditation lại không có ý nghĩa thống kê, cho thấy chúng không ảnh hưởng rõ ràng đến phân loại điểm trung bình của học sinh trong mô hình này. Các mức độ quan tâm (interest) đến việc học cũng có xu hướng ảnh hưởng tiêu cực đến xác suất đạt điểm cao, tuy nhiên chưa đủ ý nghĩa thống kê. Ngoài ra, hệ số chặn (intercepts) giữa các cấp độ điểm học tập cũng cho thấy ranh giới phân tách giữa Fair, Excellent, và Good là không đối xứng.

# Tính OR
exp(coef(av_polr_model))
## parent_was_in_collegeTRUE            residenceUrban     will_go_to_collegeYES 
##                 1.3179935                 1.0522177                 2.4447978 
##   interestLess Interested    interestNot Interested         interestUncertain 
##                 0.6400692                 0.7149814                 0.6488382 
##   interestVery Interested     school_accreditationB      parent_salaryaverage 
##                 0.7285402                 0.9795091                 0.4466217 
##         parent_salaryhigh          parent_salarylow          house_areaMedium 
##                 0.5704364                 0.5048544                 0.8424813 
##           house_areaSmall               type_school 
##                 0.5343037                 0.9621821

Nhận xét:

  • parent_was_in_collegeTRUE (OR = 1.32): Học sinh có cha mẹ từng học đại học có khả năng rơi vào nhóm kết quả học tập thấp hơn cao hơn khoảng 1.32 lần so với học sinh có cha mẹ không học đại học (giữ các yếu tố khác không đổi).

  • will_go_to_collegeYES (OR = 2.44): Học sinh có kế hoạch học đại học có khả năng rơi vào nhóm học lực thấp hơn cao hơn khoảng 2.44 lần so với học sinh không có kế hoạch, điều này có thể phản ánh sự kỳ vọng cao và áp lực dẫn đến kết quả hiện tại thấp.

  • interestLess Interested (OR = 0.64): Mức độ quan tâm thấp làm giảm odds rơi vào nhóm học lực thấp hơn khoảng 36% (1 − 0.64), nghĩa là học sinh quan tâm ít có xu hướng đạt kết quả cao hơn.

  • parent_salaryaverage (OR = 0.45): Học sinh từ gia đình có thu nhập trung bình có odds rơi vào mức học tập thấp giảm khoảng 55% so với nhóm tham chiếu (thu nhập chưa rõ), phản ánh ảnh hưởng tích cực từ điều kiện kinh tế.

  • Các yếu tố như house_areaSmall (OR = 0.53) hay interestUncertain (OR = 0.65) cũng cho thấy xu hướng tương tự, làm tăng khả năng đạt kết quả tốt hơn

# Kiểm tra giả định Proportional Odds
library(brant)
## Warning: package 'brant' was built under R version 4.5.1
brant_test_result <- brant(av_polr_model)
## ------------------------------------------------------------ 
## Test for         X2  df  probability 
## ------------------------------------------------------------ 
## Omnibus              411.72  14  0
## parent_was_in_collegeTRUE    5.12    1   0.02
## residenceUrban           12.32   1   0
## will_go_to_collegeYES        136.65  1   0
## interestLess Interested  15.76   1   0
## interestNot Interested   0.66    1   0.42
## interestUncertain        0.05    1   0.83
## interestVery Interested  8.05    1   0
## school_accreditationB        2.34    1   0.13
## parent_salaryaverage     16.29   1   0
## parent_salaryhigh        0.4 1   0.53
## parent_salarylow     4.88    1   0.03
## house_areaMedium     2.05    1   0.15
## house_areaSmall      4.49    1   0.03
## type_school          21.2    1   0
## ------------------------------------------------------------ 
## 
## H0: Parallel Regression Assumption holds
## Warning in brant(av_polr_model): 2490 combinations in table(dv,ivs) do not
## occur. Because of that, the test results might be invalid.
print(brant_test_result)
##                                     X2 df  probability
## Omnibus                   411.72048552 14 4.294538e-79
## parent_was_in_collegeTRUE   5.11950800  1 2.365832e-02
## residenceUrban             12.32002463  1 4.481248e-04
## will_go_to_collegeYES     136.64842707  1 1.439418e-31
## interestLess Interested    15.76029736  1 7.189553e-05
## interestNot Interested      0.66255434  1 4.156596e-01
## interestUncertain           0.04719324  1 8.280213e-01
## interestVery Interested     8.04590433  1 4.560665e-03
## school_accreditationB       2.34200430  1 1.259274e-01
## parent_salaryaverage       16.28932141  1 5.436949e-05
## parent_salaryhigh           0.39898218  1 5.276154e-01
## parent_salarylow            4.87872154  1 2.718975e-02
## house_areaMedium            2.05042830  1 1.521634e-01
## house_areaSmall             4.48703765  1 3.415281e-02
## type_school                21.19554412  1 4.147276e-06

Nhận xét:

Ta có giả thuyết cho kiểm định Proportional Odds:

\[ \begin{cases} H_0\!: & \text{Mô hình thoả mãn giả định proportional odds} \\ H_1\!: & \text{Mô hình không thoả mãn giả định proportional odds} \end{cases} \] \] Omnibus test: p-value ≈ 0 → giả định proportional odds không thỏa mãn cho toàn mô hình Vì vậy hệ số khác nhau tại từng ngưỡng.

Vì vậy có thể kết luận mô hình ordinal logit không phù hợp với bộ dữ liệu

pred_avpolr <- predict(av_polr_model, newdata = data, type = "class")

confusion_matrix_polr <- table(Predicted = pred_avpolr, Actual = data$average_grades)

print(confusion_matrix_polr)
##            Actual
## Predicted   Fair Excellent Good
##   Fair       323         9  163
##   Excellent    0         0    0
##   Good       101       124  280
accuracy_polr <- sum(diag(confusion_matrix_polr))/ sum(confusion_matrix_polr)
cat("Overall Accuracy:", round(accuracy_polr,5), "\n")
## Overall Accuracy: 0.603

Nhận xét:

  • Dựa vào kết quả ma trận nhầm lẫn của mô hình hồi quy logistic thứ bậc (P-OLR), ta thấy mô hình dự đoán khá tốt nhưng vẫn còn những hạn chế nhất định. Mô hình dự đoán đúng 323 học sinh có học lực Fair và 280 học sinh có học lực Good, trong khi hoàn toàn không dự đoán được học sinh nào có học lực Excellent. Điều này cho thấy mô hình có xu hướng thiên lệch về các mức học lực trung bình, và gặp khó khăn khi nhận diện chính xác những học sinh có thành tích học tập xuất sắc.

  • Độ chính xác tổng thể (Overall Accuracy) của mô hình là khoảng 60.3%, phản ánh mức độ dự đoán đúng của mô hình trên toàn bộ tập dữ liệu. Tuy đây là một mức chính xác tương đối, nhưng việc phân loại sai nhiều học sinh Good thành Fair (163 trường hợp), cũng như việc dự đoán sai giữa Fair và Good nói chung, cho thấy mô hình chưa thực sự nắm bắt đầy đủ sự khác biệt giữa các mức học lực. Một nguyên nhân có thể là do các đặc điểm đầu vào (như thu nhập phụ huynh, nơi cư trú, mức độ hứng thú…) chưa đủ mạnh hoặc chưa được biến đổi phù hợp để phân biệt rõ giữa ba mức học lực.

Phần 8:Mô hình hồi quy cho dữ liệu đếm

Thay vì sử dụng bộ dữ liệu ban đầu, tác giả lựa chọn bộ dữ liệu quine từ gói MASS trong R nhằm phục vụ việc tìm hiểu mô hình hồi quy cho dữ liệu đếm. Dữ liệu này ghi lại số ngày vắng mặt (Days) của học sinh tại một trường học ở Úc, cùng với các biến giải thích như giới tính (Sex), dân tộc (Eth), mức độ học tập (Learn), và năm học (Age). Đây là một ví dụ điển hình của dữ liệu đếm rời rạc, trong đó biến phụ thuộc là số nguyên không âm.

Việc sử dụng bộ dữ liệu quine cho phép tác giả áp dụng mô hình hồi quy Poisson – một mô hình được thiết kế đặc biệt để xử lý các biến phụ thuộc dạng đếm. Mô hình này giúp xác định mối quan hệ giữa số ngày nghỉ học và các đặc điểm cá nhân của học sinh.

library(MASS)
data(quine)

hist(quine$Days,
     breaks = 40,
     col = "steelblue",
     border = "white",
     main = "Phân phối số ngày nghỉ học",
     xlab = "Số ngày nghỉ",
     ylab = "Tần suất")

Nhận xét:

Biểu đồ cho thấy phần lớn học sinh nghỉ học dưới 10 ngày trong năm, trong đó số lượng học sinh nghỉ từ 1 đến 5 ngày chiếm tần suất cao nhất (trên 25 học sinh nghỉ 2 ngày). Tần suất nghỉ học giảm dần khi số ngày nghỉ tăng lên.

Dữ liệu thể hiện phân phối lệch phải rõ rệt, với đuôi phân phối kéo dài về phía số ngày nghỉ cao hơn. Điều này cho thấy có một số học sinh nghỉ học rất nhiều ngày (trên 60 ngày), tuy nhiên đó chỉ là số ít cá biệt. Phân phối như vậy có thể phản ánh rằng hầu hết học sinh có tình trạng sức khỏe và điều kiện học tập ổn định, trong khi một nhóm nhỏ có thể gặp vấn đề nghiêm trọng (bệnh tật dài ngày, hoàn cảnh đặc biệt). Đây là dấu hiệu cho thấy có thể cần phân tích sâu hơn các yếu tố ảnh hưởng đến tình trạng nghỉ học.

# Xây dựng và kiểm tra mô hình Poisson

poisson_model <-  glm(Days ~ Eth + Sex + Age + Lrn, family = poisson, data = quine)
summary(poisson_model)
## 
## Call:
## glm(formula = Days ~ Eth + Sex + Age + Lrn, family = poisson, 
##     data = quine)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  2.71538    0.06468  41.980  < 2e-16 ***
## EthN        -0.53360    0.04188 -12.740  < 2e-16 ***
## SexM         0.16160    0.04253   3.799 0.000145 ***
## AgeF1       -0.33390    0.07009  -4.764 1.90e-06 ***
## AgeF2        0.25783    0.06242   4.131 3.62e-05 ***
## AgeF3        0.42769    0.06769   6.319 2.64e-10 ***
## LrnSL        0.34894    0.05204   6.705 2.02e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 2073.5  on 145  degrees of freedom
## Residual deviance: 1696.7  on 139  degrees of freedom
## AIC: 2299.2
## 
## Number of Fisher Scoring iterations: 5
# Kiểm tra quá phân tán
library(AER)
## Warning: package 'AER' was built under R version 4.5.1
## Loading required package: car
## Warning: package 'car' was built under R version 4.5.1
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.1
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:DescTools':
## 
##     Recode
## Loading required package: lmtest
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.5.1
## Loading required package: survival
## 
## Attaching package: 'survival'
## The following object is masked from 'package:epitools':
## 
##     ratetable
dispersiontest(poisson_model)
## 
##  Overdispersion test
## 
## data:  poisson_model
## z = 5.469, p-value = 2.263e-08
## alternative hypothesis: true dispersion is greater than 1
## sample estimates:
## dispersion 
##   12.53013

Nhận xét:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 010207.png")

Kết quả hồi quy cho thấy phần lớn các biến giải thích đều có ý nghĩa thống kê ở mức 1%:

  • Hệ số chặn (Intercept = 2.715) cho biết log trung bình số ngày nghỉ của nhóm học sinh tham chiếu (Eth = A, Sex = F, Age = F0, Lrn = AL) là khoảng 2.715. Suy ra, trung bình nhóm này nghỉ khoảng exp(2.715) ≈ 15.1 ngày.

  • Biến EthN có hệ số âm đáng kể (-0.5336, p < 0.001), cho thấy học sinh dân tộc N nghỉ học ít hơn đáng kể so với dân tộc A.

  • SexM dương và có ý nghĩa thống kê (0.1616, p = 0.0001), cho thấy học sinh nam có xu hướng nghỉ học nhiều hơn nữ.

  • Các nhóm tuổi (AgeF1, AgeF2, AgeF3) cũng đều có ảnh hưởng rõ rệt, đặc biệt là nhóm F3 với hệ số 0.428 (p < 0.001).

  • Học sinh có mức độ học tập “SL” nghỉ học nhiều hơn nhóm “AL”, với hệ số dương và có ý nghĩa cao (LrnSL = 0.3489, p < 0.001).

Tuy nhiên, Residual Deviance = 1696.7 với 139 bậc tự do, cho thấy tỷ lệ deviance trên df khoảng 12.2, lớn hơn 1 rất nhiều — đây là dấu hiệu rõ ràng của hiện tượng quá phân tán (overdispersion).

Để kiểm định chính thức, tác giả sử dụng hàm dispersiontest() từ gói AER. Kết quả kiểm định:

  • Giá trị thống kê z = 5.469, với p-value = 2.263e-08, cực kỳ nhỏ.

  • Ước lượng hệ số phân tán = 12.53, cho thấy phương sai lớn hơn nhiều so với trung bình.

Với p-value nhỏ như vậy, có thể bác bỏ giả thuyết không (H₀: không có quá phân tán) và kết luận rằng dữ liệu có hiện tượng quá phân tán mạnh. Do đó, giả định cơ bản của mô hình Poisson không được thỏa mãn, vì vậy tác giả tiến hành ước lượng mô hình hồi quy âm nhị phân (Negative Binomial regression).

# Xây dựng mô hình Negative Binomial
nb_model <- glm.nb(Days ~ Eth + Sex + Age + Lrn, data = quine)
summary(nb_model)
## 
## Call:
## glm.nb(formula = Days ~ Eth + Sex + Age + Lrn, data = quine, 
##     init.theta = 1.274892646, link = log)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  2.89458    0.22842  12.672  < 2e-16 ***
## EthN        -0.56937    0.15333  -3.713 0.000205 ***
## SexM         0.08232    0.15992   0.515 0.606710    
## AgeF1       -0.44843    0.23975  -1.870 0.061425 .  
## AgeF2        0.08808    0.23619   0.373 0.709211    
## AgeF3        0.35690    0.24832   1.437 0.150651    
## LrnSL        0.29211    0.18647   1.566 0.117236    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for Negative Binomial(1.2749) family taken to be 1)
## 
##     Null deviance: 195.29  on 145  degrees of freedom
## Residual deviance: 167.95  on 139  degrees of freedom
## AIC: 1109.2
## 
## Number of Fisher Scoring iterations: 1
## 
## 
##               Theta:  1.275 
##           Std. Err.:  0.161 
## 
##  2 x log-likelihood:  -1093.151

Nhận xét:

Ta có hàm hồi quy:

knitr::include_graphics("C:/Users/DELL/Pictures/Screenshots/Screenshot 2025-07-28 010455.png")

Do mô hình Poisson trước đó bị quá phân tán, tác giả đã sử dụng mô hình Negative Binomial (NB) để điều chỉnh hiện tượng này. Kết quả mô hình được thể hiện như sau:

  • Các hệ số ước lượng có xu hướng tương tự như mô hình Poisson, nhưng độ lớn của sai số chuẩn (Std. Error) trong mô hình NB cao hơn đáng kể, phản ánh sự điều chỉnh hợp lý cho phương sai lớn.

  • Ví dụ, biến SexM trong mô hình Poisson có p-value = 0.0001 (có ý nghĩa rất cao), nhưng trong mô hình NB, p-value tăng lên 0.607 (không còn ý nghĩa thống kê). Điều này cho thấy mô hình Poisson đã đánh giá quá cao mức độ ảnh hưởng của biến SexM do bỏ qua yếu tố phân tán.

  • Tương tự, các biến AgeF1, AgeF2, AgeF3 và LrnSL đều không còn có ý nghĩa thống kê trong mô hình NB, dù trước đó có ý nghĩa trong mô hình Poisson. Đây là bằng chứng rõ ràng rằng mô hình Poisson đã đưa ra kết luận sai lệch do không xử lý tốt phân tán.

Về mặt thống kê:

  • Deviance giảm mạnh từ 1696.7 (Poisson) xuống còn 167.95 (NB), cho thấy mô hình NB mô tả dữ liệu tốt hơn nhiều.

  • Chỉ số AIC cũng giảm rõ rệt, từ 2299.2 (Poisson) còn 1109.2 (NB), chứng minh mức độ phù hợp cao hơn.

  • Tham số Theta = 1.275, với sai số chuẩn là 0.161. Giá trị hữu hạn của Theta xác nhận rõ ràng rằng dữ liệu có hiện tượng phân tán – điều mà mô hình NB đã khắc phục hiệu quả.

# Diễn giải kết quả mô hình NB

rr_nb <- exp(coef(nb_model))

print(rr_nb)
## (Intercept)        EthN        SexM       AgeF1       AgeF2       AgeF3 
##  18.0759083   0.5658809   1.0858035   0.6386312   1.0920756   1.4288943 
##       LrnSL 
##   1.3392492

Nhận xét:

Diễn giải biến EthN (ethnicity): Tỉ lệ exp(-0.565) ≈ 0.566 cho thấy, khi các yếu tố khác không đổi, những người thuộc nhóm dân tộc thiểu số (EthN) có số lượng bài nghiên cứu kỳ vọng giảm khoảng 43.4% (vì 1 − 0.566 = 0.434) so với nhóm dân tộc tham chiếu.

Diễn giải biến SexM (giới tính nam): Giá trị exp(0.082) ≈ 1.086 cho thấy những người là nam có số lượng bài báo kỳ vọng cao hơn khoảng 8.6% so với nữ, giả định các yếu tố khác giữ nguyên.

Diễn giải theo nhóm tuổi: Người trong nhóm tuổi trẻ nhất (AgeF1) có exp(−0.449) ≈ 0.639, tức là giảm 36.1% số bài báo so với nhóm tuổi tham chiếu. Trong khi đó, nhóm tuổi trung niên (AgeF2) gần như không khác biệt đáng kể (tăng khoảng 9%), còn nhóm lớn tuổi nhất (AgeF3) có exp(0.356) ≈ 1.429, nghĩa là tăng tới 42.9% số bài báo so với nhóm tham chiếu.

CHƯƠNG 3: KẾT LUẬN VÀ KIẾN NGHỊ

3.1 Kết luận

Nghiên cứu này đã tiến hành phân tích các yếu tố ảnh hưởng đến loại hình trường học mà học sinh đang theo học (Academic hoặc Vocational), sử dụng mô hình hồi quy logistic có biến phụ thuộc là type_school. Dựa trên bộ dữ liệu Go-to-College, gồm 1.000 quan sát với các biến phản ánh đặc điểm cá nhân, học tập và gia đình, nghiên cứu đã khai thác tiềm năng dự báo của nhiều yếu tố như giới tính, mức độ hứng thú với việc học, nơi cư trú, thu nhập của cha mẹ, diện tích nhà ở, điểm trung bình học tập và trình độ học vấn của phụ huynh.

Kết quả từ mô hình hồi quy cho thấy các biến như interest, parent_salary, residence, average_grades và parent_was_in_college có ảnh hưởng đáng kể đến xác suất học sinh theo học trường học thuật (Academic) thay vì hướng nghiệp (Vocational). Cụ thể, học sinh có điểm số trung bình cao, ở thành thị, cha mẹ có trình độ học vấn cao hoặc mức thu nhập cao thường có xu hướng học trường học thuật. Bên cạnh đó, mức độ hứng thú với việc học cũng là một chỉ báo mạnh về lựa chọn loại hình trường.

Trong quá trình kiểm định các mô hình, nghiên cứu cũng đã xem xét giả định proportional odds đối với mô hình hồi quy ordinal logit. Tuy nhiên, kết quả kiểm định Omnibus cho thấy giả định này không được thỏa mãn, dẫn đến việc mô hình ordinal logit không phù hợp với bộ dữ liệu. Do đó, nghiên cứu sử dụng mô hình logistic nhị phân làm mô hình chính để đánh giá mối quan hệ giữa các biến giải thích và biến phụ thuộc.

3.2 Kiến nghị

Dựa trên kết quả nghiên cứu, nhóm tác giả đề xuất một số kiến nghị mang tính thực tiễn như sau:

  • Tăng cường hỗ trợ học sinh từ vùng nông thôn: Do khu vực cư trú ảnh hưởng đáng kể đến loại trường học mà học sinh theo học, cần có chính sách hỗ trợ học sinh nông thôn tiếp cận với các trường học thuật, thông qua học bổng, truyền thông định hướng hoặc cải thiện điều kiện cơ sở vật chất.

  • Khuyến khích tinh thần học tập và cải thiện động lực học: Mức độ hứng thú với việc học có ảnh hưởng lớn đến việc chọn trường học thuật. Do đó, các nhà giáo dục nên chú trọng phát triển động lực học tập cho học sinh từ cấp dưới thông qua các hoạt động hướng nghiệp, tư vấn tâm lý và định hướng giáo dục cá nhân hóa.

  • Hỗ trợ tài chính cho học sinh có hoàn cảnh khó khăn: Những học sinh đến từ gia đình có thu nhập thấp có xu hướng học trường hướng nghiệp. Để đảm bảo cơ hội tiếp cận giáo dục chất lượng cao cho tất cả học sinh, cần có chính sách hỗ trợ học phí, học bổng hoặc trợ cấp học tập.

  • Đánh giá lại vai trò của giáo dục hướng nghiệp: Dù học sinh học trường hướng nghiệp thường đến từ nhóm có điểm trung bình và thu nhập thấp hơn, cần có chiến lược nâng cao chất lượng giáo dục nghề, đảm bảo học sinh theo học vẫn có cơ hội việc làm tốt và lộ trình học tập nâng cao sau này.

Cuối cùng, kết quả nghiên cứu cũng gợi mở hướng phát triển các công cụ dự báo học sinh có khả năng theo học loại trường nào dựa trên các đặc điểm nhân khẩu học và học tập. Đây sẽ là công cụ hỗ trợ hiệu quả cho các nhà trường và chuyên viên tư vấn học đường trong việc xây dựng lộ trình học tập phù hợp cho từng cá nhân.

DQotLS0NCnRpdGxlOiAiUEjDgk4gVMONQ0ggSMOATkggVkkgTOG7sEEgQ0jhu4xOIExP4bqgSSBIw4xOSCBUUsav4bucTkcgSOG7jEM6IEfDk0MgTkjDjE4gVOG7qiBDw4FDIFnhur5VIFThu5AgQ8OBIE5Iw4JOIFbDgCBHSUEgxJDDjE5IIg0KYXV0aG9yOiAiTmd1eeG7hW4gTmfhu41jIFTDuiBBbmgiDQpkYXRlOiAiMjYtMDctMjAyNSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiA2DQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY3NzOiBzdHlsZS5jc3MNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6ICc2Jw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KDQoNCiMgKipDSMavxqBORyAxOiBQSOG6pk4gTeG7niDEkOG6plUqKg0KDQojIyAqKjEuMS4gTMO9IGRvIGNo4buNbiDEkeG7gSB0w6BpKioNCg0KVHJvbmcgYuG7kWkgY+G6o25oIGjhu4cgdGjhu5FuZyBnacOhbyBk4bulYyBuZ8OgeSBjw6BuZyDEkWEgZOG6oW5nIHbDoCBsaW5oIGhv4bqhdCwgaOG7jWMgc2luaCBoaeG7h24gbmF5IGPDsyBuaGnhu4F1IGzhu7FhIGNo4buNbiBoxqFuIHRyb25nIHZp4buHYyB4w6FjIMSR4buLbmggY29uIMSRxrDhu51uZyBo4buNYyB04bqtcCBwaMO5IGjhu6NwIHbhu5tpIGLhuqNuIHRow6JuLiBN4buZdCB0cm9uZyBuaOG7r25nIHF1eeG6v3QgxJHhu4tuaCBxdWFuIHRy4buNbmcg4bufIGdpYWkgxJFv4bqhbiBwaOG7lSB0aMO0bmcgbMOgIGzhu7FhIGNo4buNbiBnaeG7r2EgaGFpIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWM6IGjhu41jIHRodeG6rXQgKEFjYWRlbWljKSB2w6AgaMaw4bubbmcgbmdoaeG7h3AgKFZvY2F0aW9uYWwpLiBN4buXaSBsb+G6oWkgaMOsbmggbsOgeSBtYW5nIGzhuqFpIMSR4buLbmggaMaw4bubbmcgcGjDoXQgdHJp4buDbiB2w6AgY8ahIGjhu5lpIG5naOG7gSBuZ2hp4buHcCBraMOhYyBuaGF1LCDhuqNuaCBoxrDhu59uZyBsw6J1IGTDoGkgxJHhur9uIHTGsMahbmcgbGFpIGPhu6dhIG5nxrDhu51pIGjhu41jLg0KDQpUaOG7sWMgdOG6vyBjaG8gdGjhuqV5LCBs4buxYSBjaOG7jW4gbG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYyBraMO0bmcgaG/DoG4gdG/DoG4gbMOgIGvhur90IHF14bqjIGPhu6dhIG7Eg25nIGzhu7FjIGjhu41jIHThuq1wLCBtw6AgY8OybiBwaOG6o24gw6FuaCBuaGnhu4F1IHnhur91IHThu5Ega2jDoWMgbmjGsCBz4buxIMSR4buLbmggaMaw4bubbmcgdOG7qyBnaWEgxJHDrG5oLCDEkWnhu4F1IGtp4buHbiBraW5oIHThur8g4oCTIHjDoyBo4buZaSwgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jLCB2w6AgY+G6oyBz4bufIHRow61jaCBjw6EgbmjDom4uIENo4bqzbmcgaOG6oW4sIG3hu5l0IGjhu41jIHNpbmggY8OzIMSRaeG7g20gaOG7jWMgdOG6rXAgdHJ1bmcgYsOsbmggbmjGsG5nIMSR4bq/biB04burIGdpYSDEkcOsbmggY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBjYW8gY8OzIHRo4buDIHbhuqtuIHF1eeG6v3QgxJHhu4tuaCB0aGVvIGjhu41jIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGRvIMSRxrDhu6NjIGvhu7MgduG7jW5nIHRp4bq/cCB04bulYyBo4buNYyDEkeG6oWkgaOG7jWMuIE5nxrDhu6NjIGzhuqFpLCBt4buZdCBo4buNYyBzaW5oIGPDsyB0aMOgbmggdMOtY2ggdOG7kXQgbmjGsG5nIHPhu5FuZyDhu58gdsO5bmcgbsO0bmcgdGjDtG4gduG7m2kgxJFp4buBdSBraeG7h24ga2luaCB04bq/IGtow7Mga2jEg24gY8OzIHRo4buDIGNo4buNbiBo4buNYyB0csaw4budbmcgbmdo4buBIMSR4buDIHPhu5ttIMSRaSBsw6BtLg0KDQpUcm9uZyBraGkgY8OhYyBuZ2hpw6puIGPhu6l1IHbhu4EgZ2nDoW8gZOG7pWMgdOG6oWkgVmnhu4d0IE5hbSBjaOG7pyB54bq/dSB04bqtcCB0cnVuZyB2w6BvIGNo4bqldCBsxrDhu6NuZyBnaeG6o25nIGThuqF5LCBoaeG7h3UgcXXhuqMgxJHDoG8gdOG6oW8gaG/hurdjIGvhur90IHF14bqjIGjhu41jIHThuq1wLCB0aMOsIHbhuqVuIMSR4buBIGjDoG5oIHZpIGzhu7FhIGNo4buNbiBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIHbhuqtuIGNoxrBhIMSRxrDhu6NjIHBow6JuIHTDrWNoIHLDtSByw6BuZyBkxrDhu5tpIGfDs2MgbmjDrG4gxJHhu4tuaCBsxrDhu6NuZyBr4bq/dCBo4bujcCB24bubaSBjw6FjIHnhur91IHThu5EgY8OhIG5ow6JuIHbDoCBnaWEgxJHDrG5oLiDEkOG6t2MgYmnhu4d0LCB2aeG7h2Mgbmjhuq1uIGRp4buHbiBjw6FjIHnhur91IHThu5EgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB0cm9uZyBow6BuaCB2aSBjaOG7jW4gdHLGsOG7nW5nIHPhur0gZ2nDunAgY8OhYyBuaMOgIGhv4bqhY2ggxJHhu4tuaCBjaMOtbmggc8OhY2gsIG5ow6AgcXXhuqNuIGzDvSBnacOhbyBk4bulYyB2w6AgcGjhu6UgaHV5bmggY8OzIHRow6ptIGPGoSBz4bufIGtob2EgaOG7jWMgdHJvbmcgdmnhu4djIHTGsCB24bqlbiwgxJHhu4tuaCBoxrDhu5tuZyBwaMO5IGjhu6NwIGNobyBo4buNYyBzaW5oLg0KDQpWw6wgduG6rXksIHZp4buHYyBuZ2hpw6puIGPhu6l1IMSR4buBIHTDoGkg4oCcUGjDom4gdMOtY2ggaMOgbmggdmkgbOG7sWEgY2jhu41uIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWM6IEfDs2MgbmjDrG4gdOG7qyBjw6FjIHnhur91IHThu5EgY8OhIG5ow6JuIHbDoCBnaWEgxJHDrG5o4oCdIGzDoCBj4bqnbiB0aGnhur90IHbDoCBtYW5nIMO9IG5naMSpYSB0aOG7sWMgdGnhu4VuIHPDonUgc+G6r2MsIHRyb25nIGLhu5FpIGPhuqNuaCBuaHUgY+G6p3UgY8OhIG5ow6JuIGjDs2EgZ2nDoW8gZOG7pWMgbmfDoHkgY8OgbmcgZ2lhIHTEg25nLg0KDQojIyAqKjEuMi4gTeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdSoqDQoNCk3hu6VjIHRpw6p1IHThu5VuZyBxdcOhdCBj4bunYSDEkeG7gSB0w6BpIGzDoCB4w6FjIMSR4buLbmggdsOgIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIGPDoWMgeeG6v3UgdOG7kSBjw6EgbmjDom4gdsOgIGdpYSDEkcOsbmggxJHhur9uIGjDoG5oIHZpIGzhu7FhIGNo4buNbiBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIChBY2FkZW1pYyBob+G6t2MgVm9jYXRpb25hbCkgY+G7p2EgaOG7jWMgc2luaC4NCg0KQ+G7pSB0aOG7gywgbmdoacOqbiBj4bupdSBuaOG6sW06DQoNCi0gUGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSDEkeG6t2MgxJFp4buDbSBjw6EgbmjDom4gKGdp4bubaSB0w61uaCwgc+G7nyB0aMOtY2ggaOG7jWMgdGnhur9wLCDEkWnhu4NtIHRydW5nIGLDrG5oIGjhu41jIHThuq1wKSB2w6AgbOG7sWEgY2jhu41uIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMuDQoNCi0gxJDDoW5oIGdpw6EgdMOhYyDEkeG7mW5nIGPhu6dhIGPDoWMgeeG6v3UgdOG7kSBnaWEgxJHDrG5oICh0deG7lWkgY2hhIG3hurksIHRodSBuaOG6rXAgZ2lhIMSRw6xuaCwgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGPhu6dhIHBo4bulIGh1eW5oLCBuxqFpIGPGsCB0csO6LCBkaeG7h24gdMOtY2ggbmjDoCDhu58pIMSR4bq/biBow6BuaCB2aSBs4buxYSBjaOG7jW4uDQoNCi0gR+G7o2kgw70gY2jDrW5oIHPDoWNoIGhv4bq3YyBiaeG7h24gcGjDoXAgaOG7lyB0cuG7oyBo4buNYyBzaW5oIMSRxrBhIHJhIGzhu7FhIGNo4buNbiBwaMO5IGjhu6NwIGjGoW4gduG7m2kgbsSDbmcgbOG7sWMgdsOgIMSRaeG7gXUga2nhu4duIHRo4buxYyB04bq/Lg0KDQojIyAqKjEuMy4gxJDhu5FpIHTGsOG7o25nIHbDoCBwaOG6oW0gdmkgbmdoacOqbiBj4bupdSoqDQoNCi0JxJDhu5FpIHTGsOG7o25nIG5naGnDqm4gY+G7qXU6IEPDoWMgaOG7jWMgc2luaCB0aHXhu5ljIMSR4buZIHR14buVaSBwaOG7lSB0aMO0bmcgY8OzIHF1eeG6v3QgxJHhu4tuaCBs4buxYSBjaOG7jW4gdGhlbyBo4buNYyBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIEFjYWRlbWljIGhv4bq3YyBWb2NhdGlvbmFsLg0KDQotCVBo4bqhbSB2aSBk4buvIGxp4buHdTogTmdoacOqbiBj4bupdSBz4butIGThu6VuZyBi4buZIGThu68gbGnhu4d1IMSR4buLbmggZGFuaCBz4bq1biB04burIDEuMDAwIGjhu41jIHNpbmggduG7m2kgMTEgYmnhur9uIMSR4bq3YyB0csawbmcsIHBo4bqjbiDDoW5oIHRow7RuZyB0aW4gbmjDom4ga2jhuql1IGjhu41jLCDEkWnhu4F1IGtp4buHbiBnaWEgxJHDrG5oIHbDoCBs4buxYSBjaOG7jW4gbG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYy4NCg0KLQlQaOG6oW0gdmkga2jDtG5nIGdpYW4g4oCTIHRo4budaSBnaWFuOiBE4buvIGxp4buHdSBtYW5nIHTDrW5oIMSR4bqhaSBkaeG7h24gdOG7lW5nIHRo4buDLCBraMO0bmcgZ2nhu5tpIGjhuqFuIOG7nyBt4buZdCBraHUgduG7sWMgY+G7pSB0aOG7gyB2w6AgY8OzIHTDrW5oIHRo4budaSDEkWnhu4NtIGPhu5EgxJHhu4tuaCwgbmjhurFtIHBo4bulYyB24bulIHBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gdGhheSB2w6wgZOG7sSBiw6FvIHh1IGjGsOG7m25nIGTDoGkgaOG6oW4uDQoNCiMjICoqMS40LiBQaMawxqFuZyBwaMOhcCBuZ2hpw6puIGPhu6l1KioNCg0KTmdoacOqbiBj4bupdSBuw6B5IHPhu60gZOG7pW5nIHBoxrDGoW5nIHBow6FwIMSR4buLbmggbMaw4bujbmcgbMOgbSBjaOG7pyDEkeG6oW8sIGJhbyBn4buTbSBjw6FjIGLGsOG7m2Mgc2F1Og0KDQotCVRo4buRbmcga8OqIG3DtCB04bqjOiBUw7NtIHThuq90IGPDoWMgxJHhurdjIMSRaeG7g20gY2jDrW5oIGPhu6dhIGThu68gbGnhu4d1LCBnacO6cCBuaOG6rW4gZGnhu4duIHh1IGjGsOG7m25nIGzhu7FhIGNo4buNbiBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIHRoZW8gbmjDs20uDQoNCi0JS2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3Q6IMOBcCBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZSwga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGhv4bq3YyB0LXRlc3QgxJHhu4MgeMOhYyDEkeG7i25oIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgZ2nhu69hIGPDoWMgbmjDs20uDQoNCi0JTcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiAoQmluYXJ5IExvZ2lzdGljIGhv4bq3YyBDb21wbGVtZW50YXJ5IGxvZy1sb2cpOiDGr+G7m2MgbMaw4bujbmcgeMOhYyBzdeG6pXQgaOG7jWMgc2luaCBjaOG7jW4gaOG7jWMgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgaG/hurdjIG5naOG7gSBk4buxYSB0csOqbiDEkeG6t2MgxJFp4buDbSBjw6EgbmjDom4gdsOgIGdpYSDEkcOsbmguDQoNClBow6JuIHTDrWNoIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gdHLDqm4gcGjhuqduIG3hu4FtIHRo4buRbmcga8OqIFIgaG/hurdjIHTGsMahbmcgxJHGsMahbmcsIGLhuqNvIMSR4bqjbSBr4bq/dCBxdeG6oyBraMOhY2ggcXVhbiB2w6AgY8OzIGto4bqjIG7Eg25nIGtp4buDbSDEkeG7i25oIGzhuqFpLg0KDQojIyAqKjEuNS4gS+G6v3QgY+G6pXUgYsOgaSBuZ2hpw6puIGPhu6l1KioNCg0KTmdvw6BpIHBo4bqnbiBt4bufIMSR4bqndSB2w6Aga+G6v3QgbHXhuq1uLCBu4buZaSBkdW5nIGLDoGkgbmdoacOqbiBj4bupdSDEkcaw4bujYyBjaGlhIHRow6BuaCAzIGNoxrDGoW5nIGNow61uaCBuaMawIHNhdToNCg0KLQlDaMawxqFuZyAxOiBQaOG6p24gbeG7nyDEkeG6p3Ug4oCTIFRyw6xuaCBiw6B5IGzDvSBkbyBjaOG7jW4gxJHhu4EgdMOgaSwgbeG7pWMgdGnDqnUsIHBoxrDGoW5nIHBow6FwIHbDoCBr4bq/dCBj4bqldSBuZ2hpw6puIGPhu6l1Lg0KDQoNCi0JQ2jGsMahbmcgMjogVGjhu7FjIGjDoG5oLCBwaMOibiB0w61jaCB2w6AgdHLDrG5oIGLDoHkga+G6v3QgcXXhuqMg4oCTIFRyw6xuaCBiw6B5IGvhur90IHF14bqjIHBow6JuIHTDrWNoIGjhu5NpIHF1eSB2w6Aga2nhu4NtIMSR4buLbmgsIHThu6sgxJHDsyByw7p0IHJhIGPDoWMgbmjhuq1uIMSR4buLbmggdsOgIGfhu6NpIMO9IGNow61uaCBzw6FjaC4NCg0KLSBDaMawxqFuZyAzOiBL4bq/dCBsdeG6rW4gdsOgIGtp4bq/biBuZ2jhu4sNCg0KIyAqKkNIxq/GoE5HIDI6IFRI4buwQyBIw4BOSCwgUEjDgk4gVMONQ0ggVsOAIFRSw4xOSCBCw4BZIEvhur5UIFFV4bqiKioNCg0KIyMgKipQSOG6pk4gMTogVMOMTSBISeG7glUgVsOAIENIVeG6qE4gQuG7iiBE4buuIExJ4buGVSoqDQoNCiMjIyAqKjEuMSDEkOG7jWMgZOG7ryBsaeG7h3UqKg0KDQpgYGB7cn0NCmRmIDwtcmVhZC5jc3YoIkM6L1VzZXJzL0RFTEwvRG93bmxvYWRzL2RhdGEgKDEpLmNzdiIsIGhlYWRlcj0gVCkNCiMgVMOhY2ggZOG7ryBsaeG7h3UgdGjDoG5oIG5oaeG7gXUgY+G7mXQNCmRhdGEgPC0gdGlkeXI6OnNlcGFyYXRlKA0KICBkZiwNCiAgY29sID0gMSwNCiAgaW50byA9IGMoInR5cGVfc2Nob29sIiwgInNjaG9vbF9hY2NyZWRpdGF0aW9uIiwgImdlbmRlciIsICJpbnRlcmVzdCIsDQogICAgICAgICAgICJyZXNpZGVuY2UiLCAicGFyZW50X2FnZSIsICJwYXJlbnRfc2FsYXJ5IiwgImhvdXNlX2FyZWEiLA0KICAgICAgICAgICAiYXZlcmFnZV9ncmFkZXMiLCAicGFyZW50X3dhc19pbl9jb2xsZWdlIiwgIndpbGxfZ29fdG9fY29sbGVnZSIpLA0KICBzZXAgPSAiOyINCikNCg0KYGBgDQoNCkLhu5kgZOG7ryBsaeG7h3UgR28tdG8tQ29sbGVnZSDEkcaw4bujYyB04buVbmcgaOG7o3AgcGjhu6VjIHbhu6UgY2hvIG3hu5l0IGThu7Egw6FuIOG7nyB0csaw4budbmcgxJHhuqFpIGjhu41jLlRow7RuZyBxdWEgdmnhu4djIHBow6JuIHTDrWNoLCBjw6FjIGPhu5EgduG6pW4gaOG7jWMgxJHGsOG7nW5nIGPDsyB0aOG7gyBo4buXIHRy4bujIG5o4buvbmcgaOG7jWMgc2luaCBjw7Mgbmd1eSBjxqEga2jDtG5nIGjhu41jIHRp4bq/cCBi4bqxbmcgY8OhY2ggeMOhYyDEkeG7i25oIGPDoWMgeeG6v3UgdOG7kSBsacOqbiBxdWFuIHbDoCDEkcawYSByYSBo4buXIHRy4bujIHBow7kgaOG7o3AuDQoNCiMjIyAqKjEuMiBMw6BtIHF1ZW4gZOG7ryBsaeG7h3UqKg0KDQpgYGB7cn0NCnN0cihkYXRhKQ0KYGBgDQoNCkLhu5kgZOG7ryBsaeG7h3UgYmFvIGfhu5NtIDExIGJp4bq/biAsIHBo4bqjbiDDoW5oIMSR4bq3YyDEkWnhu4NtIGPDoSBuaMOibiB2w6AgZ2lhIMSRw6xuaCBj4bunYSBo4buNYyBzaW5oOg0KDQp8IFTDqm4gYmnhur9uIHwgTcO0IHThuqMgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IGB0eXBlX3NjaG9vbGAgfCBMb+G6oWkgdHLGsOG7nW5nIGjhu41jOiAiQWNhZGVtaWMiIGhv4bq3YyAiVm9jYXRpb25hbCIgfA0KfCBgc2Nob29sX2FjY3JlZGl0YXRpb25gIHwgWOG6v3AgaOG6oW5nIGtp4buDbSDEkeG7i25oIGPhu6dhIHRyxrDhu51uZzogIkEiLCAiQiIsIC4uLiB8DQp8IGBnZW5kZXJgIHwgR2nhu5tpIHTDrW5oOiAiTWFsZSIsICJGZW1hbGUiIHwNCnwgYGludGVyZXN0YCB8IE3hu6ljIMSR4buZIGjhu6luZyB0aMO6IHbhu5tpIHZp4buHYyBo4buNYzogIkxlc3MgSW50ZXJlc3RlZCIsICJWZXJ5IEludGVyZXN0ZWQiLCAuLi4gfA0KfCBgcmVzaWRlbmNlYCB8IE7GoWkgY8awIHRyw7o6ICJVcmJhbiIgaG/hurdjICJSdXJhbCIgfA0KfCBgcGFyZW50X2FnZWAgfCBUdeG7lWkgY+G7p2EgY2hhIG3hurkgfA0KfCBgcGFyZW50X3NhbGFyeWAgfCBUaHUgbmjhuq1wIGPhu6dhIGNoYSBt4bq5IHwNCnwgYGhvdXNlX2FyZWFgIHwgRGnhu4duIHTDrWNoIG5ow6Ag4bufIHwNCnwgYGF2ZXJhZ2VfZ3JhZGVzYCB8IMSQaeG7g20gdHJ1bmcgYsOsbmggaOG7jWMgdOG6rXAgY+G7p2EgaOG7jWMgc2luaCB8DQp8IGBwYXJlbnRfd2FzX2luX2NvbGxlZ2VgIHwgQ2hhIG3hurkgY8OzIHThu6tuZyBo4buNYyDEkeG6oWkgaOG7jWMgaGF5IGtow7RuZzogIlRydWUiLyJGYWxzZSIgfA0KfCBgd2lsbF9nb190b19jb2xsZWdlYCB8IGjhu41jIHNpbmggY8OzIGjhu41jIHRp4bq/cCDEkeG6oWkgaOG7jWMgaGF5IGtow7RuZzogIlRydWUiLyJGYWxzZSIgfA0KDQpW4bubaSAxLjAwMCBxdWFuIHPDoXQgdsOgIDExIGJp4bq/biwgYuG7mSBk4buvIGxp4buHdSBHby10by1Db2xsZWdlIGPDsyBxdXkgbcO0IHBow7kgaOG7o3AgxJHhu4MgdGjhu7FjIGhp4buHbiBjw6FjIHBow6JuIHTDrWNoIHRo4buRbmcga8OqLCB4w6J5IGThu7FuZyBtw7QgaMOsbmggZOG7sSDEkW/DoW4sIGPFqW5nIG5oxrAgcGjDom4gbmjDs20gaOG7jWMgc2luaCB0aGVvIGPDoWMgxJHhurdjIMSRaeG7g20ga2jDoWMgbmhhdS4NCg0KROG7ryBsaeG7h3UgxJFhIGThuqFuZyB2w6AgcGhvbmcgcGjDujogYmFvIGfhu5NtIGPDoWMgYmnhur9uIG5oxrAgdHlwZV9zY2hvb2wsIHNjaG9vbF9hY2NyZWRpdGF0aW9uLCBnZW5kZXIsIGludGVyZXN0LCByZXNpZGVuY2UsIHBhcmVudF9hZ2UsIHBhcmVudF9zYWxhcnksIGhvdXNlX2FyZWEsIHBhcmVudF93YXNfaW5fY29sbGVnZSwgY3VuZyBj4bqlcCBuaGnhu4F1IHRow7RuZyB0aW4gbmjDom4ga2jhuql1IGjhu41jLCBraW5oIHThur8gLSB4w6MgaOG7mWkgdsOgIGjhu41jIHThuq1wLCBy4bqldCBo4buvdSDDrWNoIGNobyB2aeG7h2MgcGjDom4gdMOtY2ggY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggaOG7jWMgxJHhuqFpIGjhu41jLg0KDQpN4bq3YyBkw7kgYmnhur9uIHdpbGxfZ29fdG9fY29sbGVnZSBsw6AgYmnhur9uIG3hu6VjIHRpw6p1IHF1YW4gdHLhu41uZyB0aMaw4budbmcgxJHGsOG7o2MgZMO5bmcgxJHhu4MgZOG7sSDEkW/DoW4ga2jhuqMgbsSDbmcgaOG7jWMgc2luaCB0aeG6v3AgdOG7pWMgaOG7jWMgxJHhuqFpIGjhu41jIOKAkyBwaMO5IGjhu6NwIHbhu5tpIMSR4buLbmggaMaw4bubbmcgYmFuIMSR4bqndSBj4bunYSBi4buZIGThu68gbGnhu4d1IOKAkyB0dXkgbmhpw6puIHRyb25nIG5naGnDqm4gY+G7qXUgbsOgeSwgY2jDum5nIHTDtGkgbOG7sWEgY2jhu41uIHR5cGVfc2Nob29sIChn4buTbSBoYWkgbmjDs20gQWNhZGVtaWMgdsOgIFZvY2F0aW9uYWwpIGzDoG0gYmnhur9uIHBo4bulIHRodeG7mWMgxJHhu4MgdGnhur9wIGPhuq1uIG3hu5l0IGtow61hIGPhuqFuaCBraMOhYyBtYW5nIHTDrW5oIMSR4buLbmggaMaw4bubbmcgc+G7m20gaMahbiB0cm9uZyBxdcOhIHRyw6xuaCBnacOhbyBk4bulYy4gQ+G7pSB0aOG7gywgdmnhu4djIHBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gbG/huqFpIHRyxrDhu51uZyBo4buNYyBtw6AgaOG7jWMgc2luaCBs4buxYSBjaOG7jW4gdGhlbyBo4buNYyBnacO6cCBjdW5nIGPhuqVwIHRow7RuZyB0aW4gaOG7r3Ugw61jaCB24buBIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdOG6rXAgYmFuIMSR4bqndSwgdOG7qyDEkcOzIGdpw6FuIHRp4bq/cCBwaOG6o24gw6FuaCB4dSBoxrDhu5tuZyB0aeG6v3AgdOG7pWMgaOG7jWMgxJHhuqFpIGjhu41jIHRyb25nIHTGsMahbmcgbGFpLiBC4bufaSBs4bq9LCBo4buNYyBzaW5oIHRoZW8gaOG7jWMgdHLGsOG7nW5nIEFjYWRlbWljIHRoxrDhu51uZyBjw7MgeHUgaMaw4bubbmcgaOG7jWMgdGnhur9wIGzDqm4gxJHhuqFpIGjhu41jIGNhbyBoxqFuIHNvIHbhu5tpIGjhu41jIHNpbmggdGhlbyBo4buNYyB0csaw4budbmcgVm9jYXRpb25hbC4NCg0KTmdvw6BpIHJhLCB2aeG7h2MgbOG7sWEgY2jhu41uIHR5cGVfc2Nob29sIGzDoG0gYmnhur9uIHBo4bulIHRodeG7mWMgY8OybiBnacO6cCB0csOhbmggZOG7sSDEkeG7i25oIGtow7RuZyB0aMOgbmggaGnhu4duIHRo4buxYyB0cm9uZyBiaeG6v24gd2lsbF9nb190b19jb2xsZWdlLCB24buRbiBjaOG7iSB0aOG7gyBoaeG7h24gbW9uZyBtdeG7kW4gY+G7p2EgaOG7jWMgc2luaCB04bqhaSB0aOG7nWkgxJFp4buDbSBraOG6o28gc8OhdCBtw6AgY2jGsGEgY2jhuq9jIHjhuqN5IHJhIHRyb25nIHTGsMahbmcgbGFpLiBOZ8aw4bujYyBs4bqhaSwgdHlwZV9zY2hvb2wgbMOgIGJp4bq/biBxdWFuIHPDoXQgdGjhu7FjIHThur8sIMSRw6MgeOG6o3kgcmEsIGPDsyDEkeG7mSB0aW4gY+G6rXkgY2FvIGjGoW4gdHJvbmcgcGjDom4gdMOtY2ggbcO0IGjDrG5oLg0KDQpEbyDEkcOzLCBoxrDhu5tuZyB0aeG6v3AgY+G6rW4gbsOgeSBraMO0bmcgY2jhu4kgcGjDuSBo4bujcCB24bubaSBt4bulYyB0acOqdSBraMOhbSBwaMOhIGThu68gbGnhu4d1IG3DoCBjw7JuIGdpw7pwIG3hu58gcuG7mW5nIGfDs2MgbmjDrG4gduG7gSBow6BuaCB2aSBnacOhbyBk4bulYyBj4bunYSBo4buNYyBzaW5oIHRyb25nIGdpYWkgxJFv4bqhbiBz4bubbSBoxqFuLg0KDQoqKipIaeG7g24gdGjhu4sgMTAgZMOybmcgxJHhuqd1IGLhu5kgZOG7ryBsaeG7h3UqKioNCg0KYGBge3J9DQpoZWFkKGRhdGEsMTApDQpgYGANCg0KKioqSGnhu4NuIHRo4buLIDEwIGTDsm5nIGN14buRaSBi4buZIGThu68gbGnhu4d1KioqDQoNCmBgYHtyfQ0KdGFpbChkYXRhLDEwKQ0KYGBgDQojIyMgKioxLjMgS2nhu4NtIHRyYSBnacOhIHRy4buLIE5BKioNCg0KYGBge3J9DQpkYXRhbmEgPC0gc3VtKGlzLm5hKGRhdGEpKQ0KcHJpbnQoZGF0YW5hKQ0KYGBgDQpW4bqteSBraGkga2nhu4NtIHRyYSB04buVbmcgc+G7kSBnacOhIHRy4buLIE5BIHRvw6BuIGLhu5kgZGF0YSBi4bqxbmcgY8OidSBs4buHbmggYHN1bShpcy5uYShkYXRhKSlgLCBr4bq/dCBxdeG6oyBuaOG6rW4gxJHGsOG7o2MgbMOgICoqS0jDlE5HIEPDkyBHScOBIFRS4buKIE5BKiogbsOqbiB0YSB0aeG6v24gaMOgbmggcGjDom4gdMOtY2ggdGnhur9wLg0KDQojIyMgKioxLjQgQ2h1eeG7g24gxJHhu5VpIHRow6BuaCBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQoNClZp4buHYyBjaHV54buDbiBjw6FjIGJp4bq/biBuaMawIHR5cGVfc2Nob29sLCBzY2hvb2xfYWNjcmVkaXRhdGlvbiwgZ2VuZGVyLCBpbnRlcmVzdCwgcmVzaWRlbmNlLCBwYXJlbnRfd2FzX2luX2NvbGxlZ2Ugc2FuZyBraeG7g3UgZmFjdG9yIGzDoCBixrDhu5tjIHRp4buBbiB44butIGzDvSBxdWFuIHRy4buNbmcgdHJvbmcgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UuIMSQaeG7gXUgbsOgeSBnacO6cCBSIG5o4bqtbiBkaeG7h24gxJHDum5nIGLhuqNuIGNo4bqldCBwaMOibiBsb+G6oWkgY+G7p2EgY8OhYyBiaeG6v24gbsOgeSwgdOG7qyDEkcOzIGjhu5cgdHLhu6MgdOG7kXQgaMahbiBjaG8gdmnhu4djIHBow6JuIHTDrWNoIHRo4buRbmcga8OqIHbDoCB4w6J5IGThu7FuZyBtw7QgaMOsbmguIFbDrCB24bqteSwgdGEgdGnhur9uIGjDoG5oIGNodXnhu4NuIMSR4buVaSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIG7DoHk6DQoNCmBgYHtyfQ0KaXNmIDwtIG5hbWVzKGRhdGEpW3NhcHBseShkYXRhLCBmdW5jdGlvbih4KSBpcy5mYWN0b3IoeCkgfHwgaXMuY2hhcmFjdGVyKHgpKV0NCnByaW50KGlzZikNCmBgYA0KS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBjw7MgMTEgYmnhur9uIHRyb25nIHThuq1wIGThu68gbGnhu4d1IMSRYW5nIOG7nyBk4bqhbmcgZmFjdG9yIGhv4bq3YyBjaGFyYWN0ZXIsIGNo4bunIHnhur91IGzDoCBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIG5oxrAgbG/huqFpIHRyxrDhu51uZywgZ2nhu5tpIHTDrW5oLCBt4bupYyDEkeG7mSBxdWFuIHTDom0sIG7GoWkgY8awIHRyw7osDQoNCg0KYGBge3J9DQoNCmRhdGEkdHlwZV9zY2hvb2wgPC0gYXMuZmFjdG9yKGRhdGEkdHlwZV9zY2hvb2wpDQpkYXRhJHNjaG9vbF9hY2NyZWRpdGF0aW9uIDwtIGFzLmZhY3RvcihkYXRhJHNjaG9vbF9hY2NyZWRpdGF0aW9uKQ0KZGF0YSRnZW5kZXIgPC0gYXMuZmFjdG9yKGRhdGEkZ2VuZGVyKQ0KZGF0YSRpbnRlcmVzdCA8LSBhcy5mYWN0b3IoZGF0YSRpbnRlcmVzdCkNCmRhdGEkcmVzaWRlbmNlIDwtIGFzLmZhY3RvcihkYXRhJHJlc2lkZW5jZSkNCmRhdGEkYXZlcmFnZV9ncmFkZXMgPC0gYXMuZmFjdG9yKGRhdGEkYXZlcmFnZV9ncmFkZXMpDQpkYXRhJHBhcmVudF9zYWxhcnkgPC0gYXMuZmFjdG9yKGRhdGEkcGFyZW50X3NhbGFyeSkNCmRhdGEkaG91c2VfYXJlYSA8LSBhcy5mYWN0b3IoZGF0YSRob3VzZV9hcmVhKQ0KDQpkYXRhJHBhcmVudF93YXNfaW5fY29sbGVnZSA8LSBhcy5mYWN0b3IoZGF0YSRwYXJlbnRfd2FzX2luX2NvbGxlZ2UpDQpkYXRhJHdpbGxfZ29fdG9fY29sbGVnZSA8LSBhcy5mYWN0b3IoZGF0YSR3aWxsX2dvX3RvX2NvbGxlZ2UpDQoNCmBgYA0KDQoNCkPDoWMgYmnhur9uIG5oxrAgdHlwZV9zY2hvb2wsIHNjaG9vbF9hY2NyZWRpdGF0aW9uLCBnZW5kZXIsIGludGVyZXN0IHbDoCByZXNpZGVuY2UgxJHDoyDEkcaw4bujYyBjaHV54buDbiBzYW5nIGtp4buDdSBmYWN0b3IgxJHhu4MgUiBoaeG7g3UgxJHDsyBsw6AgY8OhYyBiaeG6v24gcGjDom4gbG/huqFpLiBWaeG7h2MgbsOgeSBy4bqldCBxdWFuIHRy4buNbmcgbmjhurFtIMSR4bqjbSBi4bqjbyBSIGtow7RuZyB4ZW0gY2jDum5nIGzDoCBk4buvIGxp4buHdSBsacOqbiB04bulYy4gVmnhu4djIHjhu60gbMO9IMSRw7puZyBsb+G6oWkgYmnhur9uIGdpw7pwIGPhuqNpIHRoaeG7h24gxJHhu5kgY2jDrW5oIHjDoWMgdHJvbmcgcGjDom4gdMOtY2ggdGjhu5FuZyBrw6ogdsOgIG3DtCBow6xuaCBow7NhIGThu7EgYsOhbyBo4buNYyBzaW5oIGPDsyB0aeG6v3AgdOG7pWMgaOG7jWMgxJHhuqFpIGjhu41jIGhheSBraMO0bmcuDQoNCg0KIyMgKipQSOG6pk4gMjogUEjDgk4gVMONQ0ggTcOUIFThuqIgTeG7mFQgQknhur5OIMSQ4buKTkggVMONTkggLSBVTklWQVJJQVRFIERFU0NSSVBUSVZFIEFOQUxZU0lTKioNCg0KIyMjICoqMi4xIFRZUEUgU0NIT09MKioNCg0KIyMjIyAqKjIuMS4xIFRo4buRbmcga8OqIFThuqduIHN14bqldCoqDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIGThu68gbGnhu4d1DQp0eXBlc2Nob29sX2ZyZXEgPC0gdGFibGUoZGF0YSR0eXBlX3NjaG9vbCkNCnR5cGVzY2hvb2xwYyA8LSB0YWJsZShkYXRhJHR5cGVfc2Nob29sKSAvIG5yb3coZGF0YSkgKiAxMDANCnR5cGVzY2hvb2xfdGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgYFR5cGUgb2YgU2Nob29sYCA9IG5hbWVzKHR5cGVzY2hvb2xfZnJlcSksDQogIEZyZXF1ZW5jeSA9IGFzLmludGVnZXIodHlwZXNjaG9vbF9mcmVxKSwNCiAgYFBlcmNlbnRhZ2UgKCUpYCA9IHJvdW5kKHR5cGVzY2hvb2xwYywgMikNCikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIMSR4bq5cCB24bubaSBmbGV4dGFibGUNCmxpYnJhcnkoZmxleHRhYmxlKQ0KDQpmbGV4dGFibGUodHlwZXNjaG9vbF90YWJsZSkgfD4NCiAgc2V0X2NhcHRpb24oIkLhuqNuZyAyLjEuIFBow6JuIHBo4buRaSBsb+G6oWkgdHLGsOG7nW5nIC0gdHlwZXNjaG9vbCIpIHw+DQogIGF1dG9maXQoKQ0KDQpgYGANClbhuq15IHRyb25nIGRhdGEgbsOgeSBjw7MgYHIgdGFibGUoZGF0YSR0eXBlc2Nob29sKVsxXS9ucm93KGRhdGEpKjEwMGAlIGjhu40gc2luaCB0aGVvIGjhu41jIG3DtGkgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgdsOgIGByIHRhYmxlKGRhdGEkdHlwZXNjaG9vbClbMl0vbnJvdyhkYXRhKSoxMDBgJSBo4buNYyBzaW5oIGjhu41jIHRyxrDhu51uZyBuZ2jhu4EuDQoNCiMjIyMgKioyLjEuMiBUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3J9DQojIFbhur0gVHLhu7FjIHF1YW4gaG/DoSB0csOybg0KcGllKHR5cGVzY2hvb2xfZnJlcSwNCiAgICBtYWluICAgPSAiQmnhu4N1IMSR4buTIDIuMTogUGjDom4gYuG7kSBsb+G6oWkgdHLGsOG7nW5nICh0eXBlc2Nob29sKSIsDQogICAgbGFiZWxzID0gcGFzdGUwKG5hbWVzKHR5cGVzY2hvb2xfZnJlcSksDQogICAgICAgICAgICAgICAgICAgICIgKCIsIHJvdW5kKHR5cGVzY2hvb2xwYywgMyksICIlKSIpLA0KICAgIGNvbCAgICA9IGMoIiNEQ0IwQzMiLCAiIzU5NkNBRCIpKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KROG7sWEgdsOgbyBC4bqjbmcgMi4xIHbDoCBCaeG7g3UgxJHhu5MgMi4xOiBQaMOibiBi4buRIGxv4bqhaSB0csaw4budbmcgKHR5cGVzY2hvb2wpLCB0YSB0aOG6pXkgcuG6sW5nIGjhu41jIHNpbmggY2jhu6cgeeG6v3UgdGhlbyBo4buNYyB04bqhaSBjw6FjIHRyxrDhu51uZyBBY2FkZW1pYyAoaOG7jWMgdGh14bqtdCkgduG7m2kgdOG6p24gc3XhuqV0IDYwOSBo4buNYyBzaW5oLCBjaGnhur9tIDYwLjklIHThu5VuZyBz4buRLiBUcm9uZyBraGkgxJHDsywgVm9jYXRpb25hbCAoZOG6oXkgbmdo4buBKSBjaOG7iSBjaGnhur9tIDM5LjElIHbhu5tpIDM5MSBo4buNYyBzaW5oLiBCaeG7g3UgxJHhu5MgdHLDsm4gdHLhu7FjIHF1YW4gaMOzYSByw7Ugc+G7sSBjaMOqbmggbOG7h2NoIG7DoHkgcXVhIGRp4buHbiB0w61jaCBjw6FjIGzDoXQgY+G6r3QsIGNobyB0aOG6pXkgeHUgaMaw4bubbmcgaOG7jWMgc2luaCBuZ2hpw6puZyB24buBIGNvbiDEkcaw4budbmcgaOG7jWMgdGh14bqtdCBoxqFuIGzDoCBuZ2jhu4EgbmdoaeG7h3AuIMSQaeG7gXUgbsOgeSBjw7MgdGjhu4MgcGjhuqNuIMOhbmggxJHhu4tuaCBoxrDhu5tuZyB4w6MgaOG7mWksIGvhu7MgduG7jW5nIGjhu41jIHbhuqVuIGhv4bq3YyBuaOG6rW4gdGjhu6ljIHbhu4EgY8ahIGjhu5lpIG5naOG7gSBuZ2hp4buHcCBnaeG7r2EgaGFpIGxv4bqhaSBow6xuaCBnacOhbyBk4bulYy4gVHV5IG5oacOqbiwgdOG7tyBs4buHIGjhu41jIHNpbmggY2jhu41uIGjhu41jIG5naOG7gSBjxaluZyBraMO0bmcgbmjhu48sIGNobyB0aOG6pXkgc+G7sSDEkWEgZOG6oW5nIHRyb25nIGzhu7FhIGNo4buNbiBjb24gxJHGsOG7nW5nIGjhu41jIHThuq1wLg0KDQojIyMgKioyLjIgU2Nob29sX2FjY3JlZGl0YXRpb24qKg0KDQojIyMjICoqMi4yLjEgVGjhu5FuZyBrw6ogVOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpzY2hvb2xfYWNjcmVkaXRhdGlvbl9mcmVxIDwtIHRhYmxlKGRhdGEkc2Nob29sX2FjY3JlZGl0YXRpb24pDQoNCnNjaG9vbF9hY2NyZWRpdGF0aW9uX3BjdCA8LSBwcm9wLnRhYmxlKHNjaG9vbF9hY2NyZWRpdGF0aW9uX2ZyZXEpICogMTAwDQoNCnNjaG9vbF9hY2NyZWRpdGF0aW9uX3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIHNjaG9vbF9hY2NyZWRpdGF0aW9uID0gbmFtZXMoc2Nob29sX2FjY3JlZGl0YXRpb25fZnJlcSksDQogIEZyZXF1ZW5jeSA9IGFzLmludGVnZXIoc2Nob29sX2FjY3JlZGl0YXRpb25fZnJlcSksDQogIGBQZXJjZW50YWdlICglKWAgPSByb3VuZChzY2hvb2xfYWNjcmVkaXRhdGlvbl9wY3QsIDIpDQopDQoNCiMgSGnhu4NuIHRo4buLIGLhuqNuZw0Ka25pdHI6OmthYmxlKHNjaG9vbF9hY2NyZWRpdGF0aW9uX3RhYmxlLCBjYXB0aW9uID0gIkLhuqNuZyAyLjIgUGjDom4gcGjhu5FpIHjhur9wIGjhuqFuZyB0csaw4budbmcgLSBzY2hvb2xfYWNjcmVkaXRhdGlvbiIpDQoNCmBgYA0KDQojIyMjICoqMi4yLjIgVHLhu7FjIHF1YW4gaMOzYSoqDQpgYGB7cn0NCiMgVuG6vSBUcuG7sWMgcXVhbiBob8OhIHRyw7JuDQpwaWUoc2Nob29sX2FjY3JlZGl0YXRpb25fZnJlcSwNCiAgICBtYWluICAgPSAiQmnhu4N1IMSR4buTIDIuMjogUGjDom4gcGjhu5FpIHjhur9wIGjhuqFuZyB0csaw4budbmcgLSBzY2hvb2xfYWNjcmVkaXRhdGlvbiIsDQogICAgbGFiZWxzID0gcGFzdGUwKG5hbWVzKHNjaG9vbF9hY2NyZWRpdGF0aW9uX2ZyZXEpLA0KICAgICAgICAgICAgICAgICAgICAiICgiLCByb3VuZChzY2hvb2xfYWNjcmVkaXRhdGlvbl9wY3QsIDMpLCAiJSkiKSwNCiAgICBjb2wgICAgPSBjKCIjRkVGOURCIiwgIiM0QzY4OUIiKSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCkThu7FhIHbDoG8gQuG6o25nIDIuMiB2w6AgYmnhu4N1IMSR4buTIHRyw7JuIG1pbmggaOG7jWEgcGjDom4gcGjhu5FpIHPhu5EgaOG7jWMgc2luaCB0aGVvIHjhur9wIGjhuqFuZyB0csaw4budbmcgKHNjaG9vbF9hY2NyZWRpdGF0aW9uKSwgdGEgdGjhuqV5IHLhurFuZyBz4buRIGjhu41jIHNpbmggdGhlbyBo4buNYyB04bqhaSB0csaw4budbmcgeOG6v3AgaOG6oW5nIEIgY2hp4bq/bSB04bu3IGzhu4cgbmjhu4luaCBoxqFuICg1MS45JSkgc28gduG7m2kgdHLGsOG7nW5nIHjhur9wIGjhuqFuZyBBICg0OC4xJSkuIEJp4buDdSDEkeG7kyB0csOybiB0aOG7gyBoaeG7h24gc+G7sSBwaMOibiBi4buRIGtow6EgY8OibiDEkeG7kWkgZ2nhu69hIGhhaSBsb+G6oWkgeOG6v3AgaOG6oW5nLCB24bubaSBsw6F0IGPhuq90IGtow7RuZyBjaMOqbmggbOG7h2NoIG5oaeG7gXUuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHRyb25nIHRo4buxYyB04bq/LCBo4buNYyBzaW5oIGtow7RuZyBjaOG7iSB04bqtcCB0cnVuZyB2w6BvIGPDoWMgdHLGsOG7nW5nIMSR4bqhdCBjaHXhuqluIGNhbyBuaOG6pXQgKEEpLCBtw6AgduG6q24gY8OzIHh1IGjGsOG7m25nIGzhu7FhIGNo4buNbiBj4bqjIHRyxrDhu51uZyB44bq/cCBo4bqhbmcgQiwgY8OzIHRo4buDIGRvIHnhur91IHThu5EgduG7iyB0csOtIMSR4buLYSBsw70sIMSRaeG7gXUga2nhu4duIGdpYSDEkcOsbmggaG/hurdjIG5o4bqtbiB0aOG7qWMgduG7gSBjaOG6pXQgbMaw4bujbmcgZ2nhuqNuZyBk4bqheS4NCg0KIyMjICoqMi4zIEdlbmRlcioqDQoNCiMjIyMgKioyLjMuMSBUaOG7kW5nIGvDqiBU4bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCmdyX2ZyZXEgPC0gdGFibGUoZGF0YSRnZW5kZXIpDQoNCmdyX3BjdCA8LSB0YWJsZShkYXRhJGdlbmRlcikvc3VtKG5yb3coZGF0YSkpKjEwMA0KDQpncl90YWJsZSA8LSBkYXRhLmZyYW1lKA0KICBHZW5kZXIgPSBuYW1lcyhncl9mcmVxKSwNCiAgRnJlcXVlbmN5ID0gYXMuaW50ZWdlcihncl9mcmVxKSwNCiAgUGVyY2VudGFnZSA9IHJvdW5kKGdyX3BjdCwgMykNCikNCmNvbG5hbWVzKGdyX3RhYmxlKSA8LSBjKCJHZW5kZXIiLCAiRnJlcXVlbmN5IiwgIkdlbmRlciIsICJQZXJjZW50YWdlICglKSIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQojIEhp4buDbiB0aOG7iyBi4bqjbmcgxJHhurlwDQoNCiAga25pdHI6OmthYmxlKGdyX3RhYmxlLCBjYXB0aW9uID0gIkLhuqNuZyAyLjMgUGjDom4gcGjhu5FpIGdp4bubaSB0w61uaCBo4buNYyBzaW5oIC0gR0VOREVSIikNCg0KYGBgDQojIyMjICoqMi4zLjIgVHLhu7FjIHF1YW4gaMOzYSoqDQoNCmBgYHtyfQ0KcGllKGdyX2ZyZXEsDQogICAgbWFpbiAgID0gIkJp4buDdSDEkeG7kyAyLjM6IFBow6JuIHBo4buRaSBnaeG7m2kgdMOtbmggaOG7jWMgc2luaCAtIGdlbmRlciIsDQogICAgbGFiZWxzID0gcGFzdGUwKG5hbWVzKGdyX2ZyZXEpLA0KICAgICAgICAgICAgICAgICAgICAiICgiLCByb3VuZChncl9wY3QsIDMpLCAiJSkiKSwNCiAgICBjb2wgICAgPSBjKCIjRjdFNEUyIiwgIiM2Mzg0N0QiKSkgDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQpE4buxYSB2w6BvIELhuqNuZyAyLjMgdsOgIGJp4buDdSDEkeG7kyB0csOybiBtaW5oIGjhu41hIHBow6JuIHBo4buRaSBnaeG7m2kgdMOtbmggaOG7jWMgc2luaCAoR0VOREVSKSwgY8OzIHRo4buDIHRo4bqleSB04bu3IGzhu4cgaOG7jWMgc2luaCBuYW0gY2hp4bq/bSDGsHUgdGjhur8gbmjhurkgduG7m2kgNTE1IGjhu41jIHNpbmggKDUxLjUlKSwgdHJvbmcga2hpIG7hu68gY2hp4bq/bSA0OC41JSB24bubaSA0ODUgaOG7jWMgc2luaC4gQmnhu4N1IMSR4buTIHRyw7JuIHRo4buDIGhp4buHbiBoYWkgbMOhdCBj4bqvdCBn4bqnbiBuaMawIGLhurFuZyBuaGF1LCBwaOG6o24gw6FuaCBz4buxIGPDom4gYuG6sW5nIGdp4bubaSB0w61uaCB0xrDGoW5nIMSR4buRaSB0cm9uZyBt4bqrdSBraOG6o28gc8OhdC4gVHV5IG5hbSBjw7Mgc+G7kSBsxrDhu6NuZyBuaGnhu4F1IGjGoW4gbeG7mXQgY2jDunQsIG5oxrBuZyBt4bupYyBjaMOqbmggbOG7h2NoIGtow7RuZyDEkcOhbmcga+G7gy4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkga2jDtG5nIGPDsyBz4buxIHRoacOqbiBs4buHY2ggcsO1IHLhu4d0IHbhu4EgZ2nhu5tpIHTDrW5oIHRyb25nIHRp4bq/cCBj4bqtbiBnacOhbyBk4bulYyBwaOG7lSB0aMO0bmcsIHbDoCBjw7MgdGjhu4MgY29pIMSRw6J5IGzDoCBt4buZdCBk4bqldSBoaeG7h3UgdMOtY2ggY+G7sWMgduG7gSBiw6xuaCDEkeG6s25nIGdp4bubaSB0cm9uZyBo4buNYyB04bqtcC4NCg0KIyMjICoqMi40IGludGVyZXN0KioNCg0KIyMjIyAqKjIuNC4xIFRo4buRbmcga8OqIFThuqduIHN14bqldCoqDQoNCmBgYHtyfQ0KaW50ZXJlc3RfZnJlcSA8LSB0YWJsZShkYXRhJGludGVyZXN0KQ0KDQppbnRlcmVzdF9wY3QgPC0gdGFibGUoZGF0YSRpbnRlcmVzdCkvc3VtKG5yb3coZGF0YSkpKjEwMA0KDQppbnRlcmVzdF90YWJsZSA8LSBkYXRhLmZyYW1lKA0KICBpbnRlcmVzdCA9IG5hbWVzKGludGVyZXN0X2ZyZXEpLA0KICBGcmVxdWVuY3kgPSBhcy5pbnRlZ2VyKGludGVyZXN0X2ZyZXEpLA0KICBQZXJjZW50YWdlID0gcm91bmQoaW50ZXJlc3RfcGN0LCAzKQ0KKQ0KY29sbmFtZXMoaW50ZXJlc3RfdGFibGUpIDwtIGMoImludGVyZXN0IiwgIkZyZXF1ZW5jeSIsICJpbnRlcmVzdCIsICJQZXJjZW50YWdlICglKSIpDQoNCiMgSGnhu4NuIHRo4buLIGLhuqNuZyDEkeG6uXANCmtuaXRyOjprYWJsZShpbnRlcmVzdF90YWJsZSwgY2FwdGlvbiA9ICJC4bqjbmcgMi40IFBow6JuIHBo4buRaSBt4bupYyDEkeG7mSB0aMOtY2ggdGjDuiB0cm9uZyBo4buNYyB04bqtcCAtIGludGVyZXN0IikNCg0KYGBgDQoNCiMjIyMgKioyLjQuMiBUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCmludGVyZXN0X2RmIDwtIGFzLmRhdGEuZnJhbWUoaW50ZXJlc3RfcGN0KQ0KY29sbmFtZXMoaW50ZXJlc3RfZGYpIDwtIGMoImludGVyZXN0IiwgIlBlcmNlbnRhZ2UiKQ0KDQpnZ3Bsb3QoaW50ZXJlc3RfZGYsIGFlcyh4ID0gcmVvcmRlcihpbnRlcmVzdCwgLVBlcmNlbnRhZ2UpLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IGludGVyZXN0KSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBsYWJzKHRpdGxlID0gIkJp4buDdSDEkeG7kyAyLjQ6IFBow6JuIHBo4buRaSBt4bupYyDEkeG7mSB0aMOtY2ggdGjDuiB0cm9uZyBo4buNYyB04bqtcCIsDQogICAgICAgeCA9ICLEkOG7mSB0aMOtY2ggdGjDuiIsIHkgPSAiVOG7tyBs4buHICUiKSArDQogIHRoZW1lX2xpZ2h0KCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDAsIGhqdXN0ID0gMSkpDQoNCmBgYA0KKipOSOG6rE4gWMOJVDoqKg0KDQpE4buxYSB2w6BvIELhuqNuZyAyLjQgdsOgIGJp4buDdSDEkeG7kyB0csOybiBtaW5oIGjhu41hIHBow6JuIHBo4buRaSBt4bupYyDEkeG7mSB0aMOtY2ggdGjDuiB0cm9uZyBo4buNYyB04bqtcCAoaW50ZXJlc3QpLCBjw7MgdGjhu4MgdGjhuqV5IG3hu6ljIMSR4buZIGjhu6luZyB0aMO6IGPhu6dhIGjhu41jIHNpbmgga2jDoSDEkWEgZOG6oW5nLiBUcm9uZyDEkcOzLCBuaMOzbSAiVmVyeSBJbnRlcmVzdGVkIiBjaGnhur9tIHThu7cgbOG7hyBjYW8gbmjhuqV0IHbhu5tpIDMyLjQlICgzMjQgaOG7jWMgc2luaCksIGNobyB0aOG6pXkgbeG7mXQgYuG7mSBwaOG6rW4gbOG7m24gaOG7jWMgc2luaCBjw7MgxJHhu5luZyBs4buxYyBo4buNYyB04bqtcCByw7UgcuG7h3QuIFR1eSBuaGnDqm4sIMSRw6FuZyBjaMO6IMO9IGzDoCBjw7MgdOG7m2kgMjYuMSUgKDI2MSBo4buNYyBzaW5oKSBu4bqxbSB0cm9uZyBuaMOzbSAiVW5jZXJ0YWluIiwgcGjhuqNuIMOhbmggc+G7sSB0aGnhur91IGNo4bqvYyBjaOG6r24gaG/hurdjIGtow7RuZyByw7UgcsOgbmcgduG7gSB0aMOhaSDEkeG7mSBo4buNYyB04bqtcC4gTmdvw6BpIHJhLCBn4bqnbiAxLzMgc+G7kSBo4buNYyBzaW5oIGPDsm4gbOG6oWkgdGh14buZYyBuaMOzbSAiTGVzcyBJbnRlcmVzdGVkIiBob+G6t2MgIk5vdCBJbnRlcmVzdGVkIiwgY2hp4bq/bSB04buVbmcgY+G7mW5nIDMxLjUlLCBjaG8gdGjhuqV5IHbhuqtuIGPDsm4gbeG7mXQgdOG7tyBs4buHIMSRw6FuZyBr4buDIGjhu41jIHNpbmggdGhp4bq/dSBz4buxIGfhuq9uIGLDsyB24bubaSB2aeG7h2MgaOG7jWMuDQoNCiMjIyAqKjIuNSByZXNpZGVuY2UqKg0KDQojIyMjICoqMi41LjEgVGjhu5FuZyBrw6ogVOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpyZXNpZGVuY2VfZnJlcSA8LSB0YWJsZShkYXRhJHJlc2lkZW5jZSkNCg0KcmVzaWRlbmNlX3BjdCA8LSB0YWJsZShkYXRhJHJlc2lkZW5jZSkvc3VtKG5yb3coZGF0YSkpKjEwMA0KDQpyZXNpZGVuY2VfdGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgcmVzaWRlbmNlID0gbmFtZXMocmVzaWRlbmNlX2ZyZXEpLA0KICBGcmVxdWVuY3kgPSBhcy5pbnRlZ2VyKHJlc2lkZW5jZV9mcmVxKSwNCiAgUGVyY2VudGFnZSA9IHJvdW5kKHJlc2lkZW5jZV9wY3QsIDMpDQopDQpjb2xuYW1lcyhyZXNpZGVuY2VfdGFibGUpIDwtIGMoInJlc2lkZW5jZSIsICJGcmVxdWVuY3kiLCAicmVzaWRlbmNlIiwgIlBlcmNlbnRhZ2UgKCUpIikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIMSR4bq5cA0Ka25pdHI6OmthYmxlKHJlc2lkZW5jZV90YWJsZSwgY2FwdGlvbiA9ICJC4bqjbmcgMi41IFBow6JuIHBo4buRaSDEkeG7i25oIGPGsCBj4bunYSBo4buNYyBzaW5oIC0gcmVzaWRlbmNlIikNCg0KYGBgDQoNCiMjIyMgKioyLjUuMiBUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3J9DQojIFbhur0gVHLhu7FjIHF1YW4gaG/DoSB0csOybg0KcGllKHJlc2lkZW5jZV9mcmVxLA0KICAgIG1haW4gICA9ICJCaeG7g3UgxJHhu5MgMi41OiBQaMOibiBi4buRIMSR4buLbmggY8awIGPhu6dhIGjhu41jIHNpbmggKHJlc2lkZW5jZSkiLA0KICAgIGxhYmVscyA9IHBhc3RlMChuYW1lcyhyZXNpZGVuY2VfZnJlcSksDQogICAgICAgICAgICAgICAgICAgICIgKCIsIHJvdW5kKHJlc2lkZW5jZV9wY3QsIDMpLCAiJSkiKSwNCiAgICBjb2wgICAgPSBjKCIjRENCMEMzIiwgIiM1OTZDQUQiKSkNCmBgYA0KDQoqKk5I4bqsTiBYw4lUOioqDQoNCkThu7FhIHbDoG8gQuG6o25nIDIuNSB2w6AgYmnhu4N1IMSR4buTIHRyw7JuIG1pbmggaOG7jWEgcGjDom4gcGjhu5FpIG7GoWkgY8awIHRyw7ogY+G7p2EgaOG7jWMgc2luaCAocmVzaWRlbmNlKSwgdGEgdGjhuqV5IHLhurFuZyBo4buNYyBzaW5oIMSR4bq/biB04burIGtodSB24buxYyDEkcO0IHRo4buLIChVcmJhbikgY2hp4bq/bSB04bu3IGzhu4cgY2FvIGjGoW4gduG7m2kgNTM5IGjhu41jIHNpbmggKDUzLjklKSwgdHJvbmcga2hpIGjhu41jIHNpbmggdOG7qyBuw7RuZyB0aMO0biAoUnVyYWwpIGzDoCA0NjEgaOG7jWMgc2luaCAoNDYuMSUpLiBCaeG7g3UgxJHhu5MgdHLDsm4gdGjhu4MgaGnhu4duIGhhaSBsw6F0IGPhuq90IGfhuqduIHTGsMahbmcgxJHGsMahbmcsIHBo4bqjbiDDoW5oIHPhu7EgcGjDom4gYuG7kSBkw6JuIGPGsCBraMOhIMSR4buTbmcgxJHhu4F1IHRyb25nIG3huqt1IGto4bqjbyBzw6F0LiBUdXkgbmhpw6puLCBz4buxIG5o4buJbmggaMahbiB04burIHBow61hIMSRw7QgdGjhu4sgY8OzIHRo4buDIGfhu6NpIMO9IHbhu4Ega2jhuqMgbsSDbmcgdGnhur9wIGPhuq1uIGdpw6FvIGThu6VjIGNhbyBoxqFuIOG7nyBraHUgduG7sWMgdGjDoG5oIHRo4buLLCBuaOG7nSDEkWnhu4F1IGtp4buHbiBraW5oIHThur8g4oCTIHjDoyBo4buZaSB0aHXhuq1uIGzhu6NpIGjGoW4uIMSQ4buTbmcgdGjhu51pLCDEkWnhu4F1IG7DoHkgY8WpbmcgY2hvIHRo4bqleSB24bqrbiBjw7MgdOG7tyBs4buHIGzhu5tuIGjhu41jIHNpbmggbsO0bmcgdGjDtG4gxJFhbmcgdGhhbSBnaWEgaOG7jWMgdOG6rXAsIHRo4buDIGhp4buHbiBu4buXIGzhu7FjIG3hu58gcuG7mW5nIGPGoSBo4buZaSBnacOhbyBk4bulYyDhu58gbeG7jWkgdsO5bmcgbWnhu4FuLg0KDQoNCg0KIyMjICoqMi43IHBhcmVudF9zYWxhcnkqKg0KDQojIyMjICoqMi43LjEgVGjhu5FuZyBrw6ogVOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQpwYXJlbnRfc2FsYXJ5X2ZyZXEgPC0gdGFibGUoZGF0YSRwYXJlbnRfc2FsYXJ5KQ0KDQpwYXJlbnRfc2FsYXJ5X3BjdCA8LSB0YWJsZShkYXRhJHBhcmVudF9zYWxhcnkpL3N1bShucm93KGRhdGEpKSoxMDANCg0KcGFyZW50X3NhbGFyeV90YWJsZSA8LSBkYXRhLmZyYW1lKA0KICBwYXJlbnRfc2FsYXJ5ID0gbmFtZXMocGFyZW50X3NhbGFyeV9mcmVxKSwNCiAgRnJlcXVlbmN5ID0gYXMuaW50ZWdlcihwYXJlbnRfc2FsYXJ5X2ZyZXEpLA0KICBQZXJjZW50YWdlID0gcm91bmQocGFyZW50X3NhbGFyeV9wY3QsIDMpDQopDQpjb2xuYW1lcyhwYXJlbnRfc2FsYXJ5X3RhYmxlKSA8LSBjKCJwYXJlbnRfc2FsYXJ5IiwgIkZyZXF1ZW5jeSIsICJwYXJlbnRfc2FsYXJ5IiwgIlBlcmNlbnRhZ2UgKCUpIikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIMSR4bq5cA0Ka25pdHI6OmthYmxlKHBhcmVudF9zYWxhcnlfdGFibGUsIGNhcHRpb24gPSAiQuG6o25nIDIuNyBQaMOibiBwaOG7kWkgdGhlbyB0aHUgbmjhuq1wIGPhu6dhIG5nxrDhu51pIGdpw6FtIGjhu5kgLSBwYXJlbnRfc2FsYXJ5IikNCg0KYGBgDQoNCiMjIyMgKioyLjcuMiBUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3IsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD04fQ0KIyBW4bq9IFRy4buxYyBxdWFuIGhvw6EgdHLDsm4NCnBpZShwYXJlbnRfc2FsYXJ5X2ZyZXEsDQogICAgbWFpbiAgID0gIkJp4buDdSDEkeG7kyAyLjc6IFBow6JuIHBo4buRaSB0aGVvIHRodSBuaOG6rXAgY+G7p2EgbmfGsOG7nWkgZ2nDoW0gaOG7mSAtIHBhcmVudF9zYWxhcnkiLA0KICAgIGxhYmVscyA9IHBhc3RlMChuYW1lcyhwYXJlbnRfc2FsYXJ5X2ZyZXEpLA0KICAgICAgICAgICAgICAgICAgICAiICgiLCByb3VuZChwYXJlbnRfc2FsYXJ5X3BjdCwgMyksICIlKSIpLA0KICAgIGNvbCAgICA9IGMoIiNBQkJFRTAiLCAiI0Y0QzBDMiIsICIjQjJFRURBIiwgIiNGRkVDQUYiKSkgDQpgYGANCg0KKipOSOG6rE4gWMOJVDoqKg0KDQpQaMOibiBwaOG7kWkgdGh1IG5o4bqtcCBuZ8aw4budaSBnacOhbSBo4buZIGNobyB0aOG6pXkgc+G7sSB0xrDGoW5nIMSR4buTbmcgcsO1IHLhu4d0IGdp4buvYSBuaMOzbSBjw7MgdGh1IG5o4bqtcCAiYWRlcXVhdGUiICg0NC44JSkgdsOgICJhdmVyYWdlIiAoNDQuNiUpLCBjaGnhur9tIGfhuqduIDkwJSB04buVbmcgc+G7kSBo4buNYyBzaW5oLiDEkGnhu4F1IG7DoHkgcGjhuqNuIMOhbmggcuG6sW5nIMSRYSBz4buRIGjhu41jIHNpbmggeHXhuqV0IHRow6JuIHThu6sgY8OhYyBnaWEgxJHDrG5oIGPDsyBt4bupYyBz4buRbmcg4buVbiDEkeG7i25oLCBraMO0bmcgcXXDoSBnacOgdSBjxaluZyBraMO0bmcgcXXDoSBraMOzIGtoxINuLiBTbyB24bubaSBjw6FjIG5ow7NtIG7DoHksIG5ow7NtIHRodSBuaOG6rXAgImhpZ2giIGNo4buJIGNoaeG6v20gcuG6pXQgbmjhu48gKDMuOSUpLCBjaG8gdGjhuqV5IGPDoWMgZ2lhIMSRw6xuaCBraMOhIGdp4bqjIGtow7RuZyBuaGnhu4F1IHRyb25nIG3huqt1IGto4bqjbyBzw6F0LiBOaMOzbSB0aHUgbmjhuq1wICJsb3ciIGNoaeG6v20gNi43JSwgdGjhuqVwIGjGoW4ga2jDoSBuaGnhu4F1IHNvIHbhu5tpIGhhaSBuaMOzbSB0cnVuZyBiw6xuaCwgbmjGsG5nIHbhuqtuIGzDoCBt4buZdCB04bu3IGzhu4cga2jDtG5nIG5o4buPLCBwaOG6o24gw6FuaCBy4bqxbmcgY8OybiBuaGnhu4F1IGjhu41jIHNpbmggxJHhur9uIHThu6sgZ2lhIMSRw6xuaCBjw7MgxJFp4buBdSBraeG7h24ga2luaCB04bq/IGjhuqFuIGNo4bq/LiBTbyBzw6FuaCB24bubaSBjw6FjIHBow6JuIHBo4buRaSBraMOhYyBuaMawIMSR4buZIHR14buVaSBnacOhbSBo4buZIGhheSBuxqFpIGPGsCB0csO6LCB0aHUgbmjhuq1wIGPDsyBz4buxIHBow6JuIGjDs2EgcsO1IGjGoW4sIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gY8ahIGjhu5lpIHbDoCDEkWnhu4F1IGtp4buHbiBo4buNYyB04bqtcCBj4bunYSBo4buNYyBzaW5oLg0KDQojIyMgKioyLjggaG91c2VfYXJlYSoqDQoNCiMjIyMgKioyLjguMSBUaOG7kW5nIGvDqiBU4bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCmhvdXNlX2FyZWFfZnJlcSA8LSB0YWJsZShkYXRhJGhvdXNlX2FyZWEpDQoNCmhvdXNlX2FyZWFfcGN0IDwtIHRhYmxlKGRhdGEkaG91c2VfYXJlYSkvc3VtKG5yb3coZGF0YSkpKjEwMA0KDQpob3VzZV9hcmVhX3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIGhvdXNlX2FyZWEgPSBuYW1lcyhob3VzZV9hcmVhX2ZyZXEpLA0KICBGcmVxdWVuY3kgPSBhcy5pbnRlZ2VyKGhvdXNlX2FyZWFfZnJlcSksDQogIFBlcmNlbnRhZ2UgPSByb3VuZChob3VzZV9hcmVhX3BjdCwgMykNCikNCmNvbG5hbWVzKGhvdXNlX2FyZWFfdGFibGUpIDwtIGMoImhvdXNlX2FyZWEiLCAiRnJlcXVlbmN5IiwgImhvdXNlX2FyZWEiLCAiUGVyY2VudGFnZSAoJSkiKQ0KDQojIEhp4buDbiB0aOG7iyBi4bqjbmcgxJHhurlwDQprbml0cjo6a2FibGUoaG91c2VfYXJlYV90YWJsZSwgY2FwdGlvbiA9ICJC4bqjbmcgMi44IFBow6JuIHBo4buRaSB0aGVvIGRp4buHbiB0w61jaCBuaMOgIOG7nyAtIGhvdXNlX2FyZWEiKQ0KDQpgYGANCg0KIyMjIyAqKjIuOC4yIFRy4buxYyBxdWFuIGjDs2EqKg0KDQpgYGB7ciwgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTh9DQojIFbhur0gVHLhu7FjIHF1YW4gaG/DoSB0csOybg0KcGllKGhvdXNlX2FyZWFfZnJlcSwNCiAgICBtYWluICAgPSAiQmnhu4N1IMSR4buTIDIuODogUGjDom4gcGjhu5FpIHRoZW8gdGhlbyBkaeG7h24gdMOtY2ggbmjDoCDhu58gLSBob3VzZV9hcmVhIiwNCiAgICBsYWJlbHMgPSBwYXN0ZTAobmFtZXMoaG91c2VfYXJlYV9mcmVxKSwNCiAgICAgICAgICAgICAgICAgICAgIiAoIiwgcm91bmQoaG91c2VfYXJlYV9wY3QsIDMpLCAiJSkiKSwNCiAgICBjb2wgICAgPSBjKCIjOTZCRkJDIiwgIiNFOEVEREEiLCAiI0Q0QTJBNiIpKSANCmBgYA0KDQoqKk5I4bqsTiBYw4lUOioqDQoNClBow6JuIHBo4buRaSBkaeG7h24gdMOtY2ggbmjDoCDhu58gY2hvIHRo4bqleSBn4bqnbiA4MCUgaOG7jWMgc2luaCBz4buRbmcgdHJvbmcgbmjDoCBjw7MgZGnhu4duIHTDrWNoIG5o4buPIMSR4bq/biB0cnVuZyBiw6xuaCAoMzcuNiUgZGnhu4duIHTDrWNoIG5o4buPLCA0Mi40JSBkaeG7h24gdMOtY2ggdHJ1bmcgYsOsbmgpLCBjaOG7iSBjw7MgMjAlIHPhu5FuZyB0cm9uZyBuaMOgIGRp4buHbiB0w61jaCBs4bubbi4gS+G6v3QgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UgduG7gSB0aHUgbmjhuq1wIG5nxrDhu51pIGdpw6FtIGjhu5kgY2jhu6cgeeG6v3Ug4bufIG3hu6ljIGFkZXF1YXRlIHbDoCBhdmVyYWdlIChn4bqnbiA5MCUpLCBjxaluZyBuaMawIMSR4buZIHR14buVaSBuZ8aw4budaSBnacOhbSBo4buZIHThuq1wIHRydW5nIHThu6sgNTAgxJHhur9uIDU1LCBjaG8gdGjhuqV5IHBo4bqnbiBs4bubbiBo4buNYyBzaW5oIHRodeG7mWMgZ2lhIMSRw6xuaCBjw7MgxJFp4buBdSBraeG7h24ga2luaCB04bq/IOG7lW4gxJHhu4tuaCBuaMawbmcga2jDtG5nIHF1w6EgZMawIGdp4bqjLiDEkGnhu4F1IG7DoHkgcGjhuqNuIMOhbmggbcO0aSB0csaw4budbmcgc2luaCBob+G6oXQgdsOgIGjhu41jIHThuq1wIGNo4bunIHnhur91IHRodeG7mWMgdOG6p25nIGzhu5twIHRydW5nIGzGsHUsIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyB0aeG6v3AgY+G6rW4gdsOgIGNo4bqldCBsxrDhu6NuZyBnacOhbyBk4bulYyBj4bunYSBo4buNYyBzaW5oLg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIyMgKioyLjkgcGFyZW50X3dhc19pbl9jb2xsZWdlKioNCg0KIyMjIyAqKjIuOS4xIFRo4buRbmcga8OqIFThuqduIHN14bqldCoqDQoNCmBgYHtyfQ0KcGFyZW50X3dhc19pbl9jb2xsZWdlX2ZyZXEgPC0gdGFibGUoZGF0YSRwYXJlbnRfd2FzX2luX2NvbGxlZ2UpDQoNCnBhcmVudF93YXNfaW5fY29sbGVnZV9wY3QgPC0gdGFibGUoZGF0YSRwYXJlbnRfd2FzX2luX2NvbGxlZ2UpL3N1bShucm93KGRhdGEpKSoxMDANCg0KcGFyZW50X3dhc19pbl9jb2xsZWdlX3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIHBhcmVudF93YXNfaW5fY29sbGVnZSA9IG5hbWVzKHBhcmVudF93YXNfaW5fY29sbGVnZV9mcmVxKSwNCiAgRnJlcXVlbmN5ID0gYXMuaW50ZWdlcihwYXJlbnRfd2FzX2luX2NvbGxlZ2VfZnJlcSksDQogIFBlcmNlbnRhZ2UgPSByb3VuZChwYXJlbnRfd2FzX2luX2NvbGxlZ2VfcGN0LCAzKQ0KKQ0KY29sbmFtZXMocGFyZW50X3dhc19pbl9jb2xsZWdlX3RhYmxlKSA8LSBjKCJwYXJlbnRfd2FzX2luX2NvbGxlZ2UiLCAiRnJlcXVlbmN5IiwgInBhcmVudF93YXNfaW5fY29sbGVnZSIsICJQZXJjZW50YWdlICglKSIpDQoNCiMgSGnhu4NuIHRo4buLIGLhuqNuZyDEkeG6uXANCmtuaXRyOjprYWJsZSgNCiAgcGFyZW50X3dhc19pbl9jb2xsZWdlX3RhYmxlLA0KICBjYXB0aW9uID0gIkLhuqNuZyAyLjEwIFBow6JuIHBo4buRaSB0aGVvIGto4bqjIG7Eg25nIG5nxrDhu51pIGdpw6FtIGjhu5kgdGhlbyBo4buNYyBjYW8gxJHhurNuZyAtIHBhcmVudF93YXNfaW5fY29sbGVnZSINCikNCg0KYGBgDQoNCiMjIyMgKioyLjkuMiBUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3IsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD04fQ0KDQojIFbhur0gVHLhu7FjIHF1YW4gaG/DoSB0csOybg0KcGllKHBhcmVudF93YXNfaW5fY29sbGVnZV9mcmVxLA0KICAgIG1haW4gICA9ICJCaeG7g3UgxJHhu5MgMi4xMDogUGjDom4gcGjhu5FpIGto4bqjIG7Eg25nIG5nxrDhu51pIGdpw6FtIGjhu5kgdGhlbyBo4buNYyBjYW8gxJHhurNuZyAtIHBhcmVudF93YXNfaW5fY29sbGVnZSIsDQogICAgbGFiZWxzID0gcGFzdGUwKG5hbWVzKHBhcmVudF93YXNfaW5fY29sbGVnZV9mcmVxKSwNCiAgICAgICAgICAgICAgICAgICAgIiAoIiwgcm91bmQocGFyZW50X3dhc19pbl9jb2xsZWdlX3BjdCwgMyksICIlKSIpLA0KICAgIGNvbCAgICA9IGMoIiNDNEMxRTEiLCAiI0VFRGRCNiIsICIjRENBMkE3IikpIA0KYGBgDQoqKk5I4bqsTiBYw4lUOioqDQoNCkThu68gbGnhu4d1IGNobyB0aOG6pXkgNTIlIGjhu41jIHNpbmggY8OzIG5nxrDhu51pIGdpw6FtIGjhu5kgdOG7q25nIGjhu41jIGNhbyDEkeG6s25nIHRy4bufIGzDqm4sIHRyb25nIGtoaSA0OCUga2jDtG5nIGPDsy4gVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGPhu6dhIG5nxrDhu51pIGdpw6FtIGjhu5kga2jDoSBjw6JuIGLhurFuZyBuaMawbmcgbmdoacOqbmcgbmjhurkgduG7gSBwaMOtYSBjw7MgaOG7jWMgduG6pW4gY2FvLCDEkWnhu4F1IG7DoHkgcGjhuqduIG7DoG8gbMO9IGdp4bqjaSB2w6wgc2FvIHBo4bqnbiBs4bubbiBo4buNYyBzaW5oIMSR4bqhdCBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCDhu58gbeG7qWMgRmFpciAoNDIuNCUpIHbDoCBHb29kICg0NC4zJSkuIELDqm4gY+G6oW5oIMSRw7MsIMSRYSBz4buRIGjhu41jIHNpbmggxJHhur9uIHThu6sgZ2lhIMSRw6xuaCBjw7MgdGh1IG5o4bqtcCB0cnVuZyBiw6xuaCB2w6AgbmjDoCDhu58gZGnhu4duIHTDrWNoIHbhu6thIHBo4bqjaSwgY2hvIHRo4bqleSBtw7RpIHRyxrDhu51uZyBo4buNYyB04bqtcCB0dXkga2jDtG5nIHF1w6EgdGh14bqtbiBs4bujaSB24buBIHbhuq10IGNo4bqldCBuaMawbmcgxJHGsOG7o2MgaOG7lyB0cuG7oyB04buRdCB04burIHnhur91IHThu5EgdsSDbiBow7NhIHbDoCBuaOG6rW4gdGjhu6ljIGdpw6FvIGThu6VjIGPhu6dhIHBo4bulIGh1eW5oLg0KDQojIyMgKioyLjEwIHdpbGxfZ29fdG9fY29sbGVnZSoqDQoNCiMjIyMgKioyLjEwLjEgVGjhu5FuZyBrw6ogVOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQp3aWxsX2dvX3RvX2NvbGxlZ2VfZnJlcSA8LSB0YWJsZShkYXRhJHdpbGxfZ29fdG9fY29sbGVnZSkNCg0Kd2lsbF9nb190b19jb2xsZWdlX3BjdCA8LSB0YWJsZShkYXRhJHdpbGxfZ29fdG9fY29sbGVnZSkvc3VtKG5yb3coZGF0YSkpKjEwMA0KDQp3aWxsX2dvX3RvX2NvbGxlZ2VfdGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgd2lsbF9nb190b19jb2xsZWdlID0gbmFtZXMod2lsbF9nb190b19jb2xsZWdlX2ZyZXEpLA0KICBGcmVxdWVuY3kgPSBhcy5pbnRlZ2VyKHdpbGxfZ29fdG9fY29sbGVnZV9mcmVxKSwNCiAgUGVyY2VudGFnZSA9IHJvdW5kKHdpbGxfZ29fdG9fY29sbGVnZV9wY3QsIDMpDQopDQpjb2xuYW1lcyh3aWxsX2dvX3RvX2NvbGxlZ2VfdGFibGUpIDwtIGMoIndpbGxfZ29fdG9fY29sbGVnZSIsICJGcmVxdWVuY3kiLCAid2lsbF9nb190b19jb2xsZWdlIiwgIlBlcmNlbnRhZ2UgKCUpIikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIMSR4bq5cA0Ka25pdHI6OmthYmxlKA0KICB3aWxsX2dvX3RvX2NvbGxlZ2VfdGFibGUsDQogIGNhcHRpb24gPSAiQuG6o25nIDIuMTEgUGjDom4gcGjhu5FpIHRoZW8ga2jhuqMgbsSDbmcgcXV54bq/dCDEkeG7i25oIHRoZW8gaOG7jWMgY2FvIMSR4bqzbmcgY+G7p2EgaOG7jWMgc2luaCAtIHdpbGxfZ29fdG9fY29sbGVnZSINCikNCg0KYGBgDQoNCiMjIyMgKioyLjEwLjIgVHLhu7FjIHF1YW4gaMOzYSoqDQoNCmBgYHtyLCBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9OH0NCg0KIyBW4bq9IFRy4buxYyBxdWFuIGhvw6EgdHLDsm4NCnBpZSh3aWxsX2dvX3RvX2NvbGxlZ2VfZnJlcSwNCiAgICBtYWluICAgPSAiQmnhu4N1IMSR4buTIDIuMTE6IFBow6JuIHBo4buRaXRoZW8ga2jhuqMgbsSDbmcgcXV54bq/dCDEkeG7i25oIHRoZW8gaOG7jWMgY2FvIMSR4bqzbmcgY+G7p2EgaOG7jWMgc2luaCAgLSB3aWxsX2dvX3RvX2NvbGxlZ2UiLA0KICAgIGxhYmVscyA9IHBhc3RlMChuYW1lcyh3aWxsX2dvX3RvX2NvbGxlZ2VfZnJlcSksDQogICAgICAgICAgICAgICAgICAgICIgKCIsIHJvdW5kKHdpbGxfZ29fdG9fY29sbGVnZV9wY3QsIDMpLCAiJSkiKSwNCiAgICBjb2wgICAgPSBjKCIjQzRDMUUxIiwgIiNFRURkQjYiLCAiI0RDQTJBNyIpKSANCmBgYA0KDQoqKk5I4bqsTiBYw4lUOioqDQoNCkvhur90IHF14bqjIHThu6sgQuG6o25nIDIuMTEgY2hvIHRo4bqleSBo4buNYyBzaW5oIMSRxrDhu6NjIGNoaWEgxJHhu4F1IHbhu4Ega2jhuqMgbsSDbmcgcXV54bq/dCDEkeG7i25oIHRoZW8gaOG7jWMgY2FvIMSR4bqzbmcsIHbhu5tpIDUwJSB0cuG6oyBs4budaSBjw7MgdsOgIDUwJSB0cuG6oyBs4budaSBraMO0bmcsIHBo4bqjbiDDoW5oIHPhu7EgcGjDom4gaMOzYSByw7UgbsOpdCB0cm9uZyDEkeG7i25oIGjGsOG7m25nIGjhu41jIHThuq1wIHTGsMahbmcgbGFpLiBN4bq3YyBkw7kgZOG7ryBsaeG7h3Ug4bufIELhuqNuZyAyLjEwIGNobyB0aOG6pXkgNTIlIG5nxrDhu51pIGdpw6FtIGjhu5kgxJHDoyB04burbmcgaOG7jWMgY2FvIMSR4bqzbmcgdHLhu58gbMOqbiwgxJFp4buBdSBuw6B5IGtow7RuZyDEkeG7k25nIG5naMSpYSB24bubaSB2aeG7h2MgaOG7jWMgc2luaCBz4bq9IHRp4bq/cCBu4buRaSDEkeG7i25oIGjGsOG7m25nIGjhu41jIHThuq1wIMSRw7MuIFF1eeG6v3QgxJHhu4tuaCB0aGVvIGjhu41jIGNhbyDEkeG6s25nIGPDsyB0aOG7gyBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIG5oaeG7gXUgeeG6v3UgdOG7kSBraMOhYyBuaGF1IG5oxrAga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgKGNo4buJIDEzLjMlIMSR4bqhdCBsb+G6oWkgZ2nhu49pKSwgdGh1IG5o4bqtcCBj4bunYSBnaWEgxJHDrG5oICjEkWEgc+G7kSDhu58gbeG7qWMgYWRlcXVhdGUgaG/hurdjIGF2ZXJhZ2UpLCB2w6AgZGnhu4duIHTDrWNoIG5ow6Ag4bufIChwaOG6p24gbOG7m24gbMOgIG5o4buPIHbDoCB24burYSksIGNobyB0aOG6pXkgbmhp4buBdSBo4buNYyBzaW5oIHbhuqtuIGPDsm4gZ+G6t3AgaOG6oW4gY2jhur8gduG7gSDEkWnhu4F1IGtp4buHbiB24bqtdCBjaOG6pXQgaG/hurdjIHRoaeG6v3UgxJHhu5luZyBs4buxYy4gTmdvw6BpIHJhLCBk4buvIGxp4buHdSB04burIELhuqNuZyAyLjQgduG7gSBt4bupYyDEkeG7mSBo4bupbmcgdGjDuiBo4buNYyB04bqtcCBjxaluZyBwaOG6o24gw6FuaCBz4buxIHRoaeG6v3UgY2jhuq9jIGNo4bqvbiwga2hpIGPDsyDEkeG6v24gMjYuMSUgaOG7jWMgc2luaCBj4bqjbSB0aOG6pXkga2jDtG5nIHLDtSByw6BuZyB24buBIGjhu6luZyB0aMO6IGjhu41jLCDEkWnhu4F1IG7DoHkgY8OzIHRo4buDIGtoaeG6v24gbmhp4buBdSBlbSBraMO0bmcgxJHGsGEgcmEgxJHGsOG7o2MgcXV54bq/dCDEkeG7i25oIHLDtSByw6BuZyB24buBIHZp4buHYyBo4buNYyB0aeG6v3Agc2F1IHBo4buVIHRow7RuZy4gTmjGsCB24bqteSwgbeG6t2MgZMO5IG3DtGkgdHLGsOG7nW5nIGdpYSDEkcOsbmggY8OzIHBo4bqnbiBo4buXIHRy4bujLCB0aMOsIHF1eeG6v3QgxJHhu4tuaCBo4buNYyB0aeG6v3AgbMOqbiBjYW8gxJHhurNuZyB24bqrbiBsw6AgbeG7mXQgduG6pW4gxJHhu4EgcGjhu6ljIHThuqFwLCDEkcOyaSBo4buPaSBz4buxIHTGsCB24bqlbiwgxJHhu4tuaCBoxrDhu5tuZyB2w6AgaOG7lyB0cuG7oyBt4bqhbmggbeG6vSBoxqFuIHThu6sgcGjDrWEgbmjDoCB0csaw4budbmcgdsOgIHjDoyBo4buZaS4NCg0KDQojIyMgKioyLjExIEJp4bq/biBhdmVyYWdlX2dyYWRlcyoqDQoNCiMjIyMgKioyLjExLjEgVGjhu5FuZyBrw6ogVOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQphdmVyYWdlX2dyYWRlc19mcmVxIDwtIHRhYmxlKGRhdGEkYXZlcmFnZV9ncmFkZXMpDQoNCmF2ZXJhZ2VfZ3JhZGVzX3BjdCA8LSB0YWJsZShkYXRhJGF2ZXJhZ2VfZ3JhZGVzKS9zdW0obnJvdyhkYXRhKSkqMTAwDQoNCmF2ZXJhZ2VfZ3JhZGVzX3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIGF2ZXJhZ2VfZ3JhZGVzID0gbmFtZXMoYXZlcmFnZV9ncmFkZXNfZnJlcSksDQogIEZyZXF1ZW5jeSA9IGFzLmludGVnZXIoYXZlcmFnZV9ncmFkZXNfZnJlcSksDQogIFBlcmNlbnRhZ2UgPSByb3VuZChhdmVyYWdlX2dyYWRlc19wY3QsIDMpDQopDQpjb2xuYW1lcyhhdmVyYWdlX2dyYWRlc190YWJsZSkgPC0gYygiYXZlcmFnZV9ncmFkZXMiLCAiRnJlcXVlbmN5IiwgImF2ZXJhZ2VfZ3JhZGVzIiwgIlBlcmNlbnRhZ2UgKCUpIikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIMSR4bq5cA0Ka25pdHI6OmthYmxlKA0KICBhdmVyYWdlX2dyYWRlc190YWJsZSwNCiAgY2FwdGlvbiA9ICJC4bqjbmcgMi4xMSBQaMOibiBwaOG7kWkgdGhlbyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBj4bunYSBo4buNYyBzaW5oIC0gYXZlcmFnZV9ncmFkZXMiDQopDQoNCmBgYA0KDQojIyMjICoqMi4xMS4yIFRy4buxYyBxdWFuIGjDs2EqKg0KDQpgYGB7ciwgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTh9DQoNCiMgVuG6vSBUcuG7sWMgcXVhbiBob8OhIHRyw7JuDQpwaWUoYXZlcmFnZV9ncmFkZXNfZnJlcSwNCiAgICBtYWluICAgPSAiQmnhu4N1IMSR4buTIDIuMTE6IFBow6JuIHBo4buRaSBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBj4bunYSBo4buNYyBzaW5oIChhdmVyYWdlX2dyYWRlcykiLA0KICAgIGxhYmVscyA9IHBhc3RlMChuYW1lcyhhdmVyYWdlX2dyYWRlc19mcmVxKSwNCiAgICAgICAgICAgICAgICAgICAgIiAoIiwgcm91bmQoYXZlcmFnZV9ncmFkZXNfcGN0LCAzKSwgIiUpIiksDQogICAgY29sICAgID0gYygiI0M0QzFFMSIsICIjRUVEZEI2IiwgIiNEQ0EyQTciKSkgDQpgYGANCg0KROG7sWEgdsOgbyBC4bqjbmcgMi4xMSB24buBIHBow6JuIHBo4buRaSBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBj4bunYSBo4buNYyBzaW5oLCB0YSB0aOG6pXkgbmjDs20gY8OzIHRow6BuaCB0w61jaCBHb29kIGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgduG7m2kgNDQuMyUgKDQ0MyBo4buNYyBzaW5oKSwgdGnhur9wIHRoZW8gbMOgIG5ow7NtIEZhaXIgY2hp4bq/bSA0Mi40JSAoNDI0IGjhu41jIHNpbmgpLCB2w6AgbmjDs20gRXhjZWxsZW50IGNoaeG6v20gdOG7tyBs4buHIHRo4bqlcCBuaOG6pXQgduG7m2kgMTMuMyUgKDEzMyBo4buNYyBzaW5oKS4NCg0KKipOaOG6rW4geMOpdDoqKiBQaOG6p24gbOG7m24gaOG7jWMgc2luaCDEkeG6oXQga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgdOG7qyBt4bupYyBGYWlyIMSR4bq/biBHb29kLCB0aOG7gyBoaeG7h24gY2jhuqV0IGzGsOG7o25nIGjhu41jIHThuq1wIHRydW5nIGLDrG5oIMSR4bq/biBraMOhIHBo4buVIGJp4bq/biB0cm9uZyBt4bqrdSBraOG6o28gc8OhdC4gVOG7tyBs4buHIGjhu41jIHNpbmggeHXhuqV0IHPhuq9jIGPDsm4ga2jDoSBraGnDqm0gdOG7kW4sIGNo4buJIGtob+G6o25nIDEvOCB04buVbmcgc+G7kS4gxJBp4buBdSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCBj4bqjIG7Eg25nIGzhu7FjIGjhu41jIHThuq1wIHbDoCBjw6FjIMSRaeG7gXUga2nhu4duIGjhu5cgdHLhu6MgaOG7jWMgdOG6rXAgaGnhu4duIHThuqFpLCB04burIMSRw7MgZ+G7o2kgw70gY+G6p24gY8OhYyBiaeG7h24gcGjDoXAgbsOibmcgY2FvIGNo4bqldCBsxrDhu6NuZyBnacOhbyBk4bulYyDEkeG7gyBnacO6cCBuaGnhu4F1IGjhu41jIHNpbmggxJHhuqF0IGvhur90IHF14bqjIGNhbyBoxqFuLg0KDQoNCg0KDQoNCg0KDQojIyAqKlBI4bqmTiAzOsav4buaQyBMxq/hu6JORyBLSE/huqJORyBWw4AgS0nhu4JNIMSQ4buKTkggR0nhuqIgVEhVWeG6vlQgQ0hPIFThu7YgTOG7hiAoTeG7mFQgQknhur5OKSoqDQoNCioqS2hv4bqjbmcgdGluIGPhuq15IGNobyB04bu3IGzhu4cgKHByb3BvcnRpb24pOioqDQoNCmBgYHtyfQ0KIyBGdW5jdGlvbg0KcHJvcDEuaW50ZXJ2YWwgPC0gZnVuY3Rpb24oeCxuLGNvbmYubGV2ZWwpICMgZnVuY3Rpb24gb2YgMS1wcm9wb3J0aW9uIENJIGZvciBwDQp7DQpwIDwtIHgvbg0Kei5jcml0IDwtIC0xKnFub3JtKCgxLWNvbmYubGV2ZWwpLzIpDQptYXJnaW4uZXJyb3IgPC0gei5jcml0KnNxcnQocCooMS1wKS9uKQ0KY2kubG93ZXIgPC0gcCAtIG1hcmdpbi5lcnJvcg0KY2kudXBwZXIgPC0gcCArIG1hcmdpbi5lcnJvcg0KZGF0IDwtIGMocCwgei5jcml0LCBtYXJnaW4uZXJyb3IsIGNpLmxvd2VyLCBjaS51cHBlcikNCm5hbWVzKGRhdCkgPC0gYygiTWVhbiIsICJDcml0aWNhbCBWYWx1ZSIsICJNYXJnaW4gb2YgRXJyb3IiLCAiQ0kgbG93ZXIiLCAiQ0kgdXBwZXIiKQ0KcmV0dXJuKGRhdCkNCn0NCmBgYA0KDQojIyMgKiozLjEgYXZlcmFnZV9ncmFkZXMtRmFpcioqDQoNCiMjIyMgKiozLjEuMSDGr+G7m2MgbMaw4bujbmcgS2hv4bqjbmcgVGluIGPhuq15OioqDQoNCmBgYHtyfQ0KIyBT4buRIGzGsOG7o25nIGjhu41jIHNpbmggY8OzIGvhur90IHF14bqjIGjhu41jIHThuq1wIHRodeG7mWMgbmjDs20gIkZhaXIiDQp4RmFpciA8LSBzdW0oZGF0YSRhdmVyYWdlX2dyYWRlcyA9PSAiRmFpciIpDQojIMav4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlDQpwcm9wMS5pbnRlcnZhbCh4RmFpcixucm93KGRhdGEpLDAuOTUpICMgMS1wcm9wb3J0aW9uIDk1JSBDSSBmb3IgcA0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBL4bq/dCBxdeG6oyBwaMOibiB0w61jaCBjaG8gdGjhuqV5IHThu7cgbOG7hyBo4buNYyBzaW5oIGPDsyBo4buNYyBs4buxYyAiRmFpciIgdHJvbmcgbeG6q3UgbMOgIDQyLjQlIChNZWFuID0gMC40MjQpLiDEkMOieSBsw6AgxrDhu5tjIGzGsOG7o25nIHThu5F0IGNobyB04bu3IGzhu4cgdGjhu7FjIHThur8gdHJvbmcgcXXhuqduIHRo4buDLiBHacOhIHRy4buLIHThu5tpIGjhuqFuIChDcml0aWNhbCBWYWx1ZSA9IDEuOTYpIMSRxrDhu6NjIGzhuqV5IHThu6sgcGjDom4gcGjhu5FpIGNodeG6qW4g4bupbmcgduG7m2kgbeG7qWMgdGluIGPhuq15IDk1JSwgZMO5bmcgxJHhu4MgdMOtbmggc2FpIHPhu5EgYmnDqm4uDQoNCi0gU2FpIHPhu5EgYmnDqm4gKE1hcmdpbiBvZiBFcnJvciA9IDAuMDMwNikgY2hvIHRo4bqleSBt4bupYyDEkeG7mSBraMO0bmcgY2jhuq9jIGNo4bqvbiBraGkgZMO5bmcgdHJ1bmcgYsOsbmggbeG6q3UgxJHhu4MgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyB04buVbmcgdGjhu4MuIE5o4budIGPhu6EgbeG6q3UgxJHhu6cgbOG7m24sIHNhaSBz4buRIG5o4buPIGdpw7pwIGtob+G6o25nIHRpbiBj4bqteSBjaMOtbmggeMOhYyBoxqFuLg0KDQotIFThu6sgxJHDsywga2hv4bqjbmcgdGluIGPhuq15IDk1JSBkYW8gxJHhu5luZyB04burIDM5LjM0JSDEkeG6v24gNDUuNDYlIChDSSBsb3dlciA9IDAuMzkzNCwgQ0kgdXBwZXIgPSAwLjQ1NDYpLiDEkGnhu4F1IG7DoHkgbmdoxKlhIGzDoCB24bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlLCB04bu3IGzhu4cgdGjhu7FjIHPhu7EgaOG7jWMgc2luaCBsb+G6oWkgIkZhaXIiIG7hurFtIHRyb25nIGtob+G6o25nIG7DoHkuIEvhur90IHF14bqjIGNobyB0aOG6pXkgY+G6p24gY8OzIGNow61uaCBzw6FjaCBo4buXIHRy4bujIG5ow7NtIGjhu41jIHNpbmggdHJ1bmcgYsOsbmggxJHhu4MgbsOibmcgY2FvIGNo4bqldCBsxrDhu6NuZyBnacOhbyBk4bulYy4NCg0KDQojIyMjICoqMy4xLjIgS2nhu4NtIMSR4buLbmggR2nhuqMgdGh1eeG6v3Q6KioNCg0KQsOgaSB0b8OhbiBjw7MgZ2nhuqMgdGh1eeG6v3QgbmjGsCBzYXU6ICQkDQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2x9DQpIXzA6IFw7IHAgPSAwLjQgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBo4buNYyBzaW5oIGjhu41jIGzhu7FjIEZhaXIgdHJvbmcgdOG7lW5nIHRo4buDIGzDoCDEkcO6bmcgNDAlKX0gXFwgDQpIXzE6IFw7IHAgXG5lIDAuNCBccXVhZCBcdGV4dHsoVOG7tyBs4buHIGjhu41jIHNpbmggaOG7jWMgbOG7sWMgRmFpciBraMOhYyA0MCUsIGPDsyB0aOG7gyBjYW8gaMahbiBob+G6t2MgdGjhuqVwIGjGoW4pfQ0KXGVuZHthcnJheX0NClxyaWdodC4kJA0KDQoNCmBgYHtyfQ0KcHJvcC50ZXN0KHg9eEZhaXIsIG49bnJvdyhkYXRhKSwgcD0wLjQsIGNvcnJlY3Q9RkFMU0UpDQoNCmBgYA0KLSBW4bubaSBwLXZhbHVlID0gMC4xMjEzIGzhu5tuIGjGoW4gbeG7qWMgw70gbmdoxKlhICRcYWxwaGEgPSA1JSQsIHRhIGtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzA6IHAgPSAwLjQkLiBOw7NpIGPDoWNoIGtow6FjLCBjaMawYSB0aOG7gyBraOG6s25nIMSR4buLbmggcuG6sW5nIHThu7cgbOG7hyBo4buNYyBzaW5oIGPDsyBo4buNYyBs4buxYyBsb+G6oWkgIkZhaXIiIGtow6FjIDQwJSB0cm9uZyB04buVbmcgdGjhu4MuIFR1eSBnacOhIHRy4buLIMaw4bubYyBsxrDhu6NuZyB04burIG3huqt1IGzDoCA0Mi40JSAocCA9IDAuNDI0KSwgbmjGsG5nIHPhu7EgY2jDqm5oIGzhu4djaCBuw6B5IGNoxrBhIMSR4bunIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgdGjhu7FjIHThur8gZGFvIMSR4buZbmcgdOG7qyAzOS4zNyUgxJHhur9uIDQ1LjQ5JSwgbmdoxKlhIGzDoCA0MCUgduG6q24gbuG6sW0gdHJvbmcga2hv4bqjbmcgdGluIGPhuq15IG7Dqm4gZ2nhuqMgdGh1eeG6v3QgJEhfMCQgbMOgIHBow7kgaOG7o3AuIEvhur90IHF14bqjIG7DoHkgY2hvIHRo4bqleSB04bu3IGzhu4cgaOG7jWMgc2luaCAiRmFpciIgY8OzIHRo4buDIGfhuqduIHbhu5tpIGdp4bqjIMSR4buLbmggYmFuIMSR4bqndSAoNDAlKSwgdsOgIGNoxrBhIGPDsyBi4bqxbmcgY2jhu6luZyByw7UgcsOgbmcgxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyBuw7MgY2FvIGjGoW4gaG/hurdjIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDLg0KDQojIyMgKiozLjIgcGFyZW50X3NhbGFyeS1sb3cqKg0KDQojIyMjICoqMy4yLjEgxq/hu5tjIGzGsOG7o25nIEtob+G6o25nIFRpbiBj4bqteToqKg0KDQpgYGB7cn0NCiMgU+G7kSBsxrDhu6NuZyBuZ8aw4budaSBnacOhbSBo4buZIGPhu6dhIGjhu41jIHNpbmggY8OzIHRodSBuaOG6rXAgbmjDs20gImxvdyINCnhsb3cgPC0gc3VtKGRhdGEkcGFyZW50X3NhbGFyeSA9PSAibG93IikNCiMgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUNCnByb3AxLmludGVydmFsKHhsb3csbnJvdyhkYXRhKSwwLjk1KSAjIDEtcHJvcG9ydGlvbiA5NSUgQ0kgZm9yIHANCmBgYA0KKipOSOG6rE4gWMOJVDoqKg0KDQotIFThu7cgbOG7hyBuZ8aw4budaSBnacOhbSBo4buZIGPDsyB0aHUgbmjhuq1wIHRodeG7mWMgbmjDs20gImxvdyIgdHJvbmcgbeG6q3UgbMOgIDYuNyUgKE1lYW4gPSAwLjA2NykuIMSQw6J5IGzDoCBjb24gc+G7kSB0xrDGoW5nIMSR4buRaSBuaOG7jywgY2hvIHRo4bqleSBwaOG6p24gbOG7m24gbmfGsOG7nWkgZ2nDoW0gaOG7mSBjw7MgdGh1IG5o4bqtcCBjYW8gaMahbiBt4bupYyBuw6B5LiBHacOhIHRy4buLIHThu5tpIGjhuqFuIChDcml0aWNhbCBWYWx1ZSA9IDEuOTYpIMSRxrDhu6NjIHPhu60gZOG7pW5nIHThu6sgcGjDom4gcGjhu5FpIGNodeG6qW4gduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlLCBuaOG6sW0gdMOtbmggc2FpIHPhu5EgYmnDqm4uDQoNCi0gU2FpIHPhu5EgYmnDqm4gKE1hcmdpbiBvZiBFcnJvciA9IDAuMDE1NSkgcGjhuqNuIMOhbmggxJHhu5kga2jDtG5nIGNo4bqvYyBjaOG6r24ga2hpIGTDuW5nIHThu7cgbOG7hyBt4bqrdSDEkeG7gyDGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHIHThu5VuZyB0aOG7gy4gVuG7m2kgc2FpIHPhu5EgdMawxqFuZyDEkeG7kWkgbmjhu48sIMaw4bubYyBsxrDhu6NuZyDEkcaw4bujYyB4ZW0gbMOgIMSRw6FuZyB0aW4gY+G6rXkuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDUuMTUlIMSR4bq/biA4LjI1JSAoQ0kgbG93ZXIgPSAwLjA1MTUsIENJIHVwcGVyID0gMC4wODI1KS4NCg0KLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB04bu3IGzhu4cgbmfGsOG7nWkgZ2nDoW0gaOG7mSB0aHUgbmjhuq1wIHRo4bqlcCBsw6AgdMawxqFuZyDEkeG7kWkgw610LCBnacO6cCBuaMOgIHF14bqjbiBsw70gaGnhu4N1IHLDtSBoxqFuIHbhu4EgxJHhurdjIMSRaeG7g20ga2luaCB04bq/IGPhu6dhIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyBraOG6o28gc8OhdCB2w6AgdOG7qyDEkcOzIMSRxrBhIHJhIGNow61uaCBzw6FjaCBo4buXIHRy4bujIHBow7kgaOG7o3AgaMahbiBu4bq/dSBj4bqnbiB0aGnhur90Lg0KDQojIyMjICoqMy4yLjIgS2nhu4NtIMSR4buLbmggR2nhuqMgdGh1eeG6v3Q6KioNCg0KQsOgaSB0b8OhbiBjw7MgZ2nhuqMgdGh1eeG6v3QgbmjGsCBzYXU6ICQkDQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2x9DQpIXzA6IFw7IHAgPSAwLjA1IFxxdWFkIFx0ZXh0eyhU4bu3IGzhu4cgbmfGsOG7nWkgZ2nDoW0gaOG7mSBjw7MgdGh1IG5o4bqtcCB0aHXhu5ljIG5ow7NtICJsb3ciIGzDoCAgNSUpfSBcXCANCkhfMTogXDsgcCA+IDAuMDUgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBuZ8aw4budaSBnacOhbSBo4buZIGPDsyB0aHUgbmjhuq1wIHRodeG7mWMgbmjDs20gImxvdyIgY2FvIGjGoW4gNSUpfQ0KXGVuZHthcnJheX0NClxyaWdodC4kJA0KDQpgYGB7cn0NCnByb3AudGVzdCh4PXhsb3csIG49bnJvdyhkYXRhKSwgcD0wLjA1LGFsdGVybmF0aXZlID0gImdyZWF0ZXIiLCBjb3JyZWN0PUZBTFNFKQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIHThu4kgbOG7hyBt4buZdCBt4bqrdSBraMO0bmcgc+G7rSBk4bulbmcgaGnhu4d1IGNo4buJbmggbGnDqm4gdOG7pWMgY2hvIGdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogJFxjaGleMiA9IDYuMDgkIHbhu5tpIDEgYuG6rWMgdOG7sSBkbyB2w6AgcC12YWx1ZSA9IDAuMDA2ODIsIG5o4buPIGjGoW4gbeG7qWMgw70gbmdoxKlhIDUlLiBEbyDEkcOzLCB0YSBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkIHbDoCBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90ICAkSF8xJCwgdOG7qWMgbMOgIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBuZ8aw4budaSBnacOhbSBo4buZIHRodSBuaOG6rXAgbmjDs20gImxvdyIgY2FvIGjGoW4gNSUuDQoNCsSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHRyb25nIG3huqt1IGto4bqjbyBzw6F0LCBuaMOzbSBuZ8aw4budaSBnacOhbSBo4buZIGPDsyB0aHUgbmjhuq1wIG5ow7NtICJsb3ciIGNoaeG6v20gdOG7tyBs4buHIMSRw6FuZyBr4buDIGjGoW4gc28gduG7m2kgZ2nhuqMgxJHhu4tuaCB0csaw4bubYyDEkcOzLCB04burIMSRw7MgY+G6o25oIGLDoW8gcuG6sW5nIGPDoWMgY2jDrW5oIHPDoWNoIGjhu5cgdHLhu6MgdsOgIGNhbiB0aGnhu4dwIHTDoGkgY2jDrW5oIGTDoG5oIGNobyBuaMOzbSBuw6B5IGzDoCBj4bqnbiB0aGnhur90IMSR4buDIMSR4bqjbSBi4bqjbyBz4buxIGPDtG5nIGLhurFuZyB2w6AgbsOibmcgY2FvIMSRaeG7gXUga2nhu4duIHPhu5FuZyBj4bunYSDEkeG7kWkgdMaw4bujbmcgY8OzIGhvw6BuIGPhuqNuaCBraMOzIGtoxINuLg0KDQojIyMgKiozLjMgaW50ZXJlc3QtVW5jZXJ0YWluKioNCg0KIyMjIyAqKjMuMy4xIMav4bubYyBsxrDhu6NuZyBLaG/huqNuZyBUaW4gY+G6rXk6KioNCg0KDQpgYGB7cn0NCiMgU+G7kSBsxrDhu6NuZyBo4buNYyBzaW5oIGtow7RuZyByw7UgduG7gSDEkeG7mSB0aMOtY2ggdGjDuiB0cm9uZyBo4buNYyB04bqtcA0KeFVuY2VydGFpbiA8LSBzdW0oZGF0YSRpbnRlcmVzdCA9PSAiVW5jZXJ0YWluIikNCiMgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUNCnByb3AxLmludGVydmFsKHhVbmNlcnRhaW4sbnJvdyhkYXRhKSwwLjk1KSAjIDEtcHJvcG9ydGlvbiA5NSUgQ0kgZm9yIHANCmBgYA0KKipOSOG6rE4gWMOJVDoqKg0KDQotIFThu7cgbOG7hyBo4buNYyBzaW5oIGtow7RuZyByw7UgduG7gSDEkeG7mSB0aMOtY2ggdGjDuiB0cm9uZyBo4buNYyB04bqtcCB0cm9uZyBt4bqrdSBsw6AgMjYuMSUgKE1lYW4gPSAwLjI2MSkuIMSQw6J5IGzDoCBt4buZdCB04bu3IGzhu4cga2jDoSDEkcOhbmcga+G7gywgcGjhuqNuIMOhbmggbeG7mXQgbmjDs20gaOG7jWMgc2luaCBjw7JuIGRvIGThu7EgaG/hurdjIGNoxrBhIHjDoWMgxJHhu4tuaCDEkcaw4bujYyBt4bupYyDEkeG7mSBxdWFuIHTDom0gY+G7p2EgbcOsbmggxJHhu5FpIHbhu5tpIHZp4buHYyBo4buNYy4NCg0KLSBHacOhIHRy4buLIHThu5tpIGjhuqFuIChDcml0aWNhbCBWYWx1ZSA9IDEuOTYpIMSRxrDhu6NjIHPhu60gZOG7pW5nIHThu6sgcGjDom4gcGjhu5FpIGNodeG6qW4gduG7m2kgbeG7qWMgw70gbmdoxKlhIDUlLCBuaOG6sW0gdMOtbmggc2FpIHPhu5EgYmnDqm4uIFNhaSBz4buRIGJpw6puIChNYXJnaW4gb2YgRXJyb3IgPSAwLjAyNzIpIGNobyBiaeG6v3QgxJHhu5kgY2jDrW5oIHjDoWMgY+G7p2EgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyBuw6B5Lg0KDQotIEThu7FhIHRyw6puIMSRw7MsIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBkYW8gxJHhu5luZyB04burIDIzLjM4JSDEkeG6v24gMjguODIlIChDSSBsb3dlciA9IDAuMjMzOCwgQ0kgdXBwZXIgPSAwLjI4ODIpLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB24bubaSDEkeG7mSB0aW4gY+G6rXkgOTUlLCB04bu3IGzhu4cgaOG7jWMgc2luaCBraMO0bmcgeMOhYyDEkeG7i25oIMSRxrDhu6NjIMSR4buZIHRow61jaCB0aMO6IHRyb25nIGjhu41jIHThuq1wIHRo4buxYyB04bq/IG7hurFtIHRyb25nIGtob+G6o25nIHRyw6puLg0KDQotIEvhur90IHF14bqjIG7DoHkgbmjhuqVuIG3huqFuaCBz4buxIGPhuqduIHRoaeG6v3QgY+G7p2EgY8OhYyBiaeG7h24gcGjDoXAgaOG7lyB0cuG7oyBnacO6cCBo4buNYyBzaW5oIGhp4buDdSByw7UgdsOgIHjDoWMgxJHhu4tuaCDEkcaw4bujYyBz4bufIHRow61jaCBo4buNYyB04bqtcCwgdOG7qyDEkcOzIG7Dom5nIGNhbyDEkeG7mW5nIGzhu7FjIHbDoCBoaeG7h3UgcXXhuqMgaOG7jWMgdOG6rXAgY+G7p2EgbmjDs20gaOG7jWMgc2luaCBuw6B5Lg0KDQojIyMjICoqMy4zLjIgS2nhu4NtIMSR4buLbmggR2nhuqMgdGh1eeG6v3Q6KioNCg0KQsOgaSB0b8OhbiBjw7MgZ2nhuqMgdGh1eeG6v3QgbmjGsCBzYXU6ICQkDQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2x9DQpIXzA6IFw7IHAgPSAwLjExIFxxdWFkIFx0ZXh0eyhU4bu3IGzhu4cgaOG7jWMgc2luaCBraMO0bmcgcsO1IHbhu4EgxJHhu5kgdGjDrWNoIHRow7ogdHJvbmcgaOG7jWMgdOG6rXAgbMOgICAxMSUpfSBcXCANCkhfMTogXDsgcCA+IDAuMTEgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBo4buNYyBzaW5oIGtow7RuZyByw7UgduG7gSDEkeG7mSB0aMOtY2ggdGjDuiB0cm9uZyBo4buNYyB04bqtcCBsw6AgMTElKX0NClxlbmR7YXJyYXl9DQpccmlnaHQuJCQNCg0KDQpgYGB7cn0NCnByb3AudGVzdCh4VW5jZXJ0YWluLG5yb3coZGF0YSksIHA9MC4xMSxhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29ycmVjdD1GQUxTRSkNCmBgYA0KLSBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCB04buJIGzhu4cgbeG7mXQgbeG6q3Uga2jDtG5nIHPhu60gZOG7pW5nIGhp4buHdSBjaOG7iW5oIGxpw6puIHThu6VjIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyB0aOG7kW5nIGvDqiAkXGNoaV4yID0gMjMyLjkkIHbhu5tpIDEgYuG6rWMgdOG7sSBkbyB2w6AgcC12YWx1ZSA8IDIuMiBcdGltZXMgMTBeey0xNn0kLCBuaOG7jyBoxqFuIHLhuqV0IG5oaeG7gXUgbeG7qWMgw70gbmdoxKlhIDUlLiBWw6wgduG6rXksIHRhIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfMCQgdsOgIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgdGhheSB0aOG6vyAkSF8xJC4NCg0KLSBU4bu3IGzhu4cgbeG6q3UgxrDhu5tjIGzGsOG7o25nIGzDoCAyNi4xJSAocCA9IDAuMjYxKSwgY2FvIGjGoW4gbmhp4buBdSBzbyB24bubaSB04bu3IGzhu4cgZ2nhuqMgxJHhu4tuaCAxMSUuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgbeG7mXQgcGjDrWEgY2hvIHThu7cgbOG7hyB0aOG7sWMgdOG6vyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDIzLjg4JSDEkeG6v24gMTAwJSwga2jhurNuZyDEkeG7i25oIHThu7cgbOG7hyBo4buNYyBzaW5oIGtow7RuZyByw7UgduG7gSDEkeG7mSB0aMOtY2ggdGjDuiB0cm9uZyBo4buNYyB04bqtcCB0aOG7sWMgc+G7sSBs4bubbiBoxqFuIG3hu6ljIGdp4bqjIMSR4buLbmguDQoNCi0gS+G6v3QgcXXhuqMgbsOgeSBjaG8gdGjhuqV5IG3hu5l0IHThu7cgbOG7hyDEkcOhbmcga+G7gyBo4buNYyBzaW5oIGPDsm4gZG8gZOG7sSB24buBIHPhu7EgaOG7qW5nIHRow7ogdHJvbmcgaOG7jWMgdOG6rXAsIHThu6sgxJHDsyBuaOG6pW4gbeG6oW5oIHPhu7EgY+G6p24gdGhp4bq/dCBj4bunYSBjw6FjIGJp4buHbiBwaMOhcCBo4buXIHRy4bujIMSR4buDIHTEg25nIMSR4buZbmcgbOG7sWMgdsOgIHPhu7EgcXVhbiB0w6JtIGPhu6dhIGPDoWMgZW0gxJHhu5FpIHbhu5tpIHF1w6EgdHLDrG5oIGjhu41jIHThuq1wLg0KDQojIyMgKiozLjQgcGFyZW50X3dhc19pbl9jb2xsZWdlLVRSVUUqKg0KDQojIyMjICoqMy40LjEgxq/hu5tjIGzGsOG7o25nIEtob+G6o25nIFRpbiBj4bqteToqKg0KDQpgYGB7cn0NCiMgU+G7kSBsxrDhu6NuZyAgaOG7jWMgc2luaCBjw7MgbmfGsOG7nWkgZ2nDoW0gaOG7mSB0aGVvIGjhu41jIGNhbyDEkeG6s25nIA0KeFRSVUVwIDwtIHN1bShkYXRhJHBhcmVudF93YXNfaW5fY29sbGVnZSA9PSAiVFJVRSIpDQojIMav4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlDQpwcm9wMS5pbnRlcnZhbCh4VFJVRXAsbnJvdyhkYXRhKSwwLjk1KSAjIDEtcHJvcG9ydGlvbiA5NSUgQ0kgZm9yIHANCmBgYA0KKipOSOG6rE4gWMOJVDoqKg0KDQotIFThu7cgbOG7hyBo4buNYyBzaW5oIGPDsyBuZ8aw4budaSBnacOhbSBo4buZIHThu6tuZyB0aGVvIGjhu41jIGNhbyDEkeG6s25nIHRyb25nIG3huqt1IGzDoCA1Mi4wJSAoTWVhbiA9IDAuNTIpLCBjaGnhur9tIHThu7cgbOG7hyBraMOhIGzhu5tuIHRyb25nIHThu5VuZyBz4buRIGjhu41jIHNpbmgga2jhuqNvIHPDoXQuDQoNCi0gVuG7m2kgZ2nDoSB0cuG7iyB04bubaSBo4bqhbiAoQ3JpdGljYWwgVmFsdWUpIGzDoCAxLjk2IOG7nyBt4bupYyDDvSBuZ2jEqWEgNSUsIHNhaSBz4buRIGJpw6puIChNYXJnaW4gb2YgRXJyb3IpIMSRxrDhu6NjIHTDrW5oIGzDoCAzLjElICgwLjAzMDk2KSwgdGjhu4MgaGnhu4duIMSR4buZIGNow61uaCB4w6FjIGPhu6dhIMaw4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgbsOgeS4NCg0KLSBEbyDEkcOzLCBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgdGjhu7FjIHThur8gbuG6sW0gdHJvbmcga2hv4bqjbmcgdOG7qyA0OC45JSDEkeG6v24gNTUuMSUgKENJIGxvd2VyID0gMC40ODksIENJIHVwcGVyID0gMC41NTEpLCBjaG8gdGjhuqV5IHbhu5tpIMSR4buZIHRpbiBj4bqteSBjYW8sIHThu7cgbOG7hyBo4buNYyBzaW5oIGPDsyBuZ8aw4budaSBnacOhbSBo4buZIHThu6tuZyBo4buNYyBjYW8gxJHhurNuZyBkYW8gxJHhu5luZyB0cm9uZyBraG/huqNuZyBuw6B5Lg0KDQotIEvhur90IHF14bqjIG7DoHkgY2hvIHRo4bqleSBoxqFuIG3hu5l0IG7hu61hIHPhu5EgaOG7jWMgc2luaCBjw7MgbmfGsOG7nWkgZ2nDoW0gaOG7mSBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIOG7nyBt4bupYyBjYW8gxJHhurNuZyB0cuG7nyBsw6puLCDEkWnhu4F1IG7DoHkgY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIHTDrWNoIGPhu7FjIMSR4bq/biBxdcOhIHRyw6xuaCBo4buNYyB04bqtcCB2w6AgcGjDoXQgdHJp4buDbiBj4bunYSBo4buNYyBzaW5oIHRow7RuZyBxdWEgc+G7sSBo4buXIHRy4bujIHbDoCB0xrAgduG6pW4gdOG7qyBnaWEgxJHDrG5oLg0KDQojIyMjICoqMy40LjIgS2nhu4NtIMSR4buLbmggR2nhuqMgdGh1eeG6v3Q6KioNCg0KQsOgaSB0b8OhbiBjw7MgZ2nhuqMgdGh1eeG6v3QgbmjGsCBzYXU6ICQkDQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2x9DQpIXzA6IFw7IHAgPSAwLjYgXHF1YWQgXHRleHR7KFThu7cgbOG7hyBo4buNYyBzaW5oIGPDsyBuZ8aw4budaSBnacOhbSBo4buZIHThu6tuZyB0aGVvIGjhu41jIGNhbyDEkeG6s25nIGzDoCA2MCUpfSBcXCANCkhfMTogXDsgcCBcbmUgMC42IFxxdWFkIFx0ZXh0eyhU4bu3IGzhu4cgaOG7jWMgc2luaCBjw7MgbmfGsOG7nWkgZ2nDoW0gaOG7mSB04burbmcgdGhlbyBo4buNYyBjYW8gxJHhurNuZyBraMOhYyA2MCUpfQ0KXGVuZHthcnJheX0NClxyaWdodC4kJA0KDQpgYGB7cn0NCnByb3AudGVzdCh4PXhUUlVFcCwgbj1ucm93KGRhdGEpLCBwPTAuNiwgY29ycmVjdD1GQUxTRSkNCg0KYGBgDQoNCi0gS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggdOG7iSBs4buHIG3hu5l0IG3huqt1IGtow7RuZyBz4butIGThu6VuZyBoaeG7h3UgY2jhu4luaCBsacOqbiB04bulYyBjaG8gZ2nDoSB0cuG7iyB0aOG7kW5nIGvDqiAkXGNoaV4yID0gMjYuNjY3JCB24bubaSAxIGLhuq1jIHThu7EgZG8gdsOgIHAtdmFsdWUgPSAyLjQxOCBcdGltZXMgMTBeey03fSQsIG5o4buPIGjGoW4gbmhp4buBdSBt4bupYyDDvSBuZ2jEqWEgNSUuIERvIMSRw7MsIHRhIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfMCQuDQoNCi0gVOG7tyBs4buHIG3huqt1IMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBsw6AgNTIlIChwID0gMC41MiksIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIHThu7cgbOG7hyBnaeG6oyDEkeG7i25oIDYwJS4gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gdOG7tyBs4buHIHRo4buxYyB04bq/IG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgNDguOSUgxJHhur9uIDU1LjElLCBraOG6s25nIMSR4buLbmggdOG7tyBs4buHIHRo4buxYyB04bq/IGjhu41jIHNpbmggY8OzIG5nxrDhu51pIGdpw6FtIGjhu5kgdOG7q25nIGjhu41jIGNhbyDEkeG6s25nIHRo4bqlcCBoxqFuIG3hu6ljIDYwJS4NCg0KLSBL4bq/dCBxdeG6oyBuw6B5IGNobyB0aOG6pXkgdOG7tyBs4buHIGjhu41jIHNpbmggY8OzIG5nxrDhu51pIGdpw6FtIGjhu5kgdOG7q25nIHRoZW8gaOG7jWMgY2FvIMSR4bqzbmcgdGjhu7FjIHThur8ga2jDtG5nIMSR4bqhdCBt4bupYyA2MCUgbmjGsCBnaeG6oyDEkeG7i25oIHRyxrDhu5tjIMSRw7MsIMSRaeG7gXUgbsOgeSBjw7MgdGjhu4MgdMOhYyDEkeG7mW5nIMSR4bq/biBjw6FjIHnhur91IHThu5EgbGnDqm4gcXVhbiDEkeG6v24gaOG7lyB0cuG7oyBo4buNYyB04bqtcCB2w6AgcGjDoXQgdHJp4buDbiBj4bunYSBo4buNYyBzaW5oLCB04burIMSRw7MgZ+G7o2kgw70gY2hvIHZp4buHYyB4ZW0geMOpdCBs4bqhaSBjw6FjIGNow61uaCBzw6FjaCB2w6AgY2jGsMahbmcgdHLDrG5oIGjhu5cgdHLhu6MgcGjDuSBo4bujcC4NCg0KDQojIyAqKlBI4bqmTiA0OiBQSMOCTiBUw41DSCBN4buQSSBRVUFOIEjhu4YgR0nhu65BIEhBSSBCSeG6vk4gxJDhu4pOSCBUw41OSCAoQklWQVJJQVRFIEFOQUxZU0lTKSoqDQoNCiMjIyAqKjQuMSBLaeG7g20gxJHhu4tuaCB0aOG7kW5nIGvDqiBjaGkgYsOsbmggcGjGsMahbmcqKg0KDQpWaeG7h2Mga2nhu4NtIHRyYSBt4buRaSBxdWFuIGjhu4cgxJHhu4tuaCB0w61uaCBy4bqldCBxdWFuIHRy4buNbmcsIHbDrCBuw7MgbMOgIHRp4buBbiDEkeG7gSBwaOG7pWMgduG7pSBjaG8gY8OhYyBwaMOibiB0w61jaCBi4buZIGThu68gbGnhu4d1IGNodXnDqm4gc8OidSBoxqFuIHbDoCBjw6FjIHBoxrDGoW5nIHBow6FwIMaw4bubYyBsxrDhu6NuZyBjaG8gcmEga+G6v3QgcXXhuqMgY8OzIHTDrW5oIHRodXnhur90IHBo4bulYyBoxqFuLiBUYSBjw7MgZ2nhuqMgdGh1eeG6v3Qgc2F1Og0KDQokJA0KXGxlZnRcew0KXGJlZ2lue2FycmF5fXtsbH0NCkhfMDogJiBcdGV4dHtIYWkgYmnhur9uIMSR4buZYyBs4bqtcCB24bubaSBuaGF1fSBcXA0KSF8xOiAmIFx0ZXh0e0hhaSBiaeG6v24gxJHGsOG7o2MgeGVtIHjDqXQgY8OzIGxpw6puIHF1YW4gxJHhur9uIG5oYXV9DQpcZW5ke2FycmF5fQ0KXHJpZ2h0Lg0KJCQNCg0KDQoNClRhIHRo4buxYyBoaeG7h24ga2nhu4NuIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIHNhdToNCg0KYGBge3J9DQoNCg0KDQp0YWJsZV90eXBlcGFyZW50IDwtIHRhYmxlKGRhdGEkdHlwZV9zY2hvb2wsZGF0YSRwYXJlbnRfd2FzX2luX2NvbGxlZ2UpDQp0YWJsZV90eXBlcmU8LSB0YWJsZShkYXRhJHR5cGVfc2Nob29sLGRhdGEkcmVzaWRlbmNlKQ0KdGFibGVfdHlwZXdpbGwgPC0gdGFibGUoZGF0YSR0eXBlX3NjaG9vbCxkYXRhJHdpbGxfZ29fdG9fY29sbGVnZSkNCg0KdGFibGVfdHlwZWdlbiA8LSB0YWJsZShkYXRhJHR5cGVfc2Nob29sLCBkYXRhJGdlbmRlcikNCg0KdGFibGVfdHlwZWluIDwtIHRhYmxlKGRhdGEkdHlwZV9zY2hvb2wsIGRhdGEkaW50ZXJlc3QpDQoNCnRhYmxlX3R5cGVzYSA8LSB0YWJsZShkYXRhJHR5cGVfc2Nob29sLCBkYXRhJHNjaG9vbF9hY2NyZWRpdGF0aW9uKQ0KdGFibGVfdHlwZXBhcmVudHNhbCA8LSB0YWJsZShkYXRhJHR5cGVfc2Nob29sLCBkYXRhJHBhcmVudF9zYWxhcnkpDQoNCnRhYmxlX3R5cGVob3VzZSA8LSB0YWJsZShkYXRhJHR5cGVfc2Nob29sLCBkYXRhJGhvdXNlX2FyZWEpDQoNCnRhYmxlX3R5cGVhdiA8LSB0YWJsZShkYXRhJHR5cGVfc2Nob29sLCBkYXRhJGF2ZXJhZ2VfZ3JhZGVzKQ0KDQpjaGl0eXBlcGFyZW50IDwtIGNoaXNxLnRlc3QodGFibGVfdHlwZXBhcmVudCkNCmNoaXR5cGVyZSA8LSBjaGlzcS50ZXN0KHRhYmxlX3R5cGVyZSkNCmNoaXR5cGV3aWxsIDwtIGNoaXNxLnRlc3QodGFibGVfdHlwZXdpbGwpDQpjaGl0eXBlZ2VuIDwtIGNoaXNxLnRlc3QodGFibGVfdHlwZWdlbikNCmNoaXR5cGVpbiA8LSBjaGlzcS50ZXN0KHRhYmxlX3R5cGVpbikNCmNoaXR5cGVzYSA8LSBjaGlzcS50ZXN0KHRhYmxlX3R5cGVzYSkNCmNoaXR5cGVwYXJlbnRzYWwgPC0gY2hpc3EudGVzdCh0YWJsZV90eXBlcGFyZW50c2FsKQ0KY2hpdHlwZWhvdXNlIDwtIGNoaXNxLnRlc3QodGFibGVfdHlwZWhvdXNlKQ0KY2hpdHlwZWF2IDwtIGNoaXNxLnRlc3QodGFibGVfdHlwZWF2KQ0KDQoNCiMgVOG6oW8gZGFuaCBzw6FjaCBjw6FjIGtp4buDbSDEkeG7i25oDQpjaGlfdGVzdHMgPC0gbGlzdCgNCiAgInBhcmVudF93YXNfaW5fY29sbGVnZSIgPSBjaGl0eXBlcGFyZW50LA0KICAicmVzaWRlbmNlIiAgICAgICAgICAgICA9IGNoaXR5cGVyZSwNCiAgIndpbGxfZ29fdG9fY29sbGVnZSIgICAgICAgICAgID0gY2hpdHlwZXdpbGwsDQogICJnZW5kZXIiICAgICAgICAgICAgICAgID0gY2hpdHlwZWdlbiwNCiAgImludGVyZXN0IiAgICAgICAgICAgICAgPSBjaGl0eXBlaW4sDQogICJzY2hvb2xfYWNjcmVkaXRhdGlvbiIgICAgICAgICAgICAgID0gY2hpdHlwZXNhLA0KICAicGFyZW50X3NhbGFyeSIgICAgICAgICA9IGNoaXR5cGVwYXJlbnRzYWwsDQogICJob3VzZV9hcmVhIiAgICAgICAgICAgID0gY2hpdHlwZWhvdXNlLA0KICAiYXZlcmFnZV9ncmFkZXMiICAgICAgICA9IGNoaXR5cGVhdg0KKQ0KDQojIFThuqFvIGLhuqNuZyB04buVbmcgaOG7o3ANCmNoaV9zdW1tYXJ5IDwtIGRhdGEuZnJhbWUoDQogIFZhcmlhYmxlID0gbmFtZXMoY2hpX3Rlc3RzKSwNCiAgQ2hpX1NxdWFyZWQgPSBzYXBwbHkoY2hpX3Rlc3RzLCBmdW5jdGlvbih4KSByb3VuZCh4JHN0YXRpc3RpYywgMykpLA0KICBERiA9IHNhcHBseShjaGlfdGVzdHMsIGZ1bmN0aW9uKHgpIHgkcGFyYW1ldGVyKSwNCiAgUF9WYWx1ZSA9IHNhcHBseShjaGlfdGVzdHMsIGZ1bmN0aW9uKHgpIHJvdW5kKHgkcC52YWx1ZSwgNCkpLCBDb25jbHVzaW9uID0gc2FwcGx5KGNoaV90ZXN0cywgZnVuY3Rpb24oeCkgaWZlbHNlKHgkcC52YWx1ZSA8IDAuMDUsICIgxJDhu6cgYsSDbmcgY2jhu6luZyBiw6FjIGLhu48gSOKCgCIsICLEkOG7pyBi4bqxbmcgY2jhu6luZyBjaOG6pXAgbmjhuq1uIEjigoAiKSkNCikNCg0KIyBIaeG7g24gdGjhu4sga+G6v3QgcXXhuqMNCnByaW50KGNoaV9zdW1tYXJ5LCByb3cubmFtZXMgPSBGQUxTRSkNCg0KDQpgYGANCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlZCBjaG8gdGjhuqV5IG3hu5l0IHPhu5EgYmnhur9uIMSR4buLbmggdMOtbmggY8OzIG3hu5FpIHF1YW4gaOG7hyB0aOG7kW5nIGvDqiBjw7Mgw70gbmdoxKlhIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIHR5cGVzY2hvb2wgKGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMpLiBD4bulIHRo4buDLCBjw6FjIGJp4bq/biBwYXJlbnRfd2FzX2luX2NvbGxlZ2UsIHJlc2lkZW5jZSwgaW50ZXJlc3QsIHBhcmVudF9zYWxhcnkgdsOgIGF2ZXJhZ2VfZ3JhZGVzIGPDsyBnacOhIHRy4buLIHAtdmFsdWUgbmjhu48gaMahbiA1JSwgY2hvIHBow6lwIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBy4buXbmcgduG7gSB0w61uaCDEkeG7mWMgbOG6rXAgZ2nhu69hIGPDoWMgYmnhur9uIG7DoHkgdsOgIGzhu7FhIGNo4buNbiBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSwgduG7gSBt4bq3dCDEkeG7i25oIHTDrW5oLCBjw6FjIHnhur91IHThu5EgbGnDqm4gcXVhbiDEkeG6v24gbuG7gW4gdOG6o25nIGdpw6FvIGThu6VjIGPhu6dhIHBo4bulIGh1eW5oLCBuxqFpIGPGsCB0csO6LCDEkeG7mW5nIGzhu7FjIGjhu41jIHThuq1wLCB0aHUgbmjhuq1wIGjhu5kgZ2lhIMSRw6xuaCB2w6Aga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biBxdXnhur90IMSR4buLbmggY2jhu41uIHRyxrDhu51uZyBuZ2jhu4EgaGF5IHBo4buVIHRow7RuZyBj4bunYSBo4buNYyBzaW5oLg0KDQoNCg0KLSBW4buBIG3hurd0IGtpbmggdOG6vyBsxrDhu6NuZywgY8OhYyBt4buRaSBsacOqbiBo4buHIMSRxrDhu6NjIHBow6F0IGhp4buHbiBwaMO5IGjhu6NwIHbhu5tpIGvhu7MgduG7jW5nIGzDvSB0aHV54bq/dC4gSOG7jWMgc2luaCBjw7MgY2hhIG3hurkgdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYyBob+G6t2Mgc+G7kW5nIOG7nyBraHUgduG7sWMgdGjDoG5oIHRo4buLIHRoxrDhu51uZyBjw7MgeHUgaMaw4bubbmcgY2jhu41uIHRyxrDhu51uZyBwaOG7lSB0aMO0bmcg4oCTIGPDsyB0aOG7gyBkbyDEkeG7i25oIGjGsOG7m25nIHRp4bq/cCB04bulYyBo4buNYyBsw6puIGNhbyBoxqFuLiBUaHUgbmjhuq1wIGdpYSDEkcOsbmggY2FvIHbDoCB0aMOgbmggdMOtY2ggaOG7jWMgdOG6rXAgdOG7kXQgY8WpbmcgY8OzIHRo4buDIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBwaOG7lSB0aMO0bmcsIHBo4bqjbiDDoW5oIGNoaSBwaMOtIGPGoSBo4buZaSBjYW8gaMahbiBu4bq/dSDEkWkgaOG7jWMgbmdo4buBLiBOZ2/DoGkgcmEsIG3hu6ljIMSR4buZIHF1YW4gdMOibSDEkeG6v24gaOG7jWMgdOG6rXAgKGludGVyZXN0KSBjw7MgdGjhu4MgxJHhuqFpIGRp4buHbiBjaG8gxJHhurdjIMSRaeG7g20ga2jDtG5nIHF1YW4gc8OhdCDEkcaw4bujYyBsacOqbiBxdWFuIMSR4bq/biBr4buzIHbhu41uZyB0xrDGoW5nIGxhaSBob+G6t2MgxJHhu5luZyBjxqEgY8OhIG5ow6JuLCB04burIMSRw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGzhu7FhIGNo4buNbiBnacOhbyBk4bulYy4NCg0KLSDDnSBuZ2jEqWEgdGjhu7FjIHRp4buFbjoNCkPDoWMga+G6v3QgcXXhuqMgbsOgeSBwaMO5IGjhu6NwIHbhu5tpIGvhu7MgduG7jW5nIHRyb25nIHRo4buxYyB04bq/OiBo4buNYyBs4buxYyBjw6EgbmjDom4gdsOgIMSRaeG7gXUga2nhu4duIGtpbmggdOG6vyDEkcOzbmcgdmFpIHRyw7IgdGhlbiBjaOG7kXQgdHJvbmcgcXV54bq/dCDEkeG7i25oIGjhu41jIHThuq1wIHNhdSB0cnVuZyBo4buNYy4gVHJvbmcga2hpIMSRw7MsIHnhur91IHThu5EgbmjGsCBnaeG7m2kgdMOtbmggaGF5IGNoYSBt4bq5IHThu6tuZyBo4buNYyDEkeG6oWkgaOG7jWMgZMaw4budbmcgbmjGsCBraMO0bmcgY8OybiBsw6AgcsOgbyBj4bqjbiDEkcOhbmcga+G7gywgY8OzIHRo4buDIHBo4bqjbiDDoW5oIHh1IGjGsOG7m25nIGLDrG5oIMSR4bqzbmcgdHJvbmcgZ2nDoW8gZOG7pWMgaGnhu4duIMSR4bqhaS4NCg0KLSBOZ8aw4bujYyBs4bqhaSwgY8OhYyBiaeG6v24gbmjGsCBnZW5kZXIsIHdpbGxfZ29fdG9fY29sbGVnZSwgaG91c2VfYXJlYSB2w6Agc2Nob29sX2FjY3JlZGl0YXRpb24ga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdHJvbmcgbeG7kWkgcXVhbiBo4buHIHbhu5tpIHR5cGVzY2hvb2wsIHbhu5tpIHAtdmFsdWUgbOG7m24gaMahbiAwLjA1LiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjaMawYSBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4Mga2jhurNuZyDEkeG7i25oIGPDoWMgeeG6v3UgdOG7kSBuw6B5IOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggY2jhu41uIHRyxrDhu51uZy4gDQoNCi0gS+G6v3QgbHXhuq1uOg0KUGjDom4gdMOtY2ggY2hvIHRo4bqleSBj4bqnbiDEkeG6t2MgYmnhu4d0IHF1YW4gdMOibSDEkeG6v24gdmnhu4djIGPhuqNpIHRoaeG7h24gY2jhuqV0IGzGsOG7o25nIGjhu41jIHThuq1wLCB0xINuZyBjxrDhu51uZyB0xrAgduG6pW4gbmdo4buBIG5naGnhu4dwIHbDoCBo4buXIHRy4bujIHTDoGkgY2jDrW5oIMSR4buDIHRow7pjIMSR4bqpeSB04bu3IGzhu4cgaOG7jWMgc2luaCBs4buxYSBjaOG7jW4gaOG7jWMgY2FvIMSR4bqzbmcuIMSQ4buTbmcgdGjhu51pLCBjxaluZyBj4bqnbiBkdXkgdHLDrCBjaMOtbmggc8OhY2ggZ2nDoW8gZOG7pWMgdG/DoG4gZGnhu4duLCDEkeG6o20gYuG6o28gbeG7jWkgxJHhu5FpIHTGsOG7o25nIGjhu41jIHNpbmggxJHhu4F1IGPDsyBjxqEgaOG7mWkgdGnhur9wIGPhuq1uIGdpw6FvIGThu6VjIGLhuq1jIGNhbyBoxqFuIGLhuqV0IGvhu4MgeHXhuqV0IHRow6JuIGhheSBnaeG7m2kgdMOtbmguDQoNCg0KDQojIyMgKio0LjIgdHlwZXNjaG9vbCAtIHBhcmVudF93YXNfaW5fY29sbGVnZSoqDQoNCiMjIyMgKio0LjIuMSBC4bqjbmcgdOG6p24gc+G7kSBjaMOpbyoqDQoNCmBgYHtyfQ0KDQoNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmtuaXRyOjprYWJsZSh0YWJsZV90eXBlcGFyZW50LCBjYXB0aW9uID0gIkLhuqNuZyA0LjIgVOG6p24gc+G7kSBo4buNYyBzaW5oIHThuqFpIGhhaSBtw7RpIHRyxrDhu51uZyBo4buNYyB04bqtcCB2w6AgY8OzIGLhu5EgbeG6uSB04burbmcgaOG7jWMgY2FvIGjhu41jIikNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gQuG6o25nIHThuqduIHPhu5EgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCByw7UgcuG7h3QgdHJvbmcgbOG7sWEgY2jhu41uIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMgZ2nhu69hIGhhaSBuaMOzbSBo4buNYyBzaW5oIHRoZW8gbuG7gW4gdOG6o25nIGjhu41jIHbhuqVuIGPhu6dhIHBo4bulIGh1eW5oLiBUcm9uZyBz4buRIG5o4buvbmcgaOG7jWMgc2luaCBjw7MgY2hhIG3hurkga2jDtG5nIHThu6tuZyBo4buNYyBjYW8gaOG7jWMgKEZBTFNFKSwgdOG7tyBs4buHIGNo4buNbiB0csaw4budbmcgcGjhu5UgdGjDtG5nICgzMjggaOG7jWMgc2luaCkgY2FvIGjGoW4gaOG6s24gc28gduG7m2kgdHLGsOG7nW5nIG5naOG7gSAoMTUyIGjhu41jIHNpbmgpLiBOZ8aw4bujYyBs4bqhaSwgduG7m2kgbmjDs20gaOG7jWMgc2luaCBjw7MgY2hhIG3hurkgdOG7q25nIGjhu41jIGNhbyBo4buNYyAoVFJVRSksIHPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCB0aGVvIGjhu41jIHRyxrDhu51uZyBuZ2jhu4EgKDIzOSkgZ+G6p24gdMawxqFuZyDEkcawxqFuZywgdGjhuq1tIGNow60gbmjhu4luaCBoxqFuIHNvIHbhu5tpIG5ow7NtIGjhu41jIHRyxrDhu51uZyBwaOG7lSB0aMO0bmcgKDI4MSkuDQoNCi0gxJBp4buBdSBuw6B5IGfhu6NpIMO9IHLhurFuZyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgcGjhu6UgaHV5bmggY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIMSR4bq/biB4dSBoxrDhu5tuZyBs4buxYSBjaOG7jW4gbcO0aSB0csaw4budbmcgaOG7jWMgdOG6rXAgY+G7p2EgaOG7jWMgc2luaCwgY+G7pSB0aOG7gyBsw6AgaOG7jWMgc2luaCBjw7MgY2hhIG3hurkgdOG7q25nIGjhu41jIGNhbyBo4buNYyBjw7MgeHUgaMaw4bubbmcgw610IGzhu4cgdGh14buZYyB2w6BvIGtodcO0biBt4bqrdSBo4buNYyBwaOG7lSB0aMO0bmcgdHJ1eeG7gW4gdGjhu5FuZyB2w6AgbeG7nyBoxqFuIHbhu5tpIGzhu7FhIGNo4buNbiBo4buNYyBuZ2jhu4EuIFh1IGjGsOG7m25nIG7DoHkgaG/DoG4gdG/DoG4gcGjDuSBo4bujcCB24bubaSBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlZCB0csaw4bubYyDEkcOzLCBraGkgYmnhur9uIHBhcmVudF93YXNfaW5fY29sbGVnZSBjaG8gdGjhuqV5IGPDsyBt4buRaSBsacOqbiBo4buHIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogduG7m2kgbG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYyAodHlwZXNjaG9vbCkuDQoNCg0KDQojIyMjICoqNC4yLjIgVHLhu7FjIHF1YW4gaG/DoSoqDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KIyBHaeG6oyBz4butIHRhYmxlX3R5cGVwYXJlbnQgbMOgIGLhuqNuZyDEkeG6v20gKHRhYmxlKSB04burIGLhuqNuZyBjaMOpbyBz4bq1biBjw7MNCmRmX3R5cGVwYXJlbnQgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZV90eXBlcGFyZW50KQ0KDQojIMSQ4bq3dCB0w6puIGPhu5l0IHLDtSByw6BuZw0KY29sbmFtZXMoZGZfdHlwZXBhcmVudCkgPC0gYygiVHlwZV9vZl9TY2hvb2wiLCAiUGFyZW50c19Db2xsZWdlIiwgIkNvdW50IikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbSAoZ3JvdXBlZCBiYXIgY2hhcnQpDQpnZ3Bsb3QoZGZfdHlwZXBhcmVudCwgYWVzKHggPSBQYXJlbnRzX0NvbGxlZ2UsIHkgPSBDb3VudCwgZmlsbCA9IFR5cGVfb2ZfU2Nob29sKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgdmp1c3QgPSAtMC4yNSwgc2l6ZSA9IDMpICsNCiAgbGFicygNCiAgICB4ID0gIkLhu5EgbeG6uSB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIiwNCiAgICB5ID0gIlPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCIsDQogICAgZmlsbCA9ICJMb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIiwNCiAgICB0aXRsZSA9ICJCaeG7g3UgxJHhu5MgNC4yOiBU4bqnbiBz4buRIGjhu41jIHNpbmggdGhlbyBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIHbDoCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgcGjhu6UgaHV5bmgiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBCaeG7g3UgxJHhu5MgNC4xIG1pbmggaOG7jWEgc+G7sSBwaMOibiBi4buRIGjhu41jIHNpbmggdGhlbyBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIHbDoCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgcGjhu6UgaHV5bmguIFbhu5tpIG5ow7NtIGjhu41jIHNpbmggY8OzIGLhu5EgbeG6uSBraMO0bmcgdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYyAoRkFMU0UpLCBwaOG6p24gbOG7m24gbOG7sWEgY2jhu41uIHRyxrDhu51uZyBwaOG7lSB0aMO0bmcgKDMyOCBo4buNYyBzaW5oKSwgdHJvbmcga2hpIHPhu5EgaOG7jWMgc2luaCB0aGVvIHRyxrDhu51uZyBuZ2jhu4EgbMOgIDE1Mi4gTmfGsOG7o2MgbOG6oWksIOG7nyBuaMOzbSBjw7MgcGjhu6UgaHV5bmggdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYyAoVFJVRSksIHThu7cgbOG7hyBjaOG7jW4gdHLGsOG7nW5nIG5naOG7gSB0xINuZyByw7UgcuG7h3QgKDIzOSBo4buNYyBzaW5oKSwgZ+G6p24gdGnhu4dtIGPhuq1uIHbhu5tpIHPhu5EgaOG7jWMgc2luaCBo4buNYyBwaOG7lSB0aMO0bmcgKDI4MSkuDQoNCi0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXksIG7hu4FuIHThuqNuZyBnacOhbyBk4bulYyBj4bunYSBwaOG7pSBodXluaCBjw7MgdGjhu4MgxJHDs25nIHZhaSB0csOyIMSR4buLbmggaMaw4bubbmcgZ2nDoW8gZOG7pWMgY2hvIGNvbiBjw6FpIHRoZW8gY8OhY2ggbGluaCBob+G6oXQgaMahbiwga2jDtG5nIGNo4buJIGjGsOG7m25nIHThu5tpIMSR4bqhaSBo4buNYyBtw6AgY8OybiBt4bufIHJhIGzhu7FhIGNo4buNbiBnacOhbyBk4bulYyBuZ2jhu4EgbmdoaeG7h3AuIEvhur90IHF14bqjIG7DoHkgcGjDuSBo4bujcCB24bubaSBraeG7g20gxJHhu4tuaCDEkeG7i25oIHTDrW5oIHRyxrDhu5tjIMSRw7MsIGtoaSBiaeG6v24gcGFyZW50X3dhc19pbl9jb2xsZWdlIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyB0aOG7kW5nIGvDqiBjw7Mgw70gbmdoxKlhIHbhu5tpIHR5cGVzY2hvb2wsIGfhu6NpIMO9IHLhurFuZyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgcGjhu6UgaHV5bmggbMOgIG3hu5l0IHnhur91IHThu5EgcXVhbiB0cuG7jW5nIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggY2jhu41uIG3DtGkgdHLGsOG7nW5nIGjhu41jIHThuq1wLg0KDQoNCiMjIyMgKio0LjIuMyBIaeG7h3UgaGFpIHThu7cgbOG7hyoqDQoNCioqVGhp4bq/dCBs4bqtcCB04bu3IGzhu4cqKg0KDQpU4bu3IGzhu4cgaOG7jWMgc2luaCB0aGVvIGjhu41jIGNoxrDGoW5nIHRyw6xuaCBo4buNYyBuZ2jhu4EgY8OzIGLhu5EgbeG6uSB04burbmcgaOG7jWMgY2FvIGjhu41jOg0KDQoNCiQkDQpwXzEgPSBQKFx0ZXh0e3BhcmVudHNfd2FzX2luX2NvbGxlZ2V9ID0gVFJVRSBcbWlkIFx0ZXh0e3Byb2dyYW19ID0gQWNhZGVtaWMpDQokJA0KVOG7tyBs4buHIGjhu41jIHNpbmggdGhlbyBo4buNYyBjaMawxqFuZyB0csOsbmggaOG7jWMgdGh14bqtdCBjw7MgYuG7kSBt4bq5IHThu6tuZyBo4buNYyBjYW8gaOG7jWM6DQoNCiQkDQpwXzEgPSBQKFx0ZXh0e3BhcmVudHNfd2FzX2luX2NvbGxlZ2V9ID0gVFJVRSBcbWlkIFx0ZXh0e3dpbGxfZ29fdG9fY29sbGVnZX0gPSBWb2NhdGlvbmFsKQ0KJCQNCkhp4buHdSBjaMOqbmggbOG7h2NoIGdp4buvYSBoYWkgdOG7tyBs4buHOg0KDQokJA0KZCA9IHBfMSAtIHBfMg0KJCQNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gKipHaeG6oyB0aHV54bq/dCBI4oKAKio6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSB04bu3IGzhu4cgIA0KICAkJCBIXzA6IHBfMSAtIHBfMiA9IDAkJA0KDQotICoqR2nhuqMgdGh1eeG6v3QgSDEpKio6IFThu7cgbOG7hyBo4buNYyBzaW5oIGjhu41jIG5naOG7gSBjw7MgcGjhu6UgaHV5bmggdOG7q25nIGjhu41jIGNhbyBo4buNYyB0aOG6pXAgaMahbiBo4buNYyBzaW5oIGNoxrDGoW5nIHRyw6xuaCBo4buNYyB0aHXhuq10OiAkSF8xOiBwXzEgLSBwXzIgPCAwJA0KICANCg0KDQpgYGB7cn0NCg0KbGlicmFyeShzdGF0cykNCg0KdGVzdHR5cGVwYXJlbnQgPC0gcHJvcC50ZXN0KA0KICB4ID0gYyh0YWJsZV90eXBlcGFyZW50WyJBY2FkZW1pYyIsICJUUlVFIl0sIHRhYmxlX3R5cGVwYXJlbnRbIlZvY2F0aW9uYWwiLCAiVFJVRSJdKSwNCiAgbiA9IGMoc3VtKHRhYmxlX3R5cGVwYXJlbnRbIkFjYWRlbWljIiwgXSksIHN1bSh0YWJsZV90eXBlcGFyZW50WyJWb2NhdGlvbmFsIiwgXSkpLA0KICBhbHRlcm5hdGl2ZSA9ICJsZXNzIiwNCiAgY29ycmVjdCA9IEZBTFNFDQopDQpwcmludCh0ZXN0dHlwZXBhcmVudCkNCmBgYA0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggaGFpIHThu7cgbOG7hyBjaG8gdGjhuqV5ICRcY2hpXjIgPSAyMS40MiQsIHbhu5tpIHAtdmFsdWUgPSAxLjg0NWUtMDYsIG5o4buPIGjGoW4gbmhp4buBdSBzbyB24bubaSBt4bupYyDDvSBuZ2jEqWEgMC4wNS4gRG8gxJHDsywgdGEgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJCwgdOG7qWMgbMOgIGtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyAgdOG7tyBs4buHIGjhu41jIHNpbmggY8OzIGNoYSBt4bq5IHThu6tuZyBo4buNYyBjYW8gaOG7jWMgdHJvbmcgbmjDs20gQWNhZGVtaWMgY2FvIGjGoW4gbmjDs20gVm9jYXRpb25hbC4NCg0KS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gaGnhu4d1IHPhu5EgdOG7tyBs4buHICQocF8xIC0gcF8yKSQgbMOgIHThu6sg4oCTMS4wMDAwIMSR4bq/biAgLTAuMDk3NDE3MDQgY+G7p25nIGPhu5EgdGjDqm0gbmjhuq1uIMSR4buLbmggcuG6sW5nIHThu7cgbOG7hyBj4bunYSBuaMOzbSBBY2FkZW1pYyB0aOG7sWMgc+G7sSBuaOG7jyBoxqFuIG5ow7NtIFZvY2F0aW9uYWwuIMSQaeG7gXUgbsOgeSBjw7MgdGjhu4MgcGjhuqNuIMOhbmggc+G7sSBraMOhYyBiaeG7h3QgdHJvbmcgeHUgaMaw4bubbmcgY2jhu41uIG3DtGkgdHLGsOG7nW5nIGjhu41jIHThuq1wIGThu7FhIHRoZW8gbuG7gW4gdOG6o25nIGjhu41jIHbhuqVuIGPhu6dhIGNoYSBt4bq5Lg0KDQoNCg0KDQoNCg0KDQoNCiMjIyMgKio0LjIuNCBU4bu3IHPhu5EgTmd1eSBjxqEgKFJlbGF0aXZlIFJpc2sgLSBSUikqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZXBpdG9vbHMpDQpycnR5cGVwYXJlbnQgPC0gcmlza3JhdGlvKHRhYmxlX3R5cGVwYXJlbnQsIG1ldGhvZCA9ICJ3YWxkIikNCnByaW50KHJydHlwZXBhcmVudCkNCmBgYA0KKipOaOG6rW4geMOpdDoqKg0KDQotIELhuqNuZyB04bqnbiBz4buRIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IHbhu4EgbOG7sWEgY2jhu41uIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMgZ2nhu69hIGhhaSBuaMOzbSBo4buNYyBzaW5oIHBow6JuIHRoZW8gbuG7gW4gdOG6o25nIGjhu41jIHbhuqVuIGPhu6dhIGNoYSBt4bq5LiBUcm9uZyB04buVbmcgc+G7kSAxMDAwIGjhu41jIHNpbmgsIGPDsyA2MDkgaOG7jWMgc2luaCB0aGVvIGjhu41jIHRyxrDhu51uZyBwaOG7lSB0aMO0bmcgKGFjYWRlbWljKSB2w6AgMzkxIGjhu41jIHNpbmggaOG7jWMgdHLGsOG7nW5nIG5naOG7gSAodm9jYXRpb25hbCkuIOG7niBuaMOzbSBjw7MgcGjhu6UgaHV5bmggdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYywgdOG7tyBs4buHIGjhu41jIHNpbmggaOG7jWMgdHLGsOG7nW5nIG5naOG7gSBjaGnhur9tIMSR4bq/biAyMzkvNTIwICjiiYg0NS45NiUpLCBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuaMOzbSBraMO0bmcgY8OzIHBo4bulIGh1eW5oIHThu6tuZyBo4buNYyDEkeG6oWkgaOG7jWMgKDE1Mi80ODAg4omIMzEuNjclKS4NCg0KLUNow6puaCBs4buHY2ggbsOgeSDEkcaw4bujYyB0aOG7gyBoaeG7h24gcsO1IHF1YSB04buJIHPhu5EgcuG7p2kgcm8gKHJpc2sgcmF0aW8pIGNobyBuaMOzbSBo4buNYyBzaW5oIGjhu41jIHRyxrDhu51uZyBuZ2jhu4EgbMOgIDEuMzIgduG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JSB04burIDEuMTggxJHhur9uIDEuNTAuIMSQaeG7gXUgbsOgeSBow6BtIMO9IHLhurFuZyBo4buNYyBzaW5oIGPDsyBwaOG7pSBodXluaCB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIGPDsyBraOG6oyBuxINuZyB0aGVvIGjhu41jIHRyxrDhu51uZyBuZ2jhu4EgY2FvIGjGoW4ga2hv4bqjbmcgMzIlIHNvIHbhu5tpIG5ow7NtIGPDsm4gbOG6oWkg4oCTIG3hu5l0IGvhur90IHF14bqjIG5nxrDhu6NjIHbhu5tpIHRy4buxYyBnacOhYyBwaOG7lSBiaeG6v24gcuG6sW5nIGNoYSBt4bq5IGPDsyBo4buNYyB24bqlbiBjYW8gc+G6vSDEkeG7i25oIGjGsOG7m25nIGNvbiBo4buNYyB0aGVvIGjhu4cgaMOgbiBsw6JtLg0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCB24bubaSBiYSBwaMawxqFuZyBwaMOhcCAoTWlkLXAgZXhhY3QsIEZpc2hlciBleGFjdCB2w6AgY2hpIGLDrG5oIHBoxrDGoW5nKSDEkeG7gXUgY2hvIGdpw6EgdHLhu4sgcCA8IDAuMDAwMDEsIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgduG7gSBwaMOibiBi4buRIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMgZ2nhu69hIGhhaSBuaMOzbSBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDhu58gbeG7qWMgMSUuIA0KDQoNCg0KDQojIyMjICoqNC4yLjUgVOG7tyBz4buRIENow6puaCAoT2RkcyBSYXRpbyAtIE9SKToqKg0KDQpgYGB7cn0NCmxpYnJhcnkoRGVzY1Rvb2xzKQ0Kb3J0eXBlcGFyZW50IDwtIE9kZHNSYXRpbyh0YWJsZV90eXBlcGFyZW50LCBtZXRob2Q9IndhbGQiLCBjb25mLmxldmVsID0gMC45NSkNCnByaW50KG9ydHlwZXBhcmVudCkNCmBgYA0KKipOaOG6rW4geMOpdDoqKg0KDQotIEvhur90IHF14bqjIHBow6JuIHTDrWNoIGjhu5NpIHF1eSBsb2dpc3RpYyBob+G6t2Mgc28gc8OhbmggYuG6o25nIGNow6lvIGNobyB0aOG6pXkgb2RkcyByYXRpbyAodOG7tyBz4buRIG9kZHMpIGdp4buvYSBuaMOzbSBo4buNYyBzaW5oIGPDsyBjaGEgbeG6uSB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIHbDoCB2aeG7h2MgdGhlbyBo4buNYyB0csaw4budbmcgbmdo4buBIGzDoCBraG/huqNuZyAxLjg0LCB04bupYyBsw6AgeOG6pXAgeOG7iSBjYW8gaMahbiBraG/huqNuZyA4NCUgbOG6p24gc28gduG7m2kgbmjDs20gY8OzIGNoYSBt4bq5IGtow7RuZyBo4buNYyDEkeG6oWkgaOG7jWMuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgdOG7qyAxLjQyIMSR4bq/biAyLjM4IGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAxLCBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgbMOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIMSQaeG7gXUgbsOgeSBow6BtIMO9IHLhurFuZyB2aeG7h2MgY2hhIG3hurkgdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYyBjw7MgbGnDqm4gaOG7hyDEkcOhbmcga+G7gyB24bubaSBraOG6oyBuxINuZyBjb24gY8OhaSBs4buxYSBjaOG7jW4gaOG7jWMgdHLGsOG7nW5nIG5naOG7gSwgdsOgIGto4bqjIG7Eg25nIG7DoHkgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20ga2jDtG5nIGPDsyBu4buBbiB04bqjbmcgaOG7jWMgduG6pW4gdMawxqFuZyB04buxIHThu6sgY2hhIG3hurkuDQoNCg0KDQoNCg0KDQoNCg0KIyMjICoqNC4zIHR5cGVzY2hvb2wgLSByZXNpZGVuY2UqKg0KDQojIyMjICoqNC4zLjEgQuG6o25nIHThuqduIHPhu5EgY2jDqW8qKg0KDQpgYGB7cn0NCg0KDQprbml0cjo6a2FibGUodGFibGVfdHlwZXJlLCANCiAgICAgICAgICAgICBjYXB0aW9uID0gIkLhuqNuZyA0LjMgVOG6p24gc+G7kSBo4buNYyBzaW5oIHThuqFpIGhhaSBtw7RpIHRyxrDhu51uZyBo4buNYyB04bqtcCB2w6AgdGhlbyBuxqFpIMSR4buLbmggY8awIikNCg0KYGBgDQoNCg0KDQoqKk5o4bqtbiB4w6l0OioqDQoNClThu6sgQuG6o25nIDQuMywgY8OzIHRo4buDIHRo4bqleSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IGdp4buvYSBuxqFpIMSR4buLbmggY8awIHbDoCBs4buxYSBjaOG7jW4gbcO0aSB0csaw4budbmcgaOG7jWMgdOG6rXAgY+G7p2EgaOG7jWMgc2luaDoNCg0KLSBUcm9uZyBz4buRIGjhu41jIHNpbmggaOG7jWMgY2jGsMahbmcgdHLDrG5oIGjhu41jIHRodeG6rXQgKEFjYWRlbWljKSwgcGjhuqduIGzhu5tuIMSR4bq/biB04burIGtodSB24buxYyBVcmJhbiAoMzg4IGjhu41jIHNpbmgpLCBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBSdXJhbCAoMjIxIGjhu41jIHNpbmgpLg0KDQotIE5nxrDhu6NjIGzhuqFpLCB0cm9uZyBuaMOzbSBo4buNYyBjaMawxqFuZyB0csOsbmggaMaw4bubbmcgbmdoaeG7h3AgKFZvY2F0aW9uYWwpLCDEkWEgc+G7kSBo4buNYyBzaW5oIMSR4bq/biB04burIGtodSB24buxYyBSdXJhbCAoMjQwIGjhu41jIHNpbmgpLCBjYW8gaMahbiBuaGnhu4F1IHNvIHbhu5tpIFVyYmFuICgxNTEgaOG7jWMgc2luaCkuDQoNCsSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGjhu41jIHNpbmgg4bufIGtodSB24buxYyB0aMOgbmggdGjhu4sgY8OzIHh1IGjGsOG7m25nIHRoZW8gaOG7jWMgY2jGsMahbmcgdHLDrG5oIGjhu41jIHRodeG6rXQgbmhp4buBdSBoxqFuLCB0cm9uZyBraGkgaOG7jWMgc2luaCDhu58gbsO0bmcgdGjDtG4gbOG6oWkgdGhpw6puIHbhu4EgY2jGsMahbmcgdHLDrG5oIGjGsOG7m25nIG5naGnhu4dwLiBYdSBoxrDhu5tuZyBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCBz4buxIGtow6FjIGJp4buHdCB24buBIGPGoSBo4buZaSB0aeG6v3AgY+G6rW4gZ2nDoW8gZOG7pWMsIMSR4buLbmggaMaw4bubbmcgbmdo4buBIG5naGnhu4dwLCBob+G6t2MgxJFp4buBdSBraeG7h24ga2luaCB04bq/IOKAkyB4w6MgaOG7mWkgZ2nhu69hIGtodSB24buxYyDEkcO0IHRo4buLIHbDoCBuw7RuZyB0aMO0bi4NCg0KDQoNCg0KIyMjIyAqKjQuMy4yIFRy4buxYyBxdWFuIGhvw6EqKg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCiMgR2nhuqMgc+G7rSB0YWJsZV90eXBlcGFyZW50IGzDoCBi4bqjbmcgxJHhur9tICh0YWJsZSkgdOG7qyBi4bqjbmcgY2jDqW8gc+G6tW4gY8OzDQpkZl90eXBlcmUgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZV90eXBlcmUpDQoNCiMgxJDhurd0IHTDqm4gY+G7mXQgcsO1IHLDoG5nDQpjb2xuYW1lcyhkZl90eXBlcmUpIDwtIGMoIlR5cGVfb2ZfU2Nob29sIiwgIlJlc2lkZW5jZSIsICJDb3VudCIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgY+G7mXQgbmjDs20gKGdyb3VwZWQgYmFyIGNoYXJ0KQ0KZ2dwbG90KGRmX3R5cGVyZSwgYWVzKHggPSBSZXNpZGVuY2UsIHkgPSBDb3VudCwgZmlsbCA9IFR5cGVfb2ZfU2Nob29sKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgdmp1c3QgPSAtMC4yNSwgc2l6ZSA9IDMpICsNCiAgbGFicygNCiAgICB4ID0gIk7GoWkgY8awIHRyw7oiLA0KICAgIHkgPSAiU+G7kSBsxrDhu6NuZyBo4buNYyBzaW5oIiwNCiAgICBmaWxsID0gIkxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMiLA0KICAgIHRpdGxlID0gIkJp4buDdSDEkeG7kyA0LjM6IFThuqduIHPhu5EgaOG7jWMgc2luaCB0aGVvIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMgdsOgIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBj4bunYSBwaOG7pSBodXluaCINCiAgKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQpgYGANCg0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gQmnhu4N1IMSR4buTIDQuNCB0aOG7gyBoaeG7h24gc+G7sSBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IHbhu4EgbeG7qWMgxJHhu5kgcXVhbiB0w6JtIMSR4bq/biBo4buNYyBjYW8gaOG7jWMgZ2nhu69hIGjhu41jIHNpbmggaGFpIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMgbMOgIGjhu41jIHRodeG6rXQgKEFjYWRlbWljKSB2w6Agbmdo4buBIChWb2NhdGlvbmFsKS4gTmjDrG4gY2h1bmcsIGjhu41jIHNpbmggdOG7qyBjw6FjIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGPDsyB4dSBoxrDhu5tuZyBxdWFuIHTDom0gxJHhur9uIHZp4buHYyB0aeG6v3AgdOG7pWMgaOG7jWMgY2FvIGjhu41jIG5oaeG7gXUgaMahbi4gQ+G7pSB0aOG7gywgbmjDs20gaOG7jWMgc2luaCDigJxWZXJ5IEludGVyZXN0ZWTigJ0g4bufIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGNoaeG6v20gMjEyIG5nxrDhu51pIOKAkyBjYW8gZ+G6p24gZ+G6pXAgxJHDtGkgc28gduG7m2kgbmjDs20gdHLGsOG7nW5nIG5naOG7gSBsw6AgMTEyIG5nxrDhu51pLiBUxrDGoW5nIHThu7EsIHPhu5EgaOG7jWMgc2luaCAiSW50ZXJlc3RlZCIg4bufIG5ow7NtIG7DoHkgY8WpbmcgY2FvIGjGoW4gKDU5IHNvIHbhu5tpIDQxKS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgxJHhu4tuaCBoxrDhu5tuZyBo4buNYyB04bqtcCBkw6BpIGjhuqFuIMSRxrDhu6NjIGjDrG5oIHRow6BuaCByw7UgaMahbiDhu58gaOG7jWMgc2luaCB0aGVvIGjhu41jIHRyxrDhu51uZyBo4buNYyB0aHXhuq10Lg0KDQotIE5nxrDhu6NjIGzhuqFpLCBo4buNYyBzaW5oIHRyxrDhu51uZyBuZ2jhu4EgdGjhu4MgaGnhu4duIG3hu6ljIMSR4buZIMOtdCBxdWFuIHTDom0gaMahbiDEkeG6v24gdmnhu4djIGjhu41jIGNhbyBo4buNYy4gU+G7kSBo4buNYyBzaW5oICJOb3QgSW50ZXJlc3RlZCIgdGh14buZYyBuaMOzbSBuw6B5IGzDoCA1NiBuZ8aw4budaSDigJMgZ+G6p24gZ+G6pXAgxJHDtGkgc28gduG7m2kgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgKDMwIG5nxrDhu51pKS4gTmdvw6BpIHJhLCBuaMOzbSDigJxVbmNlcnRhaW7igJ0gY8OzIHPhu5EgbMaw4bujbmcga2jDoSBs4bubbiDhu58gY+G6oyBoYWkgbG/huqFpIHRyxrDhu51uZyAoMTI2IGjhu41jIHNpbmggaOG7jWMgdGh14bqtdCB2w6AgMTM1IGjhu41jIHNpbmggbmdo4buBKSwgY2hvIHRo4bqleSB24bqrbiBjw7JuIG5oaeG7gXUgaOG7jWMgc2luaCBjaMawYSB4w6FjIMSR4buLbmggcsO1IHLDoG5nIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdOG6rXAgdMawxqFuZyBsYWkuDQoNCi0gVOG7qyBr4bq/dCBxdeG6oyBuw6B5IGPDsyB0aOG7gyBzdXkgcmEgcuG6sW5nIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMgY8OzIOG6o25oIGjGsOG7n25nIG5o4bqldCDEkeG7i25oIMSR4bq/biBt4bupYyDEkeG7mSBxdWFuIHTDom0gY+G7p2EgaOG7jWMgc2luaCDEkeG7kWkgduG7m2kgdmnhu4djIHRp4bq/cCB04bulYyBo4buNYyB04bqtcCBzYXUgYuG6rWMgxJHhuqFpIGjhu41jLiBI4buNYyBzaW5oIHRoZW8gaOG7jWMgY8OhYyB0csaw4budbmcgaOG7jWMgdGh14bqtdCBjw7MgeHUgaMaw4bubbmcgZ+G6r24gYsOzIHbhu5tpIGNvbiDEkcaw4budbmcgaOG7jWMgduG6pW4gaMahbiwgdHJvbmcga2hpIGjhu41jIHNpbmggdHLGsOG7nW5nIG5naOG7gSBjw7MgdGjhu4MgdGhpw6puIHbhu4EgxJHhu4tuaCBoxrDhu5tuZyBuZ2jhu4EgbmdoaeG7h3AgdGjhu7FjIHRp4buFbiB2w6AgZ2lhIG5o4bqtcCB0aOG7iyB0csaw4budbmcgbGFvIMSR4buZbmcgc+G7m20gaMahbi4NCg0KDQoNCiMjIyMgKio0LjMuMyBIaeG7h3UgaGFpIHThu7cgbOG7hyoqDQoNCioqVGhp4bq/dCBs4bqtcCB04bu3IGzhu4cqKg0KDQpU4bu3IGzhu4cgaOG7jWMgc2luaCBz4buRbmcg4bufIFJ1cmFsIGjhu41jIGNoxrDGoW5nIHRyw6xuaCBBY2FkZW1pYzoNCg0KJCQNCnBfMSA9IFAoXHRleHR7cmVzaWRlbmNlfSA9IFJ1cmFsIFxtaWQgXHRleHR7dHlwZV9zY2hvb2x9ID0gQWNhZGVtaWMpDQokJA0KVOG7tyBs4buHIGjhu41jIHNpbmggc+G7kW5nIOG7nyBSdXJhbCBo4buNYyBjaMawxqFuZyB0csOsbmggVmFjYXRpb25hbDoNCg0KJCQNCnBfMSA9IFAoXHRleHR7cmVzaWRlbmNlfSA9IFJ1cmFsIFxtaWQgXHRleHR7dHlwZV9zY2hvb2x9ID0gVmFjYXRpb25hbCkNCiQkDQpIaeG7h3UgY2jDqm5oIGzhu4djaCBnaeG7r2EgaGFpIHThu7cgbOG7hzoNCg0KJCQNCmQgPSBwXzEgLSBwXzINCiQkDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotICoqR2nhuqMgdGh1eeG6v3QgSOKCgCoqOiBLaMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgdOG7tyBs4buHICANCiAgJCQgSF8wOiBwXzEgLSBwXzIgPSAwJCQNCg0KLSAqKkdp4bqjIHRodXnhur90IEgxKSoqOiBU4bu3IGzhu4cgaOG7jWMgc2luaCBSdXJhbCBo4buNYyBBY2FkZW1pYyB0aOG6pXAgaMahbiBWYWNhdGlvbmFsOiAkSF8xOiBwXzEgLSBwXzIgPCAwJA0KICANCg0KDQpgYGB7cn0NCg0KbGlicmFyeShzdGF0cykNCg0KdGVzdHR5cGVyZSA8LSBwcm9wLnRlc3QoDQogIHggPSBjKHRhYmxlX3R5cGVyZVsiQWNhZGVtaWMiLCAiUnVyYWwiXSwgdGFibGVfdHlwZXJlWyJWb2NhdGlvbmFsIiwgIlJ1cmFsIl0pLA0KICBuID0gYyhzdW0odGFibGVfdHlwZXJlWyJBY2FkZW1pYyIsIF0pLCBzdW0odGFibGVfdHlwZXJlWyJWb2NhdGlvbmFsIiwgXSkpLA0KICBhbHRlcm5hdGl2ZSA9ICJsZXNzIiwNCiAgY29ycmVjdCA9IEZBTFNFDQopDQpwcmludCh0ZXN0dHlwZXJlKQ0KYGBgDQoNCg0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBoYWkgdOG7tyBs4buHIGNobyB0aOG6pXkgJFxjaGleMiA9IDYwLjMzNiQsIHbhu5tpIHAtdmFsdWUgPSAzLjk5OGUtMTUsIG5o4buPIGjGoW4gbmhp4buBdSBzbyB24bubaSBt4bupYyDDvSBuZ2jEqWEgMC4wNS4gRG8gxJHDsywgdGEgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJCwgdOG7qWMgbMOgICBr4bq/dCBsdeG6rW4gcuG6sW5nICB04bu3IGzhu4cgaOG7jWMgc2luaCBo4buNYyBjaMawxqFuZyB0csOsbmggaOG7jWMgdGh14bqtdCBz4buRbmcg4bufIG7DtG5nIHRow7RuIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIHThu7cgbOG7hyBo4buNYyBzaW5oIGjhu41jIG5naOG7gSBz4buRbmcg4bufIG7DtG5nIHRow7RuLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBoaeG7h3Ugc+G7kSB04bu3IGzhu4cgJChwXzEgLSBwXzIpJCBsw6AgdOG7qyDigJMxLjAwMDAgxJHhur9uIC0wLjE5OTI3NCBj4bunbmcgY+G7kSB0aMOqbSBuaOG6rW4gxJHhu4tuaCBy4bqxbmcgdOG7tyBs4buHIGPhu6dhIG5ow7NtIEFjYWRlbWljIHRo4buxYyBz4buxIG5o4buPIGjGoW4gbmjDs20gVm9jYXRpb25hbC4gxJBp4buBdSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCBz4buxIGtow6FjIGJp4buHdCB0cm9uZyB4dSBoxrDhu5tuZyBjaOG7jW4gbcO0aSB0csaw4budbmcgaOG7jWMgdOG6rXAgZOG7sWEgdGhlbyBuxqFpIGjhu41jIHNpbmggxJFhbmcgc2luaCBz4buRbmcuDQoNCiMjIyMgKio0LjMuNCBU4bu3IHPhu5EgTmd1eSBjxqEgKFJlbGF0aXZlIFJpc2sgLSBSUikqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZXBpdG9vbHMpDQpycnR5cGVyZSA8LSByaXNrcmF0aW8odGFibGVfdHlwZXJlLCBtZXRob2QgPSAiYm9vdCIpDQpwcmludChycnR5cGVyZSkNCmBgYA0KDQoNCg0KKipOaOG6rW4geMOpdDoqKg0KDQotIEvhur90IHF14bqjIHBow6JuIHTDrWNoIHThu7cgc+G7kSBy4bunaSBybyAocmlzayByYXRpbykgY2hvIHRo4bqleSBo4buNYyBzaW5oIGtodSB24buxYyB0aMOgbmggdGjhu4sgY8OzIGto4bqjIG7Eg25nIGNo4buNbiBjaMawxqFuZyB0csOsbmggaOG7jWMgbmdo4buBIGNo4buJIHjhuqVwIHjhu4kgYuG6sW5nIGtob+G6o25nIDYwLjYlIHNvIHbhu5tpIGjhu41jIHNpbmgga2h1IHbhu7FjIG7DtG5nIHRow7RuIChSUiA9IDAuNjA2LCBDSSA5NSU6IFswLjUyNSA7IDAuNjk2XSkuIEtob+G6o25nIHRpbiBj4bqteSA5NSUga2jDtG5nIGNo4bupYSBnacOhIHRy4buLIDEsIMSRaeG7gXUgbsOgeSBraOG6s25nIMSR4buLbmggc+G7sSBraMOhYyBiaeG7h3QgduG7gSB04bu3IGzhu4cgY2jhu41uIGNoxrDGoW5nIHRyw6xuaCBo4buNYyBuZ2jhu4EgZ2nhu69hIGhhaSBraHUgduG7sWMgbMOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIFRyb25nIGtoaSDEkcOzLCBuaMOzbSBo4buNYyBzaW5oIHRoZW8gaOG7jWMgY2jGsMahbmcgdHLDrG5oIGjhu41jIHRodeG6rXQgxJHGsOG7o2MgZMO5bmcgbMOgbSBuaMOzbSBjaHXhuqluLCBuw6puIFJSID0gMS4NCg0KLSDEkOG7k25nIHRo4budaSwgY+G6oyBiYSBraeG7g20gxJHhu4tuaCB0aOG7kW5nIGvDqiDEkeG7gXUgY2hvIHJhIHAtdmFsdWUgY+G7sWMga+G7syBuaOG7jyAocCA8IDAuMDAwMDAwMDAwMDAwMDEpLCBjaG8gdGjhuqV5IG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgbsahaSBjxrAgdHLDuiB2w6AgbG/huqFpIGjDrG5oIGjhu41jIHThuq1wIGzDoCBy4bqldCBjw7Mgw70gbmdoxKlhLiDEkGnhu4F1IG7DoHkga2jhurNuZyDEkeG7i25oIHLhurFuZyBz4buxIGtow6FjIGJp4buHdCB24buBIHh1IGjGsOG7m25nIGzhu7FhIGNo4buNbiBnaeG7r2EgaOG7jWMgbmdo4buBIHbDoCBo4buNYyB0aHXhuq10IGdp4buvYSBo4buNYyBzaW5oIG7DtG5nIHRow7RuIHbDoCB0aMOgbmggdGjhu4sga2jDtG5nIHBo4bqjaSBkbyBuZ+G6q3Ugbmhpw6puLCBtw6AgcGjhuqNuIMOhbmggc+G7sSBi4bqldCBjw6JuIHjhu6luZyBjw7MgdGjhuq10IHRyb25nIHRo4buxYyB04bq/Lg0KDQpU4burIGPDoWMga+G6v3QgcXXhuqMgdHLDqm4sIGPDsyB0aOG7gyB0aOG6pXkgbsahaSBjxrAgdHLDuiDEkcOzbmcgdmFpIHRyw7IgcXVhbiB0cuG7jW5nIHRyb25nIHZp4buHYyDEkeG7i25oIGjGsOG7m25nIGdpw6FvIGThu6VjLiBWaeG7h2MgaOG7jWMgc2luaCBuw7RuZyB0aMO0biBjw7MgeHUgaMaw4bubbmcgY2jhu41uIGjhu41jIG5naOG7gSBuaGnhu4F1IGjGoW4gZ+G7o2kgw70gcuG6sW5nIGPhuqduIGPDsyBjaMOtbmggc8OhY2ggaMaw4bubbmcgbmdoaeG7h3AgdsOgIGjhu5cgdHLhu6MgcGjDuSBo4bujcCwgbmjhurFtIMSR4bqjbSBi4bqjbyBjxqEgaOG7mWkgaOG7jWMgdGh14bqtdCBjw7RuZyBi4bqxbmcgaMahbiBnaeG7r2EgY8OhYyBraHUgduG7sWMuDQoNCg0KIyMjIyAqKjQuMy41IFThu7cgc+G7kSBDaMOqbmggKE9kZHMgUmF0aW8gLSBPUik6KioNCg0KYGBge3J9DQpsaWJyYXJ5KERlc2NUb29scykNCm9ydHlwZXJlIDwtIE9kZHNSYXRpbyh0YWJsZV90eXBlcmUsIG1ldGhvZD0id2FsZCIsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KcHJpbnQob3J0eXBlcmUpDQpgYGANCi0gVOG7tyBz4buRIG9kZHMgKG9kZHMgcmF0aW8pIGdp4buvYSBoYWkgbmjDs20gaOG7jWMgc2luaCB0aGVvIGNoxrDGoW5nIHRyw6xuaCBo4buNYyAoQWNhZGVtaWMgdsOgIFZvY2F0aW9uYWwpIHThuqFpIGtodSB24buxYyBuw7RuZyB0aMO0biDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgbMOgIDAuMzU4NCwgduG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JSB04burIDAuMjc1NyDEkeG6v24gMC40NjU4LiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6Agb2RkcyDEkeG7gyBt4buZdCBo4buNYyBzaW5oIHPhu5FuZyDhu58gbsO0bmcgdGjDtG4gdGhlbyBo4buNYyBjaMawxqFuZyB0csOsbmggaOG7jWMgdGh14bqtdCBjaOG7iSBi4bqxbmcga2hv4bqjbmcgMzUuODQlIG9kZHMgY+G7p2EgaOG7jWMgc2luaCBo4buNYyBjaMawxqFuZyB0csOsbmggbmdo4buBIHThuqFpIGPDuW5nIGtodSB24buxYy4NCg0KLSBOw7NpIGPDoWNoIGtow6FjLCBo4buNYyBzaW5oIGjhu41jIGNoxrDGoW5nIHRyw6xuaCBo4buNYyB0aHXhuq10IGPDsyB4w6FjIHN14bqldCBz4buRbmcg4bufIGtodSB24buxYyBuw7RuZyB0aMO0biB0aOG6pXAgaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBo4buNYyBzaW5oIGjhu41jIGNoxrDGoW5nIHRyw6xuaCBuZ2jhu4EuDQoNCi0gxJBp4buBdSBuw6B5IHBo4bqjbiDDoW5oIG3hu5l0IHh1IGjGsOG7m25nIMSRw6FuZyBjaMO6IMO9OiBjaMawxqFuZyB0csOsbmggaOG7jWMgdGh14bqtdCBkxrDhu51uZyBuaMawIHBo4buVIGJp4bq/biBoxqFuIOG7nyBraHUgduG7sWMgxJHDtCB0aOG7iywgdHJvbmcga2hpIGNoxrDGoW5nIHRyw6xuaCBuZ2jhu4EgbOG6oWkgdGh1IGjDunQgbmhp4buBdSBo4buNYyBzaW5oIHThu6sga2h1IHbhu7FjIG7DtG5nIHRow7RuLiBL4bq/dCBxdeG6oyBuw6B5IGfDs3AgcGjhuqduIGzDoG0gcsO1IHPhu7Ega2jDoWMgYmnhu4d0IHRyb25nIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdOG6rXAgdGhlbyBraHUgduG7sWMgY8awIHRyw7ouDQoNCg0KDQojIyMgKio0LjQgdHlwZXNjaG9vbCAtIGludGVyZXN0KioNCg0KIyMjIyAqKjQuNC4xIELhuqNuZyB04bqnbiBz4buRIGNow6lvKioNCg0KYGBge3J9DQoNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmtuaXRyOjprYWJsZSh0YWJsZV90eXBlaW4sIA0KICAgICAgICAgICAgIGNhcHRpb24gPSAiQuG6o25nIDQuNCBU4bqnbiBz4buRIGjhu41jIHNpbmggdOG6oWkgaGFpIG3DtGkgdHLGsOG7nW5nIGjhu41jIHThuq1wIHbDoCBt4bupYyDEkeG7mSBxdWFuIHTDom0gxJHhur9uIGjhu41jIGNhbyBo4buNYyIpDQoNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gQuG6o25nIDQuNCBjaG8gdGjhuqV5IGPDsyBz4buxIGtow6FjIGJp4buHdCByw7UgcuG7h3QgZ2nhu69hIGhhaSBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIHbhu4EgbeG7qWMgxJHhu5kgcXVhbiB0w6JtIMSR4bq/biB2aeG7h2MgaOG7jWMgY2FvIGjhu41jLiBI4buNYyBzaW5oIHRodeG7mWMgbmjDs20gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgKEFjYWRlbWljKSBjw7MgeHUgaMaw4bubbmcgcuG6pXQgcXVhbiB0w6JtIHbDoCBxdWFuIHTDom0gxJHhur9uIGjhu41jIGNhbyBo4buNYyBuaGnhu4F1IGjGoW4gc28gduG7m2kgaOG7jWMgc2luaCB04burIHRyxrDhu51uZyBuZ2jhu4EgKFZvY2F0aW9uYWwpLiBD4bulIHRo4buDLCBz4buRIGjhu41jIHNpbmggIlZlcnkgSW50ZXJlc3RlZCIg4bufIG5ow7NtIEFjYWRlbWljICgyMTIgaOG7jWMgc2luaCkgZ+G6p24gZ+G6pXAgxJHDtGkgc28gduG7m2kgVm9jYXRpb25hbCAoMTEyIGjhu41jIHNpbmgpLiBOZ8aw4bujYyBs4bqhaSwg4bufIG5ow7NtICJOb3QgSW50ZXJlc3RlZCIsIHPhu5EgaOG7jWMgc2luaCB0csaw4budbmcgVm9jYXRpb25hbCAoNTYpIGzhuqFpIGNhbyBn4bqnbiBn4bqlcCDEkcO0aSBzbyB24bubaSB0csaw4budbmcgQWNhZGVtaWMgKDMwKS4gxJBp4buBdSBuw6B5IGfhu6NpIMO9IHLhurFuZyBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIGPDsyB0aOG7gyBsw6AgbeG7mXQgeeG6v3UgdOG7kSBxdWFuIHRy4buNbmcg4bqjbmggaMaw4bufbmcgxJHhur9uIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdOG6rXAgdGnhur9wIHRoZW8gY+G7p2EgaOG7jWMgc2luaC4NCg0KLSBE4buvIGxp4buHdSBjaG8gdGjhuqV5IGjhu41jIHNpbmggdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgbmjDrG4gY2h1bmcgY8OzIMSR4buLbmggaMaw4bubbmcgaOG7jWMgY2FvIGjhu41jIHLDtSByw6BuZyBoxqFuLiBUcm9uZyBraGkgxJHDsywgaOG7jWMgc2luaCB04burIGPDoWMgdHLGsOG7nW5nIG5naOG7gSBjw7MgeHUgaMaw4bubbmcga2jDtG5nIHF1YW4gdMOibSBob+G6t2MgY2jGsGEgeMOhYyDEkeG7i25oIHLDtSB24buBIHZp4buHYyBo4buNYyB0aeG6v3AgbMOqbiBzYXUgxJHhuqFpIGjhu41jLg0KDQoNCg0KDQojIyMjICoqNC40LjIgVHLhu7FjIHF1YW4gaG/DoSoqDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KDQpkZl90eXBlaW4gPC0gYXMuZGF0YS5mcmFtZSh0YWJsZV90eXBlaW4pDQoNCiMgxJDhurd0IHTDqm4gY+G7mXQgcsO1IHLDoG5nDQpjb2xuYW1lcyhkZl90eXBlaW4pIDwtIGMoIlR5cGVfb2ZfU2Nob29sIiwgIkludGVyZXN0IiwgIkNvdW50IikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbSAoZ3JvdXBlZCBiYXIgY2hhcnQpDQpnZ3Bsb3QoZGZfdHlwZWluLCBhZXMoeCA9IEludGVyZXN0LCB5ID0gQ291bnQsIGZpbGwgPSBUeXBlX29mX1NjaG9vbCkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIHZqdXN0ID0gLTAuMjUsIHNpemUgPSAzKSArDQogIGxhYnMoDQogICAgeCA9ICJN4bupYyDEkeG7mSBxdWFuIHTDom0gaOG7jWMgY2FvIGjhu41jIiwNCiAgICB5ID0gIlPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCIsDQogICAgZmlsbCA9ICJMb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIiwNCiAgICB0aXRsZSA9ICJCaeG7g3UgxJHhu5MgNC40OiBU4bqnbiBz4buRIGjhu41jIHNpbmggdGhlbyBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIHbDoCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgcGjhu6UgaHV5bmgiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCg0KDQojIyMjICoqNC40LjMgSGnhu4d1IGhhaSB04bu3IGzhu4cqKg0KDQoqKlRoaeG6v3QgbOG6rXAgdOG7tyBs4buHKioNCg0KVOG7tyBs4buHIGjhu41jIHNpbmggaOG7jWMgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgKEFjYWRlbWljKSBy4bqldCBxdWFuIHTDom0gxJHhur9uIGjhu41jIGNhbyBo4buNYzoNCg0KJCQNCnBfMSA9IFAoXHRleHR7SW50ZXJlc3R9ID0gVmVyeSBJbnRlcmVzdGVkIFxtaWQgXHRleHR7dHlwZV9zY2hvb2x9ID0gQWNhZGVtaWMpDQokJA0KVOG7tyBs4buHIGjhu41jIHNpbmggaOG7jWMgdHLGsOG7nW5nIG5naOG7gSAoVm9jYXRpb25hbCkgcuG6pXQgcXVhbiB0w6JtIMSR4bq/biBo4buNYyBjYW8gaOG7jWM6DQoNCiQkDQpwXzEgPSBQKFx0ZXh0eyhJbnRlcmVzdH0gPSBWZXJ5IEludGVyZXN0ZWQgXG1pZCBcdGV4dHt0eXBlX3NjaG9vbH0gPSBWb2NhdGlvbmFsKQ0KJCQNCkhp4buHdSBjaMOqbmggbOG7h2NoIGdp4buvYSBoYWkgdOG7tyBs4buHOg0KDQokJA0KZCA9IHBfMSAtIHBfMg0KJCQNCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gKipHaeG6oyB0aHV54bq/dCBI4oKAKio6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSB04bu3IGzhu4cgaOG7jWMgc2luaCDigJxWZXJ5IEludGVyZXN0ZWTigJ0gIA0KICAkJCBIXzA6IHBfMSAtIHBfMiA9IDAkJA0KDQotICoqR2nhuqMgdGh1eeG6v3QgSDEpKio6IFThu7cgbOG7hyBo4buNYyBzaW5oIGjhu41jIHRyxrDhu51uZyBBY2FkZW1pYyBy4bqldCBxdWFuIHTDom0gxJHhur9uIGjhu41jIGNhbyBo4buNYyBjYW8gaMahbiBo4buNYyBzaW5oIHRyxrDhu51uZyBWb2NhdGlvbmFsOiAkSF8xOiBwXzEgLSBwXzIgPiAwJA0KICANCg0KDQpgYGB7cn0NCg0KbGlicmFyeShzdGF0cykNCg0KdGVzdHR5cGVpbiA8LSBwcm9wLnRlc3QoDQogIHggPSBjKHRhYmxlX3R5cGVpblsiQWNhZGVtaWMiLCAiVmVyeSBJbnRlcmVzdGVkIl0sIHRhYmxlX3R5cGVpblsiVm9jYXRpb25hbCIsICJWZXJ5IEludGVyZXN0ZWQiXSksDQogIG4gPSBjKHN1bSh0YWJsZV90eXBlaW5bIkFjYWRlbWljIiwgXSksIHN1bSh0YWJsZV90eXBlaW5bIlZvY2F0aW9uYWwiLCBdKSksDQogIGFsdGVybmF0aXZlID0gImdyZWF0ZXIiLA0KICBjb3JyZWN0ID0gRkFMU0UNCikNCnByaW50KHRlc3R0eXBlaW4pDQpgYGANCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCB0aOG7kW5nIGvDqiBjaGkgYsOsbmggcGjGsMahbmcgYuG6sW5nIDQuMTM0MyB2w6AgZ2nDoSB0cuG7iyBwX3ZhbHVlID0gMC4wMjEwMS4gVuG7m2kgbeG7qWMgw70gbmdoxKlhIDUlLCBuaOG6rW4gdGjhuqV5IGdpw6EgdHLhu4sgcF92YWx1ZSBiw6kgaMahbiBuw6puIHRhIGPDsyDEkeG7pyBjxqEgc+G7nyBiw6FjIGLhu48gZ2nhuqNpIHRodXnhur90IEhfMCB2w6Aga+G6v3QgbHXhuq1uIHLhurFuZyB04bu3IGzhu4cgaOG7jWMgc2luaCBy4bqldCBxdWFuIHTDom0gxJHhur9uIGjhu41jIGNhbyBo4buNYyDhu58gbmjDs20gaOG7jWMgdGh14bqtdCBjYW8gaMahbiBt4buZdCBjw6FjaCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHNvIHbhu5tpIG5ow7NtIHRyxrDhu51uZyBuZ2jhu4EuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGhp4buHdSB04bu3IGzhu4cgZGFvIMSR4buZbmcgdOG7qyAxLjI0JSDEkeG6v24gMTAwJS4NCg0KLSBL4bq/dCBxdeG6oyBuw6B5IGNobyB0aOG6pXkgbG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYyBjw7Mg4bqjbmggaMaw4bufbmcgbmjhuqV0IMSR4buLbmggxJHhur9uIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdOG6rXAgc2F1IMSR4bqhaSBo4buNYyBj4bunYSBo4buNYyBzaW5oLiBI4buNYyBzaW5oIHRoZW8gaOG7jWMgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgY8OzIHh1IGjGsOG7m25nIHF1YW4gdMOibSBuaGnhu4F1IGjGoW4gxJHhur9uIHZp4buHYyB0aeG6v3AgdOG7pWMgaOG7jWMgbMOqbiBjYW8sIHRyb25nIGtoaSBo4buNYyBzaW5oIHRyxrDhu51uZyBuZ2jhu4EgY8OzIHRo4buDIHRoacOqbiB24buBIGzhu7FhIGNo4buNbiBjb24gxJHGsOG7nW5nIG5naOG7gSBuZ2hp4buHcCB0aOG7sWMgdGnhu4VuIGjGoW4uDQoNCg0KDQojIyMjICoqNC40LjQgVOG7tyBz4buRIE5ndXkgY8ahIChSZWxhdGl2ZSBSaXNrIC0gUlIpKioNCg0KYGBge3J9DQpsaWJyYXJ5KGVwaXRvb2xzKQ0KdHRhYmxlX3R5cGVpbiA8LSB0KHRhYmxlX3R5cGVpbikNCnJydHlwZWluIDwtIHJpc2tyYXRpbyh0dGFibGVfdHlwZWluLCBtZXRob2QgPSAid2FsZCIpDQpwcmludChycnR5cGVpbikNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCg0KUGjDom4gdMOtY2ggYuG6o25nIGvhur90IHF14bqjIHNvIHPDoW5oIGdp4buvYSBo4buNYyBzaW5oIHRodeG7mWMgaGFpIG5ow7NtIHRyxrDhu51uZyBo4buNYyAoQWNhZGVtaWMgdsOgIFZvY2F0aW9uYWwpIOG7nyBjw6FjIG3hu6ljIMSR4buZIHF1YW4gdMOibSBraMOhYyBuaGF1IGNobyB0aOG6pXk6DQoNCi0gTmjDs20g4oCcTGVzcyBJbnRlcmVzdGVk4oCdIGPDsyByaXNrIHJhdGlvIMaw4bubYyBsxrDhu6NuZyBsw6AgMC41MCAoQ0k6IDAuMzUg4oCTIDAuNzEpLCBuaOG7jyBoxqFuIDEgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogduG7m2kgcC12YWx1ZSA8IDAuMDAxIChjaGktc3F1YXJlIHAgPSAwLjAwMDEpLiDEkGnhu4F1IG7DoHkgbmdoxKlhIGzDoCBo4buNYyBzaW5oIOKAnExlc3MgSW50ZXJlc3RlZOKAnSBjw7MgeMOhYyBzdeG6pXQgaOG7jWMgdHLGsOG7nW5nIFZvY2F0aW9uYWwgdGjhuqVwIGjGoW4ga2hv4bqjbmcgNTAlIHNvIHbhu5tpIG5ow7NtIOKAnEludGVyZXN0ZWTigJ0gKGNodeG6qW4pLiBOw7NpIGPDoWNoIGtow6FjLCB04bu3IGzhu4cgaOG7jWMgc2luaCDDrXQgcXVhbiB0w6JtIHRyb25nIG5ow7NtIFZvY2F0aW9uYWwgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20gcXVhbiB0w6JtLg0KDQotIE5ow7NtIOKAnE5vdCBJbnRlcmVzdGVk4oCdIGPDsyByaXNrIHJhdGlvIGzDoCAxLjU5IChDSTogMS4yMCDigJMgMi4xMCksIGzhu5tuIGjGoW4gMSB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocC0gdmFsdWUg4omIIDAuMDAxKS4gxJBp4buBdSBuw6B5IGNo4buJIHJhIHLhurFuZyBo4buNYyBzaW5oIGtow7RuZyBxdWFuIHTDom0gY8OzIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgVm9jYXRpb25hbCBjYW8gaMahbiBraG/huqNuZyA1OSUgc28gduG7m2kgbmjDs20g4oCcSW50ZXJlc3RlZOKAnS4gTsOzaSBjw6FjaCBraMOhYywgbmjhu69uZyBo4buNYyBzaW5oIGtow7RuZyBxdWFuIHTDom0gY8OzIHh1IGjGsOG7m25nIGNo4buNbiB0csaw4budbmcgbmdo4buBIG5oaeG7gXUgaMahbi4NCg0KLSBOaMOzbSDigJxVbmNlcnRhaW7igJ0gY8OzIHJpc2sgcmF0aW8gbMOgIDEuMjYgKENJOiAwLjk3IOKAkyAxLjY0KSwgbeG6t2MgZMO5IGzhu5tuIGjGoW4gMSwgbmjGsG5nIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIChwLXZhbHVlIOKJiCAwLjA3OyBjaGktc3F1YXJlIHAg4omIIDAuMDY4KS4gS2hv4bqjbmcgdGluIGPhuq15IGNo4bupYSBnacOhIHRy4buLIDEgY2hvIHRo4bqleSBraMO0bmcgxJHhu6cgYuG6sW5nIGNo4bupbmcgxJHhu4Mga2jhurNuZyDEkeG7i25oIHjDoWMgc3XhuqV0IGjhu41jIHNpbmgg4oCcVW5jZXJ0YWlu4oCdIGNo4buNbiB0csaw4budbmcgVm9jYXRpb25hbCBraMOhYyBiaeG7h3Qgc28gduG7m2kgbmjDs20g4oCcSW50ZXJlc3RlZOKAnS4NCg0KLSBOaMOzbSDigJxWZXJ5IEludGVyZXN0ZWTigJ0gY8OzIHJpc2sgcmF0aW8gbMOgIDAuODQgKENJOiAwLjY0IOKAkyAxLjExKSwgbmjhu48gaMahbiAxIG5oxrBuZyBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocC12YWx1ZSDiiYggMC4yNTsgY2hpLXNxdWFyZSBwIOKJiCAwLjI0KS4gTmjGsCB24bqteSwga2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyBjaG8gdGjhuqV5IHThu7cgbOG7hyBo4buNYyBzaW5oIHLhuqV0IHF1YW4gdMOibSBjaOG7jW4gdHLGsOG7nW5nIFZvY2F0aW9uYWwga2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIOKAnEludGVyZXN0ZWTigJ0uDQojIyMjICoqNC40LjUgVOG7tyBz4buRIENow6puaCAoT2RkcyBSYXRpbyAtIE9SKToqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZXBpdG9vbHMpDQoNCm9kdHlwZWluIDwtIG9kZHNyYXRpbyh0dGFibGVfdHlwZWluLCBtZXRob2QgPSAid2FsZCIpDQpwcmludChvZHR5cGVpbikNCmBgYA0KDQoqKipOaOG6rW4geMOpdDoqKioNCi0gTmjDs20gaOG7jWMgc2luaCAiTGVzcyBJbnRlcmVzdGVkIiBjw7Mgb2RkcyBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIEFjYWRlbWljIHRo4bqlcCBoxqFuIGtob+G6o25nIDYyLjglIHNvIHbhu5tpIG5ow7NtICJJbnRlcmVzdGVkIiAoT1IgPSAwLjM3LCBwIDwgMC4wMDEpLCBjaG8gdGjhuqV5IHh1IGjGsOG7m25nIGNo4buNbiB0csaw4budbmcgVm9jYXRpb25hbCBuaGnhu4F1IGjGoW4uIE5nxrDhu6NjIGzhuqFpLCBuaMOzbSAiTm90IEludGVyZXN0ZWQiIGPDsyBvZGRzIGNo4buNbiB0csaw4budbmcgQWNhZGVtaWMgY2FvIGfhuqVwIGtob+G6o25nIDIuNjkgbOG6p24gc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91IChPUiA9IDIuNjksIHAg4omIIDAuMDAxKSwgcGjhuqNuIMOhbmggeHUgaMaw4bubbmcgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGNhbyBoxqFuIGTDuSBraMO0bmcgcXVhbiB0w6JtLg0KDQotIEPDoWMgbmjDs20gIlVuY2VydGFpbiIgdsOgICJWZXJ5IEludGVyZXN0ZWQiIGtow7RuZyBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogc28gduG7m2kgbmjDs20gIkludGVyZXN0ZWQiIChwID4gMC4wNSkuIEPhu6UgdGjhu4MsIG5ow7NtICJVbmNlcnRhaW4iIGPDsyBPUiA9IDEuNTQgduG7m2kgcCDiiYggMC4wNywgY2jhu4kgcmEgeHUgaMaw4bubbmcgdMSDbmcgbmjGsG5nIGNoxrBhIMSR4bunIG3huqFuaCDEkeG7gyBr4bq/dCBsdeG6rW47IHRyb25nIGtoaSBuaMOzbSAiVmVyeSBJbnRlcmVzdGVkIiBjw7MgT1IgPSAwLjc2IHbhu5tpIHAg4omIIDAuMjUsIGNobyB0aOG6pXkga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gy4gTmjGsCB24bqteSwgc+G7sSBxdWFuIHTDom0gduG7q2EgcGjhuqNpIGhv4bq3YyBraMO0bmcgcXVhbiB0w6JtIHLDtSByw6BuZyDEkeG6v24gdHLGsOG7nW5nIGjhu41jIGzhuqFpIGPDsyDhuqNuaCBoxrDhu59uZyBs4bubbiBoxqFuIMSR4bq/biB2aeG7h2MgY2jhu41uIGxv4bqhaSBow6xuaCB0csaw4budbmcsIHNvIHbhu5tpIG5o4buvbmcgbeG7qWMgxJHhu5kgcXVhbiB0w6JtIGPhu7FjIMSRb2FuIG5oxrAgIlZlcnkgSW50ZXJlc3RlZCIuDQoNCg0KIyMgKio0LjUgdHlwZXNjaG9vbCAtIHBhcmVudF9zYWxhcnkqKg0KDQojIyMjICoqNC41LjEgQuG6o25nIHThuqduIHPhu5EgY2jDqW8qKg0KDQpgYGB7cn0NCg0KDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoa25pdHIpDQoNCiMgR2nhuqMgc+G7rSBi4bqhbiBjw7MgZOG6oW5nIGLhuqNuZyBuaMawIHNhdToNCnRhYmxlX3R5cGVwYXJlbnRzYWwxIDwtIGRhdGEuZnJhbWUoDQogIFR5cGUgPSByZXAoYygiQWNhZGVtaWMiLCAiVm9jYXRpb25hbCIpLCBlYWNoID0gNCksDQogIFBhcmVudEluY29tZSA9IHJlcChjKCJhZGVxdWF0ZSIsICJhdmVyYWdlIiwgImhpZ2giLCAibG93IiksIHRpbWVzID0gMiksDQogIEZyZXF1ZW5jeSA9IGMoMjM3LCAyODMsIDI4LCA2MSwgMjExLCAxNjMsIDExLCA2KQ0KKQ0KDQojIFhvYXkgYuG6o25nOiB04burIGxvbmcgLT4gd2lkZQ0KdGFibGVfd2lkZSA8LSB0YWJsZV90eXBlcGFyZW50c2FsMSAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IFR5cGUsIHZhbHVlc19mcm9tID0gRnJlcXVlbmN5KQ0KDQojIMSQ4buVaSB0w6puIGPhu5l0IGNobyByw7UgcsOgbmcNCmNvbG5hbWVzKHRhYmxlX3dpZGUpWzFdIDwtICJUaHUgbmjhuq1wIHBo4bulIGh1eW5oIg0KDQojIFh14bqldCBi4bqjbmcgcGjDuSBo4bujcCDEkeG7gyBjaMOobiBXb3JkDQprYWJsZSh0YWJsZV93aWRlLCBjYXB0aW9uID0gIkLhuqNuZyA0LjUgVOG6p24gc+G7kSBo4buNYyBzaW5oIHThuqFpIGhhaSBtw7RpIHRyxrDhu51uZyBo4buNYyB04bqtcCB2w6AgdGh1IG5o4bqtcCBj4bunYSBwaOG7pSBodXluaCIpDQoNCg0KYGBgDQoNCg0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gQuG6o25nIDQuNSBjaG8gdGjhuqV5IHPhu7EgcGjDom4gYuG7kSBo4buNYyBzaW5oIGdp4buvYSBoYWkgbcO0aSB0csaw4budbmcgaOG7jWMgdOG6rXAg4oCTIEFjYWRlbWljICho4buNYyB0aHXhuq10KSB2w6AgVm9jYXRpb25hbCAoaOG7jWMgbmdo4buBKSDigJMgdGhlbyBt4bupYyB0aHUgbmjhuq1wIGPhu6dhIHBo4bulIGh1eW5oIChhZGVxdWF0ZSwgYXZlcmFnZSwgaGlnaCwgbG93KS4gTmjDrG4gY2h1bmcsIHPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCBo4buNYyB04bqhaSBtw7RpIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGNoaeG6v20gdOG7tyBs4buHIGNhbyBoxqFuIOG7nyB04bqldCBj4bqjIGPDoWMgbeG7qWMgdGh1IG5o4bqtcC4gQ+G7pSB0aOG7gywgbmjDs20gdGh1IG5o4bqtcCB0cnVuZyBiw6xuaCAoYXZlcmFnZSkgdsOgIMSR4bunIHPhu5FuZyAoYWRlcXVhdGUpIGPDsyBz4buRIGzGsOG7o25nIGjhu41jIHNpbmggdGhlbyBo4buNYyBjaMawxqFuZyB0csOsbmggaOG7jWMgdGh14bqtdCBs4bqnbiBsxrDhu6N0IGzDoCAyODMgdsOgIDIzNywgY2FvIGjGoW4gc28gduG7m2kgY29uIHPhu5EgdMawxqFuZyDhu6luZyAxNjMgdsOgIDIxMSDhu58gbcO0aSB0csaw4budbmcgaOG7jWMgbmdo4buBLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBo4buNYyBzaW5oIGPDsyDEkWnhu4F1IGtp4buHbiBraW5oIHThur8g4buVbiDEkeG7i25oIGPDsyB4dSBoxrDhu5tuZyBs4buxYSBjaOG7jW4gY2jGsMahbmcgdHLDrG5oIGjhu41jIHRodeG6rXQgbmhp4buBdSBoxqFuLg0KDQotIOG7niBuaMOzbSB0aHUgbmjhuq1wIGNhbyAoaGlnaCksIHPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCDhu58gY+G6oyBoYWkgbcO0aSB0csaw4budbmcgxJHhu4F1IHRo4bqlcCDigJMgY2jhu4kgMjggaOG7jWMgc2luaCBo4buNYyBBY2FkZW1pYyB2w6AgMTEgaOG7jWMgc2luaCBo4buNYyBWb2NhdGlvbmFsLCBjaG8gdGjhuqV5IG5ow7NtIHRodSBuaOG6rXAgY2FvIGzDoCB0aGnhu4N1IHPhu5EgdHJvbmcgdG/DoG4gYuG7mSBt4bqrdSBraOG6o28gc8OhdC4gVHV5IG5oacOqbiwgdHJvbmcgbmjDs20gdGh1IG5o4bqtcCB0aOG6pXAgKGxvdyksIHPhu7Ega2jDoWMgYmnhu4d0IHRy4bufIG7Dqm4gcsO1IHLhu4d0OiBjw7MgNjEgaOG7jWMgc2luaCB0aHXhu5ljIEFjYWRlbWljLCB0cm9uZyBraGkgY2jhu4kgY8OzIDYgaOG7jWMgc2luaCB0aHXhu5ljIFZvY2F0aW9uYWwuIMSQaeG7gXUgbsOgeSBwaOG6o24gw6FuaCBt4buZdCBuZ2jhu4tjaCBsw70gxJHDoW5nIGNow7ogw706IGTDuSBjw7MgdGh1IG5o4bqtcCB0aOG6pXAsIG3hu5l0IGLhu5kgcGjhuq1uIGjhu41jIHNpbmggduG6q24gdGhlbyDEkXXhu5VpIGNoxrDGoW5nIHRyw6xuaCBo4buNYyB0aHXhuq10IHRoYXkgdsOsIGjhu41jIG5naOG7gSDigJMgxJFp4buBdSBuw6B5IGPDsyB0aOG7gyBi4bqvdCBuZ3Xhu5NuIHThu6sga+G7syB24buNbmcgY2FvIHbhu4EgZ2nDoW8gZOG7pWMgxJHhuqFpIGjhu41jIGhv4bq3YyDEkeG7i25oIGjGsOG7m25nIG5naOG7gSBuZ2hp4buHcCBkw6BpIGjhuqFuLg0KDQotIFThu5VuZyB0aOG7gywgZOG7ryBsaeG7h3UgZ+G7o2kgw70gcuG6sW5nIHRodSBuaOG6rXAgY+G7p2EgcGjhu6UgaHV5bmggY8OzIOG6o25oIGjGsOG7n25nIG5o4bqldCDEkeG7i25oIMSR4bq/biBs4buxYSBjaOG7jW4gbcO0aSB0csaw4budbmcgaOG7jWMgdOG6rXAgY+G7p2EgaOG7jWMgc2luaCwgdHV5IG5oacOqbiBt4buRaSBxdWFuIGjhu4cgbsOgeSBraMO0bmcgaG/DoG4gdG/DoG4gdHV54bq/biB0w61uaC4gDQoNCg0KIyMjIyAqKjQuNS4yIFRy4buxYyBxdWFuIGhvw6EqKg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCg0KZGZfdHlwZXBhcmVudHNhbCA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlX3R5cGVwYXJlbnRzYWwpDQoNCiMgxJDhurd0IHTDqm4gY+G7mXQgcsO1IHLDoG5nDQpjb2xuYW1lcyhkZl90eXBlcGFyZW50c2FsKSA8LSBjKCJUeXBlX29mX1NjaG9vbCIsICJQYXJlbnRfc2FsYXJ5IiwgIkNvdW50IikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbSAoZ3JvdXBlZCBiYXIgY2hhcnQpDQpnZ3Bsb3QoZGZfdHlwZXBhcmVudHNhbCwgYWVzKHggPSBQYXJlbnRfc2FsYXJ5LCB5ID0gQ291bnQsIGZpbGwgPSBUeXBlX29mX1NjaG9vbCkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIHZqdXN0ID0gLTAuMjUsIHNpemUgPSAzKSArDQogIGxhYnMoDQogICAgeCA9ICJN4bupYyB0aHUgbmjhuq1wIGPhu6dhIHBo4bulIGh1eW5oIiwNCiAgICB5ID0gIlPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCIsDQogICAgZmlsbCA9ICJMb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIiwNCiAgICB0aXRsZSA9ICJCaeG7g3UgxJHhu5MgNC41OiBU4bqnbiBz4buRIGjhu41jIHNpbmggdGhlbyBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIHbDoCBt4bupYyB0aHUgbmjhuq1wIGPhu6dhIHBo4bulIGh1eW5oIg0KICApICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCmBgYA0KDQoNCg0KKipOaOG6rW4geMOpdDoqKg0KDQotIEJCaeG7g3UgxJHhu5MgNC41IGNobyB0aOG6pXkgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBt4bupYyB0aHUgbmjhuq1wIGPhu6dhIHBo4bulIGh1eW5oIHbDoCBs4buxYSBjaOG7jW4gbG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYyAoQWNhZGVtaWMg4oCTIGjhu41jIHRodeG6rXQgdsOgIFZvY2F0aW9uYWwg4oCTIGjhu41jIG5naOG7gSkgY+G7p2EgaOG7jWMgc2luaC4gTmjDrG4gY2h1bmcsIHPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCBo4buNYyBjaMawxqFuZyB0csOsbmggaOG7jWMgdGh14bqtdCB2xrDhu6N0IHRy4buZaSBoxqFuIGNoxrDGoW5nIHRyw6xuaCBo4buNYyBuZ2jhu4Eg4bufIGjhuqd1IGjhur90IGPDoWMgbmjDs20gdGh1IG5o4bqtcC4g4bueIG5ow7NtIHRodSBuaOG6rXAgYWRlcXVhdGUgKMSR4bunIHPhu5FuZyksIHPhu5EgaOG7jWMgc2luaCBo4buNYyBBY2FkZW1pYyBsw6AgMjM3LCBjaOG7iSBjYW8gaMahbiBraG/huqNuZyAxLDEyIGzhuqduIHNvIHbhu5tpIFZvY2F0aW9uYWwgKDIxMSBo4buNYyBzaW5oKSwgY2hvIHRo4bqleSBjaMOqbmggbOG7h2NoIGtow7RuZyBxdcOhIGzhu5tuLiBUdXkgbmhpw6puLCDEkeG6v24gbmjDs20gdGh1IG5o4bqtcCB0cnVuZyBiw6xuaCAoYXZlcmFnZSksIHPhu7EgY2jDqm5oIGzhu4djaCB0cuG7nyBuw6puIHLDtSBy4buHdCBoxqFuIHbhu5tpIDI4MyBo4buNYyBzaW5oIGjhu41jIEFjYWRlbWljLCBjYW8gZ+G6pXAga2hv4bqjbmcgMSw3NCBs4bqnbiBzbyB24bubaSAxNjMgaOG7jWMgc2luaCBWb2NhdGlvbmFsLiDEkGnhu4F1IG7DoHkgbmfhu6Ugw70gcuG6sW5nIHbhu5tpIMSRaeG7gXUga2nhu4duIHTDoGkgY2jDrW5oIOG7lW4gxJHhu4tuaCwgaOG7jWMgc2luaCBjw7Mgbmhp4buBdSBjxqEgaOG7mWkgaMahbiDEkeG7gyB0aGVvIMSRdeG7lWkgY29uIMSRxrDhu51uZyBo4buNYyB0aHXhuq10IGzDonUgZMOgaS4NCg0KLSDEkGnhu4F1IHRow7ogduG7iyBu4bqxbSDhu58gbmjDs20gdGh1IG5o4bqtcCB0aOG6pXAgKGxvdyksIG7GoWkgc+G7kSBsxrDhu6NuZyBo4buNYyBzaW5oIGjhu41jIEFjYWRlbWljIGzDoCA2MSwgdHJvbmcga2hpIGNo4buJIGPDsyA2IGjhu41jIHNpbmggaOG7jWMgVm9jYXRpb25hbCDigJMgdOG7qWMgZ+G6pXAgaMahbiAxMCBs4bqnbi4gxJDDonkgbMOgIG3hu5l0IHBow6F0IGhp4buHbiDEkcOhbmcgbMawdSDDvSwgYuG7n2kgdGjDtG5nIHRoxrDhu51uZywgbmfGsOG7nWkgdGEga+G7syB24buNbmcgaOG7jWMgc2luaCB04burIGPDoWMgZ2lhIMSRw6xuaCB0aHUgbmjhuq1wIHRo4bqlcCBz4bq9IGPDsyB4dSBoxrDhu5tuZyBjaOG7jW4gY29uIMSRxrDhu51uZyBo4buNYyBuZ2jhu4Egbmfhuq9uIGjhuqFuIMSR4buDIHPhu5ttIHRoYW0gZ2lhIHRo4buLIHRyxrDhu51uZyBsYW8gxJHhu5luZy4gVHV5IG5oacOqbiwgZOG7ryBsaeG7h3UgbsOgeSBs4bqhaSBn4bujaSDDvSDEkWnhu4F1IG5nxrDhu6NjIGzhuqFpOiBuZ2F5IGPhuqMgaOG7jWMgc2luaCBjw7MgaG/DoG4gY+G6o25oIGtpbmggdOG6vyBraMOzIGtoxINuIGPFqW5nIGPDsyB4dSBoxrDhu5tuZyB0aGVvIMSRdeG7lWkgbcO0aSB0csaw4budbmcgaOG7jWMgdGh14bqtdCwgY8OzIHRo4buDIGRvIGvhu7MgduG7jW5nIHRob8OhdCBuZ2jDqG8gcXVhIGNvbiDEkcaw4budbmcgaOG7jWMgduG6pW4gaG/hurdjIGNo4buLdSDhuqNuaCBoxrDhu59uZyB04burIGNow61uaCBzw6FjaCBo4buXIHRy4bujIGjhu41jIHThuq1wLiDhu54gbmjDs20gdGh1IG5o4bqtcCBjYW8gKGhpZ2gpLCBz4buRIGzGsOG7o25nIGjhu41jIHNpbmgg4bufIGPhuqMgaGFpIGxv4bqhaSB0csaw4budbmcgxJHhu4F1IHLhuqV0IHRo4bqlcCAoMjggaOG7jWMgc2luaCBBY2FkZW1pYywgMTEgaOG7jWMgc2luaCBWb2NhdGlvbmFsKSwgcGjhuqNuIMOhbmggcuG6sW5nIMSRw6J5IGzDoCBt4buZdCBuaMOzbSB0aGnhu4N1IHPhu5EgdHJvbmcgbeG6q3UgaG/hurdjIG5o4buvbmcgaOG7jWMgc2luaCB0aHXhu5ljIG5ow7NtIG7DoHkgY8OzIHh1IGjGsOG7m25nIHRoZW8gaOG7jWMgY8OhYyBsb+G6oWkgaMOsbmggZ2nDoW8gZOG7pWMga2jDoWMga2jDtG5nIMSRxrDhu6NjIMSR4buBIGPhuq1wICh2w60gZOG7pTogdHLGsOG7nW5nIHF14buRYyB04bq/LCBkdSBo4buNY+KApikuDQoNCi0gTmjDrG4gY2h1bmcsIGJp4buDdSDEkeG7kyBjaG8gdGjhuqV5IG3hu5l0IG3hu5FpIGxpw6puIGjhu4cgdGnhu4FtIOG6qW4gZ2nhu69hIHRodSBuaOG6rXAgZ2lhIMSRw6xuaCB2w6AgxJHhu4tuaCBoxrDhu5tuZyBnacOhbyBk4bulYywgdHJvbmcgxJHDsyBo4buNYyBzaW5oIHRodeG7mWMgY8OhYyBnaWEgxJHDrG5oIGPDsyB0aHUgbmjhuq1wIHThu6sgYWRlcXVhdGUgdHLhu58gbMOqbiBjw7MgeHUgaMaw4bubbmcgY2jhu41uIGjhu41jIEFjYWRlbWljIGNhbyBoxqFuLiDEkOG6t2MgYmnhu4d0LCDhu58gbmjDs20gdGh1IG5o4bqtcCB0aOG6pXAsIGzhu7FhIGNo4buNbiBo4buNYyB0aHXhuq10IHbhuqtuIGNoaeG6v20gxrB1IHRo4bq/IHLDtSBy4buHdCwgcGjhuqNuIMOhbmggbmnhu4FtIHRpbiBt4bqhbmggbeG6vSB2w6BvIGNvbiDEkcaw4budbmcgaOG7jWMgduG6pW4gbmjGsCBt4buZdCBwaMawxqFuZyB0aeG7h24gdsawxqFuIGzDqm4uDQoNCiMjIyMgKio0LjUuMyBIaeG7h3UgaGFpIHThu7cgbOG7hyoqDQoNCioqVGhp4bq/dCBs4bqtcCB04bu3IGzhu4cqKg0KDQpU4bu3IGzhu4cgaOG7jWMgc2luaCBo4buNYyB0csaw4budbmcgQWNhZGVtaWMgxJHhur9uIHThu6sgZ2lhIMSRw6xuaCB0aHUgbmjhuq1wIExvdzoNCiQkDQpwXzEgPSBQKFx0ZXh0e0luY29tZX0gPSBMb3cgXG1pZCBcdGV4dHt0eXBlX3NjaG9vbH0gPSBBY2FkZW1pYykNCiQkDQpU4bu3IGzhu4cgaOG7jWMgc2luaCBo4buNYyB0csaw4budbmcgVm9jYXRpb25hbCDEkeG6v24gdOG7qyBnaWEgxJHDrG5oIHRodSBuaOG6rXAgTG93Og0KDQokJA0KcF8xID0gUChcdGV4dHsoSW5jb21lfSA9IExvdyBcbWlkIFx0ZXh0e3R5cGVfc2Nob29sfSA9IFZvY2F0aW9uYWwpDQokJA0KSGnhu4d1IGNow6puaCBs4buHY2ggZ2nhu69hIGhhaSB04bu3IGzhu4c6DQoNCiQkDQpkID0gcF8xIC0gcF8yDQokJA0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSAqKkdp4bqjIHRodXnhur90IEjigoAqKjogS2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgaGFpIHThu7cgbOG7hyBo4buNYyBzaW5oIG3DoCBwaOG7pSBodXluaCBjw7MgbeG7qWMgdGh1IG5o4bqtcCAiTG93IiAgDQogICQkIEhfMDogcF8xIC0gcF8yID0gMCQkDQoNCi0gKipHaeG6oyB0aHV54bq/dCBIMSkqKjogVOG7tyBs4buHIGjhu41jIHNpbmggaOG7jWMgdHLGsOG7nW5nIEFjYWRlbWljIGtow6FjIGJp4buHdCBzbyB24bubaSBo4buNYyBzaW5oIHRyxrDhu51uZyBWb2NhdGlvbmFsIGTDuSBwaOG7pSBodXluaCBjw7luZyBt4bupYyB0aHUgbmjhuq1wICJMb3ciOiAkSF8xOiBwXzEgLSBwXzIgIFxuZSAwJA0KICANCg0KDQpgYGB7cn0NCnJvd25hbWVzKHRhYmxlX3R5cGVwYXJlbnRzYWwpIDwtIGMoIkFjYWRlbWljIiwgIlZvY2F0aW9uYWwiKQ0KDQojIFRydXkgeHXhuqV0IGdpw6EgdHLhu4sgdGhlbyBjaOG7iSBz4buRIChraMO0bmcgZMO5bmcgdMOqbiDEkeG7gyB0csOhbmggbOG7l2kpDQp4IDwtIGMoDQogIHRhYmxlX3R5cGVwYXJlbnRzYWxbMSwgNF0sICAjIHPhu5EgbMaw4bujbmcgImxvdyIgdHJvbmcgbmjDs20gQWNhZGVtaWMNCiAgdGFibGVfdHlwZXBhcmVudHNhbFsyLCA0XSAgICMgc+G7kSBsxrDhu6NuZyAibG93IiB0cm9uZyBuaMOzbSBWb2NhdGlvbmFsDQopDQoNCm4gPC0gYygNCiAgc3VtKHRhYmxlX3R5cGVwYXJlbnRzYWxbMSwgXSksICAjIHThu5VuZyBo4buNYyBzaW5oIG5ow7NtIEFjYWRlbWljDQogIHN1bSh0YWJsZV90eXBlcGFyZW50c2FsWzIsIF0pICAgIyB04buVbmcgaOG7jWMgc2luaCBuaMOzbSBWb2NhdGlvbmFsDQopDQoNCiMgVGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaCB04bu3IGzhu4cgaGFpIG3huqt1DQp0ZXN0dHlwZXBhcmVudHNhbCA8LSBwcm9wLnRlc3QoDQogIHggPSB4LA0KICBuID0gbiwNCiAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwNCiAgY29ycmVjdCA9IEZBTFNFDQopDQoNCiMgSW4ga+G6v3QgcXXhuqMNCnByaW50KHRlc3R0eXBlcGFyZW50c2FsKQ0KDQpgYGANCg0KDQotIEvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIHThu7cgbOG7hyBoYWkgbeG6q3UgY2hvIHRo4bqleSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IGdp4buvYSB04bu3IGzhu4cgaOG7jWMgc2luaCBjw7MgY2hhIG3hurkgdGh1IG5o4bqtcCAqbG93KiB0cm9uZyBoYWkgbmjDs20gdHLGsOG7nW5nLiBD4bulIHRo4buDLCB04bu3IGzhu4cgaOG7jWMgc2luaCB0aHXhu5ljIG5ow7NtICoqQWNhZGVtaWMqKiBjw7MgY2hhIG3hurkgdGh1IG5o4bqtcCB0aOG6pXAgbMOgICQoIFxoYXR7cH1fMSA9IDEwLjAyXCUgKSQsIHRyb25nIGtoaSDEkcOzIG5ow7NtICoqVm9jYXRpb25hbCoqIGNo4buJIGzDoCAkKCBcaGF0e3B9XzIgPSAxLjUzXCUgKSQuIEhp4buHdSBjaMOqbmggbOG7h2NoIGdp4buvYSBoYWkgdOG7tyBs4buHIGzDoCBraG/huqNuZyAoIDguNSUgKSwgdsOgIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGNow6puaCBs4buHY2ggbsOgeSBsw6AgICgwLjA1ODsgMC4xMTIpLCBob8OgbiB0b8OgbiBraMO0bmcgY2jhu6lhIDAuDQoNCi0gS2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nIGNobyBoYWkgdOG7tyBs4buHIMSR4buZYyBs4bqtcCB0cuG6oyB24buBIGdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogJCggXGNoaV4yID0gMjcuNDA1ICkkLCB24bubaSBi4bqtYyB04buxIGRvIGzDoCAxIHbDoCBwLXZhbHVlIGPhu7FjIG5o4buPICQoIHAgPSAxLjY1IFx0aW1lcyAxMF57LTd9ICkkLiBWw6wgcC12YWx1ZSA8IDAuMDAxLCB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nICQoIEhfMDogcF8xID0gcF8yICkkLCB2w6Aga+G6v3QgbHXhuq1uIHLhurFuZyAqKnThu7cgbOG7hyBo4buNYyBzaW5oIGPDsyBjaGEgbeG6uSB0aHUgbmjhuq1wIHRo4bqlcCBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgaGFpIG5ow7NtIHRyxrDhu51uZyoqLg0KDQotIMSQaeG7gXUgdGjDuiB24buLIGzDoCwgKip04bu3IGzhu4cgaOG7jWMgc2luaCBjw7MgaG/DoG4gY+G6o25oIGtpbmggdOG6vyBraMOzIGtoxINuIGzhuqFpIGNhbyBoxqFuIHRyb25nIG3DtGkgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQqKi4gxJBp4buBdSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCBy4bqxbmcgbmhp4buBdSBo4buNYyBzaW5oIG5naMOobyB24bqrbiBjaOG7jW4gaMaw4bubbmcgaOG7jWMgbMOqbiBjYW8gxJHhu4MgY+G6o2kgdGhp4buHbiB0xrDGoW5nIGxhaSwgaG/hurdjIGPFqW5nIGPDsyB0aOG7gyBkbyBjw6FjIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGPDsyBuaGnhu4F1IGNoxrDGoW5nIHRyw6xuaCBo4buXIHRy4bujIHTDoGkgY2jDrW5oLCBo4buNYyBi4buVbmcsIGhheSBjaMOtbmggc8OhY2ggxrB1IHRpw6puIGNobyBo4buNYyBzaW5oIGPDsyBob8OgbiBj4bqjbmggxJHhurdjIGJp4buHdC4gS+G6v3QgcXXhuqMgxJHhurd0IHJhIG5o4buvbmcgZ+G7o2kgw70gcXVhbiB0cuG7jW5nIGNobyBjaMOtbmggc8OhY2ggZ2nDoW8gZOG7pWMgdsOgIHBow6JuIGLhu5Ugbmd14buTbiBs4buxYyBo4buXIHRy4bujIG5ow7NtIGjhu41jIHNpbmggeeG6v3UgdGjhur8uDQoNCg0KIyMjIyAqKjQuNS40IFThu7cgc+G7kSBOZ3V5IGPGoSAoUmVsYXRpdmUgUmlzayAtIFJSKSoqDQoNCmBgYHtyfQ0KbGlicmFyeShlcGl0b29scykNCnR0YWJsZV90eXBlcHNhbCA8LSB0KHRhYmxlX3R5cGVwYXJlbnRzYWwpDQpycnR5cGVwc2FsIDwtIHJpc2tyYXRpbyh0dGFibGVfdHlwZXBzYWwsIG1ldGhvZCA9ICJ3YWxkIikNCnByaW50KHJydHlwZXBzYWwpDQpgYGANCioqTmjhuq1uIHjDqXQ6KioNCg0KS+G6v3QgcXXhuqMgc28gc8OhbmggZ2nhu69hIGjhu41jIHNpbmggdGh14buZYyBoYWkgbG/huqFpIHRyxrDhu51uZyBo4buNYyAoQWNhZGVtaWMgdsOgIFZvY2F0aW9uYWwpIHRoZW8gY8OhYyBt4bupYyB0aHUgbmjhuq1wIGPhu6dhIHBo4bulIGh1eW5oOg0KDQotIE5ow7NtIOKAnGF2ZXJhZ2XigJ0gY8OzIHJpc2sgcmF0aW8gPSAwLjc3NiAoQ0k6IDAuNjYzIOKAkyAwLjkwOCksIG5o4buPIGjGoW4gMSB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocC12YWx1ZSDiiYggMC4wMDE0KS4gxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIGjhu41jIHNpbmggY8OzIHRodSBuaOG6rXAg4oCcYXZlcmFnZeKAnSB04burIHBo4bulIGh1eW5oIGPDsyB4w6FjIHN14bqldCBjaOG7jW4gdHLGsOG7nW5nIFZvY2F0aW9uYWwgdGjhuqVwIGjGoW4ga2hv4bqjbmcgMjIlIHNvIHbhu5tpIGjhu41jIHNpbmggdGh14buZYyBuaMOzbSBjw7MgdGh1IG5o4bqtcCDigJxhZGVxdWF0ZeKAnSAoY2h14bqpbikuDQoNCi0gTmjDs20g4oCcaGlnaOKAnSBjw7MgcmlzayByYXRpbyA9IDAuNTk5IChDSTogMC4zNjAg4oCTIDAuOTk4KSwgY8Wpbmcgbmjhu48gaMahbiAxIHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIG5o4bq5IChwLXZhbHVlIOKJiCAwLjAyMykuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGjhu41jIHNpbmggY8OzIHRodSBuaOG6rXAgY2FvIHThu6sgcGjhu6UgaHV5bmggY8OzIGto4bqjIG7Eg25nIGNo4buNbiB0csaw4budbmcgVm9jYXRpb25hbCB0aOG6pXAgaMahbiBraG/huqNuZyA0MCUgc28gduG7m2kgbmjDs20g4oCcYWRlcXVhdGXigJ0uDQoNCi0gTmjDs20g4oCcbG934oCdIGPDsyByaXNrIHJhdGlvID0gMC4xOTAgKENJOiAwLjA4OCDigJMgMC40MTEpLCBy4bqldCBuaOG7jyBoxqFuIDEgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oIChwLXZhbHVlIDwgMC4wMDEpLiBOZ2jEqWEgbMOgIGjhu41jIHNpbmggY8OzIHBo4bulIGh1eW5oIHRodSBuaOG6rXAgdGjhuqVwIGPDsyB4w6FjIHN14bqldCBjaOG7jW4gdHLGsOG7nW5nIFZvY2F0aW9uYWwgdGjhuqVwIGjGoW4gxJHhur9uIGtob+G6o25nIDgxJSBzbyB24bubaSBuaMOzbSB0aHUgbmjhuq1wIGFkZXF1YXRlLg0KDQojIyMjICoqNC41LjUgVOG7tyBz4buRIENow6puaCAoT2RkcyBSYXRpbyAtIE9SKToqKg0KDQpgYGB7cn0NCm9kdHlwZXBzYWwgPC0gb2Rkc3JhdGlvKHR0YWJsZV90eXBlcHNhbCwgbWV0aG9kID0gIndhbGQiKQ0KcHJpbnQob2R0eXBlcHNhbCkNCmBgYA0KDQoqKipOaOG6rW4geMOpdDoqKioNCg0KLSBOaMOzbSAiYWRlcXVhdGUiIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSAoT1IgPSAxLjAwKS4gU28gduG7m2kgbmjDs20gbsOgeSwgaOG7jWMgc2luaCBjw7MgbeG7qWMgdGh1IG5o4bqtcCAiYXZlcmFnZSIgY8OzIG9kZHMgY2jhu41uIHRyxrDhu51uZyBBY2FkZW1pYyB0aOG6pXAgaMahbiBraG/huqNuZyAzNSUgKE9SID0gMC42NSwgcCDiiYggMC4wMDEpLCB0cm9uZyBraGkgbmjDs20gImhpZ2giIGPDsyBvZGRzIHRo4bqtbSBjaMOtIHRo4bqlcCBoxqFuIG7hu69hIChPUiA9IDAuNDQsIHAg4omIIDAuMDIzKS4gxJDhurdjIGJp4buHdCwgaOG7jWMgc2luaCBjw7MgdGh1IG5o4bqtcCBwaOG7pSBodXluaCAibG93IiBjaOG7iSBjw7Mgb2RkcyBjaOG7jW4gdHLGsOG7nW5nIEFjYWRlbWljIGLhurFuZyBraG/huqNuZyAxMSUgc28gduG7m2kgbmjDs20gImFkZXF1YXRlIiwgdsOgIHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmggKHAgPCAwLjAwMSkuDQoNCi0gTmjDrG4gY2h1bmcsIG3hu6ljIHRodSBuaOG6rXAgY+G7p2EgcGjhu6UgaHV5bmggY8OgbmcgdGjhuqVwIHRow6wgeMOhYyBzdeG6pXQgaOG7jWMgc2luaCBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgKEFjYWRlbWljKSBjw6BuZyBnaeG6o20uIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGhvw6BuIGPhuqNuaCBraW5oIHThur8gZ2lhIMSRw6xuaCBjw7MgdGjhu4MgbMOgIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdOG6rXAgY+G7p2EgaOG7jWMgc2luaCwgduG7m2kgeHUgaMaw4bubbmcgaOG7jWMgc2luaCB04burIGdpYSDEkcOsbmggY8OzIHRodSBuaOG6rXAgdGjhuqVwIG5naGnDqm5nIG5oaeG7gXUgaMahbiB24buBIGPDoWMgdHLGsOG7nW5nIGjGsOG7m25nIG5naGnhu4dwIChWb2NhdGlvbmFsKS4NCg0KDQoNCg0KIyMgKio0LjYgdHlwZXNjaG9vbCAtIGF2ZXJhZ2VfZ3JhZGVzKioNCg0KIyMjIyAqKjQuNi4xIELhuqNuZyB04bqnbiBz4buRIGNow6lvKioNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoa25pdHIpDQoNCiMgROG7ryBsaeG7h3UgdsOtIGThu6UNCnRhYmxlX3R5cGVhdjEgPC0gZGF0YS5mcmFtZSgNCiAgVHlwZSA9IHJlcChjKCJBY2FkZW1pYyIsICJWb2NhdGlvbmFsIiksIGVhY2ggPSA0KSwNCiAgQXZlcmFnZV9HcmFkZXMgPSByZXAoYygiTG93IiwgIkF2ZXJhZ2UiLCAiR29vZCIsICJFeGNlbGxlbnQiKSwgMiksDQogIEZyZXF1ZW5jeSA9IGMoMzQsIDIwMywgMjE0LCAxNTgsIDU4LCAyMTUsIDExOCwgNjUpDQopDQoNCiMgUGl2b3Qgc2FuZyBi4bqjbmcgcuG7mW5nDQp0YWJsZV9hdl93aWRlIDwtIHRhYmxlX3R5cGVhdjEgJT4lDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBUeXBlLCB2YWx1ZXNfZnJvbSA9IEZyZXF1ZW5jeSkNCg0KIyDEkOG7lWkgdMOqbiBj4buZdA0KY29sbmFtZXModGFibGVfYXZfd2lkZSlbMV0gPC0gIkvhur90IHF14bqjIGjhu41jIHThuq1wIg0KDQojIEluIGLhuqNuZyBk4bqhbmcgbWFya2Rvd24vcGFuZG9jIMSR4buDIGThu4UgY29weSBkw6FuIHbDoG8gV29yZA0Ka2FibGUoDQogIHRhYmxlX2F2X3dpZGUsDQogIGZvcm1hdCA9ICJwYW5kb2MiLA0KICBjYXB0aW9uID0gIkLhuqNuZyA0LjY6IFThuqduIHPhu5EgaOG7jWMgc2luaCB04bqhaSBoYWkgbcO0aSB0csaw4budbmcgaOG7jWMgdOG6rXAgdsOgIGvhur90IHF14bqjIGjhu41jIHThuq1wIHRydW5nIGLDrG5oIg0KKQ0KDQoNCmBgYA0KDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBL4bq/dCBxdeG6oyBi4bqjbmcgNC42IGNobyB0aOG6pXkgc+G7sSBwaMOibiBi4buRIGvhur90IHF14bqjIGjhu41jIHThuq1wIGdp4buvYSBoYWkgbmjDs20gaOG7jWMgc2luaCB0aGVvIG3DtGkgdHLGsOG7nW5nIGjhu41jIHThuq1wIChBY2FkZW1pYyB2w6AgVm9jYXRpb25hbCkgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IHLDtSBy4buHdC4gQ+G7pSB0aOG7gywgdHJvbmcgbmjDs20gaOG7jWMgc2luaCBo4buNYyB04bqtcCB04bqhaSBtw7RpIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IChBY2FkZW1pYyksIGPDsyA5NyBlbSDEkeG6oXQgbeG7qWMg4oCcRXhjZWxsZW504oCdIChjaGnhur9tIGtob+G6o25nIDE1LDklKSwgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgY2jhu4kgMzYgZW0gKHTGsMahbmcgxJHGsMahbmcgOSwyJSkgdHJvbmcgbmjDs20gaOG7jWMgbmdo4buBIChWb2NhdGlvbmFsKS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbcO0aSB0csaw4budbmcgaOG7jWMgdGh14bqtdCBjw7MgeHUgaMaw4bubbmcgdOG6oW8gxJFp4buBdSBraeG7h24gdOG7kXQgaMahbiDEkeG7gyBo4buNYyBzaW5oIMSR4bqhdCDEkcaw4bujYyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCB4deG6pXQgc+G6r2MuDQoNCi0gTeG6t3Qga2jDoWMsIHThu7cgbOG7hyBo4buNYyBzaW5oIMSR4bqhdCBt4bupYyDigJxHb29k4oCdIHRyb25nIG5ow7NtIFZvY2F0aW9uYWwgbOG6oWkgY2FvIGjGoW4gKDQ3LDMlKSBzbyB24bubaSBuaMOzbSBBY2FkZW1pYyAoNDIsNCUpLiBW4bubaSBt4bupYyDigJxGYWly4oCdLCBoYWkgbmjDs20gY8OzIHThu7cgbOG7hyB0xrDGoW5nIMSR4buRaSB0xrDGoW5nIMSR4buTbmcgKGtob+G6o25nIDQx4oCTNDMlKS4gTmjDrG4gY2h1bmcsIGThu68gbGnhu4d1IGfhu6NpIMO9IHLhurFuZyBtw7RpIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGPDsyB0aOG7gyBwaMO5IGjhu6NwIGjGoW4gduG7m2kgaOG7jWMgc2luaCBjw7MgxJHhu4tuaCBoxrDhu5tuZyBo4buNYyB0aHXhuq10IGNhbywgdHJvbmcga2hpIG3DtGkgdHLGsOG7nW5nIGjhu41jIG5naOG7gSBs4bqhaSBnacO6cCBuaGnhu4F1IGjhu41jIHNpbmggxJHhuqF0IG3hu6ljIGtow6Eg4buVbiDEkeG7i25oIGjGoW4gduG7gSBr4bq/dCBxdeG6oyBo4buNYyB04bqtcC4NCg0KDQojIyMjICoqNC42LjIgVHLhu7FjIHF1YW4gaG/DoSoqDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KDQpkZl90eXBlYXYgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZV90eXBlYXYpDQoNCiMgxJDhurd0IHTDqm4gY+G7mXQgcsO1IHLDoG5nDQpjb2xuYW1lcyhkZl90eXBlYXYpIDwtIGMoIlR5cGVfb2ZfU2Nob29sIiwgIkF2ZXJhZ2VfR3JhZGVzIiwgIkNvdW50IikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbSAoZ3JvdXBlZCBiYXIgY2hhcnQpDQpnZ3Bsb3QoZGZfdHlwZWF2LCBhZXMoeCA9IEF2ZXJhZ2VfR3JhZGVzLCB5ID0gQ291bnQsIGZpbGwgPSBUeXBlX29mX1NjaG9vbCkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIHZqdXN0ID0gLTAuMjUsIHNpemUgPSAzKSArDQogIGxhYnMoDQogICAgeCA9ICJL4bq/dCBxdeG6oyBo4buNYyB04bqtcCB0cnVuZyBiw6xuaCIsDQogICAgeSA9ICJT4buRIGzGsOG7o25nIGjhu41jIHNpbmgiLA0KICAgIGZpbGwgPSAiTG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYyIsDQogICAgdGl0bGUgPSAiQmnhu4N1IMSR4buTIDQuNjogVOG6p24gc+G7kSBo4buNYyBzaW5oIHRoZW8gbG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYyB2w6Aga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgdHJ1bmcgYsOsbmgiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBC4bqjbmcgNC42IHbDoCBCaeG7g3UgxJHhu5MgNC42IGNobyB0aOG6pXkgc+G7sSBwaMOibiBi4buRIHPhu5EgbMaw4bujbmcgaOG7jWMgc2luaCB0aGVvIGvhur90IHF14bqjIGjhu41jIHThuq1wIHRydW5nIGLDrG5oIOG7nyBoYWkgbG/huqFpIGjDrG5oIHRyxrDhu51uZyBo4buNYzogaOG7jWMgdGh14bqtdCAoQWNhZGVtaWMpIHbDoCBoxrDhu5tuZyBuZ2hp4buHcCAoVm9jYXRpb25hbCkuIE5ow6xuIGNodW5nLCBo4buNYyBzaW5oIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGPDsyB4dSBoxrDhu5tuZyDEkeG6oXQga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgY2FvIGjGoW4gc28gduG7m2kgaOG7jWMgc2luaCB0csaw4budbmcgaMaw4bubbmcgbmdoaeG7h3Ag4bufIGPhuqMgYmEgbeG7qWM6IEV4Y2VsbGVudCwgRmFpciB2w6AgR29vZC4NCg0KLSBD4bulIHRo4buDLCBz4buRIGzGsOG7o25nIGjhu41jIHNpbmggxJHhuqF0IGvhur90IHF14bqjIEV4Y2VsbGVudCB04bqhaSB0csaw4budbmcgaOG7jWMgdGh14bqtdCBsw6AgOTcsIGNhbyBn4bqlcCBn4bqnbiAzIGzhuqduIHNvIHbhu5tpIDM2IGjhu41jIHNpbmggdOG6oWkgdHLGsOG7nW5nIGjGsOG7m25nIG5naGnhu4dwLiDhu54gbeG7qWMgRmFpciwgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgY8OzIDI1NCBo4buNYyBzaW5oLCBjYW8gaMahbiByw7UgcuG7h3Qgc28gduG7m2kgMTcwIGjhu41jIHNpbmggY+G7p2EgdHLGsOG7nW5nIGjGsOG7m25nIG5naGnhu4dwLiBW4bubaSBt4bupYyBHb29kLCBj4bqjIGhhaSBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIMSR4buBdSBjw7Mgc+G7kSBsxrDhu6NuZyBo4buNYyBzaW5oIGtow6EgY2FvLCB0dXkgbmhpw6puIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IHbhuqtuIG5o4buJbmggaMahbiB24bubaSAyNTggaOG7jWMgc2luaCBzbyB24bubaSAxODUgY+G7p2EgdHLGsOG7nW5nIGjGsOG7m25nIG5naGnhu4dwLg0KDQotIE5o4buvbmcgY29uIHPhu5EgdHLDqm4gY2hvIHRo4bqleSBt4buZdCB4dSBoxrDhu5tuZyBuaOG6pXQgcXXDoW46IGjhu41jIHNpbmggdOG6oWkgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgY2hp4bq/bSDGsHUgdGjhur8gduG7gSBz4buRIGzGsOG7o25nIHRyb25nIG3hu41pIG3hu6ljIMSR4buZIGjhu41jIGzhu7FjLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIHBo4bqjbiDDoW5oIHPhu7Ega2jDoWMgYmnhu4d0IHRyb25nIHBoxrDGoW5nIHBow6FwIGdp4bqjbmcgZOG6oXksIHRyw6xuaCDEkeG7mSDEkeG6p3UgdsOgbyBob+G6t2MgxJHhu4tuaCBoxrDhu5tuZyBo4buNYyB04bqtcCBnaeG7r2EgaGFpIG3DtGkgdHLGsOG7nW5nIGdpw6FvIGThu6VjLg0KDQoNCiMjIyMgKio0LjYuMyBIaeG7h3UgaGFpIHThu7cgbOG7hyoqDQoNCioqVGhp4bq/dCBs4bqtcCB04bu3IGzhu4cqKg0KDQpU4bu3IGzhu4cgaOG7jWMgc2luaCBo4buNYyB0csaw4budbmcgQWNhZGVtaWMgxJHhuqF0IGvhur90IHF14bqjIEV4Y2VsbGVudCBsw6A6DQokJA0KcF8xID0gUChcdGV4dHtBdmVyYWdlIEdyYWRlc30gPSBFeGNlbGxlbnRcbWlkIFx0ZXh0e3R5cGVfc2Nob29sfSA9IEFjYWRlbWljKQ0KJCQNClThu7cgbOG7hyBo4buNYyBzaW5oIGjhu41jIHRyxrDhu51uZyBWb2NhdGlvbmFsIMSR4bqhdCBr4bq/dCBxdeG6oyBFeGNlbGxlbnQgbMOgOg0KDQokJA0KcF8xID0gUChcdGV4dHsoQXZlcmFnZSBHcmFkZXN9ID0gRXhjZWxsZW50IFxtaWQgXHRleHR7dHlwZV9zY2hvb2x9ID0gVm9jYXRpb25hbCkNCiQkDQpIaeG7h3UgY2jDqm5oIGzhu4djaCBnaeG7r2EgaGFpIHThu7cgbOG7hzoNCg0KJCQNCmQgPSBwXzEgLSBwXzINCiQkDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotICoqR2nhuqMgdGh1eeG6v3QgSOKCgCoqOiBLaMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgdOG7tyBs4buHIGjhu41jIHNpbmggbcOgIHBo4bulIGh1eW5oIGPDsyBt4bupYyB0aHUgbmjhuq1wICJMb3ciICANCiAgJCQgSF8wOiBwXzEgLSBwXzIgPSAwJCQNCg0KLSAqKkdp4bqjIHRodXnhur90IEgxKSoqOiBU4bu3IGzhu4cgaOG7jWMgc2luaCB0csaw4budbmcgQWNhZGVtaWMgIHbDoCB0csaw4budbmcgVm9jYXRpb25hbCDEkeG6oXQga+G6v3QgcXXhuqMgRXhjZWxsZW50IGtow6FjIG5oYXU6ICRIXzE6IHBfMSAtIHBfMiAgXG5lIDAkDQogIA0KDQoNCmBgYHtyfQ0KbGlicmFyeShzdGF0cykNCg0Kcm93bmFtZXModGFibGVfdHlwZWF2KSA8LSBjKCJBY2FkZW1pYyIsICJWb2NhdGlvbmFsIikNCnRlc3RfZXhjZWxsZW50IDwtIHByb3AudGVzdCgNCiAgeCA9IGModGFibGVfdHlwZWF2WyJBY2FkZW1pYyIsICJFeGNlbGxlbnQiXSwgdGFibGVfdHlwZWF2WyJWb2NhdGlvbmFsIiwgIkV4Y2VsbGVudCJdKSwNCiAgbiA9IGMoc3VtKHRhYmxlX3R5cGVhdlsiQWNhZGVtaWMiLCBdKSwgc3VtKHRhYmxlX3R5cGVhdlsiVm9jYXRpb25hbCIsIF0pKSwNCiAgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwNCiAgY29ycmVjdCA9IEZBTFNFDQopDQpwcmludCh0ZXN0X2V4Y2VsbGVudCkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSBwLXZhbHVlID0gMC4wMDIyNiA8IDAuMDUsIGRvIMSRw7MgdGEgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBI4oKALiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB24buBIHThu7cgbOG7hyBo4buNYyBzaW5oIMSR4bqhdCBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCB4deG6pXQgc+G6r2MgKEV4Y2VsbGVudCkgZ2nhu69hIGhhaSBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jLiBD4bulIHRo4buDLCBo4buNYyBzaW5oIHThuqFpIGPDoWMgdHLGsOG7nW5nIEFjYWRlbWljIGPDsyB4dSBoxrDhu5tuZyDEkeG6oXQga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgdOG7kXQgaMahbiBzbyB24bubaSBo4buNYyBzaW5oIHThuqFpIHRyxrDhu51uZyBWb2NhdGlvbmFsLg0KDQojIyMjICoqNC42LjQgVOG7tyBz4buRIE5ndXkgY8ahIChSZWxhdGl2ZSBSaXNrIC0gUlIpKioNCg0KYGBge3J9DQpsaWJyYXJ5KGVwaXRvb2xzKQ0KdHRhYmxlX3R5cGVhdiA8LSB0KHRhYmxlX3R5cGVhdikNCnJydHlwZWF2IDwtIHJpc2tyYXRpbyh0dGFibGVfdHlwZWF2LCBtZXRob2QgPSAid2FsZCIpDQpwcmludChycnR5cGVhdikNCmBgYA0KKipOaOG6rW4geMOpdDoqKg0KDQotIEThu7FhIHbDoG8gYuG6o25nIGvhur90IHF14bqjLCBuaMOzbSBo4buNYyBzaW5oIGPDsyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCDigJxFeGNlbGxlbnTigJ0gxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91IChjaHXhuqluKSwgxJHhu4Mgc28gc8OhbmggeMOhYyBzdeG6pXQgaOG7jWMgdHLGsOG7nW5nIFZvY2F0aW9uYWwgZ2nhu69hIGPDoWMgbmjDs20ga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAga2jDoWMgbmhhdS4NCg0KLSBOaMOzbSDigJxGYWly4oCdIGPDsyBSaXNrIFJhdGlvID0gMS40ODEgKEtUQyA5NSU6IDEuMDk1IOKAkyAyLjAwNCksIGzhu5tuIGjGoW4gMSB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocC12YWx1ZSDiiYggMC4wMDYpLiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgaOG7jWMgc2luaCBjw7Mga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAg4bufIG3hu6ljIOKAnEZhaXLigJ0gY8OzIHjDoWMgc3XhuqV0IGjhu41jIOG7nyB0csaw4budbmcgVm9jYXRpb25hbCBjYW8gaMahbiBraG/huqNuZyA0OCUgc28gduG7m2kgaOG7jWMgc2luaCBjw7Mga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAg4oCcRXhjZWxsZW504oCdLiBLaG/huqNuZyB0aW4gY+G6rXkga2jDtG5nIGNo4bupYSBnacOhIHRy4buLIDEgbsOqbiBr4bq/dCBsdeG6rW4gY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbmjhu69uZyBo4buNYyBzaW5oIGPDsyBo4buNYyBs4buxYyB0cnVuZyBiw6xuaCAoRmFpcikgY8OzIHh1IGjGsOG7m25nIGzhu7FhIGNo4buNbiB0csaw4budbmcgbmdo4buBIChWb2NhdGlvbmFsKSBuaGnhu4F1IGjGoW4gc28gduG7m2kgbmjDs20gaOG7jWMgc2luaCBnaeG7j2kgeHXhuqV0IHPhuq9jLg0KDQotIE5ow7NtIOKAnEdvb2TigJ0gY8OzIFJpc2sgUmF0aW8gPSAxLjU0MyAoS1RDIDk1JTogMS4xNDMg4oCTIDIuMDgyKSwgY8WpbmcgbOG7m24gaMahbiAxIHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIChwLXZhbHVlIOKJiCAwLjAwMikuIFThu6ljIGzDoCBo4buNYyBzaW5oIGPDsyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCDigJxHb29k4oCdIGPDsyB4w6FjIHN14bqldCBo4buNYyDhu58gdHLGsOG7nW5nIFZvY2F0aW9uYWwgY2FvIGjGoW4ga2hv4bqjbmcgNTQlIHNvIHbhu5tpIGjhu41jIHNpbmggY8OzIGvhur90IHF14bqjIOKAnEV4Y2VsbGVudOKAnS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXksIG5nYXkgY+G6oyBo4buNYyBzaW5oIGPDsyBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBraMOhIGPFqW5nIHbhuqtuIGPDsyB4dSBoxrDhu5tuZyBs4buxYSBjaOG7jW4gdHLGsOG7nW5nIG5naOG7gSBuaGnhu4F1IGjGoW4gc28gduG7m2kgaOG7jWMgc2luaCB4deG6pXQgc+G6r2MuDQoNCi0gVMOzbSBs4bqhaSwgc28gduG7m2kgaOG7jWMgc2luaCDEkeG6oXQga+G6v3QgcXXhuqMg4oCcRXhjZWxsZW504oCdLCBj4bqjIGhhaSBuaMOzbSBo4buNYyBzaW5oIGPDsyBr4bq/dCBxdeG6oyDigJxGYWly4oCdIHbDoCDigJxHb29k4oCdIMSR4buBdSBjw7Mga2jhuqMgbsSDbmcgaOG7jWMg4bufIHRyxrDhu51uZyBuZ2jhu4EgKFZvY2F0aW9uYWwpIGNhbyBoxqFuIHLDtSBy4buHdCB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gS+G6v3QgcXXhuqMgbsOgeSBn4bujaSDDvSBy4bqxbmcgbmjhu69uZyBo4buNYyBzaW5oIGtow7RuZyDEkeG6oXQgdGjDoG5oIHTDrWNoIGjhu41jIHThuq1wIGNhbyBuaOG6pXQgY8OzIHRo4buDIGPDom4gbmjhuq9jIG5oaeG7gXUgaMahbiDEkeG6v24gdmnhu4djIHRoZW8gaOG7jWMgY8OhYyB0csaw4budbmcgbmdo4buBLCBjw7MgdGjhu4MgZG8gbmjhuq1uIHRo4bupYyB0aOG7sWMgdOG6vyB24buBIG7Eg25nIGzhu7FjIGjhu41jIHThuq1wIGhv4bq3YyDEkeG7i25oIGjGsOG7m25nIG5naOG7gSBuZ2hp4buHcCB0aGnhur90IHRo4buxYyBoxqFuLg0KDQojIyMjICoqNC42LjUgVOG7tyBz4buRIENow6puaCAoT2RkcyBSYXRpbyAtIE9SKToqKg0KDQpgYGB7cn0NCm9kdHlwZWF2IDwtIG9kZHNyYXRpbyh0dGFibGVfdHlwZWF2LCBtZXRob2QgPSAid2FsZCIpDQpwcmludChvZHR5cGVhdikNCmBgYA0KDQotIE5ow7NtIGjhu41jIHNpbmggY8OzIGjhu41jIGzhu7FjICJFeGNlbGxlbnQiIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSAoT1IgPSAxLjAwKS4gU28gduG7m2kgbmjDs20gbsOgeSwgaOG7jWMgc2luaCBjw7MgaOG7jWMgbOG7sWMgIkZhaXIiIGPDsyBvZGRzIGNo4buNbiB0csaw4budbmcgQWNhZGVtaWMgY2FvIGjGoW4ga2hv4bqjbmcgMS44MCBs4bqnbiAoT1IgPSAxLjgwLCBwIOKJiCAwLjAwNiksIHRyb25nIGtoaSBuaMOzbSAiR29vZCIgY8OzIG9kZHMgY8OybiBjYW8gaMahbiBu4buvYSDigJMgZ+G6p24gMS45MyBs4bqnbiAoT1IgPSAxLjkzLCBwIOKJiCAwLjAwMikuIEPDoWMga2hv4bqjbmcgdGluIGPhuq15IMSR4buBdSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSwgY2hvIHRo4bqleSBjw6FjIGvhur90IHF14bqjIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiByw7UgcsOgbmcuDQoNCi0gxJBp4buBdSBuw6B5IG1hbmcgbOG6oWkgbeG7mXQga+G6v3QgcXXhuqMgxJHDoW5nIGNow7ogw706IGjhu41jIHNpbmggY8OzIGjhu41jIGzhu7FjICJHb29kIiBob+G6t2MgIkZhaXIiIGzhuqFpIGPDsyB4dSBoxrDhu5tuZyBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgKEFjYWRlbWljKSBuaGnhu4F1IGjGoW4gc28gduG7m2kgaOG7jWMgc2luaCAiRXhjZWxsZW50Ii4gxJDDonkgY8OzIHRo4buDIGzDoCBk4bqldSBoaeG7h3UgY2hvIHRo4bqleSBo4buNYyBzaW5oICJFeGNlbGxlbnQiIMawdSB0acOqbiB0csaw4budbmcgaMaw4bubbmcgbmdoaeG7h3AgKFZvY2F0aW9uYWwpIHbDrCBjw6FjIGzhu7FhIGNo4buNbiDEkeG7i25oIGjGsOG7m25nIG5naOG7gSBuZ2hp4buHcCBz4bubbSwgaG/hurdjIGRvIGPDoWMgeeG6v3UgdOG7kSDEkeG7i25oIGjGsOG7m25nIG5naOG7gSBuZ2hp4buHcCBraMOhYyBjaMawYSDEkcaw4bujYyBxdWFuIHPDoXQgdHJvbmcgbcO0IGjDrG5oIG7DoHkuIEvhur90IHF14bqjIGNobyB0aOG6pXkgcuG6sW5nIGzhu7FhIGNo4buNbiBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGtow7RuZyBob8OgbiB0b8OgbiB0dXnhur9uIHTDrW5oIHRoZW8gaOG7jWMgbOG7sWMg4oCTIHbDoCBjw7MgdGjhu4MgYuG7iyBjaGkgcGjhu5FpIGLhu59pIG5oaeG7gXUgeeG6v3UgdOG7kSB0w6JtIGzDvSwgeMOjIGjhu5lpIGhv4bq3YyBr4buzIHbhu41uZyBjw6EgbmjDom4uDQoNCg0KIyMgKipQaOG6p24gNTogSOG7k2kgcXV5IMSRxqFuKioNCg0KDQojIyMgKio1LjEgdHlwZXNjaG9vbC1wYXJlbnRfd2FzX2luX2NvbGxlZ2UqKg0KDQojIyMjICoqNS4xLjEgTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmgqKg0KDQoNCmBgYHtyfQ0KZGF0YSR0eXBlX3NjaG9vbCA8LSBpZmVsc2UoZGF0YSR0eXBlX3NjaG9vbCA9PSAiQWNhZGVtaWMiLCAxLCAwKSAgIyBWw60gZOG7pSBuaOG7iyBwaMOibg0KDQptb2RlbHR5cGVwYXJlbnQgPC0gZ2xtKHR5cGVfc2Nob29sIH4gcGFyZW50X3dhc19pbl9jb2xsZWdlLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWx0eXBlcGFyZW50ICkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQogVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KIA0KICQkDQpcaGF0e1xwaX0gPSAwLjY4MzMzIC0gMC4xNDI5NSBcY2RvdCBcdGV4dHtwYXJlbnRfd2FzX2luX2NvbGxlZ2V9X3tcdGV4dHtUUlVFfX0kJA0KDQogS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQpgYGB7cn0NCmNvbmZpbnQobW9kZWx0eXBlcGFyZW50KQ0KYGBgDQogDQpL4bq/dCBxdeG6oyB04burIG3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIGNobyB0aOG6pXkgbeG7mXQgbeG7kWkgcXVhbiBo4buHIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogY2FvIChwIDwgMC4wMDEpIHbDoCBtYW5nIHTDrW5oIG5nxrDhu6NjIGNoaeG7gXUgZ2nhu69hIHZp4buHYyBjaGEgbeG6uSB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIHbDoCBs4buxYSBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgY+G7p2EgaOG7jWMgc2luaC4gQ+G7pSB0aOG7gywgaOG7hyBz4buRIGPhu6dhIGJp4bq/biBwYXJlbnRfd2FzX2luX2NvbGxlZ2VUUlVFIGzDoCAtMC4xNDMsIGNo4buJIHJhIHLhurFuZyBraGkgY2hhIG3hurkgY8OzIHRyw6xuaCDEkeG7mSDEkeG6oWkgaOG7jWMsIHjDoWMgc3XhuqV0IGNvbiBjw6FpIGjhu40gbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10ICh0eXBlX3NjaG9vbCA9IEFjYWRlbWljKSBnaeG6o20gxJFpIGtob+G6o25nIDE0LjMgxJFp4buDbSBwaOG6p24gdHLEg20gc28gduG7m2kgbmjDs20gaOG7jWMgc2luaCBjw7MgY2hhIG3hurkga2jDtG5nIGjhu41jIMSR4bqhaSBo4buNYy4gWMOhYyBzdeG6pXQgbuG7gW4gY2hvIG5ow7NtIHRoYW0gY2hp4bq/dSBuw6B5IGzDoCA2OC4zJSwgxJHGsOG7o2MgdGjhu4MgaGnhu4duIHF1YSBo4buHIHPhu5EgSW50ZXJjZXB0LiBUw61uaCB24buvbmcgY2jhuq9jIGPhu6dhIGvhur90IGx14bqtbiBuw6B5IMSRxrDhu6NjIGPhu6duZyBj4buRIGLhu59pIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY+G7p2EgaOG7hyBz4buRIHBhcmVudF93YXNfaW5fY29sbGVnZVRSVUUgWy0wLjIwMywgLTAuMDgzXS4gDQoNCg0KIyMjIyAqKjUuMS4yIE3DtCBow6xuaCBMb2dpdCoqDQoNCg0KYGBge3J9DQpsb2dpdHR5cGVwYXJlbnQgPC0gZ2xtKHR5cGVfc2Nob29sIH4gcGFyZW50X3dhc19pbl9jb2xsZWdlLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShsb2dpdHR5cGVwYXJlbnQgKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQokJA0KXGxuIFxsZWZ0KCBcZnJhY3tcaGF0e1xwaX19ezEgLSBcaGF0e1xwaX19IFxyaWdodCkgPSAwLjc2OTEzIC0gMC42MDcyNCBcY2RvdCBcdGV4dHtwYXJlbnRfd2FzX2luX2NvbGxlZ2V9X3tcdGV4dHtUUlVFfX0NCiQkDQoNCktob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyBo4buHIHPhu5EgdHJvbmcgbcO0IGjDrG5oIMSRxrDhu6NjIHTDrW5oIG5oxrAgc2F1Og0KYGBge3J9DQpjb25maW50KGxvZ2l0dHlwZXBhcmVudCkNCmBgYA0KDQotIENodXnhu4NuIHNhbmcgbcO0IGjDrG5oIExvZ2l0LCBt4buZdCBwaMawxqFuZyBwaMOhcCBwaMO5IGjhu6NwIGjGoW4gY2hvIGJp4bq/biBr4bq/dCBxdeG6oyBuaOG7iyBwaMOibiwgY2jDum5nIHRhIHRp4bq/cCB04bulYyBuaOG6rW4gdGjhuqV5IG3hu5l0IGvhur90IHF14bqjIG5o4bqldCBxdcOhbiB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8uIE3DtCBow6xuaCBsb2dpdHR5cGVwYXJlbnQgY2hvIHRo4bqleSBo4buHIHPhu5EgY+G7p2EgYmnhur9uIHBhcmVudF93YXNfaW5fY29sbGVnZVRSVUUgbMOgIC0wLjYwNyAocCA8IDAuMDAxKS4gQ29uIHPhu5EgbsOgeSDEkeG6oWkgZGnhu4duIGNobyBz4buxIHRoYXkgxJHhu5VpIHRyb25nIGxvZy1vZGRzIChsw7QtZ2EgY+G7p2EgdOG7tyBzdeG6pXQgY2jDqm5oKS4gQ+G7pSB0aOG7gywgdmnhu4djIGNoYSBt4bq5IGPDsyBo4buNYyDEkeG6oWkgaOG7jWMgbMOgbSBnaeG6o20gbG9nLW9kZHMgxJHhu4MgY29uIGPDoWkgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IMSRaSAwLjYwNyDEkcahbiB24buLIHNvIHbhu5tpIG5ow7NtIGPDsyBjaGEgbeG6uSBraMO0bmcgaOG7jWMgxJHhuqFpIGjhu41jLg0KDQotIMSQ4buDIGRp4buFbiBnaeG6o2kgbeG7mXQgY8OhY2ggdHLhu7FjIHF1YW4gaMahbiwgY2jDum5nIHRhIGPDsyB0aOG7gyBjaHV54buDbiBo4buHIHPhu5EgbsOgeSBzYW5nIHThu7cgc3XhuqV0IGNow6puaCAoT2RkcyBSYXRpbykgYuG6sW5nIGPDoWNoIGzhuqV5IGV4cCgtMC42MDcpLCBr4bq/dCBxdeG6oyB44bqlcCB44buJIDAuNTQ1LiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AsIHThu7cgbOG7hyBjaMOqbmggKG9kZHMpIGPhu6dhIHZp4buHYyBt4buZdCBo4buNYyBzaW5oIGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCB0aOG6pXAgaMahbiBraG/huqNuZyA0NS41JSAoMSAtIDAuNTQ1KSBu4bq/dSBjaGEgbeG6uSBj4bunYSBlbSDEkcOzIMSRw6MgdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYywgc28gduG7m2kgaOG7jWMgc2luaCBjw7MgY2hhIG3hurkga2jDtG5nIGjhu41jIMSR4bqhaSBo4buNYy4gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gaOG7hyBz4buRIGxvZy1vZGRzIGzDoCBbLTAuODY3LCAtMC4zNTBdLCB2w6wga2jDtG5nIGNo4bupYSBnacOhIHRy4buLIDAsIMSRw6MgbeG7mXQgbOG6p24gbuG7r2Ega2jhurNuZyDEkeG7i25oIHPhu7EgduG7r25nIGNo4bqvYyBj4bunYSBt4buRaSBxdWFuIGjhu4cgbmfGsOG7o2MgY2hp4buBdSBuw6B5LiBL4bq/dCBxdeG6oyB04burIG3DtCBow6xuaCBMb2dpdCBraMO0bmcgY2jhu4kgY+G7p25nIGPhu5EgcGjDoXQgaGnhu4duIHThu6sgbcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggbcOgIGPDsm4gY3VuZyBj4bqlcCBt4buZdCDGsOG7m2MgbMaw4bujbmcgY2h14bqpbiB4w6FjIGjGoW4gduG7gSDEkeG7mSBs4bubbiBj4bunYSB0w6FjIMSR4buZbmcuDQoNCg0KIyMjIyAqKjUuMS4zIE3DtCBow6xuaCBQcm9iaXQqKg0KDQpgYGB7cn0NCnByb2JpdHR5cGVwYXJlbnQgPC0gZ2xtKHR5cGVfc2Nob29sIH4gcGFyZW50X3dhc19pbl9jb2xsZWdlLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkocHJvYml0dHlwZXBhcmVudCkNCmBgYA0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQoNCiQkDQpcaGF0e1xwaX0gPSBcUGhpXnstMX0gXGxlZnQoIDAuNDc3MDQgLSAwLjM3NTY0IFxjZG90IFx0ZXh0e3BhcmVudF93YXNfaW5fY29sbGVnZX1fe1x0ZXh0e1RSVUV9fSBccmlnaHQpDQokJA0KDQoNCktob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyBo4buHIHPhu5EgdHJvbmcgbcO0IGjDrG5oIMSRxrDhu6NjIHTDrW5oIG5oxrAgc2F1Og0KYGBge3J9DQpjb25maW50KHByb2JpdHR5cGVwYXJlbnQpDQpgYGANCg0KDQotIEvhur90IHF14bqjIHBow6JuIHTDrWNoIG3hu5l0IGzhuqduIG7hu69hIGPhu6duZyBj4buRIG3huqFuaCBt4bq9IGPDoWMgcGjDoXQgaGnhu4duIHRyxrDhu5tjIMSRw7MuIEjhu4cgc+G7kSBj4bunYSBiaeG6v24gcGFyZW50X3dhc19pbl9jb2xsZWdlVFJVRSBsw6AgLTAuMzc2IHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhbyAocCA8IDAuMDAxKSwgY2hvIHRo4bqleSBt4buZdCB0w6FjIMSR4buZbmcgdGnDqnUgY+G7sWMgdsOgIHLDtSBy4buHdC4gVHJvbmcgbcO0IGjDrG5oIFByb2JpdCwgaOG7hyBz4buRIG7DoHkgdGjhu4MgaGnhu4duIHPhu7EgdGhheSDEkeG7lWkgdHLDqm4gdGhhbmcgxJFp4buDbSBaICh6LXNjb3JlKSBj4bunYSBwaMOibiBwaOG7kWkgY2h14bqpbjsgbsOzaSBjw6FjaCBraMOhYywgdmnhu4djIGNoYSBt4bq5IGPDsyBo4buNYyB24bqlbiDEkeG6oWkgaOG7jWMgbMOgbSBnaeG6o20gei1zY29yZSBj4bunYSB2aeG7h2MgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IMSRaSAwLjM3NiDEkcahbiB24buLLCB0xrDGoW5nIOG7qW5nIHbhu5tpIG3hu5l0IHjDoWMgc3XhuqV0IGzhu7FhIGNo4buNbiB0aOG6pXAgaMahbi4NCg0KLSDEkMOhbmcgY2jDuiDDvSwgY2jhu4kgc+G7kSBBSUMgY+G7p2EgbcO0IGjDrG5oIFByb2JpdCAoMTMyMC44KSBn4bqnbiBuaMawIGdp4buRbmcgaOG7h3QgduG7m2kgbcO0IGjDrG5oIExvZ2l0LCBjaG8gdGjhuqV5IGPhuqMgaGFpIG3DtCBow6xuaCBjw7Mga2jhuqMgbsSDbmcgZ2nhuqNpIHRow61jaCB2w6AgxJHhu5kgcGjDuSBo4bujcCB0xrDGoW5nIMSRxrDGoW5nIG5oYXUgxJHhu5FpIHbhu5tpIGLhu5kgZOG7ryBsaeG7h3UgbsOgeS4gU+G7sSBuaOG6pXQgcXXDoW4gduG7gSBoxrDhu5tuZyB0w6FjIMSR4buZbmcgdsOgIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBxdWEgY+G6oyBiYSBtw7QgaMOsbmggKFjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmgsIExvZ2l0LCB2w6AgUHJvYml0KSBraOG6s25nIMSR4buLbmggbeG7mXQgY8OhY2ggbeG6oW5oIG3hur0gcuG6sW5nIG3hu5FpIHF1YW4gaOG7hyBuZ2jhu4tjaCBjaGnhu4F1IGdp4buvYSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgY2hhIG3hurkgdsOgIHZp4buHYyBjb24gbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGzDoCBt4buZdCBwaMOhdCBoaeG7h24gxJHDoW5nIHRpbiBj4bqteS4NCg0KDQojIyMjICoqNS4xLjQgTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpgYGB7cn0NCmNsb2d0eXBlcGFyZW50IDwtIGdsbSh0eXBlX3NjaG9vbCB+IHBhcmVudF93YXNfaW5fY29sbGVnZSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShjbG9ndHlwZXBhcmVudCkNCmBgYA0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQoNCiQkXGxvZygtXGxvZygxIC0gXGhhdHtccGl9KSkgPSAwLjEzOTY4IC0gMC4zOTE1MiBcY2RvdCBcdGV4dHtwYXJlbnRfd2FzX2luX2NvbGxlZ2V9X3tcdGV4dHtUUlVFfX0kJA0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIHRyb25nIG3DtCBow6xuaCDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCmBgYHtyfQ0KY29uZmludChjbG9ndHlwZXBhcmVudCkNCmBgYA0KDQpL4bq/dCBxdeG6oyB0aHUgxJHGsOG7o2MgdGnhur9wIHThu6VjIGPhu6duZyBj4buRIGPDoWMgcGjDoXQgaGnhu4duIHRyxrDhu5tjIMSRw7MgbeG7mXQgY8OhY2ggbmjhuqV0IHF1w6FuLiBI4buHIHPhu5EgY+G7p2EgYmnhur9uIHBhcmVudF93YXNfaW5fY29sbGVnZVRSVUUgbMOgIC0wLjM5MiAocCA8IDAuMDAxKSwgdGnhur9wIHThu6VjIGNo4buJIHJhIG3hu5l0IHTDoWMgxJHhu5luZyB0acOqdSBj4buxYyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8uIEtob+G6o25nIHRpbiBj4bqteSA5NSUgWy0wLjU1OCwgLTAuMjI2XSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMCwgbeG7mXQgbOG6p24gbuG7r2Ega2jhurNuZyDEkeG7i25oIHTDrW5oIHbhu69uZyBjaOG6r2MgY+G7p2EgbeG7kWkgcXVhbiBo4buHIG5naOG7i2NoIGNoaeG7gXUgbsOgeS4NCg0KDQpgYGB7cn0NCmFpY190YWJsZXR5cGVwYXJlbnQgPC0gZGF0YS5mcmFtZSgNCiAgTW9kZWwgPSBjKCJMb2dpdCIsICJQcm9iaXQiLCAiQ2xvZ2xvZyIsICJPTFMiKSwNCiAgQUlDID0gYygNCiAgICBBSUMobG9naXR0eXBlcGFyZW50KSwNCiAgICBBSUMocHJvYml0dHlwZXBhcmVudCksDQogICAgQUlDKGNsb2d0eXBlcGFyZW50KSwNCiAgICBBSUMobW9kZWx0eXBlcGFyZW50KQ0KICApDQopDQoNCiMgSGnhu4NuIHRo4buLIGLhuqNuZw0KcHJpbnQoYWljX3RhYmxldHlwZXBhcmVudCkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gQuG6o25nIGvhur90IHF14bqjIGNobyB0aOG6pXkgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIOKAlCBsb2dpdCwgcHJvYml0IHbDoCBjbG9nbG9nIOKAlCBjw7MgZ2nDoSB0cuG7iyBBSUMgYuG6sW5nIG5oYXUgKDEzMjAuODM1KSwgdHJvbmcga2hpIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCBPTFMgY8OzIEFJQyBjYW8gaMahbiDEkcOhbmcga+G7gyAoMTM4Ny4yNDApLiBWw6wgQUlDIGPDoG5nIHRo4bqlcCB0aMOsIG3DtCBow6xuaCBjw6BuZyBwaMO5IGjhu6NwICh0aGVvIG5naMSpYSBjw6JuIGLhurFuZyBnaeG7r2EgxJHhu5kgY2jDrW5oIHjDoWMgdsOgIMSR4buZIHBo4bupYyB04bqhcCksIG7Dqm4gYmEgbcO0IGjDrG5oIG5o4buLIHBow6JuIMSR4buBdSB2xrDhu6N0IHRy4buZaSBoxqFuIHLDtSBy4buHdCBzbyB24bubaSBPTFMgdHJvbmcgdmnhu4djIGdp4bqjaSB0aMOtY2ggeMOhYyBzdeG6pXQgaOG7jWMgc2luaCBjaOG7jW4gbG/huqFpIHRyxrDhu51uZyB0eXBlX3NjaG9vbCA9IDEuDQoNCi0gVmnhu4djIGJhIG3DtCBow6xuaCBuaOG7iyBwaMOibiBjw7MgQUlDIHTGsMahbmcgxJHGsMahbmcgbmhhdSBjaG8gdGjhuqV5IGNow7puZyBjdW5nIGPhuqVwIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgbcO0IGjDrG5oIHTGsMahbmcgxJHGsMahbmcsIHbDoCBz4buxIGzhu7FhIGNo4buNbiBnaeG7r2EgbG9naXQsIHByb2JpdCBoYXkgY2xvZ2xvZyBjw7MgdGjhu4MgZOG7sWEgdGjDqm0gdsOgbyBnaeG6oyDEkeG7i25oIGzDvSB0aHV54bq/dCB24buBIGLhuqNuIGNo4bqldCBj4bunYSBwaMOibiBwaOG7kWkgeMOhYyBzdeG6pXQgKMSR4buRaSB44bupbmcgaGF5IGLhuqV0IMSR4buRaSB44bupbmcpLiBUdXkgbmhpw6puLCBi4bqldCBr4buDIGxpw6puIGvhur90IGPhu6UgdGjhu4MgbsOgbyDEkcaw4bujYyBjaOG7jW4sIGvhur90IHF14bqjIMSR4buBdSBuaOG6pXQgcXXDoW46IHZp4buHYyBjaGEgbeG6uSB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIGPDsyDhuqNuaCBoxrDhu59uZyB0acOqdSBj4buxYyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDEkeG6v24ga2jhuqMgbsSDbmcgaOG7jWMgc2luaCBjaOG7jW4gdHLGsOG7nW5nIGxv4bqhaSAxLg0KDQotIFTDs20gbOG6oWksIGPDoWMgbcO0IGjDrG5oIG5o4buLIHBow6JuICjEkeG6t2MgYmnhu4d0IGzDoCBsb2dpdCkgbMOgIGzhu7FhIGNo4buNbiBo4bujcCBsw70gaMahbiB24buBIG3hurd0IGtpbmggdOG6vyBsxrDhu6NuZyBzbyB24bubaSBPTFMga2hpIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBuaOG7iyBwaMOibi4gT0xTIHR1eSBjaG8ga+G6v3QgcXXhuqMgdMawxqFuZyDEkeG7kWkgbmjGsG5nIGPDsyB0aOG7gyBk4bqrbiDEkeG6v24gxrDhu5tjIGzGsOG7o25nIHjDoWMgc3XhuqV0IGtow7RuZyBu4bqxbSB0cm9uZyBbMCwxXSB2w6AgdmkgcGjhuqFtIGdp4bqjIMSR4buLbmggY+G7p2EgbcO0IGjDrG5oIHR1eeG6v24gdMOtbmguDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyMjICoqNS4yIHR5cGVzY2hvb2wtcmVzaWRlbmNlKioNCg0KIyMjIyAqKjUuMi4xIE3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oKioNCg0KDQpgYGB7cn0NCg0KbW9kZWx0eXBlcmVzaWRlbmNlIDwtIGdsbSh0eXBlX3NjaG9vbCB+IHJlc2lkZW5jZSwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KG1vZGVsdHlwZXJlc2lkZW5jZSApDQpgYGANCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5IHNhdToNCg0KJCRcaGF0e1xwaX0gPSAwLjQ3OTM5ICsgMC4yNDA0NiBcY2RvdCBcdGV4dHtyZXNpZGVuY2V9X3tcdGV4dHtVcmJhbn19JCQNCktob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyBo4buHIHPhu5EgdHJvbmcgbcO0IGjDrG5oIMSRxrDhu6NjIHTDrW5oIG5oxrAgc2F1Og0KDQpgYGB7cn0NCmNvbmZpbnQobW9kZWx0eXBlcmVzaWRlbmNlKQ0KYGBgDQoNCg0KS2hpIHhlbSB4w6l0IHnhur91IHThu5EgbsahaSBjxrAgdHLDuiAocmVzaWRlbmNlKSwgbcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggbW9kZWx0eXBlcmVzaWRlbmNlIGNobyB0aOG6pXkgbeG7mXQgbeG7kWkgbGnDqm4gaOG7hyB0aHXhuq1uIGNoaeG7gXUgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIHLhuqV0IGNhby4gQ+G7pSB0aOG7gywgaOG7hyBz4buRIGPhu6dhIGJp4bq/biByZXNpZGVuY2VVcmJhbiBsw6AgMC4yNDAgKHAgPCAwLjAwMSksIGNobyB0aOG6pXkgdmnhu4djIHNpbmggc+G7kW5nIHThuqFpIGtodSB24buxYyB0aMOgbmggdGjhu4sgY8OzIGxpw6puIHF1YW4gxJHhur9uIHZp4buHYyB0xINuZyB4w6FjIHN14bqldCBs4buxYSBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgbMOqbiBraG/huqNuZyAyNC4wIMSRaeG7g20gcGjhuqduIHRyxINtIHNvIHbhu5tpIGjhu41jIHNpbmgg4bufIGPDoWMga2h1IHbhu7FjIFJ1cmFsIChuaMOzbSB0aGFtIGNoaeG6v3UpLg0KDQoNCiMjIyMgKio1LjIuMiBNw7QgaMOsbmggTG9naXQqKg0KDQoNCmBgYHtyfQ0KbG9naXR0eXBlcmUgPC0gZ2xtKHR5cGVfc2Nob29sIH4gcmVzaWRlbmNlLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShsb2dpdHR5cGVyZSApDQpgYGANCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDI0MTYucG5nIikNCmBgYA0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIHRyb25nIG3DtCBow6xuaCDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCg0KYGBge3J9DQpjb25maW50KGxvZ2l0dHlwZXJlKQ0KYGBgDQoNCk3DtCBow6xuaCBsb2dpdHR5cGVyZSBjaG8gdGjhuqV5IGjhu4cgc+G7kSBj4bunYSBiaeG6v24gcmVzaWRlbmNlVXJiYW4gbMOgIDEuMDI2IHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIOG7nyBt4bupYyBy4bqldCBjYW8gKHAgPCAwLjAwMSkuIEjhu4cgc+G7kSBuw6B5IGJp4buDdSB0aOG7iyBz4buxIHRoYXkgxJHhu5VpIHRyb25nIGxvZy1vZGRzIChsw7QtZ2EgY+G7p2EgdOG7tyBzdeG6pXQgY2jDqm5oKSDEkeG7gyBo4buNYyBzaW5oIGzhu7FhIGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdC7EkOG7gyBkaeG7hW4gZ2nhuqNpIG3hu5l0IGPDoWNoIHRy4buxYyBxdWFuIGjGoW4sIHRhIGNodXnhu4NuIGjhu4cgc+G7kSBuw6B5IHNhbmcgVOG7tyBzdeG6pXQgY2jDqm5oIChPZGRzIFJhdGlvKSBi4bqxbmcgY8OhY2ggdMOtbmggZXhwKDEuMDI2KSwgY2hvIGvhur90IHF14bqjIHjhuqVwIHjhu4kgMi43OS4gxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgLCB04bu3IGzhu4cgY2jDqm5oIChvZGRzKSBj4bunYSB2aeG7h2MgbeG7mXQgaOG7jWMgc2luaCBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgY2FvIGjGoW4gdOG7m2kgMTc5JSAodOG7qWMgZ+G6pXAgMi43OSBs4bqnbikgbuG6v3UgZW0gxJHDsyBzaW5oIHPhu5FuZyB04bqhaSBraHUgduG7sWMgdGjDoG5oIHRo4buLLCBzbyB24bubaSBt4buZdCBo4buNYyBzaW5oIOG7nyBraHUgduG7sWMga2jDoWMuDQoNCiMjIyMgKio1LjIuMyBNw7QgaMOsbmggUHJvYml0KioNCg0KDQpgYGB7cn0NCnByb2JpdHR5cGVyZSA8LSBnbG0odHlwZV9zY2hvb2wgfiByZXNpZGVuY2UsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShwcm9iaXR0eXBlcmUgKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiQzovVXNlcnMvREVMTC9QaWN0dXJlcy9TY3JlZW5zaG90cy9TY3JlZW5zaG90IDIwMjUtMDctMjggMDAyNjAwLnBuZyIpDQpgYGANCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQpgYGB7cn0NCmNvbmZpbnQocHJvYml0dHlwZXJlKQ0KYGBgDQoNClRyb25nIGtodcO0biBraOG7lSBj4bunYSBtw7QgaMOsbmggUHJvYml0LCBo4buHIHPhu5EgbsOgeSDEkcaw4bujYyBkaeG7hW4gZ2nhuqNpIGzDoCBz4buxIHRoYXkgxJHhu5VpIHRyw6puIHRoYW5nIMSRaeG7g20gWiAoei1zY29yZSkgY+G7p2EgcGjDom4gcGjhu5FpIGNodeG6qW47IG7Ds2kgY8OhY2gga2jDoWMsIHZp4buHYyBjxrAgdHLDuiB04bqhaSB0aMOgbmggdGjhu4sgbMOgbSB0xINuZyB6LXNjb3JlIGPhu6dhIHjDoWMgc3XhuqV0IGzhu7FhIGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCBsw6puIDAuNjM0IMSRxqFuIHbhu4suDQpUw61uaCB24buvbmcgY2jhuq9jIGPhu6dhIHTDoWMgxJHhu5luZyBuw6B5IMSRxrDhu6NjIGto4bqzbmcgxJHhu4tuaCB0aMOqbSBi4bufaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlIFswLjQ3NCwgMC43OTVdLCBkbyBob8OgbiB0b8OgbiBu4bqxbSB0cm9uZyB2w7luZyBnacOhIHRy4buLIGTGsMahbmcgdsOgIGtow7RuZyBjaOG7qWEgc+G7kSAwLiDEkMOhbmcgY2jDuiDDvSwgY2jhu4kgc+G7kSBBSUMgY+G7p2EgbcO0IGjDrG5oIFByb2JpdCAoMTI4MS43KSBnaeG7kW5nIGjhu4d0IHbhu5tpIG3DtCBow6xuaCBMb2dpdCwgY2hvIHRo4bqleSBj4bqjIGhhaSBtw7QgaMOsbmggcGhpIHR1eeG6v24gbsOgeSDEkeG7gXUgY8OzIMSR4buZIHBow7kgaOG7o3AgdMawxqFuZyDEkcawxqFuZyBuaGF1IGtoaSDDoXAgZOG7pW5nIHRyw6puIGLhu5kgZOG7ryBsaeG7h3UuIA0KDQoNCiMjIyMgKio1LjIuNCBNw7QgaMOsbmggQ2xvZ2xvZyoqDQoNCmBgYHtyfQ0KY2xvZ3R5cGVyZTwtIGdsbSh0eXBlX3NjaG9vbCB+IHJlc2lkZW5jZSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShjbG9ndHlwZXJlKQ0KDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDI3NDkucG5nIikNCmBgYA0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIHRyb25nIG3DtCBow6xuaCDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCmBgYHtyfQ0KY29uZmludChjbG9ndHlwZXJlKQ0KYGBgDQoNCkvhur90IHF14bqjIHThu6sgbcO0IGjDrG5oIGNsb2d0eXBlcmUgY2hvIHRo4bqleSBo4buHIHPhu5EgY+G7p2EgYmnhur9uIHJlc2lkZW5jZVVyYmFuIGzDoCAwLjY2NyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDhu58gbeG7qWMgcuG6pXQgY2FvIChwIDwgMC4wMDEpLiDEkGnhu4F1IG7DoHkgbeG7mXQgbOG6p24gbuG7r2Ega2jhurNuZyDEkeG7i25oIG3hu5FpIHF1YW4gaOG7hyB0aHXhuq1uIGNoaeG7gXUgZ2nhu69hIHZp4buHYyBjxrAgdHLDuiB04bqhaSB0aMOgbmggdGjhu4sgdsOgIHh1IGjGsOG7m25nIGzhu7FhIGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdC4gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBbMC40OTcsIDAuODQwXSBj4bunbmcgY+G7kSB0aMOqbSBjaG8gdMOtbmggduG7r25nIGNo4bqvYyBj4bunYSB0w6FjIMSR4buZbmcgbsOgeS4gTeG6t2MgZMO5IGRp4buFbiBnaeG6o2kgdHLhu7FjIHRp4bq/cCBo4buHIHPhu5EgQ2xvZ2xvZyBwaOG7qWMgdOG6oXAgaMahbiwgbmjGsG5nIGThuqV1IGTGsMahbmcgdsOgIG3hu6ljIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8gY+G7p2EgbsOzIMSRw6MgY2hvIHRo4bqleSBt4buZdCB0aMO0bmcgxJFp4buHcCBuaOG6pXQgcXXDoW4uDQoNCmBgYHtyfQ0KYWljX3RhYmxldHlwZXJlIDwtIGRhdGEuZnJhbWUoDQogIE1vZGVsID0gYygiTG9naXQiLCAiUHJvYml0IiwgIkNsb2dsb2ciLCAiT0xTIiksDQogIEFJQyA9IGMoDQogICAgQUlDKGxvZ2l0dHlwZXJlKSwNCiAgICBBSUMocHJvYml0dHlwZXJlKSwNCiAgICBBSUMoY2xvZ3R5cGVyZSksDQogICAgQUlDKG1vZGVsdHlwZXJlc2lkZW5jZSkNCiAgKQ0KKQ0KDQojIEhp4buDbiB0aOG7iyBi4bqjbmcNCnByaW50KGFpY190YWJsZXR5cGVyZSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgQUlDLCBiYSBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIGfhu5NtIExvZ2l0LCBQcm9iaXQgdsOgIENsb2dsb2cgxJHhu4F1IGPDsyBjw7luZyBnacOhIHRy4buLIEFJQyBsw6AgMTI4MS42NTMsIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG3DtCBow6xuaCBPTFMgKEFJQyA9IDEzNDYuNjU5KS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgY8OhYyBtw7QgaMOsbmggbmjhu4sgcGjDom4gY8OzIMSR4buZIHBow7kgaOG7o3AgdOG7kXQgaMahbiDEkeG7kWkgduG7m2kgZOG7ryBsaeG7h3UgZOG6oW5nIG5o4buLIHBow6JuIG5oxrAgYmnhur9uIHR5cGVfc2Nob29sLiBOaMawIHbhuq15LCB2aeG7h2Mgc+G7rSBk4bulbmcgY8OhYyBtw7QgaMOsbmggTG9naXQsIFByb2JpdCBob+G6t2MgQ2xvZ2xvZyBsw6AgaOG7o3AgbMO9IHbDoCBoaeG7h3UgcXXhuqMgaMahbiBzbyB24bubaSBo4buTaSBxdXkgdHV54bq/biB0w61uaCB0cnV54buBbiB0aOG7kW5nLg0KDQotIFbDrCBj4bqjIGJhIG3DtCBow6xuaCBMb2dpdCwgUHJvYml0IHbDoCBDbG9nbG9nIMSR4buBdSBjaG8ga+G6v3QgcXXhuqMgQUlDIGdp4buRbmcgbmhhdSwga2jDtG5nIGPDsyBtw7QgaMOsbmggbsOgbyB2xrDhu6N0IHRy4buZaSByw7UgcuG7h3QgduG7gSDEkeG7mSBwaMO5IGjhu6NwLiBUcm9uZyB0aOG7sWMgdOG6vywgc+G7sSBs4buxYSBjaOG7jW4gZ2nhu69hIGNow7puZyBwaOG7pSB0aHXhu5ljIHbDoG8gxJHhurdjIMSRaeG7g20gcGjDom4gcGjhu5FpIHjDoWMgc3XhuqV0LiBMb2dpdCB0aMaw4budbmcgxJHGsOG7o2MgxrB1IHRpw6puIHbDrCBk4buFIGRp4buFbiBnaeG6o2kgdGjDtG5nIHF1YSBvZGRzIHJhdGlvLCB0cm9uZyBraGkgUHJvYml0IHBow7kgaOG7o3AgbuG6v3UgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5IHbDoCBDbG9nbG9nIHRoxrDhu51uZyBkw7luZyB0cm9uZyBjw6FjIHTDrG5oIGh14buRbmcgYuG6pXQgxJHhu5FpIHjhu6luZyDigJQga2hpIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIHLhuqV0IGNhbyBob+G6t2MgcuG6pXQgdGjhuqVwLg0KDQotIFThu5VuZyB0aOG7gywgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIMSR4buBdSBjaG8gdGjhuqV5IGhp4buHdSBxdeG6oyB2xrDhu6N0IHRy4buZaSBoxqFuIG3DtCBow6xuaCB0dXnhur9uIHTDrW5oIHRyb25nIHBow6JuIHTDrWNoIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuLiBUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSwgbuG6v3Uga2jDtG5nIGPDsyBsw70gZG8gY2h1ecOqbiBiaeG7h3QsIG3DtCBow6xuaCBMb2dpdCBjw7MgdGjhu4MgxJHGsOG7o2MgbOG7sWEgY2jhu41uIHbDrCB0w61uaCB0aMO0bmcgZOG7pW5nIHbDoCBk4buFIGRp4buFbiBnaeG6o2kgaMahbiBzbyB24bubaSBoYWkgbcO0IGjDrG5oIGPDsm4gbOG6oWkuDQoNCiMjIyAqKjUuMyB0eXBlc2Nob29sLWludGVyZXN0KioNCg0KDQojIyMjICoqNS4zLjEgTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmgqKg0KDQoNCmBgYHtyfQ0KbW9kZWx0eXBlaW4gPC0gZ2xtKHR5cGVfc2Nob29sIH4gaW50ZXJlc3QsIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShtb2RlbHR5cGVpbiApDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL0RFTEwvUGljdHVyZXMvU2NyZWVuc2hvdHMvU2NyZWVuc2hvdCAyMDI1LTA3LTI4IDAwMjkzNS5wbmciKQ0KYGBgDQoNCktob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyBo4buHIHPhu5EgdHJvbmcgbcO0IGjDrG5oIMSRxrDhu6NjIHTDrW5oIG5oxrAgc2F1Og0KDQpgYGB7cn0NCmNvbmZpbnQobW9kZWx0eXBlaW4pDQpgYGANCg0KS2hpIHhlbSB4w6l0IHnhur91IHThu5EgbeG7qWMgxJHhu5kgcXVhbiB0w6JtIMSR4bq/biB2aeG7h2MgaOG7jWMgxJHhuqFpIGjhu41jIChpbnRlcmVzdCksIG3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIG1vZGVsdHlwZWluIGNobyB0aOG6pXkgbeG7mXQgbeG7kWkgcXVhbiBo4buHIMSRYSBjaGnhu4F1IHbDoCBwaOG7qWMgdOG6oXAga2hpIGzhuqV5IG5ow7NtICJJbnRlcmVzdGVkIiBsw6BtIHRoYW0gY2hp4bq/dSAoduG7m2kgeMOhYyBzdeG6pXQgbuG7gW4gbMOgIDU5LjAlKS4gTeG7mXQgY8OhY2ggbG9naWMsIGvhur90IHF14bqjIGNo4buJIHJhIHLhurFuZyBt4bupYyDEkeG7mSBxdWFuIHTDom0gdGjhuqVwIGjGoW4gbMOgbSBnaeG6o20ga2jhuqMgbsSDbmcgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10OiBo4buHIHPhu5EgY+G7p2EgaW50ZXJlc3ROb3QgSW50ZXJlc3RlZCBsw6AgLTAuMjQxIChwIDwgMC4wMDEpIHbDoCBj4bunYSBpbnRlcmVzdFVuY2VydGFpbiBsw6AgLTAuMTA3IChwIOKJiCAwLjA1KSwgdMawxqFuZyDhu6luZyB24bubaSB2aeG7h2MgZ2nhuqNtIHjDoWMgc3XhuqV0IGzhu7FhIGNo4buNbiB4deG7kW5nIGtob+G6o25nIDI0LjEgdsOgIDEwLjcgxJFp4buDbSBwaOG6p24gdHLEg20gc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91LiBUdXkgbmhpw6puLCBtw7QgaMOsbmggY8WpbmcgYuG7mWMgbOG7mSBuaOG7r25nIHBow6F0IGhp4buHbiBwaOG6o24gdHLhu7FjIGdpw6FjOiBo4buHIHPhu5EgY+G7p2EgaW50ZXJlc3RMZXNzIEludGVyZXN0ZWQgbMOgIDAuMjA1IChwIDwgMC4wMDEpLCBjaG8gdGjhuqV5IG5ow7NtICLDjXQgcXVhbiB0w6JtIiBuZ2jhu4tjaCBsw70gdGhheSBs4bqhaSBjw7MgeMOhYyBzdeG6pXQgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGNhbyBoxqFuIDIwLjUgxJFp4buDbSBwaOG6p24gdHLEg20sIHRyb25nIGtoaSBo4buHIHPhu5EgY+G7p2EgaW50ZXJlc3RWZXJ5IEludGVyZXN0ZWQga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6osIG5n4bulIMO9IGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIG5ow7NtICJS4bqldCBxdWFuIHTDom0iIHbDoCBuaMOzbSB0aGFtIGNoaeG6v3UgIlF1YW4gdMOibSIuDQoNCiMjIyMgKio1LjMuMiBNw7QgaMOsbmggTG9naXQqKg0KDQoNCmBgYHtyfQ0KbG9naXRpdHR5cGVpbiA8LSBnbG0odHlwZV9zY2hvb2wgfiBpbnRlcmVzdCwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobG9naXRpdHR5cGVpbikNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNClRhIGPDsyBow6BtIGjhu5NpIHF1eToNCg0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiQzovVXNlcnMvREVMTC9QaWN0dXJlcy9TY3JlZW5zaG90cy9TY3JlZW5zaG90IDIwMjUtMDctMjggMDAzMTMwLnBuZyIpDQpgYGANCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY29uZmludChsb2dpdGl0dHlwZWluKQ0KYGBgDQoNCktoaSBjaHV54buDbiBzYW5nIHBow6JuIHTDrWNoIGLhurFuZyBtw7QgaMOsbmggTG9naXQgKGxvZ2l0aXR0eXBlaW4pLCBjw6FjIGvhur90IHF14bqjIHRp4bq/cCB04bulYyBraOG6s25nIMSR4buLbmggbeG7mXQgY8OhY2ggbmjhuqV0IHF1w6FuIG3hu5FpIHF1YW4gaOG7hyBwaOG7qWMgdOG6oXAgdsOgIMSRYSBjaGnhu4F1IMSRxrDhu6NjIHBow6F0IGhp4buHbiB0csaw4bubYyDEkcOzLiBTbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgIkludGVyZXN0ZWQiLCBuaMOzbSAiS2jDtG5nIHF1YW4gdMOibSIgKE5vdCBJbnRlcmVzdGVkKSBjw7MgdOG7tyBs4buHIGNow6puaCAob2RkcykgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDLCBraG/huqNuZyA2MyUgKHbhu5tpIGjhu4cgc+G7kSBsb2ctb2RkcyBsw6AgLTAuOTg4LCBwIDwgMC4wMSkuIE5nxrDhu6NjIGzhuqFpLCBr4bq/dCBxdeG6oyBwaOG6o24gdHLhu7FjIGdpw6FjIG5o4bqldCB0aeG6v3AgdOG7pWMgxJHGsOG7o2MgdGjhu4MgaGnhu4duIOG7nyBuaMOzbSAiw410IHF1YW4gdMOibSIgKExlc3MgSW50ZXJlc3RlZCksIHbhu5tpIHThu7cgbOG7hyBjaMOqbmggY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGNhbyBoxqFuIHThu5tpIGtob+G6o25nIDE2OSUgKGjhu4cgc+G7kSBsb2ctb2RkcyBsw6AgMC45OTAsIHAgPCAwLjAwMSkuIFTGsMahbmcgdOG7sSBtw7QgaMOsbmggdHV54bq/biB0w61uaCwga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBuaMOzbSAiUuG6pXQgcXVhbiB0w6JtIiAoVmVyeSBJbnRlcmVzdGVkKSB2w6AgbmjDs20gdGhhbSBjaGnhur91LCB0cm9uZyBraGkgbmjDs20gIktow7RuZyBjaOG6r2MgY2jhuq9uIiAoVW5jZXJ0YWluKSBjaOG7iSBjaG8gdGjhuqV5IG3hu5l0IHh1IGjGsOG7m25nIHRo4bqlcCBoxqFuIOG7nyBt4bupYyDDvSBuZ2jEqWEgYmnDqm4uDQoNCiMjIyMgKio1LjMuMyBNw7QgaMOsbmggUHJvYml0KioNCg0KDQoNCmBgYHtyfQ0KcHJvYml0dHlwZWluIDwtIGdsbSh0eXBlX3NjaG9vbCB+IGludGVyZXN0LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShwcm9iaXR0eXBlaW4gKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDMzMTYucG5nIikNCmBgYA0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIHRyb25nIG3DtCBow6xuaCDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCmBgYHtyfQ0KY29uZmludChwcm9iaXR0eXBlaW4pDQpgYGANCg0KDQpWaeG7h2Mga2nhu4NtIMSR4buLbmggYuG6sW5nIG3DtCBow6xuaCBQcm9iaXQgKHByb2JpdHR5cGVpbikgdGnhur9wIHThu6VjIGPhu6duZyBj4buRIGPDoWMgcGjDoXQgaGnhu4duIMSRw6MgcXVhbiBzw6F0LCBraOG6s25nIMSR4buLbmggdMOtbmggduG7r25nIGNo4bqvYyBj4bunYSBt4buRaSBxdWFuIGjhu4cgcGjhu6ljIHThuqFwIG7DoHkuIFNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dSAiSW50ZXJlc3RlZCIsIG5ow7NtICJLaMO0bmcgcXVhbiB0w6JtIiAoTm90IEludGVyZXN0ZWQpIGNobyB0aOG6pXkgc+G7sSBz4buldCBnaeG6o20gMC42MTYgxJHGoW4gduG7iyB0csOqbiB0aGFuZyDEkWnhu4NtIFogKHAgPCAwLjAxKSwgdHJvbmcga2hpIG5ow7NtICLDjXQgcXVhbiB0w6JtIiAoTGVzcyBJbnRlcmVzdGVkKSBs4bqhaSB0aOG7gyBoaeG7h24gc+G7sSBnaWEgdMSDbmcgxJHDoW5nIGvhu4MgbMOgIDAuNTk2IMSRxqFuIHbhu4sgKHAgPCAwLjAwMSkuIFTGsMahbmcgdOG7sSBjw6FjIG3DtCBow6xuaCB0csaw4bubYywgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIG5ow7NtICJS4bqldCBxdWFuIHTDom0iIHbDoCBuaMOzbSB0aGFtIGNoaeG6v3UgbMOgIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiDEkMOhbmcgY2jDuiDDvSwgY2jhu4kgc+G7kSBBSUMgKDEyNjguNCkgZ2nhu5FuZyBo4buHdCB24bubaSBtw7QgaMOsbmggTG9naXQsIGNobyB0aOG6pXkgaGFpIG3DtCBow6xuaCBjw7MgxJHhu5kgcGjDuSBo4bujcCB0xrDGoW5nIMSRxrDGoW5nIHbDoCBjw6FjIGvhur90IGx14bqtbiBj4buRdCBsw7VpIGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIHZp4buHYyBs4buxYSBjaOG7jW4gaMOgbSBsacOqbiBr4bq/dCwgcXVhIMSRw7MgbMOgbSB0xINuZyDEkeG7mSB0aW4gY+G6rXkgY+G7p2EgY8OhYyBwaMOhdCBoaeG7h24uDQoNCiMjIyMgKio1LjMuNCBNw7QgaMOsbmggQ2xvZ2xvZyoqDQoNCg0KDQpgYGB7cn0NCmNsb2d0eXBlaW4gPC0gZ2xtKHR5cGVfc2Nob29sIH4gaW50ZXJlc3QsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkoY2xvZ3R5cGVpbikNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNClRhIGPDsyBow6BtIGjhu5NpIHF1eToNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL0RFTEwvUGljdHVyZXMvU2NyZWVuc2hvdHMvU2NyZWVuc2hvdCAyMDI1LTA3LTI4IDAwMzUyNS5wbmciKQ0KYGBgDQoNCktob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyBo4buHIHPhu5EgdHJvbmcgbcO0IGjDrG5oIMSRxrDhu6NjIHTDrW5oIG5oxrAgc2F1Og0KDQpgYGB7cn0NCmNvbmZpbnQoY2xvZ3R5cGVpbikNCmBgYA0KDQpTbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgIkludGVyZXN0ZWQiLCBuaMOzbSAiw410IHF1YW4gdMOibSIgKExlc3MgSW50ZXJlc3RlZCkgduG6q24gY2hvIHRo4bqleSBt4buZdCB0w6FjIMSR4buZbmcgdMOtY2ggY+G7sWMgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogY2FvICho4buHIHPhu5EgMC41NzQsIHAgPCAwLjAwMSksIHRyb25nIGtoaSBuaMOzbSAiS2jDtG5nIHF1YW4gdMOibSIgKE5vdCBJbnRlcmVzdGVkKSB0aOG7gyBoaeG7h24gdMOhYyDEkeG7mW5nIHRpw6p1IGPhu7FjIHLDtSBy4buHdCAoaOG7hyBz4buRIC0wLjczMiwgcCA8IDAuMDEpLiDEkGnhu4NtIHRoZW4gY2jhu5F0IGzDoCBjaOG7iSBz4buRIEFJQyBj4bunYSBtw7QgaMOsbmggQ2xvZ2xvZyAoMTI2OC40KSBnaeG7kW5nIGjhu4d0IHbhu5tpIGPDoWMgbcO0IGjDrG5oIExvZ2l0IHbDoCBQcm9iaXQsIGto4bqzbmcgxJHhu4tuaCBt4buZdCBjw6FjaCB0aHV54bq/dCBwaOG7pWMgcuG6sW5nIGPDoWMgcGjDoXQgaGnhu4duIHbhu4EgbeG7kWkgcXVhbiBo4buHIHBo4bupYyB04bqhcCB2w6Aga2jDtG5nIHR1eeG6v24gdMOtbmggY+G7p2EgeeG6v3UgdOG7kSAicXVhbiB0w6JtIiBsw6AgcuG6pXQgduG7r25nIGNo4bqvYywga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgc+G6o24gcGjhuqltIHBo4bulIHRodeG7mWMgdsOgbyDEkeG6t2MgdOG6oyBtw7QgaMOsbmggxJHGsOG7o2MgbOG7sWEgY2jhu41uLg0KDQpgYGB7cn0NCmFpY190YWJsZXR5cGVpbiA8LSBkYXRhLmZyYW1lKA0KICBNb2RlbCA9IGMoIkxvZ2l0IiwgIlByb2JpdCIsICJDbG9nbG9nIiwgIk9MUyIpLA0KICBBSUMgPSBjKA0KICAgIEFJQyhsb2dpdGl0dHlwZWluKSwNCiAgICBBSUMocHJvYml0dHlwZWluKSwNCiAgICBBSUMoY2xvZ3R5cGVpbiksDQogICAgQUlDKG1vZGVsdHlwZWluKQ0KICApDQopDQoNCiMgSGnhu4NuIHRo4buLIGLhuqNuZw0KcHJpbnQoYWljX3RhYmxldHlwZWluKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBL4bq/dCBxdeG6oyBo4buTaSBxdXkgdOG7qyBiYSBtw7QgaMOsbmggbmjhu4sgcGjDom4gbMOgIGxvZ2l0LCBwcm9iaXQsIHbDoCBjb21wbGVtZW50YXJ5IGxvZy1sb2cgKGNsb2dsb2cpIMSR4buBdSBjaG8gdGjhuqV5IHLhurFuZyBt4bupYyDEkeG7mSBxdWFuIHTDom0gxJHhur9uIGjhu41jIGNhbyBo4buNYyBjw7Mg4bqjbmggaMaw4bufbmcgbmjhuqV0IMSR4buLbmggxJHhur9uIHjDoWMgc3XhuqV0IGjhu41jIHNpbmggbOG7sWEgY2jhu41uIGxv4bqhaSBow6xuaCB0csaw4budbmcgaOG7jWMgKGFjYWRlbWljIGhv4bq3YyB2b2NhdGlvbmFsKS4gQ+G7pSB0aOG7gywgY+G6oyBiYSBtw7QgaMOsbmggxJHhu4F1IGNobyByYSBjw7luZyBnacOhIHRy4buLIEFJQyBsw6AgMTI2OC4zNzgsIGNobyB0aOG6pXkga2jhuqMgbsSDbmcgZOG7sSBiw6FvIHTGsMahbmcgxJHGsMahbmcgbmhhdS4gVHJvbmcga2hpIMSRw7MsIG3DtCBow6xuaCBPTFMgY8OzIGdpw6EgdHLhu4sgQUlDIGNhbyBoxqFuIHLDtSBy4buHdCAoMTMzMy42MzMpLCBjaG8gdGjhuqV5IGtow7RuZyBwaMO5IGjhu6NwIGtoaSDDoXAgZOG7pW5nIGNobyBk4buvIGxp4buHdSBuaOG7iyBwaMOibi4gDQoNCi0gRMO5IGJhIG3DtCBow6xuaCBwaGkgdHV54bq/biBjaG8ga+G6v3QgcXXhuqMgdMawxqFuZyDEkcawxqFuZyB24buBIGhp4buHdSBuxINuZyAoQUlDKSwgY2xvZ2xvZyBjaG8gcGjDqXAgZGnhu4VuIGdp4bqjaSB04buRdCBoxqFuIHRyb25nIHRyxrDhu51uZyBo4bujcCBk4buvIGxp4buHdSBjw7MgdGhpw6puIGzhu4djaCAobmjGsCBraGkgeMOhYyBzdeG6pXQgcuG6pXQgdGjhuqVwIGhv4bq3YyBy4bqldCBjYW8pLCB2w6AgdHJvbmcgYuG7kWkgY+G6o25oIG7DoHkgduG6q24gY2hvIHRo4bqleSBt4buRaSBxdWFuIGjhu4cgdGjDuiB24buLIGdp4buvYSB0aMOhaSDEkeG7mSB24bubaSBo4buNYyBjYW8gaOG7jWMgdsOgIGzhu7FhIGNo4buNbiB0csaw4budbmcgaOG7jWMuDQoNCg0KIyMjICoqNS40IHR5cGVzY2hvb2wtIHBhcmVudF9zYWxhcnkqKg0KDQojIyMjICoqNS40LjEgTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmgqKg0KDQoNCmBgYHtyfQ0KDQptb2RlbHR5cGVzYWwgPC0gZ2xtKHR5cGVfc2Nob29sIH4gcGFyZW50X3NhbGFyeSwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KG1vZGVsdHlwZXNhbCApDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDM2NTkucG5nIikNCmBgYA0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY29uZmludChtb2RlbHR5cGVzYWwpDQpgYGANCg0KWMOhYyBzdeG6pXQgxJHhu4MgbeG7mXQgaOG7jWMgc2luaCB0cm9uZyBuaMOzbSBuw6B5IGzhu7FhIGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCBsw6AgNTIuOSUgKEludGVyY2VwdCA9IDAuNTI5LCBwIDwgMC4wMDEpLiDEkGnhu4F1IMSRw6FuZyBjaMO6IMO9IG5o4bqldCBsw6AgbmjDs20gY8OzIHRodSBuaOG6rXAgdGjhuqVwIChwYXJlbnRfc2FsYXJ5bG93KSBs4bqhaSBjaG8gdGjhuqV5IG3hu6ljIGdpYSB0xINuZyB4w6FjIHN14bqldCBt4bqhbmggbeG6vSBuaOG6pXQsIGNhbyBoxqFuIDM4LjEgxJFp4buDbSBwaOG6p24gdHLEg20gKGjhu4cgc+G7kSAwLjM4MSwgcCA8IDAuMDAxKSBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UuIFTDoWMgxJHhu5luZyBuw6B5IGPFqW5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG5ow7NtIHRodSBuaOG6rXAgY2FvIChoaWdoKSB2w6AgdHJ1bmcgYsOsbmggKGF2ZXJhZ2UpLCBuaMawbmcgduG7m2kgxJHhu5kgbOG7m24gdGjhuqVwIGjGoW4sIGzhuqduIGzGsOG7o3QgbMOgIDE4LjkgKHAgPCAwLjA1KSB2w6AgMTAuNiAocCA8IDAuMDEpIMSRaeG7g20gcGjhuqduIHRyxINtLiBL4bq/dCBxdeG6oyBuw6B5IGNobyB0aOG6pXkgbeG7mXQgY8OhY2ggcsO1IHLDoG5nIHLhurFuZyBt4buRaSBsacOqbiBo4buHIGdp4buvYSB0aHUgbmjhuq1wIGdpYSDEkcOsbmggdsOgIGzhu7FhIGNo4buNbiBnacOhbyBk4bulYyBraMO0bmcgdHXDom4gdGhlbyBt4buZdCBxdXkgbHXhuq10IHR1eeG6v24gdMOtbmggxJHGoW4gZ2nhuqNuLCB24bubaSBuaMOzbSB0aHUgbmjhuq1wIHRo4bqlcCB0aOG7gyBoaeG7h24geHUgaMaw4bubbmcgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IG3hu5l0IGPDoWNoIG3huqFuaCBt4bq9IG5o4bqldC4NCg0KIyMjIyAqKjUuNC4yIE3DtCBow6xuaCBMb2dpdCoqDQoNCg0KDQpgYGB7cn0NCmxvZ2l0dHlwZXNhbCA8LSBnbG0odHlwZV9zY2hvb2wgfiBwYXJlbnRfc2FsYXJ5LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShsb2dpdHR5cGVzYWwgKQ0KYGBgDQoqKk5o4bqtbiB4w6l0OioqDQoNClRhIGPDsyBow6BtIGjhu5NpIHF1eToNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL0RFTEwvUGljdHVyZXMvU2NyZWVuc2hvdHMvU2NyZWVuc2hvdCAyMDI1LTA3LTI4IDAwMzg0Ny5wbmciKQ0KYGBgDQoNCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY29uZmludChsb2dpdHR5cGVzYWwpDQpgYGANCg0KDQpQaMOhdCBoaeG7h24gbuG7lWkgYuG6rXQgbmjhuqV0IHbhuqtuIGzDoCDhu58gbmjDs20gdGh1IG5o4bqtcCB0aOG6pXA6IGjhu4cgc+G7kSBsb2ctb2RkcyBj4bunYSBwYXJlbnRfc2FsYXJ5bG93IGzDoCAyLjIwMyAocCA8IDAuMDAxKSwgY2hvIHRo4bqleSBt4buZdCB0w6FjIMSR4buZbmcgdMOtY2ggY+G7sWMgY+G7sWMga+G7syBt4bqhbmggbeG6vSBsw6puIHZp4buHYyBs4buxYSBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91LiBUw6FjIMSR4buZbmcgbsOgeSBjxaluZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIOG7nyBuaMOzbSB0aHUgbmjhuq1wIGNhbyAoaGlnaCkgdsOgIHRydW5nIGLDrG5oIChhdmVyYWdlKSwgbmjGsG5nIHbhu5tpIMSR4buZIGzhu5tuIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDLCB24bubaSBo4buHIHPhu5EgbG9nLW9kZHMgbOG6p24gbMaw4bujdCBsw6AgMC44MTggKHAgPCAwLjA1KSB2w6AgMC40MzUgKHAgPCAwLjAxKS4gDQoNCiMjIyMgKio1LjQuMyBNw7QgaMOsbmggUHJvYml0KioNCg0KYGBge3J9DQpwcm9iaXR0eXBlc2FsIDwtIGdsbSh0eXBlX3NjaG9vbCB+IHBhcmVudF9zYWxhcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShwcm9iaXR0eXBlc2FsICkNCmBgYA0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL0RFTEwvUGljdHVyZXMvU2NyZWVuc2hvdHMvU2NyZWVuc2hvdCAyMDI1LTA3LTI4IDAwNDA1MS5wbmciKQ0KYGBgDQoNCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY29uZmludChwcm9iaXR0eXBlc2FsKQ0KYGBgDQoNCg0KUGjDoXQgaGnhu4duIOG6pW4gdMaw4bujbmcgbmjhuqV0IMSR4bq/biB04burIG5ow7NtIHRodSBuaOG6rXAgdGjhuqVwIChwYXJlbnRfc2FsYXJ5bG93KTogaOG7hyBz4buRIDIuMjAzIChwIDwgMC4wMDEpIHTGsMahbmcg4bupbmcgduG7m2kgdOG7tyBzdeG6pXQgY2jDqm5oIGzDoCA5LjA1LiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AsIHThu7cgbOG7hyBjaMOqbmggKG9kZHMpIGPhu6dhIHZp4buHYyBt4buZdCBo4buNYyBzaW5oIHThu6sgZ2lhIMSRw6xuaCB0aHUgbmjhuq1wIHRo4bqlcCBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgY2FvIGfhuqVwIGjGoW4gOSBs4bqnbiBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UuIMSQw6J5IGzDoCBt4buZdCB0w6FjIMSR4buZbmcgY+G7sWMga+G7syBs4bubbiwgY2hvIHRo4bqleSBt4buZdCDEkeG7mW5nIGzhu7FjIG3huqFuaCBt4bq9IMSR4bq3YyB0aMO5IOG7nyBuaMOzbSBuw6B5Lg0KVHJvbmcga2hpIMSRw7MsIHTDoWMgxJHhu5luZyBuw6B5IHR1eSB24bqrbiBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIG5oxrBuZyB54bq/dSBoxqFuIMSRw6FuZyBr4buDIOG7nyBjw6FjIG5ow7NtIHRodSBuaOG6rXAga2jDoWMuIFThu7cgbOG7hyBjaMOqbmgg4bufIG5ow7NtIHRodSBuaOG6rXAgY2FvIChoaWdoKSB2w6AgdHJ1bmcgYsOsbmggKGF2ZXJhZ2UpIGzhuqduIGzGsOG7o3QgY2FvIGjGoW4gbmjDs20gdGhhbSBjaGnhur91IDIuMjcgbOG6p24gKGjhu4cgc+G7kSAwLjgxOCwgcCA8IDAuMDUpIHbDoCAxLjU1IGzhuqduICho4buHIHPhu5EgMC40MzUsIHAgPCAwLjAxKS4NCg0KDQojIyMjICoqNS40LjQgTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpgYGB7cn0NCmNsb2d0eXBlc2FsIDwtIGdsbSh0eXBlX3NjaG9vbCB+IHBhcmVudF9zYWxhcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkoY2xvZ3R5cGVzYWwgKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiQzovVXNlcnMvREVMTC9QaWN0dXJlcy9TY3JlZW5zaG90cy9TY3JlZW5zaG90IDIwMjUtMDctMjggMDA0MjMyLnBuZyIpDQpgYGANCg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgY2hvIGPDoWMgaOG7hyBz4buRIHRyb25nIG3DtCBow6xuaCDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCg0KYGBge3J9DQpjb25maW50KGNsb2d0eXBlc2FsKQ0KYGBgDQoNClPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgQ2xvZ2xvZyDEkcaw4bujYyDDoXAgZOG7pW5nIG5o4bqxbSBraeG7g20gdHJhIHTDrW5oIHbhu69uZyBjaOG6r2MgY+G7p2Ega+G6v3QgcXXhuqMgZMaw4bubaSBnaeG6oyDEkeG7i25oIHbhu4EgdMOtbmggYuG6pXQgxJHhu5FpIHjhu6luZyBj4bunYSBow6BtIHjDoWMgc3XhuqV0LiBQaMOibiB0w61jaCBuw6B5IHRp4bq/cCB04bulYyBj4bunbmcgY+G7kSBt4buZdCBjw6FjaCBuaOG6pXQgcXXDoW4gY8OhYyBwaMOhdCBoaeG7h24gdHLGsOG7m2MgxJHDszogaOG7hyBz4buRIGPhu6dhIG5ow7NtIHBhcmVudF9zYWxhcnlsb3cgbMOgIDEuMTY1IChwIDwgMC4wMDEpLCB0aOG7gyBoaeG7h24gdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjIHbDoCBt4bqhbmggbeG6vSBuaOG6pXQgc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91LiBDw6FjIG5ow7NtIHRodSBuaOG6rXAgaGlnaCB2w6AgYXZlcmFnZSBjxaluZyBjaG8gdGjhuqV5IHTDoWMgxJHhu5luZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIG5oxrBuZyB24bubaSDEkeG7mSBs4bubbiB0aOG6pXAgaMahbiwgduG7m2kgaOG7hyBz4buRIGzhuqduIGzGsOG7o3QgbMOgIDAuNTE5IChwIDwgMC4wNSkgdsOgIDAuMjkwIChwIDwgMC4wMSkuDQoNCg0KYGBge3J9DQphaWNfdGFibGV0eXBlc2FsIDwtIGRhdGEuZnJhbWUoDQogIE1vZGVsID0gYygiTG9naXQiLCAiUHJvYml0IiwgIkNsb2dsb2ciLCAiT0xTIiksDQogIEFJQyA9IGMoDQogICAgQUlDKGxvZ2l0dHlwZXNhbCksDQogICAgQUlDKHByb2JpdHR5cGVzYWwpLA0KICAgIEFJQyhjbG9ndHlwZXNhbCksDQogICAgQUlDKG1vZGVsdHlwZXNhbCkNCiAgKQ0KKQ0KDQojIEhp4buDbiB0aOG7iyBi4bqjbmcNCnByaW50KGFpY190YWJsZXR5cGVzYWwpDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQpDw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gKExvZ2l0LCBQcm9iaXQsIHbDoCBDbG9nbG9nKSDEkeG7gXUgY8OzIGPDuW5nIGdpw6EgdHLhu4sgQUlDIGzDoCAxMjk5Ljk1MSwgdHJvbmcga2hpIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCAoT0xTKSBjw7MgQUlDIGNhbyBoxqFuIMSRw6FuZyBr4buDICgxMzcxLjI2OSkuIMSQaeG7gXUgbsOgeSBk4bqrbiDEkeG6v24gY8OhYyBuaOG6rW4gxJHhu4tuaCBzYXU6DQoNCi0gQ+G6oyBiYSBtw7QgaMOsbmggTG9naXQsIFByb2JpdCB2w6AgQ2xvZ2xvZyDEkeG7gXUgdsaw4bujdCB0cuG7mWkgc28gduG7m2kgT0xTIHbhu4EgxJHhu5kgcGjDuSBo4bujcCwgdGjhu4MgaGnhu4duIHF1YSBBSUMgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MuIMSQaeG7gXUgbsOgeSBwaMO5IGjhu6NwIHbhu4EgbeG6t3QgbMO9IHRodXnhur90LCBi4bufaSB0eXBlX3NjaG9vbCBsw6AgbeG7mXQgYmnhur9uIG5o4buLIHBow6JuLCB2w6AgY8OhYyBtw7QgaMOsbmggbG9naXN0aWMgbMOgIGzhu7FhIGNo4buNbiB04buxIG5oacOqbiB2w6AgY2jDrW5oIHjDoWMgaMahbiBzbyB24bubaSBPTFMgduG7kW4gZ2nhuqMgxJHhu4tuaCBiaeG6v24gcGjhu6UgdGh14buZYyBsacOqbiB04bulYy4NCg0KLSBWaeG7h2MgYmEgbcO0IGjDrG5oIG5o4buLIHBow6JuIGPDsyBnacOhIHRy4buLIEFJQyBi4bqxbmcgbmhhdSBjaG8gdGjhuqV5IG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgY2jDum5nIMSR4buRaSB24bubaSBk4buvIGxp4buHdSBsw6AgbmjGsCBuaGF1IHbhu4EgbeG6t3QgdGjhu5FuZyBrw6ouDQpUdXkgbmhpw6puLCBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgY8OhYyBtw7QgaMOsbmggbsOgeSBu4bqxbSDhu58gZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgdsOgIGPDoWNoIG3DtCBow6xuaCBow7NhIG3hu5FpIHF1YW4gaOG7hyBwaGkgdHV54bq/biBnaeG7r2EgYmnhur9uIGdp4bqjaSB0aMOtY2ggdsOgIHjDoWMgc3XhuqV0Lg0KDQotIE3DtCBow6xuaCBo4buTaSBxdXkgT0xTIGzDoCBraMO0bmcgcGjDuSBo4bujcCDEkeG7gyBwaMOibiB0w61jaCBiaeG6v24gbmjhu4sgcGjDom4gbmjGsCB0eXBlX3NjaG9vbCwgdGjhu4MgaGnhu4duIHF1YSBBSUMgY2FvIG5o4bqldC4gVHJvbmcga2hpIMSRw7MsIGJhIG3DtCBow6xuaCBuaOG7iyBwaMOibiDEkeG7gXUgdGjhu4MgaGnhu4duIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgdOG7kXQgdsOgIHTGsMahbmcgxJHGsMahbmcuIERvIMSRw7MsIG3DtCBow6xuaCBsb2dpdCBsw6AgbOG7sWEgY2jhu41uIMawdSB0acOqbiBuaOG7nSBwaOG7lSBiaeG6v24gdsOgIGThu4UgZGnhu4VuIGdp4bqjaSwgdHLhu6sga2hpIGPDsyBsw70gZG8gbMO9IHRodXnhur90IGPhu6UgdGjhu4MgxJHhu4MgxrB1IHRpw6puIHByb2JpdCBob+G6t2MgY2xvZ2xvZy4NCg0KIyMjICoqNS41IHR5cGVzY2hvb2wtIGF2ZXJhZ2VfZ3JhZGVzKioNCg0KIyMjIyAqKjUuNS4xIE3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oKioNCg0KDQpgYGB7cn0NCg0KbW9kZWx0eXBlc2F2IDwtIGdsbSh0eXBlX3NjaG9vbCB+IGF2ZXJhZ2VfZ3JhZGVzLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWx0eXBlc2F2KQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiQzovVXNlcnMvREVMTC9QaWN0dXJlcy9TY3JlZW5zaG90cy9TY3JlZW5zaG90IDIwMjUtMDctMjggMDA0MzU2LnBuZyIpDQpgYGANCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY29uZmludChtb2RlbHR5cGVzYXYpDQpgYGANCg0KWMOhYyBzdeG6pXQgbuG7gW4gxJHhu4MgbeG7mXQgaOG7jWMgc2luaCB0cm9uZyBuaMOzbSB0aGFtIGNoaeG6v3UgbsOgeSBs4buxYSBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgbMOgIHLhuqV0IGNhbywg4bufIG3hu6ljIDcyLjklIChJbnRlcmNlcHQgPSAwLjcyOSwgcCA8IDAuMDAxKS4gS+G6v3QgcXXhuqMgY2hvIHRo4bqleSwgbmjhu69uZyBo4buNYyBzaW5oIGPDsyB0aMOgbmggdMOtY2ggdGjhuqVwIGjGoW4gY8OzIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCB0aOG6pXAgaMahbiBt4buZdCBjw6FjaCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiBD4bulIHRo4buDLCBuaMOzbSBjw7MgaOG7jWMgbOG7sWMgIlThu5F0IiAoR29vZCkgdsOgICJLaMOhIiAoRmFpcikgY8OzIHjDoWMgc3XhuqV0IGzhu7FhIGNo4buNbiB0aOG6pXAgaMahbiBs4bqnbiBsxrDhu6N0IGzDoCAxNC43IChwIDwgMC4wMSkgdsOgIDEzLjAgKHAgPCAwLjAxKSDEkWnhu4NtIHBo4bqnbiB0csSDbSBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UuIA0KDQoNCiMjIyMgKio1LjUuMiBNw7QgaMOsbmggTG9naXQqKg0KDQoNCg0KYGBge3J9DQpsb2dpdHR5cGVhdiA8LSBnbG0odHlwZV9zY2hvb2wgfiBhdmVyYWdlX2dyYWRlcywgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobG9naXR0eXBlYXYpDQpgYGANCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDQ1NTkucG5nIikNCmBgYA0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY29uZmludChsb2dpdHR5cGVhdikNCmBgYA0KDQpOaMOzbSBjw7MgdGjDoG5oIHTDrWNoICJU4buRdCIgKEdvb2QpIHbDoCAiS2jDoSIgKEZhaXIpIMSR4buBdSBjaG8gdGjhuqV5IG3hu5l0IHPhu7Egc+G7pXQgZ2nhuqNtIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdHJvbmcgeHUgaMaw4bubbmcgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10LCB24bubaSBo4buHIHPhu5EgbG9nLW9kZHMgbOG6p24gbMaw4bujdCBsw6AgLTAuNjU5IChwIDwgMC4wMSkgdsOgIC0wLjU5MCAocCA8IDAuMDEpLiDEkOG7gyBkaeG7hW4gZ2nhuqNpIG3hu5l0IGPDoWNoIHRy4buxYyBxdWFuLCDEkWnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIGNow6puaCAob2RkcykgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IOG7nyBuaMOzbSBo4buNYyBzaW5oICJU4buRdCIgdsOgICJLaMOhIiB0aOG6pXAgaMahbiBs4bqnbiBsxrDhu6N0IGtob+G6o25nIDQ4JSAoZXhwKC0wLjY1OSkg4omIIDAuNTIpIHbDoCA0NSUgKGV4cCgtMC41OTApIOKJiCAwLjU1KSBzbyB24bubaSBuaMOzbSB4deG6pXQgc+G6r2MuIA0KDQo9PiAqKipNw7QgaMOsbmggbG9naXN0aWMgY2hvIHRo4bqleSBy4bqxbmcgaOG7jWMgbOG7sWMgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biB4w6FjIHN14bqldCBs4buxYSBjaOG7jW4gbG/huqFpIHRyxrDhu51uZyBo4buNYywgbmjGsG5nIOG6o25oIGjGsOG7n25nIG7DoHkgbOG6oWkgbmfGsOG7o2MgY2hp4buBdSB24bubaSBnaeG6oyDEkeG7i25oIHBo4buVIGJp4bq/bjogaOG7jWMgc2luaCBo4buNYyBraMOhIHbDoCBnaeG7j2kgY8OzIHjDoWMgc3XhuqV0IHRo4bqlcCBoxqFuIMSR4buDIHRoZW8gaOG7jWMgbG/huqFpIHRyxrDhu51uZyBo4buNYyB0xrDGoW5nIOG7qW5nIHbhu5tpIGdpw6EgdHLhu4sgY2FvIGjGoW4gY+G7p2EgYmnhur9uIHR5cGVfc2Nob29sLiBEw7kgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgbeG7qWMgxJHhu5kgY+G6o2kgdGhp4buHbiBtw7QgaMOsbmggbMOgIGtoacOqbSB04buRbiwgY2hvIHRo4bqleSBy4bqxbmcgaOG7jWMgbOG7sWMgY2jhu4kgxJHDs25nIHZhaSB0csOyIGLhu5Ugc3VuZyBjaOG7qSBraMO0bmcgcGjhuqNpIHnhur91IHThu5EgY2jDrW5oLiDEkGnhu4F1IG7DoHkgY8Wpbmcga2jhurNuZyDEkeG7i25oIHZhaSB0csOyIHF1YW4gdHLhu41uZyBoxqFuIGPhu6dhIHnhur91IHThu5Ega2luaCB04bq/IOKAkyB4w6MgaOG7mWkgKHbDrSBk4bulOiB0aHUgbmjhuq1wIGNoYSBt4bq5KSB0cm9uZyBxdXnhur90IMSR4buLbmggbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyBj4bunYSBo4buNYyBzaW5oLioqKg0KDQoNCiMjIyMgKio1LjUuMyBNw7QgaMOsbmggUHJvYml0KioNCg0KDQoNCmBgYHtyfQ0KcHJvYml0dHlwZWF2IDwtIGdsbSh0eXBlX3NjaG9vbCB+IGF2ZXJhZ2VfZ3JhZGVzLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkocHJvYml0dHlwZWF2KQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDQ4MTIucG5nIikNCmBgYA0KDQoNCktob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyBo4buHIHPhu5EgdHJvbmcgbcO0IGjDrG5oIMSRxrDhu6NjIHTDrW5oIG5oxrAgc2F1Og0KDQpgYGB7cn0NCmNvbmZpbnQocHJvYml0dHlwZWF2KQ0KYGBgDQoNClNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dSBjw7MgdGjDoG5oIHTDrWNoIHh14bqldCBz4bqvYywgbmjDs20gaOG7jWMgc2luaCBjw7MgaOG7jWMgbOG7sWMgIlThu5F0IiAoR29vZCkgdsOgICJLaMOhIiAoRmFpcikgdGjhu4MgaGnhu4duIHPhu7Egc+G7pXQgZ2nhuqNtIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogdHLDqm4gdGhhbmcgxJFp4buDbSBaLCB24bubaSBjw6FjIGjhu4cgc+G7kSBs4bqnbiBsxrDhu6N0IGzDoCAtMC40MDMgKHAgPCAwLjAxKSB2w6AgLTAuMzYwIChwIDwgMC4wMSkuIMSQaeG7gXUgbsOgeSBraOG6s25nIMSR4buLbmggeHUgaMaw4bubbmcgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IHRo4bqlcCBoxqFuIG3hu5l0IGPDoWNoIHLDtSBy4buHdCDhu58gY8OhYyBuaMOzbSBjw7MgdGjDoG5oIHTDrWNoIGtow7RuZyBwaOG6o2kgbMOgIHh14bqldCBz4bqvYy4gxJBp4buDbSB0aGVuIGNo4buRdCBsw6AgY2jhu4kgc+G7kSBBSUMgY+G7p2EgbcO0IGjDrG5oIFByb2JpdCAoMTMzNC40KSBnaeG7kW5nIGjhu4d0IHbhu5tpIG3DtCBow6xuaCBMb2dpdCwgY2hvIHRo4bqleSBr4bq/dCBsdeG6rW4gduG7gSDhuqNuaCBoxrDhu59uZyBj4bunYSB0aMOgbmggdMOtY2ggaOG7jWMgdOG6rXAgbMOgIHLhuqV0IHbhu69uZyBjaOG6r2MgdsOgIGtow7RuZyBi4buLIOG6o25oIGjGsOG7n25nIGLhu59pIHZp4buHYyBs4buxYSBjaOG7jW4gxJHhurdjIHThuqMgbcO0IGjDrG5oLg0KDQojIyMjICoqNS41LjQgTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpgYGB7cn0NCmNsb2d0eXBlYXYgPC0gZ2xtKHR5cGVfc2Nob29sIH4gYXZlcmFnZV9ncmFkZXMsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkoY2xvZ3R5cGVhdikNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNClRhIGPDsyBow6BtIGjhu5NpIHF1eToNCg0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiQzovVXNlcnMvREVMTC9QaWN0dXJlcy9TY3JlZW5zaG90cy9TY3JlZW5zaG90IDIwMjUtMDctMjggMDA0OTM0LnBuZyIpDQpgYGANCg0KS2hv4bqjbmcgdGluIGPhuq15IGNobyBjw6FjIGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggxJHGsOG7o2MgdMOtbmggbmjGsCBzYXU6DQoNCmBgYHtyfQ0KY29uZmludChjbG9ndHlwZWF2KQ0KYGBgDQoNClNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dSBjw7MgdGjDoG5oIHTDrWNoIHh14bqldCBz4bqvYywgbmjDs20gaOG7jWMgc2luaCBjw7MgaOG7jWMgbOG7sWMgIlThu5F0IiAoR29vZCkgdsOgICJLaMOhIiAoRmFpcikgxJHhu4F1IHRo4buDIGhp4buHbiB0w6FjIMSR4buZbmcgdGnDqnUgY+G7sWMgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogY2FvLCB24bubaSBjw6FjIGjhu4cgc+G7kSBs4bqnbiBsxrDhu6N0IGzDoCAtMC40MDMgKHAgPCAwLjAxKSB2w6AgLTAuMzU4IChwIDwgMC4wMSkuIMSQaeG7g20gdGhlbiBjaOG7kXQgbMOgIGNo4buJIHPhu5EgQUlDIGPhu6dhIG3DtCBow6xuaCBDbG9nbG9nICgxMzM0LjQpIGdp4buRbmcgaOG7h3QgduG7m2kgY2jhu4kgc+G7kSBj4bunYSBtw7QgaMOsbmggTG9naXQgdsOgIFByb2JpdC4gU+G7sSBo4buZaSB04bulIGvhur90IHF14bqjIHRyw6puIGPhuqMgYuG7kW4gxJHhurdjIHThuqMgbcO0IGjDrG5oIGtow6FjIG5oYXUgY3VuZyBj4bqlcCBi4bqxbmcgY2jhu6luZyBraG9hIGjhu41jIHbhu69uZyBjaOG6r2MsIGNobyBwaMOpcCBr4bq/dCBsdeG6rW4gbeG7mXQgY8OhY2ggdGh1eeG6v3QgcGjhu6VjIHLhurFuZyBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIHRow6BuaCB0w61jaCBo4buNYyB04bqtcCB2w6AgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyBsw6AgcuG6pXQgxJHDoW5nIHRpbiBj4bqteSwgduG7m2kgc+G7sSBraMOhYyBiaeG7h3QgY+G7kXQgbMO1aSBu4bqxbSDhu58gdmnhu4djIMSR4bqhdCDEkcaw4bujYyB0aMOgbmggdMOtY2ggeHXhuqV0IHPhuq9jIHNvIHbhu5tpIGPDoWMgbeG7qWMgxJHhu5kgdGjhuqVwIGjGoW4uDQoNCmBgYHtyfQ0KYWljX3RhYmxldHlwZWF2IDwtIGRhdGEuZnJhbWUoDQogIE1vZGVsID0gYygiTG9naXQiLCAiUHJvYml0IiwgIkNsb2dsb2ciLCAiT0xTIiksDQogIEFJQyA9IGMoDQogICAgQUlDKGxvZ2l0dHlwZWF2KSwNCiAgICBBSUMocHJvYml0dHlwZWF2KSwNCiAgICBBSUMoY2xvZ3R5cGVhdiksDQogICAgQUlDKG1vZGVsdHlwZXNhdikNCiAgKQ0KKQ0KDQojIEhp4buDbiB0aOG7iyBi4bqjbmcNCnByaW50KGFpY190YWJsZXR5cGVhdikNCg0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KLSBCYSBtw7QgaMOsbmggcGhpIHR1eeG6v24gbMOgIExvZ2l0LCBQcm9iaXQsIHbDoCBDbG9nbG9nIMSR4buBdSBjaG8gcmEgZ2nDoSB0cuG7iyBBSUMgYuG6sW5nIG5oYXUgKDEzMzQuNDA2KSwgY2hvIHRo4bqleSBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIGNow7puZyDEkeG7kWkgduG7m2kgZOG7ryBsaeG7h3UgbMOgIHTGsMahbmcgxJHGsMahbmcuIMSQaeG7gXUgbsOgeSB0aMaw4budbmcgeOG6o3kgcmEgdHJvbmcgdGjhu7FjIHThur8ga2hpIGPDoWMgbcO0IGjDrG5oIG5o4buLIHBow6JuIMSRxrDhu6NjIMOhcCBk4bulbmcgY2hvIGPDuW5nIG3hu5l0IHThuq1wIGThu68gbGnhu4d1IHbhu5tpIGJp4bq/biBnaeG6o2kgdGjDrWNoIGPDsyDhuqNuaCBoxrDhu59uZyBuaOG6pXQgxJHhu4tuaCwgbmjGsG5nIGtow7RuZyBxdcOhIHBo4bupYyB04bqhcC4gRG8gxJHDsywga2jDtG5nIGPDsyBtw7QgaMOsbmggbsOgbyB0cm9uZyBiYSDEkcaw4bujYyBjb2kgbMOgIHbGsOG7o3QgdHLhu5lpIGjGoW4gcsO1IHLhu4d0IHbhu4EgdGnDqnUgY2jDrSBBSUMuDQoNCi0gVHJvbmcga2hpIMSRw7MsIG3DtCBow6xuaCBPTFMgKGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oKSBjw7MgQUlDIGNhbyBoxqFuIMSRw6FuZyBr4buDICgxNDAxLjI2NyksIGNobyB0aOG6pXkgbcO0IGjDrG5oIG7DoHkga2jDtG5nIHBow7kgaOG7o3AgxJHhu4MgeOG7rSBsw70gYmnhur9uIHBo4bulIHRodeG7mWMgZOG6oW5nIG5o4buLIHBow6JuIG5oxrAgdHlwZV9zY2hvb2wuIFZp4buHYyBz4butIGThu6VuZyBPTFMgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHkgY8OzIHRo4buDIGThuqtuIMSR4bq/biDGsOG7m2MgbMaw4bujbmcga2jDtG5nIGhp4buHdSBxdeG6oyB2w6Agc2FpIGzhu4djaCwgZG8gdmkgcGjhuqFtIGPDoWMgZ2nhuqMgxJHhu4tuaCB24buBIHBow6JuIHBo4buRaSBj4bunYSBzYWkgc+G7kSB2w6AgxJHhurdjIMSRaeG7g20gY+G7p2EgYmnhur9uIHBo4bqjbiBo4buTaS4NCg0KIyMgKipQaOG6p24gNjogSOG7k2kgcXV5IGLhu5lpKioNCg0KDQojIyMgKio2LjEuIE3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oKioNCg0KDQpgYGB7cn0NCm1vZGVsdHlwZXBhcmVudDEgPC0gZ2xtKHR5cGVfc2Nob29sIH4gcGFyZW50X3dhc19pbl9jb2xsZWdlICsgcmVzaWRlbmNlICsgaW50ZXJlc3QgKyBwYXJlbnRfc2FsYXJ5ICsgYXZlcmFnZV9ncmFkZXMsIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShtb2RlbHR5cGVwYXJlbnQxKQ0KYGBgDQoNCg0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL0RFTEwvUGljdHVyZXMvU2NyZWVuc2hvdHMvU2NyZWVuc2hvdCAyMDI1LTA3LTI4IDAwNTEwMS5wbmciKQ0KYGBgDQoNCi0gS+G6v3QgcXXhuqMgxrDhu5tjIGzGsOG7o25nIGNobyB0aOG6pXkgbsahaSBjxrAgdHLDuiBsw6AgeeG6v3UgdOG7kSBxdWFuIHRy4buNbmcsIHbhu5tpIGjhu4cgc+G7kSBj4bunYSBiaeG6v24gcmVzaWRlbmNlVXJiYW4gbMOgIDAuMTY0OCAocCA8IDAuMDAxKS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgaOG7jWMgc2luaCBz4buRbmcg4bufIGtodSB24buxYyB0aMOgbmggdGjhu4sgY8OzIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCBjYW8gaMahbiBraG/huqNuZyAxNi41IMSRaeG7g20gcGjhuqduIHRyxINtIHNvIHbhu5tpIGjhu41jIHNpbmgg4bufIG7DtG5nIHRow7RuLiDEkMOieSBsw6Aga+G6v3QgcXXhuqMgaOG7o3AgbMO9IHbDrCBtw7RpIHRyxrDhu51uZyB0aMOgbmggdGjhu4sgdGjGsOG7nW5nIGN1bmcgY+G6pXAgbmhp4buBdSB0aMO0bmcgdGluLCBjxqEgaOG7mWkgdsOgIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdGh14bqtdCBoxqFuLg0KDQotIEJp4bq/biBpbnRlcmVzdCDigJMgdGjhu4MgaGnhu4duIG3hu6ljIMSR4buZIHF1YW4gdMOibSDEkeG6v24gdmnhu4djIGjhu41jIGzDqm4gY2FvIGjhu41jIOKAkyBjw7Mg4bqjbmggaMaw4bufbmcgcsO1IHLhu4d0IMSR4bq/biB4w6FjIHN14bqldCBjaOG7jW4gdHLGsOG7nW5nIEFjYWRlbWljLiBD4bulIHRo4buDLCBo4buNYyBzaW5oIOKAnFZlcnkgSW50ZXJlc3RlZOKAnSBjw7MgeMOhYyBzdeG6pXQgY2FvIGjGoW4gbmjDs20gdGhhbSBjaGnhur91IGtob+G6o25nIDEyIMSRaeG7g20gcGjhuqduIHRyxINtIChwID0gMC4wMjQpLCB2w6AgbmjDs20g4oCcTGVzcyBJbnRlcmVzdGVk4oCdIHRo4bqtbSBjaMOtIGPDsm4gY2FvIGjGoW4gKDIyLjkgxJFp4buDbSBwaOG6p24gdHLEg20sIHAgPCAwLjAwMSkuIE5nxrDhu6NjIGzhuqFpLCBuaMOzbSDigJxOb3QgSW50ZXJlc3RlZOKAnSBjw7MgeMOhYyBzdeG6pXQgdGjhuqVwIGjGoW4ga2hv4bqjbmcgMTUuMSDEkWnhu4NtIHBo4bqnbiB0csSDbSAocCA9IDAuMDMzKS4gS+G6v3QgcXXhuqMgbsOgeSBwaOG6o24gw6FuaCBy4bqxbmcga+G7syB24buNbmcgaOG7jWMgdOG6rXAgdHJvbmcgdMawxqFuZyBsYWkgY8OzIOG6o25oIGjGsOG7n25nIG3huqFuaCDEkeG6v24gcXV54bq/dCDEkeG7i25oIGNo4buNbiBsb+G6oWkgdHLGsOG7nW5nIHThu6sgYuG6rWMgcGjhu5UgdGjDtG5nLg0KDQotIMSQw6FuZyBjaMO6IMO9LCB0aHUgbmjhuq1wIGPhu6dhIGNoYSBt4bq5IGPDsyB0xrDGoW5nIHF1YW4gZMawxqFuZyB24bubaSB4w6FjIHN14bqldCBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQuIEjhu4cgc+G7kSBs4bubbiBuaOG6pXQgdGh14buZYyB24buBIG5ow7NtIHRodSBuaOG6rXAgdGjhuqVwICgwLjMyMTIsIHAgPCAwLjAwMSksIGNobyB0aOG6pXkgaOG7jWMgc2luaCB0aHXhu5ljIGjhu5kgZ2lhIMSRw6xuaCB0aHUgbmjhuq1wIHRo4bqlcCBjw7MgeMOhYyBzdeG6pXQgY2jhu41uIHRyxrDhu51uZyBBY2FkZW1pYyBjYW8gaMahbiBraG/huqNuZyAzMiDEkWnhu4NtIHBo4bqnbiB0csSDbSBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgKGPDsyB0aOG7gyBsw6Aga2jDtG5nIHjDoWMgxJHhu4tuaCBob+G6t2MgdHJ1bmcgYsOsbmggdGjhuqVwKS4gQ8OhYyBuaMOzbSB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIHbDoCBjYW8gY8WpbmcgY8OzIGjhu4cgc+G7kSBkxrDGoW5nIChs4bqnbiBsxrDhu6N0IGzDoCAwLjA2OTEgdsOgIDAuMTUyMSksIMSR4buBdSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIOG7nyBt4bupYyA1JS4gxJBp4buBdSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCBoYWkgeHUgaMaw4bubbmc6IG5ow7NtIHRodSBuaOG6rXAgY2FvIGPDsyDEkWnhu4F1IGtp4buHbiB0aGVvIGjhu41jIGPDoWMgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQsIHRyb25nIGtoaSBuaMOzbSB0aHUgbmjhuq1wIHRo4bqlcCBjw7MgdGjhu4Mga+G7syB24buNbmcgdsOgbyBjw6FjIGjhu5cgdHLhu6MgdMOgaSBjaMOtbmggaG/hurdjIGjhu41jIGLhu5VuZyB04burIG5o4buvbmcgdHLGsOG7nW5nIG7DoHkuDQoNCi0gVuG7gSB0aMOgbmggdMOtY2ggaOG7jWMgdOG6rXAsIGvhur90IHF14bqjIGNobyB0aOG6pXkgaOG7jWMgc2luaCBjw7MgaOG7jWMgbOG7sWMg4oCcR29vZOKAnSB2w6Ag4oCcRmFpcuKAnSBjw7MgeMOhYyBzdeG6pXQgY2jhu41uIHRyxrDhu51uZyBBY2FkZW1pYyB0aOG6pXAgaMahbiBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgKGPDsyB0aOG7gyBsw6AgaOG7jWMgc2luaCDigJxFeGNlbGxlbnTigJ0pLiBD4bulIHRo4buDLCBo4buHIHPhu5EgbOG6p24gbMaw4bujdCBsw6AgLTAuMjA3NyB2w6AgLTAuMjU2OSwgxJHhu4F1IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogY2FvIChwIDwgMC4wMDEpLiDEkGnhu4F1IG7DoHkgcGjDuSBo4bujcCB24bubaSB0aOG7sWMgdOG6vyBy4bqxbmcgaOG7jWMgc2luaCBjw7MgdGjDoG5oIHTDrWNoIGjhu41jIHThuq1wIHThu5F0IGjGoW4gY8OzIGto4bqjIG7Eg25nIGjGsOG7m25nIMSR4bq/biBjw6FjIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IHbhu5tpIHnDqnUgY+G6p3UgxJHhuqd1IHbDoG8gY2FvIGjGoW4uIE5nxrDhu6NjIGzhuqFpLCBo4buNYyBzaW5oIGjhu41jIGzhu7FjIHRydW5nIGLDrG5oIGhv4bq3YyBraMOhIGPDsyB0aOG7gyDGsHUgdGnDqm4gY2jhu41uIGPDoWMgaMaw4bubbmcgxJFpIG1hbmcgdMOtbmggdGjhu7FjIGjDoG5oIHbDoCBuZ2jhu4EgbmdoaeG7h3AgaMahbi4NCg0KLSBN4buZdCBz4buRIGJp4bq/biBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBuaMawIHBhcmVudF93YXNfaW5fY29sbGVnZSAocCA9IDAuOTk3KSB2w6AgbmjDs20g4oCcaW50ZXJlc3RVbmNlcnRhaW7igJ0gKHAgPSAwLjY3NiksIGNobyB0aOG6pXkgaOG7jWMgduG6pW4gY+G7p2EgcGjhu6UgaHV5bmggdsOgIHPhu7Ega2jDtG5nIGNo4bqvYyBjaOG6r24gduG7gSB2aeG7h2MgaOG7jWMgY2FvIGjhu41jIGtow7RuZyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10LiBU4buVbmcgdGjhu4MsIG3DtCBow6xuaCB0aOG7gyBoaeG7h24gbeG7qWMgxJHhu5kgcGjDuSBo4bujcCDhu58gbeG7qWMgdMawxqFuZyDEkeG7kWksIHbhu5tpIEFJQyA9IDEyNTkuOSB2w6AgbeG7qWMgZ2nhuqNtIHThu6sgZGV2aWFuY2UgYmFuIMSR4bqndSAyMzguMTIgeHXhu5FuZyAyMDEuMTAgc2F1IGtoaSDEkcawYSBiaeG6v24gdsOgby4gVHV5IG5oacOqbiwgxJHhu4MgZGnhu4VuIGdp4bqjaSB0aGVvIHjDoWMgc3XhuqV0IGNow61uaCB4w6FjIGjGoW4gdsOgIHBow7kgaOG7o3AgduG7m2kgYuG6o24gY2jhuqV0IG5o4buLIHBow6JuIGPhu6dhIGJp4bq/biBwaOG7pSB0aHXhu5ljLCBj4bqnbiDGsOG7m2MgbMaw4bujbmcgbOG6oWkgbcO0IGjDrG5oIGLhurFuZyBo4buTaSBxdXkgbG9naXN0aWMgdHJvbmcgYsaw4bubYyBr4bq/IHRp4bq/cC4NCg0KIyMjICoqNi4yIE3DtCBow6xuaCBMb2dpdCoqDQoNCg0KDQpgYGB7cn0NCmxvZ2l0bW9kZWx0eXBlMSA8LSBnbG0odHlwZV9zY2hvb2wgfiBwYXJlbnRfd2FzX2luX2NvbGxlZ2UgKyByZXNpZGVuY2UgKyBpbnRlcmVzdCArIHBhcmVudF9zYWxhcnkgKyBhdmVyYWdlX2dyYWRlcywgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobG9naXRtb2RlbHR5cGUxKQ0KYGBgDQoNCg0KKipOaOG6rW4geMOpdDoqKg0KDQpUYSBjw7MgaMOgbSBo4buTaSBxdXk6DQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL0RFTEwvUGljdHVyZXMvU2NyZWVuc2hvdHMvU2NyZWVuc2hvdCAyMDI1LTA3LTI4IDAwNTIwMS5wbmciKQ0KYGBgDQoNCi0gS+G6v3QgcXXhuqMgaOG7k2kgcXV5IGNobyB0aOG6pXkgbmhp4buBdSBiaeG6v24gY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB2w6Ag4bqjbmggaMaw4bufbmcgbeG6oW5oIG3hur0gxJHhur9uIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdC4gxJDDoW5nIGNow7ogw70sIGJp4bq/biByZXNpZGVuY2VVcmJhbiBjw7MgaOG7hyBz4buRIDAuNzg3IChwIDwgMC4wMDEpLCBjaG8gdGjhuqV5IGjhu41jIHNpbmggc+G7kW5nIOG7nyB0aMOgbmggdGjhu4sgY8OzIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBo4buNYyBzaW5oIOG7nyBuw7RuZyB0aMO0bi4gxJBp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kgZ2nhuqMgxJHhu4tuaCBy4bqxbmcga2h1IHbhu7FjIHRow6BuaCB0aOG7iyBjdW5nIGPhuqVwIG5oaeG7gXUgY8ahIGjhu5lpIGjhu41jIHThuq1wIHbDoCDEkeG7i25oIGjGsOG7m25nIGjhu41jIHRodeG6rXQgaMahbi4NCg0KLSBCaeG6v24gaW50ZXJlc3Qg4oCTIMSR4bqhaSBkaeG7h24gY2hvIG3hu6ljIMSR4buZIHF1YW4gdMOibSDEkeG6v24gdmnhu4djIGjhu41jIGzDqm4gY2FvIGjhu41jIOKAkyBjw7Mg4bqjbmggaMaw4bufbmcgcsO1IHLhu4d0IMSR4bq/biBs4buxYSBjaOG7jW4gbG/huqFpIHRyxrDhu51uZy4gTmjDs20gaOG7jWMgc2luaCDigJxWZXJ5IEludGVyZXN0ZWTigJ0gY8OzIGjhu4cgc+G7kSAwLjU5OSAocCA9IDAuMDE4KSwgdsOgIG5ow7NtIOKAnExlc3MgSW50ZXJlc3RlZOKAnSBjw7MgaOG7hyBz4buRIGzDqm4gxJHhur9uIDEuMjMxIChwIDwgMC4wMDEpLCBjaG8gdGjhuqV5IHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCB0xINuZyB0xrDGoW5nIOG7qW5nLiBOZ8aw4bujYyBs4bqhaSwgbmjDs20g4oCcTm90IEludGVyZXN0ZWTigJ0gY8OzIGjhu4cgc+G7kSDDom0gKC0wLjY3MCwgcCA9IDAuMDQ5KSwgY2hvIHRo4bqleSB4w6FjIHN14bqldCBnaeG6o20gxJHDoW5nIGvhu4MuIFJpw6puZyBuaMOzbSDigJxVbmNlcnRhaW7igJ0ga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGvhu7MgduG7jW5nIGjhu41jIHThuq1wIHNhdSBwaOG7lSB0aMO0bmcgbMOgIMSR4buZbmcgbOG7sWMgcXVhbiB0cuG7jW5nIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggaOG7jWMgdGh14bqtdCBj4bunYSBo4buNYyBzaW5oLg0KDQotIFbhu4EgdGh1IG5o4bqtcCBjaGEgbeG6uSwga+G6v3QgcXXhuqMgbcO0IGjDrG5oIGxvZ2l0IGNobyB0aOG6pXkgdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjIMSR4bq/biB4w6FjIHN14bqldCBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQuIEPhu6UgdGjhu4MsIG5ow7NtIGjhu41jIHNpbmggY8OzIGNoYSBt4bq5IHRodSBuaOG6rXAgdGjhuqVwIGPDsyB4w6FjIHN14bqldCBjYW8gaMahbiByw7UgcuG7h3QgKGjhu4cgc+G7kSAyLjI0NiwgcCA8IDAuMDAxKSwgdMawxqFuZyDEkcawxqFuZyB24bubaSBvZGRzIHJhdGlvIOKJiCBleHAoMi4yNDYpIOKJiCA5LjQ1IGzhuqduIHNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dS4gQ8OhYyBuaMOzbSB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIHbDoCBjYW8gY8WpbmcgY8OzIHTDoWMgxJHhu5luZyBkxrDGoW5nICho4buHIHPhu5EgbOG6p24gbMaw4bujdCBsw6AgMC4zMzUgdsOgIDAuNzA4KSwgdHJvbmcgxJHDsyB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIGPDsyDDvSBuZ2jEqWEg4bufIG3hu6ljIDUlLCBjw7JuIHRodSBuaOG6rXAgY2FvIGPDsyDDvSBuZ2jEqWEg4bufIG3hu6ljIDEwJS4gS+G6v3QgcXXhuqMgbsOgeSBwaOG6o24gw6FuaCBy4bqxbmcgZMO5IGto4bqjIG7Eg25nIHTDoGkgY2jDrW5oIGzDoCB54bq/dSB04buRIHF1YW4gdHLhu41uZywgbmjGsG5nIG5ow7NtIHRodSBuaOG6rXAgdGjhuqVwIGPDsyB0aOG7gyBoxrDhu5tuZyDEkeG6v24gY8OhYyB0csaw4budbmcgaOG7jWMgdGh14bqtdCBkbyBr4buzIHbhu41uZyDEkeG7lWkgxJHhu51pIGhv4bq3YyBjw6FjIGjhu5cgdHLhu6MgdMOgaSBjaMOtbmgsIGjhu41jIGLhu5VuZy4NCg0KLSBL4bq/dCBxdeG6oyBo4buNYyB04bqtcCB0cnVuZyBiw6xuaCAoYXZlcmFnZV9ncmFkZXMpIGPFqW5nIOG6o25oIGjGsOG7n25nIHRpw6p1IGPhu7FjIMSR4bq/biB4w6FjIHN14bqldCBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQuIFNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dSAoY8OzIHRo4buDIGzDoCBo4buNYyBzaW5oICJFeGNlbGxlbnQiKSwgaOG7jWMgc2luaCDigJxGYWly4oCdIGPDsyBo4buHIHPhu5EgLTEuMzM4IChwIDwgMC4wMDEpIHbDoCBo4buNYyBzaW5oIOKAnEdvb2TigJ0gY8OzIGjhu4cgc+G7kSAtMS4wNzcgKHAgPCAwLjAwMSksIHThu6ljIGzDoCB4w6FjIHN14bqldCBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MuIMSQaeG7gXUgbsOgeSBwaOG6o24gw6FuaCByw7UgeHUgaMaw4bubbmcgaOG7jWMgc2luaCBjw7MgdGjDoG5oIHTDrWNoIGjhu41jIHThuq1wIGNhbyBoxqFuIGPDsyBuaGnhu4F1IGto4bqjIG7Eg25nIHRoZW8gxJF14buVaSBjaMawxqFuZyB0csOsbmggaOG7jWMgdGh14bqtdCBoxqFuIGjhu41jIHNpbmggaOG7jWMgbOG7sWMgdHJ1bmcgYsOsbmggaG/hurdjIGtow6EuDQoNCi0gTeG7mXQgc+G7kSBiaeG6v24gbmjGsCBwYXJlbnRfd2FzX2luX2NvbGxlZ2UgdsOgIGludGVyZXN0VW5jZXJ0YWluIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIChwID4gMC44KSwgY2hvIHRo4bqleSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY+G7p2EgcGjhu6UgaHV5bmggdsOgIHPhu7Ega2jDtG5nIGNo4bqvYyBjaOG6r24gduG7gSB2aeG7h2MgaOG7jWMgY2FvIGjhu41jIGtow7RuZyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgY2jhu41uIHRyxrDhu51uZy4gVOG7lW5nIHRo4buDLCBtw7QgaMOsbmggY8OzIG3hu6ljIGdp4bqjbSBkZXZpYW5jZSDEkcOhbmcga+G7gyB04burIDEzMzguNCAobnVsbCkgeHXhu5FuZyAxMTY0LjMgKHJlc2lkdWFsKSwgdsOgIEFJQyA9IDExODguMyDigJMgY2hvIHRo4bqleSBtw7QgaMOsbmggY8OzIGto4bqjIG7Eg25nIGdp4bqjaSB0aMOtY2ggdOG7kXQgaMOgbmggdmkgbOG7sWEgY2jhu41uIGxv4bqhaSB0csaw4budbmcuDQoNCiMjIyAqKjYuMyBNw7QgaMOsbmggUHJvYml0KioNCg0KYGBge3J9DQpwcm9iaXRtb2RlbHR5cGUxIDwtIGdsbSh0eXBlX3NjaG9vbCB+IHBhcmVudF93YXNfaW5fY29sbGVnZSArIHJlc2lkZW5jZSArIGludGVyZXN0ICsgcGFyZW50X3NhbGFyeSArIGF2ZXJhZ2VfZ3JhZGVzLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkocHJvYml0bW9kZWx0eXBlMSkNCmBgYA0KDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDUyNDgucG5nIikNCmBgYA0KDQotIEvhur90IHF14bqjIMaw4bubYyBsxrDhu6NuZyBjaG8gdGjhuqV5IGJp4bq/biByZXNpZGVuY2VVcmJhbiBjw7MgaOG7hyBz4buRIGTGsMahbmcgKDAuNDc3KSB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDhu58gbeG7qWMgMSUgKHAtdmFsdWUgPCAwLjAwMSksIGjDoG0gw70gcuG6sW5nIGjhu41jIHNpbmggc+G7kW5nIHThuqFpIGtodSB24buxYyB0aMOgbmggdGjhu4sgY8OzIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgdGhlbyBoxrDhu5tuZyBo4buNYyB0aHXhuq10IGNhbyBoxqFuIHNvIHbhu5tpIGjhu41jIHNpbmgg4bufIG7DtG5nIHRow7RuLCBraGkgZ2nhu68gY8OhYyB54bq/dSB04buRIGtow6FjIGtow7RuZyDEkeG7lWkuIMSQw6J5IGzDoCBr4bq/dCBxdeG6oyBo4bujcCBsw70gdsOsIGjhu41jIHNpbmggdGjDoG5oIHRo4buLIHRoxrDhu51uZyBjw7Mgbmhp4buBdSBjxqEgaOG7mWkgdGnhur9wIGPhuq1uIGdpw6FvIGThu6VjIGNo4bqldCBsxrDhu6NuZyB2w6AgdGjDtG5nIHRpbiBoxqFuLg0KDQotIEJp4bq/biBpbnRlcmVzdCwgcGjhuqNuIMOhbmggbeG7qWMgxJHhu5kgcXVhbiB0w6JtIMSR4bq/biB2aeG7h2MgaOG7jWMgbMOqbiBjYW8gaOG7jWMsIHRo4buDIGhp4buHbiB2YWkgdHLDsiBxdWFuIHRy4buNbmcuIFNvIHbhu5tpIG5ow7NtICJJbnRlcmVzdGVkIiAobmjDs20gY2h14bqpbiksIG5ow7NtICJWZXJ5IEludGVyZXN0ZWQiIGPDsyBo4buHIHPhu5EgZMawxqFuZyAoMC4zNzApIHbDoCBjw7Mgw70gbmdoxKlhIOG7nyBt4bupYyA1JSwgY2hvIHRo4bqleSBt4bupYyDEkeG7mSBxdWFuIHTDom0gY2FvIGjGoW4gbMOgbSB0xINuZyBraOG6oyBuxINuZyBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRoZW8gaMaw4bubbmcgaOG7jWMgdGh14bqtdC4gxJDDoW5nIGNow7ogw70sIG5ow7NtICJMZXNzIEludGVyZXN0ZWQiIGPDsyBo4buHIHPhu5EgbOG7m24gaMahbiAoMC43NTIpIHbDoCBjw7Mgw70gbmdoxKlhIHLhuqV0IGNhbyAocCA8IDAuMDAxKSwgdGjhu4MgaGnhu4duIHTDoWMgxJHhu5luZyBi4bqldCBuZ+G7nTogY8OzIHRo4buDIGRvIMSR4buLbmggbmdoxKlhIG5ow7NtIGhv4bq3YyBjw6FjaCBtw6MgaMOzYSBiaeG6v24ga2jDtG5nIHBo4bqjbiDDoW5oIMSRw7puZyBt4buRaSBsacOqbiBo4buHIG1vbmcgxJHhu6NpLiBUcm9uZyBraGkgxJHDsywgbmjDs20gIk5vdCBJbnRlcmVzdGVkIiBjw7MgaOG7hyBz4buRIMOibSAoLTAuMzk4KSB2w6AgcC12YWx1ZSDiiYggMC4wNTQsIGjDoG0gw70gdMOhYyDEkeG7mW5nIHRpw6p1IGPhu7FjIMSR4bq/biBraOG6oyBuxINuZyBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIGjhu41jIHRodeG6rXQsIG3hurdjIGTDuSBjaOG7iSBjw7Mgw70gbmdoxKlhIOG7nyBt4bupYyAxMCUuIE5ow7NtICJVbmNlcnRhaW4iIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQotIFbhu4EgdGh1IG5o4bqtcCBnaWEgxJHDrG5oIChwYXJlbnRfc2FsYXJ5KSwgc28gduG7m2kgbmjDs20ga2jDtG5nIHjDoWMgxJHhu4tuaCAobmjDs20gY2h14bqpbiksIGPDoWMgbmjDs20gY8OzIHRodSBuaOG6rXAgY+G7pSB0aOG7gyDEkeG7gXUgY8OzIOG6o25oIGjGsOG7n25nIHTDrWNoIGPhu7FjLiDEkOG6t2MgYmnhu4d0LCBuaMOzbSB0aHUgbmjhuq1wIGxvdyBjw7MgaOG7hyBz4buRIGNhbyBuaOG6pXQgKDEuMzEyKSB2w6AgY8OzIMO9IG5naMSpYSBjYW8gKHAgPCAwLjAwMSksIMSRaeG7gXUgbsOgeSBraMOhIGLhuqV0IG5n4budLiBDw7MgdGjhu4MgZG8gxJHhurdjIMSRaeG7g20gbeG6q3UgbmdoacOqbiBj4bupdSBob+G6t2MgaOG7jWMgc2luaCBjw7MgdGh1IG5o4bqtcCB0aOG6pXAgduG6q24gY2jhu41uIHRyxrDhu51uZyBo4buNYyBo4buNYyB0aHXhuq10IHbhu5tpIG3hu6VjIHRpw6p1IGTDoGkgaOG6oW4uIE5ow7NtIGF2ZXJhZ2UgdsOgIGhpZ2ggY8WpbmcgY8OzIOG6o25oIGjGsOG7n25nIHTDrWNoIGPhu7FjLCBuaMawbmcgbeG7qWMgw70gbmdoxKlhIHRo4bqlcCBoxqFuIChwIDwgMC4wNSB2w6Ag4omIIDAuMDcpLg0KDQotIEJp4bq/biBhdmVyYWdlX2dyYWRlcywgdGjhu4MgaGnhu4duIGjhu41jIGzhu7FjLCBjw7Mg4bqjbmggaMaw4bufbmcgw6JtIHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhby4gU28gduG7m2kgbmjDs20gY8OzIGjhu41jIGzhu7FjIHnhur91IChuaMOzbSBjaHXhuqluKSwgaOG7jWMgc2luaCBjw7MgaOG7jWMgbOG7sWMga2jDoSAoR29vZCkgdsOgIHRydW5nIGLDrG5oIChGYWlyKSBs4bqhaSBjw7MgeMOhYyBzdeG6pXQgY2jhu41uIHRyxrDhu51uZyBo4buNYyBo4buNYyB0aHXhuq10IHRo4bqlcCBoxqFuICho4buHIHPhu5EgbOG6p24gbMaw4bujdCBsw6AgLTAuNjM1IHbDoCAtMC43OTEsIMSR4buBdSBjw7MgcC12YWx1ZSA8IDAuMDAxKS4gS+G6v3QgcXXhuqMgbsOgeSBjw7MgdGjhu4MgeHXhuqV0IHBow6F0IHThu6sgxJHhurdjIMSRaeG7g20gY+G7p2EgaOG7hyB0aOG7kW5nIGdpw6FvIGThu6VjIHRyb25nIG3huqt1IGto4bqjbyBzw6F0LCBuxqFpIGjhu41jIHNpbmggaOG7jWMgZ2nhu49pIGPDsyB4dSBoxrDhu5tuZyBjaOG7jW4gaMaw4bubbmcgbmdo4buBIG5naGnhu4dwIHRo4buxYyB0aeG7hW4gaMahbi4NCg0KLSBDdeG7kWkgY8O5bmcsIGJp4bq/biBwYXJlbnRfd2FzX2luX2NvbGxlZ2Uga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAg4omIIDAuOTYpLCBjaG8gdGjhuqV5IHZp4buHYyBjaGEgbeG6uSB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIGtow7RuZyBjw7MgdMOhYyDEkeG7mW5nIMSRw6FuZyBr4buDIMSR4bq/biBxdXnhur90IMSR4buLbmggY2jhu41uIGxv4bqhaSB0csaw4budbmcgaOG7jWMgY+G7p2EgY29uIHRyb25nIG3huqt1IG7DoHkuDQoNCi0gVuG7gSBjaOG6pXQgbMaw4bujbmcgbcO0IGjDrG5oLCBzYWkgc+G7kSBzdXkgZ2nhuqNtIHThu6sgbnVsbCBkZXZpYW5jZSAxMzM4LjQgeHXhu5FuZyBjw7JuIDExNjMuOSB24bubaSAxMSBi4bqtYyB04buxIGRvIHPhu60gZOG7pW5nLCBjaG8gdGjhuqV5IG3DtCBow6xuaCBjw7Mga2jhuqMgbsSDbmcgZ2nhuqNpIHRow61jaCBiaeG6v24gcGjhu6UgdGh14buZYyB04buRdCBoxqFuIG3DtCBow6xuaCBy4buXbmcuIEdpw6EgdHLhu4sgQUlDID0gMTE4Ny45IHTGsMahbmcgxJHhu5FpIHRo4bqlcCwgY2hvIHRo4bqleSBtw7QgaMOsbmggbsOgeSBsw6AgcGjDuSBo4bujcCB0cm9uZyB04bqtcCBo4bujcCBjw6FjIG3DtCBow6xuaCBjw7MgdGjhu4MuDQoNCi0gVMOzbSBs4bqhaSwgbcO0IGjDrG5oIGNobyB0aOG6pXkgbsahaSBjxrAgdHLDuiwgbeG7qWMgxJHhu5kgcXVhbiB0w6JtIMSR4bq/biB2aeG7h2MgaOG7jWMgdGnhur9wLCB0aHUgbmjhuq1wIGPhu6dhIGNoYSBt4bq5IHbDoCDEkWnhu4NtIHRydW5nIGLDrG5oIGjhu41jIHThuq1wIMSR4buBdSBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgaOG7jWMgdGh14bqtdC4gS+G6v3QgcXXhuqMgbsOgeSBnacO6cCBoaeG7g3UgcsO1IGjGoW4gduG7gSBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIGzhu7FhIGNo4buNbiBnacOhbyBk4bulYywgdsOgIGPDsyB0aOG7gyBsw6AgY8ahIHPhu58gY2hvIGPDoWMgY2jDrW5oIHPDoWNoIGjhu5cgdHLhu6MgZ2nDoW8gZOG7pWMgxJHhu4tuaCBoxrDhu5tuZyB0aGVvIHThu6tuZyBuaMOzbSBkw6JuIGPGsCBj4bulIHRo4buDLg0KDQojIyMgKio2LjQgTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpgYGB7cn0NCmNsb2dtb2RlbHR5cGUxIDwtIGdsbSh0eXBlX3NjaG9vbCB+IHBhcmVudF93YXNfaW5fY29sbGVnZSArIHJlc2lkZW5jZSArIGludGVyZXN0ICsgcGFyZW50X3NhbGFyeSArIGF2ZXJhZ2VfZ3JhZGVzLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KGNsb2dtb2RlbHR5cGUxKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVGEgY8OzIGjDoG0gaOG7k2kgcXV5Og0KDQpgYGB7cn0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJDOi9Vc2Vycy9ERUxML1BpY3R1cmVzL1NjcmVlbnNob3RzL1NjcmVlbnNob3QgMjAyNS0wNy0yOCAwMDUzMjkucG5nIikNCmBgYA0KDQotIEvhur90IHF14bqjIGjhu5NpIHF1eSBjaG8gdGjhuqV5IG3DtCBow6xuaCBsw6AgcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdSAoZGV2aWFuY2UgZ2nhuqNtIHThu6sgMTMzOC40IGPDsm4gMTE2NC45OyBBSUMgPSAxMTg4LjkpLCBjaG8gdGjhuqV5IGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCBnaeG6o2kgdGjDrWNoIHThu5F0IGJp4bq/biBwaOG7pSB0aHXhu5ljLg0KDQotIFbhu4EgeeG6v3UgdOG7kSBuxqFpIOG7nyAocmVzaWRlbmNlKSwgaOG7jWMgc2luaCBz4buRbmcg4bufIGtodSB24buxYyB0aMOgbmggdGjhu4sgY8OzIGto4bqjIG7Eg25nIGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdCBjYW8gaMahbiBzbyB24bubaSBo4buNYyBzaW5oIOG7nyBuw7RuZyB0aMO0biwgduG7m2kgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZyBsw6AgMC40NTYgKHAgPCAwLjAwMSkuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IMSRaeG7gXUga2nhu4duIHRp4bq/cCBj4bqtbiBnacOhbyBk4bulYyDhu58gxJHDtCB0aOG7iyBjw7MgdGjhu4MgdGh14bqtbiBs4bujaSBoxqFuLCB04bqhbyDEkWnhu4F1IGtp4buHbiDEkeG7gyBo4buNYyBzaW5oIMSR4buLbmggaMaw4bubbmcgaOG7jWMgdGh14bqtdC4NCg0KLSBCaeG6v24gaW50ZXJlc3Qg4oCTIMSR4bqhaSBkaeG7h24gY2hvIG3hu6ljIMSR4buZIHF1YW4gdMOibSDEkeG6v24gdmnhu4djIGjhu41jIGzDqm4gY2FvIGjhu41jIOKAkyBjw7MgdMOhYyDEkeG7mW5nIHLDtSBy4buHdCDEkeG6v24geMOhYyBzdeG6pXQgbOG7sWEgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10LiBTbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgKGPDsyB0aOG7gyBsw6AgIkludGVyZXN0ZWQiKSwgbmjhu69uZyBo4buNYyBzaW5oICJMZXNzIEludGVyZXN0ZWQiIGPDsyBo4buHIHPhu5EgbOG7m24gbmjhuqV0ICgwLjc2NCwgcCA8IDAuMDAxKSwgY2hvIHRo4bqleSBraOG6oyBuxINuZyBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQgdMSDbmcgbMOqbiByw7UgcuG7h3QsIHR1eSBjw7MgdGjhu4MgZ8OieSBuZ+G6oWMgbmhpw6puIHbDoCBj4bqnbiBwaMOibiB0w61jaCBzw6J1IGjGoW4gduG7gSDDvSBuZ2jEqWEgdGjhu7FjIHRp4buFbiAodsOtIGThu6UgZG8gw6FwIGzhu7FjIHjDoyBo4buZaSkuIE5nxrDhu6NjIGzhuqFpLCBuaMOzbSAiTm90IEludGVyZXN0ZWQiIGzhuqFpIGPDsyBo4buHIHPhu5Egw6JtIMSRw6FuZyBr4buDICgtMC41MDgsIHAgPSAwLjAzNyksIGNobyB0aOG6pXkgeMOhYyBzdeG6pXQgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGdp4bqjbSDEkcOhbmcga+G7gy4gTmjDs20gIlZlcnkgSW50ZXJlc3RlZCIgY8OzIGjhu4cgc+G7kSBkxrDGoW5nICgwLjM5MiwgcCA9IDAuMDE2KSwga2jhurNuZyDEkeG7i25oIHLhurFuZyBt4bupYyDEkeG7mSBxdWFuIHTDom0gY2FvIHRo4bqtdCBz4buxIHRow7pjIMSR4bqpeSB0aGnDqm4gaMaw4bubbmcgaOG7jWMgdGh14bqtdC4NCg0KLSBUaHUgbmjhuq1wIGPhu6dhIHBo4bulIGh1eW5oIChwYXJlbnRfc2FsYXJ5KSBjxaluZyDEkcOzbmcgdmFpIHRyw7IgcXVhbiB0cuG7jW5nLiBTbyB24bubaSBuaMOzbSBjxqEgc+G7nyAoY8OzIHRo4buDIGzDoCAidmVyeSBsb3ciKSwgY8OhYyBuaMOzbSAiYXZlcmFnZSIgdsOgICJoaWdoIiBjw7MgaOG7hyBz4buRIGzhuqduIGzGsOG7o3QgbMOgIDAuMjMzIChwID0gMC4wMjEpIHbDoCAwLjM5NCAocCDiiYggMC4wNzgpLCBwaOG6o24gw6FuaCB4dSBoxrDhu5tuZyB0w61jaCBj4buxYyBuaMawbmcgeeG6v3UgaMahbi4gxJDhurdjIGJp4buHdCwgbmjDs20gImxvdyIgbOG6oWkgY8OzIGjhu4cgc+G7kSBy4bqldCBjYW8gKDEuMjQ5LCBwIDwgMC4wMDEpLCBjaG8gdGjhuqV5IGjhu41jIHNpbmggdOG7qyBnaWEgxJHDrG5oIHRodSBuaOG6rXAgdGjhuqVwIChuaMawbmcga2jDtG5nIHF1w6EgdGjhuqVwKSBjw7Mga2jhuqMgbsSDbmcgY2jhu41uIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IGNhbyBoxqFuIMSRw6FuZyBr4buDIOKAkyBt4buZdCBr4bq/dCBxdeG6oyBj4bqnbiDEkcaw4bujYyBnaeG6o2kgdGjDrWNoIGvhu7kgbMaw4buhbmcgaMahbiB24buBIGhvw6BuIGPhuqNuaCB4w6MgaOG7mWkgdsOgIMSR4buZbmcgbOG7sWMgaOG7jWMgdOG6rXAuDQoNCi0gWeG6v3UgdOG7kSBo4buNYyBs4buxYyAoYXZlcmFnZV9ncmFkZXMpIGNobyB0aOG6pXkg4bqjbmggaMaw4bufbmcgdGnDqnUgY+G7sWMgxJHhu5FpIHbhu5tpIHjDoWMgc3XhuqV0IGNo4buNbiB0csaw4budbmcgaOG7jWMgdGh14bqtdC4gU28gduG7m2kgbmjDs20gaOG7jWMgc2luaCBnaeG7j2kgeHXhuqV0IHPhuq9jIChuaMOzbSBjxqEgc+G7nyksIGjhu41jIHNpbmggY8OzIGjhu41jIGzhu7FjICJHb29kIiB2w6AgIkZhaXIiIGPDsyBo4buHIHPhu5Egw6JtIMSRw6FuZyBr4buDOiBs4bqnbiBsxrDhu6N0IGzDoCAtMC42MTQgKHAgPCAwLjAwMSkgdsOgIC0wLjc3NCAocCA8IDAuMDAxKS4gxJBp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kga+G7syB24buNbmcgbMO9IHRodXnhur90OiBo4buNYyBzaW5oIGPDsyB0aMOgbmggdMOtY2ggaOG7jWMgdOG6rXAgdOG7kXQgaMahbiB0aMaw4budbmcgY8OzIHh1IGjGsOG7m25nIGNo4buNbiBjw6FjIGNoxrDGoW5nIHRyw6xuaCBtYW5nIHTDrW5oIGjhu41jIHRodeG6rXQgaMahbi4NCg0KLSBDdeG7kWkgY8O5bmcsIGJp4bq/biBwYXJlbnRfd2FzX2luX2NvbGxlZ2UgbOG6oWkga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAgPSAwLjc5OSksIGNobyB0aOG6pXkgdmnhu4djIGNoYSBt4bq5IHThu6tuZyBo4buNYyDEkeG6oWkgaOG7jWMga2jDtG5nIGPDsyDhuqNuaCBoxrDhu59uZyByw7UgcsOgbmcgxJHhur9uIGzhu7FhIGNo4buNbiB0csaw4budbmcgaOG7jWMgY+G7p2EgaOG7jWMgc2luaCwgc2F1IGtoaSDEkcOjIGtp4buDbSBzb8OhdCBjw6FjIHnhur91IHThu5Ega2jDoWMuIMSQaeG7gXUgbsOgeSBjw7MgdGjhu4MgZG8g4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyB54bq/dSB04buRIHRydW5nIGdpYW4gbmjGsCB0aHUgbmjhuq1wLCBtw7RpIHRyxrDhu51uZyBz4buRbmcgdsOgIMSR4buZbmcgbOG7sWMgY8OhIG5ow6JuLg0KDQojIyMgKio2LjUgxJDDoW5oIGdpw6EgbcO0IGjDrG5oIGjhu5NpIHF1eSBi4buZaSoqDQoNCmBgYHtyfQ0KQUlDKG1vZGVsdHlwZXBhcmVudDEpDQpBSUMobG9naXRtb2RlbHR5cGUxKQ0KQUlDKHByb2JpdG1vZGVsdHlwZTEpDQpBSUMoY2xvZ21vZGVsdHlwZTEpDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKiANCg0KxJDhu4MgxJHDoW5oIGdpw6EgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBj4bunYSBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgIHRyb25nIHZp4buHYyBwaMOibiB0w61jaCBxdXnhur90IMSR4buLbmggY2jhu41uIGNoxrDGoW5nIHRyw6xuaCBo4buNYyAoQWNhZGVtaWMgaGF5IFZvY2F0aW9uYWwpIGPhu6dhIGjhu41jIHNpbmggdOG7qyBuaGnhu4F1IHnhur91IHThu5EsIHRhIHNvIHPDoW5oIGPDoWMgZ2nDoSB0cuG7iyBBSUMgKEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24pIHThu6sgY8OhYyBtw7QgaMOsbmg6IE9MUywgTG9naXQsIFByb2JpdCB2w6AgQ2xvZ2xvZy4gS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBtw7QgaMOsbmggUHJvYml0IGPDsyBBSUMgdGjhuqVwIG5o4bqldCAoMTE4Ny45NDkpLCB0aeG6v3AgdGhlbyBsw6AgTG9naXQgKDExODguMzExKSwgQ2xvZ2xvZyAoMTE4OC44NjcpLCB2w6AgY3Xhu5FpIGPDuW5nIGzDoCBPTFMgduG7m2kgQUlDIGNhbyBuaOG6pXQgKDEyNTkuOTQ0KS4gVsOsIEFJQyBwaOG6o24gw6FuaCBz4buxIMSRw6FuaCDEkeG7lWkgZ2nhu69hIMSR4buZIHBow7kgaOG7o3AgdsOgIG3hu6ljIMSR4buZIHBo4bupYyB04bqhcCBj4bunYSBtw7QgaMOsbmgsIG7Dqm4gbcO0IGjDrG5oIG7DoG8gY8OzIEFJQyB0aOG6pXAgaMahbiBz4bq9IMSRxrDhu6NjIMawdSB0acOqbiBs4buxYSBjaOG7jW4uIERvIMSRw7MsIG3DtCBow6xuaCBQcm9iaXQgxJHGsOG7o2MgeGVtIGzDoCBtw7QgaMOsbmggY8OzIMSR4buZIHBow7kgaOG7o3AgY2FvIG5o4bqldCB24bubaSBk4buvIGxp4buHdSB0cm9uZyBuZ2hpw6puIGPhu6l1IG7DoHkuDQojIyMgKio2LjYgSOG7hyBz4buRIEJyaWVyIFNjb3JlKioNCg0KYGBge3J9DQpsaWJyYXJ5KERlc2NUb29scykNCkJyaWVyU2NvcmUobG9naXRtb2RlbHR5cGUxKQ0KQnJpZXJTY29yZShwcm9iaXRtb2RlbHR5cGUxKQ0KYGBgDQpUcm9uZyBi4buRaSBj4bqjbmggbmdoacOqbiBj4bupdSB24buBIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gbG/huqFpIHRyxrDhu51uZyBo4buNYyBtw6AgaOG7jWMgc2luaCBs4buxYSBjaOG7jW4gKGjhu41jIG5naOG7gSBoYXkgaOG7jWMgdGh14bqtdCksIGNo4buJIHPhu5EgQnJpZXIgU2NvcmUgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmjhurFtIMSRw6FuaCBnacOhIMSR4buZIGNow61uaCB4w6FjIHRyb25nIGThu7EgxJFvw6FuIHjDoWMgc3XhuqV0IGPhu6dhIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4uIMSQw6J5IGzDoCBjaOG7iSBz4buRIMSRbyBsxrDhu51uZyBzYWkgc+G7kSBiw6xuaCBwaMawxqFuZyBnaeG7r2EgeMOhYyBzdeG6pXQgZOG7sSDEkW/DoW4gdsOgIGdpw6EgdHLhu4sgdGjhu7FjIHThur87IGPDoG5nIGfhuqduIDAgdGjDrCBtw7QgaMOsbmggY8OgbmcgdOG7kXQuIEvhur90IHF14bqjIGNobyB0aOG6pXkgbcO0IGjDrG5oIExvZ2l0IMSR4bqhdCBCcmllciBTY29yZSBsw6AgMC4xOTk5NSwgdGjhuqVwIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgbcO0IGjDrG5oIFByb2JpdCAoMC4yMDAwMiksIGNobyB0aOG6pXkgTG9naXQgZOG7sSDEkW/DoW4gdOG7kXQgaMahbiB24buBIG3hurd0IHjDoWMgc3XhuqV0Lg0KDQpL4bq/dCBo4bujcCB24bubaSBr4bq/dCBxdeG6oyBBSUMgdsOgIG3hu6VjIHRpw6p1IGPhu6dhIMSR4buBIHTDoGksIGPDsyB0aOG7gyB0aOG6pXkgcuG6sW5nIG3DtCBow6xuaCBMb2dpdCBraMO0bmcgY2jhu4kgY2hvIGto4bqjIG7Eg25nIGdp4bqjaSB0aMOtY2ggdHLhu7FjIHF1YW4gduG7gSB0w6FjIMSR4buZbmcgY+G7p2EgY8OhYyB54bq/dSB04buRIG5oxrAgbeG7qWMgbMawxqFuZyBjaGEgbeG6uSBtw6AgY8OybiBjw7MgxJHhu5kgY2jDrW5oIHjDoWMgaOG7o3AgbMO9LiANCg0KIyMgKipQaOG6p24gNzogSOG7k2kgcXV5IHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIMSRYSBwaOG6oW0gdHLDuSoqDQoNCg0KDQojIyMgKio3LjEuIE3DtCBow6xuaCBNdWx0aW5vbWlhbCBsb2dpdCoqDQoNCmBgYHtyfQ0KdGFibGVfYXZwYXJlbnQgPC0gdGFibGUoZGF0YSRhdmVyYWdlX2dyYWRlcyxkYXRhJHBhcmVudF93YXNfaW5fY29sbGVnZSkNCnRhYmxlX2F2cmU8LSB0YWJsZShkYXRhJGF2ZXJhZ2VfZ3JhZGVzLGRhdGEkcmVzaWRlbmNlKQ0KdGFibGVfYXZ3aWxsIDwtIHRhYmxlKGRhdGEkYXZlcmFnZV9ncmFkZXMsZGF0YSR3aWxsX2dvX3RvX2NvbGxlZ2UpDQoNCnRhYmxlX2F2Z2VuIDwtIHRhYmxlKGRhdGEkYXZlcmFnZV9ncmFkZXMsIGRhdGEkZ2VuZGVyKQ0KDQp0YWJsZV9hdmluIDwtIHRhYmxlKGRhdGEkYXZlcmFnZV9ncmFkZXMsIGRhdGEkaW50ZXJlc3QpDQoNCnRhYmxlX2F2c2EgPC0gdGFibGUoZGF0YSRhdmVyYWdlX2dyYWRlcywgZGF0YSRzY2hvb2xfYWNjcmVkaXRhdGlvbikNCnRhYmxlX2F2cGFyZW50c2FsIDwtIHRhYmxlKGRhdGEkYXZlcmFnZV9ncmFkZXMsIGRhdGEkcGFyZW50X3NhbGFyeSkNCg0KdGFibGVfYXZob3VzZSA8LSB0YWJsZShkYXRhJGF2ZXJhZ2VfZ3JhZGVzLCBkYXRhJGhvdXNlX2FyZWEpDQoNCnRhYmxlX2F2dHlwZSA8LSB0YWJsZShkYXRhJGF2ZXJhZ2VfZ3JhZGVzLCBkYXRhJHR5cGVfc2Nob29sKQ0KDQpjaGlhdnBhcmVudCA8LSBjaGlzcS50ZXN0KHRhYmxlX2F2cGFyZW50KQ0KY2hpYXZyZSA8LSBjaGlzcS50ZXN0KHRhYmxlX2F2cmUpDQpjaGlhdndpbGwgPC0gY2hpc3EudGVzdCh0YWJsZV9hdndpbGwpDQpjaGlhdmdlbiA8LSBjaGlzcS50ZXN0KHRhYmxlX2F2Z2VuKQ0KY2hpYXZpbiA8LSBjaGlzcS50ZXN0KHRhYmxlX2F2aW4pDQpjaGlhdnNhIDwtIGNoaXNxLnRlc3QodGFibGVfYXZzYSkNCmNoaWF2cGFyZW50c2FsIDwtIGNoaXNxLnRlc3QodGFibGVfYXZwYXJlbnRzYWwpDQpjaGlhdmhvdXNlIDwtIGNoaXNxLnRlc3QodGFibGVfYXZob3VzZSkNCmNoaWF2dHlwZSA8LSBjaGlzcS50ZXN0KHRhYmxlX2F2dHlwZSkNCg0KDQpjaGlzcS50ZXN0KHRhYmxlX2F2cGFyZW50KQ0KY2hpc3EudGVzdCh0YWJsZV9hdnJlKQ0KY2hpc3EudGVzdCh0YWJsZV9hdndpbGwpDQpjaGlzcS50ZXN0KHRhYmxlX2F2Z2VuKQ0KY2hpc3EudGVzdCh0YWJsZV9hdmluKQ0KY2hpc3EudGVzdCh0YWJsZV9hdnNhKQ0KY2hpc3EudGVzdCh0YWJsZV9hdnBhcmVudHNhbCkNCmNoaXNxLnRlc3QodGFibGVfYXZob3VzZSkNCmNoaXNxLnRlc3QodGFibGVfYXZ0eXBlKQ0KYGBgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KG5uZXQpDQpkYXRhJGF2ZXJhZ2VfZ3JhZGVzIDwtIHJlbGV2ZWwoZGF0YSRhdmVyYWdlX2dyYWRlcywgcmVmID0gIkZhaXIiKQ0KDQphdl9tdWx0aW5vbV9tb2RlbCA8LSBtdWx0aW5vbShhdmVyYWdlX2dyYWRlcyB+IHBhcmVudF93YXNfaW5fY29sbGVnZSArIHJlc2lkZW5jZSArIHdpbGxfZ29fdG9fY29sbGVnZSArIGludGVyZXN0ICsgc2Nob29sX2FjY3JlZGl0YXRpb24gKyBwYXJlbnRfc2FsYXJ5ICsgaG91c2VfYXJlYSArIHR5cGVfc2Nob29sLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkoYXZfbXVsdGlub21fbW9kZWwpDQpgYGANCg0KKioqTmjhuq1uIHjDqXQ6KioqDQoNCk3DtCBow6xuaCDEkcOjIGjhu5lpIHThu6Ugc2F1IDMwIHbDsm5nIGzhurdwIHbhu5tpIGdpw6EgdHLhu4sgUmVzaWR1YWwgRGV2aWFuY2UgbMOgIDE1MTYuNDM4IHbDoCBBSUMgbMOgIDE1NzYuNDM4LCBjaG8gdGjhuqV5IG3DtCBow6xuaCBjw7MgxJHhu5kgcGjDuSBo4bujcCB0xrDGoW5nIMSR4buRaSB04buRdCBzbyB24bubaSBtw7QgaMOsbmggcuG7l25nLiBQaMOibiB0w61jaCBjw6FjIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgY2hvIGhhaSBuaMOzbSBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCBsw6Ag4oCcR29vZOKAnSB2w6Ag4oCcRXhjZWxsZW504oCdIChzbyB24bubaSBuaMOzbSBjxqEgc+G7nyDigJxGYWly4oCdKSBnacO6cCBoaeG7g3UgcsO1IGjGoW4gdMOhYyDEkeG7mW5nIGPhu6dhIHThu6tuZyB54bq/dSB04buRLg0KDQrigKIJQmnhur9uICJ3aWxsX2dvX3RvX2NvbGxlZ2VZRVMiIChOZ3V54buHbiB24buNbmcgaOG7jWMgxJHhuqFpIGjhu41jKSBjw7MgaOG7hyBz4buRIHLhuqV0IGzhu5tuOiBraG/huqNuZyA2LjAzNyBjaG8g4oCcRXhjZWxsZW504oCdIHbDoCAxLjIwOCBjaG8g4oCcR29vZOKAnSDigJMgdsOgIMSR4buBdSBjw7Mgc2FpIHPhu5EgY2h14bqpbiBuaOG7jyDihpIgY2hvIHRo4bqleSDEkcOieSBsw6AgeeG6v3UgdOG7kSBy4bqldCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLCDhuqNuaCBoxrDhu59uZyBt4bqhbmggxJHhur9uIHjDoWMgc3XhuqV0IMSR4bqhdCBr4bq/dCBxdeG6oyBo4buNYyB04bqtcCB04buRdC4NCg0K4oCiCSJwYXJlbnRfd2FzX2luX2NvbGxlZ2VUUlVFIiAoQ2hhIG3hurkgdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYykgY8WpbmcgY2hvIGjhu4cgc+G7kSBkxrDGoW5nIGPhuqMg4bufIGhhaSBt4bupYzogMS4zNCAoRXhjZWxsZW50KSB2w6AgMC40MSAoR29vZCksIHBo4bqjbiDDoW5oIOG6o25oIGjGsOG7n25nIHTDrWNoIGPhu7FjIGPhu6dhIG7hu4FuIHThuqNuZyBnacOhbyBk4bulYyBnaWEgxJHDrG5oIMSR4buRaSB24bubaSBo4buNYyBzaW5oLg0KDQrigKIJTmfGsOG7o2MgbOG6oWksICJyZXNpZGVuY2VVcmJhbiIgKHPhu5FuZyDhu58gxJHDtCB0aOG7iykgbOG6oWkgY8OzIGjhu4cgc+G7kSDDom0gbmjhurksIMSR4bq3YyBiaeG7h3QgbMOgIOG7nyBuaMOzbSDigJxFeGNlbGxlbnTigJ0gKC0wLjkwKSDihpIgY8OzIHRo4buDIGfhu6NpIMO9IHLhurFuZyBo4buNYyBzaW5oIOG7nyBuw7RuZyB0aMO0biB0cm9uZyBt4bqrdSBjw7MgdGjDoG5oIHTDrWNoIGNhbyBoxqFuLCBob+G6t2MgZG8gxJHhurdjIMSRaeG7g20gcGjDom4gYuG7kSBk4buvIGxp4buHdS4NCg0K4oCiCUPDoWMgbeG7qWMgxJHhu5kgcXVhbiB0w6JtIMSR4bq/biBo4buNYyDEkeG6oWkgaOG7jWMgKGludGVyZXN0KSDEkeG7gXUgY8OzIGjhu4cgc+G7kSDDom0gc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91IOKGkiBjw6BuZyDDrXQgcXVhbiB0w6JtIHRow6wga2jhuqMgbsSDbmcgxJHhuqF0IEV4Y2VsbGVudCB2w6AgR29vZCBjw6BuZyBnaeG6o20uIMSQaeG7gXUgbsOgeSB0aOG7kW5nIG5o4bqldCB24bubaSB0cuG7sWMgZ2nDoWMgdsOgIGPDoWMga+G6v3QgcXXhuqMgdHLGsOG7m2MuDQoNCuKAoglUaHUgbmjhuq1wIGNoYSBt4bq5IHRo4bqlcCAoInBhcmVudF9zYWxhcnlsb3ciKSBjw7MgaOG7hyBz4buRIGtow6EgY2FvICgyLjI0IHbhu5tpIOKAnEV4Y2VsbGVudOKAnSksIGTDuSBzYWkgc+G7kSBjaHXhuqluIGPDsm4gbOG7m24g4oaSIGPhuqduIHRo4bqtbiB0cuG7jW5nIHRyb25nIGRp4buFbiBnaeG6o2ksIG5oxrBuZyBjw7MgdGjhu4MgZ+G7o2kgw70gcuG6sW5nIG3hu5l0IHPhu5EgaOG7jWMgc2luaCB0cm9uZyBob8OgbiBj4bqjbmgga2jDsyBraMSDbiB24bqrbiBjw7MgxJHhu5luZyBs4buxYyBo4buNYyB04buRdC4NCg0K4oCiCURp4buHbiB0w61jaCBuaMOgIOG7nyBuaOG7jyAoImhvdXNlX2FyZWFTbWFsbCIpIGNobyBo4buHIHPhu5Egw6JtIGzhu5tuIOG7nyBj4bqjIGhhaSBuaMOzbSwgxJHhurdjIGJp4buHdCBsw6Ag4oCcRXhjZWxsZW504oCdICgtMS4yOCksIMSRaeG7gXUgbsOgeSBwaOG6o24gw6FuaCBz4buxIGLhuqV0IGzhu6NpIHbhu4EgxJFp4buBdSBraeG7h24gc+G7kW5nIOG6o25oIGjGsOG7n25nIHRpw6p1IGPhu7FjIMSR4bq/biBr4bq/dCBxdeG6oyBo4buNYyB04bqtcC4NCg0KDQpgYGB7cn0NCiMgVMOtbmggUlJSDQpleHAoY29lZihhdl9tdWx0aW5vbV9tb2RlbCkpDQpgYGANCioqKk5o4bqtbiB4w6l0OioqKg0KDQotIEvhur90IHF14bqjIHBow6JuIHTDrWNoIHThu6sgbcO0IGjDrG5oIGNobyB0aOG6pXkgbmd1eeG7h24gduG7jW5nIGjhu41jIMSR4bqhaSBo4buNYyBsw6AgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgbeG6oW5oIG3hur0gbmjhuqV0IMSR4bq/biB4w6FjIHN14bqldCDEkeG6oXQgdGjDoG5oIHTDrWNoIGjhu41jIHThuq1wIGNhby4gQ+G7pSB0aOG7gywgaOG7jWMgc2luaCBjw7MgbW9uZyBtdeG7kW4gaOG7jWMgxJHhuqFpIGjhu41jIGPDsyBvZGRzIMSR4bqhdCBt4bupYyBFeGNlbGxlbnQgY2FvIGfhuqVwIGtob+G6o25nIDQxOCBs4bqnbiBzbyB24bubaSBuaMOzbSBraMO0bmcgY8OzIG1vbmcgbXXhu5FuIG7DoHkgKHRyb25nIGtoaSBnaeG7ryBuZ3V5w6puIGPDoWMgeeG6v3UgdOG7kSBraMOhYykuIMSQw6J5IGzDoCBjb24gc+G7kSBy4bqldCDhuqVuIHTGsOG7o25nLCBjaG8gdGjhuqV5IHRow6FpIMSR4buZIHbDoCBt4bulYyB0acOqdSBo4buNYyB04bqtcCDEkcOzbmcgdmFpIHRyw7IgY+G7sWMga+G7syBxdWFuIHRy4buNbmcgdHJvbmcga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgdGjhu7FjIHThur8uIELDqm4gY+G6oW5oIMSRw7MsIHZp4buHYyBjaGEgbeG6uSB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIGPFqW5nIGzDoCB54bq/dSB04buRIGPDsyDhuqNuaCBoxrDhu59uZyB0w61jaCBj4buxYyDigJMgb2RkcyDEkeG6oXQgRXhjZWxsZW50IHTEg25nIGtob+G6o25nIDMuODIgbOG6p24sIHBo4bqjbiDDoW5oIHTDoWMgxJHhu5luZyBj4bunYSBu4buBbiB04bqjbmcgZ2nDoW8gZOG7pWMgZ2lhIMSRw6xuaCDEkeG6v24gdGjDoG5oIHTDrWNoIGjhu41jIHThuq1wLg0KDQoNCi0gTeG7mXQgxJFp4buDbSB0aMO6IHbhu4sgbMOgIHRodSBuaOG6rXAgdGjhuqVwIGPhu6dhIGNoYSBt4bq5IGzhuqFpIGfhuq9uIHbhu5tpIHjDoWMgc3XhuqV0IGNhbyBoxqFuIMSR4buDIMSR4bqhdCBFeGNlbGxlbnQgKG9kZHMgdMSDbmcgfjkuMzkgbOG6p24pLiDEkMOieSBjw7MgdGjhu4MgbMOgIGThuqV1IGhp4buHdSBjaG8gdGjhuqV5IG5oaeG7gXUgaOG7jWMgc2luaCB0cm9uZyBob8OgbiBj4bqjbmgga2jDsyBraMSDbiBjw7MgxJHhu5luZyBs4buxYyBo4buNYyB04bqtcCBy4bqldCBt4bqhbmggbeG6vSDEkeG7gyB0aGF5IMSR4buVaSBob8OgbiBj4bqjbmguIFR1eSBuaGnDqm4sIMSR4buRaSB24bubaSBuaMOzbSBo4buNYyBzaW5oIMSR4bqhdCBt4bupYyBHb29kLCB0aHUgbmjhuq1wIHRo4bqlcCBs4bqhaSBjw7MgdMOhYyDEkeG7mW5nIG5nxrDhu6NjIChvZGRzIGNo4buJIGLhurFuZyB+MC41MSBs4bqnbiksIGNobyB0aOG6pXkgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBraW5oIHThur8gdsOgIHRow6BuaCB0w61jaCBo4buNYyB04bqtcCBraMO0bmcgaG/DoG4gdG/DoG4gdHV54bq/biB0w61uaC4gTmdvw6BpIHJhLCBjw6FjIHnhur91IHThu5EgbmjGsCBo4buNYyDhu58gdHLGsOG7nW5nIGTDom4gbOG6rXAgdsOgIHPhu5FuZyB0cm9uZyBraHUgduG7sWMgbmjhu48gY8Wpbmcg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IMSR4bqhdCBr4bq/dCBxdeG6oyB04buRdC4gxJDhurdjIGJp4buHdCwgaOG7jWMgc2luaCDhu58ga2h1IHbhu7FjIG5o4buPIGPDsyB4w6FjIHN14bqldCDEkeG6oXQgdGjDoG5oIHTDrWNoIGNhbyB0aOG6pXAgaMahbiByw7UgcuG7h3QgKG9kZHMgY2jhu4kgYuG6sW5nIH4wLjI3IGNobyBFeGNlbGxlbnQgdsOgIH4wLjQ1IGNobyBHb29kKSwgY2hvIHRo4bqleSBz4buxIGNow6puaCBs4buHY2ggduG7gSBjxqEgaOG7mWkgaOG7jWMgdOG6rXAgZ2nhu69hIGPDoWMga2h1IHbhu7FjIHbhuqtuIGzDoCB24bqlbiDEkeG7gSDEkcOhbmcgY2jDuiDDvS5DaGEgbeG6uSB04burbmcgaOG7jWMgxJHhuqFpIGjhu41jIGzDoG0gdMSDbmcgxJHDoW5nIGvhu4MgeMOhYyBzdeG6pXQgaOG7jWMgc2luaCDEkeG6oXQgbG/huqFpICJFeGNlbGxlbnQiIHNvIHbhu5tpICJGYWlyIiAoUlJSID0gMy44MiksIGNobyB0aOG6pXkg4bqjbmggaMaw4bufbmcgdMOtY2ggY+G7sWMgY+G7p2EgbuG7gW4gdOG6o25nIGjhu41jIHbhuqVuIGdpYSDEkcOsbmguDQoNCg0KYGBge3J9DQojIMSQw6FuaCBnacOhIMSR4buZIGNow61uaCB4w6FjIA0KcHJlZF9hdiA8LSBwcmVkaWN0KGF2X211bHRpbm9tX21vZGVsLCBuZXdkYXRhID0gZGF0YSwgdHlwZSA9ICJjbGFzcyIpDQoNCmNvbmZ1c2lvbl9tYXRyaXhfbXVsdGkgPC0gdGFibGUoUHJlZGljdGVkID0gcHJlZF9hdiwgQWN0dWFsID0gZGF0YSRhdmVyYWdlX2dyYWRlcykNCg0KcHJpbnQoY29uZnVzaW9uX21hdHJpeF9tdWx0aSkNCmFjY3VyYWN5X211bHRpIDwtIHN1bShkaWFnKGNvbmZ1c2lvbl9tYXRyaXhfbXVsdGkpKS8gc3VtKGNvbmZ1c2lvbl9tYXRyaXhfbXVsdGkpDQpjYXQoIk92ZXJhbGwgQWNjdXJhY3k6Iiwgcm91bmQoYWNjdXJhY3lfbXVsdGksNSksICJcbiIpDQpgYGANCg0KDQoqKipOaOG6rW4geMOpdDoqKioNCuKAoiAgxJDhu5kgY2jDrW5oIHjDoWMgdOG7lW5nIHRo4buDIChPdmVyYWxsIEFjY3VyYWN5KTogNjMuOCUg4oCUIG3hu6ljIG7DoHkgdMawxqFuZyDEkeG7kWkg4buVbiB0cm9uZyBi4buRaSBj4bqjbmggY8OzIDMgbeG7qWMgxJHhu5kgcGjDom4gbG/huqFpLg0KDQrigKIgIEzhu5twIOKAnEZhaXLigJ0gY8OzIHThu7cgbOG7hyBk4buxIMSRb8OhbiDEkcO6bmcga2jDoSBjYW8gKDMwOSDEkcO6bmcgdHLDqm4gdOG7lW5nIHPhu5EgNDU5IGzhuqduIMSRxrDhu6NjIGfDoW4gbMOgIOKAnEZhaXLigJ0pLg0K4oCiICBM4bubcCDigJxFeGNlbGxlbnTigJ0gY8OzIHRo4buDIGLhu4sgbmjhuqdtIGzhuqtuIGtow6Egbmhp4buBdSB24bubaSDigJxHb29k4oCdICg4MSB0csaw4budbmcgaOG7o3ApLg0KDQrigKIgIEzhu5twIOKAnEdvb2TigJ0gY8WpbmcgY8OzIG5oaeG7gXUgdHLGsOG7nW5nIGjhu6NwIGLhu4sgZ8OhbiBuaOG6p20gbMOgIOKAnEZhaXLigJ0gKDE0NiB0csaw4budbmcgaOG7o3ApDQoNCg0KIyMjICoqNy4yIE3DtCBow6xuaCBPcmRpbmFsIGxvZ2l0KioNCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShNQVNTKQ0KYXZfcG9scl9tb2RlbCA8LSBwb2xyKGF2ZXJhZ2VfZ3JhZGVzIH4gcGFyZW50X3dhc19pbl9jb2xsZWdlICsgcmVzaWRlbmNlICsgd2lsbF9nb190b19jb2xsZWdlICsgaW50ZXJlc3QgKyBzY2hvb2xfYWNjcmVkaXRhdGlvbiArIHBhcmVudF9zYWxhcnkgKyBob3VzZV9hcmVhICsgdHlwZV9zY2hvb2wsIGRhdGEgPSBkYXRhLCBIZXNzID0gVFJVRSkNCnN1bW1hcnkoYXZfcG9scl9tb2RlbCkNCmBgYA0KDQoqKipOaOG6rW4geMOpdDoqKioNCg0KLSBNw7QgaMOsbmggT3JkaW5hbCBMb2dpdCAoaGF5IGPDsm4gZ+G7jWkgbMOgIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgdGjhu6kgYuG6rWMpIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIGThu7EgxJFvw6FuIGJp4bq/biBwaOG7pSB0aHXhu5ljIHRo4bupIGLhuq1jIGF2ZXJhZ2VfZ3JhZGVzIGfhu5NtIGJhIGPhuqVwIMSR4buZOiBGYWlyLCBFeGNlbGxlbnQgdsOgIEdvb2QuIEvhur90IHF14bqjIGjhu5NpIHF1eSBjaG8gdGjhuqV5IG3hu5l0IHPhu5EgYmnhur9uIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgaOG7jWMgc2luaCDEkeG6oXQgxJHGsOG7o2MgbeG7qWMgxJFp4buDbSBjYW8gaMahbi4gQ+G7pSB0aOG7gywgYmnhur9uIHdpbGxfZ29fdG9fY29sbGVnZVlFUyBjw7MgaOG7hyBz4buRIGTGsMahbmcgKDAuODk0KSB2w6AgcuG6pXQgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAodCA9IDUuNDYpLCBjaG8gdGjhuqV5IGjhu41jIHNpbmggY8OzIGThu7EgxJHhu4tuaCBo4buNYyDEkeG6oWkgaOG7jWMgY8OzIGto4bqjIG7Eg25nIMSR4bqhdCDEkWnhu4NtIGNhbyBoxqFuIHNvIHbhu5tpIG5o4buvbmcgaOG7jWMgc2luaCBraMO0bmcgY8OzIMSR4buLbmggaMaw4bubbmcgbsOgeS4gVMawxqFuZyB04buxLCB0aHUgbmjhuq1wIGPhu6dhIGNoYSBt4bq5IChwYXJlbnRfc2FsYXJ5KSBjxaluZyBjw7MgdMOhYyDEkeG7mW5nIMSRw6FuZyBr4buDLCB0cm9uZyDEkcOzIGPDoWMgbeG7qWMgdGh1IG5o4bqtcCB0aOG6pXAgdsOgIHRydW5nIGLDrG5oIMSR4buBdSBjw7MgaOG7hyBz4buRIMOibSB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgbmfhu6Ugw70gcuG6sW5nIGjhu41jIHNpbmggxJHhur9uIHThu6sgZ2lhIMSRw6xuaCBjw7MgdGh1IG5o4bqtcCB0aOG6pXAgaMahbiB0aMaw4budbmcgxJHhuqF0IMSRaeG7g20gdHJ1bmcgYsOsbmggdGjhuqVwIGjGoW4uDQoNCi0gTmfGsOG7o2MgbOG6oWksIG5oaeG7gXUgYmnhur9uIG5oxrAgcmVzaWRlbmNlLCB0eXBlX3NjaG9vbCwgaGF5IHNjaG9vbF9hY2NyZWRpdGF0aW9uIGzhuqFpIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLCBjaG8gdGjhuqV5IGNow7puZyBraMO0bmcg4bqjbmggaMaw4bufbmcgcsO1IHLDoG5nIMSR4bq/biBwaMOibiBsb+G6oWkgxJFp4buDbSB0cnVuZyBiw6xuaCBj4bunYSBo4buNYyBzaW5oIHRyb25nIG3DtCBow6xuaCBuw6B5LiBDw6FjIG3hu6ljIMSR4buZIHF1YW4gdMOibSAoaW50ZXJlc3QpIMSR4bq/biB2aeG7h2MgaOG7jWMgY8WpbmcgY8OzIHh1IGjGsOG7m25nIOG6o25oIGjGsOG7n25nIHRpw6p1IGPhu7FjIMSR4bq/biB4w6FjIHN14bqldCDEkeG6oXQgxJFp4buDbSBjYW8sIHR1eSBuaGnDqm4gY2jGsGEgxJHhu6cgw70gbmdoxKlhIHRo4buRbmcga8OqLiBOZ2/DoGkgcmEsIGjhu4cgc+G7kSBjaOG6t24gKGludGVyY2VwdHMpIGdp4buvYSBjw6FjIGPhuqVwIMSR4buZIMSRaeG7g20gaOG7jWMgdOG6rXAgY8WpbmcgY2hvIHRo4bqleSByYW5oIGdp4bubaSBwaMOibiB0w6FjaCBnaeG7r2EgRmFpciwgRXhjZWxsZW50LCB2w6AgR29vZCBsw6Aga2jDtG5nIMSR4buRaSB44bupbmcuDQoNCmBgYHtyfQ0KIyBUw61uaCBPUg0KZXhwKGNvZWYoYXZfcG9scl9tb2RlbCkpDQpgYGANCg0KKioqTmjhuq1uIHjDqXQ6KioqDQoNCi0JcGFyZW50X3dhc19pbl9jb2xsZWdlVFJVRSAoT1IgPSAxLjMyKTogSOG7jWMgc2luaCBjw7MgY2hhIG3hurkgdOG7q25nIGjhu41jIMSR4bqhaSBo4buNYyBjw7Mga2jhuqMgbsSDbmcgcsahaSB2w6BvIG5ow7NtIGvhur90IHF14bqjIGjhu41jIHThuq1wIHRo4bqlcCBoxqFuIGNhbyBoxqFuIGtob+G6o25nIDEuMzIgbOG6p24gc28gduG7m2kgaOG7jWMgc2luaCBjw7MgY2hhIG3hurkga2jDtG5nIGjhu41jIMSR4bqhaSBo4buNYyAoZ2nhu68gY8OhYyB54bq/dSB04buRIGtow6FjIGtow7RuZyDEkeG7lWkpLg0KDQotCXdpbGxfZ29fdG9fY29sbGVnZVlFUyAoT1IgPSAyLjQ0KTogSOG7jWMgc2luaCBjw7Mga+G6vyBob+G6oWNoIGjhu41jIMSR4bqhaSBo4buNYyBjw7Mga2jhuqMgbsSDbmcgcsahaSB2w6BvIG5ow7NtIGjhu41jIGzhu7FjIHRo4bqlcCBoxqFuIGNhbyBoxqFuIGtob+G6o25nIDIuNDQgbOG6p24gc28gduG7m2kgaOG7jWMgc2luaCBraMO0bmcgY8OzIGvhur8gaG/huqFjaCwgxJFp4buBdSBuw6B5IGPDsyB0aOG7gyBwaOG6o24gw6FuaCBz4buxIGvhu7MgduG7jW5nIGNhbyB2w6Agw6FwIGzhu7FjIGThuqtuIMSR4bq/biBr4bq/dCBxdeG6oyBoaeG7h24gdOG6oWkgdGjhuqVwLg0KDQotCWludGVyZXN0TGVzcyBJbnRlcmVzdGVkIChPUiA9IDAuNjQpOiBN4bupYyDEkeG7mSBxdWFuIHTDom0gdGjhuqVwIGzDoG0gZ2nhuqNtIG9kZHMgcsahaSB2w6BvIG5ow7NtIGjhu41jIGzhu7FjIHRo4bqlcCBoxqFuIGtob+G6o25nICAzNiUgKDEg4oiSIDAuNjQpLCBuZ2jEqWEgbMOgIGjhu41jIHNpbmggcXVhbiB0w6JtIMOtdCBjw7MgeHUgaMaw4bubbmcgxJHhuqF0IGvhur90IHF14bqjIGNhbyBoxqFuLg0KDQotCXBhcmVudF9zYWxhcnlhdmVyYWdlIChPUiA9IDAuNDUpOiBI4buNYyBzaW5oIHThu6sgZ2lhIMSRw6xuaCBjw7MgdGh1IG5o4bqtcCB0cnVuZyBiw6xuaCBjw7Mgb2RkcyByxqFpIHbDoG8gbeG7qWMgaOG7jWMgdOG6rXAgdGjhuqVwIGdp4bqjbSBraG/huqNuZyAgNTUlIHNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dSAodGh1IG5o4bqtcCBjaMawYSByw7UpLCBwaOG6o24gw6FuaCDhuqNuaCBoxrDhu59uZyB0w61jaCBj4buxYyB04burIMSRaeG7gXUga2nhu4duIGtpbmggdOG6vy4NCg0KLQlDw6FjIHnhur91IHThu5EgbmjGsCBob3VzZV9hcmVhU21hbGwgKE9SID0gMC41MykgaGF5IGludGVyZXN0VW5jZXJ0YWluIChPUiA9IDAuNjUpIGPFqW5nIGNobyB0aOG6pXkgeHUgaMaw4bubbmcgdMawxqFuZyB04buxLCBsw6BtIHTEg25nIGto4bqjIG7Eg25nIMSR4bqhdCBr4bq/dCBxdeG6oyB04buRdCBoxqFuDQoNCg0KYGBge3J9DQojIEtp4buDbSB0cmEgZ2nhuqMgxJHhu4tuaCBQcm9wb3J0aW9uYWwgT2Rkcw0KbGlicmFyeShicmFudCkNCmJyYW50X3Rlc3RfcmVzdWx0IDwtIGJyYW50KGF2X3BvbHJfbW9kZWwpDQpwcmludChicmFudF90ZXN0X3Jlc3VsdCkNCmBgYA0KDQoNCg0KKioqTmjhuq1uIHjDqXQ6KioqDQoNClRhIGPDsyBnaeG6oyB0aHV54bq/dCBjaG8ga2nhu4NtIMSR4buLbmggUHJvcG9ydGlvbmFsIE9kZHM6DQoNCiQkDQpcYmVnaW57Y2FzZXN9DQpIXzBcITogJiBcdGV4dHtNw7QgaMOsbmggdGhv4bqjIG3Do24gZ2nhuqMgxJHhu4tuaCBwcm9wb3J0aW9uYWwgb2Rkc30gXFwNCkhfMVwhOiAmIFx0ZXh0e03DtCBow6xuaCBraMO0bmcgdGhv4bqjIG3Do24gZ2nhuqMgxJHhu4tuaCBwcm9wb3J0aW9uYWwgb2Rkc30NClxlbmR7Y2FzZXN9DQpcXQ0KJCQNCk9tbmlidXMgdGVzdDogcC12YWx1ZSDiiYggMCDihpIgZ2nhuqMgxJHhu4tuaCBwcm9wb3J0aW9uYWwgb2RkcyBraMO0bmcgdGjhu49hIG3Do24gY2hvIHRvw6BuIG3DtCBow6xuaCBWw6wgduG6rXkgaOG7hyBz4buRIGtow6FjIG5oYXUgdOG6oWkgdOG7q25nIG5nxrDhu6FuZy4gDQoNClbDrCB24bqteSBjw7MgdGjhu4Mga+G6v3QgbHXhuq1uIG3DtCBow6xuaCBvcmRpbmFsIGxvZ2l0IGtow7RuZyBwaMO5IGjhu6NwIHbhu5tpIGLhu5kgZOG7ryBsaeG7h3UNCg0KDQpgYGB7cn0NCnByZWRfYXZwb2xyIDwtIHByZWRpY3QoYXZfcG9scl9tb2RlbCwgbmV3ZGF0YSA9IGRhdGEsIHR5cGUgPSAiY2xhc3MiKQ0KDQpjb25mdXNpb25fbWF0cml4X3BvbHIgPC0gdGFibGUoUHJlZGljdGVkID0gcHJlZF9hdnBvbHIsIEFjdHVhbCA9IGRhdGEkYXZlcmFnZV9ncmFkZXMpDQoNCnByaW50KGNvbmZ1c2lvbl9tYXRyaXhfcG9scikNCmFjY3VyYWN5X3BvbHIgPC0gc3VtKGRpYWcoY29uZnVzaW9uX21hdHJpeF9wb2xyKSkvIHN1bShjb25mdXNpb25fbWF0cml4X3BvbHIpDQpjYXQoIk92ZXJhbGwgQWNjdXJhY3k6Iiwgcm91bmQoYWNjdXJhY3lfcG9sciw1KSwgIlxuIikNCmBgYA0KDQoqKipOaOG6rW4geMOpdDoqKioNCg0KLSBE4buxYSB2w6BvIGvhur90IHF14bqjIG1hIHRy4bqtbiBuaOG6p20gbOG6q24gY+G7p2EgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyB0aOG7qSBi4bqtYyAoUC1PTFIpLCB0YSB0aOG6pXkgbcO0IGjDrG5oIGThu7EgxJFvw6FuIGtow6EgdOG7kXQgbmjGsG5nIHbhuqtuIGPDsm4gbmjhu69uZyBo4bqhbiBjaOG6vyBuaOG6pXQgxJHhu4tuaC4gTcO0IGjDrG5oIGThu7EgxJFvw6FuIMSRw7puZyAzMjMgaOG7jWMgc2luaCBjw7MgaOG7jWMgbOG7sWMgRmFpciB2w6AgMjgwIGjhu41jIHNpbmggY8OzIGjhu41jIGzhu7FjIEdvb2QsIHRyb25nIGtoaSBob8OgbiB0b8OgbiBraMO0bmcgZOG7sSDEkW/DoW4gxJHGsOG7o2MgaOG7jWMgc2luaCBuw6BvIGPDsyBo4buNYyBs4buxYyBFeGNlbGxlbnQuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG3DtCBow6xuaCBjw7MgeHUgaMaw4bubbmcgdGhpw6puIGzhu4djaCB24buBIGPDoWMgbeG7qWMgaOG7jWMgbOG7sWMgdHJ1bmcgYsOsbmgsIHbDoCBn4bq3cCBraMOzIGtoxINuIGtoaSBuaOG6rW4gZGnhu4duIGNow61uaCB4w6FjIG5o4buvbmcgaOG7jWMgc2luaCBjw7MgdGjDoG5oIHTDrWNoIGjhu41jIHThuq1wIHh14bqldCBz4bqvYy4NCg0KLSDEkOG7mSBjaMOtbmggeMOhYyB04buVbmcgdGjhu4MgKE92ZXJhbGwgQWNjdXJhY3kpIGPhu6dhIG3DtCBow6xuaCBsw6Aga2hv4bqjbmcgNjAuMyUsIHBo4bqjbiDDoW5oIG3hu6ljIMSR4buZIGThu7EgxJFvw6FuIMSRw7puZyBj4bunYSBtw7QgaMOsbmggdHLDqm4gdG/DoG4gYuG7mSB04bqtcCBk4buvIGxp4buHdS4gVHV5IMSRw6J5IGzDoCBt4buZdCBt4bupYyBjaMOtbmggeMOhYyB0xrDGoW5nIMSR4buRaSwgbmjGsG5nIHZp4buHYyBwaMOibiBsb+G6oWkgc2FpIG5oaeG7gXUgaOG7jWMgc2luaCBHb29kIHRow6BuaCBGYWlyICgxNjMgdHLGsOG7nW5nIGjhu6NwKSwgY8WpbmcgbmjGsCB2aeG7h2MgZOG7sSDEkW/DoW4gc2FpIGdp4buvYSBGYWlyIHbDoCBHb29kIG7Ds2kgY2h1bmcsIGNobyB0aOG6pXkgbcO0IGjDrG5oIGNoxrBhIHRo4buxYyBz4buxIG7huq9tIGLhuq90IMSR4bqneSDEkeG7pyBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgY8OhYyBt4bupYyBo4buNYyBs4buxYy4gTeG7mXQgbmd1ecOqbiBuaMOibiBjw7MgdGjhu4MgbMOgIGRvIGPDoWMgxJHhurdjIMSRaeG7g20gxJHhuqd1IHbDoG8gKG5oxrAgdGh1IG5o4bqtcCBwaOG7pSBodXluaCwgbsahaSBjxrAgdHLDuiwgbeG7qWMgxJHhu5kgaOG7qW5nIHRow7ouLi4pIGNoxrBhIMSR4bunIG3huqFuaCBob+G6t2MgY2jGsGEgxJHGsOG7o2MgYmnhur9uIMSR4buVaSBwaMO5IGjhu6NwIMSR4buDIHBow6JuIGJp4buHdCByw7UgZ2nhu69hIGJhIG3hu6ljIGjhu41jIGzhu7FjLg0KDQoNCiMjICoqUGjhuqduIDg6TcO0IGjDrG5oIGjhu5NpIHF1eSBjaG8gZOG7ryBsaeG7h3UgxJHhur9tKioNCg0KVGhheSB2w6wgc+G7rSBk4bulbmcgYuG7mSBk4buvIGxp4buHdSBiYW4gxJHhuqd1LCB0w6FjIGdp4bqjIGzhu7FhIGNo4buNbiBi4buZIGThu68gbGnhu4d1IHF1aW5lIHThu6sgZ8OzaSBNQVNTIHRyb25nIFIgbmjhurFtIHBo4bulYyB24bulIHZp4buHYyB0w6xtIGhp4buDdSBtw7QgaMOsbmggaOG7k2kgcXV5IGNobyBk4buvIGxp4buHdSDEkeG6v20uIEThu68gbGnhu4d1IG7DoHkgZ2hpIGzhuqFpIHPhu5EgbmfDoHkgduG6r25nIG3hurd0IChEYXlzKSBj4bunYSBo4buNYyBzaW5oIHThuqFpIG3hu5l0IHRyxrDhu51uZyBo4buNYyDhu58gw5pjLCBjw7luZyB24bubaSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIG5oxrAgZ2nhu5tpIHTDrW5oIChTZXgpLCBkw6JuIHThu5ljIChFdGgpLCBt4bupYyDEkeG7mSBo4buNYyB04bqtcCAoTGVhcm4pLCB2w6AgbsSDbSBo4buNYyAoQWdlKS4gxJDDonkgbMOgIG3hu5l0IHbDrSBk4bulIMSRaeG7g24gaMOsbmggY+G7p2EgZOG7ryBsaeG7h3UgxJHhur9tIHLhu51pIHLhuqFjLCB0cm9uZyDEkcOzIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBz4buRIG5ndXnDqm4ga2jDtG5nIMOibS4NCg0KVmnhu4djIHPhu60gZOG7pW5nIGLhu5kgZOG7ryBsaeG7h3UgcXVpbmUgY2hvIHBow6lwIHTDoWMgZ2nhuqMgw6FwIGThu6VuZyBtw7QgaMOsbmggaOG7k2kgcXV5IFBvaXNzb24g4oCTIG3hu5l0IG3DtCBow6xuaCDEkcaw4bujYyB0aGnhur90IGvhur8gxJHhurdjIGJp4buHdCDEkeG7gyB44butIGzDvSBjw6FjIGJp4bq/biBwaOG7pSB0aHXhu5ljIGThuqFuZyDEkeG6v20uIE3DtCBow6xuaCBuw6B5IGdpw7pwIHjDoWMgxJHhu4tuaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIHPhu5EgbmfDoHkgbmdo4buJIGjhu41jIHbDoCBjw6FjIMSR4bq3YyDEkWnhu4NtIGPDoSBuaMOibiBj4bunYSBo4buNYyBzaW5oLiANCg0KYGBge3J9DQpsaWJyYXJ5KE1BU1MpDQpkYXRhKHF1aW5lKQ0KDQpoaXN0KHF1aW5lJERheXMsDQogICAgIGJyZWFrcyA9IDQwLA0KICAgICBjb2wgPSAic3RlZWxibHVlIiwNCiAgICAgYm9yZGVyID0gIndoaXRlIiwNCiAgICAgbWFpbiA9ICJQaMOibiBwaOG7kWkgc+G7kSBuZ8OgeSBuZ2jhu4kgaOG7jWMiLA0KICAgICB4bGFiID0gIlPhu5EgbmfDoHkgbmdo4buJIiwNCiAgICAgeWxhYiA9ICJU4bqnbiBzdeG6pXQiKQ0KDQoNCmBgYA0KDQoqKipOaOG6rW4geMOpdDoqKioNCg0KQmnhu4N1IMSR4buTIGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIGjhu41jIHNpbmggbmdo4buJIGjhu41jIGTGsOG7m2kgMTAgbmfDoHkgdHJvbmcgbsSDbSwgdHJvbmcgxJHDsyBz4buRIGzGsOG7o25nIGjhu41jIHNpbmggbmdo4buJIHThu6sgMSDEkeG6v24gNSBuZ8OgeSBjaGnhur9tIHThuqduIHN14bqldCBjYW8gbmjhuqV0ICh0csOqbiAyNSBo4buNYyBzaW5oIG5naOG7iSAyIG5nw6B5KS4gVOG6p24gc3XhuqV0IG5naOG7iSBo4buNYyBnaeG6o20gZOG6p24ga2hpIHPhu5EgbmfDoHkgbmdo4buJIHTEg25nIGzDqm4uDQoNCg0KROG7ryBsaeG7h3UgdGjhu4MgaGnhu4duIHBow6JuIHBo4buRaSAqKmzhu4djaCBwaOG6o2kgcsO1IHLhu4d0KiosIHbhu5tpIMSRdcO0aSBwaMOibiBwaOG7kWkga8OpbyBkw6BpIHbhu4EgcGjDrWEgc+G7kSBuZ8OgeSBuZ2jhu4kgY2FvIGjGoW4uIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGPDsyBt4buZdCBz4buRIGjhu41jIHNpbmggbmdo4buJIGjhu41jIHLhuqV0IG5oaeG7gXUgbmfDoHkgKHRyw6puIDYwIG5nw6B5KSwgdHV5IG5oacOqbiDEkcOzIGNo4buJIGzDoCBz4buRIMOtdCBjw6EgYmnhu4d0Lg0KUGjDom4gcGjhu5FpIG5oxrAgduG6rXkgY8OzIHRo4buDIHBo4bqjbiDDoW5oIHLhurFuZyBo4bqndSBo4bq/dCBo4buNYyBzaW5oIGPDsyB0w6xuaCB0cuG6oW5nIHPhu6ljIGto4buPZSB2w6AgxJFp4buBdSBraeG7h24gaOG7jWMgdOG6rXAg4buVbiDEkeG7i25oLCB0cm9uZyBraGkgbeG7mXQgbmjDs20gbmjhu48gY8OzIHRo4buDIGfhurdwIHbhuqVuIMSR4buBIG5naGnDqm0gdHLhu41uZyAoYuG7h25oIHThuq10IGTDoGkgbmfDoHksIGhvw6BuIGPhuqNuaCDEkeG6t2MgYmnhu4d0KS4gxJDDonkgbMOgIGThuqV1IGhp4buHdSBjaG8gdGjhuqV5IGPDsyB0aOG7gyBj4bqnbiBwaMOibiB0w61jaCBzw6J1IGjGoW4gY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biB0w6xuaCB0cuG6oW5nIG5naOG7iSBo4buNYy4NCg0KDQoNCmBgYHtyfQ0KIyBYw6J5IGThu7FuZyB2w6Aga2nhu4NtIHRyYSBtw7QgaMOsbmggUG9pc3Nvbg0KDQpwb2lzc29uX21vZGVsIDwtICBnbG0oRGF5cyB+IEV0aCArIFNleCArIEFnZSArIExybiwgZmFtaWx5ID0gcG9pc3NvbiwgZGF0YSA9IHF1aW5lKQ0Kc3VtbWFyeShwb2lzc29uX21vZGVsKQ0KDQpgYGANCg0KYGBge3J9DQojIEtp4buDbSB0cmEgcXXDoSBwaMOibiB0w6FuDQpsaWJyYXJ5KEFFUikNCmRpc3BlcnNpb250ZXN0KHBvaXNzb25fbW9kZWwpDQpgYGANCg0KKioqTmjhuq1uIHjDqXQ6KioqDQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL0RFTEwvUGljdHVyZXMvU2NyZWVuc2hvdHMvU2NyZWVuc2hvdCAyMDI1LTA3LTI4IDAxMDIwNy5wbmciKQ0KYGBgDQoNCkvhur90IHF14bqjIGjhu5NpIHF1eSBjaG8gdGjhuqV5IHBo4bqnbiBs4bubbiBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIMSR4buBdSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIOG7nyBt4bupYyAxJToNCg0KLQlI4buHIHPhu5EgY2jhurduIChJbnRlcmNlcHQgPSAyLjcxNSkgY2hvIGJp4bq/dCBsb2cgdHJ1bmcgYsOsbmggc+G7kSBuZ8OgeSBuZ2jhu4kgY+G7p2EgbmjDs20gaOG7jWMgc2luaCB0aGFtIGNoaeG6v3UgKEV0aCA9IEEsIFNleCA9IEYsIEFnZSA9IEYwLCBMcm4gPSBBTCkgbMOgIGtob+G6o25nIDIuNzE1LiBTdXkgcmEsIHRydW5nIGLDrG5oIG5ow7NtIG7DoHkgbmdo4buJIGtob+G6o25nIGV4cCgyLjcxNSkg4omIIDE1LjEgbmfDoHkuDQoNCi0JQmnhur9uIEV0aE4gY8OzIGjhu4cgc+G7kSDDom0gxJHDoW5nIGvhu4MgKC0wLjUzMzYsIHAgPCAwLjAwMSksIGNobyB0aOG6pXkgaOG7jWMgc2luaCBkw6JuIHThu5ljIE4gbmdo4buJIGjhu41jIMOtdCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIGTDom4gdOG7mWMgQS4NCg0KLQlTZXhNIGTGsMahbmcgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKDAuMTYxNiwgcCA9IDAuMDAwMSksIGNobyB0aOG6pXkgaOG7jWMgc2luaCBuYW0gY8OzIHh1IGjGsOG7m25nIG5naOG7iSBo4buNYyBuaGnhu4F1IGjGoW4gbuG7ry4NCg0KLQlDw6FjIG5ow7NtIHR14buVaSAoQWdlRjEsIEFnZUYyLCBBZ2VGMykgY8WpbmcgxJHhu4F1IGPDsyDhuqNuaCBoxrDhu59uZyByw7UgcuG7h3QsIMSR4bq3YyBiaeG7h3QgbMOgIG5ow7NtIEYzIHbhu5tpIGjhu4cgc+G7kSAwLjQyOCAocCA8IDAuMDAxKS4NCg0KLQlI4buNYyBzaW5oIGPDsyBt4bupYyDEkeG7mSBo4buNYyB04bqtcCAiU0wiIG5naOG7iSBo4buNYyBuaGnhu4F1IGjGoW4gbmjDs20gIkFMIiwgduG7m2kgaOG7hyBz4buRIGTGsMahbmcgdsOgIGPDsyDDvSBuZ2jEqWEgY2FvIChMcm5TTCA9IDAuMzQ4OSwgcCA8IDAuMDAxKS4NCg0KVHV5IG5oacOqbiwgUmVzaWR1YWwgRGV2aWFuY2UgPSAxNjk2LjcgduG7m2kgMTM5IGLhuq1jIHThu7EgZG8sIGNobyB0aOG6pXkgdOG7tyBs4buHIGRldmlhbmNlIHRyw6puIGRmIGtob+G6o25nIDEyLjIsIGzhu5tuIGjGoW4gMSBy4bqldCBuaGnhu4F1IOKAlCDEkcOieSBsw6AgZOG6pXUgaGnhu4d1IHLDtSByw6BuZyBj4bunYSBoaeG7h24gdMaw4bujbmcgcXXDoSBwaMOibiB0w6FuIChvdmVyZGlzcGVyc2lvbikuDQoNCsSQ4buDIGtp4buDbSDEkeG7i25oIGNow61uaCB0aOG7qWMsIHTDoWMgZ2nhuqMgc+G7rSBk4bulbmcgaMOgbSBkaXNwZXJzaW9udGVzdCgpIHThu6sgZ8OzaSBBRVIuIEvhur90IHF14bqjIGtp4buDbSDEkeG7i25oOg0KDQotCUdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogeiA9IDUuNDY5LCB24bubaSBwLXZhbHVlID0gMi4yNjNlLTA4LCBj4buxYyBr4buzIG5o4buPLg0KDQotCcav4bubYyBsxrDhu6NuZyBo4buHIHPhu5EgcGjDom4gdMOhbiA9IDEyLjUzLCBjaG8gdGjhuqV5IHBoxrDGoW5nIHNhaSBs4bubbiBoxqFuIG5oaeG7gXUgc28gduG7m2kgdHJ1bmcgYsOsbmguDQoNClbhu5tpIHAtdmFsdWUgbmjhu48gbmjGsCB24bqteSwgY8OzIHRo4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBraMO0bmcgKEjigoA6IGtow7RuZyBjw7MgcXXDoSBwaMOibiB0w6FuKSB2w6Aga+G6v3QgbHXhuq1uIHLhurFuZyBk4buvIGxp4buHdSBjw7MgaGnhu4duIHTGsOG7o25nIHF1w6EgcGjDom4gdMOhbiBt4bqhbmguIERvIMSRw7MsIGdp4bqjIMSR4buLbmggY8ahIGLhuqNuIGPhu6dhIG3DtCBow6xuaCBQb2lzc29uIGtow7RuZyDEkcaw4bujYyB0aOG7j2EgbcOjbiwgdsOsIHbhuq15IHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oIMaw4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggaOG7k2kgcXV5IMOibSBuaOG7iyBwaMOibiAoTmVnYXRpdmUgQmlub21pYWwgcmVncmVzc2lvbikuDQoNCg0KYGBge3J9DQojIFjDonkgZOG7sW5nIG3DtCBow6xuaCBOZWdhdGl2ZSBCaW5vbWlhbA0KbmJfbW9kZWwgPC0gZ2xtLm5iKERheXMgfiBFdGggKyBTZXggKyBBZ2UgKyBMcm4sIGRhdGEgPSBxdWluZSkNCnN1bW1hcnkobmJfbW9kZWwpDQpgYGANCg0KKioqTmjhuq1uIHjDqXQ6KioqDQoNClRhIGPDsyBow6BtIGjhu5NpIHF1eToNCg0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiQzovVXNlcnMvREVMTC9QaWN0dXJlcy9TY3JlZW5zaG90cy9TY3JlZW5zaG90IDIwMjUtMDctMjggMDEwNDU1LnBuZyIpDQpgYGANCkRvIG3DtCBow6xuaCBQb2lzc29uIHRyxrDhu5tjIMSRw7MgYuG7iyBxdcOhIHBow6JuIHTDoW4sIHTDoWMgZ2nhuqMgxJHDoyBz4butIGThu6VuZyBtw7QgaMOsbmggTmVnYXRpdmUgQmlub21pYWwgKE5CKSDEkeG7gyDEkWnhu4F1IGNo4buJbmggaGnhu4duIHTGsOG7o25nIG7DoHkuIEvhur90IHF14bqjIG3DtCBow6xuaCDEkcaw4bujYyB0aOG7gyBoaeG7h24gbmjGsCBzYXU6DQoNCi0JQ8OhYyBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nIGPDsyB4dSBoxrDhu5tuZyB0xrDGoW5nIHThu7EgbmjGsCBtw7QgaMOsbmggUG9pc3NvbiwgbmjGsG5nIMSR4buZIGzhu5tuIGPhu6dhIHNhaSBz4buRIGNodeG6qW4gKFN0ZC4gRXJyb3IpIHRyb25nIG3DtCBow6xuaCBOQiBjYW8gaMahbiDEkcOhbmcga+G7gywgcGjhuqNuIMOhbmggc+G7sSDEkWnhu4F1IGNo4buJbmggaOG7o3AgbMO9IGNobyBwaMawxqFuZyBzYWkgbOG7m24uDQoNCi0JVsOtIGThu6UsIGJp4bq/biBTZXhNIHRyb25nIG3DtCBow6xuaCBQb2lzc29uIGPDsyBwLXZhbHVlID0gMC4wMDAxIChjw7Mgw70gbmdoxKlhIHLhuqV0IGNhbyksIG5oxrBuZyB0cm9uZyBtw7QgaMOsbmggTkIsIHAtdmFsdWUgdMSDbmcgbMOqbiAwLjYwNyAoa2jDtG5nIGPDsm4gw70gbmdoxKlhIHRo4buRbmcga8OqKS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbcO0IGjDrG5oIFBvaXNzb24gxJHDoyDEkcOhbmggZ2nDoSBxdcOhIGNhbyBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBiaeG6v24gU2V4TSBkbyBi4buPIHF1YSB54bq/dSB04buRIHBow6JuIHTDoW4uDQoNCi0gVMawxqFuZyB04buxLCBjw6FjIGJp4bq/biBBZ2VGMSwgQWdlRjIsIEFnZUYzIHbDoCBMcm5TTCDEkeG7gXUga2jDtG5nIGPDsm4gY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB0cm9uZyBtw7QgaMOsbmggTkIsIGTDuSB0csaw4bubYyDEkcOzIGPDsyDDvSBuZ2jEqWEgdHJvbmcgbcO0IGjDrG5oIFBvaXNzb24uIMSQw6J5IGzDoCBi4bqxbmcgY2jhu6luZyByw7UgcsOgbmcgcuG6sW5nIG3DtCBow6xuaCBQb2lzc29uIMSRw6MgxJHGsGEgcmEga+G6v3QgbHXhuq1uIHNhaSBs4buHY2ggZG8ga2jDtG5nIHjhu60gbMO9IHThu5F0IHBow6JuIHTDoW4uDQoNClbhu4EgbeG6t3QgdGjhu5FuZyBrw6o6DQoNCi0JRGV2aWFuY2UgZ2nhuqNtIG3huqFuaCB04burIDE2OTYuNyAoUG9pc3NvbikgeHXhu5FuZyBjw7JuIDE2Ny45NSAoTkIpLCBjaG8gdGjhuqV5IG3DtCBow6xuaCBOQiBtw7QgdOG6oyBk4buvIGxp4buHdSB04buRdCBoxqFuIG5oaeG7gXUuDQoNCi0JQ2jhu4kgc+G7kSBBSUMgY8WpbmcgZ2nhuqNtIHLDtSBy4buHdCwgdOG7qyAyMjk5LjIgKFBvaXNzb24pIGPDsm4gMTEwOS4yIChOQiksIGNo4bupbmcgbWluaCBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIGNhbyBoxqFuLg0KDQotCVRoYW0gc+G7kSBUaGV0YSA9IDEuMjc1LCB24bubaSBzYWkgc+G7kSBjaHXhuqluIGzDoCAwLjE2MS4gR2nDoSB0cuG7iyBo4buvdSBo4bqhbiBj4bunYSBUaGV0YSB4w6FjIG5o4bqtbiByw7UgcsOgbmcgcuG6sW5nIGThu68gbGnhu4d1IGPDsyBoaeG7h24gdMaw4bujbmcgcGjDom4gdMOhbiDigJMgxJFp4buBdSBtw6AgbcO0IGjDrG5oIE5CIMSRw6Mga2jhuq9jIHBo4bulYyBoaeG7h3UgcXXhuqMuDQoNCg0KDQpgYGB7cn0NCiMgRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyBtw7QgaMOsbmggTkINCg0KcnJfbmIgPC0gZXhwKGNvZWYobmJfbW9kZWwpKQ0KDQpwcmludChycl9uYikNCmBgYA0KDQoqKipOaOG6rW4geMOpdDoqKioNCg0KKipEaeG7hW4gZ2nhuqNpIGJp4bq/biBFdGhOIChldGhuaWNpdHkpOioqIFThu4kgbOG7hyBleHAoLTAuNTY1KSDiiYggMC41NjYgY2hvIHRo4bqleSwga2hpIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpLCBuaOG7r25nIG5nxrDhu51pIHRodeG7mWMgbmjDs20gZMOibiB04buZYyB0aGnhu4N1IHPhu5EgKEV0aE4pIGPDsyBz4buRIGzGsOG7o25nIGLDoGkgbmdoacOqbiBj4bupdSBr4buzIHbhu41uZyBnaeG6o20ga2hv4bqjbmcgNDMuNCUgKHbDrCAxIOKIkiAwLjU2NiA9IDAuNDM0KSBzbyB24bubaSBuaMOzbSBkw6JuIHThu5ljIHRoYW0gY2hp4bq/dS4NCg0KKipEaeG7hW4gZ2nhuqNpIGJp4bq/biBTZXhNIChnaeG7m2kgdMOtbmggbmFtKToqKiBHacOhIHRy4buLIGV4cCgwLjA4Mikg4omIIDEuMDg2IGNobyB0aOG6pXkgbmjhu69uZyBuZ8aw4budaSBsw6AgbmFtIGPDsyBz4buRIGzGsOG7o25nIGLDoGkgYsOhbyBr4buzIHbhu41uZyBjYW8gaMahbiBraG/huqNuZyA4LjYlIHNvIHbhu5tpIG7hu68sIGdp4bqjIMSR4buLbmggY8OhYyB54bq/dSB04buRIGtow6FjIGdp4buvIG5ndXnDqm4uDQoNCioqRGnhu4VuIGdp4bqjaSB0aGVvIG5ow7NtIHR14buVaToqKiBOZ8aw4budaSB0cm9uZyBuaMOzbSB0deG7lWkgdHLhursgbmjhuqV0IChBZ2VGMSkgY8OzIGV4cCjiiJIwLjQ0OSkg4omIIDAuNjM5LCB04bupYyBsw6AgZ2nhuqNtIDM2LjElIHPhu5EgYsOgaSBiw6FvIHNvIHbhu5tpIG5ow7NtIHR14buVaSB0aGFtIGNoaeG6v3UuIFRyb25nIGtoaSDEkcOzLCBuaMOzbSB0deG7lWkgdHJ1bmcgbmnDqm4gKEFnZUYyKSBn4bqnbiBuaMawIGtow7RuZyBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgKHTEg25nIGtob+G6o25nIDklKSwgY8OybiBuaMOzbSBs4bubbiB0deG7lWkgbmjhuqV0IChBZ2VGMykgY8OzIGV4cCgwLjM1Nikg4omIIDEuNDI5LCBuZ2jEqWEgbMOgIHTEg25nIHThu5tpIDQyLjklIHPhu5EgYsOgaSBiw6FvIHNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dS4NCg0KIyAqKkNIxq/GoE5HIDM6IEvhur5UIExV4bqsTiBWw4AgS0nhur5OIE5HSOG7iioqDQoNCiMjICoqMy4xIEvhur90IGx14bqtbioqIA0KDQpOZ2hpw6puIGPhu6l1IG7DoHkgxJHDoyB0aeG6v24gaMOgbmggcGjDom4gdMOtY2ggY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBsb+G6oWkgaMOsbmggdHLGsOG7nW5nIGjhu41jIG3DoCBo4buNYyBzaW5oIMSRYW5nIHRoZW8gaOG7jWMgKEFjYWRlbWljIGhv4bq3YyBWb2NhdGlvbmFsKSwgc+G7rSBk4bulbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBjw7MgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIHR5cGVfc2Nob29sLiBE4buxYSB0csOqbiBi4buZIGThu68gbGnhu4d1IEdvLXRvLUNvbGxlZ2UsIGfhu5NtIDEuMDAwIHF1YW4gc8OhdCB24bubaSBjw6FjIGJp4bq/biBwaOG6o24gw6FuaCDEkeG6t2MgxJFp4buDbSBjw6EgbmjDom4sIGjhu41jIHThuq1wIHbDoCBnaWEgxJHDrG5oLCBuZ2hpw6puIGPhu6l1IMSRw6Mga2hhaSB0aMOhYyB0aeG7gW0gbsSDbmcgZOG7sSBiw6FvIGPhu6dhIG5oaeG7gXUgeeG6v3UgdOG7kSBuaMawIGdp4bubaSB0w61uaCwgbeG7qWMgxJHhu5kgaOG7qW5nIHRow7ogduG7m2kgdmnhu4djIGjhu41jLCBuxqFpIGPGsCB0csO6LCB0aHUgbmjhuq1wIGPhu6dhIGNoYSBt4bq5LCBkaeG7h24gdMOtY2ggbmjDoCDhu58sIMSRaeG7g20gdHJ1bmcgYsOsbmggaOG7jWMgdOG6rXAgdsOgIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBj4bunYSBwaOG7pSBodXluaC4NCg0KS+G6v3QgcXXhuqMgdOG7qyBtw7QgaMOsbmggaOG7k2kgcXV5IGNobyB0aOG6pXkgY8OhYyBiaeG6v24gbmjGsCBpbnRlcmVzdCwgcGFyZW50X3NhbGFyeSwgcmVzaWRlbmNlLCBhdmVyYWdlX2dyYWRlcyB2w6AgcGFyZW50X3dhc19pbl9jb2xsZWdlIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgaOG7jWMgc2luaCB0aGVvIGjhu41jIHRyxrDhu51uZyBo4buNYyB0aHXhuq10IChBY2FkZW1pYykgdGhheSB2w6wgaMaw4bubbmcgbmdoaeG7h3AgKFZvY2F0aW9uYWwpLiBD4bulIHRo4buDLCBo4buNYyBzaW5oIGPDsyDEkWnhu4NtIHPhu5EgdHJ1bmcgYsOsbmggY2FvLCDhu58gdGjDoG5oIHRo4buLLCBjaGEgbeG6uSBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGNhbyBob+G6t2MgbeG7qWMgdGh1IG5o4bqtcCBjYW8gdGjGsOG7nW5nIGPDsyB4dSBoxrDhu5tuZyBo4buNYyB0csaw4budbmcgaOG7jWMgdGh14bqtdC4gQsOqbiBj4bqhbmggxJHDsywgbeG7qWMgxJHhu5kgaOG7qW5nIHRow7ogduG7m2kgdmnhu4djIGjhu41jIGPFqW5nIGzDoCBt4buZdCBjaOG7iSBiw6FvIG3huqFuaCB24buBIGzhu7FhIGNo4buNbiBsb+G6oWkgaMOsbmggdHLGsOG7nW5nLg0KDQpUcm9uZyBxdcOhIHRyw6xuaCBraeG7g20gxJHhu4tuaCBjw6FjIG3DtCBow6xuaCwgbmdoacOqbiBj4bupdSBjxaluZyDEkcOjIHhlbSB4w6l0IGdp4bqjIMSR4buLbmggcHJvcG9ydGlvbmFsIG9kZHMgxJHhu5FpIHbhu5tpIG3DtCBow6xuaCBo4buTaSBxdXkgb3JkaW5hbCBsb2dpdC4gVHV5IG5oacOqbiwga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggT21uaWJ1cyBjaG8gdGjhuqV5IGdp4bqjIMSR4buLbmggbsOgeSBraMO0bmcgxJHGsOG7o2MgdGjhu49hIG3Do24sIGThuqtuIMSR4bq/biB2aeG7h2MgbcO0IGjDrG5oIG9yZGluYWwgbG9naXQga2jDtG5nIHBow7kgaOG7o3AgduG7m2kgYuG7mSBk4buvIGxp4buHdS4gRG8gxJHDsywgbmdoacOqbiBj4bupdSBz4butIGThu6VuZyBtw7QgaMOsbmggbG9naXN0aWMgbmjhu4sgcGjDom4gbMOgbSBtw7QgaMOsbmggY2jDrW5oIMSR4buDIMSRw6FuaCBnacOhIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCB2w6AgYmnhur9uIHBo4bulIHRodeG7mWMuDQoNCiMjICoqMy4yIEtp4bq/biBuZ2jhu4sqKg0KDQpE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1LCBuaMOzbSB0w6FjIGdp4bqjIMSR4buBIHh14bqldCBt4buZdCBz4buRIGtp4bq/biBuZ2jhu4sgbWFuZyB0w61uaCB0aOG7sWMgdGnhu4VuIG5oxrAgc2F1Og0KDQotCVTEg25nIGPGsOG7nW5nIGjhu5cgdHLhu6MgaOG7jWMgc2luaCB04burIHbDuW5nIG7DtG5nIHRow7RuOiBEbyBraHUgduG7sWMgY8awIHRyw7og4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIGxv4bqhaSB0csaw4budbmcgaOG7jWMgbcOgIGjhu41jIHNpbmggdGhlbyBo4buNYywgY+G6p24gY8OzIGNow61uaCBzw6FjaCBo4buXIHRy4bujIGjhu41jIHNpbmggbsO0bmcgdGjDtG4gdGnhur9wIGPhuq1uIHbhu5tpIGPDoWMgdHLGsOG7nW5nIGjhu41jIHRodeG6rXQsIHRow7RuZyBxdWEgaOG7jWMgYuG7lW5nLCB0cnV54buBbiB0aMO0bmcgxJHhu4tuaCBoxrDhu5tuZyBob+G6t2MgY+G6o2kgdGhp4buHbiDEkWnhu4F1IGtp4buHbiBjxqEgc+G7nyB24bqtdCBjaOG6pXQuDQoNCi0JS2h1eeG6v24ga2jDrWNoIHRpbmggdGjhuqduIGjhu41jIHThuq1wIHbDoCBj4bqjaSB0aGnhu4duIMSR4buZbmcgbOG7sWMgaOG7jWM6IE3hu6ljIMSR4buZIGjhu6luZyB0aMO6IHbhu5tpIHZp4buHYyBo4buNYyBjw7Mg4bqjbmggaMaw4bufbmcgbOG7m24gxJHhur9uIHZp4buHYyBjaOG7jW4gdHLGsOG7nW5nIGjhu41jIHRodeG6rXQuIERvIMSRw7MsIGPDoWMgbmjDoCBnacOhbyBk4bulYyBuw6puIGNow7ogdHLhu41uZyBwaMOhdCB0cmnhu4NuIMSR4buZbmcgbOG7sWMgaOG7jWMgdOG6rXAgY2hvIGjhu41jIHNpbmggdOG7qyBj4bqlcCBkxrDhu5tpIHRow7RuZyBxdWEgY8OhYyBob+G6oXQgxJHhu5luZyBoxrDhu5tuZyBuZ2hp4buHcCwgdMawIHbhuqVuIHTDom0gbMO9IHbDoCDEkeG7i25oIGjGsOG7m25nIGdpw6FvIGThu6VjIGPDoSBuaMOibiBow7NhLg0KDQotCUjhu5cgdHLhu6MgdMOgaSBjaMOtbmggY2hvIGjhu41jIHNpbmggY8OzIGhvw6BuIGPhuqNuaCBraMOzIGtoxINuOiBOaOG7r25nIGjhu41jIHNpbmggxJHhur9uIHThu6sgZ2lhIMSRw6xuaCBjw7MgdGh1IG5o4bqtcCB0aOG6pXAgY8OzIHh1IGjGsOG7m25nIGjhu41jIHRyxrDhu51uZyBoxrDhu5tuZyBuZ2hp4buHcC4gxJDhu4MgxJHhuqNtIGLhuqNvIGPGoSBo4buZaSB0aeG6v3AgY+G6rW4gZ2nDoW8gZOG7pWMgY2jhuqV0IGzGsOG7o25nIGNhbyBjaG8gdOG6pXQgY+G6oyBo4buNYyBzaW5oLCBj4bqnbiBjw7MgY2jDrW5oIHPDoWNoIGjhu5cgdHLhu6MgaOG7jWMgcGjDrSwgaOG7jWMgYuG7lW5nIGhv4bq3YyB0cuG7oyBj4bqlcCBo4buNYyB04bqtcC4NCg0KLQnEkMOhbmggZ2nDoSBs4bqhaSB2YWkgdHLDsiBj4bunYSBnacOhbyBk4bulYyBoxrDhu5tuZyBuZ2hp4buHcDogRMO5IGjhu41jIHNpbmggaOG7jWMgdHLGsOG7nW5nIGjGsOG7m25nIG5naGnhu4dwIHRoxrDhu51uZyDEkeG6v24gdOG7qyBuaMOzbSBjw7MgxJFp4buDbSB0cnVuZyBiw6xuaCB2w6AgdGh1IG5o4bqtcCB0aOG6pXAgaMahbiwgY+G6p24gY8OzIGNoaeG6v24gbMaw4bujYyBuw6JuZyBjYW8gY2jhuqV0IGzGsOG7o25nIGdpw6FvIGThu6VjIG5naOG7gSwgxJHhuqNtIGLhuqNvIGjhu41jIHNpbmggdGhlbyBo4buNYyB24bqrbiBjw7MgY8ahIGjhu5lpIHZp4buHYyBsw6BtIHThu5F0IHbDoCBs4buZIHRyw6xuaCBo4buNYyB04bqtcCBuw6JuZyBjYW8gc2F1IG7DoHkuDQoNCkN14buRaSBjw7luZywga+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSBjxaluZyBn4bujaSBt4bufIGjGsOG7m25nIHBow6F0IHRyaeG7g24gY8OhYyBjw7RuZyBj4bulIGThu7EgYsOhbyBo4buNYyBzaW5oIGPDsyBraOG6oyBuxINuZyB0aGVvIGjhu41jIGxv4bqhaSB0csaw4budbmcgbsOgbyBk4buxYSB0csOqbiBjw6FjIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYyB2w6AgaOG7jWMgdOG6rXAuIMSQw6J5IHPhur0gbMOgIGPDtG5nIGPhu6UgaOG7lyB0cuG7oyBoaeG7h3UgcXXhuqMgY2hvIGPDoWMgbmjDoCB0csaw4budbmcgdsOgIGNodXnDqm4gdmnDqm4gdMawIHbhuqVuIGjhu41jIMSRxrDhu51uZyB0cm9uZyB2aeG7h2MgeMOieSBk4buxbmcgbOG7mSB0csOsbmggaOG7jWMgdOG6rXAgcGjDuSBo4bujcCBjaG8gdOG7q25nIGPDoSBuaMOibi4NCg==