課題

以下の指標の中から、一つを選択して、データの概要(description)を記録し、データを WDI で取得し、以下の分析をする。

  1. 各年毎のデータの数の棒グラフ
  2. 日本のデータの年の降順での表示
  3. 経年変化を表す折れ線グラフ
    1. 日本
    2. 南部アフリカ関税同盟の5カ国
    3. 選択したいくつかの国
  4. データが十分ある最近の年の値のヒストグラム
  5. データが十分ある最近の年の値の10カ国の値の棒グラフ
    1. 値が大きい方から
    2. 値が小さい方から

それぞれについて考察(気づいたこと、疑問など)を記す

2023.1.27. 23:59 までに Moodle の演習の課題ボックスに提出したものについては、なるべく、早く見て、フィードバックを書きます。それ以降に提出されたものも見ますが、フィードバックは遅くなると思ってください。

データ

  1. Government expenditure on education, total (% of GDP):SE.XPD.TOTL.GD.ZS [Link] 変数名:ed_exp

  2. School enrollment, primary (% gross):SE.PRM.ENRR [Link] 変数名:primary

  3. School enrollment, secondary (% gross):SE.SEC.ENRR [Link] 変数名:secondary

  4. School enrollment, tertiary (% gross):SE.TER.ENRR [Link] 変数名:tertiary

  5. Mortality rate, under-5 (per 1,000 live births):SH.DYN.MORT [Link] 変数名:under5

  6. Incidence of HIV (% of uninfected population ages 15-49):SH.HIV.INCD.ZS [Link] 変数名:new_hiv

  7. School enrollment, primary and secondary (gross), gender parity index (GPI):SE.ENR.PRSC.FM.ZS [Link] 変数名:school_gpi

  8. Ratio of female to male labor force participation rate (%) (modeled ILO estimate):SL.TLF.CACT.FM.ZS [Link] 変数名:job_gpi

  9. Unemployment, female (% of female labor force) (modeled ILO estimate):SL.UEM.TOTL.FE.ZS [Link] 変数名:female_unemploy

  10. Unemployment, male (% of male labor force) (modeled ILO estimate):SL.UEM.TOTL.MA.ZS [Link] 変数名:male_unemploy

  11. Net official development assistance and official aid received (current US$) DT.ODA.ALLD.CD [Link] 変数名:oda

貧困率の時に例として学んだ、1日 6.85 ドル以下で生活している人の割合のデータを例にします。

コードは難しいものもありますが、にた分析をするときは、どこを変えれば良いか、考えてください。大体は、データの名前(df_under_6.85)と、変数名(under_6.85)を変更することになります。

データ

  • 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.

データ情報

データの情報を書きます。リンクの情報のマーク、または、概要(Description)から、データの説明をみることができます。分析には、どのようなデータか理解することが必要ですから、必ずこの作業をしてください。

  • データ名:貧困率(1日6.85ドル)

  • データコード:SI.POV.UMIC

  • 変数名:under_6.85

  • 概要:1日6.85ドルの貧困人口比率は、2017年の国際価格で1日6.85ドル未満で生活している人口の割合

データの取得

準備

これまでとも同じように二つのパッケージを読み込み(load)ます。

library(tidyverse)
library(WDI)

WDI パッケージを使って、直接データをダウンロードし、変数名を、under_6.85 に指定。

この変数名は、今後使いますから、重要です。一応、例として、わたしが使った、変数名を書いてあります。他の変数名を使っても構いません。

df_under_6.85 <- WDI(indicator = c(under_6.85 = "SI.POV.UMIC"))

data ディレクトリに書き込んでおきます。

write_csv(df_under_6.85, "data/under_6.85.csv")

data ディレクトリから読み出します。Run All や、Run All Chunks Above をする時は、上の二つをスキップする設定にしてあります。

df_under_6.85 <- read_csv("data/under_6.85.csv")
Rows: 16758 Columns: 5── Column specification ─────────────────────────────────────────────────────────────────
Delimiter: ","
chr (3): country, iso2c, iso3c
dbl (2): year, under_6.85
ℹ 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.

データの確認

データ名で、中身を表示できます。head(df_under_6.85) とすると、6行表示されます。df_under_6.85 |> head(10) とすると、10行表示します。あとで使っています。

df_under_6.85

変数の情報を得ることができます。

str(df_under_6.85)
spc_tbl_ [16,758 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ country   : chr [1:16758] "Africa Eastern and Southern" "Africa Eastern and Southern" "Africa Eastern and Southern" "Africa Eastern and Southern" ...
 $ iso2c     : chr [1:16758] "ZH" "ZH" "ZH" "ZH" ...
 $ iso3c     : chr [1:16758] "AFE" "AFE" "AFE" "AFE" ...
 $ year      : num [1:16758] 2022 2021 2020 2019 2018 ...
 $ under_6.85: num [1:16758] NA NA NA NA NA NA NA NA NA NA ...
 - attr(*, "spec")=
  .. cols(
  ..   country = col_character(),
  ..   iso2c = col_character(),
  ..   iso3c = col_character(),
  ..   year = col_double(),
  ..   under_6.85 = col_double()
  .. )
 - attr(*, "problems")=<externalptr> 

データには country のところに、国だけでなく、地域も入っているので、地域のリストを、iso2cREGION に入れておきます。以前にも一度使いました。

REGION <- c("1A", "1W", "4E", "7E", "8S", "B8", "EU", "F1", "OE", "S1", 
"S2", "S3", "S4", "T2", "T3", "T4", "T5", "T6", "T7", "V1", "V2", 
"V3", "V4", "XC", "XD", "XE", "XF", "XG", "XH", "XI", "XJ", "XL", 
"XM", "XN", "XO", "XP", "XQ", "XT", "XU", "XY", "Z4", "Z7", "ZF", 
"ZG", "ZH", "ZI", "ZJ", "ZQ", "ZT")

地域名にはどのようなものがあるか見ておきましょう。あとで、どこを調べるか考える時も、地域名や、国名がわかっていると、便利です。

df_under_6.85 |> filter(iso2c %in% REGION) |> distinct(country, iso2c)

国名も表示しておきます。

df_under_6.85 |> filter(!(iso2c %in% REGION)) |> distinct(country, iso2c)

分析する国のリスト

南部アフリカ関税同盟 The Southern African Customs Union (SACU)

これは、みなさんも使ってください。

SOUTH_AFRICA_FIVE <- c("South Africa", "Namibia", "Eswatini", "Botswana", "Lesotho")

こちらは、自分で分析したい国のりすとを作ってください。

ラテンアメリカでジニ指数が大きい4カ国

CHOSEN_COUNTRIES <- c("Suriname", "Belize", "Brazil", "Colombia")

分析

1. 各年毎のデータの数の棒グラフ

まずは、NA の値を削除します。そのあとで、国の情報の数を数えたいので、!(iso2c %in% REGION) で、上でおいた、地域の iso2c を選択し、! は否定でしたから、地域ではないものを選択し、その数を棒グラフにしています。

df_under_6.85 |> drop_na(under_6.85) |> filter(!(iso2c %in% REGION)) |>
  ggplot(aes(year)) + geom_bar()

視覚化

2. 日本の貧困率(1日6.85ドル以下)

日本のデータを選択するには、filter(country == "Japan") とします。そのあとは、under_6.85 の値が、NA のものを削除し、year の descending order 降順に並べ替えています。

df_under_6.85 |> filter(country == "Japan") |> 
  drop_na(under_6.85) |> arrange(desc(year))

3. 経年変化

a. 日本

まず、日本のデータを選択、次に、under_6.85 が NA のものを削除し、x 軸に、year、y 軸に、under_6.85 の値をとり、折れ線グラフで表示します。

df_under_6.85 |> filter(country == "Japan") |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line()

必ず、気づいたこと、疑問を書いてください。それが、EDA です。

気づいたこと・疑問

  • あまりにもデータが少ないので、評価はできない。

  • 0.5% から 2.2% 程度、この基準で貧困者がいるということは、精度を高めながら、継続して、調査する必要があるように思われる。

b. 南部アフリカ関税同盟

選択するときに、日本ではなく、SOUTH_AFRICA_FIVE に入っている、5カ国のどれかに一致するものを選ぶのが、country %in% SOUTH_AFRICA_FIVE です。国を色で区別しています。実は、ggplot(aes(year, under_6.85, col = country)) + geom_line() でも同じ結果になります。

df_under_6.85 |> filter(country %in% SOUTH_AFRICA_FIVE) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country))

参考:平均的な値を曲線で表すことも可能です。loess を使うと滑らかな曲線で近似してくれます。

色は、国別、それ以外に、geom_smooth で近似曲線を加えています。Help から、geom_smooth などを確認してください。

df_under_6.85 |> filter(country %in% SOUTH_AFRICA_FIVE) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country)) +
  geom_smooth(formula = 'y~x', method = "loess", se = FALSE)

気づいたこと・疑問

  • 貧困率を、6.85ドルでとると、非常に多くのひとたちが、貧困になっていることがわかる。

c. ラテンアメリカ4カ国

選択して国についての分析です。

df_under_6.85|> filter(country %in% CHOSEN_COUNTRIES) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country))

参考:平均的な値を曲線で表すことも可能です。loess を使うと滑らかな曲線で近似してくれます。

df_under_6.85 |> filter(country %in% CHOSEN_COUNTRIES) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country)) +
  geom_smooth(formula = 'y~x', method = "loess", se = FALSE)

分布

日本も、2008, 2010, 2013 年にしかデータがなく、南部アフリカもこのデータは少ないので、データの数から、2010年について見てみる。

binwidth または、bins の数を変更して、適切なものに調整します。

df_under_6.85 |> filter(year == 2010) |> filter(!(country %in% REGION))|>
  drop_na(under_6.85) |>
  ggplot(aes(under_6.85)) + geom_histogram(binwidth = 10)

参考:SACU の5カ国の値を縦線で書き込むには下のようにします。

このデータの値はあまりないので、難しいですが、日本のデータと、南部アフリカの両方にデータがある年を選んでいます。

df_under_6.85 |> filter(year == 2010) |> filter(country %in% SOUTH_AFRICA_FIVE) 

参考:日本とSACU の5カ国の値を縦線で書き込むには下のようにします。

少し難しいですが、JP に 2010 年の日本の値を入れてあります。

JP <- 0.5
SAF <- df_under_6.85 |> filter(year == 2010) |> filter(country %in% SOUTH_AFRICA_FIVE) |> pull(under_6.85)
df_under_6.85 |> filter(year == 2010) |> filter(!(country %in% REGION))|>
  drop_na(under_6.85) |>
  ggplot() + geom_histogram(aes(under_6.85), binwidth = 10) +
  geom_vline(xintercept = SAF, col = "red") + geom_vline(xintercept = JP, col = "blue") +labs(title = "貧困率(1日6.85ドル以下)", subtitle = "日本:青、SACU:赤")

データが十分ある最近の年の値の10カ国の値の棒グラフ

a. 値が大きい方から

arrange(desc(under_6.85)) |> head(10) これで、降順にならべ、その上から 10 個を取り出しています。fct_reorder(country, under_6.85) は、アルファベット順ではなく、値の大きい順に表示するためのものです。

df_under_6.85 |> filter(year == 2019) |> drop_na(under_6.85) |> 
  filter(!(iso2c %in% REGION))|>
  arrange(desc(under_6.85)) |> head(10) |> 
  ggplot(aes(fct_reorder(country, under_6.85), under_6.85)) + geom_col() + 
  coord_flip() + labs(title = "Top 10 Countries", x = "country", y = "poverty rate (under $6.85 per day)")

b. 値が小さい方から

fct_rev(fct_reorder(country, under_6.85) の部分は、順序を上のものとは、逆にしています。

df_under_6.85 |> filter(year == 2019) |> drop_na(under_6.85) |> 
  filter(!(iso2c %in% REGION))|>
  arrange(under_6.85) |> head(10) |> 
  ggplot(aes(fct_rev(fct_reorder(country, under_6.85)), under_6.85)) + geom_col() + 
  coord_flip() + labs(title = "Lowest 10 Countries", x = "country", y = "poverty rate (under $6.85 per day)")

国の教育に関する支出

概要:国内総生産(GDP)に対する、国の教育に関する支出(Government expenditure on education, total (% of GDP))のデータの分析を行う

データ

  • Government expenditure on education, total (% of GDP):SE.XPD.TOTL.GD.ZS [Link]

データ情報

  • データ名:

  • データコード:

  • 変数名:ed_exp

  • 概要:

データの取得

準備

library(tidyverse)
library(WDI)

WDI パッケージを使って、直接データをダウンロードし、変数名を、ed_exp に指定。

df_under_6.85 <- WDI(indicator = c(under_6.85 = "SI.POV.UMIC"))
write_csv(df_under_6.85, "data/under_6.85.csv")
df_under_6.85 <- read_csv("data/under_6.85.csv")

データの確認

df_under_6.85
str(df_under_6.85)
REGION <- c("1A", "1W", "4E", "7E", "8S", "B8", "EU", "F1", "OE", "S1", 
"S2", "S3", "S4", "T2", "T3", "T4", "T5", "T6", "T7", "V1", "V2", 
"V3", "V4", "XC", "XD", "XE", "XF", "XG", "XH", "XI", "XJ", "XL", 
"XM", "XN", "XO", "XP", "XQ", "XT", "XU", "XY", "Z4", "Z7", "ZF", 
"ZG", "ZH", "ZI", "ZJ", "ZQ", "ZT")
df_under_6.85 |> filter(iso2c %in% REGION) |> distinct(country, iso2c)
df_under_6.85 |> filter(!(iso2c %in% REGION)) |> distinct(country, iso2c)

分析する国のリスト

南部アフリカ関税同盟 The Southern African Customs Union (SACU)

SOUTH_AFRICA_FIVE <- c("South Africa", "Namibia", "Eswatini", "Botswana", "Lesotho")

いくつかの国を選択

CHOSEN_COUNTRIES <- c("Suriname", "Belize", "Brazil", "Colombia")

分析

1. 各年毎のデータの数の棒グラフ

df_under_6.85 |> drop_na(under_6.85) |> filter(!(iso2c %in% REGION)) |>
  ggplot(aes(year)) + geom_bar()

気づいたこと・疑問

視覚化

2. 日本

df_under_6.85 |> filter(country == "Japan") |> 
  drop_na(under_6.85) |> arrange(desc(year))

気づいたこと・疑問

3. 経年変化

a. 日本

df_under_6.85 |> filter(country == "Japan") |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line()

気づいたこと・疑問

b. 南部アフリカ関税同盟

df_under_6.85 |> filter(country %in% SOUTH_AFRICA_FIVE) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country))

気づいたこと・疑問

参考:平均的な値を曲線で表すことも可能です。loess を使うと滑らかな曲線で近似してくれます。

df_under_6.85 |> filter(country %in% SOUTH_AFRICA_FIVE) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country)) +
  geom_smooth(formula = 'y~x', method = "loess", se = FALSE)

気づいたこと・疑問

c. 選択した国・地域

df_under_6.85 |> filter(country %in% CHOSEN_COUNTRIES) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country))

気づいたこと・疑問

参考:平均的な値を曲線で表すことも可能です。loess を使うと滑らかな曲線で近似してくれます。

df_under_6.85 |> filter(country %in% CHOSEN_COUNTRIES) |> drop_na(under_6.85) |>
  ggplot(aes(year, under_6.85)) + geom_line(aes(col = country)) +
  geom_smooth(formula = 'y~x', method = "loess", se = FALSE)

気づいたこと・疑問

分布

データの数から、まずは、2020年について見てみる。

df_under_6.85 |> filter(year == 2010) |> filter(!(country %in% REGION))|>
  drop_na(under_6.85) |>
  ggplot(aes(under_6.85)) + geom_histogram(binwidth = 10)

気づいたこと・疑問

参考:SACU の5カ国の値を縦線で書き込むには下のようにします。

df_under_6.85 |> filter(year == 2010) |> filter(country %in% SOUTH_AFRICA_FIVE) 

気づいたこと・疑問

参考:日本とSACU の5カ国の値を縦線で書き込むには下のようにします。

JP <- 0.5
SAF <- df_under_6.85 |> filter(year == 2010) |> filter(country %in% SOUTH_AFRICA_FIVE) |> pull(under_6.85)
df_under_6.85 |> filter(year == 2010) |> filter(!(country %in% REGION))|>
  drop_na(under_6.85) |>
  ggplot() + geom_histogram(aes(under_6.85), binwidth = 1) +
  geom_vline(xintercept = SAF, col = "red") + geom_vline(xintercept = JP, col = "blue") +labs(title = "貧困率(1日6.85ドル以下)", subtitle = "日本:青、SACU:赤")

気づいたこと・疑問

データが十分ある最近の年の値の10カ国の値の棒グラフ

a. 値が大きい方から

df_under_6.85 |> filter(year == 2019) |> drop_na(under_6.85) |> 
  filter(!(iso2c %in% REGION))|>
  arrange(desc(under_6.85)) |> head(10) |> 
  ggplot(aes(fct_reorder(country, under_6.85), ed_exp)) + geom_col() + 
  coord_flip() + labs(title = "Top 10 Countries", x = "country", y = "poverty rate (under $6.85 per day)")

気づいたこと・疑問

b. 値が小さい方から

df_under_6.85 |> filter(year == 2019) |> drop_na(under_6.85) |> 
  filter(!(iso2c %in% REGION))|>
  arrange(under_6.85) |> head(10) |> 
  ggplot(aes(fct_rev(fct_reorder(country, under_6.85)), under_6.85)) + geom_col() + 
  coord_flip() + labs(title = "Lowest 10 Countries", x = "country", y = "poverty rate (under $6.85 per day))

気づいたこと・疑問

LS0tCnRpdGxlOiAi5o6i57Si55qE44OH44O844K/5YiG5p6QIC0gRURBIgphdXRob3I6ICJJRCwgTGFzdCwgRmlyc3QiCmRhdGU6ICIyMDI05bm0MeaciDIz5pelIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCiMjIOiqsumhjAoK5Lul5LiL44Gu5oyH5qiZ44Gu5Lit44GL44KJ44CB5LiA44Gk44KS6YG45oqe44GX44Gm44CB44OH44O844K/44Gu5qaC6KaB77yIZGVzY3JpcHRpb27vvInjgpLoqJjpjLLjgZfjgIHjg4fjg7zjgr/jgpIgV0RJIOOBp+WPluW+l+OBl+OAgeS7peS4i+OBruWIhuaekOOCkuOBmeOCi+OAggoKMS4gIOWQhOW5tOavjuOBruODh+ODvOOCv+OBruaVsOOBruajkuOCsOODqeODlQoyLiAg5pel5pys44Gu44OH44O844K/44Gu5bm044Gu6ZmN6aCG44Gn44Gu6KGo56S6CjMuICDntYzlubTlpInljJbjgpLooajjgZnmipjjgoznt5rjgrDjg6njg5UKICAgIGEuICDml6XmnKwKICAgIGIuICDljZfpg6jjgqLjg5Xjg6rjgqvplqLnqI7lkIznm5/jga7vvJXjgqvlm70KICAgIGMuICDpgbjmip7jgZfjgZ/jgYTjgY/jgaTjgYvjga7lm70KNC4gIOODh+ODvOOCv+OBjOWNgeWIhuOBguOCi+acgOi/keOBruW5tOOBruWApOOBruODkuOCueODiOOCsOODqeODoAo1LiAg44OH44O844K/44GM5Y2B5YiG44GC44KL5pyA6L+R44Gu5bm044Gu5YCk44GuMTDjgqvlm73jga7lgKTjga7mo5LjgrDjg6njg5UKICAgIGEuICDlgKTjgYzlpKfjgY3jgYTmlrnjgYvjgokKICAgIGIuICDlgKTjgYzlsI/jgZXjgYTmlrnjgYvjgokKCuOBneOCjOOBnuOCjOOBq+OBpOOBhOOBpuiAg+Wvn++8iOawl+OBpeOBhOOBn+OBk+OBqOOAgeeWkeWVj+OBquOBqe+8ieOCkuiomOOBmQoKKioyMDIzLjEuMjcuIDIzOjU5Kiog44G+44Gn44GrIE1vb2RsZSDjga7mvJTnv5Ljga7oqrLpoYzjg5zjg4Pjgq/jgrnjgavmj5Dlh7rjgZfjgZ/jgoLjga7jgavjgaTjgYTjgabjga/jgIHjgarjgovjgbnjgY/jgIHml6njgY/opovjgabjgIHjg5XjgqPjg7zjg4njg5Djg4Pjgq/jgpLmm7jjgY3jgb7jgZnjgILjgZ3jgozku6XpmY3jgavmj5Dlh7rjgZXjgozjgZ/jgoLjga7jgoLopovjgb7jgZnjgYzjgIHjg5XjgqPjg7zjg4njg5Djg4Pjgq/jga/pgYXjgY/jgarjgovjgajmgJ3jgaPjgabjgY/jgaDjgZXjgYTjgIIKCiMjIyDjg4fjg7zjgr8KCjEuICBHb3Zlcm5tZW50IGV4cGVuZGl0dXJlIG9uIGVkdWNhdGlvbiwgdG90YWwgKCUgb2YgR0RQKe+8mlNFLlhQRC5UT1RMLkdELlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NFLlhQRC5UT1RMLkdELlpTKV0g5aSJ5pWw5ZCN77yaYGVkX2V4cGAKCjIuICBTY2hvb2wgZW5yb2xsbWVudCwgcHJpbWFyeSAoJSBncm9zcynvvJpTRS5QUk0uRU5SUiBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TRS5QUk0uRU5SUildIOWkieaVsOWQje+8mmBwcmltYXJ5YAoKMy4gIFNjaG9vbCBlbnJvbGxtZW50LCBzZWNvbmRhcnkgKCUgZ3Jvc3Mp77yaU0UuU0VDLkVOUlIgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0UuU0VDLkVOUlIpXSDlpInmlbDlkI3vvJpgc2Vjb25kYXJ5YAoKNC4gIFNjaG9vbCBlbnJvbGxtZW50LCB0ZXJ0aWFyeSAoJSBncm9zcynvvJpTRS5URVIuRU5SUiBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TRS5URVIuRU5SUildIOWkieaVsOWQje+8mmB0ZXJ0aWFyeWAKCjUuICBNb3J0YWxpdHkgcmF0ZSwgdW5kZXItNSAocGVyIDEsMDAwIGxpdmUgYmlydGhzKe+8mlNILkRZTi5NT1JUIFtbTGlua10oaHR0cHM6Ly9kYXRhYmFuay53b3JsZGJhbmsub3JnL21ldGFkYXRhZ2xvc3Nhcnkvd29ybGQtZGV2ZWxvcG1lbnQtaW5kaWNhdG9ycy9zZXJpZXMvU0guRFlOLk1PUlQpXSDlpInmlbDlkI3vvJpgdW5kZXI1YAoKNi4gIEluY2lkZW5jZSBvZiBISVYgKCUgb2YgdW5pbmZlY3RlZCBwb3B1bGF0aW9uIGFnZXMgMTUtNDkp77yaU0guSElWLklOQ0QuWlMgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0guSElWLklOQ0QuWlM/bG9jYXRpb25zPVNaKV0g5aSJ5pWw5ZCN77yaYG5ld19oaXZgCgo3LiAgU2Nob29sIGVucm9sbG1lbnQsIHByaW1hcnkgYW5kIHNlY29uZGFyeSAoZ3Jvc3MpLCBnZW5kZXIgcGFyaXR5IGluZGV4IChHUEkp77yaU0UuRU5SLlBSU0MuRk0uWlMgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0UuRU5SLlBSU0MuRk0uWlMpXSDlpInmlbDlkI3vvJpgc2Nob29sX2dwaWAKCjguICBSYXRpbyBvZiBmZW1hbGUgdG8gbWFsZSBsYWJvciBmb3JjZSBwYXJ0aWNpcGF0aW9uIHJhdGUgKCUpIChtb2RlbGVkIElMTyBlc3RpbWF0ZSnvvJpTTC5UTEYuQ0FDVC5GTS5aUyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TTC5UTEYuQ0FDVC5GTS5aUyldIOWkieaVsOWQje+8mmBqb2JfZ3BpYAoKOS4gIFVuZW1wbG95bWVudCwgZmVtYWxlICglIG9mIGZlbWFsZSBsYWJvciBmb3JjZSkgKG1vZGVsZWQgSUxPIGVzdGltYXRlKe+8mlNMLlVFTS5UT1RMLkZFLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NMLlVFTS5UT1RMLkZFLlpTKV0g5aSJ5pWw5ZCN77yaYGZlbWFsZV91bmVtcGxveWAKCjEwLiBVbmVtcGxveW1lbnQsIG1hbGUgKCUgb2YgbWFsZSBsYWJvciBmb3JjZSkgKG1vZGVsZWQgSUxPIGVzdGltYXRlKe+8mlNMLlVFTS5UT1RMLk1BLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NMLlVFTS5UT1RMLk1BLlpTKV0g5aSJ5pWw5ZCN77yaYG1hbGVfdW5lbXBsb3lgCgoxMS4gTmV0IG9mZmljaWFsIGRldmVsb3BtZW50IGFzc2lzdGFuY2UgYW5kIG9mZmljaWFsIGFpZCByZWNlaXZlZCAoY3VycmVudCBVU1wkKSBEVC5PREEuQUxMRC5DRCBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9EVC5PREEuQUxMRC5DRCldIOWkieaVsOWQje+8mmBvZGFgCgojIOS+iwoK6LKn5Zuw546H44Gu5pmC44Gr5L6L44Go44GX44Gm5a2m44KT44Gg44CBMeaXpeOAgDYuODUg44OJ44Or5Lul5LiL44Gn55Sf5rS744GX44Gm44GE44KL5Lq644Gu5Ymy5ZCI44Gu44OH44O844K/44KS5L6L44Gr44GX44G+44GZ44CCCgoq44Kz44O844OJ44Gv6Zuj44GX44GE44KC44Gu44KC44GC44KK44G+44GZ44GM44CB44Gr44Gf5YiG5p6Q44KS44GZ44KL44Go44GN44Gv44CB44Gp44GT44KS5aSJ44GI44KM44Gw6Imv44GE44GL44CB6ICD44GI44Gm44GP44Gg44GV44GE44CC5aSn5L2T44Gv44CB44OH44O844K/44Gu5ZCN5YmN77yIZGZfdW5kZXJfNi44Ne+8ieOBqOOAgeWkieaVsOWQje+8iHVuZGVyXzYuODXvvInjgpLlpInmm7TjgZnjgovjgZPjgajjgavjgarjgorjgb7jgZnjgIIqCgojIyDjg4fjg7zjgr8KCi0gICBQb3ZlcnR5IGhlYWRjb3VudCByYXRpbyBhdCBcJDYuODUgYSBkYXkgKDIwMTcgUFBQKSAoJSBvZiBwb3B1bGF0aW9uKe+8mlNJLlBPVi5VTUlDIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NJLlBPVi5VTUlDKV0KCi0gICBQb3ZlcnR5IGhlYWRjb3VudCByYXRpbyBhdCBcJDYuODUgYSBkYXkgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcHVsYXRpb24gbGl2aW5nIG9uIGxlc3MgdGhhbiBcJDYuODUgYSBkYXkgYXQgMjAxNyBpbnRlcm5hdGlvbmFsIHByaWNlcy4KCiMjIyDjg4fjg7zjgr/mg4XloLEKCirjg4fjg7zjgr/jga7mg4XloLHjgpLmm7jjgY3jgb7jgZnjgILjg6rjg7Pjgq/jga7mg4XloLHjga7jg57jg7zjgq/jgIHjgb7jgZ/jga/jgIHmpoLopoHvvIhEZXNjcmlwdGlvbu+8ieOBi+OCieOAgeODh+ODvOOCv+OBruiqrOaYjuOCkuOBv+OCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAguWIhuaekOOBq+OBr+OAgeOBqeOBruOCiOOBhuOBquODh+ODvOOCv+OBi+eQhuino+OBmeOCi+OBk+OBqOOBjOW/heimgeOBp+OBmeOBi+OCieOAgeW/heOBmuOBk+OBruS9nOalreOCkuOBl+OBpuOBj+OBoOOBleOBhOOAgioKCi0gICDjg4fjg7zjgr/lkI3vvJrosqflm7DnjofvvIgx5pelNi44NeODieODq++8iQoKLSAgIOODh+ODvOOCv+OCs+ODvOODie+8mlNJLlBPVi5VTUlDCgotICAg5aSJ5pWw5ZCN77yadW5kZXJfNi44NQoKLSAgIOamguimge+8mjHml6U2Ljg144OJ44Or44Gu6LKn5Zuw5Lq65Y+j5q+U546H44Gv44CBMjAxN+W5tOOBruWbvemam+S+oeagvOOBpzHml6U2Ljg144OJ44Or5pyq5rqA44Gn55Sf5rS744GX44Gm44GE44KL5Lq65Y+j44Gu5Ymy5ZCICgojIyMg44OH44O844K/44Gu5Y+W5b6XCgojIyMjIOa6luWCmQoKKuOBk+OCjOOBvuOBp+OBqOOCguWQjOOBmOOCiOOBhuOBq+S6jOOBpOOBruODkeODg+OCseODvOOCuOOCkuiqreOBv+i+vOOBv++8iGxvYWTvvInjgb7jgZnjgIIqCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoV0RJKQpgYGAKCldESSDjg5Hjg4PjgrHjg7zjgrjjgpLkvb/jgaPjgabjgIHnm7TmjqXjg4fjg7zjgr/jgpLjg4Djgqbjg7Pjg63jg7zjg4njgZfjgIHlpInmlbDlkI3jgpLjgIF1bmRlcl82Ljg1IOOBq+aMh+WumuOAggoKKuOBk+OBruWkieaVsOWQjeOBr+OAgeS7iuW+jOS9v+OBhOOBvuOBmeOBi+OCieOAgemHjeimgeOBp+OBmeOAguS4gOW/nOOAgeS+i+OBqOOBl+OBpuOAgeOCj+OBn+OBl+OBjOS9v+OBo+OBn+OAgeWkieaVsOWQjeOCkuabuOOBhOOBpuOBguOCiuOBvuOBmeOAguS7luOBruWkieaVsOWQjeOCkuS9v+OBo+OBpuOCguani+OBhOOBvuOBm+OCk+OAgioKCmBgYHtyIGV2YWwgPSBGQUxTRX0KZGZfdW5kZXJfNi44NSA8LSBXREkoaW5kaWNhdG9yID0gYyh1bmRlcl82Ljg1ID0gIlNJLlBPVi5VTUlDIikpCmBgYAoKKmRhdGEg44OH44Kj44Os44Kv44OI44Oq44Gr5pu444GN6L6844KT44Gn44GK44GN44G+44GZ44CCKgoKYGBge3IgZXZhbCA9IEZBTFNFfQp3cml0ZV9jc3YoZGZfdW5kZXJfNi44NSwgImRhdGEvdW5kZXJfNi44NS5jc3YiKQpgYGAKCipkYXRhIOODh+OCo+ODrOOCr+ODiOODquOBi+OCieiqreOBv+WHuuOBl+OBvuOBmeOAglJ1biBBbGwg44KE44CBUnVuIEFsbCBDaHVua3MgQWJvdmUg44KS44GZ44KL5pmC44Gv44CB5LiK44Gu5LqM44Gk44KS44K544Kt44OD44OX44GZ44KL6Kit5a6a44Gr44GX44Gm44GC44KK44G+44GZ44CCKgoKYGBge3J9CmRmX3VuZGVyXzYuODUgPC0gcmVhZF9jc3YoImRhdGEvdW5kZXJfNi44NS5jc3YiKQpgYGAKCiMjIyDjg4fjg7zjgr/jga7norroqo0KCirjg4fjg7zjgr/lkI3jgafjgIHkuK3ouqvjgpLooajnpLrjgafjgY3jgb7jgZnjgIJgaGVhZChkZl91bmRlcl82Ljg1KWAg44Go44GZ44KL44Go44CBNuihjOihqOekuuOBleOCjOOBvuOBmeOAgmBkZl91bmRlcl82Ljg1IHw+IGhlYWQoMTApYCDjgajjgZnjgovjgajjgIExMOihjOihqOekuuOBl+OBvuOBmeOAguOBguOBqOOBp+S9v+OBo+OBpuOBhOOBvuOBmeOAgioKCmBgYHtyfQpkZl91bmRlcl82Ljg1CmBgYAoKKuWkieaVsOOBruaDheWgseOCkuW+l+OCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAgioKCmBgYHtyfQpzdHIoZGZfdW5kZXJfNi44NSkKYGBgCgoq44OH44O844K/44Gr44GvIGNvdW50cnkg44Gu44Go44GT44KN44Gr44CB5Zu944Gg44GR44Gn44Gq44GP44CB5Zyw5Z+f44KC5YWl44Gj44Gm44GE44KL44Gu44Gn44CB5Zyw5Z+f44Gu44Oq44K544OI44KS44CBYGlzbzJjYCDjgacgYFJFR0lPTmAg44Gr5YWl44KM44Gm44GK44GN44G+44GZ44CC5Lul5YmN44Gr44KC5LiA5bqm5L2/44GE44G+44GX44Gf44CCKgoKYGBge3J9ClJFR0lPTiA8LSBjKCIxQSIsICIxVyIsICI0RSIsICI3RSIsICI4UyIsICJCOCIsICJFVSIsICJGMSIsICJPRSIsICJTMSIsIAoiUzIiLCAiUzMiLCAiUzQiLCAiVDIiLCAiVDMiLCAiVDQiLCAiVDUiLCAiVDYiLCAiVDciLCAiVjEiLCAiVjIiLCAKIlYzIiwgIlY0IiwgIlhDIiwgIlhEIiwgIlhFIiwgIlhGIiwgIlhHIiwgIlhIIiwgIlhJIiwgIlhKIiwgIlhMIiwgCiJYTSIsICJYTiIsICJYTyIsICJYUCIsICJYUSIsICJYVCIsICJYVSIsICJYWSIsICJaNCIsICJaNyIsICJaRiIsIAoiWkciLCAiWkgiLCAiWkkiLCAiWkoiLCAiWlEiLCAiWlQiKQpgYGAKCirlnLDln5/lkI3jgavjga/jganjga7jgojjgYbjgarjgoLjga7jgYzjgYLjgovjgYvopovjgabjgYrjgY3jgb7jgZfjgofjgYbjgILjgYLjgajjgafjgIHjganjgZPjgpLoqr/jgbnjgovjgYvogIPjgYjjgovmmYLjgoLjgIHlnLDln5/lkI3jgoTjgIHlm73lkI3jgYzjgo/jgYvjgaPjgabjgYTjgovjgajjgIHkvr/liKnjgafjgZnjgIIqCgpgYGB7cn0KZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoaXNvMmMgJWluJSBSRUdJT04pIHw+IGRpc3RpbmN0KGNvdW50cnksIGlzbzJjKQpgYGAKCirlm73lkI3jgoLooajnpLrjgZfjgabjgYrjgY3jgb7jgZnjgIIqCgpgYGB7cn0KZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpIHw+IGRpc3RpbmN0KGNvdW50cnksIGlzbzJjKQpgYGAKCiMjIyDliIbmnpDjgZnjgovlm73jga7jg6rjgrnjg4gKCiMjIyMgKirljZfpg6jjgqLjg5Xjg6rjgqvplqLnqI7lkIznm58qKiBUaGUgU291dGhlcm4gQWZyaWNhbiBDdXN0b21zIFVuaW9uIChTQUNVKQoKKuOBk+OCjOOBr+OAgeOBv+OBquOBleOCk+OCguS9v+OBo+OBpuOBj+OBoOOBleOBhOOAgioKCmBgYHtyfQpTT1VUSF9BRlJJQ0FfRklWRSA8LSBjKCJTb3V0aCBBZnJpY2EiLCAiTmFtaWJpYSIsICJFc3dhdGluaSIsICJCb3Rzd2FuYSIsICJMZXNvdGhvIikKYGBgCgoq44GT44Gh44KJ44Gv44CB6Ieq5YiG44Gn5YiG5p6Q44GX44Gf44GE5Zu944Gu44KK44GZ44Go44KS5L2c44Gj44Gm44GP44Gg44GV44GE44CCKgoKIyMjIyDjg6njg4bjg7PjgqLjg6Hjg6rjgqvjgafjgrjjg4vmjIfmlbDjgYzlpKfjgY3jgYTvvJTjgqvlm70KCmBgYHtyfQpDSE9TRU5fQ09VTlRSSUVTIDwtIGMoIlN1cmluYW1lIiwgIkJlbGl6ZSIsICJCcmF6aWwiLCAiQ29sb21iaWEiKQpgYGAKCiMjIOWIhuaekAoKIyMjIDEuIOWQhOW5tOavjuOBruODh+ODvOOCv+OBruaVsOOBruajkuOCsOODqeODlQoKKuOBvuOBmuOBr+OAgU5BIOOBruWApOOCkuWJiumZpOOBl+OBvuOBmeOAguOBneOBruOBguOBqOOBp+OAgeWbveOBruaDheWgseOBruaVsOOCkuaVsOOBiOOBn+OBhOOBruOBp+OAgWAhKGlzbzJjICVpbiUgUkVHSU9OKWAg44Gn44CB5LiK44Gn44GK44GE44Gf44CB5Zyw5Z+f44GuIGlzbzJjIOOCkumBuOaKnuOBl+OAgSEg44Gv5ZCm5a6a44Gn44GX44Gf44GL44KJ44CB5Zyw5Z+f44Gn44Gv44Gq44GE44KC44Gu44KS6YG45oqe44GX44CB44Gd44Gu5pWw44KS5qOS44Kw44Op44OV44Gr44GX44Gm44GE44G+44GZ44CCKgoKYGBge3J9CmRmX3VuZGVyXzYuODUgfD4gZHJvcF9uYSh1bmRlcl82Ljg1KSB8PiBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyKSkgKyBnZW9tX2JhcigpCmBgYAoKIyMg6KaW6Kaa5YyWCgojIyMgMi4g5pel5pys44Gu6LKn5Zuw546H77yIMeaXpTYuODXjg4njg6vku6XkuIvvvIkKCirml6XmnKzjga7jg4fjg7zjgr/jgpLpgbjmip7jgZnjgovjgavjga/jgIFgZmlsdGVyKGNvdW50cnkgPT0gIkphcGFuIilgIOOBqOOBl+OBvuOBmeOAguOBneOBruOBguOBqOOBr+OAgWB1bmRlcl82Ljg1YCDjga7lgKTjgYzjgIFOQSDjga7jgoLjga7jgpLliYrpmaTjgZfjgIFgeWVhcmAg44GuIGRlc2NlbmRpbmcgb3JkZXIg6ZmN6aCG44Gr5Lim44G55pu/44GI44Gm44GE44G+44GZ44CCKgoKYGBge3J9CmRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKGNvdW50cnkgPT0gIkphcGFuIikgfD4gCiAgZHJvcF9uYSh1bmRlcl82Ljg1KSB8PiBhcnJhbmdlKGRlc2MoeWVhcikpCmBgYAoKIyMjIDMuIOe1jOW5tOWkieWMlgoKIyMjIyBhLiDml6XmnKwKCirjgb7jgZrjgIHml6XmnKzjga7jg4fjg7zjgr/jgpLpgbjmip7jgIHmrKHjgavjgIFgdW5kZXJfNi44NWAg44GMIE5BIOOBruOCguOBruOCkuWJiumZpOOBl+OAgXgg6Lu444Gr44CBeWVhcuOAgXkg6Lu444Gr44CBYHVuZGVyXzYuODVgIOOBruWApOOCkuOBqOOCiuOAgeaKmOOCjOe3muOCsOODqeODleOBp+ihqOekuuOBl+OBvuOBmeOAgioKCmBgYHtyfQpkZl91bmRlcl82Ljg1IHw+IGZpbHRlcihjb3VudHJ5ID09ICJKYXBhbiIpIHw+IGRyb3BfbmEodW5kZXJfNi44NSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHVuZGVyXzYuODUpKSArIGdlb21fbGluZSgpCmBgYAoKKuW/heOBmuOAgeawl+OBpeOBhOOBn+OBk+OBqOOAgeeWkeWVj+OCkuabuOOBhOOBpuOBj+OBoOOBleOBhOOAguOBneOCjOOBjOOAgUVEQSDjgafjgZnjgIIqCgoqKuawl+OBpeOBhOOBn+OBk+OBqOODu+eWkeWVjyoqCgotICAg44GC44G+44KK44Gr44KC44OH44O844K/44GM5bCR44Gq44GE44Gu44Gn44CB6KmV5L6h44Gv44Gn44GN44Gq44GE44CCCgotICAgMC41JSDjgYvjgokgMi4yJSDnqIvluqbjgIHjgZPjga7ln7rmupbjgafosqflm7DogIXjgYzjgYTjgovjgajjgYTjgYbjgZPjgajjga/jgIHnsr7luqbjgpLpq5jjgoHjgarjgYzjgonjgIHntpnntprjgZfjgabjgIHoqr/mn7vjgZnjgovlv4XopoHjgYzjgYLjgovjgojjgYbjgavmgJ3jgo/jgozjgovjgIIKCiMjIyMgYi4g5Y2X6YOo44Ki44OV44Oq44Kr6Zai56iO5ZCM55ufCgoq6YG45oqe44GZ44KL44Go44GN44Gr44CB5pel5pys44Gn44Gv44Gq44GP44CBU09VVEhfQUZSSUNBX0ZJVkUg44Gr5YWl44Gj44Gm44GE44KL44CBNeOCq+WbveOBruOBqeOCjOOBi+OBq+S4gOiHtOOBmeOCi+OCguOBruOCkumBuOOBtuOBruOBjOOAgWBjb3VudHJ5ICVpbiUgU09VVEhfQUZSSUNBX0ZJVkVgIOOBp+OBmeOAguWbveOCkuiJsuOBp+WMuuWIpeOBl+OBpuOBhOOBvuOBmeOAguWun+OBr+OAgWBnZ3Bsb3QoYWVzKHllYXIsIHVuZGVyXzYuODUsIGNvbCA9IGNvdW50cnkpKSArIGdlb21fbGluZSgpYCDjgafjgoLlkIzjgZjntZDmnpzjgavjgarjgorjgb7jgZnjgIIqCgpgYGB7cn0KZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoY291bnRyeSAlaW4lIFNPVVRIX0FGUklDQV9GSVZFKSB8PiBkcm9wX25hKHVuZGVyXzYuODUpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCB1bmRlcl82Ljg1KSkgKyBnZW9tX2xpbmUoYWVzKGNvbCA9IGNvdW50cnkpKQpgYGAKCioq5Y+C6ICD77ya5bmz5Z2H55qE44Gq5YCk44KS5puy57ea44Gn6KGo44GZ44GT44Go44KC5Y+v6IO944Gn44GZ44CCbG9lc3Mg44KS5L2/44GG44Go5ruR44KJ44GL44Gq5puy57ea44Gn6L+R5Ly844GX44Gm44GP44KM44G+44GZ44CCKioKCiroibLjga/jgIHlm73liKXjgIHjgZ3jgozku6XlpJbjgavjgIFnZW9tX3Ntb290aCDjgafov5HkvLzmm7Lnt5rjgpLliqDjgYjjgabjgYTjgb7jgZnjgIJIZWxwIOOBi+OCieOAgWdlb21fc21vb3RoIOOBquOBqeOCkueiuuiqjeOBl+OBpuOBj+OBoOOBleOBhOOAgioKCmBgYHtyfQpkZl91bmRlcl82Ljg1IHw+IGZpbHRlcihjb3VudHJ5ICVpbiUgU09VVEhfQUZSSUNBX0ZJVkUpIHw+IGRyb3BfbmEodW5kZXJfNi44NSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHVuZGVyXzYuODUpKSArIGdlb21fbGluZShhZXMoY29sID0gY291bnRyeSkpICsKICBnZW9tX3Ntb290aChmb3JtdWxhID0gJ3l+eCcsIG1ldGhvZCA9ICJsb2VzcyIsIHNlID0gRkFMU0UpCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKLSAgIOiyp+WbsOeOh+OCkuOAgTYuODXjg4njg6vjgafjgajjgovjgajjgIHpnZ7luLjjgavlpJrjgY/jga7jgbLjgajjgZ/jgaHjgYzjgIHosqflm7DjgavjgarjgaPjgabjgYTjgovjgZPjgajjgYzjgo/jgYvjgovjgIIKCiMjIyMgYy4g44Op44OG44Oz44Ki44Oh44Oq44Kr77yU44Kr5Zu9Cgoq6YG45oqe44GX44Gm5Zu944Gr44Gk44GE44Gm44Gu5YiG5p6Q44Gn44GZ44CCKgoKYGBge3J9CmRmX3VuZGVyXzYuODV8PiBmaWx0ZXIoY291bnRyeSAlaW4lIENIT1NFTl9DT1VOVFJJRVMpIHw+IGRyb3BfbmEodW5kZXJfNi44NSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHVuZGVyXzYuODUpKSArIGdlb21fbGluZShhZXMoY29sID0gY291bnRyeSkpCmBgYAoKKirlj4LogIPvvJrlubPlnYfnmoTjgarlgKTjgpLmm7Lnt5rjgafooajjgZnjgZPjgajjgoLlj6/og73jgafjgZnjgIJsb2VzcyDjgpLkvb/jgYbjgajmu5HjgonjgYvjgarmm7Lnt5rjgafov5HkvLzjgZfjgabjgY/jgozjgb7jgZnjgIIqKgoKYGBge3J9CmRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKGNvdW50cnkgJWluJSBDSE9TRU5fQ09VTlRSSUVTKSB8PiBkcm9wX25hKHVuZGVyXzYuODUpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCB1bmRlcl82Ljg1KSkgKyBnZW9tX2xpbmUoYWVzKGNvbCA9IGNvdW50cnkpKSArCiAgZ2VvbV9zbW9vdGgoZm9ybXVsYSA9ICd5fngnLCBtZXRob2QgPSAibG9lc3MiLCBzZSA9IEZBTFNFKQpgYGAKCiMjIyDliIbluIMKCuaXpeacrOOCguOAgTIwMDgsIDIwMTAsIDIwMTMg5bm044Gr44GX44GL44OH44O844K/44GM44Gq44GP44CB5Y2X6YOo44Ki44OV44Oq44Kr44KC44GT44Gu44OH44O844K/44Gv5bCR44Gq44GE44Gu44Gn44CB44OH44O844K/44Gu5pWw44GL44KJ44CBMjAxMOW5tOOBq+OBpOOBhOOBpuimi+OBpuOBv+OCi+OAggoKKmBiaW53aWR0aGAg44G+44Gf44Gv44CBYGJpbnNgIOOBruaVsOOCkuWkieabtOOBl+OBpuOAgemBqeWIh+OBquOCguOBruOBq+iqv+aVtOOBl+OBvuOBmeOAgioKCmBgYHtyfQpkZl91bmRlcl82Ljg1IHw+IGZpbHRlcih5ZWFyID09IDIwMTApIHw+IGZpbHRlcighKGNvdW50cnkgJWluJSBSRUdJT04pKXw+CiAgZHJvcF9uYSh1bmRlcl82Ljg1KSB8PgogIGdncGxvdChhZXModW5kZXJfNi44NSkpICsgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxMCkKYGBgCgoqKuWPguiAg++8mioqU0FDVSDjga7vvJXjgqvlm73jga7lgKTjgpLnuKbnt5rjgafmm7jjgY3ovrzjgoDjgavjga/kuIvjga7jgojjgYbjgavjgZfjgb7jgZnjgIIKCirjgZPjga7jg4fjg7zjgr/jga7lgKTjga/jgYLjgb7jgorjgarjgYTjga7jgafjgIHpm6PjgZfjgYTjgafjgZnjgYzjgIHml6XmnKzjga7jg4fjg7zjgr/jgajjgIHljZfpg6jjgqLjg5Xjg6rjgqvjga7kuKHmlrnjgavjg4fjg7zjgr/jgYzjgYLjgovlubTjgpLpgbjjgpPjgafjgYTjgb7jgZnjgIIqCgpgYGB7cn0KZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoeWVhciA9PSAyMDEwKSB8PiBmaWx0ZXIoY291bnRyeSAlaW4lIFNPVVRIX0FGUklDQV9GSVZFKSAKYGBgCgoqKuWPguiAg++8muaXpeacrOOBqCoqU0FDVSDjga7vvJXjgqvlm73jga7lgKTjgpLnuKbnt5rjgafmm7jjgY3ovrzjgoDjgavjga/kuIvjga7jgojjgYbjgavjgZfjgb7jgZnjgIIKCirlsJHjgZfpm6PjgZfjgYTjgafjgZnjgYzjgIFKUCDjgasgMjAxMCDlubTjga7ml6XmnKzjga7lgKTjgpLlhaXjgozjgabjgYLjgorjgb7jgZnjgIIqCgpgYGB7cn0KSlAgPC0gMC41ClNBRiA8LSBkZl91bmRlcl82Ljg1IHw+IGZpbHRlcih5ZWFyID09IDIwMTApIHw+IGZpbHRlcihjb3VudHJ5ICVpbiUgU09VVEhfQUZSSUNBX0ZJVkUpIHw+IHB1bGwodW5kZXJfNi44NSkKZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoeWVhciA9PSAyMDEwKSB8PiBmaWx0ZXIoIShjb3VudHJ5ICVpbiUgUkVHSU9OKSl8PgogIGRyb3BfbmEodW5kZXJfNi44NSkgfD4KICBnZ3Bsb3QoKSArIGdlb21faGlzdG9ncmFtKGFlcyh1bmRlcl82Ljg1KSwgYmlud2lkdGggPSAxMCkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IFNBRiwgY29sID0gInJlZCIpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gSlAsIGNvbCA9ICJibHVlIikgK2xhYnModGl0bGUgPSAi6LKn5Zuw546H77yIMeaXpTYuODXjg4njg6vku6XkuIvvvIkiLCBzdWJ0aXRsZSA9ICLml6XmnKzvvJrpnZLjgIFTQUNV77ya6LWkIikKYGBgCgojIyMg44OH44O844K/44GM5Y2B5YiG44GC44KL5pyA6L+R44Gu5bm044Gu5YCk44GuMTDjgqvlm73jga7lgKTjga7mo5LjgrDjg6njg5UKCiMjIyMgYS4g5YCk44GM5aSn44GN44GE5pa544GL44KJCgoqYGFycmFuZ2UoZGVzYyh1bmRlcl82Ljg1KSkgfD4gaGVhZCgxMClg44CA44GT44KM44Gn44CB6ZmN6aCG44Gr44Gq44KJ44G544CB44Gd44Gu5LiK44GL44KJIDEwIOWAi+OCkuWPluOCiuWHuuOBl+OBpuOBhOOBvuOBmeOAgmBmY3RfcmVvcmRlcihjb3VudHJ5LCB1bmRlcl82Ljg1KWAg44Gv44CB44Ki44Or44OV44Kh44OZ44OD44OI6aCG44Gn44Gv44Gq44GP44CB5YCk44Gu5aSn44GN44GE6aCG44Gr6KGo56S644GZ44KL44Gf44KB44Gu44KC44Gu44Gn44GZ44CCKgoKYGBge3J9CmRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKHllYXIgPT0gMjAxOSkgfD4gZHJvcF9uYSh1bmRlcl82Ljg1KSB8PiAKICBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpfD4KICBhcnJhbmdlKGRlc2ModW5kZXJfNi44NSkpIHw+IGhlYWQoMTApIHw+IAogIGdncGxvdChhZXMoZmN0X3Jlb3JkZXIoY291bnRyeSwgdW5kZXJfNi44NSksIHVuZGVyXzYuODUpKSArIGdlb21fY29sKCkgKyAKICBjb29yZF9mbGlwKCkgKyBsYWJzKHRpdGxlID0gIlRvcCAxMCBDb3VudHJpZXMiLCB4ID0gImNvdW50cnkiLCB5ID0gInBvdmVydHkgcmF0ZSAodW5kZXIgJDYuODUgcGVyIGRheSkiKQpgYGAKCiMjIyMgYi4g5YCk44GM5bCP44GV44GE5pa544GL44KJCgoqYGZjdF9yZXYoZmN0X3Jlb3JkZXIoY291bnRyeSwgdW5kZXJfNi44NSlgIOOBrumDqOWIhuOBr+OAgemghuW6j+OCkuS4iuOBruOCguOBruOBqOOBr+OAgemAhuOBq+OBl+OBpuOBhOOBvuOBmeOAgioKCmBgYHtyfQpkZl91bmRlcl82Ljg1IHw+IGZpbHRlcih5ZWFyID09IDIwMTkpIHw+IGRyb3BfbmEodW5kZXJfNi44NSkgfD4gCiAgZmlsdGVyKCEoaXNvMmMgJWluJSBSRUdJT04pKXw+CiAgYXJyYW5nZSh1bmRlcl82Ljg1KSB8PiBoZWFkKDEwKSB8PiAKICBnZ3Bsb3QoYWVzKGZjdF9yZXYoZmN0X3Jlb3JkZXIoY291bnRyeSwgdW5kZXJfNi44NSkpLCB1bmRlcl82Ljg1KSkgKyBnZW9tX2NvbCgpICsgCiAgY29vcmRfZmxpcCgpICsgbGFicyh0aXRsZSA9ICJMb3dlc3QgMTAgQ291bnRyaWVzIiwgeCA9ICJjb3VudHJ5IiwgeSA9ICJwb3ZlcnR5IHJhdGUgKHVuZGVyICQ2Ljg1IHBlciBkYXkpIikKYGBgCgojIOWbveOBruaVmeiCsuOBq+mWouOBmeOCi+aUr+WHugoKPiDmpoLopoHvvJrlm73lhoXnt4/nlJ/nlKPvvIhHRFDvvInjgavlr77jgZnjgovjgIHlm73jga7mlZnogrLjgavplqLjgZnjgovmlK/lh7rvvIhHb3Zlcm5tZW50IGV4cGVuZGl0dXJlIG9uIGVkdWNhdGlvbiwgdG90YWwgKCUgb2YgR0RQKe+8ieOBruODh+ODvOOCv+OBruWIhuaekOOCkuihjOOBhgoKIyMg44OH44O844K/CgotICAgR292ZXJubWVudCBleHBlbmRpdHVyZSBvbiBlZHVjYXRpb24sIHRvdGFsICglIG9mIEdEUCnvvJpTRS5YUEQuVE9UTC5HRC5aUyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TRS5YUEQuVE9UTC5HRC5aUyldCgotICAgCgojIyMg44OH44O844K/5oOF5aCxCgotICAg44OH44O844K/5ZCN77yaCgotICAg44OH44O844K/44Kz44O844OJ77yaCgotICAg5aSJ5pWw5ZCN77yaYGVkX2V4cGAKCi0gICDmpoLopoHvvJoKCiMjIyDjg4fjg7zjgr/jga7lj5blvpcKCiMjIyMg5rqW5YKZCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoV0RJKQpgYGAKCldESSDjg5Hjg4PjgrHjg7zjgrjjgpLkvb/jgaPjgabjgIHnm7TmjqXjg4fjg7zjgr/jgpLjg4Djgqbjg7Pjg63jg7zjg4njgZfjgIHlpInmlbDlkI3jgpLjgIFgZWRfZXhwYCDjgavmjIflrprjgIIKCmBgYCAgICAgICAgIApkZl91bmRlcl82Ljg1IDwtIFdESShpbmRpY2F0b3IgPSBjKHVuZGVyXzYuODUgPSAiU0kuUE9WLlVNSUMiKSkKYGBgCgpgYGB7ciBldmFsID0gRkFMU0V9CgpgYGAKCmBgYCAgICAgICAgIAp3cml0ZV9jc3YoZGZfdW5kZXJfNi44NSwgImRhdGEvdW5kZXJfNi44NS5jc3YiKQpgYGAKCmBgYHtyIGV2YWwgPSBGQUxTRX0KCmBgYAoKYGBgICAgICAgICAgCmRmX3VuZGVyXzYuODUgPC0gcmVhZF9jc3YoImRhdGEvdW5kZXJfNi44NS5jc3YiKQpgYGAKCmBgYHtyfQoKYGBgCgojIyMg44OH44O844K/44Gu56K66KqNCgpgYGAgICAgICAgICAKZGZfdW5kZXJfNi44NQpgYGAKCmBgYHtyfQoKYGBgCgpgYGAgICAgICAgICAKc3RyKGRmX3VuZGVyXzYuODUpCmBgYAoKYGBge3J9CgpgYGAKCmBgYHtyfQpSRUdJT04gPC0gYygiMUEiLCAiMVciLCAiNEUiLCAiN0UiLCAiOFMiLCAiQjgiLCAiRVUiLCAiRjEiLCAiT0UiLCAiUzEiLCAKIlMyIiwgIlMzIiwgIlM0IiwgIlQyIiwgIlQzIiwgIlQ0IiwgIlQ1IiwgIlQ2IiwgIlQ3IiwgIlYxIiwgIlYyIiwgCiJWMyIsICJWNCIsICJYQyIsICJYRCIsICJYRSIsICJYRiIsICJYRyIsICJYSCIsICJYSSIsICJYSiIsICJYTCIsIAoiWE0iLCAiWE4iLCAiWE8iLCAiWFAiLCAiWFEiLCAiWFQiLCAiWFUiLCAiWFkiLCAiWjQiLCAiWjciLCAiWkYiLCAKIlpHIiwgIlpIIiwgIlpJIiwgIlpKIiwgIlpRIiwgIlpUIikKYGBgCgpgYGAgICAgICAgICAKZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoaXNvMmMgJWluJSBSRUdJT04pIHw+IGRpc3RpbmN0KGNvdW50cnksIGlzbzJjKQpgYGAKCmBgYHtyfQoKYGBgCgpgYGAgICAgICAgICAKZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpIHw+IGRpc3RpbmN0KGNvdW50cnksIGlzbzJjKQpgYGAKCmBgYHtyfQoKYGBgCgojIyMg5YiG5p6Q44GZ44KL5Zu944Gu44Oq44K544OICgojIyMjICoq5Y2X6YOo44Ki44OV44Oq44Kr6Zai56iO5ZCM55ufKiogVGhlIFNvdXRoZXJuIEFmcmljYW4gQ3VzdG9tcyBVbmlvbiAoU0FDVSkKCmBgYHtyfQpTT1VUSF9BRlJJQ0FfRklWRSA8LSBjKCJTb3V0aCBBZnJpY2EiLCAiTmFtaWJpYSIsICJFc3dhdGluaSIsICJCb3Rzd2FuYSIsICJMZXNvdGhvIikKYGBgCgojIyMjIOOBhOOBj+OBpOOBi+OBruWbveOCkumBuOaKngoKYGBgICAgICAgICAgCkNIT1NFTl9DT1VOVFJJRVMgPC0gYygiU3VyaW5hbWUiLCAiQmVsaXplIiwgIkJyYXppbCIsICJDb2xvbWJpYSIpCmBgYAoKYGBge3J9CgpgYGAKCiMjIOWIhuaekAoKIyMjIDEuIOWQhOW5tOavjuOBruODh+ODvOOCv+OBruaVsOOBruajkuOCsOODqeODlQoKYGBgICAgICAgICAgCmRmX3VuZGVyXzYuODUgfD4gZHJvcF9uYSh1bmRlcl82Ljg1KSB8PiBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyKSkgKyBnZW9tX2JhcigpCmBgYAoKYGBge3J9CgpgYGAKCioq5rCX44Gl44GE44Gf44GT44Go44O755aR5ZWPKioKCi0gIAoKIyMg6KaW6Kaa5YyWCgojIyMgMi4g5pel5pysCgpgYGAgICAgICAgICAKZGZfdW5kZXJfNi44NSB8PiBmaWx0ZXIoY291bnRyeSA9PSAiSmFwYW4iKSB8PiAKICBkcm9wX25hKHVuZGVyXzYuODUpIHw+IGFycmFuZ2UoZGVzYyh5ZWFyKSkKYGBgCgpgYGB7cn0KCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKLSAgCgojIyMgMy4g57WM5bm05aSJ5YyWCgojIyMjIGEuIOaXpeacrAoKYGBgICAgICAgICAgCmRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKGNvdW50cnkgPT0gIkphcGFuIikgfD4gZHJvcF9uYSh1bmRlcl82Ljg1KSB8PgogIGdncGxvdChhZXMoeWVhciwgdW5kZXJfNi44NSkpICsgZ2VvbV9saW5lKCkKYGBgCgpgYGB7cn0KCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKLSAgIAoKIyMjIyBiLiDljZfpg6jjgqLjg5Xjg6rjgqvplqLnqI7lkIznm58KCmBgYCAgICAgICAgIApkZl91bmRlcl82Ljg1IHw+IGZpbHRlcihjb3VudHJ5ICVpbiUgU09VVEhfQUZSSUNBX0ZJVkUpIHw+IGRyb3BfbmEodW5kZXJfNi44NSkgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIHVuZGVyXzYuODUpKSArIGdlb21fbGluZShhZXMoY29sID0gY291bnRyeSkpCmBgYAoKYGBge3J9CgpgYGAKCioq5rCX44Gl44GE44Gf44GT44Go44O755aR5ZWPKioKCi0gIAoKKirlj4LogIPvvJrlubPlnYfnmoTjgarlgKTjgpLmm7Lnt5rjgafooajjgZnjgZPjgajjgoLlj6/og73jgafjgZnjgIJsb2VzcyDjgpLkvb/jgYbjgajmu5HjgonjgYvjgarmm7Lnt5rjgafov5HkvLzjgZfjgabjgY/jgozjgb7jgZnjgIIqKgoKYGBgICAgICAgICAgCmRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKGNvdW50cnkgJWluJSBTT1VUSF9BRlJJQ0FfRklWRSkgfD4gZHJvcF9uYSh1bmRlcl82Ljg1KSB8PgogIGdncGxvdChhZXMoeWVhciwgdW5kZXJfNi44NSkpICsgZ2VvbV9saW5lKGFlcyhjb2wgPSBjb3VudHJ5KSkgKwogIGdlb21fc21vb3RoKGZvcm11bGEgPSAneX54JywgbWV0aG9kID0gImxvZXNzIiwgc2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKLSAgIAoKIyMjIyBjLiDpgbjmip7jgZfjgZ/lm73jg7vlnLDln58KCmBgYCAgICAgICAgIApkZl91bmRlcl82Ljg1IHw+IGZpbHRlcihjb3VudHJ5ICVpbiUgQ0hPU0VOX0NPVU5UUklFUykgfD4gZHJvcF9uYSh1bmRlcl82Ljg1KSB8PgogIGdncGxvdChhZXMoeWVhciwgdW5kZXJfNi44NSkpICsgZ2VvbV9saW5lKGFlcyhjb2wgPSBjb3VudHJ5KSkKYGBgCgpgYGB7cn0KCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKLSAgCgoKKirlj4LogIPvvJrlubPlnYfnmoTjgarlgKTjgpLmm7Lnt5rjgafooajjgZnjgZPjgajjgoLlj6/og73jgafjgZnjgIJsb2VzcyDjgpLkvb/jgYbjgajmu5HjgonjgYvjgarmm7Lnt5rjgafov5HkvLzjgZfjgabjgY/jgozjgb7jgZnjgIIqKgoKYGBgICAgICAgICAgCmRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKGNvdW50cnkgJWluJSBDSE9TRU5fQ09VTlRSSUVTKSB8PiBkcm9wX25hKHVuZGVyXzYuODUpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCB1bmRlcl82Ljg1KSkgKyBnZW9tX2xpbmUoYWVzKGNvbCA9IGNvdW50cnkpKSArCiAgZ2VvbV9zbW9vdGgoZm9ybXVsYSA9ICd5fngnLCBtZXRob2QgPSAibG9lc3MiLCBzZSA9IEZBTFNFKQpgYGAKCmBgYHtyfQoKYGBgCgoqKuawl+OBpeOBhOOBn+OBk+OBqOODu+eWkeWVjyoqCgotICAKCiMjIyDliIbluIMKCuODh+ODvOOCv+OBruaVsOOBi+OCieOAgeOBvuOBmuOBr+OAgTIwMjDlubTjgavjgaTjgYTjgabopovjgabjgb/jgovjgIIKCmBgYCAgICAgICAgIApkZl91bmRlcl82Ljg1IHw+IGZpbHRlcih5ZWFyID09IDIwMTApIHw+IGZpbHRlcighKGNvdW50cnkgJWluJSBSRUdJT04pKXw+CiAgZHJvcF9uYSh1bmRlcl82Ljg1KSB8PgogIGdncGxvdChhZXModW5kZXJfNi44NSkpICsgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxMCkKYGBgCgpgYGB7cn0KCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKLSAgCgoqKuWPguiAg++8mioqU0FDVSDjga7vvJXjgqvlm73jga7lgKTjgpLnuKbnt5rjgafmm7jjgY3ovrzjgoDjgavjga/kuIvjga7jgojjgYbjgavjgZfjgb7jgZnjgIIKCmBgYCAgICAgICAgIApkZl91bmRlcl82Ljg1IHw+IGZpbHRlcih5ZWFyID09IDIwMTApIHw+IGZpbHRlcihjb3VudHJ5ICVpbiUgU09VVEhfQUZSSUNBX0ZJVkUpIApgYGAKCmBgYHtyfQoKYGBgCgoqKuawl+OBpeOBhOOBn+OBk+OBqOODu+eWkeWVjyoqCgotICAKCgoqKuWPguiAg++8muaXpeacrOOBqCoqU0FDVSDjga7vvJXjgqvlm73jga7lgKTjgpLnuKbnt5rjgafmm7jjgY3ovrzjgoDjgavjga/kuIvjga7jgojjgYbjgavjgZfjgb7jgZnjgIIKCmBgYCAgICAgICAgIApKUCA8LSAwLjUKU0FGIDwtIGRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKHllYXIgPT0gMjAxMCkgfD4gZmlsdGVyKGNvdW50cnkgJWluJSBTT1VUSF9BRlJJQ0FfRklWRSkgfD4gcHVsbCh1bmRlcl82Ljg1KQpkZl91bmRlcl82Ljg1IHw+IGZpbHRlcih5ZWFyID09IDIwMTApIHw+IGZpbHRlcighKGNvdW50cnkgJWluJSBSRUdJT04pKXw+CiAgZHJvcF9uYSh1bmRlcl82Ljg1KSB8PgogIGdncGxvdCgpICsgZ2VvbV9oaXN0b2dyYW0oYWVzKHVuZGVyXzYuODUpLCBiaW53aWR0aCA9IDEpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBTQUYsIGNvbCA9ICJyZWQiKSArIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IEpQLCBjb2wgPSAiYmx1ZSIpICtsYWJzKHRpdGxlID0gIuiyp+WbsOeOh++8iDHml6U2Ljg144OJ44Or5Lul5LiL77yJIiwgc3VidGl0bGUgPSAi5pel5pys77ya6Z2S44CBU0FDVe+8mui1pCIpCmBgYAoKYGBge3J9CgpgYGAKCioq5rCX44Gl44GE44Gf44GT44Go44O755aR5ZWPKioKCi0gIAoKIyMjIOODh+ODvOOCv+OBjOWNgeWIhuOBguOCi+acgOi/keOBruW5tOOBruWApOOBrjEw44Kr5Zu944Gu5YCk44Gu5qOS44Kw44Op44OVCgojIyMjIGEuIOWApOOBjOWkp+OBjeOBhOaWueOBi+OCiQoKYGBgICAgICAgICAgCmRmX3VuZGVyXzYuODUgfD4gZmlsdGVyKHllYXIgPT0gMjAxOSkgfD4gZHJvcF9uYSh1bmRlcl82Ljg1KSB8PiAKICBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpfD4KICBhcnJhbmdlKGRlc2ModW5kZXJfNi44NSkpIHw+IGhlYWQoMTApIHw+IAogIGdncGxvdChhZXMoZmN0X3Jlb3JkZXIoY291bnRyeSwgdW5kZXJfNi44NSksIGVkX2V4cCkpICsgZ2VvbV9jb2woKSArIAogIGNvb3JkX2ZsaXAoKSArIGxhYnModGl0bGUgPSAiVG9wIDEwIENvdW50cmllcyIsIHggPSAiY291bnRyeSIsIHkgPSAicG92ZXJ0eSByYXRlICh1bmRlciAkNi44NSBwZXIgZGF5KSIpCmBgYAoKYGBge3J9CgpgYGAKCioq5rCX44Gl44GE44Gf44GT44Go44O755aR5ZWPKioKCi0gIAoKIyMjIyBiLiDlgKTjgYzlsI/jgZXjgYTmlrnjgYvjgokKCmBgYCAgICAgICAgIApkZl91bmRlcl82Ljg1IHw+IGZpbHRlcih5ZWFyID09IDIwMTkpIHw+IGRyb3BfbmEodW5kZXJfNi44NSkgfD4gCiAgZmlsdGVyKCEoaXNvMmMgJWluJSBSRUdJT04pKXw+CiAgYXJyYW5nZSh1bmRlcl82Ljg1KSB8PiBoZWFkKDEwKSB8PiAKICBnZ3Bsb3QoYWVzKGZjdF9yZXYoZmN0X3Jlb3JkZXIoY291bnRyeSwgdW5kZXJfNi44NSkpLCB1bmRlcl82Ljg1KSkgKyBnZW9tX2NvbCgpICsgCiAgY29vcmRfZmxpcCgpICsgbGFicyh0aXRsZSA9ICJMb3dlc3QgMTAgQ291bnRyaWVzIiwgeCA9ICJjb3VudHJ5IiwgeSA9ICJwb3ZlcnR5IHJhdGUgKHVuZGVyICQ2Ljg1IHBlciBkYXkpKQpgYGAKCmBgYHtyfQoKYGBgCgoqKuawl+OBpeOBhOOBn+OBk+OBqOODu+eWkeWVjyoqCgotICAgCg==