@bitgo-beta/sdk-coin-ton 1.0.1-beta.9 → 1.0.1-beta.900
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +810 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/lib/iface.d.ts +6 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.js +24 -10
- package/dist/src/lib/singleNominatorWithdrawBuilder.d.ts +11 -0
- package/dist/src/lib/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/singleNominatorWithdrawBuilder.js +26 -0
- package/dist/src/lib/transaction.d.ts +13 -5
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +65 -25
- package/dist/src/lib/transactionBuilder.d.ts +23 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +44 -9
- package/dist/src/lib/transactionBuilderFactory.d.ts +5 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +29 -4
- package/dist/src/lib/transactionExplanation.d.ts +14 -0
- package/dist/src/lib/transactionExplanation.d.ts.map +1 -0
- package/dist/src/lib/transactionExplanation.js +3 -0
- package/dist/src/lib/utils.d.ts +14 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +73 -6
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +11 -0
- package/dist/src/ton.d.ts +24 -2
- package/dist/src/ton.d.ts.map +1 -1
- package/dist/src/ton.js +285 -14
- package/dist/src/tton.js +1 -1
- package/package.json +8 -8
|
@@ -7,10 +7,14 @@ exports.Transaction = void 0;
|
|
|
7
7
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
8
|
const tonweb_1 = __importDefault(require("tonweb"));
|
|
9
9
|
const bn_js_1 = require("bn.js");
|
|
10
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
10
11
|
const WALLET_ID = 698983191;
|
|
11
12
|
class Transaction extends sdk_core_1.BaseTransaction {
|
|
12
13
|
constructor(coinConfig) {
|
|
13
14
|
super(coinConfig);
|
|
15
|
+
this.bounceable = false;
|
|
16
|
+
this.fromAddressBounceable = true;
|
|
17
|
+
this.toAddressBounceable = true;
|
|
14
18
|
}
|
|
15
19
|
canSign(key) {
|
|
16
20
|
return false;
|
|
@@ -19,43 +23,49 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
19
23
|
return this.finalMessage;
|
|
20
24
|
}
|
|
21
25
|
toJson() {
|
|
26
|
+
const otherFormat = new tonweb_1.default.Address(this.recipient.address).toString(true, true, !new tonweb_1.default.Address(this.recipient.address).isBounceable);
|
|
22
27
|
return {
|
|
23
28
|
id: this._id,
|
|
24
29
|
sender: this.sender,
|
|
25
30
|
destination: this.recipient.address,
|
|
31
|
+
destinationAlias: otherFormat,
|
|
26
32
|
amount: this.recipient.amount,
|
|
33
|
+
withdrawAmount: this.withdrawAmount,
|
|
27
34
|
seqno: this.seqno,
|
|
28
35
|
expirationTime: this.expireTime,
|
|
29
36
|
publicKey: this.publicKey,
|
|
30
37
|
signature: this._signatures[0],
|
|
38
|
+
bounceable: this.bounceable,
|
|
31
39
|
};
|
|
32
40
|
}
|
|
33
41
|
get signablePayload() {
|
|
34
42
|
return Buffer.from(this.unsignedMessage, 'hex');
|
|
35
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Set the transaction type.
|
|
46
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
47
|
+
*/
|
|
48
|
+
set transactionType(transactionType) {
|
|
49
|
+
this._type = transactionType;
|
|
50
|
+
}
|
|
36
51
|
async build() {
|
|
37
|
-
this._type = sdk_core_1.TransactionType.Send;
|
|
38
52
|
const signingMessage = this.createSigningMessage(WALLET_ID, this.seqno, this.expireTime);
|
|
39
53
|
const sendMode = 3;
|
|
40
54
|
signingMessage.bits.writeUint8(sendMode);
|
|
41
|
-
|
|
55
|
+
const outMsg = this.createOutMsg(this.recipient.address, this.recipient.amount, this.message);
|
|
56
|
+
signingMessage.refs.push(outMsg);
|
|
42
57
|
this.unsignedMessage = Buffer.from(await signingMessage.hash()).toString('hex');
|
|
43
58
|
const signature = this._signatures.length > 0 ? this._signatures[0] : Buffer.from(new Uint8Array(64)).toString('hex');
|
|
44
59
|
const finalMessage = await this.createExternalMessage(signingMessage, this.seqno, signature);
|
|
45
60
|
this.finalMessage = tonweb_1.default.utils.bytesToBase64(await finalMessage.toBoc(false));
|
|
46
|
-
|
|
61
|
+
const originalTxId = tonweb_1.default.utils.bytesToBase64(await finalMessage.hash());
|
|
62
|
+
this._id = originalTxId.replace(/\//g, '_').replace(/\+/g, '-');
|
|
47
63
|
}
|
|
48
64
|
createSigningMessage(walletId, seqno, expireAt) {
|
|
49
65
|
const message = new tonweb_1.default.boc.Cell();
|
|
50
66
|
message.bits.writeUint(walletId, 32);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
message.bits.writeBit(1);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
message.bits.writeUint(expireAt, 32);
|
|
58
|
-
}
|
|
67
|
+
// expireAt should be set as per the provided arg value, regardless of the seqno
|
|
68
|
+
message.bits.writeUint(expireAt, 32);
|
|
59
69
|
message.bits.writeUint(seqno, 32);
|
|
60
70
|
message.bits.writeUint(0, 8); // op
|
|
61
71
|
return message;
|
|
@@ -69,15 +79,27 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
69
79
|
}
|
|
70
80
|
else if (typeof payload === 'string') {
|
|
71
81
|
if (payload.length > 0) {
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
if (payload.length > 24 && payload.substring(0, 8) === transactionBuilder_1.WITHDRAW_OPCODE) {
|
|
83
|
+
// payload is a withdraw txn message
|
|
84
|
+
const queryId = payload.substring(8, 24);
|
|
85
|
+
const withdrawAmount = payload.substring(24);
|
|
86
|
+
/* eslint-disable-next-line no-console */
|
|
87
|
+
console.log(`payload: ${payload}, queryId: ${queryId}, withdrawAmount: ${withdrawAmount}`);
|
|
88
|
+
payloadCell.bits.writeUint(parseInt(transactionBuilder_1.WITHDRAW_OPCODE, 16), 32);
|
|
89
|
+
payloadCell.bits.writeUint(parseInt(queryId, 16), 64);
|
|
90
|
+
payloadCell.bits.writeCoins(new bn_js_1.BN(withdrawAmount));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
payloadCell.bits.writeUint(0, 32);
|
|
94
|
+
payloadCell.bits.writeString(payload);
|
|
95
|
+
}
|
|
74
96
|
}
|
|
75
97
|
}
|
|
76
98
|
else {
|
|
77
99
|
payloadCell.bits.writeBytes(payload);
|
|
78
100
|
}
|
|
79
101
|
}
|
|
80
|
-
const orderHeader = tonweb_1.default.Contract.createInternalMessageHeader(new tonweb_1.default.Address(address), new bn_js_1.BN(amount));
|
|
102
|
+
const orderHeader = tonweb_1.default.Contract.createInternalMessageHeader(new tonweb_1.default.Address(address), new bn_js_1.BN(amount), true, this.bounceable);
|
|
81
103
|
return tonweb_1.default.Contract.createCommonMsgInfo(orderHeader, undefined, payloadCell);
|
|
82
104
|
}
|
|
83
105
|
async createExternalMessage(signingMessage, seqno, signature) {
|
|
@@ -117,17 +139,19 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
117
139
|
fromRawTransaction(rawTransaction) {
|
|
118
140
|
try {
|
|
119
141
|
const cell = tonweb_1.default.boc.Cell.oneFromBoc(tonweb_1.default.utils.base64ToBytes(rawTransaction));
|
|
120
|
-
const parsed = this.
|
|
142
|
+
const parsed = this.parseTransaction(cell);
|
|
121
143
|
parsed.value = parsed.value.toString();
|
|
122
|
-
parsed.fromAddress = parsed.fromAddress.toString(true, true,
|
|
123
|
-
parsed.toAddress = parsed.toAddress.toString(true, true,
|
|
144
|
+
parsed.fromAddress = parsed.fromAddress.toString(true, true, this.fromAddressBounceable);
|
|
145
|
+
parsed.toAddress = parsed.toAddress.toString(true, true, this.toAddressBounceable);
|
|
124
146
|
this.sender = parsed.fromAddress;
|
|
125
147
|
this.recipient = { address: parsed.toAddress, amount: parsed.value };
|
|
148
|
+
this.withdrawAmount = parsed.withdrawAmount;
|
|
126
149
|
this.seqno = parsed.seqno;
|
|
127
150
|
this.publicKey = parsed.publicKey;
|
|
128
151
|
this.expireTime = parsed.expireAt;
|
|
129
152
|
this.message = parsed.payload;
|
|
130
153
|
this._signatures.push(parsed.signature);
|
|
154
|
+
this.bounceable = parsed.bounce;
|
|
131
155
|
}
|
|
132
156
|
catch (e) {
|
|
133
157
|
throw new Error('invalid raw transaction');
|
|
@@ -135,9 +159,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
135
159
|
}
|
|
136
160
|
/** @inheritDoc */
|
|
137
161
|
explainTransaction() {
|
|
138
|
-
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee'];
|
|
162
|
+
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'withdrawAmount'];
|
|
139
163
|
const outputs = [this.recipient];
|
|
140
164
|
const outputAmount = this.recipient.amount;
|
|
165
|
+
const withdrawAmount = this.withdrawAmount;
|
|
141
166
|
return {
|
|
142
167
|
displayOrder,
|
|
143
168
|
id: this.id,
|
|
@@ -146,9 +171,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
146
171
|
changeOutputs: [],
|
|
147
172
|
changeAmount: '0',
|
|
148
173
|
fee: { fee: 'UNKNOWN' },
|
|
174
|
+
withdrawAmount,
|
|
149
175
|
};
|
|
150
176
|
}
|
|
151
|
-
|
|
177
|
+
parseTransaction(cell) {
|
|
152
178
|
const slice = cell.beginParse();
|
|
153
179
|
// header
|
|
154
180
|
if (slice.loadUint(2).toNumber() !== 2)
|
|
@@ -185,10 +211,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
185
211
|
return {
|
|
186
212
|
fromAddress: externalDestAddress,
|
|
187
213
|
publicKey,
|
|
188
|
-
...this.
|
|
214
|
+
...this.parseTransactionBody(bodySlice),
|
|
189
215
|
};
|
|
190
216
|
}
|
|
191
|
-
|
|
217
|
+
parseTransactionBody(slice) {
|
|
192
218
|
const signature = Buffer.from(slice.loadBits(512)).toString('hex');
|
|
193
219
|
// signing message
|
|
194
220
|
const walletId = slice.loadUint(32).toNumber();
|
|
@@ -235,14 +261,27 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
235
261
|
}
|
|
236
262
|
// order body
|
|
237
263
|
let payload;
|
|
264
|
+
let withdrawAmount;
|
|
265
|
+
this.transactionType = sdk_core_1.TransactionType.Send;
|
|
238
266
|
if (order.getFreeBits() > 0) {
|
|
239
267
|
if (order.loadBit()) {
|
|
240
268
|
order = order.loadRef();
|
|
241
269
|
}
|
|
242
270
|
if (order.getFreeBits() > 32) {
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
271
|
+
const opcode = order.loadUint(32).toNumber();
|
|
272
|
+
if (opcode === 0) {
|
|
273
|
+
const payloadBytes = order.loadBits(order.getFreeBits());
|
|
274
|
+
payload = new TextDecoder().decode(payloadBytes);
|
|
275
|
+
}
|
|
276
|
+
else if (opcode === 4096) {
|
|
277
|
+
const queryId = order.loadUint(64).toNumber();
|
|
278
|
+
withdrawAmount = order.loadCoins().toNumber().toString();
|
|
279
|
+
payload = transactionBuilder_1.WITHDRAW_OPCODE + queryId.toString(16).padStart(16, '0') + withdrawAmount;
|
|
280
|
+
this.transactionType = sdk_core_1.TransactionType.SingleNominatorWithdraw;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
payload = '';
|
|
284
|
+
}
|
|
246
285
|
}
|
|
247
286
|
}
|
|
248
287
|
return {
|
|
@@ -250,6 +289,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
250
289
|
value,
|
|
251
290
|
bounce,
|
|
252
291
|
seqno,
|
|
292
|
+
withdrawAmount,
|
|
253
293
|
expireAt,
|
|
254
294
|
payload,
|
|
255
295
|
signature,
|
|
@@ -277,4 +317,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
277
317
|
}
|
|
278
318
|
}
|
|
279
319
|
exports.Transaction = Transaction;
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUc5QixvREFBNEI7QUFDNUIsaUNBQTJCO0FBRzNCLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUU1QixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQVU5QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBYTtZQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztZQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsSUFBSSxDQUFDO1FBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxv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R0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLElBQUksUUFBUSxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakM7UUFDRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNsRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeFNELGtDQXdTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIFJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgVG9uV2ViIGZyb20gJ3RvbndlYic7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICd0b253ZWIvZGlzdC90eXBlcy9ib2MvY2VsbCc7XG5cbmNvbnN0IFdBTExFVF9JRCA9IDY5ODk4MzE5MTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHVibGljIHJlY2lwaWVudDogUmVjaXBpZW50O1xuICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuICBzZXFubzogbnVtYmVyO1xuICBleHBpcmVUaW1lOiBudW1iZXI7XG4gIHNlbmRlcjogc3RyaW5nO1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1bnNpZ25lZE1lc3NhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBmaW5hbE1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbmFsTWVzc2FnZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQgYXMgc3RyaW5nLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgYW1vdW50OiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBzZXFubzogdGhpcy5zZXFubyxcbiAgICAgIGV4cGlyYXRpb25UaW1lOiB0aGlzLmV4cGlyZVRpbWUsXG4gICAgICBwdWJsaWNLZXk6IHRoaXMucHVibGljS2V5LFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLl9zaWduYXR1cmVzWzBdLFxuICAgIH07XG4gIH1cblxuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMudW5zaWduZWRNZXNzYWdlLCAnaGV4Jyk7XG4gIH1cblxuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgY29uc3Qgc2lnbmluZ01lc3NhZ2UgPSB0aGlzLmNyZWF0ZVNpZ25pbmdNZXNzYWdlKFdBTExFVF9JRCwgdGhpcy5zZXFubywgdGhpcy5leHBpcmVUaW1lKTtcbiAgICBjb25zdCBzZW5kTW9kZSA9IDM7XG4gICAgc2lnbmluZ01lc3NhZ2UuYml0cy53cml0ZVVpbnQ4KHNlbmRNb2RlKTtcbiAgICBzaWduaW5nTWVzc2FnZS5yZWZzLnB1c2godGhpcy5jcmVhdGVPdXRNc2codGhpcy5yZWNpcGllbnQuYWRkcmVzcywgdGhpcy5yZWNpcGllbnQuYW1vdW50LCB0aGlzLm1lc3NhZ2UpKTtcbiAgICB0aGlzLnVuc2lnbmVkTWVzc2FnZSA9IEJ1ZmZlci5mcm9tKGF3YWl0IHNpZ25pbmdNZXNzYWdlLmhhc2goKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID1cbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMubGVuZ3RoID4gMCA/IHRoaXMuX3NpZ25hdHVyZXNbMF0gOiBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSg2NCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBmaW5hbE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmNyZWF0ZUV4dGVybmFsTWVzc2FnZShzaWduaW5nTWVzc2FnZSwgdGhpcy5zZXFubywgc2lnbmF0dXJlKTtcbiAgICB0aGlzLmZpbmFsTWVzc2FnZSA9IFRvbldlYi51dGlscy5ieXRlc1RvQmFzZTY0KGF3YWl0IGZpbmFsTWVzc2FnZS50b0JvYyhmYWxzZSkpO1xuXG4gICAgdGhpcy5faWQgPSBUb25XZWIudXRpbHMuYnl0ZXNUb0Jhc2U2NChhd2FpdCBmaW5hbE1lc3NhZ2UuaGFzaCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2lnbmluZ01lc3NhZ2Uod2FsbGV0SWQsIHNlcW5vLCBleHBpcmVBdCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgVG9uV2ViLmJvYy5DZWxsKCk7XG4gICAgbWVzc2FnZS5iaXRzLndyaXRlVWludCh3YWxsZXRJZCwgMzIpO1xuICAgIGlmIChzZXFubyA9PT0gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgICAgIG1lc3NhZ2UuYml0cy53cml0ZUJpdCgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZS5iaXRzLndyaXRlVWludChleHBpcmVBdCwgMzIpO1xuICAgIH1cbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KHNlcW5vLCAzMik7XG4gICAgbWVzc2FnZS5iaXRzLndyaXRlVWludCgwLCA4KTsgLy8gb3BcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3V0TXNnKGFkZHJlc3MsIGFtb3VudCwgcGF5bG9hZCkge1xuICAgIGxldCBwYXlsb2FkQ2VsbCA9IG5ldyBUb25XZWIuYm9jLkNlbGwoKTtcbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgaWYgKHBheWxvYWQucmVmcykge1xuICAgICAgICAvLyBpcyBDZWxsXG4gICAgICAgIHBheWxvYWRDZWxsID0gcGF5bG9hZDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChwYXlsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludCgwLCAzMik7XG4gICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZVN0cmluZyhwYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZUJ5dGVzKHBheWxvYWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yZGVySGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUludGVybmFsTWVzc2FnZUhlYWRlcihuZXcgVG9uV2ViLkFkZHJlc3MoYWRkcmVzcyksIG5ldyBCTihhbW91bnQpKTtcbiAgICByZXR1cm4gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUNvbW1vbk1zZ0luZm8ob3JkZXJIZWFkZXIsIHVuZGVmaW5lZCwgcGF5bG9hZENlbGwpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRXh0ZXJuYWxNZXNzYWdlKHNpZ25pbmdNZXNzYWdlOiBDZWxsLCBzZXFubzogbnVtYmVyLCBzaWduYXR1cmU6IHN0cmluZyk6IFByb21pc2U8Q2VsbD4ge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgVG9uV2ViLmJvYy5DZWxsKCk7XG5cbiAgICBib2R5LmJpdHMud3JpdGVCeXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKSk7XG4gICAgYm9keS53cml0ZUNlbGwoc2lnbmluZ01lc3NhZ2UpO1xuXG4gICAgbGV0IHN0YXRlSW5pdDtcbiAgICBpZiAoc2Vxbm8gPT09IDApIHtcbiAgICAgIGNvbnN0IFdhbGxldENsYXNzID0gVG9uV2ViLldhbGxldHMuYWxsWyd2NFIyJ107XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0Q2xhc3MobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoKSwge1xuICAgICAgICBwdWJsaWNLZXk6IFRvbldlYi51dGlscy5oZXhUb0J5dGVzKHRoaXMucHVibGljS2V5KSxcbiAgICAgICAgd2M6IDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveSA9IGF3YWl0IHdhbGxldC5jcmVhdGVTdGF0ZUluaXQoKTtcbiAgICAgIHN0YXRlSW5pdCA9IGRlcGxveS5zdGF0ZUluaXQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUV4dGVybmFsTWVzc2FnZUhlYWRlcih0aGlzLnNlbmRlcik7XG4gICAgY29uc3QgcmVzdWx0TWVzc2FnZSA9IFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKGhlYWRlciwgc3RhdGVJbml0LCBib2R5KTtcbiAgICByZXR1cm4gcmVzdWx0TWVzc2FnZTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBpbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiB0aGlzLnNlbmRlcixcbiAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRoaXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNlbGwgPSBUb25XZWIuYm9jLkNlbGwub25lRnJvbUJvYyhUb25XZWIudXRpbHMuYmFzZTY0VG9CeXRlcyhyYXdUcmFuc2FjdGlvbikpO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlVHJhbnNmZXIoY2VsbCk7XG4gICAgICBwYXJzZWQudmFsdWUgPSBwYXJzZWQudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHBhcnNlZC5mcm9tQWRkcmVzcyA9IHBhcnNlZC5mcm9tQWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgIHBhcnNlZC50b0FkZHJlc3MgPSBwYXJzZWQudG9BZGRyZXNzLnRvU3RyaW5nKHRydWUsIHRydWUsIHRydWUpO1xuICAgICAgdGhpcy5zZW5kZXIgPSBwYXJzZWQuZnJvbUFkZHJlc3M7XG4gICAgICB0aGlzLnJlY2lwaWVudCA9IHsgYWRkcmVzczogcGFyc2VkLnRvQWRkcmVzcywgYW1vdW50OiBwYXJzZWQudmFsdWUgfTtcbiAgICAgIHRoaXMuc2Vxbm8gPSBwYXJzZWQuc2Vxbm87XG4gICAgICB0aGlzLnB1YmxpY0tleSA9IHBhcnNlZC5wdWJsaWNLZXkgYXMgc3RyaW5nO1xuICAgICAgdGhpcy5leHBpcmVUaW1lID0gcGFyc2VkLmV4cGlyZUF0O1xuICAgICAgdGhpcy5tZXNzYWdlID0gcGFyc2VkLnBheWxvYWQ7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2gocGFyc2VkLnNpZ25hdHVyZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnXTtcblxuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbdGhpcy5yZWNpcGllbnRdO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IHRoaXMucmVjaXBpZW50LmFtb3VudDtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHJhbnNmZXIoY2VsbDogQ2VsbCk6IGFueSB7XG4gICAgY29uc3Qgc2xpY2UgPSAoY2VsbCBhcyBhbnkpLmJlZ2luUGFyc2UoKTtcblxuICAgIC8vIGhlYWRlclxuXG4gICAgaWYgKHNsaWNlLmxvYWRVaW50KDIpLnRvTnVtYmVyKCkgIT09IDIpIHRocm93IEVycm9yKCdpbnZhbGlkIGhlYWRlcicpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxTb3VyY2VBZGRyZXNzID0gc2xpY2UubG9hZEFkZHJlc3MoKTtcbiAgICBpZiAoZXh0ZXJuYWxTb3VyY2VBZGRyZXNzICE9PSBudWxsKSB0aHJvdyBFcnJvcignaW52YWxpZCBleHRlcm5hbFNvdXJjZUFkZHJlc3MnKTtcblxuICAgIGNvbnN0IGV4dGVybmFsRGVzdEFkZHJlc3MgPSBzbGljZS5sb2FkQWRkcmVzcygpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxJbXBvcnRGZWUgPSBzbGljZS5sb2FkQ29pbnMoKTtcbiAgICBpZiAoIWV4dGVybmFsSW1wb3J0RmVlLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBleHRlcm5hbEltcG9ydEZlZScpO1xuXG4gICAgLy8gc3RhdGVJbml0XG5cbiAgICBsZXQgcHVibGljS2V5O1xuICAgIGlmIChzbGljZS5sb2FkQml0KCkpIHtcbiAgICAgIGlmIChzbGljZS5sb2FkQml0KCkpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVJbml0ID0gc2xpY2UubG9hZFJlZigpO1xuICAgICAgICBzdGF0ZUluaXQubG9hZFJlZigpO1xuICAgICAgICBjb25zdCBkYXRhID0gc3RhdGVJbml0LmxvYWRSZWYoKTtcbiAgICAgICAgY29uc3Qgc2Vxbm8gPSBkYXRhLmxvYWRVaW50KDMyKS50b051bWJlcigpO1xuICAgICAgICBpZiAoc2Vxbm8gIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXFubycpO1xuICAgICAgICBjb25zdCB3YWxsZXRJZCA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgICAgIGlmICh3YWxsZXRJZCAhPT0gV0FMTEVUX0lEKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgd2FsbGV0IGlkJyk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleUJ1ZiA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdWJsaWNLZXlCdWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBwdWJsaWNLZXlCdWZbaV0gPSBkYXRhLmxvYWRVaW50KDgpO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHB1YmxpY0tleUJ1ZikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJvZHlcbiAgICBjb25zdCBib2R5U2xpY2UgPSBzbGljZS5sb2FkQml0KCkgPyBzbGljZS5sb2FkUmVmKCkgOiBzbGljZTtcblxuICAgIHJldHVybiB7XG4gICAgICBmcm9tQWRkcmVzczogZXh0ZXJuYWxEZXN0QWRkcmVzcyxcbiAgICAgIHB1YmxpY0tleSxcbiAgICAgIC4uLnRoaXMucGFyc2VUcmFuc2ZlckJvZHkoYm9keVNsaWNlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRyYW5zZmVyQm9keShzbGljZTogYW55KTogYW55IHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXIuZnJvbShzbGljZS5sb2FkQml0cyg1MTIpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgLy8gc2lnbmluZyBtZXNzYWdlXG5cbiAgICBjb25zdCB3YWxsZXRJZCA9IHNsaWNlLmxvYWRVaW50KDMyKS50b051bWJlcigpO1xuICAgIGlmICh3YWxsZXRJZCAhPT0gV0FMTEVUX0lEKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgd2FsbGV0SWQnKTtcblxuICAgIGNvbnN0IGV4cGlyZUF0ID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG5cbiAgICBjb25zdCBzZXFubyA9IHNsaWNlLmxvYWRVaW50KDMyKS50b051bWJlcigpO1xuXG4gICAgY29uc3Qgb3AgPSBzbGljZS5sb2FkVWludCg4KS50b051bWJlcigpO1xuICAgIGlmIChvcCAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9wJyk7XG5cbiAgICBjb25zdCBzZW5kTW9kZSA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHNlbmRNb2RlICE9PSAzKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2VuZE1vZGUnKTtcblxuICAgIGxldCBvcmRlciA9IHNsaWNlLmxvYWRSZWYoKTtcblxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGludGVybmFsIGhlYWRlcicpO1xuICAgIGlmICghb3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBpaHJEaXNhYmxlZCcpO1xuICAgIGNvbnN0IGJvdW5jZSA9IG9yZGVyLmxvYWRCaXQoKTtcbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBib3VuY2VkJyk7XG4gICAgY29uc3Qgc291cmNlQWRkcmVzcyA9IG9yZGVyLmxvYWRBZGRyZXNzKCk7XG4gICAgaWYgKHNvdXJjZUFkZHJlc3MgIT09IG51bGwpIHRocm93IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsU291cmNlQWRkcmVzcycpO1xuICAgIGNvbnN0IGRlc3RBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICBjb25zdCB2YWx1ZSA9IG9yZGVyLmxvYWRDb2lucygpO1xuXG4gICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgY3VycmVuY3lDb2xsZWN0aW9uJyk7XG4gICAgY29uc3QgaWhyRmVlcyA9IG9yZGVyLmxvYWRDb2lucygpO1xuICAgIGlmICghaWhyRmVlcy5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaWhyRmVlcycpO1xuICAgIGNvbnN0IGZ3ZEZlZXMgPSBvcmRlci5sb2FkQ29pbnMoKTtcbiAgICBpZiAoIWZ3ZEZlZXMuZXEobmV3IEJOKDApKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZ3ZEZlZXMnKTtcbiAgICBjb25zdCBjcmVhdGVkTHQgPSBvcmRlci5sb2FkVWludCg2NCk7XG4gICAgaWYgKCFjcmVhdGVkTHQuZXEobmV3IEJOKDApKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNyZWF0ZWRMdCcpO1xuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IG9yZGVyLmxvYWRVaW50KDMyKTtcbiAgICBpZiAoIWNyZWF0ZWRBdC5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY3JlYXRlZEF0Jyk7XG5cbiAgICAvLyBvcmRlciBzdGF0ZUluaXRcbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB7XG4gICAgICBvcmRlci5sb2FkUmVmKCk7IC8vIGRvbid0IHBhcnNlIHN0YXRlSW5pdFxuICAgIH1cblxuICAgIC8vIG9yZGVyIGJvZHlcbiAgICBsZXQgcGF5bG9hZDtcblxuICAgIGlmIChvcmRlci5nZXRGcmVlQml0cygpID4gMCkge1xuICAgICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkge1xuICAgICAgICBvcmRlciA9IG9yZGVyLmxvYWRSZWYoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyLmdldEZyZWVCaXRzKCkgPiAzMikge1xuICAgICAgICBjb25zdCBvcCA9IG9yZGVyLmxvYWRVaW50KDMyKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZEJ5dGVzID0gb3JkZXIubG9hZEJpdHMob3JkZXIuZ2V0RnJlZUJpdHMoKSk7XG4gICAgICAgIHBheWxvYWQgPSBvcC5lcShuZXcgQk4oMCkpID8gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHBheWxvYWRCeXRlcykgOiAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvQWRkcmVzczogZGVzdEFkZHJlc3MsXG4gICAgICB2YWx1ZSxcbiAgICAgIGJvdW5jZSxcbiAgICAgIHNlcW5vLFxuICAgICAgZXhwaXJlQXQsXG4gICAgICBwYXlsb2FkLFxuICAgICAgc2lnbmF0dXJlLFxuICAgICAgd2FsbGV0SWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2ZlclN0YXRlSW5pdChzbGljZTogYW55KTogYW55IHtcbiAgICBpZiAoc2xpY2UgPT09IG51bGwpIHJldHVybiB7fTtcbiAgICBzbGljZS5sb2FkUmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHNsaWNlLmxvYWRSZWYoKTtcbiAgICBjb25zdCBzZXFubyA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHNlcW5vICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2Vxbm8nKTtcbiAgICBjb25zdCB3YWxsZXRJZCA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXQgaWQnKTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdWJsaWNLZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHB1YmxpY0tleVtpXSA9IGRhdGEubG9hZFVpbnQoOCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWJsaWNLZXk6IEJ1ZmZlci5mcm9tKHB1YmxpY0tleSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUF5SDtBQUd6SCxvREFBNEI7QUFDNUIsaUNBQTJCO0FBRTNCLDZEQUF1RDtBQUV2RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFNUIsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFjOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLFdBQVcsR0FBRyxJQUFJLGdCQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUNyRSxJQUFJLEVBQ0osSUFBSSxFQUNKLENBQUMsSUFBSSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FDekQsQ0FBQztRQUNGLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQWE7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFDbkMsZ0JBQWdCLEVBQUUsV0FBVztZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGVBQWUsQ0FBQyxlQUFnQztRQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNuQixjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RixjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEYsTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdGLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWhGLE1BQU0sWUFBWSxHQUFHLGdCQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sb0JBQW9CLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRO1FBQ3BELE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLGdGQUFnRjtRQUNoRixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDbkMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU87UUFDM0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxnQkFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLFVBQVU7Z0JBQ1YsV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxvQ0FBZSxFQUFFLENBQUM7d0JBQ3ZFLG9DQUFvQzt3QkFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3pDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzdDLHlDQUF5Qzt3QkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLE9BQU8sY0FBYyxPQUFPLHFCQUFxQixjQUFjLEVBQUUsQ0FBQyxDQUFDO3dCQUMzRixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0NBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDOUQsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDdEQsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDdEQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDbEMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3hDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFNLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUM3RCxJQUFJLGdCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUMzQixJQUFJLFVBQUUsQ0FBQyxNQUFNLENBQUMsRUFDZCxJQUFJLEVBQ0osSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztRQUNGLE9BQU8sZ0JBQU0sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQW9CLEVBQUUsS0FBYSxFQUFFLFNBQWlCO1FBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRS9CLElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEIsTUFBTSxXQUFXLEdBQUcsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksZ0JBQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDeEQsU0FBUyxFQUFFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNsRCxFQUFFLEVBQUUsQ0FBQzthQUNOLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzlDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQy9CLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxnQkFBTSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE1BQU0sT0FBTyxHQUFZLEVBQUUsQ0FBQztRQUM1QixNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQzVCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUFzQjtRQUN2QyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxnQkFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBRXBGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFtQixDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0I7UUFDaEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWpILE1BQU0sT0FBTyxHQUEyQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLE9BQU87WUFDTCxZQUFZO1lBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsT0FBTztZQUNQLFlBQVk7WUFDWixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsR0FBRztZQUNqQixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO1lBQ3ZCLGNBQWM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQVU7UUFDakMsTUFBTSxLQUFLLEdBQUksSUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXpDLFNBQVM7UUFFVCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztZQUFFLE1BQU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFdEUsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEQsSUFBSSxxQkFBcUIsS0FBSyxJQUFJO1lBQUUsTUFBTSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUVqRixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVoRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksVUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRW5GLFlBQVk7UUFFWixJQUFJLFNBQVMsQ0FBQztRQUNkLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxLQUFLLEtBQUssQ0FBQztvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLFFBQVEsS0FBSyxTQUFTO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDakUsTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzdDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO2dCQUNELFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87UUFDUCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRTVELE9BQU87WUFDTCxXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFNBQVM7WUFDVCxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7U0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxrQkFBa0I7UUFFbEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQyxJQUFJLFFBQVEsS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLElBQUksRUFBRSxLQUFLLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsSUFBSSxRQUFRLEtBQUssQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV4RCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUUsTUFBTSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFFLE1BQU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFFLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLElBQUksYUFBYSxLQUFLLElBQUk7WUFBRSxNQUFNLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUUsTUFBTSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksVUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUVuRSxrQkFBa0I7UUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7UUFDM0MsQ0FBQztRQUVELGFBQWE7UUFDYixJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksY0FBYyxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsMEJBQWUsQ0FBQyxJQUFJLENBQUM7UUFDNUMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNqQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUN6RCxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ25ELENBQUM7cUJBQU0sSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzlDLGNBQWMsR0FBRyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3pELE9BQU8sR0FBRyxvQ0FBZSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7b0JBQ3BGLElBQUksQ0FBQyxlQUFlLEdBQUcsMEJBQWUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDakUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTztZQUNMLFNBQVMsRUFBRSxXQUFXO1lBQ3RCLEtBQUs7WUFDTCxNQUFNO1lBQ04sS0FBSztZQUNMLGNBQWM7WUFDZCxRQUFRO1lBQ1IsT0FBTztZQUNQLFNBQVM7WUFDVCxRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFVO1FBQ3ZDLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM5QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0MsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFFBQVEsS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU87WUFDTCxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQ2xELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEzVkQsa0NBMlZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBFbnRyeSwgUmVjaXBpZW50LCBUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHhEYXRhLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgVG9uV2ViIGZyb20gJ3RvbndlYic7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICd0b253ZWIvZGlzdC90eXBlcy9ib2MvY2VsbCc7XG5pbXBvcnQgeyBXSVRIRFJBV19PUENPREUgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5cbmNvbnN0IFdBTExFVF9JRCA9IDY5ODk4MzE5MTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHVibGljIHJlY2lwaWVudDogUmVjaXBpZW50O1xuICBwdWJsaWMgYm91bmNlYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGZyb21BZGRyZXNzQm91bmNlYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHRvQWRkcmVzc0JvdW5jZWFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmc7XG4gIHB1YmxpYyB3aXRoZHJhd0Ftb3VudDogc3RyaW5nO1xuICBzZXFubzogbnVtYmVyO1xuICBleHBpcmVUaW1lOiBudW1iZXI7XG4gIHNlbmRlcjogc3RyaW5nO1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1bnNpZ25lZE1lc3NhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBmaW5hbE1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuYm91bmNlYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZnJvbUFkZHJlc3NCb3VuY2VhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnRvQWRkcmVzc0JvdW5jZWFibGUgPSB0cnVlO1xuICB9XG5cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbmFsTWVzc2FnZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IG90aGVyRm9ybWF0ID0gbmV3IFRvbldlYi5BZGRyZXNzKHRoaXMucmVjaXBpZW50LmFkZHJlc3MpLnRvU3RyaW5nKFxuICAgICAgdHJ1ZSxcbiAgICAgIHRydWUsXG4gICAgICAhbmV3IFRvbldlYi5BZGRyZXNzKHRoaXMucmVjaXBpZW50LmFkZHJlc3MpLmlzQm91bmNlYWJsZVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl9pZCBhcyBzdHJpbmcsXG4gICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgZGVzdGluYXRpb246IHRoaXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICBkZXN0aW5hdGlvbkFsaWFzOiBvdGhlckZvcm1hdCxcbiAgICAgIGFtb3VudDogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgd2l0aGRyYXdBbW91bnQ6IHRoaXMud2l0aGRyYXdBbW91bnQsXG4gICAgICBzZXFubzogdGhpcy5zZXFubyxcbiAgICAgIGV4cGlyYXRpb25UaW1lOiB0aGlzLmV4cGlyZVRpbWUsXG4gICAgICBwdWJsaWNLZXk6IHRoaXMucHVibGljS2V5LFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLl9zaWduYXR1cmVzWzBdLFxuICAgICAgYm91bmNlYWJsZTogdGhpcy5ib3VuY2VhYmxlLFxuICAgIH07XG4gIH1cblxuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMudW5zaWduZWRNZXNzYWdlLCAnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldCB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2lnbmluZ01lc3NhZ2UgPSB0aGlzLmNyZWF0ZVNpZ25pbmdNZXNzYWdlKFdBTExFVF9JRCwgdGhpcy5zZXFubywgdGhpcy5leHBpcmVUaW1lKTtcbiAgICBjb25zdCBzZW5kTW9kZSA9IDM7XG4gICAgc2lnbmluZ01lc3NhZ2UuYml0cy53cml0ZVVpbnQ4KHNlbmRNb2RlKTtcbiAgICBjb25zdCBvdXRNc2cgPSB0aGlzLmNyZWF0ZU91dE1zZyh0aGlzLnJlY2lwaWVudC5hZGRyZXNzLCB0aGlzLnJlY2lwaWVudC5hbW91bnQsIHRoaXMubWVzc2FnZSk7XG4gICAgc2lnbmluZ01lc3NhZ2UucmVmcy5wdXNoKG91dE1zZyk7XG4gICAgdGhpcy51bnNpZ25lZE1lc3NhZ2UgPSBCdWZmZXIuZnJvbShhd2FpdCBzaWduaW5nTWVzc2FnZS5oYXNoKCkpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDAgPyB0aGlzLl9zaWduYXR1cmVzWzBdIDogQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoNjQpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgZmluYWxNZXNzYWdlID0gYXdhaXQgdGhpcy5jcmVhdGVFeHRlcm5hbE1lc3NhZ2Uoc2lnbmluZ01lc3NhZ2UsIHRoaXMuc2Vxbm8sIHNpZ25hdHVyZSk7XG5cbiAgICB0aGlzLmZpbmFsTWVzc2FnZSA9IFRvbldlYi51dGlscy5ieXRlc1RvQmFzZTY0KGF3YWl0IGZpbmFsTWVzc2FnZS50b0JvYyhmYWxzZSkpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxUeElkID0gVG9uV2ViLnV0aWxzLmJ5dGVzVG9CYXNlNjQoYXdhaXQgZmluYWxNZXNzYWdlLmhhc2goKSk7XG4gICAgdGhpcy5faWQgPSBvcmlnaW5hbFR4SWQucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvXFwrL2csICctJyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNpZ25pbmdNZXNzYWdlKHdhbGxldElkLCBzZXFubywgZXhwaXJlQXQpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQod2FsbGV0SWQsIDMyKTtcbiAgICAvLyBleHBpcmVBdCBzaG91bGQgYmUgc2V0IGFzIHBlciB0aGUgcHJvdmlkZWQgYXJnIHZhbHVlLCByZWdhcmRsZXNzIG9mIHRoZSBzZXFub1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoZXhwaXJlQXQsIDMyKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KHNlcW5vLCAzMik7XG4gICAgbWVzc2FnZS5iaXRzLndyaXRlVWludCgwLCA4KTsgLy8gb3BcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3V0TXNnKGFkZHJlc3MsIGFtb3VudCwgcGF5bG9hZCkge1xuICAgIGxldCBwYXlsb2FkQ2VsbCA9IG5ldyBUb25XZWIuYm9jLkNlbGwoKTtcbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgaWYgKHBheWxvYWQucmVmcykge1xuICAgICAgICAvLyBpcyBDZWxsXG4gICAgICAgIHBheWxvYWRDZWxsID0gcGF5bG9hZDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChwYXlsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPiAyNCAmJiBwYXlsb2FkLnN1YnN0cmluZygwLCA4KSA9PT0gV0lUSERSQVdfT1BDT0RFKSB7XG4gICAgICAgICAgICAvLyBwYXlsb2FkIGlzIGEgd2l0aGRyYXcgdHhuIG1lc3NhZ2VcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBwYXlsb2FkLnN1YnN0cmluZyg4LCAyNCk7XG4gICAgICAgICAgICBjb25zdCB3aXRoZHJhd0Ftb3VudCA9IHBheWxvYWQuc3Vic3RyaW5nKDI0KTtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlICovXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgcGF5bG9hZDogJHtwYXlsb2FkfSwgcXVlcnlJZDogJHtxdWVyeUlkfSwgd2l0aGRyYXdBbW91bnQ6ICR7d2l0aGRyYXdBbW91bnR9YCk7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludChwYXJzZUludChXSVRIRFJBV19PUENPREUsIDE2KSwgMzIpO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZVVpbnQocGFyc2VJbnQocXVlcnlJZCwgMTYpLCA2NCk7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQ29pbnMobmV3IEJOKHdpdGhkcmF3QW1vdW50KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KDAsIDMyKTtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVTdHJpbmcocGF5bG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQnl0ZXMocGF5bG9hZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJIZWFkZXIgPSBUb25XZWIuQ29udHJhY3QuY3JlYXRlSW50ZXJuYWxNZXNzYWdlSGVhZGVyKFxuICAgICAgbmV3IFRvbldlYi5BZGRyZXNzKGFkZHJlc3MpLFxuICAgICAgbmV3IEJOKGFtb3VudCksXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5ib3VuY2VhYmxlXG4gICAgKTtcbiAgICByZXR1cm4gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUNvbW1vbk1zZ0luZm8ob3JkZXJIZWFkZXIsIHVuZGVmaW5lZCwgcGF5bG9hZENlbGwpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRXh0ZXJuYWxNZXNzYWdlKHNpZ25pbmdNZXNzYWdlOiBDZWxsLCBzZXFubzogbnVtYmVyLCBzaWduYXR1cmU6IHN0cmluZyk6IFByb21pc2U8Q2VsbD4ge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgVG9uV2ViLmJvYy5DZWxsKCk7XG5cbiAgICBib2R5LmJpdHMud3JpdGVCeXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKSk7XG4gICAgYm9keS53cml0ZUNlbGwoc2lnbmluZ01lc3NhZ2UpO1xuXG4gICAgbGV0IHN0YXRlSW5pdDtcbiAgICBpZiAoc2Vxbm8gPT09IDApIHtcbiAgICAgIGNvbnN0IFdhbGxldENsYXNzID0gVG9uV2ViLldhbGxldHMuYWxsWyd2NFIyJ107XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0Q2xhc3MobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoKSwge1xuICAgICAgICBwdWJsaWNLZXk6IFRvbldlYi51dGlscy5oZXhUb0J5dGVzKHRoaXMucHVibGljS2V5KSxcbiAgICAgICAgd2M6IDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveSA9IGF3YWl0IHdhbGxldC5jcmVhdGVTdGF0ZUluaXQoKTtcbiAgICAgIHN0YXRlSW5pdCA9IGRlcGxveS5zdGF0ZUluaXQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUV4dGVybmFsTWVzc2FnZUhlYWRlcih0aGlzLnNlbmRlcik7XG4gICAgY29uc3QgcmVzdWx0TWVzc2FnZSA9IFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKGhlYWRlciwgc3RhdGVJbml0LCBib2R5KTtcbiAgICByZXR1cm4gcmVzdWx0TWVzc2FnZTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBpbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiB0aGlzLnNlbmRlcixcbiAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRoaXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNlbGwgPSBUb25XZWIuYm9jLkNlbGwub25lRnJvbUJvYyhUb25XZWIudXRpbHMuYmFzZTY0VG9CeXRlcyhyYXdUcmFuc2FjdGlvbikpO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlVHJhbnNhY3Rpb24oY2VsbCk7XG4gICAgICBwYXJzZWQudmFsdWUgPSBwYXJzZWQudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHBhcnNlZC5mcm9tQWRkcmVzcyA9IHBhcnNlZC5mcm9tQWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSk7XG4gICAgICBwYXJzZWQudG9BZGRyZXNzID0gcGFyc2VkLnRvQWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLnRvQWRkcmVzc0JvdW5jZWFibGUpO1xuICAgICAgdGhpcy5zZW5kZXIgPSBwYXJzZWQuZnJvbUFkZHJlc3M7XG4gICAgICB0aGlzLnJlY2lwaWVudCA9IHsgYWRkcmVzczogcGFyc2VkLnRvQWRkcmVzcywgYW1vdW50OiBwYXJzZWQudmFsdWUgfTtcbiAgICAgIHRoaXMud2l0aGRyYXdBbW91bnQgPSBwYXJzZWQud2l0aGRyYXdBbW91bnQ7XG4gICAgICB0aGlzLnNlcW5vID0gcGFyc2VkLnNlcW5vO1xuICAgICAgdGhpcy5wdWJsaWNLZXkgPSBwYXJzZWQucHVibGljS2V5IGFzIHN0cmluZztcbiAgICAgIHRoaXMuZXhwaXJlVGltZSA9IHBhcnNlZC5leHBpcmVBdDtcbiAgICAgIHRoaXMubWVzc2FnZSA9IHBhcnNlZC5wYXlsb2FkO1xuICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHBhcnNlZC5zaWduYXR1cmUpO1xuICAgICAgdGhpcy5ib3VuY2VhYmxlID0gcGFyc2VkLmJvdW5jZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd3aXRoZHJhd0Ftb3VudCddO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFt0aGlzLnJlY2lwaWVudF07XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdGhpcy5yZWNpcGllbnQuYW1vdW50O1xuICAgIGNvbnN0IHdpdGhkcmF3QW1vdW50ID0gdGhpcy53aXRoZHJhd0Ftb3VudDtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgICAgd2l0aGRyYXdBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2FjdGlvbihjZWxsOiBDZWxsKTogYW55IHtcbiAgICBjb25zdCBzbGljZSA9IChjZWxsIGFzIGFueSkuYmVnaW5QYXJzZSgpO1xuXG4gICAgLy8gaGVhZGVyXG5cbiAgICBpZiAoc2xpY2UubG9hZFVpbnQoMikudG9OdW1iZXIoKSAhPT0gMikgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaGVhZGVyJyk7XG5cbiAgICBjb25zdCBleHRlcm5hbFNvdXJjZUFkZHJlc3MgPSBzbGljZS5sb2FkQWRkcmVzcygpO1xuICAgIGlmIChleHRlcm5hbFNvdXJjZUFkZHJlc3MgIT09IG51bGwpIHRocm93IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsU291cmNlQWRkcmVzcycpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxEZXN0QWRkcmVzcyA9IHNsaWNlLmxvYWRBZGRyZXNzKCk7XG5cbiAgICBjb25zdCBleHRlcm5hbEltcG9ydEZlZSA9IHNsaWNlLmxvYWRDb2lucygpO1xuICAgIGlmICghZXh0ZXJuYWxJbXBvcnRGZWUuZXEobmV3IEJOKDApKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsSW1wb3J0RmVlJyk7XG5cbiAgICAvLyBzdGF0ZUluaXRcblxuICAgIGxldCBwdWJsaWNLZXk7XG4gICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgICBjb25zdCBzdGF0ZUluaXQgPSBzbGljZS5sb2FkUmVmKCk7XG4gICAgICAgIHN0YXRlSW5pdC5sb2FkUmVmKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdGF0ZUluaXQubG9hZFJlZigpO1xuICAgICAgICBjb25zdCBzZXFubyA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgICAgIGlmIChzZXFubyAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNlcW5vJyk7XG4gICAgICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXQgaWQnKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5QnVmID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleUJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHB1YmxpY0tleUJ1ZltpXSA9IGRhdGEubG9hZFVpbnQoOCk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljS2V5ID0gQnVmZmVyLmZyb20ocHVibGljS2V5QnVmKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYm9keVxuICAgIGNvbnN0IGJvZHlTbGljZSA9IHNsaWNlLmxvYWRCaXQoKSA/IHNsaWNlLmxvYWRSZWYoKSA6IHNsaWNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb21BZGRyZXNzOiBleHRlcm5hbERlc3RBZGRyZXNzLFxuICAgICAgcHVibGljS2V5LFxuICAgICAgLi4udGhpcy5wYXJzZVRyYW5zYWN0aW9uQm9keShib2R5U2xpY2UpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHJhbnNhY3Rpb25Cb2R5KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNsaWNlLmxvYWRCaXRzKDUxMikpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAvLyBzaWduaW5nIG1lc3NhZ2VcblxuICAgIGNvbnN0IHdhbGxldElkID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXRJZCcpO1xuXG4gICAgY29uc3QgZXhwaXJlQXQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcblxuICAgIGNvbnN0IHNlcW5vID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG5cbiAgICBjb25zdCBvcCA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgaWYgKG9wICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3AnKTtcblxuICAgIGNvbnN0IHNlbmRNb2RlID0gc2xpY2UubG9hZFVpbnQoOCkudG9OdW1iZXIoKTtcbiAgICBpZiAoc2VuZE1vZGUgIT09IDMpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZW5kTW9kZScpO1xuXG4gICAgbGV0IG9yZGVyID0gc2xpY2UubG9hZFJlZigpO1xuXG4gICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaW50ZXJuYWwgaGVhZGVyJyk7XG4gICAgaWYgKCFvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGlockRpc2FibGVkJyk7XG4gICAgY29uc3QgYm91bmNlID0gb3JkZXIubG9hZEJpdCgpO1xuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGJvdW5jZWQnKTtcbiAgICBjb25zdCBzb3VyY2VBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICBpZiAoc291cmNlQWRkcmVzcyAhPT0gbnVsbCkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgZXh0ZXJuYWxTb3VyY2VBZGRyZXNzJyk7XG4gICAgY29uc3QgZGVzdEFkZHJlc3MgPSBvcmRlci5sb2FkQWRkcmVzcygpO1xuICAgIGNvbnN0IHZhbHVlID0gb3JkZXIubG9hZENvaW5zKCk7XG5cbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBjdXJyZW5jeUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBpaHJGZWVzID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgaWYgKCFpaHJGZWVzLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpaHJGZWVzJyk7XG4gICAgY29uc3QgZndkRmVlcyA9IG9yZGVyLmxvYWRDb2lucygpO1xuICAgIGlmICghZndkRmVlcy5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZndkRmVlcycpO1xuICAgIGNvbnN0IGNyZWF0ZWRMdCA9IG9yZGVyLmxvYWRVaW50KDY0KTtcbiAgICBpZiAoIWNyZWF0ZWRMdC5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY3JlYXRlZEx0Jyk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgIGlmICghY3JlYXRlZEF0LmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjcmVhdGVkQXQnKTtcblxuICAgIC8vIG9yZGVyIHN0YXRlSW5pdFxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgIG9yZGVyLmxvYWRSZWYoKTsgLy8gZG9uJ3QgcGFyc2Ugc3RhdGVJbml0XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgYm9keVxuICAgIGxldCBwYXlsb2FkO1xuICAgIGxldCB3aXRoZHJhd0Ftb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIGlmIChvcmRlci5nZXRGcmVlQml0cygpID4gMCkge1xuICAgICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkge1xuICAgICAgICBvcmRlciA9IG9yZGVyLmxvYWRSZWYoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyLmdldEZyZWVCaXRzKCkgPiAzMikge1xuICAgICAgICBjb25zdCBvcGNvZGUgPSBvcmRlci5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKG9wY29kZSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWRCeXRlcyA9IG9yZGVyLmxvYWRCaXRzKG9yZGVyLmdldEZyZWVCaXRzKCkpO1xuICAgICAgICAgIHBheWxvYWQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZEJ5dGVzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IDQwOTYpIHtcbiAgICAgICAgICBjb25zdCBxdWVyeUlkID0gb3JkZXIubG9hZFVpbnQoNjQpLnRvTnVtYmVyKCk7XG4gICAgICAgICAgd2l0aGRyYXdBbW91bnQgPSBvcmRlci5sb2FkQ29pbnMoKS50b051bWJlcigpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcGF5bG9hZCA9IFdJVEhEUkFXX09QQ09ERSArIHF1ZXJ5SWQudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCAnMCcpICsgd2l0aGRyYXdBbW91bnQ7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF5bG9hZCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b0FkZHJlc3M6IGRlc3RBZGRyZXNzLFxuICAgICAgdmFsdWUsXG4gICAgICBib3VuY2UsXG4gICAgICBzZXFubyxcbiAgICAgIHdpdGhkcmF3QW1vdW50LFxuICAgICAgZXhwaXJlQXQsXG4gICAgICBwYXlsb2FkLFxuICAgICAgc2lnbmF0dXJlLFxuICAgICAgd2FsbGV0SWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2ZlclN0YXRlSW5pdChzbGljZTogYW55KTogYW55IHtcbiAgICBpZiAoc2xpY2UgPT09IG51bGwpIHJldHVybiB7fTtcbiAgICBzbGljZS5sb2FkUmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHNsaWNlLmxvYWRSZWYoKTtcbiAgICBjb25zdCBzZXFubyA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHNlcW5vICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2Vxbm8nKTtcbiAgICBjb25zdCB3YWxsZXRJZCA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXQgaWQnKTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdWJsaWNLZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHB1YmxpY0tleVtpXSA9IGRhdGEubG9hZFVpbnQoOCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWJsaWNLZXk6IEJ1ZmZlci5mcm9tKHB1YmxpY0tleSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
2
|
import { Transaction } from './transaction';
|
|
4
3
|
import BigNumber from 'bignumber.js';
|
|
5
4
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
5
|
+
export declare const WITHDRAW_OPCODE = "00001000";
|
|
6
6
|
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
7
7
|
protected _transaction: Transaction;
|
|
8
8
|
private _signatures;
|
|
@@ -27,6 +27,27 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
27
27
|
* @returns {TransactionBuilder} This transaction builder
|
|
28
28
|
*/
|
|
29
29
|
sender(senderAddress: string): this;
|
|
30
|
+
/**
|
|
31
|
+
* Sets the transaction to be bounceable or not.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} bounceable whether the transaction can be bounced
|
|
34
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
35
|
+
*/
|
|
36
|
+
bounceable(bounceable: boolean): this;
|
|
37
|
+
/**
|
|
38
|
+
* Sets the fromAddress to be in bounceable format or not.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
41
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
42
|
+
*/
|
|
43
|
+
fromAddressBounceable(bounceable: boolean): this;
|
|
44
|
+
/**
|
|
45
|
+
* Sets the toAddress to be in bounceable format or not.
|
|
46
|
+
*
|
|
47
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
48
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
49
|
+
*/
|
|
50
|
+
toAddressBounceable(bounceable: boolean): this;
|
|
30
51
|
fee(feeOptions: FeeOptions): this;
|
|
31
52
|
/** @inheritdoc */
|
|
32
53
|
protected fromImplementation(rawTransaction: string): Transaction;
|
|
@@ -43,6 +64,7 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
43
64
|
/** @inheritdoc */
|
|
44
65
|
validateValue(value: BigNumber): void;
|
|
45
66
|
setMessage(msg: string): TransactionBuilder;
|
|
67
|
+
setWithdrawMessage(): TransactionBuilder;
|
|
46
68
|
sequenceNumber(number: number): TransactionBuilder;
|
|
47
69
|
expireTime(number: number): TransactionBuilder;
|
|
48
70
|
publicKey(key: string): TransactionBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,UAAU,EACV,SAAS,IAAI,aAAa,EAE1B,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,WAAW,CAAmB;gBAE1B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM5C;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAIvD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAKnC;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAKrC;;;;;OAKG;IACH,qBAAqB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAMhD;;;;;OAKG;IACH,mBAAmB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAU9C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIjC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAMjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAQpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAK3C,kBAAkB,IAAI,kBAAkB;IAMxC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAKlD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAK9C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;CAI3C"}
|
|
@@ -3,11 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TransactionBuilder = void 0;
|
|
6
|
+
exports.TransactionBuilder = exports.WITHDRAW_OPCODE = void 0;
|
|
7
7
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
8
|
const transaction_1 = require("./transaction");
|
|
9
9
|
const utils_1 = __importDefault(require("./utils"));
|
|
10
10
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
11
|
+
const tonweb_1 = __importDefault(require("tonweb"));
|
|
12
|
+
exports.WITHDRAW_OPCODE = '00001000';
|
|
11
13
|
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
12
14
|
constructor(coinConfig) {
|
|
13
15
|
super(coinConfig);
|
|
@@ -28,7 +30,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
28
30
|
}
|
|
29
31
|
/** @inheritDoc */
|
|
30
32
|
addSignature(publicKey, signature) {
|
|
31
|
-
this.transaction.signature
|
|
33
|
+
this.transaction.signature[0] = signature.toString('hex');
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Sets the sender of this transaction.
|
|
@@ -41,23 +43,51 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
41
43
|
this.transaction.sender = senderAddress;
|
|
42
44
|
return this;
|
|
43
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Sets the transaction to be bounceable or not.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} bounceable whether the transaction can be bounced
|
|
50
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
51
|
+
*/
|
|
52
|
+
bounceable(bounceable) {
|
|
53
|
+
this.transaction.bounceable = bounceable;
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sets the fromAddress to be in bounceable format or not.
|
|
58
|
+
*
|
|
59
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
60
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
61
|
+
*/
|
|
62
|
+
fromAddressBounceable(bounceable) {
|
|
63
|
+
this.transaction.fromAddressBounceable = bounceable;
|
|
64
|
+
this.sender(new tonweb_1.default.Address(this.transaction.sender).toString(true, true, bounceable));
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Sets the toAddress to be in bounceable format or not.
|
|
69
|
+
*
|
|
70
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
71
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
72
|
+
*/
|
|
73
|
+
toAddressBounceable(bounceable) {
|
|
74
|
+
this.transaction.toAddressBounceable = bounceable;
|
|
75
|
+
this.transaction.recipient.address = new tonweb_1.default.Address(this.transaction.recipient.address).toString(true, true, bounceable);
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
44
78
|
fee(feeOptions) {
|
|
45
79
|
throw new Error('Method not implemented.');
|
|
46
80
|
}
|
|
47
81
|
/** @inheritdoc */
|
|
48
82
|
fromImplementation(rawTransaction) {
|
|
83
|
+
this.transaction.transactionType = this.transactionType;
|
|
49
84
|
this.transaction.fromRawTransaction(rawTransaction);
|
|
50
85
|
return this.transaction;
|
|
51
86
|
}
|
|
52
87
|
/** @inheritdoc */
|
|
53
88
|
async buildImplementation() {
|
|
89
|
+
this.transaction.transactionType = this.transactionType;
|
|
54
90
|
await this.transaction.build();
|
|
55
|
-
// if (this.si) {
|
|
56
|
-
// this.transaction.sign(this._signer);
|
|
57
|
-
// }
|
|
58
|
-
// if (this._signatures?.length > 0) {
|
|
59
|
-
// this.transaction.constructSignedPayload(this._signatures[0].signature);
|
|
60
|
-
// }
|
|
61
91
|
this.transaction.loadInputsAndOutputs();
|
|
62
92
|
return this.transaction;
|
|
63
93
|
}
|
|
@@ -94,6 +124,11 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
94
124
|
this.transaction.message = msg;
|
|
95
125
|
return this;
|
|
96
126
|
}
|
|
127
|
+
setWithdrawMessage() {
|
|
128
|
+
const queryId = '0000000000000000';
|
|
129
|
+
this.transaction.message = exports.WITHDRAW_OPCODE + queryId + this.transaction.withdrawAmount;
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
97
132
|
sequenceNumber(number) {
|
|
98
133
|
this.transaction.seqno = number;
|
|
99
134
|
return this;
|
|
@@ -108,4 +143,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
108
143
|
}
|
|
109
144
|
}
|
|
110
145
|
exports.TransactionBuilder = TransactionBuilder;
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBQzlCLCtDQUE0QztBQUM1QyxvREFBNEI7QUFDNUIsZ0VBQXFDO0FBR3JDLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUlyRSxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUhaLGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUlwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBUUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixZQUFZLENBQUMsU0FBd0IsRUFBRSxTQUFpQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsYUFBcUI7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxVQUFzQjtRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixvQkFBb0I7UUFDcEIsNENBQTRDO1FBQzVDLE9BQU87UUFDUCx5Q0FBeUM7UUFDekMsK0VBQStFO1FBQy9FLE9BQU87UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGVBQWUsQ0FBQyxPQUFvQixFQUFFLGFBQXNCO1FBQzFELElBQUksQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXLENBQUMsR0FBWTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixzQkFBc0IsQ0FBQyxjQUFzQjtRQUMzQyxPQUFPO0lBQ1QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUF5QjtRQUMzQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxzQkFBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVc7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBM0hELGdEQTJIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEZlZU9wdGlvbnMsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlczogU2lnbmF0dXJlW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5Db25maWcpO1xuICB9XG5cbiAgLy8gZ2V0IGFuZCBzZXQgcmVnaW9uXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZTtcblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNpZ25hdHVyZS5wdXNoKHNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbmRlciBvZiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBUaGlzIGFjY291bnQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgcGF5aW5nIHRyYW5zYWN0aW9uIGZlZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZW5kZXJBZGRyZXNzIHRoZSBhY2NvdW50IHRoYXQgaXMgc2VuZGluZyB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc2VuZGVyKHNlbmRlckFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2VuZGVyID0gc2VuZGVyQWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZlZShmZWVPcHRpb25zOiBGZWVPcHRpb25zKTogdGhpcyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uYnVpbGQoKTtcbiAgICAvLyAgICBpZiAodGhpcy5zaSkge1xuICAgIC8vICAgICAgdGhpcy50cmFuc2FjdGlvbi5zaWduKHRoaXMuX3NpZ25lcik7XG4gICAgLy8gICAgfVxuICAgIC8vICAgIGlmICh0aGlzLl9zaWduYXR1cmVzPy5sZW5ndGggPiAwKSB7XG4gICAgLy8gICAgICB0aGlzLnRyYW5zYWN0aW9uLmNvbnN0cnVjdFNpZ25lZFBheWxvYWQodGhpcy5fc2lnbmF0dXJlc1swXS5zaWduYXR1cmUpO1xuICAgIC8vICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBub3QgZGVmaW5lZCcpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0cmFuc2FjdGlvbi5yZWNpcGllbnQpO1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKHRyYW5zYWN0aW9uLnJlY2lwaWVudC5hbW91bnQpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TWVzc2FnZShtc2c6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5tZXNzYWdlID0gbXNnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2VxdWVuY2VOdW1iZXIobnVtYmVyOiBudW1iZXIpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2Vxbm8gPSBudW1iZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBleHBpcmVUaW1lKG51bWJlcjogbnVtYmVyKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmV4cGlyZVRpbWUgPSBudW1iZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb24ucHVibGljS2V5ID0ga2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBQzlCLCtDQUE0QztBQUM1QyxvREFBNEI7QUFDNUIsZ0VBQXFDO0FBRXJDLG9EQUE0QjtBQUVmLFFBQUEsZUFBZSxHQUFHLFVBQVUsQ0FBQztBQUUxQyxNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUFJckUsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFIWixnQkFBVyxHQUFnQixFQUFFLENBQUM7UUFJcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQVFELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXLENBQUMsV0FBd0I7UUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEdBQVk7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsWUFBWSxDQUFDLFNBQXdCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGFBQXFCO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJ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SyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyx1QkFBZSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztRQUN2RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQXBLRCxnREFvS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBGZWVPcHRpb25zLFxuICBQdWJsaWNLZXkgYXMgQmFzZVB1YmxpY0tleSxcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgVG9uV2ViIGZyb20gJ3RvbndlYic7XG5cbmV4cG9ydCBjb25zdCBXSVRIRFJBV19PUENPREUgPSAnMDAwMDEwMDAnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF9zaWduYXR1cmVzOiBTaWduYXR1cmVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oY29pbkNvbmZpZyk7XG4gIH1cblxuICAvLyBnZXQgYW5kIHNldCByZWdpb25cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbmF0dXJlWzBdID0gc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZW5kZXIgb2YgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogVGhpcyBhY2NvdW50IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHBheWluZyB0cmFuc2FjdGlvbiBmZWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VuZGVyQWRkcmVzcyB0aGUgYWNjb3VudCB0aGF0IGlzIHNlbmRpbmcgdGhpcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHNlbmRlcihzZW5kZXJBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNlbmRlciA9IHNlbmRlckFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gdG8gYmUgYm91bmNlYWJsZSBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib3VuY2VhYmxlIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGNhbiBiZSBib3VuY2VkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgYm91bmNlYWJsZShib3VuY2VhYmxlOiBib29sZWFuKTogdGhpcyB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5ib3VuY2VhYmxlID0gYm91bmNlYWJsZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmcm9tQWRkcmVzcyB0byBiZSBpbiBib3VuY2VhYmxlIGZvcm1hdCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib3VuY2VhYmxlIHdoZXRoZXIgdGhlIGFkZHJlc3MgZm9ybWF0IGlzIGJvdW5jZWFibGVcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBmcm9tQWRkcmVzc0JvdW5jZWFibGUoYm91bmNlYWJsZTogYm9vbGVhbik6IHRoaXMge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZnJvbUFkZHJlc3NCb3VuY2VhYmxlID0gYm91bmNlYWJsZTtcbiAgICB0aGlzLnNlbmRlcihuZXcgVG9uV2ViLkFkZHJlc3ModGhpcy50cmFuc2FjdGlvbi5zZW5kZXIpLnRvU3RyaW5nKHRydWUsIHRydWUsIGJvdW5jZWFibGUpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0b0FkZHJlc3MgdG8gYmUgaW4gYm91bmNlYWJsZSBmb3JtYXQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYm91bmNlYWJsZSB3aGV0aGVyIHRoZSBhZGRyZXNzIGZvcm1hdCBpcyBib3VuY2VhYmxlXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgdG9BZGRyZXNzQm91bmNlYWJsZShib3VuY2VhYmxlOiBib29sZWFuKTogdGhpcyB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50b0FkZHJlc3NCb3VuY2VhYmxlID0gYm91bmNlYWJsZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnJlY2lwaWVudC5hZGRyZXNzID0gbmV3IFRvbldlYi5BZGRyZXNzKHRoaXMudHJhbnNhY3Rpb24ucmVjaXBpZW50LmFkZHJlc3MpLnRvU3RyaW5nKFxuICAgICAgdHJ1ZSxcbiAgICAgIHRydWUsXG4gICAgICBib3VuY2VhYmxlXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZlZShmZWVPcHRpb25zOiBGZWVPcHRpb25zKTogdGhpcyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uVHlwZSA9IHRoaXMudHJhbnNhY3Rpb25UeXBlO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUgPSB0aGlzLnRyYW5zYWN0aW9uVHlwZTtcbiAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLmJ1aWxkKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gbm90IGRlZmluZWQnKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModHJhbnNhY3Rpb24ucmVjaXBpZW50KTtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcih0cmFuc2FjdGlvbi5yZWNpcGllbnQuYW1vdW50KSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuXG4gIHNldE1lc3NhZ2UobXNnOiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb24ubWVzc2FnZSA9IG1zZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFdpdGhkcmF3TWVzc2FnZSgpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IHF1ZXJ5SWQgPSAnMDAwMDAwMDAwMDAwMDAwMCc7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5tZXNzYWdlID0gV0lUSERSQVdfT1BDT0RFICsgcXVlcnlJZCArIHRoaXMudHJhbnNhY3Rpb24ud2l0aGRyYXdBbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXF1ZW5jZU51bWJlcihudW1iZXI6IG51bWJlcik6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXFubyA9IG51bWJlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGV4cGlyZVRpbWUobnVtYmVyOiBudW1iZXIpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZXhwaXJlVGltZSA9IG51bWJlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpY0tleShrZXk6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5wdWJsaWNLZXkgPSBrZXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,12 +2,17 @@ import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
|
|
|
2
2
|
import { TransactionBuilder } from './transactionBuilder';
|
|
3
3
|
import { TransferBuilder } from './transferBuilder';
|
|
4
4
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
5
|
+
import { SingleNominatorWithdrawBuilder } from './singleNominatorWithdrawBuilder';
|
|
5
6
|
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
6
7
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
7
8
|
/** @inheritdoc */
|
|
8
9
|
from(raw: string): TransactionBuilder;
|
|
9
10
|
/** @inheritdoc */
|
|
10
11
|
getTransferBuilder(): TransferBuilder;
|
|
12
|
+
/**
|
|
13
|
+
* Returns a specific builder to create a TON withdraw transaction
|
|
14
|
+
*/
|
|
15
|
+
getSingleNominatorWithdrawBuilder(): SingleNominatorWithdrawBuilder;
|
|
11
16
|
/** @inheritdoc */
|
|
12
17
|
getWalletInitializationBuilder(): void;
|
|
13
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAGlF,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAG7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAsBrC,kBAAkB;IAClB,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,iCAAiC,IAAI,8BAA8B;IAInE,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;CAGvC"}
|
|
@@ -3,24 +3,49 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TransactionBuilderFactory = void 0;
|
|
4
4
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
5
|
const transferBuilder_1 = require("./transferBuilder");
|
|
6
|
+
const singleNominatorWithdrawBuilder_1 = require("./singleNominatorWithdrawBuilder");
|
|
7
|
+
const transaction_1 = require("./transaction");
|
|
6
8
|
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
7
9
|
constructor(_coinConfig) {
|
|
8
10
|
super(_coinConfig);
|
|
9
11
|
}
|
|
10
12
|
/** @inheritdoc */
|
|
11
13
|
from(raw) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
let builder;
|
|
15
|
+
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
16
|
+
tx.fromRawTransaction(raw);
|
|
17
|
+
try {
|
|
18
|
+
switch (tx.type) {
|
|
19
|
+
case sdk_core_1.TransactionType.Send:
|
|
20
|
+
builder = this.getTransferBuilder();
|
|
21
|
+
break;
|
|
22
|
+
case sdk_core_1.TransactionType.SingleNominatorWithdraw:
|
|
23
|
+
builder = this.getSingleNominatorWithdrawBuilder();
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
throw new sdk_core_1.InvalidTransactionError('unsupported transaction');
|
|
27
|
+
}
|
|
28
|
+
builder.from(raw);
|
|
29
|
+
return builder;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
throw e;
|
|
33
|
+
}
|
|
15
34
|
}
|
|
16
35
|
/** @inheritdoc */
|
|
17
36
|
getTransferBuilder() {
|
|
18
37
|
return new transferBuilder_1.TransferBuilder(this._coinConfig);
|
|
19
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns a specific builder to create a TON withdraw transaction
|
|
41
|
+
*/
|
|
42
|
+
getSingleNominatorWithdrawBuilder() {
|
|
43
|
+
return new singleNominatorWithdrawBuilder_1.SingleNominatorWithdrawBuilder(this._coinConfig);
|
|
44
|
+
}
|
|
20
45
|
/** @inheritdoc */
|
|
21
46
|
getWalletInitializationBuilder() {
|
|
22
47
|
throw new Error('Method not implemented.');
|
|
23
48
|
}
|
|
24
49
|
}
|
|
25
50
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0c7QUFFL0csdURBQW9EO0FBRXBELHFGQUFrRjtBQUNsRiwrQ0FBNEM7QUFFNUMsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFDMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBVztRQUNkLElBQUksT0FBMkIsQ0FBQztRQUNoQyxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsS0FBSywwQkFBZSxDQUFDLElBQUk7b0JBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDcEMsTUFBTTtnQkFDUixLQUFLLDBCQUFlLENBQUMsdUJBQXVCO29CQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7b0JBQ25ELE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQjtRQUNoQixPQUFPLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUNBQWlDO1FBQy9CLE9BQU8sSUFBSSwrREFBOEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw4QkFBOEI7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQTNDRCw4REEyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFNpbmdsZU5vbWluYXRvcldpdGhkcmF3QnVpbGRlciB9IGZyb20gJy4vc2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGxldCBidWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhdyk7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodHgudHlwZSkge1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICAgIGJ1aWxkZXIgPSB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdzpcbiAgICAgICAgICBidWlsZGVyID0gdGhpcy5nZXRTaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ3Vuc3VwcG9ydGVkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBidWlsZGVyLmZyb20ocmF3KTtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcigpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzcGVjaWZpYyBidWlsZGVyIHRvIGNyZWF0ZSBhIFRPTiB3aXRoZHJhdyB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0U2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyKCk6IFNpbmdsZU5vbWluYXRvcldpdGhkcmF3QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBTaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxufVxuIl19
|