第5週

01/18(TH) 南部アフリカ諸国の貧困と不平等に対する対策

      COVID-19が貧困に与えた影響

01/23(TU) Rでデータサイエンス5  [Main]・[授業]

People-Education

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

General government expenditure on education (current, capital, and transfers) is expressed as a percentage of GDP. It includes expenditure funded by transfers from international sources to government. General government usually refers to local, regional and central governments.

教育に対する政府の一般支出(経常、資本、移転)は GDP の割合で表されます。これには、国際資金源から政府への送金によって資金提供された支出が含まれます。一般政府とは通常、地方自治体、地域政府、中央政府を指します。

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

Gross enrollment ratio is the ratio of total enrollment, regardless of age, to the population of the age group that officially corresponds to the level of education shown. Primary education provides children with basic reading, writing, and mathematics skills along with an elementary understanding of such subjects as history, geography, natural science, social science, art, and music.

Development Relevance: Gross enrollment ratios indicate the capacity of each level of the education system, but a high ratio may reflect a substantial number of overage children enrolled in each grade because of repetition or late entry rather than a successful education system. The net enrollment rate excludes overage and underage students and more accurately captures the system’s coverage and internal efficiency. Differences between the gross enrollment ratio and the net enrollment rate show the incidence of overage and underage enrollments. Limitations and Exceptions: Enrollment indicators are based on annual school surveys, but do not necessarily reflect actual attendance or dropout rates during the year. Also, the length of education differs across countries and can influence enrollment rates, although the International Standard Classification of Education (ISCED) tries to minimize the difference. For example, a shorter duration for primary education tends to increase the rate; a longer one to decrease it (in part because older children are more at risk of dropping out). Moreover, age at enrollment may be inaccurately estimated or misstated, especially in communities where registration of births is not strictly enforced. Long Definition: Gross enrollment ratio is the ratio of total enrollment, regardless of age, to the population of the age group that officially corresponds to the level of education shown. Primary education provides children with basic reading, writing, and mathematics skills along with an elementary understanding of such subjects as history, geography, natural science, social science, art, and music.

Periodicity: Annual Statistical Concept and Methodology: Gross enrollment ratio for primary school is calculated by dividing the number of students enrolled in primary education regardless of age by the population of the age group which officially corresponds to primary education, and multiplying by 100. Data on education are collected by the UNESCO Institute for Statistics from official responses to its annual education survey. All the data are mapped to the International Standard Classification of Education (ISCED) to ensure the comparability of education programs at the international level. The current version was formally adopted by UNESCO Member States in 2011. Population data are drawn from the United Nations Population Division. Using a single source for population data standardizes definitions, estimations, and interpolation methods, ensuring a consistent methodology across countries and minimizing potential enumeration problems in national censuses. The reference years reflect the school year for which the data are presented. In some countries the school year spans two calendar years (for example, from September 2010 to June 2011); in these cases the reference year refers to the year in which the school year ended (2011 in the example). Topic: Education: Participation

総就学率は、年齢に関係なく、表示されている教育レベルに正式に対応する年齢層の人口に対する総就学者数の比率です。初等教育では、子供たちに基本的な読み書き、数学のスキルと、歴史、地理、自然科学、社会科学、芸術、音楽などの科目の初歩的な理解を提供します。

開発との関連性: 総就学率は、教育システムの各レベルの能力を示すものであるが、高い比率は、教育システムがうまく機能しているというよりも、反復学習や後期入学のために、各学年に相当数の過年齢児童が在籍していることを反映している可能性がある。正味就学率は、年齢超過と年齢未満の生徒を除いたもので、制度のカバー率と内部効率をより正確に把握するものである。総就学率と純就学率の差は、過年齢入学と未成年入学の発生率を示している。 限界と例外: 在籍率の指標は毎年の学校調査に基づいているが、必ずしもその年の実際の出席率や退学率を反映しているわけではない。また、教育期間は国によって異なり、就学率に影響を与える可能性があるが、国際標準教育分類(ISCED)では、その違いを最小限に抑えようとしている。例えば、初等教育の期間が短いほど就学率は上昇し、長いほど低下する傾向がある(年長児の方が中途退学のリスクが高いことも一因)。さらに、特に出生登録が厳格に実施されていない地域では、就学時の年齢が不正確に推定されたり、誤って記載されたりすることもある。 長い定義: 総就学率(Gross enrollment ratio)とは、年齢に関係なく、教育レベルに対応する年齢層の人口に対する総就学者数の割合である。初等教育は、子どもたちに基本的な読み書きを提供する、

周期性: 年次 統計の概念と方法 初等教育の総就学率は、年齢に関係なく初等教育に就学している生徒数を、初等教育に正式に対応する年齢層の人口で割り、100を乗じて算出される。教育に関するデータは、ユネスコ統計研究所が年次教育調査への公式回答から収集している。すべてのデータは、国際レベルでの教育プログラムの比較可能性を確保するために、国際標準教育分類(ISCED)にマッピングされている。現在のバージョンは、2011年にユネスコ加盟国によって正式に採択された。人口データは、国連人口部から取得したものである。人口データの出典を1つにすることで、定義、推計、補間方法が標準化され、各国間で一貫した方法論が保証されるとともに、国勢調査における潜在的な集計上の問題を最小限に抑えることができる。基準年は、データが提示されている学年を反映している。国によっては、学年が2暦年(例えば2010年9月から2011年6月まで)にまたがる場合があり、その場合は学年が終了した年(例では2011年)を基準年としている。 トピック 教育: 参加

DeepL.com(無料版)で翻訳しました。

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

Gross enrollment ratio is the ratio of total enrollment, regardless of age, to the population of the age group that officially corresponds to the level of education shown. Secondary education completes the provision of basic education that began at the primary level, and aims at laying the foundations for lifelong learning and human development, by offering more subject- or skill-oriented instruction using more specialized teachers.

総就学率は、年齢に関係なく、表示されている教育レベルに正式に対応する年齢層の人口に対する総就学者数の比率です。中等教育は、初等段階から始まった基礎教育の提供を完了し、より専門性の高い教師によるより教科や技能に特化した指導を行うことにより、生涯学習と人間形成の基礎を築くことを目的としています。

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

Gross enrollment ratio is the ratio of total enrollment, regardless of age, to the population of the age group that officially corresponds to the level of education shown. Tertiary education, whether or not to an advanced research qualification, normally requires, as a minimum condition of admission, the successful completion of education at the secondary level.

総就学率は、年齢に関係なく、表示されている教育レベルに正式に対応する年齢層の人口に対する総就学者数の比率です。高等教育では、高度な研究資格の有無にかかわらず、通常、入学の最低条件として中等教育レベルの教育を無事に修了することが求められます。

Health

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

Under-five mortality rate is the probability per 1,000 that a newborn baby will die before reaching age five, if subject to age-specific mortality rates of the specified year.

5 歳未満死亡率は、指定された年の年齢別死亡率が適用される場合に、新生児が 5 歳に達する前に死亡する 1,000 人あたりの確率です。

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

Number of new HIV infections among uninfected populations ages 15-49 expressed per 1,000 uninfected population in the year before the period.

期間の前の年間の非感染人口 1,000 人当たりの 15 ~ 49 歳の非感染集団における新規 HIV 感染者数。

Gender

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

Gender parity index for gross enrollment ratio in primary and secondary education is the ratio of girls to boys enrolled at primary and secondary levels in public and private schools.

初等中等教育における総就学率の男女平等指数は、公立および私立学校の初等および中等教育レベルに在籍する女子と男子の比率です。

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

Labor force participation rate is the proportion of the population ages 15 and older that is economically active: all people who supply labor for the production of goods and services during a specified period. Ratio of female to male labor force participation rate is calculated by dividing female labor force participation rate by male labor force participation rate and multiplying by 100.

労働参加率とは、経済的に活動している 15 歳以上の人口の割合であり、指定された期間に商品やサービスの生産に労働力を供給するすべての人々を指します。女性労働力率と男性労働力率の比率は、女性労働力率を男性労働力率で割って100を乗じて算出します。

Labor

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

Unemployment refers to the share of the labor force that is without work but available for and seeking employment.

失業率とは、仕事はなくても職に就くことができ、求職している労働力の割合を指します。

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

Unemployment refers to the share of the labor force that is without work but available for and seeking employment.

失業率とは、仕事はなくても職に就くことができ、求職している労働力の割合を指します。

Global Link - Aid dependency

Net official development assistance and official aid received (current US$) DT.ODA.ALLD.CD [Link]

Net official development assistance (ODA) consists of disbursements of loans made on concessional terms (net of repayments of principal) and grants by official agencies of the members of the Development Assistance Committee (DAC), by multilateral institutions, and by non-DAC countries to promote economic development and welfare in countries and territories in the DAC list of ODA recipients. It includes loans with a grant element of at least 25 percent (calculated at a rate of discount of 10 percent). Net official aid refers to aid flows (net of repayments) from official donors to countries and territories in part II of the DAC list of recipients: more advanced countries of Central and Eastern Europe, the countries of the former Soviet Union, and certain advanced developing countries and territories. Official aid is provided under terms and conditions similar to those for ODA. Part II of the DAC List was abolished in 2005. The collection of data on official aid and other resource flows to Part II countries ended with 2004 data. Data are in current U.S. dollars.

政府開発援助(ODA)の純額は、開発援助委員会(DAC)メンバーの公的機関、多国間機関、DAC非加盟国による、譲許的条件(元本返済を除く)で行われた融資の実行と助成金で構成されます。 DAC の ODA 受領者リストに含まれる国および地域の経済発展と福祉を促進する。これには、少なくとも 25 パーセント(割引率 10 パーセントで計算)の補助金要素を持つローンが含まれます。純公的援助とは、公的ドナーからDACの受取人リストのパートIIにある国および地域への援助の流れ(返済額を差し引いた額)を指します:中央および東ヨーロッパのより先進国、旧ソ連諸国、および一部の先進途上国国と地域。公的援助は、ODA と同様の条件で提供されます。DAC リストのパート II は 2005 年に廃止されました。パート II 諸国への公的援助およびその他の資源の流れに関するデータの収集は 2004 年のデータで終了しました。データは現在の米ドルで表示されます。

library(tidyverse)
library(WDI)
wdicache <- WDIcache()
write_rds(wdicache, "data/wdicache.rds")
wdicache <- read_rds("data/wdicache.rds")
wdi_country <- wdicache$country
wdi_country |> filter(region == "Aggregates") |> pull(iso2c) |> dput()
c("ZH", "A9", "ZI", "1A", "B4", "B7", "B1", "B2", "B3", "B6", 
"C9", "C4", "B8", "C5", "C6", "C7", "C8", "S3", "D4", "D7", "D2", 
"D3", "N6", "D5", "F6", "D6", "4E", "V2", "Z4", "7E", "Z7", "XC", 
"EU", "F1", "6F", "XD", "XE", "ZB", "XF", "ZT", "XG", "XH", "XI", 
"XY", "XJ", "ZJ", "XL", "XM", "XN", "XO", "V3", "M1", "ZQ", "XP", 
"XQ", "XU", "M2", "6X", "6N", "OE", "S4", "V1", "S2", "V4", "R6", 
"8S", "ZF", "ZG", "S1", "A4", "T4", "T7", "T2", "T3", "T5", "T6", 
"XT", "1W", "A5")

内容

library(tidyverse)
library(WDI)
df_education <- WDI(
  indicator = c(education = "SE.XPD.TOTL.GD.ZS",
                primary = "SE.PRM.ENRR",
                secondary = "SE.SEC.ENRR",
                tertiary = "SE.TER.ENRR",
                under5 = "SH.DYN.MORT",
                hiv_uninfected = "SH.HIV.INCD.ZS",
                edu_gender = "SE.ENR.PRSC.FM.ZS",
                labor_gender = "SL.TLF.CACT.FM.ZS",
                unemploy_f = "SL.UEM.TOTL.FE.ZS",
                unemploy_m = "SL.UEM.TOTL.FE.ZS",
                aid_dependancy = "DT.ODA.ALLD.CD"), extra = TRUE)
write_csv(df_education, "data/education.csv")
df_education <- read_csv("data/education.csv")
Rows: 16758 Columns: 22── Column specification ────────────────────────────────────────────
Delimiter: ","
chr   (7): country, iso2c, iso3c, region, capital, income, lending
dbl  (13): year, education, primary, secondary, tertiary, under5...
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.
df_education |> filter(iso2c %in% REGION) |> distinct(country, iso2c)
df_education_long <- df_education |> 
  pivot_longer(7:16, names_to = "name", values_to = "value")
df_education_long |> 
  group_by(year, name) |> drop_na(value) |>
  summarize(num = n()) |> arrange(desc(year))
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.
df_education_long |> 
  group_by(year, name) |> drop_na(value) |>
  summarize(num = n()) |> 
  ggplot(aes(year, num, col = name)) + geom_line() +
  labs(title = "各指標の年毎のデータ数", y = "データ数", x = "年")
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.

World Development Indicators: [Link]

World (1W), Sub-Saharan Africa (excluding high income) (ZF), and Sub-Saharan Africa (ZG)

df_education_long |> 
  filter(name %in% c("primary", "secondary", "tertiary")) |>
  filter(iso2c %in% c("1W", "ZF", "ZG")) |> drop_na(value) |>
  ggplot(aes(year, value, col = name, linetype = iso2c)) + geom_line()

df_education |> filter(year == 2020) |> 
  select(education, primary, secondary, tertiary) |> 
  drop_na() |> cor()
           education     primary secondary    tertiary
education 1.00000000  0.06675766 0.5140271  0.40670174
primary   0.06675766  1.00000000 0.1933166 -0.01304195
secondary 0.51402711  0.19331659 1.0000000  0.75161150
tertiary  0.40670174 -0.01304195 0.7516115  1.00000000
df_education |> filter(country == "Japan") |> arrange(desc(year))
df_education |> filter(region != "Aggregates") |>
  filter(year == 2020) |>
  drop_na(education) |> 
  ggplot(aes(education, fill = region)) + geom_histogram(col = "black", linewidth = 0.1, binwidth = 1) +
  geom_vline(xintercept = 3.416981) + theme(legend.position = "top")

df_education |> 
  filter(country %in% c("World", "Japan", "South Africa")) |>
  drop_na(education) |>
  ggplot(aes(year, education, col = country)) + geom_line() 

df_education |> 
  filter(country %in% c("World", "Japan", "Korea, Rep.", "China")) |>
  drop_na(education) |>
  ggplot(aes(year, education, col = country)) + geom_line() 

準備

library(tidyverse)
library(WDI)

データの読み込み(importing)

df_poverty_inequality <- WDI(
  indicator = c(gini = "SI.POV.GINI",
                under_6.85 = "SI.POV.UMIC",
                ed_exp = "SE.XPD.TOTL.GD.ZS",
                primary = "SE.PRM.ENRR",
                secondary = "SE.SEC.ENRR",
                tertiary = "SE.TER.ENRR",
                under5 = "SH.DYN.MORT",
                new_hiv = "SH.HIV.INCD.ZS",
                school_gpi = "SE.ENR.PRSC.FM.ZS",
                job_gpi = "SL.TLF.CACT.FM.ZS",
                female_unemploy = "SL.UEM.TOTL.FE.ZS",
                male_unemploy = "SL.UEM.TOTL.FE.ZS",
                oda = "DT.ODA.ALLD.CD"), extra = TRUE)

保存と読み込み

2回目からは、data から読み込めるようにしておきます。

最初の1回目は、かならず実行してください。

write_csv(df_poverty_inequality, "data/poverty_inequality.csv")
df_poverty_inequality <- read_csv("data/poverty_inequality.csv")
Rows: 16758 Columns: 24── Column specification ────────────────────────────────────────────
Delimiter: ","
chr   (7): country, iso2c, iso3c, region, capital, income, lending
dbl  (15): year, gini, under_6.85, ed_exp, primary, secondary, t...
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.
wdicache <- read_rds("data/wdicache.rds")
wdicache$country |> filter(region == "Aggregates") |> arrange(iso2c) |> pull(iso2c) |> dput()
c("1A", "1W", "4E", "6F", "6N", "6X", "7E", "8S", "A4", "A5", 
"A9", "B1", "B2", "B3", "B4", "B6", "B7", "B8", "C4", "C5", "C6", 
"C7", "C8", "C9", "D2", "D3", "D4", "D5", "D6", "D7", "EU", "F1", 
"F6", "M1", "M2", "N6", "OE", "R6", "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", "ZB", "ZF", "ZG", "ZH", "ZI", 
"ZJ", "ZQ", "ZT")
REGIONS <- c("1A", "1W", "4E", "6F", "6N", "6X", "7E", "8S", "A4", "A5", 
"A9", "B1", "B2", "B3", "B4", "B6", "B7", "B8", "C4", "C5", "C6", 
"C7", "C8", "C9", "D2", "D3", "D4", "D5", "D6", "D7", "EU", "F1", 
"F6", "M1", "M2", "N6", "OE", "R6", "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", "ZB", "ZF", "ZG", "ZH", "ZI", 
"ZJ", "ZQ", "ZT")
length(REGIONS)
[1] 79
wdicache$country |> filter(!(iso2c %in% REGIONS))
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")

データを見てみよう (viewing)

df_poverty_inequality |> filter(iso2c %in% REGION) |> distinct(country, iso2c)
df_poverty_inequality |> filter(!(iso2c %in% REGION)) |> distinct(country, iso2c)

変数の選択(selecting)

df_pov_ineq <- df_poverty_inequality |> select(country, iso2c, year, gini:oda, region, income, lending)

変形(Wide to Long Data)

いくつもの指標を同時にいくつか選択し比較したいので、一つの列(変数)にならべた、縦長データ(long data)も作成しておきます。

pivot_longer(gini:oda)

ここでは、ratio から under_6.85 を、level という名前の列にならべ、値を value という列に並べるようにしてあります。

確認するときは、value が NA のものは除き、country と、iso2c と、level と value の部分だけ取り出して確認しています。

df_pov_ineq_long <- df_pov_ineq |> pivot_longer(gini:oda)

年毎のデータの数の確認(number of data in each year)

df_pov_ineq_long |> drop_na(value) |> 
  group_by(year, name) |> summarize(n = n()) |> arrange(desc(year))
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.

変数同士の相関関係 - 相関係数

df_pov_ineq |> drop_na(gini:oda) |> filter(income %in% c("Low income", "Lower middle income")) |> select(gini:oda)

cor(cars$speed,cars$dist)
[1] 0.8068949
cars |> ggplot(aes(speed, dist)) + geom_point() + 
  geom_smooth(formula = 'y~x',method = "lm", se=FALSE)

相関係数:直線の傾きが正なら正、負なら負、直線に近い程、1 または-1 に近い


変数相互の相関係数を一度に求める

df_pov_ineq |> drop_na(gini:oda) |> select(gini:oda) |> cor() |> 
  round(digits = 2) |> as.data.frame()

df_pov_ineq |> drop_na(gini:oda) |> filter(income %in% c("Low income", "Lower middle income"))|> 
  ggplot(aes(gini, primary)) + geom_point(aes(col = income)) + 
  geom_smooth(formula = 'y~x', method = "lm", se = FALSE) +
  labs(title = "cor(gini,primary) = 0.34")

df_pov_ineq |> drop_na(gini:oda) |> filter(income %in% c("Low income", "Lower middle income"))|>
  ggplot(aes(gini, tertiary)) + geom_point(aes(col = income)) + 
  geom_smooth(formula = 'y~x', method = "lm", se = FALSE) +
  labs(title = "cor(gini,tertiary) = -0.51")

df_pov_ineq |> drop_na(gini:oda) |> filter(income %in% c("Low income", "Lower middle income")) |>
  ggplot(aes(under_6.85, tertiary)) + geom_point(aes(col = income)) + 
  geom_smooth(formula = 'y~x', method = "lm", se = FALSE) +
  labs(title = "cor(under_6.85,tertiary) = -0.76")

df_pov_ineq |> drop_na(gini:oda) |> filter(income %in% c("Low income", "Lower middle income")) |>
  ggplot(aes(under_6.85, under5)) + geom_point(aes(col = income)) + 
  geom_smooth(formula = 'y~x', method = "lm", se = FALSE) +
  labs(title = "cor(under_6.85,under5) = 0.64")

LS0tCnRpdGxlOiAiR0VTIDAwMSDmvJTnv5I1IgphdXRob3I6ICJILiBTdXp1a2kiCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKLS0tCgojIyDnrKw16YCxCgowMS8xOChUSCnjgIDljZfpg6jjgqLjg5Xjg6rjgqvoq7jlm73jga7osqflm7DjgajkuI3lubPnrYnjgavlr77jgZnjgovlr77nrZYKCuOAgOOAgOOAgOOAgOOAgOOAgENPVklELTE544GM6LKn5Zuw44Gr5LiO44GI44Gf5b2x6Z+/CgowMS8yMyhUVSnjgIBS44Gn44OH44O844K/44K144Kk44Ko44Oz44K5NeOAgCBbW01haW5dKGh0dHBzOi8vZHMtc2wuZ2l0aHViLmlvL2ludHJvMnIvZ2VzMDAxL2dlczAwMS1tYWluLm5iLmh0bWwpXeODu1vmjojmpa1dCgoqKlBlb3BsZS1FZHVjYXRpb24qKgoKR292ZXJubWVudCBleHBlbmRpdHVyZSBvbiBlZHVjYXRpb24sIHRvdGFsICglIG9mIEdEUCnvvJpTRS5YUEQuVE9UTC5HRC5aUyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TRS5YUEQuVE9UTC5HRC5aUyldCgpHZW5lcmFsIGdvdmVybm1lbnQgZXhwZW5kaXR1cmUgb24gZWR1Y2F0aW9uIChjdXJyZW50LCBjYXBpdGFsLCBhbmQgdHJhbnNmZXJzKSBpcyBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlIG9mIEdEUC4gSXQgaW5jbHVkZXMgZXhwZW5kaXR1cmUgZnVuZGVkIGJ5IHRyYW5zZmVycyBmcm9tIGludGVybmF0aW9uYWwgc291cmNlcyB0byBnb3Zlcm5tZW50LiBHZW5lcmFsIGdvdmVybm1lbnQgdXN1YWxseSByZWZlcnMgdG8gbG9jYWwsIHJlZ2lvbmFsIGFuZCBjZW50cmFsIGdvdmVybm1lbnRzLgoK5pWZ6IKy44Gr5a++44GZ44KL5pS/5bqc44Gu5LiA6Iis5pSv5Ye677yI57WM5bi444CB6LOH5pys44CB56e76Lui77yJ44GvIEdEUCDjga7libLlkIjjgafooajjgZXjgozjgb7jgZnjgILjgZPjgozjgavjga/jgIHlm73pmpvos4fph5HmupDjgYvjgonmlL/lupzjgbjjga7pgIHph5HjgavjgojjgaPjgabos4fph5Hmj5DkvpvjgZXjgozjgZ/mlK/lh7rjgYzlkKvjgb7jgozjgb7jgZnjgILkuIDoiKzmlL/lupzjgajjga/pgJrluLjjgIHlnLDmlrnoh6rmsrvkvZPjgIHlnLDln5/mlL/lupzjgIHkuK3lpK7mlL/lupzjgpLmjIfjgZfjgb7jgZnjgIIKClNjaG9vbCBlbnJvbGxtZW50LCBwcmltYXJ5ICglIGdyb3NzKe+8mlNFLlBSTS5FTlJSIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NFLlBSTS5FTlJSKV0KCkdyb3NzIGVucm9sbG1lbnQgcmF0aW8gaXMgdGhlIHJhdGlvIG9mIHRvdGFsIGVucm9sbG1lbnQsIHJlZ2FyZGxlc3Mgb2YgYWdlLCB0byB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgYWdlIGdyb3VwIHRoYXQgb2ZmaWNpYWxseSBjb3JyZXNwb25kcyB0byB0aGUgbGV2ZWwgb2YgZWR1Y2F0aW9uIHNob3duLiBQcmltYXJ5IGVkdWNhdGlvbiBwcm92aWRlcyBjaGlsZHJlbiB3aXRoIGJhc2ljIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBtYXRoZW1hdGljcyBza2lsbHMgYWxvbmcgd2l0aCBhbiBlbGVtZW50YXJ5IHVuZGVyc3RhbmRpbmcgb2Ygc3VjaCBzdWJqZWN0cyBhcyBoaXN0b3J5LCBnZW9ncmFwaHksIG5hdHVyYWwgc2NpZW5jZSwgc29jaWFsIHNjaWVuY2UsIGFydCwgYW5kIG11c2ljLgoKRGV2ZWxvcG1lbnQgUmVsZXZhbmNlOiBHcm9zcyBlbnJvbGxtZW50IHJhdGlvcyBpbmRpY2F0ZSB0aGUgY2FwYWNpdHkgb2YgZWFjaCBsZXZlbCBvZiB0aGUgZWR1Y2F0aW9uIHN5c3RlbSwgYnV0IGEgaGlnaCByYXRpbyBtYXkgcmVmbGVjdCBhIHN1YnN0YW50aWFsIG51bWJlciBvZiBvdmVyYWdlIGNoaWxkcmVuIGVucm9sbGVkIGluIGVhY2ggZ3JhZGUgYmVjYXVzZSBvZiByZXBldGl0aW9uIG9yIGxhdGUgZW50cnkgcmF0aGVyIHRoYW4gYSBzdWNjZXNzZnVsIGVkdWNhdGlvbiBzeXN0ZW0uIFRoZSBuZXQgZW5yb2xsbWVudCByYXRlIGV4Y2x1ZGVzIG92ZXJhZ2UgYW5kIHVuZGVyYWdlIHN0dWRlbnRzIGFuZCBtb3JlIGFjY3VyYXRlbHkgY2FwdHVyZXMgdGhlIHN5c3RlbSdzIGNvdmVyYWdlIGFuZCBpbnRlcm5hbCBlZmZpY2llbmN5LiBEaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBncm9zcyBlbnJvbGxtZW50IHJhdGlvIGFuZCB0aGUgbmV0IGVucm9sbG1lbnQgcmF0ZSBzaG93IHRoZSBpbmNpZGVuY2Ugb2Ygb3ZlcmFnZSBhbmQgdW5kZXJhZ2UgZW5yb2xsbWVudHMuCkxpbWl0YXRpb25zIGFuZCBFeGNlcHRpb25zOiBFbnJvbGxtZW50IGluZGljYXRvcnMgYXJlIGJhc2VkIG9uIGFubnVhbCBzY2hvb2wgc3VydmV5cywgYnV0IGRvIG5vdCBuZWNlc3NhcmlseSByZWZsZWN0IGFjdHVhbCBhdHRlbmRhbmNlIG9yIGRyb3BvdXQgcmF0ZXMgZHVyaW5nIHRoZSB5ZWFyLiBBbHNvLCB0aGUgbGVuZ3RoIG9mIGVkdWNhdGlvbiBkaWZmZXJzIGFjcm9zcyBjb3VudHJpZXMgYW5kIGNhbiBpbmZsdWVuY2UgZW5yb2xsbWVudCByYXRlcywgYWx0aG91Z2ggdGhlIEludGVybmF0aW9uYWwgU3RhbmRhcmQgQ2xhc3NpZmljYXRpb24gb2YgRWR1Y2F0aW9uIChJU0NFRCkgdHJpZXMgdG8gbWluaW1pemUgdGhlIGRpZmZlcmVuY2UuIEZvciBleGFtcGxlLCBhIHNob3J0ZXIgZHVyYXRpb24gZm9yIHByaW1hcnkgZWR1Y2F0aW9uIHRlbmRzIHRvIGluY3JlYXNlIHRoZSByYXRlOyBhIGxvbmdlciBvbmUgdG8gZGVjcmVhc2UgaXQgKGluIHBhcnQgYmVjYXVzZSBvbGRlciBjaGlsZHJlbiBhcmUgbW9yZSBhdCByaXNrIG9mIGRyb3BwaW5nIG91dCkuIE1vcmVvdmVyLCBhZ2UgYXQgZW5yb2xsbWVudCBtYXkgYmUgaW5hY2N1cmF0ZWx5IGVzdGltYXRlZCBvciBtaXNzdGF0ZWQsIGVzcGVjaWFsbHkgaW4gY29tbXVuaXRpZXMgd2hlcmUgcmVnaXN0cmF0aW9uIG9mIGJpcnRocyBpcyBub3Qgc3RyaWN0bHkgZW5mb3JjZWQuCkxvbmcgRGVmaW5pdGlvbjogR3Jvc3MgZW5yb2xsbWVudCByYXRpbyBpcyB0aGUgcmF0aW8gb2YgdG90YWwgZW5yb2xsbWVudCwgcmVnYXJkbGVzcyBvZiBhZ2UsIHRvIHRoZSBwb3B1bGF0aW9uIG9mIHRoZSBhZ2UgZ3JvdXAgdGhhdCBvZmZpY2lhbGx5IGNvcnJlc3BvbmRzIHRvIHRoZSBsZXZlbCBvZiBlZHVjYXRpb24gc2hvd24uIFByaW1hcnkgZWR1Y2F0aW9uIHByb3ZpZGVzIGNoaWxkcmVuIHdpdGggYmFzaWMgcmVhZGluZywgd3JpdGluZywgYW5kIG1hdGhlbWF0aWNzIHNraWxscyBhbG9uZyB3aXRoIGFuIGVsZW1lbnRhcnkgdW5kZXJzdGFuZGluZyBvZiBzdWNoIHN1YmplY3RzIGFzIGhpc3RvcnksIGdlb2dyYXBoeSwgbmF0dXJhbCBzY2llbmNlLCBzb2NpYWwgc2NpZW5jZSwgYXJ0LCBhbmQgbXVzaWMuCgpQZXJpb2RpY2l0eTogQW5udWFsClN0YXRpc3RpY2FsIENvbmNlcHQgYW5kIE1ldGhvZG9sb2d5OiBHcm9zcyBlbnJvbGxtZW50IHJhdGlvIGZvciBwcmltYXJ5IHNjaG9vbCBpcyBjYWxjdWxhdGVkIGJ5IGRpdmlkaW5nIHRoZSBudW1iZXIgb2Ygc3R1ZGVudHMgZW5yb2xsZWQgaW4gcHJpbWFyeSBlZHVjYXRpb24gcmVnYXJkbGVzcyBvZiBhZ2UgYnkgdGhlIHBvcHVsYXRpb24gb2YgdGhlIGFnZSBncm91cCB3aGljaCBvZmZpY2lhbGx5IGNvcnJlc3BvbmRzIHRvIHByaW1hcnkgZWR1Y2F0aW9uLCBhbmQgbXVsdGlwbHlpbmcgYnkgMTAwLiBEYXRhIG9uIGVkdWNhdGlvbiBhcmUgY29sbGVjdGVkIGJ5IHRoZSBVTkVTQ08gSW5zdGl0dXRlIGZvciBTdGF0aXN0aWNzIGZyb20gb2ZmaWNpYWwgcmVzcG9uc2VzIHRvIGl0cyBhbm51YWwgZWR1Y2F0aW9uIHN1cnZleS4gQWxsIHRoZSBkYXRhIGFyZSBtYXBwZWQgdG8gdGhlIEludGVybmF0aW9uYWwgU3RhbmRhcmQgQ2xhc3NpZmljYXRpb24gb2YgRWR1Y2F0aW9uIChJU0NFRCkgdG8gZW5zdXJlIHRoZSBjb21wYXJhYmlsaXR5IG9mIGVkdWNhdGlvbiBwcm9ncmFtcyBhdCB0aGUgaW50ZXJuYXRpb25hbCBsZXZlbC4gVGhlIGN1cnJlbnQgdmVyc2lvbiB3YXMgZm9ybWFsbHkgYWRvcHRlZCBieSBVTkVTQ08gTWVtYmVyIFN0YXRlcyBpbiAyMDExLiBQb3B1bGF0aW9uIGRhdGEgYXJlIGRyYXduIGZyb20gdGhlIFVuaXRlZCBOYXRpb25zIFBvcHVsYXRpb24gRGl2aXNpb24uIFVzaW5nIGEgc2luZ2xlIHNvdXJjZSBmb3IgcG9wdWxhdGlvbiBkYXRhIHN0YW5kYXJkaXplcyBkZWZpbml0aW9ucywgZXN0aW1hdGlvbnMsIGFuZCBpbnRlcnBvbGF0aW9uIG1ldGhvZHMsIGVuc3VyaW5nIGEgY29uc2lzdGVudCBtZXRob2RvbG9neSBhY3Jvc3MgY291bnRyaWVzIGFuZCBtaW5pbWl6aW5nIHBvdGVudGlhbCBlbnVtZXJhdGlvbiBwcm9ibGVtcyBpbiBuYXRpb25hbCBjZW5zdXNlcy4gVGhlIHJlZmVyZW5jZSB5ZWFycyByZWZsZWN0IHRoZSBzY2hvb2wgeWVhciBmb3Igd2hpY2ggdGhlIGRhdGEgYXJlIHByZXNlbnRlZC4gSW4gc29tZSBjb3VudHJpZXMgdGhlIHNjaG9vbCB5ZWFyIHNwYW5zIHR3byBjYWxlbmRhciB5ZWFycyAoZm9yIGV4YW1wbGUsIGZyb20gU2VwdGVtYmVyIDIwMTAgdG8gSnVuZSAyMDExKTsgaW4gdGhlc2UgY2FzZXMgdGhlIHJlZmVyZW5jZSB5ZWFyIHJlZmVycyB0byB0aGUgeWVhciBpbiB3aGljaCB0aGUgc2Nob29sIHllYXIgZW5kZWQgKDIwMTEgaW4gdGhlIGV4YW1wbGUpLgpUb3BpYzogRWR1Y2F0aW9uOiBQYXJ0aWNpcGF0aW9uCgrnt4/lsLHlrabnjofjga/jgIHlubTpvaLjgavplqLkv4LjgarjgY/jgIHooajnpLrjgZXjgozjgabjgYTjgovmlZnogrLjg6zjg5njg6vjgavmraPlvI/jgavlr77lv5zjgZnjgovlubTpvaLlsaTjga7kurrlj6Pjgavlr77jgZnjgovnt4/lsLHlrabogIXmlbDjga7mr5TnjofjgafjgZnjgILliJ3nrYnmlZnogrLjgafjga/jgIHlrZDkvpvjgZ/jgaHjgavln7rmnKznmoTjgaroqq3jgb/mm7jjgY3jgIHmlbDlrabjga7jgrnjgq3jg6vjgajjgIHmrbTlj7LjgIHlnLDnkIbjgIHoh6rnhLbnp5HlrabjgIHnpL7kvJrnp5HlrabjgIHoirjooZPjgIHpn7Pmpb3jgarjganjga7np5Hnm67jga7liJ3mrannmoTjgarnkIbop6PjgpLmj5DkvpvjgZfjgb7jgZnjgIIKCumWi+eZuuOBqOOBrumWoumAo+aAp++8miDnt4/lsLHlrabnjofjga/jgIHmlZnogrLjgrfjgrnjg4bjg6Djga7lkITjg6zjg5njg6vjga7og73lipvjgpLnpLrjgZnjgoLjga7jgafjgYLjgovjgYzjgIHpq5jjgYTmr5Tnjofjga/jgIHmlZnogrLjgrfjgrnjg4bjg6DjgYzjgYbjgb7jgY/mqZ/og73jgZfjgabjgYTjgovjgajjgYTjgYbjgojjgorjgoLjgIHlj43lvqnlrabnv5LjgoTlvozmnJ/lhaXlrabjga7jgZ/jgoHjgavjgIHlkITlrablubTjgavnm7jlvZPmlbDjga7pgY7lubTpvaLlhZDnq6XjgYzlnKjnsY3jgZfjgabjgYTjgovjgZPjgajjgpLlj43mmKDjgZfjgabjgYTjgovlj6/og73mgKfjgYzjgYLjgovjgILmraPlkbPlsLHlrabnjofjga/jgIHlubTpvaLotoXpgY7jgajlubTpvaLmnKrmuoDjga7nlJ/lvpLjgpLpmaTjgYTjgZ/jgoLjga7jgafjgIHliLbluqbjga7jgqvjg5Djg7znjofjgajlhoXpg6jlirnnjofjgpLjgojjgormraPnorrjgavmiormj6HjgZnjgovjgoLjga7jgafjgYLjgovjgILnt4/lsLHlrabnjofjgajntJTlsLHlrabnjofjga7lt67jga/jgIHpgY7lubTpvaLlhaXlrabjgajmnKrmiJDlubTlhaXlrabjga7nmbrnlJ/njofjgpLnpLrjgZfjgabjgYTjgovjgIIK6ZmQ55WM44Go5L6L5aSW77yaIOWcqOexjeeOh+OBruaMh+aomeOBr+avjuW5tOOBruWtpuagoeiqv+afu+OBq+WfuuOBpeOBhOOBpuOBhOOCi+OBjOOAgeW/heOBmuOBl+OCguOBneOBruW5tOOBruWun+mam+OBruWHuuW4reeOh+OChOmAgOWtpueOh+OCkuWPjeaYoOOBl+OBpuOBhOOCi+OCj+OBkeOBp+OBr+OBquOBhOOAguOBvuOBn+OAgeaVmeiCsuacn+mWk+OBr+WbveOBq+OCiOOBo+OBpueVsOOBquOCiuOAgeWwseWtpueOh+OBq+W9semfv+OCkuS4juOBiOOCi+WPr+iDveaAp+OBjOOBguOCi+OBjOOAgeWbvemam+aomea6luaVmeiCsuWIhumhnu+8iElTQ0VE77yJ44Gn44Gv44CB44Gd44Gu6YGV44GE44KS5pyA5bCP6ZmQ44Gr5oqR44GI44KI44GG44Go44GX44Gm44GE44KL44CC5L6L44GI44Gw44CB5Yid562J5pWZ6IKy44Gu5pyf6ZaT44GM55+t44GE44G744Gp5bCx5a2m546H44Gv5LiK5piH44GX44CB6ZW344GE44G744Gp5L2O5LiL44GZ44KL5YK+5ZCR44GM44GC44KL77yI5bm06ZW35YWQ44Gu5pa544GM5Lit6YCU6YCA5a2m44Gu44Oq44K544Kv44GM6auY44GE44GT44Go44KC5LiA5Zug77yJ44CC44GV44KJ44Gr44CB54m544Gr5Ye655Sf55m76Yyy44GM5Y6z5qC844Gr5a6f5pa944GV44KM44Gm44GE44Gq44GE5Zyw5Z+f44Gn44Gv44CB5bCx5a2m5pmC44Gu5bm06b2i44GM5LiN5q2j56K644Gr5o6o5a6a44GV44KM44Gf44KK44CB6Kqk44Gj44Gm6KiY6LyJ44GV44KM44Gf44KK44GZ44KL44GT44Go44KC44GC44KL44CCCumVt+OBhOWumue+qe+8miDnt4/lsLHlrabnjofvvIhHcm9zcyBlbnJvbGxtZW50IHJhdGlv77yJ44Go44Gv44CB5bm06b2i44Gr6Zai5L+C44Gq44GP44CB5pWZ6IKy44Os44OZ44Or44Gr5a++5b+c44GZ44KL5bm06b2i5bGk44Gu5Lq65Y+j44Gr5a++44GZ44KL57eP5bCx5a2m6ICF5pWw44Gu5Ymy5ZCI44Gn44GC44KL44CC5Yid562J5pWZ6IKy44Gv44CB5a2Q44Gp44KC44Gf44Gh44Gr5Z+65pys55qE44Gq6Kqt44G/5pu444GN44KS5o+Q5L6b44GZ44KL44CBIAoK5ZGo5pyf5oCn77yaIOW5tOasoQrntbHoqIjjga7mpoLlv7Xjgajmlrnms5Ug5Yid562J5pWZ6IKy44Gu57eP5bCx5a2m546H44Gv44CB5bm06b2i44Gr6Zai5L+C44Gq44GP5Yid562J5pWZ6IKy44Gr5bCx5a2m44GX44Gm44GE44KL55Sf5b6S5pWw44KS44CB5Yid562J5pWZ6IKy44Gr5q2j5byP44Gr5a++5b+c44GZ44KL5bm06b2i5bGk44Gu5Lq65Y+j44Gn5Ymy44KK44CBMTAw44KS5LmX44GY44Gm566X5Ye644GV44KM44KL44CC5pWZ6IKy44Gr6Zai44GZ44KL44OH44O844K/44Gv44CB44Om44ON44K544Kz57Wx6KiI56CU56m25omA44GM5bm05qyh5pWZ6IKy6Kq/5p+744G444Gu5YWs5byP5Zue562U44GL44KJ5Y+O6ZuG44GX44Gm44GE44KL44CC44GZ44G544Gm44Gu44OH44O844K/44Gv44CB5Zu96Zqb44Os44OZ44Or44Gn44Gu5pWZ6IKy44OX44Ot44Kw44Op44Og44Gu5q+U6LyD5Y+v6IO95oCn44KS56K65L+d44GZ44KL44Gf44KB44Gr44CB5Zu96Zqb5qiZ5rqW5pWZ6IKy5YiG6aGe77yISVNDRUTvvInjgavjg57jg4Pjg5Tjg7PjgrDjgZXjgozjgabjgYTjgovjgILnj77lnKjjga7jg5Djg7zjgrjjg6fjg7Pjga/jgIEyMDEx5bm044Gr44Om44ON44K544Kz5Yqg55uf5Zu944Gr44KI44Gj44Gm5q2j5byP44Gr5o6h5oqe44GV44KM44Gf44CC5Lq65Y+j44OH44O844K/44Gv44CB5Zu96YCj5Lq65Y+j6YOo44GL44KJ5Y+W5b6X44GX44Gf44KC44Gu44Gn44GC44KL44CC5Lq65Y+j44OH44O844K/44Gu5Ye65YW444KSMeOBpOOBq+OBmeOCi+OBk+OBqOOBp+OAgeWumue+qeOAgeaOqOioiOOAgeijnOmWk+aWueazleOBjOaomea6luWMluOBleOCjOOAgeWQhOWbvemWk+OBp+S4gOiyq+OBl+OBn+aWueazleirluOBjOS/neiovOOBleOCjOOCi+OBqOOBqOOCguOBq+OAgeWbveWLouiqv+afu+OBq+OBiuOBkeOCi+a9nOWcqOeahOOBqumbhuioiOS4iuOBruWVj+mhjOOCkuacgOWwj+mZkOOBq+aKkeOBiOOCi+OBk+OBqOOBjOOBp+OBjeOCi+OAguWfuua6luW5tOOBr+OAgeODh+ODvOOCv+OBjOaPkOekuuOBleOCjOOBpuOBhOOCi+WtpuW5tOOCkuWPjeaYoOOBl+OBpuOBhOOCi+OAguWbveOBq+OCiOOBo+OBpuOBr+OAgeWtpuW5tOOBjDLmmqblubTvvIjkvovjgYjjgbAyMDEw5bm0OeaciOOBi+OCiTIwMTHlubQ25pyI44G+44Gn77yJ44Gr44G+44Gf44GM44KL5aC05ZCI44GM44GC44KK44CB44Gd44Gu5aC05ZCI44Gv5a2m5bm044GM57WC5LqG44GX44Gf5bm077yI5L6L44Gn44GvMjAxMeW5tO+8ieOCkuWfuua6luW5tOOBqOOBl+OBpuOBhOOCi+OAggrjg4jjg5Tjg4Pjgq8g5pWZ6IKy77yaIOWPguWKoAoKRGVlcEwuY29t77yI54Sh5paZ54mI77yJ44Gn57+76Kiz44GX44G+44GX44Gf44CCCgoKClNjaG9vbCBlbnJvbGxtZW50LCBzZWNvbmRhcnkgKCUgZ3Jvc3Mp77yaU0UuU0VDLkVOUlIgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0UuU0VDLkVOUlIpXQoKR3Jvc3MgZW5yb2xsbWVudCByYXRpbyBpcyB0aGUgcmF0aW8gb2YgdG90YWwgZW5yb2xsbWVudCwgcmVnYXJkbGVzcyBvZiBhZ2UsIHRvIHRoZSBwb3B1bGF0aW9uIG9mIHRoZSBhZ2UgZ3JvdXAgdGhhdCBvZmZpY2lhbGx5IGNvcnJlc3BvbmRzIHRvIHRoZSBsZXZlbCBvZiBlZHVjYXRpb24gc2hvd24uIFNlY29uZGFyeSBlZHVjYXRpb24gY29tcGxldGVzIHRoZSBwcm92aXNpb24gb2YgYmFzaWMgZWR1Y2F0aW9uIHRoYXQgYmVnYW4gYXQgdGhlIHByaW1hcnkgbGV2ZWwsIGFuZCBhaW1zIGF0IGxheWluZyB0aGUgZm91bmRhdGlvbnMgZm9yIGxpZmVsb25nIGxlYXJuaW5nIGFuZCBodW1hbiBkZXZlbG9wbWVudCwgYnkgb2ZmZXJpbmcgbW9yZSBzdWJqZWN0LSBvciBza2lsbC1vcmllbnRlZCBpbnN0cnVjdGlvbiB1c2luZyBtb3JlIHNwZWNpYWxpemVkIHRlYWNoZXJzLgoK57eP5bCx5a2m546H44Gv44CB5bm06b2i44Gr6Zai5L+C44Gq44GP44CB6KGo56S644GV44KM44Gm44GE44KL5pWZ6IKy44Os44OZ44Or44Gr5q2j5byP44Gr5a++5b+c44GZ44KL5bm06b2i5bGk44Gu5Lq65Y+j44Gr5a++44GZ44KL57eP5bCx5a2m6ICF5pWw44Gu5q+U546H44Gn44GZ44CC5Lit562J5pWZ6IKy44Gv44CB5Yid562J5q616ZqO44GL44KJ5aeL44G+44Gj44Gf5Z+656SO5pWZ6IKy44Gu5o+Q5L6b44KS5a6M5LqG44GX44CB44KI44KK5bCC6ZaA5oCn44Gu6auY44GE5pWZ5bir44Gr44KI44KL44KI44KK5pWZ56eR44KE5oqA6IO944Gr54m55YyW44GX44Gf5oyH5bCO44KS6KGM44GG44GT44Go44Gr44KI44KK44CB55Sf5rav5a2m57+S44Go5Lq66ZaT5b2i5oiQ44Gu5Z+656SO44KS56+J44GP44GT44Go44KS55uu55qE44Go44GX44Gm44GE44G+44GZ44CCCgpTY2hvb2wgZW5yb2xsbWVudCwgdGVydGlhcnkgKCUgZ3Jvc3Mp77yaU0UuVEVSLkVOUlIgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0UuVEVSLkVOUlIpXQoKR3Jvc3MgZW5yb2xsbWVudCByYXRpbyBpcyB0aGUgcmF0aW8gb2YgdG90YWwgZW5yb2xsbWVudCwgcmVnYXJkbGVzcyBvZiBhZ2UsIHRvIHRoZSBwb3B1bGF0aW9uIG9mIHRoZSBhZ2UgZ3JvdXAgdGhhdCBvZmZpY2lhbGx5IGNvcnJlc3BvbmRzIHRvIHRoZSBsZXZlbCBvZiBlZHVjYXRpb24gc2hvd24uIFRlcnRpYXJ5IGVkdWNhdGlvbiwgd2hldGhlciBvciBub3QgdG8gYW4gYWR2YW5jZWQgcmVzZWFyY2ggcXVhbGlmaWNhdGlvbiwgbm9ybWFsbHkgcmVxdWlyZXMsIGFzIGEgbWluaW11bSBjb25kaXRpb24gb2YgYWRtaXNzaW9uLCB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGVkdWNhdGlvbiBhdCB0aGUgc2Vjb25kYXJ5IGxldmVsLgoK57eP5bCx5a2m546H44Gv44CB5bm06b2i44Gr6Zai5L+C44Gq44GP44CB6KGo56S644GV44KM44Gm44GE44KL5pWZ6IKy44Os44OZ44Or44Gr5q2j5byP44Gr5a++5b+c44GZ44KL5bm06b2i5bGk44Gu5Lq65Y+j44Gr5a++44GZ44KL57eP5bCx5a2m6ICF5pWw44Gu5q+U546H44Gn44GZ44CC6auY562J5pWZ6IKy44Gn44Gv44CB6auY5bqm44Gq56CU56m26LOH5qC844Gu5pyJ54Sh44Gr44GL44GL44KP44KJ44Ga44CB6YCa5bi444CB5YWl5a2m44Gu5pyA5L2O5p2h5Lu244Go44GX44Gm5Lit562J5pWZ6IKy44Os44OZ44Or44Gu5pWZ6IKy44KS54Sh5LqL44Gr5L+u5LqG44GZ44KL44GT44Go44GM5rGC44KB44KJ44KM44G+44GZ44CCCgoqKkhlYWx0aCoqCgpNb3J0YWxpdHkgcmF0ZSwgdW5kZXItNSAocGVyIDEsMDAwIGxpdmUgYmlydGhzKe+8mlNILkRZTi5NT1JUIFtbTGlua10oaHR0cHM6Ly9kYXRhYmFuay53b3JsZGJhbmsub3JnL21ldGFkYXRhZ2xvc3Nhcnkvd29ybGQtZGV2ZWxvcG1lbnQtaW5kaWNhdG9ycy9zZXJpZXMvU0guRFlOLk1PUlQpXQoKVW5kZXItZml2ZSBtb3J0YWxpdHkgcmF0ZSBpcyB0aGUgcHJvYmFiaWxpdHkgcGVyIDEsMDAwIHRoYXQgYSBuZXdib3JuIGJhYnkgd2lsbCBkaWUgYmVmb3JlIHJlYWNoaW5nIGFnZSBmaXZlLCBpZiBzdWJqZWN0IHRvIGFnZS1zcGVjaWZpYyBtb3J0YWxpdHkgcmF0ZXMgb2YgdGhlIHNwZWNpZmllZCB5ZWFyLgoKYGBgICAgICAgICAgCjUg5q2z5pyq5rqA5q275Lqh546H44Gv44CB5oyH5a6a44GV44KM44Gf5bm044Gu5bm06b2i5Yil5q275Lqh546H44GM6YGp55So44GV44KM44KL5aC05ZCI44Gr44CB5paw55Sf5YWQ44GMIDUg5q2z44Gr6YGU44GZ44KL5YmN44Gr5q275Lqh44GZ44KLIDEsMDAwIOS6uuOBguOBn+OCiuOBrueiuueOh+OBp+OBmeOAggpgYGAKCkluY2lkZW5jZSBvZiBISVYgKCUgb2YgdW5pbmZlY3RlZCBwb3B1bGF0aW9uIGFnZXMgMTUtNDkp77yaU0guSElWLklOQ0QuWlMgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0guSElWLklOQ0QuWlM/bG9jYXRpb25zPVNaKV0KCk51bWJlciBvZiBuZXcgSElWIGluZmVjdGlvbnMgYW1vbmcgdW5pbmZlY3RlZCBwb3B1bGF0aW9ucyBhZ2VzIDE1LTQ5IGV4cHJlc3NlZCBwZXIgMSwwMDAgdW5pbmZlY3RlZCBwb3B1bGF0aW9uIGluIHRoZSB5ZWFyIGJlZm9yZSB0aGUgcGVyaW9kLgoK5pyf6ZaT44Gu5YmN44Gu5bm06ZaT44Gu6Z2e5oSf5p+T5Lq65Y+jIDEsMDAwIOS6uuW9k+OBn+OCiuOBriAxNSDvvZ4gNDkg5q2z44Gu6Z2e5oSf5p+T6ZuG5Zuj44Gr44GK44GR44KL5paw6KaPIEhJViDmhJ/mn5PogIXmlbDjgIIKCioqR2VuZGVyKioKClNjaG9vbCBlbnJvbGxtZW50LCBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgKGdyb3NzKSwgZ2VuZGVyIHBhcml0eSBpbmRleCAoR1BJKe+8mlNFLkVOUi5QUlNDLkZNLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NFLkVOUi5QUlNDLkZNLlpTKV0KCkdlbmRlciBwYXJpdHkgaW5kZXggZm9yIGdyb3NzIGVucm9sbG1lbnQgcmF0aW8gaW4gcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IGVkdWNhdGlvbiBpcyB0aGUgcmF0aW8gb2YgZ2lybHMgdG8gYm95cyBlbnJvbGxlZCBhdCBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgbGV2ZWxzIGluIHB1YmxpYyBhbmQgcHJpdmF0ZSBzY2hvb2xzLgoK5Yid562J5Lit562J5pWZ6IKy44Gr44GK44GR44KL57eP5bCx5a2m546H44Gu55S35aWz5bmz562J5oyH5pWw44Gv44CB5YWs56uL44GK44KI44Gz56eB56uL5a2m5qCh44Gu5Yid562J44GK44KI44Gz5Lit562J5pWZ6IKy44Os44OZ44Or44Gr5Zyo57GN44GZ44KL5aWz5a2Q44Go55S35a2Q44Gu5q+U546H44Gn44GZ44CCCgpSYXRpbyBvZiBmZW1hbGUgdG8gbWFsZSBsYWJvciBmb3JjZSBwYXJ0aWNpcGF0aW9uIHJhdGUgKCUpIChtb2RlbGVkIElMTyBlc3RpbWF0ZSnvvJpTTC5UTEYuQ0FDVC5GTS5aUyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TTC5UTEYuQ0FDVC5GTS5aUyldCgpMYWJvciBmb3JjZSBwYXJ0aWNpcGF0aW9uIHJhdGUgaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gYWdlcyAxNSBhbmQgb2xkZXIgdGhhdCBpcyBlY29ub21pY2FsbHkgYWN0aXZlOiBhbGwgcGVvcGxlIHdobyBzdXBwbHkgbGFib3IgZm9yIHRoZSBwcm9kdWN0aW9uIG9mIGdvb2RzIGFuZCBzZXJ2aWNlcyBkdXJpbmcgYSBzcGVjaWZpZWQgcGVyaW9kLiBSYXRpbyBvZiBmZW1hbGUgdG8gbWFsZSBsYWJvciBmb3JjZSBwYXJ0aWNpcGF0aW9uIHJhdGUgaXMgY2FsY3VsYXRlZCBieSBkaXZpZGluZyBmZW1hbGUgbGFib3IgZm9yY2UgcGFydGljaXBhdGlvbiByYXRlIGJ5IG1hbGUgbGFib3IgZm9yY2UgcGFydGljaXBhdGlvbiByYXRlIGFuZCBtdWx0aXBseWluZyBieSAxMDAuCgrlirTlg43lj4LliqDnjofjgajjga/jgIHntYzmuIjnmoTjgavmtLvli5XjgZfjgabjgYTjgosgMTUg5q2z5Lul5LiK44Gu5Lq65Y+j44Gu5Ymy5ZCI44Gn44GC44KK44CB5oyH5a6a44GV44KM44Gf5pyf6ZaT44Gr5ZWG5ZOB44KE44K144O844OT44K544Gu55Sf55Sj44Gr5Yq05YON5Yqb44KS5L6b57Wm44GZ44KL44GZ44G544Gm44Gu5Lq644CF44KS5oyH44GX44G+44GZ44CC5aWz5oCn5Yq05YON5Yqb546H44Go55S35oCn5Yq05YON5Yqb546H44Gu5q+U546H44Gv44CB5aWz5oCn5Yq05YON5Yqb546H44KS55S35oCn5Yq05YON5Yqb546H44Gn5Ymy44Gj44GmMTAw44KS5LmX44GY44Gm566X5Ye644GX44G+44GZ44CCCgoqKkxhYm9yKioKClVuZW1wbG95bWVudCwgZmVtYWxlICglIG9mIGZlbWFsZSBsYWJvciBmb3JjZSkgKG1vZGVsZWQgSUxPIGVzdGltYXRlKe+8mlNMLlVFTS5UT1RMLkZFLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NMLlVFTS5UT1RMLkZFLlpTKV0KClVuZW1wbG95bWVudCByZWZlcnMgdG8gdGhlIHNoYXJlIG9mIHRoZSBsYWJvciBmb3JjZSB0aGF0IGlzIHdpdGhvdXQgd29yayBidXQgYXZhaWxhYmxlIGZvciBhbmQgc2Vla2luZyBlbXBsb3ltZW50LgoK5aSx5qWt546H44Go44Gv44CB5LuV5LqL44Gv44Gq44GP44Gm44KC6IG344Gr5bCx44GP44GT44Go44GM44Gn44GN44CB5rGC6IG344GX44Gm44GE44KL5Yq05YON5Yqb44Gu5Ymy5ZCI44KS5oyH44GX44G+44GZ44CCCgpVbmVtcGxveW1lbnQsIG1hbGUgKCUgb2YgbWFsZSBsYWJvciBmb3JjZSkgKG1vZGVsZWQgSUxPIGVzdGltYXRlKe+8mlNMLlVFTS5UT1RMLk1BLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NMLlVFTS5UT1RMLk1BLlpTKV0KClVuZW1wbG95bWVudCByZWZlcnMgdG8gdGhlIHNoYXJlIG9mIHRoZSBsYWJvciBmb3JjZSB0aGF0IGlzIHdpdGhvdXQgd29yayBidXQgYXZhaWxhYmxlIGZvciBhbmQgc2Vla2luZyBlbXBsb3ltZW50LgoK5aSx5qWt546H44Go44Gv44CB5LuV5LqL44Gv44Gq44GP44Gm44KC6IG344Gr5bCx44GP44GT44Go44GM44Gn44GN44CB5rGC6IG344GX44Gm44GE44KL5Yq05YON5Yqb44Gu5Ymy5ZCI44KS5oyH44GX44G+44GZ44CCCgpHbG9iYWwgTGluayAtIEFpZCBkZXBlbmRlbmN5CgpOZXQgb2ZmaWNpYWwgZGV2ZWxvcG1lbnQgYXNzaXN0YW5jZSBhbmQgb2ZmaWNpYWwgYWlkIHJlY2VpdmVkIChjdXJyZW50IFVTXCQpIERULk9EQS5BTExELkNEIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL0RULk9EQS5BTExELkNEKV0KCk5ldCBvZmZpY2lhbCBkZXZlbG9wbWVudCBhc3Npc3RhbmNlIChPREEpIGNvbnNpc3RzIG9mIGRpc2J1cnNlbWVudHMgb2YgbG9hbnMgbWFkZSBvbiBjb25jZXNzaW9uYWwgdGVybXMgKG5ldCBvZiByZXBheW1lbnRzIG9mIHByaW5jaXBhbCkgYW5kIGdyYW50cyBieSBvZmZpY2lhbCBhZ2VuY2llcyBvZiB0aGUgbWVtYmVycyBvZiB0aGUgRGV2ZWxvcG1lbnQgQXNzaXN0YW5jZSBDb21taXR0ZWUgKERBQyksIGJ5IG11bHRpbGF0ZXJhbCBpbnN0aXR1dGlvbnMsIGFuZCBieSBub24tREFDIGNvdW50cmllcyB0byBwcm9tb3RlIGVjb25vbWljIGRldmVsb3BtZW50IGFuZCB3ZWxmYXJlIGluIGNvdW50cmllcyBhbmQgdGVycml0b3JpZXMgaW4gdGhlIERBQyBsaXN0IG9mIE9EQSByZWNpcGllbnRzLiBJdCBpbmNsdWRlcyBsb2FucyB3aXRoIGEgZ3JhbnQgZWxlbWVudCBvZiBhdCBsZWFzdCAyNSBwZXJjZW50IChjYWxjdWxhdGVkIGF0IGEgcmF0ZSBvZiBkaXNjb3VudCBvZiAxMCBwZXJjZW50KS4gTmV0IG9mZmljaWFsIGFpZCByZWZlcnMgdG8gYWlkIGZsb3dzIChuZXQgb2YgcmVwYXltZW50cykgZnJvbSBvZmZpY2lhbCBkb25vcnMgdG8gY291bnRyaWVzIGFuZCB0ZXJyaXRvcmllcyBpbiBwYXJ0IElJIG9mIHRoZSBEQUMgbGlzdCBvZiByZWNpcGllbnRzOiBtb3JlIGFkdmFuY2VkIGNvdW50cmllcyBvZiBDZW50cmFsIGFuZCBFYXN0ZXJuIEV1cm9wZSwgdGhlIGNvdW50cmllcyBvZiB0aGUgZm9ybWVyIFNvdmlldCBVbmlvbiwgYW5kIGNlcnRhaW4gYWR2YW5jZWQgZGV2ZWxvcGluZyBjb3VudHJpZXMgYW5kIHRlcnJpdG9yaWVzLiBPZmZpY2lhbCBhaWQgaXMgcHJvdmlkZWQgdW5kZXIgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2ltaWxhciB0byB0aG9zZSBmb3IgT0RBLiBQYXJ0IElJIG9mIHRoZSBEQUMgTGlzdCB3YXMgYWJvbGlzaGVkIGluIDIwMDUuIFRoZSBjb2xsZWN0aW9uIG9mIGRhdGEgb24gb2ZmaWNpYWwgYWlkIGFuZCBvdGhlciByZXNvdXJjZSBmbG93cyB0byBQYXJ0IElJIGNvdW50cmllcyBlbmRlZCB3aXRoIDIwMDQgZGF0YS4gRGF0YSBhcmUgaW4gY3VycmVudCBVLlMuIGRvbGxhcnMuCgrmlL/lupzplovnmbrmj7TliqnvvIhPREHvvInjga7ntJTpoY3jga/jgIHplovnmbrmj7Tliqnlp5Tlk6HkvJrvvIhEQUPvvInjg6Hjg7Pjg5Djg7zjga7lhaznmoTmqZ/plqLjgIHlpJrlm73plpPmqZ/plqLjgIFEQUPpnZ7liqDnm5/lm73jgavjgojjgovjgIHorbLoqLHnmoTmnaHku7bvvIjlhYPmnKzov5TmuIjjgpLpmaTjgY/vvInjgafooYzjgo/jgozjgZ/ono3os4fjga7lrp/ooYzjgajliqnmiJDph5Hjgafmp4vmiJDjgZXjgozjgb7jgZnjgIIgREFDIOOBriBPREEg5Y+X6aCY6ICF44Oq44K544OI44Gr5ZCr44G+44KM44KL5Zu944GK44KI44Gz5Zyw5Z+f44Gu57WM5riI55m65bGV44Go56aP56WJ44KS5L+D6YCy44GZ44KL44CC44GT44KM44Gr44Gv44CB5bCR44Gq44GP44Go44KCIDI1IOODkeODvOOCu+ODs+ODiO+8iOWJsuW8leeOhyAxMCDjg5Hjg7zjgrvjg7Pjg4jjgafoqIjnrpfvvInjga7oo5zliqnph5HopoHntKDjgpLmjIHjgaTjg63jg7zjg7PjgYzlkKvjgb7jgozjgb7jgZnjgILntJTlhaznmoTmj7Tliqnjgajjga/jgIHlhaznmoTjg4njg4rjg7zjgYvjgolEQUPjga7lj5flj5bkurrjg6rjgrnjg4jjga7jg5Hjg7zjg4hJSeOBq+OBguOCi+WbveOBiuOCiOOBs+WcsOWfn+OBuOOBruaPtOWKqeOBrua1geOCjO+8iOi/lOa4iOmhjeOCkuW3ruOBl+W8leOBhOOBn+mhje+8ieOCkuaMh+OBl+OBvuOBme+8muS4reWkruOBiuOCiOOBs+adseODqOODvOODreODg+ODkeOBruOCiOOCiuWFiOmAsuWbveOAgeaXp+OCvemAo+iruOWbveOAgeOBiuOCiOOBs+S4gOmDqOOBruWFiOmAsumAlOS4iuWbveWbveOBqOWcsOWfn+OAguWFrOeahOaPtOWKqeOBr+OAgU9EQSDjgajlkIzmp5jjga7mnaHku7bjgafmj5DkvpvjgZXjgozjgb7jgZnjgIJEQUMg44Oq44K544OI44Gu44OR44O844OIIElJIOOBryAyMDA1IOW5tOOBq+W7g+atouOBleOCjOOBvuOBl+OBn+OAguODkeODvOODiCBJSSDoq7jlm73jgbjjga7lhaznmoTmj7TliqnjgYrjgojjgbPjgZ3jga7ku5bjga7os4fmupDjga7mtYHjgozjgavplqLjgZnjgovjg4fjg7zjgr/jga7lj47pm4bjga8gMjAwNCDlubTjga7jg4fjg7zjgr/jgafntYLkuobjgZfjgb7jgZfjgZ/jgILjg4fjg7zjgr/jga/nj77lnKjjga7nsbPjg4njg6vjgafooajnpLrjgZXjgozjgb7jgZnjgIIKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShXREkpCmBgYAoKYGBge3IgZXZhbCA9IEZBTFNFfQp3ZGljYWNoZSA8LSBXREljYWNoZSgpCndyaXRlX3Jkcyh3ZGljYWNoZSwgImRhdGEvd2RpY2FjaGUucmRzIikKYGBgCgpgYGB7cn0Kd2RpY2FjaGUgPC0gcmVhZF9yZHMoImRhdGEvd2RpY2FjaGUucmRzIikKYGBgCgpgYGB7cn0Kd2RpX2NvdW50cnkgPC0gd2RpY2FjaGUkY291bnRyeQpgYGAKCmBgYHtyfQp3ZGlfY291bnRyeSB8PiBmaWx0ZXIocmVnaW9uID09ICJBZ2dyZWdhdGVzIikgfD4gcHVsbChpc28yYykgfD4gZHB1dCgpCmBgYAoKIyMg5YaF5a65CgotICAgR292ZXJubWVudCBleHBlbmRpdHVyZSBvbiBlZHVjYXRpb24sIHRvdGFsICglIG9mIEdEUCnvvJpTRS5YUEQuVE9UTC5HRC5aUyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TRS5YUEQuVE9UTC5HRC5aUyldCgotICAgU2Nob29sIGVucm9sbG1lbnQsIHByaW1hcnkgKCUgZ3Jvc3Mp77yaU0UuUFJNLkVOUlIgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0UuUFJNLkVOUlIpXQoKLSAgIFNjaG9vbCBlbnJvbGxtZW50LCBzZWNvbmRhcnkgKCUgZ3Jvc3Mp77yaU0UuU0VDLkVOUlIgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0UuU0VDLkVOUlIpXQoKLSAgIFNjaG9vbCBlbnJvbGxtZW50LCB0ZXJ0aWFyeSAoJSBncm9zcynvvJpTRS5URVIuRU5SUiBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TRS5URVIuRU5SUildCgotICAgTW9ydGFsaXR5IHJhdGUsIHVuZGVyLTUgKHBlciAxLDAwMCBsaXZlIGJpcnRocynvvJpTSC5EWU4uTU9SVCBbW0xpbmtdKGh0dHBzOi8vZGF0YWJhbmsud29ybGRiYW5rLm9yZy9tZXRhZGF0YWdsb3NzYXJ5L3dvcmxkLWRldmVsb3BtZW50LWluZGljYXRvcnMvc2VyaWVzL1NILkRZTi5NT1JUKV0KCi0gICBTY2hvb2wgZW5yb2xsbWVudCwgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IChncm9zcyksIGdlbmRlciBwYXJpdHkgaW5kZXggKEdQSSnvvJpTRS5FTlIuUFJTQy5GTS5aUyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9TRS5FTlIuUFJTQy5GTS5aUyldCgotICAgUmF0aW8gb2YgZmVtYWxlIHRvIG1hbGUgbGFib3IgZm9yY2UgcGFydGljaXBhdGlvbiByYXRlICglKSAobW9kZWxlZCBJTE8gZXN0aW1hdGUp77yaU0wuVExGLkNBQ1QuRk0uWlMgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvU0wuVExGLkNBQ1QuRk0uWlMpXQoKLSAgIFVuZW1wbG95bWVudCwgZmVtYWxlICglIG9mIGZlbWFsZSBsYWJvciBmb3JjZSkgKG1vZGVsZWQgSUxPIGVzdGltYXRlKe+8mlNMLlVFTS5UT1RMLkZFLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NMLlVFTS5UT1RMLkZFLlpTKV0KCi0gICBVbmVtcGxveW1lbnQsIG1hbGUgKCUgb2YgbWFsZSBsYWJvciBmb3JjZSkgKG1vZGVsZWQgSUxPIGVzdGltYXRlKe+8mlNMLlVFTS5UT1RMLk1BLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL1NMLlVFTS5UT1RMLk1BLlpTKV0KCi0gICBOZXQgb2ZmaWNpYWwgZGV2ZWxvcG1lbnQgYXNzaXN0YW5jZSBhbmQgb2ZmaWNpYWwgYWlkIHJlY2VpdmVkIChjdXJyZW50IFVTXCQpIERULk9EQS5BTExELkNEIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL0RULk9EQS5BTExELkNEKV0KCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShXREkpCmBgYAoKYGBge3IgZXZhbD1GQUxTRX0KZGZfZWR1Y2F0aW9uIDwtIFdESSgKICBpbmRpY2F0b3IgPSBjKGVkdWNhdGlvbiA9ICJTRS5YUEQuVE9UTC5HRC5aUyIsCiAgICAgICAgICAgICAgICBwcmltYXJ5ID0gIlNFLlBSTS5FTlJSIiwKICAgICAgICAgICAgICAgIHNlY29uZGFyeSA9ICJTRS5TRUMuRU5SUiIsCiAgICAgICAgICAgICAgICB0ZXJ0aWFyeSA9ICJTRS5URVIuRU5SUiIsCiAgICAgICAgICAgICAgICB1bmRlcjUgPSAiU0guRFlOLk1PUlQiLAogICAgICAgICAgICAgICAgaGl2X3VuaW5mZWN0ZWQgPSAiU0guSElWLklOQ0QuWlMiLAogICAgICAgICAgICAgICAgZWR1X2dlbmRlciA9ICJTRS5FTlIuUFJTQy5GTS5aUyIsCiAgICAgICAgICAgICAgICBsYWJvcl9nZW5kZXIgPSAiU0wuVExGLkNBQ1QuRk0uWlMiLAogICAgICAgICAgICAgICAgdW5lbXBsb3lfZiA9ICJTTC5VRU0uVE9UTC5GRS5aUyIsCiAgICAgICAgICAgICAgICB1bmVtcGxveV9tID0gIlNMLlVFTS5UT1RMLkZFLlpTIiwKICAgICAgICAgICAgICAgIGFpZF9kZXBlbmRhbmN5ID0gIkRULk9EQS5BTExELkNEIiksIGV4dHJhID0gVFJVRSkKYGBgCgpgYGB7ciBldmFsPUZBTFNFfQp3cml0ZV9jc3YoZGZfZWR1Y2F0aW9uLCAiZGF0YS9lZHVjYXRpb24uY3N2IikKYGBgCgpgYGB7cn0KZGZfZWR1Y2F0aW9uIDwtIHJlYWRfY3N2KCJkYXRhL2VkdWNhdGlvbi5jc3YiKQpgYGAKCmBgYHtyfQpkZl9lZHVjYXRpb24gfD4gZmlsdGVyKGlzbzJjICVpbiUgUkVHSU9OKSB8PiBkaXN0aW5jdChjb3VudHJ5LCBpc28yYykKYGBgCgpgYGB7cn0KZGZfZWR1Y2F0aW9uX2xvbmcgPC0gZGZfZWR1Y2F0aW9uIHw+IAogIHBpdm90X2xvbmdlcig3OjE2LCBuYW1lc190byA9ICJuYW1lIiwgdmFsdWVzX3RvID0gInZhbHVlIikKYGBgCgpgYGB7cn0KZGZfZWR1Y2F0aW9uX2xvbmcgfD4gCiAgZ3JvdXBfYnkoeWVhciwgbmFtZSkgfD4gZHJvcF9uYSh2YWx1ZSkgfD4KICBzdW1tYXJpemUobnVtID0gbigpKSB8PiBhcnJhbmdlKGRlc2MoeWVhcikpCmBgYAoKYGBge3J9CmRmX2VkdWNhdGlvbl9sb25nIHw+IAogIGdyb3VwX2J5KHllYXIsIG5hbWUpIHw+IGRyb3BfbmEodmFsdWUpIHw+CiAgc3VtbWFyaXplKG51bSA9IG4oKSkgfD4gCiAgZ2dwbG90KGFlcyh5ZWFyLCBudW0sIGNvbCA9IG5hbWUpKSArIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIuWQhOaMh+aomeOBruW5tOavjuOBruODh+ODvOOCv+aVsCIsIHkgPSAi44OH44O844K/5pWwIiwgeCA9ICLlubQiKQpgYGAKCldvcmxkIERldmVsb3BtZW50IEluZGljYXRvcnM6IFtbTGlua10oaHR0cHM6Ly9kYXRhY2F0YWxvZy53b3JsZGJhbmsub3JnL3NlYXJjaC9kYXRhc2V0LzAwMzc3MTIvV29ybGQtRGV2ZWxvcG1lbnQtSW5kaWNhdG9ycyldCgojIyMgV29ybGQgKDFXKSwgU3ViLVNhaGFyYW4gQWZyaWNh44CAKGV4Y2x1ZGluZyBoaWdoIGluY29tZSkgKFpGKSwgYW5kIFN1Yi1TYWhhcmFuIEFmcmljYSAoWkcpCgpgYGB7cn0KZGZfZWR1Y2F0aW9uX2xvbmcgfD4gCiAgZmlsdGVyKG5hbWUgJWluJSBjKCJwcmltYXJ5IiwgInNlY29uZGFyeSIsICJ0ZXJ0aWFyeSIpKSB8PgogIGZpbHRlcihpc28yYyAlaW4lIGMoIjFXIiwgIlpGIiwgIlpHIikpIHw+IGRyb3BfbmEodmFsdWUpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sID0gbmFtZSwgbGluZXR5cGUgPSBpc28yYykpICsgZ2VvbV9saW5lKCkKYGBgCgpgYGB7cn0KZGZfZWR1Y2F0aW9uIHw+IGZpbHRlcih5ZWFyID09IDIwMjApIHw+IAogIHNlbGVjdChlZHVjYXRpb24sIHByaW1hcnksIHNlY29uZGFyeSwgdGVydGlhcnkpIHw+IAogIGRyb3BfbmEoKSB8PiBjb3IoKQpgYGAKCmBgYHtyfQpkZl9lZHVjYXRpb24gfD4gZmlsdGVyKGNvdW50cnkgPT0gIkphcGFuIikgfD4gYXJyYW5nZShkZXNjKHllYXIpKQpgYGAKCmBgYHtyfQpkZl9lZHVjYXRpb24gfD4gZmlsdGVyKHJlZ2lvbiAhPSAiQWdncmVnYXRlcyIpIHw+CiAgZmlsdGVyKHllYXIgPT0gMjAyMCkgfD4KICBkcm9wX25hKGVkdWNhdGlvbikgfD4gCiAgZ2dwbG90KGFlcyhlZHVjYXRpb24sIGZpbGwgPSByZWdpb24pKSArIGdlb21faGlzdG9ncmFtKGNvbCA9ICJibGFjayIsIGxpbmV3aWR0aCA9IDAuMSwgYmlud2lkdGggPSAxKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMy40MTY5ODEpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpCmBgYAoKYGBge3J9CmRmX2VkdWNhdGlvbiB8PiAKICBmaWx0ZXIoY291bnRyeSAlaW4lIGMoIldvcmxkIiwgIkphcGFuIiwgIlNvdXRoIEFmcmljYSIpKSB8PgogIGRyb3BfbmEoZWR1Y2F0aW9uKSB8PgogIGdncGxvdChhZXMoeWVhciwgZWR1Y2F0aW9uLCBjb2wgPSBjb3VudHJ5KSkgKyBnZW9tX2xpbmUoKSAKYGBgCgpgYGB7cn0KZGZfZWR1Y2F0aW9uIHw+IAogIGZpbHRlcihjb3VudHJ5ICVpbiUgYygiV29ybGQiLCAiSmFwYW4iLCAiS29yZWEsIFJlcC4iLCAiQ2hpbmEiKSkgfD4KICBkcm9wX25hKGVkdWNhdGlvbikgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIGVkdWNhdGlvbiwgY29sID0gY291bnRyeSkpICsgZ2VvbV9saW5lKCkgCmBgYAoKIyMjIOa6luWCmQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KFdESSkKYGBgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMjIyDjg4fjg7zjgr/jga7oqq3jgb/ovrzjgb/vvIhpbXBvcnRpbmfvvIkKCmBgYHtyIGV2YWwgPSBGQUxTRX0KZGZfcG92ZXJ0eV9pbmVxdWFsaXR5IDwtIFdESSgKICBpbmRpY2F0b3IgPSBjKGdpbmkgPSAiU0kuUE9WLkdJTkkiLAogICAgICAgICAgICAgICAgdW5kZXJfNi44NSA9ICJTSS5QT1YuVU1JQyIsCiAgICAgICAgICAgICAgICBlZF9leHAgPSAiU0UuWFBELlRPVEwuR0QuWlMiLAogICAgICAgICAgICAgICAgcHJpbWFyeSA9ICJTRS5QUk0uRU5SUiIsCiAgICAgICAgICAgICAgICBzZWNvbmRhcnkgPSAiU0UuU0VDLkVOUlIiLAogICAgICAgICAgICAgICAgdGVydGlhcnkgPSAiU0UuVEVSLkVOUlIiLAogICAgICAgICAgICAgICAgdW5kZXI1ID0gIlNILkRZTi5NT1JUIiwKICAgICAgICAgICAgICAgIG5ld19oaXYgPSAiU0guSElWLklOQ0QuWlMiLAogICAgICAgICAgICAgICAgc2Nob29sX2dwaSA9ICJTRS5FTlIuUFJTQy5GTS5aUyIsCiAgICAgICAgICAgICAgICBqb2JfZ3BpID0gIlNMLlRMRi5DQUNULkZNLlpTIiwKICAgICAgICAgICAgICAgIGZlbWFsZV91bmVtcGxveSA9ICJTTC5VRU0uVE9UTC5GRS5aUyIsCiAgICAgICAgICAgICAgICBtYWxlX3VuZW1wbG95ID0gIlNMLlVFTS5UT1RMLkZFLlpTIiwKICAgICAgICAgICAgICAgIG9kYSA9ICJEVC5PREEuQUxMRC5DRCIpLCBleHRyYSA9IFRSVUUpCmBgYAoKIyMjIyDkv53lrZjjgajoqq3jgb/ovrzjgb8KCu+8kuWbnuebruOBi+OCieOBr+OAgWBkYXRhYCDjgYvjgonoqq3jgb/ovrzjgoHjgovjgojjgYbjgavjgZfjgabjgYrjgY3jgb7jgZnjgIIKCioqKuacgOWIneOBru+8keWbnuebruOBr+OAgeOBi+OBquOCieOBmuWun+ihjOOBl+OBpuOBj+OBoOOBleOBhOOAgioqKgoKYGBge3IgZXZhbCA9IEZBTFNFfQp3cml0ZV9jc3YoZGZfcG92ZXJ0eV9pbmVxdWFsaXR5LCAiZGF0YS9wb3ZlcnR5X2luZXF1YWxpdHkuY3N2IikKYGBgCgpgYGB7cn0KZGZfcG92ZXJ0eV9pbmVxdWFsaXR5IDwtIHJlYWRfY3N2KCJkYXRhL3BvdmVydHlfaW5lcXVhbGl0eS5jc3YiKQpgYGAKCmBgYHtyfQp3ZGljYWNoZSA8LSByZWFkX3JkcygiZGF0YS93ZGljYWNoZS5yZHMiKQp3ZGljYWNoZSRjb3VudHJ5IHw+IGZpbHRlcihyZWdpb24gPT0gIkFnZ3JlZ2F0ZXMiKSB8PiBhcnJhbmdlKGlzbzJjKSB8PiBwdWxsKGlzbzJjKSB8PiBkcHV0KCkKYGBgCgpgYGB7cn0KUkVHSU9OUyA8LSBjKCIxQSIsICIxVyIsICI0RSIsICI2RiIsICI2TiIsICI2WCIsICI3RSIsICI4UyIsICJBNCIsICJBNSIsIAoiQTkiLCAiQjEiLCAiQjIiLCAiQjMiLCAiQjQiLCAiQjYiLCAiQjciLCAiQjgiLCAiQzQiLCAiQzUiLCAiQzYiLCAKIkM3IiwgIkM4IiwgIkM5IiwgIkQyIiwgIkQzIiwgIkQ0IiwgIkQ1IiwgIkQ2IiwgIkQ3IiwgIkVVIiwgIkYxIiwgCiJGNiIsICJNMSIsICJNMiIsICJONiIsICJPRSIsICJSNiIsICJTMSIsICJTMiIsICJTMyIsICJTNCIsICJUMiIsIAoiVDMiLCAiVDQiLCAiVDUiLCAiVDYiLCAiVDciLCAiVjEiLCAiVjIiLCAiVjMiLCAiVjQiLCAiWEMiLCAiWEQiLCAKIlhFIiwgIlhGIiwgIlhHIiwgIlhIIiwgIlhJIiwgIlhKIiwgIlhMIiwgIlhNIiwgIlhOIiwgIlhPIiwgIlhQIiwgCiJYUSIsICJYVCIsICJYVSIsICJYWSIsICJaNCIsICJaNyIsICJaQiIsICJaRiIsICJaRyIsICJaSCIsICJaSSIsIAoiWkoiLCAiWlEiLCAiWlQiKQpgYGAKCmBgYHtyfQpsZW5ndGgoUkVHSU9OUykKYGBgCgpgYGB7cn0Kd2RpY2FjaGUkY291bnRyeSB8PiBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTlMpKQpgYGAKCmBgYHtyfQpSRUdJT04gPC0gYygiMUEiLCAiMVciLCAiNEUiLCAiN0UiLCAiOFMiLCAiQjgiLCAiRVUiLCAiRjEiLCAiT0UiLCAiUzEiLCAKIlMyIiwgIlMzIiwgIlM0IiwgIlQyIiwgIlQzIiwgIlQ0IiwgIlQ1IiwgIlQ2IiwgIlQ3IiwgIlYxIiwgIlYyIiwgCiJWMyIsICJWNCIsICJYQyIsICJYRCIsICJYRSIsICJYRiIsICJYRyIsICJYSCIsICJYSSIsICJYSiIsICJYTCIsIAoiWE0iLCAiWE4iLCAiWE8iLCAiWFAiLCAiWFEiLCAiWFQiLCAiWFUiLCAiWFkiLCAiWjQiLCAiWjciLCAiWkYiLCAKIlpHIiwgIlpIIiwgIlpJIiwgIlpKIiwgIlpRIiwgIlpUIikKYGBgCgojIyMg44OH44O844K/44KS6KaL44Gm44G/44KI44GGICh2aWV3aW5nKQoKYGBge3J9CmRmX3BvdmVydHlfaW5lcXVhbGl0eSB8PiBmaWx0ZXIoaXNvMmMgJWluJSBSRUdJT04pIHw+IGRpc3RpbmN0KGNvdW50cnksIGlzbzJjKQpgYGAKCmBgYHtyfQpkZl9wb3ZlcnR5X2luZXF1YWxpdHkgfD4gZmlsdGVyKCEoaXNvMmMgJWluJSBSRUdJT04pKSB8PiBkaXN0aW5jdChjb3VudHJ5LCBpc28yYykKYGBgCgojIyMg5aSJ5pWw44Gu6YG45oqe77yIc2VsZWN0aW5n77yJCgpgYGB7cn0KZGZfcG92X2luZXEgPC0gZGZfcG92ZXJ0eV9pbmVxdWFsaXR5IHw+IHNlbGVjdChjb3VudHJ5LCBpc28yYywgeWVhciwgZ2luaTpvZGEsIHJlZ2lvbiwgaW5jb21lLCBsZW5kaW5nKQpgYGAKCiMjIyDlpInlvaLvvIhXaWRlIHRvIExvbmcgRGF0Ye+8iQoK44GE44GP44Gk44KC44Gu5oyH5qiZ44KS5ZCM5pmC44Gr44GE44GP44Gk44GL6YG45oqe44GX5q+U6LyD44GX44Gf44GE44Gu44Gn44CB5LiA44Gk44Gu5YiX77yI5aSJ5pWw77yJ44Gr44Gq44KJ44G544Gf44CB57im6ZW344OH44O844K/77yIbG9uZyBkYXRh77yJ44KC5L2c5oiQ44GX44Gm44GK44GN44G+44GZ44CCCgpgcGl2b3RfbG9uZ2VyKGdpbmk6b2RhKWAKCuOBk+OBk+OBp+OBr+OAgWByYXRpb2Ag44GL44KJIGB1bmRlcl82Ljg1YCDjgpLjgIFgbGV2ZWxgIOOBqOOBhOOBhuWQjeWJjeOBruWIl+OBq+OBquOCieOBueOAgeWApOOCkiBgdmFsdWVgIOOBqOOBhOOBhuWIl+OBq+S4puOBueOCi+OCiOOBhuOBq+OBl+OBpuOBguOCiuOBvuOBmeOAggoK56K66KqN44GZ44KL44Go44GN44Gv44CBdmFsdWUg44GMIE5BIOOBruOCguOBruOBr+mZpOOBjeOAgWNvdW50cnkg44Go44CBaXNvMmMg44Go44CBbGV2ZWwg44GoIHZhbHVlIOOBrumDqOWIhuOBoOOBkeWPluOCiuWHuuOBl+OBpueiuuiqjeOBl+OBpuOBhOOBvuOBmeOAggoKYGBge3J9CmRmX3Bvdl9pbmVxX2xvbmcgPC0gZGZfcG92X2luZXEgfD4gcGl2b3RfbG9uZ2VyKGdpbmk6b2RhKQpgYGAKCiMjIyDlubTmr47jga7jg4fjg7zjgr/jga7mlbDjga7norroqo3vvIhudW1iZXIgb2YgZGF0YSBpbiBlYWNoIHllYXLvvIkKCmBgYHtyfQpkZl9wb3ZfaW5lcV9sb25nIHw+IGRyb3BfbmEodmFsdWUpIHw+IAogIGdyb3VwX2J5KHllYXIsIG5hbWUpIHw+IHN1bW1hcml6ZShuID0gbigpKSB8PiBhcnJhbmdlKGRlc2MoeWVhcikpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIyMg5aSJ5pWw5ZCM5aOr44Gu55u46Zai6Zai5L+CIC0g55u46Zai5L+C5pWwCgpgYGB7cn0KZGZfcG92X2luZXEgfD4gZHJvcF9uYShnaW5pOm9kYSkgfD4gZmlsdGVyKGluY29tZSAlaW4lIGMoIkxvdyBpbmNvbWUiLCAiTG93ZXIgbWlkZGxlIGluY29tZSIpKSB8PiBzZWxlY3QoZ2luaTpvZGEpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7cn0KY29yKGNhcnMkc3BlZWQsY2FycyRkaXN0KQpgYGAKCmBgYHtyIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTd9CmNhcnMgfD4gZ2dwbG90KGFlcyhzcGVlZCwgZGlzdCkpICsgZ2VvbV9wb2ludCgpICsgCiAgZ2VvbV9zbW9vdGgoZm9ybXVsYSA9ICd5fngnLG1ldGhvZCA9ICJsbSIsIHNlPUZBTFNFKQpgYGAKCioq55u46Zai5L+C5pWw77yaKirnm7Tnt5rjga7lgr7jgY3jgYzmraPjgarjgonmraPjgIHosqDjgarjgonosqDjgIHnm7Tnt5rjgavov5HjgYTnqIvjgIExIOOBvuOBn+OBry0xIOOBq+i/keOBhAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojIyMg5aSJ5pWw55u45LqS44Gu55u46Zai5L+C5pWw44KS5LiA5bqm44Gr5rGC44KB44KLCgpgYGB7ciBlY2hvPVRSVUUsIGV2YWw9RkFMU0V9CmRmX3Bvdl9pbmVxIHw+IGRyb3BfbmEoZ2luaTpvZGEpIHw+IHNlbGVjdChnaW5pOm9kYSkgfD4gY29yKCkgfD4gCiAgcm91bmQoZGlnaXRzID0gMikgfD4gYXMuZGF0YS5mcmFtZSgpCmBgYAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpgYGB7ciBlY2hvPUZBTFNFfQpkZl9wb3ZfaW5lcSB8PiBkcm9wX25hKGdpbmk6b2RhKSB8PiBmaWx0ZXIoaW5jb21lICVpbiUgYygiTG93IGluY29tZSIsICJMb3dlciBtaWRkbGUgaW5jb21lIikpIHw+IHNlbGVjdChnaW5pOm9kYSkgfD4gY29yKCkgfD4gCiAgcm91bmQoZGlnaXRzID0gMikgfD4gYXMuZGF0YS5mcmFtZSgpCmBgYAoKCmBgYHtyfQpkZl9wb3ZfaW5lcSB8PiBkcm9wX25hKGdpbmk6b2RhKSB8PiBmaWx0ZXIoaW5jb21lICVpbiUgYygiTG93IGluY29tZSIsICJMb3dlciBtaWRkbGUgaW5jb21lIikpfD4gCiAgZ2dwbG90KGFlcyhnaW5pLCBwcmltYXJ5KSkgKyBnZW9tX3BvaW50KGFlcyhjb2wgPSBpbmNvbWUpKSArIAogIGdlb21fc21vb3RoKGZvcm11bGEgPSAneX54JywgbWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiY29yKGdpbmkscHJpbWFyeSkgPSAwLjE2IikKYGBgCgpgYGB7cn0KZGZfcG92X2luZXEgfD4gZHJvcF9uYShnaW5pOm9kYSkgfD4gZmlsdGVyKGluY29tZSAlaW4lIGMoIkxvdyBpbmNvbWUiLCAiTG93ZXIgbWlkZGxlIGluY29tZSIpKXw+CiAgZ2dwbG90KGFlcyhnaW5pLCB0ZXJ0aWFyeSkpICsgZ2VvbV9wb2ludChhZXMoY29sID0gaW5jb21lKSkgKyAKICBnZW9tX3Ntb290aChmb3JtdWxhID0gJ3l+eCcsIG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gImNvcihnaW5pLHRlcnRpYXJ5KSA9IC0wLjUxIikKYGBgCgpgYGB7cn0KZGZfcG92X2luZXEgfD4gZHJvcF9uYShnaW5pOm9kYSkgfD4gZmlsdGVyKGluY29tZSAlaW4lIGMoIkxvdyBpbmNvbWUiLCAiTG93ZXIgbWlkZGxlIGluY29tZSIpKSB8PgogIGdncGxvdChhZXModW5kZXJfNi44NSwgdGVydGlhcnkpKSArIGdlb21fcG9pbnQoYWVzKGNvbCA9IGluY29tZSkpICsgCiAgZ2VvbV9zbW9vdGgoZm9ybXVsYSA9ICd5fngnLCBtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJjb3IodW5kZXJfNi44NSx0ZXJ0aWFyeSkgPSAtMC43NiIpCmBgYAoKYGBge3J9CmRmX3Bvdl9pbmVxIHw+IGRyb3BfbmEoZ2luaTpvZGEpIHw+IGZpbHRlcihpbmNvbWUgJWluJSBjKCJMb3cgaW5jb21lIiwgIkxvd2VyIG1pZGRsZSBpbmNvbWUiKSkgfD4KICBnZ3Bsb3QoYWVzKHVuZGVyXzYuODUsIHVuZGVyNSkpICsgZ2VvbV9wb2ludChhZXMoY29sID0gaW5jb21lKSkgKyAKICBnZW9tX3Ntb290aChmb3JtdWxhID0gJ3l+eCcsIG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gImNvcih1bmRlcl82Ljg1LHVuZGVyNSkgPSAwLjY0IikKYGBgCg==