@bitgo/sdk-coin-dot 1.3.3 → 2.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 +17 -0
- package/dist/src/lib/addressInitializationBuilder.d.ts.map +1 -1
- package/dist/src/lib/addressInitializationBuilder.js +11 -9
- package/dist/src/lib/batchTransactionBuilder.d.ts +15 -1
- package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/batchTransactionBuilder.js +115 -16
- package/dist/src/lib/iface.d.ts +133 -4
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +90 -2
- package/dist/src/lib/iface_utils.d.ts +59 -0
- package/dist/src/lib/iface_utils.d.ts.map +1 -0
- package/dist/src/lib/iface_utils.js +93 -0
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/nativeTransferBuilder.d.ts.map +1 -1
- package/dist/src/lib/nativeTransferBuilder.js +4 -3
- package/dist/src/lib/proxyBuilder.d.ts +54 -0
- package/dist/src/lib/proxyBuilder.d.ts.map +1 -0
- package/dist/src/lib/proxyBuilder.js +118 -0
- package/dist/src/lib/stakingBuilder.d.ts +8 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingBuilder.js +42 -11
- package/dist/src/lib/transaction.d.ts +19 -0
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +244 -65
- package/dist/src/lib/transactionBuilder.d.ts +1 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +6 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts +2 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +12 -2
- package/dist/src/lib/txnSchema.d.ts +1 -1
- package/dist/src/lib/txnSchema.d.ts.map +1 -1
- package/dist/src/lib/txnSchema.js +12 -2
- package/dist/src/lib/utils.d.ts +109 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +174 -1
- package/package.json +6 -6
|
@@ -22,13 +22,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.Transaction = void 0;
|
|
25
|
+
exports.Transaction = exports.STAKING_DESTINATION = void 0;
|
|
26
26
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
27
27
|
const keyring_1 = __importStar(require("@polkadot/keyring"));
|
|
28
28
|
const util_1 = require("@polkadot/util");
|
|
29
29
|
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
30
30
|
const keyPair_1 = require("./keyPair");
|
|
31
|
+
const iface_1 = require("./iface");
|
|
32
|
+
const iface_utils_1 = require("./iface_utils");
|
|
31
33
|
const utils_1 = __importDefault(require("./utils"));
|
|
34
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
35
|
+
/**
|
|
36
|
+
* Use a dummy address as the destination of a bond or bondExtra because our inputs and outputs model
|
|
37
|
+
* doesn't seem to handle the concept of locking funds within a wallet as a method of transferring coins.
|
|
38
|
+
*/
|
|
39
|
+
exports.STAKING_DESTINATION = keyring_1.encodeAddress('0x0000000000000000000000000000000000000000000000000000000000000000');
|
|
32
40
|
class Transaction extends sdk_core_1.BaseTransaction {
|
|
33
41
|
constructor(coinConfig) {
|
|
34
42
|
super(coinConfig);
|
|
@@ -75,6 +83,13 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
75
83
|
addSignature(signature) {
|
|
76
84
|
this._signedTransaction = utils_1.default.serializeSignedTransaction(this._dotTransaction, signature, this._dotTransaction.metadataRpc, this._registry);
|
|
77
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Returns a serialized representation of this transaction with a fake signature attached which
|
|
88
|
+
* can be used to estimate transaction fees.
|
|
89
|
+
*/
|
|
90
|
+
fakeSign() {
|
|
91
|
+
return utils_1.default.serializeSignedTransaction(this._dotTransaction, Transaction.FAKE_SIGNATURE, this._dotTransaction.metadataRpc, this._registry);
|
|
92
|
+
}
|
|
78
93
|
registry(registry) {
|
|
79
94
|
this._registry = registry;
|
|
80
95
|
}
|
|
@@ -129,7 +144,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
129
144
|
const txMethod = decodedTx.method.args;
|
|
130
145
|
if (utils_1.default.isProxyTransfer(txMethod)) {
|
|
131
146
|
const keypairReal = new keyPair_1.KeyPair({
|
|
132
|
-
pub: Buffer.from(keyring_1.decodeAddress(txMethod
|
|
147
|
+
pub: Buffer.from(keyring_1.decodeAddress(iface_utils_1.getAddress(txMethod))).toString('hex'),
|
|
133
148
|
});
|
|
134
149
|
result.owner = keypairReal.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
135
150
|
result.forceProxyType = txMethod.forceProxyType;
|
|
@@ -162,30 +177,35 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
162
177
|
}
|
|
163
178
|
if (this.type === sdk_core_1.TransactionType.StakingActivate) {
|
|
164
179
|
const txMethod = decodedTx.method.args;
|
|
165
|
-
|
|
166
|
-
pub: Buffer.from(keyring_1.decodeAddress(txMethod.controller.id, false, this._registry.chainSS58)).toString('hex'),
|
|
167
|
-
});
|
|
168
|
-
result.controller = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
169
|
-
result.amount = txMethod.value;
|
|
170
|
-
const payee = txMethod.payee;
|
|
171
|
-
if (payee.account) {
|
|
180
|
+
if (utils_1.default.isBond(txMethod)) {
|
|
172
181
|
const keypair = new keyPair_1.KeyPair({
|
|
173
|
-
pub: Buffer.from(keyring_1.decodeAddress(
|
|
182
|
+
pub: Buffer.from(keyring_1.decodeAddress(txMethod.controller.id, false, this._registry.chainSS58)).toString('hex'),
|
|
174
183
|
});
|
|
175
|
-
result.
|
|
184
|
+
result.controller = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
185
|
+
result.amount = txMethod.value;
|
|
186
|
+
const payee = txMethod.payee;
|
|
187
|
+
if (payee.account) {
|
|
188
|
+
const keypair = new keyPair_1.KeyPair({
|
|
189
|
+
pub: Buffer.from(keyring_1.decodeAddress(payee.account, false, this._registry.chainSS58)).toString('hex'),
|
|
190
|
+
});
|
|
191
|
+
result.payee = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
const payeeType = utils_1.default.capitalizeFirstLetter(Object.keys(payee)[0]);
|
|
195
|
+
result.payee = payeeType;
|
|
196
|
+
}
|
|
176
197
|
}
|
|
177
|
-
else {
|
|
178
|
-
|
|
179
|
-
result.payee = payeeType;
|
|
198
|
+
else if (utils_1.default.isBondExtra(decodedTx.method.args)) {
|
|
199
|
+
result.amount = decodedTx.method.args.maxAdditional;
|
|
180
200
|
}
|
|
181
201
|
}
|
|
182
202
|
if (this.type === sdk_core_1.TransactionType.AddressInitialization) {
|
|
183
203
|
let txMethod;
|
|
184
204
|
if (((_a = decodedTx.method) === null || _a === void 0 ? void 0 : _a.args).delegate) {
|
|
185
205
|
txMethod = decodedTx.method.args;
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
});
|
|
206
|
+
const delegateAddress = iface_utils_1.getDelegateAddress(txMethod);
|
|
207
|
+
const decodedAddress = keyring_1.decodeAddress(delegateAddress, false, this._registry.chainSS58);
|
|
208
|
+
const keypair = new keyPair_1.KeyPair({ pub: Buffer.from(decodedAddress).toString('hex') });
|
|
189
209
|
result.owner = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
190
210
|
}
|
|
191
211
|
else {
|
|
@@ -311,60 +331,218 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
311
331
|
isImmortalEra: utils_1.default.isZeroHex(this._dotTransaction.era),
|
|
312
332
|
});
|
|
313
333
|
if (this.type === sdk_core_1.TransactionType.Send) {
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
334
|
+
this.decodeInputsAndOutputsForSend(decodedTx);
|
|
335
|
+
}
|
|
336
|
+
else if (this.type === sdk_core_1.TransactionType.Batch) {
|
|
337
|
+
this.decodeInputsAndOutputsForBatch(decodedTx);
|
|
338
|
+
}
|
|
339
|
+
else if (this.type === sdk_core_1.TransactionType.StakingActivate) {
|
|
340
|
+
this.decodeInputsAndOutputsForBond(decodedTx);
|
|
341
|
+
}
|
|
342
|
+
else if (this.type === sdk_core_1.TransactionType.StakingUnlock) {
|
|
343
|
+
this.decodeInputsAndOutputsForUnbond(decodedTx);
|
|
344
|
+
}
|
|
345
|
+
else if (this.type === sdk_core_1.TransactionType.StakingWithdraw) {
|
|
346
|
+
this.decodeInputsAndOutputsForWithdrawUnbond(decodedTx);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
decodeInputsAndOutputsForSend(decodedTx) {
|
|
350
|
+
const txMethod = decodedTx.method.args;
|
|
351
|
+
let to;
|
|
352
|
+
let value;
|
|
353
|
+
let from;
|
|
354
|
+
if (utils_1.default.isProxyTransfer(txMethod)) {
|
|
355
|
+
const decodedCall = utils_1.default.decodeCallMethod(this._dotTransaction, {
|
|
356
|
+
metadataRpc: this._dotTransaction.metadataRpc,
|
|
357
|
+
registry: this._registry,
|
|
358
|
+
});
|
|
359
|
+
const keypairDest = new keyPair_1.KeyPair({
|
|
360
|
+
pub: Buffer.from(keyring_1.decodeAddress(decodedCall.dest.id)).toString('hex'),
|
|
361
|
+
});
|
|
362
|
+
const keypairFrom = new keyPair_1.KeyPair({
|
|
363
|
+
pub: Buffer.from(keyring_1.decodeAddress(iface_utils_1.getAddress(txMethod))).toString('hex'),
|
|
364
|
+
});
|
|
365
|
+
to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
366
|
+
value = `${decodedCall.value}`;
|
|
367
|
+
from = keypairFrom.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
368
|
+
}
|
|
369
|
+
else if (utils_1.default.isTransferAll(txMethod)) {
|
|
370
|
+
const keypairDest = new keyPair_1.KeyPair({
|
|
371
|
+
pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
|
|
372
|
+
});
|
|
373
|
+
to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
374
|
+
value = 'sweep';
|
|
375
|
+
from = decodedTx.address;
|
|
376
|
+
}
|
|
377
|
+
else if (utils_1.default.isTransfer(txMethod)) {
|
|
378
|
+
const keypairDest = new keyPair_1.KeyPair({
|
|
379
|
+
pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
|
|
380
|
+
});
|
|
381
|
+
to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
382
|
+
value = txMethod.value;
|
|
383
|
+
from = decodedTx.address;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
throw new sdk_core_1.ParseTransactionError(`Loading inputs of unknown Transfer type parameters`);
|
|
387
|
+
}
|
|
388
|
+
this._outputs = [
|
|
389
|
+
{
|
|
390
|
+
address: to,
|
|
391
|
+
value,
|
|
392
|
+
coin: this._coinConfig.name,
|
|
393
|
+
},
|
|
394
|
+
];
|
|
395
|
+
this._inputs = [
|
|
396
|
+
{
|
|
397
|
+
address: from,
|
|
398
|
+
value,
|
|
399
|
+
coin: this._coinConfig.name,
|
|
400
|
+
},
|
|
401
|
+
];
|
|
402
|
+
}
|
|
403
|
+
decodeInputsAndOutputsForBatch(decodedTx) {
|
|
404
|
+
const sender = decodedTx.address;
|
|
405
|
+
this._inputs = [];
|
|
406
|
+
this._outputs = [];
|
|
407
|
+
const txMethod = decodedTx.method.args;
|
|
408
|
+
if (utils_1.default.isStakingBatch(txMethod)) {
|
|
409
|
+
if (!txMethod.calls) {
|
|
410
|
+
throw new sdk_core_1.InvalidTransactionError('failed to decode calls from batch transaction');
|
|
332
411
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
|
|
338
|
-
value = 'sweep';
|
|
339
|
-
from = decodedTx.address;
|
|
412
|
+
const bondMethod = txMethod.calls[0].callIndex;
|
|
413
|
+
const decodedBondCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(bondMethod)));
|
|
414
|
+
if (decodedBondCall.section !== iface_1.SectionNames.Staking || decodedBondCall.method !== iface_1.MethodNames.Bond) {
|
|
415
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected first call to be bond.');
|
|
340
416
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
417
|
+
const addProxyMethod = txMethod.calls[1].callIndex;
|
|
418
|
+
const decodedAddProxyCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(addProxyMethod)));
|
|
419
|
+
if (decodedAddProxyCall.section !== iface_1.SectionNames.Proxy || decodedAddProxyCall.method !== iface_1.MethodNames.AddProxy) {
|
|
420
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected second call to be addProxy.');
|
|
421
|
+
}
|
|
422
|
+
const stakeArgs = txMethod.calls[0].args;
|
|
423
|
+
const addProxyArgs = txMethod.calls[1].args;
|
|
424
|
+
const bondValue = `${stakeArgs.value}`;
|
|
425
|
+
const proxyAddress = iface_utils_1.getDelegateAddress(addProxyArgs);
|
|
426
|
+
this._inputs.push({
|
|
427
|
+
address: sender,
|
|
428
|
+
value: bondValue,
|
|
429
|
+
coin: this._coinConfig.name,
|
|
430
|
+
});
|
|
431
|
+
this._outputs.push({
|
|
432
|
+
address: exports.STAKING_DESTINATION,
|
|
433
|
+
value: bondValue,
|
|
434
|
+
coin: this._coinConfig.name,
|
|
435
|
+
});
|
|
436
|
+
const addProxyCost = this.getAddProxyCost().toString(10);
|
|
437
|
+
this._inputs.push({
|
|
438
|
+
address: sender,
|
|
439
|
+
value: addProxyCost,
|
|
440
|
+
coin: this._coinConfig.name,
|
|
441
|
+
});
|
|
442
|
+
this._outputs.push({
|
|
443
|
+
address: proxyAddress,
|
|
444
|
+
value: addProxyCost,
|
|
445
|
+
coin: this._coinConfig.name,
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
else if (utils_1.default.isUnstakingBatch(txMethod)) {
|
|
449
|
+
if (!txMethod.calls) {
|
|
450
|
+
throw new sdk_core_1.InvalidTransactionError('failed to decode calls from batch transaction');
|
|
451
|
+
}
|
|
452
|
+
const removeProxyMethod = txMethod.calls[0].callIndex;
|
|
453
|
+
const decodedRemoveProxyCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(removeProxyMethod)));
|
|
454
|
+
if (decodedRemoveProxyCall.section !== iface_1.SectionNames.Proxy ||
|
|
455
|
+
decodedRemoveProxyCall.method !== iface_1.MethodNames.RemoveProxy) {
|
|
456
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected first call to be removeProxy.');
|
|
457
|
+
}
|
|
458
|
+
const chillMethod = txMethod.calls[1].callIndex;
|
|
459
|
+
const decodedChillCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(chillMethod)));
|
|
460
|
+
if (decodedChillCall.section !== iface_1.SectionNames.Staking || decodedChillCall.method !== iface_1.MethodNames.Chill) {
|
|
461
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected second call to be chill.');
|
|
462
|
+
}
|
|
463
|
+
const unstakeMethod = txMethod.calls[2].callIndex;
|
|
464
|
+
const decodedUnstakeCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(unstakeMethod)));
|
|
465
|
+
if (decodedUnstakeCall.section !== iface_1.SectionNames.Staking || decodedUnstakeCall.method !== iface_1.MethodNames.Unbond) {
|
|
466
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected third call to be unbond.');
|
|
467
|
+
}
|
|
468
|
+
const removeProxyArgs = txMethod.calls[0].args;
|
|
469
|
+
const proxyAddress = iface_utils_1.getDelegateAddress(removeProxyArgs);
|
|
470
|
+
const removeProxyCost = this.getRemoveProxyCost().toString(10);
|
|
471
|
+
this._inputs.push({
|
|
472
|
+
address: proxyAddress,
|
|
473
|
+
value: removeProxyCost,
|
|
474
|
+
coin: this._coinConfig.name,
|
|
475
|
+
});
|
|
476
|
+
this._outputs.push({
|
|
477
|
+
address: sender,
|
|
478
|
+
value: removeProxyCost,
|
|
479
|
+
coin: this._coinConfig.name,
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
getRemoveProxyCost() {
|
|
484
|
+
return this.getAddProxyCost();
|
|
485
|
+
}
|
|
486
|
+
getAddProxyCost() {
|
|
487
|
+
const proxyPallet = this._registry.metadata.pallets.find((p) => p.name.toString().toLowerCase() === iface_1.SectionNames.Proxy);
|
|
488
|
+
if (proxyPallet) {
|
|
489
|
+
const proxyDepositBase = this.getConstant('ProxyDepositBase', proxyPallet.constants);
|
|
490
|
+
const proxyDepositFactor = this.getConstant('ProxyDepositFactor', proxyPallet.constants);
|
|
491
|
+
return proxyDepositBase.plus(proxyDepositFactor);
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
const palletNames = this._registry.metadata.pallets.map((p) => p.name.toString().toLowerCase());
|
|
495
|
+
throw new Error(`Could not find ${iface_1.SectionNames.Proxy} pallet in [${palletNames}]`);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
getConstant(name, constants) {
|
|
499
|
+
const constant = constants.find((c) => c.name.toString() === name);
|
|
500
|
+
if (constant === undefined) {
|
|
501
|
+
const constantNames = constants.map((p) => p.name.toString());
|
|
502
|
+
throw new Error(`Could not find constant ${name} in [${constantNames}]`);
|
|
503
|
+
}
|
|
504
|
+
else {
|
|
505
|
+
// Convert from Little-Endian to Big-Endian
|
|
506
|
+
const valueBe = Buffer.from(constant.value.toU8a(true).reverse()).toString('hex');
|
|
507
|
+
return bignumber_js_1.default(valueBe, 16);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
decodeInputsAndOutputsForBond(decodedTx) {
|
|
511
|
+
const sender = decodedTx.address;
|
|
512
|
+
this._inputs = [];
|
|
513
|
+
this._outputs = [];
|
|
514
|
+
const txMethod = decodedTx.method.args;
|
|
515
|
+
if (decodedTx.method.pallet === iface_1.SectionNames.Staking) {
|
|
516
|
+
let bondValue = '0';
|
|
517
|
+
if (decodedTx.method.name === iface_1.MethodNames.Bond && utils_1.default.isBond(txMethod)) {
|
|
518
|
+
bondValue = txMethod.value;
|
|
519
|
+
}
|
|
520
|
+
else if (decodedTx.method.name === iface_1.MethodNames.BondExtra && utils_1.default.isBondExtra(txMethod)) {
|
|
521
|
+
bondValue = txMethod.maxAdditional;
|
|
348
522
|
}
|
|
349
523
|
else {
|
|
350
|
-
throw new sdk_core_1.ParseTransactionError(`Loading inputs of unknown
|
|
524
|
+
throw new sdk_core_1.ParseTransactionError(`Loading inputs of unknown StakingActivate type parameters`);
|
|
351
525
|
}
|
|
352
|
-
this.
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
value,
|
|
363
|
-
coin: this._coinConfig.name,
|
|
364
|
-
},
|
|
365
|
-
];
|
|
526
|
+
this._inputs.push({
|
|
527
|
+
address: sender,
|
|
528
|
+
value: bondValue,
|
|
529
|
+
coin: this._coinConfig.name,
|
|
530
|
+
});
|
|
531
|
+
this._outputs.push({
|
|
532
|
+
address: exports.STAKING_DESTINATION,
|
|
533
|
+
value: bondValue,
|
|
534
|
+
coin: this._coinConfig.name,
|
|
535
|
+
});
|
|
366
536
|
}
|
|
367
537
|
}
|
|
538
|
+
decodeInputsAndOutputsForUnbond(decodedTx) {
|
|
539
|
+
this._inputs = [];
|
|
540
|
+
this._outputs = [];
|
|
541
|
+
}
|
|
542
|
+
decodeInputsAndOutputsForWithdrawUnbond(decodedTx) {
|
|
543
|
+
this._inputs = [];
|
|
544
|
+
this._outputs = [];
|
|
545
|
+
}
|
|
368
546
|
/**
|
|
369
547
|
* Constructs a signed payload using construct.signTx
|
|
370
548
|
* This method will be called during the build step if a TSS signature
|
|
@@ -407,4 +585,5 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
407
585
|
}
|
|
408
586
|
}
|
|
409
587
|
exports.Transaction = Transaction;
|
|
410
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FTeUI7QUFFekIsNkRBQTJEO0FBQzNELHlDQUE2QztBQUM3QyxzRUFBa0U7QUFHbEUsdUNBQW9DO0FBZXBDLG9EQUE0QjtBQUU1QixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQU85QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBVztRQUN0QixNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQXFCLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsT0FBZ0I7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDbEU7UUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLHVCQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU0sY0FBYyxHQUFHLDhCQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3pCLENBQUMsQ0FBQztRQUNILDJFQUEyRTtRQUMzRSxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3ZGLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVc7WUFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3pCLENBQUMsQ0FBQztRQUVILGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsZUFBSyxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxTQUFpQjtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsZUFBSyxDQUFDLDBCQUEwQixDQUN4RCxJQUFJLENBQUMsZUFBZSxFQUNwQixTQUFTLEVBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQ2hDLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsUUFBc0I7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUFpQjtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ2hDO2FBQU07WUFDTCxPQUFPLDhCQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3BELFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUzthQUN6QixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTTs7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN6QixNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN4RDtRQUNELE1BQU0sU0FBUyxHQUFHLDJCQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUM3QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO1lBQzdDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN4QixhQUFhLEVBQUUsZUFBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztTQUN6RCxDQUF5QixDQUFDO1FBRTNCLE1BQU0sTUFBTSxHQUFXO1lBQ3JCLEVBQUUsRUFBRSw4QkFBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM5QyxNQUFNLEVBQUUsU0FBUyxDQUFDLE9BQU87WUFDekIsY0FBYyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQ25DLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztZQUNsQyxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7WUFDbEMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztZQUNsQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsa0JBQWtCO1lBQ2hELFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztZQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ25CLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssMEJBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDdEMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDdkMsSUFBSSxlQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFPLENBQUM7b0JBQzlCLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDL0QsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDdEcsTUFBTSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUNoRCxNQUFNLFdBQVcsR0FBRyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDL0QsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVztvQkFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO2lCQUN6QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBTyxDQUFDO29CQUM5QixHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2lCQUNyRSxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUNuRyxNQUFNLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7YUFDbkM7aUJBQU0sSUFBSSxlQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGlCQUFPLENBQUM7b0JBQzlCLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQ2xFLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ25HLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUNoQztpQkFBTSxJQUFJLGVBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQU8sQ0FBQztvQkFDOUIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDbEUsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQzthQUNwRztpQkFBTTtnQkFDTCxNQUFNLElBQUksZ0NBQXFCLENBQUMsOENBQThDLENBQUMsQ0FBQzthQUNqRjtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLDBCQUFlLENBQUMsZUFBZSxFQUFFO1lBQ2pELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBaUIsQ0FBQztZQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUM7Z0JBQzFCLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQ3pHLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQztZQUN2RyxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFFL0IsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQTBCLENBQUM7WUFDbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUNqQixNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUM7b0JBQzFCLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQ2hHLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBcUIsQ0FBQyxDQUFDLENBQUM7YUFDbkc7aUJBQU07Z0JBQ0wsTUFBTSxTQUFTLEdBQUcsZUFBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztnQkFDL0UsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7YUFDMUI7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSywwQkFBZSxDQUFDLHFCQUFxQixFQUFFO1lBQ3ZELElBQUksUUFBOEMsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBQSxTQUFTLENBQUMsTUFBTSwwQ0FBRSxJQUFxQixDQUFBLENBQUMsUUFBUSxFQUFFO2dCQUNyRCxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFvQixDQUFDO2dCQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUM7b0JBQzFCLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQ3BHLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBcUIsQ0FBQyxDQUFDLENBQUM7YUFDbkc7aUJBQU07Z0JBQ0wsUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBNkIsQ0FBQztnQkFDMUQsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQy9CO1lBQ0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM1QyxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDdEMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQy9CO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLDBCQUFlLENBQUMsYUFBYSxFQUFFO1lBQy9DLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBbUIsQ0FBQztZQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDaEM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssMEJBQWUsQ0FBQyxlQUFlLEVBQUU7WUFDakQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUE0QixDQUFDO1lBQy9ELE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7U0FDckQ7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssMEJBQWUsQ0FBQyxZQUFZLEVBQUU7WUFDOUMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFpQixDQUFDO1lBQ3BELE1BQU0sQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUNoRCxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7U0FDaEM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssMEJBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDdkMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFpQixDQUFDO1lBQ3BELE1BQU0sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNwQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFZLEVBQUUsaUJBQXlDOztRQUNoRixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9ELE9BQU87WUFDTCxHQUFHLGlCQUFpQjtZQUNwQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsT0FBTyxFQUFFLENBQUEsTUFBQSxJQUFJLENBQUMsRUFBRSwwQ0FBRSxRQUFRLEVBQUUsS0FBSSxFQUFFO29CQUNsQyxNQUFNLEVBQUUsQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLFFBQVEsRUFBRSxLQUFJLEVBQUU7aUJBQ3RDO2FBQ0Y7WUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQsaUNBQWlDLENBQUMsSUFBWSxFQUFFLGlCQUF5Qzs7UUFDdkYsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsR0FBRyxpQkFBaUI7WUFDcEIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLE9BQU8sRUFBRSxDQUFBLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsUUFBUSxFQUFFLEtBQUksRUFBRTtvQkFDMUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtpQkFDMUI7YUFDRjtZQUNELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCx1Q0FBdUMsQ0FDckMsSUFBWSxFQUNaLGlCQUF5QztRQUV6QyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsT0FBTztZQUNMLEdBQUcsaUJBQWlCO1lBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsK0JBQStCLENBQUMsSUFBWSxFQUFFLGlCQUF5QztRQUNyRixPQUFPO1lBQ0wsR0FBRyxpQkFBaUI7WUFDcEIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtpQkFDMUI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQjs7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE1BQU0sWUFBWSxHQUFHLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRyxNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO1FBQzNDLE1BQU0saUJBQWlCLEdBQTJCO1lBQ2hELDJDQUEyQztZQUMzQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDYixZQUFZO1lBQ1osWUFBWSxFQUFFLENBQUEsTUFBQSxNQUFNLENBQUMsTUFBTSwwQ0FBRSxRQUFRLEVBQUUsS0FBSSxHQUFHO1lBQzlDLFlBQVksRUFBRSxHQUFHO1lBQ2pCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLE9BQU87WUFDUCxHQUFHLEVBQUU7Z0JBQ0gsR0FBRyxFQUFFLENBQUEsTUFBQSxNQUFNLENBQUMsR0FBRywwQ0FBRSxRQUFRLEVBQUUsS0FBSSxFQUFFO2dCQUNqQyxJQUFJLEVBQUUsS0FBSzthQUNaO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUM7UUFDRixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakIsS0FBSywwQkFBZSxDQUFDLElBQUk7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3BFLEtBQUssMEJBQWUsQ0FBQyxlQUFlO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMzRSxLQUFLLDBCQUFlLENBQUMscUJBQXFCO2dCQUN4QyxPQUFPLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNqRixLQUFLLDBCQUFlLENBQUMsYUFBYTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDekU7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsT0FBTztTQUNSO1FBQ0QsTUFBTSxTQUFTLEdBQUcsMkJBQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzdDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVc7WUFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3hCLGFBQWEsRUFBRSxlQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO1NBQ3pELENBQXlCLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLDBCQUFlLENBQUMsSUFBSSxFQUFFO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksRUFBVSxDQUFDO1lBQ2YsSUFBSSxLQUFhLENBQUM7WUFDbEIsSUFBSSxJQUFZLENBQUM7WUFDakIsSUFBSSxlQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLFdBQVcsR0FBRyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDL0QsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVztvQkFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO2lCQUN6QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBTyxDQUFDO29CQUM5QixHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2lCQUNyRSxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBTyxDQUFDO29CQUM5QixHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7aUJBQy9ELENBQUMsQ0FBQztnQkFDSCxFQUFFLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDNUYsS0FBSyxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMvQixJQUFJLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQzthQUMvRjtpQkFBTSxJQUFJLGVBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQU8sQ0FBQztvQkFDOUIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDbEUsQ0FBQyxDQUFDO2dCQUNILEVBQUUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixLQUFLLEdBQUcsT0FBTyxDQUFDO2dCQUNoQixJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQzthQUMxQjtpQkFBTSxJQUFJLGVBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQU8sQ0FBQztvQkFDOUIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztpQkFDbEUsQ0FBQyxDQUFDO2dCQUNILEVBQUUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7YUFDdkY7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNkO29CQUNFLE9BQU8sRUFBRSxFQUFFO29CQUNYLEtBQUs7b0JBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtpQkFDNUI7YUFDRixDQUFDO1lBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRztnQkFDYjtvQkFDRSxPQUFPLEVBQUUsSUFBSTtvQkFDYixLQUFLO29CQUNMLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7aUJBQzVCO2FBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxzQkFBc0IsQ0FBQyxTQUFpQjtRQUN0QyxzQ0FBc0M7UUFDdEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFlLENBQUM7UUFFcEUsSUFBSTtZQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyw4QkFBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRTtnQkFDOUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO2FBQzlDLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksdUJBQVksQ0FBQyxpREFBaUQsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0Y7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxjQUFjLENBQUMsRUFBdUI7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLGVBQWU7UUFDakIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzNGLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87U0FDdEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxrQkFBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsZUFBZ0M7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBM1pELGtDQTJaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRG90QXNzZXRUeXBlcyxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBLZXlyaW5nLCB7IGRlY29kZUFkZHJlc3MgfSBmcm9tICdAcG9sa2Fkb3Qva2V5cmluZyc7XG5pbXBvcnQgeyB1OGFUb0J1ZmZlciB9IGZyb20gJ0Bwb2xrYWRvdC91dGlsJztcbmltcG9ydCB7IGNvbnN0cnVjdCwgZGVjb2RlIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgVW5zaWduZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZS9saWIvdHlwZXMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQge1xuICBBZGRBbm9ueW1vdXNQcm94eUFyZ3MsXG4gIEFkZFByb3h5QXJncyxcbiAgQmF0Y2hBcmdzLFxuICBDbGFpbUFyZ3MsXG4gIERlY29kZWRUeCxcbiAgSGV4U3RyaW5nLFxuICBTdGFrZUFyZ3MsXG4gIFN0YWtlQXJnc1BheWVlUmF3LFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBUeERhdGEsXG4gIFVuc3Rha2VBcmdzLFxuICBXaXRoZHJhd1Vuc3Rha2VkQXJncyxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfZG90VHJhbnNhY3Rpb246IFVuc2lnbmVkVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX3NpZ25lZFRyYW5zYWN0aW9uPzogc3RyaW5nO1xuICBwcml2YXRlIF9yZWdpc3RyeTogVHlwZVJlZ2lzdHJ5O1xuICBwcml2YXRlIF9jaGFpbk5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2VuZGVyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKHsga2V5IH06IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSk7XG4gICAgY29uc3QgYWRkciA9IGtwLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgIHJldHVybiBhZGRyID09PSB0aGlzLl9zZW5kZXI7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIHBvbGthZG90IHRyYW5zYWN0aW9uIGFuZCB1cGRhdGUgdGhlIHRyYW5zYWN0aW9uIGhleFxuICAgKlxuICAgKiBAcGFyYW0ge0tleVBhaXJ9IGtleVBhaXIgLSBlZCBzaWduYXR1cmVcbiAgICovXG4gIHNpZ24oa2V5UGFpcjogS2V5UGFpcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZG90VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignTm8gdHJhbnNhY3Rpb24gZGF0YSB0byBzaWduJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcHJ2LCBwdWIgfSA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25pbmdQYXlsb2FkID0gY29uc3RydWN0LnNpZ25pbmdQYXlsb2FkKHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgfSk7XG4gICAgLy8gU2lnbiBhIHBheWxvYWQuIFRoaXMgb3BlcmF0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gYW4gb2ZmbGluZSBkZXZpY2UuXG4gICAgY29uc3Qga2V5cmluZyA9IG5ldyBLZXlyaW5nKHsgdHlwZTogJ2VkMjU1MTknIH0pO1xuICAgIGNvbnN0IHNlY3JldEtleSA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShwdWIsICdoZXgnKSk7XG4gICAgY29uc3Qgc2lnbmluZ0tleVBhaXIgPSBrZXlyaW5nLmFkZEZyb21QYWlyKHsgc2VjcmV0S2V5LCBwdWJsaWNLZXkgfSk7XG4gICAgY29uc3QgdHhIZXggPSB1dGlscy5jcmVhdGVTaWduZWRUeChzaWduaW5nS2V5UGFpciwgc2lnbmluZ1BheWxvYWQsIHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgfSk7XG5cbiAgICAvLyBnZXQgc2lnbmF0dXJlIGZyb20gc2lnbmVkIHR4SGV4IGdlbmVyYXRlZCBhYm92ZVxuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbdXRpbHMucmVjb3ZlclNpZ25hdHVyZUZyb21SYXdUeCh0eEhleCwgeyByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnkgfSldO1xuICAgIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uID0gdHhIZXg7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgc2lnbmF0dXJlIHRvIHRoZSBET1QgVHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZVxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmVkVHJhbnNhY3Rpb24gPSB1dGlscy5zZXJpYWxpemVTaWduZWRUcmFuc2FjdGlvbihcbiAgICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uLFxuICAgICAgc2lnbmF0dXJlLFxuICAgICAgdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICB0aGlzLl9yZWdpc3RyeVxuICAgICk7XG4gIH1cblxuICByZWdpc3RyeShyZWdpc3RyeTogVHlwZVJlZ2lzdHJ5KTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgfVxuXG4gIGNoYWluTmFtZShjaGFpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYWluTmFtZSA9IGNoYWluTmFtZTtcbiAgfVxuXG4gIHNlbmRlcihzZW5kZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3NlbmRlciA9IHNlbmRlcjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fZG90VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uICYmIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdC5zaWduaW5nUGF5bG9hZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2FjdGlvblNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b0Jyb2FkY2FzdEZvcm1hdCgpLmxlbmd0aCAvIDI7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgIGlzSW1tb3J0YWxFcmE6IHV0aWxzLmlzWmVyb0hleCh0aGlzLl9kb3RUcmFuc2FjdGlvbi5lcmEpLFxuICAgIH0pIGFzIHVua25vd24gYXMgRGVjb2RlZFR4O1xuXG4gICAgY29uc3QgcmVzdWx0OiBUeERhdGEgPSB7XG4gICAgICBpZDogY29uc3RydWN0LnR4SGFzaCh0aGlzLnRvQnJvYWRjYXN0Rm9ybWF0KCkpLFxuICAgICAgc2VuZGVyOiBkZWNvZGVkVHguYWRkcmVzcyxcbiAgICAgIHJlZmVyZW5jZUJsb2NrOiBkZWNvZGVkVHguYmxvY2tIYXNoLFxuICAgICAgYmxvY2tOdW1iZXI6IGRlY29kZWRUeC5ibG9ja051bWJlcixcbiAgICAgIGdlbmVzaXNIYXNoOiBkZWNvZGVkVHguZ2VuZXNpc0hhc2gsXG4gICAgICBub25jZTogZGVjb2RlZFR4Lm5vbmNlLFxuICAgICAgc3BlY1ZlcnNpb246IGRlY29kZWRUeC5zcGVjVmVyc2lvbixcbiAgICAgIHRyYW5zYWN0aW9uVmVyc2lvbjogZGVjb2RlZFR4LnRyYW5zYWN0aW9uVmVyc2lvbixcbiAgICAgIGVyYVBlcmlvZDogZGVjb2RlZFR4LmVyYVBlcmlvZCxcbiAgICAgIGNoYWluTmFtZTogdGhpcy5fY2hhaW5OYW1lLFxuICAgICAgdGlwOiBkZWNvZGVkVHgudGlwLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3M7XG4gICAgICBpZiAodXRpbHMuaXNQcm94eVRyYW5zZmVyKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBrZXlwYWlyUmVhbCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QucmVhbCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5vd25lciA9IGtleXBhaXJSZWFsLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgICByZXN1bHQuZm9yY2VQcm94eVR5cGUgPSB0eE1ldGhvZC5mb3JjZVByb3h5VHlwZTtcbiAgICAgICAgY29uc3QgZGVjb2RlZENhbGwgPSB1dGlscy5kZWNvZGVDYWxsTWV0aG9kKHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyhkZWNvZGVkQ2FsbC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSBkZWNvZGVkQ2FsbC52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNUcmFuc2Zlcih0eE1ldGhvZCkpIHtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQudG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgcmVzdWx0LmFtb3VudCA9IHR4TWV0aG9kLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1RyYW5zZmVyQWxsKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC50byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgU2VyaWFsaXppbmcgdW5rbm93biBUcmFuc2ZlciB0eXBlIHBhcmFtZXRlcnNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyBTdGFrZUFyZ3M7XG4gICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QuY29udHJvbGxlci5pZCwgZmFsc2UsIHRoaXMuX3JlZ2lzdHJ5LmNoYWluU1M1OCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuY29udHJvbGxlciA9IGtleXBhaXIuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICByZXN1bHQuYW1vdW50ID0gdHhNZXRob2QudmFsdWU7XG5cbiAgICAgIGNvbnN0IHBheWVlID0gdHhNZXRob2QucGF5ZWUgYXMgU3Rha2VBcmdzUGF5ZWVSYXc7XG4gICAgICBpZiAocGF5ZWUuYWNjb3VudCkge1xuICAgICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyhwYXllZS5hY2NvdW50LCBmYWxzZSwgdGhpcy5fcmVnaXN0cnkuY2hhaW5TUzU4KSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnBheWVlID0ga2V5cGFpci5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBheWVlVHlwZSA9IHV0aWxzLmNhcGl0YWxpemVGaXJzdExldHRlcihPYmplY3Qua2V5cyhwYXllZSlbMF0pIGFzIHN0cmluZztcbiAgICAgICAgcmVzdWx0LnBheWVlID0gcGF5ZWVUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIGxldCB0eE1ldGhvZDogQWRkQW5vbnltb3VzUHJveHlBcmdzIHwgQWRkUHJveHlBcmdzO1xuICAgICAgaWYgKChkZWNvZGVkVHgubWV0aG9kPy5hcmdzIGFzIEFkZFByb3h5QXJncykuZGVsZWdhdGUpIHtcbiAgICAgICAgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQWRkUHJveHlBcmdzO1xuICAgICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZWxlZ2F0ZSwgZmFsc2UsIHRoaXMuX3JlZ2lzdHJ5LmNoYWluU1M1OCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5vd25lciA9IGtleXBhaXIuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyBBZGRBbm9ueW1vdXNQcm94eUFyZ3M7XG4gICAgICAgIHJlc3VsdC5pbmRleCA9IHR4TWV0aG9kLmluZGV4O1xuICAgICAgfVxuICAgICAgcmVzdWx0Lm1ldGhvZCA9IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGhvZDtcbiAgICAgIHJlc3VsdC5wcm94eVR5cGUgPSB0eE1ldGhvZC5wcm94eVR5cGU7XG4gICAgICByZXN1bHQuZGVsYXkgPSB0eE1ldGhvZC5kZWxheTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jaykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgVW5zdGFrZUFyZ3M7XG4gICAgICByZXN1bHQuYW1vdW50ID0gdHhNZXRob2QudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgV2l0aGRyYXdVbnN0YWtlZEFyZ3M7XG4gICAgICByZXN1bHQubnVtU2xhc2hpbmdTcGFucyA9IHR4TWV0aG9kLm51bVNsYXNoaW5nU3BhbnM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQ2xhaW1BcmdzO1xuICAgICAgcmVzdWx0LnZhbGlkYXRvclN0YXNoID0gdHhNZXRob2QudmFsaWRhdG9yU3Rhc2g7XG4gICAgICByZXN1bHQuY2xhaW1FcmEgPSB0eE1ldGhvZC5lcmE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkJhdGNoKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyBCYXRjaEFyZ3M7XG4gICAgICByZXN1bHQuYmF0Y2hDYWxscyA9IHR4TWV0aG9kLmNhbGxzO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBleHBsYWluVHJhbnNmZXJUcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgZXhwbGFuYXRpb25SZXN1bHQuZGlzcGxheU9yZGVyLnB1c2goJ293bmVyJywgJ2ZvcmNlUHJveHlUeXBlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczoganNvbi50bz8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBhbW91bnQ6IGpzb24uYW1vdW50Py50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG93bmVyOiBqc29uLm93bmVyLFxuICAgICAgZm9yY2VQcm94eVR5cGU6IGpzb24uZm9yY2VQcm94eVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIGV4cGxhaW5TdGFraW5nQWN0aXZhdGVUcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgZXhwbGFuYXRpb25SZXN1bHQuZGlzcGxheU9yZGVyLnB1c2goJ3BheWVlJywgJ2ZvcmNlUHJveHlUeXBlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczoganNvbi5jb250cm9sbGVyPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgIGFtb3VudDoganNvbi5hbW91bnQgfHwgJycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGF5ZWU6IGpzb24ucGF5ZWUsXG4gICAgICBmb3JjZVByb3h5VHlwZToganNvbi5mb3JjZVByb3h5VHlwZSxcbiAgICB9O1xuICB9XG5cbiAgZXhwbGFpbkFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKFxuICAgIGpzb246IFR4RGF0YSxcbiAgICBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICApOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBleHBsYW5hdGlvblJlc3VsdC5kaXNwbGF5T3JkZXIucHVzaCgnb3duZXInLCAncHJveHlUeXBlJywgJ2RlbGF5Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3duZXI6IGpzb24ub3duZXIsXG4gICAgICBwcm94eVR5cGU6IGpzb24ucHJveHlUeXBlLFxuICAgICAgZGVsYXk6IGpzb24uZGVsYXksXG4gICAgfTtcbiAgfVxuXG4gIGV4cGxhaW5TdGFraW5nVW5sb2NrVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGpzb24uc2VuZGVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgYW1vdW50OiBqc29uLmFtb3VudCB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgLy8gdHhoYXNoIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHRyYW5zYWN0aW9uc1xuICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIG91dHB1dEFtb3VudDogcmVzdWx0LmFtb3VudD8udG9TdHJpbmcoKSB8fCAnMCcsXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIGZlZToge1xuICAgICAgICBmZWU6IHJlc3VsdC50aXA/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgIHR5cGU6ICd0aXAnLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluVHJhbnNmZXJUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblN0YWtpbmdBY3RpdmF0ZVRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluU3Rha2luZ1VubG9ja1RyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RvdFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZSh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgaXNJbW1vcnRhbEVyYTogdXRpbHMuaXNaZXJvSGV4KHRoaXMuX2RvdFRyYW5zYWN0aW9uLmVyYSksXG4gICAgfSkgYXMgdW5rbm93biBhcyBEZWNvZGVkVHg7XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3M7XG4gICAgICBsZXQgdG86IHN0cmluZztcbiAgICAgIGxldCB2YWx1ZTogc3RyaW5nO1xuICAgICAgbGV0IGZyb206IHN0cmluZztcbiAgICAgIGlmICh1dGlscy5pc1Byb3h5VHJhbnNmZXIodHhNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRDYWxsID0gdXRpbHMuZGVjb2RlQ2FsbE1ldGhvZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MoZGVjb2RlZENhbGwuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtleXBhaXJGcm9tID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5yZWFsKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgdG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgdmFsdWUgPSBgJHtkZWNvZGVkQ2FsbC52YWx1ZX1gO1xuICAgICAgICBmcm9tID0ga2V5cGFpckZyb20uZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzVHJhbnNmZXJBbGwodHhNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgdG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgdmFsdWUgPSAnc3dlZXAnO1xuICAgICAgICBmcm9tID0gZGVjb2RlZFR4LmFkZHJlc3M7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzVHJhbnNmZXIodHhNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgdG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgdmFsdWUgPSB0eE1ldGhvZC52YWx1ZTtcbiAgICAgICAgZnJvbSA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgTG9hZGluZyBpbnB1dHMgb2YgdW5rbm93biBUcmFuc2ZlciB0eXBlIHBhcmFtZXRlcnNgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX291dHB1dHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiB0byxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBmcm9tLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBzaWduZWQgcGF5bG9hZCB1c2luZyBjb25zdHJ1Y3Quc2lnblR4XG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgYnVpbGQgc3RlcCBpZiBhIFRTUyBzaWduYXR1cmVcbiAgICogaXMgYWRkZWQgYW5kIHdpbGwgc2V0IHRoZSBzaWduVHJhbnNhY3Rpb24gd2hpY2ggaXMgdGhlIHR4SGV4IHRoYXQgd2lsbCBiZSBicm9hZGNhc3RlZFxuICAgKiBBcyB3ZWxsIGFzIGFkZCB0aGUgc2lnbmF0dXJlIHVzZWQgdG8gc2lnbiB0byB0aGUgc2lnbmF0dXJlIGFycmF5IGluIGhleCBmb3JtYXRcbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJ9IHNpZ25hdHVyZSBUaGUgc2lnbmF0dXJlIHRvIGJlIGFkZGVkIHRvIGEgZG90IHRyYW5zYWN0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RTaWduZWRQYXlsb2FkKHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgLy8gMHgwMCBtZWFucyBpdHMgYW4gRUQyNTUxOSBzaWduYXR1cmVcbiAgICBjb25zdCBlZFNpZ25hdHVyZSA9IGAweDAwJHtzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpfWAgYXMgSGV4U3RyaW5nO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uID0gY29uc3RydWN0LnNpZ25lZFR4KHRoaXMuX2RvdFRyYW5zYWN0aW9uLCBlZFNpZ25hdHVyZSwge1xuICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoYFVuYWJsZSB0byBzaWduIGRvdCB0cmFuc2FjdGlvbiB3aXRoIHNpZ25hdHVyZSAke2VkU2lnbmF0dXJlfSBgICsgZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpXTtcbiAgfVxuXG4gIHNldFRyYW5zYWN0aW9uKHR4OiBVbnNpZ25lZFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fZG90VHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIGNvbnN0IGV4dHJpbnNpY1BheWxvYWQgPSB0aGlzLl9yZWdpc3RyeS5jcmVhdGVUeXBlKCdFeHRyaW5zaWNQYXlsb2FkJywgdGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIHZlcnNpb246IHRoaXMuX2RvdFRyYW5zYWN0aW9uLnZlcnNpb24sXG4gICAgfSk7XG4gICAgcmV0dXJuIHU4YVRvQnVmZmVyKGV4dHJpbnNpY1BheWxvYWQudG9VOGEoeyBtZXRob2Q6IHRydWUgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG59XG4iXX0=
|
|
588
|
+
Transaction.FAKE_SIGNATURE = `0x${Buffer.from(new Uint8Array(256).fill(1)).toString('hex')}`;
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FVeUI7QUFFekIsNkRBQTBFO0FBQzFFLHlDQUE2QztBQUM3QyxzRUFBa0U7QUFHbEUsdUNBQW9DO0FBQ3BDLG1DQWlCaUI7QUFDakIsK0NBQStEO0FBQy9ELG9EQUE0QjtBQUM1QixnRUFBcUM7QUFJckM7OztHQUdHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyx1QkFBYSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7QUFFdkgsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFTOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsRUFBRSxHQUFHLEVBQVc7UUFDdEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLE9BQWdCO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNS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LEVBQUU7WUFDVixNQUFNLElBQUksdUJBQVksQ0FBQyxpREFBaUQsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0Y7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxjQUFjLENBQUMsRUFBdUI7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFJLGVBQWU7UUFDakIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzNGLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87U0FDdEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxrQkFBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsZUFBZ0M7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDL0IsQ0FBQzs7QUFqbUJILGtDQWttQkM7QUEzbEJnQiwwQkFBYyxHQUFHLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRG90QXNzZXRUeXBlcyxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICB0b1VpbnQ4QXJyYXksXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IEtleXJpbmcsIHsgZGVjb2RlQWRkcmVzcywgZW5jb2RlQWRkcmVzcyB9IGZyb20gJ0Bwb2xrYWRvdC9rZXlyaW5nJztcbmltcG9ydCB7IHU4YVRvQnVmZmVyIH0gZnJvbSAnQHBvbGthZG90L3V0aWwnO1xuaW1wb3J0IHsgY29uc3RydWN0LCBkZWNvZGUgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgeyBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBUeXBlUmVnaXN0cnkgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlL2xpYi90eXBlcyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7XG4gIEFkZEFub255bW91c1Byb3h5QXJncyxcbiAgQWRkUHJveHlBcmdzLFxuICBBZGRQcm94eUJhdGNoQ2FsbEFyZ3MsXG4gIEJhdGNoQXJncyxcbiAgQmF0Y2hDYWxsT2JqZWN0LFxuICBDbGFpbUFyZ3MsXG4gIERlY29kZWRUeCxcbiAgSGV4U3RyaW5nLFxuICBNZXRob2ROYW1lcyxcbiAgU2VjdGlvbk5hbWVzLFxuICBTdGFrZUFyZ3NQYXllZVJhdyxcbiAgU3Rha2VCYXRjaENhbGxBcmdzLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBUeERhdGEsXG4gIFVuc3Rha2VBcmdzLFxuICBXaXRoZHJhd1Vuc3Rha2VkQXJncyxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBnZXRBZGRyZXNzLCBnZXREZWxlZ2F0ZUFkZHJlc3MgfSBmcm9tICcuL2lmYWNlX3V0aWxzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFZlYyB9IGZyb20gJ0Bwb2xrYWRvdC90eXBlcyc7XG5pbXBvcnQgeyBQYWxsZXRDb25zdGFudE1ldGFkYXRhVjE0IH0gZnJvbSAnQHBvbGthZG90L3R5cGVzL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIFVzZSBhIGR1bW15IGFkZHJlc3MgYXMgdGhlIGRlc3RpbmF0aW9uIG9mIGEgYm9uZCBvciBib25kRXh0cmEgYmVjYXVzZSBvdXIgaW5wdXRzIGFuZCBvdXRwdXRzIG1vZGVsXG4gKiBkb2Vzbid0IHNlZW0gdG8gaGFuZGxlIHRoZSBjb25jZXB0IG9mIGxvY2tpbmcgZnVuZHMgd2l0aGluIGEgd2FsbGV0IGFzIGEgbWV0aG9kIG9mIHRyYW5zZmVycmluZyBjb2lucy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQUtJTkdfREVTVElOQVRJT04gPSBlbmNvZGVBZGRyZXNzKCcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnKTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9kb3RUcmFuc2FjdGlvbjogVW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmVkVHJhbnNhY3Rpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3JlZ2lzdHJ5OiBUeXBlUmVnaXN0cnk7XG4gIHByaXZhdGUgX2NoYWluTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9zZW5kZXI6IHN0cmluZztcblxuICBwcml2YXRlIHN0YXRpYyBGQUtFX1NJR05BVFVSRSA9IGAweCR7QnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoMjU2KS5maWxsKDEpKS50b1N0cmluZygnaGV4Jyl9YDtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oeyBrZXkgfTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICBjb25zdCBhZGRyID0ga3AuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgcmV0dXJuIGFkZHIgPT09IHRoaXMuX3NlbmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgcG9sa2Fkb3QgdHJhbnNhY3Rpb24gYW5kIHVwZGF0ZSB0aGUgdHJhbnNhY3Rpb24gaGV4XG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciAtIGVkIHNpZ25hdHVyZVxuICAgKi9cbiAgc2lnbihrZXlQYWlyOiBLZXlQYWlyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdObyB0cmFuc2FjdGlvbiBkYXRhIHRvIHNpZ24nKTtcbiAgICB9XG4gICAgY29uc3QgeyBwcnYsIHB1YiB9ID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgaWYgKCFwcnYpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmluZ1BheWxvYWQgPSBjb25zdHJ1Y3Quc2lnbmluZ1BheWxvYWQodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICB9KTtcbiAgICAvLyBTaWduIGEgcGF5bG9hZC4gVGhpcyBvcGVyYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiBhbiBvZmZsaW5lIGRldmljZS5cbiAgICBjb25zdCBrZXlyaW5nID0gbmV3IEtleXJpbmcoeyB0eXBlOiAnZWQyNTUxOScgfSk7XG4gICAgY29uc3Qgc2VjcmV0S2V5ID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgICBjb25zdCBzaWduaW5nS2V5UGFpciA9IGtleXJpbmcuYWRkRnJvbVBhaXIoeyBzZWNyZXRLZXksIHB1YmxpY0tleSB9KTtcbiAgICBjb25zdCB0eEhleCA9IHV0aWxzLmNyZWF0ZVNpZ25lZFR4KHNpZ25pbmdLZXlQYWlyLCBzaWduaW5nUGF5bG9hZCwgdGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICB9KTtcblxuICAgIC8vIGdldCBzaWduYXR1cmUgZnJvbSBzaWduZWQgdHhIZXggZ2VuZXJhdGVkIGFib3ZlXG4gICAgdGhpcy5fc2lnbmF0dXJlcyA9IFt1dGlscy5yZWNvdmVyU2lnbmF0dXJlRnJvbVJhd1R4KHR4SGV4LCB7IHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSB9KV07XG4gICAgdGhpcy5fc2lnbmVkVHJhbnNhY3Rpb24gPSB0eEhleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBzaWduYXR1cmUgdG8gdGhlIERPVCBUcmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG4gICAqL1xuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbiA9IHV0aWxzLnNlcmlhbGl6ZVNpZ25lZFRyYW5zYWN0aW9uKFxuICAgICAgdGhpcy5fZG90VHJhbnNhY3Rpb24sXG4gICAgICBzaWduYXR1cmUsXG4gICAgICB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHRoaXMuX3JlZ2lzdHJ5XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2VyaWFsaXplZCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRyYW5zYWN0aW9uIHdpdGggYSBmYWtlIHNpZ25hdHVyZSBhdHRhY2hlZCB3aGljaFxuICAgKiBjYW4gYmUgdXNlZCB0byBlc3RpbWF0ZSB0cmFuc2FjdGlvbiBmZWVzLlxuICAgKi9cbiAgZmFrZVNpZ24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXRpbHMuc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICB0aGlzLl9kb3RUcmFuc2FjdGlvbixcbiAgICAgIFRyYW5zYWN0aW9uLkZBS0VfU0lHTkFUVVJFLFxuICAgICAgdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICB0aGlzLl9yZWdpc3RyeVxuICAgICk7XG4gIH1cblxuICByZWdpc3RyeShyZWdpc3RyeTogVHlwZVJlZ2lzdHJ5KTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgfVxuXG4gIGNoYWluTmFtZShjaGFpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYWluTmFtZSA9IGNoYWluTmFtZTtcbiAgfVxuXG4gIHNlbmRlcihzZW5kZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3NlbmRlciA9IHNlbmRlcjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fZG90VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uICYmIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdC5zaWduaW5nUGF5bG9hZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2FjdGlvblNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b0Jyb2FkY2FzdEZvcm1hdCgpLmxlbmd0aCAvIDI7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgIGlzSW1tb3J0YWxFcmE6IHV0aWxzLmlzWmVyb0hleCh0aGlzLl9kb3RUcmFuc2FjdGlvbi5lcmEpLFxuICAgIH0pIGFzIHVua25vd24gYXMgRGVjb2RlZFR4O1xuXG4gICAgY29uc3QgcmVzdWx0OiBUeERhdGEgPSB7XG4gICAgICBpZDogY29uc3RydWN0LnR4SGFzaCh0aGlzLnRvQnJvYWRjYXN0Rm9ybWF0KCkpLFxuICAgICAgc2VuZGVyOiBkZWNvZGVkVHguYWRkcmVzcyxcbiAgICAgIHJlZmVyZW5jZUJsb2NrOiBkZWNvZGVkVHguYmxvY2tIYXNoLFxuICAgICAgYmxvY2tOdW1iZXI6IGRlY29kZWRUeC5ibG9ja051bWJlcixcbiAgICAgIGdlbmVzaXNIYXNoOiBkZWNvZGVkVHguZ2VuZXNpc0hhc2gsXG4gICAgICBub25jZTogZGVjb2RlZFR4Lm5vbmNlLFxuICAgICAgc3BlY1ZlcnNpb246IGRlY29kZWRUeC5zcGVjVmVyc2lvbixcbiAgICAgIHRyYW5zYWN0aW9uVmVyc2lvbjogZGVjb2RlZFR4LnRyYW5zYWN0aW9uVmVyc2lvbixcbiAgICAgIGVyYVBlcmlvZDogZGVjb2RlZFR4LmVyYVBlcmlvZCxcbiAgICAgIGNoYWluTmFtZTogdGhpcy5fY2hhaW5OYW1lLFxuICAgICAgdGlwOiBkZWNvZGVkVHgudGlwLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3M7XG4gICAgICBpZiAodXRpbHMuaXNQcm94eVRyYW5zZmVyKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBrZXlwYWlyUmVhbCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MoZ2V0QWRkcmVzcyh0eE1ldGhvZCkpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub3duZXIgPSBrZXlwYWlyUmVhbC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgcmVzdWx0LmZvcmNlUHJveHlUeXBlID0gdHhNZXRob2QuZm9yY2VQcm94eVR5cGU7XG4gICAgICAgIGNvbnN0IGRlY29kZWRDYWxsID0gdXRpbHMuZGVjb2RlQ2FsbE1ldGhvZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MoZGVjb2RlZENhbGwuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC50byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gZGVjb2RlZENhbGwudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzVHJhbnNmZXIodHhNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSB0eE1ldGhvZC52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNUcmFuc2ZlckFsbCh0eE1ldGhvZCkpIHtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQudG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoYFNlcmlhbGl6aW5nIHVua25vd24gVHJhbnNmZXIgdHlwZSBwYXJhbWV0ZXJzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3M7XG4gICAgICBpZiAodXRpbHMuaXNCb25kKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5jb250cm9sbGVyLmlkLCBmYWxzZSwgdGhpcy5fcmVnaXN0cnkuY2hhaW5TUzU4KSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXN1bHQuY29udHJvbGxlciA9IGtleXBhaXIuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSB0eE1ldGhvZC52YWx1ZTtcblxuICAgICAgICBjb25zdCBwYXllZSA9IHR4TWV0aG9kLnBheWVlIGFzIFN0YWtlQXJnc1BheWVlUmF3O1xuICAgICAgICBpZiAocGF5ZWUuYWNjb3VudCkge1xuICAgICAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MocGF5ZWUuYWNjb3VudCwgZmFsc2UsIHRoaXMuX3JlZ2lzdHJ5LmNoYWluU1M1OCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXN1bHQucGF5ZWUgPSBrZXlwYWlyLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBheWVlVHlwZSA9IHV0aWxzLmNhcGl0YWxpemVGaXJzdExldHRlcihPYmplY3Qua2V5cyhwYXllZSlbMF0pIGFzIHN0cmluZztcbiAgICAgICAgICByZXN1bHQucGF5ZWUgPSBwYXllZVR5cGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNCb25kRXh0cmEoZGVjb2RlZFR4Lm1ldGhvZC5hcmdzKSkge1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzLm1heEFkZGl0aW9uYWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbikge1xuICAgICAgbGV0IHR4TWV0aG9kOiBBZGRBbm9ueW1vdXNQcm94eUFyZ3MgfCBBZGRQcm94eUFyZ3M7XG4gICAgICBpZiAoKGRlY29kZWRUeC5tZXRob2Q/LmFyZ3MgYXMgQWRkUHJveHlBcmdzKS5kZWxlZ2F0ZSkge1xuICAgICAgICB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyBBZGRQcm94eUFyZ3M7XG4gICAgICAgIGNvbnN0IGRlbGVnYXRlQWRkcmVzcyA9IGdldERlbGVnYXRlQWRkcmVzcyh0eE1ldGhvZCk7XG4gICAgICAgIGNvbnN0IGRlY29kZWRBZGRyZXNzID0gZGVjb2RlQWRkcmVzcyhkZWxlZ2F0ZUFkZHJlc3MsIGZhbHNlLCB0aGlzLl9yZWdpc3RyeS5jaGFpblNTNTgpO1xuICAgICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZWRBZGRyZXNzKS50b1N0cmluZygnaGV4JykgfSk7XG4gICAgICAgIHJlc3VsdC5vd25lciA9IGtleXBhaXIuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyBBZGRBbm9ueW1vdXNQcm94eUFyZ3M7XG4gICAgICAgIHJlc3VsdC5pbmRleCA9IHR4TWV0aG9kLmluZGV4O1xuICAgICAgfVxuICAgICAgcmVzdWx0Lm1ldGhvZCA9IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGhvZDtcbiAgICAgIHJlc3VsdC5wcm94eVR5cGUgPSB0eE1ldGhvZC5wcm94eVR5cGU7XG4gICAgICByZXN1bHQuZGVsYXkgPSB0eE1ldGhvZC5kZWxheTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jaykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgVW5zdGFrZUFyZ3M7XG4gICAgICByZXN1bHQuYW1vdW50ID0gdHhNZXRob2QudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgV2l0aGRyYXdVbnN0YWtlZEFyZ3M7XG4gICAgICByZXN1bHQubnVtU2xhc2hpbmdTcGFucyA9IHR4TWV0aG9kLm51bVNsYXNoaW5nU3BhbnM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdDbGFpbSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQ2xhaW1BcmdzO1xuICAgICAgcmVzdWx0LnZhbGlkYXRvclN0YXNoID0gdHhNZXRob2QudmFsaWRhdG9yU3Rhc2g7XG4gICAgICByZXN1bHQuY2xhaW1FcmEgPSB0eE1ldGhvZC5lcmE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkJhdGNoKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyBCYXRjaEFyZ3M7XG4gICAgICByZXN1bHQuYmF0Y2hDYWxscyA9IHR4TWV0aG9kLmNhbGxzO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBleHBsYWluVHJhbnNmZXJUcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgZXhwbGFuYXRpb25SZXN1bHQuZGlzcGxheU9yZGVyLnB1c2goJ293bmVyJywgJ2ZvcmNlUHJveHlUeXBlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczoganNvbi50bz8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBhbW91bnQ6IGpzb24uYW1vdW50Py50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG93bmVyOiBqc29uLm93bmVyLFxuICAgICAgZm9yY2VQcm94eVR5cGU6IGpzb24uZm9yY2VQcm94eVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIGV4cGxhaW5TdGFraW5nQWN0aXZhdGVUcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgZXhwbGFuYXRpb25SZXN1bHQuZGlzcGxheU9yZGVyLnB1c2goJ3BheWVlJywgJ2ZvcmNlUHJveHlUeXBlJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczoganNvbi5jb250cm9sbGVyPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgIGFtb3VudDoganNvbi5hbW91bnQgfHwgJycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGF5ZWU6IGpzb24ucGF5ZWUsXG4gICAgICBmb3JjZVByb3h5VHlwZToganNvbi5mb3JjZVByb3h5VHlwZSxcbiAgICB9O1xuICB9XG5cbiAgZXhwbGFpbkFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKFxuICAgIGpzb246IFR4RGF0YSxcbiAgICBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICApOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBleHBsYW5hdGlvblJlc3VsdC5kaXNwbGF5T3JkZXIucHVzaCgnb3duZXInLCAncHJveHlUeXBlJywgJ2RlbGF5Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgb3duZXI6IGpzb24ub3duZXIsXG4gICAgICBwcm94eVR5cGU6IGpzb24ucHJveHlUeXBlLFxuICAgICAgZGVsYXk6IGpzb24uZGVsYXksXG4gICAgfTtcbiAgfVxuXG4gIGV4cGxhaW5TdGFraW5nVW5sb2NrVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGpzb24uc2VuZGVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgYW1vdW50OiBqc29uLmFtb3VudCB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2ZlZScsICd0eXBlJ107XG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFtdO1xuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgLy8gdHhoYXNoIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHRyYW5zYWN0aW9uc1xuICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIG91dHB1dEFtb3VudDogcmVzdWx0LmFtb3VudD8udG9TdHJpbmcoKSB8fCAnMCcsXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIGZlZToge1xuICAgICAgICBmZWU6IHJlc3VsdC50aXA/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgIHR5cGU6ICd0aXAnLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluVHJhbnNmZXJUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblN0YWtpbmdBY3RpdmF0ZVRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluU3Rha2luZ1VubG9ja1RyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RvdFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZSh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgaXNJbW1vcnRhbEVyYTogdXRpbHMuaXNaZXJvSGV4KHRoaXMuX2RvdFRyYW5zYWN0aW9uLmVyYSksXG4gICAgfSkgYXMgdW5rbm93biBhcyBEZWNvZGVkVHg7XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgdGhpcy5kZWNvZGVJbnB1dHNBbmRPdXRwdXRzRm9yU2VuZChkZWNvZGVkVHgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQmF0Y2gpIHtcbiAgICAgIHRoaXMuZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvckJhdGNoKGRlY29kZWRUeCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpIHtcbiAgICAgIHRoaXMuZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvckJvbmQoZGVjb2RlZFR4KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2spIHtcbiAgICAgIHRoaXMuZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvclVuYm9uZChkZWNvZGVkVHgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KSB7XG4gICAgICB0aGlzLmRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JXaXRoZHJhd1VuYm9uZChkZWNvZGVkVHgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvclNlbmQoZGVjb2RlZFR4OiBEZWNvZGVkVHgpIHtcbiAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncztcbiAgICBsZXQgdG86IHN0cmluZztcbiAgICBsZXQgdmFsdWU6IHN0cmluZztcbiAgICBsZXQgZnJvbTogc3RyaW5nO1xuICAgIGlmICh1dGlscy5pc1Byb3h5VHJhbnNmZXIodHhNZXRob2QpKSB7XG4gICAgICBjb25zdCBkZWNvZGVkQ2FsbCA9IHV0aWxzLmRlY29kZUNhbGxNZXRob2QodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MoZGVjb2RlZENhbGwuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qga2V5cGFpckZyb20gPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyhnZXRBZGRyZXNzKHR4TWV0aG9kKSkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pO1xuICAgICAgdG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgIHZhbHVlID0gYCR7ZGVjb2RlZENhbGwudmFsdWV9YDtcbiAgICAgIGZyb20gPSBrZXlwYWlyRnJvbS5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzVHJhbnNmZXJBbGwodHhNZXRob2QpKSB7XG4gICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KTtcbiAgICAgIHRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICB2YWx1ZSA9ICdzd2VlcCc7XG4gICAgICBmcm9tID0gZGVjb2RlZFR4LmFkZHJlc3M7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1RyYW5zZmVyKHR4TWV0aG9kKSkge1xuICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSk7XG4gICAgICB0byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgdmFsdWUgPSB0eE1ldGhvZC52YWx1ZTtcbiAgICAgIGZyb20gPSBkZWNvZGVkVHguYWRkcmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgTG9hZGluZyBpbnB1dHMgb2YgdW5rbm93biBUcmFuc2ZlciB0eXBlIHBhcmFtZXRlcnNgKTtcbiAgICB9XG4gICAgdGhpcy5fb3V0cHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdG8sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IGZyb20sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JCYXRjaChkZWNvZGVkVHg6IERlY29kZWRUeCkge1xuICAgIGNvbnN0IHNlbmRlciA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICAgIHRoaXMuX291dHB1dHMgPSBbXTtcblxuICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzO1xuICAgIGlmICh1dGlscy5pc1N0YWtpbmdCYXRjaCh0eE1ldGhvZCkpIHtcbiAgICAgIGlmICghdHhNZXRob2QuY2FsbHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdmYWlsZWQgdG8gZGVjb2RlIGNhbGxzIGZyb20gYmF0Y2ggdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9uZE1ldGhvZCA9ICh0eE1ldGhvZC5jYWxsc1swXSBhcyBCYXRjaENhbGxPYmplY3QpLmNhbGxJbmRleDtcbiAgICAgIGNvbnN0IGRlY29kZWRCb25kQ2FsbCA9IHRoaXMuX3JlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh0b1VpbnQ4QXJyYXkodXRpbHMuc3RyaXBIZXhQcmVmaXgoYm9uZE1ldGhvZCkpKTtcbiAgICAgIGlmIChkZWNvZGVkQm9uZENhbGwuc2VjdGlvbiAhPT0gU2VjdGlvbk5hbWVzLlN0YWtpbmcgfHwgZGVjb2RlZEJvbmRDYWxsLm1ldGhvZCAhPT0gTWV0aG9kTmFtZXMuQm9uZCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgYmF0Y2ggdHJhbnNhY3Rpb24sIG9ubHkgc3Rha2luZyBiYXRjaCBjYWxscyBhcmUgc3VwcG9ydGVkLCBleHBlY3RlZCBmaXJzdCBjYWxsIHRvIGJlIGJvbmQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgYWRkUHJveHlNZXRob2QgPSAodHhNZXRob2QuY2FsbHNbMV0gYXMgQmF0Y2hDYWxsT2JqZWN0KS5jYWxsSW5kZXg7XG4gICAgICBjb25zdCBkZWNvZGVkQWRkUHJveHlDYWxsID0gdGhpcy5fcmVnaXN0cnkuZmluZE1ldGFDYWxsKHRvVWludDhBcnJheSh1dGlscy5zdHJpcEhleFByZWZpeChhZGRQcm94eU1ldGhvZCkpKTtcbiAgICAgIGlmIChkZWNvZGVkQWRkUHJveHlDYWxsLnNlY3Rpb24gIT09IFNlY3Rpb25OYW1lcy5Qcm94eSB8fCBkZWNvZGVkQWRkUHJveHlDYWxsLm1ldGhvZCAhPT0gTWV0aG9kTmFtZXMuQWRkUHJveHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdJbnZhbGlkIGJhdGNoIHRyYW5zYWN0aW9uLCBvbmx5IHN0YWtpbmcgYmF0Y2ggY2FsbHMgYXJlIHN1cHBvcnRlZCwgZXhwZWN0ZWQgc2Vjb25kIGNhbGwgdG8gYmUgYWRkUHJveHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFrZUFyZ3MgPSB0eE1ldGhvZC5jYWxsc1swXS5hcmdzIGFzIFN0YWtlQmF0Y2hDYWxsQXJncztcbiAgICAgIGNvbnN0IGFkZFByb3h5QXJncyA9IHR4TWV0aG9kLmNhbGxzWzFdLmFyZ3MgYXMgQWRkUHJveHlCYXRjaENhbGxBcmdzO1xuICAgICAgY29uc3QgYm9uZFZhbHVlID0gYCR7c3Rha2VBcmdzLnZhbHVlfWA7XG4gICAgICBjb25zdCBwcm94eUFkZHJlc3MgPSBnZXREZWxlZ2F0ZUFkZHJlc3MoYWRkUHJveHlBcmdzKTtcblxuICAgICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBzZW5kZXIsXG4gICAgICAgIHZhbHVlOiBib25kVmFsdWUsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogU1RBS0lOR19ERVNUSU5BVElPTixcbiAgICAgICAgdmFsdWU6IGJvbmRWYWx1ZSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZFByb3h5Q29zdCA9IHRoaXMuZ2V0QWRkUHJveHlDb3N0KCkudG9TdHJpbmcoMTApO1xuICAgICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBzZW5kZXIsXG4gICAgICAgIHZhbHVlOiBhZGRQcm94eUNvc3QsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogcHJveHlBZGRyZXNzLFxuICAgICAgICB2YWx1ZTogYWRkUHJveHlDb3N0LFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzVW5zdGFraW5nQmF0Y2godHhNZXRob2QpKSB7XG4gICAgICBpZiAoIXR4TWV0aG9kLmNhbGxzKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZmFpbGVkIHRvIGRlY29kZSBjYWxscyBmcm9tIGJhdGNoIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbW92ZVByb3h5TWV0aG9kID0gKHR4TWV0aG9kLmNhbGxzWzBdIGFzIEJhdGNoQ2FsbE9iamVjdCkuY2FsbEluZGV4O1xuICAgICAgY29uc3QgZGVjb2RlZFJlbW92ZVByb3h5Q2FsbCA9IHRoaXMuX3JlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh0b1VpbnQ4QXJyYXkodXRpbHMuc3RyaXBIZXhQcmVmaXgocmVtb3ZlUHJveHlNZXRob2QpKSk7XG4gICAgICBpZiAoXG4gICAgICAgIGRlY29kZWRSZW1vdmVQcm94eUNhbGwuc2VjdGlvbiAhPT0gU2VjdGlvbk5hbWVzLlByb3h5IHx8XG4gICAgICAgIGRlY29kZWRSZW1vdmVQcm94eUNhbGwubWV0aG9kICE9PSBNZXRob2ROYW1lcy5SZW1vdmVQcm94eVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAnSW52YWxpZCBiYXRjaCB0cmFuc2FjdGlvbiwgb25seSBzdGFraW5nIGJhdGNoIGNhbGxzIGFyZSBzdXBwb3J0ZWQsIGV4cGVjdGVkIGZpcnN0IGNhbGwgdG8gYmUgcmVtb3ZlUHJveHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGxNZXRob2QgPSAodHhNZXRob2QuY2FsbHNbMV0gYXMgQmF0Y2hDYWxsT2JqZWN0KS5jYWxsSW5kZXg7XG4gICAgICBjb25zdCBkZWNvZGVkQ2hpbGxDYWxsID0gdGhpcy5fcmVnaXN0cnkuZmluZE1ldGFDYWxsKHRvVWludDhBcnJheSh1dGlscy5zdHJpcEhleFByZWZpeChjaGlsbE1ldGhvZCkpKTtcbiAgICAgIGlmIChkZWNvZGVkQ2hpbGxDYWxsLnNlY3Rpb24gIT09IFNlY3Rpb25OYW1lcy5TdGFraW5nIHx8IGRlY29kZWRDaGlsbENhbGwubWV0aG9kICE9PSBNZXRob2ROYW1lcy5DaGlsbCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgYmF0Y2ggdHJhbnNhY3Rpb24sIG9ubHkgc3Rha2luZyBiYXRjaCBjYWxscyBhcmUgc3VwcG9ydGVkLCBleHBlY3RlZCBzZWNvbmQgY2FsbCB0byBiZSBjaGlsbC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCB1bnN0YWtlTWV0aG9kID0gKHR4TWV0aG9kLmNhbGxzWzJdIGFzIEJhdGNoQ2FsbE9iamVjdCkuY2FsbEluZGV4O1xuICAgICAgY29uc3QgZGVjb2RlZFVuc3Rha2VDYWxsID0gdGhpcy5fcmVnaXN0cnkuZmluZE1ldGFDYWxsKHRvVWludDhBcnJheSh1dGlscy5zdHJpcEhleFByZWZpeCh1bnN0YWtlTWV0aG9kKSkpO1xuICAgICAgaWYgKGRlY29kZWRVbnN0YWtlQ2FsbC5zZWN0aW9uICE9PSBTZWN0aW9uTmFtZXMuU3Rha2luZyB8fCBkZWNvZGVkVW5zdGFrZUNhbGwubWV0aG9kICE9PSBNZXRob2ROYW1lcy5VbmJvbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdJbnZhbGlkIGJhdGNoIHRyYW5zYWN0aW9uLCBvbmx5IHN0YWtpbmcgYmF0Y2ggY2FsbHMgYXJlIHN1cHBvcnRlZCwgZXhwZWN0ZWQgdGhpcmQgY2FsbCB0byBiZSB1bmJvbmQuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZW1vdmVQcm94eUFyZ3MgPSB0eE1ldGhvZC5jYWxsc1swXS5hcmdzIGFzIEFkZFByb3h5QmF0Y2hDYWxsQXJncztcbiAgICAgIGNvbnN0IHByb3h5QWRkcmVzcyA9IGdldERlbGVnYXRlQWRkcmVzcyhyZW1vdmVQcm94eUFyZ3MpO1xuXG4gICAgICBjb25zdCByZW1vdmVQcm94eUNvc3QgPSB0aGlzLmdldFJlbW92ZVByb3h5Q29zdCgpLnRvU3RyaW5nKDEwKTtcbiAgICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogcHJveHlBZGRyZXNzLFxuICAgICAgICB2YWx1ZTogcmVtb3ZlUHJveHlDb3N0LFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHNlbmRlcixcbiAgICAgICAgdmFsdWU6IHJlbW92ZVByb3h5Q29zdCxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdmVQcm94eUNvc3QoKTogQmlnTnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBZGRQcm94eUNvc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWRkUHJveHlDb3N0KCk6IEJpZ051bWJlciB7XG4gICAgY29uc3QgcHJveHlQYWxsZXQgPSB0aGlzLl9yZWdpc3RyeS5tZXRhZGF0YS5wYWxsZXRzLmZpbmQoXG4gICAgICAocCkgPT4gcC5uYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gU2VjdGlvbk5hbWVzLlByb3h5XG4gICAgKTtcbiAgICBpZiAocHJveHlQYWxsZXQpIHtcbiAgICAgIGNvbnN0IHByb3h5RGVwb3NpdEJhc2UgPSB0aGlzLmdldENvbnN0YW50KCdQcm94eURlcG9zaXRCYXNlJywgcHJveHlQYWxsZXQuY29uc3RhbnRzKTtcbiAgICAgIGNvbnN0IHByb3h5RGVwb3NpdEZhY3RvciA9IHRoaXMuZ2V0Q29uc3RhbnQoJ1Byb3h5RGVwb3NpdEZhY3RvcicsIHByb3h5UGFsbGV0LmNvbnN0YW50cyk7XG4gICAgICByZXR1cm4gcHJveHlEZXBvc2l0QmFzZS5wbHVzKHByb3h5RGVwb3NpdEZhY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhbGxldE5hbWVzID0gdGhpcy5fcmVnaXN0cnkubWV0YWRhdGEucGFsbGV0cy5tYXAoKHApID0+IHAubmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAke1NlY3Rpb25OYW1lcy5Qcm94eX0gcGFsbGV0IGluIFske3BhbGxldE5hbWVzfV1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbnN0YW50KG5hbWU6IHN0cmluZywgY29uc3RhbnRzOiBWZWM8UGFsbGV0Q29uc3RhbnRNZXRhZGF0YVYxND4pOiBCaWdOdW1iZXIge1xuICAgIGNvbnN0IGNvbnN0YW50ID0gY29uc3RhbnRzLmZpbmQoKGMpID0+IGMubmFtZS50b1N0cmluZygpID09PSBuYW1lKTtcbiAgICBpZiAoY29uc3RhbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29uc3RhbnROYW1lcyA9IGNvbnN0YW50cy5tYXAoKHApID0+IHAubmFtZS50b1N0cmluZygpKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgY29uc3RhbnQgJHtuYW1lfSBpbiBbJHtjb25zdGFudE5hbWVzfV1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udmVydCBmcm9tIExpdHRsZS1FbmRpYW4gdG8gQmlnLUVuZGlhblxuICAgICAgY29uc3QgdmFsdWVCZSA9IEJ1ZmZlci5mcm9tKGNvbnN0YW50LnZhbHVlLnRvVThhKHRydWUpLnJldmVyc2UoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgcmV0dXJuIEJpZ051bWJlcih2YWx1ZUJlLCAxNik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWNvZGVJbnB1dHNBbmRPdXRwdXRzRm9yQm9uZChkZWNvZGVkVHg6IERlY29kZWRUeCkge1xuICAgIGNvbnN0IHNlbmRlciA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICAgIHRoaXMuX291dHB1dHMgPSBbXTtcblxuICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzO1xuICAgIGlmIChkZWNvZGVkVHgubWV0aG9kLnBhbGxldCA9PT0gU2VjdGlvbk5hbWVzLlN0YWtpbmcpIHtcbiAgICAgIGxldCBib25kVmFsdWUgPSAnMCc7XG4gICAgICBpZiAoZGVjb2RlZFR4Lm1ldGhvZC5uYW1lID09PSBNZXRob2ROYW1lcy5Cb25kICYmIHV0aWxzLmlzQm9uZCh0eE1ldGhvZCkpIHtcbiAgICAgICAgYm9uZFZhbHVlID0gdHhNZXRob2QudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGRlY29kZWRUeC5tZXRob2QubmFtZSA9PT0gTWV0aG9kTmFtZXMuQm9uZEV4dHJhICYmIHV0aWxzLmlzQm9uZEV4dHJhKHR4TWV0aG9kKSkge1xuICAgICAgICBib25kVmFsdWUgPSB0eE1ldGhvZC5tYXhBZGRpdGlvbmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgTG9hZGluZyBpbnB1dHMgb2YgdW5rbm93biBTdGFraW5nQWN0aXZhdGUgdHlwZSBwYXJhbWV0ZXJzYCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHNlbmRlcixcbiAgICAgICAgdmFsdWU6IGJvbmRWYWx1ZSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBTVEFLSU5HX0RFU1RJTkFUSU9OLFxuICAgICAgICB2YWx1ZTogYm9uZFZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JVbmJvbmQoZGVjb2RlZFR4OiBEZWNvZGVkVHgpIHtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gW107XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JXaXRoZHJhd1VuYm9uZChkZWNvZGVkVHg6IERlY29kZWRUeCkge1xuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICAgIHRoaXMuX291dHB1dHMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgc2lnbmVkIHBheWxvYWQgdXNpbmcgY29uc3RydWN0LnNpZ25UeFxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGJ1aWxkIHN0ZXAgaWYgYSBUU1Mgc2lnbmF0dXJlXG4gICAqIGlzIGFkZGVkIGFuZCB3aWxsIHNldCB0aGUgc2lnblRyYW5zYWN0aW9uIHdoaWNoIGlzIHRoZSB0eEhleCB0aGF0IHdpbGwgYmUgYnJvYWRjYXN0ZWRcbiAgICogQXMgd2VsbCBhcyBhZGQgdGhlIHNpZ25hdHVyZSB1c2VkIHRvIHNpZ24gdG8gdGhlIHNpZ25hdHVyZSBhcnJheSBpbiBoZXggZm9ybWF0XG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzaWduYXR1cmUgVGhlIHNpZ25hdHVyZSB0byBiZSBhZGRlZCB0byBhIGRvdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgY29uc3RydWN0U2lnbmVkUGF5bG9hZChzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIC8vIDB4MDAgbWVhbnMgaXRzIGFuIEVEMjU1MTkgc2lnbmF0dXJlXG4gICAgY29uc3QgZWRTaWduYXR1cmUgPSBgMHgwMCR7c2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKX1gIGFzIEhleFN0cmluZztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbiA9IGNvbnN0cnVjdC5zaWduZWRUeCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwgZWRTaWduYXR1cmUsIHtcbiAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKGBVbmFibGUgdG8gc2lnbiBkb3QgdHJhbnNhY3Rpb24gd2l0aCBzaWduYXR1cmUgJHtlZFNpZ25hdHVyZX0gYCArIGUpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKV07XG4gIH1cblxuICBzZXRUcmFuc2FjdGlvbih0eDogVW5zaWduZWRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKiovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBjb25zdCBleHRyaW5zaWNQYXlsb2FkID0gdGhpcy5fcmVnaXN0cnkuY3JlYXRlVHlwZSgnRXh0cmluc2ljUGF5bG9hZCcsIHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi52ZXJzaW9uLFxuICAgIH0pO1xuICAgIHJldHVybiB1OGFUb0J1ZmZlcihleHRyaW5zaWNQYXlsb2FkLnRvVThhKHsgbWV0aG9kOiB0cnVlIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxufVxuIl19
|
|
@@ -96,6 +96,7 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
96
96
|
protected set transaction(transaction: Transaction);
|
|
97
97
|
/** @inheritdoc */
|
|
98
98
|
protected fromImplementation(rawTransaction: string): Transaction;
|
|
99
|
+
getMethodAndArguments(): string;
|
|
99
100
|
/** @inheritdoc */
|
|
100
101
|
protected buildImplementation(): Promise<Transaction>;
|
|
101
102
|
protected createBaseTxInfo(): CreateBaseTxInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAGtB,UAAU,EAGV,SAAS,IAAI,aAAa,EAC1B,UAAU,EACV,SAAS,EACT,eAAe,EACf,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAwB,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAE3G,OAAO,SAAS,MAAM,cAAc,CAAC;AAGrC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAE1B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;IAClC,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC;IAIhC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAM;gBAE5B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,IAAI;IAOtC;;;;;;;OAOG;IACH,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOnC;;;;;;;OAOG;IACH,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAU1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,cAAc,GAAG,IAAI;IAY3D;;;;;;;;OAQG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAK5C;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI;IAKzC,OAAO,CAAC,MAAM;IAKd;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAMlC,SAAS,KAAK,SAAS,IAAI,QAAQ,CAOlC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
|