NHIỆM VỤ 2.1
1. Đọc dữ liệu từ file xlsx
Để thực hiện chức năng đọc dữ liệu từ file xlsx của R, ta thực hiện
theo các bước sau:
Bước 1: Tải package xlsx và gọi dữ liệu file lên R
với câu lệnh:
Bước 2: Đọc dữ liệu file xlsx với câu lệnh
read.xlsx()
library('xlsx') #gọi package 'xlsx'
d <- read.xlsx(file = 'C:/Users/Admin/Downloads/Grunfeld.xls', sheetIndex = 1, header = T)
Trong đó:
read.xlsx(): đọc dữ liệu
file = ’ ’ : nguồn dữ liệu
sheetIndex: số trang sheet muốn lấy
header = T: dòng đầu tiên là tiêu đề chứ không phải dữ
liệu
2. Sử dụng 1 bộ dữ liệu ‘cars’ có sẵn trong gói package
‘datasets’
Datasets là một gói package bao gồm nhiều bộ dữ liệu
mà ta có thể sử dụng sẵn trong R, để sử dụng ta thực hiện theo các bước
sau:
Bước 1: Tải gói package datasets
với câu lệnh:
library('datasets') #gọi package datasets sau khi đã tải xong
data(package = 'datasets') #xem trong gói package datasets có những bộ dữ liệu nào
Bước 2: Tải 1 bộ dữ liệu cars trong
gói package Datasets
a <- cars #gán bộ dữ liệu 'cars' vào a
Bước 3: Sử dụng bộ dữ liệu
cars:
is.data.frame(a) #kiểm tra xem a có phải là 1 data frame hay không, nếu ra True thì phải, False thì không phải
## [1] TRUE
length(a) #kiểm tra chiều dài của dữ liệu
## [1] 2
names(a) #tên biến của dữ liệu, "speed" và "dist"
## [1] "speed" "dist"
dim(a) #kiểm tra dữ liệu có bao nhiêu dòng và bao nhiêu cột, ở đây a có 50 dòng và 2 cột
## [1] 50 2
library(skimr) #gọi package skimr
skim(a) #mô tả chi tiết dữ liệu như: mean là trung bình, sd là độ lệch chuẩn,...
Data summary
| Name |
a |
| Number of rows |
50 |
| Number of columns |
2 |
| _______________________ |
|
| Column type frequency: |
|
| numeric |
2 |
| ________________________ |
|
| Group variables |
None |
Variable type: numeric
| speed |
0 |
1 |
15.40 |
5.29 |
4 |
12 |
15 |
19 |
25 |
▂▅▇▇▃ |
| dist |
0 |
1 |
42.98 |
25.77 |
2 |
26 |
36 |
56 |
120 |
▅▇▅▂▁ |
head(a,10) #đầu, hiện 10 dòng đầu tiên của dữ liệu
## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 6 9 10
## 7 10 18
## 8 10 26
## 9 10 34
## 10 11 17
tail(a,10) #đuôi, hiện 10 dòng cuối của dữ liệu
## speed dist
## 41 20 52
## 42 20 56
## 43 20 64
## 44 22 66
## 45 23 54
## 46 24 70
## 47 24 92
## 48 24 93
## 49 24 120
## 50 25 85
str(a) #cung cấp thông tin dữ liệu
## 'data.frame': 50 obs. of 2 variables:
## $ speed: num 4 4 7 7 8 9 10 10 10 11 ...
## $ dist : num 2 10 4 22 16 10 18 26 34 17 ...
3. Rút trích dữ liệu từ bộ dữ liệu ‘cars’
Trong một số trường hợp, chúng ta thu về là một dữ liệu lớn tuy nhiên
ta lại không sử dụng hết. Để thuận tiện R hỗ trợ chức năng rút trích dữ
liệu, ta thực hiện theo các bước sau:
Bước 1: Đổi tên cho các biến để thuận tiện cho việc
thao tác dữ liệu:
names(a) <- c('S', 'D')
Sau bước này, thay vì phải gọi dữ liệu là ‘Speed’ và ‘Dist’ thì chũng
ta chỉ cần gọi là ‘S’ và ‘D’
Bước 2: Thực hiện thao tác rút trích dữ liệu:
b <- a[7,2] #b bao gồm hàng 7 cột 2 của a
S <- a$S #S bao gồm nguyên dữ liệu cột S
c <- a[ ,1] #c cũng bao gồm nguyên dữ liệu cột S, c và S giống nhau
e <- a[3:7, ] #e bao gồm dữ liệu từ dòng 3,7 của a
f <- a[c(2,4,6,8),c(1,2)] #f bao gồm dữ liệu dòng 2,4,6,8 và cột 1,2 của a
g <- a[a$D >=35 & a$D <=70, ] #g bao gồm các dữ liệu vừa bé hơn hoặc bằng 35 vừa nhỏ hơn hoặc bằng 70 của a
h <-a[a$D == 35 | a$D == 80, ] #h bao gồm các dự liệu bằng 35 hoặc bằng 80 của a
i <- a[S != 15, ] #i bao gồm dữ liệu S nhưng bỏ tất cả giá trị bằng 15
4. Một số package quan trọng khác của R
Ngoài datasets trong R còn nhiều gói package quan
trọng khác như tidyverse hay ggplot2.
Chúng ta hoàn toàn có thể áp dụng những lệnh ở mục 3 với những package
đó.
Tuy nhiên, đối với packgae tidyverse, package này có
1 chức năng vô cùng thú vị mà các package khác không có đó là
%>% (pipe). Để sử dụng chức năng này, ta thực hiện
như sau:
Ví dụ:
library(tidyverse) #gọi package '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.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── 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
m <- a %>% filter(S>15) #dữ liệu m bao gồm có a làm dữ liệu đầu vào, lọc sao cho dữ liệu S>15
Chú thích: * %>% (pipe) mang nghĩa “kế đến
là”.
Ở đây, chúng ta có thể hiểu ý nghĩa của ví dụ trên là: Với m, chúng
ta lấy a làm dữ liệu đầu vào, kế đến dùng lệnh filter để lọc những giá
trị S lớn hơn 15.
5. Giới thiệu về World Bank
Bên cạnh gói package được đề cập bên trên như
datasets, ggplot2 hay
tidyverse, chúng ta còn có thể lấy và sử dụng dữ liệu
từ World Bank.
World Bank lưu trữ rất nhiều thông tin kinh tế vĩ mô
của nhiều nước trên thế giới và hoàn toàn cho phép người dùng truy cập
và sử dụng dữ liệu.
Phân tích một số đặc trưng của Board Game
1. Giới thiệu
1.1. Board game là gì?
Thuật ngữ board game được dùng để chỉ các loại trò chơi cờ
bàn bao gồm 2 hay nhiều người chơi tương tác với nhau thông qua một bàn
cờ và tuân theo một quy luật nhất định. Một số trò còn sử dụng các vật
dụng hỗ trợ như lá bài, xí ngầu, quân cờ…
Người chơi cần phải phán đoán, tư duy, phân tích tình huống và cả sự
may mắn của mình để chiến thắng. Thời gian cho lần chơi tùy thuộc vào
từng trò, có những trò chơi rất nhanh nhưng cũng có những trò phải mất
từ 1 đến 2 tiếng mới kết thúc.
Một số trò board game nổi tiếng mà chúng ta có thể đã nghe
qua như: Cờ vua, cờ cá ngựa, ma sói, rút gỗ, bài unô, lô tô, trò ca rô,
ma sói, mèo nổ, …
1.2. Bộ dữ liệu board game
game <- read.csv(file = 'C:/Users/Admin/Downloads/board_game_data.csv', header = T) #đọc dữ liệu board game
Bộ dữ liệu board game bao gồm 2212 quan sát và 10 biến, được
lấy từ Kaggle
- một nơi uy tín cung cấp lượng lớn thông tin về đa dạng các lĩnh vực và
ngành nghề.
Nghiên cứu bộ dữ liệu board game bằng công cụ R giúp cho
những nhà sáng tạo hay các nhà kinh doanh về mảng trò chơi có một cái
nhìn cụ thể và tốt hơn về một số yếu tố, từ đó, họ có thể tự điều chỉnh
và thu hút thêm tệp khách hàng như:
Game id của trò (game_id)
Tên trò chơi (names)
Số lượng người tham gia tối thiểu
(min_player)
Số lượng người tham gia tối đa
(max_player)
Thời gian trung bình khi chơi một trò, tính theo phút
(avg_time)
Thời gian tối thiểu khi chơi một trò, tính theo phút
(min_time)
Thời gian tối đa khi chơi một trò, tính theo phút
(max_time)
Số lượt đánh giá (avg_rating)
Độ tuổi người chơi (age)
Nhà sáng lập trò chơi (designer)
2. Phân tích số người chơi
names(game) <- c('ID', 'N', 'minp', 'maxp', 'AT', 'mint', 'maxt', 'AR', 'A', 'D')
#Đổi tên các biến để tiện lợi trong việc thực hiện thác tác trên dữ liệu
game1 <- game[game$minp ==1 & game$maxp <=2, ]
#game1 bao gồm dữ liệu đầu vào là game, số người chơi tối thiểu là 1, số người chơi tối đa là 2, ứng với nhóm khách hàng lẻ/cặp đôi
game2 <- game[game$minp >= 2 & game$maxp >= 3, ]
#game2 cũng bao gồm dữ liệu đầu vào là game, số người chơi tối thiểu lớn hơn hoặc bằng 2, số người chơi tối đa lớn hơn hoặc bằng 3, ứng với nhóm khách hàng đội/nhóm
Qua việc phân tích 2212 trường hợp quan sát, ta nhận thấy tỷ lệ xuất
hiện của trò chơi dành cho nhóm khách hàng lẻ/cặp đôi chiếm một tỷ trọng
thấp hơn (khoảng 2,667%, tương đương với 59/2212) so với trò
chơi dành cho nhóm khách hàng là đội/nhóm (khoảng 69,168%, tương
đương với 1530/2212). Kết quả này làm nổi bật sự ít được chú ý của
nhóm khách hàng lẻ/cặp đôi so với nhóm khách hàng là đội/nhóm.
Dựa trên phân tích này, ta có thể đề xuất rằng các nhà sáng tạo và
doanh nghiệp trong lĩnh vực trò chơi có thể khai thác thêm cơ hội bằng
cách sáng tạo và phát triển các trò chơi đặc biệt dành cho nhóm khách
hàng lẻ/cặp đôi. Đồng thời, liên tục nỗ lực cải thiện trò chơi, nhằm tạo
ra trải nghiệm thú vị và giữ chân người chơi thuộc nhóm khách hàng là
đội/nhóm.
=> Điều này không chỉ giúp tăng cường sự chú ý đối với đối tượng
này mà còn có thể mang lại nguồn lợi nhuận bổ sung cho họ.
Một số trò chơi dành cho nhóm khách hàng lẻ/cặp đôi mà ta có thể phát
triển thêm là:
Arkham Horror: The Card Game
Nate French, Matthew Newman
Fields of Arle
Uwe Rosenberg
The Lord of the Rings: The Card Game
3. Phân tích thời gian chơi một trò
game3 <- game[game$mint >= 5 & game$maxt <= 180, ]
#game3 bao gồm dữ liệu đầu vào là game, số thời gian chơi tối thiểu là lớn hơn bằng 5, số thời gian chơi tối đa là bé hơn bằng 180, ứng với bộ trò chơi mất ít thời gian để chơi
game4 <- game[game$mint >= 180 & game$maxt <= 6000, ]
#game4 bao gồm dữ liệu đầu vào là game, số thời gian chơi tối thiểu là lớn hơn bằng 180, số thời gian chơi tối đa là bé hơn bằng 6000, ứng với bộ trò chơi mất nhiều thời gian để chơi
Kết quả nghiên cứu cho thấy rằng đối với các trò chơi có thời gian
chơi ngắn, chúng có tỷ lệ rất cao (2039/2212 xấp xỉ 92,179%),
hầu hết các bộ trò chơi đều được chơi trong khoảng thời gian từ 1 đến 3
tiếng. Ngược lại, trò chơi đòi hỏi thời gian chơi lâu hơn có tỷ lệ sử
dụng thấp hơn (177/2212 xấp xỉ 8,001%).
Nhìn chung, nghiên cứu cho thấy rằng ưu điểm chính và điểm độc đáo
trong lĩnh vực trò chơi nằm ở không những sản phẩm thú vị mà còn mất ít
thời gian để chơi, tiết kiệm thời gian. Điều này đặt ra một cơ hội rõ
ràng cho các nhà sáng tạo và doanh nghiệp trò chơi để tập trung và phát
triển những trò chơi có đặc điểm này, nhằm tối ưu hóa sự hấp dẫn và tiện
lợi cho người chơi.
4. Tổng kết
Thông qua nghiên cứu trên, ta có thể rút ra kết luận rằng, nhà sáng
tạo và nhà kinh doanh trong lĩnh vực trò chơi nên:
Quan tâm đến nhóm khách hàng lẻ/cặp đôi bằng cách sáng tạo thêm
những bộ trò chơi cho nhóm khách hàng này.
Giữ chân nhóm khách hàng đội/nhóm bằng cách không ngừng cải tiến,
cải thiện trò chơi.
Tập trung vào những bộ trò chơi mất ít thời gian để
chơi.
Thông điệp, quy luật trong trò chơi cần được thiết kế một cách
lành mạnh vì khách hàng là các em học sinh dưới 19 tuổi.
check <- is.na(game) #kiểm tra tính hoàn chỉnh của dữ liệu 'board game'
LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSAyIg0KYXV0aG9yOiAiTmd1eeG7hW4gUGjhuqFtIFRow7p5IEFuIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB0cnVlIA0KICAgIG51bWJlciBzZWN0aW9uOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUg6JU06JVMsICVkIC0gJW0gLSAlWScpYCINCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQojICoqTkhJ4buGTSBW4bukIDIuMSoqDQoqKioNCg0KIyMgKioxLiDEkOG7jWMgZOG7ryBsaeG7h3UgdOG7qyBmaWxlIHhsc3gqKg0KDQrEkOG7gyB0aOG7sWMgaGnhu4duIGNo4bupYyBuxINuZyDEkeG7jWMgZOG7ryBsaeG7h3UgdOG7qyBmaWxlIHhsc3ggY+G7p2EgUiwgdGEgdGjhu7FjIGhp4buHbiB0aGVvIGPDoWMgYsaw4bubYyBzYXU6DQoNCioqQsaw4bubYyAxOioqIFThuqNpIHBhY2thZ2UgeGxzeCB2w6AgZ+G7jWkgZOG7ryBsaeG7h3UgZmlsZSBsw6puIFIgduG7m2kgY8OidSBs4buHbmg6DQoNCioqQsaw4bubYyAyOioqIMSQ4buNYyBk4buvIGxp4buHdSBmaWxlIHhsc3ggduG7m2kgY8OidSBs4buHbmggKipyZWFkLnhsc3goKSoqDQoNCmBgYHtyfQ0KbGlicmFyeSgneGxzeCcpICNn4buNaSBwYWNrYWdlICd4bHN4Jw0KZCA8LSByZWFkLnhsc3goZmlsZSA9ICdDOi9Vc2Vycy9BZG1pbi9Eb3dubG9hZHMvR3J1bmZlbGQueGxzJywgc2hlZXRJbmRleCA9IDEsIGhlYWRlciA9IFQpDQpgYGANCg0KVHJvbmcgxJHDszoNCg0KKiByZWFkLnhsc3goKTogxJHhu41jIGThu68gbGnhu4d1DQoNCiogZmlsZSA9ICcgJyA6IG5ndeG7k24gZOG7ryBsaeG7h3UNCg0KKiBzaGVldEluZGV4OiBz4buRIHRyYW5nIHNoZWV0IG114buRbiBs4bqleQ0KDQoqIGhlYWRlciA9IFQ6IGTDsm5nIMSR4bqndSB0acOqbiBsw6AgdGnDqnUgxJHhu4EgY2jhu6kga2jDtG5nIHBo4bqjaSBk4buvIGxp4buHdQ0KDQojIyAqKjIuIFPhu60gZOG7pW5nIDEgYuG7mSBk4buvIGxp4buHdSAnY2FycycgY8OzIHPhurVuIHRyb25nIGfDs2kgcGFja2FnZSAnZGF0YXNldHMnKioNCg0KKipEYXRhc2V0cyoqIGzDoCBt4buZdCBnw7NpIHBhY2thZ2UgYmFvIGfhu5NtIG5oaeG7gXUgYuG7mSBk4buvIGxp4buHdSBtw6AgdGEgY8OzIHRo4buDIHPhu60gZOG7pW5nIHPhurVuIHRyb25nIFIsIMSR4buDIHPhu60gZOG7pW5nIHRhIHRo4buxYyBoaeG7h24gdGhlbyBjw6FjIGLGsOG7m2Mgc2F1Og0KDQoqKkLGsOG7m2MgMToqKiBU4bqjaSBnw7NpIHBhY2thZ2UgKipkYXRhc2V0cyoqIHbhu5tpIGPDonUgbOG7h25oOg0KDQpgYGB7cn0NCmxpYnJhcnkoJ2RhdGFzZXRzJykgI2fhu41pIHBhY2thZ2UgZGF0YXNldHMgc2F1IGtoaSDEkcOjIHThuqNpIHhvbmcNCmRhdGEocGFja2FnZSA9ICdkYXRhc2V0cycpICN4ZW0gdHJvbmcgZ8OzaSBwYWNrYWdlIGRhdGFzZXRzIGPDsyBuaOG7r25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgbw0KYGBgDQoNCioqQsaw4bubYyAyOioqIFThuqNpIDEgYuG7mSBk4buvIGxp4buHdSAqKmNhcnMqKiB0cm9uZyBnw7NpIHBhY2thZ2UgKipEYXRhc2V0cyoqDQoNCmBgYHtyfQ0KYSA8LSBjYXJzICNnw6FuIGLhu5kgZOG7ryBsaeG7h3UgJ2NhcnMnIHbDoG8gYSANCmBgYA0KDQoqKkLGsOG7m2MgMzoqKiBT4butIGThu6VuZyBi4buZIGThu68gbGnhu4d1ICoqY2FycyoqOg0KYGBge3J9DQppcy5kYXRhLmZyYW1lKGEpICNraeG7g20gdHJhIHhlbSBhIGPDsyBwaOG6o2kgbMOgIDEgZGF0YSBmcmFtZSBoYXkga2jDtG5nLCBu4bq/dSByYSBUcnVlIHRow6wgcGjhuqNpLCBGYWxzZSB0aMOsIGtow7RuZyBwaOG6o2kNCmxlbmd0aChhKSAja2nhu4NtIHRyYSBjaGnhu4F1IGTDoGkgY+G7p2EgZOG7ryBsaeG7h3UNCm5hbWVzKGEpICN0w6puIGJp4bq/biBj4bunYSBk4buvIGxp4buHdSwgInNwZWVkIiB2w6AgImRpc3QiDQpkaW0oYSkgI2tp4buDbSB0cmEgZOG7ryBsaeG7h3UgY8OzIGJhbyBuaGnDqnUgZMOybmcgdsOgIGJhbyBuaGnDqnUgY+G7mXQsIOG7nyDEkcOieSBhIGPDsyA1MCBkw7JuZyB2w6AgMiBj4buZdA0KDQpsaWJyYXJ5KHNraW1yKSAjZ+G7jWkgcGFja2FnZSBza2ltcg0Kc2tpbShhKSAjbcO0IHThuqMgY2hpIHRp4bq/dCBk4buvIGxp4buHdSBuaMawOiBtZWFuIGzDoCB0cnVuZyBiw6xuaCwgc2QgbMOgIMSR4buZIGzhu4djaCBjaHXhuqluLC4uLg0KDQpoZWFkKGEsMTApICPEkeG6p3UsIGhp4buHbiAxMCBkw7JuZyDEkeG6p3UgdGnDqm4gY+G7p2EgZOG7ryBsaeG7h3UNCnRhaWwoYSwxMCkgI8SRdcO0aSwgaGnhu4duIDEwIGTDsm5nIGN14buRaSBj4bunYSBk4buvIGxp4buHdSANCnN0cihhKSAjY3VuZyBj4bqlcCB0aMO0bmcgdGluIGThu68gbGnhu4d1DQpgYGANCg0KIyMgKiozLiBSw7p0IHRyw61jaCBk4buvIGxp4buHdSB04burIGLhu5kgZOG7ryBsaeG7h3UgJ2NhcnMnKioNCg0KVHJvbmcgbeG7mXQgc+G7kSB0csaw4budbmcgaOG7o3AsIGNow7puZyB0YSB0aHUgduG7gSBsw6AgbeG7mXQgZOG7ryBsaeG7h3UgbOG7m24gdHV5IG5oacOqbiB0YSBs4bqhaSBraMO0bmcgc+G7rSBk4bulbmcgaOG6v3QuIMSQ4buDIHRodeG6rW4gdGnhu4duIFIgaOG7lyB0cuG7oyBjaOG7qWMgbsSDbmcgcsO6dCB0csOtY2ggZOG7ryBsaeG7h3UsIHRhIHRo4buxYyBoaeG7h24gdGhlbyBjw6FjIGLGsOG7m2Mgc2F1Og0KDQoqKkLGsOG7m2MgMToqKiDEkOG7lWkgdMOqbiBjaG8gY8OhYyBiaeG6v24gxJHhu4MgdGh14bqtbiB0aeG7h24gY2hvIHZp4buHYyB0aGFvIHTDoWMgZOG7ryBsaeG7h3U6DQpgYGB7cn0NCm5hbWVzKGEpIDwtIGMoJ1MnLCAnRCcpDQpgYGANCg0KU2F1IGLGsOG7m2MgbsOgeSwgdGhheSB2w6wgcGjhuqNpIGfhu41pIGThu68gbGnhu4d1IGzDoCAnU3BlZWQnIHbDoCAnRGlzdCcgdGjDrCBjaMWpbmcgdGEgY2jhu4kgY+G6p24gZ+G7jWkgbMOgICdTJyB2w6AgJ0QnDQoNCioqQsaw4bubYyAyOioqIFRo4buxYyBoaeG7h24gdGhhbyB0w6FjIHLDunQgdHLDrWNoIGThu68gbGnhu4d1Og0KYGBge3J9DQpiIDwtIGFbNywyXSAjYiBiYW8gZ+G7k20gaMOgbmcgNyBj4buZdCAyIGPhu6dhIGENClMgPC0gYSRTICNTIGJhbyBn4buTbSBuZ3V5w6puIGThu68gbGnhu4d1IGPhu5l0IFMNCmMgPC0gYVsgLDFdICNjIGPFqW5nIGJhbyBn4buTbSBuZ3V5w6puIGThu68gbGnhu4d1IGPhu5l0IFMsIGMgdsOgIFMgZ2nhu5FuZyBuaGF1DQplIDwtIGFbMzo3LCBdICNlIGJhbyBn4buTbSBk4buvIGxp4buHdSB04burIGTDsm5nIDMsNyBj4bunYSBhDQpmIDwtIGFbYygyLDQsNiw4KSxjKDEsMildICNmIGJhbyBn4buTbSBk4buvIGxp4buHdSBkw7JuZyAyLDQsNiw4IHbDoCBj4buZdCAxLDIgY+G7p2EgYQ0KZyA8LSBhW2EkRCA+PTM1ICYgYSREIDw9NzAsIF0gI2cgYmFvIGfhu5NtIGPDoWMgZOG7ryBsaeG7h3UgduG7q2EgYsOpIGjGoW4gaG/hurdjIGLhurFuZyAzNSB24burYSBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgNzAgY+G7p2EgYQ0KaCA8LWFbYSREID09IDM1IHwgYSREID09IDgwLCBdICNoIGJhbyBn4buTbSBjw6FjIGThu7EgbGnhu4d1IGLhurFuZyAzNSBob+G6t2MgYuG6sW5nIDgwIGPhu6dhIGENCmkgPC0gYVtTICE9IDE1LCBdICNpIGJhbyBn4buTbSBk4buvIGxp4buHdSBTIG5oxrBuZyBi4buPIHThuqV0IGPhuqMgZ2nDoSB0cuG7iyBi4bqxbmcgMTUNCmBgYA0KDQojIyAqKjQuIE3hu5l0IHPhu5EgcGFja2FnZSBxdWFuIHRy4buNbmcga2jDoWMgY+G7p2EgUioqDQpOZ2/DoGkgKipkYXRhc2V0cyoqIHRyb25nIFIgY8OybiBuaGnhu4F1IGfDs2kgcGFja2FnZSBxdWFuIHRy4buNbmcga2jDoWMgbmjGsCAqKnRpZHl2ZXJzZSoqIGhheSAqKmdncGxvdDIqKi4gQ2jDum5nIHRhIGhvw6BuIHRvw6BuIGPDsyB0aOG7gyDDoXAgZOG7pW5nIG5o4buvbmcgbOG7h25oIOG7nyBt4bulYyAzIHbhu5tpIG5o4buvbmcgcGFja2FnZSDEkcOzLg0KDQpUdXkgbmhpw6puLCDEkeG7kWkgduG7m2kgcGFja2dhZSAqKnRpZHl2ZXJzZSoqLCBwYWNrYWdlIG7DoHkgY8OzIDEgY2jhu6ljIG7Eg25nIHbDtCBjw7luZyB0aMO6IHbhu4sgbcOgIGPDoWMgcGFja2FnZSBraMOhYyBraMO0bmcgY8OzIMSRw7MgbMOgICoqJT4lIChwaXBlKSoqLiDEkOG7gyBz4butIGThu6VuZyBjaOG7qWMgbsSDbmcgbsOgeSwgdGEgdGjhu7FjIGhp4buHbiBuaMawIHNhdToNCg0KX1bDrSBk4bulOl8NCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpICNn4buNaSBwYWNrYWdlICd0aWR5dmVyc2UnDQptIDwtIGEgJT4lIGZpbHRlcihTPjE1KSAjZOG7ryBsaeG7h3UgbSBiYW8gZ+G7k20gY8OzIGEgbMOgbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbywgbOG7jWMgc2FvIGNobyBk4buvIGxp4buHdSBTPjE1DQpgYGANCg0KKipDaMO6IHRow61jaDoqKg0KKiAlPiUgKHBpcGUpIG1hbmcgbmdoxKlhICJr4bq/IMSR4bq/biBsw6AiLiANCg0K4bueIMSRw6J5LCBjaMO6bmcgdGEgY8OzIHRo4buDIGhp4buDdSDDvSBuZ2jEqWEgY+G7p2EgdsOtIGThu6UgdHLDqm4gbMOgOiBW4bubaSBtLCBjaMO6bmcgdGEgbOG6pXkgYSBsw6BtIGThu68gbGnhu4d1IMSR4bqndSB2w6BvLCBr4bq/IMSR4bq/biBkw7luZyBs4buHbmggZmlsdGVyIMSR4buDIGzhu41jIG5o4buvbmcgZ2nDoSB0cuG7iyBTIGzhu5tuIGjGoW4gMTUuDQoNCiMjICoqNS4gR2nhu5tpIHRoaeG7h3UgduG7gSBXb3JsZCBCYW5rKioNCkLDqm4gY+G6oW5oIGfDs2kgcGFja2FnZSDEkcaw4bujYyDEkeG7gSBj4bqtcCBiw6puIHRyw6puIG5oxrAgKipkYXRhc2V0cyoqLCAqKmdncGxvdDIqKiBoYXkgKip0aWR5dmVyc2UqKiwgY2jDum5nIHRhIGPDsm4gY8OzIHRo4buDIGzhuqV5IHbDoCBz4butIGThu6VuZyBk4buvIGxp4buHdSB04burICoqV29ybGQgQmFuayoqLiANCg0KKipXb3JsZCBCYW5rKiogbMawdSB0cuG7ryBy4bqldCBuaGnhu4F1IHRow7RuZyB0aW4ga2luaCB04bq/IHbEqSBtw7QgY+G7p2Egbmhp4buBdSBuxrDhu5tjIHRyw6puIHRo4bq/IGdp4bubaSB2w6AgaG/DoG4gdG/DoG4gY2hvIHBow6lwIG5nxrDhu51pIGTDuW5nIHRydXkgY+G6rXAgdsOgIHPhu60gZOG7pW5nIGThu68gbGnhu4d1Lg0KDQojICoqTkhJ4buGTSBW4bukIDIuMioqDQoNCiMgKipQaMOibiB0w61jaCBt4buZdCBz4buRIMSR4bq3YyB0csawbmcgY+G7p2EgQm9hcmQgR2FtZSoqDQoqKioNCg0KIyMgKioxLiBHaeG7m2kgdGhp4buHdSoqDQojIyMgKioxLjEuIEJvYXJkIGdhbWUgbMOgIGfDrD8qKg0KDQpUaHXhuq10IG5n4buvIF9ib2FyZCBnYW1lXyDEkcaw4bujYyBkw7luZyDEkeG7gyBjaOG7iSBjw6FjIGxv4bqhaSB0csOyIGNoxqFpIGPhu50gYsOgbiBiYW8gZ+G7k20gMiBoYXkgbmhp4buBdSBuZ8aw4budaSBjaMahaSB0xrDGoW5nIHTDoWMgduG7m2kgbmhhdSB0aMO0bmcgcXVhIG3hu5l0IGLDoG4gY+G7nSB2w6AgdHXDom4gdGhlbyBt4buZdCBxdXkgbHXhuq10IG5o4bqldCDEkeG7i25oLiBN4buZdCBz4buRIHRyw7IgY8OybiBz4butIGThu6VuZyBjw6FjIHbhuq10IGThu6VuZyBo4buXIHRy4bujIG5oxrAgbMOhIGLDoGksIHjDrSBuZ+G6p3UsIHF1w6JuIGPhu50uLi4gDQoNCk5nxrDhu51pIGNoxqFpIGPhuqduIHBo4bqjaSBwaMOhbiDEkW/DoW4sIHTGsCBkdXksIHBow6JuIHTDrWNoIHTDrG5oIGh14buRbmcgdsOgIGPhuqMgc+G7sSBtYXkgbeG6r24gY+G7p2EgbcOsbmggxJHhu4MgY2hp4bq/biB0aOG6r25nLiBUaOG7nWkgZ2lhbiBjaG8gbOG6p24gY2jGoWkgdMO5eSB0aHXhu5ljIHbDoG8gdOG7q25nIHRyw7IsIGPDsyBuaOG7r25nIHRyw7IgY2jGoWkgcuG6pXQgbmhhbmggbmjGsG5nIGPFqW5nIGPDsyBuaOG7r25nIHRyw7IgcGjhuqNpIG3huqV0IHThu6sgMSDEkeG6v24gMiB0aeG6v25nIG3hu5tpIGvhur90IHRow7pjLg0KDQpN4buZdCBz4buRIHRyw7IgX2JvYXJkIGdhbWVfIG7hu5VpIHRp4bq/bmcgbcOgIGNow7puZyB0YSBjw7MgdGjhu4MgxJHDoyBuZ2hlIHF1YSBuaMawOiBD4budIHZ1YSwgY+G7nSBjw6Egbmfhu7FhLCBtYSBzw7NpLCByw7p0IGfhu5csIGLDoGkgdW7DtCwgbMO0IHTDtCwgdHLDsiBjYSByw7QsIG1hIHPDs2ksIG3DqG8gbuG7lSwgLi4uDQoNCiMjIyAqKjEuMi4gQuG7mSBk4buvIGxp4buHdSBib2FyZCBnYW1lKioNCg0KYGBge3J9DQpnYW1lIDwtIHJlYWQuY3N2KGZpbGUgPSAnQzovVXNlcnMvQWRtaW4vRG93bmxvYWRzL2JvYXJkX2dhbWVfZGF0YS5jc3YnLCBoZWFkZXIgPSBUKSAjxJHhu41jIGThu68gbGnhu4d1IGJvYXJkIGdhbWUNCmBgYA0KDQpC4buZIGThu68gbGnhu4d1IF9ib2FyZCBnYW1lXyBiYW8gZ+G7k20gMjIxMiBxdWFuIHPDoXQgdsOgIDEwIGJp4bq/biwgxJHGsOG7o2MgbOG6pXkgdOG7qyBbS2FnZ2xlXShodHRwczovL3d3dy5rYWdnbGUuY29tL2RhdGFzZXRzL21ycGFudGhlcnNvbi9ib2FyZC1nYW1lLWRhdGEvZGF0YSkgLSBt4buZdCBuxqFpIHV5IHTDrW4gY3VuZyBj4bqlcCBsxrDhu6NuZyBs4bubbiB0aMO0bmcgdGluIHbhu4EgxJFhIGThuqFuZyBjw6FjIGzEqW5oIHbhu7FjIHbDoCBuZ8Ogbmggbmdo4buBLg0KDQpOZ2hpw6puIGPhu6l1IGLhu5kgZOG7ryBsaeG7h3UgX2JvYXJkIGdhbWVfIGLhurFuZyBjw7RuZyBj4bulIFIgZ2nDunAgY2hvIG5o4buvbmcgbmjDoCBzw6FuZyB04bqhbyBoYXkgY8OhYyBuaMOgIGtpbmggZG9hbmggduG7gSBt4bqjbmcgdHLDsiBjaMahaSBjw7MgbeG7mXQgY8OhaSBuaMOsbiBj4bulIHRo4buDIHbDoCB04buRdCBoxqFuIHbhu4EgbeG7mXQgc+G7kSB54bq/dSB04buRLCB04burIMSRw7MsIGjhu40gY8OzIHRo4buDIHThu7EgxJFp4buBdSBjaOG7iW5oIHbDoCB0aHUgaMO6dCB0aMOqbSB04buHcCBraMOhY2ggaMOgbmcgbmjGsDoNCg0KKiBHYW1lIGlkIGPhu6dhIHRyw7IgKiooZ2FtZV9pZCkqKg0KDQoqIFTDqm4gdHLDsiBjaMahaSAqKihuYW1lcykqKg0KDQoqIFPhu5EgbMaw4bujbmcgbmfGsOG7nWkgdGhhbSBnaWEgdOG7kWkgdGhp4buDdSAqKihtaW5fcGxheWVyKSoqDQoNCiogU+G7kSBsxrDhu6NuZyBuZ8aw4budaSB0aGFtIGdpYSB04buRaSDEkWEgKioobWF4X3BsYXllcikqKg0KDQoqIFRo4budaSBnaWFuIHRydW5nIGLDrG5oIGtoaSBjaMahaSBt4buZdCB0csOyLCB0w61uaCB0aGVvIHBow7p0ICoqKGF2Z190aW1lKSoqDQoNCiogVGjhu51pIGdpYW4gdOG7kWkgdGhp4buDdSBraGkgY2jGoWkgbeG7mXQgdHLDsiwgdMOtbmggdGhlbyBwaMO6dCAqKihtaW5fdGltZSkqKg0KDQoqIFRo4budaSBnaWFuIHThu5FpIMSRYSBraGkgY2jGoWkgbeG7mXQgdHLDsiwgdMOtbmggdGhlbyBwaMO6dCAqKihtYXhfdGltZSkqKg0KDQoqIFPhu5EgbMaw4bujdCDEkcOhbmggZ2nDoSAqKihhdmdfcmF0aW5nKSoqDQoNCiogxJDhu5kgdHXhu5VpIG5nxrDhu51pIGNoxqFpICoqKGFnZSkqKg0KDQoqIE5ow6Agc8OhbmcgbOG6rXAgdHLDsiBjaMahaSAqKihkZXNpZ25lcikqKg0KDQojIyAqKjIuIFBow6JuIHTDrWNoIHPhu5EgbmfGsOG7nWkgY2jGoWkqKg0KDQpgYGB7cn0NCm5hbWVzKGdhbWUpIDwtIGMoJ0lEJywgJ04nLCAnbWlucCcsICdtYXhwJywgJ0FUJywgJ21pbnQnLCAnbWF4dCcsICdBUicsICdBJywgJ0QnKSANCiPEkOG7lWkgdMOqbiBjw6FjIGJp4bq/biDEkeG7gyB0aeG7h24gbOG7o2kgdHJvbmcgdmnhu4djIHRo4buxYyBoaeG7h24gdGjDoWMgdMOhYyB0csOqbiBk4buvIGxp4buHdQ0KDQpnYW1lMSA8LSBnYW1lW2dhbWUkbWlucCA9PTEgJiBnYW1lJG1heHAgPD0yLCBdIA0KI2dhbWUxIGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSBuZ8aw4budaSBjaMahaSB04buRaSB0aGnhu4N1IGzDoCAxLCBz4buRIG5nxrDhu51pIGNoxqFpIHThu5FpIMSRYSBsw6AgMiwg4bupbmcgduG7m2kgbmjDs20ga2jDoWNoIGjDoG5nIGzhursvY+G6t3AgxJHDtGkNCg0KZ2FtZTIgPC0gZ2FtZVtnYW1lJG1pbnAgPj0gMiAmIGdhbWUkbWF4cCA+PSAzLCBdIA0KI2dhbWUyIGPFqW5nIGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSBuZ8aw4budaSBjaMahaSB04buRaSB0aGnhu4N1IGzhu5tuIGjGoW4gaG/hurdjIGLhurFuZyAyLCBz4buRIG5nxrDhu51pIGNoxqFpIHThu5FpIMSRYSBs4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcgMywg4bupbmcgduG7m2kgbmjDs20ga2jDoWNoIGjDoG5nIMSR4buZaS9uaMOzbQ0KYGBgDQoNClF1YSB2aeG7h2MgcGjDom4gdMOtY2ggMjIxMiB0csaw4budbmcgaOG7o3AgcXVhbiBzw6F0LCB0YSBuaOG6rW4gdGjhuqV5IHThu7cgbOG7hyB4deG6pXQgaGnhu4duIGPhu6dhIHRyw7IgY2jGoWkgZMOgbmggY2hvIG5ow7NtIGtow6FjaCBow6BuZyBs4bq7L2PhurdwIMSRw7RpIGNoaeG6v20gbeG7mXQgdOG7tyB0cuG7jW5nIHRo4bqlcCBoxqFuIF8oa2hv4bqjbmcgMiw2NjclLCB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIDU5LzIyMTIpXyBzbyB24bubaSB0csOyIGNoxqFpIGTDoG5oIGNobyBuaMOzbSBraMOhY2ggaMOgbmcgbMOgIMSR4buZaS9uaMOzbSBfKGtob+G6o25nIDY5LDE2OCUsIHTGsMahbmcgxJHGsMahbmcgduG7m2kgMTUzMC8yMjEyKV8uIEvhur90IHF14bqjIG7DoHkgbMOgbSBu4buVaSBi4bqtdCBz4buxIMOtdCDEkcaw4bujYyBjaMO6IMO9IGPhu6dhIG5ow7NtIGtow6FjaCBow6BuZyBs4bq7L2PhurdwIMSRw7RpIHNvIHbhu5tpIG5ow7NtIGtow6FjaCBow6BuZyBsw6AgxJHhu5lpL25ow7NtLiANCg0KROG7sWEgdHLDqm4gcGjDom4gdMOtY2ggbsOgeSwgdGEgY8OzIHRo4buDIMSR4buBIHh14bqldCBy4bqxbmcgY8OhYyBuaMOgIHPDoW5nIHThuqFvIHbDoCBkb2FuaCBuZ2hp4buHcCB0cm9uZyBsxKluaCB24buxYyB0csOyIGNoxqFpIGPDsyB0aOG7gyBraGFpIHRow6FjIHRow6ptIGPGoSBo4buZaSBi4bqxbmcgY8OhY2ggc8OhbmcgdOG6oW8gdsOgIHBow6F0IHRyaeG7g24gY8OhYyB0csOyIGNoxqFpIMSR4bq3YyBiaeG7h3QgZMOgbmggY2hvIG5ow7NtIGtow6FjaCBow6BuZyBs4bq7L2PhurdwIMSRw7RpLiDEkOG7k25nIHRo4budaSwgbGnDqm4gdOG7pWMgbuG7lyBs4buxYyBj4bqjaSB0aGnhu4duIHRyw7IgY2jGoWksIG5o4bqxbSB04bqhbyByYSB0cuG6o2kgbmdoaeG7h20gdGjDuiB24buLIHbDoCBnaeG7ryBjaMOibiBuZ8aw4budaSBjaMahaSB0aHXhu5ljIG5ow7NtIGtow6FjaCBow6BuZyBsw6AgxJHhu5lpL25ow7NtLg0KDQo9PiDEkGnhu4F1IG7DoHkga2jDtG5nIGNo4buJIGdpw7pwIHTEg25nIGPGsOG7nW5nIHPhu7EgY2jDuiDDvSDEkeG7kWkgduG7m2kgxJHhu5FpIHTGsOG7o25nIG7DoHkgbcOgIGPDsm4gY8OzIHRo4buDIG1hbmcgbOG6oWkgbmd14buTbiBs4bujaSBuaHXhuq1uIGLhu5Ugc3VuZyBjaG8gaOG7jS4NCg0KTeG7mXQgc+G7kSB0csOyIGNoxqFpIGTDoG5oIGNobyBuaMOzbSBraMOhY2ggaMOgbmcgbOG6uy9j4bq3cCDEkcO0aSBtw6AgdGEgY8OzIHRo4buDIHBow6F0IHRyaeG7g24gdGjDqm0gbMOgOg0KDQoqIEFya2hhbSBIb3Jyb3I6IFRoZSBDYXJkIEdhbWUNCg0KKiBOYXRlIEZyZW5jaCwgTWF0dGhldyBOZXdtYW4NCg0KKiBGaWVsZHMgb2YgQXJsZQ0KDQoqIFV3ZSBSb3NlbmJlcmcNCg0KKiBUaGUgTG9yZCBvZiB0aGUgUmluZ3M6IFRoZSBDYXJkIEdhbWUNCg0KIyMgKiozLiBQaMOibiB0w61jaCB0aOG7nWkgZ2lhbiBjaMahaSBt4buZdCB0csOyKioNCg0KYGBge3J9DQpnYW1lMyA8LSBnYW1lW2dhbWUkbWludCA+PSA1ICYgZ2FtZSRtYXh0IDw9IDE4MCwgXQ0KI2dhbWUzIGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSB0aOG7nWkgZ2lhbiBjaMahaSB04buRaSB0aGnhu4N1IGzDoCBs4bubbiBoxqFuIGLhurFuZyA1LCBz4buRIHRo4budaSBnaWFuIGNoxqFpIHThu5FpIMSRYSBsw6AgYsOpIGjGoW4gYuG6sW5nIDE4MCwg4bupbmcgduG7m2kgYuG7mSB0csOyIGNoxqFpIG3huqV0IMOtdCB0aOG7nWkgZ2lhbiDEkeG7gyBjaMahaQ0KDQpnYW1lNCA8LSBnYW1lW2dhbWUkbWludCA+PSAxODAgJiBnYW1lJG1heHQgPD0gNjAwMCwgXQ0KI2dhbWU0IGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSB0aOG7nWkgZ2lhbiBjaMahaSB04buRaSB0aGnhu4N1IGzDoCBs4bubbiBoxqFuIGLhurFuZyAxODAsIHPhu5EgdGjhu51pIGdpYW4gY2jGoWkgdOG7kWkgxJFhIGzDoCBiw6kgaMahbiBi4bqxbmcgNjAwMCwg4bupbmcgduG7m2kgYuG7mSB0csOyIGNoxqFpIG3huqV0IG5oaeG7gXUgdGjhu51pIGdpYW4gxJHhu4MgY2jGoWkNCmBgYA0KDQpL4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1IGNobyB0aOG6pXkgcuG6sW5nIMSR4buRaSB24bubaSBjw6FjIHRyw7IgY2jGoWkgY8OzIHRo4budaSBnaWFuIGNoxqFpIG5n4bqvbiwgY2jDum5nIGPDsyB04bu3IGzhu4cgcuG6pXQgY2FvIF8oMjAzOS8yMjEyIHjhuqVwIHjhu4kgOTIsMTc5JSlfLCBo4bqndSBo4bq/dCBjw6FjIGLhu5kgdHLDsiBjaMahaSDEkeG7gXUgxJHGsOG7o2MgY2jGoWkgdHJvbmcga2hv4bqjbmcgdGjhu51pIGdpYW4gdOG7qyAxIMSR4bq/biAzIHRp4bq/bmcuIE5nxrDhu6NjIGzhuqFpLCB0csOyIGNoxqFpIMSRw7JpIGjhu49pIHRo4budaSBnaWFuIGNoxqFpIGzDonUgaMahbiBjw7MgdOG7tyBs4buHIHPhu60gZOG7pW5nIHRo4bqlcCBoxqFuIF8oMTc3LzIyMTIgeOG6pXAgeOG7iSA4LDAwMSUpXy4NCg0KTmjDrG4gY2h1bmcsIG5naGnDqm4gY+G7qXUgY2hvIHRo4bqleSBy4bqxbmcgxrB1IMSRaeG7g20gY2jDrW5oIHbDoCDEkWnhu4NtIMSR4buZYyDEkcOhbyB0cm9uZyBsxKluaCB24buxYyB0csOyIGNoxqFpIG7hurFtIOG7nyBraMO0bmcgbmjhu69uZyBz4bqjbiBwaOG6qW0gdGjDuiB24buLIG3DoCBjw7JuIG3huqV0IMOtdCB0aOG7nWkgZ2lhbiDEkeG7gyBjaMahaSwgdGnhur90IGtp4buHbSB0aOG7nWkgZ2lhbi4gxJBp4buBdSBuw6B5IMSR4bq3dCByYSBt4buZdCBjxqEgaOG7mWkgcsO1IHLDoG5nIGNobyBjw6FjIG5ow6Agc8OhbmcgdOG6oW8gdsOgIGRvYW5oIG5naGnhu4dwIHRyw7IgY2jGoWkgxJHhu4MgdOG6rXAgdHJ1bmcgdsOgIHBow6F0IHRyaeG7g24gbmjhu69uZyB0csOyIGNoxqFpIGPDsyDEkeG6t2MgxJFp4buDbSBuw6B5LCBuaOG6sW0gdOG7kWkgxrB1IGjDs2Egc+G7sSBo4bqlcCBk4bqrbiB2w6AgdGnhu4duIGzhu6NpIGNobyBuZ8aw4budaSBjaMahaS4NCg0KIyMgKio0LiBU4buVbmcga+G6v3QqKg0KDQpUaMO0bmcgcXVhIG5naGnDqm4gY+G7qXUgdHLDqm4sIHRhIGPDsyB0aOG7gyByw7p0IHJhIGvhur90IGx14bqtbiBy4bqxbmcsIG5ow6Agc8OhbmcgdOG6oW8gdsOgIG5ow6Aga2luaCBkb2FuaCB0cm9uZyBsxKluaCB24buxYyB0csOyIGNoxqFpIG7Dqm46DQoNCiogUXVhbiB0w6JtIMSR4bq/biBuaMOzbSBraMOhY2ggaMOgbmcgbOG6uy9j4bq3cCDEkcO0aSBi4bqxbmcgY8OhY2ggc8OhbmcgdOG6oW8gdGjDqm0gbmjhu69uZyBi4buZIHRyw7IgY2jGoWkgY2hvIG5ow7NtIGtow6FjaCBow6BuZyBuw6B5Lg0KDQoqIEdp4buvIGNow6JuIG5ow7NtIGtow6FjaCBow6BuZyDEkeG7mWkvbmjDs20gYuG6sW5nIGPDoWNoIGtow7RuZyBuZ+G7q25nIGPhuqNpIHRp4bq/biwgY+G6o2kgdGhp4buHbiB0csOyIGNoxqFpLg0KDQoqIFThuq1wIHRydW5nIHbDoG8gbmjhu69uZyBi4buZIHRyw7IgY2jGoWkgbeG6pXQgw610IHRo4budaSBnaWFuIMSR4buDIGNoxqFpLg0KDQoqIFRow7RuZyDEkWnhu4dwLCBxdXkgbHXhuq10IHRyb25nIHRyw7IgY2jGoWkgY+G6p24gxJHGsOG7o2MgdGhp4bq/dCBr4bq/IG3hu5l0IGPDoWNoIGzDoG5oIG3huqFuaCB2w6wga2jDoWNoIGjDoG5nIGzDoCBjw6FjIGVtIGjhu41jIHNpbmggZMaw4bubaSAxOSB0deG7lWkuDQoNCmBgYHtyfQ0KY2hlY2sgPC0gaXMubmEoZ2FtZSkgI2tp4buDbSB0cmEgdMOtbmggaG/DoG4gY2jhu4luaCBj4bunYSBk4buvIGxp4buHdSAnYm9hcmQgZ2FtZScNCmBgYA0KDQoNCg==