@bitgo-beta/sdk-coin-sui 3.0.3-beta.86 → 3.0.3-beta.861
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 +777 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/lib/compareTransactionBlocks.js +2 -3
- package/dist/src/lib/constants.d.ts +9 -2
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +18 -2
- package/dist/src/lib/customTransaction.d.ts +57 -0
- package/dist/src/lib/customTransaction.d.ts.map +1 -0
- package/dist/src/lib/customTransaction.js +159 -0
- package/dist/src/lib/customTransactionBuilder.d.ts +46 -0
- package/dist/src/lib/customTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/customTransactionBuilder.js +117 -0
- package/dist/src/lib/iface.d.ts +76 -10
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +40 -5
- package/dist/src/lib/index.d.ts +8 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +40 -10
- package/dist/src/lib/keyPair.js +24 -10
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts +9 -9
- package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Inputs.js +18 -19
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +40 -354
- package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionBlock.js +22 -25
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +74 -74
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +41 -44
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts +133 -188
- package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/Transactions.js +52 -53
- package/dist/src/lib/mystenlab/builder/bcs.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/bcs.js +2 -2
- package/dist/src/lib/mystenlab/builder/index.js +6 -2
- package/dist/src/lib/mystenlab/builder/serializer.js +6 -8
- package/dist/src/lib/mystenlab/builder/utils.d.ts +1 -1
- package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/builder/utils.js +4 -4
- package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
- package/dist/src/lib/mystenlab/framework/framework.d.ts +6 -6
- package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/framework/framework.js +22 -25
- package/dist/src/lib/mystenlab/framework/index.js +6 -2
- package/dist/src/lib/mystenlab/framework/sui-system-state.js +2 -2
- package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +2 -2
- package/dist/src/lib/mystenlab/types/coin.d.ts +10 -10
- package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/coin.js +19 -19
- package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
- package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/common.js +22 -22
- package/dist/src/lib/mystenlab/types/events.d.ts +14 -14
- package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/events.js +17 -17
- package/dist/src/lib/mystenlab/types/index.js +6 -2
- package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
- package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/normalized.js +41 -41
- package/dist/src/lib/mystenlab/types/objects.d.ts +51 -51
- package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/objects.js +96 -106
- package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
- package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/option.js +2 -3
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +8 -8
- package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/sui-bcs.js +5 -5
- package/dist/src/lib/mystenlab/types/transactions.d.ts +625 -625
- package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/transactions.js +178 -194
- package/dist/src/lib/mystenlab/types/validator.d.ts +9 -9
- package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -1
- package/dist/src/lib/mystenlab/types/validator.js +124 -124
- package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
- package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
- package/dist/src/lib/resources/walrusConfig.js +37 -0
- package/dist/src/lib/rpcClient.d.ts +5 -0
- package/dist/src/lib/rpcClient.d.ts.map +1 -0
- package/dist/src/lib/rpcClient.js +74 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
- package/dist/src/lib/stakingBuilder.js +23 -7
- package/dist/src/lib/stakingTransaction.d.ts +1 -1
- package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/stakingTransaction.js +26 -15
- package/dist/src/lib/tokenTransferBuilder.d.ts +38 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +132 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts +57 -0
- package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferTransaction.js +250 -0
- package/dist/src/lib/transaction.d.ts +12 -4
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +91 -18
- package/dist/src/lib/transactionBuilder.d.ts +2 -3
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +4 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts +14 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +42 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +21 -5
- package/dist/src/lib/transferTransaction.d.ts +1 -1
- package/dist/src/lib/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transferTransaction.js +31 -8
- package/dist/src/lib/unstakingBuilder.js +6 -6
- package/dist/src/lib/unstakingTransaction.d.ts +1 -1
- package/dist/src/lib/unstakingTransaction.d.ts.map +1 -1
- package/dist/src/lib/unstakingTransaction.js +31 -17
- package/dist/src/lib/utils.d.ts +15 -4
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +264 -29
- package/dist/src/lib/walrusStakingBuilder.d.ts +66 -0
- package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingBuilder.js +200 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
- package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusStakingTransaction.js +269 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeBuilder.js +173 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
- package/dist/src/lib/walrusWithdrawStakeTransaction.js +186 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sui.d.ts +44 -8
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +472 -32
- package/dist/src/suiToken.d.ts +22 -0
- package/dist/src/suiToken.d.ts.map +1 -0
- package/dist/src/suiToken.js +61 -0
- package/dist/src/tsui.js +1 -1
- package/package.json +10 -8
package/dist/src/lib/utils.js
CHANGED
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.IntentScope = exports.IntentVersion = exports.AppId = exports.Utils =
|
|
6
|
+
exports.IntentScope = exports.IntentVersion = exports.AppId = exports.Utils = void 0;
|
|
7
|
+
exports.isImmOrOwnedObj = isImmOrOwnedObj;
|
|
7
8
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
9
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
10
|
const constants_1 = require("./constants");
|
|
@@ -15,10 +16,13 @@ const types_1 = require("./mystenlab/types");
|
|
|
15
16
|
const builder_1 = require("./mystenlab/builder");
|
|
16
17
|
const keyPair_1 = require("./keyPair");
|
|
17
18
|
const blake2b_1 = __importDefault(require("@bitgo-beta/blake2b"));
|
|
19
|
+
const TransactionDataBlock_1 = require("./mystenlab/builder/TransactionDataBlock");
|
|
20
|
+
const rpcClient_1 = require("./rpcClient");
|
|
21
|
+
const assert_1 = __importDefault(require("assert"));
|
|
22
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
18
23
|
function isImmOrOwnedObj(obj) {
|
|
19
24
|
return 'ImmOrOwned' in obj;
|
|
20
25
|
}
|
|
21
|
-
exports.isImmOrOwnedObj = isImmOrOwnedObj;
|
|
22
26
|
class Utils {
|
|
23
27
|
/** @inheritdoc */
|
|
24
28
|
isValidBlockId(hash) {
|
|
@@ -30,7 +34,7 @@ class Utils {
|
|
|
30
34
|
}
|
|
31
35
|
/** @inheritdoc */
|
|
32
36
|
isValidPublicKey(key) {
|
|
33
|
-
return sdk_core_1.isValidEd25519PublicKey(key);
|
|
37
|
+
return (0, sdk_core_1.isValidEd25519PublicKey)(key);
|
|
34
38
|
}
|
|
35
39
|
/** @inheritdoc */
|
|
36
40
|
isValidSignature(signature) {
|
|
@@ -48,9 +52,9 @@ class Utils {
|
|
|
48
52
|
*/
|
|
49
53
|
isValidRawTransaction(rawTransaction) {
|
|
50
54
|
try {
|
|
51
|
-
const data = bcs_1.fromB64(rawTransaction);
|
|
55
|
+
const data = (0, bcs_1.fromB64)(rawTransaction);
|
|
52
56
|
const deserialized = builder_1.builder.de('TransactionData', data);
|
|
53
|
-
builder_1.builder.ser('TransactionData', deserialized, { maxSize:
|
|
57
|
+
builder_1.builder.ser('TransactionData', deserialized, { maxSize: TransactionDataBlock_1.TRANSACTION_DATA_MAX_SIZE });
|
|
54
58
|
return true;
|
|
55
59
|
}
|
|
56
60
|
catch (e) {
|
|
@@ -88,7 +92,7 @@ class Utils {
|
|
|
88
92
|
* @param {string} fieldName Name of the field to validate, its needed to return which field is failing on case of error.
|
|
89
93
|
*/
|
|
90
94
|
validateAddress(address, fieldName) {
|
|
91
|
-
if (!address || !types_1.isValidSuiAddress(types_1.normalizeSuiAddress(address))) {
|
|
95
|
+
if (!address || !(0, types_1.isValidSuiAddress)((0, types_1.normalizeSuiAddress)(address))) {
|
|
92
96
|
throw new sdk_core_1.BuildTransactionError(`Invalid or missing ${fieldName}, got: ${address}`);
|
|
93
97
|
}
|
|
94
98
|
}
|
|
@@ -148,11 +152,18 @@ class Utils {
|
|
|
148
152
|
getTransactionType(suiTransactionType) {
|
|
149
153
|
switch (suiTransactionType) {
|
|
150
154
|
case iface_1.SuiTransactionType.Transfer:
|
|
155
|
+
case iface_1.SuiTransactionType.TokenTransfer:
|
|
151
156
|
return sdk_core_1.TransactionType.Send;
|
|
152
157
|
case iface_1.SuiTransactionType.AddStake:
|
|
158
|
+
case iface_1.SuiTransactionType.WalrusStakeWithPool:
|
|
153
159
|
return sdk_core_1.TransactionType.StakingAdd;
|
|
160
|
+
case iface_1.SuiTransactionType.WalrusRequestWithdrawStake:
|
|
161
|
+
return sdk_core_1.TransactionType.StakingDeactivate;
|
|
154
162
|
case iface_1.SuiTransactionType.WithdrawStake:
|
|
163
|
+
case iface_1.SuiTransactionType.WalrusWithdrawStake:
|
|
155
164
|
return sdk_core_1.TransactionType.StakingWithdraw;
|
|
165
|
+
case iface_1.SuiTransactionType.CustomTx:
|
|
166
|
+
return sdk_core_1.TransactionType.CustomTx;
|
|
156
167
|
}
|
|
157
168
|
}
|
|
158
169
|
/**
|
|
@@ -163,8 +174,18 @@ class Utils {
|
|
|
163
174
|
*/
|
|
164
175
|
getSuiTransactionType(command) {
|
|
165
176
|
switch (command.kind) {
|
|
177
|
+
case 'SplitCoins':
|
|
178
|
+
if (command.coin.kind === 'GasCoin') {
|
|
179
|
+
return iface_1.SuiTransactionType.Transfer;
|
|
180
|
+
}
|
|
181
|
+
return iface_1.SuiTransactionType.TokenTransfer;
|
|
166
182
|
case 'TransferObjects':
|
|
167
183
|
return iface_1.SuiTransactionType.Transfer;
|
|
184
|
+
case 'MergeCoins':
|
|
185
|
+
if (command.destination.kind === 'GasCoin') {
|
|
186
|
+
return iface_1.SuiTransactionType.Transfer;
|
|
187
|
+
}
|
|
188
|
+
return iface_1.SuiTransactionType.TokenTransfer;
|
|
168
189
|
case 'MoveCall':
|
|
169
190
|
if (command.target.endsWith(iface_1.MethodNames.RequestAddStake)) {
|
|
170
191
|
return iface_1.SuiTransactionType.AddStake;
|
|
@@ -172,34 +193,78 @@ class Utils {
|
|
|
172
193
|
else if (command.target.endsWith(iface_1.MethodNames.RequestWithdrawStake)) {
|
|
173
194
|
return iface_1.SuiTransactionType.WithdrawStake;
|
|
174
195
|
}
|
|
196
|
+
else if (command.target.endsWith(iface_1.MethodNames.StakingPoolSplit) ||
|
|
197
|
+
command.target.endsWith(iface_1.MethodNames.PublicTransfer)) {
|
|
198
|
+
return iface_1.SuiTransactionType.CustomTx;
|
|
199
|
+
}
|
|
200
|
+
else if (command.target.endsWith(iface_1.MethodNames.WalrusStakeWithPool)) {
|
|
201
|
+
return iface_1.SuiTransactionType.WalrusStakeWithPool;
|
|
202
|
+
}
|
|
203
|
+
else if (command.target.endsWith(iface_1.MethodNames.WalrusRequestWithdrawStake) ||
|
|
204
|
+
command.target.endsWith(iface_1.MethodNames.WalrusSplitStakedWal)) {
|
|
205
|
+
return iface_1.SuiTransactionType.WalrusRequestWithdrawStake;
|
|
206
|
+
}
|
|
207
|
+
else if (command.target.endsWith(iface_1.MethodNames.WalrusWithdrawStake)) {
|
|
208
|
+
return iface_1.SuiTransactionType.WalrusWithdrawStake;
|
|
209
|
+
}
|
|
175
210
|
else {
|
|
176
|
-
throw new sdk_core_1.InvalidTransactionError(`unsupported target method`);
|
|
211
|
+
throw new sdk_core_1.InvalidTransactionError(`unsupported target method ${command.target}`);
|
|
177
212
|
}
|
|
178
213
|
default:
|
|
179
|
-
throw new sdk_core_1.InvalidTransactionError(`unsupported transaction kind`);
|
|
214
|
+
throw new sdk_core_1.InvalidTransactionError(`unsupported transaction kind ${command.kind}`);
|
|
180
215
|
}
|
|
181
216
|
}
|
|
182
217
|
getRecipients(tx) {
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
tx.tx.transactions.forEach((transaction
|
|
218
|
+
const receipts = [];
|
|
219
|
+
const splitResults = [];
|
|
220
|
+
tx.tx.transactions.forEach((transaction) => {
|
|
186
221
|
if (transaction.kind === 'SplitCoins') {
|
|
187
222
|
const index = transaction.amounts[0].index;
|
|
188
223
|
const input = tx.tx.inputs[index];
|
|
189
|
-
|
|
224
|
+
splitResults.push(this.getAmount(input));
|
|
190
225
|
}
|
|
226
|
+
if (transaction.kind === 'MoveCall' && transaction.target.endsWith(iface_1.MethodNames.StakingPoolSplit)) {
|
|
227
|
+
const index = transaction.arguments[1].index;
|
|
228
|
+
const input = tx.tx.inputs[index];
|
|
229
|
+
splitResults.push(this.getAmount(input));
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
const destinations = [];
|
|
233
|
+
tx.tx.transactions.forEach((transaction) => {
|
|
191
234
|
if (transaction.kind === 'TransferObjects') {
|
|
192
235
|
const index = transaction.address.index;
|
|
193
236
|
const input = tx.tx.inputs[index];
|
|
194
|
-
|
|
237
|
+
destinations.push(this.getAddress(input));
|
|
195
238
|
}
|
|
196
239
|
});
|
|
197
|
-
|
|
198
|
-
|
|
240
|
+
destinations.map((address, i) => {
|
|
241
|
+
receipts.push({
|
|
199
242
|
address: address,
|
|
200
|
-
amount:
|
|
201
|
-
};
|
|
243
|
+
amount: splitResults[i].toString(),
|
|
244
|
+
});
|
|
202
245
|
});
|
|
246
|
+
tx.tx.transactions.forEach((transaction) => {
|
|
247
|
+
if (transaction.kind === 'MoveCall' && transaction.target.endsWith(iface_1.MethodNames.PublicTransfer)) {
|
|
248
|
+
const destinationArg = transaction.arguments[1];
|
|
249
|
+
const destinationInput = tx.tx.inputs[destinationArg.index];
|
|
250
|
+
const destination = this.getAddress(destinationInput);
|
|
251
|
+
const movingObject = transaction.arguments[0];
|
|
252
|
+
if (movingObject.kind === 'Input') {
|
|
253
|
+
receipts.push({
|
|
254
|
+
address: destination,
|
|
255
|
+
amount: '0', // set 0, not able to get amount merely from parsing
|
|
256
|
+
data: 'unknown amount',
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
else if (movingObject.kind === 'Result') {
|
|
260
|
+
receipts.push({
|
|
261
|
+
address: destination,
|
|
262
|
+
amount: splitResults[movingObject.index].toString(),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
return receipts;
|
|
203
268
|
}
|
|
204
269
|
/**
|
|
205
270
|
* Get add staking requests
|
|
@@ -229,20 +294,78 @@ class Utils {
|
|
|
229
294
|
};
|
|
230
295
|
});
|
|
231
296
|
}
|
|
297
|
+
getWalrusStakeWithPoolRequests(tx) {
|
|
298
|
+
const amounts = [];
|
|
299
|
+
const addresses = [];
|
|
300
|
+
tx.transactions.forEach((transaction, i) => {
|
|
301
|
+
if (transaction.kind === 'SplitCoins') {
|
|
302
|
+
const amountInputIdx = transaction.amounts[0].index;
|
|
303
|
+
amounts.push(utils.getAmount(tx.inputs[amountInputIdx]));
|
|
304
|
+
}
|
|
305
|
+
if (transaction.kind === 'MoveCall') {
|
|
306
|
+
const validatorAddressInputIdx = transaction.arguments[2]
|
|
307
|
+
.index;
|
|
308
|
+
const validatorAddress = utils.getAddress(tx.inputs[validatorAddressInputIdx]);
|
|
309
|
+
addresses.push(validatorAddress);
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
return addresses.map((address, index) => {
|
|
313
|
+
return {
|
|
314
|
+
validatorAddress: address,
|
|
315
|
+
amount: amounts[index],
|
|
316
|
+
};
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
getWalrusWithdrawStakeRequests(tx) {
|
|
320
|
+
let amount = undefined;
|
|
321
|
+
let stakedWal;
|
|
322
|
+
let stakedWalInputIdx = -1;
|
|
323
|
+
// TS won't let us use filter
|
|
324
|
+
const moveCalls = [];
|
|
325
|
+
tx.transactions.forEach((transaction) => {
|
|
326
|
+
if (transaction.kind === 'MoveCall') {
|
|
327
|
+
moveCalls.push(transaction);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
if (moveCalls.length === 1) {
|
|
331
|
+
// This is either request_withdraw full or withdraw full (either way, no amount)
|
|
332
|
+
stakedWalInputIdx = moveCalls[0].arguments[1].index;
|
|
333
|
+
}
|
|
334
|
+
else if (moveCalls.length === 2) {
|
|
335
|
+
// This is request_withdraw partial
|
|
336
|
+
const amountInputIdx = moveCalls[0].arguments[1].index;
|
|
337
|
+
amount = utils.getAmount(tx.inputs[amountInputIdx]);
|
|
338
|
+
stakedWalInputIdx = moveCalls[0].arguments[0].index;
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid number of MoveCall transactions');
|
|
342
|
+
}
|
|
343
|
+
let input = tx.inputs[stakedWalInputIdx];
|
|
344
|
+
if ('value' in input) {
|
|
345
|
+
input = input.value;
|
|
346
|
+
}
|
|
347
|
+
if ('Object' in input && isImmOrOwnedObj(input.Object)) {
|
|
348
|
+
stakedWal = utils.normalizeSuiObjectRef(input.Object.ImmOrOwned);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
throw new sdk_core_1.InvalidTransactionError(`Expected StakedWal object at input index ${stakedWalInputIdx}, found ${input}`);
|
|
352
|
+
}
|
|
353
|
+
return { amount, stakedWal };
|
|
354
|
+
}
|
|
232
355
|
getAmount(input) {
|
|
233
|
-
return sui_bcs_1.isPureArg(input)
|
|
234
|
-
? builder_1.builder.de(bcs_1.BCS.U64, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64')
|
|
356
|
+
return (0, sui_bcs_1.isPureArg)(input)
|
|
357
|
+
? builder_1.builder.de(bcs_1.BCS.U64, buffer_1.Buffer.from(new Uint16Array(input.Pure)).toString('base64'), 'base64')
|
|
235
358
|
: input.value;
|
|
236
359
|
}
|
|
237
360
|
getAddress(input) {
|
|
238
361
|
if (input.hasOwnProperty('value')) {
|
|
239
|
-
return sui_bcs_1.isPureArg(input.value)
|
|
240
|
-
? types_1.normalizeSuiAddress(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(
|
|
362
|
+
return (0, sui_bcs_1.isPureArg)(input.value)
|
|
363
|
+
? (0, types_1.normalizeSuiAddress)(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(new Uint16Array(input.value?.Pure)).toString('base64'), 'base64'))
|
|
241
364
|
: input.value;
|
|
242
365
|
}
|
|
243
366
|
else {
|
|
244
|
-
return sui_bcs_1.isPureArg(input)
|
|
245
|
-
? types_1.normalizeSuiAddress(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64'))
|
|
367
|
+
return (0, sui_bcs_1.isPureArg)(input)
|
|
368
|
+
? (0, types_1.normalizeSuiAddress)(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(new Uint16Array(input.Pure)).toString('base64'), 'base64'))
|
|
246
369
|
: input.value;
|
|
247
370
|
}
|
|
248
371
|
}
|
|
@@ -253,7 +376,7 @@ class Utils {
|
|
|
253
376
|
}
|
|
254
377
|
normalizeSuiObjectRef(obj) {
|
|
255
378
|
return {
|
|
256
|
-
objectId: types_1.normalizeSuiObjectId(obj.objectId),
|
|
379
|
+
objectId: (0, types_1.normalizeSuiObjectId)(obj.objectId),
|
|
257
380
|
version: Number(obj.version),
|
|
258
381
|
digest: obj.digest,
|
|
259
382
|
};
|
|
@@ -272,11 +395,123 @@ class Utils {
|
|
|
272
395
|
const pubBuf = buffer_1.Buffer.from(publicKey, 'hex');
|
|
273
396
|
tmp.set([keyPair_1.SIGNATURE_SCHEME_TO_FLAG['ED25519']]); // ED25519: 0x00,
|
|
274
397
|
tmp.set(pubBuf, 1);
|
|
275
|
-
return types_1.normalizeSuiAddress(blake2b_1.default(PUBLIC_KEY_SIZE)
|
|
398
|
+
return (0, types_1.normalizeSuiAddress)((0, blake2b_1.default)(PUBLIC_KEY_SIZE)
|
|
276
399
|
.update(tmp)
|
|
277
400
|
.digest('hex')
|
|
278
401
|
.slice(0, constants_1.SUI_ADDRESS_LENGTH * 2));
|
|
279
402
|
}
|
|
403
|
+
async getFeeEstimate(url, txHex) {
|
|
404
|
+
const result = await (0, rpcClient_1.makeRPC)(url, 'sui_dryRunTransactionBlock', [txHex]);
|
|
405
|
+
(0, assert_1.default)(result.effects);
|
|
406
|
+
(0, assert_1.default)(result.effects.gasUsed);
|
|
407
|
+
if (result.effects.status.status !== 'success') {
|
|
408
|
+
console.error(`Dry run failed, could not automatically determine a budget for txHex ${txHex}`);
|
|
409
|
+
throw new Error(`Failed to get fee estimate`);
|
|
410
|
+
}
|
|
411
|
+
const gasObject = result.effects.gasUsed;
|
|
412
|
+
const storageCost = new bignumber_js_1.default(gasObject.storageCost);
|
|
413
|
+
const computationCost = new bignumber_js_1.default(gasObject.computationCost);
|
|
414
|
+
const storageRebate = new bignumber_js_1.default(gasObject.storageRebate);
|
|
415
|
+
const netCost = computationCost.plus(storageCost).minus(storageRebate);
|
|
416
|
+
return netCost.comparedTo(computationCost) > 0 ? netCost : computationCost;
|
|
417
|
+
}
|
|
418
|
+
async getBalance(url, owner, coinType) {
|
|
419
|
+
if (coinType === undefined) {
|
|
420
|
+
coinType = types_1.SUI_TYPE_ARG;
|
|
421
|
+
}
|
|
422
|
+
const result = await (0, rpcClient_1.makeRPC)(url, 'suix_getBalance', [owner, coinType]);
|
|
423
|
+
return result.totalBalance;
|
|
424
|
+
}
|
|
425
|
+
async getInputCoins(url, owner, coinType) {
|
|
426
|
+
if (coinType === undefined) {
|
|
427
|
+
coinType = types_1.SUI_TYPE_ARG;
|
|
428
|
+
}
|
|
429
|
+
let hasNextPage = true;
|
|
430
|
+
let cursor = undefined;
|
|
431
|
+
let params = [owner, coinType];
|
|
432
|
+
let data = [];
|
|
433
|
+
while (hasNextPage) {
|
|
434
|
+
if (cursor !== undefined) {
|
|
435
|
+
params = [owner, coinType, cursor];
|
|
436
|
+
}
|
|
437
|
+
try {
|
|
438
|
+
const result = await (0, rpcClient_1.makeRPC)(url, 'suix_getCoins', params);
|
|
439
|
+
data = data.concat(result.data);
|
|
440
|
+
hasNextPage = result.hasNextPage;
|
|
441
|
+
cursor = result.nextCursor;
|
|
442
|
+
}
|
|
443
|
+
catch (e) {
|
|
444
|
+
console.error(`Failed to get input coins from the node ${e}`);
|
|
445
|
+
throw new Error(`Failed to get input coins from the node.`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return data
|
|
449
|
+
.filter((object) => object.balance !== undefined)
|
|
450
|
+
.map((object) => {
|
|
451
|
+
return {
|
|
452
|
+
coinType: object.coinType,
|
|
453
|
+
objectId: object.coinObjectId,
|
|
454
|
+
version: object.version,
|
|
455
|
+
digest: object.digest,
|
|
456
|
+
balance: new bignumber_js_1.default(object.balance),
|
|
457
|
+
};
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
async executeTransactionBlock(url, serializedTx, signatures) {
|
|
461
|
+
const reqType = 'WaitForEffectsCert';
|
|
462
|
+
const options = { showEffects: true };
|
|
463
|
+
const params = [serializedTx, signatures, options, reqType];
|
|
464
|
+
let result;
|
|
465
|
+
try {
|
|
466
|
+
result = await (0, rpcClient_1.makeRPC)(url, 'sui_executeTransactionBlock', params);
|
|
467
|
+
}
|
|
468
|
+
catch (e) {
|
|
469
|
+
throw new Error(`${e.message}`);
|
|
470
|
+
}
|
|
471
|
+
return result.digest;
|
|
472
|
+
}
|
|
473
|
+
validateNonNegativeNumber(defaultVal, errorMsg, inputVal) {
|
|
474
|
+
if (inputVal === undefined) {
|
|
475
|
+
return defaultVal;
|
|
476
|
+
}
|
|
477
|
+
let nonNegativeNum;
|
|
478
|
+
try {
|
|
479
|
+
nonNegativeNum = Number(inputVal);
|
|
480
|
+
}
|
|
481
|
+
catch (e) {
|
|
482
|
+
throw new Error(errorMsg);
|
|
483
|
+
}
|
|
484
|
+
if (isNaN(nonNegativeNum.valueOf()) || nonNegativeNum < 0) {
|
|
485
|
+
throw new Error(errorMsg);
|
|
486
|
+
}
|
|
487
|
+
return nonNegativeNum;
|
|
488
|
+
}
|
|
489
|
+
getSuiTokenFromAddress(packageId, network) {
|
|
490
|
+
const tokens = statics_1.coins.filter((coin) => {
|
|
491
|
+
return (coin instanceof statics_1.SuiCoin &&
|
|
492
|
+
coin.network.type === network.type &&
|
|
493
|
+
coin.packageId.toLowerCase() === packageId.toLowerCase());
|
|
494
|
+
});
|
|
495
|
+
const tokensArray = tokens.map((token) => token);
|
|
496
|
+
if (tokensArray.length >= 1) {
|
|
497
|
+
// there should never be two tokens with the same contract address, so we assert that here
|
|
498
|
+
(0, assert_1.default)(tokensArray.length === 1);
|
|
499
|
+
return tokensArray[0];
|
|
500
|
+
}
|
|
501
|
+
return undefined;
|
|
502
|
+
}
|
|
503
|
+
selectObjectsInDescOrderOfBalance(objs, limit) {
|
|
504
|
+
objs = objs.sort((a, b) => {
|
|
505
|
+
return b.balance.minus(a.balance).toNumber();
|
|
506
|
+
});
|
|
507
|
+
return objs.reduce((acc, obj) => {
|
|
508
|
+
if (limit.gt(0)) {
|
|
509
|
+
acc.push(obj);
|
|
510
|
+
limit = limit.minus(obj.balance);
|
|
511
|
+
}
|
|
512
|
+
return acc;
|
|
513
|
+
}, []);
|
|
514
|
+
}
|
|
280
515
|
}
|
|
281
516
|
exports.Utils = Utils;
|
|
282
517
|
const utils = new Utils();
|
|
@@ -284,16 +519,16 @@ exports.default = utils;
|
|
|
284
519
|
var AppId;
|
|
285
520
|
(function (AppId) {
|
|
286
521
|
AppId[AppId["Sui"] = 0] = "Sui";
|
|
287
|
-
})(AppId
|
|
522
|
+
})(AppId || (exports.AppId = AppId = {}));
|
|
288
523
|
var IntentVersion;
|
|
289
524
|
(function (IntentVersion) {
|
|
290
525
|
IntentVersion[IntentVersion["V0"] = 0] = "V0";
|
|
291
|
-
})(IntentVersion
|
|
526
|
+
})(IntentVersion || (exports.IntentVersion = IntentVersion = {}));
|
|
292
527
|
var IntentScope;
|
|
293
528
|
(function (IntentScope) {
|
|
294
529
|
IntentScope[IntentScope["TransactionData"] = 0] = "TransactionData";
|
|
295
530
|
IntentScope[IntentScope["TransactionEffects"] = 1] = "TransactionEffects";
|
|
296
531
|
IntentScope[IntentScope["CheckpointSummary"] = 2] = "CheckpointSummary";
|
|
297
532
|
IntentScope[IntentScope["PersonalMessage"] = 3] = "PersonalMessage";
|
|
298
|
-
})(IntentScope
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUM5QixnRUFBcUM7QUFDckMsMkNBQWlEO0FBQ2pELHVEQUFzRDtBQUN0RCxxQ0FBMkM7QUFDM0MsbUNBT2lCO0FBQ2pCLG1DQUFnQztBQUNoQyw2Q0FNMkI7QUFDM0IsaURBTzZCO0FBQzdCLHVDQUFxRDtBQUNyRCxrRUFBMEM7QUFFMUMsU0FBZ0IsZUFBZSxDQUFDLEdBQTRCO0lBQzFELE9BQU8sWUFBWSxJQUFJLEdBQUcsQ0FBQztBQUM3QixDQUFDO0FBRkQsMENBRUM7QUFFRCxNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixPQUFPLGtDQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUMsY0FBc0I7UUFDMUMsSUFBSTtZQUNGLE1BQU0sSUFBSSxHQUFHLGFBQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNyQyxNQUFNLFlBQVksR0FBRyxpQkFBTyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RCxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsY0FBc0I7UUFDM0MsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLElBQUksZ0NBQXFCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDL0MsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FBQyxTQUFtQixFQUFFLFNBQWlCO1FBQ3RELEtBQUssTUFBTSxPQUFPLElBQUksU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUNoRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMseUJBQWlCLENBQUMsMkJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtZQUNoRSxNQUFNLElBQUksZ0NBQXFCLENBQUMsc0JBQXNCLFNBQVMsVUFBVSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3JGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixjQUFjLENBQUMsT0FBZTtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLDhCQUFrQixDQUFDO0lBQ3RGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNqQixPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsNkVBQTZFO1FBQzdFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLE9BQWlCO1FBQzlCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxNQUF1QjtRQUNuQyxNQUFNLGVBQWUsR0FBRyxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztRQUtJO0lBQ0osY0FBYyxDQUFDLEVBQVU7UUFDdkIsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsa0JBQXNDO1FBQ3ZELFFBQVEsa0JBQWtCLEVBQUU7WUFDMUIsS0FBSywwQkFBa0IsQ0FBQyxRQUFRO2dCQUM5QixPQUFPLDBCQUFlLENBQUMsSUFBSSxDQUFDO1lBQzlCLEtBQUssMEJBQWtCLENBQUMsUUFBUTtnQkFDOUIsT0FBTywwQkFBZSxDQUFDLFVBQVUsQ0FBQztZQUNwQyxLQUFLLDBCQUFrQixDQUFDLGFBQWE7Z0JBQ25DLE9BQU8sMEJBQWUsQ0FBQyxlQUFlLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxPQUErQjtRQUNuRCxRQUFRLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDcEIsS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU8sMEJBQWtCLENBQUMsUUFBUSxDQUFDO1lBQ3JDLEtBQUssVUFBVTtnQkFDYixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsZUFBZSxDQUFDLEVBQUU7b0JBQ3hELE9BQU8sMEJBQWtCLENBQUMsUUFBUSxDQUFDO2lCQUNwQztxQkFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRTtvQkFDcEUsT0FBTywwQkFBa0IsQ0FBQyxhQUFhLENBQUM7aUJBQ3pDO3FCQUFNO29CQUNMLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2lCQUNoRTtZQUNIO2dCQUNFLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFvRjtRQUNoRyxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO2dCQUNyQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDM0MsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFRLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDeEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFRLENBQUM7Z0JBQ3pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEMsT0FBTztnQkFDTCxPQUFPLEVBQUUsT0FBTztnQkFDaEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7YUFDN0IsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLEVBQWtDO1FBQ2pELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDL0IsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDckMsTUFBTSxjQUFjLEdBQUssV0FBcUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUEyQixDQUFDLEtBQUssQ0FBQztnQkFDMUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUEwQixDQUFDLENBQUMsQ0FBQzthQUNuRjtZQUNELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQ25DLE1BQU0sd0JBQXdCLEdBQUssV0FBbUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUEyQjtxQkFDMUcsS0FBSyxDQUFDO2dCQUNULE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUEwQixDQUFDLENBQUM7Z0JBQ3hHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3RDLE9BQU87Z0JBQ0wsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDSixDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUEyQztRQUNuRCxPQUFPLG1CQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxpQkFBTyxDQUFDLEVBQUUsQ0FBQyxTQUFHLENBQUMsR0FBRyxFQUFFLGVBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7WUFDM0UsQ0FBQyxDQUFFLEtBQStCLENBQUMsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBNEI7UUFDckMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sbUJBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUMzQixDQUFDLENBQUMsMkJBQW1CLENBQUMsaUJBQU8sQ0FBQyxFQUFFLENBQUMsU0FBRyxDQUFDLE9BQU8sRUFBRSxlQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzRyxDQUFDLENBQUUsS0FBK0IsQ0FBQyxLQUFLLENBQUM7U0FDNUM7YUFBTTtZQUNMLE9BQU8sbUJBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQywyQkFBbUIsQ0FBQyxpQkFBTyxDQUFDLEVBQUUsQ0FBQyxTQUFHLENBQUMsT0FBTyxFQUFFLGVBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDcEcsQ0FBQyxDQUFFLEtBQStCLENBQUMsS0FBSyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFZO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLE9BQU8sS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQWlCO1FBQ3JDLE9BQU87WUFDTCxRQUFRLEVBQUUsNEJBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM1QyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDNUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBdUIsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQWU7UUFDbEUsT0FBTztZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ3hELEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxTQUFpQjtRQUN2QyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLGVBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQ0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDakUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTywyQkFBbUIsQ0FDeEIsaUJBQU8sQ0FBQyxlQUFlLENBQUM7YUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixLQUFLLENBQUMsQ0FBQyxFQUFFLDhCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeFJELHNCQXdSQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDMUIsa0JBQWUsS0FBSyxDQUFDO0FBRXJCLElBQVksS0FFWDtBQUZELFdBQVksS0FBSztJQUNmLCtCQUFPLENBQUE7QUFDVCxDQUFDLEVBRlcsS0FBSyxHQUFMLGFBQUssS0FBTCxhQUFLLFFBRWhCO0FBRUQsSUFBWSxhQUVYO0FBRkQsV0FBWSxhQUFhO0lBQ3ZCLDZDQUFNLENBQUE7QUFDUixDQUFDLEVBRlcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFFeEI7QUFFRCxJQUFZLFdBS1g7QUFMRCxXQUFZLFdBQVc7SUFDckIsbUVBQW1CLENBQUE7SUFDbkIseUVBQXNCLENBQUE7SUFDdEIsdUVBQXFCLENBQUE7SUFDckIsbUVBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBS3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgUmVjaXBpZW50LFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgU1VJX0FERFJFU1NfTEVOR1RIIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNQdXJlQXJnIH0gZnJvbSAnLi9teXN0ZW5sYWIvdHlwZXMvc3VpLWJjcyc7XG5pbXBvcnQgeyBCQ1MsIGZyb21CNjQgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQge1xuICBNZXRob2ROYW1lcyxcbiAgU3VpVHJhbnNhY3Rpb24sXG4gIFN1aVRyYW5zYWN0aW9uVHlwZSxcbiAgVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbixcbiAgU3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uLFxuICBSZXF1ZXN0QWRkU3Rha2UsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7XG4gIGlzVmFsaWRTdWlBZGRyZXNzLFxuICBub3JtYWxpemVTdWlBZGRyZXNzLFxuICBub3JtYWxpemVTdWlPYmplY3RJZCxcbiAgU3VpSnNvblZhbHVlLFxuICBTdWlPYmplY3RSZWYsXG59IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB7XG4gIGJ1aWxkZXIsXG4gIE1vdmVDYWxsVHJhbnNhY3Rpb24sXG4gIE9iamVjdENhbGxBcmcsXG4gIFNwbGl0Q29pbnNUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25CbG9ja0lucHV0LFxuICBUcmFuc2FjdGlvblR5cGUgYXMgVHJhbnNhY3Rpb25Db21tYW5kVHlwZSxcbn0gZnJvbSAnLi9teXN0ZW5sYWIvYnVpbGRlcic7XG5pbXBvcnQgeyBTSUdOQVRVUkVfU0NIRU1FX1RPX0ZMQUcgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IGJsYWtlMmIgZnJvbSAnQGJpdGdvLWJldGEvYmxha2UyYic7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ltbU9yT3duZWRPYmoob2JqOiBPYmplY3RDYWxsQXJnWydPYmplY3QnXSk6IG9iaiBpcyB7IEltbU9yT3duZWQ6IFN1aU9iamVjdFJlZiB9IHtcbiAgcmV0dXJuICdJbW1Pck93bmVkJyBpbiBvYmo7XG59XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkRWQyNTUxOVB1YmxpY0tleShrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiByYXcgdHJhbnNhY3Rpb24gY2FuIGJlIGRlc2VyaWFsaXplZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3VHJhbnNhY3Rpb24gLSB0cmFuc2FjdGlvbiBpbiBiYXNlNjQgc3RyaW5nIGZvcm1hdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBmcm9tQjY0KHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGJ1aWxkZXIuZGUoJ1RyYW5zYWN0aW9uRGF0YScsIGRhdGEpO1xuICAgICAgYnVpbGRlci5zZXIoJ1RyYW5zYWN0aW9uRGF0YScsIGRlc2VyaWFsaXplZCwgeyBtYXhTaXplOiAxMDI0ICogNjQgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIC0gVHJhbnNhY3Rpb24gaW4gYmFzZTY0IHN0cmluZyAgZm9ybWF0XG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWRkcmVzc2VzIHRvIGNoZWNrIGlmIGFsbCBleGlzdCBhbmQgYXJlIHZhbGlkIFN1aSBwdWJsaWMga2V5c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzc2VzIFRoZSBhZGRyZXNzIHRvIGJlIHZhbGlkYXRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIE5hbWUgb2YgdGhlIGZpZWxkIHRvIHZhbGlkYXRlLCBpdHMgbmVlZGVkIHRvIHJldHVybiB3aGljaCBmaWVsZCBpcyBmYWlsaW5nIG9uIGNhc2Ugb2YgZXJyb3IuXG4gICAqL1xuICB2YWxpZGF0ZUFkZHJlc3NlcyhhZGRyZXNzZXM6IHN0cmluZ1tdLCBmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBhZGRyZXNzZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MsIGZpZWxkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhZGRyZXNzIHRvIGNoZWNrIGlmIGl0IGV4aXN0cyBhbmQgaXMgYSB2YWxpZCBTdWkgcHVibGljIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0byB2YWxpZGF0ZSwgaXRzIG5lZWRlZCB0byByZXR1cm4gd2hpY2ggZmllbGQgaXMgZmFpbGluZyBvbiBjYXNlIG9mIGVycm9yLlxuICAgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWFkZHJlc3MgfHwgIWlzVmFsaWRTdWlBZGRyZXNzKG5vcm1hbGl6ZVN1aUFkZHJlc3MoYWRkcmVzcykpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIG9yIG1pc3NpbmcgJHtmaWVsZE5hbWV9LCBnb3Q6ICR7YWRkcmVzc31gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNIZXgoYWRkcmVzcykgJiYgdGhpcy5nZXRIZXhCeXRlTGVuZ3RoKGFkZHJlc3MpID09PSBTVUlfQUREUkVTU19MRU5HVEg7XG4gIH1cblxuICBpc0hleCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKDB4fDBYKT9bYS1mQS1GMC05XSskLy50ZXN0KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggJSAyID09PSAwO1xuICB9XG5cbiAgZ2V0SGV4Qnl0ZUxlbmd0aCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyByZXR1cm4gL14oMHh8MFgpLy50ZXN0KHZhbHVlKSA/ICh2YWx1ZS5sZW5ndGggLSAyKSAvIDIgOiB2YWx1ZS5sZW5ndGggLyAyO1xuICAgIHJldHVybiAvXigweHwwWCkvLnRlc3QodmFsdWUpID8gKHZhbHVlLmxlbmd0aCAtIDIpIC8gMiA6IHZhbHVlLmxlbmd0aCAvIDI7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgYW1vdW50XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGFtb3VudHMgLSB0aGUgYW1vdW50cyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRBbW91bnRzKGFtb3VudHM6IG51bWJlcltdKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBhbW91bnQgb2YgYW1vdW50cykge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsaWRBbW91bnQoYW1vdW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGFtb3VudFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50cyAtIHRoZSBhbW91bnQgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkQW1vdW50KGFtb3VudDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmlnTnVtYmVyQW1vdW50ID0gbmV3IEJpZ051bWJlcihOdW1iZXIoYW1vdW50KSk7XG4gICAgaWYgKCFiaWdOdW1iZXJBbW91bnQuaXNJbnRlZ2VyKCkgfHwgYmlnTnVtYmVyQW1vdW50LmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBoZXggaWRzIChhZGRyZXNzZXMsIG9iamVjdCBpZHMpIHRvIGFsd2F5cyBjb250YWluIHRoZSAnMHgnIHByZWZpeC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICoqL1xuICBub3JtYWxpemVIZXhJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaWQuc3RhcnRzV2l0aCgnMHgnKSA/IGlkIDogJzB4Jy5jb25jYXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbiB0eXBlIGJ5IGZ1bmN0aW9uIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtNZXRob2ROYW1lc30gZmN0TmFtZVxuICAgKiBAcmV0dXJuIHtUcmFuc2FjdGlvblR5cGV9XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvblR5cGUoc3VpVHJhbnNhY3Rpb25UeXBlOiBTdWlUcmFuc2FjdGlvblR5cGUpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHN3aXRjaCAoc3VpVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlcjpcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuQWRkU3Rha2U6XG4gICAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FkZDtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLldpdGhkcmF3U3Rha2U6XG4gICAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgU1VJIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtNZXRob2ROYW1lc30gZmN0TmFtZVxuICAgKiBAcmV0dXJuIHtUcmFuc2FjdGlvblR5cGV9XG4gICAqL1xuICBnZXRTdWlUcmFuc2FjdGlvblR5cGUoY29tbWFuZDogVHJhbnNhY3Rpb25Db21tYW5kVHlwZSk6IFN1aVRyYW5zYWN0aW9uVHlwZSB7XG4gICAgc3dpdGNoIChjb21tYW5kLmtpbmQpIHtcbiAgICAgIGNhc2UgJ1RyYW5zZmVyT2JqZWN0cyc6XG4gICAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXI7XG4gICAgICBjYXNlICdNb3ZlQ2FsbCc6XG4gICAgICAgIGlmIChjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5SZXF1ZXN0QWRkU3Rha2UpKSB7XG4gICAgICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5BZGRTdGFrZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5SZXF1ZXN0V2l0aGRyYXdTdGFrZSkpIHtcbiAgICAgICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLldpdGhkcmF3U3Rha2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGB1bnN1cHBvcnRlZCB0YXJnZXQgbWV0aG9kYCk7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24ga2luZGApO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlY2lwaWVudHModHg6IFN1aVRyYW5zYWN0aW9uPFRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24gfCBTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+KTogUmVjaXBpZW50W10ge1xuICAgIGNvbnN0IGFtb3VudHM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgYWRkcmVzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHR4LnR4LnRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbiwgaSkgPT4ge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdTcGxpdENvaW5zJykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRyYW5zYWN0aW9uLmFtb3VudHNbMF0uaW5kZXg7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdHgudHguaW5wdXRzW2luZGV4XSBhcyBhbnk7XG4gICAgICAgIGFtb3VudHMucHVzaCh0aGlzLmdldEFtb3VudChpbnB1dCkpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdUcmFuc2Zlck9iamVjdHMnKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdHJhbnNhY3Rpb24uYWRkcmVzcy5pbmRleDtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0eC50eC5pbnB1dHNbaW5kZXhdIGFzIGFueTtcbiAgICAgICAgYWRkcmVzc2VzLnB1c2godGhpcy5nZXRBZGRyZXNzKGlucHV0KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFkZHJlc3Nlcy5tYXAoKGFkZHJlc3MsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IE51bWJlcihhbW91bnRzW2luZGV4XSkudG9TdHJpbmcoKSxcbiAgICAgIH0gYXMgUmVjaXBpZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhZGQgc3Rha2luZyByZXF1ZXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge1N0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbn0gdHg6IHN0YWtpbmcgdHJhbnNhY3Rpb24gb2JqZWN0XG4gICAqIEByZXR1cm4ge1JlcXVlc3RBZGRTdGFrZVtdfSAgYWRkIHN0YWtpbmcgcmVxdWVzdHNcbiAgICovXG4gIGdldFN0YWtlUmVxdWVzdHModHg6IFN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbik6IFJlcXVlc3RBZGRTdGFrZVtdIHtcbiAgICBjb25zdCBhbW91bnRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICB0eC50cmFuc2FjdGlvbnMuZm9yRWFjaCgodHJhbnNhY3Rpb24sIGkpID0+IHtcbiAgICAgIGlmICh0cmFuc2FjdGlvbi5raW5kID09PSAnU3BsaXRDb2lucycpIHtcbiAgICAgICAgY29uc3QgYW1vdW50SW5wdXRJZHggPSAoKHRyYW5zYWN0aW9uIGFzIFNwbGl0Q29pbnNUcmFuc2FjdGlvbikuYW1vdW50c1swXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpLmluZGV4O1xuICAgICAgICBhbW91bnRzLnB1c2godXRpbHMuZ2V0QW1vdW50KHR4LmlucHV0c1thbW91bnRJbnB1dElkeF0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KSk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb24ua2luZCA9PT0gJ01vdmVDYWxsJykge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzSW5wdXRJZHggPSAoKHRyYW5zYWN0aW9uIGFzIE1vdmVDYWxsVHJhbnNhY3Rpb24pLmFyZ3VtZW50c1syXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpXG4gICAgICAgICAgLmluZGV4O1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzID0gdXRpbHMuZ2V0QWRkcmVzcyh0eC5pbnB1dHNbdmFsaWRhdG9yQWRkcmVzc0lucHV0SWR4XSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpO1xuICAgICAgICBhZGRyZXNzZXMucHVzaCh2YWxpZGF0b3JBZGRyZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcywgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRvckFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogYW1vdW50c1tpbmRleF0sXG4gICAgICB9IGFzIFJlcXVlc3RBZGRTdGFrZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFtb3VudChpbnB1dDogU3VpSnNvblZhbHVlIHwgVHJhbnNhY3Rpb25CbG9ja0lucHV0KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXNQdXJlQXJnKGlucHV0KVxuICAgICAgPyBidWlsZGVyLmRlKEJDUy5VNjQsIEJ1ZmZlci5mcm9tKGlucHV0LlB1cmUpLnRvU3RyaW5nKCdiYXNlNjQnKSwgJ2Jhc2U2NCcpXG4gICAgICA6IChpbnB1dCBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpLnZhbHVlO1xuICB9XG5cbiAgZ2V0QWRkcmVzcyhpbnB1dDogVHJhbnNhY3Rpb25CbG9ja0lucHV0KTogc3RyaW5nIHtcbiAgICBpZiAoaW5wdXQuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgIHJldHVybiBpc1B1cmVBcmcoaW5wdXQudmFsdWUpXG4gICAgICAgID8gbm9ybWFsaXplU3VpQWRkcmVzcyhidWlsZGVyLmRlKEJDUy5BRERSRVNTLCBCdWZmZXIuZnJvbShpbnB1dD8udmFsdWUuUHVyZSkudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnYmFzZTY0JykpXG4gICAgICAgIDogKGlucHV0IGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCkudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpc1B1cmVBcmcoaW5wdXQpXG4gICAgICAgID8gbm9ybWFsaXplU3VpQWRkcmVzcyhidWlsZGVyLmRlKEJDUy5BRERSRVNTLCBCdWZmZXIuZnJvbShpbnB1dC5QdXJlKS50b1N0cmluZygnYmFzZTY0JyksICdiYXNlNjQnKSlcbiAgICAgICAgOiAoaW5wdXQgYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KS52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVDb2lucyhjb2luczogYW55W10pOiBTdWlPYmplY3RSZWZbXSB7XG4gICAgcmV0dXJuIGNvaW5zLm1hcCgoY29pbikgPT4ge1xuICAgICAgcmV0dXJuIHV0aWxzLm5vcm1hbGl6ZVN1aU9iamVjdFJlZihjb2luKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5vcm1hbGl6ZVN1aU9iamVjdFJlZihvYmo6IFN1aU9iamVjdFJlZik6IFN1aU9iamVjdFJlZiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9iamVjdElkOiBub3JtYWxpemVTdWlPYmplY3RJZChvYmoub2JqZWN0SWQpLFxuICAgICAgdmVyc2lvbjogTnVtYmVyKG9iai52ZXJzaW9uKSxcbiAgICAgIGRpZ2VzdDogb2JqLmRpZ2VzdCxcbiAgICB9O1xuICB9XG5cbiAgdHJhbnNhY3Rpb25JbnB1dCh0eXBlOiAnb2JqZWN0JyB8ICdwdXJlJywgaW5kZXggPSAwLCB2YWx1ZT86IHVua25vd24pOiBUcmFuc2FjdGlvbkJsb2NrSW5wdXQge1xuICAgIHJldHVybiB7XG4gICAgICBraW5kOiAnSW5wdXQnLFxuICAgICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgPyBTdHJpbmcodmFsdWUpIDogdmFsdWUsXG4gICAgICBpbmRleCxcbiAgICAgIHR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBQVUJMSUNfS0VZX1NJWkUgPSAzMjtcbiAgICBjb25zdCB0bXAgPSBuZXcgVWludDhBcnJheShQVUJMSUNfS0VZX1NJWkUgKyAxKTtcbiAgICBjb25zdCBwdWJCdWYgPSBCdWZmZXIuZnJvbShwdWJsaWNLZXksICdoZXgnKTtcbiAgICB0bXAuc2V0KFtTSUdOQVRVUkVfU0NIRU1FX1RPX0ZMQUdbJ0VEMjU1MTknXV0pOyAvLyBFRDI1NTE5OiAweDAwLFxuICAgIHRtcC5zZXQocHViQnVmLCAxKTtcbiAgICByZXR1cm4gbm9ybWFsaXplU3VpQWRkcmVzcyhcbiAgICAgIGJsYWtlMmIoUFVCTElDX0tFWV9TSVpFKVxuICAgICAgICAudXBkYXRlKHRtcClcbiAgICAgICAgLmRpZ2VzdCgnaGV4JylcbiAgICAgICAgLnNsaWNlKDAsIFNVSV9BRERSRVNTX0xFTkdUSCAqIDIpXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG5cbmV4cG9ydCBlbnVtIEFwcElkIHtcbiAgU3VpID0gMCxcbn1cblxuZXhwb3J0IGVudW0gSW50ZW50VmVyc2lvbiB7XG4gIFYwID0gMCxcbn1cblxuZXhwb3J0IGVudW0gSW50ZW50U2NvcGUge1xuICBUcmFuc2FjdGlvbkRhdGEgPSAwLFxuICBUcmFuc2FjdGlvbkVmZmVjdHMgPSAxLFxuICBDaGVja3BvaW50U3VtbWFyeSA9IDIsXG4gIFBlcnNvbmFsTWVzc2FnZSA9IDMsXG59XG5cbmV4cG9ydCB0eXBlIEludGVudCA9IFtJbnRlbnRTY29wZSwgSW50ZW50VmVyc2lvbiwgQXBwSWRdO1xuIl19
|
|
533
|
+
})(IntentScope || (exports.IntentScope = IntentScope = {}));
|
|
534
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQW1EQSwwQ0FFQztBQXJERCxtREFROEI7QUFDOUIsZ0VBQXFDO0FBQ3JDLDJDQUFpRDtBQUNqRCx1REFBc0Q7QUFDdEQscUNBQTJDO0FBQzNDLG1DQVlpQjtBQUNqQixtQ0FBZ0M7QUFDaEMsNkNBTzJCO0FBQzNCLGlEQVE2QjtBQUM3Qix1Q0FBcUQ7QUFDckQsa0VBQTBDO0FBQzFDLG1GQUFxRjtBQUNyRiwyQ0FBc0M7QUFDdEMsb0RBQTRCO0FBQzVCLGlEQUFrRTtBQUVsRSxTQUFnQixlQUFlLENBQUMsR0FBNEI7SUFDMUQsT0FBTyxZQUFZLElBQUksR0FBRyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixPQUFPLElBQUEsa0NBQXVCLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixnQkFBZ0IsQ0FBQyxTQUFpQjtRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBQyxjQUFzQjtRQUMxQyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxJQUFBLGFBQU8sRUFBQyxjQUFjLENBQUMsQ0FBQztZQUNyQyxNQUFNLFlBQVksR0FBRyxpQkFBTyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RCxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUUsZ0RBQXlCLEVBQUUsQ0FBQyxDQUFDO1lBQ3JGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLGNBQXNCO1FBQzNDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksZ0NBQXFCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FBQyxTQUFtQixFQUFFLFNBQWlCO1FBQ3RELEtBQUssTUFBTSxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBQyxPQUFlLEVBQUUsU0FBaUI7UUFDaEQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUEseUJBQWlCLEVBQUMsSUFBQSwyQkFBbUIsRUFBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHNCQUFzQixTQUFTLFVBQVUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixjQUFjLENBQUMsT0FBZTtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLDhCQUFrQixDQUFDO0lBQ3RGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNqQixPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsNkVBQTZFO1FBQzdFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLE9BQWlCO1FBQzlCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLE1BQXVCO1FBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksc0JBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztRQUtJO0lBQ0osY0FBYyxDQUFDLEVBQVU7UUFDdkIsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsa0JBQXNDO1FBQ3ZELFFBQVEsa0JBQWtCLEVBQUUsQ0FBQztZQUMzQixLQUFLLDBCQUFrQixDQUFDLFFBQVEsQ0FBQztZQUNqQyxLQUFLLDBCQUFrQixDQUFDLGFBQWE7Z0JBQ25DLE9BQU8sMEJBQWUsQ0FBQyxJQUFJLENBQUM7WUFDOUIsS0FBSywwQkFBa0IsQ0FBQyxRQUFRLENBQUM7WUFDakMsS0FBSywwQkFBa0IsQ0FBQyxtQkFBbUI7Z0JBQ3pDLE9BQU8sMEJBQWUsQ0FBQyxVQUFVLENBQUM7WUFDcEMsS0FBSywwQkFBa0IsQ0FBQywwQkFBMEI7Z0JBQ2hELE9BQU8sMEJBQWUsQ0FBQyxpQkFBaUIsQ0FBQztZQUMzQyxLQUFLLDBCQUFrQixDQUFDLGFBQWEsQ0FBQztZQUN0QyxLQUFLLDBCQUFrQixDQUFDLG1CQUFtQjtnQkFDekMsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztZQUN6QyxLQUFLLDBCQUFrQixDQUFDLFFBQVE7Z0JBQzlCLE9BQU8sMEJBQWUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLE9BQStCO1FBQ25ELFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLEtBQUssWUFBWTtnQkFDZixJQUFLLE9BQWlDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDL0QsT0FBTywwQkFBa0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsT0FBTywwQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDMUMsS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU8sMEJBQWtCLENBQUMsUUFBUSxDQUFDO1lBQ3JDLEtBQUssWUFBWTtnQkFDZixJQUFLLE9BQWlDLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDdEUsT0FBTywwQkFBa0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsT0FBTywwQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDMUMsS0FBSyxVQUFVO2dCQUNiLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUN6RCxPQUFPLDBCQUFrQixDQUFDLFFBQVEsQ0FBQztnQkFDckMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO29CQUNyRSxPQUFPLDBCQUFrQixDQUFDLGFBQWEsQ0FBQztnQkFDMUMsQ0FBQztxQkFBTSxJQUNMLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3JELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsY0FBYyxDQUFDLEVBQ25ELENBQUM7b0JBQ0QsT0FBTywwQkFBa0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLENBQUM7cUJBQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBVyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztvQkFDcEUsT0FBTywwQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDaEQsQ0FBQztxQkFBTSxJQUNMLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsMEJBQTBCLENBQUM7b0JBQy9ELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsb0JBQW9CLENBQUMsRUFDekQsQ0FBQztvQkFDRCxPQUFPLDBCQUFrQixDQUFDLDBCQUEwQixDQUFDO2dCQUN2RCxDQUFDO3FCQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7b0JBQ3BFLE9BQU8sMEJBQWtCLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2hELENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLElBQUksa0NBQXVCLENBQUMsNkJBQTZCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRixDQUFDO1lBQ0g7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGdDQUFnQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUE4QztRQUMxRCxNQUFNLFFBQVEsR0FBZ0IsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNsQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUMzQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQVEsQ0FBQztnQkFDekMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUVELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsbUJBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pHLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUM3QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQVEsQ0FBQztnQkFDekMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3pDLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDeEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFRLENBQUM7Z0JBQ3pDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDWixPQUFPLEVBQUUsT0FBTztnQkFDaEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7YUFDbkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG1CQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDL0YsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFRLENBQUM7Z0JBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFFdEQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLE9BQU8sRUFBRSxXQUFXO3dCQUNwQixNQUFNLEVBQUUsR0FBRyxFQUFFLG9EQUFvRDt3QkFDakUsSUFBSSxFQUFFLGdCQUFnQjtxQkFDdkIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLE9BQU8sRUFBRSxXQUFXO3dCQUNwQixNQUFNLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7cUJBQ3BELENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsRUFBa0M7UUFDakQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBQzdCLE1BQU0sU0FBUyxHQUFhLEVBQUUsQ0FBQztRQUMvQixFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sY0FBYyxHQUFLLFdBQXFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBMkIsQ0FBQyxLQUFLLENBQUM7Z0JBQzFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBMEIsQ0FBQyxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUNELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSx3QkFBd0IsR0FBSyxXQUFtQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQTJCO3FCQUMxRyxLQUFLLENBQUM7Z0JBQ1QsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQTBCLENBQUMsQ0FBQztnQkFDeEcsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0QyxPQUFPO2dCQUNMLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO2FBQ0osQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxFQUF3QztRQUNyRSxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxjQUFjLEdBQUssV0FBcUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUEyQixDQUFDLEtBQUssQ0FBQztnQkFDMUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUEwQixDQUFDLENBQUMsQ0FBQztZQUNwRixDQUFDO1lBQ0QsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLHdCQUF3QixHQUFLLFdBQW1DLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBMkI7cUJBQzFHLEtBQUssQ0FBQztnQkFDVCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBMEIsQ0FBQyxDQUFDO2dCQUN4RyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3RDLE9BQU87Z0JBQ0wsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDTyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDhCQUE4QixDQUFDLEVBQThDO1FBQzNFLElBQUksTUFBTSxHQUF1QixTQUFTLENBQUM7UUFDM0MsSUFBSSxTQUF1QixDQUFDO1FBQzVCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFM0IsNkJBQTZCO1FBQzdCLE1BQU0sU0FBUyxHQUEwQixFQUFFLENBQUM7UUFDNUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0QyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3BDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNCLGdGQUFnRjtZQUNoRixpQkFBaUIsR0FBSyxTQUFTLENBQUMsQ0FBQyxDQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQTJCLENBQUMsS0FBSyxDQUFDO1FBQzFHLENBQUM7YUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsbUNBQW1DO1lBQ25DLE1BQU0sY0FBYyxHQUFLLFNBQVMsQ0FBQyxDQUFDLENBQXlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBMkIsQ0FBQyxLQUFLLENBQUM7WUFDM0csTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQTBCLENBQUMsQ0FBQztZQUU3RSxpQkFBaUIsR0FBSyxTQUFTLENBQUMsQ0FBQyxDQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQTJCLENBQUMsS0FBSyxDQUFDO1FBQzFHLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLGtDQUF1QixDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2RCxTQUFTLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBMEIsQ0FBQyxDQUFDO1FBQ25GLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLGtDQUF1QixDQUMvQiw0Q0FBNEMsaUJBQWlCLFdBQVcsS0FBSyxFQUFFLENBQ2hGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQTJDO1FBQ25ELE9BQU8sSUFBQSxtQkFBUyxFQUFDLEtBQUssQ0FBQztZQUNyQixDQUFDLENBQUMsaUJBQU8sQ0FBQyxFQUFFLENBQUMsU0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFNLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7WUFDNUYsQ0FBQyxDQUFFLEtBQStCLENBQUMsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBNEI7UUFDckMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFBLG1CQUFTLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLElBQUEsMkJBQW1CLEVBQ2pCLGlCQUFPLENBQUMsRUFBRSxDQUFDLFNBQUcsQ0FBQyxPQUFPLEVBQUUsZUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUN0RztnQkFDSCxDQUFDLENBQUUsS0FBK0IsQ0FBQyxLQUFLLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUEsbUJBQVMsRUFBQyxLQUFLLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxJQUFBLDJCQUFtQixFQUNqQixpQkFBTyxDQUFDLEVBQUUsQ0FBQyxTQUFHLENBQUMsT0FBTyxFQUFFLGVBQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUMvRjtnQkFDSCxDQUFDLENBQUUsS0FBK0IsQ0FBQyxLQUFLLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBWTtRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFpQjtRQUNyQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLElBQUEsNEJBQW9CLEVBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM1QyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDNUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBdUIsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQWU7UUFDbEUsT0FBTztZQUNMLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ3hELEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxTQUFpQjtRQUN2QyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLGVBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQ0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDakUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFBLDJCQUFtQixFQUN4QixJQUFBLGlCQUFPLEVBQUMsZUFBZSxDQUFDO2FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDWCxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsS0FBSyxDQUFDLENBQUMsRUFBRSw4QkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQVcsRUFBRSxLQUFhO1FBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxtQkFBTyxFQUFDLEdBQUcsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBQSxnQkFBTSxFQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQixJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxPQUFPLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFFekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxzQkFBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLGVBQWUsR0FBRyxJQUFJLHNCQUFTLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLElBQUksc0JBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdkUsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDN0UsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxRQUFpQjtRQUM1RCxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQixRQUFRLEdBQUcsb0JBQVksQ0FBQztRQUMxQixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLG1CQUFPLEVBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQUUsUUFBaUI7UUFDL0QsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsUUFBUSxHQUFHLG9CQUFZLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDdkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxtQkFBTyxFQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzNELElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQzdCLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSTthQUNSLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7YUFDckQsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDbkIsT0FBTztnQkFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWTtnQkFDN0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sRUFBRSxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUN2QyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUFDLEdBQVcsRUFBRSxZQUFvQixFQUFFLFVBQW9CO1FBQ25GLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxNQUEyQixDQUFDO1FBQ2hDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxNQUFNLElBQUEsbUJBQU8sRUFBQyxHQUFHLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQseUJBQXlCLENBQUMsVUFBa0IsRUFBRSxRQUFnQixFQUFFLFFBQWlCO1FBQy9FLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLGNBQXNCLENBQUM7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBaUIsRUFBRSxPQUFvQjtRQUM1RCxNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkMsT0FBTyxDQUNMLElBQUksWUFBWSxpQkFBTztnQkFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUk7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUN6RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUIsMEZBQTBGO1lBQzFGLElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsaUNBQWlDLENBQUMsSUFBcUIsRUFBRSxLQUFnQjtRQUN2RSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM5QixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQXFCLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUF2aEJELHNCQXVoQkM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQzFCLGtCQUFlLEtBQUssQ0FBQztBQUVyQixJQUFZLEtBRVg7QUFGRCxXQUFZLEtBQUs7SUFDZiwrQkFBTyxDQUFBO0FBQ1QsQ0FBQyxFQUZXLEtBQUsscUJBQUwsS0FBSyxRQUVoQjtBQUVELElBQVksYUFFWDtBQUZELFdBQVksYUFBYTtJQUN2Qiw2Q0FBTSxDQUFBO0FBQ1IsQ0FBQyxFQUZXLGFBQWEsNkJBQWIsYUFBYSxRQUV4QjtBQUVELElBQVksV0FLWDtBQUxELFdBQVksV0FBVztJQUNyQixtRUFBbUIsQ0FBQTtJQUNuQix5RUFBc0IsQ0FBQTtJQUN0Qix1RUFBcUIsQ0FBQTtJQUNyQixtRUFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsV0FBVywyQkFBWCxXQUFXLFFBS3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBpc1ZhbGlkRWQyNTUxOVB1YmxpY0tleSxcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBSZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgU1VJX0FERFJFU1NfTEVOR1RIIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNQdXJlQXJnIH0gZnJvbSAnLi9teXN0ZW5sYWIvdHlwZXMvc3VpLWJjcyc7XG5pbXBvcnQgeyBCQ1MsIGZyb21CNjQgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQge1xuICBNZXRob2ROYW1lcyxcbiAgUmVxdWVzdEFkZFN0YWtlLFxuICBSZXF1ZXN0V2FscnVzU3Rha2VXaXRoUG9vbCxcbiAgUmVxdWVzdFdhbHJ1c1dpdGhkcmF3U3Rha2UsXG4gIFN0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbixcbiAgV2FscnVzU3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uLFxuICBXYWxydXNXaXRoZHJhd1N0YWtlUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24sXG4gIFN1aU9iamVjdEluZm8sXG4gIFN1aVByb2dyYW1tYWJsZVRyYW5zYWN0aW9uLFxuICBTdWlUcmFuc2FjdGlvbixcbiAgU3VpVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQge1xuICBpc1ZhbGlkU3VpQWRkcmVzcyxcbiAgbm9ybWFsaXplU3VpQWRkcmVzcyxcbiAgbm9ybWFsaXplU3VpT2JqZWN0SWQsXG4gIFNVSV9UWVBFX0FSRyxcbiAgU3VpSnNvblZhbHVlLFxuICBTdWlPYmplY3RSZWYsXG59IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB7XG4gIGJ1aWxkZXIsXG4gIE1lcmdlQ29pbnNUcmFuc2FjdGlvbixcbiAgTW92ZUNhbGxUcmFuc2FjdGlvbixcbiAgT2JqZWN0Q2FsbEFyZyxcbiAgU3BsaXRDb2luc1RyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkJsb2NrSW5wdXQsXG4gIFRyYW5zYWN0aW9uVHlwZSBhcyBUcmFuc2FjdGlvbkNvbW1hbmRUeXBlLFxufSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCB7IFNJR05BVFVSRV9TQ0hFTUVfVE9fRkxBRyB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgYmxha2UyYiBmcm9tICdAYml0Z28tYmV0YS9ibGFrZTJiJztcbmltcG9ydCB7IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgfSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyL1RyYW5zYWN0aW9uRGF0YUJsb2NrJztcbmltcG9ydCB7IG1ha2VSUEMgfSBmcm9tICcuL3JwY0NsaWVudCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBCYXNlTmV0d29yaywgY29pbnMsIFN1aUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1tT3JPd25lZE9iaihvYmo6IE9iamVjdENhbGxBcmdbJ09iamVjdCddKTogb2JqIGlzIHsgSW1tT3JPd25lZDogU3VpT2JqZWN0UmVmIH0ge1xuICByZXR1cm4gJ0ltbU9yT3duZWQnIGluIG9iajtcbn1cblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHJhdyB0cmFuc2FjdGlvbiBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvbiAtIHRyYW5zYWN0aW9uIGluIGJhc2U2NCBzdHJpbmcgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHRoZSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGZyb21CNjQocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gYnVpbGRlci5kZSgnVHJhbnNhY3Rpb25EYXRhJywgZGF0YSk7XG4gICAgICBidWlsZGVyLnNlcignVHJhbnNhY3Rpb25EYXRhJywgZGVzZXJpYWxpemVkLCB7IG1heFNpemU6IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIC0gVHJhbnNhY3Rpb24gaW4gYmFzZTY0IHN0cmluZyAgZm9ybWF0XG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWRkcmVzc2VzIHRvIGNoZWNrIGlmIGFsbCBleGlzdCBhbmQgYXJlIHZhbGlkIFN1aSBwdWJsaWMga2V5c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzc2VzIFRoZSBhZGRyZXNzIHRvIGJlIHZhbGlkYXRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIE5hbWUgb2YgdGhlIGZpZWxkIHRvIHZhbGlkYXRlLCBpdHMgbmVlZGVkIHRvIHJldHVybiB3aGljaCBmaWVsZCBpcyBmYWlsaW5nIG9uIGNhc2Ugb2YgZXJyb3IuXG4gICAqL1xuICB2YWxpZGF0ZUFkZHJlc3NlcyhhZGRyZXNzZXM6IHN0cmluZ1tdLCBmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBhZGRyZXNzZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MsIGZpZWxkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhZGRyZXNzIHRvIGNoZWNrIGlmIGl0IGV4aXN0cyBhbmQgaXMgYSB2YWxpZCBTdWkgcHVibGljIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZSBOYW1lIG9mIHRoZSBmaWVsZCB0byB2YWxpZGF0ZSwgaXRzIG5lZWRlZCB0byByZXR1cm4gd2hpY2ggZmllbGQgaXMgZmFpbGluZyBvbiBjYXNlIG9mIGVycm9yLlxuICAgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWFkZHJlc3MgfHwgIWlzVmFsaWRTdWlBZGRyZXNzKG5vcm1hbGl6ZVN1aUFkZHJlc3MoYWRkcmVzcykpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIG9yIG1pc3NpbmcgJHtmaWVsZE5hbWV9LCBnb3Q6ICR7YWRkcmVzc31gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNIZXgoYWRkcmVzcykgJiYgdGhpcy5nZXRIZXhCeXRlTGVuZ3RoKGFkZHJlc3MpID09PSBTVUlfQUREUkVTU19MRU5HVEg7XG4gIH1cblxuICBpc0hleCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKDB4fDBYKT9bYS1mQS1GMC05XSskLy50ZXN0KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggJSAyID09PSAwO1xuICB9XG5cbiAgZ2V0SGV4Qnl0ZUxlbmd0aCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyByZXR1cm4gL14oMHh8MFgpLy50ZXN0KHZhbHVlKSA/ICh2YWx1ZS5sZW5ndGggLSAyKSAvIDIgOiB2YWx1ZS5sZW5ndGggLyAyO1xuICAgIHJldHVybiAvXigweHwwWCkvLnRlc3QodmFsdWUpID8gKHZhbHVlLmxlbmd0aCAtIDIpIC8gMiA6IHZhbHVlLmxlbmd0aCAvIDI7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgYW1vdW50XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGFtb3VudHMgLSB0aGUgYW1vdW50cyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB0aGUgdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRBbW91bnRzKGFtb3VudHM6IG51bWJlcltdKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBhbW91bnQgb2YgYW1vdW50cykge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsaWRBbW91bnQoYW1vdW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGFtb3VudFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50cyAtIHRoZSBhbW91bnQgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkQW1vdW50KGFtb3VudDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmlnTnVtYmVyQW1vdW50ID0gbmV3IEJpZ051bWJlcihOdW1iZXIoYW1vdW50KSk7XG4gICAgaWYgKCFiaWdOdW1iZXJBbW91bnQuaXNJbnRlZ2VyKCkgfHwgYmlnTnVtYmVyQW1vdW50LmlzTGVzc1RoYW5PckVxdWFsVG8oMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBoZXggaWRzIChhZGRyZXNzZXMsIG9iamVjdCBpZHMpIHRvIGFsd2F5cyBjb250YWluIHRoZSAnMHgnIHByZWZpeC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICoqL1xuICBub3JtYWxpemVIZXhJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaWQuc3RhcnRzV2l0aCgnMHgnKSA/IGlkIDogJzB4Jy5jb25jYXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbiB0eXBlIGJ5IGZ1bmN0aW9uIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtNZXRob2ROYW1lc30gZmN0TmFtZVxuICAgKiBAcmV0dXJuIHtUcmFuc2FjdGlvblR5cGV9XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvblR5cGUoc3VpVHJhbnNhY3Rpb25UeXBlOiBTdWlUcmFuc2FjdGlvblR5cGUpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHN3aXRjaCAoc3VpVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlcjpcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLlRva2VuVHJhbnNmZXI6XG4gICAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLkFkZFN0YWtlOlxuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzU3Rha2VXaXRoUG9vbDpcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWRkO1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzUmVxdWVzdFdpdGhkcmF3U3Rha2U6XG4gICAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5XaXRoZHJhd1N0YWtlOlxuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzV2l0aGRyYXdTdGFrZTpcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDpcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IFNVSSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7TWV0aG9kTmFtZXN9IGZjdE5hbWVcbiAgICogQHJldHVybiB7VHJhbnNhY3Rpb25UeXBlfVxuICAgKi9cbiAgZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKGNvbW1hbmQ6IFRyYW5zYWN0aW9uQ29tbWFuZFR5cGUpOiBTdWlUcmFuc2FjdGlvblR5cGUge1xuICAgIHN3aXRjaCAoY29tbWFuZC5raW5kKSB7XG4gICAgICBjYXNlICdTcGxpdENvaW5zJzpcbiAgICAgICAgaWYgKChjb21tYW5kIGFzIFNwbGl0Q29pbnNUcmFuc2FjdGlvbikuY29pbi5raW5kID09PSAnR2FzQ29pbicpIHtcbiAgICAgICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuVG9rZW5UcmFuc2ZlcjtcbiAgICAgIGNhc2UgJ1RyYW5zZmVyT2JqZWN0cyc6XG4gICAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXI7XG4gICAgICBjYXNlICdNZXJnZUNvaW5zJzpcbiAgICAgICAgaWYgKChjb21tYW5kIGFzIE1lcmdlQ29pbnNUcmFuc2FjdGlvbikuZGVzdGluYXRpb24ua2luZCA9PT0gJ0dhc0NvaW4nKSB7XG4gICAgICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLlRva2VuVHJhbnNmZXI7XG4gICAgICBjYXNlICdNb3ZlQ2FsbCc6XG4gICAgICAgIGlmIChjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5SZXF1ZXN0QWRkU3Rha2UpKSB7XG4gICAgICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5BZGRTdGFrZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5SZXF1ZXN0V2l0aGRyYXdTdGFrZSkpIHtcbiAgICAgICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLldpdGhkcmF3U3Rha2U7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgY29tbWFuZC50YXJnZXQuZW5kc1dpdGgoTWV0aG9kTmFtZXMuU3Rha2luZ1Bvb2xTcGxpdCkgfHxcbiAgICAgICAgICBjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5QdWJsaWNUcmFuc2ZlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDtcbiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5XYWxydXNTdGFrZVdpdGhQb29sKSkge1xuICAgICAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzU3Rha2VXaXRoUG9vbDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5XYWxydXNSZXF1ZXN0V2l0aGRyYXdTdGFrZSkgfHxcbiAgICAgICAgICBjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5XYWxydXNTcGxpdFN0YWtlZFdhbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5XYWxydXNSZXF1ZXN0V2l0aGRyYXdTdGFrZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLnRhcmdldC5lbmRzV2l0aChNZXRob2ROYW1lcy5XYWxydXNXaXRoZHJhd1N0YWtlKSkge1xuICAgICAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzV2l0aGRyYXdTdGFrZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYHVuc3VwcG9ydGVkIHRhcmdldCBtZXRob2QgJHtjb21tYW5kLnRhcmdldH1gKTtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiBraW5kICR7Y29tbWFuZC5raW5kfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlY2lwaWVudHModHg6IFN1aVRyYW5zYWN0aW9uPFN1aVByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPik6IFJlY2lwaWVudFtdIHtcbiAgICBjb25zdCByZWNlaXB0czogUmVjaXBpZW50W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdFJlc3VsdHM6IG51bWJlcltdID0gW107XG4gICAgdHgudHgudHJhbnNhY3Rpb25zLmZvckVhY2goKHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBpZiAodHJhbnNhY3Rpb24ua2luZCA9PT0gJ1NwbGl0Q29pbnMnKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdHJhbnNhY3Rpb24uYW1vdW50c1swXS5pbmRleDtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0eC50eC5pbnB1dHNbaW5kZXhdIGFzIGFueTtcbiAgICAgICAgc3BsaXRSZXN1bHRzLnB1c2godGhpcy5nZXRBbW91bnQoaW5wdXQpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdNb3ZlQ2FsbCcgJiYgdHJhbnNhY3Rpb24udGFyZ2V0LmVuZHNXaXRoKE1ldGhvZE5hbWVzLlN0YWtpbmdQb29sU3BsaXQpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdHJhbnNhY3Rpb24uYXJndW1lbnRzWzFdLmluZGV4O1xuICAgICAgICBjb25zdCBpbnB1dCA9IHR4LnR4LmlucHV0c1tpbmRleF0gYXMgYW55O1xuICAgICAgICBzcGxpdFJlc3VsdHMucHVzaCh0aGlzLmdldEFtb3VudChpbnB1dCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzdGluYXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIHR4LnR4LnRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdUcmFuc2Zlck9iamVjdHMnKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdHJhbnNhY3Rpb24uYWRkcmVzcy5pbmRleDtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0eC50eC5pbnB1dHNbaW5kZXhdIGFzIGFueTtcbiAgICAgICAgZGVzdGluYXRpb25zLnB1c2godGhpcy5nZXRBZGRyZXNzKGlucHV0KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVzdGluYXRpb25zLm1hcCgoYWRkcmVzcywgaSkgPT4ge1xuICAgICAgcmVjZWlwdHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogc3BsaXRSZXN1bHRzW2ldLnRvU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHR4LnR4LnRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdNb3ZlQ2FsbCcgJiYgdHJhbnNhY3Rpb24udGFyZ2V0LmVuZHNXaXRoKE1ldGhvZE5hbWVzLlB1YmxpY1RyYW5zZmVyKSkge1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbkFyZyA9IHRyYW5zYWN0aW9uLmFyZ3VtZW50c1sxXTtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25JbnB1dCA9IHR4LnR4LmlucHV0c1tkZXN0aW5hdGlvbkFyZy5pbmRleF0gYXMgYW55O1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuZ2V0QWRkcmVzcyhkZXN0aW5hdGlvbklucHV0KTtcblxuICAgICAgICBjb25zdCBtb3ZpbmdPYmplY3QgPSB0cmFuc2FjdGlvbi5hcmd1bWVudHNbMF07XG4gICAgICAgIGlmIChtb3ZpbmdPYmplY3Qua2luZCA9PT0gJ0lucHV0Jykge1xuICAgICAgICAgIHJlY2VpcHRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogZGVzdGluYXRpb24sXG4gICAgICAgICAgICBhbW91bnQ6ICcwJywgLy8gc2V0IDAsIG5vdCBhYmxlIHRvIGdldCBhbW91bnQgbWVyZWx5IGZyb20gcGFyc2luZ1xuICAgICAgICAgICAgZGF0YTogJ3Vua25vd24gYW1vdW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChtb3ZpbmdPYmplY3Qua2luZCA9PT0gJ1Jlc3VsdCcpIHtcbiAgICAgICAgICByZWNlaXB0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgYW1vdW50OiBzcGxpdFJlc3VsdHNbbW92aW5nT2JqZWN0LmluZGV4XS50b1N0cmluZygpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVjZWlwdHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFkZCBzdGFraW5nIHJlcXVlc3RzXG4gICAqXG4gICAqIEBwYXJhbSB7U3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9ufSB0eDogc3Rha2luZyB0cmFuc2FjdGlvbiBvYmplY3RcbiAgICogQHJldHVybiB7UmVxdWVzdEFkZFN0YWtlW119ICBhZGQgc3Rha2luZyByZXF1ZXN0c1xuICAgKi9cbiAgZ2V0U3Rha2VSZXF1ZXN0cyh0eDogU3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uKTogUmVxdWVzdEFkZFN0YWtlW10ge1xuICAgIGNvbnN0IGFtb3VudHM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgYWRkcmVzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHR4LnRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbiwgaSkgPT4ge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdTcGxpdENvaW5zJykge1xuICAgICAgICBjb25zdCBhbW91bnRJbnB1dElkeCA9ICgodHJhbnNhY3Rpb24gYXMgU3BsaXRDb2luc1RyYW5zYWN0aW9uKS5hbW91bnRzWzBdIGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCkuaW5kZXg7XG4gICAgICAgIGFtb3VudHMucHVzaCh1dGlscy5nZXRBbW91bnQodHguaW5wdXRzW2Ftb3VudElucHV0SWR4XSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc2FjdGlvbi5raW5kID09PSAnTW92ZUNhbGwnKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvckFkZHJlc3NJbnB1dElkeCA9ICgodHJhbnNhY3Rpb24gYXMgTW92ZUNhbGxUcmFuc2FjdGlvbikuYXJndW1lbnRzWzJdIGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dClcbiAgICAgICAgICAuaW5kZXg7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvckFkZHJlc3MgPSB1dGlscy5nZXRBZGRyZXNzKHR4LmlucHV0c1t2YWxpZGF0b3JBZGRyZXNzSW5wdXRJZHhdIGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCk7XG4gICAgICAgIGFkZHJlc3Nlcy5wdXNoKHZhbGlkYXRvckFkZHJlc3MpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhZGRyZXNzZXMubWFwKChhZGRyZXNzLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdG9yQWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiBhbW91bnRzW2luZGV4XSxcbiAgICAgIH0gYXMgUmVxdWVzdEFkZFN0YWtlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0V2FscnVzU3Rha2VXaXRoUG9vbFJlcXVlc3RzKHR4OiBXYWxydXNTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24pOiBSZXF1ZXN0V2FscnVzU3Rha2VXaXRoUG9vbFtdIHtcbiAgICBjb25zdCBhbW91bnRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICB0eC50cmFuc2FjdGlvbnMuZm9yRWFjaCgodHJhbnNhY3Rpb24sIGkpID0+IHtcbiAgICAgIGlmICh0cmFuc2FjdGlvbi5raW5kID09PSAnU3BsaXRDb2lucycpIHtcbiAgICAgICAgY29uc3QgYW1vdW50SW5wdXRJZHggPSAoKHRyYW5zYWN0aW9uIGFzIFNwbGl0Q29pbnNUcmFuc2FjdGlvbikuYW1vdW50c1swXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpLmluZGV4O1xuICAgICAgICBhbW91bnRzLnB1c2godXRpbHMuZ2V0QW1vdW50KHR4LmlucHV0c1thbW91bnRJbnB1dElkeF0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KSk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb24ua2luZCA9PT0gJ01vdmVDYWxsJykge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzSW5wdXRJZHggPSAoKHRyYW5zYWN0aW9uIGFzIE1vdmVDYWxsVHJhbnNhY3Rpb24pLmFyZ3VtZW50c1syXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpXG4gICAgICAgICAgLmluZGV4O1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzID0gdXRpbHMuZ2V0QWRkcmVzcyh0eC5pbnB1dHNbdmFsaWRhdG9yQWRkcmVzc0lucHV0SWR4XSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpO1xuICAgICAgICBhZGRyZXNzZXMucHVzaCh2YWxpZGF0b3JBZGRyZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWRkcmVzc2VzLm1hcCgoYWRkcmVzcywgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRvckFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogYW1vdW50c1tpbmRleF0sXG4gICAgICB9IGFzIFJlcXVlc3RXYWxydXNTdGFrZVdpdGhQb29sO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0V2FscnVzV2l0aGRyYXdTdGFrZVJlcXVlc3RzKHR4OiBXYWxydXNXaXRoZHJhd1N0YWtlUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24pOiBSZXF1ZXN0V2FscnVzV2l0aGRyYXdTdGFrZSB7XG4gICAgbGV0IGFtb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBzdGFrZWRXYWw6IFN1aU9iamVjdFJlZjtcbiAgICBsZXQgc3Rha2VkV2FsSW5wdXRJZHggPSAtMTtcblxuICAgIC8vIFRTIHdvbid0IGxldCB1cyB1c2UgZmlsdGVyXG4gICAgY29uc3QgbW92ZUNhbGxzOiBNb3ZlQ2FsbFRyYW5zYWN0aW9uW10gPSBbXTtcbiAgICB0eC50cmFuc2FjdGlvbnMuZm9yRWFjaCgodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGlmICh0cmFuc2FjdGlvbi5raW5kID09PSAnTW92ZUNhbGwnKSB7XG4gICAgICAgIG1vdmVDYWxscy5wdXNoKHRyYW5zYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChtb3ZlQ2FsbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBUaGlzIGlzIGVpdGhlciByZXF1ZXN0X3dpdGhkcmF3IGZ1bGwgb3Igd2l0aGRyYXcgZnVsbCAoZWl0aGVyIHdheSwgbm8gYW1vdW50KVxuICAgICAgc3Rha2VkV2FsSW5wdXRJZHggPSAoKG1vdmVDYWxsc1swXSBhcyBNb3ZlQ2FsbFRyYW5zYWN0aW9uKS5hcmd1bWVudHNbMV0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KS5pbmRleDtcbiAgICB9IGVsc2UgaWYgKG1vdmVDYWxscy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFRoaXMgaXMgcmVxdWVzdF93aXRoZHJhdyBwYXJ0aWFsXG4gICAgICBjb25zdCBhbW91bnRJbnB1dElkeCA9ICgobW92ZUNhbGxzWzBdIGFzIE1vdmVDYWxsVHJhbnNhY3Rpb24pLmFyZ3VtZW50c1sxXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpLmluZGV4O1xuICAgICAgYW1vdW50ID0gdXRpbHMuZ2V0QW1vdW50KHR4LmlucHV0c1thbW91bnRJbnB1dElkeF0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KTtcblxuICAgICAgc3Rha2VkV2FsSW5wdXRJZHggPSAoKG1vdmVDYWxsc1swXSBhcyBNb3ZlQ2FsbFRyYW5zYWN0aW9uKS5hcmd1bWVudHNbMF0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KS5pbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG51bWJlciBvZiBNb3ZlQ2FsbCB0cmFuc2FjdGlvbnMnKTtcbiAgICB9XG5cbiAgICBsZXQgaW5wdXQgPSB0eC5pbnB1dHNbc3Rha2VkV2FsSW5wdXRJZHhdO1xuICAgIGlmICgndmFsdWUnIGluIGlucHV0KSB7XG4gICAgICBpbnB1dCA9IGlucHV0LnZhbHVlO1xuICAgIH1cbiAgICBpZiAoJ09iamVjdCcgaW4gaW5wdXQgJiYgaXNJbW1Pck93bmVkT2JqKGlucHV0Lk9iamVjdCkpIHtcbiAgICAgIHN0YWtlZFdhbCA9IHV0aWxzLm5vcm1hbGl6ZVN1aU9iamVjdFJlZihpbnB1dC5PYmplY3QuSW1tT3JPd25lZCBhcyBTdWlPYmplY3RSZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBFeHBlY3RlZCBTdGFrZWRXYWwgb2JqZWN0IGF0IGlucHV0IGluZGV4ICR7c3Rha2VkV2FsSW5wdXRJZHh9LCBmb3VuZCAke2lucHV0fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYW1vdW50LCBzdGFrZWRXYWwgfTtcbiAgfVxuXG4gIGdldEFtb3VudChpbnB1dDogU3VpSnNvblZhbHVlIHwgVHJhbnNhY3Rpb25CbG9ja0lucHV0KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXNQdXJlQXJnKGlucHV0KVxuICAgICAgPyBidWlsZGVyLmRlKEJDUy5VNjQsIEJ1ZmZlci5mcm9tKG5ldyBVaW50MTZBcnJheShpbnB1dC5QdXJlKSkudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnYmFzZTY0JylcbiAgICAgIDogKGlucHV0IGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCkudmFsdWU7XG4gIH1cblxuICBnZXRBZGRyZXNzKGlucHV0OiBUcmFuc2FjdGlvbkJsb2NrSW5wdXQpOiBzdHJpbmcge1xuICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgcmV0dXJuIGlzUHVyZUFyZyhpbnB1dC52YWx1ZSlcbiAgICAgICAgPyBub3JtYWxpemVTdWlBZGRyZXNzKFxuICAgICAgICAgICAgYnVpbGRlci5kZShCQ1MuQUREUkVTUywgQnVmZmVyLmZyb20obmV3IFVpbnQxNkFycmF5KGlucHV0LnZhbHVlPy5QdXJlKSkudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnYmFzZTY0JylcbiAgICAgICAgICApXG4gICAgICAgIDogKGlucHV0IGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCkudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpc1B1cmVBcmcoaW5wdXQpXG4gICAgICAgID8gbm9ybWFsaXplU3VpQWRkcmVzcyhcbiAgICAgICAgICAgIGJ1aWxkZXIuZGUoQkNTLkFERFJFU1MsIEJ1ZmZlci5mcm9tKG5ldyBVaW50MTZBcnJheShpbnB1dC5QdXJlKSkudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnYmFzZTY0JylcbiAgICAgICAgICApXG4gICAgICAgIDogKGlucHV0IGFzIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCkudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplQ29pbnMoY29pbnM6IGFueVtdKTogU3VpT2JqZWN0UmVmW10ge1xuICAgIHJldHVybiBjb2lucy5tYXAoKGNvaW4pID0+IHtcbiAgICAgIHJldHVybiB1dGlscy5ub3JtYWxpemVTdWlPYmplY3RSZWYoY29pbik7XG4gICAgfSk7XG4gIH1cblxuICBub3JtYWxpemVTdWlPYmplY3RSZWYob2JqOiBTdWlPYmplY3RSZWYpOiBTdWlPYmplY3RSZWYge1xuICAgIHJldHVybiB7XG4gICAgICBvYmplY3RJZDogbm9ybWFsaXplU3VpT2JqZWN0SWQob2JqLm9iamVjdElkKSxcbiAgICAgIHZlcnNpb246IE51bWJlcihvYmoudmVyc2lvbiksXG4gICAgICBkaWdlc3Q6IG9iai5kaWdlc3QsXG4gICAgfTtcbiAgfVxuXG4gIHRyYW5zYWN0aW9uSW5wdXQodHlwZTogJ29iamVjdCcgfCAncHVyZScsIGluZGV4ID0gMCwgdmFsdWU/OiB1bmtub3duKTogVHJhbnNhY3Rpb25CbG9ja0lucHV0IHtcbiAgICByZXR1cm4ge1xuICAgICAga2luZDogJ0lucHV0JyxcbiAgICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgaW5kZXgsXG4gICAgICB0eXBlLFxuICAgIH07XG4gIH1cblxuICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgUFVCTElDX0tFWV9TSVpFID0gMzI7XG4gICAgY29uc3QgdG1wID0gbmV3IFVpbnQ4QXJyYXkoUFVCTElDX0tFWV9TSVpFICsgMSk7XG4gICAgY29uc3QgcHViQnVmID0gQnVmZmVyLmZyb20ocHVibGljS2V5LCAnaGV4Jyk7XG4gICAgdG1wLnNldChbU0lHTkFUVVJFX1NDSEVNRV9UT19GTEFHWydFRDI1NTE5J11dKTsgLy8gRUQyNTUxOTogMHgwMCxcbiAgICB0bXAuc2V0KHB1YkJ1ZiwgMSk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVN1aUFkZHJlc3MoXG4gICAgICBibGFrZTJiKFBVQkxJQ19LRVlfU0laRSlcbiAgICAgICAgLnVwZGF0ZSh0bXApXG4gICAgICAgIC5kaWdlc3QoJ2hleCcpXG4gICAgICAgIC5zbGljZSgwLCBTVUlfQUREUkVTU19MRU5HVEggKiAyKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRGZWVFc3RpbWF0ZSh1cmw6IHN0cmluZywgdHhIZXg6IHN0cmluZyk6IFByb21pc2U8QmlnTnVtYmVyPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWFrZVJQQyh1cmwsICdzdWlfZHJ5UnVuVHJhbnNhY3Rpb25CbG9jaycsIFt0eEhleF0pO1xuICAgIGFzc2VydChyZXN1bHQuZWZmZWN0cyk7XG4gICAgYXNzZXJ0KHJlc3VsdC5lZmZlY3RzLmdhc1VzZWQpO1xuXG4gICAgaWYgKHJlc3VsdC5lZmZlY3RzLnN0YXR1cy5zdGF0dXMgIT09ICdzdWNjZXNzJykge1xuICAgICAgY29uc29sZS5lcnJvcihgRHJ5IHJ1biBmYWlsZWQsIGNvdWxkIG5vdCBhdXRvbWF0aWNhbGx5IGRldGVybWluZSBhIGJ1ZGdldCBmb3IgdHhIZXggJHt0eEhleH1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBmZWUgZXN0aW1hdGVgKTtcbiAgICB9XG5cbiAgICBjb25zdCBnYXNPYmplY3QgPSByZXN1bHQuZWZmZWN0cy5nYXNVc2VkO1xuXG4gICAgY29uc3Qgc3RvcmFnZUNvc3QgPSBuZXcgQmlnTnVtYmVyKGdhc09iamVjdC5zdG9yYWdlQ29zdCk7XG4gICAgY29uc3QgY29tcHV0YXRpb25Db3N0ID0gbmV3IEJpZ051bWJlcihnYXNPYmplY3QuY29tcHV0YXRpb25Db3N0KTtcbiAgICBjb25zdCBzdG9yYWdlUmViYXRlID0gbmV3IEJpZ051bWJlcihnYXNPYmplY3Quc3RvcmFnZVJlYmF0ZSk7XG4gICAgY29uc3QgbmV0Q29zdCA9IGNvbXB1dGF0aW9uQ29zdC5wbHVzKHN0b3JhZ2VDb3N0KS5taW51cyhzdG9yYWdlUmViYXRlKTtcblxuICAgIHJldHVybiBuZXRDb3N0LmNvbXBhcmVkVG8oY29tcHV0YXRpb25Db3N0KSA+IDAgPyBuZXRDb3N0IDogY29tcHV0YXRpb25Db3N0O1xuICB9XG5cbiAgYXN5bmMgZ2V0QmFsYW5jZSh1cmw6IHN0cmluZywgb3duZXI6IHN0cmluZywgY29pblR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmIChjb2luVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2luVHlwZSA9IFNVSV9UWVBFX0FSRztcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWFrZVJQQyh1cmwsICdzdWl4X2dldEJhbGFuY2UnLCBbb3duZXIsIGNvaW5UeXBlXSk7XG4gICAgcmV0dXJuIHJlc3VsdC50b3RhbEJhbGFuY2U7XG4gIH1cblxuICBhc3luYyBnZXRJbnB1dENvaW5zKHVybDogc3RyaW5nLCBvd25lcjogc3RyaW5nLCBjb2luVHlwZT86IHN0cmluZyk6IFByb21pc2U8U3VpT2JqZWN0SW5mb1tdPiB7XG4gICAgaWYgKGNvaW5UeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvaW5UeXBlID0gU1VJX1RZUEVfQVJHO1xuICAgIH1cbiAgICBsZXQgaGFzTmV4dFBhZ2UgPSB0cnVlO1xuICAgIGxldCBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHBhcmFtcyA9IFtvd25lciwgY29pblR5cGVdO1xuICAgIGxldCBkYXRhID0gW107XG4gICAgd2hpbGUgKGhhc05leHRQYWdlKSB7XG4gICAgICBpZiAoY3Vyc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFyYW1zID0gW293bmVyLCBjb2luVHlwZSwgY3Vyc29yXTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1ha2VSUEModXJsLCAnc3VpeF9nZXRDb2lucycsIHBhcmFtcyk7XG4gICAgICAgIGRhdGEgPSBkYXRhLmNvbmNhdChyZXN1bHQuZGF0YSk7XG4gICAgICAgIGhhc05leHRQYWdlID0gcmVzdWx0Lmhhc05leHRQYWdlO1xuICAgICAgICBjdXJzb3IgPSByZXN1bHQubmV4dEN1cnNvcjtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGdldCBpbnB1dCBjb2lucyBmcm9tIHRoZSBub2RlICR7ZX1gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IGlucHV0IGNvaW5zIGZyb20gdGhlIG5vZGUuYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gICAgICAuZmlsdGVyKChvYmplY3Q6IGFueSkgPT4gb2JqZWN0LmJhbGFuY2UgIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKG9iamVjdDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29pblR5cGU6IG9iamVjdC5jb2luVHlwZSxcbiAgICAgICAgICBvYmplY3RJZDogb2JqZWN0LmNvaW5PYmplY3RJZCxcbiAgICAgICAgICB2ZXJzaW9uOiBvYmplY3QudmVyc2lvbixcbiAgICAgICAgICBkaWdlc3Q6IG9iamVjdC5kaWdlc3QsXG4gICAgICAgICAgYmFsYW5jZTogbmV3IEJpZ051bWJlcihvYmplY3QuYmFsYW5jZSksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVUcmFuc2FjdGlvbkJsb2NrKHVybDogc3RyaW5nLCBzZXJpYWxpemVkVHg6IHN0cmluZywgc2lnbmF0dXJlczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHJlcVR5cGUgPSAnV2FpdEZvckVmZmVjdHNDZXJ0JztcbiAgICBjb25zdCBvcHRpb25zID0geyBzaG93RWZmZWN0czogdHJ1ZSB9O1xuICAgIGNvbnN0IHBhcmFtcyA9IFtzZXJpYWxpemVkVHgsIHNpZ25hdHVyZXMsIG9wdGlvbnMsIHJlcVR5cGVdO1xuICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1ha2VSUEModXJsLCAnc3VpX2V4ZWN1dGVUcmFuc2FjdGlvbkJsb2NrJywgcGFyYW1zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmRpZ2VzdDtcbiAgfVxuXG4gIHZhbGlkYXRlTm9uTmVnYXRpdmVOdW1iZXIoZGVmYXVsdFZhbDogbnVtYmVyLCBlcnJvck1zZzogc3RyaW5nLCBpbnB1dFZhbD86IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGlucHV0VmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsO1xuICAgIH1cbiAgICBsZXQgbm9uTmVnYXRpdmVOdW06IG51bWJlcjtcbiAgICB0cnkge1xuICAgICAgbm9uTmVnYXRpdmVOdW0gPSBOdW1iZXIoaW5wdXRWYWwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG4gICAgfVxuICAgIGlmIChpc05hTihub25OZWdhdGl2ZU51bS52YWx1ZU9mKCkpIHx8IG5vbk5lZ2F0aXZlTnVtIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vbk5lZ2F0aXZlTnVtO1xuICB9XG5cbiAgZ2V0U3VpVG9rZW5Gcm9tQWRkcmVzcyhwYWNrYWdlSWQ6IHN0cmluZywgbmV0d29yazogQmFzZU5ldHdvcmspIHtcbiAgICBjb25zdCB0b2tlbnMgPSBjb2lucy5maWx0ZXIoKGNvaW4pID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvaW4gaW5zdGFuY2VvZiBTdWlDb2luICYmXG4gICAgICAgIGNvaW4ubmV0d29yay50eXBlID09PSBuZXR3b3JrLnR5cGUgJiZcbiAgICAgICAgY29pbi5wYWNrYWdlSWQudG9Mb3dlckNhc2UoKSA9PT0gcGFja2FnZUlkLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgY29uc3QgdG9rZW5zQXJyYXkgPSB0b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW4pO1xuICAgIGlmICh0b2tlbnNBcnJheS5sZW5ndGggPj0gMSkge1xuICAgICAgLy8gdGhlcmUgc2hvdWxkIG5ldmVyIGJlIHR3byB0b2tlbnMgd2l0aCB0aGUgc2FtZSBjb250cmFjdCBhZGRyZXNzLCBzbyB3ZSBhc3NlcnQgdGhhdCBoZXJlXG4gICAgICBhc3NlcnQodG9rZW5zQXJyYXkubGVuZ3RoID09PSAxKTtcbiAgICAgIHJldHVybiB0b2tlbnNBcnJheVswXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHNlbGVjdE9iamVjdHNJbkRlc2NPcmRlck9mQmFsYW5jZShvYmpzOiBTdWlPYmplY3RJbmZvW10sIGxpbWl0OiBCaWdOdW1iZXIpOiBTdWlPYmplY3RJbmZvW10ge1xuICAgIG9ianMgPSBvYmpzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBiLmJhbGFuY2UubWludXMoYS5iYWxhbmNlKS50b051bWJlcigpO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmpzLnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICAgIGlmIChsaW1pdC5ndCgwKSkge1xuICAgICAgICBhY2MucHVzaChvYmopO1xuICAgICAgICBsaW1pdCA9IGxpbWl0Lm1pbnVzKG9iai5iYWxhbmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgU3VpT2JqZWN0SW5mb1tdKTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG5cbmV4cG9ydCBlbnVtIEFwcElkIHtcbiAgU3VpID0gMCxcbn1cblxuZXhwb3J0IGVudW0gSW50ZW50VmVyc2lvbiB7XG4gIFYwID0gMCxcbn1cblxuZXhwb3J0IGVudW0gSW50ZW50U2NvcGUge1xuICBUcmFuc2FjdGlvbkRhdGEgPSAwLFxuICBUcmFuc2FjdGlvbkVmZmVjdHMgPSAxLFxuICBDaGVja3BvaW50U3VtbWFyeSA9IDIsXG4gIFBlcnNvbmFsTWVzc2FnZSA9IDMsXG59XG5cbmV4cG9ydCB0eXBlIEludGVudCA9IFtJbnRlbnRTY29wZSwgSW50ZW50VmVyc2lvbiwgQXBwSWRdO1xuIl19
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { BaseKey, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { RequestWalrusStakeWithPool, SuiTransaction, WalrusStakingProgrammableTransaction } from './iface';
|
|
4
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
5
|
+
import { Transaction } from './transaction';
|
|
6
|
+
import { TransferTransaction } from './transferTransaction';
|
|
7
|
+
import { SuiObjectRef } from './mystenlab/types';
|
|
8
|
+
export declare class WalrusStakingBuilder extends TransactionBuilder<WalrusStakingProgrammableTransaction> {
|
|
9
|
+
protected _stakeWithPoolTx: RequestWalrusStakeWithPool[];
|
|
10
|
+
protected _inputObjects: SuiObjectRef[];
|
|
11
|
+
private walrusConfig;
|
|
12
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
13
|
+
/**
|
|
14
|
+
* Build a MoveCall transaction ready to be signed and executed.
|
|
15
|
+
*
|
|
16
|
+
* @returns {BitGoSuiTransaction} an unsigned Sui transaction
|
|
17
|
+
*/
|
|
18
|
+
protected buildStakeTransaction(): SuiTransaction<WalrusStakingProgrammableTransaction>;
|
|
19
|
+
/**
|
|
20
|
+
* Get staking transaction type
|
|
21
|
+
*
|
|
22
|
+
* @return {TransactionType}
|
|
23
|
+
* @protected
|
|
24
|
+
*/
|
|
25
|
+
protected get transactionType(): TransactionType;
|
|
26
|
+
/** @inheritdoc */
|
|
27
|
+
validateTransaction(transaction: TransferTransaction): void;
|
|
28
|
+
/** @inheritdoc */
|
|
29
|
+
sign(key: BaseKey): void;
|
|
30
|
+
/**
|
|
31
|
+
* Create a new transaction for staking coins ready to be signed and executed.
|
|
32
|
+
*
|
|
33
|
+
* @param {RequestWalrusStakeWithPool[]} request: a list of staking request
|
|
34
|
+
*/
|
|
35
|
+
stake(request: RequestWalrusStakeWithPool[]): this;
|
|
36
|
+
/**
|
|
37
|
+
* Set the $WAL objects to be used for staking.
|
|
38
|
+
*
|
|
39
|
+
* @param tokens The WAL objects to be used
|
|
40
|
+
* @returns this
|
|
41
|
+
*/
|
|
42
|
+
inputObjects(inputObjects: SuiObjectRef[]): this;
|
|
43
|
+
private validateInputObjects;
|
|
44
|
+
/** @inheritdoc */
|
|
45
|
+
protected fromImplementation(rawTransaction: string): Transaction<WalrusStakingProgrammableTransaction>;
|
|
46
|
+
/** @inheritdoc */
|
|
47
|
+
protected buildImplementation(): Promise<Transaction<WalrusStakingProgrammableTransaction>>;
|
|
48
|
+
/**
|
|
49
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
50
|
+
*
|
|
51
|
+
* @param {StakingTransaction} tx the transaction data
|
|
52
|
+
*/
|
|
53
|
+
initBuilder(tx: Transaction<WalrusStakingProgrammableTransaction>): void;
|
|
54
|
+
/**
|
|
55
|
+
* Validates all fields are defined
|
|
56
|
+
*/
|
|
57
|
+
private validateTransactionFields;
|
|
58
|
+
/**
|
|
59
|
+
* Build SuiTransaction
|
|
60
|
+
*
|
|
61
|
+
* @return {BitGoSuiTransaction<MoveCallTx>}
|
|
62
|
+
* @protected
|
|
63
|
+
*/
|
|
64
|
+
protected buildSuiTransaction(): SuiTransaction<WalrusStakingProgrammableTransaction>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=walrusStakingBuilder.d.ts.map
|