LỜI CAM ĐOAN

Tôi xin cam đoan rằng đề tài “Phân tích các yếu tố học thuật và kỹ năng ảnh hưởng đến cơ hội việc làm của sinh viên” là công trình nghiên cứu do chính tôi thực hiện. Các số liệu, kết quả phân tích và các nhận định trong đề tài là trung thực, có cơ sở khoa học, được thu thập và xử lý theo đúng quy trình nghiên cứu. Tôi khẳng định không sao chép, không vi phạm bản quyền của bất kỳ cá nhân hay tổ chức nào. Mọi trích dẫn trong đề tài đều được ghi rõ nguồn gốc. Tôi xin chịu hoàn toàn trách nhiệm về tính trung thực và nguyên bản của nội dung đề tài này.


LỜI CẢM ƠN

Xin chân thành cảm ơn sự tin tưởng và cơ hội được thực hiện bài phân tích “Phân tích các yếu tố học thuật và kỹ năng ảnh hưởng đến cơ hội việc làm của sinh viên”. Sự định hướng rõ ràng và ý tưởng phân tích sắc bén đã là kim chỉ nam quan trọng giúp hoàn thiện báo cáo này một cách khoa học và có giá trị thực tiễn. Đồng thời, xin gửi lời cảm ơn đến cộng đồng mã nguồn mở R và các tác giả của những thư viện đã được sử dụng, những công cụ đã tạo điều kiện thuận lợi để quá trình phân tích dữ liệu trở nên hiệu quả và sâu sắc hơn.


CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI

1.1 Tính cấp thiết của đề tài

Trong bối cảnh thị trường lao động ngày càng cạnh tranh, việc sinh viên sau khi tốt nghiệp tìm được một công việc phù hợp là một trong những mục tiêu quan trọng nhất của giáo dục đại học. Cơ hội việc làm không chỉ phản ánh chất lượng đào tạo của các trường mà còn là thước đo thành công ban đầu của mỗi cá nhân. Tuy nhiên, không phải mọi sinh viên đều có cơ hội việc làm như nhau. College Student Placement Factors Dataset là bộ dữ liệu thực tế thu thập từ 10000 sinh viên đại học về các yếu tố như năng lực học tập, kinh nghiệm thực tiễn qua thực tập, số lượng dự án đã hoàn thành, và đặc biệt là kỹ năng mềm như giao tiếp, đóng vai trò quyết định đến khả năng được tuyển dụng. Việc hiểu rõ mức độ ảnh hưởng của các yếu tố này sẽ cung cấp cơ sở khoa học giúp sinh viên định hướng phát triển bản thân và các cơ sở giáo dục tối ưu hóa chương trình đào tạo.

Trên thực tế, nhiều sinh viên vẫn tập trung quá nhiều vào thành tích học thuật trên giấy tờ mà chưa chú trọng đúng mức đến việc tích lũy kinh nghiệm thực tế hay trau dồi các kỹ năng cần thiết. Xuất phát từ những lý do trên, đề tài “Phân tích các yếu tố học thuật và kỹ năng ảnh hưởng đến cơ hội việc làm của sinh viên” được lựa chọn với kỳ vọng mang lại những phát hiện có giá trị, giúp sinh viên, nhà trường và cả nhà tuyển dụng có cái nhìn sâu sắc hơn về những yếu tố then chốt quyết định sự thành công trong tuyển dụng.

1.2 Mục tiêu và câu hỏi nghiên cứu

1.2.1 Mục tiêu nghiên cứu

Mục tiêu của đề tài là phân tích các yếu tố học thuật và kỹ năng ảnh hưởng đến quyết định tuyển dụng sinh viên. Cụ thể, nghiên cứu tập trung vào việc xác định mối quan hệ giữa các yếu tố như năng lực học tập (CGPA), kinh nghiệm thực tập (Internship_Experience), kỹ năng giao tiếp (Communication_Skills), và số lượng dự án đã hoàn thành (Projects_Completed) với cơ hội việc làm (Placement). Trên cơ sở đó, đề tài tiến hành đánh giá mức độ ảnh hưởng của từng yếu tố đến khả năng được tuyển dụng. Cuối cùng, từ những phát hiện thực nghiệm, nghiên cứu đề xuất một số khuyến nghị cụ thể dành cho sinh viên và các đơn vị đào tạo nhằm nâng cao khả năng cạnh tranh trên thị trường lao động.

1.2.2 Câu hỏi nghiên cứu

  • Các yếu tố học thuật và kỹ năng nào có mối liên hệ đáng kể với cơ hội việc làm của sinh viên?
  • Kinh nghiệm thực tập, năng lực học tập và kỹ năng giao tiếp ảnh hưởng như thế nào đến khả năng được tuyển dụng?
  • Nhóm sinh viên có đặc điểm nào (học lực giỏi, giao tiếp tốt, có kinh nghiệm thực tập,…) có xu hướng được tuyển dụng cao hơn so với các nhóm khác?

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

1.3.1 Đối tượng nghiên cứu

Đối tượng nghiên cứu của đề tài là cơ hội việc làm của sinh viên, cụ thể là quyết định có hoặc không được tuyển dụng, được đo lường thông qua biến định tính nhị phân Placement trong tập dữ liệu. Bên cạnh đó, đề tài xem xét các yếu tố học thuật và kỹ năng bao gồm CGPA, Internship_Experience, Communication_Skills, và Projects_Completed được giả định là các biến độc lập có khả năng ảnh hưởng đến cơ hội việc làm.

1.3.2 Phạm vi nghiên cứu

  • Về nội dung: Tập trung phân tích mối quan hệ giữa các đặc điểm học thuật, kỹ năng và kinh nghiệm thực tiễn với kết quả tuyển dụng, không đi sâu vào các yếu tố khác như danh tiếng của trường, ngành học, hay tình hình kinh tế vĩ mô.
  • Về không gian: Nghiên cứu sử dụng bộ dữ liệu College Student Placement Factors Dataset được thu thập từ trang kaggle.

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

Trong nghiên cứu này, phương pháp định lượng được sử dụng nhằm phân tích mối quan hệ giữa các yếu tố học thuật và kỹ năng (CGPA, Internship_Experience, Communication_Skills, Projects_Completed) với quyết định tuyển dụng (Placement).

  • Đầu tiên, dữ liệu được xử lý và trình bày thông qua thống kê mô tả đơn biến và phân tích bảng tần số để làm rõ đặc điểm tổng quan của mẫu nghiên cứu. Các biến định lượng liên tục được chuyển đổi thành biến định tính có thứ bậc để phù hợp với phương pháp phân tích.
  • Tiếp theo, kiểm định Chi-bình phương được áp dụng nhằm xác định mối liên hệ giữa từng biến độc lập và biến phụ thuộc (quyết định tuyển dụng).
  • Những biến có ý nghĩa thống kê sẽ được chọn đưa vào phân tích hồi quy nhị phân bằng bốn mô hình: (1) Hồi quy logistic, (2) Hồi quy probit, (3) Hồi quy cloglog, và (4) Mô hình xác suất tuyến tính (LPM).
  • Mỗi mô hình đều được triển khai theo hai bước: phân tích đơn biến và đa biến. Kết quả hồi quy được trình bày dưới dạng hệ số ước lượng, sai số chuẩn, giá trị p và độ tin cậy, qua đó đánh giá hướng và mức độ ảnh hưởng của từng biến độc lập đến xác suất được tuyển dụng.
  • Sau cùng, để so sánh hiệu quả giữa các mô hình, nghiên cứu sử dụng các tiêu chí đánh giá gồm chỉ số AIC (Akaike Information Criterion), đường cong ROC (Receiver Operating Characteristic) và ma trận nhầm lẫn.

1.5 Kết cấu của đề tài

Ngoài mục lục, danh mục chữ viết tắt, danh mục hình ảnh và bảng biểu, phụ lục cùng tài liệu tham khảo đề tài được chia thành ba chương chính:

Chương 1: Giới thiệu đề tài

Trình bày bối cảnh, lý do chọn đề tài, mục tiêu và câu hỏi nghiên cứu, đối tượng phạm vi nghiên cứu, phương pháp và kết cấu của đề tài.

Chương 2: Cơ sở lý thuyết và phương pháp nghiên cứu

Tổng hợp các khái niệm, lý thuyết liên quan đến các yếu tố ảnh hưởng đến cơ hội việc làm. Trình bày các phương pháp thống kê và mô hình định lượng được sử dụng trong phân tích.

Chương 3: Kết quả nghiên cứu

Phân tích dữ liệu thực nghiệm, trình bày kết quả từ các phương pháp thống kê và mô hình hồi quy, đánh giá mức độ ảnh hưởng của các yếu tố.

Chương 4: Kết luận

Kết luận và đề xuất một số khuyến nghị thực tiễn.

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP NGHIÊN CỨU

2.1 Lý thuyết về các yếu tố ảnh hưởng đến cơ hội việc làm

Cơ hội việc làm của sinh viên sau khi tốt nghiệp là một chủ đề phức hợp, chịu ảnh hưởng bởi nhiều yếu tố từ năng lực cá nhân đến điều kiện thị trường. Quyết định tuyển dụng của một doanh nghiệp không chỉ dựa trên kết quả học tập mà còn phụ thuộc vào kinh nghiệm thực tiễn và kỹ năng mềm của ứng viên.

Các đặc điểm học thuật và kỹ năng đóng vai trò quan trọng trong việc lý giải sự khác biệt về cơ hội việc làm giữa các sinh viên. Trong nghiên cứu này, các yếu tố được xem xét bao gồm:

  • Năng lực học tập (CGPA): Thể hiện qua điểm số, phản ánh nền tảng kiến thức và khả năng tiếp thu của sinh viên. Sinh viên có thành tích học tập tốt thường được nhà tuyển dụng ưu tiên.
  • Kinh nghiệm thực tập (Internship_Experience): Yếu tố thể hiện sự cọ xát với môi trường làm việc thực tế, giúp sinh viên tích lũy kinh nghiệm, kỹ năng chuyên môn và hiểu biết về ngành.
  • Kỹ năng giao tiếp (Communication_Skills): Một trong những kỹ năng mềm quan trọng nhất, ảnh hưởng trực tiếp đến khả năng trình bày ý tưởng, làm việc nhóm và tạo dựng mối quan hệ trong công việc.
  • Số dự án đã hoàn thành (Projects_Completed): Phản ánh khả năng áp dụng kiến thức vào giải quyết các vấn đề cụ thể, thể hiện sự chủ động và kinh nghiệm thực hành của sinh viên.

2.2 Mô hình hồi quy nhị phân

Mô hình hồi quy nhị phân là công cụ phổ biến được sử dụng để phân tích và dự báo xác suất xảy ra của một sự kiện nhị phân, trong đó biến phụ thuộc chỉ nhận giá trị 0 hoặc 1. Trong bối cảnh nghiên cứu này, biến phụ thuộc là cơ hội việc làm của sinh viên (1 = được tuyển dụng, 0 = không được tuyển dụng). Mục tiêu của các mô hình hồi quy nhị phân là ước lượng xác suất xảy ra sự kiện \(Y=1\) dựa trên các biến độc lập \(X_1, X_2, \dots, X_k\).

Dạng tổng quát của mô hình:

\[ P(Y = 1|X) = G(X\beta) \]

Trong đó:

  • \(G(.)\) là hàm liên kết (link function), xác định loại mô hình cụ thể
  • \(X\) là vector các biến độc lập (predictors)
  • \(\beta\) là vector hệ số hồi quy cần ước lượng

2.2.1 Mô hình Logistic (Logit)

Sử dụng hàm logistic:

\[ P(Y=1|X) = \frac{e^{X\beta}}{1 + e^{X\beta}} \]

Hàm logit giữ xác suất trong khoảng (0,1) và hệ số \(\beta\) được diễn giải thông qua log(Odds Ratio).

2.2.2 Mô hình Probit

Sử dụng hàm phân phối tích lũy chuẩn hóa:

\[ P(Y=1|X) = \Phi(X\beta) \]

Phù hợp trong các trường hợp dữ liệu giả định có phân phối chuẩn ở sai số.

2.2.3 Mô hình Complementary log-log (Cloglog)

Sử dụng hàm:

\[ P(Y=1|X) = 1 - e^{-e^{X\beta}} \]

Phù hợp khi xác suất xảy ra sự kiện gần bằng 0 hoặc gần bằng 1.

2.2.4 Mô hình xác suất tuyến tính (LMP)

Mô hình xác suất tuyến tính là một trường hợp đặc biệt của Mô hình Tuyến tính Tổng quát (Generalized Linear Model - GLM), trong đó hàm liên kết là hàm đồng nhất (identity link function). Công thức mô hình được biểu diễn như sau:

\[ P(Y = 1 \mid X) = X\beta \]

Trong đó:

  • \(Y\) là biến phản hồi nhị phân (giá trị 0 hoặc 1),
  • \(X\) là ma trận các biến độc lập,
  • \(\beta\) là vector các hệ số hồi quy.

Mô hình này cho phép diễn giải trực tiếp xác suất xảy ra sự kiện \(Y = 1\) như một hàm tuyến tính của các biến giải thích \(X\).

Ưu điểm của mô hình này là đơn giản, dễ ước lượng bằng phương pháp OLS và dễ diễn giải. Tuy nhiên, vì giá trị dự báo có thể nằm ngoài khoảng [0, 1], mô hình này thường không đảm bảo ý nghĩa xác suất. Điều này dẫn đến vi phạm giả định và độ chính xác thấp khi dự đoán hành vi nhị phân.

Trong GLM, mô hình xác suất tuyến tính vẫn được sử dụng như một bước tham chiếu ban đầu để so sánh với các mô hình logit, probit hoặc cloglog.

2.2.5 Phương pháp ước lượng: Maximum Likelihood Estimation (MLE)

Các mô hình nhị phân như logit, probit và cloglog đều được ước lượng bằng phương pháp ước lượng hợp lý tối đa (MLE). Đây là phương pháp tìm giá trị tham số \(\beta\) sao cho xác suất tạo ra dữ liệu quan sát là cao nhất. Trong GLMs, hàm hợp lý được xây dựng dựa trên phân phối nhị thức và tối ưu hóa bằng các thuật toán như Newton-Raphson.

Trong các mô hình hồi quy nhị phân thuộc họ GLM như logit, probit và cloglog, tham số \(\beta\) không được ước lượng bằng phương pháp bình phương tối thiểu như trong hồi quy tuyến tính cổ điển, mà thay vào đó sử dụng phương pháp ước lượng hợp lý tối đa (Maximum Likelihood Estimation - MLE).

Phương pháp MLE tìm tập giá trị của \(\beta\) sao cho hàm hợp lý (likelihood function) đạt cực đại – nghĩa là, khả năng tạo ra bộ dữ liệu quan sát từ mô hình là cao nhất. Hàm hợp lý trong trường hợp nhị phân dựa trên phân phối nhị thức:

\[ L(\beta) = \prod_{i=1}^{n} [P_i]^{y_i} [1 - P_i]^{1 - y_i}, \quad \text{trong đó } P_i = G(X_i\beta) \]

Để đơn giản hóa tính toán, ta lấy log của hàm hợp lý để có log-likelihood:

\[ \log L(\beta) = \sum_{i=1}^{n} \left[ y_i \log P_i + (1 - y_i) \log(1 - P_i) \right] \]

Giải bài toán tối đa hóa log-likelihood bằng các thuật toán số học như Newton-Raphson hoặc Fisher Scoring, ta thu được ước lượng \(\hat{\beta}\).

2.3 Relative Risk và Odds Ratio

Trong nghiên cứu xã hội, hai chỉ số phổ biến dùng để đo lường mối quan hệ giữa một đặc điểm và một kết quả là Relative Risk (RR)Odds Ratio (OR). Các chỉ số này giúp đánh giá mức độ khác biệt về khả năng xảy ra một sự kiện giữa các nhóm có hoặc không có một đặc điểm nhất định (ví dụ: có kinh nghiệm thực tập hoặc không).

2.3.1 Relative Risk (RR)

Relative Risk (RR) – hay còn gọi là nguy cơ tương đối – so sánh xác suất xảy ra sự kiện giữa hai nhóm:

\[ RR = \frac{P_1}{P_0} \]

Trong đó:

  • \(P_1\): Xác suất sinh viên có đặc điểm được tuyển dụng
  • \(P_0\): Xác suất sinh viên không có đặc điểm được tuyển dụng

Diễn giải:

  • RR = 1: Không có sự khác biệt giữa hai nhóm
  • RR > 1: Nhóm có đặc điểm có khả năng được tuyển dụng cao hơn
  • RR < 1: Nhóm có đặc điểm có khả năng được tuyển dụng thấp hơn

2.3.2 Odds Ratio (OR)

Odds Ratio (OR) đo lường tỷ lệ odds (khả năng xảy ra so với không xảy ra) giữa hai nhóm:

\[ OR = \frac{P_1 / (1 - P_1)}{P_0 / (1 - P_0)} = \frac{P_1 (1 - P_0)}{P_0 (1 - P_1)} \]

Trong mô hình hồi quy logistic, kết quả hồi quy chính là log(OR):

\[ \log(OR) = X\beta \]

Diễn giải:

  • OR = 1: Không có sự khác biệt giữa hai nhóm
  • OR > 1: Nhóm có đặc điểm có odds được tuyển dụng cao hơn
  • OR < 1: Nhóm có đặc điểm có odds được tuyển dụng thấp hơn

2.4 Dữ liệu nghiên cứu

2.4.1 Giới thiệu dữ liệu gốc và xử lý biến

# Đọc dữ liệu gốc
data_raw <- read.csv("C:/Users/PHAN THANH TRONG/Downloads/datamont2.csv")

# Xử lý và tạo biến mới theo yêu cầu
data <- data_raw |>
  mutate(
    # Tạo biến mới cho Communication_Skills theo 3 bậc
    Communication_Level = case_when(
      Communication_Skills < 5 ~ "Kém",
      Communication_Skills >= 5 & Communication_Skills <= 7 ~ "Trung bình",
      Communication_Skills >= 8 & Communication_Skills <= 10 ~ "Tốt"
    ),
# Tạo biến mới cho CGPA theo 4 bậc
    CGPA = case_when(
      Academic_Performance < 5 ~ "Yếu",
      Academic_Performance >= 5 & Academic_Performance < 6.5 ~ "Trung bình",
      Academic_Performance >= 6.5 & Academic_Performance < 8 ~ "Khá",
      Academic_Performance >= 8 & Academic_Performance <= 10 ~ "Giỏi"
    )  
    )

# Chuyển đổi các biến thành factor và sắp xếp thứ tự
data$CGPA <- factor(data$CGPA, levels = c("Yếu", "Trung bình", "Khá", "Giỏi"))
data$Communication_Level <- factor(data$Communication_Level, levels = c("Kém", "Trung bình", "Tốt"))
data$Internship_Experience <- as.factor(data$Internship_Experience)
data$Placement <- as.factor(data$Placement)

# Hiển thị cấu trúc của bộ dữ liệu sau khi xử lý
str(data[, c("CGPA", "Internship_Experience", "Communication_Level", "Projects_Completed", "Placement")])
## 'data.frame':    10000 obs. of  5 variables:
##  $ CGPA                 : Factor w/ 4 levels "Yếu","Trung bình",..: 4 4 4 2 3 3 2 3 4 1 ...
##  $ Internship_Experience: Factor w/ 2 levels "No","Yes": 1 1 1 2 1 1 1 1 1 1 ...
##  $ Communication_Level  : Factor w/ 3 levels "Kém","Trung bình",..: 3 3 1 2 3 3 3 1 3 3 ...
##  $ Projects_Completed   : int  4 0 1 1 2 0 2 2 5 1 ...
##  $ Placement            : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 2 2 1 1 ...
Tên biến Kiểu dữ liệu Mô tả nội dung
CGPA Factor Năng lực học tập được phân loại: “Yếu”, “Trung bình”, “Khá”, “Giỏi”.
Internship_Experience Factor Sinh viên có kinh nghiệm thực tập không? (Yes, No)
Communication_Level Factor Kỹ năng giao tiếp được phân loại: “Kém”, “Trung bình”, “Tốt”.
Projects_Completed Numeric Số lượng dự án đã hoàn thành.
Placement Factor Sinh viên có được tuyển dụng không? (Yes, No)

Nhận xét

Bộ dữ liệu sau khi xử lý gồm 5 biến và 10000 quan sát, được chia thành hai nhóm: biến định lượng và biến định tính.

  • Biến định lượng: Chỉ có một biến là Projects_Completed. Đây là biến rời rạc, đo lường số lượng dự án, có thể sử dụng để so sánh giá trị trung bình giữa các nhóm.
  • Các biến định tính: Bốn biến còn lại thuộc loại định tính. Biến phụ thuộc là Placement, và các biến độc lập là CGPA, Internship_Experience, Communication_Level. Các biến này mang thông tin dạng danh mục, phù hợp cho phân tích tần suất, kiểm định Chi-bình phương và các mô hình hồi quy nhị phân.

2.4.2 Dữ liệu và các biến sử dụng trong nghiên cứu

Dữ liệu được sử dụng trong nghiên cứu này tập trung vào các yếu tố có khả năng ảnh hưởng trực tiếp đến kết quả tuyển dụng của sinh viên.

Biến phụ thuộc chính trong mô hình là:

  • Placement: Thể hiện sinh viên có được tuyển dụng hay không, được mã hóa lại dưới dạng nhị phân:
    • 1: nếu sinh viên được tuyển dụng (Placement = “Yes”)
    • 0: nếu sinh viên không được tuyển dụng (Placement = “No”)

Các biến độc lập được chọn lọc bao gồm:

  • CGPA: Năng lực học tập (Yếu, Trung bình, Khá, Giỏi)
  • Internship_Experience: Kinh nghiệm thực tập (Yes/No)
  • Communication_Level: Kỹ năng giao tiếp (Kém, Trung bình, Tốt)
  • Projects_Completed: Số lượng dự án đã hoàn thành
# Tạo bộ dữ liệu chỉ chứa các biến cần phân tích
data1 <- data %>%
  dplyr::select(CGPA, Internship_Experience, Communication_Level, Projects_Completed, Placement)

# Đổi tên cột cho dễ đọc
colnames(data1) <- c("HocLuc", "ThucTap", "GiaoTiep", "SoDuAn", "TuyenDung")

# Xem trước dữ liệu mới
str(data1)
## 'data.frame':    10000 obs. of  5 variables:
##  $ HocLuc   : Factor w/ 4 levels "Yếu","Trung bình",..: 4 4 4 2 3 3 2 3 4 1 ...
##  $ ThucTap  : Factor w/ 2 levels "No","Yes": 1 1 1 2 1 1 1 1 1 1 ...
##  $ GiaoTiep : Factor w/ 3 levels "Kém","Trung bình",..: 3 3 1 2 3 3 3 1 3 3 ...
##  $ SoDuAn   : int  4 0 1 1 2 0 2 2 5 1 ...
##  $ TuyenDung: Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 2 2 1 1 ...
head(data1)
##       HocLuc ThucTap   GiaoTiep SoDuAn TuyenDung
## 1       Giỏi      No        Tốt      4        No
## 2       Giỏi      No        Tốt      0        No
## 3       Giỏi      No        Kém      1        No
## 4 Trung bình     Yes Trung bình      1        No
## 5        Khá      No        Tốt      2        No
## 6        Khá      No        Tốt      0        No

2.5 Quy trình nghiên cứu

Quy trình nghiên cứu được xây dựng theo các bước logic và tuần tự nhằm đảm bảo tính hệ thống, độ tin cậy và cơ sở khoa học trong phân tích dữ liệu.

grViz("
digraph research_flow {
  graph [rankdir = TB]
  node [shape = rectangle, style = filled, color = green, fontname = 'Times New Roman', fontsize = 16]

  A [label = 'Bước 1: Tải & xử lý dữ liệu']
  B [label = 'Bước 2: Thống kê mô tả\n(Phân tích đơn biến)']
  C [label = 'Bước 3: Kiểm định Chi-square\n(Giữa biến phụ thuộc và các biến độc lập định tính)']
  D [label = 'Bước 4: Phân tích cặp biến\n(Bảng tần số, biểu đồ, RR & OR)']
  E [label = 'Bước 5: Ước lượng mô hình nhị phân\n(Logit, Probit, Cloglog, LMP)']
  F [label = 'Bước 6: So sánh mô hình\n(AIC, ROC, Ma trận nhầm lẫn)']
  G [label = 'Bước 7: Đề xuất & Khuyến nghị\n(Dựa trên kết quả mô hình)']

  A -> B -> C -> D -> E -> F -> G
}
")

CHƯƠNG 3: KẾT QUẢ NGHIÊN CỨU

3.1 Thống kê mô tả biến nghiên cứu

3.1.1 Thống kê mô tả biến phụ thuộc

Biến cơ hội việc làm (TuyenDung)

Lập bảng tần số và tần suất

table(data1$TuyenDung)
## 
##   No  Yes 
## 8341 1659
prop.table(table(data1$TuyenDung))
## 
##     No    Yes 
## 0.8341 0.1659

Vẽ biểu đồ tròn

# Tạo bảng tần suất
placement_freq <- table(data1$TuyenDung)
placement_prop <- prop.table(placement_freq)

# Chuyển thành data frame để dùng ggplot2
placement_df <- as.data.frame(placement_prop)
colnames(placement_df) <- c("TuyenDung", "Proportion")

# Tính phần trăm để hiển thị nhãn
placement_df$Percent <- paste0(round(placement_df$Proportion * 100, 1), "%")

# Vẽ biểu đồ tròn bằng ggplot2
ggplot(placement_df, aes(x = "", y = Proportion, fill = TuyenDung)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5)) +
  labs(title = "Tỷ lệ Tuyển dụng", x = NULL, y = NULL) +
  theme_void()+
  theme(plot.title = element_text(hjust = 0.5))

Nhận xét:

  • Nhóm không được tuyển dụng (No) chiếm số lượng lớn vượt trội với 8341 sinh viên, tương ứng khoảng 83.41% tổng số mẫu.
  • Nhóm được tuyển dụng (Yes) có 1659 sinh viên, chiếm khoảng 16.59%.

Nhìn chung, biểu đồ cho thấy tỷ lệ được tuyển dụng thấp hơn rất nhiều so với tỷ lệ không được tuyển dụng.

3.1.2 Thống kê mô tả biến độc lập

a. Năng lực học tập (HocLuc)

# Tạo bảng tần số cho HocLuc
freq_hocluc <- as.data.frame(table(data1$HocLuc))

colnames(freq_hocluc) <- c("HocLuc", "Count")

# Tính tỷ lệ phần trăm
freq_hocluc$Percent <- paste0(round(freq_hocluc$Count / sum(freq_hocluc$Count) * 100, 1), "%")

# Vẽ biểu đồ tròn với ggplot2
ggplot(freq_hocluc, aes(x = "", y = Count, fill = HocLuc)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y") +
  geom_text(aes(label = Percent), 
            position = position_stack(vjust = 0.5), 
            color = "black", size = 4) +
  labs(title = "Tỷ lệ Học lực của sinh viên", x = NULL, y = NULL) +
  theme_void() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    legend.title = element_text(face = "bold")
  )

Nhận xét:

-Học lực yếu chiếm tỷ lệ cao nhất với 39,5%.

-Học lực giỏi chiếm tỷ lệ khá cao với 30,6%, chỉ đứng sau học lực yếu.

-Học lực trung bình chiếm 19,6%.

-Học lực khá chiếm tỷ lệ thấp nhất với 10,3%.

Từ các số liệu trên, có thể thấy rằng đa số sinh viên có học lực yếu hoặc giỏi, trong khi tỷ lệ sinh viên có học lực trung bình và khá lại thấp hơn đáng kể.

b. Kinh nghiệm thực tập (ThucTap)

# Tạo bảng tần số cho ThucTap
freq_ThucTap <- as.data.frame(table(data1$ThucTap))

colnames(freq_ThucTap) <- c("ThucTap", "Count")

# Tính tỷ lệ phần trăm
freq_ThucTap$Percent <- paste0(round(freq_ThucTap$Count / sum(freq_ThucTap$Count) * 100, 1), "%")

# Vẽ biểu đồ tròn với ggplot2
ggplot(freq_ThucTap, aes(x = "", y = Count, fill = ThucTap)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y") +
  geom_text(aes(label = Percent), 
            position = position_stack(vjust = 0.5), 
            color = "black", size = 4) +
  labs(title = "Tỷ lệ Thực tập của sinh viên", x = NULL, y = NULL) +
  theme_void() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    legend.title = element_text(face = "bold")
  )

Nhận xét:

-Tỷ lệ sinh viên không thực tập (No) chiếm đa số, với 60,4%.

-Tỷ lệ sinh viên có thực tập (Yes) chiếm thiểu số, với 39,6%.

Biểu đồ cho thấy sinh viên không tham gia thực tập chiếm đa số.

c. Kỹ năng giao tiếp (GiaoTiep)

# Tạo bảng tần số cho GiaoTiep
freq_GiaoTiep <- as.data.frame(table(data1$GiaoTiep))

colnames(freq_GiaoTiep) <- c("GiaoTiep", "Count")

# Tính tỷ lệ phần trăm
freq_GiaoTiep$Percent <- paste0(round(freq_GiaoTiep$Count / sum(freq_GiaoTiep$Count) * 100, 1), "%")

# Vẽ biểu đồ tròn với ggplot2
ggplot(freq_GiaoTiep, aes(x = "", y = Count, fill = GiaoTiep)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y") +
  geom_text(aes(label = Percent), 
            position = position_stack(vjust = 0.5), 
            color = "black", size = 4) +
  labs(title = "Tỷ lệ khả năng giao tiếp của sinh viên", x = NULL, y = NULL) +
  theme_void() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    legend.title = element_text(face = "bold")
  )

Nhận xét:

-Giao tiếp kém chiếm tỷ lệ cao nhất với 39.6%.

-Giao tiếp tốt chiếm tỷ lệ khá cao với 31.2%.

-Giao tiếp trung bình chiếm tỷ lệ thấp nhất với 29.2%.

Nhìn chung biểu đồ cho thấy số lượng sinh viên có khả năng giao tiếp kém chiếm một phần lớn, cao hơn so với tỷ lệ giao tiếp tốt và trung bình.

d. Số dự án đã hoàn thành (Soduan)

# Thống kê tóm tắt
summary(data1$SoDuAn)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   1.000   3.000   2.513   4.000   5.000
# Lập bảng tần số và tần suất để vẽ biểu đồ tròn
soduan_freq <- as.data.frame(table(data1$SoDuAn))
colnames(soduan_freq) <- c("SoDuAn", "Count")

# Tính toán phần trăm
soduan_freq <- soduan_freq %>%
  mutate(Percent = paste0(round(Count / sum(Count) * 100, 1), "%"))

# Vẽ biểu đồ tròn
ggplot(soduan_freq, aes(x = "", y = Count, fill = SoDuAn)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = Percent), position = position_stack(vjust = 0.5)) +
  labs(title = "Tỷ lệ Phân bố Số dự án Hoàn thành", x = NULL, y = NULL, fill = "Số dự án") +
  theme_void() +
  theme(plot.title = element_text(hjust = 0.5))

Nhận xét:

-Tỷ lệ hoàn thành 0 dự án và 2 dự án là bằng nhau, cùng chiếm 16.9%.

-Tỷ lệ hoàn thành 5 dự án là cao nhất, chiếm 17%.

-Tỷ lệ hoàn thành 1 dự án chiếm 16.1%.

-Tỷ lệ hoàn thành 4 dự án chiếm 16.9%.

-Tỷ lệ hoàn thành 3 dự án chiếm 16.3%.

Nhìn chung, biểu đồ cho thấy tỷ lệ hoàn thành dự án được phân bố khá đều giữa các nhóm từ 0 đến 5 dự án với sự chênh lệch không đáng kể giữa các nhóm.

3.2 Kiểm định chi bình phương

Trong phần này, kiểm định Chi-bình phương (Chi-squared test) được sử dụng để xác định mối liên hệ thống kê giữa cơ hội việc làm (TuyenDung) và các biến độc lập định tính: HocLuc, ThucTap, và GiaoTiep.

3.2.1 Kiểm định mối quan hệ giữa Tuyển dụng và Học lực

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa năng lực học tập và cơ hội việc làm.

  • H1: Có mối liên hệ giữa năng lực học tập và cơ hội việc làm.

table_hoc_luc <- table(data1$HocLuc, data1$TuyenDung)
chisq_hoc_luc <- chisq.test(table_hoc_luc)
print(chisq_hoc_luc)
## 
##  Pearson's Chi-squared test
## 
## data:  table_hoc_luc
## X-squared = 8.5428, df = 3, p-value = 0.03603

Kết quả kiểm định: Với p-value = 0.03603 < 0.05, ta bác bỏ giả thuyết H0. Có mối liên hệ ý nghĩa thống kê giữa năng lực học tập và cơ hội việc làm.

3.2.2 Kiểm định mối quan hệ giữa Tuyển dụng và Kinh nghiệm thực tập

Giả thuyết kiểm định - H0: Không có mối liên hệ giữa kinh nghiệm thực tập và cơ hội việc làm. - H1: Có mối liên hệ giữa kinh nghiệm thực tập và cơ hội việc làm.

table_thuc_tap <- table(data1$ThucTap, data1$TuyenDung)
chisq_thuc_tap <- chisq.test(table_thuc_tap)
print(chisq_thuc_tap)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_thuc_tap
## X-squared = 0.30979, df = 1, p-value = 0.5778

Kết quả kiểm định: Với p-value = 0.5778 > 0.05, ta chấp nhận giả thuyết H0. Không có mối liên hệ ý nghĩa thống kê giữa kinh nghiệm thực tập và cơ hội việc làm.

3.2.3 Kiểm định mối quan hệ giữa Tuyển dụng và Kỹ năng giao tiếp

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa kỹ năng giao tiếp và cơ hội việc làm.

  • H1: Có mối liên hệ giữa kỹ năng giao tiếp và cơ hội việc làm.

table_giao_tiep <- table(data1$GiaoTiep, data1$TuyenDung)
chisq_giao_tiep <- chisq.test(table_giao_tiep)
print(chisq_giao_tiep)
## 
##  Pearson's Chi-squared test
## 
## data:  table_giao_tiep
## X-squared = 1691.5, df = 2, p-value < 2.2e-16

Kết quả kiểm định: Với p-value = 2.2e-16 < 0.05, ta bác bỏ giả thuyết H0. Có mối liên hệ ý nghĩa thống kê giữa kỹ năng giao tiếp và cơ hội việc làm.

3.2.4 Kiểm định mối quan hệ giữa Tuyển dụng và Số dự án đã hoàn thành

Giả thuyết kiểm định

  • H0: Không có mối liên hệ giữa Số dự án đã hoàn thành và cơ hội việc làm.

  • H1: Có mối liên hệ giữa Số dự án đã hoàn thành và cơ hội việc làm.

t_test_soduan <- t.test(SoDuAn ~ TuyenDung, data = data1)
t_test_soduan
## 
##  Welch Two Sample t-test
## 
## data:  SoDuAn by TuyenDung
## t = -27.213, df = 3011.9, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group No and group Yes is not equal to 0
## 95 percent confidence interval:
##  -1.075535 -0.930965
## sample estimates:
##  mean in group No mean in group Yes 
##          2.346961          3.350211

Kết quả kiểm định: Với p-value = 2.2e-16 < 0.05, ta bác bỏ giả thuyết H0. Có mối liên hệ ý nghĩa thống kê giữa số dự án đã hoàn thành và cơ hội việc làm.

Tổng kết kiểm định: Có ba biến độc lập (HocLuc, Soduan, GiaoTiep) là có mối liên hệ có ý nghĩa thống kê với biến phụ thuộc TuyenDung. Chúng ta sẽ tiếp tục phân tích sâu hơn các mối quan hệ này.

3.3 Phân tích mối quan hệ giữa biến độc lập và biến phụ thuộc

3.3.1 Phân tích mối quan hệ giữa Tuyển dụng và Năng lực học tập

a. Thống kê mô tả giữa hai biến

table_hocluc_2 <- table(data1$HocLuc, data1$TuyenDung)
kable(table_hocluc_2, caption = "Bảng tần số chéo giữa Học lực và Tuyển dụng")
Bảng tần số chéo giữa Học lực và Tuyển dụng
No Yes
Yếu 3253 700
Trung bình 1660 304
Khá 878 149
Giỏi 2550 506
ggplot(data1, aes(x = HocLuc, fill = TuyenDung)) +
  geom_bar(position = "fill") +
  labs(title = "Tỷ lệ được Tuyển dụng theo Năng lực Học tập",
       x = "Phân loại Học lực", y = "Tỷ lệ") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Nhận xét:

-Tỷ lệ không được tuyển dụng (No) chiếm phần lớn trong tất cả các nhóm học lực (Yếu, Trung bình, Khá, Giỏi).

-Tỷ lệ được tuyển dụng (Yes) ở các nhóm học lực là tương đối giống nhau, dao động trong khoảng từ 15% đến 20%. Không có sự khác biệt rõ rệt về tỷ lệ được tuyển dụng giữa sinh viên có học lực Yếu, Trung bình, Khá và Giỏi.

-Tỷ lệ được tuyển dụng của sinh viên Yếu và Giỏi cao hơn một chút so với sinh viên Trung bình và Khá, nhưng sự chênh lệch này là không đáng kể.

Tóm lại biểu đồ cho thấy năng lực học tập không phải là yếu tố có ảnh hưởng mạnh mẽ đến tỷ lệ được tuyển dụng.

b. Kiểm định tỷ lệ giữa hai biến

Giả thuyết kiểm định

  • Giả thuyết H0: Tỷ lệ sinh viên học lực “Giỏi” được tuyển dụng là 20%.

  • Giả thuyết H1: Tỷ lệ sinh viên học lực “Giỏi” được tuyển dụng khác 20%.

# Lọc nhóm học lực Giỏi
hocluc_gioi_data <- subset(data1, HocLuc == "Giỏi")

# Tính số lượng và số người được tuyển dụng
n_hocluc_gioi <- nrow(hocluc_gioi_data)
n_tuyendung_gioi <- sum(hocluc_gioi_data$TuyenDung == "Yes")

# Kiểm định tỷ lệ
prop.test(x = n_tuyendung_gioi, n = n_hocluc_gioi, p = 0.2, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_tuyendung_gioi out of n_hocluc_gioi, null probability 0.2
## X-squared = 22.419, df = 1, p-value = 2.192e-06
## alternative hypothesis: true p is not equal to 0.2
## 95 percent confidence interval:
##  0.1526607 0.1793412
## sample estimates:
##         p 
## 0.1655759

Kết luận: Với p-value = 2.192e-06 < 0.05, đủ cơ sở bác bỏ giả thuyết H0. Tỷ lệ sinh viên học lực “Giỏi” được tuyển dụng khác 20%.

c. Phân tích thông qua Relative Risk và Odd Ratio

# Tạo biến nhóm: Giỏi và Không Giỏi
data1$HocLuc_Nhom <- ifelse(data1$HocLuc == "Giỏi", "Giỏi", "Không Giỏi")

# Tạo ma trận tần số
mat_hocluc <- table(data1$HocLuc_Nhom, data1$TuyenDung)
kable(mat_hocluc, caption="Bảng 2x2 cho RR và OR (Học lực)")
Bảng 2x2 cho RR và OR (Học lực)
No Yes
Giỏi 2550 506
Không Giỏi 5791 1153
# Tính RR và OR
rr_hocluc <- riskratio(t(mat_hocluc))
or_hocluc <- oddsratio(t(mat_hocluc))
kable(rr_hocluc$measure, caption = "Relative Risk (RR) - Học lực Giỏi vs. Không Giỏi")
Relative Risk (RR) - Học lực Giỏi vs. Không Giỏi
estimate lower upper
No 1.000000 NA NA
Yes 1.001031 0.9666841 1.036598
kable(or_hocluc$measure, caption = "Odds Ratio (OR) - Học lực Giỏi vs. Không Giỏi")
Odds Ratio (OR) - Học lực Giỏi vs. Không Giỏi
estimate lower upper
No 1.000000 NA NA
Yes 1.003208 0.8952356 1.125509

Kết quả:

  • Relative Risk (RR) = 1.001: Tỷ lệ được tuyển dụng của sinh viên học lực “Giỏi” chỉ lớn hơn 0.1% so với các sinh viên còn lại.

  • Odds Ratio (OR) = 1.003: Xác suất được tuyển dụng của một sinh viên học lực “Giỏi” chỉ lớn hơn 0.3% so với các sinh viên khác.

Kết luận: Cả hai chỉ số đều cho thấy năng lực học tập ở mức “Giỏi” không phải là lợi thế làm tăng cơ hội việc làm của sinh viên.

3.3.2 Phân tích mối quan hệ giữa Tuyển dụng và Kỹ năng giao tiếp

a. Thống kê mô tả giữa hai biến

table_giaotiep_2 <- table(data1$GiaoTiep, data1$TuyenDung)
kable(table_giaotiep_2, caption = "Bảng tần số chéo giữa Kỹ năng Giao tiếp và Tuyển dụng")
Bảng tần số chéo giữa Kỹ năng Giao tiếp và Tuyển dụng
No Yes
Kém 3696 264
Trung bình 2752 169
Tốt 1893 1226
ggplot(data1, aes(x = GiaoTiep, fill = TuyenDung)) +
  geom_bar(position = "fill") +
  labs(title = "Tỷ lệ được Tuyển dụng theo Kỹ năng Giao tiếp",
       x = "Phân loại Kỹ năng Giao tiếp", y = "Tỷ lệ") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Nhận xét:

-Có sự khác biệt rõ rệt về tỷ lệ được tuyển dụng (Yes) giữa nhóm giao tiếp Tốt so với hai nhóm còn lại. Tỷ lệ được tuyển dụng của nhóm Kém và Trung bình là rất thấp chỉ khoảng 5-10%. Ngược lại tỷ lệ được tuyển dụng của nhóm Tốt cao hơn rất nhiều, chiếm khoảng 40%.

-Biểu đồ cho thấy kỹ năng giao tiếp có ảnh hưởng rất lớn đến cơ hội được tuyển dụng. Sinh viên có kỹ năng giao tiếp tốt có tỷ lệ được tuyển dụng cao hơn đáng kể so với sinh viên có kỹ năng giao tiếp kém hoặc trung bình.

b. Kiểm định tỷ lệ giữa hai biến

Tác giả muốn kiểm tra xem tỷ lệ tuyển dụng của nhóm sinh viên có kỹ năng giao tiếp “Tốt” có bằng 50% hay không.

Giả thuyết kiểm định

  • Giả thuyết H0: Tỷ lệ sinh viên có kỹ năng giao tiếp “Tốt” được tuyển dụng là 50%.

  • Giả thuyết H1: Tỷ lệ sinh viên có kỹ năng giao tiếp “Tốt” được tuyển dụng khác 50%.

# Lọc nhóm giao tiếp Tốt
giaotiep_tot_data <- subset(data1, GiaoTiep == "Tốt")

# Tính số lượng và số người được tuyển dụng
n_giaotiep_tot <- nrow(giaotiep_tot_data)
n_tuyendung_tot <- sum(giaotiep_tot_data$TuyenDung == "Yes")

# Kiểm định tỷ lệ
prop.test(x = n_tuyendung_tot, n = n_giaotiep_tot, p = 0.5, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_tuyendung_tot out of n_giaotiep_tot, null probability 0.5
## X-squared = 142.21, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.3759160 0.4104989
## sample estimates:
##         p 
## 0.3930747

Kết luận: Với p-value = 2.2e-16 < 0.05, đủ cơ sở bác bỏ giả thuyết H0. Tỷ lệ sinh viên có kỹ năng giao tiếp “Tốt” được tuyển dụng khác 50%.

c. Phân tích thông qua Relative Risk và Odd Ratio

# Tạo biến nhóm: Tốt và Không Tốt
data1$GiaoTiep_Nhom <- ifelse(data1$GiaoTiep == "Tốt", "Tốt", "Không Tốt")

# Tạo ma trận tần số
mat_giaotiep <- table(data1$GiaoTiep_Nhom, data1$TuyenDung)
kable(mat_giaotiep, caption="Bảng 2x2 cho RR và OR (Kỹ năng giao tiếp)")
Bảng 2x2 cho RR và OR (Kỹ năng giao tiếp)
No Yes
Không Tốt 6448 433
Tốt 1893 1226
# Tính RR và OR
rr_giaotiep <- riskratio(t(mat_giaotiep))
or_giaotiep <- oddsratio(t(mat_giaotiep))
kable(rr_giaotiep$measure, caption = "Relative Risk (RR) - Giao tiếp Tốt vs. Không Tốt")
Relative Risk (RR) - Giao tiếp Tốt vs. Không Tốt
estimate lower upper
No 1.000000 NA NA
Yes 3.256204 3.100954 3.419227
kable(or_giaotiep$measure, caption = "Odds Ratio (OR) - Giao tiếp Tốt vs. Không Tốt")
Odds Ratio (OR) - Giao tiếp Tốt vs. Không Tốt
estimate lower upper
No 1.00000 NA NA
Yes 9.63959 8.548094 10.88796

Kết quả:

  • Relative Risk (RR) = 3.26: Tỷ lệ được tuyển dụng của sinh viên có kỹ năng giao tiếp “Tốt” cao hơn 3.26 lần so với các sinh viên còn lại.

  • Odds Ratio (OR) = 9.64: Xác suất được tuyển dụng của một sinh viên có kỹ năng giao tiếp “Tốt” cao hơn 9.64 lần so với các sinh viên khác.

Kết luận: Kỹ năng giao tiếp tốt cũng là một yếu tố cực kỳ quan trọng giúp tăng cơ hội việc làm của sinh viên.

3.3.3 Phân tích mối quan hệ giữa Tuyển dụng và Số dự án hoàn thành

a. Thống kê mô tả giữa hai biến

table_soduan_2 <- table(data1$SoDuAn, data1$TuyenDung)
kable(table_soduan_2, caption = "Bảng tần số chéo giữa Số dự án và Tuyển dụng")
Bảng tần số chéo giữa Số dự án và Tuyển dụng
No Yes
0 1643 45
1 1576 33
2 1274 407
3 1238 389
4 1312 381
5 1298 404
ggplot(data1, aes(x = as.factor(SoDuAn), fill = TuyenDung)) +
  geom_bar(position = "fill") +
  labs(title = "Tỷ lệ được Tuyển dụng theo Số dự án Hoàn thành",
       x = "Số lượng Dự án", y = "Tỷ lệ") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Nhận xét:

-Tỷ lệ được tuyển dụng (Yes) tăng lên rõ rệt khi số dự án hoàn thành tăng từ 1 lên 2. Với 0 và 1 dự án, tỷ lệ được tuyển dụng là rất thấp gần như bằng 0. Từ 2 dự án trở lên, tỷ lệ được tuyển dụng tăng lên và duy trì ở mức khoảng 25%.

-Số dự án hoàn thành có ảnh hưởng rõ rệt đến tỷ lệ được tuyển dụng. Việc hoàn thành từ 2 dự án trở lên dường như là một ngưỡng quan trọng để tăng cơ hội được tuyển dụng.

b. Kiểm định tỷ lệ giữa hai biến

Để kiểm tra giả thuyết về giá trị trung bình của số dự án, tác giả thực hiện kiểm định t một mẫu. Ta kiểm tra xem số dự án trung bình của nhóm sinh viên được tuyển dụng có bằng 3 hay không.

Giả thuyết kiểm định

  • Giả thuyết H0: Số dự án trung bình của nhóm được tuyển dụng là 3.

  • Giả thuyết H1: Số dự án trung bình của nhóm được tuyển dụng khác 3.

tuyendung_yes_data <- subset(data1, TuyenDung == "Yes")
t.test(tuyendung_yes_data$SoDuAn, mu = 3, alternative = "two.sided")
## 
##  One Sample t-test
## 
## data:  tuyendung_yes_data$SoDuAn
## t = 11.101, df = 1658, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 3
## 95 percent confidence interval:
##  3.288334 3.412088
## sample estimates:
## mean of x 
##  3.350211

Kết luận: Với p-value < 0.05, đủ cơ sở bác bỏ giả thuyết H0. Số dự án trung bình của nhóm được tuyển dụng khác 3.

3.4 Hồi quy Logistic đa biến

Sau khi khám phá mối liên hệ giữa cơ hội việc làm với từng biến độc lập, bước tiếp theo là xây dựng mô hình hồi quy logistic nhằm đánh giá đồng thời tác động của các yếu tố này đến khả năng được tuyển dụng của sinh viên.

Mô hình hồi quy logistic sử dụng hàm liên kết logit để mô hình hóa log-odds của cơ hội việc làm. Cụ thể, mô hình có dạng:

\[ \log\left( \frac{P(\text{TuyenDung} = \text{Yes})}{1 - P(\text{TuyenDung} = \text{Yes})} \right) = \beta_0 + \beta_1 \cdot \text{HocLuc} + \beta_2 \cdot \text{GiaoTiep} + \beta_3 \cdot \text{SoDuAn} \]

Giả thuyết kiểm định

Với từng biến độc lập, ta thực hiện kiểm định:

  • \(H_0\): Biến không có ảnh hưởng đến xác suất được tuyển dụng (\(\beta = 0\))
  • \(H_1\): Biến có ảnh hưởng đến xác suất được tuyển dụng (\(\beta \ne 0\))

Mức ý nghĩa thống kê được sử dụng là 5% (α = 0.05). Nếu p-value < 0.05, ta bác bỏ giả thuyết H₀.

# Đặt lại nhóm tham chiếu để diễn giải
data1$HocLuc <- relevel(data1$HocLuc, ref = "Yếu")
data1$GiaoTiep <- relevel(data1$GiaoTiep, ref = "Kém")

# Hồi quy đa biến
model_logit <- glm(TuyenDung ~ HocLuc + GiaoTiep + SoDuAn,
                   data = data1, family = binomial(link="logit"))

# Tóm tắt kết quả
summary(model_logit)
## 
## Call:
## glm(formula = TuyenDung ~ HocLuc + GiaoTiep + SoDuAn, family = binomial(link = "logit"), 
##     data = data1)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -4.01796    0.10417 -38.572   <2e-16 ***
## HocLucTrung bình   -0.07115    0.08599  -0.827    0.408    
## HocLucKhá          -0.17006    0.11199  -1.518    0.129    
## HocLucGiỏi         -0.01557    0.07388  -0.211    0.833    
## GiaoTiepTrung bình -0.14439    0.10329  -1.398    0.162    
## GiaoTiepTốt         2.40783    0.07747  31.079   <2e-16 ***
## SoDuAn              0.45806    0.01993  22.978   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 8986.5  on 9999  degrees of freedom
## Residual deviance: 6797.7  on 9993  degrees of freedom
## AIC: 6811.7
## 
## Number of Fisher Scoring iterations: 5

Kết quả mô hình hồi quy logistic đa biến

Mô hình hồi quy logistic được xây dựng nhằm phân tích xác suất sinh viên được tuyển dụng (TuyenDung = Yes) dựa trên các biến định tính: năng lực học tập (HocLuc), kinh nghiệm thực tập (ThucTap), kỹ năng giao tiếp (GiaoTiep) và biến định lượng là số dự án đã hoàn thành (SoDuAn). Mức ý nghĩa được sử dụng là 5% (α = 0.05).

Bảng tổng hợp các biến có ý nghĩa thống kê (kèm Odds Ratio)

Biến Nhóm so sánh Hệ số (β) p-value Odds Ratio (e^β) Diễn giải chi tiết
Giao tiếp Tốt (vs Kém) 2.40783 < 0.001 11.11 Khả năng được tuyển dụng cao hơn 11.11 lần so với nhóm Giao tiếp Kém.
Số dự án Tăng 1 dự án 0.45806 < 0.001 1.58 Khả năng được tuyển dụng tăng 1.58 lần (tức là 58%) khi số dự án tăng thêm 1.

Kết luận

  • Kết quả hồi quy logistic cho thấy học lực không có ảnh hưởng có ý nghĩa thống kê đến xác suất được tuyển dụng (p > 0.05 ở tất cả các mức độ).

  • Trong khi đó, kỹ năng giao tiếp tốt và số lượng dự án đã hoàn thành lại có ảnh hưởng tích cực và rõ rệt đến khả năng được tuyển (p < 0.001).

  • Điều này cho thấy rằng nhà tuyển dụng trong tập dữ liệu này có xu hướng ưu tiên năng lực thực tiễn và kỹ năng mềm hơn là thành tích học tập.

3.5 Hồi quy Probit đa biến

Mô hình hồi quy Probit sử dụng hàm liên kết là phân phối chuẩn tích lũy \(\Phi(\cdot)\) để mô phỏng xác suất sinh viên được tuyển dụng (TuyenDung = Yes) dựa trên các biến độc lập.

Mô hình có dạng:

\[ P(\text{TuyenDung}_i = 1 \mid X_i) = \Phi(\beta_0 + \beta_1 \cdot \text{HocLuc}_i + \beta_2 \cdot \text{GiaoTiep}_i + \beta_3 \cdot \text{SoDuAn}_i) \]

Giả thuyết kiểm định

  • \(H_0\): Biến không có ảnh hưởng đến xác suất được tuyển dụng (\(\beta = 0\))
  • \(H_1\): Biến có ảnh hưởng đến xác suất được tuyển dụng (\(\beta \ne 0\))

Mức ý nghĩa sử dụng là \(\alpha = 0.05\). Nếu p-value < 0.05, bác bỏ \(H_0\).

# Hồi quy Probit đa biến
model_probit <- glm(TuyenDung ~ HocLuc + GiaoTiep + SoDuAn,
                   data = data1, family = binomial(link = "probit"))

summary(model_probit)
## 
## Call:
## glm(formula = TuyenDung ~ HocLuc + GiaoTiep + SoDuAn, family = binomial(link = "probit"), 
##     data = data1)
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -2.274263   0.053839 -42.242   <2e-16 ***
## HocLucTrung bình   -0.042472   0.047559  -0.893    0.372    
## HocLucKhá          -0.080092   0.061573  -1.301    0.193    
## HocLucGiỏi         -0.005425   0.040969  -0.132    0.895    
## GiaoTiepTrung bình -0.068599   0.050778  -1.351    0.177    
## GiaoTiepTốt         1.337116   0.040831  32.747   <2e-16 ***
## SoDuAn              0.259088   0.010840  23.901   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 8986.5  on 9999  degrees of freedom
## Residual deviance: 6795.3  on 9993  degrees of freedom
## AIC: 6809.3
## 
## Number of Fisher Scoring iterations: 6

Kết quả mô hình hồi quy Probit đa biến

Intercept: \(\beta_0 = -2.274263\)

Khi tất cả các biến độc lập ở mức tham chiếu (Học lực Kém, Giao tiếp Kém và Số dự án bằng 0), giá trị z-score cơ bản là -2.274263. Giá trị này nằm xa về phía trái của phân phối chuẩn, tương ứng với một xác suất được tuyển dụng rất thấp.

GiaoTiepTốt: \(\beta_5 = 1.337116\)

Khi Giao tiếp là Tốt thay vì Kém, z-score tăng 1.337116 đơn vị. Sự gia tăng đáng kể này làm cho xác suất được tuyển dụng tăng cao hơn rõ rệt và kết quả có ý nghĩa thống kê rất cao (\(p < 0.001\)).

SoDuAn: \(\beta_6 = 0.259088\)

Khi số dự án hoàn thành tăng thêm 1, z-score tăng 0.259088 đơn vị. Dù đây là một mức tăng nhỏ, nhưng tác động tích lũy qua nhiều dự án sẽ rất đáng kể. Kết quả này có ý nghĩa thống kê rất cao (\(p < 0.001\)).

Kết luận:

Kết quả mô hình Probit cho thấy các biến độc lập có ảnh hưởng nhất quán với mô hình Logit. Các yếu tố kỹ năng giao tiếp và số dự án đều có tác động tích cực đến cơ hội việc làm của sinh viên. Các hệ số dương cho thấy những đặc điểm này làm tăng chỉ số Z, từ đó làm tăng xác suất được tuyển dụng.

3.6 Hồi quy Cloglog đa biến

Mô hình hồi quy Cloglog sử dụng hàm liên kết complementary log-log, phù hợp với các hiện tượng có xác suất tăng không đối xứng.

Mô hình có dạng:

\[ P(\text{TuyenDung}_i = 1 \mid X_i) = 1 - \exp(-\exp(X_i\beta)) \]

Giả thuyết kiểm định

  • \(H_0\): Biến không có ảnh hưởng đến xác suất được tuyển dụng (\(\beta = 0\))
  • \(H_1\): Biến có ảnh hưởng đến xác suất được tuyển dụng (\(\beta \ne 0\))
# Hồi quy Cloglog đa biến
model_cloglog <- glm(TuyenDung ~ HocLuc + GiaoTiep + SoDuAn,
                     data = data1, family = binomial(link = "cloglog"))

summary(model_cloglog)
## 
## Call:
## glm(formula = TuyenDung ~ HocLuc + GiaoTiep + SoDuAn, family = binomial(link = "cloglog"), 
##     data = data1)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -3.71588    0.08901 -41.748   <2e-16 ***
## HocLucTrung bình   -0.05100    0.06991  -0.729    0.466    
## HocLucKhá          -0.14446    0.09187  -1.572    0.116    
## HocLucGiỏi         -0.01877    0.05966  -0.315    0.753    
## GiaoTiepTrung bình -0.13995    0.09859  -1.419    0.156    
## GiaoTiepTốt         2.05742    0.06839  30.084   <2e-16 ***
## SoDuAn              0.35681    0.01603  22.259   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 8986.5  on 9999  degrees of freedom
## Residual deviance: 6829.0  on 9993  degrees of freedom
## AIC: 6843
## 
## Number of Fisher Scoring iterations: 6

Kết quả mô hình hồi quy Cloglog đa biến

Intercept (β₀ = -3.71588)
Khi tất cả các biến độc lập đều ở mức tham chiếu (Học lực = Kém, Giao tiếp = Kém, Số dự án = 0), giá trị cloglog cơ bản-3.72.
Theo công thức:

\[ p = 1 - e^{-e^{\eta}}, \]

giá trị âm lớn khiến \(\eta\) rất nhỏ ⇒ \(p\) gần bằng 0, tức là xác suất được tuyển rất thấp.

GiaoTiepTốt (β₅ = 2.05742)
Khi Giao tiếp = Tốt (so với Kém), cloglog tăng mạnh 2.06 đơn vị.
\(\eta\) tăng đáng kể, \(p = 1 - e^{-e^{\eta}}\) tiến nhanh đến 1 thì xác suất tuyển dụng tăng mạnh, rất có ý nghĩa thống kê (p < 0.001).

SoDuAn (β₆ = 0.35681)
Mỗi 1 dự án tăng thêm làm cloglog tăng 0.36 đơn vị.
có ý nghĩa thống kê rất cao (p < 0.001). Với nhiều dự án hơn, \(\eta\) tăng thì \(p\) tăng tương ứng.

Kết luận:

Tương tự hai mô hình trước, mô hình Cloglog khẳng định rằng yếu tố kỹ năng giao tiếp và số dự án hoàn thành có ảnh hưởng tích cực đến cơ hội việc làm. Các hệ số dương cho thấy học lực, kinh nghiệm thực tập, kỹ năng giao tiếp và số dự án đều làm tăng “tỷ lệ nguy cơ” (hazard rate) được tuyển dụng.

3.7 Hồi quy xác suất tuyến tính đa biến

Mô hình hồi quy xác suất tuyến tính (LPM) ước lượng trực tiếp xác suất được tuyển dụng bằng mô hình hồi quy tuyến tính thông thường.

Công thức mô hình:

\[ P(\text{TuyenDung}_i = 1 \mid X_i) = \beta_0 + \beta_1 \cdot \text{HocLuc}_i + \beta_2 \cdot \text{GiaoTiep}_i + \beta_3 \cdot \text{SoDuAn}_i + \epsilon_i \]

Giả thuyết kiểm định

  • \(H_0\): Biến không có ảnh hưởng đến xác suất được tuyển dụng (\(\beta = 0\))
  • \(H_1\): Biến có ảnh hưởng đến xác suất được tuyển dụng (\(\beta \ne 0\))
# Mô hình LMP
model_glm <- glm(formula = TuyenDung ~ HocLuc + GiaoTiep + SoDuAn,
                 data = data1,
                 family = binomial(link = "logit"))

summary(model_glm)
## 
## Call:
## glm(formula = TuyenDung ~ HocLuc + GiaoTiep + SoDuAn, family = binomial(link = "logit"), 
##     data = data1)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -4.01796    0.10417 -38.572   <2e-16 ***
## HocLucTrung bình   -0.07115    0.08599  -0.827    0.408    
## HocLucKhá          -0.17006    0.11199  -1.518    0.129    
## HocLucGiỏi         -0.01557    0.07388  -0.211    0.833    
## GiaoTiepTrung bình -0.14439    0.10329  -1.398    0.162    
## GiaoTiepTốt         2.40783    0.07747  31.079   <2e-16 ***
## SoDuAn              0.45806    0.01993  22.978   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 8986.5  on 9999  degrees of freedom
## Residual deviance: 6797.7  on 9993  degrees of freedom
## AIC: 6811.7
## 
## Number of Fisher Scoring iterations: 5

Kết quả hồi quy xác suất tuyến tính đa biến

Hệ số chặn (Intercept):
Khi sinh viên có các đặc điểm tham chiếu (Học lực Yếu, Giao tiếp Kém, và không hoàn thành dự án nào), tỷ lệ log-odds được tuyển dụng là -4.01796.
Mặc dù giá trị này có ý nghĩa thống kê cao (p < 2e−16), việc chuyển đổi trực tiếp sang xác suất không đơn giản và cần được xem xét cùng với các biến khác.

GiaoTiepTốt:
Khi sinh viên có kỹ năng giao tiếp Tốt thay vì Kém, log-odds được tuyển dụng tăng 2.40783.
Sự thay đổi này có ý nghĩa thống kê rất cao (p < 2e−16).
Điều này cho thấy sinh viên có kỹ năng giao tiếp Tốt có cơ hội được tuyển dụng cao hơn đáng kể so với sinh viên giao tiếp Kém.

SoDuAn:
Khi số dự án hoàn thành tăng thêm 1, log-odds được tuyển dụng tăng 0.45806.
Sự thay đổi này có ý nghĩa thống kê rất cao (p < 2e−16).
Điều này cho thấy việc hoàn thành mỗi dự án làm tăng cơ hội được tuyển dụng một cách đáng kể.

Kết luận từ mô hình LMP:

Mô hình LMP cung cấp một cách diễn giải trực tiếp và dễ hiểu về tác động của các yếu tố. Kết quả cho thấy kỹ năng giao tiếp và số dự án hoàn thành làm tăng xác suất được tuyển dụng.

3.8 Đánh giá và lựa chọn mô hình phù hợp

3.8.1 Đánh giá thông qua chỉ số AIC

aic_results <- data.frame(
  Model = c("Logit", "Probit", "Cloglog"),
  AIC   = c(AIC(model_logit), AIC(model_probit), AIC(model_cloglog))
)
kable(aic_results, caption="So sánh chỉ số AIC của các mô hình")
So sánh chỉ số AIC của các mô hình
Model AIC
Logit 6811.717
Probit 6809.256
Cloglog 6843.030

Nhận xét: Ba mô hình có chỉ số AIC rất gần nhau. Mô hình Probit có AIC thấp nhất (6809.256), cho thấy đây là mô hình phù hợp nhất về mặt cân bằng giữa độ chính xác và độ phức tạp.

3.8.2 Đánh giá thông qua ma trận nhầm lẫn

conf_matrix <- function(model, data, cutoff = 0.5) {
  predicted_prob <- predict(model, newdata = data, type = "response")
  predicted_class <- ifelse(predicted_prob >= cutoff, "Yes", "No")
  actual_class <- data$TuyenDung
  table(Predicted = predicted_class, Actual = actual_class)
}

cm_logit <- conf_matrix(model_logit, data1)
kable(cm_logit, caption="Ma trận nhầm lẫn - Mô hình Logit")
Ma trận nhầm lẫn - Mô hình Logit
No Yes
No 7870 1095
Yes 471 564

Nhận xét: Mô hình Logit dự đoán đúng 7870 trường hợp “No” và 564 trường hợp “Yes”. Độ chính xác chung là (7870+564)/10000 = 84.34%. Tuy nhiên chỉ dự đoán đúng 564 trên 1035 ứng viên được tuyển thực tế, điều này cho thấy mô hình bỏ sót khá nhiều ứng viên tiềm năng.

3.8.3 Đánh giá thông qua đường cong ROC và diện tích AUC

# ROC cho Logit
probs_logit <- predict(model_logit, type = "response")
roc_logit <- roc(response = data1$TuyenDung, predictor = probs_logit)
auc_logit <- auc(roc_logit)

# ROC cho Probit
probs_probit <- predict(model_probit, type = "response")
roc_probit <- roc(response = data1$TuyenDung, predictor = probs_probit)
auc_probit <- auc(roc_probit)

# ROC cho Cloglog
probs_cloglog <- predict(model_cloglog, type = "response")
roc_cloglog <- roc(response = data1$TuyenDung, predictor = probs_cloglog)
auc_cloglog <- auc(roc_cloglog)

# Vẽ chung 3 đường ROC
plot(roc_logit, col = "blue", main = "So sánh đường cong ROC của các mô hình")
lines(roc_probit, col = "green")
lines(roc_cloglog, col = "red")
legend("bottomright", legend=c("Logit", "Probit", "Cloglog"), col=c("blue", "green", "red"), lwd=2)

# Bảng AUC
auc_table <- data.frame(Model = c("Logit", "Probit", "Cloglog"),
                        AUC = round(c(auc_logit, auc_probit, auc_cloglog), 4))
kable(auc_table, caption="So sánh chỉ số AUC")
So sánh chỉ số AUC
Model AUC
Logit 0.8297
Probit 0.8298
Cloglog 0.8296

Nhận xét:

Cả ba mô hình Logit, Probit và Cloglog đều có đường cong ROC nằm rõ ràng trên đường ngẫu nhiên và chỉ số AUC xấp xỉ 0.83, cho thấy khả năng phân biệt tốt giữa các ứng viên được tuyển và không được tuyển.

3.8.4 Kết luận và lựa chọn mô hình phù hợp nhất

Dựa trên các tiêu chí đánh giá gồm: chỉ số AIC, ma trận nhầm lẫn, và đường cong ROC cùng diện tích AUC, có thể đưa ra các nhận định sau:

  • Về AIC: Mô hình Probit có giá trị AIC thấp nhất (6809.256), cho thấy đây là mô hình phù hợp nhất về mặt cân bằng giữa độ chính xác và mức độ phức tạp.
  • Về ma trận nhầm lẫn: Cả ba mô hình đều cho kết quả phân loại tương đối giống nhau, với độ chính xác cao.
  • Về đường cong ROC và AUC: Giá trị AUC ở cả ba mô hình đều xấp xỉ nhau (khoảng 0.83), cho thấy năng lực phân biệt giữa hai nhóm là tốt.

Dựa trên ba tiêu chí đánh giá mô hình gồm: chỉ số AIC, ma trận nhầm lẫn, và diện tích dưới đường cong ROC (AUC), mô hình Probit được xem là phù hợp nhất trong nghiên cứu này.

CHƯƠNG 4: KẾT LUẬN

4.1 Kết luận

Bài phân tích đã tiến hành phân tích khả năng được tuyển dụng của sinh viên thông qua các mô hình hồi quy nhị phân, bao gồm Logit, Probit, Cloglog và mô hình xác suất tuyến tính (LPM). Dữ liệu đầu vào là các biến định tính và định lượng thể hiện đặc điểm học thuật và kỹ năng của sinh viên.

Kết quả phân tích cho thấy các biến độc lập có ảnh hưởng đến xác suất sinh viên được tuyển dụng là sinh viên có kỹ năng giao tiếp tốt và hoàn thành nhiều dự án có cơ hội việc làm cao hơn các sinh viên còn lại.

Qua so sánh các mô hình hồi quy nhận thấy mô hình Probit có chỉ số AIC thấp nhất (6809.256) và đồng thời cho kết quả dự báo hợp lý với độ chính xác phân loại chấp nhận được (AUC ≈ 0.83). Do đó, mô hình Probit được lựa chọn là mô hình phù hợp nhất để tiến hành dự báo xác suất tuyển dụng trong bộ dữ liệu nghiên cứu.

4.2 Khuyến nghị

Từ kết quả nghiên cứu, có thể rút ra một số hàm ý quan trọng cho các bên liên quan:

  • Đối với sinh viên: Cần nhận thức rõ tầm quan trọng của việc cân bằng giữa học tập và hoạt động thực tiễn. Ngày nay, ngoài việc duy trì thành tích học tập tốt, sinh viên nên chủ động tìm kiếm cơ hội tham gia vào các dự án thực tế và không ngừng trau dồi kỹ năng giao tiếp.
  • Đối với các trường đại học: Chương trình đào tạo cần tích hợp nhiều hơn các hoạt động thực hành, kết nối doanh nghiệp để tạo điều kiện thực tập cho sinh viên, và tổ chức các khóa học, workshop về kỹ năng mềm.
  • Đối với nhà tuyển dụng: Kết quả cho thấy một hồ sơ ứng viên toàn diện (kết hợp cả học thuật và kinh nghiệm) thường có tiềm năng cao hơn. Quy trình tuyển dụng có thể xem xét đa dạng các tiêu chí thay vì chỉ dựa vào bảng điểm.

4.3 Hạn chế và phương hướng tiếp theo của đề tài

4.3.1 Hạn chế của đề tài

Mặc dù nghiên cứu đã cung cấp những kết quả hữu ích, đề tài vẫn tồn tại một số hạn chế nhất định.

Thứ nhất, dữ liệu được sử dụng trong nghiên cứu mang tính cắt ngang, do đó không phản ánh được sự phát triển kỹ năng và kiến thức của sinh viên theo thời gian.

Thứ hai, mô hình chỉ xem xét một số biến đã cho mà chưa tính đến các yếu tố quan trọng khác có thể ảnh hưởng đến việc làm như ngành học, danh tiếng của trường, hoặc các yếu tố kinh tế xã hội.

4.3.2 Phương hướng tiếp theo của đề tài

Dựa trên các hạn chế đã nêu, đề tài có thể được mở rộng và phát triển theo một số hướng sau:

Thứ nhất, mở rộng quy mô dữ liệu bằng cách bổ sung thêm các biến định lượng và định tính có tính giải thích cao như ngành học, điểm IQ, điểm hoạt động ngoại khóa để phản ánh đầy đủ hơn năng lực của ứng viên.

Thứ hai, nghiên cứu có thể xây dựng các mô hình phân tích nâng cao hơn, như mô hình phi tuyến, mô hình tương tác hoặc ứng dụng các thuật toán học máy (machine learning) để phát hiện các mối quan hệ phức tạp và cải thiện độ chính xác trong phân loại.

Thứ ba, đề tài nên thực hiện kiểm định độ phù hợp mô hình chặt chẽ hơn, như kiểm định hiện tượng đa cộng tuyến, hay kiểm định độ chính xác phân loại với các ngưỡng khác nhau để đảm bảo độ tin cậy của kết quả thống kê.

LS0tDQp0aXRsZTogIlBIw4JOIFTDjUNIIEPDgUMgWeG6vlUgVOG7kCBI4buMQyBUSFXhuqxUIFbDgCBL4bu4IE7Egk5HIOG6ok5IIEjGr+G7nk5HIMSQ4bq+TiBDxqAgSOG7mEkgVknhu4ZDIEzDgE0gQ+G7pkEgU0lOSCBWScOKTiINCmF1dGhvcjogIlBoYW4gVGhhbmggVHLhu41uZyAgICAgICAgICAgICAgICAgICBHVkhEOiBUSC5TIFRS4bqmTiBN4bqgTkggVMav4bucTkciDQpkYXRlOiAiMjAyNS0wOC0xIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlICANCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHRydWUNCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCmFsd2F5c19hbGxvd19odG1sOiB0cnVlDQotLS0NCg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KYGBgIHtjc3MsIGVjaG8gPSBGQUxTRX0NCmgxIHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMzJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIH0NCg0KaDIgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiANCn0NCg0KaDMgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpoNCB7Zm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KICB9DQoNCmJvZHkgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAxOHB4Ow0KICANCn0NCnA6bm90KGgxKTpub3QoaDIpOm5vdChoMyk6bm90KGg0KTpub3QoaDUpIHsNCiAgdGV4dC1pbmRlbnQ6IDJlbTt9DQpwIHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgfQ0KLnRvY2lmeS1oZWFkZXIgew0KICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KYGBgDQoNCi0tLQ0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpDQojIFThuqNpIGPDoWMgdGjGsCB2aeG7h24gY+G6p24gdGhp4bq/dA0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkobm5ldCkNCmxpYnJhcnkocHNjbCkNCmxpYnJhcnkocFJPQykNCmxpYnJhcnkoTUFTUykNCmxpYnJhcnkoZXBpdG9vbHMpDQpsaWJyYXJ5KHN0YXJnYXplcikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGJyb29tKQ0KbGlicmFyeShEaWFncmFtbWVSKQ0KYGBgDQoNCi0tLQ0KDQojICoqTOG7nEkgQ0FNIMSQT0FOKioNCg0KVMO0aSB4aW4gY2FtIMSRb2FuIHLhurFuZyDEkeG7gSB0w6BpIOKAnFBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSBo4buNYyB0aHXhuq10IHbDoCBr4bu5IG7Eg25nIOG6o25oIGjGsOG7n25nIMSR4bq/biBjxqEgaOG7mWkgdmnhu4djIGzDoG0gY+G7p2Egc2luaCB2acOqbuKAnSBsw6AgY8O0bmcgdHLDrG5oIG5naGnDqm4gY+G7qXUgZG8gY2jDrW5oIHTDtGkgdGjhu7FjIGhp4buHbi4gQ8OhYyBz4buRIGxp4buHdSwga+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggdsOgIGPDoWMgbmjhuq1uIMSR4buLbmggdHJvbmcgxJHhu4EgdMOgaSBsw6AgdHJ1bmcgdGjhu7FjLCBjw7MgY8ahIHPhu58ga2hvYSBo4buNYywgxJHGsOG7o2MgdGh1IHRo4bqtcCB2w6AgeOG7rSBsw70gdGhlbyDEkcO6bmcgcXV5IHRyw6xuaCBuZ2hpw6puIGPhu6l1LiBUw7RpIGto4bqzbmcgxJHhu4tuaCBraMO0bmcgc2FvIGNow6lwLCBraMO0bmcgdmkgcGjhuqFtIGLhuqNuIHF1eeG7gW4gY+G7p2EgYuG6pXQga+G7syBjw6EgbmjDom4gaGF5IHThu5UgY2jhu6ljIG7DoG8uIE3hu41pIHRyw61jaCBk4bqrbiB0cm9uZyDEkeG7gSB0w6BpIMSR4buBdSDEkcaw4bujYyBnaGkgcsO1IG5ndeG7k24gZ+G7kWMuIFTDtGkgeGluIGNo4buLdSBob8OgbiB0b8OgbiB0csOhY2ggbmhp4buHbSB24buBIHTDrW5oIHRydW5nIHRo4buxYyB2w6Agbmd1ecOqbiBi4bqjbiBj4bunYSBu4buZaSBkdW5nIMSR4buBIHTDoGkgbsOgeS4NCg0KLS0tDQoNCiMgKipM4bucSSBD4bqiTSDGoE4qKg0KDQpYaW4gY2jDom4gdGjDoG5oIGPhuqNtIMahbiBz4buxIHRpbiB0xrDhu59uZyB2w6AgY8ahIGjhu5lpIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gYsOgaSBwaMOibiB0w61jaCDigJxQaMOibiB0w61jaCBjw6FjIHnhur91IHThu5EgaOG7jWMgdGh14bqtdCB2w6Aga+G7uSBuxINuZyDhuqNuaCBoxrDhu59uZyDEkeG6v24gY8ahIGjhu5lpIHZp4buHYyBsw6BtIGPhu6dhIHNpbmggdmnDqm7igJ0uIFPhu7EgxJHhu4tuaCBoxrDhu5tuZyByw7UgcsOgbmcgdsOgIMO9IHTGsOG7n25nIHBow6JuIHTDrWNoIHPhuq9jIGLDqW4gxJHDoyBsw6Aga2ltIGNo4buJIG5hbSBxdWFuIHRy4buNbmcgZ2nDunAgaG/DoG4gdGhp4buHbiBiw6FvIGPDoW8gbsOgeSBt4buZdCBjw6FjaCBraG9hIGjhu41jIHbDoCBjw7MgZ2nDoSB0cuG7iyB0aOG7sWMgdGnhu4VuLiDEkOG7k25nIHRo4budaSwgeGluIGfhu61pIGzhu51pIGPhuqNtIMahbiDEkeG6v24gY+G7mW5nIMSR4buTbmcgbcOjIG5ndeG7k24gbeG7nyBSIHbDoCBjw6FjIHTDoWMgZ2nhuqMgY+G7p2Egbmjhu69uZyB0aMawIHZp4buHbiDEkcOjIMSRxrDhu6NjIHPhu60gZOG7pW5nLCBuaOG7r25nIGPDtG5nIGPhu6UgxJHDoyB04bqhbyDEkWnhu4F1IGtp4buHbiB0aHXhuq1uIGzhu6NpIMSR4buDIHF1w6EgdHLDrG5oIHBow6JuIHTDrWNoIGThu68gbGnhu4d1IHRy4bufIG7Dqm4gaGnhu4d1IHF14bqjIHbDoCBzw6J1IHPhuq9jIGjGoW4uDQoNCi0tLQ0KDQojICoqQ0jGr8agTkcgMTogR0nhu5pJIFRISeG7hlUgxJDhu4AgVMOASSoqDQoNCiMjICoqMS4xIFTDrW5oIGPhuqVwIHRoaeG6v3QgY+G7p2EgxJHhu4EgdMOgaSoqDQoNClRyb25nIGLhu5FpIGPhuqNuaCB0aOG7iyB0csaw4budbmcgbGFvIMSR4buZbmcgbmfDoHkgY8OgbmcgY+G6oW5oIHRyYW5oLCB2aeG7h2Mgc2luaCB2acOqbiBzYXUga2hpIHThu5F0IG5naGnhu4dwIHTDrG0gxJHGsOG7o2MgbeG7mXQgY8O0bmcgdmnhu4djIHBow7kgaOG7o3AgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgbeG7pWMgdGnDqnUgcXVhbiB0cuG7jW5nIG5o4bqldCBj4bunYSBnacOhbyBk4bulYyDEkeG6oWkgaOG7jWMuIEPGoSBo4buZaSB2aeG7h2MgbMOgbSBraMO0bmcgY2jhu4kgcGjhuqNuIMOhbmggY2jhuqV0IGzGsOG7o25nIMSRw6BvIHThuqFvIGPhu6dhIGPDoWMgdHLGsOG7nW5nIG3DoCBjw7JuIGzDoCB0aMaw4bubYyDEkW8gdGjDoG5oIGPDtG5nIGJhbiDEkeG6p3UgY+G7p2EgbeG7l2kgY8OhIG5ow6JuLiBUdXkgbmhpw6puLCBraMO0bmcgcGjhuqNpIG3hu41pIHNpbmggdmnDqm4gxJHhu4F1IGPDsyBjxqEgaOG7mWkgdmnhu4djIGzDoG0gbmjGsCBuaGF1LiBDb2xsZWdlIFN0dWRlbnQgUGxhY2VtZW50IEZhY3RvcnMgRGF0YXNldCBsw6AgYuG7mSBk4buvIGxp4buHdSB0aOG7sWMgdOG6vyB0aHUgdGjhuq1wIHThu6sgMTAwMDAgc2luaCB2acOqbiDEkeG6oWkgaOG7jWMgduG7gSBjw6FjIHnhur91IHThu5EgbmjGsCBuxINuZyBs4buxYyBo4buNYyB04bqtcCwga2luaCBuZ2hp4buHbSB0aOG7sWMgdGnhu4VuIHF1YSB0aOG7sWMgdOG6rXAsIHPhu5EgbMaw4bujbmcgZOG7sSDDoW4gxJHDoyBob8OgbiB0aMOgbmgsIHbDoCDEkeG6t2MgYmnhu4d0IGzDoCBr4bu5IG7Eg25nIG3hu4FtIG5oxrAgZ2lhbyB0aeG6v3AsIMSRw7NuZyB2YWkgdHLDsiBxdXnhur90IMSR4buLbmggxJHhur9uIGto4bqjIG7Eg25nIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nLiBWaeG7h2MgaGnhu4N1IHLDtSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5EgbsOgeSBz4bq9IGN1bmcgY+G6pXAgY8ahIHPhu58ga2hvYSBo4buNYyBnacO6cCBzaW5oIHZpw6puIMSR4buLbmggaMaw4bubbmcgcGjDoXQgdHJp4buDbiBi4bqjbiB0aMOibiB2w6AgY8OhYyBjxqEgc+G7nyBnacOhbyBk4bulYyB04buRaSDGsHUgaMOzYSBjaMawxqFuZyB0csOsbmggxJHDoG8gdOG6oW8uDQoNClRyw6puIHRo4buxYyB04bq/LCBuaGnhu4F1IHNpbmggdmnDqm4gduG6q24gdOG6rXAgdHJ1bmcgcXXDoSBuaGnhu4F1IHbDoG8gdGjDoG5oIHTDrWNoIGjhu41jIHRodeG6rXQgdHLDqm4gZ2nhuqV5IHThu50gbcOgIGNoxrBhIGNow7ogdHLhu41uZyDEkcO6bmcgbeG7qWMgxJHhur9uIHZp4buHYyB0w61jaCBsxal5IGtpbmggbmdoaeG7h20gdGjhu7FjIHThur8gaGF5IHRyYXUgZOG7k2kgY8OhYyBr4bu5IG7Eg25nIGPhuqduIHRoaeG6v3QuIFh14bqldCBwaMOhdCB04burIG5o4buvbmcgbMO9IGRvIHRyw6puLCDEkeG7gSB0w6BpIOKAnFBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSBo4buNYyB0aHXhuq10IHbDoCBr4bu5IG7Eg25nIOG6o25oIGjGsOG7n25nIMSR4bq/biBjxqEgaOG7mWkgdmnhu4djIGzDoG0gY+G7p2Egc2luaCB2acOqbuKAnSDEkcaw4bujYyBs4buxYSBjaOG7jW4gduG7m2kga+G7syB24buNbmcgbWFuZyBs4bqhaSBuaOG7r25nIHBow6F0IGhp4buHbiBjw7MgZ2nDoSB0cuG7iywgZ2nDunAgc2luaCB2acOqbiwgbmjDoCB0csaw4budbmcgdsOgIGPhuqMgbmjDoCB0dXnhu4NuIGThu6VuZyBjw7MgY8OhaSBuaMOsbiBzw6J1IHPhuq9jIGjGoW4gduG7gSBuaOG7r25nIHnhur91IHThu5EgdGhlbiBjaOG7kXQgcXV54bq/dCDEkeG7i25oIHPhu7EgdGjDoG5oIGPDtG5nIHRyb25nIHR1eeG7g24gZOG7pW5nLg0KDQojIyAqKjEuMiBN4bulYyB0acOqdSB2w6AgY8OidSBo4buPaSBuZ2hpw6puIGPhu6l1KioNCg0KIyMjICoqMS4yLjEgTeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdSoqDQoNCk3hu6VjIHRpw6p1IGPhu6dhIMSR4buBIHTDoGkgbMOgIHBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSBo4buNYyB0aHXhuq10IHbDoCBr4bu5IG7Eg25nIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggdHV54buDbiBk4bulbmcgc2luaCB2acOqbi4gQ+G7pSB0aOG7gywgbmdoacOqbiBj4bupdSB04bqtcCB0cnVuZyB2w6BvIHZp4buHYyB4w6FjIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBjw6FjIHnhur91IHThu5EgbmjGsCBuxINuZyBs4buxYyBo4buNYyB04bqtcCAoYENHUEFgKSwga2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAgKGBJbnRlcm5zaGlwX0V4cGVyaWVuY2VgKSwga+G7uSBuxINuZyBnaWFvIHRp4bq/cCAoYENvbW11bmljYXRpb25fU2tpbGxzYCksIHbDoCBz4buRIGzGsOG7o25nIGThu7Egw6FuIMSRw6MgaG/DoG4gdGjDoG5oIChgUHJvamVjdHNfQ29tcGxldGVkYCkgduG7m2kgY8ahIGjhu5lpIHZp4buHYyBsw6BtIChgUGxhY2VtZW50YCkuIFRyw6puIGPGoSBz4bufIMSRw7MsIMSR4buBIHTDoGkgdGnhur9uIGjDoG5oIMSRw6FuaCBnacOhIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIHThu6tuZyB54bq/dSB04buRIMSR4bq/biBraOG6oyBuxINuZyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZy4gQ3Xhu5FpIGPDuW5nLCB04burIG5o4buvbmcgcGjDoXQgaGnhu4duIHRo4buxYyBuZ2hp4buHbSwgbmdoacOqbiBj4bupdSDEkeG7gSB4deG6pXQgbeG7mXQgc+G7kSBraHV54bq/biBuZ2jhu4sgY+G7pSB0aOG7gyBkw6BuaCBjaG8gc2luaCB2acOqbiB2w6AgY8OhYyDEkcahbiB24buLIMSRw6BvIHThuqFvIG5o4bqxbSBuw6JuZyBjYW8ga2jhuqMgbsSDbmcgY+G6oW5oIHRyYW5oIHRyw6puIHRo4buLIHRyxrDhu51uZyBsYW8gxJHhu5luZy4NCg0KIyMjICoqMS4yLjIgQ8OidSBo4buPaSBuZ2hpw6puIGPhu6l1KioNCg0KLSAgIEPDoWMgeeG6v3UgdOG7kSBo4buNYyB0aHXhuq10IHbDoCBr4bu5IG7Eg25nIG7DoG8gY8OzIG3hu5FpIGxpw6puIGjhu4cgxJHDoW5nIGvhu4MgduG7m2kgY8ahIGjhu5lpIHZp4buHYyBsw6BtIGPhu6dhIHNpbmggdmnDqm4/DQotICAgS2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAsIG7Eg25nIGzhu7FjIGjhu41jIHThuq1wIHbDoCBr4bu5IG7Eg25nIGdpYW8gdGnhur9wIOG6o25oIGjGsOG7n25nIG5oxrAgdGjhur8gbsOgbyDEkeG6v24ga2jhuqMgbsSDbmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmc/DQotICAgTmjDs20gc2luaCB2acOqbiBjw7MgxJHhurdjIMSRaeG7g20gbsOgbyAoaOG7jWMgbOG7sWMgZ2nhu49pLCBnaWFvIHRp4bq/cCB04buRdCwgY8OzIGtpbmggbmdoaeG7h20gdGjhu7FjIHThuq1wLC4uLikgY8OzIHh1IGjGsOG7m25nIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGNhbyBoxqFuIHNvIHbhu5tpIGPDoWMgbmjDs20ga2jDoWM/DQoNCiMjICoqMS4zIMSQ4buRaSB0xrDhu6NuZyB2w6AgcGjhuqFtIHZpIG5naGnDqm4gY+G7qXUqKg0KDQojIyMgKioxLjMuMSDEkOG7kWkgdMaw4bujbmcgbmdoacOqbiBj4bupdSoqDQoNCsSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1IGPhu6dhIMSR4buBIHTDoGkgbMOgIGPGoSBo4buZaSB2aeG7h2MgbMOgbSBj4bunYSBzaW5oIHZpw6puLCBj4bulIHRo4buDIGzDoCBxdXnhur90IMSR4buLbmggY8OzIGhv4bq3YyBraMO0bmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmcsIMSRxrDhu6NjIMSRbyBsxrDhu51uZyB0aMO0bmcgcXVhIGJp4bq/biDEkeG7i25oIHTDrW5oIG5o4buLIHBow6JuIGBQbGFjZW1lbnRgIHRyb25nIHThuq1wIGThu68gbGnhu4d1LiBCw6puIGPhuqFuaCDEkcOzLCDEkeG7gSB0w6BpIHhlbSB4w6l0IGPDoWMgeeG6v3UgdOG7kSBo4buNYyB0aHXhuq10IHbDoCBr4bu5IG7Eg25nIGJhbyBn4buTbSBgQ0dQQWAsIGBJbnRlcm5zaGlwX0V4cGVyaWVuY2VgLCBgQ29tbXVuaWNhdGlvbl9Ta2lsbHNgLCB2w6AgYFByb2plY3RzX0NvbXBsZXRlZGAgxJHGsOG7o2MgZ2nhuqMgxJHhu4tuaCBsw6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIGPDsyBraOG6oyBuxINuZyDhuqNuaCBoxrDhu59uZyDEkeG6v24gY8ahIGjhu5lpIHZp4buHYyBsw6BtLg0KDQojIyMgKioxLjMuMiBQaOG6oW0gdmkgbmdoacOqbiBj4bupdSoqDQoNCi0gICAqVuG7gSBu4buZaSBkdW5nOiogVOG6rXAgdHJ1bmcgcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBjw6FjIMSR4bq3YyDEkWnhu4NtIGjhu41jIHRodeG6rXQsIGvhu7kgbsSDbmcgdsOgIGtpbmggbmdoaeG7h20gdGjhu7FjIHRp4buFbiB24bubaSBr4bq/dCBxdeG6oyB0dXnhu4NuIGThu6VuZywga2jDtG5nIMSRaSBzw6J1IHbDoG8gY8OhYyB54bq/dSB04buRIGtow6FjIG5oxrAgZGFuaCB0aeG6v25nIGPhu6dhIHRyxrDhu51uZywgbmfDoG5oIGjhu41jLCBoYXkgdMOsbmggaMOsbmgga2luaCB04bq/IHbEqSBtw7QuDQotICAgKlbhu4Ega2jDtG5nIGdpYW46KiBOZ2hpw6puIGPhu6l1IHPhu60gZOG7pW5nIGLhu5kgZOG7ryBsaeG7h3UgYENvbGxlZ2UgU3R1ZGVudCBQbGFjZW1lbnQgRmFjdG9ycyBEYXRhc2V0YCDEkcaw4bujYyB0aHUgdGjhuq1wIHThu6sgdHJhbmcga2FnZ2xlLg0KDQojIyAqKjEuNCBQaMawxqFuZyBwaMOhcCBuZ2hpw6puIGPhu6l1KioNCg0KVHJvbmcgbmdoacOqbiBj4bupdSBuw6B5LCBwaMawxqFuZyBwaMOhcCDEkeG7i25oIGzGsOG7o25nIMSRxrDhu6NjIHPhu60gZOG7pW5nIG5o4bqxbSBwaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgeeG6v3UgdOG7kSBo4buNYyB0aHXhuq10IHbDoCBr4bu5IG7Eg25nIChgQ0dQQWAsIGBJbnRlcm5zaGlwX0V4cGVyaWVuY2VgLCBgQ29tbXVuaWNhdGlvbl9Ta2lsbHNgLCBgUHJvamVjdHNfQ29tcGxldGVkYCkgduG7m2kgcXV54bq/dCDEkeG7i25oIHR1eeG7g24gZOG7pW5nIChgUGxhY2VtZW50YCkuDQoNCi0gICDEkOG6p3UgdGnDqm4sIGThu68gbGnhu4d1IMSRxrDhu6NjIHjhu60gbMO9IHbDoCB0csOsbmggYsOgeSB0aMO0bmcgcXVhIHRo4buRbmcga8OqIG3DtCB04bqjIMSRxqFuIGJp4bq/biB2w6AgcGjDom4gdMOtY2ggYuG6o25nIHThuqduIHPhu5EgxJHhu4MgbMOgbSByw7UgxJHhurdjIMSRaeG7g20gdOG7lW5nIHF1YW4gY+G7p2EgbeG6q3UgbmdoacOqbiBj4bupdS4gQ8OhYyBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZyBsacOqbiB04bulYyDEkcaw4bujYyBjaHV54buDbiDEkeG7lWkgdGjDoG5oIGJp4bq/biDEkeG7i25oIHTDrW5oIGPDsyB0aOG7qSBi4bqtYyDEkeG7gyBwaMO5IGjhu6NwIHbhu5tpIHBoxrDGoW5nIHBow6FwIHBow6JuIHTDrWNoLg0KLSAgIFRp4bq/cCB0aGVvLCBraeG7g20gxJHhu4tuaCBDaGktYsOsbmggcGjGsMahbmcgxJHGsOG7o2Mgw6FwIGThu6VuZyBuaOG6sW0geMOhYyDEkeG7i25oIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHThu6tuZyBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCBiaeG6v24gcGjhu6UgdGh14buZYyAocXV54bq/dCDEkeG7i25oIHR1eeG7g24gZOG7pW5nKS4NCi0gICBOaOG7r25nIGJp4bq/biBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHPhur0gxJHGsOG7o2MgY2jhu41uIMSRxrBhIHbDoG8gcGjDom4gdMOtY2ggaOG7k2kgcXV5IG5o4buLIHBow6JuIGLhurFuZyBi4buRbiBtw7QgaMOsbmg6ICgxKSBI4buTaSBxdXkgbG9naXN0aWMsICgyKSBI4buTaSBxdXkgcHJvYml0LCAoMykgSOG7k2kgcXV5IGNsb2dsb2csIHbDoCAoNCkgTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKExQTSkuDQotICAgTeG7l2kgbcO0IGjDrG5oIMSR4buBdSDEkcaw4bujYyB0cmnhu4NuIGtoYWkgdGhlbyBoYWkgYsaw4bubYzogcGjDom4gdMOtY2ggxJHGoW4gYmnhur9uIHbDoCDEkWEgYmnhur9uLiBL4bq/dCBxdeG6oyBo4buTaSBxdXkgxJHGsOG7o2MgdHLDrG5oIGLDoHkgZMaw4bubaSBk4bqhbmcgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZywgc2FpIHPhu5EgY2h14bqpbiwgZ2nDoSB0cuG7iyBwIHbDoCDEkeG7mSB0aW4gY+G6rXksIHF1YSDEkcOzIMSRw6FuaCBnacOhIGjGsOG7m25nIHbDoCBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSB04burbmcgYmnhur9uIMSR4buZYyBs4bqtcCDEkeG6v24geMOhYyBzdeG6pXQgxJHGsOG7o2MgdHV54buDbiBk4bulbmcuDQotICAgU2F1IGPDuW5nLCDEkeG7gyBzbyBzw6FuaCBoaeG7h3UgcXXhuqMgZ2nhu69hIGPDoWMgbcO0IGjDrG5oLCBuZ2hpw6puIGPhu6l1IHPhu60gZOG7pW5nIGPDoWMgdGnDqnUgY2jDrSDEkcOhbmggZ2nDoSBn4buTbSBjaOG7iSBz4buRIEFJQyAoQWthaWtlIEluZm9ybWF0aW9uIENyaXRlcmlvbiksIMSRxrDhu51uZyBjb25nIFJPQyAoUmVjZWl2ZXIgT3BlcmF0aW5nIENoYXJhY3RlcmlzdGljKSB2w6AgbWEgdHLhuq1uIG5o4bqnbSBs4bqrbi4NCg0KIyMgKioxLjUgS+G6v3QgY+G6pXUgY+G7p2EgxJHhu4EgdMOgaSoqDQoNCk5nb8OgaSBt4bulYyBs4bulYywgZGFuaCBt4bulYyBjaOG7ryB2aeG6v3QgdOG6r3QsIGRhbmggbeG7pWMgaMOsbmgg4bqjbmggdsOgIGLhuqNuZyBiaeG7g3UsIHBo4bulIGzhu6VjIGPDuW5nIHTDoGkgbGnhu4d1IHRoYW0ga2jhuqNvIMSR4buBIHTDoGkgxJHGsOG7o2MgY2hpYSB0aMOgbmggYmEgY2jGsMahbmcgY2jDrW5oOg0KDQoqKkNoxrDGoW5nIDE6IEdp4bubaSB0aGnhu4d1IMSR4buBIHTDoGkqKg0KDQpUcsOsbmggYsOgeSBi4buRaSBj4bqjbmgsIGzDvSBkbyBjaOG7jW4gxJHhu4EgdMOgaSwgbeG7pWMgdGnDqnUgdsOgIGPDonUgaOG7j2kgbmdoacOqbiBj4bupdSwgxJHhu5FpIHTGsOG7o25nIHBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1LCBwaMawxqFuZyBwaMOhcCB2w6Aga+G6v3QgY+G6pXUgY+G7p2EgxJHhu4EgdMOgaS4NCg0KKipDaMawxqFuZyAyOiBDxqEgc+G7nyBsw70gdGh1eeG6v3QgdsOgIHBoxrDGoW5nIHBow6FwIG5naGnDqm4gY+G7qXUqKg0KDQpU4buVbmcgaOG7o3AgY8OhYyBraMOhaSBuaeG7h20sIGzDvSB0aHV54bq/dCBsacOqbiBxdWFuIMSR4bq/biBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIGPGoSBo4buZaSB2aeG7h2MgbMOgbS4gVHLDrG5oIGLDoHkgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiB2w6AgbcO0IGjDrG5oIMSR4buLbmggbMaw4bujbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgcGjDom4gdMOtY2guDQoNCioqQ2jGsMahbmcgMzogS+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSoqDQoNClBow6JuIHTDrWNoIGThu68gbGnhu4d1IHRo4buxYyBuZ2hp4buHbSwgdHLDrG5oIGLDoHkga+G6v3QgcXXhuqMgdOG7qyBjw6FjIHBoxrDGoW5nIHBow6FwIHRo4buRbmcga8OqIHbDoCBtw7QgaMOsbmggaOG7k2kgcXV5LCDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5EuDQoNCioqQ2jGsMahbmcgNDogS+G6v3QgbHXhuq1uKioNCg0KS+G6v3QgbHXhuq1uIHbDoCDEkeG7gSB4deG6pXQgbeG7mXQgc+G7kSBraHV54bq/biBuZ2jhu4sgdGjhu7FjIHRp4buFbi4NCg0KIyAqKkNIxq/GoE5HIDI6IEPGoCBT4bueIEzDnSBUSFVZ4bq+VCBWw4AgUEjGr8agTkcgUEjDgVAgTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMi4xIEzDvSB0aHV54bq/dCB24buBIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gY8ahIGjhu5lpIHZp4buHYyBsw6BtKioNCg0KQ8ahIGjhu5lpIHZp4buHYyBsw6BtIGPhu6dhIHNpbmggdmnDqm4gc2F1IGtoaSB04buRdCBuZ2hp4buHcCBsw6AgbeG7mXQgY2jhu6cgxJHhu4EgcGjhu6ljIGjhu6NwLCBjaOG7i3Ug4bqjbmggaMaw4bufbmcgYuG7n2kgbmhp4buBdSB54bq/dSB04buRIHThu6sgbsSDbmcgbOG7sWMgY8OhIG5ow6JuIMSR4bq/biDEkWnhu4F1IGtp4buHbiB0aOG7iyB0csaw4budbmcuIFF1eeG6v3QgxJHhu4tuaCB0dXnhu4NuIGThu6VuZyBj4bunYSBt4buZdCBkb2FuaCBuZ2hp4buHcCBraMO0bmcgY2jhu4kgZOG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgaOG7jWMgdOG6rXAgbcOgIGPDsm4gcGjhu6UgdGh14buZYyB2w6BvIGtpbmggbmdoaeG7h20gdGjhu7FjIHRp4buFbiB2w6Aga+G7uSBuxINuZyBt4buBbSBj4bunYSDhu6luZyB2acOqbi4NCg0KQ8OhYyDEkeG6t2MgxJFp4buDbSBo4buNYyB0aHXhuq10IHbDoCBr4bu5IG7Eg25nIMSRw7NuZyB2YWkgdHLDsiBxdWFuIHRy4buNbmcgdHJvbmcgdmnhu4djIGzDvSBnaeG6o2kgc+G7sSBraMOhYyBiaeG7h3QgduG7gSBjxqEgaOG7mWkgdmnhu4djIGzDoG0gZ2nhu69hIGPDoWMgc2luaCB2acOqbi4gVHJvbmcgbmdoacOqbiBj4bupdSBuw6B5LCBjw6FjIHnhur91IHThu5EgxJHGsOG7o2MgeGVtIHjDqXQgYmFvIGfhu5NtOg0KDQotICAgKipOxINuZyBs4buxYyBo4buNYyB04bqtcCAoYENHUEFgKSoqOiBUaOG7gyBoaeG7h24gcXVhIMSRaeG7g20gc+G7kSwgcGjhuqNuIMOhbmggbuG7gW4gdOG6o25nIGtp4bq/biB0aOG7qWMgdsOgIGto4bqjIG7Eg25nIHRp4bq/cCB0aHUgY+G7p2Egc2luaCB2acOqbi4gU2luaCB2acOqbiBjw7MgdGjDoG5oIHTDrWNoIGjhu41jIHThuq1wIHThu5F0IHRoxrDhu51uZyDEkcaw4bujYyBuaMOgIHR1eeG7g24gZOG7pW5nIMawdSB0acOqbi4NCi0gICAqKktpbmggbmdoaeG7h20gdGjhu7FjIHThuq1wIChgSW50ZXJuc2hpcF9FeHBlcmllbmNlYCkqKjogWeG6v3UgdOG7kSB0aOG7gyBoaeG7h24gc+G7sSBj4buNIHjDoXQgduG7m2kgbcO0aSB0csaw4budbmcgbMOgbSB2aeG7h2MgdGjhu7FjIHThur8sIGdpw7pwIHNpbmggdmnDqm4gdMOtY2ggbMWpeSBraW5oIG5naGnhu4dtLCBr4bu5IG7Eg25nIGNodXnDqm4gbcO0biB2w6AgaGnhu4N1IGJp4bq/dCB24buBIG5nw6BuaC4NCi0gICAqKkvhu7kgbsSDbmcgZ2lhbyB0aeG6v3AgKGBDb21tdW5pY2F0aW9uX1NraWxsc2ApKio6IE3hu5l0IHRyb25nIG5o4buvbmcga+G7uSBuxINuZyBt4buBbSBxdWFuIHRy4buNbmcgbmjhuqV0LCDhuqNuaCBoxrDhu59uZyB0cuG7sWMgdGnhur9wIMSR4bq/biBraOG6oyBuxINuZyB0csOsbmggYsOgeSDDvSB0xrDhu59uZywgbMOgbSB2aeG7h2MgbmjDs20gdsOgIHThuqFvIGThu7FuZyBt4buRaSBxdWFuIGjhu4cgdHJvbmcgY8O0bmcgdmnhu4djLg0KLSAgICoqU+G7kSBk4buxIMOhbiDEkcOjIGhvw6BuIHRow6BuaCAoYFByb2plY3RzX0NvbXBsZXRlZGApKio6IFBo4bqjbiDDoW5oIGto4bqjIG7Eg25nIMOhcCBk4bulbmcga2nhur9uIHRo4bupYyB2w6BvIGdp4bqjaSBxdXnhur90IGPDoWMgduG6pW4gxJHhu4EgY+G7pSB0aOG7gywgdGjhu4MgaGnhu4duIHPhu7EgY2jhu6cgxJHhu5luZyB2w6Aga2luaCBuZ2hp4buHbSB0aOG7sWMgaMOgbmggY+G7p2Egc2luaCB2acOqbi4NCg0KIyMgKioyLjIgTcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibioqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gbMOgIGPDtG5nIGPhu6UgcGjhu5UgYmnhur9uIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHBow6JuIHTDrWNoIHbDoCBk4buxIGLDoW8geMOhYyBzdeG6pXQgeOG6o3kgcmEgY+G7p2EgbeG7mXQgc+G7sSBraeG7h24gbmjhu4sgcGjDom4sIHRyb25nIMSRw7MgYmnhur9uIHBo4bulIHRodeG7mWMgY2jhu4kgbmjhuq1uIGdpw6EgdHLhu4sgMCBob+G6t2MgMS4gVHJvbmcgYuG7kWkgY+G6o25oIG5naGnDqm4gY+G7qXUgbsOgeSwgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIGPGoSBo4buZaSB2aeG7h2MgbMOgbSBj4bunYSBzaW5oIHZpw6puICgxID0gxJHGsOG7o2MgdHV54buDbiBk4bulbmcsIDAgPSBraMO0bmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmcpLiBN4bulYyB0acOqdSBj4bunYSBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gbMOgIMaw4bubYyBsxrDhu6NuZyB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiAkWT0xJCBk4buxYSB0csOqbiBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgJFhfMSwgWF8yLCBcZG90cywgWF9rJC4NCg0KROG6oW5nIHThu5VuZyBxdcOhdCBj4bunYSBtw7QgaMOsbmg6DQoNCiQkDQpQKFkgPSAxfFgpID0gRyhYXGJldGEpDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotICAgJEcoLikkIGzDoCBow6BtIGxpw6puIGvhur90IChsaW5rIGZ1bmN0aW9uKSwgeMOhYyDEkeG7i25oIGxv4bqhaSBtw7QgaMOsbmggY+G7pSB0aOG7gw0KLSAgICRYJCBsw6AgdmVjdG9yIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCAocHJlZGljdG9ycykNCi0gICAkXGJldGEkIGzDoCB2ZWN0b3IgaOG7hyBz4buRIGjhu5NpIHF1eSBj4bqnbiDGsOG7m2MgbMaw4bujbmcNCg0KIyMjICoqMi4yLjEgTcO0IGjDrG5oIExvZ2lzdGljIChMb2dpdCkqKg0KDQpT4butIGThu6VuZyBow6BtIGxvZ2lzdGljOg0KDQokJA0KUChZPTF8WCkgPSBcZnJhY3tlXntYXGJldGF9fXsxICsgZV57WFxiZXRhfX0NCiQkDQoNCkjDoG0gbG9naXQgZ2nhu68geMOhYyBzdeG6pXQgdHJvbmcga2hv4bqjbmcgKDAsMSkgdsOgIGjhu4cgc+G7kSAkXGJldGEkIMSRxrDhu6NjIGRp4buFbiBnaeG6o2kgdGjDtG5nIHF1YSBsb2coT2RkcyBSYXRpbykuDQoNCiMjIyAqKjIuMi4yIE3DtCBow6xuaCBQcm9iaXQqKg0KDQpT4butIGThu6VuZyBow6BtIHBow6JuIHBo4buRaSB0w61jaCBsxal5IGNodeG6qW4gaMOzYToNCg0KJCQNClAoWT0xfFgpID0gXFBoaShYXGJldGEpDQokJA0KDQpQaMO5IGjhu6NwIHRyb25nIGPDoWMgdHLGsOG7nW5nIGjhu6NwIGThu68gbGnhu4d1IGdp4bqjIMSR4buLbmggY8OzIHBow6JuIHBo4buRaSBjaHXhuqluIOG7nyBzYWkgc+G7kS4NCg0KIyMjICoqMi4yLjMgTcO0IGjDrG5oIENvbXBsZW1lbnRhcnkgbG9nLWxvZyAoQ2xvZ2xvZykqKg0KDQpT4butIGThu6VuZyBow6BtOg0KDQokJA0KUChZPTF8WCkgPSAxIC0gZV57LWVee1hcYmV0YX19DQokJA0KDQpQaMO5IGjhu6NwIGtoaSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBn4bqnbiBi4bqxbmcgMCBob+G6t2MgZ+G6p24gYuG6sW5nIDEuDQoNCiMjIyAqKjIuMi40IE3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMTVApKioNCg0KTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggbMOgIG3hu5l0IHRyxrDhu51uZyBo4bujcCDEkeG6t2MgYmnhu4d0IGPhu6dhICoqTcO0IGjDrG5oIFR1eeG6v24gdMOtbmggVOG7lW5nIHF1w6F0KiogKCpHZW5lcmFsaXplZCBMaW5lYXIgTW9kZWwgLSBHTE0qKSwgdHJvbmcgxJHDsyBow6BtIGxpw6puIGvhur90IGzDoCAqKmjDoG0gxJHhu5NuZyBuaOG6pXQqKiAoKmlkZW50aXR5IGxpbmsgZnVuY3Rpb24qKS4gQ8O0bmcgdGjhu6ljIG3DtCBow6xuaCDEkcaw4bujYyBiaeG7g3UgZGnhu4VuIG5oxrAgc2F1Og0KDQokJA0KUChZID0gMSBcbWlkIFgpID0gWFxiZXRhDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotICAgXCggWSBcKSBsw6AgYmnhur9uIHBo4bqjbiBo4buTaSBuaOG7iyBwaMOibiAoZ2nDoSB0cuG7iyAwIGhv4bq3YyAxKSwNCi0gICBcKCBYIFwpIGzDoCBtYSB0cuG6rW4gY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wLA0KLSAgIFwoIFxiZXRhIFwpIGzDoCB2ZWN0b3IgY8OhYyBo4buHIHPhu5EgaOG7k2kgcXV5Lg0KDQpNw7QgaMOsbmggbsOgeSBjaG8gcGjDqXAgZGnhu4VuIGdp4bqjaSB0cuG7sWMgdGnhur9wIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIFwoIFkgPSAxIFwpIG5oxrAgbeG7mXQgaMOgbSB0dXnhur9uIHTDrW5oIGPhu6dhIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggXCggWCBcKS4NCg0Kxq91IMSRaeG7g20gY+G7p2EgbcO0IGjDrG5oIG7DoHkgbMOgIMSRxqFuIGdp4bqjbiwgZOG7hSDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIHBoxrDGoW5nIHBow6FwIE9MUyB2w6AgZOG7hSBkaeG7hW4gZ2nhuqNpLiBUdXkgbmhpw6puLCB2w6wgZ2nDoSB0cuG7iyBk4buxIGLDoW8gY8OzIHRo4buDIG7hurFtIG5nb8OgaSBraG/huqNuZyBbMCwgMV0sIG3DtCBow6xuaCBuw6B5IHRoxrDhu51uZyBraMO0bmcgxJHhuqNtIGLhuqNvIMO9IG5naMSpYSB4w6FjIHN14bqldC4gxJBp4buBdSBuw6B5IGThuqtuIMSR4bq/biB2aSBwaOG6oW0gZ2nhuqMgxJHhu4tuaCB2w6AgxJHhu5kgY2jDrW5oIHjDoWMgdGjhuqVwIGtoaSBk4buxIMSRb8OhbiBow6BuaCB2aSBuaOG7iyBwaMOibi4NCg0KVHJvbmcgR0xNLCBtw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCB24bqrbiDEkcaw4bujYyBz4butIGThu6VuZyBuaMawIG3hu5l0IGLGsOG7m2MgdGhhbSBjaGnhur91IGJhbiDEkeG6p3UgxJHhu4Mgc28gc8OhbmggduG7m2kgY8OhYyBtw7QgaMOsbmggbG9naXQsIHByb2JpdCBob+G6t2MgY2xvZ2xvZy4NCg0KIyMjICoqMi4yLjUgUGjGsMahbmcgcGjDoXAgxrDhu5tjIGzGsOG7o25nOiBNYXhpbXVtIExpa2VsaWhvb2QgRXN0aW1hdGlvbiAoTUxFKSoqDQoNCkPDoWMgbcO0IGjDrG5oIG5o4buLIHBow6JuIG5oxrAgbG9naXQsIHByb2JpdCB2w6AgY2xvZ2xvZyDEkeG7gXUgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGLhurFuZyBwaMawxqFuZyBwaMOhcCAqKsaw4bubYyBsxrDhu6NuZyBo4bujcCBsw70gdOG7kWkgxJFhIChNTEUpKiouIMSQw6J5IGzDoCBwaMawxqFuZyBwaMOhcCB0w6xtIGdpw6EgdHLhu4sgdGhhbSBz4buRICRcYmV0YSQgc2FvIGNobyB4w6FjIHN14bqldCB04bqhbyByYSBk4buvIGxp4buHdSBxdWFuIHPDoXQgbMOgIGNhbyBuaOG6pXQuIFRyb25nIEdMTXMsIGjDoG0gaOG7o3AgbMO9IMSRxrDhu6NjIHjDonkgZOG7sW5nIGThu7FhIHRyw6puIHBow6JuIHBo4buRaSBuaOG7iyB0aOG7qWMgdsOgIHThu5FpIMawdSBow7NhIGLhurFuZyBjw6FjIHRodeG6rXQgdG/DoW4gbmjGsCBOZXd0b24tUmFwaHNvbi4NCg0KVHJvbmcgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIHRodeG7mWMgaOG7jSBHTE0gbmjGsCBsb2dpdCwgcHJvYml0IHbDoCBjbG9nbG9nLCB0aGFtIHPhu5EgJFxiZXRhJCBraMO0bmcgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGLhurFuZyBwaMawxqFuZyBwaMOhcCBiw6xuaCBwaMawxqFuZyB04buRaSB0aGnhu4N1IG5oxrAgdHJvbmcgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggY+G7lSDEkWnhu4NuLCBtw6AgdGhheSB2w6BvIMSRw7Mgc+G7rSBk4bulbmcgcGjGsMahbmcgcGjDoXAgxrDhu5tjIGzGsOG7o25nIGjhu6NwIGzDvSB04buRaSDEkWEgKE1heGltdW0gTGlrZWxpaG9vZCBFc3RpbWF0aW9uIC0gTUxFKS4NCg0KUGjGsMahbmcgcGjDoXAgTUxFIHTDrG0gdOG6rXAgZ2nDoSB0cuG7iyBj4bunYSAkXGJldGEkIHNhbyBjaG8gKipow6BtIGjhu6NwIGzDvSAobGlrZWxpaG9vZCBmdW5jdGlvbikqKiDEkeG6oXQgY+G7sWMgxJHhuqFpIOKAkyBuZ2jEqWEgbMOgLCBraOG6oyBuxINuZyB04bqhbyByYSBi4buZIGThu68gbGnhu4d1IHF1YW4gc8OhdCB04burIG3DtCBow6xuaCBsw6AgY2FvIG5o4bqldC4gSMOgbSBo4bujcCBsw70gdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG5o4buLIHBow6JuIGThu7FhIHRyw6puIHBow6JuIHBo4buRaSBuaOG7iyB0aOG7qWM6DQoNCiQkDQpMKFxiZXRhKSA9IFxwcm9kX3tpPTF9XntufSBbUF9pXV57eV9pfSBbMSAtIFBfaV1eezEgLSB5X2l9LCBccXVhZCBcdGV4dHt0cm9uZyDEkcOzIH0gUF9pID0gRyhYX2lcYmV0YSkNCiQkDQoNCsSQ4buDIMSRxqFuIGdp4bqjbiBow7NhIHTDrW5oIHRvw6FuLCB0YSBs4bqleSBsb2cgY+G7p2EgaMOgbSBo4bujcCBsw70gxJHhu4MgY8OzICoqbG9nLWxpa2VsaWhvb2QqKjoNCg0KJCQNClxsb2cgTChcYmV0YSkgPSBcc3VtX3tpPTF9XntufSBcbGVmdFsgeV9pIFxsb2cgUF9pICsgKDEgLSB5X2kpIFxsb2coMSAtIFBfaSkgXHJpZ2h0XQ0KJCQNCg0KR2nhuqNpIGLDoGkgdG/DoW4gdOG7kWkgxJFhIGjDs2EgbG9nLWxpa2VsaWhvb2QgYuG6sW5nIGPDoWMgdGh14bqtdCB0b8OhbiBz4buRIGjhu41jIG5oxrAgKipOZXd0b24tUmFwaHNvbioqIGhv4bq3YyAqKkZpc2hlciBTY29yaW5nKiosIHRhIHRodSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgJFxoYXR7XGJldGF9JC4NCg0KIyMgKioyLjMgUmVsYXRpdmUgUmlzayB2w6AgT2RkcyBSYXRpbyoqDQoNClRyb25nIG5naGnDqm4gY+G7qXUgeMOjIGjhu5lpLCBoYWkgY2jhu4kgc+G7kSBwaOG7lSBiaeG6v24gZMO5bmcgxJHhu4MgxJFvIGzGsOG7nW5nIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgbeG7mXQgxJHhurdjIMSRaeG7g20gdsOgIG3hu5l0IGvhur90IHF14bqjIGzDoCAqKlJlbGF0aXZlIFJpc2sgKFJSKSoqIHbDoCAqKk9kZHMgUmF0aW8gKE9SKSoqLiBDw6FjIGNo4buJIHPhu5EgbsOgeSBnacO6cCDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSBraMOhYyBiaeG7h3QgduG7gSBraOG6oyBuxINuZyB44bqjeSByYSBt4buZdCBz4buxIGtp4buHbiBnaeG7r2EgY8OhYyBuaMOzbSBjw7MgaG/hurdjIGtow7RuZyBjw7MgbeG7mXQgxJHhurdjIMSRaeG7g20gbmjhuqV0IMSR4buLbmggKHbDrSBk4bulOiBjw7Mga2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAgaG/hurdjIGtow7RuZykuDQoNCiMjIyAqKjIuMy4xIFJlbGF0aXZlIFJpc2sgKFJSKSoqDQoNCioqUmVsYXRpdmUgUmlzayAoUlIpKiog4oCTIGhheSBjw7JuIGfhu41pIGzDoCAqKm5ndXkgY8ahIHTGsMahbmcgxJHhu5FpKiog4oCTIHNvIHPDoW5oIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIGdp4buvYSBoYWkgbmjDs206DQoNCiQkDQpSUiA9IFxmcmFje1BfMX17UF8wfQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSAgICRQXzEkOiBYw6FjIHN14bqldCBzaW5oIHZpw6puICoqY8OzIMSR4bq3YyDEkWnhu4NtKiogxJHGsOG7o2MgdHV54buDbiBk4bulbmcNCi0gICAkUF8wJDogWMOhYyBzdeG6pXQgc2luaCB2acOqbiAqKmtow7RuZyBjw7MgxJHhurdjIMSRaeG7g20qKiDEkcaw4bujYyB0dXnhu4NuIGThu6VuZw0KDQoqKkRp4buFbiBnaeG6o2k6KioNCg0KLSAgIFJSID0gMTogS2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgaGFpIG5ow7NtDQotICAgUlIgPiAxOiBOaMOzbSBjw7MgxJHhurdjIMSRaeG7g20gY8OzIGto4bqjIG7Eg25nIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGNhbyBoxqFuDQotICAgUlIgPCAxOiBOaMOzbSBjw7MgxJHhurdjIMSRaeG7g20gY8OzIGto4bqjIG7Eg25nIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIHRo4bqlcCBoxqFuDQoNCiMjIyAqKjIuMy4yIE9kZHMgUmF0aW8gKE9SKSoqDQoNCioqT2RkcyBSYXRpbyAoT1IpKiogxJFvIGzGsOG7nW5nIHThu7cgbOG7hyBvZGRzIChraOG6oyBuxINuZyB44bqjeSByYSBzbyB24bubaSBraMO0bmcgeOG6o3kgcmEpIGdp4buvYSBoYWkgbmjDs206DQoNCiQkDQpPUiA9IFxmcmFje1BfMSAvICgxIC0gUF8xKX17UF8wIC8gKDEgLSBQXzApfSA9IFxmcmFje1BfMSAoMSAtIFBfMCl9e1BfMCAoMSAtIFBfMSl9DQokJA0KDQpUcm9uZyBtw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljLCBr4bq/dCBxdeG6oyBo4buTaSBxdXkgY2jDrW5oIGzDoCBsb2coT1IpOg0KDQokJA0KXGxvZyhPUikgPSBYXGJldGENCiQkDQoNCioqRGnhu4VuIGdp4bqjaToqKg0KDQotICAgT1IgPSAxOiBLaMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgbmjDs20NCi0gICBPUiA+IDE6IE5ow7NtIGPDsyDEkeG6t2MgxJFp4buDbSBjw7Mgb2RkcyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBjYW8gaMahbg0KLSAgIE9SIDwgMTogTmjDs20gY8OzIMSR4bq3YyDEkWnhu4NtIGPDsyBvZGRzIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIHRo4bqlcCBoxqFuDQoNCiMjICoqMi40IEThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUqKg0KDQojIyMgKioyLjQuMSBHaeG7m2kgdGhp4buHdSBk4buvIGxp4buHdSBn4buRYyB2w6AgeOG7rSBsw70gYmnhur9uKioNCmBgYHtyfQ0KIyDEkOG7jWMgZOG7ryBsaeG7h3UgZ+G7kWMNCmRhdGFfcmF3IDwtIHJlYWQuY3N2KCJDOi9Vc2Vycy9QSEFOIFRIQU5IIFRST05HL0Rvd25sb2Fkcy9kYXRhbW9udDIuY3N2IikNCg0KIyBY4butIGzDvSB2w6AgdOG6oW8gYmnhur9uIG3hu5tpIHRoZW8gecOqdSBj4bqndQ0KZGF0YSA8LSBkYXRhX3JhdyB8Pg0KICBtdXRhdGUoDQogICAgIyBU4bqhbyBiaeG6v24gbeG7m2kgY2hvIENvbW11bmljYXRpb25fU2tpbGxzIHRoZW8gMyBi4bqtYw0KICAgIENvbW11bmljYXRpb25fTGV2ZWwgPSBjYXNlX3doZW4oDQogICAgICBDb21tdW5pY2F0aW9uX1NraWxscyA8IDUgfiAiS8OpbSIsDQogICAgICBDb21tdW5pY2F0aW9uX1NraWxscyA+PSA1ICYgQ29tbXVuaWNhdGlvbl9Ta2lsbHMgPD0gNyB+ICJUcnVuZyBiw6xuaCIsDQogICAgICBDb21tdW5pY2F0aW9uX1NraWxscyA+PSA4ICYgQ29tbXVuaWNhdGlvbl9Ta2lsbHMgPD0gMTAgfiAiVOG7kXQiDQogICAgKSwNCiMgVOG6oW8gYmnhur9uIG3hu5tpIGNobyBDR1BBIHRoZW8gNCBi4bqtYw0KICAgIENHUEEgPSBjYXNlX3doZW4oDQogICAgICBBY2FkZW1pY19QZXJmb3JtYW5jZSA8IDUgfiAiWeG6v3UiLA0KICAgICAgQWNhZGVtaWNfUGVyZm9ybWFuY2UgPj0gNSAmIEFjYWRlbWljX1BlcmZvcm1hbmNlIDwgNi41IH4gIlRydW5nIGLDrG5oIiwNCiAgICAgIEFjYWRlbWljX1BlcmZvcm1hbmNlID49IDYuNSAmIEFjYWRlbWljX1BlcmZvcm1hbmNlIDwgOCB+ICJLaMOhIiwNCiAgICAgIEFjYWRlbWljX1BlcmZvcm1hbmNlID49IDggJiBBY2FkZW1pY19QZXJmb3JtYW5jZSA8PSAxMCB+ICJHaeG7j2kiDQogICAgKSAgDQogICAgKQ0KDQojIENodXnhu4NuIMSR4buVaSBjw6FjIGJp4bq/biB0aMOgbmggZmFjdG9yIHbDoCBz4bqvcCB44bq/cCB0aOG7qSB04buxDQpkYXRhJENHUEEgPC0gZmFjdG9yKGRhdGEkQ0dQQSwgbGV2ZWxzID0gYygiWeG6v3UiLCAiVHJ1bmcgYsOsbmgiLCAiS2jDoSIsICJHaeG7j2kiKSkNCmRhdGEkQ29tbXVuaWNhdGlvbl9MZXZlbCA8LSBmYWN0b3IoZGF0YSRDb21tdW5pY2F0aW9uX0xldmVsLCBsZXZlbHMgPSBjKCJLw6ltIiwgIlRydW5nIGLDrG5oIiwgIlThu5F0IikpDQpkYXRhJEludGVybnNoaXBfRXhwZXJpZW5jZSA8LSBhcy5mYWN0b3IoZGF0YSRJbnRlcm5zaGlwX0V4cGVyaWVuY2UpDQpkYXRhJFBsYWNlbWVudCA8LSBhcy5mYWN0b3IoZGF0YSRQbGFjZW1lbnQpDQoNCiMgSGnhu4NuIHRo4buLIGPhuqV1IHRyw7pjIGPhu6dhIGLhu5kgZOG7ryBsaeG7h3Ugc2F1IGtoaSB44butIGzDvQ0Kc3RyKGRhdGFbLCBjKCJDR1BBIiwgIkludGVybnNoaXBfRXhwZXJpZW5jZSIsICJDb21tdW5pY2F0aW9uX0xldmVsIiwgIlByb2plY3RzX0NvbXBsZXRlZCIsICJQbGFjZW1lbnQiKV0pDQpgYGANCg0KfCBUw6puIGJp4bq/biAgICAgICAgICAgICAgICAgICB8IEtp4buDdSBk4buvIGxp4buHdSB8IE3DtCB04bqjIG7hu5lpIGR1bmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgYENHUEFgIHwgRmFjdG9yICAgICAgIHwgTsSDbmcgbOG7sWMgaOG7jWMgdOG6rXAgxJHGsOG7o2MgcGjDom4gbG/huqFpOiAiWeG6v3UiLCAiVHJ1bmcgYsOsbmgiLCAiS2jDoSIsICJHaeG7j2kiLiB8DQp8IGBJbnRlcm5zaGlwX0V4cGVyaWVuY2VgICAgIHwgRmFjdG9yICAgICAgIHwgU2luaCB2acOqbiBjw7Mga2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAga2jDtG5nPyAoYFllc2AsIGBOb2ApICAgICAgICAgICAgICAgIHwNCnwgYENvbW11bmljYXRpb25fTGV2ZWxgICAgICAgfCBGYWN0b3IgICAgICAgfCBL4bu5IG7Eg25nIGdpYW8gdGnhur9wIMSRxrDhu6NjIHBow6JuIGxv4bqhaTogIkvDqW0iLCAiVHJ1bmcgYsOsbmgiLCAiVOG7kXQiLiAgICAgICAgIHwNCnwgYFByb2plY3RzX0NvbXBsZXRlZGAgICAgICAgfCBOdW1lcmljICAgICAgfCBT4buRIGzGsOG7o25nIGThu7Egw6FuIMSRw6MgaG/DoG4gdGjDoG5oLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYFBsYWNlbWVudGAgICAgICAgICAgICAgICAgfCBGYWN0b3IgICAgICAgfCBTaW5oIHZpw6puIGPDsyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBraMO0bmc/IChgWWVzYCwgYE5vYCkgICAgICAgICAgICAgICAgICAgIHwNCg0KKipOaOG6rW4geMOpdCoqDQoNCkLhu5kgZOG7ryBsaeG7h3Ugc2F1IGtoaSB44butIGzDvSBn4buTbSA1IGJp4bq/biB2w6AgMTAwMDAgcXVhbiBzw6F0LCDEkcaw4bujYyBjaGlhIHRow6BuaCBoYWkgbmjDs206IGJp4bq/biDEkeG7i25oIGzGsOG7o25nIHbDoCBiaeG6v24gxJHhu4tuaCB0w61uaC4NCg0KLSAgICoqQmnhur9uIMSR4buLbmggbMaw4bujbmc6KiogQ2jhu4kgY8OzIG3hu5l0IGJp4bq/biBsw6AgYFByb2plY3RzX0NvbXBsZXRlZGAuIMSQw6J5IGzDoCBiaeG6v24gcuG7nWkgcuG6oWMsIMSRbyBsxrDhu51uZyBz4buRIGzGsOG7o25nIGThu7Egw6FuLCBjw7MgdGjhu4Mgc+G7rSBk4bulbmcgxJHhu4Mgc28gc8OhbmggZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBnaeG7r2EgY8OhYyBuaMOzbS4NCi0gICAqKkPDoWMgYmnhur9uIMSR4buLbmggdMOtbmg6KiogQuG7kW4gYmnhur9uIGPDsm4gbOG6oWkgdGh14buZYyBsb+G6oWkgxJHhu4tuaCB0w61uaC4gQmnhur9uIHBo4bulIHRodeG7mWMgbMOgIGBQbGFjZW1lbnRgLCB2w6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIGzDoCBgQ0dQQWAsIGBJbnRlcm5zaGlwX0V4cGVyaWVuY2VgLCBgQ29tbXVuaWNhdGlvbl9MZXZlbGAuIEPDoWMgYmnhur9uIG7DoHkgbWFuZyB0aMO0bmcgdGluIGThuqFuZyBkYW5oIG3hu6VjLCBwaMO5IGjhu6NwIGNobyBwaMOibiB0w61jaCB04bqnbiBzdeG6pXQsIGtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyB2w6AgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuLg0KDQojIyMgKioyLjQuMiBE4buvIGxp4buHdSB2w6AgY8OhYyBiaeG6v24gc+G7rSBk4bulbmcgdHJvbmcgbmdoacOqbiBj4bupdSoqDQoNCkThu68gbGnhu4d1IMSRxrDhu6NjIHPhu60gZOG7pW5nIHRyb25nIG5naGnDqm4gY+G7qXUgbsOgeSB04bqtcCB0cnVuZyB2w6BvIGPDoWMgeeG6v3UgdOG7kSBjw7Mga2jhuqMgbsSDbmcg4bqjbmggaMaw4bufbmcgdHLhu7FjIHRp4bq/cCDEkeG6v24ga+G6v3QgcXXhuqMgdHV54buDbiBk4bulbmcgY+G7p2Egc2luaCB2acOqbi4NCg0KQmnhur9uIHBo4bulIHRodeG7mWMgY2jDrW5oIHRyb25nIG3DtCBow6xuaCBsw6A6DQoNCi0gICAqKmBQbGFjZW1lbnRgKio6IFRo4buDIGhp4buHbiBzaW5oIHZpw6puICoqY8OzIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGhheSBraMO0bmcqKiwgxJHGsOG7o2MgbcOjIGjDs2EgbOG6oWkgZMaw4bubaSBk4bqhbmcgbmjhu4sgcGjDom46DQogICAgLSAgIGAxYDogbuG6v3Ugc2luaCB2acOqbiDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyAoUGxhY2VtZW50ID0gIlllcyIpDQogICAgLSAgIGAwYDogbuG6v3Ugc2luaCB2acOqbiBraMO0bmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKFBsYWNlbWVudCA9ICJObyIpDQoNCkPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCDEkcaw4bujYyBjaOG7jW4gbOG7jWMgYmFvIGfhu5NtOg0KDQotICAgKipgQ0dQQWAqKjogTsSDbmcgbOG7sWMgaOG7jWMgdOG6rXAgKFnhur91LCBUcnVuZyBiw6xuaCwgS2jDoSwgR2nhu49pKQ0KLSAgICoqYEludGVybnNoaXBfRXhwZXJpZW5jZWAqKjogS2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAgKFllcy9ObykNCi0gICAqKmBDb21tdW5pY2F0aW9uX0xldmVsYCoqOiBL4bu5IG7Eg25nIGdpYW8gdGnhur9wIChLw6ltLCBUcnVuZyBiw6xuaCwgVOG7kXQpDQotICAgKipgUHJvamVjdHNfQ29tcGxldGVkYCoqOiBT4buRIGzGsOG7o25nIGThu7Egw6FuIMSRw6MgaG/DoG4gdGjDoG5oDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4buZIGThu68gbGnhu4d1IGNo4buJIGNo4bupYSBjw6FjIGJp4bq/biBj4bqnbiBwaMOibiB0w61jaA0KZGF0YTEgPC0gZGF0YSAlPiUNCiAgZHBseXI6OnNlbGVjdChDR1BBLCBJbnRlcm5zaGlwX0V4cGVyaWVuY2UsIENvbW11bmljYXRpb25fTGV2ZWwsIFByb2plY3RzX0NvbXBsZXRlZCwgUGxhY2VtZW50KQ0KDQojIMSQ4buVaSB0w6puIGPhu5l0IGNobyBk4buFIMSR4buNYw0KY29sbmFtZXMoZGF0YTEpIDwtIGMoIkhvY0x1YyIsICJUaHVjVGFwIiwgIkdpYW9UaWVwIiwgIlNvRHVBbiIsICJUdXllbkR1bmciKQ0KDQojIFhlbSB0csaw4bubYyBk4buvIGxp4buHdSBt4bubaQ0Kc3RyKGRhdGExKQ0KaGVhZChkYXRhMSkNCmBgYA0KDQojIyAqKjIuNSBRdXkgdHLDrG5oIG5naGnDqm4gY+G7qXUqKg0KDQpRdXkgdHLDrG5oIG5naGnDqm4gY+G7qXUgxJHGsOG7o2MgeMOieSBk4buxbmcgdGhlbyBjw6FjIGLGsOG7m2MgbG9naWMgdsOgIHR14bqnbiB04buxIG5o4bqxbSDEkeG6o20gYuG6o28gdMOtbmggaOG7hyB0aOG7kW5nLCDEkeG7mSB0aW4gY+G6rXkgdsOgIGPGoSBz4bufIGtob2EgaOG7jWMgdHJvbmcgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UuDQpgYGB7cn0NCmdyVml6KCINCmRpZ3JhcGggcmVzZWFyY2hfZmxvdyB7DQogIGdyYXBoIFtyYW5rZGlyID0gVEJdDQogIG5vZGUgW3NoYXBlID0gcmVjdGFuZ2xlLCBzdHlsZSA9IGZpbGxlZCwgY29sb3IgPSBncmVlbiwgZm9udG5hbWUgPSAnVGltZXMgTmV3IFJvbWFuJywgZm9udHNpemUgPSAxNl0NCg0KICBBIFtsYWJlbCA9ICdCxrDhu5tjIDE6IFThuqNpICYgeOG7rSBsw70gZOG7ryBsaeG7h3UnXQ0KICBCIFtsYWJlbCA9ICdCxrDhu5tjIDI6IFRo4buRbmcga8OqIG3DtCB04bqjXG4oUGjDom4gdMOtY2ggxJHGoW4gYmnhur9uKSddDQogIEMgW2xhYmVsID0gJ0LGsOG7m2MgMzogS2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZVxuKEdp4buvYSBiaeG6v24gcGjhu6UgdGh14buZYyB2w6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIMSR4buLbmggdMOtbmgpJ10NCiAgRCBbbGFiZWwgPSAnQsaw4bubYyA0OiBQaMOibiB0w61jaCBj4bq3cCBiaeG6v25cbihC4bqjbmcgdOG6p24gc+G7kSwgYmnhu4N1IMSR4buTLCBSUiAmIE9SKSddDQogIEUgW2xhYmVsID0gJ0LGsOG7m2MgNTogxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCBuaOG7iyBwaMOiblxuKExvZ2l0LCBQcm9iaXQsIENsb2dsb2csIExNUCknXQ0KICBGIFtsYWJlbCA9ICdCxrDhu5tjIDY6IFNvIHPDoW5oIG3DtCBow6xuaFxuKEFJQywgUk9DLCBNYSB0cuG6rW4gbmjhuqdtIGzhuqtuKSddDQogIEcgW2xhYmVsID0gJ0LGsOG7m2MgNzogxJDhu4EgeHXhuqV0ICYgS2h1eeG6v24gbmdo4buLXG4oROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgbcO0IGjDrG5oKSddDQoNCiAgQSAtPiBCIC0+IEMgLT4gRCAtPiBFIC0+IEYgLT4gRw0KfQ0KIikNCmBgYA0KDQotLS0NCg0KIyAqKkNIxq/GoE5HIDM6IEvhur5UIFFV4bqiIE5HSEnDik4gQ+G7qFUqKg0KDQojIyAqKjMuMSBUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gbmdoacOqbiBj4bupdSoqDQoNCiMjIyAqKjMuMS4xIFRo4buRbmcga8OqIG3DtCB04bqjIGJp4bq/biBwaOG7pSB0aHXhu5ljKioNCg0KKipCaeG6v24gY8ahIGjhu5lpIHZp4buHYyBsw6BtIChUdXllbkR1bmcpKioNCg0KKipM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0KioNCmBgYHtyfQ0KdGFibGUoZGF0YTEkVHV5ZW5EdW5nKQ0KcHJvcC50YWJsZSh0YWJsZShkYXRhMSRUdXllbkR1bmcpKQ0KYGBgDQoNCg0KKipW4bq9IGJp4buDdSDEkeG7kyB0csOybioqDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHN14bqldA0KcGxhY2VtZW50X2ZyZXEgPC0gdGFibGUoZGF0YTEkVHV5ZW5EdW5nKQ0KcGxhY2VtZW50X3Byb3AgPC0gcHJvcC50YWJsZShwbGFjZW1lbnRfZnJlcSkNCg0KIyBDaHV54buDbiB0aMOgbmggZGF0YSBmcmFtZSDEkeG7gyBkw7luZyBnZ3Bsb3QyDQpwbGFjZW1lbnRfZGYgPC0gYXMuZGF0YS5mcmFtZShwbGFjZW1lbnRfcHJvcCkNCmNvbG5hbWVzKHBsYWNlbWVudF9kZikgPC0gYygiVHV5ZW5EdW5nIiwgIlByb3BvcnRpb24iKQ0KDQojIFTDrW5oIHBo4bqnbiB0csSDbSDEkeG7gyBoaeG7g24gdGjhu4sgbmjDo24NCnBsYWNlbWVudF9kZiRQZXJjZW50IDwtIHBhc3RlMChyb3VuZChwbGFjZW1lbnRfZGYkUHJvcG9ydGlvbiAqIDEwMCwgMSksICIlIikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyB0csOybiBi4bqxbmcgZ2dwbG90Mg0KZ2dwbG90KHBsYWNlbWVudF9kZiwgYWVzKHggPSAiIiwgeSA9IFByb3BvcnRpb24sIGZpbGwgPSBUdXllbkR1bmcpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBQZXJjZW50KSwgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgVHV54buDbiBk4bulbmciLCB4ID0gTlVMTCwgeSA9IE5VTEwpICsNCiAgdGhlbWVfdm9pZCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gICBOaMOzbSBraMO0bmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKE5vKSBjaGnhur9tIHPhu5EgbMaw4bujbmcgbOG7m24gdsaw4bujdCB0cuG7mWkgduG7m2kgODM0MSBzaW5oIHZpw6puLCB0xrDGoW5nIOG7qW5nIGtob+G6o25nIDgzLjQxJSB04buVbmcgc+G7kSBt4bqrdS4NCi0gICBOaMOzbSDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyAoWWVzKSBjw7MgMTY1OSBzaW5oIHZpw6puLCBjaGnhur9tIGtob+G6o25nIDE2LjU5JS4NCg0KTmjDrG4gY2h1bmcsIGJp4buDdSDEkeG7kyBjaG8gdGjhuqV5IHThu7cgbOG7hyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyB0aOG6pXAgaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIHThu7cgbOG7hyBraMO0bmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmcuDQoNCiMjIyAqKjMuMS4yIFRo4buRbmcga8OqIG3DtCB04bqjIGJp4bq/biDEkeG7mWMgbOG6rXAqKg0KDQojIyMjICoqYS4gTsSDbmcgbOG7sWMgaOG7jWMgdOG6rXAgKEhvY0x1YykqKg0KYGBge3J9DQojIFThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNobyBIb2NMdWMNCmZyZXFfaG9jbHVjIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YTEkSG9jTHVjKSkNCg0KY29sbmFtZXMoZnJlcV9ob2NsdWMpIDwtIGMoIkhvY0x1YyIsICJDb3VudCIpDQoNCiMgVMOtbmggdOG7tyBs4buHIHBo4bqnbiB0csSDbQ0KZnJlcV9ob2NsdWMkUGVyY2VudCA8LSBwYXN0ZTAocm91bmQoZnJlcV9ob2NsdWMkQ291bnQgLyBzdW0oZnJlcV9ob2NsdWMkQ291bnQpICogMTAwLCAxKSwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuIHbhu5tpIGdncGxvdDINCmdncGxvdChmcmVxX2hvY2x1YywgYWVzKHggPSAiIiwgeSA9IENvdW50LCBmaWxsID0gSG9jTHVjKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxLCBjb2xvciA9ICJ3aGl0ZSIpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBQZXJjZW50KSwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSwgDQogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArDQogIGxhYnModGl0bGUgPSAiVOG7tyBs4buHIEjhu41jIGzhu7FjIGPhu6dhIHNpbmggdmnDqm4iLCB4ID0gTlVMTCwgeSA9IE5VTEwpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiksDQogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpDQogICkNCmBgYA0KKipOaOG6rW4geMOpdDoqKiANCg0KLUjhu41jIGzhu7FjIHnhur91IGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgduG7m2kgMzksNSUuDQoNCi1I4buNYyBs4buxYyBnaeG7j2kgY2hp4bq/bSB04bu3IGzhu4cga2jDoSBjYW8gduG7m2kgMzAsNiUsIGNo4buJIMSR4bupbmcgc2F1IGjhu41jIGzhu7FjIHnhur91Lg0KDQotSOG7jWMgbOG7sWMgdHJ1bmcgYsOsbmggY2hp4bq/bSAxOSw2JS4NCg0KLUjhu41jIGzhu7FjIGtow6EgY2hp4bq/bSB04bu3IGzhu4cgdGjhuqVwIG5o4bqldCB24bubaSAxMCwzJS4NCg0KVOG7qyBjw6FjIHPhu5EgbGnhu4d1IHRyw6puLCBjw7MgdGjhu4MgdGjhuqV5IHLhurFuZyDEkWEgc+G7kSBzaW5oIHZpw6puIGPDsyBo4buNYyBs4buxYyB54bq/dSBob+G6t2MgZ2nhu49pLCB0cm9uZyBraGkgdOG7tyBs4buHIHNpbmggdmnDqm4gY8OzIGjhu41jIGzhu7FjIHRydW5nIGLDrG5oIHbDoCBraMOhIGzhuqFpIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDLg0KDQojIyMjICoqYi4gS2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAgKFRodWNUYXApKioNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc+G7kSBjaG8gVGh1Y1RhcA0KZnJlcV9UaHVjVGFwIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YTEkVGh1Y1RhcCkpDQoNCmNvbG5hbWVzKGZyZXFfVGh1Y1RhcCkgPC0gYygiVGh1Y1RhcCIsICJDb3VudCIpDQoNCiMgVMOtbmggdOG7tyBs4buHIHBo4bqnbiB0csSDbQ0KZnJlcV9UaHVjVGFwJFBlcmNlbnQgPC0gcGFzdGUwKHJvdW5kKGZyZXFfVGh1Y1RhcCRDb3VudCAvIHN1bShmcmVxX1RodWNUYXAkQ291bnQpICogMTAwLCAxKSwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuIHbhu5tpIGdncGxvdDINCmdncGxvdChmcmVxX1RodWNUYXAsIGFlcyh4ID0gIiIsIHkgPSBDb3VudCwgZmlsbCA9IFRodWNUYXApKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEsIGNvbG9yID0gIndoaXRlIikgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IFBlcmNlbnQpLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCANCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDQpICsNCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgVGjhu7FjIHThuq1wIGPhu6dhIHNpbmggdmnDqm4iLCB4ID0gTlVMTCwgeSA9IE5VTEwpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiksDQogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpDQogICkNCmBgYA0KKipOaOG6rW4geMOpdDoqKiANCg0KLVThu7cgbOG7hyBzaW5oIHZpw6puIGtow7RuZyB0aOG7sWMgdOG6rXAgKE5vKSBjaGnhur9tIMSRYSBz4buRLCB24bubaSA2MCw0JS4NCg0KLVThu7cgbOG7hyBzaW5oIHZpw6puIGPDsyB0aOG7sWMgdOG6rXAgKFllcykgY2hp4bq/bSB0aGnhu4N1IHPhu5EsIHbhu5tpIDM5LDYlLg0KDQpCaeG7g3UgxJHhu5MgY2hvIHRo4bqleSBzaW5oIHZpw6puIGtow7RuZyB0aGFtIGdpYSB0aOG7sWMgdOG6rXAgY2hp4bq/bSDEkWEgc+G7kS4NCg0KIyMjIyAqKmMuIEvhu7kgbsSDbmcgZ2lhbyB0aeG6v3AgKEdpYW9UaWVwKSoqDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2hvIEdpYW9UaWVwDQpmcmVxX0dpYW9UaWVwIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YTEkR2lhb1RpZXApKQ0KDQpjb2xuYW1lcyhmcmVxX0dpYW9UaWVwKSA8LSBjKCJHaWFvVGllcCIsICJDb3VudCIpDQoNCiMgVMOtbmggdOG7tyBs4buHIHBo4bqnbiB0csSDbQ0KZnJlcV9HaWFvVGllcCRQZXJjZW50IDwtIHBhc3RlMChyb3VuZChmcmVxX0dpYW9UaWVwJENvdW50IC8gc3VtKGZyZXFfR2lhb1RpZXAkQ291bnQpICogMTAwLCAxKSwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuIHbhu5tpIGdncGxvdDINCmdncGxvdChmcmVxX0dpYW9UaWVwLCBhZXMoeCA9ICIiLCB5ID0gQ291bnQsIGZpbGwgPSBHaWFvVGllcCkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gUGVyY2VudCksIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIA0KICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gNCkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyBraOG6oyBuxINuZyBnaWFvIHRp4bq/cCBj4bunYSBzaW5oIHZpw6puIiwgeCA9IE5VTEwsIHkgPSBOVUxMKSArDQogIHRoZW1lX3ZvaWQoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIpLA0KICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKQ0KICApDQpgYGANCioqTmjhuq1uIHjDqXQ6KiogDQoNCi1HaWFvIHRp4bq/cCBrw6ltIGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgduG7m2kgMzkuNiUuDQoNCi1HaWFvIHRp4bq/cCB04buRdCBjaGnhur9tIHThu7cgbOG7hyBraMOhIGNhbyB24bubaSAzMS4yJS4NCg0KLUdpYW8gdGnhur9wIHRydW5nIGLDrG5oIGNoaeG6v20gdOG7tyBs4buHIHRo4bqlcCBuaOG6pXQgduG7m2kgMjkuMiUuDQoNCk5ow6xuIGNodW5nIGJp4buDdSDEkeG7kyBjaG8gdGjhuqV5IHPhu5EgbMaw4bujbmcgc2luaCB2acOqbiBjw7Mga2jhuqMgbsSDbmcgZ2lhbyB0aeG6v3Aga8OpbSBjaGnhur9tIG3hu5l0IHBo4bqnbiBs4bubbiwgY2FvIGjGoW4gc28gduG7m2kgdOG7tyBs4buHIGdpYW8gdGnhur9wIHThu5F0IHbDoCB0cnVuZyBiw6xuaC4NCg0KIyMjIyAqKmQuIFPhu5EgZOG7sSDDoW4gxJHDoyBob8OgbiB0aMOgbmggKFNvZHVhbikqKg0KYGBge3J9DQojIFRo4buRbmcga8OqIHTDs20gdOG6r3QNCnN1bW1hcnkoZGF0YTEkU29EdUFuKQ0KDQojIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgxJHhu4MgduG6vSBiaeG7g3UgxJHhu5MgdHLDsm4NCnNvZHVhbl9mcmVxIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YTEkU29EdUFuKSkNCmNvbG5hbWVzKHNvZHVhbl9mcmVxKSA8LSBjKCJTb0R1QW4iLCAiQ291bnQiKQ0KDQojIFTDrW5oIHRvw6FuIHBo4bqnbiB0csSDbQ0Kc29kdWFuX2ZyZXEgPC0gc29kdWFuX2ZyZXEgJT4lDQogIG11dGF0ZShQZXJjZW50ID0gcGFzdGUwKHJvdW5kKENvdW50IC8gc3VtKENvdW50KSAqIDEwMCwgMSksICIlIikpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4NCmdncGxvdChzb2R1YW5fZnJlcSwgYWVzKHggPSAiIiwgeSA9IENvdW50LCBmaWxsID0gU29EdUFuKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gUGVyY2VudCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiVOG7tyBs4buHIFBow6JuIGLhu5EgU+G7kSBk4buxIMOhbiBIb8OgbiB0aMOgbmgiLCB4ID0gTlVMTCwgeSA9IE5VTEwsIGZpbGwgPSAiU+G7kSBk4buxIMOhbiIpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKiANCg0KLVThu7cgbOG7hyBob8OgbiB0aMOgbmggMCBk4buxIMOhbiB2w6AgMiBk4buxIMOhbiBsw6AgYuG6sW5nIG5oYXUsIGPDuW5nIGNoaeG6v20gMTYuOSUuDQoNCi1U4bu3IGzhu4cgaG/DoG4gdGjDoG5oIDUgZOG7sSDDoW4gbMOgIGNhbyBuaOG6pXQsIGNoaeG6v20gMTclLg0KDQotVOG7tyBs4buHIGhvw6BuIHRow6BuaCAxIGThu7Egw6FuIGNoaeG6v20gMTYuMSUuDQoNCi1U4bu3IGzhu4cgaG/DoG4gdGjDoG5oIDQgZOG7sSDDoW4gY2hp4bq/bSAxNi45JS4NCg0KLVThu7cgbOG7hyBob8OgbiB0aMOgbmggMyBk4buxIMOhbiBjaGnhur9tIDE2LjMlLg0KDQpOaMOsbiBjaHVuZywgYmnhu4N1IMSR4buTIGNobyB0aOG6pXkgdOG7tyBs4buHIGhvw6BuIHRow6BuaCBk4buxIMOhbiDEkcaw4bujYyBwaMOibiBi4buRIGtow6EgxJHhu4F1IGdp4buvYSBjw6FjIG5ow7NtIHThu6sgMCDEkeG6v24gNSBk4buxIMOhbiB24bubaSBz4buxIGNow6puaCBs4buHY2gga2jDtG5nIMSRw6FuZyBr4buDIGdp4buvYSBjw6FjIG5ow7NtLg0KDQojIyAqKjMuMiBLaeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwga2nhu4NtIMSR4buLbmggQ2hpLWLDrG5oIHBoxrDGoW5nIChDaGktc3F1YXJlZCB0ZXN0KSDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyB4w6FjIMSR4buLbmggbeG7kWkgbGnDqm4gaOG7hyB0aOG7kW5nIGvDqiBnaeG7r2EgY8ahIGjhu5lpIHZp4buHYyBsw6BtIChgVHV5ZW5EdW5nYCkgdsOgIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCDEkeG7i25oIHTDrW5oOiBgSG9jTHVjYCwgYFRodWNUYXBgLCB2w6AgYEdpYW9UaWVwYC4NCg0KIyMjICoqMy4yLjEgS2nhu4NtIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBUdXnhu4NuIGThu6VuZyB2w6AgSOG7jWMgbOG7sWMqKg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQoNCi0gICBIMDogS2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBuxINuZyBs4buxYyBo4buNYyB04bqtcCB2w6AgY8ahIGjhu5lpIHZp4buHYyBsw6BtLg0KDQotICAgSDE6IEPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBuxINuZyBs4buxYyBo4buNYyB04bqtcCB2w6AgY8ahIGjhu5lpIHZp4buHYyBsw6BtLg0KDQpgYGB7cn0NCnRhYmxlX2hvY19sdWMgPC0gdGFibGUoZGF0YTEkSG9jTHVjLCBkYXRhMSRUdXllbkR1bmcpDQpjaGlzcV9ob2NfbHVjIDwtIGNoaXNxLnRlc3QodGFibGVfaG9jX2x1YykNCnByaW50KGNoaXNxX2hvY19sdWMpDQpgYGANCioqS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmg6KiogVuG7m2kgcC12YWx1ZSA9IDAuMDM2MDMgPCAwLjA1LCB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIEPDsyBt4buRaSBsacOqbiBo4buHIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgbsSDbmcgbOG7sWMgaOG7jWMgdOG6rXAgdsOgIGPGoSBo4buZaSB2aeG7h2MgbMOgbS4NCg0KIyMjICoqMy4yLjIgS2nhu4NtIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBUdXnhu4NuIGThu6VuZyB2w6AgS2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAqKg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaCoqDQotICAgSDA6IEtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2Ega2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAgdsOgIGPGoSBo4buZaSB2aeG7h2MgbMOgbS4NCi0gICBIMTogQ8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGtpbmggbmdoaeG7h20gdGjhu7FjIHThuq1wIHbDoCBjxqEgaOG7mWkgdmnhu4djIGzDoG0uDQoNCmBgYHtyfQ0KdGFibGVfdGh1Y190YXAgPC0gdGFibGUoZGF0YTEkVGh1Y1RhcCwgZGF0YTEkVHV5ZW5EdW5nKQ0KY2hpc3FfdGh1Y190YXAgPC0gY2hpc3EudGVzdCh0YWJsZV90aHVjX3RhcCkNCnByaW50KGNoaXNxX3RodWNfdGFwKQ0KYGBgDQoqKkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oOioqIFbhu5tpIHAtdmFsdWUgPSAwLjU3NzggPiAwLjA1LCB0YSBjaOG6pXAgbmjhuq1uIGdp4bqjIHRodXnhur90IEgwLiBLaMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBraW5oIG5naGnhu4dtIHRo4buxYyB04bqtcCB2w6AgY8ahIGjhu5lpIHZp4buHYyBsw6BtLg0KDQojIyMgKiozLjIuMyBLaeG7g20gxJHhu4tuaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIFR1eeG7g24gZOG7pW5nIHbDoCBL4bu5IG7Eg25nIGdpYW8gdGnhur9wKioNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotICAgSDA6IEtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2Ega+G7uSBuxINuZyBnaWFvIHRp4bq/cCB2w6AgY8ahIGjhu5lpIHZp4buHYyBsw6BtLg0KDQotICAgSDE6IEPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBr4bu5IG7Eg25nIGdpYW8gdGnhur9wIHbDoCBjxqEgaOG7mWkgdmnhu4djIGzDoG0uDQoNCmBgYHtyfQ0KdGFibGVfZ2lhb190aWVwIDwtIHRhYmxlKGRhdGExJEdpYW9UaWVwLCBkYXRhMSRUdXllbkR1bmcpDQpjaGlzcV9naWFvX3RpZXAgPC0gY2hpc3EudGVzdCh0YWJsZV9naWFvX3RpZXApDQpwcmludChjaGlzcV9naWFvX3RpZXApDQpgYGANCioqS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmg6KiogVuG7m2kgcC12YWx1ZSA9IDIuMmUtMTYgPCAwLjA1LCB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIEPDsyBt4buRaSBsacOqbiBo4buHIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2Ega+G7uSBuxINuZyBnaWFvIHRp4bq/cCB2w6AgY8ahIGjhu5lpIHZp4buHYyBsw6BtLg0KDQojIyMgKiozLjIuNCBLaeG7g20gxJHhu4tuaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIFR1eeG7g24gZOG7pW5nIHbDoCBT4buRIGThu7Egw6FuIMSRw6MgaG/DoG4gdGjDoG5oKioNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotICAgSDA6IEtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgU+G7kSBk4buxIMOhbiDEkcOjIGhvw6BuIHRow6BuaCB2w6AgY8ahIGjhu5lpIHZp4buHYyBsw6BtLg0KDQotICAgSDE6IEPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBT4buRIGThu7Egw6FuIMSRw6MgaG/DoG4gdGjDoG5oIHbDoCBjxqEgaOG7mWkgdmnhu4djIGzDoG0uDQoNCmBgYHtyfQ0KdF90ZXN0X3NvZHVhbiA8LSB0LnRlc3QoU29EdUFuIH4gVHV5ZW5EdW5nLCBkYXRhID0gZGF0YTEpDQp0X3Rlc3Rfc29kdWFuDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoqKiBW4bubaSBwLXZhbHVlID0gMi4yZS0xNiA8IDAuMDUsIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gQ8OzIG3hu5FpIGxpw6puIGjhu4cgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBz4buRIGThu7Egw6FuIMSRw6MgaG/DoG4gdGjDoG5oIHbDoCBjxqEgaOG7mWkgdmnhu4djIGzDoG0uDQoNCioqVOG7lW5nIGvhur90IGtp4buDbSDEkeG7i25oOioqIEPDsyBiYSBiaeG6v24gxJHhu5ljIGzhuq1wIChgSG9jTHVjYCwgYFNvZHVhbmAsIGBHaWFvVGllcGApIGzDoCBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIGBUdXllbkR1bmdgLiBDaMO6bmcgdGEgc+G6vSB0aeG6v3AgdOG7pWMgcGjDom4gdMOtY2ggc8OidSBoxqFuIGPDoWMgbeG7kWkgcXVhbiBo4buHIG7DoHkuDQoNCg0KIyMgKiozLjMgUGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCBiaeG6v24gcGjhu6UgdGh14buZYyoqDQojIyMgKiozLjMuMSBQaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIFR1eeG7g24gZOG7pW5nIHbDoCBOxINuZyBs4buxYyBo4buNYyB04bqtcCoqDQojIyMjICoqYS4gVGjhu5FuZyBrw6ogbcO0IHThuqMgZ2nhu69hIGhhaSBiaeG6v24qKg0KYGBge3J9DQp0YWJsZV9ob2NsdWNfMiA8LSB0YWJsZShkYXRhMSRIb2NMdWMsIGRhdGExJFR1eWVuRHVuZykNCmthYmxlKHRhYmxlX2hvY2x1Y18yLCBjYXB0aW9uID0gIkLhuqNuZyB04bqnbiBz4buRIGNow6lvIGdp4buvYSBI4buNYyBs4buxYyB2w6AgVHV54buDbiBk4bulbmciKQ0KDQpnZ3Bsb3QoZGF0YTEsIGFlcyh4ID0gSG9jTHVjLCBmaWxsID0gVHV5ZW5EdW5nKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyDEkcaw4bujYyBUdXnhu4NuIGThu6VuZyB0aGVvIE7Eg25nIGzhu7FjIEjhu41jIHThuq1wIiwNCiAgICAgICB4ID0gIlBow6JuIGxv4bqhaSBI4buNYyBs4buxYyIsIHkgPSAiVOG7tyBs4buHIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqIA0KDQotVOG7tyBs4buHIGtow7RuZyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyAoTm8pIGNoaeG6v20gcGjhuqduIGzhu5tuIHRyb25nIHThuqV0IGPhuqMgY8OhYyBuaMOzbSBo4buNYyBs4buxYyAoWeG6v3UsIFRydW5nIGLDrG5oLCBLaMOhLCBHaeG7j2kpLg0KDQotVOG7tyBs4buHIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIChZZXMpIOG7nyBjw6FjIG5ow7NtIGjhu41jIGzhu7FjIGzDoCB0xrDGoW5nIMSR4buRaSBnaeG7kW5nIG5oYXUsIGRhbyDEkeG7mW5nIHRyb25nIGtob+G6o25nIHThu6sgMTUlIMSR4bq/biAyMCUuIEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IHbhu4EgdOG7tyBs4buHIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGdp4buvYSBzaW5oIHZpw6puIGPDsyBo4buNYyBs4buxYyBZ4bq/dSwgVHJ1bmcgYsOsbmgsIEtow6EgdsOgIEdp4buPaS4NCg0KLVThu7cgbOG7hyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBj4bunYSBzaW5oIHZpw6puIFnhur91IHbDoCBHaeG7j2kgY2FvIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgc2luaCB2acOqbiBUcnVuZyBiw6xuaCB2w6AgS2jDoSwgbmjGsG5nIHPhu7EgY2jDqm5oIGzhu4djaCBuw6B5IGzDoCBraMO0bmcgxJHDoW5nIGvhu4MuDQoNClTDs20gbOG6oWkgYmnhu4N1IMSR4buTIGNobyB0aOG6pXkgbsSDbmcgbOG7sWMgaOG7jWMgdOG6rXAga2jDtG5nIHBo4bqjaSBsw6AgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgbeG6oW5oIG3hur0gxJHhur9uIHThu7cgbOG7hyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZy4NCg0KIyMjIyAqKmIuIEtp4buDbSDEkeG7i25oIHThu7cgbOG7hyBnaeG7r2EgaGFpIGJp4bq/bioqDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotIEdp4bqjIHRodXnhur90IEgwOiBU4bu3IGzhu4cgc2luaCB2acOqbiBo4buNYyBs4buxYyAiR2nhu49pIiDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBsw6AgMjAlLg0KDQotIEdp4bqjIHRodXnhur90IEgxOiBU4bu3IGzhu4cgc2luaCB2acOqbiBo4buNYyBs4buxYyAiR2nhu49pIiDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBraMOhYyAyMCUuDQoNCmBgYHtyfQ0KIyBM4buNYyBuaMOzbSBo4buNYyBs4buxYyBHaeG7j2kNCmhvY2x1Y19naW9pX2RhdGEgPC0gc3Vic2V0KGRhdGExLCBIb2NMdWMgPT0gIkdp4buPaSIpDQoNCiMgVMOtbmggc+G7kSBsxrDhu6NuZyB2w6Agc+G7kSBuZ8aw4budaSDEkcaw4bujYyB0dXnhu4NuIGThu6VuZw0Kbl9ob2NsdWNfZ2lvaSA8LSBucm93KGhvY2x1Y19naW9pX2RhdGEpDQpuX3R1eWVuZHVuZ19naW9pIDwtIHN1bShob2NsdWNfZ2lvaV9kYXRhJFR1eWVuRHVuZyA9PSAiWWVzIikNCg0KIyBLaeG7g20gxJHhu4tuaCB04bu3IGzhu4cNCnByb3AudGVzdCh4ID0gbl90dXllbmR1bmdfZ2lvaSwgbiA9IG5faG9jbHVjX2dpb2ksIHAgPSAwLjIsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpDQpgYGANCg0KKipL4bq/dCBsdeG6rW46KiogVuG7m2kgcC12YWx1ZSA9IDIuMTkyZS0wNiA8IDAuMDUsIMSR4bunIGPGoSBz4bufIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gVOG7tyBs4buHIHNpbmggdmnDqm4gaOG7jWMgbOG7sWMgIkdp4buPaSIgxJHGsOG7o2MgdHV54buDbiBk4bulbmcga2jDoWMgMjAlLg0KDQoNCiMjIyMgKipjLiBQaMOibiB0w61jaCB0aMO0bmcgcXVhIFJlbGF0aXZlIFJpc2sgdsOgIE9kZCBSYXRpbyoqDQoNCmBgYHtyfQ0KIyBU4bqhbyBiaeG6v24gbmjDs206IEdp4buPaSB2w6AgS2jDtG5nIEdp4buPaQ0KZGF0YTEkSG9jTHVjX05ob20gPC0gaWZlbHNlKGRhdGExJEhvY0x1YyA9PSAiR2nhu49pIiwgIkdp4buPaSIsICJLaMO0bmcgR2nhu49pIikNCg0KIyBU4bqhbyBtYSB0cuG6rW4gdOG6p24gc+G7kQ0KbWF0X2hvY2x1YyA8LSB0YWJsZShkYXRhMSRIb2NMdWNfTmhvbSwgZGF0YTEkVHV5ZW5EdW5nKQ0Ka2FibGUobWF0X2hvY2x1YywgY2FwdGlvbj0iQuG6o25nIDJ4MiBjaG8gUlIgdsOgIE9SIChI4buNYyBs4buxYykiKQ0KDQojIFTDrW5oIFJSIHbDoCBPUg0KcnJfaG9jbHVjIDwtIHJpc2tyYXRpbyh0KG1hdF9ob2NsdWMpKQ0Kb3JfaG9jbHVjIDwtIG9kZHNyYXRpbyh0KG1hdF9ob2NsdWMpKQ0Ka2FibGUocnJfaG9jbHVjJG1lYXN1cmUsIGNhcHRpb24gPSAiUmVsYXRpdmUgUmlzayAoUlIpIC0gSOG7jWMgbOG7sWMgR2nhu49pIHZzLiBLaMO0bmcgR2nhu49pIikNCmthYmxlKG9yX2hvY2x1YyRtZWFzdXJlLCBjYXB0aW9uID0gIk9kZHMgUmF0aW8gKE9SKSAtIEjhu41jIGzhu7FjIEdp4buPaSB2cy4gS2jDtG5nIEdp4buPaSIpDQpgYGANCioqS+G6v3QgcXXhuqM6KioNCg0KLSAgICoqUmVsYXRpdmUgUmlzayAoUlIpID0gMS4wMDE6KiogVOG7tyBs4buHIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGPhu6dhIHNpbmggdmnDqm4gaOG7jWMgbOG7sWMgIkdp4buPaSIgY2jhu4kgbOG7m24gaMahbiAqKjAuMSUqKiBzbyB24bubaSBjw6FjIHNpbmggdmnDqm4gY8OybiBs4bqhaS4NCg0KLSAgICoqT2RkcyBSYXRpbyAoT1IpID0gMS4wMDM6KiogWMOhYyBzdeG6pXQgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgY+G7p2EgbeG7mXQgc2luaCB2acOqbiBo4buNYyBs4buxYyAiR2nhu49pIiBjaOG7iSBs4bubbiBoxqFuICoqMC4zJSoqIHNvIHbhu5tpIGPDoWMgc2luaCB2acOqbiBraMOhYy4NCg0KKipL4bq/dCBsdeG6rW46KiogQ+G6oyBoYWkgY2jhu4kgc+G7kSDEkeG7gXUgY2hvIHRo4bqleSBuxINuZyBs4buxYyBo4buNYyB04bqtcCDhu58gbeG7qWMgIkdp4buPaSIga2jDtG5nIHBo4bqjaSAgbMOgIGzhu6NpIHRo4bq/IGzDoG0gdMSDbmcgY8ahIGjhu5lpIHZp4buHYyBsw6BtIGPhu6dhIHNpbmggdmnDqm4uDQoNCiMjIyAqKjMuMy4yIFBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgVHV54buDbiBk4bulbmcgdsOgIEvhu7kgbsSDbmcgZ2lhbyB0aeG6v3AqKg0KIyMjIyAqKmEuIFRo4buRbmcga8OqIG3DtCB04bqjIGdp4buvYSBoYWkgYmnhur9uKioNCmBgYHtyfQ0KdGFibGVfZ2lhb3RpZXBfMiA8LSB0YWJsZShkYXRhMSRHaWFvVGllcCwgZGF0YTEkVHV5ZW5EdW5nKQ0Ka2FibGUodGFibGVfZ2lhb3RpZXBfMiwgY2FwdGlvbiA9ICJC4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgS+G7uSBuxINuZyBHaWFvIHRp4bq/cCB2w6AgVHV54buDbiBk4bulbmciKQ0KDQpnZ3Bsb3QoZGF0YTEsIGFlcyh4ID0gR2lhb1RpZXAsIGZpbGwgPSBUdXllbkR1bmcpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArDQogIGxhYnModGl0bGUgPSAiVOG7tyBs4buHIMSRxrDhu6NjIFR1eeG7g24gZOG7pW5nIHRoZW8gS+G7uSBuxINuZyBHaWFvIHRp4bq/cCIsDQogICAgICAgeCA9ICJQaMOibiBsb+G6oWkgS+G7uSBuxINuZyBHaWFvIHRp4bq/cCIsIHkgPSAiVOG7tyBs4buHIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkNCmBgYA0KKipOaOG6rW4geMOpdDoqKiANCg0KLUPDsyBz4buxIGtow6FjIGJp4buHdCByw7UgcuG7h3QgduG7gSB04bu3IGzhu4cgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKFllcykgZ2nhu69hIG5ow7NtIGdpYW8gdGnhur9wIFThu5F0IHNvIHbhu5tpIGhhaSBuaMOzbSBjw7JuIGzhuqFpLiBU4bu3IGzhu4cgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgY+G7p2EgbmjDs20gS8OpbSB2w6AgVHJ1bmcgYsOsbmggbMOgIHLhuqV0IHRo4bqlcCBjaOG7iSBraG/huqNuZyA1LTEwJS4gTmfGsOG7o2MgbOG6oWkgdOG7tyBs4buHIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGPhu6dhIG5ow7NtIFThu5F0IGNhbyBoxqFuIHLhuqV0IG5oaeG7gXUsIGNoaeG6v20ga2hv4bqjbmcgNDAlLg0KDQotQmnhu4N1IMSR4buTIGNobyB0aOG6pXkga+G7uSBuxINuZyBnaWFvIHRp4bq/cCBjw7Mg4bqjbmggaMaw4bufbmcgcuG6pXQgbOG7m24gxJHhur9uIGPGoSBo4buZaSDEkcaw4bujYyB0dXnhu4NuIGThu6VuZy4gU2luaCB2acOqbiBjw7Mga+G7uSBuxINuZyBnaWFvIHRp4bq/cCB04buRdCBjw7MgdOG7tyBs4buHIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIHNpbmggdmnDqm4gY8OzIGvhu7kgbsSDbmcgZ2lhbyB0aeG6v3Aga8OpbSBob+G6t2MgdHJ1bmcgYsOsbmguDQoNCiMjIyMgKipiLiBLaeG7g20gxJHhu4tuaCB04bu3IGzhu4cgZ2nhu69hIGhhaSBiaeG6v24qKg0KDQpUw6FjIGdp4bqjIG114buRbiBraeG7g20gdHJhIHhlbSB04bu3IGzhu4cgdHV54buDbiBk4bulbmcgY+G7p2EgbmjDs20gc2luaCB2acOqbiBjw7Mga+G7uSBuxINuZyBnaWFvIHRp4bq/cCAiVOG7kXQiIGPDsyBi4bqxbmcgNTAlIGhheSBraMO0bmcuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotIEdp4bqjIHRodXnhur90IEgwOiBU4bu3IGzhu4cgc2luaCB2acOqbiBjw7Mga+G7uSBuxINuZyBnaWFvIHRp4bq/cCAiVOG7kXQiIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGzDoCA1MCUuDQoNCi0gR2nhuqMgdGh1eeG6v3QgSDE6IFThu7cgbOG7hyBzaW5oIHZpw6puIGPDsyBr4bu5IG7Eg25nIGdpYW8gdGnhur9wICJU4buRdCIgxJHGsOG7o2MgdHV54buDbiBk4bulbmcga2jDoWMgNTAlLg0KDQpgYGB7cn0NCiMgTOG7jWMgbmjDs20gZ2lhbyB0aeG6v3AgVOG7kXQNCmdpYW90aWVwX3RvdF9kYXRhIDwtIHN1YnNldChkYXRhMSwgR2lhb1RpZXAgPT0gIlThu5F0IikNCg0KIyBUw61uaCBz4buRIGzGsOG7o25nIHbDoCBz4buRIG5nxrDhu51pIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nDQpuX2dpYW90aWVwX3RvdCA8LSBucm93KGdpYW90aWVwX3RvdF9kYXRhKQ0Kbl90dXllbmR1bmdfdG90IDwtIHN1bShnaWFvdGllcF90b3RfZGF0YSRUdXllbkR1bmcgPT0gIlllcyIpDQoNCiMgS2nhu4NtIMSR4buLbmggdOG7tyBs4buHDQpwcm9wLnRlc3QoeCA9IG5fdHV5ZW5kdW5nX3RvdCwgbiA9IG5fZ2lhb3RpZXBfdG90LCBwID0gMC41LCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQ0KYGBgDQoqKkvhur90IGx14bqtbjoqKiBW4bubaSBwLXZhbHVlID0gMi4yZS0xNiA8IDAuMDUsIMSR4bunIGPGoSBz4bufIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMC4gVOG7tyBs4buHIHNpbmggdmnDqm4gY8OzIGvhu7kgbsSDbmcgZ2lhbyB0aeG6v3AgIlThu5F0IiDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBraMOhYyA1MCUuDQoNCiMjIyMgKipjLiBQaMOibiB0w61jaCB0aMO0bmcgcXVhIFJlbGF0aXZlIFJpc2sgdsOgIE9kZCBSYXRpbyoqDQoNCmBgYHtyfQ0KIyBU4bqhbyBiaeG6v24gbmjDs206IFThu5F0IHbDoCBLaMO0bmcgVOG7kXQNCmRhdGExJEdpYW9UaWVwX05ob20gPC0gaWZlbHNlKGRhdGExJEdpYW9UaWVwID09ICJU4buRdCIsICJU4buRdCIsICJLaMO0bmcgVOG7kXQiKQ0KDQojIFThuqFvIG1hIHRy4bqtbiB04bqnbiBz4buRDQptYXRfZ2lhb3RpZXAgPC0gdGFibGUoZGF0YTEkR2lhb1RpZXBfTmhvbSwgZGF0YTEkVHV5ZW5EdW5nKQ0Ka2FibGUobWF0X2dpYW90aWVwLCBjYXB0aW9uPSJC4bqjbmcgMngyIGNobyBSUiB2w6AgT1IgKEvhu7kgbsSDbmcgZ2lhbyB0aeG6v3ApIikNCg0KIyBUw61uaCBSUiB2w6AgT1INCnJyX2dpYW90aWVwIDwtIHJpc2tyYXRpbyh0KG1hdF9naWFvdGllcCkpDQpvcl9naWFvdGllcCA8LSBvZGRzcmF0aW8odChtYXRfZ2lhb3RpZXApKQ0Ka2FibGUocnJfZ2lhb3RpZXAkbWVhc3VyZSwgY2FwdGlvbiA9ICJSZWxhdGl2ZSBSaXNrIChSUikgLSBHaWFvIHRp4bq/cCBU4buRdCB2cy4gS2jDtG5nIFThu5F0IikNCmthYmxlKG9yX2dpYW90aWVwJG1lYXN1cmUsIGNhcHRpb24gPSAiT2RkcyBSYXRpbyAoT1IpIC0gR2lhbyB0aeG6v3AgVOG7kXQgdnMuIEtow7RuZyBU4buRdCIpDQpgYGANCioqS+G6v3QgcXXhuqM6KioNCg0KLSAgICoqUmVsYXRpdmUgUmlzayAoUlIpID0gMy4yNjoqKiBU4bu3IGzhu4cgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgY+G7p2Egc2luaCB2acOqbiBjw7Mga+G7uSBuxINuZyBnaWFvIHRp4bq/cCAiVOG7kXQiIGNhbyBoxqFuICoqMy4yNiBs4bqnbioqIHNvIHbhu5tpIGPDoWMgc2luaCB2acOqbiBjw7JuIGzhuqFpLg0KDQotICAgKipPZGRzIFJhdGlvIChPUikgPSA5LjY0OioqIFjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGPhu6dhIG3hu5l0IHNpbmggdmnDqm4gY8OzIGvhu7kgbsSDbmcgZ2lhbyB0aeG6v3AgIlThu5F0IiBjYW8gaMahbiAqKjkuNjQgbOG6p24qKiBzbyB24bubaSBjw6FjIHNpbmggdmnDqm4ga2jDoWMuDQoNCioqS+G6v3QgbHXhuq1uOioqIEvhu7kgbsSDbmcgZ2lhbyB0aeG6v3AgdOG7kXQgY8WpbmcgbMOgIG3hu5l0IHnhur91IHThu5EgY+G7sWMga+G7syBxdWFuIHRy4buNbmcgZ2nDunAgdMSDbmcgY8ahIGjhu5lpIHZp4buHYyBsw6BtIGPhu6dhIHNpbmggdmnDqm4uDQoNCiMjIyAqKjMuMy4zIFBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgVHV54buDbiBk4bulbmcgdsOgIFPhu5EgZOG7sSDDoW4gaG/DoG4gdGjDoG5oKioNCiMjIyMgKiphLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBnaeG7r2EgaGFpIGJp4bq/bioqDQpgYGB7cn0NCnRhYmxlX3NvZHVhbl8yIDwtIHRhYmxlKGRhdGExJFNvRHVBbiwgZGF0YTEkVHV5ZW5EdW5nKQ0Ka2FibGUodGFibGVfc29kdWFuXzIsIGNhcHRpb24gPSAiQuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nhu69hIFPhu5EgZOG7sSDDoW4gdsOgIFR1eeG7g24gZOG7pW5nIikNCg0KZ2dwbG90KGRhdGExLCBhZXMoeCA9IGFzLmZhY3RvcihTb0R1QW4pLCBmaWxsID0gVHV5ZW5EdW5nKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyDEkcaw4bujYyBUdXnhu4NuIGThu6VuZyB0aGVvIFPhu5EgZOG7sSDDoW4gSG/DoG4gdGjDoG5oIiwNCiAgICAgICB4ID0gIlPhu5EgbMaw4bujbmcgROG7sSDDoW4iLCB5ID0gIlThu7cgbOG7hyIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCioqTmjhuq1uIHjDqXQ6KiogDQoNCi1U4bu3IGzhu4cgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKFllcykgdMSDbmcgbMOqbiByw7UgcuG7h3Qga2hpIHPhu5EgZOG7sSDDoW4gaG/DoG4gdGjDoG5oIHTEg25nIHThu6sgMSBsw6puIDIuIFbhu5tpIDAgdsOgIDEgZOG7sSDDoW4sIHThu7cgbOG7hyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBsw6AgcuG6pXQgdGjhuqVwIGfhuqduIG5oxrAgYuG6sW5nIDAuIFThu6sgMiBk4buxIMOhbiB0cuG7nyBsw6puLCB04bu3IGzhu4cgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgdMSDbmcgbMOqbiB2w6AgZHV5IHRyw6wg4bufIG3hu6ljIGtob+G6o25nIDI1JS4NCg0KLVPhu5EgZOG7sSDDoW4gaG/DoG4gdGjDoG5oIGPDsyDhuqNuaCBoxrDhu59uZyByw7UgcuG7h3QgxJHhur9uIHThu7cgbOG7hyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZy4gVmnhu4djIGhvw6BuIHRow6BuaCB04burIDIgZOG7sSDDoW4gdHLhu58gbMOqbiBkxrDhu51uZyBuaMawIGzDoCBt4buZdCBuZ8aw4buhbmcgcXVhbiB0cuG7jW5nIMSR4buDIHTEg25nIGPGoSBo4buZaSDEkcaw4bujYyB0dXnhu4NuIGThu6VuZy4NCg0KIyMjIyAqKmIuIEtp4buDbSDEkeG7i25oIHThu7cgbOG7hyBnaeG7r2EgaGFpIGJp4bq/bioqDQrEkOG7gyBraeG7g20gdHJhIGdp4bqjIHRodXnhur90IHbhu4EgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBj4bunYSBz4buRIGThu7Egw6FuLCB0w6FjIGdp4bqjIHRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmggdCBt4buZdCBt4bqrdS4gVGEga2nhu4NtIHRyYSB4ZW0gc+G7kSBk4buxIMOhbiB0cnVuZyBiw6xuaCBj4bunYSBuaMOzbSBzaW5oIHZpw6puIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGPDsyBi4bqxbmcgMyBoYXkga2jDtG5nLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSBHaeG6oyB0aHV54bq/dCBIMDogU+G7kSBk4buxIMOhbiB0cnVuZyBiw6xuaCBj4bunYSBuaMOzbSDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBsw6AgMy4NCg0KLSBHaeG6oyB0aHV54bq/dCBIMTogU+G7kSBk4buxIMOhbiB0cnVuZyBiw6xuaCBj4bunYSBuaMOzbSDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBraMOhYyAzLg0KDQpgYGB7cn0NCnR1eWVuZHVuZ195ZXNfZGF0YSA8LSBzdWJzZXQoZGF0YTEsIFR1eWVuRHVuZyA9PSAiWWVzIikNCnQudGVzdCh0dXllbmR1bmdfeWVzX2RhdGEkU29EdUFuLCBtdSA9IDMsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpDQpgYGANCioqS+G6v3QgbHXhuq1uOioqIFbhu5tpIHAtdmFsdWUgPCAwLjA1LCDEkeG7pyBjxqEgc+G7nyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAuIFPhu5EgZOG7sSDDoW4gdHJ1bmcgYsOsbmggY+G7p2EgbmjDs20gxJHGsOG7o2MgdHV54buDbiBk4bulbmcga2jDoWMgMy4NCg0KDQojIyAqKjMuNCBI4buTaSBxdXkgTG9naXN0aWMgxJFhIGJp4bq/bioqDQoNClNhdSBraGkga2jDoW0gcGjDoSBt4buRaSBsacOqbiBo4buHIGdp4buvYSBjxqEgaOG7mWkgdmnhu4djIGzDoG0gduG7m2kgdOG7q25nIGJp4bq/biDEkeG7mWMgbOG6rXAsIGLGsOG7m2MgdGnhur9wIHRoZW8gbMOgIHjDonkgZOG7sW5nIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgbmjhurFtIMSRw6FuaCBnacOhIMSR4buTbmcgdGjhu51pIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIHnhur91IHThu5EgbsOgeSDEkeG6v24ga2jhuqMgbsSDbmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgY+G7p2Egc2luaCB2acOqbi4NCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGxvZ2l0IMSR4buDIG3DtCBow6xuaCBow7NhIGxvZy1vZGRzIGPhu6dhIGPGoSBo4buZaSB2aeG7h2MgbMOgbS4gQ+G7pSB0aOG7gywgbcO0IGjDrG5oIGPDsyBk4bqhbmc6DQoNClxbDQpcbG9nXGxlZnQoIFxmcmFje1AoXHRleHR7VHV5ZW5EdW5nfSA9IFx0ZXh0e1llc30pfXsxIC0gUChcdGV4dHtUdXllbkR1bmd9ID0gXHRleHR7WWVzfSl9IFxyaWdodCkgPSBcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBcdGV4dHtIb2NMdWN9ICsgXGJldGFfMiBcY2RvdCBcdGV4dHtHaWFvVGllcH0gKyBcYmV0YV8zIFxjZG90IFx0ZXh0e1NvRHVBbn0NClxdDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQpW4bubaSB04burbmcgYmnhur9uIMSR4buZYyBs4bqtcCwgdGEgdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaDoNCg0KLSAgICRIXzAkOiBCaeG6v24ga2jDtG5nIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24geMOhYyBzdeG6pXQgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKCRcYmV0YSA9IDAkKQ0KLSAgICRIXzEkOiBCaeG6v24gY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyAoJFxiZXRhIFxuZSAwJCkNCg0KTeG7qWMgw70gbmdoxKlhIHRo4buRbmcga8OqIMSRxrDhu6NjIHPhu60gZOG7pW5nIGzDoCA1JSAozrEgPSAwLjA1KS4gTuG6v3UgKnAtdmFsdWUqIDwgMC4wNSwgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAuDQpgYGB7cn0NCiMgxJDhurd0IGzhuqFpIG5ow7NtIHRoYW0gY2hp4bq/dSDEkeG7gyBkaeG7hW4gZ2nhuqNpDQpkYXRhMSRIb2NMdWMgPC0gcmVsZXZlbChkYXRhMSRIb2NMdWMsIHJlZiA9ICJZ4bq/dSIpDQpkYXRhMSRHaWFvVGllcCA8LSByZWxldmVsKGRhdGExJEdpYW9UaWVwLCByZWYgPSAiS8OpbSIpDQoNCiMgSOG7k2kgcXV5IMSRYSBiaeG6v24NCm1vZGVsX2xvZ2l0IDwtIGdsbShUdXllbkR1bmcgfiBIb2NMdWMgKyBHaWFvVGllcCArIFNvRHVBbiwNCiAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTEsIGZhbWlseSA9IGJpbm9taWFsKGxpbms9ImxvZ2l0IikpDQoNCiMgVMOzbSB04bqvdCBr4bq/dCBxdeG6ow0Kc3VtbWFyeShtb2RlbF9sb2dpdCkNCmBgYA0KDQojIyMgKipL4bq/dCBxdeG6oyBtw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIMSRYSBiaeG6v24qKg0KDQpNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIMSRxrDhu6NjIHjDonkgZOG7sW5nIG5o4bqxbSBwaMOibiB0w61jaCB4w6FjIHN14bqldCBzaW5oIHZpw6puIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIChgVHV5ZW5EdW5nYCA9IFllcykgZOG7sWEgdHLDqm4gY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaDogbsSDbmcgbOG7sWMgaOG7jWMgdOG6rXAgKGBIb2NMdWNgKSwga2luaCBuZ2hp4buHbSB0aOG7sWMgdOG6rXAgKGBUaHVjVGFwYCksIGvhu7kgbsSDbmcgZ2lhbyB0aeG6v3AgKGBHaWFvVGllcGApIHbDoCBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZyBsw6Agc+G7kSBk4buxIMOhbiDEkcOjIGhvw6BuIHRow6BuaCAoYFNvRHVBbmApLiBN4bupYyDDvSBuZ2jEqWEgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbMOgIDUlICjOsSA9IDAuMDUpLg0KDQoqKkLhuqNuZyB04buVbmcgaOG7o3AgY8OhYyBiaeG6v24gY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAoa8OobSBPZGRzIFJhdGlvKSoqDQoNCnwgQmnhur9uICAgICAgICAgICAgICAgICB8IE5ow7NtIHNvIHPDoW5oICAgICAgICAgIHwgSOG7hyBz4buRICjOsikgfCBwLXZhbHVlIHwgT2RkcyBSYXRpbyAoZV7OsikgfCBEaeG7hW4gZ2nhuqNpIGNoaSB0aeG6v3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgKipHaWFvIHRp4bq/cCoqIHwgVOG7kXQgKHZzIEvDqW0pICAgICAgICAgIHwgMi40MDc4MyAgIHwgPCAwLjAwMSB8IDExLjExICAgICAgICAgICAgfCBLaOG6oyBuxINuZyDEkcaw4bujYyB0dXnhu4NuIGThu6VuZyBjYW8gaMahbiAqKjExLjExIGzhuqduKiogc28gduG7m2kgbmjDs20gR2lhbyB0aeG6v3AgS8OpbS4gICAgICAgfA0KfCAqKlPhu5EgZOG7sSDDoW4qKiB8IFTEg25nIDEgZOG7sSDDoW4gICAgICAgICAgfCAwLjQ1ODA2ICAgfCA8IDAuMDAxIHwgMS41OCAgICAgICAgICAgICB8IEto4bqjIG7Eg25nIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIHTEg25nICoqMS41OCBs4bqnbioqICh04bupYyBsw6AgNTglKSBraGkgc+G7kSBk4buxIMOhbiB0xINuZyB0aMOqbSAxLiB8DQoNCg0KKipL4bq/dCBsdeG6rW4qKg0KDQotIEvhur90IHF14bqjIGjhu5NpIHF1eSBsb2dpc3RpYyBjaG8gdGjhuqV5IGjhu41jIGzhu7FjIGtow7RuZyBjw7Mg4bqjbmggaMaw4bufbmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDEkeG6v24geMOhYyBzdeG6pXQgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKHAgPiAwLjA1IOG7nyB04bqldCBj4bqjIGPDoWMgbeG7qWMgxJHhu5kpLg0KDQotIFRyb25nIGtoaSDEkcOzLCBr4bu5IG7Eg25nIGdpYW8gdGnhur9wIHThu5F0IHbDoCBz4buRIGzGsOG7o25nIGThu7Egw6FuIMSRw6MgaG/DoG4gdGjDoG5oIGzhuqFpIGPDsyDhuqNuaCBoxrDhu59uZyB0w61jaCBj4buxYyB2w6AgcsO1IHLhu4d0IMSR4bq/biBraOG6oyBuxINuZyDEkcaw4bujYyB0dXnhu4NuIChwIDwgMC4wMDEpLg0KDQotIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHLhurFuZyBuaMOgIHR1eeG7g24gZOG7pW5nIHRyb25nIHThuq1wIGThu68gbGnhu4d1IG7DoHkgY8OzIHh1IGjGsOG7m25nIMawdSB0acOqbiBuxINuZyBs4buxYyB0aOG7sWMgdGnhu4VuIHbDoCBr4bu5IG7Eg25nIG3hu4FtIGjGoW4gbMOgIHRow6BuaCB0w61jaCBo4buNYyB04bqtcC4NCg0KIyMgKiozLjUgSOG7k2kgcXV5IFByb2JpdCDEkWEgYmnhur9uKioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBQcm9iaXQgc+G7rSBk4bulbmcgaMOgbSBsacOqbiBr4bq/dCBsw6AgKipwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5KiogJFxQaGkoXGNkb3QpJCDEkeG7gyBtw7QgcGjhu49uZyB4w6FjIHN14bqldCBzaW5oIHZpw6puIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIChgVHV5ZW5EdW5nYCA9IFllcykgZOG7sWEgdHLDqm4gY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQpNw7QgaMOsbmggY8OzIGThuqFuZzoNCg0KJCQNClAoXHRleHR7VHV5ZW5EdW5nfV9pID0gMSBcbWlkIFhfaSkgPSBcUGhpKFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e0hvY0x1Y31faSAgKyBcYmV0YV8yIFxjZG90IFx0ZXh0e0dpYW9UaWVwfV9pICsgXGJldGFfMyBcY2RvdCBcdGV4dHtTb0R1QW59X2kpDQokJA0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSAkSF8wJDogQmnhur9uIGtow7RuZyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nICgkXGJldGEgPSAwJCkNCi0gJEhfMSQ6IEJp4bq/biBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nICgkXGJldGEgXG5lIDAkKSANCg0KTeG7qWMgw70gbmdoxKlhIHPhu60gZOG7pW5nIGzDoCAkXGFscGhhID0gMC4wNSQuIE7hur91IHAtdmFsdWUgPCAwLjA1LCBiw6FjIGLhu48gJEhfMCQuDQoNCmBgYHtyfQ0KIyBI4buTaSBxdXkgUHJvYml0IMSRYSBiaeG6v24NCm1vZGVsX3Byb2JpdCA8LSBnbG0oVHV5ZW5EdW5nIH4gSG9jTHVjICsgR2lhb1RpZXAgKyBTb0R1QW4sDQogICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpKQ0KDQpzdW1tYXJ5KG1vZGVsX3Byb2JpdCkNCmBgYA0KDQojIyMgKipL4bq/dCBxdeG6oyBtw7QgaMOsbmggaOG7k2kgcXV5IFByb2JpdCDEkWEgYmnhur9uKioNCg0KKipJbnRlcmNlcHQqKjogJFxiZXRhXzAgPSAtMi4yNzQyNjMkDQoNCktoaSB04bqldCBj4bqjIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCDhu58gbeG7qWMgdGhhbSBjaGnhur91IChI4buNYyBs4buxYyBLw6ltLCBHaWFvIHRp4bq/cCBLw6ltIHbDoCBT4buRIGThu7Egw6FuIGLhurFuZyAwKSwgZ2nDoSB0cuG7iyB6LXNjb3JlIGPGoSBi4bqjbiBsw6AgKiotMi4yNzQyNjMqKi4gR2nDoSB0cuG7iyBuw6B5IG7hurFtIHhhIHbhu4EgcGjDrWEgdHLDoWkgY+G7p2EgcGjDom4gcGjhu5FpIGNodeG6qW4sIHTGsMahbmcg4bupbmcgduG7m2kgbeG7mXQgeMOhYyBzdeG6pXQgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgcuG6pXQgdGjhuqVwLg0KDQoqKkdpYW9UaWVwVOG7kXQqKjogJFxiZXRhXzUgPSAxLjMzNzExNiQNCg0KS2hpIEdpYW8gdGnhur9wIGzDoCBU4buRdCB0aGF5IHbDrCBLw6ltLCB6LXNjb3JlICoqdMSDbmcgMS4zMzcxMTYgxJHGoW4gduG7iyoqLiBT4buxIGdpYSB0xINuZyDEkcOhbmcga+G7gyBuw6B5IGzDoG0gY2hvIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nICoqdMSDbmcgY2FvIGjGoW4gcsO1IHLhu4d0KiogdsOgIGvhur90IHF14bqjICoqY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8qKiAoJHAgPCAwLjAwMSQpLg0KDQoqKlNvRHVBbioqOiAkXGJldGFfNiA9IDAuMjU5MDg4JA0KDQpLaGkgc+G7kSBk4buxIMOhbiBob8OgbiB0aMOgbmggdMSDbmcgdGjDqm0gMSwgei1zY29yZSAqKnTEg25nIDAuMjU5MDg4IMSRxqFuIHbhu4sqKi4gRMO5IMSRw6J5IGzDoCBt4buZdCBt4bupYyB0xINuZyBuaOG7jywgbmjGsG5nIHTDoWMgxJHhu5luZyB0w61jaCBsxal5IHF1YSBuaGnhu4F1IGThu7Egw6FuIHPhur0gcuG6pXQgxJHDoW5nIGvhu4MuIEvhur90IHF14bqjIG7DoHkgKipjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhbyoqICgkcCA8IDAuMDAxJCkuDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCkvhur90IHF14bqjIG3DtCBow6xuaCBQcm9iaXQgY2hvIHRo4bqleSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgY8OzIOG6o25oIGjGsOG7n25nIG5o4bqldCBxdcOhbiB24bubaSBtw7QgaMOsbmggTG9naXQuIEPDoWMgeeG6v3UgdOG7kSBr4bu5IG7Eg25nIGdpYW8gdGnhur9wIHbDoCBz4buRIGThu7Egw6FuIMSR4buBdSBjw7MgdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjIMSR4bq/biBjxqEgaOG7mWkgdmnhu4djIGzDoG0gY+G7p2Egc2luaCB2acOqbi4gQ8OhYyBo4buHIHPhu5EgZMawxqFuZyBjaG8gdGjhuqV5IG5o4buvbmcgxJHhurdjIMSRaeG7g20gbsOgeSBsw6BtIHTEg25nIGNo4buJIHPhu5EgWiwgdOG7qyDEkcOzIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgxJHGsOG7o2MgdHV54buDbiBk4bulbmcuDQoNCiMjICoqMy42IEjhu5NpIHF1eSBDbG9nbG9nIMSRYSBiaeG6v24qKg0KDQpNw7QgaMOsbmggaOG7k2kgcXV5IENsb2dsb2cgc+G7rSBk4bulbmcgaMOgbSBsacOqbiBr4bq/dCBjb21wbGVtZW50YXJ5IGxvZy1sb2csIHBow7kgaOG7o3AgduG7m2kgY8OhYyBoaeG7h24gdMaw4bujbmcgY8OzIHjDoWMgc3XhuqV0IHTEg25nIGtow7RuZyDEkeG7kWkgeOG7qW5nLg0KDQpNw7QgaMOsbmggY8OzIGThuqFuZzoNCg0KJCQNClAoXHRleHR7VHV5ZW5EdW5nfV9pID0gMSBcbWlkIFhfaSkgPSAxIC0gXGV4cCgtXGV4cChYX2lcYmV0YSkpDQokJA0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSAkSF8wJDogQmnhur9uIGtow7RuZyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nICgkXGJldGEgPSAwJCkNCi0gJEhfMSQ6IEJp4bq/biBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nICgkXGJldGEgXG5lIDAkKSANCg0KYGBge3J9DQojIEjhu5NpIHF1eSBDbG9nbG9nIMSRYSBiaeG6v24NCm1vZGVsX2Nsb2dsb2cgPC0gZ2xtKFR1eWVuRHVuZyB+IEhvY0x1YyArIEdpYW9UaWVwICsgU29EdUFuLA0KICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSkNCg0Kc3VtbWFyeShtb2RlbF9jbG9nbG9nKQ0KYGBgDQoNCiMjIyAqKkvhur90IHF14bqjIG3DtCBow6xuaCBo4buTaSBxdXkgQ2xvZ2xvZyDEkWEgYmnhur9uKioNCg0KKipJbnRlcmNlcHQgKM6y4oKAID0gLTMuNzE1ODgpKiogIA0KS2hpIHThuqV0IGPhuqMgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIMSR4buBdSDhu58gbeG7qWMgdGhhbSBjaGnhur91ICgqSOG7jWMgbOG7sWMgPSBLw6ltKiwgKkdpYW8gdGnhur9wID0gS8OpbSosICpT4buRIGThu7Egw6FuID0gMCopLCBnacOhIHRy4buLICoqY2xvZ2xvZyBjxqEgYuG6o24qKiBsw6AgYC0zLjcyYC4gIA0KVGhlbyBjw7RuZyB0aOG7qWM6DQoNCiQkDQpwID0gMSAtIGVeey1lXntcZXRhfX0sDQokJA0KDQpnacOhIHRy4buLIMOibSBs4bubbiBraGnhur9uICRcZXRhJCBy4bqldCBuaOG7jyDih5IgJHAkIGfhuqduIGLhurFuZyAwLCB04bupYyBsw6AgKip4w6FjIHN14bqldCDEkcaw4bujYyB0dXnhu4NuIHLhuqV0IHRo4bqlcCoqLg0KDQoNCioqR2lhb1RpZXBU4buRdCAozrLigoUgPSAyLjA1NzQyKSoqICANCktoaSAqR2lhbyB0aeG6v3AgPSBU4buRdCogKHNvIHbhu5tpICpLw6ltKiksIGNsb2dsb2cgKip0xINuZyBt4bqhbmggMi4wNiDEkcahbiB24buLKiouICANCiRcZXRhJCB0xINuZyDEkcOhbmcga+G7gywgJHAgPSAxIC0gZV57LWVee1xldGF9fSQgdGnhur9uIG5oYW5oIMSR4bq/biAxIHRow6wgKip4w6FjIHN14bqldCB0dXnhu4NuIGThu6VuZyB0xINuZyBt4bqhbmgqKiwgcuG6pXQgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocCA8IDAuMDAxKS4NCg0KKipTb0R1QW4gKM6y4oKGID0gMC4zNTY4MSkqKiAgDQpN4buXaSAqKjEgZOG7sSDDoW4gdMSDbmcgdGjDqm0qKiBsw6BtIGNsb2dsb2cgdMSDbmcgMC4zNiDEkcahbiB24buLLiAgDQpjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhbyAocCA8IDAuMDAxKS4gVuG7m2kgbmhp4buBdSBk4buxIMOhbiBoxqFuLCAkXGV0YSQgdMSDbmcgdGjDrCAkcCQgdMSDbmcgdMawxqFuZyDhu6luZy4NCg0KKipL4bq/dCBsdeG6rW46KioNCg0KVMawxqFuZyB04buxIGhhaSBtw7QgaMOsbmggdHLGsOG7m2MsIG3DtCBow6xuaCBDbG9nbG9nIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgeeG6v3UgdOG7kSBr4bu5IG7Eg25nIGdpYW8gdGnhur9wIHbDoCBz4buRIGThu7Egw6FuIGhvw6BuIHRow6BuaCBjw7Mg4bqjbmggaMaw4bufbmcgdMOtY2ggY+G7sWMgxJHhur9uIGPGoSBo4buZaSB2aeG7h2MgbMOgbS4gQ8OhYyBo4buHIHPhu5EgZMawxqFuZyBjaG8gdGjhuqV5IGjhu41jIGzhu7FjLCBraW5oIG5naGnhu4dtIHRo4buxYyB04bqtcCwga+G7uSBuxINuZyBnaWFvIHRp4bq/cCB2w6Agc+G7kSBk4buxIMOhbiDEkeG7gXUgbMOgbSB0xINuZyAidOG7tyBs4buHIG5ndXkgY8ahIiAoaGF6YXJkIHJhdGUpIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nLg0KDQojIyAqKjMuNyBI4buTaSBxdXkgeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCDEkWEgYmnhur9uKioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMUE0pIMaw4bubYyBsxrDhu6NuZyB0cuG7sWMgdGnhur9wIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGLhurFuZyBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdGjDtG5nIHRoxrDhu51uZy4NCg0KQ8O0bmcgdGjhu6ljIG3DtCBow6xuaDoNCg0KJCQNClAoXHRleHR7VHV5ZW5EdW5nfV9pID0gMSBcbWlkIFhfaSkgPSBcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBcdGV4dHtIb2NMdWN9X2kgKyBcYmV0YV8yIFxjZG90IFx0ZXh0e0dpYW9UaWVwfV9pICsgXGJldGFfMyBcY2RvdCBcdGV4dHtTb0R1QW59X2kgKyBcZXBzaWxvbl9pDQokJA0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oKioNCg0KLSAkSF8wJDogQmnhur9uIGtow7RuZyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nICgkXGJldGEgPSAwJCkNCi0gJEhfMSQ6IEJp4bq/biBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nICgkXGJldGEgXG5lIDAkKSANCg0KYGBge3J9DQojIE3DtCBow6xuaCBMTVANCm1vZGVsX2dsbSA8LSBnbG0oZm9ybXVsYSA9IFR1eWVuRHVuZyB+IEhvY0x1YyArIEdpYW9UaWVwICsgU29EdUFuLA0KICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTEsDQogICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCg0Kc3VtbWFyeShtb2RlbF9nbG0pDQpgYGANCiMjIyAqKkvhur90IHF14bqjIGjhu5NpIHF1eSB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIMSRYSBiaeG6v24qKg0KDQoqKkjhu4cgc+G7kSBjaOG6t24gKEludGVyY2VwdCk6KiogIA0KS2hpIHNpbmggdmnDqm4gY8OzIGPDoWMgxJHhurdjIMSRaeG7g20gdGhhbSBjaGnhur91ICgqSOG7jWMgbOG7sWMgWeG6v3UsIEdpYW8gdGnhur9wIEvDqW0sIHbDoCBraMO0bmcgaG/DoG4gdGjDoG5oIGThu7Egw6FuIG7DoG8qKSwgdOG7tyBs4buHIGxvZy1vZGRzIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIGzDoCAqKi00LjAxNzk2KiouICANCk3hurdjIGTDuSBnacOhIHRy4buLIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8gKHAgPCAyZeKIkjE2KSwgdmnhu4djIGNodXnhu4NuIMSR4buVaSB0cuG7sWMgdGnhur9wIHNhbmcgeMOhYyBzdeG6pXQga2jDtG5nIMSRxqFuIGdp4bqjbiB2w6AgY+G6p24gxJHGsOG7o2MgeGVtIHjDqXQgY8O5bmcgduG7m2kgY8OhYyBiaeG6v24ga2jDoWMuDQoNCioqR2lhb1RpZXBU4buRdDoqKiAgDQpLaGkgc2luaCB2acOqbiBjw7Mga+G7uSBuxINuZyBnaWFvIHRp4bq/cCAqKlThu5F0IHRoYXkgdsOsIEvDqW0qKiwgbG9nLW9kZHMgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKip0xINuZyAyLjQwNzgzKiouICANClPhu7EgdGhheSDEkeG7lWkgbsOgeSBjw7MgKirDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvKiogKHAgPCAyZeKIkjE2KS4gIA0KxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgc2luaCB2acOqbiBjw7MgKipr4bu5IG7Eg25nIGdpYW8gdGnhur9wIFThu5F0IGPDsyBjxqEgaOG7mWkgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgY2FvIGjGoW4gxJHDoW5nIGvhu4MqKiBzbyB24bubaSBzaW5oIHZpw6puIGdpYW8gdGnhur9wIEvDqW0uDQoNCioqU29EdUFuOioqICANCktoaSBz4buRIGThu7Egw6FuIGhvw6BuIHRow6BuaCAqKnTEg25nIHRow6ptIDEqKiwgbG9nLW9kZHMgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgKip0xINuZyAwLjQ1ODA2KiouICANClPhu7EgdGhheSDEkeG7lWkgbsOgeSBjw7MgKirDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvKiogKHAgPCAyZeKIkjE2KS4gIA0KxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgKip2aeG7h2MgaG/DoG4gdGjDoG5oIG3hu5dpIGThu7Egw6FuIGzDoG0gdMSDbmcgY8ahIGjhu5lpIMSRxrDhu6NjIHR1eeG7g24gZOG7pW5nIG3hu5l0IGPDoWNoIMSRw6FuZyBr4buDKiouDQoNCioqS+G6v3QgbHXhuq1uIHThu6sgbcO0IGjDrG5oIExNUDoqKg0KDQpNw7QgaMOsbmggTE1QIGN1bmcgY+G6pXAgbeG7mXQgY8OhY2ggZGnhu4VuIGdp4bqjaSB0cuG7sWMgdGnhur9wIHbDoCBk4buFIGhp4buDdSB24buBIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIHnhur91IHThu5EuIEvhur90IHF14bqjIGNobyB0aOG6pXkga+G7uSBuxINuZyBnaWFvIHRp4bq/cCB2w6Agc+G7kSBk4buxIMOhbiBob8OgbiB0aMOgbmggbMOgbSB0xINuZyB4w6FjIHN14bqldCDEkcaw4bujYyB0dXnhu4NuIGThu6VuZy4gDQoNCiMjICoqMy44IMSQw6FuaCBnacOhIHbDoCBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHBow7kgaOG7o3AqKg0KDQojIyMgKiozLjguMSDEkMOhbmggZ2nDoSB0aMO0bmcgcXVhIGNo4buJIHPhu5EgQUlDKioNCmBgYHtyfQ0KYWljX3Jlc3VsdHMgPC0gZGF0YS5mcmFtZSgNCiAgTW9kZWwgPSBjKCJMb2dpdCIsICJQcm9iaXQiLCAiQ2xvZ2xvZyIpLA0KICBBSUMgICA9IGMoQUlDKG1vZGVsX2xvZ2l0KSwgQUlDKG1vZGVsX3Byb2JpdCksIEFJQyhtb2RlbF9jbG9nbG9nKSkNCikNCmthYmxlKGFpY19yZXN1bHRzLCBjYXB0aW9uPSJTbyBzw6FuaCBjaOG7iSBz4buRIEFJQyBj4bunYSBjw6FjIG3DtCBow6xuaCIpDQpgYGANCioqTmjhuq1uIHjDqXQ6KiogQmEgbcO0IGjDrG5oIGPDsyBjaOG7iSBz4buRIEFJQyBy4bqldCBn4bqnbiBuaGF1LiBNw7QgaMOsbmggUHJvYml0IGPDsyBBSUMgdGjhuqVwIG5o4bqldCAoNjgwOS4yNTYpLCBjaG8gdGjhuqV5IMSRw6J5IGzDoCBtw7QgaMOsbmggcGjDuSBo4bujcCBuaOG6pXQgduG7gSBt4bq3dCBjw6JuIGLhurFuZyBnaeG7r2EgxJHhu5kgY2jDrW5oIHjDoWMgdsOgIMSR4buZIHBo4bupYyB04bqhcC4NCg0KIyMjICoqMy44LjIgxJDDoW5oIGdpw6EgdGjDtG5nIHF1YSBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuKioNCmBgYHtyfQ0KY29uZl9tYXRyaXggPC0gZnVuY3Rpb24obW9kZWwsIGRhdGEsIGN1dG9mZiA9IDAuNSkgew0KICBwcmVkaWN0ZWRfcHJvYiA8LSBwcmVkaWN0KG1vZGVsLCBuZXdkYXRhID0gZGF0YSwgdHlwZSA9ICJyZXNwb25zZSIpDQogIHByZWRpY3RlZF9jbGFzcyA8LSBpZmVsc2UocHJlZGljdGVkX3Byb2IgPj0gY3V0b2ZmLCAiWWVzIiwgIk5vIikNCiAgYWN0dWFsX2NsYXNzIDwtIGRhdGEkVHV5ZW5EdW5nDQogIHRhYmxlKFByZWRpY3RlZCA9IHByZWRpY3RlZF9jbGFzcywgQWN0dWFsID0gYWN0dWFsX2NsYXNzKQ0KfQ0KDQpjbV9sb2dpdCA8LSBjb25mX21hdHJpeChtb2RlbF9sb2dpdCwgZGF0YTEpDQprYWJsZShjbV9sb2dpdCwgY2FwdGlvbj0iTWEgdHLhuq1uIG5o4bqnbSBs4bqrbiAtIE3DtCBow6xuaCBMb2dpdCIpDQpgYGANCioqTmjhuq1uIHjDqXQ6KiogTcO0IGjDrG5oIExvZ2l0IGThu7EgxJFvw6FuIMSRw7puZyA3ODcwIHRyxrDhu51uZyBo4bujcCAiTm8iIHbDoCA1NjQgdHLGsOG7nW5nIGjhu6NwICJZZXMiLiDEkOG7mSBjaMOtbmggeMOhYyBjaHVuZyBsw6AgKDc4NzArNTY0KS8xMDAwMCA9IDg0LjM0JS4gVHV5IG5oacOqbiBjaOG7iSBk4buxIMSRb8OhbiDEkcO6bmcgNTY0IHRyw6puIDEwMzUg4bupbmcgdmnDqm4gxJHGsOG7o2MgdHV54buDbiB0aOG7sWMgdOG6vywgxJFp4buBdSBuw6B5IGNobyB0aOG6pXkgbcO0IGjDrG5oIGLhu48gc8OzdCBraMOhIG5oaeG7gXUg4bupbmcgdmnDqm4gdGnhu4FtIG7Eg25nLg0KDQojIyMgKiozLjguMyDEkMOhbmggZ2nDoSB0aMO0bmcgcXVhIMSRxrDhu51uZyBjb25nIFJPQyB2w6AgZGnhu4duIHTDrWNoIEFVQyoqDQpgYGB7cn0NCiMgUk9DIGNobyBMb2dpdA0KcHJvYnNfbG9naXQgPC0gcHJlZGljdChtb2RlbF9sb2dpdCwgdHlwZSA9ICJyZXNwb25zZSIpDQpyb2NfbG9naXQgPC0gcm9jKHJlc3BvbnNlID0gZGF0YTEkVHV5ZW5EdW5nLCBwcmVkaWN0b3IgPSBwcm9ic19sb2dpdCkNCmF1Y19sb2dpdCA8LSBhdWMocm9jX2xvZ2l0KQ0KDQojIFJPQyBjaG8gUHJvYml0DQpwcm9ic19wcm9iaXQgPC0gcHJlZGljdChtb2RlbF9wcm9iaXQsIHR5cGUgPSAicmVzcG9uc2UiKQ0Kcm9jX3Byb2JpdCA8LSByb2MocmVzcG9uc2UgPSBkYXRhMSRUdXllbkR1bmcsIHByZWRpY3RvciA9IHByb2JzX3Byb2JpdCkNCmF1Y19wcm9iaXQgPC0gYXVjKHJvY19wcm9iaXQpDQoNCiMgUk9DIGNobyBDbG9nbG9nDQpwcm9ic19jbG9nbG9nIDwtIHByZWRpY3QobW9kZWxfY2xvZ2xvZywgdHlwZSA9ICJyZXNwb25zZSIpDQpyb2NfY2xvZ2xvZyA8LSByb2MocmVzcG9uc2UgPSBkYXRhMSRUdXllbkR1bmcsIHByZWRpY3RvciA9IHByb2JzX2Nsb2dsb2cpDQphdWNfY2xvZ2xvZyA8LSBhdWMocm9jX2Nsb2dsb2cpDQoNCiMgVuG6vSBjaHVuZyAzIMSRxrDhu51uZyBST0MNCnBsb3Qocm9jX2xvZ2l0LCBjb2wgPSAiYmx1ZSIsIG1haW4gPSAiU28gc8OhbmggxJHGsOG7nW5nIGNvbmcgUk9DIGPhu6dhIGPDoWMgbcO0IGjDrG5oIikNCmxpbmVzKHJvY19wcm9iaXQsIGNvbCA9ICJncmVlbiIpDQpsaW5lcyhyb2NfY2xvZ2xvZywgY29sID0gInJlZCIpDQpsZWdlbmQoImJvdHRvbXJpZ2h0IiwgbGVnZW5kPWMoIkxvZ2l0IiwgIlByb2JpdCIsICJDbG9nbG9nIiksIGNvbD1jKCJibHVlIiwgImdyZWVuIiwgInJlZCIpLCBsd2Q9MikNCg0KIyBC4bqjbmcgQVVDDQphdWNfdGFibGUgPC0gZGF0YS5mcmFtZShNb2RlbCA9IGMoIkxvZ2l0IiwgIlByb2JpdCIsICJDbG9nbG9nIiksDQogICAgICAgICAgICAgICAgICAgICAgICBBVUMgPSByb3VuZChjKGF1Y19sb2dpdCwgYXVjX3Byb2JpdCwgYXVjX2Nsb2dsb2cpLCA0KSkNCmthYmxlKGF1Y190YWJsZSwgY2FwdGlvbj0iU28gc8OhbmggY2jhu4kgc+G7kSBBVUMiKQ0KYGBgDQoqKk5o4bqtbiB4w6l0OioqIA0KDQpD4bqjIGJhIG3DtCBow6xuaCBMb2dpdCwgUHJvYml0IHbDoCBDbG9nbG9nIMSR4buBdSBjw7MgxJHGsOG7nW5nIGNvbmcgUk9DIG7hurFtIHLDtSByw6BuZyB0csOqbiDEkcaw4budbmcgbmfhuqt1IG5oacOqbiB2w6AgY2jhu4kgc+G7kSBBVUMgeOG6pXAgeOG7iSAwLjgzLCBjaG8gdGjhuqV5IGto4bqjIG7Eg25nIHBow6JuIGJp4buHdCB04buRdCBnaeG7r2EgY8OhYyDhu6luZyB2acOqbiDEkcaw4bujYyB0dXnhu4NuIHbDoCBraMO0bmcgxJHGsOG7o2MgdHV54buDbi4NCg0KIyMjICoqMy44LjQgS+G6v3QgbHXhuq1uIHbDoCBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0KioNCg0KROG7sWEgdHLDqm4gY8OhYyB0acOqdSBjaMOtIMSRw6FuaCBnacOhIGfhu5NtOiBjaOG7iSBz4buRIEFJQywgbWEgdHLhuq1uIG5o4bqnbSBs4bqrbiwgdsOgIMSRxrDhu51uZyBjb25nIFJPQyBjw7luZyBkaeG7h24gdMOtY2ggQVVDLCBjw7MgdGjhu4MgxJHGsGEgcmEgY8OhYyBuaOG6rW4gxJHhu4tuaCBzYXU6DQoNCi0gICAqKlbhu4EgQUlDOioqIE3DtCBow6xuaCBQcm9iaXQgY8OzIGdpw6EgdHLhu4sgQUlDIHRo4bqlcCBuaOG6pXQgKDY4MDkuMjU2KSwgY2hvIHRo4bqleSDEkcOieSBsw6AgbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0IHbhu4EgbeG6t3QgY8OibiBi4bqxbmcgZ2nhu69hIMSR4buZIGNow61uaCB4w6FjIHbDoCBt4bupYyDEkeG7mSBwaOG7qWMgdOG6oXAuDQotICAgKipW4buBIG1hIHRy4bqtbiBuaOG6p20gbOG6q246KiogQ+G6oyBiYSBtw7QgaMOsbmggxJHhu4F1IGNobyBr4bq/dCBxdeG6oyBwaMOibiBsb+G6oWkgdMawxqFuZyDEkeG7kWkgZ2nhu5FuZyBuaGF1LCB24bubaSDEkeG7mSBjaMOtbmggeMOhYyBjYW8uDQotICAgKipW4buBIMSRxrDhu51uZyBjb25nIFJPQyB2w6AgQVVDOioqIEdpw6EgdHLhu4sgQVVDIOG7nyBj4bqjIGJhIG3DtCBow6xuaCDEkeG7gXUgeOG6pXAgeOG7iSBuaGF1IChraG/huqNuZyAwLjgzKSwgY2hvIHRo4bqleSBuxINuZyBs4buxYyBwaMOibiBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbSBsw6AgdOG7kXQuDQoNCkThu7FhIHRyw6puIGJhIHRpw6p1IGNow60gxJHDoW5oIGdpw6EgbcO0IGjDrG5oIGfhu5NtOiBjaOG7iSBz4buRIEFJQywgbWEgdHLhuq1uIG5o4bqnbSBs4bqrbiwgdsOgIGRp4buHbiB0w61jaCBkxrDhu5tpIMSRxrDhu51uZyBjb25nIFJPQyAoQVVDKSwgbcO0IGjDrG5oIFByb2JpdCDEkcaw4bujYyB4ZW0gbMOgIHBow7kgaOG7o3AgbmjhuqV0IHRyb25nIG5naGnDqm4gY+G7qXUgbsOgeS4NCg0KIyAqKkNIxq/GoE5HIDQ6IEvhur5UIExV4bqsTioqDQoNCiMjICoqNC4xIEvhur90IGx14bqtbioqDQoNCkLDoGkgcGjDom4gdMOtY2ggxJHDoyB0aeG6v24gaMOgbmggcGjDom4gdMOtY2gga2jhuqMgbsSDbmcgxJHGsOG7o2MgdHV54buDbiBk4bulbmcgY+G7p2Egc2luaCB2acOqbiB0aMO0bmcgcXVhIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiwgYmFvIGfhu5NtIExvZ2l0LCBQcm9iaXQsIENsb2dsb2cgdsOgIG3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMUE0pLiBE4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCB2w6AgxJHhu4tuaCBsxrDhu6NuZyB0aOG7gyBoaeG7h24gxJHhurdjIMSRaeG7g20gaOG7jWMgdGh14bqtdCB2w6Aga+G7uSBuxINuZyBj4bunYSBzaW5oIHZpw6puLg0KDQpL4bq/dCBxdeG6oyBwaMOibiB0w61jaCBjaG8gdGjhuqV5IGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IHNpbmggdmnDqm4gxJHGsOG7o2MgdHV54buDbiBk4bulbmcgbMOgIHNpbmggdmnDqm4gY8OzICBr4bu5IG7Eg25nIGdpYW8gdGnhur9wIHThu5F0IHbDoCBob8OgbiB0aMOgbmggbmhp4buBdSBk4buxIMOhbiBjw7MgY8ahIGjhu5lpIHZp4buHYyBsw6BtIGNhbyBoxqFuIGPDoWMgc2luaCB2acOqbiBjw7JuIGzhuqFpLg0KDQpRdWEgc28gc8OhbmggY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4bqtbiB0aOG6pXkgbcO0IGjDrG5oIFByb2JpdCBjw7MgY2jhu4kgc+G7kSBBSUMgdGjhuqVwIG5o4bqldCAoNjgwOS4yNTYpIHbDoCDEkeG7k25nIHRo4budaSBjaG8ga+G6v3QgcXXhuqMgZOG7sSBiw6FvIGjhu6NwIGzDvSB24bubaSDEkeG7mSBjaMOtbmggeMOhYyBwaMOibiBsb+G6oWkgY2jhuqVwIG5o4bqtbiDEkcaw4bujYyAoQVVDIOKJiCAwLjgzKS4gRG8gxJHDsywgbcO0IGjDrG5oIFByb2JpdCDEkcaw4bujYyBs4buxYSBjaOG7jW4gbMOgIG3DtCBow6xuaCBwaMO5IGjhu6NwIG5o4bqldCDEkeG7gyB0aeG6v24gaMOgbmggZOG7sSBiw6FvIHjDoWMgc3XhuqV0IHR1eeG7g24gZOG7pW5nIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgbmdoacOqbiBj4bupdS4NCg0KIyMgKio0LjIgS2h1eeG6v24gbmdo4buLKioNCg0KVOG7qyBr4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1LCBjw7MgdGjhu4MgcsO6dCByYSBt4buZdCBz4buRIGjDoG0gw70gcXVhbiB0cuG7jW5nIGNobyBjw6FjIGLDqm4gbGnDqm4gcXVhbjoNCg0KLSAgICoqxJDhu5FpIHbhu5tpIHNpbmggdmnDqm46KiogQ+G6p24gbmjhuq1uIHRo4bupYyByw7UgdOG6p20gcXVhbiB0cuG7jW5nIGPhu6dhIHZp4buHYyBjw6JuIGLhurFuZyBnaeG7r2EgaOG7jWMgdOG6rXAgdsOgIGhv4bqhdCDEkeG7mW5nIHRo4buxYyB0aeG7hW4uIE5nw6B5IG5heSwgbmdvw6BpIHZp4buHYyBkdXkgdHLDrCB0aMOgbmggdMOtY2ggaOG7jWMgdOG6rXAgdOG7kXQsIHNpbmggdmnDqm4gbsOqbiBjaOG7pyDEkeG7mW5nIHTDrG0ga2nhur9tIGPGoSBo4buZaSB0aGFtIGdpYSB2w6BvIGPDoWMgZOG7sSDDoW4gdGjhu7FjIHThur8gdsOgIGtow7RuZyBuZ+G7q25nIHRyYXUgZOG7k2kga+G7uSBuxINuZyBnaWFvIHRp4bq/cC4NCi0gICAqKsSQ4buRaSB24bubaSBjw6FjIHRyxrDhu51uZyDEkeG6oWkgaOG7jWM6KiogQ2jGsMahbmcgdHLDrG5oIMSRw6BvIHThuqFvIGPhuqduIHTDrWNoIGjhu6NwIG5oaeG7gXUgaMahbiBjw6FjIGhv4bqhdCDEkeG7mW5nIHRo4buxYyBow6BuaCwga+G6v3QgbuG7kWkgZG9hbmggbmdoaeG7h3AgxJHhu4MgdOG6oW8gxJFp4buBdSBraeG7h24gdGjhu7FjIHThuq1wIGNobyBzaW5oIHZpw6puLCB2w6AgdOG7lSBjaOG7qWMgY8OhYyBraMOzYSBo4buNYywgd29ya3Nob3AgduG7gSBr4bu5IG7Eg25nIG3hu4FtLg0KLSAgICoqxJDhu5FpIHbhu5tpIG5ow6AgdHV54buDbiBk4bulbmc6KiogS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBt4buZdCBo4buTIHPGoSDhu6luZyB2acOqbiB0b8OgbiBkaeG7h24gKGvhur90IGjhu6NwIGPhuqMgaOG7jWMgdGh14bqtdCB2w6Aga2luaCBuZ2hp4buHbSkgdGjGsOG7nW5nIGPDsyB0aeG7gW0gbsSDbmcgY2FvIGjGoW4uIFF1eSB0csOsbmggdHV54buDbiBk4bulbmcgY8OzIHRo4buDIHhlbSB4w6l0IMSRYSBk4bqhbmcgY8OhYyB0acOqdSBjaMOtIHRoYXkgdsOsIGNo4buJIGThu7FhIHbDoG8gYuG6o25nIMSRaeG7g20uDQoNCiMjICoqNC4zIEjhuqFuIGNo4bq/IHbDoCBwaMawxqFuZyBoxrDhu5tuZyB0aeG6v3AgdGhlbyBj4bunYSDEkeG7gSB0w6BpKioNCg0KIyMjICoqNC4zLjEgSOG6oW4gY2jhur8gY+G7p2EgxJHhu4EgdMOgaSoqDQoNCk3hurdjIGTDuSBuZ2hpw6puIGPhu6l1IMSRw6MgY3VuZyBj4bqlcCBuaOG7r25nIGvhur90IHF14bqjIGjhu691IMOtY2gsIMSR4buBIHTDoGkgduG6q24gdOG7k24gdOG6oWkgbeG7mXQgc+G7kSBo4bqhbiBjaOG6vyBuaOG6pXQgxJHhu4tuaC4NCg0KVGjhu6kgbmjhuqV0LCBk4buvIGxp4buHdSDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyBuZ2hpw6puIGPhu6l1IG1hbmcgdMOtbmggY+G6r3QgbmdhbmcsIGRvIMSRw7Mga2jDtG5nIHBo4bqjbiDDoW5oIMSRxrDhu6NjIHPhu7EgcGjDoXQgdHJp4buDbiBr4bu5IG7Eg25nIHbDoCBraeG6v24gdGjhu6ljIGPhu6dhIHNpbmggdmnDqm4gdGhlbyB0aOG7nWkgZ2lhbi4NCg0KVGjhu6kgaGFpLCBtw7QgaMOsbmggY2jhu4kgeGVtIHjDqXQgbeG7mXQgc+G7kSBiaeG6v24gxJHDoyBjaG8gbcOgIGNoxrBhIHTDrW5oIMSR4bq/biBjw6FjIHnhur91IHThu5EgcXVhbiB0cuG7jW5nIGtow6FjIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gdmnhu4djIGzDoG0gbmjGsCBuZ8OgbmggaOG7jWMsIGRhbmggdGnhur9uZyBj4bunYSB0csaw4budbmcsIGhv4bq3YyBjw6FjIHnhur91IHThu5Ega2luaCB04bq/IHjDoyBo4buZaS4NCg0KIyMjICoqNC4zLjIgUGjGsMahbmcgaMaw4bubbmcgdGnhur9wIHRoZW8gY+G7p2EgxJHhu4EgdMOgaSoqDQoNCkThu7FhIHRyw6puIGPDoWMgaOG6oW4gY2jhur8gxJHDoyBuw6p1LCDEkeG7gSB0w6BpIGPDsyB0aOG7gyDEkcaw4bujYyBt4bufIHLhu5luZyB2w6AgcGjDoXQgdHJp4buDbiB0aGVvIG3hu5l0IHPhu5EgaMaw4bubbmcgc2F1Og0KDQpUaOG7qSBuaOG6pXQsIG3hu58gcuG7mW5nIHF1eSBtw7QgZOG7ryBsaeG7h3UgYuG6sW5nIGPDoWNoIGLhu5Ugc3VuZyB0aMOqbSBjw6FjIGJp4bq/biDEkeG7i25oIGzGsOG7o25nIHbDoCDEkeG7i25oIHTDrW5oIGPDsyB0w61uaCBnaeG6o2kgdGjDrWNoIGNhbyBuaMawIG5nw6BuaCBo4buNYywgxJFp4buDbSBJUSwgxJFp4buDbSBob+G6oXQgxJHhu5luZyBuZ2/huqFpIGtow7NhIMSR4buDIHBo4bqjbiDDoW5oIMSR4bqneSDEkeG7pyBoxqFuIG7Eg25nIGzhu7FjIGPhu6dhIOG7qW5nIHZpw6puLg0KDQpUaOG7qSBoYWksIG5naGnDqm4gY+G7qXUgY8OzIHRo4buDIHjDonkgZOG7sW5nIGPDoWMgbcO0IGjDrG5oIHBow6JuIHTDrWNoIG7Dom5nIGNhbyBoxqFuLCBuaMawIG3DtCBow6xuaCBwaGkgdHV54bq/biwgbcO0IGjDrG5oIHTGsMahbmcgdMOhYyBob+G6t2Mg4bupbmcgZOG7pW5nIGPDoWMgdGh14bqtdCB0b8OhbiBo4buNYyBtw6F5IChtYWNoaW5lIGxlYXJuaW5nKSDEkeG7gyBwaMOhdCBoaeG7h24gY8OhYyBt4buRaSBxdWFuIGjhu4cgcGjhu6ljIHThuqFwIHbDoCBj4bqjaSB0aGnhu4duIMSR4buZIGNow61uaCB4w6FjIHRyb25nIHBow6JuIGxv4bqhaS4NCg0KVGjhu6kgYmEsIMSR4buBIHTDoGkgbsOqbiB0aOG7sWMgaGnhu4duIGtp4buDbSDEkeG7i25oIMSR4buZIHBow7kgaOG7o3AgbcO0IGjDrG5oIGNo4bq3dCBjaOG6vSBoxqFuLCBuaMawIGtp4buDbSDEkeG7i25oIGhp4buHbiB0xrDhu6NuZyDEkWEgY+G7mW5nIHR1eeG6v24sIGhheSBraeG7g20gxJHhu4tuaCDEkeG7mSBjaMOtbmggeMOhYyBwaMOibiBsb+G6oWkgduG7m2kgY8OhYyBuZ8aw4buhbmcga2jDoWMgbmhhdSDEkeG7gyDEkeG6o20gYuG6o28gxJHhu5kgdGluIGPhuq15IGPhu6dhIGvhur90IHF14bqjIHRo4buRbmcga8OqLg==