@bitgo-beta/sdk-coin-eos 1.3.19-beta.2103 → 1.3.19-beta.2105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -194,6 +194,11 @@ describe('EOS:', function () {
194
194
  const backupKey = 'xpub661MyMwAqRbcH1n6sgY29G7dAxL7twS8rt1jyuuQb1kfnA7s3FJPGoVqb9JenXkeJmC4jZ8iVscn3AH6MkYAVc61FTYCHpxv5cxWar5Jw3C';
195
195
  const rootAddress = 'i1skda3kso43';
196
196
  const destinationAddress = 'ks13kdh245ls';
197
+ // clone the success response and drop only core_liquid_balance: the recovery keys
198
+ // still match the account's active permissions, so the key check passes and the
199
+ // balance check (which runs after the key check) throws
200
+ const noBalanceAccountResponse = _.cloneDeep(fixtures_1.EosResponses.getAccountResponseSuccess1);
201
+ Reflect.deleteProperty(noBalanceAccountResponse.body, 'core_liquid_balance');
197
202
  const sandBox = sinon.createSandbox();
198
203
  const callBack = sandBox.stub(src_1.Eos.prototype, 'getDataFromNode');
199
204
  callBack
@@ -201,7 +206,7 @@ describe('EOS:', function () {
201
206
  endpoint: '/v1/chain/get_account',
202
207
  payload: { account_name: rootAddress },
203
208
  })
204
- .resolves({ status: 200, body: { account_name: rootAddress } });
209
+ .resolves(noBalanceAccountResponse);
205
210
  try {
206
211
  await basecoin
207
212
  .recover({
@@ -245,6 +250,70 @@ describe('EOS:', function () {
245
250
  sandBox.restore();
246
251
  }
247
252
  });
253
+ it('should throw RecoveryKeyMismatchError when the user signer key is missing from active permissions', async function () {
254
+ const userKey = 'xpub661MyMwAqRbcH1oUADxatLuKkVjaDB2zTNJoZQsGVQEvoogpbXJw24QMokNwFKj9Qhci6KWaCcQKrzpL4LCQXXX3YpTQxgD9KLBjhDrUWo4';
255
+ const backupKey = 'xpub661MyMwAqRbcH1n6sgY29G7dAxL7twS8rt1jyuuQb1kfnA7s3FJPGoVqb9JenXkeJmC4jZ8iVscn3AH6MkYAVc61FTYCHpxv5cxWar5Jw3C';
256
+ const rootAddress = 'i1skda3kso43';
257
+ const destinationAddress = 'ks13kdh245ls';
258
+ // clone the success response: replace the user signer key with a foreign key
259
+ // and drop core_liquid_balance, proving the key check runs before the balance check
260
+ const mismatchedAccountResponse = _.cloneDeep(fixtures_1.EosResponses.getAccountResponseSuccess1);
261
+ mismatchedAccountResponse.body.permissions[0].required_auth.keys[1] = {
262
+ key: 'EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtFGpRFk2KsFzWwd',
263
+ weight: 1,
264
+ };
265
+ Reflect.deleteProperty(mismatchedAccountResponse.body, 'core_liquid_balance');
266
+ const sandBox = sinon.createSandbox();
267
+ const callBack = sandBox.stub(src_1.Eos.prototype, 'getDataFromNode');
268
+ callBack
269
+ .withArgs({
270
+ endpoint: '/v1/chain/get_account',
271
+ payload: { account_name: rootAddress },
272
+ })
273
+ .resolves(mismatchedAccountResponse);
274
+ await basecoin
275
+ .recover({
276
+ userKey,
277
+ backupKey,
278
+ bitgoKey: 'key',
279
+ recoveryDestination: destinationAddress,
280
+ rootAddress,
281
+ })
282
+ .should.be.rejectedWith(sdk_core_1.RecoveryKeyMismatchError, { code: 'recovery_key_mismatch' });
283
+ sandBox.restore();
284
+ });
285
+ it('should throw RecoveryKeyMismatchError when the backup signer key is missing from active permissions', async function () {
286
+ const userKey = 'xpub661MyMwAqRbcH1oUADxatLuKkVjaDB2zTNJoZQsGVQEvoogpbXJw24QMokNwFKj9Qhci6KWaCcQKrzpL4LCQXXX3YpTQxgD9KLBjhDrUWo4';
287
+ const backupKey = 'xpub661MyMwAqRbcH1n6sgY29G7dAxL7twS8rt1jyuuQb1kfnA7s3FJPGoVqb9JenXkeJmC4jZ8iVscn3AH6MkYAVc61FTYCHpxv5cxWar5Jw3C';
288
+ const rootAddress = 'i1skda3kso43';
289
+ const destinationAddress = 'ks13kdh245ls';
290
+ // clone the success response: replace the backup signer key with a foreign key
291
+ // and drop core_liquid_balance, proving the key check runs before the balance check
292
+ const mismatchedAccountResponse = _.cloneDeep(fixtures_1.EosResponses.getAccountResponseSuccess1);
293
+ mismatchedAccountResponse.body.permissions[0].required_auth.keys[2] = {
294
+ key: 'EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtFGpRFk2KsFzWwd',
295
+ weight: 1,
296
+ };
297
+ Reflect.deleteProperty(mismatchedAccountResponse.body, 'core_liquid_balance');
298
+ const sandBox = sinon.createSandbox();
299
+ const callBack = sandBox.stub(src_1.Eos.prototype, 'getDataFromNode');
300
+ callBack
301
+ .withArgs({
302
+ endpoint: '/v1/chain/get_account',
303
+ payload: { account_name: rootAddress },
304
+ })
305
+ .resolves(mismatchedAccountResponse);
306
+ await basecoin
307
+ .recover({
308
+ userKey,
309
+ backupKey,
310
+ bitgoKey: 'key',
311
+ recoveryDestination: destinationAddress,
312
+ rootAddress,
313
+ })
314
+ .should.be.rejectedWith(sdk_core_1.RecoveryKeyMismatchError, { code: 'recovery_key_mismatch' });
315
+ sandBox.restore();
316
+ });
248
317
  describe('Transactions:', function () {
249
318
  const testExplainTransaction = (input, expectedOutput) => async function () {
250
319
  const explainedTransaction = await basecoin.explainTransaction(input);
@@ -525,4 +594,4 @@ describe('EOS:', function () {
525
594
  });
526
595
  });
527
596
  });
528
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Vvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsaURBQStDO0FBQy9DLG1EQUE0RjtBQUM1RixtREFBK0Q7QUFDL0QscURBQThDO0FBQzlDLCtDQUFpQztBQUNqQywwQ0FBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDZDQUErQjtBQUMvQixtQ0FBc0M7QUFDdEMsMENBQXNEO0FBQ3RELG9EQUE0QjtBQUU1QixRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBRWIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFO1FBQy9CLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVoRSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBQSxnQkFBTSxFQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxF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aUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDMUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgRXJyb3JOb0lucHV0VG9SZWNvdmVyLCBSZWNvdmVyeVByb3ZpZGVyRXJyb3IsIFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0ICogYXMgZWNjIGZyb20gJ2Vvc2pzLWVjYyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBFb3MsIFRlb3MgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgRW9zSW5wdXRzLCBFb3NSZXNwb25zZXMgfSBmcm9tICcuLi9maXh0dXJlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmRlc2NyaWJlKCdFT1M6JywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdlb3MnLCBFb3MuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGVvcycsIFRlb3MuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGVvcycpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCBhZGRyZXNzIGRldGFpbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJ2kxc2tkYTNrc280MycpO1xuXG4gICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoJ2kxc2tkYTNrc280MycpO1xuICAgIHNob3VsZChhZGRyZXNzRGV0YWlscy5tZW1vSWQpLmJlLnVuZGVmaW5lZCgpO1xuXG4gICAgYWRkcmVzc0RldGFpbHMgPSBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscygna3MxM2szaGR1aTI0P21lbW9JZD0xJyk7XG4gICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwoJ2tzMTNrM2hkdWkyNCcpO1xuICAgIGFkZHJlc3NEZXRhaWxzLm1lbW9JZC5zaG91bGQuZXF1YWwoJzEnKTtcblxuICAgICgoKSA9PiB7XG4gICAgICBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscygna3MxM2szaGR1aTI0P21lbW9JZD0xJm1lbW9JZD0yJyk7XG4gICAgfSkuc2hvdWxkLnRocm93KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRoIGFscGhhbnVtZXJpYyBtZW1vaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSBiYXNlY29pbi5nZXRBZGRyZXNzRGV0YWlscygnaTFza2RhM2tzbzQzP21lbW9JZD0xMjNhYmMnKTtcblxuICAgIGFkZHJlc3NEZXRhaWxzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdpMXNrZGEza3NvNDMnKTtcbiAgICBhZGRyZXNzRGV0YWlscy5tZW1vSWQuc2hvdWxkLmVxdWFsKCcxMjNhYmMnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCdpMXNrZGEza3NvNDMnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJ2tzMTNrZGgyNDVscycpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygna3MxM2szaGR1aTI0P21lbW9JZD0xJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCdrczEzazNoZHVpMjQ/bWVtb0lkPXgnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlBZGRyZXNzIHNob3VsZCB3b3JrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGJhc2Vjb2luLnZlcmlmeUFkZHJlc3Moe1xuICAgICAgYWRkcmVzczogJ2kxc2tkYTNrc280MycsXG4gICAgICByb290QWRkcmVzczogJ2kxc2tkYTNrc280MycsXG4gICAgfSk7XG4gICAgYXdhaXQgYmFzZWNvaW4udmVyaWZ5QWRkcmVzcyh7XG4gICAgICBhZGRyZXNzOiAna3MxM2tkaDI0NWxzP21lbW9JZD0xJyxcbiAgICAgIHJvb3RBZGRyZXNzOiAna3MxM2tkaDI0NWxzJyxcbiAgICB9KTtcblxuICAgIGFzc2VydC5yZWplY3RzKGJhc2Vjb2luLnZlcmlmeUFkZHJlc3MoeyBhZGRyZXNzOiAnaTFza2RhM2tzbzQzPXgnLCByb290QWRkcmVzczogJ2kxc2tkYTNrc280MycgfSkpO1xuICAgIGFzc2VydC5yZWplY3RzKGJhc2Vjb2luLnZlcmlmeUFkZHJlc3MoeyBhZGRyZXNzOiAnaTFza2RhM2tzbzQzP21lbW9JZD0yNDM0MzInLCByb290QWRkcmVzczogJ2tzMTNrZGgyNDVscycgfSkpO1xuICAgIGFzc2VydC5yZWplY3RzKGJhc2Vjb2luLnZlcmlmeUFkZHJlc3MoeyBhZGRyZXNzOiAnaTFza2RhM2tzbzQzJyB9KSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2VuZXJhdGUgdmFsaWQgcmFuZG9tIGFkZHJlc3NlcycsICgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gYmFzZWNvaW4uZ2VuZXJhdGVSYW5kb21BZGRyZXNzKCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRNZW1vIHNob3VsZCB3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vKHsgdmFsdWU6ICcxJyB9KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgYmFzZWNvaW4uaXNWYWxpZE1lbW8oeyB2YWx1ZTogJ3VubycgfSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vKHsgdmFsdWU6IEVvc0lucHV0cy5zdHJpbmcyNTdDaGFyc0xvbmcgfSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2lzVmFsaWRNZW1vSWQgc2hvdWxkIHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMScpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICBiYXNlY29pbi5pc1ZhbGlkTWVtb0lkKCcxMjNhYmMnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZChFb3NJbnB1dHMuc3RyaW5nMjU3Q2hhcnNMb25nKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIHB1YiBrZXknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBwdWIgfSA9IGJhc2Vjb2luLmtleWNoYWlucygpLmNyZWF0ZSgpO1xuICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIocHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyczonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSByYW5kb20gc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJ2Jyk7XG5cbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoa2V5UGFpci5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa2V5UGFpci5wcnYpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnYzNiMDljMjQ3MzFiZTI4NTFiNjQxZDlkNWIzZjYwZmExMjk2OTVjMjQwNzE3NjhkMTU2NTRiZWEyMDdiN2JiNicsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG5cbiAgICAgIGtleVBhaXIucHViLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNGMlNVcVVNaXF4V0d3YVZYNnNING9rVHRYOGp4SjFBMTR3Zkw4VzdqWkVvTkU1MzdKcVNFU1hGcFRjWENaYWhQejdSS1FMcEFFR3NWcDIzM2RjNUNmZkxTZWNwVTEzWCdcbiAgICAgICk7XG4gICAgICBrZXlQYWlyLnBydi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHJ2OXMyMVpyUUgxNDNLMllOMWpTcGlVcFpZUFlmMmhRWkRTWFlIaWtMTGpmZDJDOUxCYXhvVjFTVXROblpHblhleUo2dUZXTWJRVGZqWHFWZmdOcVJCdzV5eWFDdEJLMUFNOFBGM1hadEtqUXAnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNyZWF0ZSB1bnNpZ25lZCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdGdvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJLZXkgPVxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNIMW9VQUR4YXRMdUtrVmphREIyelROSm9aUXNHVlFFdm9vZ3BiWEp3MjRRTW9rTndGS2o5UWhjaTZLV2FDY1FLcnpwTDRMQ1FYWFgzWXBUUXhnRDlLTEJqaERyVVdvNCc7XG4gICAgY29uc3QgYmFja3VwS2V5ID1cbiAgICAgICd4cHViNjYxTXlNd0FxUmJjSDFuNnNnWTI5RzdkQXhMN3R3UzhydDFqeXV1UWIxa2ZuQTdzM0ZKUEdvVnFiOUplblhrZUptQzRqWjhpVnNjbjNBSDZNa1lBVmM2MUZUWUNIcHh2NWN4V2FyNUp3M0MnO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gJ2kxc2tkYTNrc280Myc7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gJ2tzMTNrZGgyNDVscyc7XG5cbiAgICAvLyBtb2NrIHJlc3BvbnNlcyB0byB0aGUgYmxvY2sgY2hhaW5cbiAgICBjb25zdCBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEVvcy5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGFueSk7XG4gICAgY2FsbEJhY2tcbiAgICAgIC53aXRoQXJncyh7XG4gICAgICAgIGVuZHBvaW50OiAnL3YxL2NoYWluL2dldF9hY2NvdW50JyxcbiAgICAgICAgcGF5bG9hZDogeyBhY2NvdW50X25hbWU6IHJvb3RBZGRyZXNzIH0sXG4gICAgICB9KVxuICAgICAgLnJlc29sdmVzKEVvc1Jlc3BvbnNlcy5nZXRBY2NvdW50UmVzcG9uc2VTdWNjZXNzMSk7XG4gICAgY2FsbEJhY2tcbiAgICAgIC53aXRoQXJncyh7XG4gICAgICAgIGVuZHBvaW50OiAnL3YxL2NoYWluL2dldF9hY2NvdW50JyxcbiAgICAgICAgcGF5bG9hZDogeyBhY2NvdW50X25hbWU6IGRlc3RpbmF0aW9uQWRkcmVzcyB9LFxuICAgICAgfSlcbiAgICAgIC5yZXNvbHZlcyhFb3NSZXNwb25zZXMuZ2V0QWNjb3VudFJlc3BvbnNlU3VjY2VzczIpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfaW5mbycsXG4gICAgICB9KVxuICAgICAgLnJlc29sdmVzKEVvc1Jlc3BvbnNlcy5nZXRJbmZvUmVzcG9uc2VTdWNjZXNzMSk7XG4gICAgY2FsbEJhY2tcbiAgICAgIC53aXRoQXJncyh7XG4gICAgICAgIGVuZHBvaW50OiAnL3YxL2NoYWluL2dldF9ibG9jaycsXG4gICAgICAgIHBheWxvYWQ6IHsgYmxvY2tfbnVtX29yX2lkOiAxOTE4Mzk0NzIgfSxcbiAgICAgIH0pXG4gICAgICAucmVzb2x2ZXMoRW9zUmVzcG9uc2VzLmdldEJsb2NrUmVzcG9uc2VTdWNjZXNzMSk7XG5cbiAgICAvLyBjYW4gY3JlYXRlIHVuc2lnbmVkIHJlY292ZXJ5IHRyYW5zYWN0aW9uXG4gICAgY29uc3QgdW5zaWduZWRSZWNvdmVyeVRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4ucmVjb3Zlcih7XG4gICAgICB1c2VyS2V5LFxuICAgICAgYmFja3VwS2V5LFxuICAgICAgYml0Z29LZXk6ICdrZXknLFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgcm9vdEFkZHJlc3MsXG4gICAgfSk7XG4gICAgdW5zaWduZWRSZWNvdmVyeVRyYW5zYWN0aW9uLnJlY292ZXJ5QW1vdW50LnNob3VsZC5lcXVhbCgnNS4wMDAwJyk7XG4gICAgdW5zaWduZWRSZWNvdmVyeVRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uLnNpZ25hdHVyZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcblxuICAgIC8vIGNvaW4gYW5kIHR4SGV4IGZpZWxkcyBhcmUgZXhwZWN0ZWQgZHVyaW5nIHJlY292ZXJ5IG9mIHVuc2lnbmVkIHRyYW5zYWN0aW9uIHVzaW5nIE9WQ1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbi5jb2luLnNob3VsZC5lcXVhbCgndGVvcycpO1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbi50eEhleC5zaG91bGQuZXF1YWwoXG4gICAgICAnMmEwMmEwMDUzZTVhOGNmNzNhNTZiYTBmZGExMWU0ZDkyZTAyMzhhNGEyYWE3NGZjY2Y0NmQ1YTkxMDc0Njg0MDhjZGNkYjYwZjAzY2Y0YTllNTNjMDAwMDAwMDAwMTAwYTY4MjM0MDNlYTMwNTUwMDAwMDA1NzJkM2NjZGNkMDEzMDA4YzU3MDk4MDQ3MTcwMDAwMDAwMDBhOGVkMzIzMjIxMzAwOGM1NzA5ODA0NzE3MDgwNjMyMWEyMjUzODAyODY1MGMzMDAwMDAwMDAwMDAwMDQ0NTRmNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuICAgICk7XG5cbiAgICAvLyBkZXN0aW5hdGlvbiBhZGRyZXNzIGFuZCByb290IGFkZHJlc3MgY2FuIGluY2x1ZGUgbWVtb0lkXG4gICAgY29uc3QgdW5zaWduZWRSZWNvdmVyeVRyYW5zYWN0aW9uMiA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgdXNlcktleSxcbiAgICAgIGJhY2t1cEtleSxcbiAgICAgIGJpdGdvS2V5OiAna2V5JyxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGAke2Rlc3RpbmF0aW9uQWRkcmVzc30/bWVtb0lkPTBgLFxuICAgICAgcm9vdEFkZHJlc3M6IGAke3Jvb3RBZGRyZXNzfT9tZW1vSWQ9MGAsXG4gICAgfSk7XG4gICAgdW5zaWduZWRSZWNvdmVyeVRyYW5zYWN0aW9uMi5yZWNvdmVyeUFtb3VudC5zaG91bGQuZXF1YWwoJzUuMDAwMCcpO1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbjIudHJhbnNhY3Rpb24uc2lnbmF0dXJlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuXG4gICAgLy8gY29pbiBhbmQgdHhIZXggZmllbGRzIGFyZSBleHBlY3RlZCBkdXJpbmcgcmVjb3Zlcnkgb2YgdW5zaWduZWQgdHJhbnNhY3Rpb24gdXNpbmcgT1ZDXG4gICAgdW5zaWduZWRSZWNvdmVyeVRyYW5zYWN0aW9uLmNvaW4uc2hvdWxkLmVxdWFsKCd0ZW9zJyk7XG4gICAgdW5zaWduZWRSZWNvdmVyeVRyYW5zYWN0aW9uLnR4SGV4LnNob3VsZC5lcXVhbChcbiAgICAgICcyYTAyYTAwNTNlNWE4Y2Y3M2E1NmJhMGZkYTExZTRkOTJlMDIzOGE0YTJhYTc0ZmNjZjQ2ZDVhOTEwNzQ2ODQwOGNkY2RiNjBmMDNjZjRhOWU1M2MwMDAwMDAwMDAxMDBhNjgyMzQwM2VhMzA1NTAwMDAwMDU3MmQzY2NkY2QwMTMwMDhjNTcwOTgwNDcxNzAwMDAwMDAwMGE4ZWQzMjMyMjEzMDA4YzU3MDk4MDQ3MTcwODA2MzIxYTIyNTM4MDI4NjUwYzMwMDAwMDAwMDAwMDAwNDQ1NGY1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnXG4gICAgKTtcblxuICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IEVycm9yTm9JbnB1dFRvUmVjb3ZlciB3aGVuIHRoZSBhY2NvdW50IGhhcyBubyBsaXF1aWQgYmFsYW5jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyS2V5ID1cbiAgICAgICd4cHViNjYxTXlNd0FxUmJjSDFvVUFEeGF0THVLa1ZqYURCMnpUTkpvWlFzR1ZRRXZvb2dwYlhKdzI0UU1va053RktqOVFoY2k2S1dhQ2NRS3J6cEw0TENRWFhYM1lwVFF4Z0Q5S0xCamhEclVXbzQnO1xuICAgIGNvbnN0IGJhY2t1cEtleSA9XG4gICAgICAneHB1YjY2MU15TXdBcVJiY0gxbjZzZ1kyOUc3ZEF4TDd0d1M4cnQxanl1dVFiMWtmbkE3czNGSlBHb1ZxYjlKZW5Ya2VKbUM0alo4aVZzY24zQUg2TWtZQVZjNjFGVFlDSHB4djVjeFdhcjVKdzNDJztcbiAgICBjb25zdCByb290QWRkcmVzcyA9ICdpMXNrZGEza3NvNDMnO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9ICdrczEza2RoMjQ1bHMnO1xuXG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihFb3MucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBhbnkpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICAgIHBheWxvYWQ6IHsgYWNjb3VudF9uYW1lOiByb290QWRkcmVzcyB9LFxuICAgICAgfSlcbiAgICAgIC5yZXNvbHZlcyh7IHN0YXR1czogMjAwLCBib2R5OiB7IGFjY291bnRfbmFtZTogcm9vdEFkZHJlc3MgfSB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAucmVjb3Zlcih7XG4gICAgICAgICAgdXNlcktleSxcbiAgICAgICAgICBiYWNrdXBLZXksXG4gICAgICAgICAgYml0Z29LZXk6ICdrZXknLFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzcyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoRXJyb3JOb0lucHV0VG9SZWNvdmVyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2FuZEJveC5yZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IFJlY292ZXJ5UHJvdmlkZXJFcnJvciB3aGVuIHRoZSBub2RlIHJldHVybnMgYSBub24tMjAwIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJLZXkgPVxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNIMW9VQUR4YXRMdUtrVmphREIyelROSm9aUXNHVlFFdm9vZ3BiWEp3MjRRTW9rTndGS2o5UWhjaTZLV2FDY1FLcnpwTDRMQ1FYWFgzWXBUUXhnRDlLTEJqaERyVVdvNCc7XG4gICAgY29uc3QgYmFja3VwS2V5ID1cbiAgICAgICd4cHViNjYxTXlNd0FxUmJjSDFuNnNnWTI5RzdkQXhMN3R3UzhydDFqeXV1UWIxa2ZuQTdzM0ZKUEdvVnFiOUplblhrZUptQzRqWjhpVnNjbjNBSDZNa1lBVmM2MUZUWUNIcHh2NWN4V2FyNUp3M0MnO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gJ2kxc2tkYTNrc280Myc7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gJ2tzMTNrZGgyNDVscyc7XG5cbiAgICBjb25zdCBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgIGNvbnN0IGNhbGxCYWNrID0gc2FuZEJveC5zdHViKEVvcy5wcm90b3R5cGUsICdnZXREYXRhRnJvbU5vZGUnIGFzIGFueSk7XG4gICAgY2FsbEJhY2tcbiAgICAgIC53aXRoQXJncyh7XG4gICAgICAgIGVuZHBvaW50OiAnL3YxL2NoYWluL2dldF9hY2NvdW50JyxcbiAgICAgICAgcGF5bG9hZDogeyBhY2NvdW50X25hbWU6IHJvb3RBZGRyZXNzIH0sXG4gICAgICB9KVxuICAgICAgLnJlc29sdmVzKHsgc3RhdHVzOiA1MDAsIGJvZHk6IHt9IH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogJ2tleScsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICAgIHJvb3RBZGRyZXNzLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChSZWNvdmVyeVByb3ZpZGVyRXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzYW5kQm94LnJlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbnM6JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRlc3RFeHBsYWluVHJhbnNhY3Rpb24gPSAoaW5wdXQsIGV4cGVjdGVkT3V0cHV0KSA9PlxuICAgICAgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBleHBsYWluZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihpbnB1dCk7XG4gICAgICAgIHNob3VsZC5leGlzdChleHBsYWluZWRUcmFuc2FjdGlvbik7XG4gICAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgICAgfTtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQgdHJhbnNhY3Rpb24gc2lnbmF0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlRGF0YSA9ICdhYmNkJztcbiAgICAgIGNvbnN0IHR4ID0ge1xuICAgICAgICB0eEhleDogc2lnbmF0dXJlRGF0YSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIHJlZl9ibG9ja19udW06IDEsXG4gICAgICAgICAgcmVmX2Jsb2NrX3ByZWZpeDogJ2FzZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgc2lnbmF0dXJlczogW10sXG4gICAgICAgICAgcGFja2VkX3RyeDogc2lnbmF0dXJlRGF0YSxcbiAgICAgICAgICBjb21wcmVzc2lvbjogJ25vbmUnLFxuICAgICAgICB9LFxuICAgICAgICByZWNpcGllbnRzOiBbe31dLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKCdjM2IwOWMyNDczMWJlMjg1MWI2MjRkOWQ1YjNmNjBmYTEyOTY5NWMyNDA3MTc2OGQxNTY1NGJlYTIwN2I3YmI2JywgJ2hleCcpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcblxuICAgICAgY29uc3QgeyBoYWxmU2lnbmVkIH0gPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB0eCwgcHJ2OiBrZXlQYWlyLnBydiB9KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGhhbGZTaWduZWQudHJhbnNhY3Rpb24uc2lnbmF0dXJlc1swXTtcbiAgICAgIGNvbnN0IGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgoa2V5UGFpci5wdWIpO1xuICAgICAgY29uc3QgZW9zUHVia2V5ID0gZWNjLlB1YmxpY0tleS5mcm9tQnVmZmVyKGhkTm9kZS5wdWJsaWNLZXkpLnRvU3RyaW5nKCk7XG4gICAgICBlY2MudmVyaWZ5KHNpZ25hdHVyZSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlRGF0YSwgJ2hleCcpLCBlb3NQdWJrZXkpLnNob3VsZC5lcWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYW4gRU9TIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwbGFpblRyYW5zYWN0aW9uUGFyYW1zID0ge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgcmVmX2Jsb2NrX3ByZWZpeDogMTAwLFxuICAgICAgICAgIHJlZl9ibG9ja19udW06IDk5NSxcbiAgICAgICAgICBleHBpcmF0aW9uOiAnMjAxOC0wNC0yN1QxODo0MDozNC4wMDBaJyxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICBwYWNrZWRfdHJ4OlxuICAgICAgICAgICAgJ2EyNmVlMzVhZTMwMzY0MDAwMDAwMDAwMDAwMDAwMTAwYTY4MjM0MDNlYTMwNTUwMDAwMDA1NzJkM2NjZGNkMDE5MDEzZTQ4YzhjZTVlZWQ0MDAwMDAwMDBhOGVkMzIzMjIyOTAxM2U0OGM4Y2U1ZWVkNGIwMTIzNjJiNjFiMzEyMzY2NDAwMDAwMDAwMDAwMDAwMDQ0NTRmNTMwMDAwMDAwMDAxMzEwMCcsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBleHBsYWluZWRUeCA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbihleHBsYWluVHJhbnNhY3Rpb25QYXJhbXMpO1xuICAgICAgZXhwbGFpbmVkVHgub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgnMTAwJyk7XG4gICAgICBleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBleHBsYWluZWRUeC5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzEwMCcpO1xuICAgICAgZXhwbGFpbmVkVHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnYXNkZmFzZGZhc2RmJyk7XG4gICAgICBleHBsYWluZWRUeC5pZC5zaG91bGQuZXF1YWwoJzYxMzJmM2JmNGE3NDZlNmVjYWQ4YTMxZGY2N2Q3MWI0NzQxZmM1YjdjODY4YWUzNmRkZTE4MzA5YTkxZGY4YTYnKTtcbiAgICAgIGV4cGxhaW5lZFR4Lm1lbW8uc2hvdWxkLmVxdWFsKCcxJyk7XG4gICAgfSk7XG4gICAgaXQoXG4gICAgICAnZXhwbGFpbnMgRU9TIG5hdGl2ZSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsXG4gICAgICB0ZXN0RXhwbGFpblRyYW5zYWN0aW9uKEVvc0lucHV0cy5leHBsYWluVHJhbnNhY3Rpb25JbnB1dE5hdGl2ZSwgRW9zUmVzcG9uc2VzLmV4cGxhaW5UcmFuc2FjdGlvbk91dHB1dE5hdGl2ZSlcbiAgICApO1xuICAgIGl0KFxuICAgICAgJ2V4cGxhaW5zIENIRVggdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24nLFxuICAgICAgdGVzdEV4cGxhaW5UcmFuc2FjdGlvbihFb3NJbnB1dHMuZXhwbGFpblRyYW5zYWN0aW9uSW5wdXRDaGV4LCBFb3NSZXNwb25zZXMuZXhwbGFpblRyYW5zYWN0aW9uT3V0cHV0Q2hleClcbiAgICApO1xuICAgIGl0KFxuICAgICAgJ2V4cGxhaW4gRU9TIFVuc3Rha2UxIHRyYW5zYWN0aW9uJyxcbiAgICAgIHRlc3RFeHBsYWluVHJhbnNhY3Rpb24oRW9zSW5wdXRzLmV4cGxhaW5VbnN0YWtlSW5wdXQxLCBFb3NSZXNwb25zZXMuZXhwbGFpblVuc3Rha2VPdXRwdXQxKVxuICAgICk7XG4gICAgaXQoXG4gICAgICAnZXhwbGFpbiBFT1MgVW5zdGFrZTIgdHJhbnNhY3Rpb24nLFxuICAgICAgdGVzdEV4cGxhaW5UcmFuc2FjdGlvbihFb3NJbnB1dHMuZXhwbGFpblVuc3Rha2VJbnB1dDIsIEVvc1Jlc3BvbnNlcy5leHBsYWluVW5zdGFrZU91dHB1dDIpXG4gICAgKTtcbiAgICBpdChcbiAgICAgICdleHBsYWluIEVPUyBSZWZ1bmQgdHJhbnNhY3Rpb24nLFxuICAgICAgdGVzdEV4cGxhaW5UcmFuc2FjdGlvbihFb3NJbnB1dHMuZXhwbGFpblJlZnVuZElucHV0LCBFb3NSZXNwb25zZXMuZXhwbGFpblJlZnVuZE91dHB1dClcbiAgICApO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gVmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCB3YWxsZXQ7XG4gICAgbGV0IGJhc2Vjb2luO1xuICAgIGxldCB2ZXJpZmljYXRpb247XG4gICAgbGV0IHNhbmRCb3g7XG4gICAgbGV0IG5ld1R4UHJlYnVpbGQ7XG4gICAgbGV0IG5ld1R4UGFyYW1zO1xuXG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGVvcycpO1xuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICc1YTc4ZGQ1NjFjNjI1OGE5MDdmMWVlYWVlMTMyZjc5NicsXG4gICAgICAgIHVzZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXNlcjogJzU0M2MxMWVkMzU2ZDAwY2I3NjAwMDAwYjk4Nzk0NTAzJyxcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiBbJ2FkbWluJywgJ3ZpZXcnLCAnc3BlbmQnXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBjb2luOiAndGVvcycsXG4gICAgICAgIGxhYmVsOiAnVmVyaWZpY2F0aW9uIFdhbGxldCcsXG4gICAgICAgIG06IDIsXG4gICAgICAgIG46IDMsXG4gICAgICAgIGtleXM6IFtcbiAgICAgICAgICAnNWE3OGRkNTZiZmU0MjRhYTA3YWEwNjg2NTFiMTk0ZmQnLFxuICAgICAgICAgICc1YTc4ZGQ1Njc0YTcwZWI0MDc5ZjU4Nzk3ZGZlMmY1ZScsXG4gICAgICAgICAgJzVhNzhkZDU2MWM2MjU4YTkwN2YxZWVhOWYxZDA3OWUyJyxcbiAgICAgICAgXSxcbiAgICAgICAgdGFnczogWyc1YTc4ZGQ1NjFjNjI1OGE5MDdmMWVlYWVlMTMyZjc5NiddLFxuICAgICAgICBkaXNhYmxlVHJhbnNhY3Rpb25Ob3RpZmljYXRpb25zOiBmYWxzZSxcbiAgICAgICAgZnJlZXplOiB7fSxcbiAgICAgICAgZGVsZXRlZDogZmFsc2UsXG4gICAgICAgIGFwcHJvdmFsc1JlcXVpcmVkOiAxLFxuICAgICAgICBpc0NvbGQ6IHRydWUsXG4gICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIGNsaWVudEZsYWdzOiBbXSxcbiAgICAgICAgYmFsYW5jZTogNjUwMDAwMDAwLFxuICAgICAgICBjb25maXJtZWRCYWxhbmNlOiA2NTAwMDAwMDAsXG4gICAgICAgIHNwZW5kYWJsZUJhbGFuY2U6IDY1MDAwMDAwMCxcbiAgICAgICAgYmFsYW5jZVN0cmluZzogJzY1MDAwMDAwMCcsXG4gICAgICAgIGNvbmZpcm1lZEJhbGFuY2VTdHJpbmc6ICc2NTAwMDAwMDAnLFxuICAgICAgICBzcGVuZGFibGVCYWxhbmNlU3RyaW5nOiAnNjUwMDAwMDAwJyxcbiAgICAgICAgcmVjZWl2ZUFkZHJlc3M6IHtcbiAgICAgICAgICBpZDogJzVhNzhkZTJiYmZlNDI0YWEwN2FhMTMxZWMwM2M4ZGMxJyxcbiAgICAgICAgICBhZGRyZXNzOiAnNzh4Y3poYWlqeWhlazInLFxuICAgICAgICAgIGNoYWluOiAwLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIGNvaW46ICd0ZW9zJyxcbiAgICAgICAgICB3YWxsZXQ6ICc1YTc4ZGQ1NjFjNjI1OGE5MDdmMWVlYWVlMTMyZjc5NicsXG4gICAgICAgICAgY29pblNwZWNpZmljOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFsczogW10sXG4gICAgICB9O1xuICAgICAgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgYmFzZWNvaW4sIHdhbGxldERhdGEpO1xuICAgICAgY29uc3QgdXNlcktleWNoYWluID0ge1xuICAgICAgICBwcnY6ICc1S0pxNTY1SFRyZ0VKRzlFYnZKSDVCTFlUZ2lvQXlZMjdkVDlhbTFrQ3RuMllWQUpFWUsnLFxuICAgICAgICBwdWI6ICdFT1M2ZzdBQU1Ra2hYcDhqNzNFOEJENEtSd3RRZXZFc0ZnWXg4aHRhUWtSVmhoWEpNZ2tNWicsXG4gICAgICB9O1xuICAgICAgY29uc3QgYmFja3VwS2V5Y2hhaW4gPSB7XG4gICAgICAgIHBydjogJzVLWjFuWFhDaTV5WEg4QWpDSnFqbkNZSENWbmhRYTlZV0dWMkQxNGk4ZzIyMWR4TndMVycsXG4gICAgICAgIHB1YjogJ0VPUzdneURMTmsxMmZhVmIxYXFOeGoxTDJEcEJlckZraEFzeEJzOTV5VzN5eEpwcXZnOU10JyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ2xpb250ZXN0ZTIxMicsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgZXhwaXJhdGlvbjogJzIwMjEtMTAtMjhUMDI6MzQ6MDUuODQ4JyxcbiAgICAgICAgICByZWZfYmxvY2tfbnVtOiA0MjkxNSxcbiAgICAgICAgICByZWZfYmxvY2tfcHJlZml4OiAxMjA0MDg2NzA5LFxuICAgICAgICB9LFxuICAgICAgICB0eEhleDpcbiAgICAgICAgICAnMmEwMmEwMDUzZTVhOGNmNzNhNTZiYTBmZGExMWU0ZDkyZTAyMzhhNGEyYWE3NGZjY2Y0NmQ1YTkxMDc0Njg0MDFlMGM3YTYxYTNhN2I1ZTdjNDQ3MDAwMDAwMDEwMDQwOGM3YTAyZWEzMDU1MDAwMDAwMDAwMDg1MjY5ZDAwMDMwMjMzMzMwMTAwYTY4MjM0MDNlYTMwNTUwMDAwMDA1NzJkM2NjZGNkMDEyMGNlYjg0MzczMzM0MjdjMDAwMDAwMDBhOGVkMzIzMjIyMjBjZWI4NDM3MzMzNDI3YzIwODI1MDE5YWIzY2E5OGJlODAzMDAwMDAwMDAwMDAwMDQ0NTRmNTMwMDAwMDAwMDAxMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICB0cmFuc2FjdGlvbjoge1xuICAgICAgICAgIGNvbXByZXNzaW9uOiAnbm9uZScsXG4gICAgICAgICAgcGFja2VkX3RyeDpcbiAgICAgICAgICAgICcxZTBjN2E2MWEzYTdiNWU3YzQ0NzAwMDAwMDAxMDA0MDhjN2EwMmVhMzA1NTAwMDAwMDAwMDA4NTI2OWQwMDAzMDIzMzMzMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxMjBjZWI4NDM3MzMzNDI3YzAwMDAwMDAwYThlZDMyMzIyMjIwY2ViODQzNzMzMzQyN2MyMDgyNTAxOWFiM2NhOThiZTgwMzAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwMTMxMDAnLFxuICAgICAgICAgIHNpZ25hdHVyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgICB0eGlkOiAnNTg2YzViNTliMTBiMTM0ZDA0YzE2YWMxYjI3M2ZlM2M1NTI5ZjM0YWVmNzVkYjQ0NTZjZDQ2OWM1Y2RhYzdlMicsXG4gICAgICAgIGlzVm90aW5nVHJhbnNhY3Rpb246IGZhbHNlLFxuICAgICAgICBjb2luOiAndGVvcycsXG4gICAgICB9O1xuICAgICAgdmVyaWZpY2F0aW9uID0ge1xuICAgICAgICBkaXNhYmxlTmV0d29ya2luZzogdHJ1ZSxcbiAgICAgICAga2V5Y2hhaW5zOiB7XG4gICAgICAgICAgdXNlcjogeyBwdWI6IHVzZXJLZXljaGFpbi5wdWIgfSxcbiAgICAgICAgICBiYWNrdXA6IHsgcHViOiBiYWNrdXBLZXljaGFpbi5wdWIgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oJ2MzYjA5YzI0NzMxYmUyODUxYjYyNGQ5ZDViM2Y2MGZhMTI5Njk1YzI0MDcxNzY4ZDE1NjU0YmVhMjA3YjdiYjYnLCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHBydjoga2V5UGFpci5wcnYsXG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnbGlvbnRlc3RlMjEyP21lbW9JZD0xJyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBuZXdUeFByZWJ1aWxkID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQcmVidWlsZCk7XG4gICAgICB9O1xuICAgICAgbmV3VHhQYXJhbXMgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfLmNsb25lRGVlcCh0eFBhcmFtcyk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAvLyBtb2NrIHJlc3BvbnNlcyB0byB0aGUgYmxvY2sgY2hhaW5cbiAgICAgIHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihFb3MucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBhbnkpO1xuICAgICAgY2FsbEJhY2tcbiAgICAgICAgLndpdGhBcmdzKHtcbiAgICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfaW5mbycsXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXNvbHZlcyhFb3NSZXNwb25zZXMuZ2V0SW5mb1Jlc3BvbnNlU3VjY2VzczEpO1xuICAgICAgY2FsbEJhY2tcbiAgICAgICAgLndpdGhBcmdzKHtcbiAgICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYmxvY2snLFxuICAgICAgICAgIHBheWxvYWQ6IHsgYmxvY2tfbnVtX29yX2lkOiAxOTE4Mzk0NzIgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnJlc29sdmVzKEVvc1Jlc3BvbnNlcy5nZXRCbG9ja1Jlc3BvbnNlU3VjY2VzczEpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB2YWxpZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICB2YWxpZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aG91dCBhIG1lbW9JZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG5cbiAgICAgIC8vIHR4UGFyYW1zIHdpdGggZGlmZmVyZW50IHR4UHJlYnVpbGRcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQyID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQcmVidWlsZDIucmVjaXBpZW50c1swXS5hZGRyZXNzID0gJ2xpb250ZXN0ZTIxMic7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy50eFByZWJ1aWxkID0gdHhQcmVidWlsZDI7XG5cbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIHZhbGlkVHJhbnNhY3Rpb24uc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiBkaWZmZXJlbnQgcHJlYnVpbGRzIGFyZSBwcm92aWRlZCBpbiB0eFBhcmFtcyBhbmQgdHhQcmVidWlsZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG5cbiAgICAgIC8vIHR4UGFyYW1zIHdpdGggZGlmZmVyZW50IHR4UHJlYnVpbGRcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQyID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQcmVidWlsZDIucmVjaXBpZW50c1swXS5hZGRyZXNzID0gJ3NhZGpnaGFzbHNkZ28nO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMudHhQcmVidWlsZCA9IHR4UHJlYnVpbGQyO1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2lucHV0cyB0eFBhcmFtcy50eFByZWJ1aWxkIGFuZCB0eFByZWJ1aWxkIGV4cGVjdGVkIHRvIGJlIGVxdWFsIGJ1dCB3ZXJlIG5vdCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBpZiB1bnBhY2tlZCB0eEhleCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHVucGFja2VkIHBhY2tlZF90cngnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgdHhQcmVidWlsZC50eEhleCA9XG4gICAgICAgICdlNzBhYWFiODk5N2UxZGZjZTU4ZmJmYWM4MGNiYmI4ZmVjZWM3Yjk5Y2Y5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExNjQwMDAwMDAwMDAwMDAwMTAwNDA4YzdhMDJlYTMwNTUwMDAwMDAwMDAwODUyNjlkMDAwMjAxMzEwMTAwYTY4MjM0MDNlYTMwNTUwMDAwMDA1NzJkM2NjZGNkMDFkMGY5Y2U2NGY0MzdmN2NmMDAwMDAwMDBhOGVkMzIzMjIyZDBmOWNlNjRmNDM3ZjdjZmIwMTIzNjJiNjFiMzEyMzY2NDAwMDAwMDAwMDAwMDAwMDQ0NTRmNTMwMDAwMDAwMDAxMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMudHhQcmVidWlsZCA9IHR4UHJlYnVpbGQ7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3VucGFja2VkIHBhY2tlZF90cnggYW5kIHVucGFja2VkIHR4SGV4IGFyZSBub3QgZXF1YWwnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdGhlIGV4cGVjdGVkIGFtb3VudCBpcyBkaWZmZXJlbnQgdGhhbiBhY3R1YWwgYW1vdW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0uYW1vdW50ID0gMTAwMDA7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ3R4SGV4IHJlY2VpdmUgYW1vdW50IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHJlY2lwaWVudCBhbW91bnQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdGhlIGV4cGVjdGVkIHJlY2lwaWVudCBpcyBkaWZmZXJlbnQgdGhhbiBhY3R1YWwgcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdhYWFhYWFhYWFhYWEnO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eEhleCByZWNlaXZlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IGFkZHJlc3MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdGhlIGV4cGVjdGVkIG1lbW8gaXMgZGlmZmVyZW50IHRoYW4gYWN0dWFsIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5hZGRyZXNzID0gJ2xpb250ZXN0ZTIxMj9tZW1vSWQ9MTAnO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eEhleCByZWNlaXZlIG1lbW9JZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCByZWNpcGllbnQgbWVtb0lkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIG1lbW8gaWQgaW4gcGFyYW1zIG9ubHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuXG4gICAgICB0eFByZWJ1aWxkLmhlYWRlcnMgPSB7XG4gICAgICAgIGV4cGlyYXRpb246ICcyMDIxLTExLTA4VDE3OjI0OjQ3Ljc5MicsXG4gICAgICAgIHJlZl9ibG9ja19udW06IDEsXG4gICAgICAgIHJlZl9ibG9ja19wcmVmaXg6IDEwMCxcbiAgICAgIH07XG4gICAgICAvLyBoYXMgbWVtb2lkIGluIHRoZSB0eGFjdGlvbiB3aXRoIHZhbHVlIG9mICcxJ1xuICAgICAgdHhQcmVidWlsZC50eEhleCA9XG4gICAgICAgICdlNzBhYWFiODk5N2UxZGZjZTU4ZmJmYWM4MGNiYmI4ZmVjZWM3Yjk5Y2Y5ODJhOTQ0NDI3M2NiYzY0YzQxNDczNjA1ZDg5NjEwMTAwNjQwMDAwMDAwMDAwMDAwMTAwNDA4YzdhMDJlYTMwNTUwMDAwMDAwMDAwODUyNjlkMDAwMjAxMzAwMTAwYTY4MjM0MDNlYTMwNTUwMDAwMDA1NzJkM2NjZGNkMDEwMDFkZDlmOWEwMDBhNTNkMDAwMDAwMDBhOGVkMzIzMjIyMDAxZGQ5ZjlhMDAwYTUzZDIwODI1MDE5YWIzY2E5OGJlODAzMDAwMDAwMDAwMDAwMDQ0NTRmNTMwMDAwMDAwMDAxMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgdHhQcmVidWlsZC50cmFuc2FjdGlvbi5wYWNrZWRfdHJ4ID1cbiAgICAgICAgJzYwNWQ4OTYxMDEwMDY0MDAwMDAwMDAwMDAwMDEwMDQwOGM3YTAyZWEzMDU1MDAwMDAwMDAwMDg1MjY5ZDAwMDIwMTMwMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxMDAxZGQ5ZjlhMDAwYTUzZDAwMDAwMDAwYThlZDMyMzIyMjAwMWRkOWY5YTAwMGE1M2QyMDgyNTAxOWFiM2NhOThiZTgwMzAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwMTMxMDAnO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5hZGRyZXNzID0gJ2xpb250ZXN0ZTIxMic7XG4gICAgICB0eFBhcmFtcy50eFByZWJ1aWxkID0gdHhQcmVidWlsZDtcblxuICAgICAgY29uc3QgdmFsaWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgdmFsaWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGFscGhhIG51bWVyaWMgbWVtbyBpZCBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuXG4gICAgICB0eFByZWJ1aWxkLmhlYWRlcnMgPSB7XG4gICAgICAgIGV4cGlyYXRpb246ICcyMDIxLTExLTA4VDE3OjU1OjE3LjUxOCcsXG4gICAgICAgIHJlZl9ibG9ja19udW06IDEsXG4gICAgICAgIHJlZl9ibG9ja19wcmVmaXg6IDEwMCxcbiAgICAgIH07XG4gICAgICAvLyBoYXMgbWVtb2lkIGluIHRoZSB0eGFjdGlvbiB3aXRoIHZhbHVlIG9mICdRRzczV0FYWEcnXG4gICAgICB0eFByZWJ1aWxkLnR4SGV4ID1cbiAgICAgICAgJ2U3MGFhYWI4OTk3ZTFkZmNlNThmYmZhYzgwY2JiYjhmZWNlYzdiOTljZjk4MmE5NDQ0MjczY2JjNjRjNDE0NzM4NjY0ODk2MTAxMDA2NDAwMDAwMDAwMDAwMDAxMDA0MDhjN2EwMmVhMzA1NTAwMDAwMDAwMDA4NTI2OWQwMDAyMDEzMDAxMDBhNjgyMzQwM2VhMzA1NTAwMDAwMDU3MmQzY2NkY2QwMTMwODViOTQzYjFiNTRlZDcwMDAwMDAwMGE4ZWQzMjMyMmEzMDg1Yjk0M2IxYjU0ZWQ3MjA4MjUwMTlhYjNjYTk4YmU4MDMwMDAwMDAwMDAwMDAwNDQ1NGY1MzAwMDAwMDAwMDk1MTQ3MzczMzU3NDE1ODU4NDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgdHhQcmVidWlsZC50cmFuc2FjdGlvbi5wYWNrZWRfdHJ4ID1cbiAgICAgICAgJzg2NjQ4OTYxMDEwMDY0MDAwMDAwMDAwMDAwMDEwMDQwOGM3YTAyZWEzMDU1MDAwMDAwMDAwMDg1MjY5ZDAwMDIwMTMwMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxMzA4NWI5NDNiMWI1NGVkNzAwMDAwMDAwYThlZDMyMzIyYTMwODViOTQzYjFiNTRlZDcyMDgyNTAxOWFiM2NhOThiZTgwMzAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwOTUxNDczNzMzNTc0MTU4NTg0NzAwJztcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdsaW9udGVzdGUyMTInO1xuICAgICAgdHhQYXJhbXMudHhQcmVidWlsZCA9IHR4UHJlYnVpbGQ7XG5cbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIHZhbGlkVHJhbnNhY3Rpb24uc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
597
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Vvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsaURBQStDO0FBQy9DLG1EQUFzSDtBQUN0SCxtREFBK0Q7QUFDL0QscURBQThDO0FBQzlDLCtDQUFpQztBQUNqQywwQ0FBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLDZDQUErQjtBQUMvQixtQ0FBc0M7QUFDdEMsMENBQXNEO0FBQ3RELG9EQUE0QjtBQUU1QixRQUFRLENBQUMsTUFBTSxFQUFFO0lBQ2YsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBRWIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFO1FBQy9CLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVoRSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBQSxnQkFBTSxFQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxF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QUN2RCxVQUFVLENBQUMsS0FBSztnQkFDZCxrV0FBa1csQ0FBQztZQUNyVyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQy9CLGtPQUFrTyxDQUFDO1lBQ3JPLE1BQU0sUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQztZQUNoRCxRQUFRLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUVqQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUMxRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBFcnJvck5vSW5wdXRUb1JlY292ZXIsIFJlY292ZXJ5S2V5TWlzbWF0Y2hFcnJvciwgUmVjb3ZlcnlQcm92aWRlckVycm9yLCBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCAqIGFzIGVjYyBmcm9tICdlb3Nqcy1lY2MnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgRW9zLCBUZW9zIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IEVvc0lucHV0cywgRW9zUmVzcG9uc2VzIH0gZnJvbSAnLi4vZml4dHVyZXMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5kZXNjcmliZSgnRU9TOicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcignZW9zJywgRW9zLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3Rlb3MnLCBUZW9zLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3Rlb3MnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBnZXQgYWRkcmVzcyBkZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBhZGRyZXNzRGV0YWlscyA9IGJhc2Vjb2luLmdldEFkZHJlc3NEZXRhaWxzKCdpMXNrZGEza3NvNDMnKTtcblxuICAgIGFkZHJlc3NEZXRhaWxzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdpMXNrZGEza3NvNDMnKTtcbiAgICBzaG91bGQoYWRkcmVzc0RldGFpbHMubWVtb0lkKS5iZS51bmRlZmluZWQoKTtcblxuICAgIGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJ2tzMTNrM2hkdWkyND9tZW1vSWQ9MScpO1xuICAgIGFkZHJlc3NEZXRhaWxzLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdrczEzazNoZHVpMjQnKTtcbiAgICBhZGRyZXNzRGV0YWlscy5tZW1vSWQuc2hvdWxkLmVxdWFsKCcxJyk7XG5cbiAgICAoKCkgPT4ge1xuICAgICAgYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJ2tzMTNrM2hkdWkyND9tZW1vSWQ9MSZtZW1vSWQ9MicpO1xuICAgIH0pLnNob3VsZC50aHJvdygpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCBhZGRyZXNzIGRldGFpbHMgd2l0aCBhbHBoYW51bWVyaWMgbWVtb2lkJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gYmFzZWNvaW4uZ2V0QWRkcmVzc0RldGFpbHMoJ2kxc2tkYTNrc280Mz9tZW1vSWQ9MTIzYWJjJyk7XG5cbiAgICBhZGRyZXNzRGV0YWlscy5hZGRyZXNzLnNob3VsZC5lcXVhbCgnaTFza2RhM2tzbzQzJyk7XG4gICAgYWRkcmVzc0RldGFpbHMubWVtb0lkLnNob3VsZC5lcXVhbCgnMTIzYWJjJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnaTFza2RhM2tzbzQzJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCdrczEza2RoMjQ1bHMnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJ2tzMTNrM2hkdWkyND9tZW1vSWQ9MScpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygna3MxM2szaGR1aTI0P21lbW9JZD14Jykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5QWRkcmVzcyBzaG91bGQgd29yaycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBiYXNlY29pbi52ZXJpZnlBZGRyZXNzKHtcbiAgICAgIGFkZHJlc3M6ICdpMXNrZGEza3NvNDMnLFxuICAgICAgcm9vdEFkZHJlc3M6ICdpMXNrZGEza3NvNDMnLFxuICAgIH0pO1xuICAgIGF3YWl0IGJhc2Vjb2luLnZlcmlmeUFkZHJlc3Moe1xuICAgICAgYWRkcmVzczogJ2tzMTNrZGgyNDVscz9tZW1vSWQ9MScsXG4gICAgICByb290QWRkcmVzczogJ2tzMTNrZGgyNDVscycsXG4gICAgfSk7XG5cbiAgICBhc3NlcnQucmVqZWN0cyhiYXNlY29pbi52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJ2kxc2tkYTNrc280Mz14Jywgcm9vdEFkZHJlc3M6ICdpMXNrZGEza3NvNDMnIH0pKTtcbiAgICBhc3NlcnQucmVqZWN0cyhiYXNlY29pbi52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJ2kxc2tkYTNrc280Mz9tZW1vSWQ9MjQzNDMyJywgcm9vdEFkZHJlc3M6ICdrczEza2RoMjQ1bHMnIH0pKTtcbiAgICBhc3NlcnQucmVqZWN0cyhiYXNlY29pbi52ZXJpZnlBZGRyZXNzKHsgYWRkcmVzczogJ2kxc2tkYTNrc280MycgfSkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIHZhbGlkIHJhbmRvbSBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGJhc2Vjb2luLmdlbmVyYXRlUmFuZG9tQWRkcmVzcygpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdpc1ZhbGlkTWVtbyBzaG91bGQgd29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5pc1ZhbGlkTWVtbyh7IHZhbHVlOiAnMScgfSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vKHsgdmFsdWU6ICd1bm8nIH0pLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICBiYXNlY29pbi5pc1ZhbGlkTWVtbyh7IHZhbHVlOiBFb3NJbnB1dHMuc3RyaW5nMjU3Q2hhcnNMb25nIH0pLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpc1ZhbGlkTWVtb0lkIHNob3VsZCB3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vSWQoJzEnKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgYmFzZWNvaW4uaXNWYWxpZE1lbW9JZCgnMTIzYWJjJykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGJhc2Vjb2luLmlzVmFsaWRNZW1vSWQoRW9zSW5wdXRzLnN0cmluZzI1N0NoYXJzTG9uZykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwdWIga2V5JywgKCkgPT4ge1xuICAgIGNvbnN0IHsgcHViIH0gPSBiYXNlY29pbi5rZXljaGFpbnMoKS5jcmVhdGUoKTtcbiAgICBiYXNlY29pbi5pc1ZhbGlkUHViKHB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuXG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtleVBhaXIucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHJ2KGtleVBhaXIucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oJ2MzYjA5YzI0NzMxYmUyODUxYjY0MWQ5ZDViM2Y2MGZhMTI5Njk1YzI0MDcxNzY4ZDE1NjU0YmVhMjA3YjdiYjYnLCAnaGV4Jyk7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuXG4gICAgICBrZXlQYWlyLnB1Yi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRjJTVXFVTWlxeFdHd2FWWDZzSDRva1R0WDhqeEoxQTE0d2ZMOFc3alpFb05FNTM3SnFTRVNYRnBUY1hDWmFoUHo3UktRTHBBRUdzVnAyMzNkYzVDZmZMU2VjcFUxM1gnXG4gICAgICApO1xuICAgICAga2V5UGFpci5wcnYuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHBydjlzMjFaclFIMTQzSzJZTjFqU3BpVXBaWVBZZjJoUVpEU1hZSGlrTExqZmQyQzlMQmF4b1YxU1V0Tm5aR25YZXlKNnVGV01iUVRmalhxVmZnTnFSQnc1eXlhQ3RCSzFBTThQRjNYWnRLalFwJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgdW5zaWduZWQgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRnbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyS2V5ID1cbiAgICAgICd4cHViNjYxTXlNd0FxUmJjSDFvVUFEeGF0THVLa1ZqYURCMnpUTkpvWlFzR1ZRRXZvb2dwYlhKdzI0UU1va053RktqOVFoY2k2S1dhQ2NRS3J6cEw0TENRWFhYM1lwVFF4Z0Q5S0xCamhEclVXbzQnO1xuICAgIGNvbnN0IGJhY2t1cEtleSA9XG4gICAgICAneHB1YjY2MU15TXdBcVJiY0gxbjZzZ1kyOUc3ZEF4TDd0d1M4cnQxanl1dVFiMWtmbkE3czNGSlBHb1ZxYjlKZW5Ya2VKbUM0alo4aVZzY24zQUg2TWtZQVZjNjFGVFlDSHB4djVjeFdhcjVKdzNDJztcbiAgICBjb25zdCByb290QWRkcmVzcyA9ICdpMXNrZGEza3NvNDMnO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9ICdrczEza2RoMjQ1bHMnO1xuXG4gICAgLy8gbW9jayByZXNwb25zZXMgdG8gdGhlIGJsb2NrIGNoYWluXG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihFb3MucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBhbnkpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICAgIHBheWxvYWQ6IHsgYWNjb3VudF9uYW1lOiByb290QWRkcmVzcyB9LFxuICAgICAgfSlcbiAgICAgIC5yZXNvbHZlcyhFb3NSZXNwb25zZXMuZ2V0QWNjb3VudFJlc3BvbnNlU3VjY2VzczEpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICAgIHBheWxvYWQ6IHsgYWNjb3VudF9uYW1lOiBkZXN0aW5hdGlvbkFkZHJlc3MgfSxcbiAgICAgIH0pXG4gICAgICAucmVzb2x2ZXMoRW9zUmVzcG9uc2VzLmdldEFjY291bnRSZXNwb25zZVN1Y2Nlc3MyKTtcbiAgICBjYWxsQmFja1xuICAgICAgLndpdGhBcmdzKHtcbiAgICAgICAgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2luZm8nLFxuICAgICAgfSlcbiAgICAgIC5yZXNvbHZlcyhFb3NSZXNwb25zZXMuZ2V0SW5mb1Jlc3BvbnNlU3VjY2VzczEpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYmxvY2snLFxuICAgICAgICBwYXlsb2FkOiB7IGJsb2NrX251bV9vcl9pZDogMTkxODM5NDcyIH0sXG4gICAgICB9KVxuICAgICAgLnJlc29sdmVzKEVvc1Jlc3BvbnNlcy5nZXRCbG9ja1Jlc3BvbnNlU3VjY2VzczEpO1xuXG4gICAgLy8gY2FuIGNyZWF0ZSB1bnNpZ25lZCByZWNvdmVyeSB0cmFuc2FjdGlvblxuICAgIGNvbnN0IHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIoe1xuICAgICAgdXNlcktleSxcbiAgICAgIGJhY2t1cEtleSxcbiAgICAgIGJpdGdvS2V5OiAna2V5JyxcbiAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgIHJvb3RBZGRyZXNzLFxuICAgIH0pO1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbi5yZWNvdmVyeUFtb3VudC5zaG91bGQuZXF1YWwoJzUuMDAwMCcpO1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbi50cmFuc2FjdGlvbi5zaWduYXR1cmVzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG5cbiAgICAvLyBjb2luIGFuZCB0eEhleCBmaWVsZHMgYXJlIGV4cGVjdGVkIGR1cmluZyByZWNvdmVyeSBvZiB1bnNpZ25lZCB0cmFuc2FjdGlvbiB1c2luZyBPVkNcbiAgICB1bnNpZ25lZFJlY292ZXJ5VHJhbnNhY3Rpb24uY29pbi5zaG91bGQuZXF1YWwoJ3Rlb3MnKTtcbiAgICB1bnNpZ25lZFJlY292ZXJ5VHJhbnNhY3Rpb24udHhIZXguc2hvdWxkLmVxdWFsKFxuICAgICAgJzJhMDJhMDA1M2U1YThjZjczYTU2YmEwZmRhMTFlNGQ5MmUwMjM4YTRhMmFhNzRmY2NmNDZkNWE5MTA3NDY4NDA4Y2RjZGI2MGYwM2NmNGE5ZTUzYzAwMDAwMDAwMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxMzAwOGM1NzA5ODA0NzE3MDAwMDAwMDAwYThlZDMyMzIyMTMwMDhjNTcwOTgwNDcxNzA4MDYzMjFhMjI1MzgwMjg2NTBjMzAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcbiAgICApO1xuXG4gICAgLy8gZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgcm9vdCBhZGRyZXNzIGNhbiBpbmNsdWRlIG1lbW9JZFxuICAgIGNvbnN0IHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbjIgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgIHVzZXJLZXksXG4gICAgICBiYWNrdXBLZXksXG4gICAgICBiaXRnb0tleTogJ2tleScsXG4gICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBgJHtkZXN0aW5hdGlvbkFkZHJlc3N9P21lbW9JZD0wYCxcbiAgICAgIHJvb3RBZGRyZXNzOiBgJHtyb290QWRkcmVzc30/bWVtb0lkPTBgLFxuICAgIH0pO1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbjIucmVjb3ZlcnlBbW91bnQuc2hvdWxkLmVxdWFsKCc1LjAwMDAnKTtcbiAgICB1bnNpZ25lZFJlY292ZXJ5VHJhbnNhY3Rpb24yLnRyYW5zYWN0aW9uLnNpZ25hdHVyZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcblxuICAgIC8vIGNvaW4gYW5kIHR4SGV4IGZpZWxkcyBhcmUgZXhwZWN0ZWQgZHVyaW5nIHJlY292ZXJ5IG9mIHVuc2lnbmVkIHRyYW5zYWN0aW9uIHVzaW5nIE9WQ1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbi5jb2luLnNob3VsZC5lcXVhbCgndGVvcycpO1xuICAgIHVuc2lnbmVkUmVjb3ZlcnlUcmFuc2FjdGlvbi50eEhleC5zaG91bGQuZXF1YWwoXG4gICAgICAnMmEwMmEwMDUzZTVhOGNmNzNhNTZiYTBmZGExMWU0ZDkyZTAyMzhhNGEyYWE3NGZjY2Y0NmQ1YTkxMDc0Njg0MDhjZGNkYjYwZjAzY2Y0YTllNTNjMDAwMDAwMDAwMTAwYTY4MjM0MDNlYTMwNTUwMDAwMDA1NzJkM2NjZGNkMDEzMDA4YzU3MDk4MDQ3MTcwMDAwMDAwMDBhOGVkMzIzMjIxMzAwOGM1NzA5ODA0NzE3MDgwNjMyMWEyMjUzODAyODY1MGMzMDAwMDAwMDAwMDAwMDQ0NTRmNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuICAgICk7XG5cbiAgICBzYW5kQm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvck5vSW5wdXRUb1JlY292ZXIgd2hlbiB0aGUgYWNjb3VudCBoYXMgbm8gbGlxdWlkIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdXNlcktleSA9XG4gICAgICAneHB1YjY2MU15TXdBcVJiY0gxb1VBRHhhdEx1S2tWamFEQjJ6VE5Kb1pRc0dWUUV2b29ncGJYSncyNFFNb2tOd0ZLajlRaGNpNktXYUNjUUtyenBMNExDUVhYWDNZcFRReGdEOUtMQmpoRHJVV280JztcbiAgICBjb25zdCBiYWNrdXBLZXkgPVxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNIMW42c2dZMjlHN2RBeEw3dHdTOHJ0MWp5dXVRYjFrZm5BN3MzRkpQR29WcWI5SmVuWGtlSm1DNGpaOGlWc2NuM0FINk1rWUFWYzYxRlRZQ0hweHY1Y3hXYXI1SnczQyc7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3MgPSAnaTFza2RhM2tzbzQzJztcbiAgICBjb25zdCBkZXN0aW5hdGlvbkFkZHJlc3MgPSAna3MxM2tkaDI0NWxzJztcblxuICAgIC8vIGNsb25lIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGFuZCBkcm9wIG9ubHkgY29yZV9saXF1aWRfYmFsYW5jZTogdGhlIHJlY292ZXJ5IGtleXNcbiAgICAvLyBzdGlsbCBtYXRjaCB0aGUgYWNjb3VudCdzIGFjdGl2ZSBwZXJtaXNzaW9ucywgc28gdGhlIGtleSBjaGVjayBwYXNzZXMgYW5kIHRoZVxuICAgIC8vIGJhbGFuY2UgY2hlY2sgKHdoaWNoIHJ1bnMgYWZ0ZXIgdGhlIGtleSBjaGVjaykgdGhyb3dzXG4gICAgY29uc3Qgbm9CYWxhbmNlQWNjb3VudFJlc3BvbnNlID0gXy5jbG9uZURlZXAoRW9zUmVzcG9uc2VzLmdldEFjY291bnRSZXNwb25zZVN1Y2Nlc3MxKTtcbiAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KG5vQmFsYW5jZUFjY291bnRSZXNwb25zZS5ib2R5LCAnY29yZV9saXF1aWRfYmFsYW5jZScpO1xuXG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihFb3MucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBhbnkpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICAgIHBheWxvYWQ6IHsgYWNjb3VudF9uYW1lOiByb290QWRkcmVzcyB9LFxuICAgICAgfSlcbiAgICAgIC5yZXNvbHZlcyhub0JhbGFuY2VBY2NvdW50UmVzcG9uc2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHtcbiAgICAgICAgICB1c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgICBiaXRnb0tleTogJ2tleScsXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogZGVzdGluYXRpb25BZGRyZXNzLFxuICAgICAgICAgIHJvb3RBZGRyZXNzLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChFcnJvck5vSW5wdXRUb1JlY292ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzYW5kQm94LnJlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdGhyb3cgUmVjb3ZlcnlQcm92aWRlckVycm9yIHdoZW4gdGhlIG5vZGUgcmV0dXJucyBhIG5vbi0yMDAgcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdXNlcktleSA9XG4gICAgICAneHB1YjY2MU15TXdBcVJiY0gxb1VBRHhhdEx1S2tWamFEQjJ6VE5Kb1pRc0dWUUV2b29ncGJYSncyNFFNb2tOd0ZLajlRaGNpNktXYUNjUUtyenBMNExDUVhYWDNZcFRReGdEOUtMQmpoRHJVV280JztcbiAgICBjb25zdCBiYWNrdXBLZXkgPVxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNIMW42c2dZMjlHN2RBeEw3dHdTOHJ0MWp5dXVRYjFrZm5BN3MzRkpQR29WcWI5SmVuWGtlSm1DNGpaOGlWc2NuM0FINk1rWUFWYzYxRlRZQ0hweHY1Y3hXYXI1SnczQyc7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3MgPSAnaTFza2RhM2tzbzQzJztcbiAgICBjb25zdCBkZXN0aW5hdGlvbkFkZHJlc3MgPSAna3MxM2tkaDI0NWxzJztcblxuICAgIGNvbnN0IHNhbmRCb3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgY29uc3QgY2FsbEJhY2sgPSBzYW5kQm94LnN0dWIoRW9zLnByb3RvdHlwZSwgJ2dldERhdGFGcm9tTm9kZScgYXMgYW55KTtcbiAgICBjYWxsQmFja1xuICAgICAgLndpdGhBcmdzKHtcbiAgICAgICAgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2FjY291bnQnLFxuICAgICAgICBwYXlsb2FkOiB7IGFjY291bnRfbmFtZTogcm9vdEFkZHJlc3MgfSxcbiAgICAgIH0pXG4gICAgICAucmVzb2x2ZXMoeyBzdGF0dXM6IDUwMCwgYm9keToge30gfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXIoe1xuICAgICAgICAgIHVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5LFxuICAgICAgICAgIGJpdGdvS2V5OiAna2V5JyxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgICAgcm9vdEFkZHJlc3MsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFJlY292ZXJ5UHJvdmlkZXJFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBSZWNvdmVyeUtleU1pc21hdGNoRXJyb3Igd2hlbiB0aGUgdXNlciBzaWduZXIga2V5IGlzIG1pc3NpbmcgZnJvbSBhY3RpdmUgcGVybWlzc2lvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdXNlcktleSA9XG4gICAgICAneHB1YjY2MU15TXdBcVJiY0gxb1VBRHhhdEx1S2tWamFEQjJ6VE5Kb1pRc0dWUUV2b29ncGJYSncyNFFNb2tOd0ZLajlRaGNpNktXYUNjUUtyenBMNExDUVhYWDNZcFRReGdEOUtMQmpoRHJVV280JztcbiAgICBjb25zdCBiYWNrdXBLZXkgPVxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNIMW42c2dZMjlHN2RBeEw3dHdTOHJ0MWp5dXVRYjFrZm5BN3MzRkpQR29WcWI5SmVuWGtlSm1DNGpaOGlWc2NuM0FINk1rWUFWYzYxRlRZQ0hweHY1Y3hXYXI1SnczQyc7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3MgPSAnaTFza2RhM2tzbzQzJztcbiAgICBjb25zdCBkZXN0aW5hdGlvbkFkZHJlc3MgPSAna3MxM2tkaDI0NWxzJztcblxuICAgIC8vIGNsb25lIHRoZSBzdWNjZXNzIHJlc3BvbnNlOiByZXBsYWNlIHRoZSB1c2VyIHNpZ25lciBrZXkgd2l0aCBhIGZvcmVpZ24ga2V5XG4gICAgLy8gYW5kIGRyb3AgY29yZV9saXF1aWRfYmFsYW5jZSwgcHJvdmluZyB0aGUga2V5IGNoZWNrIHJ1bnMgYmVmb3JlIHRoZSBiYWxhbmNlIGNoZWNrXG4gICAgY29uc3QgbWlzbWF0Y2hlZEFjY291bnRSZXNwb25zZSA9IF8uY2xvbmVEZWVwKEVvc1Jlc3BvbnNlcy5nZXRBY2NvdW50UmVzcG9uc2VTdWNjZXNzMSk7XG4gICAgbWlzbWF0Y2hlZEFjY291bnRSZXNwb25zZS5ib2R5LnBlcm1pc3Npb25zWzBdLnJlcXVpcmVkX2F1dGgua2V5c1sxXSA9IHtcbiAgICAgIGtleTogJ0VPUzZNUnlBalFxOHVkN2hWTlljZm5WUEpxY1Zwc2NONVNvOEJodEZHcFJGazJLc0Z6V3dkJyxcbiAgICAgIHdlaWdodDogMSxcbiAgICB9O1xuICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkobWlzbWF0Y2hlZEFjY291bnRSZXNwb25zZS5ib2R5LCAnY29yZV9saXF1aWRfYmFsYW5jZScpO1xuXG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihFb3MucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBhbnkpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICAgIHBheWxvYWQ6IHsgYWNjb3VudF9uYW1lOiByb290QWRkcmVzcyB9LFxuICAgICAgfSlcbiAgICAgIC5yZXNvbHZlcyhtaXNtYXRjaGVkQWNjb3VudFJlc3BvbnNlKTtcblxuICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6ICdrZXknLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIHJvb3RBZGRyZXNzLFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFJlY292ZXJ5S2V5TWlzbWF0Y2hFcnJvciwgeyBjb2RlOiAncmVjb3Zlcnlfa2V5X21pc21hdGNoJyB9KTtcblxuICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IFJlY292ZXJ5S2V5TWlzbWF0Y2hFcnJvciB3aGVuIHRoZSBiYWNrdXAgc2lnbmVyIGtleSBpcyBtaXNzaW5nIGZyb20gYWN0aXZlIHBlcm1pc3Npb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHVzZXJLZXkgPVxuICAgICAgJ3hwdWI2NjFNeU13QXFSYmNIMW9VQUR4YXRMdUtrVmphREIyelROSm9aUXNHVlFFdm9vZ3BiWEp3MjRRTW9rTndGS2o5UWhjaTZLV2FDY1FLcnpwTDRMQ1FYWFgzWXBUUXhnRDlLTEJqaERyVVdvNCc7XG4gICAgY29uc3QgYmFja3VwS2V5ID1cbiAgICAgICd4cHViNjYxTXlNd0FxUmJjSDFuNnNnWTI5RzdkQXhMN3R3UzhydDFqeXV1UWIxa2ZuQTdzM0ZKUEdvVnFiOUplblhrZUptQzRqWjhpVnNjbjNBSDZNa1lBVmM2MUZUWUNIcHh2NWN4V2FyNUp3M0MnO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gJ2kxc2tkYTNrc280Myc7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gJ2tzMTNrZGgyNDVscyc7XG5cbiAgICAvLyBjbG9uZSB0aGUgc3VjY2VzcyByZXNwb25zZTogcmVwbGFjZSB0aGUgYmFja3VwIHNpZ25lciBrZXkgd2l0aCBhIGZvcmVpZ24ga2V5XG4gICAgLy8gYW5kIGRyb3AgY29yZV9saXF1aWRfYmFsYW5jZSwgcHJvdmluZyB0aGUga2V5IGNoZWNrIHJ1bnMgYmVmb3JlIHRoZSBiYWxhbmNlIGNoZWNrXG4gICAgY29uc3QgbWlzbWF0Y2hlZEFjY291bnRSZXNwb25zZSA9IF8uY2xvbmVEZWVwKEVvc1Jlc3BvbnNlcy5nZXRBY2NvdW50UmVzcG9uc2VTdWNjZXNzMSk7XG4gICAgbWlzbWF0Y2hlZEFjY291bnRSZXNwb25zZS5ib2R5LnBlcm1pc3Npb25zWzBdLnJlcXVpcmVkX2F1dGgua2V5c1syXSA9IHtcbiAgICAgIGtleTogJ0VPUzZNUnlBalFxOHVkN2hWTlljZm5WUEpxY1Zwc2NONVNvOEJodEZHcFJGazJLc0Z6V3dkJyxcbiAgICAgIHdlaWdodDogMSxcbiAgICB9O1xuICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkobWlzbWF0Y2hlZEFjY291bnRSZXNwb25zZS5ib2R5LCAnY29yZV9saXF1aWRfYmFsYW5jZScpO1xuXG4gICAgY29uc3Qgc2FuZEJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgICBjb25zdCBjYWxsQmFjayA9IHNhbmRCb3guc3R1YihFb3MucHJvdG90eXBlLCAnZ2V0RGF0YUZyb21Ob2RlJyBhcyBhbnkpO1xuICAgIGNhbGxCYWNrXG4gICAgICAud2l0aEFyZ3Moe1xuICAgICAgICBlbmRwb2ludDogJy92MS9jaGFpbi9nZXRfYWNjb3VudCcsXG4gICAgICAgIHBheWxvYWQ6IHsgYWNjb3VudF9uYW1lOiByb290QWRkcmVzcyB9LFxuICAgICAgfSlcbiAgICAgIC5yZXNvbHZlcyhtaXNtYXRjaGVkQWNjb3VudFJlc3BvbnNlKTtcblxuICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAucmVjb3Zlcih7XG4gICAgICAgIHVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6ICdrZXknLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgIHJvb3RBZGRyZXNzLFxuICAgICAgfSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFJlY292ZXJ5S2V5TWlzbWF0Y2hFcnJvciwgeyBjb2RlOiAncmVjb3Zlcnlfa2V5X21pc21hdGNoJyB9KTtcblxuICAgIHNhbmRCb3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb25zOicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0ZXN0RXhwbGFpblRyYW5zYWN0aW9uID0gKGlucHV0LCBleHBlY3RlZE91dHB1dCkgPT5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZXhwbGFpbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oaW5wdXQpO1xuICAgICAgICBzaG91bGQuZXhpc3QoZXhwbGFpbmVkVHJhbnNhY3Rpb24pO1xuICAgICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICAgIH07XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIHNpZ25hdHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZURhdGEgPSAnYWJjZCc7XG4gICAgICBjb25zdCB0eCA9IHtcbiAgICAgICAgdHhIZXg6IHNpZ25hdHVyZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICByZWZfYmxvY2tfbnVtOiAxLFxuICAgICAgICAgIHJlZl9ibG9ja19wcmVmaXg6ICdhc2QnLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2FjdGlvbjoge1xuICAgICAgICAgIHNpZ25hdHVyZXM6IFtdLFxuICAgICAgICAgIHBhY2tlZF90cng6IHNpZ25hdHVyZURhdGEsXG4gICAgICAgICAgY29tcHJlc3Npb246ICdub25lJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVjaXBpZW50czogW3t9XSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnYzNiMDljMjQ3MzFiZTI4NTFiNjI0ZDlkNWIzZjYwZmExMjk2OTVjMjQwNzE3NjhkMTU2NTRiZWEyMDdiN2JiNicsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG5cbiAgICAgIGNvbnN0IHsgaGFsZlNpZ25lZCB9ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogdHgsIHBydjoga2V5UGFpci5wcnYgfSk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBoYWxmU2lnbmVkLnRyYW5zYWN0aW9uLnNpZ25hdHVyZXNbMF07XG4gICAgICBjb25zdCBoZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KGtleVBhaXIucHViKTtcbiAgICAgIGNvbnN0IGVvc1B1YmtleSA9IGVjYy5QdWJsaWNLZXkuZnJvbUJ1ZmZlcihoZE5vZGUucHVibGljS2V5KS50b1N0cmluZygpO1xuICAgICAgZWNjLnZlcmlmeShzaWduYXR1cmUsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZURhdGEsICdoZXgnKSwgZW9zUHVia2V5KS5zaG91bGQuZXFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGFuIEVPUyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGV4cGxhaW5UcmFuc2FjdGlvblBhcmFtcyA9IHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIHJlZl9ibG9ja19wcmVmaXg6IDEwMCxcbiAgICAgICAgICByZWZfYmxvY2tfbnVtOiA5OTUsXG4gICAgICAgICAgZXhwaXJhdGlvbjogJzIwMTgtMDQtMjdUMTg6NDA6MzQuMDAwWicsXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgcGFja2VkX3RyeDpcbiAgICAgICAgICAgICdhMjZlZTM1YWUzMDM2NDAwMDAwMDAwMDAwMDAwMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxOTAxM2U0OGM4Y2U1ZWVkNDAwMDAwMDAwYThlZDMyMzIyMjkwMTNlNDhjOGNlNWVlZDRiMDEyMzYyYjYxYjMxMjM2NjQwMDAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwMTMxMDAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZXhwbGFpbmVkVHggPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oZXhwbGFpblRyYW5zYWN0aW9uUGFyYW1zKTtcbiAgICAgIGV4cGxhaW5lZFR4Lm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzEwMCcpO1xuICAgICAgZXhwbGFpbmVkVHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgZXhwbGFpbmVkVHgub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcxMDAnKTtcbiAgICAgIGV4cGxhaW5lZFR4Lm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoJ2FzZGZhc2RmYXNkZicpO1xuICAgICAgZXhwbGFpbmVkVHguaWQuc2hvdWxkLmVxdWFsKCc2MTMyZjNiZjRhNzQ2ZTZlY2FkOGEzMWRmNjdkNzFiNDc0MWZjNWI3Yzg2OGFlMzZkZGUxODMwOWE5MWRmOGE2Jyk7XG4gICAgICBleHBsYWluZWRUeC5tZW1vLnNob3VsZC5lcXVhbCgnMScpO1xuICAgIH0pO1xuICAgIGl0KFxuICAgICAgJ2V4cGxhaW5zIEVPUyBuYXRpdmUgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLFxuICAgICAgdGVzdEV4cGxhaW5UcmFuc2FjdGlvbihFb3NJbnB1dHMuZXhwbGFpblRyYW5zYWN0aW9uSW5wdXROYXRpdmUsIEVvc1Jlc3BvbnNlcy5leHBsYWluVHJhbnNhY3Rpb25PdXRwdXROYXRpdmUpXG4gICAgKTtcbiAgICBpdChcbiAgICAgICdleHBsYWlucyBDSEVYIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uJyxcbiAgICAgIHRlc3RFeHBsYWluVHJhbnNhY3Rpb24oRW9zSW5wdXRzLmV4cGxhaW5UcmFuc2FjdGlvbklucHV0Q2hleCwgRW9zUmVzcG9uc2VzLmV4cGxhaW5UcmFuc2FjdGlvbk91dHB1dENoZXgpXG4gICAgKTtcbiAgICBpdChcbiAgICAgICdleHBsYWluIEVPUyBVbnN0YWtlMSB0cmFuc2FjdGlvbicsXG4gICAgICB0ZXN0RXhwbGFpblRyYW5zYWN0aW9uKEVvc0lucHV0cy5leHBsYWluVW5zdGFrZUlucHV0MSwgRW9zUmVzcG9uc2VzLmV4cGxhaW5VbnN0YWtlT3V0cHV0MSlcbiAgICApO1xuICAgIGl0KFxuICAgICAgJ2V4cGxhaW4gRU9TIFVuc3Rha2UyIHRyYW5zYWN0aW9uJyxcbiAgICAgIHRlc3RFeHBsYWluVHJhbnNhY3Rpb24oRW9zSW5wdXRzLmV4cGxhaW5VbnN0YWtlSW5wdXQyLCBFb3NSZXNwb25zZXMuZXhwbGFpblVuc3Rha2VPdXRwdXQyKVxuICAgICk7XG4gICAgaXQoXG4gICAgICAnZXhwbGFpbiBFT1MgUmVmdW5kIHRyYW5zYWN0aW9uJyxcbiAgICAgIHRlc3RFeHBsYWluVHJhbnNhY3Rpb24oRW9zSW5wdXRzLmV4cGxhaW5SZWZ1bmRJbnB1dCwgRW9zUmVzcG9uc2VzLmV4cGxhaW5SZWZ1bmRPdXRwdXQpXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgd2FsbGV0O1xuICAgIGxldCBiYXNlY29pbjtcbiAgICBsZXQgdmVyaWZpY2F0aW9uO1xuICAgIGxldCBzYW5kQm94O1xuICAgIGxldCBuZXdUeFByZWJ1aWxkO1xuICAgIGxldCBuZXdUeFBhcmFtcztcblxuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3Rlb3MnKTtcbiAgICAgIGNvbnN0IHdhbGxldERhdGEgPSB7XG4gICAgICAgIGlkOiAnNWE3OGRkNTYxYzYyNThhOTA3ZjFlZWFlZTEzMmY3OTYnLFxuICAgICAgICB1c2VyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVzZXI6ICc1NDNjMTFlZDM1NmQwMGNiNzYwMDAwMGI5ODc5NDUwMycsXG4gICAgICAgICAgICBwZXJtaXNzaW9uczogWydhZG1pbicsICd2aWV3JywgJ3NwZW5kJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY29pbjogJ3Rlb3MnLFxuICAgICAgICBsYWJlbDogJ1ZlcmlmaWNhdGlvbiBXYWxsZXQnLFxuICAgICAgICBtOiAyLFxuICAgICAgICBuOiAzLFxuICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgJzVhNzhkZDU2YmZlNDI0YWEwN2FhMDY4NjUxYjE5NGZkJyxcbiAgICAgICAgICAnNWE3OGRkNTY3NGE3MGViNDA3OWY1ODc5N2RmZTJmNWUnLFxuICAgICAgICAgICc1YTc4ZGQ1NjFjNjI1OGE5MDdmMWVlYTlmMWQwNzllMicsXG4gICAgICAgIF0sXG4gICAgICAgIHRhZ3M6IFsnNWE3OGRkNTYxYzYyNThhOTA3ZjFlZWFlZTEzMmY3OTYnXSxcbiAgICAgICAgZGlzYWJsZVRyYW5zYWN0aW9uTm90aWZpY2F0aW9uczogZmFsc2UsXG4gICAgICAgIGZyZWV6ZToge30sXG4gICAgICAgIGRlbGV0ZWQ6IGZhbHNlLFxuICAgICAgICBhcHByb3ZhbHNSZXF1aXJlZDogMSxcbiAgICAgICAgaXNDb2xkOiB0cnVlLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHt9LFxuICAgICAgICBjbGllbnRGbGFnczogW10sXG4gICAgICAgIGJhbGFuY2U6IDY1MDAwMDAwMCxcbiAgICAgICAgY29uZmlybWVkQmFsYW5jZTogNjUwMDAwMDAwLFxuICAgICAgICBzcGVuZGFibGVCYWxhbmNlOiA2NTAwMDAwMDAsXG4gICAgICAgIGJhbGFuY2VTdHJpbmc6ICc2NTAwMDAwMDAnLFxuICAgICAgICBjb25maXJtZWRCYWxhbmNlU3RyaW5nOiAnNjUwMDAwMDAwJyxcbiAgICAgICAgc3BlbmRhYmxlQmFsYW5jZVN0cmluZzogJzY1MDAwMDAwMCcsXG4gICAgICAgIHJlY2VpdmVBZGRyZXNzOiB7XG4gICAgICAgICAgaWQ6ICc1YTc4ZGUyYmJmZTQyNGFhMDdhYTEzMWVjMDNjOGRjMScsXG4gICAgICAgICAgYWRkcmVzczogJzc4eGN6aGFpanloZWsyJyxcbiAgICAgICAgICBjaGFpbjogMCxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBjb2luOiAndGVvcycsXG4gICAgICAgICAgd2FsbGV0OiAnNWE3OGRkNTYxYzYyNThhOTA3ZjFlZWFlZTEzMmY3OTYnLFxuICAgICAgICAgIGNvaW5TcGVjaWZpYzoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHBlbmRpbmdBcHByb3ZhbHM6IFtdLFxuICAgICAgfTtcbiAgICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhKTtcbiAgICAgIGNvbnN0IHVzZXJLZXljaGFpbiA9IHtcbiAgICAgICAgcHJ2OiAnNUtKcTU2NUhUcmdFSkc5RWJ2Skg1QkxZVGdpb0F5WTI3ZFQ5YW0xa0N0bjJZVkFKRVlLJyxcbiAgICAgICAgcHViOiAnRU9TNmc3QUFNUWtoWHA4ajczRThCRDRLUnd0UWV2RXNGZ1l4OGh0YVFrUlZoaFhKTWdrTVonLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluID0ge1xuICAgICAgICBwcnY6ICc1S1oxblhYQ2k1eVhIOEFqQ0pxam5DWUhDVm5oUWE5WVdHVjJEMTRpOGcyMjFkeE53TFcnLFxuICAgICAgICBwdWI6ICdFT1M3Z3lETE5rMTJmYVZiMWFxTnhqMUwyRHBCZXJGa2hBc3hCczk1eVczeXhKcHF2ZzlNdCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdsaW9udGVzdGUyMTInLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGV4cGlyYXRpb246ICcyMDIxLTEwLTI4VDAyOjM0OjA1Ljg0OCcsXG4gICAgICAgICAgcmVmX2Jsb2NrX251bTogNDI5MTUsXG4gICAgICAgICAgcmVmX2Jsb2NrX3ByZWZpeDogMTIwNDA4NjcwOSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhIZXg6XG4gICAgICAgICAgJzJhMDJhMDA1M2U1YThjZjczYTU2YmEwZmRhMTFlNGQ5MmUwMjM4YTRhMmFhNzRmY2NmNDZkNWE5MTA3NDY4NDAxZTBjN2E2MWEzYTdiNWU3YzQ0NzAwMDAwMDAxMDA0MDhjN2EwMmVhMzA1NTAwMDAwMDAwMDA4NTI2OWQwMDAzMDIzMzMzMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxMjBjZWI4NDM3MzMzNDI3YzAwMDAwMDAwYThlZDMyMzIyMjIwY2ViODQzNzMzMzQyN2MyMDgyNTAxOWFiM2NhOThiZTgwMzAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwMTMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgdHJhbnNhY3Rpb246IHtcbiAgICAgICAgICBjb21wcmVzc2lvbjogJ25vbmUnLFxuICAgICAgICAgIHBhY2tlZF90cng6XG4gICAgICAgICAgICAnMWUwYzdhNjFhM2E3YjVlN2M0NDcwMDAwMDAwMTAwNDA4YzdhMDJlYTMwNTUwMDAwMDAwMDAwODUyNjlkMDAwMzAyMzMzMzAxMDBhNjgyMzQwM2VhMzA1NTAwMDAwMDU3MmQzY2NkY2QwMTIwY2ViODQzNzMzMzQyN2MwMDAwMDAwMGE4ZWQzMjMyMjIyMGNlYjg0MzczMzM0MjdjMjA4MjUwMTlhYjNjYTk4YmU4MDMwMDAwMDAwMDAwMDAwNDQ1NGY1MzAwMDAwMDAwMDEzMTAwJyxcbiAgICAgICAgICBzaWduYXR1cmVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhpZDogJzU4NmM1YjU5YjEwYjEzNGQwNGMxNmFjMWIyNzNmZTNjNTUyOWYzNGFlZjc1ZGI0NDU2Y2Q0NjljNWNkYWM3ZTInLFxuICAgICAgICBpc1ZvdGluZ1RyYW5zYWN0aW9uOiBmYWxzZSxcbiAgICAgICAgY29pbjogJ3Rlb3MnLFxuICAgICAgfTtcbiAgICAgIHZlcmlmaWNhdGlvbiA9IHtcbiAgICAgICAgZGlzYWJsZU5ldHdvcmtpbmc6IHRydWUsXG4gICAgICAgIGtleWNoYWluczoge1xuICAgICAgICAgIHVzZXI6IHsgcHViOiB1c2VyS2V5Y2hhaW4ucHViIH0sXG4gICAgICAgICAgYmFja3VwOiB7IHB1YjogYmFja3VwS2V5Y2hhaW4ucHViIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKCdjM2IwOWMyNDczMWJlMjg1MWI2MjRkOWQ1YjNmNjBmYTEyOTY5NWMyNDA3MTc2OGQxNTY1NGJlYTIwN2I3YmI2JywgJ2hleCcpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICBwcnY6IGtleVBhaXIucHJ2LFxuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJ2xpb250ZXN0ZTIxMj9tZW1vSWQ9MScsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgbmV3VHhQcmVidWlsZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UHJlYnVpbGQpO1xuICAgICAgfTtcbiAgICAgIG5ld1R4UGFyYW1zID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQYXJhbXMpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gbW9jayByZXNwb25zZXMgdG8gdGhlIGJsb2NrIGNoYWluXG4gICAgICBzYW5kQm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgICAgY29uc3QgY2FsbEJhY2sgPSBzYW5kQm94LnN0dWIoRW9zLnByb3RvdHlwZSwgJ2dldERhdGFGcm9tTm9kZScgYXMgYW55KTtcbiAgICAgIGNhbGxCYWNrXG4gICAgICAgIC53aXRoQXJncyh7XG4gICAgICAgICAgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2luZm8nLFxuICAgICAgICB9KVxuICAgICAgICAucmVzb2x2ZXMoRW9zUmVzcG9uc2VzLmdldEluZm9SZXNwb25zZVN1Y2Nlc3MxKTtcbiAgICAgIGNhbGxCYWNrXG4gICAgICAgIC53aXRoQXJncyh7XG4gICAgICAgICAgZW5kcG9pbnQ6ICcvdjEvY2hhaW4vZ2V0X2Jsb2NrJyxcbiAgICAgICAgICBwYXlsb2FkOiB7IGJsb2NrX251bV9vcl9pZDogMTkxODM5NDcyIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXNvbHZlcyhFb3NSZXNwb25zZXMuZ2V0QmxvY2tSZXNwb25zZVN1Y2Nlc3MxKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICBzYW5kQm94LnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdmFsaWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pO1xuICAgICAgdmFsaWRUcmFuc2FjdGlvbi5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgYSBtZW1vSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuXG4gICAgICAvLyB0eFBhcmFtcyB3aXRoIGRpZmZlcmVudCB0eFByZWJ1aWxkXG4gICAgICBjb25zdCB0eFByZWJ1aWxkMiA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UHJlYnVpbGQyLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdsaW9udGVzdGUyMTInO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMudHhQcmVidWlsZCA9IHR4UHJlYnVpbGQyO1xuXG4gICAgICBjb25zdCB2YWxpZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICB2YWxpZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgZGlmZmVyZW50IHByZWJ1aWxkcyBhcmUgcHJvdmlkZWQgaW4gdHhQYXJhbXMgYW5kIHR4UHJlYnVpbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuXG4gICAgICAvLyB0eFBhcmFtcyB3aXRoIGRpZmZlcmVudCB0eFByZWJ1aWxkXG4gICAgICBjb25zdCB0eFByZWJ1aWxkMiA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UHJlYnVpbGQyLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdzYWRqZ2hhc2xzZGdvJztcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnR4UHJlYnVpbGQgPSB0eFByZWJ1aWxkMjtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdpbnB1dHMgdHhQYXJhbXMudHhQcmVidWlsZCBhbmQgdHhQcmVidWlsZCBleHBlY3RlZCB0byBiZSBlcXVhbCBidXQgd2VyZSBub3QnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgdW5wYWNrZWQgdHhIZXggaXMgbm90IHRoZSBzYW1lIGFzIHRoZSB1bnBhY2tlZCBwYWNrZWRfdHJ4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPVxuICAgICAgICAnZTcwYWFhYjg5OTdlMWRmY2U1OGZiZmFjODBjYmJiOGZlY2VjN2I5OWNmOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTY0MDAwMDAwMDAwMDAwMDEwMDQwOGM3YTAyZWEzMDU1MDAwMDAwMDAwMDg1MjY5ZDAwMDIwMTMxMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxZDBmOWNlNjRmNDM3ZjdjZjAwMDAwMDAwYThlZDMyMzIyMmQwZjljZTY0ZjQzN2Y3Y2ZiMDEyMzYyYjYxYjMxMjM2NjQwMDAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwMTMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnR4UHJlYnVpbGQgPSB0eFByZWJ1aWxkO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd1bnBhY2tlZCBwYWNrZWRfdHJ4IGFuZCB1bnBhY2tlZCB0eEhleCBhcmUgbm90IGVxdWFsJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHRoZSBleHBlY3RlZCBhbW91bnQgaXMgZGlmZmVyZW50IHRoYW4gYWN0dWFsIGFtb3VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzWzBdLmFtb3VudCA9IDEwMDAwO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCd0eEhleCByZWNlaXZlIGFtb3VudCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCByZWNpcGllbnQgYW1vdW50Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHRoZSBleHBlY3RlZCByZWNpcGllbnQgaXMgZGlmZmVyZW50IHRoYW4gYWN0dWFsIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzWzBdLmFkZHJlc3MgPSAnYWFhYWFhYWFhYWFhJztcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHhIZXggcmVjZWl2ZSBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHJlY2lwaWVudCBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGlmIHRoZSBleHBlY3RlZCBtZW1vIGlzIGRpZmZlcmVudCB0aGFuIGFjdHVhbCBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdsaW9udGVzdGUyMTI/bWVtb0lkPTEwJztcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHhIZXggcmVjZWl2ZSBtZW1vSWQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50IG1lbW9JZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBtZW1vIGlkIGluIHBhcmFtcyBvbmx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcblxuICAgICAgdHhQcmVidWlsZC5oZWFkZXJzID0ge1xuICAgICAgICBleHBpcmF0aW9uOiAnMjAyMS0xMS0wOFQxNzoyNDo0Ny43OTInLFxuICAgICAgICByZWZfYmxvY2tfbnVtOiAxLFxuICAgICAgICByZWZfYmxvY2tfcHJlZml4OiAxMDAsXG4gICAgICB9O1xuICAgICAgLy8gaGFzIG1lbW9pZCBpbiB0aGUgdHhhY3Rpb24gd2l0aCB2YWx1ZSBvZiAnMSdcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPVxuICAgICAgICAnZTcwYWFhYjg5OTdlMWRmY2U1OGZiZmFjODBjYmJiOGZlY2VjN2I5OWNmOTgyYTk0NDQyNzNjYmM2NGM0MTQ3MzYwNWQ4OTYxMDEwMDY0MDAwMDAwMDAwMDAwMDEwMDQwOGM3YTAyZWEzMDU1MDAwMDAwMDAwMDg1MjY5ZDAwMDIwMTMwMDEwMGE2ODIzNDAzZWEzMDU1MDAwMDAwNTcyZDNjY2RjZDAxMDAxZGQ5ZjlhMDAwYTUzZDAwMDAwMDAwYThlZDMyMzIyMjAwMWRkOWY5YTAwMGE1M2QyMDgyNTAxOWFiM2NhOThiZTgwMzAwMDAwMDAwMDAwMDA0NDU0ZjUzMDAwMDAwMDAwMTMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbiAgICAgIHR4UHJlYnVpbGQudHJhbnNhY3Rpb24ucGFja2VkX3RyeCA9XG4gICAgICAgICc2MDVkODk2MTAxMDA2NDAwMDAwMDAwMDAwMDAxMDA0MDhjN2EwMmVhMzA1NTAwMDAwMDAwMDA4NTI2OWQwMDAyMDEzMDAxMDBhNjgyMzQwM2VhMzA1NTAwMDAwMDU3MmQzY2NkY2QwMTAwMWRkOWY5YTAwMGE1M2QwMDAwMDAwMGE4ZWQzMjMyMjIwMDFkZDlmOWEwMDBhNTNkMjA4MjUwMTlhYjNjYTk4YmU4MDMwMDAwMDAwMDAwMDAwNDQ1NGY1MzAwMDAwMDAwMDEzMTAwJztcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdsaW9udGVzdGUyMTInO1xuICAgICAgdHhQYXJhbXMudHhQcmVidWlsZCA9IHR4UHJlYnVpbGQ7XG5cbiAgICAgIGNvbnN0IHZhbGlkVHJhbnNhY3Rpb24gPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXQsIHZlcmlmaWNhdGlvbiB9KTtcbiAgICAgIHZhbGlkVHJhbnNhY3Rpb24uc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBhbHBoYSBudW1lcmljIG1lbW8gaWQgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcblxuICAgICAgdHhQcmVidWlsZC5oZWFkZXJzID0ge1xuICAgICAgICBleHBpcmF0aW9uOiAnMjAyMS0xMS0wOFQxNzo1NToxNy41MTgnLFxuICAgICAgICByZWZfYmxvY2tfbnVtOiAxLFxuICAgICAgICByZWZfYmxvY2tfcHJlZml4OiAxMDAsXG4gICAgICB9O1xuICAgICAgLy8gaGFzIG1lbW9pZCBpbiB0aGUgdHhhY3Rpb24gd2l0aCB2YWx1ZSBvZiAnUUc3M1dBWFhHJ1xuICAgICAgdHhQcmVidWlsZC50eEhleCA9XG4gICAgICAgICdlNzBhYWFiODk5N2UxZGZjZTU4ZmJmYWM4MGNiYmI4ZmVjZWM3Yjk5Y2Y5ODJhOTQ0NDI3M2NiYzY0YzQxNDczODY2NDg5NjEwMTAwNjQwMDAwMDAwMDAwMDAwMTAwNDA4YzdhMDJlYTMwNTUwMDAwMDAwMDAwODUyNjlkMDAwMjAxMzAwMTAwYTY4MjM0MDNlYTMwNTUwMDAwMDA1NzJkM2NjZGNkMDEzMDg1Yjk0M2IxYjU0ZWQ3MDAwMDAwMDBhOGVkMzIzMjJhMzA4NWI5NDNiMWI1NGVkNzIwODI1MDE5YWIzY2E5OGJlODAzMDAwMDAwMDAwMDAwMDQ0NTRmNTMwMDAwMDAwMDA5NTE0NzM3MzM1NzQxNTg1ODQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcbiAgICAgIHR4UHJlYnVpbGQudHJhbnNhY3Rpb24ucGFja2VkX3RyeCA9XG4gICAgICAgICc4NjY0ODk2MTAxMDA2NDAwMDAwMDAwMDAwMDAxMDA0MDhjN2EwMmVhMzA1NTAwMDAwMDAwMDA4NTI2OWQwMDAyMDEzMDAxMDBhNjgyMzQwM2VhMzA1NTAwMDAwMDU3MmQzY2NkY2QwMTMwODViOTQzYjFiNTRlZDcwMDAwMDAwMGE4ZWQzMjMyMmEzMDg1Yjk0M2IxYjU0ZWQ3MjA4MjUwMTlhYjNjYTk4YmU4MDMwMDAwMDAwMDAwMDAwNDQ1NGY1MzAwMDAwMDAwMDk1MTQ3MzczMzU3NDE1ODU4NDcwMCc7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzWzBdLmFkZHJlc3MgPSAnbGlvbnRlc3RlMjEyJztcbiAgICAgIHR4UGFyYW1zLnR4UHJlYnVpbGQgPSB0eFByZWJ1aWxkO1xuXG4gICAgICBjb25zdCB2YWxpZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gfSk7XG4gICAgICB2YWxpZFRyYW5zYWN0aW9uLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==