12:32:57, 27 - 01 - 2024

Nhiệm vụ 3.1

Giới thiệu bộ dữ liệu

Đây là bộ dữ liệu về dân số của các nước trên thế giới từ năm 1950 tới năm 2021. Và dân số trong bộ dữ liệu này sẽ được chia thành các độ tuổi khác nhau.

Sau đây ta sẽ tiến hành đọc dữ liệu và xem dữ liệu có những gì

# Lệnh đọc dữ liệu vào R với dữ liệu là file csv và gán vào pop
pop <- read.csv("D:\\Rpubs\\population-and-demography.csv") 

Ta sẽ dùng lệnh str để xem cấu trúc của dữ liệu như thế nào

str(pop) # Lệnh để xem cấu trúc của bộ dữ liệu
## 'data.frame':    18288 obs. of  24 variables:
##  $ Country.name                              : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ Year                                      : int  1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 ...
##  $ Population                                : num  7480464 7571542 7667534 7764549 7864289 ...
##  $ Population.of.children.under.the.age.of.1 : num  301735 299368 305393 311574 317584 ...
##  $ Population.of.children.under.the.age.of.5 : int  1248282 1246857 1248220 1254725 1267817 1291129 1322342 1354752 1387274 1421808 ...
##  $ Population.of.children.under.the.age.of.15: int  3068855 3105444 3145070 3186382 3231060 3281470 3337026 3396048 3455343 3518528 ...
##  $ Population.under.the.age.of.25            : num  4494349 4552138 4613604 4676232 4741371 ...
##  $ Population.aged.15.to.64.years            : num  4198587 4250002 4303436 4356242 4408474 ...
##  $ Population.older.than.15.years            : num  4411609 4466098 4522464 4578167 4633229 ...
##  $ Population.older.than.18.years            : num  3946595 3993640 4041439 4088379 4136116 ...
##  $ Population.at.age.1                       : num  258652 254304 252906 258717 264765 ...
##  $ Population.aged.1.to.4.years              : num  946547 947489 942827 943151 950233 ...
##  $ Population.aged.5.to.9.years              : int  966210 991791 1017993 1039950 1055592 1062420 1063212 1065357 1071666 1084972 ...
##  $ Population.aged.10.to.14.years            : int  854363 866796 878857 891707 907651 927921 951472 975939 996403 1011748 ...
##  $ Population.aged.15.to.19.years            : int  757113 768616 781411 794308 806216 817550 828600 839588 851433 867048 ...
##  $ Population.aged.20.to.29.years            : int  1241348 1260904 1280288 1298803 1316768 1334989 1353958 1374043 1393789 1414034 ...
##  $ Population.aged.30.to.39.years            : int  909953 922765 935638 948321 961484 975801 991166 1007440 1023595 1040441 ...
##  $ Population.aged.40.to.49.years            : int  661807 667015 672491 678064 684153 691279 699431 708537 717938 728233 ...
##  $ Population.aged.50.to.59.years            : int  467170 468881 470898 472969 475117 477664 480665 484018 487393 491447 ...
##  $ Population.aged.60.to.69.years            : int  271905 273286 274852 276577 278210 279789 281376 282918 284592 286551 ...
##  $ Population.aged.70.to.79.years            : int  92691 94358 96026 97705 99298 100839 102385 103932 105508 107136 ...
##  $ Population.aged.80.to.89.years            : int  9499 10155 10721 11254 11793 12342 12890 13428 13959 14495 ...
##  $ Population.aged.90.to.99.years            : int  123 118 139 166 190 210 233 255 277 307 ...
##  $ Population.older.than.100.years           : num  0 0 0 0 0 0 0 0 0 0 ...

Ta sẽ giải thích kết quả mà câu lệnh đã trả:

  • Bộ dữ liệu này là data frame, bao gồm 18288 quan sát và 24 biến
  • Ở cột 1 là tên biến, cột 2 là kiểu biến, cột 3 là những quan sát
  • Ở cột 2 có những ký hiệu:
    • “chr”: Kiểu biến là ký tự
    • “int”: Kiểu biến là số nguyên
    • “num”: Kiểu biến là sỗ thực
  • Bộ dữ liệu có 1 biến định tính, 23 biến định lượng trong đó biến “Year” là biến thể hiện năm quan sát nên không có ý nghĩa khi tính toán.
  • Giải thích tên biến:
    • Country.name: Tên quốc gia
    • Year: Năm quan sát
    • Population: Tổng dân số
    • Population.of.children.under.the.age.of.1: Trẻ em có độ tuổi dưới 1
    • Population.of.children.under.the.age.of.5: Trẻ em có độ tuổi dưới 5
    • Population.of.children.under.the.age.of.15: Trẻ em có độ tuổi dưới 15
    • Population.under.the.age.of.25: Dân số có độ tuổi dưới 25
    • Population.aged.15.to.64.years: Dân số có độ tuổi từ 15 đến 64
    • Population.older.than.15.years: Dân số có độ tuổi lớn hơn 15
    • Population.older.than.18.years: Dân số có độ tuổi lớn hơn 18
    • Population.at.age.1: Dân số có độ tuổi là 1
    • Population.aged.1.to.4.years: Dân số có độ tuổi từ 1 đến 4
    • Population.aged.5.to.9.years: Dân số có độ tuổi từ 5 đến 9
    • Population.aged.10.to.14.years: Dân số có độ tuổi từ 10 đến 14
    • Population.aged.15.to.19.years: Dân số có độ tuổi từ 15 đến 19
    • Population.aged.20.to.29.years: Dân số có độ tuổi từ 20 đến 29
    • Population.aged.30.to.39.years: Dân số có độ tuổi từ 30 đến 39
    • Population.aged.40.to.49.years: Dân số có độ tuổi từ 40 đến 49
    • Population.aged.50.to.59.years: Dân số có độ tuổi từ 50 đến 59
    • Population.aged.60.to.69.years: Dân số có độ tuổi từ 60 đến 69
    • Population.aged.70.to.79.years: Dân số có độ tuổi từ 70 đến 79
    • Population.aged.80.to.89.years: Dân số có độ tuổi từ 80 đến 89
    • Population.aged.90.to.99.years: Dân số có độ tuổi từ 90 đến 99
    • Population.older.than.100.years: Dân số có độ tuổi lớn hơn 100

Ta tiếp tục có bao nhiêu quốc gia mà bộ dữ liệu đã quan sát

d <- table(pop$Country.name) # Lệnh lập bảng tần số mà tên các quốc gia được lặp lại
dim(d) # Lệnh xem số lượng quốc gia được quan sát
## [1] 254

Ta kiểm tra giá trị thiếu trong bộ dữ liệu

sum(is.na(pop)) # Lệnh xem có bao nhiêu giá trị thiếu của bộ dữ liệu
## [1] 0

Với kết quả trên thì bộ dữ liệu không có giá trị thiếu

Chọn ra bộ dữ liệu cần thiết

Ta sẽ dùng package “tidyverse” để rút trích ra bộ dữ liệu cần thiết. Sau đây ta sẽ chọn ra những biến có độ tuổi trong độ tuổi lao động là từ 15 tuổi đến 59 tuổi. Ta tiến hành chọn ra những biến cần thiết

library(tidyverse) # Lệnh gọi ra gói tidyverse
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.4
## ✔ 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
# Lệnh chọn ra các biến cần thiết để xử lý
pop2 <- pop %>% select(Country.name, Year, 
                       Population,
                       Population.aged.15.to.19.years,
                       Population.aged.20.to.29.years,
                       Population.aged.30.to.39.years,
                       Population.aged.40.to.49.years,
                       Population.aged.50.to.59.years)

Với câu lệnh trên ta đã chọn ra biến là:

  • Tên quốc gia
  • Năm
  • Tổng dân số
  • Dân số có độ tuổi từ 15 đến 19
  • Dân số có độ tuổi từ 20 đến 29
  • Dân số có độ tuổi từ 30 đến 39
  • Dân số có độ tuổi từ 40 đến 49
  • Dân số có độ tuổi từ 50 đến 59

Ta tiến hành đổi tên biến để dễ dàng thao tác hơn

# Lệnh đổi tên biến
pop2 <- pop2 %>% rename(Quốcgia = Country.name  ,
                        Năm = Year ,
                        DSố = Population ,
                        a15t19 = Population.aged.15.to.19.years,
                        a20t29 = Population.aged.20.to.29.years,
                        a30t39 = Population.aged.30.to.39.years,
                        a40t49 = Population.aged.40.to.49.years,
                        a50t59 = Population.aged.50.to.59.years)
names(pop2)
## [1] "Quốcgia" "Năm"     "DSố"     "a15t19"  "a20t29"  "a30t39"  "a40t49" 
## [8] "a50t59"

Với kết quả trên thì tên biến đã được đổi tương ứng với thứ tự biến ở trên. Sau đây ta sẽ chọn ra 3 quốc gia đông nhất thuộc châu Á, châu Âu và châu Phi với các nước lần lượt là:

  • Trung Quốc(China)
  • Ấn Độ(India)
  • Indonesia(Indonesia)
  • Nga(Russia)
  • Đức(Germany)
  • Thổ Nhĩ Kỳ(Turkey)
  • Nigeria(Nigeria)
  • Etiopia(Ethiopia)
  • Ai Cập(Egypt)

Những từ ở trong ngoặc là nhãn ứng với các quốc gia trong bộ dữ liệu. Ta tiến hành lọc dữ liệu

# Lệnh lọc ra các quốc gia ứng với nhãn của mỗi quốc gia
pop3 <- pop2 %>% filter(Quốcgia == "China"|
                        Quốcgia == "India"|
                        Quốcgia == "Indonesia"|
                        Quốcgia == "Russia"|
                        Quốcgia == "Germany"|
                        Quốcgia == "Turkey"|
                        Quốcgia == "Nigeria"|
                        Quốcgia == "Ethiopia"|
                        Quốcgia == "Egypt")

Vậy ta đã có được bộ dữ liệu bao gồm 9 quốc gia là 3 nước đông dân nhất của châu Á, châu Âu, châu Phi với dữ liệu là dân số ở trong độ tuổi lao động từ năm

Mã hoá dữ liệu

Ta sẽ nhóm các năm lại thành 2 thời kỳ là thế kỷ XX và thế kỷ XXI.

Ta dùng lệnh case_match. Lệnh này sẽ gán nhãn khi tìm thấy được ký tự giống với điều kiện đã cho trước

pop3$TKỳ <- pop3$Năm %>% case_match(1950:1999 ~ "TKXX",
                                      2000:2021 ~ "TKXXI")

Ta tiếp tục mã hoá dữ liệu bằng việc xác định xu hướng của dân số. Nếu dân số có độ tuổi từ 50-59 lớn hơn dân số có độ tuổi từ 15-19 thì sẽ được gán nhãn “Già hoá” và ngược lại thì sẽ gán nhãn là “Trẻ hoá”

# Lệnh gán nhãn
pop3$xuhuong <- if_else(pop3$a15t19<pop3$a50t59,"Già hoá","Trẻ hoá")

Ta sẽ lập ra bảng tần số. Bảng tần số sẽ theo biến Quốc gia và biến xu hướng và biến Thời kỳ. Ta sẽ dùng package “DT” để tạo ra bảng mô tả đẹp hơn

# Lệnh nhóm các quan sát theo quốc gia, xu hướng và thời kỳ và lập ra bảng tần số
d <- pop3 %>% group_by(Quốcgia,xuhuong,TKỳ) %>% summarise(n = n(),.groups = "drop")
library(DT) #Lệnh gọi ra package "DT"
# Tạo ra bảng bằng lệnh datatable
datatable(d,rownames = FALSE,colnames = c("Quốc gia","Xu hướng","Thời Kỳ","Tần số"),
          caption = "Bảng 1: Bảng tần số theo quốc gia và xu hướng")

Với bảng tần số trên đã cho ta thấy được:

  • Trung Quốc vào thế kỷ XX thì xu hướng dân số là trẻ hoá nhưng khi bước qua thế kỷ XXI thì xu hướng dân số lại là già hoá
  • Ai Cập qua các thời kỳ thì xu hướng dân số đều là trẻ hoá
  • Ethiopia qua các thời kỳ thì xu hướng dân số đều là trẻ hoá
  • Đức qua các thời kỳ thì xu hướng dân số đều là già hoá
  • Ấn Độ thì 2 thời kỳ đều là trẻ hoá nhưng khi lại có 2 năm thuộc thế kỷ XXI là già hoá
  • Indonesia thì thế kỷ XX và đầu thế kỷ XXI thì xu hướng dân số là trẻ hoá. Còn về sau đến năm 2021 thì xu hướng dân số là già hoá
  • Nigeria qua các thời kỳ đều có xu hướng dân số là trẻ hoá
  • Nga ở giữa thế kỷ XX thì có xu hướng dân số là trẻ hoá nhưng gần cuối XX và đầu thế kỷ XXI thì có xu hướng dân số là già hoá
  • Thổ Nhĩ Kỳ từ thế kỷ XX đến 10 năm đầu thế XXI có xu hướng dân số là trẻ hoá nhưng về sau đến năm 2021 có xu hướng dân số là già hoá

Phân tích số liệu

Sau đây chúng ta sẽ phân tích số liệu bằng việc tạo bảng thống kê mô tả. Bảng thống kê mô tả sẽ bao gồm các đại lượng đo lường sau:

  • Min: Giá trị nhỏ nhất
  • 1st Qu: Phân vị thứ nhất
  • Median: Trung vị (Phân vị thứ hai)
  • 3rd Qu: Phân bị thứ 3
  • Max: Giá trị lớn nhất
  • Mean: Giá trị trung bình Bảng thống kê mô tả đầu tiên sẽ tính toán các đại lượng đo lường theo các quốc gia và thời kỳ
# Lệnh lập bảng thống kê mô tả theo quốc gia và thời kỳ
tkmt1 <- pop3 %>% group_by(Quốcgia,TKỳ) %>%
                  summarise(min = min(DSố),
                            phânvị1 = quantile(DSố, probs = 0.25),
                            mean = mean(DSố),
                            phânvị2 = quantile(DSố, probs = 0.5),
                            phânvị3 = quantile(DSố, probs = 0.75),
                            max = max(DSố), .groups = "drop")
# Lệnh tạo ra bảng thống kê với tên các cột được đặt ở colnames và tạo ra tên bảng.
datatable(tkmt1, rownames = FALSE, colnames = c("Quốc gia",
                                                "Thời kỳ",
                                                "Giá trị nhỏ nhất",
                                                "Phân vị thứ 1",
                                                "Trung bình",
                                                "Trung vị",
                                                "Phân vị thứ 3",
                                                "Giá trị lớn nhất"),
          caption = "Bảng 2: Thống kê mô tả về dân số theo quốc gia và thời kỳ")

Chúng ta sẽ giải thích các đại lượng đo lường trên bảng thống kê mô tả:

  • Giá trị nhỏ nhất: Có 1 năm có dân số nhỏ nhất trong thời kỳ
  • Phân vị thứ 1:
    • Đối với thế kỷ XX: Sẽ có 13 năm có dân số nhỏ hơn hoặc bằng giá trị của phân vị thứ 1
    • Đối với thế kỷ XXI: Sẽ có 5 năm có dân số nhỏ giá trị của phân vị thứ nhất
  • Trung bình: Là dân số trung bình trong 1 thời kỳ, thường dùng để so sánh quốc gia nào có dân số đông hơn
  • Trung vị:
    • Đối với thế kỷ XX: Sẽ có 25 năm có dân số nhỏ hơn giá trị của trung vị
    • Đối với thế kỷ XXI: Sẽ có 11 năm có dân số nhỏ hơn hoặc bằng giá trị của trung vị
  • Phân vị thứ 3:
    • Đối với thế kỷ XX: Sẽ có 38 năm có dân số nhỏ hơn hoặc bằng giá trị của phân vị thứ 3
    • Đối với thế kỷ XXI: Sẽ có 15 năm có dân số nhỏ hơn giá trị của phân vị thứ 3
  • Giá trị lớn nhất: Có 1 năm có dân số lớn nhất trong thời kỳ

Sau đây ta sẽ dùng giá trị trung bình để so sánh dân số của những quốc gia trong các thời kỳ. Ở bảng trên có chức năng sắp xép lại các giá trị, ta sẽ click vào “Trung bình” nếu tam giác xuôi được in đậm thì các giá trị trung bình sẽ sắp xếp từ nhỏ tới lớn, nếu tam giác ngược được in đậm thì các giá trị trung bình sẽ sắp xếp từ lớn tới nhỏ. Ta tiến hành so sánh:

  • Thế kỷ XX: Theo như ta thấy được Trung Quốc có dân số đông nhất và Ethiopia có dân số nhỏ nhất trong thế kỷ XX. Ta dễ dàng thấy được khu vực châu Á luôn có dân số đông nhất tiếp đến là châu Âu và châu Phi.
  • Thế kỷ XXI: Trung Quốc lại dẫn đầu về dân số và quốc gia có dân số ít nhất là Thổ Nhĩ Kỳ.

Sau đây ta sẽ lấy ra 3 quốc gia có dân số trung bình đông nhất trong châu Á, châu Âu và châu Phi trong thế kỷ XXI lần lượt là: Trung Quốc, Nga, Nigeria. Ta sẽ tính toán giá trị trung bình của dân số trong độ tuổi lao động. Ta sẽ dùng lệnh across để tính toán thống kê nhiều biến. Trong câu lệnh, ta dùng starts_with(“a”) để lấy những cột có tên là a rồi sau đó tính giá trị trung bình của cột đó.

# Lệnh tạo ra bảng giá trị trung bình của dân số trong độ tuổi lao động
pop4 <- pop3 %>% filter(Quốcgia=="China"|Quốcgia=="Russia"|Quốcgia=="Nigeria") %>%
                  filter(TKỳ=="TKXXI") %>% 
                  group_by(Quốcgia) %>%
                  summarise(across(starts_with("a"), list(mean = mean))) 
# Lệnh tạo ra bảng giá trị trung bình với tên cột và tên bảng
datatable(pop4, rownames = F, colnames = c("Quốc Gia","15 đến 19 tuổi",
                                           "20 đến 29 tuổi", "30 đến 39 tuổi",
                                           "40 đến 49 tuổi","50 đến 59 tuổi"),
          caption = "Bảng 3: Dân số trung bình trong độ tuổi lao động ")

Từ bảng trên cho ta thấy được nguồn nhân lực trẻ (15 đến 29 tuổi) của Trung Quốc và Nigeria rất dồi dào nhưng Nga thì có nguồn nhân lực trẻ kém hơn rất nhiều so với 2 nước trên. Và nước Nga đang lâm vào tình trạng dân số bị già hoá điều này sẽ khiến năng suất bị giảm. Mặc dù có nguồn nhân lục trẻ dồi dào nhưng Trung Quốc cũng lâm vào tình trạng già hoá khi tổng dân số từ 40 đến 59 tuổi cao hơn so với nguồn nhân lực trẻ. Và Nigeria là nước có xu hướng trẻ hoá sẽ tạo ra nguồn nhân lực tốt hơn cho các nước châu Phi khác.

Nhiệm vụ 3.2

Mục tiêu phân tích

Để so sánh, xếp hạng và đánh giá giá trị sản xuất nông nghiệp của các quốc gia

Phương pháp phân tích

Sử dụng giá trị trung bình để so sánh giá trị giữa các quốc gia

Giới thiệu dữ liệu

Đây là bộ dữ liệu về giá trị sản xuất của 4 sản phẩm cà phê, gạo, đường, thịt heo của 4 quốc gia có nền nông nghiệp tiên tiến và Việt Nam: Việt Nam, Mỹ, Trung Quốc, Đức, Nhật Bản từ năm 2000 đến năm 2021. Bộ dữ liệu được lấy từ Faostat. Đơn vị của giá trị sản xuất là 1000 USD

Sau đây ta sẽ tiến hành đọc dữ liệu và xem dữ liệu có những gì

# Lệnh đọc dữ liệu với file dữ liệu là csv
agr <- read.csv("D:\\Rpubs\\FAOSTAT_data_en_1-27-2024 (4).csv")

Ta sẽ dùng lệnh str để xem cấu trúc của dữ liệu

# Lệnh cho biết cấu trúc của bộ dữ liệu
str(agr)
## 'data.frame':    274 obs. of  14 variables:
##  $ Domain.Code     : chr  "QV" "QV" "QV" "QV" ...
##  $ Domain          : chr  "Value of Agricultural Production" "Value of Agricultural Production" "Value of Agricultural Production" "Value of Agricultural Production" ...
##  $ Area.Code..M49. : int  159 159 159 159 159 159 159 159 159 159 ...
##  $ Area            : chr  "China" "China" "China" "China" ...
##  $ Element.Code    : int  57 57 57 57 57 57 57 57 57 57 ...
##  $ Element         : chr  "Gross Production Value (current thousand US$)" "Gross Production Value (current thousand US$)" "Gross Production Value (current thousand US$)" "Gross Production Value (current thousand US$)" ...
##  $ Item.Code..CPC. : num  1610 1610 1610 1610 21113 ...
##  $ Item            : chr  "Coffee, green" "Coffee, green" "Coffee, green" "Coffee, green" ...
##  $ Year.Code       : int  2010 2011 2012 2013 2000 2001 2002 2003 2004 2005 ...
##  $ Year            : int  2010 2011 2012 2013 2000 2001 2002 2003 2004 2005 ...
##  $ Unit            : chr  "1000 USD" "1000 USD" "1000 USD" "1000 USD" ...
##  $ Value           : int  160283 239316 357327 307350 42206142 46552314 44484076 50338593 66870946 67218134 ...
##  $ Flag            : chr  "E" "E" "E" "E" ...
##  $ Flag.Description: chr  "Estimated value" "Estimated value" "Estimated value" "Estimated value" ...

Ta sẽ giải thích kết quả mà câu lệnh đã trả:

  • Bộ dữ liệu này là data frame, bao gồm 274 quan sát và 14 biến
  • Ở cột 1 là tên biến, cột 2 là kiểu biến, cột 3 là những quan sát
  • Ở cột 2 có những ký hiệu:
    • “chr”: Kiểu biến là ký tự
    • “int”: Kiểu biến là số nguyên
    • “num”: Kiểu biến là sỗ thực
  • Bộ dữ liệu có 7 biến định tính, 7 biến định lượng trong đó biến “Year” và những biến có dạng “.Code” không có ý nghĩa khi tính toán.
  • Giải thích ý nghĩa tên biến:
    • Domain.Code:Mã lĩnh vực quan sát
    • Domain: Lĩnh vực quan sát
    • Area.Code..M49: Mã của khu vực quan sát
    • Area: Tên khu vực quan sát
    • Element.Code: Mã thang đo giá trị
    • Element: Thang đo giá trị
    • Item.Code..CPC.: Mã của sản phẩm
    • Item: Tên sản phẩm
    • Year.Code: Mã năm quan sát
    • Year: Năm quan sát
    • Unit: Đơn vị
    • Value: Giá trị
    • Flag: Biểu tượng
    • Flag.Description: Giải thích biểu tượng Ta sẽ kiểm tra giá trị thiếu của bộ dữ liệu
sum(is.na(agr))
## [1] 0

Với kết quả trên thì bộ dữ liệu không có giá trị thiếu

Chọn ra bộ dữ liệu cần thiết

Ở bộ dữ liệu trên ta chỉ cần lấy các biến như: Tên quốc gia, năm quan sát, tên sản phẩm, giá trị sản phẩm. Ta sẽ dùng package tidyverse để thực hiện các thao tác về sau

# Lệnh chọn ra biến cần thiết
library(tidyverse)
agr1 <- agr %>% select(Area,Year,Item,Value)

Bộ dữ liệu đang có dạng là long table ta sẽ chuyển dữ liệu về wide table để tiện cho việc phân tích. Ta chuyển các giá trị ở cột Item thành cột và có giá trị là Value

agr1 <- agr1 %>% spread(key = Item, value = Value)
names(agr1)
## [1] "Area"                                       
## [2] "Year"                                       
## [3] "Coffee, green"                              
## [4] "Meat of pig with the bone, fresh or chilled"
## [5] "Rice"                                       
## [6] "Sugar cane"

Ta sẽ tiến hành đổi tên các biến để dễ dàng thao tác hơn

# Lệnh đổi tên các cột
agr1 <- agr1 %>% rename(Quốc_gia=Area,
                          Năm=Year,
                          Cà_phê="Coffee, green",
                          Thịt_heo="Meat of pig with the bone, fresh or chilled",
                          Gạo="Rice",
                          Đường= "Sugar cane")

Mã hoá dữ liệu

Ta sẽ nhóm các năm thành thập niên rùi gán nhãn cho chúng, sẽ có 2 thập niên là 2000s ứng từ năm 2000 đến năm 2009 và 2010s ứng từ năm 2010 đến năm 2021. Ta sẽ dùng lệnh case_match để thực hiện việc gán nhãn

agr1$TNiên <- agr1$Năm %>% case_match(2000:2009 ~ "2000s",
                                      2010:2021 ~ "2010s") 

Ta tiếp tực tạo bảng tần số theo biến TNiên và biến Item của bộ dữ liệu gốc. Và dùng package DT để tạo ra 1 bảng có tên cột và tên của bảng

agr$TNiên <- agr$Year %>% case_match(2000:2009 ~ "2000s",
                                      2010:2021 ~ "2010s")
ts <- agr %>% group_by(TNiên,Item) %>% summarise(n=n())
## `summarise()` has grouped output by 'TNiên'. You can override using the
## `.groups` argument.
library(DT)
datatable(ts, rownames = F,colnames = c("Thập niên","Sản phẩm","Tần số"),
          caption = "Bảng 1: Bảng tần số theo thập niên và sản phẩm")

Ta sẽ giải thích kết quả trên:

  • Thập niên 2000s:
    • Giá trị của cà phê có 20 quan sát
    • Giá trị của thịt heo có 19 quan sát
    • Giá trị của gạo có 40 quan sát
    • Giá trị của đường có 40 quan sát
  • Thập niên 2010s
    • Giá trị của cà phê có 28 quan sát
    • Giá trị của thịt heo có 34 quan sát
    • Giá trị của gạo có 47 quan sát
    • Giá trị của đường có 46 quan sát

Phân tích dữ liệu

Ta sẽ tiến hành tính giá trị sản xuất trung bình sản phẩm mỗi quốc gia. Ta sẽ dùng lệnh across lồng vào summarise để tính trung bình nhiều biến.

gttb <- agr1 %>% group_by(Quốc_gia) %>% summarise(across(c("Cà_phê","Thịt_heo",
                                                           "Gạo","Đường"),~mean(.x,na.rm = TRUE)))
datatable(gttb, rownames = F,colnames = c("Quốc gia",
                                          "Cà phê",
                                          "Thịt heo",
                                          "Gạo",
                                          "Đường"),
          caption = "Bảng 2: Bảng giá trị trung bình của các sản phẩm")
  • Về cà phê: Thì Việt Nam sản xuất ra nhiều giá trị nhất rồi tới Trung Quốc và Mỹ.
  • Về thịt heo: Thì Trung quốc là nước sản xuất ra giá trị nhiều nhất tiếp đến là Đức và Việt Nam
  • Về gạo: Trung Quốc lại tiếp tục dẫn đầu về mặt giá trị sản xuất tiếp đến là Nhật Bản và Việt Nam
  • Về đường: Trung Quốc là nước tạo ra giá trị sản xuất nhiều nhất tiếp đến là Mỹ và Việt Nam

Thông qua kết quả trên cho ta thấy được Trung Quốc mạnh về phần nông nghiệp hơn Mỹ, Việt Nam cũng có sự cạnh tranh về nông nghiệp với các nước đang có nền công nghiệp tiên tiến. Đánh giá trên là khách quan có thể xảy ra sai sót vì sau khi chuyển sau long table đã có dữ liệu bị thiếu, đây là hạn chế của bộ dữ liệu này.

LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSAzIg0KYXV0aG9yOiAiVsO1IEhvw6BuZyBUw61uaCINCmRhdGU6ICIyMDI0LTAxLTI0Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiBUcnVlDQogICAgdG9jOiBUcnVlDQogICAgdG9jX2Zsb2F0OiBUcnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogIHBkZl9kb2N1bWVudDogDQogICAgbGF0ZXhfZW5naW5lOiB4ZWxhdGV4DQogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KIyBOaGnhu4dtIHbhu6UgMy4xDQoNCiMjIEdp4bubaSB0aGnhu4d1IGLhu5kgZOG7ryBsaeG7h3UNCsSQw6J5IGzDoCBi4buZIGThu68gbGnhu4d1IHbhu4EgZMOibiBz4buRIGPhu6dhIGPDoWMgbsaw4bubYyB0csOqbiB0aOG6vyBnaeG7m2kgdOG7qyBuxINtIDE5NTAgdOG7m2kgbsSDbSAyMDIxLiBWw6AgZMOibiBz4buRIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgeSBz4bq9IMSRxrDhu6NjIGNoaWEgdGjDoG5oIGPDoWMgxJHhu5kgdHXhu5VpIGtow6FjIG5oYXUuIA0KDQpTYXUgxJHDonkgdGEgc+G6vSB0aeG6v24gaMOgbmggxJHhu41jIGThu68gbGnhu4d1IHbDoCB4ZW0gZOG7ryBsaeG7h3UgY8OzIG5o4buvbmcgZ8OsDQpgYGB7cn0NCiMgTOG7h25oIMSR4buNYyBk4buvIGxp4buHdSB2w6BvIFIgduG7m2kgZOG7ryBsaeG7h3UgbMOgIGZpbGUgY3N2IHbDoCBnw6FuIHbDoG8gcG9wDQpwb3AgPC0gcmVhZC5jc3YoIkQ6XFxScHVic1xccG9wdWxhdGlvbi1hbmQtZGVtb2dyYXBoeS5jc3YiKSANCmBgYA0KVGEgc+G6vSBkw7luZyBs4buHbmggc3RyIMSR4buDIHhlbSBj4bqldSB0csO6YyBj4bunYSBk4buvIGxp4buHdSBuaMawIHRo4bq/IG7DoG8NCmBgYHtyfQ0Kc3RyKHBvcCkgIyBM4buHbmggxJHhu4MgeGVtIGPhuqV1IHRyw7pjIGPhu6dhIGLhu5kgZOG7ryBsaeG7h3UNCmBgYA0KVGEgc+G6vSBnaeG6o2kgdGjDrWNoIGvhur90IHF14bqjIG3DoCBjw6J1IGzhu4duaCDEkcOjIHRy4bqjOg0KDQoqIELhu5kgZOG7ryBsaeG7h3UgbsOgeSBsw6AgZGF0YSBmcmFtZSwgYmFvIGfhu5NtIDE4Mjg4IHF1YW4gc8OhdCB2w6AgMjQgYmnhur9uIA0KKiDhu54gY+G7mXQgMSBsw6AgdMOqbiBiaeG6v24sIGPhu5l0IDIgbMOgIGtp4buDdSBiaeG6v24sIGPhu5l0IDMgbMOgIG5o4buvbmcgcXVhbiBzw6F0DQoqIOG7niBj4buZdCAyIGPDsyBuaOG7r25nIGvDvSBoaeG7h3U6IA0KICAqICJjaHIiOiBLaeG7g3UgYmnhur9uIGzDoCBrw70gdOG7sQ0KICAqICJpbnQiOiBLaeG7g3UgYmnhur9uIGzDoCBz4buRIG5ndXnDqm4NCiAgKiAibnVtIjogS2nhu4N1IGJp4bq/biBsw6Agc+G7lyB0aOG7sWMNCiogQuG7mSBk4buvIGxp4buHdSBjw7MgMSBiaeG6v24gxJHhu4tuaCB0w61uaCwgMjMgYmnhur9uIMSR4buLbmggbMaw4bujbmcgdHJvbmcgxJHDsyBiaeG6v24gIlllYXIiIGzDoCBiaeG6v24gdGjhu4MgaGnhu4duIG7Eg20gcXVhbiBzw6F0IG7Dqm4ga2jDtG5nIGPDsyDDvSBuZ2jEqWEga2hpIHTDrW5oIHRvw6FuLg0KKiBHaeG6o2kgdGjDrWNoIHTDqm4gYmnhur9uOg0KICAqIENvdW50cnkubmFtZTogVMOqbiBxdeG7kWMgZ2lhDQogICogWWVhcjogTsSDbSBxdWFuIHPDoXQNCiAgKiBQb3B1bGF0aW9uOiBU4buVbmcgZMOibiBz4buRDQogICogUG9wdWxhdGlvbi5vZi5jaGlsZHJlbi51bmRlci50aGUuYWdlLm9mLjE6IFRy4bq7IGVtIGPDsyDEkeG7mSB0deG7lWkgZMaw4bubaSAxDQogICogUG9wdWxhdGlvbi5vZi5jaGlsZHJlbi51bmRlci50aGUuYWdlLm9mLjU6IFRy4bq7IGVtICBjw7MgxJHhu5kgdHXhu5VpIGTGsOG7m2kgNQ0KICAqIFBvcHVsYXRpb24ub2YuY2hpbGRyZW4udW5kZXIudGhlLmFnZS5vZi4xNTogVHLhursgZW0gY8OzIMSR4buZIHR14buVaSBkxrDhu5tpIDE1DQogICogUG9wdWxhdGlvbi51bmRlci50aGUuYWdlLm9mLjI1OiBEw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSBkxrDhu5tpIDI1DQogICogUG9wdWxhdGlvbi5hZ2VkLjE1LnRvLjY0LnllYXJzOiBEw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDE1IMSR4bq/biA2NA0KICAqIFBvcHVsYXRpb24ub2xkZXIudGhhbi4xNS55ZWFyczogRMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgbOG7m24gaMahbiAxNQ0KICAqIFBvcHVsYXRpb24ub2xkZXIudGhhbi4xOC55ZWFyczogRMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgbOG7m24gaMahbiAxOA0KICAqIFBvcHVsYXRpb24uYXQuYWdlLjE6IETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIGzDoCAxDQogICogUG9wdWxhdGlvbi5hZ2VkLjEudG8uNC55ZWFyczogRMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAxIMSR4bq/biA0DQogICogUG9wdWxhdGlvbi5hZ2VkLjUudG8uOS55ZWFyczogRMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyA1IMSR4bq/biA5DQogICogUG9wdWxhdGlvbi5hZ2VkLjEwLnRvLjE0LnllYXJzOiBEw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDEwIMSR4bq/biAxNA0KICAqIFBvcHVsYXRpb24uYWdlZC4xNS50by4xOS55ZWFyczogRMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAxNSDEkeG6v24gMTkNCiAgKiBQb3B1bGF0aW9uLmFnZWQuMjAudG8uMjkueWVhcnM6IETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMjAgxJHhur9uIDI5DQogICogUG9wdWxhdGlvbi5hZ2VkLjMwLnRvLjM5LnllYXJzOiBEw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDMwIMSR4bq/biAzOQ0KICAqIFBvcHVsYXRpb24uYWdlZC40MC50by40OS55ZWFyczogRMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyA0MCDEkeG6v24gNDkNCiAgKiBQb3B1bGF0aW9uLmFnZWQuNTAudG8uNTkueWVhcnM6IETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgNTAgxJHhur9uIDU5DQogICogUG9wdWxhdGlvbi5hZ2VkLjYwLnRvLjY5LnllYXJzOiBEw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDYwIMSR4bq/biA2OQ0KICAqIFBvcHVsYXRpb24uYWdlZC43MC50by43OS55ZWFyczogRMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyA3MCDEkeG6v24gNzkNCiAgKiBQb3B1bGF0aW9uLmFnZWQuODAudG8uODkueWVhcnM6IETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgODAgxJHhur9uIDg5DQogICogUG9wdWxhdGlvbi5hZ2VkLjkwLnRvLjk5LnllYXJzOiBEw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDkwIMSR4bq/biA5OQ0KICAqIFBvcHVsYXRpb24ub2xkZXIudGhhbi4xMDAueWVhcnM6IETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIGzhu5tuIGjGoW4gMTAwDQoNClRhIHRp4bq/cCB04bulYyBjw7MgYmFvIG5oacOqdSBxdeG7kWMgZ2lhIG3DoCBi4buZIGThu68gbGnhu4d1IMSRw6MgcXVhbiBzw6F0DQpgYGB7cn0NCmQgPC0gdGFibGUocG9wJENvdW50cnkubmFtZSkgIyBM4buHbmggbOG6rXAgYuG6o25nIHThuqduIHPhu5EgbcOgIHTDqm4gY8OhYyBxdeG7kWMgZ2lhIMSRxrDhu6NjIGzhurdwIGzhuqFpDQpkaW0oZCkgIyBM4buHbmggeGVtIHPhu5EgbMaw4bujbmcgcXXhu5FjIGdpYSDEkcaw4bujYyBxdWFuIHPDoXQNCmBgYA0KVGEga2nhu4NtIHRyYSBnacOhIHRy4buLIHRoaeG6v3UgdHJvbmcgYuG7mSBk4buvIGxp4buHdQ0KYGBge3J9DQpzdW0oaXMubmEocG9wKSkgIyBM4buHbmggeGVtIGPDsyBiYW8gbmhpw6p1IGdpw6EgdHLhu4sgdGhp4bq/dSBj4bunYSBi4buZIGThu68gbGnhu4d1DQpgYGANClbhu5tpIGvhur90IHF14bqjIHRyw6puIHRow6wgYuG7mSBk4buvIGxp4buHdSBraMO0bmcgY8OzIGdpw6EgdHLhu4sgdGhp4bq/dSANCg0KIyMgQ2jhu41uIHJhIGLhu5kgZOG7ryBsaeG7h3UgY+G6p24gdGhp4bq/dA0KVGEgc+G6vSBkw7luZyBwYWNrYWdlICJ0aWR5dmVyc2UiIMSR4buDIHLDunQgdHLDrWNoIHJhIGLhu5kgZOG7ryBsaeG7h3UgY+G6p24gdGhp4bq/dC4gU2F1IMSRw6J5IHRhIHPhur0gY2jhu41uIHJhIG5o4buvbmcgYmnhur9uIGPDsyDEkeG7mSB0deG7lWkgdHJvbmcgxJHhu5kgdHXhu5VpIGxhbyDEkeG7mW5nIGzDoCB04burIDE1IHR14buVaSDEkeG6v24gNTkgdHXhu5VpLiBUYSB0aeG6v24gaMOgbmggY2jhu41uIHJhIG5o4buvbmcgYmnhur9uIGPhuqduIHRoaeG6v3QNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpICMgTOG7h25oIGfhu41pIHJhIGfDs2kgdGlkeXZlcnNlDQojIEzhu4duaCBjaOG7jW4gcmEgY8OhYyBiaeG6v24gY+G6p24gdGhp4bq/dCDEkeG7gyB44butIGzDvQ0KcG9wMiA8LSBwb3AgJT4lIHNlbGVjdChDb3VudHJ5Lm5hbWUsIFllYXIsIA0KICAgICAgICAgICAgICAgICAgICAgICBQb3B1bGF0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICBQb3B1bGF0aW9uLmFnZWQuMTUudG8uMTkueWVhcnMsDQogICAgICAgICAgICAgICAgICAgICAgIFBvcHVsYXRpb24uYWdlZC4yMC50by4yOS55ZWFycywNCiAgICAgICAgICAgICAgICAgICAgICAgUG9wdWxhdGlvbi5hZ2VkLjMwLnRvLjM5LnllYXJzLA0KICAgICAgICAgICAgICAgICAgICAgICBQb3B1bGF0aW9uLmFnZWQuNDAudG8uNDkueWVhcnMsDQogICAgICAgICAgICAgICAgICAgICAgIFBvcHVsYXRpb24uYWdlZC41MC50by41OS55ZWFycykNCmBgYA0KVuG7m2kgY8OidSBs4buHbmggdHLDqm4gdGEgxJHDoyBjaOG7jW4gcmEgYmnhur9uIGzDoDoNCg0KKiBUw6puIHF14buRYyBnaWENCiogTsSDbQ0KKiBU4buVbmcgZMOibiBz4buRDQoqIETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMTUgxJHhur9uIDE5DQoqIETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMjAgxJHhur9uIDI5DQoqIETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMzAgxJHhur9uIDM5DQoqIETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgNDAgxJHhur9uIDQ5DQoqIETDom4gc+G7kSBjw7MgxJHhu5kgdHXhu5VpIHThu6sgNTAgxJHhur9uIDU5DQoNClRhIHRp4bq/biBow6BuaCDEkeG7lWkgdMOqbiBiaeG6v24gxJHhu4MgZOG7hSBkw6BuZyB0aGFvIHTDoWMgaMahbg0KYGBge3J9DQojIEzhu4duaCDEkeG7lWkgdMOqbiBiaeG6v24NCnBvcDIgPC0gcG9wMiAlPiUgcmVuYW1lKFF14buRY2dpYSA9IENvdW50cnkubmFtZSAgLA0KICAgICAgICAgICAgICAgICAgICAgICAgTsSDbSA9IFllYXIgLA0KICAgICAgICAgICAgICAgICAgICAgICAgRFPhu5EgPSBQb3B1bGF0aW9uICwNCiAgICAgICAgICAgICAgICAgICAgICAgIGExNXQxOSA9IFBvcHVsYXRpb24uYWdlZC4xNS50by4xOS55ZWFycywNCiAgICAgICAgICAgICAgICAgICAgICAgIGEyMHQyOSA9IFBvcHVsYXRpb24uYWdlZC4yMC50by4yOS55ZWFycywNCiAgICAgICAgICAgICAgICAgICAgICAgIGEzMHQzOSA9IFBvcHVsYXRpb24uYWdlZC4zMC50by4zOS55ZWFycywNCiAgICAgICAgICAgICAgICAgICAgICAgIGE0MHQ0OSA9IFBvcHVsYXRpb24uYWdlZC40MC50by40OS55ZWFycywNCiAgICAgICAgICAgICAgICAgICAgICAgIGE1MHQ1OSA9IFBvcHVsYXRpb24uYWdlZC41MC50by41OS55ZWFycykNCm5hbWVzKHBvcDIpDQpgYGANClbhu5tpIGvhur90IHF14bqjIHRyw6puIHRow6wgdMOqbiBiaeG6v24gxJHDoyDEkcaw4bujYyDEkeG7lWkgdMawxqFuZyDhu6luZyB24bubaSB0aOG7qSB04buxIGJp4bq/biDhu58gdHLDqm4uIFNhdSDEkcOieSB0YSBz4bq9IGNo4buNbiByYSAzIHF14buRYyBnaWEgxJHDtG5nIG5o4bqldCB0aHXhu5ljIGNow6J1IMOBLCBjaMOidSDDgnUgdsOgIGNow6J1IFBoaSB24bubaSBjw6FjIG7GsOG7m2MgbOG6p24gbMaw4bujdCBsw6A6DQoNCiogVHJ1bmcgUXXhu5FjKENoaW5hKQ0KKiDhuqRuIMSQ4buZKEluZGlhKQ0KKiBJbmRvbmVzaWEoSW5kb25lc2lhKQ0KKiBOZ2EoUnVzc2lhKQ0KKiDEkOG7qWMoR2VybWFueSkNCiogVGjhu5UgTmjEqSBL4buzKFR1cmtleSkNCiogTmlnZXJpYShOaWdlcmlhKQ0KKiBFdGlvcGlhKEV0aGlvcGlhKQ0KKiBBaSBD4bqtcChFZ3lwdCkNCg0KTmjhu69uZyB04burIOG7nyB0cm9uZyBuZ2/hurdjIGzDoCBuaMOjbiDhu6luZyB24bubaSBjw6FjIHF14buRYyBnaWEgdHJvbmcgYuG7mSBk4buvIGxp4buHdS4gVGEgdGnhur9uIGjDoG5oIGzhu41jIGThu68gbGnhu4d1IA0KYGBge3J9DQojIEzhu4duaCBs4buNYyByYSBjw6FjIHF14buRYyBnaWEg4bupbmcgduG7m2kgbmjDo24gY+G7p2EgbeG7l2kgcXXhu5FjIGdpYQ0KcG9wMyA8LSBwb3AyICU+JSBmaWx0ZXIoUXXhu5FjZ2lhID09ICJDaGluYSJ8DQogICAgICAgICAgICAgICAgICAgICAgICBRdeG7kWNnaWEgPT0gIkluZGlhInwNCiAgICAgICAgICAgICAgICAgICAgICAgIFF14buRY2dpYSA9PSAiSW5kb25lc2lhInwNCiAgICAgICAgICAgICAgICAgICAgICAgIFF14buRY2dpYSA9PSAiUnVzc2lhInwNCiAgICAgICAgICAgICAgICAgICAgICAgIFF14buRY2dpYSA9PSAiR2VybWFueSJ8DQogICAgICAgICAgICAgICAgICAgICAgICBRdeG7kWNnaWEgPT0gIlR1cmtleSJ8DQogICAgICAgICAgICAgICAgICAgICAgICBRdeG7kWNnaWEgPT0gIk5pZ2VyaWEifA0KICAgICAgICAgICAgICAgICAgICAgICAgUXXhu5FjZ2lhID09ICJFdGhpb3BpYSJ8DQogICAgICAgICAgICAgICAgICAgICAgICBRdeG7kWNnaWEgPT0gIkVneXB0IikNCmBgYA0KVuG6rXkgdGEgxJHDoyBjw7MgxJHGsOG7o2MgYuG7mSBk4buvIGxp4buHdSBiYW8gZ+G7k20gOSBxdeG7kWMgZ2lhIGzDoCAzIG7GsOG7m2MgxJHDtG5nIGTDom4gbmjhuqV0IGPhu6dhIGNow6J1IMOBLCBjaMOidSDDgnUsIGNow6J1IFBoaSB24bubaSBk4buvIGxp4buHdSBsw6AgZMOibiBz4buRIOG7nyB0cm9uZyDEkeG7mSB0deG7lWkgbGFvIMSR4buZbmcgdOG7qyBuxINtIA0KDQojIyBNw6MgaG/DoSBk4buvIGxp4buHdQ0KVGEgc+G6vSBuaMOzbSBjw6FjIG7Eg20gbOG6oWkgdGjDoG5oIDIgdGjhu51pIGvhu7MgbMOgIHRo4bq/IGvhu7cgWFggdsOgIHRo4bq/IGvhu7cgWFhJLg0KDQpUYSBkw7luZyBs4buHbmggY2FzZV9tYXRjaC4gTOG7h25oIG7DoHkgc+G6vSBnw6FuIG5ow6NuIGtoaSB0w6xtIHRo4bqleSDEkcaw4bujYyBrw70gdOG7sSBnaeG7kW5nIHbhu5tpIMSRaeG7gXUga2nhu4duIMSRw6MgY2hvIHRyxrDhu5tjDQpgYGB7cn0NCnBvcDMkVEvhu7MgPC0gcG9wMyROxINtICU+JSBjYXNlX21hdGNoKDE5NTA6MTk5OSB+ICJUS1hYIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMDoyMDIxIH4gIlRLWFhJIikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KYGBgDQpUYSB0aeG6v3AgdOG7pWMgbcOjIGhvw6EgZOG7ryBsaeG7h3UgYuG6sW5nIHZp4buHYyB4w6FjIMSR4buLbmggeHUgaMaw4bubbmcgY+G7p2EgZMOibiBz4buRLiBO4bq/dSBkw6JuIHPhu5EgY8OzIMSR4buZIHR14buVaSB04burIDUwLTU5IGzhu5tuIGjGoW4gZMOibiBz4buRIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAxNS0xOSB0aMOsIHPhur0gxJHGsOG7o2MgZ8OhbiBuaMOjbiAiR2nDoCBob8OhIiB2w6AgbmfGsOG7o2MgbOG6oWkgdGjDrCBz4bq9IGfDoW4gbmjDo24gbMOgICJUcuG6uyBob8OhIg0KYGBge3J9DQojIEzhu4duaCBnw6FuIG5ow6NuDQpwb3AzJHh1aHVvbmcgPC0gaWZfZWxzZShwb3AzJGExNXQxOTxwb3AzJGE1MHQ1OSwiR2nDoCBob8OhIiwiVHLhursgaG/DoSIpDQpgYGANClRhIHPhur0gbOG6rXAgcmEgYuG6o25nIHThuqduIHPhu5EuIELhuqNuZyB04bqnbiBz4buRIHPhur0gdGhlbyBiaeG6v24gUXXhu5FjIGdpYSB2w6AgYmnhur9uIHh1IGjGsOG7m25nIHbDoCBiaeG6v24gVGjhu51pIGvhu7MuIFRhIHPhur0gZMO5bmcgcGFja2FnZSAiRFQiIMSR4buDIHThuqFvIHJhIGLhuqNuZyBtw7QgdOG6oyDEkeG6uXAgaMahbg0KYGBge3IgQuG6o25nIDF9DQojIEzhu4duaCBuaMOzbSBjw6FjIHF1YW4gc8OhdCB0aGVvIHF14buRYyBnaWEsIHh1IGjGsOG7m25nIHbDoCB0aOG7nWkga+G7syB2w6AgbOG6rXAgcmEgYuG6o25nIHThuqduIHPhu5ENCmQgPC0gcG9wMyAlPiUgZ3JvdXBfYnkoUXXhu5FjZ2lhLHh1aHVvbmcsVEvhu7MpICU+JSBzdW1tYXJpc2UobiA9IG4oKSwuZ3JvdXBzID0gImRyb3AiKQ0KbGlicmFyeShEVCkgI0zhu4duaCBn4buNaSByYSBwYWNrYWdlICJEVCINCiMgVOG6oW8gcmEgYuG6o25nIGLhurFuZyBs4buHbmggZGF0YXRhYmxlDQpkYXRhdGFibGUoZCxyb3duYW1lcyA9IEZBTFNFLGNvbG5hbWVzID0gYygiUXXhu5FjIGdpYSIsIlh1IGjGsOG7m25nIiwiVGjhu51pIEvhu7MiLCJU4bqnbiBz4buRIiksDQogICAgICAgICAgY2FwdGlvbiA9ICJC4bqjbmcgMTogQuG6o25nIHThuqduIHPhu5EgdGhlbyBxdeG7kWMgZ2lhIHbDoCB4dSBoxrDhu5tuZyIpDQpgYGANCg0KVuG7m2kgYuG6o25nIHThuqduIHPhu5EgdHLDqm4gxJHDoyBjaG8gdGEgdGjhuqV5IMSRxrDhu6NjOg0KDQoqIFRydW5nIFF14buRYyB2w6BvIHRo4bq/IGvhu7cgWFggdGjDrCB4dSBoxrDhu5tuZyBkw6JuIHPhu5EgbMOgIHRy4bq7IGhvw6EgbmjGsG5nIGtoaSBixrDhu5tjIHF1YSB0aOG6vyBr4bu3IFhYSSB0aMOsIHh1IGjGsOG7m25nIGTDom4gc+G7kSBs4bqhaSBsw6AgZ2nDoCBob8OhDQoqIEFpIEPhuq1wIHF1YSBjw6FjIHRo4budaSBr4buzIHRow6wgeHUgaMaw4bubbmcgZMOibiBz4buRIMSR4buBdSBsw6AgdHLhursgaG/DoQ0KKiBFdGhpb3BpYSBxdWEgY8OhYyB0aOG7nWkga+G7syB0aMOsIHh1IGjGsOG7m25nIGTDom4gc+G7kSDEkeG7gXUgbMOgIHRy4bq7IGhvw6ENCiogxJDhu6ljIHF1YSBjw6FjIHRo4budaSBr4buzIHRow6wgeHUgaMaw4bubbmcgZMOibiBz4buRIMSR4buBdSBsw6AgZ2nDoCBob8OhDQoqIOG6pG4gxJDhu5kgdGjDrCAyIHRo4budaSBr4buzIMSR4buBdSBsw6AgdHLhursgaG/DoSBuaMawbmcga2hpIGzhuqFpIGPDsyAyIG7Eg20gdGh14buZYyB0aOG6vyBr4bu3IFhYSSBsw6AgZ2nDoCBob8OhDQoqIEluZG9uZXNpYSB0aMOsIHRo4bq/IGvhu7cgWFggdsOgIMSR4bqndSB0aOG6vyBr4bu3IFhYSSB0aMOsIHh1IGjGsOG7m25nIGTDom4gc+G7kSBsw6AgdHLhursgaG/DoS4gQ8OybiB24buBIHNhdSDEkeG6v24gbsSDbSAyMDIxIHRow6wgeHUgaMaw4bubbmcgZMOibiBz4buRIGzDoCBnacOgIGhvw6ENCiogTmlnZXJpYSBxdWEgY8OhYyB0aOG7nWkga+G7syDEkeG7gXUgY8OzIHh1IGjGsOG7m25nIGTDom4gc+G7kSBsw6AgdHLhursgaG/DoQ0KKiBOZ2Eg4bufIGdp4buvYSB0aOG6vyBr4bu3IFhYIHRow6wgY8OzIHh1IGjGsOG7m25nIGTDom4gc+G7kSBsw6AgdHLhursgaG/DoSBuaMawbmcgZ+G6p24gY3Xhu5FpIFhYIHbDoCDEkeG6p3UgdGjhur8ga+G7tyBYWEkgdGjDrCBjw7MgeHUgaMaw4bubbmcgZMOibiBz4buRIGzDoCBnacOgIGhvw6ENCiogVGjhu5UgTmjEqSBL4buzIHThu6sgdGjhur8ga+G7tyBYWCDEkeG6v24gMTAgbsSDbSDEkeG6p3UgdGjhur8gWFhJIGPDsyB4dSBoxrDhu5tuZyBkw6JuIHPhu5EgbMOgIHRy4bq7IGhvw6EgbmjGsG5nIHbhu4Egc2F1IMSR4bq/biBuxINtIDIwMjEgY8OzIHh1IGjGsOG7m25nIGTDom4gc+G7kSBsw6AgZ2nDoCBob8OhDQoNCiMjIFBow6JuIHTDrWNoIHPhu5EgbGnhu4d1IA0KU2F1IMSRw6J5IGNow7puZyB0YSBz4bq9IHBow6JuIHTDrWNoIHPhu5EgbGnhu4d1IGLhurFuZyB2aeG7h2MgdOG6oW8gYuG6o25nIHRo4buRbmcga8OqIG3DtCB04bqjLiBC4bqjbmcgdGjhu5FuZyBrw6ogbcO0IHThuqMgc+G6vSBiYW8gZ+G7k20gY8OhYyDEkeG6oWkgbMaw4bujbmcgxJFvIGzGsOG7nW5nIHNhdToNCg0KKiBNaW46IEdpw6EgdHLhu4sgbmjhu48gbmjhuqV0DQoqIDFzdCBRdTogUGjDom4gduG7iyB0aOG7qSBuaOG6pXQNCiogTWVkaWFuOiBUcnVuZyB24buLIChQaMOibiB24buLIHRo4bupIGhhaSkNCiogM3JkIFF1OiBQaMOibiBi4buLIHRo4bupIDMNCiogTWF4OiBHacOhIHRy4buLIGzhu5tuIG5o4bqldCANCiogTWVhbjogR2nDoSB0cuG7iyB0cnVuZyBiw6xuaA0KQuG6o25nIHRo4buRbmcga8OqIG3DtCB04bqjIMSR4bqndSB0acOqbiBz4bq9IHTDrW5oIHRvw6FuIGPDoWMgxJHhuqFpIGzGsOG7o25nIMSRbyBsxrDhu51uZyB0aGVvIGPDoWMgcXXhu5FjIGdpYSB2w6AgdGjhu51pIGvhu7MgDQpgYGB7cn0NCiMgTOG7h25oIGzhuq1wIGLhuqNuZyB0aOG7kW5nIGvDqiBtw7QgdOG6oyB0aGVvIHF14buRYyBnaWEgdsOgIHRo4budaSBr4buzDQp0a210MSA8LSBwb3AzICU+JSBncm91cF9ieShRdeG7kWNnaWEsVEvhu7MpICU+JQ0KICAgICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1pbiA9IG1pbihEU+G7kSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGjDom524buLMSA9IHF1YW50aWxlKERT4buRLCBwcm9icyA9IDAuMjUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4gPSBtZWFuKERT4buRKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaMOibnbhu4syID0gcXVhbnRpbGUoRFPhu5EsIHByb2JzID0gMC41KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaMOibnbhu4szID0gcXVhbnRpbGUoRFPhu5EsIHByb2JzID0gMC43NSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gbWF4KERT4buRKSwgLmdyb3VwcyA9ICJkcm9wIikNCiMgTOG7h25oIHThuqFvIHJhIGLhuqNuZyB0aOG7kW5nIGvDqiB24bubaSB0w6puIGPDoWMgY+G7mXQgxJHGsOG7o2MgxJHhurd0IOG7nyBjb2xuYW1lcyB2w6AgdOG6oW8gcmEgdMOqbiBi4bqjbmcuDQpkYXRhdGFibGUodGttdDEsIHJvd25hbWVzID0gRkFMU0UsIGNvbG5hbWVzID0gYygiUXXhu5FjIGdpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGjhu51pIGvhu7MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdpw6EgdHLhu4sgbmjhu48gbmjhuqV0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaMOibiB24buLIHRo4bupIDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRydW5nIGLDrG5oIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcnVuZyB24buLIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaMOibiB24buLIHRo4bupIDMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdpw6EgdHLhu4sgbOG7m24gbmjhuqV0IiksDQogICAgICAgICAgY2FwdGlvbiA9ICJC4bqjbmcgMjogVGjhu5FuZyBrw6ogbcO0IHThuqMgduG7gSBkw6JuIHPhu5EgdGhlbyBxdeG7kWMgZ2lhIHbDoCB0aOG7nWkga+G7syIpDQpgYGANCkNow7puZyB0YSBz4bq9IGdp4bqjaSB0aMOtY2ggY8OhYyDEkeG6oWkgbMaw4bujbmcgxJFvIGzGsOG7nW5nIHRyw6puIGLhuqNuZyB0aOG7kW5nIGvDqiBtw7QgdOG6ozoNCg0KKiBHacOhIHRy4buLIG5o4buPIG5o4bqldDogQ8OzIDEgbsSDbSBjw7MgZMOibiBz4buRIG5o4buPIG5o4bqldCB0cm9uZyB0aOG7nWkga+G7sw0KKiBQaMOibiB24buLIHRo4bupIDE6IA0KICAqIMSQ4buRaSB24bubaSB0aOG6vyBr4bu3IFhYOiBT4bq9IGPDsyAxMyBuxINtIGPDsyBkw6JuIHPhu5Egbmjhu48gaMahbiBob+G6t2MgYuG6sW5nIGdpw6EgdHLhu4sgY+G7p2EgcGjDom4gduG7iyB0aOG7qSAxDQogICogxJDhu5FpIHbhu5tpIHRo4bq/IGvhu7cgWFhJOiBT4bq9IGPDsyA1IG7Eg20gY8OzIGTDom4gc+G7kSBuaOG7jyBnacOhIHRy4buLIGPhu6dhIHBow6JuIHbhu4sgdGjhu6kgbmjhuqV0DQoqIFRydW5nIGLDrG5oOiBMw6AgZMOibiBz4buRIHRydW5nIGLDrG5oIHRyb25nIDEgdGjhu51pIGvhu7MsIHRoxrDhu51uZyBkw7luZyDEkeG7gyBzbyBzw6FuaCBxdeG7kWMgZ2lhIG7DoG8gY8OzIGTDom4gc+G7kSDEkcO0bmcgaMahbg0KKiBUcnVuZyB24buLOg0KICAqIMSQ4buRaSB24bubaSB0aOG6vyBr4bu3IFhYOiBT4bq9IGPDsyAyNSBuxINtIGPDsyBkw6JuIHPhu5Egbmjhu48gaMahbiBnacOhIHRy4buLIGPhu6dhIHRydW5nIHbhu4sNCiAgKiDEkOG7kWkgduG7m2kgdGjhur8ga+G7tyBYWEk6IFPhur0gY8OzIDExIG7Eg20gY8OzIGTDom4gc+G7kSBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgZ2nDoSB0cuG7iyBj4bunYSB0cnVuZyB24buLDQoqIFBow6JuIHbhu4sgdGjhu6kgMzoNCiAgKiDEkOG7kWkgduG7m2kgdGjhur8ga+G7tyBYWDogU+G6vSBjw7MgMzggbsSDbSBjw7MgZMOibiBz4buRIG5o4buPIGjGoW4gaG/hurdjIGLhurFuZyBnacOhIHRy4buLIGPhu6dhIHBow6JuIHbhu4sgdGjhu6kgMw0KICAqIMSQ4buRaSB24bubaSB0aOG6vyBr4bu3IFhYSTogU+G6vSBjw7MgMTUgbsSDbSBjw7MgZMOibiBz4buRIG5o4buPIGjGoW4gZ2nDoSB0cuG7iyBj4bunYSBwaMOibiB24buLIHRo4bupIDMNCiogR2nDoSB0cuG7iyBs4bubbiBuaOG6pXQ6IEPDsyAxIG7Eg20gY8OzIGTDom4gc+G7kSBs4bubbiBuaOG6pXQgdHJvbmcgdGjhu51pIGvhu7MNCg0KU2F1IMSRw6J5IHRhIHPhur0gZMO5bmcgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCDEkeG7gyBzbyBzw6FuaCBkw6JuIHPhu5EgY+G7p2Egbmjhu69uZyBxdeG7kWMgZ2lhIHRyb25nIGPDoWMgdGjhu51pIGvhu7MuIOG7niBi4bqjbmcgdHLDqm4gY8OzIGNo4bupYyBuxINuZyBz4bqvcCB4w6lwIGzhuqFpIGPDoWMgZ2nDoSB0cuG7iywgdGEgc+G6vSBjbGljayB2w6BvICJUcnVuZyBiw6xuaCIgbuG6v3UgdGFtIGdpw6FjIHh1w7RpIMSRxrDhu6NjIGluIMSR4bqtbSB0aMOsIGPDoWMgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBz4bq9IHPhuq9wIHjhur9wIHThu6sgbmjhu48gdOG7m2kgbOG7m24sIG7hur91IHRhbSBnacOhYyBuZ8aw4bujYyDEkcaw4bujYyBpbiDEkeG6rW0gdGjDrCBjw6FjIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggc+G6vSBz4bqvcCB44bq/cCB04burIGzhu5tuIHThu5tpIG5o4buPLiBUYSB0aeG6v24gaMOgbmggc28gc8Ohbmg6DQoNCiogVGjhur8ga+G7tyBYWDogVGhlbyBuaMawIHRhIHRo4bqleSDEkcaw4bujYyBUcnVuZyBRdeG7kWMgY8OzIGTDom4gc+G7kSDEkcO0bmcgbmjhuqV0IHbDoCBFdGhpb3BpYSBjw7MgZMOibiBz4buRIG5o4buPIG5o4bqldCB0cm9uZyB0aOG6vyBr4bu3IFhYLiBUYSBk4buFIGTDoG5nIHRo4bqleSDEkcaw4bujYyBraHUgduG7sWMgY2jDonUgw4EgbHXDtG4gY8OzIGTDom4gc+G7kSDEkcO0bmcgbmjhuqV0IHRp4bq/cCDEkeG6v24gbMOgIGNow6J1IMOCdSB2w6AgY2jDonUgUGhpLg0KKiBUaOG6vyBr4bu3IFhYSTogVHJ1bmcgUXXhu5FjIGzhuqFpIGThuqtuIMSR4bqndSB24buBIGTDom4gc+G7kSB2w6AgcXXhu5FjIGdpYSBjw7MgZMOibiBz4buRIMOtdCBuaOG6pXQgbMOgIFRo4buVIE5oxKkgS+G7sy4NCg0KU2F1IMSRw6J5IHRhIHPhur0gbOG6pXkgcmEgMyBxdeG7kWMgZ2lhIGPDsyBkw6JuIHPhu5EgdHJ1bmcgYsOsbmggxJHDtG5nIG5o4bqldCB0cm9uZyBjaMOidSDDgSwgY2jDonUgw4J1IHbDoCBjaMOidSBQaGkgdHJvbmcgdGjhur8ga+G7tyBYWEkgbOG6p24gbMaw4bujdCBsw6A6IFRydW5nIFF14buRYywgTmdhLCBOaWdlcmlhLiBUYSBz4bq9IHTDrW5oIHRvw6FuIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggY+G7p2EgZMOibiBz4buRIHRyb25nIMSR4buZIHR14buVaSBsYW8gxJHhu5luZy4gVGEgc+G6vSBkw7luZyBs4buHbmggYWNyb3NzIMSR4buDIHTDrW5oIHRvw6FuIHRo4buRbmcga8OqIG5oaeG7gXUgYmnhur9uLiBUcm9uZyBjw6J1IGzhu4duaCwgdGEgZMO5bmcgc3RhcnRzX3dpdGgoImEiKSDEkeG7gyBs4bqleSBuaOG7r25nIGPhu5l0IGPDsyB0w6puIGzDoCBhIHLhu5NpIHNhdSDEkcOzIHTDrW5oIGdpw6EgdHLhu4sgdHJ1bmcgYsOsbmggY+G7p2EgY+G7mXQgxJHDsy4NCg0KYGBge3J9DQojIEzhu4duaCB04bqhbyByYSBi4bqjbmcgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCBj4bunYSBkw6JuIHPhu5EgdHJvbmcgxJHhu5kgdHXhu5VpIGxhbyDEkeG7mW5nDQpwb3A0IDwtIHBvcDMgJT4lIGZpbHRlcihRdeG7kWNnaWE9PSJDaGluYSJ8UXXhu5FjZ2lhPT0iUnVzc2lhInxRdeG7kWNnaWE9PSJOaWdlcmlhIikgJT4lDQogICAgICAgICAgICAgICAgICBmaWx0ZXIoVEvhu7M9PSJUS1hYSSIpICU+JSANCiAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KFF14buRY2dpYSkgJT4lDQogICAgICAgICAgICAgICAgICBzdW1tYXJpc2UoYWNyb3NzKHN0YXJ0c193aXRoKCJhIiksIGxpc3QobWVhbiA9IG1lYW4pKSkgDQojIEzhu4duaCB04bqhbyByYSBi4bqjbmcgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCB24bubaSB0w6puIGPhu5l0IHbDoCB0w6puIGLhuqNuZw0KZGF0YXRhYmxlKHBvcDQsIHJvd25hbWVzID0gRiwgY29sbmFtZXMgPSBjKCJRdeG7kWMgR2lhIiwiMTUgxJHhur9uIDE5IHR14buVaSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIwIMSR4bq/biAyOSB0deG7lWkiLCAiMzAgxJHhur9uIDM5IHR14buVaSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQwIMSR4bq/biA0OSB0deG7lWkiLCI1MCDEkeG6v24gNTkgdHXhu5VpIiksDQogICAgICAgICAgY2FwdGlvbiA9ICJC4bqjbmcgMzogRMOibiBz4buRIHRydW5nIGLDrG5oIHRyb25nIMSR4buZIHR14buVaSBsYW8gxJHhu5luZyAiKQ0KYGBgDQpU4burIGLhuqNuZyB0csOqbiBjaG8gdGEgdGjhuqV5IMSRxrDhu6NjIG5ndeG7k24gbmjDom4gbOG7sWMgdHLhursgKDE1IMSR4bq/biAyOSB0deG7lWkpIGPhu6dhIFRydW5nIFF14buRYyB2w6AgTmlnZXJpYSBy4bqldCBk4buTaSBkw6BvIG5oxrBuZyBOZ2EgdGjDrCBjw7Mgbmd14buTbiBuaMOibiBs4buxYyB0cuG6uyBrw6ltIGjGoW4gcuG6pXQgbmhp4buBdSBzbyB24bubaSAyIG7GsOG7m2MgdHLDqm4uIFbDoCBuxrDhu5tjIE5nYSDEkWFuZyBsw6JtIHbDoG8gdMOsbmggdHLhuqFuZyBkw6JuIHPhu5EgYuG7iyBnacOgIGhvw6EgxJFp4buBdSBuw6B5IHPhur0ga2hp4bq/biBuxINuZyBzdeG6pXQgYuG7iyBnaeG6o20uIE3hurdjIGTDuSBjw7Mgbmd14buTbiBuaMOibiBs4bulYyB0cuG6uyBk4buTaSBkw6BvIG5oxrBuZyBUcnVuZyBRdeG7kWMgY8WpbmcgbMOibSB2w6BvIHTDrG5oIHRy4bqhbmcgZ2nDoCBob8OhIGtoaSB04buVbmcgZMOibiBz4buRIHThu6sgNDAgxJHhur9uIDU5IHR14buVaSBjYW8gaMahbiBzbyB24bubaSBuZ3Xhu5NuIG5ow6JuIGzhu7FjIHRy4bq7LiBWw6AgTmlnZXJpYSBsw6Agbsaw4bubYyBjw7MgeHUgaMaw4bubbmcgdHLhursgaG/DoSBz4bq9IHThuqFvIHJhIG5ndeG7k24gbmjDom4gbOG7sWMgdOG7kXQgaMahbiBjaG8gY8OhYyBuxrDhu5tjIGNow6J1IFBoaSBraMOhYy4gDQoNCiMgTmhp4buHbSB24bulIDMuMg0KDQojIyBN4bulYyB0acOqdSBwaMOibiB0w61jaCANCsSQ4buDIHNvIHPDoW5oLCB44bq/cCBo4bqhbmcgdsOgIMSRw6FuaCBnacOhIGdpw6EgdHLhu4sgc+G6o24geHXhuqV0IG7DtG5nIG5naGnhu4dwIGPhu6dhIGPDoWMgcXXhu5FjIGdpYQ0KDQojIyBQaMawxqFuZyBwaMOhcCBwaMOibiB0w61jaA0KU+G7rSBk4bulbmcgZ2nDoSB0cuG7iyB0cnVuZyBiw6xuaCDEkeG7gyBzbyBzw6FuaCBnacOhIHRy4buLIGdp4buvYSBjw6FjIHF14buRYyBnaWENCg0KIyMgR2nhu5tpIHRoaeG7h3UgZOG7ryBsaeG7h3UNCsSQw6J5IGzDoCBi4buZIGThu68gbGnhu4d1IHbhu4EgZ2nDoSB0cuG7iyBz4bqjbiB4deG6pXQgY+G7p2EgNCBz4bqjbiBwaOG6qW0gY8OgIHBow6osIGfhuqFvLCDEkcaw4budbmcsIHRo4buLdCBoZW8gY+G7p2EgNCBxdeG7kWMgZ2lhIGPDsyBu4buBbiBuw7RuZyBuZ2hp4buHcCB0acOqbiB0aeG6v24gdsOgIFZp4buHdCBOYW06IFZp4buHdCBOYW0sIE3hu7ksIFRydW5nIFF14buRYywgxJDhu6ljLCBOaOG6rXQgQuG6o24gdOG7qyBuxINtIDIwMDAgxJHhur9uIG7Eg20gMjAyMS4gQuG7mSBk4buvIGxp4buHdSDEkcaw4bujYyBs4bqleSB04burICoqRmFvc3RhdCoqLiDEkMahbiB24buLIGPhu6dhIGdpw6EgdHLhu4sgc+G6o24geHXhuqV0IGzDoCAxMDAwIFVTRA0KDQpTYXUgxJHDonkgdGEgc+G6vSB0aeG6v24gaMOgbmggxJHhu41jIGThu68gbGnhu4d1IHbDoCB4ZW0gZOG7ryBsaeG7h3UgY8OzIG5o4buvbmcgZ8OsDQpgYGB7cn0NCiMgTOG7h25oIMSR4buNYyBk4buvIGxp4buHdSB24bubaSBmaWxlIGThu68gbGnhu4d1IGzDoCBjc3YNCmFnciA8LSByZWFkLmNzdigiRDpcXFJwdWJzXFxGQU9TVEFUX2RhdGFfZW5fMS0yNy0yMDI0ICg0KS5jc3YiKQ0KYGBgDQpUYSBz4bq9IGTDuW5nIGzhu4duaCBzdHIgxJHhu4MgeGVtIGPhuqV1IHRyw7pjIGPhu6dhIGThu68gbGnhu4d1IA0KYGBge3J9DQojIEzhu4duaCBjaG8gYmnhur90IGPhuqV1IHRyw7pjIGPhu6dhIGLhu5kgZOG7ryBsaeG7h3UNCnN0cihhZ3IpDQpgYGANCg0KVGEgc+G6vSBnaeG6o2kgdGjDrWNoIGvhur90IHF14bqjIG3DoCBjw6J1IGzhu4duaCDEkcOjIHRy4bqjOg0KDQoqIELhu5kgZOG7ryBsaeG7h3UgbsOgeSBsw6AgZGF0YSBmcmFtZSwgYmFvIGfhu5NtIDI3NCBxdWFuIHPDoXQgdsOgIDE0IGJp4bq/biANCiog4bueIGPhu5l0IDEgbMOgIHTDqm4gYmnhur9uLCBj4buZdCAyIGzDoCBraeG7g3UgYmnhur9uLCBj4buZdCAzIGzDoCBuaOG7r25nIHF1YW4gc8OhdA0KKiDhu54gY+G7mXQgMiBjw7Mgbmjhu69uZyBrw70gaGnhu4d1OiANCiAgKiAiY2hyIjogS2nhu4N1IGJp4bq/biBsw6Aga8O9IHThu7ENCiAgKiAiaW50IjogS2nhu4N1IGJp4bq/biBsw6Agc+G7kSBuZ3V5w6puDQogICogIm51bSI6IEtp4buDdSBiaeG6v24gbMOgIHPhu5cgdGjhu7FjDQoqIELhu5kgZOG7ryBsaeG7h3UgY8OzIDcgYmnhur9uIMSR4buLbmggdMOtbmgsIDcgYmnhur9uIMSR4buLbmggbMaw4bujbmcgdHJvbmcgxJHDsyBiaeG6v24gIlllYXIiIHbDoCBuaOG7r25nIGJp4bq/biBjw7MgZOG6oW5nICIuQ29kZSIga2jDtG5nIGPDsyDDvSBuZ2jEqWEga2hpIHTDrW5oIHRvw6FuLg0KKiBHaeG6o2kgdGjDrWNoIMO9IG5naMSpYSB0w6puIGJp4bq/bjoNCiAgKiBEb21haW4uQ29kZTpNw6MgbMSpbmggduG7sWMgcXVhbiBzw6F0DQogICogRG9tYWluOiBMxKluaCB24buxYyBxdWFuIHPDoXQNCiAgKiBBcmVhLkNvZGUuLk00OTogTcOjIGPhu6dhIGtodSB24buxYyBxdWFuIHPDoXQNCiAgKiBBcmVhOiBUw6puIGtodSB24buxYyBxdWFuIHPDoXQNCiAgKiBFbGVtZW50LkNvZGU6IE3DoyB0aGFuZyDEkW8gZ2nDoSB0cuG7iyANCiAgKiBFbGVtZW50OiBUaGFuZyDEkW8gZ2nDoSB0cuG7iw0KICAqIEl0ZW0uQ29kZS4uQ1BDLjogTcOjIGPhu6dhIHPhuqNuIHBo4bqpbQ0KICAqIEl0ZW06IFTDqm4gc+G6o24gcGjhuqltDQogICogWWVhci5Db2RlOiBNw6MgbsSDbSBxdWFuIHPDoXQNCiAgKiBZZWFyOiBOxINtIHF1YW4gc8OhdA0KICAqIFVuaXQ6IMSQxqFuIHbhu4sNCiAgKiBWYWx1ZTogR2nDoSB0cuG7iw0KICAqIEZsYWc6IEJp4buDdSB0xrDhu6NuZw0KICAqIEZsYWcuRGVzY3JpcHRpb246IEdp4bqjaSB0aMOtY2ggYmnhu4N1IHTGsOG7o25nDQpUYSBz4bq9IGtp4buDbSB0cmEgZ2nDoSB0cuG7iyB0aGnhur91IGPhu6dhIGLhu5kgZOG7ryBsaeG7h3UNCmBgYHtyfQ0Kc3VtKGlzLm5hKGFncikpDQpgYGANClbhu5tpIGvhur90IHF14bqjIHRyw6puIHRow6wgYuG7mSBk4buvIGxp4buHdSBraMO0bmcgY8OzIGdpw6EgdHLhu4sgdGhp4bq/dQ0KDQojIyBDaOG7jW4gcmEgYuG7mSBk4buvIGxp4buHdSBj4bqnbiB0aGnhur90DQrhu54gYuG7mSBk4buvIGxp4buHdSB0csOqbiB0YSBjaOG7iSBj4bqnbiBs4bqleSBjw6FjIGJp4bq/biBuaMawOiBUw6puIHF14buRYyBnaWEsIG7Eg20gcXVhbiBzw6F0LCB0w6puIHPhuqNuIHBo4bqpbSwgZ2nDoSB0cuG7iyBz4bqjbiBwaOG6qW0uIFRhIHPhur0gZMO5bmcgcGFja2FnZSB0aWR5dmVyc2UgxJHhu4MgdGjhu7FjIGhp4buHbiBjw6FjIHRoYW8gdMOhYyB24buBIHNhdQ0KYGBge3J9DQojIEzhu4duaCBjaOG7jW4gcmEgYmnhur9uIGPhuqduIHRoaeG6v3QNCmxpYnJhcnkodGlkeXZlcnNlKQ0KYWdyMSA8LSBhZ3IgJT4lIHNlbGVjdChBcmVhLFllYXIsSXRlbSxWYWx1ZSkNCmBgYA0KQuG7mSBk4buvIGxp4buHdSDEkWFuZyBjw7MgZOG6oW5nIGzDoCBsb25nIHRhYmxlIHRhIHPhur0gY2h1eeG7g24gZOG7ryBsaeG7h3UgduG7gSB3aWRlIHRhYmxlIMSR4buDIHRp4buHbiBjaG8gdmnhu4djIHBow6JuIHTDrWNoLiBUYSBjaHV54buDbiBjw6FjIGdpw6EgdHLhu4sg4bufIGPhu5l0IEl0ZW0gdGjDoG5oIGPhu5l0IHbDoCBjw7MgZ2nDoSB0cuG7iyBsw6AgVmFsdWUNCmBgYHtyfQ0KYWdyMSA8LSBhZ3IxICU+JSBzcHJlYWQoa2V5ID0gSXRlbSwgdmFsdWUgPSBWYWx1ZSkNCm5hbWVzKGFncjEpDQpgYGANClRhIHPhur0gdGnhur9uIGjDoG5oIMSR4buVaSB0w6puIGPDoWMgYmnhur9uIMSR4buDIGThu4UgZMOgbmcgdGhhbyB0w6FjIGjGoW4NCmBgYHtyfQ0KIyBM4buHbmggxJHhu5VpIHTDqm4gY8OhYyBj4buZdA0KYWdyMSA8LSBhZ3IxICU+JSByZW5hbWUoUXXhu5FjX2dpYT1BcmVhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBOxINtPVllYXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEPDoF9waMOqPSJDb2ZmZWUsIGdyZWVuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgVGjhu4t0X2hlbz0iTWVhdCBvZiBwaWcgd2l0aCB0aGUgYm9uZSwgZnJlc2ggb3IgY2hpbGxlZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEfhuqFvPSJSaWNlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgxJDGsOG7nW5nPSAiU3VnYXIgY2FuZSIpDQpgYGANCg0KIyMgTcOjIGhvw6EgZOG7ryBsaeG7h3UNClRhIHPhur0gbmjDs20gY8OhYyBuxINtIHRow6BuaCB0aOG6rXAgbmnDqm4gcsO5aSBnw6FuIG5ow6NuIGNobyBjaMO6bmcsIHPhur0gY8OzIDIgdGjhuq1wIG5pw6puIGzDoCAyMDAwcyDhu6luZyB04burIG7Eg20gMjAwMCDEkeG6v24gbsSDbSAyMDA5IHbDoCAyMDEwcyDhu6luZyB04burIG7Eg20gMjAxMCDEkeG6v24gbsSDbSAyMDIxLiBUYSBz4bq9IGTDuW5nIGzhu4duaCBjYXNlX21hdGNoIMSR4buDIHRo4buxYyBoaeG7h24gdmnhu4djIGfDoW4gbmjDo24NCmBgYHtyfQ0KYWdyMSRUTmnDqm4gPC0gYWdyMSROxINtICU+JSBjYXNlX21hdGNoKDIwMDA6MjAwOSB+ICIyMDAwcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMTA6MjAyMSB+ICIyMDEwcyIpIA0KDQpgYGANClRhIHRp4bq/cCB04buxYyB04bqhbyBi4bqjbmcgdOG6p24gc+G7kSB0aGVvIGJp4bq/biBUTmnDqm4gdsOgIGJp4bq/biBJdGVtIGPhu6dhIGLhu5kgZOG7ryBsaeG7h3UgZ+G7kWMuIFbDoCBkw7luZyBwYWNrYWdlIERUIMSR4buDIHThuqFvIHJhIDEgYuG6o25nIGPDsyB0w6puIGPhu5l0IHbDoCB0w6puIGPhu6dhIGLhuqNuZw0KYGBge3J9DQphZ3IkVE5pw6puIDwtIGFnciRZZWFyICU+JSBjYXNlX21hdGNoKDIwMDA6MjAwOSB+ICIyMDAwcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMTA6MjAyMSB+ICIyMDEwcyIpDQp0cyA8LSBhZ3IgJT4lIGdyb3VwX2J5KFROacOqbixJdGVtKSAlPiUgc3VtbWFyaXNlKG49bigpKQ0KbGlicmFyeShEVCkNCmRhdGF0YWJsZSh0cywgcm93bmFtZXMgPSBGLGNvbG5hbWVzID0gYygiVGjhuq1wIG5pw6puIiwiU+G6o24gcGjhuqltIiwiVOG6p24gc+G7kSIpLA0KICAgICAgICAgIGNhcHRpb24gPSAiQuG6o25nIDE6IELhuqNuZyB04bqnbiBz4buRIHRoZW8gdGjhuq1wIG5pw6puIHbDoCBz4bqjbiBwaOG6qW0iKQ0KYGBgDQpUYSBz4bq9IGdp4bqjaSB0aMOtY2gga+G6v3QgcXXhuqMgdHLDqm46DQoNCiogVGjhuq1wIG5pw6puIDIwMDBzOg0KICAqIEdpw6EgdHLhu4sgY+G7p2EgY8OgIHBow6ogY8OzIDIwIHF1YW4gc8OhdA0KICAqIEdpw6EgdHLhu4sgY+G7p2EgdGjhu4t0IGhlbyBjw7MgMTkgcXVhbiBzw6F0DQogICogR2nDoSB0cuG7iyBj4bunYSBn4bqhbyBjw7MgNDAgcXVhbiBzw6F0DQogICogR2nDoSB0cuG7iyBj4bunYSDEkcaw4budbmcgY8OzIDQwIHF1YW4gc8OhdA0KKiBUaOG6rXAgbmnDqm4gMjAxMHMNCiAgKiBHacOhIHRy4buLIGPhu6dhIGPDoCBwaMOqIGPDsyAyOCBxdWFuIHPDoXQNCiAgKiBHacOhIHRy4buLIGPhu6dhIHRo4buLdCBoZW8gY8OzIDM0IHF1YW4gc8OhdA0KICAqIEdpw6EgdHLhu4sgY+G7p2EgZ+G6oW8gY8OzIDQ3IHF1YW4gc8OhdA0KICAqIEdpw6EgdHLhu4sgY+G7p2EgxJHGsOG7nW5nIGPDsyA0NiBxdWFuIHPDoXQNCg0KIyMgUGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgDQpUYSBz4bq9IHRp4bq/biBow6BuaCB0w61uaCBnacOhIHRy4buLIHPhuqNuIHh14bqldCB0cnVuZyBiw6xuaCBz4bqjbiBwaOG6qW0gbeG7l2kgcXXhu5FjIGdpYS4gVGEgc+G6vSBkw7luZyBs4buHbmggYWNyb3NzIGzhu5NuZyB2w6BvIHN1bW1hcmlzZSDEkeG7gyB0w61uaCB0cnVuZyBiw6xuaCBuaGnhu4F1IGJp4bq/bi4NCmBgYHtyfQ0KZ3R0YiA8LSBhZ3IxICU+JSBncm91cF9ieShRdeG7kWNfZ2lhKSAlPiUgc3VtbWFyaXNlKGFjcm9zcyhjKCJDw6BfcGjDqiIsIlRo4buLdF9oZW8iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR+G6oW8iLCLEkMaw4budbmciKSx+bWVhbigueCxuYS5ybSA9IFRSVUUpKSkNCmRhdGF0YWJsZShndHRiLCByb3duYW1lcyA9IEYsY29sbmFtZXMgPSBjKCJRdeG7kWMgZ2lhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDw6AgcGjDqiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGjhu4t0IGhlbyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR+G6oW8iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsSQxrDhu51uZyIpLA0KICAgICAgICAgIGNhcHRpb24gPSAiQuG6o25nIDI6IELhuqNuZyBnacOhIHRy4buLIHRydW5nIGLDrG5oIGPhu6dhIGPDoWMgc+G6o24gcGjhuqltIikNCmBgYA0KKiBW4buBIGPDoCBwaMOqOiBUaMOsIFZp4buHdCBOYW0gc+G6o24geHXhuqV0IHJhIG5oaeG7gXUgZ2nDoSB0cuG7iyBuaOG6pXQgcuG7k2kgdOG7m2kgVHJ1bmcgUXXhu5FjIHbDoCBN4bu5Lg0KKiBW4buBIHRo4buLdCBoZW86IFRow6wgVHJ1bmcgcXXhu5FjIGzDoCBuxrDhu5tjIHPhuqNuIHh14bqldCByYSBnacOhIHRy4buLIG5oaeG7gXUgbmjhuqV0IHRp4bq/cCDEkeG6v24gbMOgIMSQ4bupYyB2w6AgVmnhu4d0IE5hbQ0KKiBW4buBIGfhuqFvOiBUcnVuZyBRdeG7kWMgbOG6oWkgdGnhur9wIHThu6VjIGThuqtuIMSR4bqndSB24buBIG3hurd0IGdpw6EgdHLhu4sgc+G6o24geHXhuqV0IHRp4bq/cCDEkeG6v24gbMOgIE5o4bqtdCBC4bqjbiB2w6AgVmnhu4d0IE5hbQ0KKiBW4buBIMSRxrDhu51uZzogVHJ1bmcgUXXhu5FjIGzDoCBuxrDhu5tjIHThuqFvIHJhIGdpw6EgdHLhu4sgc+G6o24geHXhuqV0IG5oaeG7gXUgbmjhuqV0IHRp4bq/cCDEkeG6v24gbMOgIE3hu7kgdsOgIFZp4buHdCBOYW0NCg0KVGjDtG5nIHF1YSBr4bq/dCBxdeG6oyB0csOqbiBjaG8gdGEgdGjhuqV5IMSRxrDhu6NjIFRydW5nIFF14buRYyBt4bqhbmggduG7gSBwaOG6p24gbsO0bmcgbmdoaeG7h3AgaMahbiBN4bu5LCBWaeG7h3QgTmFtIGPFqW5nIGPDsyBz4buxIGPhuqFuaCB0cmFuaCB24buBIG7DtG5nIG5naGnhu4dwIHbhu5tpIGPDoWMgbsaw4bubYyDEkWFuZyBjw7MgbuG7gW4gY8O0bmcgbmdoaeG7h3AgdGnDqm4gdGnhur9uLiDEkMOhbmggZ2nDoSB0csOqbiBsw6Aga2jDoWNoIHF1YW4gY8OzIHRo4buDIHjhuqN5IHJhIHNhaSBzw7N0IHbDrCBzYXUga2hpIGNodXnhu4NuIHNhdSBsb25nIHRhYmxlIMSRw6MgY8OzIGThu68gbGnhu4d1IGLhu4sgdGhp4bq/dSwgxJHDonkgbMOgIGjhuqFuIGNo4bq/IGPhu6dhIGLhu5kgZOG7ryBsaeG7h3UgbsOgeS4gIA0KDQo=