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