@bitgo-beta/sdk-coin-sui 3.0.3-beta.99 → 3.0.3-beta.991
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 +817 -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 +16 -4
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +269 -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 +190 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/sui.d.ts +46 -8
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +479 -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
|
@@ -9,9 +9,9 @@ const bcs_2 = require("./bcs");
|
|
|
9
9
|
const Transactions_1 = require("./Transactions");
|
|
10
10
|
const Inputs_1 = require("./Inputs");
|
|
11
11
|
const utils_1 = require("./utils");
|
|
12
|
-
exports.TransactionExpiration = superstruct_1.optional(superstruct_1.nullable(superstruct_1.union([superstruct_1.object({ Epoch: superstruct_1.integer() }), superstruct_1.object({ None: superstruct_1.union([superstruct_1.literal(true), superstruct_1.literal(null)]) })])));
|
|
13
|
-
const SuiAddress = superstruct_1.string();
|
|
14
|
-
const StringEncodedBigint = superstruct_1.define('StringEncodedBigint', (val) => {
|
|
12
|
+
exports.TransactionExpiration = (0, superstruct_1.optional)((0, superstruct_1.nullable)((0, superstruct_1.union)([(0, superstruct_1.object)({ Epoch: (0, superstruct_1.integer)() }), (0, superstruct_1.object)({ None: (0, superstruct_1.union)([(0, superstruct_1.literal)(true), (0, superstruct_1.literal)(null)]) })])));
|
|
13
|
+
const SuiAddress = (0, superstruct_1.string)();
|
|
14
|
+
const StringEncodedBigint = (0, superstruct_1.define)('StringEncodedBigint', (val) => {
|
|
15
15
|
if (!['string', 'number', 'bigint'].includes(typeof val))
|
|
16
16
|
return false;
|
|
17
17
|
try {
|
|
@@ -22,80 +22,70 @@ const StringEncodedBigint = superstruct_1.define('StringEncodedBigint', (val) =>
|
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
-
const GasConfig = superstruct_1.object({
|
|
26
|
-
budget: superstruct_1.optional(StringEncodedBigint),
|
|
27
|
-
price: superstruct_1.optional(StringEncodedBigint),
|
|
28
|
-
payment: superstruct_1.optional(superstruct_1.array(types_1.SuiObjectRef)),
|
|
29
|
-
owner: superstruct_1.optional(SuiAddress),
|
|
25
|
+
const GasConfig = (0, superstruct_1.object)({
|
|
26
|
+
budget: (0, superstruct_1.optional)(StringEncodedBigint),
|
|
27
|
+
price: (0, superstruct_1.optional)(StringEncodedBigint),
|
|
28
|
+
payment: (0, superstruct_1.optional)((0, superstruct_1.array)(types_1.SuiObjectRef)),
|
|
29
|
+
owner: (0, superstruct_1.optional)(SuiAddress),
|
|
30
30
|
});
|
|
31
|
-
exports.SerializedTransactionDataBuilder = superstruct_1.object({
|
|
32
|
-
version: superstruct_1.literal(1),
|
|
33
|
-
sender: superstruct_1.optional(SuiAddress),
|
|
31
|
+
exports.SerializedTransactionDataBuilder = (0, superstruct_1.object)({
|
|
32
|
+
version: (0, superstruct_1.literal)(1),
|
|
33
|
+
sender: (0, superstruct_1.optional)(SuiAddress),
|
|
34
34
|
expiration: exports.TransactionExpiration,
|
|
35
35
|
gasConfig: GasConfig,
|
|
36
|
-
inputs: superstruct_1.array(Transactions_1.TransactionBlockInput),
|
|
37
|
-
transactions: superstruct_1.array(Transactions_1.TransactionType),
|
|
36
|
+
inputs: (0, superstruct_1.array)(Transactions_1.TransactionBlockInput),
|
|
37
|
+
transactions: (0, superstruct_1.array)(Transactions_1.TransactionType),
|
|
38
38
|
});
|
|
39
39
|
function prepareSuiAddress(address) {
|
|
40
|
-
return types_1.normalizeSuiAddress(address).replace('0x', '');
|
|
40
|
+
return (0, types_1.normalizeSuiAddress)(address).replace('0x', '');
|
|
41
41
|
}
|
|
42
42
|
// NOTE: This value should be kept in sync with the corresponding value in
|
|
43
43
|
// crates/sui-protocol-config/src/lib.rs
|
|
44
44
|
exports.TRANSACTION_DATA_MAX_SIZE = 128 * 1024;
|
|
45
45
|
class TransactionBlockDataBuilder {
|
|
46
|
-
constructor(clone) {
|
|
47
|
-
var _a, _b, _c;
|
|
48
|
-
this.version = 1;
|
|
49
|
-
this.sender = clone === null || clone === void 0 ? void 0 : clone.sender;
|
|
50
|
-
this.expiration = clone === null || clone === void 0 ? void 0 : clone.expiration;
|
|
51
|
-
this.gasConfig = (_a = clone === null || clone === void 0 ? void 0 : clone.gasConfig) !== null && _a !== void 0 ? _a : {};
|
|
52
|
-
this.inputs = (_b = clone === null || clone === void 0 ? void 0 : clone.inputs) !== null && _b !== void 0 ? _b : [];
|
|
53
|
-
this.transactions = (_c = clone === null || clone === void 0 ? void 0 : clone.transactions) !== null && _c !== void 0 ? _c : [];
|
|
54
|
-
}
|
|
55
46
|
static fromKindBytes(bytes) {
|
|
56
47
|
const kind = bcs_2.builder.de('TransactionKind', bytes);
|
|
57
|
-
const programmableTx = kind
|
|
48
|
+
const programmableTx = kind?.ProgrammableTransaction;
|
|
58
49
|
if (!programmableTx) {
|
|
59
50
|
throw new Error('Unable to deserialize from bytes.');
|
|
60
51
|
}
|
|
61
|
-
const serialized = utils_1.create({
|
|
52
|
+
const serialized = (0, utils_1.create)({
|
|
62
53
|
version: 1,
|
|
63
54
|
gasConfig: {},
|
|
64
|
-
inputs: programmableTx.inputs.map((value, index) => utils_1.create({
|
|
55
|
+
inputs: programmableTx.inputs.map((value, index) => (0, utils_1.create)({
|
|
65
56
|
kind: 'Input',
|
|
66
57
|
value,
|
|
67
58
|
index,
|
|
68
|
-
type: superstruct_1.is(value, Inputs_1.PureCallArg) ? 'pure' : 'object',
|
|
59
|
+
type: (0, superstruct_1.is)(value, Inputs_1.PureCallArg) ? 'pure' : 'object',
|
|
69
60
|
}, Transactions_1.TransactionBlockInput)),
|
|
70
61
|
transactions: programmableTx.transactions,
|
|
71
62
|
}, exports.SerializedTransactionDataBuilder);
|
|
72
63
|
return TransactionBlockDataBuilder.restore(serialized);
|
|
73
64
|
}
|
|
74
65
|
static fromBytes(bytes) {
|
|
75
|
-
var _a;
|
|
76
66
|
const rawData = bcs_2.builder.de('TransactionData', bytes);
|
|
77
|
-
const data = rawData
|
|
78
|
-
const programmableTx =
|
|
67
|
+
const data = rawData?.V1;
|
|
68
|
+
const programmableTx = data?.kind?.ProgrammableTransaction;
|
|
79
69
|
if (!data || !programmableTx) {
|
|
80
70
|
throw new Error('Unable to deserialize from bytes.');
|
|
81
71
|
}
|
|
82
|
-
const serialized = utils_1.create({
|
|
72
|
+
const serialized = (0, utils_1.create)({
|
|
83
73
|
version: 1,
|
|
84
74
|
sender: data.sender,
|
|
85
75
|
expiration: data.expiration,
|
|
86
76
|
gasConfig: data.gasData,
|
|
87
|
-
inputs: programmableTx.inputs.map((value, index) => utils_1.create({
|
|
77
|
+
inputs: programmableTx.inputs.map((value, index) => (0, utils_1.create)({
|
|
88
78
|
kind: 'Input',
|
|
89
79
|
value,
|
|
90
80
|
index,
|
|
91
|
-
type: superstruct_1.is(value, Inputs_1.PureCallArg) ? 'pure' : 'object',
|
|
81
|
+
type: (0, superstruct_1.is)(value, Inputs_1.PureCallArg) ? 'pure' : 'object',
|
|
92
82
|
}, Transactions_1.TransactionBlockInput)),
|
|
93
83
|
transactions: programmableTx.transactions,
|
|
94
84
|
}, exports.SerializedTransactionDataBuilder);
|
|
95
85
|
return TransactionBlockDataBuilder.restore(serialized);
|
|
96
86
|
}
|
|
97
87
|
static restore(data) {
|
|
98
|
-
superstruct_1.assert(data, exports.SerializedTransactionDataBuilder);
|
|
88
|
+
(0, superstruct_1.assert)(data, exports.SerializedTransactionDataBuilder);
|
|
99
89
|
const transactionData = new TransactionBlockDataBuilder();
|
|
100
90
|
Object.assign(transactionData, data);
|
|
101
91
|
return transactionData;
|
|
@@ -107,14 +97,21 @@ class TransactionBlockDataBuilder {
|
|
|
107
97
|
* @returns transaction digest.
|
|
108
98
|
*/
|
|
109
99
|
static getDigestFromBytes(bytes) {
|
|
110
|
-
const hash = hash_1.hashTypedData('TransactionData', bytes);
|
|
111
|
-
return bcs_1.toB58(hash);
|
|
100
|
+
const hash = (0, hash_1.hashTypedData)('TransactionData', bytes);
|
|
101
|
+
return (0, bcs_1.toB58)(hash);
|
|
102
|
+
}
|
|
103
|
+
constructor(clone) {
|
|
104
|
+
this.version = 1;
|
|
105
|
+
this.sender = clone?.sender;
|
|
106
|
+
this.expiration = clone?.expiration;
|
|
107
|
+
this.gasConfig = clone?.gasConfig ?? {};
|
|
108
|
+
this.inputs = clone?.inputs ?? [];
|
|
109
|
+
this.transactions = clone?.transactions ?? [];
|
|
112
110
|
}
|
|
113
111
|
build({ overrides, onlyTransactionKind, } = {}) {
|
|
114
|
-
var _a, _b, _c;
|
|
115
112
|
// Resolve inputs down to values:
|
|
116
113
|
const inputs = this.inputs.map((input) => {
|
|
117
|
-
superstruct_1.assert(input.value, Inputs_1.BuilderCallArg);
|
|
114
|
+
(0, superstruct_1.assert)(input.value, Inputs_1.BuilderCallArg);
|
|
118
115
|
return input.value;
|
|
119
116
|
});
|
|
120
117
|
const kind = {
|
|
@@ -126,9 +123,9 @@ class TransactionBlockDataBuilder {
|
|
|
126
123
|
if (onlyTransactionKind) {
|
|
127
124
|
return bcs_2.builder.ser('TransactionKind', kind, { maxSize: exports.TRANSACTION_DATA_MAX_SIZE }).toBytes();
|
|
128
125
|
}
|
|
129
|
-
const expiration =
|
|
130
|
-
const sender =
|
|
131
|
-
const gasConfig = { ...this.gasConfig, ...overrides
|
|
126
|
+
const expiration = overrides?.expiration ?? this.expiration;
|
|
127
|
+
const sender = overrides?.sender ?? this.sender;
|
|
128
|
+
const gasConfig = { ...this.gasConfig, ...overrides?.gasConfig };
|
|
132
129
|
if (!sender) {
|
|
133
130
|
throw new Error('Missing transaction sender');
|
|
134
131
|
}
|
|
@@ -146,7 +143,7 @@ class TransactionBlockDataBuilder {
|
|
|
146
143
|
expiration: expiration ? expiration : { None: true },
|
|
147
144
|
gasData: {
|
|
148
145
|
payment: gasConfig.payment,
|
|
149
|
-
owner: prepareSuiAddress(
|
|
146
|
+
owner: prepareSuiAddress(this.gasConfig.owner ?? sender),
|
|
150
147
|
price: BigInt(gasConfig.price),
|
|
151
148
|
budget: BigInt(gasConfig.budget),
|
|
152
149
|
},
|
|
@@ -164,8 +161,8 @@ class TransactionBlockDataBuilder {
|
|
|
164
161
|
return TransactionBlockDataBuilder.getDigestFromBytes(bytes);
|
|
165
162
|
}
|
|
166
163
|
snapshot() {
|
|
167
|
-
return utils_1.create(this, exports.SerializedTransactionDataBuilder);
|
|
164
|
+
return (0, utils_1.create)(this, exports.SerializedTransactionDataBuilder);
|
|
168
165
|
}
|
|
169
166
|
}
|
|
170
167
|
exports.TransactionBlockDataBuilder = TransactionBlockDataBuilder;
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25EYXRhQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL215c3RlbmxhYi9idWlsZGVyL1RyYW5zYWN0aW9uRGF0YUJsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFvQztBQUNwQyw2Q0FhcUI7QUFDckIsK0NBQXFEO0FBQ3JELG9DQUE2RDtBQUM3RCwrQkFBZ0M7QUFDaEMsaURBQXdFO0FBQ3hFLHFDQUF1RDtBQUN2RCxtQ0FBaUM7QUFFcEIsUUFBQSxxQkFBcUIsR0FBRyxzQkFBUSxDQUMzQyxzQkFBUSxDQUFDLG1CQUFLLENBQUMsQ0FBQyxvQkFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLHFCQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsb0JBQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBSyxDQUFDLENBQUMscUJBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxxQkFBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pHLENBQUM7QUFHRixNQUFNLFVBQVUsR0FBRyxvQkFBTSxFQUFFLENBQUM7QUFFNUIsTUFBTSxtQkFBbUIsR0FBRyxvQkFBTSxDQUFTLHFCQUFxQixFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7SUFDeEUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV2RSxJQUFJO1FBQ0YsTUFBTSxDQUFDLEdBQWEsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFBQyxNQUFNO1FBQ04sT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxTQUFTLEdBQUcsb0JBQU0sQ0FBQztJQUN2QixNQUFNLEVBQUUsc0JBQVEsQ0FB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RSxlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxpQ0FBeUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkgsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLDJCQUEyQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxjQUFNLENBQUMsSUFBSSxFQUFFLHdDQUFnQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNGO0FBektELGtFQXlLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvQjU4IH0gZnJvbSAnQG15c3Rlbi9iY3MnO1xuaW1wb3J0IHtcbiAgYXJyYXksXG4gIGFzc2VydCxcbiAgZGVmaW5lLFxuICBJbmZlcixcbiAgaW50ZWdlcixcbiAgaXMsXG4gIGxpdGVyYWwsXG4gIG51bGxhYmxlLFxuICBvYmplY3QsXG4gIG9wdGlvbmFsLFxuICBzdHJpbmcsXG4gIHVuaW9uLFxufSBmcm9tICdzdXBlcnN0cnVjdCc7XG5pbXBvcnQgeyBoYXNoVHlwZWREYXRhIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2hhc2gnO1xuaW1wb3J0IHsgbm9ybWFsaXplU3VpQWRkcmVzcywgU3VpT2JqZWN0UmVmIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRlciB9IGZyb20gJy4vYmNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSwgVHJhbnNhY3Rpb25CbG9ja0lucHV0IH0gZnJvbSAnLi9UcmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQnVpbGRlckNhbGxBcmcsIFB1cmVDYWxsQXJnIH0gZnJvbSAnLi9JbnB1dHMnO1xuaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBUcmFuc2FjdGlvbkV4cGlyYXRpb24gPSBvcHRpb25hbChcbiAgbnVsbGFibGUodW5pb24oW29iamVjdCh7IEVwb2NoOiBpbnRlZ2VyKCkgfSksIG9iamVjdCh7IE5vbmU6IHVuaW9uKFtsaXRlcmFsKHRydWUpLCBsaXRlcmFsKG51bGwpXSkgfSldKSlcbik7XG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkV4cGlyYXRpb24gPSBJbmZlcjx0eXBlb2YgVHJhbnNhY3Rpb25FeHBpcmF0aW9uPjtcblxuY29uc3QgU3VpQWRkcmVzcyA9IHN0cmluZygpO1xuXG5jb25zdCBTdHJpbmdFbmNvZGVkQmlnaW50ID0gZGVmaW5lPHN0cmluZz4oJ1N0cmluZ0VuY29kZWRCaWdpbnQnLCAodmFsKSA9PiB7XG4gIGlmICghWydzdHJpbmcnLCAnbnVtYmVyJywgJ2JpZ2ludCddLmluY2x1ZGVzKHR5cGVvZiB2YWwpKSByZXR1cm4gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBCaWdJbnQodmFsIGFzIHN0cmluZyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG5cbmNvbnN0IEdhc0NvbmZpZyA9IG9iamVjdCh7XG4gIGJ1ZGdldDogb3B0aW9uYWwoU3RyaW5nRW5jb2RlZEJpZ2ludCksXG4gIHByaWNlOiBvcHRpb25hbChTdHJpbmdFbmNvZGVkQmlnaW50KSxcbiAgcGF5bWVudDogb3B0aW9uYWwoYXJyYXkoU3VpT2JqZWN0UmVmKSksXG4gIG93bmVyOiBvcHRpb25hbChTdWlBZGRyZXNzKSxcbn0pO1xudHlwZSBHYXNDb25maWcgPSBJbmZlcjx0eXBlb2YgR2FzQ29uZmlnPjtcblxuZXhwb3J0IGNvbnN0IFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyID0gb2JqZWN0KHtcbiAgdmVyc2lvbjogbGl0ZXJhbCgxKSxcbiAgc2VuZGVyOiBvcHRpb25hbChTdWlBZGRyZXNzKSxcbiAgZXhwaXJhdGlvbjogVHJhbnNhY3Rpb25FeHBpcmF0aW9uLFxuICBnYXNDb25maWc6IEdhc0NvbmZpZyxcbiAgaW5wdXRzOiBhcnJheShUcmFuc2FjdGlvbkJsb2NrSW5wdXQpLFxuICB0cmFuc2FjdGlvbnM6IGFycmF5KFRyYW5zYWN0aW9uVHlwZSksXG59KTtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyID0gSW5mZXI8dHlwZW9mIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyPjtcblxuZnVuY3Rpb24gcHJlcGFyZVN1aUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gIHJldHVybiBub3JtYWxpemVTdWlBZGRyZXNzKGFkZHJlc3MpLnJlcGxhY2UoJzB4JywgJycpO1xufVxuXG4vLyBOT1RFOiBUaGlzIHZhbHVlIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpblxuLy8gY3JhdGVzL3N1aS1wcm90b2NvbC1jb25maWcvc3JjL2xpYi5yc1xuZXhwb3J0IGNvbnN0IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgPSAxMjggKiAxMDI0O1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyIHtcbiAgc3RhdGljIGZyb21LaW5kQnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCBraW5kID0gYnVpbGRlci5kZSgnVHJhbnNhY3Rpb25LaW5kJywgYnl0ZXMpO1xuICAgIGNvbnN0IHByb2dyYW1tYWJsZVR4ID0ga2luZD8uUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb247XG4gICAgaWYgKCFwcm9ncmFtbWFibGVUeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZGVzZXJpYWxpemUgZnJvbSBieXRlcy4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJpYWxpemVkID0gY3JlYXRlKFxuICAgICAge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBnYXNDb25maWc6IHt9LFxuICAgICAgICBpbnB1dHM6IHByb2dyYW1tYWJsZVR4LmlucHV0cy5tYXAoKHZhbHVlOiB1bmtub3duLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICAgIGNyZWF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2luZDogJ0lucHV0JyxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICB0eXBlOiBpcyh2YWx1ZSwgUHVyZUNhbGxBcmcpID8gJ3B1cmUnIDogJ29iamVjdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVHJhbnNhY3Rpb25CbG9ja0lucHV0XG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IHByb2dyYW1tYWJsZVR4LnRyYW5zYWN0aW9ucyxcbiAgICAgIH0sXG4gICAgICBTZXJpYWxpemVkVHJhbnNhY3Rpb25EYXRhQnVpbGRlclxuICAgICk7XG5cbiAgICByZXR1cm4gVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyLnJlc3RvcmUoc2VyaWFsaXplZCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJ5dGVzKGJ5dGVzOiBVaW50OEFycmF5KSB7XG4gICAgY29uc3QgcmF3RGF0YSA9IGJ1aWxkZXIuZGUoJ1RyYW5zYWN0aW9uRGF0YScsIGJ5dGVzKTtcbiAgICBjb25zdCBkYXRhID0gcmF3RGF0YT8uVjE7XG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHggPSBkYXRhPy5raW5kPy5Qcm9ncmFtbWFibGVUcmFuc2FjdGlvbjtcbiAgICBpZiAoIWRhdGEgfHwgIXByb2dyYW1tYWJsZVR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBkZXNlcmlhbGl6ZSBmcm9tIGJ5dGVzLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBjcmVhdGUoXG4gICAgICB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHNlbmRlcjogZGF0YS5zZW5kZXIsXG4gICAgICAgIGV4cGlyYXRpb246IGRhdGEuZXhwaXJhdGlvbixcbiAgICAgICAgZ2FzQ29uZmlnOiBkYXRhLmdhc0RhdGEsXG4gICAgICAgIGlucHV0czogcHJvZ3JhbW1hYmxlVHguaW5wdXRzLm1hcCgodmFsdWU6IHVua25vd24sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBraW5kOiAnSW5wdXQnLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHR5cGU6IGlzKHZhbHVlLCBQdXJlQ2FsbEFyZykgPyAncHVyZScgOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRyYW5zYWN0aW9uczogcHJvZ3JhbW1hYmxlVHgudHJhbnNhY3Rpb25zLFxuICAgICAgfSxcbiAgICAgIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyXG4gICAgKTtcblxuICAgIHJldHVybiBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIucmVzdG9yZShzZXJpYWxpemVkKTtcbiAgfVxuXG4gIHN0YXRpYyByZXN0b3JlKGRhdGE6IFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyKSB7XG4gICAgYXNzZXJ0KGRhdGEsIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkRhdGEgPSBuZXcgVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyKCk7XG4gICAgT2JqZWN0LmFzc2lnbih0cmFuc2FjdGlvbkRhdGEsIGRhdGEpO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbkRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdHJhbnNhY3Rpb24gZGlnZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYnl0ZXMgQkNTIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyB0cmFuc2FjdGlvbiBkaWdlc3QuXG4gICAqL1xuICBzdGF0aWMgZ2V0RGlnZXN0RnJvbUJ5dGVzKGJ5dGVzOiBVaW50OEFycmF5KSB7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hUeXBlZERhdGEoJ1RyYW5zYWN0aW9uRGF0YScsIGJ5dGVzKTtcbiAgICByZXR1cm4gdG9CNTgoaGFzaCk7XG4gIH1cblxuICB2ZXJzaW9uID0gMSBhcyBjb25zdDtcbiAgc2VuZGVyPzogc3RyaW5nO1xuICBleHBpcmF0aW9uPzogVHJhbnNhY3Rpb25FeHBpcmF0aW9uO1xuICBnYXNDb25maWc6IEdhc0NvbmZpZztcbiAgaW5wdXRzOiBUcmFuc2FjdGlvbkJsb2NrSW5wdXRbXTtcbiAgdHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvblR5cGVbXTtcblxuICBjb25zdHJ1Y3RvcihjbG9uZT86IFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlcikge1xuICAgIHRoaXMuc2VuZGVyID0gY2xvbmU/LnNlbmRlcjtcbiAgICB0aGlzLmV4cGlyYXRpb24gPSBjbG9uZT8uZXhwaXJhdGlvbjtcbiAgICB0aGlzLmdhc0NvbmZpZyA9IGNsb25lPy5nYXNDb25maWcgPz8ge307XG4gICAgdGhpcy5pbnB1dHMgPSBjbG9uZT8uaW5wdXRzID8/IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gY2xvbmU/LnRyYW5zYWN0aW9ucyA/PyBbXTtcbiAgfVxuXG4gIGJ1aWxkKHtcbiAgICBvdmVycmlkZXMsXG4gICAgb25seVRyYW5zYWN0aW9uS2luZCxcbiAgfToge1xuICAgIG92ZXJyaWRlcz86IFBpY2s8UGFydGlhbDxUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXI+LCAnc2VuZGVyJyB8ICdnYXNDb25maWcnIHwgJ2V4cGlyYXRpb24nPjtcbiAgICBvbmx5VHJhbnNhY3Rpb25LaW5kPzogYm9vbGVhbjtcbiAgfSA9IHt9KSB7XG4gICAgLy8gUmVzb2x2ZSBpbnB1dHMgZG93biB0byB2YWx1ZXM6XG4gICAgY29uc3QgaW5wdXRzID0gdGhpcy5pbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgYXNzZXJ0KGlucHV0LnZhbHVlLCBCdWlsZGVyQ2FsbEFyZyk7XG4gICAgICByZXR1cm4gaW5wdXQudmFsdWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBraW5kID0ge1xuICAgICAgUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb246IHtcbiAgICAgICAgaW5wdXRzLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IHRoaXMudHJhbnNhY3Rpb25zLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG9ubHlUcmFuc2FjdGlvbktpbmQpIHtcbiAgICAgIHJldHVybiBidWlsZGVyLnNlcignVHJhbnNhY3Rpb25LaW5kJywga2luZCwgeyBtYXhTaXplOiBUUkFOU0FDVElPTl9EQVRBX01BWF9TSVpFIH0pLnRvQnl0ZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBpcmF0aW9uID0gb3ZlcnJpZGVzPy5leHBpcmF0aW9uID8/IHRoaXMuZXhwaXJhdGlvbjtcbiAgICBjb25zdCBzZW5kZXIgPSBvdmVycmlkZXM/LnNlbmRlciA/PyB0aGlzLnNlbmRlcjtcbiAgICBjb25zdCBnYXNDb25maWcgPSB7IC4uLnRoaXMuZ2FzQ29uZmlnLCAuLi5vdmVycmlkZXM/Lmdhc0NvbmZpZyB9O1xuXG4gICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0cmFuc2FjdGlvbiBzZW5kZXInKTtcbiAgICB9XG5cbiAgICBpZiAoIWdhc0NvbmZpZy5idWRnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBnYXMgYnVkZ2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFnYXNDb25maWcucGF5bWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGdhcyBwYXltZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFnYXNDb25maWcucHJpY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBnYXMgcHJpY2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbkRhdGEgPSB7XG4gICAgICBzZW5kZXI6IHByZXBhcmVTdWlBZGRyZXNzKHNlbmRlciksXG4gICAgICBleHBpcmF0aW9uOiBleHBpcmF0aW9uID8gZXhwaXJhdGlvbiA6IHsgTm9uZTogdHJ1ZSB9LFxuICAgICAgZ2FzRGF0YToge1xuICAgICAgICBwYXltZW50OiBnYXNDb25maWcucGF5bWVudCxcbiAgICAgICAgb3duZXI6IHByZXBhcmVTdWlBZGRyZXNzKHRoaXMuZ2FzQ29uZmlnLm93bmVyID8/IHNlbmRlciksXG4gICAgICAgIHByaWNlOiBCaWdJbnQoZ2FzQ29uZmlnLnByaWNlKSxcbiAgICAgICAgYnVkZ2V0OiBCaWdJbnQoZ2FzQ29uZmlnLmJ1ZGdldCksXG4gICAgICB9LFxuICAgICAga2luZDoge1xuICAgICAgICBQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjoge1xuICAgICAgICAgIGlucHV0cyxcbiAgICAgICAgICB0cmFuc2FjdGlvbnM6IHRoaXMudHJhbnNhY3Rpb25zLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJ1aWxkZXIuc2VyKCdUcmFuc2FjdGlvbkRhdGEnLCB7IFYxOiB0cmFuc2FjdGlvbkRhdGEgfSwgeyBtYXhTaXplOiBUUkFOU0FDVElPTl9EQVRBX01BWF9TSVpFIH0pLnRvQnl0ZXMoKTtcbiAgfVxuXG4gIGdldERpZ2VzdCgpIHtcbiAgICBjb25zdCBieXRlcyA9IHRoaXMuYnVpbGQoeyBvbmx5VHJhbnNhY3Rpb25LaW5kOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyLmdldERpZ2VzdEZyb21CeXRlcyhieXRlcyk7XG4gIH1cblxuICBzbmFwc2hvdCgpOiBTZXJpYWxpemVkVHJhbnNhY3Rpb25EYXRhQnVpbGRlciB7XG4gICAgcmV0dXJuIGNyZWF0ZSh0aGlzLCBTZXJpYWxpemVkVHJhbnNhY3Rpb25EYXRhQnVpbGRlcik7XG4gIH1cbn1cbiJdfQ==
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25EYXRhQmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL215c3RlbmxhYi9idWlsZGVyL1RyYW5zYWN0aW9uRGF0YUJsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFvQztBQUNwQyw2Q0FhcUI7QUFDckIsK0NBQXFEO0FBQ3JELG9DQUE2RDtBQUM3RCwrQkFBZ0M7QUFDaEMsaURBQXdFO0FBQ3hFLHFDQUF1RDtBQUN2RCxtQ0FBaUM7QUFFcEIsUUFBQSxxQkFBcUIsR0FBRyxJQUFBLHNCQUFRLEVBQzNDLElBQUEsc0JBQVEsRUFBQyxJQUFBLG1CQUFLLEVBQUMsQ0FBQyxJQUFBLG9CQUFNLEVBQUMsRUFBRSxLQUFLLEVBQUUsSUFBQSxxQkFBTyxHQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUEsb0JBQU0sRUFBQyxFQUFFLElBQUksRUFBRSxJQUFBLG1CQUFLLEVBQUMsQ0FBQyxJQUFBLHFCQUFPLEVBQUMsSUFBSSxDQUFDLEVBQUUsSUFBQSxxQkFBTyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pHLENBQUM7QUFHRixNQUFNLFVBQVUsR0FBRyxJQUFBLG9CQUFNLEdBQUUsQ0FBQztBQUU1QixNQUFNLG1CQUFtQixHQUFHLElBQUEsb0JBQU0sRUFBUyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ3hFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFdkUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLEdBQWEsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztB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QU8sRUFBRSxpQ0FBeUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkgsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLDJCQUEyQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFBLGNBQU0sRUFBQyxJQUFJLEVBQUUsd0NBQWdDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0Y7QUF6S0Qsa0VBeUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9CNTggfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQge1xuICBhcnJheSxcbiAgYXNzZXJ0LFxuICBkZWZpbmUsXG4gIEluZmVyLFxuICBpbnRlZ2VyLFxuICBpcyxcbiAgbGl0ZXJhbCxcbiAgbnVsbGFibGUsXG4gIG9iamVjdCxcbiAgb3B0aW9uYWwsXG4gIHN0cmluZyxcbiAgdW5pb24sXG59IGZyb20gJ3N1cGVyc3RydWN0JztcbmltcG9ydCB7IGhhc2hUeXBlZERhdGEgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvaGFzaCc7XG5pbXBvcnQgeyBub3JtYWxpemVTdWlBZGRyZXNzLCBTdWlPYmplY3RSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZGVyIH0gZnJvbSAnLi9iY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBUcmFuc2FjdGlvbkJsb2NrSW5wdXQgfSBmcm9tICcuL1RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCdWlsZGVyQ2FsbEFyZywgUHVyZUNhbGxBcmcgfSBmcm9tICcuL0lucHV0cyc7XG5pbXBvcnQgeyBjcmVhdGUgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IFRyYW5zYWN0aW9uRXhwaXJhdGlvbiA9IG9wdGlvbmFsKFxuICBudWxsYWJsZSh1bmlvbihbb2JqZWN0KHsgRXBvY2g6IGludGVnZXIoKSB9KSwgb2JqZWN0KHsgTm9uZTogdW5pb24oW2xpdGVyYWwodHJ1ZSksIGxpdGVyYWwobnVsbCldKSB9KV0pKVxuKTtcbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uRXhwaXJhdGlvbiA9IEluZmVyPHR5cGVvZiBUcmFuc2FjdGlvbkV4cGlyYXRpb24+O1xuXG5jb25zdCBTdWlBZGRyZXNzID0gc3RyaW5nKCk7XG5cbmNvbnN0IFN0cmluZ0VuY29kZWRCaWdpbnQgPSBkZWZpbmU8c3RyaW5nPignU3RyaW5nRW5jb2RlZEJpZ2ludCcsICh2YWwpID0+IHtcbiAgaWYgKCFbJ3N0cmluZycsICdudW1iZXInLCAnYmlnaW50J10uaW5jbHVkZXModHlwZW9mIHZhbCkpIHJldHVybiBmYWxzZTtcblxuICB0cnkge1xuICAgIEJpZ0ludCh2YWwgYXMgc3RyaW5nKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuY29uc3QgR2FzQ29uZmlnID0gb2JqZWN0KHtcbiAgYnVkZ2V0OiBvcHRpb25hbChTdHJpbmdFbmNvZGVkQmlnaW50KSxcbiAgcHJpY2U6IG9wdGlvbmFsKFN0cmluZ0VuY29kZWRCaWdpbnQpLFxuICBwYXltZW50OiBvcHRpb25hbChhcnJheShTdWlPYmplY3RSZWYpKSxcbiAgb3duZXI6IG9wdGlvbmFsKFN1aUFkZHJlc3MpLFxufSk7XG50eXBlIEdhc0NvbmZpZyA9IEluZmVyPHR5cGVvZiBHYXNDb25maWc+O1xuXG5leHBvcnQgY29uc3QgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIgPSBvYmplY3Qoe1xuICB2ZXJzaW9uOiBsaXRlcmFsKDEpLFxuICBzZW5kZXI6IG9wdGlvbmFsKFN1aUFkZHJlc3MpLFxuICBleHBpcmF0aW9uOiBUcmFuc2FjdGlvbkV4cGlyYXRpb24sXG4gIGdhc0NvbmZpZzogR2FzQ29uZmlnLFxuICBpbnB1dHM6IGFycmF5KFRyYW5zYWN0aW9uQmxvY2tJbnB1dCksXG4gIHRyYW5zYWN0aW9uczogYXJyYXkoVHJhbnNhY3Rpb25UeXBlKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIgPSBJbmZlcjx0eXBlb2YgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXI+O1xuXG5mdW5jdGlvbiBwcmVwYXJlU3VpQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVN1aUFkZHJlc3MoYWRkcmVzcykucmVwbGFjZSgnMHgnLCAnJyk7XG59XG5cbi8vIE5PVEU6IFRoaXMgdmFsdWUgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluXG4vLyBjcmF0ZXMvc3VpLXByb3RvY29sLWNvbmZpZy9zcmMvbGliLnJzXG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fREFUQV9NQVhfU0laRSA9IDEyOCAqIDEwMjQ7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIge1xuICBzdGF0aWMgZnJvbUtpbmRCeXRlcyhieXRlczogVWludDhBcnJheSkge1xuICAgIGNvbnN0IGtpbmQgPSBidWlsZGVyLmRlKCdUcmFuc2FjdGlvbktpbmQnLCBieXRlcyk7XG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHggPSBraW5kPy5Qcm9ncmFtbWFibGVUcmFuc2FjdGlvbjtcbiAgICBpZiAoIXByb2dyYW1tYWJsZVR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBkZXNlcmlhbGl6ZSBmcm9tIGJ5dGVzLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBjcmVhdGUoXG4gICAgICB7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGdhc0NvbmZpZzoge30sXG4gICAgICAgIGlucHV0czogcHJvZ3JhbW1hYmxlVHguaW5wdXRzLm1hcCgodmFsdWU6IHVua25vd24sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBraW5kOiAnSW5wdXQnLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHR5cGU6IGlzKHZhbHVlLCBQdXJlQ2FsbEFyZykgPyAncHVyZScgOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRyYW5zYWN0aW9uczogcHJvZ3JhbW1hYmxlVHgudHJhbnNhY3Rpb25zLFxuICAgICAgfSxcbiAgICAgIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyXG4gICAgKTtcblxuICAgIHJldHVybiBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIucmVzdG9yZShzZXJpYWxpemVkKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCByYXdEYXRhID0gYnVpbGRlci5kZSgnVHJhbnNhY3Rpb25EYXRhJywgYnl0ZXMpO1xuICAgIGNvbnN0IGRhdGEgPSByYXdEYXRhPy5WMTtcbiAgICBjb25zdCBwcm9ncmFtbWFibGVUeCA9IGRhdGE/LmtpbmQ/LlByb2dyYW1tYWJsZVRyYW5zYWN0aW9uO1xuICAgIGlmICghZGF0YSB8fCAhcHJvZ3JhbW1hYmxlVHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGRlc2VyaWFsaXplIGZyb20gYnl0ZXMuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGNyZWF0ZShcbiAgICAgIHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgc2VuZGVyOiBkYXRhLnNlbmRlcixcbiAgICAgICAgZXhwaXJhdGlvbjogZGF0YS5leHBpcmF0aW9uLFxuICAgICAgICBnYXNDb25maWc6IGRhdGEuZ2FzRGF0YSxcbiAgICAgICAgaW5wdXRzOiBwcm9ncmFtbWFibGVUeC5pbnB1dHMubWFwKCh2YWx1ZTogdW5rbm93biwgaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICBjcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdJbnB1dCcsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgdHlwZTogaXModmFsdWUsIFB1cmVDYWxsQXJnKSA/ICdwdXJlJyA6ICdvYmplY3QnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFRyYW5zYWN0aW9uQmxvY2tJbnB1dFxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBwcm9ncmFtbWFibGVUeC50cmFuc2FjdGlvbnMsXG4gICAgICB9LFxuICAgICAgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXJcbiAgICApO1xuXG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlci5yZXN0b3JlKHNlcmlhbGl6ZWQpO1xuICB9XG5cbiAgc3RhdGljIHJlc3RvcmUoZGF0YTogU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIpIHtcbiAgICBhc3NlcnQoZGF0YSwgU2VyaWFsaXplZFRyYW5zYWN0aW9uRGF0YUJ1aWxkZXIpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGF0YSA9IG5ldyBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIoKTtcbiAgICBPYmplY3QuYXNzaWduKHRyYW5zYWN0aW9uRGF0YSwgZGF0YSk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0cmFuc2FjdGlvbiBkaWdlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBieXRlcyBCQ1Mgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHRyYW5zYWN0aW9uIGRpZ2VzdC5cbiAgICovXG4gIHN0YXRpYyBnZXREaWdlc3RGcm9tQnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCBoYXNoID0gaGFzaFR5cGVkRGF0YSgnVHJhbnNhY3Rpb25EYXRhJywgYnl0ZXMpO1xuICAgIHJldHVybiB0b0I1OChoYXNoKTtcbiAgfVxuXG4gIHZlcnNpb24gPSAxIGFzIGNvbnN0O1xuICBzZW5kZXI/OiBzdHJpbmc7XG4gIGV4cGlyYXRpb24/OiBUcmFuc2FjdGlvbkV4cGlyYXRpb247XG4gIGdhc0NvbmZpZzogR2FzQ29uZmlnO1xuICBpbnB1dHM6IFRyYW5zYWN0aW9uQmxvY2tJbnB1dFtdO1xuICB0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uVHlwZVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNsb25lPzogVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyKSB7XG4gICAgdGhpcy5zZW5kZXIgPSBjbG9uZT8uc2VuZGVyO1xuICAgIHRoaXMuZXhwaXJhdGlvbiA9IGNsb25lPy5leHBpcmF0aW9uO1xuICAgIHRoaXMuZ2FzQ29uZmlnID0gY2xvbmU/Lmdhc0NvbmZpZyA/PyB7fTtcbiAgICB0aGlzLmlucHV0cyA9IGNsb25lPy5pbnB1dHMgPz8gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSBjbG9uZT8udHJhbnNhY3Rpb25zID8/IFtdO1xuICB9XG5cbiAgYnVpbGQoe1xuICAgIG92ZXJyaWRlcyxcbiAgICBvbmx5VHJhbnNhY3Rpb25LaW5kLFxuICB9OiB7XG4gICAgb3ZlcnJpZGVzPzogUGljazxQYXJ0aWFsPFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlcj4sICdzZW5kZXInIHwgJ2dhc0NvbmZpZycgfCAnZXhwaXJhdGlvbic+O1xuICAgIG9ubHlUcmFuc2FjdGlvbktpbmQ/OiBib29sZWFuO1xuICB9ID0ge30pIHtcbiAgICAvLyBSZXNvbHZlIGlucHV0cyBkb3duIHRvIHZhbHVlczpcbiAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmlucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBhc3NlcnQoaW5wdXQudmFsdWUsIEJ1aWxkZXJDYWxsQXJnKTtcbiAgICAgIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGtpbmQgPSB7XG4gICAgICBQcm9ncmFtbWFibGVUcmFuc2FjdGlvbjoge1xuICAgICAgICBpbnB1dHMsXG4gICAgICAgIHRyYW5zYWN0aW9uczogdGhpcy50cmFuc2FjdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob25seVRyYW5zYWN0aW9uS2luZCkge1xuICAgICAgcmV0dXJuIGJ1aWxkZXIuc2VyKCdUcmFuc2FjdGlvbktpbmQnLCBraW5kLCB7IG1heFNpemU6IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgfSkudG9CeXRlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBvdmVycmlkZXM/LmV4cGlyYXRpb24gPz8gdGhpcy5leHBpcmF0aW9uO1xuICAgIGNvbnN0IHNlbmRlciA9IG92ZXJyaWRlcz8uc2VuZGVyID8/IHRoaXMuc2VuZGVyO1xuICAgIGNvbnN0IGdhc0NvbmZpZyA9IHsgLi4udGhpcy5nYXNDb25maWcsIC4uLm92ZXJyaWRlcz8uZ2FzQ29uZmlnIH07XG5cbiAgICBpZiAoIXNlbmRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRyYW5zYWN0aW9uIHNlbmRlcicpO1xuICAgIH1cblxuICAgIGlmICghZ2FzQ29uZmlnLmJ1ZGdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGdhcyBidWRnZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWdhc0NvbmZpZy5wYXltZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZ2FzIHBheW1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWdhc0NvbmZpZy5wcmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGdhcyBwcmljZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGF0YSA9IHtcbiAgICAgIHNlbmRlcjogcHJlcGFyZVN1aUFkZHJlc3Moc2VuZGVyKSxcbiAgICAgIGV4cGlyYXRpb246IGV4cGlyYXRpb24gPyBleHBpcmF0aW9uIDogeyBOb25lOiB0cnVlIH0sXG4gICAgICBnYXNEYXRhOiB7XG4gICAgICAgIHBheW1lbnQ6IGdhc0NvbmZpZy5wYXltZW50LFxuICAgICAgICBvd25lcjogcHJlcGFyZVN1aUFkZHJlc3ModGhpcy5nYXNDb25maWcub3duZXIgPz8gc2VuZGVyKSxcbiAgICAgICAgcHJpY2U6IEJpZ0ludChnYXNDb25maWcucHJpY2UpLFxuICAgICAgICBidWRnZXQ6IEJpZ0ludChnYXNDb25maWcuYnVkZ2V0KSxcbiAgICAgIH0sXG4gICAgICBraW5kOiB7XG4gICAgICAgIFByb2dyYW1tYWJsZVRyYW5zYWN0aW9uOiB7XG4gICAgICAgICAgaW5wdXRzLFxuICAgICAgICAgIHRyYW5zYWN0aW9uczogdGhpcy50cmFuc2FjdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gYnVpbGRlci5zZXIoJ1RyYW5zYWN0aW9uRGF0YScsIHsgVjE6IHRyYW5zYWN0aW9uRGF0YSB9LCB7IG1heFNpemU6IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgfSkudG9CeXRlcygpO1xuICB9XG5cbiAgZ2V0RGlnZXN0KCkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5idWlsZCh7IG9ubHlUcmFuc2FjdGlvbktpbmQ6IGZhbHNlIH0pO1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJsb2NrRGF0YUJ1aWxkZXIuZ2V0RGlnZXN0RnJvbUJ5dGVzKGJ5dGVzKTtcbiAgfVxuXG4gIHNuYXBzaG90KCk6IFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyIHtcbiAgICByZXR1cm4gY3JlYXRlKHRoaXMsIFNlcmlhbGl6ZWRUcmFuc2FjdGlvbkRhdGFCdWlsZGVyKTtcbiAgfVxufVxuIl19
|