@bitgo-beta/sdk-coin-xtz 1.4.3-alpha.40 → 1.4.3-alpha.401
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/.mocharc.yml +1 -1
- package/CHANGELOG.md +678 -0
- package/package.json +12 -11
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -30
- package/dist/src/lib/address.d.ts +0 -8
- package/dist/src/lib/address.d.ts.map +0 -1
- package/dist/src/lib/address.js +0 -10
- package/dist/src/lib/iface.d.ts +0 -115
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -3
- package/dist/src/lib/index.d.ts +0 -10
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -37
- package/dist/src/lib/keyPair.d.ts +0 -40
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -135
- package/dist/src/lib/multisigUtils.d.ts +0 -134
- package/dist/src/lib/multisigUtils.d.ts.map +0 -1
- package/dist/src/lib/multisigUtils.js +0 -1180
- package/dist/src/lib/transaction.d.ts +0 -119
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -315
- package/dist/src/lib/transactionBuilder.d.ts +0 -171
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -453
- package/dist/src/lib/transferBuilder.d.ts +0 -24
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -64
- package/dist/src/lib/utils.d.ts +0 -265
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -460
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -11
- package/dist/src/txtz.d.ts +0 -13
- package/dist/src/txtz.d.ts.map +0 -1
- package/dist/src/txtz.js +0 -14
- package/dist/src/xtz.d.ts +0 -80
- package/dist/src/xtz.d.ts.map +0 -1
- package/dist/src/xtz.js +0 -189
|
@@ -1,1180 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.forwarderOriginationOperation = exports.getOwnersPublicKeys = exports.genericMultisigOriginationOperation = exports.revealOperation = exports.genericMultisigDataToSign = exports.getMultisigTransferSignatures = exports.updateMultisigTransferSignatures = exports.multisigTransactionOperation = exports.singlesigTransactionOperation = exports.getOriginationDataFromOperation = exports.getMultisigTransferDataFromOperation = void 0;
|
|
23
|
-
const _ = __importStar(require("lodash"));
|
|
24
|
-
const utils_1 = require("./utils");
|
|
25
|
-
// Default n of m for multisig wallets
|
|
26
|
-
const DEFAULT_N = 2;
|
|
27
|
-
const DEFAULT_M = 3;
|
|
28
|
-
/**
|
|
29
|
-
* Helper method to get the transfer details from a generic multisig transaction operation.
|
|
30
|
-
*
|
|
31
|
-
* @param {TransactionOp} operation A transaction operation JSON
|
|
32
|
-
* @returns {TransferData} Information about the destination, token and transfer amount
|
|
33
|
-
*/
|
|
34
|
-
function getMultisigTransferDataFromOperation(operation) {
|
|
35
|
-
const fee = {
|
|
36
|
-
fee: operation.fee,
|
|
37
|
-
gasLimit: operation.gas_limit,
|
|
38
|
-
storageLimit: operation.storage_limit,
|
|
39
|
-
};
|
|
40
|
-
if (!operation.parameters) {
|
|
41
|
-
// Singlesig transaction
|
|
42
|
-
return {
|
|
43
|
-
coin: 'mutez',
|
|
44
|
-
from: operation.source,
|
|
45
|
-
to: operation.destination,
|
|
46
|
-
amount: operation.amount,
|
|
47
|
-
fee,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
// These follow the structure from the response of genericMultisigTransferParams()
|
|
51
|
-
const transferArgs = operation.parameters.value.args[0].args[1].args[0];
|
|
52
|
-
const accountType = transferArgs[3].prim;
|
|
53
|
-
const counter = operation.parameters.value.args[0].args[0].int;
|
|
54
|
-
// In multisig transactions, the wallet contract is the destination
|
|
55
|
-
const from = operation.destination;
|
|
56
|
-
let accountTypeIndex;
|
|
57
|
-
switch (accountType) {
|
|
58
|
-
case 'IMPLICIT_ACCOUNT':
|
|
59
|
-
accountTypeIndex = 4;
|
|
60
|
-
break;
|
|
61
|
-
case 'CONTRACT':
|
|
62
|
-
accountTypeIndex = 5;
|
|
63
|
-
break;
|
|
64
|
-
default:
|
|
65
|
-
throw new Error('Invalid contract parameters');
|
|
66
|
-
}
|
|
67
|
-
return {
|
|
68
|
-
coin: transferArgs[accountTypeIndex].args[0].prim,
|
|
69
|
-
from,
|
|
70
|
-
to: transferArgs[2].args[1].string,
|
|
71
|
-
amount: transferArgs[accountTypeIndex].args[1].int,
|
|
72
|
-
fee,
|
|
73
|
-
counter,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
exports.getMultisigTransferDataFromOperation = getMultisigTransferDataFromOperation;
|
|
77
|
-
/**
|
|
78
|
-
* Helper method to get the wallet or address initialization tx from an origination operation
|
|
79
|
-
*
|
|
80
|
-
* @param {OriginationOp} operation
|
|
81
|
-
* @returns {OriginationData} Information about the wallet contract creating a forwarder contract
|
|
82
|
-
*/
|
|
83
|
-
function getOriginationDataFromOperation(operation) {
|
|
84
|
-
const fee = {
|
|
85
|
-
fee: operation.fee,
|
|
86
|
-
gasLimit: operation.gas_limit,
|
|
87
|
-
storageLimit: operation.storage_limit,
|
|
88
|
-
};
|
|
89
|
-
const { source: from, counter, balance } = operation;
|
|
90
|
-
// Transactions initializing a forwarder contract contain the address of the wallet contract
|
|
91
|
-
const forwarderDestination = _.get(operation, 'script.code[2].args[0][3].args[0][0].args[1].string');
|
|
92
|
-
return {
|
|
93
|
-
fee,
|
|
94
|
-
counter,
|
|
95
|
-
balance,
|
|
96
|
-
from,
|
|
97
|
-
forwarderDestination,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
exports.getOriginationDataFromOperation = getOriginationDataFromOperation;
|
|
101
|
-
/**
|
|
102
|
-
* Helper method to build a singlesig transaction operation.
|
|
103
|
-
*
|
|
104
|
-
* @param {string} counter Source account next counter
|
|
105
|
-
* @param {string} source The account that will pay for fees, and in singlesig transactions, where
|
|
106
|
-
* the funds are taken from
|
|
107
|
-
* @param {string} amount The amount in mutez to be transferred
|
|
108
|
-
* @param {string} destination The account address to send the funds to
|
|
109
|
-
* @param {string} fee Fees in mutez to pay by the source account
|
|
110
|
-
* @param {string} gasLimit Maximum amount in mutez to spend in gas fees
|
|
111
|
-
* @param {string} storageLimit Maximum amount in mutez to spend in storage fees
|
|
112
|
-
* @returns {TransactionOp}A Tezos transaction operation
|
|
113
|
-
*/
|
|
114
|
-
function singlesigTransactionOperation(counter, source, amount, destination, fee = utils_1.DEFAULT_FEE.TRANSFER.toString(), gasLimit = utils_1.DEFAULT_GAS_LIMIT.TRANSFER.toString(), storageLimit = utils_1.DEFAULT_STORAGE_LIMIT.TRANSFER.toString()) {
|
|
115
|
-
return {
|
|
116
|
-
kind: 'transaction',
|
|
117
|
-
source,
|
|
118
|
-
fee,
|
|
119
|
-
counter,
|
|
120
|
-
gas_limit: gasLimit,
|
|
121
|
-
storage_limit: storageLimit,
|
|
122
|
-
amount,
|
|
123
|
-
destination,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
exports.singlesigTransactionOperation = singlesigTransactionOperation;
|
|
127
|
-
/**
|
|
128
|
-
* Create a multisig wallet transaction operation.
|
|
129
|
-
*
|
|
130
|
-
* @see {@link transactionOperation}
|
|
131
|
-
* @param {string} counter Source account next counter
|
|
132
|
-
* @param {string} source The account that will pay for fees, and in singlesig transactions, where
|
|
133
|
-
* the funds are taken from
|
|
134
|
-
* @param {string} amount The amount in mutez to be transferred
|
|
135
|
-
* @param {string} contractAddress If it is a multisig transfer, the smart contract address with the
|
|
136
|
-
* funds to be transferred from
|
|
137
|
-
* @param {string} contractCounter If it is a multisig transfer, the smart contract counter to use
|
|
138
|
-
* in the next transaction
|
|
139
|
-
* @param {string} destinationAddress An implicit or originated address to transfer fudns to
|
|
140
|
-
* @param {string[]} signatures signatures List of signatures authorizing the funds transfer form
|
|
141
|
-
* the multisig wallet
|
|
142
|
-
* @param {string} fee Fees in mutez to pay by the source account
|
|
143
|
-
* @param {string} gasLimit Maximum amount in mutez to spend in gas fees
|
|
144
|
-
* @param {string} storageLimit Maximum amount in mutez to spend in storage fees
|
|
145
|
-
* @param {number} m The number of signers (owners) for the multisig wallet being used. Default is 3
|
|
146
|
-
* @returns {TransactionOp} A Tezos operation with a generic multisig transfer
|
|
147
|
-
*/
|
|
148
|
-
function multisigTransactionOperation(counter, source, amount, contractAddress, contractCounter, destinationAddress, signatures, fee = utils_1.DEFAULT_FEE.TRANSFER.toString(), gasLimit = utils_1.DEFAULT_GAS_LIMIT.TRANSFER.toString(), storageLimit = utils_1.DEFAULT_STORAGE_LIMIT.TRANSFER.toString(), m = DEFAULT_M) {
|
|
149
|
-
return {
|
|
150
|
-
kind: 'transaction',
|
|
151
|
-
source,
|
|
152
|
-
fee,
|
|
153
|
-
counter,
|
|
154
|
-
gas_limit: gasLimit,
|
|
155
|
-
storage_limit: storageLimit,
|
|
156
|
-
amount: '0',
|
|
157
|
-
destination: contractAddress,
|
|
158
|
-
parameters: genericMultisigTransferParams(destinationAddress, amount, contractCounter, signatures, m),
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
exports.multisigTransactionOperation = multisigTransactionOperation;
|
|
162
|
-
/**
|
|
163
|
-
* Helper function to build the parameters to call the generic multisig smart contract with.
|
|
164
|
-
*
|
|
165
|
-
* @param {string} destinationAddress An implicit or originated address
|
|
166
|
-
* @param {number} amount Number of Mutez to be transferred
|
|
167
|
-
* @param {string} contractCounter Multisig contract counter number
|
|
168
|
-
* @param {IndexedSignature[]} signatures List of transactions and their order
|
|
169
|
-
* @param {number} m The multisig wallet total number of signers (owners)
|
|
170
|
-
* @returns The parameters object
|
|
171
|
-
*/
|
|
172
|
-
function genericMultisigTransferParams(destinationAddress, amount, contractCounter, signatures, m) {
|
|
173
|
-
const transactionSignatures = buildSignatures(signatures);
|
|
174
|
-
return {
|
|
175
|
-
entrypoint: 'main',
|
|
176
|
-
value: {
|
|
177
|
-
prim: 'Pair',
|
|
178
|
-
args: [
|
|
179
|
-
{
|
|
180
|
-
prim: 'Pair',
|
|
181
|
-
args: [{ int: contractCounter }, { prim: 'Left', args: [transferToAccount(destinationAddress, amount)] }],
|
|
182
|
-
},
|
|
183
|
-
transactionSignatures,
|
|
184
|
-
],
|
|
185
|
-
},
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Replace the signatures in a multisig transaction operation with new ones.
|
|
190
|
-
*
|
|
191
|
-
* @param {TransactionOp} transaction Transaction to mutate
|
|
192
|
-
* @param {IndexedSignature[]} signatures List of transactions and their order
|
|
193
|
-
*/
|
|
194
|
-
function updateMultisigTransferSignatures(transaction, signatures) {
|
|
195
|
-
transaction.parameters.value.args[1] = buildSignatures(signatures, transaction.parameters.value.args[1]);
|
|
196
|
-
}
|
|
197
|
-
exports.updateMultisigTransferSignatures = updateMultisigTransferSignatures;
|
|
198
|
-
/**
|
|
199
|
-
* Ge the list if multisig signatures if any in a convenient format.
|
|
200
|
-
*
|
|
201
|
-
* @param {TransactionOp} transaction The transaction to search the signatures in
|
|
202
|
-
* @returns {IndexedSignature[]} A list of signatures and their order in teh transfer script
|
|
203
|
-
*/
|
|
204
|
-
function getMultisigTransferSignatures(transaction) {
|
|
205
|
-
const signatures = [];
|
|
206
|
-
if (!transaction.parameters && !transaction.parameters.value && !transaction.parameters.value) {
|
|
207
|
-
return [];
|
|
208
|
-
}
|
|
209
|
-
const rawSignatures = transaction.parameters.value.args[1];
|
|
210
|
-
for (let i = 0; i < rawSignatures.length; i++) {
|
|
211
|
-
if (rawSignatures[i].prim === 'Some') {
|
|
212
|
-
signatures.push({
|
|
213
|
-
signature: rawSignatures[i].args[0].string,
|
|
214
|
-
index: i,
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return signatures;
|
|
219
|
-
}
|
|
220
|
-
exports.getMultisigTransferSignatures = getMultisigTransferSignatures;
|
|
221
|
-
/**
|
|
222
|
-
* Build a list of ordered signatures, putting a None primitive for the missing indexes.
|
|
223
|
-
*
|
|
224
|
-
* @param {IndexedSignature[]} signatures List of transactions and their order
|
|
225
|
-
* @param {number} m Size of the signature list
|
|
226
|
-
* @param {any[]} existingSignatures List of existing signatures to merge with the generated ones
|
|
227
|
-
* @returns {any[]} List of signatures in the right order
|
|
228
|
-
*/
|
|
229
|
-
function buildSignatures(signatures, existingSignatures = [], m = DEFAULT_M) {
|
|
230
|
-
// Initialize the array with the existing signatures and/or empty objects
|
|
231
|
-
const transactionSignatures = existingSignatures;
|
|
232
|
-
const size = existingSignatures.length;
|
|
233
|
-
if (size > m) {
|
|
234
|
-
throw new Error('Too many signatures. Expected less than ' + m + ' got ' + size);
|
|
235
|
-
}
|
|
236
|
-
for (let i = size; i < m; i++) {
|
|
237
|
-
transactionSignatures.push({ prim: 'None' });
|
|
238
|
-
}
|
|
239
|
-
// Replace the empty signatures for the real ones based on the right index
|
|
240
|
-
signatures.forEach((s) => {
|
|
241
|
-
if (s.index) {
|
|
242
|
-
transactionSignatures[s.index] = { prim: 'Some', args: [{ string: s.signature }] };
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
for (let i = 0; i < transactionSignatures.length; i++) {
|
|
246
|
-
// Search for the first "null" signature
|
|
247
|
-
if (transactionSignatures[i].prim === 'None') {
|
|
248
|
-
transactionSignatures[i] = { prim: 'Some', args: [{ string: s.signature }] };
|
|
249
|
-
break;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
return transactionSignatures;
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Helper function to build the Michelson script to be signed to transfer funds from a multisig
|
|
258
|
-
* wallet.
|
|
259
|
-
*
|
|
260
|
-
* @param contractAddress The multisig smart contract address
|
|
261
|
-
* @param {string} destinationAddress The destination account address (implicit or originated)
|
|
262
|
-
* @param {number} amount Number of mutez to transfer
|
|
263
|
-
* @param {string} contractCounter Wallet counter to use in the transaction
|
|
264
|
-
* @returns A JSON representation of the Michelson script to sign and approve a transfer
|
|
265
|
-
*/
|
|
266
|
-
function genericMultisigDataToSign(contractAddress, destinationAddress, amount, contractCounter) {
|
|
267
|
-
const data = {
|
|
268
|
-
prim: 'Pair',
|
|
269
|
-
args: [
|
|
270
|
-
{ int: contractCounter },
|
|
271
|
-
{
|
|
272
|
-
prim: 'Left',
|
|
273
|
-
args: [transferToAccount(destinationAddress, amount)],
|
|
274
|
-
},
|
|
275
|
-
],
|
|
276
|
-
};
|
|
277
|
-
const type = {
|
|
278
|
-
prim: 'pair',
|
|
279
|
-
args: [
|
|
280
|
-
{
|
|
281
|
-
prim: 'nat',
|
|
282
|
-
annots: ['%counter'],
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
prim: 'or',
|
|
286
|
-
args: [
|
|
287
|
-
{
|
|
288
|
-
prim: 'lambda',
|
|
289
|
-
args: [
|
|
290
|
-
{ prim: 'unit' },
|
|
291
|
-
{
|
|
292
|
-
prim: 'list',
|
|
293
|
-
args: [{ prim: 'operation' }],
|
|
294
|
-
},
|
|
295
|
-
],
|
|
296
|
-
annots: ['%operation'],
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
prim: 'pair',
|
|
300
|
-
args: [
|
|
301
|
-
{
|
|
302
|
-
prim: 'nat',
|
|
303
|
-
annots: ['%threshold'],
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
prim: 'list',
|
|
307
|
-
args: [{ prim: 'key' }],
|
|
308
|
-
annots: ['%keys'],
|
|
309
|
-
},
|
|
310
|
-
],
|
|
311
|
-
annots: ['%change_keys'],
|
|
312
|
-
},
|
|
313
|
-
],
|
|
314
|
-
annots: [':action'],
|
|
315
|
-
},
|
|
316
|
-
],
|
|
317
|
-
annots: [':payload'],
|
|
318
|
-
};
|
|
319
|
-
return buildPair(data, type, contractAddress);
|
|
320
|
-
}
|
|
321
|
-
exports.genericMultisigDataToSign = genericMultisigDataToSign;
|
|
322
|
-
/**
|
|
323
|
-
* Util function to build a Michelson Pair object.
|
|
324
|
-
*
|
|
325
|
-
* @param data
|
|
326
|
-
* @param type
|
|
327
|
-
* @param contractAddress
|
|
328
|
-
*/
|
|
329
|
-
function buildPair(data, type, contractAddress) {
|
|
330
|
-
return {
|
|
331
|
-
data: {
|
|
332
|
-
prim: 'Pair',
|
|
333
|
-
args: [{ string: contractAddress }, data],
|
|
334
|
-
},
|
|
335
|
-
type: {
|
|
336
|
-
prim: 'pair',
|
|
337
|
-
args: [{ prim: 'address' }, type],
|
|
338
|
-
},
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* Build the lambda for the multisig transaction transfer to an implicit or originated account.
|
|
343
|
-
*
|
|
344
|
-
* @param {string} address Account address to send the funds to
|
|
345
|
-
* @param {string} amount The amount in mutez to transfer
|
|
346
|
-
* @see {@link https://tezostaquito.io/docs/making_transfers#transfer-000005-50-mutez-tokens-from-a-kt1-address-to-a-tz1-address}
|
|
347
|
-
*/
|
|
348
|
-
function transferToAccount(address, amount) {
|
|
349
|
-
if (utils_1.isValidKey(address, utils_1.hashTypes.KT)) {
|
|
350
|
-
return transferToOriginatedAccount(address, amount);
|
|
351
|
-
}
|
|
352
|
-
// Lambda to transfer to an implicit account
|
|
353
|
-
return [
|
|
354
|
-
{ prim: 'DROP' },
|
|
355
|
-
{ prim: 'NIL', args: [{ prim: 'operation' }] },
|
|
356
|
-
{
|
|
357
|
-
prim: 'PUSH',
|
|
358
|
-
args: [{ prim: 'key_hash' }, { string: address }],
|
|
359
|
-
},
|
|
360
|
-
{ prim: 'IMPLICIT_ACCOUNT' },
|
|
361
|
-
{
|
|
362
|
-
prim: 'PUSH',
|
|
363
|
-
args: [{ prim: 'mutez' }, { int: amount }],
|
|
364
|
-
},
|
|
365
|
-
{ prim: 'UNIT' },
|
|
366
|
-
{ prim: 'TRANSFER_TOKENS' },
|
|
367
|
-
{ prim: 'CONS' },
|
|
368
|
-
];
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* Build the lambda for the multisig transaction transfer to an originated account.
|
|
372
|
-
*
|
|
373
|
-
* @param {string} address Originated account address to send the funds to
|
|
374
|
-
* @param {string} amount The amount in mutez to transfer
|
|
375
|
-
* @see {@link https://tezostaquito.io/docs/making_transfers#transfer-0000001-1-mutez-tokens-from-a-kt1-address-to-a-kt1-address}
|
|
376
|
-
*/
|
|
377
|
-
function transferToOriginatedAccount(address, amount) {
|
|
378
|
-
return [
|
|
379
|
-
{ prim: 'DROP' },
|
|
380
|
-
{ prim: 'NIL', args: [{ prim: 'operation' }] },
|
|
381
|
-
{
|
|
382
|
-
prim: 'PUSH',
|
|
383
|
-
args: [{ prim: 'address' }, { string: address }],
|
|
384
|
-
},
|
|
385
|
-
{ prim: 'CONTRACT', args: [{ prim: 'unit' }] },
|
|
386
|
-
[
|
|
387
|
-
{
|
|
388
|
-
prim: 'IF_NONE',
|
|
389
|
-
args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], []],
|
|
390
|
-
},
|
|
391
|
-
],
|
|
392
|
-
{
|
|
393
|
-
prim: 'PUSH',
|
|
394
|
-
args: [{ prim: 'mutez' }, { int: amount }],
|
|
395
|
-
},
|
|
396
|
-
{ prim: 'UNIT' },
|
|
397
|
-
{ prim: 'TRANSFER_TOKENS' },
|
|
398
|
-
{ prim: 'CONS' },
|
|
399
|
-
];
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Create a reveal operation for a public key.
|
|
403
|
-
*
|
|
404
|
-
* @param {string} counter Source account next counter
|
|
405
|
-
* @param {string} source Source account address
|
|
406
|
-
* @param {string} pubKey The public key to reveal
|
|
407
|
-
* @param {string} fee Fees in mutez to pay by the source account
|
|
408
|
-
* @param {string} gasLimit Maximum amount in mutez to spend in gas fees
|
|
409
|
-
* @param {string} storageLimit Maximum amount in mutez to spend in storage fees
|
|
410
|
-
* @returns An origination operation
|
|
411
|
-
*/
|
|
412
|
-
function revealOperation(counter, source, pubKey, fee = utils_1.DEFAULT_FEE.REVEAL.toString(), gasLimit = utils_1.DEFAULT_GAS_LIMIT.REVEAL.toString(), storageLimit = utils_1.DEFAULT_STORAGE_LIMIT.REVEAL.toString()) {
|
|
413
|
-
return {
|
|
414
|
-
kind: 'reveal',
|
|
415
|
-
counter,
|
|
416
|
-
source,
|
|
417
|
-
fee,
|
|
418
|
-
gas_limit: gasLimit,
|
|
419
|
-
storage_limit: storageLimit,
|
|
420
|
-
public_key: pubKey,
|
|
421
|
-
};
|
|
422
|
-
}
|
|
423
|
-
exports.revealOperation = revealOperation;
|
|
424
|
-
/**
|
|
425
|
-
* Create an origination operation for the generic multisg contract. It does not create a reveal
|
|
426
|
-
* operation for the source account.
|
|
427
|
-
*
|
|
428
|
-
* @param {string} counter Valid source account counter to use
|
|
429
|
-
* @param {string} source Source account address
|
|
430
|
-
* @param {string} fee Fees in mutez to pay by the source account
|
|
431
|
-
* @param {string} gasLimit Maximum amount in mutez to spend in gas fees
|
|
432
|
-
* @param {string} storageLimit Maximum amount in mutez to spend in storage fees
|
|
433
|
-
* @param {string} balance New multisig account initial balance taken from the source account
|
|
434
|
-
* @param {string[]} pubKeys List of public keys of the multisig owner
|
|
435
|
-
* @param {string} delegate Optional implicit address to delegate the wallet funds to
|
|
436
|
-
* @param {number} threshold Minimum number of signatures required to authorize a multisig operation
|
|
437
|
-
* @returns An origination operation
|
|
438
|
-
*/
|
|
439
|
-
function genericMultisigOriginationOperation(counter, source, fee, gasLimit, storageLimit, balance, pubKeys, delegate, threshold = DEFAULT_N) {
|
|
440
|
-
const walletPublicKeys = [];
|
|
441
|
-
pubKeys.forEach((pk) => walletPublicKeys.push({ string: pk }));
|
|
442
|
-
const originationOp = {
|
|
443
|
-
kind: 'origination',
|
|
444
|
-
counter,
|
|
445
|
-
source,
|
|
446
|
-
fee,
|
|
447
|
-
gas_limit: gasLimit,
|
|
448
|
-
storage_limit: storageLimit,
|
|
449
|
-
balance,
|
|
450
|
-
script: {
|
|
451
|
-
code: genericMultisig,
|
|
452
|
-
storage: {
|
|
453
|
-
prim: 'Pair',
|
|
454
|
-
args: [
|
|
455
|
-
{
|
|
456
|
-
int: '0',
|
|
457
|
-
},
|
|
458
|
-
{
|
|
459
|
-
prim: 'Pair',
|
|
460
|
-
args: [
|
|
461
|
-
{
|
|
462
|
-
int: threshold.toString(),
|
|
463
|
-
},
|
|
464
|
-
walletPublicKeys,
|
|
465
|
-
],
|
|
466
|
-
},
|
|
467
|
-
],
|
|
468
|
-
},
|
|
469
|
-
},
|
|
470
|
-
};
|
|
471
|
-
if (delegate) {
|
|
472
|
-
originationOp.delegate = delegate;
|
|
473
|
-
}
|
|
474
|
-
return originationOp;
|
|
475
|
-
}
|
|
476
|
-
exports.genericMultisigOriginationOperation = genericMultisigOriginationOperation;
|
|
477
|
-
/**
|
|
478
|
-
* Get the public key of each owner of an multisig wallet origination contract.
|
|
479
|
-
*
|
|
480
|
-
* @param {OriginationOp} operation An operation with the generic multisig wallet origination
|
|
481
|
-
* @returns {string[]} List of all the owners set in the origination transaction
|
|
482
|
-
*/
|
|
483
|
-
function getOwnersPublicKeys(operation) {
|
|
484
|
-
const ownersArgs = _.get(operation, 'script.storage.args[1].args[1]');
|
|
485
|
-
if (!ownersArgs) {
|
|
486
|
-
return [];
|
|
487
|
-
}
|
|
488
|
-
return ownersArgs.map((o) => o.string);
|
|
489
|
-
}
|
|
490
|
-
exports.getOwnersPublicKeys = getOwnersPublicKeys;
|
|
491
|
-
/**
|
|
492
|
-
* Generic Multisig contract from https://github.com/murbard/smart-contracts/blob/master/multisig/michelson/generic.tz
|
|
493
|
-
*/
|
|
494
|
-
const genericMultisig = [
|
|
495
|
-
{
|
|
496
|
-
prim: 'parameter',
|
|
497
|
-
args: [
|
|
498
|
-
{
|
|
499
|
-
prim: 'or',
|
|
500
|
-
args: [
|
|
501
|
-
{ prim: 'unit', annots: ['%default'] },
|
|
502
|
-
{
|
|
503
|
-
prim: 'pair',
|
|
504
|
-
args: [
|
|
505
|
-
{
|
|
506
|
-
prim: 'pair',
|
|
507
|
-
args: [
|
|
508
|
-
{
|
|
509
|
-
prim: 'nat',
|
|
510
|
-
annots: ['%counter'],
|
|
511
|
-
},
|
|
512
|
-
{
|
|
513
|
-
prim: 'or',
|
|
514
|
-
args: [
|
|
515
|
-
{
|
|
516
|
-
prim: 'lambda',
|
|
517
|
-
args: [
|
|
518
|
-
{ prim: 'unit' },
|
|
519
|
-
{
|
|
520
|
-
prim: 'list',
|
|
521
|
-
args: [
|
|
522
|
-
{
|
|
523
|
-
prim: 'operation',
|
|
524
|
-
},
|
|
525
|
-
],
|
|
526
|
-
},
|
|
527
|
-
],
|
|
528
|
-
annots: ['%operation'],
|
|
529
|
-
},
|
|
530
|
-
{
|
|
531
|
-
prim: 'pair',
|
|
532
|
-
args: [
|
|
533
|
-
{
|
|
534
|
-
prim: 'nat',
|
|
535
|
-
annots: ['%threshold'],
|
|
536
|
-
},
|
|
537
|
-
{
|
|
538
|
-
prim: 'list',
|
|
539
|
-
args: [{ prim: 'key' }],
|
|
540
|
-
annots: ['%keys'],
|
|
541
|
-
},
|
|
542
|
-
],
|
|
543
|
-
annots: ['%change_keys'],
|
|
544
|
-
},
|
|
545
|
-
],
|
|
546
|
-
annots: [':action'],
|
|
547
|
-
},
|
|
548
|
-
],
|
|
549
|
-
annots: [':payload'],
|
|
550
|
-
},
|
|
551
|
-
{
|
|
552
|
-
prim: 'list',
|
|
553
|
-
args: [
|
|
554
|
-
{
|
|
555
|
-
prim: 'option',
|
|
556
|
-
args: [{ prim: 'signature' }],
|
|
557
|
-
},
|
|
558
|
-
],
|
|
559
|
-
annots: ['%sigs'],
|
|
560
|
-
},
|
|
561
|
-
],
|
|
562
|
-
annots: ['%main'],
|
|
563
|
-
},
|
|
564
|
-
],
|
|
565
|
-
},
|
|
566
|
-
],
|
|
567
|
-
},
|
|
568
|
-
{
|
|
569
|
-
prim: 'storage',
|
|
570
|
-
args: [
|
|
571
|
-
{
|
|
572
|
-
prim: 'pair',
|
|
573
|
-
args: [
|
|
574
|
-
{
|
|
575
|
-
prim: 'nat',
|
|
576
|
-
annots: ['%stored_counter'],
|
|
577
|
-
},
|
|
578
|
-
{
|
|
579
|
-
prim: 'pair',
|
|
580
|
-
args: [
|
|
581
|
-
{
|
|
582
|
-
prim: 'nat',
|
|
583
|
-
annots: ['%threshold'],
|
|
584
|
-
},
|
|
585
|
-
{
|
|
586
|
-
prim: 'list',
|
|
587
|
-
args: [{ prim: 'key' }],
|
|
588
|
-
annots: ['%keys'],
|
|
589
|
-
},
|
|
590
|
-
],
|
|
591
|
-
},
|
|
592
|
-
],
|
|
593
|
-
},
|
|
594
|
-
],
|
|
595
|
-
},
|
|
596
|
-
{
|
|
597
|
-
prim: 'code',
|
|
598
|
-
args: [
|
|
599
|
-
[
|
|
600
|
-
[
|
|
601
|
-
[
|
|
602
|
-
{ prim: 'DUP' },
|
|
603
|
-
{ prim: 'CAR' },
|
|
604
|
-
{
|
|
605
|
-
prim: 'DIP',
|
|
606
|
-
args: [[{ prim: 'CDR' }]],
|
|
607
|
-
},
|
|
608
|
-
],
|
|
609
|
-
],
|
|
610
|
-
{
|
|
611
|
-
prim: 'IF_LEFT',
|
|
612
|
-
args: [
|
|
613
|
-
[
|
|
614
|
-
{ prim: 'DROP' },
|
|
615
|
-
{
|
|
616
|
-
prim: 'NIL',
|
|
617
|
-
args: [{ prim: 'operation' }],
|
|
618
|
-
},
|
|
619
|
-
{ prim: 'PAIR' },
|
|
620
|
-
],
|
|
621
|
-
[
|
|
622
|
-
{
|
|
623
|
-
prim: 'PUSH',
|
|
624
|
-
args: [{ prim: 'mutez' }, { int: '0' }],
|
|
625
|
-
},
|
|
626
|
-
{ prim: 'AMOUNT' },
|
|
627
|
-
[
|
|
628
|
-
[{ prim: 'COMPARE' }, { prim: 'EQ' }],
|
|
629
|
-
{
|
|
630
|
-
prim: 'IF',
|
|
631
|
-
args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],
|
|
632
|
-
},
|
|
633
|
-
],
|
|
634
|
-
{ prim: 'SWAP' },
|
|
635
|
-
{ prim: 'DUP' },
|
|
636
|
-
{
|
|
637
|
-
prim: 'DIP',
|
|
638
|
-
args: [[{ prim: 'SWAP' }]],
|
|
639
|
-
},
|
|
640
|
-
{
|
|
641
|
-
prim: 'DIP',
|
|
642
|
-
args: [
|
|
643
|
-
[
|
|
644
|
-
[
|
|
645
|
-
[
|
|
646
|
-
{ prim: 'DUP' },
|
|
647
|
-
{ prim: 'CAR' },
|
|
648
|
-
{
|
|
649
|
-
prim: 'DIP',
|
|
650
|
-
args: [[{ prim: 'CDR' }]],
|
|
651
|
-
},
|
|
652
|
-
],
|
|
653
|
-
],
|
|
654
|
-
{ prim: 'DUP' },
|
|
655
|
-
{ prim: 'SELF' },
|
|
656
|
-
{ prim: 'ADDRESS' },
|
|
657
|
-
{ prim: 'PAIR' },
|
|
658
|
-
{ prim: 'PACK' },
|
|
659
|
-
{
|
|
660
|
-
prim: 'DIP',
|
|
661
|
-
args: [
|
|
662
|
-
[
|
|
663
|
-
[
|
|
664
|
-
[
|
|
665
|
-
{ prim: 'DUP' },
|
|
666
|
-
{
|
|
667
|
-
prim: 'CAR',
|
|
668
|
-
annots: ['@counter'],
|
|
669
|
-
},
|
|
670
|
-
{
|
|
671
|
-
prim: 'DIP',
|
|
672
|
-
args: [
|
|
673
|
-
[
|
|
674
|
-
{
|
|
675
|
-
prim: 'CDR',
|
|
676
|
-
},
|
|
677
|
-
],
|
|
678
|
-
],
|
|
679
|
-
},
|
|
680
|
-
],
|
|
681
|
-
],
|
|
682
|
-
{
|
|
683
|
-
prim: 'DIP',
|
|
684
|
-
args: [[{ prim: 'SWAP' }]],
|
|
685
|
-
},
|
|
686
|
-
],
|
|
687
|
-
],
|
|
688
|
-
},
|
|
689
|
-
{ prim: 'SWAP' },
|
|
690
|
-
],
|
|
691
|
-
],
|
|
692
|
-
},
|
|
693
|
-
[
|
|
694
|
-
[
|
|
695
|
-
{ prim: 'DUP' },
|
|
696
|
-
{
|
|
697
|
-
prim: 'CAR',
|
|
698
|
-
annots: ['@stored_counter'],
|
|
699
|
-
},
|
|
700
|
-
{
|
|
701
|
-
prim: 'DIP',
|
|
702
|
-
args: [[{ prim: 'CDR' }]],
|
|
703
|
-
},
|
|
704
|
-
],
|
|
705
|
-
],
|
|
706
|
-
{
|
|
707
|
-
prim: 'DIP',
|
|
708
|
-
args: [[{ prim: 'SWAP' }]],
|
|
709
|
-
},
|
|
710
|
-
[
|
|
711
|
-
[{ prim: 'COMPARE' }, { prim: 'EQ' }],
|
|
712
|
-
{
|
|
713
|
-
prim: 'IF',
|
|
714
|
-
args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],
|
|
715
|
-
},
|
|
716
|
-
],
|
|
717
|
-
{
|
|
718
|
-
prim: 'DIP',
|
|
719
|
-
args: [[{ prim: 'SWAP' }]],
|
|
720
|
-
},
|
|
721
|
-
[
|
|
722
|
-
[
|
|
723
|
-
{ prim: 'DUP' },
|
|
724
|
-
{
|
|
725
|
-
prim: 'CAR',
|
|
726
|
-
annots: ['@threshold'],
|
|
727
|
-
},
|
|
728
|
-
{
|
|
729
|
-
prim: 'DIP',
|
|
730
|
-
args: [
|
|
731
|
-
[
|
|
732
|
-
{
|
|
733
|
-
prim: 'CDR',
|
|
734
|
-
annots: ['@keys'],
|
|
735
|
-
},
|
|
736
|
-
],
|
|
737
|
-
],
|
|
738
|
-
},
|
|
739
|
-
],
|
|
740
|
-
],
|
|
741
|
-
{
|
|
742
|
-
prim: 'DIP',
|
|
743
|
-
args: [
|
|
744
|
-
[
|
|
745
|
-
{
|
|
746
|
-
prim: 'PUSH',
|
|
747
|
-
args: [{ prim: 'nat' }, { int: '0' }],
|
|
748
|
-
annots: ['@valid'],
|
|
749
|
-
},
|
|
750
|
-
{ prim: 'SWAP' },
|
|
751
|
-
{
|
|
752
|
-
prim: 'ITER',
|
|
753
|
-
args: [
|
|
754
|
-
[
|
|
755
|
-
{
|
|
756
|
-
prim: 'DIP',
|
|
757
|
-
args: [[{ prim: 'SWAP' }]],
|
|
758
|
-
},
|
|
759
|
-
{ prim: 'SWAP' },
|
|
760
|
-
{
|
|
761
|
-
prim: 'IF_CONS',
|
|
762
|
-
args: [
|
|
763
|
-
[
|
|
764
|
-
[
|
|
765
|
-
{
|
|
766
|
-
prim: 'IF_NONE',
|
|
767
|
-
args: [
|
|
768
|
-
[
|
|
769
|
-
{
|
|
770
|
-
prim: 'SWAP',
|
|
771
|
-
},
|
|
772
|
-
{
|
|
773
|
-
prim: 'DROP',
|
|
774
|
-
},
|
|
775
|
-
],
|
|
776
|
-
[
|
|
777
|
-
{
|
|
778
|
-
prim: 'SWAP',
|
|
779
|
-
},
|
|
780
|
-
{
|
|
781
|
-
prim: 'DIP',
|
|
782
|
-
args: [
|
|
783
|
-
[
|
|
784
|
-
{
|
|
785
|
-
prim: 'SWAP',
|
|
786
|
-
},
|
|
787
|
-
{
|
|
788
|
-
prim: 'DIP',
|
|
789
|
-
args: [
|
|
790
|
-
{
|
|
791
|
-
int: '2',
|
|
792
|
-
},
|
|
793
|
-
[
|
|
794
|
-
[
|
|
795
|
-
{
|
|
796
|
-
prim: 'DIP',
|
|
797
|
-
args: [
|
|
798
|
-
[
|
|
799
|
-
{
|
|
800
|
-
prim: 'DUP',
|
|
801
|
-
},
|
|
802
|
-
],
|
|
803
|
-
],
|
|
804
|
-
},
|
|
805
|
-
{
|
|
806
|
-
prim: 'SWAP',
|
|
807
|
-
},
|
|
808
|
-
],
|
|
809
|
-
],
|
|
810
|
-
],
|
|
811
|
-
},
|
|
812
|
-
[
|
|
813
|
-
[
|
|
814
|
-
{
|
|
815
|
-
prim: 'DIP',
|
|
816
|
-
args: [
|
|
817
|
-
{
|
|
818
|
-
int: '2',
|
|
819
|
-
},
|
|
820
|
-
[
|
|
821
|
-
{
|
|
822
|
-
prim: 'DUP',
|
|
823
|
-
},
|
|
824
|
-
],
|
|
825
|
-
],
|
|
826
|
-
},
|
|
827
|
-
{
|
|
828
|
-
prim: 'DIG',
|
|
829
|
-
args: [
|
|
830
|
-
{
|
|
831
|
-
int: '3',
|
|
832
|
-
},
|
|
833
|
-
],
|
|
834
|
-
},
|
|
835
|
-
],
|
|
836
|
-
{
|
|
837
|
-
prim: 'DIP',
|
|
838
|
-
args: [
|
|
839
|
-
[
|
|
840
|
-
{
|
|
841
|
-
prim: 'CHECK_SIGNATURE',
|
|
842
|
-
},
|
|
843
|
-
],
|
|
844
|
-
],
|
|
845
|
-
},
|
|
846
|
-
{
|
|
847
|
-
prim: 'SWAP',
|
|
848
|
-
},
|
|
849
|
-
{
|
|
850
|
-
prim: 'IF',
|
|
851
|
-
args: [
|
|
852
|
-
[
|
|
853
|
-
{
|
|
854
|
-
prim: 'DROP',
|
|
855
|
-
},
|
|
856
|
-
],
|
|
857
|
-
[
|
|
858
|
-
{
|
|
859
|
-
prim: 'FAILWITH',
|
|
860
|
-
},
|
|
861
|
-
],
|
|
862
|
-
],
|
|
863
|
-
},
|
|
864
|
-
],
|
|
865
|
-
{
|
|
866
|
-
prim: 'PUSH',
|
|
867
|
-
args: [
|
|
868
|
-
{
|
|
869
|
-
prim: 'nat',
|
|
870
|
-
},
|
|
871
|
-
{
|
|
872
|
-
int: '1',
|
|
873
|
-
},
|
|
874
|
-
],
|
|
875
|
-
},
|
|
876
|
-
{
|
|
877
|
-
prim: 'ADD',
|
|
878
|
-
annots: ['@valid'],
|
|
879
|
-
},
|
|
880
|
-
],
|
|
881
|
-
],
|
|
882
|
-
},
|
|
883
|
-
],
|
|
884
|
-
],
|
|
885
|
-
},
|
|
886
|
-
],
|
|
887
|
-
],
|
|
888
|
-
[
|
|
889
|
-
[
|
|
890
|
-
{
|
|
891
|
-
prim: 'UNIT',
|
|
892
|
-
},
|
|
893
|
-
{
|
|
894
|
-
prim: 'FAILWITH',
|
|
895
|
-
},
|
|
896
|
-
],
|
|
897
|
-
],
|
|
898
|
-
],
|
|
899
|
-
},
|
|
900
|
-
{ prim: 'SWAP' },
|
|
901
|
-
],
|
|
902
|
-
],
|
|
903
|
-
},
|
|
904
|
-
],
|
|
905
|
-
],
|
|
906
|
-
},
|
|
907
|
-
[
|
|
908
|
-
[{ prim: 'COMPARE' }, { prim: 'LE' }],
|
|
909
|
-
{
|
|
910
|
-
prim: 'IF',
|
|
911
|
-
args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],
|
|
912
|
-
},
|
|
913
|
-
],
|
|
914
|
-
{
|
|
915
|
-
prim: 'IF_CONS',
|
|
916
|
-
args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], []],
|
|
917
|
-
},
|
|
918
|
-
{ prim: 'DROP' },
|
|
919
|
-
{
|
|
920
|
-
prim: 'DIP',
|
|
921
|
-
args: [
|
|
922
|
-
[
|
|
923
|
-
[
|
|
924
|
-
[
|
|
925
|
-
{ prim: 'DUP' },
|
|
926
|
-
{ prim: 'CAR' },
|
|
927
|
-
{
|
|
928
|
-
prim: 'DIP',
|
|
929
|
-
args: [[{ prim: 'CDR' }]],
|
|
930
|
-
},
|
|
931
|
-
],
|
|
932
|
-
],
|
|
933
|
-
{
|
|
934
|
-
prim: 'PUSH',
|
|
935
|
-
args: [{ prim: 'nat' }, { int: '1' }],
|
|
936
|
-
},
|
|
937
|
-
{
|
|
938
|
-
prim: 'ADD',
|
|
939
|
-
annots: ['@new_counter'],
|
|
940
|
-
},
|
|
941
|
-
{ prim: 'PAIR' },
|
|
942
|
-
],
|
|
943
|
-
],
|
|
944
|
-
},
|
|
945
|
-
{
|
|
946
|
-
prim: 'IF_LEFT',
|
|
947
|
-
args: [
|
|
948
|
-
[{ prim: 'UNIT' }, { prim: 'EXEC' }],
|
|
949
|
-
[
|
|
950
|
-
{
|
|
951
|
-
prim: 'DIP',
|
|
952
|
-
args: [[{ prim: 'CAR' }]],
|
|
953
|
-
},
|
|
954
|
-
{ prim: 'SWAP' },
|
|
955
|
-
{ prim: 'PAIR' },
|
|
956
|
-
{
|
|
957
|
-
prim: 'NIL',
|
|
958
|
-
args: [{ prim: 'operation' }],
|
|
959
|
-
},
|
|
960
|
-
],
|
|
961
|
-
],
|
|
962
|
-
},
|
|
963
|
-
{ prim: 'PAIR' },
|
|
964
|
-
],
|
|
965
|
-
],
|
|
966
|
-
},
|
|
967
|
-
],
|
|
968
|
-
],
|
|
969
|
-
},
|
|
970
|
-
];
|
|
971
|
-
/**
|
|
972
|
-
* Add contract address to forwarder contract template and return contract Michelson code as JSON
|
|
973
|
-
*
|
|
974
|
-
* @param {string} contractAddress - multisig contractAddress that will receive forwarded funds
|
|
975
|
-
* @returns {object[]} Michelson code for the origination operation
|
|
976
|
-
*/
|
|
977
|
-
function createForwarder(contractAddress) {
|
|
978
|
-
return [
|
|
979
|
-
{
|
|
980
|
-
prim: 'parameter',
|
|
981
|
-
args: [
|
|
982
|
-
{
|
|
983
|
-
prim: 'or',
|
|
984
|
-
args: [
|
|
985
|
-
{ prim: 'unit', annots: ['%default'] },
|
|
986
|
-
{
|
|
987
|
-
prim: 'pair',
|
|
988
|
-
args: [
|
|
989
|
-
{ prim: 'nat' },
|
|
990
|
-
{
|
|
991
|
-
prim: 'contract',
|
|
992
|
-
args: [
|
|
993
|
-
{
|
|
994
|
-
prim: 'pair',
|
|
995
|
-
args: [
|
|
996
|
-
{ prim: 'address', annots: [':from'] },
|
|
997
|
-
{
|
|
998
|
-
prim: 'pair',
|
|
999
|
-
args: [
|
|
1000
|
-
{ prim: 'address', annots: [':to'] },
|
|
1001
|
-
{ prim: 'nat', annots: [':value'] },
|
|
1002
|
-
],
|
|
1003
|
-
},
|
|
1004
|
-
],
|
|
1005
|
-
},
|
|
1006
|
-
],
|
|
1007
|
-
},
|
|
1008
|
-
],
|
|
1009
|
-
annots: ['%flush'],
|
|
1010
|
-
},
|
|
1011
|
-
],
|
|
1012
|
-
},
|
|
1013
|
-
],
|
|
1014
|
-
},
|
|
1015
|
-
{ prim: 'storage', args: [{ prim: 'unit' }] },
|
|
1016
|
-
{
|
|
1017
|
-
prim: 'code',
|
|
1018
|
-
args: [
|
|
1019
|
-
[
|
|
1020
|
-
{
|
|
1021
|
-
prim: 'CAST',
|
|
1022
|
-
args: [
|
|
1023
|
-
{
|
|
1024
|
-
prim: 'pair',
|
|
1025
|
-
args: [
|
|
1026
|
-
{
|
|
1027
|
-
prim: 'or',
|
|
1028
|
-
args: [
|
|
1029
|
-
{ prim: 'unit' },
|
|
1030
|
-
{
|
|
1031
|
-
prim: 'pair',
|
|
1032
|
-
args: [
|
|
1033
|
-
{ prim: 'nat' },
|
|
1034
|
-
{
|
|
1035
|
-
prim: 'contract',
|
|
1036
|
-
args: [
|
|
1037
|
-
{
|
|
1038
|
-
prim: 'pair',
|
|
1039
|
-
args: [
|
|
1040
|
-
{ prim: 'address' },
|
|
1041
|
-
{ prim: 'pair', args: [{ prim: 'address' }, { prim: 'nat' }] },
|
|
1042
|
-
],
|
|
1043
|
-
},
|
|
1044
|
-
],
|
|
1045
|
-
},
|
|
1046
|
-
],
|
|
1047
|
-
},
|
|
1048
|
-
],
|
|
1049
|
-
},
|
|
1050
|
-
{ prim: 'unit' },
|
|
1051
|
-
],
|
|
1052
|
-
},
|
|
1053
|
-
],
|
|
1054
|
-
},
|
|
1055
|
-
{ prim: 'CAR' },
|
|
1056
|
-
{
|
|
1057
|
-
prim: 'IF_LEFT',
|
|
1058
|
-
args: [
|
|
1059
|
-
[
|
|
1060
|
-
{ prim: 'DROP' },
|
|
1061
|
-
{
|
|
1062
|
-
prim: 'NONE',
|
|
1063
|
-
args: [
|
|
1064
|
-
{
|
|
1065
|
-
prim: 'pair',
|
|
1066
|
-
args: [
|
|
1067
|
-
{ prim: 'nat' },
|
|
1068
|
-
{
|
|
1069
|
-
prim: 'contract',
|
|
1070
|
-
args: [
|
|
1071
|
-
{
|
|
1072
|
-
prim: 'pair',
|
|
1073
|
-
args: [
|
|
1074
|
-
{ prim: 'address' },
|
|
1075
|
-
{ prim: 'pair', args: [{ prim: 'address' }, { prim: 'nat' }] },
|
|
1076
|
-
],
|
|
1077
|
-
},
|
|
1078
|
-
],
|
|
1079
|
-
},
|
|
1080
|
-
],
|
|
1081
|
-
},
|
|
1082
|
-
],
|
|
1083
|
-
},
|
|
1084
|
-
],
|
|
1085
|
-
[{ prim: 'SOME' }],
|
|
1086
|
-
],
|
|
1087
|
-
},
|
|
1088
|
-
{ prim: 'DIP', args: [[{ prim: 'PUSH', args: [{ prim: 'address' }, { string: contractAddress }] }]] },
|
|
1089
|
-
{
|
|
1090
|
-
prim: 'IF_NONE',
|
|
1091
|
-
args: [
|
|
1092
|
-
[{ prim: 'NIL', args: [{ prim: 'operation' }] }],
|
|
1093
|
-
[
|
|
1094
|
-
{ prim: 'DIP', args: [[{ prim: 'DUP' }]] },
|
|
1095
|
-
{ prim: 'DUP' },
|
|
1096
|
-
{ prim: 'CAR' },
|
|
1097
|
-
{ prim: 'DIP', args: [[{ prim: 'CDR' }]] },
|
|
1098
|
-
{ prim: 'DIG', args: [{ int: '2' }] },
|
|
1099
|
-
{ prim: 'PAIR' },
|
|
1100
|
-
{ prim: 'SELF' },
|
|
1101
|
-
{ prim: 'ADDRESS' },
|
|
1102
|
-
{ prim: 'PAIR' },
|
|
1103
|
-
{ prim: 'DIP', args: [[{ prim: 'PUSH', args: [{ prim: 'mutez' }, { int: '0' }] }]] },
|
|
1104
|
-
{ prim: 'TRANSFER_TOKENS' },
|
|
1105
|
-
{ prim: 'DIP', args: [[{ prim: 'NIL', args: [{ prim: 'operation' }] }]] },
|
|
1106
|
-
{ prim: 'CONS' },
|
|
1107
|
-
],
|
|
1108
|
-
],
|
|
1109
|
-
},
|
|
1110
|
-
{ prim: 'BALANCE' },
|
|
1111
|
-
{ prim: 'PUSH', args: [{ prim: 'mutez' }, { int: '0' }] },
|
|
1112
|
-
{ prim: 'COMPARE' },
|
|
1113
|
-
{ prim: 'EQ' },
|
|
1114
|
-
{
|
|
1115
|
-
prim: 'IF',
|
|
1116
|
-
args: [
|
|
1117
|
-
[{ prim: 'DIP', args: [[{ prim: 'DROP' }]] }],
|
|
1118
|
-
[
|
|
1119
|
-
{
|
|
1120
|
-
prim: 'DIP',
|
|
1121
|
-
args: [
|
|
1122
|
-
[
|
|
1123
|
-
{ prim: 'CONTRACT', args: [{ prim: 'unit' }] },
|
|
1124
|
-
{
|
|
1125
|
-
prim: 'IF_NONE',
|
|
1126
|
-
args: [
|
|
1127
|
-
[
|
|
1128
|
-
{ prim: 'PUSH', args: [{ prim: 'string' }, { string: 'not a wallet' }] },
|
|
1129
|
-
{ prim: 'FAILWITH' },
|
|
1130
|
-
],
|
|
1131
|
-
[],
|
|
1132
|
-
],
|
|
1133
|
-
},
|
|
1134
|
-
{ prim: 'BALANCE' },
|
|
1135
|
-
{ prim: 'UNIT' },
|
|
1136
|
-
{ prim: 'TRANSFER_TOKENS' },
|
|
1137
|
-
],
|
|
1138
|
-
],
|
|
1139
|
-
},
|
|
1140
|
-
{ prim: 'SWAP' },
|
|
1141
|
-
{ prim: 'CONS' },
|
|
1142
|
-
],
|
|
1143
|
-
],
|
|
1144
|
-
},
|
|
1145
|
-
{ prim: 'DIP', args: [[{ prim: 'UNIT' }]] },
|
|
1146
|
-
{ prim: 'PAIR' },
|
|
1147
|
-
],
|
|
1148
|
-
],
|
|
1149
|
-
},
|
|
1150
|
-
];
|
|
1151
|
-
}
|
|
1152
|
-
/**
|
|
1153
|
-
* Create an origination operation for a forwarder contract
|
|
1154
|
-
*
|
|
1155
|
-
* @param {string} contractAddress originated multisig address to forward funds
|
|
1156
|
-
* @param {string} counter Valid source account counter to use
|
|
1157
|
-
* @param {string} source Source account address
|
|
1158
|
-
* @param {string} fee Fees in mutez to pay by the source account
|
|
1159
|
-
* @param {string} gasLimit Maximum amount in mutez to spend in gas fees
|
|
1160
|
-
* @param {string} storageLimit Maximum amount in mutez to spend in storage fees
|
|
1161
|
-
* @param {string} balance New multisig account initial balance taken from the source account
|
|
1162
|
-
* @returns {OriginationOp} the operation
|
|
1163
|
-
*/
|
|
1164
|
-
function forwarderOriginationOperation(contractAddress, counter, source, fee, gasLimit, storageLimit, balance) {
|
|
1165
|
-
return {
|
|
1166
|
-
kind: 'origination',
|
|
1167
|
-
counter,
|
|
1168
|
-
source,
|
|
1169
|
-
fee,
|
|
1170
|
-
gas_limit: gasLimit,
|
|
1171
|
-
storage_limit: storageLimit,
|
|
1172
|
-
balance,
|
|
1173
|
-
script: {
|
|
1174
|
-
code: createForwarder(contractAddress),
|
|
1175
|
-
storage: { prim: 'Unit' },
|
|
1176
|
-
},
|
|
1177
|
-
};
|
|
1178
|
-
}
|
|
1179
|
-
exports.forwarderOriginationOperation = forwarderOriginationOperation;
|
|
1180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzaWdVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbXVsdGlzaWdVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQTRCO0FBRTVCLG1DQUF1RztBQUV2RyxzQ0FBc0M7QUFDdEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUVwQjs7Ozs7R0FLRztBQUNILFNBQWdCLG9DQUFvQyxDQUFDLFNBQXdCO0lBQzNFLE1BQU0sR0FBRyxHQUFHO1FBQ1YsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1FBQ2xCLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBUztRQUM3QixZQUFZLEVBQUUsU0FBUyxDQUFDLGFBQWE7S0FDdEMsQ0FBQztJQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFO1FBQ3pCLHdCQUF3QjtRQUN4QixPQUFPO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07WUFDdEIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxXQUFXO1lBQ3pCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN4QixHQUFHO1NBQ0osQ0FBQztLQUNIO0lBQ0Qsa0ZBQWtGO0lBQ2xGLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENB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SUFBSSxFQUFFLE1BQU0sRUFBRTs2QkFDakI7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUMzQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7aUJBQ2pCO2FBQ0Y7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQiw2QkFBNkIsQ0FDM0MsZUFBdUIsRUFDdkIsT0FBZSxFQUNmLE1BQWMsRUFDZCxHQUFXLEVBQ1gsUUFBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsT0FBZTtJQUVmLE9BQU87UUFDTCxJQUFJLEVBQUUsYUFBYTtRQUNuQixPQUFPO1FBQ1AsTUFBTTtRQUNOLEdBQUc7UUFDSCxTQUFTLEVBQUUsUUFBUTtRQUNuQixhQUFhLEVBQUUsWUFBWTtRQUMzQixPQUFPO1FBQ1AsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLGVBQWUsQ0FBQyxlQUFlLENBQUM7WUFDdEMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtTQUMxQjtLQUNGLENBQUM7QUFDSixDQUFDO0FBdEJELHNFQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEluZGV4ZWRTaWduYXR1cmUsIE9yaWdpbmF0aW9uRGF0YSwgT3JpZ2luYXRpb25PcCwgUmV2ZWFsT3AsIFRyYW5zYWN0aW9uT3AsIFRyYW5zZmVyRGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgREVGQVVMVF9GRUUsIERFRkFVTFRfR0FTX0xJTUlULCBERUZBVUxUX1NUT1JBR0VfTElNSVQsIGhhc2hUeXBlcywgaXNWYWxpZEtleSB9IGZyb20gJy4vdXRpbHMnO1xuXG4vLyBEZWZhdWx0IG4gb2YgbSBmb3IgbXVsdGlzaWcgd2FsbGV0c1xuY29uc3QgREVGQVVMVF9OID0gMjtcbmNvbnN0IERFRkFVTFRfTSA9IDM7XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIHRyYW5zZmVyIGRldGFpbHMgZnJvbSBhIGdlbmVyaWMgbXVsdGlzaWcgdHJhbnNhY3Rpb24gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25PcH0gb3BlcmF0aW9uIEEgdHJhbnNhY3Rpb24gb3BlcmF0aW9uIEpTT05cbiAqIEByZXR1cm5zIHtUcmFuc2ZlckRhdGF9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXN0aW5hdGlvbiwgdG9rZW4gYW5kIHRyYW5zZmVyIGFtb3VudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbjogVHJhbnNhY3Rpb25PcCk6IFRyYW5zZmVyRGF0YSB7XG4gIGNvbnN0IGZlZSA9IHtcbiAgICBmZWU6IG9wZXJhdGlvbi5mZWUsXG4gICAgZ2FzTGltaXQ6IG9wZXJhdGlvbi5nYXNfbGltaXQsXG4gICAgc3RvcmFnZUxpbWl0OiBvcGVyYXRpb24uc3RvcmFnZV9saW1pdCxcbiAgfTtcblxuICBpZiAoIW9wZXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgLy8gU2luZ2xlc2lnIHRyYW5zYWN0aW9uXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvaW46ICdtdXRleicsXG4gICAgICBmcm9tOiBvcGVyYXRpb24uc291cmNlLFxuICAgICAgdG86IG9wZXJhdGlvbi5kZXN0aW5hdGlvbixcbiAgICAgIGFtb3VudDogb3BlcmF0aW9uLmFtb3VudCxcbiAgICAgIGZlZSxcbiAgICB9O1xuICB9XG4gIC8vIFRoZXNlIGZvbGxvdyB0aGUgc3RydWN0dXJlIGZyb20gdGhlIHJlc3BvbnNlIG9mIGdlbmVyaWNNdWx0aXNpZ1RyYW5zZmVyUGFyYW1zKClcbiAgY29uc3QgdHJhbnNmZXJBcmdzID0gb3BlcmF0aW9uLnBhcmFtZXRlcnMudmFsdWUuYXJnc1swXS5hcmdzWzFdLmFyZ3NbMF07XG4gIGNvbnN0IGFjY291bnRUeXBlID0gdHJhbnNmZXJBcmdzWzNdLnByaW07XG4gIGNvbnN0IGNvdW50ZXIgPSBvcGVyYXRpb24ucGFyYW1ldGVycy52YWx1ZS5hcmdzWzBdLmFyZ3NbMF0uaW50O1xuICAvLyBJbiBtdWx0aXNpZyB0cmFuc2FjdGlvbnMsIHRoZSB3YWxsZXQgY29udHJhY3QgaXMgdGhlIGRlc3RpbmF0aW9uXG4gIGNvbnN0IGZyb20gPSBvcGVyYXRpb24uZGVzdGluYXRpb247XG5cbiAgbGV0IGFjY291bnRUeXBlSW5kZXg7XG4gIHN3aXRjaCAoYWNjb3VudFR5cGUpIHtcbiAgICBjYXNlICdJTVBMSUNJVF9BQ0NPVU5UJzpcbiAgICAgIGFjY291bnRUeXBlSW5kZXggPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQ09OVFJBQ1QnOlxuICAgICAgYWNjb3VudFR5cGVJbmRleCA9IDU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnRyYWN0IHBhcmFtZXRlcnMnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29pbjogdHJhbnNmZXJBcmdzW2FjY291bnRUeXBlSW5kZXhdLmFyZ3NbMF0ucHJpbSxcbiAgICBmcm9tLFxuICAgIHRvOiB0cmFuc2ZlckFyZ3NbMl0uYXJnc1sxXS5zdHJpbmcsXG4gICAgYW1vdW50OiB0cmFuc2ZlckFyZ3NbYWNjb3VudFR5cGVJbmRleF0uYXJnc1sxXS5pbnQsXG4gICAgZmVlLFxuICAgIGNvdW50ZXIsXG4gIH07XG59XG5cbi8qKlxuICogIEhlbHBlciBtZXRob2QgdG8gZ2V0IHRoZSB3YWxsZXQgb3IgYWRkcmVzcyBpbml0aWFsaXphdGlvbiB0eCBmcm9tIGFuIG9yaWdpbmF0aW9uIG9wZXJhdGlvblxuICpcbiAqIEBwYXJhbSB7T3JpZ2luYXRpb25PcH0gb3BlcmF0aW9uXG4gKiBAcmV0dXJucyB7T3JpZ2luYXRpb25EYXRhfSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgd2FsbGV0IGNvbnRyYWN0IGNyZWF0aW5nIGEgZm9yd2FyZGVyIGNvbnRyYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnaW5hdGlvbkRhdGFGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbjogT3JpZ2luYXRpb25PcCk6IE9yaWdpbmF0aW9uRGF0YSB7XG4gIGNvbnN0IGZlZSA9IHtcbiAgICBmZWU6IG9wZXJhdGlvbi5mZWUsXG4gICAgZ2FzTGltaXQ6IG9wZXJhdGlvbi5nYXNfbGltaXQsXG4gICAgc3RvcmFnZUxpbWl0OiBvcGVyYXRpb24uc3RvcmFnZV9saW1pdCxcbiAgfTtcblxuICBjb25zdCB7IHNvdXJjZTogZnJvbSwgY291bnRlciwgYmFsYW5jZSB9ID0gb3BlcmF0aW9uO1xuXG4gIC8vIFRyYW5zYWN0aW9ucyBpbml0aWFsaXppbmcgYSBmb3J3YXJkZXIgY29udHJhY3QgY29udGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUgd2FsbGV0IGNvbnRyYWN0XG4gIGNvbnN0IGZvcndhcmRlckRlc3RpbmF0aW9uOiBzdHJpbmcgPSBfLmdldChvcGVyYXRpb24sICdzY3JpcHQuY29kZVsyXS5hcmdzWzBdWzNdLmFyZ3NbMF1bMF0uYXJnc1sxXS5zdHJpbmcnKTtcblxuICByZXR1cm4ge1xuICAgIGZlZSxcbiAgICBjb3VudGVyLFxuICAgIGJhbGFuY2UsXG4gICAgZnJvbSxcbiAgICBmb3J3YXJkZXJEZXN0aW5hdGlvbixcbiAgfTtcbn1cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBidWlsZCBhIHNpbmdsZXNpZyB0cmFuc2FjdGlvbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50ZXIgU291cmNlIGFjY291bnQgbmV4dCBjb3VudGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBhY2NvdW50IHRoYXQgd2lsbCBwYXkgZm9yIGZlZXMsIGFuZCBpbiBzaW5nbGVzaWcgdHJhbnNhY3Rpb25zLCB3aGVyZVxuICogICAgICAgIHRoZSBmdW5kcyBhcmUgdGFrZW4gZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudCBUaGUgYW1vdW50IGluIG11dGV6IHRvIGJlIHRyYW5zZmVycmVkXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb24gVGhlIGFjY291bnQgYWRkcmVzcyB0byBzZW5kIHRoZSBmdW5kcyB0b1xuICogQHBhcmFtIHtzdHJpbmd9IGZlZSBGZWVzIGluIG11dGV6IHRvIHBheSBieSB0aGUgc291cmNlIGFjY291bnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXNMaW1pdCBNYXhpbXVtIGFtb3VudCBpbiBtdXRleiB0byBzcGVuZCBpbiBnYXMgZmVlc1xuICogQHBhcmFtIHtzdHJpbmd9IHN0b3JhZ2VMaW1pdCBNYXhpbXVtIGFtb3VudCBpbiBtdXRleiB0byBzcGVuZCBpbiBzdG9yYWdlIGZlZXNcbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbk9wfUEgVGV6b3MgdHJhbnNhY3Rpb24gb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW5nbGVzaWdUcmFuc2FjdGlvbk9wZXJhdGlvbihcbiAgY291bnRlcjogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgYW1vdW50OiBzdHJpbmcsXG4gIGRlc3RpbmF0aW9uOiBzdHJpbmcsXG4gIGZlZTogc3RyaW5nID0gREVGQVVMVF9GRUUuVFJBTlNGRVIudG9TdHJpbmcoKSxcbiAgZ2FzTGltaXQ6IHN0cmluZyA9IERFRkFVTFRfR0FTX0xJTUlULlRSQU5TRkVSLnRvU3RyaW5nKCksXG4gIHN0b3JhZ2VMaW1pdDogc3RyaW5nID0gREVGQVVMVF9TVE9SQUdFX0xJTUlULlRSQU5TRkVSLnRvU3RyaW5nKClcbik6IFRyYW5zYWN0aW9uT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICd0cmFuc2FjdGlvbicsXG4gICAgc291cmNlLFxuICAgIGZlZSxcbiAgICBjb3VudGVyLFxuICAgIGdhc19saW1pdDogZ2FzTGltaXQsXG4gICAgc3RvcmFnZV9saW1pdDogc3RvcmFnZUxpbWl0LFxuICAgIGFtb3VudCxcbiAgICBkZXN0aW5hdGlvbixcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtdWx0aXNpZyB3YWxsZXQgdHJhbnNhY3Rpb24gb3BlcmF0aW9uLlxuICpcbiAqIEBzZWUge0BsaW5rIHRyYW5zYWN0aW9uT3BlcmF0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50ZXIgU291cmNlIGFjY291bnQgbmV4dCBjb3VudGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBhY2NvdW50IHRoYXQgd2lsbCBwYXkgZm9yIGZlZXMsIGFuZCBpbiBzaW5nbGVzaWcgdHJhbnNhY3Rpb25zLCB3aGVyZVxuICogICAgICAgIHRoZSBmdW5kcyBhcmUgdGFrZW4gZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IGFtb3VudCBUaGUgYW1vdW50IGluIG11dGV6IHRvIGJlIHRyYW5zZmVycmVkXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RBZGRyZXNzIElmIGl0IGlzIGEgbXVsdGlzaWcgdHJhbnNmZXIsIHRoZSBzbWFydCBjb250cmFjdCBhZGRyZXNzIHdpdGggdGhlXG4gKiAgICAgICAgZnVuZHMgdG8gYmUgdHJhbnNmZXJyZWQgZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0Q291bnRlciBJZiBpdCBpcyBhIG11bHRpc2lnIHRyYW5zZmVyLCB0aGUgc21hcnQgY29udHJhY3QgY291bnRlciB0byB1c2VcbiAqICAgICAgICBpbiB0aGUgbmV4dCB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uQWRkcmVzcyBBbiBpbXBsaWNpdCBvciBvcmlnaW5hdGVkIGFkZHJlc3MgdG8gdHJhbnNmZXIgZnVkbnMgdG9cbiAqIEBwYXJhbSB7c3RyaW5nW119IHNpZ25hdHVyZXMgc2lnbmF0dXJlcyBMaXN0IG9mIHNpZ25hdHVyZXMgYXV0aG9yaXppbmcgdGhlIGZ1bmRzIHRyYW5zZmVyIGZvcm1cbiAqICAgICAgICB0aGUgbXVsdGlzaWcgd2FsbGV0XG4gKiBAcGFyYW0ge3N0cmluZ30gZmVlIEZlZXMgaW4gbXV0ZXogdG8gcGF5IGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICogQHBhcmFtIHtzdHJpbmd9IGdhc0xpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIGdhcyBmZWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcmFnZUxpbWl0IE1heGltdW0gYW1vdW50IGluIG11dGV6IHRvIHNwZW5kIGluIHN0b3JhZ2UgZmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IG0gVGhlIG51bWJlciBvZiBzaWduZXJzIChvd25lcnMpIGZvciB0aGUgbXVsdGlzaWcgd2FsbGV0IGJlaW5nIHVzZWQuIERlZmF1bHQgaXMgM1xuICogQHJldHVybnMge1RyYW5zYWN0aW9uT3B9IEEgVGV6b3Mgb3BlcmF0aW9uIHdpdGggYSBnZW5lcmljIG11bHRpc2lnIHRyYW5zZmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXNpZ1RyYW5zYWN0aW9uT3BlcmF0aW9uKFxuICBjb3VudGVyOiBzdHJpbmcsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBhbW91bnQ6IHN0cmluZyxcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmcsXG4gIGNvbnRyYWN0Q291bnRlcjogc3RyaW5nLFxuICBkZXN0aW5hdGlvbkFkZHJlc3M6IHN0cmluZyxcbiAgc2lnbmF0dXJlczogSW5kZXhlZFNpZ25hdHVyZVtdLFxuICBmZWU6IHN0cmluZyA9IERFRkFVTFRfRkVFLlRSQU5TRkVSLnRvU3RyaW5nKCksXG4gIGdhc0xpbWl0OiBzdHJpbmcgPSBERUZBVUxUX0dBU19MSU1JVC5UUkFOU0ZFUi50b1N0cmluZygpLFxuICBzdG9yYWdlTGltaXQ6IHN0cmluZyA9IERFRkFVTFRfU1RPUkFHRV9MSU1JVC5UUkFOU0ZFUi50b1N0cmluZygpLFxuICBtOiBudW1iZXIgPSBERUZBVUxUX01cbik6IFRyYW5zYWN0aW9uT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICd0cmFuc2FjdGlvbicsXG4gICAgc291cmNlLFxuICAgIGZlZSxcbiAgICBjb3VudGVyLFxuICAgIGdhc19saW1pdDogZ2FzTGltaXQsXG4gICAgc3RvcmFnZV9saW1pdDogc3RvcmFnZUxpbWl0LFxuICAgIGFtb3VudDogJzAnLCAvLyBEb24ndCB0cmFuc2ZlciBhbnkgZnVuZHMgZnJvbSBoZSBzb3VyY2UgYWNjb3VudCB0byB0aGUgY29udHJhY3QgaW4gbXVsdGlzaWcgdHhzXG4gICAgZGVzdGluYXRpb246IGNvbnRyYWN0QWRkcmVzcyxcbiAgICBwYXJhbWV0ZXJzOiBnZW5lcmljTXVsdGlzaWdUcmFuc2ZlclBhcmFtcyhkZXN0aW5hdGlvbkFkZHJlc3MsIGFtb3VudCwgY29udHJhY3RDb3VudGVyLCBzaWduYXR1cmVzLCBtKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gYnVpbGQgdGhlIHBhcmFtZXRlcnMgdG8gY2FsbCB0aGUgZ2VuZXJpYyBtdWx0aXNpZyBzbWFydCBjb250cmFjdCB3aXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbkFkZHJlc3MgQW4gaW1wbGljaXQgb3Igb3JpZ2luYXRlZCBhZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IE51bWJlciBvZiBNdXRleiB0byBiZSB0cmFuc2ZlcnJlZFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0Q291bnRlciBNdWx0aXNpZyBjb250cmFjdCBjb3VudGVyIG51bWJlclxuICogQHBhcmFtIHtJbmRleGVkU2lnbmF0dXJlW119IHNpZ25hdHVyZXMgTGlzdCBvZiB0cmFuc2FjdGlvbnMgYW5kIHRoZWlyIG9yZGVyXG4gKiBAcGFyYW0ge251bWJlcn0gbSBUaGUgbXVsdGlzaWcgd2FsbGV0IHRvdGFsIG51bWJlciBvZiBzaWduZXJzIChvd25lcnMpXG4gKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVycyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZ2VuZXJpY011bHRpc2lnVHJhbnNmZXJQYXJhbXMoXG4gIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICBhbW91bnQ6IHN0cmluZyxcbiAgY29udHJhY3RDb3VudGVyOiBzdHJpbmcsXG4gIHNpZ25hdHVyZXM6IEluZGV4ZWRTaWduYXR1cmVbXSxcbiAgbTogbnVtYmVyXG4pIHtcbiAgY29uc3QgdHJhbnNhY3Rpb25TaWduYXR1cmVzOiBhbnlbXSA9IGJ1aWxkU2lnbmF0dXJlcyhzaWduYXR1cmVzKTtcbiAgcmV0dXJuIHtcbiAgICBlbnRyeXBvaW50OiAnbWFpbicsXG4gICAgdmFsdWU6IHtcbiAgICAgIHByaW06ICdQYWlyJyxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByaW06ICdQYWlyJyxcbiAgICAgICAgICBhcmdzOiBbeyBpbnQ6IGNvbnRyYWN0Q291bnRlciB9LCB7IHByaW06ICdMZWZ0JywgYXJnczogW3RyYW5zZmVyVG9BY2NvdW50KGRlc3RpbmF0aW9uQWRkcmVzcywgYW1vdW50KV0gfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zYWN0aW9uU2lnbmF0dXJlcyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHRoZSBzaWduYXR1cmVzIGluIGEgbXVsdGlzaWcgdHJhbnNhY3Rpb24gb3BlcmF0aW9uIHdpdGggbmV3IG9uZXMuXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbk9wfSB0cmFuc2FjdGlvbiBUcmFuc2FjdGlvbiB0byBtdXRhdGVcbiAqIEBwYXJhbSB7SW5kZXhlZFNpZ25hdHVyZVtdfSBzaWduYXR1cmVzIExpc3Qgb2YgdHJhbnNhY3Rpb25zIGFuZCB0aGVpciBvcmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXModHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uT3AsIHNpZ25hdHVyZXM6IEluZGV4ZWRTaWduYXR1cmVbXSkge1xuICB0cmFuc2FjdGlvbi5wYXJhbWV0ZXJzLnZhbHVlLmFyZ3NbMV0gPSBidWlsZFNpZ25hdHVyZXMoc2lnbmF0dXJlcywgdHJhbnNhY3Rpb24ucGFyYW1ldGVycy52YWx1ZS5hcmdzWzFdKTtcbn1cblxuLyoqXG4gKiBHZSB0aGUgbGlzdCBpZiBtdWx0aXNpZyBzaWduYXR1cmVzIGlmIGFueSBpbiBhIGNvbnZlbmllbnQgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25PcH0gdHJhbnNhY3Rpb24gVGhlIHRyYW5zYWN0aW9uIHRvIHNlYXJjaCB0aGUgc2lnbmF0dXJlcyBpblxuICogQHJldHVybnMge0luZGV4ZWRTaWduYXR1cmVbXX0gQSBsaXN0IG9mIHNpZ25hdHVyZXMgYW5kIHRoZWlyIG9yZGVyIGluIHRlaCB0cmFuc2ZlciBzY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE11bHRpc2lnVHJhbnNmZXJTaWduYXR1cmVzKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbk9wKTogSW5kZXhlZFNpZ25hdHVyZVtdIHtcbiAgY29uc3Qgc2lnbmF0dXJlczogSW5kZXhlZFNpZ25hdHVyZVtdID0gW107XG4gIGlmICghdHJhbnNhY3Rpb24ucGFyYW1ldGVycyAmJiAhdHJhbnNhY3Rpb24ucGFyYW1ldGVycy52YWx1ZSAmJiAhdHJhbnNhY3Rpb24ucGFyYW1ldGVycy52YWx1ZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCByYXdTaWduYXR1cmVzID0gdHJhbnNhY3Rpb24ucGFyYW1ldGVycy52YWx1ZS5hcmdzWzFdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd1NpZ25hdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocmF3U2lnbmF0dXJlc1tpXS5wcmltID09PSAnU29tZScpIHtcbiAgICAgIHNpZ25hdHVyZXMucHVzaCh7XG4gICAgICAgIHNpZ25hdHVyZTogcmF3U2lnbmF0dXJlc1tpXS5hcmdzWzBdLnN0cmluZyxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNpZ25hdHVyZXM7XG59XG5cbi8qKlxuICogQnVpbGQgYSBsaXN0IG9mIG9yZGVyZWQgc2lnbmF0dXJlcywgcHV0dGluZyBhIE5vbmUgcHJpbWl0aXZlIGZvciB0aGUgbWlzc2luZyBpbmRleGVzLlxuICpcbiAqIEBwYXJhbSB7SW5kZXhlZFNpZ25hdHVyZVtdfSBzaWduYXR1cmVzIExpc3Qgb2YgdHJhbnNhY3Rpb25zIGFuZCB0aGVpciBvcmRlclxuICogQHBhcmFtIHtudW1iZXJ9IG0gU2l6ZSBvZiB0aGUgc2lnbmF0dXJlIGxpc3RcbiAqIEBwYXJhbSB7YW55W119IGV4aXN0aW5nU2lnbmF0dXJlcyBMaXN0IG9mIGV4aXN0aW5nIHNpZ25hdHVyZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgZ2VuZXJhdGVkIG9uZXNcbiAqIEByZXR1cm5zIHthbnlbXX0gTGlzdCBvZiBzaWduYXR1cmVzIGluIHRoZSByaWdodCBvcmRlclxuICovXG5mdW5jdGlvbiBidWlsZFNpZ25hdHVyZXMoc2lnbmF0dXJlczogSW5kZXhlZFNpZ25hdHVyZVtdLCBleGlzdGluZ1NpZ25hdHVyZXMgPSBbXSwgbTogbnVtYmVyID0gREVGQVVMVF9NKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IHdpdGggdGhlIGV4aXN0aW5nIHNpZ25hdHVyZXMgYW5kL29yIGVtcHR5IG9iamVjdHNcbiAgY29uc3QgdHJhbnNhY3Rpb25TaWduYXR1cmVzOiBhbnlbXSA9IGV4aXN0aW5nU2lnbmF0dXJlcztcbiAgY29uc3Qgc2l6ZSA9IGV4aXN0aW5nU2lnbmF0dXJlcy5sZW5ndGg7XG4gIGlmIChzaXplID4gbSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVG9vIG1hbnkgc2lnbmF0dXJlcy4gRXhwZWN0ZWQgbGVzcyB0aGFuICcgKyBtICsgJyBnb3QgJyArIHNpemUpO1xuICB9XG4gIGZvciAobGV0IGkgPSBzaXplOyBpIDwgbTsgaSsrKSB7XG4gICAgdHJhbnNhY3Rpb25TaWduYXR1cmVzLnB1c2goeyBwcmltOiAnTm9uZScgfSk7XG4gIH1cbiAgLy8gUmVwbGFjZSB0aGUgZW1wdHkgc2lnbmF0dXJlcyBmb3IgdGhlIHJlYWwgb25lcyBiYXNlZCBvbiB0aGUgcmlnaHQgaW5kZXhcbiAgc2lnbmF0dXJlcy5mb3JFYWNoKChzKSA9PiB7XG4gICAgaWYgKHMuaW5kZXgpIHtcbiAgICAgIHRyYW5zYWN0aW9uU2lnbmF0dXJlc1tzLmluZGV4XSA9IHsgcHJpbTogJ1NvbWUnLCBhcmdzOiBbeyBzdHJpbmc6IHMuc2lnbmF0dXJlIH1dIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNhY3Rpb25TaWduYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIGZpcnN0IFwibnVsbFwiIHNpZ25hdHVyZVxuICAgICAgICBpZiAodHJhbnNhY3Rpb25TaWduYXR1cmVzW2ldLnByaW0gPT09ICdOb25lJykge1xuICAgICAgICAgIHRyYW5zYWN0aW9uU2lnbmF0dXJlc1tpXSA9IHsgcHJpbTogJ1NvbWUnLCBhcmdzOiBbeyBzdHJpbmc6IHMuc2lnbmF0dXJlIH1dIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdHJhbnNhY3Rpb25TaWduYXR1cmVzO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBidWlsZCB0aGUgTWljaGVsc29uIHNjcmlwdCB0byBiZSBzaWduZWQgdG8gdHJhbnNmZXIgZnVuZHMgZnJvbSBhIG11bHRpc2lnXG4gKiB3YWxsZXQuXG4gKlxuICogQHBhcmFtIGNvbnRyYWN0QWRkcmVzcyBUaGUgbXVsdGlzaWcgc21hcnQgY29udHJhY3QgYWRkcmVzc1xuICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uQWRkcmVzcyBUaGUgZGVzdGluYXRpb24gYWNjb3VudCBhZGRyZXNzIChpbXBsaWNpdCBvciBvcmlnaW5hdGVkKVxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBOdW1iZXIgb2YgbXV0ZXogdG8gdHJhbnNmZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250cmFjdENvdW50ZXIgV2FsbGV0IGNvdW50ZXIgdG8gdXNlIGluIHRoZSB0cmFuc2FjdGlvblxuICogQHJldHVybnMgQSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBNaWNoZWxzb24gc2NyaXB0IHRvIHNpZ24gYW5kIGFwcHJvdmUgYSB0cmFuc2ZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJpY011bHRpc2lnRGF0YVRvU2lnbihcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmcsXG4gIGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nLFxuICBhbW91bnQ6IHN0cmluZyxcbiAgY29udHJhY3RDb3VudGVyOiBzdHJpbmdcbikge1xuICBjb25zdCBkYXRhID0ge1xuICAgIHByaW06ICdQYWlyJyxcbiAgICBhcmdzOiBbXG4gICAgICB7IGludDogY29udHJhY3RDb3VudGVyIH0sXG4gICAgICB7XG4gICAgICAgIHByaW06ICdMZWZ0JyxcbiAgICAgICAgYXJnczogW3RyYW5zZmVyVG9BY2NvdW50KGRlc3RpbmF0aW9uQWRkcmVzcywgYW1vdW50KV0sXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG4gIGNvbnN0IHR5cGUgPSB7XG4gICAgcHJpbTogJ3BhaXInLFxuICAgIGFyZ3M6IFtcbiAgICAgIHtcbiAgICAgICAgcHJpbTogJ25hdCcsXG4gICAgICAgIGFubm90czogWyclY291bnRlciddLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJpbTogJ29yJyxcbiAgICAgICAgYXJnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByaW06ICdsYW1iZGEnLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICB7IHByaW06ICd1bml0JyB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdvcGVyYXRpb24nIH1dLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFubm90czogWyclb3BlcmF0aW9uJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnbmF0JyxcbiAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJXRocmVzaG9sZCddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdrZXknIH1dLFxuICAgICAgICAgICAgICAgIGFubm90czogWycla2V5cyddLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFubm90czogWyclY2hhbmdlX2tleXMnXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBhbm5vdHM6IFsnOmFjdGlvbiddLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFubm90czogWyc6cGF5bG9hZCddLFxuICB9O1xuICByZXR1cm4gYnVpbGRQYWlyKGRhdGEsIHR5cGUsIGNvbnRyYWN0QWRkcmVzcyk7XG59XG5cbi8qKlxuICogVXRpbCBmdW5jdGlvbiB0byBidWlsZCBhIE1pY2hlbHNvbiBQYWlyIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHBhcmFtIHR5cGVcbiAqIEBwYXJhbSBjb250cmFjdEFkZHJlc3NcbiAqL1xuZnVuY3Rpb24gYnVpbGRQYWlyKGRhdGE6IGFueSwgdHlwZTogYW55LCBjb250cmFjdEFkZHJlc3M6IGFueSkge1xuICByZXR1cm4ge1xuICAgIGRhdGE6IHtcbiAgICAgIHByaW06ICdQYWlyJyxcbiAgICAgIGFyZ3M6IFt7IHN0cmluZzogY29udHJhY3RBZGRyZXNzIH0sIGRhdGFdLFxuICAgIH0sXG4gICAgdHlwZToge1xuICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgYXJnczogW3sgcHJpbTogJ2FkZHJlc3MnIH0sIHR5cGVdLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGxhbWJkYSBmb3IgdGhlIG11bHRpc2lnIHRyYW5zYWN0aW9uIHRyYW5zZmVyIHRvIGFuIGltcGxpY2l0IG9yIG9yaWdpbmF0ZWQgYWNjb3VudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyBBY2NvdW50IGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgVGhlIGFtb3VudCBpbiBtdXRleiB0byB0cmFuc2ZlclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90ZXpvc3RhcXVpdG8uaW8vZG9jcy9tYWtpbmdfdHJhbnNmZXJzI3RyYW5zZmVyLTAwMDAwNS01MC1tdXRlei10b2tlbnMtZnJvbS1hLWt0MS1hZGRyZXNzLXRvLWEtdHoxLWFkZHJlc3N9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVyVG9BY2NvdW50KGFkZHJlc3M6IHN0cmluZywgYW1vdW50OiBzdHJpbmcpIHtcbiAgaWYgKGlzVmFsaWRLZXkoYWRkcmVzcywgaGFzaFR5cGVzLktUKSkge1xuICAgIHJldHVybiB0cmFuc2ZlclRvT3JpZ2luYXRlZEFjY291bnQoYWRkcmVzcywgYW1vdW50KTtcbiAgfVxuICAvLyBMYW1iZGEgdG8gdHJhbnNmZXIgdG8gYW4gaW1wbGljaXQgYWNjb3VudFxuICByZXR1cm4gW1xuICAgIHsgcHJpbTogJ0RST1AnIH0sXG4gICAgeyBwcmltOiAnTklMJywgYXJnczogW3sgcHJpbTogJ29wZXJhdGlvbicgfV0gfSxcbiAgICB7XG4gICAgICBwcmltOiAnUFVTSCcsXG4gICAgICBhcmdzOiBbeyBwcmltOiAna2V5X2hhc2gnIH0sIHsgc3RyaW5nOiBhZGRyZXNzIH1dLFxuICAgIH0sXG4gICAgeyBwcmltOiAnSU1QTElDSVRfQUNDT1VOVCcgfSxcbiAgICB7XG4gICAgICBwcmltOiAnUFVTSCcsXG4gICAgICBhcmdzOiBbeyBwcmltOiAnbXV0ZXonIH0sIHsgaW50OiBhbW91bnQgfV0sXG4gICAgfSxcbiAgICB7IHByaW06ICdVTklUJyB9LFxuICAgIHsgcHJpbTogJ1RSQU5TRkVSX1RPS0VOUycgfSxcbiAgICB7IHByaW06ICdDT05TJyB9LFxuICBdO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBsYW1iZGEgZm9yIHRoZSBtdWx0aXNpZyB0cmFuc2FjdGlvbiB0cmFuc2ZlciB0byBhbiBvcmlnaW5hdGVkIGFjY291bnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgT3JpZ2luYXRlZCBhY2NvdW50IGFkZHJlc3MgdG8gc2VuZCB0aGUgZnVuZHMgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgVGhlIGFtb3VudCBpbiBtdXRleiB0byB0cmFuc2ZlclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly90ZXpvc3RhcXVpdG8uaW8vZG9jcy9tYWtpbmdfdHJhbnNmZXJzI3RyYW5zZmVyLTAwMDAwMDEtMS1tdXRlei10b2tlbnMtZnJvbS1hLWt0MS1hZGRyZXNzLXRvLWEta3QxLWFkZHJlc3N9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVyVG9PcmlnaW5hdGVkQWNjb3VudChhZGRyZXNzOiBzdHJpbmcsIGFtb3VudDogc3RyaW5nKSB7XG4gIHJldHVybiBbXG4gICAgeyBwcmltOiAnRFJPUCcgfSxcbiAgICB7IHByaW06ICdOSUwnLCBhcmdzOiBbeyBwcmltOiAnb3BlcmF0aW9uJyB9XSB9LFxuICAgIHtcbiAgICAgIHByaW06ICdQVVNIJyxcbiAgICAgIGFyZ3M6IFt7IHByaW06ICdhZGRyZXNzJyB9LCB7IHN0cmluZzogYWRkcmVzcyB9XSxcbiAgICB9LFxuICAgIHsgcHJpbTogJ0NPTlRSQUNUJywgYXJnczogW3sgcHJpbTogJ3VuaXQnIH1dIH0sXG4gICAgW1xuICAgICAge1xuICAgICAgICBwcmltOiAnSUZfTk9ORScsXG4gICAgICAgIGFyZ3M6IFtbW3sgcHJpbTogJ1VOSVQnIH0sIHsgcHJpbTogJ0ZBSUxXSVRIJyB9XV0sIFtdXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICB7XG4gICAgICBwcmltOiAnUFVTSCcsXG4gICAgICBhcmdzOiBbeyBwcmltOiAnbXV0ZXonIH0sIHsgaW50OiBhbW91bnQgfV0sXG4gICAgfSxcbiAgICB7IHByaW06ICdVTklUJyB9LFxuICAgIHsgcHJpbTogJ1RSQU5TRkVSX1RPS0VOUycgfSxcbiAgICB7IHByaW06ICdDT05TJyB9LFxuICBdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJldmVhbCBvcGVyYXRpb24gZm9yIGEgcHVibGljIGtleS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRlciBTb3VyY2UgYWNjb3VudCBuZXh0IGNvdW50ZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgU291cmNlIGFjY291bnQgYWRkcmVzc1xuICogQHBhcmFtIHtzdHJpbmd9IHB1YktleSBUaGUgcHVibGljIGtleSB0byByZXZlYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBmZWUgRmVlcyBpbiBtdXRleiB0byBwYXkgYnkgdGhlIHNvdXJjZSBhY2NvdW50XG4gKiBAcGFyYW0ge3N0cmluZ30gZ2FzTGltaXQgTWF4aW11bSBhbW91bnQgaW4gbXV0ZXogdG8gc3BlbmQgaW4gZ2FzIGZlZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9yYWdlTGltaXQgTWF4aW11bSBhbW91bnQgaW4gbXV0ZXogdG8gc3BlbmQgaW4gc3RvcmFnZSBmZWVzXG4gKiBAcmV0dXJucyBBbiBvcmlnaW5hdGlvbiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldmVhbE9wZXJhdGlvbihcbiAgY291bnRlcjogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgcHViS2V5OiBzdHJpbmcsXG4gIGZlZTogc3RyaW5nID0gREVGQVVMVF9GRUUuUkVWRUFMLnRvU3RyaW5nKCksXG4gIGdhc0xpbWl0OiBzdHJpbmcgPSBERUZBVUxUX0dBU19MSU1JVC5SRVZFQUwudG9TdHJpbmcoKSxcbiAgc3RvcmFnZUxpbWl0OiBzdHJpbmcgPSBERUZBVUxUX1NUT1JBR0VfTElNSVQuUkVWRUFMLnRvU3RyaW5nKClcbik6IFJldmVhbE9wIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAncmV2ZWFsJyxcbiAgICBjb3VudGVyLFxuICAgIHNvdXJjZSxcbiAgICBmZWUsXG4gICAgZ2FzX2xpbWl0OiBnYXNMaW1pdCxcbiAgICBzdG9yYWdlX2xpbWl0OiBzdG9yYWdlTGltaXQsXG4gICAgcHVibGljX2tleTogcHViS2V5LFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBvcmlnaW5hdGlvbiBvcGVyYXRpb24gZm9yIHRoZSBnZW5lcmljIG11bHRpc2cgY29udHJhY3QuIEl0IGRvZXMgbm90IGNyZWF0ZSBhIHJldmVhbFxuICogb3BlcmF0aW9uIGZvciB0aGUgc291cmNlIGFjY291bnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50ZXIgVmFsaWQgc291cmNlIGFjY291bnQgY291bnRlciB0byB1c2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgU291cmNlIGFjY291bnQgYWRkcmVzc1xuICogQHBhcmFtIHtzdHJpbmd9IGZlZSBGZWVzIGluIG11dGV6IHRvIHBheSBieSB0aGUgc291cmNlIGFjY291bnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXNMaW1pdCBNYXhpbXVtIGFtb3VudCBpbiBtdXRleiB0byBzcGVuZCBpbiBnYXMgZmVlc1xuICogQHBhcmFtIHtzdHJpbmd9IHN0b3JhZ2VMaW1pdCBNYXhpbXVtIGFtb3VudCBpbiBtdXRleiB0byBzcGVuZCBpbiBzdG9yYWdlIGZlZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWxhbmNlIE5ldyBtdWx0aXNpZyBhY2NvdW50IGluaXRpYWwgYmFsYW5jZSB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgYWNjb3VudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHViS2V5cyBMaXN0IG9mIHB1YmxpYyBrZXlzIG9mIHRoZSBtdWx0aXNpZyBvd25lclxuICogQHBhcmFtIHtzdHJpbmd9IGRlbGVnYXRlIE9wdGlvbmFsIGltcGxpY2l0IGFkZHJlc3MgdG8gZGVsZWdhdGUgdGhlIHdhbGxldCBmdW5kcyB0b1xuICogQHBhcmFtIHtudW1iZXJ9IHRocmVzaG9sZCBNaW5pbXVtIG51bWJlciBvZiBzaWduYXR1cmVzIHJlcXVpcmVkIHRvIGF1dGhvcml6ZSBhIG11bHRpc2lnIG9wZXJhdGlvblxuICogQHJldHVybnMgQW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljTXVsdGlzaWdPcmlnaW5hdGlvbk9wZXJhdGlvbihcbiAgY291bnRlcjogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgZmVlOiBzdHJpbmcsXG4gIGdhc0xpbWl0OiBzdHJpbmcsXG4gIHN0b3JhZ2VMaW1pdDogc3RyaW5nLFxuICBiYWxhbmNlOiBzdHJpbmcsXG4gIHB1YktleXM6IHN0cmluZ1tdLFxuICBkZWxlZ2F0ZT86IHN0cmluZyxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSBERUZBVUxUX05cbik6IE9yaWdpbmF0aW9uT3Age1xuICBjb25zdCB3YWxsZXRQdWJsaWNLZXlzOiBhbnlbXSA9IFtdO1xuICBwdWJLZXlzLmZvckVhY2goKHBrKSA9PiB3YWxsZXRQdWJsaWNLZXlzLnB1c2goeyBzdHJpbmc6IHBrIH0pKTtcbiAgY29uc3Qgb3JpZ2luYXRpb25PcDogT3JpZ2luYXRpb25PcCA9IHtcbiAgICBraW5kOiAnb3JpZ2luYXRpb24nLFxuICAgIGNvdW50ZXIsXG4gICAgc291cmNlLFxuICAgIGZlZSxcbiAgICBnYXNfbGltaXQ6IGdhc0xpbWl0LFxuICAgIHN0b3JhZ2VfbGltaXQ6IHN0b3JhZ2VMaW1pdCxcbiAgICBiYWxhbmNlLFxuICAgIHNjcmlwdDoge1xuICAgICAgY29kZTogZ2VuZXJpY011bHRpc2lnLFxuICAgICAgc3RvcmFnZToge1xuICAgICAgICBwcmltOiAnUGFpcicsXG4gICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnQ6ICcwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByaW06ICdQYWlyJyxcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGludDogdGhyZXNob2xkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHdhbGxldFB1YmxpY0tleXMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIGlmIChkZWxlZ2F0ZSkge1xuICAgIG9yaWdpbmF0aW9uT3AuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgfVxuICByZXR1cm4gb3JpZ2luYXRpb25PcDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHB1YmxpYyBrZXkgb2YgZWFjaCBvd25lciBvZiBhbiBtdWx0aXNpZyB3YWxsZXQgb3JpZ2luYXRpb24gY29udHJhY3QuXG4gKlxuICogQHBhcmFtIHtPcmlnaW5hdGlvbk9wfSBvcGVyYXRpb24gQW4gb3BlcmF0aW9uIHdpdGggdGhlIGdlbmVyaWMgbXVsdGlzaWcgd2FsbGV0IG9yaWdpbmF0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IExpc3Qgb2YgYWxsIHRoZSBvd25lcnMgc2V0IGluIHRoZSBvcmlnaW5hdGlvbiB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3duZXJzUHVibGljS2V5cyhvcGVyYXRpb246IE9yaWdpbmF0aW9uT3ApOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG93bmVyc0FyZ3MgPSBfLmdldChvcGVyYXRpb24sICdzY3JpcHQuc3RvcmFnZS5hcmdzWzFdLmFyZ3NbMV0nKTtcbiAgaWYgKCFvd25lcnNBcmdzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBvd25lcnNBcmdzLm1hcCgobykgPT4gby5zdHJpbmcpO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgTXVsdGlzaWcgY29udHJhY3QgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbXVyYmFyZC9zbWFydC1jb250cmFjdHMvYmxvYi9tYXN0ZXIvbXVsdGlzaWcvbWljaGVsc29uL2dlbmVyaWMudHpcbiAqL1xuY29uc3QgZ2VuZXJpY011bHRpc2lnID0gW1xuICB7XG4gICAgcHJpbTogJ3BhcmFtZXRlcicsXG4gICAgYXJnczogW1xuICAgICAge1xuICAgICAgICBwcmltOiAnb3InLFxuICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgeyBwcmltOiAndW5pdCcsIGFubm90czogWyclZGVmYXVsdCddIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbTogJ25hdCcsXG4gICAgICAgICAgICAgICAgICAgIGFubm90czogWyclY291bnRlciddLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbTogJ29yJyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdsYW1iZGEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ29wZXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJyVvcGVyYXRpb24nXSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICduYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90czogWycldGhyZXNob2xkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3sgcHJpbTogJ2tleScgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJyVrZXlzJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJyVjaGFuZ2Vfa2V5cyddLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIGFubm90czogWyc6YWN0aW9uJ10sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgYW5ub3RzOiBbJzpwYXlsb2FkJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcmltOiAnb3B0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogW3sgcHJpbTogJ3NpZ25hdHVyZScgfV0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgYW5ub3RzOiBbJyVzaWdzJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYW5ub3RzOiBbJyVtYWluJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIHByaW06ICdzdG9yYWdlJyxcbiAgICBhcmdzOiBbXG4gICAgICB7XG4gICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgYXJnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByaW06ICduYXQnLFxuICAgICAgICAgICAgYW5ub3RzOiBbJyVzdG9yZWRfY291bnRlciddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ25hdCcsXG4gICAgICAgICAgICAgICAgYW5ub3RzOiBbJyV0aHJlc2hvbGQnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdsaXN0JyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbeyBwcmltOiAna2V5JyB9XSxcbiAgICAgICAgICAgICAgICBhbm5vdHM6IFsnJWtleXMnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIHByaW06ICdjb2RlJyxcbiAgICBhcmdzOiBbXG4gICAgICBbXG4gICAgICAgIFtcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7IHByaW06ICdEVVAnIH0sXG4gICAgICAgICAgICB7IHByaW06ICdDQVInIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICBhcmdzOiBbW3sgcHJpbTogJ0NEUicgfV1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgcHJpbTogJ0lGX0xFRlQnLFxuICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgeyBwcmltOiAnRFJPUCcgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdOSUwnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdvcGVyYXRpb24nIH1dLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IHByaW06ICdQQUlSJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdQVVNIJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbeyBwcmltOiAnbXV0ZXonIH0sIHsgaW50OiAnMCcgfV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgcHJpbTogJ0FNT1VOVCcgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFt7IHByaW06ICdDT01QQVJFJyB9LCB7IHByaW06ICdFUScgfV0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcHJpbTogJ0lGJyxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IFtbXSwgW1t7IHByaW06ICdVTklUJyB9LCB7IHByaW06ICdGQUlMV0lUSCcgfV1dXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB7IHByaW06ICdTV0FQJyB9LFxuICAgICAgICAgICAgICB7IHByaW06ICdEVVAnIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbW3sgcHJpbTogJ1NXQVAnIH1dXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0NBUicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtbeyBwcmltOiAnQ0RSJyB9XV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnU0VMRicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnQUREUkVTUycgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnUEFJUicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnUEFDSycgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0NBUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90czogWydAY291bnRlciddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdDRFInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1t7IHByaW06ICdTV0FQJyB9XV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1NXQVAnIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICB7IHByaW06ICdEVVAnIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByaW06ICdDQVInLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdHM6IFsnQHN0b3JlZF9jb3VudGVyJ10sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogW1t7IHByaW06ICdDRFInIH1dXSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtbeyBwcmltOiAnU1dBUCcgfV1dLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgW3sgcHJpbTogJ0NPTVBBUkUnIH0sIHsgcHJpbTogJ0VRJyB9XSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwcmltOiAnSUYnLFxuICAgICAgICAgICAgICAgICAgYXJnczogW1tdLCBbW3sgcHJpbTogJ1VOSVQnIH0sIHsgcHJpbTogJ0ZBSUxXSVRIJyB9XV1dLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbW3sgcHJpbTogJ1NXQVAnIH1dXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RVUCcgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0NBUicsXG4gICAgICAgICAgICAgICAgICAgIGFubm90czogWydAdGhyZXNob2xkJ10sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0NEUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90czogWydAa2V5cyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ1BVU0gnLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICduYXQnIH0sIHsgaW50OiAnMCcgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgYW5ub3RzOiBbJ0B2YWxpZCddLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdTV0FQJyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0lURVInLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtbeyBwcmltOiAnU1dBUCcgfV1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdTV0FQJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0lGX0NPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdJRl9OT05FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdTV0FQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdEUk9QJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ1NXQVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnU1dBUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDogJzInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RVUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnU1dBUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ6ICcyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRFVQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdESUcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OiAnMycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0NIRUNLX1NJR05BVFVSRScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnU1dBUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnSUYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRFJPUCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRkFJTFdJVEgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdQVVNIJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICduYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0FERCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdHM6IFsnQHZhbGlkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnVU5JVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnRkFJTFdJVEgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1NXQVAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbeyBwcmltOiAnQ09NUEFSRScgfSwgeyBwcmltOiAnTEUnIH1dLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHByaW06ICdJRicsXG4gICAgICAgICAgICAgICAgICBhcmdzOiBbW10sIFtbeyBwcmltOiAnVU5JVCcgfSwgeyBwcmltOiAnRkFJTFdJVEgnIH1dXV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdJRl9DT05TJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbW1t7IHByaW06ICdVTklUJyB9LCB7IHByaW06ICdGQUlMV0lUSCcgfV1dLCBbXV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHsgcHJpbTogJ0RST1AnIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnRElQJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdEVVAnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdDQVInIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdESVAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbW3sgcHJpbTogJ0NEUicgfV1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ1BVU0gnLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICduYXQnIH0sIHsgaW50OiAnMScgfV0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmltOiAnQUREJyxcbiAgICAgICAgICAgICAgICAgICAgICBhbm5vdHM6IFsnQG5ld19jb3VudGVyJ10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1BBSVInIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcmltOiAnSUZfTEVGVCcsXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgW3sgcHJpbTogJ1VOSVQnIH0sIHsgcHJpbTogJ0VYRUMnIH1dLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICAgICAgYXJnczogW1t7IHByaW06ICdDQVInIH1dXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnU1dBUCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnUEFJUicgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdOSUwnLFxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt7IHByaW06ICdvcGVyYXRpb24nIH1dLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IHByaW06ICdQQUlSJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICBdLFxuICB9LFxuXTtcblxuLyoqXG4gKiBBZGQgY29udHJhY3QgYWRkcmVzcyB0byBmb3J3YXJkZXIgY29udHJhY3QgdGVtcGxhdGUgYW5kIHJldHVybiBjb250cmFjdCBNaWNoZWxzb24gY29kZSBhcyBKU09OXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyAtIG11bHRpc2lnIGNvbnRyYWN0QWRkcmVzcyB0aGF0IHdpbGwgcmVjZWl2ZSBmb3J3YXJkZWQgZnVuZHNcbiAqIEByZXR1cm5zIHtvYmplY3RbXX0gTWljaGVsc29uIGNvZGUgZm9yIHRoZSBvcmlnaW5hdGlvbiBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRm9yd2FyZGVyKGNvbnRyYWN0QWRkcmVzczogc3RyaW5nKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJpbTogJ3BhcmFtZXRlcicsXG4gICAgICBhcmdzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcmltOiAnb3InLFxuICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgIHsgcHJpbTogJ3VuaXQnLCBhbm5vdHM6IFsnJWRlZmF1bHQnXSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICB7IHByaW06ICduYXQnIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcHJpbTogJ2NvbnRyYWN0JyxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdhZGRyZXNzJywgYW5ub3RzOiBbJzpmcm9tJ10gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ3BhaXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnYWRkcmVzcycsIGFubm90czogWyc6dG8nXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ25hdCcsIGFubm90czogWyc6dmFsdWUnXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBhbm5vdHM6IFsnJWZsdXNoJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBwcmltOiAnc3RvcmFnZScsIGFyZ3M6IFt7IHByaW06ICd1bml0JyB9XSB9LFxuICAgIHtcbiAgICAgIHByaW06ICdjb2RlJyxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByaW06ICdDQVNUJyxcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByaW06ICdvcicsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICd1bml0JyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnbmF0JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbTogJ2NvbnRyYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ2FkZHJlc3MnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAncGFpcicsIGFyZ3M6IFt7IHByaW06ICdhZGRyZXNzJyB9LCB7IHByaW06ICduYXQnIH1dIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgeyBwcmltOiAndW5pdCcgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgcHJpbTogJ0NBUicgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmltOiAnSUZfTEVGVCcsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7IHByaW06ICdEUk9QJyB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHByaW06ICdOT05FJyxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdwYWlyJyxcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICduYXQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdjb250cmFjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltOiAncGFpcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ2FkZHJlc3MnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ3BhaXInLCBhcmdzOiBbeyBwcmltOiAnYWRkcmVzcycgfSwgeyBwcmltOiAnbmF0JyB9XSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBbeyBwcmltOiAnU09NRScgfV0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBwcmltOiAnRElQJywgYXJnczogW1t7IHByaW06ICdQVVNIJywgYXJnczogW3sgcHJpbTogJ2FkZHJlc3MnIH0sIHsgc3RyaW5nOiBjb250cmFjdEFkZHJlc3MgfV0gfV1dIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJpbTogJ0lGX05PTkUnLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICBbeyBwcmltOiAnTklMJywgYXJnczogW3sgcHJpbTogJ29wZXJhdGlvbicgfV0gfV0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7IHByaW06ICdESVAnLCBhcmdzOiBbW3sgcHJpbTogJ0RVUCcgfV1dIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnRFVQJyB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ0NBUicgfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdESVAnLCBhcmdzOiBbW3sgcHJpbTogJ0NEUicgfV1dIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnRElHJywgYXJnczogW3sgaW50OiAnMicgfV0gfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdQQUlSJyB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ1NFTEYnIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnQUREUkVTUycgfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdQQUlSJyB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ0RJUCcsIGFyZ3M6IFtbeyBwcmltOiAnUFVTSCcsIGFyZ3M6IFt7IHByaW06ICdtdXRleicgfSwgeyBpbnQ6ICcwJyB9XSB9XV0gfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdUUkFOU0ZFUl9UT0tFTlMnIH0sXG4gICAgICAgICAgICAgICAgeyBwcmltOiAnRElQJywgYXJnczogW1t7IHByaW06ICdOSUwnLCBhcmdzOiBbeyBwcmltOiAnb3BlcmF0aW9uJyB9XSB9XV0gfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdDT05TJyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgcHJpbTogJ0JBTEFOQ0UnIH0sXG4gICAgICAgICAgeyBwcmltOiAnUFVTSCcsIGFyZ3M6IFt7IHByaW06ICdtdXRleicgfSwgeyBpbnQ6ICcwJyB9XSB9LFxuICAgICAgICAgIHsgcHJpbTogJ0NPTVBBUkUnIH0sXG4gICAgICAgICAgeyBwcmltOiAnRVEnIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJpbTogJ0lGJyxcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgW3sgcHJpbTogJ0RJUCcsIGFyZ3M6IFtbeyBwcmltOiAnRFJPUCcgfV1dIH1dLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcHJpbTogJ0RJUCcsXG4gICAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdDT05UUkFDVCcsIGFyZ3M6IFt7IHByaW06ICd1bml0JyB9XSB9LFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW06ICdJRl9OT05FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1BVU0gnLCBhcmdzOiBbeyBwcmltOiAnc3RyaW5nJyB9LCB7IHN0cmluZzogJ25vdCBhIHdhbGxldCcgfV0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdGQUlMV0lUSCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgeyBwcmltOiAnQkFMQU5DRScgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7IHByaW06ICdVTklUJyB9LFxuICAgICAgICAgICAgICAgICAgICAgIHsgcHJpbTogJ1RSQU5TRkVSX1RPS0VOUycgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IHByaW06ICdTV0FQJyB9LFxuICAgICAgICAgICAgICAgIHsgcHJpbTogJ0NPTlMnIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBwcmltOiAnRElQJywgYXJnczogW1t7IHByaW06ICdVTklUJyB9XV0gfSxcbiAgICAgICAgICB7IHByaW06ICdQQUlSJyB9LFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBvcmlnaW5hdGlvbiBvcGVyYXRpb24gZm9yIGEgZm9yd2FyZGVyIGNvbnRyYWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyBvcmlnaW5hdGVkIG11bHRpc2lnIGFkZHJlc3MgdG8gZm9yd2FyZCBmdW5kc1xuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50ZXIgVmFsaWQgc291cmNlIGFjY291bnQgY291bnRlciB0byB1c2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgU291cmNlIGFjY291bnQgYWRkcmVzc1xuICogQHBhcmFtIHtzdHJpbmd9IGZlZSBGZWVzIGluIG11dGV6IHRvIHBheSBieSB0aGUgc291cmNlIGFjY291bnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBnYXNMaW1pdCBNYXhpbXVtIGFtb3VudCBpbiBtdXRleiB0byBzcGVuZCBpbiBnYXMgZmVlc1xuICogQHBhcmFtIHtzdHJpbmd9IHN0b3JhZ2VMaW1pdCBNYXhpbXVtIGFtb3VudCBpbiBtdXRleiB0byBzcGVuZCBpbiBzdG9yYWdlIGZlZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWxhbmNlIE5ldyBtdWx0aXNpZyBhY2NvdW50IGluaXRpYWwgYmFsYW5jZSB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgYWNjb3VudFxuICogQHJldHVybnMge09yaWdpbmF0aW9uT3B9IHRoZSBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRlck9yaWdpbmF0aW9uT3BlcmF0aW9uKFxuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZyxcbiAgY291bnRlcjogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgZmVlOiBzdHJpbmcsXG4gIGdhc0xpbWl0OiBzdHJpbmcsXG4gIHN0b3JhZ2VMaW1pdDogc3RyaW5nLFxuICBiYWxhbmNlOiBzdHJpbmdcbik6IE9yaWdpbmF0aW9uT3Age1xuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdvcmlnaW5hdGlvbicsXG4gICAgY291bnRlcixcbiAgICBzb3VyY2UsXG4gICAgZmVlLFxuICAgIGdhc19saW1pdDogZ2FzTGltaXQsXG4gICAgc3RvcmFnZV9saW1pdDogc3RvcmFnZUxpbWl0LFxuICAgIGJhbGFuY2UsXG4gICAgc2NyaXB0OiB7XG4gICAgICBjb2RlOiBjcmVhdGVGb3J3YXJkZXIoY29udHJhY3RBZGRyZXNzKSxcbiAgICAgIHN0b3JhZ2U6IHsgcHJpbTogJ1VuaXQnIH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|