@bitgo/sdk-coin-sui 5.26.3 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/tokenTransferBuilder.d.ts +27 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -1
- package/dist/src/lib/tokenTransferBuilder.js +71 -7
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +16 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +39 -1
- package/dist/src/sui.js +3 -3
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +177 -1
- package/dist/test/unit/transactionBuilder/transferBuilder.js +127 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -16,6 +16,14 @@ export declare class TokenTransferBuilder extends TransactionBuilder<TokenTransf
|
|
|
16
16
|
* to a Coin<T> that is merged with any coin objects before splitting.
|
|
17
17
|
*/
|
|
18
18
|
protected _fundsInAddressBalance: BigNumber;
|
|
19
|
+
/**
|
|
20
|
+
* Coin type recovered from a deserialized transaction (the `redeem_funds` type argument /
|
|
21
|
+
* `BalanceWithdrawal` type). When set it takes precedence over the coin type derived from the
|
|
22
|
+
* coin config, so re-building a transaction (e.g. to attach a TSS signature before broadcast)
|
|
23
|
+
* preserves the exact coin type it was signed with even when the builder was constructed with
|
|
24
|
+
* the parent chain config rather than the token config.
|
|
25
|
+
*/
|
|
26
|
+
protected _tokenCoinTypeOverride?: string;
|
|
19
27
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
20
28
|
protected get transactionType(): TransactionType;
|
|
21
29
|
/**
|
|
@@ -58,6 +66,25 @@ export declare class TokenTransferBuilder extends TransactionBuilder<TokenTransf
|
|
|
58
66
|
* MoveCall(0x2::coin::redeem_funds, [withdrawal(amount, coinType)]) → Coin<T>
|
|
59
67
|
* MergeCoins(inputObject[0] | addrCoin, [rest...]) → SplitCoins → TransferObjects
|
|
60
68
|
*
|
|
69
|
+
* Exception A — addr-bal only, full amount (fundsInAddressBalance === sum(recipient amounts)):
|
|
70
|
+
* MoveCall(0x2::coin::redeem_funds, [withdrawal(amount, coinType)]) → Coin<T>
|
|
71
|
+
* SplitCoins(addrCoin, [amount0]) → TransferObjects(split0, addr0) # recipients 0..N-2
|
|
72
|
+
* ...
|
|
73
|
+
* TransferObjects([addrCoin], addrN-1) # last recipient directly
|
|
74
|
+
* (After N-1 splits addrCoin.balance === recipients[N-1].amount exactly, so it can be
|
|
75
|
+
* transferred directly. SplitCoins on the last recipient would leave a zero-balance Coin<T>
|
|
76
|
+
* unused, which causes UnusedValueWithoutDrop since Coin<T> has no drop ability.)
|
|
77
|
+
*
|
|
78
|
+
* Exception B — addr-bal only, partial amount (fundsInAddressBalance > sum(recipient amounts)):
|
|
79
|
+
* MoveCall(0x2::coin::redeem_funds, [withdrawal(amount, coinType)]) → Coin<T>
|
|
80
|
+
* SplitCoins(addrCoin, [amount0]) → TransferObjects(split0, addr0) # all recipients
|
|
81
|
+
* ...
|
|
82
|
+
* TransferObjects([addrCoin], sender) # return change to sender
|
|
83
|
+
* (addrCoin still holds the unspent remainder; transferring it back to the sender consumes
|
|
84
|
+
* the command result, avoiding UnusedValueWithoutDrop. Mirrors the native SUI TransferBuilder
|
|
85
|
+
* change-return path. Unlike native SUI, MergeCoins(gas, [addrCoin]) is not possible here
|
|
86
|
+
* because gas is Coin<SUI> and addrCoin is Coin<T> — incompatible types.)
|
|
87
|
+
*
|
|
61
88
|
* @return {SuiTransaction<TokenTransferProgrammableTransaction>}
|
|
62
89
|
* @protected
|
|
63
90
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenTransferBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAyB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAW,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAsB,oCAAoC,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"tokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenTransferBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAyB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAW,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAsB,oCAAoC,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAuB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQtE,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,qBAAa,oBAAqB,SAAQ,kBAAkB,CAAC,oCAAoC,CAAC;IAChG,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC;IACnC,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;IACxC;;;;;OAKG;IACH,SAAS,CAAC,sBAAsB,EAAE,SAAS,CAAoB;IAE/D;;;;;;OAMG;IACH,SAAS,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;gBAE9B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;OAEG;IACH,OAAO,KAAK,aAAa,GAMxB;IAED,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,wBAAwB,GAAG,IAAI;IAOhE,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAKxB,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAAC,oCAAoC,CAAC;IAQvG,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAgBjG,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,wBAAwB,GAAG,IAAI;IAkD/C,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAMnC,YAAY,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,IAAI;IAM/C;;;;OAIG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK3C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAoBjC,+EAA+E;IAC/E,OAAO,CAAC,uBAAuB;IAQ/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,SAAS,CAAC,mBAAmB,IAAI,cAAc,CAAC,oCAAoC,CAAC;CA+EtF"}
|
|
@@ -9,8 +9,10 @@ const sdk_core_1 = require("@bitgo/sdk-core");
|
|
|
9
9
|
const iface_1 = require("./iface");
|
|
10
10
|
const transactionBuilder_1 = require("./transactionBuilder");
|
|
11
11
|
const tokenTransferTransaction_1 = require("./tokenTransferTransaction");
|
|
12
|
+
const types_1 = require("./mystenlab/types");
|
|
12
13
|
const utils_1 = __importDefault(require("./utils"));
|
|
13
14
|
const builder_1 = require("./mystenlab/builder");
|
|
15
|
+
const type_tag_serializer_1 = require("./mystenlab/txn-data-serializers/type-tag-serializer");
|
|
14
16
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
15
17
|
class TokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
16
18
|
constructor(_coinConfig) {
|
|
@@ -31,6 +33,9 @@ class TokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
31
33
|
* The full coin type string derived from the coin config (e.g. `0xabc::my_token::MY_TOKEN`).
|
|
32
34
|
*/
|
|
33
35
|
get tokenCoinType() {
|
|
36
|
+
if (this._tokenCoinTypeOverride) {
|
|
37
|
+
return this._tokenCoinTypeOverride;
|
|
38
|
+
}
|
|
34
39
|
const config = this._coinConfig;
|
|
35
40
|
return `${config.packageId}::${config.module}::${config.symbol}`;
|
|
36
41
|
}
|
|
@@ -91,6 +96,19 @@ class TokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
91
96
|
if (withdrawalInput) {
|
|
92
97
|
const bw = withdrawalInput.BalanceWithdrawal ?? withdrawalInput.value?.BalanceWithdrawal;
|
|
93
98
|
this._fundsInAddressBalance = new bignumber_js_1.default(String(bw.reservation?.MaxAmountU64 ?? bw.amount));
|
|
99
|
+
// Recover the coin type from the withdrawal's TypeTag so that re-building uses the exact
|
|
100
|
+
// coin type the transaction was created (and signed) with. Without this, buildSuiTransaction
|
|
101
|
+
// would re-derive the coin type from this._coinConfig, which is the parent chain config
|
|
102
|
+
// (no packageId/module/symbol) when the builder is constructed via the chain — producing an
|
|
103
|
+
// `undefined::undefined::undefined` coin type and a signature that fails on-chain verification.
|
|
104
|
+
const withdrawalTypeTag = bw?.typeArg?.Balance;
|
|
105
|
+
if (withdrawalTypeTag) {
|
|
106
|
+
// BCS decodes the struct address without the `0x` prefix; normalize it so the recovered
|
|
107
|
+
// coin type matches the config-derived form (`0x<addr>::module::name`). The serialized
|
|
108
|
+
// bytes are identical either way since parseFromStr re-normalizes the address on encode.
|
|
109
|
+
const [address, ...rest] = type_tag_serializer_1.TypeTagSerializer.tagToString(withdrawalTypeTag).split('::');
|
|
110
|
+
this._tokenCoinTypeOverride = [(0, types_1.normalizeSuiAddress)(address), ...rest].join('::');
|
|
111
|
+
}
|
|
94
112
|
}
|
|
95
113
|
if (txData.inputObjects && txData.inputObjects.length > 0) {
|
|
96
114
|
this.inputObjects(txData.inputObjects);
|
|
@@ -150,6 +168,25 @@ class TokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
150
168
|
* MoveCall(0x2::coin::redeem_funds, [withdrawal(amount, coinType)]) → Coin<T>
|
|
151
169
|
* MergeCoins(inputObject[0] | addrCoin, [rest...]) → SplitCoins → TransferObjects
|
|
152
170
|
*
|
|
171
|
+
* Exception A — addr-bal only, full amount (fundsInAddressBalance === sum(recipient amounts)):
|
|
172
|
+
* MoveCall(0x2::coin::redeem_funds, [withdrawal(amount, coinType)]) → Coin<T>
|
|
173
|
+
* SplitCoins(addrCoin, [amount0]) → TransferObjects(split0, addr0) # recipients 0..N-2
|
|
174
|
+
* ...
|
|
175
|
+
* TransferObjects([addrCoin], addrN-1) # last recipient directly
|
|
176
|
+
* (After N-1 splits addrCoin.balance === recipients[N-1].amount exactly, so it can be
|
|
177
|
+
* transferred directly. SplitCoins on the last recipient would leave a zero-balance Coin<T>
|
|
178
|
+
* unused, which causes UnusedValueWithoutDrop since Coin<T> has no drop ability.)
|
|
179
|
+
*
|
|
180
|
+
* Exception B — addr-bal only, partial amount (fundsInAddressBalance > sum(recipient amounts)):
|
|
181
|
+
* MoveCall(0x2::coin::redeem_funds, [withdrawal(amount, coinType)]) → Coin<T>
|
|
182
|
+
* SplitCoins(addrCoin, [amount0]) → TransferObjects(split0, addr0) # all recipients
|
|
183
|
+
* ...
|
|
184
|
+
* TransferObjects([addrCoin], sender) # return change to sender
|
|
185
|
+
* (addrCoin still holds the unspent remainder; transferring it back to the sender consumes
|
|
186
|
+
* the command result, avoiding UnusedValueWithoutDrop. Mirrors the native SUI TransferBuilder
|
|
187
|
+
* change-return path. Unlike native SUI, MergeCoins(gas, [addrCoin]) is not possible here
|
|
188
|
+
* because gas is Coin<SUI> and addrCoin is Coin<T> — incompatible types.)
|
|
189
|
+
*
|
|
153
190
|
* @return {SuiTransaction<TokenTransferProgrammableTransaction>}
|
|
154
191
|
* @protected
|
|
155
192
|
*/
|
|
@@ -176,12 +213,39 @@ class TokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
176
213
|
if (inputObjects.length > 0) {
|
|
177
214
|
programmableTxBuilder.mergeCoins(mergedObject, inputObjects);
|
|
178
215
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
216
|
+
// addrCoin (the Coin<T> returned by redeem_funds) is a command result and must be explicitly
|
|
217
|
+
// consumed — Coin<T> has no `drop` ability, so leaving it unused causes UnusedValueWithoutDrop.
|
|
218
|
+
// This only applies when there are no coin objects (addr-bal only); in the hybrid case addrCoin
|
|
219
|
+
// is consumed upfront by the MergeCoins above.
|
|
220
|
+
const recipientTotal = this._recipients.reduce((sum, r) => sum.plus(r.amount), new bignumber_js_1.default(0));
|
|
221
|
+
const isAddrBalOnly = (this._inputObjects ?? []).length === 0 && this._fundsInAddressBalance.gt(0);
|
|
222
|
+
if (isAddrBalOnly && this._fundsInAddressBalance.eq(recipientTotal)) {
|
|
223
|
+
// Exception A — full amount: split for first N-1 recipients, transfer addrCoin directly
|
|
224
|
+
// to the last. After N-1 splits addrCoin.balance === recipients[N-1].amount exactly.
|
|
225
|
+
this._recipients.slice(0, -1).forEach((recipient) => {
|
|
226
|
+
const splitObject = programmableTxBuilder.splitCoins(mergedObject, [
|
|
227
|
+
programmableTxBuilder.pure(BigInt(recipient.amount)),
|
|
228
|
+
]);
|
|
229
|
+
programmableTxBuilder.transferObjects([splitObject], programmableTxBuilder.object(recipient.address));
|
|
230
|
+
});
|
|
231
|
+
const lastRecipient = this._recipients[this._recipients.length - 1];
|
|
232
|
+
programmableTxBuilder.transferObjects([mergedObject], programmableTxBuilder.object(lastRecipient.address));
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
// Standard path: split and transfer for every recipient.
|
|
236
|
+
this._recipients.forEach((recipient) => {
|
|
237
|
+
const splitObject = programmableTxBuilder.splitCoins(mergedObject, [
|
|
238
|
+
programmableTxBuilder.pure(BigInt(recipient.amount)),
|
|
239
|
+
]);
|
|
240
|
+
programmableTxBuilder.transferObjects([splitObject], programmableTxBuilder.object(recipient.address));
|
|
241
|
+
});
|
|
242
|
+
if (isAddrBalOnly && this._fundsInAddressBalance.gt(recipientTotal)) {
|
|
243
|
+
// Exception B — partial amount: addrCoin still holds the unspent remainder.
|
|
244
|
+
// Return it to the sender to consume the command result (MergeCoins into gas is not
|
|
245
|
+
// possible here — gas is Coin<SUI> but addrCoin is Coin<T>, incompatible types).
|
|
246
|
+
programmableTxBuilder.transferObjects([mergedObject], programmableTxBuilder.object(this._sender));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
185
249
|
const txData = programmableTxBuilder.blockData;
|
|
186
250
|
return {
|
|
187
251
|
type: this._type,
|
|
@@ -199,4 +263,4 @@ class TokenTransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
199
263
|
}
|
|
200
264
|
}
|
|
201
265
|
exports.TokenTransferBuilder = TokenTransferBuilder;
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Rva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBNkY7QUFFN0YsbUNBQW1HO0FBRW5HLDZEQUEwRDtBQUMxRCx5RUFBc0U7QUFFdEUsb0RBQTRCO0FBQzVCLGlEQUk2QjtBQUM3QixnRUFBcUM7QUFFckMsTUFBYSxvQkFBcUIsU0FBUSx1Q0FBd0Q7SUFXaEcsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFUckI7Ozs7O1dBS0c7UUFDTywyQkFBc0IsR0FBYyxJQUFJLHNCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFJN0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLG1EQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFZLGFBQWE7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQXNCLENBQUM7UUFDM0MsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUFxQztRQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBWTtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1C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QUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFO2dCQUNqRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyRCxDQUFDLENBQUM7WUFDSCxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDeEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7UUFDL0MsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSztZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsRUFBRSxFQUFFO2dCQUNGLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFDMUIsWUFBWSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO2FBQ3ZDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEdBQUcsSUFBSSxDQUFDLFFBQVE7YUFDakI7WUFDRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDNUIscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdHLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuT0Qsb0RBbU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBSZWNpcGllbnQsIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgQmFzZUtleSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnLCBTdWlDb2luIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgU3VpVHJhbnNhY3Rpb24sIFN1aVRyYW5zYWN0aW9uVHlwZSwgVG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uIH0gZnJvbSAnLi90b2tlblRyYW5zZmVyVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3VpT2JqZWN0UmVmIH0gZnJvbSAnLi9teXN0ZW5sYWIvdHlwZXMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgSW5wdXRzLFxuICBUcmFuc2FjdGlvbkJsb2NrIGFzIFByb2dyYW1taW5nVHJhbnNhY3Rpb25CbG9ja0J1aWxkZXIsXG4gIFRyYW5zYWN0aW9uQXJndW1lbnQsXG59IGZyb20gJy4vbXlzdGVubGFiL2J1aWxkZXInO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgVG9rZW5UcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXI8VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gIHByb3RlY3RlZCBfcmVjaXBpZW50czogUmVjaXBpZW50W107XG4gIHByb3RlY3RlZCBfaW5wdXRPYmplY3RzOiBTdWlPYmplY3RSZWZbXTtcbiAgLyoqXG4gICAqIEJhbGFuY2UgaGVsZCBpbiB0aGUgYWRkcmVzcyBiYWxhbmNlIHN5c3RlbSBmb3IgdGhlIHRva2VuIGJlaW5nIHRyYW5zZmVycmVkLlxuICAgKiBXaGVuIHNldCwgdGhpcyBhbW91bnQgaXMgaW5jbHVkZWQgaW4gdGhlIHRvdGFsIGF2YWlsYWJsZSBiYWxhbmNlLlxuICAgKiBBdCBleGVjdXRpb24gdGltZSwgdHgud2l0aGRyYXdhbCgpICsgMHgyOjpjb2luOjpyZWRlZW1fZnVuZHMgY29udmVydHMgaXRcbiAgICogdG8gYSBDb2luPFQ+IHRoYXQgaXMgbWVyZ2VkIHdpdGggYW55IGNvaW4gb2JqZWN0cyBiZWZvcmUgc3BsaXR0aW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9mdW5kc0luQWRkcmVzc0JhbGFuY2U6IEJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIoMCk7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBjb2luIHR5cGUgc3RyaW5nIGRlcml2ZWQgZnJvbSB0aGUgY29pbiBjb25maWcgKGUuZy4gYDB4YWJjOjpteV90b2tlbjo6TVlfVE9LRU5gKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IHRva2VuQ29pblR5cGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLl9jb2luQ29uZmlnIGFzIFN1aUNvaW47XG4gICAgcmV0dXJuIGAke2NvbmZpZy5wYWNrYWdlSWR9Ojoke2NvbmZpZy5tb2R1bGV9Ojoke2NvbmZpZy5zeW1ib2x9YDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUb2tlblRyYW5zZmVyVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLnN1aVRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHNpZ24oa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRTdWlUcmFuc2FjdGlvbih0aGlzLmJ1aWxkU3VpVHJhbnNhY3Rpb24oKSk7XG4gICAgc3VwZXIuc2lnbihrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbjxUb2tlblRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+PiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRTdWlUcmFuc2FjdGlvbih0aGlzLmJ1aWxkU3VpVHJhbnNhY3Rpb24oKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuXG4gICAgaWYgKHRoaXMuX3NpZ25lcikge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zaWduKHRoaXMuX3NpZ25lcik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2lnbmF0dXJlcy5mb3JFYWNoKChzaWduYXR1cmUpID0+IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZS5wdWJsaWNLZXksIHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUb2tlblRyYW5zZmVyVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuXG4gICAgaWYgKHR4LnNpZ25hdHVyZSAmJiB0eC5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fc2lnbmF0dXJlcyA9IFt0eC5zdWlTaWduYXR1cmVdO1xuICAgIH1cbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLlRva2VuVHJhbnNmZXIpO1xuICAgIHRoaXMuc2VuZGVyKHR4RGF0YS5zZW5kZXIpO1xuICAgIHRoaXMuZ2FzRGF0YSh0eERhdGEuZ2FzRGF0YSk7XG5cbiAgICAvLyBPbmx5IHJlc3RvcmUgbWVhbmluZ2Z1bCBleHBpcmF0aW9ucyAoRXBvY2ggb3IgVmFsaWREdXJpbmcpIOKAlCBpZ25vcmUgTm9uZS5cbiAgICBpZiAodHhEYXRhLmV4cGlyYXRpb24gJiYgISgnTm9uZScgaW4gdHhEYXRhLmV4cGlyYXRpb24pKSB7XG4gICAgICB0aGlzLl9leHBpcmF0aW9uID0gdHhEYXRhLmV4cGlyYXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHV0aWxzLmdldFJlY2lwaWVudHModHguc3VpVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuc2VuZChyZWNpcGllbnRzKTtcblxuICAgIC8vIFJlY29uc3RydWN0IGZ1bmRzSW5BZGRyZXNzQmFsYW5jZSBmcm9tIEJhbGFuY2VXaXRoZHJhd2FsIGlucHV0IGlmIHByZXNlbnQuXG4gICAgLy8gQWZ0ZXIgQkNTIGRlc2VyaWFsaXphdGlvbiBpbnB1dHMgYXJlIENhbGxBcmcgZm9ybWF0OiB7IEJhbGFuY2VXaXRoZHJhd2FsOiB7Li4ufSB9XG4gICAgLy8gRHVyaW5nIGJ1aWxkaW5nIHRoZXkgYXJlIFRyYW5zYWN0aW9uQmxvY2tJbnB1dCBmb3JtYXQ6IHsga2luZDonSW5wdXQnLCB2YWx1ZTogeyBCYWxhbmNlV2l0aGRyYXdhbDogey4uLn0gfSB9XG4gICAgY29uc3Qgd2l0aGRyYXdhbElucHV0ID0gKHR4LnN1aVRyYW5zYWN0aW9uPy50eD8uaW5wdXRzIGFzIGFueVtdKT8uZmluZChcbiAgICAgIChpbnB1dDogYW55KSA9PlxuICAgICAgICAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiAnQmFsYW5jZVdpdGhkcmF3YWwnIGluIGlucHV0KSB8fFxuICAgICAgICAoaW5wdXQ/LnZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dD8udmFsdWUgPT09ICdvYmplY3QnICYmICdCYWxhbmNlV2l0aGRyYXdhbCcgaW4gKGlucHV0LnZhbHVlID8/IHt9KSlcbiAgICApO1xuICAgIGlmICh3aXRoZHJhd2FsSW5wdXQpIHtcbiAgICAgIGNvbnN0IGJ3ID0gd2l0aGRyYXdhbElucHV0LkJhbGFuY2VXaXRoZHJhd2FsID8/IHdpdGhkcmF3YWxJbnB1dC52YWx1ZT8uQmFsYW5jZVdpdGhkcmF3YWw7XG4gICAgICB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UgPSBuZXcgQmlnTnVtYmVyKFN0cmluZyhidy5yZXNlcnZhdGlvbj8uTWF4QW1vdW50VTY0ID8/IGJ3LmFtb3VudCkpO1xuICAgIH1cblxuICAgIGlmICh0eERhdGEuaW5wdXRPYmplY3RzICYmIHR4RGF0YS5pbnB1dE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pbnB1dE9iamVjdHModHhEYXRhLmlucHV0T2JqZWN0cyk7XG4gICAgfVxuICB9XG5cbiAgc2VuZChyZWNpcGllbnRzOiBSZWNpcGllbnRbXSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVSZWNpcGllbnRzKHJlY2lwaWVudHMpO1xuICAgIHRoaXMuX3JlY2lwaWVudHMgPSByZWNpcGllbnRzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5wdXRPYmplY3RzKGlucHV0T2JqZWN0OiBTdWlPYmplY3RSZWZbXSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVJbnB1dE9iamVjdFJlZnMoaW5wdXRPYmplY3QpO1xuICAgIHRoaXMuX2lucHV0T2JqZWN0cyA9IGlucHV0T2JqZWN0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYW1vdW50IG9mIHRva2VuIGZ1bmRzIGhlbGQgaW4gdGhlIFN1aSBhZGRyZXNzIGJhbGFuY2Ugc3lzdGVtIGZvciB0aGlzIHNlbmRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudCAtIGFtb3VudCBpbiBiYXNlIHVuaXRzIGhlbGQgaW4gYWRkcmVzcyBiYWxhbmNlXG4gICAqL1xuICBmdW5kc0luQWRkcmVzc0JhbGFuY2UoYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UgPSBuZXcgQmlnTnVtYmVyKGFtb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFsbCBmaWVsZHMgYXJlIGRlZmluZWQgY29ycmVjdGx5XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTogdm9pZCB7XG4gICAgYXNzZXJ0KHRoaXMuX3R5cGUsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3R5cGUgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9zZW5kZXIsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3NlbmRlciBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KFxuICAgICAgdGhpcy5fcmVjaXBpZW50cyAmJiB0aGlzLl9yZWNpcGllbnRzLmxlbmd0aCA+IDAsXG4gICAgICBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdhdCBsZWFzdCBvbmUgcmVjaXBpZW50IGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpXG4gICAgKTtcbiAgICBhc3NlcnQodGhpcy5fZ2FzRGF0YSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZ2FzRGF0YSBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgdGhpcy52YWxpZGF0ZUdhc0RhdGEodGhpcy5fZ2FzRGF0YSk7XG5cbiAgICAvLyBNdXN0IGhhdmUgYXQgbGVhc3QgY29pbiBvYmplY3RzIE9SIGFkZHJlc3MgYmFsYW5jZVxuICAgIGFzc2VydChcbiAgICAgICh0aGlzLl9pbnB1dE9iamVjdHMgJiYgdGhpcy5faW5wdXRPYmplY3RzLmxlbmd0aCA+IDApIHx8IHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS5ndCgwKSxcbiAgICAgIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2lucHV0IG9iamVjdHMgb3IgZnVuZHNJbkFkZHJlc3NCYWxhbmNlIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpXG4gICAgKTtcbiAgICBpZiAodGhpcy5faW5wdXRPYmplY3RzICYmIHRoaXMuX2lucHV0T2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlSW5wdXRPYmplY3RSZWZzKHRoaXMuX2lucHV0T2JqZWN0cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFZhbGlkYXRlcyB0aGUgaW5kaXZpZHVhbCBvYmplY3QgcmVmcyAoZG9lcyBub3QgcmVxdWlyZSBub24tZW1wdHkgYXJyYXkpLiAqL1xuICBwcml2YXRlIHZhbGlkYXRlSW5wdXRPYmplY3RSZWZzKGlucHV0T2JqZWN0czogU3VpT2JqZWN0UmVmW10pOiB2b2lkIHtcbiAgICBpZiAoaW5wdXRPYmplY3RzKSB7XG4gICAgICBpbnB1dE9iamVjdHMuZm9yRWFjaCgoaW5wdXRPYmplY3QpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVN1aU9iamVjdFJlZihpbnB1dE9iamVjdCwgJ2lucHV0IG9iamVjdCcpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIFN1aVRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBUd28gYnVpbGQgcGF0aHM6XG4gICAqXG4gICAqIFBhdGggQSDigJQgY29pbiBvYmplY3RzIG9ubHkgKGZ1bmRzSW5BZGRyZXNzQmFsYW5jZSA9IDApOlxuICAgKiAgIE1lcmdlQ29pbnMoaW5wdXRPYmplY3RbMF0sIFtpbnB1dE9iamVjdFsxLi5dXSkg4oaSIFNwbGl0Q29pbnMg4oaSIFRyYW5zZmVyT2JqZWN0c1xuICAgKlxuICAgKiBQYXRoIEIg4oCUIGNvaW4gb2JqZWN0cyArIGFkZHJlc3MgYmFsYW5jZSAob3IgYWRkcmVzcyBiYWxhbmNlIG9ubHkpOlxuICAgKiAgIE1vdmVDYWxsKDB4Mjo6Y29pbjo6cmVkZWVtX2Z1bmRzLCBbd2l0aGRyYXdhbChhbW91bnQsIGNvaW5UeXBlKV0pIOKGkiBDb2luPFQ+XG4gICAqICAgTWVyZ2VDb2lucyhpbnB1dE9iamVjdFswXSB8IGFkZHJDb2luLCBbcmVzdC4uLl0pIOKGkiBTcGxpdENvaW5zIOKGkiBUcmFuc2Zlck9iamVjdHNcbiAgICpcbiAgICogQHJldHVybiB7U3VpVHJhbnNhY3Rpb248VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPn1cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkU3VpVHJhbnNhY3Rpb24oKTogU3VpVHJhbnNhY3Rpb248VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk7XG5cbiAgICBjb25zdCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIgPSBuZXcgUHJvZ3JhbW1pbmdUcmFuc2FjdGlvbkJsb2NrQnVpbGRlcigpO1xuXG4gICAgY29uc3QgaW5wdXRPYmplY3RzOiBUcmFuc2FjdGlvbkFyZ3VtZW50W10gPSAodGhpcy5faW5wdXRPYmplY3RzID8/IFtdKS5tYXAoKG9iamVjdCkgPT5cbiAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3QoSW5wdXRzLk9iamVjdFJlZihvYmplY3QpKVxuICAgICk7XG5cbiAgICAvLyBJZiBhZGRyZXNzIGJhbGFuY2UgaXMgYXZhaWxhYmxlLCB3aXRoZHJhdyBpdCBhcyBDb2luPFQ+IGFuZCBhZGQgdG8gdGhlIHBvb2xcbiAgICBpZiAodGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApKSB7XG4gICAgICBjb25zdCBjb2luVHlwZSA9IHRoaXMudG9rZW5Db2luVHlwZTtcbiAgICAgIGNvbnN0IFthZGRyQ29pbl0gPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIubW92ZUNhbGwoe1xuICAgICAgICB0YXJnZXQ6ICcweDI6OmNvaW46OnJlZGVlbV9mdW5kcycsXG4gICAgICAgIHR5cGVBcmd1bWVudHM6IFtjb2luVHlwZV0sXG4gICAgICAgIGFyZ3VtZW50czogW1xuICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci53aXRoZHJhd2FsKHtcbiAgICAgICAgICAgIGFtb3VudDogQmlnSW50KHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS50b0ZpeGVkKCkpLFxuICAgICAgICAgICAgdHlwZTogY29pblR5cGUsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICAgIGlucHV0T2JqZWN0cy5wdXNoKGFkZHJDb2luKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZWRPYmplY3QgPSBpbnB1dE9iamVjdHMuc2hpZnQoKSBhcyBUcmFuc2FjdGlvbkFyZ3VtZW50O1xuICAgIGlmIChpbnB1dE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1lcmdlQ29pbnMobWVyZ2VkT2JqZWN0LCBpbnB1dE9iamVjdHMpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50KSA9PiB7XG4gICAgICBjb25zdCBzcGxpdE9iamVjdCA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5zcGxpdENvaW5zKG1lcmdlZE9iamVjdCwgW1xuICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIucHVyZShCaWdJbnQocmVjaXBpZW50LmFtb3VudCkpLFxuICAgICAgXSk7XG4gICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIudHJhbnNmZXJPYmplY3RzKFtzcGxpdE9iamVjdF0sIHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3QocmVjaXBpZW50LmFkZHJlc3MpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4RGF0YSA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5ibG9ja0RhdGE7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB7XG4gICAgICAgIGlucHV0czogWy4uLnR4RGF0YS5pbnB1dHNdLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFsuLi50eERhdGEudHJhbnNhY3Rpb25zXSxcbiAgICAgIH0sXG4gICAgICBnYXNEYXRhOiB7XG4gICAgICAgIC4uLnRoaXMuX2dhc0RhdGEsXG4gICAgICB9LFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5fZXhwaXJhdGlvbixcbiAgICAgIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZTogdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApID8gdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLnRvRml4ZWQoKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Rva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4Q0FBNkY7QUFFN0YsbUNBQW1HO0FBRW5HLDZEQUEwRDtBQUMxRCx5RUFBc0U7QUFDdEUsNkNBQXNFO0FBQ3RFLG9EQUE0QjtBQUM1QixpREFJNkI7QUFDN0IsOEZBQXlGO0FBQ3pGLGdFQUFxQztBQUVyQyxNQUFhLG9CQUFxQixTQUFRLHVDQUF3RDtJQW9CaEcsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFsQnJCOzs7OztXQUtHO1FBQ08sMkJBQXNCLEdBQWMsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBYTdELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxtREFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBWSxhQUFhO1FBQ3ZCLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDckMsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFzQixDQUFDO1FBQzNDLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBcUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyx5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QUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4RyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsNEVBQTRFO2dCQUM1RSxvRkFBb0Y7Z0JBQ3BGLGlGQUFpRjtnQkFDakYscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3BHLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDO1FBQy9DLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLEVBQUUsRUFBRTtnQkFDRixNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQzFCLFlBQVksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQzthQUN2QztZQUNELE9BQU8sRUFBRTtnQkFDUCxHQUFHLElBQUksQ0FBQyxRQUFRO2FBQ2pCO1lBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzVCLHFCQUFxQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUM3RyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMVNELG9EQTBTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSwgUmVjaXBpZW50LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIEJhc2VLZXkgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgU3VpQ29pbiB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFN1aVRyYW5zYWN0aW9uLCBTdWlUcmFuc2FjdGlvblR5cGUsIFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4vdG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uJztcbmltcG9ydCB7IG5vcm1hbGl6ZVN1aUFkZHJlc3MsIFN1aU9iamVjdFJlZiB9IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIElucHV0cyxcbiAgVHJhbnNhY3Rpb25CbG9jayBhcyBQcm9ncmFtbWluZ1RyYW5zYWN0aW9uQmxvY2tCdWlsZGVyLFxuICBUcmFuc2FjdGlvbkFyZ3VtZW50LFxufSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCB7IFR5cGVUYWdTZXJpYWxpemVyIH0gZnJvbSAnLi9teXN0ZW5sYWIvdHhuLWRhdGEtc2VyaWFsaXplcnMvdHlwZS10YWctc2VyaWFsaXplcic7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUb2tlblRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcjxUb2tlblRyYW5zZmVyUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgcHJvdGVjdGVkIF9yZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbiAgcHJvdGVjdGVkIF9pbnB1dE9iamVjdHM6IFN1aU9iamVjdFJlZltdO1xuICAvKipcbiAgICogQmFsYW5jZSBoZWxkIGluIHRoZSBhZGRyZXNzIGJhbGFuY2Ugc3lzdGVtIGZvciB0aGUgdG9rZW4gYmVpbmcgdHJhbnNmZXJyZWQuXG4gICAqIFdoZW4gc2V0LCB0aGlzIGFtb3VudCBpcyBpbmNsdWRlZCBpbiB0aGUgdG90YWwgYXZhaWxhYmxlIGJhbGFuY2UuXG4gICAqIEF0IGV4ZWN1dGlvbiB0aW1lLCB0eC53aXRoZHJhd2FsKCkgKyAweDI6OmNvaW46OnJlZGVlbV9mdW5kcyBjb252ZXJ0cyBpdFxuICAgKiB0byBhIENvaW48VD4gdGhhdCBpcyBtZXJnZWQgd2l0aCBhbnkgY29pbiBvYmplY3RzIGJlZm9yZSBzcGxpdHRpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZTogQmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcigwKTtcblxuICAvKipcbiAgICogQ29pbiB0eXBlIHJlY292ZXJlZCBmcm9tIGEgZGVzZXJpYWxpemVkIHRyYW5zYWN0aW9uICh0aGUgYHJlZGVlbV9mdW5kc2AgdHlwZSBhcmd1bWVudCAvXG4gICAqIGBCYWxhbmNlV2l0aGRyYXdhbGAgdHlwZSkuIFdoZW4gc2V0IGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgY29pbiB0eXBlIGRlcml2ZWQgZnJvbSB0aGVcbiAgICogY29pbiBjb25maWcsIHNvIHJlLWJ1aWxkaW5nIGEgdHJhbnNhY3Rpb24gKGUuZy4gdG8gYXR0YWNoIGEgVFNTIHNpZ25hdHVyZSBiZWZvcmUgYnJvYWRjYXN0KVxuICAgKiBwcmVzZXJ2ZXMgdGhlIGV4YWN0IGNvaW4gdHlwZSBpdCB3YXMgc2lnbmVkIHdpdGggZXZlbiB3aGVuIHRoZSBidWlsZGVyIHdhcyBjb25zdHJ1Y3RlZCB3aXRoXG4gICAqIHRoZSBwYXJlbnQgY2hhaW4gY29uZmlnIHJhdGhlciB0aGFuIHRoZSB0b2tlbiBjb25maWcuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3Rva2VuQ29pblR5cGVPdmVycmlkZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIGNvaW4gdHlwZSBzdHJpbmcgZGVyaXZlZCBmcm9tIHRoZSBjb2luIGNvbmZpZyAoZS5nLiBgMHhhYmM6Om15X3Rva2VuOjpNWV9UT0tFTmApLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgdG9rZW5Db2luVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl90b2tlbkNvaW5UeXBlT3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl90b2tlbkNvaW5UeXBlT3ZlcnJpZGU7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX2NvaW5Db25maWcgYXMgU3VpQ29pbjtcbiAgICByZXR1cm4gYCR7Y29uZmlnLnBhY2thZ2VJZH06OiR7Y29uZmlnLm1vZHVsZX06OiR7Y29uZmlnLnN5bWJvbH1gO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb24uc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgc2lnbihrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFN1aVRyYW5zYWN0aW9uKHRoaXMuYnVpbGRTdWlUcmFuc2FjdGlvbigpKTtcbiAgICBzdXBlci5zaWduKGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb248VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHggPSBuZXcgVG9rZW5UcmFuc2ZlclRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPFRva2VuVHJhbnNmZXJQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFN1aVRyYW5zYWN0aW9uKHRoaXMuYnVpbGRTdWlUcmFuc2FjdGlvbigpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fc2lnbmVyKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLnNpZ24odGhpcy5fc2lnbmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaWduYXR1cmVzLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnbmF0dXJlLnB1YmxpY0tleSwgc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRva2VuVHJhbnNmZXJUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG5cbiAgICBpZiAodHguc2lnbmF0dXJlICYmIHR4LnNpZ25hdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzID0gW3R4LnN1aVNpZ25hdHVyZV07XG4gICAgfVxuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuICAgIHRoaXMudHlwZShTdWlUcmFuc2FjdGlvblR5cGUuVG9rZW5UcmFuc2Zlcik7XG4gICAgdGhpcy5zZW5kZXIodHhEYXRhLnNlbmRlcik7XG4gICAgdGhpcy5nYXNEYXRhKHR4RGF0YS5nYXNEYXRhKTtcblxuICAgIC8vIE9ubHkgcmVzdG9yZSBtZWFuaW5nZnVsIGV4cGlyYXRpb25zIChFcG9jaCBvciBWYWxpZER1cmluZykg4oCUIGlnbm9yZSBOb25lLlxuICAgIGlmICh0eERhdGEuZXhwaXJhdGlvbiAmJiAhKCdOb25lJyBpbiB0eERhdGEuZXhwaXJhdGlvbikpIHtcbiAgICAgIHRoaXMuX2V4cGlyYXRpb24gPSB0eERhdGEuZXhwaXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzID0gdXRpbHMuZ2V0UmVjaXBpZW50cyh0eC5zdWlUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5zZW5kKHJlY2lwaWVudHMpO1xuXG4gICAgLy8gUmVjb25zdHJ1Y3QgZnVuZHNJbkFkZHJlc3NCYWxhbmNlIGZyb20gQmFsYW5jZVdpdGhkcmF3YWwgaW5wdXQgaWYgcHJlc2VudC5cbiAgICAvLyBBZnRlciBCQ1MgZGVzZXJpYWxpemF0aW9uIGlucHV0cyBhcmUgQ2FsbEFyZyBmb3JtYXQ6IHsgQmFsYW5jZVdpdGhkcmF3YWw6IHsuLi59IH1cbiAgICAvLyBEdXJpbmcgYnVpbGRpbmcgdGhleSBhcmUgVHJhbnNhY3Rpb25CbG9ja0lucHV0IGZvcm1hdDogeyBraW5kOidJbnB1dCcsIHZhbHVlOiB7IEJhbGFuY2VXaXRoZHJhd2FsOiB7Li4ufSB9IH1cbiAgICBjb25zdCB3aXRoZHJhd2FsSW5wdXQgPSAodHguc3VpVHJhbnNhY3Rpb24/LnR4Py5pbnB1dHMgYXMgYW55W10pPy5maW5kKFxuICAgICAgKGlucHV0OiBhbnkpID0+XG4gICAgICAgIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmICdCYWxhbmNlV2l0aGRyYXdhbCcgaW4gaW5wdXQpIHx8XG4gICAgICAgIChpbnB1dD8udmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0Py52YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ0JhbGFuY2VXaXRoZHJhd2FsJyBpbiAoaW5wdXQudmFsdWUgPz8ge30pKVxuICAgICk7XG4gICAgaWYgKHdpdGhkcmF3YWxJbnB1dCkge1xuICAgICAgY29uc3QgYncgPSB3aXRoZHJhd2FsSW5wdXQuQmFsYW5jZVdpdGhkcmF3YWwgPz8gd2l0aGRyYXdhbElucHV0LnZhbHVlPy5CYWxhbmNlV2l0aGRyYXdhbDtcbiAgICAgIHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZSA9IG5ldyBCaWdOdW1iZXIoU3RyaW5nKGJ3LnJlc2VydmF0aW9uPy5NYXhBbW91bnRVNjQgPz8gYncuYW1vdW50KSk7XG4gICAgICAvLyBSZWNvdmVyIHRoZSBjb2luIHR5cGUgZnJvbSB0aGUgd2l0aGRyYXdhbCdzIFR5cGVUYWcgc28gdGhhdCByZS1idWlsZGluZyB1c2VzIHRoZSBleGFjdFxuICAgICAgLy8gY29pbiB0eXBlIHRoZSB0cmFuc2FjdGlvbiB3YXMgY3JlYXRlZCAoYW5kIHNpZ25lZCkgd2l0aC4gV2l0aG91dCB0aGlzLCBidWlsZFN1aVRyYW5zYWN0aW9uXG4gICAgICAvLyB3b3VsZCByZS1kZXJpdmUgdGhlIGNvaW4gdHlwZSBmcm9tIHRoaXMuX2NvaW5Db25maWcsIHdoaWNoIGlzIHRoZSBwYXJlbnQgY2hhaW4gY29uZmlnXG4gICAgICAvLyAobm8gcGFja2FnZUlkL21vZHVsZS9zeW1ib2wpIHdoZW4gdGhlIGJ1aWxkZXIgaXMgY29uc3RydWN0ZWQgdmlhIHRoZSBjaGFpbiDigJQgcHJvZHVjaW5nIGFuXG4gICAgICAvLyBgdW5kZWZpbmVkOjp1bmRlZmluZWQ6OnVuZGVmaW5lZGAgY29pbiB0eXBlIGFuZCBhIHNpZ25hdHVyZSB0aGF0IGZhaWxzIG9uLWNoYWluIHZlcmlmaWNhdGlvbi5cbiAgICAgIGNvbnN0IHdpdGhkcmF3YWxUeXBlVGFnID0gYnc/LnR5cGVBcmc/LkJhbGFuY2U7XG4gICAgICBpZiAod2l0aGRyYXdhbFR5cGVUYWcpIHtcbiAgICAgICAgLy8gQkNTIGRlY29kZXMgdGhlIHN0cnVjdCBhZGRyZXNzIHdpdGhvdXQgdGhlIGAweGAgcHJlZml4OyBub3JtYWxpemUgaXQgc28gdGhlIHJlY292ZXJlZFxuICAgICAgICAvLyBjb2luIHR5cGUgbWF0Y2hlcyB0aGUgY29uZmlnLWRlcml2ZWQgZm9ybSAoYDB4PGFkZHI+Ojptb2R1bGU6Om5hbWVgKS4gVGhlIHNlcmlhbGl6ZWRcbiAgICAgICAgLy8gYnl0ZXMgYXJlIGlkZW50aWNhbCBlaXRoZXIgd2F5IHNpbmNlIHBhcnNlRnJvbVN0ciByZS1ub3JtYWxpemVzIHRoZSBhZGRyZXNzIG9uIGVuY29kZS5cbiAgICAgICAgY29uc3QgW2FkZHJlc3MsIC4uLnJlc3RdID0gVHlwZVRhZ1NlcmlhbGl6ZXIudGFnVG9TdHJpbmcod2l0aGRyYXdhbFR5cGVUYWcpLnNwbGl0KCc6OicpO1xuICAgICAgICB0aGlzLl90b2tlbkNvaW5UeXBlT3ZlcnJpZGUgPSBbbm9ybWFsaXplU3VpQWRkcmVzcyhhZGRyZXNzKSwgLi4ucmVzdF0uam9pbignOjonKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHhEYXRhLmlucHV0T2JqZWN0cyAmJiB0eERhdGEuaW5wdXRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaW5wdXRPYmplY3RzKHR4RGF0YS5pbnB1dE9iamVjdHMpO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQocmVjaXBpZW50czogUmVjaXBpZW50W10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlUmVjaXBpZW50cyhyZWNpcGllbnRzKTtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gcmVjaXBpZW50cztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlucHV0T2JqZWN0cyhpbnB1dE9iamVjdDogU3VpT2JqZWN0UmVmW10pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlSW5wdXRPYmplY3RSZWZzKGlucHV0T2JqZWN0KTtcbiAgICB0aGlzLl9pbnB1dE9iamVjdHMgPSBpbnB1dE9iamVjdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFtb3VudCBvZiB0b2tlbiBmdW5kcyBoZWxkIGluIHRoZSBTdWkgYWRkcmVzcyBiYWxhbmNlIHN5c3RlbSBmb3IgdGhpcyBzZW5kZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgLSBhbW91bnQgaW4gYmFzZSB1bml0cyBoZWxkIGluIGFkZHJlc3MgYmFsYW5jZVxuICAgKi9cbiAgZnVuZHNJbkFkZHJlc3NCYWxhbmNlKGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlID0gbmV3IEJpZ051bWJlcihhbW91bnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbGwgZmllbGRzIGFyZSBkZWZpbmVkIGNvcnJlY3RseVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk6IHZvaWQge1xuICAgIGFzc2VydCh0aGlzLl90eXBlLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0eXBlIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fc2VuZGVyLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzZW5kZXIgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydChcbiAgICAgIHRoaXMuX3JlY2lwaWVudHMgJiYgdGhpcy5fcmVjaXBpZW50cy5sZW5ndGggPiAwLFxuICAgICAgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignYXQgbGVhc3Qgb25lIHJlY2lwaWVudCBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKVxuICAgICk7XG4gICAgYXNzZXJ0KHRoaXMuX2dhc0RhdGEsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2dhc0RhdGEgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIHRoaXMudmFsaWRhdGVHYXNEYXRhKHRoaXMuX2dhc0RhdGEpO1xuXG4gICAgLy8gTXVzdCBoYXZlIGF0IGxlYXN0IGNvaW4gb2JqZWN0cyBPUiBhZGRyZXNzIGJhbGFuY2VcbiAgICBhc3NlcnQoXG4gICAgICAodGhpcy5faW5wdXRPYmplY3RzICYmIHRoaXMuX2lucHV0T2JqZWN0cy5sZW5ndGggPiAwKSB8fCB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UuZ3QoMCksXG4gICAgICBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdpbnB1dCBvYmplY3RzIG9yIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZSByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKVxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lucHV0T2JqZWN0cyAmJiB0aGlzLl9pbnB1dE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWxpZGF0ZUlucHV0T2JqZWN0UmVmcyh0aGlzLl9pbnB1dE9iamVjdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZXMgdGhlIGluZGl2aWR1YWwgb2JqZWN0IHJlZnMgKGRvZXMgbm90IHJlcXVpcmUgbm9uLWVtcHR5IGFycmF5KS4gKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUlucHV0T2JqZWN0UmVmcyhpbnB1dE9iamVjdHM6IFN1aU9iamVjdFJlZltdKTogdm9pZCB7XG4gICAgaWYgKGlucHV0T2JqZWN0cykge1xuICAgICAgaW5wdXRPYmplY3RzLmZvckVhY2goKGlucHV0T2JqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVTdWlPYmplY3RSZWYoaW5wdXRPYmplY3QsICdpbnB1dCBvYmplY3QnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBTdWlUcmFuc2FjdGlvbi5cbiAgICpcbiAgICogVHdvIGJ1aWxkIHBhdGhzOlxuICAgKlxuICAgKiBQYXRoIEEg4oCUIGNvaW4gb2JqZWN0cyBvbmx5IChmdW5kc0luQWRkcmVzc0JhbGFuY2UgPSAwKTpcbiAgICogICBNZXJnZUNvaW5zKGlucHV0T2JqZWN0WzBdLCBbaW5wdXRPYmplY3RbMS4uXV0pIOKGkiBTcGxpdENvaW5zIOKGkiBUcmFuc2Zlck9iamVjdHNcbiAgICpcbiAgICogUGF0aCBCIOKAlCBjb2luIG9iamVjdHMgKyBhZGRyZXNzIGJhbGFuY2UgKG9yIGFkZHJlc3MgYmFsYW5jZSBvbmx5KTpcbiAgICogICBNb3ZlQ2FsbCgweDI6OmNvaW46OnJlZGVlbV9mdW5kcywgW3dpdGhkcmF3YWwoYW1vdW50LCBjb2luVHlwZSldKSDihpIgQ29pbjxUPlxuICAgKiAgIE1lcmdlQ29pbnMoaW5wdXRPYmplY3RbMF0gfCBhZGRyQ29pbiwgW3Jlc3QuLi5dKSDihpIgU3BsaXRDb2lucyDihpIgVHJhbnNmZXJPYmplY3RzXG4gICAqXG4gICAqICAgRXhjZXB0aW9uIEEg4oCUIGFkZHItYmFsIG9ubHksIGZ1bGwgYW1vdW50IChmdW5kc0luQWRkcmVzc0JhbGFuY2UgPT09IHN1bShyZWNpcGllbnQgYW1vdW50cykpOlxuICAgKiAgIE1vdmVDYWxsKDB4Mjo6Y29pbjo6cmVkZWVtX2Z1bmRzLCBbd2l0aGRyYXdhbChhbW91bnQsIGNvaW5UeXBlKV0pIOKGkiBDb2luPFQ+XG4gICAqICAgU3BsaXRDb2lucyhhZGRyQ29pbiwgW2Ftb3VudDBdKSDihpIgVHJhbnNmZXJPYmplY3RzKHNwbGl0MCwgYWRkcjApICAgIyByZWNpcGllbnRzIDAuLk4tMlxuICAgKiAgIC4uLlxuICAgKiAgIFRyYW5zZmVyT2JqZWN0cyhbYWRkckNvaW5dLCBhZGRyTi0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsYXN0IHJlY2lwaWVudCBkaXJlY3RseVxuICAgKiAgIChBZnRlciBOLTEgc3BsaXRzIGFkZHJDb2luLmJhbGFuY2UgPT09IHJlY2lwaWVudHNbTi0xXS5hbW91bnQgZXhhY3RseSwgc28gaXQgY2FuIGJlXG4gICAqICAgdHJhbnNmZXJyZWQgZGlyZWN0bHkuIFNwbGl0Q29pbnMgb24gdGhlIGxhc3QgcmVjaXBpZW50IHdvdWxkIGxlYXZlIGEgemVyby1iYWxhbmNlIENvaW48VD5cbiAgICogICB1bnVzZWQsIHdoaWNoIGNhdXNlcyBVbnVzZWRWYWx1ZVdpdGhvdXREcm9wIHNpbmNlIENvaW48VD4gaGFzIG5vIGRyb3AgYWJpbGl0eS4pXG4gICAqXG4gICAqICAgRXhjZXB0aW9uIEIg4oCUIGFkZHItYmFsIG9ubHksIHBhcnRpYWwgYW1vdW50IChmdW5kc0luQWRkcmVzc0JhbGFuY2UgPiBzdW0ocmVjaXBpZW50IGFtb3VudHMpKTpcbiAgICogICBNb3ZlQ2FsbCgweDI6OmNvaW46OnJlZGVlbV9mdW5kcywgW3dpdGhkcmF3YWwoYW1vdW50LCBjb2luVHlwZSldKSDihpIgQ29pbjxUPlxuICAgKiAgIFNwbGl0Q29pbnMoYWRkckNvaW4sIFthbW91bnQwXSkg4oaSIFRyYW5zZmVyT2JqZWN0cyhzcGxpdDAsIGFkZHIwKSAgICMgYWxsIHJlY2lwaWVudHNcbiAgICogICAuLi5cbiAgICogICBUcmFuc2Zlck9iamVjdHMoW2FkZHJDb2luXSwgc2VuZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmV0dXJuIGNoYW5nZSB0byBzZW5kZXJcbiAgICogICAoYWRkckNvaW4gc3RpbGwgaG9sZHMgdGhlIHVuc3BlbnQgcmVtYWluZGVyOyB0cmFuc2ZlcnJpbmcgaXQgYmFjayB0byB0aGUgc2VuZGVyIGNvbnN1bWVzXG4gICAqICAgdGhlIGNvbW1hbmQgcmVzdWx0LCBhdm9pZGluZyBVbnVzZWRWYWx1ZVdpdGhvdXREcm9wLiBNaXJyb3JzIHRoZSBuYXRpdmUgU1VJIFRyYW5zZmVyQnVpbGRlclxuICAgKiAgIGNoYW5nZS1yZXR1cm4gcGF0aC4gVW5saWtlIG5hdGl2ZSBTVUksIE1lcmdlQ29pbnMoZ2FzLCBbYWRkckNvaW5dKSBpcyBub3QgcG9zc2libGUgaGVyZVxuICAgKiAgIGJlY2F1c2UgZ2FzIGlzIENvaW48U1VJPiBhbmQgYWRkckNvaW4gaXMgQ29pbjxUPiDigJQgaW5jb21wYXRpYmxlIHR5cGVzLilcbiAgICpcbiAgICogQHJldHVybiB7U3VpVHJhbnNhY3Rpb248VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPn1cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkU3VpVHJhbnNhY3Rpb24oKTogU3VpVHJhbnNhY3Rpb248VG9rZW5UcmFuc2ZlclByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk7XG5cbiAgICBjb25zdCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIgPSBuZXcgUHJvZ3JhbW1pbmdUcmFuc2FjdGlvbkJsb2NrQnVpbGRlcigpO1xuXG4gICAgY29uc3QgaW5wdXRPYmplY3RzOiBUcmFuc2FjdGlvbkFyZ3VtZW50W10gPSAodGhpcy5faW5wdXRPYmplY3RzID8/IFtdKS5tYXAoKG9iamVjdCkgPT5cbiAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3QoSW5wdXRzLk9iamVjdFJlZihvYmplY3QpKVxuICAgICk7XG5cbiAgICAvLyBJZiBhZGRyZXNzIGJhbGFuY2UgaXMgYXZhaWxhYmxlLCB3aXRoZHJhdyBpdCBhcyBDb2luPFQ+IGFuZCBhZGQgdG8gdGhlIHBvb2xcbiAgICBpZiAodGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApKSB7XG4gICAgICBjb25zdCBjb2luVHlwZSA9IHRoaXMudG9rZW5Db2luVHlwZTtcbiAgICAgIGNvbnN0IFthZGRyQ29pbl0gPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIubW92ZUNhbGwoe1xuICAgICAgICB0YXJnZXQ6ICcweDI6OmNvaW46OnJlZGVlbV9mdW5kcycsXG4gICAgICAgIHR5cGVBcmd1bWVudHM6IFtjb2luVHlwZV0sXG4gICAgICAgIGFyZ3VtZW50czogW1xuICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci53aXRoZHJhd2FsKHtcbiAgICAgICAgICAgIGFtb3VudDogQmlnSW50KHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS50b0ZpeGVkKCkpLFxuICAgICAgICAgICAgdHlwZTogY29pblR5cGUsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICAgIGlucHV0T2JqZWN0cy5wdXNoKGFkZHJDb2luKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZWRPYmplY3QgPSBpbnB1dE9iamVjdHMuc2hpZnQoKSBhcyBUcmFuc2FjdGlvbkFyZ3VtZW50O1xuICAgIGlmIChpbnB1dE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLm1lcmdlQ29pbnMobWVyZ2VkT2JqZWN0LCBpbnB1dE9iamVjdHMpO1xuICAgIH1cblxuICAgIC8vIGFkZHJDb2luICh0aGUgQ29pbjxUPiByZXR1cm5lZCBieSByZWRlZW1fZnVuZHMpIGlzIGEgY29tbWFuZCByZXN1bHQgYW5kIG11c3QgYmUgZXhwbGljaXRseVxuICAgIC8vIGNvbnN1bWVkIOKAlCBDb2luPFQ+IGhhcyBubyBgZHJvcGAgYWJpbGl0eSwgc28gbGVhdmluZyBpdCB1bnVzZWQgY2F1c2VzIFVudXNlZFZhbHVlV2l0aG91dERyb3AuXG4gICAgLy8gVGhpcyBvbmx5IGFwcGxpZXMgd2hlbiB0aGVyZSBhcmUgbm8gY29pbiBvYmplY3RzIChhZGRyLWJhbCBvbmx5KTsgaW4gdGhlIGh5YnJpZCBjYXNlIGFkZHJDb2luXG4gICAgLy8gaXMgY29uc3VtZWQgdXBmcm9udCBieSB0aGUgTWVyZ2VDb2lucyBhYm92ZS5cbiAgICBjb25zdCByZWNpcGllbnRUb3RhbCA9IHRoaXMuX3JlY2lwaWVudHMucmVkdWNlKChzdW0sIHIpID0+IHN1bS5wbHVzKHIuYW1vdW50KSwgbmV3IEJpZ051bWJlcigwKSk7XG4gICAgY29uc3QgaXNBZGRyQmFsT25seSA9ICh0aGlzLl9pbnB1dE9iamVjdHMgPz8gW10pLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UuZ3QoMCk7XG5cbiAgICBpZiAoaXNBZGRyQmFsT25seSAmJiB0aGlzLl9mdW5kc0luQWRkcmVzc0JhbGFuY2UuZXEocmVjaXBpZW50VG90YWwpKSB7XG4gICAgICAvLyBFeGNlcHRpb24gQSDigJQgZnVsbCBhbW91bnQ6IHNwbGl0IGZvciBmaXJzdCBOLTEgcmVjaXBpZW50cywgdHJhbnNmZXIgYWRkckNvaW4gZGlyZWN0bHlcbiAgICAgIC8vIHRvIHRoZSBsYXN0LiBBZnRlciBOLTEgc3BsaXRzIGFkZHJDb2luLmJhbGFuY2UgPT09IHJlY2lwaWVudHNbTi0xXS5hbW91bnQgZXhhY3RseS5cbiAgICAgIHRoaXMuX3JlY2lwaWVudHMuc2xpY2UoMCwgLTEpLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICBjb25zdCBzcGxpdE9iamVjdCA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5zcGxpdENvaW5zKG1lcmdlZE9iamVjdCwgW1xuICAgICAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci5wdXJlKEJpZ0ludChyZWNpcGllbnQuYW1vdW50KSksXG4gICAgICAgIF0pO1xuICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIudHJhbnNmZXJPYmplY3RzKFtzcGxpdE9iamVjdF0sIHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3QocmVjaXBpZW50LmFkZHJlc3MpKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGFzdFJlY2lwaWVudCA9IHRoaXMuX3JlY2lwaWVudHNbdGhpcy5fcmVjaXBpZW50cy5sZW5ndGggLSAxXTtcbiAgICAgIHByb2dyYW1tYWJsZVR4QnVpbGRlci50cmFuc2Zlck9iamVjdHMoW21lcmdlZE9iamVjdF0sIHByb2dyYW1tYWJsZVR4QnVpbGRlci5vYmplY3QobGFzdFJlY2lwaWVudC5hZGRyZXNzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YW5kYXJkIHBhdGg6IHNwbGl0IGFuZCB0cmFuc2ZlciBmb3IgZXZlcnkgcmVjaXBpZW50LlxuICAgICAgdGhpcy5fcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXRPYmplY3QgPSBwcm9ncmFtbWFibGVUeEJ1aWxkZXIuc3BsaXRDb2lucyhtZXJnZWRPYmplY3QsIFtcbiAgICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIucHVyZShCaWdJbnQocmVjaXBpZW50LmFtb3VudCkpLFxuICAgICAgICBdKTtcbiAgICAgICAgcHJvZ3JhbW1hYmxlVHhCdWlsZGVyLnRyYW5zZmVyT2JqZWN0cyhbc3BsaXRPYmplY3RdLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHJlY2lwaWVudC5hZGRyZXNzKSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChpc0FkZHJCYWxPbmx5ICYmIHRoaXMuX2Z1bmRzSW5BZGRyZXNzQmFsYW5jZS5ndChyZWNpcGllbnRUb3RhbCkpIHtcbiAgICAgICAgLy8gRXhjZXB0aW9uIEIg4oCUIHBhcnRpYWwgYW1vdW50OiBhZGRyQ29pbiBzdGlsbCBob2xkcyB0aGUgdW5zcGVudCByZW1haW5kZXIuXG4gICAgICAgIC8vIFJldHVybiBpdCB0byB0aGUgc2VuZGVyIHRvIGNvbnN1bWUgdGhlIGNvbW1hbmQgcmVzdWx0IChNZXJnZUNvaW5zIGludG8gZ2FzIGlzIG5vdFxuICAgICAgICAvLyBwb3NzaWJsZSBoZXJlIOKAlCBnYXMgaXMgQ29pbjxTVUk+IGJ1dCBhZGRyQ29pbiBpcyBDb2luPFQ+LCBpbmNvbXBhdGlibGUgdHlwZXMpLlxuICAgICAgICBwcm9ncmFtbWFibGVUeEJ1aWxkZXIudHJhbnNmZXJPYmplY3RzKFttZXJnZWRPYmplY3RdLCBwcm9ncmFtbWFibGVUeEJ1aWxkZXIub2JqZWN0KHRoaXMuX3NlbmRlcikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHR4RGF0YSA9IHByb2dyYW1tYWJsZVR4QnVpbGRlci5ibG9ja0RhdGE7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB7XG4gICAgICAgIGlucHV0czogWy4uLnR4RGF0YS5pbnB1dHNdLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFsuLi50eERhdGEudHJhbnNhY3Rpb25zXSxcbiAgICAgIH0sXG4gICAgICBnYXNEYXRhOiB7XG4gICAgICAgIC4uLnRoaXMuX2dhc0RhdGEsXG4gICAgICB9LFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5fZXhwaXJhdGlvbixcbiAgICAgIGZ1bmRzSW5BZGRyZXNzQmFsYW5jZTogdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLmd0KDApID8gdGhpcy5fZnVuZHNJbkFkZHJlc3NCYWxhbmNlLnRvRml4ZWQoKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAEf,SAAS,IAAI,aAAa,EAC1B,SAAS,EACT,eAAe,IAAI,oBAAoB,EACxC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,0BAA0B,EAAE,cAAc,EAAsB,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,OAAO,EAGP,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,8BAAsB,WAAW,CAAC,CAAC,CAAE,SAAQ,eAAe;IAC1D,SAAS,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;IAChC,OAAO,CAAC,cAAc,CAAa;IACnC,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC;IACxC,OAAO,CAAC,sBAAsB,CAAa;IAE3C,SAAS,aAAa,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAIvD,IAAI,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC,CAEtC;IAED,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAI9C,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAKf;IAED,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAMvE,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,IAAI,aAAa,IAAI,UAAU,CAE9B;IAED,IAAI,qBAAqB,IAAI,UAAU,CAEtC;IAED,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IASnE,wBAAwB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAS3E,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B;;;;OAIG;IAEH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAY3B;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAiBrC,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,QAAQ,CAAC,MAAM,IAAI,MAAM;IAEzB;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,oBAAoB,GAAG,IAAI;IAI5D;;OAEG;IACH,QAAQ,CAAC,SAAS,IAAI,MAAM;IAE5B;;OAEG;IACH,QAAQ,CAAC,oBAAoB,IAAI,IAAI;IAErC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAEzD,YAAY,IAAI,UAAU;IAM1B,kBAAkB;IAClB,IAAI,eAAe,IAAI,MAAM,CAI5B;IAED,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe;IAIvB,SAAS,IAAI,MAAM;IAMnB,MAAM,CAAC,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC,0BAA0B,CAAC;IA6BlG,OAAO,CAAC,MAAM,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -242,6 +242,21 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
242
242
|
})) {
|
|
243
243
|
return iface_1.SuiTransactionType.Transfer;
|
|
244
244
|
}
|
|
245
|
+
// Full-amount token addr-bal send: MoveCall(redeem_funds, TOKEN_TYPE) + TransferObjects
|
|
246
|
+
// with no SplitCoins. Both commands return Transfer from getSuiTransactionType, so the
|
|
247
|
+
// check below wouldn't fire. Detect by finding redeem_funds with a non-native type arg.
|
|
248
|
+
if (transactions.some((tx) => {
|
|
249
|
+
if (tx.kind !== 'MoveCall')
|
|
250
|
+
return false;
|
|
251
|
+
const moveCall = tx;
|
|
252
|
+
if (!moveCall.target?.endsWith(iface_1.MethodNames.RedeemFunds))
|
|
253
|
+
return false;
|
|
254
|
+
const typeArg = moveCall.typeArguments?.[0] ?? '';
|
|
255
|
+
const [addr = '', mod = '', name = ''] = typeArg.split('::');
|
|
256
|
+
return !((0, types_1.normalizeSuiAddress)(addr) === suiNativeAddress && mod === 'sui' && name === 'SUI');
|
|
257
|
+
})) {
|
|
258
|
+
return iface_1.SuiTransactionType.TokenTransfer;
|
|
259
|
+
}
|
|
245
260
|
if (transactions.some((tx) => utils_1.default.getSuiTransactionType(tx) === iface_1.SuiTransactionType.TokenTransfer)) {
|
|
246
261
|
return iface_1.SuiTransactionType.TokenTransfer;
|
|
247
262
|
}
|
|
@@ -302,4 +317,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
302
317
|
}
|
|
303
318
|
}
|
|
304
319
|
exports.Transaction = Transaction;
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQU95QjtBQUN6QixtQ0FBOEc7QUFFOUcsaURBQTRGO0FBQzVGLDZDQU0yQjtBQUMzQiwyQ0FBcUQ7QUFDckQsbUNBQWdDO0FBQ2hDLHFDQUE2QztBQUM3QyxnREFBd0I7QUFFeEIsbUZBQWtIO0FBQ2xILGlEQUFzRjtBQUN0Riw2REFBcUM7QUFDckMsd0RBQThEO0FBRTlELE1BQXNCLFdBQWUsU0FBUSwwQkFBZTtJQU8xRCxZQUFzQixXQUFpQztRQUNyRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQXFCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxFQUFFO1FBQ0osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQWEsRUFBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBd0IsRUFBRSxTQUFpQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUs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QUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dDQUN2RCxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdkQsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQXpURCxrQ0F5VEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblR5cGUgYXMgQml0R29UcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBNZXRob2ROYW1lcywgU3VpUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24sIFN1aVRyYW5zYWN0aW9uLCBTdWlUcmFuc2FjdGlvblR5cGUsIFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB1dGlscywgeyBBcHBJZCwgSW50ZW50LCBJbnRlbnRTY29wZSwgSW50ZW50VmVyc2lvbiwgaXNJbW1Pck93bmVkT2JqIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBHYXNEYXRhLFxuICBub3JtYWxpemVTdWlBZGRyZXNzLFxuICBub3JtYWxpemVTdWlPYmplY3RJZCxcbiAgU3VpT2JqZWN0UmVmLFxuICBUcmFuc2FjdGlvbkV4cGlyYXRpb24sXG59IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB7IFNJR05BVFVSRV9TQ0hFTUVfQllURVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgZnJvbUI2NCwgdG9CNjQgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVFJBTlNBQ1RJT05fREFUQV9NQVhfU0laRSwgVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyIH0gZnJvbSAnLi9teXN0ZW5sYWIvYnVpbGRlci9UcmFuc2FjdGlvbkRhdGFCbG9jayc7XG5pbXBvcnQgeyBidWlsZGVyLCBNZXJnZUNvaW5zVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vbXlzdGVubGFiL2J1aWxkZXInO1xuaW1wb3J0IGJsYWtlMmIgZnJvbSAnQGJpdGdvL2JsYWtlMmInO1xuaW1wb3J0IHsgaGFzaFR5cGVkRGF0YSB9IGZyb20gJy4vbXlzdGVubGFiL2NyeXB0b2dyYXBoeS9oYXNoJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uPFQ+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9zdWlUcmFuc2FjdGlvbjogU3VpVHJhbnNhY3Rpb248VD47XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlOiBTaWduYXR1cmU7XG4gIHByaXZhdGUgX3NlcmlhbGl6ZWRTaWc6IFVpbnQ4QXJyYXk7XG4gIHByb3RlY3RlZCBfZmVlUGF5ZXJTaWduYXR1cmU6IFNpZ25hdHVyZTtcbiAgcHJpdmF0ZSBfc2VyaWFsaXplZEZlZVBheWVyU2lnOiBVaW50OEFycmF5O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc3VpVHJhbnNhY3Rpb24oKTogU3VpVHJhbnNhY3Rpb248VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldFN1aVRyYW5zYWN0aW9uKHR4OiBTdWlUcmFuc2FjdGlvbjxUPik6IHZvaWQge1xuICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKiovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGFCeXRlcyA9IHRoaXMuZ2V0RGF0YUJ5dGVzKCk7XG4gICAgY29uc3QgaGFzaCA9IGhhc2hUeXBlZERhdGEoJ1RyYW5zYWN0aW9uRGF0YScsIGRhdGFCeXRlcyk7XG4gICAgdGhpcy5faWQgPSBiczU4LmVuY29kZShoYXNoKTtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gICAgdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGFkZEZlZVBheWVyU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdGhpcy5fZmVlUGF5ZXJTaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gICAgdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBzdWlTaWduYXR1cmUoKTogU2lnbmF0dXJlIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmF0dXJlO1xuICB9XG5cbiAgZ2V0IHNlcmlhbGl6ZWRTaWcoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZWRTaWc7XG4gIH1cblxuICBnZXQgc2VyaWFsaXplZEZlZVBheWVyU2lnKCk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVkRmVlUGF5ZXJTaWc7XG4gIH1cblxuICBzZXRTZXJpYWxpemVkU2lnKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdWJLZXkgPSBCdWZmZXIuZnJvbShwdWJsaWNLZXkucHViLCAnaGV4Jyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZF9zaWcgPSBuZXcgVWludDhBcnJheSgxICsgc2lnbmF0dXJlLmxlbmd0aCArIHB1YktleS5sZW5ndGgpO1xuICAgIHNlcmlhbGl6ZWRfc2lnLnNldChTSUdOQVRVUkVfU0NIRU1FX0JZVEVTKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoc2lnbmF0dXJlLCAxKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQocHViS2V5LCAxICsgc2lnbmF0dXJlLmxlbmd0aCk7XG4gICAgdGhpcy5fc2VyaWFsaXplZFNpZyA9IHNlcmlhbGl6ZWRfc2lnO1xuICB9XG5cbiAgc2V0U2VyaWFsaXplZEZlZVBheWVyU2lnKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdWJLZXkgPSBCdWZmZXIuZnJvbShwdWJsaWNLZXkucHViLCAnaGV4Jyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZF9zaWcgPSBuZXcgVWludDhBcnJheSgxICsgc2lnbmF0dXJlLmxlbmd0aCArIHB1YktleS5sZW5ndGgpO1xuICAgIHNlcmlhbGl6ZWRfc2lnLnNldChTSUdOQVRVUkVfU0NIRU1FX0JZVEVTKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoc2lnbmF0dXJlLCAxKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQocHViS2V5LCAxICsgc2lnbmF0dXJlLmxlbmd0aCk7XG4gICAgdGhpcy5fc2VyaWFsaXplZEZlZVBheWVyU2lnID0gc2VyaWFsaXplZF9zaWc7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBzaWduZXIga2V5XG4gICAqL1xuXG4gIHNpZ24oc2lnbmVyOiBLZXlQYWlyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbiB0byBzaWduJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZW50TWVzc2FnZSA9IHRoaXMuc2lnbmFibGVQYXlsb2FkO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduTWVzc2FnZWluVWludDhBcnJheShpbnRlbnRNZXNzYWdlKTtcblxuICAgIHRoaXMuc2V0U2VyaWFsaXplZFNpZyh7IHB1Yjogc2lnbmVyLmdldEtleXMoKS5wdWIgfSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlKSk7XG4gICAgdGhpcy5hZGRTaWduYXR1cmUoeyBwdWI6IHNpZ25lci5nZXRLZXlzKCkucHViIH0sIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gdHJhbnNhY3Rpb24gYXMgdGhlIGdhcyBvd25lciAoZmVlIHBheWVyKS5cbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBvd25lcktleSAtIEtleSBmb3IgZ2FzIG93bmVyLlxuICAgKi9cbiAgc2lnbkFzRmVlUGF5ZXIoc2lnbmVyOiBLZXlQYWlyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbiB0byBzaWduJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZW50TWVzc2FnZSA9IHRoaXMuc2lnbmFibGVQYXlsb2FkO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduTWVzc2FnZWluVWludDhBcnJheShpbnRlbnRNZXNzYWdlKTtcblxuICAgIHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlID0ge1xuICAgICAgcHVibGljS2V5OiB7IHB1Yjogc2lnbmVyLmdldEtleXMoKS5wdWIgfSxcbiAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20oc2lnbmF0dXJlKSxcbiAgICB9O1xuXG4gICAgLy8gU2V0IHNlcmlhbGl6ZWQgc2lnbmF0dXJlIGZvciBmZWUgcGF5ZXJcbiAgICB0aGlzLnNldFNlcmlhbGl6ZWRGZWVQYXllclNpZyh7IHB1Yjogc2lnbmVyLmdldEtleXMoKS5wdWIgfSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFic3RyYWN0IHRvSnNvbigpOiBUeERhdGE7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBCaXRHb1RyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogIGdldCB0aGUgY29ycmVjdCB0eERhdGEgd2l0aCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqL1xuICBhYnN0cmFjdCBnZXRUeERhdGEoKTogVHhEYXRhO1xuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIGFic3RyYWN0IGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgYWJzdHJhY3QgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGdldERhdGFCeXRlcygpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCB0eERhdGEgPSB0aGlzLmdldFR4RGF0YSgpO1xuICAgIGNvbnN0IHR4U2VyID0gYnVpbGRlci5zZXIoJ1RyYW5zYWN0aW9uRGF0YScsIHsgVjE6IHR4RGF0YSB9LCB7IG1heFNpemU6IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUgfSk7XG4gICAgcmV0dXJuIHR4U2VyLnRvQnl0ZXMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgY29uc3QgZGF0YUJ5dGVzID0gdGhpcy5nZXREYXRhQnl0ZXMoKTtcbiAgICBjb25zdCBpbnRlbnRNZXNzYWdlID0gdGhpcy5tZXNzYWdlV2l0aEludGVudChJbnRlbnRTY29wZS5UcmFuc2FjdGlvbkRhdGEsIGRhdGFCeXRlcyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJsYWtlMmIoMzIpLnVwZGF0ZShpbnRlbnRNZXNzYWdlKS5kaWdlc3QoJ2JpbmFyeScpKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVzc2FnZVdpdGhJbnRlbnQoc2NvcGU6IEludGVudFNjb3BlLCBtZXNzYWdlOiBVaW50OEFycmF5KSB7XG4gICAgY29uc3QgaW50ZW50ID0gdGhpcy5pbnRlbnRXaXRoU2NvcGUoc2NvcGUpO1xuICAgIGNvbnN0IGludGVudE1lc3NhZ2UgPSBuZXcgVWludDhBcnJheShpbnRlbnQubGVuZ3RoICsgbWVzc2FnZS5sZW5ndGgpO1xuICAgIGludGVudE1lc3NhZ2Uuc2V0KGludGVudCk7XG4gICAgaW50ZW50TWVzc2FnZS5zZXQobWVzc2FnZSwgaW50ZW50Lmxlbmd0aCk7XG4gICAgcmV0dXJuIGludGVudE1lc3NhZ2U7XG4gIH1cblxuICBwcml2YXRlIGludGVudFdpdGhTY29wZShzY29wZTogSW50ZW50U2NvcGUpOiBJbnRlbnQge1xuICAgIHJldHVybiBbc2NvcGUsIEludGVudFZlcnNpb24uVjAsIEFwcElkLlN1aV07XG4gIH1cblxuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhQnl0ZXMgPSB0aGlzLmdldERhdGFCeXRlcygpO1xuICAgIHRoaXMuX2lkID0gYnM1OC5lbmNvZGUoaGFzaFR5cGVkRGF0YSgnVHJhbnNhY3Rpb25EYXRhJywgZGF0YUJ5dGVzKSk7XG4gICAgcmV0dXJuIHRvQjY0KGRhdGFCeXRlcyk7XG4gIH1cblxuICBzdGF0aWMgZGVzZXJpYWxpemVTdWlUcmFuc2FjdGlvbihzZXJpYWxpemVkVHg6IHN0cmluZyk6IFN1aVRyYW5zYWN0aW9uPFN1aVByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgZGF0YSA9IGZyb21CNjQoc2VyaWFsaXplZFR4KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkJsb2NrID0gVHJhbnNhY3Rpb25CbG9ja0RhdGFCdWlsZGVyLmZyb21CeXRlcyhkYXRhKTtcbiAgICBjb25zdCBpbnB1dHMgPSB0cmFuc2FjdGlvbkJsb2NrLmlucHV0cy5tYXAoKHR4SW5wdXQpID0+IHR4SW5wdXQudmFsdWUpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IHRyYW5zYWN0aW9uQmxvY2sudHJhbnNhY3Rpb25zO1xuICAgIGNvbnN0IHR4VHlwZSA9IHRoaXMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0cmFuc2FjdGlvbkJsb2NrLmdldERpZ2VzdCgpLFxuICAgICAgdHlwZTogdHhUeXBlLFxuICAgICAgc2VuZGVyOiBub3JtYWxpemVTdWlBZGRyZXNzKHRyYW5zYWN0aW9uQmxvY2suc2VuZGVyISksXG4gICAgICB0eDoge1xuICAgICAgICBpbnB1dHM6IGlucHV0cyxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiB0cmFuc2FjdGlvbnMsXG4gICAgICB9LFxuICAgICAgZ2FzRGF0YToge1xuICAgICAgICBwYXltZW50OiB0aGlzLm5vcm1hbGl6ZUNvaW5zKHRyYW5zYWN0aW9uQmxvY2suZ2FzQ29uZmlnLnBheW1lbnQhKSxcbiAgICAgICAgb3duZXI6IG5vcm1hbGl6ZVN1aUFkZHJlc3ModHJhbnNhY3Rpb25CbG9jay5nYXNDb25maWcub3duZXIhKSxcbiAgICAgICAgcHJpY2U6IE51bWJlcih0cmFuc2FjdGlvbkJsb2NrLmdhc0NvbmZpZy5wcmljZSBhcyBzdHJpbmcpLFxuICAgICAgICBidWRnZXQ6IE51bWJlcih0cmFuc2FjdGlvbkJsb2NrLmdhc0NvbmZpZy5idWRnZXQgYXMgc3RyaW5nKSxcbiAgICAgIH0sXG4gICAgICAvLyBOb3JtYWxpemUgTm9uZSBleHBpcmF0aW9uICh0aGUgQkNTIGRlZmF1bHQpIHRvIHVuZGVmaW5lZCBzbyB0aGF0IHByZS1idWlsZFxuICAgICAgLy8gYW5kIHBvc3QtZGVzZXJpYWxpemF0aW9uIFN1aVRyYW5zYWN0aW9uIG9iamVjdHMgY29tcGFyZSBlcXVhbC5cbiAgICAgIGV4cGlyYXRpb246XG4gICAgICAgIHRyYW5zYWN0aW9uQmxvY2suZXhwaXJhdGlvbiAmJiAhKCdOb25lJyBpbiB0cmFuc2FjdGlvbkJsb2NrLmV4cGlyYXRpb24pXG4gICAgICAgICAgPyAodHJhbnNhY3Rpb25CbG9jay5leHBpcmF0aW9uIGFzIFRyYW5zYWN0aW9uRXhwaXJhdGlvbilcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25UeXBlW10pOiBTdWlUcmFuc2FjdGlvblR5cGUge1xuICAgIC8vIHRyaWNreSB0byBkZXRlcm1pbmUgY3VzdG9tIHR4IHB1cmVseSBmcm9tIGEgc2VyaWFsaXplZCB0eCwgd2UgY2FuIHJlbHkgb24gZm9sbG93aW5nIGxvZ2ljXG4gICAgaWYgKHRyYW5zYWN0aW9ucy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIHV0aWxzLmdldFN1aVRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbnNbMF0pO1xuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb25zLnNvbWUoKHR4KSA9PiB1dGlscy5nZXRTdWlUcmFuc2FjdGlvblR5cGUodHgpID09PSBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzU3Rha2VXaXRoUG9vbCkpIHtcbiAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzU3Rha2VXaXRoUG9vbDtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9ucy5zb21lKCh0eCkgPT4gdXRpbHMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHR4KSA9PT0gU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1JlcXVlc3RXaXRoZHJhd1N0YWtlKSkge1xuICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5XYWxydXNSZXF1ZXN0V2l0aGRyYXdTdGFrZTtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9ucy5zb21lKCh0eCkgPT4gdXRpbHMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHR4KSA9PT0gU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1dpdGhkcmF3U3Rha2UpKSB7XG4gICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1dpdGhkcmF3U3Rha2U7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbnMuc29tZSgodHgpID0+IHV0aWxzLmdldFN1aVRyYW5zYWN0aW9uVHlwZSh0eCkgPT09IFN1aVRyYW5zYWN0aW9uVHlwZS5BZGRTdGFrZSkpIHtcbiAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuQWRkU3Rha2U7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbnMuc29tZSgodHgpID0+IHV0aWxzLmdldFN1aVRyYW5zYWN0aW9uVHlwZSh0eCkgPT09IFN1aVRyYW5zYWN0aW9uVHlwZS5XaXRoZHJhd1N0YWtlKSkge1xuICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5XaXRoZHJhd1N0YWtlO1xuICAgIH1cbiAgICAvLyBTcG9uc29yZWQgVHJhbnNmZXIgd2l0aCBmdW5kc0luQWRkcmVzc0JhbGFuY2UgdXNlcyBhIHJlZGVlbV9mdW5kcyBNb3ZlQ2FsbCBhbG9uZ3NpZGVcbiAgICAvLyBNZXJnZUNvaW5zL1NwbGl0Q29pbnMgb24gbm9uLUdhc0NvaW4gb2JqZWN0cywgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlIG1pc2NsYXNzaWZpZWRcbiAgICAvLyBhcyBUb2tlblRyYW5zZmVyLiBEaXN0aW5ndWlzaCBmcm9tIFRva2VuVHJhbnNmZXIrZnVuZHNJbkFkZHJlc3NCYWxhbmNlIGJ5IGNoZWNraW5nXG4gICAgLy8gdGhhdCB0aGUgcmVkZWVtX2Z1bmRzIHR5cGVBcmd1bWVudCBpcyB0aGUgbmF0aXZlIFNVSSBjb2luIHR5cGUgKDB4Mjo6c3VpOjpTVUkpLlxuICAgIGNvbnN0IHN1aU5hdGl2ZUFkZHJlc3MgPSBub3JtYWxpemVTdWlBZGRyZXNzKCcweDInKTtcbiAgICBpZiAoXG4gICAgICB0cmFuc2FjdGlvbnMuc29tZSgodHgpID0+IHtcbiAgICAgICAgaWYgKHR4LmtpbmQgIT09ICdNb3ZlQ2FsbCcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgbW92ZUNhbGwgPSB0eCBhcyBhbnk7XG4gICAgICAgIGlmICghbW92ZUNhbGwudGFyZ2V0Py5lbmRzV2l0aChNZXRob2ROYW1lcy5SZWRlZW1GdW5kcykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgdHlwZUFyZzogc3RyaW5nID0gbW92ZUNhbGwudHlwZUFyZ3VtZW50cz8uWzBdID8/ICcnO1xuICAgICAgICBjb25zdCBbYWRkciA9ICcnLCBtb2QgPSAnJywgbmFtZSA9ICcnXSA9IHR5cGVBcmcuc3BsaXQoJzo6Jyk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVTdWlBZGRyZXNzKGFkZHIpID09PSBzdWlOYXRpdmVBZGRyZXNzICYmIG1vZCA9PT0gJ3N1aScgJiYgbmFtZSA9PT0gJ1NVSSc7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlcjtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9ucy5zb21lKCh0eCkgPT4gdXRpbHMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHR4KSA9PT0gU3VpVHJhbnNhY3Rpb25UeXBlLlRva2VuVHJhbnNmZXIpKSB7XG4gICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLlRva2VuVHJhbnNmZXI7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbnMuZXZlcnkoKHR4KSA9PiB1dGlscy5nZXRTdWlUcmFuc2FjdGlvblR5cGUodHgpID09PSBTdWlUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXIpKSB7XG4gICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyO1xuICAgIH1cblxuICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg7XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVyR2FzRGF0YShrOiBhbnkpOiBHYXNEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudDogW3RoaXMubm9ybWFsaXplU3VpT2JqZWN0UmVmKGsuZ2FzRGF0YS5wYXltZW50KV0sXG4gICAgICBvd25lcjogdXRpbHMubm9ybWFsaXplSGV4SWQoay5nYXNEYXRhLm93bmVyKSxcbiAgICAgIHByaWNlOiBOdW1iZXIoay5nYXNEYXRhLnByaWNlKSxcbiAgICAgIGJ1ZGdldDogTnVtYmVyKGsuZ2FzRGF0YS5idWRnZXQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVDb2lucyhjb2luczogYW55W10pOiBTdWlPYmplY3RSZWZbXSB7XG4gICAgcmV0dXJuIGNvaW5zLm1hcCgoY29pbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplU3VpT2JqZWN0UmVmKGNvaW4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbm9ybWFsaXplU3VpT2JqZWN0UmVmKG9iajogU3VpT2JqZWN0UmVmKTogU3VpT2JqZWN0UmVmIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JqZWN0SWQ6IG5vcm1hbGl6ZVN1aU9iamVjdElkKG9iai5vYmplY3RJZCksXG4gICAgICB2ZXJzaW9uOiBOdW1iZXIob2JqLnZlcnNpb24pLFxuICAgICAgZGlnZXN0OiBvYmouZGlnZXN0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBidWlsZGluZyB0cmFuc2FjdGlvbnMgd2l0aCA+IDI1NSBpbnB1dCBnYXMgcGF5bWVudCBvYmplY3RzLCB3ZSBmaXJzdCB1c2UgTWVyZ2VDb2lucyBUcmFuYXNhY3Rpb25zIHRvIG1lcmdlIHRoZVxuICAgKiBhZGRpdGlvbmFsIGlucHV0cyBpbnRvIHRoZSBnYXMgY29pbiAmIHNsaWNlIHRoZW0gZnJvbSB0aGUgcGF5bWVudCBpbiBnYXNEYXRhLiBXaGVuIGluaXRpYWxpemluZyB0aGUgYnVpbGRlciB1c2luZ1xuICAgKiBkZWNvZGVkIHR4IGRhdGEsIHdlIG5lZWQgdG8gZ2V0IHRoZXNlIGlucHV0cyBmcm9tIE1lcmdlQ29pbnMgJiBhZGQgdGhlbSBiYWNrIHRvIHRoZSBnYXMgcGF5bWVudCB0byBiZSBhYmxlIHRvXG4gICAqIHJlYnVpbGQgZnJvbSBhIHJhdyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbnB1dEdhc1BheW1lbnRPYmplY3RzRnJvbVR4KHR4OiBTdWlQcm9ncmFtbWFibGVUcmFuc2FjdGlvbik6IFN1aU9iamVjdFJlZltdIHtcbiAgICBjb25zdCB0eElucHV0cyA9IHR4LmlucHV0cztcbiAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSB0eC50cmFuc2FjdGlvbnM7XG4gICAgY29uc3QgaW5wdXRHYXNQYXltZW50T2JqZWN0czogU3VpT2JqZWN0UmVmW10gPSBbXTtcblxuICAgIHRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdNZXJnZUNvaW5zJykge1xuICAgICAgICBjb25zdCB7IGRlc3RpbmF0aW9uLCBzb3VyY2VzIH0gPSB0cmFuc2FjdGlvbiBhcyBNZXJnZUNvaW5zVHJhbnNhY3Rpb247XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbi5raW5kID09PSAnR2FzQ29pbicpIHtcbiAgICAgICAgICBzb3VyY2VzLmZvckVhY2goKHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5raW5kID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgICAgIGxldCBpbnB1dCA9IHR4SW5wdXRzW3NvdXJjZS5pbmRleF07XG4gICAgICAgICAgICAgIGlmICgndmFsdWUnIGluIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoJ09iamVjdCcgaW4gaW5wdXQgJiYgaXNJbW1Pck93bmVkT2JqKGlucHV0Lk9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBpbnB1dEdhc1BheW1lbnRPYmplY3RzLnB1c2goaW5wdXQuT2JqZWN0LkltbU9yT3duZWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbnB1dEdhc1BheW1lbnRPYmplY3RzO1xuICB9XG59XG4iXX0=
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQU95QjtBQUN6QixtQ0FBOEc7QUFFOUcsaURBQTRGO0FBQzVGLDZDQU0yQjtBQUMzQiwyQ0FBcUQ7QUFDckQsbUNBQWdDO0FBQ2hDLHFDQUE2QztBQUM3QyxnREFBd0I7QUFFeEIsbUZBQWtIO0FBQ2xILGlEQUFzRjtBQUN0Riw2REFBcUM7QUFDckMsd0RBQThEO0FBRTlELE1BQXNCLFdBQWUsU0FBUSwwQkFBZTtJQU8xRCxZQUFzQixXQUFpQztRQUNyRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQXFCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxFQUFFO1FBQ0osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQWEsRUFBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBd0IsRUFBRSxTQUFpQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUs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biAgQmFzZVRyYW5zYWN0aW9uLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25UeXBlIGFzIEJpdEdvVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgTWV0aG9kTmFtZXMsIFN1aVByb2dyYW1tYWJsZVRyYW5zYWN0aW9uLCBTdWlUcmFuc2FjdGlvbiwgU3VpVHJhbnNhY3Rpb25UeXBlLCBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgdXRpbHMsIHsgQXBwSWQsIEludGVudCwgSW50ZW50U2NvcGUsIEludGVudFZlcnNpb24sIGlzSW1tT3JPd25lZE9iaiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgR2FzRGF0YSxcbiAgbm9ybWFsaXplU3VpQWRkcmVzcyxcbiAgbm9ybWFsaXplU3VpT2JqZWN0SWQsXG4gIFN1aU9iamVjdFJlZixcbiAgVHJhbnNhY3Rpb25FeHBpcmF0aW9uLFxufSBmcm9tICcuL215c3RlbmxhYi90eXBlcyc7XG5pbXBvcnQgeyBTSUdOQVRVUkVfU0NIRU1FX0JZVEVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGZyb21CNjQsIHRvQjY0IH0gZnJvbSAnQG15c3Rlbi9iY3MnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRSQU5TQUNUSU9OX0RBVEFfTUFYX1NJWkUsIFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlciB9IGZyb20gJy4vbXlzdGVubGFiL2J1aWxkZXIvVHJhbnNhY3Rpb25EYXRhQmxvY2snO1xuaW1wb3J0IHsgYnVpbGRlciwgTWVyZ2VDb2luc1RyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCBibGFrZTJiIGZyb20gJ0BiaXRnby9ibGFrZTJiJztcbmltcG9ydCB7IGhhc2hUeXBlZERhdGEgfSBmcm9tICcuL215c3RlbmxhYi9jcnlwdG9ncmFwaHkvaGFzaCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbjxUPiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfc3VpVHJhbnNhY3Rpb246IFN1aVRyYW5zYWN0aW9uPFQ+O1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZTogU2lnbmF0dXJlO1xuICBwcml2YXRlIF9zZXJpYWxpemVkU2lnOiBVaW50OEFycmF5O1xuICBwcm90ZWN0ZWQgX2ZlZVBheWVyU2lnbmF0dXJlOiBTaWduYXR1cmU7XG4gIHByaXZhdGUgX3NlcmlhbGl6ZWRGZWVQYXllclNpZzogVWludDhBcnJheTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXRTdWlUcmFuc2FjdGlvbih0eDogU3VpVHJhbnNhY3Rpb248VD4pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhQnl0ZXMgPSB0aGlzLmdldERhdGFCeXRlcygpO1xuICAgIGNvbnN0IGhhc2ggPSBoYXNoVHlwZWREYXRhKCdUcmFuc2FjdGlvbkRhdGEnLCBkYXRhQnl0ZXMpO1xuICAgIHRoaXMuX2lkID0gYnM1OC5lbmNvZGUoaGFzaCk7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICAgIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBhZGRGZWVQYXllclNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICAgIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBnZXQgc3VpU2lnbmF0dXJlKCk6IFNpZ25hdHVyZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIGdldCBzZXJpYWxpemVkU2lnKCk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVkU2lnO1xuICB9XG5cbiAgZ2V0IHNlcmlhbGl6ZWRGZWVQYXllclNpZygpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5fc2VyaWFsaXplZEZlZVBheWVyU2lnO1xuICB9XG5cbiAgc2V0U2VyaWFsaXplZFNpZyhwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20ocHVibGljS2V5LnB1YiwgJ2hleCcpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRfc2lnID0gbmV3IFVpbnQ4QXJyYXkoMSArIHNpZ25hdHVyZS5sZW5ndGggKyBwdWJLZXkubGVuZ3RoKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoU0lHTkFUVVJFX1NDSEVNRV9CWVRFUyk7XG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHNpZ25hdHVyZSwgMSk7XG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHB1YktleSwgMSArIHNpZ25hdHVyZS5sZW5ndGgpO1xuICAgIHRoaXMuX3NlcmlhbGl6ZWRTaWcgPSBzZXJpYWxpemVkX3NpZztcbiAgfVxuXG4gIHNldFNlcmlhbGl6ZWRGZWVQYXllclNpZyhwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20ocHVibGljS2V5LnB1YiwgJ2hleCcpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRfc2lnID0gbmV3IFVpbnQ4QXJyYXkoMSArIHNpZ25hdHVyZS5sZW5ndGggKyBwdWJLZXkubGVuZ3RoKTtcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoU0lHTkFUVVJFX1NDSEVNRV9CWVRFUyk7XG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHNpZ25hdHVyZSwgMSk7XG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHB1YktleSwgMSArIHNpZ25hdHVyZS5sZW5ndGgpO1xuICAgIHRoaXMuX3NlcmlhbGl6ZWRGZWVQYXllclNpZyA9IHNlcmlhbGl6ZWRfc2lnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0gc2lnbmVyIGtleVxuICAgKi9cblxuICBzaWduKHNpZ25lcjogS2V5UGFpcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZW1wdHkgdHJhbnNhY3Rpb24gdG8gc2lnbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVudE1lc3NhZ2UgPSB0aGlzLnNpZ25hYmxlUGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduZXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkoaW50ZW50TWVzc2FnZSk7XG5cbiAgICB0aGlzLnNldFNlcmlhbGl6ZWRTaWcoeyBwdWI6IHNpZ25lci5nZXRLZXlzKCkucHViIH0sIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICAgIHRoaXMuYWRkU2lnbmF0dXJlKHsgcHViOiBzaWduZXIuZ2V0S2V5cygpLnB1YiB9LCBCdWZmZXIuZnJvbShzaWduYXR1cmUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHRyYW5zYWN0aW9uIGFzIHRoZSBnYXMgb3duZXIgKGZlZSBwYXllcikuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0gb3duZXJLZXkgLSBLZXkgZm9yIGdhcyBvd25lci5cbiAgICovXG4gIHNpZ25Bc0ZlZVBheWVyKHNpZ25lcjogS2V5UGFpcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZW1wdHkgdHJhbnNhY3Rpb24gdG8gc2lnbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVudE1lc3NhZ2UgPSB0aGlzLnNpZ25hYmxlUGF5bG9hZDtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduZXIuc2lnbk1lc3NhZ2VpblVpbnQ4QXJyYXkoaW50ZW50TWVzc2FnZSk7XG5cbiAgICB0aGlzLl9mZWVQYXllclNpZ25hdHVyZSA9IHtcbiAgICAgIHB1YmxpY0tleTogeyBwdWI6IHNpZ25lci5nZXRLZXlzKCkucHViIH0sXG4gICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSksXG4gICAgfTtcblxuICAgIC8vIFNldCBzZXJpYWxpemVkIHNpZ25hdHVyZSBmb3IgZmVlIHBheWVyXG4gICAgdGhpcy5zZXRTZXJpYWxpemVkRmVlUGF5ZXJTaWcoeyBwdWI6IHNpZ25lci5nZXRLZXlzKCkucHViIH0sIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhYnN0cmFjdCB0b0pzb24oKTogVHhEYXRhO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogQml0R29UcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqICBnZXQgdGhlIGNvcnJlY3QgdHhEYXRhIHdpdGggdHJhbnNhY3Rpb24gdHlwZVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0VHhEYXRhKCk6IFR4RGF0YTtcblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBhYnN0cmFjdCBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGFic3RyYWN0IGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZDtcblxuICBnZXREYXRhQnl0ZXMoKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgdHhEYXRhID0gdGhpcy5nZXRUeERhdGEoKTtcbiAgICBjb25zdCB0eFNlciA9IGJ1aWxkZXIuc2VyKCdUcmFuc2FjdGlvbkRhdGEnLCB7IFYxOiB0eERhdGEgfSwgeyBtYXhTaXplOiBUUkFOU0FDVElPTl9EQVRBX01BWF9TSVpFIH0pO1xuICAgIHJldHVybiB0eFNlci50b0J5dGVzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIGNvbnN0IGRhdGFCeXRlcyA9IHRoaXMuZ2V0RGF0YUJ5dGVzKCk7XG4gICAgY29uc3QgaW50ZW50TWVzc2FnZSA9IHRoaXMubWVzc2FnZVdpdGhJbnRlbnQoSW50ZW50U2NvcGUuVHJhbnNhY3Rpb25EYXRhLCBkYXRhQnl0ZXMpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShibGFrZTJiKDMyKS51cGRhdGUoaW50ZW50TWVzc2FnZSkuZGlnZXN0KCdiaW5hcnknKSk7XG4gIH1cblxuICBwcml2YXRlIG1lc3NhZ2VXaXRoSW50ZW50KHNjb3BlOiBJbnRlbnRTY29wZSwgbWVzc2FnZTogVWludDhBcnJheSkge1xuICAgIGNvbnN0IGludGVudCA9IHRoaXMuaW50ZW50V2l0aFNjb3BlKHNjb3BlKTtcbiAgICBjb25zdCBpbnRlbnRNZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkoaW50ZW50Lmxlbmd0aCArIG1lc3NhZ2UubGVuZ3RoKTtcbiAgICBpbnRlbnRNZXNzYWdlLnNldChpbnRlbnQpO1xuICAgIGludGVudE1lc3NhZ2Uuc2V0KG1lc3NhZ2UsIGludGVudC5sZW5ndGgpO1xuICAgIHJldHVybiBpbnRlbnRNZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnRlbnRXaXRoU2NvcGUoc2NvcGU6IEludGVudFNjb3BlKTogSW50ZW50IHtcbiAgICByZXR1cm4gW3Njb3BlLCBJbnRlbnRWZXJzaW9uLlYwLCBBcHBJZC5TdWldO1xuICB9XG5cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YUJ5dGVzID0gdGhpcy5nZXREYXRhQnl0ZXMoKTtcbiAgICB0aGlzLl9pZCA9IGJzNTguZW5jb2RlKGhhc2hUeXBlZERhdGEoJ1RyYW5zYWN0aW9uRGF0YScsIGRhdGFCeXRlcykpO1xuICAgIHJldHVybiB0b0I2NChkYXRhQnl0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGRlc2VyaWFsaXplU3VpVHJhbnNhY3Rpb24oc2VyaWFsaXplZFR4OiBzdHJpbmcpOiBTdWlUcmFuc2FjdGlvbjxTdWlQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGRhdGEgPSBmcm9tQjY0KHNlcmlhbGl6ZWRUeCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25CbG9jayA9IFRyYW5zYWN0aW9uQmxvY2tEYXRhQnVpbGRlci5mcm9tQnl0ZXMoZGF0YSk7XG4gICAgY29uc3QgaW5wdXRzID0gdHJhbnNhY3Rpb25CbG9jay5pbnB1dHMubWFwKCh0eElucHV0KSA9PiB0eElucHV0LnZhbHVlKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSB0cmFuc2FjdGlvbkJsb2NrLnRyYW5zYWN0aW9ucztcbiAgICBjb25zdCB0eFR5cGUgPSB0aGlzLmdldFN1aVRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbnMpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdHJhbnNhY3Rpb25CbG9jay5nZXREaWdlc3QoKSxcbiAgICAgIHR5cGU6IHR4VHlwZSxcbiAgICAgIHNlbmRlcjogbm9ybWFsaXplU3VpQWRkcmVzcyh0cmFuc2FjdGlvbkJsb2NrLnNlbmRlciEpLFxuICAgICAgdHg6IHtcbiAgICAgICAgaW5wdXRzOiBpbnB1dHMsXG4gICAgICAgIHRyYW5zYWN0aW9uczogdHJhbnNhY3Rpb25zLFxuICAgICAgfSxcbiAgICAgIGdhc0RhdGE6IHtcbiAgICAgICAgcGF5bWVudDogdGhpcy5ub3JtYWxpemVDb2lucyh0cmFuc2FjdGlvbkJsb2NrLmdhc0NvbmZpZy5wYXltZW50ISksXG4gICAgICAgIG93bmVyOiBub3JtYWxpemVTdWlBZGRyZXNzKHRyYW5zYWN0aW9uQmxvY2suZ2FzQ29uZmlnLm93bmVyISksXG4gICAgICAgIHByaWNlOiBOdW1iZXIodHJhbnNhY3Rpb25CbG9jay5nYXNDb25maWcucHJpY2UgYXMgc3RyaW5nKSxcbiAgICAgICAgYnVkZ2V0OiBOdW1iZXIodHJhbnNhY3Rpb25CbG9jay5nYXNDb25maWcuYnVkZ2V0IGFzIHN0cmluZyksXG4gICAgICB9LFxuICAgICAgLy8gTm9ybWFsaXplIE5vbmUgZXhwaXJhdGlvbiAodGhlIEJDUyBkZWZhdWx0KSB0byB1bmRlZmluZWQgc28gdGhhdCBwcmUtYnVpbGRcbiAgICAgIC8vIGFuZCBwb3N0LWRlc2VyaWFsaXphdGlvbiBTdWlUcmFuc2FjdGlvbiBvYmplY3RzIGNvbXBhcmUgZXF1YWwuXG4gICAgICBleHBpcmF0aW9uOlxuICAgICAgICB0cmFuc2FjdGlvbkJsb2NrLmV4cGlyYXRpb24gJiYgISgnTm9uZScgaW4gdHJhbnNhY3Rpb25CbG9jay5leHBpcmF0aW9uKVxuICAgICAgICAgID8gKHRyYW5zYWN0aW9uQmxvY2suZXhwaXJhdGlvbiBhcyBUcmFuc2FjdGlvbkV4cGlyYXRpb24pXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1aVRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uVHlwZVtdKTogU3VpVHJhbnNhY3Rpb25UeXBlIHtcbiAgICAvLyB0cmlja3kgdG8gZGV0ZXJtaW5lIGN1c3RvbSB0eCBwdXJlbHkgZnJvbSBhIHNlcmlhbGl6ZWQgdHgsIHdlIGNhbiByZWx5IG9uIGZvbGxvd2luZyBsb2dpY1xuICAgIGlmICh0cmFuc2FjdGlvbnMubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiB1dGlscy5nZXRTdWlUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25zWzBdKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9ucy5zb21lKCh0eCkgPT4gdXRpbHMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHR4KSA9PT0gU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1N0YWtlV2l0aFBvb2wpKSB7XG4gICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLldhbHJ1c1N0YWtlV2l0aFBvb2w7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbnMuc29tZSgodHgpID0+IHV0aWxzLmdldFN1aVRyYW5zYWN0aW9uVHlwZSh0eCkgPT09IFN1aVRyYW5zYWN0aW9uVHlwZS5XYWxydXNSZXF1ZXN0V2l0aGRyYXdTdGFrZSkpIHtcbiAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzUmVxdWVzdFdpdGhkcmF3U3Rha2U7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbnMuc29tZSgodHgpID0+IHV0aWxzLmdldFN1aVRyYW5zYWN0aW9uVHlwZSh0eCkgPT09IFN1aVRyYW5zYWN0aW9uVHlwZS5XYWxydXNXaXRoZHJhd1N0YWtlKSkge1xuICAgICAgcmV0dXJuIFN1aVRyYW5zYWN0aW9uVHlwZS5XYWxydXNXaXRoZHJhd1N0YWtlO1xuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb25zLnNvbWUoKHR4KSA9PiB1dGlscy5nZXRTdWlUcmFuc2FjdGlvblR5cGUodHgpID09PSBTdWlUcmFuc2FjdGlvblR5cGUuQWRkU3Rha2UpKSB7XG4gICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLkFkZFN0YWtlO1xuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb25zLnNvbWUoKHR4KSA9PiB1dGlscy5nZXRTdWlUcmFuc2FjdGlvblR5cGUodHgpID09PSBTdWlUcmFuc2FjdGlvblR5cGUuV2l0aGRyYXdTdGFrZSkpIHtcbiAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuV2l0aGRyYXdTdGFrZTtcbiAgICB9XG4gICAgLy8gU3BvbnNvcmVkIFRyYW5zZmVyIHdpdGggZnVuZHNJbkFkZHJlc3NCYWxhbmNlIHVzZXMgYSByZWRlZW1fZnVuZHMgTW92ZUNhbGwgYWxvbmdzaWRlXG4gICAgLy8gTWVyZ2VDb2lucy9TcGxpdENvaW5zIG9uIG5vbi1HYXNDb2luIG9iamVjdHMsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBiZSBtaXNjbGFzc2lmaWVkXG4gICAgLy8gYXMgVG9rZW5UcmFuc2Zlci4gRGlzdGluZ3Vpc2ggZnJvbSBUb2tlblRyYW5zZmVyK2Z1bmRzSW5BZGRyZXNzQmFsYW5jZSBieSBjaGVja2luZ1xuICAgIC8vIHRoYXQgdGhlIHJlZGVlbV9mdW5kcyB0eXBlQXJndW1lbnQgaXMgdGhlIG5hdGl2ZSBTVUkgY29pbiB0eXBlICgweDI6OnN1aTo6U1VJKS5cbiAgICBjb25zdCBzdWlOYXRpdmVBZGRyZXNzID0gbm9ybWFsaXplU3VpQWRkcmVzcygnMHgyJyk7XG4gICAgaWYgKFxuICAgICAgdHJhbnNhY3Rpb25zLnNvbWUoKHR4KSA9PiB7XG4gICAgICAgIGlmICh0eC5raW5kICE9PSAnTW92ZUNhbGwnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1vdmVDYWxsID0gdHggYXMgYW55O1xuICAgICAgICBpZiAoIW1vdmVDYWxsLnRhcmdldD8uZW5kc1dpdGgoTWV0aG9kTmFtZXMuUmVkZWVtRnVuZHMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHR5cGVBcmc6IHN0cmluZyA9IG1vdmVDYWxsLnR5cGVBcmd1bWVudHM/LlswXSA/PyAnJztcbiAgICAgICAgY29uc3QgW2FkZHIgPSAnJywgbW9kID0gJycsIG5hbWUgPSAnJ10gPSB0eXBlQXJnLnNwbGl0KCc6OicpO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplU3VpQWRkcmVzcyhhZGRyKSA9PT0gc3VpTmF0aXZlQWRkcmVzcyAmJiBtb2QgPT09ICdzdWknICYmIG5hbWUgPT09ICdTVUknO1xuICAgICAgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXI7XG4gICAgfVxuICAgIC8vIEZ1bGwtYW1vdW50IHRva2VuIGFkZHItYmFsIHNlbmQ6IE1vdmVDYWxsKHJlZGVlbV9mdW5kcywgVE9LRU5fVFlQRSkgKyBUcmFuc2Zlck9iamVjdHNcbiAgICAvLyB3aXRoIG5vIFNwbGl0Q29pbnMuIEJvdGggY29tbWFuZHMgcmV0dXJuIFRyYW5zZmVyIGZyb20gZ2V0U3VpVHJhbnNhY3Rpb25UeXBlLCBzbyB0aGVcbiAgICAvLyBjaGVjayBiZWxvdyB3b3VsZG4ndCBmaXJlLiBEZXRlY3QgYnkgZmluZGluZyByZWRlZW1fZnVuZHMgd2l0aCBhIG5vbi1uYXRpdmUgdHlwZSBhcmcuXG4gICAgaWYgKFxuICAgICAgdHJhbnNhY3Rpb25zLnNvbWUoKHR4KSA9PiB7XG4gICAgICAgIGlmICh0eC5raW5kICE9PSAnTW92ZUNhbGwnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1vdmVDYWxsID0gdHggYXMgYW55O1xuICAgICAgICBpZiAoIW1vdmVDYWxsLnRhcmdldD8uZW5kc1dpdGgoTWV0aG9kTmFtZXMuUmVkZWVtRnVuZHMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHR5cGVBcmc6IHN0cmluZyA9IG1vdmVDYWxsLnR5cGVBcmd1bWVudHM/LlswXSA/PyAnJztcbiAgICAgICAgY29uc3QgW2FkZHIgPSAnJywgbW9kID0gJycsIG5hbWUgPSAnJ10gPSB0eXBlQXJnLnNwbGl0KCc6OicpO1xuICAgICAgICByZXR1cm4gIShub3JtYWxpemVTdWlBZGRyZXNzKGFkZHIpID09PSBzdWlOYXRpdmVBZGRyZXNzICYmIG1vZCA9PT0gJ3N1aScgJiYgbmFtZSA9PT0gJ1NVSScpO1xuICAgICAgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuVG9rZW5UcmFuc2ZlcjtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9ucy5zb21lKCh0eCkgPT4gdXRpbHMuZ2V0U3VpVHJhbnNhY3Rpb25UeXBlKHR4KSA9PT0gU3VpVHJhbnNhY3Rpb25UeXBlLlRva2VuVHJhbnNmZXIpKSB7XG4gICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLlRva2VuVHJhbnNmZXI7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbnMuZXZlcnkoKHR4KSA9PiB1dGlscy5nZXRTdWlUcmFuc2FjdGlvblR5cGUodHgpID09PSBTdWlUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXIpKSB7XG4gICAgICByZXR1cm4gU3VpVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyO1xuICAgIH1cblxuICAgIHJldHVybiBTdWlUcmFuc2FjdGlvblR5cGUuQ3VzdG9tVHg7XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVyR2FzRGF0YShrOiBhbnkpOiBHYXNEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudDogW3RoaXMubm9ybWFsaXplU3VpT2JqZWN0UmVmKGsuZ2FzRGF0YS5wYXltZW50KV0sXG4gICAgICBvd25lcjogdXRpbHMubm9ybWFsaXplSGV4SWQoay5nYXNEYXRhLm93bmVyKSxcbiAgICAgIHByaWNlOiBOdW1iZXIoay5nYXNEYXRhLnByaWNlKSxcbiAgICAgIGJ1ZGdldDogTnVtYmVyKGsuZ2FzRGF0YS5idWRnZXQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBub3JtYWxpemVDb2lucyhjb2luczogYW55W10pOiBTdWlPYmplY3RSZWZbXSB7XG4gICAgcmV0dXJuIGNvaW5zLm1hcCgoY29pbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplU3VpT2JqZWN0UmVmKGNvaW4pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbm9ybWFsaXplU3VpT2JqZWN0UmVmKG9iajogU3VpT2JqZWN0UmVmKTogU3VpT2JqZWN0UmVmIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JqZWN0SWQ6IG5vcm1hbGl6ZVN1aU9iamVjdElkKG9iai5vYmplY3RJZCksXG4gICAgICB2ZXJzaW9uOiBOdW1iZXIob2JqLnZlcnNpb24pLFxuICAgICAgZGlnZXN0OiBvYmouZGlnZXN0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBidWlsZGluZyB0cmFuc2FjdGlvbnMgd2l0aCA+IDI1NSBpbnB1dCBnYXMgcGF5bWVudCBvYmplY3RzLCB3ZSBmaXJzdCB1c2UgTWVyZ2VDb2lucyBUcmFuYXNhY3Rpb25zIHRvIG1lcmdlIHRoZVxuICAgKiBhZGRpdGlvbmFsIGlucHV0cyBpbnRvIHRoZSBnYXMgY29pbiAmIHNsaWNlIHRoZW0gZnJvbSB0aGUgcGF5bWVudCBpbiBnYXNEYXRhLiBXaGVuIGluaXRpYWxpemluZyB0aGUgYnVpbGRlciB1c2luZ1xuICAgKiBkZWNvZGVkIHR4IGRhdGEsIHdlIG5lZWQgdG8gZ2V0IHRoZXNlIGlucHV0cyBmcm9tIE1lcmdlQ29pbnMgJiBhZGQgdGhlbSBiYWNrIHRvIHRoZSBnYXMgcGF5bWVudCB0byBiZSBhYmxlIHRvXG4gICAqIHJlYnVpbGQgZnJvbSBhIHJhdyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRJbnB1dEdhc1BheW1lbnRPYmplY3RzRnJvbVR4KHR4OiBTdWlQcm9ncmFtbWFibGVUcmFuc2FjdGlvbik6IFN1aU9iamVjdFJlZltdIHtcbiAgICBjb25zdCB0eElucHV0cyA9IHR4LmlucHV0cztcbiAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSB0eC50cmFuc2FjdGlvbnM7XG4gICAgY29uc3QgaW5wdXRHYXNQYXltZW50T2JqZWN0czogU3VpT2JqZWN0UmVmW10gPSBbXTtcblxuICAgIHRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLmtpbmQgPT09ICdNZXJnZUNvaW5zJykge1xuICAgICAgICBjb25zdCB7IGRlc3RpbmF0aW9uLCBzb3VyY2VzIH0gPSB0cmFuc2FjdGlvbiBhcyBNZXJnZUNvaW5zVHJhbnNhY3Rpb247XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbi5raW5kID09PSAnR2FzQ29pbicpIHtcbiAgICAgICAgICBzb3VyY2VzLmZvckVhY2goKHNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5raW5kID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgICAgIGxldCBpbnB1dCA9IHR4SW5wdXRzW3NvdXJjZS5pbmRleF07XG4gICAgICAgICAgICAgIGlmICgndmFsdWUnIGluIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoJ09iamVjdCcgaW4gaW5wdXQgJiYgaXNJbW1Pck93bmVkT2JqKGlucHV0Lk9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBpbnB1dEdhc1BheW1lbnRPYmplY3RzLnB1c2goaW5wdXQuT2JqZWN0LkltbU9yT3duZWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBpbnB1dEdhc1BheW1lbnRPYmplY3RzO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKT,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,SAAS,MAAM,cAAc,CAAC;AAIrC,OAAO,EAEL,eAAe,EACf,0BAA0B,EAC1B,0BAA0B,EAC1B,8BAA8B,EAC9B,oCAAoC,EACpC,0CAA0C,EAC1C,cAAc,EACd,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAKL,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,aAAa,EAEb,qBAAqB,EACrB,eAAe,IAAI,sBAAsB,EAC1C,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAE7D,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI;IAAE,UAAU,EAAE,YAAY,CAAA;CAAE,CAEjG;AAED,qBAAa,KAAM,YAAW,SAAS;IACrC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,kBAAkB;IAClB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;OAKG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAWtD;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAMzD,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI7B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKvC;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;IAS1C;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAW/C;;;;;QAKI;IACJ,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIlC;;;;;OAKG;IACH,kBAAkB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,eAAe;IAkB3E;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,kBAAkB;IA6C1E,aAAa,CAAC,EAAE,EAAE,cAAc,CAAC,0BAA0B,CAAC,GAAG,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|