@bitgo-beta/sdk-coin-avaxp 3.5.10-beta.99 → 3.5.10-beta.991
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +661 -0
- package/dist/src/avaxp.d.ts +7 -6
- package/dist/src/avaxp.d.ts.map +1 -1
- package/dist/src/avaxp.js +50 -40
- package/dist/src/iface.d.ts +0 -4
- package/dist/src/iface.d.ts.map +1 -1
- package/dist/src/iface.js +1 -1
- package/dist/src/index.js +23 -9
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +2 -3
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +1 -1
- package/dist/src/lib/atomicTransactionBuilder.d.ts +2 -4
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +7 -9
- package/dist/src/lib/delegatorTxBuilder.d.ts +6 -7
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/delegatorTxBuilder.js +9 -11
- package/dist/src/lib/deprecatedTransaction.d.ts +98 -0
- package/dist/src/lib/deprecatedTransaction.d.ts.map +1 -0
- package/dist/src/lib/deprecatedTransaction.js +344 -0
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts +114 -0
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/deprecatedTransactionBuilder.js +210 -0
- package/dist/src/lib/exportInCTxBuilder.d.ts +8 -9
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportInCTxBuilder.js +4 -4
- package/dist/src/lib/exportTxBuilder.d.ts +4 -5
- package/dist/src/lib/exportTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportTxBuilder.js +3 -3
- package/dist/src/lib/iface.d.ts +12 -9
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +2 -2
- package/dist/src/lib/importInCTxBuilder.d.ts +4 -5
- package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/importInCTxBuilder.js +6 -6
- package/dist/src/lib/importTxBuilder.d.ts +4 -4
- package/dist/src/lib/importTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/importTxBuilder.js +3 -3
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +11 -3
- package/dist/src/lib/keyPair.d.ts +0 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +20 -21
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +154 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +452 -0
- package/dist/src/lib/transaction.d.ts +19 -41
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +68 -168
- package/dist/src/lib/transactionBuilder.d.ts +31 -82
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +65 -151
- package/dist/src/lib/transactionBuilderFactory.d.ts +16 -8
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +77 -19
- package/dist/src/lib/utils.d.ts +23 -9
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +72 -22
- package/dist/src/lib/utxoEngine.d.ts +10 -2
- package/dist/src/lib/utxoEngine.d.ts.map +1 -1
- package/dist/src/lib/utxoEngine.js +29 -6
- package/dist/src/lib/validatorTxBuilder.d.ts +4 -4
- package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/validatorTxBuilder.js +2 -2
- package/dist/test/resources/avaxp.d.ts +80 -6
- package/dist/test/resources/avaxp.d.ts.map +1 -1
- package/dist/test/resources/avaxp.js +166 -33
- package/dist/test/resources/tx/importP.js +8 -8
- package/dist/test/unit/avaxp.js +109 -117
- package/dist/test/unit/lib/exportC2PTxBuilder.js +23 -9
- package/dist/test/unit/lib/exportP2CTxBuilder.js +27 -17
- package/dist/test/unit/lib/importC2PTxBuilder.js +25 -11
- package/dist/test/unit/lib/importP2CTxBuilder.js +25 -13
- package/dist/test/unit/lib/keyPair.js +23 -9
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +341 -0
- package/dist/test/unit/lib/signFlowTestSuit.js +2 -2
- package/dist/test/unit/lib/transactionBuilderFactory.js +25 -11
- package/dist/test/unit/lib/utils.js +23 -9
- package/dist/test/unit/lib/utxoEngine.js +6 -6
- package/dist/test/unit/lib/validateTxBuilder.js +29 -20
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
40
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
41
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
42
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
43
|
+
const assert_1 = __importDefault(require("assert"));
|
|
44
|
+
const src_1 = require("../../../src");
|
|
45
|
+
const AvaxpLib = __importStar(require("../../../src/lib"));
|
|
46
|
+
const lib_1 = require("../../../src/lib");
|
|
47
|
+
const permissionlessValidatorTxBuilder_1 = require("../../../src/lib/permissionlessValidatorTxBuilder");
|
|
48
|
+
const testData = __importStar(require("../../resources/avaxp"));
|
|
49
|
+
// import { pvm } from '@bitgo-forks/avalanchejs';
|
|
50
|
+
describe('AvaxP permissionlessValidatorTxBuilder', () => {
|
|
51
|
+
let basecoin;
|
|
52
|
+
let bitgo;
|
|
53
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'));
|
|
54
|
+
before(() => {
|
|
55
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
|
|
56
|
+
env: 'mock',
|
|
57
|
+
});
|
|
58
|
+
bitgo.initializeTestVars();
|
|
59
|
+
bitgo.safeRegister('avaxp', src_1.AvaxP.createInstance);
|
|
60
|
+
bitgo.safeRegister('tavaxp', src_1.TavaxP.createInstance);
|
|
61
|
+
basecoin = bitgo.coin('tavaxp');
|
|
62
|
+
});
|
|
63
|
+
it('should create transaction builder from hex', () => {
|
|
64
|
+
const txBuilder = factory.from(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.halfSignedTx);
|
|
65
|
+
txBuilder.should.be.an.instanceOf(permissionlessValidatorTxBuilder_1.PermissionlessValidatorTxBuilder);
|
|
66
|
+
});
|
|
67
|
+
describe('Transaction readable', () => {
|
|
68
|
+
let tx;
|
|
69
|
+
before(async () => {
|
|
70
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADD_VALIDATOR_ID_SAMPLE.fullsigntxHex);
|
|
71
|
+
tx = await txBuilder.build();
|
|
72
|
+
});
|
|
73
|
+
it('Should json stringifiy addPermissionlessValidator transaction', async () => {
|
|
74
|
+
const txJson = tx.toJson();
|
|
75
|
+
(0, assert_1.default)(typeof JSON.stringify(tx.toJson()), 'string');
|
|
76
|
+
txJson.id.should.equal(testData.ADD_VALIDATOR_ID_SAMPLE.txid);
|
|
77
|
+
});
|
|
78
|
+
it('Should get a txid', async () => {
|
|
79
|
+
tx.id.should.equal(testData.ADD_VALIDATOR_ID_SAMPLE.txid);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
describe('should explains transaction', () => {
|
|
83
|
+
it('should explains a Signed AddPermissionlessValidatorTx', async () => {
|
|
84
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(
|
|
85
|
+
// https://testnet.snowtrace.io/pvm/tx/2tt3KE6gAG7qpMLL6xoynSyk7ht4egQ74wcF7AuGm25vQ3QNWB?chainId=43113
|
|
86
|
+
'0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000000baeb90000000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee000000024f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000023a4c180000000030000000200000000000000014f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000023a4c180000000030000000200000000000000010000000094a8b8179f0b6e7e7ce55b4d6ec5ad56dae1de9f0000000062bb03e60000000062e32556000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001c8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e1586a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca0000000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee0000000b00000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee0000000b00000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee00030d40000000020000000900000002b631e9553a8721978bffed3e778de7eb904e167599c1d26d5a8d3c46158df661164c6ca6029f24988020ccfcd673e5c19817ff74d012651f245d009a749591160170eae73d7e19b045671d41050b11791643567d1bc9cc51fa226d2be95a65689f19cda06a242a9749f6a150fcc2a5b50af12a1bc3564d1b76ac1e3826b5e21361010000000900000002b631e9553a8721978bffed3e778de7eb904e167599c1d26d5a8d3c46158df661164c6ca6029f24988020ccfcd673e5c19817ff74d012651f245d009a749591160170eae73d7e19b045671d41050b11791643567d1bc9cc51fa226d2be95a65689f19cda06a242a9749f6a150fcc2a5b50af12a1bc3564d1b76ac1e3826b5e2136101');
|
|
87
|
+
const tx = await txBuilder.build();
|
|
88
|
+
const txExplain = tx.explainTransaction();
|
|
89
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
90
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
91
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
92
|
+
});
|
|
93
|
+
it('should explains a Signed AddPermissionlessValidatorTx and order inputs', async () => {
|
|
94
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('avaxp')).from(
|
|
95
|
+
// https://testnet.snowtrace.io/pvm/tx/2tt3KE6gAG7qpMLL6xoynSyk7ht4egQ74wcF7AuGm25vQ3QNWB?chainId=43113
|
|
96
|
+
'0x0000000000190000000100000000000000000000000000000000000000000000000000000000000000000000000121e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff0000000700000000773594000000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c18000000046f8bdc3c893edd2c7f24a6190d6233fda5ccf517d96dd6c08d134179abb2d14e0000000021e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff0000000500000047036aaa00000000020000000100000002865cc8568b9c4c7d36bb96e086619d8c85218d653ff56d051334f839e58977c30000000221e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff00000005000000005fb5d590000000020000000100000002865cc8568b9c4c7d36bb96e086619d8c85218d653ff56d051334f839e58977c30000000121e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff0000000500000007ae61e378000000020000000100000002865cc8568b9c4c7d36bb96e086619d8c85218d653ff56d051334f839e58977c30000000021e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff00000005000003ffb6db3f6900000002000000010000000200000000953cc95e84f29dc6ee7589ef6acb01c9d561cba3000000006616c6750000000066560e750000044e51280e7100000000000000000000000000000000000000000000000000000000000000000000001ca7a2f29ca580c4254e3beabce2047e04ea8c3c7c69a5817b5461c2239593561a3843bc7cb14576390378b145135301478ff8cb5a651e3d082fd6cd1e1777edeabd5b0924ca648f3890d82ebd6259b3cca00e30faa249482fef10293f42e28afb15f0a5dd3f37e5524cd5de3f3c2b909df49873b8196af60004d3f3a84baa46ba08df7baf8e486b0b79a9c207095e1a430000000121e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff000000070000044e51280e710000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c180000000b0000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c180000000b0000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c1800004e2000000004000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a04114001000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a04114001000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a04114001000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a0411400127efec04');
|
|
97
|
+
const tx = await txBuilder.build();
|
|
98
|
+
const txExplain = tx.explainTransaction();
|
|
99
|
+
txExplain.inputs[0].id.should.equal('r8JUUYFv9NWcNe5cxMFdBRjqkL6FZewDf2GtkttmxWCdeFFMK:0');
|
|
100
|
+
txExplain.inputs[1].id.should.equal('22B7GH7fDarBqyw8W7atC8ED3euVnefTiEWBPBmaSXrAhAQ4Lk:0');
|
|
101
|
+
txExplain.inputs[2].id.should.equal('22B7GH7fDarBqyw8W7atC8ED3euVnefTiEWBPBmaSXrAhAQ4Lk:1');
|
|
102
|
+
txExplain.inputs[3].id.should.equal('22B7GH7fDarBqyw8W7atC8ED3euVnefTiEWBPBmaSXrAhAQ4Lk:2');
|
|
103
|
+
});
|
|
104
|
+
it('should explains a Signed AddPermissionlessValidatorTx from raw', async () => {
|
|
105
|
+
const oldHex = '0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000000b9f76c00000000000000000000000020000000342e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1eeac03c0ca71a1dde84702d272fbdd086001867012000000024f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000023a4c1800000000200000000000000014f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000023a4c1800000000200000000000000010000000094a8b8179f0b6e7e7ce55b4d6ec5ad56dae1de9f0000000062bb03e60000000062e32556000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001c8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e1586a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca000000000000000000000000020000000342e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1eeac03c0ca71a1dde84702d272fbdd0860018670120000000b0000000000000000000000020000000342e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1eeac03c0ca71a1dde84702d272fbdd0860018670120000000b0000000000000000000000020000000342e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1eeac03c0ca71a1dde84702d272fbdd08600186701200004e2000000002000000090000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008be54f016ab748127ab1a184626cba44c748a1ee000000090000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008be54f016ab748127ab1a184626cba44c748a1ee964888d4';
|
|
106
|
+
const sortedBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(oldHex);
|
|
107
|
+
const sortedTx = await sortedBuilder.build();
|
|
108
|
+
const txExplain = sortedTx.explainTransaction();
|
|
109
|
+
// this tx is sorted and can be broadcasted
|
|
110
|
+
const newHex = sortedTx.toBroadcastFormat();
|
|
111
|
+
(0, assert_1.default)(newHex === oldHex);
|
|
112
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
113
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
114
|
+
txExplain.outputs[0].address.should.equal('NodeID-EZ38CcWHoSyoEfAkDN9zaieJ5Yq64YePY');
|
|
115
|
+
});
|
|
116
|
+
it('should explain AddPermissionlessValidatorTx with 1 input', async () => {
|
|
117
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from('0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d425721000000014f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000007735940000000002000000000000000100000000e25c9a09eb9c68d4807a39f97893facd9a6a7da100000000660d750900000000660ec689000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001c8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e1586a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d4257210000000b000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d4257210000000b000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d42572100030d40000000010000000900000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db94335f2f668b9707c78903c3b5ac54c6f4054700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c5543b0');
|
|
118
|
+
const tx = await txBuilder.build();
|
|
119
|
+
const txExplain = tx.explainTransaction();
|
|
120
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
121
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
122
|
+
txExplain.outputs[0].address.should.equal('NodeID-MdteS9U987PY7iwA5Pcz3sKVprJAbAvE7');
|
|
123
|
+
});
|
|
124
|
+
it('should explains a Half Signed AddPermissionlessValidatorTx', async () => {
|
|
125
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADDVALIDATOR_SAMPLES.halfsigntxHex);
|
|
126
|
+
const tx = await txBuilder.build();
|
|
127
|
+
const txExplain = tx.explainTransaction();
|
|
128
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
129
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
130
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
131
|
+
});
|
|
132
|
+
it('should explains a unsigned AddPermissionlessValidatorTx', async () => {
|
|
133
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADDVALIDATOR_SAMPLES.unsignedTxHex);
|
|
134
|
+
const tx = await txBuilder.build();
|
|
135
|
+
const txExplain = tx.explainTransaction();
|
|
136
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
137
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
138
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('Sign Transaction', () => {
|
|
142
|
+
it('build and sign an AddPermissionlessValidator transaction and broadcast', async () => {
|
|
143
|
+
/*
|
|
144
|
+
|
|
145
|
+
const keyMapping: Record<string, any> = {
|
|
146
|
+
f45d1c9bf57d3c02299a727d6e5d8d4e76498846b1a289b4e31a2ecccbc212fb: {
|
|
147
|
+
source: 'user',
|
|
148
|
+
encoded: 'BhjEzaXMSFj4aQBhw27Dsn73b8rR9gCTX',
|
|
149
|
+
pub: '02abb451c0cc240e9a4fb97a130846d90a87247264e57014e41dc226ebf4965724',
|
|
150
|
+
prv: 'f45d1c9bf57d3c02299a727d6e5d8d4e76498846b1a289b4e31a2ecccbc212fb',
|
|
151
|
+
address: 'P-fuji1w4jjs4qfugq0m3nu0d3htx6662dlq87zq5nz33',
|
|
152
|
+
},
|
|
153
|
+
'2e0ffe6efbfcc27e9aaf4bce6af78d4c66e89b0955b85f02d7e15910e16ed4cd': {
|
|
154
|
+
source: 'backup',
|
|
155
|
+
encoded: 'BFzPJNifqdf6Z8H2P76gTEbd8RmCjMSzL',
|
|
156
|
+
pub: '025523fa48a5b0c8ed4a8344aab8396061fb42cb4f168ba5d3ae19f034c4ea2d4d',
|
|
157
|
+
prv: '2e0ffe6efbfcc27e9aaf4bce6af78d4c66e89b0955b85f02d7e15910e16ed4cd',
|
|
158
|
+
address: 'P-fuji1wzr0hsm8zlr6gpaakxvt67f999nj044ete07uw',
|
|
159
|
+
},
|
|
160
|
+
'5a360c848021024528dfc02e79ba441f1727c765b4d0dcec288ffbd2772cd432': {
|
|
161
|
+
source: 'bitgo',
|
|
162
|
+
encoded: 'HT6zoSecYyqJX63Hqaj1usvyqJbrnc8ia',
|
|
163
|
+
pub: '03d71cda3b1c32eed044866ec96c2ac54af43e7edb8f1535df51f341e49674ffaa',
|
|
164
|
+
prv: '5a360c848021024528dfc02e79ba441f1727c765b4d0dcec288ffbd2772cd432',
|
|
165
|
+
address: 'P-fuji1k3ca2njcunzl4hhxy24avca7htf66cmjjukl0n',
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
*/
|
|
169
|
+
const unixNow = BigInt(Math.round(new Date().getTime() / 1000));
|
|
170
|
+
const startTime = unixNow + BigInt(60);
|
|
171
|
+
const endTime = startTime + BigInt(60 * 60 * 24 + 600); // 24 hours + 10 minutes
|
|
172
|
+
// const AVAX_PUBLIC_URL = 'https://api.avax-test.network';
|
|
173
|
+
// const pvmapi = new pvm.PVMApi(AVAX_PUBLIC_URL);
|
|
174
|
+
// const { utxos } = await pvmapi.getUTXOs({
|
|
175
|
+
// addresses: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses,
|
|
176
|
+
// });
|
|
177
|
+
// console.log(utxos);
|
|
178
|
+
const recoveryMode = false;
|
|
179
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
180
|
+
.getPermissionlessValidatorTxBuilder()
|
|
181
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.threshold)
|
|
182
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.locktime)
|
|
183
|
+
.recoverMode(recoveryMode)
|
|
184
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses)
|
|
185
|
+
.startTime(startTime.toString())
|
|
186
|
+
.endTime(endTime.toString())
|
|
187
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount)
|
|
188
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
189
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.nodeId)
|
|
190
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsPublicKey)
|
|
191
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsSignature)
|
|
192
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.utxos);
|
|
193
|
+
const tx = await txBuilder.build();
|
|
194
|
+
const txExplain = tx.explainTransaction();
|
|
195
|
+
const txJson = tx.toJson();
|
|
196
|
+
(0, assert_1.default)(txExplain.outputAmount === testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount);
|
|
197
|
+
txExplain.inputs[0].id.should.equal('WyjYJHa7Ye1KMsBZiQ8hQJzY7YYxTJTTyMkxcVrKRDiNytTY8:0');
|
|
198
|
+
txExplain.inputs[1].id.should.equal('WyjYJHa7Ye1KMsBZiQ8hQJzY7YYxTJTTyMkxcVrKRDiNytTY8:1');
|
|
199
|
+
txExplain.inputs[2].id.should.equal('s92SjoZQemgG97HocX9GgyFy6ZKmapgcgqQ3y5J2uwP3qWBUy:0');
|
|
200
|
+
txExplain.fee.fee.should.equal('1000000');
|
|
201
|
+
(0, assert_1.default)(txJson.outputs[0].value === testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount);
|
|
202
|
+
tx.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
203
|
+
console.log(tx.toBroadcastFormat());
|
|
204
|
+
const txBuilder2 = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
205
|
+
.from(tx.toBroadcastFormat())
|
|
206
|
+
.recoverMode(false);
|
|
207
|
+
const tx2 = await txBuilder2.build();
|
|
208
|
+
tx2.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
209
|
+
// Test sign with user key
|
|
210
|
+
txBuilder2.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.userPrivateKey });
|
|
211
|
+
const halfSigned = await txBuilder2.build();
|
|
212
|
+
const halfSignedTxHex = halfSigned.toBroadcastFormat();
|
|
213
|
+
(0, assert_1.default)(txBuilder['_stakeAmount'] === txBuilder2['_stakeAmount']);
|
|
214
|
+
console.log(halfSignedTxHex);
|
|
215
|
+
// const txBuilder2 = factory.from(halfSignedTxHex);
|
|
216
|
+
// txBuilder2.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.backupPrivateKey });
|
|
217
|
+
// const fullSignedTx = await txBuilder2.build();
|
|
218
|
+
// console.log(fullSignedTx.toJson());
|
|
219
|
+
// const res = await pvmapi.issueTx({ tx: fullSignedTx.toBroadcastFormat() });
|
|
220
|
+
// const txSigned =
|
|
221
|
+
// '0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000070000000005c81a40000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad6372000000024411af9d9877c52c1be3f77825a74ca11869128478c4145910e92695a24c7d80000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b9aca0000000002000000010000000271d8644c9199e30b9fef53af56aef243e5431c6b1b09d5f11a6622c86db3f39d000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000005c81a4000000002000000010000000200000000129a271ff407b1101f35aec82a2f715c5239bd3900000000660f4ab50000000066109e8d000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001cad9e9476b701edec88e53b1c314456053b3cf846a1192117872e41455f440c074d6ee89530d45e88f79ac0eda06f2887a94d6182edbd953516b262f17565a65d98f5741549cd70d2423abff750bb4b8d982d482376b189142ff8aa4705615fee14be6174610860e9c003aa4aeaa613b1732abf3cd0c9c42fa5856345644068c0d1f9fa1d9af32e20b14fca02983260bc000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad637200030d4000000002000000090000000228a59420971953aa61b4b4c90b934ef76e6e9c8ad256e9417e9a6b5017d836813b2b5cad2a890c66c8295f104d74192c4964cf289e2a45adb57a7b05b5e9529e004ec2dae5c48ba6fa4d1e0b1c6b9d9bbe79c481ff16848c1fa3fa3a6ed47431a12af4b2d9779bb192bb3f254408731798b50c8f03f25b7e7d7313738892e71d6601000000090000000228a59420971953aa61b4b4c90b934ef76e6e9c8ad256e9417e9a6b5017d836813b2b5cad2a890c66c8295f104d74192c4964cf289e2a45adb57a7b05b5e9529e004ec2dae5c48ba6fa4d1e0b1c6b9d9bbe79c481ff16848c1fa3fa3a6ed47431a12af4b2d9779bb192bb3f254408731798b50c8f03f25b7e7d7313738892e71d660151aa291f';
|
|
222
|
+
// const txBuilder = new TransactionBuilderFactory(coins.get('tavaxp')).from(tx);
|
|
223
|
+
// const decode = await txBuilder.build();
|
|
224
|
+
// console.log(decode.toJson());
|
|
225
|
+
// const res = await pvmapi.issueTx({ tx: txSigned });
|
|
226
|
+
// console.log(res);
|
|
227
|
+
});
|
|
228
|
+
it('build and sign an AddPermissionlessValidator transaction', async () => {
|
|
229
|
+
const recoveryMode = false;
|
|
230
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
231
|
+
.getPermissionlessValidatorTxBuilder()
|
|
232
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.threshold)
|
|
233
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.locktime)
|
|
234
|
+
.recoverMode(recoveryMode)
|
|
235
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.bitgoAddresses)
|
|
236
|
+
.startTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.startTime)
|
|
237
|
+
.endTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.endTime)
|
|
238
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.stakeAmount)
|
|
239
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.delegationFeeRate)
|
|
240
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.nodeId)
|
|
241
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsPublicKey)
|
|
242
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsSignature)
|
|
243
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.utxos);
|
|
244
|
+
const tx = await txBuilder.build();
|
|
245
|
+
tx.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
246
|
+
// Test sign with user key
|
|
247
|
+
txBuilder.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.userPrivateKey });
|
|
248
|
+
txBuilder.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.backupPrivateKey });
|
|
249
|
+
const fullSignedTx = await txBuilder.build();
|
|
250
|
+
console.log(fullSignedTx.toJson());
|
|
251
|
+
});
|
|
252
|
+
it('build and sign a transaction in recovery mode', async () => {
|
|
253
|
+
const recoveryMode = true;
|
|
254
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
255
|
+
.getPermissionlessValidatorTxBuilder()
|
|
256
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.threshold)
|
|
257
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.locktime)
|
|
258
|
+
.recoverMode(recoveryMode)
|
|
259
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.bitgoAddresses)
|
|
260
|
+
.startTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.startTime)
|
|
261
|
+
.endTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.endTime)
|
|
262
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.stakeAmount)
|
|
263
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.delegationFeeRate)
|
|
264
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.nodeId)
|
|
265
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsPublicKey)
|
|
266
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsSignature)
|
|
267
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.utxos);
|
|
268
|
+
const tx = await txBuilder.build();
|
|
269
|
+
let txHex = tx.toBroadcastFormat();
|
|
270
|
+
txHex.should.equal(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.unsignedRawtxRecovery);
|
|
271
|
+
const privateKey = recoveryMode
|
|
272
|
+
? testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.backupPrivateKey
|
|
273
|
+
: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.userPrivateKey;
|
|
274
|
+
const params = {
|
|
275
|
+
txPrebuild: {
|
|
276
|
+
txHex: tx.toBroadcastFormat(),
|
|
277
|
+
},
|
|
278
|
+
prv: privateKey,
|
|
279
|
+
};
|
|
280
|
+
const halfSignedTransaction = await basecoin.signTransaction(params);
|
|
281
|
+
txHex = halfSignedTransaction?.halfSigned?.txHex;
|
|
282
|
+
txHex.should.equal(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.halfSignedRawTxRecovery);
|
|
283
|
+
});
|
|
284
|
+
it('build and sign an AddPermissionlessValidator transaction and broadcast in recovery mode', async () => {
|
|
285
|
+
const unixNow = BigInt(Math.round(new Date().getTime() / 1000));
|
|
286
|
+
const startTime = unixNow + BigInt(60);
|
|
287
|
+
const endTime = startTime + BigInt(60 * 60 * 24 + 600);
|
|
288
|
+
const recoveryMode = true;
|
|
289
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
290
|
+
.getPermissionlessValidatorTxBuilder()
|
|
291
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.threshold)
|
|
292
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.locktime)
|
|
293
|
+
.recoverMode(recoveryMode)
|
|
294
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses)
|
|
295
|
+
.startTime(startTime.toString())
|
|
296
|
+
.endTime(endTime.toString())
|
|
297
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount)
|
|
298
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
299
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.nodeId)
|
|
300
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsPublicKey)
|
|
301
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsSignature)
|
|
302
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.utxos);
|
|
303
|
+
const tx = await txBuilder.build();
|
|
304
|
+
tx.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
305
|
+
// Test sign with user key
|
|
306
|
+
txBuilder.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.backupPrivateKey });
|
|
307
|
+
const halfSigned = await txBuilder.build();
|
|
308
|
+
const halfSignedTxHex = halfSigned.toBroadcastFormat();
|
|
309
|
+
const txBuilder2 = factory.from(halfSignedTxHex);
|
|
310
|
+
txBuilder2.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.userPrivateKey });
|
|
311
|
+
const fullSignedTx = await txBuilder2.build();
|
|
312
|
+
console.log(fullSignedTx.toJson());
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
it('Should fail to build if utxos change output 0', async () => {
|
|
316
|
+
const unixNow = BigInt(Math.round(new Date().getTime() / 1000));
|
|
317
|
+
const startTime = unixNow + BigInt(60);
|
|
318
|
+
const endTime = startTime + BigInt(60 * 60 * 24 + 600);
|
|
319
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
320
|
+
.getPermissionlessValidatorTxBuilder()
|
|
321
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.threshold)
|
|
322
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.locktime)
|
|
323
|
+
.recoverMode(false)
|
|
324
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses)
|
|
325
|
+
.startTime(startTime.toString())
|
|
326
|
+
.endTime(endTime.toString())
|
|
327
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmountNoOutput)
|
|
328
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
329
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.nodeId)
|
|
330
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsPublicKey)
|
|
331
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsSignature)
|
|
332
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.utxos);
|
|
333
|
+
const tx = await txBuilder.build();
|
|
334
|
+
const txJson = tx.toJson();
|
|
335
|
+
const txExplain = tx.explainTransaction();
|
|
336
|
+
txJson.changeOutputs.length.should.equal(0);
|
|
337
|
+
txExplain.changeOutputs.length.should.equal(0);
|
|
338
|
+
txExplain.changeAmount.should.equal('0');
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQStDO0FBQy9DLG1EQUFzRztBQUN0RyxtREFBK0Q7QUFDL0QsaURBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QixzQ0FBNkM7QUFDN0MsMkRBQTZDO0FBQzdDLDBDQUE2RDtBQUM3RCx3R0FBcUc7QUFDckcsZ0VBQWtEO0FBQ2xELGtEQUFrRDtBQUVsRCxRQUFRLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO0lBQ3RELElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRW5FLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDVixLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxZQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1FBQ3BELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUVBQWdDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7UUFDcEMsSUFBSSxFQUFtQixDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQy9DLENBQUM7WUFDRixFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0UsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUEsZ0JBQU0sRUFBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQzNDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3ZFLHVHQUF1RztZQUN2RyxneEVBQWd4RSxDQUNqeEUsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyRixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RGLE1BQU0sU0FBUyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDdEUsdUdBQXVHO1lBQ3ZHLGdxR0FBZ3FHLENBQ2pxRyxDQUFDO1lBQ0YsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQzNGLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUM1RixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDNUYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQzlGLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlFLE1BQU0sTUFBTSxHQUNWLHd3RUFBd3dFLENBQUM7WUFDM3dFLE1BQU0sYUFBYSxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RixNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNoRCwyQ0FBMkM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUMsSUFBQSxnQkFBTSxFQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztZQUMxQixTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckYsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN4RSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEUsTUFBTSxTQUFTLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2RSw0ekRBQTR6RCxDQUM3ekQsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyRixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRSxNQUFNLFNBQVMsR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQzVDLENBQUM7WUFDRixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckYsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2RSxRQUFRLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUM1QyxDQUFDO1lBQ0YsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JGLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQXlCRztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRSxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7WUFFaEYsMkRBQTJEO1lBQzNELGtEQUFrRDtZQUNsRCw0Q0FBNEM7WUFDNUMsMkZBQTJGO1lBQzNGLE1BQU07WUFDTixzQkFBc0I7WUFFdEIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzFFLG1DQUFtQyxFQUFFO2lCQUNyQyxTQUFTLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLFNBQVMsQ0FBQztpQkFDaEYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxRQUFRLENBQUM7aUJBQzlFLFdBQVcsQ0FBQyxZQUFZLENBQUM7aUJBQ3pCLFVBQVUsQ0FBQyxRQUFRLENBQUMsa0RBQWtELENBQUMsY0FBYyxDQUFDO2lCQUN0RixTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUMvQixPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUMzQixXQUFXLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLFdBQVcsQ0FBQztpQkFDcEYsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLGlCQUFpQixDQUFDO2lCQUNoRyxNQUFNLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLE1BQU0sQ0FBQztpQkFDMUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxZQUFZLENBQUM7aUJBQ3RGLFlBQVksQ0FBQyxRQUFRLENBQUMsa0RBQWtELENBQUMsWUFBWSxDQUFDO2lCQUN0RixLQUFLLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVFLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFBLGdCQUFNLEVBQUMsU0FBUyxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUMsa0RBQWtELENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0csU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQzNGLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztZQUMzRixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7WUFDM0YsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLGtEQUFrRCxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBRXBDLE1BQU0sVUFBVSxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2lCQUM1QixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUNsRSwwQkFBMEI7WUFDMUIsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsa0RBQWtELENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNyRyxNQUFNLFVBQVUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2RCxJQUFBLGdCQUFNLEVBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFN0Isb0RBQW9EO1lBQ3BELDBHQUEwRztZQUMxRyxpREFBaUQ7WUFDakQsc0NBQXNDO1lBRXRDLDhFQUE4RTtZQUM5RSxtQkFBbUI7WUFDbkIsOHdFQUE4d0U7WUFDOXdFLGlGQUFpRjtZQUNqRiwwQ0FBMEM7WUFDMUMsZ0NBQWdDO1lBRWhDLHNEQUFzRDtZQUN0RCxvQkFBb0I7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEUsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzFFLG1DQUFtQyxFQUFFO2lCQUNyQyxTQUFTLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQztpQkFDdEUsUUFBUSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxRQUFRLENBQUM7aUJBQ3BFLFdBQVcsQ0FBQyxZQUFZLENBQUM7aUJBQ3pCLFVBQVUsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsY0FBYyxDQUFDO2lCQUM1RSxTQUFTLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQztpQkFDdEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxPQUFPLENBQUM7aUJBQ2xFLFdBQVcsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsV0FBVyxDQUFDO2lCQUMxRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsaUJBQWlCLENBQUM7aUJBQ3RGLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsTUFBTSxDQUFDO2lCQUNoRSxZQUFZLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLFlBQVksQ0FBQztpQkFDNUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxZQUFZLENBQUM7aUJBQzVFLEtBQUssQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUVqRSwwQkFBMEI7WUFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsd0NBQXdDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUMxRixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDNUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDMUUsbUNBQW1DLEVBQUU7aUJBQ3JDLFNBQVMsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsU0FBUyxDQUFDO2lCQUN0RSxRQUFRLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLFFBQVEsQ0FBQztpQkFDcEUsV0FBVyxDQUFDLFlBQVksQ0FBQztpQkFDekIsVUFBVSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxjQUFjLENBQUM7aUJBQzVFLFNBQVMsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsU0FBUyxDQUFDO2lCQUN0RSxPQUFPLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLE9BQU8sQ0FBQztpQkFDbEUsV0FBVyxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxXQUFXLENBQUM7aUJBQzFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxpQkFBaUIsQ0FBQztpQkFDdEYsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxNQUFNLENBQUM7aUJBQ2hFLFlBQVksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsWUFBWSxDQUFDO2lCQUM1RSxZQUFZLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLFlBQVksQ0FBQztpQkFDNUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVuQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUU1RixNQUFNLFVBQVUsR0FBRyxZQUFZO2dCQUM3QixDQUFDLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLGdCQUFnQjtnQkFDcEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsQ0FBQyxjQUFjLENBQUM7WUFFckUsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsVUFBVSxFQUFFO29CQUNWLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUU7aUJBQzlCO2dCQUNELEdBQUcsRUFBRSxVQUFVO2FBQ2hCLENBQUM7WUFFRixNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyRSxLQUFLLEdBQUkscUJBQXNELEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQztZQUNuRixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RkFBeUYsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN2RyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2QyxNQUFNLE9BQU8sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBRXZELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQztZQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUMxRSxtQ0FBbUMsRUFBRTtpQkFDckMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxTQUFTLENBQUM7aUJBQ2hGLFFBQVEsQ0FBQyxRQUFRLENBQUMsa0RBQWtELENBQUMsUUFBUSxDQUFDO2lCQUM5RSxXQUFXLENBQUMsWUFBWSxDQUFDO2lCQUN6QixVQUFVLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLGNBQWMsQ0FBQztpQkFDdEYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDM0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxXQUFXLENBQUM7aUJBQ3BGLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxpQkFBaUIsQ0FBQztpQkFDaEcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxNQUFNLENBQUM7aUJBQzFFLFlBQVksQ0FBQyxRQUFRLENBQUMsa0RBQWtELENBQUMsWUFBWSxDQUFDO2lCQUN0RixZQUFZLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLFlBQVksQ0FBQztpQkFDdEYsS0FBSyxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBRWpFLDBCQUEwQjtZQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDdEcsTUFBTSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0MsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFdkQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sWUFBWSxHQUFHLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRXZELE1BQU0sU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUUsbUNBQW1DLEVBQUU7YUFDckMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxTQUFTLENBQUM7YUFDaEYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxRQUFRLENBQUM7YUFDOUUsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUNsQixVQUFVLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLGNBQWMsQ0FBQzthQUN0RixTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDM0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxtQkFBbUIsQ0FBQzthQUM1RixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsa0RBQWtELENBQUMsaUJBQWlCLENBQUM7YUFDaEcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxNQUFNLENBQUM7YUFDMUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxZQUFZLENBQUM7YUFDdEYsWUFBWSxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxZQUFZLENBQUM7YUFDdEYsS0FBSyxDQUFDLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgQXZheFAsIFRhdmF4UCB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyBBdmF4cExpYiBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9wZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuLy8gaW1wb3J0IHsgcHZtIH0gZnJvbSAnQGJpdGdvLWZvcmtzL2F2YWxhbmNoZWpzJztcblxuZGVzY3JpYmUoJ0F2YXhQIHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJywgKCkgPT4ge1xuICBsZXQgYmFzZWNvaW47XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSk7XG5cbiAgYmVmb3JlKCgpID0+IHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdhdmF4cCcsIEF2YXhQLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RhdmF4cCcsIFRhdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YXZheHAnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmcm9tIGhleCcsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuaGFsZlNpZ25lZFR4KTtcbiAgICB0eEJ1aWxkZXIuc2hvdWxkLmJlLmFuLmluc3RhbmNlT2YoUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gcmVhZGFibGUnLCAoKSA9PiB7XG4gICAgbGV0IHR4OiBCYXNlVHJhbnNhY3Rpb247XG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLmZ1bGxzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIHN0cmluZ2lmaXkgYWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGFzc2VydCh0eXBlb2YgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpLCAnc3RyaW5nJyk7XG4gICAgICB0eEpzb24uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBnZXQgYSB0eGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGV4cGxhaW5zIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIC8vIGh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8vcHZtL3R4LzJ0dDNLRTZnQUc3cXBNTEw2eG95blN5azdodDRlZ1E3NHdjRjdBdUdtMjV2UTNRTldCP2NoYWluSWQ9NDMxMTNcbiAgICAgICAgJzB4MDAwMDAwMDAwMDE5MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDBiYWViOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWUwMDAwMDAwMjRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMjNhNGMxODAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMjNhNGMxODAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwOTRhOGI4MTc5ZjBiNmU3ZTdjZTU1YjRkNmVjNWFkNTZkYWUxZGU5ZjAwMDAwMDAwNjJiYjAzZTYwMDAwMDAwMDYyZTMyNTU2MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxYzhmOTU0MjNmNzE0MmQwMGE0OGUxMDE0YTNkZThkMjg5MDdkNDIwZGMzM2IzMDUyYTZkZWUwM2EzZjI5NDFhMzkzYzIzNTFlMzU0NzA0Y2E2NmEzZmMyOTg3MDI4MmUxNTg2YTNhYjRjNDVjZmUzMWNhZTM0YzFkMDZmMjEyNDM0YWM3MWIxYmU2Y2ZlMDQ2YzgwYzE2MmUwNTc2MTRhOTRhNWJjOWYxZGVkMWE3MDI5ZGViMGJhNGNhN2M5YjcxNDExZTI5MzQzODY5MWJlNzljMmRiZjE5ZDFjYTdjM2VhZGI5Yzc1NjI0NmZjNWRlNWI3Yjg5NTExYzdkNzMwMmFlMDUxZDllMDNkNzk5MTEzODI5OWI1ZWQ2YTU3MGE5ODAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzYWMwM2MwY2E3MWExZGRlODQ3MDJkMjcyZmJkZDA4NjAwMTg2NzAxMjQyZTE5YWQ5YTYxN2ZiOTVkY2Y4ODQzYWRlNjZlMDZlNTc4ZjU0OWE4YmU1NGYwMTZhYjc0ODEyN2FiMWExODQ2MjZjYmE0NGM3NDhhMWVlMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwM2FjMDNjMGNhNzFhMWRkZTg0NzAyZDI3MmZiZGQwODYwMDE4NjcwMTI0MmUxOWFkOWE2MTdmYjk1ZGNmODg0M2FkZTY2ZTA2ZTU3OGY1NDlhOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZTAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWUwMDAzMGQ0MDAwMDAwMDAyMDAwMDAwMDkwMDAwMDAwMmI2MzFlOTU1M2E4NzIxOTc4YmZmZWQzZTc3OGRlN2ViOTA0ZTE2NzU5OWMxZDI2ZDVhOGQzYzQ2MTU4ZGY2NjExNjRjNmNhNjAyOWYyNDk4ODAyMGNjZmNkNjczZTVjMTk4MTdmZjc0ZDAxMjY1MWYyNDVkMDA5YTc0OTU5MTE2MDE3MGVhZTczZDdlMTliMDQ1NjcxZDQxMDUwYjExNzkxNjQzNTY3ZDFiYzljYzUxZmEyMjZkMmJlOTVhNjU2ODlmMTljZGEwNmEyNDJhOTc0OWY2YTE1MGZjYzJhNWI1MGFmMTJhMWJjMzU2NGQxYjc2YWMxZTM4MjZiNWUyMTM2MTAxMDAwMDAwMDkwMDAwMDAwMmI2MzFlOTU1M2E4NzIxOTc4YmZmZWQzZTc3OGRlN2ViOTA0ZTE2NzU5OWMxZDI2ZDVhOGQzYzQ2MTU4ZGY2NjExNjRjNmNhNjAyOWYyNDk4ODAyMGNjZmNkNjczZTVjMTk4MTdmZjc0ZDAxMjY1MWYyNDVkMDA5YTc0OTU5MTE2MDE3MGVhZTczZDdlMTliMDQ1NjcxZDQxMDUwYjExNzkxNjQzNTY3ZDFiYzljYzUxZmEyMjZkMmJlOTVhNjU2ODlmMTljZGEwNmEyNDJhOTc0OWY2YTE1MGZjYzJhNWI1MGFmMTJhMWJjMzU2NGQxYjc2YWMxZTM4MjZiNWUyMTM2MTAxJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCBhbmQgb3JkZXIgaW5wdXRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCdhdmF4cCcpKS5mcm9tKFxuICAgICAgICAvLyBodHRwczovL3Rlc3RuZXQuc25vd3RyYWNlLmlvL3B2bS90eC8ydHQzS0U2Z0FHN3FwTUxMNnhveW5TeWs3aHQ0ZWdRNzR3Y0Y3QXVHbTI1dlEzUU5XQj9jaGFpbklkPTQzMTEzXG4gICAgICAgICcweDAwMDAwMDAwMDAxOTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjFlNjczMTdjYmM0YmUyYWViMDA2NzdhZDY0NjI3NzhhOGY1MjI3NGI5ZDYwNWRmMjU5MWIyMzAyN2E4N2RmZjAwMDAwMDA3MDAwMDAwMDA3NzM1OTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzOTNjYTkzZTRjYjNiNmMxMGQxNjdkNDFmYmFiZWI4ZTk0ZWQyZGViNWRjNzg3MzIzZDcyMmZmNDBmZGZlNTYwNDBmYjk4ZjdhZWUyMDc1ZWZmNGRkN2EzNjhkZGI2ZWY3MTMyYmZmNjkzY2JmZDliYTMwZjE3YzE4MDAwMDAwMDQ2ZjhiZGMzYzg5M2VkZDJjN2YyNGE2MTkwZDYyMzNmZGE1Y2NmNTE3ZDk2ZGQ2YzA4ZDEzNDE3OWFiYjJkMTRlMDAwMDAwMDAyMWU2NzMxN2NiYzRiZTJhZWIwMDY3N2FkNjQ2Mjc3OGE4ZjUyMjc0YjlkNjA1ZGYyNTkxYjIzMDI3YTg3ZGZmMDAwMDAwMDUwMDAwMDA0NzAzNmFhYTAwMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyODY1Y2M4NTY4YjljNGM3ZDM2YmI5NmUwODY2MTlkOGM4NTIxOGQ2NTNmZjU2ZDA1MTMzNGY4MzllNTg5NzdjMzAwMDAwMDAyMjFlNjczMTdjYmM0YmUyYWViMDA2NzdhZDY0NjI3NzhhOGY1MjI3NGI5ZDYwNWRmMjU5MWIyMzAyN2E4N2RmZjAwMDAwMDA1MDAwMDAwMDA1ZmI1ZDU5MDAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMjg2NWNjODU2OGI5YzRjN2QzNmJiOTZlMDg2NjE5ZDhjODUyMThkNjUzZmY1NmQwNTEzMzRmODM5ZTU4OTc3YzMwMDAwMDAwMTIxZTY3MzE3Y2JjNGJlMmFlYjAwNjc3YWQ2NDYyNzc4YThmNTIyNzRiOWQ2MDVkZjI1OTFiMjMwMjdhODdkZmYwMDAwMDAwNTAwMDAwMDA3YWU2MWUzNzgwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDI4NjVjYzg1NjhiOWM0YzdkMzZiYjk2ZTA4NjYxOWQ4Yzg1MjE4ZDY1M2ZmNTZkMDUxMzM0ZjgzOWU1ODk3N2MzMDAwMDAwMDAyMWU2NzMxN2NiYzRiZTJhZWIwMDY3N2FkNjQ2Mjc3OGE4ZjUyMjc0YjlkNjA1ZGYyNTkxYjIzMDI3YTg3ZGZmMDAwMDAwMDUwMDAwMDNmZmI2ZGIzZjY5MDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyMDAwMDAwMDA5NTNjYzk1ZTg0ZjI5ZGM2ZWU3NTg5ZWY2YWNiMDFjOWQ1NjFjYmEzMDAwMDAwMDA2NjE2YzY3NTAwMDAwMDAwNjY1NjBlNzUwMDAwMDQ0ZTUxMjgwZTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFjYTdhMmYyOWNhNTgwYzQyNTRlM2JlYWJjZTIwNDdlMDRlYThjM2M3YzY5YTU4MTdiNTQ2MWMyMjM5NTkzNTYxYTM4NDNiYzdjYjE0NTc2MzkwMzc4YjE0NTEzNTMwMTQ3OGZmOGNiNWE2NTFlM2QwODJmZDZjZDFlMTc3N2VkZWFiZDViMDkyNGNhNjQ4ZjM4OTBkODJlYmQ2MjU5YjNjY2EwMGUzMGZhYTI0OTQ4MmZlZjEwMjkzZjQyZTI4YWZiMTVmMGE1ZGQzZjM3ZTU1MjRjZDVkZTNmM2MyYjkwOWRmNDk4NzNiODE5NmFmNjAwMDRkM2YzYTg0YmFhNDZiYTA4ZGY3YmFmOGU0ODZiMGI3OWE5YzIwNzA5NWUxYTQzMDAwMDAwMDEyMWU2NzMxN2NiYzRiZTJhZWIwMDY3N2FkNjQ2Mjc3OGE4ZjUyMjc0YjlkNjA1ZGYyNTkxYjIzMDI3YTg3ZGZmMDAwMDAwMDcwMDAwMDQ0ZTUxMjgwZTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM5M2NhOTNlNGNiM2I2YzEwZDE2N2Q0MWZiYWJlYjhlOTRlZDJkZWI1ZGM3ODczMjNkNzIyZmY0MGZkZmU1NjA0MGZiOThmN2FlZTIwNzVlZmY0ZGQ3YTM2OGRkYjZlZjcxMzJiZmY2OTNjYmZkOWJhMzBmMTdjMTgwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzOTNjYTkzZTRjYjNiNmMxMGQxNjdkNDFmYmFiZWI4ZTk0ZWQyZGViNWRjNzg3MzIzZDcyMmZmNDBmZGZlNTYwNDBmYjk4ZjdhZWUyMDc1ZWZmNGRkN2EzNjhkZGI2ZWY3MTMyYmZmNjkzY2JmZDliYTMwZjE3YzE4MDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzkzY2E5M2U0Y2IzYjZjMTBkMTY3ZDQxZmJhYmViOGU5NGVkMmRlYjVkYzc4NzMyM2Q3MjJmZjQwZmRmZTU2MDQwZmI5OGY3YWVlMjA3NWVmZjRkZDdhMzY4ZGRiNmVmNzEzMmJmZjY5M2NiZmQ5YmEzMGYxN2MxODAwMDA0ZTIwMDAwMDAwMDQwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEyN2VmZWMwNCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmlkLnNob3VsZC5lcXVhbCgncjhKVVVZRnY5TldjTmU1Y3hNRmRCUmpxa0w2Rlpld0RmMkd0a3R0bXhXQ2RlRkZNSzowJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzFdLmlkLnNob3VsZC5lcXVhbCgnMjJCN0dIN2ZEYXJCcXl3OFc3YXRDOEVEM2V1Vm5lZlRpRVdCUEJtYVNYckFoQVE0TGs6MCcpO1xuICAgICAgdHhFeHBsYWluLmlucHV0c1syXS5pZC5zaG91bGQuZXF1YWwoJzIyQjdHSDdmRGFyQnF5dzhXN2F0QzhFRDNldVZuZWZUaUVXQlBCbWFTWHJBaEFRNExrOjEnKTtcbiAgICAgIHR4RXhwbGFpbi5pbnB1dHNbM10uaWQuc2hvdWxkLmVxdWFsKCcyMkI3R0g3ZkRhckJxeXc4VzdhdEM4RUQzZXVWbmVmVGlFV0JQQm1hU1hyQWhBUTRMazoyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW5zIGEgU2lnbmVkIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHggZnJvbSByYXcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvbGRIZXggPVxuICAgICAgICAnMHgwMDAwMDAwMDAwMTkwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwMGI5Zjc2YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzQyZTE5YWQ5YTYxN2ZiOTVkY2Y4ODQzYWRlNjZlMDZlNTc4ZjU0OWE4YmU1NGYwMTZhYjc0ODEyN2FiMWExODQ2MjZjYmE0NGM3NDhhMWVlYWMwM2MwY2E3MWExZGRlODQ3MDJkMjcyZmJkZDA4NjAwMTg2NzAxMjAwMDAwMDAyNGYxOTRkOGUwNjZiMTFkZmU5MmY1OTNjZmE1YzJmYTFhZTQ1MDkyN2VjZDViMDkzOTUyZTYxODM0ZjRkOGFhNDAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDAyM2E0YzE4MDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMjNhNGMxODAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDk0YThiODE3OWYwYjZlN2U3Y2U1NWI0ZDZlYzVhZDU2ZGFlMWRlOWYwMDAwMDAwMDYyYmIwM2U2MDAwMDAwMDA2MmUzMjU1NjAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWM4Zjk1NDIzZjcxNDJkMDBhNDhlMTAxNGEzZGU4ZDI4OTA3ZDQyMGRjMzNiMzA1MmE2ZGVlMDNhM2YyOTQxYTM5M2MyMzUxZTM1NDcwNGNhNjZhM2ZjMjk4NzAyODJlMTU4NmEzYWI0YzQ1Y2ZlMzFjYWUzNGMxZDA2ZjIxMjQzNGFjNzFiMWJlNmNmZTA0NmM4MGMxNjJlMDU3NjE0YTk0YTViYzlmMWRlZDFhNzAyOWRlYjBiYTRjYTdjOWI3MTQxMWUyOTM0Mzg2OTFiZTc5YzJkYmYxOWQxY2E3YzNlYWRiOWM3NTYyNDZmYzVkZTViN2I4OTUxMWM3ZDczMDJhZTA1MWQ5ZTAzZDc5OTExMzgyOTliNWVkNmE1NzBhOTgwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzQyZTE5YWQ5YTYxN2ZiOTVkY2Y4ODQzYWRlNjZlMDZlNTc4ZjU0OWE4YmU1NGYwMTZhYjc0ODEyN2FiMWExODQ2MjZjYmE0NGM3NDhhMWVlYWMwM2MwY2E3MWExZGRlODQ3MDJkMjcyZmJkZDA4NjAwMTg2NzAxMjAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM0MmUxOWFkOWE2MTdmYjk1ZGNmODg0M2FkZTY2ZTA2ZTU3OGY1NDlhOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZWFjMDNjMGNhNzFhMWRkZTg0NzAyZDI3MmZiZGQwODYwMDE4NjcwMTIwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWVhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyMDAwMDRlMjAwMDAwMDAwMjAwMDAwMDA5MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZTAwMDAwMDA5MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZTk2NDg4OGQ0JztcbiAgICAgIGNvbnN0IHNvcnRlZEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKG9sZEhleCk7XG4gICAgICBjb25zdCBzb3J0ZWRUeCA9IGF3YWl0IHNvcnRlZEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHNvcnRlZFR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgLy8gdGhpcyB0eCBpcyBzb3J0ZWQgYW5kIGNhbiBiZSBicm9hZGNhc3RlZFxuICAgICAgY29uc3QgbmV3SGV4ID0gc29ydGVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydChuZXdIZXggPT09IG9sZEhleCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdOb2RlSUQtRVozOENjV0hvU3lvRWZBa0ROOXphaWVKNVlxNjRZZVBZJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB3aXRoIDEgaW5wdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICAnMHgwMDAwMDAwMDAwMTkwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzJhMDA4Mzk1NTBmNzVlZTg4NzljYWNkOTdmZjM1MGE1MWQ0N2FlMTRkYjk0MzM1ZjJmNjY4Yjk3MDdjNzg5MDNjM2I1YWM1NGM2ZjQwNTQ3ODNjNGE2ZWNkNWIxOGZhMDc2OTJkMzVlZTRjM2Y4Yjc0ZDQyNTcyMTAwMDAwMDAxNGYxOTRkOGUwNjZiMTFkZmU5MmY1OTNjZmE1YzJmYTFhZTQ1MDkyN2VjZDViMDkzOTUyZTYxODM0ZjRkOGFhNDAwMDAwMDAwM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDA3NzM1OTQwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwZTI1YzlhMDllYjljNjhkNDgwN2EzOWY5Nzg5M2ZhY2Q5YTZhN2RhMTAwMDAwMDAwNjYwZDc1MDkwMDAwMDAwMDY2MGVjNjg5MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxYzhmOTU0MjNmNzE0MmQwMGE0OGUxMDE0YTNkZThkMjg5MDdkNDIwZGMzM2IzMDUyYTZkZWUwM2EzZjI5NDFhMzkzYzIzNTFlMzU0NzA0Y2E2NmEzZmMyOTg3MDI4MmUxNTg2YTNhYjRjNDVjZmUzMWNhZTM0YzFkMDZmMjEyNDM0YWM3MWIxYmU2Y2ZlMDQ2YzgwYzE2MmUwNTc2MTRhOTRhNWJjOWYxZGVkMWE3MDI5ZGViMGJhNGNhN2M5YjcxNDExZTI5MzQzODY5MWJlNzljMmRiZjE5ZDFjYTdjM2VhZGI5Yzc1NjI0NmZjNWRlNWI3Yjg5NTExYzdkNzMwMmFlMDUxZDllMDNkNzk5MTEzODI5OWI1ZWQ2YTU3MGE5ODAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMmEwMDgzOTU1MGY3NWVlODg3OWNhY2Q5N2ZmMzUwYTUxZDQ3YWUxNGRiOTQzMzVmMmY2NjhiOTcwN2M3ODkwM2MzYjVhYzU0YzZmNDA1NDc4M2M0YTZlY2Q1YjE4ZmEwNzY5MmQzNWVlNGMzZjhiNzRkNDI1NzIxMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzJhMDA4Mzk1NTBmNzVlZTg4NzljYWNkOTdmZjM1MGE1MWQ0N2FlMTRkYjk0MzM1ZjJmNjY4Yjk3MDdjNzg5MDNjM2I1YWM1NGM2ZjQwNTQ3ODNjNGE2ZWNkNWIxOGZhMDc2OTJkMzVlZTRjM2Y4Yjc0ZDQyNTcyMTAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMyYTAwODM5NTUwZjc1ZWU4ODc5Y2FjZDk3ZmYzNTBhNTFkNDdhZTE0ZGI5NDMzNWYyZjY2OGI5NzA3Yzc4OTAzYzNiNWFjNTRjNmY0MDU0NzgzYzRhNmVjZDViMThmYTA3NjkyZDM1ZWU0YzNmOGI3NGQ0MjU3MjEwMDAzMGQ0MDAwMDAwMDAxMDAwMDAwMDkwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGRiOTQzMzVmMmY2NjhiOTcwN2M3ODkwM2MzYjVhYzU0YzZmNDA1NDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2M1NTQzYjAnXG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnTm9kZUlELU1kdGVTOVU5ODdQWTdpd0E1UGN6M3NLVnBySkFiQXZFNycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIEhhbGYgU2lnbmVkIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5oYWxmc2lnbnR4SGV4XG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSB1bnNpZ25lZCBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMudW5zaWduZWRUeEhleFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm5vZGVJRCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdidWlsZCBhbmQgc2lnbiBhbiBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvciB0cmFuc2FjdGlvbiBhbmQgYnJvYWRjYXN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLypcblxuICAgIGNvbnN0IGtleU1hcHBpbmc6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBmNDVkMWM5YmY1N2QzYzAyMjk5YTcyN2Q2ZTVkOGQ0ZTc2NDk4ODQ2YjFhMjg5YjRlMzFhMmVjY2NiYzIxMmZiOiB7XG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNvZGVkOiAnQmhqRXphWE1TRmo0YVFCaHcyN0RzbjczYjhyUjlnQ1RYJyxcbiAgICAgICAgcHViOiAnMDJhYmI0NTFjMGNjMjQwZTlhNGZiOTdhMTMwODQ2ZDkwYTg3MjQ3MjY0ZTU3MDE0ZTQxZGMyMjZlYmY0OTY1NzI0JyxcbiAgICAgICAgcHJ2OiAnZjQ1ZDFjOWJmNTdkM2MwMjI5OWE3MjdkNmU1ZDhkNGU3NjQ5ODg0NmIxYTI4OWI0ZTMxYTJlY2NjYmMyMTJmYicsXG4gICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxdzRqanM0cWZ1Z3EwbTNudTBkM2h0eDY2NjJkbHE4N3pxNW56MzMnLFxuICAgICAgfSxcbiAgICAgICcyZTBmZmU2ZWZiZmNjMjdlOWFhZjRiY2U2YWY3OGQ0YzY2ZTg5YjA5NTViODVmMDJkN2UxNTkxMGUxNmVkNGNkJzoge1xuICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICBlbmNvZGVkOiAnQkZ6UEpOaWZxZGY2WjhIMlA3NmdURWJkOFJtQ2pNU3pMJyxcbiAgICAgICAgcHViOiAnMDI1NTIzZmE0OGE1YjBjOGVkNGE4MzQ0YWFiODM5NjA2MWZiNDJjYjRmMTY4YmE1ZDNhZTE5ZjAzNGM0ZWEyZDRkJyxcbiAgICAgICAgcHJ2OiAnMmUwZmZlNmVmYmZjYzI3ZTlhYWY0YmNlNmFmNzhkNGM2NmU4OWIwOTU1Yjg1ZjAyZDdlMTU5MTBlMTZlZDRjZCcsXG4gICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3pyMGhzbTh6bHI2Z3BhYWt4dnQ2N2Y5OTluajA0NGV0ZTA3dXcnLFxuICAgICAgfSxcbiAgICAgICc1YTM2MGM4NDgwMjEwMjQ1MjhkZmMwMmU3OWJhNDQxZjE3MjdjNzY1YjRkMGRjZWMyODhmZmJkMjc3MmNkNDMyJzoge1xuICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgIGVuY29kZWQ6ICdIVDZ6b1NlY1l5cUpYNjNIcWFqMXVzdnlxSmJybmM4aWEnLFxuICAgICAgICBwdWI6ICcwM2Q3MWNkYTNiMWMzMmVlZDA0NDg2NmVjOTZjMmFjNTRhZjQzZTdlZGI4ZjE1MzVkZjUxZjM0MWU0OTY3NGZmYWEnLFxuICAgICAgICBwcnY6ICc1YTM2MGM4NDgwMjEwMjQ1MjhkZmMwMmU3OWJhNDQxZjE3MjdjNzY1YjRkMGRjZWMyODhmZmJkMjc3MmNkNDMyJyxcbiAgICAgICAgYWRkcmVzczogJ1AtZnVqaTFrM2NhMm5qY3Vuemw0aGh4eTI0YXZjYTdodGY2NmNtamp1a2wwbicsXG4gICAgICB9LFxuICAgIH07XG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHVuaXhOb3cgPSBCaWdJbnQoTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHVuaXhOb3cgKyBCaWdJbnQoNjApO1xuICAgICAgY29uc3QgZW5kVGltZSA9IHN0YXJ0VGltZSArIEJpZ0ludCg2MCAqIDYwICogMjQgKyA2MDApOyAvLyAyNCBob3VycyArIDEwIG1pbnV0ZXNcblxuICAgICAgLy8gY29uc3QgQVZBWF9QVUJMSUNfVVJMID0gJ2h0dHBzOi8vYXBpLmF2YXgtdGVzdC5uZXR3b3JrJztcbiAgICAgIC8vIGNvbnN0IHB2bWFwaSA9IG5ldyBwdm0uUFZNQXBpKEFWQVhfUFVCTElDX1VSTCk7XG4gICAgICAvLyBjb25zdCB7IHV0eG9zIH0gPSBhd2FpdCBwdm1hcGkuZ2V0VVRYT3Moe1xuICAgICAgLy8gICBhZGRyZXNzZXM6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJpdGdvQWRkcmVzc2VzLFxuICAgICAgLy8gfSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh1dHhvcyk7XG5cbiAgICAgIGNvbnN0IHJlY292ZXJ5TW9kZSA9IGZhbHNlO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSlcbiAgICAgICAgLmdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYml0Z29BZGRyZXNzZXMpXG4gICAgICAgIC5zdGFydFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAgIC5lbmRUaW1lKGVuZFRpbWUudG9TdHJpbmcoKSlcbiAgICAgICAgLnN0YWtlQW1vdW50KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubm9kZUlkKVxuICAgICAgICAuYmxzUHVibGljS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS51dHhvcyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGFzc2VydCh0eEV4cGxhaW4ub3V0cHV0QW1vdW50ID09PSB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmlkLnNob3VsZC5lcXVhbCgnV3lqWUpIYTdZZTFLTXNCWmlROGhRSnpZN1lZeFRKVFR5TWt4Y1ZyS1JEaU55dFRZODowJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzFdLmlkLnNob3VsZC5lcXVhbCgnV3lqWUpIYTdZZTFLTXNCWmlROGhRSnpZN1lZeFRKVFR5TWt4Y1ZyS1JEaU55dFRZODoxJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzJdLmlkLnNob3VsZC5lcXVhbCgnczkyU2pvWlFlbWdHOTdIb2NYOUdneUZ5NlpLbWFwZ2NncVEzeTVKMnV3UDNxV0JVeTowJyk7XG4gICAgICB0eEV4cGxhaW4uZmVlLmZlZS5zaG91bGQuZXF1YWwoJzEwMDAwMDAnKTtcbiAgICAgIGFzc2VydCh0eEpzb24ub3V0cHV0c1swXS52YWx1ZSA9PT0gdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuc3Rha2VBbW91bnQpO1xuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcbiAgICAgIGNvbnNvbGUubG9nKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSlcbiAgICAgICAgLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSlcbiAgICAgICAgLnJlY292ZXJNb2RlKGZhbHNlKTtcbiAgICAgIGNvbnN0IHR4MiA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIHR4Mi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuICAgICAgLy8gVGVzdCBzaWduIHdpdGggdXNlciBrZXlcbiAgICAgIHR4QnVpbGRlcjIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudXNlclByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBoYWxmU2lnbmVkID0gYXdhaXQgdHhCdWlsZGVyMi5idWlsZCgpO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZFR4SGV4ID0gaGFsZlNpZ25lZC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgYXNzZXJ0KHR4QnVpbGRlclsnX3N0YWtlQW1vdW50J10gPT09IHR4QnVpbGRlcjJbJ19zdGFrZUFtb3VudCddKTtcbiAgICAgIGNvbnNvbGUubG9nKGhhbGZTaWduZWRUeEhleCk7XG5cbiAgICAgIC8vIGNvbnN0IHR4QnVpbGRlcjIgPSBmYWN0b3J5LmZyb20oaGFsZlNpZ25lZFR4SGV4KTtcbiAgICAgIC8vIHR4QnVpbGRlcjIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmFja3VwUHJpdmF0ZUtleSB9KTtcbiAgICAgIC8vIGNvbnN0IGZ1bGxTaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGZ1bGxTaWduZWRUeC50b0pzb24oKSk7XG5cbiAgICAgIC8vIGNvbnN0IHJlcyA9IGF3YWl0IHB2bWFwaS5pc3N1ZVR4KHsgdHg6IGZ1bGxTaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpIH0pO1xuICAgICAgLy8gY29uc3QgdHhTaWduZWQgPVxuICAgICAgLy8gICAnMHgwMDAwMDAwMDAwMTkwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwMDVjODFhNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDAwMDAyNDQxMWFmOWQ5ODc3YzUyYzFiZTNmNzc4MjVhNzRjYTExODY5MTI4NDc4YzQxNDU5MTBlOTI2OTVhMjRjN2Q4MDAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMjcxZDg2NDRjOTE5OWUzMGI5ZmVmNTNhZjU2YWVmMjQzZTU0MzFjNmIxYjA5ZDVmMTFhNjYyMmM4NmRiM2YzOWQwMDAwMDAwMDNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMDVjODFhNDAwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDIwMDAwMDAwMDEyOWEyNzFmZjQwN2IxMTAxZjM1YWVjODJhMmY3MTVjNTIzOWJkMzkwMDAwMDAwMDY2MGY0YWI1MDAwMDAwMDA2NjEwOWU4ZDAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWNhZDllOTQ3NmI3MDFlZGVjODhlNTNiMWMzMTQ0NTYwNTNiM2NmODQ2YTExOTIxMTc4NzJlNDE0NTVmNDQwYzA3NGQ2ZWU4OTUzMGQ0NWU4OGY3OWFjMGVkYTA2ZjI4ODdhOTRkNjE4MmVkYmQ5NTM1MTZiMjYyZjE3NTY1YTY1ZDk4ZjU3NDE1NDljZDcwZDI0MjNhYmZmNzUwYmI0YjhkOTgyZDQ4MjM3NmIxODkxNDJmZjhhYTQ3MDU2MTVmZWUxNGJlNjE3NDYxMDg2MGU5YzAwM2FhNGFlYWE2MTNiMTczMmFiZjNjZDBjOWM0MmZhNTg1NjM0NTY0NDA2OGMwZDFmOWZhMWQ5YWYzMmUyMGIxNGZjYTAyOTgzMjYwYmMwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMzBkNDAwMDAwMDAwMjAwMDAwMDA5MDAwMDAwMDIyOGE1OTQyMDk3MTk1M2FhNjFiNGI0YzkwYjkzNGVmNzZlNmU5YzhhZDI1NmU5NDE3ZTlhNmI1MDE3ZDgzNjgxM2IyYjVjYWQyYTg5MGM2NmM4Mjk1ZjEwNGQ3NDE5MmM0OTY0Y2YyODllMmE0NWFkYjU3YTdiMDViNWU5NTI5ZTAwNGVjMmRhZTVjNDhiYTZmYTRkMWUwYjFjNmI5ZDliYmU3OWM0ODFmZjE2ODQ4YzFmYTNmYTNhNmVkNDc0MzFhMTJhZjRiMmQ5Nzc5YmIxOTJiYjNmMjU0NDA4NzMxNzk4YjUwYzhmMDNmMjViN2U3ZDczMTM3Mzg4OTJlNzFkNjYwMTAwMDAwMDA5MDAwMDAwMDIyOGE1OTQyMDk3MTk1M2FhNjFiNGI0YzkwYjkzNGVmNzZlNmU5YzhhZDI1NmU5NDE3ZTlhNmI1MDE3ZDgzNjgxM2IyYjVjYWQyYTg5MGM2NmM4Mjk1ZjEwNGQ3NDE5MmM0OTY0Y2YyODllMmE0NWFkYjU3YTdiMDViNWU5NTI5ZTAwNGVjMmRhZTVjNDhiYTZmYTRkMWUwYjFjNmI5ZDliYmU3OWM0ODFmZjE2ODQ4YzFmYTNmYTNhNmVkNDc0MzFhMTJhZjRiMmQ5Nzc5YmIxOTJiYjNmMjU0NDA4NzMxNzk4YjUwYzhmMDNmMjViN2U3ZDczMTM3Mzg4OTJlNzFkNjYwMTUxYWEyOTFmJztcbiAgICAgIC8vIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20odHgpO1xuICAgICAgLy8gY29uc3QgZGVjb2RlID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhkZWNvZGUudG9Kc29uKCkpO1xuXG4gICAgICAvLyBjb25zdCByZXMgPSBhd2FpdCBwdm1hcGkuaXNzdWVUeCh7IHR4OiB0eFNpZ25lZCB9KTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYW5kIHNpZ24gYW4gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuc3RhcnRUaW1lKVxuICAgICAgICAuZW5kVGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5kZWxlZ2F0aW9uRmVlUmF0ZSlcbiAgICAgICAgLm5vZGVJRCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1NpZ25hdHVyZSlcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG5cbiAgICAgIC8vIFRlc3Qgc2lnbiB3aXRoIHVzZXIga2V5XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS51c2VyUHJpdmF0ZUtleSB9KTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJhY2t1cFByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxTaWduZWRUeC50b0pzb24oKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYW5kIHNpZ24gYSB0cmFuc2FjdGlvbiBpbiByZWNvdmVyeSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuc3RhcnRUaW1lKVxuICAgICAgICAuZW5kVGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5kZWxlZ2F0aW9uRmVlUmF0ZSlcbiAgICAgICAgLm5vZGVJRCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1NpZ25hdHVyZSlcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgbGV0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnVuc2lnbmVkUmF3dHhSZWNvdmVyeSk7XG5cbiAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSByZWNvdmVyeU1vZGVcbiAgICAgICAgPyB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnVzZXJQcml2YXRlS2V5O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBwcml2YXRlS2V5LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB0eEhleCA9IChoYWxmU2lnbmVkVHJhbnNhY3Rpb24gYXMgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbik/LmhhbGZTaWduZWQ/LnR4SGV4O1xuICAgICAgdHhIZXguc2hvdWxkLmVxdWFsKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuaGFsZlNpZ25lZFJhd1R4UmVjb3ZlcnkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGFuIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yIHRyYW5zYWN0aW9uIGFuZCBicm9hZGNhc3QgaW4gcmVjb3ZlcnkgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuaXhOb3cgPSBCaWdJbnQoTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHVuaXhOb3cgKyBCaWdJbnQoNjApO1xuICAgICAgY29uc3QgZW5kVGltZSA9IHN0YXJ0VGltZSArIEJpZ0ludCg2MCAqIDYwICogMjQgKyA2MDApO1xuXG4gICAgICBjb25zdCByZWNvdmVyeU1vZGUgPSB0cnVlO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSlcbiAgICAgICAgLmdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYml0Z29BZGRyZXNzZXMpXG4gICAgICAgIC5zdGFydFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAgIC5lbmRUaW1lKGVuZFRpbWUudG9TdHJpbmcoKSlcbiAgICAgICAgLnN0YWtlQW1vdW50KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubm9kZUlkKVxuICAgICAgICAuYmxzUHVibGljS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS51dHhvcyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcblxuICAgICAgLy8gVGVzdCBzaWduIHdpdGggdXNlciBrZXlcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5iYWNrdXBQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZFR4SGV4ID0gaGFsZlNpZ25lZC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKGhhbGZTaWduZWRUeEhleCk7XG4gICAgICB0eEJ1aWxkZXIyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnVzZXJQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgZnVsbFNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyMi5idWlsZCgpO1xuICAgICAgY29uc29sZS5sb2coZnVsbFNpZ25lZFR4LnRvSnNvbigpKTtcbiAgICB9KTtcbiAgfSk7XG4gIGl0KCdTaG91bGQgZmFpbCB0byBidWlsZCBpZiB1dHhvcyBjaGFuZ2Ugb3V0cHV0IDAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdW5peE5vdyA9IEJpZ0ludChNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHVuaXhOb3cgKyBCaWdJbnQoNjApO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBzdGFydFRpbWUgKyBCaWdJbnQoNjAgKiA2MCAqIDI0ICsgNjAwKTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAuZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKVxuICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubG9ja3RpbWUpXG4gICAgICAucmVjb3Zlck1vZGUoZmFsc2UpXG4gICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgIC5zdGFydFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAuZW5kVGltZShlbmRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAuc3Rha2VBbW91bnQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuc3Rha2VBbW91bnROb091dHB1dClcbiAgICAgIC5kZWxlZ2F0aW9uRmVlUmF0ZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5kZWxlZ2F0aW9uRmVlUmF0ZSlcbiAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubm9kZUlkKVxuICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAuYmxzU2lnbmF0dXJlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJsc1NpZ25hdHVyZSlcbiAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS51dHhvcyk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICB0eEpzb24uY2hhbmdlT3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIHR4RXhwbGFpbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgdHhFeHBsYWluLmNoYW5nZUFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = signFlowTestSuit;
|
|
3
4
|
/**
|
|
4
5
|
* Test suit focus in raw tx signing changes.
|
|
5
6
|
* TODO(BG-54381): Coin Agnostic Testing
|
|
@@ -76,5 +77,4 @@ function signFlowTestSuit(data) {
|
|
|
76
77
|
});
|
|
77
78
|
});
|
|
78
79
|
}
|
|
79
|
-
exports.default = signFlowTestSuit;
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkZsb3dUZXN0U3VpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvc2lnbkZsb3dUZXN0U3VpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBOzs7O0dBSUc7QUFDSCxTQUF3QixnQkFBZ0IsQ0FBQyxJQUEwQjtJQUNqRSxRQUFRLENBQUMsZUFBZSxJQUFJLENBQUMsZUFBZSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDakUsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUs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LEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWpGRCxtQ0FpRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLCBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBzaWduRmxvd1Rlc3RTdWl0QXJncyB7XG4gIHRyYW5zYWN0aW9uVHlwZTogc3RyaW5nO1xuICBuZXdUeEZhY3Rvcnk6ICgpID0+IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5O1xuICBuZXdUeEJ1aWxkZXI6ICgpID0+IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gIHVuc2lnbmVkVHhIZXg6IHN0cmluZztcbiAgaGFsZnNpZ250eEhleDogc3RyaW5nO1xuICBmdWxsc2lnbnR4SGV4OiBzdHJpbmc7XG4gIHByaXZLZXk6IHsgcHJ2MTogc3RyaW5nOyBwcnYyOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBUZXN0IHN1aXQgZm9jdXMgaW4gcmF3IHR4IHNpZ25pbmcgY2hhbmdlcy5cbiAqIFRPRE8oQkctNTQzODEpOiBDb2luIEFnbm9zdGljIFRlc3RpbmdcbiAqIEBwYXJhbSB7c2lnbkZsb3dUZXN0U3VpdEFyZ3N9IGRhdGEgd2l0aCByZXF1aXJlIGluZm8uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpZ25GbG93VGVzdFN1aXQoZGF0YTogc2lnbkZsb3dUZXN0U3VpdEFyZ3MpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYHNob3VsZCBzaWduICR7ZGF0YS50cmFuc2FjdGlvblR5cGV9IGluIGZ1bGwgZmxvdyBgLCAoKSA9PiB7XG4gICAgaXQoJ1Nob3VsZCBjcmVhdGUgdHggZm9yIHNhbWUgdmFsdWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwoZGF0YS51bnNpZ25lZFR4SGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVjb3ZlciB0eCBmcm9tIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhGYWN0b3J5KCkuZnJvbShkYXRhLnVuc2lnbmVkVHhIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLnVuc2lnbmVkVHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBjcmVhdGUgaGFsZiBzaWduZWQgdHggZm9yIHNhbWUgdmFsdWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdktleS5wcnYxIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmhhbGZzaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCByZWNvdmVyIGhhbGYgc2lnbmVkIHR4IGZyb20gcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEZhY3RvcnkoKS5mcm9tKGRhdGEuaGFsZnNpZ250eEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKGRhdGEuaGFsZnNpZ250eEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbGYgc2lnbiB0eCBmcm9tIHVuc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhGYWN0b3J5KCkuZnJvbShkYXRhLnVuc2lnbmVkVHhIZXgpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdktleS5wcnYxIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmhhbGZzaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCByZWNvdmVyIGhhbGYgc2lnbmVkIHR4IGZyb20gaGFsZiBzaWduZWQgcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEZhY3RvcnkoKS5mcm9tKGRhdGEuaGFsZnNpZ250eEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKGRhdGEuaGFsZnNpZ250eEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlY292ZXIgc2lnbmVkIHR4IGZyb20gc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhGYWN0b3J5KCkuZnJvbShkYXRhLmZ1bGxzaWdudHhIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmZ1bGxzaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBmdWxsIHNpZ24gYSB0eCBmb3Igc2FtZSB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBkYXRhLm5ld1R4QnVpbGRlcigpO1xuXG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2S2V5LnBydjEgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2S2V5LnBydjIgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKGRhdGEuZnVsbHNpZ250eEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGZ1bGwgc2lnbiBhIHR4IGZyb20gaGFsZiBzaWduZWQgcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEZhY3RvcnkoKS5mcm9tKGRhdGEuaGFsZnNpZ250eEhleCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2S2V5LnBydjIgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKGRhdGEuZnVsbHNpZ250eEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGZ1bGwgc2lnbiBhIHR4IGZyb20gdW5zaWduZWQgcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEZhY3RvcnkoKS5mcm9tKGRhdGEudW5zaWduZWRUeEhleCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2S2V5LnBydjEgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2S2V5LnBydjIgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKGRhdGEuZnVsbHNpZ250eEhleCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkZsb3dUZXN0U3VpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvc2lnbkZsb3dUZXN0U3VpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSxtQ0FpRkM7QUF0RkQ7Ozs7R0FJRztBQUNILFNBQXdCLGdCQUFnQixDQUFDLElBQTBCO0lBQ2pFLFFBQVEsQ0FBQyxlQUFlLElBQUksQ0FBQyxlQUFlLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUNqRSxFQUFFLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvRCxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxD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TUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciwgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2Ugc2lnbkZsb3dUZXN0U3VpdEFyZ3Mge1xuICB0cmFuc2FjdGlvblR5cGU6IHN0cmluZztcbiAgbmV3VHhGYWN0b3J5OiAoKSA9PiBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeTtcbiAgbmV3VHhCdWlsZGVyOiAoKSA9PiBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB1bnNpZ25lZFR4SGV4OiBzdHJpbmc7XG4gIGhhbGZzaWdudHhIZXg6IHN0cmluZztcbiAgZnVsbHNpZ250eEhleDogc3RyaW5nO1xuICBwcml2S2V5OiB7IHBydjE6IHN0cmluZzsgcHJ2Mjogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGVzdCBzdWl0IGZvY3VzIGluIHJhdyB0eCBzaWduaW5nIGNoYW5nZXMuXG4gKiBUT0RPKEJHLTU0MzgxKTogQ29pbiBBZ25vc3RpYyBUZXN0aW5nXG4gKiBAcGFyYW0ge3NpZ25GbG93VGVzdFN1aXRBcmdzfSBkYXRhIHdpdGggcmVxdWlyZSBpbmZvLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaWduRmxvd1Rlc3RTdWl0KGRhdGE6IHNpZ25GbG93VGVzdFN1aXRBcmdzKTogdm9pZCB7XG4gIGRlc2NyaWJlKGBzaG91bGQgc2lnbiAke2RhdGEudHJhbnNhY3Rpb25UeXBlfSBpbiBmdWxsIGZsb3cgYCwgKCkgPT4ge1xuICAgIGl0KCdTaG91bGQgY3JlYXRlIHR4IGZvciBzYW1lIHZhbHVlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKGRhdGEudW5zaWduZWRUeEhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlY292ZXIgdHggZnJvbSByYXcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBkYXRhLm5ld1R4RmFjdG9yeSgpLmZyb20oZGF0YS51bnNpZ25lZFR4SGV4KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwoZGF0YS51bnNpZ25lZFR4SGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgY3JlYXRlIGhhbGYgc2lnbmVkIHR4IGZvciBzYW1lIHZhbHVlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBkYXRhLnByaXZLZXkucHJ2MSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwoZGF0YS5oYWxmc2lnbnR4SGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVjb3ZlciBoYWxmIHNpZ25lZCB0eCBmcm9tIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhGYWN0b3J5KCkuZnJvbShkYXRhLmhhbGZzaWdudHhIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmhhbGZzaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYWxmIHNpZ24gdHggZnJvbSB1bnNpZ25lZCByYXcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBkYXRhLm5ld1R4RmFjdG9yeSgpLmZyb20oZGF0YS51bnNpZ25lZFR4SGV4KTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBkYXRhLnByaXZLZXkucHJ2MSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwoZGF0YS5oYWxmc2lnbnR4SGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVjb3ZlciBoYWxmIHNpZ25lZCB0eCBmcm9tIGhhbGYgc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhGYWN0b3J5KCkuZnJvbShkYXRhLmhhbGZzaWdudHhIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmhhbGZzaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCByZWNvdmVyIHNpZ25lZCB0eCBmcm9tIHNpZ25lZCByYXcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBkYXRhLm5ld1R4RmFjdG9yeSgpLmZyb20oZGF0YS5mdWxsc2lnbnR4SGV4KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwoZGF0YS5mdWxsc2lnbnR4SGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgZnVsbCBzaWduIGEgdHggZm9yIHNhbWUgdmFsdWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcblxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdktleS5wcnYxIH0pO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdktleS5wcnYyIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmZ1bGxzaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBmdWxsIHNpZ24gYSB0eCBmcm9tIGhhbGYgc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhGYWN0b3J5KCkuZnJvbShkYXRhLmhhbGZzaWdudHhIZXgpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdktleS5wcnYyIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmZ1bGxzaWdudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBmdWxsIHNpZ24gYSB0eCBmcm9tIHVuc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhGYWN0b3J5KCkuZnJvbShkYXRhLnVuc2lnbmVkVHhIZXgpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdktleS5wcnYxIH0pO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdktleS5wcnYyIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbChkYXRhLmZ1bGxzaWdudHhIZXgpO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
|