## 
## 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
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'psych' was built under R version 4.3.3
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## Warning: package 'DescTools' was built under R version 4.3.3
## 
## Attaching package: 'DescTools'
## The following objects are masked from 'package:psych':
## 
##     AUC, ICC, SD
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.0
## ✔ readr     2.1.5     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ psych::%+%()    masks ggplot2::%+%()
## ✖ psych::alpha()  masks ggplot2::alpha()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## 
## Attaching package: 'scales'
## 
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
## 
## 
## The following objects are masked from 'package:psych':
## 
##     alpha, rescale
## Warning: package 'AER' was built under R version 4.3.3
## Loading required package: car
## Warning: package 'car' was built under R version 4.3.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.3
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:purrr':
## 
##     some
## 
## The following object is masked from 'package:DescTools':
## 
##     Recode
## 
## The following object is masked from 'package:psych':
## 
##     logit
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.3.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.3
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Loading required package: sandwich
## Warning: package 'sandwich' was built under R version 4.3.3
## Loading required package: survival
## 
## Attaching package: 'survival'
## 
## The following object is masked from 'package:epitools':
## 
##     ratetable
## Warning: package 'datarium' was built under R version 4.3.3
## Warning: package 'Ecdat' was built under R version 4.3.3
## Loading required package: Ecfun
## Warning: package 'Ecfun' was built under R version 4.3.3
## 
## Attaching package: 'Ecfun'
## 
## The following object is masked from 'package:DescTools':
## 
##     BoxCox
## 
## The following object is masked from 'package:base':
## 
##     sign
## 
## 
## Attaching package: 'Ecdat'
## 
## The following object is masked from 'package:carData':
## 
##     Mroz
## 
## The following object is masked from 'package:datasets':
## 
##     Orange
## Warning: package 'ISLR' was built under R version 4.3.3

1 Bộ dữ liệu Credit

Bộ dữ liệu Credit chứa thông tin về khách hàng vay tín dụng từ một ngân hàng, với mục tiêu chính là dự đoán khả năng vỡ nợ của khách hàng dựa trên các đặc điểm nhân khẩu học và tài chính của họ. Đây là một bộ dữ liệu lý tưởng để nghiên cứu về rủi ro tín dụng, hành vi vay mượn của người tiêu dùng, và phân tích tài chính cá nhân.

Bộ dữ liệu này có tổng cộng 400 quan sát và 11 biến.

Các biến định tính (Qualitative/Categorical Variables) nổi bật:

  • Gender: Giới tính của khách hàng (Male/Female).

  • Student: Tình trạng sinh viên (Yes/No). Sinh viên thường có hành vi chi tiêu và thu nhập khác biệt.

  • Married: Tình trạng hôn nhân (Yes/No). Tình trạng hôn nhân có thể ảnh hưởng đến khả năng tài chính và quyết định vay mượn.

  • Ethnicity: Dân tộc của khách hàng (Caucasian/Asian/African American). Biến này có thể được sử dụng để kiểm tra sự khác biệt trong việc cấp tín dụng giữa các nhóm dân tộc, hoặc liệu có sự phân biệt đối xử hay không.

Các biến định lượng (Quantitative/Numerical Variables) nổi bật:

  • Income: Thu nhập hàng năm của khách hàng (tính bằng ngàn đô la). Đây là một yếu tố quan trọng ảnh hưởng đến khả năng trả nợ.

  • Limit: Hạn mức tín dụng của khách hàng (tính bằng đô la).

  • Rating: Điểm tín dụng của khách hàng (thường là một thước đo của uy tín tài chính).

  • Cards: Số lượng thẻ tín dụng mà khách hàng đang sở hữu.

  • Age: Tuổi của khách hàng.

  • Education: Số năm học vấn của khách hàng.

  • Balance: Số dư nợ tín dụng trung bình hàng tháng của khách hàng (tính bằng đô la). Đây thường là biến phụ thuộc chính khi dự đoán khả năng vỡ nợ hoặc rủi ro tín dụng.

d <- Credit
datatable(d)
  • Cấu trúc bộ dữ liệu
str(d)
## 'data.frame':    400 obs. of  12 variables:
##  $ ID       : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Income   : num  14.9 106 104.6 148.9 55.9 ...
##  $ Limit    : int  3606 6645 7075 9504 4897 8047 3388 7114 3300 6819 ...
##  $ Rating   : int  283 483 514 681 357 569 259 512 266 491 ...
##  $ Cards    : int  2 3 4 3 2 4 2 2 5 3 ...
##  $ Age      : int  34 82 71 36 68 77 37 87 66 41 ...
##  $ Education: int  11 15 11 11 16 10 12 9 13 19 ...
##  $ Gender   : Factor w/ 2 levels " Male","Female": 1 2 1 2 1 1 2 1 2 2 ...
##  $ Student  : Factor w/ 2 levels "No","Yes": 1 2 1 1 1 1 1 1 1 2 ...
##  $ Married  : Factor w/ 2 levels "No","Yes": 2 2 1 1 2 1 1 1 1 2 ...
##  $ Ethnicity: Factor w/ 3 levels "African American",..: 3 2 2 2 3 3 1 2 3 1 ...
##  $ Balance  : int  333 903 580 964 331 1151 203 872 279 1350 ...

Bộ dữ liệu Credit được sử dụng trong nghiên cứu này chứa thông tin của 400 khách hàng vay tín dụng, với tổng cộng 12 biến. Cấu trúc của bộ dữ liệu (str(d)) cho thấy sự kết hợp của cả biến định lượng và định tính. Các biến định lượng bao gồm ID, Income, Limit, Rating, Cards, Age, Education, và Balance (đều là kiểu số nguyên hoặc số thực), cung cấp thông tin về tài chính và nhân khẩu học. Trong khi đó, các biến định tính bao gồm Gender, Student, Married, và Ethnicity (đều được định dạng là yếu tố với các cấp độ tương ứng), đại diện cho các đặc điểm phân loại của khách hàng. Sự đa dạng trong cấu trúc biến này tạo nền tảng vững chắc cho việc phân tích toàn diện các yếu tố ảnh hưởng đến rủi ro tín dụng và hành vi tài chính.

  • Lọc các biến định lượng của bộ dữ liệu Credit
d1 <- subset(d,select=-c(Income, Limit, Rating, Cards, Age, Education, Balance))
datatable(d1)
  • Kiểm tra dữ liệu bị thiếu
a <-is.na(d1)
datatable(a)
sum(is.na(d1))
## [1] 0
which(is.na(d1))
## integer(0)

Để đảm bảo chất lượng dữ liệu, quá trình kiểm tra dữ liệu bị thiếu (missing data) đã được tiến hành trên bộ dữ liệu Credit. Bằng cách sử dụng các hàm kiểm tra trong R như is.na() và sum(is.na()), kết quả cho thấy toàn bộ bộ dữ liệu không chứa bất kỳ giá trị NA nào. Cụ thể, tổng số giá trị thiếu được xác định là 0, đồng thời không có chỉ số nào được trả về cho các vị trí có dữ liệu thiếu. Điều này khẳng định bộ dữ liệu Credit là hoàn chỉnh và không yêu cầu bất kỳ bước xử lý dữ liệu thiếu nào, giúp quá trình phân tích tiếp theo được thực hiện trên nền tảng dữ liệu đáng tin cậy.

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

2.1 Biến Gender

Thống kê mô tả biến Gender thông qua bảng tần số, tần suất và đồ thị.

Bảng tần số:

table(d1$Gender)
## 
##   Male Female 
##    193    207

Bảng tần suất:

a2 <- table(d1$Gender)/sum(nrow(d1))
a2
## 
##   Male Female 
## 0.4825 0.5175

Vậy trong bộ dữ liệu này có 48.25% nam và 51.75% nữ.

Đồ thị biểu diễn tỷ lệ phần trăm giới tính khách hàng vay tín dụng từ một ngân hàng:

pie(a2,
    labels = paste(names(a2), round(a2, 2), "%"),
    main = "Biểu đồ tròn: Tỷ lệ Gender") 

  • Nhận xét về biến Gender trong bộ dữ liệu Credit:

    • Phân tích biến Gender (Giới tính) trong bộ dữ liệu khách hàng vay tín dụng của ngân hàng cho thấy sự phân bổ tương đối đồng đều giữa nam và nữ. Cụ thể, trong tổng số 400 khách hàng, có 193 khách hàng nam và 207 khách hàng nữ.

    • Khi tính toán tần suất tương đối, tỷ lệ khách hàng nam chiếm khoảng 48.25%, trong khi khách hàng nữ chiếm 51.75%. Mặc dù có một sự chênh lệch nhỏ, với số lượng nữ giới nhiều hơn một chút, sự phân phối này vẫn cho thấy ngân hàng đang phục vụ một tập khách hàng khá cân bằng về giới tính.

    • Điều này có ý nghĩa quan trọng trong việc đảm bảo tính đại diện của dữ liệu khi phân tích hành vi vay tín dụng và rủi ro tín dụng. Đồng thời, nó cũng gợi mở khả năng không có sự thiên lệch đáng kể về giới tính trong tập khách hàng hiện tại của ngân hàng, giúp các mô hình dự đoán tín dụng không bị ảnh hưởng quá nhiều bởi yếu tố giới tính.

2.2 Biến Student

Thống kê mô tả biến Student thông qua bảng tần số, tần suất và đồ thị.

Bảng tần số:

table(d1$Student)
## 
##  No Yes 
## 360  40

Bảng tần suất:

a3 <- table(d1$Student)/sum(nrow(d1))
a3
## 
##  No Yes 
## 0.9 0.1

Vậy trong bộ dữ liệu này có 90% không phải sinh viên và 10% sinh viên.

Đồ thị biểu diễn tỷ lệ phần trăm sinh viên vay tín dụng từ một ngân hàng:

pie(a3,
    labels = paste(names(a3), round(a3, 2), "%"),
    main = "Biểu đồ tròn: Tỷ lệ Student") 

  • Nhận xét về biến Student trong bộ dữ liệu Credit:

    Phân tích biến Student (Tình trạng sinh viên) trong tập dữ liệu khách hàng vay tín dụng cho thấy một tỷ lệ rất nhỏ khách hàng là sinh viên. Cụ thể, trong tổng số 400 khách hàng, có tới 360 khách hàng không phải là sinh viên (No), chiếm 90% tổng số mẫu. Ngược lại, chỉ có 40 khách hàng là sinh viên (Yes), tương ứng với 10% dân số mẫu. Biểu đồ tròn càng làm nổi bật sự chênh lệch lớn này, với phần lớn biểu đồ đại diện cho nhóm “Không phải sinh viên”. Điều này gợi ý rằng đối tượng khách hàng chính của ngân hàng trong bộ dữ liệu này không phải là sinh viên, và các phân tích về hành vi vay tín dụng có thể sẽ tập trung chủ yếu vào nhóm khách hàng không phải sinh viên. Sự phân bố này có thể ảnh hưởng đến các chiến lược đánh giá rủi ro và tiếp thị sản phẩm tín dụng của ngân hàng.

2.3 Biến Married

Thống kê mô tả biến Married thông qua bảng tần số, tần suất và đồ thị.

Bảng tần số:

table(d1$Married)
## 
##  No Yes 
## 155 245

Bảng tần suất:

a4 <- table(d1$Married)/sum(nrow(d1))
a4
## 
##     No    Yes 
## 0.3875 0.6125

Vậy trong bộ dữ liệu này có 38.75% chưa kết hơn và 61.25% đã kết hôn. Đồ thị biểu diễn tỷ lệ phần trăm tình trạng hôn nhân của khách hàng vay tín dụng từ một ngân hàng:

pie(a4,
    labels = paste(names(a4), round(a4, 2), "%"),
    main = "Biểu đồ tròn: Tỷ lệ Married") 

  • Nhận xét về biến Married trong bộ dữ liệu Credit:

    Dựa trên kết quả phân tích biến “Married” (Tình trạng hôn nhân) từ bộ dữ liệu Credit, chúng ta thấy rằng trong số những khách hàng vay tín dụng, nhóm đã kết hôn chiếm tỷ lệ lớn hơn (61.25%) so với nhóm chưa kết hôn (38.75%), được thể hiện rõ ràng qua bảng tần số, tần suất và biểu đồ tròn. Điều này có thể gợi ý rằng các tổ chức tín dụng có thể có xu hướng ưu tiên hoặc đánh giá cao hơn đối với các cá nhân đã kết hôn khi xét duyệt khoản vay, có thể do giả định về sự ổn định tài chính và trách nhiệm cao hơn.

2.4 Biến Ethnicity

Thống kê mô tả biến Ethnicity thông qua bảng tần số, tần suất và đồ thị.

Bảng tần số:

table(d1$Ethnicity)
## 
## African American            Asian        Caucasian 
##               99              102              199

Bảng tần suất:

a5 <- table(d1$Ethnicity)/sum(nrow(d1))
a5
## 
## African American            Asian        Caucasian 
##           0.2475           0.2550           0.4975

Vậy trong bộ dữ liệu này có 24.75% African American và 25.5% Asian, 49.75% Caucasian.

Đồ thị biểu diễn tỷ lệ phần trăm tình trạng dân tộc của khách hàng vay tín dụng từ một ngân hàng:

pie(a5,
    labels = paste(names(a5), round(a5, 2), "%"),
    main = "Biểu đồ tròn: Tỷ lệ Ethnicity") 

  • Nhận xét về biến Ethnicity trong bộ dữ liệu Credit:

    Dựa trên các kết quả phân tích biến “Ethnicity” (Dân tộc) từ bộ dữ liệu Credit, ta có thể nhận thấy rõ sự phân bố không đồng đều về dân tộc trong số các khách hàng vay tín dụng. Cụ thể, nhóm Caucasian chiếm tỷ lệ áp đảo với 49.75% (gần một nửa), trong khi nhóm Asian chiếm 25.5% và African American chiếm 24.75%. Sự chênh lệch đáng kể này có thể cho thấy một xu hướng tiềm ẩn trong việc cấp tín dụng, nơi mà các tổ chức tài chính có thể có nhiều khách hàng thuộc nhóm Caucasian hơn, hoặc các chính sách/tiêu chí xét duyệt có thể vô tình dẫn đến sự phân bổ dân tộc như vậy.

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

3.1 Biến Gender

Xác định hạng mục quan tâm: nhóm người có giới tính nữ (Female) trong biến Gender.

Ước lượng khoảng tin cậy: ước lượng tỷ lệ người có giới tính nữ trong tổng thể với độ tin cậy 95%.

#số lượng quan sát của hạng mục Female
b1 <- sum(d1$Gender == "F")
#Tổng số quan sát 
total <- nrow(d1) 
# ước lượng
prop.test(b1, total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  b1 out of total, null probability 0.5
## X-squared = 398, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.000000 0.011858
## sample estimates:
## p 
## 0
Dựa trên kết quả kiểm định tỷ lệ 1 mẫu với hiệu chỉnh liên tục, ta có thể nhận thấy rằng tỷ lệ người có giới tính nữ trong tổng thể rất thấp, với ước tính tỷ lệ mẫu (p) bằng 0. Khoảng tin cậy 95% cho tỷ lệ thực của nữ giới là từ 0.000000 đến 0.011858. Giá trị p-value nhỏ hơn 2.2e-16 cho thấy sự khác biệt đáng kể so với giả thuyết không (tỷ lệ bằng 0.5), không có đủ bằng chứng thống kê để kết luận rằng tỷ lệ nữ là 0.5 và khẳng định tỷ lệ nữ thực sự khác 0.5, cụ thể là gần bằng 0.   

Kiểm định giả thuyết tỷ lệ

Đặt giả thuyết:

\[ \begin{cases} H_0: \text{Tỷ lệ người có giới tính nữ trong tổng thể là 40%.} \\ H_1: \text{Tỷ lệ người có giới tính nữ trong tổng thể là khác 40%.} \end{cases} \]

#Kiểm định hai phía
prop.test(b1, total, p=0.4, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  b1 out of total, null probability 0.4
## X-squared = 265, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.4
## 95 percent confidence interval:
##  0.000000 0.011858
## sample estimates:
## p 
## 0

Dựa trên kết quả kiểm định giả thuyết tỷ lệ hai phía, với giả thuyết \(H_0\) là tỷ lệ người có giới tính nữ trong tổng thể là 40% (p=0.4) và giả thuyết \(H_1\) là tỷ lệ này khác 40%, ta có các kết quả sau:

  • Giá trị p-value rất nhỏ (<2.2e-16), thấp hơn đáng kể so với mức ý nghĩa thông thường (ví dụ: 0.05). Điều này cung cấp bằng chứng mạnh mẽ để bác bỏ giả thuyết \(H_0\).

  • Tỷ lệ mẫu ước tính (p) là 0, cho thấy trong mẫu khảo sát không có người mang giới tính nữ nào.

  • Khoảng tin cậy 95% cho tỷ lệ thực của người có giới tính nữ là từ 0.000000 đến 0.011858. Khoảng này không chứa giá trị 0.4 (tức 40%), càng khẳng định việc bác bỏ giả thuyết \(H_0\).

Tóm lại, có đủ bằng chứng thống kê để kết luận rằng tỷ lệ người có giới tính nữ trong tổng thể khác 40%, và thực tế tỷ lệ này rất thấp, gần như bằng 0.

3.2 Biến Student

Xác định hạng mục quan tâm: nhóm người là sinh viên (Yes) trong biến Student.

Ước lượng khoảng tin cậy: ước lượng tỷ lệ người là sinh viên trong tổng thể với độ tin cậy 95%.

#số lượng quan sát của hạng mục Yes
b2 <- sum(d1$Student == 'Yes')

# ước lượng
prop.test(b2, total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  b2 out of total, null probability 0.5
## X-squared = 254.4, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.0732215 0.1347077
## sample estimates:
##   p 
## 0.1
Dựa trên kết quả kiểm định tỷ lệ 1 mẫu với hiệu chỉnh liên tục cho biến "Student", tỷ lệ người là sinh viên trong mẫu được ước tính là 10%. Với độ tin cậy 95%, khoảng tin cậy cho tỷ lệ thực của sinh viên trong tổng thể là từ 7.32% đến 13.47%. Giá trị p-value nhỏ hơn 2.2e-16 cung cấp bằng chứng mạnh mẽ để kết luận rằng tỷ lệ người là sinh viên trong tổng thể khác 50% và thực tế tỷ lệ này thấp hơn đáng kể so với 50%.      

Kiểm định giả thuyết tỷ lệ

Đặt giả thuyết:

\[ \begin{cases} H_0: \text{Tỷ lệ người là sinh viên trong tổng thể là 5%.} \\ H_1: \text{Tỷ lệ người là sinh viên trong tổng thể là khác 5%.} \end{cases} \]

#Kiểm định hai phía
prop.test(b2, total, p=0.05, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  b2 out of total, null probability 0.05
## X-squared = 20.013, df = 1, p-value = 7.691e-06
## alternative hypothesis: true p is not equal to 0.05
## 95 percent confidence interval:
##  0.0732215 0.1347077
## sample estimates:
##   p 
## 0.1
Dựa trên kết quả kiểm định giả thuyết tỷ lệ hai phía cho biến "Student", với giả thuyết $H_0$ là tỷ lệ người là sinh viên trong tổng thể là 5% (p=0.05) và giả thuyết $H_1$ là tỷ lệ này khác 5%, ta có giá trị p-value là `7.691e-06`. Giá trị p-value này rất nhỏ (nhỏ hơn 0.05), cung cấp bằng chứng mạnh mẽ để bác bỏ giả thuyết $H_0$. Điều này cho thấy tỷ lệ người là sinh viên trong tổng thể không phải là 5%. Ước tính **tỷ lệ mẫu** là 0.1 (tức 10%), và **khoảng tin cậy 95%** là từ 0.0732215 đến 0.1347077, không chứa giá trị 0.05. Điều này củng cố kết luận rằng tỷ lệ sinh viên thực tế cao hơn đáng kể so với 5%.   

3.3 Biến Married

Xác định hạng mục quan tâm: nhóm người đã kết hôn (Yes) trong biến Married.

Ước lượng khoảng tin cậy: ước lượng tỷ lệ người đã kết hôn trong tổng thể với độ tin cậy 95%.

#số lượng quan sát của hạng mục Yes
b3 <- sum(d1$Married == 'Yes')

# ước lượng
prop.test(b3, total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  b3 out of total, null probability 0.5
## X-squared = 19.802, df = 1, p-value = 8.587e-06
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.5626369 0.6601671
## sample estimates:
##      p 
## 0.6125
Dựa trên kết quả kiểm định tỷ lệ 1 mẫu với hiệu chỉnh liên tục cho biến "Married", ta đã ước lượng tỷ lệ người đã kết hôn (Yes) trong tổng thể với độ tin cậy 95%. Tỷ lệ mẫu ước tính (p) là 0.6125, tức là 61.25% số người trong mẫu đã kết hôn. Khoảng tin cậy 95% cho tỷ lệ thực của người đã kết hôn trong tổng thể là từ 0.5626369 (khoảng 56.26%) đến 0.6601671 (khoảng 66.02%). Điều này cho thấy chúng ta tự tin 95% rằng tỷ lệ người đã kết hôn trong tổng thể nằm trong khoảng này. Giá trị p-value là 8.587e-06, rất nhỏ (nhỏ hơn 0.05), cung cấp bằng chứng mạnh mẽ để bác bỏ giả thuyết không (null probability 0.5), tức là tỷ lệ người đã kết hôn trong tổng thể khác 0.5. Kết quả này nhất quán với ước tính tỷ lệ mẫu, cho thấy tỷ lệ người đã kết hôn thực sự cao hơn đáng kể so với 50%.         

Kiểm định giả thuyết tỷ lệ

Đặt giả thuyết:

\[ \begin{cases} H_0: \text{Tỷ lệ người đã kết hôn trong tổng thể là 80%.} \\ H_1: \text{Tỷ lệ người đã kết hôn trong tổng thể là khác 80%.} \end{cases} \]

#Kiểm định hai phía
prop.test(b3, total, p=0.8, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  b3 out of total, null probability 0.8
## X-squared = 86.723, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.8
## 95 percent confidence interval:
##  0.5626369 0.6601671
## sample estimates:
##      p 
## 0.6125
Dựa trên kết quả kiểm định giả thuyết tỷ lệ hai phía cho biến "Married", với giả thuyết $H_0$ là tỷ lệ người đã kết hôn trong tổng thể là 80% (p=0.8) và giả thuyết $H_1$ là tỷ lệ này khác 80%, ta có giá trị p-value nhỏ hơn `2.2e-16`. Giá trị p-value này cực kỳ nhỏ, cung cấp bằng chứng mạnh mẽ để bác bỏ giả thuyết $H_0$. Điều này cho thấy tỷ lệ người đã kết hôn trong tổng thể không phải là 80%. **Ước tính tỷ lệ mẫu** là 0.6125 (tức 61.25%), và **khoảng tin cậy 95%** là từ 0.5626369 đến 0.6601671, không chứa giá trị 0.8. Điều này củng cố kết luận rằng tỷ lệ người đã kết hôn thực tế thấp hơn đáng kể so với 80%.      

3.4 Biến Ethnicity

Xác định hạng mục quan tâm: nhóm người đến từ Asian trong biến Ethnicity.

Ước lượng khoảng tin cậy: ước lượng tỷ lệ người đến từ Asian trong tổng thể với độ tin cậy 95%.

#số lượng quan sát của hạng mục Asian
b4 <- sum(d1$Ethnicity == 'Asian')

# ước lượng
prop.test(b4, total, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  b4 out of total, null probability 0.5
## X-squared = 95.062, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.2135866 0.3012100
## sample estimates:
##     p 
## 0.255
Dựa trên kết quả kiểm định tỷ lệ 1 mẫu với hiệu chỉnh liên tục cho biến "Ethnicity", tỷ lệ người đến từ Asian trong mẫu được ước tính là 0.255 (tức 25.5%). Với độ tin cậy 95%, khoảng tin cậy cho tỷ lệ thực của người đến từ Asian trong tổng thể là từ 0.2135866 (khoảng 21.36%) đến 0.3012100 (khoảng 30.12%). Giá trị p-value nhỏ hơn 2.2e-16 cung cấp bằng chứng mạnh mẽ để kết luận rằng tỷ lệ người đến từ Asian trong tổng thể khác 50% và thực tế tỷ lệ này thấp hơn đáng kể so với 50%.            

Kiểm định giả thuyết tỷ lệ

Đặt giả thuyết:

\[ \begin{cases} H_0: \text{Tỷ lệ người đến từ Asian trong tổng thể là 30%.} \\ H_1: \text{Tỷ lệ người đến từ Asian trong tổng thể là khác 30%.} \end{cases} \]

#Kiểm định hai phía
prop.test(b4, total, p=0.3, alternative = "two.sided")
## 
##  1-sample proportions test with continuity correction
## 
## data:  b4 out of total, null probability 0.3
## X-squared = 3.6458, df = 1, p-value = 0.05621
## alternative hypothesis: true p is not equal to 0.3
## 95 percent confidence interval:
##  0.2135866 0.3012100
## sample estimates:
##     p 
## 0.255
Dựa trên kết quả kiểm định giả thuyết tỷ lệ hai phía cho biến "Ethnicity", với giả thuyết $H_0$ là tỷ lệ người đến từ Asian trong tổng thể là 30% (p=0.3) và giả thuyết $H_1$ là tỷ lệ này khác 30%, ta có **giá trị p-value** là `0.05621`. Mặc dù giá trị p-value này gần với mức ý nghĩa 0.05, nhưng nó lớn hơn một chút so với 0.05. Do đó, chúng ta **không có đủ bằng chứng thống kê mạnh mẽ để bác bỏ giả thuyết $H_0$** tại mức ý nghĩa 0.05. Điều này có nghĩa là, dựa trên dữ liệu hiện có, chúng ta không thể kết luận rằng tỷ lệ người đến từ Asian trong tổng thể khác 30%. **Ước tính tỷ lệ mẫu** là 0.255 (25.5%), và **khoảng tin cậy 95%** là từ 0.2135866 đến 0.3012100, trong đó giá trị 0.3 nằm ngay sát giới hạn trên của khoảng tin cậy.   

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

Chọn ra hai cặp biến: Gender và Married; Student và Ethnicity.

4.1 Biến Gender và Married

Để đánh giá mối quan hệ giữa giới tính (Gender) và tình trạng hôn nhân (Married), một yếu tố thường được xem xét là có ảnh hưởng đến quyết định và khả năng vay tín dụng hoặc tình hình tài chính cá nhân, chúng ta sẽ tiến hành phân tích hai biến này trong bộ dữ liệu Credit.

**Bảng tần suất chéo và trực quan dữ liệu**      
*Bảng tần số chéo*   
k1 <- table(d1$Gender,d1$Married)
addmargins(k1)
##         
##           No Yes Sum
##    Male   76 117 193
##   Female  79 128 207
##   Sum    155 245 400

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

prop.table(k1,margin=1)
##         
##                 No       Yes
##    Male  0.3937824 0.6062176
##   Female 0.3816425 0.6183575

Trực quan hóa

# Hoặc nếu muốn hiển thị tỷ lệ
df_k1_prop <- as.data.frame(prop.table(k1, margin = 1))
colnames(df_k1_prop) <- c("Gender", "Married", "Proportion")

ggplot(df_k1_prop, aes(x = Gender, y = Proportion, fill = Married)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Tỷ lệ Tình trạng Hôn nhân theo Giới tính",
       x = "Giới tính",
       y = "Tỷ lệ",
       fill = "Kết hôn") +
  theme_minimal() +
  scale_y_continuous(labels = scales::percent)

Quan sát biểu đồ “Tỷ lệ Tình trạng Hôn nhân theo Giới tính”, ta thấy có sự khác biệt nhỏ về tỷ lệ giữa nam và nữ trong tình trạng kết hôn. Cụ thể, tỷ lệ nam giới đã kết hôn (Yes) là khoảng 60.62%, trong khi tỷ lệ nữ giới đã kết hôn là khoảng 61.84%. Ngược lại, tỷ lệ nam giới chưa kết hôn (No) là khoảng 39.38%, cao hơn một chút so với tỷ lệ nữ giới chưa kết hôn là 38.16%. Mặc dù có sự chênh lệch này, nhưng sự khác biệt giữa hai giới tính về tỷ lệ kết hôn là không quá lớn, cho thấy tình trạng hôn nhân phân bổ khá đồng đều giữa nam và nữ trong tập dữ liệu này.

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

Đánh giá xem hai biến có độc lập với nhau hay không bằng cách sử dụng Chi-square test.

Đặt giả thuyết:
\[ \begin{cases} H_0: \text{Biến Gender và Married không có mối quan hệ.} \\ H_1: \text{Biến Gender và Married có mối quan hệ.} \end{cases} \]

chisq.test(k1)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  k1
## X-squared = 0.021415, df = 1, p-value = 0.8837

Để phân tích mối quan hệ giữa “Gender” và “Married”, chúng ta sử dụng kiểm định Chi-bình phương với giả thuyết \(H_0\) là hai biến này độc lập và \(H_1\) là chúng có mối quan hệ. Kết quả kiểm định chisq.test(k1) cho thấy giá trị \(X^2 = 0.021415\) với \(df=1\)p-value là 0.8837. Vì p-value (0.8837) lớn hơn đáng kể so với mức ý nghĩa thông thường (ví dụ: 0.05), chúng ta không có đủ bằng chứng để bác bỏ giả thuyết \(H_0\). Điều này có nghĩa là không có mối quan hệ thống kê có ý nghĩa giữa giới tính và tình trạng hôn nhân trong tập dữ liệu này; hay nói cách khác, tình trạng kết hôn không phụ thuộc vào giới tính.

4.2 Biến Student và Ethnicity

Để đánh giá mối quan hệ giữa tình trạng là sinh viên (Student) và yếu tố sắc tộc (Ethnicity), những biến này có thể ảnh hưởng đến các đặc điểm tài chính hoặc khả năng tiếp cận tín dụng, chúng ta sẽ tiến hành phân tích hai biến này trong bộ dữ liệu Credit. Việc này sẽ giúp chúng ta xem xét liệu có sự khác biệt đáng kể về tình trạng là sinh viên giữa các nhóm sắc tộc hay không, từ đó có thể suy luận về những yếu tố tiềm ẩn liên quan đến hành vi vay tín dụng của từng nhóm.

Bảng tần suất chéo và trực quan dữ liệu
Bảng tần số chéo

k2 <- table(d1$Student,d1$Ethnicity)
addmargins(k2)
##      
##       African American Asian Caucasian Sum
##   No                89    89       182 360
##   Yes               10    13        17  40
##   Sum               99   102       199 400

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

prop.table(k2,margin=1)
##      
##       African American     Asian Caucasian
##   No         0.2472222 0.2472222 0.5055556
##   Yes        0.2500000 0.3250000 0.4250000

Trực quan hóa

library(reshape2)
## Warning: package 'reshape2' was built under R version 4.3.3
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
prop_k2 <- prop.table(k2, margin=1)

# Vẽ biểu đồ cột chồng (stacked barplot)
df_prop <- as.data.frame(prop_k2)
colnames(df_prop) <- c("Student", "Ethnicity", "Proportion")

# Kiểm tra levels
levels(df_prop$Ethnicity)
## [1] "African American" "Asian"            "Caucasian"
# Vẽ biểu đồ stacked barplot tỷ lệ
ggplot(df_prop, aes(x=Student, y=Proportion, fill=Ethnicity)) +
  geom_bar(stat="identity", position="dodge") +  # đổi sang dodge để các cột đứng cạnh
  scale_y_continuous(labels=scales::percent) +
  labs(title="Tỷ lệ Ethnicity theo Student",
       x="Student",
       y="Tỷ lệ (%)") +
  scale_fill_manual(values=c("steelblue", "orange", "seagreen")) +
  theme_minimal()

Quan sát biểu đồ “Tỷ lệ Ethnicity theo Student” và các bảng tần số chéo tương ứng, ta thấy rằng trong nhóm không phải sinh viên (No), sắc tộc Caucasian chiếm tỷ lệ áp đảo (khoảng 50.56%), trong khi African American và Asian có tỷ lệ tương đương nhau (khoảng 24.72%). Ngược lại, đối với nhóm sinh viên (Yes), tỷ lệ người Asian và African American tăng lên đáng kể (Asian khoảng 32.5%, African American khoảng 25%) so với nhóm không phải sinh viên, trong khi tỷ lệ Caucasian giảm xuống (khoảng 42.5%). Điều này cho thấy nhóm sinh viên có sự phân bố sắc tộc đa dạng hơn và tỷ lệ người Asian cũng như African American cao hơn so với nhóm không phải sinh viên.

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

Đánh giá xem hai biến có độc lập với nhau hay không bằng cách sử dụng Chi-square test.

Đặt giả thuyết:
\[ \begin{cases} H_0: \text{Biến Student và Ethnicity không có mối quan hệ.} \\ H_1: \text{Biến Student và Ethnicity có mối quan hệ.} \end{cases} \]

chisq.test(k2)
## 
##  Pearson's Chi-squared test
## 
## data:  k2
## X-squared = 1.3247, df = 2, p-value = 0.5156

Để phân tích mối quan hệ giữa “Student” và “Ethnicity”, chúng ta sử dụng kiểm định Chi-bình phương với giả thuyết \(H_0\) là hai biến này độc lập và \(H_1\) là chúng có mối quan hệ. Kết quả kiểm định chisq.test(k2) cho thấy giá trị \(X^2 = 1.3247\) với \(df=2\)p-value là 0.5156. Vì p-value (0.5156) lớn hơn đáng kể so với mức ý nghĩa thông thường (ví dụ: 0.05), chúng ta không có đủ bằng chứng để bác bỏ giả thuyết \(H_0\). Điều này có nghĩa là không có mối quan hệ thống kê có ý nghĩa giữa tình trạng sinh viên và sắc tộc trong tập dữ liệu này; hay nói cách khác, tình trạng là sinh viên không phụ thuộc vào sắc tộc.

5 Risk difference và Relative risk

5.1 Biến Gender và Married

TH1: hạng mục Female làm tham chiếu

e <- riskratio(k1,rev='b')
e
## $data
##         
##          Yes  No Total
##   Female 128  79   207
##    Male  117  76   193
##   Total  245 155   400
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate     lower  upper
##   Female  1.00000        NA     NA
##    Male   1.03181 0.8064772 1.3201
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##    Male   0.8041984    0.8375793  0.8033343
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét chi tiết về Risk Ratio của Biến Gender và Married trong bộ dữ liệu Credit:

Kết quả của hàm riskratio(k1, rev='p') đã tính toán tỷ lệ rủi ro (risk ratio) cho khả năng kết hôn (Married = Yes) giữa các nhóm giới tính, với nhóm “Female” (nữ giới) được đặt làm hạng mục tham chiếu.

  • Data:

    • Bảng Data hiển thị bảng tần số chéo của GenderMarried. Ta thấy có 128 nữ giới đã kết hôn và 79 nữ giới chưa kết hôn (tổng cộng 207 nữ). Tương tự, có 117 nam giới đã kết hôn và 76 nam giới chưa kết hôn (tổng cộng 193 nam). Tổng số quan sát là 400. Đây là dữ liệu gốc mà từ đó riskratio được tính toán.
  • Measure (Risk Ratio with 95% C.I.):

    • Estimate (Female): 1.00000 - Đây là giá trị tham chiếu cho nhóm nữ giới. Điều này có nghĩa là tỷ lệ kết hôn của nữ giới được lấy làm cơ sở để so sánh.

    • Estimate (Male): 1.03181 - Giá trị này cho biết tỷ lệ người đã kết hôn ở nam giới cao gấp 1.03181 lần so với nữ giới. Nói cách khác, nam giới có khả năng kết hôn cao hơn khoảng 3.18% so với nữ giới trong mẫu này. Trong bối cảnh vay tín dụng, điều này có thể gợi ý rằng nam giới có thể có một chút lợi thế hơn về yếu tố “đã kết hôn” khi đánh giá khả năng tài chính, nếu tình trạng hôn nhân được coi là một yếu tố ổn định tài chính.

    • Lower (Male): 0.8064772Upper (Male): 1.3201 - Đây là khoảng tin cậy 95% cho tỷ lệ rủi ro của nam giới so với nữ giới. Khoảng này cho biết rằng chúng ta tin tưởng 95% rằng tỷ lệ kết hôn thực sự của nam giới so với nữ giới trong tổng thể nằm trong khoảng từ 0.8064772 đến 1.3201.

      • Ý nghĩa trong bối cảnh Credit: Vì khoảng tin cậy này bao gồm giá trị 1 (tỷ lệ rủi ro bằng 1 có nghĩa là không có sự khác biệt giữa hai nhóm), nó chỉ ra rằng sự khác biệt nhỏ về tỷ lệ kết hôn nam và nữ quan sát được trong mẫu (1.03181) không đủ lớn để có ý nghĩa thống kê ở mức độ tin cậy 95%. Điều này hàm ý rằng, trong bộ dữ liệu tín dụng này, giới tính không phải là yếu tố dự báo đáng kể cho tình trạng hôn nhân. Do đó, nếu “tình trạng kết hôn” là một yếu tố quan trọng trong việc đánh giá khả năng vay tín dụng, thì “giới tính” dường như không tạo ra sự khác biệt đáng kể nào trong việc một người có kết hôn hay không.
  • p-value (two-sided):

    • midp.exact (Male): 0.8041984, fisher.exact (Male): 0.8375793, chi.square (Male): 0.8033343 - Các giá trị p-value này đều rất lớn (đều lớn hơn 0.05). Đặc biệt, giá trị p-value từ kiểm định Chi-square là 0.8033343, rất gần với p-value từ chisq.test(k1) (0.8837) mà bạn đã cung cấp trước đó.

    • Ý nghĩa trong bối cảnh Credit: Một p-value cao cho thấy không có đủ bằng chứng thống kê để bác bỏ giả thuyết \(H_0\) rằng không có mối quan hệ giữa “Gender” và “Married”. Kết hợp với khoảng tin cậy bao gồm 1, các p-value này củng cố mạnh mẽ kết luận rằng tình trạng kết hôn không có sự khác biệt đáng kể về mặt thống kê giữa nam và nữ trong bộ dữ liệu Credit này. Do đó, khi xem xét các yếu tố ảnh hưởng đến quyết định vay tín dụng, việc phân biệt dựa trên giới tính trong mối liên hệ với tình trạng hôn nhân là không cần thiết vì chúng không có mối quan hệ phụ thuộc rõ ràng.

    TH2: Hạng mục Male làm tham chiếu

e1 <- riskratio(k1)
e1
## $data
##         
##           No Yes Total
##    Male   76 117   193
##   Female  79 128   207
##   Total  155 245   400
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate     lower    upper
##    Male  1.000000        NA       NA
##   Female 1.020026 0.8725618 1.192411
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##    Male          NA           NA         NA
##   Female  0.8041984    0.8375793  0.8033343
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét về Risk Ratio của Biến Gender và Married (Male làm tham chiếu)

Kết quả của riskratio cho thấy khi “Male” là nhóm tham chiếu (estimate = 1.00000), tỷ lệ người đã kết hôn ở nữ giới được ước tính là 1.020026 lần so với nam giới. Điều này có nghĩa là nữ giới có tỷ lệ kết hôn cao hơn khoảng 2.0% so với nam giới trong mẫu.Tuy nhiên, khoảng tin cậy 95% cho tỷ lệ rủi ro này (0.8725618 đến 1.192411) bao gồm giá trị 1. Giá trị p-value (ví dụ: chi.square = 0.8033343) cũng rất lớn.Các chỉ số này cùng nhau chỉ ra rằng không có bằng chứng thống kê đáng kể để kết luận rằng có sự khác biệt về tỷ lệ kết hôn giữa nam và nữ trong tổng thể.Trong bối cảnh vay tín dụng, điều này hàm ý rằng giới tính không phải là yếu tố quan trọng trong việc dự đoán tình trạng hôn nhân, và do đó, không ảnh hưởng đáng kể đến việc đánh giá khả năng vay tín dụng dựa trên tình trạng hôn nhân.

5.2 Biến Student và Ethnicity

TH1: hạng mục Yes (sinh viên) làm tham chiếu

e2 <- riskratio(k2,rev='b')
e2
## $data
##        
##         Caucasian Asian African American Total
##   Yes          17    13               10    40
##   No          182    89               89   360
##   Total       199   102               99   400
## 
## $measure
##      risk ratio with 95% C.I.
##        estimate     lower    upper
##   Yes 1.0000000        NA       NA
##   No  0.7578768 0.4865357 1.180545
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact chi.square
##   Yes         NA           NA         NA
##   No   0.2603018    0.5016251  0.5156323
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét về Risk Ratio của Biến Student và Ethnicity (Sinh viên làm tham chiếu) trong bộ dữ liệu Credit:

Kết quả của riskratio cho thấy khi “Yes” (sinh viên) là nhóm tham chiếu (estimate = 1.00000), tỷ lệ người không phải sinh viên (No) so với nhóm sinh viên (Yes) được ước tính là 0.7578768 lần khi xét đến phân bố sắc tộc. Điều này có nghĩa là tỷ lệ người không phải sinh viên thấp hơn khoảng 24.21% so với tỷ lệ sinh viên, một sự khác biệt có thể có ý nghĩa đối với hồ sơ vay tín dụng. Tuy nhiên, khoảng tin cậy 95% cho tỷ lệ rủi ro này là từ 0.4865357 đến 1.180545. Vì khoảng tin cậy này bao gồm giá trị 1, và giá trị p-value (ví dụ: chi.square = 0.5156323) rất lớn, chúng ta không có đủ bằng chứng thống kê đáng kể để kết luận rằng có sự khác biệt có ý nghĩa về tỷ lệ giữa người là sinh viên và không phải sinh viên dựa trên sắc tộc trong tổng thể. Trong bối cảnh bộ dữ liệu Credit, điều này hàm ý rằng, mặc dù có những khác biệt về phân bố sắc tộc giữa sinh viên và phi sinh viên trong mẫu, nhưng sự khác biệt này không đủ mạnh để khẳng định một mối quan hệ thống kê đáng kể giữa tình trạng sinh viên và sắc tộc, từ đó không có bằng chứng rõ ràng cho thấy một trong hai biến này (tình trạng sinh viên hoặc sắc tộc) có thể được sử dụng độc lập để dự đoán khả năng vay tín dụng của người còn lại.

TH2: hạng mục No (không phải sinh viên) làm tham chiếu

e3 <- riskratio(k2)
e3
## $data
##        
##         African American Asian Caucasian Total
##   No                  89    89       182   360
##   Yes                 10    13        17    40
##   Total               99   102       199   400
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate     lower    upper
##   No  1.000000        NA       NA
##   Yes 1.130435 0.7673816 1.665251
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact chi.square
##   No          NA           NA         NA
##   Yes  0.5666488    0.5016251  0.5156323
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét về Risk Ratio của Biến Student và Ethnicity (không phải sinh viên làm tham chiếu) trong bộ dữ liệu Credit:

Để đánh giá mối quan hệ giữa “Student” và “Ethnicity”, chúng ta đã tiến hành phân tích tỷ lệ rủi ro (risk ratio) với hạng mục “No” (không phải sinh viên) làm tham chiếu. Tỷ lệ người là sinh viên (Yes) so với nhóm không phải sinh viên (No) được ước tính là 1.130435 lần. Điều này có nghĩa là tỷ lệ sinh viên cao hơn khoảng 13.04% so với nhóm không phải sinh viên khi xét đến phân bố sắc tộc. Tuy nhiên, khoảng tin cậy 95% cho tỷ lệ rủi ro này là từ 0.7673816 đến 1.665251. Vì khoảng tin cậy này bao gồm giá trị 1, và giá trị p-value (ví dụ: chi.square = 0.5156323) rất lớn, chúng ta không có đủ bằng chứng thống kê đáng kể để kết luận rằng có sự khác biệt có ý nghĩa về tỷ lệ giữa người là sinh viên và không phải sinh viên dựa trên sắc tộc trong tổng thể. Trong bối cảnh bộ dữ liệu Credit, điều này hàm ý rằng, mặc dù có vẻ như sinh viên có tỷ lệ phân bố sắc tộc nhỉnh hơn so với người không phải sinh viên trong mẫu, nhưng sự khác biệt này không đủ mạnh để khẳng định một mối quan hệ thống kê đáng kể giữa tình trạng sinh viên và sắc tộc, từ đó không có bằng chứng rõ ràng cho thấy một trong hai biến này có thể được sử dụng độc lập để dự đoán khả năng vay tín dụng của người còn lại.

6 Odd ratio

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

6.1 Biến Gender và Married

o <- oddsratio(k1)
o
## $data
##         
##           No Yes Total
##    Male   76 117   193
##   Female  79 128   207
##   Total  155 245   400
## 
## $measure
##         odds ratio with 95% C.I.
##          estimate     lower    upper
##    Male  1.000000        NA       NA
##   Female 1.052341 0.7027552 1.575668
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##    Male          NA           NA         NA
##   Female  0.8041984    0.8375793  0.8033343
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Nhận xét về Odds Ratio của Biến Gender và Married trong bộ dữ liệu Credit:

Chúng ta sử dụng Odds Ratio để phân tích mối liên hệ giữa giới tính (Gender) và tình trạng hôn nhân (Married), nhằm xác định xem có sự khác biệt đáng kể nào giữa các nhóm được so sánh hay không, đặc biệt trong bối cảnh các yếu tố này có thể ảnh hưởng đến khả năng vay tín dụng. Kết quả oddsratio(k1) hiển thị khi “Male” (nam giới) là hạng mục tham chiếu.

  • Data: Bảng Data trình bày bảng tần số chéo giữa GenderMarried. Có 117 nam giới đã kết hôn và 76 nam giới chưa kết hôn (tổng cộng 193 nam). Đối với nữ giới, có 128 người đã kết hôn và 79 người chưa kết hôn (tổng cộng 207 nữ). Tổng số quan sát là 400. Đây là dữ liệu cơ sở cho việc tính toán Odds Ratio.

  • Measure (Odds Ratio with 95% C.I.):

    • Estimate (Male): 1.00000 - Đây là giá trị tham chiếu cho nhóm nam giới. Tỷ lệ cược (odds) của nam giới đã kết hôn so với chưa kết hôn được lấy làm cơ sở để so sánh.

    • Estimate (Female): 1.052341 - Giá trị này cho biết tỷ lệ cược để một người nữ đã kết hôn (so với chưa kết hôn) cao gấp 1.052341 lần so với tỷ lệ cược tương tự ở nam giới. Điều này ngụ ý rằng nữ giới có khả năng đã kết hôn nhỉnh hơn một chút so với nam giới trong mẫu này. Trong bối cảnh vay tín dụng, nếu tình trạng hôn nhân “đã kết hôn” được coi là một yếu tố ổn định tài chính, thì sự chênh lệch nhỏ này có thể không đủ để tạo ra sự ưu tiên đáng kể cho nữ giới so với nam giới dựa trên yếu tố hôn nhân.

    • Lower (Female): 0.7027552Upper (Female): 1.575668 - Đây là khoảng tin cậy 95% cho Odds Ratio của nữ giới so với nam giới. Khoảng này cho biết chúng ta tin tưởng 95% rằng tỷ lệ cược thực sự của việc nữ giới đã kết hôn so với nam giới trong tổng thể nằm trong khoảng từ 0.7027552 đến 1.575668.

      • Ý nghĩa trong bối cảnh Credit: Vì khoảng tin cậy này bao gồm giá trị 1 (tỷ lệ cược bằng 1 có nghĩa là không có sự khác biệt về tỷ lệ cược giữa hai nhóm), nó chỉ ra rằng sự khác biệt về tỷ lệ cược kết hôn giữa nam và nữ quan sát được trong mẫu (1.052341) không đủ lớn để có ý nghĩa thống kê ở mức độ tin cậy 95%. Điều này hàm ý rằng, trong bộ dữ liệu tín dụng này, giới tính không phải là yếu tố dự báo đáng kể cho tình trạng hôn nhân. Do đó, khi các tổ chức tín dụng đánh giá khả năng vay dựa trên tình trạng hôn nhân, việc phân biệt đối xử dựa trên giới tính là không có cơ sở thống kê rõ ràng vì hai biến này không có mối liên hệ phụ thuộc đáng kể.
  • p-value (two-sided):

    • midp.exact (Female): 0.8041984, fisher.exact (Female): 0.8375793, chi.square (Female): 0.8033343 - Tất cả các giá trị p-value này đều rất lớn (đều lớn hơn 0.05).

    • Ý nghĩa trong bối cảnh Credit: Một p-value cao như vậy cho thấy không có đủ bằng chứng thống kê để bác bỏ giả thuyết \(H_0\) rằng không có mối quan hệ giữa “Gender” và “Married” (tức là chúng độc lập). Điều này cũng củng cố kết luận rằng, trong bộ dữ liệu Credit, tình trạng hôn nhân không phụ thuộc vào giới tính. Do đó, các chính sách cho vay dựa trên sự kết hợp của hai yếu tố này có thể không mang lại lợi thế dự đoán đáng kể, và việc sử dụng giới tính để suy luận về tình trạng hôn nhân (và từ đó ảnh hưởng đến quyết định tín dụng) là không có cơ sở thống kê vững chắc.

6.2 Biến Student và Ethnicity

o1 <- oddsratio(k2)
o1
## $data
##        
##         African American Asian Caucasian Total
##   No                  89    89       182   360
##   Yes                 10    13        17    40
##   Total               99   102       199   400
## 
## $measure
##      odds ratio with 95% C.I.
##       estimate     lower    upper
##   No  1.000000        NA       NA
##   Yes 1.294074 0.5362395 3.212193
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact chi.square
##   No          NA           NA         NA
##   Yes  0.5666488    0.5016251  0.5156323
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Kết quả oddsratio cho thấy khi nhóm “No” (không phải sinh viên) là tham chiếu, tỷ lệ cược để một người là sinh viên (Yes) so với không phải sinh viên là 1.294074 lần. Mặc dù ước tính này cho thấy tỷ lệ cược là sinh viên cao hơn một chút, khoảng tin cậy 95% cho tỷ lệ cược (0.5362395 đến 3.212193) bao gồm giá trị 1. Kết hợp với p-value lớn (ví dụ: chi.square = 0.5156323), chúng ta không có đủ bằng chứng thống kê để kết luận rằng có mối liên hệ đáng kể giữa tình trạng sinh viên và sắc tộc. Trong bối cảnh bộ dữ liệu Credit, điều này có nghĩa là sự phân bố sắc tộc không có sự khác biệt thống kê đáng kể giữa sinh viên và người không phải sinh viên, và do đó, việc sử dụng một trong hai biến này để suy luận về biến còn lại nhằm đánh giá khả năng vay tín dụng là không có cơ sở vững chắc.

LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSB0deG6p24gNCINCmF1dGhvcjogInBubWluaGNoYXUiDQpkYXRlOiAiMjAyNS0wNi0wOCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtOiAiZGVmYXVsdCINCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQpgYGB7cixlY2hvPUZBTFNFfQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHN0YXRzKQ0KbGlicmFyeShwc3ljaCkNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoZXBpdG9vbHMpDQpsaWJyYXJ5KEFFUikNCmxpYnJhcnkoZGF0YXJpdW0pDQpsaWJyYXJ5KEVjZGF0KQ0KbGlicmFyeShJU0xSKQ0KYGBgDQoNCiMgKipC4buZIGThu68gbGnhu4d1IENyZWRpdCoqICAgDQoNCkLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0IGNo4bupYSB0aMO0bmcgdGluIHbhu4Ega2jDoWNoIGjDoG5nIHZheSB0w61uIGThu6VuZyB04burIG3hu5l0IG5nw6JuIGjDoG5nLCB24bubaSBt4bulYyB0acOqdSBjaMOtbmggbMOgIGThu7EgxJFvw6FuIGto4bqjIG7Eg25nIHbhu6EgbuG7oyBj4bunYSBraMOhY2ggaMOgbmcgZOG7sWEgdHLDqm4gY8OhYyDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUgaOG7jWMgdsOgIHTDoGkgY2jDrW5oIGPhu6dhIGjhu40uIMSQw6J5IGzDoCBt4buZdCBi4buZIGThu68gbGnhu4d1IGzDvSB0xrDhu59uZyDEkeG7gyBuZ2hpw6puIGPhu6l1IHbhu4EgcuG7p2kgcm8gdMOtbiBk4bulbmcsIGjDoG5oIHZpIHZheSBtxrDhu6NuIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nLCB2w6AgcGjDom4gdMOtY2ggdMOgaSBjaMOtbmggY8OhIG5ow6JuLiAgIA0KDQpC4buZIGThu68gbGnhu4d1IG7DoHkgY8OzIHThu5VuZyBj4buZbmcgNDAwIHF1YW4gc8OhdCB2w6AgMTEgYmnhur9uLiAgIA0KDQogKkPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggKFF1YWxpdGF0aXZlL0NhdGVnb3JpY2FsIFZhcmlhYmxlcykgbuG7lWkgYuG6rXQ6Kg0KDQoqIGBHZW5kZXJgOiBHaeG7m2kgdMOtbmggY+G7p2Ega2jDoWNoIGjDoG5nIChNYWxlL0ZlbWFsZSkuICAgDQoNCiogYFN0dWRlbnRgOiBUw6xuaCB0cuG6oW5nIHNpbmggdmnDqm4gKFllcy9ObykuIFNpbmggdmnDqm4gdGjGsOG7nW5nIGPDsyBow6BuaCB2aSBjaGkgdGnDqnUgdsOgIHRodSBuaOG6rXAga2jDoWMgYmnhu4d0LiAgIA0KDQoqIGBNYXJyaWVkYDogVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIChZZXMvTm8pLiBUw6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyB0w6BpIGNow61uaCB2w6AgcXV54bq/dCDEkeG7i25oIHZheSBtxrDhu6NuLiAgIA0KDQoqIGBFdGhuaWNpdHlgOiBEw6JuIHThu5ljIGPhu6dhIGtow6FjaCBow6BuZyAoQ2F1Y2FzaWFuL0FzaWFuL0FmcmljYW4gQW1lcmljYW4pLiBCaeG6v24gbsOgeSBjw7MgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4Mga2nhu4NtIHRyYSBz4buxIGtow6FjIGJp4buHdCB0cm9uZyB2aeG7h2MgY+G6pXAgdMOtbiBk4bulbmcgZ2nhu69hIGPDoWMgbmjDs20gZMOibiB04buZYywgaG/hurdjIGxp4buHdSBjw7Mgc+G7sSBwaMOibiBiaeG7h3QgxJHhu5FpIHjhu60gaGF5IGtow7RuZy4gICANCg0KICpDw6FjIGJp4bq/biDEkeG7i25oIGzGsOG7o25nIChRdWFudGl0YXRpdmUvTnVtZXJpY2FsIFZhcmlhYmxlcykgbuG7lWkgYuG6rXQ6Kg0KDQoqIGBJbmNvbWVgOiBUaHUgbmjhuq1wIGjDoG5nIG7Eg20gY+G7p2Ega2jDoWNoIGjDoG5nICh0w61uaCBi4bqxbmcgbmfDoG4gxJHDtCBsYSkuIMSQw6J5IGzDoCBt4buZdCB54bq/dSB04buRIHF1YW4gdHLhu41uZyDhuqNuaCBoxrDhu59uZyDEkeG6v24ga2jhuqMgbsSDbmcgdHLhuqMgbuG7oy4gICANCg0KKiBgTGltaXRgOiBI4bqhbiBt4bupYyB0w61uIGThu6VuZyBj4bunYSBraMOhY2ggaMOgbmcgKHTDrW5oIGLhurFuZyDEkcO0IGxhKS4gICANCg0KKiBgUmF0aW5nYDogxJBp4buDbSB0w61uIGThu6VuZyBj4bunYSBraMOhY2ggaMOgbmcgKHRoxrDhu51uZyBsw6AgbeG7mXQgdGjGsOG7m2MgxJFvIGPhu6dhIHV5IHTDrW4gdMOgaSBjaMOtbmgpLiAgIA0KDQoqIGBDYXJkc2A6IFPhu5EgbMaw4bujbmcgdGjhursgdMOtbiBk4bulbmcgbcOgIGtow6FjaCBow6BuZyDEkWFuZyBz4bufIGjhu691LiAgICANCg0KKiBgQWdlYDogVHXhu5VpIGPhu6dhIGtow6FjaCBow6BuZy4gICANCg0KKiBgRWR1Y2F0aW9uYDogU+G7kSBuxINtIGjhu41jIHbhuqVuIGPhu6dhIGtow6FjaCBow6BuZy4gICANCg0KKiBgQmFsYW5jZWA6IFPhu5EgZMawIG7hu6MgdMOtbiBk4bulbmcgdHJ1bmcgYsOsbmggaMOgbmcgdGjDoW5nIGPhu6dhIGtow6FjaCBow6BuZyAodMOtbmggYuG6sW5nIMSRw7QgbGEpLiDEkMOieSB0aMaw4budbmcgbMOgIGJp4bq/biBwaOG7pSB0aHXhu5ljIGNow61uaCBraGkgZOG7sSDEkW/DoW4ga2jhuqMgbsSDbmcgduG7oSBu4bujIGhv4bq3YyBy4bunaSBybyB0w61uIGThu6VuZy4gICANCg0KDQpgYGB7cixlY2hvPVRSVUV9DQoNCmQgPC0gQ3JlZGl0DQpkYXRhdGFibGUoZCkNCmBgYA0KDQoqICoqQ+G6pXUgdHLDumMgYuG7mSBk4buvIGxp4buHdSoqICAgDQpgYGB7cixlY2hvPVRSVUV9DQpzdHIoZCkNCmBgYA0KICANCiAgQuG7mSBk4buvIGxp4buHdSBDcmVkaXQgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgbmdoacOqbiBj4bupdSBuw6B5IGNo4bupYSB0aMO0bmcgdGluIGPhu6dhIDQwMCBraMOhY2ggaMOgbmcgdmF5IHTDrW4gZOG7pW5nLCB24bubaSB04buVbmcgY+G7mW5nIDEyIGJp4bq/bi4gQ+G6pXUgdHLDumMgY+G7p2EgYuG7mSBk4buvIGxp4buHdSAoc3RyKGQpKSBjaG8gdGjhuqV5IHPhu7Ega+G6v3QgaOG7o3AgY+G7p2EgY+G6oyBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZyB2w6AgxJHhu4tuaCB0w61uaC4gQ8OhYyBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZyBiYW8gZ+G7k20gSUQsIEluY29tZSwgTGltaXQsIFJhdGluZywgQ2FyZHMsIEFnZSwgRWR1Y2F0aW9uLCB2w6AgQmFsYW5jZSAoxJHhu4F1IGzDoCBraeG7g3Ugc+G7kSBuZ3V5w6puIGhv4bq3YyBz4buRIHRo4buxYyksIGN1bmcgY+G6pXAgdGjDtG5nIHRpbiB24buBIHTDoGkgY2jDrW5oIHbDoCBuaMOibiBraOG6qXUgaOG7jWMuIFRyb25nIGtoaSDEkcOzLCBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIGJhbyBn4buTbSBHZW5kZXIsIFN0dWRlbnQsIE1hcnJpZWQsIHbDoCBFdGhuaWNpdHkgKMSR4buBdSDEkcaw4bujYyDEkeG7i25oIGThuqFuZyBsw6AgeeG6v3UgdOG7kSB24bubaSBjw6FjIGPhuqVwIMSR4buZIHTGsMahbmcg4bupbmcpLCDEkeG6oWkgZGnhu4duIGNobyBjw6FjIMSR4bq3YyDEkWnhu4NtIHBow6JuIGxv4bqhaSBj4bunYSBraMOhY2ggaMOgbmcuIFPhu7EgxJFhIGThuqFuZyB0cm9uZyBj4bqldSB0csO6YyBiaeG6v24gbsOgeSB04bqhbyBu4buBbiB04bqjbmcgduG7r25nIGNo4bqvYyBjaG8gdmnhu4djIHBow6JuIHTDrWNoIHRvw6BuIGRp4buHbiBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHLhu6dpIHJvIHTDrW4gZOG7pW5nIHbDoCBow6BuaCB2aSB0w6BpIGNow61uaC4gICANCg0KKiAqKkzhu41jIGPDoWMgYmnhur9uIMSR4buLbmggbMaw4bujbmcgY+G7p2EgYuG7mSBk4buvIGxp4buHdSBDcmVkaXQqKiAgIA0KDQpgYGB7cixlY2hvPVRSVUV9DQpkMSA8LSBzdWJzZXQoZCxzZWxlY3Q9LWMoSW5jb21lLCBMaW1pdCwgUmF0aW5nLCBDYXJkcywgQWdlLCBFZHVjYXRpb24sIEJhbGFuY2UpKQ0KZGF0YXRhYmxlKGQxKQ0KDQpgYGANCg0KKiAqKktp4buDbSB0cmEgZOG7ryBsaeG7h3UgYuG7iyB0aGnhur91KiogICANCg0KYGBge3IsZWNobz1UUlVFfQ0KYSA8LWlzLm5hKGQxKQ0KZGF0YXRhYmxlKGEpDQpzdW0oaXMubmEoZDEpKQ0Kd2hpY2goaXMubmEoZDEpKQ0KYGBgDQoNCiAgxJDhu4MgxJHhuqNtIGLhuqNvIGNo4bqldCBsxrDhu6NuZyBk4buvIGxp4buHdSwgcXXDoSB0csOsbmgga2nhu4NtIHRyYSBk4buvIGxp4buHdSBi4buLIHRoaeG6v3UgKG1pc3NpbmcgZGF0YSkgxJHDoyDEkcaw4bujYyB0aeG6v24gaMOgbmggdHLDqm4gYuG7mSBk4buvIGxp4buHdSBDcmVkaXQuIELhurFuZyBjw6FjaCBz4butIGThu6VuZyBjw6FjIGjDoG0ga2nhu4NtIHRyYSB0cm9uZyBSIG5oxrAgaXMubmEoKSB2w6Agc3VtKGlzLm5hKCkpLCBr4bq/dCBxdeG6oyBjaG8gdGjhuqV5IHRvw6BuIGLhu5kgYuG7mSBk4buvIGxp4buHdSBraMO0bmcgY2jhu6lhIGLhuqV0IGvhu7MgZ2nDoSB0cuG7iyBOQSBuw6BvLiBD4bulIHRo4buDLCB04buVbmcgc+G7kSBnacOhIHRy4buLIHRoaeG6v3UgxJHGsOG7o2MgeMOhYyDEkeG7i25oIGzDoCAwLCDEkeG7k25nIHRo4budaSBraMO0bmcgY8OzIGNo4buJIHPhu5EgbsOgbyDEkcaw4bujYyB0cuG6oyB24buBIGNobyBjw6FjIHbhu4sgdHLDrSBjw7MgZOG7ryBsaeG7h3UgdGhp4bq/dS4gxJBp4buBdSBuw6B5IGto4bqzbmcgxJHhu4tuaCBi4buZIGThu68gbGnhu4d1IENyZWRpdCBsw6AgaG/DoG4gY2jhu4luaCB2w6Aga2jDtG5nIHnDqnUgY+G6p3UgYuG6pXQga+G7syBixrDhu5tjIHjhu60gbMO9IGThu68gbGnhu4d1IHRoaeG6v3UgbsOgbywgZ2nDunAgcXXDoSB0csOsbmggcGjDom4gdMOtY2ggdGnhur9wIHRoZW8gxJHGsOG7o2MgdGjhu7FjIGhp4buHbiB0csOqbiBu4buBbiB04bqjbmcgZOG7ryBsaeG7h3UgxJHDoW5nIHRpbiBj4bqteS4gICANCiAgDQojICoqUGjDom4gdMOtY2ggbcO0IHThuqMgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCoqICAgDQoNCiMjICoqQmnhur9uIEdlbmRlcioqDQoNCiAgVGjhu5FuZyBrw6ogbcO0IHThuqMgYmnhur9uIEdlbmRlciB0aMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgdsOgIMSR4buTIHRo4buLLiAgIA0KICANCipC4bqjbmcgdOG6p24gc+G7kToqICAgDQoNCmBgYHtyLGVjaG89VFJVRX0NCnRhYmxlKGQxJEdlbmRlcikNCmBgYA0KDQoqQuG6o25nIHThuqduIHN14bqldDoqICAgDQoNCmBgYHtyLGVjaG89VFJVRX0NCmEyIDwtIHRhYmxlKGQxJEdlbmRlcikvc3VtKG5yb3coZDEpKQ0KYTINCmBgYA0KDQpW4bqteSB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkgY8OzIGByIHRhYmxlKGQxJEdlbmRlcilbMV0vc3VtKG5yb3coZDEpKSoxMDBgXCUgbmFtIHbDoCAgYHIgdGFibGUoZDEkR2VuZGVyKSBbMl0vc3VtKG5yb3coZDEpKSoxMDBgXCUgbuG7ry4gICAgDQoNCirEkOG7kyB0aOG7iyBiaeG7g3UgZGnhu4VuIHThu7cgbOG7hyBwaOG6p24gdHLEg20gZ2nhu5tpIHTDrW5oIGtow6FjaCBow6BuZyB2YXkgdMOtbiBk4bulbmcgdOG7qyBt4buZdCBuZ8OibiBow6BuZzoqICAgDQoNCmBgYHtyLGVjaG89VFJVRX0NCnBpZShhMiwNCiAgICBsYWJlbHMgPSBwYXN0ZShuYW1lcyhhMiksIHJvdW5kKGEyLCAyKSwgIiUiKSwNCiAgICBtYWluID0gIkJp4buDdSDEkeG7kyB0csOybjogVOG7tyBs4buHIEdlbmRlciIpIA0KYGBgDQoNCiogTmjhuq1uIHjDqXQgduG7gSBiaeG6v24gR2VuZGVyIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0OiAgIA0KDQogICogUGjDom4gdMOtY2ggYmnhur9uIEdlbmRlciAoR2nhu5tpIHTDrW5oKSB0cm9uZyBi4buZIGThu68gbGnhu4d1IGtow6FjaCBow6BuZyB2YXkgdMOtbiBk4bulbmcgY+G7p2EgbmfDom4gaMOgbmcgY2hvIHRo4bqleSBz4buxIHBow6JuIGLhu5UgdMawxqFuZyDEkeG7kWkgxJHhu5NuZyDEkeG7gXUgZ2nhu69hIG5hbSB2w6AgbuG7ry4gQ+G7pSB0aOG7gywgdHJvbmcgdOG7lW5nIHPhu5EgNDAwIGtow6FjaCBow6BuZywgY8OzIDE5MyBraMOhY2ggaMOgbmcgbmFtIHbDoCAyMDcga2jDoWNoIGjDoG5nIG7hu68uICAgDQogIA0KICAqIEtoaSB0w61uaCB0b8OhbiB04bqnbiBzdeG6pXQgdMawxqFuZyDEkeG7kWksIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbmFtIGNoaeG6v20ga2hv4bqjbmcgNDguMjUlLCB0cm9uZyBraGkga2jDoWNoIGjDoG5nIG7hu68gY2hp4bq/bSA1MS43NSUuIE3hurdjIGTDuSBjw7MgbeG7mXQgc+G7sSBjaMOqbmggbOG7h2NoIG5o4buPLCB24bubaSBz4buRIGzGsOG7o25nIG7hu68gZ2nhu5tpIG5oaeG7gXUgaMahbiBt4buZdCBjaMO6dCwgc+G7sSBwaMOibiBwaOG7kWkgbsOgeSB24bqrbiBjaG8gdGjhuqV5IG5nw6JuIGjDoG5nIMSRYW5nIHBo4bulYyB24bulIG3hu5l0IHThuq1wIGtow6FjaCBow6BuZyBraMOhIGPDom4gYuG6sW5nIHbhu4EgZ2nhu5tpIHTDrW5oLiAgIA0KICANCiAgKiDEkGnhu4F1IG7DoHkgY8OzIMO9IG5naMSpYSBxdWFuIHRy4buNbmcgdHJvbmcgdmnhu4djIMSR4bqjbSBi4bqjbyB0w61uaCDEkeG6oWkgZGnhu4duIGPhu6dhIGThu68gbGnhu4d1IGtoaSBwaMOibiB0w61jaCBow6BuaCB2aSB2YXkgdMOtbiBk4bulbmcgdsOgIHLhu6dpIHJvIHTDrW4gZOG7pW5nLiDEkOG7k25nIHRo4budaSwgbsOzIGPFqW5nIGfhu6NpIG3hu58ga2jhuqMgbsSDbmcga2jDtG5nIGPDsyBz4buxIHRoacOqbiBs4buHY2ggxJHDoW5nIGvhu4MgduG7gSBnaeG7m2kgdMOtbmggdHJvbmcgdOG6rXAga2jDoWNoIGjDoG5nIGhp4buHbiB04bqhaSBj4bunYSBuZ8OibiBow6BuZywgZ2nDunAgY8OhYyBtw7QgaMOsbmggZOG7sSDEkW/DoW4gdMOtbiBk4bulbmcga2jDtG5nIGLhu4sg4bqjbmggaMaw4bufbmcgcXXDoSBuaGnhu4F1IGLhu59pIHnhur91IHThu5EgZ2nhu5tpIHTDrW5oLiAgIA0KICANCg0KIyMgKipCaeG6v24gU3R1ZGVudCoqICAgDQoNClRo4buRbmcga8OqIG3DtCB04bqjIGJp4bq/biBTdHVkZW50IHRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgxJHhu5MgdGjhu4suICAgDQogIA0KKkLhuqNuZyB04bqnbiBz4buROiogICANCg0KYGBge3IsZWNobz1UUlVFfQ0KdGFibGUoZDEkU3R1ZGVudCkNCmBgYA0KDQoqQuG6o25nIHThuqduIHN14bqldDoqICAgDQoNCmBgYHtyLGVjaG89VFJVRX0NCmEzIDwtIHRhYmxlKGQxJFN0dWRlbnQpL3N1bShucm93KGQxKSkNCmEzDQpgYGANCg0KVuG6rXkgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBuw6B5IGPDsyBgciB0YWJsZShkMSRTdHVkZW50KVsxXS9zdW0obnJvdyhkMSkpKjEwMGBcJSBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4gdsOgICBgciB0YWJsZShkMSRTdHVkZW50KSBbMl0vc3VtKG5yb3coZDEpKSoxMDBgXCUgc2luaCB2acOqbi4gICAgICAgDQogDQoqxJDhu5MgdGjhu4sgYmnhu4N1IGRp4buFbiB04bu3IGzhu4cgcGjhuqduIHRyxINtICBzaW5oIHZpw6puIHZheSB0w61uIGThu6VuZyB04burIG3hu5l0IG5nw6JuIGjDoG5nOiogICANCg0KYGBge3IsZWNobz1UUlVFfQ0KcGllKGEzLA0KICAgIGxhYmVscyA9IHBhc3RlKG5hbWVzKGEzKSwgcm91bmQoYTMsIDIpLCAiJSIpLA0KICAgIG1haW4gPSAiQmnhu4N1IMSR4buTIHRyw7JuOiBU4bu3IGzhu4cgU3R1ZGVudCIpIA0KYGBgDQoNCiogTmjhuq1uIHjDqXQgduG7gSBiaeG6v24gU3R1ZGVudCB0cm9uZyBi4buZIGThu68gbGnhu4d1IENyZWRpdDogICANCg0KICBQaMOibiB0w61jaCBiaeG6v24gU3R1ZGVudCAoVMOsbmggdHLhuqFuZyBzaW5oIHZpw6puKSB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBraMOhY2ggaMOgbmcgdmF5IHTDrW4gZOG7pW5nIGNobyB0aOG6pXkgbeG7mXQgdOG7tyBs4buHIHLhuqV0IG5o4buPIGtow6FjaCBow6BuZyBsw6Agc2luaCB2acOqbi4gQ+G7pSB0aOG7gywgdHJvbmcgdOG7lW5nIHPhu5EgNDAwIGtow6FjaCBow6BuZywgY8OzIHThu5tpIDM2MCBraMOhY2ggaMOgbmcga2jDtG5nIHBo4bqjaSBsw6Agc2luaCB2acOqbiAoTm8pLCBjaGnhur9tIDkwJSB04buVbmcgc+G7kSBt4bqrdS4gTmfGsOG7o2MgbOG6oWksIGNo4buJIGPDsyA0MCBraMOhY2ggaMOgbmcgbMOgIHNpbmggdmnDqm4gKFllcyksIHTGsMahbmcg4bupbmcgduG7m2kgMTAlIGTDom4gc+G7kSBt4bqrdS4gQmnhu4N1IMSR4buTIHRyw7JuIGPDoG5nIGzDoG0gbuG7lWkgYuG6rXQgc+G7sSBjaMOqbmggbOG7h2NoIGzhu5tuIG7DoHksIHbhu5tpIHBo4bqnbiBs4bubbiBiaeG7g3UgxJHhu5MgxJHhuqFpIGRp4buHbiBjaG8gbmjDs20gIktow7RuZyBwaOG6o2kgc2luaCB2acOqbiIuIMSQaeG7gXUgbsOgeSBn4bujaSDDvSBy4bqxbmcgxJHhu5FpIHTGsOG7o25nIGtow6FjaCBow6BuZyBjaMOtbmggY+G7p2EgbmfDom4gaMOgbmcgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBuw6B5IGtow7RuZyBwaOG6o2kgbMOgIHNpbmggdmnDqm4sIHbDoCBjw6FjIHBow6JuIHTDrWNoIHbhu4EgaMOgbmggdmkgdmF5IHTDrW4gZOG7pW5nIGPDsyB0aOG7gyBz4bq9IHThuq1wIHRydW5nIGNo4bunIHnhur91IHbDoG8gbmjDs20ga2jDoWNoIGjDoG5nIGtow7RuZyBwaOG6o2kgc2luaCB2acOqbi4gU+G7sSBwaMOibiBi4buRIG7DoHkgY8OzIHRo4buDIOG6o25oIGjGsOG7n25nIMSR4bq/biBjw6FjIGNoaeG6v24gbMaw4bujYyDEkcOhbmggZ2nDoSBy4bunaSBybyB2w6AgdGnhur9wIHRo4buLIHPhuqNuIHBo4bqpbSB0w61uIGThu6VuZyBj4bunYSBuZ8OibiBow6BuZy4gICANCiAgDQoNCiMjICoqQmnhur9uIE1hcnJpZWQqKiAgIA0KDQpUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gTWFycmllZCB0aMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgdsOgIMSR4buTIHRo4buLLiAgIA0KICANCipC4bqjbmcgdOG6p24gc+G7kToqICAgDQoNCmBgYHtyLGVjaG89VFJVRX0NCnRhYmxlKGQxJE1hcnJpZWQpDQpgYGANCg0KKkLhuqNuZyB04bqnbiBzdeG6pXQ6KiAgIA0KDQpgYGB7cixlY2hvPVRSVUV9DQphNCA8LSB0YWJsZShkMSRNYXJyaWVkKS9zdW0obnJvdyhkMSkpDQphNA0KYGBgDQoNClbhuq15IHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgeSBjw7MgYHIgdGFibGUoZDEkTWFycmllZClbMV0vc3VtKG5yb3coZDEpKSoxMDBgXCUgY2jGsGEga+G6v3QgaMahbiB2w6AgIGByIHRhYmxlKGQxJE1hcnJpZWQpIFsyXS9zdW0obnJvdyhkMSkpKjEwMGBcJSDEkcOjIGvhur90IGjDtG4uIA0KKsSQ4buTIHRo4buLIGJp4buDdSBkaeG7hW4gdOG7tyBs4buHIHBo4bqnbiB0csSDbSAgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPhu6dhIGtow6FjaCBow6BuZyB2YXkgdMOtbiBk4bulbmcgdOG7qyBt4buZdCBuZ8OibiBow6BuZzoqICAgDQoNCmBgYHtyLGVjaG89VFJVRX0NCnBpZShhNCwNCiAgICBsYWJlbHMgPSBwYXN0ZShuYW1lcyhhNCksIHJvdW5kKGE0LCAyKSwgIiUiKSwNCiAgICBtYWluID0gIkJp4buDdSDEkeG7kyB0csOybjogVOG7tyBs4buHIE1hcnJpZWQiKSANCmBgYA0KDQoqIE5o4bqtbiB4w6l0IHbhu4EgYmnhur9uIE1hcnJpZWQgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBDcmVkaXQ6ICAgDQoNCiAgROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggYmnhur9uICJNYXJyaWVkIiAoVMOsbmggdHLhuqFuZyBow7RuIG5ow6JuKSB04burIGLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0LCBjaMO6bmcgdGEgdGjhuqV5IHLhurFuZyB0cm9uZyBz4buRIG5o4buvbmcga2jDoWNoIGjDoG5nIHZheSB0w61uIGThu6VuZywgbmjDs20gxJHDoyBr4bq/dCBow7RuIGNoaeG6v20gdOG7tyBs4buHIGzhu5tuIGjGoW4gKDYxLjI1JSkgc28gduG7m2kgbmjDs20gY2jGsGEga+G6v3QgaMO0biAoMzguNzUlKSwgxJHGsOG7o2MgdGjhu4MgaGnhu4duIHLDtSByw6BuZyBxdWEgYuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgYmnhu4N1IMSR4buTIHRyw7JuLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIGfhu6NpIMO9IHLhurFuZyBjw6FjIHThu5UgY2jhu6ljIHTDrW4gZOG7pW5nIGPDsyB0aOG7gyBjw7MgeHUgaMaw4bubbmcgxrB1IHRpw6puIGhv4bq3YyDEkcOhbmggZ2nDoSBjYW8gaMahbiDEkeG7kWkgduG7m2kgY8OhYyBjw6EgbmjDom4gxJHDoyBr4bq/dCBow7RuIGtoaSB4w6l0IGR1eeG7h3Qga2hv4bqjbiB2YXksIGPDsyB0aOG7gyBkbyBnaeG6oyDEkeG7i25oIHbhu4Egc+G7sSDhu5VuIMSR4buLbmggdMOgaSBjaMOtbmggdsOgIHRyw6FjaCBuaGnhu4dtIGNhbyBoxqFuLiAgICAgDQogIA0KDQojIyAqKkJp4bq/biBFdGhuaWNpdHkqKiAgICANCiAgDQpUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gRXRobmljaXR5IHRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgxJHhu5MgdGjhu4suICAgDQogIA0KKkLhuqNuZyB04bqnbiBz4buROiogICANCg0KYGBge3IsZWNobz1UUlVFfQ0KdGFibGUoZDEkRXRobmljaXR5KQ0KYGBgDQoNCipC4bqjbmcgdOG6p24gc3XhuqV0OiogICANCg0KYGBge3IsZWNobz1UUlVFfQ0KYTUgPC0gdGFibGUoZDEkRXRobmljaXR5KS9zdW0obnJvdyhkMSkpDQphNQ0KYGBgDQogVuG6rXkgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBuw6B5IGPDsyBgciB0YWJsZShkMSRFdGhuaWNpdHkpWzFdL3N1bShucm93KGQxKSkqMTAwYFwlIEFmcmljYW4gQW1lcmljYW4gdsOgICBgciB0YWJsZShkMSRFdGhuaWNpdHkpIFsyXS9zdW0obnJvdyhkMSkpKjEwMGBcJSBBc2lhbiwgYHIgdGFibGUoZDEkRXRobmljaXR5KSBbM10vc3VtKG5yb3coZDEpKSoxMDBgXCUgQ2F1Y2FzaWFuLiAgICAgDQogDQoqxJDhu5MgdGjhu4sgYmnhu4N1IGRp4buFbiB04bu3IGzhu4cgcGjhuqduIHRyxINtICB0w6xuaCB0cuG6oW5nIGTDom4gdOG7mWMgY+G7p2Ega2jDoWNoIGjDoG5nIHZheSB0w61uIGThu6VuZyB04burIG3hu5l0IG5nw6JuIGjDoG5nOiogICANCg0KYGBge3IsZWNobz1UUlVFfQ0KcGllKGE1LA0KICAgIGxhYmVscyA9IHBhc3RlKG5hbWVzKGE1KSwgcm91bmQoYTUsIDIpLCAiJSIpLA0KICAgIG1haW4gPSAiQmnhu4N1IMSR4buTIHRyw7JuOiBU4bu3IGzhu4cgRXRobmljaXR5IikgDQpgYGANCg0KKiBOaOG6rW4geMOpdCB24buBIGJp4bq/biBFdGhuaWNpdHkgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBDcmVkaXQ6ICAgIA0KDQogIEThu7FhIHRyw6puIGPDoWMga+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggYmnhur9uICJFdGhuaWNpdHkiIChEw6JuIHThu5ljKSB04burIGLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0LCB0YSBjw7MgdGjhu4Mgbmjhuq1uIHRo4bqleSByw7Ugc+G7sSBwaMOibiBi4buRIGtow7RuZyDEkeG7k25nIMSR4buBdSB24buBIGTDom4gdOG7mWMgdHJvbmcgc+G7kSBjw6FjIGtow6FjaCBow6BuZyB2YXkgdMOtbiBk4bulbmcuIEPhu6UgdGjhu4MsIG5ow7NtIENhdWNhc2lhbiBjaGnhur9tIHThu7cgbOG7hyDDoXAgxJHhuqNvIHbhu5tpIDQ5Ljc1JSAoZ+G6p24gbeG7mXQgbuG7rWEpLCB0cm9uZyBraGkgbmjDs20gQXNpYW4gY2hp4bq/bSAyNS41JSB2w6AgQWZyaWNhbiBBbWVyaWNhbiBjaGnhur9tIDI0Ljc1JS4gU+G7sSBjaMOqbmggbOG7h2NoIMSRw6FuZyBr4buDIG7DoHkgY8OzIHRo4buDIGNobyB0aOG6pXkgbeG7mXQgeHUgaMaw4bubbmcgdGnhu4FtIOG6qW4gdHJvbmcgdmnhu4djIGPhuqVwIHTDrW4gZOG7pW5nLCBuxqFpIG3DoCBjw6FjIHThu5UgY2jhu6ljIHTDoGkgY2jDrW5oIGPDsyB0aOG7gyBjw7Mgbmhp4buBdSBraMOhY2ggaMOgbmcgdGh14buZYyBuaMOzbSBDYXVjYXNpYW4gaMahbiwgaG/hurdjIGPDoWMgY2jDrW5oIHPDoWNoL3Rpw6p1IGNow60geMOpdCBkdXnhu4d0IGPDsyB0aOG7gyB2w7QgdMOsbmggZOG6q24gxJHhur9uIHPhu7EgcGjDom4gYuG7lSBkw6JuIHThu5ljIG5oxrAgduG6rXkuICAgICANCiAgDQojICoqxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHbDoCBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cqKiAgIA0KDQojIyAqKkJp4bq/biBHZW5kZXIqKiAgIA0KDQogICAqKljDoWMgxJHhu4tuaCBo4bqhbmcgbeG7pWMgcXVhbiB0w6JtKio6IG5ow7NtIG5nxrDhu51pIGPDsyBnaeG7m2kgdMOtbmggbuG7ryAoRmVtYWxlKSB0cm9uZyBiaeG6v24gR2VuZGVyLiAgICAgDQogICANCiAgICoqxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSoqOiDGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHIG5nxrDhu51pIGPDsyBnaeG7m2kgdMOtbmggbuG7ryB0cm9uZyB04buVbmcgdGjhu4MgduG7m2kgxJHhu5kgdGluIGPhuq15IDk1JS4gICANCiAgIA0KYGBge3IsZWNobz1UUlVFfQ0KI3Phu5EgbMaw4bujbmcgcXVhbiBzw6F0IGPhu6dhIGjhuqFuZyBt4bulYyBGZW1hbGUNCmIxIDwtIHN1bShkMSRHZW5kZXIgPT0gIkYiKQ0KI1Thu5VuZyBz4buRIHF1YW4gc8OhdCANCnRvdGFsIDwtIG5yb3coZDEpIA0KIyDGsOG7m2MgbMaw4bujbmcNCnByb3AudGVzdChiMSwgdG90YWwsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQogICAgROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIDEgbeG6q3UgduG7m2kgaGnhu4d1IGNo4buJbmggbGnDqm4gdOG7pWMsIHRhIGPDsyB0aOG7gyBuaOG6rW4gdGjhuqV5IHLhurFuZyB04bu3IGzhu4cgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBu4buvIHRyb25nIHThu5VuZyB0aOG7gyBy4bqldCB0aOG6pXAsIHbhu5tpIMaw4bubYyB0w61uaCB04bu3IGzhu4cgbeG6q3UgKHApIGLhurFuZyAwLiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgdGjhu7FjIGPhu6dhIG7hu68gZ2nhu5tpIGzDoCB04burIDAuMDAwMDAwIMSR4bq/biAwLjAxMTg1OC4gR2nDoSB0cuG7iyBwLXZhbHVlIG5o4buPIGjGoW4gMi4yZS0xNiBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHNvIHbhu5tpIGdp4bqjIHRodXnhur90IGtow7RuZyAodOG7tyBs4buHIGLhurFuZyAwLjUpLCBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSR4buDIGvhur90IGx14bqtbiBy4bqxbmcgdOG7tyBs4buHIG7hu68gbMOgIDAuNSB2w6Aga2jhurNuZyDEkeG7i25oIHThu7cgbOG7hyBu4buvIHRo4buxYyBz4buxIGtow6FjIDAuNSwgY+G7pSB0aOG7gyBsw6AgZ+G6p24gYuG6sW5nIDAuICAgDQoNCiAgKipLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cqKg0KICANCiAgxJDhurd0IGdp4bqjIHRodXnhur90OiAgIA0KICANCiAgICQkDQpcYmVnaW57Y2FzZXN9IA0KSF8wOiBcdGV4dHtU4bu3IGzhu4cgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBu4buvIHRyb25nIHThu5VuZyB0aOG7gyBsw6AgNDAlLn0gXFwNCkhfMTogXHRleHR7VOG7tyBs4buHIG5nxrDhu51pIGPDsyAgZ2nhu5tpIHTDrW5oIG7hu68gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCBraMOhYyA0MCUufQ0KXGVuZHtjYXNlc30NCiAgJCQNCmBgYHtyLGVjaG89VFJVRX0NCiNLaeG7g20gxJHhu4tuaCBoYWkgcGjDrWENCnByb3AudGVzdChiMSwgdG90YWwsIHA9MC40LCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQ0KYGBgDQoNCkThu7FhIHRyw6puIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBoYWkgcGjDrWEsIHbhu5tpIGdp4bqjIHRodXnhur90ICRIXzAkIGzDoCB04bu3IGzhu4cgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBu4buvIHRyb25nIHThu5VuZyB0aOG7gyBsw6AgNDAlIChwPTAuNCkgdsOgIGdp4bqjIHRodXnhur90ICRIXzEkIGzDoCB04bu3IGzhu4cgbsOgeSBraMOhYyA0MCUsIHRhIGPDsyBjw6FjIGvhur90IHF14bqjIHNhdTogICANCg0KKiAqKkdpw6EgdHLhu4sgcC12YWx1ZSoqIHLhuqV0IG5o4buPIChgPDIuMmUtMTZgKSwgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbeG7qWMgw70gbmdoxKlhIHRow7RuZyB0aMaw4budbmcgKHbDrSBk4bulOiAwLjA1KS4gxJBp4buBdSBuw6B5IGN1bmcgY+G6pXAgYuG6sW5nIGNo4bupbmcgbeG6oW5oIG3hur0gxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkLiAgIA0KDQoqICoqVOG7tyBs4buHIG3huqt1IMaw4bubYyB0w61uaCoqIChwKSBsw6AgMCwgY2hvIHRo4bqleSB0cm9uZyBt4bqrdSBraOG6o28gc8OhdCBraMO0bmcgY8OzIG5nxrDhu51pIG1hbmcgZ2nhu5tpIHTDrW5oIG7hu68gbsOgby4gICAgDQoNCiogKipLaG/huqNuZyB0aW4gY+G6rXkgOTUlKiogY2hvIHThu7cgbOG7hyB0aOG7sWMgY+G7p2EgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBu4buvIGzDoCB04burIDAuMDAwMDAwIMSR4bq/biAwLjAxMTg1OC4gS2hv4bqjbmcgbsOgeSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMC40ICh04bupYyA0MCUpLCBjw6BuZyBraOG6s25nIMSR4buLbmggdmnhu4djIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJC4gICANCg0KVMOzbSBs4bqhaSwgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSR4buDIGvhur90IGx14bqtbiBy4bqxbmcgdOG7tyBs4buHIG5nxrDhu51pIGPDsyBnaeG7m2kgdMOtbmggbuG7ryB0cm9uZyB04buVbmcgdGjhu4Mga2jDoWMgNDAlLCB2w6AgdGjhu7FjIHThur8gdOG7tyBs4buHIG7DoHkgcuG6pXQgdGjhuqVwLCBn4bqnbiBuaMawIGLhurFuZyAwLiAgICANCg0KIyMgKipCaeG6v24gU3R1ZGVudCoqICAgDQoNCiAgICoqWMOhYyDEkeG7i25oIGjhuqFuZyBt4bulYyBxdWFuIHTDom0qKjogbmjDs20gbmfGsOG7nWkgbMOgIHNpbmggdmnDqm4gKFllcykgdHJvbmcgYmnhur9uIFN0dWRlbnQuICAgICANCiAgIA0KICAgKirGr+G7m2MgbMaw4bujbmcga2hv4bqjbmcgdGluIGPhuq15Kio6IMaw4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgbmfGsOG7nWkgbMOgIHNpbmggdmnDqm4gdHJvbmcgdOG7lW5nIHRo4buDIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUuICAgDQogICANCmBgYHtyLGVjaG89VFJVRX0NCiNz4buRIGzGsOG7o25nIHF1YW4gc8OhdCBj4bunYSBo4bqhbmcgbeG7pWMgWWVzDQpiMiA8LSBzdW0oZDEkU3R1ZGVudCA9PSAnWWVzJykNCg0KIyDGsOG7m2MgbMaw4bujbmcNCnByb3AudGVzdChiMiwgdG90YWwsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQogICAgROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIDEgbeG6q3UgduG7m2kgaGnhu4d1IGNo4buJbmggbGnDqm4gdOG7pWMgY2hvIGJp4bq/biAiU3R1ZGVudCIsIHThu7cgbOG7hyBuZ8aw4budaSBsw6Agc2luaCB2acOqbiB0cm9uZyBt4bqrdSDEkcaw4bujYyDGsOG7m2MgdMOtbmggbMOgIDEwJS4gVuG7m2kgxJHhu5kgdGluIGPhuq15IDk1JSwga2hv4bqjbmcgdGluIGPhuq15IGNobyB04bu3IGzhu4cgdGjhu7FjIGPhu6dhIHNpbmggdmnDqm4gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCB04burIDcuMzIlIMSR4bq/biAxMy40NyUuIEdpw6EgdHLhu4sgcC12YWx1ZSBuaOG7jyBoxqFuIDIuMmUtMTYgY3VuZyBj4bqlcCBi4bqxbmcgY2jhu6luZyBt4bqhbmggbeG6vSDEkeG7gyBr4bq/dCBsdeG6rW4gcuG6sW5nIHThu7cgbOG7hyBuZ8aw4budaSBsw6Agc2luaCB2acOqbiB0cm9uZyB04buVbmcgdGjhu4Mga2jDoWMgNTAlIHbDoCB0aOG7sWMgdOG6vyB04bu3IGzhu4cgbsOgeSB0aOG6pXAgaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSA1MCUuICAgICAgDQoNCiAgKipLaeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cqKg0KICANCiAgxJDhurd0IGdp4bqjIHRodXnhur90OiAgIA0KICANCiAgICQkDQpcYmVnaW57Y2FzZXN9IA0KSF8wOiBcdGV4dHtU4bu3IGzhu4cgbmfGsOG7nWkgbMOgIHNpbmggdmnDqm4gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCA1JS59IFxcDQpIXzE6IFx0ZXh0e1Thu7cgbOG7hyBuZ8aw4budaSBsw6Agc2luaCB2acOqbiB0cm9uZyB04buVbmcgdGjhu4MgbMOgIGtow6FjIDUlLn0NClxlbmR7Y2FzZXN9DQogICQkDQpgYGB7cixlY2hvPVRSVUV9DQojS2nhu4NtIMSR4buLbmggaGFpIHBow61hDQpwcm9wLnRlc3QoYjIsIHRvdGFsLCBwPTAuMDUsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpDQpgYGANCg0KICAgIEThu7FhIHRyw6puIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBoYWkgcGjDrWEgY2hvIGJp4bq/biAiU3R1ZGVudCIsIHbhu5tpIGdp4bqjIHRodXnhur90ICRIXzAkIGzDoCB04bu3IGzhu4cgbmfGsOG7nWkgbMOgIHNpbmggdmnDqm4gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCA1JSAocD0wLjA1KSB2w6AgZ2nhuqMgdGh1eeG6v3QgJEhfMSQgbMOgIHThu7cgbOG7hyBuw6B5IGtow6FjIDUlLCB0YSBjw7MgZ2nDoSB0cuG7iyBwLXZhbHVlIGzDoCBgNy42OTFlLTA2YC4gR2nDoSB0cuG7iyBwLXZhbHVlIG7DoHkgcuG6pXQgbmjhu48gKG5o4buPIGjGoW4gMC4wNSksIGN1bmcgY+G6pXAgYuG6sW5nIGNo4bupbmcgbeG6oW5oIG3hur0gxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB04bu3IGzhu4cgbmfGsOG7nWkgbMOgIHNpbmggdmnDqm4gdHJvbmcgdOG7lW5nIHRo4buDIGtow7RuZyBwaOG6o2kgbMOgIDUlLiDGr+G7m2MgdMOtbmggKip04bu3IGzhu4cgbeG6q3UqKiBsw6AgMC4xICh04bupYyAxMCUpLCB2w6AgKipraG/huqNuZyB0aW4gY+G6rXkgOTUlKiogbMOgIHThu6sgMC4wNzMyMjE1IMSR4bq/biAwLjEzNDcwNzcsIGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAwLjA1LiDEkGnhu4F1IG7DoHkgY+G7p25nIGPhu5Ega+G6v3QgbHXhuq1uIHLhurFuZyB04bu3IGzhu4cgc2luaCB2acOqbiB0aOG7sWMgdOG6vyBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSA1JS4gICANCg0KIyMgKipCaeG6v24gTWFycmllZCoqICAgDQoNCiAgICoqWMOhYyDEkeG7i25oIGjhuqFuZyBt4bulYyBxdWFuIHTDom0qKjogbmjDs20gbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIChZZXMpIHRyb25nIGJp4bq/biBNYXJyaWVkLiAgICAgDQogICANCiAgICoqxq/hu5tjIGzGsOG7o25nIGtob+G6o25nIHRpbiBj4bqteSoqOiDGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biB0cm9uZyB04buVbmcgdGjhu4MgduG7m2kgxJHhu5kgdGluIGPhuq15IDk1JS4gICANCiAgIA0KYGBge3IsZWNobz1UUlVFfQ0KI3Phu5EgbMaw4bujbmcgcXVhbiBzw6F0IGPhu6dhIGjhuqFuZyBt4bulYyBZZXMNCmIzIDwtIHN1bShkMSRNYXJyaWVkID09ICdZZXMnKQ0KDQojIMaw4bubYyBsxrDhu6NuZw0KcHJvcC50ZXN0KGIzLCB0b3RhbCwgY29uZi5sZXZlbCA9IDAuOTUpDQpgYGANCiAgICBE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCB04bu3IGzhu4cgMSBt4bqrdSB24bubaSBoaeG7h3UgY2jhu4luaCBsacOqbiB04bulYyBjaG8gYmnhur9uICJNYXJyaWVkIiwgdGEgxJHDoyDGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biAoWWVzKSB0cm9uZyB04buVbmcgdGjhu4MgduG7m2kgxJHhu5kgdGluIGPhuq15IDk1JS4gVOG7tyBs4buHIG3huqt1IMaw4bubYyB0w61uaCAocCkgbMOgIDAuNjEyNSwgdOG7qWMgbMOgIDYxLjI1JSBz4buRIG5nxrDhu51pIHRyb25nIG3huqt1IMSRw6Mga+G6v3QgaMO0bi4gS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gdOG7tyBs4buHIHRo4buxYyBj4bunYSBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCB04burIDAuNTYyNjM2OSAoa2hv4bqjbmcgNTYuMjYlKSDEkeG6v24gMC42NjAxNjcxIChraG/huqNuZyA2Ni4wMiUpLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjaMO6bmcgdGEgdOG7sSB0aW4gOTUlIHLhurFuZyB04bu3IGzhu4cgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIHRyb25nIHThu5VuZyB0aOG7gyBu4bqxbSB0cm9uZyBraG/huqNuZyBuw6B5LiBHacOhIHRy4buLIHAtdmFsdWUgbMOgIDguNTg3ZS0wNiwgcuG6pXQgbmjhu48gKG5o4buPIGjGoW4gMC4wNSksIGN1bmcgY+G6pXAgYuG6sW5nIGNo4bupbmcgbeG6oW5oIG3hur0gxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyAobnVsbCBwcm9iYWJpbGl0eSAwLjUpLCB04bupYyBsw6AgdOG7tyBs4buHIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biB0cm9uZyB04buVbmcgdGjhu4Mga2jDoWMgMC41LiBL4bq/dCBxdeG6oyBuw6B5IG5o4bqldCBxdcOhbiB24bubaSDGsOG7m2MgdMOtbmggdOG7tyBs4buHIG3huqt1LCBjaG8gdGjhuqV5IHThu7cgbOG7hyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gdGjhu7FjIHPhu7EgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgNTAlLiAgICAgICAgIA0KDQogICoqS2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgdOG7tyBs4buHKioNCiAgDQogIMSQ4bq3dCBnaeG6oyB0aHV54bq/dDogICANCiAgDQogICAkJA0KXGJlZ2lue2Nhc2VzfSANCkhfMDogXHRleHR7VOG7tyBs4buHIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biB0cm9uZyB04buVbmcgdGjhu4MgbMOgIDgwJS59IFxcDQpIXzE6IFx0ZXh0e1Thu7cgbOG7hyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gdHJvbmcgdOG7lW5nIHRo4buDIGzDoCBraMOhYyA4MCUufQ0KXGVuZHtjYXNlc30NCiAgJCQNCmBgYHtyLGVjaG89VFJVRX0NCiNLaeG7g20gxJHhu4tuaCBoYWkgcGjDrWENCnByb3AudGVzdChiMywgdG90YWwsIHA9MC44LCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQ0KYGBgDQoNCiAgICBE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cgaGFpIHBow61hIGNobyBiaeG6v24gIk1hcnJpZWQiLCB24bubaSBnaeG6oyB0aHV54bq/dCAkSF8wJCBsw6AgdOG7tyBs4buHIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biB0cm9uZyB04buVbmcgdGjhu4MgbMOgIDgwJSAocD0wLjgpIHbDoCBnaeG6oyB0aHV54bq/dCAkSF8xJCBsw6AgdOG7tyBs4buHIG7DoHkga2jDoWMgODAlLCB0YSBjw7MgZ2nDoSB0cuG7iyBwLXZhbHVlIG5o4buPIGjGoW4gYDIuMmUtMTZgLiBHacOhIHRy4buLIHAtdmFsdWUgbsOgeSBj4buxYyBr4buzIG5o4buPLCBjdW5nIGPhuqVwIGLhurFuZyBjaOG7qW5nIG3huqFuaCBt4bq9IMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJC4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgdOG7tyBs4buHIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biB0cm9uZyB04buVbmcgdGjhu4Mga2jDtG5nIHBo4bqjaSBsw6AgODAlLiAqKsav4bubYyB0w61uaCB04bu3IGzhu4cgbeG6q3UqKiBsw6AgMC42MTI1ICh04bupYyA2MS4yNSUpLCB2w6AgKipraG/huqNuZyB0aW4gY+G6rXkgOTUlKiogbMOgIHThu6sgMC41NjI2MzY5IMSR4bq/biAwLjY2MDE2NzEsIGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAwLjguIMSQaeG7gXUgbsOgeSBj4bunbmcgY+G7kSBr4bq/dCBsdeG6rW4gcuG6sW5nIHThu7cgbOG7hyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gdGjhu7FjIHThur8gdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgODAlLiAgICAgIA0KDQojIyAqKkJp4bq/biBFdGhuaWNpdHkqKiAgIA0KDQogICAqKljDoWMgxJHhu4tuaCBo4bqhbmcgbeG7pWMgcXVhbiB0w6JtKio6IG5ow7NtIG5nxrDhu51pIMSR4bq/biB04burIEFzaWFuIHRyb25nIGJp4bq/biBFdGhuaWNpdHkuICAgICANCiAgIA0KICAgKirGr+G7m2MgbMaw4bujbmcga2hv4bqjbmcgdGluIGPhuq15Kio6IMaw4bubYyBsxrDhu6NuZyB04bu3IGzhu4cgbmfGsOG7nWkgxJHhur9uIHThu6sgQXNpYW4gdHJvbmcgdOG7lW5nIHRo4buDIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUuICAgDQogICANCmBgYHtyLGVjaG89VFJVRX0NCiNz4buRIGzGsOG7o25nIHF1YW4gc8OhdCBj4bunYSBo4bqhbmcgbeG7pWMgQXNpYW4NCmI0IDwtIHN1bShkMSRFdGhuaWNpdHkgPT0gJ0FzaWFuJykNCg0KIyDGsOG7m2MgbMaw4bujbmcNCnByb3AudGVzdChiNCwgdG90YWwsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQogICAgROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIDEgbeG6q3UgduG7m2kgaGnhu4d1IGNo4buJbmggbGnDqm4gdOG7pWMgY2hvIGJp4bq/biAiRXRobmljaXR5IiwgdOG7tyBs4buHIG5nxrDhu51pIMSR4bq/biB04burIEFzaWFuIHRyb25nIG3huqt1IMSRxrDhu6NjIMaw4bubYyB0w61uaCBsw6AgMC4yNTUgKHThu6ljIDI1LjUlKS4gVuG7m2kgxJHhu5kgdGluIGPhuq15IDk1JSwga2hv4bqjbmcgdGluIGPhuq15IGNobyB04bu3IGzhu4cgdGjhu7FjIGPhu6dhIG5nxrDhu51pIMSR4bq/biB04burIEFzaWFuIHRyb25nIHThu5VuZyB0aOG7gyBsw6AgdOG7qyAwLjIxMzU4NjYgKGtob+G6o25nIDIxLjM2JSkgxJHhur9uIDAuMzAxMjEwMCAoa2hv4bqjbmcgMzAuMTIlKS4gR2nDoSB0cuG7iyBwLXZhbHVlIG5o4buPIGjGoW4gMi4yZS0xNiBjdW5nIGPhuqVwIGLhurFuZyBjaOG7qW5nIG3huqFuaCBt4bq9IMSR4buDIGvhur90IGx14bqtbiBy4bqxbmcgdOG7tyBs4buHIG5nxrDhu51pIMSR4bq/biB04burIEFzaWFuIHRyb25nIHThu5VuZyB0aOG7gyBraMOhYyA1MCUgdsOgIHRo4buxYyB04bq/IHThu7cgbOG7hyBuw6B5IHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIDUwJS4gICAgICAgICAgICANCg0KICAqKktp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyoqDQogIA0KICDEkOG6t3QgZ2nhuqMgdGh1eeG6v3Q6ICAgDQogIA0KICAgJCQNClxiZWdpbntjYXNlc30gDQpIXzA6IFx0ZXh0e1Thu7cgbOG7hyBuZ8aw4budaSDEkeG6v24gdOG7qyBBc2lhbiB0cm9uZyB04buVbmcgdGjhu4MgbMOgIDMwJS59IFxcDQpIXzE6IFx0ZXh0e1Thu7cgbOG7hyBuZ8aw4budaSDEkeG6v24gdOG7qyBBc2lhbiB0cm9uZyB04buVbmcgdGjhu4MgbMOgIGtow6FjIDMwJS59DQpcZW5ke2Nhc2VzfQ0KICAkJA0KYGBge3IsZWNobz1UUlVFfQ0KI0tp4buDbSDEkeG7i25oIGhhaSBwaMOtYQ0KcHJvcC50ZXN0KGI0LCB0b3RhbCwgcD0wLjMsIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpDQpgYGANCg0KICAgIEThu7FhIHRyw6puIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBoYWkgcGjDrWEgY2hvIGJp4bq/biAiRXRobmljaXR5IiwgduG7m2kgZ2nhuqMgdGh1eeG6v3QgJEhfMCQgbMOgIHThu7cgbOG7hyBuZ8aw4budaSDEkeG6v24gdOG7qyBBc2lhbiB0cm9uZyB04buVbmcgdGjhu4MgbMOgIDMwJSAocD0wLjMpIHbDoCBnaeG6oyB0aHV54bq/dCAkSF8xJCBsw6AgdOG7tyBs4buHIG7DoHkga2jDoWMgMzAlLCB0YSBjw7MgKipnacOhIHRy4buLIHAtdmFsdWUqKiBsw6AgYDAuMDU2MjFgLiBN4bq3YyBkw7kgZ2nDoSB0cuG7iyBwLXZhbHVlIG7DoHkgZ+G6p24gduG7m2kgbeG7qWMgw70gbmdoxKlhIDAuMDUsIG5oxrBuZyBuw7MgbOG7m24gaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSAwLjA1LiBEbyDEkcOzLCBjaMO6bmcgdGEgKipraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIG3huqFuaCBt4bq9IMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJCoqIHThuqFpIG3hu6ljIMO9IG5naMSpYSAwLjA1LiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AsIGThu7FhIHRyw6puIGThu68gbGnhu4d1IGhp4buHbiBjw7MsIGNow7puZyB0YSBraMO0bmcgdGjhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyB04bu3IGzhu4cgbmfGsOG7nWkgxJHhur9uIHThu6sgQXNpYW4gdHJvbmcgdOG7lW5nIHRo4buDIGtow6FjIDMwJS4gKirGr+G7m2MgdMOtbmggdOG7tyBs4buHIG3huqt1KiogbMOgIDAuMjU1ICgyNS41JSksIHbDoCAqKmtob+G6o25nIHRpbiBj4bqteSA5NSUqKiBsw6AgdOG7qyAwLjIxMzU4NjYgxJHhur9uIDAuMzAxMjEwMCwgdHJvbmcgxJHDsyBnacOhIHRy4buLIDAuMyBu4bqxbSBuZ2F5IHPDoXQgZ2nhu5tpIGjhuqFuIHRyw6puIGPhu6dhIGtob+G6o25nIHRpbiBj4bqteS4gICANCiAgICANCiMgKipQaMOibiB0w61jaCBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGhhaSBiaeG6v24gxJHhu4tuaCB0w61uaCoqDQoNCiAqKkNo4buNbiByYSBoYWkgY+G6t3AgYmnhur9uOioqIEdlbmRlciB2w6AgTWFycmllZDsgU3R1ZGVudCB2w6AgRXRobmljaXR5LiAgIA0KIA0KIyMgKipCaeG6v24gR2VuZGVyIHbDoCBNYXJyaWVkKioNCg0KICAgxJDhu4MgxJHDoW5oIGdpw6EgbeG7kWkgcXVhbiBo4buHIGdp4buvYSBnaeG7m2kgdMOtbmggKEdlbmRlcikgdsOgIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiAoTWFycmllZCksIG3hu5l0IHnhur91IHThu5EgdGjGsOG7nW5nIMSRxrDhu6NjIHhlbSB4w6l0IGzDoCBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCB2w6Aga2jhuqMgbsSDbmcgdmF5IHTDrW4gZOG7pW5nIGhv4bq3YyB0w6xuaCBow6xuaCB0w6BpIGNow61uaCBjw6EgbmjDom4sIGNow7puZyB0YSBz4bq9IHRp4bq/biBow6BuaCBwaMOibiB0w61jaCBoYWkgYmnhur9uIG7DoHkgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBDcmVkaXQuICAgDQoNCiAgICAqKkLhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8gdsOgIHRy4buxYyBxdWFuIGThu68gbGnhu4d1KiogICAgICANCiAgICAqQuG6o25nIHThuqduIHPhu5EgY2jDqW8qICAgDQpgYGB7cixlY2hvPVRSVUV9DQprMSA8LSB0YWJsZShkMSRHZW5kZXIsZDEkTWFycmllZCkNCmFkZG1hcmdpbnMoazEpDQpgYGANCiAgICpC4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvIHRoZW8gdOG7tyBs4buHIGjDoG5nKiAgIA0KYGBge3IsZWNobz1UUlVFfQ0KcHJvcC50YWJsZShrMSxtYXJnaW49MSkNCmBgYA0KICAgKlRy4buxYyBxdWFuIGjDs2EqICAgDQpgYGB7cixlY2hvPVRSVUV9DQojIEhv4bq3YyBu4bq/dSBtdeG7kW4gaGnhu4NuIHRo4buLIHThu7cgbOG7hw0KZGZfazFfcHJvcCA8LSBhcy5kYXRhLmZyYW1lKHByb3AudGFibGUoazEsIG1hcmdpbiA9IDEpKQ0KY29sbmFtZXMoZGZfazFfcHJvcCkgPC0gYygiR2VuZGVyIiwgIk1hcnJpZWQiLCAiUHJvcG9ydGlvbiIpDQoNCmdncGxvdChkZl9rMV9wcm9wLCBhZXMoeCA9IEdlbmRlciwgeSA9IFByb3BvcnRpb24sIGZpbGwgPSBNYXJyaWVkKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnModGl0bGUgPSAiVOG7tyBs4buHIFTDrG5oIHRy4bqhbmcgSMO0biBuaMOibiB0aGVvIEdp4bubaSB0w61uaCIsDQogICAgICAgeCA9ICJHaeG7m2kgdMOtbmgiLA0KICAgICAgIHkgPSAiVOG7tyBs4buHIiwNCiAgICAgICBmaWxsID0gIkvhur90IGjDtG4iKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpDQpgYGANCg0KICAgUXVhbiBzw6F0IGJp4buDdSDEkeG7kyAiVOG7tyBs4buHIFTDrG5oIHRy4bqhbmcgSMO0biBuaMOibiB0aGVvIEdp4bubaSB0w61uaCIsIHRhIHRo4bqleSBjw7Mgc+G7sSBraMOhYyBiaeG7h3Qgbmjhu48gduG7gSB04bu3IGzhu4cgZ2nhu69hIG5hbSB2w6AgbuG7ryB0cm9uZyB0w6xuaCB0cuG6oW5nIGvhur90IGjDtG4uIEPhu6UgdGjhu4MsIHThu7cgbOG7hyBuYW0gZ2nhu5tpIMSRw6Mga+G6v3QgaMO0biAoWWVzKSBsw6Aga2hv4bqjbmcgNjAuNjIlLCB0cm9uZyBraGkgdOG7tyBs4buHIG7hu68gZ2nhu5tpIMSRw6Mga+G6v3QgaMO0biBsw6Aga2hv4bqjbmcgNjEuODQlLiBOZ8aw4bujYyBs4bqhaSwgdOG7tyBs4buHIG5hbSBnaeG7m2kgY2jGsGEga+G6v3QgaMO0biAoTm8pIGzDoCBraG/huqNuZyAzOS4zOCUsIGNhbyBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIHThu7cgbOG7hyBu4buvIGdp4bubaSBjaMawYSBr4bq/dCBow7RuIGzDoCAzOC4xNiUuIE3hurdjIGTDuSBjw7Mgc+G7sSBjaMOqbmggbOG7h2NoIG7DoHksIG5oxrBuZyBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgaGFpIGdp4bubaSB0w61uaCB24buBIHThu7cgbOG7hyBr4bq/dCBow7RuIGzDoCBraMO0bmcgcXXDoSBs4bubbiwgY2hvIHRo4bqleSB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gcGjDom4gYuG7lSBraMOhIMSR4buTbmcgxJHhu4F1IGdp4buvYSBuYW0gdsOgIG7hu68gdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UgbsOgeS4gICANCiAgIA0KICAgKktp4buDbSDEkeG7i25oIHRo4buRbmcga8OqIENoaS1iw6xuaCBwaMawxqFuZyogICANCiAgIA0KICAgxJDDoW5oIGdpw6EgeGVtIGhhaSBiaeG6v24gY8OzIMSR4buZYyBs4bqtcCB24bubaSBuaGF1IGhheSBraMO0bmcgYuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIENoaS1zcXVhcmUgdGVzdC4gICAgDQogICANCiAgIMSQ4bq3dCBnaeG6oyB0aHV54bq/dDogICANCiAgICQkDQpcYmVnaW57Y2FzZXN9IA0KSF8wOiBcdGV4dHtCaeG6v24gR2VuZGVyIHbDoCBNYXJyaWVkIGtow7RuZyBjw7MgbeG7kWkgcXVhbiBo4buHLn0gXFwNCkhfMTogXHRleHR7Qmnhur9uIEdlbmRlciB2w6AgTWFycmllZCBjw7MgbeG7kWkgcXVhbiBo4buHLn0NClxlbmR7Y2FzZXN9DQogICQkDQpgYGB7cixlY2hvPVRSVUV9DQpjaGlzcS50ZXN0KGsxKQ0KYGBgDQogICANCiAgIMSQ4buDIHBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgIkdlbmRlciIgdsOgICJNYXJyaWVkIiwgY2jDum5nIHRhIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyB24bubaSBnaeG6oyB0aHV54bq/dCAkSF8wJCBsw6AgaGFpIGJp4bq/biBuw6B5IMSR4buZYyBs4bqtcCB2w6AgJEhfMSQgbMOgIGNow7puZyBjw7MgbeG7kWkgcXVhbiBo4buHLiBL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBgY2hpc3EudGVzdChrMSlgIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyAkWF4yID0gMC4wMjE0MTUkIHbhu5tpICRkZj0xJCB2w6AgKipwLXZhbHVlIGzDoCAwLjg4MzcqKi4gVsOsICoqcC12YWx1ZSoqICgwLjg4MzcpIGzhu5tuIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbeG7qWMgw70gbmdoxKlhIHRow7RuZyB0aMaw4budbmcgKHbDrSBk4bulOiAwLjA1KSwgY2jDum5nIHRhICoqa2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfMCQqKi4gxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgICoqa2jDtG5nIGPDsyBt4buRaSBxdWFuIGjhu4cgdGjhu5FuZyBrw6ogY8OzIMO9IG5naMSpYSBnaeG7r2EgZ2nhu5tpIHTDrW5oIHbDoCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4qKiB0cm9uZyB04bqtcCBk4buvIGxp4buHdSBuw6B5OyBoYXkgbsOzaSBjw6FjaCBraMOhYywgdMOsbmggdHLhuqFuZyBr4bq/dCBow7RuIGtow7RuZyBwaOG7pSB0aHXhu5ljIHbDoG8gZ2nhu5tpIHTDrW5oLiAgIA0KICAgDQojIyAqKkJp4bq/biBTdHVkZW50IHbDoCBFdGhuaWNpdHkqKiAgIA0KDQogICDEkOG7gyDEkcOhbmggZ2nDoSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgbMOgIHNpbmggdmnDqm4gKFN0dWRlbnQpIHbDoCB54bq/dSB04buRIHPhuq9jIHThu5ljIChFdGhuaWNpdHkpLCBuaOG7r25nIGJp4bq/biBuw6B5IGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gY8OhYyDEkeG6t2MgxJFp4buDbSB0w6BpIGNow61uaCBob+G6t2Mga2jhuqMgbsSDbmcgdGnhur9wIGPhuq1uIHTDrW4gZOG7pW5nLCBjaMO6bmcgdGEgc+G6vSB0aeG6v24gaMOgbmggcGjDom4gdMOtY2ggaGFpIGJp4bq/biBuw6B5IHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0LiBWaeG7h2MgbsOgeSBz4bq9IGdpw7pwIGNow7puZyB0YSB4ZW0geMOpdCBsaeG7h3UgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHbhu4EgdMOsbmggdHLhuqFuZyBsw6Agc2luaCB2acOqbiBnaeG7r2EgY8OhYyBuaMOzbSBz4bqvYyB04buZYyBoYXkga2jDtG5nLCB04burIMSRw7MgY8OzIHRo4buDIHN1eSBsdeG6rW4gduG7gSBuaOG7r25nIHnhur91IHThu5EgdGnhu4FtIOG6qW4gbGnDqm4gcXVhbiDEkeG6v24gaMOgbmggdmkgdmF5IHTDrW4gZOG7pW5nIGPhu6dhIHThu6tuZyBuaMOzbS4gICANCiAgIA0KICAgKipC4bqjbmcgdOG6p24gc3XhuqV0IGNow6lvIHbDoCB0cuG7sWMgcXVhbiBk4buvIGxp4buHdSoqICAgICAgDQogICAgKkLhuqNuZyB04bqnbiBz4buRIGNow6lvKiAgIA0KYGBge3IsZWNobz1UUlVFfQ0KazIgPC0gdGFibGUoZDEkU3R1ZGVudCxkMSRFdGhuaWNpdHkpDQphZGRtYXJnaW5zKGsyKQ0KYGBgDQogICAqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aGVvIHThu7cgbOG7hyBow6BuZyogICANCmBgYHtyLGVjaG89VFJVRX0NCnByb3AudGFibGUoazIsbWFyZ2luPTEpDQpgYGANCiAgICpUcuG7sWMgcXVhbiBow7NhKiANCiAgIA0KYGBge3IsZWNobz1UUlVFfQ0KbGlicmFyeShyZXNoYXBlMikNCnByb3BfazIgPC0gcHJvcC50YWJsZShrMiwgbWFyZ2luPTEpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgY+G7mXQgY2jhu5NuZyAoc3RhY2tlZCBiYXJwbG90KQ0KZGZfcHJvcCA8LSBhcy5kYXRhLmZyYW1lKHByb3BfazIpDQpjb2xuYW1lcyhkZl9wcm9wKSA8LSBjKCJTdHVkZW50IiwgIkV0aG5pY2l0eSIsICJQcm9wb3J0aW9uIikNCg0KIyBLaeG7g20gdHJhIGxldmVscw0KbGV2ZWxzKGRmX3Byb3AkRXRobmljaXR5KQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHN0YWNrZWQgYmFycGxvdCB04bu3IGzhu4cNCmdncGxvdChkZl9wcm9wLCBhZXMoeD1TdHVkZW50LCB5PVByb3BvcnRpb24sIGZpbGw9RXRobmljaXR5KSkgKw0KICBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIsIHBvc2l0aW9uPSJkb2RnZSIpICsgICMgxJHhu5VpIHNhbmcgZG9kZ2UgxJHhu4MgY8OhYyBj4buZdCDEkeG7qW5nIGPhuqFuaA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzPXNjYWxlczo6cGVyY2VudCkgKw0KICBsYWJzKHRpdGxlPSJU4bu3IGzhu4cgRXRobmljaXR5IHRoZW8gU3R1ZGVudCIsDQogICAgICAgeD0iU3R1ZGVudCIsDQogICAgICAgeT0iVOG7tyBs4buHICglKSIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoInN0ZWVsYmx1ZSIsICJvcmFuZ2UiLCAic2VhZ3JlZW4iKSkgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQogICBRdWFuIHPDoXQgYmnhu4N1IMSR4buTICJU4bu3IGzhu4cgRXRobmljaXR5IHRoZW8gU3R1ZGVudCIgdsOgIGPDoWMgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gdMawxqFuZyDhu6luZywgdGEgdGjhuqV5IHLhurFuZyB0cm9uZyBuaMOzbSBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4gKE5vKSwgc+G6r2MgdOG7mWMgQ2F1Y2FzaWFuIGNoaeG6v20gdOG7tyBs4buHIMOhcCDEkeG6o28gKGtob+G6o25nIDUwLjU2JSksIHRyb25nIGtoaSBBZnJpY2FuIEFtZXJpY2FuIHbDoCBBc2lhbiBjw7MgdOG7tyBs4buHIHTGsMahbmcgxJHGsMahbmcgbmhhdSAoa2hv4bqjbmcgMjQuNzIlKS4gTmfGsOG7o2MgbOG6oWksIMSR4buRaSB24bubaSBuaMOzbSBzaW5oIHZpw6puIChZZXMpLCB04bu3IGzhu4cgbmfGsOG7nWkgQXNpYW4gdsOgIEFmcmljYW4gQW1lcmljYW4gdMSDbmcgbMOqbiDEkcOhbmcga+G7gyAoQXNpYW4ga2hv4bqjbmcgMzIuNSUsIEFmcmljYW4gQW1lcmljYW4ga2hv4bqjbmcgMjUlKSBzbyB24bubaSBuaMOzbSBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4sIHRyb25nIGtoaSB04bu3IGzhu4cgQ2F1Y2FzaWFuIGdp4bqjbSB4deG7kW5nIChraG/huqNuZyA0Mi41JSkuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG5ow7NtIHNpbmggdmnDqm4gY8OzIHPhu7EgcGjDom4gYuG7kSBz4bqvYyB04buZYyDEkWEgZOG6oW5nIGjGoW4gdsOgIHThu7cgbOG7hyBuZ8aw4budaSBBc2lhbiBjxaluZyBuaMawIEFmcmljYW4gQW1lcmljYW4gY2FvIGjGoW4gc28gduG7m2kgbmjDs20ga2jDtG5nIHBo4bqjaSBzaW5oIHZpw6puLiAgIA0KICAgDQogICAqS2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogQ2hpLWLDrG5oIHBoxrDGoW5nKiAgIA0KICAgDQogICDEkMOhbmggZ2nDoSB4ZW0gaGFpIGJp4bq/biBjw7MgxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUgaGF5IGtow7RuZyBi4bqxbmcgY8OhY2ggc+G7rSBk4bulbmcgQ2hpLXNxdWFyZSB0ZXN0LiAgICANCiAgIA0KICAgxJDhurd0IGdp4bqjIHRodXnhur90OiAgIA0KICAgJCQNClxiZWdpbntjYXNlc30gDQpIXzA6IFx0ZXh0e0Jp4bq/biBTdHVkZW50IHbDoCBFdGhuaWNpdHkga2jDtG5nIGPDsyBt4buRaSBxdWFuIGjhu4cufSBcXA0KSF8xOiBcdGV4dHtCaeG6v24gU3R1ZGVudCB2w6AgRXRobmljaXR5IGPDsyBt4buRaSBxdWFuIGjhu4cufQ0KXGVuZHtjYXNlc30NCiAgJCQNCmBgYHtyLGVjaG89VFJVRX0NCmNoaXNxLnRlc3QoazIpDQpgYGANCiAgIA0KICAgxJDhu4MgcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSAiU3R1ZGVudCIgdsOgICJFdGhuaWNpdHkiLCBjaMO6bmcgdGEgc+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpLWLDrG5oIHBoxrDGoW5nIHbhu5tpIGdp4bqjIHRodXnhur90ICRIXzAkIGzDoCBoYWkgYmnhur9uIG7DoHkgxJHhu5ljIGzhuq1wIHbDoCAkSF8xJCBsw6AgY2jDum5nIGPDsyBt4buRaSBxdWFuIGjhu4cuIEvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGBjaGlzcS50ZXN0KGsyKWAgY2hvIHRo4bqleSBnacOhIHRy4buLICRYXjIgPSAxLjMyNDckIHbhu5tpICRkZj0yJCB2w6AgKipwLXZhbHVlIGzDoCAwLjUxNTYqKi4gVsOsIHAtdmFsdWUgKDAuNTE1NikgbOG7m24gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBt4bupYyDDvSBuZ2jEqWEgdGjDtG5nIHRoxrDhu51uZyAodsOtIGThu6U6IDAuMDUpLCBjaMO6bmcgdGEga2jDtG5nIGPDsyDEkeG7pyBi4bqxbmcgY2jhu6luZyDEkeG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfMCQuIMSQaeG7gXUgbsOgeSBjw7MgbmdoxKlhIGzDoCBraMO0bmcgY8OzIG3hu5FpIHF1YW4gaOG7hyB0aOG7kW5nIGvDqiBjw7Mgw70gbmdoxKlhIGdp4buvYSB0w6xuaCB0cuG6oW5nIHNpbmggdmnDqm4gdsOgIHPhuq9jIHThu5ljIHRyb25nIHThuq1wIGThu68gbGnhu4d1IG7DoHk7IGhheSBuw7NpIGPDoWNoIGtow6FjLCB0w6xuaCB0cuG6oW5nIGzDoCBzaW5oIHZpw6puIGtow7RuZyBwaOG7pSB0aHXhu5ljIHbDoG8gc+G6r2MgdOG7mWMuICAgICAgDQogICANCiAgIA0KIyAqKlJpc2sgZGlmZmVyZW5jZSB2w6AgUmVsYXRpdmUgcmlzayoqICAgDQoNCiMjICoqQmnhur9uIEdlbmRlciB2w6AgTWFycmllZCoqICAgDQoNCiAgICoqVEgxOiBo4bqhbmcgbeG7pWMgRmVtYWxlIGzDoG0gdGhhbSBjaGnhur91KiogICANCmBgYHtyLGVjaG89VFJVRX0NCmUgPC0gcmlza3JhdGlvKGsxLHJldj0nYicpDQplDQpgYGANCiAqKk5o4bqtbiB4w6l0IGNoaSB0aeG6v3QgduG7gSBSaXNrIFJhdGlvIGPhu6dhIEJp4bq/biBHZW5kZXIgdsOgIE1hcnJpZWQgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBDcmVkaXQ6KiogICANCg0KICAgS+G6v3QgcXXhuqMgY+G7p2EgaMOgbSBgcmlza3JhdGlvKGsxLCByZXY9J3AnKWAgxJHDoyB0w61uaCB0b8OhbiB04bu3IGzhu4cgcuG7p2kgcm8gKHJpc2sgcmF0aW8pIGNobyBraOG6oyBuxINuZyBr4bq/dCBow7RuIChgTWFycmllZCA9IFllc2ApIGdp4buvYSBjw6FjIG5ow7NtIGdp4bubaSB0w61uaCwgduG7m2kgbmjDs20gIkZlbWFsZSIgKG7hu68gZ2nhu5tpKSDEkcaw4bujYyDEkeG6t3QgbMOgbSBo4bqhbmcgbeG7pWMgdGhhbSBjaGnhur91LiAgIA0KDQoqICoqRGF0YToqKiAgIA0KDQogICogQuG6o25nIERhdGEgaGnhu4NuIHRo4buLIGLhuqNuZyB04bqnbiBz4buRIGNow6lvIGPhu6dhIGBHZW5kZXJgIHbDoCBgTWFycmllZGAuIFRhIHRo4bqleSBjw7MgMTI4IG7hu68gZ2nhu5tpIMSRw6Mga+G6v3QgaMO0biB2w6AgNzkgbuG7ryBnaeG7m2kgY2jGsGEga+G6v3QgaMO0biAodOG7lW5nIGPhu5luZyAyMDcgbuG7rykuIFTGsMahbmcgdOG7sSwgY8OzIDExNyBuYW0gZ2nhu5tpIMSRw6Mga+G6v3QgaMO0biB2w6AgNzYgbmFtIGdp4bubaSBjaMawYSBr4bq/dCBow7RuICh04buVbmcgY+G7mW5nIDE5MyBuYW0pLiBU4buVbmcgc+G7kSBxdWFuIHPDoXQgbMOgIDQwMC4gxJDDonkgbMOgIGThu68gbGnhu4d1IGfhu5FjIG3DoCB04burIMSRw7MgYHJpc2tyYXRpb2AgxJHGsOG7o2MgdMOtbmggdG/DoW4uICAgIA0KICANCiogKipNZWFzdXJlIChSaXNrIFJhdGlvIHdpdGggOTUlIEMuSS4pOioqICAgDQoNCiAgKiAqKkVzdGltYXRlIChGZW1hbGUpOiAxLjAwMDAwKiogLSDEkMOieSBsw6AgZ2nDoSB0cuG7iyB0aGFtIGNoaeG6v3UgY2hvIG5ow7NtIG7hu68gZ2nhu5tpLiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIGvhur90IGjDtG4gY+G7p2EgbuG7ryBnaeG7m2kgxJHGsOG7o2MgbOG6pXkgbMOgbSBjxqEgc+G7nyDEkeG7gyBzbyBzw6FuaC4gICANCiAgDQogICogKipFc3RpbWF0ZSAoTWFsZSk6IDEuMDMxODEqKiAtIEdpw6EgdHLhu4sgbsOgeSBjaG8gYmnhur90IHThu7cgbOG7hyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4g4bufIG5hbSBnaeG7m2kgY2FvIGfhuqVwIDEuMDMxODEgbOG6p24gc28gduG7m2kgbuG7ryBnaeG7m2kuIE7Ds2kgY8OhY2gga2jDoWMsIG5hbSBnaeG7m2kgY8OzIGto4bqjIG7Eg25nIGvhur90IGjDtG4gY2FvIGjGoW4ga2hv4bqjbmcgMy4xOCUgc28gduG7m2kgbuG7ryBnaeG7m2kgdHJvbmcgbeG6q3UgbsOgeS4gVHJvbmcgYuG7kWkgY+G6o25oIHZheSB0w61uIGThu6VuZywgxJFp4buBdSBuw6B5IGPDsyB0aOG7gyBn4bujaSDDvSBy4bqxbmcgbmFtIGdp4bubaSBjw7MgdGjhu4MgY8OzIG3hu5l0IGNow7p0IGzhu6NpIHRo4bq/IGjGoW4gduG7gSB54bq/dSB04buRICLEkcOjIGvhur90IGjDtG4iIGtoaSDEkcOhbmggZ2nDoSBraOG6oyBuxINuZyB0w6BpIGNow61uaCwgbuG6v3UgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIMSRxrDhu6NjIGNvaSBsw6AgbeG7mXQgeeG6v3UgdOG7kSDhu5VuIMSR4buLbmggdMOgaSBjaMOtbmguICAgDQogIA0KICAqICoqTG93ZXIgKE1hbGUpOiAwLjgwNjQ3NzIqKiB2w6AgKipVcHBlciAoTWFsZSk6IDEuMzIwMSoqIC0gxJDDonkgbMOgIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBy4bunaSBybyBj4bunYSBuYW0gZ2nhu5tpIHNvIHbhu5tpIG7hu68gZ2nhu5tpLiBLaG/huqNuZyBuw6B5IGNobyBiaeG6v3QgcuG6sW5nIGNow7puZyB0YSB0aW4gdMaw4bufbmcgOTUlIHLhurFuZyB04bu3IGzhu4cga+G6v3QgaMO0biB0aOG7sWMgc+G7sSBj4bunYSBuYW0gZ2nhu5tpIHNvIHbhu5tpIG7hu68gZ2nhu5tpIHRyb25nIHThu5VuZyB0aOG7gyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDAuODA2NDc3MiDEkeG6v24gMS4zMjAxLiAgIA0KICANCiAgICAqICoqw50gbmdoxKlhIHRyb25nIGLhu5FpIGPhuqNuaCBDcmVkaXQ6KiogVsOsIGtob+G6o25nIHRpbiBj4bqteSBuw6B5IGJhbyBn4buTbSBnacOhIHRy4buLIDEgKHThu7cgbOG7hyBy4bunaSBybyBi4bqxbmcgMSBjw7MgbmdoxKlhIGzDoCBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgbmjDs20pLCBuw7MgY2jhu4kgcmEgcuG6sW5nIHPhu7Ega2jDoWMgYmnhu4d0IG5o4buPIHbhu4EgdOG7tyBs4buHIGvhur90IGjDtG4gbmFtIHbDoCBu4buvIHF1YW4gc8OhdCDEkcaw4bujYyB0cm9uZyBt4bqrdSAoMS4wMzE4MSkga2jDtG5nIMSR4bunIGzhu5tuIMSR4buDIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIMSR4buZIHRpbiBj4bqteSA5NSUuIMSQaeG7gXUgbsOgeSBow6BtIMO9IHLhurFuZywgdHJvbmcgYuG7mSBk4buvIGxp4buHdSB0w61uIGThu6VuZyBuw6B5LCBnaeG7m2kgdMOtbmgga2jDtG5nIHBo4bqjaSBsw6AgeeG6v3UgdOG7kSBk4buxIGLDoW8gxJHDoW5nIGvhu4MgY2hvIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibi4gRG8gxJHDsywgbuG6v3UgInTDrG5oIHRy4bqhbmcga+G6v3QgaMO0biIgbMOgIG3hu5l0IHnhur91IHThu5EgcXVhbiB0cuG7jW5nIHRyb25nIHZp4buHYyDEkcOhbmggZ2nDoSBraOG6oyBuxINuZyB2YXkgdMOtbiBk4bulbmcsIHRow6wgImdp4bubaSB0w61uaCIgZMaw4budbmcgbmjGsCBraMO0bmcgdOG6oW8gcmEgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgbsOgbyB0cm9uZyB2aeG7h2MgbeG7mXQgbmfGsOG7nWkgY8OzIGvhur90IGjDtG4gaGF5IGtow7RuZy4gICANCiAgICANCiogKipwLXZhbHVlICh0d28tc2lkZWQpOioqICAgDQoNCiAgKiBgbWlkcC5leGFjdCAoTWFsZSk6IDAuODA0MTk4NGAsIGBmaXNoZXIuZXhhY3QgKE1hbGUpOiAwLjgzNzU3OTNgLCBgY2hpLnNxdWFyZSAoTWFsZSk6IDAuODAzMzM0M2AgLSBDw6FjIGdpw6EgdHLhu4sgKnAqLXZhbHVlIG7DoHkgxJHhu4F1IHLhuqV0IGzhu5tuICjEkeG7gXUgbOG7m24gaMahbiAwLjA1KS4gxJDhurdjIGJp4buHdCwgZ2nDoSB0cuG7iyAqcCotdmFsdWUgdOG7qyBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlIGzDoCAwLjgwMzMzNDMsIHLhuqV0IGfhuqduIHbhu5tpICpwKi12YWx1ZSB04burIGBjaGlzcS50ZXN0KGsxKWAgKDAuODgzNykgbcOgIGLhuqFuIMSRw6MgY3VuZyBj4bqlcCB0csaw4bubYyDEkcOzLiAgIA0KICANCiAgKiAqKsOdIG5naMSpYSB0cm9uZyBi4buRaSBj4bqjbmggQ3JlZGl0OioqIE3hu5l0ICpwKi12YWx1ZSBjYW8gY2hvIHRo4bqleSBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJCBy4bqxbmcga2jDtG5nIGPDsyBt4buRaSBxdWFuIGjhu4cgZ2nhu69hICJHZW5kZXIiIHbDoCAiTWFycmllZCIuIEvhur90IGjhu6NwIHbhu5tpIGtob+G6o25nIHRpbiBj4bqteSBiYW8gZ+G7k20gMSwgY8OhYyAqcCotdmFsdWUgbsOgeSBj4bunbmcgY+G7kSBt4bqhbmggbeG6vSBr4bq/dCBsdeG6rW4gcuG6sW5nIHTDrG5oIHRy4bqhbmcga+G6v3QgaMO0biBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHbhu4EgbeG6t3QgdGjhu5FuZyBrw6ogZ2nhu69hIG5hbSB2w6AgbuG7ryB0cm9uZyBi4buZIGThu68gbGnhu4d1IENyZWRpdCBuw6B5LiBEbyDEkcOzLCBraGkgeGVtIHjDqXQgY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggdmF5IHTDrW4gZOG7pW5nLCB2aeG7h2MgcGjDom4gYmnhu4d0IGThu7FhIHRyw6puIGdp4bubaSB0w61uaCB0cm9uZyBt4buRaSBsacOqbiBo4buHIHbhu5tpIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiBsw6Aga2jDtG5nIGPhuqduIHRoaeG6v3QgdsOsIGNow7puZyBraMO0bmcgY8OzIG3hu5FpIHF1YW4gaOG7hyBwaOG7pSB0aHXhu5ljIHLDtSByw6BuZy4gICANCiAgDQogICoqVEgyOiBI4bqhbmcgbeG7pWMgTWFsZSBsw6BtIHRoYW0gY2hp4bq/dSoqICAgDQpgYGB7cixlY2hvPVRSVUV9DQplMSA8LSByaXNrcmF0aW8oazEpDQplMQ0KYGBgIA0KICoqTmjhuq1uIHjDqXQgduG7gSBSaXNrIFJhdGlvIGPhu6dhIEJp4bq/biBHZW5kZXIgdsOgIE1hcnJpZWQgKE1hbGUgbMOgbSB0aGFtIGNoaeG6v3UpKioNCg0KICAgS+G6v3QgcXXhuqMgY+G7p2EgYHJpc2tyYXRpb2AgY2hvIHRo4bqleSBraGkgIk1hbGUiIGzDoCBuaMOzbSB0aGFtIGNoaeG6v3UgKGVzdGltYXRlID0gMS4wMDAwMCksIHThu7cgbOG7hyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4g4bufIG7hu68gZ2nhu5tpIMSRxrDhu6NjIMaw4bubYyB0w61uaCBsw6AgKioxLjAyMDAyNiBs4bqnbioqIHNvIHbhu5tpIG5hbSBnaeG7m2kuIMSQaeG7gXUgbsOgeSBjw7MgbmdoxKlhIGzDoCBu4buvIGdp4bubaSBjw7MgdOG7tyBs4buHIGvhur90IGjDtG4gY2FvIGjGoW4ga2hv4bqjbmcgKioyLjAlKiogc28gduG7m2kgbmFtIGdp4bubaSB0cm9uZyBt4bqrdS5UdXkgbmhpw6puLCBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyB04bu3IGzhu4cgcuG7p2kgcm8gbsOgeSAoKiowLjg3MjU2MTggxJHhur9uIDEuMTkyNDExKiopIGJhbyBn4buTbSBnacOhIHRy4buLIDEuIEdpw6EgdHLhu4sgcC12YWx1ZSAodsOtIGThu6U6IGBjaGkuc3F1YXJlID0gMC44MDMzMzQzYCkgY8WpbmcgcuG6pXQgbOG7m24uQ8OhYyBjaOG7iSBz4buRIG7DoHkgY8O5bmcgbmhhdSBjaOG7iSByYSBy4bqxbmcgKipraMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSRw6FuZyBr4buDKiogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgduG7gSB04bu3IGzhu4cga+G6v3QgaMO0biBnaeG7r2EgbmFtIHbDoCBu4buvIHRyb25nIHThu5VuZyB0aOG7gy5Ucm9uZyBi4buRaSBj4bqjbmggdmF5IHTDrW4gZOG7pW5nLCDEkWnhu4F1IG7DoHkgaMOgbSDDvSBy4bqxbmcgKipnaeG7m2kgdMOtbmgga2jDtG5nIHBo4bqjaSBsw6AgeeG6v3UgdOG7kSBxdWFuIHRy4buNbmcgdHJvbmcgdmnhu4djIGThu7EgxJFvw6FuIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibioqLCB2w6AgZG8gxJHDsywga2jDtG5nIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIMSR4bq/biB2aeG7h2MgxJHDoW5oIGdpw6Ega2jhuqMgbsSDbmcgdmF5IHTDrW4gZOG7pW5nIGThu7FhIHRyw6puIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibi4gICAgIA0KICAgDQojIyAqKkJp4bq/biBTdHVkZW50IHbDoCBFdGhuaWNpdHkqKiAgIA0KDQogICAqKlRIMTogaOG6oW5nIG3hu6VjIFllcyAoc2luaCB2acOqbikgbMOgbSB0aGFtIGNoaeG6v3UqKiAgIA0KYGBge3IsZWNobz1UUlVFfQ0KZTIgPC0gcmlza3JhdGlvKGsyLHJldj0nYicpDQplMg0KYGBgDQogICAqKk5o4bqtbiB4w6l0IHbhu4EgUmlzayBSYXRpbyBj4bunYSBCaeG6v24gU3R1ZGVudCB2w6AgRXRobmljaXR5IChTaW5oIHZpw6puIGzDoG0gdGhhbSBjaGnhur91KSB0cm9uZyBi4buZIGThu68gbGnhu4d1IENyZWRpdDoqKiAgIA0KICAgDQogICBL4bq/dCBxdeG6oyBj4bunYSByaXNrcmF0aW8gY2hvIHRo4bqleSBraGkgIlllcyIgKHNpbmggdmnDqm4pIGzDoCBuaMOzbSB0aGFtIGNoaeG6v3UgKGVzdGltYXRlID0gMS4wMDAwMCksIHThu7cgbOG7hyBuZ8aw4budaSBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4gKE5vKSBzbyB24bubaSBuaMOzbSBzaW5oIHZpw6puIChZZXMpIMSRxrDhu6NjIMaw4bubYyB0w61uaCBsw6AgMC43NTc4NzY4IGzhuqduIGtoaSB4w6l0IMSR4bq/biBwaMOibiBi4buRIHPhuq9jIHThu5ljLiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIG5nxrDhu51pIGtow7RuZyBwaOG6o2kgc2luaCB2acOqbiB0aOG6pXAgaMahbiBraG/huqNuZyAyNC4yMSUgc28gduG7m2kgdOG7tyBs4buHIHNpbmggdmnDqm4sIG3hu5l0IHPhu7Ega2jDoWMgYmnhu4d0IGPDsyB0aOG7gyBjw7Mgw70gbmdoxKlhIMSR4buRaSB24bubaSBo4buTIHPGoSB2YXkgdMOtbiBk4bulbmcuIFR1eSBuaGnDqm4sIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBy4bunaSBybyBuw6B5IGzDoCB04burIDAuNDg2NTM1NyDEkeG6v24gMS4xODA1NDUuIFbDrCBraG/huqNuZyB0aW4gY+G6rXkgbsOgeSBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxLCB2w6AgZ2nDoSB0cuG7iyBwLXZhbHVlICh2w60gZOG7pTogY2hpLnNxdWFyZSA9IDAuNTE1NjMyMykgcuG6pXQgbOG7m24sIGNow7puZyB0YSBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSRw6FuZyBr4buDIMSR4buDIGvhur90IGx14bqtbiBy4bqxbmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgduG7gSB04bu3IGzhu4cgZ2nhu69hIG5nxrDhu51pIGzDoCBzaW5oIHZpw6puIHbDoCBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4gZOG7sWEgdHLDqm4gc+G6r2MgdOG7mWMgdHJvbmcgdOG7lW5nIHRo4buDLiBUcm9uZyBi4buRaSBj4bqjbmggYuG7mSBk4buvIGxp4buHdSBDcmVkaXQsIMSRaeG7gXUgbsOgeSBow6BtIMO9IHLhurFuZywgbeG6t2MgZMO5IGPDsyBuaOG7r25nIGtow6FjIGJp4buHdCB24buBIHBow6JuIGLhu5Egc+G6r2MgdOG7mWMgZ2nhu69hIHNpbmggdmnDqm4gdsOgIHBoaSBzaW5oIHZpw6puIHRyb25nIG3huqt1LCBuaMawbmcgc+G7sSBraMOhYyBiaeG7h3QgbsOgeSBraMO0bmcgxJHhu6cgbeG6oW5oIMSR4buDIGto4bqzbmcgxJHhu4tuaCBt4buZdCBt4buRaSBxdWFuIGjhu4cgdGjhu5FuZyBrw6ogxJHDoW5nIGvhu4MgZ2nhu69hIHTDrG5oIHRy4bqhbmcgc2luaCB2acOqbiB2w6Agc+G6r2MgdOG7mWMsIHThu6sgxJHDsyBraMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIHLDtSByw6BuZyBjaG8gdGjhuqV5IG3hu5l0IHRyb25nIGhhaSBiaeG6v24gbsOgeSAodMOsbmggdHLhuqFuZyBzaW5oIHZpw6puIGhv4bq3YyBz4bqvYyB04buZYykgY8OzIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buZYyBs4bqtcCDEkeG7gyBk4buxIMSRb8OhbiBraOG6oyBuxINuZyB2YXkgdMOtbiBk4bulbmcgY+G7p2EgbmfGsOG7nWkgY8OybiBs4bqhaS4gICAgDQogICANCiAgICoqVEgyOiBo4bqhbmcgbeG7pWMgTm8gKGtow7RuZyBwaOG6o2kgc2luaCB2acOqbikgbMOgbSB0aGFtIGNoaeG6v3UqKiAgIA0KYGBge3IsZWNobz1UUlVFfQ0KZTMgPC0gcmlza3JhdGlvKGsyKQ0KZTMNCmBgYA0KICAgKipOaOG6rW4geMOpdCB24buBIFJpc2sgUmF0aW8gY+G7p2EgQmnhur9uIFN0dWRlbnQgdsOgIEV0aG5pY2l0eSAoa2jDtG5nIHBo4bqjaSBzaW5oIHZpw6puIGzDoG0gdGhhbSBjaGnhur91KSB0cm9uZyBi4buZIGThu68gbGnhu4d1IENyZWRpdDoqKiAgIA0KICAgDQogICDEkOG7gyDEkcOhbmggZ2nDoSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hICJTdHVkZW50IiB2w6AgIkV0aG5pY2l0eSIsIGNow7puZyB0YSDEkcOjIHRp4bq/biBow6BuaCBwaMOibiB0w61jaCB04bu3IGzhu4cgcuG7p2kgcm8gKHJpc2sgcmF0aW8pIHbhu5tpIGjhuqFuZyBt4bulYyAiTm8iIChraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4pIGzDoG0gdGhhbSBjaGnhur91LiBU4bu3IGzhu4cgbmfGsOG7nWkgbMOgIHNpbmggdmnDqm4gKFllcykgc28gduG7m2kgbmjDs20ga2jDtG5nIHBo4bqjaSBzaW5oIHZpw6puIChObykgxJHGsOG7o2MgxrDhu5tjIHTDrW5oIGzDoCAxLjEzMDQzNSBs4bqnbi4gxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgIHThu7cgbOG7hyBzaW5oIHZpw6puIGNhbyBoxqFuIGtob+G6o25nIDEzLjA0JSBzbyB24bubaSBuaMOzbSBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4ga2hpIHjDqXQgxJHhur9uIHBow6JuIGLhu5Egc+G6r2MgdOG7mWMuIFR1eSBuaGnDqm4sIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIHThu7cgbOG7hyBy4bunaSBybyBuw6B5IGzDoCB04burIDAuNzY3MzgxNiDEkeG6v24gMS42NjUyNTEuIFbDrCBraG/huqNuZyB0aW4gY+G6rXkgbsOgeSBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxLCB2w6AgZ2nDoSB0cuG7iyBwLXZhbHVlICh2w60gZOG7pTogY2hpLnNxdWFyZSA9IDAuNTE1NjMyMykgcuG6pXQgbOG7m24sIGNow7puZyB0YSBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSRw6FuZyBr4buDIMSR4buDIGvhur90IGx14bqtbiBy4bqxbmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgduG7gSB04bu3IGzhu4cgZ2nhu69hIG5nxrDhu51pIGzDoCBzaW5oIHZpw6puIHbDoCBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4gZOG7sWEgdHLDqm4gc+G6r2MgdOG7mWMgdHJvbmcgdOG7lW5nIHRo4buDLiBUcm9uZyBi4buRaSBj4bqjbmggYuG7mSBk4buvIGxp4buHdSBDcmVkaXQsIMSRaeG7gXUgbsOgeSBow6BtIMO9IHLhurFuZywgbeG6t2MgZMO5IGPDsyB24bq7IG5oxrAgc2luaCB2acOqbiBjw7MgdOG7tyBs4buHIHBow6JuIGLhu5Egc+G6r2MgdOG7mWMgbmjhu4luaCBoxqFuIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBwaOG6o2kgc2luaCB2acOqbiB0cm9uZyBt4bqrdSwgbmjGsG5nIHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkga2jDtG5nIMSR4bunIG3huqFuaCDEkeG7gyBraOG6s25nIMSR4buLbmggbeG7mXQgbeG7kWkgcXVhbiBo4buHIHRo4buRbmcga8OqIMSRw6FuZyBr4buDIGdp4buvYSB0w6xuaCB0cuG6oW5nIHNpbmggdmnDqm4gdsOgIHPhuq9jIHThu5ljLCB04burIMSRw7Mga2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyByw7UgcsOgbmcgY2hvIHRo4bqleSBt4buZdCB0cm9uZyBoYWkgYmnhur9uIG7DoHkgY8OzIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buZYyBs4bqtcCDEkeG7gyBk4buxIMSRb8OhbiBraOG6oyBuxINuZyB2YXkgdMOtbiBk4bulbmcgY+G7p2EgbmfGsOG7nWkgY8OybiBs4bqhaS4gICAgDQogICANCiMgKipPZGQgcmF0aW8qKiAgIA0KDQogICBDaMO6bmcgdGEgc+G6vSBz4butIGThu6VuZyBvZGRzIHJhdGlvIMSR4buDIHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGhhaSBiaeG6v24gxJHhu4tuaCB0w61uaCBuaOG6sW0geMOhYyDEkeG7i25oIHhlbSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgbsOgbyBnaeG7r2EgY8OhYyBuaMOzbSDEkcaw4bujYyBzbyBzw6FuaCBoYXkga2jDtG5nLiAgIA0KICAgDQojIyAqKkJp4bq/biBHZW5kZXIgdsOgIE1hcnJpZWQqKiAgIA0KDQpgYGB7cixlY2hvPVRSVUV9DQpvIDwtIG9kZHNyYXRpbyhrMSkNCm8NCmBgYA0KICAqKk5o4bqtbiB4w6l0IHbhu4EgT2RkcyBSYXRpbyBj4bunYSBCaeG6v24gR2VuZGVyIHbDoCBNYXJyaWVkIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0OioqICAgDQoNCiAgIENow7puZyB0YSBz4butIGThu6VuZyBPZGRzIFJhdGlvIMSR4buDIHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGdp4bubaSB0w61uaCAoYEdlbmRlcmApIHbDoCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gKGBNYXJyaWVkYCksIG5o4bqxbSB4w6FjIMSR4buLbmggeGVtIGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyBuw6BvIGdp4buvYSBjw6FjIG5ow7NtIMSRxrDhu6NjIHNvIHPDoW5oIGhheSBraMO0bmcsIMSR4bq3YyBiaeG7h3QgdHJvbmcgYuG7kWkgY+G6o25oIGPDoWMgeeG6v3UgdOG7kSBuw6B5IGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24ga2jhuqMgbsSDbmcgdmF5IHTDrW4gZOG7pW5nLiBL4bq/dCBxdeG6oyBgb2Rkc3JhdGlvKGsxKWAgaGnhu4NuIHRo4buLIGtoaSAiTWFsZSIgKG5hbSBnaeG7m2kpIGzDoCBo4bqhbmcgbeG7pWMgdGhhbSBjaGnhur91LiAgIA0KDQoqICoqRGF0YToqKiBC4bqjbmcgRGF0YSB0csOsbmggYsOgeSBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgYEdlbmRlcmAgdsOgIGBNYXJyaWVkYC4gQ8OzIDExNyBuYW0gZ2nhu5tpIMSRw6Mga+G6v3QgaMO0biB2w6AgNzYgbmFtIGdp4bubaSBjaMawYSBr4bq/dCBow7RuICh04buVbmcgY+G7mW5nIDE5MyBuYW0pLiDEkOG7kWkgduG7m2kgbuG7ryBnaeG7m2ksIGPDsyAxMjggbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIHbDoCA3OSBuZ8aw4budaSBjaMawYSBr4bq/dCBow7RuICh04buVbmcgY+G7mW5nIDIwNyBu4buvKS4gVOG7lW5nIHPhu5EgcXVhbiBzw6F0IGzDoCA0MDAuIMSQw6J5IGzDoCBk4buvIGxp4buHdSBjxqEgc+G7nyBjaG8gdmnhu4djIHTDrW5oIHRvw6FuIE9kZHMgUmF0aW8uICAgIA0KDQoqICoqTWVhc3VyZSAoT2RkcyBSYXRpbyB3aXRoIDk1JSBDLkkuKToqKiAgIA0KDQogICogKipFc3RpbWF0ZSAoTWFsZSk6IDEuMDAwMDAqKiAtIMSQw6J5IGzDoCBnacOhIHRy4buLIHRoYW0gY2hp4bq/dSBjaG8gbmjDs20gbmFtIGdp4bubaS4gVOG7tyBs4buHIGPGsOG7o2MgKG9kZHMpIGPhu6dhIG5hbSBnaeG7m2kgxJHDoyBr4bq/dCBow7RuIHNvIHbhu5tpIGNoxrBhIGvhur90IGjDtG4gxJHGsOG7o2MgbOG6pXkgbMOgbSBjxqEgc+G7nyDEkeG7gyBzbyBzw6FuaC4gICANCiAgDQogICogKipFc3RpbWF0ZSAoRmVtYWxlKTogMS4wNTIzNDEqKiAtIEdpw6EgdHLhu4sgbsOgeSBjaG8gYmnhur90IHThu7cgbOG7hyBjxrDhu6NjIMSR4buDIG3hu5l0IG5nxrDhu51pIG7hu68gxJHDoyBr4bq/dCBow7RuIChzbyB24bubaSBjaMawYSBr4bq/dCBow7RuKSBjYW8gZ+G6pXAgMS4wNTIzNDEgbOG6p24gc28gduG7m2kgdOG7tyBs4buHIGPGsOG7o2MgdMawxqFuZyB04buxIOG7nyBuYW0gZ2nhu5tpLiDEkGnhu4F1IG7DoHkgbmfhu6Ugw70gcuG6sW5nIG7hu68gZ2nhu5tpIGPDsyBraOG6oyBuxINuZyDEkcOjIGvhur90IGjDtG4gbmjhu4luaCBoxqFuIG3hu5l0IGNow7p0IHNvIHbhu5tpIG5hbSBnaeG7m2kgdHJvbmcgbeG6q3UgbsOgeS4gVHJvbmcgYuG7kWkgY+G6o25oIHZheSB0w61uIGThu6VuZywgbuG6v3UgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuICLEkcOjIGvhur90IGjDtG4iIMSRxrDhu6NjIGNvaSBsw6AgbeG7mXQgeeG6v3UgdOG7kSDhu5VuIMSR4buLbmggdMOgaSBjaMOtbmgsIHRow6wgc+G7sSBjaMOqbmggbOG7h2NoIG5o4buPIG7DoHkgY8OzIHRo4buDIGtow7RuZyDEkeG7pyDEkeG7gyB04bqhbyByYSBz4buxIMawdSB0acOqbiDEkcOhbmcga+G7gyBjaG8gbuG7ryBnaeG7m2kgc28gduG7m2kgbmFtIGdp4bubaSBk4buxYSB0csOqbiB54bq/dSB04buRIGjDtG4gbmjDom4uICAgDQogIA0KICAqICoqTG93ZXIgKEZlbWFsZSk6IDAuNzAyNzU1MioqIHbDoCAqKlVwcGVyIChGZW1hbGUpOiAxLjU3NTY2OCoqIC0gxJDDonkgbMOgIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIE9kZHMgUmF0aW8gY+G7p2EgbuG7ryBnaeG7m2kgc28gduG7m2kgbmFtIGdp4bubaS4gS2hv4bqjbmcgbsOgeSBjaG8gYmnhur90IGNow7puZyB0YSB0aW4gdMaw4bufbmcgOTUlIHLhurFuZyB04bu3IGzhu4cgY8aw4bujYyB0aOG7sWMgc+G7sSBj4bunYSB2aeG7h2MgbuG7ryBnaeG7m2kgxJHDoyBr4bq/dCBow7RuIHNvIHbhu5tpIG5hbSBnaeG7m2kgdHJvbmcgdOG7lW5nIHRo4buDIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgMC43MDI3NTUyIMSR4bq/biAxLjU3NTY2OC4gICANCiAgDQogICAgKiAqKsOdIG5naMSpYSB0cm9uZyBi4buRaSBj4bqjbmggQ3JlZGl0OioqIFbDrCBraG/huqNuZyB0aW4gY+G6rXkgbsOgeSBiYW8gZ+G7k20gZ2nDoSB0cuG7iyAxICh04bu3IGzhu4cgY8aw4bujYyBi4bqxbmcgMSBjw7MgbmdoxKlhIGzDoCBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IHbhu4EgdOG7tyBs4buHIGPGsOG7o2MgZ2nhu69hIGhhaSBuaMOzbSksIG7DsyBjaOG7iSByYSBy4bqxbmcgc+G7sSBraMOhYyBiaeG7h3QgduG7gSB04bu3IGzhu4cgY8aw4bujYyBr4bq/dCBow7RuIGdp4buvYSBuYW0gdsOgIG7hu68gcXVhbiBzw6F0IMSRxrDhu6NjIHRyb25nIG3huqt1ICgxLjA1MjM0MSkga2jDtG5nIMSR4bunIGzhu5tuIMSR4buDIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIMSR4buZIHRpbiBj4bqteSA5NSUuIMSQaeG7gXUgbsOgeSBow6BtIMO9IHLhurFuZywgdHJvbmcgYuG7mSBk4buvIGxp4buHdSB0w61uIGThu6VuZyBuw6B5LCBnaeG7m2kgdMOtbmgga2jDtG5nIHBo4bqjaSBsw6AgeeG6v3UgdOG7kSBk4buxIGLDoW8gxJHDoW5nIGvhu4MgY2hvIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibi4gRG8gxJHDsywga2hpIGPDoWMgdOG7lSBjaOG7qWMgdMOtbiBk4bulbmcgxJHDoW5oIGdpw6Ega2jhuqMgbsSDbmcgdmF5IGThu7FhIHRyw6puIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiwgdmnhu4djIHBow6JuIGJp4buHdCDEkeG7kWkgeOG7rSBk4buxYSB0csOqbiBnaeG7m2kgdMOtbmggbMOgIGtow7RuZyBjw7MgY8ahIHPhu58gdGjhu5FuZyBrw6ogcsO1IHLDoG5nIHbDrCBoYWkgYmnhur9uIG7DoHkga2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIHBo4bulIHRodeG7mWMgxJHDoW5nIGvhu4MuICAgDQogICAgDQoqICoqcC12YWx1ZSAodHdvLXNpZGVkKToqKiAgIA0KDQogICogYG1pZHAuZXhhY3QgKEZlbWFsZSk6IDAuODA0MTk4NGAsIGBmaXNoZXIuZXhhY3QgKEZlbWFsZSk6IDAuODM3NTc5M2AsIGBjaGkuc3F1YXJlIChGZW1hbGUpOiAwLjgwMzMzNDNgIC0gVOG6pXQgY+G6oyBjw6FjIGdpw6EgdHLhu4sgKnAqLXZhbHVlIG7DoHkgxJHhu4F1IHLhuqV0IGzhu5tuICjEkeG7gXUgbOG7m24gaMahbiAwLjA1KS4gICANCiAgDQogICogKirDnSBuZ2jEqWEgdHJvbmcgYuG7kWkgY+G6o25oIENyZWRpdDoqKiBN4buZdCAqcCotdmFsdWUgY2FvIG5oxrAgduG6rXkgY2hvIHRo4bqleSBraMO0bmcgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIMSR4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCAkSF8wJCBy4bqxbmcga2jDtG5nIGPDsyBt4buRaSBxdWFuIGjhu4cgZ2nhu69hICJHZW5kZXIiIHbDoCAiTWFycmllZCIgKHThu6ljIGzDoCBjaMO6bmcgxJHhu5ljIGzhuq1wKS4gxJBp4buBdSBuw6B5IGPFqW5nIGPhu6duZyBj4buRIGvhur90IGx14bqtbiBy4bqxbmcsIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0LCB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4ga2jDtG5nIHBo4bulIHRodeG7mWMgdsOgbyBnaeG7m2kgdMOtbmguIERvIMSRw7MsIGPDoWMgY2jDrW5oIHPDoWNoIGNobyB2YXkgZOG7sWEgdHLDqm4gc+G7sSBr4bq/dCBo4bujcCBj4bunYSBoYWkgeeG6v3UgdOG7kSBuw6B5IGPDsyB0aOG7gyBraMO0bmcgbWFuZyBs4bqhaSBs4bujaSB0aOG6vyBk4buxIMSRb8OhbiDEkcOhbmcga+G7gywgdsOgIHZp4buHYyBz4butIGThu6VuZyBnaeG7m2kgdMOtbmggxJHhu4Mgc3V5IGx14bqtbiB24buBIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiAodsOgIHThu6sgxJHDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIHTDrW4gZOG7pW5nKSBsw6Aga2jDtG5nIGPDsyBjxqEgc+G7nyB0aOG7kW5nIGvDqiB24buvbmcgY2jhuq9jLiAgICANCiAgDQogIA0KIyMgKipCaeG6v24gU3R1ZGVudCB2w6AgRXRobmljaXR5KiogICANCg0KYGBge3IsZWNobz1UUlVFfQ0KbzEgPC0gb2Rkc3JhdGlvKGsyKQ0KbzENCmBgYA0KICAgDQogICBL4bq/dCBxdeG6oyBvZGRzcmF0aW8gY2hvIHRo4bqleSBraGkgbmjDs20gIk5vIiAoa2jDtG5nIHBo4bqjaSBzaW5oIHZpw6puKSBsw6AgdGhhbSBjaGnhur91LCB04bu3IGzhu4cgY8aw4bujYyDEkeG7gyBt4buZdCBuZ8aw4budaSBsw6Agc2luaCB2acOqbiAoWWVzKSBzbyB24bubaSBraMO0bmcgcGjhuqNpIHNpbmggdmnDqm4gbMOgIDEuMjk0MDc0IGzhuqduLiBN4bq3YyBkw7kgxrDhu5tjIHTDrW5oIG7DoHkgY2hvIHRo4bqleSB04bu3IGzhu4cgY8aw4bujYyBsw6Agc2luaCB2acOqbiBjYW8gaMahbiBt4buZdCBjaMO6dCwga2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gdOG7tyBs4buHIGPGsOG7o2MgKDAuNTM2MjM5NSDEkeG6v24gMy4yMTIxOTMpIGJhbyBn4buTbSBnacOhIHRy4buLIDEuIEvhur90IGjhu6NwIHbhu5tpIHAtdmFsdWUgbOG7m24gKHbDrSBk4bulOiBjaGkuc3F1YXJlID0gMC41MTU2MzIzKSwgY2jDum5nIHRhIGtow7RuZyBjw7MgxJHhu6cgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hyDEkcOhbmcga+G7gyBnaeG7r2EgdMOsbmggdHLhuqFuZyBzaW5oIHZpw6puIHbDoCBz4bqvYyB04buZYy4gVHJvbmcgYuG7kWkgY+G6o25oIGLhu5kgZOG7ryBsaeG7h3UgQ3JlZGl0LCDEkWnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6Agc+G7sSBwaMOibiBi4buRIHPhuq9jIHThu5ljIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgdGjhu5FuZyBrw6ogxJHDoW5nIGvhu4MgZ2nhu69hIHNpbmggdmnDqm4gdsOgIG5nxrDhu51pIGtow7RuZyBwaOG6o2kgc2luaCB2acOqbiwgdsOgIGRvIMSRw7MsIHZp4buHYyBz4butIGThu6VuZyBt4buZdCB0cm9uZyBoYWkgYmnhur9uIG7DoHkgxJHhu4Mgc3V5IGx14bqtbiB24buBIGJp4bq/biBjw7JuIGzhuqFpIG5o4bqxbSDEkcOhbmggZ2nDoSBraOG6oyBuxINuZyB2YXkgdMOtbiBk4bulbmcgbMOgIGtow7RuZyBjw7MgY8ahIHPhu58gduG7r25nIGNo4bqvYy4gICANCiAgIA0KICAgDQogIA==