@bitgo/sdk-core 38.13.0 → 38.16.0
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/api/types.d.ts +6 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +8 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +17 -7
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/defi/defiVault.d.ts +42 -8
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +76 -10
- package/dist/src/bitgo/defi/iDefiVault.d.ts +22 -2
- package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/iDefiVault.js +1 -1
- package/dist/src/bitgo/environments.js +3 -3
- package/dist/src/bitgo/internal/keycard.d.ts +2 -1
- package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
- package/dist/src/bitgo/internal/keycard.js +6 -3
- package/dist/src/bitgo/keychain/iKeychains.d.ts +6 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +24 -10
- package/dist/src/bitgo/safe/iSafe.d.ts +5 -2
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/iSafe.js +1 -1
- package/dist/src/bitgo/safe/safe.d.ts +14 -7
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +105 -29
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +13 -5
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +1 -1
- package/dist/src/bitgo/staking/stakingWallet.d.ts +2 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +14 -1
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +4 -1
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +50 -0
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +112 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +15 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +4 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -6
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +9 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +24 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +88 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +494 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/index.js +2 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +20 -2
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +8 -5
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +33 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +260 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/index.js +2 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +15 -2
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +13 -2
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.js +13 -1
- package/dist/src/bitgo/wallet/BuildParams.d.ts +8 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +6 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts +7 -1
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +25 -2
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.js +72 -18
- package/dist/src/bitgo/wallet/wallet.d.ts +12 -4
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +82 -17
- package/dist/src/bitgo/wallet/wallets.d.ts +6 -0
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +35 -36
- package/dist/test/unit/bitgo/defi/defiVault.js +264 -1
- package/dist/test/unit/bitgo/keychain/keychains.js +43 -1
- package/dist/test/unit/bitgo/safe/safe.js +53 -22
- package/dist/test/unit/bitgo/tss/common.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/common.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/common.js +77 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.js +181 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +70 -1
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +173 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +33 -1
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +10 -10
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts +9 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/safeShareWallet.js +303 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +51 -40
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
|
@@ -128,7 +128,7 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
|
|
|
128
128
|
hardened.derivationPath.should.eql("m/123'");
|
|
129
129
|
hardened.prv.should.not.eql(softDerivedPrv);
|
|
130
130
|
});
|
|
131
|
-
it('parses
|
|
131
|
+
it('parses the hardened derivation path as m/<n> primed', function () {
|
|
132
132
|
(0, src_1.parseDerivedFromParentWithHardenedPath)("m/0'").should.eql(0);
|
|
133
133
|
(0, src_1.parseDerivedFromParentWithHardenedPath)("m/123'").should.eql(123);
|
|
134
134
|
(() => (0, src_1.parseDerivedFromParentWithHardenedPath)('m/0')).should.throw(/derivedFromParentWithHardenedPath/);
|
|
@@ -251,7 +251,7 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
|
|
|
251
251
|
pub: hardened.pub,
|
|
252
252
|
type: 'independent',
|
|
253
253
|
parent: rootKeyId,
|
|
254
|
-
|
|
254
|
+
derivedFromParentWithPath: "m/123'",
|
|
255
255
|
},
|
|
256
256
|
walletPassphrase: passphrase,
|
|
257
257
|
});
|
|
@@ -260,7 +260,7 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
|
|
|
260
260
|
keychainsGetStub.calledOnceWithExactly({ id: rootKeyId }).should.be.true();
|
|
261
261
|
mockBaseCoin.deriveKeyWithSeed.notCalled.should.be.true();
|
|
262
262
|
});
|
|
263
|
-
it('requires
|
|
263
|
+
it('requires derivedFromParentWithPath on the child keychain', async function () {
|
|
264
264
|
const wallet = makeWallet({ safe: 'safe-id-1' });
|
|
265
265
|
keychainsGetStub.resolves({
|
|
266
266
|
id: rootKeyId,
|
|
@@ -279,9 +279,9 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
|
|
|
279
279
|
},
|
|
280
280
|
walletPassphrase: passphrase,
|
|
281
281
|
})
|
|
282
|
-
.should.be.rejectedWith(/missing
|
|
282
|
+
.should.be.rejectedWith(/missing derivedFromParentWithPath/);
|
|
283
283
|
});
|
|
284
|
-
it('fails closed when
|
|
284
|
+
it('fails closed when derivedFromParentWithPath does not match the registered pub', async function () {
|
|
285
285
|
const wallet = makeWallet({ safe: 'safe-id-1' });
|
|
286
286
|
keychainsGetStub.resolves({
|
|
287
287
|
id: rootKeyId,
|
|
@@ -297,13 +297,13 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
|
|
|
297
297
|
pub: hardened.pub,
|
|
298
298
|
type: 'independent',
|
|
299
299
|
parent: rootKeyId,
|
|
300
|
-
|
|
300
|
+
derivedFromParentWithPath: "m/0'",
|
|
301
301
|
},
|
|
302
302
|
walletPassphrase: passphrase,
|
|
303
303
|
})
|
|
304
304
|
.should.be.rejectedWith(src_1.SafeDerivedPublicKeyMismatchError);
|
|
305
305
|
});
|
|
306
|
-
it('rejects a malformed
|
|
306
|
+
it('rejects a malformed derivedFromParentWithPath', async function () {
|
|
307
307
|
const wallet = makeWallet({ safe: 'safe-id-1' });
|
|
308
308
|
keychainsGetStub.resolves({
|
|
309
309
|
id: rootKeyId,
|
|
@@ -319,7 +319,7 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
|
|
|
319
319
|
pub: hardened.pub,
|
|
320
320
|
type: 'independent',
|
|
321
321
|
parent: rootKeyId,
|
|
322
|
-
|
|
322
|
+
derivedFromParentWithPath: "not-a-path'",
|
|
323
323
|
},
|
|
324
324
|
walletPassphrase: passphrase,
|
|
325
325
|
})
|
|
@@ -377,7 +377,7 @@ describe('WCN-1200 safe child getUserPrv root-fetch detour', function () {
|
|
|
377
377
|
pub: 'xpub-wrong-registered-key',
|
|
378
378
|
type: 'independent',
|
|
379
379
|
parent: rootKeyId,
|
|
380
|
-
|
|
380
|
+
derivedFromParentWithPath: "m/123'",
|
|
381
381
|
},
|
|
382
382
|
walletPassphrase: passphrase,
|
|
383
383
|
})
|
|
@@ -668,4 +668,4 @@ describe('WCN-1200 recreateAndSignTSSTransaction safe path', function () {
|
|
|
668
668
|
recreateTxRequest.calledOnce.should.be.true();
|
|
669
669
|
});
|
|
670
670
|
});
|
|
671
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUdldFVzZXJQcnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vd2FsbGV0L3NhZmVHZXRVc2VyUHJ2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLDhDQUF3QztBQUN4Qyx5Q0FheUI7QUFDekIsNkRBQTBEO0FBRTFELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixRQUFRLENBQUMsa0RBQWtELEVBQUU7SUFDM0QsTUFBTSxHQUFHLEdBQ1AsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxlQUFlLEdBQUcsbUJBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBRWhDLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGdCQUFpQyxDQUFDO0lBQ3RDLElBQUksV0FBNEIsQ0FBQztJQUNqQyxJQUFJLFdBQTRCLENBQUM7SUFFakMsTUFBTSxjQUFjLEdBQUc7UUFDckIsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUs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QU0sZUFBZSxDQUFDLDZCQUE2QixDQUNoRSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxFQUM1QixJQUFJLG1CQUFhLEVBQUUsQ0FDcEIsQ0FBQztRQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHtcbiAgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydixcbiAgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQsXG4gIGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoLFxuICBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCxcbiAgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcixcbiAgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yLFxuICBNaXNzaW5nRW5jcnlwdGVkS2V5Y2hhaW5FcnJvcixcbiAgUGVuZGluZ0FwcHJvdmFsLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IsXG4gIFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yLFxuICBXYWxsZXQsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9iYXNlQ29pbic7XG5cbnJlcXVpcmUoJ3Nob3VsZC1zaW5vbicpO1xuXG5kZXNjcmliZSgnV0NOLTEyMDAgc2FmZSBjaGlsZCBnZXRVc2VyUHJ2IHJvb3QtZmV0Y2ggZGV0b3VyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcnYgPVxuICAgICd4cHJ2OXMyMVpyUUgxNDNLM2hla3lOajdUY2lSNFhOWWUxa01qNjhXMmlwakpHTkhFVFdQN280MkFqRG5TUGdLaGRaNHg4TkJBdmFMNzJSclhqdVhOZG1rTXFMRVJaemE3M29ZdWdHdGJMRlhHOGcnO1xuICBjb25zdCBzb2Z0RGVyaXZlZE5vZGUgPSBCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZEJpcDMyKGJpcDMyLmZyb21CYXNlNTgocHJ2KSwgJzEyMycpO1xuICBpZiAoIXNvZnREZXJpdmVkTm9kZS5rZXkucHJpdmF0ZUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZGVyaXZlS2V5V2l0aFNlZWRCaXAzMiB0byByZXR1cm4gYSBwcml2YXRlIGtleScpO1xuICB9XG4gIGNvbnN0IHNvZnREZXJpdmVkUHJ2ID0gc29mdERlcml2ZWROb2RlLmtleS50b0Jhc2U1OCgpO1xuICBjb25zdCBoYXJkZW5lZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYocHJ2LCAnMTIzJyk7XG4gIGNvbnN0IHBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlJztcbiAgY29uc3Qgcm9vdEtleUlkID0gJ3Jvb3Qta2V5LWlkJztcblxuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IGtleWNoYWluc0dldFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IGVuY3J5cHRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBkZWNyeXB0U3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IGJhc2VXYWxsZXREYXRhID0ge1xuICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyd1c2VyLWtleScsICdiYWNrdXAta2V5JywgJ2JpdGdvLWtleSddLFxuICAgIHR5cGU6ICdob3QnLFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGtleWNoYWluc0dldFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZW5jcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBlbmNyeXB0OiBlbmNyeXB0U3R1YixcbiAgICAgIGRlY3J5cHQ6IGRlY3J5cHRTdHViLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS8nKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgZ2V0Q2hhaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0YnRjJyksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdidGMnKSxcbiAgICAgIGdldEZ1bGxOYW1lOiBzaW5vbi5zdHViKCkucmV0dXJucygnVGVzdCBCaXRjb2luJyksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtdKSxcbiAgICAgIH0pLFxuICAgICAgZGVyaXZlS2V5V2l0aFNlZWQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHsga2V5LCBzZWVkIH06IHsga2V5OiBzdHJpbmc7IHNlZWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IHBydiAmJiBzZWVkID09PSAnMTIzJykge1xuICAgICAgICAgIHJldHVybiB7IGtleTogc29mdERlcml2ZWRQcnYsIGRlcml2YXRpb25QYXRoOiAnbS85OTk5OTkvLi4uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleTogYGRlcml2ZWQoJHtrZXl9LCR7c2VlZH0pYCwgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH07XG4gICAgICB9KSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGJ0YyR7cGF0aH1gKSxcbiAgICAgIHN1cHBvcnRzU3Rha2luZzogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLFxuICAgICAga2V5SWRzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJldHVybnMoWzAsIDEsIDJdKSxcbiAgICB9O1xuXG4gICAgZGVjcnlwdFN0dWIuY2FsbHNGYWtlKCh7IGlucHV0LCBwYXNzd29yZCB9OiB7IGlucHV0OiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKHBhc3N3b3JkICE9PSBwYXNzcGhyYXNlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQuc3RhcnRzV2l0aCgnZW5jOicpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5zbGljZSg0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbWFrZVdhbGxldChvdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBXYWxsZXQge1xuICAgIHJldHVybiBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luIGFzIHVua25vd24gYXMgQmFzZUNvaW4sIHtcbiAgICAgIC4uLmJhc2VXYWxsZXREYXRhLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH0pO1xuICB9XG5cbiAgZGVzY3JpYmUoJ3NhZmVEZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdidWlsZHMgdGhlIGhhcmRlbmVkIHBhdGggZnJvbSB0aGUgc2VxdWVudGlhbCBtaW50IGluZGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoMTIzKS5zaG91bGQuZXFsKFwibS8xMjMnXCIpO1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzAnKS5zaG91bGQuZXFsKFwibS8wJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWludGVnZXIgaW5kZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJ2FiYycpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJycpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzFlMicpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFyZGVuZWQtZGVyaXZlcyBhIGNoaWxkIHRoYXQgZGlmZmVycyBmcm9tIHNvZnQgZGVyaXZlS2V5V2l0aFNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBoYXJkZW5lZC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXFsKFwibS8xMjMnXCIpO1xuICAgICAgaGFyZGVuZWQucHJ2LnNob3VsZC5ub3QuZXFsKHNvZnREZXJpdmVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXJzZXMgZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoIGFzIG0vPG4+IHByaW1lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoKFwibS8wJ1wiKS5zaG91bGQuZXFsKDApO1xuICAgICAgcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoXCJtLzEyMydcIikuc2hvdWxkLmVxbCgxMjMpO1xuICAgICAgKCgpID0+IHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoKCdtLzAnKSkuc2hvdWxkLnRocm93KC9kZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgvKTtcbiAgICAgICgoKSA9PiBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCgnbS85OTk5OTkvYS9iJykpLnNob3VsZC50aHJvdygvZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLyk7XG4gICAgICAoKCkgPT4gcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoXCJub3QtYS1wYXRoJ1wiKSkuc2hvdWxkLnRocm93KC9kZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgvKTtcbiAgICAgICgoKSA9PiBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aChcIm0vMCcnXCIpKS5zaG91bGQudGhyb3coL2Rlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Rocm93cyB3aGVuIGNoaWxkIGtleWNoYWluIGhhcyBubyBwYXJlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zKCksIHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnY2hpbGRLZXljaGFpbi5wYXJlbnQgaXMgcmVxdWlyZWQgdG8gZmV0Y2ggdGhlIHJvb3Qga2V5Y2hhaW4nKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvciB3aGVuIHJvb3Qgc291cmNlIGlzIGJhY2t1cCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6ICdlbmM6cm9vdCcsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zKCksIHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHRoZSByb290IGtleWNoYWluIHdoZW4gc291cmNlIGlzIHVzZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290ID0ge1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jOnJvb3QnLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9O1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyhyb290KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQobW9ja0Jhc2VDb2luLmtleWNoYWlucygpLCB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKHJvb3QpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHJvb3Qga2V5Y2hhaW4gaGFzIG5vIGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGZldGNoUm9vdEtleWNoYWluRm9yU2FmZUNoaWxkKG1vY2tCYXNlQ29pbi5rZXljaGFpbnMoKSwge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFVzZXJQcnYnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Rocm93cyB3aGVuIGtleWNoYWluIGhhcyBubyBlbmNyeXB0ZWRQcnYgb24gYSBub24tc2FmZSB3YWxsZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KCk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6ICdwdWInLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBmb3IgYSBub24tc2FmZSB3YWxsZXQgZXZlbiB3aGVuIGtleWNoYWluIGhhcyBwYXJlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KCk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6ICdwdWInLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2tleWNoYWluIGRvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2Jyk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBmb3IgYSBzYWZlIHdhbGxldCB3aGVuIGtleWNoYWluIGhhcyBubyBwYXJlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6ICdwdWInLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdmZXRjaGVzIHJvb3QgYW5kIGhhcmRlbmVkLWRlcml2ZXMgY2hpbGQga2V5IGZvciBzYWZlIG93bmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHtcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgcHViOiBoYXJkZW5lZC5wdWIsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGg6IFwibS8xMjMnXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoaGFyZGVuZWQucHJ2KTtcbiAgICAgIHJlc3VsdC5zaG91bGQubm90LmVxbChzb2Z0RGVyaXZlZFBydik7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IGlkOiByb290S2V5SWQgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIG1vY2tCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZC5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXF1aXJlcyBkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggb24gdGhlIGNoaWxkIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgY2xvc2VkIHdoZW4gZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoIGRvZXMgbm90IG1hdGNoIHRoZSByZWdpc3RlcmVkIHB1YicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6IGhhcmRlbmVkLnB1YixcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aDogXCJtLzAnXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtYWxmb3JtZWQgZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoOiBcIm5vdC1hLXBhdGgnXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgY2xvc2VkIGZvciBUU1Mgc2FmZSBvd25lciBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcm9vdCBwcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScsIG11bHRpc2lnVHlwZTogJ3RzcycgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogJ3VucmVsYXRlZC1jaGlsZC1wdWInLFxuICAgICAgICAgICAgdHlwZTogJ3RzcycsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdjaycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGNsb3NlZCBmb3IgZWQyNTUxOSBvbmNoYWluIHNhZmUgb3duZXIgaW5zdGVhZCBvZiBCSVAzMi1kZXJpdmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCYXNlQ29pbi5nZXRGYW1pbHkucmV0dXJucygneGxtJyk7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScsIGNvaW46ICd0eGxtJyB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoU2FmZU93bmVyU2lnbmluZ05vdEltcGxlbWVudGVkRXJyb3IpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIG1vY2tCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZC5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdhYm9ydHMgbG9jYWxseSB3aGVuIGRlcml2ZWQgcHViIGRvZXMgbm90IG1hdGNoIHJlZ2lzdGVyZWQgY2hpbGQgcHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogJ3hwdWItd3JvbmctcmVnaXN0ZXJlZC1rZXknLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoOiBcIm0vMTIzJ1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoU2FmZURlcml2ZWRQdWJsaWNLZXlNaXNtYXRjaEVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNyeXB0cyBjaGlsZCBlbmNyeXB0ZWRQcnYgYXMtaXMgZm9yIHdhbGxldCBzaGFyZWUgKGhhcmRlbmVkIGNoaWxkIHBydiknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGlsZFBydiA9ICdjaGlsZC1sZXZlbC1wcnYnO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiAnMTIzJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtjaGlsZFBydn1gLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKGNoaWxkUHJ2KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgYXV0by1wb3B1bGF0ZSBjb2xkRGVyaXZhdGlvblNlZWQgd2hlbiBleHBsaWNpdCBwcnYgYW5kIGVuY3J5cHRlZFBydiBhcmUgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoaWxkUHJ2ID0gJ2NoaWxkLWxldmVsLXBydic7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgcHJ2OiBjaGlsZFBydixcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke2NoaWxkUHJ2fWAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoY2hpbGRQcnYpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N0aWxsIGF1dG8tcG9wdWxhdGVzIGNvbGREZXJpdmF0aW9uU2VlZCBmb3IgU01DIHdpdGggcGFyYW1zLnBydiBhbmQgbm8gZW5jcnlwdGVkUHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIHBydixcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ3NtYy1rZXknLFxuICAgICAgICAgIHB1YjogJ3NtYy1wdWInLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoc29mdERlcml2ZWRQcnYpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhcHBseSBhbiBleHBsaWNpdCBjb2xkRGVyaXZhdGlvblNlZWQgYWZ0ZXIgZGVjcnlwdGluZyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KCk7XG4gICAgICBjb25zdCBjaGlsZFBydiA9IHBydjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYoe1xuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGlkOiAnc21jLWtleScsXG4gICAgICAgICAgcHViOiAnc21jLXB1YicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtjaGlsZFBydn1gLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICBjb2xkRGVyaXZhdGlvblNlZWQ6ICcxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKGNoaWxkUHJ2KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZC5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZW5jcnlwdGVkUHJ2IGVycm9yIGJlZm9yZSB3YWxsZXRQYXNzcGhyYXNlIHdoZW4gYm90aCBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoKTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogJ3B1YicsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzdGlsbCBmYWlscyBmb3IgYSBzYWZlIG93bmVyIHNvIHdhbGxldCBzaGFyaW5nIGNhbm5vdCBvYnRhaW4gcm9vdCBtYXRlcmlhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogJ3VzZXIta2V5JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKE1pc3NpbmdFbmNyeXB0ZWRLZXljaGFpbkVycm9yKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduaW5nIGd1YXJkcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbiBhbGxvd3Mgc2FmZSBjaGlsZCBrZXljaGFpbiB3aXRob3V0IGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoe1xuICAgICAgICBzYWZlOiAnc2FmZS1pZC0xJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNoaWxkS2V5Y2hhaW4gPSB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICBjb21tb25LZXljaGFpbjogJ2NrJyxcbiAgICAgIH07XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDoga2V5Y2hhaW5zR2V0U3R1YixcbiAgICAgICAgZ2V0S2V5c0ZvclNpZ25pbmc6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhbY2hpbGRLZXljaGFpbl0pLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWduU3R1YiA9IHNpbm9uLnN0dWIoV2FsbGV0LnByb3RvdHlwZSwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHsgdHhIZXg6ICdzaWduZWQnIH0gYXMgYW55KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoeyB0eEhleDogJ3NpZ25lZCcgfSk7XG4gICAgICBzaWduU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjb25zdCBzaWduQXJncyA9IHNpZ25TdHViLmZpcnN0Q2FsbC5hcmdzWzBdIGFzIHsga2V5Y2hhaW46IHR5cGVvZiBjaGlsZEtleWNoYWluIH07XG4gICAgICBzaWduQXJncy5rZXljaGFpbi5zaG91bGQuZXFsKGNoaWxkS2V5Y2hhaW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24gcmVqZWN0cyB3cm9uZyBwYXNzcGhyYXNlIGVhcmx5IGZvciBzYWZlIGNoaWxkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHtcbiAgICAgICAgc2FmZTogJ3NhZmUtaWQtMScsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGlsZEtleWNoYWluID0ge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdjaycsXG4gICAgICB9O1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG4gICAgICBtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zLnJldHVybnMoe1xuICAgICAgICBnZXQ6IGtleWNoYWluc0dldFN0dWIsXG4gICAgICAgIGdldEtleXNGb3JTaWduaW5nOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoW2NoaWxkS2V5Y2hhaW5dKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2lnblN0dWIgPSBzaW5vbi5zdHViKFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3dyb25nLXBhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbmNvcnJlY3RQYXNzd29yZEVycm9yKTtcblxuICAgICAgc2lnblN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHJhbnNhY3Rpb24gZG9lcyBub3QgcGFzcyB0aGUgcm9vdCBwcnYgaW50byBUU1Mgc2lnbmluZyBmb3IgYSBzYWZlIG93bmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7XG4gICAgICAgIHNhZmU6ICdzYWZlLWlkLTEnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hpbGRLZXljaGFpbiA9IHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIGNvbW1vbktleWNoYWluOiAnY2snLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Jhc2VDb2luLmtleWNoYWlucy5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZEtleWNoYWluXSksXG4gICAgICB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5wcmVzaWduVHJhbnNhY3Rpb24gPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IGFueSkgPT4gcGFyYW1zKTtcbiAgICAgIG1vY2tCYXNlQ29pbi5nZXRNUENBbGdvcml0aG0gPSBzaW5vbi5zdHViKCkucmV0dXJucygnZWRkc2EnKTtcbiAgICAgIGNvbnN0IHNpZ25Uc3NTdHViID0gc2lub24uc3R1YihXYWxsZXQucHJvdG90eXBlIGFzIGFueSwgJ3NpZ25UcmFuc2FjdGlvblRzcycpLnJlc29sdmVzKHsgdHhIZXg6ICdzaWduZWQnIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4UmVxdWVzdElkOiAndHgtcmVxJyB9LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBzaWduVHNzU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1dDTi0xMjAwIHJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uIHNhZmUgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIG1ha2VQZW5kaW5nQXBwcm92YWwod2FsbGV0OiBhbnkpIHtcbiAgICBjb25zdCByZWNyZWF0ZVR4UmVxdWVzdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICB1bnNpZ25lZFR4czogW3sgc2VyaWFsaXplZFR4SGV4OiAnZGVhZGJlZWYnLCBzaWduYWJsZUhleDogJ2FiJywgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH1dLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBuZXcgUGVuZGluZ0FwcHJvdmFsKFxuICAgICAge30gYXMgYW55LFxuICAgICAgd2FsbGV0LmJhc2VDb2luLFxuICAgICAge1xuICAgICAgICBpZDogJ3BhMCcsXG4gICAgICAgIHR4UmVxdWVzdElkOiAndHgtcmVxJyxcbiAgICAgICAgaW5mbzogeyB0eXBlOiAndHJhbnNhY3Rpb25SZXF1ZXN0JywgdHJhbnNhY3Rpb25SZXF1ZXN0OiB7IHJlY2lwaWVudHM6IFtdLCBjb2luU3BlY2lmaWM6IHt9IH0gfSxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nJyxcbiAgICAgICAgY3JlYXRvcjogJ3Rlc3QnLFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXRcbiAgICApO1xuICAgIChwZW5kaW5nQXBwcm92YWwgYXMgYW55KS50c3NVdGlscyA9IHsgcmVjcmVhdGVUeFJlcXVlc3QgfTtcbiAgICByZXR1cm4geyBwZW5kaW5nQXBwcm92YWwsIHJlY3JlYXRlVHhSZXF1ZXN0IH07XG4gIH1cblxuICBpdCgndXNlcyBnZXRVc2VyUHJ2IGZvciB0aGUgc2FmZSBvd25lciAobWludGVyKSBpbnN0ZWFkIG9mIGdldFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGlsZFVzZXJLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICAgIHBhcmVudDogJ3Jvb3Qta2V5LWlkJyxcbiAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdzZWVkJyxcbiAgICB9O1xuICAgIGNvbnN0IGdldEtleXNGb3JTaWduaW5nID0gc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZFVzZXJLZXljaGFpbl0pO1xuICAgIGNvbnN0IGdldFVzZXJQcnYgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2RlY3J5cHRlZFBydicpO1xuICAgIGNvbnN0IGdldFBydiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnc2hvdWxkLW5vdC1iZS1jYWxsZWQnKTtcbiAgICBjb25zdCB3YWxsZXQ6IGFueSA9IHtcbiAgICAgIHNhZmVJZDogKCkgPT4gJ3NhZmUtaWQtMScsXG4gICAgICBnZXRVc2VyUHJ2LFxuICAgICAgZ2V0UHJ2LFxuICAgICAgYmFzZUNvaW46IHtcbiAgICAgICAga2V5Y2hhaW5zOiAoKSA9PiAoeyBnZXRLZXlzRm9yU2lnbmluZyB9KSxcbiAgICAgICAgc3VwcG9ydHNUc3M6ICgpID0+IHRydWUsXG4gICAgICAgIGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VkZHNhJyxcbiAgICAgIH0sXG4gICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCB7IHBlbmRpbmdBcHByb3ZhbCwgcmVjcmVhdGVUeFJlcXVlc3QgfSA9IG1ha2VQZW5kaW5nQXBwcm92YWwod2FsbGV0KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlbmRpbmdBcHByb3ZhbC5yZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihcbiAgICAgIHsgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3MnIH0sXG4gICAgICBuZXcgUmVxdWVzdFRyYWNlcigpXG4gICAgKTtcblxuICAgIHJlc3VsdC5zaG91bGQuZXFsKHsgdHhIZXg6ICdkZWFkYmVlZicgfSk7XG4gICAgZ2V0UHJ2Lm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIGdldEtleXNGb3JTaWduaW5nLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICBnZXRVc2VyUHJ2XG4gICAgICAuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAga2V5Y2hhaW46IGNoaWxkVXNlcktleWNoYWluLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzcycsXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS50cnVlKCk7XG4gICAgcmVjcmVhdGVUeFJlcXVlc3QuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgndXNlcyBnZXRQcnYgZm9yIGEgc2FmZSB3YWxsZXQgc2hhcmVlIChjaGlsZCBlbmNyeXB0ZWRQcnYgYWxyZWFkeSBwcmVzZW50KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGlsZFVzZXJLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICAgIHBhcmVudDogJ3Jvb3Qta2V5LWlkJyxcbiAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdzZWVkJyxcbiAgICAgIGVuY3J5cHRlZFBydjogJ2VuYzpzaGFyZWUtcHJ2JyxcbiAgICB9O1xuICAgIGNvbnN0IGdldEtleXNGb3JTaWduaW5nID0gc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZFVzZXJLZXljaGFpbl0pO1xuICAgIGNvbnN0IGdldFVzZXJQcnYgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ3Nob3VsZC1ub3QtYmUtY2FsbGVkJyk7XG4gICAgY29uc3QgZ2V0UHJ2ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdzaGFyZWUtcHJ2Jyk7XG4gICAgY29uc3Qgd2FsbGV0OiBhbnkgPSB7XG4gICAgICBzYWZlSWQ6ICgpID0+ICdzYWZlLWlkLTEnLFxuICAgICAgZ2V0VXNlclBydixcbiAgICAgIGdldFBydixcbiAgICAgIGJhc2VDb2luOiB7XG4gICAgICAgIGtleWNoYWluczogKCkgPT4gKHsgZ2V0S2V5c0ZvclNpZ25pbmcgfSksXG4gICAgICAgIHN1cHBvcnRzVHNzOiAoKSA9PiB0cnVlLFxuICAgICAgICBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScsXG4gICAgICB9LFxuICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gdW5kZWZpbmVkLFxuICAgIH07XG4gICAgY29uc3QgeyBwZW5kaW5nQXBwcm92YWwsIHJlY3JlYXRlVHhSZXF1ZXN0IH0gPSBtYWtlUGVuZGluZ0FwcHJvdmFsKHdhbGxldCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWwucmVjcmVhdGVBbmRTaWduVFNTVHJhbnNhY3Rpb24oXG4gICAgICB7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9LFxuICAgICAgbmV3IFJlcXVlc3RUcmFjZXIoKVxuICAgICk7XG5cbiAgICByZXN1bHQuc2hvdWxkLmVxbCh7IHR4SGV4OiAnZGVhZGJlZWYnIH0pO1xuICAgIGdldFVzZXJQcnYubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgZ2V0UHJ2LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIHJlY3JlYXRlVHhSZXF1ZXN0LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
671
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUdldFVzZXJQcnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vd2FsbGV0L3NhZmVHZXRVc2VyUHJ2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsNkNBQStCO0FBQy9CLDhDQUF3QztBQUN4Qyx5Q0FheUI7QUFDekIsNkRBQTBEO0FBRTFELE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4QixRQUFRLENBQUMsa0RBQWtELEVBQUU7SUFDM0QsTUFBTSxHQUFHLEdBQ1AsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxlQUFlLEdBQUcsbUJBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBRWhDLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGdCQUFpQyxDQUFDO0lBQ3RDLElBQUksV0FBNEIsQ0FBQztJQUNqQyxJQUFJLFdBQTRCLENBQUM7SUFFakMsTUFBTSxjQUFjLEdBQUc7UUFDckIsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1FBQzdDLElBQUksRUFBRSxLQUFLO1FBQ1gsWUFBWSxFQUFFLFNBQVM7UUFDdkIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztJQUVGLFVBQVUsQ0FBQztRQUNULGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFM0IsU0FBUyxHQUFHO1lBQ1YsT0FBTyxFQUFFLFdBQVc7WUFDcEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUM7WUFDcEQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtTQUMvQixDQUFDO1FBRUYsWUFBWSxHQUFHO1lBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN0QyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDakQsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLEdBQUcsRUFBRSxnQkFBZ0I7Z0JBQ3JCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2FBQzdDLENBQUM7WUFDRixpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFpQyxFQUFFLEVBQUU7Z0JBQ3pGLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDakUsQ0FBQztnQkFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNuRSxDQUFDLENBQUM7WUFDRixHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMscUNBQXFDLElBQUksRUFBRSxDQUFDO1lBQzFGLGVBQWUsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUM1QyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDN0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEQsQ0FBQztRQUVGLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQXVDLEVBQUUsRUFBRTtZQUNqRixJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsVUFBVSxDQUFDLFlBQXFDLEVBQUU7UUFDekQsT0FBTyxJQUFJLFlBQU0sQ0FBQyxTQUFTLEVBQUUsWUFBbUMsRUFBRTtZQUNoRSxHQUFHLGNBQWM7WUFDakIsR0FBRyxTQUFTO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsSUFBQSxtQ0FBNkIsRUFBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELElBQUEsbUNBQTZCLEVBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRTtZQUNoQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsbUNBQTZCLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDM0YsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLG1DQUE2QixFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ3hGLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxtQ0FBNkIsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRTtZQUN0RSxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtZQUN4RCxJQUFBLDRDQUFzQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBQSw0Q0FBc0MsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw0Q0FBc0MsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUN4RyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsNENBQXNDLEVBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDakgsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDRDQUFzQyxFQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ2hILENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw0Q0FBc0MsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUM1RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLCtCQUErQixFQUFFO1FBQ3hDLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLO1lBQ2xELE1BQU0sSUFBQSxtQ0FBNkIsRUFBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzVELEVBQUUsRUFBRSxXQUFXO2dCQUNmLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsV0FBVzthQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNkRBQTZELENBQUMsQ0FBQztZQUN6RixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxLQUFLO1lBQzFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLFlBQVksRUFBRSxVQUFVO2dCQUN4QixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFBLG1DQUE2QixFQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDNUQsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsV0FBVzthQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsb0NBQThCLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLO1lBQ3ZELE1BQU0sSUFBSSxHQUFHO2dCQUNYLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFlBQVksRUFBRSxVQUFVO2dCQUN4QixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQztZQUNGLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUNBQTZCLEVBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUMzRSxFQUFFLEVBQUUsV0FBVztnQkFDZixNQUFNLEVBQUUsU0FBUztnQkFDakIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxXQUFXO2FBQ2pCLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEtBQUs7WUFDdkQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFBLG1DQUE2QixFQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDNUQsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsV0FBVzthQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksRUFBRTtRQUNyQixFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztZQUN2RSxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUM1QixNQUFNLE1BQU07aUJBQ1QsVUFBVSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsS0FBSztvQkFDVixJQUFJLEVBQUUsYUFBYTtpQkFDcEI7Z0JBQ0QsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSztZQUNwRSxNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUM1QixNQUFNLE1BQU07aUJBQ1QsVUFBVSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsS0FBSztvQkFDVixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsTUFBTSxFQUFFLFNBQVM7aUJBQ2xCO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQzFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUs7WUFDOUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNO2lCQUNULFVBQVUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsSUFBSSxFQUFFLGFBQWE7aUJBQ3BCO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQzFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7WUFDcEUsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3JDLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7b0JBQ2pCLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsU0FBUztvQkFDakIseUJBQXlCLEVBQUUsUUFBUTtpQkFDcEM7Z0JBQ0QsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRSxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSztZQUNsRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNqRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUMsQ0FBQztZQUVILE1BQU0sTUFBTTtpQkFDVCxVQUFVLENBQUM7Z0JBQ1YsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztvQkFDakIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxTQUFTO2lCQUNsQjtnQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2FBQzdCLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrRUFBK0UsRUFBRSxLQUFLO1lBQ3ZGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFO2dCQUMxQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNO2lCQUNULFVBQVUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO29CQUNqQixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLHlCQUF5QixFQUFFLE1BQU07aUJBQ2xDO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx1Q0FBaUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEtBQUs7WUFDdkQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU07aUJBQ1QsVUFBVSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7b0JBQ2pCLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsU0FBUztvQkFDakIseUJBQXlCLEVBQUUsYUFBYTtpQkFDekM7Z0JBQ0QsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRXRFLE1BQU0sTUFBTTtpQkFDVCxVQUFVLENBQUM7Z0JBQ1YsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUcsRUFBRSxxQkFBcUI7b0JBQzFCLElBQUksRUFBRSxLQUFLO29CQUNYLE1BQU0sRUFBRSxTQUFTO29CQUNqQix5QkFBeUIsRUFBRSxLQUFLO29CQUNoQyxjQUFjLEVBQUUsSUFBSTtpQkFDckI7Z0JBQ0QsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlDQUFtQyxDQUFDLENBQUM7WUFDL0QsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEtBQUs7WUFDL0UsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUUvRCxNQUFNLE1BQU07aUJBQ1QsVUFBVSxDQUFDO2dCQUNWLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsV0FBVztvQkFDaEIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxTQUFTO29CQUNqQix5QkFBeUIsRUFBRSxLQUFLO2lCQUNqQztnQkFDRCxnQkFBZ0IsRUFBRSxVQUFVO2FBQzdCLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMseUNBQW1DLENBQUMsQ0FBQztZQUMvRCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QyxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztZQUM3RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNqRCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUMsQ0FBQztZQUVILE1BQU0sTUFBTTtpQkFDVCxVQUFVLENBQUM7Z0JBQ1YsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUcsRUFBRSwyQkFBMkI7b0JBQ2hDLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsU0FBUztvQkFDakIseUJBQXlCLEVBQUUsUUFBUTtpQkFDcEM7Z0JBQ0QsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHVDQUFpQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsS0FBSztZQUNsRixNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUVqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3JDLFFBQVEsRUFBRTtvQkFDUixFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHLEVBQUUsV0FBVztvQkFDaEIsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE1BQU0sRUFBRSxTQUFTO29CQUNqQix5QkFBeUIsRUFBRSxLQUFLO29CQUNoQyxZQUFZLEVBQUUsT0FBTyxRQUFRLEVBQUU7aUJBQ2hDO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7YUFDN0IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBGQUEwRixFQUFFLEtBQUs7WUFDbEcsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFFakQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUNyQyxHQUFHLEVBQUUsUUFBUTtnQkFDYixRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLFdBQVc7b0JBQ2hCLElBQUksRUFBRSxhQUFhO29CQUNuQixNQUFNLEVBQUUsU0FBUztvQkFDakIseUJBQXlCLEVBQUUsS0FBSztvQkFDaEMsWUFBWSxFQUFFLE9BQU8sUUFBUSxFQUFFO2lCQUNoQzthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxRkFBcUYsRUFBRSxLQUFLO1lBQzdGLE1BQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDckMsR0FBRztnQkFDSCxRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFNBQVM7b0JBQ2IsR0FBRyxFQUFFLFNBQVM7b0JBQ2QsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLHlCQUF5QixFQUFFLEtBQUs7aUJBQ2pDO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZFQUE2RSxFQUFFLEtBQUs7WUFDckYsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBRXJCLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQztnQkFDckMsUUFBUSxFQUFFO29CQUNSLEVBQUUsRUFBRSxTQUFTO29CQUNiLEdBQUcsRUFBRSxTQUFTO29CQUNkLElBQUksRUFBRSxhQUFhO29CQUNuQixZQUFZLEVBQUUsT0FBTyxRQUFRLEVBQUU7aUJBQ2hDO2dCQUNELGdCQUFnQixFQUFFLFVBQVU7Z0JBQzVCLGtCQUFrQixFQUFFLEtBQUs7YUFDMUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEtBQUs7WUFDakYsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDNUIsTUFBTSxNQUFNO2lCQUNULFVBQVUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLFdBQVc7b0JBQ2YsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsSUFBSSxFQUFFLGFBQWE7aUJBQ3BCO2FBQ0YsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUU7UUFDbkMsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEtBQUs7WUFDcEYsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDakQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsVUFBVTtnQkFDZCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQix5QkFBeUIsRUFBRSxLQUFLO2FBQ2pDLENBQUMsQ0FBQztZQUVILE1BQU0sTUFBTSxDQUFDLHdCQUF3QixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsbUNBQTZCLENBQUMsQ0FBQztZQUM5RixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxpRkFBaUYsRUFBRSxLQUFLO1lBQ3pGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHO2dCQUNwQixFQUFFLEVBQUUsV0FBVztnQkFDZixHQUFHLEVBQUUsV0FBVztnQkFDaEIsSUFBSSxFQUFFLEtBQWM7Z0JBQ3BCLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixjQUFjLEVBQUUsSUFBSTthQUNyQixDQUFDO1lBQ0YsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN4QixFQUFFLEVBQUUsU0FBUztnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsR0FBRyxFQUFFLGdCQUFnQjtnQkFDckIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzFELENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBTSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQVMsQ0FBQyxDQUFDO1lBRXRHLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLCtCQUErQixDQUFDO2dCQUMxRCxXQUFXLEVBQUUsUUFBUTtnQkFDckIsZ0JBQWdCLEVBQUUsVUFBVTthQUM3QixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQXVDLENBQUM7WUFDbEYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVGQUF1RixFQUFFLEtBQUs7WUFDL0YsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsV0FBVztnQkFDakIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLEVBQUUsRUFBRSxXQUFXO2dCQUNmLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixJQUFJLEVBQUUsS0FBYztnQkFDcEIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLGNBQWMsRUFBRSxJQUFJO2FBQ3JCLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxTQUFTO2dCQUNiLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUM3QixHQUFHLEVBQUUsZ0JBQWdCO2dCQUNyQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDMUQsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFNLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFFakUsTUFBTSxNQUFNO2lCQUNULCtCQUErQixDQUFDO2dCQUMvQixXQUFXLEVBQUUsUUFBUTtnQkFDckIsZ0JBQWdCLEVBQUUsa0JBQWtCO2FBQ3JDLENBQUM7aUJBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsNEJBQXNCLENBQUMsQ0FBQztZQUVsRCxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOEVBQThFLEVBQUUsS0FBSztZQUN0RixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7Z0JBQ3hCLElBQUksRUFBRSxXQUFXO2dCQUNqQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsSUFBSSxFQUFFLEtBQUs7YUFDWixDQUFDLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRztnQkFDcEIsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLElBQUksRUFBRSxLQUFjO2dCQUNwQixNQUFNLEVBQUUsU0FBUztnQkFDakIsY0FBYyxFQUFFLElBQUk7YUFDckIsQ0FBQztZQUNGLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFO2dCQUMxQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsR0FBRyxFQUFFLFVBQVU7YUFDaEIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLEdBQUcsRUFBRSxnQkFBZ0I7Z0JBQ3JCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMxRCxDQUFDLENBQUM7WUFDSCxZQUFZLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RixZQUFZLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFNLENBQUMsU0FBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRTVHLE1BQU0sTUFBTTtpQkFDVCxlQUFlLENBQUM7Z0JBQ2YsZ0JBQWdCLEVBQUUsVUFBVTtnQkFDNUIsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRTthQUN0QyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlDQUFtQyxDQUFDLENBQUM7WUFDL0QsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxrREFBa0QsRUFBRTtJQUMzRCxTQUFTLENBQUM7UUFDUixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLG1CQUFtQixDQUFDLE1BQVc7UUFDdEMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQzlDLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFdBQVcsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4RixZQUFZLEVBQUUsRUFBRTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLHFCQUFlLENBQ3pDLEVBQVMsRUFDVCxNQUFNLENBQUMsUUFBUSxFQUNmO1lBQ0UsRUFBRSxFQUFFLEtBQUs7WUFDVCxXQUFXLEVBQUUsUUFBUTtZQUNyQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUM5RixLQUFLLEVBQUUsU0FBUztZQUNoQixPQUFPLEVBQUUsTUFBTTtTQUNULEVBQ1IsTUFBTSxDQUNQLENBQUM7UUFDRCxlQUF1QixDQUFDLFFBQVEsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUM7UUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztRQUN2RSxNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLEVBQUUsRUFBRSxXQUFXO1lBQ2YsR0FBRyxFQUFFLFdBQVc7WUFDaEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxNQUFNLEVBQUUsYUFBYTtZQUNyQix5QkFBeUIsRUFBRSxNQUFNO1NBQ2xDLENBQUM7UUFDRixNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDN0QsTUFBTSxNQUFNLEdBQVE7WUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVc7WUFDekIsVUFBVTtZQUNWLE1BQU07WUFDTixRQUFRLEVBQUU7Z0JBQ1IsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN4QyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtnQkFDdkIsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU87YUFDL0I7WUFDRCxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1NBQ3JDLENBQUM7UUFDRixNQUFNLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0UsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQUMsNkJBQTZCLENBQ2hFLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEVBQzVCLElBQUksbUJBQWEsRUFBRSxDQUNwQixDQUFDO1FBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsVUFBVTthQUNQLHFCQUFxQixDQUFDO1lBQ3JCLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsZ0JBQWdCLEVBQUUsTUFBTTtTQUN6QixDQUFDO2FBQ0QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1FBQ25GLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsRUFBRSxFQUFFLFdBQVc7WUFDZixHQUFHLEVBQUUsV0FBVztZQUNoQixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLHlCQUF5QixFQUFFLE1BQU07WUFDakMsWUFBWSxFQUFFLGdCQUFnQjtTQUMvQixDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sTUFBTSxHQUFRO1lBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXO1lBQ3pCLFVBQVU7WUFDVixNQUFNO1lBQ04sUUFBUSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztnQkFDeEMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7Z0JBQ3ZCLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPO2FBQy9CO1lBQ0QsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztTQUNyQyxDQUFDO1FBQ0YsTUFBTSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLDZCQUE2QixDQUNoRSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxFQUM1QixJQUFJLG1CQUFhLEVBQUUsQ0FDcEIsQ0FBQztRQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHtcbiAgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydixcbiAgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQsXG4gIGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoLFxuICBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCxcbiAgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcixcbiAgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yLFxuICBNaXNzaW5nRW5jcnlwdGVkS2V5Y2hhaW5FcnJvcixcbiAgUGVuZGluZ0FwcHJvdmFsLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IsXG4gIFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yLFxuICBXYWxsZXQsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby9iYXNlQ29pbic7XG5cbnJlcXVpcmUoJ3Nob3VsZC1zaW5vbicpO1xuXG5kZXNjcmliZSgnV0NOLTEyMDAgc2FmZSBjaGlsZCBnZXRVc2VyUHJ2IHJvb3QtZmV0Y2ggZGV0b3VyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcnYgPVxuICAgICd4cHJ2OXMyMVpyUUgxNDNLM2hla3lOajdUY2lSNFhOWWUxa01qNjhXMmlwakpHTkhFVFdQN280MkFqRG5TUGdLaGRaNHg4TkJBdmFMNzJSclhqdVhOZG1rTXFMRVJaemE3M29ZdWdHdGJMRlhHOGcnO1xuICBjb25zdCBzb2Z0RGVyaXZlZE5vZGUgPSBCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZEJpcDMyKGJpcDMyLmZyb21CYXNlNTgocHJ2KSwgJzEyMycpO1xuICBpZiAoIXNvZnREZXJpdmVkTm9kZS5rZXkucHJpdmF0ZUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgZGVyaXZlS2V5V2l0aFNlZWRCaXAzMiB0byByZXR1cm4gYSBwcml2YXRlIGtleScpO1xuICB9XG4gIGNvbnN0IHNvZnREZXJpdmVkUHJ2ID0gc29mdERlcml2ZWROb2RlLmtleS50b0Jhc2U1OCgpO1xuICBjb25zdCBoYXJkZW5lZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYocHJ2LCAnMTIzJyk7XG4gIGNvbnN0IHBhc3NwaHJhc2UgPSAndGVzdC1wYXNzcGhyYXNlJztcbiAgY29uc3Qgcm9vdEtleUlkID0gJ3Jvb3Qta2V5LWlkJztcblxuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IGtleWNoYWluc0dldFN0dWI6IHNpbm9uLlNpbm9uU3R1YjtcbiAgbGV0IGVuY3J5cHRTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBkZWNyeXB0U3R1Yjogc2lub24uU2lub25TdHViO1xuXG4gIGNvbnN0IGJhc2VXYWxsZXREYXRhID0ge1xuICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICBjb2luOiAndGJ0YycsXG4gICAga2V5czogWyd1c2VyLWtleScsICdiYWNrdXAta2V5JywgJ2JpdGdvLWtleSddLFxuICAgIHR5cGU6ICdob3QnLFxuICAgIG11bHRpc2lnVHlwZTogJ29uY2hhaW4nLFxuICAgIGVudGVycHJpc2U6ICdlbnQtaWQnLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGtleWNoYWluc0dldFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZW5jcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG4gICAgZGVjcnlwdFN0dWIgPSBzaW5vbi5zdHViKCk7XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBlbmNyeXB0OiBlbmNyeXB0U3R1YixcbiAgICAgIGRlY3J5cHQ6IGRlY3J5cHRTdHViLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS8nKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgZ2V0Q2hhaW46IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0YnRjJyksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdidGMnKSxcbiAgICAgIGdldEZ1bGxOYW1lOiBzaW5vbi5zdHViKCkucmV0dXJucygnVGVzdCBCaXRjb2luJyksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtdKSxcbiAgICAgIH0pLFxuICAgICAgZGVyaXZlS2V5V2l0aFNlZWQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHsga2V5LCBzZWVkIH06IHsga2V5OiBzdHJpbmc7IHNlZWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IHBydiAmJiBzZWVkID09PSAnMTIzJykge1xuICAgICAgICAgIHJldHVybiB7IGtleTogc29mdERlcml2ZWRQcnYsIGRlcml2YXRpb25QYXRoOiAnbS85OTk5OTkvLi4uJyB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleTogYGRlcml2ZWQoJHtrZXl9LCR7c2VlZH0pYCwgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH07XG4gICAgICB9KSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGF0aDogc3RyaW5nKSA9PiBgaHR0cHM6Ly90ZXN0LmJpdGdvLmNvbS9hcGkvdjIvdGJ0YyR7cGF0aH1gKSxcbiAgICAgIHN1cHBvcnRzU3Rha2luZzogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLFxuICAgICAga2V5SWRzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJldHVybnMoWzAsIDEsIDJdKSxcbiAgICB9O1xuXG4gICAgZGVjcnlwdFN0dWIuY2FsbHNGYWtlKCh7IGlucHV0LCBwYXNzd29yZCB9OiB7IGlucHV0OiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKHBhc3N3b3JkICE9PSBwYXNzcGhyYXNlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQuc3RhcnRzV2l0aCgnZW5jOicpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5zbGljZSg0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbWFrZVdhbGxldChvdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBXYWxsZXQge1xuICAgIHJldHVybiBuZXcgV2FsbGV0KG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luIGFzIHVua25vd24gYXMgQmFzZUNvaW4sIHtcbiAgICAgIC4uLmJhc2VXYWxsZXREYXRhLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH0pO1xuICB9XG5cbiAgZGVzY3JpYmUoJ3NhZmVEZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdidWlsZHMgdGhlIGhhcmRlbmVkIHBhdGggZnJvbSB0aGUgc2VxdWVudGlhbCBtaW50IGluZGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoMTIzKS5zaG91bGQuZXFsKFwibS8xMjMnXCIpO1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzAnKS5zaG91bGQuZXFsKFwibS8wJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWludGVnZXIgaW5kZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJ2FiYycpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJycpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzFlMicpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFyZGVuZWQtZGVyaXZlcyBhIGNoaWxkIHRoYXQgZGlmZmVycyBmcm9tIHNvZnQgZGVyaXZlS2V5V2l0aFNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBoYXJkZW5lZC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXFsKFwibS8xMjMnXCIpO1xuICAgICAgaGFyZGVuZWQucHJ2LnNob3VsZC5ub3QuZXFsKHNvZnREZXJpdmVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXJzZXMgdGhlIGhhcmRlbmVkIGRlcml2YXRpb24gcGF0aCBhcyBtLzxuPiBwcmltZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aChcIm0vMCdcIikuc2hvdWxkLmVxbCgwKTtcbiAgICAgIHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoKFwibS8xMjMnXCIpLnNob3VsZC5lcWwoMTIzKTtcbiAgICAgICgoKSA9PiBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCgnbS8wJykpLnNob3VsZC50aHJvdygvZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLyk7XG4gICAgICAoKCkgPT4gcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoJ20vOTk5OTk5L2EvYicpKS5zaG91bGQudGhyb3coL2Rlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aC8pO1xuICAgICAgKCgpID0+IHBhcnNlRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoKFwibm90LWEtcGF0aCdcIikpLnNob3VsZC50aHJvdygvZGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLyk7XG4gICAgICAoKCkgPT4gcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoXCJtLzAnJ1wiKSkuc2hvdWxkLnRocm93KC9kZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZldGNoUm9vdEtleWNoYWluRm9yU2FmZUNoaWxkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0aHJvd3Mgd2hlbiBjaGlsZCBrZXljaGFpbiBoYXMgbm8gcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQobW9ja0Jhc2VDb2luLmtleWNoYWlucygpLCB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2NoaWxkS2V5Y2hhaW4ucGFyZW50IGlzIHJlcXVpcmVkIHRvIGZldGNoIHRoZSByb290IGtleWNoYWluJyk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkUm9vdEtleWNoYWluU291cmNlRXJyb3Igd2hlbiByb290IHNvdXJjZSBpcyBiYWNrdXAnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jOnJvb3QnLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQobW9ja0Jhc2VDb2luLmtleWNoYWlucygpLCB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB0aGUgcm9vdCBrZXljaGFpbiB3aGVuIHNvdXJjZSBpcyB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdCA9IHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogJ2VuYzpyb290JyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMocm9vdCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoUm9vdEtleWNoYWluRm9yU2FmZUNoaWxkKG1vY2tCYXNlQ29pbi5rZXljaGFpbnMoKSwge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxbChyb290KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiByb290IGtleWNoYWluIGhhcyBubyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zKCksIHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2RvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRVc2VyUHJ2JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0aHJvd3Mgd2hlbiBrZXljaGFpbiBoYXMgbm8gZW5jcnlwdGVkUHJ2IG9uIGEgbm9uLXNhZmUgd2FsbGV0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZm9yIGEgbm9uLXNhZmUgd2FsbGV0IGV2ZW4gd2hlbiBrZXljaGFpbiBoYXMgcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZm9yIGEgc2FmZSB3YWxsZXQgd2hlbiBrZXljaGFpbiBoYXMgbm8gcGFyZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAncHViJyxcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgna2V5Y2hhaW4gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnYnKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmV0Y2hlcyByb290IGFuZCBoYXJkZW5lZC1kZXJpdmVzIGNoaWxkIGtleSBmb3Igc2FmZSBvd25lcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogXCJtLzEyMydcIixcbiAgICAgICAgfSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxbChoYXJkZW5lZC5wcnYpO1xuICAgICAgcmVzdWx0LnNob3VsZC5ub3QuZXFsKHNvZnREZXJpdmVkUHJ2KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHsgaWQ6IHJvb3RLZXlJZCB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlcXVpcmVzIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggb24gdGhlIGNoaWxkIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhaWxzIGNsb3NlZCB3aGVuIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2lzdGVyZWQgcHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogaGFyZGVuZWQucHViLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogXCJtLzAnXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtYWxmb3JtZWQgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6IGhhcmRlbmVkLnB1YixcbiAgICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGg6IFwibm90LWEtcGF0aCdcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9kZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgvKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyBjbG9zZWQgZm9yIFRTUyBzYWZlIG93bmVyIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByb290IHBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgbXVsdGlzaWdUeXBlOiAndHNzJyB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAndW5yZWxhdGVkLWNoaWxkLXB1YicsXG4gICAgICAgICAgICB0eXBlOiAndHNzJyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgICBjb21tb25LZXljaGFpbjogJ2NrJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgY2xvc2VkIGZvciBlZDI1NTE5IG9uY2hhaW4gc2FmZSBvd25lciBpbnN0ZWFkIG9mIEJJUDMyLWRlcml2aW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0Jhc2VDb2luLmdldEZhbWlseS5yZXR1cm5zKCd4bG0nKTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJywgY29pbjogJ3R4bG0nIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmdldFVzZXJQcnYoe1xuICAgICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Fib3J0cyBsb2NhbGx5IHdoZW4gZGVyaXZlZCBwdWIgZG9lcyBub3QgbWF0Y2ggcmVnaXN0ZXJlZCBjaGlsZCBwdWInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgICAgcHViOiAneHB1Yi13cm9uZy1yZWdpc3RlcmVkLWtleScsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBcIm0vMTIzJ1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoU2FmZURlcml2ZWRQdWJsaWNLZXlNaXNtYXRjaEVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNyeXB0cyBjaGlsZCBlbmNyeXB0ZWRQcnYgYXMtaXMgZm9yIHdhbGxldCBzaGFyZWUgKGhhcmRlbmVkIGNoaWxkIHBydiknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGlsZFBydiA9ICdjaGlsZC1sZXZlbC1wcnYnO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7IHNhZmU6ICdzYWZlLWlkLTEnIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIGtleWNoYWluOiB7XG4gICAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiAnMTIzJyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtjaGlsZFBydn1gLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKGNoaWxkUHJ2KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBtb2NrQmFzZUNvaW4uZGVyaXZlS2V5V2l0aFNlZWQubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgYXV0by1wb3B1bGF0ZSBjb2xkRGVyaXZhdGlvblNlZWQgd2hlbiBleHBsaWNpdCBwcnYgYW5kIGVuY3J5cHRlZFBydiBhcmUgcHJlc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoaWxkUHJ2ID0gJ2NoaWxkLWxldmVsLXBydic7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHsgc2FmZTogJ3NhZmUtaWQtMScgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldC5nZXRVc2VyUHJ2KHtcbiAgICAgICAgcHJ2OiBjaGlsZFBydixcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke2NoaWxkUHJ2fWAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoY2hpbGRQcnYpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3N0aWxsIGF1dG8tcG9wdWxhdGVzIGNvbGREZXJpdmF0aW9uU2VlZCBmb3IgU01DIHdpdGggcGFyYW1zLnBydiBhbmQgbm8gZW5jcnlwdGVkUHJ2JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuZ2V0VXNlclBydih7XG4gICAgICAgIHBydixcbiAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICBpZDogJ3NtYy1rZXknLFxuICAgICAgICAgIHB1YjogJ3NtYy1wdWInLFxuICAgICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogJzEyMycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoc29mdERlcml2ZWRQcnYpO1xuICAgICAgbW9ja0Jhc2VDb2luLmRlcml2ZUtleVdpdGhTZWVkLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhcHBseSBhbiBleHBsaWNpdCBjb2xkRGVyaXZhdGlvblNlZWQgYWZ0ZXIgZGVjcnlwdGluZyBlbmNyeXB0ZWRQcnYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KCk7XG4gICAgICBjb25zdCBjaGlsZFBydiA9IHBydjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmdldFVzZXJQcnYoe1xuICAgICAgICBrZXljaGFpbjoge1xuICAgICAgICAgIGlkOiAnc21jLWtleScsXG4gICAgICAgICAgcHViOiAnc21jLXB1YicsXG4gICAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtjaGlsZFBydn1gLFxuICAgICAgICB9LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiBwYXNzcGhyYXNlLFxuICAgICAgICBjb2xkRGVyaXZhdGlvblNlZWQ6ICcxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXFsKGNoaWxkUHJ2KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5kZXJpdmVLZXlXaXRoU2VlZC5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3MgZW5jcnlwdGVkUHJ2IGVycm9yIGJlZm9yZSB3YWxsZXRQYXNzcGhyYXNlIHdoZW4gYm90aCBhcmUgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoKTtcbiAgICAgIGF3YWl0IHdhbGxldFxuICAgICAgICAuZ2V0VXNlclBydih7XG4gICAgICAgICAga2V5Y2hhaW46IHtcbiAgICAgICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgICAgIHB1YjogJ3B1YicsXG4gICAgICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdrZXljaGFpbiBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGVuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RW5jcnlwdGVkVXNlcktleWNoYWluJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzdGlsbCBmYWlscyBmb3IgYSBzYWZlIG93bmVyIHNvIHdhbGxldCBzaGFyaW5nIGNhbm5vdCBvYnRhaW4gcm9vdCBtYXRlcmlhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoeyBzYWZlOiAnc2FmZS1pZC0xJyB9KTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogJ3VzZXIta2V5JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICcxMjMnLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5nZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW4oKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKE1pc3NpbmdFbmNyeXB0ZWRLZXljaGFpbkVycm9yKTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIuY2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduaW5nIGd1YXJkcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZ2V0VXNlcktleUFuZFNpZ25Uc3NUcmFuc2FjdGlvbiBhbGxvd3Mgc2FmZSBjaGlsZCBrZXljaGFpbiB3aXRob3V0IGVuY3J5cHRlZFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoe1xuICAgICAgICBzYWZlOiAnc2FmZS1pZC0xJyxcbiAgICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgICAgdHlwZTogJ2hvdCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNoaWxkS2V5Y2hhaW4gPSB7XG4gICAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgICAgcHViOiAnY2hpbGQtcHViJyxcbiAgICAgICAgdHlwZTogJ3RzcycgYXMgY29uc3QsXG4gICAgICAgIHBhcmVudDogcm9vdEtleUlkLFxuICAgICAgICBjb21tb25LZXljaGFpbjogJ2NrJyxcbiAgICAgIH07XG4gICAgICBrZXljaGFpbnNHZXRTdHViLnJlc29sdmVzKHtcbiAgICAgICAgaWQ6IHJvb3RLZXlJZCxcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY3J5cHRlZFBydjogYGVuYzoke3Bydn1gLFxuICAgICAgICB0eXBlOiAnaW5kZXBlbmRlbnQnLFxuICAgICAgICBwdWI6ICdyb290LXB1YicsXG4gICAgICB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDoga2V5Y2hhaW5zR2V0U3R1YixcbiAgICAgICAgZ2V0S2V5c0ZvclNpZ25pbmc6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhbY2hpbGRLZXljaGFpbl0pLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzaWduU3R1YiA9IHNpbm9uLnN0dWIoV2FsbGV0LnByb3RvdHlwZSwgJ3NpZ25UcmFuc2FjdGlvbicpLnJlc29sdmVzKHsgdHhIZXg6ICdzaWduZWQnIH0gYXMgYW55KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmdldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwoeyB0eEhleDogJ3NpZ25lZCcgfSk7XG4gICAgICBzaWduU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBjb25zdCBzaWduQXJncyA9IHNpZ25TdHViLmZpcnN0Q2FsbC5hcmdzWzBdIGFzIHsga2V5Y2hhaW46IHR5cGVvZiBjaGlsZEtleWNoYWluIH07XG4gICAgICBzaWduQXJncy5rZXljaGFpbi5zaG91bGQuZXFsKGNoaWxkS2V5Y2hhaW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2dldFVzZXJLZXlBbmRTaWduVHNzVHJhbnNhY3Rpb24gcmVqZWN0cyB3cm9uZyBwYXNzcGhyYXNlIGVhcmx5IGZvciBzYWZlIGNoaWxkIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHtcbiAgICAgICAgc2FmZTogJ3NhZmUtaWQtMScsXG4gICAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICAgIHR5cGU6ICdob3QnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGlsZEtleWNoYWluID0ge1xuICAgICAgICBpZDogJ2NoaWxkLWtleScsXG4gICAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICAgIHR5cGU6ICd0c3MnIGFzIGNvbnN0LFxuICAgICAgICBwYXJlbnQ6IHJvb3RLZXlJZCxcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46ICdjaycsXG4gICAgICB9O1xuICAgICAga2V5Y2hhaW5zR2V0U3R1Yi5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiByb290S2V5SWQsXG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IGBlbmM6JHtwcnZ9YCxcbiAgICAgICAgdHlwZTogJ2luZGVwZW5kZW50JyxcbiAgICAgICAgcHViOiAncm9vdC1wdWInLFxuICAgICAgfSk7XG4gICAgICBtb2NrQmFzZUNvaW4ua2V5Y2hhaW5zLnJldHVybnMoe1xuICAgICAgICBnZXQ6IGtleWNoYWluc0dldFN0dWIsXG4gICAgICAgIGdldEtleXNGb3JTaWduaW5nOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoW2NoaWxkS2V5Y2hhaW5dKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2lnblN0dWIgPSBzaW5vbi5zdHViKFdhbGxldC5wcm90b3R5cGUsICdzaWduVHJhbnNhY3Rpb24nKTtcblxuICAgICAgYXdhaXQgd2FsbGV0XG4gICAgICAgIC5nZXRVc2VyS2V5QW5kU2lnblRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ3dyb25nLXBhc3NwaHJhc2UnLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChJbmNvcnJlY3RQYXNzd29yZEVycm9yKTtcblxuICAgICAgc2lnblN0dWIubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBrZXljaGFpbnNHZXRTdHViLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaWduVHJhbnNhY3Rpb24gZG9lcyBub3QgcGFzcyB0aGUgcm9vdCBwcnYgaW50byBUU1Mgc2lnbmluZyBmb3IgYSBzYWZlIG93bmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh7XG4gICAgICAgIHNhZmU6ICdzYWZlLWlkLTEnLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6ICd0c3MnLFxuICAgICAgICB0eXBlOiAnaG90JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hpbGRLZXljaGFpbiA9IHtcbiAgICAgICAgaWQ6ICdjaGlsZC1rZXknLFxuICAgICAgICBwdWI6ICdjaGlsZC1wdWInLFxuICAgICAgICB0eXBlOiAndHNzJyBhcyBjb25zdCxcbiAgICAgICAgcGFyZW50OiByb290S2V5SWQsXG4gICAgICAgIGNvbW1vbktleWNoYWluOiAnY2snLFxuICAgICAgfTtcbiAgICAgIGtleWNoYWluc0dldFN0dWIucmVzb2x2ZXMoe1xuICAgICAgICBpZDogcm9vdEtleUlkLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBgZW5jOiR7cHJ2fWAsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHB1YjogJ3Jvb3QtcHViJyxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Jhc2VDb2luLmtleWNoYWlucy5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBrZXljaGFpbnNHZXRTdHViLFxuICAgICAgICBnZXRLZXlzRm9yU2lnbmluZzogc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZEtleWNoYWluXSksXG4gICAgICB9KTtcbiAgICAgIG1vY2tCYXNlQ29pbi5wcmVzaWduVHJhbnNhY3Rpb24gPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXM6IGFueSkgPT4gcGFyYW1zKTtcbiAgICAgIG1vY2tCYXNlQ29pbi5nZXRNUENBbGdvcml0aG0gPSBzaW5vbi5zdHViKCkucmV0dXJucygnZWRkc2EnKTtcbiAgICAgIGNvbnN0IHNpZ25Uc3NTdHViID0gc2lub24uc3R1YihXYWxsZXQucHJvdG90eXBlIGFzIGFueSwgJ3NpZ25UcmFuc2FjdGlvblRzcycpLnJlc29sdmVzKHsgdHhIZXg6ICdzaWduZWQnIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogcGFzc3BocmFzZSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4UmVxdWVzdElkOiAndHgtcmVxJyB9LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcik7XG4gICAgICBzaWduVHNzU3R1Yi5ub3RDYWxsZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1dDTi0xMjAwIHJlY3JlYXRlQW5kU2lnblRTU1RyYW5zYWN0aW9uIHNhZmUgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIG1ha2VQZW5kaW5nQXBwcm92YWwod2FsbGV0OiBhbnkpIHtcbiAgICBjb25zdCByZWNyZWF0ZVR4UmVxdWVzdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICBhcGlWZXJzaW9uOiAnbGl0ZScsXG4gICAgICB0eFJlcXVlc3RJZDogJ3R4LXJlcScsXG4gICAgICB1bnNpZ25lZFR4czogW3sgc2VyaWFsaXplZFR4SGV4OiAnZGVhZGJlZWYnLCBzaWduYWJsZUhleDogJ2FiJywgZGVyaXZhdGlvblBhdGg6ICdtLzAnIH1dLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBuZXcgUGVuZGluZ0FwcHJvdmFsKFxuICAgICAge30gYXMgYW55LFxuICAgICAgd2FsbGV0LmJhc2VDb2luLFxuICAgICAge1xuICAgICAgICBpZDogJ3BhMCcsXG4gICAgICAgIHR4UmVxdWVzdElkOiAndHgtcmVxJyxcbiAgICAgICAgaW5mbzogeyB0eXBlOiAndHJhbnNhY3Rpb25SZXF1ZXN0JywgdHJhbnNhY3Rpb25SZXF1ZXN0OiB7IHJlY2lwaWVudHM6IFtdLCBjb2luU3BlY2lmaWM6IHt9IH0gfSxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nJyxcbiAgICAgICAgY3JlYXRvcjogJ3Rlc3QnLFxuICAgICAgfSBhcyBhbnksXG4gICAgICB3YWxsZXRcbiAgICApO1xuICAgIChwZW5kaW5nQXBwcm92YWwgYXMgYW55KS50c3NVdGlscyA9IHsgcmVjcmVhdGVUeFJlcXVlc3QgfTtcbiAgICByZXR1cm4geyBwZW5kaW5nQXBwcm92YWwsIHJlY3JlYXRlVHhSZXF1ZXN0IH07XG4gIH1cblxuICBpdCgndXNlcyBnZXRVc2VyUHJ2IGZvciB0aGUgc2FmZSBvd25lciAobWludGVyKSBpbnN0ZWFkIG9mIGdldFBydicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGlsZFVzZXJLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICAgIHBhcmVudDogJ3Jvb3Qta2V5LWlkJyxcbiAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdzZWVkJyxcbiAgICB9O1xuICAgIGNvbnN0IGdldEtleXNGb3JTaWduaW5nID0gc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZFVzZXJLZXljaGFpbl0pO1xuICAgIGNvbnN0IGdldFVzZXJQcnYgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2RlY3J5cHRlZFBydicpO1xuICAgIGNvbnN0IGdldFBydiA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnc2hvdWxkLW5vdC1iZS1jYWxsZWQnKTtcbiAgICBjb25zdCB3YWxsZXQ6IGFueSA9IHtcbiAgICAgIHNhZmVJZDogKCkgPT4gJ3NhZmUtaWQtMScsXG4gICAgICBnZXRVc2VyUHJ2LFxuICAgICAgZ2V0UHJ2LFxuICAgICAgYmFzZUNvaW46IHtcbiAgICAgICAga2V5Y2hhaW5zOiAoKSA9PiAoeyBnZXRLZXlzRm9yU2lnbmluZyB9KSxcbiAgICAgICAgc3VwcG9ydHNUc3M6ICgpID0+IHRydWUsXG4gICAgICAgIGdldE1QQ0FsZ29yaXRobTogKCkgPT4gJ2VkZHNhJyxcbiAgICAgIH0sXG4gICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCB7IHBlbmRpbmdBcHByb3ZhbCwgcmVjcmVhdGVUeFJlcXVlc3QgfSA9IG1ha2VQZW5kaW5nQXBwcm92YWwod2FsbGV0KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlbmRpbmdBcHByb3ZhbC5yZWNyZWF0ZUFuZFNpZ25UU1NUcmFuc2FjdGlvbihcbiAgICAgIHsgd2FsbGV0UGFzc3BocmFzZTogJ3Bhc3MnIH0sXG4gICAgICBuZXcgUmVxdWVzdFRyYWNlcigpXG4gICAgKTtcblxuICAgIHJlc3VsdC5zaG91bGQuZXFsKHsgdHhIZXg6ICdkZWFkYmVlZicgfSk7XG4gICAgZ2V0UHJ2Lm5vdENhbGxlZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIGdldEtleXNGb3JTaWduaW5nLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgICBnZXRVc2VyUHJ2XG4gICAgICAuY2FsbGVkT25jZVdpdGhFeGFjdGx5KHtcbiAgICAgICAga2V5Y2hhaW46IGNoaWxkVXNlcktleWNoYWluLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAncGFzcycsXG4gICAgICB9KVxuICAgICAgLnNob3VsZC5iZS50cnVlKCk7XG4gICAgcmVjcmVhdGVUeFJlcXVlc3QuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgndXNlcyBnZXRQcnYgZm9yIGEgc2FmZSB3YWxsZXQgc2hhcmVlIChjaGlsZCBlbmNyeXB0ZWRQcnYgYWxyZWFkeSBwcmVzZW50KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjaGlsZFVzZXJLZXljaGFpbiA9IHtcbiAgICAgIGlkOiAnY2hpbGQta2V5JyxcbiAgICAgIHB1YjogJ2NoaWxkLXB1YicsXG4gICAgICB0eXBlOiAndHNzJyxcbiAgICAgIHBhcmVudDogJ3Jvb3Qta2V5LWlkJyxcbiAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6ICdzZWVkJyxcbiAgICAgIGVuY3J5cHRlZFBydjogJ2VuYzpzaGFyZWUtcHJ2JyxcbiAgICB9O1xuICAgIGNvbnN0IGdldEtleXNGb3JTaWduaW5nID0gc2lub24uc3R1YigpLnJlc29sdmVzKFtjaGlsZFVzZXJLZXljaGFpbl0pO1xuICAgIGNvbnN0IGdldFVzZXJQcnYgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ3Nob3VsZC1ub3QtYmUtY2FsbGVkJyk7XG4gICAgY29uc3QgZ2V0UHJ2ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdzaGFyZWUtcHJ2Jyk7XG4gICAgY29uc3Qgd2FsbGV0OiBhbnkgPSB7XG4gICAgICBzYWZlSWQ6ICgpID0+ICdzYWZlLWlkLTEnLFxuICAgICAgZ2V0VXNlclBydixcbiAgICAgIGdldFBydixcbiAgICAgIGJhc2VDb2luOiB7XG4gICAgICAgIGtleWNoYWluczogKCkgPT4gKHsgZ2V0S2V5c0ZvclNpZ25pbmcgfSksXG4gICAgICAgIHN1cHBvcnRzVHNzOiAoKSA9PiB0cnVlLFxuICAgICAgICBnZXRNUENBbGdvcml0aG06ICgpID0+ICdlZGRzYScsXG4gICAgICB9LFxuICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gdW5kZWZpbmVkLFxuICAgIH07XG4gICAgY29uc3QgeyBwZW5kaW5nQXBwcm92YWwsIHJlY3JlYXRlVHhSZXF1ZXN0IH0gPSBtYWtlUGVuZGluZ0FwcHJvdmFsKHdhbGxldCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWwucmVjcmVhdGVBbmRTaWduVFNTVHJhbnNhY3Rpb24oXG4gICAgICB7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9LFxuICAgICAgbmV3IFJlcXVlc3RUcmFjZXIoKVxuICAgICk7XG5cbiAgICByZXN1bHQuc2hvdWxkLmVxbCh7IHR4SGV4OiAnZGVhZGJlZWYnIH0pO1xuICAgIGdldFVzZXJQcnYubm90Q2FsbGVkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgZ2V0UHJ2LmNhbGxlZE9uY2VXaXRoRXhhY3RseSh7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIHJlY3JlYXRlVHhSZXF1ZXN0LmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @prettier
|
|
3
|
+
*
|
|
4
|
+
* Safe-wallet SPEND sharing. Mirrors test/unit/bitgo/wallet/safeGetUserPrv.ts (sinon-stubbed,
|
|
5
|
+
* no nock) for the sharing analogue: a safe owner's children are pub-only, so the share path
|
|
6
|
+
* must re-derive the child prv from the root — never the root material.
|
|
7
|
+
*/
|
|
8
|
+
import 'should';
|
|
9
|
+
//# sourceMappingURL=safeShareWallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeShareWallet.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/safeShareWallet.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,QAAQ,CAAC"}
|