@bitgo-beta/sdk-coin-stx 1.4.3-alpha.43 → 1.4.3-alpha.430
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/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -9
- package/dist/src/lib/abstractContractBuilder.js +2 -2
- package/dist/src/lib/constants.d.ts +2 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +5 -3
- package/dist/src/lib/contractBuilder.js +10 -10
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts +62 -0
- package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/fungibleTokenTransferBuilder.js +131 -0
- package/dist/src/lib/iface.d.ts +56 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.js +18 -19
- package/dist/src/lib/sendmanyBuilder.js +11 -11
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +31 -15
- package/dist/src/lib/transactionBuilder.js +12 -12
- 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 +9 -2
- package/dist/src/lib/transferBuilder.js +4 -4
- package/dist/src/lib/utils.d.ts +25 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +141 -62
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sip10Token.d.ts +22 -0
- package/dist/src/sip10Token.d.ts.map +1 -0
- package/dist/src/sip10Token.js +128 -0
- package/dist/src/stx.d.ts +146 -2
- package/dist/src/stx.d.ts.map +1 -1
- package/dist/src/stx.js +420 -11
- package/dist/src/tstx.js +1 -1
- package/dist/test/fixtures.d.ts +119 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +147 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +144 -0
- package/dist/test/unit/resources.d.ts +97 -0
- package/dist/test/unit/resources.d.ts.map +1 -0
- package/dist/test/unit/resources.js +144 -0
- package/dist/test/unit/sip10Token.d.ts +2 -0
- package/dist/test/unit/sip10Token.d.ts.map +1 -0
- package/dist/test/unit/sip10Token.js +374 -0
- package/dist/test/unit/stx.d.ts +2 -0
- package/dist/test/unit/stx.d.ts.map +1 -0
- package/dist/test/unit/stx.js +470 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +83 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.js +421 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +187 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +140 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +347 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +326 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +13 -11
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -127
package/dist/src/lib/utils.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,26 +15,65 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
21
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
37
|
};
|
|
24
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.
|
|
39
|
+
exports.bufferToHexPrefixString = bufferToHexPrefixString;
|
|
40
|
+
exports.removeHexPrefix = removeHexPrefix;
|
|
41
|
+
exports.getTxSenderAddress = getTxSenderAddress;
|
|
42
|
+
exports.isValidAmount = isValidAmount;
|
|
43
|
+
exports.isValidAddress = isValidAddress;
|
|
44
|
+
exports.isValidTransactionId = isValidTransactionId;
|
|
45
|
+
exports.isValidPublicKey = isValidPublicKey;
|
|
46
|
+
exports.isValidPrivateKey = isValidPrivateKey;
|
|
47
|
+
exports.isValidRawTransaction = isValidRawTransaction;
|
|
48
|
+
exports.isValidMemo = isValidMemo;
|
|
49
|
+
exports.isValidContractAddress = isValidContractAddress;
|
|
50
|
+
exports.isValidContractFunctionName = isValidContractFunctionName;
|
|
51
|
+
exports.unpadMemo = unpadMemo;
|
|
52
|
+
exports.getSTXAddressFromPubKeys = getSTXAddressFromPubKeys;
|
|
53
|
+
exports.signMessage = signMessage;
|
|
54
|
+
exports.verifySignature = verifySignature;
|
|
55
|
+
exports.getAddressDetails = getAddressDetails;
|
|
56
|
+
exports.normalizeAddress = normalizeAddress;
|
|
57
|
+
exports.isValidAddressWithPaymentId = isValidAddressWithPaymentId;
|
|
58
|
+
exports.stringifyCv = stringifyCv;
|
|
59
|
+
exports.functionArgsToSendParams = functionArgsToSendParams;
|
|
60
|
+
exports.functionArgsToTokenTransferParams = functionArgsToTokenTransferParams;
|
|
61
|
+
exports.getAddressVersion = getAddressVersion;
|
|
62
|
+
exports.xpubToSTXPubkey = xpubToSTXPubkey;
|
|
63
|
+
exports.getBaseAddress = getBaseAddress;
|
|
64
|
+
exports.isSameBaseAddress = isSameBaseAddress;
|
|
65
|
+
exports.findTokenNameByContract = findTokenNameByContract;
|
|
66
|
+
exports.findContractTokenNameUsingContract = findContractTokenNameUsingContract;
|
|
67
|
+
exports.getMemoIdAndBaseAddressFromAddress = getMemoIdAndBaseAddressFromAddress;
|
|
26
68
|
const url = __importStar(require("url"));
|
|
27
69
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
28
70
|
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
29
71
|
const transactions_1 = require("@stacks/transactions");
|
|
30
|
-
const
|
|
72
|
+
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
31
73
|
const _ = __importStar(require("lodash"));
|
|
32
74
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
33
75
|
const _1 = require(".");
|
|
76
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
34
77
|
const constants_1 = require("./constants");
|
|
35
78
|
/**
|
|
36
79
|
* Encodes a buffer as a "0x" prefixed lower-case hex string.
|
|
@@ -39,9 +82,8 @@ const constants_1 = require("./constants");
|
|
|
39
82
|
* @returns {string} - the hexadecimal string prefixed with "0x"
|
|
40
83
|
*/
|
|
41
84
|
function bufferToHexPrefixString(buff) {
|
|
42
|
-
return ethereumjs_util_1.bufferToHex(buff);
|
|
85
|
+
return (0, ethereumjs_util_1.bufferToHex)(buff);
|
|
43
86
|
}
|
|
44
|
-
exports.bufferToHexPrefixString = bufferToHexPrefixString;
|
|
45
87
|
/**
|
|
46
88
|
* Remove the "0x" prefix from the given string, if present.
|
|
47
89
|
*
|
|
@@ -49,9 +91,8 @@ exports.bufferToHexPrefixString = bufferToHexPrefixString;
|
|
|
49
91
|
* @returns {string} - the hexadecimal string without a leading "0x"
|
|
50
92
|
*/
|
|
51
93
|
function removeHexPrefix(hex) {
|
|
52
|
-
return ethereumjs_util_1.stripHexPrefix(hex);
|
|
94
|
+
return (0, ethereumjs_util_1.stripHexPrefix)(hex);
|
|
53
95
|
}
|
|
54
|
-
exports.removeHexPrefix = removeHexPrefix;
|
|
55
96
|
/**
|
|
56
97
|
* Get stacks address from public key hash
|
|
57
98
|
*
|
|
@@ -64,9 +105,9 @@ function getAddressFromPublicKeyHash(publicKeyHash, hashMode, transactionVersion
|
|
|
64
105
|
if (publicKeyHash.length !== 20) {
|
|
65
106
|
throw new Error('expected 20-byte pubkeyhash');
|
|
66
107
|
}
|
|
67
|
-
const addrVer = transactions_1.addressHashModeToVersion(hashMode, transactionVersion);
|
|
68
|
-
const addr = transactions_1.addressFromVersionHash(addrVer, publicKeyHash.toString('hex'));
|
|
69
|
-
const addrString = transactions_1.addressToString(addr);
|
|
108
|
+
const addrVer = (0, transactions_1.addressHashModeToVersion)(hashMode, transactionVersion);
|
|
109
|
+
const addr = (0, transactions_1.addressFromVersionHash)(addrVer, publicKeyHash.toString('hex'));
|
|
110
|
+
const addrString = (0, transactions_1.addressToString)(addr);
|
|
70
111
|
return addrString;
|
|
71
112
|
}
|
|
72
113
|
/**
|
|
@@ -81,7 +122,6 @@ function getTxSenderAddress(tx) {
|
|
|
81
122
|
else
|
|
82
123
|
throw new Error('spendingCondition should not be null');
|
|
83
124
|
}
|
|
84
|
-
exports.getTxSenderAddress = getTxSenderAddress;
|
|
85
125
|
/**
|
|
86
126
|
* Returns whether or not the string is a valid amount number
|
|
87
127
|
*
|
|
@@ -92,7 +132,6 @@ function isValidAmount(amount) {
|
|
|
92
132
|
const bigNumberAmount = new bignumber_js_1.default(amount);
|
|
93
133
|
return bigNumberAmount.isInteger() && bigNumberAmount.isGreaterThanOrEqualTo(0);
|
|
94
134
|
}
|
|
95
|
-
exports.isValidAmount = isValidAmount;
|
|
96
135
|
/**
|
|
97
136
|
* Returns whether or not the string is a valid protocol address
|
|
98
137
|
*
|
|
@@ -100,9 +139,8 @@ exports.isValidAmount = isValidAmount;
|
|
|
100
139
|
* @returns {boolean} - the validation result
|
|
101
140
|
*/
|
|
102
141
|
function isValidAddress(address) {
|
|
103
|
-
return transactions_1.validateStacksAddress(address);
|
|
142
|
+
return (0, transactions_1.validateStacksAddress)(address);
|
|
104
143
|
}
|
|
105
|
-
exports.isValidAddress = isValidAddress;
|
|
106
144
|
/**
|
|
107
145
|
* Returns whether or not the string is a valid protocol transaction id or not.
|
|
108
146
|
*
|
|
@@ -121,7 +159,6 @@ function isValidTransactionId(txId) {
|
|
|
121
159
|
return false;
|
|
122
160
|
return allHexChars(noPrefix);
|
|
123
161
|
}
|
|
124
|
-
exports.isValidTransactionId = isValidTransactionId;
|
|
125
162
|
/**
|
|
126
163
|
* Returns whether or not the string is a valid protocol public key or
|
|
127
164
|
* extended public key.
|
|
@@ -133,7 +170,7 @@ exports.isValidTransactionId = isValidTransactionId;
|
|
|
133
170
|
* @returns {boolean} - the validation result
|
|
134
171
|
*/
|
|
135
172
|
function isValidPublicKey(pub) {
|
|
136
|
-
if (sdk_core_1.isValidXpub(pub))
|
|
173
|
+
if ((0, sdk_core_1.isValidXpub)(pub))
|
|
137
174
|
return true;
|
|
138
175
|
if (pub.length !== 66 && pub.length !== 130)
|
|
139
176
|
return false;
|
|
@@ -147,17 +184,14 @@ function isValidPublicKey(pub) {
|
|
|
147
184
|
if (!allHexChars(pub))
|
|
148
185
|
return false;
|
|
149
186
|
// validate the public key
|
|
150
|
-
const secp256k1 = new elliptic_1.ec('secp256k1');
|
|
151
187
|
try {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return result;
|
|
188
|
+
secp256k1_1.secp256k1.ProjectivePoint.fromHex(pub);
|
|
189
|
+
return true;
|
|
155
190
|
}
|
|
156
191
|
catch (e) {
|
|
157
192
|
return false;
|
|
158
193
|
}
|
|
159
194
|
}
|
|
160
|
-
exports.isValidPublicKey = isValidPublicKey;
|
|
161
195
|
/**
|
|
162
196
|
* Returns whether or not the string is a valid protocol private key, or extended
|
|
163
197
|
* private key.
|
|
@@ -170,7 +204,7 @@ exports.isValidPublicKey = isValidPublicKey;
|
|
|
170
204
|
* @returns {boolean} - the validation result
|
|
171
205
|
*/
|
|
172
206
|
function isValidPrivateKey(prv) {
|
|
173
|
-
if (sdk_core_1.isValidXprv(prv))
|
|
207
|
+
if ((0, sdk_core_1.isValidXprv)(prv))
|
|
174
208
|
return true;
|
|
175
209
|
if (prv.length !== 64 && prv.length !== 66)
|
|
176
210
|
return false;
|
|
@@ -178,7 +212,6 @@ function isValidPrivateKey(prv) {
|
|
|
178
212
|
return false;
|
|
179
213
|
return allHexChars(prv);
|
|
180
214
|
}
|
|
181
|
-
exports.isValidPrivateKey = isValidPrivateKey;
|
|
182
215
|
/**
|
|
183
216
|
* Returns whether or not the string is a composed of hex chars only
|
|
184
217
|
*
|
|
@@ -197,7 +230,7 @@ function allHexChars(maybe) {
|
|
|
197
230
|
function isValidRawTransaction(rawTransaction) {
|
|
198
231
|
try {
|
|
199
232
|
if (typeof rawTransaction === 'string') {
|
|
200
|
-
transactions_1.deserializeTransaction(transactions_1.BufferReader.fromBuffer(Buffer.from(removeHexPrefix(rawTransaction), 'hex')));
|
|
233
|
+
(0, transactions_1.deserializeTransaction)(transactions_1.BufferReader.fromBuffer(Buffer.from(removeHexPrefix(rawTransaction), 'hex')));
|
|
201
234
|
}
|
|
202
235
|
else {
|
|
203
236
|
return false;
|
|
@@ -208,7 +241,6 @@ function isValidRawTransaction(rawTransaction) {
|
|
|
208
241
|
}
|
|
209
242
|
return true;
|
|
210
243
|
}
|
|
211
|
-
exports.isValidRawTransaction = isValidRawTransaction;
|
|
212
244
|
/**
|
|
213
245
|
* Returns whether or not the memo string is valid
|
|
214
246
|
*
|
|
@@ -217,14 +249,13 @@ exports.isValidRawTransaction = isValidRawTransaction;
|
|
|
217
249
|
*/
|
|
218
250
|
function isValidMemo(memo) {
|
|
219
251
|
try {
|
|
220
|
-
transactions_1.createMemoString(memo);
|
|
252
|
+
(0, transactions_1.createMemoString)(memo);
|
|
221
253
|
}
|
|
222
254
|
catch (e) {
|
|
223
255
|
return false;
|
|
224
256
|
}
|
|
225
257
|
return true;
|
|
226
258
|
}
|
|
227
|
-
exports.isValidMemo = isValidMemo;
|
|
228
259
|
/**
|
|
229
260
|
* Checks for valid contract address
|
|
230
261
|
*
|
|
@@ -235,7 +266,6 @@ exports.isValidMemo = isValidMemo;
|
|
|
235
266
|
function isValidContractAddress(addr, network) {
|
|
236
267
|
return addr === network.stakingContractAddress || addr === network.sendmanymemoContractAddress;
|
|
237
268
|
}
|
|
238
|
-
exports.isValidContractAddress = isValidContractAddress;
|
|
239
269
|
/**
|
|
240
270
|
* Check if the name is one of valid contract names
|
|
241
271
|
*
|
|
@@ -245,7 +275,6 @@ exports.isValidContractAddress = isValidContractAddress;
|
|
|
245
275
|
function isValidContractFunctionName(name) {
|
|
246
276
|
return constants_1.VALID_CONTRACT_FUNCTION_NAMES.includes(name);
|
|
247
277
|
}
|
|
248
|
-
exports.isValidContractFunctionName = isValidContractFunctionName;
|
|
249
278
|
/**
|
|
250
279
|
* Unpads a memo string, so it removes nulls.
|
|
251
280
|
*
|
|
@@ -260,7 +289,6 @@ function unpadMemo(memo) {
|
|
|
260
289
|
return memo;
|
|
261
290
|
return memo.slice(0, end);
|
|
262
291
|
}
|
|
263
|
-
exports.unpadMemo = unpadMemo;
|
|
264
292
|
/**
|
|
265
293
|
* Generate a multisig address from multiple STX public keys
|
|
266
294
|
*
|
|
@@ -281,10 +309,9 @@ function getSTXAddressFromPubKeys(pubKeys, addressVersion = transactions_1.Addre
|
|
|
281
309
|
throw new Error('Number of signatures required must be lower or equal to the number of Public Keys');
|
|
282
310
|
}
|
|
283
311
|
const stxPubKeys = pubKeys.map(transactions_1.createStacksPublicKey);
|
|
284
|
-
const address = transactions_1.addressFromPublicKeys(addressVersion, addressHashMode, signaturesRequired, stxPubKeys);
|
|
285
|
-
return { address: transactions_1.addressToString(address), hash160: address.hash160 };
|
|
312
|
+
const address = (0, transactions_1.addressFromPublicKeys)(addressVersion, addressHashMode, signaturesRequired, stxPubKeys);
|
|
313
|
+
return { address: (0, transactions_1.addressToString)(address), hash160: address.hash160 };
|
|
286
314
|
}
|
|
287
|
-
exports.getSTXAddressFromPubKeys = getSTXAddressFromPubKeys;
|
|
288
315
|
/**
|
|
289
316
|
* signs a string message
|
|
290
317
|
*
|
|
@@ -295,13 +322,12 @@ exports.getSTXAddressFromPubKeys = getSTXAddressFromPubKeys;
|
|
|
295
322
|
function signMessage(keyPair, data) {
|
|
296
323
|
const prv = keyPair.getKeys().prv;
|
|
297
324
|
if (prv) {
|
|
298
|
-
return transactions_1.signWithKey(transactions_1.createStacksPrivateKey(prv), data).data;
|
|
325
|
+
return (0, transactions_1.signWithKey)((0, transactions_1.createStacksPrivateKey)(prv), data).data;
|
|
299
326
|
}
|
|
300
327
|
else {
|
|
301
328
|
throw new sdk_core_1.SigningError('Missing private key');
|
|
302
329
|
}
|
|
303
330
|
}
|
|
304
|
-
exports.signMessage = signMessage;
|
|
305
331
|
/**
|
|
306
332
|
* Verifies a signed message
|
|
307
333
|
*
|
|
@@ -324,11 +350,10 @@ function verifySignature(message, signature, publicKey) {
|
|
|
324
350
|
throw new sdk_core_1.UtilsError('Cannot verify empty messages');
|
|
325
351
|
// provided publicKey can be compressed or uncompressed
|
|
326
352
|
const keyEncoding = publicKey.length === 66 ? transactions_1.PubKeyEncoding.Compressed : transactions_1.PubKeyEncoding.Uncompressed;
|
|
327
|
-
const messageSig = transactions_1.createMessageSignature(signature);
|
|
328
|
-
const foundKey = transactions_1.publicKeyFromSignature(message, messageSig, keyEncoding);
|
|
353
|
+
const messageSig = (0, transactions_1.createMessageSignature)(signature);
|
|
354
|
+
const foundKey = (0, transactions_1.publicKeyFromSignature)(message, messageSig, keyEncoding);
|
|
329
355
|
return foundKey === publicKey;
|
|
330
356
|
}
|
|
331
|
-
exports.verifySignature = verifySignature;
|
|
332
357
|
/**
|
|
333
358
|
* Process address into address and memo id
|
|
334
359
|
*
|
|
@@ -363,7 +388,6 @@ function getAddressDetails(address) {
|
|
|
363
388
|
memoId,
|
|
364
389
|
};
|
|
365
390
|
}
|
|
366
|
-
exports.getAddressDetails = getAddressDetails;
|
|
367
391
|
/**
|
|
368
392
|
* Validate and return address with appended memo id
|
|
369
393
|
*
|
|
@@ -383,7 +407,6 @@ function normalizeAddress({ address, memoId }) {
|
|
|
383
407
|
}
|
|
384
408
|
return address;
|
|
385
409
|
}
|
|
386
|
-
exports.normalizeAddress = normalizeAddress;
|
|
387
410
|
/**
|
|
388
411
|
* Return boolean indicating whether input is a valid address with memo id
|
|
389
412
|
*
|
|
@@ -399,7 +422,6 @@ function isValidAddressWithPaymentId(address) {
|
|
|
399
422
|
return false;
|
|
400
423
|
}
|
|
401
424
|
}
|
|
402
|
-
exports.isValidAddressWithPaymentId = isValidAddressWithPaymentId;
|
|
403
425
|
/**
|
|
404
426
|
* Return string representation of clarity value input
|
|
405
427
|
*
|
|
@@ -427,7 +449,6 @@ function stringifyCv(cv) {
|
|
|
427
449
|
return cv;
|
|
428
450
|
}
|
|
429
451
|
}
|
|
430
|
-
exports.stringifyCv = stringifyCv;
|
|
431
452
|
/**
|
|
432
453
|
* Parse functionArgs into send params for send-many-memo contract calls
|
|
433
454
|
*
|
|
@@ -439,21 +460,38 @@ function functionArgsToSendParams(args) {
|
|
|
439
460
|
throw new sdk_core_1.InvalidTransactionError("function args don't match send-many-memo type declaration");
|
|
440
461
|
}
|
|
441
462
|
return args[0].list.map((tuple) => {
|
|
442
|
-
var _a, _b, _c;
|
|
443
463
|
if (tuple.type !== transactions_1.ClarityType.Tuple ||
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
464
|
+
tuple.data.to?.type !== transactions_1.ClarityType.PrincipalStandard ||
|
|
465
|
+
tuple.data.ustx?.type !== transactions_1.ClarityType.UInt ||
|
|
466
|
+
tuple.data.memo?.type !== transactions_1.ClarityType.Buffer) {
|
|
447
467
|
throw new sdk_core_1.InvalidTransactionError("function args don't match send-many-memo type declaration");
|
|
448
468
|
}
|
|
449
469
|
return {
|
|
450
|
-
address: transactions_1.cvToString(tuple.data.to),
|
|
451
|
-
amount: transactions_1.cvToValue(tuple.data.ustx, true),
|
|
470
|
+
address: (0, transactions_1.cvToString)(tuple.data.to),
|
|
471
|
+
amount: (0, transactions_1.cvToValue)(tuple.data.ustx, true),
|
|
452
472
|
memo: tuple.data.memo.buffer.toString('ascii'),
|
|
453
473
|
};
|
|
454
474
|
});
|
|
455
475
|
}
|
|
456
|
-
|
|
476
|
+
function functionArgsToTokenTransferParams(args) {
|
|
477
|
+
if (args.length < 3) {
|
|
478
|
+
throw new sdk_core_1.InvalidTransactionError("function args don't match token transfer declaration");
|
|
479
|
+
}
|
|
480
|
+
if (args[0].type !== transactions_1.ClarityType.UInt ||
|
|
481
|
+
args[1].type !== transactions_1.ClarityType.PrincipalStandard ||
|
|
482
|
+
args[2].type !== transactions_1.ClarityType.PrincipalStandard) {
|
|
483
|
+
throw new sdk_core_1.InvalidTransactionError("function args don't match token transfer declaration");
|
|
484
|
+
}
|
|
485
|
+
const tokenTransferParams = {
|
|
486
|
+
amount: (0, transactions_1.cvToValue)(args[0], true),
|
|
487
|
+
sender: (0, transactions_1.cvToString)(args[1]),
|
|
488
|
+
recipient: (0, transactions_1.cvToString)(args[2]),
|
|
489
|
+
};
|
|
490
|
+
if (args.length === 4 && args[3].type === transactions_1.ClarityType.Buffer) {
|
|
491
|
+
tokenTransferParams['memo'] = args[3].buffer.toString('ascii');
|
|
492
|
+
}
|
|
493
|
+
return tokenTransferParams;
|
|
494
|
+
}
|
|
457
495
|
/**
|
|
458
496
|
* Gets the version of an address
|
|
459
497
|
*
|
|
@@ -462,9 +500,8 @@ exports.functionArgsToSendParams = functionArgsToSendParams;
|
|
|
462
500
|
*/
|
|
463
501
|
function getAddressVersion(address) {
|
|
464
502
|
const baseAddress = getAddressDetails(address).address;
|
|
465
|
-
return transactions_1.createAddress(baseAddress).version;
|
|
503
|
+
return (0, transactions_1.createAddress)(baseAddress).version;
|
|
466
504
|
}
|
|
467
|
-
exports.getAddressVersion = getAddressVersion;
|
|
468
505
|
/**
|
|
469
506
|
* Returns a STX pub key from an xpub
|
|
470
507
|
*
|
|
@@ -474,7 +511,6 @@ exports.getAddressVersion = getAddressVersion;
|
|
|
474
511
|
function xpubToSTXPubkey(xpub, compressed = true) {
|
|
475
512
|
return new _1.KeyPair({ pub: xpub }).getKeys(compressed).pub;
|
|
476
513
|
}
|
|
477
|
-
exports.xpubToSTXPubkey = xpubToSTXPubkey;
|
|
478
514
|
/**
|
|
479
515
|
* Returns the base address portion of an address
|
|
480
516
|
*
|
|
@@ -485,7 +521,6 @@ function getBaseAddress(address) {
|
|
|
485
521
|
const addressDetails = getAddressDetails(address);
|
|
486
522
|
return addressDetails.address;
|
|
487
523
|
}
|
|
488
|
-
exports.getBaseAddress = getBaseAddress;
|
|
489
524
|
/**
|
|
490
525
|
* Compares an address to the base address to check if matchs.
|
|
491
526
|
*
|
|
@@ -499,5 +534,49 @@ function isSameBaseAddress(address, baseAddress) {
|
|
|
499
534
|
}
|
|
500
535
|
return getBaseAddress(address) === getBaseAddress(baseAddress);
|
|
501
536
|
}
|
|
502
|
-
|
|
503
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBMkI7QUFDM0IsZ0VBQXFDO0FBQ3JDLHFEQUE4RDtBQUM5RCx1REF3QjhCO0FBQzlCLHVDQUE4QjtBQUM5QiwwQ0FBNEI7QUFDNUIsbURBQW1IO0FBRW5ILHdCQUE0QjtBQUU1QiwyQ0FBNEQ7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxJQUFZO0lBQ2xELE9BQU8sNkJBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRkQsMERBRUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFXO0lBQ3pDLE9BQU8sZ0NBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRkQsMENBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUywyQkFBMkIsQ0FDbEMsYUFBcUIsRUFDckIsUUFBeUIsRUFDekIsa0JBQXNDO0lBRXRDLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsTUFBTSxPQUFPLEdBQUcsdUNBQXdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDdkUsTUFBTSxJQUFJLEdBQUcscUNBQXNCLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLFVBQVUsR0FBRyw4QkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLEVBQXFCO0lBQ3RELElBQUksRUFBRSxDQUFDLElBQUks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QUM1QyxDQUFDO0FBSEQsOENBR0M7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxJQUFZLEVBQUUsVUFBVSxHQUFHLElBQUk7SUFDN0QsT0FBTyxJQUFJLFVBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUQsQ0FBQztBQUZELDBDQUVDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsT0FBZTtJQUM1QyxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUM7QUFDaEMsQ0FBQztBQUhELHdDQUdDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsT0FBZSxFQUFFLFdBQW1CO0lBQ3BFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QyxNQUFNLElBQUkscUJBQVUsQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNyRDtJQUNELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBTEQsOENBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IGJ1ZmZlclRvSGV4LCBzdHJpcEhleFByZWZpeCB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQge1xuICBhZGRyZXNzRnJvbVB1YmxpY0tleXMsXG4gIGFkZHJlc3NGcm9tVmVyc2lvbkhhc2gsXG4gIEFkZHJlc3NIYXNoTW9kZSxcbiAgYWRkcmVzc0hhc2hNb2RlVG9WZXJzaW9uLFxuICBhZGRyZXNzVG9TdHJpbmcsXG4gIEFkZHJlc3NWZXJzaW9uLFxuICBCdWZmZXJSZWFkZXIsXG4gIENsYXJpdHlUeXBlLFxuICBDbGFyaXR5VmFsdWUsXG4gIGNyZWF0ZUFkZHJlc3MsXG4gIGNyZWF0ZU1lbW9TdHJpbmcsXG4gIGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUsXG4gIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXksXG4gIGNyZWF0ZVN0YWNrc1B1YmxpY0tleSxcbiAgY3ZUb1N0cmluZyxcbiAgY3ZUb1ZhbHVlLFxuICBkZXNlcmlhbGl6ZVRyYW5zYWN0aW9uLFxuICBQdWJLZXlFbmNvZGluZyxcbiAgcHVibGljS2V5RnJvbVNpZ25hdHVyZSxcbiAgc2lnbldpdGhLZXksXG4gIFN0YWNrc1RyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblZlcnNpb24sXG4gIHZhbGlkYXRlU3RhY2tzQWRkcmVzcyxcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgZWMgfSBmcm9tICdlbGxpcHRpYyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgaXNWYWxpZFhwcnYsIGlzVmFsaWRYcHViLCBTaWduaW5nRXJyb3IsIFV0aWxzRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBZGRyZXNzRGV0YWlscywgU2VuZFBhcmFtcyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4nO1xuaW1wb3J0IHsgU3RhY2tzTmV0d29yayBhcyBCaXRnb1N0YWNrc05ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFZBTElEX0NPTlRSQUNUX0ZVTkNUSU9OX05BTUVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEVuY29kZXMgYSBidWZmZXIgYXMgYSBcIjB4XCIgcHJlZml4ZWQgbG93ZXItY2FzZSBoZXggc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmIC0gYSBidWZmZXIgd2l0aCBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nIHByZWZpeGVkIHdpdGggXCIweFwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUb0hleFByZWZpeFN0cmluZyhidWZmOiBCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYnVmZmVyVG9IZXgoYnVmZik7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBcIjB4XCIgcHJlZml4IGZyb20gdGhlIGdpdmVuIHN0cmluZywgaWYgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGV4IC0gYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleGFkZWNpbWFsIHN0cmluZyB3aXRob3V0IGEgbGVhZGluZyBcIjB4XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUhleFByZWZpeChoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpcEhleFByZWZpeChoZXgpO1xufVxuXG4vKipcbiAqIEdldCBzdGFja3MgYWRkcmVzcyBmcm9tIHB1YmxpYyBrZXkgaGFzaFxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBwdWJsaWNLZXlIYXNoIC0gaGFzaCBvZiBwdWJsaWMga2V5XG4gKiBAcGFyYW0ge0FkZHJlc3NIYXNoTW9kZX0gaGFzaE1vZGUgLSBoYXNoIG1vZGVcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25WZXJzaW9ufSB0cmFuc2FjdGlvblZlcnNpb24gLSB0eCB2ZXJzaW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdGFja3MgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleUhhc2goXG4gIHB1YmxpY0tleUhhc2g6IEJ1ZmZlcixcbiAgaGFzaE1vZGU6IEFkZHJlc3NIYXNoTW9kZSxcbiAgdHJhbnNhY3Rpb25WZXJzaW9uOiBUcmFuc2FjdGlvblZlcnNpb25cbik6IHN0cmluZyB7XG4gIGlmIChwdWJsaWNLZXlIYXNoLmxlbmd0aCAhPT0gMjApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDIwLWJ5dGUgcHVia2V5aGFzaCcpO1xuICB9XG5cbiAgY29uc3QgYWRkclZlciA9IGFkZHJlc3NIYXNoTW9kZVRvVmVyc2lvbihoYXNoTW9kZSwgdHJhbnNhY3Rpb25WZXJzaW9uKTtcbiAgY29uc3QgYWRkciA9IGFkZHJlc3NGcm9tVmVyc2lvbkhhc2goYWRkclZlciwgcHVibGljS2V5SGFzaC50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBhZGRyU3RyaW5nID0gYWRkcmVzc1RvU3RyaW5nKGFkZHIpO1xuICByZXR1cm4gYWRkclN0cmluZztcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR4U2VuZGVyQWRkcmVzcyh0eDogU3RhY2tzVHJhbnNhY3Rpb24pOiBzdHJpbmcge1xuICBpZiAodHguYXV0aC5zcGVuZGluZ0NvbmRpdGlvbiAhPT0gbnVsbCAmJiB0eC5hdXRoLnNwZW5kaW5nQ29uZGl0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzcGVuZGluZ0NvbmRpdGlvbiA9IHR4LmF1dGguc3BlbmRpbmdDb25kaXRpb247XG4gICAgY29uc3QgdHhTZW5kZXIgPSBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleUhhc2goXG4gICAgICBCdWZmZXIuZnJvbShzcGVuZGluZ0NvbmRpdGlvbi5zaWduZXIsICdoZXgnKSxcbiAgICAgIHNwZW5kaW5nQ29uZGl0aW9uLmhhc2hNb2RlIGFzIG51bWJlcixcbiAgICAgIHR4LnZlcnNpb25cbiAgICApO1xuICAgIHJldHVybiB0eFNlbmRlcjtcbiAgfSBlbHNlIHRocm93IG5ldyBFcnJvcignc3BlbmRpbmdDb25kaXRpb24gc2hvdWxkIG5vdCBiZSBudWxsJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgYW1vdW50IG51bWJlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSB0aGUgc3RyaW5nIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBbW91bnQoYW1vdW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYmlnTnVtYmVyQW1vdW50ID0gbmV3IEJpZ051bWJlcihhbW91bnQpO1xuICByZXR1cm4gYmlnTnVtYmVyQW1vdW50LmlzSW50ZWdlcigpICYmIGJpZ051bWJlckFtb3VudC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvKDApO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbGlkYXRlU3RhY2tzQWRkcmVzcyhhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCB0cmFuc2FjdGlvbiBpZCBvciBub3QuXG4gKlxuICogQSB2YWxpZCB0cmFuc2FjdGlvbiBpZCBpcyBhIFNIQS01MTIvMjU2IGhhc2ggb2YgYSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uOyBzZWVcbiAqIHRoZSB0eGlkRnJvbURhdGEgZnVuY3Rpb24gaW4gQHN0YWNrcy90cmFuc2FjdGlvbjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibG9ja3N0YWNrL3N0YWNrcy5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy90cmFuc2FjdGlvbnMvc3JjL3V0aWxzLnRzI0w5N1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eElkIC0gdGhlIHRyYW5zYWN0aW9uIGlkIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR4SWQubGVuZ3RoICE9PSA2NCAmJiB0eElkLmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgbm9QcmVmaXggPSByZW1vdmVIZXhQcmVmaXgodHhJZCk7XG4gIGlmIChub1ByZWZpeC5sZW5ndGggIT09IDY0KSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGFsbEhleENoYXJzKG5vUHJlZml4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBwdWJsaWMga2V5IG9yXG4gKiBleHRlbmRlZCBwdWJsaWMga2V5LlxuICpcbiAqIFRoZSBrZXkgZm9ybWF0IGlzIGRvY3VtZW50ZWQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGFja3Nnb3Yvc2lwcy9ibG9iL21haW4vc2lwcy9zaXAtMDA1L3NpcC0wMDUtYmxvY2tzLWFuZC10cmFuc2FjdGlvbnMubWQjdHJhbnNhY3Rpb24tYXV0aG9yaXphdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSB0aGUgIHB1YmxpYyBrZXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGlzVmFsaWRYcHViKHB1YikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChwdWIubGVuZ3RoICE9PSA2NiAmJiBwdWIubGVuZ3RoICE9PSAxMzApIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBmaXJzdEJ5dGUgPSBwdWIuc2xpY2UoMCwgMik7XG5cbiAgLy8gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgaWYgKHB1Yi5sZW5ndGggPT09IDEzMCAmJiBmaXJzdEJ5dGUgIT09ICcwNCcpIHJldHVybiBmYWxzZTtcblxuICAvLyBjb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgaWYgKHB1Yi5sZW5ndGggPT09IDY2ICYmIGZpcnN0Qnl0ZSAhPT0gJzAyJyAmJiBmaXJzdEJ5dGUgIT09ICcwMycpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIWFsbEhleENoYXJzKHB1YikpIHJldHVybiBmYWxzZTtcblxuICAvLyB2YWxpZGF0ZSB0aGUgcHVibGljIGtleVxuICBjb25zdCBzZWNwMjU2azEgPSBuZXcgZWMoJ3NlY3AyNTZrMScpO1xuICB0cnkge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWNwMjU2azEua2V5RnJvbVB1YmxpYyhCdWZmZXIuZnJvbShwdWIsICdoZXgnKSk7XG4gICAgY29uc3QgeyByZXN1bHQgfSA9IGtleVBhaXIudmFsaWRhdGUoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgcHJvdG9jb2wgcHJpdmF0ZSBrZXksIG9yIGV4dGVuZGVkXG4gKiBwcml2YXRlIGtleS5cbiAqXG4gKiBUaGUgcHJvdG9jb2wga2V5IGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gdGhlIEBzdGFja3MvdHJhbnNhY3Rpb25zIG5wbSBwYWNrYWdlLCBpbiB0aGVcbiAqIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkgZnVuY3Rpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmxvY2tzdGFjay9zdGFja3MuanMvYmxvYi9tYXN0ZXIvcGFja2FnZXMvdHJhbnNhY3Rpb25zL3NyYy9rZXlzLnRzI0wxMjVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJ2IC0gdGhlIHByaXZhdGUga2V5IChvciBleHRlbmRlZCBwcml2YXRlIGtleSkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChpc1ZhbGlkWHBydihwcnYpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAocHJ2Lmxlbmd0aCAhPT0gNjQgJiYgcHJ2Lmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcblxuICBpZiAocHJ2Lmxlbmd0aCA9PT0gNjYgJiYgcHJ2LnNsaWNlKDY0KSAhPT0gJzAxJykgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBhbGxIZXhDaGFycyhwcnYpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIGNvbXBvc2VkIG9mIGhleCBjaGFycyBvbmx5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1heWJlIC0gdGhlICBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYWxsSGV4Q2hhcnMobWF5YmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14oWzAtOWEtZl0pKyQvaS50ZXN0KG1heWJlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgcmF3IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHJhd1RyYW5zYWN0aW9uIC0gdHJhbnNhY3Rpb24gaW4gcmF3IGhleCBmb3JtYXRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRlc2VyaWFsaXplVHJhbnNhY3Rpb24oQnVmZmVyUmVhZGVyLmZyb21CdWZmZXIoQnVmZmVyLmZyb20ocmVtb3ZlSGV4UHJlZml4KHJhd1RyYW5zYWN0aW9uKSwgJ2hleCcpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtZW1vIHN0cmluZyBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIC0gdGhlIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE1lbW8obWVtbzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY3JlYXRlTWVtb1N0cmluZyhtZW1vKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBmb3IgdmFsaWQgY29udHJhY3QgYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyIC0gY29udHJhY3QgZGVwbG95ZXIgYWRkcmVzc1xuICogQHBhcmFtIHtCaXRnb1N0YWNrc05ldHdvcmt9IG5ldHdvcmsgLSBuZXR3b3JrIG9iamVjdFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29udHJhY3RBZGRyZXNzKGFkZHI6IHN0cmluZywgbmV0d29yazogQml0Z29TdGFja3NOZXR3b3JrKTogYm9vbGVhbiB7XG4gIHJldHVybiBhZGRyID09PSBuZXR3b3JrLnN0YWtpbmdDb250cmFjdEFkZHJlc3MgfHwgYWRkciA9PT0gbmV0d29yay5zZW5kbWFueW1lbW9Db250cmFjdEFkZHJlc3M7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIG5hbWUgaXMgb25lIG9mIHZhbGlkIGNvbnRyYWN0IG5hbWVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBmdW5jdGlvbiBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbnRyYWN0RnVuY3Rpb25OYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gVkFMSURfQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRVMuaW5jbHVkZXMobmFtZSk7XG59XG5cbi8qKlxuICogVW5wYWRzIGEgbWVtbyBzdHJpbmcsIHNvIGl0IHJlbW92ZXMgbnVsbHMuXG4gKlxuICogVXNlZnVsIHdoZW4gbWVtbyBpcyBmaWxsIHVwIHRoZSBsZW5ndGguIFJlc3VsdCBpcyBiZWNvbWVzIHJlYWRhYmxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIC0gdGhlIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5wYWRNZW1vKG1lbW86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVuZCA9IG1lbW8uaW5kZXhPZignXFx1MDAwMCcpO1xuICBpZiAoZW5kIDwgMCkgcmV0dXJuIG1lbW87XG4gIHJldHVybiBtZW1vLnNsaWNlKDAsIGVuZCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtdWx0aXNpZyBhZGRyZXNzIGZyb20gbXVsdGlwbGUgU1RYIHB1YmxpYyBrZXlzXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHViS2V5cyAtIGxpc3Qgb2YgcHVibGljIGtleXMgYXMgc3RyaW5nc1xuICogQHBhcmFtIHtBZGRyZXNzVmVyc2lvbn0gYWRkcmVzc1ZlcnNpb24gLSBNYWlubmV0TXVsdGlTaWcsIFRlc3RuZXRNdWx0aVNpZ1xuICogQHBhcmFtIHtBZGRyZXNzSGFzaE1vZGV9IGFkZHJlc3NIYXNoTW9kZSAtIFNlcmlhbGl6ZVAyU0hcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2lnbmF0dXJlc1JlcXVpcmVkXSAtIG51bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkLCBkZWZhdWx0IHZhbHVlIGl0cyAyXG4gKiBAcmV0dXJucyB7YWRkcmVzczogc3RyaW5nLCBoYXNoMTYwOiBzdHJpbmd9IC0gYSBtdWx0aXNpZyBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoXG4gIHB1YktleXM6IHN0cmluZ1tdLFxuICBhZGRyZXNzVmVyc2lvbjogQWRkcmVzc1ZlcnNpb24gPSBBZGRyZXNzVmVyc2lvbi5NYWlubmV0TXVsdGlTaWcsXG4gIGFkZHJlc3NIYXNoTW9kZTogQWRkcmVzc0hhc2hNb2RlID0gQWRkcmVzc0hhc2hNb2RlLlNlcmlhbGl6ZVAyU0gsXG4gIHNpZ25hdHVyZXNSZXF1aXJlZCA9IDJcbik6IHsgYWRkcmVzczogc3RyaW5nOyBoYXNoMTYwOiBzdHJpbmcgfSB7XG4gIGlmIChwdWJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBudW1iZXIgb2YgcHVibGljIGtleXMnKTtcbiAgfVxuICBpZiAoIXB1YktleXMuZXZlcnkoaXNWYWxpZFB1YmxpY0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHVibGljIGtleXMnKTtcbiAgfVxuICBpZiAoc2lnbmF0dXJlc1JlcXVpcmVkID4gcHViS2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkIG11c3QgYmUgbG93ZXIgb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBQdWJsaWMgS2V5cycpO1xuICB9XG5cbiAgY29uc3Qgc3R4UHViS2V5cyA9IHB1YktleXMubWFwKGNyZWF0ZVN0YWNrc1B1YmxpY0tleSk7XG4gIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzRnJvbVB1YmxpY0tleXMoYWRkcmVzc1ZlcnNpb24sIGFkZHJlc3NIYXNoTW9kZSwgc2lnbmF0dXJlc1JlcXVpcmVkLCBzdHhQdWJLZXlzKTtcblxuICByZXR1cm4geyBhZGRyZXNzOiBhZGRyZXNzVG9TdHJpbmcoYWRkcmVzcyksIGhhc2gxNjA6IGFkZHJlc3MuaGFzaDE2MCB9O1xufVxuXG4vKipcbiAqIHNpZ25zIGEgc3RyaW5nIG1lc3NhZ2VcbiAqXG4gKiBAcGFyYW0ga2V5UGFpclxuICogQHBhcmFtIGRhdGEgIC0gbWVzc2FnZSB0byBiZSBzaWduZWRcbiAqIEByZXR1cm5zIHNpZ25lZCBtZXNzYWdlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbk1lc3NhZ2Uoa2V5UGFpcjogS2V5UGFpciwgZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2O1xuICBpZiAocHJ2KSB7XG4gICAgcmV0dXJuIHNpZ25XaXRoS2V5KGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkocHJ2KSwgZGF0YSkuZGF0YTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIHNpZ25lZCBtZXNzYWdlXG4gKlxuICogVGhlIHNpZ25hdHVyZSBtdXN0IGJlIDEzMCBieXRlcyBsb25nIC0tIHNlZSBSRUNPVkVSQUJMRV9FQ0RTQV9TSUdfTEVOR1RIX0JZVEVTXG4gKiBpbiBAc3RhY2tzL3RyYW5zYWN0aW9ucy9zcmMvY29uc3RhbnRzLnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBtZXNzYWdlIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIC0gc2lnbmF0dXJlIHRvIHZlcmlmeVxuICogQHBhcmFtIHtzdHJpbmd9IHB1YmxpY0tleSAtIHB1YmxpYyBrZXkgYXMgaGV4IHN0cmluZyB1c2VkIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2ZXJpZmljYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUobWVzc2FnZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgcHVibGljS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFpc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDEzMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWFsbEhleENoYXJzKHNpZ25hdHVyZSkpIHRocm93IG5ldyBVdGlsc0Vycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBpbnB1dCB0byB2ZXJpZnlTaWduYXR1cmUnKTtcbiAgaWYgKF8uaXNFbXB0eShtZXNzYWdlKSkgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0Nhbm5vdCB2ZXJpZnkgZW1wdHkgbWVzc2FnZXMnKTtcblxuICAvLyBwcm92aWRlZCBwdWJsaWNLZXkgY2FuIGJlIGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkXG4gIGNvbnN0IGtleUVuY29kaW5nID0gcHVibGljS2V5Lmxlbmd0aCA9PT0gNjYgPyBQdWJLZXlFbmNvZGluZy5Db21wcmVzc2VkIDogUHViS2V5RW5jb2RpbmcuVW5jb21wcmVzc2VkO1xuXG4gIGNvbnN0IG1lc3NhZ2VTaWcgPSBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlKHNpZ25hdHVyZSk7XG5cbiAgY29uc3QgZm91bmRLZXkgPSBwdWJsaWNLZXlGcm9tU2lnbmF0dXJlKG1lc3NhZ2UsIG1lc3NhZ2VTaWcsIGtleUVuY29kaW5nKTtcblxuICByZXR1cm4gZm91bmRLZXkgPT09IHB1YmxpY0tleTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIGFkZHJlc3MgaW50byBhZGRyZXNzIGFuZCBtZW1vIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgdGhlIGFkZHJlc3MgdG8gcHJvY2Vzc1xuICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IGNvbnRhaW5pbmcgYWRkcmVzcyBhbmQgbWVtbyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzczogc3RyaW5nKTogQWRkcmVzc0RldGFpbHMge1xuICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IHVybC5wYXJzZShhZGRyZXNzKTtcbiAgY29uc3QgcXVlcnlEZXRhaWxzID0gYWRkcmVzc0RldGFpbHMucXVlcnkgPyBuZXcgVVJMU2VhcmNoUGFyYW1zKGFkZHJlc3NEZXRhaWxzLnF1ZXJ5KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYmFzZUFkZHJlc3MgPSBhZGRyZXNzRGV0YWlscy5wYXRobmFtZSBhcyBzdHJpbmc7XG4gIGlmICghaXNWYWxpZEFkZHJlc3MoYmFzZUFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICB9XG4gIC8vIGFkZHJlc3MgZG9lc24ndCBoYXZlIGEgbWVtbyBpZFxuICBpZiAoYmFzZUFkZHJlc3MgPT09IGFkZHJlc3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgIG1lbW9JZDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBpZiAoIXF1ZXJ5RGV0YWlscyB8fCBfLmlzTmlsKHF1ZXJ5RGV0YWlscy5nZXQoJ21lbW9JZCcpKSkge1xuICAgIC8vIGlmIHRoZXJlIGFyZSBtb3JlIHByb3BlcnRpZXMsIHRoZSBxdWVyeSBkZXRhaWxzIG5lZWQgdG8gY29udGFpbiB0aGUgbWVtbyBpZCBwcm9wZXJ0eVxuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3Mgd2l0aCBtZW1vIGlkOiAke2FkZHJlc3N9YCk7XG4gIH1cbiAgY29uc3QgbWVtb0lkID0gcXVlcnlEZXRhaWxzLmdldCgnbWVtb0lkJykgYXMgc3RyaW5nO1xuICBjb25zdCBpbnRNZW1vSWQgPSBwYXJzZUludChtZW1vSWQsIDEwKTtcbiAgaWYgKGlzTmFOKGludE1lbW9JZCkgfHwgaW50TWVtb0lkIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBtZW1vIGlkOiAke21lbW9JZH1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkcmVzczogYmFzZUFkZHJlc3MsXG4gICAgbWVtb0lkLFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCByZXR1cm4gYWRkcmVzcyB3aXRoIGFwcGVuZGVkIG1lbW8gaWRcbiAqXG4gKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSBhZGRyZXNzRGV0YWlsc1xuICogQHJldHVybnMge3N0cmluZ30gYWRkcmVzcyB3aXRoIG1lbW8gaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUFkZHJlc3MoeyBhZGRyZXNzLCBtZW1vSWQgfTogQWRkcmVzc0RldGFpbHMpOiBzdHJpbmcge1xuICBpZiAoIWlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICB9XG4gIGlmICghXy5pc1VuZGVmaW5lZChtZW1vSWQpKSB7XG4gICAgY29uc3QgaW50TWVtb0lkID0gcGFyc2VJbnQobWVtb0lkLCAxMCk7XG4gICAgaWYgKGlzTmFOKGludE1lbW9JZCkgfHwgaW50TWVtb0lkIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG1lbW8gaWQ6ICR7bWVtb0lkfWApO1xuICAgIH1cbiAgICByZXR1cm4gYCR7YWRkcmVzc30/bWVtb0lkPSR7bWVtb0lkfWA7XG4gIH1cbiAgcmV0dXJuIGFkZHJlc3M7XG59XG5cbi8qKlxuICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIGEgdmFsaWQgYWRkcmVzcyB3aXRoIG1lbW8gaWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyBhZGRyZXNzIGluIHRoZSBmb3JtIDxhZGRyZXNzPj9tZW1vSWQ9PG1lbW9JZD5cbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlzIGlucHV0IGlzIGEgdmFsaWQgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgcmV0dXJuIGFkZHJlc3MgPT09IG5vcm1hbGl6ZUFkZHJlc3MoYWRkcmVzc0RldGFpbHMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjbGFyaXR5IHZhbHVlIGlucHV0XG4gKlxuICogQHBhcmFtIHtDbGFyaXR5VmFsdWV9IGN2IGNsYXJpdHkgdmFsdWUgZnVuY3Rpb24gYXJndW1lbnRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZ2lmaWVkIGNsYXJpdHkgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUN2KGN2OiBDbGFyaXR5VmFsdWUpOiBhbnkge1xuICBzd2l0Y2ggKGN2LnR5cGUpIHtcbiAgICBjYXNlIENsYXJpdHlUeXBlLkludDpcbiAgICBjYXNlIENsYXJpdHlUeXBlLlVJbnQ6XG4gICAgICByZXR1cm4geyB0eXBlOiBjdi50eXBlLCB2YWx1ZTogY3YudmFsdWUudG9TdHJpbmcoKSB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lOlxuICAgICAgcmV0dXJuIHsgdHlwZTogY3YudHlwZSwgdmFsdWU6IHN0cmluZ2lmeUN2KGN2LnZhbHVlKSB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuVHVwbGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBjdi50eXBlLFxuICAgICAgICBkYXRhOiBfLm1hcFZhbHVlcyhjdi5kYXRhLCAodmFsdWUpID0+IHN0cmluZ2lmeUN2KHZhbHVlKSksXG4gICAgICB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuTGlzdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IGN2LnR5cGUsXG4gICAgICAgIGxpc3Q6IGN2Lmxpc3QubWFwKHN0cmluZ2lmeUN2KSxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjdjtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGZ1bmN0aW9uQXJncyBpbnRvIHNlbmQgcGFyYW1zIGZvciBzZW5kLW1hbnktbWVtbyBjb250cmFjdCBjYWxsc1xuICpcbiAqIEBwYXJhbSB7Q2xhcml0eVZhbHVlW119IGFyZ3MgZnVuY3Rpb25BcmdzIGZyb20gYSBjb250cmFjdCBjYWxsIHBheWxvYWRcbiAqIEByZXR1cm5zIHtTZW5kUGFyYW1zW119IEFuIGFycmF5IG9mIHNlbmRQYXJhbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uQXJnc1RvU2VuZFBhcmFtcyhhcmdzOiBDbGFyaXR5VmFsdWVbXSk6IFNlbmRQYXJhbXNbXSB7XG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMSB8fCBhcmdzWzBdLnR5cGUgIT09IENsYXJpdHlUeXBlLkxpc3QpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIGFyZ3NbMF0ubGlzdC5tYXAoKHR1cGxlKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdHVwbGUudHlwZSAhPT0gQ2xhcml0eVR5cGUuVHVwbGUgfHxcbiAgICAgIHR1cGxlLmRhdGEudG8/LnR5cGUgIT09IENsYXJpdHlUeXBlLlByaW5jaXBhbFN0YW5kYXJkIHx8XG4gICAgICB0dXBsZS5kYXRhLnVzdHg/LnR5cGUgIT09IENsYXJpdHlUeXBlLlVJbnQgfHxcbiAgICAgIHR1cGxlLmRhdGEubWVtbz8udHlwZSAhPT0gQ2xhcml0eVR5cGUuQnVmZmVyXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb25cIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBjdlRvU3RyaW5nKHR1cGxlLmRhdGEudG8pLFxuICAgICAgYW1vdW50OiBjdlRvVmFsdWUodHVwbGUuZGF0YS51c3R4LCB0cnVlKSxcbiAgICAgIG1lbW86IHR1cGxlLmRhdGEubWVtby5idWZmZXIudG9TdHJpbmcoJ2FzY2lpJyksXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdmVyc2lvbiBvZiBhbiBhZGRyZXNzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgdGhlIGFkZHJlc3Mgd2l0aCBvciB3aXRob3V0IHRoZSBtZW1vSWRcbiAqIEByZXR1cm5zIHtBZGRyZXNzVmVyc2lvbn0gQSBudW1iZXIgdGhhdCByZXByZXNlbnQgdGhlIEFkZHJlc3MgVmVyc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc1ZlcnNpb24oYWRkcmVzczogc3RyaW5nKTogQWRkcmVzc1ZlcnNpb24ge1xuICBjb25zdCBiYXNlQWRkcmVzcyA9IGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpLmFkZHJlc3M7XG4gIHJldHVybiBjcmVhdGVBZGRyZXNzKGJhc2VBZGRyZXNzKS52ZXJzaW9uO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBTVFggcHViIGtleSBmcm9tIGFuIHhwdWJcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30geHB1YiBhbiB4cHViXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBhIGNvbXByZXNzZWQgU1RYIHB1YiBrZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhwdWJUb1NUWFB1YmtleSh4cHViOiBzdHJpbmcsIGNvbXByZXNzZWQgPSB0cnVlKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKHsgcHViOiB4cHViIH0pLmdldEtleXMoY29tcHJlc3NlZCkucHViO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgYWRkcmVzcyBwb3J0aW9uIG9mIGFuIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIGFuIGFkZHJlc3NcbiAqIEByZXR1cm5zIHtTdHJpbmd9IC0gdGhlIGJhc2UgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzKTtcbiAgcmV0dXJuIGFkZHJlc3NEZXRhaWxzLmFkZHJlc3M7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgYW4gYWRkcmVzcyB0byB0aGUgYmFzZSBhZGRyZXNzIHRvIGNoZWNrIGlmIG1hdGNocy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyAtIGFuIGFkZHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlQWRkcmVzcyAtIGEgYmFzZSBhZGRyZXNzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgYmFzZUFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgfVxuICByZXR1cm4gZ2V0QmFzZUFkZHJlc3MoYWRkcmVzcykgPT09IGdldEJhc2VBZGRyZXNzKGJhc2VBZGRyZXNzKTtcbn1cbiJdfQ==
|
|
537
|
+
/**
|
|
538
|
+
* Function to get tokenName from list of sip10 tokens using contract details
|
|
539
|
+
*
|
|
540
|
+
* @param {String} contractAddress
|
|
541
|
+
* @param {String} contractName
|
|
542
|
+
* @returns {String|Undefined}
|
|
543
|
+
*/
|
|
544
|
+
function findTokenNameByContract(contractAddress, contractName) {
|
|
545
|
+
{
|
|
546
|
+
const tokenName = statics_1.coins
|
|
547
|
+
.filter((coin) => coin instanceof statics_1.Sip10Token && coin.assetId.includes(`${contractAddress}.${contractName}`))
|
|
548
|
+
.map((coin) => coin.name);
|
|
549
|
+
return tokenName ? tokenName[0] : undefined;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Function to get contractTokenName from list of sip10 tokens using contract details
|
|
554
|
+
*
|
|
555
|
+
* @param {String} contractAddress
|
|
556
|
+
* @param {String} contractName
|
|
557
|
+
* @returns {String|Undefined}
|
|
558
|
+
*/
|
|
559
|
+
function findContractTokenNameUsingContract(contractAddress, contractName) {
|
|
560
|
+
{
|
|
561
|
+
const sip10Token = statics_1.coins
|
|
562
|
+
.filter((coin) => coin instanceof statics_1.Sip10Token && coin.assetId.includes(`${contractAddress}.${contractName}`))
|
|
563
|
+
.map((coin) => coin);
|
|
564
|
+
return sip10Token ? sip10Token[0].assetId.split('::')[1] : undefined;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Function to get address and memo details from address input
|
|
569
|
+
*
|
|
570
|
+
* @param address
|
|
571
|
+
* @returns {AddressDetails}
|
|
572
|
+
*/
|
|
573
|
+
function getMemoIdAndBaseAddressFromAddress(address) {
|
|
574
|
+
const [baseAddress, queryString] = address.split('?');
|
|
575
|
+
const params = new URLSearchParams(queryString);
|
|
576
|
+
const memoId = params.get('memoId');
|
|
577
|
+
return {
|
|
578
|
+
address: baseAddress,
|
|
579
|
+
memoId: memoId ? memoId : undefined,
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMENBLDBEQUVDO0FBUUQsMENBRUM7QUE0QkQsZ0RBVUM7QUFRRCxzQ0FHQztBQVFELHdDQUVDO0FBWUQsb0RBTUM7QUFZRCw0Q0FzQkM7QUFhRCw4Q0FRQztBQWtCRCxzREFZQztBQVFELGtDQVFDO0FBU0Qsd0RBRUM7QUFRRCxrRUFFQztBQVVELDhCQUlDO0FBV0QsNERBb0JDO0FBU0Qsa0NBT0M7QUFhRCwwQ0FjQztBQVFELDhDQTZCQztBQVFELDRDQVlDO0FBUUQsa0VBT0M7QUFRRCxrQ0FvQkM7QUFRRCw0REFtQkM7QUFFRCw4RUFvQkM7QUFRRCw4Q0FHQztBQVFELDBDQUVDO0FBUUQsd0NBR0M7QUFTRCw4Q0FLQztBQVNELDBEQU9DO0FBU0QsZ0ZBT0M7QUFRRCxnRkFTQztBQXprQkQseUNBQTJCO0FBQzNCLGdFQUFxQztBQUNyQyxxREFBOEQ7QUFDOUQsdURBd0I4QjtBQUM5Qix1REFBb0Q7QUFDcEQsMENBQTRCO0FBQzVCLG1EQUFtSDtBQUVuSCx3QkFBNEI7QUFDNUIsaURBQTZGO0FBQzdGLDJDQUE0RDtBQUU1RDs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLElBQVk7SUFDbEQsT0FBTyxJQUFBLDZCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEdBQVc7SUFDekMsT0FBTyxJQUFBLGdDQUFjLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLDJCQUEyQixDQUNsQyxhQUFxQixFQUNyQixRQUF5QixFQUN6QixrQkFBc0M7SUFFdEMsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLEVB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QztJQUVwQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3BDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBidWZmZXJUb0hleCwgc3RyaXBIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IHtcbiAgYWRkcmVzc0Zyb21QdWJsaWNLZXlzLFxuICBhZGRyZXNzRnJvbVZlcnNpb25IYXNoLFxuICBBZGRyZXNzSGFzaE1vZGUsXG4gIGFkZHJlc3NIYXNoTW9kZVRvVmVyc2lvbixcbiAgYWRkcmVzc1RvU3RyaW5nLFxuICBBZGRyZXNzVmVyc2lvbixcbiAgQnVmZmVyUmVhZGVyLFxuICBDbGFyaXR5VHlwZSxcbiAgQ2xhcml0eVZhbHVlLFxuICBjcmVhdGVBZGRyZXNzLFxuICBjcmVhdGVNZW1vU3RyaW5nLFxuICBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlLFxuICBjcmVhdGVTdGFja3NQcml2YXRlS2V5LFxuICBjcmVhdGVTdGFja3NQdWJsaWNLZXksXG4gIGN2VG9TdHJpbmcsXG4gIGN2VG9WYWx1ZSxcbiAgZGVzZXJpYWxpemVUcmFuc2FjdGlvbixcbiAgUHViS2V5RW5jb2RpbmcsXG4gIHB1YmxpY0tleUZyb21TaWduYXR1cmUsXG4gIHNpZ25XaXRoS2V5LFxuICBTdGFja3NUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25WZXJzaW9uLFxuICB2YWxpZGF0ZVN0YWNrc0FkZHJlc3MsXG59IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IHNlY3AyNTZrMSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvc2VjcDI1NmsxJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBpc1ZhbGlkWHBydiwgaXNWYWxpZFhwdWIsIFNpZ25pbmdFcnJvciwgVXRpbHNFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEFkZHJlc3NEZXRhaWxzLCBTZW5kUGFyYW1zLCBUb2tlblRyYW5zZmVyUGFyYW1zIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLic7XG5pbXBvcnQgeyBjb2lucywgU2lwMTBUb2tlbiwgU3RhY2tzTmV0d29yayBhcyBCaXRnb1N0YWNrc05ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFZBTElEX0NPTlRSQUNUX0ZVTkNUSU9OX05BTUVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEVuY29kZXMgYSBidWZmZXIgYXMgYSBcIjB4XCIgcHJlZml4ZWQgbG93ZXItY2FzZSBoZXggc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmIC0gYSBidWZmZXIgd2l0aCBhIGhleGFkZWNpbWFsIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nIHByZWZpeGVkIHdpdGggXCIweFwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUb0hleFByZWZpeFN0cmluZyhidWZmOiBCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYnVmZmVyVG9IZXgoYnVmZik7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBcIjB4XCIgcHJlZml4IGZyb20gdGhlIGdpdmVuIHN0cmluZywgaWYgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGV4IC0gYSBoZXhhZGVjaW1hbCBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleGFkZWNpbWFsIHN0cmluZyB3aXRob3V0IGEgbGVhZGluZyBcIjB4XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUhleFByZWZpeChoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpcEhleFByZWZpeChoZXgpO1xufVxuXG4vKipcbiAqIEdldCBzdGFja3MgYWRkcmVzcyBmcm9tIHB1YmxpYyBrZXkgaGFzaFxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBwdWJsaWNLZXlIYXNoIC0gaGFzaCBvZiBwdWJsaWMga2V5XG4gKiBAcGFyYW0ge0FkZHJlc3NIYXNoTW9kZX0gaGFzaE1vZGUgLSBoYXNoIG1vZGVcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25WZXJzaW9ufSB0cmFuc2FjdGlvblZlcnNpb24gLSB0eCB2ZXJzaW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdGFja3MgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleUhhc2goXG4gIHB1YmxpY0tleUhhc2g6IEJ1ZmZlcixcbiAgaGFzaE1vZGU6IEFkZHJlc3NIYXNoTW9kZSxcbiAgdHJhbnNhY3Rpb25WZXJzaW9uOiBUcmFuc2FjdGlvblZlcnNpb25cbik6IHN0cmluZyB7XG4gIGlmIChwdWJsaWNLZXlIYXNoLmxlbmd0aCAhPT0gMjApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDIwLWJ5dGUgcHVia2V5aGFzaCcpO1xuICB9XG5cbiAgY29uc3QgYWRkclZlciA9IGFkZHJlc3NIYXNoTW9kZVRvVmVyc2lvbihoYXNoTW9kZSwgdHJhbnNhY3Rpb25WZXJzaW9uKTtcbiAgY29uc3QgYWRkciA9IGFkZHJlc3NGcm9tVmVyc2lvbkhhc2goYWRkclZlciwgcHVibGljS2V5SGFzaC50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBhZGRyU3RyaW5nID0gYWRkcmVzc1RvU3RyaW5nKGFkZHIpO1xuICByZXR1cm4gYWRkclN0cmluZztcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR4U2VuZGVyQWRkcmVzcyh0eDogU3RhY2tzVHJhbnNhY3Rpb24pOiBzdHJpbmcge1xuICBpZiAodHguYXV0aC5zcGVuZGluZ0NvbmRpdGlvbiAhPT0gbnVsbCAmJiB0eC5hdXRoLnNwZW5kaW5nQ29uZGl0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzcGVuZGluZ0NvbmRpdGlvbiA9IHR4LmF1dGguc3BlbmRpbmdDb25kaXRpb247XG4gICAgY29uc3QgdHhTZW5kZXIgPSBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleUhhc2goXG4gICAgICBCdWZmZXIuZnJvbShzcGVuZGluZ0NvbmRpdGlvbi5zaWduZXIsICdoZXgnKSxcbiAgICAgIHNwZW5kaW5nQ29uZGl0aW9uLmhhc2hNb2RlIGFzIG51bWJlcixcbiAgICAgIHR4LnZlcnNpb25cbiAgICApO1xuICAgIHJldHVybiB0eFNlbmRlcjtcbiAgfSBlbHNlIHRocm93IG5ldyBFcnJvcignc3BlbmRpbmdDb25kaXRpb24gc2hvdWxkIG5vdCBiZSBudWxsJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgYW1vdW50IG51bWJlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSB0aGUgc3RyaW5nIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBbW91bnQoYW1vdW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYmlnTnVtYmVyQW1vdW50ID0gbmV3IEJpZ051bWJlcihhbW91bnQpO1xuICByZXR1cm4gYmlnTnVtYmVyQW1vdW50LmlzSW50ZWdlcigpICYmIGJpZ051bWJlckFtb3VudC5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvKDApO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIHByb3RvY29sIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbGlkYXRlU3RhY2tzQWRkcmVzcyhhZGRyZXNzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCB0cmFuc2FjdGlvbiBpZCBvciBub3QuXG4gKlxuICogQSB2YWxpZCB0cmFuc2FjdGlvbiBpZCBpcyBhIFNIQS01MTIvMjU2IGhhc2ggb2YgYSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uOyBzZWVcbiAqIHRoZSB0eGlkRnJvbURhdGEgZnVuY3Rpb24gaW4gQHN0YWNrcy90cmFuc2FjdGlvbjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibG9ja3N0YWNrL3N0YWNrcy5qcy9ibG9iL21hc3Rlci9wYWNrYWdlcy90cmFuc2FjdGlvbnMvc3JjL3V0aWxzLnRzI0w5N1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eElkIC0gdGhlIHRyYW5zYWN0aW9uIGlkIHRvIGJlIHZhbGlkYXRlZFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR4SWQubGVuZ3RoICE9PSA2NCAmJiB0eElkLmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgbm9QcmVmaXggPSByZW1vdmVIZXhQcmVmaXgodHhJZCk7XG4gIGlmIChub1ByZWZpeC5sZW5ndGggIT09IDY0KSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGFsbEhleENoYXJzKG5vUHJlZml4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBwcm90b2NvbCBwdWJsaWMga2V5IG9yXG4gKiBleHRlbmRlZCBwdWJsaWMga2V5LlxuICpcbiAqIFRoZSBrZXkgZm9ybWF0IGlzIGRvY3VtZW50ZWQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zdGFja3Nnb3Yvc2lwcy9ibG9iL21haW4vc2lwcy9zaXAtMDA1L3NpcC0wMDUtYmxvY2tzLWFuZC10cmFuc2FjdGlvbnMubWQjdHJhbnNhY3Rpb24tYXV0aG9yaXphdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSB0aGUgIHB1YmxpYyBrZXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGlzVmFsaWRYcHViKHB1YikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChwdWIubGVuZ3RoICE9PSA2NiAmJiBwdWIubGVuZ3RoICE9PSAxMzApIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBmaXJzdEJ5dGUgPSBwdWIuc2xpY2UoMCwgMik7XG5cbiAgLy8gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgaWYgKHB1Yi5sZW5ndGggPT09IDEzMCAmJiBmaXJzdEJ5dGUgIT09ICcwNCcpIHJldHVybiBmYWxzZTtcblxuICAvLyBjb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgaWYgKHB1Yi5sZW5ndGggPT09IDY2ICYmIGZpcnN0Qnl0ZSAhPT0gJzAyJyAmJiBmaXJzdEJ5dGUgIT09ICcwMycpIHJldHVybiBmYWxzZTtcblxuICBpZiAoIWFsbEhleENoYXJzKHB1YikpIHJldHVybiBmYWxzZTtcblxuICAvLyB2YWxpZGF0ZSB0aGUgcHVibGljIGtleVxuICB0cnkge1xuICAgIHNlY3AyNTZrMS5Qcm9qZWN0aXZlUG9pbnQuZnJvbUhleChwdWIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgcHJvdG9jb2wgcHJpdmF0ZSBrZXksIG9yIGV4dGVuZGVkXG4gKiBwcml2YXRlIGtleS5cbiAqXG4gKiBUaGUgcHJvdG9jb2wga2V5IGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gdGhlIEBzdGFja3MvdHJhbnNhY3Rpb25zIG5wbSBwYWNrYWdlLCBpbiB0aGVcbiAqIGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkgZnVuY3Rpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmxvY2tzdGFjay9zdGFja3MuanMvYmxvYi9tYXN0ZXIvcGFja2FnZXMvdHJhbnNhY3Rpb25zL3NyYy9rZXlzLnRzI0wxMjVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJ2IC0gdGhlIHByaXZhdGUga2V5IChvciBleHRlbmRlZCBwcml2YXRlIGtleSkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChpc1ZhbGlkWHBydihwcnYpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAocHJ2Lmxlbmd0aCAhPT0gNjQgJiYgcHJ2Lmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcblxuICBpZiAocHJ2Lmxlbmd0aCA9PT0gNjYgJiYgcHJ2LnNsaWNlKDY0KSAhPT0gJzAxJykgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBhbGxIZXhDaGFycyhwcnYpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIGNvbXBvc2VkIG9mIGhleCBjaGFycyBvbmx5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1heWJlIC0gdGhlICBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYWxsSGV4Q2hhcnMobWF5YmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14oWzAtOWEtZl0pKyQvaS50ZXN0KG1heWJlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgcmF3IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHJhd1RyYW5zYWN0aW9uIC0gdHJhbnNhY3Rpb24gaW4gcmF3IGhleCBmb3JtYXRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRlc2VyaWFsaXplVHJhbnNhY3Rpb24oQnVmZmVyUmVhZGVyLmZyb21CdWZmZXIoQnVmZmVyLmZyb20ocmVtb3ZlSGV4UHJlZml4KHJhd1RyYW5zYWN0aW9uKSwgJ2hleCcpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtZW1vIHN0cmluZyBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIC0gdGhlIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE1lbW8obWVtbzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY3JlYXRlTWVtb1N0cmluZyhtZW1vKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBmb3IgdmFsaWQgY29udHJhY3QgYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyIC0gY29udHJhY3QgZGVwbG95ZXIgYWRkcmVzc1xuICogQHBhcmFtIHtCaXRnb1N0YWNrc05ldHdvcmt9IG5ldHdvcmsgLSBuZXR3b3JrIG9iamVjdFxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQ29udHJhY3RBZGRyZXNzKGFkZHI6IHN0cmluZywgbmV0d29yazogQml0Z29TdGFja3NOZXR3b3JrKTogYm9vbGVhbiB7XG4gIHJldHVybiBhZGRyID09PSBuZXR3b3JrLnN0YWtpbmdDb250cmFjdEFkZHJlc3MgfHwgYWRkciA9PT0gbmV0d29yay5zZW5kbWFueW1lbW9Db250cmFjdEFkZHJlc3M7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIG5hbWUgaXMgb25lIG9mIHZhbGlkIGNvbnRyYWN0IG5hbWVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBmdW5jdGlvbiBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZENvbnRyYWN0RnVuY3Rpb25OYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gVkFMSURfQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRVMuaW5jbHVkZXMobmFtZSk7XG59XG5cbi8qKlxuICogVW5wYWRzIGEgbWVtbyBzdHJpbmcsIHNvIGl0IHJlbW92ZXMgbnVsbHMuXG4gKlxuICogVXNlZnVsIHdoZW4gbWVtbyBpcyBmaWxsIHVwIHRoZSBsZW5ndGguIFJlc3VsdCBpcyBiZWNvbWVzIHJlYWRhYmxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIC0gdGhlIHN0cmluZyB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5wYWRNZW1vKG1lbW86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVuZCA9IG1lbW8uaW5kZXhPZignXFx1MDAwMCcpO1xuICBpZiAoZW5kIDwgMCkgcmV0dXJuIG1lbW87XG4gIHJldHVybiBtZW1vLnNsaWNlKDAsIGVuZCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtdWx0aXNpZyBhZGRyZXNzIGZyb20gbXVsdGlwbGUgU1RYIHB1YmxpYyBrZXlzXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHViS2V5cyAtIGxpc3Qgb2YgcHVibGljIGtleXMgYXMgc3RyaW5nc1xuICogQHBhcmFtIHtBZGRyZXNzVmVyc2lvbn0gYWRkcmVzc1ZlcnNpb24gLSBNYWlubmV0TXVsdGlTaWcsIFRlc3RuZXRNdWx0aVNpZ1xuICogQHBhcmFtIHtBZGRyZXNzSGFzaE1vZGV9IGFkZHJlc3NIYXNoTW9kZSAtIFNlcmlhbGl6ZVAyU0hcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2lnbmF0dXJlc1JlcXVpcmVkXSAtIG51bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkLCBkZWZhdWx0IHZhbHVlIGl0cyAyXG4gKiBAcmV0dXJucyB7YWRkcmVzczogc3RyaW5nLCBoYXNoMTYwOiBzdHJpbmd9IC0gYSBtdWx0aXNpZyBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTVFhBZGRyZXNzRnJvbVB1YktleXMoXG4gIHB1YktleXM6IHN0cmluZ1tdLFxuICBhZGRyZXNzVmVyc2lvbjogQWRkcmVzc1ZlcnNpb24gPSBBZGRyZXNzVmVyc2lvbi5NYWlubmV0TXVsdGlTaWcsXG4gIGFkZHJlc3NIYXNoTW9kZTogQWRkcmVzc0hhc2hNb2RlID0gQWRkcmVzc0hhc2hNb2RlLlNlcmlhbGl6ZVAyU0gsXG4gIHNpZ25hdHVyZXNSZXF1aXJlZCA9IDJcbik6IHsgYWRkcmVzczogc3RyaW5nOyBoYXNoMTYwOiBzdHJpbmcgfSB7XG4gIGlmIChwdWJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBudW1iZXIgb2YgcHVibGljIGtleXMnKTtcbiAgfVxuICBpZiAoIXB1YktleXMuZXZlcnkoaXNWYWxpZFB1YmxpY0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHVibGljIGtleXMnKTtcbiAgfVxuICBpZiAoc2lnbmF0dXJlc1JlcXVpcmVkID4gcHViS2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkIG11c3QgYmUgbG93ZXIgb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBQdWJsaWMgS2V5cycpO1xuICB9XG5cbiAgY29uc3Qgc3R4UHViS2V5cyA9IHB1YktleXMubWFwKGNyZWF0ZVN0YWNrc1B1YmxpY0tleSk7XG4gIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzRnJvbVB1YmxpY0tleXMoYWRkcmVzc1ZlcnNpb24sIGFkZHJlc3NIYXNoTW9kZSwgc2lnbmF0dXJlc1JlcXVpcmVkLCBzdHhQdWJLZXlzKTtcblxuICByZXR1cm4geyBhZGRyZXNzOiBhZGRyZXNzVG9TdHJpbmcoYWRkcmVzcyksIGhhc2gxNjA6IGFkZHJlc3MuaGFzaDE2MCB9O1xufVxuXG4vKipcbiAqIHNpZ25zIGEgc3RyaW5nIG1lc3NhZ2VcbiAqXG4gKiBAcGFyYW0ga2V5UGFpclxuICogQHBhcmFtIGRhdGEgIC0gbWVzc2FnZSB0byBiZSBzaWduZWRcbiAqIEByZXR1cm5zIHNpZ25lZCBtZXNzYWdlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbk1lc3NhZ2Uoa2V5UGFpcjogS2V5UGFpciwgZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2O1xuICBpZiAocHJ2KSB7XG4gICAgcmV0dXJuIHNpZ25XaXRoS2V5KGNyZWF0ZVN0YWNrc1ByaXZhdGVLZXkocHJ2KSwgZGF0YSkuZGF0YTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIHNpZ25lZCBtZXNzYWdlXG4gKlxuICogVGhlIHNpZ25hdHVyZSBtdXN0IGJlIDEzMCBieXRlcyBsb25nIC0tIHNlZSBSRUNPVkVSQUJMRV9FQ0RTQV9TSUdfTEVOR1RIX0JZVEVTXG4gKiBpbiBAc3RhY2tzL3RyYW5zYWN0aW9ucy9zcmMvY29uc3RhbnRzLnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBtZXNzYWdlIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIC0gc2lnbmF0dXJlIHRvIHZlcmlmeVxuICogQHBhcmFtIHtzdHJpbmd9IHB1YmxpY0tleSAtIHB1YmxpYyBrZXkgYXMgaGV4IHN0cmluZyB1c2VkIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2ZXJpZmljYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUobWVzc2FnZTogc3RyaW5nLCBzaWduYXR1cmU6IHN0cmluZywgcHVibGljS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFpc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDEzMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWFsbEhleENoYXJzKHNpZ25hdHVyZSkpIHRocm93IG5ldyBVdGlsc0Vycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBpbnB1dCB0byB2ZXJpZnlTaWduYXR1cmUnKTtcbiAgaWYgKF8uaXNFbXB0eShtZXNzYWdlKSkgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ0Nhbm5vdCB2ZXJpZnkgZW1wdHkgbWVzc2FnZXMnKTtcblxuICAvLyBwcm92aWRlZCBwdWJsaWNLZXkgY2FuIGJlIGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkXG4gIGNvbnN0IGtleUVuY29kaW5nID0gcHVibGljS2V5Lmxlbmd0aCA9PT0gNjYgPyBQdWJLZXlFbmNvZGluZy5Db21wcmVzc2VkIDogUHViS2V5RW5jb2RpbmcuVW5jb21wcmVzc2VkO1xuXG4gIGNvbnN0IG1lc3NhZ2VTaWcgPSBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlKHNpZ25hdHVyZSk7XG5cbiAgY29uc3QgZm91bmRLZXkgPSBwdWJsaWNLZXlGcm9tU2lnbmF0dXJlKG1lc3NhZ2UsIG1lc3NhZ2VTaWcsIGtleUVuY29kaW5nKTtcblxuICByZXR1cm4gZm91bmRLZXkgPT09IHB1YmxpY0tleTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIGFkZHJlc3MgaW50byBhZGRyZXNzIGFuZCBtZW1vIGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgdGhlIGFkZHJlc3MgdG8gcHJvY2Vzc1xuICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IGNvbnRhaW5pbmcgYWRkcmVzcyBhbmQgbWVtbyBpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzczogc3RyaW5nKTogQWRkcmVzc0RldGFpbHMge1xuICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IHVybC5wYXJzZShhZGRyZXNzKTtcbiAgY29uc3QgcXVlcnlEZXRhaWxzID0gYWRkcmVzc0RldGFpbHMucXVlcnkgPyBuZXcgVVJMU2VhcmNoUGFyYW1zKGFkZHJlc3NEZXRhaWxzLnF1ZXJ5KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYmFzZUFkZHJlc3MgPSBhZGRyZXNzRGV0YWlscy5wYXRobmFtZSBhcyBzdHJpbmc7XG4gIGlmICghaXNWYWxpZEFkZHJlc3MoYmFzZUFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICB9XG4gIC8vIGFkZHJlc3MgZG9lc24ndCBoYXZlIGEgbWVtbyBpZFxuICBpZiAoYmFzZUFkZHJlc3MgPT09IGFkZHJlc3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgIG1lbW9JZDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBpZiAoIXF1ZXJ5RGV0YWlscyB8fCBfLmlzTmlsKHF1ZXJ5RGV0YWlscy5nZXQoJ21lbW9JZCcpKSkge1xuICAgIC8vIGlmIHRoZXJlIGFyZSBtb3JlIHByb3BlcnRpZXMsIHRoZSBxdWVyeSBkZXRhaWxzIG5lZWQgdG8gY29udGFpbiB0aGUgbWVtbyBpZCBwcm9wZXJ0eVxuICAgIHRocm93IG5ldyBVdGlsc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3Mgd2l0aCBtZW1vIGlkOiAke2FkZHJlc3N9YCk7XG4gIH1cbiAgY29uc3QgbWVtb0lkID0gcXVlcnlEZXRhaWxzLmdldCgnbWVtb0lkJykgYXMgc3RyaW5nO1xuICBjb25zdCBpbnRNZW1vSWQgPSBwYXJzZUludChtZW1vSWQsIDEwKTtcbiAgaWYgKGlzTmFOKGludE1lbW9JZCkgfHwgaW50TWVtb0lkIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBtZW1vIGlkOiAke21lbW9JZH1gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkcmVzczogYmFzZUFkZHJlc3MsXG4gICAgbWVtb0lkLFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCByZXR1cm4gYWRkcmVzcyB3aXRoIGFwcGVuZGVkIG1lbW8gaWRcbiAqXG4gKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSBhZGRyZXNzRGV0YWlsc1xuICogQHJldHVybnMge3N0cmluZ30gYWRkcmVzcyB3aXRoIG1lbW8gaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUFkZHJlc3MoeyBhZGRyZXNzLCBtZW1vSWQgfTogQWRkcmVzc0RldGFpbHMpOiBzdHJpbmcge1xuICBpZiAoIWlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICB9XG4gIGlmICghXy5pc1VuZGVmaW5lZChtZW1vSWQpKSB7XG4gICAgY29uc3QgaW50TWVtb0lkID0gcGFyc2VJbnQobWVtb0lkLCAxMCk7XG4gICAgaWYgKGlzTmFOKGludE1lbW9JZCkgfHwgaW50TWVtb0lkIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG1lbW8gaWQ6ICR7bWVtb0lkfWApO1xuICAgIH1cbiAgICByZXR1cm4gYCR7YWRkcmVzc30/bWVtb0lkPSR7bWVtb0lkfWA7XG4gIH1cbiAgcmV0dXJuIGFkZHJlc3M7XG59XG5cbi8qKlxuICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIGEgdmFsaWQgYWRkcmVzcyB3aXRoIG1lbW8gaWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyBhZGRyZXNzIGluIHRoZSBmb3JtIDxhZGRyZXNzPj9tZW1vSWQ9PG1lbW9JZD5cbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlzIGlucHV0IGlzIGEgdmFsaWQgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgcmV0dXJuIGFkZHJlc3MgPT09IG5vcm1hbGl6ZUFkZHJlc3MoYWRkcmVzc0RldGFpbHMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjbGFyaXR5IHZhbHVlIGlucHV0XG4gKlxuICogQHBhcmFtIHtDbGFyaXR5VmFsdWV9IGN2IGNsYXJpdHkgdmFsdWUgZnVuY3Rpb24gYXJndW1lbnRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZ2lmaWVkIGNsYXJpdHkgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUN2KGN2OiBDbGFyaXR5VmFsdWUpOiBhbnkge1xuICBzd2l0Y2ggKGN2LnR5cGUpIHtcbiAgICBjYXNlIENsYXJpdHlUeXBlLkludDpcbiAgICBjYXNlIENsYXJpdHlUeXBlLlVJbnQ6XG4gICAgICByZXR1cm4geyB0eXBlOiBjdi50eXBlLCB2YWx1ZTogY3YudmFsdWUudG9TdHJpbmcoKSB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lOlxuICAgICAgcmV0dXJuIHsgdHlwZTogY3YudHlwZSwgdmFsdWU6IHN0cmluZ2lmeUN2KGN2LnZhbHVlKSB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuVHVwbGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBjdi50eXBlLFxuICAgICAgICBkYXRhOiBfLm1hcFZhbHVlcyhjdi5kYXRhLCAodmFsdWUpID0+IHN0cmluZ2lmeUN2KHZhbHVlKSksXG4gICAgICB9O1xuICAgIGNhc2UgQ2xhcml0eVR5cGUuTGlzdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IGN2LnR5cGUsXG4gICAgICAgIGxpc3Q6IGN2Lmxpc3QubWFwKHN0cmluZ2lmeUN2KSxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjdjtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGZ1bmN0aW9uQXJncyBpbnRvIHNlbmQgcGFyYW1zIGZvciBzZW5kLW1hbnktbWVtbyBjb250cmFjdCBjYWxsc1xuICpcbiAqIEBwYXJhbSB7Q2xhcml0eVZhbHVlW119IGFyZ3MgZnVuY3Rpb25BcmdzIGZyb20gYSBjb250cmFjdCBjYWxsIHBheWxvYWRcbiAqIEByZXR1cm5zIHtTZW5kUGFyYW1zW119IEFuIGFycmF5IG9mIHNlbmRQYXJhbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uQXJnc1RvU2VuZFBhcmFtcyhhcmdzOiBDbGFyaXR5VmFsdWVbXSk6IFNlbmRQYXJhbXNbXSB7XG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMSB8fCBhcmdzWzBdLnR5cGUgIT09IENsYXJpdHlUeXBlLkxpc3QpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIGFyZ3NbMF0ubGlzdC5tYXAoKHR1cGxlKSA9PiB7XG4gICAgaWYgKFxuICAgICAgdHVwbGUudHlwZSAhPT0gQ2xhcml0eVR5cGUuVHVwbGUgfHxcbiAgICAgIHR1cGxlLmRhdGEudG8/LnR5cGUgIT09IENsYXJpdHlUeXBlLlByaW5jaXBhbFN0YW5kYXJkIHx8XG4gICAgICB0dXBsZS5kYXRhLnVzdHg/LnR5cGUgIT09IENsYXJpdHlUeXBlLlVJbnQgfHxcbiAgICAgIHR1cGxlLmRhdGEubWVtbz8udHlwZSAhPT0gQ2xhcml0eVR5cGUuQnVmZmVyXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXCJmdW5jdGlvbiBhcmdzIGRvbid0IG1hdGNoIHNlbmQtbWFueS1tZW1vIHR5cGUgZGVjbGFyYXRpb25cIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBjdlRvU3RyaW5nKHR1cGxlLmRhdGEudG8pLFxuICAgICAgYW1vdW50OiBjdlRvVmFsdWUodHVwbGUuZGF0YS51c3R4LCB0cnVlKSxcbiAgICAgIG1lbW86IHR1cGxlLmRhdGEubWVtby5idWZmZXIudG9TdHJpbmcoJ2FzY2lpJyksXG4gICAgfTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbkFyZ3NUb1Rva2VuVHJhbnNmZXJQYXJhbXMoYXJnczogQ2xhcml0eVZhbHVlW10pOiBUb2tlblRyYW5zZmVyUGFyYW1zIHtcbiAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcImZ1bmN0aW9uIGFyZ3MgZG9uJ3QgbWF0Y2ggdG9rZW4gdHJhbnNmZXIgZGVjbGFyYXRpb25cIik7XG4gIH1cbiAgaWYgKFxuICAgIGFyZ3NbMF0udHlwZSAhPT0gQ2xhcml0eVR5cGUuVUludCB8fFxuICAgIGFyZ3NbMV0udHlwZSAhPT0gQ2xhcml0eVR5cGUuUHJpbmNpcGFsU3RhbmRhcmQgfHxcbiAgICBhcmdzWzJdLnR5cGUgIT09IENsYXJpdHlUeXBlLlByaW5jaXBhbFN0YW5kYXJkXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcImZ1bmN0aW9uIGFyZ3MgZG9uJ3QgbWF0Y2ggdG9rZW4gdHJhbnNmZXIgZGVjbGFyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgdG9rZW5UcmFuc2ZlclBhcmFtcyA9IHtcbiAgICBhbW91bnQ6IGN2VG9WYWx1ZShhcmdzWzBdLCB0cnVlKSxcbiAgICBzZW5kZXI6IGN2VG9TdHJpbmcoYXJnc1sxXSksXG4gICAgcmVjaXBpZW50OiBjdlRvU3RyaW5nKGFyZ3NbMl0pLFxuICB9O1xuICBpZiAoYXJncy5sZW5ndGggPT09IDQgJiYgYXJnc1szXS50eXBlID09PSBDbGFyaXR5VHlwZS5CdWZmZXIpIHtcbiAgICB0b2tlblRyYW5zZmVyUGFyYW1zWydtZW1vJ10gPSBhcmdzWzNdLmJ1ZmZlci50b1N0cmluZygnYXNjaWknKTtcbiAgfVxuICByZXR1cm4gdG9rZW5UcmFuc2ZlclBhcmFtcztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB2ZXJzaW9uIG9mIGFuIGFkZHJlc3NcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyB0aGUgYWRkcmVzcyB3aXRoIG9yIHdpdGhvdXQgdGhlIG1lbW9JZFxuICogQHJldHVybnMge0FkZHJlc3NWZXJzaW9ufSBBIG51bWJlciB0aGF0IHJlcHJlc2VudCB0aGUgQWRkcmVzcyBWZXJzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzVmVyc2lvbihhZGRyZXNzOiBzdHJpbmcpOiBBZGRyZXNzVmVyc2lvbiB7XG4gIGNvbnN0IGJhc2VBZGRyZXNzID0gZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcykuYWRkcmVzcztcbiAgcmV0dXJuIGNyZWF0ZUFkZHJlc3MoYmFzZUFkZHJlc3MpLnZlcnNpb247XG59XG5cbi8qKlxuICogUmV0dXJucyBhIFNUWCBwdWIga2V5IGZyb20gYW4geHB1YlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB4cHViIGFuIHhwdWJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGEgY29tcHJlc3NlZCBTVFggcHViIGtleVxuICovXG5leHBvcnQgZnVuY3Rpb24geHB1YlRvU1RYUHVia2V5KHhwdWI6IHN0cmluZywgY29tcHJlc3NlZCA9IHRydWUpOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IEtleVBhaXIoeyBwdWI6IHhwdWIgfSkuZ2V0S2V5cyhjb21wcmVzc2VkKS5wdWI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSBhZGRyZXNzIHBvcnRpb24gb2YgYW4gYWRkcmVzc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gYW4gYWRkcmVzc1xuICogQHJldHVybnMge1N0cmluZ30gLSB0aGUgYmFzZSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICByZXR1cm4gYWRkcmVzc0RldGFpbHMuYWRkcmVzcztcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBhbiBhZGRyZXNzIHRvIHRoZSBiYXNlIGFkZHJlc3MgdG8gY2hlY2sgaWYgbWF0Y2hzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gYW4gYWRkcmVzc1xuICogQHBhcmFtIHtTdHJpbmd9IGJhc2VBZGRyZXNzIC0gYSBiYXNlIGFkZHJlc3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBiYXNlQWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghaXNWYWxpZEFkZHJlc3NXaXRoUGF5bWVudElkKGFkZHJlc3MpKSB7XG4gICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICB9XG4gIHJldHVybiBnZXRCYXNlQWRkcmVzcyhhZGRyZXNzKSA9PT0gZ2V0QmFzZUFkZHJlc3MoYmFzZUFkZHJlc3MpO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0b2tlbk5hbWUgZnJvbSBsaXN0IG9mIHNpcDEwIHRva2VucyB1c2luZyBjb250cmFjdCBkZXRhaWxzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0QWRkcmVzc1xuICogQHBhcmFtIHtTdHJpbmd9IGNvbnRyYWN0TmFtZVxuICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVG9rZW5OYW1lQnlDb250cmFjdChjb250cmFjdEFkZHJlc3M6IHN0cmluZywgY29udHJhY3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB7XG4gICAgY29uc3QgdG9rZW5OYW1lID0gY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4gaW5zdGFuY2VvZiBTaXAxMFRva2VuICYmIGNvaW4uYXNzZXRJZC5pbmNsdWRlcyhgJHtjb250cmFjdEFkZHJlc3N9LiR7Y29udHJhY3ROYW1lfWApKVxuICAgICAgLm1hcCgoY29pbikgPT4gY29pbi5uYW1lKTtcbiAgICByZXR1cm4gdG9rZW5OYW1lID8gdG9rZW5OYW1lWzBdIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGNvbnRyYWN0VG9rZW5OYW1lIGZyb20gbGlzdCBvZiBzaXAxMCB0b2tlbnMgdXNpbmcgY29udHJhY3QgZGV0YWlsc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdEFkZHJlc3NcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb250cmFjdE5hbWVcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZENvbnRyYWN0VG9rZW5OYW1lVXNpbmdDb250cmFjdChjb250cmFjdEFkZHJlc3M6IHN0cmluZywgY29udHJhY3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB7XG4gICAgY29uc3Qgc2lwMTBUb2tlbiA9IGNvaW5zXG4gICAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luIGluc3RhbmNlb2YgU2lwMTBUb2tlbiAmJiBjb2luLmFzc2V0SWQuaW5jbHVkZXMoYCR7Y29udHJhY3RBZGRyZXNzfS4ke2NvbnRyYWN0TmFtZX1gKSlcbiAgICAgIC5tYXAoKGNvaW4pID0+IGNvaW4gYXMgU2lwMTBUb2tlbik7XG4gICAgcmV0dXJuIHNpcDEwVG9rZW4gPyBzaXAxMFRva2VuWzBdLmFzc2V0SWQuc3BsaXQoJzo6JylbMV0gOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYWRkcmVzcyBhbmQgbWVtbyBkZXRhaWxzIGZyb20gYWRkcmVzcyBpbnB1dFxuICpcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKiBAcmV0dXJucyB7QWRkcmVzc0RldGFpbHN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1vSWRBbmRCYXNlQWRkcmVzc0Zyb21BZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IEFkZHJlc3NEZXRhaWxzIHtcbiAgY29uc3QgW2Jhc2VBZGRyZXNzLCBxdWVyeVN0cmluZ10gPSBhZGRyZXNzLnNwbGl0KCc/Jyk7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpO1xuICBjb25zdCBtZW1vSWQgPSBwYXJhbXMuZ2V0KCdtZW1vSWQnKTtcblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGJhc2VBZGRyZXNzLFxuICAgIG1lbW9JZDogbWVtb0lkID8gbWVtb0lkIDogdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAMzC,CAAC"}
|
package/dist/src/register.js
CHANGED
|
@@ -3,9 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.register = void 0;
|
|
4
4
|
const stx_1 = require("./stx");
|
|
5
5
|
const tstx_1 = require("./tstx");
|
|
6
|
+
const sip10Token_1 = require("./sip10Token");
|
|
6
7
|
const register = (sdk) => {
|
|
7
8
|
sdk.register('stx', stx_1.Stx.createInstance);
|
|
8
9
|
sdk.register('tstx', tstx_1.Tstx.createInstance);
|
|
10
|
+
sip10Token_1.Sip10Token.createTokenConstructors().forEach(({ name, coinConstructor }) => {
|
|
11
|
+
sdk.register(name, coinConstructor);
|
|
12
|
+
});
|
|
9
13
|
};
|
|
10
14
|
exports.register = register;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRCO0FBQzVCLGlDQUE4QjtBQUM5Qiw2Q0FBMEM7QUFFbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFjLEVBQVEsRUFBRTtJQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLHVCQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBTlcsUUFBQSxRQUFRLFlBTW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgU3R4IH0gZnJvbSAnLi9zdHgnO1xuaW1wb3J0IHsgVHN0eCB9IGZyb20gJy4vdHN0eCc7XG5pbXBvcnQgeyBTaXAxMFRva2VuIH0gZnJvbSAnLi9zaXAxMFRva2VuJztcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyID0gKHNkazogQml0R29CYXNlKTogdm9pZCA9PiB7XG4gIHNkay5yZWdpc3Rlcignc3R4JywgU3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgc2RrLnJlZ2lzdGVyKCd0c3R4JywgVHN0eC5jcmVhdGVJbnN0YW5jZSk7XG4gIFNpcDEwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xufTtcbiJdfQ==
|