@bitgo-beta/sdk-coin-icp 1.0.1-beta.828 → 1.0.1-beta.829
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.
- package/dist/src/icp.d.ts +11 -3
- package/dist/src/icp.d.ts.map +1 -1
- package/dist/src/icp.js +35 -4
- package/dist/src/lib/iface.d.ts +5 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/utils.d.ts +2 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +14 -7
- package/dist/test/unit/icp.js +183 -11
- package/dist/test/unit/utils.js +10 -10
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
package/dist/test/unit/icp.js
CHANGED
|
@@ -107,19 +107,15 @@ describe('Internet computer', function () {
|
|
|
107
107
|
const accountID = await basecoin.getAddressFromPublicKey(hexEncodedPublicKey2);
|
|
108
108
|
accountID.should.deepEqual(validAccountID2);
|
|
109
109
|
});
|
|
110
|
-
it('should throw an error when invalid public key is provided',
|
|
111
|
-
|
|
112
|
-
.getAddressFromPublicKey(invalidPublicKey)
|
|
113
|
-
.should.be.rejectedWith(`Invalid hex-encoded public key format.`);
|
|
110
|
+
it('should throw an error when invalid public key is provided', function () {
|
|
111
|
+
(() => basecoin.getAddressFromPublicKey(invalidPublicKey)).should.throw('Invalid hex-encoded public key format.');
|
|
114
112
|
});
|
|
115
|
-
it('should return valid address from a valid hex encoded public key',
|
|
116
|
-
const accountID =
|
|
113
|
+
it('should return valid address from a valid hex encoded public key', function () {
|
|
114
|
+
const accountID = utils_1.default.getAddressFromPublicKey(hexEncodedPublicKey);
|
|
117
115
|
accountID.should.deepEqual(validAccountID);
|
|
118
116
|
});
|
|
119
|
-
it('should throw an error when invalid public key is provided',
|
|
120
|
-
|
|
121
|
-
.getAddressFromPublicKey(invalidPublicKey)
|
|
122
|
-
.should.be.rejectedWith(`Invalid hex-encoded public key format.`);
|
|
117
|
+
it('should throw an error when invalid public key is provided', function () {
|
|
118
|
+
(() => utils_1.default.getAddressFromPublicKey(invalidPublicKey)).should.throw('Invalid hex-encoded public key format.');
|
|
123
119
|
});
|
|
124
120
|
});
|
|
125
121
|
describe('Generate wallet key pair: ', () => {
|
|
@@ -242,5 +238,181 @@ describe('Internet computer', function () {
|
|
|
242
238
|
.should.rejectedWith('generated signableHex is not equal to params.signableHex');
|
|
243
239
|
});
|
|
244
240
|
});
|
|
241
|
+
describe('Address Verification', () => {
|
|
242
|
+
const addressVerificationData = {
|
|
243
|
+
commonKeychain: '036b38ca5e63e9800b5040af498eb6e9a9c77e244ac2858edafa4bd0926a635731c3fabde9007a5771e93621d9fcb1c879660208dc79cc609fe8ddd189f7a955ab',
|
|
244
|
+
rootAddress: 'fd3eaed3e2064bd30ab497e22e8ac5a0dcadd81fa5353879dbab64e259ec70c0',
|
|
245
|
+
};
|
|
246
|
+
describe('Wallet VersionKey 1', () => {
|
|
247
|
+
let keychains;
|
|
248
|
+
before(function () {
|
|
249
|
+
keychains = [
|
|
250
|
+
{ commonKeychain: addressVerificationData.commonKeychain },
|
|
251
|
+
{ commonKeychain: addressVerificationData.commonKeychain },
|
|
252
|
+
{ commonKeychain: addressVerificationData.commonKeychain },
|
|
253
|
+
];
|
|
254
|
+
});
|
|
255
|
+
it('should verify a valid memo-based address', async function () {
|
|
256
|
+
const rootAddress = addressVerificationData.rootAddress;
|
|
257
|
+
const addressWithMemo = `${rootAddress}?memoId=123`;
|
|
258
|
+
const params = {
|
|
259
|
+
address: addressWithMemo,
|
|
260
|
+
rootAddress: rootAddress,
|
|
261
|
+
walletVersion: 1,
|
|
262
|
+
keychains: keychains,
|
|
263
|
+
index: 0,
|
|
264
|
+
};
|
|
265
|
+
const result = await basecoin.isWalletAddress(params);
|
|
266
|
+
result.should.equal(true);
|
|
267
|
+
});
|
|
268
|
+
it('should verify address with memoId=0', async function () {
|
|
269
|
+
const rootAddress = addressVerificationData.rootAddress;
|
|
270
|
+
const addressWithMemo = `${rootAddress}?memoId=0`;
|
|
271
|
+
const params = {
|
|
272
|
+
address: addressWithMemo,
|
|
273
|
+
rootAddress: rootAddress,
|
|
274
|
+
walletVersion: 1,
|
|
275
|
+
keychains: keychains,
|
|
276
|
+
index: 0,
|
|
277
|
+
};
|
|
278
|
+
const result = await basecoin.isWalletAddress(params);
|
|
279
|
+
result.should.equal(true);
|
|
280
|
+
});
|
|
281
|
+
it('should fail when extracted root does not match provided rootAddress param', async function () {
|
|
282
|
+
const rootAddress = addressVerificationData.rootAddress;
|
|
283
|
+
const differentAddress = testData.Accounts.account2.address;
|
|
284
|
+
const addressWithMemo = `${differentAddress}?memoId=123`;
|
|
285
|
+
const params = {
|
|
286
|
+
address: addressWithMemo,
|
|
287
|
+
rootAddress: rootAddress,
|
|
288
|
+
walletVersion: 1,
|
|
289
|
+
keychains: keychains,
|
|
290
|
+
index: 0,
|
|
291
|
+
};
|
|
292
|
+
// The extracted root (differentAddress) doesn't match provided rootAddress
|
|
293
|
+
await basecoin
|
|
294
|
+
.isWalletAddress(params)
|
|
295
|
+
.should.be.rejectedWith(`address validation failure: expected ${rootAddress} but got ${differentAddress}`);
|
|
296
|
+
});
|
|
297
|
+
it('should throw error when rootAddress is missing for wallet version 1', async function () {
|
|
298
|
+
const address = `${addressVerificationData.rootAddress}?memoId=123`;
|
|
299
|
+
const params = {
|
|
300
|
+
address: address,
|
|
301
|
+
walletVersion: 1,
|
|
302
|
+
keychains: keychains,
|
|
303
|
+
index: 0,
|
|
304
|
+
};
|
|
305
|
+
await basecoin.isWalletAddress(params).should.be.rejectedWith('rootAddress is required for wallet version 1');
|
|
306
|
+
});
|
|
307
|
+
it('should throw error when memoId is missing for wallet version 1', async function () {
|
|
308
|
+
const rootAddress = addressVerificationData.rootAddress;
|
|
309
|
+
const params = {
|
|
310
|
+
address: rootAddress,
|
|
311
|
+
rootAddress: rootAddress,
|
|
312
|
+
walletVersion: 1,
|
|
313
|
+
keychains: keychains,
|
|
314
|
+
index: 0,
|
|
315
|
+
};
|
|
316
|
+
await basecoin
|
|
317
|
+
.isWalletAddress(params)
|
|
318
|
+
.should.be.rejectedWith('memoId is required for wallet version 1 addresses');
|
|
319
|
+
});
|
|
320
|
+
it('should handle large memoId values', async function () {
|
|
321
|
+
const rootAddress = addressVerificationData.rootAddress;
|
|
322
|
+
const largeMemoId = '9007199254740991';
|
|
323
|
+
const addressWithMemo = `${rootAddress}?memoId=${largeMemoId}`;
|
|
324
|
+
const params = {
|
|
325
|
+
address: addressWithMemo,
|
|
326
|
+
rootAddress: rootAddress,
|
|
327
|
+
walletVersion: 1,
|
|
328
|
+
keychains: keychains,
|
|
329
|
+
index: 0,
|
|
330
|
+
};
|
|
331
|
+
const result = await basecoin.isWalletAddress(params);
|
|
332
|
+
result.should.equal(true);
|
|
333
|
+
});
|
|
334
|
+
it('should fail when rootAddress does not match commonKeychain derivation', async function () {
|
|
335
|
+
// Use a rootAddress that doesn't match what's derived from commonKeychain
|
|
336
|
+
const invalidRootAddress = testData.Accounts.account1.address;
|
|
337
|
+
const addressWithMemo = `${invalidRootAddress}?memoId=123`;
|
|
338
|
+
const params = {
|
|
339
|
+
address: addressWithMemo,
|
|
340
|
+
rootAddress: invalidRootAddress,
|
|
341
|
+
walletVersion: 1,
|
|
342
|
+
keychains: keychains,
|
|
343
|
+
index: 0,
|
|
344
|
+
};
|
|
345
|
+
// rootAddress is cryptographically verified against commonKeychain
|
|
346
|
+
await basecoin
|
|
347
|
+
.isWalletAddress(params)
|
|
348
|
+
.should.be.rejectedWith(`address validation failure: address ${invalidRootAddress} is not a wallet address`);
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
describe('Wallet VersionKey 2+', () => {
|
|
352
|
+
let keychains;
|
|
353
|
+
before(function () {
|
|
354
|
+
keychains = [
|
|
355
|
+
{ commonKeychain: addressVerificationData.commonKeychain },
|
|
356
|
+
{ commonKeychain: addressVerificationData.commonKeychain },
|
|
357
|
+
{ commonKeychain: addressVerificationData.commonKeychain },
|
|
358
|
+
];
|
|
359
|
+
});
|
|
360
|
+
it('should verify a valid TSS root address (index 0)', async function () {
|
|
361
|
+
const params = {
|
|
362
|
+
address: addressVerificationData.rootAddress,
|
|
363
|
+
rootAddress: addressVerificationData.rootAddress,
|
|
364
|
+
keychains: keychains,
|
|
365
|
+
index: 0,
|
|
366
|
+
walletVersion: 2,
|
|
367
|
+
};
|
|
368
|
+
const result = await basecoin.isWalletAddress(params);
|
|
369
|
+
result.should.equal(true);
|
|
370
|
+
});
|
|
371
|
+
it('should throw error for invalid TSS address', async function () {
|
|
372
|
+
const invalidAddress = testData.Accounts.account2.address;
|
|
373
|
+
const params = {
|
|
374
|
+
address: invalidAddress,
|
|
375
|
+
keychains: keychains,
|
|
376
|
+
index: 0,
|
|
377
|
+
walletVersion: 2,
|
|
378
|
+
};
|
|
379
|
+
await basecoin
|
|
380
|
+
.isWalletAddress(params)
|
|
381
|
+
.should.be.rejectedWith(`address validation failure: address ${invalidAddress} is not a wallet address`);
|
|
382
|
+
});
|
|
383
|
+
it('should throw error when keychains is missing', async function () {
|
|
384
|
+
const params = {
|
|
385
|
+
address: addressVerificationData.rootAddress,
|
|
386
|
+
keychains: [],
|
|
387
|
+
index: 0,
|
|
388
|
+
walletVersion: 2,
|
|
389
|
+
};
|
|
390
|
+
await basecoin.isWalletAddress(params).should.be.rejectedWith('missing required param keychains');
|
|
391
|
+
});
|
|
392
|
+
it('should handle string index', async function () {
|
|
393
|
+
const params = {
|
|
394
|
+
address: addressVerificationData.rootAddress,
|
|
395
|
+
rootAddress: addressVerificationData.rootAddress,
|
|
396
|
+
keychains: keychains,
|
|
397
|
+
index: '0',
|
|
398
|
+
walletVersion: 2,
|
|
399
|
+
};
|
|
400
|
+
const result = await basecoin.isWalletAddress(params);
|
|
401
|
+
result.should.equal(true);
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
describe('Address validation', () => {
|
|
405
|
+
it('should throw error for invalid address format', async function () {
|
|
406
|
+
const invalidAddress = 'invalid-address';
|
|
407
|
+
const params = {
|
|
408
|
+
address: invalidAddress,
|
|
409
|
+
walletVersion: 2,
|
|
410
|
+
keychains: [{ commonKeychain: addressVerificationData.commonKeychain }],
|
|
411
|
+
index: 0,
|
|
412
|
+
};
|
|
413
|
+
await basecoin.isWalletAddress(params).should.be.rejectedWith(`invalid address: ${invalidAddress}`);
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
});
|
|
245
417
|
});
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUErRDtBQUMvRCxpREFBK0M7QUFDL0MsZ0VBQXdDO0FBQ3hDLDJEQUF3RDtBQUV4RCwyQ0FBNEM7QUFDNUMsZ0RBQXdCO0FBQ3hCLDJEQUE2QztBQUM3QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGNBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBRXhCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTlDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFJLFNBQWMsQ0FBQztJQUVuQixNQUFNLENBQUMsS0FBSztRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3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QjtpQkFDL0I7Z0JBQ0QsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQztpQkFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuaW1wb3J0IHsgSWNwLCBUaWNwIH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5ub2NrLmVuYWJsZU5ldENvbm5lY3QoKTtcblxuY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbmJpdGdvLnNhZmVSZWdpc3RlcignaWNwJywgSWNwLmNyZWF0ZUluc3RhbmNlKTtcblxuZGVzY3JpYmUoJ0ludGVybmV0IGNvbXB1dGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z287XG4gIGxldCBiYXNlY29pbjtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdpY3AnKTtcbiAgbGV0IHR4QnVpbGRlcjogYW55O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdpY3AnLCBJY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGljcCcsIFRpY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbignaWNwJyk7XG5cbiAgICB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIucmVjZWl2ZXJJZCh0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KCcxMCcpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3REYXRhLk1ldGFEYXRhV2l0aE1lbW8ubWVtbyk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY3AgPSBiaXRnby5jb2luKCdpY3AnKTtcbiAgICBjb25zdCB0aWNwID0gYml0Z28uY29pbigndGljcCcpO1xuXG4gICAgaWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0ludGVybmV0IENvbXB1dGVyJyk7XG4gICAgaWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICB0aWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0aWNwJyk7XG4gICAgdGljcC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIHRpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgSW50ZXJuZXQgQ29tcHV0ZXInKTtcbiAgICB0aWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkgPVxuICAgICAgJzA0N2E4M2UzNzgwNTNmODdiNDlhZWFlNTNiM2VkMjc0YzhiMmZmYmU1OWQ5YTUxZTNjNGQ4NTBjYThhYzE2ODRmNzEzMWI3NzgzMTdjMGRiMDRkZTY2MWM3ZDA4MzIxZDYwYzA1MDc4NjhhZjQxZmUzMTUwZDIxYjNjNmM3NTczNjcnO1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkyID0gJzAyYWQwMTBjZTY4Yjc1MjY2YzcyM2JmMjVmYmUzYTBjNDhlYjI5ZjE0YjI1OTI1YjA2YjdmNTAyNmEwZjEyNzAyZSc7XG4gICAgY29uc3QgaW52YWxpZFB1YmxpY0tleSA9ICdpbnZhbGlkLXB1YmxpYy1rZXknO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEID0gJzhiODRjM2EzNTI5ZDAyYTlkZWNiNWIxYTI3ZTdjOGQ4ODZlMTdlMDdlYTBhNTM4MjY5Njk3ZWYwOWMyYTI3YjQnO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEMiA9ICcyYjliODk2MDQzNjJlMTg1NTQ0YzhiYmE3NmNhZGZmMWEzYWYyNmUxNDY3ZTg1MzBkMTM3NDNhMDhhNTJkZDdiJztcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWxpZGF0aW5nIGEgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoaGV4RW5jb2RlZFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSBoZXggZW5jb2RlZCBwdWJsaWMga2V5IHdpdGggMzMgYnl0ZXMgJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihoZXhFbmNvZGVkUHVibGljS2V5Mikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGEgaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihpbnZhbGlkUHVibGljS2V5KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJRCA9IGF3YWl0IGJhc2Vjb2luLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleSB3aXRoIDMzIGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleTIpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYEludmFsaWQgaGV4LWVuY29kZWQgcHVibGljIGtleSBmb3JtYXQuYCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZCBhZGRyZXNzIGZyb20gYSB2YWxpZCBoZXggZW5jb2RlZCBwdWJsaWMga2V5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gICAgICBhY2NvdW50SUQuc2hvdWxkLmRlZXBFcXVhbCh2YWxpZEFjY291bnRJRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gaW52YWxpZCBwdWJsaWMga2V5IGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgdXRpbHNcbiAgICAgICAgLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGludmFsaWRQdWJsaWNLZXkpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBJbnZhbGlkIGhleC1lbmNvZGVkIHB1YmxpYyBrZXkgZm9ybWF0LmApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnR2VuZXJhdGUgd2FsbGV0IGtleSBwYWlyOiAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBrZXkgcGFpcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtwLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrcC5wcnYpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXIgZnJvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKCc5ZDYxYjE5ZGVmZmQ1YTYwYmE4NDRhZjQ5MmVjMmNjNDQ0NDljNTY5N2IzMjY5MTk3MDNiYWMwMzFjYWU3ZjYwJywgJ2hleCcpO1xuICAgICAgY29uc3Qga3AgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtwLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrcC5wcnYpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gYSByYXcgdHhuIHdpdGggYSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYSByYXcgdHhuIHdpdGggYSBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHhuID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgICB1bnNpZ25lZFR4bi5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeEhleDogcGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXk6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBzaWduZWRUeG4gPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXksXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4bi5zaG91bGQuYmUuYS5zdHJpbmc7XG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGZhY3RvcnkucGFyc2VUcmFuc2FjdGlvbihzaWduZWRUeG4udHhIZXgsIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMF0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzFdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1syXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMF0uYW1vdW50LnZhbHVlLCAnLTEwJyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24uYWNjb3VudF9pZGVudGlmaWVyX3NpZ25lcnNbMF0uYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgYSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSB0cmFuc2FjdGlvbiB3aXRoIHNpZ25hYmxlIEhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHhuID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgICB1bnNpZ25lZFR4bi5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeEhleDogcGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXk6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWduYWJsZUhleCA9IHBheWxvYWRzRGF0YS5wYXlsb2Fkc1swXS5oZXhfYnl0ZXM7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgICAgdHhJbmZvOiBzaWduYWJsZUhleCxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aG91dCBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICB9LFxuICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydChyZXNwb25zZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cm9uZ1NpZ25hYmxlSGV4VmFsdWVzID1cbiAgICAgICAgJzBhNjk2MzJkNzI2NTcxNzU2NTczNzQ1MjNkZTNjN2M1YjQ2MTMxNTViNzRlZGUyZTU0NDkzZjZhY2JlOGJmNmQ5MTAxNTRmYmJiM2E5OGJhM2UwMDk4JztcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgICAgdHhJbmZvOiB3cm9uZ1NpZ25hYmxlSGV4VmFsdWVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnZ2VuZXJhdGVkIHNpZ25hYmxlSGV4IGlzIG5vdCBlcXVhbCB0byBwYXJhbXMuc2lnbmFibGVIZXgnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
418
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUErRDtBQUMvRCxpREFBK0M7QUFDL0MsZ0VBQXdDO0FBQ3hDLDJEQUF3RDtBQUV4RCwyQ0FBNEM7QUFDNUMsZ0RBQXdCO0FBQ3hCLDJEQUE2QztBQUM3QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGNBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBRXhCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTlDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFJLFNBQWMsQ0FBQztJQUVuQixNQUFNLENBQUMsS0FBSztRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3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Q0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsNEJBQTRCLEVBQUUsS0FBSztnQkFDcEMsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsT0FBTyxFQUFFLHVCQUF1QixDQUFDLFdBQVc7b0JBQzVDLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXO29CQUNoRCxTQUFTLEVBQUUsU0FBUztvQkFDcEIsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsYUFBYSxFQUFFLENBQUM7aUJBQ2pCLENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSztnQkFDdkQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUM7Z0JBRXpDLE1BQU0sTUFBTSxHQUFHO29CQUNiLE9BQU8sRUFBRSxjQUFjO29CQUN2QixhQUFhLEVBQUUsQ0FBQztvQkFDaEIsU0FBUyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZFLEtBQUssRUFBRSxDQUFDO2lCQUNULENBQUM7Z0JBRUYsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFvQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3RHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuaW1wb3J0IHsgSWNwLCBUaWNwIH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5ub2NrLmVuYWJsZU5ldENvbm5lY3QoKTtcblxuY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbmJpdGdvLnNhZmVSZWdpc3RlcignaWNwJywgSWNwLmNyZWF0ZUluc3RhbmNlKTtcblxuZGVzY3JpYmUoJ0ludGVybmV0IGNvbXB1dGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z287XG4gIGxldCBiYXNlY29pbjtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdpY3AnKTtcbiAgbGV0IHR4QnVpbGRlcjogYW55O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdpY3AnLCBJY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGljcCcsIFRpY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbignaWNwJyk7XG5cbiAgICB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIucmVjZWl2ZXJJZCh0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KCcxMCcpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3REYXRhLk1ldGFEYXRhV2l0aE1lbW8ubWVtbyk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY3AgPSBiaXRnby5jb2luKCdpY3AnKTtcbiAgICBjb25zdCB0aWNwID0gYml0Z28uY29pbigndGljcCcpO1xuXG4gICAgaWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0ludGVybmV0IENvbXB1dGVyJyk7XG4gICAgaWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICB0aWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0aWNwJyk7XG4gICAgdGljcC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIHRpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgSW50ZXJuZXQgQ29tcHV0ZXInKTtcbiAgICB0aWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkgPVxuICAgICAgJzA0N2E4M2UzNzgwNTNmODdiNDlhZWFlNTNiM2VkMjc0YzhiMmZmYmU1OWQ5YTUxZTNjNGQ4NTBjYThhYzE2ODRmNzEzMWI3NzgzMTdjMGRiMDRkZTY2MWM3ZDA4MzIxZDYwYzA1MDc4NjhhZjQxZmUzMTUwZDIxYjNjNmM3NTczNjcnO1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkyID0gJzAyYWQwMTBjZTY4Yjc1MjY2YzcyM2JmMjVmYmUzYTBjNDhlYjI5ZjE0YjI1OTI1YjA2YjdmNTAyNmEwZjEyNzAyZSc7XG4gICAgY29uc3QgaW52YWxpZFB1YmxpY0tleSA9ICdpbnZhbGlkLXB1YmxpYy1rZXknO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEID0gJzhiODRjM2EzNTI5ZDAyYTlkZWNiNWIxYTI3ZTdjOGQ4ODZlMTdlMDdlYTBhNTM4MjY5Njk3ZWYwOWMyYTI3YjQnO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEMiA9ICcyYjliODk2MDQzNjJlMTg1NTQ0YzhiYmE3NmNhZGZmMWEzYWYyNmUxNDY3ZTg1MzBkMTM3NDNhMDhhNTJkZDdiJztcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWxpZGF0aW5nIGEgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoaGV4RW5jb2RlZFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSBoZXggZW5jb2RlZCBwdWJsaWMga2V5IHdpdGggMzMgYnl0ZXMgJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihoZXhFbmNvZGVkUHVibGljS2V5Mikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGEgaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihpbnZhbGlkUHVibGljS2V5KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJRCA9IGF3YWl0IGJhc2Vjb2luLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleSB3aXRoIDMzIGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleTIpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHZhbGlkIGFkZHJlc3MgZnJvbSBhIHZhbGlkIGhleCBlbmNvZGVkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhY2NvdW50SUQgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5KTtcbiAgICAgIGFjY291bnRJRC5zaG91bGQuZGVlcEVxdWFsKHZhbGlkQWNjb3VudElEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSkpLnNob3VsZC50aHJvdygnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0dlbmVyYXRlIHdhbGxldCBrZXkgcGFpcjogJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrcCA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGtleSBwYWlyIGZyb20gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbSgnOWQ2MWIxOWRlZmZkNWE2MGJhODQ0YWY0OTJlYzJjYzQ0NDQ5YzU2OTdiMzI2OTE5NzAzYmFjMDMxY2FlN2Y2MCcsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihrcC5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoa3AucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIGEgcmF3IHR4biB3aXRoIGEgcHJpdmF0ZSBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3Qgc2lnbmVkVHhuID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5LFxuICAgICAgfSk7XG4gICAgICBzaWduZWRUeG4uc2hvdWxkLmJlLmEuc3RyaW5nO1xuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBmYWN0b3J5LnBhcnNlVHJhbnNhY3Rpb24oc2lnbmVkVHhuLnR4SGV4LCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1sxXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMl0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzBdLmFtb3VudC52YWx1ZSwgJy0xMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLmFjY291bnRfaWRlbnRpZmllcl9zaWduZXJzWzBdLmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmVyaWZ5IGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aCBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSBwYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0uaGV4X2J5dGVzO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIHR4SW5mbzogc2lnbmFibGVIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0KHJlc3BvbnNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2Vzc2Z1bGx5IHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHRyYW5zYWN0aW9uIHdpdGggd3Jvbmcgc2lnbmFibGUgSGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIHVuc2lnbmVkVHhuLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgY29uc3QgcGF5bG9hZHNEYXRhID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEZvcm1hdCA9IHtcbiAgICAgICAgc2VyaWFsaXplZFR4SGV4OiBwYXlsb2Fkc0RhdGEsXG4gICAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWRUeEZvcm1hdCksICd1dGYtOCcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogJzEwJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgd3JvbmdTaWduYWJsZUhleFZhbHVlcyA9XG4gICAgICAgICcwYTY5NjMyZDcyNjU3MTc1NjU3Mzc0NTIzZGUzYzdjNWI0NjEzMTU1Yjc0ZWRlMmU1NDQ5M2Y2YWNiZThiZjZkOTEwMTU0ZmJiYjNhOThiYTNlMDA5OCc7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICAgIHR4SW5mbzogd3JvbmdTaWduYWJsZUhleFZhbHVlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ2dlbmVyYXRlZCBzaWduYWJsZUhleCBpcyBub3QgZXF1YWwgdG8gcGFyYW1zLnNpZ25hYmxlSGV4Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZlcmlmaWNhdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YSA9IHtcbiAgICAgIGNvbW1vbktleWNoYWluOlxuICAgICAgICAnMDM2YjM4Y2E1ZTYzZTk4MDBiNTA0MGFmNDk4ZWI2ZTlhOWM3N2UyNDRhYzI4NThlZGFmYTRiZDA5MjZhNjM1NzMxYzNmYWJkZTkwMDdhNTc3MWU5MzYyMWQ5ZmNiMWM4Nzk2NjAyMDhkYzc5Y2M2MDlmZThkZGQxODlmN2E5NTVhYicsXG4gICAgICByb290QWRkcmVzczogJ2ZkM2VhZWQzZTIwNjRiZDMwYWI0OTdlMjJlOGFjNWEwZGNhZGQ4MWZhNTM1Mzg3OWRiYWI2NGUyNTllYzcwYzAnLFxuICAgIH07XG5cbiAgICBkZXNjcmliZSgnV2FsbGV0IFZlcnNpb25LZXkgMScsICgpID0+IHtcbiAgICAgIGxldCBrZXljaGFpbnM7XG5cbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGtleWNoYWlucyA9IFtcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIG1lbW8tYmFzZWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcbiAgICAgICAgY29uc3QgYWRkcmVzc1dpdGhNZW1vID0gYCR7cm9vdEFkZHJlc3N9P21lbW9JZD0xMjNgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYWRkcmVzcyB3aXRoIG1lbW9JZD0wJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290QWRkcmVzcyA9IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLnJvb3RBZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPTBgO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzV2l0aE1lbW8sXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcyk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gZXh0cmFjdGVkIHJvb3QgZG9lcyBub3QgbWF0Y2ggcHJvdmlkZWQgcm9vdEFkZHJlc3MgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVudEFkZHJlc3MgPSB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtkaWZmZXJlbnRBZGRyZXNzfT9tZW1vSWQ9MTIzYDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRoZSBleHRyYWN0ZWQgcm9vdCAoZGlmZmVyZW50QWRkcmVzcykgZG9lc24ndCBtYXRjaCBwcm92aWRlZCByb290QWRkcmVzc1xuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogZXhwZWN0ZWQgJHtyb290QWRkcmVzc30gYnV0IGdvdCAke2RpZmZlcmVudEFkZHJlc3N9YCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHJvb3RBZGRyZXNzIGlzIG1pc3NpbmcgZm9yIHdhbGxldCB2ZXJzaW9uIDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBgJHthZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMSxcbiAgICAgICAgICBrZXljaGFpbnM6IGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdyb290QWRkcmVzcyBpcyByZXF1aXJlZCBmb3Igd2FsbGV0IHZlcnNpb24gMScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBtZW1vSWQgaXMgbWlzc2luZyBmb3Igd2FsbGV0IHZlcnNpb24gMScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWVtb0lkIGlzIHJlcXVpcmVkIGZvciB3YWxsZXQgdmVyc2lvbiAxIGFkZHJlc3NlcycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGxhcmdlIG1lbW9JZCB2YWx1ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGxhcmdlTWVtb0lkID0gJzkwMDcxOTkyNTQ3NDA5OTEnO1xuICAgICAgICBjb25zdCBhZGRyZXNzV2l0aE1lbW8gPSBgJHtyb290QWRkcmVzc30/bWVtb0lkPSR7bGFyZ2VNZW1vSWR9YDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc1dpdGhNZW1vLFxuICAgICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAxLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHJvb3RBZGRyZXNzIGRvZXMgbm90IG1hdGNoIGNvbW1vbktleWNoYWluIGRlcml2YXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFVzZSBhIHJvb3RBZGRyZXNzIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0J3MgZGVyaXZlZCBmcm9tIGNvbW1vbktleWNoYWluXG4gICAgICAgIGNvbnN0IGludmFsaWRSb290QWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NXaXRoTWVtbyA9IGAke2ludmFsaWRSb290QWRkcmVzc30/bWVtb0lkPTEyM2A7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3NXaXRoTWVtbyxcbiAgICAgICAgICByb290QWRkcmVzczogaW52YWxpZFJvb3RBZGRyZXNzLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDEsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcm9vdEFkZHJlc3MgaXMgY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZpZWQgYWdhaW5zdCBjb21tb25LZXljaGFpblxuICAgICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAgIC5pc1dhbGxldEFkZHJlc3MocGFyYW1zKVxuICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2ludmFsaWRSb290QWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1dhbGxldCBWZXJzaW9uS2V5IDIrJywgKCkgPT4ge1xuICAgICAgbGV0IGtleWNoYWlucztcblxuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAga2V5Y2hhaW5zID0gW1xuICAgICAgICAgIHsgY29tbW9uS2V5Y2hhaW46IGFkZHJlc3NWZXJpZmljYXRpb25EYXRhLmNvbW1vbktleWNoYWluIH0sXG4gICAgICAgICAgeyBjb21tb25LZXljaGFpbjogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEuY29tbW9uS2V5Y2hhaW4gfSxcbiAgICAgICAgICB7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9LFxuICAgICAgICBdO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IGEgdmFsaWQgVFNTIHJvb3QgYWRkcmVzcyAoaW5kZXggMCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIFRTUyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGludmFsaWRBZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHBhcmFtcylcbiAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGFkZHJlc3MgJHtpbnZhbGlkQWRkcmVzc30gaXMgbm90IGEgd2FsbGV0IGFkZHJlc3NgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4ga2V5Y2hhaW5zIGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnM6IFtdLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHdhbGxldFZlcnNpb246IDIsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHBhcmFtcykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzdHJpbmcgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5yb290QWRkcmVzcyxcbiAgICAgICAgICByb290QWRkcmVzczogYWRkcmVzc1ZlcmlmaWNhdGlvbkRhdGEucm9vdEFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zOiBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6ICcwJyxcbiAgICAgICAgICB3YWxsZXRWZXJzaW9uOiAyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMpO1xuICAgICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQWRkcmVzcyB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhZGRyZXNzIGZvcm1hdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSAnaW52YWxpZC1hZGRyZXNzJztcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgYWRkcmVzczogaW52YWxpZEFkZHJlc3MsXG4gICAgICAgICAgd2FsbGV0VmVyc2lvbjogMixcbiAgICAgICAgICBrZXljaGFpbnM6IFt7IGNvbW1vbktleWNoYWluOiBhZGRyZXNzVmVyaWZpY2F0aW9uRGF0YS5jb21tb25LZXljaGFpbiB9XSxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBpbnZhbGlkIGFkZHJlc3M6ICR7aW52YWxpZEFkZHJlc3N9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
package/dist/test/unit/utils.js
CHANGED
|
@@ -121,22 +121,22 @@ describe('utils', () => {
|
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
123
|
describe('getAddressFromPublicKey()', () => {
|
|
124
|
-
it('should return the correct address for a valid public key',
|
|
125
|
-
const address1 =
|
|
124
|
+
it('should return the correct address for a valid public key', () => {
|
|
125
|
+
const address1 = utils_1.default.getAddressFromPublicKey(icp_1.Accounts.account1.publicKey);
|
|
126
126
|
should_1.default.equal(address1, icp_1.Accounts.account1.address);
|
|
127
|
-
const address2 =
|
|
127
|
+
const address2 = utils_1.default.getAddressFromPublicKey(icp_1.Accounts.account1.publicKey);
|
|
128
128
|
should_1.default.equal(address2, icp_1.Accounts.account1.address);
|
|
129
|
-
const address3 =
|
|
129
|
+
const address3 = utils_1.default.getAddressFromPublicKey(icp_1.Accounts.account1.publicKey);
|
|
130
130
|
should_1.default.equal(address3, icp_1.Accounts.account1.address);
|
|
131
|
-
const address4 =
|
|
131
|
+
const address4 = utils_1.default.getAddressFromPublicKey(icp_1.Accounts.account1.publicKey);
|
|
132
132
|
should_1.default.equal(address4, icp_1.Accounts.account1.address);
|
|
133
|
-
const address5 =
|
|
133
|
+
const address5 = utils_1.default.getAddressFromPublicKey(icp_1.Accounts.account1.publicKey);
|
|
134
134
|
should_1.default.equal(address5, icp_1.Accounts.account1.address);
|
|
135
|
-
const address6 =
|
|
135
|
+
const address6 = utils_1.default.getAddressFromPublicKey(icp_1.Accounts.account1.publicKey);
|
|
136
136
|
should_1.default.equal(address6, icp_1.Accounts.account1.address);
|
|
137
137
|
});
|
|
138
|
-
it('should throw an error for an invalid public key',
|
|
139
|
-
|
|
138
|
+
it('should throw an error for an invalid public key', () => {
|
|
139
|
+
(() => utils_1.default.getAddressFromPublicKey(icp_1.Accounts.errorsAccounts.account1.publicKey)).should.throw('Invalid hex-encoded public key format.');
|
|
140
140
|
});
|
|
141
141
|
});
|
|
142
142
|
describe('generateKeyPair()', () => {
|
|
@@ -203,4 +203,4 @@ describe('utils', () => {
|
|
|
203
203
|
});
|
|
204
204
|
});
|
|
205
205
|
});
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLDBDQUFnRztBQUNoRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDbkQsbUNBQXFDO0FBRXJDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtZQUM3QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMs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QUFtQixHQUN2Qiw4Y0FBOGMsQ0FBQztZQUNqZCxNQUFNLGVBQWUsR0FBRyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sdUJBQXVCLEdBQUcsa0VBQWtFLENBQUM7WUFDbkcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0ZBQStGLEVBQUUsR0FBRyxFQUFFO1lBQ3ZHLE1BQU0sbUJBQW1CLEdBQ3ZCLG9kQUFvZCxDQUFDO1lBQ3ZkLE1BQU0sZUFBZSxHQUFHLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEYsTUFBTSx1QkFBdUIsR0FBRyxrRUFBa0UsQ0FBQztZQUNuRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBBY2NvdW50cywgSWNwVHJhbnNhY3Rpb25EYXRhLCBCbG9ja0hhc2hlcywgVHJhbnNhY3Rpb25IYXNoZXMgfSBmcm9tICcuLi9yZXNvdXJjZXMvaWNwJztcbmNvbnN0IHsgZW5jb2RlIH0gPSByZXF1aXJlKCdjYm9yLXgvaW5kZXgtbm8tZXZhbCcpO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5kZXNjcmliZSgndXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdpc1ZhbGlkQWRkcmVzcygpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmFjY291bnQzLmFkZHJlc3MpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50NC5hZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDUuYWRkcmVzcyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmFjY291bnQ2LmFkZHJlc3MpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW52YWxpZGF0ZSB3cm9uZyBhZGRyZXNzZXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQxLmFkZHJlc3MpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50My5hZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQ0LmFkZHJlc3MpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDUuYWRkcmVzcyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50Ni5hZGRyZXNzKSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEJsb2NrSWQoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGJsb2NrIGhhc2hlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoQmxvY2tIYXNoZXMudmFsaWRIYXNoZXMuYmxvY2sxKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoQmxvY2tIYXNoZXMudmFsaWRIYXNoZXMuYmxvY2syKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoQmxvY2tIYXNoZXMudmFsaWRIYXNoZXMuYmxvY2szKSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkVHJhbnNhY3Rpb25JZCgpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdHJhbnNhY3Rpb24gaGFzaGVzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZChUcmFuc2FjdGlvbkhhc2hlcy52YWxpZEhhc2hlcy50eElkMSksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKFRyYW5zYWN0aW9uSGFzaGVzLnZhbGlkSGFzaGVzLnR4SWQyKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoVHJhbnNhY3Rpb25IYXNoZXMudmFsaWRIYXNoZXMudHhJZDMpLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dhc0RhdGEoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IGdhcyBkYXRhJywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmZlZURhdGEoKSwgJy0xMDAwMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFB1YmxpY0tleSgpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcHVibGljIGtleSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQyLnB1YmxpY0tleSksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDMucHVibGljS2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50NC5wdWJsaWNLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQ1LnB1YmxpY0tleSksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDYucHVibGljS2V5KSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGludmFsaWRhdGUgcHVibGljIGtleSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50Mi5wdWJsaWNLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50My5wdWJsaWNLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50NC5wdWJsaWNLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50NS5wdWJsaWNLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50Ni5wdWJsaWNLZXkpLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYm9yRW5jb2RlKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZW5jb2RlIGFuIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0geyBrZXk6ICd2YWx1ZScgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGV4ID0gQnVmZmVyLmZyb20oZW5jb2RlKHZhbHVlKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmNib3JFbmNvZGUodmFsdWUpLCBleHBlY3RlZEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBhbmQgZGVjb2RlIGEgYmlnIG51bWJlciBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IHsgbnVtYmVyOiBCaWdJbnQoMTc0MDY4MDc3NzQ1ODAwMDAwMCkgfTtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGUob3JpZ2luYWwpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHV0aWxzLmNib3JEZWNvZGUoZW5jb2RlZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGRlY29kZWQsIG9yaWdpbmFsKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Nib3JEZWNvZGUoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBkZWNvZGUgYSBDQk9SLWVuY29kZWQgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSB7IGtleTogJ3ZhbHVlJywgbnVtYmVyOiAxMDAgfTtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGUob3JpZ2luYWwpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHV0aWxzLmNib3JEZWNvZGUoZW5jb2RlZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKGRlY29kZWQsIG9yaWdpbmFsKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRMZW5ndGgoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhIHZhbGlkIGNvbXByZXNzZWQgcHVibGljIGtleSBsZW5ndGggKDY2IGNoYXJhY3RlcnMpJywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRMZW5ndGgoJ2EnLnJlcGVhdCg2NikpLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRIZXgoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhIHZhbGlkIGhleGFkZWNpbWFsIHN0cmluZycsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkSGV4KCdhYmNkZWYxMjM0NTY3ODkwQUJDREVGJyksIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaGV4VG9CeXRlcygpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgYSB2YWxpZCBoZXhhZGVjaW1hbCBzdHJpbmcgdG8gYSBVaW50OEFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaGV4ID0gJ2FiY2RlZjEyMzQ1Nic7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBVaW50OEFycmF5KFsweGFiLCAweGNkLCAweGVmLCAweDEyLCAweDM0LCAweDU2XSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHV0aWxzLmhleFRvQnl0ZXMoaGV4KSwgZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFByaXZhdGVLZXkoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHByaXZhdGUga2V5IGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50Mi5zZWNyZXRLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50My5zZWNyZXRLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50NC5zZWNyZXRLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50NS5zZWNyZXRLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50Ni5zZWNyZXRLZXkpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW52YWxpZGF0ZSBwcml2YXRlIGtleSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQyLnNlY3JldEtleSksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50My5zZWNyZXRLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDQuc2VjcmV0S2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQ1LnNlY3JldEtleSksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50Ni5zZWNyZXRLZXkpLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBZGRyZXNzRnJvbVB1YmxpY0tleSgpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGFkZHJlc3MgZm9yIGEgdmFsaWQgcHVibGljIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MxID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChhZGRyZXNzMSwgQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBjb25zdCBhZGRyZXNzMiA9IGF3YWl0IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoYWRkcmVzczIsIEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgY29uc3QgYWRkcmVzczMgPSBhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGFkZHJlc3MzLCBBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIGNvbnN0IGFkZHJlc3M0ID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChhZGRyZXNzNCwgQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBjb25zdCBhZGRyZXNzNSA9IGF3YWl0IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoYWRkcmVzczUsIEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgY29uc3QgYWRkcmVzczYgPSBhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGFkZHJlc3M2LCBBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGFuIGludmFsaWQgcHVibGljIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNob3VsZCh1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpKS5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICdJbnZhbGlkIGhleC1lbmNvZGVkIHB1YmxpYyBrZXkgZm9ybWF0LidcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZW5lcmF0ZUtleVBhaXIoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQga2V5IHBhaXIgd2l0aG91dCBhIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gdXRpbHMuZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5UGFpcik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5UGFpci5wdWIpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleVBhaXIucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB2YWxpZCBrZXkgcGFpciB3aXRoIGEgZ2l2ZW4gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSByYW5kb21CeXRlcygzMik7XG4gICAgICBjb25zdCBrZXlQYWlyID0gdXRpbHMuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleVBhaXIpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleVBhaXIucHViKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlQYWlyLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGRpZmZlcmVudCBrZXkgcGFpcnMgZm9yIGRpZmZlcmVudCBzZWVkcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQxID0gcmFuZG9tQnl0ZXMoMzIpO1xuICAgICAgY29uc3Qgc2VlZDIgPSByYW5kb21CeXRlcygzMik7XG4gICAgICBjb25zdCBrZXlQYWlyMSA9IHV0aWxzLmdlbmVyYXRlS2V5UGFpcihzZWVkMSk7XG4gICAgICBjb25zdCBrZXlQYWlyMiA9IHV0aWxzLmdlbmVyYXRlS2V5UGFpcihzZWVkMik7XG5cbiAgICAgIHNob3VsZC5ub3RFcXVhbChrZXlQYWlyMS5wdWIsIGtleVBhaXIyLnB1Yik7XG4gICAgICBzaG91bGQubm90RXF1YWwoa2V5UGFpcjEucHJ2LCBrZXlQYWlyMi5wcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB0aGUgc2FtZSBrZXkgcGFpciBmb3IgdGhlIHNhbWUgc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSByYW5kb21CeXRlcygzMik7XG4gICAgICBjb25zdCBrZXlQYWlyMSA9IHV0aWxzLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgICAgIGNvbnN0IGtleVBhaXIyID0gdXRpbHMuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuXG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpcjEucHViLCBrZXlQYWlyMi5wdWIpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIxLnBydiwga2V5UGFpcjIucHJ2KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlUmF3VHJhbnNhY3Rpb24oKScsICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gSWNwVHJhbnNhY3Rpb25EYXRhO1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgaWNwVHJhbnNhY3Rpb25EYXRhIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24oZGF0YSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCBleHBpcnlUaW1lJywgKCkgPT4ge1xuICAgICAgKGRhdGEuZXhwaXJ5VGltZSA9IERhdGUubm93KCkpLCBzaG91bGQudGhyb3dzKCgpID0+IHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24oZGF0YSksICdJbnZhbGlkIGV4cGlyeSB0aW1lJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCBmZWUnLCAoKSA9PiB7XG4gICAgICBkYXRhLmZlZSA9ICctMTAwJztcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihkYXRhKSwgJ0ludmFsaWQgZmVlIHZhbHVlJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCBhbW91bnQnLCAoKSA9PiB7XG4gICAgICBkYXRhLmFtb3VudCA9ICcwJztcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihkYXRhKSwgJ2Ftb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFRyYW5zYWN0aW9uSWQoKScsICgpID0+IHtcbiAgICBjb25zdCBzZW5kZXIgPSAnNDc4NjdmMmNmYjg1MDk0Mjc1Yzg0NzQzNWZhMTBjYWQ1NGE4MTNlYmE3ZTZhOWJjMzUzOGFhMmY1MzdmMWQ3Myc7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSAnYTFjNjBlZmNhOTg4YzQxMWNkN2JjNWU0ODEzNjRiOWM5NGNhZWJiMjRjMDBlMDFkYjI2OWUzYTA1NDFlZTQ5OCc7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgdHJhbnNhY3Rpb24gaGFzaCBmb3IgYW1vdW50IGxlc3MgdGhhbiAyXjMyIChhbW91bnQgPSAxMDAwKScsICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHJhbnNhY3Rpb24gPVxuICAgICAgICAnYjkwMDAyNjc3NTcwNjQ2MTc0NjU3MzgxODI2YjU0NTI0MTRlNTM0MTQzNTQ0OTRmNGViOTAwMDU2YjYzNjE2ZTY5NzM3NDY1NzI1ZjY5NjQ0YTAwMDAwMDAwMDAwMDAwMDIwMTAxNmI2ZDY1NzQ2ODZmNjQ1ZjZlNjE2ZDY1Njc3MzY1NmU2NDVmNzA2MjYzNjE3MjY3NTg0MDBhMDIwODAwMTIwNTBhMDMwOGU4MDcxYTAzMDg5MDRlMmEyMjBhMjBhMWM2MGVmY2E5ODhjNDExY2Q3YmM1ZTQ4MTM2NGI5Yzk0Y2FlYmIyNGMwMGUwMWRiMjY5ZTNhMDU0MWVlNDk4M2EwYTA4ODA4NGE4YTk4OGU0ZjRhMDE4NjY3MzY1NmU2NDY1NzI1ODFkYTkwNWI4NmJiYTliZmVkMTk0YWM4YzEyMzc3YjVkNDg4NDcxMjhkYmZmZjEwZjAxYWRiODBmN2YwMjZlNjk2ZTY3NzI2NTczNzM1ZjY1Nzg3MDY5NzI3OTFiMDAwMDAwMDAwMDAwMDAwMDcwNjk2ZTY3NzI2NTczNzM1ZjY1Nzg3MDY5NzI2OTY1NzM4MTFiMTg0MWQzNTg2NjQ3NjIwMCc7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbkhhc2ggPSB1dGlscy5nZXRUcmFuc2FjdGlvbklkKHVuc2lnbmVkVHJhbnNhY3Rpb24sIHNlbmRlciwgcmVjZWl2ZXIpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRUcmFuc2FjdGlvbkhhc2ggPSAnYmI1MDJkMDU2NmY3MjZkYTAyYTE5MjU0MTVmNjhjYjZmMTc1Y2RkNmNiYTFlMDk4MjMxNDMwNzg3MTViMmJhNCc7XG4gICAgICBzaG91bGQuZXF1YWwodHJhbnNhY3Rpb25IYXNoLCBleHBlY3RlZFRyYW5zYWN0aW9uSGFzaCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCB0cmFuc2FjdGlvbiBoYXNoIGZvciBhbW91bnQgZ3JlYXRlciB0aGFuIDJeMzIgKGFtb3VudCA9IDY5NDgxNTAyMDApJywgKCkgPT4ge1xuICAgICAgY29uc3QgdW5zaWduZWRUcmFuc2FjdGlvbiA9XG4gICAgICAgICdiOTAwMDI2Nzc1NzA2NDYxNzQ2NTczODE4MjZiNTQ1MjQxNGU1MzQxNDM1NDQ5NGY0ZWI5MDAwNTZiNjM2MTZlNjk3Mzc0NjU3MjVmNjk2NDRhMDAwMDAwMDAwMDAwMDAwMjAxMDE2YjZkNjU3NDY4NmY2NDVmNmU2MTZkNjU2NzczNjU2ZTY0NWY3MDYyNjM2MTcyNjc1ODQzMGEwMjA4MDAxMjA4MGEwNjA4YjhiNzkxZjExOTFhMDMwODkwNGUyYTIyMGEyMGExYzYwZWZjYTk4OGM0MTFjZDdiYzVlNDgxMzY0YjljOTRjYWViYjI0YzAwZTAxZGIyNjllM2EwNTQxZWU0OTgzYTBhMDg4MGI4YTc4OWJmZWJmNGEwMTg2NjczNjU2ZTY0NjU3MjU4MWRhOTA1Yjg2YmJhOWJmZWQxOTRhYzhjMTIzNzdiNWQ0ODg0NzEyOGRiZmZmMTBmMDFhZGI4MGY3ZjAyNmU2OTZlNjc3MjY1NzM3MzVmNjU3ODcwNjk3Mjc5MWIwMDAwMDAwMDAwMDAwMDAwNzA2OTZlNjc3MjY1NzM3MzVmNjU3ODcwNjk3MjY5NjU3MzgxMWIxODQxZDM5M2QyNDczYzAwJztcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSGFzaCA9IHV0aWxzLmdldFRyYW5zYWN0aW9uSWQodW5zaWduZWRUcmFuc2FjdGlvbiwgc2VuZGVyLCByZWNlaXZlcik7XG4gICAgICBjb25zdCBleHBlY3RlZFRyYW5zYWN0aW9uSGFzaCA9ICcwMTY0MTExMTAwMDZkNDY0NWNiY2I1NTNhODRlZmRlYzZjNDAyODQ3Zjg1NmNhYTkwOTExMWQ4MWJiNTEzNTY1JztcbiAgICAgIHNob3VsZC5lcXVhbCh0cmFuc2FjdGlvbkhhc2gsIGV4cGVjdGVkVHJhbnNhY3Rpb25IYXNoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLDBDQUFnRztBQUNoRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDbkQsbUNBQXFDO0FBRXJDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtZQUM3QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDckQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxjQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxjQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGlCQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsaUJBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxpQkFBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsdUJBQWlCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsdUJBQWlCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsdUJBQWlCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtRQUN6QixFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsY0FBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLGNBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsY0FBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLGNBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtZQUMzQyxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMvQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLFFBQVEsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ3pELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtZQUN2RCxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtRQUMvQixFQUFFLENBQUMsNkVBQTZFLEVBQUUsR0FBRyxFQUFFO1lBQ3JGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtRQUM1QixFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsRUFBRTtZQUM3RSxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUM7WUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsZUFBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxFQUFFLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1lBQy9DLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsaUJBQWlCLENBQUMsY0FBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGlCQUFpQixDQUFDLGNBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsaUJBQWlCLENBQUMsY0FBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGlCQUFpQixDQUFDLGNBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxFQUFFLENBQUMsMERBQTBELEVBQUUsR0FBRyxFQUFFO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxjQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyx1QkFBdUIsQ0FBQyxjQUFRLENBQUMsUUFBUSxDQUFDLFNB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QUcsZUFBSyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RixNQUFNLHVCQUF1QixHQUFHLGtFQUFrRSxDQUFDO1lBQ25HLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtGQUErRixFQUFFLEdBQUcsRUFBRTtZQUN2RyxNQUFNLG1CQUFtQixHQUN2QixvZEFBb2QsQ0FBQztZQUN2ZCxNQUFNLGVBQWUsR0FBRyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sdUJBQXVCLEdBQUcsa0VBQWtFLENBQUM7WUFDbkcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgQWNjb3VudHMsIEljcFRyYW5zYWN0aW9uRGF0YSwgQmxvY2tIYXNoZXMsIFRyYW5zYWN0aW9uSGFzaGVzIH0gZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5jb25zdCB7IGVuY29kZSB9ID0gcmVxdWlyZSgnY2Jvci14L2luZGV4LW5vLWV2YWwnKTtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuZGVzY3JpYmUoJ3V0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnaXNWYWxpZEFkZHJlc3MoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFkZHJlc3NlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50My5hZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDQuYWRkcmVzcyksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmFjY291bnQ1LmFkZHJlc3MpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50Ni5hZGRyZXNzKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGludmFsaWRhdGUgd3JvbmcgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQyLmFkZHJlc3MpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDMuYWRkcmVzcyksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50NC5hZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQ1LmFkZHJlc3MpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDYuYWRkcmVzcyksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRCbG9ja0lkKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBibG9jayBoYXNoZXMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKEJsb2NrSGFzaGVzLnZhbGlkSGFzaGVzLmJsb2NrMSksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKEJsb2NrSGFzaGVzLnZhbGlkSGFzaGVzLmJsb2NrMiksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKEJsb2NrSGFzaGVzLnZhbGlkSGFzaGVzLmJsb2NrMyksIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZFRyYW5zYWN0aW9uSWQoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHRyYW5zYWN0aW9uIGhhc2hlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoVHJhbnNhY3Rpb25IYXNoZXMudmFsaWRIYXNoZXMudHhJZDEpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZChUcmFuc2FjdGlvbkhhc2hlcy52YWxpZEhhc2hlcy50eElkMiksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKFRyYW5zYWN0aW9uSGFzaGVzLnZhbGlkSGFzaGVzLnR4SWQzKSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnYXNEYXRhKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ycmVjdCBnYXMgZGF0YScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5mZWVEYXRhKCksICctMTAwMDAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQdWJsaWNLZXkoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHB1YmxpYyBrZXkgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50Mi5wdWJsaWNLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQzLnB1YmxpY0tleSksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDQucHVibGljS2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50NS5wdWJsaWNLZXkpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQ2LnB1YmxpY0tleSksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbnZhbGlkYXRlIHB1YmxpYyBrZXkgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDIucHVibGljS2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDMucHVibGljS2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDQucHVibGljS2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDUucHVibGljS2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDYucHVibGljS2V5KSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2JvckVuY29kZSgpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGVuY29kZSBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHsga2V5OiAndmFsdWUnIH07XG4gICAgICBjb25zdCBleHBlY3RlZEhleCA9IEJ1ZmZlci5mcm9tKGVuY29kZSh2YWx1ZSkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5jYm9yRW5jb2RlKHZhbHVlKSwgZXhwZWN0ZWRIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgYW5kIGRlY29kZSBhIGJpZyBudW1iZXIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSB7IG51bWJlcjogQmlnSW50KDE3NDA2ODA3Nzc0NTgwMDAwMDApIH07XG4gICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlKG9yaWdpbmFsKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5jYm9yRGVjb2RlKGVuY29kZWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChkZWNvZGVkLCBvcmlnaW5hbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYm9yRGVjb2RlKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZGVjb2RlIGEgQ0JPUi1lbmNvZGVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0geyBrZXk6ICd2YWx1ZScsIG51bWJlcjogMTAwIH07XG4gICAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlKG9yaWdpbmFsKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5jYm9yRGVjb2RlKGVuY29kZWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChkZWNvZGVkLCBvcmlnaW5hbCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkTGVuZ3RoKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYSB2YWxpZCBjb21wcmVzc2VkIHB1YmxpYyBrZXkgbGVuZ3RoICg2NiBjaGFyYWN0ZXJzKScsICgpID0+IHtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkTGVuZ3RoKCdhJy5yZXBlYXQoNjYpKSwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkSGV4KCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYSB2YWxpZCBoZXhhZGVjaW1hbCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEhleCgnYWJjZGVmMTIzNDU2Nzg5MEFCQ0RFRicpLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2hleFRvQnl0ZXMoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IGEgdmFsaWQgaGV4YWRlY2ltYWwgc3RyaW5nIHRvIGEgVWludDhBcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGhleCA9ICdhYmNkZWYxMjM0NTYnO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgVWludDhBcnJheShbMHhhYiwgMHhjZCwgMHhlZiwgMHgxMiwgMHgzNCwgMHg1Nl0pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh1dGlscy5oZXhUb0J5dGVzKGhleCksIGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQcml2YXRlS2V5KCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwcml2YXRlIGtleSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuYWNjb3VudDIuc2VjcmV0S2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuYWNjb3VudDMuc2VjcmV0S2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuYWNjb3VudDQuc2VjcmV0S2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuYWNjb3VudDUuc2VjcmV0S2V5KSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuYWNjb3VudDYuc2VjcmV0S2V5KSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGludmFsaWRhdGUgcHJpdmF0ZSBrZXkgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQxLnNlY3JldEtleSksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50Mi5zZWNyZXRLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDMuc2VjcmV0S2V5KSwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KEFjY291bnRzLmVycm9yc0FjY291bnRzLmFjY291bnQ0LnNlY3JldEtleSksIGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5lcnJvcnNBY2NvdW50cy5hY2NvdW50NS5zZWNyZXRLZXkpLCBmYWxzZSk7XG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDYuc2VjcmV0S2V5KSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoKScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBhZGRyZXNzIGZvciBhIHZhbGlkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzMSA9IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoYWRkcmVzczEsIEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgY29uc3QgYWRkcmVzczIgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGFkZHJlc3MyLCBBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MzID0gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChhZGRyZXNzMywgQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBjb25zdCBhZGRyZXNzNCA9IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoYWRkcmVzczQsIEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgY29uc3QgYWRkcmVzczUgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGFkZHJlc3M1LCBBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIGNvbnN0IGFkZHJlc3M2ID0gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChhZGRyZXNzNiwgQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBhbiBpbnZhbGlkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICAoKCkgPT4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoQWNjb3VudHMuZXJyb3JzQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KSkuc2hvdWxkLnRocm93KFxuICAgICAgICAnSW52YWxpZCBoZXgtZW5jb2RlZCBwdWJsaWMga2V5IGZvcm1hdC4nXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVLZXlQYWlyKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIHZhbGlkIGtleSBwYWlyIHdpdGhvdXQgYSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IHV0aWxzLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleVBhaXIpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleVBhaXIucHViKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlQYWlyLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQga2V5IHBhaXIgd2l0aCBhIGdpdmVuIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0gcmFuZG9tQnl0ZXMoMzIpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IHV0aWxzLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlQYWlyKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlQYWlyLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5UGFpci5wcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBkaWZmZXJlbnQga2V5IHBhaXJzIGZvciBkaWZmZXJlbnQgc2VlZHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkMSA9IHJhbmRvbUJ5dGVzKDMyKTtcbiAgICAgIGNvbnN0IHNlZWQyID0gcmFuZG9tQnl0ZXMoMzIpO1xuICAgICAgY29uc3Qga2V5UGFpcjEgPSB1dGlscy5nZW5lcmF0ZUtleVBhaXIoc2VlZDEpO1xuICAgICAgY29uc3Qga2V5UGFpcjIgPSB1dGlscy5nZW5lcmF0ZUtleVBhaXIoc2VlZDIpO1xuXG4gICAgICBzaG91bGQubm90RXF1YWwoa2V5UGFpcjEucHViLCBrZXlQYWlyMi5wdWIpO1xuICAgICAgc2hvdWxkLm5vdEVxdWFsKGtleVBhaXIxLnBydiwga2V5UGFpcjIucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdGhlIHNhbWUga2V5IHBhaXIgZm9yIHRoZSBzYW1lIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0gcmFuZG9tQnl0ZXMoMzIpO1xuICAgICAgY29uc3Qga2V5UGFpcjEgPSB1dGlscy5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBjb25zdCBrZXlQYWlyMiA9IHV0aWxzLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcblxuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIxLnB1Yiwga2V5UGFpcjIucHViKTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyMS5wcnYsIGtleVBhaXIyLnBydik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKCknLCAoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IEljcFRyYW5zYWN0aW9uRGF0YTtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGljcFRyYW5zYWN0aW9uRGF0YSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICB1dGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKGRhdGEpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgZXhwaXJ5VGltZScsICgpID0+IHtcbiAgICAgIChkYXRhLmV4cGlyeVRpbWUgPSBEYXRlLm5vdygpKSwgc2hvdWxkLnRocm93cygoKSA9PiB1dGlscy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKGRhdGEpLCAnSW52YWxpZCBleHBpcnkgdGltZScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgZmVlJywgKCkgPT4ge1xuICAgICAgZGF0YS5mZWUgPSAnLTEwMCc7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24oZGF0YSksICdJbnZhbGlkIGZlZSB2YWx1ZScpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgYW1vdW50JywgKCkgPT4ge1xuICAgICAgZGF0YS5hbW91bnQgPSAnMCc7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24oZGF0YSksICdhbW91bnQgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRUcmFuc2FjdGlvbklkKCknLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VuZGVyID0gJzQ3ODY3ZjJjZmI4NTA5NDI3NWM4NDc0MzVmYTEwY2FkNTRhODEzZWJhN2U2YTliYzM1MzhhYTJmNTM3ZjFkNzMnO1xuICAgIGNvbnN0IHJlY2VpdmVyID0gJ2ExYzYwZWZjYTk4OGM0MTFjZDdiYzVlNDgxMzY0YjljOTRjYWViYjI0YzAwZTAxZGIyNjllM2EwNTQxZWU0OTgnO1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IHRyYW5zYWN0aW9uIGhhc2ggZm9yIGFtb3VudCBsZXNzIHRoYW4gMl4zMiAoYW1vdW50ID0gMTAwMCknLCAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFRyYW5zYWN0aW9uID1cbiAgICAgICAgJ2I5MDAwMjY3NzU3MDY0NjE3NDY1NzM4MTgyNmI1NDUyNDE0ZTUzNDE0MzU0NDk0ZjRlYjkwMDA1NmI2MzYxNmU2OTczNzQ2NTcyNWY2OTY0NGEwMDAwMDAwMDAwMDAwMDAyMDEwMTZiNmQ2NTc0Njg2ZjY0NWY2ZTYxNmQ2NTY3NzM2NTZlNjQ1ZjcwNjI2MzYxNzI2NzU4NDAwYTAyMDgwMDEyMDUwYTAzMDhlODA3MWEwMzA4OTA0ZTJhMjIwYTIwYTFjNjBlZmNhOTg4YzQxMWNkN2JjNWU0ODEzNjRiOWM5NGNhZWJiMjRjMDBlMDFkYjI2OWUzYTA1NDFlZTQ5ODNhMGEwODgwODRhOGE5ODhlNGY0YTAxODY2NzM2NTZlNjQ2NTcyNTgxZGE5MDViODZiYmE5YmZlZDE5NGFjOGMxMjM3N2I1ZDQ4ODQ3MTI4ZGJmZmYxMGYwMWFkYjgwZjdmMDI2ZTY5NmU2NzcyNjU3MzczNWY2NTc4NzA2OTcyNzkxYjAwMDAwMDAwMDAwMDAwMDA3MDY5NmU2NzcyNjU3MzczNWY2NTc4NzA2OTcyNjk2NTczODExYjE4NDFkMzU4NjY0NzYyMDAnO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25IYXNoID0gdXRpbHMuZ2V0VHJhbnNhY3Rpb25JZCh1bnNpZ25lZFRyYW5zYWN0aW9uLCBzZW5kZXIsIHJlY2VpdmVyKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVHJhbnNhY3Rpb25IYXNoID0gJ2JiNTAyZDA1NjZmNzI2ZGEwMmExOTI1NDE1ZjY4Y2I2ZjE3NWNkZDZjYmExZTA5ODIzMTQzMDc4NzE1YjJiYTQnO1xuICAgICAgc2hvdWxkLmVxdWFsKHRyYW5zYWN0aW9uSGFzaCwgZXhwZWN0ZWRUcmFuc2FjdGlvbkhhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgdHJhbnNhY3Rpb24gaGFzaCBmb3IgYW1vdW50IGdyZWF0ZXIgdGhhbiAyXjMyIChhbW91bnQgPSA2OTQ4MTUwMjAwKScsICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHJhbnNhY3Rpb24gPVxuICAgICAgICAnYjkwMDAyNjc3NTcwNjQ2MTc0NjU3MzgxODI2YjU0NTI0MTRlNTM0MTQzNTQ0OTRmNGViOTAwMDU2YjYzNjE2ZTY5NzM3NDY1NzI1ZjY5NjQ0YTAwMDAwMDAwMDAwMDAwMDIwMTAxNmI2ZDY1NzQ2ODZmNjQ1ZjZlNjE2ZDY1Njc3MzY1NmU2NDVmNzA2MjYzNjE3MjY3NTg0MzBhMDIwODAwMTIwODBhMDYwOGI4Yjc5MWYxMTkxYTAzMDg5MDRlMmEyMjBhMjBhMWM2MGVmY2E5ODhjNDExY2Q3YmM1ZTQ4MTM2NGI5Yzk0Y2FlYmIyNGMwMGUwMWRiMjY5ZTNhMDU0MWVlNDk4M2EwYTA4ODBiOGE3ODliZmViZjRhMDE4NjY3MzY1NmU2NDY1NzI1ODFkYTkwNWI4NmJiYTliZmVkMTk0YWM4YzEyMzc3YjVkNDg4NDcxMjhkYmZmZjEwZjAxYWRiODBmN2YwMjZlNjk2ZTY3NzI2NTczNzM1ZjY1Nzg3MDY5NzI3OTFiMDAwMDAwMDAwMDAwMDAwMDcwNjk2ZTY3NzI2NTczNzM1ZjY1Nzg3MDY5NzI2OTY1NzM4MTFiMTg0MWQzOTNkMjQ3M2MwMCc7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbkhhc2ggPSB1dGlscy5nZXRUcmFuc2FjdGlvbklkKHVuc2lnbmVkVHJhbnNhY3Rpb24sIHNlbmRlciwgcmVjZWl2ZXIpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRUcmFuc2FjdGlvbkhhc2ggPSAnMDE2NDExMTEwMDA2ZDQ2NDVjYmNiNTUzYTg0ZWZkZWM2YzQwMjg0N2Y4NTZjYWE5MDkxMTFkODFiYjUxMzU2NSc7XG4gICAgICBzaG91bGQuZXF1YWwodHJhbnNhY3Rpb25IYXNoLCBleHBlY3RlZFRyYW5zYWN0aW9uSGFzaCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|