knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
library(csv)
## Warning: package 'csv' was built under R version 4.3.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(epitools)
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.3.3
library(caret)  
## Warning: package 'caret' was built under R version 4.3.3
## Loading required package: lattice
## Warning: package 'lattice' was built under R version 4.3.3
## 
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
## 
##     MAE, RMSE

LỜI CAM ĐOAN

Tôi xin cam đoan rằng đề tài tiểu luận “Phân tích các yếu tố ảnh hưởng đến tình trạng nghỉ việc của nhân viên” là kết quả của quá trình học tập, nghiên cứu và phân tích dữ liệu thực tế mà tôi đã thực hiện dưới sự hướng dẫn của giảng viên ThS. Trần Mạnh Trường. Toàn bộ dữ liệu, kết quả xử lý và các nhận định trong bài đều được thực hiện một cách trung thực, không sao chép, không trích dẫn sai lệch. Tôi hoàn toàn chịu trách nhiệm trước nhà trường và giảng viên hướng dẫn về tính trung thực và nguyên bản của bài tiểu luận này.


LỜI CẢM ƠN

Trước tiên, tôi xin gửi lời cảm ơn chân thành đến Thầy Trần Mạnh Trường đã tận tình hướng dẫn, hỗ trợ tôi trong suốt quá trình thực hiện bài tiểu luận. Những nhận xét và định hướng khoa học từ Thầy đã giúp tôi tiếp cận đề tài một cách hệ thống, logic và có chiều sâu.

Tôi cũng xin chân thành cảm ơn các Thầy, Cô trong Khoa Khoa học dữ liệu của Trường Đại học Tài chính – Marketing, những người đã trang bị cho tôi nền tảng kiến thức cần thiết để thực hiện đề tài. Các học phần như Phân tích dữ liệu định tính, Kinh tế lượng, và Thống kê ứng dụng đã đóng vai trò quan trọng trong việc xây dựng mô hình và diễn giải kết quả trong bài. Cuối cùng, tôi xin chân thành cảm ơn bạn bè đã luôn đồng hành, cổ vũ tinh thần và tạo điều kiện thuận lợi để tôi hoàn thành bài tiểu luận đúng thời hạn.


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

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

Trong bối cảnh cạnh tranh toàn cầu và sự phát triển nhanh chóng của thị trường lao động, nguồn nhân lực đã trở thành yếu tố cốt lõi quyết định đến sự thành công và phát triển bền vững của mỗi tổ chức. Tuy nhiên, tình trạng nghỉ việc của nhân viên đang diễn ra ngày càng phổ biến và trở thành một thách thức lớn đối với doanh nghiệp. Nghỉ việc không chỉ gây tổn thất về chi phí tuyển dụng, đào tạo mà còn ảnh hưởng đến tinh thần làm việc, hiệu suất chung và sự ổn định nội bộ.

Việc tìm hiểu các yếu tố ảnh hưởng đến tình trạng nghỉ việc là cần thiết để giúp doanh nghiệp xây dựng các chính sách giữ chân nhân tài, cải thiện môi trường làm việc và nâng cao hiệu quả quản trị nhân sự. Trong đó, làm thêm giờ (OverTime), mức độ hài lòng công việc, cân bằng công việc – cuộc sống, và đặc điểm cá nhân là những yếu tố được quan tâm đặc biệt.

Xuất phát từ tầm quan trọng nêu trên, tác giả lựa chọn đề tài “Phân tích các yếu tố ảnh hưởng đến tình trạng nghỉ việc của nhân viên” với mong muốn ứng dụng các kỹ thuật phân tích định lượng nhằm đo lường và đánh giá ảnh hưởng của từng yếu tố đến khả năng nghỉ việc của người lao động, từ đó đề xuất các giải pháp thiết thực cho doanh nghiệp.

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

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

Mục tiêu của nghiên cứu này là phân tích mối quan hệ giữa các yếu tố cá nhân và môi trường làm việc đến xác suất nghỉ việc của nhân viên, nhằm làm rõ mức độ ảnh hưởng của từng yếu tố đối với hành vi rời bỏ tổ chức. Trên cơ sở đó, nghiên cứu tiến hành xây dựng các mô hình hồi quy nhị phân bao gồm Linear Probability Model (LPM), Logit, Probit và Cloglog để lượng hóa tác động của từng biến độc lập. Sau cùng, các mô hình được so sánh về hiệu quả dự báo thông qua các tiêu chí đánh giá thống kê, từ đó lựa chọn mô hình phù hợp nhất phục vụ cho việc dự báo xu hướng nghỉ việc và đề xuất chính sách quản trị nhân sự hiệu quả hơn.

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

  • Những yếu tố nào ảnh hưởng đến xác suất nghỉ việc của nhân viên?

  • Mức độ ảnh hưởng của làm thêm giờ (OverTime) đến khả năng nghỉ việc như thế nào?

  • Mô hình hồi quy nhị phân nào là phù hợp nhất để phân tích hành vi nghỉ việc?

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

  • Đối tượng nghiên cứu: Hành vi nghỉ việc của nhân viên, được phản ánh qua biến phụ thuộc nhị phân (Attrition).

  • Phạm vi nghiên cứu: Dữ liệu nghiên cứu sử dụng tập dữ liệu HR Analytics của IBM, trong đó bao gồm thông tin về hơn 1.400 nhân viên cùng các đặc điểm cá nhân, công việc, môi trường làm việc và tình trạng nghỉ việc.

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

Trong quá trình thực hiện, tiểu luận áp dụng kết hợp nhiều phương pháp định lượng nhằm đảm bảo tính khách quan và chính xác trong phân tích. Trước hết, phương pháp thống kê mô tả được sử dụng để trình bày tổng quan đặc điểm phân phối của các biến định tính và định lượng trong tập dữ liệu. Tiếp theo, các phương pháp kiểm định giả thuyết như kiểm định Chi-squared, ước lượng khoảng tin cậy, hệ số Odds Ratio và Relative Risk được triển khai để đánh giá mối quan hệ giữa biến phụ thuộc và các yếu tố liên quan. Trên cơ sở đó, nghiên cứu tiến hành ước lượng và so sánh bốn mô hình hồi quy nhị phân, bao gồm Linear Probability Model (LPM), Logit, Probit và Cloglog, nhằm xác định mô hình phù hợp nhất để dự báo khả năng nghỉ việc của nhân viên. Cuối cùng, các mô hình được đánh giá và lựa chọn thông qua các tiêu chí thống kê như AIC, Brier Score và ma trận nhầm lẫn, từ đó xác định mô hình tối ưu phục vụ cho phân tích dự báo và đề xuất chính sách quản trị nhân sự.

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

Ngoài phần Lời cam đoanLời cảm ơn, nội dung tiểu luận được chia thành 4 chương chính:

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

  • Chương 2: Cơ sở lý thuyết và tổng quan nghiên cứu : Giới thiệu cơ sở lý thuyết về hành vi nghỉ việc, mô hình hồi quy nhị phân và tổng quan các nghiên cứu liên quan.

  • Chương 3: Phân tích dữ liệu và kết quả nghiên cứu: Bao gồm mô tả dữ liệu, kết quả thống kê, kiểm định và hồi quy; diễn giải kết quả và rút ra kết luận thực tiễn.

  • Chương 4: Kết luận bao gồm kết luận, hàm ý chính sách, hạn chế và hướng nghiên cứu tiếp theo.


CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VÀ DỮ LIỆU NGHIÊN CỨU

2.1 Các mô hình hồi quy nhị phân

2.1.1 Khái quát về mô hình hồi quy nhị phân

Mô hình hồi quy nhị phân là một kỹ thuật phân tích định lượng được sử dụng khi biến phụ thuộc là biến nhị phân, tức chỉ nhận hai giá trị 0 và 1. Mục tiêu của mô hình là ước lượng xác suất xảy ra của một sự kiện (giá trị 1) dựa trên các biến độc lập giải thích. Trong nghiên cứu này, biến phụ thuộc là tình trạng nghỉ việc (Attrition), với giá trị 1 biểu thị nhân viên nghỉ việc và giá trị 0 là không nghỉ việc.

So với hồi quy tuyến tính truyền thống, mô hình hồi quy nhị phân yêu cầu các phương pháp và hàm liên kết đặc thù nhằm đảm bảo rằng giá trị ước lượng luôn nằm trong khoảng [0, 1] – vốn là giới hạn tự nhiên của xác suất. Các mô hình phổ biến được sử dụng gồm: mô hình xác suất tuyến tính (LPM), mô hình Logit, mô hình Probit và mô hình Cloglog.

2.1.2 Mô hình xác suất tuyến tính (Linear Probability Model – LPM)

Mô hình LPM có dạng:

\[ P(Y = 1 \mid X) = \beta_0 + \beta_1 X \]

Trong đó, \(Y\) là biến phụ thuộc nhị phân, \(X\) là biến độc lập. Mặc dù đơn giản và dễ ước lượng bằng phương pháp bình phương tối thiểu (OLS), mô hình LPM gặp phải hai hạn chế chính: (i) dự đoán xác suất có thể nằm ngoài khoảng [0,1]; và (ii) sai số có phương sai không đồng nhất (heteroskedasticity). Do đó, LPM thường chỉ được dùng như một bước khởi đầu hoặc so sánh tham khảo.

2.1.3 Mô hình Logit

Mô hình Logit khắc phục các nhược điểm của LPM bằng cách sử dụng hàm liên kết logistic:

\[ \log\left(\frac{P(Y=1)}{1 - P(Y=1)}\right) = \beta_0 + \beta_1 X \]

Hàm logit biểu diễn log-odds (logarit của tỷ số odds). Ước lượng từ mô hình Logit có thể được chuyển thành Odds Ratio để dễ diễn giải. Mô hình đảm bảo xác suất luôn nằm trong [0,1] và phù hợp với bản chất nhị phân của biến phụ thuộc.

2.1.4 Mô hình Probit

Mô hình Probit sử dụng hàm liên kết là hàm phân phối tích lũy chuẩn (CDF):

\[ P(Y = 1 \mid X) = \Phi(\beta_0 + \beta_1 X) \]

Trong đó, \(\Phi(\cdot)\) là hàm CDF của phân phối chuẩn chuẩn hóa. Probit thường cho kết quả tương tự Logit nhưng được ưa chuộng hơn trong các nghiên cứu hành vi khi phân phối dữ liệu có dạng chuẩn. Mặc dù hệ số không trực tiếp diễn giải thành Odds Ratio, Probit cung cấp thông tin sâu sắc về biến động xác suất theo chuẩn hóa thống kê.

2.1.5 Mô hình Cloglog (Complementary Log-Log)

Mô hình Cloglog sử dụng hàm liên kết:

\[ \log(-\log(1 - P(Y = 1))) = \beta_0 + \beta_1 X \]

Cloglog đặc biệt phù hợp khi xác suất xảy ra sự kiện rất nhỏ hoặc phân phối dữ liệu bất đối xứng. Mô hình này có độ dốc lớn ở một đầu của phân phối, cho phép mô tả tốt hơn các tình huống có hiện tượng hiếm hoặc rủi ro cao bất thường.

2.1.6 Phương pháp Ước lượng Hợp lý Tối đa (Maximum Likelihood Estimation – MLE)

Phương pháp Ước lượng Hợp lý Tối đa (Maximum Likelihood Estimation – MLE) là một kỹ thuật thống kê phổ biến dùng để ước lượng các tham số trong mô hình hồi quy nhị phân như Logit, Probit và Cloglog. Ý tưởng cốt lõi của MLE là tìm bộ giá trị của các tham số làm tối đa hóa khả năng xảy ra của dữ liệu quan sát được, dưới giả định rằng dữ liệu tuân theo một phân phối xác định.

Nguyên lý của MLE

Giả sử ta có một tập dữ liệu gồm \(n\) quan sát, với biến phụ thuộc nhị phân \(Y_i \in \{0,1\}\) và vector biến độc lập \(X_i\). Mục tiêu của MLE là tìm tham số \(\beta\) sao cho xác suất đồng thời xảy ra của toàn bộ dữ liệu được quan sát là lớn nhất.

Hàm hợp lý (likelihood function) được xác định như sau:

\[ L(\beta) = \prod_{i=1}^{n} P(Y_i = 1 \mid X_i)^{Y_i} \cdot [1 - P(Y_i = 1 \mid X_i)]^{1 - Y_i} \]

Hàm log-likelihood (logarit của hàm hợp lý), thường được sử dụng để tính toán và tối ưu hóa:

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

Trong đó \(P_i = P(Y_i = 1 \mid X_i; \beta)\) phụ thuộc vào mô hình lựa chọn (Logit, Probit hoặc Cloglog).

Ưu điểm và ứng dụng

  • MLE cho phép ước lượng các mô hình phi tuyến như Logit, Probit và Cloglog một cách hiệu quả và thống nhất.

  • MLE cung cấp ước lượng không chệch và nhất quán khi cỡ mẫu đủ lớn (theo luật số lớn và định lý giới hạn trung tâm).

  • Các kết quả từ MLE còn cho phép kiểm định giả thuyết thông qua thống kê Wald, kiểm định log-likelihood ratio và kiểm định Lagrange Multiplier.

  • MLE cũng giúp dễ dàng suy ra độ lệch chuẩn, khoảng tin cậy và kiểm định ý nghĩa thống kê cho các hệ số mô hình.

2.2 Relative Risk và Odds Ratio

Trong phân tích dữ liệu với biến phụ thuộc nhị phân, đặc biệt là trong các nghiên cứu về hành vi hoặc y tế – xã hội, Relative Risk (RR)Odds Ratio (OR) là hai chỉ số cơ bản và quan trọng nhằm đánh giá mối liên hệ giữa một biến độc lập và xác suất xảy ra của một sự kiện. Cả hai chỉ số đều cung cấp cái nhìn trực quan và định lượng về mức độ rủi ro hoặc khả năng xảy ra sự kiện khi có hoặc không có yếu tố tác động.

2.2.1 Relative Risk

Relative Risk (RR) là tỷ lệ giữa xác suất xảy ra sự kiện ở nhóm có yếu tố phơi nhiễm với xác suất xảy ra sự kiện ở nhóm không có yếu tố phơi nhiễm. Đây là chỉ số trực tiếp phản ánh rủi ro tương đối.

\[ RR = \frac{P(Y = 1 \mid X = 1)}{P(Y = 1 \mid X = 0)} \]

Trong đó:

  • \(P(Y = 1 \mid X = 1)\): Xác suất xảy ra sự kiện (ví dụ: nghỉ việc) trong nhóm yếu tố (ví dụ: làm thêm giờ).

  • \(P(Y = 1 \mid X = 0)\): Xác suất xảy ra sự kiện trong nhóm không có yếu tố.

Diễn giải:

  • RR = 1: Không có sự khác biệt về rủi ro giữa hai nhóm.

  • RR > 1: Nhóm có yếu tố phơi nhiễm có rủi ro cao hơn nhóm không có yếu tố.

  • RR < 1: Nhóm có yếu tố phơi nhiễm có rủi ro thấp hơn nhóm không có yếu tố.

2.2.2 Odds Ratio

Odds Ratio (OR) là tỷ lệ giữa tỷ số odds của hai nhóm – đo lường mức độ xảy ra sự kiện tương đối theo dạng tỷ số xác suất so với phần còn lại.

\[ OR = \frac{\dfrac{P(Y = 1 \mid X = 1)}{1 - P(Y = 1 \mid X = 1)}}{\dfrac{P(Y = 1 \mid X = 0)}{1 - P(Y = 1 \mid X = 0)}} \]

\[ = \frac{\text{Odds ở nhóm có yếu tố}}{\text{Odds ở nhóm không có yếu tố}} \]

Trong các mô hình hồi quy Logit, hệ số \(\beta\) của biến độc lập chính là log(Odds Ratio). Do đó, Odds Ratio có thể được tính trực tiếp từ kết quả hồi quy:

\[ OR = \exp(\beta) \]

Diễn giải:

  • OR = 1: Không có sự khác biệt về odds giữa hai nhóm.

  • OR > 1: Odds xảy ra sự kiện cao hơn ở nhóm có yếu tố.

  • OR < 1: Odds xảy ra sự kiện thấp hơn ở nhóm có yếu tố.

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

data <- read.csv("D:/Downloads/WA_Fn-UseC_-HR-Employee-Attrition.csv")
str(data)
## 'data.frame':    1470 obs. of  35 variables:
##  $ Age                     : int  41 49 37 33 27 32 59 30 38 36 ...
##  $ Attrition               : chr  "Yes" "No" "Yes" "No" ...
##  $ BusinessTravel          : chr  "Travel_Rarely" "Travel_Frequently" "Travel_Rarely" "Travel_Frequently" ...
##  $ DailyRate               : int  1102 279 1373 1392 591 1005 1324 1358 216 1299 ...
##  $ Department              : chr  "Sales" "Research & Development" "Research & Development" "Research & Development" ...
##  $ DistanceFromHome        : int  1 8 2 3 2 2 3 24 23 27 ...
##  $ Education               : int  2 1 2 4 1 2 3 1 3 3 ...
##  $ EducationField          : chr  "Life Sciences" "Life Sciences" "Other" "Life Sciences" ...
##  $ EmployeeCount           : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ EmployeeNumber          : int  1 2 4 5 7 8 10 11 12 13 ...
##  $ EnvironmentSatisfaction : int  2 3 4 4 1 4 3 4 4 3 ...
##  $ Gender                  : chr  "Female" "Male" "Male" "Female" ...
##  $ HourlyRate              : int  94 61 92 56 40 79 81 67 44 94 ...
##  $ JobInvolvement          : int  3 2 2 3 3 3 4 3 2 3 ...
##  $ JobLevel                : int  2 2 1 1 1 1 1 1 3 2 ...
##  $ JobRole                 : chr  "Sales Executive" "Research Scientist" "Laboratory Technician" "Research Scientist" ...
##  $ JobSatisfaction         : int  4 2 3 3 2 4 1 3 3 3 ...
##  $ MaritalStatus           : chr  "Single" "Married" "Single" "Married" ...
##  $ MonthlyIncome           : int  5993 5130 2090 2909 3468 3068 2670 2693 9526 5237 ...
##  $ MonthlyRate             : int  19479 24907 2396 23159 16632 11864 9964 13335 8787 16577 ...
##  $ NumCompaniesWorked      : int  8 1 6 1 9 0 4 1 0 6 ...
##  $ Over18                  : chr  "Y" "Y" "Y" "Y" ...
##  $ OverTime                : chr  "Yes" "No" "Yes" "Yes" ...
##  $ PercentSalaryHike       : int  11 23 15 11 12 13 20 22 21 13 ...
##  $ PerformanceRating       : int  3 4 3 3 3 3 4 4 4 3 ...
##  $ RelationshipSatisfaction: int  1 4 2 3 4 3 1 2 2 2 ...
##  $ StandardHours           : int  80 80 80 80 80 80 80 80 80 80 ...
##  $ StockOptionLevel        : int  0 1 0 0 1 0 3 1 0 2 ...
##  $ TotalWorkingYears       : int  8 10 7 8 6 8 12 1 10 17 ...
##  $ TrainingTimesLastYear   : int  0 3 3 3 3 2 3 2 2 3 ...
##  $ WorkLifeBalance         : int  1 3 3 3 3 2 2 3 3 2 ...
##  $ YearsAtCompany          : int  6 10 0 8 2 7 1 1 9 7 ...
##  $ YearsInCurrentRole      : int  4 7 0 7 2 7 0 0 7 7 ...
##  $ YearsSinceLastPromotion : int  0 1 0 3 2 3 0 0 1 7 ...
##  $ YearsWithCurrManager    : int  5 7 0 0 2 6 0 0 8 7 ...
summary(data)
##       Age         Attrition         BusinessTravel       DailyRate     
##  Min.   :18.00   Length:1470        Length:1470        Min.   : 102.0  
##  1st Qu.:30.00   Class :character   Class :character   1st Qu.: 465.0  
##  Median :36.00   Mode  :character   Mode  :character   Median : 802.0  
##  Mean   :36.92                                         Mean   : 802.5  
##  3rd Qu.:43.00                                         3rd Qu.:1157.0  
##  Max.   :60.00                                         Max.   :1499.0  
##   Department        DistanceFromHome   Education     EducationField    
##  Length:1470        Min.   : 1.000   Min.   :1.000   Length:1470       
##  Class :character   1st Qu.: 2.000   1st Qu.:2.000   Class :character  
##  Mode  :character   Median : 7.000   Median :3.000   Mode  :character  
##                     Mean   : 9.193   Mean   :2.913                     
##                     3rd Qu.:14.000   3rd Qu.:4.000                     
##                     Max.   :29.000   Max.   :5.000                     
##  EmployeeCount EmployeeNumber   EnvironmentSatisfaction    Gender         
##  Min.   :1     Min.   :   1.0   Min.   :1.000           Length:1470       
##  1st Qu.:1     1st Qu.: 491.2   1st Qu.:2.000           Class :character  
##  Median :1     Median :1020.5   Median :3.000           Mode  :character  
##  Mean   :1     Mean   :1024.9   Mean   :2.722                             
##  3rd Qu.:1     3rd Qu.:1555.8   3rd Qu.:4.000                             
##  Max.   :1     Max.   :2068.0   Max.   :4.000                             
##    HourlyRate     JobInvolvement    JobLevel       JobRole         
##  Min.   : 30.00   Min.   :1.00   Min.   :1.000   Length:1470       
##  1st Qu.: 48.00   1st Qu.:2.00   1st Qu.:1.000   Class :character  
##  Median : 66.00   Median :3.00   Median :2.000   Mode  :character  
##  Mean   : 65.89   Mean   :2.73   Mean   :2.064                     
##  3rd Qu.: 83.75   3rd Qu.:3.00   3rd Qu.:3.000                     
##  Max.   :100.00   Max.   :4.00   Max.   :5.000                     
##  JobSatisfaction MaritalStatus      MonthlyIncome    MonthlyRate   
##  Min.   :1.000   Length:1470        Min.   : 1009   Min.   : 2094  
##  1st Qu.:2.000   Class :character   1st Qu.: 2911   1st Qu.: 8047  
##  Median :3.000   Mode  :character   Median : 4919   Median :14236  
##  Mean   :2.729                      Mean   : 6503   Mean   :14313  
##  3rd Qu.:4.000                      3rd Qu.: 8379   3rd Qu.:20462  
##  Max.   :4.000                      Max.   :19999   Max.   :26999  
##  NumCompaniesWorked    Over18            OverTime         PercentSalaryHike
##  Min.   :0.000      Length:1470        Length:1470        Min.   :11.00    
##  1st Qu.:1.000      Class :character   Class :character   1st Qu.:12.00    
##  Median :2.000      Mode  :character   Mode  :character   Median :14.00    
##  Mean   :2.693                                            Mean   :15.21    
##  3rd Qu.:4.000                                            3rd Qu.:18.00    
##  Max.   :9.000                                            Max.   :25.00    
##  PerformanceRating RelationshipSatisfaction StandardHours StockOptionLevel
##  Min.   :3.000     Min.   :1.000            Min.   :80    Min.   :0.0000  
##  1st Qu.:3.000     1st Qu.:2.000            1st Qu.:80    1st Qu.:0.0000  
##  Median :3.000     Median :3.000            Median :80    Median :1.0000  
##  Mean   :3.154     Mean   :2.712            Mean   :80    Mean   :0.7939  
##  3rd Qu.:3.000     3rd Qu.:4.000            3rd Qu.:80    3rd Qu.:1.0000  
##  Max.   :4.000     Max.   :4.000            Max.   :80    Max.   :3.0000  
##  TotalWorkingYears TrainingTimesLastYear WorkLifeBalance YearsAtCompany  
##  Min.   : 0.00     Min.   :0.000         Min.   :1.000   Min.   : 0.000  
##  1st Qu.: 6.00     1st Qu.:2.000         1st Qu.:2.000   1st Qu.: 3.000  
##  Median :10.00     Median :3.000         Median :3.000   Median : 5.000  
##  Mean   :11.28     Mean   :2.799         Mean   :2.761   Mean   : 7.008  
##  3rd Qu.:15.00     3rd Qu.:3.000         3rd Qu.:3.000   3rd Qu.: 9.000  
##  Max.   :40.00     Max.   :6.000         Max.   :4.000   Max.   :40.000  
##  YearsInCurrentRole YearsSinceLastPromotion YearsWithCurrManager
##  Min.   : 0.000     Min.   : 0.000          Min.   : 0.000      
##  1st Qu.: 2.000     1st Qu.: 0.000          1st Qu.: 2.000      
##  Median : 3.000     Median : 1.000          Median : 3.000      
##  Mean   : 4.229     Mean   : 2.188          Mean   : 4.123      
##  3rd Qu.: 7.000     3rd Qu.: 3.000          3rd Qu.: 7.000      
##  Max.   :18.000     Max.   :15.000          Max.   :17.000

Bộ dữ liệu về nghỉ việc của nhân viên (Employee Attrition) được xây dựng bởi các nhà khoa học dữ liệu của IBM bao gồm 1470 quan sát với 35 biến nhằm mô phỏng môi trường làm việc thực tế trong doanh nghiệp.
Mục tiêu của bộ dữ liệu là hỗ trợ phân tích các yếu tố ảnh hưởng đến việc nhân viên nghỉ việc, từ đó giúp doanh nghiệp xây dựng chính sách nhân sự phù hợp.

Dữ liệu gồm nhiều biến thể hiện thông tin cá nhân, đặc điểm công việc, mức độ hài lònghiệu suất làm việc của nhân viên.

Danh sách các biến trong bộ dữ liệu

Tên biến Mô tả
Age Tuổi của nhân viên
Attrition Tình trạng nghỉ việc (Yes/No)
BusinessTravel Tần suất đi công tác
DailyRate Mức lương hàng ngày
Department Phòng ban làm việc
DistanceFromHome Khoảng cách từ nhà đến nơi làm việc
Education Trình độ học vấn (1: Dưới đại học đến 5: Tiến sĩ)
EducationField Lĩnh vực học tập
EmployeeCount Số lượng nhân viên (giá trị không đổi)
EmployeeNumber Mã định danh nhân viên
EnvironmentSatisfaction Mức độ hài lòng với môi trường làm việc
Gender Giới tính
HourlyRate Mức lương theo giờ
JobInvolvement Mức độ tham gia công việc
JobLevel Cấp bậc công việc
JobRole Vị trí công việc
JobSatisfaction Mức độ hài lòng với công việc
MaritalStatus Tình trạng hôn nhân
MonthlyIncome Thu nhập hàng tháng
MonthlyRate Mức lương cố định hàng tháng
NumCompaniesWorked Số công ty đã từng làm việc
Over18 Trên 18 tuổi
OverTime Làm thêm giờ (Yes/No)
PercentSalaryHike Tỷ lệ tăng lương gần nhất
PerformanceRating Đánh giá hiệu suất
RelationshipSatisfaction Mức độ hài lòng với mối quan hệ trong công ty
StandardHours Giờ làm tiêu chuẩn (không thay đổi)
StockOptionLevel Mức quyền chọn cổ phiếu
TotalWorkingYears Tổng số năm làm việc
TrainingTimesLastYear Số lần được đào tạo trong năm
WorkLifeBalance Cân bằng giữa công việc và cuộc sống
YearsAtCompany Số năm làm việc tại công ty hiện tại
YearsInCurrentRole Số năm ở vị trí hiện tại
YearsSinceLastPromotion Số năm kể từ lần thăng chức gần nhất
YearsWithCurrManager Số năm làm việc với quản lý hiện tại

Các biến định tính bao gồm

  • Attrition

  • BusinessTravel

  • Department

  • Education

  • EducationField

  • EnvironmentSatisfaction

  • Gender

  • JobInvolvement

  • JobLevel

  • JobRole

  • JobSatisfaction

  • MaritalStatus

  • OverTime

  • Over18

  • PerformanceRating

  • RelationshipSatisfaction

  • StockOptionLevel

  • WorkLifeBalance

# Tạo bộ dữ liệu chỉ chứa các biến định tính
data1 <- data %>%
  select(
    Attrition,
    BusinessTravel,
    Department,
    Education,
    EducationField,
    EnvironmentSatisfaction,
    Gender,
    JobInvolvement,
    JobLevel,
    JobRole,
    JobSatisfaction,
    MaritalStatus,
    OverTime,
    Over18,
    PerformanceRating,
    RelationshipSatisfaction,
    StockOptionLevel,
    WorkLifeBalance
  )
# Xem trước dữ liệu mới
str(data1)
## 'data.frame':    1470 obs. of  18 variables:
##  $ Attrition               : chr  "Yes" "No" "Yes" "No" ...
##  $ BusinessTravel          : chr  "Travel_Rarely" "Travel_Frequently" "Travel_Rarely" "Travel_Frequently" ...
##  $ Department              : chr  "Sales" "Research & Development" "Research & Development" "Research & Development" ...
##  $ Education               : int  2 1 2 4 1 2 3 1 3 3 ...
##  $ EducationField          : chr  "Life Sciences" "Life Sciences" "Other" "Life Sciences" ...
##  $ EnvironmentSatisfaction : int  2 3 4 4 1 4 3 4 4 3 ...
##  $ Gender                  : chr  "Female" "Male" "Male" "Female" ...
##  $ JobInvolvement          : int  3 2 2 3 3 3 4 3 2 3 ...
##  $ JobLevel                : int  2 2 1 1 1 1 1 1 3 2 ...
##  $ JobRole                 : chr  "Sales Executive" "Research Scientist" "Laboratory Technician" "Research Scientist" ...
##  $ JobSatisfaction         : int  4 2 3 3 2 4 1 3 3 3 ...
##  $ MaritalStatus           : chr  "Single" "Married" "Single" "Married" ...
##  $ OverTime                : chr  "Yes" "No" "Yes" "Yes" ...
##  $ Over18                  : chr  "Y" "Y" "Y" "Y" ...
##  $ PerformanceRating       : int  3 4 3 3 3 3 4 4 4 3 ...
##  $ RelationshipSatisfaction: int  1 4 2 3 4 3 1 2 2 2 ...
##  $ StockOptionLevel        : int  0 1 0 0 1 0 3 1 0 2 ...
##  $ WorkLifeBalance         : int  1 3 3 3 3 2 2 3 3 2 ...
head(data1)
##   Attrition    BusinessTravel             Department Education EducationField
## 1       Yes     Travel_Rarely                  Sales         2  Life Sciences
## 2        No Travel_Frequently Research & Development         1  Life Sciences
## 3       Yes     Travel_Rarely Research & Development         2          Other
## 4        No Travel_Frequently Research & Development         4  Life Sciences
## 5        No     Travel_Rarely Research & Development         1        Medical
## 6        No Travel_Frequently Research & Development         2  Life Sciences
##   EnvironmentSatisfaction Gender JobInvolvement JobLevel               JobRole
## 1                       2 Female              3        2       Sales Executive
## 2                       3   Male              2        2    Research Scientist
## 3                       4   Male              2        1 Laboratory Technician
## 4                       4 Female              3        1    Research Scientist
## 5                       1   Male              3        1 Laboratory Technician
## 6                       4   Male              3        1 Laboratory Technician
##   JobSatisfaction MaritalStatus OverTime Over18 PerformanceRating
## 1               4        Single      Yes      Y                 3
## 2               2       Married       No      Y                 4
## 3               3        Single      Yes      Y                 3
## 4               3       Married      Yes      Y                 3
## 5               2       Married       No      Y                 3
## 6               4        Single       No      Y                 3
##   RelationshipSatisfaction StockOptionLevel WorkLifeBalance
## 1                        1                0               1
## 2                        4                1               3
## 3                        2                0               3
## 4                        3                0               3
## 5                        4                1               3
## 6                        3                0               2

2.4 Quy trình nghiên cứu

Quy trình nghiên cứu được tác giả 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. Cụ thể bao gồm các bước sau:

Bước 1: Xác định vấn đề và câu hỏi nghiên cứu

Tác giả nhận diện tình trạng nghỉ việc của nhân viên là một vấn đề quan trọng trong quản trị nguồn nhân lực. Câu hỏi nghiên cứu đặt ra là: “Các yếu tố cá nhân và môi trường làm việc nào ảnh hưởng đến xác suất nghỉ việc của nhân viên?”

Bước 2: Thu thập và xử lý dữ liệu

Sử dụng bộ dữ liệu IBM HR Analytics Employee Attrition, bao gồm các biến định tính (OverTime, MaritalStatus, JobSatisfaction, WorkLifeBalance,…) và biến định lượng, với biến phụ thuộc là Attrition – thể hiện tình trạng nghỉ việc (Yes/No).

  • Tiến hành mã hóa nhị phân biến phụ thuộc (Attrition_bin = 1 nếu nghỉ việc, = 0 nếu không).

  • Chuẩn hóa các biến định tính thành dạng biến nhân tố (factor), đảm bảo phù hợp cho hồi quy.

Bước 3: Thống kê mô tả và phân tích mối liên hệ ban đầu

  • Trình bày tần số – tỷ lệ – biểu đồ cột của các biến chính.

  • Áp dụng kiểm định Chi-squared, ước lượng khoảng tin cậy, tính Relative RiskOdds Ratio cho từng cặp biến với Attrition.

Bước 4: Xây dựng các mô hình hồi quy nhị phân

Đối với từng cặp biến độc lập với Attrition, tiến hành xây dựng 4 mô hình:

  • Linear Probability Model (LPM)

  • Logit

  • Probit

  • Cloglog

Bước 5: Đánh giá và so sánh các mô hình

Đánh giá độ phù hợp của các mô hình theo 3 tiêu chí:

  • Akaike Information Criterion (AIC)

  • Brier Score

  • Ma trận nhầm lẫn: Accuracy, Sensitivity, Specificity, F1-score, Balanced Accuracy

Từ đó xác định mô hình phù hợp nhất cho từng cặp biến).

Bước 6: Dự báo ứng dụng từ mô hình tối ưu

Sử dụng mô hình được lựa chọn (ví dụ: Cloglog) để dự báo xác suất nghỉ việc cho ba trường hợp nhân viên với tổ hợp đặc điểm khác nhau (rủi ro cao – trung bình – thấp), thể hiện ứng dụng thực tiễn của mô hình vào quản trị nhân sự.


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 phụ thuộc trong nghiên cứu là Attrition – đại diện cho tình trạng nghỉ việc của nhân viên, gồm hai giá trị: "Yes" (có nghỉ việc) và "No" (không nghỉ việc). Trong phần này, tác giả tiến hành thống kê tần số, tần suất và trực quan hóa bằng biểu đồ nhằm mô tả sơ bộ đặc điểm phân phối của biến này.

a. Lập bảng tần số và tần suất
table(data1$Attrition)
## 
##   No  Yes 
## 1233  237
prop.table(table(data1$Attrition))
## 
##        No       Yes 
## 0.8387755 0.1612245
b. Vẽ biểu đồ cột
attrition_df <- as.data.frame(table(data1$Attrition))
colnames(attrition_df) <- c("Attrition", "Count")

ggplot(attrition_df, aes(x = Attrition, y = Count, fill = Attrition)) +
  geom_col() +
  geom_text(aes(label = Count), vjust = -0.5, size = 4) +
  labs(
    title = "Biểu đồ cột: Tình trạng nghỉ việc của nhân viên",
    x = "Tình trạng nghỉ việc",
    y = "Số lượng"
  ) +
  scale_fill_manual(values = c("steelblue", "tomato")) +
  theme_minimal() +
  theme(legend.position = "none")

c. Vẽ biểu đồ tròn
attrition_df$Percent <- round(attrition_df$Count / sum(attrition_df$Count) * 100, 1)
ggplot(attrition_df, aes(x = "", y = Count, fill = Attrition)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
      labs(title = "Biểu đồ tròn: Tỷ lệ nghỉ việc của nhân viên") +
  theme_void()

d. Nhận xét:
  • Trong tổng số 1.470 nhân viên, có 237 người nghỉ việc, chiếm khoảng 16.12%, trong khi có 1.233 người không nghỉ việc, chiếm tỷ lệ 83.88%.

  • Biểu đồ cột và biểu đồ tròn đều cho thấy tình trạng nghỉ việc là hiện tượng thiểu số.

  • Việc tỷ lệ nghỉ việc không cao nhưng vẫn đáng kể cho thấy đây là một vấn đề cần được doanh nghiệp quan tâm, đặc biệt là trong bối cảnh cạnh tranh nguồn nhân lực chất lượng cao.

  • Kết quả mô tả này là cơ sở quan trọng để tiếp tục phân tích các yếu tố ảnh hưởng đến xu hướng nghỉ việc nhằ hạn chế tỷ lệ nghỉ việc và nâng cao sự gắn bó của nhân viên với tổ chức.

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

3.1.2.1 Biến OverTime

Biến OverTime thể hiện việc nhân viên có thường xuyên làm thêm giờ hay không, với hai giá trị "Yes" (có làm thêm) và "No" (không làm thêm). Đây là một biến định tính nhị phân, có thể phản ánh mức độ áp lực công việc và được giả định là yếu tố ảnh hưởng đến quyết định nghỉ việc của nhân viên.

a. Lập bảng tần số và tần suất
table(data1$OverTime)
## 
##   No  Yes 
## 1054  416
prop.table(table(data1$OverTime))
## 
##        No       Yes 
## 0.7170068 0.2829932
b. Vẽ biểu đồ cột
overtime_df <- as.data.frame(table(data1$OverTime))
colnames(overtime_df) <- c("OverTime", "Count")

ggplot(overtime_df, aes(x = OverTime, y = Count, fill = OverTime)) +
  geom_col() +
  geom_text(aes(label = Count), vjust = -0.5, size = 4) +
  labs(
    title = "Biểu đồ cột: Tình trạng làm thêm giờ của nhân viên",
    x = "Làm thêm giờ",
    y = "Số lượng"
  ) +
  scale_fill_manual(values = c("pink", "lightblue")) +
  theme_minimal() +
  theme(legend.position = "none")

c. Vẽ biểu đồ tròn
overtime_df$Percent <- round(overtime_df$Count / sum(overtime_df$Count) * 100, 1)
ggplot(overtime_df, aes(x = "", y = Count, fill = OverTime)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
    labs(title = "Biểu đồ tròn: Tỷ lệ làm thêm giờ của nhân viên") +
  theme_void() 

d. Nhận xét:
  • 416 nhân viên (chiếm 28.3%) làm thêm giờ, trong khi 1.054 nhân viên (chiếm 71.7%) không làm thêm.

  • Tỷ lệ làm thêm giờ tương đối cao, cho thấy một bộ phận đáng kể nhân viên đang đối mặt với áp lực công việc hoặc khối lượng công việc vượt quá thời gian tiêu chuẩn.

  • Việc nhiều nhân viên phải làm thêm có thể liên quan đến các yếu tố như vai trò công việc, cấp bậc, hoặc tình trạng nhân sự thiếu hụt.

  • Đây là một chỉ số cảnh báo về khả năng mất cân bằng giữa công việc và cuộc sống, và có thể là nguyên nhân tiềm ẩn dẫn đến nghỉ việc nếu không được kiểm soát kịp thời.

3.1.2.2 Biến JobSatisfaction

Biến JobSatisfaction thể hiện mức độ hài lòng của nhân viên đối với công việc hiện tại, được đo lường theo thang điểm từ 1 đến 4, trong đó:

  • 1 = Rất không hài lòng

  • 2 = Không hài lòng

  • 3 = Hài lòng

  • 4 = Rất hài lòng

Đây là biến định tính thứ bậc (ordinal), phản ánh cảm nhận chủ quan và có thể ảnh hưởng đến quyết định nghỉ việc.

a. Lập bảng tần số và tần suất
js_table <- table(data1$JobSatisfaction)
js_prop <- prop.table(js_table)
js_table
## 
##   1   2   3   4 
## 289 280 442 459
js_prop
## 
##         1         2         3         4 
## 0.1965986 0.1904762 0.3006803 0.3122449
b. Biểu đồ cột
df_js <- as.data.frame(js_table)
colnames(df_js) <- c("JobSatisfaction", "Count")

ggplot(df_js, aes(x = factor(JobSatisfaction), y = Count, fill = factor(JobSatisfaction))) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(title = "Biểu đồ cột: Mức độ hài lòng với công việc", x = "Mức độ hài lòng", y = "Tần số") +
  theme_minimal() + theme(legend.position = "none")

c. Biểu đồ tròn
df_js$Percent <- round(df_js$Count / sum(df_js$Count) * 100, 1)

ggplot(df_js, aes(x = "", y = Count, fill = factor(JobSatisfaction))) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = paste0(Percent, "%")), position = position_stack(vjust = 0.5)) +
  labs(title = "Biểu đồ tròn: Tỷ lệ mức độ hài lòng công việc") +
  theme_void()

d. Nhận xét:
  • Mức độ hài lòng cao nhất (mức 4) có số lượng nhân viên nhiều nhất, với 459 người, chiếm khoảng 31.22% tổng số nhân viên. Điều này cho thấy phần lớn nhân viên đánh giá công việc của mình ở mức rất hài lòng.

  • Mức độ hài lòng tiếp theo là mức 3, với 442 người, tương đương khoảng 30.07%. Hai mức hài lòng cao (mức 3 và 4) cộng lại chiếm hơn 61%, phản ánh bức tranh tích cực về sự hài lòng trong công việc.

  • Mức độ hài lòng trung bình (mức 2) có 280 người (19.05%), và mức độ hài lòng thấp nhất (mức 1) có 289 người (19.66%). Mặc dù tỷ lệ không quá cao, nhưng vẫn cần chú ý vì gần 40% nhân viên chỉ đánh giá công việc ở mức trung bình hoặc thấp.

  • Biến JobSatisfaction sẽ được phân tích sâu hơn trong các phần hồi quy tiếp theo để đánh giá mức độ ảnh hưởng đến khả năng nghỉ việc của nhân viên.

3.1.2.3 MaritalStatus

Biến MaritalStatus thể hiện tình trạng hôn nhân của nhân viên, là biến định tính danh mục (nominal) gồm 3 nhóm:

  • Single: Độc thân

  • Married: Đã kết hôn

  • Divorced: Đã ly hôn

Tình trạng hôn nhân có thể ảnh hưởng đến sự ổn định công việc, mức độ gắn bó với tổ chức cũng như khả năng rời bỏ công ty.

a. Lập bảng tần số và tần suất
ms_table <- table(data1$MaritalStatus)
ms_prop <- prop.table(ms_table)

ms_table
## 
## Divorced  Married   Single 
##      327      673      470
ms_prop
## 
##  Divorced   Married    Single 
## 0.2224490 0.4578231 0.3197279
b. Biểu đồ cột
df_ms <- as.data.frame(ms_table)
colnames(df_ms) <- c("MaritalStatus", "Count")

ggplot(df_ms, aes(x = MaritalStatus, y = Count, fill = MaritalStatus)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(
    title = "Biểu đồ cột: Tình trạng hôn nhân của nhân viên",
    x = "Tình trạng hôn nhân",
    y = "Số lượng"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

c. Biểu đồ tròn
df_ms$Percent <- round(df_ms$Count / sum(df_ms$Count) * 100, 1)

ggplot(df_ms, aes(x = "", y = Count, fill = MaritalStatus)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = paste0(Percent, "%")), position = position_stack(vjust = 0.5)) +
  labs(title = "Biểu đồ tròn: Tỷ lệ nhân viên theo tình trạng hôn nhân") +
  theme_void()

d. Nhận xét:
  • Nhân viên đã kết hôn chiếm tỷ lệ cao nhất (45.78%), cho thấy đây là nhóm chủ đạo trong lực lượng lao động.

  • Nhân viên độc thân chiếm 31.97%, trong khi nhân viên đã ly hôn22.24%.

  • Tình trạng hôn nhân có thể ảnh hưởng đến trách nhiệm gia đình, thời gian rảnhquyết định nghề nghiệp. Do đó, biến MaritalStatus sẽ được phân tích sâu hơn trong các phần hồi quy tiếp theo nhằm đánh giá mức độ ảnh hưởng đến tình trạng nghỉ việc của nhân viên.

3.1.2.4 Biến WorkLifeBalance

Biến WorkLifeBalance phản ánh mức độ cân bằng giữa công việc và cuộc sống cá nhân của nhân viên. Biến được đo lường theo thang thứ bậc từ 1 đến 4, trong đó:

  • 1 = Rất kém

  • 2 = Kém

  • 3 = Tốt

  • 4 = Rất tốt

Đây là một biến quan trọng vì mất cân bằng có thể dẫn đến căng thẳng và quyết định nghỉ việc.

a. Lập bảng tần số và tần suất
wlb_table <- table(data1$WorkLifeBalance)
wlb_prop <- prop.table(wlb_table)
wlb_table
## 
##   1   2   3   4 
##  80 344 893 153
wlb_prop
## 
##          1          2          3          4 
## 0.05442177 0.23401361 0.60748299 0.10408163
b . Biểu đồ cột
df_wlb <- as.data.frame(wlb_table)
colnames(df_wlb) <- c("WorkLifeBalance", "Count")

ggplot(df_wlb, aes(x = factor(WorkLifeBalance), y = Count, fill = factor(WorkLifeBalance))) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Count), vjust = -0.5) +
  labs(title = "Biểu đồ cột: WorkLifeBalance", x = "Mức độ cân bằng", y = "Tần số") +
  theme_minimal() + theme(legend.position = "none")

c. Biểu đồ tròn
df_wlb$Percent <- round(df_wlb$Count / sum(df_wlb$Count) * 100, 1)

ggplot(df_wlb, aes(x = "", y = Count, fill = factor(WorkLifeBalance))) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = paste0(Percent, "%")), position = position_stack(vjust = 0.5)) +
  labs(title = "Biểu đồ tròn: WorkLifeBalance") +
  theme_void()

d. Nhận xét:
  • Mức độ cân bằng phổ biến nhất là mức 3 với 893 người, chiếm 60.75% tổng số nhân viên. Điều này cho thấy phần lớn nhân viên cảm thấy mức độ cân bằng giữa công việc và cuộc sống của họ ở mức khá tốt.

  • Mức độ cân bằng thứ hai là mức 2 với 344 người, chiếm 23.40%. Đây là nhóm có mức cân bằng trung bình.

  • Mức cao nhất (mức 4) chỉ có 153 người, chiếm 10.41%, cho thấy không nhiều nhân viên đánh giá môi trường làm việc của mình ở mức cân bằng rất tốt.

  • Mức thấp nhất (mức 1) có 80 người, chiếm 5.44%, là nhóm có đánh giá kém nhất về WorkLifeBalance.

  • Biến WorkLifeBalance sẽ được phân tích sâu hơn trong các phần hồi quy sau để kiểm định mức độ ảnh hưởng đến tình trạng nghỉ việc.

3.2 Phân tích mối quan hệ giữa các biến OverTime, JobSatisfaction, MaritalStatus, WorkLifeBalanc với biến Attrition

3.2.1 OverTime và Attrition

3.2.1.1 Bảng tần số và tần suất chéo

Phân tích mối liên hệ giữa OverTimeAttrition thông qua bảng tần số chéo giúp xác định liệu nhân viên làm thêm giờ có xu hướng nghỉ việc nhiều hơn so với nhân viên không làm thêm.

# Bảng tần số chéo
table_attrition_overtime <- table(data1$Attrition, data1$OverTime)
table_attrition_overtime
##      
##        No Yes
##   No  944 289
##   Yes 110 127
# Bảng tần suất phần trăm theo hàng
prop.table(table_attrition_overtime, margin = 1)
##      
##              No       Yes
##   No  0.7656123 0.2343877
##   Yes 0.4641350 0.5358650

Vẽ biểu đồ

df_bar <- as.data.frame(table(data1$Attrition, data1$OverTime))
colnames(df_bar) <- c("Attrition", "OverTime", "Count")

ggplot(df_bar, aes(x = OverTime, y = Count, fill = Attrition)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9),
            vjust = -0.25, size = 4) +
  labs(
    title = "Biểu đồ cột nhóm: Tình trạng nghỉ việc theo OverTime",
    x = "Làm thêm giờ",
    y = "Số lượng nhân viên",
    fill = "Nghỉ việc"
  ) +
  scale_fill_manual(values = c("#4daf4a", "#e41a1c")) +
  theme_minimal()

Nhận xét:

  • Trong nhóm không làm thêm giờ, chỉ khoảng 10.4% nhân viên nghỉ việc.

  • Trong khi đó, nhóm có làm thêm giờ có tỷ lệ nghỉ việc cao hơn đáng kể, khoảng 30.5%.

  • Điều này cho thấy rằng việc làm thêm giờ có thể là một yếu tố rủi ro, làm gia tăng khả năng nghỉ việc của nhân viên. Tuy nhiên, để khẳng định mối quan hệ này có ý nghĩa thống kê hay không, cần thực hiện các phân tích suy diễn ở các phần tiếp theo, bao gồm kiểm định chi bình phương, ước lượng Odds Ratio và Relative Risk, các mô hình hồi quy nhị phân.

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

Kiểm định Chi bình phương được sử dụng để kiểm tra mối liên hệ giữa hai biến định tính: tình trạng nghỉ việc (Attrition) và làm thêm giờ (OverTime).

Giả thuyết kiểm định:

  • \(H_0\) (Giả thuyết không): Không có mối liên hệ giữa việc làm thêm giờ (OverTime) và tình trạng nghỉ việc (Attrition). Hai biến độc lập với nhau.

  • \(H_1\) (Giả thuyết đối): Có mối liên hệ giữa việc làm thêm giờ (OverTime) và tình trạng nghỉ việc (Attrition). Hai biến có liên quan với nhau.

chisq_test_result <- chisq.test(table_attrition_overtime)
chisq_test_result
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_attrition_overtime
## X-squared = 87.564, df = 1, p-value < 2.2e-16

Kết quả kiểm định Chi bình phương

Kết quả kiểm định Chi bình phương giữa hai biến AttritionOverTime như sau:

  • Giá trị thống kê Chi bình phương (X-squared): 87.564

  • Bậc tự do (df): 1

  • Giá trị p-value: < 2.2e-16

p-value < 0.05, ta bác bỏ giả thuyết H0, tức là có bằng chứng thống kê để kết luận rằng tình trạng làm thêm giờ có mối liên hệ với tình trạng nghỉ việc của nhân viên.

3.2.1.3 Khoảng ước lượng tỷ lệ

Trong phần này, tác giả tiến hành ước lượng khoảng tin cậy 95% cho tỷ lệ nhân viên nghỉ việc trong nhóm có làm thêm giờ (OverTime = “Yes”).

Đây là một bước quan trọng để xác định mức độ rủi ro nghỉ việc trong nhóm nhân viên thường xuyên tăng ca – từ đó hỗ trợ xây dựng chính sách giữ chân nhân sự phù hợp hơn.

Giả thuyết kiểm định:

  • \(H_0\): Tỷ lệ nghỉ việc trong nhóm có làm thêm giờ là 0.5 (50%)

  • \(H_1\): Tỷ lệ nghỉ việc trong nhóm có làm thêm giờ khác 0.5

# Tạo bảng riêng cho nhóm có OverTime = "Yes"
subset_ot_yes <- subset(data1, OverTime == "Yes")
table_ot_yes <- table(subset_ot_yes$Attrition)

# Hiển thị bảng tần số
table_ot_yes
## 
##  No Yes 
## 289 127
# Ước lượng khoảng tin cậy 95% cho tỷ lệ nghỉ việc
prop.test(x = table_ot_yes["Yes"], n = sum(table_ot_yes), p = 0.5)
## 
##  1-sample proportions test with continuity correction
## 
## data:  table_ot_yes["Yes"] out of sum(table_ot_yes), null probability 0.5
## X-squared = 62.31, df = 1, p-value = 2.934e-15
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2618397 0.3523966
## sample estimates:
##         p 
## 0.3052885

Kết quả kiểm định:

  • Tỷ lệ nghỉ việc ước lượng trong nhóm có làm thêm giờ là 30.5% (sample estimate: 0.3053).

  • Khoảng tin cậy 95% cho tỷ lệ nghỉ việc nằm trong khoảng [26.18%; 35.24%].

  • Giá trị thống kê Chi bình phương: X² = 62.31, df = 1.

  • p-value = 2.934e-15 (rất nhỏ, < 0.05).

Kết luận:

  • Với p-value rất nhỏ, ta bác bỏ giả thuyết H₀, nghĩa là có bằng chứng thống kê cho thấy tỷ lệ nghỉ việc trong nhóm làm thêm giờ khác 50%.

Thực tế, tỷ lệ này thấp hơn 50%, chỉ khoảng 30.5%, nhưng vẫn là một con số đáng lo ngại so với mức trung bình chung (khoảng 16.1% toàn bộ mẫu).

  • Điều này cho thấy OverTime có liên quan đến xu hướng nghỉ việc, và cần được phân tích sâu hơn ở các phần tiếp theo (Odds Ratio, Relative Risk, hồi quy nhị phân).

3.2.1.4 Ước lượng nguy cơ tương đối (Relative Risk)

Mục tiêu của phần này là ước lượng nguy cơ tương đối (Relative Risk – RR) để đánh giá mức độ rủi ro nghỉ việc của nhóm nhân viên làm thêm giờ so với nhóm không làm thêm.

Relative Risk giúp trả lời câu hỏi: Nhân viên làm thêm giờ có khả năng nghỉ việc cao hơn bao nhiêu lần so với nhân viên không làm thêm giờ?

rr_result <- riskratio(table_attrition_overtime)
rr_result
## $data
##        
##           No Yes Total
##   No     944 289  1233
##   Yes    110 127   237
##   Total 1054 416  1470
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate    lower    upper
##   No  1.000000       NA       NA
##   Yes 2.286234 1.956763 2.671179
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact   chi.square
##   No          NA           NA           NA
##   Yes          0 2.361414e-19 3.861518e-21
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

  • Nhân viên có làm thêm giờnguy cơ nghỉ việc cao gấp 2.29 lần so với nhân viên không làm thêm giờ.

  • Khoảng tin cậy 95% cho RR nằm trong khoảng từ 1.96 đến 2.67, cho thấy kết quả ước lượng có ý nghĩa thống kê.

  • Giá trị p rất nhỏ (p ≈ 0) xác nhận rằng sự khác biệt giữa hai nhóm là có ý nghĩa thống kê.

3.2.1.5 Ước lượng tỷ số chênh (Odds Ratio)

Tỷ số chênh (Odds Ratio – OR) là một thước đo quan trọng dùng để so sánh khả năng xảy ra của một sự kiện giữa hai nhóm. Trong trường hợp này, ta sử dụng OR để đánh giá:

Khả năng nghỉ việc của nhân viên làm thêm giờ so với nhân viên không làm thêm giờ có chênh lệch đáng kể không?

or_result <- oddsratio(table_attrition_overtime)
or_result
## $data
##        
##           No Yes Total
##   No     944 289  1233
##   Yes    110 127   237
##   Total 1054 416  1470
## 
## $measure
##      odds ratio with 95% C.I.
##       estimate    lower    upper
##   No   1.00000       NA       NA
##   Yes  3.76628 2.826907 5.026846
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact   chi.square
##   No          NA           NA           NA
##   Yes          0 2.361414e-19 3.861518e-21
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Giải thích kết quả:

  • Tỷ số chênh (Odds Ratio – OR) ước lượng được là 3.77, nghĩa là nhân viên làm thêm giờkhả năng nghỉ việc cao hơn gấp 3.77 lần so với nhân viên không làm thêm giờ.

  • Khoảng tin cậy 95% cho OR: từ 2.83 đến 5.03. Vì khoảng tin cậy không chứa giá trị 1, ta có thể kết luận rằng ước lượng này có ý nghĩa thống kê.

  • Giá trị p-value ≈ 0: Đây là một bằng chứng thống kê rất mạnh để bác bỏ giả thuyết không, khẳng định sự khác biệt giữa hai nhóm là có ý nghĩa thống kê.

Kết luận:

  • OR > 1p-value ≈ 0, ta có thể kết luận rằng biến OverTime có liên quan mạnh mẽ đến khả năng nghỉ việc của nhân viên.

  • Đây là một chỉ số đặc biệt quan trọng trong các mô hình hồi quy Logit, bởi vì hệ số hồi quy trong Logit thường được diễn giải thông qua log(OR).

3.2.2 JobSatisfaction và Attrition

3.2.2.1 Bảng tần số và tần suất chéo

Phân tích mối liên hệ giữa JobSatisfaction (mức độ hài lòng với công việc) và Attrition (tình trạng nghỉ việc) giúp xác định liệu sự hài lòng trong công việc có ảnh hưởng đến quyết định nghỉ việc của nhân viên hay không.

# Bảng tần số chéo
table_attrition_jobsat <- table(data1$Attrition, data1$JobSatisfaction)
table_attrition_jobsat
##      
##         1   2   3   4
##   No  223 234 369 407
##   Yes  66  46  73  52
# Bảng tần suất phần trăm theo hàng
prop.table(table_attrition_jobsat, margin = 1)
##      
##               1         2         3         4
##   No  0.1808597 0.1897810 0.2992701 0.3300892
##   Yes 0.2784810 0.1940928 0.3080169 0.2194093

Vẽ biểu đồ

df_bar2 <- as.data.frame(table(data1$Attrition, data1$JobSatisfaction))
colnames(df_bar2) <- c("Attrition", "JobSatisfaction", "Count")

ggplot(df_bar2, aes(x = factor(JobSatisfaction), y = Count, fill = Attrition)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9),
            vjust = -0.25, size = 4) +
  labs(
    title = "Biểu đồ cột nhóm: Attrition theo JobSatisfaction",
    x = "Mức độ hài lòng với công việc",
    y = "Số lượng nhân viên",
    fill = "Nghỉ việc"
  ) +
  scale_fill_manual(values = c("#377eb8", "#e41a1c")) +
  theme_minimal()

Nhận xét:

  • Trong nhóm nghỉ việc (Attrition = “Yes”), tỷ lệ cao nhất thuộc về mức độ hài lòng trung bình (mức 3) với 30.8%, theo sau là nhóm rất không hài lòng (mức 1) với 27.8%.

  • Ngược lại, trong nhóm không nghỉ việc (Attrition = “No”), tỷ lệ cao nhất là ở mức rất hài lòng (mức 4) với 33.0%, tiếp đến là mức hài lòng (mức 3) với 29.9%.

  • Điều này cho thấy có thể tồn tại mối liên hệ giữa sự không hài lòng trong công việc và xu hướng nghỉ việc của nhân viên. Tuy nhiên, để xác định mức độ ảnh hưởng và kiểm chứng xem mối liên hệ này có ý nghĩa thống kê hay không, cần tiếp tục thực hiện các phân tích suy diễn ở các mục sau như: kiểm định Chi bình phương, ước lượng nguy cơ tương đối (RR), tỷ số chênh (OR)các mô hình hồi quy nhị phân.

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

Trong phần này, tác giả thực hiện kiểm định Chi bình phương để đánh giá liệu có tồn tại mối liên hệ thống kê giữa mức độ hài lòng với công việc (JobSatisfaction) và tình trạng nghỉ việc (Attrition) của nhân viên hay không.

Giả thuyết kiểm định:

  • \(H_0\) (Giả thuyết không): Không có mối liên hệ giữa JobSatisfactionAttrition. Hai biến độc lập với nhau.

  • \(H_1\) (Giả thuyết đối): Có mối liên hệ giữa JobSatisfactionAttrition. Hai biến có liên quan đến nhau.

chisq_jobsat <- chisq.test(table_attrition_jobsat)
chisq_jobsat
## 
##  Pearson's Chi-squared test
## 
## data:  table_attrition_jobsat
## X-squared = 17.505, df = 3, p-value = 0.0005563

Kết quả kiểm định Chi bình phương

  • Giá trị thống kê Chi bình phương (X-squared): 17.505

  • Bậc tự do (df): 3

  • Giá trị p-value: 0.0005563

p-value < 0.05, ta bác bỏ giả thuyết H0, tức là có bằng chứng thống kê cho thấy mức độ hài lòng với công việc có mối liên hệ với tình trạng nghỉ việc của nhân viên. Điều này hàm ý rằng khi mức độ hài lòng với công việc thay đổi, khả năng nghỉ việc của nhân viên cũng thay đổi theo.

3.2.2.3 Khoảng ước lượng tỷ lệ

Trong phần này, tác giả tiến hành ước lượng khoảng tin cậy 95% cho tỷ lệ nghỉ việc trong nhóm nhân viên không hài lòng với công việc – bao gồm các mức JobSatisfaction = 1 và 2.

Việc gộp các mức đánh giá này thành nhóm “Không hài lòng” giúp đơn giản hóa phân tích và nhấn mạnh sự khác biệt giữa hai nhóm cảm nhận đối lập trong công việc.

Mục tiêu: Kiểm tra xem tỷ lệ nghỉ việc trong nhóm này có khác biệt đáng kể so với mốc 50% hay không – mức thể hiện rủi ro nghỉ việc rất cao.

Giả thuyết kiểm định:

  • \(H_0\): Tỷ lệ nghỉ việc trong nhóm Không hài lòng bằng 0.5

  • \(H_1\): Tỷ lệ nghỉ việc trong nhóm Không hài lòng khác 0.5

# Gộp JobSatisfaction thành 2 nhóm: Không hài lòng (1,2) và Hài lòng (3,4)
data1$JS_group <- ifelse(data1$JobSatisfaction %in% c(1, 2), "Không hài lòng", "Hài lòng")
data1$JS_group <- factor(data1$JS_group, levels = c("Hài lòng", "Không hài lòng"))
# Lọc dữ liệu cho nhóm "Không hài lòng"
subset_khh <- subset(data1, JS_group == "Không hài lòng")
table_khh <- table(subset_khh$Attrition)

# Hiển thị bảng tần số nghỉ việc
table_khh
## 
##  No Yes 
## 457 112
# Ước lượng khoảng tin cậy 95% và kiểm định tỷ lệ khác 0.5
prop.test(x = table_khh["Yes"], n = sum(table_khh), p = 0.5)
## 
##  1-sample proportions test with continuity correction
## 
## data:  table_khh["Yes"] out of sum(table_khh), null probability 0.5
## X-squared = 207.97, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.1654277 0.2324202
## sample estimates:
##         p 
## 0.1968366

Kết quả kiểm định:

  • Tỷ lệ nghỉ việc ước lượng trong nhóm Không hài lòng19.7% (p̂ = 0.1968)

  • Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng [16.54%; 23.24%]

  • Giá trị thống kê Chi bình phương: X² = 207.97, df = 1

  • Giá trị p-value: < 2.2e-16 (rất nhỏ, gần bằng 0)

Kết luận:

  • Với p-value rất nhỏ (< 0.05), ta bác bỏ giả thuyết H₀, nghĩa là có bằng chứng thống kê cho thấy tỷ lệ nghỉ việc trong nhóm không hài lòng khác 50%.

  • Trên thực tế, tỷ lệ nghỉ việc trong nhóm này chỉ khoảng 19.7%, thấp hơn đáng kể so với mốc 50%, nhưng cao hơn so với tỷ lệ trung bình toàn mẫu (16.1%).

  • Đây là một cảnh báo quan trọng cho doanh nghiệp: nhân viên không hài lòng vẫn có nguy cơ nghỉ việc cao, dù chưa đạt đến mức “báo động đỏ” (50%), và cần được quan tâm nhiều hơn trong các chiến lược giữ chân nhân sự.

3.2.2.4 Ước lượng nguy cơ tương đối (Relative Risk)

Trong phần này, tác giả tiến hành ước lượng nguy cơ tương đối (Relative Risk – RR) nhằm đánh giá mức độ rủi ro nghỉ việc của nhân viên không hài lòng với công việc (gộp JobSatisfaction = 12) so với nhân viên hài lòng với công việc (gộp JobSatisfaction = 34).

Mục tiêu: Xác định liệu sự không hài lòng có làm tăng nguy cơ nghỉ việc một cách có ý nghĩa thống kê hay không.

# Tạo bảng 2x2 giữa Attrition và nhóm hài lòng công việc
table_rr_jobsat <- table(data1$Attrition, data1$JS_group)
rr_jobsat <- riskratio(table_rr_jobsat)
rr_jobsat
## $data
##        
##         Hài lòng Không hài lòng Total
##   No         776            457  1233
##   Yes        125            112   237
##   Total      901            569  1470
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate    lower    upper
##   No  1.000000       NA       NA
##   Yes 1.275019 1.094234 1.485672
## 
## $p.value
##      two-sided
##        midp.exact fisher.exact  chi.square
##   No           NA           NA          NA
##   Yes 0.003490905  0.003569645 0.003171514
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả:

  • Tỷ lệ nghỉ việc ở nhóm không hài lòng: 112 / 569 ≈ 19.7%

  • Tỷ lệ nghỉ việc ở nhóm hài lòng: 125 / 901 ≈ 13.9%

  • RR ước lượng: 1.28 cho thấy nhân viên không hài lòng với công việc có nguy cơ nghỉ việc cao hơn khoảng 1.28 lần so với nhân viên hài lòng. Nói cách khác, xác suất nghỉ việc của họ cao hơn ~28%.

  • Khoảng tin cậy 95% cho RR: [1.09; 1.49]

  • Giá trị p-value ≈ 0.0035 (rất nhỏ)

Kết luận:

  • RR > 1p-value < 0.05, ta có thể kết luận rằng mức độ hài lòng công việc có ảnh hưởng có ý nghĩa thống kê đến nguy cơ nghỉ việc.

  • Cụ thể, nhóm nhân viên không hài lòng có nguy cơ nghỉ việc cao hơn đáng kể, cho thấy sự hài lòng trong công việc là một yếu tố then chốt trong chiến lược giữ chân nhân sự.

3.2.2.5 Ước lượng tỷ số chênh (Odds Ratio)

Trong phần này, tác giả tiến hành ước lượng tỷ số chênh (Odds Ratio – OR) để đo lường mức độ chênh lệch khả năng nghỉ việc giữa hai nhóm: nhân viên không hài lòng với công việcnhân viên hài lòng.

or_js <- oddsratio(table_rr_jobsat)
or_js
## $data
##        
##         Hài lòng Không hài lòng Total
##   No         776            457  1233
##   Yes        125            112   237
##   Total      901            569  1470
## 
## $measure
##      odds ratio with 95% C.I.
##       estimate    lower    upper
##   No  1.000000       NA       NA
##   Yes 1.521143 1.148568 2.012982
## 
## $p.value
##      two-sided
##        midp.exact fisher.exact  chi.square
##   No           NA           NA          NA
##   Yes 0.003490905  0.003569645 0.003171514
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả:

  • Odds Ratio (OR) ước lượng được là 1.52, nghĩa là nhân viên không hài lòng với công việc có khả năng nghỉ việc cao hơn gấp 1.52 lần so với nhân viên hài lòng.

  • Khoảng tin cậy 95% cho OR: từ 1.15 đến 2.01

  • Giá trị p-value ≈ 0.0035 (rất nhỏ)

Kết luận:

  • OR > 1p-value < 0.05, ta có thể và kết luận rằng: Mức độ hài lòng với công việc có liên quan thống kê đến khả năng nghỉ việc.

  • Cụ thể, nhóm nhân viên không hài lòng có khả năng nghỉ việc cao hơn đáng kể, và tỷ số chênh 1.52 là một chỉ báo quan trọng cần được doanh nghiệp lưu ý trong các chiến lược giữ chân nhân sự.

3.2.3 MaritalStatus và Attrition

3.2.3.1 Bảng tần số và tần suất chéo

Phân tích mối liên hệ giữa MaritalStatus (tình trạng hôn nhân) và Attrition (tình trạng nghỉ việc) nhằm đánh giá liệu tình trạng hôn nhân có ảnh hưởng đến quyết định nghỉ việc của nhân viên hay không.

# Bảng tần số chéo
table_attrition_ms <- table(data1$Attrition, data1$MaritalStatus)
table_attrition_ms
##      
##       Divorced Married Single
##   No       294     589    350
##   Yes       33      84    120
# Bảng tần suất phần trăm theo hàng
prop.table(table_attrition_ms, margin = 1)
##      
##        Divorced   Married    Single
##   No  0.2384428 0.4776967 0.2838605
##   Yes 0.1392405 0.3544304 0.5063291

Vẽ biểu đồ

df_bar_ms <- as.data.frame(table(data1$Attrition, data1$MaritalStatus))
colnames(df_bar_ms) <- c("Attrition", "MaritalStatus", "Count")

ggplot(df_bar_ms, aes(x = MaritalStatus, y = Count, fill = Attrition)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9),
            vjust = -0.25, size = 4) +
  labs(
    title = "Biểu đồ cột nhóm: Attrition theo MaritalStatus",
    x = "Tình trạng hôn nhân",
    y = "Số lượng nhân viên",
    fill = "Nghỉ việc"
  ) +
  scale_fill_manual(values = c("#4E79A7", "#F28E2B")) + 
  theme_minimal()

Nhận xét:

  • Trong nhóm Single (Độc thân)120 nhân viên nghỉ việc350 nhân viên không nghỉ việc. Đây là nhóm có số lượng nghỉ việc cao nhất, chiếm khoảng 25.5% trong tổng số nhóm Single.

  • Trong nhóm Married (Đã kết hôn)84 nhân viên nghỉ việc589 nhân viên không nghỉ việc. Tỷ lệ nghỉ việc ở nhóm này thấp hơn đáng kể, khoảng 12.5%.

  • Trong nhóm Divorced (Đã ly hôn)33 nhân viên nghỉ việc294 nhân viên không nghỉ việc. Tỷ lệ nghỉ việc thấp nhất trong ba nhóm, khoảng 10.1%.

  • Nhóm Single có tỷ lệ nghỉ việc cao nhất, gần gấp đôi nhóm Marriedgấp 2.5 lần nhóm Divorced. Điều này cho thấy có thể tồn tại mối liên hệ giữa tình trạng hôn nhân và nguy cơ nghỉ việc, trong đó nhóm nhân viên độc thân có xu hướng nghỉ việc cao hơn.

  • Tuy nhiên, để xác định mối liên hệ này có ý nghĩa thống kê hay không, cần tiếp tục thực hiện kiểm định Chi bình phương, ước lượng Odds Ratio – Relative Risk, và các mô hình hồi quy nhị phân ở các phần tiếp theo.

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

Trong phần này, tác giả tiến hành kiểm định Chi bình phương (Chi-squared test) nhằm đánh giá xem liệu Attrition (nghỉ việc) có liên quan đến MaritalStatus (tình trạng hôn nhân) hay không.

Giả thuyết kiểm định::

  • \(H_0\) (Giả thuyết không): Attrition và MaritalStatus là hai biến độc lập (không có mối liên hệ).

  • \(H_1\) (Giả thuyết đối): Attrition và MaritalStatus có mối liên hệ (không độc lập).

chisq.test(table_attrition_ms)
## 
##  Pearson's Chi-squared test
## 
## data:  table_attrition_ms
## X-squared = 46.164, df = 2, p-value = 9.456e-11

Kết quả kiểm định:

  • Giá trị thống kê Chi bình phương (X²): 46.164

  • Bậc tự do (df): 2

  • Giá trị p-value: 9.456e-11

Kết luận:

  • Với p-value < 0.05, ta bác bỏ giả thuyết H₀, tức là có bằng chứng thống kê mạnh mẽ cho thấy tình trạng hôn nhân có mối liên hệ với tình trạng nghỉ việc.

  • Kết quả này củng cố cho phần mô tả trước đó: Nhân viên độc thân có xu hướng nghỉ việc cao hơn, và tình trạng hôn nhân là một yếu tố đáng chú ý trong việc phân tích rủi ro nghỉ việc.

3.2.3.3 Khoảng ước lượng tỷ lệ

Trong phần này, tác giả tiến hành ước lượng khoảng tin cậy 95% cho tỷ lệ nghỉ việc trong nhóm nhân viên chưa từng kết hôn (Single) – nhằm xác định xem đây có phải là nhóm có nguy cơ nghỉ việc cao và khác biệt đáng kể so với mức tham chiếu 50% hay không.

Mục tiêu: Kiểm tra giả thuyết:

  • \(H_0\): Tỷ lệ nghỉ việc trong nhóm Single bằng 50%

  • \(H_1\): Tỷ lệ nghỉ việc trong nhóm Single khác 50%

# Gộp MaritalStatus thành 2 nhóm: Single vs Khác
data1$MS_group <- ifelse(data1$MaritalStatus == "Single", "Single", "Khác")
data1$MS_group <- factor(data1$MS_group, levels = c("Khác", "Single"))

# Lọc nhóm Single
subset_single <- subset(data1, MS_group == "Single")
table_single <- table(subset_single$Attrition)

# Hiển thị bảng tần số nghỉ việc trong nhóm Single
table_single
## 
##  No Yes 
## 350 120
# Ước lượng khoảng tin cậy
prop.test(x = table_single["Yes"], n = sum(table_single), p = 0.5)
## 
##  1-sample proportions test with continuity correction
## 
## data:  table_single["Yes"] out of sum(table_single), null probability 0.5
## X-squared = 111.58, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2169902 0.2977219
## sample estimates:
##         p 
## 0.2553191

Kết quả:

  • Tỷ lệ nghỉ việc ước lượng trong nhóm Single: 25.5%

  • Khoảng tin cậy 95% cho tỷ lệ này: [21.70%; 29.77%]

  • Giá trị thống kê Chi bình phương: \(X^2 = 111.58\), bậc tự do = 1

  • p-value: < 2.2e-16 (rất nhỏ)

Kết luận:

  • Với p-value < 0.05, ta bác bỏ giả thuyết \(H_0\), tức là có bằng chứng thống kê mạnh mẽ cho thấy tỷ lệ nghỉ việc trong nhóm nhân viên độc thân khác đáng kể so với 50%.

  • Mặc dù thấp hơn mốc 50%, tỷ lệ 25.5% vẫn là cao nhất trong ba nhóm tình trạng hôn nhân, và nằm ngoài khoảng chấp nhận của một tỷ lệ nghỉ việc ổn định.

  • Kết quả này củng cố thêm nhận định rằng tình trạng độc thân thực sự có liên quan đến hành vi nghỉ việc, và cần được xem xét trong chiến lược nhân sự, đặc biệt đối với các chương trình gắn kết và phát triển dành riêng cho nhóm nhân viên chưa lập gia đình.

3.2.3.4 Ước lượng nguy cơ tương đối (Relative Risk)

Trong phần này, tác giả tiến hành ước lượng nguy cơ tương đối (Relative Risk – RR) nhằm đánh giá nguy cơ nghỉ việc của nhân viên độc thân (Single) so với nhân viên thuộc nhóm “Khác” (bao gồm đã kết hôn và đã ly hôn).

# Tạo bảng 2x2 giữa Attrition và nhóm MaritalStatus (Single vs Khác)
table_rr_ms <- table(data1$Attrition, data1$MS_group)
rr_ms <- riskratio(table_rr_ms)
rr_ms
## $data
##        
##         Khác Single Total
##   No     883    350  1233
##   Yes    117    120   237
##   Total 1000    470  1470
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate    lower    upper
##   No  1.000000       NA       NA
##   Yes 1.783725 1.529398 2.080344
## 
## $p.value
##      two-sided
##         midp.exact fisher.exact   chi.square
##   No            NA           NA           NA
##   Yes 6.735235e-11 6.405779e-11 1.748116e-11
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả:

  • Risk Ratio (RR): 1.78

  • Khoảng tin cậy 95%: [1.53 ; 2.08]

  • Giá trị p-value (Chi-square): 1.75e-11 (rất nhỏ)

Kết luận:

  • Nhân viên độc thân có nguy cơ nghỉ việc cao hơn khoảng 1.78 lần so với nhóm đã kết hôn hoặc đã ly hôn.

  • Điều này cho thấy tình trạng hôn nhân là một yếu tố có ảnh hưởng thống kê rõ rệt đến hành vi nghỉ việc, và nhóm “Single” cần được doanh nghiệp quan tâm trong các chương trình giữ chân nhân sự.

3.2.3.5 Ước lượng tỷ số chênh (Odds Ratio)

Trong phần này, tác giả tiến hành ước lượng tỷ số chênh (Odds Ratio – OR) nhằm đánh giá xác suất tương đối xảy ra sự kiện nghỉ việc giữa hai nhóm: SingleKhác (gồm Married và Divorced).

# Ước lượng Odds Ratio cho nhóm MaritalStatus (Single vs Khác)
or_ms <- oddsratio(table_rr_ms)
or_ms
## $data
##        
##         Khác Single Total
##   No     883    350  1233
##   Yes    117    120   237
##   Total 1000    470  1470
## 
## $measure
##      odds ratio with 95% C.I.
##       estimate    lower    upper
##   No  1.000000       NA       NA
##   Yes 2.585455 1.947465 3.434918
## 
## $p.value
##      two-sided
##         midp.exact fisher.exact   chi.square
##   No            NA           NA           NA
##   Yes 6.735235e-11 6.405779e-11 1.748116e-11
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả:

  • Odds Ratio (OR): 2.59

  • Khoảng tin cậy 95%: [1.95 ; 3.43]

  • Giá trị p-value (Chi-square): 1.75e-11 (rất nhỏ)

Kết luận:

  • Nhân viên độc thân có odds nghỉ việc cao hơn khoảng 2.59 lần so với nhóm đã kết hôn hoặc ly hôn. Odds được hiểu là xác suất nghỉ việc so với không nghỉ việc trong từng nhóm.

  • Khoảng tin cậy 95% không chứa giá trị 1, cho thấy kết quả có ý nghĩa thống kê.

3.2.4 WorkLifeBalance và Attrition

3.2.4.1 Bảng tần số và tần suất chéo

Phân tích mối liên hệ giữa WorkLifeBalance (mức độ cân bằng giữa công việc và cuộc sống) và Attrition (tình trạng nghỉ việc) nhằm đánh giá liệu sự mất cân bằng công việc - cuộc sống có ảnh hưởng đến quyết định nghỉ việc của nhân viên hay không.

# Bảng tần số chéo
table_attrition_wlb <- table(data1$Attrition, data1$WorkLifeBalance)
table_attrition_wlb
##      
##         1   2   3   4
##   No   55 286 766 126
##   Yes  25  58 127  27
# Bảng tần suất phần trăm theo hàng
prop.table(table_attrition_wlb, margin = 1)
##      
##                1          2          3          4
##   No  0.04460665 0.23195458 0.62124899 0.10218978
##   Yes 0.10548523 0.24472574 0.53586498 0.11392405

Vẽ biểu đồ

df_bar_wlb <- as.data.frame(table(data1$Attrition, data1$WorkLifeBalance))
colnames(df_bar_wlb) <- c("Attrition", "WorkLifeBalance", "Count")

ggplot(df_bar_wlb, aes(x = factor(WorkLifeBalance), y = Count, fill = Attrition)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count),
            position = position_dodge(width = 0.9),
            vjust = -0.25, size = 4) +
  labs(
    title = "Biểu đồ cột nhóm: Attrition theo WorkLifeBalance",
    x = "Mức độ cân bằng công việc - cuộc sống",
    y = "Số lượng nhân viên",
    fill = "Nghỉ việc"
  ) +
  scale_fill_manual(values = c("#1b9e77", "#d95f02")) +
  theme_minimal()

Nhận xét:

  • Ở mức cân bằng kém nhất (1), có 25 nhân viên nghỉ việc trên tổng số 80 nhân viên, chiếm tỷ lệ 31.25% – đây là tỷ lệ nghỉ việc cao nhất trong 4 mức độ.

  • Ở mức cân bằng tốt nhất (4), chỉ có 27 người nghỉ việc trên tổng số 153 nhân viên, chiếm tỷ lệ khoảng 17.6% – thấp hơn gần một nửa so với nhóm có mức cân bằng kém.

  • Trong nhóm có cân bằng trung bình (mức 2 và 3):

    • Mức 2: Tỷ lệ nghỉ việc là 58 / (286 + 58) ≈ 16.9%

    • Mức 3: Tỷ lệ nghỉ việc là 127 / (766 + 127) ≈ 14.2% — mức thấp nhất trong tất cả.

  • Có thể thấy rằng tỷ lệ nghỉ việc có xu hướng giảm khi mức độ cân bằng giữa công việc và cuộc sống tăng lên, ngoại trừ mức 4 có tỷ lệ cao hơn một chút so với mức 3.

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

Để kiểm tra xem sự cân bằng giữa công việc và cuộc sống có mối liên hệ thống kê với tình trạng nghỉ việc của nhân viên hay không, ta tiến hành kiểm định Chi bình phương với bảng tần số chéo giữa hai biến AttritionWorkLifeBalance.

Giả thuyết kiểm định:

  • \(H_0\) (Giả thuyết không): Không có mối liên hệ giữa mức độ cân bằng giữa công việc và cuộc sống (WorkLifeBalance) và tình trạng nghỉ việc (Attrition). Hai biến độc lập với nhau.

  • \(H_1\) (Giả thuyết đối): Có mối liên hệ giữa mức độ cân bằng giữa công việc và cuộc sống (WorkLifeBalance) và tình trạng nghỉ việc (Attrition). Hai biến có liên quan với nhau.

chisq_wlb <- chisq.test(table_attrition_wlb)
chisq_wlb
## 
##  Pearson's Chi-squared test
## 
## data:  table_attrition_wlb
## X-squared = 16.325, df = 3, p-value = 0.0009726

Kết quả kiểm định Chi bình phương

  • Giá trị thống kê Chi bình phương (X-squared): 16.325

  • Bậc tự do (df): 3

  • Giá trị p-value: 0.0009726

p-value < 0.05, ta bác bỏ giả thuyết H0, tức là có bằng chứng thống kê cho thấy mức độ cân bằng giữa công việc và cuộc sống có mối liên hệ với tình trạng nghỉ việc của nhân viên.

3.2.4.3 Khoảng ước lượng tỷ lệ

Trong phần này, tác giả tiến hành ước lượng khoảng tin cậy 95% cho tỷ lệ nghỉ việc trong nhóm nhân viên có mức cân bằng công việc – cuộc sống kém – bao gồm các mức WorkLifeBalance = 1 và 2.

Việc gộp các mức đánh giá này thành nhóm “Cân bằng kém” giúp đơn giản hóa phân tích và nhấn mạnh tác động tiêu cực của việc mất cân bằng đến nguy cơ nghỉ việc.

Mục tiêu: Kiểm tra xem tỷ lệ nghỉ việc trong nhóm này có khác biệt đáng kể so với mốc 50% hay không – mức phản ánh một nguy cơ nghỉ việc rất cao.

Giả thuyết kiểm định:

  • \(H_0\): Tỷ lệ nghỉ việc trong nhóm Cân bằng kém bằng 0.5

  • \(H_1\): Tỷ lệ nghỉ việc trong nhóm Cân bằng kém khác 0.5

# Gộp WorkLifeBalance thành 2 nhóm: Cân bằng kém (1,2) và Cân bằng tốt (3,4)
data1$WLB_group <- ifelse(data1$WorkLifeBalance %in% c(1, 2), "Cân bằng kém", "Cân bằng tốt")
data1$WLB_group <- factor(data1$WLB_group, levels = c("Cân bằng tốt", "Cân bằng kém"))
# Lọc dữ liệu cho nhóm "Cân bằng kém"
subset_wlb_low <- subset(data1, WLB_group == "Cân bằng kém")
table_wlb_low <- table(subset_wlb_low$Attrition)

# Hiển thị bảng tần số nghỉ việc
table_wlb_low
## 
##  No Yes 
## 341  83
# Ước lượng khoảng tin cậy 95% và kiểm định tỷ lệ khác 0.5
prop.test(x = table_wlb_low["Yes"], n = sum(table_wlb_low), p = 0.5)
## 
##  1-sample proportions test with continuity correction
## 
## data:  table_wlb_low["Yes"] out of sum(table_wlb_low), null probability 0.5
## X-squared = 155.78, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.1597063 0.2374360
## sample estimates:
##         p 
## 0.1957547

Kết quả kiểm định:

  • Tỷ lệ nghỉ việc ước lượng trong nhóm Cân bằng kém19.6% (p̂ = 0.1958)

  • Khoảng tin cậy 95% cho tỷ lệ này nằm trong khoảng [15.97%; 23.74%]

  • Giá trị thống kê Chi bình phương: X² = 155.78, df = 1

  • Giá trị p-value: < 2.2e-16 (rất nhỏ, gần bằng 0)

Kết luận:

  • Với p-value rất nhỏ (< 0.05), ta bác bỏ giả thuyết H₀, nghĩa là có bằng chứng thống kê cho thấy tỷ lệ nghỉ việc trong nhóm có mức cân bằng công việc – cuộc sống kém khác 50%.

  • Trên thực tế, tỷ lệ nghỉ việc trong nhóm này là 19.6%, thấp hơn nhiều so với mốc 50% – nhưng cao hơn so với tỷ lệ trung bình toàn mẫu (16.1%). Điều này nhấn mạnh rằng mức độ cân bằng công việc – cuộc sống thấp là một yếu tố rủi ro đáng kể, dù chưa đạt đến mức báo động như 50%, nhưng vẫn cần được quan tâm đặc biệt trong các chiến lược giữ chân nhân viên.

3.2.4.4 Ước lượng nguy cơ tương đối (Relative Risk)

Trong phần này, tác giả tiến hành ước lượng nguy cơ tương đối (Relative Risk – RR) nhằm đánh giá nguy cơ nghỉ việc của nhân viên có mức cân bằng công việc – cuộc sống kém (WorkLifeBalance = 1 hoặc 2) so với nhóm có cân bằng tốt (WorkLifeBalance = 3 hoặc 4).

Mục tiêu: Xác định liệu việc mất cân bằng giữa công việc và cuộc sống có làm tăng nguy cơ nghỉ việc một cách có ý nghĩa thống kê hay không.

# Tạo bảng 2x2 giữa Attrition và nhóm WorkLifeBalance
table_rr_wlb <- table(data1$Attrition, data1$WLB_group)
rr_wlb <- riskratio(table_rr_wlb)
rr_wlb
## $data
##        
##         Cân bằng tốt Cân bằng kém Total
##   No             892          341  1233
##   Yes            154           83   237
##   Total         1046          424  1470
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate   lower    upper
##   No  1.000000      NA       NA
##   Yes 1.266305 1.04143 1.539738
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact chi.square
##   No          NA           NA         NA
##   Yes 0.02395808    0.0233501 0.02189888
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Kết quả:

  • Risk Ratio (RR) ước lượng: 1.27 nghĩa là nguy cơ nghỉ việc ở nhóm “cân bằng kém” cao hơn 1.27 lần so với nhóm “cân bằng tốt”.

  • Khoảng tin cậy 95% cho RR: từ 1.04 đến 1.54

  • p-value: khoảng 0.0239 (chi-square)

Kết luận:

  • RR > 1p-value < 0.05, ta có thể kết luận rằng sự mất cân bằng giữa công việc và cuộc sống có mối liên hệ thống kê với khả năng nghỉ việc.

  • Cụ thể, nguy cơ nghỉ việc của nhân viên trong nhóm “cân bằng kém” cao hơn đáng kể so với nhóm “cân bằng tốt”, và RR = 1.27 là một chỉ báo quan trọng cần được doanh nghiệp lưu ý trong chính sách nhân sự.

3.2.4.5 Ước lượng tỷ số chênh (Odds Ratio)

Trong phần này, tác giả tiến hành ước lượng tỷ số chênh (Odds Ratio – OR) nhằm kiểm tra xem mức độ cân bằng công việc – cuộc sống có ảnh hưởng đến khả năng nghỉ việc của nhân viên hay không, thông qua so sánh tỷ lệ odds nghỉ việc giữa hai nhóm cân bằng kém và cân bằng tốt.

or_wlb <- oddsratio(table_rr_wlb)
or_wlb
## $data
##        
##         Cân bằng tốt Cân bằng kém Total
##   No             892          341  1233
##   Yes            154           83   237
##   Total         1046          424  1470
## 
## $measure
##      odds ratio with 95% C.I.
##       estimate    lower    upper
##   No  1.000000       NA       NA
##   Yes 1.410486 1.046972 1.889832
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact chi.square
##   No          NA           NA         NA
##   Yes 0.02395808    0.0233501 0.02189888
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả:

  • Odds Ratio (OR) ước lượng: 1.41 nghĩa là tỷ lệ odds nghỉ việc ở nhóm “cân bằng kém” cao hơn 1.41 lần so với nhóm “cân bằng tốt”.

  • Khoảng tin cậy 95% cho OR: từ 1.05 đến 1.89

  • p-value: khoảng 0.022 (chi-square)

Kết luận:

  • OR > 1p-value < 0.05, ta có thể kết luận rằng mức độ cân bằng giữa công việc và cuộc sống có liên quan thống kê đến khả năng nghỉ việc của nhân viên.

  • Cụ thể, nhân viên thuộc nhóm có WorkLifeBalance kém có khả năng nghỉ việc cao hơn đáng kể, và Odds Ratio = 1.41 là một chỉ số đáng chú ý, phản ánh rằng sự mất cân bằng là yếu tố rủi ro trong chính sách giữ chân nhân sự của doanh nghiệp.

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

3.3.1 Mô hình hồi quy cho cặp OverTime – Attrition

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

Mô hình xác suất tuyến tính (Linear Probability Model – LPM) được sử dụng để đánh giá mối quan hệ giữa việc làm thêm giờ (OverTime)khả năng nghỉ việc (Attrition) của nhân viên. Trong mô hình này, biến phụ thuộc là một biến nhị phân thể hiện xác suất xảy ra sự kiện nghỉ việc.

Mô hình lý thuyết được xây dựng như sau:

\[ \text{Attrition}_i = \beta_0 + \beta_1 \cdot \text{OverTime}_i + \varepsilon_i \]

Trong đó:

  • \(\text{Attrition}_i\): biến phụ thuộc, nhận giá trị 1 nếu nhân viên nghỉ việc, 0 nếu không nghỉ.

  • \(\text{OverTime}_i\): biến độc lập, nhận giá trị 1 nếu có làm thêm giờ, 0 nếu không.

  • \(\beta_0\): xác suất nghỉ việc trung bình của nhóm không làm thêm.

  • \(\beta_1\): mức thay đổi xác suất nghỉ việc khi chuyển từ không làm thêm sang làm thêm.

# Mã hóa lại biến Attrition và OverTime dưới dạng nhị phân
data1$Attrition_bin <- ifelse(data1$Attrition == "Yes", 1, 0)
data1$OverTime_bin <- ifelse(data1$OverTime == "Yes", 1, 0)

# Ước lượng mô hình xác suất tuyến tính
model_lpm <- lm(Attrition_bin ~ OverTime_bin, data = data1)

# Hiển thị kết quả
summary(model_lpm)
## 
## Call:
## lm(formula = Attrition_bin ~ OverTime_bin, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.3053 -0.1044 -0.1044 -0.1044  0.8956 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   0.10436    0.01099   9.500   <2e-16 ***
## OverTime_bin  0.20092    0.02065   9.729   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3567 on 1468 degrees of freedom
## Multiple R-squared:  0.06057,    Adjusted R-squared:  0.05993 
## F-statistic: 94.66 on 1 and 1468 DF,  p-value: < 2.2e-16

Kết quả mô hình:

\[ \hat{\text{Attrition}}_i = 0.10436 + 0.20092 \cdot \text{OverTime}_i \]

Diễn giải:

  • Hệ số chặn (Intercept) = 0.10436: Xác suất nghỉ việc của nhân viên không làm thêm giờ là khoảng 10.44%.

  • Hệ số OverTime_bin = 0.20092: Nhân viên có làm thêm giờ có xác suất nghỉ việc cao hơn khoảng 20.09 điểm phần trăm so với nhóm không làm thêm.

  • Giá trị p-value < 0.001: Hệ số OverTime có ý nghĩa thống kê rất cao.

Kết luận: Làm thêm giờ có mối quan hệ dương và có ý nghĩa thống kê với xác suất nghỉ việc. Tuy nhiên, do mô hình LPM có những hạn chế nhất định như dự đoán ngoài khoảng [0,1] và phương sai sai số không đồng nhất, cần kiểm định lại kết quả bằng các mô hình hồi quy nhị phân khác như Logit, Probit, và Cloglog trong các phần tiếp theo.

3.3.1.2 Mô hình Logit

Mô hình Logit được sử dụng để đánh giá ảnh hưởng của việc làm thêm giờ (OverTime) đến xác suất nghỉ việc (Attrition) của nhân viên. Mô hình sử dụng hàm phân phối logistic, phù hợp cho các biến phụ thuộc nhị phân.

Mô hình lý thuyết:

\[ \log\left(\frac{P(\text{Attrition}_i = 1)}{1 - P(\text{Attrition}_i = 1)}\right) = \beta_0 + \beta_1 \cdot \text{OverTime}_i \]

Trong đó:

  • \(\text{Attrition}_i\): biến phụ thuộc (1 = nghỉ việc, 0 = không nghỉ việc)

  • \(\text{OverTime}_i\): biến độc lập (1 = có làm thêm, 0 = không làm thêm)

  • \(\beta_1\): log-odds nghỉ việc tăng thêm khi nhân viên làm thêm

# Ước lượng mô hình Logit
model_logit <- glm(Attrition_bin ~ OverTime_bin, data = data1, family = binomial(link = "logit"))

# Kết quả mô hình
summary(model_logit)
## 
## Call:
## glm(formula = Attrition_bin ~ OverTime_bin, family = binomial(link = "logit"), 
##     data = data1)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -2.1496     0.1007 -21.338   <2e-16 ***
## OverTime_bin   1.3274     0.1466   9.056   <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: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1217.2  on 1468  degrees of freedom
## AIC: 1221.2
## 
## Number of Fisher Scoring iterations: 4

Phương trình hồi quy:

\[ \log\left(\frac{P(\text{Attrition} = 1)}{1 - P(\text{Attrition} = 1)}\right) = -2.1496 + 1.3274 \cdot \text{OverTime} \]

Diễn giải kết quả:

  • Intercept = -2.1496: Khi nhân viên không làm thêm giờ, log-odds nghỉ việc trung bình là -2.1496.

  • OverTime_bin = 1.3274: Nếu nhân viên có làm thêm giờ, log-odds nghỉ việc của họ tăng thêm 1.3274 đơn vị.

  • Lấy exponential:

\[ \text{Odds Ratio} = \exp(1.3274) \approx 3.77 \]

→ Nhân viên làm thêm giờ có odds nghỉ việc cao hơn khoảng 3.77 lần so với người không làm thêm.

  • p-value < 2e-16: Hệ số có ý nghĩa thống kê rất cao.

Kết luận: Mô hình Logit cho thấy rằng làm thêm giờ là một yếu tố ảnh hưởng đáng kể đến nguy cơ nghỉ việc. Nhân viên có làm thêm có khả năng rời bỏ công việc cao hơn đáng kể, điều này phù hợp với các kết quả mô tả và kiểm định trước đó. Mô hình Logit khắc phục được hạn chế của mô hình xác suất tuyến tính và mang lại các ước lượng đáng tin cậy hơn đối với biến phụ thuộc nhị phân.

3.3.1.3 Mô hình Probit

Mô hình Probit sử dụng hàm phân phối chuẩn tích lũy (CDF) để liên kết biến độc lập với xác suất xảy ra sự kiện. Đây là một lựa chọn phổ biến cho các mô hình hồi quy nhị phân, tương tự như Logit nhưng giả định phân phối chuẩn thay vì logistic.

Phương trình mô hình:

\[ P(\text{Attrition}_i = 1) = \Phi(\beta_0 + \beta_1 \cdot \text{OverTime}_i) \]

Trong đó:

  • \(\Phi(\cdot)\): Hàm phân phối chuẩn tích lũy.

  • \(\text{Attrition}_i\): Biến phụ thuộc, nhận giá trị 1 nếu nhân viên nghỉ việc, 0 nếu không.

  • \(\text{OverTime}_i\): Biến độc lập, nhận giá trị 1 nếu có làm thêm giờ, 0 nếu không.

  • \(\beta_1\): Đo lường mức tăng trong “chỉ số chuẩn” xác suất nghỉ việc do làm thêm giờ.

model_probit <- glm(Attrition_bin ~ OverTime_bin, data = data1, family = binomial(link = "probit"))
summary(model_probit)
## 
## Call:
## glm(formula = Attrition_bin ~ OverTime_bin, family = binomial(link = "probit"), 
##     data = data1)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -1.25707    0.05202 -24.166   <2e-16 ***
## OverTime_bin  0.74782    0.08281   9.031   <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: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1217.2  on 1468  degrees of freedom
## AIC: 1221.2
## 
## Number of Fisher Scoring iterations: 4

Phương trình cụ thể (sau khi ước lượng):

\[ P(\text{Attrition} = 1) = \Phi(-1.2571 + 0.7478 \cdot \text{OverTime}) \]

Giải thích kết quả:

  • Khi OverTime = 0 (không làm thêm), biểu thức bên trong hàm \(\Phi\) là: \[ \Phi(-1.2571) \approx 0.104 \Rightarrow \text{Xác suất nghỉ việc} \approx \textbf{10.4%} \]

  • Khi OverTime = 1 (có làm thêm), biểu thức là: \[ \Phi(-1.2571 + 0.7478) = \Phi(-0.5093) \approx 0.305 \Rightarrow \text{Xác suất nghỉ việc} \approx \textbf{30.5%} \]

  • Hệ số \(\text{OverTime_bin} = 0.7478\) cho thấy nếu nhân viên có làm thêm giờ, “chỉ số chuẩn” (giá trị nội suy trong hàm phân phối chuẩn) tăng thêm 0.7478 đơn vị, làm tăng xác suất nghỉ việc từ khoảng 10.4% lên 30.5%.

  • p-value < 2e-16: Kết quả có ý nghĩa thống kê rất cao – ảnh hưởng của làm thêm giờ là rõ ràng và có thật.

Kết luận: Mô hình Probit cho thấy nhân viên làm thêm giờ có xác suất nghỉ việc cao hơn đáng kể so với nhóm không làm thêm. Mặc dù hệ số không thể diễn giải trực tiếp như Odds Ratio (trong Logit), việc chuyển đổi sang xác suất giúp ta thấy rõ tác động thực tế. Mô hình này là một công cụ mạnh trong việc phân tích hành vi nghỉ việc của nhân viên.

3.3.1.4 Mô hình Cloglog

Mô hình Cloglog (Complementary Log-Log) là một lựa chọn thích hợp trong hồi quy nhị phân khi xác suất xảy ra sự kiện nhỏ hoặc phân phối dữ liệu có tính bất đối xứng. Khác với Logit và Probit, mô hình này sử dụng hàm liên kết dạng log(-log(1 - p)) để biến đổi xác suất, cho phép mô tả tốt hơn các tình huống có độ dốc lớn ở đầu mút phân phối.

Phương trình lý thuyết của mô hình:

\[ \log\left( -\log(1 - P(\text{Attrition}_i = 1)) \right) = \beta_0 + \beta_1 \cdot \text{OverTime}_i \]

Trong đó:

  • \(P(\text{Attrition}_i = 1)\): xác suất nhân viên nghỉ việc

  • \(\text{OverTime}_i\): biến nhị phân, 1 nếu nhân viên có làm thêm giờ, 0 nếu không

  • \(\beta_0, \beta_1\): các hệ số hồi quy cần ước lượng

# Ước lượng mô hình Cloglog
model_cloglog <- glm(Attrition_bin ~ OverTime_bin, data = data1, family = binomial(link = "cloglog"))

# Kết quả mô hình
summary(model_cloglog)
## 
## Call:
## glm(formula = Attrition_bin ~ OverTime_bin, family = binomial(link = "cloglog"), 
##     data = data1)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -2.20526    0.09539 -23.118   <2e-16 ***
## OverTime_bin  1.19537    0.13062   9.152   <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: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1217.2  on 1468  degrees of freedom
## AIC: 1221.2
## 
## Number of Fisher Scoring iterations: 5

Phương trình cụ thể sau khi ước lượng từ dữ liệu:

\[ \log\left( -\log(1 - P) \right) = -2.2053 + 1.1954 \cdot \text{OverTime} \]

Diễn giải kết quả:

  • Intercept = -2.2053: Khi nhân viên không làm thêm giờ, giá trị log(-log(1 - p)) là -2.2053, tương ứng với xác suất nghỉ việc khoảng 10.0%.

  • Hệ số OverTime_bin = 1.1954: Nhân viên có làm thêm giờ sẽ có log(-log(1 - p)) tăng thêm 1.1954 đơn vị. Khi chuyển đổi sang xác suất, ta nhận được:

\[ \begin{aligned} P(\text{OverTime} = 0) &= 1 - \exp\left(-\exp(-2.2053)\right) \approx 0.100 \\ P(\text{OverTime} = 1) &= 1 - \exp\left(-\exp(-2.2053 + 1.1954)\right) \approx 0.299 \end{aligned} \]

→ Làm thêm giờ làm tăng xác suất nghỉ việc từ 10.0% lên 29.9%.

  • p-value < 2e-16: Hệ số OverTime có ý nghĩa thống kê rất cao, khẳng định mối liên hệ thực sự giữa làm thêm và nghỉ việc.

Kết luận: Mô hình Cloglog củng cố bằng chứng rằng nhân viên làm thêm giờ có nguy cơ nghỉ việc cao hơn đáng kể so với nhóm không làm thêm. Kết quả này đồng nhất với các mô hình Logit và Probit trước đó, cho thấy tính nhất quán trong phân tích và khẳng định giá trị của mô hình Cloglog trong các trường hợp xác suất nhỏ và phân phối bất đối xứng.

3.3.2 Mô hình hồi quy cho cặp MaritalStatus – Attrition

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

Mô hình xác suất tuyến tính (Linear Probability Model – LPM) được sử dụng để đánh giá mối quan hệ giữa tình trạng hôn nhân (MaritalStatus)khả năng nghỉ việc (Attrition) của nhân viên. Biến MaritalStatus gồm ba mức: "Married", "Single""Divorced", được đưa vào mô hình dưới dạng biến phân loại (factor), với "Married" được chọn làm nhóm tham chiếu.

Mô hình lý thuyết:

\[ \text{Attrition}_i = \beta_0 + \beta_1 \cdot \text{Single}_i + \beta_2 \cdot \text{Divorced}_i + \varepsilon_i \]

Trong đó:

  • \(\beta_0\): Xác suất nghỉ việc trung bình của nhóm đã kết hôn (Married).

  • \(\beta_1\): Chênh lệch xác suất nghỉ việc giữa nhóm độc thân (Single) và nhóm đã kết hôn.

  • \(\beta_2\): Chênh lệch xác suất nghỉ việc giữa nhóm ly hôn (Divorced) và nhóm đã kết hôn.

# Mã hóa lại biến Attrition thành nhị phân
data1$Attrition_bin <- ifelse(data1$Attrition == "Yes", 1, 0)

# Chuyển MaritalStatus thành factor nếu chưa phải
data1$MaritalStatus <- as.factor(data1$MaritalStatus)

# Đặt "Married" làm nhóm tham chiếu
data1$MaritalStatus <- relevel(data1$MaritalStatus, ref = "Married")

# Ước lượng mô hình LPM với MaritalStatus là biến định tính
model_lpm_marital <- lm(Attrition_bin ~ MaritalStatus, data = data1)

# Hiển thị kết quả
summary(model_lpm_marital)
## 
## Call:
## lm(formula = Attrition_bin ~ MaritalStatus, data = data1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.2553 -0.1248 -0.1248 -0.1009  0.8991 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            0.12481    0.01397   8.938  < 2e-16 ***
## MaritalStatusDivorced -0.02390    0.02442  -0.979    0.328    
## MaritalStatusSingle    0.13050    0.02178   5.992  2.6e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3623 on 1467 degrees of freedom
## Multiple R-squared:  0.0314, Adjusted R-squared:  0.03008 
## F-statistic: 23.78 on 2 and 1467 DF,  p-value: 6.85e-11

Phương trình hồi quy được ước lượng:

\[ \hat{\text{Attrition}}_i = 0.12481 - 0.02390 \cdot \text{Divorced}_i + 0.13050 \cdot \text{Single}_i \]

Giải thích kết quả:

  • Intercept = 0.12481: Xác suất nghỉ việc trung bình của nhân viên đã kết hôn là 12.48%.

  • Hệ số Single = 0.13050: Nhân viên độc thân có xác suất nghỉ việc cao hơn 13.05 điểm phần trăm so với nhóm đã kết hôn. Hệ số này có ý nghĩa thống kê rất cao (p-value < 0.001), cho thấy mối liên hệ rõ ràng giữa tình trạng độc thân và khả năng nghỉ việc.

  • Hệ số Divorced = -0.02390: Nhân viên ly hôn có xác suất nghỉ việc thấp hơn 2.39 điểm phần trăm so với nhóm đã kết hôn, nhưng sự khác biệt này không có ý nghĩa thống kê (p-value = 0.328).

Kết luận: Mô hình LPM cho thấy tình trạng hôn nhân có ảnh hưởng đến khả năng nghỉ việc của nhân viên:

  • Nhóm độc thân có xác suất nghỉ việc cao hơn đáng kể so với nhóm đã kết hôn, phản ánh khả năng dịch chuyển lao động cao hơn do ít ràng buộc gia đình.

  • Nhóm ly hôn không khác biệt rõ rệt so với nhóm đã kết hôn.

Tuy nhiên, do mô hình LPM có những hạn chế như xác suất dự đoán có thể nằm ngoài khoảng [0,1]sai số không đồng nhất, cần tiếp tục kiểm định lại bằng các mô hình hồi quy nhị phân phi tuyến như Logit, Probit, và Cloglog trong các phần tiếp theo để đảm bảo tính chính xác và nhất quán của kết quả.

3.3.2.2 Mô hình Logit

Mô hình hồi quy logistic (Logit) được sử dụng để đánh giá mối quan hệ giữa tình trạng hôn nhân (MaritalStatus)xác suất nghỉ việc (Attrition) của nhân viên. Đây là một trong những mô hình phổ biến cho biến phụ thuộc nhị phân, sử dụng hàm liên kết logistic nhằm đảm bảo xác suất dự đoán nằm trong khoảng \([0, 1]\).

Mô hình lý thuyết:

\[ \log\left(\frac{P(\text{Attrition}_i = 1)}{1 - P(\text{Attrition}_i = 1)}\right) = \beta_0 + \beta_1 \cdot \text{Single}_i + \beta_2 \cdot \text{Divorced}_i \]

Trong đó:

  • \(P(\text{Attrition}_i = 1)\): xác suất nhân viên \(i\) nghỉ việc

  • \(\beta_0\): log-odds nghỉ việc của nhóm đã kết hôn (Married)

  • \(\beta_1\): mức thay đổi log-odds nghỉ việc của nhóm độc thân (Single) so với Married

  • \(\beta_2\): mức thay đổi log-odds nghỉ việc của nhóm ly hôn (Divorced) so với Married

# Ước lượng mô hình Logit
model_logit_marital <- glm(Attrition_bin ~ MaritalStatus, data = data1, family = binomial(link = "logit"))

# Hiển thị kết quả mô hình
summary(model_logit_marital)
## 
## Call:
## glm(formula = Attrition_bin ~ MaritalStatus, family = binomial(link = "logit"), 
##     data = data1)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            -1.9476     0.1166 -16.699  < 2e-16 ***
## MaritalStatusDivorced  -0.2395     0.2175  -1.101    0.271    
## MaritalStatusSingle     0.8772     0.1575   5.571 2.54e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1254.6  on 1467  degrees of freedom
## AIC: 1260.6
## 
## Number of Fisher Scoring iterations: 4

Phương trình hồi quy được ước lượng từ dữ liệu:

\[ \log\left(\frac{P(\text{Attrition}_i = 1)}{1 - P(\text{Attrition}_i = 1)}\right) = -1.9476 + 0.8772 \cdot \text{Single}_i - 0.2395 \cdot \text{Divorced}_i \]

Giải thích kết quả:

  • Intercept = -1.9476: Khi nhân viên đã kết hôn, log-odds nghỉ việc trung bình là -1.9476. Suy ra xác suất nghỉ việc:

    \[ P(\text{Attrition} = 1 | \text{Married}) = \frac{e^{-1.9476}}{1 + e^{-1.9476}} \approx 0.1259 \Rightarrow \textbf{12.59%} \]

  • Hệ số Single = 0.8772: Nhân viên độc thân có log-odds nghỉ việc cao hơn 0.8772 so với nhân viên đã kết hôn. Chuyển sang Odds Ratio:

    \[ \text{OR}_{\text{Single}} = e^{0.8772} \approx 2.404 \]

    → Nhân viên độc thân có nguy cơ nghỉ việc cao hơn khoảng 2.4 lần so với người đã kết hôn. Hệ số này có ý nghĩa thống kê rất cao (p-value ≈ 2.54e-08).

  • Hệ số Divorced = -0.2395: Nhân viên ly hôn có log-odds nghỉ việc thấp hơn một chút so với người đã kết hôn. Tuy nhiên:

    \[ \text{OR}_{\text{Divorced}} = e^{-0.2395} \approx 0.787 \]

    → Odds nghỉ việc thấp hơn khoảng 21.3%, nhưng hệ số này không có ý nghĩa thống kê (p-value = 0.271).

Kết luận: Mô hình Logit cho thấy rằng tình trạng hôn nhân có ảnh hưởng đến xác suất nghỉ việc của nhân viên:

  • Nhân viên độc thân có nguy cơ nghỉ việc cao hơn đáng kể so với nhóm đã kết hôn. Điều này cho thấy nhóm này có xu hướng rời bỏ tổ chức cao hơn do ít ràng buộc gia đình và linh hoạt hơn về nghề nghiệp.

  • Nhân viên ly hôn không có sự khác biệt đáng kể về xác suất nghỉ việc so với nhóm đã kết hôn.

Mô hình Logit giúp khắc phục các hạn chế của mô hình xác suất tuyến tính như xác suất ngoài [0,1] và cho phép diễn giải trực tiếp theo odds ratio – một công cụ hữu ích trong phân tích định lượng hành vi nghỉ việc.

3.3.2.3 Mô hình Probit

Mô hình Probit sử dụng hàm phân phối chuẩn tích lũy (CDF) để liên kết biến độc lập với xác suất xảy ra sự kiện. Đây là một mô hình phổ biến cho phân tích dữ liệu nhị phân, tương tự như Logit, nhưng thay vì giả định phân phối logistic, nó sử dụng phân phối chuẩn.

Mô hình lý thuyết:

\[ P(\text{Attrition}_i = 1) = \Phi(\beta_0 + \beta_1 \cdot \text{Single}_i + \beta_2 \cdot \text{Divorced}_i) \]

Trong đó:

  • \(\Phi(\cdot)\): là hàm phân phối tích lũy chuẩn chuẩn hóa.

  • \(\beta_0\): “chỉ số chuẩn” của nhóm đã kết hôn (Married).

  • \(\beta_1\): mức thay đổi chỉ số chuẩn do tình trạng độc thân (Single) so với Married.

  • \(\beta_2\): mức thay đổi chỉ số chuẩn do ly hôn (Divorced) so với Married.

# Ước lượng mô hình Probit
model_probit_marital <- glm(Attrition_bin ~ MaritalStatus, data = data1, family = binomial(link = "probit"))

# Hiển thị kết quả
summary(model_probit_marital)
## 
## Call:
## glm(formula = Attrition_bin ~ MaritalStatus, family = binomial(link = "probit"), 
##     data = data1)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -1.15125    0.06195 -18.582  < 2e-16 ***
## MaritalStatusDivorced -0.12509    0.11282  -1.109    0.268    
## MaritalStatusSingle    0.49341    0.08807   5.602 2.11e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1254.6  on 1467  degrees of freedom
## AIC: 1260.6
## 
## Number of Fisher Scoring iterations: 4

Phương trình hồi quy được ước lượng:

\[ P(\text{Attrition}_i = 1) = \Phi(-1.15125 + 0.49341 \cdot \text{Single}_i - 0.12509 \cdot \text{Divorced}_i) \]

Giải thích kết quả:

  • Kết quả mô hình cho thấy hệ số chặn (Intercept) là –1.15125, đại diện cho chỉ số chuẩn tương ứng với nhóm tham chiếu – tức nhân viên đã kết hôn. Khi nội suy giá trị này qua hàm phân phối chuẩn tích lũy, ta thu được:

\[ \Phi(-1.15125) \approx 0.125 \Rightarrow \text{Xác suất nghỉ việc của nhóm đã kết hôn} \approx \textbf{12.5%} \]

  • Đối với nhóm độc thân, hệ số ước lượng là 0.49341, cho thấy chỉ số chuẩn của họ cao hơn 0.49341 đơn vị so với nhóm đã kết hôn. Khi cộng vào hệ số chặn và chuyển sang xác suất, ta được:

\[ \Phi(-1.15125 + 0.49341) = \Phi(-0.65784) \approx 0.255 \Rightarrow \text{Xác suất nghỉ việc của nhóm độc thân} \approx \textbf{25.5%} \]

Điều này có nghĩa là nhân viên độc thân có xác suất nghỉ việc gần gấp đôi so với nhóm đã kết hôn. Kết quả này có ý nghĩa thống kê rất cao (p-value ≈ 2.11e-08), khẳng định rằng sự khác biệt này là đáng tin cậy và có thật trong dữ liệu.

  • Ngược lại, nhóm ly hôn có hệ số là –0.12509, cho thấy họ có chỉ số chuẩn thấp hơn một chút so với nhóm đã kết hôn. Khi nội suy:

\[ \Phi(-1.15125 - 0.12509) = \Phi(-1.27634) \approx 0.101 \Rightarrow \text{Xác suất nghỉ việc của nhóm ly hôn} \approx \textbf{10.1%} \]

Mặc dù xác suất nghỉ việc của nhóm ly hôn thấp hơn nhóm đã kết hôn, nhưng sự khác biệt này không có ý nghĩa thống kê (p-value = 0.268), do đó chưa đủ bằng chứng để kết luận mối quan hệ này là có thật.

Kết luận:

Mô hình Probit cho thấy rằng tình trạng hôn nhân có ảnh hưởng rõ rệt đến khả năng nghỉ việc của nhân viên, trong đó:

  • Nhóm độc thân có xác suất nghỉ việc cao hơn đáng kể so với nhóm đã kết hôn. Đây là nhóm có nguy cơ nghỉ việc cao hơn, có thể do họ ít ràng buộc gia đình và linh hoạt hơn trong lựa chọn công việc.

  • Ngược lại, nhóm ly hôn không có sự khác biệt có ý nghĩa thống kê so với nhóm đã kết hôn, nên không thể đưa ra kết luận chắc chắn về xu hướng nghỉ việc của nhóm này.

Mặc dù hệ số trong mô hình Probit không thể diễn giải trực tiếp như Odds Ratio trong mô hình Logit, việc chuyển đổi sang xác suất thông qua hàm phân phối chuẩn chuẩn hóa \(\Phi\) vẫn giúp hiểu rõ mức độ ảnh hưởng thực tế của các nhóm. Điều này cho thấy mô hình Probit là một phương pháp kiểm định bổ sung đáng tin cậy, giúp củng cố kết quả từ các mô hình trước như LPM và Logit.

3.3.2.4 Mô hình Cloglog

Mô hình Cloglog (Complementary Log-Log) là một biến thể của hồi quy nhị phân, được sử dụng trong các tình huống mà xác suất xảy ra sự kiện nhỏ, hoặc dữ liệu có phân phối bất đối xứng. Mô hình sử dụng hàm liên kết:

\[ g(p) = \log(-\log(1 - p)) \]

khác với Logit và Probit, giúp mô tả tốt hơn các phân phối lệch. Đây là lựa chọn phù hợp khi phân phối của xác suất có độ dốc lớn ở một phía.

Mô hình lý thuyết:

\[ \log(-\log(1 - P(\text{Attrition}_i = 1))) = \beta_0 + \beta_1 \cdot \text{Single}_i + \beta_2 \cdot \text{Divorced}_i \]

Trong đó:

  • \(\beta_0\): log(-log(1 - p)) của nhóm đã kết hôn

  • \(\beta_1\): mức thay đổi log(-log(1 - p)) nếu nhân viên độc thân

  • \(\beta_2\): mức thay đổi log(-log(1 - p)) nếu nhân viên ly hôn

# Ước lượng mô hình Cloglog
model_cloglog_marital <- glm(Attrition_bin ~ MaritalStatus, data = data1, family = binomial(link = "cloglog"))

# Hiển thị kết quả
summary(model_cloglog_marital)
## 
## Call:
## glm(formula = Attrition_bin ~ MaritalStatus, family = binomial(link = "cloglog"), 
##     data = data1)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            -2.0150     0.1092 -18.454  < 2e-16 ***
## MaritalStatusDivorced  -0.2257     0.2056  -1.098    0.272    
## MaritalStatusSingle     0.7935     0.1425   5.567 2.59e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1254.6  on 1467  degrees of freedom
## AIC: 1260.6
## 
## Number of Fisher Scoring iterations: 5

Phương trình hồi quy được ước lượng:

\[ \log(-\log(1 - P)) = -2.0150 + 0.7935 \cdot \text{Single}_i - 0.2257 \cdot \text{Divorced}_i \]

Giải thích kết quả:

  • Kết quả mô hình cho thấy hệ số chặn (\(\beta_0 = -2.0150\)) đại diện cho nhóm tham chiếu là nhân viên đã kết hôn. Khi chuyển đổi thông qua hàm nghịch đảo của liên kết cloglog, xác suất nghỉ việc tương ứng được tính như sau:

\[ P_{\text{Married}} = 1 - \exp(-\exp(-2.0150)) \approx \textbf{13.3%} \]

  • Đối với nhóm độc thân, hệ số hồi quy là 0.7935. Khi cộng hệ số này vào giá trị gốc, ta thu được:

\[ P_{\text{Single}} = 1 - \exp(-\exp(-2.0150 + 0.7935)) \approx \textbf{25.8%} \]

Điều này cho thấy nhân viên độc thân có xác suất nghỉ việc cao hơn đáng kể so với nhóm đã kết hôn, với mức chênh lệch xấp xỉ 12.5 điểm phần trăm, từ 13.3% lên 25.8%, và sự khác biệt này là có ý nghĩa thống kê rất cao (p-value ≈ 2.59e-08).

  • Ngược lại, với nhóm ly hôn, hệ số hồi quy là –0.2257. Khi chuyển đổi thành xác suất:

\[ P_{\text{Divorced}} = 1 - \exp(-\exp(-2.0150 - 0.2257)) \approx \textbf{10.6%} \]

Mặc dù xác suất nghỉ việc của nhóm ly hôn thấp hơn so với nhóm đã kết hôn, nhưng sự khác biệt này không có ý nghĩa thống kê (p-value = 0.272), do đó chưa thể khẳng định chắc chắn về mối quan hệ giữa tình trạng ly hôn và xác suất nghỉ việc.

Kết luận:

  • Mô hình Cloglog tiếp tục khẳng định rằng tình trạng hôn nhân là một yếu tố ảnh hưởng đáng kể đến xác suất nghỉ việc, đặc biệt là đối với nhóm nhân viên độc thân. Kết quả cho thấy xác suất nghỉ việc của nhóm này cao hơn rõ rệt so với nhóm đã kết hôn, và sự khác biệt này là có thật về mặt thống kê. Ngược lại, nhóm ly hôn không cho thấy sự khác biệt có ý nghĩa, nên không đủ cơ sở để đưa ra kết luận chắc chắn.

  • So với các mô hình LPM, Logit và Probit đã trình bày trước đó, Cloglog không chỉ cho kết quả nhất quán về xu hướng ảnh hưởng của tình trạng độc thân, mà còn mở rộng góc nhìn khi xét đến đặc điểm phân phối bất đối xứng của xác suất nghỉ việc. Do đó, mô hình này đóng vai trò là một phương pháp bổ sung hữu ích, góp phần củng cố kết luận rằng nhóm nhân viên độc thân là nhóm có nguy cơ nghỉ việc cao nhất trong ba nhóm phân loại theo tình trạng hôn nhân.

3.3.3 Mô hình hồi quy đa biến

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

Mô hình xác suất tuyến tính (LPM) được áp dụng nhằm đánh giá đồng thời tác động của các yếu tố: OverTime, JobSatisfaction, MaritalStatusWorkLifeBalance đến xác suất nghỉ việc của nhân viên. Đây là mô hình tuyến tính đơn giản, giúp cung cấp cái nhìn sơ bộ về mối quan hệ giữa các biến độc lập và biến phụ thuộc nhị phân, thông qua hệ số ước lượng – thể hiện sự thay đổi trực tiếp về xác suất.

Trong mô hình này, các biến định tính như JobSatisfactionWorkLifeBalance (có thang điểm từ 1 đến 4) được xử lý dưới dạng biến phân loại (factor), với các nhóm tham chiếu được chọn như sau:

  • OverTime: nhóm tham chiếu là “No” (không làm thêm giờ)

  • JobSatisfaction: nhóm tham chiếu là mức 1 (rất không hài lòng)

  • MaritalStatus: nhóm tham chiếu là “Married” (đã kết hôn)

  • WorkLifeBalance: nhóm tham chiếu là mức 1 (rất mất cân bằng)

Phương trình hồi quy được ước lượng:

\[ \begin{aligned} \hat{\text{Attrition}}_i =\ & \beta_0 + \beta_1 \cdot \text{OverTime}_i + \beta_2 \cdot \text{JobSatisfaction}_2 + \beta_3 \cdot \text{JobSatisfaction}_3 + \beta_4 \cdot \text{JobSatisfaction}_4 \\ &+ \beta_5 \cdot \text{MaritalStatus}_{\text{Divorced}} + \beta_6 \cdot \text{MaritalStatus}_{\text{Single}} \\ &+ \beta_7 \cdot \text{WorkLifeBalance}_2 + \beta_8 \cdot \text{WorkLifeBalance}_3 + \beta_9 \cdot \text{WorkLifeBalance}_4 + \varepsilon_i \end{aligned} \]

# Chuyển các biến định tính có thứ bậc thành factor và đặt nhóm tham chiếu
data1$JobSatisfaction <- as.factor(data1$JobSatisfaction)
data1$WorkLifeBalance <- as.factor(data1$WorkLifeBalance)
data1$MaritalStatus <- as.factor(data1$MaritalStatus)
data1$OverTime <- as.factor(data1$OverTime)

# Đặt nhóm tham chiếu
data1$JobSatisfaction <- relevel(data1$JobSatisfaction, ref = "1")
data1$WorkLifeBalance <- relevel(data1$WorkLifeBalance, ref = "1")
data1$MaritalStatus <- relevel(data1$MaritalStatus, ref = "Married")
data1$OverTime <- relevel(data1$OverTime, ref = "No")

# Ước lượng mô hình LPM
model_lpm_multi <- lm(Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + WorkLifeBalance, data = data1)

# Kết quả mô hình
summary(model_lpm_multi)
## 
## Call:
## lm(formula = Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + 
##     WorkLifeBalance, data = data1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.56517 -0.19179 -0.08571  0.00655  1.04027 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            0.28422    0.04392   6.471 1.33e-10 ***
## OverTimeYes            0.20550    0.02010  10.225  < 2e-16 ***
## JobSatisfaction2      -0.05747    0.02906  -1.978  0.04816 *  
## JobSatisfaction3      -0.05941    0.02622  -2.266  0.02358 *  
## JobSatisfaction4      -0.12512    0.02605  -4.803 1.72e-06 ***
## MaritalStatusDivorced -0.02656    0.02339  -1.135  0.25645    
## MaritalStatusSingle    0.13486    0.02084   6.472 1.32e-10 ***
## WorkLifeBalance2      -0.13910    0.04308  -3.229  0.00127 ** 
## WorkLifeBalance3      -0.17281    0.04045  -4.272 2.06e-05 ***
## WorkLifeBalance4      -0.12446    0.04781  -2.603  0.00934 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3463 on 1460 degrees of freedom
## Multiple R-squared:  0.1192, Adjusted R-squared:  0.1138 
## F-statistic: 21.95 on 9 and 1460 DF,  p-value: < 2.2e-16

Giải thích kết quả

  • Theo kết quả hồi quy, Intercept = 0.28422 cho biết xác suất nghỉ việc trung bình của nhân viên thuộc nhóm tham chiếu (không làm thêm giờ, rất không hài lòng công việc, đã kết hôn và rất mất cân bằng công việc – cuộc sống) là khoảng 28.42%.

  • Biến OverTime có hệ số 0.20550 với ý nghĩa thống kê rất cao (p < 0.001), cho thấy nhân viên làm thêm giờ có xác suất nghỉ việc cao hơn 20.55 điểm phần trăm so với người không làm thêm. Đây là một trong những yếu tố có ảnh hưởng mạnh và rõ rệt nhất đến xu hướng nghỉ việc.

  • Về mức độ hài lòng công việc (JobSatisfaction), khi so sánh với mức 1 (rất không hài lòng), tất cả các mức độ từ 2 đến 4 đều cho hệ số âm có ý nghĩa thống kê. Cụ thể, mức độ hài lòng càng cao thì xác suất nghỉ việc càng giảm: mức 2 giảm 5.75 điểm %, mức 3 giảm 5.94 điểm %, và mức 4 giảm đến 12.51 điểm %. Điều này phản ánh rằng sự thỏa mãn với công việc có tác động bảo vệ rõ rệt đối với quyết định nghỉ việc.

  • Với biến MaritalStatus, nhóm Single có hệ số 0.13486 và p-value rất nhỏ, hàm ý rằng nhân viên độc thân có xác suất nghỉ việc cao hơn 13.49 điểm phần trăm so với nhóm đã kết hôn – một khác biệt có ý nghĩa thống kê rõ ràng. Trong khi đó, nhóm Divorced không khác biệt đáng kể với nhóm đã kết hôn do hệ số không có ý nghĩa thống kê (p = 0.256).

  • Đối với WorkLifeBalance, các mức từ 2 đến 4 đều có hệ số âm và có ý nghĩa thống kê, chứng tỏ sự cải thiện trong cân bằng công việc – cuộc sống giúp giảm xác suất nghỉ việc. Mức 2 giảm 13.91 điểm %, mức 3 giảm 17.28 điểm %, và mức 4 giảm 12.45 điểm % so với mức rất mất cân bằng. Như vậy, yếu tố này thể hiện vai trò bảo vệ rõ rệt và bền vững, dù mức cải thiện không hoàn toàn tuyến tính.

Kết luận

Kết quả mô hình LPM cho thấy xác suất nghỉ việc của nhân viên chịu ảnh hưởng đồng thời bởi nhiều yếu tố, trong đó nổi bật là tình trạng làm thêm giờ, sự hài lòng công việc, tình trạng hôn nhân và mức độ cân bằng cuộc sống. Mức độ tác động của các biến là phù hợp với kỳ vọng lý thuyết và kinh nghiệm thực tiễn. Đặc biệt:

  • Nhân viên làm thêm giờ, độc thân, không hài lòng công việc và mất cân bằng cuộc sống là những đối tượng có xác suất nghỉ việc cao hơn đáng kể.

  • Các yếu tố bảo vệ như hài lòng công việc và cân bằng cuộc sống thể hiện vai trò quan trọng trong việc giữ chân nhân sự.

Mặc dù mô hình LPM chỉ giải thích được khoảng 11.92% biến thiên của xác suất nghỉ việc, nhưng đây là kết quả chấp nhận được với mô hình đơn giản. Phân tích tiếp theo với các mô hình phi tuyến như Logit, Probit, Cloglog sẽ giúp xác nhận và bổ sung cho những kết luận này.

3.3.3.2 Mô hình Logit

Mô hình hồi quy logistic nhị phân (Logit) được sử dụng nhằm đánh giá ảnh hưởng đồng thời của các yếu tố OverTime, JobSatisfaction, MaritalStatusWorkLifeBalance đến xác suất nghỉ việc (Attrition) của nhân viên. Mô hình Logit khắc phục được những hạn chế của mô hình xác suất tuyến tính (LPM), đặc biệt là việc đảm bảo giá trị dự đoán luôn nằm trong khoảng \([0, 1]\) thông qua việc sử dụng hàm liên kết logit:

\[ \log\left( \frac{P_i}{1 - P_i} \right) = \beta_0 + \beta_1 \cdot \text{OverTime}_i + \ldots + \beta_9 \cdot \text{WorkLifeBalance}_4 + \varepsilon_i \]

# Ước lượng mô hình Logit
model_logit_multi <- glm(Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + WorkLifeBalance,
                         data = data1, family = "binomial")

# Kết quả mô hình
summary(model_logit_multi)
## 
## Call:
## glm(formula = Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + 
##     WorkLifeBalance, family = "binomial", data = data1)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            -1.0474     0.3052  -3.432 0.000599 ***
## OverTimeYes             1.4860     0.1558   9.536  < 2e-16 ***
## JobSatisfaction2       -0.4146     0.2288  -1.812 0.069919 .  
## JobSatisfaction3       -0.4291     0.2033  -2.110 0.034816 *  
## JobSatisfaction4       -1.0558     0.2191  -4.820 1.44e-06 ***
## MaritalStatusDivorced  -0.2993     0.2269  -1.319 0.187091    
## MaritalStatusSingle     1.0042     0.1677   5.987 2.14e-09 ***
## WorkLifeBalance2       -0.9013     0.3017  -2.987 0.002814 ** 
## WorkLifeBalance3       -1.2100     0.2801  -4.320 1.56e-05 ***
## WorkLifeBalance4       -0.7971     0.3444  -2.314 0.020656 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1127.0  on 1460  degrees of freedom
## AIC: 1147
## 
## Number of Fisher Scoring iterations: 5

Phương trình hồi quy sau khi ước lượng:

\[ \begin{aligned} \log\left( \frac{P_i}{1 - P_i} \right) =\ & -1.0474 + 1.4860 \cdot \text{OverTime}_i - 0.4146 \cdot \text{JobSatisfaction}_2 - 0.4291 \cdot \text{JobSatisfaction}_3 - 1.0558 \cdot \text{JobSatisfaction}_4 \\ & - 0.2993 \cdot \text{MaritalStatus}_{\text{Divorced}} + 1.0042 \cdot \text{MaritalStatus}_{\text{Single}} \\ & - 0.9013 \cdot \text{WorkLifeBalance}_2 - 1.2100 \cdot \text{WorkLifeBalance}_3 - 0.7971 \cdot \text{WorkLifeBalance}_4 \end{aligned} \]

Giải thích kết quả:

  • Kết quả mô hình cho thấy Intercept = -1.0474, tương ứng với log-odds nghỉ việc của nhóm tham chiếu (không làm thêm giờ, rất không hài lòng công việc, đã kết hôn và rất mất cân bằng giữa công việc – cuộc sống). Khi chuyển đổi sang xác suất, ta có:

\[ P = \frac{1}{1 + e^{1.0474}} \approx 0.259 \Rightarrow \text{Xác suất nghỉ việc trung bình của nhóm tham chiếu} \approx 25.9\% \]

  • Biến OverTime có hệ số 1.4860 với ý nghĩa thống kê rất cao (p < 0.001), cho thấy nhân viên làm thêm giờ có log-odds nghỉ việc cao hơn nhóm không làm thêm. Tương ứng, Odds Ratio là \(e^{1.4860} \approx 4.42\), tức nhân viên làm thêm giờ có nguy cơ nghỉ việc cao gấp 4.42 lần so với người không làm thêm – cho thấy đây là yếu tố có ảnh hưởng mạnh nhất.

  • Với biến JobSatisfaction, ba mức từ 2 đến 4 đều có hệ số âm, phản ánh tác động bảo vệ rõ rệt khi mức độ hài lòng công việc tăng. Cụ thể, Odds Ratio lần lượt là:

  • Mức 2: \(e^{-0.4146} \approx 0.66\)

  • Mức 3: \(e^{-0.4291} \approx 0.65\)

  • Mức 4: \(e^{-1.0558} \approx 0.35\)

Điều này cho thấy, so với người rất không hài lòng, người hài lòng mức 4 có odds nghỉ việc giảm 65%, và mức 2–3 cũng giảm gần 35–40%, phù hợp với giả thuyết lý thuyết rằng hài lòng với công việc giúp giữ chân nhân viên.

  • Về MaritalStatus, nhóm Single có hệ số 1.0042 với p-value rất nhỏ (p < 0.001), cho thấy người độc thân có log-odds nghỉ việc cao hơn người đã kết hôn. Odds Ratio tương ứng là \(e^{1.0042} \approx 2.73\), tức nguy cơ nghỉ việc của người độc thân cao gấp 2.73 lần. Ngược lại, nhóm Divorced có hệ số -0.2993 (p = 0.187) không có ý nghĩa thống kê, nên không thể kết luận sự khác biệt so với nhóm đã kết hôn.

  • Đối với WorkLifeBalance, cả ba mức 2, 3 và 4 đều có hệ số âm và có ý nghĩa thống kê cao, cho thấy sự cải thiện trong cân bằng công việc – cuộc sống giúp giảm khả năng nghỉ việc. Odds Ratio lần lượt là:

    • Mức 2: \(e^{-0.9013} \approx 0.41\)

    • Mức 3: \(e^{-1.2100} \approx 0.30\)

    • Mức 4: \(e^{-0.7971} \approx 0.45\)

Như vậy, nhân viên có cân bằng cuộc sống mức tốt (mức 3) sẽ có odds nghỉ việc giảm khoảng 70% so với người rất mất cân bằng, cho thấy đây là một yếu tố bảo vệ rõ rệt.

Kết luận:

Mô hình Logit cho thấy xác suất nghỉ việc của nhân viên chịu ảnh hưởng đồng thời bởi nhiều yếu tố, trong đó nổi bật là tình trạng làm thêm giờ, mức độ hài lòng công việc, tình trạng hôn nhân và sự cân bằng giữa công việc và cuộc sống. Cụ thể:

  • Những người làm thêm giờ, độc thân, ít hài lòng với công việc và cảm thấy mất cân bằng công việc – cuộc sống có xác suất nghỉ việc cao hơn rõ rệt

  • Ngược lại, những nhân viên có mức độ hài lòng cao và cuộc sống cân bằng sẽ có xu hướng gắn bó lâu dài hơn với tổ chức.

3.3.3.3 Mô hình Probit

Mô hình Probit được sử dụng nhằm đánh giá ảnh hưởng đồng thời của các yếu tố: OverTime, JobSatisfaction, MaritalStatusWorkLifeBalance đến xác suất nghỉ việc của nhân viên. Khác với mô hình Logit, mô hình Probit giả định biến tiềm ẩn (latent variable) theo phân phối chuẩn chuẩn hóa, và xác suất xảy ra sự kiện được tính bằng hàm phân phối chuẩn tích lũy (CDF).

Mô hình lý thuyết có dạng:

\[ P_i = \Phi(\beta_0 + \beta_1 \cdot \text{OverTime}_i + \beta_2 \cdot \text{JobSatisfaction}_2 + \cdots + \beta_9 \cdot \text{WorkLifeBalance}_4) \]

Trong đó:

  • \(P_i\) là xác suất nhân viên thứ \(i\) nghỉ việc.

  • \(\Phi\) là hàm phân phối chuẩn tích lũy.

  • Các biến định tính như JobSatisfaction và WorkLifeBalance được xử lý dưới dạng biến phân loại, với nhóm tham chiếu là mức 1 (rất không hài lòng / rất mất cân bằng).

  • MaritalStatus có nhóm tham chiếu là “Married”; OverTime có nhóm tham chiếu là “No”.

# Ước lượng mô hình Probit
model_probit_multi <- glm(Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + WorkLifeBalance,
                          data = data1, family = binomial(link = "probit"))

# Kết quả mô hình
summary(model_probit_multi)
## 
## Call:
## glm(formula = Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + 
##     WorkLifeBalance, family = binomial(link = "probit"), data = data1)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -0.62005    0.17731  -3.497 0.000471 ***
## OverTimeYes            0.82070    0.08677   9.459  < 2e-16 ***
## JobSatisfaction2      -0.24679    0.12847  -1.921 0.054738 .  
## JobSatisfaction3      -0.24374    0.11448  -2.129 0.033236 *  
## JobSatisfaction4      -0.56497    0.11999  -4.708 2.50e-06 ***
## MaritalStatusDivorced -0.15167    0.11937  -1.271 0.203885    
## MaritalStatusSingle    0.54752    0.09300   5.887 3.93e-09 ***
## WorkLifeBalance2      -0.50150    0.17498  -2.866 0.004156 ** 
## WorkLifeBalance3      -0.67713    0.16302  -4.154 3.27e-05 ***
## WorkLifeBalance4      -0.43550    0.19765  -2.203 0.027566 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1129.7  on 1460  degrees of freedom
## AIC: 1149.7
## 
## Number of Fisher Scoring iterations: 5

Phương trình hồi quy được ước lượng:

\[ \begin{aligned} \Phi^{-1}(P_i) =\ & -0.62005 + 0.82070 \cdot \text{OverTime}_i - 0.24679 \cdot \text{JobSatisfaction}_2 - 0.24374 \cdot \text{JobSatisfaction}_3 - 0.56497 \cdot \text{JobSatisfaction}_4 \\ & - 0.15167 \cdot \text{MaritalStatus}_{\text{Divorced}} + 0.54752 \cdot \text{MaritalStatus}_{\text{Single}} \\ & - 0.50150 \cdot \text{WorkLifeBalance}_2 - 0.67713 \cdot \text{WorkLifeBalance}_3 - 0.43550 \cdot \text{WorkLifeBalance}_4 \end{aligned} \]

Trong đó, vế trái là giá trị “chỉ số chuẩn” nội suy theo phân phối chuẩn chuẩn hóa.

Giải thích kết quả:

  • Hệ số chặn (Intercept) = -0.62005 phản ánh xác suất nghỉ việc trung bình của nhân viên thuộc nhóm tham chiếu (không làm thêm giờ, rất không hài lòng công việc, đã kết hôn và rất mất cân bằng công việc – cuộc sống). Nếu nội suy ngược lại từ điểm z = -0.62005 trong phân phối chuẩn, xác suất nghỉ việc ước lượng là khoảng 26.7%.

  • Hệ số \(\text{OverTimeYes} = 0.82070\) cho thấy nếu nhân viên có làm thêm giờ, “chỉ số chuẩn” tăng thêm 0.82070 đơn vị, khiến xác suất nghỉ việc tăng từ khoảng 26.7% (nhóm không làm thêm) lên khoảng 53.4% (nội suy từ z = 0.20065). Đây là yếu tố có ảnh hưởng mạnh nhất trong mô hình, với độ tin cậy rất cao (p < 0.001).

  • Đối với JobSatisfaction, khi so sánh với mức rất không hài lòng:

    • Mức 2 có hệ số -0.24679 (p = 0.0547), cho thấy xác suất nghỉ việc giảm nhẹ nhưng chưa đạt mức ý nghĩa thống kê mạnh.

    • Mức 3 có hệ số -0.24374 (p = 0.0332), giúp giảm xác suất nghỉ việc khoảng 5.8 điểm phần trăm.

    • Mức 4 có hệ số -0.56497 (p < 0.001), làm giảm đáng kể xác suất nghỉ việc từ 26.7% xuống khoảng 15.2% (nội suy từ z = -1.185).

Điều này phản ánh sự hài lòng với công việc có vai trò bảo vệ rõ rệt, đặc biệt ở mức độ cao.

  • Về tình trạng hôn nhân:

    • Nhân viên độc thân có hệ số 0.54752 (p < 0.001), tương đương việc tăng “chỉ số chuẩn” thêm 0.54752 và nâng xác suất nghỉ việc lên khoảng 46.2% – cao hơn đáng kể so với nhóm đã kết hôn.

    • Nhóm ly hôn (Divorced) có hệ số -0.15167 nhưng không mang ý nghĩa thống kê (p = 0.2039), do đó không khác biệt rõ rệt với nhóm tham chiếu.

  • Đối với WorkLifeBalance, kết quả cho thấy sự cải thiện cân bằng công việc – cuộc sống góp phần làm giảm xác suất nghỉ việc:

    • Mức 2: hệ số -0.50150 (p = 0.0042), giảm xác suất từ 26.7% xuống còn 17.4%.

    • Mức 3: hệ số -0.67713 (p < 0.001), giảm còn khoảng 13.2%.

    • Mức 4: hệ số -0.43550 (p = 0.0276), tương ứng xác suất 19.4%.

Dù sự giảm không hoàn toàn tuyến tính, nhưng tác động giảm là nhất quán và có ý nghĩa thực tiễn cao.

Kết luận:

Mô hình Probit khẳng định rằng các yếu tố làm thêm giờ, hài lòng công việc, tình trạng hôn nhân, và cân bằng cuộc sống đều ảnh hưởng đáng kể đến xác suất nghỉ việc. Nhân viên làm thêm giờ, độc thân, không hài lòng và mất cân bằng có xác suất nghỉ việc cao hơn. Trong khi đó, sự hài lòng và cân bằng đóng vai trò là các yếu tố bảo vệ bền vững.

Việc dùng mô hình Probit giúp xác nhận tính nhất quán của các kết quả thu được từ mô hình LPM và Logit, đồng thời cung cấp một góc nhìn xác suất mượt hơn thông qua phân phối chuẩn.

3.3.3.4 Mô hình Cloglog

Mô hình hồi quy Cloglog (Complementary Log-Log) được sử dụng để phân tích xác suất xảy ra sự kiện nhị phân, trong trường hợp này là khả năng nghỉ việc của nhân viên. Khác với Logit và Probit, mô hình Cloglog đặc biệt phù hợp khi xác suất xảy ra sự kiện không cân đối (nghiêng về một phía) và thường dùng khi các giá trị nhỏ (hiếm) có vai trò quan trọng.

Mô hình lý thuyết có dạng:

\[ \log(-\log(1 - P_i)) = \beta_0 + \beta_1 \cdot \text{OverTime}_i + \beta_2 \cdot \text{JobSatisfaction}_2 + \cdots + \beta_9 \cdot \text{WorkLifeBalance}_4 \]

# Ước lượng mô hình Cloglog
model_cloglog_multi <- glm(Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + WorkLifeBalance,
                           data = data1, family = binomial(link = "cloglog"))

# Kết quả mô hình
summary(model_cloglog_multi)
## 
## Call:
## glm(formula = Attrition_bin ~ OverTime + JobSatisfaction + MaritalStatus + 
##     WorkLifeBalance, family = binomial(link = "cloglog"), data = data1)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            -1.2828     0.2523  -5.084 3.69e-07 ***
## OverTimeYes             1.3017     0.1326   9.815  < 2e-16 ***
## JobSatisfaction2       -0.3171     0.1933  -1.641  0.10088    
## JobSatisfaction3       -0.3675     0.1726  -2.129  0.03322 *  
## JobSatisfaction4       -0.9182     0.1888  -4.863 1.16e-06 ***
## MaritalStatusDivorced  -0.2656     0.2065  -1.286  0.19833    
## MaritalStatusSingle     0.8806     0.1439   6.118 9.48e-10 ***
## WorkLifeBalance2       -0.7482     0.2456  -3.047  0.00231 ** 
## WorkLifeBalance3       -1.0313     0.2261  -4.560 5.11e-06 ***
## WorkLifeBalance4       -0.6833     0.2844  -2.403  0.01628 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1126.1  on 1460  degrees of freedom
## AIC: 1146.1
## 
## Number of Fisher Scoring iterations: 6

Giải thích kết quả:

  • Giá trị Intercept = -1.2828 đại diện cho nhóm tham chiếu gồm những nhân viên không làm thêm giờ, rất không hài lòng công việc, đã kết hôn và có cuộc sống rất mất cân bằng. Khi thay thế vào công thức liên kết, xác suất nghỉ việc ước tính cho nhóm này là khoảng 21.7%.

  • Biến OverTime có hệ số 1.3017 với mức ý nghĩa thống kê cực cao (p < 0.001), cho thấy rằng nhân viên có làm thêm giờ sẽ làm tăng đáng kể giá trị hàm liên kết, kéo xác suất nghỉ việc từ 21.7% lên khoảng 54.3%. Đây là biến có ảnh hưởng mạnh và rõ ràng nhất trong mô hình.

  • Với JobSatisfaction, các mức độ hài lòng cao hơn đều có hệ số âm, cho thấy mức độ hài lòng càng cao thì xác suất nghỉ việc càng thấp:

    • Mức 2: hệ số -0.3171 (p = 0.101), mặc dù có dấu hiệu giảm nhưng chưa đủ bằng chứng thống kê.

    • Mức 3: hệ số -0.3675 (p = 0.033), có ý nghĩa, giảm xác suất nghỉ việc xuống khoảng 18.4%.

    • Mức 4: hệ số -0.9182 (p < 0.001), giảm mạnh xác suất còn khoảng 9.7%.

  • Biến MaritalStatus cho thấy:

    • Nhóm Single có hệ số 0.8806 (p < 0.001), cho thấy nhân viên độc thân có xác suất nghỉ việc cao hơn đáng kể – tăng từ 21.7% lên khoảng 47.1%.

    • Nhóm Divorced có hệ số -0.2656 nhưng không có ý nghĩa thống kê (p = 0.198), nên không khác biệt đáng kể với nhóm đã kết hôn.

  • Biến WorkLifeBalance cũng có tác động rõ rệt:

    • Mức 2: hệ số -0.7482 (p = 0.002), làm giảm xác suất nghỉ việc xuống khoảng 13.4%.

    • Mức 3: hệ số -1.0313 (p < 0.001), giảm xuống chỉ còn 8.6%.

    • Mức 4: hệ số -0.6833 (p = 0.016), giảm còn khoảng 14.3%.

Các kết quả này khẳng định vai trò bảo vệ của việc cải thiện cân bằng cuộc sống trong việc giữ chân nhân sự.

Kết luận:

Mô hình Cloglog tiếp tục củng cố các kết luận trước đó: nhân viên làm thêm giờ, độc thân, không hài lòng công việc và thiếu cân bằng cuộc sống có xác suất nghỉ việc cao hơn đáng kể. Trong khi đó, sự hài lòng công việc và cân bằng cuộc sống đóng vai trò như những yếu tố bảo vệ mạnh mẽ. So với các mô hình khác, Cloglog đặc biệt hữu ích khi mô hình hóa các xác suất nhỏ hoặc khi phân phối lỗi có độ lệch, giúp cung cấp một góc nhìn bổ sung chính xác và nhạy bén hơn trong các quyết định nhân sự chiến lược.

3.3.3.5 Đánh giá mô hình

Trong phần này, tác giả tiến hành đánh giá và so sánh hiệu quả ba mô hình hồi quy nhị phân: Logit, ProbitCloglog, thông qua ba tiêu chí chính gồm:

  • AIC (Akaike Information Criterion) – đo lường mức độ phù hợp của mô hình, càng thấp càng tốt;

  • Brier Score – phản ánh độ chính xác trong việc ước lượng xác suất, càng nhỏ càng tốt;

  • Ma trận nhầm lẫn (Confusion Matrix) – giúp đánh giá hiệu quả dự báo thực tế, đặc biệt là khả năng phân biệt giữa hai nhóm “nghỉ việc” và “không nghỉ việc”.

# AIC từng mô hình
aic_logit <- AIC(model_logit_multi)
aic_probit <- AIC(model_probit_multi)
aic_cloglog <- AIC(model_cloglog_multi)

# Brier Score từng mô hình
brier_logit <- BrierScore(model_logit_multi)
brier_probit <- BrierScore(model_probit_multi)
brier_cloglog <- BrierScore(model_cloglog_multi)

# Ma trận nhầm lẫn từng mô hình
conf_logit <- Conf(table(
  predict(model_logit_multi, type = "response") >= 0.5,
  data1$Attrition_bin == 1
))
conf_probit <- Conf(table(
  predict(model_probit_multi, type = "response") >= 0.5,
  data1$Attrition_bin == 1
))

conf_cloglog <- Conf(table(
  predict(model_cloglog_multi, type = "response") >= 0.5,
  data1$Attrition_bin == 1
))

# In kết quả
list(
  AIC = c(Logit = aic_logit, Probit = aic_probit, Cloglog = aic_cloglog),
  Brier_Score = c(Logit = brier_logit, Probit = brier_probit, Cloglog = brier_cloglog),
  Confusion_Logit = conf_logit,
  Confusion_Probit = conf_probit,
  Confusion_Cloglog = conf_cloglog
)
## $AIC
##    Logit   Probit  Cloglog 
## 1147.027 1149.740 1146.061 
## 
## $Brier_Score
##     Logit    Probit   Cloglog 
## 0.1167924 0.1170552 0.1166990 
## 
## $Confusion_Logit
## 
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction FALSE TRUE
##      FALSE  1209  207
##      TRUE     24   30
## 
##                 Total n : 1'470
##                Accuracy : 0.8429
##                  95% CI : (0.8234, 0.8606)
##     No Information Rate : 0.8388
##     P-Value [Acc > NIR] : 0.3508
## 
##                   Kappa : 0.1557
##  Mcnemar's Test P-Value : < 2.2e-16
## 
##             Sensitivity : 0.9805
##             Specificity : 0.1266
##          Pos Pred Value : 0.8538
##          Neg Pred Value : 0.5556
##              Prevalence : 0.8388
##          Detection Rate : 0.9633
##    Detection Prevalence : 0.8224
##       Balanced Accuracy : 0.5536
##          F-val Accuracy : 0.9128
##      Matthews Cor.-Coef : 0.2094
## 
##        'Positive' Class : FALSE
## 
## 
## $Confusion_Probit
## 
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction FALSE TRUE
##      FALSE  1213  211
##      TRUE     20   26
## 
##                 Total n : 1'470
##                Accuracy : 0.8429
##                  95% CI : (0.8234, 0.8606)
##     No Information Rate : 0.8388
##     P-Value [Acc > NIR] : 0.3508
## 
##                   Kappa : 0.1386
##  Mcnemar's Test P-Value : < 2.2e-16
## 
##             Sensitivity : 0.9838
##             Specificity : 0.1097
##          Pos Pred Value : 0.8518
##          Neg Pred Value : 0.5652
##              Prevalence : 0.8388
##          Detection Rate : 0.9687
##    Detection Prevalence : 0.8252
##       Balanced Accuracy : 0.5467
##          F-val Accuracy : 0.9131
##      Matthews Cor.-Coef : 0.1975
## 
##        'Positive' Class : FALSE
## 
## 
## $Confusion_Cloglog
## 
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction FALSE TRUE
##      FALSE  1209  207
##      TRUE     24   30
## 
##                 Total n : 1'470
##                Accuracy : 0.8429
##                  95% CI : (0.8234, 0.8606)
##     No Information Rate : 0.8388
##     P-Value [Acc > NIR] : 0.3508
## 
##                   Kappa : 0.1557
##  Mcnemar's Test P-Value : < 2.2e-16
## 
##             Sensitivity : 0.9805
##             Specificity : 0.1266
##          Pos Pred Value : 0.8538
##          Neg Pred Value : 0.5556
##              Prevalence : 0.8388
##          Detection Rate : 0.9633
##    Detection Prevalence : 0.8224
##       Balanced Accuracy : 0.5536
##          F-val Accuracy : 0.9128
##      Matthews Cor.-Coef : 0.2094
## 
##        'Positive' Class : FALSE

Kết quả so sánh

Chỉ số đánh giá Logit Probit Cloglog
AIC 1147.03 1149.74 1146.06
Brier Score 0.11679 0.11706 0.11670

Như vậy, trong ba mô hình, Cloglog là mô hình có AIC và Brier Score thấp nhất, cho thấy mức độ phù hợp tốt hơn và khả năng ước lượng xác suất nghỉ việc chính xác hơn so với Logit và Probit.

Phân tích ma trận nhầm lẫn

Ma trận nhầm lẫn phản ánh hiệu quả phân loại hai nhóm đối tượng: nghỉ việc (class 1)không nghỉ việc (class 0). Các chỉ số quan trọng bao gồm:

  • Accuracy: tỷ lệ dự báo đúng trên toàn bộ mẫu;

  • Sensitivity (True Negative Rate): khả năng phát hiện đúng nhân viên không nghỉ việc;

  • Specificity (True Positive Rate): khả năng phát hiện đúng nhân viên nghỉ việc;

  • F1-score: thước đo tổng hợp độ chính xác và độ bao phủ;

  • Balanced Accuracy: trung bình cộng giữa Sensitivity và Specificity – quan trọng khi dữ liệu mất cân bằng.

Kết quả chính tóm lược:

Mô hình Accuracy Sensitivity Specificity F1-score Balanced Accuracy
Logit 84.29% 98.05% 12.66% 91.28% 55.36%
Probit 84.29% 98.38% 10.97% 91.31% 54.67%
Cloglog 84.29% 98.05% 12.66% 91.28% 55.36%

Giải thích và nhận xét

  • Cả ba mô hình đều có accuracy cao (~84%), tuy nhiên đây là đặc điểm dễ đánh lừa trong tập dữ liệu mất cân bằng (tỷ lệ nghỉ việc thấp).

  • Mô hình Logit và Probit có khả năng phát hiện đúng nhân viên không nghỉ việc rất cao (Sensitivity > 98%), tuy nhiên lại gặp khó khăn trong việc phát hiện người nghỉ việc (Specificity chỉ 11–13%).

  • Mô hình CloglogBalanced Accuracy cao nhất, đồng thời duy trì AIC và Brier Score tốt nhất, cho thấy đây là mô hình hiệu quả nhất khi xét đến tổng thể các tiêu chí đánh giá.

Kết luận

  • Việc đánh giá ba mô hình hồi quy nhị phân cho thấy mô hình Cloglog có ưu thế rõ rệt, không chỉ ở độ phù hợp mô hình (AIC thấp), độ chính xác xác suất (Brier thấp), mà còn có hiệu suất phân loại tốt nhất khi xét đến tính cân bằng giữa hai lớp (Balanced Accuracy cao nhất).

  • Trong bối cảnh phân tích hành vi nghỉ việc – vốn là hiện tượng hiếm trong dữ liệu – việc sử dụng mô hình Cloglog là hợp lý và đáng tin cậy, giúp doanh nghiệp phát hiện nhóm nhân sự có nguy cơ nghỉ việc, từ đó đưa ra chiến lược can thiệp sớm phù hợp.

3.3.3.6 Dự báo xác suất nghỉ việc

Nhằm minh họa cách mô hình được ứng dụng trong thực tế, tác giả tiến hành dự báo xác suất nghỉ việc cho một số tổ hợp đặc điểm cụ thể của nhân viên, sử dụng mô hình Cloglog đã được xác định là tối ưu trong quá trình đánh giá mô hình. Cụ thể, ba trường hợp được lựa chọn như sau:

Trường hợp OverTime JobSatisfaction MaritalStatus WorkLifeBalance
A – Nguy cơ cao Yes 1 Single 1
B – Mức trung bình Yes 3 Married 2
C – Nguy cơ thấp No 4 Married 3
# Tạo dataframe chứa 3 tổ hợp giá trị cần dự báo
new_cases <- data.frame(
  OverTime = factor(c("Yes", "Yes", "No"), levels = levels(data1$OverTime)),
  JobSatisfaction = factor(c("1", "3", "4"), levels = levels(data1$JobSatisfaction)),
  MaritalStatus = factor(c("Single", "Married", "Married"), levels = levels(data1$MaritalStatus)),
  WorkLifeBalance = factor(c("1", "2", "3"), levels = levels(data1$WorkLifeBalance))
)

# Dự báo xác suất từ mô hình Cloglog đa biến
predicted_probs <- predict(model_cloglog_multi, newdata = new_cases, type = "response")

# Ghép kết quả vào bảng
cbind(new_cases, Predicted_Prob = round(predicted_probs, 4))
##   OverTime JobSatisfaction MaritalStatus WorkLifeBalance Predicted_Prob
## 1      Yes               1        Single               1         0.9144
## 2      Yes               3       Married               2         0.2839
## 3       No               4       Married               3         0.0387

Giải thích kết quả:

  • Trường hợp A: Nhân viên làm thêm giờ, rất không hài lòng công việc, độc thân và mất cân bằng cuộc sống có xác suất nghỉ việc lên đến 91.44% – là nhóm rủi ro cao nhất, đòi hỏi doanh nghiệp phải có can thiệp sớm để giữ chân.

  • Trường hợp B: Nhân viên làm thêm giờ, hài lòng mức trung bình, đã kết hôn và có cân bằng công việc – cuộc sống ở mức khá có xác suất nghỉ việc là 28.39% – nhóm có rủi ro trung bình.

  • Trường hợp C: Nhân viên không làm thêm giờ, rất hài lòng với công việc, đã kết hôn và có cân bằng cuộc sống tốt chỉ có xác suất nghỉ việc là 3.87% – gần như ổn định và gắn bó cao.

Kết luận:

Phân tích dự báo cho thấy mô hình Cloglog không chỉ hiệu quả về mặt lý thuyết mà còn có khả năng ứng dụng thực tiễn trong việc xác định các nhóm nhân sự có nguy cơ nghỉ việc cao. Việc sử dụng mô hình này giúp tổ chức chủ động phát hiện sớm các trường hợp rủi ro, từ đó xây dựng các chính sách giữ chân phù hợp, nâng cao mức độ hài lòng trong công việc và cải thiện cân bằng giữa công việc và cuộc sống cho nhân viên. Đây là minh chứng cho sự chuyển đổi từ phân tích mô tả và suy luận sang phân tích hành động trong quản trị nhân sự chiến lược.


CHƯƠNG 4: KẾT LUẬN VÀ HÀM Ý CHÍNH SÁCH

4.1 Kết luận

Nghiên cứu này đã sử dụng các mô hình hồi quy nhị phân, bao gồm LPM, Logit, Probit và Cloglog, để phân tích các yếu tố ảnh hưởng đến khả năng nghỉ việc của nhân viên trên cơ sở dữ liệu thực tế. Các biến được đưa vào mô hình bao gồm tình trạng làm thêm giờ (OverTime), mức độ hài lòng công việc (JobSatisfaction), tình trạng hôn nhân (MaritalStatus) và mức độ cân bằng công việc – cuộc sống (WorkLifeBalance). Kết quả từ các mô hình đều chỉ ra rằng nhân viên làm thêm giờ, độc thân, không hài lòng với công việc và có mức cân bằng công việc – cuộc sống kém là những đối tượng có xác suất nghỉ việc cao hơn đáng kể. Trong đó, biến OverTime thể hiện mức độ ảnh hưởng mạnh nhất, cho thấy áp lực từ việc làm thêm có thể là yếu tố thúc đẩy hành vi nghỉ việc. Đồng thời, mức độ hài lòng công việc và sự cân bằng cuộc sống thể hiện rõ vai trò bảo vệ, góp phần giữ chân nhân viên. Đặc biệt, mô hình Cloglog cho thấy hiệu quả vượt trội khi xét đến các chỉ số đánh giá như AIC, Brier Score và Balanced Accuracy, cho thấy khả năng dự báo tốt hơn trong bối cảnh dữ liệu mất cân bằng như hiện tượng nghỉ việc – vốn tương đối hiếm. Qua đó, có thể khẳng định rằng các yếu tố về công việc và đời sống cá nhân đều đóng vai trò quan trọng trong việc hình thành quyết định nghỉ việc của người lao động.

4.2 Hàm ý chính sách

Từ những kết quả nghiên cứu, có thể rút ra một số hàm ý chính sách thiết thực dành cho các doanh nghiệp trong việc quản trị nguồn nhân lực. Trước tiên, cần đặc biệt quan tâm đến việc kiểm soát giờ làm việc, tránh tạo áp lực quá mức dẫn đến sự mệt mỏi và kiệt sức ở nhân viên. Việc xây dựng một môi trường làm việc linh hoạt, hợp lý, giảm thiểu yêu cầu làm thêm giờ không cần thiết sẽ giúp cải thiện tỷ lệ giữ chân nhân sự. Bên cạnh đó, nâng cao sự hài lòng công việc thông qua các chương trình phát triển nghề nghiệp, chính sách khen thưởng minh bạch và văn hóa doanh nghiệp tích cực sẽ góp phần làm giảm nguy cơ nghỉ việc. Ngoài ra, kết quả nghiên cứu cũng gợi mở rằng doanh nghiệp cần quan tâm nhiều hơn đến nhóm nhân viên độc thân – những người có xu hướng dễ rời bỏ công ty hơn – thông qua các hoạt động gắn kết, hỗ trợ cá nhân hóa trải nghiệm làm việc. Cuối cùng, cần triển khai hiệu quả các chính sách hỗ trợ cân bằng giữa công việc và cuộc sống, chẳng hạn như chính sách làm việc linh hoạt, hỗ trợ tinh thần, và khuyến khích nghỉ phép đúng thời hạn. Những biện pháp này không chỉ giúp cải thiện hiệu quả làm việc mà còn góp phần tạo dựng môi trường làm việc bền vững, ổn định về lâu dài.

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

Dù đã cố gắng tiếp cận vấn đề một cách toàn diện, nghiên cứu vẫn tồn tại một số hạn chế nhất định. Thứ nhất, dữ liệu nghiên cứu mang tính cắt ngang nên chưa thể phản ánh được mối quan hệ nhân quả rõ ràng theo thời gian; việc mở rộng sang dữ liệu theo chuỗi thời gian hoặc bảng dữ liệu sẽ nâng cao độ tin cậy của kết luận. Thứ hai, nghiên cứu chỉ sử dụng một tập dữ liệu duy nhất, do đó kết quả chưa thể khái quát rộng rãi cho các ngành nghề hay quy mô doanh nghiệp khác nhau. Thứ ba, mô hình chưa xét đến các yếu tố tương tác giữa các biến độc lập – đây có thể là hướng đi quan trọng để hiểu rõ hơn cơ chế tác động phức tạp đến hành vi nghỉ việc. Cuối cùng, nghiên cứu vẫn còn giới hạn trong các mô hình hồi quy tuyến tính truyền thống, chưa ứng dụng các kỹ thuật học máy hiện đại như Random Forest hay XGBoost để cải thiện khả năng phân loại và phát hiện sớm nguy cơ nghỉ việc. Đây sẽ là những gợi ý hữu ích cho các nghiên cứu tiếp theo nhằm hoàn thiện mô hình dự báo và cung cấp cơ sở dữ liệu vững chắc hơn cho việc hoạch định chính sách nhân sự.

LS0tDQp0aXRsZTogIlRJ4buCVSBMVeG6rE4gUEjDgk4gVMONQ0ggQ8OBQyBZ4bq+VSBU4buQIOG6ok5IIEjGr+G7nk5HIMSQ4bq+TiBUw41OSCBUUuG6oE5HIE5HSOG7iCBWSeG7hkMgQ+G7pkEgTkjDgk4gVknDik4iDQphdXRob3I6ICJUcuG7i25oIFRo4buLIFRodSBIw6A7IEdp4bqjbmcgdmnDqm46IFRoUy4gVHLhuqduIE3huqFuaCBUxrDhu51uZyINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZSAgDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiA1DQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiB0cnVlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQotLS0gDQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KDQpgYGAge2NzcywgZWNobyA9IEZBTFNFfQ0KaDEgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAzMnB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgfQ0KDQpoMiB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDI4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KIA0KfQ0KDQpoMyB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDI0cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCmg0IHtmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyMHB4Ow0KICBmb250LXN0eWxlOiBpdGFsaWM7DQogIH0NCg0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDE4cHg7DQogIA0KfQ0KcDpub3QoaDEpOm5vdChoMik6bm90KGgzKTpub3QoaDQpOm5vdChoNSkgew0KICB0ZXh0LWluZGVudDogMmVtO30NCnAgew0KICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICB9DQoudG9jaWZ5LWhlYWRlciB7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQpgYGANCg0KYGBge3J9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KbGlicmFyeShjc3YpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShlcGl0b29scykNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeShjYXJldCkgIA0KYGBgDQoNCiMgKipM4bucSSBDQU0gxJBPQU4qKg0KDQpUw7RpIHhpbiBjYW0gxJFvYW4gcuG6sW5nIMSR4buBIHTDoGkgdGnhu4N1IGx14bqtbiAqKuKAnFBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6pu4oCdKiogbMOgIGvhur90IHF14bqjIGPhu6dhIHF1w6EgdHLDrG5oIGjhu41jIHThuq1wLCBuZ2hpw6puIGPhu6l1IHbDoCBwaMOibiB0w61jaCBk4buvIGxp4buHdSB0aOG7sWMgdOG6vyBtw6AgdMO0aSDEkcOjIHRo4buxYyBoaeG7h24gZMaw4bubaSBz4buxIGjGsOG7m25nIGThuqtuIGPhu6dhIGdp4bqjbmcgdmnDqm4gVGhTLiBUcuG6p24gTeG6oW5oIFRyxrDhu51uZy4gVG/DoG4gYuG7mSBk4buvIGxp4buHdSwga+G6v3QgcXXhuqMgeOG7rSBsw70gdsOgIGPDoWMgbmjhuq1uIMSR4buLbmggdHJvbmcgYsOgaSDEkeG7gXUgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiBt4buZdCBjw6FjaCB0cnVuZyB0aOG7sWMsIGtow7RuZyBzYW8gY2jDqXAsIGtow7RuZyB0csOtY2ggZOG6q24gc2FpIGzhu4djaC4gVMO0aSBob8OgbiB0b8OgbiBjaOG7i3UgdHLDoWNoIG5oaeG7h20gdHLGsOG7m2MgbmjDoCB0csaw4budbmcgdsOgIGdp4bqjbmcgdmnDqm4gaMaw4bubbmcgZOG6q24gduG7gSB0w61uaCB0cnVuZyB0aOG7sWMgdsOgIG5ndXnDqm4gYuG6o24gY+G7p2EgYsOgaSB0aeG7g3UgbHXhuq1uIG7DoHkuDQoNCi0tLQ0KDQojICoqTOG7nEkgQ+G6ok0gxqBOKioNCg0KVHLGsOG7m2MgdGnDqm4sIHTDtGkgeGluIGfhu61pIGzhu51pIGPhuqNtIMahbiBjaMOibiB0aMOgbmggxJHhur9uIFRo4bqneSBUcuG6p24gTeG6oW5oIFRyxrDhu51uZyDEkcOjIHThuq1uIHTDrG5oIGjGsOG7m25nIGThuqtuLCBo4buXIHRy4bujIHTDtGkgdHJvbmcgc3Xhu5F0IHF1w6EgdHLDrG5oIHRo4buxYyBoaeG7h24gYsOgaSB0aeG7g3UgbHXhuq1uLiBOaOG7r25nIG5o4bqtbiB4w6l0IHbDoCDEkeG7i25oIGjGsOG7m25nIGtob2EgaOG7jWMgdOG7qyBUaOG6p3kgxJHDoyBnacO6cCB0w7RpIHRp4bq/cCBj4bqtbiDEkeG7gSB0w6BpIG3hu5l0IGPDoWNoIGjhu4cgdGjhu5FuZywgbG9naWMgdsOgIGPDsyBjaGnhu4F1IHPDonUuDQoNClTDtGkgY8WpbmcgeGluIGNow6JuIHRow6BuaCBj4bqjbSDGoW4gY8OhYyBUaOG6p3ksIEPDtCB0cm9uZyBLaG9hIEtob2EgaOG7jWMgZOG7ryBsaeG7h3UgY+G7p2EgVHLGsOG7nW5nIMSQ4bqhaSBo4buNYyBUw6BpIGNow61uaCDigJMgTWFya2V0aW5nLCBuaOG7r25nIG5nxrDhu51pIMSRw6MgdHJhbmcgYuG7iyBjaG8gdMO0aSBu4buBbiB04bqjbmcga2nhur9uIHRo4bupYyBj4bqnbiB0aGnhur90IMSR4buDIHRo4buxYyBoaeG7h24gxJHhu4EgdMOgaS4gQ8OhYyBo4buNYyBwaOG6p24gbmjGsCBQaMOibiB0w61jaCBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oLCBLaW5oIHThur8gbMaw4bujbmcsIHbDoCBUaOG7kW5nIGvDqiDhu6luZyBk4bulbmcgxJHDoyDEkcOzbmcgdmFpIHRyw7IgcXVhbiB0cuG7jW5nIHRyb25nIHZp4buHYyB4w6J5IGThu7FuZyBtw7QgaMOsbmggdsOgIGRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqMgdHJvbmcgYsOgaS4gQ3Xhu5FpIGPDuW5nLCB0w7RpIHhpbiBjaMOibiB0aMOgbmggY+G6o20gxqFuIGLhuqFuIGLDqCDEkcOjIGx1w7RuIMSR4buTbmcgaMOgbmgsIGPhu5UgdsWpIHRpbmggdGjhuqduIHbDoCB04bqhbyDEkWnhu4F1IGtp4buHbiB0aHXhuq1uIGzhu6NpIMSR4buDIHTDtGkgaG/DoG4gdGjDoG5oIGLDoGkgdGnhu4N1IGx14bqtbiDEkcO6bmcgdGjhu51pIGjhuqFuLg0KDQotLS0NCg0KIyAqKkNIxq/GoE5HIDE6IEdJ4buaSSBUSEnhu4ZVIMSQ4buAIFTDgEkqKg0KDQojIyAqKjEuMSBMw70gZG8gY2jhu41uIMSR4buBIHTDoGkqKg0KDQpUcm9uZyBi4buRaSBj4bqjbmggY+G6oW5oIHRyYW5oIHRvw6BuIGPhuqd1IHbDoCBz4buxIHBow6F0IHRyaeG7g24gbmhhbmggY2jDs25nIGPhu6dhIHRo4buLIHRyxrDhu51uZyBsYW8gxJHhu5luZywgbmd14buTbiBuaMOibiBs4buxYyDEkcOjIHRy4bufIHRow6BuaCB54bq/dSB04buRIGPhu5F0IGzDtWkgcXV54bq/dCDEkeG7i25oIMSR4bq/biBz4buxIHRow6BuaCBjw7RuZyB2w6AgcGjDoXQgdHJp4buDbiBi4buBbiB24buvbmcgY+G7p2EgbeG7l2kgdOG7lSBjaOG7qWMuIFR1eSBuaGnDqm4sIHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiDEkWFuZyBkaeG7hW4gcmEgbmfDoHkgY8OgbmcgcGjhu5UgYmnhur9uIHbDoCB0cuG7nyB0aMOgbmggbeG7mXQgdGjDoWNoIHRo4bupYyBs4bubbiDEkeG7kWkgduG7m2kgZG9hbmggbmdoaeG7h3AuIE5naOG7iSB2aeG7h2Mga2jDtG5nIGNo4buJIGfDonkgdOG7lW4gdGjhuqV0IHbhu4EgY2hpIHBow60gdHV54buDbiBk4bulbmcsIMSRw6BvIHThuqFvIG3DoCBjw7JuIOG6o25oIGjGsOG7n25nIMSR4bq/biB0aW5oIHRo4bqnbiBsw6BtIHZp4buHYywgaGnhu4d1IHN14bqldCBjaHVuZyB2w6Agc+G7sSDhu5VuIMSR4buLbmggbuG7mWkgYuG7mS4NCg0KVmnhu4djIHTDrG0gaGnhu4N1IGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djIGzDoCBj4bqnbiB0aGnhur90IMSR4buDIGdpw7pwIGRvYW5oIG5naGnhu4dwIHjDonkgZOG7sW5nIGPDoWMgY2jDrW5oIHPDoWNoIGdp4buvIGNow6JuIG5ow6JuIHTDoGksIGPhuqNpIHRoaeG7h24gbcO0aSB0csaw4budbmcgbMOgbSB2aeG7h2MgdsOgIG7Dom5nIGNhbyBoaeG7h3UgcXXhuqMgcXXhuqNuIHRy4buLIG5ow6JuIHPhu7EuIFRyb25nIMSRw7MsIGzDoG0gdGjDqm0gZ2nhu50gKE92ZXJUaW1lKSwgbeG7qWMgxJHhu5kgaMOgaSBsw7JuZyBjw7RuZyB2aeG7h2MsIGPDom4gYuG6sW5nIGPDtG5nIHZp4buHYyDigJMgY3Xhu5ljIHPhu5FuZywgdsOgIMSR4bq3YyDEkWnhu4NtIGPDoSBuaMOibiBsw6Agbmjhu69uZyB54bq/dSB04buRIMSRxrDhu6NjIHF1YW4gdMOibSDEkeG6t2MgYmnhu4d0Lg0KDQpYdeG6pXQgcGjDoXQgdOG7qyB04bqnbSBxdWFuIHRy4buNbmcgbsOqdSB0csOqbiwgdMOhYyBnaeG6oyBs4buxYSBjaOG7jW4gxJHhu4EgdMOgaSAqKuKAnFBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6pu4oCdKiogduG7m2kgbW9uZyBtdeG7kW4g4bupbmcgZOG7pW5nIGPDoWMga+G7uSB0aHXhuq10IHBow6JuIHTDrWNoIMSR4buLbmggbMaw4bujbmcgbmjhurFtIMSRbyBsxrDhu51uZyB2w6AgxJHDoW5oIGdpw6Eg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgxJHhur9uIGto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmfGsOG7nWkgbGFvIMSR4buZbmcsIHThu6sgxJHDsyDEkeG7gSB4deG6pXQgY8OhYyBnaeG6o2kgcGjDoXAgdGhp4bq/dCB0aOG7sWMgY2hvIGRvYW5oIG5naGnhu4dwLg0KDQojIyAqKjEuMiBN4bulYyB0acOqdSB2w6AgY8OidSBo4buPaSBuZ2hpw6puIGPhu6l1KioNCg0KKipN4bulYyB0acOqdSBuZ2hpw6puIGPhu6l1KioNCg0KTeG7pWMgdGnDqnUgY+G7p2EgbmdoacOqbiBj4bupdSBuw6B5IGzDoCBwaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgeeG6v3UgdOG7kSBjw6EgbmjDom4gdsOgIG3DtGkgdHLGsOG7nW5nIGzDoG0gdmnhu4djIMSR4bq/biB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puLCBuaOG6sW0gbMOgbSByw7UgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgxJHhu5FpIHbhu5tpIGjDoG5oIHZpIHLhu51pIGLhu48gdOG7lSBjaOG7qWMuIFRyw6puIGPGoSBz4bufIMSRw7MsIG5naGnDqm4gY+G7qXUgdGnhur9uIGjDoG5oIHjDonkgZOG7sW5nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBiYW8gZ+G7k20gTGluZWFyIFByb2JhYmlsaXR5IE1vZGVsIChMUE0pLCBMb2dpdCwgUHJvYml0IHbDoCBDbG9nbG9nIMSR4buDIGzGsOG7o25nIGjDs2EgdMOhYyDEkeG7mW5nIGPhu6dhIHThu6tuZyBiaeG6v24gxJHhu5ljIGzhuq1wLiBTYXUgY8O5bmcsIGPDoWMgbcO0IGjDrG5oIMSRxrDhu6NjIHNvIHPDoW5oIHbhu4EgaGnhu4d1IHF14bqjIGThu7EgYsOhbyB0aMO0bmcgcXVhIGPDoWMgdGnDqnUgY2jDrSDEkcOhbmggZ2nDoSB0aOG7kW5nIGvDqiwgdOG7qyDEkcOzIGzhu7FhIGNo4buNbiBtw7QgaMOsbmggcGjDuSBo4bujcCBuaOG6pXQgcGjhu6VjIHbhu6UgY2hvIHZp4buHYyBk4buxIGLDoW8geHUgaMaw4bubbmcgbmdo4buJIHZp4buHYyB2w6AgxJHhu4EgeHXhuqV0IGNow61uaCBzw6FjaCBxdeG6o24gdHLhu4sgbmjDom4gc+G7sSBoaeG7h3UgcXXhuqMgaMahbi4NCg0KKipDw6J1IGjhu49pIG5naGnDqm4gY+G7qXUqKg0KDQotIE5o4buvbmcgeeG6v3UgdOG7kSBuw6BvIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puPw0KDQotIE3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIGzDoG0gdGjDqm0gZ2nhu50gKE92ZXJUaW1lKSDEkeG6v24ga2jhuqMgbsSDbmcgbmdo4buJIHZp4buHYyBuaMawIHRo4bq/IG7DoG8/DQoNCi0gTcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBuw6BvIGzDoCBwaMO5IGjhu6NwIG5o4bqldCDEkeG7gyBwaMOibiB0w61jaCBow6BuaCB2aSBuZ2jhu4kgdmnhu4djPw0KDQojIyAqKjEuMyDEkOG7kWkgdMaw4bujbmcgdsOgIHBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1KioNCg0KLSAqKsSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1OioqIEjDoG5oIHZpIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4sIMSRxrDhu6NjIHBo4bqjbiDDoW5oIHF1YSBiaeG6v24gcGjhu6UgdGh14buZYyBuaOG7iyBwaMOibiAoQXR0cml0aW9uKS4NCg0KLSAqKlBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1OioqIEThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUgc+G7rSBk4bulbmcgdOG6rXAgZOG7ryBsaeG7h3UgSFIgQW5hbHl0aWNzIGPhu6dhIElCTSwgdHJvbmcgxJHDsyBiYW8gZ+G7k20gdGjDtG5nIHRpbiB24buBIGjGoW4gMS40MDAgbmjDom4gdmnDqm4gY8O5bmcgY8OhYyDEkeG6t2MgxJFp4buDbSBjw6EgbmjDom4sIGPDtG5nIHZp4buHYywgbcO0aSB0csaw4budbmcgbMOgbSB2aeG7h2MgdsOgIHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYy4NCg0KIyMgKioxLjQgUGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdSoqDQoNClRyb25nIHF1w6EgdHLDrG5oIHRo4buxYyBoaeG7h24sIHRp4buDdSBsdeG6rW4gw6FwIGThu6VuZyBr4bq/dCBo4bujcCBuaGnhu4F1IHBoxrDGoW5nIHBow6FwIMSR4buLbmggbMaw4bujbmcgbmjhurFtIMSR4bqjbSBi4bqjbyB0w61uaCBraMOhY2ggcXVhbiB2w6AgY2jDrW5oIHjDoWMgdHJvbmcgcGjDom4gdMOtY2guIFRyxrDhu5tjIGjhur90LCBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiBtw7QgdOG6oyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyB0csOsbmggYsOgeSB04buVbmcgcXVhbiDEkeG6t2MgxJFp4buDbSBwaMOibiBwaOG7kWkgY+G7p2EgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCB2w6AgxJHhu4tuaCBsxrDhu6NuZyB0cm9uZyB04bqtcCBk4buvIGxp4buHdS4gVGnhur9wIHRoZW8sIGPDoWMgcGjGsMahbmcgcGjDoXAga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgbmjGsCBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlZCwgxrDhu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSwgaOG7hyBz4buRIE9kZHMgUmF0aW8gdsOgIFJlbGF0aXZlIFJpc2sgxJHGsOG7o2MgdHJp4buDbiBraGFpIMSR4buDIMSRw6FuaCBnacOhIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgYmnhur9uIHBo4bulIHRodeG7mWMgdsOgIGPDoWMgeeG6v3UgdOG7kSBsacOqbiBxdWFuLiBUcsOqbiBjxqEgc+G7nyDEkcOzLCBuZ2hpw6puIGPhu6l1IHRp4bq/biBow6BuaCDGsOG7m2MgbMaw4bujbmcgdsOgIHNvIHPDoW5oIGLhu5FuIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4sIGJhbyBn4buTbSBMaW5lYXIgUHJvYmFiaWxpdHkgTW9kZWwgKExQTSksIExvZ2l0LCBQcm9iaXQgdsOgIENsb2dsb2csIG5o4bqxbSB4w6FjIMSR4buLbmggbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0IMSR4buDIGThu7EgYsOhbyBraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puLiBDdeG7kWkgY8O5bmcsIGPDoWMgbcO0IGjDrG5oIMSRxrDhu6NjIMSRw6FuaCBnacOhIHbDoCBs4buxYSBjaOG7jW4gdGjDtG5nIHF1YSBjw6FjIHRpw6p1IGNow60gdGjhu5FuZyBrw6ogbmjGsCBBSUMsIEJyaWVyIFNjb3JlIHbDoCBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuLCB04burIMSRw7MgeMOhYyDEkeG7i25oIG3DtCBow6xuaCB04buRaSDGsHUgcGjhu6VjIHbhu6UgY2hvIHBow6JuIHTDrWNoIGThu7EgYsOhbyB2w6AgxJHhu4EgeHXhuqV0IGNow61uaCBzw6FjaCBxdeG6o24gdHLhu4sgbmjDom4gc+G7sS4NCg0KIyMgKioxLjUgS+G6v3QgY+G6pXUgY+G7p2EgxJHhu4EgdMOgaSoqDQoNCk5nb8OgaSBwaOG6p24gKipM4budaSBjYW0gxJFvYW4qKiB2w6AgKipM4budaSBj4bqjbSDGoW4qKiwgbuG7mWkgZHVuZyB0aeG7g3UgbHXhuq1uIMSRxrDhu6NjIGNoaWEgdGjDoG5oIDQgY2jGsMahbmcgY2jDrW5oOg0KDQotICoqQ2jGsMahbmcgMTogR2nhu5tpIHRoaeG7h3UgxJHhu4EgdMOgaSoqOiBUcsOsbmggYsOgeSBsw70gZG8gY2jhu41uIMSR4buBIHTDoGksIG3hu6VjIHRpw6p1IG5naGnDqm4gY+G7qXUsIHBo4bqhbSB2aSwgcGjGsMahbmcgcGjDoXAgdsOgIGvhur90IGPhuqV1IGLDoGkgbMOgbS4NCg0KLSAqKkNoxrDGoW5nIDI6IEPGoSBz4bufIGzDvSB0aHV54bq/dCB2w6AgdOG7lW5nIHF1YW4gbmdoacOqbiBj4bupdSoqIDogR2nhu5tpIHRoaeG7h3UgY8ahIHPhu58gbMO9IHRodXnhur90IHbhu4EgaMOgbmggdmkgbmdo4buJIHZp4buHYywgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiB2w6AgdOG7lW5nIHF1YW4gY8OhYyBuZ2hpw6puIGPhu6l1IGxpw6puIHF1YW4uDQoNCi0gKipDaMawxqFuZyAzOiBQaMOibiB0w61jaCBk4buvIGxp4buHdSB2w6Aga+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSoqOiAgQmFvIGfhu5NtIG3DtCB04bqjIGThu68gbGnhu4d1LCBr4bq/dCBxdeG6oyB0aOG7kW5nIGvDqiwga2nhu4NtIMSR4buLbmggdsOgIGjhu5NpIHF1eTsgZGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyB2w6AgcsO6dCByYSBr4bq/dCBsdeG6rW4gdGjhu7FjIHRp4buFbi4NCg0KLSAqKkNoxrDGoW5nIDQ6IEvhur90IGx14bqtbioqIGJhbyBn4buTbSBr4bq/dCBsdeG6rW4sIGjDoG0gw70gY2jDrW5oIHPDoWNoLCBo4bqhbiBjaOG6vyB2w6AgaMaw4bubbmcgbmdoacOqbiBj4bupdSB0aeG6v3AgdGhlby4NCg0KLS0tDQoNCiMgKipDSMavxqBORyAyOiBDxqAgU+G7niBMw50gVEhVWeG6vlQgVsOAIEThu64gTEnhu4ZVIE5HSEnDik4gQ+G7qFUqKg0KDQojIyAyLjEgQ8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuDQoNCiMjIyAyLjEuMSBLaMOhaSBxdcOhdCB24buBIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4NCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBsw6AgbeG7mXQga+G7uSB0aHXhuq10IHBow6JuIHTDrWNoIMSR4buLbmggbMaw4bujbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcga2hpIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBiaeG6v24gbmjhu4sgcGjDom4sIHThu6ljIGNo4buJIG5o4bqtbiBoYWkgZ2nDoSB0cuG7iyAwIHbDoCAxLiBN4bulYyB0acOqdSBj4bunYSBtw7QgaMOsbmggbMOgIMaw4bubYyBsxrDhu6NuZyB4w6FjIHN14bqldCB44bqjeSByYSBj4bunYSBt4buZdCBz4buxIGtp4buHbiAoZ2nDoSB0cuG7iyAxKSBk4buxYSB0csOqbiBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgZ2nhuqNpIHRow61jaC4gVHJvbmcgbmdoacOqbiBj4bupdSBuw6B5LCBiaeG6v24gcGjhu6UgdGh14buZYyBsw6AgdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djICgqQXR0cml0aW9uKiksIHbhu5tpIGdpw6EgdHLhu4sgMSBiaeG7g3UgdGjhu4sgbmjDom4gdmnDqm4gbmdo4buJIHZp4buHYyB2w6AgZ2nDoSB0cuG7iyAwIGzDoCBraMO0bmcgbmdo4buJIHZp4buHYy4NCg0KU28gduG7m2kgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdHJ1eeG7gW4gdGjhu5FuZywgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiB5w6p1IGPhuqd1IGPDoWMgcGjGsMahbmcgcGjDoXAgdsOgIGjDoG0gbGnDqm4ga+G6v3QgxJHhurdjIHRow7kgbmjhurFtIMSR4bqjbSBi4bqjbyBy4bqxbmcgZ2nDoSB0cuG7iyDGsOG7m2MgbMaw4bujbmcgbHXDtG4gbuG6sW0gdHJvbmcga2hv4bqjbmcgWzAsIDFdIOKAkyB24buRbiBsw6AgZ2nhu5tpIGjhuqFuIHThu7Egbmhpw6puIGPhu6dhIHjDoWMgc3XhuqV0LiBDw6FjIG3DtCBow6xuaCBwaOG7lSBiaeG6v24gxJHGsOG7o2Mgc+G7rSBk4bulbmcgZ+G7k206IG3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMUE0pLCBtw7QgaMOsbmggTG9naXQsIG3DtCBow6xuaCBQcm9iaXQgdsOgIG3DtCBow6xuaCBDbG9nbG9nLg0KDQojIyMgMi4xLjIgTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKExpbmVhciBQcm9iYWJpbGl0eSBNb2RlbCDigJMgTFBNKQ0KDQpNw7QgaMOsbmggTFBNIGPDsyBk4bqhbmc6DQoNClxbDQpQKFkgPSAxIFxtaWQgWCkgPSBcYmV0YV8wICsgXGJldGFfMSBYDQpcXQ0KDQpUcm9uZyDEkcOzLCBcKFlcKSBsw6AgYmnhur9uIHBo4bulIHRodeG7mWMgbmjhu4sgcGjDom4sIFwoWFwpIGzDoCBiaeG6v24gxJHhu5ljIGzhuq1wLiBN4bq3YyBkw7kgxJHGoW4gZ2nhuqNuIHbDoCBk4buFIMaw4bubYyBsxrDhu6NuZyBi4bqxbmcgcGjGsMahbmcgcGjDoXAgYsOsbmggcGjGsMahbmcgdOG7kWkgdGhp4buDdSAoT0xTKSwgbcO0IGjDrG5oIExQTSBn4bq3cCBwaOG6o2kgaGFpIGjhuqFuIGNo4bq/IGNow61uaDogKGkpIGThu7EgxJFvw6FuIHjDoWMgc3XhuqV0IGPDsyB0aOG7gyBu4bqxbSBuZ2/DoGkga2hv4bqjbmcgWzAsMV07IHbDoCAoaWkpIHNhaSBz4buRIGPDsyBwaMawxqFuZyBzYWkga2jDtG5nIMSR4buTbmcgbmjhuqV0ICgqaGV0ZXJvc2tlZGFzdGljaXR5KikuIERvIMSRw7MsIExQTSB0aMaw4budbmcgY2jhu4kgxJHGsOG7o2MgZMO5bmcgbmjGsCBt4buZdCBixrDhu5tjIGto4bufaSDEkeG6p3UgaG/hurdjIHNvIHPDoW5oIHRoYW0ga2jhuqNvLg0KDQojIyMgMi4xLjMgTcO0IGjDrG5oIExvZ2l0DQoNCk3DtCBow6xuaCBMb2dpdCBraOG6r2MgcGjhu6VjIGPDoWMgbmjGsOG7o2MgxJFp4buDbSBj4bunYSBMUE0gYuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgbG9naXN0aWM6DQoNClxbDQpcbG9nXGxlZnQoXGZyYWN7UChZPTEpfXsxIC0gUChZPTEpfVxyaWdodCkgPSBcYmV0YV8wICsgXGJldGFfMSBYDQpcXQ0KDQpIw6BtIGxvZ2l0IGJp4buDdSBkaeG7hW4gKmxvZy1vZGRzKiAobG9nYXJpdCBj4bunYSB04bu3IHPhu5Egb2RkcykuIMav4bubYyBsxrDhu6NuZyB04burIG3DtCBow6xuaCBMb2dpdCBjw7MgdGjhu4MgxJHGsOG7o2MgY2h1eeG7g24gdGjDoG5oICpPZGRzIFJhdGlvKiDEkeG7gyBk4buFIGRp4buFbiBnaeG6o2kuIE3DtCBow6xuaCDEkeG6o20gYuG6o28geMOhYyBzdeG6pXQgbHXDtG4gbuG6sW0gdHJvbmcgWzAsMV0gdsOgIHBow7kgaOG7o3AgduG7m2kgYuG6o24gY2jhuqV0IG5o4buLIHBow6JuIGPhu6dhIGJp4bq/biBwaOG7pSB0aHXhu5ljLg0KDQojIyMgMi4xLjQgTcO0IGjDrG5oIFByb2JpdA0KDQpNw7QgaMOsbmggUHJvYml0IHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgbMOgIGjDoG0gcGjDom4gcGjhu5FpIHTDrWNoIGzFqXkgY2h14bqpbiAoQ0RGKToNCg0KXFsNClAoWSA9IDEgXG1pZCBYKSA9IFxQaGkoXGJldGFfMCArIFxiZXRhXzEgWCkNClxdDQoNClRyb25nIMSRw7MsIFwoXFBoaShcY2RvdClcKSBsw6AgaMOgbSBDREYgY+G7p2EgcGjDom4gcGjhu5FpIGNodeG6qW4gY2h14bqpbiBow7NhLiBQcm9iaXQgdGjGsOG7nW5nIGNobyBr4bq/dCBxdeG6oyB0xrDGoW5nIHThu7EgTG9naXQgbmjGsG5nIMSRxrDhu6NjIMawYSBjaHXhu5luZyBoxqFuIHRyb25nIGPDoWMgbmdoacOqbiBj4bupdSBow6BuaCB2aSBraGkgcGjDom4gcGjhu5FpIGThu68gbGnhu4d1IGPDsyBk4bqhbmcgY2h14bqpbi4gTeG6t2MgZMO5IGjhu4cgc+G7kSBraMO0bmcgdHLhu7FjIHRp4bq/cCBkaeG7hW4gZ2nhuqNpIHRow6BuaCAqT2RkcyBSYXRpbyosIFByb2JpdCBjdW5nIGPhuqVwIHRow7RuZyB0aW4gc8OidSBz4bqvYyB24buBIGJp4bq/biDEkeG7mW5nIHjDoWMgc3XhuqV0IHRoZW8gY2h14bqpbiBow7NhIHRo4buRbmcga8OqLg0KDQojIyMgMi4xLjUgTcO0IGjDrG5oIENsb2dsb2cgKENvbXBsZW1lbnRhcnkgTG9nLUxvZykNCg0KTcO0IGjDrG5oIENsb2dsb2cgc+G7rSBk4bulbmcgaMOgbSBsacOqbiBr4bq/dDoNCg0KXFsNClxsb2coLVxsb2coMSAtIFAoWSA9IDEpKSkgPSBcYmV0YV8wICsgXGJldGFfMSBYDQpcXQ0KDQpDbG9nbG9nIMSR4bq3YyBiaeG7h3QgcGjDuSBo4bujcCBraGkgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24gcuG6pXQgbmjhu48gaG/hurdjIHBow6JuIHBo4buRaSBk4buvIGxp4buHdSBi4bqldCDEkeG7kWkgeOG7qW5nLiBNw7QgaMOsbmggbsOgeSBjw7MgxJHhu5kgZOG7kWMgbOG7m24g4bufIG3hu5l0IMSR4bqndSBj4bunYSBwaMOibiBwaOG7kWksIGNobyBwaMOpcCBtw7QgdOG6oyB04buRdCBoxqFuIGPDoWMgdMOsbmggaHXhu5FuZyBjw7MgaGnhu4duIHTGsOG7o25nIGhp4bq/bSBob+G6t2MgcuG7p2kgcm8gY2FvIGLhuqV0IHRoxrDhu51uZy4NCg0KIyMjIDIuMS42IFBoxrDGoW5nIHBow6FwIMav4bubYyBsxrDhu6NuZyBI4bujcCBsw70gVOG7kWkgxJFhIChNYXhpbXVtIExpa2VsaWhvb2QgRXN0aW1hdGlvbiDigJMgTUxFKQ0KDQpQaMawxqFuZyBwaMOhcCDGr+G7m2MgbMaw4bujbmcgSOG7o3AgbMO9IFThu5FpIMSRYSAoTWF4aW11bSBMaWtlbGlob29kIEVzdGltYXRpb24g4oCTIE1MRSkgbMOgIG3hu5l0IGvhu7kgdGh14bqtdCB0aOG7kW5nIGvDqiBwaOG7lSBiaeG6v24gZMO5bmcgxJHhu4MgxrDhu5tjIGzGsOG7o25nIGPDoWMgdGhhbSBz4buRIHRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gbmjGsCBMb2dpdCwgUHJvYml0IHbDoCBDbG9nbG9nLiDDnSB0xrDhu59uZyBj4buRdCBsw7VpIGPhu6dhIE1MRSBsw6AgdMOsbSBi4buZIGdpw6EgdHLhu4sgY+G7p2EgY8OhYyB0aGFtIHPhu5EgbMOgbSB04buRaSDEkWEgaMOzYSBraOG6oyBuxINuZyB44bqjeSByYSBj4bunYSBk4buvIGxp4buHdSBxdWFuIHPDoXQgxJHGsOG7o2MsIGTGsOG7m2kgZ2nhuqMgxJHhu4tuaCBy4bqxbmcgZOG7ryBsaeG7h3UgdHXDom4gdGhlbyBt4buZdCBwaMOibiBwaOG7kWkgeMOhYyDEkeG7i25oLg0KDQoqKk5ndXnDqm4gbMO9IGPhu6dhIE1MRSoqDQoNCkdp4bqjIHPhu60gdGEgY8OzIG3hu5l0IHThuq1wIGThu68gbGnhu4d1IGfhu5NtIFwoblwpIHF1YW4gc8OhdCwgduG7m2kgYmnhur9uIHBo4bulIHRodeG7mWMgbmjhu4sgcGjDom4gXChZX2kgXGluIFx7MCwxXH1cKSB2w6AgdmVjdG9yIGJp4bq/biDEkeG7mWMgbOG6rXAgXChYX2lcKS4gTeG7pWMgdGnDqnUgY+G7p2EgTUxFIGzDoCB0w6xtIHRoYW0gc+G7kSBcKFxiZXRhXCkgc2FvIGNobyB4w6FjIHN14bqldCDEkeG7k25nIHRo4budaSB44bqjeSByYSBj4bunYSB0b8OgbiBi4buZIGThu68gbGnhu4d1IMSRxrDhu6NjIHF1YW4gc8OhdCBsw6AgbOG7m24gbmjhuqV0Lg0KDQpIw6BtIGjhu6NwIGzDvSAobGlrZWxpaG9vZCBmdW5jdGlvbikgxJHGsOG7o2MgeMOhYyDEkeG7i25oIG5oxrAgc2F1Og0KDQpcWw0KTChcYmV0YSkgPSBccHJvZF97aT0xfV57bn0gUChZX2kgPSAxIFxtaWQgWF9pKV57WV9pfSBcY2RvdCBbMSAtIFAoWV9pID0gMSBcbWlkIFhfaSldXnsxIC0gWV9pfQ0KXF0NCg0KSMOgbSBsb2ctbGlrZWxpaG9vZCAobG9nYXJpdCBj4bunYSBow6BtIGjhu6NwIGzDvSksIHRoxrDhu51uZyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyB0w61uaCB0b8OhbiB2w6AgdOG7kWkgxrB1IGjDs2E6DQoNClxbDQpcZWxsKFxiZXRhKSA9IFxzdW1fe2k9MX1ee259IFxsZWZ0WyBZX2kgXGNkb3QgXGxvZyhQX2kpICsgKDEgLSBZX2kpIFxjZG90IFxsb2coMSAtIFBfaSkgXHJpZ2h0XQ0KXF0NCg0KVHJvbmcgxJHDsyBcKFBfaSA9IFAoWV9pID0gMSBcbWlkIFhfaTsgXGJldGEpXCkgcGjhu6UgdGh14buZYyB2w6BvIG3DtCBow6xuaCBs4buxYSBjaOG7jW4gKExvZ2l0LCBQcm9iaXQgaG/hurdjIENsb2dsb2cpLg0KDQoqKsavdSDEkWnhu4NtIHbDoCDhu6luZyBk4bulbmcqKg0KDQotIE1MRSBjaG8gcGjDqXAgxrDhu5tjIGzGsOG7o25nIGPDoWMgbcO0IGjDrG5oIHBoaSB0dXnhur9uIG5oxrAgTG9naXQsIFByb2JpdCB2w6AgQ2xvZ2xvZyBt4buZdCBjw6FjaCBoaeG7h3UgcXXhuqMgdsOgIHRo4buRbmcgbmjhuqV0Lg0KDQotIE1MRSBjdW5nIGPhuqVwICoqxrDhu5tjIGzGsOG7o25nIGtow7RuZyBjaOG7h2NoIHbDoCBuaOG6pXQgcXXDoW4qKiBraGkgY+G7oSBt4bqrdSDEkeG7pyBs4bubbiAodGhlbyBsdeG6rXQgc+G7kSBs4bubbiB2w6AgxJHhu4tuaCBsw70gZ2nhu5tpIGjhuqFuIHRydW5nIHTDom0pLg0KDQotIEPDoWMga+G6v3QgcXXhuqMgdOG7qyBNTEUgY8OybiBjaG8gcGjDqXAga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgdGjDtG5nIHF1YSB0aOG7kW5nIGvDqiBXYWxkLCBraeG7g20gxJHhu4tuaCBsb2ctbGlrZWxpaG9vZCByYXRpbyB2w6Aga2nhu4NtIMSR4buLbmggTGFncmFuZ2UgTXVsdGlwbGllci4NCg0KLSBNTEUgY8WpbmcgZ2nDunAgZOG7hSBkw6BuZyBzdXkgcmEgKirEkeG7mSBs4buHY2ggY2h14bqpbiwga2hv4bqjbmcgdGluIGPhuq15IHbDoCBraeG7g20gxJHhu4tuaCDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiBjaG8gY8OhYyBo4buHIHPhu5EgbcO0IGjDrG5oLg0KDQojIyAqKjIuMiAgUmVsYXRpdmUgUmlzayB2w6AgT2RkcyBSYXRpbyoqDQoNClRyb25nIHBow6JuIHTDrWNoIGThu68gbGnhu4d1IHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuLCDEkeG6t2MgYmnhu4d0IGzDoCB0cm9uZyBjw6FjIG5naGnDqm4gY+G7qXUgduG7gSBow6BuaCB2aSBob+G6t2MgeSB04bq/IOKAkyB4w6MgaOG7mWksICoqUmVsYXRpdmUgUmlzayAoUlIpKiogdsOgICoqT2RkcyBSYXRpbyAoT1IpKiogbMOgIGhhaSBjaOG7iSBz4buRIGPGoSBi4bqjbiB2w6AgcXVhbiB0cuG7jW5nIG5o4bqxbSDEkcOhbmggZ2nDoSBt4buRaSBsacOqbiBo4buHIGdp4buvYSBt4buZdCBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCB4w6FjIHN14bqldCB44bqjeSByYSBj4bunYSBt4buZdCBz4buxIGtp4buHbi4gQ+G6oyBoYWkgY2jhu4kgc+G7kSDEkeG7gXUgY3VuZyBj4bqlcCBjw6FpIG5ow6xuIHRy4buxYyBxdWFuIHbDoCDEkeG7i25oIGzGsOG7o25nIHbhu4EgKipt4bupYyDEkeG7mSBy4bunaSBybyBob+G6t2Mga2jhuqMgbsSDbmcgeOG6o3kgcmEgc+G7sSBraeG7h24qKiBraGkgY8OzIGhv4bq3YyBraMO0bmcgY8OzIHnhur91IHThu5EgdMOhYyDEkeG7mW5nLg0KDQojIyMgKioyLjIuMSBSZWxhdGl2ZSBSaXNrKioNCg0KKipSZWxhdGl2ZSBSaXNrIChSUikqKiBsw6AgdOG7tyBs4buHIGdp4buvYSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiDhu58gbmjDs20gY8OzIHnhur91IHThu5EgcGjGoWkgbmhp4buFbSB24bubaSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiDhu58gbmjDs20ga2jDtG5nIGPDsyB54bq/dSB04buRIHBoxqFpIG5oaeG7hW0uIMSQw6J5IGzDoCBjaOG7iSBz4buRIHRy4buxYyB0aeG6v3AgcGjhuqNuIMOhbmggcuG7p2kgcm8gdMawxqFuZyDEkeG7kWkuDQoNClxbDQpSUiA9IFxmcmFje1AoWSA9IDEgXG1pZCBYID0gMSl9e1AoWSA9IDEgXG1pZCBYID0gMCl9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoUChZID0gMSBcbWlkIFggPSAxKVwpOiBYw6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiAodsOtIGThu6U6IG5naOG7iSB2aeG7h2MpIHRyb25nIG5ow7NtICoqY8OzKiogeeG6v3UgdOG7kSAodsOtIGThu6U6IGzDoG0gdGjDqm0gZ2nhu50pLg0KDQotIFwoUChZID0gMSBcbWlkIFggPSAwKVwpOiBYw6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiB0cm9uZyBuaMOzbSAqKmtow7RuZyoqIGPDsyB54bq/dSB04buRLg0KDQoqKkRp4buFbiBnaeG6o2k6KioNCg0KLSAqKlJSID0gMSoqOiBLaMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IHbhu4EgcuG7p2kgcm8gZ2nhu69hIGhhaSBuaMOzbS4NCg0KLSAqKlJSID4gMSoqOiBOaMOzbSBjw7MgeeG6v3UgdOG7kSBwaMahaSBuaGnhu4VtIGPDsyBy4bunaSBybyAqKmNhbyBoxqFuKiogbmjDs20ga2jDtG5nIGPDsyB54bq/dSB04buRLg0KDQotICoqUlIgPCAxKio6IE5ow7NtIGPDsyB54bq/dSB04buRIHBoxqFpIG5oaeG7hW0gY8OzIHLhu6dpIHJvICoqdGjhuqVwIGjGoW4qKiBuaMOzbSBraMO0bmcgY8OzIHnhur91IHThu5EuDQoNCiMjIyAqKjIuMi4yIE9kZHMgUmF0aW8qKg0KDQoqKk9kZHMgUmF0aW8gKE9SKSoqIGzDoCB04bu3IGzhu4cgZ2nhu69hICoqdOG7tyBz4buRIG9kZHMqKiBj4bunYSBoYWkgbmjDs20g4oCTIMSRbyBsxrDhu51uZyBt4bupYyDEkeG7mSB44bqjeSByYSBz4buxIGtp4buHbiB0xrDGoW5nIMSR4buRaSB0aGVvIGThuqFuZyB04bu3IHPhu5EgeMOhYyBzdeG6pXQgc28gduG7m2kgcGjhuqduIGPDsm4gbOG6oWkuDQoNClxbDQpPUiA9IFxmcmFje1xkZnJhY3tQKFkgPSAxIFxtaWQgWCA9IDEpfXsxIC0gUChZID0gMSBcbWlkIFggPSAxKX19e1xkZnJhY3tQKFkgPSAxIFxtaWQgWCA9IDApfXsxIC0gUChZID0gMSBcbWlkIFggPSAwKX19DQpcXQ0KDQpcWw0KPSBcZnJhY3tcdGV4dHtPZGRzIOG7nyBuaMOzbSBjw7MgeeG6v3UgdOG7kX19e1x0ZXh0e09kZHMg4bufIG5ow7NtIGtow7RuZyBjw7MgeeG6v3UgdOG7kX19DQpcXQ0KDQpUcm9uZyBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgTG9naXQsIGjhu4cgc+G7kSBcKFxiZXRhXCkgY+G7p2EgYmnhur9uIMSR4buZYyBs4bqtcCBjaMOtbmggbMOgICoqbG9nKE9kZHMgUmF0aW8pKiouIERvIMSRw7MsIE9kZHMgUmF0aW8gY8OzIHRo4buDIMSRxrDhu6NjIHTDrW5oIHRy4buxYyB0aeG6v3AgdOG7qyBr4bq/dCBxdeG6oyBo4buTaSBxdXk6DQoNClxbDQpPUiA9IFxleHAoXGJldGEpDQpcXQ0KDQoqKkRp4buFbiBnaeG6o2k6KioNCg0KLSAqKk9SID0gMSoqOiBLaMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IHbhu4Egb2RkcyBnaeG7r2EgaGFpIG5ow7NtLg0KDQotICoqT1IgPiAxKio6IE9kZHMgeOG6o3kgcmEgc+G7sSBraeG7h24gKipjYW8gaMahbioqIOG7nyBuaMOzbSBjw7MgeeG6v3UgdOG7kS4NCg0KLSAqKk9SIDwgMSoqOiBPZGRzIHjhuqN5IHJhIHPhu7Ega2nhu4duICoqdGjhuqVwIGjGoW4qKiDhu58gbmjDs20gY8OzIHnhur91IHThu5EuDQoNCiMjICoqMi4zIEThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUqKg0KDQpgYGB7cn0NCmRhdGEgPC0gcmVhZC5jc3YoIkQ6L0Rvd25sb2Fkcy9XQV9Gbi1Vc2VDXy1IUi1FbXBsb3llZS1BdHRyaXRpb24uY3N2IikNCnN0cihkYXRhKQ0Kc3VtbWFyeShkYXRhKQ0KYGBgDQoNCkLhu5kgZOG7ryBsaeG7h3UgduG7gSBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puIChFbXBsb3llZSBBdHRyaXRpb24pIMSRxrDhu6NjIHjDonkgZOG7sW5nIGLhu59pIGPDoWMgbmjDoCBraG9hIGjhu41jIGThu68gbGnhu4d1IGPhu6dhIElCTSBiYW8gZ+G7k20gMTQ3MCBxdWFuIHPDoXQgduG7m2kgMzUgYmnhur9uIG5o4bqxbSBtw7QgcGjhu49uZyBtw7RpIHRyxrDhu51uZyBsw6BtIHZp4buHYyB0aOG7sWMgdOG6vyB0cm9uZyBkb2FuaCBuZ2hp4buHcC4gIA0KTeG7pWMgdGnDqnUgY+G7p2EgYuG7mSBk4buvIGxp4buHdSBsw6AgaOG7lyB0cuG7oyBwaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyBuaMOibiB2acOqbiBuZ2jhu4kgdmnhu4djLCB04burIMSRw7MgZ2nDunAgZG9hbmggbmdoaeG7h3AgeMOieSBk4buxbmcgY2jDrW5oIHPDoWNoIG5ow6JuIHPhu7EgcGjDuSBo4bujcC4NCg0KROG7ryBsaeG7h3UgZ+G7k20gbmhp4buBdSBiaeG6v24gdGjhu4MgaGnhu4duICoqdGjDtG5nIHRpbiBjw6EgbmjDom4qKiwgKirEkeG6t2MgxJFp4buDbSBjw7RuZyB2aeG7h2MqKiwgKipt4bupYyDEkeG7mSBow6BpIGzDsm5nKiogdsOgICoqaGnhu4d1IHN14bqldCBsw6BtIHZp4buHYyoqIGPhu6dhIG5ow6JuIHZpw6puLg0KDQpEYW5oIHPDoWNoIGPDoWMgYmnhur9uIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UNCg0KfCAqKlTDqm4gYmnhur9uKiogICAgICAgICAgICAgICAgfCAqKk3DtCB04bqjKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgYEFnZWAgICAgICAgICAgICAgICAgICAgICAgIHwgVHXhu5VpIGPhu6dhIG5ow6JuIHZpw6puICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgQXR0cml0aW9uYCAgICAgICAgICAgICAgICAgfCBUw6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MgKFllcy9ObykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBCdXNpbmVzc1RyYXZlbGAgICAgICAgICAgICB8IFThuqduIHN14bqldCDEkWkgY8O0bmcgdMOhYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBEYWlseVJhdGVgICAgICAgICAgICAgICAgICB8IE3hu6ljIGzGsMahbmcgaMOgbmcgbmfDoHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYERlcGFydG1lbnRgICAgICAgICAgICAgICAgIHwgUGjDsm5nIGJhbiBsw6BtIHZp4buHYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYERpc3RhbmNlRnJvbUhvbWVgICAgICAgICAgfCBLaG/huqNuZyBjw6FjaCB04burIG5ow6AgxJHhur9uIG7GoWkgbMOgbSB2aeG7h2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBFZHVjYXRpb25gICAgICAgICAgICAgICAgICB8IFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiAoMTogRMaw4bubaSDEkeG6oWkgaOG7jWMgxJHhur9uIDU6IFRp4bq/biBzxKkpICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYEVkdWNhdGlvbkZpZWxkYCAgICAgICAgICAgfCBMxKluaCB24buxYyBo4buNYyB04bqtcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgRW1wbG95ZWVDb3VudGAgICAgICAgICAgICAgfCBT4buRIGzGsOG7o25nIG5ow6JuIHZpw6puIChnacOhIHRy4buLIGtow7RuZyDEkeG7lWkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgRW1wbG95ZWVOdW1iZXJgICAgICAgICAgICAgfCBNw6MgxJHhu4tuaCBkYW5oIG5ow6JuIHZpw6puICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBFbnZpcm9ubWVudFNhdGlzZmFjdGlvbmAgICB8IE3hu6ljIMSR4buZIGjDoGkgbMOybmcgduG7m2kgbcO0aSB0csaw4budbmcgbMOgbSB2aeG7h2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYEdlbmRlcmAgICAgICAgICAgICAgICAgICAgIHwgR2nhu5tpIHTDrW5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgSG91cmx5UmF0ZWAgICAgICAgICAgICAgICAgfCBN4bupYyBsxrDGoW5nIHRoZW8gZ2nhu50gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBKb2JJbnZvbHZlbWVudGAgICAgICAgICAgICB8IE3hu6ljIMSR4buZIHRoYW0gZ2lhIGPDtG5nIHZp4buHYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgSm9iTGV2ZWxgICAgICAgICAgICAgICAgICAgfCBD4bqlcCBi4bqtYyBjw7RuZyB2aeG7h2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgSm9iUm9sZWAgICAgICAgICAgICAgICAgICAgfCBW4buLIHRyw60gY8O0bmcgdmnhu4djICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBKb2JTYXRpc2ZhY3Rpb25gICAgICAgICAgICB8IE3hu6ljIMSR4buZIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgTWFyaXRhbFN0YXR1c2AgICAgICAgICAgICAgfCBUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYE1vbnRobHlJbmNvbWVgICAgICAgICAgICAgIHwgVGh1IG5o4bqtcCBow6BuZyB0aMOhbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYE1vbnRobHlSYXRlYCAgICAgICAgICAgICAgIHwgTeG7qWMgbMawxqFuZyBj4buRIMSR4buLbmggaMOgbmcgdGjDoW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBOdW1Db21wYW5pZXNXb3JrZWRgICAgICAgICB8IFPhu5EgY8O0bmcgdHkgxJHDoyB04burbmcgbMOgbSB2aeG7h2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBPdmVyMThgICAgICAgICAgICAgICAgICAgICB8IFRyw6puIDE4IHR14buVaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYE92ZXJUaW1lYCAgICAgICAgICAgICAgICAgIHwgTMOgbSB0aMOqbSBnaeG7nSAoWWVzL05vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYFBlcmNlbnRTYWxhcnlIaWtlYCAgICAgICAgIHwgVOG7tyBs4buHIHTEg25nIGzGsMahbmcgZ+G6p24gbmjhuqV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBQZXJmb3JtYW5jZVJhdGluZ2AgICAgICAgICB8IMSQw6FuaCBnacOhIGhp4buHdSBzdeG6pXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBSZWxhdGlvbnNoaXBTYXRpc2ZhY3Rpb25gICB8IE3hu6ljIMSR4buZIGjDoGkgbMOybmcgduG7m2kgbeG7kWkgcXVhbiBo4buHIHRyb25nIGPDtG5nIHR5ICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBTdGFuZGFyZEhvdXJzYCAgICAgICAgICAgICB8IEdp4budIGzDoG0gdGnDqnUgY2h14bqpbiAoa2jDtG5nIHRoYXkgxJHhu5VpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBTdG9ja09wdGlvbkxldmVsYCAgICAgICAgICB8IE3hu6ljIHF1eeG7gW4gY2jhu41uIGPhu5UgcGhp4bq/dSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBUb3RhbFdvcmtpbmdZZWFyc2AgICAgICAgICB8IFThu5VuZyBz4buRIG7Eg20gbMOgbSB2aeG7h2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgVHJhaW5pbmdUaW1lc0xhc3RZZWFyYCAgICAgfCBT4buRIGzhuqduIMSRxrDhu6NjIMSRw6BvIHThuqFvIHRyb25nIG7Eg20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgV29ya0xpZmVCYWxhbmNlYCAgICAgICAgICAgfCBDw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBZZWFyc0F0Q29tcGFueWAgICAgICAgICAgICB8IFPhu5EgbsSDbSBsw6BtIHZp4buHYyB04bqhaSBjw7RuZyB0eSBoaeG7h24gdOG6oWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgYFllYXJzSW5DdXJyZW50Um9sZWAgICAgICAgIHwgU+G7kSBuxINtIOG7nyB24buLIHRyw60gaGnhu4duIHThuqFpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBgWWVhcnNTaW5jZUxhc3RQcm9tb3Rpb25gICAgfCBT4buRIG7Eg20ga+G7gyB04burIGzhuqduIHRoxINuZyBjaOG7qWMgZ+G6p24gbmjhuqV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBZZWFyc1dpdGhDdXJyTWFuYWdlcmAgICAgICB8IFPhu5EgbsSDbSBsw6BtIHZp4buHYyB24bubaSBxdeG6o24gbMO9IGhp4buHbiB04bqhaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KKipDw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIGJhbyBn4buTbSoqDQoNCi0gYEF0dHJpdGlvbmAgIA0KDQotIGBCdXNpbmVzc1RyYXZlbGANCg0KLSBgRGVwYXJ0bWVudGAgIA0KDQotIGBFZHVjYXRpb25gICANCg0KLSBgRWR1Y2F0aW9uRmllbGRgICANCg0KLSBgRW52aXJvbm1lbnRTYXRpc2ZhY3Rpb25gICANCg0KLSBgR2VuZGVyYCAgDQoNCi0gYEpvYkludm9sdmVtZW50YA0KDQotIGBKb2JMZXZlbGANCg0KLSBgSm9iUm9sZWAgIA0KDQotIGBKb2JTYXRpc2ZhY3Rpb25gICANCg0KLSBgTWFyaXRhbFN0YXR1c2AgIA0KDQotIGBPdmVyVGltZWAgIA0KDQotIGBPdmVyMThgDQoNCi0gYFBlcmZvcm1hbmNlUmF0aW5nYCANCg0KLSBgUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uYCANCg0KLSBgU3RvY2tPcHRpb25MZXZlbGANCg0KLSBgV29ya0xpZmVCYWxhbmNlYCAgDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4buZIGThu68gbGnhu4d1IGNo4buJIGNo4bupYSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oDQpkYXRhMSA8LSBkYXRhICU+JQ0KICBzZWxlY3QoDQogICAgQXR0cml0aW9uLA0KICAgIEJ1c2luZXNzVHJhdmVsLA0KICAgIERlcGFydG1lbnQsDQogICAgRWR1Y2F0aW9uLA0KICAgIEVkdWNhdGlvbkZpZWxkLA0KICAgIEVudmlyb25tZW50U2F0aXNmYWN0aW9uLA0KICAgIEdlbmRlciwNCiAgICBKb2JJbnZvbHZlbWVudCwNCiAgICBKb2JMZXZlbCwNCiAgICBKb2JSb2xlLA0KICAgIEpvYlNhdGlzZmFjdGlvbiwNCiAgICBNYXJpdGFsU3RhdHVzLA0KICAgIE92ZXJUaW1lLA0KICAgIE92ZXIxOCwNCiAgICBQZXJmb3JtYW5jZVJhdGluZywNCiAgICBSZWxhdGlvbnNoaXBTYXRpc2ZhY3Rpb24sDQogICAgU3RvY2tPcHRpb25MZXZlbCwNCiAgICBXb3JrTGlmZUJhbGFuY2UNCiAgKQ0KIyBYZW0gdHLGsOG7m2MgZOG7ryBsaeG7h3UgbeG7m2kNCnN0cihkYXRhMSkNCmhlYWQoZGF0YTEpDQpgYGANCg0KIyMgKioyLjQgUXV5IHRyw6xuaCBuZ2hpw6puIGPhu6l1KioNCg0KUXV5IHRyw6xuaCBuZ2hpw6puIGPhu6l1IMSRxrDhu6NjIHTDoWMgZ2nhuqMgeMOieSBk4buxbmcgdGhlbyBjw6FjIGLGsOG7m2MgbG9naWMgdsOgIHR14bqnbiB04buxIG5o4bqxbSDEkeG6o20gYuG6o28gdMOtbmggaOG7hyB0aOG7kW5nLCDEkeG7mSB0aW4gY+G6rXkgdsOgIGPGoSBz4bufIGtob2EgaOG7jWMgdHJvbmcgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UuIEPhu6UgdGjhu4MgYmFvIGfhu5NtIGPDoWMgYsaw4bubYyBzYXU6DQoNCioqQsaw4bubYyAxOiBYw6FjIMSR4buLbmggduG6pW4gxJHhu4EgdsOgIGPDonUgaOG7j2kgbmdoacOqbiBj4bupdSoqDQoNClTDoWMgZ2nhuqMgbmjhuq1uIGRp4buHbiB0w6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4gbMOgIG3hu5l0IHbhuqVuIMSR4buBIHF1YW4gdHLhu41uZyB0cm9uZyBxdeG6o24gdHLhu4sgbmd14buTbiBuaMOibiBs4buxYy4gQ8OidSBo4buPaSBuZ2hpw6puIGPhu6l1IMSR4bq3dCByYSBsw6A6ICrigJxDw6FjIHnhur91IHThu5EgY8OhIG5ow6JuIHbDoCBtw7RpIHRyxrDhu51uZyBsw6BtIHZp4buHYyBuw6BvIOG6o25oIGjGsOG7n25nIMSR4bq/biB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puP+KAnSoNCg0KKipCxrDhu5tjIDI6IFRodSB0aOG6rXAgdsOgIHjhu60gbMO9IGThu68gbGnhu4d1KioNCg0KU+G7rSBk4bulbmcgYuG7mSBk4buvIGxp4buHdSAqKklCTSBIUiBBbmFseXRpY3MgRW1wbG95ZWUgQXR0cml0aW9uKiosIGJhbyBn4buTbSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIChPdmVyVGltZSwgTWFyaXRhbFN0YXR1cywgSm9iU2F0aXNmYWN0aW9uLCBXb3JrTGlmZUJhbGFuY2Us4oCmKSB2w6AgYmnhur9uIMSR4buLbmggbMaw4bujbmcsIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCAqKkF0dHJpdGlvbioqIOKAkyB0aOG7gyBoaeG7h24gdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djIChZZXMvTm8pLg0KDQotIFRp4bq/biBow6BuaCAqKm3DoyBow7NhIG5o4buLIHBow6JuKiogYmnhur9uIHBo4bulIHRodeG7mWMgKEF0dHJpdGlvbl9iaW4gPSAxIG7hur91IG5naOG7iSB2aeG7h2MsID0gMCBu4bq/dSBraMO0bmcpLg0KDQotIENodeG6qW4gaMOzYSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHRow6BuaCBk4bqhbmcgYmnhur9uIG5ow6JuIHThu5EgKGZhY3RvciksIMSR4bqjbSBi4bqjbyBwaMO5IGjhu6NwIGNobyBo4buTaSBxdXkuDQoNCioqQsaw4bubYyAzOiBUaOG7kW5nIGvDqiBtw7QgdOG6oyB2w6AgcGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBiYW4gxJHhuqd1KioNCg0KLSBUcsOsbmggYsOgeSAqKnThuqduIHPhu5Eg4oCTIHThu7cgbOG7hyDigJMgYmnhu4N1IMSR4buTIGPhu5l0KiogY+G7p2EgY8OhYyBiaeG6v24gY2jDrW5oLg0KDQotIMOBcCBk4bulbmcga2nhu4NtIMSR4buLbmggKipDaGktc3F1YXJlZCoqLCDGsOG7m2MgbMaw4bujbmcgKipraG/huqNuZyB0aW4gY+G6rXkqKiwgdMOtbmggKipSZWxhdGl2ZSBSaXNrKiogdsOgICoqT2RkcyBSYXRpbyoqIGNobyB04burbmcgY+G6t3AgYmnhur9uIHbhu5tpIEF0dHJpdGlvbi4NCg0KKipCxrDhu5tjIDQ6IFjDonkgZOG7sW5nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibioqDQoNCsSQ4buRaSB24bubaSB04burbmcgY+G6t3AgYmnhur9uIMSR4buZYyBs4bqtcCB24bubaSBBdHRyaXRpb24sIHRp4bq/biBow6BuaCB4w6J5IGThu7FuZyA0IG3DtCBow6xuaDoNCg0KLSAqKkxpbmVhciBQcm9iYWJpbGl0eSBNb2RlbCAoTFBNKSoqDQoNCi0gKipMb2dpdCoqDQoNCi0gKipQcm9iaXQqKg0KDQotICoqQ2xvZ2xvZyoqDQoNCioqQsaw4bubYyA1OiDEkMOhbmggZ2nDoSB2w6Agc28gc8OhbmggY8OhYyBtw7QgaMOsbmgqKg0KDQrEkMOhbmggZ2nDoSDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIGPDoWMgbcO0IGjDrG5oIHRoZW8gMyB0acOqdSBjaMOtOg0KDQotICoqQWthaWtlIEluZm9ybWF0aW9uIENyaXRlcmlvbiAoQUlDKSoqDQoNCi0gKipCcmllciBTY29yZSoqDQoNCi0gKipNYSB0cuG6rW4gbmjhuqdtIGzhuqtuKio6IEFjY3VyYWN5LCBTZW5zaXRpdml0eSwgU3BlY2lmaWNpdHksIEYxLXNjb3JlLCBCYWxhbmNlZCBBY2N1cmFjeQ0KDQpU4burIMSRw7MgeMOhYyDEkeG7i25oICoqbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0KiogY2hvIHThu6tuZyBj4bq3cCBiaeG6v24pLg0KDQoqKkLGsOG7m2MgNjogROG7sSBiw6FvIOG7qW5nIGThu6VuZyB04burIG3DtCBow6xuaCB04buRaSDGsHUqKg0KDQpT4butIGThu6VuZyBtw7QgaMOsbmggxJHGsOG7o2MgbOG7sWEgY2jhu41uICh2w60gZOG7pTogQ2xvZ2xvZykgxJHhu4MgKipk4buxIGLDoW8geMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyoqIGNobyBiYSB0csaw4budbmcgaOG7o3AgbmjDom4gdmnDqm4gduG7m2kgdOG7lSBo4bujcCDEkeG6t2MgxJFp4buDbSBraMOhYyBuaGF1IChy4bunaSBybyBjYW8g4oCTIHRydW5nIGLDrG5oIOKAkyB0aOG6pXApLCB0aOG7gyBoaeG7h24g4bupbmcgZOG7pW5nIHRo4buxYyB0aeG7hW4gY+G7p2EgbcO0IGjDrG5oIHbDoG8gcXXhuqNuIHRy4buLIG5ow6JuIHPhu7EuDQoNCi0tLQ0KDQojICoqQ0jGr8agTkcgMzogS+G6vlQgUVXhuqIgTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMy4xIFRo4buRbmcga8OqIG3DtCB04bqjIGJp4bq/biBuZ2hpw6puIGPhu6l1KioNCg0KIyMjICoqMy4xLjEgVGjhu5FuZyBrw6ogbcO0IHThuqMgYmnhur9uIHBo4bulIHRodeG7mWMqKg0KDQpCaeG6v24gcGjhu6UgdGh14buZYyB0cm9uZyBuZ2hpw6puIGPhu6l1IGzDoCAqKkF0dHJpdGlvbioqIOKAkyDEkeG6oWkgZGnhu4duIGNobyB0w6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4sIGfhu5NtIGhhaSBnacOhIHRy4buLOiBgIlllcyJgIChjw7Mgbmdo4buJIHZp4buHYykgdsOgIGAiTm8iYCAoa2jDtG5nIG5naOG7iSB2aeG7h2MpLiBUcm9uZyBwaOG6p24gbsOgeSwgdMOhYyBnaeG6oyB0aeG6v24gaMOgbmggdGjhu5FuZyBrw6ogdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCB0cuG7sWMgcXVhbiBow7NhIGLhurFuZyBiaeG7g3UgxJHhu5MgbmjhurFtIG3DtCB04bqjIHPGoSBi4buZIMSR4bq3YyDEkWnhu4NtIHBow6JuIHBo4buRaSBj4bunYSBiaeG6v24gbsOgeS4NCg0KIyMjIyMgKiphLiBM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQp0YWJsZShkYXRhMSRBdHRyaXRpb24pDQpwcm9wLnRhYmxlKHRhYmxlKGRhdGExJEF0dHJpdGlvbikpDQpgYGANCg0KIyMjIyMgKipiLiBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCoqDQoNCmBgYHtyfQ0KYXR0cml0aW9uX2RmIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YTEkQXR0cml0aW9uKSkNCmNvbG5hbWVzKGF0dHJpdGlvbl9kZikgPC0gYygiQXR0cml0aW9uIiwgIkNvdW50IikNCg0KZ2dwbG90KGF0dHJpdGlvbl9kZiwgYWVzKHggPSBBdHRyaXRpb24sIHkgPSBDb3VudCwgZmlsbCA9IEF0dHJpdGlvbikpICsNCiAgZ2VvbV9jb2woKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksIHZqdXN0ID0gLTAuNSwgc2l6ZSA9IDQpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJCaeG7g3UgxJHhu5MgY+G7mXQ6IFTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiIsDQogICAgeCA9ICJUw6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MiLA0KICAgIHkgPSAiU+G7kSBsxrDhu6NuZyINCiAgKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoInN0ZWVsYmx1ZSIsICJ0b21hdG8iKSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KIyMjIyMgKipjLiBW4bq9IGJp4buDdSDEkeG7kyB0csOybioqDQoNCmBgYHtyfQ0KYXR0cml0aW9uX2RmJFBlcmNlbnQgPC0gcm91bmQoYXR0cml0aW9uX2RmJENvdW50IC8gc3VtKGF0dHJpdGlvbl9kZiRDb3VudCkgKiAxMDAsIDEpDQpnZ3Bsb3QoYXR0cml0aW9uX2RmLCBhZXMoeCA9ICIiLCB5ID0gQ291bnQsIGZpbGwgPSBBdHRyaXRpb24pKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEpICsNCiAgY29vcmRfcG9sYXIoInkiLCBzdGFydCA9IDApICsNCiAgICAgIGxhYnModGl0bGUgPSAiQmnhu4N1IMSR4buTIHRyw7JuOiBU4bu3IGzhu4cgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiIpICsNCiAgdGhlbWVfdm9pZCgpDQpgYGANCg0KIyMjIyMgKipkLiBOaOG6rW4geMOpdDoqKg0KDQotIFRyb25nIHThu5VuZyBz4buRIDEuNDcwIG5ow6JuIHZpw6puLCBjw7MgKioyMzcgbmfGsOG7nWkgbmdo4buJIHZp4buHYyoqLCBjaGnhur9tIGtob+G6o25nICoqMTYuMTIlKiosIHRyb25nIGtoaSBjw7MgKioxLjIzMyBuZ8aw4budaSBraMO0bmcgbmdo4buJIHZp4buHYyoqLCBjaGnhur9tIHThu7cgbOG7hyAqKjgzLjg4JSoqLg0KDQotIEJp4buDdSDEkeG7kyBj4buZdCB2w6AgYmnhu4N1IMSR4buTIHRyw7JuIMSR4buBdSBjaG8gdGjhuqV5IHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyBsw6AgaGnhu4duIHTGsOG7o25nIHRoaeG7g3Ugc+G7kS4NCg0KLSBWaeG7h2MgdOG7tyBs4buHIG5naOG7iSB2aeG7h2Mga2jDtG5nIGNhbyBuaMawbmcgduG6q24gxJHDoW5nIGvhu4MgY2hvIHRo4bqleSDEkcOieSBsw6AgbeG7mXQgduG6pW4gxJHhu4EgY+G6p24gxJHGsOG7o2MgZG9hbmggbmdoaeG7h3AgcXVhbiB0w6JtLCDEkeG6t2MgYmnhu4d0IGzDoCB0cm9uZyBi4buRaSBj4bqjbmggY+G6oW5oIHRyYW5oIG5ndeG7k24gbmjDom4gbOG7sWMgY2jhuqV0IGzGsOG7o25nIGNhby4NCg0KLSBL4bq/dCBxdeG6oyBtw7QgdOG6oyBuw6B5IGzDoCBjxqEgc+G7nyBxdWFuIHRy4buNbmcgxJHhu4MgdGnhur9wIHThu6VjIHBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24geHUgaMaw4bubbmcgbmdo4buJIHZp4buHYyBuaOG6sSBo4bqhbiBjaOG6vyB04bu3IGzhu4cgbmdo4buJIHZp4buHYyB2w6AgbsOibmcgY2FvIHPhu7EgZ+G6r24gYsOzIGPhu6dhIG5ow6JuIHZpw6puIHbhu5tpIHThu5UgY2jhu6ljLg0KDQojIyMgKiozLjEuMiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gxJHhu5ljIGzhuq1wKioNCg0KIyMjIyAqKjMuMS4yLjEgQmnhur9uIE92ZXJUaW1lKioNCg0KQmnhur9uIGBPdmVyVGltZWAgdGjhu4MgaGnhu4duIHZp4buHYyBuaMOibiB2acOqbiBjw7MgdGjGsOG7nW5nIHh1ecOqbiBsw6BtIHRow6ptIGdp4budIGhheSBraMO0bmcsIHbhu5tpIGhhaSBnacOhIHRy4buLIGAiWWVzImAgKGPDsyBsw6BtIHRow6ptKSB2w6AgYCJObyJgIChraMO0bmcgbMOgbSB0aMOqbSkuIMSQw6J5IGzDoCBt4buZdCBiaeG6v24gxJHhu4tuaCB0w61uaCBuaOG7iyBwaMOibiwgY8OzIHRo4buDIHBo4bqjbiDDoW5oIG3hu6ljIMSR4buZIMOhcCBs4buxYyBjw7RuZyB2aeG7h2MgdsOgIMSRxrDhu6NjIGdp4bqjIMSR4buLbmggbMOgIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puLg0KDQojIyMjIyAqKmEuIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCnRhYmxlKGRhdGExJE92ZXJUaW1lKQ0KcHJvcC50YWJsZSh0YWJsZShkYXRhMSRPdmVyVGltZSkpDQpgYGANCg0KIyMjIyMgKipiLiBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCoqDQoNCmBgYHtyfQ0Kb3ZlcnRpbWVfZGYgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShkYXRhMSRPdmVyVGltZSkpDQpjb2xuYW1lcyhvdmVydGltZV9kZikgPC0gYygiT3ZlclRpbWUiLCAiQ291bnQiKQ0KDQpnZ3Bsb3Qob3ZlcnRpbWVfZGYsIGFlcyh4ID0gT3ZlclRpbWUsIHkgPSBDb3VudCwgZmlsbCA9IE92ZXJUaW1lKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IENvdW50KSwgdmp1c3QgPSAtMC41LCBzaXplID0gNCkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkJp4buDdSDEkeG7kyBj4buZdDogVMOsbmggdHLhuqFuZyBsw6BtIHRow6ptIGdp4budIGPhu6dhIG5ow6JuIHZpw6puIiwNCiAgICB4ID0gIkzDoG0gdGjDqm0gZ2nhu50iLA0KICAgIHkgPSAiU+G7kSBsxrDhu6NuZyINCiAgKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoInBpbmsiLCAibGlnaHRibHVlIikpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KYGBgDQoNCiMjIyMjICoqYy4gVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4qKg0KDQpgYGB7cn0NCm92ZXJ0aW1lX2RmJFBlcmNlbnQgPC0gcm91bmQob3ZlcnRpbWVfZGYkQ291bnQgLyBzdW0ob3ZlcnRpbWVfZGYkQ291bnQpICogMTAwLCAxKQ0KZ2dwbG90KG92ZXJ0aW1lX2RmLCBhZXMoeCA9ICIiLCB5ID0gQ291bnQsIGZpbGwgPSBPdmVyVGltZSkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSkgKw0KICBjb29yZF9wb2xhcigieSIsIHN0YXJ0ID0gMCkgKw0KICAgIGxhYnModGl0bGUgPSAiQmnhu4N1IMSR4buTIHRyw7JuOiBU4bu3IGzhu4cgbMOgbSB0aMOqbSBnaeG7nSBj4bunYSBuaMOibiB2acOqbiIpICsNCiAgdGhlbWVfdm9pZCgpIA0KYGBgDQoNCiMjIyMjICoqZC4gTmjhuq1uIHjDqXQ6KioNCg0KLSBDw7MgKio0MTYgbmjDom4gdmnDqm4gKGNoaeG6v20gMjguMyUpKiogbMOgbSB0aMOqbSBnaeG7nSwgdHJvbmcga2hpICoqMS4wNTQgbmjDom4gdmnDqm4gKGNoaeG6v20gNzEuNyUpKioga2jDtG5nIGzDoG0gdGjDqm0uDQoNCi0gVOG7tyBs4buHIGzDoG0gdGjDqm0gZ2nhu50gdMawxqFuZyDEkeG7kWkgY2FvLCBjaG8gdGjhuqV5IG3hu5l0IGLhu5kgcGjhuq1uIMSRw6FuZyBr4buDIG5ow6JuIHZpw6puIMSRYW5nIMSR4buRaSBt4bq3dCB24bubaSDDoXAgbOG7sWMgY8O0bmcgdmnhu4djIGhv4bq3YyBraOG7kWkgbMaw4bujbmcgY8O0bmcgdmnhu4djIHbGsOG7o3QgcXXDoSB0aOG7nWkgZ2lhbiB0acOqdSBjaHXhuqluLg0KDQotIFZp4buHYyBuaGnhu4F1IG5ow6JuIHZpw6puIHBo4bqjaSBsw6BtIHRow6ptIGPDsyB0aOG7gyBsacOqbiBxdWFuIMSR4bq/biBjw6FjIHnhur91IHThu5EgbmjGsCB2YWkgdHLDsiBjw7RuZyB2aeG7h2MsIGPhuqVwIGLhuq1jLCBob+G6t2MgdMOsbmggdHLhuqFuZyBuaMOibiBz4buxIHRoaeG6v3UgaOG7pXQuDQoNCi0gxJDDonkgbMOgIG3hu5l0IGNo4buJIHPhu5EgY+G6o25oIGLDoW8gduG7gSBraOG6oyBuxINuZyBt4bqldCBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nLCB2w6AgY8OzIHRo4buDIGzDoCBuZ3V5w6puIG5ow6JuIHRp4buBbSDhuqluIGThuqtuIMSR4bq/biBuZ2jhu4kgdmnhu4djIG7hur91IGtow7RuZyDEkcaw4bujYyBraeG7g20gc2/DoXQga+G7i3AgdGjhu51pLg0KDQojIyMjICoqMy4xLjIuMiBCaeG6v24gSm9iU2F0aXNmYWN0aW9uKioNCg0KQmnhur9uIGBKb2JTYXRpc2ZhY3Rpb25gIHRo4buDIGhp4buHbiAqKm3hu6ljIMSR4buZIGjDoGkgbMOybmcgY+G7p2EgbmjDom4gdmnDqm4gxJHhu5FpIHbhu5tpIGPDtG5nIHZp4buHYyBoaeG7h24gdOG6oWkqKiwgxJHGsOG7o2MgxJFvIGzGsOG7nW5nIHRoZW8gdGhhbmcgxJFp4buDbSB04burICoqMSDEkeG6v24gNCoqLCB0cm9uZyDEkcOzOg0KDQotIDEgPSBS4bqldCBraMO0bmcgaMOgaSBsw7JuZyAgDQoNCi0gMiA9IEtow7RuZyBow6BpIGzDsm5nICANCg0KLSAzID0gSMOgaSBsw7JuZyAgDQoNCi0gNCA9IFLhuqV0IGjDoGkgbMOybmcNCg0KxJDDonkgbMOgIGJp4bq/biDEkeG7i25oIHTDrW5oIHRo4bupIGLhuq1jIChvcmRpbmFsKSwgcGjhuqNuIMOhbmggY+G6o20gbmjhuq1uIGNo4bunIHF1YW4gdsOgIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIG5naOG7iSB2aeG7h2MuDQoNCiMjIyMjICoqYS4gTOG6rXAgYuG6o25nIHThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCoqDQoNCmBgYHtyfQ0KanNfdGFibGUgPC0gdGFibGUoZGF0YTEkSm9iU2F0aXNmYWN0aW9uKQ0KanNfcHJvcCA8LSBwcm9wLnRhYmxlKGpzX3RhYmxlKQ0KanNfdGFibGUNCmpzX3Byb3ANCmBgYA0KDQojIyMjIyAqKmIuIEJp4buDdSDEkeG7kyBj4buZdCoqDQoNCmBgYHtyfQ0KZGZfanMgPC0gYXMuZGF0YS5mcmFtZShqc190YWJsZSkNCmNvbG5hbWVzKGRmX2pzKSA8LSBjKCJKb2JTYXRpc2ZhY3Rpb24iLCAiQ291bnQiKQ0KDQpnZ3Bsb3QoZGZfanMsIGFlcyh4ID0gZmFjdG9yKEpvYlNhdGlzZmFjdGlvbiksIHkgPSBDb3VudCwgZmlsbCA9IGZhY3RvcihKb2JTYXRpc2ZhY3Rpb24pKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLCB2anVzdCA9IC0wLjUpICsNCiAgbGFicyh0aXRsZSA9ICJCaeG7g3UgxJHhu5MgY+G7mXQ6IE3hu6ljIMSR4buZIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djIiwgeCA9ICJN4bupYyDEkeG7mSBow6BpIGzDsm5nIiwgeSA9ICJU4bqnbiBz4buRIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KIyMjIyMgKipjLiBCaeG7g3UgxJHhu5MgdHLDsm4qKg0KDQpgYGB7cn0NCmRmX2pzJFBlcmNlbnQgPC0gcm91bmQoZGZfanMkQ291bnQgLyBzdW0oZGZfanMkQ291bnQpICogMTAwLCAxKQ0KDQpnZ3Bsb3QoZGZfanMsIGFlcyh4ID0gIiIsIHkgPSBDb3VudCwgZmlsbCA9IGZhY3RvcihKb2JTYXRpc2ZhY3Rpb24pKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKFBlcmNlbnQsICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIkJp4buDdSDEkeG7kyB0csOybjogVOG7tyBs4buHIG3hu6ljIMSR4buZIGjDoGkgbMOybmcgY8O0bmcgdmnhu4djIikgKw0KICB0aGVtZV92b2lkKCkNCmBgYA0KDQojIyMjIyAqKmQuIE5o4bqtbiB4w6l0OioqIA0KDQotIE3hu6ljIMSR4buZIGjDoGkgbMOybmcgY2FvIG5o4bqldCAoKipt4bupYyA0KiopIGPDsyBz4buRIGzGsOG7o25nIG5ow6JuIHZpw6puIG5oaeG7gXUgbmjhuqV0LCB24bubaSAqKjQ1OSBuZ8aw4budaSoqLCBjaGnhur9tIGtob+G6o25nICoqMzEuMjIlKiogdOG7lW5nIHPhu5EgbmjDom4gdmnDqm4uIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHBo4bqnbiBs4bubbiBuaMOibiB2acOqbiDEkcOhbmggZ2nDoSBjw7RuZyB2aeG7h2MgY+G7p2EgbcOsbmgg4bufIG3hu6ljIHLhuqV0IGjDoGkgbMOybmcuDQoNCi0gTeG7qWMgxJHhu5kgaMOgaSBsw7JuZyB0aeG6v3AgdGhlbyBsw6AgKipt4bupYyAzKiosIHbhu5tpICoqNDQyIG5nxrDhu51pKiosIHTGsMahbmcgxJHGsMahbmcga2hv4bqjbmcgKiozMC4wNyUqKi4gSGFpIG3hu6ljIGjDoGkgbMOybmcgY2FvICht4bupYyAzIHbDoCA0KSBj4buZbmcgbOG6oWkgY2hp4bq/bSBoxqFuICoqNjElKiosIHBo4bqjbiDDoW5oIGLhu6ljIHRyYW5oIHTDrWNoIGPhu7FjIHbhu4Egc+G7sSBow6BpIGzDsm5nIHRyb25nIGPDtG5nIHZp4buHYy4NCg0KLSBN4bupYyDEkeG7mSBow6BpIGzDsm5nIHRydW5nIGLDrG5oICgqKm3hu6ljIDIqKikgY8OzICoqMjgwIG5nxrDhu51pICgxOS4wNSUpKiosIHbDoCBt4bupYyDEkeG7mSBow6BpIGzDsm5nIHRo4bqlcCBuaOG6pXQgKCoqbeG7qWMgMSoqKSBjw7MgKioyODkgbmfGsOG7nWkgKDE5LjY2JSkqKi4gTeG6t2MgZMO5IHThu7cgbOG7hyBraMO0bmcgcXXDoSBjYW8sIG5oxrBuZyB24bqrbiBj4bqnbiBjaMO6IMO9IHbDrCBn4bqnbiAqKjQwJSoqIG5ow6JuIHZpw6puIGNo4buJIMSRw6FuaCBnacOhIGPDtG5nIHZp4buHYyDhu58gbeG7qWMgdHJ1bmcgYsOsbmggaG/hurdjIHRo4bqlcC4NCg0KLSBCaeG6v24gYEpvYlNhdGlzZmFjdGlvbmAgc+G6vSDEkcaw4bujYyAqKnBow6JuIHTDrWNoIHPDonUgaMahbiB0cm9uZyBjw6FjIHBo4bqnbiBo4buTaSBxdXkgdGnhur9wIHRoZW8qKiDEkeG7gyDEkcOhbmggZ2nDoSAqKm3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djKiogY+G7p2EgbmjDom4gdmnDqm4uDQoNCiMjIyMgKiozLjEuMi4zIE1hcml0YWxTdGF0dXMqKg0KDQpCaeG6v24gYE1hcml0YWxTdGF0dXNgIHRo4buDIGhp4buHbiAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBj4bunYSBuaMOibiB2acOqbioqLCBsw6AgYmnhur9uIMSR4buLbmggdMOtbmggZGFuaCBt4bulYyAobm9taW5hbCkgZ+G7k20gMyBuaMOzbToNCg0KLSBgU2luZ2xlYDogxJDhu5ljIHRow6JuICANCg0KLSBgTWFycmllZGA6IMSQw6Mga+G6v3QgaMO0biAgDQoNCi0gYERpdm9yY2VkYDogxJDDoyBseSBow7RuICANCg0KVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gc+G7sSDhu5VuIMSR4buLbmggY8O0bmcgdmnhu4djLCBt4bupYyDEkeG7mSBn4bqvbiBiw7MgduG7m2kgdOG7lSBjaOG7qWMgY8WpbmcgbmjGsCBraOG6oyBuxINuZyBy4budaSBi4buPIGPDtG5nIHR5Lg0KDQojIyMjIyAqKmEuIEzhuq1wIGLhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQqKiANCg0KYGBge3J9DQptc190YWJsZSA8LSB0YWJsZShkYXRhMSRNYXJpdGFsU3RhdHVzKQ0KbXNfcHJvcCA8LSBwcm9wLnRhYmxlKG1zX3RhYmxlKQ0KDQptc190YWJsZQ0KbXNfcHJvcA0KYGBgDQoNCiMjIyMjICoqYi4gQmnhu4N1IMSR4buTIGPhu5l0KioNCg0KYGBge3J9DQpkZl9tcyA8LSBhcy5kYXRhLmZyYW1lKG1zX3RhYmxlKQ0KY29sbmFtZXMoZGZfbXMpIDwtIGMoIk1hcml0YWxTdGF0dXMiLCAiQ291bnQiKQ0KDQpnZ3Bsb3QoZGZfbXMsIGFlcyh4ID0gTWFyaXRhbFN0YXR1cywgeSA9IENvdW50LCBmaWxsID0gTWFyaXRhbFN0YXR1cykpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IENvdW50KSwgdmp1c3QgPSAtMC41KSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmnhu4N1IMSR4buTIGPhu5l0OiBUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gY+G7p2EgbmjDom4gdmnDqm4iLA0KICAgIHggPSAiVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIiwNCiAgICB5ID0gIlPhu5EgbMaw4bujbmciDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KIyMjIyMgKipjLiBCaeG7g3UgxJHhu5MgdHLDsm4qKg0KDQpgYGB7cn0NCmRmX21zJFBlcmNlbnQgPC0gcm91bmQoZGZfbXMkQ291bnQgLyBzdW0oZGZfbXMkQ291bnQpICogMTAwLCAxKQ0KDQpnZ3Bsb3QoZGZfbXMsIGFlcyh4ID0gIiIsIHkgPSBDb3VudCwgZmlsbCA9IE1hcml0YWxTdGF0dXMpKSArDQogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDEpICsNCiAgY29vcmRfcG9sYXIoInkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoUGVyY2VudCwgIiUiKSksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiQmnhu4N1IMSR4buTIHRyw7JuOiBU4bu3IGzhu4cgbmjDom4gdmnDqm4gdGhlbyB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4iKSArDQogIHRoZW1lX3ZvaWQoKQ0KYGBgDQoNCiMjIyMjICoqZC4gTmjhuq1uIHjDqXQ6KioNCg0KLSBOaMOibiB2acOqbiAqKsSRw6Mga+G6v3QgaMO0bioqIGNoaeG6v20gdOG7tyBs4buHIGNhbyBuaOG6pXQgKCoqNDUuNzglKiopLCBjaG8gdGjhuqV5IMSRw6J5IGzDoCBuaMOzbSBjaOG7pyDEkeG6oW8gdHJvbmcgbOG7sWMgbMaw4bujbmcgbGFvIMSR4buZbmcuDQoNCi0gTmjDom4gdmnDqm4gKirEkeG7mWMgdGjDom4qKiBjaGnhur9tICoqMzEuOTclKiosIHRyb25nIGtoaSBuaMOibiB2acOqbiAqKsSRw6MgbHkgaMO0bioqIGzDoCAqKjIyLjI0JSoqLg0KDQotIFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBjw7MgdGjhu4Mg4bqjbmggaMaw4bufbmcgxJHhur9uICoqdHLDoWNoIG5oaeG7h20gZ2lhIMSRw6xuaCoqLCAqKnRo4budaSBnaWFuIHLhuqNuaCoqIHbDoCAqKnF1eeG6v3QgxJHhu4tuaCBuZ2jhu4EgbmdoaeG7h3AqKi4gRG8gxJHDsywgYmnhur9uIGBNYXJpdGFsU3RhdHVzYCBz4bq9IMSRxrDhu6NjICoqcGjDom4gdMOtY2ggc8OidSBoxqFuIHRyb25nIGPDoWMgcGjhuqduIGjhu5NpIHF1eSB0aeG6v3AgdGhlbyoqIG5o4bqxbSDEkcOhbmggZ2nDoSAqKm3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIMSR4bq/biB0w6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MqKiBj4bunYSBuaMOibiB2acOqbi4NCg0KIyMjIyAqKjMuMS4yLjQgQmnhur9uIFdvcmtMaWZlQmFsYW5jZSoqDQoNCkJp4bq/biBgV29ya0xpZmVCYWxhbmNlYCBwaOG6o24gw6FuaCBt4bupYyDEkeG7mSBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nIGPDoSBuaMOibiBj4bunYSBuaMOibiB2acOqbi4gQmnhur9uIMSRxrDhu6NjIMSRbyBsxrDhu51uZyB0aGVvIHRoYW5nIHRo4bupIGLhuq1jIHThu6sgKioxIMSR4bq/biA0KiosIHRyb25nIMSRw7M6DQoNCi0gMSA9IFLhuqV0IGvDqW0gIA0KDQotIDIgPSBLw6ltICANCg0KLSAzID0gVOG7kXQgIA0KDQotIDQgPSBS4bqldCB04buRdA0KDQrEkMOieSBsw6AgbeG7mXQgYmnhur9uIHF1YW4gdHLhu41uZyB2w6wgbeG6pXQgY8OibiBi4bqxbmcgY8OzIHRo4buDIGThuqtuIMSR4bq/biBjxINuZyB0aOG6s25nIHbDoCBxdXnhur90IMSR4buLbmggbmdo4buJIHZp4buHYy4NCg0KIyMjIyMgKiphLiBM4bqtcCBi4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQp3bGJfdGFibGUgPC0gdGFibGUoZGF0YTEkV29ya0xpZmVCYWxhbmNlKQ0Kd2xiX3Byb3AgPC0gcHJvcC50YWJsZSh3bGJfdGFibGUpDQp3bGJfdGFibGUNCndsYl9wcm9wDQpgYGANCg0KIyMjIyMgKipiIC4gQmnhu4N1IMSR4buTIGPhu5l0KioNCg0KYGBge3J9DQpkZl93bGIgPC0gYXMuZGF0YS5mcmFtZSh3bGJfdGFibGUpDQpjb2xuYW1lcyhkZl93bGIpIDwtIGMoIldvcmtMaWZlQmFsYW5jZSIsICJDb3VudCIpDQoNCmdncGxvdChkZl93bGIsIGFlcyh4ID0gZmFjdG9yKFdvcmtMaWZlQmFsYW5jZSksIHkgPSBDb3VudCwgZmlsbCA9IGZhY3RvcihXb3JrTGlmZUJhbGFuY2UpKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLCB2anVzdCA9IC0wLjUpICsNCiAgbGFicyh0aXRsZSA9ICJCaeG7g3UgxJHhu5MgY+G7mXQ6IFdvcmtMaWZlQmFsYW5jZSIsIHggPSAiTeG7qWMgxJHhu5kgY8OibiBi4bqxbmciLCB5ID0gIlThuqduIHPhu5EiKSArDQogIHRoZW1lX21pbmltYWwoKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQojIyMjIyAqKmMuIEJp4buDdSDEkeG7kyB0csOybioqDQoNCmBgYHtyfQ0KZGZfd2xiJFBlcmNlbnQgPC0gcm91bmQoZGZfd2xiJENvdW50IC8gc3VtKGRmX3dsYiRDb3VudCkgKiAxMDAsIDEpDQoNCmdncGxvdChkZl93bGIsIGFlcyh4ID0gIiIsIHkgPSBDb3VudCwgZmlsbCA9IGZhY3RvcihXb3JrTGlmZUJhbGFuY2UpKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKFBlcmNlbnQsICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIkJp4buDdSDEkeG7kyB0csOybjogV29ya0xpZmVCYWxhbmNlIikgKw0KICB0aGVtZV92b2lkKCkNCmBgYA0KDQojIyMjIyAqKmQuIE5o4bqtbiB4w6l0OioqDQoNCi0gTeG7qWMgxJHhu5kgY8OibiBi4bqxbmcgcGjhu5UgYmnhur9uIG5o4bqldCBsw6AgKipt4bupYyAzKiogduG7m2kgKio4OTMgbmfGsOG7nWkqKiwgY2hp4bq/bSAqKjYwLjc1JSoqIHThu5VuZyBz4buRIG5ow6JuIHZpw6puLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBwaOG6p24gbOG7m24gbmjDom4gdmnDqm4gY+G6o20gdGjhuqV5IG3hu6ljIMSR4buZIGPDom4gYuG6sW5nIGdp4buvYSBjw7RuZyB2aeG7h2MgdsOgIGN14buZYyBz4buRbmcgY+G7p2EgaOG7jSDhu58gbeG7qWMga2jDoSB04buRdC4NCg0KLSBN4bupYyDEkeG7mSBjw6JuIGLhurFuZyB0aOG7qSBoYWkgbMOgICoqbeG7qWMgMioqIHbhu5tpICoqMzQ0IG5nxrDhu51pKiosIGNoaeG6v20gKioyMy40MCUqKi4gxJDDonkgbMOgIG5ow7NtIGPDsyBt4bupYyBjw6JuIGLhurFuZyB0cnVuZyBiw6xuaC4NCg0KLSBN4bupYyBjYW8gbmjhuqV0ICgqKm3hu6ljIDQqKikgY2jhu4kgY8OzICoqMTUzIG5nxrDhu51pKiosIGNoaeG6v20gKioxMC40MSUqKiwgY2hvIHRo4bqleSBraMO0bmcgbmhp4buBdSBuaMOibiB2acOqbiDEkcOhbmggZ2nDoSBtw7RpIHRyxrDhu51uZyBsw6BtIHZp4buHYyBj4bunYSBtw6xuaCDhu58gbeG7qWMgY8OibiBi4bqxbmcgcuG6pXQgdOG7kXQuDQoNCi0gTeG7qWMgdGjhuqVwIG5o4bqldCAoKipt4bupYyAxKiopIGPDsyAqKjgwIG5nxrDhu51pKiosIGNoaeG6v20gKio1LjQ0JSoqLCBsw6AgbmjDs20gY8OzIMSRw6FuaCBnacOhIGvDqW0gbmjhuqV0IHbhu4EgV29ya0xpZmVCYWxhbmNlLg0KDQotIEJp4bq/biBgV29ya0xpZmVCYWxhbmNlYCBz4bq9IMSRxrDhu6NjIHBow6JuIHTDrWNoIHPDonUgaMahbiB0cm9uZyBjw6FjIHBo4bqnbiBo4buTaSBxdXkgc2F1IMSR4buDIGtp4buDbSDEkeG7i25oIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIMSR4bq/biB0w6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MuDQoNCiMjICoqMy4yIFBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gT3ZlclRpbWUsIEpvYlNhdGlzZmFjdGlvbiwgTWFyaXRhbFN0YXR1cywgV29ya0xpZmVCYWxhbmMgduG7m2kgYmnhur9uIEF0dHJpdGlvbioqDQoNCiMjIyAqKjMuMi4xIE92ZXJUaW1lIHbDoCBBdHRyaXRpb24qKg0KDQojIyMjICoqMy4yLjEuMSBC4bqjbmcgdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0IGNow6lvKioNCg0KUGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgKipPdmVyVGltZSoqIHbDoCAqKkF0dHJpdGlvbioqIHRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nDunAgeMOhYyDEkeG7i25oIGxp4buHdSBuaMOibiB2acOqbiBsw6BtIHRow6ptIGdp4budIGPDsyB4dSBoxrDhu5tuZyBuZ2jhu4kgdmnhu4djIG5oaeG7gXUgaMahbiBzbyB24bubaSBuaMOibiB2acOqbiBraMO0bmcgbMOgbSB0aMOqbS4NCg0KYGBge3J9IA0KIyBC4bqjbmcgdOG6p24gc+G7kSBjaMOpbw0KdGFibGVfYXR0cml0aW9uX292ZXJ0aW1lIDwtIHRhYmxlKGRhdGExJEF0dHJpdGlvbiwgZGF0YTEkT3ZlclRpbWUpDQp0YWJsZV9hdHRyaXRpb25fb3ZlcnRpbWUNCiMgQuG6o25nIHThuqduIHN14bqldCBwaOG6p24gdHLEg20gdGhlbyBow6BuZw0KcHJvcC50YWJsZSh0YWJsZV9hdHRyaXRpb25fb3ZlcnRpbWUsIG1hcmdpbiA9IDEpDQpgYGANCg0KKipW4bq9IGJp4buDdSDEkeG7kyoqDQoNCmBgYHtyfQ0KZGZfYmFyIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoZGF0YTEkQXR0cml0aW9uLCBkYXRhMSRPdmVyVGltZSkpDQpjb2xuYW1lcyhkZl9iYXIpIDwtIGMoIkF0dHJpdGlvbiIsICJPdmVyVGltZSIsICJDb3VudCIpDQoNCmdncGxvdChkZl9iYXIsIGFlcyh4ID0gT3ZlclRpbWUsIHkgPSBDb3VudCwgZmlsbCA9IEF0dHJpdGlvbikpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gQ291bnQpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksDQogICAgICAgICAgICB2anVzdCA9IC0wLjI1LCBzaXplID0gNCkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkJp4buDdSDEkeG7kyBj4buZdCBuaMOzbTogVMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djIHRoZW8gT3ZlclRpbWUiLA0KICAgIHggPSAiTMOgbSB0aMOqbSBnaeG7nSIsDQogICAgeSA9ICJT4buRIGzGsOG7o25nIG5ow6JuIHZpw6puIiwNCiAgICBmaWxsID0gIk5naOG7iSB2aeG7h2MiDQogICkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNGRhZjRhIiwgIiNlNDFhMWMiKSkgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0Kio6DQoNCi0gVHJvbmcgbmjDs20gKipraMO0bmcgbMOgbSB0aMOqbSBnaeG7nSoqLCBjaOG7iSBraG/huqNuZyAqKjEwLjQlKiogbmjDom4gdmnDqm4gbmdo4buJIHZp4buHYy4gIA0KDQotIFRyb25nIGtoaSDEkcOzLCBuaMOzbSAqKmPDsyBsw6BtIHRow6ptIGdp4budKiogY8OzIHThu7cgbOG7hyBuZ2jhu4kgdmnhu4djICoqY2FvIGjGoW4gxJHDoW5nIGvhu4MsIGtob+G6o25nIDMwLjUlKiouDQoNCi0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgcuG6sW5nIHZp4buHYyAqKmzDoG0gdGjDqm0gZ2nhu50gY8OzIHRo4buDIGzDoCBt4buZdCB54bq/dSB04buRIHLhu6dpIHJvKiosIGzDoG0gZ2lhIHTEg25nIGto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4uICBUdXkgbmhpw6puLCDEkeG7gyBraOG6s25nIMSR4buLbmggbeG7kWkgcXVhbiBo4buHIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBoYXkga2jDtG5nLCBj4bqnbiB0aOG7sWMgaGnhu4duIGPDoWMgcGjDom4gdMOtY2ggc3V5IGRp4buFbiDhu58gY8OhYyBwaOG6p24gdGnhur9wIHRoZW8sIGJhbyBn4buTbSBraeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcsIMaw4bubYyBsxrDhu6NuZyBPZGRzIFJhdGlvIHbDoCBSZWxhdGl2ZSBSaXNrLCBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4uDQoNCiMjIyMgKiozLjIuMS4yIEtp4buDbSDEkeG7i25oIGNoaSBiw6xuaCBwaMawxqFuZyoqDQoNCktp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBraeG7g20gdHJhICoqbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgaGFpIGJp4bq/biDEkeG7i25oIHTDrW5oKio6IHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyAoYEF0dHJpdGlvbmApIHbDoCBsw6BtIHRow6ptIGdp4budIChgT3ZlclRpbWVgKS4NCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoqKg0KDQotICRIXzAkIChHaeG6oyB0aHV54bq/dCBraMO0bmcpOiBLaMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHZp4buHYyBsw6BtIHRow6ptIGdp4budIChgT3ZlclRpbWVgKSB2w6AgdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djIChgQXR0cml0aW9uYCkuIEhhaSBiaeG6v24gxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUuDQoNCi0gJEhfMSQgKEdp4bqjIHRodXnhur90IMSR4buRaSk6IEPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSB2aeG7h2MgbMOgbSB0aMOqbSBnaeG7nSAoYE92ZXJUaW1lYCkgdsOgIHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyAoYEF0dHJpdGlvbmApLiBIYWkgYmnhur9uIGPDsyBsacOqbiBxdWFuIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KY2hpc3FfdGVzdF9yZXN1bHQgPC0gY2hpc3EudGVzdCh0YWJsZV9hdHRyaXRpb25fb3ZlcnRpbWUpDQpjaGlzcV90ZXN0X3Jlc3VsdA0KYGBgDQoNCioqS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIGdp4buvYSBoYWkgYmnhur9uIGBBdHRyaXRpb25gIHbDoCBgT3ZlclRpbWVgIG5oxrAgc2F1Og0KDQotICoqR2nDoSB0cuG7iyB0aOG7kW5nIGvDqiBDaGkgYsOsbmggcGjGsMahbmcqKiAoWC1zcXVhcmVkKTogODcuNTY0IA0KDQotICoqQuG6rWMgdOG7sSBkbyoqIChkZik6IDEgIA0KDQotICoqR2nDoSB0cuG7iyBwLXZhbHVlKio6IDwgMi4yZS0xNiAgDQoNClbDrCAqKnAtdmFsdWUgPCAwLjA1KiosIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwKiosIHThu6ljIGzDoCBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyAqKnTDrG5oIHRy4bqhbmcgbMOgbSB0aMOqbSBnaeG7nSBjw7MgbeG7kWkgbGnDqm4gaOG7hyB24bubaSB0w6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4qKi4NCg0KIyMjIyAqKjMuMi4xLjMgS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyoqDQoNClRyb25nIHBo4bqnbiBuw6B5LCB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCAqKsaw4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbmjDom4gdmnDqm4gbmdo4buJIHZp4buHYyoqIHRyb25nIG5ow7NtICoqY8OzIGzDoG0gdGjDqm0gZ2nhu50gKE92ZXJUaW1lID0gIlllcyIpKiouDQoNCsSQw6J5IGzDoCBt4buZdCBixrDhu5tjIHF1YW4gdHLhu41uZyDEkeG7gyB4w6FjIMSR4buLbmggbeG7qWMgxJHhu5kgcuG7p2kgcm8gbmdo4buJIHZp4buHYyB0cm9uZyBuaMOzbSBuaMOibiB2acOqbiB0aMaw4budbmcgeHV5w6puIHTEg25nIGNhIOKAkyB04burIMSRw7MgaOG7lyB0cuG7oyB4w6J5IGThu7FuZyBjaMOtbmggc8OhY2ggZ2nhu68gY2jDom4gbmjDom4gc+G7sSBwaMO5IGjhu6NwIGjGoW4uDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAkSF8wJDogVOG7tyBs4buHIG5naOG7iSB2aeG7h2MgdHJvbmcgbmjDs20gY8OzIGzDoG0gdGjDqm0gZ2nhu50gbMOgIDAuNSAoNTAlKSAgDQoNCi0gJEhfMSQ6IFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIHRyb25nIG5ow7NtIGPDsyBsw6BtIHRow6ptIGdp4budIGtow6FjIDAuNQ0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHJpw6puZyBjaG8gbmjDs20gY8OzIE92ZXJUaW1lID0gIlllcyINCnN1YnNldF9vdF95ZXMgPC0gc3Vic2V0KGRhdGExLCBPdmVyVGltZSA9PSAiWWVzIikNCnRhYmxlX290X3llcyA8LSB0YWJsZShzdWJzZXRfb3RfeWVzJEF0dHJpdGlvbikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIHThuqduIHPhu5ENCnRhYmxlX290X3llcw0KDQojIMav4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbmdo4buJIHZp4buHYw0KcHJvcC50ZXN0KHggPSB0YWJsZV9vdF95ZXNbIlllcyJdLCBuID0gc3VtKHRhYmxlX290X3llcyksIHAgPSAwLjUpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoqKg0KDQotIFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIMaw4bubYyBsxrDhu6NuZyB0cm9uZyBuaMOzbSBjw7MgbMOgbSB0aMOqbSBnaeG7nSBsw6AgKiozMC41JSoqICgqc2FtcGxlIGVzdGltYXRlOiAwLjMwNTMqKS4NCg0KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbmdo4buJIHZp4buHYyBu4bqxbSB0cm9uZyBraG/huqNuZyAqKlsyNi4xOCU7IDM1LjI0JV0qKi4NCg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIENoaSBiw6xuaCBwaMawxqFuZzogKipYwrIgPSA2Mi4zMSoqLCBkZiA9IDEuDQoNCi0gKipwLXZhbHVlID0gMi45MzRlLTE1KiogKHLhuqV0IG5o4buPLCA8IDAuMDUpLg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQotIFbhu5tpICoqcC12YWx1ZSBy4bqldCBuaOG7jyoqLCB0YSAqKmLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBI4oKAKiosIG5naMSpYSBsw6AgY8OzIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIGNobyB0aOG6pXkgKip04bu3IGzhu4cgbmdo4buJIHZp4buHYyB0cm9uZyBuaMOzbSBsw6BtIHRow6ptIGdp4budIGtow6FjIDUwJSoqLg0KDQpUaOG7sWMgdOG6vywgKip04bu3IGzhu4cgbsOgeSB0aOG6pXAgaMahbiA1MCUqKiwgY2jhu4kga2hv4bqjbmcgKiozMC41JSoqLCBuaMawbmcgduG6q24gbMOgIG3hu5l0IGNvbiBz4buRICoqxJHDoW5nIGxvIG5n4bqhaSoqIHNvIHbhu5tpIG3hu6ljIHRydW5nIGLDrG5oIGNodW5nICgqa2hv4bqjbmcgMTYuMSUgdG/DoG4gYuG7mSBt4bqrdSopLg0KDQotIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5ICoqT3ZlclRpbWUgY8OzIGxpw6puIHF1YW4gxJHhur9uIHh1IGjGsOG7m25nIG5naOG7iSB2aeG7h2MqKiwgdsOgIGPhuqduIMSRxrDhu6NjIHBow6JuIHTDrWNoIHPDonUgaMahbiDhu58gY8OhYyBwaOG6p24gdGnhur9wIHRoZW8gKE9kZHMgUmF0aW8sIFJlbGF0aXZlIFJpc2ssIGjhu5NpIHF1eSBuaOG7iyBwaMOibikuDQoNCiMjIyMgKiozLjIuMS40IMav4bubYyBsxrDhu6NuZyBuZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUmVsYXRpdmUgUmlzaykqKg0KDQpN4bulYyB0acOqdSBj4bunYSBwaOG6p24gbsOgeSBsw6AgxrDhu5tjIGzGsOG7o25nICoqbmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJlbGF0aXZlIFJpc2sg4oCTIFJSKSoqIMSR4buDIMSRw6FuaCBnacOhICoqbeG7qWMgxJHhu5kgcuG7p2kgcm8gbmdo4buJIHZp4buHYyBj4bunYSBuaMOzbSBuaMOibiB2acOqbiBsw6BtIHRow6ptIGdp4budKiogc28gduG7m2kgbmjDs20ga2jDtG5nIGzDoG0gdGjDqm0uDQoNClJlbGF0aXZlIFJpc2sgZ2nDunAgdHLhuqMgbOG7nWkgY8OidSBo4buPaTogKk5ow6JuIHZpw6puIGzDoG0gdGjDqm0gZ2nhu50gY8OzIGto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY2FvIGjGoW4gYmFvIG5oacOqdSBs4bqnbiBzbyB24bubaSBuaMOibiB2acOqbiBraMO0bmcgbMOgbSB0aMOqbSBnaeG7nT8qDQoNCmBgYHtyfQ0KcnJfcmVzdWx0IDwtIHJpc2tyYXRpbyh0YWJsZV9hdHRyaXRpb25fb3ZlcnRpbWUpDQpycl9yZXN1bHQNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gTmjDom4gdmnDqm4gKipjw7MgbMOgbSB0aMOqbSBnaeG7nSoqIGPDsyAqKm5ndXkgY8ahIG5naOG7iSB2aeG7h2MgY2FvIGfhuqVwIDIuMjkgbOG6p24qKiBzbyB24bubaSBuaMOibiB2acOqbiAqKmtow7RuZyBsw6BtIHRow6ptIGdp4budKiouDQoNCi0gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gUlIgbuG6sW0gdHJvbmcga2hv4bqjbmcgKip04burIDEuOTYgxJHhur9uIDIuNjcqKiwgY2hvIHRo4bqleSBr4bq/dCBxdeG6oyDGsOG7m2MgbMaw4bujbmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KLSBHacOhIHRy4buLIHAgcuG6pXQgbmjhu48gKCoqcCDiiYggMCoqKSB4w6FjIG5o4bqtbiBy4bqxbmcgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbSBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KIyMjIyAqKjMuMi4xLjUgxq/hu5tjIGzGsOG7o25nIHThu7cgc+G7kSBjaMOqbmggKE9kZHMgUmF0aW8pKioNCg0KVOG7tyBz4buRIGNow6puaCAoT2RkcyBSYXRpbyDigJMgT1IpIGzDoCBt4buZdCB0aMaw4bubYyDEkW8gcXVhbiB0cuG7jW5nIGTDuW5nIMSR4buDICoqc28gc8Ohbmgga2jhuqMgbsSDbmcgeOG6o3kgcmEgY+G7p2EgbeG7mXQgc+G7sSBraeG7h24gZ2nhu69hIGhhaSBuaMOzbSoqLiBUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSwgdGEgc+G7rSBk4bulbmcgT1IgxJHhu4MgxJHDoW5oIGdpw6E6DQoNCj4gKkto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSBzbyB24bubaSBuaMOibiB2acOqbiBraMO0bmcgbMOgbSB0aMOqbSBnaeG7nSBjw7MgY2jDqm5oIGzhu4djaCDEkcOhbmcga+G7gyBraMO0bmc/Kg0KDQpgYGB7cn0NCm9yX3Jlc3VsdCA8LSBvZGRzcmF0aW8odGFibGVfYXR0cml0aW9uX292ZXJ0aW1lKQ0Kb3JfcmVzdWx0DQpgYGANCg0KKipHaeG6o2kgdGjDrWNoIGvhur90IHF14bqjOioqDQoNCi0gKipU4bu3IHPhu5EgY2jDqm5oIChPZGRzIFJhdGlvIOKAkyBPUikqKiDGsOG7m2MgbMaw4bujbmcgxJHGsOG7o2MgbMOgICoqMy43NyoqLCBuZ2jEqWEgbMOgIG5ow6JuIHZpw6puICoqbMOgbSB0aMOqbSBnaeG7nSoqIGPDsyAqKmto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY2FvIGjGoW4gZ+G6pXAgMy43NyBs4bqnbioqIHNvIHbhu5tpIG5ow6JuIHZpw6puICoqa2jDtG5nIGzDoG0gdGjDqm0gZ2nhu50qKi4NCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIE9SKio6IHThu6sgKioyLjgzIMSR4bq/biA1LjAzKiouIFbDrCAqKmtob+G6o25nIHRpbiBj4bqteSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSoqLCB0YSBjw7MgdGjhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyDGsOG7m2MgbMaw4bujbmcgbsOgeSAqKmPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKi4NCg0KLSAqKkdpw6EgdHLhu4sgcC12YWx1ZSDiiYggMCoqOiDEkMOieSBsw6AgbeG7mXQgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogcuG6pXQgbeG6oW5oIMSR4buDICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyoqLCBraOG6s25nIMSR4buLbmggc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbSBsw6AgKipjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiouDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gVsOsICoqT1IgPiAxKiogdsOgICoqcC12YWx1ZSDiiYggMCoqLCB0YSBjw7MgdGjhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyAqKmJp4bq/biBPdmVyVGltZSBjw7MgbGnDqm4gcXVhbiBt4bqhbmggbeG6vSDEkeG6v24ga2jhuqMgbsSDbmcgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbioqLg0KDQotIMSQw6J5IGzDoCBt4buZdCBjaOG7iSBz4buRICoqxJHhurdjIGJp4buHdCBxdWFuIHRy4buNbmcgdHJvbmcgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IExvZ2l0KiosIGLhu59pIHbDrCAqKmjhu4cgc+G7kSBo4buTaSBxdXkgdHJvbmcgTG9naXQgdGjGsOG7nW5nIMSRxrDhu6NjIGRp4buFbiBnaeG6o2kgdGjDtG5nIHF1YSBsb2coT1IpKiouDQoNCiMjIyAqKjMuMi4yIEpvYlNhdGlzZmFjdGlvbiB2w6AgQXR0cml0aW9uKioNCg0KIyMjIyAqKjMuMi4yLjEgQuG6o25nIHThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCBjaMOpbyoqDQoNClBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hICoqSm9iU2F0aXNmYWN0aW9uKiogKG3hu6ljIMSR4buZIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djKSB2w6AgKipBdHRyaXRpb24qKiAodMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djKSBnacO6cCB4w6FjIMSR4buLbmggbGnhu4d1ICoqc+G7sSBow6BpIGzDsm5nIHRyb25nIGPDtG5nIHZp4buHYyBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBuZ2jhu4kgdmnhu4djKiogY+G7p2EgbmjDom4gdmnDqm4gaGF5IGtow7RuZy4NCg0KYGBge3J9DQojIELhuqNuZyB04bqnbiBz4buRIGNow6lvDQp0YWJsZV9hdHRyaXRpb25fam9ic2F0IDwtIHRhYmxlKGRhdGExJEF0dHJpdGlvbiwgZGF0YTEkSm9iU2F0aXNmYWN0aW9uKQ0KdGFibGVfYXR0cml0aW9uX2pvYnNhdA0KIyBC4bqjbmcgdOG6p24gc3XhuqV0IHBo4bqnbiB0csSDbSB0aGVvIGjDoG5nDQpwcm9wLnRhYmxlKHRhYmxlX2F0dHJpdGlvbl9qb2JzYXQsIG1hcmdpbiA9IDEpDQpgYGANCg0KKipW4bq9IGJp4buDdSDEkeG7kyoqDQoNCmBgYHtyfQ0KZGZfYmFyMiA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlKGRhdGExJEF0dHJpdGlvbiwgZGF0YTEkSm9iU2F0aXNmYWN0aW9uKSkNCmNvbG5hbWVzKGRmX2JhcjIpIDwtIGMoIkF0dHJpdGlvbiIsICJKb2JTYXRpc2ZhY3Rpb24iLCAiQ291bnQiKQ0KDQpnZ3Bsb3QoZGZfYmFyMiwgYWVzKHggPSBmYWN0b3IoSm9iU2F0aXNmYWN0aW9uKSwgeSA9IENvdW50LCBmaWxsID0gQXR0cml0aW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwNCiAgICAgICAgICAgIHZqdXN0ID0gLTAuMjUsIHNpemUgPSA0KSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmnhu4N1IMSR4buTIGPhu5l0IG5ow7NtOiBBdHRyaXRpb24gdGhlbyBKb2JTYXRpc2ZhY3Rpb24iLA0KICAgIHggPSAiTeG7qWMgxJHhu5kgaMOgaSBsw7JuZyB24bubaSBjw7RuZyB2aeG7h2MiLA0KICAgIHkgPSAiU+G7kSBsxrDhu6NuZyBuaMOibiB2acOqbiIsDQogICAgZmlsbCA9ICJOZ2jhu4kgdmnhu4djIg0KICApICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjZTQxYTFjIikpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQotIFRyb25nIG5ow7NtICoqbmdo4buJIHZp4buHYyoqICgqQXR0cml0aW9uID0gIlllcyIqKSwgdOG7tyBs4buHIGNhbyBuaOG6pXQgdGh14buZYyB24buBIG3hu6ljIMSR4buZICoqaMOgaSBsw7JuZyB0cnVuZyBiw6xuaCAobeG7qWMgMykqKiB24bubaSAqKjMwLjglKiosIHRoZW8gc2F1IGzDoCBuaMOzbSAqKnLhuqV0IGtow7RuZyBow6BpIGzDsm5nICht4bupYyAxKSoqIHbhu5tpICoqMjcuOCUqKi4NCg0KLSBOZ8aw4bujYyBs4bqhaSwgdHJvbmcgbmjDs20gKipraMO0bmcgbmdo4buJIHZp4buHYyoqICgqQXR0cml0aW9uID0gIk5vIiopLCB04bu3IGzhu4cgY2FvIG5o4bqldCBsw6Ag4bufIG3hu6ljICoqcuG6pXQgaMOgaSBsw7JuZyAobeG7qWMgNCkqKiB24bubaSAqKjMzLjAlKiosIHRp4bq/cCDEkeG6v24gbMOgIG3hu6ljICoqaMOgaSBsw7JuZyAobeG7qWMgMykqKiB24bubaSAqKjI5LjklKiouDQoNCi0gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgY8OzIHRo4buDIHThu5NuIHThuqFpICoqbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2Egc+G7sSBraMO0bmcgaMOgaSBsw7JuZyB0cm9uZyBjw7RuZyB2aeG7h2MgdsOgIHh1IGjGsOG7m25nIG5naOG7iSB2aeG7h2MqKiBj4bunYSBuaMOibiB2acOqbi4gVHV5IG5oacOqbiwgxJHhu4MgKip4w6FjIMSR4buLbmggbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgdsOgIGtp4buDbSBjaOG7qW5nIHhlbSBt4buRaSBsacOqbiBo4buHIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBoYXkga2jDtG5nKiosIGPhuqduIHRp4bq/cCB04bulYyB0aOG7sWMgaGnhu4duIGPDoWMgcGjDom4gdMOtY2ggc3V5IGRp4buFbiDhu58gY8OhYyBt4bulYyBzYXUgbmjGsDogKipraeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcsIMaw4bubYyBsxrDhu6NuZyBuZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUlIpLCB04bu3IHPhu5EgY2jDqm5oIChPUikqKiB2w6AgKipjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4qKi4NCg0KIyMjIyAqKjMuMi4yLjIgS2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KVHJvbmcgcGjhuqduIG7DoHksIHTDoWMgZ2nhuqMgdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaCAqKkNoaSBiw6xuaCBwaMawxqFuZyoqIMSR4buDIMSRw6FuaCBnacOhIGxp4buHdSBjw7MgdOG7k24gdOG6oWkgKipt4buRaSBsacOqbiBo4buHIHRo4buRbmcga8OqIGdp4buvYSBt4bupYyDEkeG7mSBow6BpIGzDsm5nIHbhu5tpIGPDtG5nIHZp4buHYyAoKkpvYlNhdGlzZmFjdGlvbiopIHbDoCB0w6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MgKCpBdHRyaXRpb24qKSoqIGPhu6dhIG5ow6JuIHZpw6puIGhheSBraMO0bmcuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAkSF8wJCAoKkdp4bqjIHRodXnhur90IGtow7RuZyopOiBLaMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hICpKb2JTYXRpc2ZhY3Rpb24qIHbDoCAqQXR0cml0aW9uKi4gSGFpIGJp4bq/biDEkeG7mWMgbOG6rXAgduG7m2kgbmhhdS4NCg0KLSAkSF8xJCAoKkdp4bqjIHRodXnhur90IMSR4buRaSopOiBDw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgKkpvYlNhdGlzZmFjdGlvbiogdsOgICpBdHRyaXRpb24qLiBIYWkgYmnhur9uIGPDsyBsacOqbiBxdWFuIMSR4bq/biBuaGF1Lg0KDQpgYGB7cn0NCmNoaXNxX2pvYnNhdCA8LSBjaGlzcS50ZXN0KHRhYmxlX2F0dHJpdGlvbl9qb2JzYXQpDQpjaGlzcV9qb2JzYXQNCmBgYA0KDQoqKkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyoqDQoNCi0gKipHacOhIHRy4buLIHRo4buRbmcga8OqIENoaSBiw6xuaCBwaMawxqFuZyAoWC1zcXVhcmVkKSoqOiAxNy41MDUgIA0KDQotICoqQuG6rWMgdOG7sSBkbyAoZGYpKio6IDMgIA0KDQotICoqR2nDoSB0cuG7iyBwLXZhbHVlKio6IDAuMDAwNTU2MyAgDQoNClbDrCAqKnAtdmFsdWUgPCAwLjA1KiosIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwKiosIHThu6ljIGzDoCBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogY2hvIHRo4bqleSAqKm3hu6ljIMSR4buZIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djIGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbioqLiAgxJBp4buBdSBuw6B5IGjDoG0gw70gcuG6sW5nIGtoaSBt4bupYyDEkeG7mSBow6BpIGzDsm5nIHbhu5tpIGPDtG5nIHZp4buHYyB0aGF5IMSR4buVaSwga2jhuqMgbsSDbmcgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiBjxaluZyB0aGF5IMSR4buVaSB0aGVvLg0KDQojIyMjICoqMy4yLjIuMyBLaG/huqNuZyDGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHKioNCg0KVHJvbmcgcGjhuqduIG7DoHksIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oICoqxrDhu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBuZ2jhu4kgdmnhu4djKiogdHJvbmcgbmjDs20gKipuaMOibiB2acOqbiBraMO0bmcgaMOgaSBsw7JuZyB24bubaSBjw7RuZyB2aeG7h2MqKiDigJMgYmFvIGfhu5NtIGPDoWMgbeG7qWMgKipKb2JTYXRpc2ZhY3Rpb24gPSAxIHbDoCAyKiouDQoNClZp4buHYyBn4buZcCBjw6FjIG3hu6ljIMSRw6FuaCBnacOhIG7DoHkgdGjDoG5oIG5ow7NtIOKAnEtow7RuZyBow6BpIGzDsm5n4oCdIGdpw7pwIMSRxqFuIGdp4bqjbiBow7NhIHBow6JuIHTDrWNoIHbDoCBuaOG6pW4gbeG6oW5oIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgbmjDs20gY+G6o20gbmjhuq1uIMSR4buRaSBs4bqtcCB0cm9uZyBjw7RuZyB2aeG7h2MuDQoNCioqTeG7pWMgdGnDqnU6KiogS2nhu4NtIHRyYSB4ZW0gdOG7tyBs4buHIG5naOG7iSB2aeG7h2MgdHJvbmcgbmjDs20gbsOgeSAqKmPDsyBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4Mgc28gduG7m2kgbeG7kWMgNTAlIGhheSBraMO0bmcqKiDigJMgbeG7qWMgdGjhu4MgaGnhu4duIHLhu6dpIHJvIG5naOG7iSB2aeG7h2MgcuG6pXQgY2FvLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCi0gJEhfMCQ6IFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIHRyb25nIG5ow7NtICpLaMO0bmcgaMOgaSBsw7JuZyogYuG6sW5nIDAuNSAgDQoNCi0gJEhfMSQ6IFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIHRyb25nIG5ow7NtICpLaMO0bmcgaMOgaSBsw7JuZyoga2jDoWMgMC41DQoNCmBgYHtyfQ0KIyBH4buZcCBKb2JTYXRpc2ZhY3Rpb24gdGjDoG5oIDIgbmjDs206IEtow7RuZyBow6BpIGzDsm5nICgxLDIpIHbDoCBIw6BpIGzDsm5nICgzLDQpDQpkYXRhMSRKU19ncm91cCA8LSBpZmVsc2UoZGF0YTEkSm9iU2F0aXNmYWN0aW9uICVpbiUgYygxLCAyKSwgIktow7RuZyBow6BpIGzDsm5nIiwgIkjDoGkgbMOybmciKQ0KZGF0YTEkSlNfZ3JvdXAgPC0gZmFjdG9yKGRhdGExJEpTX2dyb3VwLCBsZXZlbHMgPSBjKCJIw6BpIGzDsm5nIiwgIktow7RuZyBow6BpIGzDsm5nIikpDQojIEzhu41jIGThu68gbGnhu4d1IGNobyBuaMOzbSAiS2jDtG5nIGjDoGkgbMOybmciDQpzdWJzZXRfa2hoIDwtIHN1YnNldChkYXRhMSwgSlNfZ3JvdXAgPT0gIktow7RuZyBow6BpIGzDsm5nIikNCnRhYmxlX2toaCA8LSB0YWJsZShzdWJzZXRfa2hoJEF0dHJpdGlvbikNCg0KIyBIaeG7g24gdGjhu4sgYuG6o25nIHThuqduIHPhu5Egbmdo4buJIHZp4buHYw0KdGFibGVfa2hoDQoNCiMgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgdsOgIGtp4buDbSDEkeG7i25oIHThu7cgbOG7hyBraMOhYyAwLjUNCnByb3AudGVzdCh4ID0gdGFibGVfa2hoWyJZZXMiXSwgbiA9IHN1bSh0YWJsZV9raGgpLCBwID0gMC41KQ0KYGBgDQoNCioqS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmg6KioNCg0KLSBU4bu3IGzhu4cgbmdo4buJIHZp4buHYyDGsOG7m2MgbMaw4bujbmcgdHJvbmcgbmjDs20gKktow7RuZyBow6BpIGzDsm5nKiBsw6AgKioxOS43JSoqICgqcMyCID0gMC4xOTY4KikNCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSUqKiBjaG8gdOG7tyBs4buHIG7DoHkgbuG6sW0gdHJvbmcga2hv4bqjbmcgKipbMTYuNTQlOyAyMy4yNCVdKioNCg0KLSAqKkdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogQ2hpIGLDrG5oIHBoxrDGoW5nKio6IFjCsiA9IDIwNy45NywgZGYgPSAxDQoNCi0gKipHacOhIHRy4buLIHAtdmFsdWUqKjogPCAyLjJlLTE2IChy4bqldCBuaOG7jywgZ+G6p24gYuG6sW5nIDApDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gVuG7m2kgKipwLXZhbHVlIHLhuqV0IG5o4buPICg8IDAuMDUpKiosIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAqKiwgbmdoxKlhIGzDoCBjw7MgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogY2hvIHRo4bqleSAqKnThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIHRyb25nIG5ow7NtIGtow7RuZyBow6BpIGzDsm5nIGtow6FjIDUwJSoqLg0KDQotIFRyw6puIHRo4buxYyB04bq/LCAqKnThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIHRyb25nIG5ow7NtIG7DoHkgY2jhu4kga2hv4bqjbmcgMTkuNyUqKiwgKip0aOG6pXAgaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBt4buRYyA1MCUqKiwgbmjGsG5nICoqY2FvIGjGoW4gc28gduG7m2kgdOG7tyBs4buHIHRydW5nIGLDrG5oIHRvw6BuIG3huqt1ICgxNi4xJSkqKi4NCg0KLSDEkMOieSBsw6AgbeG7mXQgKipj4bqjbmggYsOhbyBxdWFuIHRy4buNbmcgY2hvIGRvYW5oIG5naGnhu4dwKio6ICoqbmjDom4gdmnDqm4ga2jDtG5nIGjDoGkgbMOybmcgduG6q24gY8OzIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MgY2FvKiosIGTDuSBjaMawYSDEkeG6oXQgxJHhur9uIG3hu6ljIOKAnGLDoW8gxJHhu5luZyDEkeG7j+KAnSAoNTAlKSwgdsOgICoqY+G6p24gxJHGsOG7o2MgcXVhbiB0w6JtIG5oaeG7gXUgaMahbiB0cm9uZyBjw6FjIGNoaeG6v24gbMaw4bujYyBnaeG7ryBjaMOibiBuaMOibiBz4buxKiouDQoNCiMjIyMgKiozLjIuMi40IMav4bubYyBsxrDhu6NuZyBuZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUmVsYXRpdmUgUmlzaykqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgdMOhYyBnaeG6oyB0aeG6v24gaMOgbmggKirGsOG7m2MgbMaw4bujbmcgbmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJlbGF0aXZlIFJpc2sg4oCTIFJSKSoqIG5o4bqxbSDEkcOhbmggZ2nDoSAqKm3hu6ljIMSR4buZIHLhu6dpIHJvIG5naOG7iSB2aeG7h2MqKiBj4bunYSBuaMOibiB2acOqbiAqKmtow7RuZyBow6BpIGzDsm5nIHbhu5tpIGPDtG5nIHZp4buHYyoqIChn4buZcCBgSm9iU2F0aXNmYWN0aW9uID0gMWAgdsOgIGAyYCkgc28gduG7m2kgbmjDom4gdmnDqm4gKipow6BpIGzDsm5nIHbhu5tpIGPDtG5nIHZp4buHYyoqIChn4buZcCBgSm9iU2F0aXNmYWN0aW9uID0gM2AgdsOgIGA0YCkuDQoNCioqTeG7pWMgdGnDqnU6KiogWMOhYyDEkeG7i25oIGxp4buHdSBz4buxICoqa2jDtG5nIGjDoGkgbMOybmcqKiBjw7MgbMOgbSAqKnTEg25nIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MqKiBt4buZdCBjw6FjaCBjw7MgKirDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiBoYXkga2jDtG5nLg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIDJ4MiBnaeG7r2EgQXR0cml0aW9uIHbDoCBuaMOzbSBow6BpIGzDsm5nIGPDtG5nIHZp4buHYw0KdGFibGVfcnJfam9ic2F0IDwtIHRhYmxlKGRhdGExJEF0dHJpdGlvbiwgZGF0YTEkSlNfZ3JvdXApDQpycl9qb2JzYXQgPC0gcmlza3JhdGlvKHRhYmxlX3JyX2pvYnNhdCkNCnJyX2pvYnNhdA0KYGBgDQoNCioqS+G6v3QgcXXhuqM6KioNCg0KLSAqKlThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIOG7nyBuaMOzbSBraMO0bmcgaMOgaSBsw7JuZyoqOiAxMTIgLyA1Njkg4omIICoqMTkuNyUqKg0KDQotICoqVOG7tyBs4buHIG5naOG7iSB2aeG7h2Mg4bufIG5ow7NtIGjDoGkgbMOybmcqKjogMTI1IC8gOTAxIOKJiCAqKjEzLjklKioNCg0KLSAqKlJSIMaw4bubYyBsxrDhu6NuZyoqOiAqKjEuMjgqKiBjaG8gdGjhuqV5IG5ow6JuIHZpw6puICoqa2jDtG5nIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djIGPDsyBuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIGtob+G6o25nIDEuMjggbOG6p24qKiBzbyB24bubaSBuaMOibiB2acOqbiBow6BpIGzDsm5nLiBOw7NpIGPDoWNoIGtow6FjLCB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGPhu6dhIGjhu40gY2FvIGjGoW4gfjI4JS4NCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIFJSKio6ICoqWzEuMDk7IDEuNDldKioNCg0KLSAqKkdpw6EgdHLhu4sgcC12YWx1ZSDiiYggMC4wMDM1KiogKHLhuqV0IG5o4buPKQ0KDQoqKkvhur90IGx14bqtbjoqKg0KDQotIFbDrCAqKlJSID4gMSoqIHbDoCAqKnAtdmFsdWUgPCAwLjA1KiosIHRhIGPDsyB0aOG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nICoqbeG7qWMgxJHhu5kgaMOgaSBsw7JuZyBjw7RuZyB2aeG7h2MgY8OzIOG6o25oIGjGsOG7n25nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MqKi4NCg0KLSBD4bulIHRo4buDLCBuaMOzbSBuaMOibiB2acOqbiAqKmtow7RuZyBow6BpIGzDsm5nIGPDsyBuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIMSRw6FuZyBr4buDKiosIGNobyB0aOG6pXkgKipz4buxIGjDoGkgbMOybmcgdHJvbmcgY8O0bmcgdmnhu4djIGzDoCBt4buZdCB54bq/dSB04buRIHRoZW4gY2jhu5F0IHRyb25nIGNoaeG6v24gbMaw4bujYyBnaeG7ryBjaMOibiBuaMOibiBz4buxKiouDQoNCiMjIyMgKiozLjIuMi41IMav4bubYyBsxrDhu6NuZyB04bu3IHPhu5EgY2jDqm5oIChPZGRzIFJhdGlvKSoqDQoNClRyb25nIHBo4bqnbiBuw6B5LCB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCAqKsaw4bubYyBsxrDhu6NuZyB04bu3IHPhu5EgY2jDqm5oIChPZGRzIFJhdGlvIOKAkyBPUikqKiDEkeG7gyDEkW8gbMaw4budbmcgKipt4bupYyDEkeG7mSBjaMOqbmggbOG7h2NoIGto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MqKiBnaeG7r2EgaGFpIG5ow7NtOiAqKm5ow6JuIHZpw6puIGtow7RuZyBow6BpIGzDsm5nIHbhu5tpIGPDtG5nIHZp4buHYyoqIHbDoCAqKm5ow6JuIHZpw6puIGjDoGkgbMOybmcqKi4NCg0KYGBge3J9DQpvcl9qcyA8LSBvZGRzcmF0aW8odGFibGVfcnJfam9ic2F0KQ0Kb3JfanMNCmBgYA0KDQoqKkvhur90IHF14bqjOioqDQoNCi0gKipPZGRzIFJhdGlvIChPUikqKiDGsOG7m2MgbMaw4bujbmcgxJHGsOG7o2MgbMOgICoqMS41MioqLCBuZ2jEqWEgbMOgIG5ow6JuIHZpw6puICoqa2jDtG5nIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djIGPDsyBraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIGfhuqVwIDEuNTIgbOG6p24qKiBzbyB24bubaSBuaMOibiB2acOqbiBow6BpIGzDsm5nLg0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gT1IqKjogdOG7qyAqKjEuMTUgxJHhur9uIDIuMDEqKg0KDQotICoqR2nDoSB0cuG7iyBwLXZhbHVlIOKJiCAwLjAwMzUqKiAocuG6pXQgbmjhu48pDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gVsOsICoqT1IgPiAxKiogdsOgICoqcC12YWx1ZSA8IDAuMDUqKiwgdGEgY8OzIHRo4buDIHbDoCBr4bq/dCBsdeG6rW4gcuG6sW5nOiAqKk3hu6ljIMSR4buZIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djIGPDsyBsacOqbiBxdWFuIHRo4buRbmcga8OqIMSR4bq/biBraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djLioqDQoNCi0gQ+G7pSB0aOG7gywgKipuaMOzbSBuaMOibiB2acOqbiBraMO0bmcgaMOgaSBsw7JuZyBjw7Mga2jhuqMgbsSDbmcgbmdo4buJIHZp4buHYyBjYW8gaMahbiDEkcOhbmcga+G7gyoqLCB2w6AgdOG7tyBz4buRIGNow6puaCAxLjUyIGzDoCBt4buZdCBjaOG7iSBiw6FvIHF1YW4gdHLhu41uZyBj4bqnbiDEkcaw4bujYyBkb2FuaCBuZ2hp4buHcCBsxrB1IMO9IHRyb25nIGPDoWMgY2hp4bq/biBsxrDhu6NjIGdp4buvIGNow6JuIG5ow6JuIHPhu7EuDQoNCiMjIyAqKjMuMi4zIE1hcml0YWxTdGF0dXMgdsOgIEF0dHJpdGlvbioqDQoNCiMjIyMgKiozLjIuMy4xIELhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY2jDqW8qKg0KDQpQaMOibiB0w61jaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSAqKk1hcml0YWxTdGF0dXMqKiAodMOsbmggdHLhuqFuZyBow7RuIG5ow6JuKSB2w6AgKipBdHRyaXRpb24qKiAodMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djKSBuaOG6sW0gxJHDoW5oIGdpw6EgbGnhu4d1ICoqdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIG5naOG7iSB2aeG7h2MqKiBj4bunYSBuaMOibiB2acOqbiBoYXkga2jDtG5nLg0KDQpgYGB7cn0NCiMgQuG6o25nIHThuqduIHPhu5EgY2jDqW8NCnRhYmxlX2F0dHJpdGlvbl9tcyA8LSB0YWJsZShkYXRhMSRBdHRyaXRpb24sIGRhdGExJE1hcml0YWxTdGF0dXMpDQp0YWJsZV9hdHRyaXRpb25fbXMNCg0KIyBC4bqjbmcgdOG6p24gc3XhuqV0IHBo4bqnbiB0csSDbSB0aGVvIGjDoG5nDQpwcm9wLnRhYmxlKHRhYmxlX2F0dHJpdGlvbl9tcywgbWFyZ2luID0gMSkNCmBgYA0KDQoqKlbhur0gYmnhu4N1IMSR4buTKioNCg0KYGBge3J9DQpkZl9iYXJfbXMgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShkYXRhMSRBdHRyaXRpb24sIGRhdGExJE1hcml0YWxTdGF0dXMpKQ0KY29sbmFtZXMoZGZfYmFyX21zKSA8LSBjKCJBdHRyaXRpb24iLCAiTWFyaXRhbFN0YXR1cyIsICJDb3VudCIpDQoNCmdncGxvdChkZl9iYXJfbXMsIGFlcyh4ID0gTWFyaXRhbFN0YXR1cywgeSA9IENvdW50LCBmaWxsID0gQXR0cml0aW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwNCiAgICAgICAgICAgIHZqdXN0ID0gLTAuMjUsIHNpemUgPSA0KSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmnhu4N1IMSR4buTIGPhu5l0IG5ow7NtOiBBdHRyaXRpb24gdGhlbyBNYXJpdGFsU3RhdHVzIiwNCiAgICB4ID0gIlTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiIsDQogICAgeSA9ICJT4buRIGzGsOG7o25nIG5ow6JuIHZpw6puIiwNCiAgICBmaWxsID0gIk5naOG7iSB2aeG7h2MiDQogICkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjNEU3OUE3IiwgIiNGMjhFMkIiKSkgKyANCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQotIFRyb25nIG5ow7NtICoqU2luZ2xlICjEkOG7mWMgdGjDom4pKiogY8OzICoqMTIwIG5ow6JuIHZpw6puIG5naOG7iSB2aeG7h2MqKiB2w6AgKiozNTAgbmjDom4gdmnDqm4ga2jDtG5nIG5naOG7iSB2aeG7h2MqKi4gxJDDonkgbMOgIG5ow7NtIGPDsyAqKnPhu5EgbMaw4bujbmcgbmdo4buJIHZp4buHYyBjYW8gbmjhuqV0KiosIGNoaeG6v20ga2hv4bqjbmcgKioyNS41JSoqIHRyb25nIHThu5VuZyBz4buRIG5ow7NtIFNpbmdsZS4NCg0KLSBUcm9uZyBuaMOzbSAqKk1hcnJpZWQgKMSQw6Mga+G6v3QgaMO0bikqKiBjw7MgKio4NCBuaMOibiB2acOqbiBuZ2jhu4kgdmnhu4djKiogdsOgICoqNTg5IG5ow6JuIHZpw6puIGtow7RuZyBuZ2jhu4kgdmnhu4djKiouIFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIOG7nyBuaMOzbSBuw6B5ICoqdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MqKiwga2hv4bqjbmcgKioxMi41JSoqLg0KDQotIFRyb25nIG5ow7NtICoqRGl2b3JjZWQgKMSQw6MgbHkgaMO0bikqKiBjw7MgKiozMyBuaMOibiB2acOqbiBuZ2jhu4kgdmnhu4djKiogdsOgICoqMjk0IG5ow6JuIHZpw6puIGtow7RuZyBuZ2jhu4kgdmnhu4djKiouIFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djICoqdGjhuqVwIG5o4bqldCB0cm9uZyBiYSBuaMOzbSoqLCBraG/huqNuZyAqKjEwLjElKiouDQoNCi0gTmjDs20gKipTaW5nbGUgY8OzIHThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIGNhbyBuaOG6pXQqKiwgZ+G6p24gKipn4bqlcCDEkcO0aSBuaMOzbSBNYXJyaWVkKiogdsOgICoqZ+G6pXAgMi41IGzhuqduIG5ow7NtIERpdm9yY2VkKiouIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGPDsyB0aOG7gyB04buTbiB04bqhaSAqKm3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB2w6Agbmd1eSBjxqEgbmdo4buJIHZp4buHYyoqLCB0cm9uZyDEkcOzICoqbmjDs20gbmjDom4gdmnDqm4gxJHhu5ljIHRow6JuIGPDsyB4dSBoxrDhu5tuZyBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuKiouDQoNCi0gVHV5IG5oacOqbiwgxJHhu4MgeMOhYyDEkeG7i25oIG3hu5FpIGxpw6puIGjhu4cgbsOgeSBjw7MgKirDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiBoYXkga2jDtG5nLCBj4bqnbiB0aeG6v3AgdOG7pWMgdGjhu7FjIGhp4buHbiAqKmtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyoqLCAqKsaw4bubYyBsxrDhu6NuZyBPZGRzIFJhdGlvIOKAkyBSZWxhdGl2ZSBSaXNrKiosIHbDoCAqKmPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibioqIOG7nyBjw6FjIHBo4bqnbiB0aeG6v3AgdGhlby4NCg0KIyMjIyAqKjMuMi4zLjIgS2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KVHJvbmcgcGjhuqduIG7DoHksIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oICoqa2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIChDaGktc3F1YXJlZCB0ZXN0KSoqIG5o4bqxbSDEkcOhbmggZ2nDoSB4ZW0gbGnhu4d1ICoqQXR0cml0aW9uKiogKG5naOG7iSB2aeG7h2MpIGPDsyBsacOqbiBxdWFuIMSR4bq/biAqKk1hcml0YWxTdGF0dXMqKiAodMOsbmggdHLhuqFuZyBow7RuIG5ow6JuKSBoYXkga2jDtG5nLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqOg0KDQotICRIXzAkIChHaeG6oyB0aHV54bq/dCBraMO0bmcpOiBBdHRyaXRpb24gdsOgIE1hcml0YWxTdGF0dXMgbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wIChraMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cpLg0KDQotICRIXzEkIChHaeG6oyB0aHV54bq/dCDEkeG7kWkpOiBBdHRyaXRpb24gdsOgIE1hcml0YWxTdGF0dXMgY8OzIG3hu5FpIGxpw6puIGjhu4cgKGtow7RuZyDEkeG7mWMgbOG6rXApLg0KDQpgYGB7cn0NCmNoaXNxLnRlc3QodGFibGVfYXR0cml0aW9uX21zKQ0KYGBgDQoNCioqS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmg6KioNCg0KLSAqKkdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogQ2hpIGLDrG5oIHBoxrDGoW5nIChYwrIpOioqIDQ2LjE2NCAgDQoNCi0gKipC4bqtYyB04buxIGRvIChkZik6KiogMiAgDQoNCi0gKipHacOhIHRy4buLIHAtdmFsdWU6KiogOS40NTZlLTExDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gVuG7m2kgKipwLXZhbHVlIDwgMC4wNSoqLCB0YSAqKmLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBI4oKAKiosIHThu6ljIGzDoCBjw7MgKipi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiBt4bqhbmggbeG6vSoqIGNobyB0aOG6pXkgKip0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gY8OzIG3hu5FpIGxpw6puIGjhu4cgduG7m2kgdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djKiouDQoNCi0gS+G6v3QgcXXhuqMgbsOgeSBj4bunbmcgY+G7kSBjaG8gcGjhuqduIG3DtCB04bqjIHRyxrDhu5tjIMSRw7M6ICoqTmjDom4gdmnDqm4gxJHhu5ljIHRow6JuIGPDsyB4dSBoxrDhu5tuZyBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuKiosIHbDoCAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6AgbeG7mXQgeeG6v3UgdOG7kSDEkcOhbmcgY2jDuiDDvSB0cm9uZyB2aeG7h2MgcGjDom4gdMOtY2ggcuG7p2kgcm8gbmdo4buJIHZp4buHYyoqLg0KDQojIyMjICoqMy4yLjMuMyBLaG/huqNuZyDGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHKioNCg0KVHJvbmcgcGjhuqduIG7DoHksIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oICoqxrDhu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBuZ2jhu4kgdmnhu4djKiogdHJvbmcgbmjDs20gbmjDom4gdmnDqm4gKipjaMawYSB04burbmcga+G6v3QgaMO0biAoU2luZ2xlKSoqIOKAkyBuaOG6sW0geMOhYyDEkeG7i25oIHhlbSDEkcOieSBjw7MgcGjhuqNpIGzDoCBuaMOzbSBjw7Mgbmd1eSBjxqEgbmdo4buJIHZp4buHYyBjYW8gdsOgIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyBzbyB24bubaSBt4bupYyB0aGFtIGNoaeG6v3UgNTAlIGhheSBraMO0bmcuDQoNCioqTeG7pWMgdGnDqnU6KiogS2nhu4NtIHRyYSBnaeG6oyB0aHV54bq/dDoNCg0KLSBcKCBIXzAgXCk6IFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIHRyb25nIG5ow7NtICpTaW5nbGUqIGLhurFuZyA1MCUgIA0KDQotIFwoIEhfMSBcKTogVOG7tyBs4buHIG5naOG7iSB2aeG7h2MgdHJvbmcgbmjDs20gKlNpbmdsZSoga2jDoWMgNTAlDQoNCmBgYHtyfQ0KIyBH4buZcCBNYXJpdGFsU3RhdHVzIHRow6BuaCAyIG5ow7NtOiBTaW5nbGUgdnMgS2jDoWMNCmRhdGExJE1TX2dyb3VwIDwtIGlmZWxzZShkYXRhMSRNYXJpdGFsU3RhdHVzID09ICJTaW5nbGUiLCAiU2luZ2xlIiwgIktow6FjIikNCmRhdGExJE1TX2dyb3VwIDwtIGZhY3RvcihkYXRhMSRNU19ncm91cCwgbGV2ZWxzID0gYygiS2jDoWMiLCAiU2luZ2xlIikpDQoNCiMgTOG7jWMgbmjDs20gU2luZ2xlDQpzdWJzZXRfc2luZ2xlIDwtIHN1YnNldChkYXRhMSwgTVNfZ3JvdXAgPT0gIlNpbmdsZSIpDQp0YWJsZV9zaW5nbGUgPC0gdGFibGUoc3Vic2V0X3NpbmdsZSRBdHRyaXRpb24pDQoNCiMgSGnhu4NuIHRo4buLIGLhuqNuZyB04bqnbiBz4buRIG5naOG7iSB2aeG7h2MgdHJvbmcgbmjDs20gU2luZ2xlDQp0YWJsZV9zaW5nbGUNCg0KIyDGr+G7m2MgbMaw4bujbmcga2hv4bqjbmcgdGluIGPhuq15DQpwcm9wLnRlc3QoeCA9IHRhYmxlX3NpbmdsZVsiWWVzIl0sIG4gPSBzdW0odGFibGVfc2luZ2xlKSwgcCA9IDAuNSkNCmBgYA0KDQoqKkvhur90IHF14bqjOioqDQoNCi0gKipU4bu3IGzhu4cgbmdo4buJIHZp4buHYyDGsOG7m2MgbMaw4bujbmcgdHJvbmcgbmjDs20gU2luZ2xlKio6ICoqMjUuNSUqKg0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JSoqIGNobyB04bu3IGzhu4cgbsOgeTogKipbMjEuNzAlOyAyOS43NyVdKioNCg0KLSAqKkdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogQ2hpIGLDrG5oIHBoxrDGoW5nKio6IFwoIFheMiA9IDExMS41OCBcKSwgYuG6rWMgdOG7sSBkbyA9IDENCg0KLSAqKnAtdmFsdWUqKjogPCAyLjJlLTE2IChy4bqldCBuaOG7jykNCg0KKipL4bq/dCBsdeG6rW46KioNCg0KLSBW4bubaSAqKnAtdmFsdWUgPCAwLjA1KiosIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IFwoIEhfMCBcKSoqLCB04bupYyBsw6AgY8OzICoqYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogbeG6oW5oIG3hur0qKiBjaG8gdGjhuqV5ICoqdOG7tyBs4buHIG5naOG7iSB2aeG7h2MgdHJvbmcgbmjDs20gbmjDom4gdmnDqm4gxJHhu5ljIHRow6JuIGtow6FjIMSRw6FuZyBr4buDIHNvIHbhu5tpIDUwJSoqLg0KDQotIE3hurdjIGTDuSB0aOG6pXAgaMahbiBt4buRYyA1MCUsIHThu7cgbOG7hyAyNS41JSB24bqrbiBsw6AgKipjYW8gbmjhuqV0IHRyb25nIGJhIG5ow7NtIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibioqLCB2w6AgKipu4bqxbSBuZ2/DoGkga2hv4bqjbmcgY2jhuqVwIG5o4bqtbiBj4bunYSBt4buZdCB04bu3IGzhu4cgbmdo4buJIHZp4buHYyDhu5VuIMSR4buLbmgqKi4NCg0KLSBL4bq/dCBxdeG6oyBuw6B5ICoqY+G7p25nIGPhu5EgdGjDqm0gbmjhuq1uIMSR4buLbmggcuG6sW5nIHTDrG5oIHRy4bqhbmcgxJHhu5ljIHRow6JuIHRo4buxYyBz4buxIGPDsyBsacOqbiBxdWFuIMSR4bq/biBow6BuaCB2aSBuZ2jhu4kgdmnhu4djKiosIHbDoCBj4bqnbiDEkcaw4bujYyB4ZW0geMOpdCB0cm9uZyAqKmNoaeG6v24gbMaw4bujYyBuaMOibiBz4buxKiosIMSR4bq3YyBiaeG7h3QgxJHhu5FpIHbhu5tpICoqY8OhYyBjaMawxqFuZyB0csOsbmggZ+G6r24ga+G6v3QgdsOgIHBow6F0IHRyaeG7g24gZMOgbmggcmnDqm5nIGNobyBuaMOzbSBuaMOibiB2acOqbiBjaMawYSBs4bqtcCBnaWEgxJHDrG5oKiouDQoNCiMjIyMgKiozLjIuMy40IMav4bubYyBsxrDhu6NuZyBuZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUmVsYXRpdmUgUmlzaykqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgdMOhYyBnaeG6oyB0aeG6v24gaMOgbmggKirGsOG7m2MgbMaw4bujbmcgbmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJlbGF0aXZlIFJpc2sg4oCTIFJSKSoqIG5o4bqxbSDEkcOhbmggZ2nDoSBuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djIGPhu6dhICoqbmjDom4gdmnDqm4gxJHhu5ljIHRow6JuIChTaW5nbGUpKiogc28gduG7m2kgKipuaMOibiB2acOqbiB0aHXhu5ljIG5ow7NtIOKAnEtow6Fj4oCdKiogKGJhbyBn4buTbSDEkcOjIGvhur90IGjDtG4gdsOgIMSRw6MgbHkgaMO0bikuDQoNCmBgYHtyfQ0KIyBU4bqhbyBi4bqjbmcgMngyIGdp4buvYSBBdHRyaXRpb24gdsOgIG5ow7NtIE1hcml0YWxTdGF0dXMgKFNpbmdsZSB2cyBLaMOhYykNCnRhYmxlX3JyX21zIDwtIHRhYmxlKGRhdGExJEF0dHJpdGlvbiwgZGF0YTEkTVNfZ3JvdXApDQpycl9tcyA8LSByaXNrcmF0aW8odGFibGVfcnJfbXMpDQpycl9tcw0KYGBgDQoNCioqS+G6v3QgcXXhuqM6KioNCg0KLSAqKlJpc2sgUmF0aW8gKFJSKToqKiAxLjc4ICANCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSU6KiogWzEuNTMgOyAyLjA4XSAgDQoNCi0gKipHacOhIHRy4buLIHAtdmFsdWUgKENoaS1zcXVhcmUpOioqIDEuNzVlLTExICoocuG6pXQgbmjhu48pKg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQotIE5ow6JuIHZpw6puICoqxJHhu5ljIHRow6JuIGPDsyBuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIGtob+G6o25nIDEuNzggbOG6p24qKiBzbyB24bubaSBuaMOzbSDEkcOjIGvhur90IGjDtG4gaG/hurdjIMSRw6MgbHkgaMO0bi4NCg0KLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6AgbeG7mXQgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgdGjhu5FuZyBrw6ogcsO1IHLhu4d0IMSR4bq/biBow6BuaCB2aSBuZ2jhu4kgdmnhu4djKiosIHbDoCBuaMOzbSAqKuKAnFNpbmdsZeKAnSBj4bqnbiDEkcaw4bujYyBkb2FuaCBuZ2hp4buHcCBxdWFuIHTDom0gdHJvbmcgY8OhYyBjaMawxqFuZyB0csOsbmggZ2nhu68gY2jDom4gbmjDom4gc+G7sSoqLg0KDQojIyMjICoqMy4yLjMuNSDGr+G7m2MgbMaw4bujbmcgdOG7tyBz4buRIGNow6puaCAoT2RkcyBSYXRpbykqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgdMOhYyBnaeG6oyB0aeG6v24gaMOgbmggKirGsOG7m2MgbMaw4bujbmcgdOG7tyBz4buRIGNow6puaCAoT2RkcyBSYXRpbyDigJMgT1IpKiogbmjhurFtIMSRw6FuaCBnacOhICoqeMOhYyBzdeG6pXQgdMawxqFuZyDEkeG7kWkgeOG6o3kgcmEgc+G7sSBraeG7h24gbmdo4buJIHZp4buHYyoqIGdp4buvYSBoYWkgbmjDs206ICoqU2luZ2xlKiogdsOgICoqS2jDoWMqKiAoZ+G7k20gTWFycmllZCB2w6AgRGl2b3JjZWQpLg0KDQpgYGB7cn0NCiMgxq/hu5tjIGzGsOG7o25nIE9kZHMgUmF0aW8gY2hvIG5ow7NtIE1hcml0YWxTdGF0dXMgKFNpbmdsZSB2cyBLaMOhYykNCm9yX21zIDwtIG9kZHNyYXRpbyh0YWJsZV9ycl9tcykNCm9yX21zDQpgYGANCg0KKipL4bq/dCBxdeG6ozoqKg0KDQotICoqT2RkcyBSYXRpbyAoT1IpOioqIDIuNTkgIA0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JToqKiBbMS45NSA7IDMuNDNdICANCg0KLSAqKkdpw6EgdHLhu4sgcC12YWx1ZSAoQ2hpLXNxdWFyZSk6KiogMS43NWUtMTEgKihy4bqldCBuaOG7jykqDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gTmjDom4gdmnDqm4gKirEkeG7mWMgdGjDom4gY8OzIG9kZHMgbmdo4buJIHZp4buHYyBjYW8gaMahbiBraG/huqNuZyAyLjU5IGzhuqduKiogc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuIGhv4bq3YyBseSBow7RuLiAgKk9kZHMqIMSRxrDhu6NjIGhp4buDdSBsw6AgKip4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIHNvIHbhu5tpIGtow7RuZyBuZ2jhu4kgdmnhu4djKiogdHJvbmcgdOG7q25nIG5ow7NtLg0KDQotICoqS2hv4bqjbmcgdGluIGPhuq15IDk1JSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSoqLCBjaG8gdGjhuqV5ICoqa+G6v3QgcXXhuqMgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqLg0KDQojIyMgKiozLjIuNCBXb3JrTGlmZUJhbGFuY2UgdsOgIEF0dHJpdGlvbioqDQoNCiMjIyMgKiozLjIuNC4xIELhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY2jDqW8qKg0KDQpQaMOibiB0w61jaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSAqKldvcmtMaWZlQmFsYW5jZSoqICht4bupYyDEkeG7mSBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nKSB2w6AgKipBdHRyaXRpb24qKiAodMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djKSBuaOG6sW0gxJHDoW5oIGdpw6EgbGnhu4d1ICoqc+G7sSBt4bqldCBjw6JuIGLhurFuZyBjw7RuZyB2aeG7h2MgLSBjdeG7mWMgc+G7kW5nIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIG5naOG7iSB2aeG7h2MqKiBj4bunYSBuaMOibiB2acOqbiBoYXkga2jDtG5nLg0KDQpgYGB7cn0NCiMgQuG6o25nIHThuqduIHPhu5EgY2jDqW8NCnRhYmxlX2F0dHJpdGlvbl93bGIgPC0gdGFibGUoZGF0YTEkQXR0cml0aW9uLCBkYXRhMSRXb3JrTGlmZUJhbGFuY2UpDQp0YWJsZV9hdHRyaXRpb25fd2xiDQojIELhuqNuZyB04bqnbiBzdeG6pXQgcGjhuqduIHRyxINtIHRoZW8gaMOgbmcNCnByb3AudGFibGUodGFibGVfYXR0cml0aW9uX3dsYiwgbWFyZ2luID0gMSkNCmBgYA0KDQoqKlbhur0gYmnhu4N1IMSR4buTKioNCmBgYHtyfQ0KZGZfYmFyX3dsYiA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlKGRhdGExJEF0dHJpdGlvbiwgZGF0YTEkV29ya0xpZmVCYWxhbmNlKSkNCmNvbG5hbWVzKGRmX2Jhcl93bGIpIDwtIGMoIkF0dHJpdGlvbiIsICJXb3JrTGlmZUJhbGFuY2UiLCAiQ291bnQiKQ0KDQpnZ3Bsb3QoZGZfYmFyX3dsYiwgYWVzKHggPSBmYWN0b3IoV29ya0xpZmVCYWxhbmNlKSwgeSA9IENvdW50LCBmaWxsID0gQXR0cml0aW9uKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBDb3VudCksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwNCiAgICAgICAgICAgIHZqdXN0ID0gLTAuMjUsIHNpemUgPSA0KSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQmnhu4N1IMSR4buTIGPhu5l0IG5ow7NtOiBBdHRyaXRpb24gdGhlbyBXb3JrTGlmZUJhbGFuY2UiLA0KICAgIHggPSAiTeG7qWMgxJHhu5kgY8OibiBi4bqxbmcgY8O0bmcgdmnhu4djIC0gY3Xhu5ljIHPhu5FuZyIsDQogICAgeSA9ICJT4buRIGzGsOG7o25nIG5ow6JuIHZpw6puIiwNCiAgICBmaWxsID0gIk5naOG7iSB2aeG7h2MiDQogICkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMWI5ZTc3IiwgIiNkOTVmMDIiKSkgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0g4bueIG3hu6ljICoqY8OibiBi4bqxbmcga8OpbSBuaOG6pXQgKDEpKiosIGPDsyAqKjI1IG5ow6JuIHZpw6puIG5naOG7iSB2aeG7h2MqKiB0csOqbiB04buVbmcgc+G7kSAqKjgwIG5ow6JuIHZpw6puKiosIGNoaeG6v20gdOG7tyBs4buHICoqMzEuMjUlKiog4oCTIMSRw6J5IGzDoCB04bu3IGzhu4cgbmdo4buJIHZp4buHYyBjYW8gbmjhuqV0IHRyb25nIDQgbeG7qWMgxJHhu5kuDQoNCi0g4bueIG3hu6ljICoqY8OibiBi4bqxbmcgdOG7kXQgbmjhuqV0ICg0KSoqLCBjaOG7iSBjw7MgKioyNyBuZ8aw4budaSBuZ2jhu4kgdmnhu4djKiogdHLDqm4gdOG7lW5nIHPhu5EgKioxNTMgbmjDom4gdmnDqm4qKiwgY2hp4bq/bSB04bu3IGzhu4cga2hv4bqjbmcgKioxNy42JSoqIOKAkyB0aOG6pXAgaMahbiBn4bqnbiBt4buZdCBu4butYSBzbyB24bubaSBuaMOzbSBjw7MgbeG7qWMgY8OibiBi4bqxbmcga8OpbS4NCg0KLSBUcm9uZyBuaMOzbSBjw7MgKipjw6JuIGLhurFuZyB0cnVuZyBiw6xuaCAobeG7qWMgMiB2w6AgMykqKjoNCg0KICAtIE3hu6ljIDI6IFThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIGzDoCAqKjU4IC8gKDI4NiArIDU4KSDiiYggMTYuOSUqKg0KICANCiAgLSBN4bupYyAzOiBU4bu3IGzhu4cgbmdo4buJIHZp4buHYyBsw6AgKioxMjcgLyAoNzY2ICsgMTI3KSDiiYggMTQuMiUqKiDigJQgbeG7qWMgdGjhuqVwIG5o4bqldCB0cm9uZyB04bqldCBj4bqjLg0KDQotIEPDsyB0aOG7gyB0aOG6pXkgcuG6sW5nICoqdOG7tyBs4buHIG5naOG7iSB2aeG7h2MgY8OzIHh1IGjGsOG7m25nIGdp4bqjbSoqIGtoaSBt4bupYyDEkeG7mSBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nICoqdMSDbmcgbMOqbioqLCBuZ2/huqFpIHRy4burIG3hu6ljIDQgY8OzIHThu7cgbOG7hyBjYW8gaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBt4bupYyAzLg0KDQojIyMjICoqMy4yLjQuMiBLaeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcqKg0KDQrEkOG7gyBraeG7g20gdHJhIHhlbSAqKnPhu7EgY8OibiBi4bqxbmcgZ2nhu69hIGPDtG5nIHZp4buHYyB2w6AgY3Xhu5ljIHPhu5FuZyoqIGPDsyBt4buRaSBsacOqbiBo4buHIHRo4buRbmcga8OqIHbhu5tpICoqdMOsbmggdHLhuqFuZyBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puKiogaGF5IGtow7RuZywgdGEgdGnhur9uIGjDoG5oIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyB24bubaSBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgaGFpIGJp4bq/biBgQXR0cml0aW9uYCB2w6AgYFdvcmtMaWZlQmFsYW5jZWAuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAkSF8wJCAoR2nhuqMgdGh1eeG6v3Qga2jDtG5nKTogS2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBt4bupYyDEkeG7mSBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nIChgV29ya0xpZmVCYWxhbmNlYCkgdsOgIHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyAoYEF0dHJpdGlvbmApLiBIYWkgYmnhur9uIMSR4buZYyBs4bqtcCB24bubaSBuaGF1LiAgDQoNCi0gJEhfMSQgKEdp4bqjIHRodXnhur90IMSR4buRaSk6IEPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBt4bupYyDEkeG7mSBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nIChgV29ya0xpZmVCYWxhbmNlYCkgdsOgIHTDrG5oIHRy4bqhbmcgbmdo4buJIHZp4buHYyAoYEF0dHJpdGlvbmApLiBIYWkgYmnhur9uIGPDsyBsacOqbiBxdWFuIHbhu5tpIG5oYXUuDQoNCmBgYHtyfQ0KY2hpc3Ffd2xiIDwtIGNoaXNxLnRlc3QodGFibGVfYXR0cml0aW9uX3dsYikNCmNoaXNxX3dsYg0KYGBgDQoNCioqS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KLSAqKkdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogQ2hpIGLDrG5oIHBoxrDGoW5nIChYLXNxdWFyZWQpKio6IDE2LjMyNSAgDQoNCi0gKipC4bqtYyB04buxIGRvIChkZikqKjogMyAgDQoNCi0gKipHacOhIHRy4buLIHAtdmFsdWUqKjogMC4wMDA5NzI2ICANCg0KVsOsICoqcC12YWx1ZSA8IDAuMDUqKiwgdGEgKipiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAqKiwgdOG7qWMgbMOgIGPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiBjaG8gdGjhuqV5ICoqbeG7qWMgxJHhu5kgY8OibiBi4bqxbmcgZ2nhu69hIGPDtG5nIHZp4buHYyB2w6AgY3Xhu5ljIHPhu5FuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyB24bubaSB0w6xuaCB0cuG6oW5nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4qKi4NCg0KIyMjIyAqKjMuMi40LjMgS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyoqDQoNClRyb25nIHBo4bqnbiBuw6B5LCB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCAqKsaw4bubYyBsxrDhu6NuZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgbmdo4buJIHZp4buHYyoqIHRyb25nIG5ow7NtICoqbmjDom4gdmnDqm4gY8OzIG3hu6ljIGPDom4gYuG6sW5nIGPDtG5nIHZp4buHYyDigJMgY3Xhu5ljIHPhu5FuZyBrw6ltKiog4oCTIGJhbyBn4buTbSBjw6FjIG3hu6ljICoqV29ya0xpZmVCYWxhbmNlID0gMSB2w6AgMioqLg0KDQpWaeG7h2MgZ+G7mXAgY8OhYyBt4bupYyDEkcOhbmggZ2nDoSBuw6B5IHRow6BuaCBuaMOzbSDigJxDw6JuIGLhurFuZyBrw6lt4oCdIGdpw7pwIMSRxqFuIGdp4bqjbiBow7NhIHBow6JuIHTDrWNoIHbDoCBuaOG6pW4gbeG6oW5oIHTDoWMgxJHhu5luZyB0acOqdSBj4buxYyBj4bunYSB2aeG7h2MgbeG6pXQgY8OibiBi4bqxbmcgxJHhur9uIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MuDQoNCioqTeG7pWMgdGnDqnU6KiogS2nhu4NtIHRyYSB4ZW0gKip04bu3IGzhu4cgbmdo4buJIHZp4buHYyB0cm9uZyBuaMOzbSBuw6B5IGPDsyBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4Mgc28gduG7m2kgbeG7kWMgNTAlIGhheSBraMO0bmcqKiDigJMgbeG7qWMgcGjhuqNuIMOhbmggbeG7mXQgbmd1eSBjxqEgbmdo4buJIHZp4buHYyBy4bqldCBjYW8uDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KLSAkSF8wJDogVOG7tyBs4buHIG5naOG7iSB2aeG7h2MgdHJvbmcgbmjDs20gKkPDom4gYuG6sW5nIGvDqW0qIGLhurFuZyAwLjUgIA0KDQotICRIXzEkOiBU4bu3IGzhu4cgbmdo4buJIHZp4buHYyB0cm9uZyBuaMOzbSAqQ8OibiBi4bqxbmcga8OpbSoga2jDoWMgMC41DQoNCmBgYHtyfQ0KIyBH4buZcCBXb3JrTGlmZUJhbGFuY2UgdGjDoG5oIDIgbmjDs206IEPDom4gYuG6sW5nIGvDqW0gKDEsMikgdsOgIEPDom4gYuG6sW5nIHThu5F0ICgzLDQpDQpkYXRhMSRXTEJfZ3JvdXAgPC0gaWZlbHNlKGRhdGExJFdvcmtMaWZlQmFsYW5jZSAlaW4lIGMoMSwgMiksICJDw6JuIGLhurFuZyBrw6ltIiwgIkPDom4gYuG6sW5nIHThu5F0IikNCmRhdGExJFdMQl9ncm91cCA8LSBmYWN0b3IoZGF0YTEkV0xCX2dyb3VwLCBsZXZlbHMgPSBjKCJDw6JuIGLhurFuZyB04buRdCIsICJDw6JuIGLhurFuZyBrw6ltIikpDQojIEzhu41jIGThu68gbGnhu4d1IGNobyBuaMOzbSAiQ8OibiBi4bqxbmcga8OpbSINCnN1YnNldF93bGJfbG93IDwtIHN1YnNldChkYXRhMSwgV0xCX2dyb3VwID09ICJDw6JuIGLhurFuZyBrw6ltIikNCnRhYmxlX3dsYl9sb3cgPC0gdGFibGUoc3Vic2V0X3dsYl9sb3ckQXR0cml0aW9uKQ0KDQojIEhp4buDbiB0aOG7iyBi4bqjbmcgdOG6p24gc+G7kSBuZ2jhu4kgdmnhu4djDQp0YWJsZV93bGJfbG93DQoNCiMgxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSA5NSUgdsOgIGtp4buDbSDEkeG7i25oIHThu7cgbOG7hyBraMOhYyAwLjUNCnByb3AudGVzdCh4ID0gdGFibGVfd2xiX2xvd1siWWVzIl0sIG4gPSBzdW0odGFibGVfd2xiX2xvdyksIHAgPSAwLjUpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoqKg0KDQotICoqVOG7tyBs4buHIG5naOG7iSB2aeG7h2MgxrDhu5tjIGzGsOG7o25nKiogdHJvbmcgbmjDs20gKkPDom4gYuG6sW5nIGvDqW0qIGzDoCAqKjE5LjYlKiogKHDMgiA9IDAuMTk1OCkNCg0KLSAqKktob+G6o25nIHRpbiBj4bqteSA5NSUqKiBjaG8gdOG7tyBs4buHIG7DoHkgbuG6sW0gdHJvbmcga2hv4bqjbmcgKipbMTUuOTclOyAyMy43NCVdKioNCg0KLSAqKkdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogQ2hpIGLDrG5oIHBoxrDGoW5nKio6IFjCsiA9IDE1NS43OCwgZGYgPSAxDQoNCi0gKipHacOhIHRy4buLIHAtdmFsdWUqKjogPCAyLjJlLTE2IChy4bqldCBuaOG7jywgZ+G6p24gYuG6sW5nIDApDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gVuG7m2kgKipwLXZhbHVlIHLhuqV0IG5o4buPICg8IDAuMDUpKiosIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAqKiwgbmdoxKlhIGzDoCBjw7MgKipi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqioqIGNobyB0aOG6pXkgKip04bu3IGzhu4cgbmdo4buJIHZp4buHYyB0cm9uZyBuaMOzbSBjw7MgbeG7qWMgY8OibiBi4bqxbmcgY8O0bmcgdmnhu4djIOKAkyBjdeG7mWMgc+G7kW5nIGvDqW0ga2jDoWMgNTAlKiouDQoNCi0gVHLDqm4gdGjhu7FjIHThur8sIHThu7cgbOG7hyBuZ2jhu4kgdmnhu4djIHRyb25nIG5ow7NtIG7DoHkgbMOgICoqMTkuNiUqKiwgdGjhuqVwIGjGoW4gbmhp4buBdSBzbyB24bubaSBt4buRYyA1MCUg4oCTIG5oxrBuZyAqKmNhbyBoxqFuIHNvIHbhu5tpIHThu7cgbOG7hyB0cnVuZyBiw6xuaCB0b8OgbiBt4bqrdSAoMTYuMSUpKiouIMSQaeG7gXUgbsOgeSBuaOG6pW4gbeG6oW5oIHLhurFuZyAqKm3hu6ljIMSR4buZIGPDom4gYuG6sW5nIGPDtG5nIHZp4buHYyDigJMgY3Xhu5ljIHPhu5FuZyB0aOG6pXAgbMOgIG3hu5l0IHnhur91IHThu5EgcuG7p2kgcm8gxJHDoW5nIGvhu4MqKiwgZMO5IGNoxrBhIMSR4bqhdCDEkeG6v24gbeG7qWMgYsOhbyDEkeG7mW5nIG5oxrAgNTAlLCBuaMawbmcgduG6q24gY+G6p24gxJHGsOG7o2MgKipxdWFuIHTDom0gxJHhurdjIGJp4buHdCB0cm9uZyBjw6FjIGNoaeG6v24gbMaw4bujYyBnaeG7ryBjaMOibiBuaMOibiB2acOqbioqLg0KDQojIyMjICoqMy4yLjQuNCDGr+G7m2MgbMaw4bujbmcgbmd1eSBjxqEgdMawxqFuZyDEkeG7kWkgKFJlbGF0aXZlIFJpc2spKioNCg0KVHJvbmcgcGjhuqduIG7DoHksIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oICoqxrDhu5tjIGzGsOG7o25nIG5ndXkgY8ahIHTGsMahbmcgxJHhu5FpIChSZWxhdGl2ZSBSaXNrIOKAkyBSUikqKiBuaOG6sW0gxJHDoW5oIGdpw6EgKipuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puIGPDsyBt4bupYyBjw6JuIGLhurFuZyBjw7RuZyB2aeG7h2Mg4oCTIGN14buZYyBz4buRbmcga8OpbSoqIChXb3JrTGlmZUJhbGFuY2UgPSAxIGhv4bq3YyAyKSBzbyB24bubaSBuaMOzbSBjw7MgKipjw6JuIGLhurFuZyB04buRdCoqIChXb3JrTGlmZUJhbGFuY2UgPSAzIGhv4bq3YyA0KS4NCg0KKipN4bulYyB0acOqdToqKiBYw6FjIMSR4buLbmggbGnhu4d1IHZp4buHYyAqKm3huqV0IGPDom4gYuG6sW5nIGdp4buvYSBjw7RuZyB2aeG7h2MgdsOgIGN14buZYyBz4buRbmcqKiBjw7MgbMOgbSAqKnTEg25nIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MqKiBt4buZdCBjw6FjaCAqKmPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiBoYXkga2jDtG5nLg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIDJ4MiBnaeG7r2EgQXR0cml0aW9uIHbDoCBuaMOzbSBXb3JrTGlmZUJhbGFuY2UNCnRhYmxlX3JyX3dsYiA8LSB0YWJsZShkYXRhMSRBdHRyaXRpb24sIGRhdGExJFdMQl9ncm91cCkNCnJyX3dsYiA8LSByaXNrcmF0aW8odGFibGVfcnJfd2xiKQ0KcnJfd2xiDQpgYGANCg0KKipL4bq/dCBxdeG6ozoqKg0KDQotICoqUmlzayBSYXRpbyAoUlIpKiogxrDhu5tjIGzGsOG7o25nOiAqKjEuMjcqKiBuZ2jEqWEgbMOgICoqbmd1eSBjxqEgbmdo4buJIHZp4buHYyDhu58gbmjDs20g4oCcY8OibiBi4bqxbmcga8OpbeKAnSBjYW8gaMahbiAxLjI3IGzhuqduKiogc28gduG7m2kgbmjDs20g4oCcY8OibiBi4bqxbmcgdOG7kXTigJ0uDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlKiogY2hvIFJSOiB04burICoqMS4wNCDEkeG6v24gMS41NCoqDQoNCi0gKipwLXZhbHVlKio6IGtob+G6o25nICoqMC4wMjM5KiogKGNoaS1zcXVhcmUpDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gVsOsICoqUlIgPiAxKiogdsOgICoqcC12YWx1ZSA8IDAuMDUqKiwgdGEgY8OzIHRo4buDIGvhur90IGx14bqtbiBy4bqxbmcgKipz4buxIG3huqV0IGPDom4gYuG6sW5nIGdp4buvYSBjw7RuZyB2aeG7h2MgdsOgIGN14buZYyBz4buRbmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgdGjhu5FuZyBrw6ogduG7m2kga2jhuqMgbsSDbmcgbmdo4buJIHZp4buHYyoqLg0KDQotIEPhu6UgdGjhu4MsICoqbmd1eSBjxqEgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiB0cm9uZyBuaMOzbSDigJxjw6JuIGLhurFuZyBrw6lt4oCdIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIOKAnGPDom4gYuG6sW5nIHThu5F04oCdKiosIHbDoCAqKlJSID0gMS4yNyoqIGzDoCBt4buZdCAqKmNo4buJIGLDoW8gcXVhbiB0cuG7jW5nIGPhuqduIMSRxrDhu6NjIGRvYW5oIG5naGnhu4dwIGzGsHUgw70gdHJvbmcgY2jDrW5oIHPDoWNoIG5ow6JuIHPhu7EqKi4NCg0KIyMjIyAqKjMuMi40LjUgxq/hu5tjIGzGsOG7o25nIHThu7cgc+G7kSBjaMOqbmggKE9kZHMgUmF0aW8pKioNCg0KVHJvbmcgcGjhuqduIG7DoHksIHTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oICoqxrDhu5tjIGzGsOG7o25nIHThu7cgc+G7kSBjaMOqbmggKE9kZHMgUmF0aW8g4oCTIE9SKSoqIG5o4bqxbSBraeG7g20gdHJhIHhlbSAqKm3hu6ljIMSR4buZIGPDom4gYuG6sW5nIGPDtG5nIHZp4buHYyDigJMgY3Xhu5ljIHPhu5FuZyoqIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gKipraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djKiogY+G7p2EgbmjDom4gdmnDqm4gaGF5IGtow7RuZywgdGjDtG5nIHF1YSBzbyBzw6FuaCAqKnThu7cgbOG7hyBvZGRzIG5naOG7iSB2aeG7h2MqKiBnaeG7r2EgaGFpIG5ow7NtIGPDom4gYuG6sW5nIGvDqW0gdsOgIGPDom4gYuG6sW5nIHThu5F0Lg0KDQpgYGB7cn0NCm9yX3dsYiA8LSBvZGRzcmF0aW8odGFibGVfcnJfd2xiKQ0Kb3Jfd2xiDQpgYGANCg0KKipL4bq/dCBxdeG6ozoqKg0KDQotICoqT2RkcyBSYXRpbyAoT1IpKiogxrDhu5tjIGzGsOG7o25nOiAqKjEuNDEqKiBuZ2jEqWEgbMOgICoqdOG7tyBs4buHIG9kZHMgbmdo4buJIHZp4buHYyDhu58gbmjDs20g4oCcY8OibiBi4bqxbmcga8OpbeKAnSBjYW8gaMahbiAxLjQxIGzhuqduKiogc28gduG7m2kgbmjDs20g4oCcY8OibiBi4bqxbmcgdOG7kXTigJ0uDQoNCi0gKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlKiogY2hvIE9SOiB04burICoqMS4wNSDEkeG6v24gMS44OSoqDQoNCi0gKipwLXZhbHVlKio6IGtob+G6o25nICoqMC4wMjIqKiAoY2hpLXNxdWFyZSkNCg0KKipL4bq/dCBsdeG6rW46KioNCg0KLSBWw6wgKipPUiA+IDEqKiB2w6AgKipwLXZhbHVlIDwgMC4wNSoqLCB0YSBjw7MgdGjhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyAqKm3hu6ljIMSR4buZIGPDom4gYuG6sW5nIGdp4buvYSBjw7RuZyB2aeG7h2MgdsOgIGN14buZYyBz4buRbmcgY8OzIGxpw6puIHF1YW4gdGjhu5FuZyBrw6ogxJHhur9uIGto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4qKi4NCg0KLSBD4bulIHRo4buDLCAqKm5ow6JuIHZpw6puIHRodeG7mWMgbmjDs20gY8OzIFdvcmtMaWZlQmFsYW5jZSBrw6ltIGPDsyBraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIMSRw6FuZyBr4buDKiosIHbDoCAqKk9kZHMgUmF0aW8gPSAxLjQxKiogbMOgIG3hu5l0IGNo4buJIHPhu5EgxJHDoW5nIGNow7ogw70sIHBo4bqjbiDDoW5oIHLhurFuZyAqKnPhu7EgbeG6pXQgY8OibiBi4bqxbmcgbMOgIHnhur91IHThu5EgcuG7p2kgcm8gdHJvbmcgY2jDrW5oIHPDoWNoIGdp4buvIGNow6JuIG5ow6JuIHPhu7EgY+G7p2EgZG9hbmggbmdoaeG7h3AqKi4NCg0KIyMgKiozLjMgTcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibioqDQoNCiMjIyAqKjMuMy4xIE3DtCBow6xuaCBo4buTaSBxdXkgY2hvIGPhurdwIE92ZXJUaW1lIOKAkyBBdHRyaXRpb24qKg0KDQojIyMjICoqMy4zLjEuMSBNw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCoqDQoNCk3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMaW5lYXIgUHJvYmFiaWxpdHkgTW9kZWwg4oCTIExQTSkgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgxJHDoW5oIGdpw6EgbeG7kWkgcXVhbiBo4buHIGdp4buvYSB2aeG7h2MgKipsw6BtIHRow6ptIGdp4budIChPdmVyVGltZSkqKiB2w6AgKipraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djIChBdHRyaXRpb24pKiogY+G7p2EgbmjDom4gdmnDqm4uIFRyb25nIG3DtCBow6xuaCBuw6B5LCBiaeG6v24gcGjhu6UgdGh14buZYyBsw6AgbeG7mXQgYmnhur9uIG5o4buLIHBow6JuIHRo4buDIGhp4buHbiB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBuZ2jhu4kgdmnhu4djLg0KDQoqKk3DtCBow6xuaCBsw70gdGh1eeG6v3QgxJHGsOG7o2MgeMOieSBk4buxbmcgbmjGsCBzYXU6KioNCg0KXFsNClx0ZXh0e0F0dHJpdGlvbn1faSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e092ZXJUaW1lfV9pICsgXHZhcmVwc2lsb25faQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KLSBcKFx0ZXh0e0F0dHJpdGlvbn1faVwpOiBiaeG6v24gcGjhu6UgdGh14buZYywgbmjhuq1uIGdpw6EgdHLhu4sgMSBu4bq/dSBuaMOibiB2acOqbiBuZ2jhu4kgdmnhu4djLCAwIG7hur91IGtow7RuZyBuZ2jhu4kuICANCg0KLSBcKFx0ZXh0e092ZXJUaW1lfV9pXCk6IGJp4bq/biDEkeG7mWMgbOG6rXAsIG5o4bqtbiBnacOhIHRy4buLIDEgbuG6v3UgY8OzIGzDoG0gdGjDqm0gZ2nhu50sIDAgbuG6v3Uga2jDtG5nLiAgDQoNCi0gXChcYmV0YV8wXCk6IHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgdHJ1bmcgYsOsbmggY+G7p2EgbmjDs20ga2jDtG5nIGzDoG0gdGjDqm0uICANCg0KLSBcKFxiZXRhXzFcKTogbeG7qWMgdGhheSDEkeG7lWkgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBraGkgY2h1eeG7g24gdOG7qyBraMO0bmcgbMOgbSB0aMOqbSBzYW5nIGzDoG0gdGjDqm0uICANCg0KYGBge3J9DQojIE3DoyBow7NhIGzhuqFpIGJp4bq/biBBdHRyaXRpb24gdsOgIE92ZXJUaW1lIGTGsOG7m2kgZOG6oW5nIG5o4buLIHBow6JuDQpkYXRhMSRBdHRyaXRpb25fYmluIDwtIGlmZWxzZShkYXRhMSRBdHRyaXRpb24gPT0gIlllcyIsIDEsIDApDQpkYXRhMSRPdmVyVGltZV9iaW4gPC0gaWZlbHNlKGRhdGExJE92ZXJUaW1lID09ICJZZXMiLCAxLCAwKQ0KDQojIMav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaA0KbW9kZWxfbHBtIDwtIGxtKEF0dHJpdGlvbl9iaW4gfiBPdmVyVGltZV9iaW4sIGRhdGEgPSBkYXRhMSkNCg0KIyBIaeG7g24gdGjhu4sga+G6v3QgcXXhuqMNCnN1bW1hcnkobW9kZWxfbHBtKQ0KYGBgDQoNCioqS+G6v3QgcXXhuqMgbcO0IGjDrG5oOioqDQoNClxbDQpcaGF0e1x0ZXh0e0F0dHJpdGlvbn19X2kgPSAwLjEwNDM2ICsgMC4yMDA5MiBcY2RvdCBcdGV4dHtPdmVyVGltZX1faQ0KXF0NCg0KKipEaeG7hW4gZ2nhuqNpOioqDQoNCi0gKipI4buHIHPhu5EgY2jhurduIChJbnRlcmNlcHQpID0gMC4xMDQzNioqOiBYw6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puICoqa2jDtG5nIGzDoG0gdGjDqm0gZ2nhu50qKiBsw6Aga2hv4bqjbmcgKioxMC40NCUqKi4gIA0KDQotICoqSOG7hyBz4buRIE92ZXJUaW1lX2JpbiA9IDAuMjAwOTIqKjogTmjDom4gdmnDqm4gKipjw7MgbMOgbSB0aMOqbSBnaeG7nSoqIGPDsyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuICoqa2hv4bqjbmcgMjAuMDkgxJFp4buDbSBwaOG6p24gdHLEg20qKiBzbyB24bubaSBuaMOzbSBraMO0bmcgbMOgbSB0aMOqbS4gIA0KDQotICoqR2nDoSB0cuG7iyBwLXZhbHVlIDwgMC4wMDEqKjogSOG7hyBz4buRIE92ZXJUaW1lIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvLg0KIA0KKipL4bq/dCBsdeG6rW46KiogTMOgbSB0aMOqbSBnaeG7nSBjw7MgKipt4buRaSBxdWFuIGjhu4cgZMawxqFuZyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqIHbhu5tpIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MuIFR1eSBuaGnDqm4sIGRvIG3DtCBow6xuaCBMUE0gY8OzIG5o4buvbmcgKipo4bqhbiBjaOG6vyBuaOG6pXQgxJHhu4tuaCoqIG5oxrAgZOG7sSDEkW/DoW4gbmdvw6BpIGtob+G6o25nIFswLDFdIHbDoCBwaMawxqFuZyBzYWkgc2FpIHPhu5Ega2jDtG5nIMSR4buTbmcgbmjhuqV0LCBj4bqnbiBraeG7g20gxJHhu4tuaCBs4bqhaSBr4bq/dCBxdeG6oyBi4bqxbmcgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIGtow6FjIG5oxrAgKipMb2dpdCoqLCAqKlByb2JpdCoqLCB2w6AgKipDbG9nbG9nKiogdHJvbmcgY8OhYyBwaOG6p24gdGnhur9wIHRoZW8uDQoNCiMjIyMgKiozLjMuMS4yIE3DtCBow6xuaCBMb2dpdCoqDQoNCk3DtCBow6xuaCBMb2dpdCDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyDEkcOhbmggZ2nDoSDhuqNuaCBoxrDhu59uZyBj4bunYSB2aeG7h2MgbMOgbSB0aMOqbSBnaeG7nSAoKipPdmVyVGltZSoqKSDEkeG6v24geMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyAoKipBdHRyaXRpb24qKikgY+G7p2EgbmjDom4gdmnDqm4uIE3DtCBow6xuaCBz4butIGThu6VuZyBow6BtIHBow6JuIHBo4buRaSBsb2dpc3RpYywgcGjDuSBo4bujcCBjaG8gY8OhYyBiaeG6v24gcGjhu6UgdGh14buZYyBuaOG7iyBwaMOibi4NCg0KKipNw7QgaMOsbmggbMO9IHRodXnhur90OioqDQoNClxbDQpcbG9nXGxlZnQoXGZyYWN7UChcdGV4dHtBdHRyaXRpb259X2kgPSAxKX17MSAtIFAoXHRleHR7QXR0cml0aW9ufV9pID0gMSl9XHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e092ZXJUaW1lfV9pDQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIFx0ZXh0e0F0dHJpdGlvbn1faSBcKTogYmnhur9uIHBo4bulIHRodeG7mWMgKDEgPSBuZ2jhu4kgdmnhu4djLCAwID0ga2jDtG5nIG5naOG7iSB2aeG7h2MpICANCg0KLSBcKCBcdGV4dHtPdmVyVGltZX1faSBcKTogYmnhur9uIMSR4buZYyBs4bqtcCAoMSA9IGPDsyBsw6BtIHRow6ptLCAwID0ga2jDtG5nIGzDoG0gdGjDqm0pICANCg0KLSBcKCBcYmV0YV8xIFwpOiBsb2ctb2RkcyBuZ2jhu4kgdmnhu4djIHTEg25nIHRow6ptIGtoaSBuaMOibiB2acOqbiBsw6BtIHRow6ptDQoNCmBgYHtyfQ0KIyDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIExvZ2l0DQptb2RlbF9sb2dpdCA8LSBnbG0oQXR0cml0aW9uX2JpbiB+IE92ZXJUaW1lX2JpbiwgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpDQoNCiMgS+G6v3QgcXXhuqMgbcO0IGjDrG5oDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0KQ0KYGBgDQoNCioqUGjGsMahbmcgdHLDrG5oIGjhu5NpIHF1eToqKg0KDQpcWw0KXGxvZ1xsZWZ0KFxmcmFje1AoXHRleHR7QXR0cml0aW9ufSA9IDEpfXsxIC0gUChcdGV4dHtBdHRyaXRpb259ID0gMSl9XHJpZ2h0KSA9IC0yLjE0OTYgKyAxLjMyNzQgXGNkb3QgXHRleHR7T3ZlclRpbWV9DQpcXQ0KDQoqKkRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqM6KioNCg0KLSAqKkludGVyY2VwdCA9IC0yLjE0OTYqKjogS2hpIG5ow6JuIHZpw6puIGtow7RuZyBsw6BtIHRow6ptIGdp4budLCBsb2ctb2RkcyBuZ2jhu4kgdmnhu4djIHRydW5nIGLDrG5oIGzDoCAtMi4xNDk2Lg0KDQotICoqT3ZlclRpbWVfYmluID0gMS4zMjc0Kio6IE7hur91IG5ow6JuIHZpw6puIGPDsyBsw6BtIHRow6ptIGdp4budLCBsb2ctb2RkcyBuZ2jhu4kgdmnhu4djIGPhu6dhIGjhu40gdMSDbmcgdGjDqm0gMS4zMjc0IMSRxqFuIHbhu4suDQoNCi0gKipM4bqleSBleHBvbmVudGlhbDoqKg0KDQpcWw0KXHRleHR7T2RkcyBSYXRpb30gPSBcZXhwKDEuMzI3NCkgXGFwcHJveCAzLjc3DQpcXQ0KDQrihpIgTmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSBjw7Mgb2RkcyBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIGtob+G6o25nICoqMy43NyBs4bqnbioqIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBsw6BtIHRow6ptLg0KDQotICoqcC12YWx1ZSA8IDJlLTE2Kio6IEjhu4cgc+G7kSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqICoqcuG6pXQgY2FvKiouDQoNCioqS+G6v3QgbHXhuq1uOioqIE3DtCBow6xuaCBMb2dpdCBjaG8gdGjhuqV5IHLhurFuZyAqKmzDoG0gdGjDqm0gZ2nhu50gbMOgIG3hu5l0IHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MqKi4gTmjDom4gdmnDqm4gY8OzIGzDoG0gdGjDqm0gY8OzIGto4bqjIG7Eg25nIHLhu51pIGLhu48gY8O0bmcgdmnhu4djICoqY2FvIGjGoW4gxJHDoW5nIGvhu4MqKiwgxJFp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kgY8OhYyBr4bq/dCBxdeG6oyBtw7QgdOG6oyB2w6Aga2nhu4NtIMSR4buLbmggdHLGsOG7m2MgxJHDsy4gTcO0IGjDrG5oIExvZ2l0IGto4bqvYyBwaOG7pWMgxJHGsOG7o2MgaOG6oW4gY2jhur8gY+G7p2EgbcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggdsOgIG1hbmcgbOG6oWkgY8OhYyDGsOG7m2MgbMaw4bujbmcgxJHDoW5nIHRpbiBj4bqteSBoxqFuIMSR4buRaSB24bubaSBiaeG6v24gcGjhu6UgdGh14buZYyBuaOG7iyBwaMOibi4NCg0KIyMjIyAqKjMuMy4xLjMgTcO0IGjDrG5oIFByb2JpdCoqDQoNCk3DtCBow6xuaCBQcm9iaXQgc+G7rSBk4bulbmcgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5IChDREYpIMSR4buDIGxpw6puIGvhur90IGJp4bq/biDEkeG7mWMgbOG6rXAgduG7m2kgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24uIMSQw6J5IGzDoCBt4buZdCBs4buxYSBjaOG7jW4gcGjhu5UgYmnhur9uIGNobyBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4sIHTGsMahbmcgdOG7sSBuaMawIExvZ2l0IG5oxrBuZyBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluIHRoYXkgdsOsIGxvZ2lzdGljLg0KDQoqKlBoxrDGoW5nIHRyw6xuaCBtw7QgaMOsbmg6KioNCg0KXFsNClAoXHRleHR7QXR0cml0aW9ufV9pID0gMSkgPSBcUGhpKFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e092ZXJUaW1lfV9pKQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KLSBcKFxQaGkoXGNkb3QpXCk6IEjDoG0gcGjDom4gcGjhu5FpIGNodeG6qW4gdMOtY2ggbMWpeS4gIA0KDQoNCi0gXChcdGV4dHtBdHRyaXRpb259X2lcKTogQmnhur9uIHBo4bulIHRodeG7mWMsIG5o4bqtbiBnacOhIHRy4buLIDEgbuG6v3UgbmjDom4gdmnDqm4gbmdo4buJIHZp4buHYywgMCBu4bq/dSBraMO0bmcuDQoNCi0gXChcdGV4dHtPdmVyVGltZX1faVwpOiBCaeG6v24gxJHhu5ljIGzhuq1wLCBuaOG6rW4gZ2nDoSB0cuG7iyAxIG7hur91IGPDsyBsw6BtIHRow6ptIGdp4budLCAwIG7hur91IGtow7RuZy4gIA0KDQotIFwoXGJldGFfMVwpOiDEkG8gbMaw4budbmcgbeG7qWMgdMSDbmcgdHJvbmcg4oCcY2jhu4kgc+G7kSBjaHXhuqlu4oCdIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgZG8gbMOgbSB0aMOqbSBnaeG7nS4NCg0KYGBge3J9DQptb2RlbF9wcm9iaXQgPC0gZ2xtKEF0dHJpdGlvbl9iaW4gfiBPdmVyVGltZV9iaW4sIGRhdGEgPSBkYXRhMSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSkNCnN1bW1hcnkobW9kZWxfcHJvYml0KQ0KYGBgDQoNCioqUGjGsMahbmcgdHLDrG5oIGPhu6UgdGjhu4MgKHNhdSBraGkgxrDhu5tjIGzGsOG7o25nKToqKg0KDQpcWw0KUChcdGV4dHtBdHRyaXRpb259ID0gMSkgPSBcUGhpKC0xLjI1NzEgKyAwLjc0NzggXGNkb3QgXHRleHR7T3ZlclRpbWV9KQ0KXF0NCg0KKipHaeG6o2kgdGjDrWNoIGvhur90IHF14bqjOioqDQoNCi0gS2hpICoqT3ZlclRpbWUgPSAwKiogKGtow7RuZyBsw6BtIHRow6ptKSwgYmnhu4N1IHRo4bupYyBiw6puIHRyb25nIGjDoG0gXChcUGhpXCkgbMOgOg0KICBcWw0KICBcUGhpKC0xLjI1NzEpIFxhcHByb3ggMC4xMDQgXFJpZ2h0YXJyb3cgXHRleHR7WMOhYyBzdeG6pXQgbmdo4buJIHZp4buHY30gXGFwcHJveCBcdGV4dGJmezEwLjQlfQ0KICBcXQ0KDQotIEtoaSAqKk92ZXJUaW1lID0gMSoqIChjw7MgbMOgbSB0aMOqbSksIGJp4buDdSB0aOG7qWMgbMOgOg0KICBcWw0KICBcUGhpKC0xLjI1NzEgKyAwLjc0NzgpID0gXFBoaSgtMC41MDkzKSBcYXBwcm94IDAuMzA1IFxSaWdodGFycm93IFx0ZXh0e1jDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2N9IFxhcHByb3ggXHRleHRiZnszMC41JX0NCiAgXF0NCg0KLSBI4buHIHPhu5EgXChcdGV4dHtPdmVyVGltZV9iaW59ID0gMC43NDc4XCkgY2hvIHRo4bqleSBu4bq/dSBuaMOibiB2acOqbiBjw7MgbMOgbSB0aMOqbSBnaeG7nSwg4oCcY2jhu4kgc+G7kSBjaHXhuqlu4oCdIChnacOhIHRy4buLIG7hu5lpIHN1eSB0cm9uZyBow6BtIHBow6JuIHBo4buRaSBjaHXhuqluKSB0xINuZyB0aMOqbSAwLjc0NzggxJHGoW4gduG7iywgbMOgbSB0xINuZyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIHThu6sga2hv4bqjbmcgMTAuNCUgbMOqbiAzMC41JS4NCg0KLSAqKnAtdmFsdWUgPCAyZS0xNioqOiBL4bq/dCBxdeG6oyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhbyDigJMg4bqjbmggaMaw4bufbmcgY+G7p2EgbMOgbSB0aMOqbSBnaeG7nSBsw6AgcsO1IHLDoG5nIHbDoCBjw7MgdGjhuq10Lg0KDQoqKkvhur90IGx14bqtbjoqKiBNw7QgaMOsbmggUHJvYml0IGNobyB0aOG6pXkgbmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuaMOzbSBraMO0bmcgbMOgbSB0aMOqbS4gTeG6t2MgZMO5IGjhu4cgc+G7kSBraMO0bmcgdGjhu4MgZGnhu4VuIGdp4bqjaSB0cuG7sWMgdGnhur9wIG5oxrAgT2RkcyBSYXRpbyAodHJvbmcgTG9naXQpLCB2aeG7h2MgY2h1eeG7g24gxJHhu5VpIHNhbmcgeMOhYyBzdeG6pXQgZ2nDunAgdGEgdGjhuqV5IHLDtSB0w6FjIMSR4buZbmcgdGjhu7FjIHThur8uIE3DtCBow6xuaCBuw6B5IGzDoCBt4buZdCBjw7RuZyBj4bulIG3huqFuaCB0cm9uZyB2aeG7h2MgcGjDom4gdMOtY2ggaMOgbmggdmkgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbi4NCg0KIyMjIyAqKjMuMy4xLjQgTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpNw7QgaMOsbmggKipDbG9nbG9nIChDb21wbGVtZW50YXJ5IExvZy1Mb2cpKiogbMOgIG3hu5l0IGzhu7FhIGNo4buNbiB0aMOtY2ggaOG7o3AgdHJvbmcgaOG7k2kgcXV5IG5o4buLIHBow6JuIGtoaSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBuaOG7jyBob+G6t2MgcGjDom4gcGjhu5FpIGThu68gbGnhu4d1IGPDsyB0w61uaCBi4bqldCDEkeG7kWkgeOG7qW5nLiBLaMOhYyB24bubaSBMb2dpdCB2w6AgUHJvYml0LCBtw7QgaMOsbmggbsOgeSBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGThuqFuZyBsb2coLWxvZygxIC0gcCkpIMSR4buDIGJp4bq/biDEkeG7lWkgeMOhYyBzdeG6pXQsIGNobyBwaMOpcCBtw7QgdOG6oyB04buRdCBoxqFuIGPDoWMgdMOsbmggaHXhu5FuZyBjw7MgxJHhu5kgZOG7kWMgbOG7m24g4bufIMSR4bqndSBtw7p0IHBow6JuIHBo4buRaS4NCg0KKipQaMawxqFuZyB0csOsbmggbMO9IHRodXnhur90IGPhu6dhIG3DtCBow6xuaDoqKg0KDQpcWw0KXGxvZ1xsZWZ0KCAtXGxvZygxIC0gUChcdGV4dHtBdHRyaXRpb259X2kgPSAxKSkgXHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e092ZXJUaW1lfV9pDQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoUChcdGV4dHtBdHRyaXRpb259X2kgPSAxKVwpOiB4w6FjIHN14bqldCBuaMOibiB2acOqbiBuZ2jhu4kgdmnhu4djICANCg0KLSBcKFx0ZXh0e092ZXJUaW1lfV9pXCk6IGJp4bq/biBuaOG7iyBwaMOibiwgMSBu4bq/dSBuaMOibiB2acOqbiBjw7MgbMOgbSB0aMOqbSBnaeG7nSwgMCBu4bq/dSBraMO0bmcgIA0KDQotIFwoXGJldGFfMCwgXGJldGFfMVwpOiBjw6FjIGjhu4cgc+G7kSBo4buTaSBxdXkgY+G6p24gxrDhu5tjIGzGsOG7o25nICANCg0KYGBge3J9DQojIMav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggQ2xvZ2xvZw0KbW9kZWxfY2xvZ2xvZyA8LSBnbG0oQXR0cml0aW9uX2JpbiB+IE92ZXJUaW1lX2JpbiwgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSkNCg0KIyBL4bq/dCBxdeG6oyBtw7QgaMOsbmgNCnN1bW1hcnkobW9kZWxfY2xvZ2xvZykNCmBgYA0KDQoqKlBoxrDGoW5nIHRyw6xuaCBj4bulIHRo4buDIHNhdSBraGkgxrDhu5tjIGzGsOG7o25nIHThu6sgZOG7ryBsaeG7h3U6KioNCg0KXFsNClxsb2dcbGVmdCggLVxsb2coMSAtIFApIFxyaWdodCkgPSAtMi4yMDUzICsgMS4xOTU0IFxjZG90IFx0ZXh0e092ZXJUaW1lfQ0KXF0NCg0KKipEaeG7hW4gZ2nhuqNpIGvhur90IHF14bqjOioqDQoNCi0gKipJbnRlcmNlcHQgPSAtMi4yMDUzKio6IEtoaSBuaMOibiB2acOqbiBraMO0bmcgbMOgbSB0aMOqbSBnaeG7nSwgZ2nDoSB0cuG7iyBsb2coLWxvZygxIC0gcCkpIGzDoCAtMi4yMDUzLCB0xrDGoW5nIOG7qW5nIHbhu5tpIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2Mga2hv4bqjbmcgKioxMC4wJSoqLg0KDQotICoqSOG7hyBz4buRIE92ZXJUaW1lX2JpbiA9IDEuMTk1NCoqOiBOaMOibiB2acOqbiBjw7MgbMOgbSB0aMOqbSBnaeG7nSBz4bq9IGPDsyBsb2coLWxvZygxIC0gcCkpIHTEg25nIHRow6ptIDEuMTk1NCDEkcahbiB24buLLiBLaGkgY2h1eeG7g24gxJHhu5VpIHNhbmcgeMOhYyBzdeG6pXQsIHRhIG5o4bqtbiDEkcaw4bujYzoNCg0KXFsNClxiZWdpbnthbGlnbmVkfQ0KUChcdGV4dHtPdmVyVGltZX0gPSAwKSAmPSAxIC0gXGV4cFxsZWZ0KC1cZXhwKC0yLjIwNTMpXHJpZ2h0KSBcYXBwcm94IDAuMTAwIFxcDQpQKFx0ZXh0e092ZXJUaW1lfSA9IDEpICY9IDEgLSBcZXhwXGxlZnQoLVxleHAoLTIuMjA1MyArIDEuMTk1NClccmlnaHQpIFxhcHByb3ggMC4yOTkNClxlbmR7YWxpZ25lZH0NClxdDQoNCuKGkiBMw6BtIHRow6ptIGdp4budIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyB04burICoqMTAuMCUqKiBsw6puICoqMjkuOSUqKi4NCg0KLSAqKnAtdmFsdWUgPCAyZS0xNioqOiBI4buHIHPhu5EgT3ZlclRpbWUgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8sIGto4bqzbmcgxJHhu4tuaCBt4buRaSBsacOqbiBo4buHIHRo4buxYyBz4buxIGdp4buvYSBsw6BtIHRow6ptIHbDoCBuZ2jhu4kgdmnhu4djLg0KDQoqKkvhur90IGx14bqtbjoqKiBNw7QgaMOsbmggQ2xvZ2xvZyBj4bunbmcgY+G7kSBi4bqxbmcgY2jhu6luZyBy4bqxbmcgbmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSBjw7Mgbmd1eSBjxqEgbmdo4buJIHZp4buHYyBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuaMOzbSBraMO0bmcgbMOgbSB0aMOqbS4gS+G6v3QgcXXhuqMgbsOgeSDEkeG7k25nIG5o4bqldCB24bubaSBjw6FjIG3DtCBow6xuaCBMb2dpdCB2w6AgUHJvYml0IHRyxrDhu5tjIMSRw7MsIGNobyB0aOG6pXkgdMOtbmggbmjhuqV0IHF1w6FuIHRyb25nIHBow6JuIHTDrWNoIHbDoCBraOG6s25nIMSR4buLbmggZ2nDoSB0cuG7iyBj4bunYSBtw7QgaMOsbmggQ2xvZ2xvZyB0cm9uZyBjw6FjIHRyxrDhu51uZyBo4bujcCB4w6FjIHN14bqldCBuaOG7jyB2w6AgcGjDom4gcGjhu5FpIGLhuqV0IMSR4buRaSB44bupbmcuDQoNCiMjIyAqKjMuMy4yIE3DtCBow6xuaCBo4buTaSBxdXkgY2hvIGPhurdwIE1hcml0YWxTdGF0dXMg4oCTIEF0dHJpdGlvbioqDQoNCiMjIyMgKiozLjMuMi4xIE3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oKioNCg0KTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKExpbmVhciBQcm9iYWJpbGl0eSBNb2RlbCDigJMgTFBNKSDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyDEkcOhbmggZ2nDoSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hICoqdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIChNYXJpdGFsU3RhdHVzKSoqIHbDoCAqKmto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgKEF0dHJpdGlvbikqKiBj4bunYSBuaMOibiB2acOqbi4gQmnhur9uIGBNYXJpdGFsU3RhdHVzYCBn4buTbSBiYSBt4bupYzogYCJNYXJyaWVkImAsIGAiU2luZ2xlImAgdsOgIGAiRGl2b3JjZWQiYCwgxJHGsOG7o2MgxJHGsGEgdsOgbyBtw7QgaMOsbmggZMaw4bubaSBk4bqhbmcgYmnhur9uIHBow6JuIGxv4bqhaSAoKmZhY3RvciopLCB24bubaSBgIk1hcnJpZWQiYCDEkcaw4bujYyBjaOG7jW4gbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UuDQoNCioqTcO0IGjDrG5oIGzDvSB0aHV54bq/dDoqKg0KDQokJA0KXHRleHR7QXR0cml0aW9ufV9pID0gXGJldGFfMCArIFxiZXRhXzEgXGNkb3QgXHRleHR7U2luZ2xlfV9pICsgXGJldGFfMiBcY2RvdCBcdGV4dHtEaXZvcmNlZH1faSArIFx2YXJlcHNpbG9uX2kNCiQkDQoNClRyb25nIMSRw7M6DQoNCi0gXCggXGJldGFfMCBcKTogWMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyB0cnVuZyBiw6xuaCBj4bunYSBuaMOzbSDEkcOjIGvhur90IGjDtG4gKE1hcnJpZWQpLiAgDQoNCi0gXCggXGJldGFfMSBcKTogQ2jDqm5oIGzhu4djaCB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGdp4buvYSBuaMOzbSDEkeG7mWMgdGjDom4gKFNpbmdsZSkgdsOgIG5ow7NtIMSRw6Mga+G6v3QgaMO0bi4gIA0KDQotIFwoIFxiZXRhXzIgXCk6IENow6puaCBs4buHY2ggeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBnaeG7r2EgbmjDs20gbHkgaMO0biAoRGl2b3JjZWQpIHbDoCBuaMOzbSDEkcOjIGvhur90IGjDtG4uDQoNCg0KYGBge3J9DQojIE3DoyBow7NhIGzhuqFpIGJp4bq/biBBdHRyaXRpb24gdGjDoG5oIG5o4buLIHBow6JuDQpkYXRhMSRBdHRyaXRpb25fYmluIDwtIGlmZWxzZShkYXRhMSRBdHRyaXRpb24gPT0gIlllcyIsIDEsIDApDQoNCiMgQ2h1eeG7g24gTWFyaXRhbFN0YXR1cyB0aMOgbmggZmFjdG9yIG7hur91IGNoxrBhIHBo4bqjaQ0KZGF0YTEkTWFyaXRhbFN0YXR1cyA8LSBhcy5mYWN0b3IoZGF0YTEkTWFyaXRhbFN0YXR1cykNCg0KIyDEkOG6t3QgIk1hcnJpZWQiIGzDoG0gbmjDs20gdGhhbSBjaGnhur91DQpkYXRhMSRNYXJpdGFsU3RhdHVzIDwtIHJlbGV2ZWwoZGF0YTEkTWFyaXRhbFN0YXR1cywgcmVmID0gIk1hcnJpZWQiKQ0KDQojIMav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggTFBNIHbhu5tpIE1hcml0YWxTdGF0dXMgbMOgIGJp4bq/biDEkeG7i25oIHTDrW5oDQptb2RlbF9scG1fbWFyaXRhbCA8LSBsbShBdHRyaXRpb25fYmluIH4gTWFyaXRhbFN0YXR1cywgZGF0YSA9IGRhdGExKQ0KDQojIEhp4buDbiB0aOG7iyBr4bq/dCBxdeG6ow0Kc3VtbWFyeShtb2RlbF9scG1fbWFyaXRhbCkNCmBgYA0KDQoqKlBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nOioqDQoNCiQkDQpcaGF0e1x0ZXh0e0F0dHJpdGlvbn19X2kgPSAwLjEyNDgxIC0gMC4wMjM5MCBcY2RvdCBcdGV4dHtEaXZvcmNlZH1faSArIDAuMTMwNTAgXGNkb3QgXHRleHR7U2luZ2xlfV9pDQokJA0KDQoqKkdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqM6KioNCg0KLSAqKkludGVyY2VwdCA9IDAuMTI0ODEqKjogWMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyB0cnVuZyBiw6xuaCBj4bunYSBuaMOibiB2acOqbiDEkcOjIGvhur90IGjDtG4gbMOgICoqMTIuNDglKiouDQoNCi0gKipI4buHIHPhu5EgU2luZ2xlID0gMC4xMzA1MCoqOiBOaMOibiB2acOqbiDEkeG7mWMgdGjDom4gY8OzIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgKipjYW8gaMahbiAxMy4wNSDEkWnhu4NtIHBo4bqnbiB0csSDbSoqIHNvIHbhu5tpIG5ow7NtIMSRw6Mga+G6v3QgaMO0bi4gSOG7hyBz4buRIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gKHAtdmFsdWUgPCAwLjAwMSksIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyByw7UgcsOgbmcgZ2nhu69hIHTDrG5oIHRy4bqhbmcgxJHhu5ljIHRow6JuIHbDoCBraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djLg0KDQotICoqSOG7hyBz4buRIERpdm9yY2VkID0gLTAuMDIzOTAqKjogTmjDom4gdmnDqm4gbHkgaMO0biBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyAqKnRo4bqlcCBoxqFuIDIuMzkgxJFp4buDbSBwaOG6p24gdHLEg20qKiBzbyB24bubaSBuaMOzbSDEkcOjIGvhur90IGjDtG4sIG5oxrBuZyBz4buxIGtow6FjIGJp4buHdCBuw6B5ICoqa2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiAocC12YWx1ZSA9IDAuMzI4KS4NCg0KKipL4bq/dCBsdeG6rW46KiogTcO0IGjDrG5oIExQTSBjaG8gdGjhuqV5IHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIGto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm46DQoNCi0gTmjDs20gKirEkeG7mWMgdGjDom4qKiBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyAqKmNhbyBoxqFuIMSRw6FuZyBr4buDKiogc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLCBwaOG6o24gw6FuaCBraOG6oyBuxINuZyBk4buLY2ggY2h1eeG7g24gbGFvIMSR4buZbmcgY2FvIGjGoW4gZG8gw610IHLDoG5nIGJ14buZYyBnaWEgxJHDrG5oLg0KDQotIE5ow7NtICoqbHkgaMO0bioqIGtow7RuZyBraMOhYyBiaeG7h3QgcsO1IHLhu4d0IHNvIHbhu5tpIG5ow7NtIMSRw6Mga+G6v3QgaMO0bi4NCg0KVHV5IG5oacOqbiwgZG8gbcO0IGjDrG5oIExQTSBjw7Mgbmjhu69uZyBo4bqhbiBjaOG6vyBuaMawICoqeMOhYyBzdeG6pXQgZOG7sSDEkW/DoW4gY8OzIHRo4buDIG7hurFtIG5nb8OgaSBraG/huqNuZyBbMCwxXSoqIHbDoCAqKnNhaSBz4buRIGtow7RuZyDEkeG7k25nIG5o4bqldCoqLCBj4bqnbiB0aeG6v3AgdOG7pWMga2nhu4NtIMSR4buLbmggbOG6oWkgYuG6sW5nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBwaGkgdHV54bq/biBuaMawICoqTG9naXQqKiwgKipQcm9iaXQqKiwgdsOgICoqQ2xvZ2xvZyoqIHRyb25nIGPDoWMgcGjhuqduIHRp4bq/cCB0aGVvIMSR4buDIMSR4bqjbSBi4bqjbyB0w61uaCBjaMOtbmggeMOhYyB2w6AgbmjhuqV0IHF1w6FuIGPhu6dhIGvhur90IHF14bqjLg0KDQojIyMjICoqMy4zLjIuMiBNw7QgaMOsbmggTG9naXQqKg0KDQpNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIChMb2dpdCkgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgxJHDoW5oIGdpw6EgbeG7kWkgcXVhbiBo4buHIGdp4buvYSAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiAoTWFyaXRhbFN0YXR1cykqKiB2w6AgKip4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIChBdHRyaXRpb24pKiogY+G7p2EgbmjDom4gdmnDqm4uIMSQw6J5IGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIG3DtCBow6xuaCBwaOG7lSBiaeG6v24gY2hvIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuLCBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGxvZ2lzdGljIG5o4bqxbSDEkeG6o20gYuG6o28geMOhYyBzdeG6pXQgZOG7sSDEkW/DoW4gbuG6sW0gdHJvbmcga2hv4bqjbmcgXChbMCwgMV1cKS4NCg0KKipNw7QgaMOsbmggbMO9IHRodXnhur90OioqDQoNCiQkDQpcbG9nXGxlZnQoXGZyYWN7UChcdGV4dHtBdHRyaXRpb259X2kgPSAxKX17MSAtIFAoXHRleHR7QXR0cml0aW9ufV9pID0gMSl9XHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e1NpbmdsZX1faSArIFxiZXRhXzIgXGNkb3QgXHRleHR7RGl2b3JjZWR9X2kNCiQkDQoNClRyb25nIMSRw7M6DQoNCi0gXCggUChcdGV4dHtBdHRyaXRpb259X2kgPSAxKSBcKTogeMOhYyBzdeG6pXQgbmjDom4gdmnDqm4gXCggaSBcKSBuZ2jhu4kgdmnhu4djICANCg0KLSBcKCBcYmV0YV8wIFwpOiBsb2ctb2RkcyBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow7NtIMSRw6Mga+G6v3QgaMO0biAoTWFycmllZCkgIA0KDQotIFwoIFxiZXRhXzEgXCk6IG3hu6ljIHRoYXkgxJHhu5VpIGxvZy1vZGRzIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDs20gxJHhu5ljIHRow6JuIChTaW5nbGUpIHNvIHbhu5tpIE1hcnJpZWQgIA0KDQotIFwoIFxiZXRhXzIgXCk6IG3hu6ljIHRoYXkgxJHhu5VpIGxvZy1vZGRzIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDs20gbHkgaMO0biAoRGl2b3JjZWQpIHNvIHbhu5tpIE1hcnJpZWQNCg0KYGBge3J9DQojIMav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggTG9naXQNCm1vZGVsX2xvZ2l0X21hcml0YWwgPC0gZ2xtKEF0dHJpdGlvbl9iaW4gfiBNYXJpdGFsU3RhdHVzLCBkYXRhID0gZGF0YTEsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCg0KIyBIaeG7g24gdGjhu4sga+G6v3QgcXXhuqMgbcO0IGjDrG5oDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0X21hcml0YWwpDQpgYGANCg0KKipQaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyB04burIGThu68gbGnhu4d1OioqDQoNCiQkDQpcbG9nXGxlZnQoXGZyYWN7UChcdGV4dHtBdHRyaXRpb259X2kgPSAxKX17MSAtIFAoXHRleHR7QXR0cml0aW9ufV9pID0gMSl9XHJpZ2h0KSA9IC0xLjk0NzYgKyAwLjg3NzIgXGNkb3QgXHRleHR7U2luZ2xlfV9pIC0gMC4yMzk1IFxjZG90IFx0ZXh0e0Rpdm9yY2VkfV9pDQokJA0KDQoqKkdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqM6KioNCg0KLSAqKkludGVyY2VwdCA9IC0xLjk0NzYqKjogS2hpIG5ow6JuIHZpw6puIMSRw6Mga+G6v3QgaMO0biwgbG9nLW9kZHMgbmdo4buJIHZp4buHYyB0cnVuZyBiw6xuaCBsw6AgLTEuOTQ3Ni4gU3V5IHJhIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2M6DQoNCiAgJCQNCiAgUChcdGV4dHtBdHRyaXRpb259ID0gMSB8IFx0ZXh0e01hcnJpZWR9KSA9IFxmcmFje2Veey0xLjk0NzZ9fXsxICsgZV57LTEuOTQ3Nn19IFxhcHByb3ggMC4xMjU5IFxSaWdodGFycm93IFx0ZXh0YmZ7MTIuNTklfQ0KICAkJA0KDQotICoqSOG7hyBz4buRIGBTaW5nbGUgPSAwLjg3NzJgKio6IE5ow6JuIHZpw6puIMSR4buZYyB0aMOibiBjw7MgbG9nLW9kZHMgbmdo4buJIHZp4buHYyBjYW8gaMahbiAwLjg3NzIgc28gduG7m2kgbmjDom4gdmnDqm4gxJHDoyBr4bq/dCBow7RuLiBDaHV54buDbiBzYW5nIE9kZHMgUmF0aW86DQoNCiAgJCQNCiAgXHRleHR7T1J9X3tcdGV4dHtTaW5nbGV9fSA9IGVeezAuODc3Mn0gXGFwcHJveCAyLjQwNA0KICAkJA0KDQogIOKGkiBOaMOibiB2acOqbiDEkeG7mWMgdGjDom4gY8OzICoqbmd1eSBjxqEgbmdo4buJIHZp4buHYyBjYW8gaMahbiBraG/huqNuZyAyLjQgbOG6p24qKiBzbyB24bubaSBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4uIEjhu4cgc+G7kSBuw6B5IGPDsyAqKsO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8qKiAocC12YWx1ZSDiiYggMi41NGUtMDgpLg0KDQotICoqSOG7hyBz4buRIGBEaXZvcmNlZCA9IC0wLjIzOTVgKio6IE5ow6JuIHZpw6puIGx5IGjDtG4gY8OzIGxvZy1vZGRzIG5naOG7iSB2aeG7h2MgdGjhuqVwIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuLiBUdXkgbmhpw6puOg0KDQogICQkDQogIFx0ZXh0e09SfV97XHRleHR7RGl2b3JjZWR9fSA9IGVeey0wLjIzOTV9IFxhcHByb3ggMC43ODcNCiAgJCQNCg0KICDihpIgT2RkcyBuZ2jhu4kgdmnhu4djICoqdGjhuqVwIGjGoW4ga2hv4bqjbmcgMjEuMyUqKiwgbmjGsG5nIGjhu4cgc+G7kSBuw6B5ICoqa2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiAocC12YWx1ZSA9IDAuMjcxKS4NCg0KKipL4bq/dCBsdeG6rW46KiogTcO0IGjDrG5oIExvZ2l0IGNobyB0aOG6pXkgcuG6sW5nICoqdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24geMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbioqOg0KDQotIE5ow6JuIHZpw6puICoqxJHhu5ljIHRow6JuKiogY8OzIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MgKipjYW8gaMahbiDEkcOhbmcga+G7gyoqIHNvIHbhu5tpIG5ow7NtIMSRw6Mga+G6v3QgaMO0bi4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbmjDs20gbsOgeSBjw7MgeHUgaMaw4bubbmcgcuG7nWkgYuG7jyB04buVIGNo4bupYyBjYW8gaMahbiBkbyDDrXQgcsOgbmcgYnXhu5ljIGdpYSDEkcOsbmggdsOgIGxpbmggaG/huqF0IGjGoW4gduG7gSBuZ2jhu4EgbmdoaeG7h3AuDQoNCi0gTmjDom4gdmnDqm4gKipseSBow7RuKioga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyB24buBIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2Mgc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLg0KDQpNw7QgaMOsbmggTG9naXQgZ2nDunAga2jhuq9jIHBo4bulYyBjw6FjIGjhuqFuIGNo4bq/IGPhu6dhIG3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIG5oxrAgeMOhYyBzdeG6pXQgbmdvw6BpIFswLDFdIHbDoCBjaG8gcGjDqXAgZGnhu4VuIGdp4bqjaSB0cuG7sWMgdGnhur9wIHRoZW8gb2RkcyByYXRpbyDigJMgbeG7mXQgY8O0bmcgY+G7pSBo4buvdSDDrWNoIHRyb25nIHBow6JuIHTDrWNoIMSR4buLbmggbMaw4bujbmcgaMOgbmggdmkgbmdo4buJIHZp4buHYy4NCg0KIyMjIyAqKjMuMy4yLjMgTcO0IGjDrG5oIFByb2JpdCoqDQoNCk3DtCBow6xuaCBQcm9iaXQgc+G7rSBk4bulbmcgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5IChDREYpIMSR4buDIGxpw6puIGvhur90IGJp4bq/biDEkeG7mWMgbOG6rXAgduG7m2kgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24uIMSQw6J5IGzDoCBt4buZdCBtw7QgaMOsbmggcGjhu5UgYmnhur9uIGNobyBwaMOibiB0w61jaCBk4buvIGxp4buHdSBuaOG7iyBwaMOibiwgdMawxqFuZyB04buxIG5oxrAgTG9naXQsIG5oxrBuZyB0aGF5IHbDrCBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBsb2dpc3RpYywgbsOzIHPhu60gZOG7pW5nIHBow6JuIHBo4buRaSBjaHXhuqluLg0KDQoqKk3DtCBow6xuaCBsw70gdGh1eeG6v3Q6KioNCg0KJCQNClAoXHRleHR7QXR0cml0aW9ufV9pID0gMSkgPSBcUGhpKFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e1NpbmdsZX1faSArIFxiZXRhXzIgXGNkb3QgXHRleHR7RGl2b3JjZWR9X2kpDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIFxQaGkoXGNkb3QpIFwpOiBsw6AgaMOgbSBwaMOibiBwaOG7kWkgdMOtY2ggbMWpeSBjaHXhuqluIGNodeG6qW4gaMOzYS4gIA0KDQotIFwoIFxiZXRhXzAgXCk6IOKAnGNo4buJIHPhu5EgY2h14bqpbuKAnSBj4bunYSBuaMOzbSDEkcOjIGvhur90IGjDtG4gKE1hcnJpZWQpLiAgDQoNCi0gXCggXGJldGFfMSBcKTogbeG7qWMgdGhheSDEkeG7lWkgY2jhu4kgc+G7kSBjaHXhuqluIGRvIHTDrG5oIHRy4bqhbmcgxJHhu5ljIHRow6JuIChTaW5nbGUpIHNvIHbhu5tpIE1hcnJpZWQuICANCg0KLSBcKCBcYmV0YV8yIFwpOiBt4bupYyB0aGF5IMSR4buVaSBjaOG7iSBz4buRIGNodeG6qW4gZG8gbHkgaMO0biAoRGl2b3JjZWQpIHNvIHbhu5tpIE1hcnJpZWQuDQoNCmBgYHtyfQ0KIyDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIFByb2JpdA0KbW9kZWxfcHJvYml0X21hcml0YWwgPC0gZ2xtKEF0dHJpdGlvbl9iaW4gfiBNYXJpdGFsU3RhdHVzLCBkYXRhID0gZGF0YTEsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IikpDQoNCiMgSGnhu4NuIHRo4buLIGvhur90IHF14bqjDQpzdW1tYXJ5KG1vZGVsX3Byb2JpdF9tYXJpdGFsKQ0KYGBgDQoNCioqUGjGsMahbmcgdHLDrG5oIGjhu5NpIHF1eSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmc6KioNCg0KJCQNClAoXHRleHR7QXR0cml0aW9ufV9pID0gMSkgPSBcUGhpKC0xLjE1MTI1ICsgMC40OTM0MSBcY2RvdCBcdGV4dHtTaW5nbGV9X2kgLSAwLjEyNTA5IFxjZG90IFx0ZXh0e0Rpdm9yY2VkfV9pKQ0KJCQNCg0KKipHaeG6o2kgdGjDrWNoIGvhur90IHF14bqjOioqDQoNCi0gS+G6v3QgcXXhuqMgbcO0IGjDrG5oIGNobyB0aOG6pXkgaOG7hyBz4buRIGNo4bq3biAoKipJbnRlcmNlcHQqKikgbMOgICoq4oCTMS4xNTEyNSoqLCDEkeG6oWkgZGnhu4duIGNobyAqKmNo4buJIHPhu5EgY2h14bqpbioqIHTGsMahbmcg4bupbmcgduG7m2kgbmjDs20gdGhhbSBjaGnhur91IOKAkyB04bupYyAqKm5ow6JuIHZpw6puIMSRw6Mga+G6v3QgaMO0bioqLiBLaGkgbuG7mWkgc3V5IGdpw6EgdHLhu4sgbsOgeSBxdWEgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5LCB0YSB0aHUgxJHGsOG7o2M6DQoNCiQkDQpcUGhpKC0xLjE1MTI1KSBcYXBwcm94IDAuMTI1IFxSaWdodGFycm93IFx0ZXh0e1jDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDs20gxJHDoyBr4bq/dCBow7RufSBcYXBwcm94IFx0ZXh0YmZ7MTIuNSV9DQokJA0KDQotIMSQ4buRaSB24bubaSBuaMOzbSAqKsSR4buZYyB0aMOibioqLCBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nIGzDoCAqKjAuNDkzNDEqKiwgY2hvIHRo4bqleSBjaOG7iSBz4buRIGNodeG6qW4gY+G7p2EgaOG7jSBjYW8gaMahbiAwLjQ5MzQxIMSRxqFuIHbhu4sgc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLiBLaGkgY+G7mW5nIHbDoG8gaOG7hyBz4buRIGNo4bq3biB2w6AgY2h1eeG7g24gc2FuZyB4w6FjIHN14bqldCwgdGEgxJHGsOG7o2M6DQoNCiQkDQpcUGhpKC0xLjE1MTI1ICsgMC40OTM0MSkgPSBcUGhpKC0wLjY1Nzg0KSBcYXBwcm94IDAuMjU1IFxSaWdodGFycm93IFx0ZXh0e1jDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDs20gxJHhu5ljIHRow6JufSBcYXBwcm94IFx0ZXh0YmZ7MjUuNSV9DQokJA0KDQrEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgbmjDom4gdmnDqm4gxJHhu5ljIHRow6JuIGPDsyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djICoqZ+G6p24gZ+G6pXAgxJHDtGkqKiBzbyB24bubaSBuaMOzbSDEkcOjIGvhur90IGjDtG4uIEvhur90IHF14bqjIG7DoHkgY8OzICoqw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhbyoqIChwLXZhbHVlIOKJiCAyLjExZS0wOCksIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgc+G7sSBraMOhYyBiaeG7h3QgbsOgeSBsw6AgxJHDoW5nIHRpbiBj4bqteSB2w6AgY8OzIHRo4bqtdCB0cm9uZyBk4buvIGxp4buHdS4NCg0KLSBOZ8aw4bujYyBs4bqhaSwgbmjDs20gKipseSBow7RuKiogY8OzIGjhu4cgc+G7kSBsw6AgKirigJMwLjEyNTA5KiosIGNobyB0aOG6pXkgaOG7jSBjw7MgY2jhu4kgc+G7kSBjaHXhuqluIHRo4bqlcCBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIG5ow7NtIMSRw6Mga+G6v3QgaMO0bi4gS2hpIG7hu5lpIHN1eToNCg0KJCQNClxQaGkoLTEuMTUxMjUgLSAwLjEyNTA5KSA9IFxQaGkoLTEuMjc2MzQpIFxhcHByb3ggMC4xMDEgXFJpZ2h0YXJyb3cgXHRleHR7WMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBj4bunYSBuaMOzbSBseSBow7RufSBcYXBwcm94IFx0ZXh0YmZ7MTAuMSV9DQokJA0KDQpN4bq3YyBkw7kgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBj4bunYSBuaMOzbSBseSBow7RuIHRo4bqlcCBoxqFuIG5ow7NtIMSRw6Mga+G6v3QgaMO0biwgbmjGsG5nIHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgKipraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqIChwLXZhbHVlID0gMC4yNjgpLCBkbyDEkcOzIGNoxrBhIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDIGvhur90IGx14bqtbiBt4buRaSBxdWFuIGjhu4cgbsOgeSBsw6AgY8OzIHRo4bqtdC4NCg0KKipL4bq/dCBsdeG6rW46KioNCg0KTcO0IGjDrG5oIFByb2JpdCBjaG8gdGjhuqV5IHLhurFuZyAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBjw7Mg4bqjbmggaMaw4bufbmcgcsO1IHLhu4d0IMSR4bq/biBraOG6oyBuxINuZyBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow6JuIHZpw6puKiosIHRyb25nIMSRw7M6DQoNCi0gTmjDs20gKirEkeG7mWMgdGjDom4qKiBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyAqKmNhbyBoxqFuIMSRw6FuZyBr4buDKiogc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLiDEkMOieSBsw6AgbmjDs20gY8OzIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MgY2FvIGjGoW4sIGPDsyB0aOG7gyBkbyBo4buNIMOtdCByw6BuZyBideG7mWMgZ2lhIMSRw6xuaCB2w6AgbGluaCBob+G6oXQgaMahbiB0cm9uZyBs4buxYSBjaOG7jW4gY8O0bmcgdmnhu4djLg0KDQotIE5nxrDhu6NjIGzhuqFpLCBuaMOzbSAqKmx5IGjDtG4qKiBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLCBuw6puIGtow7RuZyB0aOG7gyDEkcawYSByYSBr4bq/dCBsdeG6rW4gY2jhuq9jIGNo4bqvbiB24buBIHh1IGjGsOG7m25nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDs20gbsOgeS4NCg0KTeG6t2MgZMO5IGjhu4cgc+G7kSB0cm9uZyBtw7QgaMOsbmggUHJvYml0IGtow7RuZyB0aOG7gyBkaeG7hW4gZ2nhuqNpIHRy4buxYyB0aeG6v3AgbmjGsCBPZGRzIFJhdGlvIHRyb25nIG3DtCBow6xuaCBMb2dpdCwgdmnhu4djICoqY2h1eeG7g24gxJHhu5VpIHNhbmcgeMOhYyBzdeG6pXQgdGjDtG5nIHF1YSBow6BtIHBow6JuIHBo4buRaSBjaHXhuqluIGNodeG6qW4gaMOzYSBcKFxQaGlcKSoqIHbhuqtuIGdpw7pwIGhp4buDdSByw7UgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgdGjhu7FjIHThur8gY+G7p2EgY8OhYyBuaMOzbS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbcO0IGjDrG5oIFByb2JpdCBsw6AgbeG7mXQgcGjGsMahbmcgcGjDoXAga2nhu4NtIMSR4buLbmggYuG7lSBzdW5nIMSRw6FuZyB0aW4gY+G6rXksIGdpw7pwIGPhu6duZyBj4buRIGvhur90IHF14bqjIHThu6sgY8OhYyBtw7QgaMOsbmggdHLGsOG7m2MgbmjGsCBMUE0gdsOgIExvZ2l0Lg0KDQojIyMjICoqMy4zLjIuNCBNw7QgaMOsbmggQ2xvZ2xvZyoqDQoNCk3DtCBow6xuaCAqKkNsb2dsb2cgKENvbXBsZW1lbnRhcnkgTG9nLUxvZykqKiBsw6AgbeG7mXQgYmnhur9uIHRo4buDIGPhu6dhIGjhu5NpIHF1eSBuaOG7iyBwaMOibiwgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgY8OhYyB0w6xuaCBodeG7kW5nIG3DoCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBuaOG7jywgaG/hurdjIGThu68gbGnhu4d1IGPDsyBwaMOibiBwaOG7kWkgYuG6pXQgxJHhu5FpIHjhu6luZy4gTcO0IGjDrG5oIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3Q6DQoNCiQkDQpnKHApID0gXGxvZygtXGxvZygxIC0gcCkpDQokJA0KDQpraMOhYyB24bubaSBMb2dpdCB2w6AgUHJvYml0LCBnacO6cCBtw7QgdOG6oyB04buRdCBoxqFuIGPDoWMgcGjDom4gcGjhu5FpIGzhu4djaC4gxJDDonkgbMOgIGzhu7FhIGNo4buNbiBwaMO5IGjhu6NwIGtoaSBwaMOibiBwaOG7kWkgY+G7p2EgeMOhYyBzdeG6pXQgY8OzIMSR4buZIGThu5FjIGzhu5tuIOG7nyBt4buZdCBwaMOtYS4NCg0KKipNw7QgaMOsbmggbMO9IHRodXnhur90OioqDQoNCiQkDQpcbG9nKC1cbG9nKDEgLSBQKFx0ZXh0e0F0dHJpdGlvbn1faSA9IDEpKSkgPSBcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBcdGV4dHtTaW5nbGV9X2kgKyBcYmV0YV8yIFxjZG90IFx0ZXh0e0Rpdm9yY2VkfV9pDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIFxiZXRhXzAgXCk6IGxvZygtbG9nKDEgLSBwKSkgY+G7p2EgbmjDs20gxJHDoyBr4bq/dCBow7RuICANCg0KLSBcKCBcYmV0YV8xIFwpOiBt4bupYyB0aGF5IMSR4buVaSBsb2coLWxvZygxIC0gcCkpIG7hur91IG5ow6JuIHZpw6puIMSR4buZYyB0aMOibiAgDQoNCi0gXCggXGJldGFfMiBcKTogbeG7qWMgdGhheSDEkeG7lWkgbG9nKC1sb2coMSAtIHApKSBu4bq/dSBuaMOibiB2acOqbiBseSBow7RuDQoNCmBgYHtyfQ0KIyDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIENsb2dsb2cNCm1vZGVsX2Nsb2dsb2dfbWFyaXRhbCA8LSBnbG0oQXR0cml0aW9uX2JpbiB+IE1hcml0YWxTdGF0dXMsIGRhdGEgPSBkYXRhMSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIikpDQoNCiMgSGnhu4NuIHRo4buLIGvhur90IHF14bqjDQpzdW1tYXJ5KG1vZGVsX2Nsb2dsb2dfbWFyaXRhbCkNCmBgYA0KDQoqKlBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nOioqDQoNCiQkDQpcbG9nKC1cbG9nKDEgLSBQKSkgPSAtMi4wMTUwICsgMC43OTM1IFxjZG90IFx0ZXh0e1NpbmdsZX1faSAtIDAuMjI1NyBcY2RvdCBcdGV4dHtEaXZvcmNlZH1faQ0KJCQNCg0KKipHaeG6o2kgdGjDrWNoIGvhur90IHF14bqjOioqDQoNCi0gS+G6v3QgcXXhuqMgbcO0IGjDrG5oIGNobyB0aOG6pXkgaOG7hyBz4buRIGNo4bq3biAoXCggXGJldGFfMCA9IC0yLjAxNTAgXCkpIMSR4bqhaSBkaeG7h24gY2hvIG5ow7NtIHRoYW0gY2hp4bq/dSBsw6AgbmjDom4gdmnDqm4gKirEkcOjIGvhur90IGjDtG4qKi4gS2hpIGNodXnhu4NuIMSR4buVaSB0aMO0bmcgcXVhIGjDoG0gbmdo4buLY2ggxJHhuqNvIGPhu6dhIGxpw6puIGvhur90IGNsb2dsb2csIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgdMawxqFuZyDhu6luZyDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCg0KJCQNClBfe1x0ZXh0e01hcnJpZWR9fSA9IDEgLSBcZXhwKC1cZXhwKC0yLjAxNTApKSBcYXBwcm94IFx0ZXh0YmZ7MTMuMyV9DQokJA0KDQotIMSQ4buRaSB24bubaSBuaMOzbSAqKsSR4buZYyB0aMOibioqLCBo4buHIHPhu5EgaOG7k2kgcXV5IGzDoCAwLjc5MzUuIEtoaSBj4buZbmcgaOG7hyBz4buRIG7DoHkgdsOgbyBnacOhIHRy4buLIGfhu5FjLCB0YSB0aHUgxJHGsOG7o2M6DQoNCiQkDQpQX3tcdGV4dHtTaW5nbGV9fSA9IDEgLSBcZXhwKC1cZXhwKC0yLjAxNTAgKyAwLjc5MzUpKSBcYXBwcm94IFx0ZXh0YmZ7MjUuOCV9DQokJA0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBuaMOibiB2acOqbiDEkeG7mWMgdGjDom4gY8OzIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLCB24bubaSBt4bupYyBjaMOqbmggbOG7h2NoIHjhuqVwIHjhu4kgMTIuNSDEkWnhu4NtIHBo4bqnbiB0csSDbSwgdOG7qyAxMy4zJSBsw6puIDI1LjglLCB2w6Agc+G7sSBraMOhYyBiaeG7h3QgbsOgeSBsw6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gKHAtdmFsdWUg4omIIDIuNTllLTA4KS4NCg0KLSBOZ8aw4bujYyBs4bqhaSwgduG7m2kgbmjDs20gKipseSBow7RuKiosIGjhu4cgc+G7kSBo4buTaSBxdXkgbMOgIOKAkzAuMjI1Ny4gS2hpIGNodXnhu4NuIMSR4buVaSB0aMOgbmggeMOhYyBzdeG6pXQ6DQoNCiQkDQpQX3tcdGV4dHtEaXZvcmNlZH19ID0gMSAtIFxleHAoLVxleHAoLTIuMDE1MCAtIDAuMjI1NykpIFxhcHByb3ggXHRleHRiZnsxMC42JX0NCiQkDQoNCk3hurdjIGTDuSB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow7NtIGx5IGjDtG4gdGjhuqVwIGjGoW4gc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLCBuaMawbmcgc+G7sSBraMOhYyBiaeG7h3QgbsOgeSAqKmtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiogKHAtdmFsdWUgPSAwLjI3MiksIGRvIMSRw7MgY2jGsGEgdGjhu4Mga2jhurNuZyDEkeG7i25oIGNo4bqvYyBjaOG6r24gduG7gSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgbHkgaMO0biB2w6AgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYy4NCg0KKipL4bq/dCBsdeG6rW46KioNCg0KLSBNw7QgaMOsbmggQ2xvZ2xvZyB0aeG6v3AgdOG7pWMga2jhurNuZyDEkeG7i25oIHLhurFuZyAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6AgbeG7mXQgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyoqLCDEkeG6t2MgYmnhu4d0IGzDoCDEkeG7kWkgduG7m2kgbmjDs20gbmjDom4gdmnDqm4gKirEkeG7mWMgdGjDom4qKi4gS+G6v3QgcXXhuqMgY2hvIHRo4bqleSB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow7NtIG7DoHkgY2FvIGjGoW4gcsO1IHLhu4d0IHNvIHbhu5tpIG5ow7NtIMSRw6Mga+G6v3QgaMO0biwgdsOgIHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgbMOgIGPDsyB0aOG6rXQgduG7gSBt4bq3dCB0aOG7kW5nIGvDqi4gTmfGsOG7o2MgbOG6oWksIG5ow7NtICoqbHkgaMO0bioqIGtow7RuZyBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEsIG7Dqm4ga2jDtG5nIMSR4bunIGPGoSBz4bufIMSR4buDIMSRxrBhIHJhIGvhur90IGx14bqtbiBjaOG6r2MgY2jhuq9uLg0KDQotIFNvIHbhu5tpIGPDoWMgbcO0IGjDrG5oIExQTSwgTG9naXQgdsOgIFByb2JpdCDEkcOjIHRyw6xuaCBiw6B5IHRyxrDhu5tjIMSRw7MsIENsb2dsb2cga2jDtG5nIGNo4buJIGNobyBr4bq/dCBxdeG6oyBuaOG6pXQgcXXDoW4gduG7gSB4dSBoxrDhu5tuZyDhuqNuaCBoxrDhu59uZyBj4bunYSB0w6xuaCB0cuG6oW5nIMSR4buZYyB0aMOibiwgbcOgIGPDsm4gbeG7nyBy4buZbmcgZ8OzYyBuaMOsbiBraGkgeMOpdCDEkeG6v24gxJHhurdjIMSRaeG7g20gcGjDom4gcGjhu5FpIGLhuqV0IMSR4buRaSB44bupbmcgY+G7p2EgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYy4gRG8gxJHDsywgbcO0IGjDrG5oIG7DoHkgxJHDs25nIHZhaSB0csOyIGzDoCBt4buZdCBwaMawxqFuZyBwaMOhcCBi4buVIHN1bmcgaOG7r3Ugw61jaCwgZ8OzcCBwaOG6p24gY+G7p25nIGPhu5Ega+G6v3QgbHXhuq1uIHLhurFuZyBuaMOzbSBuaMOibiB2acOqbiDEkeG7mWMgdGjDom4gbMOgIG5ow7NtIGPDsyBuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djIGNhbyBuaOG6pXQgdHJvbmcgYmEgbmjDs20gcGjDom4gbG/huqFpIHRoZW8gdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuLg0KDQojIyMgKiozLjMuMyBNw7QgaMOsbmggaOG7k2kgcXV5IMSRYSBiaeG6v24qKg0KDQojIyMjICoqMy4zLjMuMSBNw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCoqDQoNCk3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIChMUE0pIMSRxrDhu6NjIMOhcCBk4bulbmcgbmjhurFtIMSRw6FuaCBnacOhIMSR4buTbmcgdGjhu51pIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIHnhur91IHThu5E6ICoqT3ZlclRpbWUqKiwgKipKb2JTYXRpc2ZhY3Rpb24qKiwgKipNYXJpdGFsU3RhdHVzKiogdsOgICoqV29ya0xpZmVCYWxhbmNlKiogxJHhur9uIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4uIMSQw6J5IGzDoCBtw7QgaMOsbmggdHV54bq/biB0w61uaCDEkcahbiBnaeG6o24sIGdpw7pwIGN1bmcgY+G6pXAgY8OhaSBuaMOsbiBzxqEgYuG7mSB24buBIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCBiaeG6v24gcGjhu6UgdGh14buZYyBuaOG7iyBwaMOibiwgdGjDtG5nIHF1YSBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nIOKAkyB0aOG7gyBoaeG7h24gc+G7sSB0aGF5IMSR4buVaSB0cuG7sWMgdGnhur9wIHbhu4EgeMOhYyBzdeG6pXQuDQoNClRyb25nIG3DtCBow6xuaCBuw6B5LCBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIG5oxrAgKipKb2JTYXRpc2ZhY3Rpb24qKiB2w6AgKipXb3JrTGlmZUJhbGFuY2UqKiAoY8OzIHRoYW5nIMSRaeG7g20gdOG7qyAxIMSR4bq/biA0KSDEkcaw4bujYyB44butIGzDvSBkxrDhu5tpIGThuqFuZyBiaeG6v24gcGjDom4gbG/huqFpICgqZmFjdG9yKiksIHbhu5tpIGPDoWMgbmjDs20gdGhhbSBjaGnhur91IMSRxrDhu6NjIGNo4buNbiBuaMawIHNhdToNCg0KLSAqKk92ZXJUaW1lKio6IG5ow7NtIHRoYW0gY2hp4bq/dSBsw6AgIk5vIiAoa2jDtG5nIGzDoG0gdGjDqm0gZ2nhu50pICANCg0KLSAqKkpvYlNhdGlzZmFjdGlvbioqOiBuaMOzbSB0aGFtIGNoaeG6v3UgbMOgIG3hu6ljIDEgKHLhuqV0IGtow7RuZyBow6BpIGzDsm5nKSAgDQoNCi0gKipNYXJpdGFsU3RhdHVzKio6IG5ow7NtIHRoYW0gY2hp4bq/dSBsw6AgIk1hcnJpZWQiICjEkcOjIGvhur90IGjDtG4pICANCg0KLSAqKldvcmtMaWZlQmFsYW5jZSoqOiBuaMOzbSB0aGFtIGNoaeG6v3UgbMOgIG3hu6ljIDEgKHLhuqV0IG3huqV0IGPDom4gYuG6sW5nKQ0KDQoqKlBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nOioqDQoNClxbDQpcYmVnaW57YWxpZ25lZH0NClxoYXR7XHRleHR7QXR0cml0aW9ufX1faSA9XCAmIFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e092ZXJUaW1lfV9pICsgXGJldGFfMiBcY2RvdCBcdGV4dHtKb2JTYXRpc2ZhY3Rpb259XzIgKyBcYmV0YV8zIFxjZG90IFx0ZXh0e0pvYlNhdGlzZmFjdGlvbn1fMyArIFxiZXRhXzQgXGNkb3QgXHRleHR7Sm9iU2F0aXNmYWN0aW9ufV80IFxcDQomKyBcYmV0YV81IFxjZG90IFx0ZXh0e01hcml0YWxTdGF0dXN9X3tcdGV4dHtEaXZvcmNlZH19ICsgXGJldGFfNiBcY2RvdCBcdGV4dHtNYXJpdGFsU3RhdHVzfV97XHRleHR7U2luZ2xlfX0gXFwNCiYrIFxiZXRhXzcgXGNkb3QgXHRleHR7V29ya0xpZmVCYWxhbmNlfV8yICsgXGJldGFfOCBcY2RvdCBcdGV4dHtXb3JrTGlmZUJhbGFuY2V9XzMgKyBcYmV0YV85IFxjZG90IFx0ZXh0e1dvcmtMaWZlQmFsYW5jZX1fNCArIFx2YXJlcHNpbG9uX2kNClxlbmR7YWxpZ25lZH0NClxdDQoNCg0KYGBge3J9DQojIENodXnhu4NuIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggY8OzIHRo4bupIGLhuq1jIHRow6BuaCBmYWN0b3IgdsOgIMSR4bq3dCBuaMOzbSB0aGFtIGNoaeG6v3UNCmRhdGExJEpvYlNhdGlzZmFjdGlvbiA8LSBhcy5mYWN0b3IoZGF0YTEkSm9iU2F0aXNmYWN0aW9uKQ0KZGF0YTEkV29ya0xpZmVCYWxhbmNlIDwtIGFzLmZhY3RvcihkYXRhMSRXb3JrTGlmZUJhbGFuY2UpDQpkYXRhMSRNYXJpdGFsU3RhdHVzIDwtIGFzLmZhY3RvcihkYXRhMSRNYXJpdGFsU3RhdHVzKQ0KZGF0YTEkT3ZlclRpbWUgPC0gYXMuZmFjdG9yKGRhdGExJE92ZXJUaW1lKQ0KDQojIMSQ4bq3dCBuaMOzbSB0aGFtIGNoaeG6v3UNCmRhdGExJEpvYlNhdGlzZmFjdGlvbiA8LSByZWxldmVsKGRhdGExJEpvYlNhdGlzZmFjdGlvbiwgcmVmID0gIjEiKQ0KZGF0YTEkV29ya0xpZmVCYWxhbmNlIDwtIHJlbGV2ZWwoZGF0YTEkV29ya0xpZmVCYWxhbmNlLCByZWYgPSAiMSIpDQpkYXRhMSRNYXJpdGFsU3RhdHVzIDwtIHJlbGV2ZWwoZGF0YTEkTWFyaXRhbFN0YXR1cywgcmVmID0gIk1hcnJpZWQiKQ0KZGF0YTEkT3ZlclRpbWUgPC0gcmVsZXZlbChkYXRhMSRPdmVyVGltZSwgcmVmID0gIk5vIikNCg0KIyDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIExQTQ0KbW9kZWxfbHBtX211bHRpIDwtIGxtKEF0dHJpdGlvbl9iaW4gfiBPdmVyVGltZSArIEpvYlNhdGlzZmFjdGlvbiArIE1hcml0YWxTdGF0dXMgKyBXb3JrTGlmZUJhbGFuY2UsIGRhdGEgPSBkYXRhMSkNCg0KIyBL4bq/dCBxdeG6oyBtw7QgaMOsbmgNCnN1bW1hcnkobW9kZWxfbHBtX211bHRpKQ0KYGBgDQoNCioqR2nhuqNpIHRow61jaCBr4bq/dCBxdeG6oyoqDQoNCi0gVGhlbyBr4bq/dCBxdeG6oyBo4buTaSBxdXksIEludGVyY2VwdCA9IDAuMjg0MjIgY2hvIGJp4bq/dCB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIHRydW5nIGLDrG5oIGPhu6dhIG5ow6JuIHZpw6puIHRodeG7mWMgbmjDs20gdGhhbSBjaGnhur91IChraMO0bmcgbMOgbSB0aMOqbSBnaeG7nSwgcuG6pXQga2jDtG5nIGjDoGkgbMOybmcgY8O0bmcgdmnhu4djLCDEkcOjIGvhur90IGjDtG4gdsOgIHLhuqV0IG3huqV0IGPDom4gYuG6sW5nIGPDtG5nIHZp4buHYyDigJMgY3Xhu5ljIHPhu5FuZykgbMOgIGtob+G6o25nIDI4LjQyJS4NCg0KLSBCaeG6v24gT3ZlclRpbWUgY8OzIGjhu4cgc+G7kSAwLjIwNTUwIHbhu5tpIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gKHAgPCAwLjAwMSksIGNobyB0aOG6pXkgbmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjYW8gaMahbiAyMC41NSDEkWnhu4NtIHBo4bqnbiB0csSDbSBzbyB24bubaSBuZ8aw4budaSBraMO0bmcgbMOgbSB0aMOqbS4gxJDDonkgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgeeG6v3UgdOG7kSBjw7Mg4bqjbmggaMaw4bufbmcgbeG6oW5oIHbDoCByw7UgcuG7h3QgbmjhuqV0IMSR4bq/biB4dSBoxrDhu5tuZyBuZ2jhu4kgdmnhu4djLg0KDQotIFbhu4EgbeG7qWMgxJHhu5kgaMOgaSBsw7JuZyBjw7RuZyB2aeG7h2MgKEpvYlNhdGlzZmFjdGlvbiksIGtoaSBzbyBzw6FuaCB24bubaSBt4bupYyAxIChy4bqldCBraMO0bmcgaMOgaSBsw7JuZyksIHThuqV0IGPhuqMgY8OhYyBt4bupYyDEkeG7mSB04burIDIgxJHhur9uIDQgxJHhu4F1IGNobyBo4buHIHPhu5Egw6JtIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIEPhu6UgdGjhu4MsIG3hu6ljIMSR4buZIGjDoGkgbMOybmcgY8OgbmcgY2FvIHRow6wgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjw6BuZyBnaeG6o206IG3hu6ljIDIgZ2nhuqNtIDUuNzUgxJFp4buDbSAlLCBt4bupYyAzIGdp4bqjbSA1Ljk0IMSRaeG7g20gJSwgdsOgIG3hu6ljIDQgZ2nhuqNtIMSR4bq/biAxMi41MSDEkWnhu4NtICUuIMSQaeG7gXUgbsOgeSBwaOG6o24gw6FuaCBy4bqxbmcgc+G7sSB0aOG7j2EgbcOjbiB24bubaSBjw7RuZyB2aeG7h2MgY8OzIHTDoWMgxJHhu5luZyBi4bqjbyB24buHIHLDtSBy4buHdCDEkeG7kWkgduG7m2kgcXV54bq/dCDEkeG7i25oIG5naOG7iSB2aeG7h2MuDQoNCi0gVuG7m2kgYmnhur9uIE1hcml0YWxTdGF0dXMsIG5ow7NtIFNpbmdsZSBjw7MgaOG7hyBz4buRIDAuMTM0ODYgdsOgIHAtdmFsdWUgcuG6pXQgbmjhu48sIGjDoG0gw70gcuG6sW5nIG5ow6JuIHZpw6puIMSR4buZYyB0aMOibiBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjYW8gaMahbiAxMy40OSDEkWnhu4NtIHBo4bqnbiB0csSDbSBzbyB24bubaSBuaMOzbSDEkcOjIGvhur90IGjDtG4g4oCTIG3hu5l0IGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLDtSByw6BuZy4gVHJvbmcga2hpIMSRw7MsIG5ow7NtIERpdm9yY2VkIGtow7RuZyBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuIGRvIGjhu4cgc+G7kSBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocCA9IDAuMjU2KS4NCg0KLSDEkOG7kWkgduG7m2kgV29ya0xpZmVCYWxhbmNlLCBjw6FjIG3hu6ljIHThu6sgMiDEkeG6v24gNCDEkeG7gXUgY8OzIGjhu4cgc+G7kSDDom0gdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6osIGNo4bupbmcgdOG7jyBz4buxIGPhuqNpIHRoaeG7h24gdHJvbmcgY8OibiBi4bqxbmcgY8O0bmcgdmnhu4djIOKAkyBjdeG7mWMgc+G7kW5nIGdpw7pwIGdp4bqjbSB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djLiBN4bupYyAyIGdp4bqjbSAxMy45MSDEkWnhu4NtICUsIG3hu6ljIDMgZ2nhuqNtIDE3LjI4IMSRaeG7g20gJSwgdsOgIG3hu6ljIDQgZ2nhuqNtIDEyLjQ1IMSRaeG7g20gJSBzbyB24bubaSBt4bupYyBy4bqldCBt4bqldCBjw6JuIGLhurFuZy4gTmjGsCB24bqteSwgeeG6v3UgdOG7kSBuw6B5IHRo4buDIGhp4buHbiB2YWkgdHLDsiBi4bqjbyB24buHIHLDtSBy4buHdCB2w6AgYuG7gW4gduG7r25nLCBkw7kgbeG7qWMgY+G6o2kgdGhp4buHbiBraMO0bmcgaG/DoG4gdG/DoG4gdHV54bq/biB0w61uaC4NCg0KKipL4bq/dCBsdeG6rW4qKg0KDQpL4bq/dCBxdeG6oyBtw7QgaMOsbmggTFBNIGNobyB0aOG6pXkgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiBjaOG7i3Ug4bqjbmggaMaw4bufbmcgxJHhu5NuZyB0aOG7nWkgYuG7n2kgbmhp4buBdSB54bq/dSB04buRLCB0cm9uZyDEkcOzIG7hu5VpIGLhuq10IGzDoCB0w6xuaCB0cuG6oW5nIGzDoG0gdGjDqm0gZ2nhu50sIHPhu7EgaMOgaSBsw7JuZyBjw7RuZyB2aeG7h2MsIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiB2w6AgbeG7qWMgxJHhu5kgY8OibiBi4bqxbmcgY3Xhu5ljIHPhu5FuZy4gTeG7qWMgxJHhu5kgdMOhYyDEkeG7mW5nIGPhu6dhIGPDoWMgYmnhur9uIGzDoCBwaMO5IGjhu6NwIHbhu5tpIGvhu7MgduG7jW5nIGzDvSB0aHV54bq/dCB2w6Aga2luaCBuZ2hp4buHbSB0aOG7sWMgdGnhu4VuLiDEkOG6t2MgYmnhu4d0Og0KDQotIE5ow6JuIHZpw6puIGzDoG0gdGjDqm0gZ2nhu50sIMSR4buZYyB0aMOibiwga2jDtG5nIGjDoGkgbMOybmcgY8O0bmcgdmnhu4djIHbDoCBt4bqldCBjw6JuIGLhurFuZyBjdeG7mWMgc+G7kW5nIGzDoCBuaOG7r25nIMSR4buRaSB0xrDhu6NuZyBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjYW8gaMahbiDEkcOhbmcga+G7gy4NCg0KLSBDw6FjIHnhur91IHThu5EgYuG6o28gduG7hyBuaMawIGjDoGkgbMOybmcgY8O0bmcgdmnhu4djIHbDoCBjw6JuIGLhurFuZyBjdeG7mWMgc+G7kW5nIHRo4buDIGhp4buHbiB2YWkgdHLDsiBxdWFuIHRy4buNbmcgdHJvbmcgdmnhu4djIGdp4buvIGNow6JuIG5ow6JuIHPhu7EuDQoNCk3hurdjIGTDuSBtw7QgaMOsbmggTFBNIGNo4buJIGdp4bqjaSB0aMOtY2ggxJHGsOG7o2Mga2hv4bqjbmcgMTEuOTIlIGJp4bq/biB0aGnDqm4gY+G7p2EgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYywgbmjGsG5nIMSRw6J5IGzDoCBr4bq/dCBxdeG6oyBjaOG6pXAgbmjhuq1uIMSRxrDhu6NjIHbhu5tpIG3DtCBow6xuaCDEkcahbiBnaeG6o24uIFBow6JuIHTDrWNoIHRp4bq/cCB0aGVvIHbhu5tpIGPDoWMgbcO0IGjDrG5oIHBoaSB0dXnhur9uIG5oxrAgTG9naXQsIFByb2JpdCwgQ2xvZ2xvZyBz4bq9IGdpw7pwIHjDoWMgbmjhuq1uIHbDoCBi4buVIHN1bmcgY2hvIG5o4buvbmcga+G6v3QgbHXhuq1uIG7DoHkuDQoNCiMjIyMgKiozLjMuMy4yIE3DtCBow6xuaCBMb2dpdCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgbmjhu4sgcGjDom4gKExvZ2l0KSDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0gxJHDoW5oIGdpw6Eg4bqjbmggaMaw4bufbmcgxJHhu5NuZyB0aOG7nWkgY+G7p2EgY8OhYyB54bq/dSB04buRICoqT3ZlclRpbWUqKiwgKipKb2JTYXRpc2ZhY3Rpb24qKiwgKipNYXJpdGFsU3RhdHVzKiogdsOgICoqV29ya0xpZmVCYWxhbmNlKiogxJHhur9uIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgKEF0dHJpdGlvbikgY+G7p2EgbmjDom4gdmnDqm4uIE3DtCBow6xuaCBMb2dpdCBraOG6r2MgcGjhu6VjIMSRxrDhu6NjIG5o4buvbmcgaOG6oW4gY2jhur8gY+G7p2EgbcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKExQTSksIMSR4bq3YyBiaeG7h3QgbMOgIHZp4buHYyDEkeG6o20gYuG6o28gZ2nDoSB0cuG7iyBk4buxIMSRb8OhbiBsdcO0biBu4bqxbSB0cm9uZyBraG/huqNuZyBcKFswLCAxXVwpIHRow7RuZyBxdWEgdmnhu4djIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgbG9naXQ6DQoNClxbDQpcbG9nXGxlZnQoIFxmcmFje1BfaX17MSAtIFBfaX0gXHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e092ZXJUaW1lfV9pICsgXGxkb3RzICsgXGJldGFfOSBcY2RvdCBcdGV4dHtXb3JrTGlmZUJhbGFuY2V9XzQgKyBcdmFyZXBzaWxvbl9pDQpcXQ0KDQoNCmBgYHtyfQ0KIyDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIExvZ2l0DQptb2RlbF9sb2dpdF9tdWx0aSA8LSBnbG0oQXR0cml0aW9uX2JpbiB+IE92ZXJUaW1lICsgSm9iU2F0aXNmYWN0aW9uICsgTWFyaXRhbFN0YXR1cyArIFdvcmtMaWZlQmFsYW5jZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTEsIGZhbWlseSA9ICJiaW5vbWlhbCIpDQoNCiMgS+G6v3QgcXXhuqMgbcO0IGjDrG5oDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0X211bHRpKQ0KYGBgDQoNCioqUGjGsMahbmcgdHLDrG5oIGjhu5NpIHF1eSBzYXUga2hpIMaw4bubYyBsxrDhu6NuZzoqKg0KDQpcWw0KXGJlZ2lue2FsaWduZWR9DQpcbG9nXGxlZnQoIFxmcmFje1BfaX17MSAtIFBfaX0gXHJpZ2h0KSA9XCAmIC0xLjA0NzQgKyAxLjQ4NjAgXGNkb3QgXHRleHR7T3ZlclRpbWV9X2kgLSAwLjQxNDYgXGNkb3QgXHRleHR7Sm9iU2F0aXNmYWN0aW9ufV8yIC0gMC40MjkxIFxjZG90IFx0ZXh0e0pvYlNhdGlzZmFjdGlvbn1fMyAtIDEuMDU1OCBcY2RvdCBcdGV4dHtKb2JTYXRpc2ZhY3Rpb259XzQgXFwNCiYgLSAwLjI5OTMgXGNkb3QgXHRleHR7TWFyaXRhbFN0YXR1c31fe1x0ZXh0e0Rpdm9yY2VkfX0gKyAxLjAwNDIgXGNkb3QgXHRleHR7TWFyaXRhbFN0YXR1c31fe1x0ZXh0e1NpbmdsZX19IFxcDQomIC0gMC45MDEzIFxjZG90IFx0ZXh0e1dvcmtMaWZlQmFsYW5jZX1fMiAtIDEuMjEwMCBcY2RvdCBcdGV4dHtXb3JrTGlmZUJhbGFuY2V9XzMgLSAwLjc5NzEgXGNkb3QgXHRleHR7V29ya0xpZmVCYWxhbmNlfV80DQpcZW5ke2FsaWduZWR9DQpcXQ0KDQoqKkdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqM6KioNCg0KLSBL4bq/dCBxdeG6oyBtw7QgaMOsbmggY2hvIHRo4bqleSAqKkludGVyY2VwdCA9IC0xLjA0NzQqKiwgdMawxqFuZyDhu6luZyB24bubaSBsb2ctb2RkcyBuZ2jhu4kgdmnhu4djIGPhu6dhIG5ow7NtIHRoYW0gY2hp4bq/dSAoa2jDtG5nIGzDoG0gdGjDqm0gZ2nhu50sIHLhuqV0IGtow7RuZyBow6BpIGzDsm5nIGPDtG5nIHZp4buHYywgxJHDoyBr4bq/dCBow7RuIHbDoCBy4bqldCBt4bqldCBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIOKAkyBjdeG7mWMgc+G7kW5nKS4gS2hpIGNodXnhu4NuIMSR4buVaSBzYW5nIHjDoWMgc3XhuqV0LCB0YSBjw7M6DQoNClxbDQpQID0gXGZyYWN7MX17MSArIGVeezEuMDQ3NH19IFxhcHByb3ggMC4yNTkgXFJpZ2h0YXJyb3cgXHRleHR7WMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyB0cnVuZyBiw6xuaCBj4bunYSBuaMOzbSB0aGFtIGNoaeG6v3V9IFxhcHByb3ggMjUuOVwlDQpcXQ0KDQotIEJp4bq/biAqKk92ZXJUaW1lKiogY8OzIGjhu4cgc+G7kSAxLjQ4NjAgduG7m2kgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhbyAocCA8IDAuMDAxKSwgY2hvIHRo4bqleSBuaMOibiB2acOqbiBsw6BtIHRow6ptIGdp4budIGPDsyBsb2ctb2RkcyBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIG5ow7NtIGtow7RuZyBsw6BtIHRow6ptLiBUxrDGoW5nIOG7qW5nLCBPZGRzIFJhdGlvIGzDoCBcKGVeezEuNDg2MH0gXGFwcHJveCA0LjQyXCksIHThu6ljIG5ow6JuIHZpw6puIGzDoG0gdGjDqm0gZ2nhu50gY8OzICoqbmd1eSBjxqEgbmdo4buJIHZp4buHYyBjYW8gZ+G6pXAgNC40MiBs4bqnbioqIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBsw6BtIHRow6ptIOKAkyBjaG8gdGjhuqV5IMSRw6J5IGzDoCB54bq/dSB04buRIGPDsyDhuqNuaCBoxrDhu59uZyBt4bqhbmggbmjhuqV0Lg0KDQotIFbhu5tpIGJp4bq/biAqKkpvYlNhdGlzZmFjdGlvbioqLCBiYSBt4bupYyB04burIDIgxJHhur9uIDQgxJHhu4F1IGPDsyBo4buHIHPhu5Egw6JtLCBwaOG6o24gw6FuaCB0w6FjIMSR4buZbmcgYuG6o28gduG7hyByw7UgcuG7h3Qga2hpIG3hu6ljIMSR4buZIGjDoGkgbMOybmcgY8O0bmcgdmnhu4djIHTEg25nLiBD4bulIHRo4buDLCBPZGRzIFJhdGlvIGzhuqduIGzGsOG7o3QgbMOgOg0KDQotIE3hu6ljIDI6IFwoZV57LTAuNDE0Nn0gXGFwcHJveCAwLjY2XCkNCg0KLSBN4bupYyAzOiBcKGVeey0wLjQyOTF9IFxhcHByb3ggMC42NVwpDQoNCi0gTeG7qWMgNDogXChlXnstMS4wNTU4fSBcYXBwcm94IDAuMzVcKQ0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSwgc28gduG7m2kgbmfGsOG7nWkgcuG6pXQga2jDtG5nIGjDoGkgbMOybmcsIG5nxrDhu51pIGjDoGkgbMOybmcgbeG7qWMgNCBjw7Mgb2RkcyBuZ2jhu4kgdmnhu4djICoqZ2nhuqNtIDY1JSoqLCB2w6AgbeG7qWMgMuKAkzMgY8WpbmcgZ2nhuqNtIGfhuqduICoqMzXigJM0MCUqKiwgcGjDuSBo4bujcCB24bubaSBnaeG6oyB0aHV54bq/dCBsw70gdGh1eeG6v3QgcuG6sW5nIGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djIGdpw7pwIGdp4buvIGNow6JuIG5ow6JuIHZpw6puLg0KDQotIFbhu4EgKipNYXJpdGFsU3RhdHVzKiosIG5ow7NtICoqU2luZ2xlKiogY8OzIGjhu4cgc+G7kSAxLjAwNDIgduG7m2kgcC12YWx1ZSBy4bqldCBuaOG7jyAocCA8IDAuMDAxKSwgY2hvIHRo4bqleSBuZ8aw4budaSDEkeG7mWMgdGjDom4gY8OzIGxvZy1vZGRzIG5naOG7iSB2aeG7h2MgY2FvIGjGoW4gbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuLiBPZGRzIFJhdGlvIHTGsMahbmcg4bupbmcgbMOgIFwoZV57MS4wMDQyfSBcYXBwcm94IDIuNzNcKSwgdOG7qWMgKipuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djIGPhu6dhIG5nxrDhu51pIMSR4buZYyB0aMOibiBjYW8gZ+G6pXAgMi43MyBs4bqnbioqLiBOZ8aw4bujYyBs4bqhaSwgbmjDs20gKipEaXZvcmNlZCoqIGPDsyBo4buHIHPhu5EgLTAuMjk5MyAocCA9IDAuMTg3KSBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiwgbsOqbiBraMO0bmcgdGjhu4Mga+G6v3QgbHXhuq1uIHPhu7Ega2jDoWMgYmnhu4d0IHNvIHbhu5tpIG5ow7NtIMSRw6Mga+G6v3QgaMO0bi4NCg0KLSDEkOG7kWkgduG7m2kgKipXb3JrTGlmZUJhbGFuY2UqKiwgY+G6oyBiYSBt4bupYyAyLCAzIHbDoCA0IMSR4buBdSBjw7MgaOG7hyBz4buRIMOibSB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8sIGNobyB0aOG6pXkgc+G7sSBj4bqjaSB0aGnhu4duIHRyb25nIGPDom4gYuG6sW5nIGPDtG5nIHZp4buHYyDigJMgY3Xhu5ljIHPhu5FuZyBnacO6cCBnaeG6o20ga2jhuqMgbsSDbmcgbmdo4buJIHZp4buHYy4gT2RkcyBSYXRpbyBs4bqnbiBsxrDhu6N0IGzDoDoNCg0KICAgIC0gTeG7qWMgMjogXChlXnstMC45MDEzfSBcYXBwcm94IDAuNDFcKQ0KDQogICAgLSBN4bupYyAzOiBcKGVeey0xLjIxMDB9IFxhcHByb3ggMC4zMFwpDQoNCiAgICAtIE3hu6ljIDQ6IFwoZV57LTAuNzk3MX0gXGFwcHJveCAwLjQ1XCkNCg0KTmjGsCB24bqteSwgbmjDom4gdmnDqm4gY8OzIGPDom4gYuG6sW5nIGN14buZYyBz4buRbmcgbeG7qWMgdOG7kXQgKG3hu6ljIDMpIHPhur0gY8OzIG9kZHMgbmdo4buJIHZp4buHYyBnaeG6o20ga2hv4bqjbmcgKio3MCUqKiBzbyB24bubaSBuZ8aw4budaSBy4bqldCBt4bqldCBjw6JuIGLhurFuZywgY2hvIHRo4bqleSDEkcOieSBsw6AgbeG7mXQgeeG6v3UgdOG7kSBi4bqjbyB24buHIHLDtSBy4buHdC4NCg0KKipL4bq/dCBsdeG6rW46KioNCg0KTcO0IGjDrG5oIExvZ2l0IGNobyB0aOG6pXkgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiBjaOG7i3Ug4bqjbmggaMaw4bufbmcgxJHhu5NuZyB0aOG7nWkgYuG7n2kgbmhp4buBdSB54bq/dSB04buRLCB0cm9uZyDEkcOzIG7hu5VpIGLhuq10IGzDoCB0w6xuaCB0cuG6oW5nIGzDoG0gdGjDqm0gZ2nhu50sIG3hu6ljIMSR4buZIGjDoGkgbMOybmcgY8O0bmcgdmnhu4djLCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gdsOgIHPhu7EgY8OibiBi4bqxbmcgZ2nhu69hIGPDtG5nIHZp4buHYyB2w6AgY3Xhu5ljIHPhu5FuZy4gQ+G7pSB0aOG7gzoNCg0KLSBOaOG7r25nIG5nxrDhu51pIGzDoG0gdGjDqm0gZ2nhu50sIMSR4buZYyB0aMOibiwgw610IGjDoGkgbMOybmcgduG7m2kgY8O0bmcgdmnhu4djIHbDoCBj4bqjbSB0aOG6pXkgbeG6pXQgY8OibiBi4bqxbmcgY8O0bmcgdmnhu4djIOKAkyBjdeG7mWMgc+G7kW5nIGPDsyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGNhbyBoxqFuIHLDtSBy4buHdA0KDQotIE5nxrDhu6NjIGzhuqFpLCBuaOG7r25nIG5ow6JuIHZpw6puIGPDsyBt4bupYyDEkeG7mSBow6BpIGzDsm5nIGNhbyB2w6AgY3Xhu5ljIHPhu5FuZyBjw6JuIGLhurFuZyBz4bq9IGPDsyB4dSBoxrDhu5tuZyBn4bqvbiBiw7MgbMOidSBkw6BpIGjGoW4gduG7m2kgdOG7lSBjaOG7qWMuDQoNCiMjIyMgKiozLjMuMy4zIE3DtCBow6xuaCBQcm9iaXQqKg0KDQpNw7QgaMOsbmggUHJvYml0IMSRxrDhu6NjIHPhu60gZOG7pW5nIG5o4bqxbSDEkcOhbmggZ2nDoSDhuqNuaCBoxrDhu59uZyDEkeG7k25nIHRo4budaSBj4bunYSBjw6FjIHnhur91IHThu5E6ICoqT3ZlclRpbWUqKiwgKipKb2JTYXRpc2ZhY3Rpb24qKiwgKipNYXJpdGFsU3RhdHVzKiogdsOgICoqV29ya0xpZmVCYWxhbmNlKiogxJHhur9uIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4uIEtow6FjIHbhu5tpIG3DtCBow6xuaCBMb2dpdCwgbcO0IGjDrG5oIFByb2JpdCBnaeG6oyDEkeG7i25oIGJp4bq/biB0aeG7gW0g4bqpbiAobGF0ZW50IHZhcmlhYmxlKSB0aGVvIHBow6JuIHBo4buRaSBjaHXhuqluIGNodeG6qW4gaMOzYSwgdsOgIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIMSRxrDhu6NjIHTDrW5oIGLhurFuZyBow6BtIHBow6JuIHBo4buRaSBjaHXhuqluIHTDrWNoIGzFqXkgKENERikuIA0KDQpNw7QgaMOsbmggbMO9IHRodXnhur90IGPDsyBk4bqhbmc6DQoNClxbDQpQX2kgPSBcUGhpKFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e092ZXJUaW1lfV9pICsgXGJldGFfMiBcY2RvdCBcdGV4dHtKb2JTYXRpc2ZhY3Rpb259XzIgKyBcY2RvdHMgKyBcYmV0YV85IFxjZG90IFx0ZXh0e1dvcmtMaWZlQmFsYW5jZX1fNCkNClxdDQoNClRyb25nIMSRw7M6DQoNCi0gXChQX2lcKSBsw6AgeMOhYyBzdeG6pXQgbmjDom4gdmnDqm4gdGjhu6kgXChpXCkgbmdo4buJIHZp4buHYy4NCg0KLSBcKFxQaGlcKSBsw6AgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5Lg0KDQotIEPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggbmjGsCBKb2JTYXRpc2ZhY3Rpb24gdsOgIFdvcmtMaWZlQmFsYW5jZSDEkcaw4bujYyB44butIGzDvSBkxrDhu5tpIGThuqFuZyBiaeG6v24gcGjDom4gbG/huqFpLCB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgbMOgIG3hu6ljIDEgKHLhuqV0IGtow7RuZyBow6BpIGzDsm5nIC8gcuG6pXQgbeG6pXQgY8OibiBi4bqxbmcpLg0KDQotIE1hcml0YWxTdGF0dXMgY8OzIG5ow7NtIHRoYW0gY2hp4bq/dSBsw6AgIk1hcnJpZWQiOyBPdmVyVGltZSBjw7MgbmjDs20gdGhhbSBjaGnhur91IGzDoCAiTm8iLg0KDQpgYGB7cn0NCiMgxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCBQcm9iaXQNCm1vZGVsX3Byb2JpdF9tdWx0aSA8LSBnbG0oQXR0cml0aW9uX2JpbiB+IE92ZXJUaW1lICsgSm9iU2F0aXNmYWN0aW9uICsgTWFyaXRhbFN0YXR1cyArIFdvcmtMaWZlQmFsYW5jZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGExLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpKQ0KDQojIEvhur90IHF14bqjIG3DtCBow6xuaA0Kc3VtbWFyeShtb2RlbF9wcm9iaXRfbXVsdGkpDQpgYGANCg0KKipQaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZzoqKg0KDQpcWw0KXGJlZ2lue2FsaWduZWR9DQpcUGhpXnstMX0oUF9pKSA9XCAmIC0wLjYyMDA1ICsgMC44MjA3MCBcY2RvdCBcdGV4dHtPdmVyVGltZX1faSAtIDAuMjQ2NzkgXGNkb3QgXHRleHR7Sm9iU2F0aXNmYWN0aW9ufV8yIC0gMC4yNDM3NCBcY2RvdCBcdGV4dHtKb2JTYXRpc2ZhY3Rpb259XzMgLSAwLjU2NDk3IFxjZG90IFx0ZXh0e0pvYlNhdGlzZmFjdGlvbn1fNCBcXA0KJiAtIDAuMTUxNjcgXGNkb3QgXHRleHR7TWFyaXRhbFN0YXR1c31fe1x0ZXh0e0Rpdm9yY2VkfX0gKyAwLjU0NzUyIFxjZG90IFx0ZXh0e01hcml0YWxTdGF0dXN9X3tcdGV4dHtTaW5nbGV9fSBcXA0KJiAtIDAuNTAxNTAgXGNkb3QgXHRleHR7V29ya0xpZmVCYWxhbmNlfV8yIC0gMC42NzcxMyBcY2RvdCBcdGV4dHtXb3JrTGlmZUJhbGFuY2V9XzMgLSAwLjQzNTUwIFxjZG90IFx0ZXh0e1dvcmtMaWZlQmFsYW5jZX1fNA0KXGVuZHthbGlnbmVkfQ0KXF0NCg0KVHJvbmcgxJHDsywgduG6vyB0csOhaSBsw6AgZ2nDoSB0cuG7iyDigJxjaOG7iSBz4buRIGNodeG6qW7igJ0gbuG7mWkgc3V5IHRoZW8gcGjDom4gcGjhu5FpIGNodeG6qW4gY2h14bqpbiBow7NhLg0KDQoqKkdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqM6KioNCg0KLSBI4buHIHPhu5EgY2jhurduIChJbnRlcmNlcHQpID0gLTAuNjIwMDUgcGjhuqNuIMOhbmggeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyB0cnVuZyBiw6xuaCBj4bunYSBuaMOibiB2acOqbiB0aHXhu5ljIG5ow7NtIHRoYW0gY2hp4bq/dSAoa2jDtG5nIGzDoG0gdGjDqm0gZ2nhu50sIHLhuqV0IGtow7RuZyBow6BpIGzDsm5nIGPDtG5nIHZp4buHYywgxJHDoyBr4bq/dCBow7RuIHbDoCBy4bqldCBt4bqldCBjw6JuIGLhurFuZyBjw7RuZyB2aeG7h2Mg4oCTIGN14buZYyBz4buRbmcpLiBO4bq/dSBu4buZaSBzdXkgbmfGsOG7o2MgbOG6oWkgdOG7qyDEkWnhu4NtIHogPSAtMC42MjAwNSB0cm9uZyBwaMOibiBwaOG7kWkgY2h14bqpbiwgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyDGsOG7m2MgbMaw4bujbmcgbMOgIGtob+G6o25nIDI2LjclLg0KDQotIEjhu4cgc+G7kSBcKFx0ZXh0e092ZXJUaW1lWWVzfSA9IDAuODIwNzBcKSBjaG8gdGjhuqV5IG7hur91IG5ow6JuIHZpw6puIGPDsyBsw6BtIHRow6ptIGdp4budLCDigJxjaOG7iSBz4buRIGNodeG6qW7igJ0gdMSDbmcgdGjDqm0gMC44MjA3MCDEkcahbiB24buLLCBraGnhur9uIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgdMSDbmcgdOG7qyBraG/huqNuZyAyNi43JSAobmjDs20ga2jDtG5nIGzDoG0gdGjDqm0pIGzDqm4ga2hv4bqjbmcgNTMuNCUgKG7hu5lpIHN1eSB04burIHogPSAwLjIwMDY1KS4gxJDDonkgbMOgIHnhur91IHThu5EgY8OzIOG6o25oIGjGsOG7n25nIG3huqFuaCBuaOG6pXQgdHJvbmcgbcO0IGjDrG5oLCB24bubaSDEkeG7mSB0aW4gY+G6rXkgcuG6pXQgY2FvIChwIDwgMC4wMDEpLg0KDQotIMSQ4buRaSB24bubaSAqKkpvYlNhdGlzZmFjdGlvbioqLCBraGkgc28gc8OhbmggduG7m2kgbeG7qWMgcuG6pXQga2jDtG5nIGjDoGkgbMOybmc6DQoNCiAgIC0gTeG7qWMgMiBjw7MgaOG7hyBz4buRIC0wLjI0Njc5IChwID0gMC4wNTQ3KSwgY2hvIHRo4bqleSB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGdp4bqjbSBuaOG6uSBuaMawbmcgY2jGsGEgxJHhuqF0IG3hu6ljIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBt4bqhbmguDQogICANCiAgIC0gTeG7qWMgMyBjw7MgaOG7hyBz4buRIC0wLjI0Mzc0IChwID0gMC4wMzMyKSwgZ2nDunAgZ2nhuqNtIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2Mga2hv4bqjbmcgNS44IMSRaeG7g20gcGjhuqduIHRyxINtLg0KICAgDQogICAtIE3hu6ljIDQgY8OzIGjhu4cgc+G7kSAtMC41NjQ5NyAocCA8IDAuMDAxKSwgbMOgbSBnaeG6o20gxJHDoW5nIGvhu4MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyB04burIDI2LjclIHh14buRbmcga2hv4bqjbmcgMTUuMiUgKG7hu5lpIHN1eSB04burIHogPSAtMS4xODUpLg0KDQrEkGnhu4F1IG7DoHkgcGjhuqNuIMOhbmggc+G7sSBow6BpIGzDsm5nIHbhu5tpIGPDtG5nIHZp4buHYyBjw7MgdmFpIHRyw7IgYuG6o28gduG7hyByw7UgcuG7h3QsIMSR4bq3YyBiaeG7h3Qg4bufIG3hu6ljIMSR4buZIGNhby4NCg0KLSBW4buBIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibjoNCiAgICAgLSBOaMOibiB2acOqbiAqKsSR4buZYyB0aMOibioqIGPDsyBo4buHIHPhu5EgMC41NDc1MiAocCA8IDAuMDAxKSwgdMawxqFuZyDEkcawxqFuZyB2aeG7h2MgdMSDbmcg4oCcY2jhu4kgc+G7kSBjaHXhuqlu4oCdIHRow6ptIDAuNTQ3NTIgdsOgIG7Dom5nIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgbMOqbiBraG/huqNuZyA0Ni4yJSDigJMgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20gxJHDoyBr4bq/dCBow7RuLg0KICAgICANCiAgICAgLSBOaMOzbSAqKmx5IGjDtG4qKiAoRGl2b3JjZWQpIGPDsyBo4buHIHPhu5EgLTAuMTUxNjcgbmjGsG5nIGtow7RuZyBtYW5nIMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocCA9IDAuMjAzOSksIGRvIMSRw7Mga2jDtG5nIGtow6FjIGJp4buHdCByw7UgcuG7h3QgduG7m2kgbmjDs20gdGhhbSBjaGnhur91Lg0KDQotIMSQ4buRaSB24bubaSAqKldvcmtMaWZlQmFsYW5jZSoqLCBr4bq/dCBxdeG6oyBjaG8gdGjhuqV5IHPhu7EgY+G6o2kgdGhp4buHbiBjw6JuIGLhurFuZyBjw7RuZyB2aeG7h2Mg4oCTIGN14buZYyBz4buRbmcgZ8OzcCBwaOG6p24gbMOgbSBnaeG6o20geMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYzoNCg0KICAgIC0gTeG7qWMgMjogaOG7hyBz4buRIC0wLjUwMTUwIChwID0gMC4wMDQyKSwgZ2nhuqNtIHjDoWMgc3XhuqV0IHThu6sgMjYuNyUgeHXhu5FuZyBjw7JuIDE3LjQlLg0KICAgIA0KICAgIC0gTeG7qWMgMzogaOG7hyBz4buRIC0wLjY3NzEzIChwIDwgMC4wMDEpLCBnaeG6o20gY8OybiBraG/huqNuZyAxMy4yJS4NCiAgICANCiAgICAtIE3hu6ljIDQ6IGjhu4cgc+G7kSAtMC40MzU1MCAocCA9IDAuMDI3NiksIHTGsMahbmcg4bupbmcgeMOhYyBzdeG6pXQgMTkuNCUuDQoNCkTDuSBz4buxIGdp4bqjbSBraMO0bmcgaG/DoG4gdG/DoG4gdHV54bq/biB0w61uaCwgbmjGsG5nIHTDoWMgxJHhu5luZyBnaeG6o20gbMOgIG5o4bqldCBxdcOhbiB2w6AgY8OzIMO9IG5naMSpYSB0aOG7sWMgdGnhu4VuIGNhby4NCg0KKipL4bq/dCBsdeG6rW46KioNCg0KTcO0IGjDrG5oIFByb2JpdCBraOG6s25nIMSR4buLbmggcuG6sW5nIGPDoWMgeeG6v3UgdOG7kSAqKmzDoG0gdGjDqm0gZ2nhu50qKiwgKipow6BpIGzDsm5nIGPDtG5nIHZp4buHYyoqLCAqKnTDrG5oIHRy4bqhbmcgaMO0biBuaMOibioqLCB2w6AgKipjw6JuIGLhurFuZyBjdeG7mWMgc+G7kW5nKiogxJHhu4F1IOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djLiBOaMOibiB2acOqbiBsw6BtIHRow6ptIGdp4budLCDEkeG7mWMgdGjDom4sIGtow7RuZyBow6BpIGzDsm5nIHbDoCBt4bqldCBjw6JuIGLhurFuZyBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjYW8gaMahbi4gVHJvbmcga2hpIMSRw7MsIHPhu7EgaMOgaSBsw7JuZyB2w6AgY8OibiBi4bqxbmcgxJHDs25nIHZhaSB0csOyIGzDoCBjw6FjIHnhur91IHThu5EgYuG6o28gduG7hyBi4buBbiB24buvbmcuIA0KDQpWaeG7h2MgZMO5bmcgbcO0IGjDrG5oIFByb2JpdCBnacO6cCB4w6FjIG5o4bqtbiB0w61uaCBuaOG6pXQgcXXDoW4gY+G7p2EgY8OhYyBr4bq/dCBxdeG6oyB0aHUgxJHGsOG7o2MgdOG7qyBtw7QgaMOsbmggTFBNIHbDoCBMb2dpdCwgxJHhu5NuZyB0aOG7nWkgY3VuZyBj4bqlcCBt4buZdCBnw7NjIG5ow6xuIHjDoWMgc3XhuqV0IG3GsOG7o3QgaMahbiB0aMO0bmcgcXVhIHBow6JuIHBo4buRaSBjaHXhuqluLg0KDQojIyMjICoqMy4zLjMuNCBNw7QgaMOsbmggQ2xvZ2xvZyoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgQ2xvZ2xvZyAoQ29tcGxlbWVudGFyeSBMb2ctTG9nKSDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBwaMOibiB0w61jaCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBuaOG7iyBwaMOibiwgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHkgbMOgIGto4bqjIG7Eg25nIG5naOG7iSB2aeG7h2MgY+G7p2EgbmjDom4gdmnDqm4uIEtow6FjIHbhu5tpIExvZ2l0IHbDoCBQcm9iaXQsIG3DtCBow6xuaCBDbG9nbG9nIMSR4bq3YyBiaeG7h3QgcGjDuSBo4bujcCBraGkgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24ga2jDtG5nIGPDom4gxJHhu5FpIChuZ2hpw6puZyB24buBIG3hu5l0IHBow61hKSB2w6AgdGjGsOG7nW5nIGTDuW5nIGtoaSBjw6FjIGdpw6EgdHLhu4sgbmjhu48gKGhp4bq/bSkgY8OzIHZhaSB0csOyIHF1YW4gdHLhu41uZy4NCg0KTcO0IGjDrG5oIGzDvSB0aHV54bq/dCBjw7MgZOG6oW5nOg0KDQpcWw0KXGxvZygtXGxvZygxIC0gUF9pKSkgPSBcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBcdGV4dHtPdmVyVGltZX1faSArIFxiZXRhXzIgXGNkb3QgXHRleHR7Sm9iU2F0aXNmYWN0aW9ufV8yICsgXGNkb3RzICsgXGJldGFfOSBcY2RvdCBcdGV4dHtXb3JrTGlmZUJhbGFuY2V9XzQNClxdDQoNCmBgYHtyfQ0KIyDGr+G7m2MgbMaw4bujbmcgbcO0IGjDrG5oIENsb2dsb2cNCm1vZGVsX2Nsb2dsb2dfbXVsdGkgPC0gZ2xtKEF0dHJpdGlvbl9iaW4gfiBPdmVyVGltZSArIEpvYlNhdGlzZmFjdGlvbiArIE1hcml0YWxTdGF0dXMgKyBXb3JrTGlmZUJhbGFuY2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YTEsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpKQ0KDQojIEvhur90IHF14bqjIG3DtCBow6xuaA0Kc3VtbWFyeShtb2RlbF9jbG9nbG9nX211bHRpKQ0KYGBgDQoNCioqR2nhuqNpIHRow61jaCBr4bq/dCBxdeG6ozoqKg0KDQotIEdpw6EgdHLhu4sgSW50ZXJjZXB0ID0gLTEuMjgyOCDEkeG6oWkgZGnhu4duIGNobyBuaMOzbSB0aGFtIGNoaeG6v3UgZ+G7k20gbmjhu69uZyBuaMOibiB2acOqbiBraMO0bmcgbMOgbSB0aMOqbSBnaeG7nSwgcuG6pXQga2jDtG5nIGjDoGkgbMOybmcgY8O0bmcgdmnhu4djLCDEkcOjIGvhur90IGjDtG4gdsOgIGPDsyBjdeG7mWMgc+G7kW5nIHLhuqV0IG3huqV0IGPDom4gYuG6sW5nLiBLaGkgdGhheSB0aOG6vyB2w6BvIGPDtG5nIHRo4bupYyBsacOqbiBr4bq/dCwgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyDGsOG7m2MgdMOtbmggY2hvIG5ow7NtIG7DoHkgbMOgIGtob+G6o25nIDIxLjclLg0KDQotIEJp4bq/biAqKk92ZXJUaW1lKiogY8OzIGjhu4cgc+G7kSAxLjMwMTcgduG7m2kgbeG7qWMgw70gbmdoxKlhIHRo4buRbmcga8OqIGPhu7FjIGNhbyAocCA8IDAuMDAxKSwgY2hvIHRo4bqleSBy4bqxbmcgbmjDom4gdmnDqm4gY8OzIGzDoG0gdGjDqm0gZ2nhu50gc+G6vSBsw6BtIHTEg25nIMSRw6FuZyBr4buDIGdpw6EgdHLhu4sgaMOgbSBsacOqbiBr4bq/dCwga8OpbyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIHThu6sgMjEuNyUgbMOqbiBraG/huqNuZyA1NC4zJS4gxJDDonkgbMOgIGJp4bq/biBjw7Mg4bqjbmggaMaw4bufbmcgbeG6oW5oIHbDoCByw7UgcsOgbmcgbmjhuqV0IHRyb25nIG3DtCBow6xuaC4NCg0KLSBW4bubaSAqKkpvYlNhdGlzZmFjdGlvbioqLCBjw6FjIG3hu6ljIMSR4buZIGjDoGkgbMOybmcgY2FvIGjGoW4gxJHhu4F1IGPDsyBo4buHIHPhu5Egw6JtLCBjaG8gdGjhuqV5IG3hu6ljIMSR4buZIGjDoGkgbMOybmcgY8OgbmcgY2FvIHRow6wgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjw6BuZyB0aOG6pXA6DQoNCiAgIC0gTeG7qWMgMjogaOG7hyBz4buRIC0wLjMxNzEgKHAgPSAwLjEwMSksIG3hurdjIGTDuSBjw7MgZOG6pXUgaGnhu4d1IGdp4bqjbSBuaMawbmcgY2jGsGEgxJHhu6cgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ouICANCiAgIA0KICAgLSBN4bupYyAzOiBo4buHIHPhu5EgLTAuMzY3NSAocCA9IDAuMDMzKSwgY8OzIMO9IG5naMSpYSwgZ2nhuqNtIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgeHXhu5FuZyBraG/huqNuZyAxOC40JS4gIA0KICAgDQogICAtIE3hu6ljIDQ6IGjhu4cgc+G7kSAtMC45MTgyIChwIDwgMC4wMDEpLCBnaeG6o20gbeG6oW5oIHjDoWMgc3XhuqV0IGPDsm4ga2hv4bqjbmcgOS43JS4NCg0KLSBCaeG6v24gKipNYXJpdGFsU3RhdHVzKiogY2hvIHRo4bqleToNCg0KICAgIC0gTmjDs20gKipTaW5nbGUqKiBjw7MgaOG7hyBz4buRIDAuODgwNiAocCA8IDAuMDAxKSwgY2hvIHRo4bqleSBuaMOibiB2acOqbiDEkeG7mWMgdGjDom4gY8OzIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY2FvIGjGoW4gxJHDoW5nIGvhu4Mg4oCTIHTEg25nIHThu6sgMjEuNyUgbMOqbiBraG/huqNuZyA0Ny4xJS4gIA0KICAgIA0KICAgIC0gTmjDs20gKipEaXZvcmNlZCoqIGPDsyBo4buHIHPhu5EgLTAuMjY1NiBuaMawbmcga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAgPSAwLjE5OCksIG7Dqm4ga2jDtG5nIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyB24bubaSBuaMOzbSDEkcOjIGvhur90IGjDtG4uDQoNCi0gQmnhur9uICoqV29ya0xpZmVCYWxhbmNlKiogY8WpbmcgY8OzIHTDoWMgxJHhu5luZyByw7UgcuG7h3Q6DQoNCiAgICAtIE3hu6ljIDI6IGjhu4cgc+G7kSAtMC43NDgyIChwID0gMC4wMDIpLCBsw6BtIGdp4bqjbSB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIHh14buRbmcga2hv4bqjbmcgMTMuNCUuICANCiAgICANCiAgICAtIE3hu6ljIDM6IGjhu4cgc+G7kSAtMS4wMzEzIChwIDwgMC4wMDEpLCBnaeG6o20geHXhu5FuZyBjaOG7iSBjw7JuIDguNiUuICANCiAgICANCiAgICAtIE3hu6ljIDQ6IGjhu4cgc+G7kSAtMC42ODMzIChwID0gMC4wMTYpLCBnaeG6o20gY8OybiBraG/huqNuZyAxNC4zJS4NCg0KQ8OhYyBr4bq/dCBxdeG6oyBuw6B5IGto4bqzbmcgxJHhu4tuaCB2YWkgdHLDsiBi4bqjbyB24buHIGPhu6dhIHZp4buHYyBj4bqjaSB0aGnhu4duIGPDom4gYuG6sW5nIGN14buZYyBz4buRbmcgdHJvbmcgdmnhu4djIGdp4buvIGNow6JuIG5ow6JuIHPhu7EuDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCk3DtCBow6xuaCAqKkNsb2dsb2cqKiB0aeG6v3AgdOG7pWMgY+G7p25nIGPhu5EgY8OhYyBr4bq/dCBsdeG6rW4gdHLGsOG7m2MgxJHDszogbmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSwgxJHhu5ljIHRow6JuLCBraMO0bmcgaMOgaSBsw7JuZyBjw7RuZyB2aeG7h2MgdsOgIHRoaeG6v3UgY8OibiBi4bqxbmcgY3Xhu5ljIHPhu5FuZyBjw7MgeMOhYyBzdeG6pXQgbmdo4buJIHZp4buHYyBjYW8gaMahbiDEkcOhbmcga+G7gy4gVHJvbmcga2hpIMSRw7MsIHPhu7EgaMOgaSBsw7JuZyBjw7RuZyB2aeG7h2MgdsOgIGPDom4gYuG6sW5nIGN14buZYyBz4buRbmcgxJHDs25nIHZhaSB0csOyIG5oxrAgbmjhu69uZyB54bq/dSB04buRIGLhuqNvIHbhu4cgbeG6oW5oIG3hur0uIFNvIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGtow6FjLCAqKkNsb2dsb2cqKiDEkeG6t2MgYmnhu4d0IGjhu691IMOtY2gga2hpIG3DtCBow6xuaCBow7NhIGPDoWMgeMOhYyBzdeG6pXQgbmjhu48gaG/hurdjIGtoaSBwaMOibiBwaOG7kWkgbOG7l2kgY8OzIMSR4buZIGzhu4djaCwgZ2nDunAgY3VuZyBj4bqlcCBt4buZdCBnw7NjIG5ow6xuIGLhu5Ugc3VuZyBjaMOtbmggeMOhYyB2w6AgbmjhuqF5IGLDqW4gaMahbiB0cm9uZyBjw6FjIHF1eeG6v3QgxJHhu4tuaCBuaMOibiBz4buxIGNoaeG6v24gbMaw4bujYy4gDQoNCiMjIyMgKiozLjMuMy41IMSQw6FuaCBnacOhIG3DtCBow6xuaCoqDQoNClRyb25nIHBo4bqnbiBuw6B5LCB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCDEkcOhbmggZ2nDoSB2w6Agc28gc8OhbmggaGnhu4d1IHF14bqjIGJhIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom46ICoqTG9naXQqKiwgKipQcm9iaXQqKiB2w6AgKipDbG9nbG9nKiosIHRow7RuZyBxdWEgYmEgdGnDqnUgY2jDrSBjaMOtbmggZ+G7k206DQoNCi0gKipBSUMgKEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24pKiog4oCTIMSRbyBsxrDhu51uZyBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCwgY8OgbmcgdGjhuqVwIGPDoG5nIHThu5F0Ow0KDQotICoqQnJpZXIgU2NvcmUqKiDigJMgcGjhuqNuIMOhbmggxJHhu5kgY2jDrW5oIHjDoWMgdHJvbmcgdmnhu4djIMaw4bubYyBsxrDhu6NuZyB4w6FjIHN14bqldCwgY8Ogbmcgbmjhu48gY8OgbmcgdOG7kXQ7DQoNCi0gKipNYSB0cuG6rW4gbmjhuqdtIGzhuqtuIChDb25mdXNpb24gTWF0cml4KSoqIOKAkyBnacO6cCDEkcOhbmggZ2nDoSBoaeG7h3UgcXXhuqMgZOG7sSBiw6FvIHRo4buxYyB04bq/LCDEkeG6t2MgYmnhu4d0IGzDoCBraOG6oyBuxINuZyBwaMOibiBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbSDigJxuZ2jhu4kgdmnhu4dj4oCdIHbDoCDigJxraMO0bmcgbmdo4buJIHZp4buHY+KAnS4NCg0KYGBge3J9DQojIEFJQyB04burbmcgbcO0IGjDrG5oDQphaWNfbG9naXQgPC0gQUlDKG1vZGVsX2xvZ2l0X211bHRpKQ0KYWljX3Byb2JpdCA8LSBBSUMobW9kZWxfcHJvYml0X211bHRpKQ0KYWljX2Nsb2dsb2cgPC0gQUlDKG1vZGVsX2Nsb2dsb2dfbXVsdGkpDQoNCiMgQnJpZXIgU2NvcmUgdOG7q25nIG3DtCBow6xuaA0KYnJpZXJfbG9naXQgPC0gQnJpZXJTY29yZShtb2RlbF9sb2dpdF9tdWx0aSkNCmJyaWVyX3Byb2JpdCA8LSBCcmllclNjb3JlKG1vZGVsX3Byb2JpdF9tdWx0aSkNCmJyaWVyX2Nsb2dsb2cgPC0gQnJpZXJTY29yZShtb2RlbF9jbG9nbG9nX211bHRpKQ0KDQojIE1hIHRy4bqtbiBuaOG6p20gbOG6q24gdOG7q25nIG3DtCBow6xuaA0KY29uZl9sb2dpdCA8LSBDb25mKHRhYmxlKA0KICBwcmVkaWN0KG1vZGVsX2xvZ2l0X211bHRpLCB0eXBlID0gInJlc3BvbnNlIikgPj0gMC41LA0KICBkYXRhMSRBdHRyaXRpb25fYmluID09IDENCikpDQpjb25mX3Byb2JpdCA8LSBDb25mKHRhYmxlKA0KICBwcmVkaWN0KG1vZGVsX3Byb2JpdF9tdWx0aSwgdHlwZSA9ICJyZXNwb25zZSIpID49IDAuNSwNCiAgZGF0YTEkQXR0cml0aW9uX2JpbiA9PSAxDQopKQ0KDQpjb25mX2Nsb2dsb2cgPC0gQ29uZih0YWJsZSgNCiAgcHJlZGljdChtb2RlbF9jbG9nbG9nX211bHRpLCB0eXBlID0gInJlc3BvbnNlIikgPj0gMC41LA0KICBkYXRhMSRBdHRyaXRpb25fYmluID09IDENCikpDQoNCiMgSW4ga+G6v3QgcXXhuqMNCmxpc3QoDQogIEFJQyA9IGMoTG9naXQgPSBhaWNfbG9naXQsIFByb2JpdCA9IGFpY19wcm9iaXQsIENsb2dsb2cgPSBhaWNfY2xvZ2xvZyksDQogIEJyaWVyX1Njb3JlID0gYyhMb2dpdCA9IGJyaWVyX2xvZ2l0LCBQcm9iaXQgPSBicmllcl9wcm9iaXQsIENsb2dsb2cgPSBicmllcl9jbG9nbG9nKSwNCiAgQ29uZnVzaW9uX0xvZ2l0ID0gY29uZl9sb2dpdCwNCiAgQ29uZnVzaW9uX1Byb2JpdCA9IGNvbmZfcHJvYml0LA0KICBDb25mdXNpb25fQ2xvZ2xvZyA9IGNvbmZfY2xvZ2xvZw0KKQ0KYGBgDQoNCioqS+G6v3QgcXXhuqMgc28gc8OhbmgqKg0KDQp8IENo4buJIHPhu5EgxJHDoW5oIGdpw6EgfCBMb2dpdCAgIHwgUHJvYml0ICB8IENsb2dsb2cgfA0KfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfA0KfCBBSUMgICAgICAgICAgICAgfCAxMTQ3LjAzIHwgMTE0OS43NCB8IDExNDYuMDYgfA0KfCBCcmllciBTY29yZSAgICAgfCAwLjExNjc5IHwgMC4xMTcwNiB8IDAuMTE2NzAgfA0KDQpOaMawIHbhuq15LCB0cm9uZyBiYSBtw7QgaMOsbmgsICoqQ2xvZ2xvZyBsw6AgbcO0IGjDrG5oIGPDsyBBSUMgdsOgIEJyaWVyIFNjb3JlIHRo4bqlcCBuaOG6pXQqKiwgY2hvIHRo4bqleSBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIHThu5F0IGjGoW4gdsOgIGto4bqjIG7Eg25nIMaw4bubYyBsxrDhu6NuZyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGNow61uaCB4w6FjIGjGoW4gc28gduG7m2kgTG9naXQgdsOgIFByb2JpdC4NCg0KKipQaMOibiB0w61jaCBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuKioNCg0KTWEgdHLhuq1uIG5o4bqnbSBs4bqrbiBwaOG6o24gw6FuaCBoaeG7h3UgcXXhuqMgcGjDom4gbG/huqFpIGhhaSBuaMOzbSDEkeG7kWkgdMaw4bujbmc6ICoqbmdo4buJIHZp4buHYyAoY2xhc3MgMSkqKiB2w6AgKipraMO0bmcgbmdo4buJIHZp4buHYyAoY2xhc3MgMCkqKi4gQ8OhYyBjaOG7iSBz4buRIHF1YW4gdHLhu41uZyBiYW8gZ+G7k206DQoNCi0gKipBY2N1cmFjeSoqOiB04bu3IGzhu4cgZOG7sSBiw6FvIMSRw7puZyB0csOqbiB0b8OgbiBi4buZIG3huqt1Ow0KDQotICoqU2Vuc2l0aXZpdHkgKFRydWUgTmVnYXRpdmUgUmF0ZSkqKjoga2jhuqMgbsSDbmcgcGjDoXQgaGnhu4duIMSRw7puZyBuaMOibiB2acOqbiBraMO0bmcgbmdo4buJIHZp4buHYzsNCg0KLSAqKlNwZWNpZmljaXR5IChUcnVlIFBvc2l0aXZlIFJhdGUpKio6IGto4bqjIG7Eg25nIHBow6F0IGhp4buHbiDEkcO6bmcgbmjDom4gdmnDqm4gbmdo4buJIHZp4buHYzsNCg0KLSAqKkYxLXNjb3JlKio6IHRoxrDhu5tjIMSRbyB04buVbmcgaOG7o3AgxJHhu5kgY2jDrW5oIHjDoWMgdsOgIMSR4buZIGJhbyBwaOG7pzsNCg0KLSAqKkJhbGFuY2VkIEFjY3VyYWN5Kio6IHRydW5nIGLDrG5oIGPhu5luZyBnaeG7r2EgU2Vuc2l0aXZpdHkgdsOgIFNwZWNpZmljaXR5IOKAkyBxdWFuIHRy4buNbmcga2hpIGThu68gbGnhu4d1IG3huqV0IGPDom4gYuG6sW5nLg0KDQoqKkvhur90IHF14bqjIGNow61uaCB0w7NtIGzGsOG7o2M6KioNCg0KfCBNw7QgaMOsbmggfCBBY2N1cmFjeSB8IFNlbnNpdGl2aXR5IHwgU3BlY2lmaWNpdHkgfCBGMS1zY29yZSB8IEJhbGFuY2VkIEFjY3VyYWN5IHwNCnwtLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBMb2dpdCAgIHwgODQuMjklICAgfCA5OC4wNSUgICAgICB8IDEyLjY2JSAgICAgIHwgOTEuMjglICAgfCA1NS4zNiUgICAgICAgICAgICB8DQp8IFByb2JpdCAgfCA4NC4yOSUgICB8IDk4LjM4JSAgICAgIHwgMTAuOTclICAgICAgfCA5MS4zMSUgICB8IDU0LjY3JSAgICAgICAgICAgIHwNCnwgQ2xvZ2xvZyB8IDg0LjI5JSAgIHwgOTguMDUlICAgICAgfCAxMi42NiUgICAgICB8IDkxLjI4JSAgIHwgNTUuMzYlICAgICAgICAgICAgfA0KDQoqKkdp4bqjaSB0aMOtY2ggdsOgIG5o4bqtbiB4w6l0KioNCg0KLSBD4bqjIGJhIG3DtCBow6xuaCDEkeG7gXUgY8OzICoqYWNjdXJhY3kgY2FvICh+ODQlKSoqLCB0dXkgbmhpw6puIMSRw6J5IGzDoCDEkeG6t2MgxJFp4buDbSBk4buFIMSRw6FuaCBs4burYSB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBt4bqldCBjw6JuIGLhurFuZyAodOG7tyBs4buHIG5naOG7iSB2aeG7h2MgdGjhuqVwKS4NCg0KLSBNw7QgaMOsbmggKipMb2dpdCB2w6AgUHJvYml0KiogY8OzIGto4bqjIG7Eg25nIHBow6F0IGhp4buHbiDEkcO6bmcgbmjDom4gdmnDqm4ga2jDtG5nIG5naOG7iSB2aeG7h2MgcuG6pXQgY2FvICgqKlNlbnNpdGl2aXR5ID4gOTglKiopLCB0dXkgbmhpw6puIGzhuqFpIGfhurdwIGtow7Mga2jEg24gdHJvbmcgdmnhu4djIHBow6F0IGhp4buHbiBuZ8aw4budaSBuZ2jhu4kgdmnhu4djICgqKlNwZWNpZmljaXR5IGNo4buJIDEx4oCTMTMlKiopLg0KDQotIE3DtCBow6xuaCAqKkNsb2dsb2cqKiBjw7MgKipCYWxhbmNlZCBBY2N1cmFjeSBjYW8gbmjhuqV0KiosIMSR4buTbmcgdGjhu51pIGR1eSB0csOsICoqQUlDIHbDoCBCcmllciBTY29yZSB04buRdCBuaOG6pXQqKiwgY2hvIHRo4bqleSDEkcOieSBsw6AgKiptw7QgaMOsbmggaGnhu4d1IHF14bqjIG5o4bqldCoqIGtoaSB4w6l0IMSR4bq/biB04buVbmcgdGjhu4MgY8OhYyB0acOqdSBjaMOtIMSRw6FuaCBnacOhLg0KDQoqKkvhur90IGx14bqtbioqDQoNCi0gVmnhu4djIMSRw6FuaCBnacOhIGJhIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gY2hvIHRo4bqleSAqKm3DtCBow6xuaCBDbG9nbG9nIGPDsyDGsHUgdGjhur8gcsO1IHLhu4d0KiosIGtow7RuZyBjaOG7iSDhu58gxJHhu5kgcGjDuSBo4bujcCBtw7QgaMOsbmggKEFJQyB0aOG6pXApLCDEkeG7mSBjaMOtbmggeMOhYyB4w6FjIHN14bqldCAoQnJpZXIgdGjhuqVwKSwgbcOgIGPDsm4gY8OzICoqaGnhu4d1IHN14bqldCBwaMOibiBsb+G6oWkgdOG7kXQgbmjhuqV0IGtoaSB4w6l0IMSR4bq/biB0w61uaCBjw6JuIGLhurFuZyBnaeG7r2EgaGFpIGzhu5twKiogKEJhbGFuY2VkIEFjY3VyYWN5IGNhbyBuaOG6pXQpLg0KDQotIFRyb25nIGLhu5FpIGPhuqNuaCBwaMOibiB0w61jaCBow6BuaCB2aSBuZ2jhu4kgdmnhu4djIOKAkyB24buRbiBsw6AgaGnhu4duIHTGsOG7o25nIGhp4bq/bSB0cm9uZyBk4buvIGxp4buHdSDigJMgdmnhu4djIHPhu60gZOG7pW5nICoqbcO0IGjDrG5oIENsb2dsb2cgbMOgIGjhu6NwIGzDvSB2w6AgxJHDoW5nIHRpbiBj4bqteSoqLCBnacO6cCBkb2FuaCBuZ2hp4buHcCAqKnBow6F0IGhp4buHbiBuaMOzbSBuaMOibiBz4buxIGPDsyBuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djKiosIHThu6sgxJHDsyDEkcawYSByYSBjaGnhur9uIGzGsOG7o2MgKipjYW4gdGhp4buHcCBz4bubbSBwaMO5IGjhu6NwKiouDQoNCiMjIyMgKiozLjMuMy42IEThu7EgYsOhbyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djKioNCg0KTmjhurFtIG1pbmggaOG7jWEgY8OhY2ggbcO0IGjDrG5oIMSRxrDhu6NjIOG7qW5nIGThu6VuZyB0cm9uZyB0aOG7sWMgdOG6vywgdMOhYyBnaeG6oyB0aeG6v24gaMOgbmggZOG7sSBiw6FvIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY2hvIG3hu5l0IHPhu5EgdOG7lSBo4bujcCDEkeG6t2MgxJFp4buDbSBj4bulIHRo4buDIGPhu6dhIG5ow6JuIHZpw6puLCBz4butIGThu6VuZyBtw7QgaMOsbmggQ2xvZ2xvZyDEkcOjIMSRxrDhu6NjIHjDoWMgxJHhu4tuaCBsw6AgdOG7kWkgxrB1IHRyb25nIHF1w6EgdHLDrG5oIMSRw6FuaCBnacOhIG3DtCBow6xuaC4gQ+G7pSB0aOG7gywgYmEgdHLGsOG7nW5nIGjhu6NwIMSRxrDhu6NjIGzhu7FhIGNo4buNbiBuaMawIHNhdToNCg0KfCBUcsaw4budbmcgaOG7o3AgICAgICAgIHwgT3ZlclRpbWUgfCBKb2JTYXRpc2ZhY3Rpb24gfCBNYXJpdGFsU3RhdHVzIHwgV29ya0xpZmVCYWxhbmNlIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBBIOKAkyBOZ3V5IGPGoSBjYW8gICB8IFllcyAgICAgIHwgMSAgICAgICAgICAgICAgICB8IFNpbmdsZSAgICAgICAgIHwgMSAgICAgICAgICAgICAgICB8DQp8IEIg4oCTIE3hu6ljIHRydW5nIGLDrG5ofCBZZXMgICAgICB8IDMgICAgICAgICAgICAgICAgfCBNYXJyaWVkICAgICAgICB8IDIgICAgICAgICAgICAgICAgfA0KfCBDIOKAkyBOZ3V5IGPGoSB0aOG6pXAgIHwgTm8gICAgICAgfCA0ICAgICAgICAgICAgICAgIHwgTWFycmllZCAgICAgICAgfCAzICAgICAgICAgICAgICAgIHwNCg0KDQpgYGB7cn0NCiMgVOG6oW8gZGF0YWZyYW1lIGNo4bupYSAzIHThu5UgaOG7o3AgZ2nDoSB0cuG7iyBj4bqnbiBk4buxIGLDoW8NCm5ld19jYXNlcyA8LSBkYXRhLmZyYW1lKA0KICBPdmVyVGltZSA9IGZhY3RvcihjKCJZZXMiLCAiWWVzIiwgIk5vIiksIGxldmVscyA9IGxldmVscyhkYXRhMSRPdmVyVGltZSkpLA0KICBKb2JTYXRpc2ZhY3Rpb24gPSBmYWN0b3IoYygiMSIsICIzIiwgIjQiKSwgbGV2ZWxzID0gbGV2ZWxzKGRhdGExJEpvYlNhdGlzZmFjdGlvbikpLA0KICBNYXJpdGFsU3RhdHVzID0gZmFjdG9yKGMoIlNpbmdsZSIsICJNYXJyaWVkIiwgIk1hcnJpZWQiKSwgbGV2ZWxzID0gbGV2ZWxzKGRhdGExJE1hcml0YWxTdGF0dXMpKSwNCiAgV29ya0xpZmVCYWxhbmNlID0gZmFjdG9yKGMoIjEiLCAiMiIsICIzIiksIGxldmVscyA9IGxldmVscyhkYXRhMSRXb3JrTGlmZUJhbGFuY2UpKQ0KKQ0KDQojIEThu7EgYsOhbyB4w6FjIHN14bqldCB04burIG3DtCBow6xuaCBDbG9nbG9nIMSRYSBiaeG6v24NCnByZWRpY3RlZF9wcm9icyA8LSBwcmVkaWN0KG1vZGVsX2Nsb2dsb2dfbXVsdGksIG5ld2RhdGEgPSBuZXdfY2FzZXMsIHR5cGUgPSAicmVzcG9uc2UiKQ0KDQojIEdow6lwIGvhur90IHF14bqjIHbDoG8gYuG6o25nDQpjYmluZChuZXdfY2FzZXMsIFByZWRpY3RlZF9Qcm9iID0gcm91bmQocHJlZGljdGVkX3Byb2JzLCA0KSkNCmBgYA0KDQoqKkdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqM6KioNCg0KLSAqKlRyxrDhu51uZyBo4bujcCBBOioqIE5ow6JuIHZpw6puIGzDoG0gdGjDqm0gZ2nhu50sIHLhuqV0IGtow7RuZyBow6BpIGzDsm5nIGPDtG5nIHZp4buHYywgxJHhu5ljIHRow6JuIHbDoCBt4bqldCBjw6JuIGLhurFuZyBjdeG7mWMgc+G7kW5nIGPDsyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGzDqm4gxJHhur9uICoqOTEuNDQlKiog4oCTIGzDoCBuaMOzbSBy4bunaSBybyBjYW8gbmjhuqV0LCDEkcOyaSBo4buPaSBkb2FuaCBuZ2hp4buHcCBwaOG6o2kgY8OzIGNhbiB0aGnhu4dwIHPhu5ttIMSR4buDIGdp4buvIGNow6JuLg0KDQotICoqVHLGsOG7nW5nIGjhu6NwIEI6KiogTmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSwgaMOgaSBsw7JuZyBt4bupYyB0cnVuZyBiw6xuaCwgxJHDoyBr4bq/dCBow7RuIHbDoCBjw7MgY8OibiBi4bqxbmcgY8O0bmcgdmnhu4djIOKAkyBjdeG7mWMgc+G7kW5nIOG7nyBt4bupYyBraMOhIGPDsyB4w6FjIHN14bqldCBuZ2jhu4kgdmnhu4djIGzDoCAqKjI4LjM5JSoqIOKAkyBuaMOzbSBjw7MgcuG7p2kgcm8gdHJ1bmcgYsOsbmguDQoNCi0gKipUcsaw4budbmcgaOG7o3AgQzoqKiBOaMOibiB2acOqbiBraMO0bmcgbMOgbSB0aMOqbSBnaeG7nSwgcuG6pXQgaMOgaSBsw7JuZyB24bubaSBjw7RuZyB2aeG7h2MsIMSRw6Mga+G6v3QgaMO0biB2w6AgY8OzIGPDom4gYuG6sW5nIGN14buZYyBz4buRbmcgdOG7kXQgY2jhu4kgY8OzIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgbMOgICoqMy44NyUqKiDigJMgZ+G6p24gbmjGsCDhu5VuIMSR4buLbmggdsOgIGfhuq9uIGLDsyBjYW8uDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNClBow6JuIHTDrWNoIGThu7EgYsOhbyBjaG8gdGjhuqV5IG3DtCBow6xuaCAqKkNsb2dsb2cqKiBraMO0bmcgY2jhu4kgaGnhu4d1IHF14bqjIHbhu4EgbeG6t3QgbMO9IHRodXnhur90IG3DoCBjw7JuIGPDsyBraOG6oyBuxINuZyDhu6luZyBk4bulbmcgdGjhu7FjIHRp4buFbiB0cm9uZyB2aeG7h2MgeMOhYyDEkeG7i25oIGPDoWMgbmjDs20gbmjDom4gc+G7sSBjw7Mgbmd1eSBjxqEgbmdo4buJIHZp4buHYyBjYW8uIFZp4buHYyBz4butIGThu6VuZyBtw7QgaMOsbmggbsOgeSBnacO6cCB04buVIGNo4bupYyBjaOG7pyDEkeG7mW5nIHBow6F0IGhp4buHbiBz4bubbSBjw6FjIHRyxrDhu51uZyBo4bujcCBy4bunaSBybywgdOG7qyDEkcOzIHjDonkgZOG7sW5nIGPDoWMgY2jDrW5oIHPDoWNoIGdp4buvIGNow6JuIHBow7kgaOG7o3AsIG7Dom5nIGNhbyBt4bupYyDEkeG7mSBow6BpIGzDsm5nIHRyb25nIGPDtG5nIHZp4buHYyB2w6AgY+G6o2kgdGhp4buHbiBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nIGNobyBuaMOibiB2acOqbi4gxJDDonkgbMOgIG1pbmggY2jhu6luZyBjaG8gc+G7sSBjaHV54buDbiDEkeG7lWkgdOG7qyBwaMOibiB0w61jaCBtw7QgdOG6oyB2w6Agc3V5IGx14bqtbiBzYW5nIHBow6JuIHTDrWNoIGjDoG5oIMSR4buZbmcgdHJvbmcgcXXhuqNuIHRy4buLIG5ow6JuIHPhu7EgY2hp4bq/biBsxrDhu6NjLg0KDQotLS0NCg0KIyAqKkNIxq/GoE5HIDQ6IEvhur5UIExV4bqsTiBWw4AgSMOATSDDnSBDSMONTkggU8OBQ0gqKg0KDQojIyAqKjQuMSBL4bq/dCBsdeG6rW4qKg0KDQpOZ2hpw6puIGPhu6l1IG7DoHkgxJHDoyBz4butIGThu6VuZyBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4sIGJhbyBn4buTbSBMUE0sIExvZ2l0LCBQcm9iaXQgdsOgIENsb2dsb2csIMSR4buDIHBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24ga2jhuqMgbsSDbmcgbmdo4buJIHZp4buHYyBj4bunYSBuaMOibiB2acOqbiB0csOqbiBjxqEgc+G7nyBk4buvIGxp4buHdSB0aOG7sWMgdOG6vy4gQ8OhYyBiaeG6v24gxJHGsOG7o2MgxJHGsGEgdsOgbyBtw7QgaMOsbmggYmFvIGfhu5NtIHTDrG5oIHRy4bqhbmcgbMOgbSB0aMOqbSBnaeG7nSAoT3ZlclRpbWUpLCBt4bupYyDEkeG7mSBow6BpIGzDsm5nIGPDtG5nIHZp4buHYyAoSm9iU2F0aXNmYWN0aW9uKSwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIChNYXJpdGFsU3RhdHVzKSB2w6AgbeG7qWMgxJHhu5kgY8OibiBi4bqxbmcgY8O0bmcgdmnhu4djIOKAkyBjdeG7mWMgc+G7kW5nIChXb3JrTGlmZUJhbGFuY2UpLiBL4bq/dCBxdeG6oyB04burIGPDoWMgbcO0IGjDrG5oIMSR4buBdSBjaOG7iSByYSBy4bqxbmcgbmjDom4gdmnDqm4gbMOgbSB0aMOqbSBnaeG7nSwgxJHhu5ljIHRow6JuLCBraMO0bmcgaMOgaSBsw7JuZyB24bubaSBjw7RuZyB2aeG7h2MgdsOgIGPDsyBt4bupYyBjw6JuIGLhurFuZyBjw7RuZyB2aeG7h2Mg4oCTIGN14buZYyBz4buRbmcga8OpbSBsw6Agbmjhu69uZyDEkeG7kWkgdMaw4bujbmcgY8OzIHjDoWMgc3XhuqV0IG5naOG7iSB2aeG7h2MgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIFRyb25nIMSRw7MsIGJp4bq/biBPdmVyVGltZSB0aOG7gyBoaeG7h24gbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgbeG6oW5oIG5o4bqldCwgY2hvIHRo4bqleSDDoXAgbOG7sWMgdOG7qyB2aeG7h2MgbMOgbSB0aMOqbSBjw7MgdGjhu4MgbMOgIHnhur91IHThu5EgdGjDumMgxJHhuql5IGjDoG5oIHZpIG5naOG7iSB2aeG7h2MuIMSQ4buTbmcgdGjhu51pLCBt4bupYyDEkeG7mSBow6BpIGzDsm5nIGPDtG5nIHZp4buHYyB2w6Agc+G7sSBjw6JuIGLhurFuZyBjdeG7mWMgc+G7kW5nIHRo4buDIGhp4buHbiByw7UgdmFpIHRyw7IgYuG6o28gduG7hywgZ8OzcCBwaOG6p24gZ2nhu68gY2jDom4gbmjDom4gdmnDqm4uIMSQ4bq3YyBiaeG7h3QsIG3DtCBow6xuaCBDbG9nbG9nIGNobyB0aOG6pXkgaGnhu4d1IHF14bqjIHbGsOG7o3QgdHLhu5lpIGtoaSB4w6l0IMSR4bq/biBjw6FjIGNo4buJIHPhu5EgxJHDoW5oIGdpw6EgbmjGsCBBSUMsIEJyaWVyIFNjb3JlIHbDoCBCYWxhbmNlZCBBY2N1cmFjeSwgY2hvIHRo4bqleSBraOG6oyBuxINuZyBk4buxIGLDoW8gdOG7kXQgaMahbiB0cm9uZyBi4buRaSBj4bqjbmggZOG7ryBsaeG7h3UgbeG6pXQgY8OibiBi4bqxbmcgbmjGsCBoaeG7h24gdMaw4bujbmcgbmdo4buJIHZp4buHYyDigJMgduG7kW4gdMawxqFuZyDEkeG7kWkgaGnhur9tLiBRdWEgxJHDsywgY8OzIHRo4buDIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgY8OhYyB54bq/dSB04buRIHbhu4EgY8O0bmcgdmnhu4djIHbDoCDEkeG7nWkgc+G7kW5nIGPDoSBuaMOibiDEkeG7gXUgxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyB2aeG7h2MgaMOsbmggdGjDoG5oIHF1eeG6v3QgxJHhu4tuaCBuZ2jhu4kgdmnhu4djIGPhu6dhIG5nxrDhu51pIGxhbyDEkeG7mW5nLg0KDQojIyAqKjQuMiBIw6BtIMO9IGNow61uaCBzw6FjaCoqDQoNClThu6sgbmjhu69uZyBr4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1LCBjw7MgdGjhu4MgcsO6dCByYSBt4buZdCBz4buRIGjDoG0gw70gY2jDrW5oIHPDoWNoIHRoaeG6v3QgdGjhu7FjIGTDoG5oIGNobyBjw6FjIGRvYW5oIG5naGnhu4dwIHRyb25nIHZp4buHYyBxdeG6o24gdHLhu4sgbmd14buTbiBuaMOibiBs4buxYy4gVHLGsOG7m2MgdGnDqm4sIGPhuqduIMSR4bq3YyBiaeG7h3QgcXVhbiB0w6JtIMSR4bq/biB2aeG7h2Mga2nhu4NtIHNvw6F0IGdp4budIGzDoG0gdmnhu4djLCB0csOhbmggdOG6oW8gw6FwIGzhu7FjIHF1w6EgbeG7qWMgZOG6q24gxJHhur9uIHPhu7EgbeG7h3QgbeG7j2kgdsOgIGtp4buHdCBz4bupYyDhu58gbmjDom4gdmnDqm4uIFZp4buHYyB4w6J5IGThu7FuZyBt4buZdCBtw7RpIHRyxrDhu51uZyBsw6BtIHZp4buHYyBsaW5oIGhv4bqhdCwgaOG7o3AgbMO9LCBnaeG6o20gdGhp4buDdSB5w6p1IGPhuqd1IGzDoG0gdGjDqm0gZ2nhu50ga2jDtG5nIGPhuqduIHRoaeG6v3Qgc+G6vSBnacO6cCBj4bqjaSB0aGnhu4duIHThu7cgbOG7hyBnaeG7ryBjaMOibiBuaMOibiBz4buxLiBCw6puIGPhuqFuaCDEkcOzLCBuw6JuZyBjYW8gc+G7sSBow6BpIGzDsm5nIGPDtG5nIHZp4buHYyB0aMO0bmcgcXVhIGPDoWMgY2jGsMahbmcgdHLDrG5oIHBow6F0IHRyaeG7g24gbmdo4buBIG5naGnhu4dwLCBjaMOtbmggc8OhY2gga2hlbiB0aMaw4bufbmcgbWluaCBi4bqhY2ggdsOgIHbEg24gaMOzYSBkb2FuaCBuZ2hp4buHcCB0w61jaCBj4buxYyBz4bq9IGfDs3AgcGjhuqduIGzDoG0gZ2nhuqNtIG5ndXkgY8ahIG5naOG7iSB2aeG7h2MuIE5nb8OgaSByYSwga+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSBjxaluZyBn4bujaSBt4bufIHLhurFuZyBkb2FuaCBuZ2hp4buHcCBj4bqnbiBxdWFuIHTDom0gbmhp4buBdSBoxqFuIMSR4bq/biBuaMOzbSBuaMOibiB2acOqbiDEkeG7mWMgdGjDom4g4oCTIG5o4buvbmcgbmfGsOG7nWkgY8OzIHh1IGjGsOG7m25nIGThu4UgcuG7nWkgYuG7jyBjw7RuZyB0eSBoxqFuIOKAkyB0aMO0bmcgcXVhIGPDoWMgaG/huqF0IMSR4buZbmcgZ+G6r24ga+G6v3QsIGjhu5cgdHLhu6MgY8OhIG5ow6JuIGjDs2EgdHLhuqNpIG5naGnhu4dtIGzDoG0gdmnhu4djLiBDdeG7kWkgY8O5bmcsIGPhuqduIHRyaeG7g24ga2hhaSBoaeG7h3UgcXXhuqMgY8OhYyBjaMOtbmggc8OhY2ggaOG7lyB0cuG7oyBjw6JuIGLhurFuZyBnaeG7r2EgY8O0bmcgdmnhu4djIHbDoCBjdeG7mWMgc+G7kW5nLCBjaOG6s25nIGjhuqFuIG5oxrAgY2jDrW5oIHPDoWNoIGzDoG0gdmnhu4djIGxpbmggaG/huqF0LCBo4buXIHRy4bujIHRpbmggdGjhuqduLCB2w6Aga2h1eeG6v24ga2jDrWNoIG5naOG7iSBwaMOpcCDEkcO6bmcgdGjhu51pIGjhuqFuLiBOaOG7r25nIGJp4buHbiBwaMOhcCBuw6B5IGtow7RuZyBjaOG7iSBnacO6cCBj4bqjaSB0aGnhu4duIGhp4buHdSBxdeG6oyBsw6BtIHZp4buHYyBtw6AgY8OybiBnw7NwIHBo4bqnbiB04bqhbyBk4buxbmcgbcO0aSB0csaw4budbmcgbMOgbSB2aeG7h2MgYuG7gW4gduG7r25nLCDhu5VuIMSR4buLbmggduG7gSBsw6J1IGTDoGkuDQoNCiMjICoqNC4zIEjhuqFuIGNo4bq/IGPhu6dhIMSR4buBIHTDoGkqKg0KDQpEw7kgxJHDoyBj4buRIGfhuq9uZyB0aeG6v3AgY+G6rW4gduG6pW4gxJHhu4EgbeG7mXQgY8OhY2ggdG/DoG4gZGnhu4duLCBuZ2hpw6puIGPhu6l1IHbhuqtuIHThu5NuIHThuqFpIG3hu5l0IHPhu5EgaOG6oW4gY2jhur8gbmjhuqV0IMSR4buLbmguIFRo4bupIG5o4bqldCwgZOG7ryBsaeG7h3UgbmdoacOqbiBj4bupdSBtYW5nIHTDrW5oIGPhuq90IG5nYW5nIG7Dqm4gY2jGsGEgdGjhu4MgcGjhuqNuIMOhbmggxJHGsOG7o2MgbeG7kWkgcXVhbiBo4buHIG5ow6JuIHF14bqjIHLDtSByw6BuZyB0aGVvIHRo4budaSBnaWFuOyB2aeG7h2MgbeG7nyBy4buZbmcgc2FuZyBk4buvIGxp4buHdSB0aGVvIGNodeG7l2kgdGjhu51pIGdpYW4gaG/hurdjIGLhuqNuZyBk4buvIGxp4buHdSBz4bq9IG7Dom5nIGNhbyDEkeG7mSB0aW4gY+G6rXkgY+G7p2Ega+G6v3QgbHXhuq1uLiBUaOG7qSBoYWksIG5naGnDqm4gY+G7qXUgY2jhu4kgc+G7rSBk4bulbmcgbeG7mXQgdOG6rXAgZOG7ryBsaeG7h3UgZHV5IG5o4bqldCwgZG8gxJHDsyBr4bq/dCBxdeG6oyBjaMawYSB0aOG7gyBraMOhaSBxdcOhdCBy4buZbmcgcsOjaSBjaG8gY8OhYyBuZ8Ogbmggbmdo4buBIGhheSBxdXkgbcO0IGRvYW5oIG5naGnhu4dwIGtow6FjIG5oYXUuIFRo4bupIGJhLCBtw7QgaMOsbmggY2jGsGEgeMOpdCDEkeG6v24gY8OhYyB54bq/dSB04buRIHTGsMahbmcgdMOhYyBnaeG7r2EgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIOKAkyDEkcOieSBjw7MgdGjhu4MgbMOgIGjGsOG7m25nIMSRaSBxdWFuIHRy4buNbmcgxJHhu4MgaGnhu4N1IHLDtSBoxqFuIGPGoSBjaOG6vyB0w6FjIMSR4buZbmcgcGjhu6ljIHThuqFwIMSR4bq/biBow6BuaCB2aSBuZ2jhu4kgdmnhu4djLiBDdeG7kWkgY8O5bmcsIG5naGnDqm4gY+G7qXUgduG6q24gY8OybiBnaeG7m2kgaOG6oW4gdHJvbmcgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggdHJ1eeG7gW4gdGjhu5FuZywgY2jGsGEg4bupbmcgZOG7pW5nIGPDoWMga+G7uSB0aHXhuq10IGjhu41jIG3DoXkgaGnhu4duIMSR4bqhaSBuaMawIFJhbmRvbSBGb3Jlc3QgaGF5IFhHQm9vc3QgxJHhu4MgY+G6o2kgdGhp4buHbiBraOG6oyBuxINuZyBwaMOibiBsb+G6oWkgdsOgIHBow6F0IGhp4buHbiBz4bubbSBuZ3V5IGPGoSBuZ2jhu4kgdmnhu4djLiDEkMOieSBz4bq9IGzDoCBuaOG7r25nIGfhu6NpIMO9IGjhu691IMOtY2ggY2hvIGPDoWMgbmdoacOqbiBj4bupdSB0aeG6v3AgdGhlbyBuaOG6sW0gaG/DoG4gdGhp4buHbiBtw7QgaMOsbmggZOG7sSBiw6FvIHbDoCBjdW5nIGPhuqVwIGPGoSBz4bufIGThu68gbGnhu4d1IHbhu69uZyBjaOG6r2MgaMahbiBjaG8gdmnhu4djIGhv4bqhY2ggxJHhu4tuaCBjaMOtbmggc8OhY2ggbmjDom4gc+G7sS4=