01/16(TU) Rでデータサイエンス4:貧困(データが少ない難点) [Main]・[授業]
データについて
Poverty rates at national poverty lines
Poverty headcount ratio at national poverty lines (% of
population):SI.POV.NAHC [Link]
National poverty headcount ratio is the percentage of the population
living below the national poverty line(s). National estimates are based
on population-weighted subgroup estimates from household surveys. For
economies for which the data are from EU-SILC, the reported year is the
income reference year, which is the year before the survey year.
全国貧困人口比率は、全国貧困線以下で生活している人口の割合です。国の推定値は、世帯調査からの人口加重サブグループ推定値に基づいています。データが
EU-SILC
からのものである経済の場合、報告される年は所得基準年、つまり調査年の前年です。
Poverty and Inequality―Poverty rates at international poverty
lines
Poverty headcount ratio at $2.15 a day (2017 PPP) (% of
population):SI.POV.DDAY [Link]
Poverty headcount ratio at $2.15 a day is the percentage of the
population living on less than $2.15 a day at 2017 purchasing power
adjusted prices. As a result of revisions in PPP exchange rates, poverty
rates for individual countries cannot be compared with poverty rates
reported in earlier editions.
1日2.15ドルの貧困人口比率は、2017年の購買力調整後価格で1日2.15ドル未満で生活している人口の割合です。PPP
為替レートの改定により、各国の貧困率を以前の版で報告された貧困率と比較することができなくなりました。
Poverty headcount ratio at $3.65 a day (2017 PPP) (% of
population):SI.POV.LMIC [Link]
Poverty headcount ratio at $3.65 a day is the percentage of the
population living on less than $3.65 a day at 2017 international
prices.
1 日 3.65 ドルの貧困人口比率は、2017 年の国際価格で 1 日 3.65
ドル未満で生活している人口の割合です。
Poverty headcount ratio at $6.85 a day (2017 PPP) (% of
population):SI.POV.UMIC [Link]
Poverty headcount ratio at $6.85 a day is the percentage of the
population living on less than $6.85 a day at 2017 international
prices.
1日6.85ドルの貧困人口比率は、2017年の国際価格で1日6.85ドル未満で生活している人口の割合です。
貧困者率
生活するための基本的ニーズを賄うために必要とそれぞれの国が考える基準を満たしていない人口の割合
$2.15/日 ($65.4/月, 785/年), $3.65($111.0/月, $1,332/年),
$6.85($208.4/月, $2,500/年)
Poverty headcount ratio at $2.15 a day (2017 PPP) (% of
population):SI.POV.DDAY [Link]
Poverty headcount ratio at $3.65 a day (2017 PPP) (% of
population):SI.POV.LMIC [Link]
Poverty headcount ratio at $6.85 a day (2017 PPP) (% of
population):SI.POV.UMIC [Link]
準備
library(tidyverse)
library(WDI)
データの読み込み(importing)
追加情報(地域・所得レベル)を読み込みたいので、extra=TRUE
としてあります。
最初の1回目は、かならず実行してください。
df_poverty_rate <- WDI(
indicator = c(ratio = "SI.POV.NAHC",
under_2.15 = "SI.POV.DDAY",
under_3.65 = "SI.POV.LMIC",
under_6.85 = "SI.POV.UMIC"),
extra = TRUE)
保存と読み込み
2回目からは、data
から読み込めるようにしておきます。
最初の1回目は、かならず実行してください。
write_csv(df_poverty_rate, "data/poverty_rate.csv")
df_poverty_rate <- read_csv("data/poverty_rate.csv")
Rows: 16758 Columns: 16── Column specification ─────────────────────────────────────────────────────────────────
Delimiter: ","
chr (7): country, iso2c, iso3c, region, capital, income, lending
dbl (7): year, ratio, under_2.15, under_3.65, under_6.85, longitude, latitude
lgl (1): status
date (1): lastupdated
ℹ 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.
データを見てみよう (viewing)
df_poverty_rate
または、head(df_poverty_rate)
と、str(df_poverty_rate)
df_poverty_rate
str(df_poverty_rate)
spc_tbl_ [16,758 × 16] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ country : chr [1:16758] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
$ iso2c : chr [1:16758] "AF" "AF" "AF" "AF" ...
$ iso3c : chr [1:16758] "AFG" "AFG" "AFG" "AFG" ...
$ year : num [1:16758] 2014 1971 2006 2013 1995 ...
$ status : logi [1:16758] NA NA NA NA NA NA ...
$ lastupdated: Date[1:16758], format: "2023-12-18" "2023-12-18" ...
$ ratio : num [1:16758] NA NA NA NA NA NA NA NA NA NA ...
$ under_2.15 : num [1:16758] NA NA NA NA NA NA NA NA NA NA ...
$ under_3.65 : num [1:16758] NA NA NA NA NA NA NA NA NA NA ...
$ under_6.85 : num [1:16758] NA NA NA NA NA NA NA NA NA NA ...
$ region : chr [1:16758] "South Asia" "South Asia" "South Asia" "South Asia" ...
$ capital : chr [1:16758] "Kabul" "Kabul" "Kabul" "Kabul" ...
$ longitude : num [1:16758] 69.2 69.2 69.2 69.2 69.2 ...
$ latitude : num [1:16758] 34.5 34.5 34.5 34.5 34.5 ...
$ income : chr [1:16758] "Low income" "Low income" "Low income" "Low income" ...
$ lending : chr [1:16758] "IDA" "IDA" "IDA" "IDA" ...
- attr(*, "spec")=
.. cols(
.. country = col_character(),
.. iso2c = col_character(),
.. iso3c = col_character(),
.. year = col_double(),
.. status = col_logical(),
.. lastupdated = col_date(format = ""),
.. ratio = col_double(),
.. under_2.15 = col_double(),
.. under_3.65 = col_double(),
.. under_6.85 = col_double(),
.. region = col_character(),
.. capital = col_character(),
.. longitude = col_double(),
.. latitude = col_double(),
.. income = col_character(),
.. lending = col_character()
.. )
- attr(*, "problems")=<externalptr>
変数の選択(selecting)
利用しない変数もあるので select
を使って変数を減らします。見やすいように、under_2.15
が NA
のものは、削除してあります。
df_poverty_rate_selected <- df_poverty_rate |> drop_na(under_2.15) |>
select(country, year, ratio, under_2.15, under_3.65, under_6.85, region)
df_poverty_rate_selected
練習 最後に少し加えると日本について見ることができます。どうしますか。
df_poverty_rate_selected
変形(Wide to Long Data)
四つの指標を同時にいくつか選択し比較したいので、一つの列(変数)にならべた、縦長データ(long
data)も作成しておきます。
pivot_longer(ratio:under_6.85, names_to = "level", values_to = "value")
ここでは、ratio
から under_6.85
を、level
という名前の列にならべ、値を value
という列に並べるようにしてあります。
確認するときは、value が NA のものは除き、country と、iso2c と、level
と value の部分だけ取り出して確認しています。
df_poverty_rate_long <- df_poverty_rate_selected |>
pivot_longer(ratio:under_6.85, names_to = "level", values_to = "value")
df_poverty_rate_long |> drop_na(value) |> select(country, level, value, region)
年毎のデータの数の確認(number of data in each year)
df_poverty_rate_long |> drop_na(value) |>
group_by(year, level) |> summarize(n = n()) |> arrange(desc(year))
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.
考察:それぞれの国での貧困率のデータ(ratio)が
多い場合も、絶対的な貧困率が多い場合もあるようだが、指標ごとに集計してみる。
df_poverty_rate_long |> filter(year %in% c(1960, 1970, 1980, 1990, 2000, 2010, 2020)) |> drop_na(value) |> group_by(year, level) |> summarize(n = n()) |>
ggplot(aes(as.character(year), n, fill = level)) + geom_col(position = "dodge", col = "black", linewidht = 0.1) + labs(x = "year", y = "number of data")
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.Warning: Ignoring unknown parameters: `linewidht`
考察:それぞれの国での貧困率のデータ(ratio)は、2000年以降、under_2.15,
under_3.65, under_6.85
は、同じ数ずつあるので、同時にデータを集めていると思われる。
世界とサハラ砂漠以南のアフリカのデータの経年変化
df_poverty_rate_long |>
filter(country %in% c("World", "Sub-Saharan Africa")) |> drop_na() |>
ggplot(aes(year, value, col = level, linetype = country)) + geom_line()
考察:Sub-Saharan Africa
のデータはないようです。たしかに、ratio
は、国ごとに決めるものですから、地域の場合には、ratio
の値はないのでしょう。
df_poverty_rate_long |> filter(year %in% c(2000, 2010, 2020)) |> drop_na(value) |>
filter(region == "Aggregates") |> filter(level %in% c("ratio", "under_2.15")) |> group_by(country, year, level) |> summarize(n = n())
`summarise()` has grouped output by 'country', 'year'. You can override using the `.groups` argument.
Sub Saharan Africa
はデータはありませんが、統計的に処理して(平均のようなものを取って)表示することは可能です。
loess (Local Polynomial Regression)
は、少しずつ区切って、多項式近似を使っているいます。そこで、マイナスの値も出てきてしまっています。しかし、大体の傾向をみることはできます。上で見たデータの数から、1992年以降にしておくのが良いでしょう。
df_poverty_rate_long |> drop_na(value) |> filter(!is.na(region), region != "Aggregates") |>
filter(level == "under_2.15") |>
ggplot(aes(year, value, col = region)) + geom_smooth(formula = 'y ~ x', se = FALSE)
df_poverty_rate_long |> drop_na(value) |>
filter(!is.na(region), region != "Aggregates", year > 1991) |>
filter(level == "under_2.15") |>
ggplot(aes(year, value, col = region)) + geom_smooth(formula = 'y ~ x', method = 'loess', se = FALSE) + labs(title = "Regionally aggregated ratio under 2.15 USD")
df_poverty_rate_long |> drop_na(value) |>
filter(!is.na(region), region != "Aggregates", year > 1991) |>
filter(level != "ratio") |>
ggplot(aes(year, value, col = region, linetype = level)) + geom_smooth(formula = 'y ~ x', method = 'loess', se = FALSE) + labs(title = "Regionally aggregated ratio")
df_poverty_rate_long |> drop_na(value) |>
filter(!is.na(region), region == "Sub-Saharan Africa", year > 1991) |>
ggplot(aes(year, value, col = level)) + geom_smooth(formula = 'y ~ x', method = 'loess', se = TRUE) + labs(title = "Sub-Saharan region aggregated ratio")
サハラ砂漠以南(Sub-Saharan Africa) の国のデータ
df_poverty_rate_long |> drop_na(value) |>
filter(region == "Sub-Saharan Africa") |> group_by(country, level) |>
summarize(n = n())
`summarise()` has grouped output by 'country'. You can override using the `.groups` argument.
アフリカ南部5カ国の分析
国のリストの設定
SOUTH_AFRICA_FIVE に、South Africa, Namibia, Eswatini, Botswana,
Lesotho を設定
SOUTH_AFRICA_FIVE <- c("South Africa", "Namibia", "Eswatini", "Botswana", "Lesotho")
5カ国のデータを確認
df_poverty_rate_selected
と、df_poverty_rate_long
について、アフリカ南部5カ国のデータを確認
df_poverty_rate_selected |> filter(country %in% SOUTH_AFRICA_FIVE)
df_poverty_rate_long |> filter(country %in% SOUTH_AFRICA_FIVE)
各貧困率を折れ線グラフで描いてみる
南アフリカについて
df_poverty_rate_long |>
filter(country == "South Africa") |> drop_na(value) |>
ggplot(aes(year, value, col = level)) + geom_line()
考察:2000年から2008年ごろまで減少しているが、その後、上昇傾向が見られる。
5カ国同時に
df_poverty_rate_long |>
filter(country %in% SOUTH_AFRICA_FIVE) |> drop_na(value) |>
ggplot(aes(year, value, col = country, linetype = level)) + geom_line()
考察:複雑でわかりやすいとはいえない
df_poverty_rate_long |>
filter(country %in% SOUTH_AFRICA_FIVE) |> drop_na(value) |> filter(level != "ratio") |>
ggplot(aes(year, value, col = country, linetype = level)) + geom_line()
考察:国ごとに決めた貧困率をのぞいてみた。多少改善した。しかし、あとは好み。
5カ国の最新のデータ
df_poverty_rate_selected |>
filter(country %in% SOUTH_AFRICA_FIVE) |>
drop_na(under_2.15) |> group_by(country) |> filter(year == max(year)) |>
select(country, year, ratio:under_6.85)
考察:毎年データがあるわけではないので、それぞの国ごとに最新のものを見ることとする
南アフリカ5カ国の貧困度ごとの人口比
df_poverty_rate_long |>
filter(country %in% SOUTH_AFRICA_FIVE) |>
drop_na(value) |> group_by(country) |> filter(year == max(year)) |>
ggplot(aes(country, value, fill = level)) + geom_col(position = "dodge", col = "black", linewidth = 0.1) +
labs(title = "Povert Level Ratio of Five Countries", subtitle = "Botswana in 2015, Eswatini in 2016 ,Lesoto in 2017, Namibia in 2015 \nand South Africa in 2014")
他の国での同様の分析
いくつかの国の貧困度ごとの人口比
それぞれの国の、最も新しいデータを用いるものとします。
練習 次の POV_COUNTRIES_YOUR_CHOICE
の部分を変更して、いくつかの国の貧困者の割合の表とグラフを作成してください。
POV_COUNTRIES_YOUR_CHOICE <- c("Myanmar", "Kenya", "China", "India", "Indonesia")
POV_COUNTRIES_YOUR_CHOICE <- c("Myanmar", "Kenya", "China", "India", "Indonesia")
df_poverty_rate_selected |>
filter(country %in% POV_COUNTRIES_YOUR_CHOICE) |>
drop_na(ratio) |> group_by(country) |> filter(year == max(year)) |>
select(country, year, ratio:under_6.85)
各国の各貧困レベルを表した棒グラフ
df_poverty_rate_long |>
filter(country %in% POV_COUNTRIES_YOUR_CHOICE) |>
drop_na(value) |> group_by(country) |> filter(year == max(year)) |>
ggplot(aes(country, value, fill = level)) + geom_col(position = "dodge", col = "black", linewidth = 0.1) +
labs(title = "Poverty Level Ratio of Countries", subtitle = "Using the most recent data")
折れ線グラフによる比較
一つの国のみについて、すべての貧困率を比較
線を通常より太くしています。初期値は、GeomLine$default_aes
でわかります。
df_poverty_rate_long |> filter(country == "India") |>
drop_na(value) |>
ggplot(aes(year, value, col = level)) + geom_line(linewidth = 1) +
labs(title = "Poverty Ratio of India")
二つの国についての貧困率を比較
df_poverty_rate_long |> filter(country %in% c("China", "India")) |>
drop_na(value) |>
ggplot(aes(year, value, col = country, linetype = level)) + geom_line(linewidth = 1) +
labs(title = "Poverty Ratio of China and India")
指標 under_2.15 の分析
折線グラフ
df_poverty_rate_selected |> filter(country %in% POV_COUNTRIES_YOUR_CHOICE) |> drop_na(under_2.15) |>
ggplot(aes(year, under_2.15, col = country)) + geom_line()
Histogram
df_poverty_rate_selected |> drop_na(under_2.15) |> filter(region != "Aggregates") |>
filter(under_2.15 > 25) |>
ggplot(aes(under_2.15, fill = region)) + geom_histogram(bins = 15, col = "black", linewidth = 0.1)
LS0tCnRpdGxlOiAi6LKn5Zuw546HIC0gUG92ZXJ0eSBSYXRlIgphdXRob3I6ICJILiBTdXp1a2kiCmRhdGU6ICIyMDI05bm0MeaciDE25pelIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCi0gICDvvIjliKXjga7jgr/jg5bjgb7jgZ/jga8g44Km44Kj44Oz44OJ44Km44Gn77yJUG9zaXRDbG91ZCDjgavjg63jgrDjgqTjg7PvvIjjgqLjgqvjgqbjg7Pjg4jjga7jgarjgYTkurrjga/jgrXjgqTjg7Pjg7vjgqLjg4Pjg5fvvIlbW1Bvc2l0LmNsb3VkXShodHRwczovL3Bvc2l0LmNsb3VkLyld44O7W1vlhbHmnInjg5fjg63jgrjjgqfjgq/jg4hdKGh0dHBzOi8vcG9zaXQuY2xvdWQvY29udGVudC81NTM5NzYzKV0KCiMjIOism+e+qSAx5pyIMTHml6XvvIjmnKjvvInljZfpg6jjgqLjg5Xjg6rjgqvoq7jlm73jga7nirbms4EKCi0gICBJTkVRVUFMSVRZIElOIFNPVVRIRVJOIEFGUklDQToLQU4gQVNTRVNTTUVOVCBPRiBUSEUgU09VVEhFUk4gQUZSSUNBTgtDVVNUT01TIFVOSU9OIFtbUmVwb3J0XShodHRwczovL2RvY3VtZW50czEud29ybGRiYW5rLm9yZy9jdXJhdGVkL2VuLzA5OTEyNTMwMzA3MjIzNjkwMy9wZGYvUDE2NDkyNzBjMDJhMWYwNmIwYTNhZTAyZTU3ZWFkZDdhODIucGRmKV0gW1tMaW5rXShodHRwczovL29wZW5rbm93bGVkZ2Uud29ybGRiYW5rLm9yZy9lbnRpdGllcy9wdWJsaWNhdGlvbi85ZjhlNDA3My0yNWY5LTU2MmMtOGUzYi01NDFjOTlkZDQyY2IpXQoKLSAgIOWNl+OCouODleODquOCq++8iFNvdXRoIEFmcmljYe+8ieOAgeODrOOCveODiO+8iExldGhvdG/vvInjgIHjgqjjgrnjg6/jg4bjgqPjg4vvvIhFc3dhdGluae+8ieOAgeODiuODn+ODk+OCou+8iE5hbWl2aWHvvInjgIHjg5zjg4Tjg6/jg4rvvIhCb3Rzd2FuYe+8iQoKICAgIC0gICDlj5forJvmhJ/mg7PjgavjgYvjgYjjgabvvJrjgrjjg4vmjIfmlbDjgajmiYDlvpfliIbluIMgLSDntprnt6ggW1tSIE5vdGVib29rXShodHRwczovL2RzLXNsLmdpdGh1Yi5pby9pbnRybzJyL2dlczAwMS9naW5pX3VwZGF0ZWQubmIuaHRtbCldLCBbW1JtZF0oaHR0cHM6Ly9naXRodWIuY29tL2RzLXNsL2ludHJvMnIvYmxvYi9tYWluL2RvY3MvZ2VzMDAxL2dpbmlfdXBkYXRlZC5SbWQpXQoKIyMg5ryU57+SIDHmnIgxNuaXpe+8iOeBq++8iQoKIyMgMDEvMTYoVFUp44CAUuOBp+ODh+ODvOOCv+OCteOCpOOCqOODs+OCuTQ66LKn5Zuw77yI44OH44O844K/44GM5bCR44Gq44GE6Zuj54K577yJIFtbTWFpbl0oaHR0cHM6Ly9kcy1zbC5naXRodWIuaW8vaW50cm8yci9nZXMwMDEvZ2VzMDAxLW1haW4ubmIuaHRtbCld44O7W+aOiOalrV0KCiMjIyDjg4fjg7zjgr/jgavjgaTjgYTjgaYKCioqUG92ZXJ0eSByYXRlcyBhdCBuYXRpb25hbCBwb3ZlcnR5IGxpbmVzKioKClBvdmVydHkgaGVhZGNvdW50IHJhdGlvIGF0IG5hdGlvbmFsIHBvdmVydHkgbGluZXMgKCUgb2YgcG9wdWxhdGlvbinvvJpTSS5QT1YuTkFIQyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TSS5QT1YuTkFIQyldCgpOYXRpb25hbCBwb3ZlcnR5IGhlYWRjb3VudCByYXRpbyBpcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcG9wdWxhdGlvbiBsaXZpbmcgYmVsb3cgdGhlIG5hdGlvbmFsIHBvdmVydHkgbGluZShzKS4gTmF0aW9uYWwgZXN0aW1hdGVzIGFyZSBiYXNlZCBvbiBwb3B1bGF0aW9uLXdlaWdodGVkIHN1Ymdyb3VwIGVzdGltYXRlcyBmcm9tIGhvdXNlaG9sZCBzdXJ2ZXlzLiBGb3IgZWNvbm9taWVzIGZvciB3aGljaCB0aGUgZGF0YSBhcmUgZnJvbSBFVS1TSUxDLCB0aGUgcmVwb3J0ZWQgeWVhciBpcyB0aGUgaW5jb21lIHJlZmVyZW5jZSB5ZWFyLCB3aGljaCBpcyB0aGUgeWVhciBiZWZvcmUgdGhlIHN1cnZleSB5ZWFyLgoK5YWo5Zu96LKn5Zuw5Lq65Y+j5q+U546H44Gv44CB5YWo5Zu96LKn5Zuw57ea5Lul5LiL44Gn55Sf5rS744GX44Gm44GE44KL5Lq65Y+j44Gu5Ymy5ZCI44Gn44GZ44CC5Zu944Gu5o6o5a6a5YCk44Gv44CB5LiW5biv6Kq/5p+744GL44KJ44Gu5Lq65Y+j5Yqg6YeN44K144OW44Kw44Or44O844OX5o6o5a6a5YCk44Gr5Z+644Gl44GE44Gm44GE44G+44GZ44CC44OH44O844K/44GMIEVVLVNJTEMg44GL44KJ44Gu44KC44Gu44Gn44GC44KL57WM5riI44Gu5aC05ZCI44CB5aCx5ZGK44GV44KM44KL5bm044Gv5omA5b6X5Z+65rqW5bm044CB44Gk44G+44KK6Kq/5p+75bm044Gu5YmN5bm044Gn44GZ44CCCgoqKlBvdmVydHkgYW5kIEluZXF1YWxpdHnigJVQb3ZlcnR5IHJhdGVzIGF0IGludGVybmF0aW9uYWwgcG92ZXJ0eSBsaW5lcyoqCgpQb3ZlcnR5IGhlYWRjb3VudCByYXRpbyBhdCBcJDIuMTUgYSBkYXkgKDIwMTcgUFBQKSAoJSBvZiBwb3B1bGF0aW9uKe+8mlNJLlBPVi5EREFZIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NJLlBPVi5EREFZKV0KClBvdmVydHkgaGVhZGNvdW50IHJhdGlvIGF0IFwkMi4xNSBhIGRheSBpcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcG9wdWxhdGlvbiBsaXZpbmcgb24gbGVzcyB0aGFuIFwkMi4xNSBhIGRheSBhdCAyMDE3IHB1cmNoYXNpbmcgcG93ZXIgYWRqdXN0ZWQgcHJpY2VzLiBBcyBhIHJlc3VsdCBvZiByZXZpc2lvbnMgaW4gUFBQIGV4Y2hhbmdlIHJhdGVzLCBwb3ZlcnR5IHJhdGVzIGZvciBpbmRpdmlkdWFsIGNvdW50cmllcyBjYW5ub3QgYmUgY29tcGFyZWQgd2l0aCBwb3ZlcnR5IHJhdGVzIHJlcG9ydGVkIGluIGVhcmxpZXIgZWRpdGlvbnMuCgox5pelMi4xNeODieODq+OBruiyp+WbsOS6uuWPo+avlOeOh+OBr+OAgTIwMTflubTjga7os7zosrflipvoqr/mlbTlvozkvqHmoLzjgacx5pelMi4xNeODieODq+acqua6gOOBp+eUn+a0u+OBl+OBpuOBhOOCi+S6uuWPo+OBruWJsuWQiOOBp+OBmeOAglBQUCDngrrmm7/jg6zjg7zjg4jjga7mlLnlrprjgavjgojjgorjgIHlkITlm73jga7osqflm7DnjofjgpLku6XliY3jga7niYjjgafloLHlkYrjgZXjgozjgZ/osqflm7Dnjofjgajmr5TovIPjgZnjgovjgZPjgajjgYzjgafjgY3jgarjgY/jgarjgorjgb7jgZfjgZ/jgIIKClBvdmVydHkgaGVhZGNvdW50IHJhdGlvIGF0IFwkMy42NSBhIGRheSAoMjAxNyBQUFApICglIG9mIHBvcHVsYXRpb24p77yaU0kuUE9WLkxNSUMgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0kuUE9WLkxNSUMpXQoKUG92ZXJ0eSBoZWFkY291bnQgcmF0aW8gYXQgXCQzLjY1IGEgZGF5IGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBwb3B1bGF0aW9uIGxpdmluZyBvbiBsZXNzIHRoYW4gXCQzLjY1IGEgZGF5IGF0IDIwMTcgaW50ZXJuYXRpb25hbCBwcmljZXMuCgoxIOaXpSAzLjY1IOODieODq+OBruiyp+WbsOS6uuWPo+avlOeOh+OBr+OAgTIwMTcg5bm044Gu5Zu96Zqb5L6h5qC844GnIDEg5pelIDMuNjUg44OJ44Or5pyq5rqA44Gn55Sf5rS744GX44Gm44GE44KL5Lq65Y+j44Gu5Ymy5ZCI44Gn44GZ44CCCgpQb3ZlcnR5IGhlYWRjb3VudCByYXRpbyBhdCBcJDYuODUgYSBkYXkgKDIwMTcgUFBQKSAoJSBvZiBwb3B1bGF0aW9uKe+8mlNJLlBPVi5VTUlDIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NJLlBPVi5VTUlDKV0KClBvdmVydHkgaGVhZGNvdW50IHJhdGlvIGF0IFwkNi44NSBhIGRheSBpcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcG9wdWxhdGlvbiBsaXZpbmcgb24gbGVzcyB0aGFuIFwkNi44NSBhIGRheSBhdCAyMDE3IGludGVybmF0aW9uYWwgcHJpY2VzLgoKMeaXpTYuODXjg4njg6vjga7osqflm7Dkurrlj6Pmr5Tnjofjga/jgIEyMDE35bm044Gu5Zu96Zqb5L6h5qC844GnMeaXpTYuODXjg4njg6vmnKrmuoDjgafnlJ/mtLvjgZfjgabjgYTjgovkurrlj6Pjga7libLlkIjjgafjgZnjgIIKCiMjIOW+qee/kgoK6LKn5Zuw44Gv44CB44Gp44Gu44KI44GG44Gq5bC65bqm44Gn5ris44KL44Gu44Gg44KN44GG44GL44CCCgoxLiAg5LiA5Lq65b2T44Gf44KK44Gu6LO86LK35Yqb5bmz5L6h77yIUHVyY2hhc2luZyBQb3dlciBQYXJpdGllc++8ieOBq+OCiOOCi+WbveWGhee3j+eUn+eUo++8iEdyb3NzIERvbWVzdGljIFByb2R1Y3TvvIkKCiAgICAtICAgR0RQIHBlciBjYXBpdGEsIFBQUCAoY29uc3RhbnQgMjAxNyBpbnRlcm5hdGlvbmFsIFwkKTogTlkuR0RQLlBDQVAuUFAuS0QgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvTlkuR0RQLlBDQVAuUFAuS0QpXQoKICAgIC0gICAxMi8xMyDmpbXluqbjgavosqfjgZfjgYTvvIHvvJ8gW1tSIE5vdGVib29rXShodHRwczovL2RzLXNsLmdpdGh1Yi5pby9pbnRybzJyL2dlczAwMS9wb3ZlcnR5Lm5iLmh0bWwpXSwgW1tSbWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9kcy1zbC9pbnRybzJyL2Jsb2IvbWFpbi9kb2NzL2dlczAwMS9wb3ZlcnR5LlJtZCldCgogICAgLSAgIOWbveOBlOOBqOOBruaJgOW+l+OBruW5s+Wdh+OBruOCiOOBhuOBquOCguOBruOBr+OCj+OBi+OCi+OBjOOAgealteW6puOBruiyp+WbsOOBruS6uuOBjOOBqeOBrueoi+W6puOBhOOCi+OBruOBi+OBr+OCj+OBi+OCieOBquOBhOOAggoKMi4gIOS6uuWPo+WLleaFi++8iGRlbW9ncmFwaHnvvIkKCiAgICAtICAg5Lq65Y+j44Gu44OH44O844K/77yI57eP5Lq65Y+j44CB5Ye655Sf546H44CB5q275Lqh546H44CB6Iul5bm06ICF5om26aSK546H44CB6auY6b2i6ICF5om26aSK546H77yJCgogICAgLSAgIDEyLzIwIOS6uuWPo+WLleaFi++8iGRlbW9ncmFwaHnvvIlbW1IgTm90ZWJvb2tdKGh0dHBzOi8vZHMtc2wuZ2l0aHViLmlvL2ludHJvMnIvZ2VzMDAxL2RlbW9ncmFwaHkubmIuaHRtbCldLCBbW1JtZF0oaHR0cHM6Ly9naXRodWIuY29tL2RzLXNsL2ludHJvMnIvYmxvYi9tYWluL2RvY3MvZ2VzMDAxL2RlbW9ncmFwaHkuUm1kKV0KCiAgICAtICAg5Lq65Y+j44OH44O844K/44Gv5Z+65pys55qE44Gn44CB5Zu944Gu5YCk44GL44KJ5YCL5Lq644Gu5YCk44KS5rGC44KB44Gf44KK44CB5LuW44Gu5Zu944Go5q+U6LyD44GX44KE44GZ44GE5Ymy5ZCI44GL44KJ5a6f6Zqb44Gu5pWw44KS5rGC44KB44KL44Gq44Gp44Gr5b+F6aCICgozLiAg44K444OL5oyH5pWw44GK44KI44Gz5omA5b6X5YiG5biDCgogICAgLSAgIOOCuOODi+aMh+aVsO+8iEdpbmnvvIksIOaJgOW+l+OBruS4i+S9jTEwJSwgMjAlLCAyMCUtNDAlLCA0MCUtNjAlLCA2MCUtODAlLCA4MCXku6XkuIosIDkwJeS7peS4igoKICAgIC0gICAxLzkg44K444OL44Gj44Gm5L2V77yB77yfIFtbUiBOb3RlYm9va10oaHR0cHM6Ly9kcy1zbC5naXRodWIuaW8vaW50cm8yci9nZXMwMDEvd2hhdF9pc19naW5pLm5iLmh0bWwpXSwgW1tSbWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9kcy1zbC9pbnRybzJyL2Jsb2IvbWFpbi9kb2NzL2dlczAwMS93aGF0X2lzX2dpbmkuUm1kKV0KCiAgICAtICAgMS85IOOCuOODi+aMh+aVsOOBqOaJgOW+l+WIhuW4gyBbW1IgTm90ZWJvb2tdKGh0dHBzOi8vZHMtc2wuZ2l0aHViLmlvL2ludHJvMnIvZ2VzMDAxL2dpbmkubmIuaHRtbCldLCBbW1JtZF0oaHR0cHM6Ly9naXRodWIuY29tL2RzLXNsL2ludHJvMnIvYmxvYi9tYWluL2RvY3MvZ2VzMDAxL2dpbmkuUm1kKV3jgIDvvIjlj4LogIMxL+WPguiAgzLku5ggW1tSIE5vdGVib29rXShodHRwczovL2RzLXNsLmdpdGh1Yi5pby9pbnRybzJyL2dlczAwMS9naW5pX2xvbmcubmIuaHRtbCld77yJCgogICAgLSAgIOWbveOBruS4reOBp+OBruaJgOW+l+WIhuW4g+OCkuimi+OAgeOBi+OBpOaJgOW+l+WIhumFjeOBruWFrOW5s+OBleOCkuS4gOOBpOOBruaMh+aome+8iOOCuOODi+aMh+aVsO+8ieOBp+ihqOOBmeOBk+OBqOOBq+OCiOOCiuOAgeavlOi8g+OCguWPr+iDveOBq+OBquOBo+OBn+OBjOOAgealteW6puOBq+iyp+WbsOOBquOBsuOBqOOBjOOBqeOBruOBkOOCieOBhOOBhOOCi+OBruOBi+OBr+OCj+OBi+OCieOBquOBhOOAggoKIyMg6LKn5Zuw6ICF546HCgotICAg55Sf5rS744GZ44KL44Gf44KB44Gu5Z+65pys55qE44OL44O844K644KS6LOE44GG44Gf44KB44Gr5b+F6KaB44Go44Gd44KM44Ge44KM44Gu5Zu944GM6ICD44GI44KL5Z+65rqW44KS5rqA44Gf44GX44Gm44GE44Gq44GE5Lq65Y+j44Gu5Ymy5ZCICgogICAgLSAgIFBvdmVydHkgaGVhZGNvdW50IHJhdGlvIGF0IG5hdGlvbmFsIHBvdmVydHkgbGluZXMgKCUgb2YgcG9wdWxhdGlvbinvvJpTSS5QT1YuTkFIQyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TSS5QT1YuTkFIQyldCgogICAgLSAgIOaXpeacrOOBr++8nyBbW1dpa2lwZWRpYV0oaHR0cHM6Ly9qYS53aWtpcGVkaWEub3JnL3dpa2kvJUU2JTk3JUE1JUU2JTlDJUFDJUUzJTgxJUFFJUU4JUIyJUE3JUU1JTlCJUIwKV0KCi0gICBcJDIuMTUv5pelIChcJDY1LjQv5pyILCA3ODUv5bm0KSwgXCQzLjY177yIXCQxMTEuMC/mnIgsIFwkMSwzMzIv5bm077yJLCBcJDYuODXvvIhcJDIwOC40L+aciCwgXCQyLDUwMC/lubTvvIkKCiAgICAtICAgUG92ZXJ0eSBoZWFkY291bnQgcmF0aW8gYXQgXCQyLjE1IGEgZGF5ICgyMDE3IFBQUCkgKCUgb2YgcG9wdWxhdGlvbinvvJpTSS5QT1YuRERBWSBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TSS5QT1YuRERBWSldCgogICAgLSAgIFBvdmVydHkgaGVhZGNvdW50IHJhdGlvIGF0IFwkMy42NSBhIGRheSAoMjAxNyBQUFApICglIG9mIHBvcHVsYXRpb24p77yaU0kuUE9WLkxNSUMgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0kuUE9WLkxNSUMpXQoKICAgIC0gICBQb3ZlcnR5IGhlYWRjb3VudCByYXRpbyBhdCBcJDYuODUgYSBkYXkgKDIwMTcgUFBQKSAoJSBvZiBwb3B1bGF0aW9uKe+8mlNJLlBPVi5VTUlDIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NJLlBPVi5VTUlDKV0KCiMjIyDmupblgpkKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShXREkpCmBgYAoKIyMjIOODh+ODvOOCv+OBruiqreOBv+i+vOOBv++8iGltcG9ydGluZ++8iQoK6L+95Yqg5oOF5aCx77yI5Zyw5Z+f44O75omA5b6X44Os44OZ44Or77yJ44KS6Kqt44G/6L6844G/44Gf44GE44Gu44Gn44CBZXh0cmE9VFJVRSDjgajjgZfjgabjgYLjgorjgb7jgZnjgIIKCioqKuacgOWIneOBru+8keWbnuebruOBr+OAgeOBi+OBquOCieOBmuWun+ihjOOBl+OBpuOBj+OBoOOBleOBhOOAgioqKgoKYGBge3IgZXZhbD1GQUxTRX0KZGZfcG92ZXJ0eV9yYXRlIDwtIFdESSgKICBpbmRpY2F0b3IgPSBjKHJhdGlvID0gIlNJLlBPVi5OQUhDIiwKICAgICAgICAgICAgICAgIHVuZGVyXzIuMTUgPSAiU0kuUE9WLkREQVkiLAogICAgICAgICAgICAgICAgdW5kZXJfMy42NSA9ICJTSS5QT1YuTE1JQyIsCiAgICAgICAgICAgICAgICB1bmRlcl82Ljg1ID0gIlNJLlBPVi5VTUlDIiksCiAgZXh0cmEgPSBUUlVFKQpgYGAKCiMjIyMg5L+d5a2Y44Go6Kqt44G/6L6844G/CgrvvJLlm57nm67jgYvjgonjga/jgIFgZGF0YWAg44GL44KJ6Kqt44G/6L6844KB44KL44KI44GG44Gr44GX44Gm44GK44GN44G+44GZ44CCCgoqKirmnIDliJ3jga7vvJHlm57nm67jga/jgIHjgYvjgarjgonjgZrlrp/ooYzjgZfjgabjgY/jgaDjgZXjgYTjgIIqKioKCmBgYHtyIGV2YWw9RkFMU0V9CndyaXRlX2NzdihkZl9wb3ZlcnR5X3JhdGUsICJkYXRhL3BvdmVydHlfcmF0ZS5jc3YiKQpgYGAKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGUgPC0gcmVhZF9jc3YoImRhdGEvcG92ZXJ0eV9yYXRlLmNzdiIpCmBgYAoKIyMjIOODh+ODvOOCv+OCkuimi+OBpuOBv+OCiOOBhiAodmlld2luZykKCmBkZl9wb3ZlcnR5X3JhdGVgIOOBvuOBn+OBr+OAgWBoZWFkKGRmX3BvdmVydHlfcmF0ZSlgIOOBqOOAgWBzdHIoZGZfcG92ZXJ0eV9yYXRlKWAKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGUKYGBgCgpgYGB7cn0Kc3RyKGRmX3BvdmVydHlfcmF0ZSkKYGBgCgojIyMg5aSJ5pWw44Gu6YG45oqe77yIc2VsZWN0aW5n77yJCgrliKnnlKjjgZfjgarjgYTlpInmlbDjgoLjgYLjgovjga7jgacgc2VsZWN0IOOCkuS9v+OBo+OBpuWkieaVsOOCkua4m+OCieOBl+OBvuOBmeOAguimi+OChOOBmeOBhOOCiOOBhuOBq+OAgWB1bmRlcl8yLjE1YCDjgYwgTkEg44Gu44KC44Gu44Gv44CB5YmK6Zmk44GX44Gm44GC44KK44G+44GZ44CCCgpgYGB7cn0KZGZfcG92ZXJ0eV9yYXRlX3NlbGVjdGVkIDwtIGRmX3BvdmVydHlfcmF0ZSB8PiBkcm9wX25hKHVuZGVyXzIuMTUpIHw+CiAgc2VsZWN0KGNvdW50cnksIHllYXIsIHJhdGlvLCB1bmRlcl8yLjE1LCB1bmRlcl8zLjY1LCB1bmRlcl82Ljg1LCByZWdpb24pCmRmX3BvdmVydHlfcmF0ZV9zZWxlY3RlZCAKYGBgCgoqKue3tOe/kuOAgOacgOW+jOOBq+WwkeOBl+WKoOOBiOOCi+OBqOaXpeacrOOBq+OBpOOBhOOBpuimi+OCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAguOBqeOBhuOBl+OBvuOBmeOBi+OAgioqCgpgYGB7cn0KZGZfcG92ZXJ0eV9yYXRlX3NlbGVjdGVkCmBgYAoKIyMjIOWkieW9ou+8iFdpZGUgdG8gTG9uZyBEYXRh77yJCgrlm5vjgaTjga7mjIfmqJnjgpLlkIzmmYLjgavjgYTjgY/jgaTjgYvpgbjmip7jgZfmr5TovIPjgZfjgZ/jgYTjga7jgafjgIHkuIDjgaTjga7liJfvvIjlpInmlbDvvInjgavjgarjgonjgbnjgZ/jgIHnuKbplbfjg4fjg7zjgr/vvIhsb25nIGRhdGHvvInjgoLkvZzmiJDjgZfjgabjgYrjgY3jgb7jgZnjgIIKCmBwaXZvdF9sb25nZXIocmF0aW86dW5kZXJfNi44NSwgbmFtZXNfdG8gPSAibGV2ZWwiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKWAKCuOBk+OBk+OBp+OBr+OAgWByYXRpb2Ag44GL44KJIGB1bmRlcl82Ljg1YCDjgpLjgIFgbGV2ZWxgIOOBqOOBhOOBhuWQjeWJjeOBruWIl+OBq+OBquOCieOBueOAgeWApOOCkiBgdmFsdWVgIOOBqOOBhOOBhuWIl+OBq+S4puOBueOCi+OCiOOBhuOBq+OBl+OBpuOBguOCiuOBvuOBmeOAggoK56K66KqN44GZ44KL44Go44GN44Gv44CBdmFsdWUg44GMIE5BIOOBruOCguOBruOBr+mZpOOBjeOAgWNvdW50cnkg44Go44CBaXNvMmMg44Go44CBbGV2ZWwg44GoIHZhbHVlIOOBrumDqOWIhuOBoOOBkeWPluOCiuWHuuOBl+OBpueiuuiqjeOBl+OBpuOBhOOBvuOBmeOAggoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIDwtIGRmX3BvdmVydHlfcmF0ZV9zZWxlY3RlZCB8PiAKICBwaXZvdF9sb25nZXIocmF0aW86dW5kZXJfNi44NSwgbmFtZXNfdG8gPSAibGV2ZWwiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiBkcm9wX25hKHZhbHVlKSB8PiBzZWxlY3QoY291bnRyeSwgbGV2ZWwsIHZhbHVlLCByZWdpb24pCmBgYAoKIyMjIOW5tOavjuOBruODh+ODvOOCv+OBruaVsOOBrueiuuiqje+8iG51bWJlciBvZiBkYXRhIGluIGVhY2ggeWVhcu+8iQoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIHw+IGRyb3BfbmEodmFsdWUpIHw+IAogIGdyb3VwX2J5KHllYXIsIGxldmVsKSB8PiBzdW1tYXJpemUobiA9IG4oKSkgfD4gYXJyYW5nZShkZXNjKHllYXIpKQpgYGAKCioq6ICD5a+f77yaKirjgZ3jgozjgZ7jgozjga7lm73jgafjga7osqflm7Dnjofjga7jg4fjg7zjgr/vvIhyYXRpb++8ieOBjCDlpJrjgYTloLTlkIjjgoLjgIHntbblr77nmoTjgarosqflm7DnjofjgYzlpJrjgYTloLTlkIjjgoLjgYLjgovjgojjgYbjgaDjgYzjgIHmjIfmqJnjgZTjgajjgavpm4boqIjjgZfjgabjgb/jgovjgIIKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiBmaWx0ZXIoeWVhciAlaW4lIGMoMTk2MCwgMTk3MCwgMTk4MCwgMTk5MCwgMjAwMCwgMjAxMCwgMjAyMCkpIHw+IGRyb3BfbmEodmFsdWUpIHw+IGdyb3VwX2J5KHllYXIsIGxldmVsKSB8PiBzdW1tYXJpemUobiA9IG4oKSkgfD4KICBnZ3Bsb3QoYWVzKGFzLmNoYXJhY3Rlcih5ZWFyKSwgbiwgZmlsbCA9IGxldmVsKSkgKyBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbCA9ICJibGFjayIsIGxpbmV3aWRodCA9IDAuMSkgKyBsYWJzKHggPSAieWVhciIsIHkgPSAibnVtYmVyIG9mIGRhdGEiKQpgYGAKCioq6ICD5a+f77yaKirjgZ3jgozjgZ7jgozjga7lm73jgafjga7osqflm7Dnjofjga7jg4fjg7zjgr/vvIhyYXRpb++8ieOBr+OAgTIwMDDlubTku6XpmY3jgIF1bmRlcl8yLjE1LCB1bmRlcl8zLjY1LCB1bmRlcl82Ljg1IOOBr+OAgeWQjOOBmOaVsOOBmuOBpOOBguOCi+OBruOBp+OAgeWQjOaZguOBq+ODh+ODvOOCv+OCkumbhuOCgeOBpuOBhOOCi+OBqOaAneOCj+OCjOOCi+OAggoKIyMjIOS4lueVjOOBqOOCteODj+ODqeeggua8oOS7peWNl+OBruOCouODleODquOCq+OBruODh+ODvOOCv+OBrue1jOW5tOWkieWMlgoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIHw+IAogIGZpbHRlcihjb3VudHJ5ICVpbiUgYygiV29ybGQiLCAiU3ViLVNhaGFyYW4gQWZyaWNhIikpIHw+IGRyb3BfbmEoKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGxldmVsLCBsaW5ldHlwZSA9IGNvdW50cnkpKSArIGdlb21fbGluZSgpCmBgYAoKKirogIPlr5/vvJoqKlN1Yi1TYWhhcmFuIEFmcmljYSDjga7jg4fjg7zjgr/jga/jgarjgYTjgojjgYbjgafjgZnjgILjgZ/jgZfjgYvjgavjgIFyYXRpbyDjga/jgIHlm73jgZTjgajjgavmsbrjgoHjgovjgoLjga7jgafjgZnjgYvjgonjgIHlnLDln5/jga7loLTlkIjjgavjga/jgIFyYXRpbyDjga7lgKTjga/jgarjgYTjga7jgafjgZfjgofjgYbjgIIKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiBmaWx0ZXIoeWVhciAlaW4lIGMoMjAwMCwgMjAxMCwgMjAyMCkpIHw+IGRyb3BfbmEodmFsdWUpIHw+IAogIGZpbHRlcihyZWdpb24gPT0gIkFnZ3JlZ2F0ZXMiKSB8PiBmaWx0ZXIobGV2ZWwgJWluJSBjKCJyYXRpbyIsICJ1bmRlcl8yLjE1IikpIHw+IGdyb3VwX2J5KGNvdW50cnksIHllYXIsIGxldmVsKSB8PiBzdW1tYXJpemUobiA9IG4oKSkKYGBgCgpTdWIgU2FoYXJhbiBBZnJpY2Eg44Gv44OH44O844K/44Gv44GC44KK44G+44Gb44KT44GM44CB57Wx6KiI55qE44Gr5Yem55CG44GX44Gm77yI5bmz5Z2H44Gu44KI44GG44Gq44KC44Gu44KS5Y+W44Gj44Gm77yJ6KGo56S644GZ44KL44GT44Go44Gv5Y+v6IO944Gn44GZ44CCCgpsb2VzcyAoTG9jYWwgUG9seW5vbWlhbCBSZWdyZXNzaW9uKSDjga/jgIHlsJHjgZfjgZrjgaTljLrliIfjgaPjgabjgIHlpJrpoIXlvI/ov5HkvLzjgpLkvb/jgaPjgabjgYTjgovjgYTjgb7jgZnjgILjgZ3jgZPjgafjgIHjg57jgqTjg4rjgrnjga7lgKTjgoLlh7rjgabjgY3jgabjgZfjgb7jgaPjgabjgYTjgb7jgZnjgILjgZfjgYvjgZfjgIHlpKfkvZPjga7lgr7lkJHjgpLjgb/jgovjgZPjgajjga/jgafjgY3jgb7jgZnjgILkuIrjgafopovjgZ/jg4fjg7zjgr/jga7mlbDjgYvjgonjgIExOTky5bm05Lul6ZmN44Gr44GX44Gm44GK44GP44Gu44GM6Imv44GE44Gn44GX44KH44GG44CCCgpgYGB7cn0KZGZfcG92ZXJ0eV9yYXRlX2xvbmcgfD4gZHJvcF9uYSh2YWx1ZSkgfD4gZmlsdGVyKCFpcy5uYShyZWdpb24pLCByZWdpb24gIT0gIkFnZ3JlZ2F0ZXMiKSB8PgogIGZpbHRlcihsZXZlbCA9PSAidW5kZXJfMi4xNSIpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sID0gcmVnaW9uKSkgKyBnZW9tX3Ntb290aChmb3JtdWxhID0gJ3kgfiB4Jywgc2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KZGZfcG92ZXJ0eV9yYXRlX2xvbmcgfD4gZHJvcF9uYSh2YWx1ZSkgfD4gCiAgZmlsdGVyKCFpcy5uYShyZWdpb24pLCByZWdpb24gIT0gIkFnZ3JlZ2F0ZXMiLCB5ZWFyID4gMTk5MSkgfD4KICBmaWx0ZXIobGV2ZWwgPT0gInVuZGVyXzIuMTUiKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IHJlZ2lvbikpICsgZ2VvbV9zbW9vdGgoZm9ybXVsYSA9ICd5IH4geCcsIG1ldGhvZCA9ICdsb2VzcycsIHNlID0gRkFMU0UpICsgbGFicyh0aXRsZSA9ICJSZWdpb25hbGx5IGFnZ3JlZ2F0ZWQgcmF0aW8gdW5kZXIgMi4xNSBVU0QiKQpgYGAKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiBkcm9wX25hKHZhbHVlKSB8PiAKICBmaWx0ZXIoIWlzLm5hKHJlZ2lvbiksIHJlZ2lvbiAhPSAiQWdncmVnYXRlcyIsIHllYXIgPiAxOTkxKSB8PgogIGZpbHRlcihsZXZlbCAhPSAicmF0aW8iKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IHJlZ2lvbiwgbGluZXR5cGUgPSBsZXZlbCkpICsgZ2VvbV9zbW9vdGgoZm9ybXVsYSA9ICd5IH4geCcsIG1ldGhvZCA9ICdsb2VzcycsIHNlID0gRkFMU0UpICsgbGFicyh0aXRsZSA9ICJSZWdpb25hbGx5IGFnZ3JlZ2F0ZWQgcmF0aW8iKQpgYGAKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiBkcm9wX25hKHZhbHVlKSB8PiAKICBmaWx0ZXIoIWlzLm5hKHJlZ2lvbiksIHJlZ2lvbiA9PSAiU3ViLVNhaGFyYW4gQWZyaWNhIiwgeWVhciA+IDE5OTEpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sID0gbGV2ZWwpKSArIGdlb21fc21vb3RoKGZvcm11bGEgPSAneSB+IHgnLCBtZXRob2QgPSAnbG9lc3MnLCBzZSA9IFRSVUUpICsgbGFicyh0aXRsZSA9ICJTdWItU2FoYXJhbiByZWdpb24gYWdncmVnYXRlZCByYXRpbyIpCmBgYAoKIyMjIOOCteODj+ODqeeggua8oOS7peWNl++8iFN1Yi1TYWhhcmFuIEFmcmljYe+8iSDjga7lm73jga7jg4fjg7zjgr8KCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiAgZHJvcF9uYSh2YWx1ZSkgfD4gCiAgZmlsdGVyKHJlZ2lvbiA9PSAiU3ViLVNhaGFyYW4gQWZyaWNhIikgfD4gZ3JvdXBfYnkoY291bnRyeSwgbGV2ZWwpIHw+IAogIHN1bW1hcml6ZShuID0gbigpKQpgYGAKCiMjIOOCouODleODquOCq+WNl+mDqO+8leOCq+WbveOBruWIhuaekAoKIyMjIOWbveOBruODquOCueODiOOBruioreWumgoKU09VVEhfQUZSSUNBX0ZJVkUg44Gr44CBU291dGggQWZyaWNhLCBOYW1pYmlhLCBFc3dhdGluaSwgQm90c3dhbmEsIExlc290aG8g44KS6Kit5a6aCgpgYGB7cn0KU09VVEhfQUZSSUNBX0ZJVkUgPC0gYygiU291dGggQWZyaWNhIiwgIk5hbWliaWEiLCAiRXN3YXRpbmkiLCAiQm90c3dhbmEiLCAiTGVzb3RobyIpCmBgYAoKIyMjIO+8leOCq+WbveOBruODh+ODvOOCv+OCkueiuuiqjQoKYGRmX3BvdmVydHlfcmF0ZV9zZWxlY3RlZGAg44Go44CBYGRmX3BvdmVydHlfcmF0ZV9sb25nYCDjgavjgaTjgYTjgabjgIHjgqLjg5Xjg6rjgqvljZfpg6jvvJXjgqvlm73jga7jg4fjg7zjgr/jgpLnorroqo0KCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfc2VsZWN0ZWQgfD4gZmlsdGVyKGNvdW50cnkgJWluJSBTT1VUSF9BRlJJQ0FfRklWRSkKYGBgCgpgYGB7cn0KZGZfcG92ZXJ0eV9yYXRlX2xvbmcgfD4gZmlsdGVyKGNvdW50cnkgJWluJSBTT1VUSF9BRlJJQ0FfRklWRSkKYGBgCgojIyMg5ZCE6LKn5Zuw546H44KS5oqY44KM57ea44Kw44Op44OV44Gn5o+P44GE44Gm44G/44KLCgojIyMjIOWNl+OCouODleODquOCq+OBq+OBpOOBhOOBpgoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIHw+IAogIGZpbHRlcihjb3VudHJ5ID09ICJTb3V0aCBBZnJpY2EiKSB8PiBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGxldmVsKSkgKyBnZW9tX2xpbmUoKQpgYGAKCioq6ICD5a+f77yaKioyMDAw5bm044GL44KJMjAwOOW5tOOBlOOCjeOBvuOBp+a4m+WwkeOBl+OBpuOBhOOCi+OBjOOAgeOBneOBruW+jOOAgeS4iuaYh+WCvuWQkeOBjOimi+OCieOCjOOCi+OAggoKIyMjIyDvvJXjgqvlm73lkIzmmYLjgasKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiAKICBmaWx0ZXIoY291bnRyeSAlaW4lIFNPVVRIX0FGUklDQV9GSVZFKSB8PiBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGNvdW50cnksIGxpbmV0eXBlID0gbGV2ZWwpKSArIGdlb21fbGluZSgpCmBgYAoKKirogIPlr5/vvJoqKuikh+mbkeOBp+OCj+OBi+OCiuOChOOBmeOBhOOBqOOBr+OBhOOBiOOBquOBhAoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIHw+IAogIGZpbHRlcihjb3VudHJ5ICVpbiUgU09VVEhfQUZSSUNBX0ZJVkUpIHw+IGRyb3BfbmEodmFsdWUpIHw+IGZpbHRlcihsZXZlbCAhPSAicmF0aW8iKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGNvdW50cnksIGxpbmV0eXBlID0gbGV2ZWwpKSArIGdlb21fbGluZSgpCmBgYAoKKirogIPlr5/vvJoqKuWbveOBlOOBqOOBq+axuuOCgeOBn+iyp+WbsOeOh+OCkuOBruOBnuOBhOOBpuOBv+OBn+OAguWkmuWwkeaUueWWhOOBl+OBn+OAguOBl+OBi+OBl+OAgeOBguOBqOOBr+WlveOBv+OAggoKIyMjIO+8leOCq+WbveOBruacgOaWsOOBruODh+ODvOOCvwoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9zZWxlY3RlZCB8PiAKICBmaWx0ZXIoY291bnRyeSAlaW4lIFNPVVRIX0FGUklDQV9GSVZFKSB8PgogIGRyb3BfbmEodW5kZXJfMi4xNSkgfD4gZ3JvdXBfYnkoY291bnRyeSkgfD4gZmlsdGVyKHllYXIgPT0gbWF4KHllYXIpKSB8PiAKICBzZWxlY3QoY291bnRyeSwgeWVhciwgcmF0aW86dW5kZXJfNi44NSkKYGBgCgoqKuiAg+Wvn++8mioq5q+O5bm044OH44O844K/44GM44GC44KL44KP44GR44Gn44Gv44Gq44GE44Gu44Gn44CB44Gd44KM44Ge44Gu5Zu944GU44Go44Gr5pyA5paw44Gu44KC44Gu44KS6KaL44KL44GT44Go44Go44GZ44KLCgojIyMjIOWNl+OCouODleODquOCq++8leOCq+WbveOBruiyp+WbsOW6puOBlOOBqOOBruS6uuWPo+avlAoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIHw+IAogIGZpbHRlcihjb3VudHJ5ICVpbiUgU09VVEhfQUZSSUNBX0ZJVkUpIHw+CiAgZHJvcF9uYSh2YWx1ZSkgfD4gZ3JvdXBfYnkoY291bnRyeSkgfD4gZmlsdGVyKHllYXIgPT0gbWF4KHllYXIpKSB8PgogIGdncGxvdChhZXMoY291bnRyeSwgdmFsdWUsIGZpbGwgPSBsZXZlbCkpICsgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiLCBjb2wgPSAiYmxhY2siLCBsaW5ld2lkdGggPSAwLjEpICsgCiAgbGFicyh0aXRsZSA9ICJQb3ZlcnQgTGV2ZWwgUmF0aW8gb2YgRml2ZSBDb3VudHJpZXMiLCBzdWJ0aXRsZSA9ICJCb3Rzd2FuYSBpbiAyMDE1LCBFc3dhdGluaSBpbiAyMDE2ICxMZXNvdG8gaW4gMjAxNywgTmFtaWJpYSBpbiAyMDE1IFxuYW5kIFNvdXRoIEFmcmljYSBpbiAyMDE0IikKYGBgCgojIyMg5LuW44Gu5Zu944Gn44Gu5ZCM5qeY44Gu5YiG5p6QCgojIyMjIOOBhOOBj+OBpOOBi+OBruWbveOBruiyp+WbsOW6puOBlOOBqOOBruS6uuWPo+avlAoK44Gd44KM44Ge44KM44Gu5Zu944Gu44CB5pyA44KC5paw44GX44GE44OH44O844K/44KS55So44GE44KL44KC44Gu44Go44GX44G+44GZ44CCCgoqKue3tOe/kiDmrKHjga4gYFBPVl9DT1VOVFJJRVNfWU9VUl9DSE9JQ0VgIOOBrumDqOWIhuOCkuWkieabtOOBl+OBpuOAgeOBhOOBj+OBpOOBi+OBruWbveOBruiyp+WbsOiAheOBruWJsuWQiOOBruihqOOBqOOCsOODqeODleOCkuS9nOaIkOOBl+OBpuOBj+OBoOOBleOBhOOAgioqCgpgUE9WX0NPVU5UUklFU19ZT1VSX0NIT0lDRSA8LSBjKCJNeWFubWFyIiwgIktlbnlhIiwgIkNoaW5hIiwgIkluZGlhIiwgIkluZG9uZXNpYSIpYAoKYGBge3J9ClBPVl9DT1VOVFJJRVNfWU9VUl9DSE9JQ0UgPC0gYygiTXlhbm1hciIsICJLZW55YSIsICJDaGluYSIsICJJbmRpYSIsICJJbmRvbmVzaWEiKQpkZl9wb3ZlcnR5X3JhdGVfc2VsZWN0ZWQgfD4gCiAgZmlsdGVyKGNvdW50cnkgJWluJSBQT1ZfQ09VTlRSSUVTX1lPVVJfQ0hPSUNFKSB8PgogIGRyb3BfbmEocmF0aW8pIHw+IGdyb3VwX2J5KGNvdW50cnkpIHw+IGZpbHRlcih5ZWFyID09IG1heCh5ZWFyKSkgfD4gCiAgc2VsZWN0KGNvdW50cnksIHllYXIsIHJhdGlvOnVuZGVyXzYuODUpCmBgYAoKIyMjIOWQhOWbveOBruWQhOiyp+WbsOODrOODmeODq+OCkuihqOOBl+OBn+ajkuOCsOODqeODlQoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIHw+IAogIGZpbHRlcihjb3VudHJ5ICVpbiUgUE9WX0NPVU5UUklFU19ZT1VSX0NIT0lDRSkgfD4KICBkcm9wX25hKHZhbHVlKSB8PiBncm91cF9ieShjb3VudHJ5KSB8PiBmaWx0ZXIoeWVhciA9PSBtYXgoeWVhcikpIHw+CiAgZ2dwbG90KGFlcyhjb3VudHJ5LCB2YWx1ZSwgZmlsbCA9IGxldmVsKSkgKyBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbCA9ICJibGFjayIsIGxpbmV3aWR0aCA9IDAuMSkgKyAKICBsYWJzKHRpdGxlID0gIlBvdmVydHkgTGV2ZWwgUmF0aW8gb2YgQ291bnRyaWVzIiwgc3VidGl0bGUgPSAiVXNpbmcgdGhlIG1vc3QgcmVjZW50IGRhdGEiKQpgYGAKCiMjIyDmipjjgoznt5rjgrDjg6njg5Xjgavjgojjgovmr5TovIMKCiMjIyMg5LiA44Gk44Gu5Zu944Gu44G/44Gr44Gk44GE44Gm44CB44GZ44G544Gm44Gu6LKn5Zuw546H44KS5q+U6LyDCgrnt5rjgpLpgJrluLjjgojjgorlpKrjgY/jgZfjgabjgYTjgb7jgZnjgILliJ3mnJ/lgKTjga/jgIFHZW9tTGluZVwkZGVmYXVsdF9hZXMg44Gn44KP44GL44KK44G+44GZ44CCCgpgYGB7cn0KZGZfcG92ZXJ0eV9yYXRlX2xvbmcgfD4gZmlsdGVyKGNvdW50cnkgPT0gIkluZGlhIikgfD4KICBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGxldmVsKSkgKyBnZW9tX2xpbmUobGluZXdpZHRoID0gMSkgKwogIGxhYnModGl0bGUgPSAiUG92ZXJ0eSBSYXRpbyBvZiBJbmRpYSIpCmBgYAoKIyMjIyDkuozjgaTjga7lm73jgavjgaTjgYTjgabjga7osqflm7DnjofjgpLmr5TovIMKCmBgYHtyfQpkZl9wb3ZlcnR5X3JhdGVfbG9uZyB8PiBmaWx0ZXIoY291bnRyeSAlaW4lIGMoIkNoaW5hIiwgIkluZGlhIikpIHw+CiAgZHJvcF9uYSh2YWx1ZSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2wgPSBjb3VudHJ5LCBsaW5ldHlwZSA9IGxldmVsKSkgKyBnZW9tX2xpbmUobGluZXdpZHRoID0gMSkgKwogIGxhYnModGl0bGUgPSAiUG92ZXJ0eSBSYXRpbyBvZiBDaGluYSBhbmQgSW5kaWEiKQpgYGAKCiMjIyAqKuaMh+aomSB1bmRlcl8yLjE1IOOBruWIhuaekCoqCgojIyMjIOaKmOe3muOCsOODqeODlQoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9zZWxlY3RlZCB8PiBmaWx0ZXIoY291bnRyeSAlaW4lIFBPVl9DT1VOVFJJRVNfWU9VUl9DSE9JQ0UpIHw+IGRyb3BfbmEodW5kZXJfMi4xNSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHVuZGVyXzIuMTUsIGNvbCA9IGNvdW50cnkpKSArIGdlb21fbGluZSgpCmBgYAoKIyMjIEhpc3RvZ3JhbQoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9zZWxlY3RlZCB8PiBkcm9wX25hKHVuZGVyXzIuMTUpIHw+IGZpbHRlcihyZWdpb24gIT0gIkFnZ3JlZ2F0ZXMiKSB8PgogIGZpbHRlcih1bmRlcl8yLjE1ID4gMjUpIHw+CiAgZ2dwbG90KGFlcyh1bmRlcl8yLjE1LCBmaWxsID0gcmVnaW9uKSkgKyBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMTUsIGNvbCA9ICJibGFjayIsIGxpbmV3aWR0aCA9IDAuMSkKYGBgCgojIyDkvZzmpa3miYvpoIbjgajjgb7jgajjgoEKCi0gICDjg5Hjg4PjgrHjg7zjgrjvvIhQYWNrYWdl77yJ44Gu5Yip55So77yaCgogICAgLSAgIOOCpOODs+OCueODiOODvOODq++8iGluc3RhbGxhdGlvbu+8ie+8mlRvb2xzIFw+IEluc3RhbGwgUGFja2FnZXMKCiAgICAtICAg44Ot44O844OJ77yIbG9hZO+8iWBsaWJyYXJ5KHRpZHl2ZXJzZSk7IGxpYnJhcnkoV0RJKTsgbGlicmFyeShzaG93dGV4dCk7IGxpYnJhcnkoRGVzY1Rvb2xzKWAKCi0gICDjg4fjg7zjgr/jga7lj5blvpfvvJpgV0RJKGluZGljYXRvciA9IGMocG9wID0gIlNQLlBPUC5UT1RMIikpYAoKICAgIC0gICBgV0RJKGluZGljYXRvciA9YGBjKHJhdGlvID0gIlNJLlBPVi5OQUhDIiwgdW5kZXJfMi4xNSA9ICJTSS5QT1YuRERBWSIsIHVuZGVyXzMuNjUgPSAiU0kuUE9WLkxNSUMiLCB1bmRlcl82Ljg1ID0gIlNJLlBPVi5VTUlDIiksIGV4dHJhID0gVFJVRSlgCgogICAgLSAgIGRhdGEg44Gr5pu444GN5Ye644GX44CB44Gd44GT44GL44KJ6Kqt44G/6L6844KA44Go6Imv44GE44CCCgogICAgICAgIC0gICBgd3JpdGVfY3N2KGRmX3BvdmVydHlfcmF0ZSwgImRhdGEvcG92ZXJ0eV9yYXRlLmNzdiIpYAoKICAgICAgICAtICAgYHJlYWRfY3N2KCJkYXRhL3BvdmVydHlfcmF0ZS5jc3YiKWAKCi0gICDjg4fjg7zjgr/jgpLopovjgovvvJpgZGZfcG92ZXJ0eV9yYXRlYCAsIGBoZWFkKGRmX3BvdmVydHlfcmF0ZSlgLCBgc3RyKGRmX3BvdmVydHlfcmF0ZSlgCgotICAg5aSJ5pWw44Gu6YG45oqe77yaYHNlbGVjdChjb3VudHJ5LCB5ZWFyLCByYXRpbywgdW5kZXJfMi4xNSwgdW5kZXJfMy42NSwgdW5kZXJfNi44NSwgcmVnaW9uKWAKCi0gICDjg4fjg7zjgr/jga7lpInlvaLvvIhMb25nIGRhdGHvvInvvJpgcGl2b3RfbG9uZ2VyKHJhdGlvOnVuZGVyXzYuODUsIG5hbWVzX3RvID0gImxldmVsIiwgdmFsdWVzX3RvID0gInZhbHVlIilgCgotICAg54m55a6a44Gu6KGM44Gu5Y+W5b6X77yaYGZpbHRlcigpLCBkcm9wX25hKCksIGRpc3RpbmN0KClgCgotICAg6KGM44Gu6aCG55Wq44Gu5Lim44Gz5pu/44GI77yaYGFycmFuZ2UoZGVzYyh5ZWFyKSlgCgotICAg44Kw44Or44O844OX5YiG44GR77yaYGdyb3VwX2J5KClgICwgYGdyb3VwX2J5KHllYXIsIGxldmVsKSB8PiBzdW1tYXJpemUobiA9IG4oKSlgCgojIyMg5Y+v6KaW5YyWCgotICAg5oqY44KM57ea44Kw44Op44OVCgogICAgLSAgIGBnZ3Bsb3QoYWVzKHggPSB5ZWFyLCB5ID0gdW5kZXJfMi4xNSkgKyBnZW9tX2xpbmUoKWAKCiAgICAtICAgYGdncGxvdChhZXMoeCA9IHllYXIsIHkgPSB1bmRlcl8yLjE1LCBjb2wgPSBjb3VudHJ5KSArIGdlb21fbGluZSgpYAoKLSAgIOODkuOCueODiOOCsOODqeODoO+8iOW6puaVsOWIhuW4g++8iQoKICAgIC0gICBgZ2dwbG90KGFlcyh1bmRlcl8yLjE1LCBmaWxsID0gcmVnaW9uKSkgKyBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMTUpYAoKLSAgIOajkuOCsOODqeODlQoKICAgIC0gICBgZ2dwbG90KGFlcyh5ZWFyKSkgKyBnZW9tX2JhcigpYAoKICAgIC0gICBgZ2dwbG90KGFlcyhsZXZlbHMsIHZhbHVlKSkgKyBnZW9tX2NvbCgpYAoKICAgIC0gICBgZ2dwbG90KGFlcyh4ID0gbGV2ZWxzLCB5ID0gdmFsdWUsIGZpbGwgPSBjb3VudHJ5KSkgKyBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpYAoKICAgIC0gICBgZ2dwbG90KGFlcyh4ID0gZ2luaSwgZmlsbCA9IHJlZ2lvbikpICsgZ2VvbV9oaXN0b2dyYW0oKWAKCi0gICDmlaPluIPlm7PvvIgr5Zue5biw55u057ea77yJCgogICAgLSAgIGBnZ3Bsb3QoYWVzKGdpbmksIDkwLTEwMCkpICsgZ2VvbV9wb2ludCgpYAoKICAgIC0gICBgZ2dwbG90KGFlcyhnaW5pLCA4MC0xMDApKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKGZvcm11bGEgPSAneSB+IHgnLCBtZXRob2QgPSAibG0iKWAKCioqKuW4uOOBq+OAgeiAg+Wvn+OAgeawl+OBpeOBhOOBn+OBk+OBqOOCkuOAgeiomOmMsuOBl+OBpuOBj+OBoOOBleOBhOOAgioqKgoKIyMg6Kqy6aGMCgrjg4fjg7zjgr/jga/jgIHkuIrjgafkvb/jgaPjgZ/kuozjgaTjga7jg4fjg7zjgr/jgpLkvb/jgYTjgb7jgZnjgIIKCi0gICBgZGZfcG92ZXJ0eV9yYXRlX3NlbGVjdGVkYCA6IHdpZGUg44OH44O844K/44Go6KiA44KP44KM44KL44KC44Gu44Gn44GZ44CC6LKn5Zuw546H77yIYHVuZGVyXzIuMTVg77yJ44Gu44OH44O844K/44KS5ZCr44G+44Gq44GE44KC44Gu44Gv5YmK6Zmk44GX44Gm44GC44KK44G+44GZ44CCCgotICAgYGRmX3BvdmVydHlfcmF0ZV9sb25nYCDvvJpsb25nIOODh+ODvOOCv+OBqOiogOOCj+OCjOOCi+OCguOBruOBp+OBmeOAggoKIyMjIOe3tOe/ku+8muODh+ODvOOCv+OBrueiuuiqjQoKMS4gIGBkZl9wb3ZlcnR5X3JhdGVfc2VsZWN0ZWRgIOOBqOOAgWBkZl9wb3ZlcnR5X3JhdGVfbG9uZ2Ag44KS6KaL44Gm44G/44G+44GX44KH44GG44CC44Gp44GG44GX44G+44GZ44GL44CCCgoqKkhpbnTvvJoqKuOBneOBruOBvuOBvuODh+ODvOOCv+OAgWhlYWQo44OH44O844K/KeOAgUVudmlyb25tZW50IOOBi+OCieOAgeODh+ODvOOCv+OCkumBuOaKngoKYGBge3J9CgpgYGAKCmBgYHtyfQoKYGBgCgoyLiAg5Y2X44Ki44Oh44Oq44Kr44Gn44CB44K444OL5oyH5pWw44GM5aSn44GN44GE44Gu44Gv44CB5Lul5LiL44Gu77yU44Gk44Gu5Zu944Gn44GZ44CCU3VyaW5hbWUsIEJlbGl6ZSwgQnJhemlsLCBDb2xvbWJpYeOAguOBneOCjOOCkuOAgUNIT1NFTl9HSU5JX0NPVU5UUklFUyDjgavku6PlhaXjgZfjgabjgY/jgaDjgZXjgYTjgIIKCioqSGludO+8muOAjCoqU09VVEhfQUZSSUNBX0ZJVkUg44Gr44CBU291dGggQWZyaWNhLCBOYW1pYmlhLCBFc3dhdGluaSwgQm90c3dhbmEsIExlc290aG8g44KS6Kit5a6a44CN44KS5Y+C54WnCgpgYGB7cn0KCmBgYAoKMy4gIGBkZl9wb3ZlcnR5X3JhdGVfc2VsZWN0ZWRg44Gu5Y2X44Ki44Oh44Oq44Kr77yU44Kr5Zu944Gu5pyA5paw44Gu44OH44O844K/44Gg44GR44KS6KGo56S644GX44Gm44G/44G+44GX44KH44GG44CCCgoqKkhpbnTvvJoqKlNPVVRIX0FGUklDQV9GSVZFIOOBruWgtOWQiOOBqeOBruOCiOOBhuOBq+OBl+OBn+OBi+iAg+OBiOOBpuOBv+OBvuOBl+OCh+OBhuOAggoKYGBge3J9CgpgYGAKCioq5rCX44Gl44GE44Gf44GT44GoKioKCi0gICAKCiMjIyDljZfjgqLjg6Hjg6rjgqvvvJTjgqvlm73jgavjgaTjgYTjgabjga7liIbmnpAKCjQuICDvvJTjgqvlm73jgIHjgZ3jgozjgZ7jgozjga7jgIHosqflm7Dnjofjga7lubTmrKHlpInljJbjgpLmipjjgoznt5rjgrDjg6njg5XjgavjgojjgorooajnpLoKCuS4i+OBr+OAgeODluODqeOCuOODq+OBq+OBpOOBhOOBpuOBruOCguOBruOBp+OBmeOBjOOAgeS7luOBru+8k+OCq+WbveOBp+OAgeODh+ODvOOCv+OBjOOBguOCi+OCguOBruOBq+OBpOOBhOOBpuOBr+OAgeWQjOanmOOBruOCsOODqeODleOCkuaPj+OBhOOBpuOBj+OBoOOBleOBhOOAggoKYGBge3J9CmRmX3BvdmVydHlfcmF0ZV9sb25nIHw+IGZpbHRlcihjb3VudHJ5ID09ICJCcmF6aWwiKSB8PiBkcm9wX25hKHZhbHVlKSB8PgogIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbCA9IGxldmVsKSkgKyBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJQb3ZlcnR5IFJhdGlvIG9mIEJyYXNpbCIpCmBgYAoKYGBge3J9CgpgYGAKCioq5rCX44Gl44GE44Gf44GT44GoKioKCi0gICAKCiMjIyMg5Y2X44Ki44Oh44Oq44Kr77yU44Kr5Zu944Gu6LKn5Zuw5bqm44GU44Go44Gu5Lq65Y+j5q+U44Gu5qOS44Kw44Op44OVCgo1LiAg6LKn5Zuw5bqm44GU44Go44Gu5Lq65Y+j5q+U44Gu5qOS44Kw44Op44OV44KS5o+P44GE44Gm44G/44G+44GX44KH44GG44CCCgpIaW50OiDljZfjgqLjg5Xjg6rjgqvvvJXjgqvlm73jga7osqflm7DluqbjgZTjgajjga7kurrlj6Pmr5Tjga7mo5LjgrDjg6njg5UKCmBgYHtyfQoKYGBgCgoqKuawl+OBpeOBhOOBn+OBk+OBqCoqCgotICAgCgojIyMg57e057+S77ya6LKn5Zuw5bqm44GU44Go44Gu5Lq65Y+j5q+UCgroqrLpoYzjgavjgYLjgosgMSDjgYvjgokgNS4KCuaPkOWHuuOBr+OBl+OBquOBj+OBpuiJr+OBhOOBp+OBmeOBjOOAgeOBnOOBsuWun+mam+OBq+aJi+OCkuWLleOBi+OBl+OBpuWun+ihjOOBl+OBpuOBj+OBoOOBleOBhOOAggoKIyMg5Y+C6ICD5paH54yuCgoxLiAg44CM44G/44KT44Gq44Gu44OH44O844K/44K144Kk44Ko44Oz44K5IC0gRGF0YSBTY2llbmNlIGZvciBBbGzjgI1bW+OBr+OBmOOCgeOBpuOBruODh+ODvOOCv+OCteOCpOOCqOODs+OCuV0oaHR0cHM6Ly9pY3UtaHN1enVraS5naXRodWIuaW8vZHM0YWovZmlyc3QtZXhhbXBsZS5odG1sI2ZpcnN0LWV4YW1wbGUpXQoKICAgIC0gICDlsI7lhaXjgajjgZfjgabjgIFHRFDvvIjlm73lhoXnt4/nlJ/nlKPvvInjga7jg4fjg7zjgr/jgpLkvb/jgaPjgaboqqzmmI7jgZfjgabjgYTjgb7jgZnjgIIKCjIuICBQb3NpdCBSZWNpcGVz77yI5penIFBvc2l0IFByaW1lcnPvvIk6IFRoZSBCYXNpY3Mg5a++6Kmx5Z6L44Gu5ryU57+S44K144Kk44OI44Gu5pyA5YidIFtbTGlua10oaHR0cHM6Ly9wb3NpdC5jbG91ZC9sZWFybi9yZWNpcGVzKV0KCjMuICBQb3NpdCBDaGVhdCBTaGVldC4g5pep6KaL6KGo44Gn44GZ44CC5Y2w5Yi344GX44Gm5L2/44GG44Gf44KB44Gr44CBUERGIOOCguaPkOS+m+OBl+OBpuOBhOOBvuOBmeOAgltbU2l0ZSBMaW5rXShodHRwczovL3JzdHVkaW8uZ2l0aHViLmlvL2NoZWF0c2hlZXRzLyldCgo0LiAgRGF0YUNhbXAgQ2hlYXQgU2hlZXQ6IFRpZHl2ZXJzZSBmb3IgQmlnaW5uZXJzLiDjg4fjg7zjgr/jgrXjgqTjgqjjg7Pjgrnjga7mlZnogrLjgpLjgZfjgabjgYTjgovkvJrnpL7jga7ml6nopovooajjga7kuIDjgaTjgafjgZnjgILln7rmnKzjgYznsKHljZjjgavjgb7jgajjgb7jgaPjgabjgYTjgb7jgZnjgIJbW0xpbmtdKGh0dHBzOi8vaW1hZ2VzLmRhdGFjYW1wLmNvbS9pbWFnZS91cGxvYWQvdjE2NzYzMDI2OTcvTWFya2V0aW5nL0Jsb2cvVGlkeXZlcnNlX0NoZWF0X1NoZWV0LnBkZildCg==