@bitgo/sdk-coin-flrp 1.12.5 → 1.13.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.
@@ -47,6 +47,7 @@ const exportInC_1 = require("../resources/transactionData/exportInC");
47
47
  const exportInP_1 = require("../resources/transactionData/exportInP");
48
48
  const importInP_1 = require("../resources/transactionData/importInP");
49
49
  const importInC_1 = require("../resources/transactionData/importInC");
50
+ const multisigDelegationTx_1 = require("../resources/transactionData/multisigDelegationTx");
50
51
  const sdk_core_1 = require("@bitgo/sdk-core");
51
52
  const flarejs_1 = require("@flarenetwork/flarejs");
52
53
  const assert_1 = __importDefault(require("assert"));
@@ -818,7 +819,100 @@ describe('Flrp test cases', function () {
818
819
  const isVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
819
820
  isVerified.should.equal(true);
820
821
  });
822
+ it('should verify delegation transaction when txParams.type is the "stake" intent alias', async () => {
823
+ const txPrebuild = { txHex: multisigDelegationTx_1.MULTISIG_DELEGATION_FULLY_SIGNED_TX_HEX, txInfo: {} };
824
+ const txParams = {
825
+ type: 'stake', // intent-type alias used by wallet-platform; must normalise to AddPermissionlessDelegator
826
+ stakingOptions: {
827
+ nodeID: multisigDelegationTx_1.MULTISIG_DELEGATION_PARAMS.nodeID,
828
+ amount: multisigDelegationTx_1.MULTISIG_DELEGATION_PARAMS.stakeAmount,
829
+ durationSeconds: multisigDelegationTx_1.MULTISIG_DELEGATION_PARAMS.duration * 24 * 60 * 60,
830
+ rewardAddress: multisigDelegationTx_1.MULTISIG_DELEGATION_PARAMS.rewardAddress,
831
+ },
832
+ };
833
+ const isVerified = await basecoin.verifyTransaction({ txParams, txPrebuild });
834
+ isVerified.should.equal(true);
835
+ });
836
+ });
837
+ describe('verifyTransaction with TSS wallet (Avalanche atomic)', () => {
838
+ it('should verify TSS ExportInP when passed serializedTxHex (not signableHex)', async () => {
839
+ // The SDK's signRequestBase now passes serializedTxHex (the full
840
+ // PVM transaction bytes) to verifyTransaction for Avalanche atomic txs,
841
+ // instead of signableHex (a 32-byte SHA-256 hash that can't be parsed).
842
+ // This test confirms verifyTransaction succeeds with the actual tx bytes.
843
+ const txHex = await buildUnsignedExportInP();
844
+ const txPrebuild = { txHex, txInfo: {} };
845
+ const txParams = {
846
+ recipients: [{ address: account_1.ON_CHAIN_TEST_WALLET.user.pChainAddress, amount: '30000000' }],
847
+ type: 'Export',
848
+ locktime: 0,
849
+ };
850
+ const isVerified = await basecoin.verifyTransaction({
851
+ txParams,
852
+ txPrebuild,
853
+ walletType: 'tss',
854
+ });
855
+ isVerified.should.equal(true);
856
+ });
857
+ it('should verify TSS ImportInP when passed serializedTxHex', async () => {
858
+ const txHex = await buildUnsignedImportInP();
859
+ const txPrebuild = { txHex, txInfo: {} };
860
+ const txParams = {
861
+ recipients: [{ address: account_1.ON_CHAIN_TEST_WALLET.user.pChainAddress, amount: '1' }],
862
+ type: 'Import',
863
+ locktime: 0,
864
+ };
865
+ const isVerified = await basecoin.verifyTransaction({
866
+ txParams,
867
+ txPrebuild,
868
+ walletType: 'tss',
869
+ });
870
+ isVerified.should.equal(true);
871
+ });
872
+ it('should verify TSS ImportInC when passed serializedTxHex', async () => {
873
+ const txHex = await buildUnsignedImportInC();
874
+ const txPrebuild = { txHex, txInfo: {} };
875
+ const txParams = {
876
+ recipients: [{ address: '0x96993BAEb6AaE2e06BF95F144e2775D4f8efbD35', amount: '1' }],
877
+ type: 'ImportToC',
878
+ locktime: 0,
879
+ };
880
+ const isVerified = await basecoin.verifyTransaction({
881
+ txParams,
882
+ txPrebuild,
883
+ walletType: 'tss',
884
+ });
885
+ isVerified.should.equal(true);
886
+ });
887
+ it('should verify signablePayload is SHA-256 of serialized tx (sandbox-verified)', async () => {
888
+ // unsignedTx.toBytes() → sha256 → MPC.sign()
889
+ // The signablePayload must be exactly 32 bytes (SHA-256 digest).
890
+ // This is what the WP stores as signableHex and what ecdsaMPCv2.ts
891
+ // must use directly (no keccak256 re-hashing).
892
+ const txHex = await buildUnsignedExportInP();
893
+ const payload = await basecoin.getSignablePayload(txHex);
894
+ // signablePayload is SHA-256(txBody) — always 32 bytes
895
+ assert_1.default.strictEqual(payload.length, 32, 'signablePayload must be 32 bytes (SHA-256)');
896
+ // The serializedTxHex (after stripping 0x) starts with Avalanche codec '0000'
897
+ // This is how ecdsaMPCv2.ts detects atomic transactions
898
+ const rawHex = txHex.startsWith('0x') ? txHex.substring(2) : txHex;
899
+ assert_1.default.ok(rawHex.startsWith('0000'), 'Avalanche atomic tx must start with codec prefix 0000');
900
+ });
901
+ it('should reject a SHA-256 hash as txHex (proves the fix is needed)', async () => {
902
+ const sha256Hash = 'a'.repeat(64);
903
+ const txPrebuild = { txHex: sha256Hash, txInfo: {} };
904
+ const txParams = { recipients: [], type: 'Export', locktime: 0 };
905
+ let threw = false;
906
+ try {
907
+ await basecoin.verifyTransaction({ txParams, txPrebuild, walletType: 'tss' });
908
+ }
909
+ catch (e) {
910
+ threw = true;
911
+ (0, assert_1.default)(e.message.includes('Invalid transaction'), `Expected 'Invalid transaction', got: ${e.message}`);
912
+ }
913
+ (0, assert_1.default)(threw, 'Expected verifyTransaction to throw for SHA-256 hash as txHex');
914
+ });
821
915
  });
822
916
  });
823
917
  });
824
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxycC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9mbHJwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXlDO0FBQ3pDLDhDQUEwRDtBQUMxRCxvQ0FBeUM7QUFDekMsbUNBQXFDO0FBQ3JDLDRDQUEwQztBQUMxQyw0Q0FBdUM7QUFDdkMsa0RBQXlHO0FBQ3pHLHNFQUFxRTtBQUNyRSxzRUFBcUU7QUFDckUsc0VBQXFFO0FBQ3JFLHNFQUFxRTtBQUNyRSw4Q0FBOEY7QUFDOUYsbURBQWtEO0FBRWxELG9EQUE0QjtBQUU1QixRQUFRLENBQUMsaUJBQWlCLEVBQUU7SUFDMUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBRWIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxzQkFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLG1CQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsbUJBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRWhILE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFdBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxRQUFRLEdBQUcsS0FBSyxD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QUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDOUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBGbHJwTGliIGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgRmxycCwgVGZsclAgfSBmcm9tICcuLi8uLi9zcmMvJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBTRUVEX0FDQ09VTlQsIEFDQ09VTlRfMSwgQUNDT1VOVF8yLCBPTl9DSEFJTl9URVNUX1dBTExFVCwgQ09OVEVYVCB9IGZyb20gJy4uL3Jlc291cmNlcy9hY2NvdW50JztcbmltcG9ydCB7IEVYUE9SVF9JTl9DIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9leHBvcnRJbkMnO1xuaW1wb3J0IHsgRVhQT1JUX0lOX1AgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHJhbnNhY3Rpb25EYXRhL2V4cG9ydEluUCc7XG5pbXBvcnQgeyBJTVBPUlRfSU5fUCB9IGZyb20gJy4uL3Jlc291cmNlcy90cmFuc2FjdGlvbkRhdGEvaW1wb3J0SW5QJztcbmltcG9ydCB7IElNUE9SVF9JTl9DIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9pbXBvcnRJbkMnO1xuaW1wb3J0IHsgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlLCBNUENBbGdvcml0aG0gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgc2VjcDI1NmsxIH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IEZscnBDb250ZXh0IH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmRlc2NyaWJlKCdGbHJwIHRlc3QgY2FzZXMnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5OYW1lID0gJ2ZscnAnO1xuICBjb25zdCB0Y29pbk5hbWUgPSAndCcgKyBjb2luTmFtZTtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcblxuICBjb25zdCBrZXljaGFpbnMgPSBbeyBwdWI6IFNFRURfQUNDT1VOVC5wdWJsaWNLZXkgfSwgeyBwdWI6IEFDQ09VTlRfMS5wdWJsaWNLZXkgfSwgeyBwdWI6IEFDQ09VTlRfMi5wdWJsaWNLZXkgfV07XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKGNvaW5OYW1lLCBGbHJwLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIodGNvaW5OYW1lLCBUZmxyUC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKHRjb2luTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgdGhlIGNvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKHRjb2luTmFtZSk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihUZmxyUCk7XG5cbiAgICBsb2NhbEJhc2Vjb2luID0gYml0Z28uY29pbihjb2luTmFtZSk7XG4gICAgbG9jYWxCYXNlY29pbi5zaG91bGQuYmUuYW4uaW5zdGFuY2VvZihGbHJwKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHRjb2luTmFtZSwgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRjb2luTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGZ1bGwgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5nZXRGdWxsTmFtZSgpLnNob3VsZC5lcXVhbCgnVGVzdG5ldCBGbGFyZSBQLUNoYWluJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGJhc2UgZmFjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU5KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gY29pbiBmYW1pbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdmbHJwJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGRlZmF1bHQgbXVsdGlzaWcgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5nZXREZWZhdWx0TXVsdGlzaWdUeXBlKCkuc2hvdWxkLmVxdWFsKCdvbmNoYWluJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3VwcG9ydCBUU1MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGVjZHNhIGFzIE1QQyBhbGdvcml0aG0nLCBmdW5jdGlvbiAoKSB7XG4gICAgKGJhc2Vjb2luLmdldE1QQ0FsZ29yaXRobSgpIGFzIE1QQ0FsZ29yaXRobSkuc2hvdWxkLmVxdWFsKCdlY2RzYScpO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5cGFpcnM6JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXlwYWlyIGZyb20gcmFuZG9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBrZXlQYWlyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdwdWInKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3BydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSBhIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmZyb20oU0VFRF9BQ0NPVU5ULnNlZWQsICdoZXgnKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBrZXlQYWlyLnB1Yi5zaG91bGQuZXF1YWwoU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSk7XG4gICAgICBrZXlQYWlyLnBydi5zaG91bGQuZXF1YWwoU0VFRF9BQ0NPVU5ULnByaXZhdGVLZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKFNFRURfQUNDT1VOVC5wdWJsaWNLZXkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoQUNDT1VOVF8xLnB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGFuIGludmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoJ2ludmFsaWQnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihTRUVEX0FDQ09VTlQucHJpdmF0ZUtleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihBQ0NPVU5UXzEucHJpdmF0ZUtleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGFuIGludmFsaWQgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHJ2KCdpbnZhbGlkJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIGFuIGV4cG9ydCBmcm9tIEMtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogRVhQT1JUX0lOX0MudW5zaWduZWRIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogRVhQT1JUX0lOX0MucHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICBzaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaGFsZlNpZ25lZCcpO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZCA9IChzaWduZWRUeCBhcyBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uKS5oYWxmU2lnbmVkO1xuICAgICAgYXNzZXJ0KGhhbGZTaWduZWQsICdoYWxmU2lnbmVkIHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICBhc3NlcnQoaGFsZlNpZ25lZC50eEhleCwgJ3R4SGV4IHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICBoYWxmU2lnbmVkLnR4SGV4LnNob3VsZC5lcXVhbChFWFBPUlRfSU5fQy5zaWduZWRIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIGFuIGV4cG9ydCBmcm9tIFAtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBwcml2YXRlS2V5c1syXSBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3Qgc2lnbmF0dXJlIHNsb3QgKHNvcnRlZCBhZGRyZXNzIG9yZGVyOiAzMzI5YmU3ZC4uLiBpcyBzbG90IDEpXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogRVhQT1JUX0lOX1AudW5zaWduZWRIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogRVhQT1JUX0lOX1AucHJpdmF0ZUtleXNbMl0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ2hhbGZTaWduZWQnKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWQgPSAoc2lnbmVkVHggYXMgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbikuaGFsZlNpZ25lZDtcbiAgICAgIGFzc2VydChoYWxmU2lnbmVkLCAnaGFsZlNpZ25lZCBzaG91bGQgYmUgZGVmaW5lZCcpO1xuICAgICAgYXNzZXJ0KGhhbGZTaWduZWQudHhIZXgsICd0eEhleCBzaG91bGQgYmUgZGVmaW5lZCcpO1xuICAgICAgaGFsZlNpZ25lZC50eEhleC5zaG91bGQuZXF1YWwoRVhQT1JUX0lOX1AuaGFsZlNpZ250eEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW4gaW1wb3J0IHRvIFAtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBwcml2YXRlS2V5c1syXSBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3Qgc2lnbmF0dXJlIHNsb3QgKHNvcnRlZCBhZGRyZXNzIG9yZGVyOiAzMzI5YmU3ZC4uLiBpcyBzbG90IDEpXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogSU1QT1JUX0lOX1AudW5zaWduZWRIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogSU1QT1JUX0lOX1AucHJpdmF0ZUtleXNbMl0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ2hhbGZTaWduZWQnKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWQgPSAoc2lnbmVkVHggYXMgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbikuaGFsZlNpZ25lZDtcbiAgICAgIGFzc2VydChoYWxmU2lnbmVkLCAnaGFsZlNpZ25lZCBzaG91bGQgYmUgZGVmaW5lZCcpO1xuICAgICAgYXNzZXJ0KGhhbGZTaWduZWQudHhIZXgsICd0eEhleCBzaG91bGQgYmUgZGVmaW5lZCcpO1xuICAgICAgaGFsZlNpZ25lZC50eEhleC5zaG91bGQuZXF1YWwoSU1QT1JUX0lOX1AuaGFsZlNpZ250eEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW4gaW1wb3J0IHRvIEMtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBwcml2YXRlS2V5c1syXSBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3Qgc2lnbmF0dXJlIHNsb3QgKHNvcnRlZCBhZGRyZXNzIG9yZGVyIGluIFVUWE9zKVxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IElNUE9SVF9JTl9DLnVuc2lnbmVkSGV4LFxuICAgICAgICB9LFxuICAgICAgICBwcnY6IElNUE9SVF9JTl9DLnByaXZhdGVLZXlzWzJdLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIHNpZ25lZFR4LnNob3VsZC5oYXZlLnByb3BlcnR5KCdoYWxmU2lnbmVkJyk7XG4gICAgICBjb25zdCBoYWxmU2lnbmVkID0gKHNpZ25lZFR4IGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pLmhhbGZTaWduZWQ7XG4gICAgICBhc3NlcnQoaGFsZlNpZ25lZCwgJ2hhbGZTaWduZWQgc2hvdWxkIGJlIGRlZmluZWQnKTtcbiAgICAgIGFzc2VydChoYWxmU2lnbmVkLnR4SGV4LCAndHhIZXggc2hvdWxkIGJlIGRlZmluZWQnKTtcbiAgICAgIGhhbGZTaWduZWQudHhIZXguc2hvdWxkLmVxdWFsKElNUE9SVF9JTl9DLmhhbGZTaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3Qgc2lnbmluZyB3aXRoIGFuIGludmFsaWQga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IEVYUE9SVF9JTl9DLnVuc2lnbmVkSGV4LFxuICAgICAgICB9LFxuICAgICAgICBwcnY6ICdpbnZhbGlkLWtleScsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24ocGFyYW1zKS5zaG91bGQuYmUucmVqZWN0ZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gTWVzc2FnZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYSBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBGbHJwTGliLktleVBhaXIoeyBwcnY6IFNFRURfQUNDT1VOVC5wcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKFNFRURfQUNDT1VOVC5tZXNzYWdlLCAndXRmOCcpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgYmFzZWNvaW4uc2lnbk1lc3NhZ2Uoa2V5cywgbWVzc2FnZVRvU2lnbi50b1N0cmluZygnaGV4JykpO1xuXG4gICAgICBzaWduYXR1cmUuc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgIHNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDY1KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBhIHJhbmRvbSBtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBGbHJwTGliLktleVBhaXIoKTtcbiAgICAgIGNvbnN0IHB1YktleSA9IGtleVBhaXIuZ2V0S2V5cygpLnB1YjtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VUb1NpZ24gPSBCdWZmZXIuZnJvbShyYW5kb21CeXRlcygzMikpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgYmFzZWNvaW4uc2lnbk1lc3NhZ2Uoa2V5cywgbWVzc2FnZVRvU2lnbi50b1N0cmluZygnaGV4JykpO1xuXG4gICAgICBjb25zdCB2ZXJpZnkgPSBGbHJwTGliLlV0aWxzLnZlcmlmeVNpZ25hdHVyZShcbiAgICAgICAgRmxycExpYi5VdGlscy5zaGEyNTYobWVzc2FnZVRvU2lnbiksXG4gICAgICAgIHNpZ25hdHVyZS5zbGljZSgwLCA2NCksIC8vIFJlbW92ZSByZWNvdmVyeSBieXRlIGZvciB2ZXJpZmljYXRpb25cbiAgICAgICAgQnVmZmVyLmZyb20ocHViS2V5LCAnaGV4JylcbiAgICAgICk7XG4gICAgICB2ZXJpZnkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHdpdGggbWlzc2luZyBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgRmxycExpYi5LZXlQYWlyKHsgcHViOiBTRUVEX0FDQ09VTlQucHVibGljS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKFNFRURfQUNDT1VOVC5tZXNzYWdlLCAndXRmOCcpO1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAuc2lnbk1lc3NhZ2Uoa2V5cywgbWVzc2FnZVRvU2lnbi50b1N0cmluZygnaGV4JykpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cGxhaW4gVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgZXhwb3J0IGZyb20gUC1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIGhhbGZTaWduZWQ6IHsgdHhIZXg6IEVYUE9SVF9JTl9QLmhhbGZTaWdudHhIZXggfSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB0eEV4cGxhaW4uZmVlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWUnKTtcbiAgICAgIHR4RXhwbGFpbi5pbnB1dHMuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlQW1vdW50LnNob3VsZC5lcXVhbCgnMTQzMzk1MjAnKTsgLy8gMHhEQUNEQzAgZnJvbSB0cmFuc2FjdGlvblxuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ1AtY29zdHdvMTA2Z2M1aDVxc3doeWU4ZTBwbXRocTR3emYwZWt2NXFwcHNydnB1flAtY29zdHdvMWN1ZXlnZDdmZDM3ZzU2czQ5azNyc2hxYWtocDZrOHUzYWR6dDZtflAtY29zdHdvMXh2NW11bGdwZTVsdDR0bngybnRueWx3ZTc5YXp1OXZwamE2bHV0J1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBleHBvcnQgZnJvbSBQLWNoYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IEVYUE9SVF9JTl9QLmZ1bGxTaWdudHhIZXggfSk7XG5cbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5pZC5zaG91bGQuZXF1YWwoRVhQT1JUX0lOX1AudHhoYXNoKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZScpO1xuICAgICAgdHhFeHBsYWluLmlucHV0cy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcxNDMzOTUyMCcpOyAvLyAweERBQ0RDMCBmcm9tIHRyYW5zYWN0aW9uXG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnUC1jb3N0d28xMDZnYzVoNXFzd2h5ZThlMHBtdGhxNHd6ZjBla3Y1cXBwc3J2cHV+UC1jb3N0d28xY3VleWdkN2ZkMzdnNTZzNDlrM3JzaHFha2hwNms4dTNhZHp0Nm1+UC1jb3N0d28xeHY1bXVsZ3BlNWx0NHRueDJudG55bHdlNzlhenU5dnBqYTZsdXQnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgaGFsZiBzaWduZWQgaW1wb3J0IHRvIFAtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICBoYWxmU2lnbmVkOiB7IHR4SGV4OiBJTVBPUlRfSU5fUC5oYWxmU2lnbnR4SGV4IH0sXG4gICAgICB9KTtcblxuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgdHhFeHBsYWluLmZlZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzQ4NzM5MDAwJyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0cy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHNpZ25lZCBpbXBvcnQgdG8gUC1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiBJTVBPUlRfSU5fUC5zaWduZWRIZXggfSk7XG5cbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5pZC5zaG91bGQuZXF1YWwoSU1QT1JUX0lOX1AudHhoYXNoKTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZScpO1xuICAgICAgdHhFeHBsYWluLmlucHV0cy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKCc0ODczOTAwMCcpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHMuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHMuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiB0cmFuc2FjdGlvbiBoZXggaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHt9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHRyYW5zYWN0aW9uIGhleCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBpbnZhbGlkIHRyYW5zYWN0aW9uIGhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAnaW52YWxpZCcgfSkuc2hvdWxkLmJlLnJlamVjdGVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYW4gZXhwb3J0IGZyb20gQy1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBFWFBPUlRfSU5fQy5zaWduZWRIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnJyxcbiAgICAgICAgICAgIGFtb3VudDogRVhQT1JUX0lOX0MuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhbiBleHBvcnQgZnJvbSBQLWNoYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEVYUE9SVF9JTl9QLmZ1bGxTaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnJyxcbiAgICAgICAgICAgIGFtb3VudDogRVhQT1JUX0lOX1AuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhbiBpbXBvcnQgdG8gQy1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfSU5fQy5mdWxsU2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogSU1QT1JUX0lOX0MudG8sXG4gICAgICAgICAgICBhbW91bnQ6ICcxJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnSW1wb3J0VG9DJyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYW4gaW1wb3J0IHRvIFAtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogSU1QT1JUX0lOX1Auc2lnbmVkSGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgZXhwb3J0IHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgYW1vdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEVYUE9SVF9JTl9DLnNpZ25lZEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcnLFxuICAgICAgICAgICAgYW1vdW50OiAnOTk5OTk5OTk5OTk5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvVHggdG90YWwgYW1vdW50IC4qIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdG90YWwgYW1vdW50Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggd3JvbmcgdHlwZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBFWFBPUlRfSU5fQy5zaWduZWRIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiAnJyxcbiAgICAgICAgICAgIGFtb3VudDogRVhQT1JUX0lOX0MuYW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdJbXBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUeCB0eXBlIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgdHlwZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRob3V0IHR4SGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCB0eEhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiAnaW52YWxpZGhleCcsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogUmF3IHRyYW5zYWN0aW9uIGlzIG5vdCBoZXggc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IGltcG9ydCB0byBDLWNoYWluIHdpdGhvdXQgcmVjaXBpZW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfSU5fQy5mdWxsU2lnbnR4SGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydFRvQycsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0V4cGVjdGVkIDEgcmVjaXBpZW50IGluIGltcG9ydCB0cmFuc2FjdGlvbicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWFpbm5ldCBQLWNoYWluIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhTRUVEX0FDQ09VTlQuYWRkcmVzc01haW5uZXQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHRlc3RuZXQgUC1jaGFpbiBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoU0VFRF9BQ0NPVU5ULmFkZHJlc3NUZXN0bmV0KS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhcnJheSBvZiBQLWNoYWluIGFkZHJlc3NlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKEVYUE9SVF9JTl9DLnBBZGRyZXNzZXMpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHRpbGRlLXNlcGFyYXRlZCBtdWx0aXNpZyBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbXVsdGlTaWdBZGRyZXNzID0gRVhQT1JUX0lOX0MucEFkZHJlc3Nlcy5qb2luKCd+Jyk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhtdWx0aVNpZ0FkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIEMtY2hhaW4gaGV4IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhFWFBPUlRfSU5fQy5jSGV4QWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbG93ZXJjYXNlIEMtY2hhaW4gYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKElNUE9SVF9JTl9DLnRvLnRvTG93ZXJDYXNlKCkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgdW5kZWZpbmVkIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyh1bmRlZmluZWQpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBpbnZhbGlkIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcygnaW52YWxpZC1hZGRyZXNzJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYXJyYXkgd2l0aCBpbnZhbGlkIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGRyZXNzZXMgPSBbLi4uRVhQT1JUX0lOX0MucEFkZHJlc3NlcywgJ2ludmFsaWQnXTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3Nlcykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdXYWxsZXQgQWRkcmVzcyBWZXJpZmljYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgd2FsbGV0IGFkZHJlc3Mgd2l0aCBtYXRjaGluZyBrZXljaGFpbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlycyA9IFt7IHB1YjogU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSB9LCB7IHB1YjogQUNDT1VOVF8xLnB1YmxpY0tleSB9LCB7IHB1YjogQUNDT1VOVF8yLnB1YmxpY0tleSB9XTtcblxuICAgICAgLy8gRGVyaXZlIGFkZHJlc3NlcyBmcm9tIHB1YmxpYyBrZXlzIHRvIGVuc3VyZSB0aGV5IG1hdGNoXG4gICAgICBjb25zdCBkZXJpdmVkQWRkcmVzc2VzID0ga2V5UGFpcnMubWFwKChrcCkgPT4gbmV3IEZscnBMaWIuS2V5UGFpcih7IHB1Yjoga3AucHViIH0pLmdldEFkZHJlc3MoJ3Rlc3RuZXQnKSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gZGVyaXZlZEFkZHJlc3Nlcy5qb2luKCd+Jyk7XG5cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IGtleVBhaXJzLFxuICAgICAgfSk7XG5cbiAgICAgIGlzVmFsaWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IE1QQyB3YWxsZXQgYWRkcmVzcyB3aXRoIHNpbmdsZSBrZXljaGFpbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBTRUVEX0FDQ09VTlQuYWRkcmVzc1Rlc3RuZXQ7XG5cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICBhZGRyZXNzLFxuICAgICAgICBrZXljaGFpbnM6IFt7IHB1YjogU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSB9XSxcbiAgICAgIH0pO1xuXG4gICAgICBpc1ZhbGlkLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBNUEMgd2FsbGV0IGFkZHJlc3MgdGhhdCBkb2VzIG5vdCBtYXRjaCBrZXljaGFpbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBTRUVEX0FDQ09VTlQuYWRkcmVzc1Rlc3RuZXQ7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBhc3luYyAoKSA9PlxuICAgICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAga2V5Y2hhaW5zOiBbeyBwdWI6IEFDQ09VTlRfMS5wdWJsaWNLZXkgfV0sXG4gICAgICAgICAgfSksXG4gICAgICAgIC9hZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBtdWx0aXNpZyBhZGRyZXNzIHdpdGggd3JvbmcgbnVtYmVyIG9mIGtleWNoYWlucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFR3byB0aWxkZS1zZXBhcmF0ZWQgYWRkcmVzc2VzIGJ1dCBvbmx5IDIga2V5Y2hhaW5zXG4gICAgICBjb25zdCBhZGRyZXNzID0gU0VFRF9BQ0NPVU5ULmFkZHJlc3NUZXN0bmV0ICsgJ34nICsgQUNDT1VOVF8xLmFkZHJlc3NUZXN0bmV0O1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYXN5bmMgKCkgPT5cbiAgICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgIGtleWNoYWluczogW3sgcHViOiBTRUVEX0FDQ09VTlQucHVibGljS2V5IH0sIHsgcHViOiBBQ0NPVU5UXzEucHVibGljS2V5IH1dLFxuICAgICAgICAgIH0pLFxuICAgICAgICAvSW52YWxpZCBrZXljaGFpbnMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGFzeW5jICgpID0+XG4gICAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICdpbnZhbGlkJyxcbiAgICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2ludmFsaWQgYWRkcmVzcy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYWRkcmVzcyBsZW5ndGggZG9lcyBub3QgbWF0Y2gga2V5Y2hhaW4gbGVuZ3RoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IFNFRURfQUNDT1VOVC5hZGRyZXNzVGVzdG5ldDtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYXN5bmMgKCkgPT5cbiAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYWRkcmVzc2VzIGRvIG5vdCBtYXRjaCBrZXljaGFpbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBVc2UgYWRkcmVzc2VzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGtleWNoYWluc1xuICAgICAgY29uc3QgYWRkcmVzcyA9IEVYUE9SVF9JTl9DLnBBZGRyZXNzZXMuam9pbignficpO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PlxuICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlY292ZXJ5IFNpZ25hdHVyZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlY292ZXIgc2lnbmF0dXJlIGZyb20gc2lnbmVkIG1lc3NhZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oU0VFRF9BQ0NPVU5ULm1lc3NhZ2UsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gQnVmZmVyLmZyb20oU0VFRF9BQ0NPVU5ULnByaXZhdGVLZXksICdoZXgnKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IEZscnBMaWIuVXRpbHMuY3JlYXRlU2lnbmF0dXJlKGJhc2Vjb2luLl9zdGF0aWNzQ29pbi5uZXR3b3JrLCBtZXNzYWdlLCBwcml2YXRlS2V5KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gRmxycExpYi5VdGlscy5zaGEyNTYobWVzc2FnZSk7XG4gICAgICBjb25zdCByZWNvdmVyZWRQdWJLZXkgPSBiYXNlY29pbi5yZWNvdmVyeVNpZ25hdHVyZShtZXNzYWdlSGFzaCwgc2lnbmF0dXJlKTtcblxuICAgICAgcmVjb3ZlcmVkUHViS2V5LnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICByZWNvdmVyZWRQdWJLZXkubGVuZ3RoLnNob3VsZC5lcXVhbCgzMyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdEZWxlZ2F0aW9uIFRyYW5zYWN0aW9uIFZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ3ZhbGlkYXRlRGVsZWdhdGlvblR4JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRTdGFraW5nT3B0aW9ucyA9IHtcbiAgICAgICAgbm9kZUlEOiAnTm9kZUlELUFLN3NQQnNaTTlyUXdzZTIzYUxoRUVCUEhaRDVna0xyTCcsXG4gICAgICAgIGFtb3VudDogJzUwMDAwMDAwMDAwMDAwJywgLy8gNTAsMDAwIEZMUiBpbiBuRkxSXG4gICAgICAgIGR1cmF0aW9uU2Vjb25kczogODY0MDAgKiAxNCwgLy8gMTQgZGF5c1xuICAgICAgICByZXdhcmRBZGRyZXNzOiAnQy1jb3N0d28xdXlwNW43NmdqcWx0cmRkdXI3cWxyc210M2t5aDhmbnJtd2hxazcnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdmFsaWRFeHBsYWluZWRUeCA9IHtcbiAgICAgICAgb3V0cHV0QW1vdW50OiAnNTAwMDAwMDAwMDAwMDAnLFxuICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NEZWxlZ2F0b3IsXG4gICAgICAgIGlucHV0czogW10sXG4gICAgICAgIG91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICAgIGZlZTogeyBmZWU6ICcxMDAwJyB9LFxuICAgICAgfTtcblxuICAgICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIGNvcnJlY3QgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHN0YWtpbmdPcHRpb25zOiB2YWxpZFN0YWtpbmdPcHRpb25zIH07XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYmFzZWNvaW4udmFsaWRhdGVEZWxlZ2F0aW9uVHgodHhQYXJhbXMsIHZhbGlkRXhwbGFpbmVkVHgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gc3Rha2luZ09wdGlvbnMgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7fTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiBiYXNlY29pbi52YWxpZGF0ZURlbGVnYXRpb25UeCh0eFBhcmFtcywgdmFsaWRFeHBsYWluZWRUeCksXG4gICAgICAgICAgL0RlbGVnYXRpb24gdHJhbnNhY3Rpb24gcmVxdWlyZXMgc3Rha2luZ09wdGlvbnMvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIG5vZGVJRCBoYXMgaW52YWxpZCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHN0YWtpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICAuLi52YWxpZFN0YWtpbmdPcHRpb25zLFxuICAgICAgICAgICAgbm9kZUlEOiAnSW52YWxpZFByZWZpeC0xMjMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmFzZWNvaW4udmFsaWRhdGVEZWxlZ2F0aW9uVHgodHhQYXJhbXMsIHZhbGlkRXhwbGFpbmVkVHgpLCAvSW52YWxpZCBub2RlSUQgZm9ybWF0Lyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGFtb3VudCBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICBzdGFraW5nT3B0aW9uczoge1xuICAgICAgICAgICAgLi4udmFsaWRTdGFraW5nT3B0aW9ucyxcbiAgICAgICAgICAgIGFtb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYmFzZWNvaW4udmFsaWRhdGVEZWxlZ2F0aW9uVHgodHhQYXJhbXMsIHZhbGlkRXhwbGFpbmVkVHgpLFxuICAgICAgICAgIC9EZWxlZ2F0aW9uIHRyYW5zYWN0aW9uIHJlcXVpcmVzIGFtb3VudC9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gZHVyYXRpb25TZWNvbmRzIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHN0YWtpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICAuLi52YWxpZFN0YWtpbmdPcHRpb25zLFxuICAgICAgICAgICAgZHVyYXRpb25TZWNvbmRzOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiBiYXNlY29pbi52YWxpZGF0ZURlbGVnYXRpb25UeCh0eFBhcmFtcywgdmFsaWRFeHBsYWluZWRUeCksXG4gICAgICAgICAgL0RlbGVnYXRpb24gdHJhbnNhY3Rpb24gcmVxdWlyZXMgZHVyYXRpb25TZWNvbmRzL1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiByZXdhcmRBZGRyZXNzIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHN0YWtpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICAuLi52YWxpZFN0YWtpbmdPcHRpb25zLFxuICAgICAgICAgICAgcmV3YXJkQWRkcmVzczogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYmFzZWNvaW4udmFsaWRhdGVEZWxlZ2F0aW9uVHgodHhQYXJhbXMsIHZhbGlkRXhwbGFpbmVkVHgpLFxuICAgICAgICAgIC9EZWxlZ2F0aW9uIHRyYW5zYWN0aW9uIHJlcXVpcmVzIHJld2FyZEFkZHJlc3MvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIG91dHB1dEFtb3VudCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBhbW91bnQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0geyBzdGFraW5nT3B0aW9uczogdmFsaWRTdGFraW5nT3B0aW9ucyB9O1xuICAgICAgICBjb25zdCBtaXNtYXRjaGVkRXhwbGFpbmVkVHggPSB7XG4gICAgICAgICAgLi4udmFsaWRFeHBsYWluZWRUeCxcbiAgICAgICAgICBvdXRwdXRBbW91bnQ6ICc2MDAwMDAwMDAwMDAwMCcsIC8vIERpZmZlcmVudCBmcm9tIGV4cGVjdGVkIDUwMDAwMDAwMDAwMDAwXG4gICAgICAgIH07XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYmFzZWNvaW4udmFsaWRhdGVEZWxlZ2F0aW9uVHgodHhQYXJhbXMsIG1pc21hdGNoZWRFeHBsYWluZWRUeCksXG4gICAgICAgICAgL0RlbGVnYXRpb24gYW1vdW50IG1pc21hdGNoL1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdNUEMvVFNTIENvaW4tTGV2ZWwgTWV0aG9kcycsICgpID0+IHtcbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0ZmxycCcpO1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRmxycExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuXG4gICAgLy8gSGVscGVyOiBidWlsZCB1bnNpZ25lZCBNUEMgRXhwb3J0SW5DIHR4IGFuZCByZXR1cm4gaXRzIGhleFxuICAgIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVW5zaWduZWRFeHBvcnRJbkMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAuZnJvbVB1YktleShFWFBPUlRfSU5fQy5jSGV4QWRkcmVzcylcbiAgICAgICAgLm5vbmNlKEVYUE9SVF9JTl9DLm5vbmNlKVxuICAgICAgICAuYW1vdW50KEVYUE9SVF9JTl9DLmFtb3VudClcbiAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAubG9ja3RpbWUoMClcbiAgICAgICAgLnRvKE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzcylcbiAgICAgICAgLmZlZShFWFBPUlRfSU5fQy5mZWUpXG4gICAgICAgIC5jb250ZXh0KENPTlRFWFQgYXMgRmxycENvbnRleHQpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgcmV0dXJuIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfVxuXG4gICAgLy8gSGVscGVyOiBidWlsZCB1bnNpZ25lZCBNUEMgSW1wb3J0SW5QIHR4IGFuZCByZXR1cm4gaXRzIGhleFxuICAgIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVW5zaWduZWRJbXBvcnRJblAoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGNvbnN0IG1wY1V0eG8gPSB7XG4gICAgICAgIG91dHB1dElEOiA3LFxuICAgICAgICBhbW91bnQ6ICc1MDAwMDAwMCcsXG4gICAgICAgIHR4aWQ6ICdhTHdWUWVxdW1iaGhqZmhMNlN2Zk02TUdXQUI4d0h3UWZKNjdlb3dFYkFFVXBrdWVOJyxcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICBhZGRyZXNzZXM6IFtPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3NdLFxuICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgbG9ja3RpbWU6ICcwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAubG9ja3RpbWUoMClcbiAgICAgICAgLmZyb21QdWJLZXkoW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIuY29yZXRoQWRkcmVzc10pXG4gICAgICAgIC50byhbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZChJTVBPUlRfSU5fUC5zb3VyY2VDaGFpbklkKVxuICAgICAgICAuZGVjb2RlZFV0eG9zKFttcGNVdHhvXSlcbiAgICAgICAgLmNvbnRleHQoSU1QT1JUX0lOX1AuY29udGV4dCBhcyBGbHJwQ29udGV4dClcbiAgICAgICAgLmZlZVN0YXRlKElNUE9SVF9JTl9QLmZlZVN0YXRlIGFzIGFueSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXI6IGJ1aWxkIHVuc2lnbmVkIE1QQyBFeHBvcnRJblAgdHggYW5kIHJldHVybiBpdHMgaGV4XG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRVbnNpZ25lZEV4cG9ydEluUCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgbXBjVXR4byA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICAgIGFtb3VudDogJzUwMDAwMDAwJyxcbiAgICAgICAgdHhpZDogJ2JnSG5FSjY0dGQ4dTMxYVpyR0RhV2NEcXhaOHZEVjVxR2Q3Ym1TaWZndlVuVVc4djInLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10sXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICBsb2NrdGltZTogJzAnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLmFtb3VudCgnMzAwMDAwMDAnKVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKEVYUE9SVF9JTl9QLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW21wY1V0eG9dKVxuICAgICAgICAuY29udGV4dChFWFBPUlRfSU5fUC5jb250ZXh0IGFzIEZscnBDb250ZXh0KVxuICAgICAgICAuZmVlU3RhdGUoRVhQT1JUX0lOX1AuZmVlU3RhdGUgYXMgYW55KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIH1cblxuICAgIC8vIEhlbHBlcjogYnVpbGQgdW5zaWduZWQgTVBDIEltcG9ydEluQyB0eCBhbmQgcmV0dXJuIGl0cyBoZXhcbiAgICBhc3luYyBmdW5jdGlvbiBidWlsZFVuc2lnbmVkSW1wb3J0SW5DKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBjb25zdCBtcGNVdHhvID0ge1xuICAgICAgICBvdXRwdXRJRDogNyxcbiAgICAgICAgYW1vdW50OiAnMzAwMDAwMDAnLFxuICAgICAgICB0eGlkOiAnblNCd05jZ2ZMYms1UzQyNWIxcWFZYXFUVENpTUNWNzVLVTRGYm5xOFNQVVVxTHEyJyxcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICBhZGRyZXNzZXM6IFtPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3NdLFxuICAgICAgICBvdXRwdXRpZHg6ICcxJyxcbiAgICAgICAgbG9ja3RpbWU6ICcwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRJbXBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCgxKVxuICAgICAgICAubG9ja3RpbWUoMClcbiAgICAgICAgLmZyb21QdWJLZXkoW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10pXG4gICAgICAgIC50bygnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JylcbiAgICAgICAgLmZlZSgnMTAwMDAwMCcpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW21wY1V0eG9dKVxuICAgICAgICAuY29udGV4dChJTVBPUlRfSU5fQy5jb250ZXh0IGFzIEZscnBDb250ZXh0KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIH1cblxuICAgIGRlc2NyaWJlKCdnZXRTaWduYWJsZVBheWxvYWQnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBzaWduYWJsZSBwYXlsb2FkIGZvciBFeHBvcnRJbkMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEV4cG9ydEluQygpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYmFzZWNvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHR4SGV4KTtcblxuICAgICAgICBwYXlsb2FkLnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICAgIHBheWxvYWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBzaWduYWJsZSBwYXlsb2FkIGZvciBJbXBvcnRJblAnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEltcG9ydEluUCgpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYmFzZWNvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHR4SGV4KTtcblxuICAgICAgICBwYXlsb2FkLnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICAgIHBheWxvYWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBzaWduYWJsZSBwYXlsb2FkIGZvciBFeHBvcnRJblAnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEV4cG9ydEluUCgpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYmFzZWNvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHR4SGV4KTtcblxuICAgICAgICBwYXlsb2FkLnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICAgIHBheWxvYWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBzaWduYWJsZSBwYXlsb2FkIGZvciBJbXBvcnRJbkMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEltcG9ydEluQygpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYmFzZWNvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHR4SGV4KTtcblxuICAgICAgICBwYXlsb2FkLnNob3VsZC5iZS5pbnN0YW5jZU9mKEJ1ZmZlcik7XG4gICAgICAgIHBheWxvYWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2FkZFNpZ25hdHVyZVRvVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGNvbXBsZXRlIGdldFNpZ25hYmxlUGF5bG9hZCDihpIgc2lnbiDihpIgYWRkU2lnbmF0dXJlVG9UcmFuc2FjdGlvbiByb3VuZC10cmlwIGZvciBFeHBvcnRJbkMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEV4cG9ydEluQygpO1xuXG4gICAgICAgIC8vIEdldCBzaWduYWJsZSBwYXlsb2FkICh3aGF0IE1QQyBjZXJlbW9ueSB3b3VsZCByZWNlaXZlKVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYmFzZWNvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHR4SGV4KTtcblxuICAgICAgICAvLyBTaW11bGF0ZSBNUEM6IHNpZ24gZXh0ZXJuYWxseVxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzZWNwMjU2azEuc2lnbihwYXlsb2FkLCBCdWZmZXIuZnJvbShPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXksICdoZXgnKSk7XG5cbiAgICAgICAgLy8gSW5qZWN0IHNpZ25hdHVyZVxuICAgICAgICBjb25zdCBzaWduZWRIZXggPSBhd2FpdCBiYXNlY29pbi5hZGRTaWduYXR1cmVUb1RyYW5zYWN0aW9uKHR4SGV4LCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgICAgICAgc2lnbmVkSGV4LnNob3VsZC5ub3QuZXF1YWwodHhIZXgpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBzaWduZWQgdHggY2FuIGJlIHBhcnNlZFxuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2lnbmVkSGV4KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LnRvSnNvbigpLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY29tcGxldGUgcm91bmQtdHJpcCBmb3IgSW1wb3J0SW5QJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRJbXBvcnRJblAoKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGJhc2Vjb2luLmdldFNpZ25hYmxlUGF5bG9hZCh0eEhleCk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNlY3AyNTZrMS5zaWduKHBheWxvYWQsIEJ1ZmZlci5mcm9tKE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSwgJ2hleCcpKTtcbiAgICAgICAgY29uc3Qgc2lnbmVkSGV4ID0gYXdhaXQgYmFzZWNvaW4uYWRkU2lnbmF0dXJlVG9UcmFuc2FjdGlvbih0eEhleCwgQnVmZmVyLmZyb20oc2lnbmF0dXJlKSk7XG5cbiAgICAgICAgc2lnbmVkSGV4LnNob3VsZC5ub3QuZXF1YWwodHhIZXgpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGZhY3RvcnkuZnJvbShzaWduZWRIZXgpLmJ1aWxkKCk7XG4gICAgICAgIHR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC50b0pzb24oKS50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuSW1wb3J0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNvbXBsZXRlIHJvdW5kLXRyaXAgZm9yIEV4cG9ydEluUCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkRXhwb3J0SW5QKCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodHhIZXgpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzZWNwMjU2azEuc2lnbihwYXlsb2FkLCBCdWZmZXIuZnJvbShPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXksICdoZXgnKSk7XG4gICAgICAgIGNvbnN0IHNpZ25lZEhleCA9IGF3YWl0IGJhc2Vjb2luLmFkZFNpZ25hdHVyZVRvVHJhbnNhY3Rpb24odHhIZXgsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuXG4gICAgICAgIHNpZ25lZEhleC5zaG91bGQubm90LmVxdWFsKHR4SGV4KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBmYWN0b3J5LmZyb20oc2lnbmVkSGV4KS5idWlsZCgpO1xuICAgICAgICB0eC5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgudG9Kc29uKCkudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjb21wbGV0ZSByb3VuZC10cmlwIGZvciBJbXBvcnRJbkMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEltcG9ydEluQygpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYmFzZWNvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHR4SGV4KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2VjcDI1NmsxLnNpZ24ocGF5bG9hZCwgQnVmZmVyLmZyb20oT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wcml2YXRlS2V5LCAnaGV4JykpO1xuICAgICAgICBjb25zdCBzaWduZWRIZXggPSBhd2FpdCBiYXNlY29pbi5hZGRTaWduYXR1cmVUb1RyYW5zYWN0aW9uKHR4SGV4LCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcblxuICAgICAgICBzaWduZWRIZXguc2hvdWxkLm5vdC5lcXVhbCh0eEhleCk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgZmFjdG9yeS5mcm9tKHNpZ25lZEhleCkuYnVpbGQoKTtcbiAgICAgICAgdHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LnRvSnNvbigpLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2YWxpZCBzaWduZWQgdHggdmlhIGJvdGggc2lnbigpIGFuZCBhZGRTaWduYXR1cmVUb1RyYW5zYWN0aW9uKCkgZm9yIEV4cG9ydEluQycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleTtcblxuICAgICAgICAvLyBQYXRoIDE6IHNpZ24oKSB2aWEgc2lnblRyYW5zYWN0aW9uXG4gICAgICAgIGNvbnN0IHNpZ25SZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IGF3YWl0IGJ1aWxkVW5zaWduZWRFeHBvcnRJbkMoKSB9LFxuICAgICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNpZ25lZEhleDEgPSAoc2lnblJlc3VsdCBhcyBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uKS5oYWxmU2lnbmVkIS50eEhleCE7XG5cbiAgICAgICAgLy8gUGF0aCAyOiBnZXRTaWduYWJsZVBheWxvYWQg4oaSIGV4dGVybmFsIHNpZ24g4oaSIGFkZFNpZ25hdHVyZVRvVHJhbnNhY3Rpb25cbiAgICAgICAgY29uc3QgdW5zaWduZWRIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkRXhwb3J0SW5DKCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodW5zaWduZWRIZXgpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzZWNwMjU2azEuc2lnbihwYXlsb2FkLCBCdWZmZXIuZnJvbShwcml2YXRlS2V5LCAnaGV4JykpO1xuICAgICAgICBjb25zdCBzaWduZWRIZXgyID0gYXdhaXQgYmFzZWNvaW4uYWRkU2lnbmF0dXJlVG9UcmFuc2FjdGlvbih1bnNpZ25lZEhleCwgQnVmZmVyLmZyb20oc2lnbmF0dXJlKSk7XG5cbiAgICAgICAgLy8gQm90aCBwYXRocyBzaG91bGQgcHJvZHVjZSB2YWxpZCBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggMSBzaWduYXR1cmVcbiAgICAgICAgY29uc3QgdHgxID0gYXdhaXQgZmFjdG9yeS5mcm9tKHNpZ25lZEhleDEpLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4MiA9IGF3YWl0IGZhY3RvcnkuZnJvbShzaWduZWRIZXgyKS5idWlsZCgpO1xuICAgICAgICB0eDEuc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Mi5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgxLnRvSnNvbigpLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgICB0eDIudG9Kc29uKCkudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbiB3aXRoIE1QQyBwYXJhbXMnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBNUEMgRXhwb3J0SW5DIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRFeHBvcnRJbkMoKTtcbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXgsIHR4SW5mbzoge30gfTtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzLCBhbW91bnQ6IEVYUE9SVF9JTl9DLmFtb3VudCB9XSxcbiAgICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgTVBDIEltcG9ydEluUCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkSW1wb3J0SW5QKCk7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4LCB0eEluZm86IHt9IH07XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICAgIHR5cGU6ICdJbXBvcnQnLFxuICAgICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBNUEMgRXhwb3J0SW5QIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRFeHBvcnRJblAoKTtcbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXgsIHR4SW5mbzoge30gfTtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzLCBhbW91bnQ6ICczMDAwMDAwMCcgfV0sXG4gICAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IE1QQyBJbXBvcnRJbkMgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEltcG9ydEluQygpO1xuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCwgdHhJbmZvOiB7fSB9O1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JywgYW1vdW50OiAnMScgfV0sXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydFRvQycsXG4gICAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
918
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxycC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9mbHJwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXlDO0FBQ3pDLDhDQUEwRDtBQUMxRCxvQ0FBeUM7QUFDekMsbUNBQXFDO0FBQ3JDLDRDQUEwQztBQUMxQyw0Q0FBdUM7QUFDdkMsa0RBQXlHO0FBQ3pHLHNFQUFxRTtBQUNyRSxzRUFBcUU7QUFDckUsc0VBQXFFO0FBQ3JFLHNFQUFxRTtBQUNyRSw0RkFHMkQ7QUFDM0QsOENBQThGO0FBQzlGLG1EQUFrRDtBQUVsRCxvREFBNEI7QUFFNUIsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN4QixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsc0JBQVksQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxtQkFBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLG1CQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUVoSCxNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxXQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUU7UUFDaEMsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQUssQ0FBQyxDQUFDO1FBRTdDLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxFQUFFO1FBQy9CLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlCQUF5QixFQUFFO1FBQzVCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkJBQTJCLEVBQUU7UUFDOUIsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkJBQTJCLEVBQUU7UUFDOUIsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUU7UUFDeEMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQkFBb0IsRUFBRTtRQUN2QixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRTtRQUN4QyxRQUFRLENBQUMsZUFBZSxFQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtRQUN6QixFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1lBQ2pDLFFBQVEsQ0FBQyxVQUFVLENBQUMsc0JBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELFFBQVEsQ0FBQyxVQUFVLENBQUMsbUJBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1lBQ2xELFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRTtZQUNsQyxRQUFRLENBQUMsVUFBVSxDQUFDLHNCQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoRSxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRTtZQUNuRCxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlELE1BQU0sTUFBTSxHQUFHO2dCQUNiLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsdUJBQVcsQ0FBQyxXQUFXO2lCQUMvQjtnQkFDRCxHQUFHLEVBQUUsdUJBQVcsQ0FBQyxVQUFVO2FBQzVCLENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFJLFFBQXlDLENBQUMsVUFBVSxDQUFDO1lBQ3pFLElBQUEsZ0JBQU0sRUFBQyxVQUFVLEVBQUUsOEJBQThCLENBQUMsQ0FBQztZQUNuRCxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQ3BELFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlELHVHQUF1RztZQUN2RyxNQUFNLE1BQU0sR0FBRztnQkFDYixVQUFVLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLHVCQUFXLENBQUMsV0FBVztpQkFDL0I7Z0JBQ0QsR0FBRyxFQUFFLHVCQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUNoQyxDQUFDO1lBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QyxNQUFNLFVBQVUsR0FBSSxRQUF5QyxDQUFDLFVBQVUsQ0FBQztZQUN6RSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxFQUFFLDhCQUE4QixDQUFDLENBQUM7WUFDbkQsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUNwRCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM1RCx1R0FBdUc7WUFDdkcsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsVUFBVSxFQUFFO29CQUNWLEtBQUssRUFBRSx1QkFBVyxDQUFDLFdBQVc7aUJBQy9CO2dCQUNELEdBQUcsRUFBRSx1QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDaEMsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUMsTUFBTSxVQUFVLEdBQUksUUFBeUMsQ0FBQyxVQUFVLENBQUM7WUFDekUsSUFBQSxnQkFBTSxFQUFDLFVBQVUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ25ELElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsS0FBSyxFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFDcEQsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUQseUZBQXlGO1lBQ3pGLE1BQU0sTUFBTSxHQUFHO2dCQUNiLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsdUJBQVcsQ0FBQyxXQUFXO2lCQUMvQjtnQkFDRCxHQUFHLEVBQUUsdUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2FBQ2hDLENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFJLFFBQXlDLENBQUMsVUFBVSxDQUFDO1lBQ3pFLElBQUEsZ0JBQU0sRUFBQyxVQUFVLEVBQUUsOEJBQThCLENBQUMsQ0FBQztZQUNuRCxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQ3BELFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3pELE1BQU0sTUFBTSxHQUFHO2dCQUNiLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsdUJBQVcsQ0FBQyxXQUFXO2lCQUMvQjtnQkFDRCxHQUFHLEVBQUUsYUFBYTthQUNuQixDQUFDO1lBRUYsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1FBQzVCLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsc0JBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRWxGLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOEJBQThCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRCxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVsRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQ25DLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHdDQUF3QztZQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FDM0IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxzQkFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDckUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFaEUsTUFBTSxRQUFRO2lCQUNYLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDaEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSx1QkFBVyxDQUFDLGFBQWEsRUFBRTthQUNqRCxDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1lBQzdFLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDN0MsaUpBQWlKLENBQ2xKLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2RSxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSx1QkFBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFFMUYsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtZQUM3RSxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzdDLGlKQUFpSixDQUNsSixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDMUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xELFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSx1QkFBVyxDQUFDLGFBQWEsRUFBRTthQUNqRCxDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hELFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsdUJBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBRXRGLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRSxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZELE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxFQUFFLENBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEUsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEtBQUssRUFBRSx1QkFBVyxDQUFDLFNBQVM7Z0JBQzVCLE1BQU0sRUFBRSxFQUFFO2FBQ1gsQ0FBQztZQUNGLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFVBQVUsRUFBRTtvQkFDVjt3QkFDRSxPQUFPLEVBQUUsRUFBRTt3QkFDWCxNQUFNLEVBQUUsdUJBQVcsQ0FBQyxNQUFNO3FCQUMzQjtpQkFDRjtnQkFDRCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsQ0FBQzthQUNaLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixLQUFLLEVBQUUsdUJBQVcsQ0FBQyxhQUFhO2dCQUNoQyxNQUFNLEVBQUUsRUFBRTthQUNYLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsT0FBTyxFQUFFLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLHVCQUFXLENBQUMsTUFBTTtxQkFDM0I7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLENBQUM7YUFDWixDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUM5RSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5RCxNQUFNLFVBQVUsR0FBRztnQkFDakIsS0FBSyxFQUFFLHVCQUFXLENBQUMsYUFBYTtnQkFDaEMsTUFBTSxFQUFFLEVBQUU7YUFDWCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSx1QkFBVyxDQUFDLEVBQUU7d0JBQ3ZCLE1BQU0sRUFBRSxHQUFHO3FCQUNaO2lCQUNGO2dCQUNELElBQUksRUFBRSxXQUFXO2dCQUNqQixRQUFRLEVBQUUsQ0FBQzthQUNaLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlELE1BQU0sVUFBVSxHQUFHO2dCQUNqQixLQUFLLEVBQUUsdUJBQVcsQ0FBQyxTQUFTO2dCQUM1QixNQUFNLEVBQUUsRUFBRTthQUNYLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUUsRUFBRTtnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsQ0FBQzthQUNaLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFFLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixLQUFLLEVBQUUsdUJBQVcsQ0FBQyxTQUFTO2dCQUM1QixNQUFNLEVBQUUsRUFBRTthQUNYLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUU7b0JBQ1Y7d0JBQ0UsT0FBTyxFQUFFLEVBQUU7d0JBQ1gsTUFBTSxFQUFFLGNBQWM7cUJBQ3ZCO2lCQUNGO2dCQUNELElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxDQUFDO2FBQ1osQ0FBQztZQUVGLE1BQU0sUUFBUTtpQkFDWCxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztpQkFDM0MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsOERBQThELENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqRSxNQUFNLFVBQVUsR0FBRztnQkFDakIsS0FBSyxFQUFFLHVCQUFXLENBQUMsU0FBUztnQkFDNUIsTUFBTSxFQUFFLEVBQUU7YUFDWCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFO29CQUNWO3dCQUNFLE9BQU8sRUFBRSxFQUFFO3dCQUNYLE1BQU0sRUFBRSx1QkFBVyxDQUFDLE1BQU07cUJBQzNCO2lCQUNGO2dCQUNELElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxDQUFDO2FBQ1osQ0FBQztZQUVGLE1BQU0sUUFBUTtpQkFDWCxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztpQkFDM0MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMvRCxNQUFNLFVBQVUsR0FBRztnQkFDakIsTUFBTSxFQUFFLEVBQUU7YUFDWCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLENBQUM7YUFDWixDQUFDO1lBRUYsTUFBTSxRQUFRO2lCQUNYLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO2lCQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3BFLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsTUFBTSxFQUFFLEVBQUU7YUFDWCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLENBQUM7YUFDWixDQUFDO1lBRUYsTUFBTSxRQUFRO2lCQUNYLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO2lCQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFFLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixLQUFLLEVBQUUsdUJBQVcsQ0FBQyxhQUFhO2dCQUNoQyxNQUFNLEVBQUUsRUFBRTthQUNYLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRztnQkFDZixVQUFVLEVBQUUsRUFBRTtnQkFDZCxJQUFJLEVBQUUsV0FBVztnQkFDakIsUUFBUSxFQUFFLENBQUM7YUFDWixDQUFDO1lBRUYsTUFBTSxRQUFRO2lCQUNYLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO2lCQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxRQUFRLENBQUMsY0FBYyxDQUFDLHVCQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtZQUNyRCxNQUFNLGVBQWUsR0FBRyx1QkFBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3hDLFFBQVEsQ0FBQyxjQUFjLENBQUMsdUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFO1lBQzlDLFFBQVEsQ0FBQyxjQUFjLENBQUMsdUJBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFO1lBQzlDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRTtZQUN6QyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUU7WUFDNUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLHVCQUFXLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3pELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtRQUMzQyxFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDcEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxzQkFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLG1CQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsbUJBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBRS9HLHlEQUF5RDtZQUN6RCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMxRyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUM3QyxPQUFPO2dCQUNQLFNBQVMsRUFBRSxRQUFRO2FBQ3BCLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JFLE1BQU0sT0FBTyxHQUFHLHNCQUFZLENBQUMsY0FBYyxDQUFDO1lBRTVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDN0MsT0FBTztnQkFDUCxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxzQkFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQzdDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdFLE1BQU0sT0FBTyxHQUFHLHNCQUFZLENBQUMsY0FBYyxDQUFDO1lBRTVDLE1BQU0sZ0JBQU0sQ0FBQyxPQUFPLENBQ2xCLEtBQUssSUFBSSxFQUFFLENBQ1QsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDdkIsT0FBTztnQkFDUCxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxtQkFBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQzFDLENBQUMsRUFDSiw0QkFBNEIsQ0FDN0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hGLHFEQUFxRDtZQUNyRCxNQUFNLE9BQU8sR0FBRyxzQkFBWSxDQUFDLGNBQWMsR0FBRyxHQUFHLEdBQUcsbUJBQVMsQ0FBQyxjQUFjLENBQUM7WUFFN0UsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FDbEIsS0FBSyxJQUFJLEVBQUUsQ0FDVCxRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUN2QixPQUFPO2dCQUNQLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLHNCQUFZLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsbUJBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUMzRSxDQUFDLEVBQ0osbUJBQW1CLENBQ3BCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRCxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUNsQixLQUFLLElBQUksRUFBRSxDQUNULFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixTQUFTO2FBQ1YsQ0FBQyxFQUNKLGlCQUFpQixDQUNsQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0UsTUFBTSxPQUFPLEdBQUcsc0JBQVksQ0FBQyxjQUFjLENBQUM7WUFFNUMsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUM5QixRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUN2QixPQUFPO2dCQUNQLFNBQVM7YUFDVixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xFLCtDQUErQztZQUMvQyxNQUFNLE9BQU8sR0FBRyx1QkFBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakQsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUM5QixRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUN2QixPQUFPO2dCQUNQLFNBQVM7YUFDVixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM1RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzFELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQVksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3BHLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFM0UsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sbUJBQW1CLEdBQUc7Z0JBQzFCLE1BQU0sRUFBRSwwQ0FBMEM7Z0JBQ2xELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUI7Z0JBQy9DLGVBQWUsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLFVBQVU7Z0JBQ3ZDLGFBQWEsRUFBRSxpREFBaUQ7YUFDakUsQ0FBQztZQUVGLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLFlBQVksRUFBRSxnQkFBZ0I7Z0JBQzlCLElBQUksRUFBRSwwQkFBZSxDQUFDLDBCQUEwQjtnQkFDaEQsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRSxHQUFHO2dCQUNqQixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO2FBQ3JCLENBQUM7WUFFRixFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO2dCQUMxRCxNQUFNLFFBQVEsR0FBRyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO2dCQUN6RCxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUMvRCxnREFBZ0QsQ0FDakQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtnQkFDckQsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsY0FBYyxFQUFFO3dCQUNkLEdBQUcsbUJBQW1CO3dCQUN0QixNQUFNLEVBQUUsbUJBQW1CO3FCQUM1QjtpQkFDRixDQUFDO2dCQUNGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQzFHLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtnQkFDN0MsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsY0FBYyxFQUFFO3dCQUNkLEdBQUcsbUJBQW1CO3dCQUN0QixNQUFNLEVBQUUsU0FBUztxQkFDbEI7aUJBQ0YsQ0FBQztnQkFDRixnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLEVBQy9ELHdDQUF3QyxDQUN6QyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO2dCQUN0RCxNQUFNLFFBQVEsR0FBRztvQkFDZixjQUFjLEVBQUU7d0JBQ2QsR0FBRyxtQkFBbUI7d0JBQ3RCLGVBQWUsRUFBRSxTQUFTO3FCQUMzQjtpQkFDRixDQUFDO2dCQUNGLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsRUFDL0QsaURBQWlELENBQ2xELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7Z0JBQ3BELE1BQU0sUUFBUSxHQUFHO29CQUNmLGNBQWMsRUFBRTt3QkFDZCxHQUFHLG1CQUFtQjt3QkFDdEIsYUFBYSxFQUFFLFNBQVM7cUJBQ3pCO2lCQUNGLENBQUM7Z0JBQ0YsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUMvRCwrQ0FBK0MsQ0FDaEQsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtnQkFDdkUsTUFBTSxRQUFRLEdBQUcsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxxQkFBcUIsR0FBRztvQkFDNUIsR0FBRyxnQkFBZ0I7b0JBQ25CLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSx5Q0FBeUM7aUJBQzFFLENBQUM7Z0JBQ0YsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxFQUNwRSw0QkFBNEIsQ0FDN0IsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsRSw2REFBNkQ7UUFDN0QsS0FBSyxVQUFVLHNCQUFzQjtZQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPO2lCQUN0QixtQkFBbUIsRUFBRTtpQkFDckIsVUFBVSxDQUFDLHVCQUFXLENBQUMsV0FBVyxDQUFDO2lCQUNuQyxLQUFLLENBQUMsdUJBQVcsQ0FBQyxLQUFLLENBQUM7aUJBQ3hCLE1BQU0sQ0FBQyx1QkFBVyxDQUFDLE1BQU0sQ0FBQztpQkFDMUIsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDWixRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUNYLEVBQUUsQ0FBQyw4QkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2lCQUMzQyxHQUFHLENBQUMsdUJBQVcsQ0FBQyxHQUFHLENBQUM7aUJBQ3BCLE9BQU8sQ0FBQyxpQkFBc0IsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELDZEQUE2RDtRQUM3RCxLQUFLLFVBQVUsc0JBQXNCO1lBQ25DLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixJQUFJLEVBQUUsbURBQW1EO2dCQUN6RCxTQUFTLEVBQUUsQ0FBQztnQkFDWixTQUFTLEVBQUUsQ0FBQyw4QkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNwRCxTQUFTLEVBQUUsR0FBRztnQkFDZCxRQUFRLEVBQUUsR0FBRzthQUNkLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRyxPQUFPO2lCQUN0QixtQkFBbUIsRUFBRTtpQkFDckIsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDWixRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUNYLFVBQVUsQ0FBQyxDQUFDLDhCQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDckQsRUFBRSxDQUFDLENBQUMsOEJBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUM3QyxlQUFlLENBQUMsdUJBQVcsQ0FBQyxhQUFhLENBQUM7aUJBQzFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN2QixPQUFPLENBQUMsdUJBQVcsQ0FBQyxPQUFzQixDQUFDO2lCQUMzQyxRQUFRLENBQUMsdUJBQVcsQ0FBQyxRQUFlLENBQUMsQ0FBQztZQUV6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsS0FBSyxVQUFVLHNCQUFzQjtZQUNuQyxNQUFNLE9BQU8sR0FBRztnQkFDZCxRQUFRLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsSUFBSSxFQUFFLG1EQUFtRDtnQkFDekQsU0FBUyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxFQUFFLENBQUMsOEJBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDcEQsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsUUFBUSxFQUFFLEdBQUc7YUFDZCxDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQUcsT0FBTztpQkFDdEIsbUJBQW1CLEVBQUU7aUJBQ3JCLFNBQVMsQ0FBQyxDQUFDLENBQUM7aUJBQ1osUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDWCxVQUFVLENBQUMsQ0FBQyw4QkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3JELE1BQU0sQ0FBQyxVQUFVLENBQUM7aUJBQ2xCLGVBQWUsQ0FBQyx1QkFBVyxDQUFDLGFBQWEsQ0FBQztpQkFDMUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3ZCLE9BQU8sQ0FBQyx1QkFBVyxDQUFDLE9BQXNCLENBQUM7aUJBQzNDLFFBQVEsQ0FBQyx1QkFBVyxDQUFDLFFBQWUsQ0FBQyxDQUFDO1lBRXpDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELDZEQUE2RDtRQUM3RCxLQUFLLFVBQVUsc0JBQXNCO1lBQ25DLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixJQUFJLEVBQUUsa0RBQWtEO2dCQUN4RCxTQUFTLEVBQUUsQ0FBQztnQkFDWixTQUFTLEVBQUUsQ0FBQyw4QkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNwRCxTQUFTLEVBQUUsR0FBRztnQkFDZCxRQUFRLEVBQUUsR0FBRzthQUNkLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRyxPQUFPO2lCQUN0QixtQkFBbUIsRUFBRTtpQkFDckIsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDWixRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUNYLFVBQVUsQ0FBQyxDQUFDLDhCQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDckQsRUFBRSxDQUFDLDRDQUE0QyxDQUFDO2lCQUNoRCxHQUFHLENBQUMsU0FBUyxDQUFDO2lCQUNkLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN2QixPQUFPLENBQUMsdUJBQVcsQ0FBQyxPQUFzQixDQUFDLENBQUM7WUFFL0MsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBRUQsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQzVELE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXpELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDNUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxzQkFBc0IsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFekQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUM1RCxNQUFNLEtBQUssR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUV6RCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQzVELE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXpELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtZQUN6QyxFQUFFLENBQUMsZ0dBQWdHLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQzlHLE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFFN0MseURBQXlEO2dCQUN6RCxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFekQsZ0NBQWdDO2dCQUNoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLG1CQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFFMUcsbUJBQW1CO2dCQUNuQixNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRWxDLGlDQUFpQztnQkFDakMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN4RCxNQUFNLEtBQUssR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLFNBQVMsR0FBRyxNQUFNLG1CQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFFMUYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pELEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN4RCxNQUFNLEtBQUssR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLFNBQVMsR0FBRyxNQUFNLG1CQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFFMUYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pELEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN4RCxNQUFNLEtBQUssR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLFNBQVMsR0FBRyxNQUFNLG1CQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFFMUYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pELEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLDhGQUE4RixFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUM1RyxNQUFNLFVBQVUsR0FBRyw4QkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUV4RCxxQ0FBcUM7Z0JBQ3JDLE1BQU0sVUFBVSxHQUFHLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQztvQkFDaEQsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLEVBQUUsRUFBRTtvQkFDckQsR0FBRyxFQUFFLFVBQVU7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBSSxVQUEyQyxDQUFDLFVBQVcsQ0FBQyxLQUFNLENBQUM7Z0JBRW5GLHlFQUF5RTtnQkFDekUsTUFBTSxXQUFXLEdBQUcsTUFBTSxzQkFBc0IsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxtQkFBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMseUJBQXlCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFFakcsdUVBQXVFO2dCQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1lBQ2pELEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDdkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxzQkFBc0IsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sUUFBUSxHQUFHO29CQUNmLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDhCQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLHVCQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzlGLElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxDQUFDO2lCQUNaLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDOUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFFBQVEsR0FBRztvQkFDZixVQUFVLEVBQUUsRUFBRTtvQkFDZCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxRQUFRLEVBQUUsQ0FBQztpQkFDWixDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN2RCxNQUFNLEtBQUssR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsOEJBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7b0JBQ3RGLElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxDQUFDO2lCQUNaLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDOUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFFBQVEsR0FBRztvQkFDZixVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQ3BGLElBQUksRUFBRSxXQUFXO29CQUNqQixRQUFRLEVBQUUsQ0FBQztpQkFDWixDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLHFGQUFxRixFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNuRyxNQUFNLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSw4REFBdUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2xGLE1BQU0sUUFBUSxHQUFHO29CQUNmLElBQUksRUFBRSxPQUFPLEVBQUUsMEZBQTBGO29CQUN6RyxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLGlEQUEwQixDQUFDLE1BQU07d0JBQ3pDLE1BQU0sRUFBRSxpREFBMEIsQ0FBQyxXQUFXO3dCQUM5QyxlQUFlLEVBQUUsaURBQTBCLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTt3QkFDbkUsYUFBYSxFQUFFLGlEQUEwQixDQUFDLGFBQWE7cUJBQ3hEO2lCQUNGLENBQUM7Z0JBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDOUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxzREFBc0QsRUFBRSxHQUFHLEVBQUU7WUFDcEUsRUFBRSxDQUFDLDJFQUEyRSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN6RixpRUFBaUU7Z0JBQ2pFLHdFQUF3RTtnQkFDeEUsd0VBQXdFO2dCQUN4RSwwRUFBMEU7Z0JBQzFFLE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFFBQVEsR0FBRztvQkFDZixVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw4QkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztvQkFDdEYsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLENBQUM7aUJBQ1osQ0FBQztnQkFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDbEQsUUFBUTtvQkFDUixVQUFVO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7Z0JBQ0gsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZFLE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFFBQVEsR0FBRztvQkFDZixVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw4QkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDL0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLENBQUM7aUJBQ1osQ0FBQztnQkFFRixNQUFNLFVBQVUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDbEQsUUFBUTtvQkFDUixVQUFVO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7Z0JBQ0gsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZFLE1BQU0sS0FBSyxHQUFHLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLFFBQVEsR0FBRztvQkFDZixVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQ3BGLElBQUksRUFBRSxXQUFXO29CQUNqQixRQUFRLEVBQUUsQ0FBQztpQkFDWixDQUFDO2dCQUVGLE1BQU0sVUFBVSxHQUFHLE1BQU0sUUFBUSxDQUFDLGlCQUFpQixDQUFDO29CQUNsRCxRQUFRO29CQUNSLFVBQVU7b0JBQ1YsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDNUYsNkNBQTZDO2dCQUM3QyxpRUFBaUU7Z0JBQ2pFLG1FQUFtRTtnQkFDbkUsK0NBQStDO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLHNCQUFzQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUV6RCx1REFBdUQ7Z0JBQ3ZELGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7Z0JBRXJGLDhFQUE4RTtnQkFDOUUsd0RBQXdEO2dCQUN4RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25FLGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsdURBQXVELENBQUMsQ0FBQztZQUNoRyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUVqRSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ2xCLElBQUksQ0FBQztvQkFDSCxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2hGLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNiLElBQUEsZ0JBQU0sRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLHdDQUF3QyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDekcsQ0FBQztnQkFDRCxJQUFBLGdCQUFNLEVBQUMsS0FBSyxFQUFFLCtEQUErRCxDQUFDLENBQUM7WUFDakYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBGbHJwTGliIGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgRmxycCwgVGZsclAgfSBmcm9tICcuLi8uLi9zcmMvJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBTRUVEX0FDQ09VTlQsIEFDQ09VTlRfMSwgQUNDT1VOVF8yLCBPTl9DSEFJTl9URVNUX1dBTExFVCwgQ09OVEVYVCB9IGZyb20gJy4uL3Jlc291cmNlcy9hY2NvdW50JztcbmltcG9ydCB7IEVYUE9SVF9JTl9DIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9leHBvcnRJbkMnO1xuaW1wb3J0IHsgRVhQT1JUX0lOX1AgfSBmcm9tICcuLi9yZXNvdXJjZXMvdHJhbnNhY3Rpb25EYXRhL2V4cG9ydEluUCc7XG5pbXBvcnQgeyBJTVBPUlRfSU5fUCB9IGZyb20gJy4uL3Jlc291cmNlcy90cmFuc2FjdGlvbkRhdGEvaW1wb3J0SW5QJztcbmltcG9ydCB7IElNUE9SVF9JTl9DIH0gZnJvbSAnLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9pbXBvcnRJbkMnO1xuaW1wb3J0IHtcbiAgTVVMVElTSUdfREVMRUdBVElPTl9GVUxMWV9TSUdORURfVFhfSEVYLFxuICBNVUxUSVNJR19ERUxFR0FUSU9OX1BBUkFNUyxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9tdWx0aXNpZ0RlbGVnYXRpb25UeCc7XG5pbXBvcnQgeyBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUsIE1QQ0FsZ29yaXRobSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBzZWNwMjU2azEgfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHsgRmxycENvbnRleHQgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZGVzY3JpYmUoJ0ZscnAgdGVzdCBjYXNlcycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnZmxycCc7XG4gIGNvbnN0IHRjb2luTmFtZSA9ICd0JyArIGNvaW5OYW1lO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGNvbnN0IGtleWNoYWlucyA9IFt7IHB1YjogU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSB9LCB7IHB1YjogQUNDT1VOVF8xLnB1YmxpY0tleSB9LCB7IHB1YjogQUNDT1VOVF8yLnB1YmxpY0tleSB9XTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7XG4gICAgICBlbnY6ICdtb2NrJyxcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoY29pbk5hbWUsIEZscnAuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3Rlcih0Y29pbk5hbWUsIFRmbHJQLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4odGNvaW5OYW1lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbnN0YW50aWF0ZSB0aGUgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgbG9jYWxCYXNlY29pbiA9IGJpdGdvLmNvaW4odGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKFRmbHJQKTtcblxuICAgIGxvY2FsQmFzZWNvaW4gPSBiaXRnby5jb2luKGNvaW5OYW1lKTtcbiAgICBsb2NhbEJhc2Vjb2luLnNob3VsZC5iZS5hbi5pbnN0YW5jZW9mKEZscnApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiAnICsgdGNvaW5OYW1lLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwodGNvaW5OYW1lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gZnVsbCBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IEZsYXJlIFAtQ2hhaW4nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gYmFzZSBmYWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgYmFzZWNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiBjb2luIGZhbWlseScsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ZscnAnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gZGVmYXVsdCBtdWx0aXNpZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgIGJhc2Vjb2luLmdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKS5zaG91bGQuZXF1YWwoJ29uY2hhaW4nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdXBwb3J0IFRTUycsIGZ1bmN0aW9uICgpIHtcbiAgICBiYXNlY29pbi5zdXBwb3J0c1RzcygpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gZWNkc2EgYXMgTVBDIGFsZ29yaXRobScsIGZ1bmN0aW9uICgpIHtcbiAgICAoYmFzZWNvaW4uZ2V0TVBDQWxnb3JpdGhtKCkgYXMgTVBDQWxnb3JpdGhtKS5zaG91bGQuZXF1YWwoJ2VjZHNhJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyczonLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleXBhaXIgZnJvbSByYW5kb20gc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJ2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5cGFpciBmcm9tIGEgc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSBCdWZmZXIuZnJvbShTRUVEX0FDQ09VTlQuc2VlZCwgJ2hleCcpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgICAgIGtleVBhaXIucHViLnNob3VsZC5lcXVhbChTRUVEX0FDQ09VTlQucHVibGljS2V5KTtcbiAgICAgIGtleVBhaXIucHJ2LnNob3VsZC5lcXVhbChTRUVEX0FDQ09VTlQucHJpdmF0ZUtleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihBQ0NPVU5UXzEucHVibGljS2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YignaW52YWxpZCcpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHJ2KFNFRURfQUNDT1VOVC5wcml2YXRlS2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHJ2KEFDQ09VTlRfMS5wcml2YXRlS2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gaW52YWxpZCBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQcnYoJ2ludmFsaWQnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYW4gZXhwb3J0IGZyb20gQy1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBFWFBPUlRfSU5fQy51bnNpZ25lZEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBFWFBPUlRfSU5fQy5wcml2YXRlS2V5LFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24ocGFyYW1zKTtcbiAgICAgIHNpZ25lZFR4LnNob3VsZC5oYXZlLnByb3BlcnR5KCdoYWxmU2lnbmVkJyk7XG4gICAgICBjb25zdCBoYWxmU2lnbmVkID0gKHNpZ25lZFR4IGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pLmhhbGZTaWduZWQ7XG4gICAgICBhc3NlcnQoaGFsZlNpZ25lZCwgJ2hhbGZTaWduZWQgc2hvdWxkIGJlIGRlZmluZWQnKTtcbiAgICAgIGFzc2VydChoYWxmU2lnbmVkLnR4SGV4LCAndHhIZXggc2hvdWxkIGJlIGRlZmluZWQnKTtcbiAgICAgIGhhbGZTaWduZWQudHhIZXguc2hvdWxkLmVxdWFsKEVYUE9SVF9JTl9DLnNpZ25lZEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNpZ24gYW4gZXhwb3J0IGZyb20gUC1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIHByaXZhdGVLZXlzWzJdIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBzaWduYXR1cmUgc2xvdCAoc29ydGVkIGFkZHJlc3Mgb3JkZXI6IDMzMjliZTdkLi4uIGlzIHNsb3QgMSlcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBFWFBPUlRfSU5fUC51bnNpZ25lZEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBFWFBPUlRfSU5fUC5wcml2YXRlS2V5c1syXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICBzaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaGFsZlNpZ25lZCcpO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZCA9IChzaWduZWRUeCBhcyBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uKS5oYWxmU2lnbmVkO1xuICAgICAgYXNzZXJ0KGhhbGZTaWduZWQsICdoYWxmU2lnbmVkIHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICBhc3NlcnQoaGFsZlNpZ25lZC50eEhleCwgJ3R4SGV4IHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICBoYWxmU2lnbmVkLnR4SGV4LnNob3VsZC5lcXVhbChFWFBPUlRfSU5fUC5oYWxmU2lnbnR4SGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBhbiBpbXBvcnQgdG8gUC1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIHByaXZhdGVLZXlzWzJdIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBzaWduYXR1cmUgc2xvdCAoc29ydGVkIGFkZHJlc3Mgb3JkZXI6IDMzMjliZTdkLi4uIGlzIHNsb3QgMSlcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBJTVBPUlRfSU5fUC51bnNpZ25lZEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBJTVBPUlRfSU5fUC5wcml2YXRlS2V5c1syXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICBzaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaGFsZlNpZ25lZCcpO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZCA9IChzaWduZWRUeCBhcyBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uKS5oYWxmU2lnbmVkO1xuICAgICAgYXNzZXJ0KGhhbGZTaWduZWQsICdoYWxmU2lnbmVkIHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICBhc3NlcnQoaGFsZlNpZ25lZC50eEhleCwgJ3R4SGV4IHNob3VsZCBiZSBkZWZpbmVkJyk7XG4gICAgICBoYWxmU2lnbmVkLnR4SGV4LnNob3VsZC5lcXVhbChJTVBPUlRfSU5fUC5oYWxmU2lnbnR4SGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBhbiBpbXBvcnQgdG8gQy1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIHByaXZhdGVLZXlzWzJdIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBzaWduYXR1cmUgc2xvdCAoc29ydGVkIGFkZHJlc3Mgb3JkZXIgaW4gVVRYT3MpXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogSU1QT1JUX0lOX0MudW5zaWduZWRIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogSU1QT1JUX0lOX0MucHJpdmF0ZUtleXNbMl0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ2hhbGZTaWduZWQnKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWQgPSAoc2lnbmVkVHggYXMgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbikuaGFsZlNpZ25lZDtcbiAgICAgIGFzc2VydChoYWxmU2lnbmVkLCAnaGFsZlNpZ25lZCBzaG91bGQgYmUgZGVmaW5lZCcpO1xuICAgICAgYXNzZXJ0KGhhbGZTaWduZWQudHhIZXgsICd0eEhleCBzaG91bGQgYmUgZGVmaW5lZCcpO1xuICAgICAgaGFsZlNpZ25lZC50eEhleC5zaG91bGQuZXF1YWwoSU1QT1JUX0lOX0MuaGFsZlNpZ250eEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBzaWduaW5nIHdpdGggYW4gaW52YWxpZCBrZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogRVhQT1JUX0lOX0MudW5zaWduZWRIZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogJ2ludmFsaWQta2V5JyxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpLnNob3VsZC5iZS5yZWplY3RlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiBNZXNzYWdlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2lnbiBhIG1lc3NhZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEZscnBMaWIuS2V5UGFpcih7IHBydjogU0VFRF9BQ0NPVU5ULnByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20oU0VFRF9BQ0NPVU5ULm1lc3NhZ2UsICd1dGY4Jyk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlzLCBtZXNzYWdlVG9TaWduLnRvU3RyaW5nKCdoZXgnKSk7XG5cbiAgICAgIHNpZ25hdHVyZS5zaG91bGQuYmUuaW5zdGFuY2VPZihCdWZmZXIpO1xuICAgICAgc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoNjUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIGEgcmFuZG9tIG1lc3NhZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEZscnBMaWIuS2V5UGFpcigpO1xuICAgICAgY29uc3QgcHViS2V5ID0ga2V5UGFpci5nZXRLZXlzKCkucHViO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IEJ1ZmZlci5mcm9tKHJhbmRvbUJ5dGVzKDMyKSk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBiYXNlY29pbi5zaWduTWVzc2FnZShrZXlzLCBtZXNzYWdlVG9TaWduLnRvU3RyaW5nKCdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHZlcmlmeSA9IEZscnBMaWIuVXRpbHMudmVyaWZ5U2lnbmF0dXJlKFxuICAgICAgICBGbHJwTGliLlV0aWxzLnNoYTI1NihtZXNzYWdlVG9TaWduKSxcbiAgICAgICAgc2lnbmF0dXJlLnNsaWNlKDAsIDY0KSwgLy8gUmVtb3ZlIHJlY292ZXJ5IGJ5dGUgZm9yIHZlcmlmaWNhdGlvblxuICAgICAgICBCdWZmZXIuZnJvbShwdWJLZXksICdoZXgnKVxuICAgICAgKTtcbiAgICAgIHZlcmlmeS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gd2l0aCBtaXNzaW5nIHByaXZhdGUga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBGbHJwTGliLktleVBhaXIoeyBwdWI6IFNFRURfQUNDT1VOVC5wdWJsaWNLZXkgfSk7XG4gICAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20oU0VFRF9BQ0NPVU5ULm1lc3NhZ2UsICd1dGY4Jyk7XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5zaWduTWVzc2FnZShrZXlzLCBtZXNzYWdlVG9TaWduLnRvU3RyaW5nKCdoZXgnKSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwbGFpbiBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBoYWxmIHNpZ25lZCBleHBvcnQgZnJvbSBQLWNoYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHtcbiAgICAgICAgaGFsZlNpZ25lZDogeyB0eEhleDogRVhQT1JUX0lOX1AuaGFsZlNpZ250eEhleCB9LFxuICAgICAgfSk7XG5cbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIHR4RXhwbGFpbi5mZWUuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlZScpO1xuICAgICAgdHhFeHBsYWluLmlucHV0cy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcxNDMzOTUyMCcpOyAvLyAweERBQ0RDMCBmcm9tIHRyYW5zYWN0aW9uXG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKFxuICAgICAgICAnUC1jb3N0d28xMDZnYzVoNXFzd2h5ZThlMHBtdGhxNHd6ZjBla3Y1cXBwc3J2cHV+UC1jb3N0d28xY3VleWdkN2ZkMzdnNTZzNDlrM3JzaHFha2hwNms4dTNhZHp0Nm1+UC1jb3N0d28xeHY1bXVsZ3BlNWx0NHRueDJudG55bHdlNzlhenU5dnBqYTZsdXQnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGV4cG9ydCBmcm9tIFAtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogRVhQT1JUX0lOX1AuZnVsbFNpZ250eEhleCB9KTtcblxuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAgdHhFeHBsYWluLmlkLnNob3VsZC5lcXVhbChFWFBPUlRfSU5fUC50eGhhc2gpO1xuICAgICAgdHhFeHBsYWluLmZlZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZUFtb3VudC5zaG91bGQuZXF1YWwoJzE0MzM5NTIwJyk7IC8vIDB4REFDREMwIGZyb20gdHJhbnNhY3Rpb25cbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgdHhFeHBsYWluLmNoYW5nZU91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoXG4gICAgICAgICdQLWNvc3R3bzEwNmdjNWg1cXN3aHllOGUwcG10aHE0d3pmMGVrdjVxcHBzcnZwdX5QLWNvc3R3bzFjdWV5Z2Q3ZmQzN2c1NnM0OWszcnNocWFraHA2azh1M2FkenQ2bX5QLWNvc3R3bzF4djVtdWxncGU1bHQ0dG54Mm50bnlsd2U3OWF6dTl2cGphNmx1dCdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBoYWxmIHNpZ25lZCBpbXBvcnQgdG8gUC1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IGF3YWl0IGJhc2Vjb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7XG4gICAgICAgIGhhbGZTaWduZWQ6IHsgdHhIZXg6IElNUE9SVF9JTl9QLmhhbGZTaWdudHhIZXggfSxcbiAgICAgIH0pO1xuXG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkltcG9ydCk7XG4gICAgICB0eEV4cGxhaW4uZmVlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWUnKTtcbiAgICAgIHR4RXhwbGFpbi5pbnB1dHMuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgnNDg3MzkwMDAnKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLnNob3VsZC5iZS5lbXB0eSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc2lnbmVkIGltcG9ydCB0byBQLWNoYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6IElNUE9SVF9JTl9QLnNpZ25lZEhleCB9KTtcblxuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgdHhFeHBsYWluLmlkLnNob3VsZC5lcXVhbChJTVBPUlRfSU5fUC50eGhhc2gpO1xuICAgICAgdHhFeHBsYWluLmZlZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzLnNob3VsZC5iZS5hbi5BcnJheSgpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzQ4NzM5MDAwJyk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0cy5zaG91bGQuYmUuYW4uQXJyYXkoKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5zaG91bGQuYmUuZW1wdHkoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIHRyYW5zYWN0aW9uIGhleCBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBiYXNlY29pbi5leHBsYWluVHJhbnNhY3Rpb24oe30pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgdHJhbnNhY3Rpb24gaGV4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgZm9yIGludmFsaWQgdHJhbnNhY3Rpb24gaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYmFzZWNvaW4uZXhwbGFpblRyYW5zYWN0aW9uKHsgdHhIZXg6ICdpbnZhbGlkJyB9KS5zaG91bGQuYmUucmVqZWN0ZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZlcmlmeSBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhbiBleHBvcnQgZnJvbSBDLWNoYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEVYUE9SVF9JTl9DLnNpZ25lZEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcnLFxuICAgICAgICAgICAgYW1vdW50OiBFWFBPUlRfSU5fQy5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGFuIGV4cG9ydCBmcm9tIFAtY2hhaW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogRVhQT1JUX0lOX1AuZnVsbFNpZ250eEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcnLFxuICAgICAgICAgICAgYW1vdW50OiBFWFBPUlRfSU5fUC5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGFuIGltcG9ydCB0byBDLWNoYWluIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IElNUE9SVF9JTl9DLmZ1bGxTaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiBJTVBPUlRfSU5fQy50byxcbiAgICAgICAgICAgIGFtb3VudDogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdJbXBvcnRUb0MnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhbiBpbXBvcnQgdG8gUC1jaGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7XG4gICAgICAgIHR4SGV4OiBJTVBPUlRfSU5fUC5zaWduZWRIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB0eXBlOiAnSW1wb3J0JyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBleHBvcnQgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBhbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEhleDogRVhQT1JUX0lOX0Muc2lnbmVkSGV4LFxuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogJycsXG4gICAgICAgICAgICBhbW91bnQ6ICc5OTk5OTk5OTk5OTknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9UeCB0b3RhbCBhbW91bnQgLiogZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0b3RhbCBhbW91bnQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyB0eXBlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IEVYUE9SVF9JTl9DLnNpZ25lZEhleCxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6ICcnLFxuICAgICAgICAgICAgYW1vdW50OiBFWFBPUlRfSU5fQy5hbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1R4IHR5cGUgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyB0eXBlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgdHhIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICB0eEluZm86IHt9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICByZWNpcGllbnRzOiBbXSxcbiAgICAgICAgdHlwZTogJ0V4cG9ydCcsXG4gICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHR4SGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6ICdpbnZhbGlkaGV4JyxcbiAgICAgICAgdHhJbmZvOiB7fSxcbiAgICAgIH07XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBSYXcgdHJhbnNhY3Rpb24gaXMgbm90IGhleCBzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgaW1wb3J0IHRvIEMtY2hhaW4gd2l0aG91dCByZWNpcGllbnRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHtcbiAgICAgICAgdHhIZXg6IElNUE9SVF9JTl9DLmZ1bGxTaWdudHhIZXgsXG4gICAgICAgIHR4SW5mbzoge30sXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtdLFxuICAgICAgICB0eXBlOiAnSW1wb3J0VG9DJyxcbiAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRXhwZWN0ZWQgMSByZWNpcGllbnQgaW4gaW1wb3J0IHRyYW5zYWN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBtYWlubmV0IFAtY2hhaW4gYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKFNFRURfQUNDT1VOVC5hZGRyZXNzTWFpbm5ldCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdGVzdG5ldCBQLWNoYWluIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhTRUVEX0FDQ09VTlQuYWRkcmVzc1Rlc3RuZXQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFycmF5IG9mIFAtY2hhaW4gYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoRVhQT1JUX0lOX0MucEFkZHJlc3Nlcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdGlsZGUtc2VwYXJhdGVkIG11bHRpc2lnIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtdWx0aVNpZ0FkZHJlc3MgPSBFWFBPUlRfSU5fQy5wQWRkcmVzc2VzLmpvaW4oJ34nKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKG11bHRpU2lnQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgQy1jaGFpbiBoZXggYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKEVYUE9SVF9JTl9DLmNIZXhBZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBsb3dlcmNhc2UgQy1jaGFpbiBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoSU1QT1JUX0lOX0MudG8udG9Mb3dlckNhc2UoKSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSB1bmRlZmluZWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKHVuZGVmaW5lZCkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRBZGRyZXNzKCdpbnZhbGlkLWFkZHJlc3MnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBhcnJheSB3aXRoIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkZHJlc3NlcyA9IFsuLi5FWFBPUlRfSU5fQy5wQWRkcmVzc2VzLCAnaW52YWxpZCddO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoYWRkcmVzc2VzKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1dhbGxldCBBZGRyZXNzIFZlcmlmaWNhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB3YWxsZXQgYWRkcmVzcyB3aXRoIG1hdGNoaW5nIGtleWNoYWlucycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXJzID0gW3sgcHViOiBTRUVEX0FDQ09VTlQucHVibGljS2V5IH0sIHsgcHViOiBBQ0NPVU5UXzEucHVibGljS2V5IH0sIHsgcHViOiBBQ0NPVU5UXzIucHVibGljS2V5IH1dO1xuXG4gICAgICAvLyBEZXJpdmUgYWRkcmVzc2VzIGZyb20gcHVibGljIGtleXMgdG8gZW5zdXJlIHRoZXkgbWF0Y2hcbiAgICAgIGNvbnN0IGRlcml2ZWRBZGRyZXNzZXMgPSBrZXlQYWlycy5tYXAoKGtwKSA9PiBuZXcgRmxycExpYi5LZXlQYWlyKHsgcHViOiBrcC5wdWIgfSkuZ2V0QWRkcmVzcygndGVzdG5ldCcpKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBkZXJpdmVkQWRkcmVzc2VzLmpvaW4oJ34nKTtcblxuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIGtleWNoYWluczoga2V5UGFpcnMsXG4gICAgICB9KTtcblxuICAgICAgaXNWYWxpZC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgTVBDIHdhbGxldCBhZGRyZXNzIHdpdGggc2luZ2xlIGtleWNoYWluJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IFNFRURfQUNDT1VOVC5hZGRyZXNzVGVzdG5ldDtcblxuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIGtleWNoYWluczogW3sgcHViOiBTRUVEX0FDQ09VTlQucHVibGljS2V5IH1dLFxuICAgICAgfSk7XG5cbiAgICAgIGlzVmFsaWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IE1QQyB3YWxsZXQgYWRkcmVzcyB0aGF0IGRvZXMgbm90IG1hdGNoIGtleWNoYWluJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IFNFRURfQUNDT1VOVC5hZGRyZXNzVGVzdG5ldDtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGFzeW5jICgpID0+XG4gICAgICAgICAgYmFzZWNvaW4uaXNXYWxsZXRBZGRyZXNzKHtcbiAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICBrZXljaGFpbnM6IFt7IHB1YjogQUNDT1VOVF8xLnB1YmxpY0tleSB9XSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2FkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIG11bHRpc2lnIGFkZHJlc3Mgd2l0aCB3cm9uZyBudW1iZXIgb2Yga2V5Y2hhaW5zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVHdvIHRpbGRlLXNlcGFyYXRlZCBhZGRyZXNzZXMgYnV0IG9ubHkgMiBrZXljaGFpbnNcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBTRUVEX0FDQ09VTlQuYWRkcmVzc1Rlc3RuZXQgKyAnficgKyBBQ0NPVU5UXzEuYWRkcmVzc1Rlc3RuZXQ7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBhc3luYyAoKSA9PlxuICAgICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAga2V5Y2hhaW5zOiBbeyBwdWI6IFNFRURfQUNDT1VOVC5wdWJsaWNLZXkgfSwgeyBwdWI6IEFDQ09VTlRfMS5wdWJsaWNLZXkgfV0sXG4gICAgICAgICAgfSksXG4gICAgICAgIC9JbnZhbGlkIGtleWNoYWlucy9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBpbnZhbGlkIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYXN5bmMgKCkgPT5cbiAgICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgICAgYWRkcmVzczogJ2ludmFsaWQnLFxuICAgICAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICAgIH0pLFxuICAgICAgICAvaW52YWxpZCBhZGRyZXNzL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhZGRyZXNzIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBrZXljaGFpbiBsZW5ndGgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gU0VFRF9BQ0NPVU5ULmFkZHJlc3NUZXN0bmV0O1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PlxuICAgICAgICBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3Moe1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAga2V5Y2hhaW5zLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBhZGRyZXNzZXMgZG8gbm90IG1hdGNoIGtleWNoYWlucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFVzZSBhZGRyZXNzZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUga2V5Y2hhaW5zXG4gICAgICBjb25zdCBhZGRyZXNzID0gRVhQT1JUX0lOX0MucEFkZHJlc3Nlcy5qb2luKCd+Jyk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGFzeW5jICgpID0+XG4gICAgICAgIGJhc2Vjb2luLmlzV2FsbGV0QWRkcmVzcyh7XG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmVjb3ZlcnkgU2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVjb3ZlciBzaWduYXR1cmUgZnJvbSBzaWduZWQgbWVzc2FnZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShTRUVEX0FDQ09VTlQubWVzc2FnZSwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBCdWZmZXIuZnJvbShTRUVEX0FDQ09VTlQucHJpdmF0ZUtleSwgJ2hleCcpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gRmxycExpYi5VdGlscy5jcmVhdGVTaWduYXR1cmUoYmFzZWNvaW4uX3N0YXRpY3NDb2luLm5ldHdvcmssIG1lc3NhZ2UsIHByaXZhdGVLZXkpO1xuICAgICAgY29uc3QgbWVzc2FnZUhhc2ggPSBGbHJwTGliLlV0aWxzLnNoYTI1NihtZXNzYWdlKTtcbiAgICAgIGNvbnN0IHJlY292ZXJlZFB1YktleSA9IGJhc2Vjb2luLnJlY292ZXJ5U2lnbmF0dXJlKG1lc3NhZ2VIYXNoLCBzaWduYXR1cmUpO1xuXG4gICAgICByZWNvdmVyZWRQdWJLZXkuc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgIHJlY292ZXJlZFB1YktleS5sZW5ndGguc2hvdWxkLmVxdWFsKDMzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RlbGVnYXRpb24gVHJhbnNhY3Rpb24gVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBkZXNjcmliZSgndmFsaWRhdGVEZWxlZ2F0aW9uVHgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZFN0YWtpbmdPcHRpb25zID0ge1xuICAgICAgICBub2RlSUQ6ICdOb2RlSUQtQUs3c1BCc1pNOXJRd3NlMjNhTGhFRUJQSFpENWdrTHJMJyxcbiAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAwMDAwMDAnLCAvLyA1MCwwMDAgRkxSIGluIG5GTFJcbiAgICAgICAgZHVyYXRpb25TZWNvbmRzOiA4NjQwMCAqIDE0LCAvLyAxNCBkYXlzXG4gICAgICAgIHJld2FyZEFkZHJlc3M6ICdDLWNvc3R3bzF1eXA1bjc2Z2pxbHRyZGR1cjdxbHJzbXQza3loOGZucm13aHFrNycsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2YWxpZEV4cGxhaW5lZFR4ID0ge1xuICAgICAgICBvdXRwdXRBbW91bnQ6ICc1MDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc0RlbGVnYXRvcixcbiAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgICAgZmVlOiB7IGZlZTogJzEwMDAnIH0sXG4gICAgICB9O1xuXG4gICAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgY29ycmVjdCBkZWxlZ2F0aW9uIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHsgc3Rha2luZ09wdGlvbnM6IHZhbGlkU3Rha2luZ09wdGlvbnMgfTtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBiYXNlY29pbi52YWxpZGF0ZURlbGVnYXRpb25UeCh0eFBhcmFtcywgdmFsaWRFeHBsYWluZWRUeCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBzdGFraW5nT3B0aW9ucyBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHt9O1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJhc2Vjb2luLnZhbGlkYXRlRGVsZWdhdGlvblR4KHR4UGFyYW1zLCB2YWxpZEV4cGxhaW5lZFR4KSxcbiAgICAgICAgICAvRGVsZWdhdGlvbiB0cmFuc2FjdGlvbiByZXF1aXJlcyBzdGFraW5nT3B0aW9ucy9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gbm9kZUlEIGhhcyBpbnZhbGlkIGZvcm1hdCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgc3Rha2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLnZhbGlkU3Rha2luZ09wdGlvbnMsXG4gICAgICAgICAgICBub2RlSUQ6ICdJbnZhbGlkUHJlZml4LTEyMycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiYXNlY29pbi52YWxpZGF0ZURlbGVnYXRpb25UeCh0eFBhcmFtcywgdmFsaWRFeHBsYWluZWRUeCksIC9JbnZhbGlkIG5vZGVJRCBmb3JtYXQvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYW1vdW50IGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHN0YWtpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICAuLi52YWxpZFN0YWtpbmdPcHRpb25zLFxuICAgICAgICAgICAgYW1vdW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiBiYXNlY29pbi52YWxpZGF0ZURlbGVnYXRpb25UeCh0eFBhcmFtcywgdmFsaWRFeHBsYWluZWRUeCksXG4gICAgICAgICAgL0RlbGVnYXRpb24gdHJhbnNhY3Rpb24gcmVxdWlyZXMgYW1vdW50L1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBkdXJhdGlvblNlY29uZHMgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgc3Rha2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLnZhbGlkU3Rha2luZ09wdGlvbnMsXG4gICAgICAgICAgICBkdXJhdGlvblNlY29uZHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJhc2Vjb2luLnZhbGlkYXRlRGVsZWdhdGlvblR4KHR4UGFyYW1zLCB2YWxpZEV4cGxhaW5lZFR4KSxcbiAgICAgICAgICAvRGVsZWdhdGlvbiB0cmFuc2FjdGlvbiByZXF1aXJlcyBkdXJhdGlvblNlY29uZHMvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHJld2FyZEFkZHJlc3MgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgc3Rha2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLnZhbGlkU3Rha2luZ09wdGlvbnMsXG4gICAgICAgICAgICByZXdhcmRBZGRyZXNzOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiBiYXNlY29pbi52YWxpZGF0ZURlbGVnYXRpb25UeCh0eFBhcmFtcywgdmFsaWRFeHBsYWluZWRUeCksXG4gICAgICAgICAgL0RlbGVnYXRpb24gdHJhbnNhY3Rpb24gcmVxdWlyZXMgcmV3YXJkQWRkcmVzcy9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gb3V0cHV0QW1vdW50IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIGFtb3VudCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHN0YWtpbmdPcHRpb25zOiB2YWxpZFN0YWtpbmdPcHRpb25zIH07XG4gICAgICAgIGNvbnN0IG1pc21hdGNoZWRFeHBsYWluZWRUeCA9IHtcbiAgICAgICAgICAuLi52YWxpZEV4cGxhaW5lZFR4LFxuICAgICAgICAgIG91dHB1dEFtb3VudDogJzYwMDAwMDAwMDAwMDAwJywgLy8gRGlmZmVyZW50IGZyb20gZXhwZWN0ZWQgNTAwMDAwMDAwMDAwMDBcbiAgICAgICAgfTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiBiYXNlY29pbi52YWxpZGF0ZURlbGVnYXRpb25UeCh0eFBhcmFtcywgbWlzbWF0Y2hlZEV4cGxhaW5lZFR4KSxcbiAgICAgICAgICAvRGVsZWdhdGlvbiBhbW91bnQgbWlzbWF0Y2gvXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ01QQy9UU1MgQ29pbi1MZXZlbCBNZXRob2RzJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBGbHJwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZyk7XG5cbiAgICAvLyBIZWxwZXI6IGJ1aWxkIHVuc2lnbmVkIE1QQyBFeHBvcnRJbkMgdHggYW5kIHJldHVybiBpdHMgaGV4XG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRVbnNpZ25lZEV4cG9ydEluQygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAuZ2V0RXhwb3J0SW5DQnVpbGRlcigpXG4gICAgICAgIC5mcm9tUHViS2V5KEVYUE9SVF9JTl9DLmNIZXhBZGRyZXNzKVxuICAgICAgICAubm9uY2UoRVhQT1JUX0lOX0Mubm9uY2UpXG4gICAgICAgIC5hbW91bnQoRVhQT1JUX0lOX0MuYW1vdW50KVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAudG8oT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzKVxuICAgICAgICAuZmVlKEVYUE9SVF9JTl9DLmZlZSlcbiAgICAgICAgLmNvbnRleHQoQ09OVEVYVCBhcyBGbHJwQ29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXI6IGJ1aWxkIHVuc2lnbmVkIE1QQyBJbXBvcnRJblAgdHggYW5kIHJldHVybiBpdHMgaGV4XG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRVbnNpZ25lZEltcG9ydEluUCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgbXBjVXR4byA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IDcsXG4gICAgICAgIGFtb3VudDogJzUwMDAwMDAwJyxcbiAgICAgICAgdHhpZDogJ2FMd1ZRZXF1bWJoaGpmaEw2U3ZmTTZNR1dBQjh3SHdRZko2N2Vvd0ViQUVVcGt1ZU4nLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10sXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICBsb2NrdGltZTogJzAnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5jb3JldGhBZGRyZXNzXSlcbiAgICAgICAgLnRvKFtPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3NdKVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKElNUE9SVF9JTl9QLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5kZWNvZGVkVXR4b3MoW21wY1V0eG9dKVxuICAgICAgICAuY29udGV4dChJTVBPUlRfSU5fUC5jb250ZXh0IGFzIEZscnBDb250ZXh0KVxuICAgICAgICAuZmVlU3RhdGUoSU1QT1JUX0lOX1AuZmVlU3RhdGUgYXMgYW55KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHJldHVybiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIH1cblxuICAgIC8vIEhlbHBlcjogYnVpbGQgdW5zaWduZWQgTVBDIEV4cG9ydEluUCB0eCBhbmQgcmV0dXJuIGl0cyBoZXhcbiAgICBhc3luYyBmdW5jdGlvbiBidWlsZFVuc2lnbmVkRXhwb3J0SW5QKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICBjb25zdCBtcGNVdHhvID0ge1xuICAgICAgICBvdXRwdXRJRDogNyxcbiAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAnLFxuICAgICAgICB0eGlkOiAnYmdIbkVKNjR0ZDh1MzFhWnJHRGFXY0RxeFo4dkRWNXFHZDdibVNpZmd2VW5VVzh2MicsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgYWRkcmVzc2VzOiBbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSxcbiAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgIGxvY2t0aW1lOiAnMCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAuZ2V0RXhwb3J0SW5QQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQoMSlcbiAgICAgICAgLmxvY2t0aW1lKDApXG4gICAgICAgIC5mcm9tUHViS2V5KFtPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3NdKVxuICAgICAgICAuYW1vdW50KCczMDAwMDAwMCcpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQoRVhQT1JUX0lOX1Auc291cmNlQ2hhaW5JZClcbiAgICAgICAgLmRlY29kZWRVdHhvcyhbbXBjVXR4b10pXG4gICAgICAgIC5jb250ZXh0KEVYUE9SVF9JTl9QLmNvbnRleHQgYXMgRmxycENvbnRleHQpXG4gICAgICAgIC5mZWVTdGF0ZShFWFBPUlRfSU5fUC5mZWVTdGF0ZSBhcyBhbnkpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgcmV0dXJuIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfVxuXG4gICAgLy8gSGVscGVyOiBidWlsZCB1bnNpZ25lZCBNUEMgSW1wb3J0SW5DIHR4IGFuZCByZXR1cm4gaXRzIGhleFxuICAgIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVW5zaWduZWRJbXBvcnRJbkMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIGNvbnN0IG1wY1V0eG8gPSB7XG4gICAgICAgIG91dHB1dElEOiA3LFxuICAgICAgICBhbW91bnQ6ICczMDAwMDAwMCcsXG4gICAgICAgIHR4aWQ6ICduU0J3TmNnZkxiazVTNDI1YjFxYVlhcVRUQ2lNQ1Y3NUtVNEZibnE4U1BVVXFMcTInLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogW09OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzc10sXG4gICAgICAgIG91dHB1dGlkeDogJzEnLFxuICAgICAgICBsb2NrdGltZTogJzAnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEltcG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKDEpXG4gICAgICAgIC5sb2NrdGltZSgwKVxuICAgICAgICAuZnJvbVB1YktleShbT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wQ2hhaW5BZGRyZXNzXSlcbiAgICAgICAgLnRvKCcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnKVxuICAgICAgICAuZmVlKCcxMDAwMDAwJylcbiAgICAgICAgLmRlY29kZWRVdHhvcyhbbXBjVXR4b10pXG4gICAgICAgIC5jb250ZXh0KElNUE9SVF9JTl9DLmNvbnRleHQgYXMgRmxycENvbnRleHQpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgcmV0dXJuIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJ2dldFNpZ25hYmxlUGF5bG9hZCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHNpZ25hYmxlIHBheWxvYWQgZm9yIEV4cG9ydEluQycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkRXhwb3J0SW5DKCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodHhIZXgpO1xuXG4gICAgICAgIHBheWxvYWQuc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgICAgcGF5bG9hZC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHNpZ25hYmxlIHBheWxvYWQgZm9yIEltcG9ydEluUCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkSW1wb3J0SW5QKCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodHhIZXgpO1xuXG4gICAgICAgIHBheWxvYWQuc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgICAgcGF5bG9hZC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHNpZ25hYmxlIHBheWxvYWQgZm9yIEV4cG9ydEluUCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkRXhwb3J0SW5QKCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodHhIZXgpO1xuXG4gICAgICAgIHBheWxvYWQuc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgICAgcGF5bG9hZC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHNpZ25hYmxlIHBheWxvYWQgZm9yIEltcG9ydEluQycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkSW1wb3J0SW5DKCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodHhIZXgpO1xuXG4gICAgICAgIHBheWxvYWQuc2hvdWxkLmJlLmluc3RhbmNlT2YoQnVmZmVyKTtcbiAgICAgICAgcGF5bG9hZC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYWRkU2lnbmF0dXJlVG9UcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgY29tcGxldGUgZ2V0U2lnbmFibGVQYXlsb2FkIOKGkiBzaWduIOKGkiBhZGRTaWduYXR1cmVUb1RyYW5zYWN0aW9uIHJvdW5kLXRyaXAgZm9yIEV4cG9ydEluQycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkRXhwb3J0SW5DKCk7XG5cbiAgICAgICAgLy8gR2V0IHNpZ25hYmxlIHBheWxvYWQgKHdoYXQgTVBDIGNlcmVtb255IHdvdWxkIHJlY2VpdmUpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodHhIZXgpO1xuXG4gICAgICAgIC8vIFNpbXVsYXRlIE1QQzogc2lnbiBleHRlcm5hbGx5XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNlY3AyNTZrMS5zaWduKHBheWxvYWQsIEJ1ZmZlci5mcm9tKE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSwgJ2hleCcpKTtcblxuICAgICAgICAvLyBJbmplY3Qgc2lnbmF0dXJlXG4gICAgICAgIGNvbnN0IHNpZ25lZEhleCA9IGF3YWl0IGJhc2Vjb2luLmFkZFNpZ25hdHVyZVRvVHJhbnNhY3Rpb24odHhIZXgsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICAgICAgICBzaWduZWRIZXguc2hvdWxkLm5vdC5lcXVhbCh0eEhleCk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHNpZ25lZCB0eCBjYW4gYmUgcGFyc2VkXG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShzaWduZWRIZXgpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICB0eC5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgudG9Kc29uKCkudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBjb21wbGV0ZSByb3VuZC10cmlwIGZvciBJbXBvcnRJblAnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEltcG9ydEluUCgpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYmFzZWNvaW4uZ2V0U2lnbmFibGVQYXlsb2FkKHR4SGV4KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgc2VjcDI1NmsxLnNpZ24ocGF5bG9hZCwgQnVmZmVyLmZyb20oT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wcml2YXRlS2V5LCAnaGV4JykpO1xuICAgICAgICBjb25zdCBzaWduZWRIZXggPSBhd2FpdCBiYXNlY29pbi5hZGRTaWduYXR1cmVUb1RyYW5zYWN0aW9uKHR4SGV4LCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcblxuICAgICAgICBzaWduZWRIZXguc2hvdWxkLm5vdC5lcXVhbCh0eEhleCk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgZmFjdG9yeS5mcm9tKHNpZ25lZEhleCkuYnVpbGQoKTtcbiAgICAgICAgdHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LnRvSnNvbigpLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY29tcGxldGUgcm91bmQtdHJpcCBmb3IgRXhwb3J0SW5QJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRFeHBvcnRJblAoKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGJhc2Vjb2luLmdldFNpZ25hYmxlUGF5bG9hZCh0eEhleCk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNlY3AyNTZrMS5zaWduKHBheWxvYWQsIEJ1ZmZlci5mcm9tKE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucHJpdmF0ZUtleSwgJ2hleCcpKTtcbiAgICAgICAgY29uc3Qgc2lnbmVkSGV4ID0gYXdhaXQgYmFzZWNvaW4uYWRkU2lnbmF0dXJlVG9UcmFuc2FjdGlvbih0eEhleCwgQnVmZmVyLmZyb20oc2lnbmF0dXJlKSk7XG5cbiAgICAgICAgc2lnbmVkSGV4LnNob3VsZC5ub3QuZXF1YWwodHhIZXgpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGZhY3RvcnkuZnJvbShzaWduZWRIZXgpLmJ1aWxkKCk7XG4gICAgICAgIHR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC50b0pzb24oKS50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGNvbXBsZXRlIHJvdW5kLXRyaXAgZm9yIEltcG9ydEluQycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkSW1wb3J0SW5DKCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBiYXNlY29pbi5nZXRTaWduYWJsZVBheWxvYWQodHhIZXgpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBzZWNwMjU2azEuc2lnbihwYXlsb2FkLCBCdWZmZXIuZnJvbShPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnByaXZhdGVLZXksICdoZXgnKSk7XG4gICAgICAgIGNvbnN0IHNpZ25lZEhleCA9IGF3YWl0IGJhc2Vjb2luLmFkZFNpZ25hdHVyZVRvVHJhbnNhY3Rpb24odHhIZXgsIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuXG4gICAgICAgIHNpZ25lZEhleC5zaG91bGQubm90LmVxdWFsKHR4SGV4KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBmYWN0b3J5LmZyb20oc2lnbmVkSGV4KS5idWlsZCgpO1xuICAgICAgICB0eC5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgudG9Kc29uKCkudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZhbGlkIHNpZ25lZCB0eCB2aWEgYm90aCBzaWduKCkgYW5kIGFkZFNpZ25hdHVyZVRvVHJhbnNhY3Rpb24oKSBmb3IgRXhwb3J0SW5DJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gT05fQ0hBSU5fVEVTVF9XQUxMRVQudXNlci5wcml2YXRlS2V5O1xuXG4gICAgICAgIC8vIFBhdGggMTogc2lnbigpIHZpYSBzaWduVHJhbnNhY3Rpb25cbiAgICAgICAgY29uc3Qgc2lnblJlc3VsdCA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogYXdhaXQgYnVpbGRVbnNpZ25lZEV4cG9ydEluQygpIH0sXG4gICAgICAgICAgcHJ2OiBwcml2YXRlS2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2lnbmVkSGV4MSA9IChzaWduUmVzdWx0IGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pLmhhbGZTaWduZWQhLnR4SGV4ITtcblxuICAgICAgICAvLyBQYXRoIDI6IGdldFNpZ25hYmxlUGF5bG9hZCDihpIgZXh0ZXJuYWwgc2lnbiDihpIgYWRkU2lnbmF0dXJlVG9UcmFuc2FjdGlvblxuICAgICAgICBjb25zdCB1bnNpZ25lZEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRFeHBvcnRJbkMoKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGJhc2Vjb2luLmdldFNpZ25hYmxlUGF5bG9hZCh1bnNpZ25lZEhleCk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHNlY3AyNTZrMS5zaWduKHBheWxvYWQsIEJ1ZmZlci5mcm9tKHByaXZhdGVLZXksICdoZXgnKSk7XG4gICAgICAgIGNvbnN0IHNpZ25lZEhleDIgPSBhd2FpdCBiYXNlY29pbi5hZGRTaWduYXR1cmVUb1RyYW5zYWN0aW9uKHVuc2lnbmVkSGV4LCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcblxuICAgICAgICAvLyBCb3RoIHBhdGhzIHNob3VsZCBwcm9kdWNlIHZhbGlkIHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCAxIHNpZ25hdHVyZVxuICAgICAgICBjb25zdCB0eDEgPSBhd2FpdCBmYWN0b3J5LmZyb20oc2lnbmVkSGV4MSkuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHgyID0gYXdhaXQgZmFjdG9yeS5mcm9tKHNpZ25lZEhleDIpLmJ1aWxkKCk7XG4gICAgICAgIHR4MS5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgyLnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eDEudG9Kc29uKCkudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICAgIHR4Mi50b0pzb24oKS50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRXhwb3J0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ZlcmlmeVRyYW5zYWN0aW9uIHdpdGggTVBDIHBhcmFtcycsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IE1QQyBFeHBvcnRJbkMgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEV4cG9ydEluQygpO1xuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCwgdHhJbmZvOiB7fSB9O1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3MsIGFtb3VudDogRVhQT1JUX0lOX0MuYW1vdW50IH1dLFxuICAgICAgICAgIHR5cGU6ICdFeHBvcnQnLFxuICAgICAgICAgIGxvY2t0aW1lOiAwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGlzVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0pO1xuICAgICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBNUEMgSW1wb3J0SW5QIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRJbXBvcnRJblAoKTtcbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXgsIHR4SW5mbzoge30gfTtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IE1QQyBFeHBvcnRJblAgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEV4cG9ydEluUCgpO1xuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCwgdHhJbmZvOiB7fSB9O1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3MsIGFtb3VudDogJzMwMDAwMDAwJyB9XSxcbiAgICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgTVBDIEltcG9ydEluQyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkSW1wb3J0SW5DKCk7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4LCB0eEluZm86IHt9IH07XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweDk2OTkzQkFFYjZBYUUyZTA2QkY5NUYxNDRlMjc3NUQ0ZjhlZmJEMzUnLCBhbW91bnQ6ICcxJyB9XSxcbiAgICAgICAgICB0eXBlOiAnSW1wb3J0VG9DJyxcbiAgICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiB3aGVuIHR4UGFyYW1zLnR5cGUgaXMgdGhlIFwic3Rha2VcIiBpbnRlbnQgYWxpYXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4OiBNVUxUSVNJR19ERUxFR0FUSU9OX0ZVTExZX1NJR05FRF9UWF9IRVgsIHR4SW5mbzoge30gfTtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgICAgdHlwZTogJ3N0YWtlJywgLy8gaW50ZW50LXR5cGUgYWxpYXMgdXNlZCBieSB3YWxsZXQtcGxhdGZvcm07IG11c3Qgbm9ybWFsaXNlIHRvIEFkZFBlcm1pc3Npb25sZXNzRGVsZWdhdG9yXG4gICAgICAgICAgc3Rha2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIG5vZGVJRDogTVVMVElTSUdfREVMRUdBVElPTl9QQVJBTVMubm9kZUlELFxuICAgICAgICAgICAgYW1vdW50OiBNVUxUSVNJR19ERUxFR0FUSU9OX1BBUkFNUy5zdGFrZUFtb3VudCxcbiAgICAgICAgICAgIGR1cmF0aW9uU2Vjb25kczogTVVMVElTSUdfREVMRUdBVElPTl9QQVJBTVMuZHVyYXRpb24gKiAyNCAqIDYwICogNjAsXG4gICAgICAgICAgICByZXdhcmRBZGRyZXNzOiBNVUxUSVNJR19ERUxFR0FUSU9OX1BBUkFNUy5yZXdhcmRBZGRyZXNzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSk7XG4gICAgICAgIGlzVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb24gd2l0aCBUU1Mgd2FsbGV0IChBdmFsYW5jaGUgYXRvbWljKScsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgdmVyaWZ5IFRTUyBFeHBvcnRJblAgd2hlbiBwYXNzZWQgc2VyaWFsaXplZFR4SGV4IChub3Qgc2lnbmFibGVIZXgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUaGUgU0RLJ3Mgc2lnblJlcXVlc3RCYXNlIG5vdyBwYXNzZXMgc2VyaWFsaXplZFR4SGV4ICh0aGUgZnVsbFxuICAgICAgICAvLyBQVk0gdHJhbnNhY3Rpb24gYnl0ZXMpIHRvIHZlcmlmeVRyYW5zYWN0aW9uIGZvciBBdmFsYW5jaGUgYXRvbWljIHR4cyxcbiAgICAgICAgLy8gaW5zdGVhZCBvZiBzaWduYWJsZUhleCAoYSAzMi1ieXRlIFNIQS0yNTYgaGFzaCB0aGF0IGNhbid0IGJlIHBhcnNlZCkuXG4gICAgICAgIC8vIFRoaXMgdGVzdCBjb25maXJtcyB2ZXJpZnlUcmFuc2FjdGlvbiBzdWNjZWVkcyB3aXRoIHRoZSBhY3R1YWwgdHggYnl0ZXMuXG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEV4cG9ydEluUCgpO1xuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCwgdHhJbmZvOiB7fSB9O1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBPTl9DSEFJTl9URVNUX1dBTExFVC51c2VyLnBDaGFpbkFkZHJlc3MsIGFtb3VudDogJzMwMDAwMDAwJyB9XSxcbiAgICAgICAgICB0eXBlOiAnRXhwb3J0JyxcbiAgICAgICAgICBsb2NrdGltZTogMCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpc1ZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgd2FsbGV0VHlwZTogJ3RzcycsXG4gICAgICAgIH0pO1xuICAgICAgICBpc1ZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHZlcmlmeSBUU1MgSW1wb3J0SW5QIHdoZW4gcGFzc2VkIHNlcmlhbGl6ZWRUeEhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkSW1wb3J0SW5QKCk7XG4gICAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSB7IHR4SGV4LCB0eEluZm86IHt9IH07XG4gICAgICAgIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IE9OX0NIQUlOX1RFU1RfV0FMTEVULnVzZXIucENoYWluQWRkcmVzcywgYW1vdW50OiAnMScgfV0sXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydCcsXG4gICAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgVFNTIEltcG9ydEluQyB3aGVuIHBhc3NlZCBzZXJpYWxpemVkVHhIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZEltcG9ydEluQygpO1xuICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0geyB0eEhleCwgdHhJbmZvOiB7fSB9O1xuICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHg5Njk5M0JBRWI2QWFFMmUwNkJGOTVGMTQ0ZTI3NzVENGY4ZWZiRDM1JywgYW1vdW50OiAnMScgfV0sXG4gICAgICAgICAgdHlwZTogJ0ltcG9ydFRvQycsXG4gICAgICAgICAgbG9ja3RpbWU6IDAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHdhbGxldFR5cGU6ICd0c3MnLFxuICAgICAgICB9KTtcbiAgICAgICAgaXNWZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB2ZXJpZnkgc2lnbmFibGVQYXlsb2FkIGlzIFNIQS0yNTYgb2Ygc2VyaWFsaXplZCB0eCAoc2FuZGJveC12ZXJpZmllZCknLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIHVuc2lnbmVkVHgudG9CeXRlcygpIOKGkiBzaGEyNTYg4oaSIE1QQy5zaWduKClcbiAgICAgICAgLy8gVGhlIHNpZ25hYmxlUGF5bG9hZCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMgKFNIQS0yNTYgZGlnZXN0KS5cbiAgICAgICAgLy8gVGhpcyBpcyB3aGF0IHRoZSBXUCBzdG9yZXMgYXMgc2lnbmFibGVIZXggYW5kIHdoYXQgZWNkc2FNUEN2Mi50c1xuICAgICAgICAvLyBtdXN0IHVzZSBkaXJlY3RseSAobm8ga2VjY2FrMjU2IHJlLWhhc2hpbmcpLlxuICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRFeHBvcnRJblAoKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGJhc2Vjb2luLmdldFNpZ25hYmxlUGF5bG9hZCh0eEhleCk7XG5cbiAgICAgICAgLy8gc2lnbmFibGVQYXlsb2FkIGlzIFNIQS0yNTYodHhCb2R5KSDigJQgYWx3YXlzIDMyIGJ5dGVzXG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXlsb2FkLmxlbmd0aCwgMzIsICdzaWduYWJsZVBheWxvYWQgbXVzdCBiZSAzMiBieXRlcyAoU0hBLTI1NiknKTtcblxuICAgICAgICAvLyBUaGUgc2VyaWFsaXplZFR4SGV4IChhZnRlciBzdHJpcHBpbmcgMHgpIHN0YXJ0cyB3aXRoIEF2YWxhbmNoZSBjb2RlYyAnMDAwMCdcbiAgICAgICAgLy8gVGhpcyBpcyBob3cgZWNkc2FNUEN2Mi50cyBkZXRlY3RzIGF0b21pYyB0cmFuc2FjdGlvbnNcbiAgICAgICAgY29uc3QgcmF3SGV4ID0gdHhIZXguc3RhcnRzV2l0aCgnMHgnKSA/IHR4SGV4LnN1YnN0cmluZygyKSA6IHR4SGV4O1xuICAgICAgICBhc3NlcnQub2socmF3SGV4LnN0YXJ0c1dpdGgoJzAwMDAnKSwgJ0F2YWxhbmNoZSBhdG9taWMgdHggbXVzdCBzdGFydCB3aXRoIGNvZGVjIHByZWZpeCAwMDAwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYSBTSEEtMjU2IGhhc2ggYXMgdHhIZXggKHByb3ZlcyB0aGUgZml4IGlzIG5lZWRlZCknLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoYTI1Nkhhc2ggPSAnYScucmVwZWF0KDY0KTtcbiAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHsgdHhIZXg6IHNoYTI1Nkhhc2gsIHR4SW5mbzoge30gfTtcbiAgICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFtdLCB0eXBlOiAnRXhwb3J0JywgbG9ja3RpbWU6IDAgfTtcblxuICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7IHR4UGFyYW1zLCB0eFByZWJ1aWxkLCB3YWxsZXRUeXBlOiAndHNzJyB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRocmV3ID0gdHJ1ZTtcbiAgICAgICAgICBhc3NlcnQoZS5tZXNzYWdlLmluY2x1ZGVzKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyksIGBFeHBlY3RlZCAnSW52YWxpZCB0cmFuc2FjdGlvbicsIGdvdDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHRocmV3LCAnRXhwZWN0ZWQgdmVyaWZ5VHJhbnNhY3Rpb24gdG8gdGhyb3cgZm9yIFNIQS0yNTYgaGFzaCBhcyB0eEhleCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=