# 1. Load các thư viện cần thiết
library(tidyverse)
library(ggplot2)
library(epitools)
library(DescTools)
library(DT)
library(energy)
library(readr)
library(skimr)
library(scales)
library(reshape2)
library(magick)

img <- image_read("C:/Users/Hoang Quyen/Downloads/biatl.png")
print(img)

1. LỜI CẢM ƠN

Em xin chân thành bày tỏ lòng biết ơn sâu sắc đến Thầy Trần Mạnh Tường đã dành thời gian, công sức để truyền đạt kiến thức và kinh nghiệm quý báu trong môn học “Phân tích dữ liệu định tính”. Nhờ sự hướng dẫn tận tình, phương pháp giảng dạy khoa học cùng những ví dụ minh họa sinh động của Thầy, em đã có thể hiểu rõ bản chất của nghiên cứu định tính, nắm vững các kỹ thuật phân tích và ứng dụng chúng vào thực tế một cách hiệu quả. Em mong rằng những kiến thức thu nhận được sẽ là hành trang vững chắc cho hành trình học thuật và nghề nghiệp sau này. Một lần nữa, em xin gửi lời tri ân chân thành nhất đến Thầy. Kính chúc Thầy luôn dồi dào sức khỏe, hạnh phúc và tiếp tục lan tỏa tri thức đến nhiều thế hệ sinh viên.

2. LỜI CAM ĐOAN

Tôi xin cam đoan rằng những kiến thức và kỹ năng thu nhận được từ môn học “Phân tích dữ liệu định tính” dưới sự hướng dẫn của Thầy sẽ được tôi vận dụng một cách nghiêm túc, có hệ thống và hiệu quả trong các hoạt động học thuật cũng như công việc chuyên môn sau này. Tôi cam kết sử dụng các phương pháp phân tích định tính đã được học một cách chính xác, tuân thủ các nguyên tắc nghiên cứu khoa học và đạo đức học thuật. Đồng thời, tôi luôn ghi nhớ và trân trọng những chỉ dẫn quý báu của giảng viên, coi đây là nền tảng quan trọng để phát triển năng lực nghiên cứu và tư duy phân tích của bản thân, hoàn toàn chịu trách nhiệm về việc áp dụng những kiến thức này vào thực tiễn và cam kết phát huy giá trị môn học một cách tốt nhất.

3. TỔNG QUAN NGHIÊN CỨU

3.1. MỤC TIÊU NGHIÊN CỨU

Mục tiêu của nghiên cứu này là phân tích các yếu tố liên quan đến tình trạng béo phì của cá nhân dựa trên dữ liệu y tế thu thập được. Trọng tâm là tìm hiểu mối quan hệ giữa các hành vi sinh hoạt (đặc biệt là thói quen ăn fast food, hành vi kiểm soát calo, mức độ hoạt động thể chất và tiêu thụ nước) với xác suất mắc béo phì. Từ đó, xác định các yếu tố nguy cơ quan trọng nhằm phục vụ công tác dự phòng và kiểm soát béo phì trong cộng đồng.

Nghiên cứu tập trung vào các bước: mô tả đặc điểm phân phối của biến béo phì (obesity_group) và các biến giải thích thông qua bảng tần số và biểu đồ; kiểm định giả thuyết thống kê để phân tích mối liên hệ giữa các biến định tính với béo phì bằng kiểm định Chi-squared, tính toán Relative risk (RR)Odds Ratio (OR); và cuối cùng, xây dựng các mô hình hồi quy nhị phân (logit, probit, cloglog) để lượng hóa ảnh hưởng của từng biến đến xác suất béo phì. Ngoài ra, mô hình được đánh giá thông qua các chỉ số độ phù hợp như AIC, Brier Score và hiệu suất phân loại (Confusion Matrix).

3.2. PHƯƠNG PHÁP NGHIÊN CỨU

Nghiên cứu áp dụng quy trình phân tích định lượng theo ba giai đoạn chính:

  • (1) Thống kê mô tả: Các đặc điểm phân phối của biến phụ thuộc obesity_group (hoặc dạng nhị phân obese_binary) và các biến độc lập như fast_food, calorie_check, age được khảo sát bằng bảng tần số, biểu đồ cột và biểu đồ phân bố. Điều này giúp nhận diện xu hướng và cấu trúc cơ bản trong dữ liệu.

  • (2) Phân tích suy diễn: Sử dụng bảng chéo và kiểm định χ² để kiểm tra giả thuyết về tính độc lập giữa tình trạng béo phì và các yếu tố hành vi. Ngoài ra, các chỉ số đo lường nguy cơ như Tỷ số rủi ro (RR)Tỷ số odds (OR) được tính toán nhằm định lượng mức độ ảnh hưởng tương đối. Các phép kiểm định tỷ lệ (prop.test) được sử dụng để so sánh xác suất béo phì giữa các nhóm.

  • (3) Xây dựng mô hình hồi quy: Để dự báo xác suất mắc béo phì, ba mô hình hồi quy nhị phân được xây dựng ứng với ba hàm liên kết: logit, probit, và complementary log-log (cloglog). Các mô hình được ước lượng bằng phương pháp tối đa hóa hàm hợp lý (MLE). Hiệu quả của từng mô hình được đánh giá và so sánh thông qua AIC (Akaike Information Criterion), Brier Score, và ma trận nhầm lẫn (confusion matrix). Các hệ số hồi quy được giải thích về mặt xác suất và odds để cung cấp cái nhìn định lượng về ảnh hưởng của từng biến.

Toàn bộ quy trình phân tích được thực hiện bằng phần mềm RStudio, với sự hỗ trợ của các gói thư viện như dplyr, ggplot2, epiR, pROC, và caret, đảm bảo độ chính xác, khả tái lập và tuân thủ các nguyên tắc phân tích dữ liệu y tế - thống kê hiện đại.

4. TỔNG HỢP CƠ SỞ LÝ THUYẾT

4.1. Thống kê mô tả

Thống kê mô tả là bước đầu tiên trong phân tích dữ liệu, nhằm tóm tắt đặc điểm cơ bản của tập dữ liệu. Đối với dữ liệu định tính, các công cụ như bảng tần số, biểu đồ cột, biểu đồ tròn được sử dụng để mô tả sự phân bố của từng biến. Đối với dữ liệu định lượng, các chỉ số như trung bình, trung vị, độ lệch chuẩn, phương sai giúp hiểu rõ xu hướng trung tâm và độ biến thiên của dữ liệu.

Tần số (frequency) và tỷ lệ phần trăm (proportion) cho biến định tính. Biểu đồ cột (bar plot) hoặc biểu đồ tròn (pie chart) để minh họa trực quan. Tỷ số chênh lệch (odds ratio, OR) và tỷ số nguy cơ (Relative Risk, RR) được sử dụng để mô tả mối liên hệ giữa hai biến nhị phân.

4.2. Thống kê suy diễn

Để kiểm định giả thuyết về mối quan hệ giữa các biến, các phương pháp suy diễn được áp dụng bao gồm:

4.2.1 Kiểm định Chi-bình phương (Chi-square test)

Mục đích: kiểm tra sự độc lập giữa hai biến định tính.

Giả thuyết:

\(H_0\): Hai biến độc lập. \(H_1\): Hai biến có mối liên hệ.

Công thức thống kê:

\[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]

Trong đó:

\(O_{ij}\): tần số quan sát. \(E_{ij}\): tần số kỳ vọng.

4.2.2 Kiểm định tỷ lệ hai nhóm

Dùng để so sánh tỷ lệ giữa hai nhóm (như nhóm có bệnh và không có bệnh).

Công thức tỷ số nguy cơ:

\[ RR = \frac{a / (a + b)}{c / (c + d)} \]

Công thức odds ratio:

\[ OR = \frac{a / b}{c / d} = \frac{ad}{bc} \] ### 4.2.3. Tỷ số nguy cơ (RR) và Tỷ số odds (OR)

4.2.3.1. Tổng quan

Khi phân tích mối liên hệ giữa một yếu tố phơi nhiễm (exposure) và một biến kết cục nhị phân (binary outcome), đặc biệt là trong các nghiên cứu quan sát (hồi cứu, cắt ngang hoặc tiến cứu), tỷ số nguy cơ (RR)tỷ số odds (OR) là hai thước đo phổ biến được sử dụng để định lượng mức độ liên quan giữa phơi nhiễm và kết cục.

4.2.3.2. Bảng 2x2 mô tả dữ liệu

Giả sử có một biến độc lập định tính nhị phân (phơi nhiễm: có/không) và biến phụ thuộc nhị phân (kết cục: mắc/không mắc). Dữ liệu thường được trình bày dưới dạng bảng chéo 2x2:

Kết cục = 1 (Có) Kết cục = 0 (Không) Tổng
Phơi nhiễm = 1 (Có) a b a + b
Phơi nhiễm = 0 (Không) c d c + d
Tổng a + c b + d n

4.2.3.3. Tỷ số nguy cơ (Relative Risk - RR)

Khái niệm

Tỷ số nguy cơ (RR – Relative Risk) là một chỉ số định lượng so sánh xác suất xảy ra một biến cố (kết cục) giữa hai nhóm đối tượng: nhóm có yếu tố nguy cơ (phơi nhiễm) và nhóm không có yếu tố nguy cơ.

Cụ thể:

RR đo lường mức độ mà yếu tố phơi nhiễm ảnh hưởng đến khả năng xảy ra kết cục, dựa trên xác suất tương đối.

Công thức toán học

Giả sử có bảng 2x2 thể hiện phân bố giữa phơi nhiễm và kết cục:

Kết cục = 1 (Yes) Kết cục = 0 (No) Tổng
Phơi nhiễm = 1 a b a + b
Phơi nhiễm = 0 c d c + d

Khi đó:

\[ RR = \frac{P(\text{Kết cục} = 1 \mid \text{Phơi nhiễm} = 1)}{P(\text{Kết cục} = 1 \mid \text{Phơi nhiễm} = 0)} = \frac{a / (a + b)}{c / (c + d)} \]

Diễn giải kết quả

  • RR = 1: Phơi nhiễm không ảnh hưởng đến xác suất xảy ra kết cục.
  • RR > 1: Phơi nhiễm làm tăng nguy cơ xảy ra kết cục.
  • RR < 1: Phơi nhiễm có thể mang tính bảo vệ, làm giảm nguy cơ xảy ra kết cục.

Bối cảnh áp dụng

  • RR phù hợp với nghiên cứu đoàn hệ (cohort)nghiên cứu thử nghiệm lâm sàng (RCT), khi có thể đo xác suất thực sự của kết cục trong mỗi nhóm.
  • Không phù hợp trong các nghiên cứu hồi cứu (case-control) vì không thể ước lượng trực tiếp xác suất.

4.2.3.2. Tỷ số odds (Odds Ratio - OR)

Khái niệm

Tỷ số odds (OR – Odds Ratio) đo tỷ lệ giữa odds (tỷ số giữa khả năng xảy ra và không xảy ra) của kết cục giữa hai nhóm (phơi nhiễm và không phơi nhiễm).

Công thức toán học

Từ bảng 2x2 đã trình bày:

  • Odds trong nhóm phơi nhiễm:

\[ \text{Odds}_1 = \frac{a}{b} \]

  • Odds trong nhóm không phơi nhiễm:

\[ \text{Odds}_0 = \frac{c}{d} \]

  • Khi đó:

\[ OR = \frac{a/b}{c/d} = \frac{a \cdot d}{b \cdot c} \]

Diễn giải kết quả

  • OR = 1: Không có mối liên hệ giữa phơi nhiễm và kết cục.
  • OR > 1: Phơi nhiễm làm tăng odds xảy ra kết cục.
  • OR < 1: Phơi nhiễm làm giảm odds xảy ra kết cục.

Bối cảnh áp dụng

  • OR thường được sử dụng trong nghiên cứu hồi cứu (case-control), khi không thể biết được xác suất thực.
  • Trong hồi quy logistic, hệ số hồi quy được diễn giải dưới dạng log(OR):

\[ \log(\text{OR}) = \beta_1 \Rightarrow \text{OR} = e^{\beta_1} \]

So sánh RR và OR

Tiêu chí Relative Risk (RR) Odds Ratio (OR)
Bản chất Tỷ số giữa hai xác suất Tỷ số giữa hai odds
Công thức \(\frac{a/(a+b)}{c/(c+d)}\) \(\frac{a \cdot d}{b \cdot c}\)
Giá trị Luôn nhỏ hơn OR nếu kết cục phổ biến Lớn hơn RR nếu kết cục phổ biến
Ý nghĩa thực tế Trực quan hơn với người không chuyên Khó hiểu hơn, mang tính kỹ thuật hơn
Phù hợp với nghiên cứu Cohort study, RCT Case-control, mô hình hồi quy logistic
Kết nối với mô hình Không xuất hiện trực tiếp trong mô hình hồi quy Là hệ số biến đổi trong hồi quy logistic: \(e^{\beta}\)

4.3. Mô hình hồi quy nhị phân và hồi quy logistic

4.3.1. Mô hình hồi quy nhị phân (Generalized Linear Model - GLM)

Khi biến phản hồi \(Y\) là biến nhị phân (chỉ nhận giá trị 0 hoặc 1), ta không thể sử dụng mô hình hồi quy tuyến tính thông thường vì:

  • Mô hình tuyến tính không đảm bảo giá trị dự đoán nằm trong khoảng xác suất hợp lệ \([0,1]\).
  • Sai số không phân phối chuẩn, mà theo phân phối Bernoulli.

Để giải quyết vấn đề này, mô hình hồi quy tổng quát hóa (GLM) được áp dụng với ba thành phần chính:

  • Random component (thành phần ngẫu nhiên): \(Y \sim \text{Bernoulli}(\pi)\), với \(\pi = P(Y = 1 \mid \mathbf{x})\) là xác suất xảy ra sự kiện.

  • Systematic component (thành phần hệ thống): \(\eta = \beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p\), là tổ hợp tuyến tính của các biến độc lập.

  • Link function (hàm liên kết): Biến đổi xác suất \(\pi\) thành một giá trị trên toàn trục thực: \(g(\pi) = \eta\).

4.3.3. Mô hình hồi quy logistic nhị phân

4.3.3.1. Cấu trúc mô hình

Trong mô hình hồi quy logistic, ta sử dụng hàm liên kết logit:

\[ \log\left(\frac{\pi(\mathbf{x})}{1 - \pi(\mathbf{x})}\right) = \eta = \beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p \]

Tương đương:

\[ \pi(\mathbf{x}) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \ldots + \beta_p x_p)}} \]

trong đó:

  • \(\pi(\mathbf{x})\) là xác suất xảy ra sự kiện (ví dụ: bị trầm cảm).
  • \(\beta_j\) là hệ số hồi quy tương ứng với biến giải thích \(x_j\).

4.3.3.2. Ý nghĩa hệ số hồi quy

  • Hệ số \(\beta_j\) thể hiện tác động cận biên của biến \(x_j\) lên log-odds của biến phụ thuộc.
  • Khi giữ các biến khác không đổi:

\[ \text{odds ratio} = e^{\beta_j} \]

=> Mỗi đơn vị tăng trong \(x_j\) làm odds của sự kiện xảy ra tăng \(e^{\beta_j}\) lần (nếu \(\beta_j > 0\)), hoặc giảm nếu \(\beta_j < 0\).

4.3.3.3. Xác suất và odds

  • Xác suất xảy ra sự kiện (success probability):

\[ \pi = P(Y = 1 | \mathbf{x}) \]

  • Odds của sự kiện:

\[ \text{odds} = \frac{\pi}{1 - \pi} \]

  • Log-odds (logit):

\[ \log(\text{odds}) = \eta = \beta_0 + \sum \beta_j x_j \]


4.3.4. So sánh ba mô hình hồi quy nhị phân phổ biến

Thành phần Logit Probit Cloglog
Link function \(g(\pi)\) \(\log\left(\frac{\pi}{1 - \pi}\right)\) \(\Phi^{-1}(\pi)\) \(\log(-\log(1 - \pi))\)
Inverse link \(\pi\) \(\frac{1}{1 + e^{-\eta}}\) \(\Phi(\eta)\) \(1 - \exp(-\exp(\eta))\)
Diễn giải hệ số Rõ ràng (OR) Khó hơn Thường dùng cho dữ liệu có đuôi nặng
Đặc điểm Phổ biến nhất Đường cong S đối xứng Đối xứng lệch phải
Sử dụng khi Phân tích hồi quy nhị phân tiêu chuẩn Dữ liệu có giả định phân phối chuẩn Biến cố hiếm, thời gian đến sự kiện

4.3.5. Ước lượng và kiểm định

  • Ước lượng: Các hệ số \(\beta_j\) được ước lượng bằng phương pháp tối đa hóa hàm hợp lý (Maximum Likelihood Estimation - MLE).

  • Kiểm định:

    • Kiểm định Wald: để đánh giá từng hệ số riêng lẻ.
    • Kiểm định Likelihood Ratio: để so sánh mô hình đầy đủ với mô hình rút gọn.
  • Khoảng tin cậy 95% cho OR: Với hệ số \(\hat{\beta}_j\), khoảng tin cậy cho OR là:

\[ \left[ e^{\hat{\beta}_j - 1.96 \cdot SE(\hat{\beta}_j)}, \; e^{\hat{\beta}_j + 1.96 \cdot SE(\hat{\beta}_j)} \right] \]

4.4. Đánh giá mô hình hồi quy

4.4.1 Tiêu chuẩn AIC (Akaike Information Criterion)

AIC đo độ phù hợp và mức độ đơn giản của mô hình. Công thức:

\[ \text{AIC} = -2 \log(\text{Likelihood}) + 2k \]

Mô hình có AIC nhỏ hơn được xem là tốt hơn (nếu so sánh cùng một tập dữ liệu). Trong báo cáo, AIC cho thấy logit và probit là hai mô hình tốt nhất (AIC = 938410.2).

4.4.2. Brier Score

Brier Score đo độ chính xác của dự đoán xác suất. Công thức:

\[ \text{Brier Score} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{p}_i)^2 \]

Giá trị càng thấp càng tốt. Kết quả: Logit và Probit có Brier Score = 0.1717 → phù hợp tương đương.

4.4.3. Ma trận nhầm lẫn và các chỉ số đánh giá mô hình phân loại nhị phân

4.4.3.1. Khái niệm

Ma trận nhầm lẫn (Confusion Matrix) là công cụ cơ bản và quan trọng trong đánh giá hiệu năng của các mô hình phân loại nhị phân (ví dụ: phân loại có hay không bị trầm cảm). Ma trận thể hiện sự so sánh giữa giá trị thực tế (ground truth) và giá trị dự đoán từ mô hình học máy.

4.4.3.2. Cấu trúc ma trận nhầm lẫn

Thực tế = 1 (Positive) Thực tế = 0 (Negative)
Dự đoán = 1 (Positive) TP (True Positive) FP (False Positive)
Dự đoán = 0 (Negative) FN (False Negative) TN (True Negative)
  • TP (True Positive): Số lượng trường hợp mà mô hình dự đoán đúng là “có” (ví dụ: đúng là bị trầm cảm).
  • FP (False Positive): Số lượng trường hợp mô hình dự đoán sai là “có” (ví dụ: dự đoán có trầm cảm nhưng thực tế không bị).
  • FN (False Negative): Số lượng trường hợp mô hình dự đoán sai là “không” (ví dụ: mô hình bỏ sót người thật sự bị trầm cảm).
  • TN (True Negative): Số lượng trường hợp mô hình dự đoán đúng là “không” (thực tế không bị và mô hình cũng dự đoán như vậy).

4.4.3.3. Các chỉ số đánh giá hiệu suất mô hình

Các chỉ số sau được tính từ ma trận nhầm lẫn, giúp đánh giá khả năng phân loại chính xác của mô hình:

a. Độ chính xác tổng thể (Accuracy)

Đo lường tỷ lệ tổng thể các dự đoán đúng trên toàn bộ mẫu quan sát.

\[ \text{Accuracy} = \frac{TP + TN}{TP + FP + FN + TN} \]

  • Giá trị từ 0 đến 1 (hoặc 0% đến 100%)
  • Phù hợp khi dữ liệu không mất cân bằng nghiêm trọng
b. Độ nhạy (Sensitivity, Recall, True Positive Rate)

Đo lường khả năng mô hình phát hiện đúng các trường hợp dương tính (Positive) – ví dụ: phát hiện đúng người bị trầm cảm.

\[ \text{Sensitivity} = \frac{TP}{TP + FN} \]

  • Càng cao càng tốt với các ứng dụng cần phát hiện sớm như bệnh lý, gian lận…
c. Độ đặc hiệu (Specificity, True Negative Rate)

Đo lường khả năng mô hình phát hiện đúng các trường hợp âm tính (Negative) – ví dụ: xác định đúng người không bị trầm cảm.

\[ \text{Specificity} = \frac{TN}{TN + FP} \]

  • Càng cao thì mô hình ít báo sai dương (giảm cảnh báo giả).
d. Tỷ lệ dương tính giả (False Positive Rate – FPR)

\[ \text{FPR} = \frac{FP}{FP + TN} = 1 - \text{Specificity} \]

  • Thường được dùng để vẽ đường cong ROC.
e. Tỷ lệ dương tính thực (Positive Predictive Value – PPV hay Precision)

\[ \text{Precision} = \frac{TP}{TP + FP} \]

  • Đánh giá trong số các dự đoán dương tính thì có bao nhiêu là đúng thật.
f. F1-score

Là trung bình điều hòa giữa độ nhạy và độ chính xác (precision), dùng trong trường hợp cần cân bằng giữa việc phát hiện đúng và hạn chế sai sót.

\[ \text{F1-score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} \]

5. Phân tích thống kê mối liên hệ giữa hành vi ăn uống và nguy cơ béo phì bằng mô hình hồi quy nhị phân”

5.1. GIỚI THIỆU VỀ BỘ DỮ LIỆU NGHIÊN CỨU

# 1. Load các thư viện cần thiết
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ 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
library(ggplot2)
library(epitools)
library(DescTools)
library(DT)
library(energy)
library(readr)
library(skimr)
library(scales)
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(reshape2)
## 
## Attaching package: 'reshape2'
## 
## The following object is masked from 'package:tidyr':
## 
##     smiths
library(gmodels)
## Registered S3 method overwritten by 'gdata':
##   method         from     
##   reorder.factor DescTools
library(epitools)
library(scales)
library(broom)
library(readxl)
obesity<-read_csv("C:/Users/Hoang Quyen/Downloads/obesity.csv")
## Rows: 2111 Columns: 17
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (9): Gender, family_history_with_overweight, FAVC, CAEC, SMOKE, SCC, CAL...
## dbl (8): Age, Height, Weight, FCVC, NCP, CH2O, FAF, TUE
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
obesity <- obesity %>%
  rename(
    gender = Gender,
    age = Age,
    height = Height,
    weight = Weight,
    family_history = family_history_with_overweight,
    fast_food = FAVC,
    veg_intake = FCVC,
    meal_count = NCP,
    snack_habit = CAEC,
    smoke = SMOKE,
    water_intake = CH2O,
    calorie_check = SCC,
    physical_activity = FAF,
    screen_time = TUE,
    alcohol = CALC,
    transport = MTRANS,
    obesity_level = NObeyesdad
  )


# Gộp nhóm biến mục tiêu obesity_level thành obesity_group
obesity$obesity_group <- ifelse(obesity$obesity_level %in% c("Obesity_Type_I", "Obesity_Type_II", "Obesity_Type_III"), 
                                  "Obese", "Non_Obese")
obesity$obesity_group <- as.factor(obesity$obesity_group)
obesity$gender <- as.factor(obesity$gender)
obesity$family_history <- as.factor(obesity$family_history)
obesity$fast_food <- as.factor(obesity$fast_food)
obesity$snack_habit <- as.factor(obesity$snack_habit)
obesity$smoke <- as.factor(obesity$smoke)
obesity$calorie_check <- as.factor(obesity$calorie_check)
obesity$alcohol <- as.factor(obesity$alcohol)
obesity$transport <- as.factor(obesity$transport)
names(obesity)
##  [1] "gender"            "age"               "height"           
##  [4] "weight"            "family_history"    "fast_food"        
##  [7] "veg_intake"        "meal_count"        "snack_habit"      
## [10] "smoke"             "water_intake"      "calorie_check"    
## [13] "physical_activity" "screen_time"       "alcohol"          
## [16] "transport"         "obesity_level"     "obesity_group"

Dữ liệu được sử dụng trong nghiên cứu bao gồm 2.111 cá thể (quan sát), đại diện cho các đối tượng có đặc điểm nhân khẩu học và hành vi lối sống khác nhau, liên quan đến tình trạng béo phì. Mỗi cá thể được mô tả bởi 18 biến độc lập, trong đó phản ánh nhiều khía cạnh như nhân khẩu học (giới tính, tuổi, chiều cao, cân nặng), thói quen sinh hoạt (ăn fast food, kiểm tra lượng calo, hút thuốc, uống rượu, hoạt động thể chất, thời gian trước màn hình, v.v.), cũng như tiền sử gia đình và phương tiện đi lại.

Trong tổng số 18 biến, có:

  • 4 biến định lượng::

    • age: Tuổi của cá nhân (kiểu số thực, đơn vị: năm)
    • height: Chiều cao (mét)
    • weight: Cân nặng (kg)
    • physical_activity: Mức độ hoạt động thể chất trung bình mỗi tuần (thường được định lượng theo thời gian)

Các biến định lượng này có thể tham gia vào các mô hình hồi quy như biến dự đoán tuyến tính, và có thể kiểm tra phân phối chuẩn hoặc xác định khoảng giá trị, độ lệch chuẩn,…

  • 14 biến định tính, bao gồm:

    • gender: Giới tính (male, female)
    • family_history: Tiền sử gia đình bị béo phì (yes, no)
    • fast_food: Thói quen ăn fast food (yes, no)
    • calorie_check: Có kiểm soát lượng calo nạp vào (yes, no)
    • veg_intake: Mức độ ăn rau (low, moderate, high)
    • meal_count: Số bữa ăn chính mỗi ngày (1, 2, 3+)
    • snack_habit: Thói quen ăn vặt (no, sometimes, frequently)
    • smoke: Hút thuốc lá (yes, no)
    • water_intake: Lượng nước uống hàng ngày (low, moderate, high)
    • screen_time: Thời gian trước màn hình mỗi ngày (short, moderate, long)
    • alcohol: Uống rượu/bia (no, sometimes, frequently)
    • transport: Phương tiện di chuyển chủ yếu (walking, bike, motorbike, car, public)
    • obesity_level: Mức độ béo phì gốc (gồm 7 cấp độ từ Insufficient Weight đến Obesity Type III)
    • obesity_group: Phiên bản nhị phân của mức độ béo phì: Obese vs. Non_Obese

Các biến định tính là nền tảng cho việc xây dựng bảng tần số, bảng chéo và kiểm định thống kê như χ², tính RR, OR và được mã hóa thành biến nhị phân trong mô hình hồi quy.

Đặc biệt, biến mục tiêu trong nghiên cứu là obese_binary, một biến nhị phân được tạo ra từ obesity_level để phân loại cá nhân vào hai nhóm chính: Obese (1)Non_Obese (0), nhằm mục tiêu dự đoán xác suất bị béo phì thông qua mô hình thống kê nhị phân.

5.2. Thống kê mô tả biến obesity_group

5.2.1 Bảng tần số và tần suất

library(dplyr)
obesity_group_tab <- obesity %>%
  count(obesity_group) %>%
  mutate(perc = round(n / sum(n) * 100, 1))

knitr::kable(obesity_group_tab, caption = "Tần số và tần suất của biến obesity_group")
Tần số và tần suất của biến obesity_group
obesity_group n perc
Non_Obese 1139 54
Obese 972 46

Kết quả nghiên cứu

Phân tích tần số và tần suất của biến obesity_group cho thấy sự phân bố khá cân đối giữa hai nhóm “Non_Obese” (không béo phì) và “Obese” (béo phì). Cụ thể, trong tổng số 2.111 quan sát, nhóm “Non_Obese” chiếm 1.139 trường hợp, tương ứng với tỷ lệ 54%, trong khi nhóm “Obese” có 972 trường hợp, chiếm 46%.

Kết quả này phản ánh một sự chênh lệch không quá lớn giữa hai nhóm, với tỷ lệ người không béo phì cao hơn nhóm béo phì khoảng 8%. Sự phân bố này có thể được kiểm định sâu hơn bằng các phương pháp thống kê như kiểm định chi-square để đánh giá tính độc lập hoặc phụ thuộc của biến obesity_group với các biến khác trong nghiên cứu. Ngoài ra, việc tính toán khoảng tin cậy (confidence interval) cho các tỷ lệ này cũng sẽ cung cấp thêm thông tin về độ chính xác của ước lượng.

Nhìn chung, kết quả trên cho thấy tỷ lệ béo phì trong mẫu nghiên cứu là đáng kể (46%), điều này có thể gợi ý nhu cầu phân tích sâu hơn về các yếu tố liên quan như chế độ ăn uống, lối sống, hoặc yếu tố di truyền để hiểu rõ hơn nguyên nhân và đề xuất các giải pháp can thiệp phù hợp.

5.2.2. Biểu đồ tròn

obesity_group_tab %>%
  ggplot(aes(x = "", y = perc, fill = obesity_group)) +
  geom_col(width = 1) +
  coord_polar("y") +
  geom_text(aes(label = paste0(perc, "%")), position = position_stack(vjust = 0.5)) +
  labs(title = "Tỷ lệ phần trăm của các nhóm obesity_group") +
  theme_void()

Biểu đồ tròn (pie chart) thể hiện tỷ lệ phần trăm của hai nhóm Non_Obese (54%) và Obese (46%) trong nghiên cứu.

5.3. Phân tích mối liên hệ giữa tình trạng béo phì và các yếu tố khác

5.3.1. Phân tích mối liên hệ giữa tình trạng béo phì (obesity_group) và thói quen tiêu thụ thức ăn nhanh (fast_food)

Mục tiêu của phần này là kiểm định xem liệu có tồn tại mối liên hệ thống kê có ý nghĩa giữa thói quen ăn thức ăn nhanhtình trạng béo phì hay không. Việc xác định mối quan hệ này giúp làm rõ vai trò của hành vi ăn uống trong nguy cơ phát triển béo ph

5.3.1.1 Bảng tần số

fast_food_tab <- table(obesity$fast_food, obesity$obesity_group)
fast_food_tab
##      
##       Non_Obese Obese
##   no        226    19
##   yes       913   953

Trong tổng số 2111 cá nhân:

  • 1866 người cho biết có thói quen ăn fast food, trong đó 953 người béo phì.
  • 245 người không ăn fast food, chỉ có 19 người bị béo phì.

→ Dữ liệu ban đầu gợi ý rằng nhóm có thói quen ăn fast food có xu hướng bị béo phì cao hơn nhiều.

5.3.1.2 Kiểm định chi bình phương (H0: không có mối liên hệ giữa fast_food và obesity_group)

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

Để kiểm định xem hai biến định tính này có mối liên hệ thống kê hay không, ta sử dụng kiểm định Chi-square Pearson với hiệu chỉnh Yates.

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

  • H₀ : Hai biến fast_foodobesity_group độc lập nhau (không có mối liên hệ).
  • H₁ : Có mối liên hệ giữa fast_foodobesity_group.

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

  • Thống kê Chi-square: χ² = 161.82
  • Bậc tự do (df): 1
  • p-value < 2.2e-16

Kết luận:

Do p-value < 0.05, chúng ta bác bỏ giả thuyết H₀. Như vậy, có mối liên hệ có ý nghĩa thống kê giữa thói quen ăn fast food và tình trạng béo phì.

5.3.1.3 Biểu đồ cột tần suất

obesity %>%
  group_by(fast_food, obesity_group) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(perc = round(n / sum(n) * 100, 1)) %>%
  ggplot(aes(x = fast_food, y = perc, fill = obesity_group)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = paste0(perc, "%")), position = position_dodge(width = 0.9), vjust = -0.2) +
  labs(title = "Tỷ lệ béo phì theo thói quen ăn fast food") +
  theme_minimal()

Biểu đồ cột theo phần trăm cho thấy:

  • Trong nhóm ăn fast food: tỷ lệ béo phì là 45.1%
  • Trong nhóm không ăn: tỷ lệ béo phì là 0.9%

=> Sự khác biệt này là rõ ràng, củng cố kết quả từ kiểm định thống kê.

5.3.1.4 RR, OR, Prop test

Để lượng hóa mức độ ảnh hưởng của thói quen ăn fast food đến tình trạng béo phì, chúng tôi ước lượng Relative risk (RR)Odds Ratio (OR).

riskratio(fast_food_tab)
## $data
##        
##         Non_Obese Obese Total
##   no          226    19   245
##   yes         913   953  1866
##   Total      1139   972  2111
## 
## $measure
##      risk ratio with 95% C.I.
##       estimate    lower    upper
##   no  1.000000       NA       NA
##   yes 6.585576 4.266291 10.16569
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact   chi.square
##   no          NA           NA           NA
##   yes          0 1.113112e-43 1.883989e-37
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Relative risk (RR) – Tỷ lệ rủi ro:

\[ RR = \frac{P(Y=1 \mid \text{Fast food = yes})}{P(Y=1 \mid \text{Fast food = no})} \]

  • \(P(Y=1 \mid \text{yes}) = \frac{953}{1866} \approx 0.5107\)
  • \(P(Y=1 \mid \text{no}) = \frac{19}{245} \approx 0.0776\)

\[ RR = \frac{0.5107}{0.0776} \approx 6.5856 \]

Người có ăn fast foodnguy cơ mắc béo phì cao gấp khoảng 6.59 lần so với nhóm không ăn fast food. Khoảng tin cậy 95% không bao gồm 1 cho thấy kết quả này có ý nghĩa thống kê.

oddsratio(fast_food_tab)
## $data
##        
##         Non_Obese Obese Total
##   no          226    19   245
##   yes         913   953  1866
##   Total      1139   972  2111
## 
## $measure
##      odds ratio with 95% C.I.
##       estimate    lower    upper
##   no   1.00000       NA       NA
##   yes 12.31025 7.847881 20.52677
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact   chi.square
##   no          NA           NA           NA
##   yes          0 1.113112e-43 1.883989e-37
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Odds Ratio (OR) – Tỷ lệ cược:

\[ OR = \frac{\dfrac{953}{913}}{\dfrac{19}{226}} = \frac{\text{odds}_{\text{yes}}}{\text{odds}_{\text{no}}} \]

  • \(\text{odds}_{\text{yes}} = \frac{953}{913} \approx 1.0438\)
  • \(\text{odds}_{\text{no}} = \frac{19}{226} \approx 0.0841\)

\[ OR = \frac{1.0438}{0.0841} \approx 12.31 \]

Tỷ số odds mắc béo phì ở nhóm ăn fast food cao hơn nhóm không ăn khoảng 12.31 lần. Đây là một mức tăng rất lớn về mặt xác suất tương đối, củng cố nhận định rằng fast food là yếu tố nguy cơ nghiêm trọng.

x_ff <- c(fast_food_tab["yes", "Obese"], fast_food_tab["no", "Non_Obese"])
n_ff <- c(sum(fast_food_tab["yes", ]), sum(fast_food_tab["no", ]))
prop.test(x = x_ff, n = n_ff, correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  x_ff out of n_ff
## X-squared = 148.89, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.4521794 -0.3712823
## sample estimates:
##    prop 1    prop 2 
## 0.5107181 0.9224490

Phân tích nhằm kiểm tra xem tỷ lệ béo phì ở nhóm có thói quen ăn fast food và nhóm không ăn fast food có sự khác biệt có ý nghĩa thống kê hay không.

Gọi:

  • \(p_1\): Tỷ lệ béo phì ở nhóm ăn fast food
  • \(p_2\): Tỷ lệ không béo phì ở nhóm không ăn fast food

Giả thuyết thống kê:

\[ \begin{aligned} H_0 &: p_1 = p_2 \quad \text{(không có sự khác biệt)} \\ H_1 &: p_1 \ne p_2 \quad \text{(có sự khác biệt)} \end{aligned} \]

Kết quả kiểm định

  • \(\chi^2 = 148.89\), df = 1

  • p-value < 2.2 ^{-16}

  • Khoảng tin cậy 95% cho hiệu tỷ lệ:

    \[ (\hat{p}_1 - \hat{p}_2) \in [-0.4522,\ -0.3713] \]

  • Với p-value gần bằng 0, ta bác bỏ giả thuyết \(H_0\), khẳng định rằng có sự khác biệt có ý nghĩa thống kê giữa hai tỷ lệ.

  • Sự khác biệt thực nghiệm:

    \[ \hat{p}_1 - \hat{p}_2 = 0.5107 - 0.0776 ≈ 0.4331 \]

  • Điều này cho thấy người ăn fast food có tỷ lệ béo phì cao hơn đáng kể so với người không ăn.

  • Khoảng tin cậy loại trừ 0 hoàn toàn, điều này xác nhận tính ổn định và đáng tin cậy của chênh lệch tỷ lệ giữa hai nhóm.

Phân tích kiểm định tỷ lệ cho thấy thói quen tiêu thụ fast food có liên quan chặt chẽ và có ý nghĩa thống kê đến tình trạng béo phì. Với khoảng cách gần 44 điểm phần trăm về tỷ lệ béo phì giữa hai nhóm, kết quả này cho thấy rằng fast food là một yếu tố hành vi quan trọng cần được kiểm soát trong các chương trình can thiệp sức khỏe cộng đồng.

5.3.2. Phân tích mối liên hệ giữa tình trạng béo phì (obesity_group) và thói quen kiểm tra calo (calorie_check)

Phân tích này nhằm kiểm định giả thuyết về mối liên hệ giữa việc kiểm tra lượng calo tiêu thụ và tình trạng béo phì. Chúng tôi kỳ vọng hành vi kiểm soát dinh dưỡng này sẽ góp phần giảm thiểu nguy cơ béo phì.

5.3.2.1 Bảng tần số

calorie_tab <- table(obesity$calorie_check, obesity$obesity_group)
calorie_tab
##      
##       Non_Obese Obese
##   no       1046   969
##   yes        93     3
  • Trong số 96 người kiểm tra calo (yes), chỉ 3 người bị béo phì (~3.1%)
  • Trong số 2015 người không kiểm tra calo, có tới 969 người béo phì (~48.1%)

⟶ Dữ liệu ban đầu cho thấy một xu hướng rõ rệt: việc kiểm tra calo có thể liên quan đến tỷ lệ béo phì thấp hơn.

5.3.2.2 Kiểm định chi bình phương (H0: không có mối liên hệ giữa calorie_check và obesity_group)

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

Để xác định xem sự khác biệt trên có ý nghĩa thống kê hay không, ta thực hiện kiểm định Chi-square.

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

  • H₀: calorie_checkobesity_group độc lập.
  • H₁: Hai biến này có mối liên hệ thống kê.

Kết quả:

  • χ² = 72.774, df = 1
  • p-value < 2.2e-16

*Kết luận:**

Với p-value rất nhỏ, chúng ta bác bỏ giả thuyết H₀. Do đó, tồn tại mối liên hệ có ý nghĩa thống kê giữa việc kiểm tra calo và tình trạng béo phì.

5.3.2.3 Biểu đồ cột tần suất

obesity %>%
  group_by(calorie_check, obesity_group) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(perc = round(n / sum(n) * 100, 1)) %>%
  ggplot(aes(x = calorie_check, y = perc, fill = obesity_group)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = paste0(perc, "%")), position = position_dodge(width = 0.9), vjust = -0.2) +
  labs(title = "Tỷ lệ béo phì theo thói quen kiểm tra calo") +
  theme_minimal()

Biểu đồ cột thể hiện tỷ lệ phần trăm người béo phì theo thói quen calorie_check:

  • Nhóm “yes” (kiểm tra calo): chỉ 0.1% béo phì.
  • Nhóm “no”: tỷ lệ béo phì tới 45.9%.

⟶ Khác biệt rất rõ ràng giữa hai nhóm.

5.3.2.4 RR, OR, Prop test

riskratio(calorie_tab)
## $data
##        
##         Non_Obese Obese Total
##   no         1046   969  2015
##   yes          93     3    96
##   Total      1139   972  2111
## 
## $measure
##      risk ratio with 95% C.I.
##         estimate      lower     upper
##   no  1.00000000         NA        NA
##   yes 0.06498323 0.02131565 0.1981089
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact   chi.square
##   no          NA           NA           NA
##   yes          0 3.502564e-22 5.844121e-18
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Relative risk (RR):

\[ RR = \frac{P(\text{Obese}|\text{Check})}{P(\text{Obese}|\text{No check})} = \frac{3/96}{969/2015} \approx 0.065 \]

  • Khoảng tin cậy 95%: (0.0213 – 0.1981)

Người có thói quen kiểm tra calo có nguy cơ béo phì thấp hơn ~93.5% so với người không kiểm tra.

oddsratio(calorie_tab)
## $data
##        
##         Non_Obese Obese Total
##   no         1046   969  2015
##   yes          93     3    96
##   Total      1139   972  2111
## 
## $measure
##      odds ratio with 95% C.I.
##        estimate       lower      upper
##   no  1.0000000          NA         NA
##   yes 0.0366283 0.008714613 0.09781913
## 
## $p.value
##      two-sided
##       midp.exact fisher.exact   chi.square
##   no          NA           NA           NA
##   yes          0 3.502564e-22 5.844121e-18
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Odds Ratio (OR):

\[ OR = \frac{3/93}{969/1046} \approx 0.0366 \]

  • Khoảng tin cậy 95%: (0.0087 – 0.0978)

Odds (cơ hội) béo phì ở nhóm kiểm tra calo thấp hơn ~27 lần so với nhóm không kiểm tra.

x_cal <- c(calorie_tab["yes", "Obese"], calorie_tab["no", "Non_Obese"])
n_cal <- c(sum(calorie_tab["yes", ]), sum(calorie_tab["no", ]))
prop.test(x = x_cal, n = n_cal, correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  x_cal out of n_cal
## X-squared = 87.241, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.5289336 -0.4467798
## sample estimates:
##    prop 1    prop 2 
## 0.0312500 0.5191067

Xét hai tỷ lệ:

  • \(p_1\): Tỷ lệ béo phì ở nhóm có kiểm tra calo

  • \(p_2\): Tỷ lệ không béo phì ở nhóm không kiểm tra calo Giả thuyết:

  • H₀: Tỷ lệ béo phì ở hai nhóm là bằng nhau.

  • H₁: Tỷ lệ này khác biệt. \[ \begin{aligned} H_0 &: p_1 = p_2 \\ H_1 &: p_1 \ne p_2 \end{aligned} \]

Kết quả:

  • X² = 87.24, df = 1
  • p-value < 2.2e-16
  • Khoảng tin cậy cho hiệu tỷ lệ: (-0.529, -0.447)

Với p-value gần bằng 0, chúng ta bác bỏ giả thuyết \(H_0\) ở mức ý nghĩa bất kỳ. Điều này cung cấp bằng chứng thống kê mạnh mẽ cho thấy tỷ lệ béo phì khác biệt đáng kể giữa hai nhóm hành vi.

Cụ thể:

  • Tỷ lệ béo phì trong nhóm có kiểm tra calo chỉ ~3.1%, trong khi nhóm còn lại lên đến ~48.1%.
  • Chênh lệch tỷ lệ thực nghiệm lên đến khoảng 45 điểm phần trăm, và khoảng tin cậy xác nhận sự khác biệt là rất có ý nghĩa.

Việc thường xuyên kiểm tra lượng calo hấp thụ trong khẩu phần ăn có liên hệ chặt chẽ với xác suất mắc béo phì thấp hơn. Kết quả kiểm định tỷ lệ xác thực điều này ở mức độ thống kê mạnh mẽ. Về mặt ứng dụng, thói quen theo dõi năng lượng tiêu thụ nên được khuyến khích trong các chương trình phòng ngừa béo phì.

5.4. Mô hình hồi quy đa biến với 3 hàm liên kết

Trong tất cả các mô hình hồi quy nhị phân (logit, probit, cloglog), mục tiêu là ước lượng xác suất một cá nhân rơi vào nhóm béo phì (obese_binary = 1) dựa trên các biến giải thích như fast_food, calorie_checkage.

Ta xét mô hình tổng quát:

\[ g(p) = \beta_0 + \beta_1 \cdot \text{fast\_foodyes} + \beta_2 \cdot \text{calorie\_checkyes} + \beta_3 \cdot \text{age} \]

Trong đó:

  • \(p = P(Y = 1)\) là xác suất thuộc nhóm béo phì.
  • \(g(\cdot)\) là hàm liên kết tùy thuộc vào mô hình.
  • \(\beta_i\) là hệ số hồi quy tương ứng, cần diễn giải.

5.4.1. Mô hình hồi quy đa biến với liên kết logit

obesity$obese_binary <- ifelse(obesity$obesity_level %in% c("Obesity_Type_I", "Obesity_Type_II", "Obesity_Type_III"), 
                               1, 0)

# Logit model
model_logit <- glm(obese_binary ~ fast_food + calorie_check + age , 
                   data = obesity, family = binomial(link = "logit"))
summary(model_logit)
## 
## Call:
## glm(formula = obese_binary ~ fast_food + calorie_check + age, 
##     family = binomial(link = "logit"), data = obesity)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -3.969660   0.319829 -12.412  < 2e-16 ***
## fast_foodyes      2.405282   0.248792   9.668  < 2e-16 ***
## calorie_checkyes -2.793954   0.594139  -4.703 2.57e-06 ***
## age               0.068205   0.008036   8.488  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2913.2  on 2110  degrees of freedom
## Residual deviance: 2573.9  on 2107  degrees of freedom
## AIC: 2581.9
## 
## Number of Fisher Scoring iterations: 6

Nhằm phân tích các yếu tố ảnh hưởng đến tình trạng béo phì (biến nhị phân obese_binary: 1 = Béo phì, 0 = Không béo phì) nghiên cứu đã xây dựng một mô hình hồi quy logistic có dạng:

\[ \log\left(\frac{P(Y = 1 \mid X)}{1 - P(Y = 1 \mid X)}\right) = \beta_0 + \beta_1 \cdot \text{fast\_foodyes} + \beta_2 \cdot \text{calorie\_checkyes} + \beta_3 \cdot \text{age} \]

Trong đó:

  • Vế trái là logit của xác suất bị béo phì,

  • Biến giải thích gồm:

    • fast_foodyes: thói quen ăn fast food (yes = 1),
    • calorie_checkyes: hành vi kiểm tra lượng calo tiêu thụ (yes = 1),
    • age: tuổi (liên tục),
  • Các hệ số \(\beta\) được ước lượng bằng phương pháp tối đa hóa hợp lý (Maximum Likelihood Estimation).

Diễn giải hệ số hồi quy

Ta có thể diễn giải các hệ số ước lượng theo xác suất bằng cách chuyển từ logit về xác suất:

\[ P(Y = 1 \mid X) = \frac{1}{1 + \exp(-\eta)}, \quad \text{trong đó } \eta = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k \]

    1. Hằng số (Intercept = -3.970)

Với cá nhân không ăn fast food, không kiểm calo, và tuổi bằng 0, logit của xác suất bị béo phì là -3.970, tương ứng với xác suất khoảng:

\[ P \approx \frac{1}{1 + e^{3.97}} \approx 0.0185 \ (1.85\%) \]

Điều này phản ánh xác suất nền rất thấp trong nhóm tham chiếu.

    1. Biến fast_foodyes = 2.405

Khi cá nhân có thói quen ăn fast food, logit tăng thêm 2.405 đơn vị. Odds béo phì tăng:

\[ \exp(2.405) \approx 11.08 \]

Nguy cơ béo phì cao hơn khoảng 11 lần so với người không ăn fast food (giữ các yếu tố khác không đổi).

    1. Biến calorie_checkyes = -2.794

Ngược lại, với người thường xuyên kiểm tra calo, logit giảm đi 2.794 đơn vị → odds giảm:

\[ \exp(-2.794) \approx 0.061 \]

→ Odds béo phì giảm hơn 93%, cho thấy hành vi này có tác dụng bảo vệ mạnh.

    1. Biến age = 0.068

Mỗi năm tuổi tăng thêm làm odds béo phì tăng:

\[ \exp(0.068) \approx 1.07 \]

→ Mỗi năm tăng tuổi tương ứng với odds béo phì tăng 7%, một cách tuyến tính.

5. Kết luận

Mô hình hồi quy logistic cho thấy rằng:

  • Thói quen ăn fast food là yếu tố nguy cơ chính gây béo phì,
  • Hành vi kiểm tra calo có tác dụng phòng tránh mạnh mẽ,
  • Tuổi cũng đóng vai trò trong sự tăng xác suất mắc béo phì.

Tất cả biến đều có ý nghĩa thống kê cao, và mô hình có độ phù hợp tốt, là một lựa chọn hợp lý cho phân tích xác suất béo phì trên tập dữ liệu hiện tại.

5.4.2. Mô hình hồi quy đa biến với liên kết probit

# Probit model
model_probit <- glm(obese_binary ~ fast_food + calorie_check + age , 
                    data = obesity, family = binomial(link = "probit"))
summary(model_probit)
## 
## Call:
## glm(formula = obese_binary ~ fast_food + calorie_check + age, 
##     family = binomial(link = "probit"), data = obesity)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -2.289239   0.170985 -13.389  < 2e-16 ***
## fast_foodyes      1.376574   0.126792  10.857  < 2e-16 ***
## calorie_checkyes -1.460323   0.260395  -5.608 2.05e-08 ***
## age               0.039673   0.004746   8.359  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2913.2  on 2110  degrees of freedom
## Residual deviance: 2578.0  on 2107  degrees of freedom
## AIC: 2586
## 
## Number of Fisher Scoring iterations: 6

Mô hình có dạng:

\[ \Phi^{-1}(P(Y = 1 \mid X)) = \beta_0 + \beta_1 \cdot \text{fast\_foodyes} + \beta_2 \cdot \text{calorie\_checkyes} + \beta_3 \cdot \text{age} \]

Trong đó, \(\Phi^{-1}(\cdot)\) là hàm nghịch đảo của phân phối chuẩn chuẩn hóa (probit link), và các hệ số \(\beta_i\) được ước lượng bằng phương pháp tối đa hóa hợp lý (MLE). Giá trị \(P(Y = 1 \mid X)\) đại diện cho xác suất một cá nhân thuộc nhóm béo phì, dựa trên đặc điểm của họ.

Diễn giải ý nghĩa thống kê

  • Intercept = -2.289: Khi các biến độc lập ở mức tham chiếu (fast_food = "no", calorie_check = "no", và age = 0), giá trị của hàm liên kết (z-score) là -2.289. Tương ứng với xác suất khoảng 1.1%, theo bảng phân phối chuẩn chuẩn hóa.

  • fast_foodyes = 1.377: Những người có thói quen ăn fast food có z-score cao hơn 1.377 đơn vị so với nhóm không ăn, giữ các yếu tố khác không đổi. Điều này cho thấy xác suất béo phì tăng mạnh theo hướng dương — là bằng chứng thống kê rất mạnh cho mối liên hệ giữa fast food và béo phì.

  • calorie_checkyes = -1.460: Việc kiểm soát lượng calo có tác dụng làm giảm xác suất béo phì. Hệ số âm cho thấy cá nhân có hành vi này sẽ có z-score giảm xuống trung bình 1.46 đơn vị, từ đó làm giảm xác suất thuộc nhóm béo phì một cách đáng kể.

  • age = 0.040: Mỗi năm tăng thêm tuổi tương ứng với tăng nhẹ z-score của béo phì khoảng 0.040 đơn vị. Đây là tác động có ý nghĩa thống kê cao, phản ánh xu hướng nguy cơ béo phì tăng dần theo tuổi.

Kết luận

Mô hình probit khẳng định rằng các yếu tố hành vi như ăn fast food thường xuyên hay thiếu kiểm soát calo có ảnh hưởng đáng kể đến xác suất béo phì. Tuổi cũng là một yếu tố nguy cơ độc lập. Mô hình giúp định lượng xác suất mắc béo phì theo từng đặc điểm cá nhân, và có thể ứng dụng trong phân tích nguy cơ sức khỏe cộng đồng cũng như xây dựng mô hình dự báo y tế.

5.4.3. Mô hình hồi quy đa biến với liên kết cloglog

# Complementary log-log model
model_cloglog <- glm(obese_binary ~ fast_food + calorie_check + age , 
                     data = obesity, family = binomial(link = "cloglog"))
summary(model_cloglog)
## 
## Call:
## glm(formula = obese_binary ~ fast_food + calorie_check + age, 
##     family = binomial(link = "cloglog"), data = obesity)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -3.205065   0.259858 -12.334  < 2e-16 ***
## fast_foodyes      2.023640   0.231502   8.741  < 2e-16 ***
## calorie_checkyes -2.561381   0.579753  -4.418 9.96e-06 ***
## age               0.035774   0.004934   7.251 4.15e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2913.2  on 2110  degrees of freedom
## Residual deviance: 2589.5  on 2107  degrees of freedom
## AIC: 2597.5
## 
## Number of Fisher Scoring iterations: 10

Mô hình có dạng:

\[ \log(-\log(1 - P(Y = 1 \mid X))) = \beta_0 + \beta_1 \cdot \text{fast\_foodyes} + \beta_2 \cdot \text{calorie\_checkyes} + \beta_3 \cdot \text{age} \]

Trong đó:

  • \(P(Y = 1 \mid X)\): xác suất một cá nhân rơi vào nhóm béo phì,
  • Hàm liên kết cloglog thường được sử dụng khi xác suất xảy ra của sự kiện là thấp (trái với logit, probit phù hợp hơn cho xác suất trung bình),
  • Các hệ số \(\beta_i\) được ước lượng bằng phương pháp tối đa hóa hàm hợp lý (MLE).

Diễn giải ý nghĩa các hệ số

  • Intercept = -3.205: Với các cá nhân không ăn fast food, không kiểm calotuổi bằng 0, cloglog của xác suất mắc béo phì là -3.205. Điều này tương đương xác suất xảy ra rất thấp, gần 4% theo hàm nghịch đảo cloglog.

  • Fast_foodyes = 2.024: Khi một cá nhân có thói quen ăn fast food, cloglog của xác suất mắc béo phì tăng thêm 2.024 đơn vị, tương ứng với xác suất tăng mạnh. Điều này cho thấy fast food là một yếu tố nguy cơ rất mạnh đối với béo phì.

  • Calorie_checkyes = -2.561: Những người có hành vi kiểm soát lượng calo nạp vào có cloglog giảm 2.561 đơn vị, tức là xác suất bị béo phì giảm đáng kể so với nhóm không kiểm calo. Đây là yếu tố bảo vệ.

  • Age = 0.036: Mỗi năm tuổi tăng thêm làm tăng cloglog của xác suất béo phì khoảng 0.036 đơn vị. Điều này phản ánh nguy cơ tăng dần theo độ tuổi.

Để chuyển cloglog thành xác suất cụ thể, ta dùng công thức nghịch đảo:

\[ P(Y = 1 \mid X) = 1 - \exp(-\exp(\eta)), \quad \text{trong đó } \eta = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k \]

Ví dụ, với một cá nhân 18 tuổi, ăn fast food, không kiểm tra calo: \(\eta = -3.205 + 2.024 \cdot 1 - 2.561 \cdot 0 + 0.036 \cdot 18 = -3.205 + 2.024 + 0 + 0.648 = -0.533\)

\[ P \approx 1 - \exp(-\exp(-0.533)) \approx 1 - \exp(-1.704) \approx 0.817 \]

→ Xác suất mắc béo phì rất cao.

Kết luận

Mô hình cloglog cho thấy rằng:

  • Thói quen ăn fast food làm tăng đáng kể nguy cơ mắc béo phì,
  • Kiểm soát lượng calo có tác dụng bảo vệ rõ rệt,
  • Tuổi tác là yếu tố góp phần làm tăng nguy cơ theo thời gian.

Với tất cả các hệ số đều có ý nghĩa thống kê cao, mô hình cloglog là một lựa chọn phù hợp khi phân tích các sự kiện có xác suất cao nhưng không cân xứng giữa hai nhóm. Tuy nhiên, so với logit và probit, cloglog có AIC lớn hơn, vì vậy có thể ít phù hợp hơn trong trường hợp cụ thể của bộ dữ liệu này.

5.4.4. So sánh mô hình theo tiêu chí AIC

Để đánh giá và lựa chọn mô hình tốt nhất trong số các mô hình hồi quy nhị phân đã xây dựng (logit, probit, cloglog), chúng ta sử dụng tiêu chí Akaike Information Criterion (AIC). AIC là thước đo phổ biến trong thống kê dùng để cân bằng giữa độ phù hợp (goodness-of-fit)độ phức tạp của mô hình (model complexity).

Công thức AIC:

\[ \text{AIC} = -2\log(L) + 2k \]

Trong đó:

  • \(\log(L)\): Log-likelihood của mô hình (mức độ phù hợp với dữ liệu)
  • \(k\): Số tham số trong mô hình (bao gồm hệ số và intercept)
AIC(model_logit, model_probit, model_cloglog)
##               df      AIC
## model_logit    4 2581.882
## model_probit   4 2585.990
## model_cloglog  4 2597.481
  • Mô hình logit có AIC nhỏ nhất (2581.882), cho thấy nó cung cấp sự cân bằng tốt nhất giữa tính đơn giản và khả năng giải thích dữ liệu.
  • Mặc dù mô hình probit có độ phù hợp gần tương đương (AIC = 2585.990), nhưng cao hơn nên bị loại trừ theo nguyên lý tối ưu AIC.
  • Mô hình cloglog có AIC cao nhất (2597.481), cho thấy ít phù hợp hơn so với hai mô hình còn lại cho bộ dữ liệu này.

Trên cơ sở tiêu chí AIC, mô hình hồi quy logit được đánh giá là lựa chọn tốt nhất để mô tả xác suất béo phì dựa trên các yếu tố fast_food, calorie_checkage. Ngoài ra, mô hình logit còn có ưu điểm vượt trội ở khả năng diễn giải hệ số dưới dạng odds ratio, giúp giải thích rõ ràng tác động của từng biến độc lập lên xác suất béo phì – điều này đặc biệt hữu ích trong các phân tích dịch tễ học hoặc khoa học hành vi.

**5.4.4. So sánh mô hình theo *Brier Score**

Bên cạnh AIC, một chỉ số phổ biến khác để đánh giá chất lượng mô hình phân loại nhị phân là Brier Score. Đây là thước đo độ chính xác của dự báo xác suất.

Công thức Brier Score:

\[ \text{Brier Score} = \frac{1}{n} \sum_{i=1}^n (\hat{p}_i - y_i)^2 \]

Trong đó:

  • \(\hat{p}_i\): Xác suất dự đoán của mô hình cho quan sát thứ \(i\)

  • \(y_i \in \{0, 1\}\): Nhãn thực tế (0: Non-obese, 1: Obese)

  • Ý nghĩa của Brier Score: Chỉ số này đo lường khoảng cách trung bình giữa xác suất dự đoán và nhãn thực tế. Giá trị càng gần 0 thì mô hình càng chính xác. Giá trị tối đa có thể là 0.25 nếu mô hình đoán xác suất = 0.5 cho tất cả các quan sát.

BrierScore(model_logit) 
## [1] 0.2131631
BrierScore(model_probit)
## [1] 0.2135052
BrierScore(model_cloglog)
## [1] 0.2150504
  • Mô hình logit có Brier Score thấp nhất (0.2132), thể hiện rằng xác suất dự đoán gần đúng nhất với thực tế, trong ba mô hình được so sánh.

  • Mặc dù sự khác biệt giữa logit và probit không lớn (chênh lệch ≈ 0.0003), mô hình cloglog thể hiện kém hơn đáng kể, với sai lệch xác suất dự đoán trung bình lớn hơn.

  • Điều này phù hợp với kết quả AIC, khi logit có AIC thấp nhất. Hai chỉ số này cùng cho thấy rằng mô hình logit là ứng viên tốt nhất.

Dựa trên chỉ số Brier Score, ta kết luận rằng mô hình hồi quy logit không chỉ có AIC thấp mà còn có độ chính xác xác suất cao nhất khi dự đoán khả năng một cá nhân thuộc nhóm béo phì.

Do đó, mô hình logit tiếp tục được lựa chọn là mô hình hồi quy nhị phân ưu việt nhất trong nghiên cứu này, cả về mức độ phù hợp lẫn hiệu quả dự đoán.

** 5.4.5. Ma trận nhầm lẫn**

# Dự báo xác suất từ mô hình hồi quy logistic
pred_logit <- predict(model_logit, type = "response")

# Tính ngưỡng phân loại tốt nhất từ ROC
library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following object is masked from 'package:gmodels':
## 
##     ci
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
roc_logit <- roc(obesity$obese_binary, pred_logit)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
thresh <- coords(roc_logit, "best", ret = "threshold")

# Phân loại nhị phân theo ngưỡng
pred_logit_label <- ifelse(pred_logit >= as.numeric(thresh), 1, 0)

# Ma trận nhầm lẫn đầy đủ thông tin
library(caret)
## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
## 
##     MAE, RMSE
## The following object is masked from 'package:purrr':
## 
##     lift
cm_logit <- confusionMatrix(
  factor(pred_logit_label), 
  factor(obesity$obese_binary), 
  positive = "1"
)

# Hiển thị bảng confusion matrix
cm_logit$table
##           Reference
## Prediction   0   1
##          0 701 196
##          1 438 776

Đánh giá năng lực phân loại của mô hình hồi quy logistic

Sau khi xây dựng mô hình hồi quy logistic nhị phân với công thức:

\[ \log\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 \cdot \text{fast\_food} + \beta_2 \cdot \text{calorie\_check} + \beta_3 \cdot \text{age} \]

ta sử dụng mô hình này để ước lượng xác suất cá nhân thuộc nhóm béo phì.

Từ các xác suất dự đoán, ta cần chuyển về nhãn phân loại nhị phân (Obese hoặc Non-Obese). Việc chọn ngưỡng phân loại tối ưu không nên dùng mặc định 0.5, mà nên dựa trên hiệu quả phân biệt thật sự của mô hình.

  • Ngưỡng phân loại tối ưu được chọn theo tiêu chí Youden’s Index từ đường cong ROC:

    \[ \text{Youden's J} = \text{Sensitivity} + \text{Specificity} - 1 \]

  • Ngưỡng tối ưu tìm được từ ROC là: 0.467

Sau khi phân loại với ngưỡng tối ưu, ta thu được kết quả như sau:

Thực tế: Non-Obese (0) Thực tế: Obese (1)
Dự báo: 0 701 (True Negative) 196 (False Negative)
Dự báo: 1 438 (False Positive) 776 (True Positive)

Dựa trên ma trận trên, ta có thể tính các chỉ số đánh giá mô hình như sau:

  • Accuracy (Độ chính xác):

    \[ \frac{TP + TN}{TP + TN + FP + FN} = \frac{701 + 776}{701 + 776 + 438 + 196} \approx 0.7016 \]

  • Sensitivity (Recall/True Positive Rate):

    \[ \frac{TP}{TP + FN} = \frac{776}{776 + 196} \approx 0.798 \]

  • Specificity (True Negative Rate):

    \[ \frac{TN}{TN + FP} = \frac{701}{701 + 438} \approx 0.615 \]

  • Precision (Positive Predictive Value):

    \[ \frac{TP}{TP + FP} = \frac{776}{776 + 438} \approx 0.639 \]

Nhận xét và kết luận

Mô hình hồi quy logistic có khả năng phân biệt tốt các cá nhân béo phì với độ nhạy (sensitivity) khá cao ~80%. Tuy nhiên, độ đặc hiệu còn hạn chế (~61%), cho thấy mô hình dễ mắc lỗi dự đoán nhầm người không béo phì thành béo phì.

Nhìn chung, với độ chính xác tổng thể khoảng 70% và cân bằng tương đối giữa các chỉ số, mô hình thể hiện hiệu suất phù hợp trong bối cảnh dữ liệu xã hội và hành vi sức khỏe. Tuy nhiên, trong ứng dụng thực tế, cần xem xét giá trị của các sai lệch loại I và loại II để điều chỉnh ngưỡng cho phù hợp với mục tiêu (phát hiện sớm hay tránh cảnh báo sai).

5.4.6. Dự báo xác suất béo phì từ mô hình hồi quy logistic

new_cases <- data.frame(
  fast_food = factor(c("yes", "no"), levels = c("no", "yes")),
  calorie_check = factor(c("no", "yes"), levels = c("no", "yes")),
  age = c(18, 45)
)
# Dự báo xác suất theo mô hình logistic
new_cases$prob_obesity <- predict(model_logit, newdata = new_cases, type = "response")
# Xem kết quả
new_cases
##   fast_food calorie_check age prob_obesity
## 1       yes            no  18   0.41661561
## 2        no           yes  45   0.02425978

Thông tin mô hình sử dụng:

  • Mô hình hồi quy logistic nhị phân (model_logit) có công thức:

    \[ \log\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 \cdot \text{fast_food}_{\text{yes}} + \beta_2 \cdot \text{calorie_check}_{\text{yes}} + \beta_3 \cdot \text{age} \]

    Trong đó:

    • \(p\): xác suất dự đoán cá nhân thuộc nhóm Obese.
    • Các biến giải thích bao gồm: thói quen ăn fast food, hành vi kiểm tra calorie, và tuổi.

Diễn giải từng trường hợp:

  • Trường hợp 1: Một cá nhân 18 tuổi, có ăn fast food thường xuyênkhông kiểm tra lượng calorie:

    • Mô hình dự báo xác suất cá nhân này thuộc nhóm béo phì41.66%.
    • Điều này phản ánh nguy cơ khá cao, đặc biệt do có thói quen ăn fast food và không có hành vi kiểm soát năng lượng ăn vào.
  • Trường hợp 2: Một cá nhân 45 tuổi, không ăn fast foodcó kiểm tra calorie thường xuyên:

    • Xác suất béo phì chỉ là 2.43%, tức rất thấp.
    • Việc không ăn fast food kết hợp với ý thức kiểm soát calorie giúp giảm mạnh nguy cơ, mặc dù độ tuổi cao hơn.

5.4.7. Kết luận

Trong bài nghiên cứu này, đã sử dụng một tập dữ liệu hành vi và nhân khẩu học để tìm hiểu mối liên hệ giữa các yếu tố như thói quen ăn fast food, kiểm soát lượng calo và độ tuổi đến tình trạng béo phì của cá nhân. Biến phụ thuộc là nhị phân (béo phì hoặc không), được trích xuất từ nhãn nhiều cấp ban đầu.

Các phân tích thống kê được triển khai gồm:

  • Kiểm định Chi bình phương, tỷ số rủi ro (Relative risk) và tỷ số odds (Odds Ratio) để khảo sát mối liên hệ định tính giữa các biến.
  • Mô hình hồi quy nhị phân tổng quát (GLM) được triển khai với ba hàm liên kết: logit, probit và cloglog nhằm đánh giá tác động đồng thời của nhiều yếu tố đến xác suất béo phì.
  • Các mô hình được so sánh bằng AIC và Brier Score, đồng thời đánh giá độ chính xác qua ma trận nhầm lẫnROC Curve.

Kết quả nổi bật:

  • Thói quen ăn fast food là yếu tố nguy cơ có ý nghĩa thống kê cao, với OR = 12.31, cho thấy nhóm này có odds mắc béo phì cao gấp ~12 lần nhóm không ăn.
  • Việc kiểm soát lượng calo liên quan rõ rệt tới giảm nguy cơ béo phì (OR = 0.036, rất thấp).
  • Tuổi cũng là yếu tố nguy cơ: xác suất béo phì tăng theo tuổi (hệ số β > 0 trong cả 3 mô hình).
  • Mô hình logistic có hiệu quả phân loại tốt nhất với AIC thấp nhất (2581.9)Brier Score nhỏ nhất (0.213), độ chính xác tổng thể khoảng 70%.

Hạn chế của nghiên cứu

  • Dữ liệu cắt ngang: chỉ phản ánh thời điểm hiện tại, không thể suy ra quan hệ nhân quả.
  • Biến định tính nhiều cấp đã được mã hóa nhị phân, điều này có thể làm mất đi một phần thông tin chi tiết ban đầu.
  • Thiếu dữ liệu lâm sàng: không bao gồm các yếu tố y sinh học như gen, chỉ số mỡ máu, hoặc tiền sử bệnh.
  • Mô hình tuyến tính đơn giản có thể không đủ linh hoạt với các mối quan hệ phi tuyến hoặc tương tác phức tạp.

Đề xuất và hướng phát triển

  • Áp dụng các mô hình nâng cao hơn như hồi quy logistic đa cấp, random forest hoặc mô hình học máy để cải thiện khả năng dự đoán.
  • Kết hợp thêm biến định lượng bổ sung (như khẩu phần ăn, vận động định lượng) để mô hình chính xác hơn.
  • Triển khai nghiên cứu dọc (longitudinal) để theo dõi thay đổi cân nặng theo thời gian nhằm xác định nguyên nhân – kết quả.
  • Kiểm tra tương tác giữa các biến (chẳng hạn: độ tuổi × fast food) để hiểu sâu hơn tác động kết hợp.

Tổng kết

Phân tích thống kê cho thấy có mối liên hệ mạnh giữa hành vi tiêu dùng thực phẩm và béo phì. Việc thay đổi các yếu tố hành vi như hạn chế fast foodchú trọng kiểm soát calo có thể đóng vai trò quan trọng trong chiến lược phòng chống béo phì. Đồng thời, các mô hình thống kê đơn giản vẫn có thể cung cấp những kết quả định lượng đáng tin cậy, phục vụ cho việc ra quyết định trong lĩnh vực sức khỏe cộng đồng.

LS0tDQp0aXRsZTogJ1RJ4buCVSBMVeG6rE4gUEjDgk4gVMONQ0ggROG7riBMSeG7hlUgxJDhu4pOSCBUw41OSCcNCmF1dGhvcjogIkhvw6BuZyBRdXnDqm4iDQpkYXRlOiAgImAyNy0wNy0yMDI1YCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZSAgDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiA1DQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiB0cnVlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KYGBgIHtjc3MsIGVjaG8gPSBGQUxTRX0NCmgxIHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMzJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIH0NCg0KaDIgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiANCn0NCg0KaDMgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpoNCB7Zm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KICB9DQoNCmJvZHkgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAxOHB4Ow0KICANCn0NCnA6bm90KGgxKTpub3QoaDIpOm5vdChoMyk6bm90KGg0KTpub3QoaDUpIHsNCiAgdGV4dC1pbmRlbnQ6IDJlbTt9DQpwIHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgfQ0KLnRvY2lmeS1oZWFkZXIgew0KICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KYGBgICANCg0KYGBge3IgZWNobz1UUlVFLCBldmFsPUZBTFNFfQ0KIyAxLiBMb2FkIGPDoWMgdGjGsCB2aeG7h24gY+G6p24gdGhp4bq/dA0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KbGlicmFyeShEZXNjVG9vbHMpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShlbmVyZ3kpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShyZXNoYXBlMikNCmBgYA0KDQpgYGB7ciAgZWNobz1UUlVFLCBldmFsPUZBTFNFfQ0KbGlicmFyeShtYWdpY2spDQoNCmltZyA8LSBpbWFnZV9yZWFkKCJDOi9Vc2Vycy9Ib2FuZyBRdXllbi9Eb3dubG9hZHMvYmlhdGwucG5nIikNCnByaW50KGltZykNCg0KYGBgDQoNCg0KIyAqKjEuIEzhu5xJIEPhuqJNIMagTioqDQoNCkVtIHhpbiBjaMOibiB0aMOgbmggYsOgeSB04buPIGzDsm5nIGJp4bq/dCDGoW4gc8OidSBz4bqvYyDEkeG6v24gVGjhuqd5IFRy4bqnbiBN4bqhbmggVMaw4budbmcgxJHDoyBkw6BuaCB0aOG7nWkgZ2lhbiwgY8O0bmcgc+G7qWMgxJHhu4MgdHJ1eeG7gW4gxJHhuqF0IGtp4bq/biB0aOG7qWMgdsOgIGtpbmggbmdoaeG7h20gcXXDvSBiw6F1IHRyb25nIG3DtG4gaOG7jWMgKioiUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCIqKi4gTmjhu50gc+G7sSBoxrDhu5tuZyBk4bqrbiB04bqtbiB0w6xuaCwgcGjGsMahbmcgcGjDoXAgZ2nhuqNuZyBk4bqheSBraG9hIGjhu41jIGPDuW5nIG5o4buvbmcgdsOtIGThu6UgbWluaCBo4buNYSBzaW5oIMSR4buZbmcgY+G7p2EgVGjhuqd5LCBlbSDEkcOjIGPDsyB0aOG7gyBoaeG7g3UgcsO1IGLhuqNuIGNo4bqldCBj4bunYSBuZ2hpw6puIGPhu6l1IMSR4buLbmggdMOtbmgsIG7huq9tIHbhu69uZyBjw6FjIGvhu7kgdGh14bqtdCBwaMOibiB0w61jaCB2w6Ag4bupbmcgZOG7pW5nIGNow7puZyB2w6BvIHRo4buxYyB04bq/IG3hu5l0IGPDoWNoIGhp4buHdSBxdeG6oy4gRW0gbW9uZyBy4bqxbmcgbmjhu69uZyBraeG6v24gdGjhu6ljIHRodSBuaOG6rW4gxJHGsOG7o2Mgc+G6vSBsw6AgaMOgbmggdHJhbmcgduG7r25nIGNo4bqvYyBjaG8gaMOgbmggdHLDrG5oIGjhu41jIHRodeG6rXQgdsOgIG5naOG7gSBuZ2hp4buHcCBzYXUgbsOgeS4gTeG7mXQgbOG6p24gbuG7r2EsIGVtIHhpbiBn4butaSBs4budaSB0cmkgw6JuIGNow6JuIHRow6BuaCBuaOG6pXQgxJHhur9uIFRo4bqneS4gS8OtbmggY2jDumMgVGjhuqd5IGx1w7RuIGThu5NpIGTDoG8gc+G7qWMga2jhu49lLCBo4bqhbmggcGjDumMgdsOgIHRp4bq/cCB04bulYyBsYW4gdOG7j2EgdHJpIHRo4bupYyDEkeG6v24gbmhp4buBdSB0aOG6vyBo4buHIHNpbmggdmnDqm4uDQoNCiMgKioyLiBM4bucSSBDQU0gxJBPQU4qKg0KDQpUw7RpIHhpbiBjYW0gxJFvYW4gcuG6sW5nIG5o4buvbmcga2nhur9uIHRo4bupYyB2w6Aga+G7uSBuxINuZyB0aHUgbmjhuq1uIMSRxrDhu6NjIHThu6sgbcO0biBo4buNYyAiUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCIgZMaw4bubaSBz4buxIGjGsOG7m25nIGThuqtuIGPhu6dhIFRo4bqneSAgc+G6vSDEkcaw4bujYyB0w7RpIHbhuq1uIGThu6VuZyBt4buZdCBjw6FjaCBuZ2hpw6ptIHTDumMsIGPDsyBo4buHIHRo4buRbmcgdsOgIGhp4buHdSBxdeG6oyB0cm9uZyBjw6FjIGhv4bqhdCDEkeG7mW5nIGjhu41jIHRodeG6rXQgY8WpbmcgbmjGsCBjw7RuZyB2aeG7h2MgY2h1ecOqbiBtw7RuIHNhdSBuw6B5LiBUw7RpIGNhbSBr4bq/dCBz4butIGThu6VuZyBjw6FjIHBoxrDGoW5nIHBow6FwIHBow6JuIHTDrWNoIMSR4buLbmggdMOtbmggxJHDoyDEkcaw4bujYyBo4buNYyBt4buZdCBjw6FjaCBjaMOtbmggeMOhYywgdHXDom4gdGjhu6cgY8OhYyBuZ3V5w6puIHThuq9jIG5naGnDqm4gY+G7qXUga2hvYSBo4buNYyB2w6AgxJHhuqFvIMSR4bupYyBo4buNYyB0aHXhuq10LiDEkOG7k25nIHRo4budaSwgdMO0aSBsdcO0biBnaGkgbmjhu5sgdsOgIHRyw6JuIHRy4buNbmcgbmjhu69uZyBjaOG7iSBk4bqrbiBxdcO9IGLDoXUgY+G7p2EgZ2nhuqNuZyB2acOqbiwgY29pIMSRw6J5IGzDoCBu4buBbiB04bqjbmcgcXVhbiB0cuG7jW5nIMSR4buDIHBow6F0IHRyaeG7g24gbsSDbmcgbOG7sWMgbmdoacOqbiBj4bupdSB2w6AgdMawIGR1eSBwaMOibiB0w61jaCBj4bunYSBi4bqjbiB0aMOibiwgIGhvw6BuIHRvw6BuIGNo4buLdSB0csOhY2ggbmhp4buHbSB24buBIHZp4buHYyDDoXAgZOG7pW5nIG5o4buvbmcga2nhur9uIHRo4bupYyBuw6B5IHbDoG8gdGjhu7FjIHRp4buFbiB2w6AgY2FtIGvhur90IHBow6F0IGh1eSBnacOhIHRy4buLIG3DtG4gaOG7jWMgbeG7mXQgY8OhY2ggdOG7kXQgbmjhuqV0Lg0KDQojICoqMy4gVOG7lE5HIFFVQU4gTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMy4xLiBN4bukQyBUScOKVSBOR0hJw4pOIEPhu6hVKioNCg0KTeG7pWMgdGnDqnUgY+G7p2EgbmdoacOqbiBj4bupdSBuw6B5IGzDoCBwaMOibiB0w61jaCBjw6FjIHnhur91IHThu5EgbGnDqm4gcXVhbiDEkeG6v24gdMOsbmggdHLhuqFuZyBiw6lvIHBow6wgY+G7p2EgY8OhIG5ow6JuIGThu7FhIHRyw6puIGThu68gbGnhu4d1IHkgdOG6vyB0aHUgdGjhuq1wIMSRxrDhu6NjLiBUcuG7jW5nIHTDom0gbMOgIHTDrG0gaGnhu4N1IG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBow6BuaCB2aSBzaW5oIGhv4bqhdCAoxJHhurdjIGJp4buHdCBsw6AgdGjDs2kgcXVlbiDEg24gZmFzdCBmb29kLCBow6BuaCB2aSBraeG7g20gc2/DoXQgY2FsbywgbeG7qWMgxJHhu5kgaG/huqF0IMSR4buZbmcgdGjhu4MgY2jhuqV0IHbDoCB0acOqdSB0aOG7pSBuxrDhu5tjKSB24bubaSB4w6FjIHN14bqldCBt4bqvYyBiw6lvIHBow6wuIFThu6sgxJHDsywgeMOhYyDEkeG7i25oIGPDoWMgeeG6v3UgdOG7kSBuZ3V5IGPGoSBxdWFuIHRy4buNbmcgbmjhurFtIHBo4bulYyB24bulIGPDtG5nIHTDoWMgZOG7sSBwaMOybmcgdsOgIGtp4buDbSBzb8OhdCBiw6lvIHBow6wgdHJvbmcgY+G7mW5nIMSR4buTbmcuDQoNCk5naGnDqm4gY+G7qXUgdOG6rXAgdHJ1bmcgdsOgbyBjw6FjIGLGsOG7m2M6IG3DtCB04bqjIMSR4bq3YyDEkWnhu4NtIHBow6JuIHBo4buRaSBj4bunYSBiaeG6v24gYsOpbyBwaMOsIChgb2Jlc2l0eV9ncm91cGApIHbDoCBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIHRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EgdsOgIGJp4buDdSDEkeG7kzsga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgdGjhu5FuZyBrw6ogxJHhu4MgcGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCB24bubaSBiw6lvIHBow6wgYuG6sW5nIGtp4buDbSDEkeG7i25oIENoaS1zcXVhcmVkLCB0w61uaCB0b8OhbiAqKlJlbGF0aXZlIHJpc2sgKFJSKSoqIHbDoCAqKk9kZHMgUmF0aW8gKE9SKSoqOyB2w6AgY3Xhu5FpIGPDuW5nLCB4w6J5IGThu7FuZyBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gKGxvZ2l0LCBwcm9iaXQsIGNsb2dsb2cpIMSR4buDIGzGsOG7o25nIGjDs2Eg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIGJp4bq/biDEkeG6v24geMOhYyBzdeG6pXQgYsOpbyBwaMOsLiBOZ2/DoGkgcmEsIG3DtCBow6xuaCDEkcaw4bujYyDEkcOhbmggZ2nDoSB0aMO0bmcgcXVhIGPDoWMgY2jhu4kgc+G7kSDEkeG7mSBwaMO5IGjhu6NwIG5oxrAgQUlDLCBCcmllciBTY29yZSB2w6AgaGnhu4d1IHN14bqldCBwaMOibiBsb+G6oWkgKENvbmZ1c2lvbiBNYXRyaXgpLg0KDQoNCiMjICoqMy4yLiBQSMavxqBORyBQSMOBUCBOR0hJw4pOIEPhu6hVKioNCg0KTmdoacOqbiBj4bupdSDDoXAgZOG7pW5nIHF1eSB0csOsbmggcGjDom4gdMOtY2ggxJHhu4tuaCBsxrDhu6NuZyB0aGVvIGJhIGdpYWkgxJFv4bqhbiBjaMOtbmg6DQoNCiogKiooMSkgVGjhu5FuZyBrw6ogbcO0IHThuqMqKjogQ8OhYyDEkeG6t2MgxJFp4buDbSBwaMOibiBwaOG7kWkgY+G7p2EgYmnhur9uIHBo4bulIHRodeG7mWMgYG9iZXNpdHlfZ3JvdXBgIChob+G6t2MgZOG6oW5nIG5o4buLIHBow6JuIGBvYmVzZV9iaW5hcnlgKSB2w6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIG5oxrAgYGZhc3RfZm9vZGAsIGBjYWxvcmllX2NoZWNrYCwgYGFnZWAgxJHGsOG7o2Mga2jhuqNvIHPDoXQgYuG6sW5nIGLhuqNuZyB04bqnbiBz4buRLCBiaeG7g3UgxJHhu5MgY+G7mXQgdsOgIGJp4buDdSDEkeG7kyBwaMOibiBi4buRLiDEkGnhu4F1IG7DoHkgZ2nDunAgbmjhuq1uIGRp4buHbiB4dSBoxrDhu5tuZyB2w6AgY+G6pXUgdHLDumMgY8ahIGLhuqNuIHRyb25nIGThu68gbGnhu4d1Lg0KDQoqICoqKDIpIFBow6JuIHTDrWNoIHN1eSBkaeG7hW4qKjogU+G7rSBk4bulbmcgYuG6o25nIGNow6lvIHbDoCBraeG7g20gxJHhu4tuaCDPh8KyIMSR4buDIGtp4buDbSB0cmEgZ2nhuqMgdGh1eeG6v3QgduG7gSB0w61uaCDEkeG7mWMgbOG6rXAgZ2nhu69hIHTDrG5oIHRy4bqhbmcgYsOpbyBwaMOsIHbDoCBjw6FjIHnhur91IHThu5EgaMOgbmggdmkuIE5nb8OgaSByYSwgY8OhYyBjaOG7iSBz4buRIMSRbyBsxrDhu51uZyBuZ3V5IGPGoSBuaMawICoqVOG7tyBz4buRIHLhu6dpIHJvIChSUikqKiB2w6AgKipU4bu3IHPhu5Egb2RkcyAoT1IpKiogxJHGsOG7o2MgdMOtbmggdG/DoW4gbmjhurFtIMSR4buLbmggbMaw4bujbmcgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgdMawxqFuZyDEkeG7kWkuIEPDoWMgcGjDqXAga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIChwcm9wLnRlc3QpIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHNvIHPDoW5oIHjDoWMgc3XhuqV0IGLDqW8gcGjDrCBnaeG7r2EgY8OhYyBuaMOzbS4NCg0KKiAqKigzKSBYw6J5IGThu7FuZyBtw7QgaMOsbmggaOG7k2kgcXV5Kio6IMSQ4buDIGThu7EgYsOhbyB4w6FjIHN14bqldCBt4bqvYyBiw6lvIHBow6wsIGJhIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gxJHGsOG7o2MgeMOieSBk4buxbmcg4bupbmcgduG7m2kgYmEgaMOgbSBsacOqbiBr4bq/dDogKipsb2dpdCoqLCAqKnByb2JpdCoqLCB2w6AgKipjb21wbGVtZW50YXJ5IGxvZy1sb2cgKGNsb2dsb2cpKiouIEPDoWMgbcO0IGjDrG5oIMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyBi4bqxbmcgcGjGsMahbmcgcGjDoXAgKip04buRaSDEkWEgaMOzYSBow6BtIGjhu6NwIGzDvSoqIChNTEUpLiBIaeG7h3UgcXXhuqMgY+G7p2EgdOG7q25nIG3DtCBow6xuaCDEkcaw4bujYyDEkcOhbmggZ2nDoSB2w6Agc28gc8OhbmggdGjDtG5nIHF1YSAqKkFJQyAoQWthaWtlIEluZm9ybWF0aW9uIENyaXRlcmlvbikqKiwgKipCcmllciBTY29yZSoqLCB2w6AgKiptYSB0cuG6rW4gbmjhuqdtIGzhuqtuIChjb25mdXNpb24gbWF0cml4KSoqLiBDw6FjIGjhu4cgc+G7kSBo4buTaSBxdXkgxJHGsOG7o2MgZ2nhuqNpIHRow61jaCB24buBIG3hurd0IHjDoWMgc3XhuqV0IHbDoCBvZGRzIMSR4buDIGN1bmcgY+G6pXAgY8OhaSBuaMOsbiDEkeG7i25oIGzGsOG7o25nIHbhu4Eg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIGJp4bq/bi4NCg0KVG/DoG4gYuG7mSBxdXkgdHLDrG5oIHBow6JuIHTDrWNoIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gYuG6sW5nICoqcGjhuqduIG3hu4FtIFJTdHVkaW8qKiwgduG7m2kgc+G7sSBo4buXIHRy4bujIGPhu6dhIGPDoWMgZ8OzaSB0aMawIHZp4buHbiBuaMawIGBkcGx5cmAsIGBnZ3Bsb3QyYCwgYGVwaVJgLCBgcFJPQ2AsIHbDoCBgY2FyZXRgLCDEkeG6o20gYuG6o28gxJHhu5kgY2jDrW5oIHjDoWMsIGto4bqjIHTDoWkgbOG6rXAgdsOgIHR1w6JuIHRo4bunIGPDoWMgbmd1ecOqbiB04bqvYyBwaMOibiB0w61jaCBk4buvIGxp4buHdSB5IHThur8gLSB0aOG7kW5nIGvDqiBoaeG7h24gxJHhuqFpLg0KDQojICoqNC4gVOG7lE5HIEjhu6JQIEPGoCBT4bueIEzDnSBUSFVZ4bq+VCoqDQoNCg0KIyMgKio0LjEuIFRo4buRbmcga8OqIG3DtCB04bqjKioNCg0KVGjhu5FuZyBrw6ogbcO0IHThuqMgbMOgIGLGsOG7m2MgxJHhuqd1IHRpw6puIHRyb25nIHBow6JuIHTDrWNoIGThu68gbGnhu4d1LCBuaOG6sW0gdMOzbSB04bqvdCDEkeG6t2MgxJFp4buDbSBjxqEgYuG6o24gY+G7p2EgdOG6rXAgZOG7ryBsaeG7h3UuIMSQ4buRaSB24bubaSBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oLCBjw6FjIGPDtG5nIGPhu6UgbmjGsCBi4bqjbmcgdOG6p24gc+G7kSwgYmnhu4N1IMSR4buTIGPhu5l0LCBiaeG7g3UgxJHhu5MgdHLDsm4gxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgbcO0IHThuqMgc+G7sSBwaMOibiBi4buRIGPhu6dhIHThu6tuZyBiaeG6v24uIMSQ4buRaSB24bubaSBk4buvIGxp4buHdSDEkeG7i25oIGzGsOG7o25nLCBjw6FjIGNo4buJIHPhu5EgbmjGsCB0cnVuZyBiw6xuaCwgdHJ1bmcgduG7iywgxJHhu5kgbOG7h2NoIGNodeG6qW4sIHBoxrDGoW5nIHNhaSBnacO6cCBoaeG7g3UgcsO1IHh1IGjGsOG7m25nIHRydW5nIHTDom0gdsOgIMSR4buZIGJp4bq/biB0aGnDqm4gY+G7p2EgZOG7ryBsaeG7h3UuDQoNClThuqduIHPhu5EgKGZyZXF1ZW5jeSkgdsOgIHThu7cgbOG7hyBwaOG6p24gdHLEg20gKHByb3BvcnRpb24pIGNobyBiaeG6v24gxJHhu4tuaCB0w61uaC4NCkJp4buDdSDEkeG7kyBj4buZdCAoYmFyIHBsb3QpIGhv4bq3YyBiaeG7g3UgxJHhu5MgdHLDsm4gKHBpZSBjaGFydCkgxJHhu4MgbWluaCBo4buNYSB0cuG7sWMgcXVhbi4NClThu7cgc+G7kSBjaMOqbmggbOG7h2NoIChvZGRzIHJhdGlvLCBPUikgdsOgIHThu7cgc+G7kSBuZ3V5IGPGoSAoUmVsYXRpdmUgUmlzaywgUlIpIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIG3DtCB04bqjIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGhhaSBiaeG6v24gbmjhu4sgcGjDom4uDQoNCiMjICoqNC4yLiBUaOG7kW5nIGvDqiBzdXkgZGnhu4VuKioNCg0KxJDhu4Mga2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgduG7gSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgYmnhur9uLCBjw6FjIHBoxrDGoW5nIHBow6FwIHN1eSBkaeG7hW4gxJHGsOG7o2Mgw6FwIGThu6VuZyBiYW8gZ+G7k206DQoNCiMjIyAqKjQuMi4xIEtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyAoQ2hpLXNxdWFyZSB0ZXN0KSoqDQoNCk3hu6VjIMSRw61jaDoga2nhu4NtIHRyYSBz4buxIMSR4buZYyBs4bqtcCBnaeG7r2EgaGFpIGJp4bq/biDEkeG7i25oIHTDrW5oLg0KDQpHaeG6oyB0aHV54bq/dDoNCg0KJEhfMCQ6IEhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KJEhfMSQ6IEhhaSBiaeG6v24gY8OzIG3hu5FpIGxpw6puIGjhu4cuDQoNCkPDtG5nIHRo4bupYyB0aOG7kW5nIGvDqjoNCg0KJCQgXGNoaV4yID0gXHN1bSBcZnJhY3soT197aWp9IC0gRV97aWp9KV4yfXtFX3tpan19ICQkDQoNClRyb25nIMSRw7M6DQoNCiRPX3tpan0kOiB04bqnbiBz4buRIHF1YW4gc8OhdC4NCiRFX3tpan0kOiB04bqnbiBz4buRIGvhu7MgduG7jW5nLg0KDQojIyMgKio0LjIuMiBLaeG7g20gxJHhu4tuaCB04bu3IGzhu4cgaGFpIG5ow7NtKioNCg0KRMO5bmcgxJHhu4Mgc28gc8OhbmggdOG7tyBs4buHIGdp4buvYSBoYWkgbmjDs20gKG5oxrAgbmjDs20gY8OzIGLhu4duaCB2w6Aga2jDtG5nIGPDsyBi4buHbmgpLg0KDQpDw7RuZyB0aOG7qWMgdOG7tyBz4buRIG5ndXkgY8ahOg0KDQokJCBSUiA9IFxmcmFje2EgLyAoYSArIGIpfXtjIC8gKGMgKyBkKX0gJCQNCg0KQ8O0bmcgdGjhu6ljIG9kZHMgcmF0aW86DQoNCiQkIE9SID0gXGZyYWN7YSAvIGJ9e2MgLyBkfSA9IFxmcmFje2FkfXtiY30gJCQNCiMjIyAqKjQuMi4zLiBU4bu3IHPhu5Egbmd1eSBjxqEgKFJSKSB2w6AgVOG7tyBz4buRIG9kZHMgKE9SKSoqDQoNCiMjIyMgKio0LjIuMy4xLiBU4buVbmcgcXVhbioqDQoNCktoaSBwaMOibiB0w61jaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSBt4buZdCB54bq/dSB04buRIHBoxqFpIG5oaeG7hW0gKGV4cG9zdXJlKSB2w6AgbeG7mXQgYmnhur9uIGvhur90IGPhu6VjIG5o4buLIHBow6JuIChiaW5hcnkgb3V0Y29tZSksIMSR4bq3YyBiaeG7h3QgbMOgIHRyb25nIGPDoWMgbmdoacOqbiBj4bupdSBxdWFuIHPDoXQgKGjhu5NpIGPhu6l1LCBj4bqvdCBuZ2FuZyBob+G6t2MgdGnhur9uIGPhu6l1KSwgKip04bu3IHPhu5Egbmd1eSBjxqEgKFJSKSoqIHbDoCAqKnThu7cgc+G7kSBvZGRzIChPUikqKiBsw6AgaGFpIHRoxrDhu5tjIMSRbyBwaOG7lSBiaeG6v24gxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgxJHhu4tuaCBsxrDhu6NuZyBt4bupYyDEkeG7mSBsacOqbiBxdWFuIGdp4buvYSBwaMahaSBuaGnhu4VtIHbDoCBr4bq/dCBj4bulYy4NCg0KIyMjICoqNC4yLjMuMi4gQuG6o25nIDJ4MiBtw7QgdOG6oyBk4buvIGxp4buHdSoqDQoNCkdp4bqjIHPhu60gY8OzIG3hu5l0IGJp4bq/biDEkeG7mWMgbOG6rXAgxJHhu4tuaCB0w61uaCBuaOG7iyBwaMOibiAocGjGoWkgbmhp4buFbTogY8OzL2tow7RuZykgdsOgIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuIChr4bq/dCBj4bulYzogbeG6r2Mva2jDtG5nIG3huq9jKS4gROG7ryBsaeG7h3UgdGjGsOG7nW5nIMSRxrDhu6NjIHRyw6xuaCBiw6B5IGTGsOG7m2kgZOG6oW5nIGLhuqNuZyBjaMOpbyAyeDI6DQoNCnwgIHwgS+G6v3QgY+G7pWMgXD0gMSAoQ8OzKSB8IEvhur90IGPhu6VjIFw9IDAgKEtow7RuZykgfCBU4buVbmcgfA0KfCA6LS0tLSB8IDotLS0tIHwgOi0tLS0gfCA6LS0tLSB8DQp8ICoqUGjGoWkgbmhp4buFbSBcPSAxKiogKEPDsykgfCBhIHwgYiB8IGEgXCsgYiB8DQp8ICoqUGjGoWkgbmhp4buFbSBcPSAwKiogKEtow7RuZykgfCBjIHwgZCB8IGMgXCsgZCB8DQp8ICoqVOG7lW5nKiogfCBhIFwrIGMgfCBiIFwrIGQgfCBuIHwNCg0KDQojIyMjICoqNC4yLjMuMy4gVOG7tyBz4buRIG5ndXkgY8ahIChSZWxhdGl2ZSBSaXNrIC0gUlIpKioNCg0KKipLaMOhaSBuaeG7h20qKg0KDQpU4bu3IHPhu5Egbmd1eSBjxqEgKFJSIOKAkyBSZWxhdGl2ZSBSaXNrKSBsw6AgbeG7mXQgY2jhu4kgc+G7kSDEkeG7i25oIGzGsOG7o25nICoqc28gc8OhbmggeMOhYyBzdeG6pXQgeOG6o3kgcmEgbeG7mXQgYmnhur9uIGPhu5EgKGvhur90IGPhu6VjKSBnaeG7r2EgaGFpIG5ow7NtIMSR4buRaSB0xrDhu6NuZyoqOiBuaMOzbSBjw7MgeeG6v3UgdOG7kSBuZ3V5IGPGoSAocGjGoWkgbmhp4buFbSkgdsOgIG5ow7NtIGtow7RuZyBjw7MgeeG6v3UgdOG7kSBuZ3V5IGPGoS4NCg0KQ+G7pSB0aOG7gzoNCg0KPiBSUiDEkW8gbMaw4budbmcgbeG7qWMgxJHhu5kgbcOgIHnhur91IHThu5EgcGjGoWkgbmhp4buFbSDhuqNuaCBoxrDhu59uZyDEkeG6v24ga2jhuqMgbsSDbmcgeOG6o3kgcmEga+G6v3QgY+G7pWMsIGThu7FhIHRyw6puIHjDoWMgc3XhuqV0IHTGsMahbmcgxJHhu5FpLg0KDQoqKkPDtG5nIHRo4bupYyB0b8OhbiBo4buNYyoqDQoNCkdp4bqjIHPhu60gY8OzIGLhuqNuZyAyeDIgdGjhu4MgaGnhu4duIHBow6JuIGLhu5EgZ2nhu69hIHBoxqFpIG5oaeG7hW0gdsOgIGvhur90IGPhu6VjOg0KDQp8ICAgICAgICAgICAgICAgICAgICB8IEvhur90IGPhu6VjID0gMSAoWWVzKSB8IEvhur90IGPhu6VjID0gMCAoTm8pIHwgVOG7lW5nICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tIHwNCnwgKipQaMahaSBuaGnhu4VtID0gMSoqIHwgYSAgICAgICAgICAgICAgICAgfCBiICAgICAgICAgICAgICAgIHwgYSArIGIgfA0KfCAqKlBoxqFpIG5oaeG7hW0gPSAwKiogfCBjICAgICAgICAgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBjICsgZCB8DQoNCktoaSDEkcOzOg0KDQokJA0KUlIgPSBcZnJhY3tQKFx0ZXh0e0vhur90IGPhu6VjfSA9IDEgXG1pZCBcdGV4dHtQaMahaSBuaGnhu4VtfSA9IDEpfXtQKFx0ZXh0e0vhur90IGPhu6VjfSA9IDEgXG1pZCBcdGV4dHtQaMahaSBuaGnhu4VtfSA9IDApfSA9IFxmcmFje2EgLyAoYSArIGIpfXtjIC8gKGMgKyBkKX0NCiQkDQoNCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqDQoNCiogKipSUiA9IDEqKjogUGjGoWkgbmhp4buFbSBraMO0bmcg4bqjbmggaMaw4bufbmcgxJHhur9uIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGvhur90IGPhu6VjLg0KKiAqKlJSID4gMSoqOiBQaMahaSBuaGnhu4VtIGzDoG0gdMSDbmcgbmd1eSBjxqEgeOG6o3kgcmEga+G6v3QgY+G7pWMuDQoqICoqUlIgPCAxKio6IFBoxqFpIG5oaeG7hW0gY8OzIHRo4buDIG1hbmcgdMOtbmggKipi4bqjbyB24buHKiosIGzDoG0gZ2nhuqNtIG5ndXkgY8ahIHjhuqN5IHJhIGvhur90IGPhu6VjLg0KDQoqKkLhu5FpIGPhuqNuaCDDoXAgZOG7pW5nKioNCg0KKiAqKlJSIHBow7kgaOG7o3AgduG7m2kgbmdoacOqbiBj4bupdSDEkW/DoG4gaOG7hyAoY29ob3J0KSoqIHbDoCAqKm5naGnDqm4gY+G7qXUgdGjhu60gbmdoaeG7h20gbMOibSBzw6BuZyAoUkNUKSoqLCBraGkgKipjw7MgdGjhu4MgxJFvIHjDoWMgc3XhuqV0IHRo4buxYyBz4buxKiogY+G7p2Ega+G6v3QgY+G7pWMgdHJvbmcgbeG7l2kgbmjDs20uDQoqIEtow7RuZyBwaMO5IGjhu6NwIHRyb25nIGPDoWMgKipuZ2hpw6puIGPhu6l1IGjhu5NpIGPhu6l1IChjYXNlLWNvbnRyb2wpKiogdsOsIGtow7RuZyB0aOG7gyDGsOG7m2MgbMaw4bujbmcgdHLhu7FjIHRp4bq/cCB4w6FjIHN14bqldC4NCg0KIyMjIyAqKjQuMi4zLjIuIFThu7cgc+G7kSBvZGRzIChPZGRzIFJhdGlvIC0gT1IpKioNCg0KKipLaMOhaSBuaeG7h20qKg0KDQpU4bu3IHPhu5Egb2RkcyAoT1Ig4oCTIE9kZHMgUmF0aW8pIMSRbyAqKnThu7cgbOG7hyBnaeG7r2Egb2RkcyAodOG7tyBz4buRIGdp4buvYSBraOG6oyBuxINuZyB44bqjeSByYSB2w6Aga2jDtG5nIHjhuqN5IHJhKSoqIGPhu6dhIGvhur90IGPhu6VjIGdp4buvYSBoYWkgbmjDs20gKHBoxqFpIG5oaeG7hW0gdsOgIGtow7RuZyBwaMahaSBuaGnhu4VtKS4NCg0KKipDw7RuZyB0aOG7qWMgdG/DoW4gaOG7jWMqKg0KDQpU4burIGLhuqNuZyAyeDIgxJHDoyB0csOsbmggYsOgeToNCg0KKiAqKk9kZHMgdHJvbmcgbmjDs20gcGjGoWkgbmhp4buFbSoqOg0KDQokJA0KXHRleHR7T2Rkc31fMSA9IFxmcmFje2F9e2J9DQokJA0KDQoqICoqT2RkcyB0cm9uZyBuaMOzbSBraMO0bmcgcGjGoWkgbmhp4buFbSoqOg0KDQokJA0KXHRleHR7T2Rkc31fMCA9IFxmcmFje2N9e2R9DQokJA0KDQoqIEtoaSDEkcOzOg0KDQokJA0KT1IgPSBcZnJhY3thL2J9e2MvZH0gPSBcZnJhY3thIFxjZG90IGR9e2IgXGNkb3QgY30NCiQkDQoNCioqRGnhu4VuIGdp4bqjaSBr4bq/dCBxdeG6oyoqDQoNCiogKipPUiA9IDEqKjogS2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBwaMahaSBuaGnhu4VtIHbDoCBr4bq/dCBj4bulYy4NCiogKipPUiA+IDEqKjogUGjGoWkgbmhp4buFbSBsw6BtIHTEg25nIG9kZHMgeOG6o3kgcmEga+G6v3QgY+G7pWMuDQoqICoqT1IgPCAxKio6IFBoxqFpIG5oaeG7hW0gbMOgbSBnaeG6o20gb2RkcyB44bqjeSByYSBr4bq/dCBj4bulYy4NCg0KKipC4buRaSBj4bqjbmggw6FwIGThu6VuZyoqDQoNCiogT1IgdGjGsOG7nW5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIHRyb25nICoqbmdoacOqbiBj4bupdSBo4buTaSBj4bupdSAoY2FzZS1jb250cm9sKSoqLCBraGkga2jDtG5nIHRo4buDIGJp4bq/dCDEkcaw4bujYyB4w6FjIHN14bqldCB0aOG7sWMuDQoqIFRyb25nICoqaOG7k2kgcXV5IGxvZ2lzdGljKiosIGjhu4cgc+G7kSBo4buTaSBxdXkgxJHGsOG7o2MgZGnhu4VuIGdp4bqjaSBkxrDhu5tpIGThuqFuZyAqKmxvZyhPUikqKjoNCg0KJCQNClxsb2coXHRleHR7T1J9KSA9IFxiZXRhXzEgXFJpZ2h0YXJyb3cgXHRleHR7T1J9ID0gZV57XGJldGFfMX0NCiQkDQoNCioqU28gc8OhbmggUlIgdsOgIE9SKioNCg0KfCBUacOqdSBjaMOtICAgICAgICAgICAgICAgICAgIHwgKipSZWxhdGl2ZSBSaXNrIChSUikqKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKk9kZHMgUmF0aW8gKE9SKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqQuG6o24gY2jhuqV0KiogICAgICAgICAgICAgICB8IFThu7cgc+G7kSBnaeG7r2EgaGFpIHjDoWMgc3XhuqV0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVOG7tyBz4buRIGdp4buvYSBoYWkgb2RkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkPDtG5nIHRo4bupYyoqICAgICAgICAgICAgICB8ICRcZnJhY3thLyhhK2IpfXtjLyhjK2QpfSQgICAgICAgICAgICAgICAgICAgICAgIHwgJFxmcmFje2EgXGNkb3QgZH17YiBcY2RvdCBjfSQgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkdpw6EgdHLhu4sqKiAgICAgICAgICAgICAgICB8IEx1w7RuIG5o4buPIGjGoW4gT1IgbuG6v3Uga+G6v3QgY+G7pWMgcGjhu5UgYmnhur9uICAgICAgICAgICAgfCBM4bubbiBoxqFuIFJSIG7hur91IGvhur90IGPhu6VjIHBo4buVIGJp4bq/biAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKsOdIG5naMSpYSB0aOG7sWMgdOG6vyoqICAgICAgICB8IFRy4buxYyBxdWFuIGjGoW4gduG7m2kgbmfGsOG7nWkga2jDtG5nIGNodXnDqm4gICAgICAgICAgICB8IEtow7MgaGnhu4N1IGjGoW4sIG1hbmcgdMOtbmgga+G7uSB0aHXhuq10IGjGoW4gICAgICAgICAgICAgICAgICB8DQp8ICoqUGjDuSBo4bujcCB24bubaSBuZ2hpw6puIGPhu6l1KiogfCBDb2hvcnQgc3R1ZHksIFJDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhc2UtY29udHJvbCwgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyAgICAgICAgICAgICAgICB8DQp8ICoqS+G6v3QgbuG7kWkgduG7m2kgbcO0IGjDrG5oKiogICAgfCBLaMO0bmcgeHXhuqV0IGhp4buHbiB0cuG7sWMgdGnhur9wIHRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgfCBMw6AgaOG7hyBz4buRIGJp4bq/biDEkeG7lWkgdHJvbmcgaOG7k2kgcXV5IGxvZ2lzdGljOiAkZV57XGJldGF9JCB8DQoNCg0KIyMgKio0LjMuIE3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gdsOgIGjhu5NpIHF1eSBsb2dpc3RpYyoqDQoNCiMjIyAqKjQuMy4xLiBNw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIChHZW5lcmFsaXplZCBMaW5lYXIgTW9kZWwgLSBHTE0pKioNCg0KS2hpIGJp4bq/biBwaOG6o24gaOG7k2kgJFkkIGzDoCBiaeG6v24gbmjhu4sgcGjDom4gKGNo4buJIG5o4bqtbiBnacOhIHRy4buLIDAgaG/hurdjIDEpLCB0YSBraMO0bmcgdGjhu4Mgc+G7rSBk4bulbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIHRow7RuZyB0aMaw4budbmcgdsOsOg0KDQoqIE3DtCBow6xuaCB0dXnhur9uIHTDrW5oIGtow7RuZyDEkeG6o20gYuG6o28gZ2nDoSB0cuG7iyBk4buxIMSRb8OhbiBu4bqxbSB0cm9uZyBraG/huqNuZyB4w6FjIHN14bqldCBo4bujcCBs4buHICRbMCwxXSQuDQoqIFNhaSBz4buRIGtow7RuZyBwaMOibiBwaOG7kWkgY2h14bqpbiwgbcOgIHRoZW8gcGjDom4gcGjhu5FpIEJlcm5vdWxsaS4NCg0KxJDhu4MgZ2nhuqNpIHF1eeG6v3QgduG6pW4gxJHhu4EgbsOgeSwgbcO0IGjDrG5oIGjhu5NpIHF1eSB04buVbmcgcXXDoXQgaMOzYSAoR0xNKSDEkcaw4bujYyDDoXAgZOG7pW5nIHbhu5tpIGJhIHRow6BuaCBwaOG6p24gY2jDrW5oOg0KDQoqICoqUmFuZG9tIGNvbXBvbmVudCAodGjDoG5oIHBo4bqnbiBuZ+G6q3Ugbmhpw6puKSoqOg0KICAkWSBcc2ltIFx0ZXh0e0Jlcm5vdWxsaX0oXHBpKSQsIHbhu5tpICRccGkgPSBQKFkgPSAxIFxtaWQgXG1hdGhiZnt4fSkkIGzDoCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbi4NCg0KKiAqKlN5c3RlbWF0aWMgY29tcG9uZW50ICh0aMOgbmggcGjhuqduIGjhu4cgdGjhu5FuZykqKjoNCiAgJFxldGEgPSBcYmV0YV8wICsgXGJldGFfMSB4XzEgKyBcbGRvdHMgKyBcYmV0YV9wIHhfcCQsIGzDoCB04buVIGjhu6NwIHR1eeG6v24gdMOtbmggY+G7p2EgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQoqICoqTGluayBmdW5jdGlvbiAoaMOgbSBsacOqbiBr4bq/dCkqKjoNCiAgQmnhur9uIMSR4buVaSB4w6FjIHN14bqldCAkXHBpJCB0aMOgbmggbeG7mXQgZ2nDoSB0cuG7iyB0csOqbiB0b8OgbiB0cuG7pWMgdGjhu7FjOiAkZyhccGkpID0gXGV0YSQuDQoNCiMjIyAqKjQuMy4yLiBIw6BtIGxpw6puIGvhur90IChMaW5rIEZ1bmN0aW9uKSoqDQoNCkJhIGjDoG0gbGnDqm4ga+G6v3QgcGjhu5UgYmnhur9uIHRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gbMOgOg0KDQp8ICoqSMOgbSBsacOqbiBr4bq/dCoqIHwgKipDw7RuZyB0aOG7qWMgbGnDqm4ga+G6v3QqKiAkZyhccGkpJCAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqQmnhur9uIG5nxrDhu6NjIGxpw6puIGvhur90KiogJFxwaSA9IGdeey0xfShcZXRhKSQgfCAqKsOdIG5naMSpYSB0aOG7sWMgdGnhu4VuKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqTG9naXQqKiAgICAgICAgfCAkXGxvZyBcbGVmdCggXGZyYWN7XHBpfXsxIC0gXHBpfSBccmlnaHQpJCAgICAgICAgICAgICAgIHwgJFxwaSA9IFxmcmFjezF9ezEgKyBlXnstXGV0YX19JCAgICAgICAgICAgICAgfCBUaMaw4budbmcgZMO5bmcgbmjhuqV0LCBjaG8gcGjDqXAgZGnhu4VuIGdp4bqjaSBo4buHIHPhu5EgaOG7k2kgcXV5IGTGsOG7m2kgZOG6oW5nICoqb2RkcyByYXRpbyoqICAgICAgICAgfA0KfCAqKlByb2JpdCoqICAgICAgIHwgJFxQaGleey0xfShccGkpJCwgduG7m2kgJFxQaGkkIGzDoCBDREYgY+G7p2EgY2h14bqpbiBjaHXhuqluIGjDs2EgfCAkXHBpID0gXFBoaShcZXRhKSQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBow7kgaOG7o3Aga2hpIGzhu5dpIGdp4bqjIMSR4buLbmggbMOgIHBow6JuIHBo4buRaSBjaHXhuqluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqQ2xvZ2xvZyoqICAgICAgfCAkXGxvZygtXGxvZygxIC0gXHBpKSkkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJFxwaSA9IDEgLSBcZXhwKC1cZXhwKFxldGEpKSQgICAgICAgICAgICAgICAgfCBQaMO5IGjhu6NwIHbhu5tpIGPDoWMgcXXDoSB0csOsbmggeOG6o3kgcmEgc+G7sSBraeG7h24gaGnhur9tIGhv4bq3YyBjw7MgdGjhu51pIGdpYW4gY2jhu50gKGV4dHJlbWUgdmFsdWUpIHwNCg0KPiDinIUgKipMb2dpdCBsaW5rKiogbMOgIGjDoG0gcGjhu5UgYmnhur9uIG5o4bqldCB0cm9uZyB0aOG7sWMgaMOgbmggdGjhu5FuZyBrw6ogdsOgIGjhu41jIG3DoXkgdsOsIHTDrW5oIGThu4UgZGnhu4VuIGdp4bqjaSB2w6Aga+G6v3QgbuG7kWkgdHLhu7FjIHRp4bq/cCB24bubaSBvZGRzLg0KDQotLS0NCg0KIyMgKio0LjMuMy4gTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBuaOG7iyBwaMOibioqDQoNCiMjIyAqKjQuMy4zLjEuIEPhuqV1IHRyw7pjIG3DtCBow6xuaCoqDQoNClRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMsIHRhIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgbG9naXQ6DQoNCiQkDQpcbG9nXGxlZnQoXGZyYWN7XHBpKFxtYXRoYmZ7eH0pfXsxIC0gXHBpKFxtYXRoYmZ7eH0pfVxyaWdodCkgPSBcZXRhID0gXGJldGFfMCArIFxiZXRhXzEgeF8xICsgXGxkb3RzICsgXGJldGFfcCB4X3ANCiQkDQoNClTGsMahbmcgxJHGsMahbmc6DQoNCiQkDQpccGkoXG1hdGhiZnt4fSkgPSBcZnJhY3sxfXsxICsgZV57LShcYmV0YV8wICsgXGJldGFfMSB4XzEgKyBcbGRvdHMgKyBcYmV0YV9wIHhfcCl9fQ0KJCQNCg0KdHJvbmcgxJHDszoNCg0KKiAkXHBpKFxtYXRoYmZ7eH0pJCBsw6AgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24gKHbDrSBk4bulOiBi4buLIHRy4bqnbSBj4bqjbSkuDQoqICRcYmV0YV9qJCBsw6AgaOG7hyBz4buRIGjhu5NpIHF1eSB0xrDGoW5nIOG7qW5nIHbhu5tpIGJp4bq/biBnaeG6o2kgdGjDrWNoICR4X2okLg0KDQojIyMgKio0LjMuMy4yLiDDnSBuZ2jEqWEgaOG7hyBz4buRIGjhu5NpIHF1eSoqDQoNCiogSOG7hyBz4buRICRcYmV0YV9qJCB0aOG7gyBoaeG7h24gKip0w6FjIMSR4buZbmcgY+G6rW4gYmnDqm4gY+G7p2EgYmnhur9uICR4X2okKiogbMOqbiBsb2ctb2RkcyBj4bunYSBiaeG6v24gcGjhu6UgdGh14buZYy4NCiogS2hpIGdp4buvIGPDoWMgYmnhur9uIGtow6FjIGtow7RuZyDEkeG7lWk6DQoNCiQkDQpcdGV4dHtvZGRzIHJhdGlvfSA9IGVee1xiZXRhX2p9DQokJA0KDQpcPT4gTeG7l2kgxJHGoW4gduG7iyB0xINuZyB0cm9uZyAkeF9qJCBsw6BtIG9kZHMgY+G7p2Egc+G7sSBraeG7h24geOG6o3kgcmEgdMSDbmcgJGVee1xiZXRhX2p9JCBs4bqnbiAobuG6v3UgJFxiZXRhX2ogPiAwJCksIGhv4bq3YyBnaeG6o20gbuG6v3UgJFxiZXRhX2ogPCAwJC4NCg0KIyMjICoqNC4zLjMuMy4gWMOhYyBzdeG6pXQgdsOgIG9kZHMqKg0KDQoqICoqWMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24gKHN1Y2Nlc3MgcHJvYmFiaWxpdHkpKio6DQoNCiQkDQpccGkgPSBQKFkgPSAxIHwgXG1hdGhiZnt4fSkNCiQkDQoNCiogKipPZGRzIGPhu6dhIHPhu7Ega2nhu4duKio6DQoNCiQkDQpcdGV4dHtvZGRzfSA9IFxmcmFje1xwaX17MSAtIFxwaX0NCiQkDQoNCiogKipMb2ctb2RkcyAobG9naXQpKio6DQoNCiQkDQpcbG9nKFx0ZXh0e29kZHN9KSA9IFxldGEgPSBcYmV0YV8wICsgXHN1bSBcYmV0YV9qIHhfag0KJCQNCg0KLS0tDQoNCiMjICoqNC4zLjQuIFNvIHPDoW5oIGJhIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gcGjhu5UgYmnhur9uKioNCg0KfCBUaMOgbmggcGjhuqduICAgICAgICAgICAgIHwgKipMb2dpdCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKlByb2JpdCoqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqQ2xvZ2xvZyoqICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgTGluayBmdW5jdGlvbiAkZyhccGkpJCB8ICRcbG9nXGxlZnQoXGZyYWN7XHBpfXsxIC0gXHBpfVxyaWdodCkkIHwgJFxQaGleey0xfShccGkpJCAgICAgICAgICAgICAgICAgICAgfCAkXGxvZygtXGxvZygxIC0gXHBpKSkkICAgICAgICAgICAgICAgfA0KfCBJbnZlcnNlIGxpbmsgJFxwaSQgICAgIHwgJFxmcmFjezF9ezEgKyBlXnstXGV0YX19JCAgICAgICAgICAgICAgfCAkXFBoaShcZXRhKSQgICAgICAgICAgICAgICAgICAgICAgICB8ICQxIC0gXGV4cCgtXGV4cChcZXRhKSkkICAgICAgICAgICAgICB8DQp8IERp4buFbiBnaeG6o2kgaOG7hyBz4buRICAgICAgICB8IFLDtSByw6BuZyAoT1IpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLaMOzIGjGoW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGjGsOG7nW5nIGTDuW5nIGNobyBk4buvIGxp4buHdSBjw7MgxJF1w7RpIG7hurduZyB8DQp8IMSQ4bq3YyDEkWnhu4NtICAgICAgICAgICAgICAgfCBQaOG7lSBiaeG6v24gbmjhuqV0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IMSQxrDhu51uZyBjb25nIFMgxJHhu5FpIHjhu6luZyAgICAgICAgICAgICAgIHwgxJDhu5FpIHjhu6luZyBs4buHY2ggcGjhuqNpICAgICAgICAgICAgICAgICAgIHwNCnwgU+G7rSBk4bulbmcga2hpICAgICAgICAgICAgfCBQaMOibiB0w61jaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gdGnDqnUgY2h14bqpbiAgfCBE4buvIGxp4buHdSBjw7MgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbiB8IEJp4bq/biBj4buRIGhp4bq/bSwgdGjhu51pIGdpYW4gxJHhur9uIHPhu7Ega2nhu4duICB8DQoNCi0tLQ0KDQojIyAqKjQuMy41LiDGr+G7m2MgbMaw4bujbmcgdsOgIGtp4buDbSDEkeG7i25oKioNCg0KKiAqKsav4bubYyBsxrDhu6NuZyoqOiBDw6FjIGjhu4cgc+G7kSAkXGJldGFfaiQgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGLhurFuZyBwaMawxqFuZyBwaMOhcCAqKnThu5FpIMSRYSBow7NhIGjDoG0gaOG7o3AgbMO9IChNYXhpbXVtIExpa2VsaWhvb2QgRXN0aW1hdGlvbiAtIE1MRSkqKi4NCiogKipLaeG7g20gxJHhu4tuaCoqOg0KDQogICogS2nhu4NtIMSR4buLbmggV2FsZDogxJHhu4MgxJHDoW5oIGdpw6EgdOG7q25nIGjhu4cgc+G7kSByacOqbmcgbOG6uy4NCiAgKiBLaeG7g20gxJHhu4tuaCBMaWtlbGlob29kIFJhdGlvOiDEkeG7gyBzbyBzw6FuaCBtw7QgaMOsbmggxJHhuqd5IMSR4bunIHbhu5tpIG3DtCBow6xuaCByw7p0IGfhu41uLg0KKiAqKktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIE9SKio6DQogIFbhu5tpIGjhu4cgc+G7kSAkXGhhdHtcYmV0YX1faiQsIGtob+G6o25nIHRpbiBj4bqteSBjaG8gT1IgbMOgOg0KDQokJA0KXGxlZnRbIGVee1xoYXR7XGJldGF9X2ogLSAxLjk2IFxjZG90IFNFKFxoYXR7XGJldGF9X2opfSwgXDsgZV57XGhhdHtcYmV0YX1faiArIDEuOTYgXGNkb3QgU0UoXGhhdHtcYmV0YX1fail9IFxyaWdodF0NCiQkDQoNCg0KIyMgKio0LjQuIMSQw6FuaCBnacOhIG3DtCBow6xuaCBo4buTaSBxdXkqKg0KDQojIyMgKio0LjQuMSBUacOqdSBjaHXhuqluIEFJQyAoQWthaWtlIEluZm9ybWF0aW9uIENyaXRlcmlvbikqKg0KDQpBSUMgxJFvIMSR4buZIHBow7kgaOG7o3AgdsOgIG3hu6ljIMSR4buZIMSRxqFuIGdp4bqjbiBj4bunYSBtw7QgaMOsbmguIEPDtG5nIHRo4bupYzoNCg0KJCQgXHRleHR7QUlDfSA9IC0yIFxsb2coXHRleHR7TGlrZWxpaG9vZH0pICsgMmsgJCQNCg0KTcO0IGjDrG5oIGPDsyBBSUMgbmjhu48gaMahbiDEkcaw4bujYyB4ZW0gbMOgIHThu5F0IGjGoW4gKG7hur91IHNvIHPDoW5oIGPDuW5nIG3hu5l0IHThuq1wIGThu68gbGnhu4d1KS4gVHJvbmcgYsOhbyBjw6FvLCBBSUMgY2hvIHRo4bqleSBsb2dpdCB2w6AgcHJvYml0IGzDoCBoYWkgbcO0IGjDrG5oIHThu5F0IG5o4bqldCAoQUlDID0gOTM4NDEwLjIpLg0KDQoNCiMjIyAqKjQuNC4yLiBCcmllciBTY29yZSoqDQoNCg0KQnJpZXIgU2NvcmUgxJFvIMSR4buZIGNow61uaCB4w6FjIGPhu6dhIGThu7EgxJFvw6FuIHjDoWMgc3XhuqV0LiBDw7RuZyB0aOG7qWM6DQoNCiQkIFx0ZXh0e0JyaWVyIFNjb3JlfSA9IFxmcmFjezF9e259IFxzdW1fe2k9MX1ee259ICh5X2kgLSBcaGF0e3B9X2kpXjIgJCQNCg0KR2nDoSB0cuG7iyBjw6BuZyB0aOG6pXAgY8OgbmcgdOG7kXQuIEvhur90IHF14bqjOiBMb2dpdCB2w6AgUHJvYml0IGPDsyBCcmllciBTY29yZSA9IDAuMTcxNyDihpIgcGjDuSBo4bujcCB0xrDGoW5nIMSRxrDGoW5nLg0KDQoNCiMjIyAqKjQuNC4zLiBNYSB0cuG6rW4gbmjhuqdtIGzhuqtuIHbDoCBjw6FjIGNo4buJIHPhu5EgxJHDoW5oIGdpw6EgbcO0IGjDrG5oIHBow6JuIGxv4bqhaSBuaOG7iyBwaMOibioqDQoNCiMjIyMgKio0LjQuMy4xLiBLaMOhaSBuaeG7h20qKg0KDQpNYSB0cuG6rW4gbmjhuqdtIGzhuqtuIChDb25mdXNpb24gTWF0cml4KSBsw6AgY8O0bmcgY+G7pSBjxqEgYuG6o24gdsOgIHF1YW4gdHLhu41uZyB0cm9uZyDEkcOhbmggZ2nDoSBoaeG7h3UgbsSDbmcgY+G7p2EgY8OhYyBtw7QgaMOsbmggcGjDom4gbG/huqFpIG5o4buLIHBow6JuICh2w60gZOG7pTogcGjDom4gbG/huqFpIGPDsyBoYXkga2jDtG5nIGLhu4sgdHLhuqdtIGPhuqNtKS4gTWEgdHLhuq1uIHRo4buDIGhp4buHbiBz4buxIHNvIHPDoW5oIGdp4buvYSBnacOhIHRy4buLIHRo4buxYyB04bq/IChncm91bmQgdHJ1dGgpIHbDoCBnacOhIHRy4buLIGThu7EgxJFvw6FuIHThu6sgbcO0IGjDrG5oIGjhu41jIG3DoXkuDQoNCiMjIyMgKio0LjQuMy4yLiBD4bqldSB0csO6YyBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuKioNCg0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqVGjhu7FjIHThur8gPSAxIChQb3NpdGl2ZSkqKiB8ICoqVGjhu7FjIHThur8gPSAwIChOZWdhdGl2ZSkqKiB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqROG7sSDEkW/DoW4gPSAxIChQb3NpdGl2ZSkqKiB8IFRQIChUcnVlIFBvc2l0aXZlKSAgICAgICAgIHwgRlAgKEZhbHNlIFBvc2l0aXZlKSAgICAgICAgfA0KfCAqKkThu7EgxJFvw6FuID0gMCAoTmVnYXRpdmUpKiogfCBGTiAoRmFsc2UgTmVnYXRpdmUpICAgICAgICB8IFROIChUcnVlIE5lZ2F0aXZlKSAgICAgICAgIHwNCg0KKiAqKlRQKiogKCpUcnVlIFBvc2l0aXZlKik6IFPhu5EgbMaw4bujbmcgdHLGsOG7nW5nIGjhu6NwIG3DoCBtw7QgaMOsbmggZOG7sSDEkW/DoW4gxJHDum5nIGzDoCDigJxjw7PigJ0gKHbDrSBk4bulOiDEkcO6bmcgbMOgIGLhu4sgdHLhuqdtIGPhuqNtKS4NCiogKipGUCoqICgqRmFsc2UgUG9zaXRpdmUqKTogU+G7kSBsxrDhu6NuZyB0csaw4budbmcgaOG7o3AgbcO0IGjDrG5oIGThu7EgxJFvw6FuIHNhaSBsw6Ag4oCcY8Oz4oCdICh2w60gZOG7pTogZOG7sSDEkW/DoW4gY8OzIHRy4bqnbSBj4bqjbSBuaMawbmcgdGjhu7FjIHThur8ga2jDtG5nIGLhu4spLg0KKiAqKkZOKiogKCpGYWxzZSBOZWdhdGl2ZSopOiBT4buRIGzGsOG7o25nIHRyxrDhu51uZyBo4bujcCBtw7QgaMOsbmggZOG7sSDEkW/DoW4gc2FpIGzDoCDigJxraMO0bmfigJ0gKHbDrSBk4bulOiBtw7QgaMOsbmggYuG7jyBzw7N0IG5nxrDhu51pIHRo4bqtdCBz4buxIGLhu4sgdHLhuqdtIGPhuqNtKS4NCiogKipUTioqICgqVHJ1ZSBOZWdhdGl2ZSopOiBT4buRIGzGsOG7o25nIHRyxrDhu51uZyBo4bujcCBtw7QgaMOsbmggZOG7sSDEkW/DoW4gxJHDum5nIGzDoCDigJxraMO0bmfigJ0gKHRo4buxYyB04bq/IGtow7RuZyBi4buLIHbDoCBtw7QgaMOsbmggY8WpbmcgZOG7sSDEkW/DoW4gbmjGsCB24bqteSkuDQoNCiMjIyMgKio0LjQuMy4zLiBDw6FjIGNo4buJIHPhu5EgxJHDoW5oIGdpw6EgaGnhu4d1IHN14bqldCBtw7QgaMOsbmgqKg0KDQpDw6FjIGNo4buJIHPhu5Egc2F1IMSRxrDhu6NjIHTDrW5oIHThu6sgbWEgdHLhuq1uIG5o4bqnbSBs4bqrbiwgZ2nDunAgxJHDoW5oIGdpw6Ega2jhuqMgbsSDbmcgcGjDom4gbG/huqFpIGNow61uaCB4w6FjIGPhu6dhIG3DtCBow6xuaDoNCg0KDQojIyMjIyBhLiAqKsSQ4buZIGNow61uaCB4w6FjIHThu5VuZyB0aOG7gyAoQWNjdXJhY3kpKioNCg0KxJBvIGzGsOG7nW5nIHThu7cgbOG7hyB04buVbmcgdGjhu4MgY8OhYyBk4buxIMSRb8OhbiDEkcO6bmcgdHLDqm4gdG/DoG4gYuG7mSBt4bqrdSBxdWFuIHPDoXQuDQoNCiQkDQpcdGV4dHtBY2N1cmFjeX0gPSBcZnJhY3tUUCArIFROfXtUUCArIEZQICsgRk4gKyBUTn0NCiQkDQoNCiogR2nDoSB0cuG7iyB04burIDAgxJHhur9uIDEgKGhv4bq3YyAwJSDEkeG6v24gMTAwJSkNCiogUGjDuSBo4bujcCBraGkgZOG7ryBsaeG7h3Uga2jDtG5nIG3huqV0IGPDom4gYuG6sW5nIG5naGnDqm0gdHLhu41uZw0KDQoNCiMjIyMjIGIuICoqxJDhu5kgbmjhuqF5IChTZW5zaXRpdml0eSwgUmVjYWxsLCBUcnVlIFBvc2l0aXZlIFJhdGUpKioNCg0KxJBvIGzGsOG7nW5nIGto4bqjIG7Eg25nIG3DtCBow6xuaCBwaMOhdCBoaeG7h24gxJHDum5nIGPDoWMgdHLGsOG7nW5nIGjhu6NwIGTGsMahbmcgdMOtbmggKFBvc2l0aXZlKSDigJMgdsOtIGThu6U6IHBow6F0IGhp4buHbiDEkcO6bmcgbmfGsOG7nWkgYuG7iyB0cuG6p20gY+G6o20uDQoNCiQkDQpcdGV4dHtTZW5zaXRpdml0eX0gPSBcZnJhY3tUUH17VFAgKyBGTn0NCiQkDQoNCiogQ8OgbmcgY2FvIGPDoG5nIHThu5F0IHbhu5tpIGPDoWMg4bupbmcgZOG7pW5nIGPhuqduICoqcGjDoXQgaGnhu4duIHPhu5ttKiogbmjGsCBi4buHbmggbMO9LCBnaWFuIGzhuq1u4oCmDQoNCg0KIyMjIyMgYy4gKirEkOG7mSDEkeG6t2MgaGnhu4d1IChTcGVjaWZpY2l0eSwgVHJ1ZSBOZWdhdGl2ZSBSYXRlKSoqDQoNCsSQbyBsxrDhu51uZyBraOG6oyBuxINuZyBtw7QgaMOsbmggcGjDoXQgaGnhu4duIMSRw7puZyBjw6FjIHRyxrDhu51uZyBo4bujcCDDom0gdMOtbmggKE5lZ2F0aXZlKSDigJMgdsOtIGThu6U6IHjDoWMgxJHhu4tuaCDEkcO6bmcgbmfGsOG7nWkga2jDtG5nIGLhu4sgdHLhuqdtIGPhuqNtLg0KDQokJA0KXHRleHR7U3BlY2lmaWNpdHl9ID0gXGZyYWN7VE59e1ROICsgRlB9DQokJA0KDQoqIEPDoG5nIGNhbyB0aMOsIG3DtCBow6xuaCDDrXQgYsOhbyBzYWkgZMawxqFuZyAoZ2nhuqNtIGPhuqNuaCBiw6FvIGdp4bqjKS4NCg0KDQojIyMjIyBkLiAqKlThu7cgbOG7hyBkxrDGoW5nIHTDrW5oIGdp4bqjIChGYWxzZSBQb3NpdGl2ZSBSYXRlIOKAkyBGUFIpKioNCg0KJCQNClx0ZXh0e0ZQUn0gPSBcZnJhY3tGUH17RlAgKyBUTn0gPSAxIC0gXHRleHR7U3BlY2lmaWNpdHl9DQokJA0KDQoqIFRoxrDhu51uZyDEkcaw4bujYyBkw7luZyDEkeG7gyB24bq9IMSRxrDhu51uZyBjb25nIFJPQy4NCg0KDQojIyMjIyBlLiAqKlThu7cgbOG7hyBkxrDGoW5nIHTDrW5oIHRo4buxYyAoUG9zaXRpdmUgUHJlZGljdGl2ZSBWYWx1ZSDigJMgUFBWIGhheSBQcmVjaXNpb24pKioNCg0KJCQNClx0ZXh0e1ByZWNpc2lvbn0gPSBcZnJhY3tUUH17VFAgKyBGUH0NCiQkDQoNCiogxJDDoW5oIGdpw6EgdHJvbmcgc+G7kSBjw6FjIGThu7EgxJFvw6FuIGTGsMahbmcgdMOtbmggdGjDrCBjw7MgYmFvIG5oacOqdSBsw6AgxJHDum5nIHRo4bqtdC4NCg0KDQojIyMjIyBmLiAqKkYxLXNjb3JlKioNCg0KTMOgIHRydW5nIGLDrG5oIMSRaeG7gXUgaMOyYSBnaeG7r2EgxJHhu5kgbmjhuqF5IHbDoCDEkeG7mSBjaMOtbmggeMOhYyAocHJlY2lzaW9uKSwgZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGPhuqduIGPDom4gYuG6sW5nIGdp4buvYSB2aeG7h2MgcGjDoXQgaGnhu4duIMSRw7puZyB2w6AgaOG6oW4gY2jhur8gc2FpIHPDs3QuDQoNCiQkDQpcdGV4dHtGMS1zY29yZX0gPSAyIFx0aW1lcyBcZnJhY3tcdGV4dHtQcmVjaXNpb259IFx0aW1lcyBcdGV4dHtSZWNhbGx9fXtcdGV4dHtQcmVjaXNpb259ICsgXHRleHR7UmVjYWxsfX0NCiQkDQoNCiMgKio1LiBQaMOibiB0w61jaCB0aOG7kW5nIGvDqiBt4buRaSBsacOqbiBo4buHIGdp4buvYSBow6BuaCB2aSDEg24gdeG7kW5nIHbDoCBuZ3V5IGPGoSBiw6lvIHBow6wgYuG6sW5nIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4iKioNCg0KIyMgKio1LjEuIEdJ4buaSSBUSEnhu4ZVIFbhu4AgQuG7mCBE4buuIExJ4buGVSBOR0hJw4pOIEPhu6hVKioNCg0KYGBge3IgIGVjaG89VFJVRX0NCiMgMS4gTG9hZCBjw6FjIHRoxrAgdmnhu4duIGPhuqduIHRoaeG6v3QNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShlcGl0b29scykNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoZW5lcmd5KQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkoc2tpbXIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KGdtb2RlbHMpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KGJyb29tKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQpvYmVzaXR5PC1yZWFkX2NzdigiQzovVXNlcnMvSG9hbmcgUXV5ZW4vRG93bmxvYWRzL29iZXNpdHkuY3N2IikNCg0Kb2Jlc2l0eSA8LSBvYmVzaXR5ICU+JQ0KICByZW5hbWUoDQogICAgZ2VuZGVyID0gR2VuZGVyLA0KICAgIGFnZSA9IEFnZSwNCiAgICBoZWlnaHQgPSBIZWlnaHQsDQogICAgd2VpZ2h0ID0gV2VpZ2h0LA0KICAgIGZhbWlseV9oaXN0b3J5ID0gZmFtaWx5X2hpc3Rvcnlfd2l0aF9vdmVyd2VpZ2h0LA0KICAgIGZhc3RfZm9vZCA9IEZBVkMsDQogICAgdmVnX2ludGFrZSA9IEZDVkMsDQogICAgbWVhbF9jb3VudCA9IE5DUCwNCiAgICBzbmFja19oYWJpdCA9IENBRUMsDQogICAgc21va2UgPSBTTU9LRSwNCiAgICB3YXRlcl9pbnRha2UgPSBDSDJPLA0KICAgIGNhbG9yaWVfY2hlY2sgPSBTQ0MsDQogICAgcGh5c2ljYWxfYWN0aXZpdHkgPSBGQUYsDQogICAgc2NyZWVuX3RpbWUgPSBUVUUsDQogICAgYWxjb2hvbCA9IENBTEMsDQogICAgdHJhbnNwb3J0ID0gTVRSQU5TLA0KICAgIG9iZXNpdHlfbGV2ZWwgPSBOT2JleWVzZGFkDQogICkNCg0KDQojIEfhu5lwIG5ow7NtIGJp4bq/biBt4bulYyB0acOqdSBvYmVzaXR5X2xldmVsIHRow6BuaCBvYmVzaXR5X2dyb3VwDQpvYmVzaXR5JG9iZXNpdHlfZ3JvdXAgPC0gaWZlbHNlKG9iZXNpdHkkb2Jlc2l0eV9sZXZlbCAlaW4lIGMoIk9iZXNpdHlfVHlwZV9JIiwgIk9iZXNpdHlfVHlwZV9JSSIsICJPYmVzaXR5X1R5cGVfSUlJIiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPYmVzZSIsICJOb25fT2Jlc2UiKQ0Kb2Jlc2l0eSRvYmVzaXR5X2dyb3VwIDwtIGFzLmZhY3RvcihvYmVzaXR5JG9iZXNpdHlfZ3JvdXApDQpvYmVzaXR5JGdlbmRlciA8LSBhcy5mYWN0b3Iob2Jlc2l0eSRnZW5kZXIpDQpvYmVzaXR5JGZhbWlseV9oaXN0b3J5IDwtIGFzLmZhY3RvcihvYmVzaXR5JGZhbWlseV9oaXN0b3J5KQ0Kb2Jlc2l0eSRmYXN0X2Zvb2QgPC0gYXMuZmFjdG9yKG9iZXNpdHkkZmFzdF9mb29kKQ0Kb2Jlc2l0eSRzbmFja19oYWJpdCA8LSBhcy5mYWN0b3Iob2Jlc2l0eSRzbmFja19oYWJpdCkNCm9iZXNpdHkkc21va2UgPC0gYXMuZmFjdG9yKG9iZXNpdHkkc21va2UpDQpvYmVzaXR5JGNhbG9yaWVfY2hlY2sgPC0gYXMuZmFjdG9yKG9iZXNpdHkkY2Fsb3JpZV9jaGVjaykNCm9iZXNpdHkkYWxjb2hvbCA8LSBhcy5mYWN0b3Iob2Jlc2l0eSRhbGNvaG9sKQ0Kb2Jlc2l0eSR0cmFuc3BvcnQgPC0gYXMuZmFjdG9yKG9iZXNpdHkkdHJhbnNwb3J0KQ0KbmFtZXMob2Jlc2l0eSkNCmBgYA0KDQpE4buvIGxp4buHdSDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyBuZ2hpw6puIGPhu6l1IGJhbyBn4buTbSAqKjIuMTExIGPDoSB0aOG7gyAocXVhbiBzw6F0KSoqLCDEkeG6oWkgZGnhu4duIGNobyBjw6FjIMSR4buRaSB0xrDhu6NuZyBjw7MgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jIHbDoCBow6BuaCB2aSBs4buRaSBz4buRbmcga2jDoWMgbmhhdSwgbGnDqm4gcXVhbiDEkeG6v24gdMOsbmggdHLhuqFuZyAqKmLDqW8gcGjDrCoqLiBN4buXaSBjw6EgdGjhu4MgxJHGsOG7o2MgbcO0IHThuqMgYuG7n2kgKioxOCBiaeG6v24gxJHhu5ljIGzhuq1wKiosIHRyb25nIMSRw7MgcGjhuqNuIMOhbmggbmhp4buBdSBraMOtYSBj4bqhbmggbmjGsCBuaMOibiBraOG6qXUgaOG7jWMgKGdp4bubaSB0w61uaCwgdHXhu5VpLCBjaGnhu4F1IGNhbywgY8OibiBu4bq3bmcpLCB0aMOzaSBxdWVuIHNpbmggaG/huqF0ICjEg24gZmFzdCBmb29kLCBraeG7g20gdHJhIGzGsOG7o25nIGNhbG8sIGjDunQgdGh14buRYywgdeG7kW5nIHLGsOG7o3UsIGhv4bqhdCDEkeG7mW5nIHRo4buDIGNo4bqldCwgdGjhu51pIGdpYW4gdHLGsOG7m2MgbcOgbiBow6xuaCwgdi52LiksIGPFqW5nIG5oxrAgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCB2w6AgcGjGsMahbmcgdGnhu4duIMSRaSBs4bqhaS4NCg0KVHJvbmcgdOG7lW5nIHPhu5EgKioxOCBiaeG6v24qKiwgY8OzOg0KDQoqICoqNCBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZyoqOjoNCg0KICAqIGBhZ2VgOiBUdeG7lWkgY+G7p2EgY8OhIG5ow6JuICooa2nhu4N1IHPhu5EgdGjhu7FjLCDEkcahbiB24buLOiBuxINtKSoNCiAgKiBgaGVpZ2h0YDogQ2hp4buBdSBjYW8gKihtw6l0KSoNCiAgKiBgd2VpZ2h0YDogQ8OibiBu4bq3bmcgKihrZykqDQogICogYHBoeXNpY2FsX2FjdGl2aXR5YDogTeG7qWMgxJHhu5kgaG/huqF0IMSR4buZbmcgdGjhu4MgY2jhuqV0IHRydW5nIGLDrG5oIG3hu5dpIHR14bqnbiAqKHRoxrDhu51uZyDEkcaw4bujYyDEkeG7i25oIGzGsOG7o25nIHRoZW8gdGjhu51pIGdpYW4pKg0KDQo+IEPDoWMgYmnhur9uIMSR4buLbmggbMaw4bujbmcgbsOgeSBjw7MgdGjhu4MgdGhhbSBnaWEgdsOgbyBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjGsCBiaeG6v24gZOG7sSDEkW/DoW4gdHV54bq/biB0w61uaCwgdsOgIGPDsyB0aOG7gyBraeG7g20gdHJhIHBow6JuIHBo4buRaSBjaHXhuqluIGhv4bq3YyB4w6FjIMSR4buLbmgga2hv4bqjbmcgZ2nDoSB0cuG7iywgxJHhu5kgbOG7h2NoIGNodeG6qW4sLi4uDQoNCiogKioxNCBiaeG6v24gxJHhu4tuaCB0w61uaCoqLCBiYW8gZ+G7k206DQoNCiAgKiBgZ2VuZGVyYDogR2nhu5tpIHTDrW5oIChgbWFsZWAsIGBmZW1hbGVgKQ0KICAqIGBmYW1pbHlfaGlzdG9yeWA6IFRp4buBbiBz4butIGdpYSDEkcOsbmggYuG7iyBiw6lvIHBow6wgKGB5ZXNgLCBgbm9gKQ0KICAqIGBmYXN0X2Zvb2RgOiBUaMOzaSBxdWVuIMSDbiBmYXN0IGZvb2QgKGB5ZXNgLCBgbm9gKQ0KICAqIGBjYWxvcmllX2NoZWNrYDogQ8OzIGtp4buDbSBzb8OhdCBsxrDhu6NuZyBjYWxvIG7huqFwIHbDoG8gKGB5ZXNgLCBgbm9gKQ0KICAqIGB2ZWdfaW50YWtlYDogTeG7qWMgxJHhu5kgxINuIHJhdSAoYGxvd2AsIGBtb2RlcmF0ZWAsIGBoaWdoYCkNCiAgKiBgbWVhbF9jb3VudGA6IFPhu5EgYuG7r2EgxINuIGNow61uaCBt4buXaSBuZ8OgeSAoYDFgLCBgMmAsIGAzK2ApDQogICogYHNuYWNrX2hhYml0YDogVGjDs2kgcXVlbiDEg24gduG6t3QgKGBub2AsIGBzb21ldGltZXNgLCBgZnJlcXVlbnRseWApDQogICogYHNtb2tlYDogSMO6dCB0aHXhu5FjIGzDoSAoYHllc2AsIGBub2ApDQogICogYHdhdGVyX2ludGFrZWA6IEzGsOG7o25nIG7GsOG7m2MgdeG7kW5nIGjDoG5nIG5nw6B5IChgbG93YCwgYG1vZGVyYXRlYCwgYGhpZ2hgKQ0KICAqIGBzY3JlZW5fdGltZWA6IFRo4budaSBnaWFuIHRyxrDhu5tjIG3DoG4gaMOsbmggbeG7l2kgbmfDoHkgKGBzaG9ydGAsIGBtb2RlcmF0ZWAsIGBsb25nYCkNCiAgKiBgYWxjb2hvbGA6IFXhu5FuZyByxrDhu6N1L2JpYSAoYG5vYCwgYHNvbWV0aW1lc2AsIGBmcmVxdWVudGx5YCkNCiAgKiBgdHJhbnNwb3J0YDogUGjGsMahbmcgdGnhu4duIGRpIGNodXnhu4NuIGNo4bunIHnhur91IChgd2Fsa2luZ2AsIGBiaWtlYCwgYG1vdG9yYmlrZWAsIGBjYXJgLCBgcHVibGljYCkNCiAgKiBgb2Jlc2l0eV9sZXZlbGA6IE3hu6ljIMSR4buZIGLDqW8gcGjDrCBn4buRYyAoZ+G7k20gNyBj4bqlcCDEkeG7mSB04burIGBJbnN1ZmZpY2llbnQgV2VpZ2h0YCDEkeG6v24gYE9iZXNpdHkgVHlwZSBJSUlgKQ0KICAqIGBvYmVzaXR5X2dyb3VwYDogUGhpw6puIGLhuqNuIG5o4buLIHBow6JuIGPhu6dhIG3hu6ljIMSR4buZIGLDqW8gcGjDrDogYE9iZXNlYCB2cy4gYE5vbl9PYmVzZWANCg0KPiBDw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIGzDoCBu4buBbiB04bqjbmcgY2hvIHZp4buHYyB4w6J5IGThu7FuZyBi4bqjbmcgdOG6p24gc+G7kSwgYuG6o25nIGNow6lvIHbDoCBraeG7g20gxJHhu4tuaCB0aOG7kW5nIGvDqiBuaMawIM+HwrIsIHTDrW5oIFJSLCBPUiB2w6AgxJHGsOG7o2MgbcOjIGjDs2EgdGjDoG5oIGJp4bq/biBuaOG7iyBwaMOibiB0cm9uZyBtw7QgaMOsbmggaOG7k2kgcXV5Lg0KDQrEkOG6t2MgYmnhu4d0LCBiaeG6v24gbeG7pWMgdGnDqnUgdHJvbmcgbmdoacOqbiBj4bupdSBsw6AgKipgb2Jlc2VfYmluYXJ5YCoqLCBt4buZdCBiaeG6v24gbmjhu4sgcGjDom4gxJHGsOG7o2MgdOG6oW8gcmEgdOG7qyBgb2Jlc2l0eV9sZXZlbGAgxJHhu4MgcGjDom4gbG/huqFpIGPDoSBuaMOibiB2w6BvIGhhaSBuaMOzbSBjaMOtbmg6ICoqYE9iZXNlYCAoMSkqKiB2w6AgKipgTm9uX09iZXNlYCAoMCkqKiwgbmjhurFtIG3hu6VjIHRpw6p1IGThu7EgxJFvw6FuIHjDoWMgc3XhuqV0IGLhu4sgYsOpbyBwaMOsIHRow7RuZyBxdWEgbcO0IGjDrG5oIHRo4buRbmcga8OqIG5o4buLIHBow6JuLg0KDQoNCiMjICoqNS4yLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gb2Jlc2l0eV9ncm91cCoqDQoNCiMjIyAqKjUuMi4xIELhuqNuZyB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpvYmVzaXR5X2dyb3VwX3RhYiA8LSBvYmVzaXR5ICU+JQ0KICBjb3VudChvYmVzaXR5X2dyb3VwKSAlPiUNCiAgbXV0YXRlKHBlcmMgPSByb3VuZChuIC8gc3VtKG4pICogMTAwLCAxKSkNCg0Ka25pdHI6OmthYmxlKG9iZXNpdHlfZ3JvdXBfdGFiLCBjYXB0aW9uID0gIlThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCBj4bunYSBiaeG6v24gb2Jlc2l0eV9ncm91cCIpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1KioNCg0KUGjDom4gdMOtY2ggdOG6p24gc+G7kSB2w6AgdOG6p24gc3XhuqV0IGPhu6dhIGJp4bq/biAqKm9iZXNpdHlfZ3JvdXAqKiBjaG8gdGjhuqV5IHPhu7EgcGjDom4gYuG7kSBraMOhIGPDom4gxJHhu5FpIGdp4buvYSBoYWkgbmjDs20gIk5vbl9PYmVzZSIgKGtow7RuZyBiw6lvIHBow6wpIHbDoCAiT2Jlc2UiIChiw6lvIHBow6wpLiBD4bulIHRo4buDLCB0cm9uZyB04buVbmcgc+G7kSAyLjExMSBxdWFuIHPDoXQsIG5ow7NtICJOb25fT2Jlc2UiIGNoaeG6v20gMS4xMzkgdHLGsOG7nW5nIGjhu6NwLCB0xrDGoW5nIOG7qW5nIHbhu5tpIHThu7cgbOG7hyA1NCUsIHRyb25nIGtoaSBuaMOzbSAiT2Jlc2UiIGPDsyA5NzIgdHLGsOG7nW5nIGjhu6NwLCBjaGnhur9tIDQ2JS4gDQoNCkvhur90IHF14bqjIG7DoHkgcGjhuqNuIMOhbmggbeG7mXQgc+G7sSBjaMOqbmggbOG7h2NoIGtow7RuZyBxdcOhIGzhu5tuIGdp4buvYSBoYWkgbmjDs20sIHbhu5tpIHThu7cgbOG7hyBuZ8aw4budaSBraMO0bmcgYsOpbyBwaMOsIGNhbyBoxqFuIG5ow7NtIGLDqW8gcGjDrCBraG/huqNuZyA4JS4gU+G7sSBwaMOibiBi4buRIG7DoHkgY8OzIHRo4buDIMSRxrDhu6NjIGtp4buDbSDEkeG7i25oIHPDonUgaMahbiBi4bqxbmcgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiBuaMawIGtp4buDbSDEkeG7i25oIGNoaS1zcXVhcmUgxJHhu4MgxJHDoW5oIGdpw6EgdMOtbmggxJHhu5ljIGzhuq1wIGhv4bq3YyBwaOG7pSB0aHXhu5ljIGPhu6dhIGJp4bq/biBvYmVzaXR5X2dyb3VwIHbhu5tpIGPDoWMgYmnhur9uIGtow6FjIHRyb25nIG5naGnDqm4gY+G7qXUuIE5nb8OgaSByYSwgdmnhu4djIHTDrW5oIHRvw6FuIGtob+G6o25nIHRpbiBj4bqteSAoY29uZmlkZW5jZSBpbnRlcnZhbCkgY2hvIGPDoWMgdOG7tyBs4buHIG7DoHkgY8Wpbmcgc+G6vSBjdW5nIGPhuqVwIHRow6ptIHRow7RuZyB0aW4gduG7gSDEkeG7mSBjaMOtbmggeMOhYyBj4bunYSDGsOG7m2MgbMaw4bujbmcuIA0KDQpOaMOsbiBjaHVuZywga+G6v3QgcXXhuqMgdHLDqm4gY2hvIHRo4bqleSB04bu3IGzhu4cgYsOpbyBwaMOsIHRyb25nIG3huqt1IG5naGnDqm4gY+G7qXUgbMOgIMSRw6FuZyBr4buDICg0NiUpLCDEkWnhu4F1IG7DoHkgY8OzIHRo4buDIGfhu6NpIMO9IG5odSBj4bqndSBwaMOibiB0w61jaCBzw6J1IGjGoW4gduG7gSBjw6FjIHnhur91IHThu5EgbGnDqm4gcXVhbiBuaMawIGNo4bq/IMSR4buZIMSDbiB14buRbmcsIGzhu5FpIHPhu5FuZywgaG/hurdjIHnhur91IHThu5EgZGkgdHJ1eeG7gW4gxJHhu4MgaGnhu4N1IHLDtSBoxqFuIG5ndXnDqm4gbmjDom4gdsOgIMSR4buBIHh14bqldCBjw6FjIGdp4bqjaSBwaMOhcCBjYW4gdGhp4buHcCBwaMO5IGjhu6NwLg0KDQojIyMgKio1LjIuMi4gQmnhu4N1IMSR4buTIHRyw7JuKioNCg0KYGBge3J9DQpvYmVzaXR5X2dyb3VwX3RhYiAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gIiIsIHkgPSBwZXJjLCBmaWxsID0gb2Jlc2l0eV9ncm91cCkpICsNCiAgZ2VvbV9jb2wod2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKHBlcmMsICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyBwaOG6p24gdHLEg20gY+G7p2EgY8OhYyBuaMOzbSBvYmVzaXR5X2dyb3VwIikgKw0KICB0aGVtZV92b2lkKCkNCmBgYA0KDQpCaeG7g3UgxJHhu5MgdHLDsm4gKHBpZSBjaGFydCkgdGjhu4MgaGnhu4duIHThu7cgbOG7hyBwaOG6p24gdHLEg20gY+G7p2EgaGFpIG5ow7NtIE5vbl9PYmVzZSAoNTQlKSB2w6AgT2Jlc2UgKDQ2JSkgdHJvbmcgbmdoacOqbiBj4bupdS4NCg0KIyMgKio1LjMuIFBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgYsOpbyBwaMOsIHbDoCBjw6FjIHnhur91IHThu5Ega2jDoWMqKg0KDQojIyMgKio1LjMuMS4gUGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBiw6lvIHBow6wgKGBvYmVzaXR5X2dyb3VwYCkgdsOgIHRow7NpIHF1ZW4gdGnDqnUgdGjhu6UgdGjhu6ljIMSDbiBuaGFuaCAoYGZhc3RfZm9vZGApKioNCg0KTeG7pWMgdGnDqnUgY+G7p2EgcGjhuqduIG7DoHkgbMOgIGtp4buDbSDEkeG7i25oIHhlbSBsaeG7h3UgY8OzIHThu5NuIHThuqFpICoqbeG7kWkgbGnDqm4gaOG7hyB0aOG7kW5nIGvDqiBjw7Mgw70gbmdoxKlhKiogZ2nhu69hICoqdGjDs2kgcXVlbiDEg24gdGjhu6ljIMSDbiBuaGFuaCoqIHbDoCAqKnTDrG5oIHRy4bqhbmcgYsOpbyBwaMOsKiogaGF5IGtow7RuZy4gVmnhu4djIHjDoWMgxJHhu4tuaCBt4buRaSBxdWFuIGjhu4cgbsOgeSBnacO6cCBsw6BtIHLDtSB2YWkgdHLDsiBj4bunYSBow6BuaCB2aSDEg24gdeG7kW5nIHRyb25nIG5ndXkgY8ahIHBow6F0IHRyaeG7g24gYsOpbyBwaA0KDQojIyMjICoqNS4zLjEuMSBC4bqjbmcgdOG6p24gc+G7kSoqDQpgYGB7cn0NCmZhc3RfZm9vZF90YWIgPC0gdGFibGUob2Jlc2l0eSRmYXN0X2Zvb2QsIG9iZXNpdHkkb2Jlc2l0eV9ncm91cCkNCmZhc3RfZm9vZF90YWINCmBgYA0KVHJvbmcgdOG7lW5nIHPhu5EgMjExMSBjw6EgbmjDom46DQoNCiogMTg2NiBuZ8aw4budaSBjaG8gYmnhur90ICoqY8OzIHRow7NpIHF1ZW4gxINuIGZhc3QgZm9vZCoqLCB0cm9uZyDEkcOzICoqOTUzIG5nxrDhu51pIGLDqW8gcGjDrCoqLg0KKiAyNDUgbmfGsOG7nWkgKipraMO0bmcgxINuIGZhc3QgZm9vZCoqLCBjaOG7iSBjw7MgKioxOSBuZ8aw4budaSBi4buLIGLDqW8gcGjDrCoqLg0KDQrihpIgROG7ryBsaeG7h3UgYmFuIMSR4bqndSBn4bujaSDDvSBy4bqxbmcgbmjDs20gKipjw7MgdGjDs2kgcXVlbiDEg24gZmFzdCBmb29kKiogY8OzIHh1IGjGsOG7m25nIGLhu4sgYsOpbyBwaMOsIGNhbyBoxqFuIG5oaeG7gXUuDQoNCg0KIyMjIyAqKjUuMy4xLjIgS2nhu4NtIMSR4buLbmggY2hpIGLDrG5oIHBoxrDGoW5nIChIMDoga2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBmYXN0X2Zvb2QgdsOgIG9iZXNpdHlfZ3JvdXApKioNCg0KYGBge3J9DQpjaGlzcS50ZXN0KGZhc3RfZm9vZF90YWIpDQpgYGANCg0KxJDhu4Mga2nhu4NtIMSR4buLbmggeGVtIGhhaSBiaeG6v24gxJHhu4tuaCB0w61uaCBuw6B5IGPDsyBt4buRaSBsacOqbiBo4buHIHRo4buRbmcga8OqIGhheSBraMO0bmcsIHRhIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oICoqQ2hpLXNxdWFyZSBQZWFyc29uKiogduG7m2kgaGnhu4d1IGNo4buJbmggWWF0ZXMuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KKiAqKkjigoAgOioqIEhhaSBiaeG6v24gYGZhc3RfZm9vZGAgdsOgIGBvYmVzaXR5X2dyb3VwYCDEkeG7mWMgbOG6rXAgbmhhdSAoa2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHKS4NCiogKipI4oKBIDoqKiBDw7MgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgYGZhc3RfZm9vZGAgdsOgIGBvYmVzaXR5X2dyb3VwYC4NCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoqKg0KDQoqIFRo4buRbmcga8OqIENoaS1zcXVhcmU6IM+HwrIgPSAxNjEuODINCiogQuG6rWMgdOG7sSBkbyAoZGYpOiAxDQoqICoqcC12YWx1ZSA8IDIuMmUtMTYqKg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQo+RG8gKipwLXZhbHVlIDwgMC4wNSoqLCBjaMO6bmcgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAuIE5oxrAgduG6rXksIGPDsyAqKm3hu5FpIGxpw6puIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgdGjDs2kgcXVlbiDEg24gZmFzdCBmb29kIHbDoCB0w6xuaCB0cuG6oW5nIGLDqW8gcGjDrCoqLg0KDQoNCiMjIyMgKio1LjMuMS4zIEJp4buDdSDEkeG7kyBj4buZdCB04bqnbiBzdeG6pXQqKg0KYGBge3J9DQpvYmVzaXR5ICU+JQ0KICBncm91cF9ieShmYXN0X2Zvb2QsIG9iZXNpdHlfZ3JvdXApICU+JQ0KICBzdW1tYXJpc2UobiA9IG4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lDQogIG11dGF0ZShwZXJjID0gcm91bmQobiAvIHN1bShuKSAqIDEwMCwgMSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBmYXN0X2Zvb2QsIHkgPSBwZXJjLCBmaWxsID0gb2Jlc2l0eV9ncm91cCkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAocGVyYywgIiUiKSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCB2anVzdCA9IC0wLjIpICsNCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgYsOpbyBwaMOsIHRoZW8gdGjDs2kgcXVlbiDEg24gZmFzdCBmb29kIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQpCaeG7g3UgxJHhu5MgY+G7mXQgdGhlbyBwaOG6p24gdHLEg20gY2hvIHRo4bqleToNCg0KKiBUcm9uZyBuaMOzbSAqKsSDbiBmYXN0IGZvb2QqKjogdOG7tyBs4buHIGLDqW8gcGjDrCBsw6AgKio0NS4xJSoqDQoqIFRyb25nIG5ow7NtICoqa2jDtG5nIMSDbioqOiB04bu3IGzhu4cgYsOpbyBwaMOsIGzDoCAqKjAuOSUqKg0KDQpcPT4gU+G7sSBraMOhYyBiaeG7h3QgbsOgeSBsw6AgcsO1IHLDoG5nLCBj4bunbmcgY+G7kSBr4bq/dCBxdeG6oyB04burIGtp4buDbSDEkeG7i25oIHRo4buRbmcga8OqLg0KDQojIyMjICoqNS4zLjEuNCBSUiwgT1IsIFByb3AgdGVzdCoqDQoNCsSQ4buDIGzGsOG7o25nIGjDs2EgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgdGjDs2kgcXVlbiDEg24gZmFzdCBmb29kIMSR4bq/biB0w6xuaCB0cuG6oW5nIGLDqW8gcGjDrCwgY2jDum5nIHTDtGkgxrDhu5tjIGzGsOG7o25nICoqUmVsYXRpdmUgcmlzayAoUlIpKiogdsOgICoqT2RkcyBSYXRpbyAoT1IpKiouDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKGZhc3RfZm9vZF90YWIpDQpgYGANCg0KKipSZWxhdGl2ZSByaXNrIChSUikqKiDigJMgVOG7tyBs4buHIHLhu6dpIHJvOg0KDQokJA0KUlIgPSBcZnJhY3tQKFk9MSBcbWlkIFx0ZXh0e0Zhc3QgZm9vZCA9IHllc30pfXtQKFk9MSBcbWlkIFx0ZXh0e0Zhc3QgZm9vZCA9IG5vfSl9DQokJA0KDQoNCiogJFAoWT0xIFxtaWQgXHRleHR7eWVzfSkgPSBcZnJhY3s5NTN9ezE4NjZ9IFxhcHByb3ggMC41MTA3JA0KKiAkUChZPTEgXG1pZCBcdGV4dHtub30pID0gXGZyYWN7MTl9ezI0NX0gXGFwcHJveCAwLjA3NzYkDQoNCiQkDQpSUiA9IFxmcmFjezAuNTEwN317MC4wNzc2fSBcYXBwcm94IDYuNTg1Ng0KJCQNCg0KDQpOZ8aw4budaSAqKmPDsyDEg24gZmFzdCBmb29kKiogY8OzICoqbmd1eSBjxqEgbeG6r2MgYsOpbyBwaMOsIGNhbyBn4bqlcCBraG/huqNuZyA2LjU5IGzhuqduKiogc28gduG7m2kgbmjDs20gKipraMO0bmcgxINuIGZhc3QgZm9vZCoqLiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGtow7RuZyBiYW8gZ+G7k20gMSBjaG8gdGjhuqV5IGvhur90IHF14bqjIG7DoHkgKipjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiouDQoNCmBgYHtyfQ0Kb2Rkc3JhdGlvKGZhc3RfZm9vZF90YWIpDQpgYGANCg0KKipPZGRzIFJhdGlvIChPUikqKiDigJMgVOG7tyBs4buHIGPGsOG7o2M6DQoNCg0KJCQNCk9SID0gXGZyYWN7XGRmcmFjezk1M317OTEzfX17XGRmcmFjezE5fXsyMjZ9fSA9IFxmcmFje1x0ZXh0e29kZHN9X3tcdGV4dHt5ZXN9fX17XHRleHR7b2Rkc31fe1x0ZXh0e25vfX19DQokJA0KDQoqICRcdGV4dHtvZGRzfV97XHRleHR7eWVzfX0gPSBcZnJhY3s5NTN9ezkxM30gXGFwcHJveCAxLjA0MzgkDQoqICRcdGV4dHtvZGRzfV97XHRleHR7bm99fSA9IFxmcmFjezE5fXsyMjZ9IFxhcHByb3ggMC4wODQxJA0KDQokJA0KT1IgPSBcZnJhY3sxLjA0Mzh9ezAuMDg0MX0gXGFwcHJveCAxMi4zMQ0KJCQNCg0KDQoqKlThu7cgc+G7kSBvZGRzIG3huq9jIGLDqW8gcGjDrCoqIOG7nyBuaMOzbSDEg24gZmFzdCBmb29kIGNhbyBoxqFuIG5ow7NtIGtow7RuZyDEg24ga2hv4bqjbmcgKioxMi4zMSBs4bqnbioqLiDEkMOieSBsw6AgbeG7mXQgbeG7qWMgdMSDbmcgcuG6pXQgbOG7m24gduG7gSBt4bq3dCB4w6FjIHN14bqldCB0xrDGoW5nIMSR4buRaSwgY+G7p25nIGPhu5Egbmjhuq1uIMSR4buLbmggcuG6sW5nIGZhc3QgZm9vZCBsw6AgeeG6v3UgdOG7kSBuZ3V5IGPGoSBuZ2hpw6ptIHRy4buNbmcuDQoNCg0KDQpgYGB7cn0NCnhfZmYgPC0gYyhmYXN0X2Zvb2RfdGFiWyJ5ZXMiLCAiT2Jlc2UiXSwgZmFzdF9mb29kX3RhYlsibm8iLCAiTm9uX09iZXNlIl0pDQpuX2ZmIDwtIGMoc3VtKGZhc3RfZm9vZF90YWJbInllcyIsIF0pLCBzdW0oZmFzdF9mb29kX3RhYlsibm8iLCBdKSkNCnByb3AudGVzdCh4ID0geF9mZiwgbiA9IG5fZmYsIGNvcnJlY3QgPSBGQUxTRSkNCmBgYA0KDQpQaMOibiB0w61jaCBuaOG6sW0ga2nhu4NtIHRyYSB4ZW0gKip04bu3IGzhu4cgYsOpbyBwaMOsKiog4bufIG5ow7NtICoqY8OzIHRow7NpIHF1ZW4gxINuIGZhc3QgZm9vZCoqIHbDoCBuaMOzbSAqKmtow7RuZyDEg24gZmFzdCBmb29kKiogY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogaGF5IGtow7RuZy4NCg0KR+G7jWk6DQoNCiogJHBfMSQ6IFThu7cgbOG7hyBiw6lvIHBow6wg4bufIG5ow7NtICoqxINuIGZhc3QgZm9vZCoqDQoqICRwXzIkOiBU4bu3IGzhu4cga2jDtG5nIGLDqW8gcGjDrCDhu58gbmjDs20gKipraMO0bmcgxINuIGZhc3QgZm9vZCoqDQoNCioqR2nhuqMgdGh1eeG6v3QgdGjhu5FuZyBrw6o6KioNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KSF8wICY6IHBfMSA9IHBfMiBccXVhZCBcdGV4dHsoa2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCl9IFxcDQpIXzEgJjogcF8xIFxuZSBwXzIgXHF1YWQgXHRleHR7KGPDsyBz4buxIGtow6FjIGJp4buHdCl9DQpcZW5ke2FsaWduZWR9DQokJA0KDQoqKkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oKioNCg0KKiAkXGNoaV4yID0gMTQ4Ljg5JCwgZGYgPSAxDQoqICoqcC12YWx1ZSA8IDIuMiBcdGltZXMgMTBeey0xNn0qKg0KKiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBoaeG7h3UgdOG7tyBs4buHOg0KDQogICQkDQogIChcaGF0e3B9XzEgLSBcaGF0e3B9XzIpIFxpbiBbLTAuNDUyMixcIC0wLjM3MTNdDQogICQkDQoNCiogVuG7m2kgKipwLXZhbHVlIGfhuqduIGLhurFuZyAwKiosIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkKiosIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogZ2nhu69hIGhhaSB04bu3IGzhu4cuDQoqIFPhu7Ega2jDoWMgYmnhu4d0IHRo4buxYyBuZ2hp4buHbToNCg0KICAkJA0KICBcaGF0e3B9XzEgLSBcaGF0e3B9XzIgPSAwLjUxMDcgLSAwLjA3NzYg4omIIDAuNDMzMQ0KICAkJA0KDQoqIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG5nxrDhu51pIMSDbiBmYXN0IGZvb2QgY8OzICoqdOG7tyBs4buHIGLDqW8gcGjDrCBjYW8gaMahbiDEkcOhbmcga+G7gyoqIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyDEg24uDQoNCiogS2hv4bqjbmcgdGluIGPhuq15IGxv4bqhaSB0cuG7qyAwIGhvw6BuIHRvw6BuLCDEkWnhu4F1IG7DoHkgeMOhYyBuaOG6rW4gdMOtbmggKirhu5VuIMSR4buLbmggdsOgIMSRw6FuZyB0aW4gY+G6rXkqKiBj4bunYSBjaMOqbmggbOG7h2NoIHThu7cgbOG7hyBnaeG7r2EgaGFpIG5ow7NtLg0KDQoNCj4gUGjDom4gdMOtY2gga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGNobyB0aOG6pXkgdGjDs2kgcXVlbiB0acOqdSB0aOG7pSBmYXN0IGZvb2QgY8OzICoqbGnDqm4gcXVhbiBjaOG6t3QgY2jhur0gdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhur9uIHTDrG5oIHRy4bqhbmcgYsOpbyBwaMOsKiouIFbhu5tpIGtob+G6o25nIGPDoWNoIGfhuqduIDQ0IMSRaeG7g20gcGjhuqduIHRyxINtIHbhu4EgdOG7tyBs4buHIGLDqW8gcGjDrCBnaeG7r2EgaGFpIG5ow7NtLCBr4bq/dCBxdeG6oyBuw6B5IGNobyB0aOG6pXkgcuG6sW5nIGZhc3QgZm9vZCBsw6AgKipt4buZdCB54bq/dSB04buRIGjDoG5oIHZpIHF1YW4gdHLhu41uZyBj4bqnbiDEkcaw4bujYyBraeG7g20gc2/DoXQqKiB0cm9uZyBjw6FjIGNoxrDGoW5nIHRyw6xuaCBjYW4gdGhp4buHcCBz4bupYyBraOG7j2UgY+G7mW5nIMSR4buTbmcuDQoNCg0KIyMjICoqNS4zLjIuIFBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgYsOpbyBwaMOsIChgb2Jlc2l0eV9ncm91cGApIHbDoCB0aMOzaSBxdWVuIGtp4buDbSB0cmEgY2FsbyAoYGNhbG9yaWVfY2hlY2tgKSoqDQoNClBow6JuIHTDrWNoIG7DoHkgbmjhurFtIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90IHbhu4EgKipt4buRaSBsacOqbiBo4buHIGdp4buvYSB2aeG7h2Mga2nhu4NtIHRyYSBsxrDhu6NuZyBjYWxvIHRpw6p1IHRo4bulIHbDoCB0w6xuaCB0cuG6oW5nIGLDqW8gcGjDrCoqLiBDaMO6bmcgdMO0aSBr4buzIHbhu41uZyBow6BuaCB2aSBraeG7g20gc2/DoXQgZGluaCBkxrDhu6FuZyBuw6B5IHPhur0gZ8OzcCBwaOG6p24gZ2nhuqNtIHRoaeG7g3Ugbmd1eSBjxqEgYsOpbyBwaMOsLg0KDQoNCiMjIyMgKio1LjMuMi4xIELhuqNuZyB04bqnbiBz4buRKioNCmBgYHtyfQ0KY2Fsb3JpZV90YWIgPC0gdGFibGUob2Jlc2l0eSRjYWxvcmllX2NoZWNrLCBvYmVzaXR5JG9iZXNpdHlfZ3JvdXApDQpjYWxvcmllX3RhYg0KYGBgDQoNCiogVHJvbmcgc+G7kSA5NiBuZ8aw4budaSBraeG7g20gdHJhIGNhbG8gKGB5ZXNgKSwgY2jhu4kgKiozIG5nxrDhu51pIGLhu4sgYsOpbyBwaMOsKiogKFx+My4xJSkNCiogVHJvbmcgc+G7kSAyMDE1IG5nxrDhu51pICoqa2jDtG5nIGtp4buDbSB0cmEgY2FsbyoqLCBjw7MgdOG7m2kgKio5NjkgbmfGsOG7nWkgYsOpbyBwaMOsKiogKFx+NDguMSUpDQoNCuKftiBE4buvIGxp4buHdSBiYW4gxJHhuqd1IGNobyB0aOG6pXkgbeG7mXQgeHUgaMaw4bubbmcgcsO1IHLhu4d0OiAqKnZp4buHYyBraeG7g20gdHJhIGNhbG8gY8OzIHRo4buDIGxpw6puIHF1YW4gxJHhur9uIHThu7cgbOG7hyBiw6lvIHBow6wgdGjhuqVwIGjGoW4qKi4NCg0KDQojIyMjICoqNS4zLjIuMiBLaeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcgKEgwOiBraMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGNhbG9yaWVfY2hlY2sgdsOgIG9iZXNpdHlfZ3JvdXApKioNCmBgYHtyfQ0KY2hpc3EudGVzdChjYWxvcmllX3RhYikNCmBgYA0KxJDhu4MgeMOhYyDEkeG7i25oIHhlbSBz4buxIGtow6FjIGJp4buHdCB0csOqbiBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGhheSBraMO0bmcsIHRhIHRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmggKipDaGktc3F1YXJlKiouDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KKiAqKkjigoAqKjogYGNhbG9yaWVfY2hlY2tgIHbDoCBgb2Jlc2l0eV9ncm91cGAgxJHhu5ljIGzhuq1wLg0KKiAqKkjigoEqKjogSGFpIGJp4bq/biBuw6B5IGPDsyBt4buRaSBsacOqbiBo4buHIHRo4buRbmcga8OqLg0KDQoqKkvhur90IHF14bqjOioqDQoNCiogz4fCsiA9IDcyLjc3NCwgZGYgPSAxDQoqICoqcC12YWx1ZSA8IDIuMmUtMTYqKg0KDQoqS+G6v3QgbHXhuq1uOioqDQoNCj5W4bubaSBwLXZhbHVlIHLhuqV0IG5o4buPLCBjaMO6bmcgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEjigoAuIERvIMSRw7MsIHThu5NuIHThuqFpICoqbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSB2aeG7h2Mga2nhu4NtIHRyYSBjYWxvIHbDoCB0w6xuaCB0cuG6oW5nIGLDqW8gcGjDrCoqLg0KDQoNCiMjIyMgKio1LjMuMi4zIEJp4buDdSDEkeG7kyBj4buZdCB04bqnbiBzdeG6pXQqKg0KYGBge3J9DQpvYmVzaXR5ICU+JQ0KICBncm91cF9ieShjYWxvcmllX2NoZWNrLCBvYmVzaXR5X2dyb3VwKSAlPiUNCiAgc3VtbWFyaXNlKG4gPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpICU+JQ0KICBtdXRhdGUocGVyYyA9IHJvdW5kKG4gLyBzdW0obikgKiAxMDAsIDEpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2Fsb3JpZV9jaGVjaywgeSA9IHBlcmMsIGZpbGwgPSBvYmVzaXR5X2dyb3VwKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChwZXJjLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksIHZqdXN0ID0gLTAuMikgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyBiw6lvIHBow6wgdGhlbyB0aMOzaSBxdWVuIGtp4buDbSB0cmEgY2FsbyIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KQmnhu4N1IMSR4buTIGPhu5l0IHRo4buDIGhp4buHbiB04bu3IGzhu4cgcGjhuqduIHRyxINtIG5nxrDhu51pIGLDqW8gcGjDrCB0aGVvIHRow7NpIHF1ZW4gYGNhbG9yaWVfY2hlY2tgOg0KDQoqICoqTmjDs20gInllcyIgKGtp4buDbSB0cmEgY2FsbykqKjogY2jhu4kgKiowLjElKiogYsOpbyBwaMOsLg0KKiAqKk5ow7NtICJubyIqKjogdOG7tyBs4buHIGLDqW8gcGjDrCB04bubaSAqKjQ1LjklKiouDQoNCuKftiBLaMOhYyBiaeG7h3QgcuG6pXQgcsO1IHLDoG5nIGdp4buvYSBoYWkgbmjDs20uDQoNCiMjIyMgKio1LjMuMi40IFJSLCBPUiwgUHJvcCB0ZXN0KioNCg0KYGBge3J9DQpyaXNrcmF0aW8oY2Fsb3JpZV90YWIpDQpgYGANCg0KKipSZWxhdGl2ZSByaXNrIChSUik6KioNCg0KJCQNClJSID0gXGZyYWN7UChcdGV4dHtPYmVzZX18XHRleHR7Q2hlY2t9KX17UChcdGV4dHtPYmVzZX18XHRleHR7Tm8gY2hlY2t9KX0NCj0gXGZyYWN7My85Nn17OTY5LzIwMTV9IFxhcHByb3ggMC4wNjUNCiQkDQoNCiogS2hv4bqjbmcgdGluIGPhuq15IDk1JTogKDAuMDIxMyDigJMgMC4xOTgxKQ0KDQrin7YgKipOZ8aw4budaSBjw7MgdGjDs2kgcXVlbiBraeG7g20gdHJhIGNhbG8gY8OzIG5ndXkgY8ahIGLDqW8gcGjDrCB0aOG6pXAgaMahbiBcfjkzLjUlKiogc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIGtp4buDbSB0cmEuDQoNCg0KYGBge3J9DQpvZGRzcmF0aW8oY2Fsb3JpZV90YWIpDQpgYGANCioqT2RkcyBSYXRpbyAoT1IpOioqDQoNCiQkDQpPUiA9IFxmcmFjezMvOTN9ezk2OS8xMDQ2fSBcYXBwcm94IDAuMDM2Ng0KJCQNCg0KKiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlOiAoMC4wMDg3IOKAkyAwLjA5NzgpDQoNCuKftiAqKk9kZHMgKGPGoSBo4buZaSkgYsOpbyBwaMOsIOG7nyBuaMOzbSBraeG7g20gdHJhIGNhbG8gdGjhuqVwIGjGoW4gXH4yNyBs4bqnbioqIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBraeG7g20gdHJhLg0KDQoNCg0KYGBge3J9DQp4X2NhbCA8LSBjKGNhbG9yaWVfdGFiWyJ5ZXMiLCAiT2Jlc2UiXSwgY2Fsb3JpZV90YWJbIm5vIiwgIk5vbl9PYmVzZSJdKQ0Kbl9jYWwgPC0gYyhzdW0oY2Fsb3JpZV90YWJbInllcyIsIF0pLCBzdW0oY2Fsb3JpZV90YWJbIm5vIiwgXSkpDQpwcm9wLnRlc3QoeCA9IHhfY2FsLCBuID0gbl9jYWwsIGNvcnJlY3QgPSBGQUxTRSkNCmBgYA0KDQpYw6l0IGhhaSB04bu3IGzhu4c6DQoNCiogJHBfMSQ6IFThu7cgbOG7hyBiw6lvIHBow6wg4bufIG5ow7NtICoqY8OzIGtp4buDbSB0cmEgY2FsbyoqDQoqICRwXzIkOiBU4bu3IGzhu4cga2jDtG5nIGLDqW8gcGjDrCDhu58gbmjDs20gKipraMO0bmcga2nhu4NtIHRyYSBjYWxvKioNCioqR2nhuqMgdGh1eeG6v3Q6KioNCg0KKiBI4oKAOiBU4bu3IGzhu4cgYsOpbyBwaMOsIOG7nyBoYWkgbmjDs20gbMOgIGLhurFuZyBuaGF1Lg0KKiBI4oKBOiBU4bu3IGzhu4cgbsOgeSBraMOhYyBiaeG7h3QuDQokJA0KXGJlZ2lue2FsaWduZWR9DQpIXzAgJjogcF8xID0gcF8yIFxcDQpIXzEgJjogcF8xIFxuZSBwXzINClxlbmR7YWxpZ25lZH0NCiQkDQoNCg0KKipL4bq/dCBxdeG6ozoqKg0KDQoqIFjCsiA9IDg3LjI0LCBkZiA9IDENCiogKipwLXZhbHVlIDwgMi4yZS0xNioqDQoqIEtob+G6o25nIHRpbiBj4bqteSBjaG8gaGnhu4d1IHThu7cgbOG7hzogKiooLTAuNTI5LCAtMC40NDcpKioNCg0KVuG7m2kgcC12YWx1ZSBn4bqnbiBi4bqxbmcgMCwgY2jDum5nIHRhICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90ICRIXzAkKiog4bufIG3hu6ljIMO9IG5naMSpYSBi4bqldCBr4buzLiDEkGnhu4F1IG7DoHkgY3VuZyBj4bqlcCBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiBt4bqhbmggbeG6vSBjaG8gdGjhuqV5ICoqdOG7tyBs4buHIGLDqW8gcGjDrCBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgZ2nhu69hIGhhaSBuaMOzbSBow6BuaCB2aSoqLg0KDQpD4bulIHRo4buDOg0KDQoqICoqVOG7tyBs4buHIGLDqW8gcGjDrCoqIHRyb25nIG5ow7NtICoqY8OzIGtp4buDbSB0cmEgY2FsbyoqIGNo4buJIFx+My4xJSwgdHJvbmcga2hpIG5ow7NtIGPDsm4gbOG6oWkgbMOqbiDEkeG6v24gXH40OC4xJS4NCiogKipDaMOqbmggbOG7h2NoIHThu7cgbOG7hyB0aOG7sWMgbmdoaeG7h20qKiBsw6puIMSR4bq/biBraG/huqNuZyAqKjQ1IMSRaeG7g20gcGjhuqduIHRyxINtKiosIHbDoCBraG/huqNuZyB0aW4gY+G6rXkgeMOhYyBuaOG6rW4gc+G7sSBraMOhYyBiaeG7h3QgbMOgICoqcuG6pXQgY8OzIMO9IG5naMSpYSoqLg0KDQo+IFZp4buHYyB0aMaw4budbmcgeHV5w6puIGtp4buDbSB0cmEgbMaw4bujbmcgY2FsbyBo4bqlcCB0aOG7pSB0cm9uZyBraOG6qXUgcGjhuqduIMSDbiBjw7MgKipsacOqbiBo4buHIGNo4bq3dCBjaOG6vSB24bubaSB4w6FjIHN14bqldCBt4bqvYyBiw6lvIHBow6wgdGjhuqVwIGjGoW4qKi4gS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIHjDoWMgdGjhu7FjIMSRaeG7gXUgbsOgeSDhu58gbeG7qWMgxJHhu5kgdGjhu5FuZyBrw6ogbeG6oW5oIG3hur0uIFbhu4EgbeG6t3Qg4bupbmcgZOG7pW5nLCB0aMOzaSBxdWVuIHRoZW8gZMO1aSBuxINuZyBsxrDhu6NuZyB0acOqdSB0aOG7pSBuw6puIMSRxrDhu6NjIGtodXnhur9uIGtow61jaCB0cm9uZyBjw6FjIGNoxrDGoW5nIHRyw6xuaCBwaMOybmcgbmfhu6thIGLDqW8gcGjDrC4NCg0KDQojIyAqKjUuNC4gTcO0IGjDrG5oIGjhu5NpIHF1eSDEkWEgYmnhur9uIHbhu5tpIDMgaMOgbSBsacOqbiBr4bq/dCoqDQoNClRyb25nIHThuqV0IGPhuqMgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIChsb2dpdCwgcHJvYml0LCBjbG9nbG9nKSwgbeG7pWMgdGnDqnUgbMOgIMaw4bubYyBsxrDhu6NuZyB4w6FjIHN14bqldCBt4buZdCBjw6EgbmjDom4gcsahaSB2w6BvIG5ow7NtIGLDqW8gcGjDrCAoYG9iZXNlX2JpbmFyeSA9IDFgKSBk4buxYSB0csOqbiBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIG5oxrAgYGZhc3RfZm9vZGAsIGBjYWxvcmllX2NoZWNrYCB2w6AgYGFnZWAuDQoNClRhIHjDqXQgbcO0IGjDrG5oIHThu5VuZyBxdcOhdDoNCg0KJCQNCmcocCkgPSBcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBcdGV4dHtmYXN0XF9mb29keWVzfSArIFxiZXRhXzIgXGNkb3QgXHRleHR7Y2Fsb3JpZVxfY2hlY2t5ZXN9ICsgXGJldGFfMyBcY2RvdCBcdGV4dHthZ2V9DQokJA0KDQpUcm9uZyDEkcOzOg0KDQoqICRwID0gUChZID0gMSkkIGzDoCB4w6FjIHN14bqldCB0aHXhu5ljIG5ow7NtIGLDqW8gcGjDrC4NCiogJGcoXGNkb3QpJCBsw6AgaMOgbSBsacOqbiBr4bq/dCB0w7l5IHRodeG7mWMgdsOgbyBtw7QgaMOsbmguDQoqICRcYmV0YV9pJCBsw6AgaOG7hyBz4buRIGjhu5NpIHF1eSB0xrDGoW5nIOG7qW5nLCBj4bqnbiBkaeG7hW4gZ2nhuqNpLg0KDQoNCiMjIyAqKjUuNC4xLiBNw7QgaMOsbmggaOG7k2kgcXV5IMSRYSBiaeG6v24gduG7m2kgbGnDqm4ga+G6v3QgbG9naXQqKg0KDQpgYGB7cn0NCm9iZXNpdHkkb2Jlc2VfYmluYXJ5IDwtIGlmZWxzZShvYmVzaXR5JG9iZXNpdHlfbGV2ZWwgJWluJSBjKCJPYmVzaXR5X1R5cGVfSSIsICJPYmVzaXR5X1R5cGVfSUkiLCAiT2Jlc2l0eV9UeXBlX0lJSSIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwKQ0KDQojIExvZ2l0IG1vZGVsDQptb2RlbF9sb2dpdCA8LSBnbG0ob2Jlc2VfYmluYXJ5IH4gZmFzdF9mb29kICsgY2Fsb3JpZV9jaGVjayArIGFnZSAsIA0KICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvYmVzaXR5LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0KQ0KYGBgDQoNCk5o4bqxbSBwaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHTDrG5oIHRy4bqhbmcgYsOpbyBwaMOsIChiaeG6v24gbmjhu4sgcGjDom4gYG9iZXNlX2JpbmFyeWA6IDEgPSBCw6lvIHBow6wsIDAgPSBLaMO0bmcgYsOpbyBwaMOsKSBuZ2hpw6puIGPhu6l1IMSRw6MgeMOieSBk4buxbmcgbeG7mXQgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBjw7MgZOG6oW5nOg0KDQokJA0KXGxvZ1xsZWZ0KFxmcmFje1AoWSA9IDEgXG1pZCBYKX17MSAtIFAoWSA9IDEgXG1pZCBYKX1ccmlnaHQpID0gXGJldGFfMCArIFxiZXRhXzEgXGNkb3QgXHRleHR7ZmFzdFxfZm9vZHllc30gKyBcYmV0YV8yIFxjZG90IFx0ZXh0e2NhbG9yaWVcX2NoZWNreWVzfSArIFxiZXRhXzMgXGNkb3QgXHRleHR7YWdlfQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KKiBW4bq/IHRyw6FpIGzDoCAqKmxvZ2l0KiogY+G7p2EgeMOhYyBzdeG6pXQgYuG7iyBiw6lvIHBow6wsDQoqIEJp4bq/biBnaeG6o2kgdGjDrWNoIGfhu5NtOg0KDQogICogYGZhc3RfZm9vZHllc2A6IHRow7NpIHF1ZW4gxINuIGZhc3QgZm9vZCAoeWVzID0gMSksDQogICogYGNhbG9yaWVfY2hlY2t5ZXNgOiBow6BuaCB2aSBraeG7g20gdHJhIGzGsOG7o25nIGNhbG8gdGnDqnUgdGjhu6UgKHllcyA9IDEpLA0KICAqIGBhZ2VgOiB0deG7lWkgKGxpw6puIHThu6VjKSwNCiogQ8OhYyBo4buHIHPhu5EgJFxiZXRhJCDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIHBoxrDGoW5nIHBow6FwICoqdOG7kWkgxJFhIGjDs2EgaOG7o3AgbMO9IChNYXhpbXVtIExpa2VsaWhvb2QgRXN0aW1hdGlvbikqKi4NCg0KKipEaeG7hW4gZ2nhuqNpIGjhu4cgc+G7kSBo4buTaSBxdXkqKg0KDQpUYSBjw7MgdGjhu4MgZGnhu4VuIGdp4bqjaSBjw6FjIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgdGhlbyB4w6FjIHN14bqldCBi4bqxbmcgY8OhY2ggY2h1eeG7g24gdOG7qyBsb2dpdCB24buBIHjDoWMgc3XhuqV0Og0KDQokJA0KUChZID0gMSBcbWlkIFgpID0gXGZyYWN7MX17MSArIFxleHAoLVxldGEpfSwgXHF1YWQgXHRleHR7dHJvbmcgxJHDsyB9IFxldGEgPSBcYmV0YV8wICsgXGJldGFfMSB4XzEgKyBcY2RvdHMgKyBcYmV0YV9rIHhfaw0KJCQNCg0KKiAoYSkgSOG6sW5nIHPhu5EgKEludGVyY2VwdCA9IC0zLjk3MCkNCg0KVuG7m2kgY8OhIG5ow6JuICoqa2jDtG5nIMSDbiBmYXN0IGZvb2QqKiwgKipraMO0bmcga2nhu4NtIGNhbG8qKiwgdsOgICoqdHXhu5VpIGLhurFuZyAwKiosIGxvZ2l0IGPhu6dhIHjDoWMgc3XhuqV0IGLhu4sgYsOpbyBwaMOsIGzDoCAtMy45NzAsIHTGsMahbmcg4bupbmcgduG7m2kgeMOhYyBzdeG6pXQga2hv4bqjbmc6DQoNCiQkDQpQIFxhcHByb3ggXGZyYWN7MX17MSArIGVeezMuOTd9fSBcYXBwcm94IDAuMDE4NSBcICgxLjg1XCUpDQokJA0KDQrEkGnhu4F1IG7DoHkgcGjhuqNuIMOhbmggeMOhYyBzdeG6pXQgbuG7gW4gcuG6pXQgdGjhuqVwIHRyb25nIG5ow7NtIHRoYW0gY2hp4bq/dS4NCg0KKiAoYikgQmnhur9uIGZhc3RcX2Zvb2R5ZXMgPSAyLjQwNQ0KDQpLaGkgY8OhIG5ow6JuIGPDsyB0aMOzaSBxdWVuIMSDbiBmYXN0IGZvb2QsIGxvZ2l0IHTEg25nIHRow6ptIDIuNDA1IMSRxqFuIHbhu4suIE9kZHMgYsOpbyBwaMOsIHTEg25nOg0KDQokJA0KXGV4cCgyLjQwNSkgXGFwcHJveCAxMS4wOA0KJCQNCg0K4oaSICoqTmd1eSBjxqEgYsOpbyBwaMOsIGNhbyBoxqFuIGtob+G6o25nIDExIGzhuqduKiogc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIMSDbiBmYXN0IGZvb2QgKGdp4buvIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpKS4NCg0KKiAoYykgQmnhur9uIGNhbG9yaWVcX2NoZWNreWVzID0gLTIuNzk0DQoNCk5nxrDhu6NjIGzhuqFpLCB24bubaSBuZ8aw4budaSB0aMaw4budbmcgeHV5w6puICoqa2nhu4NtIHRyYSBjYWxvKiosIGxvZ2l0IGdp4bqjbSDEkWkgMi43OTQgxJHGoW4gduG7iyDihpIgb2RkcyBnaeG6o206DQoNCiQkDQpcZXhwKC0yLjc5NCkgXGFwcHJveCAwLjA2MQ0KJCQNCg0K4oaSIE9kZHMgYsOpbyBwaMOsICoqZ2nhuqNtIGjGoW4gOTMlKiosIGNobyB0aOG6pXkgaMOgbmggdmkgbsOgeSBjw7MgKip0w6FjIGThu6VuZyBi4bqjbyB24buHIG3huqFuaCoqLg0KDQoqIChkKSBCaeG6v24gYWdlID0gMC4wNjgNCg0KTeG7l2kgbsSDbSB0deG7lWkgdMSDbmcgdGjDqm0gbMOgbSBvZGRzIGLDqW8gcGjDrCB0xINuZzoNCg0KJCQNClxleHAoMC4wNjgpIFxhcHByb3ggMS4wNw0KJCQNCg0K4oaSIE3hu5dpIG7Eg20gdMSDbmcgdHXhu5VpIHTGsMahbmcg4bupbmcgduG7m2kgb2RkcyBiw6lvIHBow6wgKip0xINuZyA3JSoqLCBt4buZdCBjw6FjaCB0dXnhur9uIHTDrW5oLg0KDQoqKjUuIEvhur90IGx14bqtbioqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgY2hvIHRo4bqleSBy4bqxbmc6DQoNCiogKipUaMOzaSBxdWVuIMSDbiBmYXN0IGZvb2QqKiBsw6AgeeG6v3UgdOG7kSBuZ3V5IGPGoSBjaMOtbmggZ8OieSBiw6lvIHBow6wsDQoqICoqSMOgbmggdmkga2nhu4NtIHRyYSBjYWxvKiogY8OzIHTDoWMgZOG7pW5nIHBow7JuZyB0csOhbmggbeG6oW5oIG3hur0sDQoqICoqVHXhu5VpKiogY8WpbmcgxJHDs25nIHZhaSB0csOyIHRyb25nIHPhu7EgdMSDbmcgeMOhYyBzdeG6pXQgbeG6r2MgYsOpbyBwaMOsLg0KDQpU4bqldCBj4bqjIGJp4bq/biDEkeG7gXUgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8sIHbDoCBtw7QgaMOsbmggY8OzIMSR4buZIHBow7kgaOG7o3AgdOG7kXQsIGzDoCBt4buZdCBs4buxYSBjaOG7jW4gaOG7o3AgbMO9IGNobyBwaMOibiB0w61jaCB4w6FjIHN14bqldCBiw6lvIHBow6wgdHLDqm4gdOG6rXAgZOG7ryBsaeG7h3UgaGnhu4duIHThuqFpLg0KDQojIyMgKio1LjQuMi4gTcO0IGjDrG5oIGjhu5NpIHF1eSDEkWEgYmnhur9uIHbhu5tpIGxpw6puIGvhur90IHByb2JpdCoqDQoNCg0KYGBge3J9DQojIFByb2JpdCBtb2RlbA0KbW9kZWxfcHJvYml0IDwtIGdsbShvYmVzZV9iaW5hcnkgfiBmYXN0X2Zvb2QgKyBjYWxvcmllX2NoZWNrICsgYWdlICwgDQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvYmVzaXR5LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpKQ0Kc3VtbWFyeShtb2RlbF9wcm9iaXQpDQpgYGANCg0KTcO0IGjDrG5oIGPDsyBk4bqhbmc6DQoNCiQkDQpcUGhpXnstMX0oUChZID0gMSBcbWlkIFgpKSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e2Zhc3RcX2Zvb2R5ZXN9ICsgXGJldGFfMiBcY2RvdCBcdGV4dHtjYWxvcmllXF9jaGVja3llc30gKyBcYmV0YV8zIFxjZG90IFx0ZXh0e2FnZX0NCiQkDQoNClRyb25nIMSRw7MsICRcUGhpXnstMX0oXGNkb3QpJCBsw6AgaMOgbSBuZ2jhu4tjaCDEkeG6o28gY+G7p2EgcGjDom4gcGjhu5FpIGNodeG6qW4gY2h14bqpbiBow7NhIChwcm9iaXQgbGluayksIHbDoCBjw6FjIGjhu4cgc+G7kSAkXGJldGFfaSQgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGLhurFuZyBwaMawxqFuZyBwaMOhcCB04buRaSDEkWEgaMOzYSBo4bujcCBsw70gKE1MRSkuIEdpw6EgdHLhu4sgJFAoWSA9IDEgXG1pZCBYKSQgxJHhuqFpIGRp4buHbiBjaG8gKip4w6FjIHN14bqldCBt4buZdCBjw6EgbmjDom4gdGh14buZYyBuaMOzbSBiw6lvIHBow6wqKiwgZOG7sWEgdHLDqm4gxJHhurdjIMSRaeG7g20gY+G7p2EgaOG7jS4NCg0KDQoqKkRp4buFbiBnaeG6o2kgw70gbmdoxKlhIHRo4buRbmcga8OqKioNCg0KKiAqKkludGVyY2VwdCA9IC0yLjI4OSoqOiBLaGkgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIOG7nyBt4bupYyB0aGFtIGNoaeG6v3UgKGBmYXN0X2Zvb2QgPSAibm8iYCwgYGNhbG9yaWVfY2hlY2sgPSAibm8iYCwgdsOgIGBhZ2UgPSAwYCksIGdpw6EgdHLhu4sgY+G7p2EgaMOgbSBsacOqbiBr4bq/dCAoei1zY29yZSkgbMOgIC0yLjI4OS4gVMawxqFuZyDhu6luZyB24bubaSB4w6FjIHN14bqldCBraG/huqNuZyAxLjElLCB0aGVvIGLhuqNuZyBwaMOibiBwaOG7kWkgY2h14bqpbiBjaHXhuqluIGjDs2EuDQoNCiogKipmYXN0XF9mb29keWVzID0gMS4zNzcqKjogTmjhu69uZyBuZ8aw4budaSAqKmPDsyB0aMOzaSBxdWVuIMSDbiBmYXN0IGZvb2QqKiBjw7Mgei1zY29yZSBjYW8gaMahbiAxLjM3NyDEkcahbiB24buLIHNvIHbhu5tpIG5ow7NtIGtow7RuZyDEg24sIGdp4buvIGPDoWMgeeG6v3UgdOG7kSBraMOhYyBraMO0bmcgxJHhu5VpLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB4w6FjIHN14bqldCBiw6lvIHBow6wgdMSDbmcgbeG6oW5oIHRoZW8gaMaw4bubbmcgZMawxqFuZyDigJQgbMOgIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaCBjaG8gbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgZmFzdCBmb29kIHbDoCBiw6lvIHBow6wuDQoNCiogKipjYWxvcmllXF9jaGVja3llcyA9IC0xLjQ2MCoqOiBWaeG7h2MgKipraeG7g20gc2/DoXQgbMaw4bujbmcgY2FsbyoqIGPDsyB0w6FjIGThu6VuZyBsw6BtICoqZ2nhuqNtIHjDoWMgc3XhuqV0IGLDqW8gcGjDrCoqLiBI4buHIHPhu5Egw6JtIGNobyB0aOG6pXkgY8OhIG5ow6JuIGPDsyBow6BuaCB2aSBuw6B5IHPhur0gY8OzIHotc2NvcmUgZ2nhuqNtIHh14buRbmcgdHJ1bmcgYsOsbmggMS40NiDEkcahbiB24buLLCB04burIMSRw7MgbMOgbSBnaeG6o20geMOhYyBzdeG6pXQgdGh14buZYyBuaMOzbSBiw6lvIHBow6wgbeG7mXQgY8OhY2ggxJHDoW5nIGvhu4MuDQoNCiogKiphZ2UgPSAwLjA0MCoqOiBN4buXaSBuxINtIHTEg25nIHRow6ptIHR14buVaSB0xrDGoW5nIOG7qW5nIHbhu5tpIHTEg25nIG5o4bq5IHotc2NvcmUgY+G7p2EgYsOpbyBwaMOsIGtob+G6o25nIDAuMDQwIMSRxqFuIHbhu4suIMSQw6J5IGzDoCB0w6FjIMSR4buZbmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8sIHBo4bqjbiDDoW5oIHh1IGjGsOG7m25nIG5ndXkgY8ahIGLDqW8gcGjDrCAqKnTEg25nIGThuqduIHRoZW8gdHXhu5VpKiouDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KTcO0IGjDrG5oIHByb2JpdCBraOG6s25nIMSR4buLbmggcuG6sW5nIGPDoWMgeeG6v3UgdOG7kSBow6BuaCB2aSBuaMawICoqxINuIGZhc3QgZm9vZCB0aMaw4budbmcgeHV5w6puKiogaGF5ICoqdGhp4bq/dSBraeG7g20gc2/DoXQgY2FsbyoqIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgYsOpbyBwaMOsLiAqKlR14buVaSoqIGPFqW5nIGzDoCBt4buZdCB54bq/dSB04buRIG5ndXkgY8ahIMSR4buZYyBs4bqtcC4gTcO0IGjDrG5oIGdpw7pwIMSR4buLbmggbMaw4bujbmcgeMOhYyBzdeG6pXQgbeG6r2MgYsOpbyBwaMOsIHRoZW8gdOG7q25nIMSR4bq3YyDEkWnhu4NtIGPDoSBuaMOibiwgdsOgIGPDsyB0aOG7gyDhu6luZyBk4bulbmcgdHJvbmcgcGjDom4gdMOtY2ggbmd1eSBjxqEgc+G7qWMga2jhu49lIGPhu5luZyDEkeG7k25nIGPFqW5nIG5oxrAgeMOieSBk4buxbmcgbcO0IGjDrG5oIGThu7EgYsOhbyB5IHThur8uDQoNCg0KIyMjICoqNS40LjMuIE3DtCBow6xuaCBo4buTaSBxdXkgxJFhIGJp4bq/biB24bubaSBsacOqbiBr4bq/dCBjbG9nbG9nKioNCg0KDQpgYGB7cn0NCiMgQ29tcGxlbWVudGFyeSBsb2ctbG9nIG1vZGVsDQptb2RlbF9jbG9nbG9nIDwtIGdsbShvYmVzZV9iaW5hcnkgfiBmYXN0X2Zvb2QgKyBjYWxvcmllX2NoZWNrICsgYWdlICwgDQogICAgICAgICAgICAgICAgICAgICBkYXRhID0gb2Jlc2l0eSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIikpDQpzdW1tYXJ5KG1vZGVsX2Nsb2dsb2cpDQoNCmBgYA0KDQpNw7QgaMOsbmggY8OzIGThuqFuZzoNCg0KJCQNClxsb2coLVxsb2coMSAtIFAoWSA9IDEgXG1pZCBYKSkpID0gXGJldGFfMCArIFxiZXRhXzEgXGNkb3QgXHRleHR7ZmFzdFxfZm9vZHllc30gKyBcYmV0YV8yIFxjZG90IFx0ZXh0e2NhbG9yaWVcX2NoZWNreWVzfSArIFxiZXRhXzMgXGNkb3QgXHRleHR7YWdlfQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KKiAkUChZID0gMSBcbWlkIFgpJDogeMOhYyBzdeG6pXQgbeG7mXQgY8OhIG5ow6JuIHLGoWkgdsOgbyBuaMOzbSBiw6lvIHBow6wsDQoqIEjDoG0gbGnDqm4ga+G6v3QgY2xvZ2xvZyB0aMaw4budbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcga2hpIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGPhu6dhIHPhu7Ega2nhu4duIGzDoCB0aOG6pXAgKHRyw6FpIHbhu5tpIGxvZ2l0LCBwcm9iaXQgcGjDuSBo4bujcCBoxqFuIGNobyB4w6FjIHN14bqldCB0cnVuZyBiw6xuaCksDQoqIEPDoWMgaOG7hyBz4buRICRcYmV0YV9pJCDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIHBoxrDGoW5nIHBow6FwICoqdOG7kWkgxJFhIGjDs2EgaMOgbSBo4bujcCBsw70gKE1MRSkqKi4NCg0KKipEaeG7hW4gZ2nhuqNpIMO9IG5naMSpYSBjw6FjIGjhu4cgc+G7kSoqDQoNCiogKipJbnRlcmNlcHQgPSAtMy4yMDUqKjogVuG7m2kgY8OhYyBjw6EgbmjDom4gKipraMO0bmcgxINuIGZhc3QgZm9vZCoqLCAqKmtow7RuZyBraeG7g20gY2FsbyoqIHbDoCAqKnR14buVaSBi4bqxbmcgMCoqLCBjbG9nbG9nIGPhu6dhIHjDoWMgc3XhuqV0IG3huq9jIGLDqW8gcGjDrCBsw6AgLTMuMjA1LiDEkGnhu4F1IG7DoHkgdMawxqFuZyDEkcawxqFuZyB4w6FjIHN14bqldCB44bqjeSByYSBy4bqldCB0aOG6pXAsIGfhuqduIDQlIHRoZW8gaMOgbSBuZ2jhu4tjaCDEkeG6o28gY2xvZ2xvZy4NCg0KKiAqKkZhc3RcX2Zvb2R5ZXMgPSAyLjAyNCoqOiBLaGkgbeG7mXQgY8OhIG5ow6JuICoqY8OzIHRow7NpIHF1ZW4gxINuIGZhc3QgZm9vZCoqLCBjbG9nbG9nIGPhu6dhIHjDoWMgc3XhuqV0IG3huq9jIGLDqW8gcGjDrCB0xINuZyB0aMOqbSAyLjAyNCDEkcahbiB24buLLCB0xrDGoW5nIOG7qW5nIHbhu5tpIHjDoWMgc3XhuqV0IHTEg25nICoqbeG6oW5oKiouIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IGZhc3QgZm9vZCBsw6AgbeG7mXQgKip54bq/dSB04buRIG5ndXkgY8ahIHLhuqV0IG3huqFuaCoqIMSR4buRaSB24bubaSBiw6lvIHBow6wuDQoNCiogKipDYWxvcmllXF9jaGVja3llcyA9IC0yLjU2MSoqOiBOaOG7r25nIG5nxrDhu51pIGPDsyBow6BuaCB2aSAqKmtp4buDbSBzb8OhdCBsxrDhu6NuZyBjYWxvIG7huqFwIHbDoG8qKiBjw7MgY2xvZ2xvZyBnaeG6o20gMi41NjEgxJHGoW4gduG7iywgdOG7qWMgbMOgIHjDoWMgc3XhuqV0IGLhu4sgYsOpbyBwaMOsICoqZ2nhuqNtIMSRw6FuZyBr4buDKiogc28gduG7m2kgbmjDs20ga2jDtG5nIGtp4buDbSBjYWxvLiDEkMOieSBsw6AgeeG6v3UgdOG7kSAqKmLhuqNvIHbhu4cqKi4NCg0KKiAqKkFnZSA9IDAuMDM2Kio6IE3hu5dpIG7Eg20gdHXhu5VpIHTEg25nIHRow6ptIGzDoG0gdMSDbmcgY2xvZ2xvZyBj4bunYSB4w6FjIHN14bqldCBiw6lvIHBow6wga2hv4bqjbmcgMC4wMzYgxJHGoW4gduG7iy4gxJBp4buBdSBuw6B5IHBo4bqjbiDDoW5oICoqbmd1eSBjxqEgdMSDbmcgZOG6p24gdGhlbyDEkeG7mSB0deG7lWkqKi4NCg0KxJDhu4MgY2h1eeG7g24gY2xvZ2xvZyB0aMOgbmggeMOhYyBzdeG6pXQgY+G7pSB0aOG7gywgdGEgZMO5bmcgY8O0bmcgdGjhu6ljIG5naOG7i2NoIMSR4bqjbzoNCg0KJCQNClAoWSA9IDEgXG1pZCBYKSA9IDEgLSBcZXhwKC1cZXhwKFxldGEpKSwgXHF1YWQgXHRleHR7dHJvbmcgxJHDsyB9IFxldGEgPSBcYmV0YV8wICsgXGJldGFfMSB4XzEgKyBcY2RvdHMgKyBcYmV0YV9rIHhfaw0KJCQNCg0KVsOtIGThu6UsIHbhu5tpIG3hu5l0IGPDoSBuaMOibiAxOCB0deG7lWksIMSDbiBmYXN0IGZvb2QsIGtow7RuZyBraeG7g20gdHJhIGNhbG86DQokXGV0YSA9IC0zLjIwNSArIDIuMDI0IFxjZG90IDEgLSAyLjU2MSBcY2RvdCAwICsgMC4wMzYgXGNkb3QgMTggPSAtMy4yMDUgKyAyLjAyNCArIDAgKyAwLjY0OCA9IC0wLjUzMyQNCg0KJCQNClAgXGFwcHJveCAxIC0gXGV4cCgtXGV4cCgtMC41MzMpKSBcYXBwcm94IDEgLSBcZXhwKC0xLjcwNCkgXGFwcHJveCAwLjgxNw0KJCQNCg0K4oaSIFjDoWMgc3XhuqV0IG3huq9jIGLDqW8gcGjDrCBy4bqldCBjYW8uDQoNCioqS+G6v3QgbHXhuq1uKioNCg0KTcO0IGjDrG5oIGNsb2dsb2cgY2hvIHRo4bqleSBy4bqxbmc6DQoNCiogKipUaMOzaSBxdWVuIMSDbiBmYXN0IGZvb2QqKiBsw6BtIHTEg25nIMSRw6FuZyBr4buDIG5ndXkgY8ahIG3huq9jIGLDqW8gcGjDrCwNCiogKipLaeG7g20gc2/DoXQgbMaw4bujbmcgY2FsbyoqIGPDsyB0w6FjIGThu6VuZyBi4bqjbyB24buHIHLDtSBy4buHdCwNCiogKipUdeG7lWkgdMOhYyoqIGzDoCB54bq/dSB04buRIGfDs3AgcGjhuqduIGzDoG0gdMSDbmcgbmd1eSBjxqEgdGhlbyB0aOG7nWkgZ2lhbi4NCg0KVuG7m2kgdOG6pXQgY+G6oyBjw6FjIGjhu4cgc+G7kSDEkeG7gXUgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8sIG3DtCBow6xuaCBjbG9nbG9nIGzDoCBt4buZdCBs4buxYSBjaOG7jW4gcGjDuSBo4bujcCBraGkgcGjDom4gdMOtY2ggY8OhYyBz4buxIGtp4buHbiBjw7MgeMOhYyBzdeG6pXQgY2FvIG5oxrBuZyBraMO0bmcgY8OibiB44bupbmcgZ2nhu69hIGhhaSBuaMOzbS4gVHV5IG5oacOqbiwgc28gduG7m2kgbG9naXQgdsOgIHByb2JpdCwgY2xvZ2xvZyBjw7MgKipBSUMgbOG7m24gaMahbioqLCB2w6wgduG6rXkgY8OzIHRo4buDICoqw610IHBow7kgaOG7o3AgaMahbiB0cm9uZyB0csaw4budbmcgaOG7o3AgY+G7pSB0aOG7gyBj4bunYSBi4buZIGThu68gbGnhu4d1IG7DoHkqKi4NCg0KDQojIyMgKio1LjQuNC4gU28gc8OhbmggbcO0IGjDrG5oIHRoZW8gdGnDqnUgY2jDrSBBSUMqKg0KDQrEkOG7gyDEkcOhbmggZ2nDoSB2w6AgbOG7sWEgY2jhu41uIG3DtCBow6xuaCB04buRdCBuaOG6pXQgdHJvbmcgc+G7kSBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gxJHDoyB4w6J5IGThu7FuZyAobG9naXQsIHByb2JpdCwgY2xvZ2xvZyksIGNow7puZyB0YSBz4butIGThu6VuZyB0acOqdSBjaMOtICoqQWthaWtlIEluZm9ybWF0aW9uIENyaXRlcmlvbiAoQUlDKSoqLiBBSUMgbMOgIHRoxrDhu5tjIMSRbyBwaOG7lSBiaeG6v24gdHJvbmcgdGjhu5FuZyBrw6ogZMO5bmcgxJHhu4MgY8OibiBi4bqxbmcgZ2nhu69hICoqxJHhu5kgcGjDuSBo4bujcCAoZ29vZG5lc3Mtb2YtZml0KSoqIHbDoCAqKsSR4buZIHBo4bupYyB04bqhcCBj4bunYSBtw7QgaMOsbmggKG1vZGVsIGNvbXBsZXhpdHkpKiouDQoNCioqQ8O0bmcgdGjhu6ljIEFJQzoqKg0KDQokJA0KXHRleHR7QUlDfSA9IC0yXGxvZyhMKSArIDJrDQokJA0KDQpUcm9uZyDEkcOzOg0KDQoqICRcbG9nKEwpJDogTG9nLWxpa2VsaWhvb2QgY+G7p2EgbcO0IGjDrG5oICht4bupYyDEkeG7mSBwaMO5IGjhu6NwIHbhu5tpIGThu68gbGnhu4d1KQ0KKiAkayQ6IFPhu5EgdGhhbSBz4buRIHRyb25nIG3DtCBow6xuaCAoYmFvIGfhu5NtIGjhu4cgc+G7kSB2w6AgaW50ZXJjZXB0KQ0KDQpgYGB7cn0NCkFJQyhtb2RlbF9sb2dpdCwgbW9kZWxfcHJvYml0LCBtb2RlbF9jbG9nbG9nKQ0KYGBgDQoNCiogKipNw7QgaMOsbmggbG9naXQgY8OzIEFJQyBuaOG7jyBuaOG6pXQgKDI1ODEuODgyKSoqLCBjaG8gdGjhuqV5IG7DsyBjdW5nIGPhuqVwIHPhu7EgKipjw6JuIGLhurFuZyB04buRdCBuaOG6pXQgZ2nhu69hIHTDrW5oIMSRxqFuIGdp4bqjbiB2w6Aga2jhuqMgbsSDbmcgZ2nhuqNpIHRow61jaCBk4buvIGxp4buHdSoqLg0KKiBN4bq3YyBkw7kgbcO0IGjDrG5oIHByb2JpdCBjw7MgxJHhu5kgcGjDuSBo4bujcCBn4bqnbiB0xrDGoW5nIMSRxrDGoW5nIChBSUMgPSAyNTg1Ljk5MCksIG5oxrBuZyBjYW8gaMahbiBuw6puIGLhu4sgbG/huqFpIHRy4burIHRoZW8gbmd1ecOqbiBsw70gdOG7kWkgxrB1IEFJQy4NCiogTcO0IGjDrG5oIGNsb2dsb2cgY8OzIEFJQyBjYW8gbmjhuqV0ICgyNTk3LjQ4MSksIGNobyB0aOG6pXkgKirDrXQgcGjDuSBo4bujcCBoxqFuKiogc28gduG7m2kgaGFpIG3DtCBow6xuaCBjw7JuIGzhuqFpIGNobyBi4buZIGThu68gbGnhu4d1IG7DoHkuDQoNCj4gVHLDqm4gY8ahIHPhu58gdGnDqnUgY2jDrSBBSUMsICoqbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpdCoqIMSRxrDhu6NjIMSRw6FuaCBnacOhIGzDoCAqKmzhu7FhIGNo4buNbiB04buRdCBuaOG6pXQqKiDEkeG7gyBtw7QgdOG6oyB4w6FjIHN14bqldCBiw6lvIHBow6wgZOG7sWEgdHLDqm4gY8OhYyB54bq/dSB04buRIGBmYXN0X2Zvb2RgLCBgY2Fsb3JpZV9jaGVja2AgdsOgIGBhZ2VgLiBOZ2/DoGkgcmEsIG3DtCBow6xuaCBsb2dpdCBjw7JuIGPDsyDGsHUgxJFp4buDbSB2xrDhu6N0IHRy4buZaSDhu58ga2jhuqMgbsSDbmcgKipkaeG7hW4gZ2nhuqNpIGjhu4cgc+G7kSBkxrDhu5tpIGThuqFuZyBvZGRzIHJhdGlvKiosIGdpw7pwIGdp4bqjaSB0aMOtY2ggcsO1IHLDoG5nIHTDoWMgxJHhu5luZyBj4bunYSB04burbmcgYmnhur9uIMSR4buZYyBs4bqtcCBsw6puIHjDoWMgc3XhuqV0IGLDqW8gcGjDrCDigJMgxJFp4buBdSBuw6B5IMSR4bq3YyBiaeG7h3QgaOG7r3Ugw61jaCB0cm9uZyBjw6FjIHBow6JuIHTDrWNoIGThu4tjaCB04buFIGjhu41jIGhv4bq3YyBraG9hIGjhu41jIGjDoG5oIHZpLg0KDQojIyMgKio1LjQuNC4gU28gc8OhbmggbcO0IGjDrG5oIHRoZW8gKkJyaWVyIFNjb3JlKioNCg0KQsOqbiBj4bqhbmggQUlDLCBt4buZdCBjaOG7iSBz4buRIHBo4buVIGJp4bq/biBraMOhYyDEkeG7gyDEkcOhbmggZ2nDoSBjaOG6pXQgbMaw4bujbmcgbcO0IGjDrG5oIHBow6JuIGxv4bqhaSBuaOG7iyBwaMOibiBsw6AgKipCcmllciBTY29yZSoqLiDEkMOieSBsw6AgdGjGsOG7m2MgxJFvIMSR4buZIGNow61uaCB4w6FjIGPhu6dhIGThu7EgYsOhbyB4w6FjIHN14bqldC4NCg0KQ8O0bmcgdGjhu6ljIEJyaWVyIFNjb3JlOg0KDQokJA0KXHRleHR7QnJpZXIgU2NvcmV9ID0gXGZyYWN7MX17bn0gXHN1bV97aT0xfV5uIChcaGF0e3B9X2kgLSB5X2kpXjINCiQkDQoNClRyb25nIMSRw7M6DQoNCiogJFxoYXR7cH1faSQ6IFjDoWMgc3XhuqV0IGThu7EgxJFvw6FuIGPhu6dhIG3DtCBow6xuaCBjaG8gcXVhbiBzw6F0IHRo4bupICRpJA0KKiAkeV9pIFxpbiBcezAsIDFcfSQ6IE5ow6NuIHRo4buxYyB04bq/ICgwOiBOb24tb2Jlc2UsIDE6IE9iZXNlKQ0KDQoNCg0KKiAqKsOdIG5naMSpYSBj4bunYSBCcmllciBTY29yZSoqOiBDaOG7iSBz4buRIG7DoHkgxJFvIGzGsOG7nW5nIGtob+G6o25nIGPDoWNoIHRydW5nIGLDrG5oIGdp4buvYSB4w6FjIHN14bqldCBk4buxIMSRb8OhbiB2w6AgbmjDo24gdGjhu7FjIHThur8uIEdpw6EgdHLhu4sgY8OgbmcgKipn4bqnbiAwKiogdGjDrCBtw7QgaMOsbmggY8OgbmcgY2jDrW5oIHjDoWMuIEdpw6EgdHLhu4sgdOG7kWkgxJFhIGPDsyB0aOG7gyBsw6AgMC4yNSBu4bq/dSBtw7QgaMOsbmggxJFvw6FuIHjDoWMgc3XhuqV0ID0gMC41IGNobyB04bqldCBj4bqjIGPDoWMgcXVhbiBzw6F0Lg0KDQoNCmBgYHtyfQ0KQnJpZXJTY29yZShtb2RlbF9sb2dpdCkgDQpCcmllclNjb3JlKG1vZGVsX3Byb2JpdCkNCkJyaWVyU2NvcmUobW9kZWxfY2xvZ2xvZykNCmBgYA0KDQoqICoqTcO0IGjDrG5oIGxvZ2l0KiogY8OzIEJyaWVyIFNjb3JlIHRo4bqlcCBuaOG6pXQgKCoqMC4yMTMyKiopLCB0aOG7gyBoaeG7h24gcuG6sW5nICoqeMOhYyBzdeG6pXQgZOG7sSDEkW/DoW4gZ+G6p24gxJHDum5nIG5o4bqldCB24bubaSB0aOG7sWMgdOG6vyoqLCB0cm9uZyBiYSBtw7QgaMOsbmggxJHGsOG7o2Mgc28gc8OhbmguDQoNCiogTeG6t2MgZMO5IHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBsb2dpdCB2w6AgcHJvYml0IGtow7RuZyBs4bubbiAoY2jDqm5oIGzhu4djaCDiiYggMC4wMDAzKSwgbcO0IGjDrG5oICoqY2xvZ2xvZyB0aOG7gyBoaeG7h24ga8OpbSBoxqFuIMSRw6FuZyBr4buDKiosIHbhu5tpIHNhaSBs4buHY2ggeMOhYyBzdeG6pXQgZOG7sSDEkW/DoW4gdHJ1bmcgYsOsbmggbOG7m24gaMahbi4NCg0KKiDEkGnhu4F1IG7DoHkgKipwaMO5IGjhu6NwIHbhu5tpIGvhur90IHF14bqjIEFJQyoqLCBraGkgbG9naXQgY8OzIEFJQyB0aOG6pXAgbmjhuqV0LiBIYWkgY2jhu4kgc+G7kSBuw6B5IGPDuW5nIGNobyB0aOG6pXkgcuG6sW5nIG3DtCBow6xuaCBsb2dpdCBsw6Ag4bupbmcgdmnDqm4gdOG7kXQgbmjhuqV0Lg0KDQpE4buxYSB0csOqbiAqKmNo4buJIHPhu5EgQnJpZXIgU2NvcmUqKiwgdGEga+G6v3QgbHXhuq1uIHLhurFuZyBtw7QgaMOsbmggaOG7k2kgcXV5ICoqbG9naXQqKiBraMO0bmcgY2jhu4kgY8OzIEFJQyB0aOG6pXAgbcOgIGPDsm4gY8OzICoqxJHhu5kgY2jDrW5oIHjDoWMgeMOhYyBzdeG6pXQgY2FvIG5o4bqldCoqIGtoaSBk4buxIMSRb8OhbiBraOG6oyBuxINuZyBt4buZdCBjw6EgbmjDom4gdGh14buZYyBuaMOzbSBiw6lvIHBow6wuDQoNCkRvIMSRw7MsIG3DtCBow6xuaCBsb2dpdCB0aeG6v3AgdOG7pWMgxJHGsOG7o2MgbOG7sWEgY2jhu41uIGzDoCAqKm3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gxrB1IHZp4buHdCBuaOG6pXQqKiB0cm9uZyBuZ2hpw6puIGPhu6l1IG7DoHksIGPhuqMgduG7gSBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIGzhuqtuIGhp4buHdSBxdeG6oyBk4buxIMSRb8Ohbi4NCg0KIyMjICoqIDUuNC41LiBNYSB0cuG6rW4gbmjhuqdtIGzhuqtuKioNCg0KYGBge3J9DQojIEThu7EgYsOhbyB4w6FjIHN14bqldCB04burIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMNCnByZWRfbG9naXQgPC0gcHJlZGljdChtb2RlbF9sb2dpdCwgdHlwZSA9ICJyZXNwb25zZSIpDQoNCiMgVMOtbmggbmfGsOG7oW5nIHBow6JuIGxv4bqhaSB04buRdCBuaOG6pXQgdOG7qyBST0MNCmxpYnJhcnkocFJPQykNCnJvY19sb2dpdCA8LSByb2Mob2Jlc2l0eSRvYmVzZV9iaW5hcnksIHByZWRfbG9naXQpDQp0aHJlc2ggPC0gY29vcmRzKHJvY19sb2dpdCwgImJlc3QiLCByZXQgPSAidGhyZXNob2xkIikNCg0KIyBQaMOibiBsb+G6oWkgbmjhu4sgcGjDom4gdGhlbyBuZ8aw4buhbmcNCnByZWRfbG9naXRfbGFiZWwgPC0gaWZlbHNlKHByZWRfbG9naXQgPj0gYXMubnVtZXJpYyh0aHJlc2gpLCAxLCAwKQ0KDQojIE1hIHRy4bqtbiBuaOG6p20gbOG6q24gxJHhuqd5IMSR4bunIHRow7RuZyB0aW4NCmxpYnJhcnkoY2FyZXQpDQoNCmNtX2xvZ2l0IDwtIGNvbmZ1c2lvbk1hdHJpeCgNCiAgZmFjdG9yKHByZWRfbG9naXRfbGFiZWwpLCANCiAgZmFjdG9yKG9iZXNpdHkkb2Jlc2VfYmluYXJ5KSwgDQogIHBvc2l0aXZlID0gIjEiDQopDQoNCiMgSGnhu4NuIHRo4buLIGLhuqNuZyBjb25mdXNpb24gbWF0cml4DQpjbV9sb2dpdCR0YWJsZQ0KDQpgYGANCg0KKirEkMOhbmggZ2nDoSBuxINuZyBs4buxYyBwaMOibiBsb+G6oWkgY+G7p2EgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyoqDQoNClNhdSBraGkgeMOieSBk4buxbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBuaOG7iyBwaMOibiB24bubaSBjw7RuZyB0aOG7qWM6DQoNCiQkDQpcbG9nXGxlZnQoXGZyYWN7cH17MSAtIHB9XHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e2Zhc3RcX2Zvb2R9ICsgXGJldGFfMiBcY2RvdCBcdGV4dHtjYWxvcmllXF9jaGVja30gKyBcYmV0YV8zIFxjZG90IFx0ZXh0e2FnZX0NCiQkDQoNCnRhIHPhu60gZOG7pW5nIG3DtCBow6xuaCBuw6B5IMSR4buDICoqxrDhu5tjIGzGsOG7o25nIHjDoWMgc3XhuqV0IGPDoSBuaMOibiB0aHXhu5ljIG5ow7NtIGLDqW8gcGjDrCoqLg0KDQpU4burIGPDoWMgeMOhYyBzdeG6pXQgZOG7sSDEkW/DoW4sIHRhIGPhuqduIGNodXnhu4NuIHbhu4EgKipuaMOjbiBwaMOibiBsb+G6oWkgbmjhu4sgcGjDom4qKiAoT2Jlc2UgaG/hurdjIE5vbi1PYmVzZSkuIFZp4buHYyBjaOG7jW4gKipuZ8aw4buhbmcgcGjDom4gbG/huqFpIHThu5FpIMawdSoqIGtow7RuZyBuw6puIGTDuW5nIG3hurdjIMSR4buLbmggMC41LCBtw6AgbsOqbiBk4buxYSB0csOqbiBoaeG7h3UgcXXhuqMgcGjDom4gYmnhu4d0IHRo4bqtdCBz4buxIGPhu6dhIG3DtCBow6xuaC4NCg0KKiBOZ8aw4buhbmcgcGjDom4gbG/huqFpIHThu5FpIMawdSDEkcaw4bujYyBjaOG7jW4gdGhlbyB0acOqdSBjaMOtICoqWW91ZGVu4oCZcyBJbmRleCoqIHThu6sgxJHGsOG7nW5nIGNvbmcgUk9DOg0KDQogICQkDQogIFx0ZXh0e1lvdWRlbidzIEp9ID0gXHRleHR7U2Vuc2l0aXZpdHl9ICsgXHRleHR7U3BlY2lmaWNpdHl9IC0gMQ0KICAkJA0KKiBOZ8aw4buhbmcgdOG7kWkgxrB1IHTDrG0gxJHGsOG7o2MgdOG7qyBST0MgbMOgOiBgciByb3VuZCh0aHJlc2gsIDQpYA0KDQoNClNhdSBraGkgcGjDom4gbG/huqFpIHbhu5tpIG5nxrDhu6FuZyB04buRaSDGsHUsIHRhIHRodSDEkcaw4bujYyBr4bq/dCBxdeG6oyBuaMawIHNhdToNCg0KfCAgICAgICAgICAgICAgIHwgKipUaOG7sWMgdOG6vzogTm9uLU9iZXNlICgwKSoqIHwgKipUaOG7sWMgdOG6vzogT2Jlc2UgKDEpKiogICB8DQp8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqROG7sSBiw6FvOiAwKiogfCA3MDEgKCoqVHJ1ZSBOZWdhdGl2ZSoqKSAgICB8IDE5NiAoKipGYWxzZSBOZWdhdGl2ZSoqKSB8DQp8ICoqROG7sSBiw6FvOiAxKiogfCA0MzggKCoqRmFsc2UgUG9zaXRpdmUqKikgICB8IDc3NiAoKipUcnVlIFBvc2l0aXZlKiopICB8DQoNCg0KROG7sWEgdHLDqm4gbWEgdHLhuq1uIHRyw6puLCB0YSBjw7MgdGjhu4MgdMOtbmggY8OhYyBjaOG7iSBz4buRIMSRw6FuaCBnacOhIG3DtCBow6xuaCBuaMawIHNhdToNCg0KKiAqKkFjY3VyYWN5ICjEkOG7mSBjaMOtbmggeMOhYykqKjoNCg0KICAkJA0KICBcZnJhY3tUUCArIFROfXtUUCArIFROICsgRlAgKyBGTn0gPSBcZnJhY3s3MDEgKyA3NzZ9ezcwMSArIDc3NiArIDQzOCArIDE5Nn0gXGFwcHJveCAwLjcwMTYNCiAgJCQNCg0KKiAqKlNlbnNpdGl2aXR5IChSZWNhbGwvVHJ1ZSBQb3NpdGl2ZSBSYXRlKSoqOg0KDQogICQkDQogIFxmcmFje1RQfXtUUCArIEZOfSA9IFxmcmFjezc3Nn17Nzc2ICsgMTk2fSBcYXBwcm94IDAuNzk4DQogICQkDQoNCiogKipTcGVjaWZpY2l0eSAoVHJ1ZSBOZWdhdGl2ZSBSYXRlKSoqOg0KDQogICQkDQogIFxmcmFje1ROfXtUTiArIEZQfSA9IFxmcmFjezcwMX17NzAxICsgNDM4fSBcYXBwcm94IDAuNjE1DQogICQkDQoNCiogKipQcmVjaXNpb24gKFBvc2l0aXZlIFByZWRpY3RpdmUgVmFsdWUpKio6DQoNCiAgJCQNCiAgXGZyYWN7VFB9e1RQICsgRlB9ID0gXGZyYWN7Nzc2fXs3NzYgKyA0Mzh9IFxhcHByb3ggMC42MzkNCiAgJCQNCg0KKipOaOG6rW4geMOpdCB2w6Aga+G6v3QgbHXhuq1uKioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBjw7Mga2jhuqMgbsSDbmcgKipwaMOibiBiaeG7h3QgdOG7kXQgY8OhYyBjw6EgbmjDom4gYsOpbyBwaMOsKiogduG7m2kgxJHhu5kgbmjhuqF5IChzZW5zaXRpdml0eSkga2jDoSBjYW8gXH44MCUuIFR1eSBuaGnDqm4sIMSR4buZIMSR4bq3YyBoaeG7h3UgY8OybiBo4bqhbiBjaOG6vyAoXH42MSUpLCBjaG8gdGjhuqV5IG3DtCBow6xuaCBk4buFIG3huq9jIGzhu5dpICoqZOG7sSDEkW/DoW4gbmjhuqdtIG5nxrDhu51pIGtow7RuZyBiw6lvIHBow6wgdGjDoG5oIGLDqW8gcGjDrCoqLg0KDQpOaMOsbiBjaHVuZywgduG7m2kgKirEkeG7mSBjaMOtbmggeMOhYyB04buVbmcgdGjhu4Mga2hv4bqjbmcgNzAlKiogdsOgIGPDom4gYuG6sW5nIHTGsMahbmcgxJHhu5FpIGdp4buvYSBjw6FjIGNo4buJIHPhu5EsIG3DtCBow6xuaCB0aOG7gyBoaeG7h24gaGnhu4d1IHN14bqldCBwaMO5IGjhu6NwIHRyb25nIGLhu5FpIGPhuqNuaCBk4buvIGxp4buHdSB4w6MgaOG7mWkgdsOgIGjDoG5oIHZpIHPhu6ljIGto4buPZS4gVHV5IG5oacOqbiwgdHJvbmcg4bupbmcgZOG7pW5nIHRo4buxYyB04bq/LCBj4bqnbiB4ZW0geMOpdCAqKmdpw6EgdHLhu4sgY+G7p2EgY8OhYyBzYWkgbOG7h2NoIGxv4bqhaSBJIHbDoCBsb+G6oWkgSUkqKiDEkeG7gyDEkWnhu4F1IGNo4buJbmggbmfGsOG7oW5nIGNobyBwaMO5IGjhu6NwIHbhu5tpIG3hu6VjIHRpw6p1IChwaMOhdCBoaeG7h24gc+G7m20gaGF5IHRyw6FuaCBj4bqjbmggYsOhbyBzYWkpLg0KDQoNCiMjIyAqKjUuNC42LiBE4buxIGLDoW8geMOhYyBzdeG6pXQgYsOpbyBwaMOsIHThu6sgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyoqDQoNCmBgYHtyfQ0KbmV3X2Nhc2VzIDwtIGRhdGEuZnJhbWUoDQogIGZhc3RfZm9vZCA9IGZhY3RvcihjKCJ5ZXMiLCAibm8iKSwgbGV2ZWxzID0gYygibm8iLCAieWVzIikpLA0KICBjYWxvcmllX2NoZWNrID0gZmFjdG9yKGMoIm5vIiwgInllcyIpLCBsZXZlbHMgPSBjKCJubyIsICJ5ZXMiKSksDQogIGFnZSA9IGMoMTgsIDQ1KQ0KKQ0KYGBgDQoNCmBgYHtyfQ0KIyBE4buxIGLDoW8geMOhYyBzdeG6pXQgdGhlbyBtw7QgaMOsbmggbG9naXN0aWMNCm5ld19jYXNlcyRwcm9iX29iZXNpdHkgPC0gcHJlZGljdChtb2RlbF9sb2dpdCwgbmV3ZGF0YSA9IG5ld19jYXNlcywgdHlwZSA9ICJyZXNwb25zZSIpDQojIFhlbSBr4bq/dCBxdeG6ow0KbmV3X2Nhc2VzDQpgYGANCg0KDQoqKlRow7RuZyB0aW4gbcO0IGjDrG5oIHPhu60gZOG7pW5nOioqDQoNCiogTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyBuaOG7iyBwaMOibiAoYG1vZGVsX2xvZ2l0YCkgY8OzIGPDtG5nIHRo4bupYzoNCg0KICAkJA0KICBcbG9nXGxlZnQoXGZyYWN7cH17MSAtIHB9XHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e2Zhc3RfZm9vZH1fe1x0ZXh0e3llc319ICsgXGJldGFfMiBcY2RvdCBcdGV4dHtjYWxvcmllX2NoZWNrfV97XHRleHR7eWVzfX0gKyBcYmV0YV8zIFxjZG90IFx0ZXh0e2FnZX0NCiAgJCQNCg0KICBUcm9uZyDEkcOzOg0KDQogICogJHAkOiB4w6FjIHN14bqldCBk4buxIMSRb8OhbiBjw6EgbmjDom4gdGh14buZYyBuaMOzbSAqKk9iZXNlKiouDQogICogQ8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCBiYW8gZ+G7k206IHRow7NpIHF1ZW4gxINuIGZhc3QgZm9vZCwgaMOgbmggdmkga2nhu4NtIHRyYSBjYWxvcmllLCB2w6AgdHXhu5VpLg0KDQoNCioqRGnhu4VuIGdp4bqjaSB04burbmcgdHLGsOG7nW5nIGjhu6NwKio6DQoNCiogKipUcsaw4budbmcgaOG7o3AgMSoqOiBN4buZdCBjw6EgbmjDom4gKioxOCB0deG7lWkqKiwgKipjw7MgxINuIGZhc3QgZm9vZCB0aMaw4budbmcgeHV5w6puKiogdsOgICoqa2jDtG5nIGtp4buDbSB0cmEgbMaw4bujbmcgY2Fsb3JpZSoqOg0KDQogICogTcO0IGjDrG5oIGThu7EgYsOhbyB4w6FjIHN14bqldCBjw6EgbmjDom4gbsOgeSB0aHXhu5ljIG5ow7NtICoqYsOpbyBwaMOsKiogbMOgICoqNDEuNjYlKiouDQogICogxJBp4buBdSBuw6B5IHBo4bqjbiDDoW5oIG5ndXkgY8ahIGtow6EgY2FvLCDEkeG6t2MgYmnhu4d0IGRvIGPDsyB0aMOzaSBxdWVuIMSDbiBmYXN0IGZvb2QgdsOgIGtow7RuZyBjw7MgaMOgbmggdmkga2nhu4NtIHNvw6F0IG7Eg25nIGzGsOG7o25nIMSDbiB2w6BvLg0KKiAqKlRyxrDhu51uZyBo4bujcCAyKio6IE3hu5l0IGPDoSBuaMOibiAqKjQ1IHR14buVaSoqLCAqKmtow7RuZyDEg24gZmFzdCBmb29kKiogdsOgICoqY8OzIGtp4buDbSB0cmEgY2Fsb3JpZSB0aMaw4budbmcgeHV5w6puKio6DQoNCiAgKiBYw6FjIHN14bqldCBiw6lvIHBow6wgY2jhu4kgbMOgICoqMi40MyUqKiwgdOG7qWMgcuG6pXQgdGjhuqVwLg0KICAqIFZp4buHYyAqKmtow7RuZyDEg24gZmFzdCBmb29kKioga+G6v3QgaOG7o3AgduG7m2kgKirDvSB0aOG7qWMga2nhu4NtIHNvw6F0IGNhbG9yaWUqKiBnacO6cCBnaeG6o20gbeG6oW5oIG5ndXkgY8ahLCBt4bq3YyBkw7kgxJHhu5kgdHXhu5VpIGNhbyBoxqFuLg0KDQojIyMgKio1LjQuNy4gS+G6v3QgbHXhuq1uKioNCg0KVHJvbmcgYsOgaSBuZ2hpw6puIGPhu6l1IG7DoHksIMSRw6Mgc+G7rSBk4bulbmcgbeG7mXQgdOG6rXAgZOG7ryBsaeG7h3UgaMOgbmggdmkgdsOgIG5ow6JuIGto4bqpdSBo4buNYyDEkeG7gyB0w6xtIGhp4buDdSBt4buRaSBsacOqbiBo4buHIGdp4buvYSAqKmPDoWMgeeG6v3UgdOG7kSBuaMawIHRow7NpIHF1ZW4gxINuIGZhc3QgZm9vZCwga2nhu4NtIHNvw6F0IGzGsOG7o25nIGNhbG8gdsOgIMSR4buZIHR14buVaSoqIMSR4bq/biB0w6xuaCB0cuG6oW5nICoqYsOpbyBwaMOsKiogY+G7p2EgY8OhIG5ow6JuLiBCaeG6v24gcGjhu6UgdGh14buZYyBsw6Agbmjhu4sgcGjDom4gKGLDqW8gcGjDrCBob+G6t2Mga2jDtG5nKSwgxJHGsOG7o2MgdHLDrWNoIHh14bqldCB04burIG5ow6NuIG5oaeG7gXUgY+G6pXAgYmFuIMSR4bqndS4NCg0KQ8OhYyBwaMOibiB0w61jaCB0aOG7kW5nIGvDqiDEkcaw4bujYyB0cmnhu4NuIGtoYWkgZ+G7k206DQoNCiogKipLaeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcqKiwgdOG7tyBz4buRIHLhu6dpIHJvICgqKlJlbGF0aXZlIHJpc2sqKikgdsOgIHThu7cgc+G7kSBvZGRzICgqKk9kZHMgUmF0aW8qKikgxJHhu4Mga2jhuqNvIHPDoXQgbeG7kWkgbGnDqm4gaOG7hyDEkeG7i25oIHTDrW5oIGdp4buvYSBjw6FjIGJp4bq/bi4NCiogKipNw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIHThu5VuZyBxdcOhdCAoR0xNKSoqIMSRxrDhu6NjIHRyaeG7g24ga2hhaSB24bubaSBiYSBow6BtIGxpw6puIGvhur90OiBsb2dpdCwgcHJvYml0IHbDoCBjbG9nbG9nIG5o4bqxbSDEkcOhbmggZ2nDoSB0w6FjIMSR4buZbmcgxJHhu5NuZyB0aOG7nWkgY+G7p2Egbmhp4buBdSB54bq/dSB04buRIMSR4bq/biB4w6FjIHN14bqldCBiw6lvIHBow6wuDQoqIEPDoWMgbcO0IGjDrG5oIMSRxrDhu6NjICoqc28gc8OhbmggYuG6sW5nIEFJQyB2w6AgQnJpZXIgU2NvcmUqKiwgxJHhu5NuZyB0aOG7nWkgxJHDoW5oIGdpw6EgxJHhu5kgY2jDrW5oIHjDoWMgcXVhICoqbWEgdHLhuq1uIG5o4bqnbSBs4bqrbioqIHbDoCAqKlJPQyBDdXJ2ZSoqLg0KDQoqKkvhur90IHF14bqjIG7hu5VpIGLhuq10OioqDQoNCiogVGjDs2kgcXVlbiAqKsSDbiBmYXN0IGZvb2QqKiBsw6AgeeG6v3UgdOG7kSBuZ3V5IGPGoSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGNhbywgduG7m2kgKipPUiA9IDEyLjMxKiosIGNobyB0aOG6pXkgbmjDs20gbsOgeSBjw7Mgb2RkcyBt4bqvYyBiw6lvIHBow6wgY2FvIGfhuqVwIFx+MTIgbOG6p24gbmjDs20ga2jDtG5nIMSDbi4NCiogVmnhu4djICoqa2nhu4NtIHNvw6F0IGzGsOG7o25nIGNhbG8qKiBsacOqbiBxdWFuIHLDtSBy4buHdCB04bubaSBnaeG6o20gbmd1eSBjxqEgYsOpbyBwaMOsICgqKk9SID0gMC4wMzYqKiwgcuG6pXQgdGjhuqVwKS4NCiogKipUdeG7lWkqKiBjxaluZyBsw6AgeeG6v3UgdOG7kSBuZ3V5IGPGoTogeMOhYyBzdeG6pXQgYsOpbyBwaMOsIHTEg25nIHRoZW8gdHXhu5VpICho4buHIHPhu5EgzrIgPiAwIHRyb25nIGPhuqMgMyBtw7QgaMOsbmgpLg0KKiAqKk3DtCBow6xuaCBsb2dpc3RpYyoqIGPDsyBoaeG7h3UgcXXhuqMgcGjDom4gbG/huqFpIHThu5F0IG5o4bqldCB24bubaSAqKkFJQyB0aOG6pXAgbmjhuqV0ICgyNTgxLjkpKiogdsOgICoqQnJpZXIgU2NvcmUgbmjhu48gbmjhuqV0ICgwLjIxMykqKiwgxJHhu5kgY2jDrW5oIHjDoWMgdOG7lW5nIHRo4buDIGtob+G6o25nICoqNzAlKiouDQoNCiMjIyMgKipI4bqhbiBjaOG6vyBj4bunYSBuZ2hpw6puIGPhu6l1KioNCg0KKiAqKkThu68gbGnhu4d1IGPhuq90IG5nYW5nKio6IGNo4buJIHBo4bqjbiDDoW5oIHRo4budaSDEkWnhu4NtIGhp4buHbiB04bqhaSwga2jDtG5nIHRo4buDIHN1eSByYSBxdWFuIGjhu4cgbmjDom4gcXXhuqMuDQoqICoqQmnhur9uIMSR4buLbmggdMOtbmggbmhp4buBdSBj4bqlcCoqIMSRw6MgxJHGsOG7o2MgbcOjIGjDs2Egbmjhu4sgcGjDom4sIMSRaeG7gXUgbsOgeSBjw7MgdGjhu4MgbMOgbSBt4bqldCDEkWkgbeG7mXQgcGjhuqduIHRow7RuZyB0aW4gY2hpIHRp4bq/dCBiYW4gxJHhuqd1Lg0KKiAqKlRoaeG6v3UgZOG7ryBsaeG7h3UgbMOibSBzw6BuZyoqOiBraMO0bmcgYmFvIGfhu5NtIGPDoWMgeeG6v3UgdOG7kSB5IHNpbmggaOG7jWMgbmjGsCBnZW4sIGNo4buJIHPhu5EgbeG7oSBtw6F1LCBob+G6t2MgdGnhu4FuIHPhu60gYuG7h25oLg0KKiAqKk3DtCBow6xuaCB0dXnhur9uIHTDrW5oIMSRxqFuIGdp4bqjbioqIGPDsyB0aOG7gyBraMO0bmcgxJHhu6cgbGluaCBob+G6oXQgduG7m2kgY8OhYyBt4buRaSBxdWFuIGjhu4cgcGhpIHR1eeG6v24gaG/hurdjIHTGsMahbmcgdMOhYyBwaOG7qWMgdOG6oXAuDQoNCiMjIyMgKirEkOG7gSB4deG6pXQgdsOgIGjGsOG7m25nIHBow6F0IHRyaeG7g24qKg0KDQoqIMOBcCBk4bulbmcgY8OhYyAqKm3DtCBow6xuaCBuw6JuZyBjYW8gaMahbioqIG5oxrAgaOG7k2kgcXV5IGxvZ2lzdGljIMSRYSBj4bqlcCwgcmFuZG9tIGZvcmVzdCBob+G6t2MgbcO0IGjDrG5oIGjhu41jIG3DoXkgxJHhu4MgY+G6o2kgdGhp4buHbiBraOG6oyBuxINuZyBk4buxIMSRb8Ohbi4NCiogS+G6v3QgaOG7o3AgdGjDqm0gKipiaeG6v24gxJHhu4tuaCBsxrDhu6NuZyBi4buVIHN1bmcqKiAobmjGsCBraOG6qXUgcGjhuqduIMSDbiwgduG6rW4gxJHhu5luZyDEkeG7i25oIGzGsOG7o25nKSDEkeG7gyBtw7QgaMOsbmggY2jDrW5oIHjDoWMgaMahbi4NCiogVHJp4buDbiBraGFpICoqbmdoacOqbiBj4bupdSBk4buNYyAobG9uZ2l0dWRpbmFsKSoqIMSR4buDIHRoZW8gZMO1aSB0aGF5IMSR4buVaSBjw6JuIG7hurduZyB0aGVvIHRo4budaSBnaWFuIG5o4bqxbSB4w6FjIMSR4buLbmggbmd1ecOqbiBuaMOibiDigJMga+G6v3QgcXXhuqMuDQoqIEtp4buDbSB0cmEgdMawxqFuZyB0w6FjIGdp4buvYSBjw6FjIGJp4bq/biAoY2jhurNuZyBo4bqhbjogxJHhu5kgdHXhu5VpIMOXIGZhc3QgZm9vZCkgxJHhu4MgaGnhu4N1IHPDonUgaMahbiB0w6FjIMSR4buZbmcga+G6v3QgaOG7o3AuDQoNCiMjIyMgKipU4buVbmcga+G6v3QqKg0KDQpQaMOibiB0w61jaCB0aOG7kW5nIGvDqiBjaG8gdGjhuqV5ICoqY8OzIG3hu5FpIGxpw6puIGjhu4cgbeG6oW5oIGdp4buvYSBow6BuaCB2aSB0acOqdSBkw7luZyB0aOG7sWMgcGjhuqltIHbDoCBiw6lvIHBow6wqKi4gVmnhu4djIHRoYXkgxJHhu5VpIGPDoWMgeeG6v3UgdOG7kSBow6BuaCB2aSBuaMawICoqaOG6oW4gY2jhur8gZmFzdCBmb29kKiogdsOgICoqY2jDuiB0cuG7jW5nIGtp4buDbSBzb8OhdCBjYWxvKiogY8OzIHRo4buDIMSRw7NuZyB2YWkgdHLDsiBxdWFuIHRy4buNbmcgdHJvbmcgY2hp4bq/biBsxrDhu6NjIHBow7JuZyBjaOG7kW5nIGLDqW8gcGjDrC4gxJDhu5NuZyB0aOG7nWksIGPDoWMgbcO0IGjDrG5oIHRo4buRbmcga8OqIMSRxqFuIGdp4bqjbiB24bqrbiBjw7MgdGjhu4MgY3VuZyBj4bqlcCBuaOG7r25nIGvhur90IHF14bqjIMSR4buLbmggbMaw4bujbmcgxJHDoW5nIHRpbiBj4bqteSwgcGjhu6VjIHbhu6UgY2hvIHZp4buHYyByYSBxdXnhur90IMSR4buLbmggdHJvbmcgbMSpbmggduG7sWMgc+G7qWMga2jhu49lIGPhu5luZyDEkeG7k25nLg0KDQo=