Stablecoins mktcap data

On choisit les stablecoins suivant : USDT, USDC, DAI, PYUSD, FDUSD, EURC. Ces tokens structurent l’essentiel des volumes/market cap USD sur les classements “stablecoins” et catégories stablecoins, et parce qu’elles ont suffisamment d’observations pour cette étude.

On récolte ensuite la market capitalization de ces stablecoins sur Artemis.xyz, une plateforme d’analyse des données de crypto.

Pourquoi la market cap ?

  • La market capitalization est définit par : Supply x Price

  • un choc (speech positif envers CBDC) va impacter la demande de stablecoin pour différentes raisons,

  • demande < offre -> pression à la baisse sur les prix,

  • donc baisse des prix des cryptos -> baisse market cap qui ne serait pas captée par la supply uniquement,

  • si pressions trop fortes, l’émetteur intervient en réduisant la supply (burn);

  • donc baisse de la supply -> baisse market cap;

  • En utilisant la supply, on ne capte qu’une partie des effets. A la rigueur, la supply peut être représentative dans le cas des algorithmic stablecoins car l’ajustement de l’offre est fait de manière automatique.

Data import

We also collect price and supply for those stablecoins from Artemis. We fill NAs with linear interpolation.

In this article https://www.artemisanalytics.com/resources/outstanding-supply by Artemis.xyz, they suggest to use the Outstanding Supply of stablecoin to be closer to stock supply (Outstanding Shares in stocks) and have a good representation of the true circulating supply. We gather data on Outstanding Supply from TokenTerminal (https://tokenterminal.com/explorer/metrics/outstanding-supply) : (The data are available on this link : https://tokenterminal.com/explorer/studio/charts/new?v=ZGRlNjhlMWJkNDYzZDM0ZDdjNGMxZmUy).

Final Database

We drop dates of stablecoins supply after July 2025 because the last observation is 2025-06-16 for speeches about CBDC, and adding too much after this dates will just add zeros.

Note : je n’ai pas les données de prix et de circulating supply avant 2020 parce que j’ai épuisé mon quotas d’extraction de données, je pourrai en récupérer plus à partir du 1er février.

Models

We estimate the following local projection model :

\[ Y_{i,t+h}-Y_{i,t-1}= \alpha_i + \beta^h X_t + \gamma Z_t + \mu_{i,t} \] Where \(Y\) is the log-difference of stablecoin supply, \(\alpha_i\) is an individual FE, and \(X_t\) is our index of speech CBDC-related sentiment/stance. \(Z_t\) are control variables representing the VIX and the GPRD and their lags, and dummies representing Terra-Luna and FTX crashes. We include individual (\(\alpha_i\)) fixed-effects.
Note : we take the 90% interval confidences for all estimations. Standard errors are heteroskedasticity robusts (clusterized by stablecoin).

Daily

Sentiment / Stance

Sentiment, as measured by Auer & al. (2021) tend not to capture the effect of CBDC’s related communications on stablecoin supplies. However, the Machine Learning framework does capture the negative effect of an increasing sentiment/stance from Central Banks, suggesting a substitution between stablecoins and CBDC. This effect is relatively small yet significant, and may be due to the fact that an important number of speeches are not particularly focused on CBDC, but may treat several subjects that Central Banks take care of and mention marginally CBDC eventually just to talk about it without really using a forward guidance design. We thus focus on important speeches, i.e. communications that explicitly focus on CBDC in their title (Note : another approach could be to weight the speeches by the number of sentences related to CBDC, or the share of these sentences in the total number of sentences).

Immediate effect following important CBDC-related speeches, i.e. speeches that explicitly mention CBDC or related keywords in their title. The effect is almost immediate, and the communications tend to decrease stablecoins supply by 0.3% after about a month.

In addition, we can decompose the market capitalization effect on two effects : the price effect, and the supply effect. We retrieve both price and supply from Artemis.xyz.

Overall, we can see that an increase in sentiment/stance of CB towards CBDC tend to decrease the market capitalization of stablecoins, mainly through a decrease in supply to defend the parity. Indeed, the price do not tend to move while the supply does, implying a decrease in demand for stablecoins to ensure that demand = supply so that price is at par.

We can also test with the Outstanding Supply :

Decomposition by type

Une hausse du sentiment/stance à propos des MNBC general ou non-spécifié ne tend pas à créer une baisse de la demande pour les stablecoins

Decomposition by Process

Decomposition by type and process

Features

Process

Risk-Benefits

Decomposition by Markets/Central Banks

DevEme

ECB vs other

What we observe overall : - An increase in sentiment/stance tend to decrease the demand for stablecoins - This results hides heterogeneity - An increase in sentiment/stance for retail and wholesale CBDC decrease the demand for stablecoins, while an increase in sentiment/stance for General/Unspecified CBDC tend to increase the demand or have no effect depending on the discourse associated. - An interpretation is that when Central Bank talk about General/Unspecified CBDC, it contains information about the project of other central banks “central banks of major countries are carrying out in-depth research recently on digital currencies” or be interpreted - in some cases - as a sign that central banks will adopt an already-existing stablecoin. - However, when the speech clearly states that it aims to issue a retail/wholesale stablecoins, it is perceived as a substitute for existing stablecoins. - Notably, when central banks announce progress on Wholesale (Features particularly) or Retail (Process particularly) CBDC, it dampens the demand for stablecoins. - The effect is particularly visible when Central Banks from Developed Markets communicate about CBDC - and especially ECB.

Important speeches only

Decomposition by type

Decomposition by Discourse in important speeches

Decomposition by type and process in important speeches

Features

Process

Risk-Benefit

Note : Je pense qu’on peut utiliser uniquement les speeches importants, ils donnent des résultats plus clairs et c’est assez facile de justifier leur utilisation + les résultats sont robustes mais moins marquants quand on utilise tous les speeches.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2s6IEFydGVtaXMgTUtUQ0FQIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOiANCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogcGFnZWQNCiAgd29yZF9kb2N1bWVudDogZGVmYXVsdA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQoNCiMgU3RhYmxlY29pbnMgbWt0Y2FwIGRhdGENCg0KT24gY2hvaXNpdCBsZXMgc3RhYmxlY29pbnMgc3VpdmFudCA6IFVTRFQsIFVTREMsIERBSSwgUFlVU0QsIEZEVVNELCBFVVJDLiBDZXMgdG9rZW5zIHN0cnVjdHVyZW50IGzigJllc3NlbnRpZWwgZGVzIHZvbHVtZXMvbWFya2V0IGNhcCBVU0Qgc3VyIGxlcyBjbGFzc2VtZW50cyDigJxzdGFibGVjb2luc+KAnSBldCBjYXTDqWdvcmllcyBzdGFibGVjb2lucywgZXQgcGFyY2UgcXUnZWxsZXMgb250IHN1ZmZpc2FtbWVudCBkJ29ic2VydmF0aW9ucyBwb3VyIGNldHRlIMOpdHVkZS4NCg0KT24gcsOpY29sdGUgZW5zdWl0ZSBsYSBtYXJrZXQgY2FwaXRhbGl6YXRpb24gZGUgY2VzIHN0YWJsZWNvaW5zIHN1ciBBcnRlbWlzLnh5eiwgdW5lIHBsYXRlZm9ybWUgZCdhbmFseXNlIGRlcyBkb25uw6llcyBkZSBjcnlwdG8uIA0KDQpQb3VycXVvaSBsYSBtYXJrZXQgY2FwID8gDQoNCiAgLSBMYSBtYXJrZXQgY2FwaXRhbGl6YXRpb24gZXN0IGTDqWZpbml0IHBhciA6IFN1cHBseSB4IFByaWNlDQogIA0KICAtIHVuIGNob2MgKHNwZWVjaCBwb3NpdGlmIGVudmVycyBDQkRDKSB2YSBpbXBhY3RlciBsYSBkZW1hbmRlIGRlIHN0YWJsZWNvaW4gcG91ciBkaWZmw6lyZW50ZXMgcmFpc29ucywNCiAgDQogIC0gZGVtYW5kZSA8IG9mZnJlIC0+IHByZXNzaW9uIMOgIGxhIGJhaXNzZSBzdXIgbGVzIHByaXgsDQogIA0KICAtIGRvbmMgYmFpc3NlIGRlcyBwcml4IGRlcyBjcnlwdG9zIC0+IGJhaXNzZSBtYXJrZXQgY2FwIHF1aSBuZSBzZXJhaXQgcGFzIGNhcHTDqWUgcGFyIGxhIHN1cHBseSB1bmlxdWVtZW50LA0KICANCiAgLSBzaSBwcmVzc2lvbnMgdHJvcCBmb3J0ZXMsIGwnw6ltZXR0ZXVyIGludGVydmllbnQgZW4gcsOpZHVpc2FudCBsYSBzdXBwbHkgKGJ1cm4pOw0KICANCiAgLSBkb25jIGJhaXNzZSBkZSBsYSBzdXBwbHkgLT4gYmFpc3NlIG1hcmtldCBjYXA7DQogIA0KICAtIEVuIHV0aWxpc2FudCBsYSBzdXBwbHksIG9uIG5lIGNhcHRlIHF1J3VuZSBwYXJ0aWUgZGVzIGVmZmV0cy4gQSBsYSByaWd1ZXVyLCBsYSBzdXBwbHkgcGV1dCDDqnRyZSByZXByw6lzZW50YXRpdmUgZGFucyBsZSBjYXMgZGVzIGFsZ29yaXRobWljIHN0YWJsZWNvaW5zIGNhciBsJ2FqdXN0ZW1lbnQgZGUgbCdvZmZyZSBlc3QgZmFpdCBkZSBtYW5pw6hyZSBhdXRvbWF0aXF1ZS4gDQogIA0KICANCiMjIERhdGEgaW1wb3J0DQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KYXJ0ZW1pcyA8LSByZWFkcjo6cmVhZF9jc3YyKA0KICAiQzovVXNlcnMvZmtyYXVzL0Rlc2t0b3AvQXJ0aWNsZXMvZWZmZWN0cyBvZiBDQiBzcGVlY2hlcyBvbiBzdGFibGVjb2lucy9BcnRlbWlzIGRhdGEvU3RhYmxlY29pbiBTdXBwbHkgYnkgU3RhYmxlY29pbi5jc3YiLA0KICBzaG93X2NvbF90eXBlcyA9IEZBTFNFDQopDQpuYW1lcyhhcnRlbWlzKSA8LSBjKCJEYXRlIiwiQVVTRCIsIkJVU0QiLCJEQUkiLCJFVVJDIiwiRkRVU0QiLCJQWVVTRCIsIlVTRDAiLCJVU0RDIiwgICAgICAgICAgICAgICAgIlVTREdMTyIsIlVTRFAiLCJVU0RTIiwiVVNEVCIsIlVTRFkiLCJVU0RlIiwiY0VVUiIsImNLRVMiLCJjUkVBTCIsImNVU0QiKQ0KDQoNCmFydGVtaXNfcmF3IDwtIGFydGVtaXMgJT4lDQogIG11dGF0ZSgNCiAgICBEYXRlID0gZG15X2htKERhdGUsIHR6ID0gIlVUQyIpICANCiAgKQ0KYGBgDQoNCg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCg0KcGFuZWxfYXJ0ZW1pcyA8LSBhcnRlbWlzX3JhdyAlPiUNCiAgbXV0YXRlKERhdGUgPSBhcy5EYXRlKERhdGUsIGZvcm1hdD0iJWQvJW0vJXkiKSkgJT4lDQogIHBpdm90X2xvbmdlcigNCiAgICBjb2xzID0gLURhdGUsDQogICAgbmFtZXNfdG8gPSAic3RhYmxlY29pbiIsDQogICAgdmFsdWVzX3RvID0gInN1cHBseSIsDQogICAgdmFsdWVzX3RyYW5zZm9ybSA9IGxpc3Qoc3VwcGx5ID0gYXMubnVtZXJpYykgIA0KICApICU+JQ0KICAgbXV0YXRlKHN0YWJsZWNvaW4gPSBpZl9lbHNlKHN0YWJsZWNvaW4gPT0gIlVTRFMiLCAiREFJIiwgc3RhYmxlY29pbikpICU+JQ0KICBncm91cF9ieShEYXRlLCBzdGFibGVjb2luKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIHN1cHBseSA9IG1heChzdXBwbHksIG5hLnJtID0gVFJVRSksICAgIyBzaSBsZXMgMiBleGlzdGVudCBtw6ptZSBqb3VyLCBvbiBnYXJkZSBsYSB2YWxldXIgbm9uLU5BIChvdSBsYSBwbHVzIGdyYW5kZSkNCiAgICAuZ3JvdXBzID0gImRyb3AiDQogICkgJT4lDQogIGFycmFuZ2Uoc3RhYmxlY29pbiwgRGF0ZSkgICU+JSANCg0KICBncm91cF9ieShzdGFibGVjb2luKSU+JQ0KICBtdXRhdGUobG9nX3N1cHBseSA9IGxvZygxK3N1cHBseSksIGRsb2dfc3VwcGx5ID0gbG9nX3N1cHBseSAtIGRwbHlyOjpsYWcobG9nX3N1cHBseSkpICU+JQ0KICAjbXV0YXRlKA0KICAjICBxMDEgPSBxdWFudGlsZShkbG9nX3N1cHBseSwgMC4wNSwgbmEucm0gPSBUUlVFKSwNCiAgIyAgcTk5ID0gcXVhbnRpbGUoZGxvZ19zdXBwbHksIDAuOTUsIG5hLnJtID0gVFJVRSkNCiAgIykgJT4lDQogICNmaWx0ZXIoaXMuZmluaXRlKGRsb2dfc3VwcGx5KSwNCiAgIyAgICAgICAhaXMubmEocTAxKSwgIWlzLm5hKHE5OSksDQogICMgICAgICAgZGxvZ19zdXBwbHkgPj0gcTAxLA0KICAjICAgICAgIGRsb2dfc3VwcGx5IDw9IHE5OSklPiUNCiAgI3NlbGVjdCgtYyhxMDEsIHE5OSwgZGxvZ19zdXBwbHkpKSU+JQ0KICB1bmdyb3VwKCklPiUNCiAgZmlsdGVyKHN0YWJsZWNvaW4gJWluJSBjKCJVU0RUIiwgIlVTREMiLCAiREFJIiwgIlBZVVNEIiwgIlVTRGUiLCAiRVVSQyIpKQ0KDQoNCg0KDQpgYGANCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmdncGxvdChwYW5lbF9hcnRlbWlzLCBhZXMoeD1EYXRlLCB5PWxvZ19zdXBwbHkpKSsNCiAgZ2VvbV9saW5lKGx3ZD0xKSsNCiAgbGFicyh4PSJEYXRlIiwgeT0ibG9nKHN1cHBseSkiKSsNCiAgZmFjZXRfd3JhcCh+c3RhYmxlY29pbiwgc2NhbGVzPSJmcmVlIikNCmBgYA0KDQpXZSBhbHNvIGNvbGxlY3QgcHJpY2UgYW5kIHN1cHBseSBmb3IgdGhvc2Ugc3RhYmxlY29pbnMgZnJvbSBBcnRlbWlzLiBXZSBmaWxsIE5BcyB3aXRoIGxpbmVhciBpbnRlcnBvbGF0aW9uLiANCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwcmljZSA8LSByZWFkeGw6OnJlYWRfZXhjZWwoIkM6L3VzZXJzL2ZrcmF1cy9EZXNrdG9wL2FydGVtaXNzLnhsc3giLCBzaGVldCA9ICJwcmljZTIiKQ0Kc3VwcGx5PC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCJDOi91c2Vycy9ma3JhdXMvRGVza3RvcC9hcnRlbWlzcy54bHN4Iiwgc2hlZXQgPSAic3VwcGx5MiIpDQoNCnByaWNlX2xvbmcgPC0gcHJpY2UgJT4lDQogIHBpdm90X2xvbmdlcigtRGF0ZSwgbmFtZXNfdG8gPSAic3RhYmxlY29pbiIsIHZhbHVlc190byA9ICJwcmljZSIpDQoNCnN1cHBseV9sb25nIDwtIHN1cHBseSAlPiUNCiAgcGl2b3RfbG9uZ2VyKC1EYXRlLCBuYW1lc190byA9ICJzdGFibGVjb2luIiwgdmFsdWVzX3RvID0gInN1cHBseSIpDQpwYW5lbF9wcmljZXMgPC0gcHJpY2VfbG9uZyAlPiUNCiAgZnVsbF9qb2luKHN1cHBseV9sb25nLCBieSA9IGMoIkRhdGUiLCAic3RhYmxlY29pbiIpKSAlPiUNCiAgYXJyYW5nZShEYXRlLCBzdGFibGVjb2luKSU+JQ0KICBmaWx0ZXIoc3RhYmxlY29pbiAlaW4lIGMoInVzZHQiLCAidXNkYyIsICJkYWkiLCAicHl1c2QiLCAiZXVyYyIsICJ1c2RlIikpJT4lDQogIG11dGF0ZShzdGFibGVjb2luID1jYXNlX3doZW4oDQogICAgc3RhYmxlY29pbiA9PSAiZGFpIiB+ICJEQUkiLCANCiAgICBzdGFibGVjb2luPT0idXNkYyJ+IlVTREMiLA0KICAgIHN0YWJsZWNvaW49PSJ1c2R0In4iVVNEVCIsIA0KICAgIHN0YWJsZWNvaW49PSJldXJjIn4iRVVSQyIsIA0KICAgIHN0YWJsZWNvaW49PSJ1c2RlIn4iVVNEZSIsDQogICAgc3RhYmxlY29pbj09InB5dXNkIn4iUFlVU0QiKSkNCmBgYA0KDQoNCg0KDQpJbiB0aGlzIGFydGljbGUgaHR0cHM6Ly93d3cuYXJ0ZW1pc2FuYWx5dGljcy5jb20vcmVzb3VyY2VzL291dHN0YW5kaW5nLXN1cHBseSBieSBBcnRlbWlzLnh5eiwgdGhleSBzdWdnZXN0IHRvIHVzZSB0aGUgT3V0c3RhbmRpbmcgU3VwcGx5IG9mIHN0YWJsZWNvaW4gdG8gYmUgY2xvc2VyIHRvIHN0b2NrIHN1cHBseSAoT3V0c3RhbmRpbmcgU2hhcmVzIGluIHN0b2NrcykgYW5kIGhhdmUgYSBnb29kIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cnVlIGNpcmN1bGF0aW5nIHN1cHBseS4gV2UgZ2F0aGVyIGRhdGEgb24gT3V0c3RhbmRpbmcgU3VwcGx5IGZyb20gVG9rZW5UZXJtaW5hbCAoaHR0cHM6Ly90b2tlbnRlcm1pbmFsLmNvbS9leHBsb3Jlci9tZXRyaWNzL291dHN0YW5kaW5nLXN1cHBseSkgOiAoVGhlIGRhdGEgYXJlIGF2YWlsYWJsZSBvbiB0aGlzIGxpbmsgOiBodHRwczovL3Rva2VudGVybWluYWwuY29tL2V4cGxvcmVyL3N0dWRpby9jaGFydHMvbmV3P3Y9WkdSbE5qaGxNV0prTkRZelpETTBaRGRqTkdNeFptVXkpLiAgDQoNCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRva2VudGVybWluYWxfc3VwcGx5IDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL2ZrcmF1cy9EZXNrdG9wL3Rva2VudGVybWluYWxfc3VwcGx5Lnhsc3giLCANCiAgICBjb2xfdHlwZXMgPSBjKCJkYXRlIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCANCiAgICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCANCiAgICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCANCiAgICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCANCiAgICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCANCiAgICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiKSkNCg0KDQp0b2tlbnRlcm1pbmFsX2xvbmcgPC0gdG9rZW50ZXJtaW5hbF9zdXBwbHkgICU+JQ0KICBwaXZvdF9sb25nZXIoLURhdGUsIG5hbWVzX3RvID0gInN0YWJsZWNvaW4iLCB2YWx1ZXNfdG8gPSAic3VwcGx5IiklPiUNCiAgbXV0YXRlKGxvZ19zdXBwbHkgPSBsb2coc3VwcGx5KSklPiUNCiAgbmEub21pdCgpJT4lDQogIGZpbHRlcihEYXRlIDwgYXMuRGF0ZSgiMjAyNS0wNy0wMSIpKQ0KDQp0b2tlbnRlcm1pbmFsX2xvbmcyIDwtIHRva2VudGVybWluYWxfbG9uZyAlPiUgICAjIDwtLSByZXBsYWNlIGRmIHdpdGggeW91ciBvYmplY3QgbmFtZQ0KICBtdXRhdGUoDQogICAgc3RhYmxlY29pbl9yYXcgPSBzdHJfcmVtb3ZlKHN0YWJsZWNvaW4sICJcXHMqLVxccypPdXRzdGFuZGluZyBzdXBwbHkgXFwoXFwkXFwpXFxzKiQiKSwNCiAgICBzeW1ib2wgICA9IHN0cl90cmltKHN0cl9yZW1vdmUoc3RhYmxlY29pbl9yYXcsICJcXHMqXFwoW14pXSpcXClcXHMqJCIpKSwNCiAgICBuYW1lID0gc3RyX21hdGNoKHN0YWJsZWNvaW5fcmF3LCAiXFwoKFteKV0qKVxcKSIpWywyXQ0KICApICU+JQ0KICBzZWxlY3QoLWMoIHN0YWJsZWNvaW4pKQ0KDQpkYXRhX3Rva2VudGVybWluYWwgPC10b2tlbnRlcm1pbmFsX2xvbmcyJT4lDQogIG11dGF0ZShzeW1ib2w9aWZlbHNlKHN5bWJvbD09IlVTRFMiLCAiREFJIiwgc3ltYm9sKSklPiUNCiAgbXV0YXRlKHN5bWJvbD1pZmVsc2Uoc3ltYm9sPT0iVVNERSIsICJVU0RlIiwgc3ltYm9sKSklPiUNCg0KICBmaWx0ZXIoc3ltYm9sJWluJSBjKCJVU0RUIiwgIlVTREMiLCAiREFJIiwgIlBZVVNEIiwgIkVVUkMiLCAiVVNEZSIpKSU+JQ0KICByZW5hbWUoIm91dHN0YW5kaW5nX3N1cHBseSI9InN1cHBseSIsIA0KICAgICAgICAgImxvZ19vdXRzdGFuZGluZ19zdXBwbHkiPSJsb2dfc3VwcGx5IiklPiUNCiAgc2VsZWN0KC1jKHN0YWJsZWNvaW5fcmF3LCBuYW1lKSkNCg0KYGBgDQoNCg0KIyBGaW5hbCBEYXRhYmFzZQ0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KR1BSIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgiQzovdXNlcnMvZmtyYXVzL0Rlc2t0b3AvQXJ0aWNsZXMvZWZmZWN0cyBvZiBDQiBzcGVlY2hlcyBvbiBzdGFibGVjb2lucy8yMDI1L0dQUi54bHN4IiklPiUNCiAgbXV0YXRlKGRhdGU9YXMuRGF0ZShkYXRlKSklPiUNCiAgc2VsZWN0KC1jKERBWSkpDQpyZXF1aXJlKHF1YW50bW9kKQ0KVklYIDwtIGdldFN5bWJvbHMoIl5WSVgiLCBzcmM9InlhaG9vIiwgYXV0by5hc3NpZ24gPSBGQUxTRSkgDQp2aXhfZGF0YSA8LSBkYXRhLmZyYW1lKGRhdGUgPSBpbmRleChWSVgpLCBjb3JlZGF0YShWSVgpKSU+JQ0KICBkcGx5cjo6cmVuYW1lKCJWSVhfY2xvc2UiID0gYFZJWC5DbG9zZWApJT4lDQogIHNlbGVjdChkYXRlLCBWSVhfY2xvc2UpDQp2aXhfZGF0YV93ZWVrbHkgPC0gZGF0YS5mcmFtZShkYXRlID0gaW5kZXgoVklYKSwgY29yZWRhdGEoVklYKSklPiUNCiAgZHBseXI6OnJlbmFtZSgiVklYX2Nsb3NlIiA9IGBWSVguQ2xvc2VgKSU+JQ0KICBzZWxlY3QoZGF0ZSwgVklYX2Nsb3NlKSU+JQ0KICBtdXRhdGUod2VlayA9IGZsb29yX2RhdGUoZGF0ZSwgIndlZWsiLCB3ZWVrX3N0YXJ0PTEpKSU+JQ0KICBncm91cF9ieSh3ZWVrKSU+JQ0KICBzdW1tYXJpemUoVklYX2Nsb3NlID0gbWVhbihWSVhfY2xvc2UsIG5hLnJtPVQpKQ0KDQpHUFJfZGF0YV93ZWVrbHkgPC0gcmVhZHhsOjpyZWFkX2V4Y2VsKCJDOi9Vc2Vycy9ma3JhdXMvRGVza3RvcC9BcnRpY2xlcy9lZmZlY3RzIG9mIENCIHNwZWVjaGVzIG9uIHN0YWJsZWNvaW5zLzIwMjUvR1BSLnhsc3giKSU+JQ0KICBtdXRhdGUoZGF0ZT1hcy5EYXRlKGRhdGUpKSU+JQ0KICBzZWxlY3QoLWMoREFZKSApJT4lDQogIG11dGF0ZSh3ZWVrPWZsb29yX2RhdGUoZGF0ZSwgIndlZWsiLCB3ZWVrX3N0YXJ0ID0gMSkpJT4lDQogIGdyb3VwX2J5KHdlZWspJT4lDQogIHN1bW1hcml6ZShOMTBEID0gbWVhbihOMTBEKSwgR1BSRCA9IG1lYW4oR1BSRCksIA0KICAgICAgICAgICAgR1BSRF9BQ1QgPSBtZWFuKEdQUkRfQUNUKSwgR1BSRF9USFJFQVQ9bWVhbihHUFJEX1RIUkVBVCkpJT4lDQogIGZpbHRlcih3ZWVrID4gYXMuRGF0ZSgiMjAxNy0wMS0wMSIpKQ0KDQpkYXRhX2FydGVtaXMgPC1wYW5lbF9hcnRlbWlzJT4lDQogIG5hLm9taXQoKSU+JQ0KICBsZWZ0X2pvaW4oZGF0YWJhc2VfZGFpbHksIGJ5PWMoIkRhdGUiPSJkYXRlIikpJT4lDQogIG11dGF0ZShxdWFydGVyeWVhciA9IHBhc3RlMChxdWFydGVyKERhdGUpLCB5ZWFyKERhdGUpKSklPiUNCiAgbGVmdF9qb2luKEdQUiwgYnk9YygiRGF0ZSI9ImRhdGUiKSklPiUNCiAgbGVmdF9qb2luKHZpeF9kYXRhLCBieT1jKCJEYXRlIj0iZGF0ZSIpKSU+JQ0KICBhcnJhbmdlKHN0YWJsZWNvaW4sIERhdGUpJT4lDQogIG11dGF0ZShGVFggPSBpZmVsc2UoRGF0ZSA+IGFzLkRhdGUoIjIwMjItMTEtMDEiKSAmIERhdGUgPCBhcy5EYXRlKCIyMDIzLTAxLTAxIiksMSwwICkpJT4lDQogIG11dGF0ZShMdW5hID0gaWZlbHNlKERhdGUgPiBhcy5EYXRlKCIyMDIyLTA1LTAxIikgJiBEYXRlIDwgYXMuRGF0ZSgiMjAyMi0wNy0wMSIpLDEsMCApKSU+JQ0KICANCiAgbXV0YXRlKGFjcm9zcygtRGF0ZSwgfiB0aWR5cjo6cmVwbGFjZV9uYSgueCwgMCkpKSAlPiUgIyByZW1vdmUgdGhpcyB0byByZXBsYWNlIDAgd2l0aCBOQSB3aGVuIHRoZXJlJ3Mgbm8gc3BlZWNoDQogIG11dGF0ZShwZWdUeXBlID0gY2FzZV93aGVuKA0KICAgIHN0YWJsZWNvaW4gPT0gIlVTRFQifiAiVVNEIiwNCiAgICBzdGFibGVjb2luID09ICJVU0RDIn4gIlVTRCIsDQogICAgc3RhYmxlY29pbiA9PSAiREFJIn4gIlVTRCIsDQogICAgc3RhYmxlY29pbiA9PSAiRVVSQyJ+ICJFVVIiLA0KICAgIHN0YWJsZWNvaW4gPT0gIkZEVVNEIn4gIlVTRCIsDQogICAgc3RhYmxlY29pbiA9PSAiUFlVU0QifiAiVVNEIg0KICAgICkpJT4lDQogIG11dGF0ZShwZWdNZWNoYW5pc20gPSBjYXNlX3doZW4oDQogICAgc3RhYmxlY29pbiA9PSAiVVNEVCJ+ICJmaWF0IiwNCiAgICBzdGFibGVjb2luID09ICJVU0RDIn4gImZpYXQiLA0KICAgIHN0YWJsZWNvaW4gPT0gIkRBSSJ+ICJjcnlwdG8iLA0KICAgIHN0YWJsZWNvaW4gPT0gIkVVUkMifiAiZmlhdCIsDQogICAgc3RhYmxlY29pbiA9PSAiRkRVU0QifiAiZmlhdCIsDQogICAgc3RhYmxlY29pbiA9PSAiUFlVU0QifiAiZmlhdCINCg0KICApKSU+JQ0KICBsZWZ0X2pvaW4ocGFuZWxfcHJpY2VzLCBieT1jKCJzdGFibGVjb2luIiwiRGF0ZSIgKSwgc3VmZml4PWMoIiIsICJfc3VwIikpJT4lDQogIGxlZnRfam9pbihkYXRhX3Rva2VudGVybWluYWwsIGJ5PWMoInN0YWJsZWNvaW4iPSJzeW1ib2wiLCAiRGF0ZSIpKSU+JQ0KICBncm91cF9ieShzdGFibGVjb2luKSU+JQ0KICBtdXRhdGUocHJpY2UgPSBuYS5hcHByb3gocHJpY2UsIG5hLnJtPUYpKSU+JQ0KICAgIG11dGF0ZShzdXBwbHlfc3VwID0gbmEuYXBwcm94KHN1cHBseV9zdXAsIG5hLnJtPUYpKSU+JQ0KICBtdXRhdGUobG9nX3N1cHBseV9zdXAgPSBsb2coc3VwcGx5X3N1cCkpJT4lDQoNCiAgamFuaXRvcjo6Y2xlYW5fbmFtZXMoKSU+JQ0KICBmaWx0ZXIoZGF0ZSA8PWFzLkRhdGUoIjIwMjUtMDctMDEiKSkNCiAgDQpgYGANCg0KV2UgZHJvcCBkYXRlcyBvZiBzdGFibGVjb2lucyBzdXBwbHkgYWZ0ZXIgSnVseSAyMDI1IGJlY2F1c2UgdGhlIGxhc3Qgb2JzZXJ2YXRpb24gaXMgMjAyNS0wNi0xNiBmb3Igc3BlZWNoZXMgYWJvdXQgQ0JEQywgYW5kIGFkZGluZyB0b28gbXVjaCBhZnRlciB0aGlzIGRhdGVzIHdpbGwganVzdCBhZGQgemVyb3MuIA0KDQoNCmBgYHtyfQ0KI3dyaXRlLmNzdihkYXRhX2FydGVtaXMsICJDOi91c2Vycy9ma3JhdXMvRGVza3RvcC9BcnRpY2xlcy9lZmZlY3Qgb2YgQ0Igc3BlZWNoZXMgb24gc3RhYmxlY29pbnMvMjAyNS9EQVRBX0FSVEVNSVMuY3N2IiApDQojd3JpdGUuZHRhKGRhdGFfYXJ0ZW1pcywgIkM6L3VzZXJzL2ZrcmF1cy9EZXNrdG9wL0FydGljbGVzL2VmZmVjdCBvZiBDQiBzcGVlY2hlcyBvbiBzdGFibGVjb2lucy8yMDI1L0RBVEFfQVJURU1JUy5kdGEiICkNCg0KYGBgDQoNCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCg0KZ2dwbG90KGRhdGFfYXJ0ZW1pcywgYWVzKHggPSBkYXRlLCB5ID0gc3VwcGx5LCBmaWxsID0gc3RhYmxlY29pbikpICsNCiAgZ2VvbV9hcmVhKCkgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJDdW11bGF0ZWQgTWFya2V0IENhcGl0YWxpemF0aW9uIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikNCg0KDQpnZ3Bsb3QoZGF0YV9hcnRlbWlzLCBhZXMoeCA9IGRhdGUsIHkgPSBzdXBwbHlfc3VwLCBmaWxsID0gc3RhYmxlY29pbikpICsNCiAgZ2VvbV9hcmVhKCkgKw0KICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJDdW11bGF0ZWQgU3VwcGx5IikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikNCmBgYA0KTm90ZSA6IGplIG4nYWkgcGFzIGxlcyBkb25uw6llcyBkZSBwcml4IGV0IGRlIGNpcmN1bGF0aW5nIHN1cHBseSBhdmFudCAyMDIwIHBhcmNlIHF1ZSBqJ2FpIMOpcHVpc8OpIG1vbiBxdW90YXMgZCdleHRyYWN0aW9uIGRlIGRvbm7DqWVzLCBqZSBwb3VycmFpIGVuIHLDqWN1cMOpcmVyIHBsdXMgw6AgcGFydGlyIGR1IDFlciBmw6l2cmllci4NCg0KDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KbWFrZV9pcmZfcGxvdF8yIDwtIGZ1bmN0aW9uKGRhdGEsIHRpdGxlID0gTlVMTCkgew0KICBnZ3Bsb3QoDQogICAgZGF0YSwNCiAgICBhZXMoDQogICAgICB4ID0gaCwgeSA9IGlyZiwNCiAgICAgIHltaW4gPSBsb3csIHltYXggPSB1cCwNCiAgICAgIGNvbG9yID0gdHlwZSwgZmlsbCA9IHR5cGUNCiAgICApDQogICkgKw0KICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgICBnZW9tX3JpYmJvbihhbHBoYSA9IDAuMywgY29sb3IgPSBOQSkgKw0KICAgIGdlb21fbGluZShsaW5ld2lkdGggPSAwLjcpICsNCiAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29sc190eXBlKSArDQogICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sc190eXBlKSArDQogICAgbGFicygNCiAgICAgIHggPSAiSG9yaXpvbiAod2Vla3MpIiwNCiAgICAgIHkgPSAiUmVzcG9uc2Ugb2YgU3VwcGx5IChsb2cpIiwNCiAgICAgIGNvbG9yID0gTlVMTCwgZmlsbCA9IE5VTEwsDQogICAgICB0aXRsZSA9IHRpdGxlDQogICAgKSArDQogICAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMikgKw0KICAgIHRoZW1lKA0KICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KQ0KICAgICkNCn0NCg0KY29sc190eXBlIDwtIGMoDQogICJTZW50aW1lbnQiID0gIiMxZjc3YjQiLCAgIyBibGV1DQogICJTdGFuY2UiICAgID0gIiNkNjI3MjgiLCAgIyByb3VnZQ0KICAiU2VudGltZW50IChBdWVyKSIgICAgID0gIiNkOTVmMDIiICAgIyBhdSBjYXMgb8O5IChBdWVyIHNlbnRpbWVudCBzZXVsLCBldGMuKQ0KKQ0KDQpzaG9ja192YXIgPC0gYygic3RhbmNlX2F1ZXIiLCAiaW5kZXhfc3RhbmNlIiwgImluZGV4X3NlbnQiLCAiaW5kZXhfc2VudF90eXBlX3dob2xlc2FsZV9jYmRjIiwgImluZGV4X3N0YW5jZV90eXBlX3dob2xlc2FsZV9jYmRjIiwgImluZGV4X3NlbnRfdHlwZV9yZXRhaWxfY2JkYyIsICJpbmRleF9zZW50X3R5cGVfZ2VuZXJhbF91bnNwZWNpZmllZCIsICJpbmRleF9zdGFuY2VfdHlwZV9nZW5lcmFsX3Vuc3BlY2lmaWVkIiwgImluZGV4X3N0YW5jZV90eXBlX3JldGFpbF9jYmRjIiwgImluZGV4X3NlbnRfZGlzY19mZWF0dXJlIiwgImluZGV4X3N0YW5jZV9kaXNjX2ZlYXR1cmUiLCAiaW5kZXhfc2VudF9kaXNjX3Byb2Nlc3MiLCAiaW5kZXhfc3RhbmNlX2Rpc2NfcHJvY2VzcyIsICJpbmRleF9zZW50X2Rpc2Nfcmlza19iZW5lZml0IiwgImluZGV4X3N0YW5jZV9kaXNjX3Jpc2tfYmVuZWZpdCIsICJpbmRleF9zZW50X3R5cGVfZGlzY19nZW5lcmFsX3Vuc3BlY2lmaWVkX2ZlYXR1cmUiLCAgICAgImluZGV4X3NlbnRfdHlwZV9kaXNjX2dlbmVyYWxfdW5zcGVjaWZpZWRfcHJvY2VzcyIsICJpbmRleF9zZW50X3R5cGVfZGlzY19nZW5lcmFsX3Vuc3BlY2lmaWVkX3Jpc2tfYmVuZWZpdCIsImluZGV4X3NlbnRfdHlwZV9kaXNjX3JldGFpbF9jYmRjX2ZlYXR1cmUiLCAgICAgICAgICAgICANCiAiaW5kZXhfc2VudF90eXBlX2Rpc2NfcmV0YWlsX2NiZGNfcmlza19iZW5lZml0IiwgICJpbmRleF9zZW50X3R5cGVfZGlzY193aG9sZXNhbGVfY2JkY19mZWF0dXJlIiwgICAgICAgIA0KICJpbmRleF9zZW50X3R5cGVfZGlzY19yZXRhaWxfY2JkY19wcm9jZXNzIiwgICJpbmRleF9zZW50X3R5cGVfZGlzY193aG9sZXNhbGVfY2JkY19yaXNrX2JlbmVmaXQiLCAgICAgDQogImluZGV4X3NlbnRfdHlwZV9kaXNjX3dob2xlc2FsZV9jYmRjX3Byb2Nlc3MiLCAiaW5kZXhfc3RhbmNlX3R5cGVfZGlzY19nZW5lcmFsX3Vuc3BlY2lmaWVkX2ZlYXR1cmUiICwgIA0KImluZGV4X3N0YW5jZV90eXBlX2Rpc2NfZ2VuZXJhbF91bnNwZWNpZmllZF9wcm9jZXNzIiwgImluZGV4X3N0YW5jZV90eXBlX2Rpc2NfZ2VuZXJhbF91bnNwZWNpZmllZF9yaXNrX2JlbmVmaXQiLCAiaW5kZXhfc3RhbmNlX3R5cGVfZGlzY19yZXRhaWxfY2JkY19mZWF0dXJlIiwgImluZGV4X3N0YW5jZV90eXBlX2Rpc2NfcmV0YWlsX2NiZGNfcmlza19iZW5lZml0IiwgICAgICANCiAiaW5kZXhfc3RhbmNlX3R5cGVfZGlzY193aG9sZXNhbGVfY2JkY19mZWF0dXJlIiAsICJpbmRleF9zdGFuY2VfdHlwZV9kaXNjX3JldGFpbF9jYmRjX3Byb2Nlc3MiLCAgICAgICAgICANCiAiaW5kZXhfc3RhbmNlX3R5cGVfZGlzY193aG9sZXNhbGVfY2JkY19yaXNrX2JlbmVmaXQiLCAiaW5kZXhfc3RhbmNlX3R5cGVfZGlzY193aG9sZXNhbGVfY2JkY19wcm9jZXNzIiwgICAgICAgICANCiAiaW5kZXhfc2VudF9kZXZlbWVfZGV2ZWxvcGVkIiAsICJpbmRleF9zZW50X2RldmVtZV9lbWVyZ2luZyIsICJpbmRleF9zdGFuY2VfZGV2ZW1lX2RldmVsb3BlZCIsICJpbmRleF9zdGFuY2VfZGV2ZW1lX2VtZXJnaW5nIiAsICJpbmRleF9zZW50X2NiX290aGVycyIsICJpbmRleF9zZW50X2NiX2VjYl9mZWRfYm9qIiwiaW5kZXhfc3RhbmNlX2NiX290aGVycyIsICJpbmRleF9zdGFuY2VfY2JfZWNiX2ZlZF9ib2oiICwgICAgICAgICJpbmRleF9zZW50X2NiX290aGVyIiAsICJpbmRleF9zZW50X2NiX2VjYiIgLCAgImluZGV4X3N0YW5jZV9jYl9vdGhlciIgLCAgImluZGV4X3N0YW5jZV9jYl9lY2IiICwgImluZGV4X3NlbnRfY2JkY3RpdGxlIiAsICJpbmRleF9zdGFuY2VfY2JkY3RpdGxlIikNCg0KcGxvdF9scCA8LSBmdW5jdGlvbihscF9tb2RlbCwNCiAgICAgICAgICAgICAgICAgICAgLi4uLA0KICAgICAgICAgICAgICAgICAgICB0eXBlID0gIiIsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlID0gIiIsDQogICAgICAgICAgICAgICAgICAgIGNvbmYubGV2ZWwgPSAwLjksDQogICAgICAgICAgICAgICAgICAgIHZjb3YgPSAiSEMxIiwNCiAgICAgICAgICAgICAgICAgICAga2VlcF90ZXJtID0gTlVMTCkgew0KDQogICMgQWNjZXB0OiBwbG90X2xwKGxwMSkgT1IgcGxvdF9scChscDEsIGxwMiwgLi4uKSBPUiBwbG90X2xwKGxpc3QobHAxLCBscDIpKQ0KICBtb2RlbHMgPC0gbGlzdChscF9tb2RlbCwgLi4uKQ0KICBpZiAobGVuZ3RoKG1vZGVscykgPT0gMSAmJiBpcy5saXN0KG1vZGVsc1tbMV1dKSAmJiAhaW5oZXJpdHMobW9kZWxzW1sxXV1bWzFdXSwgImZpeGVzdCIpKSB7DQogICAgIyBJZiB1c2VyIHBhc3NlZCBhIHBsYWluIGxpc3Qgb2YgbW9kZWxzOiBwbG90X2xwKGxpc3QobHAxLCBscDIpKQ0KICAgIG1vZGVscyA8LSBtb2RlbHNbWzFdXQ0KICB9DQoNCiAgc3RvcGlmbm90KGxlbmd0aChtb2RlbHMpID4gMCkNCg0KICAjIHJlY3ljbGUgLyB2YWxpZGF0ZSB0eXBlIGxhYmVscw0KICBpZiAobGVuZ3RoKHR5cGUpID09IDEpIHR5cGUgPC0gcmVwKHR5cGUsIGxlbmd0aChtb2RlbHMpKQ0KICBpZiAobGVuZ3RoKHR5cGUpICE9IGxlbmd0aChtb2RlbHMpKSB7DQogICAgc3RvcCgiYHR5cGVgIG11c3QgaGF2ZSBsZW5ndGggMSBvciB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIG51bWJlciBvZiBMUCBtb2RlbHMuIikNCiAgfQ0KDQogICMgaGVscGVyOiBleHRyYWN0IGRmIGZvciBPTkUgbHAgb2JqZWN0DQogIG9uZV9scF90b19kZiA8LSBmdW5jdGlvbihvbmVfbHAsIG9uZV90eXBlKSB7DQogICAgc3RvcGlmbm90KGlzLmxpc3Qob25lX2xwKSwgbGVuZ3RoKG9uZV9scCkgPiAwKQ0KICAgIEggPC0gbGVuZ3RoKG9uZV9scCkgLSAxDQoNCiAgICBwdXJycjo6bWFwMl9kZnIoDQogICAgICBvbmVfbHAsDQogICAgICAwOkgsDQogICAgICB+ew0KICAgICAgICB0dCA8LSBicm9vbTo6dGlkeSgueCwgY29uZi5pbnQgPSBUUlVFLCBjb25mLmxldmVsID0gY29uZi5sZXZlbCwgdmNvdiA9IHZjb3YpDQoNCiAgICAgICAgc2hvY2tfdGVybSA8LSBpZiAoaXMubnVsbChrZWVwX3Rlcm0pKSB7DQogICAgICAgICAgdHQkdGVybVshdHQkdGVybSAlaW4lIGMoIihJbnRlcmNlcHQpIiwgIihpbnRlcmNlcHQpIiwgIkludGVyY2VwdCIpXVsxXQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGtlZXBfdGVybQ0KICAgICAgICB9DQoNCiAgICAgICAgdHQgJT4lDQogICAgICAgICAgZHBseXI6OmZpbHRlciguZGF0YSR0ZXJtID09IHNob2NrX3Rlcm0pICU+JQ0KICAgICAgICAgIGRwbHlyOjp0cmFuc211dGUoDQogICAgICAgICAgICBoICAgPSAueSwNCiAgICAgICAgICAgIGlyZiA9IC5kYXRhJGVzdGltYXRlLA0KICAgICAgICAgICAgbG93ID0gLmRhdGEkY29uZi5sb3csDQogICAgICAgICAgICB1cCAgPSAuZGF0YSRjb25mLmhpZ2gsDQogICAgICAgICAgICB0ZXJtID0gLmRhdGEkdGVybSwNCiAgICAgICAgICAgIHR5cGUgPSBvbmVfdHlwZQ0KICAgICAgICAgICkNCiAgICAgIH0NCiAgICApDQogIH0NCg0KICBpcmZfZGYgPC0gcHVycnI6Om1hcDJfZGZyKG1vZGVscywgdHlwZSwgb25lX2xwX3RvX2RmKQ0KDQogIGdncGxvdCgNCiAgICBpcmZfZGYsDQogICAgYWVzKA0KICAgICAgeCA9IGgsIHkgPSBpcmYsDQogICAgICB5bWluID0gbG93LCB5bWF4ID0gdXAsDQogICAgICBjb2xvciA9IHR5cGUsIGZpbGwgPSB0eXBlDQogICAgKQ0KICApICsNCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArDQogICAgZ2VvbV9yaWJib24oYWxwaGEgPSAwLjMsIGNvbG9yID0gTkEpICsNCiAgICBnZW9tX2xpbmUobGluZXdpZHRoID0gMC43KSArDQogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbHNfdHlwZSkgKw0KICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbHNfdHlwZSkgKw0KICAgIGxhYnMoDQogICAgICB4ID0gIkhvcml6b24iLA0KICAgICAgeSA9ICJSZXNwb25zZSBvZiBTdXBwbHkgKGxvZykiLA0KICAgICAgY29sb3IgPSBOVUxMLCBmaWxsID0gTlVMTCwNCiAgICAgIHRpdGxlID0gdGl0bGUNCiAgICApICsNCiAgICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEyKSArDQogICAgdGhlbWUoDQogICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpDQogICAgKQ0KfQ0KYGBgDQoNCg0KIyBNb2RlbHMNCldlIGVzdGltYXRlIHRoZSBmb2xsb3dpbmcgbG9jYWwgcHJvamVjdGlvbiBtb2RlbCA6DQoNCiQkDQpZX3tpLHQraH0tWV97aSx0LTF9PSBcYWxwaGFfaSArIFxiZXRhXmggIFhfdCArIFxnYW1tYSBaX3QgKyBcbXVfe2ksdH0NCiQkDQpXaGVyZSAkWSQgaXMgdGhlIGxvZy1kaWZmZXJlbmNlIG9mIHN0YWJsZWNvaW4gc3VwcGx5LCAkXGFscGhhX2kkIGlzIGFuIGluZGl2aWR1YWwgRkUsIGFuZCAkWF90JCBpcyBvdXIgaW5kZXggb2Ygc3BlZWNoIENCREMtcmVsYXRlZCBzZW50aW1lbnQvc3RhbmNlLiAkWl90JCBhcmUgY29udHJvbCB2YXJpYWJsZXMgcmVwcmVzZW50aW5nIHRoZSBWSVggYW5kIHRoZSBHUFJEIGFuZCB0aGVpciBsYWdzLCBhbmQgZHVtbWllcyByZXByZXNlbnRpbmcgVGVycmEtTHVuYSBhbmQgRlRYIGNyYXNoZXMuIFdlIGluY2x1ZGUgaW5kaXZpZHVhbCAoJFxhbHBoYV9pJCkgZml4ZWQtZWZmZWN0cy4gIA0KTm90ZSA6IHdlIHRha2UgdGhlIDkwJSBpbnRlcnZhbCBjb25maWRlbmNlcyBmb3IgYWxsIGVzdGltYXRpb25zLiBTdGFuZGFyZCBlcnJvcnMgYXJlIGhldGVyb3NrZWRhc3RpY2l0eSByb2J1c3RzIChjbHVzdGVyaXplZCBieSBzdGFibGVjb2luKS4NCg0KIyMgRGFpbHkNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KaCA9IDMwDQpscF9hdWVyIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IHN0YW5jZV9hdWVyICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikNCikNCg0KbHBfc2VudCA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50ICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikNCikNCg0KbHBfc3RhbmNlIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwgMSkgfiBpbmRleF9zdGFuY2UgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpgYGANCiMjIyBTZW50aW1lbnQgLyBTdGFuY2UNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KcGxvdF9scChscF9hdWVyLCB0eXBlPSJTZW50aW1lbnQgKEF1ZXIpIiwgdGl0bGU9IkRhaWx5IHJlc3BvbnNlIG9mIE1hcmtldCBDYXBpdGFsaXphdGlvbiB0byBpbmNyZWFzZSBpbiBBdWVyICYgYWwuICgyMDIxKSBzZW50aW1lbnQiKQ0KcGxvdF9scChscF9zZW50LCBscF9zdGFuY2UsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iRGFpbHkgcmVzcG9uc2Ugb2YgTWFya2V0IENhcGl0YWxpemF0aW9uIHRvIGluY3JlYXNlIGluIHNlbnRpbWVudC9zdGFuY2UiKQ0KDQpgYGANCg0KDQpTZW50aW1lbnQsIGFzIG1lYXN1cmVkIGJ5IEF1ZXIgJiBhbC4gKDIwMjEpIHRlbmQgbm90IHRvIGNhcHR1cmUgdGhlIGVmZmVjdCBvZiBDQkRDJ3MgcmVsYXRlZCBjb21tdW5pY2F0aW9ucyBvbiBzdGFibGVjb2luIHN1cHBsaWVzLiBIb3dldmVyLCB0aGUgTWFjaGluZSBMZWFybmluZyBmcmFtZXdvcmsgZG9lcyBjYXB0dXJlIHRoZSBuZWdhdGl2ZSBlZmZlY3Qgb2YgYW4gaW5jcmVhc2luZyBzZW50aW1lbnQvc3RhbmNlIGZyb20gQ2VudHJhbCBCYW5rcywgc3VnZ2VzdGluZyBhIHN1YnN0aXR1dGlvbiBiZXR3ZWVuIHN0YWJsZWNvaW5zIGFuZCBDQkRDLiBUaGlzIGVmZmVjdCBpcyByZWxhdGl2ZWx5IHNtYWxsIHlldCBzaWduaWZpY2FudCwgYW5kIG1heSBiZSBkdWUgdG8gdGhlIGZhY3QgdGhhdCBhbiBpbXBvcnRhbnQgbnVtYmVyIG9mIHNwZWVjaGVzIGFyZSBub3QgcGFydGljdWxhcmx5IGZvY3VzZWQgb24gQ0JEQywgYnV0IG1heSB0cmVhdCBzZXZlcmFsIHN1YmplY3RzIHRoYXQgQ2VudHJhbCBCYW5rcyB0YWtlIGNhcmUgb2YgYW5kIG1lbnRpb24gbWFyZ2luYWxseSBDQkRDIGV2ZW50dWFsbHkganVzdCB0byB0YWxrIGFib3V0IGl0IHdpdGhvdXQgcmVhbGx5IHVzaW5nIGEgZm9yd2FyZCBndWlkYW5jZSBkZXNpZ24uIFdlIHRodXMgZm9jdXMgb24gaW1wb3J0YW50IHNwZWVjaGVzLCBpLmUuIGNvbW11bmljYXRpb25zIHRoYXQgZXhwbGljaXRseSBmb2N1cyBvbiBDQkRDIGluIHRoZWlyIHRpdGxlIChOb3RlIDogYW5vdGhlciBhcHByb2FjaCBjb3VsZCBiZSB0byB3ZWlnaHQgdGhlIHNwZWVjaGVzIGJ5IHRoZSBudW1iZXIgb2Ygc2VudGVuY2VzIHJlbGF0ZWQgdG8gQ0JEQywgb3IgdGhlIHNoYXJlIG9mIHRoZXNlIHNlbnRlbmNlcyBpbiB0aGUgdG90YWwgbnVtYmVyIG9mIHNlbnRlbmNlcykuICAgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQpoPTMwDQpscF9zZW50X2ltcG9ydGFudCA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X2NiZGN0aXRsZSArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3N0YW5jZV9pbXBvcnRhbnQgIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV9jYmRjdGl0bGUgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpwbG90X2xwKGxwX3NlbnRfaW1wb3J0YW50LCBscF9zdGFuY2VfaW1wb3J0YW50LCB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgdGl0bGU9IkltcG9ydGFudCBTcGVlY2hlcyBPbmx5IikNCmBgYA0KSW1tZWRpYXRlIGVmZmVjdCBmb2xsb3dpbmcgaW1wb3J0YW50IENCREMtcmVsYXRlZCBzcGVlY2hlcywgaS5lLiBzcGVlY2hlcyB0aGF0IGV4cGxpY2l0bHkgbWVudGlvbiBDQkRDIG9yIHJlbGF0ZWQga2V5d29yZHMgaW4gdGhlaXIgdGl0bGUuIFRoZSBlZmZlY3QgaXMgYWxtb3N0IGltbWVkaWF0ZSwgYW5kIHRoZSBjb21tdW5pY2F0aW9ucyB0ZW5kIHRvIGRlY3JlYXNlIHN0YWJsZWNvaW5zIHN1cHBseSBieSAwLjMlIGFmdGVyIGFib3V0IGEgbW9udGguIA0KDQoNCkluIGFkZGl0aW9uLCB3ZSBjYW4gZGVjb21wb3NlIHRoZSBtYXJrZXQgY2FwaXRhbGl6YXRpb24gZWZmZWN0IG9uIHR3byBlZmZlY3RzIDogdGhlIHByaWNlIGVmZmVjdCwgYW5kIHRoZSBzdXBwbHkgZWZmZWN0LiBXZSByZXRyaWV2ZSBib3RoIHByaWNlIGFuZCBzdXBwbHkgZnJvbSBBcnRlbWlzLnh5ei4gDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KbHBfc2VudF9wIDwtIGZlb2xzKA0KICBmKHByaWNlLCAwOmgpLSBsKHByaWNlLDEpIH4gaW5kZXhfc2VudCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQpscF9zZW50X3MgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseV9zdXAsIDA6aCktIGwobG9nX3N1cHBseV9zdXAsMSkgfiBpbmRleF9zZW50KyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpscF9zdGFuY2VfcCAgPC0gZmVvbHMoDQogIGYocHJpY2UsIDA6aCktIGwocHJpY2UsMSkgfiBpbmRleF9zdGFuY2UgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpscF9zdGFuY2VfcyAgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseV9zdXAsIDA6aCktIGwobG9nX3N1cHBseV9zdXAsMSkgfiBpbmRleF9zdGFuY2UgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpwbG90X2xwKGxwX3NlbnRfcCwgbHBfc3RhbmNlX3AsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iUmVhY3Rpb24gb2YgcHJpY2VzIHRvIGluY3JlYXNlIGluIHNlbnRpbWVudC9zdGFuY2UiKQ0KcGxvdF9scChscF9zZW50X3MsIGxwX3N0YW5jZV9zLCB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgdGl0bGU9IlJlYWN0aW9uIG9mIHN1cHBseSB0byBpbmNyZWFzZSBpbiBzZW50aW1lbnQvc3RhbmNlIikNCg0KYGBgDQoNCk92ZXJhbGwsIHdlIGNhbiBzZWUgdGhhdCBhbiBpbmNyZWFzZSBpbiBzZW50aW1lbnQvc3RhbmNlIG9mIENCIHRvd2FyZHMgQ0JEQyB0ZW5kIHRvIGRlY3JlYXNlIHRoZSBtYXJrZXQgY2FwaXRhbGl6YXRpb24gb2Ygc3RhYmxlY29pbnMsIG1haW5seSB0aHJvdWdoIGEgZGVjcmVhc2UgaW4gc3VwcGx5IHRvIGRlZmVuZCB0aGUgcGFyaXR5LiBJbmRlZWQsIHRoZSBwcmljZSBkbyBub3QgdGVuZCB0byBtb3ZlIHdoaWxlIHRoZSBzdXBwbHkgZG9lcywgaW1wbHlpbmcgYSBkZWNyZWFzZSBpbiBkZW1hbmQgZm9yIHN0YWJsZWNvaW5zIHRvIGVuc3VyZSB0aGF0IGRlbWFuZCA9IHN1cHBseSBzbyB0aGF0IHByaWNlIGlzIGF0IHBhci4gDQoNCldlIGNhbiBhbHNvIHRlc3Qgd2l0aCB0aGUgT3V0c3RhbmRpbmcgU3VwcGx5IDoNCg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxwX3NlbnRfb3MgPC0gZmVvbHMoDQogIGYobG9nX291dHN0YW5kaW5nX3N1cHBseSwgMDpoKS0gbChsb2dfb3V0c3RhbmRpbmdfc3VwcGx5LDEpIH4gaW5kZXhfc2VudCsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikNCikNCmxwX3N0YW5jZV9vcyA8LSBmZW9scygNCiAgZihsb2dfb3V0c3RhbmRpbmdfc3VwcGx5LCAwOmgpLSBsKGxvZ19vdXRzdGFuZGluZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2UrICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3NlbnRfb3NfaW1wIDwtIGZlb2xzKA0KICBmKGxvZ19vdXRzdGFuZGluZ19zdXBwbHksIDA6aCktIGwobG9nX291dHN0YW5kaW5nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfY2JkY3RpdGxlKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KbHBfc3RhbmNlX29zX2ltcCA8LSBmZW9scygNCiAgZihsb2dfb3V0c3RhbmRpbmdfc3VwcGx5LCAwOmgpLSBsKGxvZ19vdXRzdGFuZGluZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfY2JkY3RpdGxlKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpwbG90X2xwKGxwX3NlbnRfb3MsIGxwX3N0YW5jZV9vcywgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIHRpdGxlPSJSZWFjdGlvbiBvZiBPdXRzdGFuZGluZyBTdXBwbHkgdG8gaW5jcmVhc2UgaW4gc2VudGltZW50L3N0YW5jZSAiKQ0KcGxvdF9scChscF9zZW50X29zX2ltcCwgbHBfc3RhbmNlX29zX2ltcCwgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIHRpdGxlPSJSZWFjdGlvbiBvZiBPdXRzdGFuZGluZyBTdXBwbHkgdG8gaW5jcmVhc2UgaW4gc2VudGltZW50L3N0YW5jZSAoSW1wb3J0YW50IFNwZWVjaGVzKSAiKQ0KDQpgYGANCg0KDQojIyMgRGVjb21wb3NpdGlvbiBieSB0eXBlDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgdHlwZXMNCiNoID0gMTAwDQoNCiMjIEdlbmVyYWwNCmxwX2dlbnNlbnQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2dlbmVyYWxfdW5zcGVjaWZpZWQgKyBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCAgfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpscF9nZW5zdGFuY2UgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX3R5cGVfZ2VuZXJhbF91bnNwZWNpZmllZCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCiMjIFdob2xlc2FsZQ0KDQpscF93aG9zZW50IDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfdHlwZV93aG9sZXNhbGVfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3dob3N0YW5jZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfdHlwZV93aG9sZXNhbGVfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCiMjIFJldGFpbA0KDQpscF9yZXRzZW50IDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfdHlwZV9yZXRhaWxfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3JldHN0YW5jZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfdHlwZV9yZXRhaWxfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3RfbHAobHBfZ2Vuc2VudCwgbHBfZ2Vuc3RhbmNlLCB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgdGl0bGU9IkdlbmVyYWwvVW5zcGVjaWZpZWQgKGRhaWx5KSIpDQpwbG90X2xwKGxwX3dob3NlbnQsIGxwX3dob3N0YW5jZSwgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIHRpdGxlPSJXaG9sZXNhbGUgKGRhaWx5KSIpDQpwbG90X2xwKGxwX3JldHNlbnQsIGxwX3JldHN0YW5jZSwgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIHRpdGxlPSJSZXRhaWwgKGRhaWx5KSIpDQoNCmBgYA0KVW5lIGhhdXNzZSBkdSBzZW50aW1lbnQvc3RhbmNlIMOgIHByb3BvcyBkZXMgTU5CQyBnZW5lcmFsIG91IG5vbi1zcMOpY2lmacOpIG5lIHRlbmQgcGFzIMOgIGNyw6llciB1bmUgYmFpc3NlIGRlIGxhIGRlbWFuZGUgcG91ciBsZXMgc3RhYmxlY29pbnMNCg0KDQoNCg0KIyMjIERlY29tcG9zaXRpb24gYnkgUHJvY2VzcyANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQojaCA9IDEwMA0KDQpscF9mZWF0dXJlX3NlbnQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjX2ZlYXR1cmUgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KbHBfZmVhdHVyZV9zdGFuY2UgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2NfZmVhdHVyZSArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9wcm9jZXNzX3NlbnQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjX3Byb2Nlc3MgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KbHBfcHJvY2Vzc19zdGFuY2UgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2NfcHJvY2VzcyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9yaXNrYmVuZWZfc2VudCA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X2Rpc2Nfcmlza19iZW5lZml0ICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Jpc2tiZW5lZl9zdGFuY2UgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2Nfcmlza19iZW5lZml0ICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQpgYGANCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdF9scChscF9mZWF0dXJlX3NlbnQsIGxwX2ZlYXR1cmVfc3RhbmNlLCB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgdGl0bGU9IkZlYXR1cmUiKQ0KcGxvdF9scChscF9wcm9jZXNzX3NlbnQsIGxwX3Byb2Nlc3Nfc3RhbmNlLCB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgdGl0bGU9IlByb2Nlc3MiKQ0KcGxvdF9scChscF9yaXNrYmVuZWZfc2VudCwgbHBfcmlza2JlbmVmX3N0YW5jZSwgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIHRpdGxlPSJSaXNrcy9CZW5lZml0cyIpDQoNCmBgYA0KDQoNCiMjIyBEZWNvbXBvc2l0aW9uIGJ5IHR5cGUgYW5kIHByb2Nlc3MNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KI0ZlYXR1cmUNCmxwX2ZlYXR1cmVfc2VudF9nZW4gPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2Rpc2NfZ2VuZXJhbF91bnNwZWNpZmllZF9mZWF0dXJlICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX2ZlYXR1cmVfc3RhbmNlX2dlbiA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfdHlwZV9kaXNjX2dlbmVyYWxfdW5zcGVjaWZpZWRfZmVhdHVyZSArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQoNCmxwX2ZlYXR1cmVfc2VudF9yZXQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2Rpc2NfcmV0YWlsX2NiZGNfZmVhdHVyZSArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9mZWF0dXJlX3N0YW5jZV9yZXQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX3R5cGVfZGlzY19yZXRhaWxfY2JkY19mZWF0dXJlICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX2ZlYXR1cmVfc2VudF93aG88LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X3R5cGVfZGlzY193aG9sZXNhbGVfY2JkY19mZWF0dXJlICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX2ZlYXR1cmVfc3RhbmNlX3dobzwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV90eXBlX2Rpc2Nfd2hvbGVzYWxlX2NiZGNfZmVhdHVyZSArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQojIFByb2Nlc3MNCmxwX3Byb2Nlc3Nfc2VudF9nZW4gPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2Rpc2NfZ2VuZXJhbF91bnNwZWNpZmllZF9wcm9jZXNzICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Byb2Nlc3Nfc3RhbmNlX2dlbiA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfdHlwZV9kaXNjX2dlbmVyYWxfdW5zcGVjaWZpZWRfcHJvY2VzcyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQoNCmxwX3Byb2Nlc3Nfc2VudF9yZXQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2Rpc2NfcmV0YWlsX2NiZGNfcHJvY2VzcyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9wcm9jZXNzX3N0YW5jZV9yZXQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX3R5cGVfZGlzY19yZXRhaWxfY2JkY19wcm9jZXNzICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCg0KbHBfcHJvY2Vzc19zZW50X3dobyA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X3R5cGVfZGlzY193aG9sZXNhbGVfY2JkY19wcm9jZXNzICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Byb2Nlc3Nfc3RhbmNlX3dobyA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfdHlwZV9kaXNjX3dob2xlc2FsZV9jYmRjX3Byb2Nlc3MgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KDQojIFJpc2stQmVuZWZpdHMNCg0KbHBfcmlza2JlbmVmX3NlbnRfZ2VuIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfdHlwZV9kaXNjX2dlbmVyYWxfdW5zcGVjaWZpZWRfcmlza19iZW5lZml0ICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Jpc2tiZW5lZl9zdGFuY2VfZ2VuIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV90eXBlX2Rpc2NfZ2VuZXJhbF91bnNwZWNpZmllZF9yaXNrX2JlbmVmaXQgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KDQpscF9yaXNrYmVuZWZfc2VudF9yZXQgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2Rpc2NfcmV0YWlsX2NiZGNfcmlza19iZW5lZml0ICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Jpc2tiZW5lZl9zdGFuY2VfcmV0IDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV90eXBlX2Rpc2NfcmV0YWlsX2NiZGNfcmlza19iZW5lZml0ICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCg0KbHBfcmlza2JlbmVmX3NlbnRfd2hvIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfdHlwZV9kaXNjX3dob2xlc2FsZV9jYmRjX3Jpc2tfYmVuZWZpdCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9yaXNrYmVuZWZfc3RhbmNlX3dobyA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfdHlwZV9kaXNjX3dob2xlc2FsZV9jYmRjX3Jpc2tfYmVuZWZpdCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQoNCmBgYA0KDQojIyMjIEZlYXR1cmVzDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3RfbHAobHBfZmVhdHVyZV9zZW50X2dlbiwgbHBfZmVhdHVyZV9zdGFuY2VfZ2VuLCANCiAgICAgICAgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIA0KICAgICAgICB0aXRsZT0iSW5jcmVhc2UgaW4gU2VudGltZW50IHRvd2FyZHMgR2VuZXJhbC9VbnNwZWNpZmllZCBDQkRDIEZlYXR1cmVzIikNCg0KcGxvdF9scChscF9mZWF0dXJlX3NlbnRfcmV0LCBscF9mZWF0dXJlX3N0YW5jZV9yZXQsIA0KICAgICAgICB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgDQogICAgICAgIHRpdGxlPSJJbmNyZWFzZSBpbiBTZW50aW1lbnQgdG93YXJkcyBSZXRhaWwgQ0JEQyBGZWF0dXJlcyIpDQoNCnBsb3RfbHAobHBfZmVhdHVyZV9zZW50X3dobywgbHBfZmVhdHVyZV9zdGFuY2Vfd2hvLCANCiAgICAgICAgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIA0KICAgICAgICB0aXRsZT0iSW5jcmVhc2UgaW4gU2VudGltZW50IHRvd2FyZHMgV2hvbGVzYWxlIENCREMgRmVhdHVyZXMiKQ0KDQpgYGANCg0KIyMjIyBQcm9jZXNzDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3RfbHAobHBfcHJvY2Vzc19zZW50X2dlbiwgbHBfcHJvY2Vzc19zdGFuY2VfZ2VuLCANCiAgICAgICAgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIA0KICAgICAgICB0aXRsZT0iSW5jcmVhc2UgaW4gU2VudGltZW50IHRvd2FyZHMgR2VuZXJhbC9VbnNwZWNpZmllZCBDQkRDIFByb2Nlc3MiKQ0KDQpwbG90X2xwKGxwX3Byb2Nlc3Nfc2VudF9yZXQsIGxwX3Byb2Nlc3Nfc3RhbmNlX3JldCwgDQogICAgICAgIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCANCiAgICAgICAgdGl0bGU9IkluY3JlYXNlIGluIFNlbnRpbWVudCB0b3dhcmRzIFJldGFpbCBDQkRDIFByb2Nlc3MiKQ0KDQpwbG90X2xwKGxwX3Byb2Nlc3Nfc2VudF93aG8sIGxwX3Byb2Nlc3Nfc3RhbmNlX3dobywgDQogICAgICAgIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCANCiAgICAgICAgdGl0bGU9IkluY3JlYXNlIGluIFNlbnRpbWVudCB0b3dhcmRzIFdob2xlc2FsZSBDQkRDIFByb2Nlc3MiKQ0KDQpgYGANCg0KDQojIyMjIFJpc2stQmVuZWZpdHMNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90X2xwKGxwX3Jpc2tiZW5lZl9zZW50X2dlbiwgbHBfcmlza2JlbmVmX3N0YW5jZV9nZW4sIA0KICAgICAgICB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgDQogICAgICAgIHRpdGxlPSJJbmNyZWFzZSBpbiBTZW50aW1lbnQgdG93YXJkcyBHZW5lcmFsL1Vuc3BlY2lmaWVkIENCREMgUmlzay1CZW5lZml0cyIpDQoNCnBsb3RfbHAobHBfcmlza2JlbmVmX3NlbnRfcmV0LCBscF9yaXNrYmVuZWZfc3RhbmNlX3JldCwgDQogICAgICAgIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCANCiAgICAgICAgdGl0bGU9IkluY3JlYXNlIGluIFNlbnRpbWVudCB0b3dhcmRzIFJldGFpbCBDQkRDIFJpc2stQmVuZWZpdHMiKQ0KDQpwbG90X2xwKGxwX3Jpc2tiZW5lZl9zZW50X3dobywgbHBfcmlza2JlbmVmX3N0YW5jZV93aG8sIA0KICAgICAgICB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgDQogICAgICAgIHRpdGxlPSJJbmNyZWFzZSBpbiBTZW50aW1lbnQgdG93YXJkcyBXaG9sZXNhbGUgQ0JEQyBSaXNrLUJlbmVmaXRzIikNCg0KYGBgDQoNCiMjIyBEZWNvbXBvc2l0aW9uIGJ5IE1hcmtldHMvQ2VudHJhbCBCYW5rcw0KIyMjIyBEZXZFbWUNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbHBfZGV2ZW1lX3NlbnRfZGV2IDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfZGV2ZW1lX2RldmVsb3BlZCAgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KbHBfZGV2ZW1lX3N0YW5jZV9kZXYgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2RldmVtZV9kZXZlbG9wZWQgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KDQoNCmxwX2RldmVtZV9zZW50X2VtZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X2RldmVtZV9lbWVyZ2luZyAgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KbHBfZGV2ZW1lX3N0YW5jZV9lbWUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2RldmVtZV9lbWVyZ2luZyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdF9scChscF9kZXZlbWVfc2VudF9kZXYsIGxwX2RldmVtZV9zdGFuY2VfZGV2LCB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgdGl0bGU9IkRldmVsb3BlZCIpDQpwbG90X2xwKGxwX2RldmVtZV9zZW50X2VtZSwgbHBfZGV2ZW1lX3N0YW5jZV9lbWUsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iRW1lcmdpbmciKQ0KDQpgYGANCg0KIyMjIyBFQ0IgdnMgb3RoZXINCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KbHBfc2VudF9lY2IgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9jYl9lY2IgICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3N0YW5jZV9lY2IgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2NiX2VjYiArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9zZW50X290aGVyIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfY2Jfb3RoZXIgICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3N0YW5jZV9vdGhlciA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfY2Jfb3RoZXIgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KcGxvdF9scChscF9zZW50X2VjYiwgbHBfc3RhbmNlX2VjYiwgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIHRpdGxlPSJFQ0IiKQ0KcGxvdF9scChscF9zZW50X290aGVyLCBscF9zdGFuY2Vfb3RoZXIsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iT3RoZXIiKQ0KDQpgYGANCg0KDQoNCg0KV2hhdCB3ZSBvYnNlcnZlIG92ZXJhbGwgOg0KLSBBbiBpbmNyZWFzZSBpbiBzZW50aW1lbnQvc3RhbmNlIHRlbmQgdG8gZGVjcmVhc2UgdGhlIGRlbWFuZCBmb3Igc3RhYmxlY29pbnMgDQotIFRoaXMgcmVzdWx0cyBoaWRlcyBoZXRlcm9nZW5laXR5DQotIEFuIGluY3JlYXNlIGluIHNlbnRpbWVudC9zdGFuY2UgZm9yIHJldGFpbCBhbmQgd2hvbGVzYWxlIENCREMgZGVjcmVhc2UgdGhlIGRlbWFuZCBmb3Igc3RhYmxlY29pbnMsIHdoaWxlIGFuIGluY3JlYXNlIGluIHNlbnRpbWVudC9zdGFuY2UgZm9yIEdlbmVyYWwvVW5zcGVjaWZpZWQgQ0JEQyB0ZW5kIHRvIGluY3JlYXNlIHRoZSBkZW1hbmQgb3IgaGF2ZSBubyBlZmZlY3QgZGVwZW5kaW5nIG9uIHRoZSBkaXNjb3Vyc2UgYXNzb2NpYXRlZC4NCi0gQW4gaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB3aGVuIENlbnRyYWwgQmFuayB0YWxrIGFib3V0IEdlbmVyYWwvVW5zcGVjaWZpZWQgQ0JEQywgaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3Qgb2Ygb3RoZXIgY2VudHJhbCBiYW5rcyAiY2VudHJhbCBiYW5rcyBvZiBtYWpvciBjb3VudHJpZXMgYXJlIGNhcnJ5aW5nIG91dCBpbi1kZXB0aCByZXNlYXJjaCByZWNlbnRseSBvbiBkaWdpdGFsIGN1cnJlbmNpZXMiIG9yIGJlIGludGVycHJldGVkIC0gaW4gc29tZSBjYXNlcyAtIGFzIGEgc2lnbiB0aGF0IGNlbnRyYWwgYmFua3Mgd2lsbCBhZG9wdCBhbiBhbHJlYWR5LWV4aXN0aW5nIHN0YWJsZWNvaW4uDQotIEhvd2V2ZXIsIHdoZW4gdGhlIHNwZWVjaCBjbGVhcmx5IHN0YXRlcyB0aGF0IGl0IGFpbXMgdG8gaXNzdWUgYSByZXRhaWwvd2hvbGVzYWxlIHN0YWJsZWNvaW5zLCBpdCBpcyBwZXJjZWl2ZWQgYXMgYSBzdWJzdGl0dXRlIGZvciBleGlzdGluZyBzdGFibGVjb2lucy4NCi0gTm90YWJseSwgd2hlbiBjZW50cmFsIGJhbmtzIGFubm91bmNlIHByb2dyZXNzIG9uIFdob2xlc2FsZSAoRmVhdHVyZXMgcGFydGljdWxhcmx5KSBvciBSZXRhaWwgKFByb2Nlc3MgcGFydGljdWxhcmx5KSBDQkRDLCBpdCBkYW1wZW5zIHRoZSBkZW1hbmQgZm9yIHN0YWJsZWNvaW5zLiANCi0gVGhlIGVmZmVjdCBpcyBwYXJ0aWN1bGFybHkgdmlzaWJsZSB3aGVuIENlbnRyYWwgQmFua3MgZnJvbSBEZXZlbG9wZWQgTWFya2V0cyBjb21tdW5pY2F0ZSBhYm91dCBDQkRDIC0gYW5kIGVzcGVjaWFsbHkgRUNCLg0KDQoNCg0KIyMjIEltcG9ydGFudCBzcGVlY2hlcyBvbmx5DQojIyMjIERlY29tcG9zaXRpb24gYnkgdHlwZQ0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbHBfc2VudF9pbXBvcnRhbnRfZ2VuZXJhbCA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X3R5cGVfY2JkY3RpdGxlX2dlbmVyYWxfdW5zcGVjaWZpZWQgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KbHBfc3RhbmNlX2ltcG9ydGFudF9nZW5lcmFsIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV90eXBlX2NiZGN0aXRsZV9nZW5lcmFsX3Vuc3BlY2lmaWVkICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikNCikNCg0KDQpscF9zZW50X2ltcG9ydGFudF9yZXRhaWwgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2NiZGN0aXRsZV9yZXRhaWxfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3N0YW5jZV9pbXBvcnRhbnRfcmV0YWlsICA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfdHlwZV9jYmRjdGl0bGVfcmV0YWlsX2NiZGMgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKQ0KKQ0KDQpscF9zZW50X2ltcG9ydGFudF93aG9sZXNhbGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF90eXBlX2NiZGN0aXRsZV93aG9sZXNhbGVfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3N0YW5jZV9pbXBvcnRhbnRfd2hvbGVzYWxlIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV90eXBlX2NiZGN0aXRsZV93aG9sZXNhbGVfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCg0KYGBgDQoNCiANCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdF9scChscF9zZW50X2ltcG9ydGFudF9nZW5lcmFsLCBscF9zdGFuY2VfaW1wb3J0YW50X2dlbmVyYWwsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iR2VuZXJhbC9VbnNwZWNpZmllZCBpbmNyZWFzZSBpbiBzZW50aW1lbnQgKGltcG9ydGFudCBzcGVlY2hlcykiKQ0KDQpwbG90X2xwKGxwX3NlbnRfaW1wb3J0YW50X3JldGFpbCwgbHBfc3RhbmNlX2ltcG9ydGFudF9yZXRhaWwsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iUmV0YWlsIENCREMgaW5jcmVhc2UgaW4gc2VudGltZW50IChpbXBvcnRhbnQgc3BlZWNoZXMpIikNCg0KcGxvdF9scChscF9zZW50X2ltcG9ydGFudF93aG9sZXNhbGUsIGxwX3N0YW5jZV9pbXBvcnRhbnRfd2hvbGVzYWxlLCB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgdGl0bGU9Ildob2xlc2FsZSBDQkRDIGluY3JlYXNlIGluIHNlbnRpbWVudCAoaW1wb3J0YW50IHNwZWVjaGVzKSIpDQpgYGANCiMjIyMgRGVjb21wb3NpdGlvbiBieSBEaXNjb3Vyc2UgIGluIGltcG9ydGFudCBzcGVlY2hlcw0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpscF9zZW50X2ltcG9ydGFudF9mZWF0dXJlIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfZGlzY291cnNlX2NiZGN0aXRsZV9mZWF0dXJlICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikNCikNCg0KDQpscF9zdGFuY2VfaW1wb3J0YW50X2ZlYXR1cmUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2NvdXJzZV9jYmRjdGl0bGVfZmVhdHVyZSArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCg0KbHBfc2VudF9pbXBvcnRhbnRfcHJvY2VzcyA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X2Rpc2NvdXJzZV9jYmRjdGl0bGVfcHJvY2VzcyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3N0YW5jZV9pbXBvcnRhbnRfcHJvY2VzcyAgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2NvdXJzZV9jYmRjdGl0bGVfcHJvY2VzcyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3NlbnRfaW1wb3J0YW50X3Jpc2tiZW5lZiA8LSBmZW9scyggIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjb3Vyc2VfY2JkY3RpdGxlX3Jpc2tfYmVuZWZpdCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQoNCmxwX3N0YW5jZV9pbXBvcnRhbnRfcmlza2JlbmVmIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV9kaXNjb3Vyc2VfY2JkY3RpdGxlX3Jpc2tfYmVuZWZpdCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpDQopDQpgYGANCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdF9scChscF9zZW50X2ltcG9ydGFudF9mZWF0dXJlLCBscF9zdGFuY2VfaW1wb3J0YW50X2ZlYXR1cmUsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iRmVhdHVyZXMgaW5jcmVhc2UgaW4gc2VudGltZW50IChpbXBvcnRhbnQgc3BlZWNoZXMpIikNCg0KcGxvdF9scChscF9zZW50X2ltcG9ydGFudF9wcm9jZXNzLCBscF9zdGFuY2VfaW1wb3J0YW50X3Byb2Nlc3MsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iUHJvY2VzcyBpbmNyZWFzZSBpbiBzZW50aW1lbnQgKGltcG9ydGFudCBzcGVlY2hlcykiKQ0KDQpwbG90X2xwKGxwX3NlbnRfaW1wb3J0YW50X3Jpc2tiZW5lZiwgbHBfc3RhbmNlX2ltcG9ydGFudF9yaXNrYmVuZWYsIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCB0aXRsZT0iUmlzay1CZW5lZml0IGluY3JlYXNlIGluIHNlbnRpbWVudCAoaW1wb3J0YW50IHNwZWVjaGVzKSIpDQpgYGANCg0KDQoNCg0KDQoNCiMjIyMgRGVjb21wb3NpdGlvbiBieSB0eXBlIGFuZCBwcm9jZXNzIGluIGltcG9ydGFudCBzcGVlY2hlcw0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQojRmVhdHVyZQ0KbHBfZmVhdHVyZV9zZW50X2dlbl9jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjX3R5cGVfY2JkY3RpdGxlX2ZlYXR1cmVfZ2VuZXJhbF91bnNwZWNpZmllZCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9mZWF0dXJlX3N0YW5jZV9nZW5fY2JkY3RpdGxlIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3N0YW5jZV9kaXNjX3R5cGVfY2JkY3RpdGxlX2ZlYXR1cmVfZ2VuZXJhbF91bnNwZWNpZmllZCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQoNCmxwX2ZlYXR1cmVfc2VudF9yZXRfY2JkY3RpdGxlIDwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfZGlzY190eXBlX2NiZGN0aXRsZV9mZWF0dXJlX3JldGFpbF9jYmRjICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX2ZlYXR1cmVfc3RhbmNlX3JldF9jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2NfdHlwZV9jYmRjdGl0bGVfZmVhdHVyZV9yZXRhaWxfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9mZWF0dXJlX3NlbnRfd2hvX2NiZGN0aXRsZTwtIGZlb2xzKA0KICBmKGxvZ19zdXBwbHksIDA6aCktIGwobG9nX3N1cHBseSwxKSB+IGluZGV4X3NlbnRfZGlzY190eXBlX2NiZGN0aXRsZV9mZWF0dXJlX3dob2xlc2FsZV9jYmRjICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX2ZlYXR1cmVfc3RhbmNlX3dob19jYmRjdGl0bGU8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfZGlzY190eXBlX2NiZGN0aXRsZV9mZWF0dXJlX3dob2xlc2FsZV9jYmRjICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCg0KIyBQcm9jZXNzDQpscF9wcm9jZXNzX3NlbnRfZ2VuX2NiZGN0aXRsZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X2Rpc2NfdHlwZV9jYmRjdGl0bGVfcHJvY2Vzc19nZW5lcmFsX3Vuc3BlY2lmaWVkICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Byb2Nlc3Nfc3RhbmNlX2dlbl9jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2NfdHlwZV9jYmRjdGl0bGVfcHJvY2Vzc19nZW5lcmFsX3Vuc3BlY2lmaWVkICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCg0KbHBfcHJvY2Vzc19zZW50X3JldF9jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjX3R5cGVfY2JkY3RpdGxlX3Byb2Nlc3NfcmV0YWlsX2NiZGMgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KbHBfcHJvY2Vzc19zdGFuY2VfcmV0X2NiZGN0aXRsZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfZGlzY190eXBlX2NiZGN0aXRsZV9wcm9jZXNzX3JldGFpbF9jYmRjICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCg0KbHBfcHJvY2Vzc19zZW50X3dob19jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjX3R5cGVfY2JkY3RpdGxlX3Byb2Nlc3Nfd2hvbGVzYWxlX2NiZGMgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KbHBfcHJvY2Vzc19zdGFuY2Vfd2hvX2NiZGN0aXRsZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfZGlzY190eXBlX2NiZGN0aXRsZV9wcm9jZXNzX3dob2xlc2FsZV9jYmRjICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCg0KIyBSaXNrLUJlbmVmaXRzDQoNCmxwX3Jpc2tiZW5lZl9zZW50X2dlbl9jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjX3R5cGVfY2JkY3RpdGxlX3Jpc2tfYmVuZWZpdF9nZW5lcmFsX3Vuc3BlY2lmaWVkICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Jpc2tiZW5lZl9zdGFuY2VfZ2VuX2NiZGN0aXRsZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfZGlzY190eXBlX2NiZGN0aXRsZV9yaXNrX2JlbmVmaXRfZ2VuZXJhbF91bnNwZWNpZmllZCArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQoNCmxwX3Jpc2tiZW5lZl9zZW50X3JldF9jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc2VudF9kaXNjX3R5cGVfY2JkY3RpdGxlX3Jpc2tfYmVuZWZpdF9yZXRhaWxfY2JkYyArICBsKGdwcmQsMDoxKStsKHZpeF9jbG9zZSwgMDoxKStsdW5hK2Z0eCB8IHN0YWJsZWNvaW4sDQogIGRhdGEgPSBkYXRhX2FydGVtaXMsIHBhbmVsLmlkPWMoInN0YWJsZWNvaW4iLCAiZGF0ZSIpKQ0KDQpscF9yaXNrYmVuZWZfc3RhbmNlX3JldF9jYmRjdGl0bGUgPC0gZmVvbHMoDQogIGYobG9nX3N1cHBseSwgMDpoKS0gbChsb2dfc3VwcGx5LDEpIH4gaW5kZXhfc3RhbmNlX2Rpc2NfdHlwZV9jYmRjdGl0bGVfcmlza19iZW5lZml0X3JldGFpbF9jYmRjICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCg0KbHBfcmlza2JlbmVmX3NlbnRfd2hvX2NiZGN0aXRsZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zZW50X2Rpc2NfdHlwZV9jYmRjdGl0bGVfcmlza19iZW5lZml0X3dob2xlc2FsZV9jYmRjICsgIGwoZ3ByZCwwOjEpK2wodml4X2Nsb3NlLCAwOjEpK2x1bmErZnR4IHwgc3RhYmxlY29pbiwNCiAgZGF0YSA9IGRhdGFfYXJ0ZW1pcywgcGFuZWwuaWQ9Yygic3RhYmxlY29pbiIsICJkYXRlIikpDQoNCmxwX3Jpc2tiZW5lZl9zdGFuY2Vfd2hvX2NiZGN0aXRsZSA8LSBmZW9scygNCiAgZihsb2dfc3VwcGx5LCAwOmgpLSBsKGxvZ19zdXBwbHksMSkgfiBpbmRleF9zdGFuY2VfZGlzY190eXBlX2NiZGN0aXRsZV9yaXNrX2JlbmVmaXRfd2hvbGVzYWxlX2NiZGMgKyAgbChncHJkLDA6MSkrbCh2aXhfY2xvc2UsIDA6MSkrbHVuYStmdHggfCBzdGFibGVjb2luLA0KICBkYXRhID0gZGF0YV9hcnRlbWlzLCBwYW5lbC5pZD1jKCJzdGFibGVjb2luIiwgImRhdGUiKSkNCg0KYGBgDQoNCg0KIyMjIyMgRmVhdHVyZXMNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdF9scChscF9mZWF0dXJlX3NlbnRfZ2VuX2NiZGN0aXRsZSwgbHBfZmVhdHVyZV9zdGFuY2VfZ2VuX2NiZGN0aXRsZSwgDQogICAgICAgIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCANCiAgICAgICAgdGl0bGU9IkluY3JlYXNlIGluIFNlbnRpbWVudCB0b3dhcmRzIEdlbmVyYWwvVW5zcGVjaWZpZWQgQ0JEQyBGZWF0dXJlcyAoSW1wb3J0YW50IFNwZWVjaGVzKSIpDQoNCnBsb3RfbHAobHBfZmVhdHVyZV9zZW50X3JldF9jYmRjdGl0bGUsIGxwX2ZlYXR1cmVfc3RhbmNlX3JldF9jYmRjdGl0bGUsIA0KICAgICAgICB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgDQogICAgICAgIHRpdGxlPSJJbmNyZWFzZSBpbiBTZW50aW1lbnQgdG93YXJkcyBSZXRhaWwgQ0JEQyBGZWF0dXJlcyAoSW1wb3J0YW50IFNwZWVjaGVzKSIpDQoNCnBsb3RfbHAobHBfZmVhdHVyZV9zZW50X3dob19jYmRjdGl0bGUsIGxwX2ZlYXR1cmVfc3RhbmNlX3dob19jYmRjdGl0bGUsIA0KICAgICAgICB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgDQogICAgICAgIHRpdGxlPSJJbmNyZWFzZSBpbiBTZW50aW1lbnQgdG93YXJkcyBXaG9sZXNhbGUgQ0JEQyBGZWF0dXJlcyAoSW1wb3J0YW50IFNwZWVjaGVzKSIpDQoNCmBgYA0KIyMjIyMgUHJvY2Vzcw0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90X2xwKGxwX3Byb2Nlc3Nfc2VudF9nZW5fY2JkY3RpdGxlLCBscF9wcm9jZXNzX3N0YW5jZV9nZW5fY2JkY3RpdGxlLCANCiAgICAgICAgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIA0KICAgICAgICB0aXRsZT0iSW5jcmVhc2UgaW4gU2VudGltZW50IHRvd2FyZHMgR2VuZXJhbC9VbnNwZWNpZmllZCBDQkRDIFByb2Nlc3MgKEltcG9ydGFudCBTcGVlY2hlcykiKQ0KDQpwbG90X2xwKGxwX3Byb2Nlc3Nfc2VudF9yZXRfY2JkY3RpdGxlLCBscF9wcm9jZXNzX3N0YW5jZV9yZXRfY2JkY3RpdGxlLCANCiAgICAgICAgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIA0KICAgICAgICB0aXRsZT0iSW5jcmVhc2UgaW4gU2VudGltZW50IHRvd2FyZHMgUmV0YWlsIENCREMgUHJvY2VzcyAoSW1wb3J0YW50IFNwZWVjaGVzKSIpDQoNCnBsb3RfbHAobHBfcHJvY2Vzc19zZW50X3dob19jYmRjdGl0bGUsIGxwX3Byb2Nlc3Nfc3RhbmNlX3dob19jYmRjdGl0bGUsIA0KICAgICAgICB0eXBlPWMoIlNlbnRpbWVudCIsICJTdGFuY2UiKSwgDQogICAgICAgIHRpdGxlPSJJbmNyZWFzZSBpbiBTZW50aW1lbnQgdG93YXJkcyBXaG9sZXNhbGUgQ0JEQyBQcm9jZXNzIChJbXBvcnRhbnQgU3BlZWNoZXMpIikNCmBgYA0KDQoNCiMjIyMjIFJpc2stQmVuZWZpdA0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90X2xwKGxwX3Jpc2tiZW5lZl9zZW50X2dlbl9jYmRjdGl0bGUsIGxwX3Jpc2tiZW5lZl9zdGFuY2VfZ2VuX2NiZGN0aXRsZSwgDQogICAgICAgIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCANCiAgICAgICAgdGl0bGU9IkluY3JlYXNlIGluIFNlbnRpbWVudCB0b3dhcmRzIEdlbmVyYWwvVW5zcGVjaWZpZWQgQ0JEQyBSaXNrLUJlbmVmaXQgKEltcG9ydGFudCBTcGVlY2hlcykiKQ0KDQpwbG90X2xwKGxwX3Jpc2tiZW5lZl9zZW50X3JldF9jYmRjdGl0bGUsIGxwX3Jpc2tiZW5lZl9zdGFuY2VfcmV0X2NiZGN0aXRsZSwgDQogICAgICAgIHR5cGU9YygiU2VudGltZW50IiwgIlN0YW5jZSIpLCANCiAgICAgICAgdGl0bGU9IkluY3JlYXNlIGluIFNlbnRpbWVudCB0b3dhcmRzIFJldGFpbCBDQkRDIFJpc2stQmVuZWZpdCAoSW1wb3J0YW50IFNwZWVjaGVzKSIpDQoNCnBsb3RfbHAobHBfcmlza2JlbmVmX3NlbnRfd2hvX2NiZGN0aXRsZSwgbHBfcmlza2JlbmVmX3N0YW5jZV93aG9fY2JkY3RpdGxlLCANCiAgICAgICAgdHlwZT1jKCJTZW50aW1lbnQiLCAiU3RhbmNlIiksIA0KICAgICAgICB0aXRsZT0iSW5jcmVhc2UgaW4gU2VudGltZW50IHRvd2FyZHMgV2hvbGVzYWxlIENCREMgUmlzay1CZW5lZml0IChJbXBvcnRhbnQgU3BlZWNoZXMpIikNCg0KYGBgDQoNCg0KTm90ZSA6IEplIHBlbnNlIHF1J29uIHBldXQgdXRpbGlzZXIgdW5pcXVlbWVudCBsZXMgc3BlZWNoZXMgaW1wb3J0YW50cywgaWxzIGRvbm5lbnQgZGVzIHLDqXN1bHRhdHMgcGx1cyBjbGFpcnMgZXQgYydlc3QgYXNzZXogZmFjaWxlIGRlIGp1c3RpZmllciBsZXVyIHV0aWxpc2F0aW9uICsgbGVzIHLDqXN1bHRhdHMgc29udCByb2J1c3RlcyBtYWlzIG1vaW5zIG1hcnF1YW50cyBxdWFuZCBvbiB1dGlsaXNlIHRvdXMgbGVzIHNwZWVjaGVzLg0KDQoNCg0K