Country
Currency (Abbr)
🏷️ Latest Price
💵 USD under /over
⏱️ Historical Data
Local
Dollar
Raw
Adjusted
2000 → 2011 → 2020 Raw
2011 → 2020 Adjusted
Switzerland
Franc (CHF )
SFr.6.50
$6.91
20.9%
4.3%
United States
Dollar (USD )
$5.71
$5.71
0.0%
0.0%
Canada
Dollar (CAD )
$6.88
$5.08
−11.1%
2.3%
Euro area
Euro (EUR )
€4.21
$4.79
−16.2%
2.0%
Australia
Dollar (AUD )
$6.55
$4.58
−19.8%
−15.5%
Brazil
Real (BRL )
R$20.90
$3.91
−31.5%
19.1%
South Korea
Won (KRW )
₩4,500
$3.75
−34.4%
−14.5%
Saudi Arabia
Riyal (SAR )
SR14.00
$3.73
−34.6%
−5.3%
Japan
Yen (JPY )
¥390
$3.64
−36.3%
−21.8%
Argentina
Peso (ARS )
$250.00
$3.51
−38.5%
3.0%
China
Renminbi (CNY )
¥21.70
$3.10
−45.7%
−6.5%
India
Rupee (INR )
₹190.00
$2.53
−55.8%
−15.1%
Indonesia
Rupiah (IDR )
Rp34,000.00
$2.36
−58.8%
−23.0%
Mexico
Peso (MXN )
Mex$50.00
$2.23
−61.0%
−33.0%
Turkey
Lira (TRY )
₺13.99
$2.04
−64.3%
−38.3%
Russia
Ruble (RUB )
₽135.00
$1.91
−66.5%
−43.6%
South Africa
Rand (ZAR )
R31.00
$1.86
−67.4%
−41.3%
Source:
The Economist: The Big Mac Index introduced in 1986 as a semi-humorous illustration of PPP and has been published since then.
The Economist Big Mac index
Data and methodology
R Session Information
- Session info ---------------------------------------------------------------
setting value
version R version 4.0.2 (2020-06-22)
os Windows 10 x64
system x86_64, mingw32
ui RTerm
language (EN)
collate English_United States.1252
ctype English_United States.1252
tz America/Los_Angeles
date 2020-10-28
- Packages -------------------------------------------------------------------
package * version date lib source
assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2)
backports 1.1.10 2020-09-15 [1] CRAN (R 4.0.2)
blob 1.2.1 2020-01-20 [1] CRAN (R 4.0.2)
broom 0.7.1 2020-10-02 [1] CRAN (R 4.0.2)
callr 3.5.1 2020-10-13 [1] CRAN (R 4.0.2)
cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.0.2)
checkmate 2.0.0 2020-02-06 [1] CRAN (R 4.0.2)
cli 2.1.0 2020-10-12 [1] CRAN (R 4.0.2)
clipr 0.7.1 2020-10-08 [1] CRAN (R 4.0.2)
colorspace 1.4-1 2019-03-18 [1] CRAN (R 4.0.2)
countrycode * 1.2.0 2020-05-22 [1] CRAN (R 4.0.2)
crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.2)
curl 4.3 2019-12-02 [1] CRAN (R 4.0.2)
data.table 1.13.0 2020-07-24 [1] CRAN (R 4.0.2)
DBI 1.1.0 2019-12-15 [1] CRAN (R 4.0.2)
dbplyr 1.4.4 2020-05-27 [1] CRAN (R 4.0.2)
desc 1.2.0 2018-05-01 [1] CRAN (R 4.0.2)
details 0.2.1 2020-01-12 [1] CRAN (R 4.0.2)
devtools 2.3.2 2020-09-18 [1] CRAN (R 4.0.2)
digest 0.6.25 2020-02-23 [1] CRAN (R 4.0.2)
dplyr * 1.0.2 2020-08-18 [1] CRAN (R 4.0.2)
echarts4r * 0.3.3 2020-09-30 [1] Github (JohnCoene/echarts4r@bd45d50)
ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.2)
evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.2)
fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.2)
farver 2.0.3 2020-01-16 [1] CRAN (R 4.0.2)
fastmap 1.0.1 2019-10-08 [1] CRAN (R 4.0.2)
forcats * 0.5.0 2020-03-01 [1] CRAN (R 4.0.2)
foreign 0.8-80 2020-05-24 [1] CRAN (R 4.0.2)
fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
generics 0.0.2 2018-11-29 [1] CRAN (R 4.0.2)
ggplot2 * 3.3.2 2020-06-19 [1] CRAN (R 4.0.2)
glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
gt * 0.2.2 2020-10-09 [1] Github (rstudio/gt@6a791b5)
gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.2)
haven 2.3.1 2020-06-01 [1] CRAN (R 4.0.2)
hms 0.5.3 2020-01-08 [1] CRAN (R 4.0.2)
htmltools * 0.5.0 2020-06-16 [1] CRAN (R 4.0.2)
htmlwidgets 1.5.2 2020-10-03 [1] CRAN (R 4.0.2)
httpuv 1.5.4 2020-06-06 [1] CRAN (R 4.0.2)
httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2)
jsonlite 1.7.1 2020-09-07 [1] CRAN (R 4.0.2)
knitr 1.30 2020-09-22 [1] CRAN (R 4.0.2)
later 1.1.0.1 2020-06-05 [1] CRAN (R 4.0.2)
lifecycle 0.2.0 2020-03-06 [1] CRAN (R 4.0.2)
lubridate * 1.7.9 2020-06-08 [1] CRAN (R 4.0.2)
magrittr 1.5 2014-11-22 [1] CRAN (R 4.0.2)
memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.2)
mime 0.9 2020-02-04 [1] CRAN (R 4.0.0)
modelr 0.1.8 2020-05-19 [1] CRAN (R 4.0.2)
munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.2)
openxlsx 4.2.2 2020-09-17 [1] CRAN (R 4.0.2)
pillar 1.4.6 2020-07-10 [1] CRAN (R 4.0.2)
pkgbuild 1.1.0 2020-07-13 [1] CRAN (R 4.0.2)
pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.2)
pkgload 1.1.0 2020-05-29 [1] CRAN (R 4.0.2)
png 0.1-7 2013-12-03 [1] CRAN (R 4.0.0)
prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.2)
processx 3.4.4 2020-09-03 [1] CRAN (R 4.0.2)
promises 1.1.1 2020-06-09 [1] CRAN (R 4.0.2)
ps 1.4.0 2020-10-07 [1] CRAN (R 4.0.2)
purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.0.2)
R6 2.4.1 2019-11-12 [1] CRAN (R 4.0.2)
Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.2)
readr * 1.4.0 2020-10-05 [1] CRAN (R 4.0.2)
readxl 1.3.1 2019-03-13 [1] CRAN (R 4.0.2)
remotes 2.2.0 2020-07-21 [1] CRAN (R 4.0.2)
reprex 0.3.0 2019-05-16 [1] CRAN (R 4.0.2)
rio * 0.5.16 2018-11-26 [1] CRAN (R 4.0.2)
rlang 0.4.8 2020-10-08 [1] CRAN (R 4.0.2)
rmarkdown 2.4 2020-09-30 [1] CRAN (R 4.0.2)
rprojroot 1.3-2 2018-01-03 [1] CRAN (R 4.0.2)
rstudioapi 0.11 2020-02-07 [1] CRAN (R 4.0.2)
rvest 0.3.6 2020-07-25 [1] CRAN (R 4.0.2)
scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.2)
selectr 0.4-2 2019-11-20 [1] CRAN (R 4.0.2)
sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.2)
shiny 1.5.0 2020-06-23 [1] CRAN (R 4.0.2)
stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2)
stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.0.2)
testthat 2.3.2 2020-03-02 [1] CRAN (R 4.0.2)
tibble * 3.0.4 2020-10-12 [1] CRAN (R 4.0.2)
tidyr * 1.1.2 2020-08-27 [1] CRAN (R 4.0.2)
tidyselect 1.1.0 2020-05-11 [1] CRAN (R 4.0.2)
tidyverse * 1.3.0 2019-11-21 [1] CRAN (R 4.0.2)
usethis 1.6.3 2020-09-17 [1] CRAN (R 4.0.2)
vctrs 0.3.4 2020-08-29 [1] CRAN (R 4.0.2)
withr 2.3.0 2020-09-22 [1] CRAN (R 4.0.2)
xfun 0.18 2020-09-29 [1] CRAN (R 4.0.2)
xml2 * 1.3.2 2020-04-23 [1] CRAN (R 4.0.2)
xtable 1.8-4 2019-04-21 [1] CRAN (R 4.0.2)
yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.0)
zip 2.1.1 2020-08-27 [1] CRAN (R 4.0.2)
[1] C:/R/R-4.0.2/library
LS0tDQp0aXRsZTogICAiPGg0PiA8YSBocmVmPSdodHRwczovL2Jsb2cucnN0dWRpby5jb20vMjAyMC8wOS8xNS9hbm5vdW5jaW5nLXRoZS0yMDIwLXJzdHVkaW8tdGFibGUtY29udGVzdC8nPiAyMDIwIFJTdHVkaW8gVGFibGUgQ29udGVzdCBTdWJtaXNzaW9uIDwvYT4gYnkgQS4gQ2FsYXRyb25pLCBTLiBMdXNzaWVyICYgUi4gS3JvdXNlIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9hZ3N0bi9SU3R1ZGlvX3RhYmxlX2NvbnRlc3RfMjAyMCc+IDxpIGNsYXNzPSdmYSBmYS1naXRodWInPjwvaT4gUmVwbyA8L2E+Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHNlbGZfY29udGFpbmRlZDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogbm9uZSAjIG5vbmUgaGlkZSBzaG93DQogICAgdG9jOiBmYWxzZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBjb21tZW50ID0gTkEsIGluY2x1ZGUgPSBGQUxTRSkNCmtuaXRyOjpvcHRzX2NodW5rJHNldChjYWNoZSA9IEZBTFNFKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJpbykNCmxpYnJhcnkobHVicmlkYXRlKQ0KIyBkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoInJzdHVkaW8vZ3QiKQ0KbGlicmFyeShndCkNCmxpYnJhcnkoY291bnRyeWNvZGUpDQpsaWJyYXJ5KGVjaGFydHM0cikNCmxpYnJhcnkoaHRtbHRvb2xzKQ0KbGlicmFyeShydmVzdCkNCmxpYnJhcnkoaHR0cikNCmBgYA0KDQpgYGB7cn0NCmJtXzEgPC0gaW1wb3J0KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vVGhlRWNvbm9taXN0L2JpZy1tYWMtZGF0YS9tYXN0ZXIvb3V0cHV0LWRhdGEvYmlnLW1hYy1mdWxsLWluZGV4LmNzdiIpICU+JQ0KICAgc2VsZWN0KC1zdGFydHNfd2l0aChjKCJHQlAiLCJKUFkiLCJDTlkiKSkpICU+JSANCiAgIG11dGF0ZShpc29fYTIgICAgPSBjb3VudHJ5Y29kZShpc29fYTMgLCBvcmlnaW4gPSAnaXNvM2MnLCBkZXN0aW5hdGlvbiA9ICdpc28yYycsIHdhcm4gPSBGQUxTRSksDQogICAgICAgICAgaXNvX2EyICAgID0gc3RyX3RvX2xvd2VyKGlzb19hMiksDQogICAgICAgICAgaXNvX2EyICAgID0gaWZlbHNlKGlzLm5hKGlzb19hMiksICJldXJvcGVhbl91bmlvbiIsIGlzb19hMiksDQogICAgICAgICAgaXNvX2ZsICAgID0gc3RyX2dsdWUoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9IYXRTY3JpcHRzL2NpcmNsZS1mbGFncy9tYXN0ZXIvZmxhZ3Mve2lzb19hMn0uc3ZnIikpICU+JSANCiAgIGdyb3VwX2J5KGlzb19hMywgaXNvX2EyLCBuYW1lLCBjdXJyZW5jeV9jb2RlLCBpc29fZmwpICU+JSANCiAgIG5lc3RfYnkoKQ0KDQp4X2N1cnJlbmNpZXMgICAgICAgPC0gaW1wb3J0KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcnN0dWRpby9ndC9tYXN0ZXIvZGF0YS1yYXcveF9jdXJyZW5jaWVzLmNzdiIpICU+JSANCiAgIHJlbmFtZShjdXJyZW5jeV9jb2RlID0gY3Vycl9jb2RlICkgJT4lIA0KICAgbXV0YXRlKGN1cnJfbmFtZSA9IHdvcmQoY3Vycl9uYW1lLC0xKSAlPiUgc3RyX3RvX3RpdGxlKCkpDQoNCmJtXzEgPC0gbGVmdF9qb2luKGJtXzEsDQogICAgICAgICAgICAgICAgICB4X2N1cnJlbmNpZXMsDQogICAgICAgICAgICAgICAgICBieSA9ICJjdXJyZW5jeV9jb2RlIikNCmBgYA0KDQpgYGB7cn0NCiMgRzIwIEdyb3VwIG9mIGNvdW50cmllcw0KIyAyMDIwOiBBcmdlbnRpbmEsIEF1c3RyYWxpYSwgQnJhemlsLCBDYW5hZGEsIENoaW5hLCBGcmFuY2UsIEdlcm1hbnksIEl0YWx5LCBJbmRpYSwgSW5kb25lc2lhLEphcGFuLCBSZXB1YmxpYyBvZiBLb3JlYSwgDQojICAgICAgIE1leGljbywgUnVzc2lhLCBTYXVkaSBBcmFiaWEsIFNvdXRoIEFmcmljYSwgVHVya2V5LCBVbml0ZWQgS2luZ2RvbSwgVW5pdGVkIFN0YXRlcyBFdXJvcGVhbiBVbmlvbg0KIyArIFN3aXR6ZXJsYW5kDQoNCmJtX2cyMCA8LSBibV8xICU+JSANCiAgIGZpbHRlcihpc29fYTMgJWluJSBjKCJBUkciLCJBVVMiLCJCUkEiLCJDQU4iLCJDSE4iLCJFVVoiLCJJTkQiLCJJRE4iLCJKUE4iLCJLT1IiLCJNRVgiLCJSVVMiLCJTQVUiLCJaQUYiLCJUVVIiLCJVU0EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkNIRSIpKSAlPiUNCiAgIG11dGF0ZSggbmFtZV9tYXAgPSBuYW1lLA0KICAgICAgICAgICBuYW1lX21hcCA9IGNhc2Vfd2hlbihuYW1lX21hcCA9PSAiRXVybyBhcmVhIiB+ICJFdXJvcGUtRVUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX21hcCA9PSAiUnVzc2lhIiAgICB+ICJSdXNzaWFuIEZlZGVyYXRpb24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX21hcCA9PSAiQ2hpbmEiICAgICB+ICJQZW9wbGUnc19SZXB1YmxpY19vZl9DaGluYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIobmFtZV9tYXApDQogICAgICAgICAgICkpICU+JSANCiAgIG11dGF0ZShsYXN0ID0gbGlzdCggZGF0YSAlPiUgc2xpY2UobigpKSkgKSAlPiUNCiAgIG11dGF0ZSggbWFwID0gbGlzdCgNCiAgICAgIGdsdWU6OmdsdWUoImh0dHBzOi8vY29tbW9ucy53aWtpbWVkaWEub3JnL3dpa2kvRmlsZTp7c3RyX3JlcGxhY2VfYWxsKG5hbWVfbWFwLCcgJywgJ18nKX1fKG9ydGhvZ3JhcGhpY19wcm9qZWN0aW9uKS5zdmciKSAlPiUNCiAgICAgICAgIHJlYWRfaHRtbCgpICU+JQ0KICAgICAgICAgaHRtbF9ub2RlcygiaW1nIikgJT4lDQogICAgICAgICBodG1sX2F0dHIoInNyYyIpICU+JQ0KICAgICAgICAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICAgICAgICAgdHJhbnNmb3JtKGAuYCA9IGFzLmNoYXJhY3RlcihgLmApKSAlPiUNCiAgICAgICAgIGZpbHRlcihncmVwbCgib3J0aG9ncmFwaGljIiwgLiwgcGVybD1UUlVFKSkgJT4lDQogICAgICAgICBzbGljZSgxKSAlPiUNCiAgICAgICAgIHB1bGwoKQ0KICAgKQ0KICAgKSAlPiUNCiAgIHVubmVzdChsYXN0KSAlPiUgDQogICB1bmdyb3VwKCkgJT4lIA0KICAgYXJyYW5nZShkZXNjKFVTRF9yYXcpKSANCmBgYA0KDQpgYGB7cn0NCmNoYXJ0IDwtIGZ1bmN0aW9uKGRhdGEgPSBkYXRhLCB2YXJpYWJsZSA9IHZhcmlhYmxlLCBuYW1lID0gbmFtZSwNCiAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQsIGVuZCA9IGVuZCwNCiAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGgsIGhlaWdodCA9IGhlaWdodCl7DQogICANCiAgIGQgPC0gZGF0YSAlPiUgDQogICAgICBzZWxlY3QoZGF0ZSwgdmFyID0gdmFyaWFibGUpICU+JSANCiAgICAgIG11dGF0ZShkYXRlID0gYXMuRGF0ZShkYXRlKSkgJT4lIA0KICAgICAgZHJvcF9uYSh2YXIpDQogICANCiAgIG0gPC0gbWVhbihkICU+JSBwdWxsKHZhcikpDQogICANCiAgIGUgPC0gZCAlPiUgDQogICAgICBlX2NoYXJ0cyh4ID0gZGF0ZSwNCiAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGgsDQogICAgICAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQNCiAgICAgICkgJT4lIA0KICAgICAgZV9iYXIodmFyLA0KICAgICAgICAgICAgbmFtZSA9IG5hbWUsDQogICAgICAgICAgICBiYXJXaWR0aCA9ICI3NSUiKSAlPiUNCiAgICAgIGVfbGVnZW5kKHNob3cgPSBGQUxTRSkgJT4lDQogICAgICBlX3lfYXhpcyhzaG93ID0gRkFMU0UsDQogICAgICAgICAgICAgICBtYXggID0gMS4wLA0KICAgICAgICAgICAgICAgbWluID0gLTEuMCkgJT4lDQogICAgICBlX3hfYXhpcyhzaG93ID0gRkFMU0UsDQogICAgICAgICAgICAgICBtaW4gPSBzdGFydCwNCiAgICAgICAgICAgICAgIG1heCA9IGVuZCkgJT4lDQogICAgICBlX2F4aXNfcG9pbnRlcihsYWJlbCA9IGxpc3Qoc2hvdyA9IEZBTFNFKSkgJT4lIA0KICAgICAgZV92aXN1YWxfbWFwKA0KICAgICAgICAgdHlwZSA9ICJwaWVjZXdpc2UiLA0KICAgICAgICAgcGllY2VzID0gbGlzdChsaXN0KGd0ID0gMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjMDU3MUIwIiksDQogICAgICAgICAgICAgICAgICAgICAgIGxpc3QobHRlID0gMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjQ0EwMDIwIikNCiAgICAgICAgICksDQogICAgICAgICBzaG93ID0gRkFMU0UsDQogICAgICApIA0KICAgDQogICBpZiAoIGFicyhtKT4wICYmIG5yb3coZCk+MCApIHsNCiAgICAgIGUgPC0gZSAlPiUgDQogICAgICAgICBlX21hcmtfbGluZShkYXRhID0gbGlzdCh5QXhpcyA9IDApLA0KICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAnJywNCiAgICAgICAgICAgICAgICAgICAgIHNpbGVudCA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSAnbm9uZScsDQogICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gbGlzdChzaG93ID0gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0aW9uID0gJ2VuZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgPSAwKSwNCiAgICAgICAgICAgICAgICAgICAgIGxpbmVTdHlsZSA9IGxpc3QoY29sb3IgPSAnI2JmYmZiZicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnc29saWQnKQ0KICAgICAgICAgKSAlPiUNCiAgICAgICAgIGVfbWFya19hcmVhKGRhdGEgPSBsaXN0KA0KICAgICAgICAgICAgbGlzdCh4QXhpcyA9ICcyMDExLTA2LTAxJywgeUF4aXMgPSAtMS4wKSwNCiAgICAgICAgICAgIGxpc3QoeEF4aXMgPSAnMjAyMC0wOC0wMScsIHlBeGlzID0gIDEuMCkpLA0KICAgICAgICAgICAgaXRlbVN0eWxlID0gbGlzdChjb2xvciA9ICcjZjJmMmYyJykpICU+JQ0KICAgICAgICAgZV90b29sdGlwKCB0cmlnZ2VyID0gImF4aXMiLA0KICAgICAgICAgICAgICAgICAgICBheGlzUG9pbnRlciA9IGxpc3QodHlwZSA9ICdzaGFkb3cnKSwNCiAgICAgICAgICAgICAgICAgICAgY29uZmluZSA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IGVfdG9vbHRpcF9wb2ludGVyX2Zvcm1hdHRlcigicGVyY2VudCIsIGRpZ2l0cyA9IDEpLA0KICAgICAgICAgICAgICAgICAgICB0ZXh0U3R5bGUgPSBsaXN0KGZvbnRTaXplID0gMTApLA0KICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gMikNCiAgIH0NCiAgIGUNCn0NCmBgYA0KDQpgYGB7cn0NCmJtX2cyMCA8LSBibV9nMjAgJT4lIA0KICAgcm93d2lzZSgpICU+JSANCiAgIG11dGF0ZShlcmF3ID0gbGlzdChjaGFydChkYXRhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gIlVTRF9yYXciLCBuYW1lID0gIlJhdyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gJzIwMDAtMDMtMDEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAgID0gJzIwMjAtMDgtMDEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMTUwLCBoZWlnaHQgPSA1MCkpLA0KICAgICAgICAgIGVhZGogPSBsaXN0KGNoYXJ0KGRhdGEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSAiVVNEX2FkanVzdGVkIiwgbmFtZSA9ICJBZGoiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICcyMDExLTA2LTAxJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgICA9ICcyMDIwLTA4LTAxJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDc1LCBoZWlnaHQgPSA1MCkpDQogICApICU+JSANCiAgIG11dGF0ZShlcmF3X2h0bWwgPSBsaXN0KCBlcmF3ICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLnRhZ3MoKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIoKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sdG9vbHM6OkhUTUwoKSApLA0KICAgICAgICAgIGVhZGpfaHRtbCA9IGxpc3QoIGVhZGogJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMudGFncygpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcigpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWx0b29sczo6SFRNTCgpICkNCiAgICkNCmBgYA0KDQoNCmBgYHtyfQ0KZGV0YWNoKCJwYWNrYWdlOnJ2ZXN0IiwgdW5sb2FkID0gVFJVRSkNCmRldGFjaCgicGFja2FnZTpodHRyIiwgIHVubG9hZCA9IFRSVUUpDQpgYGANCg0KYGBge3J9DQpjaGFydChkYXRhID0gYm1fZzIwICU+JSBmaWx0ZXIoaXNvX2EzID09ICJBUkciKSAlPiUgc2VsZWN0KGRhdGEpICU+JSB1bm5lc3QoKSwNCiAgICAgIHZhcmlhYmxlID0gIlVTRF9yYXciLCBuYW1lID0gIlJhdyIsIA0KICAgICAgc3RhcnQgPSAnMjAwMC0wMS0wMScsDQogICAgICBlbmQgICA9ICcyMDIxLTAxLTAxJywNCiAgICAgIHdpZHRoID0gMTUwLCBoZWlnaHQgPSA1MCkNCmBgYA0KDQpgYGB7ciBpbmNsdWRlID0gVFJVRSwgZWNobyA9IEZBTFNFfQ0KdGFiXzAgPC0gYm1fZzIwICU+JQ0KICAgc2VsZWN0KGlzb19mbCwgbWFwLCBuYW1lLCBpc29fYTMsDQogICAgICAgICAgY3VycmVuY3lfY29kZSwgY3Vycl9uYW1lLCBzeW1ib2wsDQogICAgICAgICAgZGF0ZSwgbG9jYWxfcHJpY2UsIGRvbGxhcl9wcmljZSwgDQogICAgICAgICAgVVNEX3JhdywgVVNEX2FkanVzdGVkLCBlcmF3X2h0bWwsIGVhZGpfaHRtbCkgJT4lDQogICBndCgpICU+JSANCiAgICMgYWRkIGNvdW50cnkgaHlwZXJsaW5rDQogICB0ZXh0X3RyYW5zZm9ybSgNCiAgICAgIGxvY2F0aW9ucyA9IGNlbGxzX2JvZHkoDQogICAgICAgICBjb2x1bW5zID0gdmFycyhuYW1lKQ0KICAgICAgKSwNCiAgICAgIGZuID0gZnVuY3Rpb24oeCkgew0KICAgICAgICAgZ2x1ZTo6Z2x1ZSgiPGEgaHJlZj0naHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kve3N0cl9yZXBsYWNlX2FsbCh4LCcgJywgJ18nKX0nPnt4fTwvYT4iKQ0KICAgICAgfQ0KICAgKSAlPiUNCiAgICMgYWRkIGZsYWdzDQogICB0ZXh0X3RyYW5zZm9ybSgNCiAgICAgIGxvY2F0aW9ucyA9IGNlbGxzX2JvZHkoDQogICAgICAgICBjb2x1bW5zID0gdmFycyhpc29fZmwpDQogICAgICApLA0KICAgICAgZm4gPSBmdW5jdGlvbih4KSB7d2ViX2ltYWdlKHVybCA9IHgsIGhlaWdodCA9IDMwKX0NCiAgICkgJT4lIA0KICAgIyBhZGQgbWFwcw0KICAgdGV4dF90cmFuc2Zvcm0oDQogICAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KA0KICAgICAgICAgY29sdW1ucyA9IHZhcnMobWFwKQ0KICAgICAgKSwNCiAgICAgIGZuID0gZnVuY3Rpb24oeCkge3dlYl9pbWFnZSh1cmwgPSB4LCBoZWlnaHQgPSA1MCl9DQogICApICU+JSANCiAgICMgbWVyZ2UgY3VycmVuY3kgbmFtZSAmIGNvZGUNCiAgIGNvbHNfbWVyZ2UoY29sdW1ucyA9IHZhcnMoY3Vycl9uYW1lLCBjdXJyZW5jeV9jb2RlKSwNCiAgICAgICAgICAgICAgcGF0dGVybiA9IGh0bWwoInsxfSAoPHNtYWxsPnsyfTwvc21hbGw+KSIpICkgDQoNCiMgbWVyZ2UgY3VycmVuY2llcyB0byBsb2NhbCBwcmljZQ0KZm9yIChpIGluIHNlcShucm93KGJtX2cyMCkpKSB7DQogICB0YWJfMCA8LSB0YWJfMCAlPiUgDQogICAgICBmbXRfY3VycmVuY3koY29sdW1ucyA9IHZhcnMobG9jYWxfcHJpY2UpLCANCiAgICAgICAgICAgICAgICAgICByb3dzID0gaSwgDQogICAgICAgICAgICAgICAgICAgY3VycmVuY3kgID0gYm1fZzIwW1tpLCAiY3VycmVuY3lfY29kZSJdXSkNCn0NCg0KdGFiXzEgPC0gdGFiXzAgJT4lIA0KICAgIyByZW1vdmUgdW51c2VkIHZhcmlhYmxlcw0KICAgY29sc19oaWRlKGNvbHVtbnMgPSB2YXJzKGlzb19hMywgc3ltYm9sLCBkYXRlKSkgJT4lIA0KICAgIyByZW5hbWUgdmFyaWFibGVzDQogICBjb2xzX2xhYmVsKCBpc29fZmwgPSAnICcsDQogICAgICAgICAgICAgICBtYXAgICAgPSAnICcsDQogICAgICAgICAgICAgICBuYW1lICAgPSAnQ291bnRyeScsDQogICAgICAgICAgICAgICBjdXJyX25hbWUgPSBodG1sKCdDdXJyZW5jeSA8c21hbGw+KEFiYnIpPC9zbWFsbD4nKSwNCiAgICAgICAgICAgICAgIGRhdGUgPSBodG1sKCdEYXRlIDxzbWFsbD4oeXktbW0pPC9zbWFsbD4nKSwNCiAgICAgICAgICAgICAgIGVyYXdfaHRtbCA9IGh0bWwoIjxzbWFsbD4yMDAwICYjODU5NDsgPGZvbnQgc3R5bGU9J2NvbG9yOiAjYmZiZmJmJz4gMjAxMSAmIzg1OTQ7IDIwMjA8L3NtYWxsPjwvZm9udD4gPGJyPiBSYXciKSwgDQogICAgICAgICAgICAgICBlYWRqX2h0bWwgPSBodG1sKCI8c21hbGw+PGZvbnQgc3R5bGU9J2NvbG9yOiAjYmZiZmJmJz4yMDExICYjODU5NDsgMjAyMDwvc21hbGw+PC9mb250PiA8YnI+IEFkanVzdGVkIikNCiAgICkgJT4lIA0KICAgIyBhbGlnbiBkYXRhDQogICBjb2xzX2FsaWduKGFsaWduID0gImNlbnRlciIsIA0KICAgICAgICAgICAgICBjb2x1bW5zID0gdmFycyhtYXAsIGxvY2FsX3ByaWNlLCBkb2xsYXJfcHJpY2UsIFVTRF9yYXcsIFVTRF9hZGp1c3RlZCkpICU+JQ0KICAgY29sc19hbGlnbihhbGlnbiA9ICJsZWZ0IiwNCiAgICAgICAgICAgICAgY29sdW1ucyA9IHZhcnMobmFtZSwgY3Vycl9uYW1lKSkgJT4lIA0KICAgIyBhbGlnbiBjb2x1bW5zIGxhYmVscw0KICAgdGFiX3N0eWxlKA0KICAgICAgc3R5bGUgPSBsaXN0KA0KICAgICAgICAgY2VsbF90ZXh0KGFsaWduID0gImxlZnQiKQ0KICAgICAgKSwNCiAgICAgIGxvY2F0aW9ucyA9IGNlbGxzX2NvbHVtbl9sYWJlbHMoDQogICAgICAgICBjb2x1bW5zID0gdmFycyhuYW1lLCBjdXJyX25hbWUpDQogICAgICApDQogICApICU+JSANCiAgICMgbWFrZSBtYXAgc3F1YXJlIGNlbGwNCiAgIGNvbHNfd2lkdGgoDQogICAgICB2YXJzKG1hcCkgfiBweCg2MCkNCiAgICkgJT4lIA0KICAgIyBmb3JtYXQgbWlzc2luZw0KICAgZm10X21pc3NpbmcoIGNvbHVtbnMgPSB2YXJzKFVTRF9hZGp1c3RlZCksDQogICAgICAgICAgICAgICAgbWlzc2luZ190ZXh0ID0gaHRtbCgiJm1kYXNoOyIpDQogICApICU+JSANCiAgICMgZm9ybWF0IHBlcmNlbnQNCiAgIGZtdF9wZXJjZW50KGNvbHVtbnMgPSB2YXJzKFVTRF9yYXcsIFVTRF9hZGp1c3RlZCksDQogICAgICAgICAgICAgICBkZWNpbWFscyA9IDEpICU+JSANCiAgICMgcm91bmQgZG9sbGFyIHByaWNlDQogICBmbXRfbnVtYmVyKGNvbHVtbnMgPSB2YXJzKGRvbGxhcl9wcmljZSksDQogICAgICAgICAgICAgIGRlY2ltYWxzICA9IDIpICU+JSANCiAgICMgYWRkIGRvbGxhciBzaWduDQogICBmbXRfY3VycmVuY3koY29sdW1ucyA9IHZhcnMoZG9sbGFyX3ByaWNlKSwNCiAgICAgICAgICAgICAgICBjdXJyZW5jeSA9ICJVU0QiKSAlPiUgDQogICAjIHNwYW5uZXINCiAgIHRhYl9zcGFubmVyKA0KICAgICAgbGFiZWwgPSBodG1sKCImIzEyNzk5MTsmIzY1MDM5OyBMYXRlc3QgUHJpY2UiKSwNCiAgICAgIGNvbHVtbnMgPSB2YXJzKGxvY2FsX3ByaWNlLCBkb2xsYXJfcHJpY2UpDQogICApICU+JSANCiAgICMgc3Bhbm5lcg0KICAgdGFiX3NwYW5uZXIoDQogICAgICBsYWJlbCA9IGh0bWwoIiYjMTI4MTgxOyBVU0QgPHNtYWxsPjxmb250IHN0eWxlPSdjb2xvcjogI0NBMDAyMCc+dW5kZXI8L2ZvbnQ+Lzxmb250IHN0eWxlPSdjb2xvcjogIzA1NzFCMCc+b3ZlcjwvZm9udD48L3NtYWxsPiIpLA0KICAgICAgY29sdW1ucyA9IHZhcnMoVVNEX3JhdywgVVNEX2FkanVzdGVkKQ0KICAgKSAlPiUgDQogICAjIFNwYW5uZXINCiAgIHRhYl9zcGFubmVyKA0KICAgICAgbGFiZWwgPSBodG1sKCImIzkyMDE7JiM2NTAzOTsgSGlzdG9yaWNhbCBEYXRhIiksDQogICAgICBjb2x1bW5zID0gdmFycyhlcmF3X2h0bWwsIGVhZGpfaHRtbCkNCiAgICkgJT4lIA0KICAgIyBsYWJlbHMNCiAgIGNvbHNfbGFiZWwobG9jYWxfcHJpY2UgPSAiTG9jYWwiLA0KICAgICAgICAgICAgICBkb2xsYXJfcHJpY2UgPSAiRG9sbGFyIiApICU+JSANCiAgIGNvbHNfbGFiZWwoVVNEX3JhdyA9ICJSYXciLA0KICAgICAgICAgICAgICBVU0RfYWRqdXN0ZWQgPSAiQWRqdXN0ZWQiICkgJT4lIA0KICAgIyBBZGQgY29sb3IgVVNEIFJhdyAmIFVkanVzdGVkDQogICBkYXRhX2NvbG9yKA0KICAgICAgY29sdW1ucyA9IHZhcnMoVVNEX3JhdywgVVNEX2FkanVzdGVkKSwNCiAgICAgIGNvbG9ycyA9IHNjYWxlczo6Y29sX2JpbigNCiAgICAgICAgIGJpbnMgPSBjKC1JbmYsIDAsIEluZiksDQogICAgICAgICBwYWxldHRlID0gYygiI0NBMDAyMCIsIiMwNTcxQjAiKQ0KICAgICAgKSwNCiAgICAgIGFwcGx5X3RvID0gInRleHQiDQogICApICU+JSANCiAgICMgQWRkIGNvbG9yIHRvIGRvbGxhciBwcmljZSBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwoMTEsIlJkWWxCdSIpWzE6MTBdDQogICBkYXRhX2NvbG9yKA0KICAgICAgY29sdW1ucyA9IHZhcnMoZG9sbGFyX3ByaWNlKSwNCiAgICAgIGNvbG9ycyA9IHNjYWxlczo6Y29sX2JpbigNCiAgICAgICAgIHBhbGV0dGUgPSBjKCIjQTUwMDI2IiwiI0Q3MzAyNyIsIiNGNDZENDMiLCIjRkRBRTYxIiwiI0ZFRTA5MCIsDQogICAgICAgICAgICAgICAgICAgICAiI0ZGRkZCRiIsDQogICAgICAgICAgICAgICAgICAgICAiI0UwRjNGOCIsIiNBQkQ5RTkiLCIjNzRBREQxIiwgIiM0NTc1QjQiKSwNCiAgICAgICAgIGRvbWFpbiA9IGMoMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCksDQogICAgICAgICBiaW5zID0gMTApLA0KICAgICAgYWxwaGEgPSAwLjUNCiAgICklPiUNCiAgICMgbWFrZSBjZWxscyBib2xkDQogICB0YWJfc3R5bGUoDQogICAgICBzdHlsZSA9IGxpc3QoDQogICAgICAgICBjZWxsX3RleHQod2VpZ2h0ID0gImJvbGQiKQ0KICAgICAgKSwNCiAgICAgIGxvY2F0aW9ucyA9IGNlbGxzX2JvZHkoDQogICAgICAgICBjb2x1bW5zID0gdmFycyhVU0RfcmF3LCBVU0RfYWRqdXN0ZWQpDQogICAgICApDQogICApICU+JSANCiAgICMgbWFrZSBVUyB0aGUgYmFzZWxpbmUNCiAgIHRhYl9zdHlsZSgNCiAgICAgIHN0eWxlID0gY2VsbF9maWxsKGNvbG9yID0gIiNGRkZGQkYiLCBhbHBoYSA9IDAuNSksDQogICAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KA0KICAgICAgICAgcm93cyA9IG5hbWUgID09ICJVbml0ZWQgU3RhdGVzIg0KICAgICAgKQ0KICAgKSAlPiUNCiAgICMgYWRkIGEgdGl0bGUNCiAgIHRhYl9oZWFkZXIoDQogICAgICB0aXRsZSAgICA9IG1kKCIqKkJ1cmdlcm5vbWljczoqKiBUaGUgQmlnIE1hYyAmIzEyNzgyODsgSW5kZXggZm9yIFtHMjBdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0cyMCkgY29tcGFyZWQgdG8gdGhlIFVTIERvbGxhciIpLA0KICAgICAgc3VidGl0bGUgPSBtZCgiTWVhc3VyaW5nIHRoZSBwdXJjaGFzaW5nIHBvd2VyIHBhcml0eSAoUFBQKSBiZXR3ZWVuIHR3byBjdXJyZW5jaWVzIikNCiAgICkgJT4lIA0KICAgIyBhZGQgc291cmNlDQogICB0YWJfc291cmNlX25vdGUoDQogICAgICBodG1sKCc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ZvbnQtYXdlc29tZS80LjcuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiPiANCiAgICAgICAgICAgPGI+U291cmNlOjwvYj4NCiAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZWNvbm9taXN0LmNvbS9uZXdzLzIwMjAvMDcvMTUvdGhlLWJpZy1tYWMtaW5kZXgiPiANCiAgICAgICAgICAgVGhlIEVjb25vbWlzdDogVGhlIEJpZyBNYWMgSW5kZXggPC9hPiBpbnRyb2R1Y2VkIGluICAxOTg2IGFzIGEgc2VtaS1odW1vcm91cyBpbGx1c3RyYXRpb24gb2YgUFBQIGFuZCBoYXMgYmVlbiBwdWJsaXNoZWQgc2luY2UgdGhlbi4NCiAgICAgICAgICAgPGJyPg0KICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL3NlYXJjaD9xPVRoZSUyMEVjb25vbWlzdCUyN3MlMjBCaWclMjBNYWMlMjBpbmRleCUyMCZzcmM9dHlwZWRfcXVlcnkiPiA8aSBjbGFzcz0iZmEgZmEtdHdpdHRlciJzdHlsZT0iZm9udC1zaXplOjI0cHgiPjwvaT4gVGhlIEVjb25vbWlzdCBCaWcgTWFjIGluZGV4ICA8L2E+DQogICAgICAgICAgIDxicj4NCiAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL1RoZUVjb25vbWlzdC9iaWctbWFjLWRhdGEiPiA8aSBjbGFzcz0iZmEgZmEtZ2l0aHViIiBzdHlsZT0iZm9udC1zaXplOjI0cHgiPjwvaT4gRGF0YSBhbmQgbWV0aG9kb2xvZ3kgPC9hPg0KICAgICAgICAgICAnKQ0KICAgICAgDQogICApICU+JSANCiAgIHRhYl9zb3VyY2Vfbm90ZSggbWQoIHsgZGV0YWlsczo6ZGV0YWlscyhkZXZ0b29sczo6c2Vzc2lvbl9pbmZvKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9ICdSIFNlc3Npb24gSW5mb3JtYXRpb24nDQogICApIA0KICAgfQ0KICAgKQ0KICAgKSAlPiUgDQogICAjIGZvb3Rub3Rlcw0KICAgdGFiX2Zvb3Rub3RlKA0KICAgICAgZm9vdG5vdGUgPSAiRGF0YSBhcyBvZiAyMDIwLTA3LTAxIiwNCiAgICAgIGxvY2F0aW9ucyA9IGNlbGxzX2NvbHVtbl9zcGFubmVycyhodG1sKCImIzEyNzk5MTsmIzY1MDM5OyBMYXRlc3QgUHJpY2UiKSkNCiAgICkgJT4lIA0KICAgdGFiX2Zvb3Rub3RlKA0KICAgICAgZm9vdG5vdGUgPSANCiAgICAgICAgICJUaGUgaW5kZXggaXMgYmFzZWQgb24gdGhlIHRoZW9yeSBvZiBQUFAsIHRoZSBub3Rpb24gdGhhdCBpbiB0aGUgbG9uZyBydW4gZXhjaGFuZ2UgcmF0ZXMgc2hvdWxkIG1vdmUgdG93YXJkcyB0aGUgcmF0ZQ0KICAgICAgdGhhdCB3b3VsZCBlcXVhbGlzZSB0aGUgcHJpY2VzIG9mIGFuIGlkZW50aWNhbCBiYXNrZXQgb2YgZ29vZHMgYW5kIHNlcnZpY2VzIChpbiB0aGlzIGNhc2UsIGEgYnVyZ2VyKSBpbiBhbnkgdHdvIGNvdW50cmllcy4iLA0KICAgICAgbG9jYXRpb25zID0gY2VsbHNfdGl0bGUoInN1YnRpdGxlIikNCiAgICkgJT4lIA0KICAgdGFiX2Zvb3Rub3RlKA0KICAgICAgZm9vdG5vdGUgPSAiUmF3IEluZGV4OiAlIGNvc3QgZGlmZmVyZW5jZSB0aGFuIGluIHRoZSBVUyIsDQogICAgICBsb2NhdGlvbnMgPSBjZWxsc19jb2x1bW5fbGFiZWxzKHZhcnMoVVNEX3JhdyxlcmF3X2h0bWwpKQ0KICAgKSAlPiUgDQogICB0YWJfZm9vdG5vdGUoDQogICAgICBmb290bm90ZSA9ICJHRFAgQWRqdXN0ZWQgSW5kZXg6ICUgY29zdCBkaWZmZXJlbmNlIHRoYW4gaW4gdGhlIFVTIGJhc2VkIG9uIGRpZmZlcmVuY2VzIGluIEdEUCBiZXR3ZWVuIHRoZSB0d28gY291bnRyaWVzIiwNCiAgICAgIGxvY2F0aW9ucyA9IGNlbGxzX2NvbHVtbl9sYWJlbHModmFycyhVU0RfYWRqdXN0ZWQsZWFkal9odG1sKSkNCiAgICkgJT4lIA0KICAgdGFiX2Zvb3Rub3RlKA0KICAgICAgZm9vdG5vdGUgPSAiQmFzZSBDdXJyZW5jeSIsDQogICAgICBsb2NhdGlvbnMgPSBsaXN0KCBjZWxsc190aXRsZSgidGl0bGUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzX2JvZHkoIGNvbHVtbnMgPSB2YXJzKGxvY2FsX3ByaWNlLCBkb2xsYXJfcHJpY2UpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cyA9IG5hbWUgID09ICJVbml0ZWQgU3RhdGVzIikNCiAgICAgICkNCiAgICkgJT4lIA0KICAgdGFiX2Zvb3Rub3RlKA0KICAgICAgZm9vdG5vdGUgPSBtZCgnQUJCUjogVGhyZWUtY2hhcmFjdGVyIFtJU08gNDIxNyBjdXJyZW5jeSBjb2RlXShodHRwczovL3d3dy5pc28ub3JnL2lzby00MjE3LWN1cnJlbmN5LWNvZGVzLmh0bWwpJyksDQogICAgICBsb2NhdGlvbnMgPSBjZWxsc19jb2x1bW5fbGFiZWxzKHZhcnMoY3Vycl9uYW1lKSkNCiAgICkgJT4lDQogICB0YWJfZm9vdG5vdGUoDQogICAgICBmb290bm90ZSA9IGh0bWwoJ1ByaWNlIG9mIGEgQmlnIE1hYyBpbiB0aGUgbG9jYWwgY3VycmVuY3knKSwNCiAgICAgIGxvY2F0aW9ucyA9IGNlbGxzX2NvbHVtbl9sYWJlbHModmFycyhsb2NhbF9wcmljZSkpDQogICApICU+JSANCiAgIHRhYl9mb290bm90ZSgNCiAgICAgIGZvb3Rub3RlID0gaHRtbCgnUHJpY2Ugb2YgYSBCaWcgTWFjIGluIGRvbGxhcnMgPGJyPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0E1MDAyNjsgb3BhY2l0eTogMC41OyI+ICZlbXNwOyZlbXNwOyZuYnNwOzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNENzMwMjc7IG9wYWNpdHk6IDAuNTsiPiAmZW1zcDsmZW1zcDs8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRjQ2RDQzOyBvcGFjaXR5OiAwLjU7Ij4gJmVtc3A7JmVtc3A7PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZEQUU2MTsgb3BhY2l0eTogMC41OyI+ICZlbXNwOyZlbXNwOzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRUUwOTA7IG9wYWNpdHk6IDAuNTsiPiAmZW1zcDsmZW1zcDs8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkJGOyBvcGFjaXR5OiAwLjU7Ij4gJmVtc3A7JmVtc3A7PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0UwRjNGODsgb3BhY2l0eTogMC41OyI+ICZlbXNwOyZlbXNwOzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNBQkQ5RTk7IG9wYWNpdHk6IDAuNTsiPiAmZW1zcDsmZW1zcDs8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjNzRBREQxOyBvcGFjaXR5OiAwLjU7Ij4gJmVtc3A7JmVtc3A7PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogIzQ1NzVCNDsgb3BhY2l0eTogMC41OyI+ICZlbXNwOyZlbXNwOyZuYnNwOyZuYnNwOzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgPGJyPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IGJsYWNrOyI+ICAgICAgJDAtMSZuYnNwOzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiBibGFjazsiPiAmbmJzcDsxLTImbmJzcDs8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7Ij4gJm5ic3A7Mi0zJm5ic3A7PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IGJsYWNrOyI+ICZuYnNwOzMtNCZuYnNwOzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiBibGFjazsiPiAmbmJzcDs0LTUmbmJzcDs8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7Ij4gJm5ic3A7NS02Jm5ic3A7PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IGJsYWNrOyI+ICZuYnNwOzYtNyZuYnNwOzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiBibGFjazsiPiAmbmJzcDs3LTgmbmJzcDs8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7Ij4gJm5ic3A7OC05Jm5ic3A7PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IGJsYWNrOyI+ICZuYnNwOzktMTAmbmJzcDs8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgJyksDQogICAgICBsb2NhdGlvbnMgPSBjZWxsc19jb2x1bW5fbGFiZWxzKHZhcnMoZG9sbGFyX3ByaWNlKSkNCiAgICkgJT4lIA0KICAgIyB0cmFuc3BhcmVudCB0cmljazogZG8gbm90IHByaW50IDAlDQogICB0YWJfc3R5bGUoDQogICAgICBzdHlsZSA9IGNlbGxfdGV4dChjb2xvciA9ICd0cmFuc3BhcmVudCcpLA0KICAgICAgbG9jYXRpb25zID0gY2VsbHNfYm9keSgNCiAgICAgICAgIGNvbHVtbnMgPSB2YXJzKFVTRF9yYXcsIFVTRF9hZGp1c3RlZCksDQogICAgICAgICByb3dzID0gbmFtZSAgPT0gIlVuaXRlZCBTdGF0ZXMiKQ0KICAgKSAlPiUNCiAgICMgYWRkIG9wdGlvbnMgbGVmdCBhbGlnbg0KICAgb3B0X2FsaWduX3RhYmxlX2hlYWRlciggYWxpZ24gPSAibGVmdCIpICU+JSANCiAgICMgdXBwZXINCiAgIG9wdF9hbGxfY2Fwcyhsb2NhdGlvbnMgPSAiY29sdW1uX2xhYmVscyIpICU+JSANCiAgICMgdGhlbWUgY29tcGFjdA0KICAgdGFiX29wdGlvbnModGFibGUuZm9udC5zaXplICAgICAgPSBweCgxNCksDQogICAgICAgICAgICAgICBkYXRhX3Jvdy5wYWRkaW5nICAgICA9IHB4KDEpLA0KICAgICAgICAgICAgICAgZm9vdG5vdGVzLnBhZGRpbmcgICAgPSBweCgxKSwNCiAgICAgICAgICAgICAgIHNvdXJjZV9ub3Rlcy5wYWRkaW5nID0gcHgoMSksDQogICAgICAgICAgICAgICByb3dfZ3JvdXAucGFkZGluZyAgICA9IHB4KDEpKSAlPiUgDQogICAjIGFkZCBDU1MNCiAgIG9wdF9jc3MoY3NzID0gIi5odG1sLXdpZGdldCB7bWFyZ2luLWJvdHRvbTogMHB4O30iKSAlPiUgDQogICBvcHRfY3NzKGNzcyA9ICIuZ3Rfcm93Om50aC1jaGlsZCggOSl7b3ZlcmZsb3cteTogaGlkZGVuO30iKSAlPiUgDQogICBvcHRfY3NzKGNzcyA9ICIuZ3Rfcm93Om50aC1jaGlsZCgxMCl7b3ZlcmZsb3cteTogaGlkZGVuO30iKSAlPiUNCiAgIG9wdF9jc3MoY3NzID0gIi5ndF9yb3c6bnRoLWNoaWxkKCAyKTpob3Zlcnt0cmFuc2Zvcm06IHNjYWxlKDIpO30iKSAlPiUgDQogICAjIGNoYW5nZSBmb250DQogICBvcHRfdGFibGVfZm9udCgNCiAgICAgIGZvbnQgPSBsaXN0KGdvb2dsZV9mb250KG5hbWUgPSAiU291cmNlIFNhbnMgUHJvIikpDQogICApIA0KDQp0YWJfMQ0KYGBgDQo=