Public Diplomacy Descriptive statistics

Public Diplomacy spending in aggregate.

Table 1 shows the average and median PD budget across seven years the dataset . We see the average spending is $5,874,422 (in 2015 adjusted PPP adjusted dollars).

There is a large skew in the dataset due to the high spending in a few of the countries (Afghanistan and Iraq et cetera). The median is far lower at $2,277,457 (in 2015 adjusted PPP adjusted dollars).

Table 1: Public Diplomacy average and median across seven years 2013 - 2019
Country Average PD budget Median PD budget Standard Dev
165 5,874,422 2,277,457 17,107,579

If we break down the budgets across each year, we can see the average and median spending

Table 2: Public Diplomacy average and each year, 2013 - 2019
Year Country Average PD budget Median PD budget Standard Dev
2019 164 5,878,738 2,342,214 15,322,331
2018 165 5,829,553 2,276,709 15,495,825
2017 166 5,731,740 2,368,103 15,145,808
2016 166 5,755,129 2,701,243 14,728,796
2015 167 6,774,485 2,580,646 18,619,866
2014 167 6,201,767 2,238,624 18,224,039
2013 160 4,906,963 1,674,664 21,493,769

We can look at the density plots for each year to examine the distribution and the skew

Public Diplomacy Descriptive statistics

In aggregate MINUS Afghanistan, Iraq, Pakistan

Table 3: Public Diplomacy average across years 2013 - 2019 MINUS Afghanistan, Iraq and Pakistan
Country Average PD budget Median PD budget Standard Dev
162 3,999,755 2,240,477 5,551,920

Comparing density plots and distribution of PD spending across the different geographic regions

Comparing density plots and distribution of PD spending across the different political regions

Mean, min and max confidence intervals

Comparing regions with confidence intervals

Without Afghanistan, Iraq and Pakistan

Grouped descriptive statistics

US troops

Over 100 compared to 100 and fewer US troops

Table 4: PD spending in countries under 100 verus over 100 troops stationed
US troops Country Average PD budget Median PD budget Standard Dev
Fewer than 100 US troops 131 4,494,465 2,081,647 10,041,666
More than 100 US troops 31 11,904,142 3,258,073 32,948,156

Freedom House groups - Free, Partly Free and Not Free

Defence alliance with the US

Countries with defense treaty with the US versus thouse without

Defense Treaty Country Average PD budget Median PD budget Standard Dev
No treaty 129 6,256,574 2,146,584 17,542,664
Treaty 66 5,174,748 2,389,396 16,278,720

Liberal voting pattern

UNGA voting pattern Countries Average PD budget Median PD budget Standard Dev
Illiberal voters 134 6,985,418 2,391,864 20,329,962
Liberal voters 52 3,617,746 2,139,366 5,500,964


Regression outputs

First, look at the regression output :

Dependent variable:
log(pop + 1) 0.415***
(0.027)
log(gdp_pc) -0.053
(0.033)
polity2 0.008*
(0.004)
log(us_trade + 1) 0.012
(0.020)
log(russia_trade_dep) 0.105***
(0.011)
vote_percent_same_china_all 0.648***
(0.247)
log(us_troops + 1) 0.021*
(0.012)
log(suicide_attacks + 1) -0.008
(0.063)
log(us_troops + 1):log(suicide_attacks + 1) 0.042***
(0.012)
Observations 941
R2 0.592
Adjusted R2 0.585
F Statistic 148.903*** (df = 9; 925)
Note: p<0.1; p<0.05; p<0.01

Liberal voting patterns UNGA - Comparing countries that vote liberally at UNGA and those that vote illiberally at UNGA

Dependent variable:
Liberal UNGA Dissimilar UNGA
(1) (2)
Population (logged) 0.429*** 0.621***
GDP per capita (logged) -0.517*** 0.250***
Polity -0.016 0.005
US trade (logged) -0.051 -0.097***
Russia trade dep -0.292*** 0.152*
US UNGA similarity 0.769*** 0.430
China UNGA similarity 0.054*** 0.056***
US Troops (logged) -0.530** -0.199***
Suicide attacks (logged) 0.064** 0.078***
Observations 315 722
R2 0.748 0.698
Adjusted R2 0.736 0.692
F Statistic 98.868*** (df = 9; 299) 181.500*** (df = 9; 706)
Note: p<0.1; p<0.05; p<0.01

Comparing Free, Partly Free and Not Free Freedom House countries on the PD spending allications

Dependent variable:
Free Partly Free Not Free
(1) (2) (3)
Population (logged) 0.524*** 0.468*** 0.550***
GDP per capita (logged) -0.168*** 0.219*** 0.144**
Polity -0.017 0.032** -0.044***
US trade (logged) -0.047* -0.028 -0.080*
Russia trade dep 0.100 -0.139 -0.006
US UNGA similarity 0.268 2.623*** 2.279**
China UNGA similarity 0.020 0.012 0.026
US Troops (logged) 0.153 -0.206 -0.304***
Suicide attacks (logged) -0.047 0.132*** 0.096***
Observations 406 345 276
R2 0.748 0.510 0.716
Adjusted R2 0.738 0.488 0.700
F Statistic 128.619*** (df = 9; 390) 38.051*** (df = 9; 329) 73.011*** (df = 9; 260)
Note: p<0.1; p<0.05; p<0.01

Comparing PD, Military, Economic and Humanitarian in all countries

Dependent variable:
PD (adj PPP) Military Economic Humanitarian
(1) (2) (3) (4)
Population (logged) 0.415*** -0.851*** -0.683*** 0.075
GDP per capita (logged) -0.053 -2.769*** -4.455*** -4.329***
Polity 0.008* 0.071*** 0.174*** 0.049
US trade (logged) 0.012 0.981*** 1.465*** 0.905***
Russia trade dep 0.105*** 0.522*** 0.528*** 0.026
US UNGA similarity 0.648*** -1.527 14.226*** 1.805
China UNGA similarity 0.021* 0.072 -0.125 0.141*
US Troops (logged) -0.008 0.414 0.741* 1.090**
Suicide attacks (logged) 0.042*** 0.100 -0.046 0.050
Observations 941 1,236 1,235 1,236
R2 0.592 0.298 0.568 0.514
Adjusted R2 0.585 0.288 0.562 0.507
F Statistic 148.903*** (df = 9; 925) 57.329*** (df = 9; 1218) 177.944*** (df = 9; 1217) 142.957*** (df = 9; 1218)
Note: p<0.1; p<0.05; p<0.01

Free Countries - comparing PD, Military, Economic and Humanitarian in FREE countries

Dependent variable:
PD (PPP) Military Economic Humanitarian
(1) (2) (3) (4)
Population (logged) 0.425*** -0.539* -0.946*** -1.371***
GDP per capita (logged) -0.186*** -3.745*** -5.031*** -4.656***
Polity -0.100*** -0.326 -0.559*** -0.761***
US trade (logged) -0.007 0.559*** 1.829*** 1.879***
Russia trade dep 0.024* 0.458*** -0.138 0.072
US UNGA similarity -0.047 -8.149*** 12.939*** -0.105
China UNGA similarity 0.039*** 0.096 -0.213** 0.073
US Troops (logged) 0.193 1.799 0.915 3.416
Suicide attacks (logged) -0.045 -0.582 -0.334 -0.789
Observations 381 494 494 494
R2 0.758 0.404 0.696 0.428
Adjusted R2 0.748 0.383 0.685 0.408
F Statistic 127.218*** (df = 9; 365) 35.822*** (df = 9; 476) 121.143*** (df = 9; 476) 39.592*** (df = 9; 476)
Note: p<0.1; p<0.05; p<0.01

NOT Free Countries - comparing PD, Military, Economic and Humanitarian in NOT free countries

Dependent variable:
PD (PPP) Military Economic Humanitarian
(1) (2) (3) (4)
Population (logged) 0.415*** -1.465*** -0.410 0.261
GDP per capita (logged) -0.053 -3.563*** -3.732*** -4.551***
Polity 0.008* 0.107 0.083 0.386***
US trade (logged) 0.012 1.882*** 1.480*** 0.509*
Russia trade dep 0.105*** 0.434*** 0.850*** 0.222*
US UNGA similarity 0.648*** 4.238 4.422 1.965
China UNGA similarity 0.021* 0.358** 0.258 0.774***
US Troops (logged) -0.008 0.369 1.079 1.784***
Suicide attacks (logged) 0.042*** 0.050 -0.153 -0.182**
Observations 941 291 291 291
R2 0.592 0.339 0.388 0.662
Adjusted R2 0.585 0.298 0.350 0.641
F Statistic 148.903*** (df = 9; 925) 15.589*** (df = 9; 273) 19.264*** (df = 9; 273) 59.399*** (df = 9; 273)
Note: p<0.1; p<0.05; p<0.01

Partly Free Countries - comparing PD, Military, Economic and Humanitarian in partly free countries

Dependent variable:
PD (PPP) Military Economic Humanitarian
(1) (2) (3) (4)
Population (logged) 0.468*** 0.378** 0.689*** 1.774***
GDP per capita (logged) 0.219*** -0.413** -2.161*** -1.813***
Polity 0.032** 0.199*** 0.298*** 0.446***
US trade (logged) -0.028 0.305*** 0.405*** -0.020
Russia trade dep -0.139
US UNGA similarity 2.623***
China UNGA similarity 0.455*** 0.603*** -0.058
US Troops (logged) -2.936 -5.199* 5.041
Suicide attacks (logged) 0.012 -0.209** -0.094 0.414**
Troops x suicide attacks -0.206 0.106 -0.050 0.889
log(us_troops + 1):log(suicide_attacks + 1) 0.132*** 0.089 0.066 -0.159
Observations 345 411 411 411
R2 0.510 0.328 0.471 0.378
Adjusted R2 0.488 0.299 0.448 0.351
F Statistic 38.051*** (df = 9; 329) 21.279*** (df = 9; 393) 38.908*** (df = 9; 393) 26.579*** (df = 9; 393)
Note: p<0.1; p<0.05; p<0.01
LS0tDQp0aXRsZTogIlJlZ3Jlc3Npb25zIg0KYXV0aG9yOiAiUEQgU3BlbmRpbmciDQpkYXRlOiAiMS8xOC8yMDIyIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0aGVtZTogZmxhdGx5DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNQ0KICAgIGZpZ19jYXB0aW9uOiB0cnVlDQoNCiAgICANCg0KDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdHMgPSAiYXNpcyIsDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSA2LCANCiAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0ID0gNikNCg0KbGlicmFyeSh0aWR5dmVyc2UpICMgdGlkeSBkYXRhDQpsaWJyYXJ5KHN0YXJnYXplcikgIyByZWdyZXNzaW9uIHRhYmxlIG91dHB1dHMNCmxpYnJhcnkocGxtKSAgICAgICAjIHBhbmVsIHJlZ3Jlc3Npb25zDQpsaWJyYXJ5KHNhbmR3aWNoKSAgIyByb2J1c3Qgc3RhbmRhcmQgZXJyb3JzDQpsaWJyYXJ5KGxtdGVzdCkgICAgIyBjb2VmZmljaWVudCBtYXRyaWNlcyBhbmQgcmVncmVzc2lvbiBhc3N1bXB0aW9uIHRlc3RzIA0KbGlicmFyeShjb3JycGxvdCkgICMgY29ycmVsYXRpb24gbWF0cmljZXMNCmxpYnJhcnkobWFncml0dHIpICAjIHBpcGUgb3BlcmF0b3JzIA0KbGlicmFyeShnZ3RoZW1lcykgICMgbmljZSBwbG90IHRoZW1lcw0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoZ2dyaWRnZXMpDQpsaWJyYXJ5KHJuYXR1cmFsZWFydGgpDQoNCm15X2RmMiA8LSByZWFkLmNzdigifi9kZl9hbGxpYW5jZS5jc3YiKQ0KDQoNCm15X2RmIDwtIHJlYWQuY3N2KCJ+L2ZpbmFsX3BwcF9hZGpfcGQuY3N2IikNCg0KbXlfZGYgJTw+JSANCiAgZGlzdGluY3QoY293X2NvZGUsIHllYXIsIC5rZWVwX2FsbCA9IFRSVUUpDQoNCm15X2RmICU8PiUgDQogIGZpbGwoYXRvcF9kZWZlbnNlKQ0KDQpwZGYgPC0gcGRhdGEuZnJhbWUobXlfZGYsIGluZGV4ID0gYygiY293X2NvZGUiLCAieWVhciIpKQ0KDQoNCm9wdGlvbnMoc2NpcGVuID0gOTk5KQ0KDQoNCmBgYA0KDQoNCg0KIyBQdWJsaWMgRGlwbG9tYWN5IERlc2NyaXB0aXZlIHN0YXRpc3RpY3MNCg0KIyMjIFB1YmxpYyBEaXBsb21hY3kgc3BlbmRpbmcgaW4gYWdncmVnYXRlLg0KDQoNClRhYmxlIDEgc2hvd3MgdGhlIGF2ZXJhZ2UgYW5kIG1lZGlhbiBQRCBidWRnZXQgYWNyb3NzIHNldmVuIHllYXJzIHRoZSBkYXRhc2V0IC4gV2Ugc2VlIHRoZSBhdmVyYWdlIHNwZW5kaW5nIGlzICQ1LDg3NCw0MjIgKGluIDIwMTUgYWRqdXN0ZWQgUFBQIGFkanVzdGVkIGRvbGxhcnMpLg0KDQoNClRoZXJlIGlzIGEgbGFyZ2Ugc2tldyBpbiB0aGUgZGF0YXNldCBkdWUgdG8gdGhlIGhpZ2ggc3BlbmRpbmcgaW4gYSBmZXcgb2YgdGhlIGNvdW50cmllcyAoQWZnaGFuaXN0YW4gYW5kIElyYXEgZXQgY2V0ZXJhKS4gVGhlIG1lZGlhbiBpcyBmYXIgbG93ZXIgYXQgJDIsMjc3LDQ1NyAoaW4gMjAxNSBhZGp1c3RlZCBQUFAgYWRqdXN0ZWQgZG9sbGFycykuIA0KDQpgYGB7ciwgIGVjaG8gPSBGQUxTRSwgZmlnLmNhcD0iXFxsYWJlbHtmaWc6Zmlnc30gUHVibGljIERpcGxvbWFjeSBhdmVyYWdlIGFuZCBtZWRpYW4ifQ0KDQpteV9kZiAlPiUgDQogIGZpbHRlcih5ZWFyID4gMjAxMikgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKGJ1ZGdldF8yMDE1X2Fkal9wcHApKSAlPiUgDQogIHN1bW1hcmlzZShOID0gcm91bmQobigpLzcsIDApLA0KICAgICAgICAgICAgYXZnX2J1ZGdldCA9IG1lYW4oYnVkZ2V0XzIwMTVfYWRqX3BwcCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBtZWRpYW5fYnVkZ2V0ID0gbWVkaWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBTRCA9IHNkKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSkpICU+JSANCiAga2JsKGNvbC5uYW1lcyA9IGMoIkNvdW50cnkiLCAiQXZlcmFnZSBQRCBidWRnZXQiLCJNZWRpYW4gUEQgYnVkZ2V0IiwgIlN0YW5kYXJkIERldiIpLA0KICAgIGZvcm1hdCA9ICJodG1sIixhbGlnbiA9ICJjIixkaWdpdHMgPSAzLCBmb3JtYXQuYXJncyA9IGxpc3QoYmlnLm1hcmsgPSAiLCIsIHNjaWVudGlmaWMgPSBGQUxTRSksIA0KICAgIGNhcHRpb24gPSAiVGFibGUgMTogUHVibGljIERpcGxvbWFjeSBhdmVyYWdlIGFuZCBtZWRpYW4gYWNyb3NzIHNldmVuIHllYXJzIDIwMTMgLSAyMDE5IikgJT4lDQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsIGh0bWxfZm9udCA9ICJUaW1lcyIsIGZvbnRfc2l6ZSA9IDI1KSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBUUlVFLCBobGluZV9hZnRlciA9IFQpDQoNCmBgYA0KDQoNCklmIHdlIGJyZWFrIGRvd24gdGhlIGJ1ZGdldHMgYWNyb3NzIGVhY2ggeWVhciwgd2UgY2FuIHNlZSB0aGUgYXZlcmFnZSBhbmQgbWVkaWFuIHNwZW5kaW5nDQoNCg0KYGBge3J9DQoNCm15X2RmICU+JSANCiAgZmlsdGVyKHllYXIgPiAyMDEyKSAlPiUgDQogIGZpbHRlcighaXMubmEoYnVkZ2V0XzIwMTVfYWRqX3BwcCkpICU+JSANCiAgbXV0YXRlKHllYXIgPSBhcy5mYWN0b3IoeWVhcikpICU+JSANCiAgZ3JvdXBfYnkoeWVhcikgJT4lIA0KICBzdW1tYXJpc2UoTiA9IG4oKSwNCiAgICAgICAgICAgIGF2Z19idWRnZXQgPSBtZWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgbWVkaWFuX2J1ZGdldCA9IG1lZGlhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgU0QgPSBzZChidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh5ZWFyKSkgJT4lDQoga2JsKGNvbC5uYW1lcyA9IGMoIlllYXIiLCAiQ291bnRyeSIsICJBdmVyYWdlIFBEIGJ1ZGdldCIsIk1lZGlhbiBQRCBidWRnZXQiLCAiU3RhbmRhcmQgRGV2IiksDQogICAgZm9ybWF0ID0gImh0bWwiLGFsaWduID0gImMiLGRpZ2l0cyA9IDMsIGZvcm1hdC5hcmdzID0gbGlzdChiaWcubWFyayA9ICIsIiwgc2NpZW50aWZpYyA9IEZBTFNFKSwgDQogICAgY2FwdGlvbiA9ICJUYWJsZSAyOiBQdWJsaWMgRGlwbG9tYWN5IGF2ZXJhZ2UgYW5kIGVhY2ggeWVhciwgMjAxMyAtIDIwMTkiKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgaHRtbF9mb250ID0gIlRpbWVzIiwgZm9udF9zaXplID0gMjUpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGhsaW5lX2FmdGVyID0gVCkNCiANCmBgYA0KV2UgY2FuIGxvb2sgYXQgdGhlIGRlbnNpdHkgcGxvdHMgZm9yIGVhY2ggeWVhciB0byBleGFtaW5lIHRoZSBkaXN0cmlidXRpb24gYW5kIHRoZSBza2V3DQoNCmBgYHtyfQ0KDQpteV9kZiAlPiUgDQogIGdyb3VwX2J5KHllYXIpICU+JSANCiAgZmlsdGVyKHllYXIgPiAyMDEyKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGxvZyhidWRnZXRfMjAxNV9hZGpfcHBwKSwgeSA9IGFzLmZhY3Rvcih5ZWFyKSwgZmlsbCA9IGFzLmZhY3Rvcih5ZWFyKSkpICsNCiAgZ2VvbV9kZW5zaXR5X3JpZGdlcyhyZWxfbWluX2hlaWdodCA9IDAuMDA3LCBzY2FsZSA9IDEuNSkgKyANCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiIzZhMDQwZiIsIiM5ZDAyMDgiLCIjZDAwMDAwIiwiI2RjMmYwMiIsIiNlODVkMDQiLCIjZjQ4YzA2IiwiI2ZhYTMwNyIsIiNmZmJhMDgiKSwgbmFtZSA9IE5VTEwpICsgDQogIGdndGhlbWVzOjp0aGVtZV9wYW5kZXIoKSArIA0KICBsYWJzKHN1YnRpdGxlID0gIkdyYXBoIDE6IFBEIHNwZW5kaW5nIGRpc3RyaWJ1dGlvbiBlYWNoIHllYXIsIDIwMTIgLSAyMDE5IikgKyAgDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxNSwgYW5nbGUgPSAwLCBoanVzdCA9IDEsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpgYGANCg0KDQojIFB1YmxpYyBEaXBsb21hY3kgRGVzY3JpcHRpdmUgc3RhdGlzdGljcw0KDQojIyMgSW4gYWdncmVnYXRlIE1JTlVTIEFmZ2hhbmlzdGFuLCBJcmFxLCBQYWtpc3Rhbg0KDQpgYGB7ciwgIGVjaG8gPSBGQUxTRX0NCm15X2RmICU+JSANCiAgZmlsdGVyKGNvdW50cnlfbmFtZSAhPSAiQWZnaGFuaXN0YW4iKSAlPiUgDQogIGZpbHRlcihjb3VudHJ5X25hbWUgIT0gIklyYXEiKSAlPiUgDQogIGZpbHRlcihjb3VudHJ5X25hbWUgIT0gIlBha2lzdGFuIikgJT4lIA0KICBmaWx0ZXIoeWVhciA+IDIwMTIpICU+JSANCiAgZmlsdGVyKCFpcy5uYShidWRnZXRfMjAxNV9hZGpfcHBwKSkgJT4lIA0KICBzdW1tYXJpc2UoTiA9IHJvdW5kKG4oKS83LCAwKSwNCiAgICAgICAgICAgIGF2Z19idWRnZXQgPSBtZWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgbWVkaWFuX2J1ZGdldCA9IG1lZGlhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgU0QgPSBzZChidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGtibChjb2wubmFtZXMgPSBjKCJDb3VudHJ5IiwgIkF2ZXJhZ2UgUEQgYnVkZ2V0IiwiTWVkaWFuIFBEIGJ1ZGdldCIsICJTdGFuZGFyZCBEZXYiKSwNCiAgICBmb3JtYXQgPSAiaHRtbCIsYWxpZ24gPSAiYyIsZGlnaXRzID0gMywgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiLCBzY2llbnRpZmljID0gRkFMU0UpLCANCiAgICBjYXB0aW9uID0gIlRhYmxlIDM6IFB1YmxpYyBEaXBsb21hY3kgYXZlcmFnZSBhY3Jvc3MgeWVhcnMgMjAxMyAtIDIwMTkgTUlOVVMgQWZnaGFuaXN0YW4sIElyYXEgYW5kIFBha2lzdGFuIikgJT4lDQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsIGh0bWxfZm9udCA9ICJUaW1lcyIsIGZvbnRfc2l6ZSA9IDI1KSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBUUlVFLCBobGluZV9hZnRlciA9IFQpIA0KDQpgYGANCg0KDQpDb21wYXJpbmcgZGVuc2l0eSBwbG90cyBhbmQgZGlzdHJpYnV0aW9uIG9mIFBEIHNwZW5kaW5nIGFjcm9zcyB0aGUgZGlmZmVyZW50IGdlb2dyYXBoaWMgcmVnaW9ucw0KYGBge3J9DQoNCm15X2RmICU+JSANCiAgZmlsdGVyKCFpcy5uYShyZWdpb25fcG9saXRpY2FsMTApKSAlPiUgDQogICAgZHBseXI6Om11dGF0ZShnZW9fcmVnaW9uX25hbWUgPSBkcGx5cjo6cmVjb2RlKGFzLmZhY3RvcihyZWdpb25fcG9saXRpY2FsMTApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIlBvc3QtU292aWV0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJMYXRpbiBBbWVyaWNhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJNRU5BIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJTdWIgU2FoYXJhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICJXZXN0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2IiA9ICJFYXN0IEFzaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjciID0gIlNvdXRoLUVhc3QgQXNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOCIgPSAiU291dGhlcm4gQXNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOSIgPSAiUGFjaWZpYyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAiID0gIkNhcmliYmVhbiIpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGxvZyhidWRnZXRfMjAxNV9hZGpfcHBwKSwgeSA9IGFzLmZhY3RvcihnZW9fcmVnaW9uX25hbWUpLCBmaWxsID0gYXMuZmFjdG9yKGdlb19yZWdpb25fbmFtZSkpKSArDQogIGdlb21fZGVuc2l0eV9yaWRnZXMocmVsX21pbl9oZWlnaHQgPSAwLjAwMSwgc2NhbGUgPSAzKSArIA0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBzYW1wbGUoYygiI2M0MDIzMyIsICIjZmY3NTM4IiwgIiNmZmE0MWMiLCAiI2ZmZDMwMCIsICIjODBjMDIyIiwiIzAwYWQ0MyIsICIjMDA5MTczIiwgIiMwMDc1YTMiLCAiIzM1NTVhMCIsICIjNjkzNTljIiksIHJlcGxhY2UgPSBGQUxTRSksIG5hbWUgPSBOVUxMKSArIA0KICBnZ3RoZW1lczo6dGhlbWVfcGFuZGVyKCkgKw0KICBsYWJzKHN1YnRpdGxlID0gIkdyYXBoIDI6IFBEIHNwZW5kaW5nIGRpc3RyaWJ1dGlvbiBlYWNoIEdFT0dSQVBISUNBTCByZWdpb24gYWNvcnNzIGFsbCBzZXZlbiB5ZWFycyIpICsgIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxNSwgYW5nbGUgPSAwLCBoanVzdCA9IDEsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIpKQ0KDQpgYGANCg0KQ29tcGFyaW5nIGRlbnNpdHkgcGxvdHMgYW5kIGRpc3RyaWJ1dGlvbiBvZiBQRCBzcGVuZGluZyBhY3Jvc3MgdGhlIGRpZmZlcmVudCBwb2xpdGljYWwgcmVnaW9ucw0KDQpgYGB7ciwgb3V0LndpZHRoID0gIjUwMCUifQ0KDQpteV9kZiAlPiUgDQogIGdncGxvdChhZXMoeCA9IGxvZyhidWRnZXRfMjAxNV9hZGpfcHBwKSwgeSA9IGFzLmZhY3RvcihyZWdpb25zKSwgZmlsbCA9IGFzLmZhY3RvcihyZWdpb25zKSkpICsNCiAgZ2VvbV9kZW5zaXR5X3JpZGdlcyhyZWxfbWluX2hlaWdodCA9IDAuMDAxLCBzY2FsZSA9IDIpICsgDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMyMTllYmMiLCAiIzI2NDY1MyIsICIjNDNhYThiIiwgIiM2ZDU5N2EiLCAiI2U2Mzk0NiIsICIjZjRhMjYxIiksIG5hbWUgPSBOVUxMKSArDQogIGdndGhlbWVzOjp0aGVtZV9wYW5kZXIoKSArDQogIGxhYnMoc3VidGl0bGUgPSAiR3JhcGggMjogUEQgc3BlbmRpbmcgZGlzdHJpYnV0aW9uIGVhY2ggUE9MSVRJQ0FMIHJlZ2lvbiBhY3Jvc3MgYWxsIHNldmVuIHllYXJzIikgKyAgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDE1LCBhbmdsZSA9IDAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIikpDQoNCmBgYA0KDQojIE1lYW4sIG1pbiBhbmQgbWF4IGNvbmZpZGVuY2UgaW50ZXJ2YWxzIA0KDQoNCkNvbXBhcmluZyByZWdpb25zIHdpdGggY29uZmlkZW5jZSBpbnRlcnZhbHMNCg0KYGBge3J9DQoNCm15X2RmICU+JQ0KICBzdW1tYXJpemUoYXZnID0gcm91bmQobWVhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLDIpKSAlPiUNCiAgcHVsbChhdmcpLT4gcGRfYXZnDQoNCm15X2RmICU+JSANCiAgZmlsdGVyKHllYXIgPiAyMDEyKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShidWRnZXRfMjAxNV9hZGpfcHBwKSkgJT4lIA0KICBncm91cF9ieShyZWdpb25zKSAlPiUgDQogIG11dGF0ZSgNCiAgICBtZWFuX3BkID0gbWVhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLA0KICAgIHNkX3BkPSBzZChidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLA0KICAgIG5fcGQgPSBuKCkpICU+JQ0KICBtdXRhdGUoc2VfcGQgPSBzZF9wZCAvIHNxcnQobl9wZCksDQogICAgICAgICBsb3dlcl9jaV9wZCA9IG1lYW5fcGQgLSBxdCgxIC0gKDAuMDUgLyAyKSwgbl9wZCAtIDEpICogc2VfcGQsDQogICAgICAgICB1cHBlcl9jaV9wZCA9IG1lYW5fcGQgKyBxdCgxIC0gKDAuMDUgLyAyKSwgbl9wZCAtIDEpICogc2VfcGQpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcmVnaW9ucykpICsNCiAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IHBkX2F2ZyksIGNvbG9yID0gImdyYXk3MCIsIHNpemUgPSAwLjYpICsNCiAgZ2VvbV9zZWdtZW50KGFlcyh4ZW5kID0gcmVnaW9ucywgDQogICAgICAgICAgICAgICAgICAgeSA9IGxvd2VyX2NpX3BkLCB5ZW5kID0gdXBwZXJfY2lfcGQsIGNvbG9yID0gcmVnaW9ucyksIHNpemUgPSAxMCwgYWxwaGEgPSAwLjA1KSArDQogIGdlb21fc2VnbWVudChhZXMoeGVuZCA9IHJlZ2lvbnMsIHkgPSBwZF9hdmcsIHllbmQgPSBtZWFuX3BkKSwgc2l6ZSA9IDEpICsgDQogIGdlb21fcG9pbnQoYWVzKHggPSBmb3JjYXRzOjpmY3RfcmVvcmRlcihyZWdpb25zLCAtbWVhbl9wZCksIHkgPSBtZWFuX3BkLCBjb3VudHJ5ID0gcmVnaW9ucyksIHNpemUgPSAyKSArDQogIGdlb21fcG9pbnQoYWVzKHkgPSBsb3dlcl9jaV9wZCksIHNoYXBlID0gMTgsIHNpemUgPSAyLCBhbHBoYSA9IDAuOCkgKyANCiAgZ2VvbV9wb2ludChhZXMoeSA9IHVwcGVyX2NpX3BkKSwgc2hhcGUgPSAxOCwgc2l6ZSA9IDIsIGFscGhhID0gMC44KSArIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzIxOWViYyIsICIjMjY0NjUzIiwgIiM0M2FhOGIiLCAiIzZkNTk3YSIsICIjZTYzOTQ2IiwgIiNmNGEyNjEiKSwgbmFtZSA9IE5VTEwpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgZ2d0aGVtZXM6OnRoZW1lX3BhbmRlcigpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyANCiAgbGFicyhzdWJ0aXRsZSA9ICJHcmFwaCAzOiBBdmVyYWdlIFBEIHNwZW5kaW5nIGluIGVhY2ggcmVnaW9uIikgKyAgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwgDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxNSwgYW5nbGUgPSAwLCBoanVzdCA9IDEsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIpKQ0KDQoNCg0KYGBgDQoNCg0KDQoNCldpdGhvdXQgQWZnaGFuaXN0YW4sIElyYXEgYW5kIFBha2lzdGFuDQoNCmBgYHtyfQ0KDQpteV9kZiAlPiUNCiAgZmlsdGVyKGNvdW50cnlfbmFtZSAhPSAiQWZnaGFuaXN0YW4iKSAlPiUNCiAgIGZpbHRlcihjb3VudHJ5X25hbWUgIT0gIklyYXEiKSAlPiUgDQogIGZpbHRlcihjb3VudHJ5X25hbWUgIT0gIlBha2lzdGFuIikgJT4lIA0KICBzdW1tYXJpemUoYXZnID0gcm91bmQobWVhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLCAyKSkgJT4lDQogIHB1bGwoYXZnKS0+IHBkX2F2Zw0KDQpteV9kZiAlPiUgDQogIGZpbHRlcih5ZWFyID4gMjAxMikgJT4lDQogICAgZmlsdGVyKGNvdW50cnlfbmFtZSAhPSAiQWZnaGFuaXN0YW4iKSAlPiUNCiAgIGZpbHRlcihjb3VudHJ5X25hbWUgIT0gIklyYXEiKSAlPiUgDQogIGZpbHRlcihjb3VudHJ5X25hbWUgIT0gIlBha2lzdGFuIikgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKGJ1ZGdldF8yMDE1X2Fkal9wcHApKSAlPiUgDQogIGdyb3VwX2J5KHJlZ2lvbnMpICU+JSANCiAgbXV0YXRlKA0KICAgIG1lYW5fcGQgPSBtZWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksDQogICAgc2RfcGQ9IHNkKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksDQogICAgbl9wZCA9IG4oKSkgJT4lDQogIG11dGF0ZShzZV9wZCA9IHNkX3BkIC8gc3FydChuX3BkKSwNCiAgICAgICAgIGxvd2VyX2NpX3BkID0gbWVhbl9wZCAtIHF0KDEgLSAoMC4wNSAvIDIpLCBuX3BkIC0gMSkgKiBzZV9wZCwNCiAgICAgICAgIHVwcGVyX2NpX3BkID0gbWVhbl9wZCArIHF0KDEgLSAoMC4wNSAvIDIpLCBuX3BkIC0gMSkgKiBzZV9wZCkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSByZWdpb25zKSkgKw0KICBnZW9tX2hsaW5lKGFlcyh5aW50ZXJjZXB0ID0gcGRfYXZnKSwgY29sb3IgPSAiZ3JheTcwIiwgc2l6ZSA9IDAuNikgKw0KICBnZW9tX3NlZ21lbnQoYWVzKHhlbmQgPSByZWdpb25zLCANCiAgICAgICAgICAgICAgICAgICB5ID0gbG93ZXJfY2lfcGQsIHllbmQgPSB1cHBlcl9jaV9wZCwgY29sb3IgPSByZWdpb25zKSwgc2l6ZSA9IDEwLCBhbHBoYSA9IDAuMDUpICsNCiAgZ2VvbV9zZWdtZW50KGFlcyh4ZW5kID0gcmVnaW9ucywgeSA9IHBkX2F2ZywgeWVuZCA9IG1lYW5fcGQpLCBzaXplID0gMSkgKyANCiAgZ2VvbV9wb2ludChhZXMoeCA9IGZvcmNhdHM6OmZjdF9yZW9yZGVyKHJlZ2lvbnMsIC1tZWFuX3BkKSwgeSA9IG1lYW5fcGQsIGNvdW50cnkgPSByZWdpb25zKSwgc2l6ZSA9IDIpICsNCiAgZ2VvbV9wb2ludChhZXMoeSA9IGxvd2VyX2NpX3BkKSwgc2hhcGUgPSAxOCwgc2l6ZSA9IDIsIGFscGhhID0gMC44KSArIA0KICBnZW9tX3BvaW50KGFlcyh5ID0gdXBwZXJfY2lfcGQpLCBzaGFwZSA9IDE4LCBzaXplID0gMiwgYWxwaGEgPSAwLjgpICsgDQogIA0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzIxOWViYyIsICIjMjY0NjUzIiwgIiM0M2FhOGIiLCAiIzZkNTk3YSIsICIjZTYzOTQ2IiwgIiNmNGEyNjEiKSwgbmFtZSA9IE5VTEwpICsNCiAgY29vcmRfZmxpcCgpICsgIGdndGhlbWVzOjp0aGVtZV9wYW5kZXIoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyANCiAgbGFicyhzdWJ0aXRsZSA9ICJHcmFwaCA0OiBBdmVyYWdlIFBEIHNwZW5kaW5nIE1JTlVTIEFmZ2hhbmlzdGFuLCBJcmFxLCBQYWtpc3RhbiIpICsgIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTUsIGFuZ2xlID0gMCwgaGp1c3QgPSAxLCB2anVzdCA9IDAsIGZhY2UgPSAicGxhaW4iKSkNCg0KYGBgDQoNCg0KDQojIEdyb3VwZWQgZGVzY3JpcHRpdmUgc3RhdGlzdGljcw0KDQogDQojIyMgVVMgdHJvb3BzDQoNCk92ZXIgMTAwIGNvbXBhcmVkIHRvIDEwMCBhbmQgZmV3ZXIgVVMgdHJvb3BzDQoNCmBgYHtyLCBlY2hvID0gRkFMU0V9DQoNCm15X2RmICU+JQ0KICBmaWx0ZXIoeWVhciA+IDIwMTIpICU+JSAgDQogIGZpbHRlcighaXMubmEoYnVkZ2V0XzIwMTVfYWRqX3BwcCkpICU+JSANCiAgZ3JvdXBfYnkoY293X2NvZGUsIHllYXIpICU+JSANCiAgbXV0YXRlKHRyb29wc19iaW5hcnkgPSBpZmVsc2UodXNfdHJvb3BzID4gMTAwLCAiTW9yZSB0aGFuIDEwMCBVUyB0cm9vcHMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZld2VyIHRoYW4gMTAwIFVTIHRyb29wcyIpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGZpbHRlcighaXMubmEodHJvb3BzX2JpbmFyeSkpICU+JSANCiAgZ3JvdXBfYnkodHJvb3BzX2JpbmFyeSkgJT4lIA0KICBzdW1tYXJpc2UoTiA9IHJvdW5kKG4oKS83LCAwKSwNCiAgICAgICAgICAgIGF2Z19idWRnZXQgPSBtZWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgbWVkaWFuX2J1ZGdldCA9IG1lZGlhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgU0QgPSBzZChidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGtibCgNCiAgICBjb2wubmFtZXMgPSBjKCJVUyB0cm9vcHMiLCAiQ291bnRyeSIsICJBdmVyYWdlIFBEIGJ1ZGdldCIsIk1lZGlhbiBQRCBidWRnZXQiLCAiU3RhbmRhcmQgRGV2IiksDQogICAgY2FwdGlvbiA9ICJUYWJsZSA0OiBQRCBzcGVuZGluZyBpbiBjb3VudHJpZXMgdW5kZXIgMTAwIHZlcnVzIG92ZXIgMTAwIHRyb29wcyBzdGF0aW9uZWQiLCANCiAgICBhbGlnbj0iYyIsDQogICAgZGlnaXRzID0gMywgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiLCBzY2llbnRpZmljID0gRkFMU0UpKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgaHRtbF9mb250ID0gIlRpbWVzIiwgZm9udF9zaXplID0gMjUpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGhsaW5lX2FmdGVyID0gVCkNCg0KYGBgDQoNCmBgYHtyfQ0KDQpteV9kZiAlPiUNCiAgZ3JvdXBfYnkoY291bnRyeV9uYW1lKSAlPiUgDQogIG11dGF0ZShtZWFuX3Ryb29wcyA9IG1lYW4odXNfdHJvb3BzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShtZWFuX2J1ZGdldCA9IG1lYW4oYnVkZ2V0XzIwMTVfYWRqX3BwcCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBmaWx0ZXIoeWVhciA+IDIwMTIpICU+JSAgDQogIGdncGxvdChhZXMoeCA9IGxvZyhtZWFuX3Ryb29wcyksIHkgPSBsb2cobWVhbl9idWRnZXQpKSkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICIjOWQwMjA4Iiwgc2QgPSAiTlVMTCIpICsNCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBhcy5mYWN0b3IocmVnaW9ucyksIA0KICAgICAgICAgICAgICAgICBzaGFwZSA9IGFzLmZhY3RvcihyZWdpb25zKSksIHNpemUgPSAzKSArDQogIGZhY2V0X3dyYXAofnJlZ2lvbnMpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMyMTllYmMiLCAiIzI2NDY1MyIsICIjNDNhYThiIiwgIiM2ZDU5N2EiLCAiI2U2Mzk0NiIsICIjZjRhMjYxIiksIG5hbWUgPSBOVUxMKSArDQogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE1LDE2LDE3LDE4LDE5LDEwKSwgbmFtZSA9IE5VTEwpICsNCiAgeWxhYigiTG9nZ2VkIFBEIHNwZW5kaW5nIChjb25zdGFudCBQUFApIikgKw0KICB4bGFiKCJMaWJlcmFsIFZvdGluZyBQYXR0ZXJuIGF0IFVOR0EiKSArDQogIGdndGhlbWVzOjp0aGVtZV9wYW5kZXIoKSArIA0KICBnZ3RpdGxlKCJVUyBUcm9vcHMgeCBQRCBCdWRnZXQgKFBQUCkgU2NhdHRlcnBsb3QiKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwgDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDE1LCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iKSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTUsIGFuZ2xlID0gMCwgaGp1c3QgPSAxLCB2anVzdCA9IDAsIGZhY2UgPSAicGxhaW4iKSwgIA0KICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTAsIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIiksDQogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxMCwgYW5nbGUgPSA5MCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQoNCg0KYGBgDQoNCg0KIyMjIEZyZWVkb20gSG91c2UgZ3JvdXBzIC0gRnJlZSwgUGFydGx5IEZyZWUgYW5kIE5vdCBGcmVlDQoNCmBgYHtyfQ0KDQpteV9kZiAlPiUNCiAgZmlsdGVyKHllYXIgPiAyMDEyKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShidWRnZXRfMjAxNV9hZGpfcHBwKSkgJT4lIA0KICBtdXRhdGUoZmhfY2F0ID0gY2FzZV93aGVuKChmcmVlZG9tX2hvdXNlID09IDEpIH4gICJGcmVlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJlZWRvbV9ob3VzZSA9PSAyKSB+ICAiUGFydGx5IEZyZWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmVlZG9tX2hvdXNlID09IDMpIH4gICJOb3QgRnJlZSIpKSAgJT4lIA0KICBtdXRhdGUoZmhfY2F0ID0gZmFjdG9yKGZoX2NhdCwgbGV2ZWxzID0gYygiTm90IEZyZWUiLCAiUGFydGx5IEZyZWUiLCAiRnJlZSIpKSkgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKGZoX2NhdCkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbG9nKHVzX3Ryb29wcyksIHkgPSBsb2coYnVkZ2V0XzIwMTVfYWRqX3BwcCkpKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gIiM5ZDAyMDgiLCBzZCA9ICJOVUxMIikgKw0KICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IGFzLmZhY3RvcihyZWdpb25zKSwgDQogICAgICAgICAgICAgICAgIHNoYXBlID0gYXMuZmFjdG9yKHJlZ2lvbnMpKSwgc2l6ZSA9IDMpICsNCiAgZmFjZXRfd3JhcCh+ZmhfY2F0KSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMjE5ZWJjIiwgIiMyNjQ2NTMiLCAiIzQzYWE4YiIsICIjNmQ1OTdhIiwgIiNlNjM5NDYiLCAiI2Y0YTI2MSIpLCBuYW1lID0gTlVMTCkgKw0KICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNSwxNiwxNywxOCwxOSwxMCksIG5hbWUgPSBOVUxMKSArDQogIHlsYWIoIkxvZ2dlZCBQRCBzcGVuZGluZyAoY29uc3RhbnQgUFBQKSIpICsNCiAgeGxhYigiVVMgdHJvb3BzIChsb2dnZWQpIikgKw0KICBnZ3RoZW1lczo6dGhlbWVfcGFuZGVyKCkgKyANCiAgZ2d0aXRsZSgiVVMgVHJvb3BzIHggUEQgQnVkZ2V0IChQUFApIFNjYXR0ZXJwbG90IikgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksIA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxNSwgYW5nbGUgPSAwLCBoanVzdCA9IC41LCB2anVzdCA9IC41LCBmYWNlID0gInBsYWluIiksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDE1LCBhbmdsZSA9IDAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIiksICANCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDEwLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIpLA0KICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTAsIGFuZ2xlID0gOTAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KbXlfZGYgJT4lDQogIGZpbHRlcih5ZWFyID4gMjAxMikgJT4lIA0KICAgIGZpbHRlcighaXMubmEoYnVkZ2V0XzIwMTVfYWRqX3BwcCkpICU+JSANCiAgbXV0YXRlKGZoX2NhdCA9IGNhc2Vfd2hlbigoZnJlZWRvbV9ob3VzZSA9PSAxKSB+ICAiRnJlZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyZWVkb21faG91c2UgPT0gMikgfiAgIlBhcnRseSBGcmVlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJlZWRvbV9ob3VzZSA9PSAzKSB+ICAiTm90IEZyZWUiKSkgICU+JSANCiAgbXV0YXRlKGZoX2NhdCA9IGZhY3RvcihmaF9jYXQsIGxldmVscyA9IGMoIk5vdCBGcmVlIiwgIlBhcnRseSBGcmVlIiwgIkZyZWUiKSkpICU+JSANCiAgZmlsdGVyKCFpcy5uYShmcmVlZG9tX2hvdXNlKSkgJT4lIA0KICBncm91cF9ieShmaF9jYXQpICU+JSANCiAgc3VtbWFyaXNlKE4gPSByb3VuZChuKCkvNywgMCksDQogICAgICAgICAgICBhdmdfYnVkZ2V0ID0gbWVhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIG1lZGlhbl9idWRnZXQgPSBtZWRpYW4oYnVkZ2V0XzIwMTVfYWRqX3BwcCwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIFNEID0gc2QoYnVkZ2V0XzIwMTVfYWRqX3BwcCwgbmEucm0gPSBUUlVFKSkgJT4lIGtibCgNCiAgICAgICAgICAgICAgY29sLm5hbWVzID0gYygiRnJlZWRvbSBIb3VzZSIsIkNvdW50cmllcyIsICJBdmVyYWdlIFBEIGJ1ZGdldCIsIk1lZGlhbiBQRCBidWRnZXQiLCAiU3RhbmRhcmQgRGV2IiksDQogICAgICAgICAgICAgIGZvcm1hdD0gImxhdGV4IiwNCiAgICAgICAgICAgICAgYWxpZ249ImMiLA0KICAgICAgICAgICAgICBkaWdpdHMgPSAzLCBmb3JtYXQuYXJncyA9IGxpc3QoYmlnLm1hcmsgPSAiLCIsIHNjaWVudGlmaWMgPSBGQUxTRSkpICU+JQ0KICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCBodG1sX2ZvbnQgPSAiVGltZXMiLCBmb250X3NpemUgPSAyNSkgJT4lIA0KICByb3dfc3BlYygwLCBib2xkID0gVFJVRSwgaGxpbmVfYWZ0ZXIgPSBUKQ0KDQoNCm15X2RmICU+JQ0KICBmaWx0ZXIoeWVhciA+IDIwMTIpICU+JQ0KICBncm91cF9ieShjb3VudHJ5X25hbWUpICU+JSANCiAgbXV0YXRlKG1lYW5fdmRlbSA9IG1lYW4ocG9saXR5MiwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUobWVhbl9idWRnZXQgPSBtZWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbWVhbl92ZGVtLCB5ID0gbG9nKG1lYW5fYnVkZ2V0KSkpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImdsbSIsIGNvbG9yID0gIiM5ZDAyMDgiLCBzZCA9ICJOVUxMIikgKw0KICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IGFzLmZhY3RvcihyZWdpb25zKSwgDQogICAgICAgICAgICAgICAgIHNoYXBlID0gYXMuZmFjdG9yKHJlZ2lvbnMpKSwgc2l6ZSA9IDMpICsNCiAgZmFjZXRfd3JhcCh+cmVnaW9ucykgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzIxOWViYyIsICIjMjY0NjUzIiwgIiM0M2FhOGIiLCAiIzZkNTk3YSIsICIjZTYzOTQ2IiwgIiNmNGEyNjEiKSwgbmFtZSA9IE5VTEwpICsNCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTUsMTYsMTcsMTgsMTksMTApLCBuYW1lID0gTlVMTCkgKw0KICB5bGFiKCJMb2dnZWQgUEQgc3BlbmRpbmcgKGNvbnN0YW50IFBQUCkiKSArDQogIHhsYWIoIkxpYmVyYWwgVm90aW5nIFBhdHRlcm4gYXQgVU5HQSIpICsNCiAgZ2d0aGVtZXM6OnRoZW1lX3BhbmRlcigpICsgDQogIGdndGl0bGUoIk1lYW4gUG9saXR5IFNjb3JlcyB4IE1lYW4gUEQgQnVkZ2V0IChQUFApIFNjYXR0ZXJwbG90IDIwMTMgLSAyMDE5IiApICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLCANCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTUsIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIpLA0KICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxNSwgYW5nbGUgPSAwLCBoanVzdCA9IDEsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIpLCAgDQogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxMCwgYW5nbGUgPSAwLCBoanVzdCA9IC41LCB2anVzdCA9IDAsIGZhY2UgPSAicGxhaW4iKSwNCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDEwLCBhbmdsZSA9IDkwLCBoanVzdCA9IC41LCB2anVzdCA9IC41LCBmYWNlID0gInBsYWluIiksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCg0KDQpgYGANCg0KDQojIyMgRGVmZW5jZSBhbGxpYW5jZSB3aXRoIHRoZSBVUw0KDQpDb3VudHJpZXMgd2l0aCBkZWZlbnNlIHRyZWF0eSB3aXRoIHRoZSBVUyB2ZXJzdXMgdGhvdXNlIHdpdGhvdXQNCg0KYGBge3J9DQoNCm15X2RmICU+JSANCiAgZmlsdGVyKHllYXIgPiAyMDEyKSAlPiUgDQogIG11dGF0ZShkZWZlbmNlX3RyZWF0eSA9IGlmZWxzZShhdG9wX2RlZmVuc2UgPT0gMCwgIk5vIHRyZWF0eSIsICJUcmVhdHkiKSkgJT4lIA0KICBncm91cF9ieShkZWZlbmNlX3RyZWF0eSkgJT4lIA0KICBmaWx0ZXIoIWlzLm5hKGF0b3BfZGVmZW5zZSkpICU+JSANCiAgc3VtbWFyaXNlKE4gPSByb3VuZChuKCkvNywgMCksDQogICAgYXZnX2J1ZGdldCA9IG1lYW4oYnVkZ2V0XzIwMTVfYWRqX3BwcCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBtZWRpYW5fYnVkZ2V0ID0gbWVkaWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBTRCA9IHNkKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSkpICU+JSANCiAga2JsKA0KICAgIGNvbC5uYW1lcyA9IGMoIkRlZmVuc2UgVHJlYXR5IiwgIkNvdW50cnkiLCAiQXZlcmFnZSBQRCBidWRnZXQiLCJNZWRpYW4gUEQgYnVkZ2V0IiwgIlN0YW5kYXJkIERldiIpLA0KICAgIGZvcm1hdD0gImh0bWwiLA0KICAgIGFsaWduPSJjIiwNCiAgICBkaWdpdHMgPSAzLCBmb3JtYXQuYXJncyA9IGxpc3QoYmlnLm1hcmsgPSAiLCIsIHNjaWVudGlmaWMgPSBGQUxTRSkpICU+JQ0KICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCBodG1sX2ZvbnQgPSAiVGltZXMiLCBmb250X3NpemUgPSAyNSkgJT4lIA0KICByb3dfc3BlYygwLCBib2xkID0gVFJVRSwgaGxpbmVfYWZ0ZXIgPSBUKQ0KDQoNCm15X2RmICU+JQ0KICAgIG11dGF0ZShkZWZlbmNlX3RyZWF0eSA9IGlmZWxzZShhdG9wX2RlZmVuc2UgPT0gMCwgIk5vIHRyZWF0eSIsICJUcmVhdHkiKSkgJT4lIA0KICAgIGZpbHRlcih5ZWFyID4gMjAxMikgJT4lICANCiAgZ2dwbG90KGFlcyh4ID0gbG9nKHVzX3Ryb29wcyksIHkgPSBsb2coYnVkZ2V0XzIwMTVfYWRqX3BwcCkpKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gIiM5ZDAyMDgiLCBzZCA9ICJOVUxMIikgKw0KICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IGFzLmZhY3RvcihyZWdpb25zKSwgDQogICAgICAgICAgICAgICAgIHNoYXBlID0gYXMuZmFjdG9yKHJlZ2lvbnMpKSwgc2l6ZSA9IDMpICsNCiAgZmFjZXRfd3JhcCh+ZGVmZW5jZV90cmVhdHkpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMyMTllYmMiLCAiIzI2NDY1MyIsICIjNDNhYThiIiwgIiM2ZDU5N2EiLCAiI2U2Mzk0NiIsICIjZjRhMjYxIiksIG5hbWUgPSBOVUxMKSArDQogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE1LDE2LDE3LDE4LDE5LDEwKSwgbmFtZSA9IE5VTEwpICsNCiAgeWxhYigiTG9nZ2VkIFBEIHNwZW5kaW5nIChjb25zdGFudCBQUFApIikgKw0KICB4bGFiKCJMaWJlcmFsIFZvdGluZyBQYXR0ZXJuIGF0IFVOR0EiKSArDQogIGdndGhlbWVzOjp0aGVtZV9wYW5kZXIoKSArIA0KICBnZ3RpdGxlKCJVUyBUcm9vcHMgeCBQRCBCdWRnZXQgKFBQUCkgU2NhdHRlcnBsb3QiKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwgDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDE1LCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iKSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTUsIGFuZ2xlID0gMCwgaGp1c3QgPSAxLCB2anVzdCA9IDAsIGZhY2UgPSAicGxhaW4iKSwgIA0KICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTAsIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIiksDQogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxMCwgYW5nbGUgPSA5MCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQoNCg0KYGBgDQoNCmBgYHtyfQ0KDQpteV9kZiAlPiUNCiAgICBtdXRhdGUoZGVmZW5jZV90cmVhdHkgPSBpZmVsc2UoYXRvcF9kZWZlbnNlID09IDAsICJObyB0cmVhdHkiLCAiVHJlYXR5IikpICU+JSANCiAgICBmaWx0ZXIoeWVhciA+IDIwMTIpICU+JSAgDQogIGdncGxvdChhZXMoeCA9IGxvZyh1c190cm9vcHMpLCB5ID0gbG9nKGJ1ZGdldF8yMDE1X2Fkal9wcHApKSkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICIjOWQwMjA4Iiwgc2QgPSAiTlVMTCIpICsNCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBhcy5mYWN0b3IocmVnaW9ucyksIA0KICAgICAgICAgICAgICAgICBzaGFwZSA9IGFzLmZhY3RvcihyZWdpb25zKSksIHNpemUgPSAzKSArDQogIGZhY2V0X3dyYXAofmRlZmVuY2VfdHJlYXR5KSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMjE5ZWJjIiwgIiMyNjQ2NTMiLCAiIzQzYWE4YiIsICIjNmQ1OTdhIiwgIiNlNjM5NDYiLCAiI2Y0YTI2MSIpLCBuYW1lID0gTlVMTCkgKw0KICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNSwxNiwxNywxOCwxOSwxMCksIG5hbWUgPSBOVUxMKSArDQogIHlsYWIoIkxvZ2dlZCBQRCBzcGVuZGluZyAoY29uc3RhbnQgUFBQKSIpICsNCiAgeGxhYigiTGliZXJhbCBWb3RpbmcgUGF0dGVybiBhdCBVTkdBIikgKw0KICBnZ3RoZW1lczo6dGhlbWVfcGFuZGVyKCkgKyANCiAgZ2d0aXRsZSgiVVMgVHJvb3BzIHggUEQgQnVkZ2V0IChQUFApIFNjYXR0ZXJwbG90IikgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksIA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxNSwgYW5nbGUgPSAwLCBoanVzdCA9IC41LCB2anVzdCA9IC41LCBmYWNlID0gInBsYWluIiksDQogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDE1LCBhbmdsZSA9IDAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIiksICANCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDEwLCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gMCwgZmFjZSA9ICJwbGFpbiIpLA0KICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTAsIGFuZ2xlID0gOTAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikNCg0KYGBgDQoNCg0KDQojIyMgTGliZXJhbCB2b3RpbmcgcGF0dGVybiANCg0KYGBge3J9DQoNCm15X2RmICU+JSANCiAgZmlsdGVyKHllYXIgPiAyMDEyKSAlPiUgIA0KICBncm91cF9ieShjb3dfY29kZSwgeWVhcikgJT4lIA0KICBtdXRhdGUobGliZXJhbF92b3RpbmdfYmluYXJ5ID0gaWZlbHNlKGlkZWFsX3BvaW50X2Rpc3RhbmNlID4gMi41LCAiSWxsaWJlcmFsIHZvdGVycyIsICJMaWJlcmFsIHZvdGVycyIpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGZpbHRlcighaXMubmEobGliZXJhbF92b3RpbmdfYmluYXJ5KSkgJT4lIA0KICBncm91cF9ieShsaWJlcmFsX3ZvdGluZ19iaW5hcnkpICU+JSANCiAgc3VtbWFyaXNlKE4gPSByb3VuZChuKCkvNywgMCksDQogICAgICAgICAgICBhdmdfYnVkZ2V0ID0gbWVhbihidWRnZXRfMjAxNV9hZGpfcHBwLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIG1lZGlhbl9idWRnZXQgPSBtZWRpYW4oYnVkZ2V0XzIwMTVfYWRqX3BwcCwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIFNEID0gc2QoYnVkZ2V0XzIwMTVfYWRqX3BwcCwgbmEucm0gPSBUUlVFKSkgJT4lICANCiAga2JsKGNvbC5uYW1lcyA9IGMoIlVOR0Egdm90aW5nIHBhdHRlcm4iLCAiQ291bnRyaWVzIiwgIkF2ZXJhZ2UgUEQgYnVkZ2V0IiwiTWVkaWFuIFBEIGJ1ZGdldCIsICJTdGFuZGFyZCBEZXYiKSwNCiAgICAgIGZvcm1hdD0gImh0bWwiLA0KICAgICAgYWxpZ249ImMiLA0KICAgICAgZGlnaXRzID0gMywgZm9ybWF0LmFyZ3MgPSBsaXN0KGJpZy5tYXJrID0gIiwiLCBzY2llbnRpZmljID0gRkFMU0UpKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgaHRtbF9mb250ID0gIlRpbWVzIiwgZm9udF9zaXplID0gMjUpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGhsaW5lX2FmdGVyID0gVCkNCg0KbXlfZGYgJT4lDQogICAgZmlsdGVyKHllYXIgPiAyMDEyKSAlPiUgIA0KICBnZ3Bsb3QoYWVzKHggPSBpZGVhbF9wb2ludF9kaXN0YW5jZSwgeSA9IGxvZyhidWRnZXRfMjAxNV9hZGpfcHBwKSkpICsNCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBhcy5mYWN0b3IocmVnaW9ucyksIA0KICAgICAgICAgICAgICAgICBzaGFwZSA9IGFzLmZhY3RvcihyZWdpb25zKSksIHNpemUgPSAzKSArDQogIGZhY2V0X3dyYXAofnllYXIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMyMTllYmMiLCAiIzI2NDY1MyIsICIjNDNhYThiIiwgIiM2ZDU5N2EiLCAiI2U2Mzk0NiIsICIjZjRhMjYxIiksIG5hbWUgPSBOVUxMKSArDQogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE1LDE2LDE3LDE4LDE5LDEwKSwgbmFtZSA9IE5VTEwpICsNCiAgeWxhYigiTG9nZ2VkIFBEIHNwZW5kaW5nIChjb25zdGFudCBQUFApIikgKw0KICB4bGFiKCJMaWJlcmFsIFZvdGluZyBQYXR0ZXJuIGF0IFVOR0EiKSArDQogIGdndGhlbWVzOjp0aGVtZV9wYW5kZXIoKSArIA0KICBnZ3RpdGxlKCJQRCBzcGVuZGluZyAobG9nZ2VkKSBhbmQgUnVzc2lhIFRyYWRlIERlcGVuZGVuY2UgKGxvZ2dlZCkgU2NhdHRlcnBsb3QiKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwgDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3IgPSAiZ3JleTIwIiwgc2l6ZSA9IDE1LCBhbmdsZSA9IDAsIGhqdXN0ID0gLjUsIHZqdXN0ID0gLjUsIGZhY2UgPSAicGxhaW4iKSwNCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTUsIGFuZ2xlID0gMCwgaGp1c3QgPSAxLCB2anVzdCA9IDAsIGZhY2UgPSAicGxhaW4iKSwgIA0KICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJncmV5MjAiLCBzaXplID0gMTAsIGFuZ2xlID0gMCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAwLCBmYWNlID0gInBsYWluIiksDQogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImdyZXkyMCIsIHNpemUgPSAxMCwgYW5nbGUgPSA5MCwgaGp1c3QgPSAuNSwgdmp1c3QgPSAuNSwgZmFjZSA9ICJwbGFpbiIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQpgYGANCg0KYGBge3J9DQoNCm15X2RmICU+JQ0KICBncm91cF9ieShjb3VudHJ5X25hbWUpICU+JSANCiAgbXV0YXRlKHJlZ2lvbl9idWRnZXQgPSBtZWFuKGJ1ZGdldF8yMDE1X2Fkal9wcHAsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgbWVhbl9nZHBfcGMgPSBtZWFuKGdkcF9wYywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBnZ3Bsb3QoYWVzKHkgPSBsb2cobWVhbl9nZHBfcGMpLCB4ID0gbG9nKHJlZ2lvbl9idWRnZXQpKSApICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiIzlkMDIwOCIsIHNkID0gIk5VTEwiKSArDQogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gYXMuZmFjdG9yKHJlZ2lvbnMpLA0KICAgICAgICAgICAgICAgICBzaGFwZSA9IGFzLmZhY3RvcihyZWdpb25zKSksIHNpemUgPSAzKSArDQogICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvdW50cnlfbmFtZSwgY29sb3IgPSByZWdpb25zKSkgKw0KICAjIGdncmVwZWw6Omdlb21fbGFiZWxfcmVwZWwoYWVzKGxhYmVsID0gY291bnRyeV9uYW1lKSkgKyANCiAgZmFjZXRfd3JhcCh+cmVnaW9ucykgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzIxOWViYyIsICIjMjY0NjUzIiwgIiM0M2FhOGIiLCAiIzZkNTk3YSIsICIjZTYzOTQ2IiwgIiNmNGEyNjEiKSwgbmFtZSA9IE5VTEwpICsNCiAgIyBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNSwxNiwxNywxOCwxOSwxMCksIG5hbWUgPSBOVUxMKSArDQogIHhsYWIoIk1lYW4gbG9nZ2VkIGJ1ZGdldCAoY29uc3RhbnQgUFBQKSIpICsNCiAgeWxhYigiTWVhbiBHRFAgcGVyIGNhcGl0YSIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImxlZnQiKSArDQogIGdndGhlbWVzOjp0aGVtZV9wYW5kZXIoKSArIA0KICBnZ3RpdGxlKCJNZWFuIEdEUCBwZXIgY2FwaXRhIGFuZCBNZWFuIFBEIHNwZW5kaW5nLCAyMDEzIC0gMjAxOSIpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCg0KYGBgDQoNCg0KYGBge3J9DQoNCiMgaXYgPC0gYygNCiMgICAgICAgImxvZyhwb3AgKyAxKSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUG9wdWxhdGlvbiAgDQojICAgICAgICJsb2coZ2RwX3BjKSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdEUCBwZXIgY2FwaXRhDQojICAgICAgICJwb2xpdHkyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFBvbGl0eSBTY29yZSBvZiBkZW1vY3JhY3kNCiMgICAgICAgImxvZyh1c190cmFkZSArIDEpIiwgICAgICAgICAgICAgICAgICAgICAgICAgICMgVVMgdHJhZGUgKGltcG9ydHMgYW5kIGV4cG9ydHMgd2l0aCBVUykNCiMgICAgICAgIyAiYXMuZmFjdG9yKGF0b3BfZGVmZW5zZSkiLCAgICAgICAgICAgICAgICAgICMgRHVtbXkgVVMgZGVmZW5zZSBhbGxpYW5jZSANCiMgICAgICAgIyAibG9nKHJ1c3NpYV90cmFkZSArIDEpIiwgICAgICAgICAgICAgICAgICAgICMgUnVzc2lhIHRyYWRlIChpbXBvcnRzICYgZXhwb3J0cyB3aXRoIFVTKQ0KIyAgICAgICAjICJhcy5mYWN0b3IocG9zdF9zb3ZpZXQpIiwgICAgICAgICAgICAgICAgICAgIyBEdW1teSBwb3N0LVNvdmlldCBjb3VudHJpZXMgDQojICAgICAgICJsb2cocnVzc2lhX3RyYWRlX2RlcCkiLCAgICAgICAgICAgICAgICAgICAgICAjIEltcG9ydHMgJiBleHBvcnRzIHdpdGggUnVzc2lhIC8gdG90YWwgaW1wb3J0cyAmIGV4cG9ydHMNCiMgICAgICAgInZvdGVfcGVyY2VudF9zYW1lX3VzX2FsbCIsICAgICAgICAgICAgICAgICAgICMgU2ltaWxhcml0eSBVUyBVTkdBIHZvdGluZyBwYXR0ZXJuIA0KIyAgICAgICAidm90ZV9wZXJjZW50X3NhbWVfY2hpbmFfYWxsIiwgICAgICAgICAgICAgICAgIyBTaW1pbGFyaXR5IENoaW5hIFVOR0Egdm90aW5nIHBhdHRlcm4gDQojICAgICAgICJsb2codXNfdHJvb3BzICsgMSkqbG9nKHN1aWNpZGVfYXR0YWNrcyArIDEpIiAjIFVTIHRyb29wcyBhbmQgc3VpY2lkZSBhdHRhY2tzDQojICAgICAgICMgImFzLmZhY3Rvcihjb3VudHJ5X25hbWUpIg0KIyAgICAgICApDQojIA0KIyBkdiA8LSAibGVhZChsb2coYnVkZ2V0X2NvbnN0KSwgMSkiDQojIGR2X3BwcCA8LSAibGVhZChsb2coYnVkZ2V0X2NvbnN0X3BwcCksIDEpIg0KIyANCiMgbG1fZm9ybXVsYSA8LSBhcy5mb3JtdWxhKHBhc3RlKGR2LCBwYXN0ZShpdiwgY29sbGFwc2UgPSAiICsgIiksIHNlcCA9ICIgfiAiKSkNCiMgbG1fZm9ybXVsYV9wcHAgPC0gYXMuZm9ybXVsYShwYXN0ZShkdl9wcHAsIHBhc3RlKGl2LCBjb2xsYXBzZSA9ICIgKyAiKSwgc2VwID0gIiB+ICIpKQ0KIyANCiMgd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGEsIGRhdGEgPSBwZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCiMgd2l0aGluX3RpbWVfbW9kZWxfcHBwIDwtIHBsbShsbV9mb3JtdWxhX3BwcCwgZGF0YSA9IHBkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KIyANCiMgc3RhcmdhemVyKHdpdGhpbl90aW1lX21vZGVsLCB3aXRoaW5fdGltZV9tb2RlbF9wcHAsDQojICAgICAgICAgICBjb2x1bW4ubGFiZWxzID0gYygiUEQgc3BlbmRpbmciLCAiUEQgc3BlbmRpbmcgKFBQUCkiKSwNCiMgICAgICAgICAgIGRlcC52YXIubGFiZWxzLmluY2x1ZGUgPSBGQUxTRSwNCiMgICAgICAgICAgIG5vLnNwYWNlID0gVFJVRSwgcmVwb3J0ID0gYygidmMqIiksDQojICAgICAgICAgICBjb3ZhcmlhdGUubGFiZWxzID0gYygNCiMgICAgICAgICAgICAgIlBvcHVsYXRpb24gKGxvZ2dlZCkiLA0KIyAgICAgICAgICAgICAiR0RQIHBlciBjYXBpdGEgKGxvZ2dlZCkiLA0KIyAgICAgICAgICAgICAiUG9saXR5IiwNCiMgICAgICAgICAgICAgIlVTIHRyYWRlIChsb2dnZWQpIiwNCiMgICAgICAgICAgICAgIlJ1c3NpYSB0cmFkZSBkZXBlbmRlbmNlIChsb2dnZWQpIiwNCiMgICAgICAgICAgICAgIlVTIFVOR0Egdm90ZSBzaW1pbGFyaXR5IiwNCiMgICAgICAgICAgICAgIkNoaW5hIFVOR0Egdm90ZXMgc2ltaWxhcml0eSIsDQojICAgICAgICAgICAgICJVUyBUcm9vcHMgKGxvZ2dlZCkiLA0KIyAgICAgICAgICAgICAiU3VpY2lkZSBhdHRhY2tzIChsb2dnZWQpIiwNCiMgICAgICAgICAgICAgIkludGVyYWN0aW9uIFRyb29wcyB4IHN1aWNpZGUgYXR0YWNrcyIpLA0KIyANCiMgICAgICAgICAgIHR5cGUgPSAidGV4dCIpDQoNCg0KYGBgDQoqKioNCg0KIyBSZWdyZXNzaW9uIG91dHB1dHMgDQoNCiMjIyBGaXJzdCwgbG9vayBhdCB0aGUgcmVncmVzc2lvbiBvdXRwdXQgOg0KDQoNCmBgYHtyLCByZXN1bHRzID0gJ2FzaXMnfQ0KDQppdiA8LSBjKA0KICAibG9nKHBvcCArIDEpIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQb3B1bGF0aW9uICANCiAgImxvZyhnZHBfcGMpIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR0RQIHBlciBjYXBpdGENCiAgInBvbGl0eTIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUG9saXR5IFNjb3JlIG9mIGRlbW9jcmFjeQ0KICAibG9nKHVzX3RyYWRlICsgMSkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVUyB0cmFkZSAoaW1wb3J0cyBhbmQgZXhwb3J0cyB3aXRoIFVTKQ0KICAjICJhcy5mYWN0b3IoYXRvcF9kZWZlbnNlKSIsICAgICAgICAgICAgICAgICAgIyBEdW1teSBVUyBkZWZlbnNlIGFsbGlhbmNlIA0KICAjICJsb2cocnVzc2lhX3RyYWRlICsgMSkiLCAgICAgICAgICAgICAgICAgICAgIyBSdXNzaWEgdHJhZGUgKGltcG9ydHMgJiBleHBvcnRzIHdpdGggVVMpDQogICMgImFzLmZhY3Rvcihwb3N0X3NvdmlldCkiLCAgICAgICAgICAgICAgICAgICAjIER1bW15IHBvc3QtU292aWV0IGNvdW50cmllcyANCiAgImxvZyhydXNzaWFfdHJhZGVfZGVwKSIsICAgICAgICAgICAgICAgICAgICAgICMgSW1wb3J0cyAmIGV4cG9ydHMgd2l0aCBSdXNzaWEgLyB0b3RhbCBpbXBvcnRzICYgZXhwb3J0cw0KICAidm90ZV9wZXJjZW50X3NhbWVfY2hpbmFfYWxsIiwgICAgICAgICAgICAgICAgICAgIyBTaW1pbGFyaXR5IFVTIFVOR0Egdm90aW5nIHBhdHRlcm4gDQogICMgImxvZyh2b3RlX3BlcmNlbnRfc2FtZV91c19hbGwgKyAxKSIsICAgICAgICAgICAgICAgICMgU2ltaWxhcml0eSBDaGluYSBVTkdBIHZvdGluZyBwYXR0ZXJuIA0KICAibG9nKHVzX3Ryb29wcyArIDEpKmxvZyhzdWljaWRlX2F0dGFja3MgKyAxKSIgIyBVUyB0cm9vcHMgYW5kIHN1aWNpZGUgYXR0YWNrcw0KICAjICJhcy5mYWN0b3IoY291bnRyeV9uYW1lKSINCikNCg0KZHZfYWRqX3BwcCA8LSAibGVhZChsb2coYnVkZ2V0XzIwMTVfYWRqX3BwcCksMSkiDQoNCmxtX2Zvcm11bGFfYWRqX3BwcCA8LSBhcy5mb3JtdWxhKHBhc3RlKGR2X2Fkal9wcHAsIHBhc3RlKGl2LCBjb2xsYXBzZSA9ICIgKyAiKSwgc2VwID0gIiB+ICIpKQ0KDQp3aXRoaW5fdGltZV9tb2RlbF9hZGpfcHBwIDwtIHBsbShsbV9mb3JtdWxhX2Fkal9wcHAsIGRhdGEgPSBwZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCg0KDQpzdGFyZ2F6ZXIoDQogICMgd2l0aGluX3RpbWVfbW9kZWwsICAgDQogICAgICAgICAgd2l0aGluX3RpbWVfbW9kZWxfYWRqX3BwcCwNCiAgICAgICAgICAjIGNvbHVtbi5sYWJlbHMgPSBjKCJQRCBzcGVuZGluZyIsICJQRCBzcGVuZGluZyAoMjAxNSBhZGogUFBQKSIpLA0KICAgICAgICAgIGRlcC52YXIubGFiZWxzLmluY2x1ZGUgPSBGQUxTRSwNCiAgICAgICAgICAjIG5vLnNwYWNlID0gVFJVRSwNCiAgICAgICAgICAjICByZXBvcnQgPSBjKCJ2YyoiKSwNCiAgICAgICAgICAjIGNvdmFyaWF0ZS5sYWJlbHMgPSBjKA0KICAgICAgICAgICMgIlBvcHVsYXRpb24gKGxvZ2dlZCkiLA0KICAgICAgICAgICMgIkdEUCBwZXIgY2FwaXRhIChsb2dnZWQpIiwNCiAgICAgICAgICAjICJQb2xpdHkiLA0KICAgICAgICAgICMgIyAiVVMgdHJhZGUgKGxvZ2dlZCkiLA0KICAgICAgICAgICMgIlJ1c3NpYSB0cmFkZSBkZXBlbmRlbmNlIChsb2dnZWQpIiwNCiAgICAgICAgICAjICMgIlVTIFVOR0Egdm90ZSBzaW1pbGFyaXR5IiwNCiAgICAgICAgICAjICJDaGluYSBVTkdBIHZvdGVzIHNpbWlsYXJpdHkiLA0KICAgICAgICAgICMgIlVTIFRyb29wcyAobG9nZ2VkKSIsDQogICAgICAgICAgIyAiU3VpY2lkZSBhdHRhY2tzIChsb2dnZWQpIiwNCiAgICAgICAgICAjICJJbnRlcmFjdGlvbiBUcm9vcHMgeCBzdWljaWRlIGF0dGFja3MiKSwNCiAgICAgICAgICAgdHlwZSA9ICJodG1sIikNCg0KYGBgDQoNCiMjIyBUaGUgbmV4dCByZWdyZXNzaW9uIGxvb2tzIGF0IG9ubHkgdmFyaWFibGVzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gVVMgZGlyZWN0bHkNCg0KYGBge3IsIHJlc3VsdHMgPSAnYXNpcyd9DQoNCnVzX29ubHlfaXYgPC0gYyggICJsb2cocG9wICsgMSkiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFBvcHVsYXRpb24gIA0KICAgICAgICAgICAgICAgICAgImxvZyhnZHBfcGMpIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR0RQIHBlciBjYXBpdGENCiAgICAgICAgICAgICAgICAgICJwb2xpdHkyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFBvbGl0eSBTY29yZSBvZiBkZW1vY3JhY3kNCiAgICAgICAgICAgICAgICAgICJsb2codXNfdHJhZGUgKyAxKSIsIA0KICAgICAgICAgICAgICAgICAgImFzLmZhY3RvcihhdG9wX2RlZmVuc2UpIiwgDQogICAgICAgICAgICAgICAgICAjIFVTIHRyYWRlIChpbXBvcnRzIGFuZCBleHBvcnRzIHdpdGggVVMpDQogICAgICAgICAgICAgICAgICAjICJhcy5mYWN0b3IoYXRvcF9kZWZlbnNlKSIsICAgICAgICAgICAgICAgICAgIyBEdW1teSBVUyBkZWZlbnNlIGFsbGlhbmNlIA0KICAgICAgICAgICAgICAgICAgIyAibG9nKHJ1c3NpYV90cmFkZSArIDEpIiwgICAgICAgICAgICAgICAgICAgICMgUnVzc2lhIHRyYWRlIChpbXBvcnRzICYgZXhwb3J0cyB3aXRoIFVTKQ0KICAgICAgICAgICAgICAgICAgIyAiYXMuZmFjdG9yKHBvc3Rfc292aWV0KSIsICAgICAgICAgICAgICAgICAgICMgRHVtbXkgcG9zdC1Tb3ZpZXQgY291bnRyaWVzIA0KICAgICAgICAgICAgICAgICAgIyAibG9nKHJ1c3NpYV90cmFkZV9kZXApIiwgICAgICAgICAjIEltcG9ydHMgJiBleHBvcnRzIHdpdGggUnVzc2lhIC8gdG90YWwgaW1wb3J0cyAmIGV4cG9ydHMNCiAgICAgICAgICAgICAgICAgICMgInZvdGVfcGVyY2VudF9zYW1lX2NoaW5hX2FsbCIsICAgICAgICAgICAgICAgICAgICMgU2ltaWxhcml0eSBVUyBVTkdBIHZvdGluZyBwYXR0ZXJuIA0KICAgICAgICAgICAgICAgICAgICJ2b3RlX3BlcmNlbnRfc2FtZV91c19hbGwiLCAgICAgICAgICAgICAgICAjIFNpbWlsYXJpdHkgQ2hpbmEgVU5HQSB2b3RpbmcgcGF0dGVybiANCiAgICAgICAgICAgICAgICAgICJsb2codXNfdHJvb3BzICsgMSkqbG9nKHN1aWNpZGVfYXR0YWNrcyArIDEpIiAjIFVTIHRyb29wcyBhbmQgc3VpY2lkZSBhdHRhY2tzDQogICAgICAgICAgICAgICAgICAjICJhcy5mYWN0b3IoY291bnRyeV9uYW1lKSIpDQopDQoNCmR2X2Fkal9wcHAgPC0gImxlYWQobG9nKGJ1ZGdldF8yMDE1X2Fkal9wcHApLCAxKSINCiMgZHZfYWRqIDwtICJsZWFkKGxvZyhidWRnZXRfMjAxNV9hZGopLCAxKSINCg0KDQojIGxtX2Zvcm11bGEgPC0gYXMuZm9ybXVsYShwYXN0ZShkdl9hZGosIHBhc3RlKHVzX29ubHlfaXYsIGNvbGxhcHNlID0gIiArICIpLCBzZXAgPSAiIH4gIikpDQpsbV9mb3JtdWxhX3BwcCA8LSBhcy5mb3JtdWxhKHBhc3RlKGR2X2Fkal9wcHAsIHBhc3RlKHVzX29ubHlfaXYsIGNvbGxhcHNlID0gIiArICIpLCBzZXAgPSAiIH4gIikpDQoNCiMgdXNfb25seV90aW1lX21vZGVsIDwtIHBsbShsbV9mb3JtdWxhLCBkYXRhID0gcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQp1c19vbmx5X3RpbWVfbW9kZWxfcHBwIDwtIHBsbShsbV9mb3JtdWxhX3BwcCwgZGF0YSA9IHBkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KDQpzdGFyZ2F6ZXIodXNfb25seV90aW1lX21vZGVsX3BwcCx3aXRoaW5fdGltZV9tb2RlbF9hZGpfcHBwLCB0eXBlID0gImh0bWwiKQ0KDQpgYGANCg0KDQojIyMgTGliZXJhbCB2b3RpbmcgcGF0dGVybnMgVU5HQSAtIENvbXBhcmluZyBjb3VudHJpZXMgdGhhdCB2b3RlIGxpYmVyYWxseSBhdCBVTkdBIGFuZCB0aG9zZSB0aGF0IHZvdGUgaWxsaWJlcmFsbHkgYXQgVU5HQSANCg0KYGBge3IsIHJlc3VsdHMgPSAnYXNpcyd9DQoNCnNpbWlsYXJfbGliZXJhbF91bmdhX3ZvdGluZyA8LSBteV9kZiAlPiUgDQogIGRwbHlyOjpmaWx0ZXIoaWRlYWxfcG9pbnRfZGlzdGFuY2UgPD0gMi42KQ0Kc2ltaWxhcl9wZGYgPC0gcGRhdGEuZnJhbWUoc2ltaWxhcl9saWJlcmFsX3VuZ2Ffdm90aW5nLCBpbmRleCA9IGMoImNvd19jb2RlIiwgInllYXIiKSkNCg0KZGlzc2ltaWxhcl9saWJlcmFsX3VuZ2Ffdm90aW5nIDwtIG15X2RmICU+JSANCiAgZHBseXI6OmZpbHRlcihpZGVhbF9wb2ludF9kaXN0YW5jZSA+IDIuNikNCmRpc3NpbWlsYXJfcGRmIDwtIHBkYXRhLmZyYW1lKGRpc3NpbWlsYXJfbGliZXJhbF91bmdhX3ZvdGluZywgaW5kZXggPSBjKCJjb3dfY29kZSIsICJ5ZWFyIikpDQoNCnNpbWlsYXJfbGliZXJhbF91bmdhX3ZvdGluZyA8LSBwbG0obG1fZm9ybXVsYV9wcHAsIGRhdGEgPSBzaW1pbGFyX3BkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KZGlzc2ltaWxhcl9saWJlcmFsX3VuZ2Ffdm90aW5nIDwtIHBsbShsbV9mb3JtdWxhX3BwcCwgZGF0YSA9IGRpc3NpbWlsYXJfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQoNCnN0YXJnYXplcihzaW1pbGFyX2xpYmVyYWxfdW5nYV92b3RpbmcsIA0KICAgICAgICAgIGRpc3NpbWlsYXJfbGliZXJhbF91bmdhX3ZvdGluZywNCiAgICAgICAgICBjb2x1bW4ubGFiZWxzID0gYygiTGliZXJhbCBVTkdBIiwgIkRpc3NpbWlsYXIgVU5HQSIpLA0KICAgICAgICAgIGRlcC52YXIubGFiZWxzLmluY2x1ZGUgPSBGQUxTRSwNCiAgICAgICAgICBuby5zcGFjZSA9IFRSVUUsIHJlcG9ydCA9IGMoInZjKiIpLA0KICAgICAgICAgIGNvdmFyaWF0ZS5sYWJlbHMgPSBjKA0KICAgICAgICAgICAgIlBvcHVsYXRpb24gKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIkdEUCBwZXIgY2FwaXRhIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJQb2xpdHkiLA0KICAgICAgICAgICAgIlVTIHRyYWRlIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJSdXNzaWEgdHJhZGUgZGVwIiwNCiAgICAgICAgICAgICJVUyBVTkdBICBzaW1pbGFyaXR5IiwNCiAgICAgICAgICAgICJDaGluYSBVTkdBIHNpbWlsYXJpdHkiLA0KICAgICAgICAgICAgIlVTIFRyb29wcyAobG9nZ2VkKSIsDQogICAgICAgICAgICAiU3VpY2lkZSBhdHRhY2tzIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJUcm9vcHMgeCBzdWljaWRlIGF0dGFja3MiKSwNCg0KICAgICAgICAgIHR5cGUgPSAiaHRtbCIpDQoNCg0KYGBgDQoNCiMgQ29tcGFyaW5nIEZyZWUsIFBhcnRseSBGcmVlIGFuZCBOb3QgRnJlZSBGcmVlZG9tIEhvdXNlIGNvdW50cmllcyBvbiB0aGUgUEQgc3BlbmRpbmcgYWxsaWNhdGlvbnMNCg0KDQpgYGB7ciwgcmVzdWx0cyA9ICdhc2lzJ30NCg0KZmhfZnJlZSA8LSBteV9kZiAlPiUgDQogIGRwbHlyOjpmaWx0ZXIoZnJlZWRvbV9ob3VzZSA9PSAxKQ0KZnJlZV9wZGYgPC0gcGRhdGEuZnJhbWUoZmhfZnJlZSwgaW5kZXggPSBjKCJjb3dfY29kZSIsICJ5ZWFyIikpDQoNCmZoX3BhcnRseV9mcmVlIDwtIG15X2RmICU+JSANCiAgZHBseXI6OmZpbHRlcihmcmVlZG9tX2hvdXNlID09IDIpDQpwYXJ0bHlfZnJlZV9wZGYgPC0gcGRhdGEuZnJhbWUoZmhfcGFydGx5X2ZyZWUsIGluZGV4ID0gYygiY293X2NvZGUiLCAieWVhciIpKQ0KDQpmaF9ub3RfZnJlZSA8LSBteV9kZiAlPiUgDQogIGRwbHlyOjpmaWx0ZXIoZnJlZWRvbV9ob3VzZSA9PSAzKQ0Kbm90X2ZyZWVfcGRmIDwtIHBkYXRhLmZyYW1lKGZoX25vdF9mcmVlLCBpbmRleCA9IGMoImNvd19jb2RlIiwgInllYXIiKSkNCg0KZnJlZV93aXRoaW5fdGltZV9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYV9wcHAsIGRhdGEgPSBmcmVlX3BkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KcGFydGx5X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGFfcHBwLCBkYXRhID0gcGFydGx5X2ZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpub3RfZnJlZV93aXRoaW5fdGltZV9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYV9wcHAsIGRhdGEgPSBub3RfZnJlZV9wZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCg0Kc3RhcmdhemVyKGZyZWVfd2l0aGluX3RpbWVfbW9kZWwsIA0KICAgICAgICAgIHBhcnRseV9mcmVlX3dpdGhpbl90aW1lX21vZGVsLA0KICAgICAgICAgIG5vdF9mcmVlX3dpdGhpbl90aW1lX21vZGVsLA0KICAgICAgICAgIGNvbHVtbi5sYWJlbHMgPSBjKCJGcmVlIiwgIlBhcnRseSBGcmVlIiwgIk5vdCBGcmVlIiksDQogICAgICAgICAgZGVwLnZhci5sYWJlbHMuaW5jbHVkZSA9IEZBTFNFLA0KICAgICAgICAgIG5vLnNwYWNlID0gVFJVRSwgcmVwb3J0ID0gYygidmMqIiksDQogICAgICAgICAgY292YXJpYXRlLmxhYmVscyA9IGMoDQogICAgICAgICAgICAiUG9wdWxhdGlvbiAobG9nZ2VkKSIsDQogICAgICAgICAgICAiR0RQIHBlciBjYXBpdGEgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlBvbGl0eSIsDQogICAgICAgICAgICAiVVMgdHJhZGUgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlJ1c3NpYSB0cmFkZSBkZXAiLA0KICAgICAgICAgICAgIlVTIFVOR0EgIHNpbWlsYXJpdHkiLA0KICAgICAgICAgICAgIkNoaW5hIFVOR0Egc2ltaWxhcml0eSIsDQogICAgICAgICAgICAiVVMgVHJvb3BzIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJTdWljaWRlIGF0dGFja3MgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlRyb29wcyB4IHN1aWNpZGUgYXR0YWNrcyIpLA0KDQogICAgICAgICAgdHlwZSA9ICJodG1sIikNCg0KYGBgDQoNCg0KIyMjIENvbXBhcmluZyBQRCwgTWlsaXRhcnksIEVjb25vbWljIGFuZCBIdW1hbml0YXJpYW4gaW4gYWxsIGNvdW50cmllcw0KDQpgYGB7ciwgcmVzdWx0cyA9ICdhc2lzJ30NCg0KZHZfbWlsIDwtICJsZWFkKGxvZyhtaWxpdGFyeV9haWQgKyAxKSkiDQpkdl9lY29uIDwtICJsZWFkKGxvZyhlY29uX2RldiArIDEpKSINCmR2X2h1bWFuIDwtICJsZWFkKGxvZyhodW1hbml0YXJpYW5fYWlkICsgMSkpIg0KDQpsbV9mb3JtdWxhX21pbCA8LSBhcy5mb3JtdWxhKHBhc3RlKGR2X21pbCwgcGFzdGUoaXYsIGNvbGxhcHNlID0gIiArICIpLCBzZXAgPSAiIH4gIikpDQpsbV9mb3JtdWxhX2Vjb24gPC0gYXMuZm9ybXVsYShwYXN0ZShkdl9lY29uLCBwYXN0ZShpdiwgY29sbGFwc2UgPSAiICsgIiksIHNlcCA9ICIgfiAiKSkNCmxtX2Zvcm11bGFfaHVtYW4gPC0gYXMuZm9ybXVsYShwYXN0ZShkdl9odW1hbiwgcGFzdGUoaXYsIGNvbGxhcHNlID0gIiArICIpLCBzZXAgPSAiIH4gIikpDQoNCm1pbF93aXRoaW5fdGltZV9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYV9taWwsIGRhdGEgPSBwZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCmVjb25fd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGFfZWNvbiwgZGF0YSA9IHBkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KaHVtYW5fd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGFfaHVtYW4sIGRhdGEgPSBwZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCg0Kc3RhcmdhemVyKHdpdGhpbl90aW1lX21vZGVsX2Fkal9wcHAsIA0KICAgICAgICAgIG1pbF93aXRoaW5fdGltZV9tb2RlbCwgDQogICAgICAgICAgZWNvbl93aXRoaW5fdGltZV9tb2RlbCwNCiAgICAgICAgICBodW1hbl93aXRoaW5fdGltZV9tb2RlbCwNCiAgICAgICAgICBjb2x1bW4ubGFiZWxzID0gYygiUEQgKGFkaiBQUFApIiwgIk1pbGl0YXJ5IiwgIkVjb25vbWljIiwgIkh1bWFuaXRhcmlhbiIpLA0KICAgICAgICAgIGRlcC52YXIubGFiZWxzLmluY2x1ZGUgPSBGQUxTRSwNCiAgICAgICAgICBuby5zcGFjZSA9IFRSVUUsIHJlcG9ydCA9IGMoInZjKiIpLA0KICAgICAgICAgIGNvdmFyaWF0ZS5sYWJlbHMgPSBjKA0KICAgICAgICAgICAgIlBvcHVsYXRpb24gKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIkdEUCBwZXIgY2FwaXRhIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJQb2xpdHkiLA0KICAgICAgICAgICAgIlVTIHRyYWRlIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJSdXNzaWEgdHJhZGUgZGVwIiwNCiAgICAgICAgICAgICJVUyBVTkdBICBzaW1pbGFyaXR5IiwNCiAgICAgICAgICAgICJDaGluYSBVTkdBIHNpbWlsYXJpdHkiLA0KICAgICAgICAgICAgIlVTIFRyb29wcyAobG9nZ2VkKSIsDQogICAgICAgICAgICAiU3VpY2lkZSBhdHRhY2tzIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJUcm9vcHMgeCBzdWljaWRlIGF0dGFja3MiKSwNCg0KICAgICAgICAgIHR5cGUgPSAiaHRtbCIpDQoNCiAgICAgIA0KYGBgDQoNCiMjIyAgRnJlZSBDb3VudHJpZXMgLSBjb21wYXJpbmcgUEQsIE1pbGl0YXJ5LCBFY29ub21pYyBhbmQgSHVtYW5pdGFyaWFuIGluIEZSRUUgY291bnRyaWVzDQoNCmBgYHtyLCByZXN1bHRzID0gJ2FzaXMnfQ0KDQpsbV9mb3JtdWxhX21pbCA8LSBhcy5mb3JtdWxhKHBhc3RlKGR2X21pbCwgcGFzdGUoaXYsIGNvbGxhcHNlID0gIiArICIpLCBzZXAgPSAiIH4gIikpDQpsbV9mb3JtdWxhX2Vjb24gPC0gYXMuZm9ybXVsYShwYXN0ZShkdl9lY29uLCBwYXN0ZShpdiwgY29sbGFwc2UgPSAiICsgIiksIHNlcCA9ICIgfiAiKSkNCmxtX2Zvcm11bGFfaHVtYW4gPC0gYXMuZm9ybXVsYShwYXN0ZShkdl9odW1hbiwgcGFzdGUoaXYsIGNvbGxhcHNlID0gIiArICIpLCBzZXAgPSAiIH4gIikpDQoNCmZyZWVfd2l0aGluX3RpbWVfbW9kZWxfbWlsIDwtIHBsbShsbV9mb3JtdWxhX21pbCwgZGF0YSA9IGZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpmcmVlX3dpdGhpbl90aW1lX21vZGVsX2Vjb24gPC0gcGxtKGxtX2Zvcm11bGFfZWNvbiwgZGF0YSA9IGZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpmcmVlX3dpdGhpbl90aW1lX21vZGVsX2h1bWFuIDwtIHBsbShsbV9mb3JtdWxhX2h1bWFuLCBkYXRhID0gZnJlZV9wZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCmZyZWVfd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGFfYWRqX3BwcCwgZGF0YSA9IGZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQoNCnN0YXJnYXplcihmcmVlX3dpdGhpbl90aW1lX21vZGVsLCBmcmVlX3dpdGhpbl90aW1lX21vZGVsX21pbCwgZnJlZV93aXRoaW5fdGltZV9tb2RlbF9lY29uLCBmcmVlX3dpdGhpbl90aW1lX21vZGVsX2h1bWFuLCANCiAgICAgICAgICBjb2x1bW4ubGFiZWxzID0gYygiUEQgKFBQUCkiLCAiTWlsaXRhcnkiLCAiRWNvbm9taWMiLCAiSHVtYW5pdGFyaWFuIiksDQogICAgICAgICAgZGVwLnZhci5sYWJlbHMuaW5jbHVkZSA9IEZBTFNFLA0KICAgICAgICAgIG5vLnNwYWNlID0gVFJVRSwgcmVwb3J0ID0gYygidmMqIiksDQogICAgICAgICAgY292YXJpYXRlLmxhYmVscyA9IGMoDQogICAgICAgICAgICAiUG9wdWxhdGlvbiAobG9nZ2VkKSIsDQogICAgICAgICAgICAiR0RQIHBlciBjYXBpdGEgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlBvbGl0eSIsDQogICAgICAgICAgICAiVVMgdHJhZGUgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlJ1c3NpYSB0cmFkZSBkZXAiLA0KICAgICAgICAgICAgIlVTIFVOR0EgIHNpbWlsYXJpdHkiLA0KICAgICAgICAgICAgIkNoaW5hIFVOR0Egc2ltaWxhcml0eSIsDQogICAgICAgICAgICAiVVMgVHJvb3BzIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJTdWljaWRlIGF0dGFja3MgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlRyb29wcyB4IHN1aWNpZGUgYXR0YWNrcyIpLA0KDQogICAgICAgICAgdHlwZSA9ICJodG1sIikNCmBgYA0KDQoNCiMjIyBOT1QgRnJlZSBDb3VudHJpZXMgLSBjb21wYXJpbmcgUEQsIE1pbGl0YXJ5LCBFY29ub21pYyBhbmQgSHVtYW5pdGFyaWFuIGluIE5PVCBmcmVlIGNvdW50cmllcw0KDQoNCmBgYHtyLCByZXN1bHRzID0gJ2FzaXMnfQ0KDQpub3RfZnJlZV93aXRoaW5fdGltZV9tb2RlbF9taWwgPC0gcGxtKGxtX2Zvcm11bGFfbWlsLCBkYXRhID0gbm90X2ZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpub3RfZnJlZV93aXRoaW5fdGltZV9tb2RlbF9lY29uIDwtIHBsbShsbV9mb3JtdWxhX2Vjb24sIGRhdGEgPSBub3RfZnJlZV9wZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCm5vdF9mcmVlX3dpdGhpbl90aW1lX21vZGVsX2h1bWFuIDwtIHBsbShsbV9mb3JtdWxhX2h1bWFuLCBkYXRhID0gbm90X2ZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpub3RfZnJlZV93aXRoaW5fdGltZV9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYV9hZGpfcHBwLCBkYXRhID0gbm90X2ZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQoNCnN0YXJnYXplcih3aXRoaW5fdGltZV9tb2RlbF9hZGpfcHBwLCBub3RfZnJlZV93aXRoaW5fdGltZV9tb2RlbF9taWwsIG5vdF9mcmVlX3dpdGhpbl90aW1lX21vZGVsX2Vjb24sIG5vdF9mcmVlX3dpdGhpbl90aW1lX21vZGVsX2h1bWFuLCANCiAgICAgICAgICBjb2x1bW4ubGFiZWxzID0gYygiUEQgKFBQUCkiLCAiTWlsaXRhcnkiLCAiRWNvbm9taWMiLCAiSHVtYW5pdGFyaWFuIiksDQogICAgICAgICAgZGVwLnZhci5sYWJlbHMuaW5jbHVkZSA9IEZBTFNFLA0KICAgICAgICAgIG5vLnNwYWNlID0gVFJVRSwgcmVwb3J0ID0gYygidmMqIiksDQogICAgICAgICAgY292YXJpYXRlLmxhYmVscyA9IGMoDQogICAgICAgICAgICAiUG9wdWxhdGlvbiAobG9nZ2VkKSIsDQogICAgICAgICAgICAiR0RQIHBlciBjYXBpdGEgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlBvbGl0eSIsDQogICAgICAgICAgICAiVVMgdHJhZGUgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlJ1c3NpYSB0cmFkZSBkZXAiLA0KICAgICAgICAgICAgIlVTIFVOR0EgIHNpbWlsYXJpdHkiLA0KICAgICAgICAgICAgIkNoaW5hIFVOR0Egc2ltaWxhcml0eSIsDQogICAgICAgICAgICAiVVMgVHJvb3BzIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJTdWljaWRlIGF0dGFja3MgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlRyb29wcyB4IHN1aWNpZGUgYXR0YWNrcyIpLA0KDQogICAgICAgICAgdHlwZSA9ICJodG1sIikNCg0KYGBgDQoNCiMjIyBQYXJ0bHkgRnJlZSBDb3VudHJpZXMgLSBjb21wYXJpbmcgUEQsIE1pbGl0YXJ5LCBFY29ub21pYyBhbmQgSHVtYW5pdGFyaWFuIGluIHBhcnRseSBmcmVlIGNvdW50cmllcw0KDQpgYGB7ciwgcmVzdWx0cyA9ICdhc2lzJ30NCg0KcGFydGx5X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWxfbWlsIDwtIHBsbShsbV9mb3JtdWxhX21pbCwgZGF0YSA9IHBhcnRseV9mcmVlX3BkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KcGFydGx5X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWxfZWNvbiA8LSBwbG0obG1fZm9ybXVsYV9lY29uLCBkYXRhID0gcGFydGx5X2ZyZWVfcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpwYXJ0bHlfZnJlZV93aXRoaW5fdGltZV9tb2RlbF9odW1hbiA8LSBwbG0obG1fZm9ybXVsYV9odW1hbiwgZGF0YSA9IHBhcnRseV9mcmVlX3BkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KcGFydGx5X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWxfcHBwIDwtIHBsbShsbV9mb3JtdWxhX3BwcCwgZGF0YSA9IHBhcnRseV9mcmVlX3BkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KcGFydGx5X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGFfYWRqX3BwcCwgZGF0YSA9IHBhcnRseV9mcmVlX3BkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KDQoNCnN0YXJnYXplcihwYXJ0bHlfZnJlZV93aXRoaW5fdGltZV9tb2RlbF9wcHAsIHBhcnRseV9mcmVlX3dpdGhpbl90aW1lX21vZGVsX21pbCwgcGFydGx5X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWxfZWNvbiwgcGFydGx5X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWxfaHVtYW4sIA0KICAgICAgICAgIGNvbHVtbi5sYWJlbHMgPSBjKCJQRCAoUFBQKSIsICJNaWxpdGFyeSIsICJFY29ub21pYyIsICJIdW1hbml0YXJpYW4iKSwNCiAgICAgICAgICBkZXAudmFyLmxhYmVscy5pbmNsdWRlID0gRkFMU0UsDQogICAgICAgICAgbm8uc3BhY2UgPSBUUlVFLCByZXBvcnQgPSBjKCJ2YyoiKSwNCiAgICAgICAgICBjb3ZhcmlhdGUubGFiZWxzID0gYygNCiAgICAgICAgICAgICJQb3B1bGF0aW9uIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJHRFAgcGVyIGNhcGl0YSAobG9nZ2VkKSIsDQogICAgICAgICAgICAiUG9saXR5IiwNCiAgICAgICAgICAgICJVUyB0cmFkZSAobG9nZ2VkKSIsDQogICAgICAgICAgICAiUnVzc2lhIHRyYWRlIGRlcCIsDQogICAgICAgICAgICAiVVMgVU5HQSAgc2ltaWxhcml0eSIsDQogICAgICAgICAgICAiQ2hpbmEgVU5HQSBzaW1pbGFyaXR5IiwNCiAgICAgICAgICAgICJVUyBUcm9vcHMgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlN1aWNpZGUgYXR0YWNrcyAobG9nZ2VkKSIsDQogICAgICAgICAgICAiVHJvb3BzIHggc3VpY2lkZSBhdHRhY2tzIiksDQoNCiAgICAgICAgICB0eXBlID0gImh0bWwiKQ0KDQpgYGANCg0K