@bitgo/sdk-coin-avaxp 3.22.4 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/dist/src/avaxp.d.ts.map +1 -1
- package/dist/src/avaxp.js +18 -8
- package/dist/src/index.js +6 -2
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +2 -2
- 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 -2
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +5 -5
- package/dist/src/lib/delegatorTxBuilder.d.ts +6 -6
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/delegatorTxBuilder.js +6 -6
- package/dist/src/lib/deprecatedTransaction.d.ts +100 -0
- package/dist/src/lib/deprecatedTransaction.d.ts.map +1 -0
- package/dist/src/lib/deprecatedTransaction.js +345 -0
- package/dist/src/lib/deprecatedTransactionBuilder.d.ts +115 -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 -8
- 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 -4
- package/dist/src/lib/exportTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportTxBuilder.js +2 -2
- package/dist/src/lib/iface.d.ts +11 -6
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/importInCTxBuilder.d.ts +4 -4
- 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 +2 -2
- 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.js +9 -9
- 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 +447 -0
- package/dist/src/lib/transaction.d.ts +19 -40
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +66 -151
- package/dist/src/lib/transactionBuilder.d.ts +31 -75
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +65 -137
- 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 +78 -19
- package/dist/src/lib/utils.d.ts +22 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +53 -11
- package/dist/src/lib/utxoEngine.d.ts +10 -1
- package/dist/src/lib/utxoEngine.d.ts.map +1 -1
- package/dist/src/lib/utxoEngine.js +27 -3
- 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 +1 -1
- package/dist/test/resources/avaxp.d.ts +77 -0
- package/dist/test/resources/avaxp.d.ts.map +1 -1
- package/dist/test/resources/avaxp.js +124 -2
- package/dist/test/unit/avaxp.js +81 -11
- package/dist/test/unit/lib/exportC2PTxBuilder.js +6 -2
- package/dist/test/unit/lib/exportP2CTxBuilder.js +10 -6
- package/dist/test/unit/lib/importC2PTxBuilder.js +8 -4
- package/dist/test/unit/lib/importP2CTxBuilder.js +8 -4
- package/dist/test/unit/lib/keyPair.js +6 -2
- 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 +288 -0
- package/dist/test/unit/lib/transactionBuilderFactory.js +8 -4
- package/dist/test/unit/lib/utils.js +6 -2
- package/dist/test/unit/lib/utxoEngine.js +6 -6
- package/dist/test/unit/lib/validateTxBuilder.js +10 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
|
@@ -0,0 +1,288 @@
|
|
|
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 (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
30
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
31
|
+
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
32
|
+
const statics_1 = require("@bitgo/statics");
|
|
33
|
+
const assert_1 = __importDefault(require("assert"));
|
|
34
|
+
const src_1 = require("../../../src");
|
|
35
|
+
const AvaxpLib = __importStar(require("../../../src/lib"));
|
|
36
|
+
const lib_1 = require("../../../src/lib");
|
|
37
|
+
const permissionlessValidatorTxBuilder_1 = require("../../../src/lib/permissionlessValidatorTxBuilder");
|
|
38
|
+
const testData = __importStar(require("../../resources/avaxp"));
|
|
39
|
+
// import { pvm } from '@bitgo/avalanchejs';
|
|
40
|
+
describe('AvaxP permissionlessValidatorTxBuilder', () => {
|
|
41
|
+
let basecoin;
|
|
42
|
+
let bitgo;
|
|
43
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'));
|
|
44
|
+
before(() => {
|
|
45
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
|
|
46
|
+
env: 'mock',
|
|
47
|
+
});
|
|
48
|
+
bitgo.initializeTestVars();
|
|
49
|
+
bitgo.safeRegister('avaxp', src_1.AvaxP.createInstance);
|
|
50
|
+
bitgo.safeRegister('tavaxp', src_1.TavaxP.createInstance);
|
|
51
|
+
basecoin = bitgo.coin('tavaxp');
|
|
52
|
+
});
|
|
53
|
+
it('should create transaction builder from hex', () => {
|
|
54
|
+
const txBuilder = factory.from(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.halfSignedTx);
|
|
55
|
+
txBuilder.should.be.an.instanceOf(permissionlessValidatorTxBuilder_1.PermissionlessValidatorTxBuilder);
|
|
56
|
+
});
|
|
57
|
+
describe('Transaction readable', () => {
|
|
58
|
+
let tx;
|
|
59
|
+
before(async () => {
|
|
60
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADD_VALIDATOR_ID_SAMPLE.fullsigntxHex);
|
|
61
|
+
tx = await txBuilder.build();
|
|
62
|
+
});
|
|
63
|
+
it('Should json stringifiy addPermissionlessValidator transaction', async () => {
|
|
64
|
+
const txJson = tx.toJson();
|
|
65
|
+
(0, assert_1.default)(typeof JSON.stringify(tx.toJson()), 'string');
|
|
66
|
+
txJson.id.should.equal(testData.ADD_VALIDATOR_ID_SAMPLE.txid);
|
|
67
|
+
});
|
|
68
|
+
it('Should get a txid', async () => {
|
|
69
|
+
tx.id.should.equal(testData.ADD_VALIDATOR_ID_SAMPLE.txid);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('should explains transaction', () => {
|
|
73
|
+
it('should explains a Signed AddPermissionlessValidatorTx', async () => {
|
|
74
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(
|
|
75
|
+
// https://testnet.snowtrace.io/pvm/tx/2tt3KE6gAG7qpMLL6xoynSyk7ht4egQ74wcF7AuGm25vQ3QNWB?chainId=43113
|
|
76
|
+
'0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000000baeb90000000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee000000024f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000023a4c180000000030000000200000000000000014f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000023a4c180000000030000000200000000000000010000000094a8b8179f0b6e7e7ce55b4d6ec5ad56dae1de9f0000000062bb03e60000000062e32556000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001c8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e1586a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca0000000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee0000000b00000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee0000000b00000000000000000000000200000003ac03c0ca71a1dde84702d272fbdd08600186701242e19ad9a617fb95dcf8843ade66e06e578f549a8be54f016ab748127ab1a184626cba44c748a1ee00030d40000000020000000900000002b631e9553a8721978bffed3e778de7eb904e167599c1d26d5a8d3c46158df661164c6ca6029f24988020ccfcd673e5c19817ff74d012651f245d009a749591160170eae73d7e19b045671d41050b11791643567d1bc9cc51fa226d2be95a65689f19cda06a242a9749f6a150fcc2a5b50af12a1bc3564d1b76ac1e3826b5e21361010000000900000002b631e9553a8721978bffed3e778de7eb904e167599c1d26d5a8d3c46158df661164c6ca6029f24988020ccfcd673e5c19817ff74d012651f245d009a749591160170eae73d7e19b045671d41050b11791643567d1bc9cc51fa226d2be95a65689f19cda06a242a9749f6a150fcc2a5b50af12a1bc3564d1b76ac1e3826b5e2136101');
|
|
77
|
+
const tx = await txBuilder.build();
|
|
78
|
+
const txExplain = tx.explainTransaction();
|
|
79
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
80
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
81
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
82
|
+
});
|
|
83
|
+
it('should explains a Signed AddPermissionlessValidatorTx from raw', async () => {
|
|
84
|
+
const oldHex = '0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000001cbabc80000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000264d9b5eab8c4a1a25bfa9e3e1a60d78f1ae88e7352e22ef90107648b738a30e3000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b6d03400000000200000001000000026ccb2a4fea281a8737d33b2535ee3f70518b354c91f0adcfaa70e459c4b1881c000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000001ce8834000000002000000010000000200000000129a271ff407b1101f35aec82a2f715c5239bd3900000000660f17de0000000066106bb6000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001cad9e9476b701edec88e53b1c314456053b3cf846a1192117872e41455f440c074d6ee89530d45e88f79ac0eda06f2887a94d6182edbd953516b262f17565a65d98f5741549cd70d2423abff750bb4b8d982d482376b189142ff8aa4705615fee14be6174610860e9c003aa4aeaa613b1732abf3cd0c9c42fa5856345644068c0d1f9fa1d9af32e20b14fca02983260bc000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad637200030d400000000200000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007565285409e200fdc67c7b63759b5ad29bf01fc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007565285409e200fdc67c7b63759b5ad29bf01fc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c5c71c';
|
|
85
|
+
const sortedBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(oldHex);
|
|
86
|
+
const sortedTx = await sortedBuilder.build();
|
|
87
|
+
const txExplain = sortedTx.explainTransaction();
|
|
88
|
+
// this tx is sorted and can be broadcasted
|
|
89
|
+
const newHex = sortedTx.toBroadcastFormat();
|
|
90
|
+
(0, assert_1.default)(newHex === oldHex);
|
|
91
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
92
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
93
|
+
txExplain.outputs[0].address.should.equal('NodeID-2hMqBQdjZMWdHvYu7ZPLA2CmrAdbTvpGf');
|
|
94
|
+
});
|
|
95
|
+
it('should explain AddPermissionlessValidatorTx with 1 input', async () => {
|
|
96
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from('0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d425721000000014f194d8e066b11dfe92f593cfa5c2fa1ae450927ecd5b093952e61834f4d8aa4000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000007735940000000002000000000000000100000000e25c9a09eb9c68d4807a39f97893facd9a6a7da100000000660d750900000000660ec689000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001c8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e1586a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d4257210000000b000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d4257210000000b000000000000000000000002000000032a00839550f75ee8879cacd97ff350a51d47ae14db94335f2f668b9707c78903c3b5ac54c6f4054783c4a6ecd5b18fa07692d35ee4c3f8b74d42572100030d40000000010000000900000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db94335f2f668b9707c78903c3b5ac54c6f4054700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c5543b0');
|
|
97
|
+
const tx = await txBuilder.build();
|
|
98
|
+
const txExplain = tx.explainTransaction();
|
|
99
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
100
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
101
|
+
txExplain.outputs[0].address.should.equal('NodeID-MdteS9U987PY7iwA5Pcz3sKVprJAbAvE7');
|
|
102
|
+
});
|
|
103
|
+
it('should explains a Half Signed AddPermissionlessValidatorTx', async () => {
|
|
104
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADDVALIDATOR_SAMPLES.halfsigntxHex);
|
|
105
|
+
const tx = await txBuilder.build();
|
|
106
|
+
const txExplain = tx.explainTransaction();
|
|
107
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
108
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
109
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
110
|
+
});
|
|
111
|
+
it('should explains a unsigned AddPermissionlessValidatorTx', async () => {
|
|
112
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(testData.ADDVALIDATOR_SAMPLES.unsignedTxHex);
|
|
113
|
+
const tx = await txBuilder.build();
|
|
114
|
+
const txExplain = tx.explainTransaction();
|
|
115
|
+
txExplain.outputAmount.should.equal(testData.ADDVALIDATOR_SAMPLES.minValidatorStake);
|
|
116
|
+
txExplain.type.should.equal(sdk_core_1.TransactionType.AddValidator);
|
|
117
|
+
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
describe('Sign Transaction', () => {
|
|
121
|
+
it('build and sign an AddPermissionlessValidator transaction and broadcast', async () => {
|
|
122
|
+
/*
|
|
123
|
+
|
|
124
|
+
const keyMapping: Record<string, any> = {
|
|
125
|
+
f45d1c9bf57d3c02299a727d6e5d8d4e76498846b1a289b4e31a2ecccbc212fb: {
|
|
126
|
+
source: 'user',
|
|
127
|
+
encoded: 'BhjEzaXMSFj4aQBhw27Dsn73b8rR9gCTX',
|
|
128
|
+
pub: '02abb451c0cc240e9a4fb97a130846d90a87247264e57014e41dc226ebf4965724',
|
|
129
|
+
prv: 'f45d1c9bf57d3c02299a727d6e5d8d4e76498846b1a289b4e31a2ecccbc212fb',
|
|
130
|
+
address: 'P-fuji1w4jjs4qfugq0m3nu0d3htx6662dlq87zq5nz33',
|
|
131
|
+
},
|
|
132
|
+
'2e0ffe6efbfcc27e9aaf4bce6af78d4c66e89b0955b85f02d7e15910e16ed4cd': {
|
|
133
|
+
source: 'backup',
|
|
134
|
+
encoded: 'BFzPJNifqdf6Z8H2P76gTEbd8RmCjMSzL',
|
|
135
|
+
pub: '025523fa48a5b0c8ed4a8344aab8396061fb42cb4f168ba5d3ae19f034c4ea2d4d',
|
|
136
|
+
prv: '2e0ffe6efbfcc27e9aaf4bce6af78d4c66e89b0955b85f02d7e15910e16ed4cd',
|
|
137
|
+
address: 'P-fuji1wzr0hsm8zlr6gpaakxvt67f999nj044ete07uw',
|
|
138
|
+
},
|
|
139
|
+
'5a360c848021024528dfc02e79ba441f1727c765b4d0dcec288ffbd2772cd432': {
|
|
140
|
+
source: 'bitgo',
|
|
141
|
+
encoded: 'HT6zoSecYyqJX63Hqaj1usvyqJbrnc8ia',
|
|
142
|
+
pub: '03d71cda3b1c32eed044866ec96c2ac54af43e7edb8f1535df51f341e49674ffaa',
|
|
143
|
+
prv: '5a360c848021024528dfc02e79ba441f1727c765b4d0dcec288ffbd2772cd432',
|
|
144
|
+
address: 'P-fuji1k3ca2njcunzl4hhxy24avca7htf66cmjjukl0n',
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
*/
|
|
148
|
+
const unixNow = BigInt(Math.round(new Date().getTime() / 1000));
|
|
149
|
+
const startTime = unixNow + BigInt(60);
|
|
150
|
+
const endTime = startTime + BigInt(60 * 60 * 24 + 600); // 24 hours + 10 minutes
|
|
151
|
+
// const AVAX_PUBLIC_URL = 'https://api.avax-test.network';
|
|
152
|
+
// const pvmapi = new pvm.PVMApi(AVAX_PUBLIC_URL);
|
|
153
|
+
// const { utxos } = await pvmapi.getUTXOs({
|
|
154
|
+
// addresses: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses,
|
|
155
|
+
// });
|
|
156
|
+
// console.log(utxos);
|
|
157
|
+
const recoveryMode = false;
|
|
158
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
159
|
+
.getPermissionlessValidatorTxBuilder()
|
|
160
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.threshold)
|
|
161
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.locktime)
|
|
162
|
+
.recoverMode(recoveryMode)
|
|
163
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses)
|
|
164
|
+
.startTime(startTime.toString())
|
|
165
|
+
.endTime(endTime.toString())
|
|
166
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount)
|
|
167
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
168
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.nodeId)
|
|
169
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsPublicKey)
|
|
170
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsSignature)
|
|
171
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.utxos);
|
|
172
|
+
const tx = await txBuilder.build();
|
|
173
|
+
tx.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
174
|
+
console.log(tx.toBroadcastFormat());
|
|
175
|
+
const txBuilder2 = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
176
|
+
.from(tx.toBroadcastFormat())
|
|
177
|
+
.recoverMode(false);
|
|
178
|
+
const tx2 = await txBuilder2.build();
|
|
179
|
+
tx2.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
180
|
+
// Test sign with user key
|
|
181
|
+
txBuilder2.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.userPrivateKey });
|
|
182
|
+
const halfSigned = await txBuilder2.build();
|
|
183
|
+
const halfSignedTxHex = halfSigned.toBroadcastFormat();
|
|
184
|
+
(0, assert_1.default)(txBuilder['_stakeAmount'] === txBuilder2['_stakeAmount']);
|
|
185
|
+
console.log(halfSignedTxHex);
|
|
186
|
+
// const txBuilder2 = factory.from(halfSignedTxHex);
|
|
187
|
+
// txBuilder2.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.backupPrivateKey });
|
|
188
|
+
// const fullSignedTx = await txBuilder2.build();
|
|
189
|
+
// console.log(fullSignedTx.toJson());
|
|
190
|
+
// const res = await pvmapi.issueTx({ tx: fullSignedTx.toBroadcastFormat() });
|
|
191
|
+
// const txSigned =
|
|
192
|
+
// '0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000070000000005c81a40000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad6372000000024411af9d9877c52c1be3f77825a74ca11869128478c4145910e92695a24c7d80000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b9aca0000000002000000010000000271d8644c9199e30b9fef53af56aef243e5431c6b1b09d5f11a6622c86db3f39d000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa000000050000000005c81a4000000002000000010000000200000000129a271ff407b1101f35aec82a2f715c5239bd3900000000660f4ab50000000066109e8d000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001cad9e9476b701edec88e53b1c314456053b3cf846a1192117872e41455f440c074d6ee89530d45e88f79ac0eda06f2887a94d6182edbd953516b262f17565a65d98f5741549cd70d2423abff750bb4b8d982d482376b189142ff8aa4705615fee14be6174610860e9c003aa4aeaa613b1732abf3cd0c9c42fa5856345644068c0d1f9fa1d9af32e20b14fca02983260bc000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad637200030d4000000002000000090000000228a59420971953aa61b4b4c90b934ef76e6e9c8ad256e9417e9a6b5017d836813b2b5cad2a890c66c8295f104d74192c4964cf289e2a45adb57a7b05b5e9529e004ec2dae5c48ba6fa4d1e0b1c6b9d9bbe79c481ff16848c1fa3fa3a6ed47431a12af4b2d9779bb192bb3f254408731798b50c8f03f25b7e7d7313738892e71d6601000000090000000228a59420971953aa61b4b4c90b934ef76e6e9c8ad256e9417e9a6b5017d836813b2b5cad2a890c66c8295f104d74192c4964cf289e2a45adb57a7b05b5e9529e004ec2dae5c48ba6fa4d1e0b1c6b9d9bbe79c481ff16848c1fa3fa3a6ed47431a12af4b2d9779bb192bb3f254408731798b50c8f03f25b7e7d7313738892e71d660151aa291f';
|
|
193
|
+
// const txBuilder = new TransactionBuilderFactory(coins.get('tavaxp')).from(tx);
|
|
194
|
+
// const decode = await txBuilder.build();
|
|
195
|
+
// console.log(decode.toJson());
|
|
196
|
+
// const res = await pvmapi.issueTx({ tx: txSigned });
|
|
197
|
+
// console.log(res);
|
|
198
|
+
});
|
|
199
|
+
it('build and sign an AddPermissionlessValidator transaction', async () => {
|
|
200
|
+
const recoveryMode = false;
|
|
201
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
202
|
+
.getPermissionlessValidatorTxBuilder()
|
|
203
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.threshold)
|
|
204
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.locktime)
|
|
205
|
+
.recoverMode(recoveryMode)
|
|
206
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.bitgoAddresses)
|
|
207
|
+
.startTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.startTime)
|
|
208
|
+
.endTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.endTime)
|
|
209
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.stakeAmount)
|
|
210
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.delegationFeeRate)
|
|
211
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.nodeId)
|
|
212
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsPublicKey)
|
|
213
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsSignature)
|
|
214
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.utxos);
|
|
215
|
+
const tx = await txBuilder.build();
|
|
216
|
+
tx.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
217
|
+
// Test sign with user key
|
|
218
|
+
txBuilder.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.userPrivateKey });
|
|
219
|
+
txBuilder.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.backupPrivateKey });
|
|
220
|
+
const fullSignedTx = await txBuilder.build();
|
|
221
|
+
console.log(fullSignedTx.toJson());
|
|
222
|
+
});
|
|
223
|
+
it('build and sign a transaction in recovery mode', async () => {
|
|
224
|
+
var _a;
|
|
225
|
+
const recoveryMode = true;
|
|
226
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
227
|
+
.getPermissionlessValidatorTxBuilder()
|
|
228
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.threshold)
|
|
229
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.locktime)
|
|
230
|
+
.recoverMode(recoveryMode)
|
|
231
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.bitgoAddresses)
|
|
232
|
+
.startTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.startTime)
|
|
233
|
+
.endTime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.endTime)
|
|
234
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.stakeAmount)
|
|
235
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.delegationFeeRate)
|
|
236
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.nodeId)
|
|
237
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsPublicKey)
|
|
238
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.blsSignature)
|
|
239
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.utxos);
|
|
240
|
+
const tx = await txBuilder.build();
|
|
241
|
+
let txHex = tx.toBroadcastFormat();
|
|
242
|
+
txHex.should.equal(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.unsignedRawtxRecovery);
|
|
243
|
+
const privateKey = recoveryMode
|
|
244
|
+
? testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.backupPrivateKey
|
|
245
|
+
: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.userPrivateKey;
|
|
246
|
+
const params = {
|
|
247
|
+
txPrebuild: {
|
|
248
|
+
txHex: tx.toBroadcastFormat(),
|
|
249
|
+
},
|
|
250
|
+
prv: privateKey,
|
|
251
|
+
};
|
|
252
|
+
const halfSignedTransaction = await basecoin.signTransaction(params);
|
|
253
|
+
txHex = (_a = halfSignedTransaction === null || halfSignedTransaction === void 0 ? void 0 : halfSignedTransaction.halfSigned) === null || _a === void 0 ? void 0 : _a.txHex;
|
|
254
|
+
txHex.should.equal(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_SAMPLE.halfSignedRawTxRecovery);
|
|
255
|
+
});
|
|
256
|
+
it('build and sign an AddPermissionlessValidator transaction and broadcast in recovery mode', async () => {
|
|
257
|
+
const unixNow = BigInt(Math.round(new Date().getTime() / 1000));
|
|
258
|
+
const startTime = unixNow + BigInt(60);
|
|
259
|
+
const endTime = startTime + BigInt(60 * 60 * 24 + 600);
|
|
260
|
+
const recoveryMode = true;
|
|
261
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
262
|
+
.getPermissionlessValidatorTxBuilder()
|
|
263
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.threshold)
|
|
264
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.locktime)
|
|
265
|
+
.recoverMode(recoveryMode)
|
|
266
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses)
|
|
267
|
+
.startTime(startTime.toString())
|
|
268
|
+
.endTime(endTime.toString())
|
|
269
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount)
|
|
270
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
271
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.nodeId)
|
|
272
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsPublicKey)
|
|
273
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsSignature)
|
|
274
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.utxos);
|
|
275
|
+
const tx = await txBuilder.build();
|
|
276
|
+
tx.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
277
|
+
// Test sign with user key
|
|
278
|
+
txBuilder.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.backupPrivateKey });
|
|
279
|
+
const halfSigned = await txBuilder.build();
|
|
280
|
+
const halfSignedTxHex = halfSigned.toBroadcastFormat();
|
|
281
|
+
const txBuilder2 = factory.from(halfSignedTxHex);
|
|
282
|
+
txBuilder2.sign({ key: testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.userPrivateKey });
|
|
283
|
+
const fullSignedTx = await txBuilder2.build();
|
|
284
|
+
console.log(fullSignedTx.toJson());
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEM7QUFDMUMsOENBQWlHO0FBQ2pHLDhDQUEwRDtBQUMxRCw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBQzVCLHNDQUE2QztBQUM3QywyREFBNkM7QUFDN0MsMENBQTZEO0FBQzdELHdHQUFxRztBQUNyRyxnRUFBa0Q7QUFDbEQsNENBQTRDO0FBRTVDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7SUFDdEQsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLEtBQW1CLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFbkUsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFlBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7UUFDcEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxD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LFlBQVksR0FBRyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uLCBIYWxmU2lnbmVkQWNjb3VudFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBBdmF4UCwgVGF2YXhQIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIEF2YXhwTGliIGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9hdmF4cCc7XG4vLyBpbXBvcnQgeyBwdm0gfSBmcm9tICdAYml0Z28vYXZhbGFuY2hlanMnO1xuXG5kZXNjcmliZSgnQXZheFAgcGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXInLCAoKSA9PiB7XG4gIGxldCBiYXNlY29pbjtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKTtcblxuICBiZWZvcmUoKCkgPT4ge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7XG4gICAgICBlbnY6ICdtb2NrJyxcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ2F2YXhwJywgQXZheFAuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGF2YXhwJywgVGF2YXhQLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiYXNlY29pbiA9IGJpdGdvLmNvaW4oJ3RhdmF4cCcpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGNyZWF0ZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZyb20gaGV4JywgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5oYWxmU2lnbmVkVHgpO1xuICAgIHR4QnVpbGRlci5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiByZWFkYWJsZScsICgpID0+IHtcbiAgICBsZXQgdHg6IEJhc2VUcmFuc2FjdGlvbjtcbiAgICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREX1ZBTElEQVRPUl9JRF9TQU1QTEUuZnVsbHNpZ250eEhleFxuICAgICAgKTtcbiAgICAgIHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGpzb24gc3RyaW5naWZpeSBhZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgYXNzZXJ0KHR5cGVvZiBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSksICdzdHJpbmcnKTtcbiAgICAgIHR4SnNvbi5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREX1ZBTElEQVRPUl9JRF9TQU1QTEUudHhpZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGdldCBhIHR4aWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREX1ZBTElEQVRPUl9JRF9TQU1QTEUudHhpZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgZXhwbGFpbnMgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIFNpZ25lZCBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgLy8gaHR0cHM6Ly90ZXN0bmV0LnNub3d0cmFjZS5pby9wdm0vdHgvMnR0M0tFNmdBRzdxcE1MTDZ4b3luU3lrN2h0NGVnUTc0d2NGN0F1R20yNXZRM1FOV0I/Y2hhaW5JZD00MzExM1xuICAgICAgICAnMHgwMDAwMDAwMDAwMTkwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwMGJhZWI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwM2FjMDNjMGNhNzFhMWRkZTg0NzAyZDI3MmZiZGQwODYwMDE4NjcwMTI0MmUxOWFkOWE2MTdmYjk1ZGNmODg0M2FkZTY2ZTA2ZTU3OGY1NDlhOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZTAwMDAwMDAyNGYxOTRkOGUwNjZiMTFkZmU5MmY1OTNjZmE1YzJmYTFhZTQ1MDkyN2VjZDViMDkzOTUyZTYxODM0ZjRkOGFhNDAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDAyM2E0YzE4MDAwMDAwMDAzMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAxNGYxOTRkOGUwNjZiMTFkZmU5MmY1OTNjZmE1YzJmYTFhZTQ1MDkyN2VjZDViMDkzOTUyZTYxODM0ZjRkOGFhNDAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDAyM2E0YzE4MDAwMDAwMDAzMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDA5NGE4YjgxNzlmMGI2ZTdlN2NlNTViNGQ2ZWM1YWQ1NmRhZTFkZTlmMDAwMDAwMDA2MmJiMDNlNjAwMDAwMDAwNjJlMzI1NTYwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFjOGY5NTQyM2Y3MTQyZDAwYTQ4ZTEwMTRhM2RlOGQyODkwN2Q0MjBkYzMzYjMwNTJhNmRlZTAzYTNmMjk0MWEzOTNjMjM1MWUzNTQ3MDRjYTY2YTNmYzI5ODcwMjgyZTE1ODZhM2FiNGM0NWNmZTMxY2FlMzRjMWQwNmYyMTI0MzRhYzcxYjFiZTZjZmUwNDZjODBjMTYyZTA1NzYxNGE5NGE1YmM5ZjFkZWQxYTcwMjlkZWIwYmE0Y2E3YzliNzE0MTFlMjkzNDM4NjkxYmU3OWMyZGJmMTlkMWNhN2MzZWFkYjljNzU2MjQ2ZmM1ZGU1YjdiODk1MTFjN2Q3MzAyYWUwNTFkOWUwM2Q3OTkxMTM4Mjk5YjVlZDZhNTcwYTk4MDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWUwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzYWMwM2MwY2E3MWExZGRlODQ3MDJkMjcyZmJkZDA4NjAwMTg2NzAxMjQyZTE5YWQ5YTYxN2ZiOTVkY2Y4ODQzYWRlNjZlMDZlNTc4ZjU0OWE4YmU1NGYwMTZhYjc0ODEyN2FiMWExODQ2MjZjYmE0NGM3NDhhMWVlMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwM2FjMDNjMGNhNzFhMWRkZTg0NzAyZDI3MmZiZGQwODYwMDE4NjcwMTI0MmUxOWFkOWE2MTdmYjk1ZGNmODg0M2FkZTY2ZTA2ZTU3OGY1NDlhOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZTAwMDMwZDQwMDAwMDAwMDIwMDAwMDAwOTAwMDAwMDAyYjYzMWU5NTUzYTg3MjE5NzhiZmZlZDNlNzc4ZGU3ZWI5MDRlMTY3NTk5YzFkMjZkNWE4ZDNjNDYxNThkZjY2MTE2NGM2Y2E2MDI5ZjI0OTg4MDIwY2NmY2Q2NzNlNWMxOTgxN2ZmNzRkMDEyNjUxZjI0NWQwMDlhNzQ5NTkxMTYwMTcwZWFlNzNkN2UxOWIwNDU2NzFkNDEwNTBiMTE3OTE2NDM1NjdkMWJjOWNjNTFmYTIyNmQyYmU5NWE2NTY4OWYxOWNkYTA2YTI0MmE5NzQ5ZjZhMTUwZmNjMmE1YjUwYWYxMmExYmMzNTY0ZDFiNzZhYzFlMzgyNmI1ZTIxMzYxMDEwMDAwMDAwOTAwMDAwMDAyYjYzMWU5NTUzYTg3MjE5NzhiZmZlZDNlNzc4ZGU3ZWI5MDRlMTY3NTk5YzFkMjZkNWE4ZDNjNDYxNThkZjY2MTE2NGM2Y2E2MDI5ZjI0OTg4MDIwY2NmY2Q2NzNlNWMxOTgxN2ZmNzRkMDEyNjUxZjI0NWQwMDlhNzQ5NTkxMTYwMTcwZWFlNzNkN2UxOWIwNDU2NzFkNDEwNTBiMTE3OTE2NDM1NjdkMWJjOWNjNTFmYTIyNmQyYmU5NWE2NTY4OWYxOWNkYTA2YTI0MmE5NzQ5ZjZhMTUwZmNjMmE1YjUwYWYxMmExYmMzNTY0ZDFiNzZhYzFlMzgyNmI1ZTIxMzYxMDEnXG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIFNpZ25lZCBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4IGZyb20gcmF3JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb2xkSGV4ID1cbiAgICAgICAgJzB4MDAwMDAwMDAwMDE5MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDFjYmFiYzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwMjY0ZDliNWVhYjhjNGExYTI1YmZhOWUzZTFhNjBkNzhmMWFlODhlNzM1MmUyMmVmOTAxMDc2NDhiNzM4YTMwZTMwMDAwMDAwMDNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwM2I2ZDAzNDAwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDI2Y2NiMmE0ZmVhMjgxYTg3MzdkMzNiMjUzNWVlM2Y3MDUxOGIzNTRjOTFmMGFkY2ZhYTcwZTQ1OWM0YjE4ODFjMDAwMDAwMDAzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDUwMDAwMDAwMDFjZTg4MzQwMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyMDAwMDAwMDAxMjlhMjcxZmY0MDdiMTEwMWYzNWFlYzgyYTJmNzE1YzUyMzliZDM5MDAwMDAwMDA2NjBmMTdkZTAwMDAwMDAwNjYxMDZiYjYwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFjYWQ5ZTk0NzZiNzAxZWRlYzg4ZTUzYjFjMzE0NDU2MDUzYjNjZjg0NmExMTkyMTE3ODcyZTQxNDU1ZjQ0MGMwNzRkNmVlODk1MzBkNDVlODhmNzlhYzBlZGEwNmYyODg3YTk0ZDYxODJlZGJkOTUzNTE2YjI2MmYxNzU2NWE2NWQ5OGY1NzQxNTQ5Y2Q3MGQyNDIzYWJmZjc1MGJiNGI4ZDk4MmQ0ODIzNzZiMTg5MTQyZmY4YWE0NzA1NjE1ZmVlMTRiZTYxNzQ2MTA4NjBlOWMwMDNhYTRhZWFhNjEzYjE3MzJhYmYzY2QwYzljNDJmYTU4NTYzNDU2NDQwNjhjMGQxZjlmYTFkOWFmMzJlMjBiMTRmY2EwMjk4MzI2MGJjMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDMwZDQwMDAwMDAwMDIwMDAwMDAwOTAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMGM1YzcxYyc7XG4gICAgICBjb25zdCBzb3J0ZWRCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShvbGRIZXgpO1xuICAgICAgY29uc3Qgc29ydGVkVHggPSBhd2FpdCBzb3J0ZWRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSBzb3J0ZWRUeC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIC8vIHRoaXMgdHggaXMgc29ydGVkIGFuZCBjYW4gYmUgYnJvYWRjYXN0ZWRcbiAgICAgIGNvbnN0IG5ld0hleCA9IHNvcnRlZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBhc3NlcnQobmV3SGV4ID09PSBvbGRIZXgpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnTm9kZUlELTJoTXFCUWRqWk1XZEh2WXU3WlBMQTJDbXJBZGJUdnBHZicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHggd2l0aCAxIGlucHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgJzB4MDAwMDAwMDAwMDE5MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMyYTAwODM5NTUwZjc1ZWU4ODc5Y2FjZDk3ZmYzNTBhNTFkNDdhZTE0ZGI5NDMzNWYyZjY2OGI5NzA3Yzc4OTAzYzNiNWFjNTRjNmY0MDU0NzgzYzRhNmVjZDViMThmYTA3NjkyZDM1ZWU0YzNmOGI3NGQ0MjU3MjEwMDAwMDAwMTRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMDNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwNzczNTk0MDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMGUyNWM5YTA5ZWI5YzY4ZDQ4MDdhMzlmOTc4OTNmYWNkOWE2YTdkYTEwMDAwMDAwMDY2MGQ3NTA5MDAwMDAwMDA2NjBlYzY4OTAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWM4Zjk1NDIzZjcxNDJkMDBhNDhlMTAxNGEzZGU4ZDI4OTA3ZDQyMGRjMzNiMzA1MmE2ZGVlMDNhM2YyOTQxYTM5M2MyMzUxZTM1NDcwNGNhNjZhM2ZjMjk4NzAyODJlMTU4NmEzYWI0YzQ1Y2ZlMzFjYWUzNGMxZDA2ZjIxMjQzNGFjNzFiMWJlNmNmZTA0NmM4MGMxNjJlMDU3NjE0YTk0YTViYzlmMWRlZDFhNzAyOWRlYjBiYTRjYTdjOWI3MTQxMWUyOTM0Mzg2OTFiZTc5YzJkYmYxOWQxY2E3YzNlYWRiOWM3NTYyNDZmYzVkZTViN2I4OTUxMWM3ZDczMDJhZTA1MWQ5ZTAzZDc5OTExMzgyOTliNWVkNmE1NzBhOTgwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzJhMDA4Mzk1NTBmNzVlZTg4NzljYWNkOTdmZjM1MGE1MWQ0N2FlMTRkYjk0MzM1ZjJmNjY4Yjk3MDdjNzg5MDNjM2I1YWM1NGM2ZjQwNTQ3ODNjNGE2ZWNkNWIxOGZhMDc2OTJkMzVlZTRjM2Y4Yjc0ZDQyNTcyMTAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMyYTAwODM5NTUwZjc1ZWU4ODc5Y2FjZDk3ZmYzNTBhNTFkNDdhZTE0ZGI5NDMzNWYyZjY2OGI5NzA3Yzc4OTAzYzNiNWFjNTRjNmY0MDU0NzgzYzRhNmVjZDViMThmYTA3NjkyZDM1ZWU0YzNmOGI3NGQ0MjU3MjEwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMmEwMDgzOTU1MGY3NWVlODg3OWNhY2Q5N2ZmMzUwYTUxZDQ3YWUxNGRiOTQzMzVmMmY2NjhiOTcwN2M3ODkwM2MzYjVhYzU0YzZmNDA1NDc4M2M0YTZlY2Q1YjE4ZmEwNzY5MmQzNWVlNGMzZjhiNzRkNDI1NzIxMDAwMzBkNDAwMDAwMDAwMTAwMDAwMDA5MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBkYjk0MzM1ZjJmNjY4Yjk3MDdjNzg5MDNjM2I1YWM1NGM2ZjQwNTQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNjNTU0M2IwJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoJ05vZGVJRC1NZHRlUzlVOTg3UFk3aXdBNVBjejNzS1ZwckpBYkF2RTcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBIYWxmIFNpZ25lZCBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuaGFsZnNpZ250eEhleFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm5vZGVJRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW5zIGEgdW5zaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXhcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lnbiBUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnYnVpbGQgYW5kIHNpZ24gYW4gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IgdHJhbnNhY3Rpb24gYW5kIGJyb2FkY2FzdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8qXG5cbiAgICBjb25zdCBrZXlNYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgZjQ1ZDFjOWJmNTdkM2MwMjI5OWE3MjdkNmU1ZDhkNGU3NjQ5ODg0NmIxYTI4OWI0ZTMxYTJlY2NjYmMyMTJmYjoge1xuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgICAgZW5jb2RlZDogJ0JoakV6YVhNU0ZqNGFRQmh3MjdEc243M2I4clI5Z0NUWCcsXG4gICAgICAgIHB1YjogJzAyYWJiNDUxYzBjYzI0MGU5YTRmYjk3YTEzMDg0NmQ5MGE4NzI0NzI2NGU1NzAxNGU0MWRjMjI2ZWJmNDk2NTcyNCcsXG4gICAgICAgIHBydjogJ2Y0NWQxYzliZjU3ZDNjMDIyOTlhNzI3ZDZlNWQ4ZDRlNzY0OTg4NDZiMWEyODliNGUzMWEyZWNjY2JjMjEyZmInLFxuICAgICAgICBhZGRyZXNzOiAnUC1mdWppMXc0ampzNHFmdWdxMG0zbnUwZDNodHg2NjYyZGxxODd6cTVuejMzJyxcbiAgICAgIH0sXG4gICAgICAnMmUwZmZlNmVmYmZjYzI3ZTlhYWY0YmNlNmFmNzhkNGM2NmU4OWIwOTU1Yjg1ZjAyZDdlMTU5MTBlMTZlZDRjZCc6IHtcbiAgICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgICAgZW5jb2RlZDogJ0JGelBKTmlmcWRmNlo4SDJQNzZnVEViZDhSbUNqTVN6TCcsXG4gICAgICAgIHB1YjogJzAyNTUyM2ZhNDhhNWIwYzhlZDRhODM0NGFhYjgzOTYwNjFmYjQyY2I0ZjE2OGJhNWQzYWUxOWYwMzRjNGVhMmQ0ZCcsXG4gICAgICAgIHBydjogJzJlMGZmZTZlZmJmY2MyN2U5YWFmNGJjZTZhZjc4ZDRjNjZlODliMDk1NWI4NWYwMmQ3ZTE1OTEwZTE2ZWQ0Y2QnLFxuICAgICAgICBhZGRyZXNzOiAnUC1mdWppMXd6cjBoc204emxyNmdwYWFreHZ0NjdmOTk5bmowNDRldGUwN3V3JyxcbiAgICAgIH0sXG4gICAgICAnNWEzNjBjODQ4MDIxMDI0NTI4ZGZjMDJlNzliYTQ0MWYxNzI3Yzc2NWI0ZDBkY2VjMjg4ZmZiZDI3NzJjZDQzMic6IHtcbiAgICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAgICBlbmNvZGVkOiAnSFQ2em9TZWNZeXFKWDYzSHFhajF1c3Z5cUpicm5jOGlhJyxcbiAgICAgICAgcHViOiAnMDNkNzFjZGEzYjFjMzJlZWQwNDQ4NjZlYzk2YzJhYzU0YWY0M2U3ZWRiOGYxNTM1ZGY1MWYzNDFlNDk2NzRmZmFhJyxcbiAgICAgICAgcHJ2OiAnNWEzNjBjODQ4MDIxMDI0NTI4ZGZjMDJlNzliYTQ0MWYxNzI3Yzc2NWI0ZDBkY2VjMjg4ZmZiZDI3NzJjZDQzMicsXG4gICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxazNjYTJuamN1bnpsNGhoeHkyNGF2Y2E3aHRmNjZjbWpqdWtsMG4nLFxuICAgICAgfSxcbiAgICB9O1xuICAgICAgICovXG4gICAgICBjb25zdCB1bml4Tm93ID0gQmlnSW50KE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSk7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSB1bml4Tm93ICsgQmlnSW50KDYwKTtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSBzdGFydFRpbWUgKyBCaWdJbnQoNjAgKiA2MCAqIDI0ICsgNjAwKTsgLy8gMjQgaG91cnMgKyAxMCBtaW51dGVzXG5cbiAgICAgIC8vIGNvbnN0IEFWQVhfUFVCTElDX1VSTCA9ICdodHRwczovL2FwaS5hdmF4LXRlc3QubmV0d29yayc7XG4gICAgICAvLyBjb25zdCBwdm1hcGkgPSBuZXcgcHZtLlBWTUFwaShBVkFYX1BVQkxJQ19VUkwpO1xuICAgICAgLy8gY29uc3QgeyB1dHhvcyB9ID0gYXdhaXQgcHZtYXBpLmdldFVUWE9zKHtcbiAgICAgIC8vICAgYWRkcmVzc2VzOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcyxcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gY29uc29sZS5sb2codXR4b3MpO1xuXG4gICAgICBjb25zdCByZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubG9ja3RpbWUpXG4gICAgICAgIC5yZWNvdmVyTW9kZShyZWNvdmVyeU1vZGUpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHN0YXJ0VGltZS50b1N0cmluZygpKVxuICAgICAgICAuZW5kVGltZShlbmRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAgIC5ibHNTaWduYXR1cmUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmxzU2lnbmF0dXJlKVxuICAgICAgICAudXR4b3ModGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG4gICAgICBjb25zb2xlLmxvZyh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpXG4gICAgICAgIC5yZWNvdmVyTW9kZShmYWxzZSk7XG4gICAgICBjb25zdCB0eDIgPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICB0eDIudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcbiAgICAgIC8vIFRlc3Qgc2lnbiB3aXRoIHVzZXIga2V5XG4gICAgICB0eEJ1aWxkZXIyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnVzZXJQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUeEhleCA9IGhhbGZTaWduZWQudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydCh0eEJ1aWxkZXJbJ19zdGFrZUFtb3VudCddID09PSB0eEJ1aWxkZXIyWydfc3Rha2VBbW91bnQnXSk7XG4gICAgICBjb25zb2xlLmxvZyhoYWxmU2lnbmVkVHhIZXgpO1xuXG4gICAgICAvLyBjb25zdCB0eEJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKGhhbGZTaWduZWRUeEhleCk7XG4gICAgICAvLyB0eEJ1aWxkZXIyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXkgfSk7XG4gICAgICAvLyBjb25zdCBmdWxsU2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhmdWxsU2lnbmVkVHgudG9Kc29uKCkpO1xuXG4gICAgICAvLyBjb25zdCByZXMgPSBhd2FpdCBwdm1hcGkuaXNzdWVUeCh7IHR4OiBmdWxsU2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSB9KTtcbiAgICAgIC8vIGNvbnN0IHR4U2lnbmVkID1cbiAgICAgIC8vICAgJzB4MDAwMDAwMDAwMDE5MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDA1YzgxYTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwMjQ0MTFhZjlkOTg3N2M1MmMxYmUzZjc3ODI1YTc0Y2ExMTg2OTEyODQ3OGM0MTQ1OTEwZTkyNjk1YTI0YzdkODAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDI3MWQ4NjQ0YzkxOTllMzBiOWZlZjUzYWY1NmFlZjI0M2U1NDMxYzZiMWIwOWQ1ZjExYTY2MjJjODZkYjNmMzlkMDAwMDAwMDAzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDUwMDAwMDAwMDA1YzgxYTQwMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyMDAwMDAwMDAxMjlhMjcxZmY0MDdiMTEwMWYzNWFlYzgyYTJmNzE1YzUyMzliZDM5MDAwMDAwMDA2NjBmNGFiNTAwMDAwMDAwNjYxMDllOGQwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFjYWQ5ZTk0NzZiNzAxZWRlYzg4ZTUzYjFjMzE0NDU2MDUzYjNjZjg0NmExMTkyMTE3ODcyZTQxNDU1ZjQ0MGMwNzRkNmVlODk1MzBkNDVlODhmNzlhYzBlZGEwNmYyODg3YTk0ZDYxODJlZGJkOTUzNTE2YjI2MmYxNzU2NWE2NWQ5OGY1NzQxNTQ5Y2Q3MGQyNDIzYWJmZjc1MGJiNGI4ZDk4MmQ0ODIzNzZiMTg5MTQyZmY4YWE0NzA1NjE1ZmVlMTRiZTYxNzQ2MTA4NjBlOWMwMDNhYTRhZWFhNjEzYjE3MzJhYmYzY2QwYzljNDJmYTU4NTYzNDU2NDQwNjhjMGQxZjlmYTFkOWFmMzJlMjBiMTRmY2EwMjk4MzI2MGJjMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDMwZDQwMDAwMDAwMDIwMDAwMDAwOTAwMDAwMDAyMjhhNTk0MjA5NzE5NTNhYTYxYjRiNGM5MGI5MzRlZjc2ZTZlOWM4YWQyNTZlOTQxN2U5YTZiNTAxN2Q4MzY4MTNiMmI1Y2FkMmE4OTBjNjZjODI5NWYxMDRkNzQxOTJjNDk2NGNmMjg5ZTJhNDVhZGI1N2E3YjA1YjVlOTUyOWUwMDRlYzJkYWU1YzQ4YmE2ZmE0ZDFlMGIxYzZiOWQ5YmJlNzljNDgxZmYxNjg0OGMxZmEzZmEzYTZlZDQ3NDMxYTEyYWY0YjJkOTc3OWJiMTkyYmIzZjI1NDQwODczMTc5OGI1MGM4ZjAzZjI1YjdlN2Q3MzEzNzM4ODkyZTcxZDY2MDEwMDAwMDAwOTAwMDAwMDAyMjhhNTk0MjA5NzE5NTNhYTYxYjRiNGM5MGI5MzRlZjc2ZTZlOWM4YWQyNTZlOTQxN2U5YTZiNTAxN2Q4MzY4MTNiMmI1Y2FkMmE4OTBjNjZjODI5NWYxMDRkNzQxOTJjNDk2NGNmMjg5ZTJhNDVhZGI1N2E3YjA1YjVlOTUyOWUwMDRlYzJkYWU1YzQ4YmE2ZmE0ZDFlMGIxYzZiOWQ5YmJlNzljNDgxZmYxNjg0OGMxZmEzZmEzYTZlZDQ3NDMxYTEyYWY0YjJkOTc3OWJiMTkyYmIzZjI1NDQwODczMTc5OGI1MGM4ZjAzZjI1YjdlN2Q3MzEzNzM4ODkyZTcxZDY2MDE1MWFhMjkxZic7XG4gICAgICAvLyBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKHR4KTtcbiAgICAgIC8vIGNvbnN0IGRlY29kZSA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgLy8gY29uc29sZS5sb2coZGVjb2RlLnRvSnNvbigpKTtcblxuICAgICAgLy8gY29uc3QgcmVzID0gYXdhaXQgcHZtYXBpLmlzc3VlVHgoeyB0eDogdHhTaWduZWQgfSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGFuIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKVxuICAgICAgICAuZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YXJ0VGltZSlcbiAgICAgICAgLmVuZFRpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5lbmRUaW1lKVxuICAgICAgICAuc3Rha2VBbW91bnQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ub2RlSWQpXG4gICAgICAgIC5ibHNQdWJsaWNLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAgIC5ibHNTaWduYXR1cmUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuXG4gICAgICAvLyBUZXN0IHNpZ24gd2l0aCB1c2VyIGtleVxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudXNlclByaXZhdGVLZXkgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iYWNrdXBQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgZnVsbFNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsU2lnbmVkVHgudG9Kc29uKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVjb3ZlcnkgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5TW9kZSA9IHRydWU7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKVxuICAgICAgICAuZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YXJ0VGltZSlcbiAgICAgICAgLmVuZFRpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5lbmRUaW1lKVxuICAgICAgICAuc3Rha2VBbW91bnQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ub2RlSWQpXG4gICAgICAgIC5ibHNQdWJsaWNLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAgIC5ibHNTaWduYXR1cmUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS51bnNpZ25lZFJhd3R4UmVjb3ZlcnkpO1xuXG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gcmVjb3ZlcnlNb2RlXG4gICAgICAgID8gdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iYWNrdXBQcml2YXRlS2V5XG4gICAgICAgIDogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmhhbGZTaWduZWRSYXdUeFJlY292ZXJ5KTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhbmQgc2lnbiBhbiBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvciB0cmFuc2FjdGlvbiBhbmQgYnJvYWRjYXN0IGluIHJlY292ZXJ5IG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bml4Tm93ID0gQmlnSW50KE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSk7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSB1bml4Tm93ICsgQmlnSW50KDYwKTtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSBzdGFydFRpbWUgKyBCaWdJbnQoNjAgKiA2MCAqIDI0ICsgNjAwKTtcblxuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubG9ja3RpbWUpXG4gICAgICAgIC5yZWNvdmVyTW9kZShyZWNvdmVyeU1vZGUpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHN0YXJ0VGltZS50b1N0cmluZygpKVxuICAgICAgICAuZW5kVGltZShlbmRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAgIC5ibHNTaWduYXR1cmUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmxzU2lnbmF0dXJlKVxuICAgICAgICAudXR4b3ModGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG5cbiAgICAgIC8vIFRlc3Qgc2lnbiB3aXRoIHVzZXIga2V5XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmFja3VwUHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWQgPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUeEhleCA9IGhhbGZTaWduZWQudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGZhY3RvcnkuZnJvbShoYWxmU2lnbmVkVHhIZXgpO1xuICAgICAgdHhCdWlsZGVyMi5zaWduKHsga2V5OiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxTaWduZWRUeC50b0pzb24oKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -75,12 +79,12 @@ describe('AvaxP Transaction Builder Factory', () => {
|
|
|
75
79
|
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(rawTx);
|
|
76
80
|
const tx = await txBuilder.build();
|
|
77
81
|
const txJson = tx.toJson();
|
|
78
|
-
assert_1.default(typeof JSON.stringify(txJson), 'string');
|
|
82
|
+
(0, assert_1.default)(typeof JSON.stringify(txJson), 'string');
|
|
79
83
|
}
|
|
80
84
|
});
|
|
81
85
|
it('Should json stringifiy addValidator transaction', async () => {
|
|
82
86
|
const txJson = tx.toJson();
|
|
83
|
-
assert_1.default(typeof JSON.stringify(tx.toJson()), 'string');
|
|
87
|
+
(0, assert_1.default)(typeof JSON.stringify(tx.toJson()), 'string');
|
|
84
88
|
txJson.id.should.equal(testData.ADD_VALIDATOR_ID_SAMPLE.txid);
|
|
85
89
|
});
|
|
86
90
|
it('Should get a txid', async () => {
|
|
@@ -162,4 +166,4 @@ describe('AvaxP Transaction Builder Factory', () => {
|
|
|
162
166
|
});
|
|
163
167
|
});
|
|
164
168
|
});
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsZ0VBQWtEO0FBQ2xELHFFQUF1RDtBQUN2RCwwQ0FBcUU7QUFDckUsNENBQXVDO0FBQ3ZDLDhDQUFtRTtBQUNuRSx3REFBc0Q7QUFDdEQsd0RBQXNEO0FBQ3RELHdEQUFzRDtBQUN0RCxpREFBNkQ7QUFFN0QsUUFBUSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtJQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVuRSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7WUFDbEMsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkIsQ0FBQyxFQUNELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQywyQkFBMkIsQ0FDbkUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtZQUM3QyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNqRCxDQUFDLEVBQ0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLGlCQUFpQixDQUN6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RTtnQkFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDLGdCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRTtnQkFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDM0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuaW1wb3J0ICogYXMgZXJyb3JNZXNzYWdlIGZyb20gJy4uLy4uL3Jlc291cmNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVHhEYXRhIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IElNUE9SVF9QIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3R4L2ltcG9ydFAnO1xuaW1wb3J0IHsgSU1QT1JUX0MgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHgvaW1wb3J0Qyc7XG5pbXBvcnQgeyBFWFBPUlRfQyB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy90eC9leHBvcnRDJztcbmltcG9ydCB7IEFERFZBTElEQVRPUl9TQU1QTEVTIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2F2YXhwJztcblxuZGVzY3JpYmUoJ0F2YXhQIFRyYW5zYWN0aW9uIEJ1aWxkZXIgRmFjdG9yeScsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgdmFsaWRhdGUnLCAoKSA9PiB7XG4gICAgaXQoJ2FuIGVtcHR5IHJhdyB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmYWN0b3J5LmZyb20oJycpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IGVycm9yTWVzc2FnZS5FUlJPUl9FTVBUWV9SQVdfVFJBTlNBQ1RJT05cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gaW52YWxpZCByYXcgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgZmFjdG9yeS5mcm9tKHRlc3REYXRhLklOVkFMSURfUkFXX1RSQU5TQUNUSU9OKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSBlcnJvck1lc3NhZ2UuRVJST1JfUkFXX1BBUlNJTkdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHZhbGlkYXRlIGEgY29ycmVjdCByYXcgdHgnLCAoKSA9PiB7XG4gICAgICBmYWN0b3J5LmZyb20odGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMudW5zaWduZWRUeEhleCk7XG4gICAgICAvLyBzaG91bGQgbm90IHRocm93IGEgZXJyb3IhXG4gICAgfSk7XG5cbiAgICBpdChcIlNob3VsZG4ndCBnZXQgYSB3YWxsZXQgaW5pdGlhbGl6YXRpb24gYnVpbGRlclwiLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSBlcnJvck1lc3NhZ2UuRVJST1JfV0FMTEVUX0lOSVRJQUxJWkFUSU9OXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gcmVhZGFibGUnLCAoKSA9PiB7XG4gICAgY29uc3QgcmF3VHhzID0gW1xuICAgICAgdGVzdERhdGEuQUREX1ZBTElEQVRPUl9JRF9TQU1QTEUuZnVsbHNpZ250eEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy5mdWxsc2lnbnR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLmhhbGZzaWdudHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MudW5zaWduZWRUeEhleCxcbiAgICAgIElNUE9SVF9QLmZ1bGxzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfUC5oYWxmc2lnbnR4SGV4LFxuICAgICAgSU1QT1JUX1AudW5zaWduZWRUeEhleCxcbiAgICBdO1xuICAgIGxldCB0eDogQmFzZVRyYW5zYWN0aW9uO1xuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERfVkFMSURBVE9SX0lEX1NBTVBMRS5mdWxsc2lnbnR4SGV4XG4gICAgICApO1xuICAgICAgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQganNvbiBzdHJpbmdpZml5IGFueSB0cmFuc2FjdGlvbiBvYmplY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHJhd1R4IG9mIHJhd1R4cykge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKHJhd1R4KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIGFzc2VydCh0eXBlb2YgSlNPTi5zdHJpbmdpZnkodHhKc29uKSwgJ3N0cmluZycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIHN0cmluZ2lmaXkgYWRkVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBhc3NlcnQodHlwZW9mIEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKSwgJ3N0cmluZycpO1xuICAgICAgdHhKc29uLmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERfVkFMSURBVE9SX0lEX1NBTVBMRS50eGlkKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgZ2V0IGEgdHhpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIHR4LmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERfVkFMSURBVE9SX0lEX1NBTVBMRS50eGlkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBleHBsYWlucyB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4cGxhaW5zIGEgU2lnbmVkIEFkZFZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMuZnVsbHNpZ250eEhleFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm5vZGVJRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW5zIGEgSGFsZiBTaWduZWQgQWRkVmFsaWRhdG9yVHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5oYWxmc2lnbnR4SGV4XG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSB1bnNpZ25lZCBBZGRWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLnVuc2lnbmVkVHhIZXhcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ3Jvc3MgY2hhaW4gdHJhbnNmZXIgaGFzIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2hhaW5zJywgKCkgPT4ge1xuICAgIGNvbnN0IHAyY1R4cyA9IFtcbiAgICAgIElNUE9SVF9QLmZ1bGxzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfUC5oYWxmc2lnbnR4SGV4LFxuICAgICAgSU1QT1JUX1AudW5zaWduZWRUeEhleCxcbiAgICAgIEVYUE9SVF9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICBFWFBPUlRfQy51bnNpZ25lZFR4SGV4LFxuICAgIF07XG5cbiAgICBjb25zdCBjMnBUeHMgPSBbXG4gICAgICBJTVBPUlRfQy5mdWxsc2lnbnR4SGV4LFxuICAgICAgSU1QT1JUX0MuaGFsZnNpZ250eEhleCxcbiAgICAgIElNUE9SVF9DLnVuc2lnbmVkVHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MuZnVsbHNpZ250eEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy5oYWxmc2lnbnR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLnVuc2lnbmVkVHhIZXgsXG4gICAgXTtcblxuICAgIGNvbnN0IG5vQ3Jvc3NDaGFpblR4cyA9IFtcbiAgICAgIEFERFZBTElEQVRPUl9TQU1QTEVTLmZ1bGxzaWdudHhIZXgsXG4gICAgICBBRERWQUxJREFUT1JfU0FNUExFUy5oYWxmc2lnbnR4SGV4LFxuICAgICAgQUREVkFMSURBVE9SX1NBTVBMRVMudW5zaWduZWRUeEhleCxcbiAgICBdO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gdG9Kc29uKHR4SGV4OiBzdHJpbmcpOiBQcm9taXNlPFR4RGF0YT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbSh0eEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgcmV0dXJuIHR4LnRvSnNvbigpO1xuICAgIH1cblxuICAgIGl0KCdTaG91bGQganNvbiBoYXZlIHNvdXJjZUNoYWluIEMgYW5kIGRlc3RpbmF0aW9uQ2hhaW4gUCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmF3VHggb2YgcDJjVHhzKSB7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IGF3YWl0IHRvSnNvbihyYXdUeCk7XG4gICAgICAgIHR4SnNvbi5zb3VyY2VDaGFpbiEuc2hvdWxkLmVxdWFsKCdDJyk7XG4gICAgICAgIHR4SnNvbi5kZXN0aW5hdGlvbkNoYWluIS5zaG91bGQuZXF1YWwoJ1AnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQganNvbiBoYXZlIHNvdXJjZUNoYWluIFAgYW5kIGRlc3RpbmF0aW9uQ2hhaW4gQycsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmF3VHggb2YgYzJwVHhzKSB7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IGF3YWl0IHRvSnNvbihyYXdUeCk7XG4gICAgICAgIHR4SnNvbi5zb3VyY2VDaGFpbiEuc2hvdWxkLmVxdWFsKCdQJyk7XG4gICAgICAgIHR4SnNvbi5kZXN0aW5hdGlvbkNoYWluIS5zaG91bGQuZXF1YWwoJ0MnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQganNvbiBoYXZlIG5vdCBzb3VyY2VDaGFpbiBlaXRoZXIgZGVzdGluYXRpb25DaGFpbiAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHJhd1R4IG9mIG5vQ3Jvc3NDaGFpblR4cykge1xuICAgICAgICBjb25zdCB0eEpzb24gPSBhd2FpdCB0b0pzb24ocmF3VHgpO1xuICAgICAgICB0eEpzb24uc2hvdWxkLnByb3BlcnR5KCdzb3VyY2VDaGFpbicpLmJlLnVuZGVmaW5lZCgpO1xuICAgICAgICB0eEpzb24uc2hvdWxkLnByb3BlcnR5KCdkZXN0aW5hdGlvbkNoYWluJykuYmUudW5kZWZpbmVkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLGdFQUFrRDtBQUNsRCxxRUFBdUQ7QUFDdkQsMENBQXFFO0FBQ3JFLDRDQUF1QztBQUN2Qyw4Q0FBbUU7QUFDbkUsd0RBQXNEO0FBQ3RELHdEQUFzRDtBQUN0RCx3REFBc0Q7QUFDdEQsaURBQTZEO0FBRTdELFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7SUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFbkUsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtRQUMvQixFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsMkJBQTJCLENBQ25FLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7WUFDN0MsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDakQsQ0FBQyxFQUNELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxpQkFBaUIs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LElBQUksTUFBTSxFQUFFO2dCQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLFdBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLENBQUMsZ0JBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3pFLEtBQUssTUFBTSxLQUFLLElBQUksZUFBZSxFQUFFO2dCQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUMzRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9hdmF4cCc7XG5pbXBvcnQgKiBhcyBlcnJvck1lc3NhZ2UgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBUeERhdGEgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgSU1QT1JUX1AgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHgvaW1wb3J0UCc7XG5pbXBvcnQgeyBJTVBPUlRfQyB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy90eC9pbXBvcnRDJztcbmltcG9ydCB7IEVYUE9SVF9DIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3R4L2V4cG9ydEMnO1xuaW1wb3J0IHsgQUREVkFMSURBVE9SX1NBTVBMRVMgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuXG5kZXNjcmliZSgnQXZheFAgVHJhbnNhY3Rpb24gQnVpbGRlciBGYWN0b3J5JywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCB2YWxpZGF0ZScsICgpID0+IHtcbiAgICBpdCgnYW4gZW1wdHkgcmF3IHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGZhY3RvcnkuZnJvbSgnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gZXJyb3JNZXNzYWdlLkVSUk9SX0VNUFRZX1JBV19UUkFOU0FDVElPTlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiBpbnZhbGlkIHJhdyB0cmFuc2ZlciB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmYWN0b3J5LmZyb20odGVzdERhdGEuSU5WQUxJRF9SQVdfVFJBTlNBQ1RJT04pO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IGVycm9yTWVzc2FnZS5FUlJPUl9SQVdfUEFSU0lOR1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgdmFsaWRhdGUgYSBjb3JyZWN0IHJhdyB0eCcsICgpID0+IHtcbiAgICAgIGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4KTtcbiAgICAgIC8vIHNob3VsZCBub3QgdGhyb3cgYSBlcnJvciFcbiAgICB9KTtcblxuICAgIGl0KFwiU2hvdWxkbid0IGdldCBhIHdhbGxldCBpbml0aWFsaXphdGlvbiBidWlsZGVyXCIsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09IGVycm9yTWVzc2FnZS5FUlJPUl9XQUxMRVRfSU5JVElBTElaQVRJT05cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiByZWFkYWJsZScsICgpID0+IHtcbiAgICBjb25zdCByYXdUeHMgPSBbXG4gICAgICB0ZXN0RGF0YS5BRERfVkFMSURBVE9SX0lEX1NBTVBMRS5mdWxsc2lnbnR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MuaGFsZnNpZ250eEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy51bnNpZ25lZFR4SGV4LFxuICAgICAgSU1QT1JUX1AuZnVsbHNpZ250eEhleCxcbiAgICAgIElNUE9SVF9QLmhhbGZzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfUC51bnNpZ25lZFR4SGV4LFxuICAgIF07XG4gICAgbGV0IHR4OiBCYXNlVHJhbnNhY3Rpb247XG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLmZ1bGxzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIHN0cmluZ2lmaXkgYW55IHRyYW5zYWN0aW9uIG9iamVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmF3VHggb2YgcmF3VHhzKSB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20ocmF3VHgpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgYXNzZXJ0KHR5cGVvZiBKU09OLnN0cmluZ2lmeSh0eEpzb24pLCAnc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGpzb24gc3RyaW5naWZpeSBhZGRWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGFzc2VydCh0eXBlb2YgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpLCAnc3RyaW5nJyk7XG4gICAgICB0eEpzb24uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBnZXQgYSB0eGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGV4cGxhaW5zIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkVmFsaWRhdG9yVHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5mdWxsc2lnbnR4SGV4XG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBIYWxmIFNpZ25lZCBBZGRWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmhhbGZzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIHVuc2lnbmVkIEFkZFZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMudW5zaWduZWRUeEhleFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm5vZGVJRCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDcm9zcyBjaGFpbiB0cmFuc2ZlciBoYXMgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjaGFpbnMnLCAoKSA9PiB7XG4gICAgY29uc3QgcDJjVHhzID0gW1xuICAgICAgSU1QT1JUX1AuZnVsbHNpZ250eEhleCxcbiAgICAgIElNUE9SVF9QLmhhbGZzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfUC51bnNpZ25lZFR4SGV4LFxuICAgICAgRVhQT1JUX0MuZnVsbHNpZ250eEhleCxcbiAgICAgIEVYUE9SVF9DLnVuc2lnbmVkVHhIZXgsXG4gICAgXTtcblxuICAgIGNvbnN0IGMycFR4cyA9IFtcbiAgICAgIElNUE9SVF9DLmZ1bGxzaWdudHhIZXgsXG4gICAgICBJTVBPUlRfQy5oYWxmc2lnbnR4SGV4LFxuICAgICAgSU1QT1JUX0MudW5zaWduZWRUeEhleCxcbiAgICAgIHRlc3REYXRhLkVYUE9SVF9QXzJfQy5mdWxsc2lnbnR4SGV4LFxuICAgICAgdGVzdERhdGEuRVhQT1JUX1BfMl9DLmhhbGZzaWdudHhIZXgsXG4gICAgICB0ZXN0RGF0YS5FWFBPUlRfUF8yX0MudW5zaWduZWRUeEhleCxcbiAgICBdO1xuXG4gICAgY29uc3Qgbm9Dcm9zc0NoYWluVHhzID0gW1xuICAgICAgQUREVkFMSURBVE9SX1NBTVBMRVMuZnVsbHNpZ250eEhleCxcbiAgICAgIEFERFZBTElEQVRPUl9TQU1QTEVTLmhhbGZzaWdudHhIZXgsXG4gICAgICBBRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4LFxuICAgIF07XG5cbiAgICBhc3luYyBmdW5jdGlvbiB0b0pzb24odHhIZXg6IHN0cmluZyk6IFByb21pc2U8VHhEYXRhPiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKHR4SGV4KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gdHgudG9Kc29uKCk7XG4gICAgfVxuXG4gICAgaXQoJ1Nob3VsZCBqc29uIGhhdmUgc291cmNlQ2hhaW4gQyBhbmQgZGVzdGluYXRpb25DaGFpbiBQJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCByYXdUeCBvZiBwMmNUeHMpIHtcbiAgICAgICAgY29uc3QgdHhKc29uID0gYXdhaXQgdG9Kc29uKHJhd1R4KTtcbiAgICAgICAgdHhKc29uLnNvdXJjZUNoYWluIS5zaG91bGQuZXF1YWwoJ0MnKTtcbiAgICAgICAgdHhKc29uLmRlc3RpbmF0aW9uQ2hhaW4hLnNob3VsZC5lcXVhbCgnUCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIGhhdmUgc291cmNlQ2hhaW4gUCBhbmQgZGVzdGluYXRpb25DaGFpbiBDJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCByYXdUeCBvZiBjMnBUeHMpIHtcbiAgICAgICAgY29uc3QgdHhKc29uID0gYXdhaXQgdG9Kc29uKHJhd1R4KTtcbiAgICAgICAgdHhKc29uLnNvdXJjZUNoYWluIS5zaG91bGQuZXF1YWwoJ1AnKTtcbiAgICAgICAgdHhKc29uLmRlc3RpbmF0aW9uQ2hhaW4hLnNob3VsZC5lcXVhbCgnQycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIGhhdmUgbm90IHNvdXJjZUNoYWluIGVpdGhlciBkZXN0aW5hdGlvbkNoYWluICcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmF3VHggb2Ygbm9Dcm9zc0NoYWluVHhzKSB7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IGF3YWl0IHRvSnNvbihyYXdUeCk7XG4gICAgICAgIHR4SnNvbi5zaG91bGQucHJvcGVydHkoJ3NvdXJjZUNoYWluJykuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgIHR4SnNvbi5zaG91bGQucHJvcGVydHkoJ2Rlc3RpbmF0aW9uQ2hhaW4nKS5iZS51bmRlZmluZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -66,4 +70,4 @@ describe('Avaxp Utils', () => {
|
|
|
66
70
|
});
|
|
67
71
|
});
|
|
68
72
|
});
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsMkNBQW1EO0FBQ25ELGdFQUFrRDtBQUNsRCw0Q0FBeUQ7QUFFekQsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDM0IsTUFBTSxPQUFPLEdBQXFCLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBMkIsQ0FBQztJQUNsRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDeEIsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDM0UsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkVBQTZFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEgsTUFBTSxTQUFTLEdBQUcsV0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUksQ0FBQyxDQUFDO1FBQ2hFLFdBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxFQUFFO1FBQ3JCLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7WUFDdEMsV0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3RSxXQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pFLFdBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUU7WUFDNUMsTUFBTSxPQUFPLEdBQUcsNkNBQTZDLENBQUM7WUFDOUQsV0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1lBQ3JDLE1BQU0sY0FBYyxHQUFHO2dCQUNyQiwrQ0FBK0M7Z0JBQy9DLDBDQUEwQztnQkFDMUMseUNBQXlDO2FBQzFDLENBQUM7WUFFRixXQUFLLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsTUFBTSxxQkFBcUIsR0FDekIsZ0lBQWdJLENBQUM7WUFFbkksV0FBSyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUU7WUFDaEQsTUFBTSxLQUFLLEdBQUcsNEJBQTRCLENBQUM7WUFDM0MsV0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUFHLG1EQUFtRCxDQUFDO1lBQ2xFLFdBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBVdGlscywgS2V5UGFpciB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9hdmF4cCc7XG5pbXBvcnQgeyBBdmFsYW5jaGVOZXR3b3JrLCBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcblxuZGVzY3JpYmUoJ0F2YXhwIFV0aWxzJywgKCkgPT4ge1xuICBjb25zdCBuZXR3b3JrOiBBdmFsYW5jaGVOZXR3b3JrID0gY29pbnMuZ2V0KCd0YXZheHAnKS5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcms7XG4gIGNvbnN0IGNvbXByZXNzZWQgPSB0cnVlO1xuICBpdCgnc2hvdWxkIHJlY292ZXIgc2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuU0VFRF9BQ0NPVU5ULnByaXZhdGVLZXlBdmF4IH0pO1xuICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0UHJpdmF0ZUtleSgpO1xuICAgIGNvbnN0IHB1YiA9IGtleVBhaXIuZ2V0UHVibGljS2V5KHsgY29tcHJlc3NlZCB9KTtcbiAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20oJ0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBFc3QgbWF4aW1lIGl1cmUgZXQgb2RpbyBpdXN0byBub24gYXNwZXJuYXR1ci4uLicsICdoZXgnKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBVdGlscy5jcmVhdGVTaWduYXR1cmUobmV0d29yaywgbWVzc2FnZSwgcHJ2ISk7XG4gICAgVXRpbHMucmVjb3ZlcnlTaWduYXR1cmUobmV0d29yaywgbWVzc2FnZSwgc2lnbmF0dXJlKS5zaG91bGQuZGVlcEVxdWFsKHB1Yik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgVXRpbHMuaXNWYWxpZFB1YmxpY0tleSh0ZXN0RGF0YS5TRUVEX0FDQ09VTlQucHVibGljS2V5Q2I1OCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodGVzdERhdGEuU0VFRF9BQ0NPVU5ULnB1YmxpY0tleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRQdWJsaWNLZXkodGVzdERhdGEuU0VFRF9BQ0NPVU5ULnhQdWJsaWNLZXkpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdmdWppMTVqYW13dWtmcWt3aGU4ejI2dGpxeGVqdGpkM2prOXZqNGtteHdhJztcbiAgICAgIFV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhZGRyZXNzIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRBZGRyZXNzZXMgPSBbXG4gICAgICAgICdQLWZ1amkxNWphbXd1a2Zxa3doZTh6MjZ0anF4ZWp0amQzams5dmo0a214d2EnLFxuICAgICAgICAnTm9kZUlELU1kdGVTOVU5ODdQWTdpd0E1UGN6M3NLVnBySkFiQXZFNycsXG4gICAgICAgICdOb2RlSUQtUDFLamRQTnJhcDhMSGZ4NUFzdGNYeHNIamszamJieUYnLFxuICAgICAgXTtcblxuICAgICAgVXRpbHMuaXNWYWxpZEFkZHJlc3ModmFsaWRBZGRyZXNzZXMpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFkZHJlc3MgbXVsdGlTaWcgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3RyaW5nTXVsdGlTaWdBZGRyZXNzID1cbiAgICAgICAgJ1AtZnVqaTE1amFtd3VrZnFrd2hlOHoyNnRqcXhlanRqZDNqazl2ajRrbXh3YX5Ob2RlSUQtTWR0ZVM5VTk4N1BZN2l3QTVQY3ozc0tWcHJKQWJBdkU3fk5vZGVJRC1QMUtqZFBOcmFwOExIZng1QXN0Y1h4c0hqazNqYmJ5Ric7XG5cbiAgICAgIFV0aWxzLmlzVmFsaWRBZGRyZXNzKHN0cmluZ011bHRpU2lnQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBhbiBpbnZhbGlkIGJsb2NrIGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmxvY2sgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuICAgICAgVXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2spLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIGJsb2NrIGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmxvY2sgPSAnekdDMjZCYWdqNzlSQlBvYks4SGdoazl4dXFBbU1FNTNlRVV0TTlSSjJ5YWRCeHJjaCc7XG4gICAgICBVdGlscy5pc1ZhbGlkQmxvY2tJZChibG9jaykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|