@bitgo/sdk-coin-icp 1.15.2 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/src/icp.d.ts +13 -14
- package/dist/src/icp.d.ts.map +1 -1
- package/dist/src/icp.js +26 -44
- package/dist/src/lib/icpAgent.d.ts +34 -0
- package/dist/src/lib/icpAgent.d.ts.map +1 -0
- package/dist/src/lib/icpAgent.js +87 -0
- package/dist/src/lib/iface.d.ts +3 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +5 -2
- package/dist/src/lib/transaction.d.ts +1 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +15 -12
- package/dist/src/lib/transactionBuilder.js +2 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +4 -5
- package/dist/src/lib/transferBuilder.d.ts +1 -3
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +7 -7
- package/dist/src/lib/utils.d.ts +1 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +3 -4
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.16.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-icp@1.15.2...@bitgo/sdk-coin-icp@1.16.0) (2025-06-02)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- rename audit function naming and signature ([1a885ab](https://github.com/BitGo/BitGoJS/commit/1a885ab60d30ca8595e284a728f2ab9d3c09994e))
|
|
11
|
+
- **sdk-coin-icp:** refactor account balance and fee retrieval to use IcpAgent class ([5b1c928](https://github.com/BitGo/BitGoJS/commit/5b1c92867ed9086d817d1676b1352fee5df0a4b2))
|
|
12
|
+
|
|
6
13
|
## [1.15.2](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-icp@1.15.1...@bitgo/sdk-coin-icp@1.15.2) (2025-05-28)
|
|
7
14
|
|
|
8
15
|
**Note:** Version bump only for package @bitgo/sdk-coin-icp
|
package/dist/src/icp.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BaseBroadcastTransactionOptions, BaseBroadcastTransactionResult, BaseCoin, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo/sdk-core';
|
|
1
|
+
import { AuditDecryptedKeyParams, BaseBroadcastTransactionOptions, BaseBroadcastTransactionResult, BaseCoin, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo/sdk-core';
|
|
2
2
|
import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics';
|
|
3
|
+
import BigNumber from 'bignumber.js';
|
|
3
4
|
import { Hash } from 'crypto';
|
|
4
|
-
import { HttpAgent } from 'ic0';
|
|
5
5
|
import { PayloadsData, RecoveryOptions, RecoveryTransaction, Signatures, IcpTransactionExplanation, TransactionHexParams, UnsignedSweepRecoveryTransaction } from './lib/iface';
|
|
6
6
|
/**
|
|
7
7
|
* Class representing the Internet Computer (ICP) coin.
|
|
@@ -57,20 +57,17 @@ export declare class Icp extends BaseCoin {
|
|
|
57
57
|
* @returns Promise resolving to the account balance as a string.
|
|
58
58
|
* @throws Error if the balance could not be fetched.
|
|
59
59
|
*/
|
|
60
|
-
protected getAccountBalance(publicKeyHex: string): Promise<
|
|
60
|
+
protected getAccountBalance(publicKeyHex: string): Promise<BigNumber>;
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* Creates a new HTTP agent for communicating with the Internet Computer.
|
|
70
|
-
* @param host - The host URL to connect to (defaults to the public node URL).
|
|
71
|
-
* @returns An instance of HttpAgent.
|
|
62
|
+
* Retrieves the current transaction fee data from the ICP public node.
|
|
63
|
+
*
|
|
64
|
+
* This method creates an instance of `IcpAgent` using the public node URL,
|
|
65
|
+
* then queries the node for the current fee information.
|
|
66
|
+
*
|
|
67
|
+
* @returns A promise that resolves to a `BigNumber` representing the current transaction fee.
|
|
68
|
+
* @throws Will propagate any errors encountered while communicating with the ICP node.
|
|
72
69
|
*/
|
|
73
|
-
protected
|
|
70
|
+
protected getFeeData(): Promise<BigNumber>;
|
|
74
71
|
private getBuilderFactory;
|
|
75
72
|
/**
|
|
76
73
|
* Generates an array of signatures for the provided payloads using MPC
|
|
@@ -89,5 +86,7 @@ export declare class Icp extends BaseCoin {
|
|
|
89
86
|
* @param params
|
|
90
87
|
*/
|
|
91
88
|
recover(params: RecoveryOptions): Promise<RecoveryTransaction | UnsignedSweepRecoveryTransaction>;
|
|
89
|
+
/** @inheritDoc */
|
|
90
|
+
auditDecryptedKey({ multiSigType, prv, publicKey }: AuditDecryptedKeyParams): void;
|
|
92
91
|
}
|
|
93
92
|
//# sourceMappingURL=icp.d.ts.map
|
package/dist/src/icp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icp.d.ts","sourceRoot":"","sources":["../../src/icp.ts"],"names":[],"mappings":"AACA,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC9B,QAAQ,EACR,SAAS,EAIT,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAEjB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAS,QAAQ,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"icp.d.ts","sourceRoot":"","sources":["../../src/icp.ts"],"names":[],"mappings":"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"}
|
package/dist/src/icp.js
CHANGED
|
@@ -44,11 +44,12 @@ const principal_1 = require("@dfinity/principal");
|
|
|
44
44
|
const axios_1 = __importDefault(require("axios"));
|
|
45
45
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
46
46
|
const crypto_1 = require("crypto");
|
|
47
|
-
const ic0_1 = require("ic0");
|
|
48
47
|
const mpc = __importStar(require("@bitgo/sdk-lib-mpc"));
|
|
49
48
|
const iface_1 = require("./lib/iface");
|
|
50
49
|
const transactionBuilderFactory_1 = require("./lib/transactionBuilderFactory");
|
|
51
50
|
const utils_1 = __importDefault(require("./lib/utils"));
|
|
51
|
+
const sdk_lib_mpc_1 = require("@bitgo/sdk-lib-mpc");
|
|
52
|
+
const icpAgent_1 = require("./lib/icpAgent");
|
|
52
53
|
/**
|
|
53
54
|
* Class representing the Internet Computer (ICP) coin.
|
|
54
55
|
* Extends the BaseCoin class and provides specific implementations for ICP.
|
|
@@ -224,48 +225,22 @@ class Icp extends sdk_core_1.BaseCoin {
|
|
|
224
225
|
* @throws Error if the balance could not be fetched.
|
|
225
226
|
*/
|
|
226
227
|
async getAccountBalance(publicKeyHex) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
throw new Error(`Unable to fetch account balance: ${error.message || error}`);
|
|
233
|
-
}
|
|
228
|
+
const principalId = utils_1.default.getPrincipalIdFromPublicKey(publicKeyHex).toText();
|
|
229
|
+
const agent = new icpAgent_1.IcpAgent(this.getPublicNodeUrl());
|
|
230
|
+
return agent.getBalance(principalId);
|
|
234
231
|
}
|
|
235
232
|
/**
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const agent = this.createAgent(); // TODO: WIN-5512: move to a ICP agent file WIN-5512
|
|
244
|
-
const ic = (0, ic0_1.replica)(agent, { local: true });
|
|
245
|
-
const ledger = ic(principal_1.Principal.fromUint8Array(iface_1.LEDGER_CANISTER_ID).toText());
|
|
246
|
-
const subaccountHex = '0000000000000000000000000000000000000000000000000000000000000000';
|
|
247
|
-
const account = {
|
|
248
|
-
owner: principal_1.Principal.fromText(principalId),
|
|
249
|
-
subaccount: [utils_1.default.hexToBytes(subaccountHex)],
|
|
250
|
-
};
|
|
251
|
-
const balance = await ledger.call(iface_1.ACCOUNT_BALANCE_CALL, account);
|
|
252
|
-
return balance.toString();
|
|
253
|
-
}
|
|
254
|
-
catch (error) {
|
|
255
|
-
throw new Error(`Error fetching balance for principal ${principalId}: ${error.message || error}`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Creates a new HTTP agent for communicating with the Internet Computer.
|
|
260
|
-
* @param host - The host URL to connect to (defaults to the public node URL).
|
|
261
|
-
* @returns An instance of HttpAgent.
|
|
233
|
+
* Retrieves the current transaction fee data from the ICP public node.
|
|
234
|
+
*
|
|
235
|
+
* This method creates an instance of `IcpAgent` using the public node URL,
|
|
236
|
+
* then queries the node for the current fee information.
|
|
237
|
+
*
|
|
238
|
+
* @returns A promise that resolves to a `BigNumber` representing the current transaction fee.
|
|
239
|
+
* @throws Will propagate any errors encountered while communicating with the ICP node.
|
|
262
240
|
*/
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
fetch,
|
|
267
|
-
verifyQuerySignatures: false,
|
|
268
|
-
});
|
|
241
|
+
async getFeeData() {
|
|
242
|
+
const agent = new icpAgent_1.IcpAgent(this.getPublicNodeUrl());
|
|
243
|
+
return await agent.getFee();
|
|
269
244
|
}
|
|
270
245
|
getBuilderFactory() {
|
|
271
246
|
return new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get(this.getBaseChain()));
|
|
@@ -347,9 +322,9 @@ class Icp extends sdk_core_1.BaseCoin {
|
|
|
347
322
|
throw new Error('failed to derive public key');
|
|
348
323
|
}
|
|
349
324
|
const senderAddress = await this.getAddressFromPublicKey(publicKey);
|
|
350
|
-
const balance =
|
|
351
|
-
const feeData =
|
|
352
|
-
const actualBalance = balance.
|
|
325
|
+
const balance = await this.getAccountBalance(publicKey);
|
|
326
|
+
const feeData = await this.getFeeData();
|
|
327
|
+
const actualBalance = balance.minus(feeData);
|
|
353
328
|
if (actualBalance.isLessThanOrEqualTo(0)) {
|
|
354
329
|
throw new Error('Did not have enough funds to recover');
|
|
355
330
|
}
|
|
@@ -390,6 +365,13 @@ class Icp extends sdk_core_1.BaseCoin {
|
|
|
390
365
|
throw new Error(`Error during ICP recovery: ${error.message || error}`);
|
|
391
366
|
}
|
|
392
367
|
}
|
|
368
|
+
/** @inheritDoc */
|
|
369
|
+
auditDecryptedKey({ multiSigType, prv, publicKey }) {
|
|
370
|
+
if (multiSigType !== 'tss') {
|
|
371
|
+
throw new Error('Unsupported multisigtype ');
|
|
372
|
+
}
|
|
373
|
+
(0, sdk_lib_mpc_1.auditEcdsaPrivateKey)(prv, publicKey);
|
|
374
|
+
}
|
|
393
375
|
}
|
|
394
376
|
exports.Icp = Icp;
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBbUJ5QjtBQUN6Qiw0Q0FBb0U7QUFDcEUsa0RBQStDO0FBQy9DLGtEQUEwQjtBQUMxQixnRUFBcUM7QUFDckMsbUNBQTBDO0FBQzFDLDZCQUF5QztBQUN6Qyx3REFBMEM7QUFFMUMsdUNBZXFCO0FBQ3JCLCtFQUE0RTtBQUM1RSx3REFBZ0M7QUFFaEM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxHQUFJLFNBQVEsbUJBQVE7SUFFL0IsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJ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QUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sb0JBQW9CLEdBQXdCO2dCQUNoRCxFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsZ0JBQWdCO2FBQ3JCLENBQUM7WUFDRixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEzWkQsa0JBMlpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0LFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBFY2RzYSxcbiAgRUNEU0FVdGlscyxcbiAgRW52aXJvbm1lbnRzLFxuICBLZXlQYWlyLFxuICBNUENBbGdvcml0aG0sXG4gIE11bHRpc2lnVHlwZSxcbiAgbXVsdGlzaWdUeXBlcyxcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgU2lnbmluZ0Vycm9yLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFByaW5jaXBhbCB9IGZyb20gJ0BkZmluaXR5L3ByaW5jaXBhbCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBIdHRwQWdlbnQsIHJlcGxpY2EgfSBmcm9tICdpYzAnO1xuaW1wb3J0ICogYXMgbXBjIGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5cbmltcG9ydCB7XG4gIEN1cnZlVHlwZSxcbiAgTEVER0VSX0NBTklTVEVSX0lELFxuICBQYXlsb2Fkc0RhdGEsXG4gIFBVQkxJQ19OT0RFX1JFUVVFU1RfRU5EUE9JTlQsXG4gIFB1YmxpY05vZGVTdWJtaXRSZXNwb25zZSxcbiAgUmVjb3ZlcnlPcHRpb25zLFxuICBSZWNvdmVyeVRyYW5zYWN0aW9uLFxuICBST09UX1BBVEgsXG4gIFNpZ25hdHVyZXMsXG4gIFNpZ25pbmdQYXlsb2FkLFxuICBJY3BUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBUcmFuc2FjdGlvbkhleFBhcmFtcyxcbiAgQUNDT1VOVF9CQUxBTkNFX0NBTEwsXG4gIFVuc2lnbmVkU3dlZXBSZWNvdmVyeVRyYW5zYWN0aW9uLFxufSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyB0aGUgSW50ZXJuZXQgQ29tcHV0ZXIgKElDUCkgY29pbi5cbiAqIEV4dGVuZHMgdGhlIEJhc2VDb2luIGNsYXNzIGFuZCBwcm92aWRlcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgZm9yIElDUC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2ludGVybmV0Y29tcHV0ZXIub3JnL31cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaW50ZXJuZXRjb21wdXRlci5vcmcvZG9jcy9jdXJyZW50L2RldmVsb3Blci1kb2NzL2RlZmkvcm9zZXR0YS9pY3Bfcm9zZXR0YS9kYXRhX2FwaS99XG4gKi9cbmV4cG9ydCBjbGFzcyBJY3AgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBJY3AoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdpY3AnO1xuICB9XG5cbiAgZ2V0QmFzZUNoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdpY3AnO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdJbnRlcm5ldCBDb21wdXRlcic7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IFRyYW5zYWN0aW9uSGV4UGFyYW1zKTogUHJvbWlzZTxJY3BUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlckZhY3RvcnkoKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBhd2FpdCBmYWN0b3J5LmZyb20ocGFyYW1zLnRyYW5zYWN0aW9uSGV4KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmIChwYXJhbXMuc2lnbmFibGVIZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVkU2lnbmFibGVIZXggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLnBheWxvYWRzWzBdLmhleF9ieXRlcztcbiAgICAgIGlmIChnZW5lcmF0ZWRTaWduYWJsZUhleCAhPT0gcGFyYW1zLnNpZ25hYmxlSGV4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VuZXJhdGVkIHNpZ25hYmxlSGV4IGlzIG5vdCBlcXVhbCB0byBwYXJhbXMuc2lnbmFibGVIZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdHhIZXggPSB0eFByZWJ1aWxkPy50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHR4SGV4UGFyYW1zOiBUcmFuc2FjdGlvbkhleFBhcmFtcyA9IHtcbiAgICAgIHRyYW5zYWN0aW9uSGV4OiB0eEhleCxcbiAgICB9O1xuXG4gICAgaWYgKHR4UHJlYnVpbGQudHhJbmZvICYmIHR4UHJlYnVpbGQudHhJbmZvICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR4UHJlYnVpbGQudHhJbmZvID09PSAnc3RyaW5nJykge1xuICAgICAgdHhIZXhQYXJhbXMuc2lnbmFibGVIZXggPSB0eFByZWJ1aWxkLnR4SW5mbztcbiAgICB9XG5cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHR4SGV4UGFyYW1zKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5nZXRDaGFpbigpfSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZXhwbGFpbmVkVHgub3V0cHV0cy5sZW5ndGggPT09IDEsICdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBleHBsYWluZWRUeC5vdXRwdXRzWzBdO1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gdHhQYXJhbXMucmVjaXBpZW50c1swXTtcbiAgICAgIGFzc2VydChcbiAgICAgICAgdHlwZW9mIHJlY2lwaWVudC5hZGRyZXNzID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIHR5cGVvZiBvdXRwdXQuYWRkcmVzcyA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjaXBpZW50LmFkZHJlc3MgJiZcbiAgICAgICAgICBCaWdOdW1iZXIob3V0cHV0LmFtb3VudCkuZXEoQmlnTnVtYmVyKHJlY2lwaWVudC5hbW91bnQpKSxcbiAgICAgICAgJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5hZGRyZXNzKTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcga2V5cGFpciBmb3IgdGhpcyBjb2luLlxuICAgKiBAcGFyYW0gc2VlZCBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIHJldHVybiB1dGlscy5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNhY3Rpb24oXG4gICAgcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zICYgeyB0eFByZWJ1aWxkOiB7IHR4SGV4OiBzdHJpbmcgfTsgcHJ2OiBzdHJpbmcgfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXM/LnR4UHJlYnVpbGQ/LnR4SGV4O1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBwYXJhbXM/LnBydjtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4UHJlYnVpbGQgcGFyYW1ldGVyOiBwYXJhbXMudHhQcmVidWlsZC50eEhleCcpO1xuICAgIH1cbiAgICBpZiAoIXByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcHJ2IHBhcmFtZXRlcjogcGFyYW1zLnBydicpO1xuICAgIH1cbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGF3YWl0IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHBhcmFtcy5wcnYgfSk7XG4gICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICB9O1xuICB9XG5cbiAgaXNWYWxpZFB1YihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkUHJ2KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMudHNzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXRIYXNoRnVuY3Rpb24oKTogSGFzaCB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIHByb3RlY3RlZCBnZXRQdWJsaWNOb2RlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5pY3BOb2RlVXJsO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICAvLyB0aGlzIG1ldGhvZCBjYWxscyB0aGUgcHVibGljIG5vZGUgdG8gYnJvYWRjYXN0IHRoZSB0cmFuc2FjdGlvbiBhbmQgbm90IHRoZSByb3NldHRhIG5vZGVcbiAgcHVibGljIGFzeW5jIGJyb2FkY2FzdFRyYW5zYWN0aW9uKHBheWxvYWQ6IEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5nZXRQdWJsaWNOb2RlQnJvYWRjYXN0RW5kcG9pbnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5Qnl0ZXMgPSB1dGlscy5ibG9iRnJvbUhleChwYXlsb2FkLnNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoZW5kcG9pbnQsIGJvZHlCeXRlcywge1xuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vY2JvcicgfSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLCAvLyBUaGlzIGVuc3VyZXMgeW91IGdldCBhIEJ1ZmZlciwgbm90IGEgc3RyaW5nXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gYnJvYWRjYXN0IGZhaWxlZCB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9IC0gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWNvZGVkUmVzcG9uc2UgPSB1dGlscy5jYm9yRGVjb2RlKHJlc3BvbnNlLmRhdGEpIGFzIFB1YmxpY05vZGVTdWJtaXRSZXNwb25zZTtcblxuICAgICAgaWYgKGRlY29kZWRSZXNwb25zZS5zdGF0dXMgPT09ICdyZXBsaWVkJykge1xuICAgICAgICAvLyBpdCBpcyBjb25zaWRlcmVkIGEgc3VjY2VzcyBiZWNhdXNlIElDUCByZXR1cm5zIHJlc3BvbnNlIGluIGEgQ0JPUiBtYXAgd2l0aCBhIHN0YXR1cyBvZiAncmVwbGllZCdcbiAgICAgICAgcmV0dXJuIHt9OyAvLyByZXR1cm5lZCBlbXB0eSBvYmplY3QgYXMgSUNQIGRvZXMgbm90IHJldHVybiBhIHR4aWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCByZXNwb25zZSBzdGF0dXMgZnJvbSBub2RlOiAke2RlY29kZWRSZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gYnJvYWRjYXN0IGVycm9yOiAke2Vycm9yPy5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFB1YmxpY05vZGVCcm9hZGNhc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vZGVVcmwgPSB0aGlzLmdldFB1YmxpY05vZGVVcmwoKTtcbiAgICBjb25zdCBwcmluY2lwYWwgPSBQcmluY2lwYWwuZnJvbVVpbnQ4QXJyYXkoTEVER0VSX0NBTklTVEVSX0lEKTtcbiAgICBjb25zdCBjYW5pc3RlcklkSGV4ID0gcHJpbmNpcGFsLnRvVGV4dCgpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7bm9kZVVybH0ke1BVQkxJQ19OT0RFX1JFUVVFU1RfRU5EUE9JTlR9JHtjYW5pc3RlcklkSGV4fS9jYWxsYDtcbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgYWNjb3VudCBiYWxhbmNlIGZvciBhIGdpdmVuIHB1YmxpYyBrZXkuXG4gICAqIEBwYXJhbSBwdWJsaWNLZXlIZXggLSBIZXgtZW5jb2RlZCBwdWJsaWMga2V5IG9mIHRoZSBhY2NvdW50LlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgYWNjb3VudCBiYWxhbmNlIGFzIGEgc3RyaW5nLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBiYWxhbmNlIGNvdWxkIG5vdCBiZSBmZXRjaGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnRCYWxhbmNlKHB1YmxpY0tleUhleDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJpbmNpcGFsSWQgPSB1dGlscy5nZXRQcmluY2lwYWxJZEZyb21QdWJsaWNLZXkocHVibGljS2V5SGV4KS50b1RleHQoKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEJhbGFuY2VGcm9tUHJpbmNpcGFsKHByaW5jaXBhbElkKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmZXRjaCBhY2NvdW50IGJhbGFuY2U6ICR7ZXJyb3IubWVzc2FnZSB8fCBlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgYWNjb3VudCBiYWxhbmNlIGZvciBhIGdpdmVuIHByaW5jaXBhbCBJRC5cbiAgICogQHBhcmFtIHByaW5jaXBhbElkIC0gVGhlIHByaW5jaXBhbCBJRCBvZiB0aGUgYWNjb3VudC5cbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGFjY291bnQgYmFsYW5jZSBhcyBhIHN0cmluZy5cbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgYmFsYW5jZSBjb3VsZCBub3QgYmUgZmV0Y2hlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXRCYWxhbmNlRnJvbVByaW5jaXBhbChwcmluY2lwYWxJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWdlbnQgPSB0aGlzLmNyZWF0ZUFnZW50KCk7IC8vIFRPRE86IFdJTi01NTEyOiBtb3ZlIHRvIGEgSUNQIGFnZW50IGZpbGUgV0lOLTU1MTJcbiAgICAgIGNvbnN0IGljID0gcmVwbGljYShhZ2VudCwgeyBsb2NhbDogdHJ1ZSB9KTtcblxuICAgICAgY29uc3QgbGVkZ2VyID0gaWMoUHJpbmNpcGFsLmZyb21VaW50OEFycmF5KExFREdFUl9DQU5JU1RFUl9JRCkudG9UZXh0KCkpO1xuICAgICAgY29uc3Qgc3ViYWNjb3VudEhleCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJztcblxuICAgICAgY29uc3QgYWNjb3VudCA9IHtcbiAgICAgICAgb3duZXI6IFByaW5jaXBhbC5mcm9tVGV4dChwcmluY2lwYWxJZCksXG4gICAgICAgIHN1YmFjY291bnQ6IFt1dGlscy5oZXhUb0J5dGVzKHN1YmFjY291bnRIZXgpXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBsZWRnZXIuY2FsbChBQ0NPVU5UX0JBTEFOQ0VfQ0FMTCwgYWNjb3VudCk7XG4gICAgICByZXR1cm4gYmFsYW5jZS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZmV0Y2hpbmcgYmFsYW5jZSBmb3IgcHJpbmNpcGFsICR7cHJpbmNpcGFsSWR9OiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgSFRUUCBhZ2VudCBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBJbnRlcm5ldCBDb21wdXRlci5cbiAgICogQHBhcmFtIGhvc3QgLSBUaGUgaG9zdCBVUkwgdG8gY29ubmVjdCB0byAoZGVmYXVsdHMgdG8gdGhlIHB1YmxpYyBub2RlIFVSTCkuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIEh0dHBBZ2VudC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBZ2VudChob3N0OiBzdHJpbmcgPSB0aGlzLmdldFB1YmxpY05vZGVVcmwoKSk6IEh0dHBBZ2VudCB7XG4gICAgcmV0dXJuIG5ldyBIdHRwQWdlbnQoe1xuICAgICAgaG9zdCxcbiAgICAgIGZldGNoLFxuICAgICAgdmVyaWZ5UXVlcnlTaWduYXR1cmVzOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlckZhY3RvcnkoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIHNpZ25hdHVyZXMgZm9yIHRoZSBwcm92aWRlZCBwYXlsb2FkcyB1c2luZyBNUENcbiAgICpcbiAgICogQHBhcmFtIHBheWxvYWRzRGF0YSAtIFRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIHBheWxvYWRzIHRvIGJlIHNpZ25lZC5cbiAgICogQHBhcmFtIHNlbmRlclB1YmxpY0tleSAtIFRoZSBwdWJsaWMga2V5IG9mIHRoZSBzZW5kZXIgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKiBAcGFyYW0gdXNlcktleVNoYXJlIC0gVGhlIHVzZXIncyBrZXkgc2hhcmUgYXMgYSBCdWZmZXIuXG4gICAqIEBwYXJhbSBiYWNrdXBLZXlTaGFyZSAtIFRoZSBiYWNrdXAga2V5IHNoYXJlIGFzIGEgQnVmZmVyLlxuICAgKiBAcGFyYW0gY29tbW9uS2V5Q2hhaW4gLSBUaGUgY29tbW9uIGtleSBjaGFpbiBpZGVudGlmaWVyIHVzZWQgZm9yIE1QQyBzaWduaW5nLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBgU2lnbmF0dXJlc2Agb2JqZWN0cywgZWFjaCBjb250YWluaW5nIHRoZSBzaWduaW5nIHBheWxvYWQsXG4gICAqICAgICAgICAgIHNpZ25hdHVyZSB0eXBlLCBwdWJsaWMga2V5LCBhbmQgdGhlIGdlbmVyYXRlZCBzaWduYXR1cmUgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LlxuICAgKi9cbiAgYXN5bmMgc2lnbmF0dXJlcyhcbiAgICBwYXlsb2Fkc0RhdGE6IFBheWxvYWRzRGF0YSxcbiAgICBzZW5kZXJQdWJsaWNLZXk6IHN0cmluZyxcbiAgICB1c2VyS2V5U2hhcmU6IEJ1ZmZlcjxBcnJheUJ1ZmZlckxpa2U+LFxuICAgIGJhY2t1cEtleVNoYXJlOiBCdWZmZXI8QXJyYXlCdWZmZXJMaWtlPixcbiAgICBjb21tb25LZXlDaGFpbjogc3RyaW5nXG4gICk6IFByb21pc2U8U2lnbmF0dXJlc1tdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2Fkc0RhdGEucGF5bG9hZHNbMF0gYXMgU2lnbmluZ1BheWxvYWQ7XG4gICAgICBjb25zdCBtZXNzYWdlID0gQnVmZmVyLmZyb20ocGF5bG9hZC5oZXhfYnl0ZXMsICdoZXgnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG1lc3NhZ2UpLmRpZ2VzdCgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgRUNEU0FVdGlscy5zaWduUmVjb3ZlcnlNcGNWMihtZXNzYWdlSGFzaCwgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlUGF5bG9hZDogU2lnbmF0dXJlcyA9IHtcbiAgICAgICAgc2lnbmluZ19wYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICBzaWduYXR1cmVfdHlwZTogcGF5bG9hZC5zaWduYXR1cmVfdHlwZSxcbiAgICAgICAgcHVibGljX2tleToge1xuICAgICAgICAgIGhleF9ieXRlczogc2VuZGVyUHVibGljS2V5LFxuICAgICAgICAgIGN1cnZlX3R5cGU6IEN1cnZlVHlwZS5TRUNQMjU2SzEsXG4gICAgICAgIH0sXG4gICAgICAgIGhleF9ieXRlczogc2lnbmF0dXJlLnIgKyBzaWduYXR1cmUucyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBbc2lnbmF0dXJlUGF5bG9hZF07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZ2VuZXJhdGluZyBzaWduYXR1cmVzOiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R29cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlUcmFuc2FjdGlvbiB8IFVuc2lnbmVkU3dlZXBSZWNvdmVyeVRyYW5zYWN0aW9uPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24gfHwgIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9ICFwYXJhbXMudXNlcktleSAmJiAhcGFyYW1zLmJhY2t1cEtleSAmJiAhcGFyYW1zLndhbGxldFBhc3NwaHJhc2U7XG5cbiAgICAgIGxldCBwdWJsaWNLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbjtcbiAgICAgIGNvbnN0IE1QQyA9IG5ldyBFY2RzYSgpO1xuXG4gICAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgICBpZiAoIXBhcmFtcy51c2VyS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyYW1zLmJhY2t1cEtleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiYWNrdXBLZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFyYW1zLndhbGxldFBhc3NwaHJhc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3Npbmcgd2FsbGV0IHBhc3NwaHJhc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVzZXJLZXkgPSBwYXJhbXMudXNlcktleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgKHsgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4gfSA9IGF3YWl0IEVDRFNBVXRpbHMuZ2V0TXBjVjJSZWNvdmVyeUtleVNoYXJlcyhcbiAgICAgICAgICB1c2VyS2V5LFxuICAgICAgICAgIGJhY2t1cEtleSxcbiAgICAgICAgICBwYXJhbXMud2FsbGV0UGFzc3BocmFzZVxuICAgICAgICApKTtcbiAgICAgICAgcHVibGljS2V5ID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Q2hhaW4sIFJPT1RfUEFUSCkuc2xpY2UoMCwgNjYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYml0Z29LZXkgPSBwYXJhbXMuYml0Z29LZXk7XG4gICAgICAgIGlmICghYml0Z29LZXkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgYml0Z29LZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhkVHJlZSA9IG5ldyBtcGMuU2VjcDI1NmsxQmlwMzJIZFRyZWUoKTtcbiAgICAgICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcbiAgICAgICAgY29uc3QgZGVyaXZlZFB1YiA9IGhkVHJlZS5wdWJsaWNEZXJpdmUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGs6IG1wYy5iaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYml0Z29LZXkuc2xpY2UoMCwgNjYpLCAnaGV4JykpLFxuICAgICAgICAgICAgY2hhaW5jb2RlOiBtcGMuYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJpdGdvS2V5LnNsaWNlKDY2KSwgJ2hleCcpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcml2YXRpb25QYXRoXG4gICAgICAgICk7XG5cbiAgICAgICAgcHVibGljS2V5ID0gbXBjLmJpZ0ludFRvQnVmZmVyQkUoZGVyaXZlZFB1Yi5waykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBkZXJpdmUgcHVibGljIGtleScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZW5kZXJBZGRyZXNzID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXkpO1xuICAgICAgY29uc3QgYmFsYW5jZSA9IG5ldyBCaWdOdW1iZXIoYXdhaXQgdGhpcy5nZXRBY2NvdW50QmFsYW5jZShwdWJsaWNLZXkpKTtcbiAgICAgIGNvbnN0IGZlZURhdGEgPSBuZXcgQmlnTnVtYmVyKHV0aWxzLmZlZURhdGEoKSk7XG4gICAgICBjb25zdCBhY3R1YWxCYWxhbmNlID0gYmFsYW5jZS5wbHVzKGZlZURhdGEpOyAvLyBnYXMgYW1vdW50IHJldHVybmVkIGZyb20gZ2FzRGF0YSBpcyBuZWdhdGl2ZSBzbyB3ZSBhZGQgaXRcbiAgICAgIGlmIChhY3R1YWxCYWxhbmNlLmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGhhdmUgZW5vdWdoIGZ1bmRzIHRvIHJlY292ZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlckZhY3RvcnkoKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKHNlbmRlckFkZHJlc3MsIHB1YmxpY0tleSBhcyBzdHJpbmcpO1xuICAgICAgdHhCdWlsZGVyLnJlY2VpdmVySWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgICAgdHhCdWlsZGVyLmFtb3VudChhY3R1YWxCYWxhbmNlLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKHBhcmFtcy5tZW1vICE9PSB1bmRlZmluZWQgJiYgdXRpbHMudmFsaWRhdGVNZW1vKHBhcmFtcy5tZW1vKSkge1xuICAgICAgICB0eEJ1aWxkZXIubWVtbyhOdW1iZXIocGFyYW1zLm1lbW8pKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgaWYgKHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGEucGF5bG9hZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwYXlsb2FkcyB0byBnZW5lcmF0ZSBzaWduYXR1cmVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eEhleDogdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb24sXG4gICAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaWduYXR1cmVzID0gYXdhaXQgdGhpcy5zaWduYXR1cmVzKFxuICAgICAgICB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICAgIGNvbW1vbktleUNoYWluXG4gICAgICApO1xuICAgICAgaWYgKCFzaWduYXR1cmVzIHx8IHNpZ25hdHVyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIHNpZ25hdHVyZXMnKTtcbiAgICAgIH1cbiAgICAgIHR4QnVpbGRlci50cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnbmF0dXJlcyk7XG4gICAgICB0eEJ1aWxkZXIuY29tYmluZSgpO1xuICAgICAgY29uc3QgYnJvYWRjYXN0YWJsZVR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3RUcmFuc2FjdGlvbih7IHNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbjogYnJvYWRjYXN0YWJsZVR4biB9KTtcbiAgICAgIGNvbnN0IHR4SWQgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uaWQ7XG4gICAgICBjb25zdCByZWNvdmVyZWRUcmFuc2FjdGlvbjogUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IHtcbiAgICAgICAgaWQ6IHR4SWQsXG4gICAgICAgIHR4OiBicm9hZGNhc3RhYmxlVHhuLFxuICAgICAgfTtcbiAgICAgIHJldHVybiByZWNvdmVyZWRUcmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBkdXJpbmcgSUNQIHJlY292ZXJ5OiAke2Vycm9yLm1lc3NhZ2UgfHwgZXJyb3J9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
377
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBb0J5QjtBQUN6Qiw0Q0FBb0U7QUFDcEUsa0RBQStDO0FBQy9DLGtEQUEwQjtBQUMxQixnRUFBcUM7QUFDckMsbUNBQTBDO0FBQzFDLHdEQUEwQztBQUUxQyx1Q0FjcUI7QUFDckIsK0VBQTRFO0FBQzVFLHdEQUFnQztBQUNoQyxvREFBMEQ7QUFDMUQsNkNBQTBDO0FBRTFDOzs7Ozs7R0FNRztBQUNILE1BQWEsR0FBSSxTQUFRLG1CQUFRO0lBRS9CLFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFB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Q3BCLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sb0JBQW9CLEdBQXdCO2dCQUNoRCxFQUFFLEVBQUUsSUFBSTtnQkFDUixFQUFFLEVBQUUsZ0JBQWdCO2FBQ3JCLENBQUM7WUFDRixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQTJCO1FBQ3pFLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsSUFBQSxrQ0FBb0IsRUFBQyxHQUFhLEVBQUUsU0FBbUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQXZZRCxrQkF1WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0LFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBFY2RzYSxcbiAgRUNEU0FVdGlscyxcbiAgRW52aXJvbm1lbnRzLFxuICBLZXlQYWlyLFxuICBNUENBbGdvcml0aG0sXG4gIE11bHRpc2lnVHlwZSxcbiAgbXVsdGlzaWdUeXBlcyxcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgU2lnbmluZ0Vycm9yLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFByaW5jaXBhbCB9IGZyb20gJ0BkZmluaXR5L3ByaW5jaXBhbCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBtcGMgZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcblxuaW1wb3J0IHtcbiAgQ3VydmVUeXBlLFxuICBMRURHRVJfQ0FOSVNURVJfSUQsXG4gIFBheWxvYWRzRGF0YSxcbiAgUFVCTElDX05PREVfUkVRVUVTVF9FTkRQT0lOVCxcbiAgUHVibGljTm9kZVN1Ym1pdFJlc3BvbnNlLFxuICBSZWNvdmVyeU9wdGlvbnMsXG4gIFJlY292ZXJ5VHJhbnNhY3Rpb24sXG4gIFJPT1RfUEFUSCxcbiAgU2lnbmF0dXJlcyxcbiAgU2lnbmluZ1BheWxvYWQsXG4gIEljcFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uSGV4UGFyYW1zLFxuICBVbnNpZ25lZFN3ZWVwUmVjb3ZlcnlUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9saWIvaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IGF1ZGl0RWNkc2FQcml2YXRlS2V5IH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IEljcEFnZW50IH0gZnJvbSAnLi9saWIvaWNwQWdlbnQnO1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyB0aGUgSW50ZXJuZXQgQ29tcHV0ZXIgKElDUCkgY29pbi5cbiAqIEV4dGVuZHMgdGhlIEJhc2VDb2luIGNsYXNzIGFuZCBwcm92aWRlcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgZm9yIElDUC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2ludGVybmV0Y29tcHV0ZXIub3JnL31cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vaW50ZXJuZXRjb21wdXRlci5vcmcvZG9jcy9jdXJyZW50L2RldmVsb3Blci1kb2NzL2RlZmkvcm9zZXR0YS9pY3Bfcm9zZXR0YS9kYXRhX2FwaS99XG4gKi9cbmV4cG9ydCBjbGFzcyBJY3AgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBJY3AoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdpY3AnO1xuICB9XG5cbiAgZ2V0QmFzZUNoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdpY3AnO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdJbnRlcm5ldCBDb21wdXRlcic7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IFRyYW5zYWN0aW9uSGV4UGFyYW1zKTogUHJvbWlzZTxJY3BUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlckZhY3RvcnkoKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBhd2FpdCBmYWN0b3J5LmZyb20ocGFyYW1zLnRyYW5zYWN0aW9uSGV4KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmIChwYXJhbXMuc2lnbmFibGVIZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVkU2lnbmFibGVIZXggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLnBheWxvYWRzWzBdLmhleF9ieXRlcztcbiAgICAgIGlmIChnZW5lcmF0ZWRTaWduYWJsZUhleCAhPT0gcGFyYW1zLnNpZ25hYmxlSGV4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VuZXJhdGVkIHNpZ25hYmxlSGV4IGlzIG5vdCBlcXVhbCB0byBwYXJhbXMuc2lnbmFibGVIZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdHhIZXggPSB0eFByZWJ1aWxkPy50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHR4SGV4UGFyYW1zOiBUcmFuc2FjdGlvbkhleFBhcmFtcyA9IHtcbiAgICAgIHRyYW5zYWN0aW9uSGV4OiB0eEhleCxcbiAgICB9O1xuXG4gICAgaWYgKHR4UHJlYnVpbGQudHhJbmZvICYmIHR4UHJlYnVpbGQudHhJbmZvICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR4UHJlYnVpbGQudHhJbmZvID09PSAnc3RyaW5nJykge1xuICAgICAgdHhIZXhQYXJhbXMuc2lnbmFibGVIZXggPSB0eFByZWJ1aWxkLnR4SW5mbztcbiAgICB9XG5cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IGF3YWl0IHRoaXMuZXhwbGFpblRyYW5zYWN0aW9uKHR4SGV4UGFyYW1zKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5nZXRDaGFpbigpfSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZXhwbGFpbmVkVHgub3V0cHV0cy5sZW5ndGggPT09IDEsICdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuXG4gICAgICBjb25zdCBvdXRwdXQgPSBleHBsYWluZWRUeC5vdXRwdXRzWzBdO1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gdHhQYXJhbXMucmVjaXBpZW50c1swXTtcbiAgICAgIGFzc2VydChcbiAgICAgICAgdHlwZW9mIHJlY2lwaWVudC5hZGRyZXNzID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIHR5cGVvZiBvdXRwdXQuYWRkcmVzcyA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvdXRwdXQuYWRkcmVzcyA9PT0gcmVjaXBpZW50LmFkZHJlc3MgJiZcbiAgICAgICAgICBCaWdOdW1iZXIob3V0cHV0LmFtb3VudCkuZXEoQmlnTnVtYmVyKHJlY2lwaWVudC5hbW91bnQpKSxcbiAgICAgICAgJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBUc3NWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5hZGRyZXNzKTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcga2V5cGFpciBmb3IgdGhpcyBjb2luLlxuICAgKiBAcGFyYW0gc2VlZCBTZWVkIGZyb20gd2hpY2ggdGhlIG5ldyBrZXlwYWlyIHNob3VsZCBiZSBnZW5lcmF0ZWQsIG90aGVyd2lzZSBhIHJhbmRvbSBzZWVkIGlzIHVzZWRcbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIHJldHVybiB1dGlscy5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNhY3Rpb24oXG4gICAgcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zICYgeyB0eFByZWJ1aWxkOiB7IHR4SGV4OiBzdHJpbmcgfTsgcHJ2OiBzdHJpbmcgfVxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXM/LnR4UHJlYnVpbGQ/LnR4SGV4O1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBwYXJhbXM/LnBydjtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4UHJlYnVpbGQgcGFyYW1ldGVyOiBwYXJhbXMudHhQcmVidWlsZC50eEhleCcpO1xuICAgIH1cbiAgICBpZiAoIXByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcHJ2IHBhcmFtZXRlcjogcGFyYW1zLnBydicpO1xuICAgIH1cbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGF3YWl0IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHBhcmFtcy5wcnYgfSk7XG4gICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeCxcbiAgICB9O1xuICB9XG5cbiAgaXNWYWxpZFB1YihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHVibGljS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkUHJ2KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMudHNzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXRIYXNoRnVuY3Rpb24oKTogSGFzaCB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShoZXhFbmNvZGVkUHVibGljS2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIHByb3RlY3RlZCBnZXRQdWJsaWNOb2RlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5pY3BOb2RlVXJsO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICAvLyB0aGlzIG1ldGhvZCBjYWxscyB0aGUgcHVibGljIG5vZGUgdG8gYnJvYWRjYXN0IHRoZSB0cmFuc2FjdGlvbiBhbmQgbm90IHRoZSByb3NldHRhIG5vZGVcbiAgcHVibGljIGFzeW5jIGJyb2FkY2FzdFRyYW5zYWN0aW9uKHBheWxvYWQ6IEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5nZXRQdWJsaWNOb2RlQnJvYWRjYXN0RW5kcG9pbnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBib2R5Qnl0ZXMgPSB1dGlscy5ibG9iRnJvbUhleChwYXlsb2FkLnNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbik7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoZW5kcG9pbnQsIGJvZHlCeXRlcywge1xuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vY2JvcicgfSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLCAvLyBUaGlzIGVuc3VyZXMgeW91IGdldCBhIEJ1ZmZlciwgbm90IGEgc3RyaW5nXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gYnJvYWRjYXN0IGZhaWxlZCB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9IC0gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWNvZGVkUmVzcG9uc2UgPSB1dGlscy5jYm9yRGVjb2RlKHJlc3BvbnNlLmRhdGEpIGFzIFB1YmxpY05vZGVTdWJtaXRSZXNwb25zZTtcblxuICAgICAgaWYgKGRlY29kZWRSZXNwb25zZS5zdGF0dXMgPT09ICdyZXBsaWVkJykge1xuICAgICAgICAvLyBpdCBpcyBjb25zaWRlcmVkIGEgc3VjY2VzcyBiZWNhdXNlIElDUCByZXR1cm5zIHJlc3BvbnNlIGluIGEgQ0JPUiBtYXAgd2l0aCBhIHN0YXR1cyBvZiAncmVwbGllZCdcbiAgICAgICAgcmV0dXJuIHt9OyAvLyByZXR1cm5lZCBlbXB0eSBvYmplY3QgYXMgSUNQIGRvZXMgbm90IHJldHVybiBhIHR4aWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCByZXNwb25zZSBzdGF0dXMgZnJvbSBub2RlOiAke2RlY29kZWRSZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb24gYnJvYWRjYXN0IGVycm9yOiAke2Vycm9yPy5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFB1YmxpY05vZGVCcm9hZGNhc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vZGVVcmwgPSB0aGlzLmdldFB1YmxpY05vZGVVcmwoKTtcbiAgICBjb25zdCBwcmluY2lwYWwgPSBQcmluY2lwYWwuZnJvbVVpbnQ4QXJyYXkoTEVER0VSX0NBTklTVEVSX0lEKTtcbiAgICBjb25zdCBjYW5pc3RlcklkSGV4ID0gcHJpbmNpcGFsLnRvVGV4dCgpO1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7bm9kZVVybH0ke1BVQkxJQ19OT0RFX1JFUVVFU1RfRU5EUE9JTlR9JHtjYW5pc3RlcklkSGV4fS9jYWxsYDtcbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgYWNjb3VudCBiYWxhbmNlIGZvciBhIGdpdmVuIHB1YmxpYyBrZXkuXG4gICAqIEBwYXJhbSBwdWJsaWNLZXlIZXggLSBIZXgtZW5jb2RlZCBwdWJsaWMga2V5IG9mIHRoZSBhY2NvdW50LlxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgYWNjb3VudCBiYWxhbmNlIGFzIGEgc3RyaW5nLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBiYWxhbmNlIGNvdWxkIG5vdCBiZSBmZXRjaGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFjY291bnRCYWxhbmNlKHB1YmxpY0tleUhleDogc3RyaW5nKTogUHJvbWlzZTxCaWdOdW1iZXI+IHtcbiAgICBjb25zdCBwcmluY2lwYWxJZCA9IHV0aWxzLmdldFByaW5jaXBhbElkRnJvbVB1YmxpY0tleShwdWJsaWNLZXlIZXgpLnRvVGV4dCgpO1xuICAgIGNvbnN0IGFnZW50ID0gbmV3IEljcEFnZW50KHRoaXMuZ2V0UHVibGljTm9kZVVybCgpKTtcbiAgICByZXR1cm4gYWdlbnQuZ2V0QmFsYW5jZShwcmluY2lwYWxJZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGZlZSBkYXRhIGZyb20gdGhlIElDUCBwdWJsaWMgbm9kZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgSWNwQWdlbnRgIHVzaW5nIHRoZSBwdWJsaWMgbm9kZSBVUkwsXG4gICAqIHRoZW4gcXVlcmllcyB0aGUgbm9kZSBmb3IgdGhlIGN1cnJlbnQgZmVlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGBCaWdOdW1iZXJgIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBmZWUuXG4gICAqIEB0aHJvd3MgV2lsbCBwcm9wYWdhdGUgYW55IGVycm9ycyBlbmNvdW50ZXJlZCB3aGlsZSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIElDUCBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEZlZURhdGEoKTogUHJvbWlzZTxCaWdOdW1iZXI+IHtcbiAgICBjb25zdCBhZ2VudCA9IG5ldyBJY3BBZ2VudCh0aGlzLmdldFB1YmxpY05vZGVVcmwoKSk7XG4gICAgcmV0dXJuIGF3YWl0IGFnZW50LmdldEZlZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyRmFjdG9yeSgpOiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2Ygc2lnbmF0dXJlcyBmb3IgdGhlIHByb3ZpZGVkIHBheWxvYWRzIHVzaW5nIE1QQ1xuICAgKlxuICAgKiBAcGFyYW0gcGF5bG9hZHNEYXRhIC0gVGhlIGRhdGEgY29udGFpbmluZyB0aGUgcGF5bG9hZHMgdG8gYmUgc2lnbmVkLlxuICAgKiBAcGFyYW0gc2VuZGVyUHVibGljS2V5IC0gVGhlIHB1YmxpYyBrZXkgb2YgdGhlIHNlbmRlciBpbiBoZXhhZGVjaW1hbCBmb3JtYXQuXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSBUaGUgdXNlcidzIGtleSBzaGFyZSBhcyBhIEJ1ZmZlci5cbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gVGhlIGJhY2t1cCBrZXkgc2hhcmUgYXMgYSBCdWZmZXIuXG4gICAqIEBwYXJhbSBjb21tb25LZXlDaGFpbiAtIFRoZSBjb21tb24ga2V5IGNoYWluIGlkZW50aWZpZXIgdXNlZCBmb3IgTVBDIHNpZ25pbmcuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGBTaWduYXR1cmVzYCBvYmplY3RzLCBlYWNoIGNvbnRhaW5pbmcgdGhlIHNpZ25pbmcgcGF5bG9hZCxcbiAgICogICAgICAgICAgc2lnbmF0dXJlIHR5cGUsIHB1YmxpYyBrZXksIGFuZCB0aGUgZ2VuZXJhdGVkIHNpZ25hdHVyZSBpbiBoZXhhZGVjaW1hbCBmb3JtYXQuXG4gICAqL1xuICBhc3luYyBzaWduYXR1cmVzKFxuICAgIHBheWxvYWRzRGF0YTogUGF5bG9hZHNEYXRhLFxuICAgIHNlbmRlclB1YmxpY0tleTogc3RyaW5nLFxuICAgIHVzZXJLZXlTaGFyZTogQnVmZmVyPEFycmF5QnVmZmVyTGlrZT4sXG4gICAgYmFja3VwS2V5U2hhcmU6IEJ1ZmZlcjxBcnJheUJ1ZmZlckxpa2U+LFxuICAgIGNvbW1vbktleUNoYWluOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxTaWduYXR1cmVzW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRzRGF0YS5wYXlsb2Fkc1swXSBhcyBTaWduaW5nUGF5bG9hZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShwYXlsb2FkLmhleF9ieXRlcywgJ2hleCcpO1xuICAgICAgY29uc3QgbWVzc2FnZUhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUobWVzc2FnZSkuZGlnZXN0KCk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBFQ0RTQVV0aWxzLnNpZ25SZWNvdmVyeU1wY1YyKG1lc3NhZ2VIYXNoLCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbik7XG4gICAgICBjb25zdCBzaWduYXR1cmVQYXlsb2FkOiBTaWduYXR1cmVzID0ge1xuICAgICAgICBzaWduaW5nX3BheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgIHNpZ25hdHVyZV90eXBlOiBwYXlsb2FkLnNpZ25hdHVyZV90eXBlLFxuICAgICAgICBwdWJsaWNfa2V5OiB7XG4gICAgICAgICAgaGV4X2J5dGVzOiBzZW5kZXJQdWJsaWNLZXksXG4gICAgICAgICAgY3VydmVfdHlwZTogQ3VydmVUeXBlLlNFQ1AyNTZLMSxcbiAgICAgICAgfSxcbiAgICAgICAgaGV4X2J5dGVzOiBzaWduYXR1cmUuciArIHNpZ25hdHVyZS5zLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtzaWduYXR1cmVQYXlsb2FkXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBnZW5lcmF0aW5nIHNpZ25hdHVyZXM6ICR7ZXJyb3IubWVzc2FnZSB8fCBlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeVRyYW5zYWN0aW9uIHwgVW5zaWduZWRTd2VlcFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiB8fCAhdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJlY292ZXJ5RGVzdGluYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gIXBhcmFtcy51c2VyS2V5ICYmICFwYXJhbXMuYmFja3VwS2V5ICYmICFwYXJhbXMud2FsbGV0UGFzc3BocmFzZTtcblxuICAgICAgbGV0IHB1YmxpY0tleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHVzZXJLZXlTaGFyZSwgYmFja3VwS2V5U2hhcmUsIGNvbW1vbktleUNoYWluO1xuICAgICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG5cbiAgICAgIGlmICghaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICAgIGlmICghcGFyYW1zLnVzZXJLZXkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdXNlcktleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJhbXMuYmFja3VwS2V5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJhbXMud2FsbGV0UGFzc3BocmFzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB3YWxsZXQgcGFzc3BocmFzZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlcktleSA9IHBhcmFtcy51c2VyS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIGNvbnN0IGJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcblxuICAgICAgICAoeyB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbiB9ID0gYXdhaXQgRUNEU0FVdGlscy5nZXRNcGNWMlJlY292ZXJ5S2V5U2hhcmVzKFxuICAgICAgICAgIHVzZXJLZXksXG4gICAgICAgICAgYmFja3VwS2V5LFxuICAgICAgICAgIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlXG4gICAgICAgICkpO1xuICAgICAgICBwdWJsaWNLZXkgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXlDaGFpbiwgUk9PVF9QQVRIKS5zbGljZSgwLCA2Nik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBiaXRnb0tleSA9IHBhcmFtcy5iaXRnb0tleTtcbiAgICAgICAgaWYgKCFiaXRnb0tleSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBiaXRnb0tleScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGRUcmVlID0gbmV3IG1wYy5TZWNwMjU2azFCaXAzMkhkVHJlZSgpO1xuICAgICAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuICAgICAgICBjb25zdCBkZXJpdmVkUHViID0gaGRUcmVlLnB1YmxpY0Rlcml2ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwazogbXBjLmJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShiaXRnb0tleS5zbGljZSgwLCA2NiksICdoZXgnKSksXG4gICAgICAgICAgICBjaGFpbmNvZGU6IG1wYy5iaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYml0Z29LZXkuc2xpY2UoNjYpLCAnaGV4JykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVyaXZhdGlvblBhdGhcbiAgICAgICAgKTtcblxuICAgICAgICBwdWJsaWNLZXkgPSBtcGMuYmlnSW50VG9CdWZmZXJCRShkZXJpdmVkUHViLnBrKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHVibGljS2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGRlcml2ZSBwdWJsaWMga2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBhd2FpdCB0aGlzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleSk7XG4gICAgICBjb25zdCBiYWxhbmNlID0gYXdhaXQgdGhpcy5nZXRBY2NvdW50QmFsYW5jZShwdWJsaWNLZXkpO1xuICAgICAgY29uc3QgZmVlRGF0YSA9IGF3YWl0IHRoaXMuZ2V0RmVlRGF0YSgpO1xuICAgICAgY29uc3QgYWN0dWFsQmFsYW5jZSA9IGJhbGFuY2UubWludXMoZmVlRGF0YSk7XG4gICAgICBpZiAoYWN0dWFsQmFsYW5jZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBoYXZlIGVub3VnaCBmdW5kcyB0byByZWNvdmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcihzZW5kZXJBZGRyZXNzLCBwdWJsaWNLZXkgYXMgc3RyaW5nKTtcbiAgICAgIHR4QnVpbGRlci5yZWNlaXZlcklkKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKTtcbiAgICAgIHR4QnVpbGRlci5hbW91bnQoYWN0dWFsQmFsYW5jZS50b1N0cmluZygpKTtcbiAgICAgIGlmIChwYXJhbXMubWVtbyAhPT0gdW5kZWZpbmVkICYmIHV0aWxzLnZhbGlkYXRlTWVtbyhwYXJhbXMubWVtbykpIHtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oTnVtYmVyKHBhcmFtcy5tZW1vKSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGlmICh0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhLnBheWxvYWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcGF5bG9hZHMgdG8gZ2VuZXJhdGUgc2lnbmF0dXJlcycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHhIZXg6IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uLFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IGF3YWl0IHRoaXMuc2lnbmF0dXJlcyhcbiAgICAgICAgdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgICBjb21tb25LZXlDaGFpblxuICAgICAgKTtcbiAgICAgIGlmICghc2lnbmF0dXJlcyB8fCBzaWduYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBzaWduYXR1cmVzJyk7XG4gICAgICB9XG4gICAgICB0eEJ1aWxkZXIudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZXMpO1xuICAgICAgdHhCdWlsZGVyLmNvbWJpbmUoKTtcbiAgICAgIGNvbnN0IGJyb2FkY2FzdGFibGVUeG4gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0VHJhbnNhY3Rpb24oeyBzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb246IGJyb2FkY2FzdGFibGVUeG4gfSk7XG4gICAgICBjb25zdCB0eElkID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLmlkO1xuICAgICAgY29uc3QgcmVjb3ZlcmVkVHJhbnNhY3Rpb246IFJlY292ZXJ5VHJhbnNhY3Rpb24gPSB7XG4gICAgICAgIGlkOiB0eElkLFxuICAgICAgICB0eDogYnJvYWRjYXN0YWJsZVR4bixcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVjb3ZlcmVkVHJhbnNhY3Rpb247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZHVyaW5nIElDUCByZWNvdmVyeTogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IG11bHRpU2lnVHlwZSwgcHJ2LCBwdWJsaWNLZXkgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlICE9PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aXNpZ3R5cGUgJyk7XG4gICAgfVxuICAgIGF1ZGl0RWNkc2FQcml2YXRlS2V5KHBydiBhcyBzdHJpbmcsIHB1YmxpY0tleSBhcyBzdHJpbmcpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
export declare class IcpAgent {
|
|
3
|
+
private readonly host;
|
|
4
|
+
constructor(host: string);
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new HTTP agent for communicating with the Internet Computer.
|
|
7
|
+
* @returns An instance of HttpAgent.
|
|
8
|
+
*/
|
|
9
|
+
private createAgent;
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves an instance of the ledger canister agent.
|
|
12
|
+
*
|
|
13
|
+
* This method creates a new agent using `createAgent()`, initializes a replica interface
|
|
14
|
+
* with the agent (configured for local use), and returns an `AgentCanister` instance
|
|
15
|
+
* for the ledger canister identified by `LEDGER_CANISTER_ID`.
|
|
16
|
+
*
|
|
17
|
+
* @returns {AgentCanister} An agent interface for interacting with the ledger canister.
|
|
18
|
+
*/
|
|
19
|
+
private getLedger;
|
|
20
|
+
/**
|
|
21
|
+
* Fetches the account balance for a given principal ID.
|
|
22
|
+
* @param principalId - The principal ID of the account.
|
|
23
|
+
* @returns Promise resolving to the account balance as a string.
|
|
24
|
+
* @throws Error if the balance could not be fetched.
|
|
25
|
+
*/
|
|
26
|
+
getBalance(principalId: string): Promise<BigNumber>;
|
|
27
|
+
/**
|
|
28
|
+
* Fetches the transaction fee from the ledger.
|
|
29
|
+
* @returns Promise resolving to the transaction fee as a string.
|
|
30
|
+
* @throws Error if the fee could not be fetched.
|
|
31
|
+
*/
|
|
32
|
+
getFee(): Promise<BigNumber>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=icpAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icpAgent.d.ts","sourceRoot":"","sources":["../../../src/lib/icpAgent.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,IAAI,EAAE,MAAM;IAIxB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;IAMjB;;;;;OAKG;IACU,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAmBhE;;;;OAIG;IACU,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;CAmB1C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IcpAgent = void 0;
|
|
7
|
+
const principal_1 = require("@dfinity/principal");
|
|
8
|
+
const ic0_1 = require("ic0");
|
|
9
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
10
|
+
const iface_1 = require("./iface");
|
|
11
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
12
|
+
class IcpAgent {
|
|
13
|
+
constructor(host) {
|
|
14
|
+
this.host = host;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new HTTP agent for communicating with the Internet Computer.
|
|
18
|
+
* @returns An instance of HttpAgent.
|
|
19
|
+
*/
|
|
20
|
+
createAgent() {
|
|
21
|
+
return new ic0_1.HttpAgent({
|
|
22
|
+
host: this.host,
|
|
23
|
+
fetch,
|
|
24
|
+
verifyQuerySignatures: false,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Retrieves an instance of the ledger canister agent.
|
|
29
|
+
*
|
|
30
|
+
* This method creates a new agent using `createAgent()`, initializes a replica interface
|
|
31
|
+
* with the agent (configured for local use), and returns an `AgentCanister` instance
|
|
32
|
+
* for the ledger canister identified by `LEDGER_CANISTER_ID`.
|
|
33
|
+
*
|
|
34
|
+
* @returns {AgentCanister} An agent interface for interacting with the ledger canister.
|
|
35
|
+
*/
|
|
36
|
+
getLedger() {
|
|
37
|
+
const agent = this.createAgent();
|
|
38
|
+
const ic = (0, ic0_1.replica)(agent, { local: true });
|
|
39
|
+
return ic(principal_1.Principal.fromUint8Array(iface_1.LEDGER_CANISTER_ID).toText());
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fetches the account balance for a given principal ID.
|
|
43
|
+
* @param principalId - The principal ID of the account.
|
|
44
|
+
* @returns Promise resolving to the account balance as a string.
|
|
45
|
+
* @throws Error if the balance could not be fetched.
|
|
46
|
+
*/
|
|
47
|
+
async getBalance(principalId) {
|
|
48
|
+
try {
|
|
49
|
+
if (!principalId) {
|
|
50
|
+
throw new Error('Principal ID is required');
|
|
51
|
+
}
|
|
52
|
+
const ledger = this.getLedger();
|
|
53
|
+
const account = {
|
|
54
|
+
owner: principal_1.Principal.fromText(principalId),
|
|
55
|
+
subaccount: [utils_1.default.hexToBytes(iface_1.DEFAULT_SUBACCOUNT)],
|
|
56
|
+
};
|
|
57
|
+
const balance = await ledger.call(iface_1.ACCOUNT_BALANCE_CALL, account);
|
|
58
|
+
return (0, bignumber_js_1.default)(balance);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
62
|
+
throw new Error(`Error fetching balance for principal ${principalId}: ${errorMessage}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Fetches the transaction fee from the ledger.
|
|
67
|
+
* @returns Promise resolving to the transaction fee as a string.
|
|
68
|
+
* @throws Error if the fee could not be fetched.
|
|
69
|
+
*/
|
|
70
|
+
async getFee() {
|
|
71
|
+
try {
|
|
72
|
+
const ledger = this.getLedger();
|
|
73
|
+
const metadata = await ledger.call(iface_1.METADATA_CALL);
|
|
74
|
+
const feeEntry = metadata.find((entry) => entry[0] === iface_1.ICRC1_FEE_KEY && entry[1]?.Nat !== undefined);
|
|
75
|
+
if (!feeEntry) {
|
|
76
|
+
throw new Error(`${iface_1.ICRC1_FEE_KEY} metadata not found or invalid format`);
|
|
77
|
+
}
|
|
78
|
+
return (0, bignumber_js_1.default)(feeEntry[1].Nat);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
82
|
+
throw new Error(`Error fetching transaction fee: ${errorMessage}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.IcpAgent = IcpAgent;
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwQWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2ljcEFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUErQztBQUMvQyw2QkFBd0Q7QUFDeEQsb0RBQTRCO0FBQzVCLG1DQUFxSDtBQUNySCxnRUFBcUM7QUFFckMsTUFBYSxRQUFRO0lBR25CLFlBQVksSUFBWTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssV0FBVztRQUNqQixPQUFPLElBQUksZUFBUyxDQUFDO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUs7WUFDTCxxQkFBcUIsRUFBRSxLQUFLO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFNBQVM7UUFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsTUFBTSxFQUFFLEdBQUcsSUFBQSxhQUFPLEVBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFFLENBQUMscUJBQVMsQ0FBQyxjQUFjLENBQUMsMEJBQWtCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBbUI7UUFDekMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE9BQU8sR0FBRztnQkFDZCxLQUFLLEVBQUUscUJBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUN0QyxVQUFVLEVBQUUsQ0FBQyxlQUFLLENBQUMsVUFBVSxDQUFDLDBCQUFrQixDQUFDLENBQUM7YUFDbkQsQ0FBQztZQUVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRSxPQUFPLElBQUEsc0JBQVMsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxXQUFXLEtBQUssWUFBWSxFQUFFLENBQUMsQ0FBQztRQUMxRixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsTUFBTTtRQUNqQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFhLENBQUMsQ0FBQztZQUVsRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUM1QixDQUFDLEtBQUssRUFBc0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxxQkFBYSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssU0FBUyxDQUN6RyxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxxQkFBYSx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFFRCxPQUFPLElBQUEsc0JBQVMsRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDOUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbkZELDRCQW1GQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByaW5jaXBhbCB9IGZyb20gJ0BkZmluaXR5L3ByaW5jaXBhbCc7XG5pbXBvcnQgeyBIdHRwQWdlbnQsIHJlcGxpY2EsIEFnZW50Q2FuaXN0ZXIgfSBmcm9tICdpYzAnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQUNDT1VOVF9CQUxBTkNFX0NBTEwsIExFREdFUl9DQU5JU1RFUl9JRCwgSUNSQzFfRkVFX0tFWSwgTUVUQURBVEFfQ0FMTCwgREVGQVVMVF9TVUJBQ0NPVU5UIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBJY3BBZ2VudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGhvc3Q6IHN0cmluZykge1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBIVFRQIGFnZW50IGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEludGVybmV0IENvbXB1dGVyLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiBIdHRwQWdlbnQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFnZW50KCk6IEh0dHBBZ2VudCB7XG4gICAgcmV0dXJuIG5ldyBIdHRwQWdlbnQoe1xuICAgICAgaG9zdDogdGhpcy5ob3N0LFxuICAgICAgZmV0Y2gsXG4gICAgICB2ZXJpZnlRdWVyeVNpZ25hdHVyZXM6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbGVkZ2VyIGNhbmlzdGVyIGFnZW50LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGFnZW50IHVzaW5nIGBjcmVhdGVBZ2VudCgpYCwgaW5pdGlhbGl6ZXMgYSByZXBsaWNhIGludGVyZmFjZVxuICAgKiB3aXRoIHRoZSBhZ2VudCAoY29uZmlndXJlZCBmb3IgbG9jYWwgdXNlKSwgYW5kIHJldHVybnMgYW4gYEFnZW50Q2FuaXN0ZXJgIGluc3RhbmNlXG4gICAqIGZvciB0aGUgbGVkZ2VyIGNhbmlzdGVyIGlkZW50aWZpZWQgYnkgYExFREdFUl9DQU5JU1RFUl9JRGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBZ2VudENhbmlzdGVyfSBBbiBhZ2VudCBpbnRlcmZhY2UgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGxlZGdlciBjYW5pc3Rlci5cbiAgICovXG4gIHByaXZhdGUgZ2V0TGVkZ2VyKCk6IEFnZW50Q2FuaXN0ZXIge1xuICAgIGNvbnN0IGFnZW50ID0gdGhpcy5jcmVhdGVBZ2VudCgpO1xuICAgIGNvbnN0IGljID0gcmVwbGljYShhZ2VudCwgeyBsb2NhbDogdHJ1ZSB9KTtcbiAgICByZXR1cm4gaWMoUHJpbmNpcGFsLmZyb21VaW50OEFycmF5KExFREdFUl9DQU5JU1RFUl9JRCkudG9UZXh0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGFjY291bnQgYmFsYW5jZSBmb3IgYSBnaXZlbiBwcmluY2lwYWwgSUQuXG4gICAqIEBwYXJhbSBwcmluY2lwYWxJZCAtIFRoZSBwcmluY2lwYWwgSUQgb2YgdGhlIGFjY291bnQuXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBhY2NvdW50IGJhbGFuY2UgYXMgYSBzdHJpbmcuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGJhbGFuY2UgY291bGQgbm90IGJlIGZldGNoZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QmFsYW5jZShwcmluY2lwYWxJZDogc3RyaW5nKTogUHJvbWlzZTxCaWdOdW1iZXI+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFwcmluY2lwYWxJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ByaW5jaXBhbCBJRCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGVkZ2VyID0gdGhpcy5nZXRMZWRnZXIoKTtcbiAgICAgIGNvbnN0IGFjY291bnQgPSB7XG4gICAgICAgIG93bmVyOiBQcmluY2lwYWwuZnJvbVRleHQocHJpbmNpcGFsSWQpLFxuICAgICAgICBzdWJhY2NvdW50OiBbdXRpbHMuaGV4VG9CeXRlcyhERUZBVUxUX1NVQkFDQ09VTlQpXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCBsZWRnZXIuY2FsbChBQ0NPVU5UX0JBTEFOQ0VfQ0FMTCwgYWNjb3VudCk7XG4gICAgICByZXR1cm4gQmlnTnVtYmVyKGJhbGFuY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZmV0Y2hpbmcgYmFsYW5jZSBmb3IgcHJpbmNpcGFsICR7cHJpbmNpcGFsSWR9OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgdHJhbnNhY3Rpb24gZmVlIGZyb20gdGhlIGxlZGdlci5cbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRyYW5zYWN0aW9uIGZlZSBhcyBhIHN0cmluZy5cbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgZmVlIGNvdWxkIG5vdCBiZSBmZXRjaGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEZlZSgpOiBQcm9taXNlPEJpZ051bWJlcj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsZWRnZXIgPSB0aGlzLmdldExlZGdlcigpO1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBsZWRnZXIuY2FsbChNRVRBREFUQV9DQUxMKTtcblxuICAgICAgY29uc3QgZmVlRW50cnkgPSBtZXRhZGF0YS5maW5kKFxuICAgICAgICAoZW50cnkpOiBlbnRyeSBpcyBbc3RyaW5nLCB7IE5hdDogc3RyaW5nIH1dID0+IGVudHJ5WzBdID09PSBJQ1JDMV9GRUVfS0VZICYmIGVudHJ5WzFdPy5OYXQgIT09IHVuZGVmaW5lZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFmZWVFbnRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7SUNSQzFfRkVFX0tFWX0gbWV0YWRhdGEgbm90IGZvdW5kIG9yIGludmFsaWQgZm9ybWF0YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCaWdOdW1iZXIoZmVlRW50cnlbMV0uTmF0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZldGNoaW5nIHRyYW5zYWN0aW9uIGZlZTogJHtlcnJvck1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/dist/src/lib/iface.d.ts
CHANGED
|
@@ -6,6 +6,9 @@ export declare const ROOT_PATH = "m/0";
|
|
|
6
6
|
export declare const ACCOUNT_BALANCE_CALL = "icrc1_balance_of";
|
|
7
7
|
export declare const PUBLIC_NODE_REQUEST_ENDPOINT = "/api/v3/canister/";
|
|
8
8
|
export declare const DEFAULT_MEMO = 0;
|
|
9
|
+
export declare const ICRC1_FEE_KEY = "icrc1:fee";
|
|
10
|
+
export declare const METADATA_CALL = "icrc1_metadata";
|
|
11
|
+
export declare const DEFAULT_SUBACCOUNT = "0000000000000000000000000000000000000000000000000000000000000000";
|
|
9
12
|
export declare enum RequestType {
|
|
10
13
|
CALL = "call"
|
|
11
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,IAAI,0BAA0B,EACpD,eAAe,IAAI,oBAAoB,EACxC,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,eAAe,QAAwB,CAAC;AACrD,eAAO,MAAM,eAAe,QAAoB,CAAC;AACjD,eAAO,MAAM,kBAAkB,yBAAiD,CAAC;AACjF,eAAO,MAAM,SAAS,QAAQ,CAAC;AAC/B,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AACvD,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAChE,eAAO,MAAM,YAAY,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/iface.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Network = exports.MethodName = exports.OperationType = exports.CurveType = exports.SignatureType = exports.RequestType = exports.DEFAULT_MEMO = exports.PUBLIC_NODE_REQUEST_ENDPOINT = exports.ACCOUNT_BALANCE_CALL = exports.ROOT_PATH = exports.LEDGER_CANISTER_ID = exports.PERMITTED_DRIFT = exports.MAX_INGRESS_TTL = void 0;
|
|
3
|
+
exports.Network = exports.MethodName = exports.OperationType = exports.CurveType = exports.SignatureType = exports.RequestType = exports.DEFAULT_SUBACCOUNT = exports.METADATA_CALL = exports.ICRC1_FEE_KEY = exports.DEFAULT_MEMO = exports.PUBLIC_NODE_REQUEST_ENDPOINT = exports.ACCOUNT_BALANCE_CALL = exports.ROOT_PATH = exports.LEDGER_CANISTER_ID = exports.PERMITTED_DRIFT = exports.MAX_INGRESS_TTL = void 0;
|
|
4
4
|
exports.MAX_INGRESS_TTL = 5 * 60 * 1000000000; // 5 minutes in nanoseconds
|
|
5
5
|
exports.PERMITTED_DRIFT = 60 * 1000000000; // 60 seconds in nanoseconds
|
|
6
6
|
exports.LEDGER_CANISTER_ID = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 2, 1, 1]); // Uint8Array value for "00000000000000020101" and the string value is "ryjl3-tyaaa-aaaaa-aaaba-cai"
|
|
@@ -8,6 +8,9 @@ exports.ROOT_PATH = 'm/0';
|
|
|
8
8
|
exports.ACCOUNT_BALANCE_CALL = 'icrc1_balance_of';
|
|
9
9
|
exports.PUBLIC_NODE_REQUEST_ENDPOINT = '/api/v3/canister/';
|
|
10
10
|
exports.DEFAULT_MEMO = 0; // default memo value is 0
|
|
11
|
+
exports.ICRC1_FEE_KEY = 'icrc1:fee';
|
|
12
|
+
exports.METADATA_CALL = 'icrc1_metadata';
|
|
13
|
+
exports.DEFAULT_SUBACCOUNT = '0000000000000000000000000000000000000000000000000000000000000000'; // default subaccount value is 0x
|
|
11
14
|
var RequestType;
|
|
12
15
|
(function (RequestType) {
|
|
13
16
|
RequestType["CALL"] = "call";
|
|
@@ -33,4 +36,4 @@ var Network;
|
|
|
33
36
|
(function (Network) {
|
|
34
37
|
Network["ID"] = "00000000000000020101";
|
|
35
38
|
})(Network || (exports.Network = Network = {}));
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUthLFFBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsVUFBWSxDQUFDLENBQUMsMkJBQTJCO0FBQ3BFLFFBQUEsZUFBZSxHQUFHLEVBQUUsR0FBRyxVQUFZLENBQUMsQ0FBQyw0QkFBNEI7QUFDakUsUUFBQSxrQkFBa0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvR0FBb0c7QUFDekssUUFBQSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLFFBQUEsb0JBQW9CLEdBQUcsa0JBQWtCLENBQUM7QUFDMUMsUUFBQSw0QkFBNEIsR0FBRyxtQkFBbUIsQ0FBQztBQUNuRCxRQUFBLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7QUFDNUMsUUFBQSxhQUFhLEdBQUcsV0FBVyxDQUFDO0FBQzVCLFFBQUEsYUFBYSxHQUFHLGdCQUFnQixDQUFDO0FBQ2pDLFFBQUEsa0JBQWtCLEdBQUcsa0VBQWtFLENBQUMsQ0FBQyxpQ0FBaUM7QUFFdkksSUFBWSxXQUVYO0FBRkQsV0FBWSxXQUFXO0lBQ3JCLDRCQUFhLENBQUE7QUFDZixDQUFDLEVBRlcsV0FBVywyQkFBWCxXQUFXLFFBRXRCO0FBRUQsSUFBWSxhQUVYO0FBRkQsV0FBWSxhQUFhO0lBQ3ZCLGdDQUFlLENBQUE7QUFDakIsQ0FBQyxFQUZXLGFBQWEsNkJBQWIsYUFBYSxRQUV4QjtBQUVELElBQVksU0FFWDtBQUZELFdBQVksU0FBUztJQUNuQixvQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBRlcsU0FBUyx5QkFBVCxTQUFTLFFBRXBCO0FBRUQsSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3ZCLDRDQUEyQixDQUFBO0lBQzNCLDRCQUFXLENBQUE7QUFDYixDQUFDLEVBSFcsYUFBYSw2QkFBYixhQUFhLFFBR3hCO0FBRUQsSUFBWSxVQUVYO0FBRkQsV0FBWSxVQUFVO0lBQ3BCLGlDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFGVyxVQUFVLDBCQUFWLFVBQVUsUUFFckI7QUFFRCxJQUFZLE9BRVg7QUFGRCxXQUFZLE9BQU87SUFDakIsc0NBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQUZXLE9BQU8sdUJBQVAsT0FBTyxRQUVsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uVHlwZSBhcyBCaXRHb1RyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuZXhwb3J0IGNvbnN0IE1BWF9JTkdSRVNTX1RUTCA9IDUgKiA2MCAqIDEwMDBfMDAwXzAwMDsgLy8gNSBtaW51dGVzIGluIG5hbm9zZWNvbmRzXG5leHBvcnQgY29uc3QgUEVSTUlUVEVEX0RSSUZUID0gNjAgKiAxMDAwXzAwMF8wMDA7IC8vIDYwIHNlY29uZHMgaW4gbmFub3NlY29uZHNcbmV4cG9ydCBjb25zdCBMRURHRVJfQ0FOSVNURVJfSUQgPSBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMSwgMV0pOyAvLyBVaW50OEFycmF5IHZhbHVlIGZvciBcIjAwMDAwMDAwMDAwMDAwMDIwMTAxXCIgYW5kIHRoZSBzdHJpbmcgdmFsdWUgaXMgXCJyeWpsMy10eWFhYS1hYWFhYS1hYWFiYS1jYWlcIlxuZXhwb3J0IGNvbnN0IFJPT1RfUEFUSCA9ICdtLzAnO1xuZXhwb3J0IGNvbnN0IEFDQ09VTlRfQkFMQU5DRV9DQUxMID0gJ2ljcmMxX2JhbGFuY2Vfb2YnO1xuZXhwb3J0IGNvbnN0IFBVQkxJQ19OT0RFX1JFUVVFU1RfRU5EUE9JTlQgPSAnL2FwaS92My9jYW5pc3Rlci8nO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUVNTyA9IDA7IC8vIGRlZmF1bHQgbWVtbyB2YWx1ZSBpcyAwXG5leHBvcnQgY29uc3QgSUNSQzFfRkVFX0tFWSA9ICdpY3JjMTpmZWUnO1xuZXhwb3J0IGNvbnN0IE1FVEFEQVRBX0NBTEwgPSAnaWNyYzFfbWV0YWRhdGEnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1VCQUNDT1VOVCA9ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJzsgLy8gZGVmYXVsdCBzdWJhY2NvdW50IHZhbHVlIGlzIDB4XG5cbmV4cG9ydCBlbnVtIFJlcXVlc3RUeXBlIHtcbiAgQ0FMTCA9ICdjYWxsJyxcbn1cblxuZXhwb3J0IGVudW0gU2lnbmF0dXJlVHlwZSB7XG4gIEVDRFNBID0gJ2VjZHNhJyxcbn1cblxuZXhwb3J0IGVudW0gQ3VydmVUeXBlIHtcbiAgU0VDUDI1NksxID0gJ3NlY3AyNTZrMScsXG59XG5cbmV4cG9ydCBlbnVtIE9wZXJhdGlvblR5cGUge1xuICBUUkFOU0FDVElPTiA9ICdUUkFOU0FDVElPTicsXG4gIEZFRSA9ICdGRUUnLFxufVxuXG5leHBvcnQgZW51bSBNZXRob2ROYW1lIHtcbiAgU0VORF9QQiA9ICdzZW5kX3BiJywgLy8gc2VuZF9wYiBpcyB0aGUgbWV0aG9kIG5hbWUgZm9yIElDUCB0cmFuc2ZlciB0cmFuc2FjdGlvblxufVxuXG5leHBvcnQgZW51bSBOZXR3b3JrIHtcbiAgSUQgPSAnMDAwMDAwMDAwMDAwMDAwMjAxMDEnLCAvLyBJQ1AgZG9lcyBub3QgaGF2ZSBkaWZmZXJlbnQgbmV0d29yayBJRHMgZm9yIG1haW5uZXQgYW5kIHRlc3RuZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY3BUcmFuc2FjdGlvbkRhdGEge1xuICBzZW5kZXJBZGRyZXNzOiBzdHJpbmc7XG4gIHJlY2VpdmVyQWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgZmVlOiBzdHJpbmc7XG4gIHNlbmRlclB1YmxpY0tleUhleDogc3RyaW5nO1xuICBtZW1vOiBudW1iZXIgfCBCaWdJbnQ7IC8vIG1lbW8gaW4gc3RyaW5nIGlzIG5vdCBhY2NlcHRlZCBieSBJQ1AgY2hhaW4uXG4gIHRyYW5zYWN0aW9uVHlwZTogT3BlcmF0aW9uVHlwZTtcbiAgZXhwaXJ5VGltZTogbnVtYmVyIHwgQmlnSW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEljcFB1YmxpY0tleSB7XG4gIGhleF9ieXRlczogc3RyaW5nO1xuICBjdXJ2ZV90eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNwQWNjb3VudCB7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY3BDdXJyZW5jeSB7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBkZWNpbWFsczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEljcEFtb3VudCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBJY3BDdXJyZW5jeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY3BPcGVyYXRpb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGFjY291bnQ6IEljcEFjY291bnQ7XG4gIGFtb3VudDogSWNwQW1vdW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFEYXRhIHtcbiAgY3JlYXRlZF9hdF90aW1lOiBudW1iZXI7XG4gIG1lbW86IG51bWJlciB8IEJpZ0ludDsgLy8gbWVtbyBpbiBzdHJpbmcgaXMgbm90IGFjY2VwdGVkIGJ5IElDUCBjaGFpbi5cbiAgaW5ncmVzc19zdGFydD86IG51bWJlciB8IEJpZ0ludDsgLy8gaXQgc2hvdWxkIGJlIG5hbm8gc2Vjb25kc1xuICBpbmdyZXNzX2VuZD86IG51bWJlciB8IEJpZ0ludDsgLy8gaXQgc2hvdWxkIGJlIG5hbm8gc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEljcFRyYW5zYWN0aW9uIHtcbiAgcHVibGljX2tleXM6IEljcFB1YmxpY0tleVtdO1xuICBvcGVyYXRpb25zOiBJY3BPcGVyYXRpb25bXTtcbiAgbWV0YWRhdGE6IE1ldGFEYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFRyYW5zYWN0aW9uIHtcbiAgb3BlcmF0aW9uczogSWNwT3BlcmF0aW9uW107XG4gIGFjY291bnRfaWRlbnRpZmllcl9zaWduZXJzOiBJY3BBY2NvdW50W107XG4gIG1ldGFkYXRhOiBNZXRhRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY3BBY2NvdW50SWRlbnRpZmllciB7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kQXJncyB7XG4gIG1lbW86IHsgbWVtbzogbnVtYmVyIHwgQmlnSW50IH07XG4gIHBheW1lbnQ6IHsgcmVjZWl2ZXJHZXRzOiB7IGU4czogbnVtYmVyIH0gfTtcbiAgbWF4RmVlOiB7IGU4czogbnVtYmVyIH07XG4gIHRvOiB7IGhhc2g6IEJ1ZmZlciB9O1xuICBjcmVhdGVkQXRUaW1lOiB7IHRpbWVzdGFtcE5hbm9zOiBudW1iZXIgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2FuaXN0ZXJVcGRhdGUge1xuICBjYW5pc3Rlcl9pZDogVWludDhBcnJheTtcbiAgbWV0aG9kX25hbWU6IE1ldGhvZE5hbWU7XG4gIGFyZzogVWludDhBcnJheTtcbiAgc2VuZGVyOiBVaW50OEFycmF5O1xuICBpbmdyZXNzX2V4cGlyeTogYmlnaW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25pbmdQYXlsb2FkIHtcbiAgYWNjb3VudF9pZGVudGlmaWVyOiBJY3BBY2NvdW50SWRlbnRpZmllcjtcbiAgaGV4X2J5dGVzOiBzdHJpbmc7XG4gIHNpZ25hdHVyZV90eXBlOiBTaWduYXR1cmVUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheWxvYWRzRGF0YSB7XG4gIHBheWxvYWRzOiBTaWduaW5nUGF5bG9hZFtdO1xuICB1bnNpZ25lZF90cmFuc2FjdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hdHVyZXMge1xuICBzaWduaW5nX3BheWxvYWQ6IFNpZ25pbmdQYXlsb2FkO1xuICBzaWduYXR1cmVfdHlwZTogU2lnbmF0dXJlVHlwZTtcbiAgcHVibGljX2tleTogSWNwUHVibGljS2V5O1xuICBoZXhfYnl0ZXM6IHN0cmluZztcbn1cblxuLy9Ub2RvOiByZW1vdmUgdGhpcyBpbnRlcmZhY2Ugd2hlbiB3ZSBoYXZlIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhlIHRyYW5zYWN0aW9uXG5leHBvcnQgaW50ZXJmYWNlIENib3JVbnNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgdXBkYXRlczogW0h0dHBDYW5pc3RlclVwZGF0ZV1bXTtcbiAgaW5ncmVzc19leHBpcmllczogYmlnaW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlRW52ZWxvcGUge1xuICBjb250ZW50OiBIdHRwQ2FuaXN0ZXJVcGRhdGUgJiB7XG4gICAgcmVxdWVzdF90eXBlOiBSZXF1ZXN0VHlwZTtcbiAgfTtcbiAgc2VuZGVyX3B1YmtleTogVWludDhBcnJheTtcbiAgc2VuZGVyX3NpZzogVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0RW52ZWxvcGUge1xuICB1cGRhdGU6IFVwZGF0ZUVudmVsb3BlO1xufVxuXG4vKipcbiAqIFRoZSB0cmFuc2FjdGlvbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIHRvSnNvbigpIGZ1bmN0aW9uIG9mIGEgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeERhdGEge1xuICBpZD86IHN0cmluZztcbiAgc2VuZGVyOiBzdHJpbmc7XG4gIHNlbmRlclB1YmxpY0tleTogc3RyaW5nO1xuICByZWNpcGllbnQ6IHN0cmluZztcbiAgbWVtbz86IG51bWJlciB8IEJpZ0ludDtcbiAgZmVlQW1vdW50OiBzdHJpbmc7XG4gIGV4cGlyYXRpb25UaW1lOiBudW1iZXIgfCBCaWdJbnQ7XG4gIHR5cGU/OiBCaXRHb1RyYW5zYWN0aW9uVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY3BUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBzZW5kZXI/OiBzdHJpbmc7XG4gIHR5cGU/OiBCaXRHb1RyYW5zYWN0aW9uVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrSWRlbnRpZmllciB7XG4gIGJsb2NrY2hhaW46IHN0cmluZztcbiAgbmV0d29yazogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhd1RyYW5zYWN0aW9uIHtcbiAgc2VyaWFsaXplZFR4SGV4OiBQYXlsb2Fkc0RhdGE7XG4gIHB1YmxpY0tleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5T3B0aW9ucyB7XG4gIHVzZXJLZXk6IHN0cmluZzsgLy8gQm94IEFcbiAgYmFja3VwS2V5OiBzdHJpbmc7IC8vIEJveCBCXG4gIGJpdGdvS2V5Pzogc3RyaW5nO1xuICByb290QWRkcmVzcz86IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIG1lbW8/OiBudW1iZXIgfCBCaWdJbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcnlUcmFuc2FjdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIHR4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zaWduZWRTd2VlcFJlY292ZXJ5VHJhbnNhY3Rpb24ge1xuICB0eEhleDogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljTm9kZVN1Ym1pdFJlc3BvbnNlIHtcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudElkZW50aWZpZXJIYXNoIHtcbiAgaGFzaDogQnVmZmVyPEFycmF5QnVmZmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkhleFBhcmFtcyB7XG4gIHRyYW5zYWN0aW9uSGV4OiBzdHJpbmc7XG4gIHNpZ25hYmxlSGV4Pzogc3RyaW5nO1xufVxuIl19
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { BaseKey, BaseTransaction } from '@bitgo/sdk-core';
|
|
2
2
|
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
3
3
|
import { IcpTransaction, IcpTransactionData, PayloadsData, Signatures, TxData, IcpTransactionExplanation, ParsedTransaction } from './iface';
|
|
4
|
-
import { Utils } from './utils';
|
|
5
4
|
export declare class Transaction extends BaseTransaction {
|
|
6
5
|
protected _icpTransactionData: IcpTransactionData;
|
|
7
6
|
protected _icpTransaction: IcpTransaction;
|
|
@@ -9,8 +8,7 @@ export declare class Transaction extends BaseTransaction {
|
|
|
9
8
|
protected _signedTransaction: string;
|
|
10
9
|
protected _signaturePayload: Signatures[];
|
|
11
10
|
protected _createdTimestamp: number | bigint | undefined;
|
|
12
|
-
|
|
13
|
-
constructor(_coinConfig: Readonly<CoinConfig>, utils: Utils);
|
|
11
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
14
12
|
get icpTransactionData(): IcpTransactionData;
|
|
15
13
|
set icpTransactionData(icpTransactionData: IcpTransactionData);
|
|
16
14
|
get icpTransaction(): IcpTransaction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAKhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,YAAY,EAEZ,UAAU,EACV,MAAM,EACN,yBAAyB,EAGzB,iBAAiB,EAOlB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAKhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,YAAY,EAEZ,UAAU,EACV,MAAM,EACN,yBAAyB,EAGzB,iBAAiB,EAOlB,MAAM,SAAS,CAAC;AAGjB,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;IAClD,SAAS,CAAC,eAAe,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC;IACtC,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAC1C,SAAS,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;gBAE7C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,kBAAkB,IAAI,kBAAkB,CAE3C;IAED,IAAI,kBAAkB,CAAC,kBAAkB,EAAE,kBAAkB,EAE5D;IAED,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED,IAAI,cAAc,CAAC,cAAc,EAAE,cAAc,EAEhD;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAEnC;IAED,IAAI,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAEtC;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,YAAY,CAAC,YAAY,EAAE,YAAY,EAE1C;IAED,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,EAE5C;IAED,IAAI,gBAAgB,IAAI,MAAM,GAAG,MAAM,GAAG,SAAS,CAElD;IAEK,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC/D,YAAY,CAAC,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI;IAanD,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAyBhB,kBAAkB;IAClB,kBAAkB,IAAI,yBAAyB;IAwB/C;;;;;OAKG;IACH,0BAA0B,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,yBAAyB;IAcnG,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,SAAS,IAAI,MAAM;IAIb,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAQpE,8BAA8B;IAgEtC,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAOhF,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;CAQ9B"}
|