@bitgo/sdk-coin-stx 4.4.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/src/lib/abstractContractBuilder.d.ts +2 -2
  2. package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -1
  3. package/dist/src/lib/abstractContractBuilder.js +11 -7
  4. package/dist/src/lib/constants.d.ts +0 -1
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +2 -4
  7. package/dist/src/lib/contractBuilder.d.ts +14 -0
  8. package/dist/src/lib/contractBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/contractBuilder.js +29 -5
  10. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -1
  11. package/dist/src/lib/fungibleTokenTransferBuilder.js +10 -5
  12. package/dist/src/lib/index.d.ts +1 -0
  13. package/dist/src/lib/index.d.ts.map +1 -1
  14. package/dist/src/lib/index.js +2 -1
  15. package/dist/src/lib/keyPair.d.ts +1 -1
  16. package/dist/src/lib/keyPair.d.ts.map +1 -1
  17. package/dist/src/lib/keyPair.js +8 -4
  18. package/dist/src/lib/network.d.ts.map +1 -1
  19. package/dist/src/lib/network.js +4 -3
  20. package/dist/src/lib/postConditions.d.ts +31 -0
  21. package/dist/src/lib/postConditions.d.ts.map +1 -0
  22. package/dist/src/lib/postConditions.js +61 -0
  23. package/dist/src/lib/sbtcWithdrawBuilder.d.ts +1 -1
  24. package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -1
  25. package/dist/src/lib/sbtcWithdrawBuilder.js +11 -9
  26. package/dist/src/lib/sendmanyBuilder.d.ts +1 -1
  27. package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -1
  28. package/dist/src/lib/sendmanyBuilder.js +5 -3
  29. package/dist/src/lib/transaction.d.ts +3 -3
  30. package/dist/src/lib/transaction.d.ts.map +1 -1
  31. package/dist/src/lib/transaction.js +22 -20
  32. package/dist/src/lib/transactionBuilder.d.ts +0 -1
  33. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/transactionBuilder.js +20 -10
  35. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  36. package/dist/src/lib/transactionBuilderFactory.js +2 -2
  37. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  38. package/dist/src/lib/transferBuilder.js +1 -2
  39. package/dist/src/lib/utils.d.ts +2 -2
  40. package/dist/src/lib/utils.d.ts.map +1 -1
  41. package/dist/src/lib/utils.js +30 -21
  42. package/dist/src/stx.d.ts.map +1 -1
  43. package/dist/src/stx.js +13 -13
  44. package/dist/test/fixtures.d.ts +3 -18
  45. package/dist/test/fixtures.d.ts.map +1 -1
  46. package/dist/test/fixtures.js +7 -20
  47. package/dist/test/unit/btcAddressUtils.js +54 -1
  48. package/dist/test/unit/keyPair.js +9 -4
  49. package/dist/test/unit/network.js +5 -5
  50. package/dist/test/unit/postConditions.d.ts +2 -0
  51. package/dist/test/unit/postConditions.d.ts.map +1 -0
  52. package/dist/test/unit/postConditions.js +56 -0
  53. package/dist/test/unit/register.d.ts +2 -0
  54. package/dist/test/unit/register.d.ts.map +1 -0
  55. package/dist/test/unit/register.js +94 -0
  56. package/dist/test/unit/resources.d.ts +2 -0
  57. package/dist/test/unit/resources.d.ts.map +1 -1
  58. package/dist/test/unit/resources.js +7 -4
  59. package/dist/test/unit/sip10Token.js +47 -1
  60. package/dist/test/unit/stx.js +71 -2
  61. package/dist/test/unit/stxNodeErrors.d.ts +2 -0
  62. package/dist/test/unit/stxNodeErrors.d.ts.map +1 -0
  63. package/dist/test/unit/stxNodeErrors.js +118 -0
  64. package/dist/test/unit/transaction.js +24 -1
  65. package/dist/test/unit/transactionBuilder/builderValidators.d.ts +2 -0
  66. package/dist/test/unit/transactionBuilder/builderValidators.d.ts.map +1 -0
  67. package/dist/test/unit/transactionBuilder/builderValidators.js +119 -0
  68. package/dist/test/unit/transactionBuilder/contractBuilder.js +37 -3
  69. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +86 -3
  70. package/dist/test/unit/transactionBuilder/pox5Builder.js +51 -2
  71. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +94 -27
  72. package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +31 -8
  73. package/dist/test/unit/transactionBuilder/transferBuilder.js +69 -3
  74. package/dist/test/unit/transactionBuilderFactory.d.ts +2 -0
  75. package/dist/test/unit/transactionBuilderFactory.d.ts.map +1 -0
  76. package/dist/test/unit/transactionBuilderFactory.js +63 -0
  77. package/dist/test/unit/tstxsignet.js +14 -3
  78. package/dist/test/unit/util.js +94 -14
  79. package/dist/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +8 -8
@@ -77,8 +77,8 @@ describe('Stacks: Fungible Token Transfer Builder', () => {
77
77
  // used type any to access protected properties
78
78
  const txBuilder = factory.getFungibleTokenTransferBuilder();
79
79
  const txBuilderProd = factoryProd.getFungibleTokenTransferBuilder();
80
- txBuilder._network.should.deepEqual(new network_1.StacksTestnet());
81
- txBuilderProd._network.should.deepEqual(new network_1.StacksMainnet());
80
+ txBuilder._network.should.deepEqual(network_1.STACKS_TESTNET);
81
+ txBuilderProd._network.should.deepEqual(network_1.STACKS_MAINNET);
82
82
  });
83
83
  });
84
84
  describe('should build', function () {
@@ -186,6 +186,89 @@ describe('Stacks: Fungible Token Transfer Builder', () => {
186
186
  assert_1.default.throws(() => builder.functionName('claim-rewards'), new RegExp('claim-rewards is not supported contract function name'));
187
187
  });
188
188
  });
189
+ describe('fungible token transfer builder validation and mainnet post-condition', function () {
190
+ it('rejects empty contract name and function name', function () {
191
+ const builder = factory.getFungibleTokenTransferBuilder();
192
+ assert_1.default.throws(() => builder.contractName(''), /Invalid name/);
193
+ assert_1.default.throws(() => builder.functionName(''), /Invalid name/);
194
+ });
195
+ it('rejects fewer than three function args', function () {
196
+ const builder = factory.getFungibleTokenTransferBuilder();
197
+ assert_1.default.throws(() => builder.functionArgs([(0, transactions_1.uintCV)(1), (0, transactions_1.uintCV)(2)]), /Invalid number of arguments/);
198
+ });
199
+ it('builds a mainnet fungible token transfer with a mainnet post-condition address', async function () {
200
+ const builder = factoryProd.getFungibleTokenTransferBuilder();
201
+ builder.fee({ fee: '180' });
202
+ builder.nonce(0);
203
+ builder.contractAddress(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
204
+ builder.contractName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_NAME);
205
+ builder.functionName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.FUNCTION_NAME);
206
+ builder.tokenName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.TOKEN_NAME);
207
+ builder.functionArgs([
208
+ (0, transactions_1.uintCV)('10000'),
209
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
210
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
211
+ ]);
212
+ builder.fromPubKey(testData.TX_SENDER.pub);
213
+ builder.numberSignatures(1);
214
+ const tx = await builder.build();
215
+ should_1.default.exist(tx.toBroadcastFormat());
216
+ });
217
+ it('fails the build for a contract that is not a known sip10 token', async function () {
218
+ const builder = factory.getFungibleTokenTransferBuilder();
219
+ builder.fee({ fee: '180' });
220
+ builder.nonce(0);
221
+ builder.contractAddress('ST000000000000000000002AMW42H');
222
+ builder.contractName('not-a-token');
223
+ builder.functionName('transfer');
224
+ builder.functionArgs([
225
+ (0, transactions_1.uintCV)('10000'),
226
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
227
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
228
+ ]);
229
+ builder.fromPubKey(testData.TX_SENDER.pub);
230
+ builder.numberSignatures(1);
231
+ // must fail at build time rather than emit an 'undefined' asset name that aborts on-chain
232
+ await assert_1.default.rejects(builder.build(), /unknown fungible token contract/);
233
+ });
234
+ });
235
+ describe('sBTC token transfer', function () {
236
+ const sbtcContracts = [
237
+ ['tstx:tsbtc', 'ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT'],
238
+ ['stx:sbtc', 'SM3VDXK3WZZSA84XXFKAFAF15NNZX32CTSG82JFQ4'],
239
+ ];
240
+ for (const [coinName, contractAddress] of sbtcContracts) {
241
+ it(`builds a ${coinName} transfer with a statics-resolved sbtc-token post-condition`, async function () {
242
+ const sbtcFactory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinName));
243
+ const builder = sbtcFactory.getFungibleTokenTransferBuilder();
244
+ builder.fee({ fee: '180' });
245
+ builder.nonce(0);
246
+ builder.contractAddress(contractAddress);
247
+ builder.contractName('sbtc-token');
248
+ builder.functionName('transfer');
249
+ builder.functionArgs([
250
+ (0, transactions_1.uintCV)('10000'),
251
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
252
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
253
+ ]);
254
+ builder.fromPubKey(testData.TX_SENDER.pub);
255
+ builder.numberSignatures(1);
256
+ const tx = await builder.build();
257
+ // no explicit tokenName was set, so it must be resolved from statics
258
+ const payload = tx.stxTransaction.payload;
259
+ should_1.default.equal(payload.contractName.content, 'sbtc-token');
260
+ const postCondition = tx.stxTransaction.postConditions.values[0];
261
+ should_1.default.equal(postCondition.asset.contractName.content, 'sbtc-token');
262
+ should_1.default.equal(postCondition.asset.assetName.content, 'sbtc-token');
263
+ // rebuild from the serialized tx must be byte-identical (post-conditions preserved).
264
+ // An unsigned single-sig tx carries no pubkey in its auth fields, so it is re-supplied
265
+ // here — same pattern as the PoX-5/contract rebuild tests.
266
+ const rebuilt = sbtcFactory.from(tx.toBroadcastFormat());
267
+ rebuilt.fromPubKey(testData.TX_SENDER.pub);
268
+ should_1.default.equal((await rebuilt.build()).toBroadcastFormat(), tx.toBroadcastFormat());
269
+ });
270
+ }
271
+ });
189
272
  });
190
273
  });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsNENBQXVDO0FBQ3ZDLHVEQUF1RztBQUN2RyxvREFBNEI7QUFDNUIsNkNBQStEO0FBQy9ELDhDQUFrRDtBQUNsRCxvREFBNEI7QUFFNUIsc0NBQWtEO0FBRWxELHVEQUF5QztBQUV6QyxRQUFRLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBRXhCLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsZ0JBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFNLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sYUFB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O2dCQUM1RSxNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDNUYsQ0FBQyxDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsR0FBRyxFQUFFO2dCQUNsRixNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFDM0MsSUFBSSxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FDcEUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtnQkFDakMsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLENBQUM7Z0JBQ2hDLGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQzNDLElBQUksTUFBTSxDQUFDLHVEQUF1RCxDQUFDLENBQ3BFLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBidWZmZXJDVkZyb21TdHJpbmcsIG5vbmVDViwgc29tZUNWLCBzdGFuZGFyZFByaW5jaXBhbENWLCB1aW50Q1YgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBTdGFja3NNYWlubmV0LCBTdGFja3NUZXN0bmV0IH0gZnJvbSAnQHN0YWNrcy9uZXR3b3JrJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IFNpcDEwVG9rZW4sIFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogRnVuZ2libGUgVG9rZW4gVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4OnNidGMnO1xuICBjb25zdCBjb2luTmFtZVRlc3QgPSAndHN0eDp0c2lwNmRwJztcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0c3R4OnRzaXA2ZHAnLCBTaXAxMFRva2VuLmNyZWF0ZUluc3RhbmNlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpcDEwIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWVUZXN0KSk7XG4gICAgY29uc3QgZmFjdG9yeVByb2QgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG5cbiAgICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgwKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdEFkZHJlc3ModGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0TmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICB0eEJ1aWxkZXIuZnVuY3Rpb25OYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5GVU5DVElPTl9OQU1FKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbk5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlRPS0VOX05BTUUpO1xuICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ2Z1bmdpYmxlIHRva2VuIGJ1aWxkZXIgZW52aXJvbm1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHNlbGVjdCB0aGUgcmlnaHQgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnkuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpLmNvaW5OYW1lKCksICd0c3R4OnRzaXA2ZHAnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnlQcm9kLmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKS5jb2luTmFtZSgpLCAnc3R4OnNidGMnKTtcbiAgICAgICAgLy8gdXNlZCB0eXBlIGFueSB0byBhY2Nlc3MgcHJvdGVjdGVkIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyOiBhbnkgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyUHJvZDogYW55ID0gZmFjdG9yeVByb2QuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuXG4gICAgICAgIHR4QnVpbGRlci5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKG5ldyBTdGFja3NUZXN0bmV0KCkpO1xuICAgICAgICB0eEJ1aWxkZXJQcm9kLl9uZXR3b3JrLnNob3VsZC5kZWVwRXF1YWwobmV3IFN0YWNrc01haW5uZXQoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnYW4gdW5zaWduZWQgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB1aW50Q1YoJzEwMDAwJyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIHNvbWVDVihidWZmZXJDVkZyb21TdHJpbmcoJzEnKSksXG4gICAgICAgIF0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHN0YWNrc1R4biA9IHR4IGFzIFRyYW5zYWN0aW9uO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHN0YWNrc1R4bi5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9ucy52YWx1ZXMubGVuZ3RoLCAxKTtcblxuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsICd0c2lwNmRwLXRva2VuJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCAndHJhbnNmZXInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5VTlNJR05FRF9TSU5HTEVfU0lHX1RYKTtcblxuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIHR4Lm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgICB0eC5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyk7XG4gICAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2FuIHVuc2lnbmVkIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGhvdXQgbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgIF0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3RBZGRyZXNzLCB0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLCAndHNpcDZkcC10b2tlbicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmZ1bmN0aW9uTmFtZSwgJ3RyYW5zZmVyJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLnRvU3RyaW5nKCksICcxODAnKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICAgIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5VTlNJR05FRF9TSU5HTEVfU0lHX1RYX1dJVEhPVVRfTUVNT1xuICAgICAgICApO1xuXG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBtdWx0aXNpZyBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB1aW50Q1YoJzEwMDAwJyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIHNvbWVDVihidWZmZXJDVkZyb21TdHJpbmcoJzEnKSksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MSB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYyIH0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkoW3Rlc3REYXRhLnB1YjEsIHRlc3REYXRhLnB1YjIsIHRlc3REYXRhLnB1YjNdKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TSUdORURfTVVMVElfU0lHX1RYKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBtdWx0aXNpZyBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRob3V0IG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICB1aW50Q1YoJzEwMDAwJyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIG5vbmVDVigpLFxuICAgICAgICBdKTtcblxuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjEgfSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MiB9KTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KFt0ZXN0RGF0YS5wdWIxLCB0ZXN0RGF0YS5wdWIyLCB0ZXN0RGF0YS5wdWIzXSk7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygyKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICAgIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TSUdORURfTVVMVElfU0lHX1RYX1dJVEhPVVRfTUVNT1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2hvdWxkIGZhaWwnLCAoKSA9PiB7XG4gICAgICBpdCgnYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHdpdGggYW4gaW52YWxpZCBrZXknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5zaWduKHsga2V5OiAnaW52YWxpZEtleScgfSksIC9VbnN1cHBvcnRlZCBwcml2YXRlIGtleS8pO1xuICAgICAgfSk7XG4gICAgICBpdCgnYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKCdpbnZhbGlkQ29udHJhY3RBZGRyZXNzJyksIC9JbnZhbGlkIGFkZHJlc3MvKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ2EgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgYnVpbGRlciB3aXRoIGFuIGludmFsaWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiBidWlsZGVyLmZ1bmN0aW9uTmFtZSgndGVzdC1mdW5jdGlvbicpLFxuICAgICAgICAgIG5ldyBSZWdFeHAoJ3Rlc3QtZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBjb250cmFjdCBmdW5jdGlvbiBuYW1lJylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3JlamVjdHMgUG9YLTUgZnVuY3Rpb25zJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdjbGFpbS1yZXdhcmRzJyksXG4gICAgICAgICAgbmV3IFJlZ0V4cCgnY2xhaW0tcmV3YXJkcyBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsNENBQXVDO0FBQ3ZDLHVEQUF1RztBQUN2RyxvREFBNEI7QUFDNUIsNkNBQWlFO0FBQ2pFLDhDQUFrRDtBQUNsRCxvREFBNEI7QUFFNUIsc0NBQWtEO0FBRWxELHVEQUF5QztBQUV6QyxRQUFRLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBRXhCLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsZ0JBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFNLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sYUFB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ZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgYnVmZmVyQ1ZGcm9tU3RyaW5nLCBub25lQ1YsIHNvbWVDViwgc3RhbmRhcmRQcmluY2lwYWxDViwgdWludENWIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgU1RBQ0tTX01BSU5ORVQsIFNUQUNLU19URVNUTkVUIH0gZnJvbSAnQHN0YWNrcy9uZXR3b3JrJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IFNpcDEwVG9rZW4sIFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogRnVuZ2libGUgVG9rZW4gVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4OnNidGMnO1xuICBjb25zdCBjb2luTmFtZVRlc3QgPSAndHN0eDp0c2lwNmRwJztcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0c3R4OnRzaXA2ZHAnLCBTaXAxMFRva2VuLmNyZWF0ZUluc3RhbmNlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpcDEwIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWVUZXN0KSk7XG4gICAgY29uc3QgZmFjdG9yeVByb2QgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG5cbiAgICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICAgIHR4QnVpbGRlci5ub25jZSgwKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdEFkZHJlc3ModGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0TmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfTkFNRSk7XG4gICAgICB0eEJ1aWxkZXIuZnVuY3Rpb25OYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5GVU5DVElPTl9OQU1FKTtcbiAgICAgIHR4QnVpbGRlci50b2tlbk5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlRPS0VOX05BTUUpO1xuICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ2Z1bmdpYmxlIHRva2VuIGJ1aWxkZXIgZW52aXJvbm1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHNlbGVjdCB0aGUgcmlnaHQgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnkuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpLmNvaW5OYW1lKCksICd0c3R4OnRzaXA2ZHAnKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnlQcm9kLmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKS5jb2luTmFtZSgpLCAnc3R4OnNidGMnKTtcbiAgICAgICAgLy8gdXNlZCB0eXBlIGFueSB0byBhY2Nlc3MgcHJvdGVjdGVkIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyOiBhbnkgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyUHJvZDogYW55ID0gZmFjdG9yeVByb2QuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuXG4gICAgICAgIHR4QnVpbGRlci5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKFNUQUNLU19URVNUTkVUKTtcbiAgICAgICAgdHhCdWlsZGVyUHJvZC5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKFNUQUNLU19NQUlOTkVUKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdhbiB1bnNpZ25lZCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgc29tZUNWKGJ1ZmZlckNWRnJvbVN0cmluZygnMScpKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3Qgc3RhY2tzVHhuID0gdHggYXMgVHJhbnNhY3Rpb247XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoc3RhY2tzVHhuLnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlcy5sZW5ndGgsIDEpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgJ3RzaXA2ZHAtdG9rZW4nKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsICd0cmFuc2ZlcicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlVOU0lHTkVEX1NJTkdMRV9TSUdfVFgpO1xuXG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYW4gdW5zaWduZWQgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aG91dCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsICd0c2lwNmRwLXRva2VuJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCAndHJhbnNmZXInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgICAgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlVOU0lHTkVEX1NJTkdMRV9TSUdfVFhfV0lUSE9VVF9NRU1PXG4gICAgICAgICk7XG5cbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpO1xuICAgICAgICB0eC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgc29tZUNWKGJ1ZmZlckNWRnJvbVN0cmluZygnMScpKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYxIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjIgfSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleShbdGVzdERhdGEucHViMSwgdGVzdERhdGEucHViMiwgdGVzdERhdGEucHViM10pO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNJR05FRF9NVUxUSV9TSUdfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGhvdXQgbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgbm9uZUNWKCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MSB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYyIH0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkoW3Rlc3REYXRhLnB1YjEsIHRlc3REYXRhLnB1YjIsIHRlc3REYXRhLnB1YjNdKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgICAgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNJR05FRF9NVUxUSV9TSUdfVFhfV0lUSE9VVF9NRU1PXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgZmFpbCcsICgpID0+IHtcbiAgICAgIGl0KCdhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBhbiBpbnZhbGlkIGtleScsICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLnNpZ24oeyBrZXk6ICdpbnZhbGlkS2V5JyB9KSwgL1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Lyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBhbiBpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5jb250cmFjdEFkZHJlc3MoJ2ludmFsaWRDb250cmFjdEFkZHJlc3MnKSwgL0ludmFsaWQgYWRkcmVzcy8pO1xuICAgICAgfSk7XG4gICAgICBpdCgnYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0ZXN0LWZ1bmN0aW9uJyksXG4gICAgICAgICAgbmV3IFJlZ0V4cCgndGVzdC1mdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpdCgncmVqZWN0cyBQb1gtNSBmdW5jdGlvbnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYnVpbGRlci5mdW5jdGlvbk5hbWUoJ2NsYWltLXJld2FyZHMnKSxcbiAgICAgICAgICBuZXcgUmVnRXhwKCdjbGFpbS1yZXdhcmRzIGlzIG5vdCBzdXBwb3J0ZWQgY29udHJhY3QgZnVuY3Rpb24gbmFtZScpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHZhbGlkYXRpb24gYW5kIG1haW5uZXQgcG9zdC1jb25kaXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgncmVqZWN0cyBlbXB0eSBjb250cmFjdCBuYW1lIGFuZCBmdW5jdGlvbiBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5jb250cmFjdE5hbWUoJycpLCAvSW52YWxpZCBuYW1lLyk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mdW5jdGlvbk5hbWUoJycpLCAvSW52YWxpZCBuYW1lLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JlamVjdHMgZmV3ZXIgdGhhbiB0aHJlZSBmdW5jdGlvbiBhcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5mdW5jdGlvbkFyZ3MoW3VpbnRDVigxKSwgdWludENWKDIpXSksIC9JbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGRzIGEgbWFpbm5ldCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB3aXRoIGEgbWFpbm5ldCBwb3N0LWNvbmRpdGlvbiBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeVByb2QuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICAgIGJ1aWxkZXIubm9uY2UoMCk7XG4gICAgICAgIGJ1aWxkZXIuY29udHJhY3RBZGRyZXNzKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX05BTUUpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uTmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuRlVOQ1RJT05fTkFNRSk7XG4gICAgICAgIGJ1aWxkZXIudG9rZW5OYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5UT0tFTl9OQU1FKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgIF0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIHNob3VsZC5leGlzdCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZmFpbHMgdGhlIGJ1aWxkIGZvciBhIGNvbnRyYWN0IHRoYXQgaXMgbm90IGEga25vd24gc2lwMTAgdG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgICBidWlsZGVyLmNvbnRyYWN0QWRkcmVzcygnU1QwMDAwMDAwMDAwMDAwMDAwMDAwMDJBTVc0MkgnKTtcbiAgICAgICAgYnVpbGRlci5jb250cmFjdE5hbWUoJ25vdC1hLXRva2VuJyk7XG4gICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0cmFuc2ZlcicpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICAvLyBtdXN0IGZhaWwgYXQgYnVpbGQgdGltZSByYXRoZXIgdGhhbiBlbWl0IGFuICd1bmRlZmluZWQnIGFzc2V0IG5hbWUgdGhhdCBhYm9ydHMgb24tY2hhaW5cbiAgICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoYnVpbGRlci5idWlsZCgpLCAvdW5rbm93biBmdW5naWJsZSB0b2tlbiBjb250cmFjdC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc0JUQyB0b2tlbiB0cmFuc2ZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNidGNDb250cmFjdHMgPSBbXG4gICAgICAgIFsndHN0eDp0c2J0YycsICdTVDFGN1FBMk1ERjE3UzgwN0VQQTM2VFNTOEFNRUZZNEtBOVRWR1dYVCddLFxuICAgICAgICBbJ3N0eDpzYnRjJywgJ1NNM1ZEWEszV1paU0E4NFhYRktBRkFGMTVOTlpYMzJDVFNHODJKRlE0J10sXG4gICAgICBdIGFzIGNvbnN0O1xuXG4gICAgICBmb3IgKGNvbnN0IFtjb2luTmFtZSwgY29udHJhY3RBZGRyZXNzXSBvZiBzYnRjQ29udHJhY3RzKSB7XG4gICAgICAgIGl0KGBidWlsZHMgYSAke2NvaW5OYW1lfSB0cmFuc2ZlciB3aXRoIGEgc3RhdGljcy1yZXNvbHZlZCBzYnRjLXRva2VuIHBvc3QtY29uZGl0aW9uYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHNidGNGYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZSkpO1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBzYnRjRmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgICAgIGJ1aWxkZXIubm9uY2UoMCk7XG4gICAgICAgICAgYnVpbGRlci5jb250cmFjdEFkZHJlc3MoY29udHJhY3RBZGRyZXNzKTtcbiAgICAgICAgICBidWlsZGVyLmNvbnRyYWN0TmFtZSgnc2J0Yy10b2tlbicpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0cmFuc2ZlcicpO1xuICAgICAgICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpLFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG5cbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICAgIC8vIG5vIGV4cGxpY2l0IHRva2VuTmFtZSB3YXMgc2V0LCBzbyBpdCBtdXN0IGJlIHJlc29sdmVkIGZyb20gc3RhdGljc1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgeyBjb250cmFjdE5hbWU6IHsgY29udGVudDogc3RyaW5nIH0gfTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5jb250cmFjdE5hbWUuY29udGVudCwgJ3NidGMtdG9rZW4nKTtcblxuICAgICAgICAgIGNvbnN0IHBvc3RDb25kaXRpb24gPSAodHggYXMgVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlc1swXSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIGFzc2V0OiB7IGNvbnRyYWN0TmFtZTogeyBjb250ZW50OiBzdHJpbmcgfTsgYXNzZXROYW1lOiB7IGNvbnRlbnQ6IHN0cmluZyB9IH07XG4gICAgICAgICAgfTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwocG9zdENvbmRpdGlvbi5hc3NldC5jb250cmFjdE5hbWUuY29udGVudCwgJ3NidGMtdG9rZW4nKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwocG9zdENvbmRpdGlvbi5hc3NldC5hc3NldE5hbWUuY29udGVudCwgJ3NidGMtdG9rZW4nKTtcblxuICAgICAgICAgIC8vIHJlYnVpbGQgZnJvbSB0aGUgc2VyaWFsaXplZCB0eCBtdXN0IGJlIGJ5dGUtaWRlbnRpY2FsIChwb3N0LWNvbmRpdGlvbnMgcHJlc2VydmVkKS5cbiAgICAgICAgICAvLyBBbiB1bnNpZ25lZCBzaW5nbGUtc2lnIHR4IGNhcnJpZXMgbm8gcHVia2V5IGluIGl0cyBhdXRoIGZpZWxkcywgc28gaXQgaXMgcmUtc3VwcGxpZWRcbiAgICAgICAgICAvLyBoZXJlIOKAlCBzYW1lIHBhdHRlcm4gYXMgdGhlIFBvWC01L2NvbnRyYWN0IHJlYnVpbGQgdGVzdHMuXG4gICAgICAgICAgY29uc3QgcmVidWlsdCA9IHNidGNGYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICAgICAgcmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCgoYXdhaXQgcmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -132,7 +132,7 @@ describe('Stacks: PoX-5 Builder', function () {
132
132
  });
133
133
  it('carries post-condition mode/conditions and preserves them across the fee re-build (SI-1936)', async () => {
134
134
  const functionArgs = registerForBondRealArgs_1.pox5RegisterForBondArgsHex.map((hex) => (0, transactions_1.deserializeCV)(Buffer.from(hex.replace(/^0x/, ''), 'hex')));
135
- const postCondition = (0, transactions_1.makeStandardSTXPostCondition)(testData.TX_SENDER.address, transactions_1.FungibleConditionCode.LessEqual, 100000000);
135
+ const postCondition = transactions_1.Pc.principal(testData.TX_SENDER.address).willSendLte(100000000).ustx();
136
136
  const builder = configure(factory.getPox5Builder());
137
137
  builder.functionName('register-for-bond');
138
138
  builder.functionArgs(functionArgs);
@@ -149,6 +149,32 @@ describe('Stacks: PoX-5 Builder', function () {
149
149
  should_1.default.equal(rebuiltTx.stxTransaction.postConditionMode, transactions_1.PostConditionMode.Deny);
150
150
  should_1.default.equal(rebuiltTx.stxTransaction.postConditions.values.length, 1);
151
151
  });
152
+ it('register-for-bond builds Deny + a type-3 staking post-condition, byte-identical across from(hex) (SI-1936)', async () => {
153
+ const functionArgs = registerForBondRealArgs_1.pox5RegisterForBondArgsHex.map((hex) => (0, transactions_1.deserializeCV)(Buffer.from(hex.replace(/^0x/, ''), 'hex')));
154
+ // SIP-044 staking post-condition on the register amount (contract arg index 2 = amount-ustx).
155
+ const amountUstx = (0, transactions_1.cvToValue)(functionArgs[2], true).toString();
156
+ const stakingPostCondition = src_1.StxLib.makeStakingPostCondition(testData.TX_SENDER.address, 'eq', amountUstx);
157
+ const builder = configure(factory.getPox5Builder());
158
+ builder.functionName('register-for-bond');
159
+ builder.functionArgs(functionArgs);
160
+ builder.postConditionMode(transactions_1.PostConditionMode.Deny);
161
+ builder.postConditions([stakingPostCondition]);
162
+ const tx = (await builder.build());
163
+ should_1.default.equal(tx.stxTransaction.postConditionMode, transactions_1.PostConditionMode.Deny);
164
+ should_1.default.equal(tx.stxTransaction.postConditions.values.length, 1);
165
+ should_1.default.equal(tx.stxTransaction.postConditions.values[0].conditionType, transactions_1.PostConditionType.Staking);
166
+ should_1.default.equal(tx.stxTransaction.postConditions.values[0].amount, BigInt(amountUstx));
167
+ // The riskiest path: `initBuilder` must restore the mode AND the post-conditions from the
168
+ // deserialized tx, so a `from(hex)` rebuild (the fee re-build) stays byte-identical.
169
+ const hex = tx.toBroadcastFormat();
170
+ const rebuilt = factory.from(hex);
171
+ rebuilt.fromPubKey(testData.TX_SENDER.pub);
172
+ const rebuiltTx = (await rebuilt.build());
173
+ should_1.default.equal(rebuiltTx.toBroadcastFormat(), hex);
174
+ should_1.default.equal(rebuiltTx.stxTransaction.postConditionMode, transactions_1.PostConditionMode.Deny);
175
+ should_1.default.equal(rebuiltTx.stxTransaction.postConditions.values.length, 1);
176
+ should_1.default.equal(rebuiltTx.stxTransaction.postConditions.values[0].conditionType, transactions_1.PostConditionType.Staking);
177
+ });
152
178
  it('validates the PoX-5 contract address during factory routing', async () => {
153
179
  const builder = configure(factory.getPox5Builder());
154
180
  builder.registerForBond({
@@ -460,5 +486,28 @@ describe('Stacks: PoX-5 Builder', function () {
460
486
  }), /address.contract-name format/);
461
487
  });
462
488
  });
489
+ describe('calculateRewards and claimStakerRewardsForSigner', () => {
490
+ it('builds calculate-rewards with a list of bond indices', async () => {
491
+ const builder = configure(factory.getPox5Builder());
492
+ builder.calculateRewards([1, 2]);
493
+ const txJson = (await builder.build()).toJson();
494
+ should_1.default.exist(txJson.payload);
495
+ });
496
+ it('builds claim-staker-rewards for a signer with and without a bond index', async () => {
497
+ const withBondIndex = configure(factory.getPox5Builder());
498
+ withBondIndex.claimStakerRewardsForSigner({
499
+ staker: testData.TX_SENDER.address,
500
+ rewardCycle: 1,
501
+ bondIndex: 2,
502
+ });
503
+ should_1.default.exist((await withBondIndex.build()).toBroadcastFormat());
504
+ const withoutBondIndex = configure(factory.getPox5Builder());
505
+ withoutBondIndex.claimStakerRewardsForSigner({
506
+ staker: testData.TX_SENDER.address,
507
+ rewardCycle: 1,
508
+ });
509
+ should_1.default.exist((await withoutBondIndex.build()).toBroadcastFormat());
510
+ });
511
+ });
463
512
  });
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG94NUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3BveDVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHVEQVU4QjtBQUM5Qiw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBRzVCLHNDQUFzQztBQUN0Qyx1REFBeUM7QUFDekMsd0VBQXdFO0FBRXhFLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcseURBQXlELENBQUM7SUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyw2REFBNkQsQ0FBQztJQUV2RixTQUFTLFNBQVMsQ0FBQyxPQUEyQjtRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLGlCQUFpQjtRQUN4QixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUk7WUFDWixFQUFFLEVBQUUsSUFBSTtZQUNSLFdBQVcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFB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QVUsRUFBRSxXQUFXO2dCQUN2QixTQUFTLEVBQUUsQ0FBQztnQkFDWixXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFDLEVBQ0osOEJBQThCLENBQy9CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBDbGFyaXR5VHlwZSxcbiAgQ29udHJhY3RDYWxsUGF5bG9hZCxcbiAgY3JlYXRlQWRkcmVzcyxcbiAgY3ZUb1N0cmluZyxcbiAgY3ZUb1ZhbHVlLFxuICBkZXNlcmlhbGl6ZUNWLFxuICBGdW5naWJsZUNvbmRpdGlvbkNvZGUsXG4gIG1ha2VTdGFuZGFyZFNUWFBvc3RDb25kaXRpb24sXG4gIFBvc3RDb25kaXRpb25Nb2RlLFxufSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgcG94NVJlZ2lzdGVyRm9yQm9uZEFyZ3NIZXggfSBmcm9tICcuLi9yZWdpc3RlckZvckJvbmRSZWFsQXJncyc7XG5cbmRlc2NyaWJlKCdTdGFja3M6IFBvWC01IEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0c3R4JykpO1xuICBjb25zdCBzaWduZXJNYW5hZ2VyID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuc2lnbmVyLW1hbmFnZXInO1xuICBjb25zdCBvbGRTaWduZXJNYW5hZ2VyID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAub2xkLXNpZ25lci1tYW5hZ2VyJztcblxuICBmdW5jdGlvbiBjb25maWd1cmUoYnVpbGRlcjogU3R4TGliLlBveDVCdWlsZGVyKTogU3R4TGliLlBveDVCdWlsZGVyIHtcbiAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgYnVpbGRlci5ub25jZSgwKTtcbiAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRMb2NrdXBPdXRwdXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgIHR4OiAnMDAnLFxuICAgICAgb3V0cHV0SW5kZXg6IDAsXG4gICAgICBoZWFkZXI6ICcwMCcucmVwZWF0KDgwKSxcbiAgICAgIGxlYWZIYXNoZXM6IFsnMDAnLnJlcGVhdCgzMildLFxuICAgICAgdHhDb3VudDogMSxcbiAgICAgIHR4SW5kZXg6IDAsXG4gICAgICBhbW91bnQ6IDEwMDAwLFxuICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICB9O1xuICB9XG5cbiAgaXQoJ2J1aWxkcyBhbmQgcGFyc2VzIHJlZ2lzdGVyLWZvci1ib25kIHdpdGggYW4gTDEgbG9ja3VwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICBsb2NrdXA6IHtcbiAgICAgICAga2luZDogJ2J0YycsXG4gICAgICAgIHVubG9ja0J5dGVzOiAnMDAnLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGVpZ2h0OiA5MjMxLFxuICAgICAgICAgICAgdHg6ICcwMCcsXG4gICAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICAgIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLFxuICAgICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgICB0eENvdW50OiAxLFxuICAgICAgICAgICAgdHhJbmRleDogMCxcbiAgICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgICB1bmxvY2tCdXJuSGVpZ2h0OiA5NDkwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgc2lnbmVyQ2FsbGRhdGE6ICcwMCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25OYW1lLCAncmVnaXN0ZXItZm9yLWJvbmQnKTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLCA1KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdLnR5cGUsIENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUsIENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSk7XG5cbiAgICAvLyBTSS0xOTIyOiB0aGUgcmVnaXN0ZXIgYXJncyBtdXN0IGJlIEpTT04tc2VyaWFsaXNhYmxlIChubyBCaWdJbnQgbGVha3MpIOKAlCB0aGlzIG9iamVjdCBpcyBzZW50XG4gICAgLy8gdG8gdGhlIHBvbGljeSBzZXJ2aWNlLCB3aGVyZSBmYXN0LXNhZmUtc3RyaW5naWZ5IG90aGVyd2lzZSByZXBsYWNlcyB0aGUgd2hvbGUgYm9keS5cbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKSk7XG4gICAgc2hvdWxkLmVxdWFsKHR5cGVvZiBwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS52YWx1ZS5kYXRhLm91dHB1dHMubGlzdFswXS5kYXRhLmFtb3VudC52YWx1ZSwgJ3N0cmluZycpO1xuXG4gICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgcmVidWlsdEJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBjb25zdCByZWJ1aWx0ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwocmVidWlsdC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgfSk7XG5cbiAgaXQoJ3BpbnMgdGhlIHJlYWwgc3RhZ2luZyByZWdpc3Rlci1mb3ItYm9uZCBhcmdzIGFuZCBrZWVwcyB0aGVtIEpTT04tc2VyaWFsaXNhYmxlIChTSS0xOTIyKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmdW5jdGlvbkFyZ3MgPSBwb3g1UmVnaXN0ZXJGb3JCb25kQXJnc0hleC5tYXAoKGhleCkgPT5cbiAgICAgIGRlc2VyaWFsaXplQ1YoQnVmZmVyLmZyb20oaGV4LnJlcGxhY2UoL14weC8sICcnKSwgJ2hleCcpKVxuICAgICk7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKGZ1bmN0aW9uQXJncyk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHR4LnRvSnNvbigpLnBheWxvYWQgYXMgYW55O1xuXG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aCwgNSk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUsIENsYXJpdHlUeXBlLlVJbnQpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1sxXS50eXBlLCBDbGFyaXR5VHlwZS5QcmluY2lwYWxDb250cmFjdCk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlT2spO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLCBDbGFyaXR5VHlwZS5PcHRpb25hbFNvbWUpO1xuXG4gICAgLy8gdGhlIGJ0Yy1sb2NrdXAgKGFyZyA0KSBuZXN0ZWQgdWludHMgbXVzdCBiZSBzdHJpbmdpZmllZCDigJQgbm8gQmlnSW50IGxlYWtzIGludG8gdGhlIHBheWxvYWRcbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKSk7XG4gICAgc2hvdWxkLmVxdWFsKHR5cGVvZiBwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS52YWx1ZS5kYXRhLm91dHB1dHMubGlzdFswXS5kYXRhLmFtb3VudC52YWx1ZSwgJ3N0cmluZycpO1xuICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgcGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUuZGF0YS5vdXRwdXRzLmxpc3RbMF0uZGF0YVsndW5sb2NrLWJ1cm4taGVpZ2h0J10udmFsdWUsICdzdHJpbmcnKTtcblxuICAgIC8vIHRoZSBmZWUgcmUtYnVpbGQgKGZhY3RvcnkuZnJvbSDihpIgaW5pdEJ1aWxkZXIpIG11c3Qgc3RheSBieXRlLWlkZW50aWNhbFxuICAgIGNvbnN0IHJlYnVpbHQgPSBmYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgcmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgIHNob3VsZC5lcXVhbCgoYXdhaXQgcmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgfSk7XG5cbiAgaXQoJ2NhcnJpZXMgcG9zdC1jb25kaXRpb24gbW9kZS9jb25kaXRpb25zIGFuZCBwcmVzZXJ2ZXMgdGhlbSBhY3Jvc3MgdGhlIGZlZSByZS1idWlsZCAoU0ktMTkzNiknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZnVuY3Rpb25BcmdzID0gcG94NVJlZ2lzdGVyRm9yQm9uZEFyZ3NIZXgubWFwKChoZXgpID0+XG4gICAgICBkZXNlcmlhbGl6ZUNWKEJ1ZmZlci5mcm9tKGhleC5yZXBsYWNlKC9eMHgvLCAnJyksICdoZXgnKSlcbiAgICApO1xuICAgIGNvbnN0IHBvc3RDb25kaXRpb24gPSBtYWtlU3RhbmRhcmRTVFhQb3N0Q29uZGl0aW9uKFxuICAgICAgdGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MsXG4gICAgICBGdW5naWJsZUNvbmRpdGlvbkNvZGUuTGVzc0VxdWFsLFxuICAgICAgMTAwMDAwMDAwXG4gICAgKTtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5mdW5jdGlvbk5hbWUoJ3JlZ2lzdGVyLWZvci1ib25kJyk7XG4gICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoZnVuY3Rpb25BcmdzKTtcbiAgICBidWlsZGVyLnBvc3RDb25kaXRpb25Nb2RlKFBvc3RDb25kaXRpb25Nb2RlLkRlbnkpO1xuICAgIGJ1aWxkZXIucG9zdENvbmRpdGlvbnMoW3Bvc3RDb25kaXRpb25dKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFN0eExpYi5UcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9uTW9kZSwgUG9zdENvbmRpdGlvbk1vZGUuRGVueSk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlcy5sZW5ndGgsIDEpO1xuXG4gICAgLy8gYGJ1aWxkVHJhbnNhY3Rpb25XaXRoRmVlYCByZS1idWlsZHMgdmlhIGBmYWN0b3J5LmZyb20oaGV4KWA7IHRoZSBwb3N0LWNvbmRpdGlvbnMgbXVzdCBzdXJ2aXZlXG4gICAgLy8gKGluaXRCdWlsZGVyIHJlc3RvcmVzIHRoZW0gZnJvbSB0aGUgZGVzZXJpYWxpemVkIHR4KS5cbiAgICBjb25zdCByZWJ1aWx0ID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHQuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBjb25zdCByZWJ1aWx0VHggPSAoYXdhaXQgcmVidWlsdC5idWlsZCgpKSBhcyBTdHhMaWIuVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9uTW9kZSwgUG9zdENvbmRpdGlvbk1vZGUuRGVueSk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9ucy52YWx1ZXMubGVuZ3RoLCAxKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhbGlkYXRlcyB0aGUgUG9YLTUgY29udHJhY3QgYWRkcmVzcyBkdXJpbmcgZmFjdG9yeSByb3V0aW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICBsb2NrdXA6IHsga2luZDogJ2J0YycsIHVubG9ja0J5dGVzOiAnMDAnLCBvdXRwdXRzOiBbdmFsaWRMb2NrdXBPdXRwdXQoKV0gfSxcbiAgICB9KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gKHR4IGFzIFN0eExpYi5UcmFuc2FjdGlvbikuc3R4VHJhbnNhY3Rpb24ucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eCcpLCBwYXlsb2FkKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgU3R4TGliLlBveDVCdWlsZGVyLmlzVmFsaWRDb250cmFjdENhbGwoY29pbnMuZ2V0KCd0c3R4JyksIHtcbiAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBjcmVhdGVBZGRyZXNzKHRlc3REYXRhLkFDQ09VTlRfMS5hZGRyZXNzKSxcbiAgICAgIH0pLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9KTtcblxuICBpdCgnYnVpbGRzIHNCVEMgcmVnaXN0cmF0aW9uIHVzaW5nIHJlc3BvbnNlIGVycm9yJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VFcnIpO1xuICAgIHNob3VsZC5lcXVhbChjdlRvVmFsdWUocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUpLnRvU3RyaW5nKCksICcxMDAwMCcpO1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyB2YWxpZGF0b3IgdXBkYXRlLCBlYXJseSBleGl0LCBhbmQgcmV3YXJkIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnVwZGF0ZUJvbmRSZWdpc3RyYXRpb24oe1xuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICAoKGF3YWl0IHVwZGF0ZS5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIHsgZnVuY3Rpb25OYW1lOiBzdHJpbmcgfSkuZnVuY3Rpb25OYW1lLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbidcbiAgICApO1xuXG4gICAgY29uc3QgZWFybHlFeGl0ID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuYW5ub3VuY2VMMUVhcmx5RXhpdCh7XG4gICAgICBzdGFrZXI6IHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzLFxuICAgICAgb2xkU2lnbmVyTWFuYWdlcixcbiAgICB9KTtcbiAgICBjb25zdCBlYXJseUV4aXRQYXlsb2FkID0gKGF3YWl0IGVhcmx5RXhpdC5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbk5hbWUsICdhbm5vdW5jZS1sMS1lYXJseS1leGl0Jyk7XG4gICAgc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLCB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG5cbiAgICBjb25zdCBjbGFpbXMgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5jbGFpbVJld2FyZHMoe1xuICAgICAgYm9uZEluZGljZXM6IFsyMTAsIDIyNl0sXG4gICAgICByZXdhcmRDeWNsZTogMzkxLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsYWltUGF5bG9hZCA9IChhd2FpdCBjbGFpbXMuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbk5hbWUsICdjbGFpbS1yZXdhcmRzJyk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gIH0pO1xuXG4gIGl0KCdhY2NlcHRzIGV2ZXJ5IHN1cHBvcnRlZCBQb1gtNSBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBbXG4gICAgICAnc3Rha2UnLFxuICAgICAgJ3N0YWtlLXVwZGF0ZScsXG4gICAgICAndW5zdGFrZScsXG4gICAgICAncmVnaXN0ZXItZm9yLWJvbmQnLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbicsXG4gICAgICAnYW5ub3VuY2UtbDEtZWFybHktZXhpdCcsXG4gICAgICAnY2xhaW0tcmV3YXJkcycsXG4gICAgICAnY2xhaW0tc3Rha2VyLXJld2FyZHMtZm9yLXNpZ25lcicsXG4gICAgICAnY2FsY3VsYXRlLXJld2FyZHMnLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uTmFtZSBvZiBmdW5jdGlvbk5hbWVzKSB7XG4gICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdwYXJzZXMgcmVzcG9uc2UsIGxpc3QsIGFuZCBleHBsaWNpdCBwcmluY2lwYWwgSlNPTiB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdjYWxjdWxhdGUtcmV3YXJkcycpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgdmFsOiB7XG4gICAgICAgICAgdHlwZTogJ29rJyxcbiAgICAgICAgICB2YWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgIHZhbDogW3sgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcyMTAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiAnY29udHJhY3QtcHJpbmNpcGFsJywgdmFsOiBvbGRTaWduZXJNYW5hZ2VyIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCBhcmdzID0gKChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpLnBheWxvYWQgYXMgYW55KS5mdW5jdGlvbkFyZ3M7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udmFsdWUudHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBpbnZhbGlkIFNQViBwcm9vZiBieXRlIGxlbmd0aHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9ja3VwID0ge1xuICAgICAga2luZDogJ2J0YycgYXMgY29uc3QsXG4gICAgICB1bmxvY2tCeXRlczogJzAwJyxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICBoZWFkZXI6ICcwMCcsXG4gICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgdHhDb3VudDogMSxcbiAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICAgIGxvY2t1cCxcbiAgICAgICAgfSksXG4gICAgICAvaGVhZGVyIG11c3QgYmUgZXhhY3RseSA4MCBieXRlcy9cbiAgICApO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgICAgbG9ja3VwOiB7XG4gICAgICAgICAgICAuLi5sb2NrdXAsXG4gICAgICAgICAgICBvdXRwdXRzOiBbeyAuLi5sb2NrdXAub3V0cHV0c1swXSwgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksIGxlYWZIYXNoZXM6IFsnMDAnXSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIC9sZWFmSGFzaCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIGxvY2t1cCBmaWVsZHMgYW5kIGNvbnRyYWN0IHByaW5jaXBhbHMnLCAoKSA9PiB7XG4gICAgY29uc3QgdmFsaWRMb2NrdXAgPSB7IGtpbmQ6ICdidGMnIGFzIGNvbnN0LCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAobG9ja3VwOiB0eXBlb2YgdmFsaWRMb2NrdXAsIG1hbmFnZXIgPSBzaWduZXJNYW5hZ2VyKSA9PlxuICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXI6IG1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwLFxuICAgICAgfSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlZ2lzdGVyKHZhbGlkTG9ja3VwLCAnbm8tZG90JyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ2EuYi5jJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUvKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogW3sgLi4udmFsaWRMb2NrdXAub3V0cHV0c1swXSwgdHg6ICcwJyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBbeyAuLi52YWxpZExvY2t1cC5vdXRwdXRzWzBdLCB0eDogJ3p6JyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoKSA9PiB2YWxpZExvY2t1cE91dHB1dCgpKSB9KSxcbiAgICAgIC9iZXR3ZWVuIDEgYW5kIDEwIG91dHB1dHMvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmVnaXN0ZXIoe1xuICAgICAgICAgIC4uLnZhbGlkTG9ja3VwLFxuICAgICAgICAgIG91dHB1dHM6IFt7IC4uLnZhbGlkTG9ja3VwLm91dHB1dHNbMF0sIGxlYWZIYXNoZXM6IEFycmF5KDE1KS5maWxsKCcwMCcucmVwZWF0KDMyKSkgfV0sXG4gICAgICAgIH0pLFxuICAgICAgL21vcmUgdGhhbiAxNCBtZXJrbGUgc2libGluZ3MvXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BvWC01IEJ1aWxkZXIgb24gdHN0eHNpZ25ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdGFja3MgRm91bmRhdGlvbiBzdGFraW5nLXRlc3RuZXQ6IGNoYWluIElEIDEyODAgKDB4MDAwMDA1MDApIHdpdGggdGhlIDB4ODAgdGVzdG5ldCB0eCB2ZXJzaW9uXG4gICAgY29uc3Qgc2lnbmV0RmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHhzaWduZXQnKSk7XG4gICAgY29uc3QgVFNUWFNJR05FVF9UWF9QUkVGSVggPSAnODAwMDAwMDUwMCc7XG4gICAgY29uc3QgUE9YNV9CT09UX0FERFJFU1MgPSAnU1QwMDAwMDAwMDAwMDAwMDAwMDAwMDJBTVc0MkgnO1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGJ1aWxkZXI6IFN0eExpYi5Qb3g1QnVpbGRlcik6IFN0eExpYi5Qb3g1QnVpbGRlciB7XG4gICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF5bG9hZE9mKHR4OiBCYXNlVHJhbnNhY3Rpb24pOiBTdHhMaWIuU3RhY2tzQ29udHJhY3RQYXlsb2FkIHtcbiAgICAgIHJldHVybiB0eC50b0pzb24oKS5wYXlsb2FkIGFzIFN0eExpYi5TdGFja3NDb250cmFjdFBheWxvYWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdWludEFyZyhjdjogeyB0eXBlOiBudW1iZXI7IHZhbHVlPzogdW5rbm93biB9LCBleHBlY3RlZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICBjdi50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5VSW50KTtcbiAgICAgIFN0cmluZyhjdi52YWx1ZSkuc2hvdWxkLmVxdWFsKGV4cGVjdGVkKTtcbiAgICB9XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UgdHJhbnNhY3Rpb24gY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRPZih0eCk7XG4gICAgICBwYXlsb2FkLmNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoUE9YNV9CT09UX0FERFJFU1MpO1xuICAgICAgcGF5bG9hZC5jb250cmFjdE5hbWUuc2hvdWxkLmVxdWFsKCdwb3gtNScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgICAgIGN2VG9TdHJpbmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnNob3VsZC5lcXVhbChzaWduZXJNYW5hZ2VyKTtcbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0sICcxMDAwMDAwMDAnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1syXSwgJzEnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzY2ODQ5Jyk7XG5cbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UtdXBkYXRlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci5zdGFrZVVwZGF0ZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICAgIGN5Y2xlc1RvRXh0ZW5kOiAxLFxuICAgICAgICBhbW91bnRJbmNyZWFzZTogJzUwMDAwJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZS11cGRhdGUnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKS5zaG91bGQuZXF1YWwoc2lnbmVyTWFuYWdlcik7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdKS5zaG91bGQuZXF1YWwob2xkU2lnbmVyTWFuYWdlcik7XG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzJdLCAnMScpO1xuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzUwMDAwJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5PcHRpb25hbE5vbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyBhbiB1bnN0YWtlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci51bnN0YWtlKG9sZFNpZ25lck1hbmFnZXIpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCd1bnN0YWtlJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgY3ZUb1N0cmluZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXSkuc2hvdWxkLmVxdWFsKG9sZFNpZ25lck1hbmFnZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyByZWdpc3Rlci1mb3ItYm9uZCB0cmFuc2FjdGlvbnMgKEwxIGxvY2t1cCBhbmQgc0JUQykgY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidGNCdWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cDogeyBraW5kOiAnYnRjJywgdW5sb2NrQnl0ZXM6ICcwMCcsIG91dHB1dHM6IFt2YWxpZExvY2t1cE91dHB1dCgpXSB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBidGNUeCA9IGF3YWl0IGJ0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGJ0Y1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IGJ0Y1BheWxvYWQgPSBwYXlsb2FkT2YoYnRjVHgpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG5cbiAgICAgIGNvbnN0IHNidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBzYnRjQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2J0Y1R4ID0gYXdhaXQgc2J0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNidGNUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBzYnRjUGF5bG9hZCA9IHBheWxvYWRPZihzYnRjVHgpO1xuICAgICAgc2J0Y1BheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWJ1aWxkcyBldmVyeSBzdGFraW5nIGZsb3cgYnl0ZS1pZGVudGljYWxseSBmcm9tIHJhdyBoZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFrZUJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHN0YWtlQnVpbGRlci5zdGFrZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3Rha2VUeCA9IGF3YWl0IHN0YWtlQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCBzdGFrZVJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20oc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHN0YWtlUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHN0YWtlUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChzdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCB1bnN0YWtlQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgdW5zdGFrZUJ1aWxkZXIudW5zdGFrZShvbGRTaWduZXJNYW5hZ2VyKTtcbiAgICAgIGNvbnN0IHVuc3Rha2VUeCA9IGF3YWl0IHVuc3Rha2VCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHVuc3Rha2VSZWJ1aWx0ID0gc2lnbmV0RmFjdG9yeS5mcm9tKHVuc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHVuc3Rha2VSZWJ1aWx0LmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAoYXdhaXQgdW5zdGFrZVJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodW5zdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCByZWdpc3RlckJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHJlZ2lzdGVyQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVnaXN0ZXJUeCA9IGF3YWl0IHJlZ2lzdGVyQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCByZWdpc3RlclJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20ocmVnaXN0ZXJUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJlZ2lzdGVyUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHJlZ2lzdGVyUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyZWdpc3RlclR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdXRlcyBwYXJzZWQgc3Rha2UgdHJhbnNhY3Rpb25zIHRvIHRoZSBQb1gtNSBidWlsZGVyIG9uIHRzdHhzaWduZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgU3R4TGliLlRyYW5zYWN0aW9uKS5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIHVua25vd24gYXMgQ29udHJhY3RDYWxsUGF5bG9hZDtcblxuICAgICAgYnVpbGRlci5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCBwYXlsb2FkKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCB7XG4gICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IGNyZWF0ZUFkZHJlc3ModGVzdERhdGEuQUNDT1VOVF8xLmFkZHJlc3MpLFxuICAgICAgICB9KSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJvdXRlZCA9IHNpZ25ldEZhY3RvcnkuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJvdXRlZC5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cG9zZXMgZmVlLCBub25jZSBhbmQgc2VuZGVyIG9uIHRoZSBidWlsdCBzdGFrZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZmVlLnNob3VsZC5lcXVhbCgnMTgwJyk7XG4gICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgdHhKc29uLmlkLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIHR4SnNvbi5mcm9tLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNpZ25lci1tYW5hZ2VyIHByaW5jaXBhbCB3aXRob3V0IHRoZSBhZGRyZXNzLmNvbnRyYWN0LW5hbWUgc2hhcGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICAgICAgc2lnbmVyTWFuYWdlcjogJ25vLWRvdCcsXG4gICAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2FkZHJlc3MuY29udHJhY3QtbmFtZSBmb3JtYXQvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
513
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG94NUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3BveDVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHVEQVc4QjtBQUM5Qiw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBRzVCLHNDQUFzQztBQUN0Qyx1REFBeUM7QUFDekMsd0VBQXdFO0FBRXhFLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxhQUFhLEdBQUcseURBQXlELENBQUM7SUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyw2REFBNkQsQ0FBQztJQUV2RixTQUFTLFNBQVMsQ0FBQyxPQUEyQjtRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLGlCQUFpQjtRQUN4QixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUk7WUFDWixFQUFFLEVBQUUsSUFBSTtZQUNSLFdBQVcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFB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QUM7Z0JBQzNDLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU87Z0JBQ2xDLFdBQVcsRUFBRSxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIENsYXJpdHlUeXBlLFxuICBDbGFyaXR5VmFsdWUsXG4gIENvbnRyYWN0Q2FsbFBheWxvYWQsXG4gIGNyZWF0ZUFkZHJlc3MsXG4gIGN2VG9TdHJpbmcsXG4gIGN2VG9WYWx1ZSxcbiAgZGVzZXJpYWxpemVDVixcbiAgUGMsXG4gIFBvc3RDb25kaXRpb25Nb2RlLFxuICBQb3N0Q29uZGl0aW9uVHlwZSxcbn0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IHBveDVSZWdpc3RlckZvckJvbmRBcmdzSGV4IH0gZnJvbSAnLi4vcmVnaXN0ZXJGb3JCb25kUmVhbEFyZ3MnO1xuXG5kZXNjcmliZSgnU3RhY2tzOiBQb1gtNSBCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHN0eCcpKTtcbiAgY29uc3Qgc2lnbmVyTWFuYWdlciA9ICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwLnNpZ25lci1tYW5hZ2VyJztcbiAgY29uc3Qgb2xkU2lnbmVyTWFuYWdlciA9ICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwLm9sZC1zaWduZXItbWFuYWdlcic7XG5cbiAgZnVuY3Rpb24gY29uZmlndXJlKGJ1aWxkZXI6IFN0eExpYi5Qb3g1QnVpbGRlcik6IFN0eExpYi5Qb3g1QnVpbGRlciB7XG4gICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgIGJ1aWxkZXIubm9uY2UoMCk7XG4gICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkTG9ja3VwT3V0cHV0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IDkyMzEsXG4gICAgICB0eDogJzAwJyxcbiAgICAgIG91dHB1dEluZGV4OiAwLFxuICAgICAgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksXG4gICAgICBsZWFmSGFzaGVzOiBbJzAwJy5yZXBlYXQoMzIpXSxcbiAgICAgIHR4Q291bnQ6IDEsXG4gICAgICB0eEluZGV4OiAwLFxuICAgICAgYW1vdW50OiAxMDAwMCxcbiAgICAgIHVubG9ja0J1cm5IZWlnaHQ6IDk0OTAsXG4gICAgfTtcbiAgfVxuXG4gIGl0KCdidWlsZHMgYW5kIHBhcnNlcyByZWdpc3Rlci1mb3ItYm9uZCB3aXRoIGFuIEwxIGxvY2t1cCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7XG4gICAgICAgIGtpbmQ6ICdidGMnLFxuICAgICAgICB1bmxvY2tCeXRlczogJzAwJyxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgICAgICAgIHR4OiAnMDAnLFxuICAgICAgICAgICAgb3V0cHV0SW5kZXg6IDAsXG4gICAgICAgICAgICBoZWFkZXI6ICcwMCcucmVwZWF0KDgwKSxcbiAgICAgICAgICAgIGxlYWZIYXNoZXM6IFsnMDAnLnJlcGVhdCgzMildLFxuICAgICAgICAgICAgdHhDb3VudDogMSxcbiAgICAgICAgICAgIHR4SW5kZXg6IDAsXG4gICAgICAgICAgICBhbW91bnQ6IDEwMDAwLFxuICAgICAgICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHNpZ25lckNhbGxkYXRhOiAnMDAnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHR4LnRvSnNvbigpLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uTmFtZSwgJ3JlZ2lzdGVyLWZvci1ib25kJyk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aCwgNSk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUsIENsYXJpdHlUeXBlLlVJbnQpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1sxXS50eXBlLCBDbGFyaXR5VHlwZS5QcmluY2lwYWxDb250cmFjdCk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlT2spO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLCBDbGFyaXR5VHlwZS5PcHRpb25hbFNvbWUpO1xuXG4gICAgLy8gU0ktMTkyMjogdGhlIHJlZ2lzdGVyIGFyZ3MgbXVzdCBiZSBKU09OLXNlcmlhbGlzYWJsZSAobm8gQmlnSW50IGxlYWtzKSDigJQgdGhpcyBvYmplY3QgaXMgc2VudFxuICAgIC8vIHRvIHRoZSBwb2xpY3kgc2VydmljZSwgd2hlcmUgZmFzdC1zYWZlLXN0cmluZ2lmeSBvdGhlcndpc2UgcmVwbGFjZXMgdGhlIHdob2xlIGJvZHkuXG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSkpO1xuICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgcGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUuZGF0YS5vdXRwdXRzLmxpc3RbMF0uZGF0YS5hbW91bnQudmFsdWUsICdzdHJpbmcnKTtcblxuICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHRCdWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgY29uc3QgcmVidWlsdCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHQudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gIH0pO1xuXG4gIGl0KCdwaW5zIHRoZSByZWFsIHN0YWdpbmcgcmVnaXN0ZXItZm9yLWJvbmQgYXJncyBhbmQga2VlcHMgdGhlbSBKU09OLXNlcmlhbGlzYWJsZSAoU0ktMTkyMiknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZnVuY3Rpb25BcmdzID0gcG94NVJlZ2lzdGVyRm9yQm9uZEFyZ3NIZXgubWFwKChoZXgpID0+XG4gICAgICBkZXNlcmlhbGl6ZUNWKEJ1ZmZlci5mcm9tKGhleC5yZXBsYWNlKC9eMHgvLCAnJyksICdoZXgnKSlcbiAgICApO1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLmZ1bmN0aW9uTmFtZSgncmVnaXN0ZXItZm9yLWJvbmQnKTtcbiAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhmdW5jdGlvbkFyZ3MpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcblxuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGgsIDUpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXS50eXBlLCBDbGFyaXR5VHlwZS5VSW50KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlLCBDbGFyaXR5VHlwZS5SZXNwb25zZU9rKTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbNF0udHlwZSwgQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lKTtcblxuICAgIC8vIHRoZSBidGMtbG9ja3VwIChhcmcgNCkgbmVzdGVkIHVpbnRzIG11c3QgYmUgc3RyaW5naWZpZWQg4oCUIG5vIEJpZ0ludCBsZWFrcyBpbnRvIHRoZSBwYXlsb2FkXG4gICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSkpO1xuICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgcGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udmFsdWUuZGF0YS5vdXRwdXRzLmxpc3RbMF0uZGF0YS5hbW91bnQudmFsdWUsICdzdHJpbmcnKTtcbiAgICBzaG91bGQuZXF1YWwodHlwZW9mIHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnZhbHVlLmRhdGEub3V0cHV0cy5saXN0WzBdLmRhdGFbJ3VubG9jay1idXJuLWhlaWdodCddLnZhbHVlLCAnc3RyaW5nJyk7XG5cbiAgICAvLyB0aGUgZmVlIHJlLWJ1aWxkIChmYWN0b3J5LmZyb20g4oaSIGluaXRCdWlsZGVyKSBtdXN0IHN0YXkgYnl0ZS1pZGVudGljYWxcbiAgICBjb25zdCByZWJ1aWx0ID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHQuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBzaG91bGQuZXF1YWwoKGF3YWl0IHJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gIH0pO1xuXG4gIGl0KCdjYXJyaWVzIHBvc3QtY29uZGl0aW9uIG1vZGUvY29uZGl0aW9ucyBhbmQgcHJlc2VydmVzIHRoZW0gYWNyb3NzIHRoZSBmZWUgcmUtYnVpbGQgKFNJLTE5MzYpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uQXJncyA9IHBveDVSZWdpc3RlckZvckJvbmRBcmdzSGV4Lm1hcCgoaGV4KSA9PlxuICAgICAgZGVzZXJpYWxpemVDVihCdWZmZXIuZnJvbShoZXgucmVwbGFjZSgvXjB4LywgJycpLCAnaGV4JykpXG4gICAgKTtcbiAgICBjb25zdCBwb3N0Q29uZGl0aW9uID0gUGMucHJpbmNpcGFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKS53aWxsU2VuZEx0ZSgxMDAwMDAwMDApLnVzdHgoKTtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5mdW5jdGlvbk5hbWUoJ3JlZ2lzdGVyLWZvci1ib25kJyk7XG4gICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoZnVuY3Rpb25BcmdzKTtcbiAgICBidWlsZGVyLnBvc3RDb25kaXRpb25Nb2RlKFBvc3RDb25kaXRpb25Nb2RlLkRlbnkpO1xuICAgIGJ1aWxkZXIucG9zdENvbmRpdGlvbnMoW3Bvc3RDb25kaXRpb25dKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFN0eExpYi5UcmFuc2FjdGlvbjtcblxuICAgIHNob3VsZC5lcXVhbCh0eC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9uTW9kZSwgUG9zdENvbmRpdGlvbk1vZGUuRGVueSk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlcy5sZW5ndGgsIDEpO1xuXG4gICAgLy8gYGJ1aWxkVHJhbnNhY3Rpb25XaXRoRmVlYCByZS1idWlsZHMgdmlhIGBmYWN0b3J5LmZyb20oaGV4KWA7IHRoZSBwb3N0LWNvbmRpdGlvbnMgbXVzdCBzdXJ2aXZlXG4gICAgLy8gKGluaXRCdWlsZGVyIHJlc3RvcmVzIHRoZW0gZnJvbSB0aGUgZGVzZXJpYWxpemVkIHR4KS5cbiAgICBjb25zdCByZWJ1aWx0ID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHQuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBjb25zdCByZWJ1aWx0VHggPSAoYXdhaXQgcmVidWlsdC5idWlsZCgpKSBhcyBTdHhMaWIuVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9uTW9kZSwgUG9zdENvbmRpdGlvbk1vZGUuRGVueSk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9ucy52YWx1ZXMubGVuZ3RoLCAxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlZ2lzdGVyLWZvci1ib25kIGJ1aWxkcyBEZW55ICsgYSB0eXBlLTMgc3Rha2luZyBwb3N0LWNvbmRpdGlvbiwgYnl0ZS1pZGVudGljYWwgYWNyb3NzIGZyb20oaGV4KSAoU0ktMTkzNiknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZnVuY3Rpb25BcmdzID0gcG94NVJlZ2lzdGVyRm9yQm9uZEFyZ3NIZXgubWFwKChoZXgpID0+XG4gICAgICBkZXNlcmlhbGl6ZUNWKEJ1ZmZlci5mcm9tKGhleC5yZXBsYWNlKC9eMHgvLCAnJyksICdoZXgnKSlcbiAgICApO1xuICAgIC8vIFNJUC0wNDQgc3Rha2luZyBwb3N0LWNvbmRpdGlvbiBvbiB0aGUgcmVnaXN0ZXIgYW1vdW50IChjb250cmFjdCBhcmcgaW5kZXggMiA9IGFtb3VudC11c3R4KS5cbiAgICBjb25zdCBhbW91bnRVc3R4ID0gY3ZUb1ZhbHVlKGZ1bmN0aW9uQXJnc1syXSwgdHJ1ZSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBzdGFraW5nUG9zdENvbmRpdGlvbiA9IFN0eExpYi5tYWtlU3Rha2luZ1Bvc3RDb25kaXRpb24odGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MsICdlcScsIGFtb3VudFVzdHgpO1xuXG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKGZ1bmN0aW9uQXJncyk7XG4gICAgYnVpbGRlci5wb3N0Q29uZGl0aW9uTW9kZShQb3N0Q29uZGl0aW9uTW9kZS5EZW55KTtcbiAgICBidWlsZGVyLnBvc3RDb25kaXRpb25zKFtzdGFraW5nUG9zdENvbmRpdGlvbl0pO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgU3R4TGliLlRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25Nb2RlLCBQb3N0Q29uZGl0aW9uTW9kZS5EZW55KTtcbiAgICBzaG91bGQuZXF1YWwodHguc3R4VHJhbnNhY3Rpb24ucG9zdENvbmRpdGlvbnMudmFsdWVzLmxlbmd0aCwgMSk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlc1swXS5jb25kaXRpb25UeXBlLCBQb3N0Q29uZGl0aW9uVHlwZS5TdGFraW5nKTtcbiAgICBzaG91bGQuZXF1YWwoKHR4LnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlc1swXSBhcyB7IGFtb3VudDogYmlnaW50IH0pLmFtb3VudCwgQmlnSW50KGFtb3VudFVzdHgpKTtcblxuICAgIC8vIFRoZSByaXNraWVzdCBwYXRoOiBgaW5pdEJ1aWxkZXJgIG11c3QgcmVzdG9yZSB0aGUgbW9kZSBBTkQgdGhlIHBvc3QtY29uZGl0aW9ucyBmcm9tIHRoZVxuICAgIC8vIGRlc2VyaWFsaXplZCB0eCwgc28gYSBgZnJvbShoZXgpYCByZWJ1aWxkICh0aGUgZmVlIHJlLWJ1aWxkKSBzdGF5cyBieXRlLWlkZW50aWNhbC5cbiAgICBjb25zdCBoZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIGNvbnN0IHJlYnVpbHQgPSBmYWN0b3J5LmZyb20oaGV4KTtcbiAgICByZWJ1aWx0LmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgY29uc3QgcmVidWlsdFR4ID0gKGF3YWl0IHJlYnVpbHQuYnVpbGQoKSkgYXMgU3R4TGliLlRyYW5zYWN0aW9uO1xuXG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBoZXgpO1xuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHguc3R4VHJhbnNhY3Rpb24ucG9zdENvbmRpdGlvbk1vZGUsIFBvc3RDb25kaXRpb25Nb2RlLkRlbnkpO1xuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHguc3R4VHJhbnNhY3Rpb24ucG9zdENvbmRpdGlvbnMudmFsdWVzLmxlbmd0aCwgMSk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC5zdHhUcmFuc2FjdGlvbi5wb3N0Q29uZGl0aW9ucy52YWx1ZXNbMF0uY29uZGl0aW9uVHlwZSwgUG9zdENvbmRpdGlvblR5cGUuU3Rha2luZyk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZXMgdGhlIFBvWC01IGNvbnRyYWN0IGFkZHJlc3MgZHVyaW5nIGZhY3Rvcnkgcm91dGluZycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdidGMnLCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH0sXG4gICAgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9ICh0eCBhcyBTdHhMaWIuVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChTdHhMaWIuUG94NUJ1aWxkZXIuaXNWYWxpZENvbnRyYWN0Q2FsbChjb2lucy5nZXQoJ3RzdHgnKSwgcGF5bG9hZCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eCcpLCB7XG4gICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogY3JlYXRlQWRkcmVzcyh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWRkcmVzcyksXG4gICAgICB9KSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyBzQlRDIHJlZ2lzdHJhdGlvbiB1c2luZyByZXNwb25zZSBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdzYnRjJywgc2J0Y1NhdHM6IDEwMDAwIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICBzaG91bGQuZXF1YWwoY3ZUb1ZhbHVlKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnZhbHVlKS50b1N0cmluZygpLCAnMTAwMDAnKTtcbiAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IEpTT04uc3RyaW5naWZ5KHR4LnRvSnNvbigpKSk7XG4gIH0pO1xuXG4gIGl0KCdidWlsZHMgdmFsaWRhdG9yIHVwZGF0ZSwgZWFybHkgZXhpdCwgYW5kIHJld2FyZCBjYWxscycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1cGRhdGUgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS51cGRhdGVCb25kUmVnaXN0cmF0aW9uKHtcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBvbGRTaWduZXJNYW5hZ2VyLFxuICAgICAgc2lnbmVyQ2FsbGRhdGE6ICcwMCcsXG4gICAgfSk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgKChhd2FpdCB1cGRhdGUuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyB7IGZ1bmN0aW9uTmFtZTogc3RyaW5nIH0pLmZ1bmN0aW9uTmFtZSxcbiAgICAgICd1cGRhdGUtYm9uZC1yZWdpc3RyYXRpb24nXG4gICAgKTtcblxuICAgIGNvbnN0IGVhcmx5RXhpdCA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLmFubm91bmNlTDFFYXJseUV4aXQoe1xuICAgICAgc3Rha2VyOiB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyxcbiAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgfSk7XG4gICAgY29uc3QgZWFybHlFeGl0UGF5bG9hZCA9IChhd2FpdCBlYXJseUV4aXQuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKGVhcmx5RXhpdFBheWxvYWQuZnVuY3Rpb25OYW1lLCAnYW5ub3VuY2UtbDEtZWFybHktZXhpdCcpO1xuICAgIHNob3VsZC5lcXVhbChjdlRvU3RyaW5nKGVhcmx5RXhpdFBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKSwgdGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuXG4gICAgY29uc3QgY2xhaW1zID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuY2xhaW1SZXdhcmRzKHtcbiAgICAgIGJvbmRJbmRpY2VzOiBbMjEwLCAyMjZdLFxuICAgICAgcmV3YXJkQ3ljbGU6IDM5MSxcbiAgICB9KTtcbiAgICBjb25zdCBjbGFpbVBheWxvYWQgPSAoYXdhaXQgY2xhaW1zLmJ1aWxkKCkpLnRvSnNvbigpLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChjbGFpbVBheWxvYWQuZnVuY3Rpb25OYW1lLCAnY2xhaW0tcmV3YXJkcycpO1xuICAgIHNob3VsZC5lcXVhbChjbGFpbVBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUsIENsYXJpdHlUeXBlLkxpc3QpO1xuICAgIHNob3VsZC5lcXVhbChjbGFpbVBheWxvYWQuZnVuY3Rpb25BcmdzWzFdLnR5cGUsIENsYXJpdHlUeXBlLlVJbnQpO1xuICB9KTtcblxuICBpdCgnYWNjZXB0cyBldmVyeSBzdXBwb3J0ZWQgUG9YLTUgZnVuY3Rpb24gbmFtZScsICgpID0+IHtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gW1xuICAgICAgJ3N0YWtlJyxcbiAgICAgICdzdGFrZS11cGRhdGUnLFxuICAgICAgJ3Vuc3Rha2UnLFxuICAgICAgJ3JlZ2lzdGVyLWZvci1ib25kJyxcbiAgICAgICd1cGRhdGUtYm9uZC1yZWdpc3RyYXRpb24nLFxuICAgICAgJ2Fubm91bmNlLWwxLWVhcmx5LWV4aXQnLFxuICAgICAgJ2NsYWltLXJld2FyZHMnLFxuICAgICAgJ2NsYWltLXN0YWtlci1yZXdhcmRzLWZvci1zaWduZXInLFxuICAgICAgJ2NhbGN1bGF0ZS1yZXdhcmRzJyxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmdW5jdGlvbk5hbWUgb2YgZnVuY3Rpb25OYW1lcykge1xuICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgncGFyc2VzIHJlc3BvbnNlLCBsaXN0LCBhbmQgZXhwbGljaXQgcHJpbmNpcGFsIEpTT04gdmFsdWVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLmZ1bmN0aW9uTmFtZSgnY2FsY3VsYXRlLXJld2FyZHMnKTtcbiAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdyZXNwb25zZScsXG4gICAgICAgIHZhbDoge1xuICAgICAgICAgIHR5cGU6ICdvaycsXG4gICAgICAgICAgdmFsOiB7XG4gICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICB2YWw6IFt7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnMjEwJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgdHlwZTogJ2NvbnRyYWN0LXByaW5jaXBhbCcsIHZhbDogb2xkU2lnbmVyTWFuYWdlciB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgYXJncyA9ICgoYXdhaXQgYnVpbGRlci5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIGFueSkuZnVuY3Rpb25BcmdzO1xuICAgIHNob3VsZC5lcXVhbChhcmdzWzBdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlT2spO1xuICAgIHNob3VsZC5lcXVhbChhcmdzWzBdLnZhbHVlLnR5cGUsIENsYXJpdHlUeXBlLkxpc3QpO1xuICAgIHNob3VsZC5lcXVhbChhcmdzWzFdLnR5cGUsIENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgaW52YWxpZCBTUFYgcHJvb2YgYnl0ZSBsZW5ndGhzJywgKCkgPT4ge1xuICAgIGNvbnN0IGxvY2t1cCA9IHtcbiAgICAgIGtpbmQ6ICdidGMnIGFzIGNvbnN0LFxuICAgICAgdW5sb2NrQnl0ZXM6ICcwMCcsXG4gICAgICBvdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBoZWlnaHQ6IDkyMzEsXG4gICAgICAgICAgdHg6ICcwMCcsXG4gICAgICAgICAgb3V0cHV0SW5kZXg6IDAsXG4gICAgICAgICAgaGVhZGVyOiAnMDAnLFxuICAgICAgICAgIGxlYWZIYXNoZXM6IFsnMDAnLnJlcGVhdCgzMildLFxuICAgICAgICAgIHR4Q291bnQ6IDEsXG4gICAgICAgICAgdHhJbmRleDogMCxcbiAgICAgICAgICBhbW91bnQ6IDEwMDAwLFxuICAgICAgICAgIHVubG9ja0J1cm5IZWlnaHQ6IDk0OTAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgICBsb2NrdXAsXG4gICAgICAgIH0pLFxuICAgICAgL2hlYWRlciBtdXN0IGJlIGV4YWN0bHkgODAgYnl0ZXMvXG4gICAgKTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICAgIGxvY2t1cDoge1xuICAgICAgICAgICAgLi4ubG9ja3VwLFxuICAgICAgICAgICAgb3V0cHV0czogW3sgLi4ubG9ja3VwLm91dHB1dHNbMF0sIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLCBsZWFmSGFzaGVzOiBbJzAwJ10gfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAvbGVhZkhhc2ggbXVzdCBiZSBleGFjdGx5IDMyIGJ5dGVzL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG1hbGZvcm1lZCBsb2NrdXAgZmllbGRzIGFuZCBjb250cmFjdCBwcmluY2lwYWxzJywgKCkgPT4ge1xuICAgIGNvbnN0IHZhbGlkTG9ja3VwID0geyBraW5kOiAnYnRjJyBhcyBjb25zdCwgdW5sb2NrQnl0ZXM6ICcwMCcsIG91dHB1dHM6IFt2YWxpZExvY2t1cE91dHB1dCgpXSB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyID0gKGxvY2t1cDogdHlwZW9mIHZhbGlkTG9ja3VwLCBtYW5hZ2VyID0gc2lnbmVyTWFuYWdlcikgPT5cbiAgICAgIGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyOiBtYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cCxcbiAgICAgIH0pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ25vLWRvdCcpLCAvYWRkcmVzcy5jb250cmFjdC1uYW1lIGZvcm1hdC8pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcmVnaXN0ZXIodmFsaWRMb2NrdXAsICdhLmIuYycpLCAvYWRkcmVzcy5jb250cmFjdC1uYW1lIGZvcm1hdC8pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcmVnaXN0ZXIodmFsaWRMb2NrdXAsICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwLicpLCAvYWRkcmVzcy5jb250cmFjdC1uYW1lLyk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IHJlZ2lzdGVyKHsgLi4udmFsaWRMb2NrdXAsIG91dHB1dHM6IFt7IC4uLnZhbGlkTG9ja3VwLm91dHB1dHNbMF0sIHR4OiAnMCcgfV0gfSksXG4gICAgICAvdHggbXVzdCBiZSBhbiBldmVuLWxlbmd0aCBoZXhhZGVjaW1hbCBzdHJpbmcvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogW3sgLi4udmFsaWRMb2NrdXAub3V0cHV0c1swXSwgdHg6ICd6eicgfV0gfSksXG4gICAgICAvdHggbXVzdCBiZSBhbiBldmVuLWxlbmd0aCBoZXhhZGVjaW1hbCBzdHJpbmcvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKCkgPT4gdmFsaWRMb2NrdXBPdXRwdXQoKSkgfSksXG4gICAgICAvYmV0d2VlbiAxIGFuZCAxMCBvdXRwdXRzL1xuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIHJlZ2lzdGVyKHtcbiAgICAgICAgICAuLi52YWxpZExvY2t1cCxcbiAgICAgICAgICBvdXRwdXRzOiBbeyAuLi52YWxpZExvY2t1cC5vdXRwdXRzWzBdLCBsZWFmSGFzaGVzOiBBcnJheSgxNSkuZmlsbCgnMDAnLnJlcGVhdCgzMikpIH1dLFxuICAgICAgICB9KSxcbiAgICAgIC9tb3JlIHRoYW4gMTQgbWVya2xlIHNpYmxpbmdzL1xuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQb1gtNSBCdWlsZGVyIG9uIHRzdHhzaWduZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RhY2tzIEZvdW5kYXRpb24gc3Rha2luZy10ZXN0bmV0OiBjaGFpbiBJRCAxMjgwICgweDAwMDAwNTAwKSB3aXRoIHRoZSAweDgwIHRlc3RuZXQgdHggdmVyc2lvblxuICAgIGNvbnN0IHNpZ25ldEZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0c3R4c2lnbmV0JykpO1xuICAgIGNvbnN0IFRTVFhTSUdORVRfVFhfUFJFRklYID0gJzgwMDAwMDA1MDAnO1xuICAgIGNvbnN0IFBPWDVfQk9PVF9BRERSRVNTID0gJ1NUMDAwMDAwMDAwMDAwMDAwMDAwMDAyQU1XNDJIJztcblxuICAgIGZ1bmN0aW9uIGNvbmZpZ3VyZShidWlsZGVyOiBTdHhMaWIuUG94NUJ1aWxkZXIpOiBTdHhMaWIuUG94NUJ1aWxkZXIge1xuICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgYnVpbGRlci5ub25jZSgwKTtcbiAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBheWxvYWRPZih0eDogQmFzZVRyYW5zYWN0aW9uKTogU3R4TGliLlN0YWNrc0NvbnRyYWN0UGF5bG9hZCB7XG4gICAgICByZXR1cm4gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBTdHhMaWIuU3RhY2tzQ29udHJhY3RQYXlsb2FkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVpbnRBcmcoY3Y6IENsYXJpdHlWYWx1ZSwgZXhwZWN0ZWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgY3YudHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuVUludCk7XG4gICAgICBTdHJpbmcoKGN2IGFzIHsgdmFsdWU/OiB1bmtub3duIH0pLnZhbHVlKS5zaG91bGQuZXF1YWwoZXhwZWN0ZWQpO1xuICAgIH1cblxuICAgIGl0KCdidWlsZHMgYSBzdGFrZSB0cmFuc2FjdGlvbiBjYXJyeWluZyB0aGUgdHN0eHNpZ25ldCBjaGFpbiBJRCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gcGF5bG9hZE9mKHR4KTtcbiAgICAgIHBheWxvYWQuY29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChQT1g1X0JPT1RfQUREUkVTUyk7XG4gICAgICBwYXlsb2FkLmNvbnRyYWN0TmFtZS5zaG91bGQuZXF1YWwoJ3BveC01Jyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uTmFtZS5zaG91bGQuZXF1YWwoJ3N0YWtlJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGguc2hvdWxkLmVxdWFsKDUpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICAgICAgY3ZUb1N0cmluZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXSkuc2hvdWxkLmVxdWFsKHNpZ25lck1hbmFnZXIpO1xuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1sxXSwgJzEwMDAwMDAwMCcpO1xuXG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzJdLCAnMScpO1xuXG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLCAnNjY4NDknKTtcblxuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3NbNF0udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuT3B0aW9uYWxOb25lKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZHMgYSBzdGFrZS11cGRhdGUgdHJhbnNhY3Rpb24gY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlVXBkYXRlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgb2xkU2lnbmVyTWFuYWdlcixcbiAgICAgICAgY3ljbGVzVG9FeHRlbmQ6IDEsXG4gICAgICAgIGFtb3VudEluY3JlYXNlOiAnNTAwMDAnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRPZih0eCk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uTmFtZS5zaG91bGQuZXF1YWwoJ3N0YWtlLXVwZGF0ZScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIGN2VG9TdHJpbmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnNob3VsZC5lcXVhbChzaWduZXJNYW5hZ2VyKTtcbiAgICAgIGN2VG9TdHJpbmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0pLnNob3VsZC5lcXVhbChvbGRTaWduZXJNYW5hZ2VyKTtcbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMl0sICcxJyk7XG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLCAnNTAwMDAnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRzIGFuIHVuc3Rha2UgdHJhbnNhY3Rpb24gY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnVuc3Rha2Uob2xkU2lnbmVyTWFuYWdlcik7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRPZih0eCk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uTmFtZS5zaG91bGQuZXF1YWwoJ3Vuc3Rha2UnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKS5zaG91bGQuZXF1YWwob2xkU2lnbmVyTWFuYWdlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRzIHJlZ2lzdGVyLWZvci1ib25kIHRyYW5zYWN0aW9ucyAoTDEgbG9ja3VwIGFuZCBzQlRDKSBjYXJyeWluZyB0aGUgdHN0eHNpZ25ldCBjaGFpbiBJRCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ0Y0J1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ0Y0J1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdidGMnLCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJ0Y1R4ID0gYXdhaXQgYnRjQnVpbGRlci5idWlsZCgpO1xuICAgICAgYnRjVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3QgYnRjUGF5bG9hZCA9IHBheWxvYWRPZihidGNUeCk7XG4gICAgICBidGNQYXlsb2FkLmZ1bmN0aW9uTmFtZS5zaG91bGQuZXF1YWwoJ3JlZ2lzdGVyLWZvci1ib25kJyk7XG4gICAgICBidGNQYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5SZXNwb25zZU9rKTtcblxuICAgICAgY29uc3Qgc2J0Y0J1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHNidGNCdWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cDogeyBraW5kOiAnc2J0YycsIHNidGNTYXRzOiAxMDAwMCB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzYnRjVHggPSBhd2FpdCBzYnRjQnVpbGRlci5idWlsZCgpO1xuICAgICAgc2J0Y1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHNidGNQYXlsb2FkID0gcGF5bG9hZE9mKHNidGNUeCk7XG4gICAgICBzYnRjUGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuUmVzcG9uc2VFcnIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlYnVpbGRzIGV2ZXJ5IHN0YWtpbmcgZmxvdyBieXRlLWlkZW50aWNhbGx5IGZyb20gcmF3IGhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YWtlQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgc3Rha2VCdWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFrZVR4ID0gYXdhaXQgc3Rha2VCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHN0YWtlUmVidWlsdCA9IHNpZ25ldEZhY3RvcnkuZnJvbShzdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgc3Rha2VSZWJ1aWx0LmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAoYXdhaXQgc3Rha2VSZWJ1aWx0LmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHN0YWtlVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG5cbiAgICAgIGNvbnN0IHVuc3Rha2VCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICB1bnN0YWtlQnVpbGRlci51bnN0YWtlKG9sZFNpZ25lck1hbmFnZXIpO1xuICAgICAgY29uc3QgdW5zdGFrZVR4ID0gYXdhaXQgdW5zdGFrZUJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdW5zdGFrZVJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20odW5zdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgdW5zdGFrZVJlYnVpbHQuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgIChhd2FpdCB1bnN0YWtlUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbCh1bnN0YWtlVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG5cbiAgICAgIGNvbnN0IHJlZ2lzdGVyQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgcmVnaXN0ZXJCdWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cDogeyBraW5kOiAnc2J0YycsIHNidGNTYXRzOiAxMDAwMCB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWdpc3RlclR4ID0gYXdhaXQgcmVnaXN0ZXJCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHJlZ2lzdGVyUmVidWlsdCA9IHNpZ25ldEZhY3RvcnkuZnJvbShyZWdpc3RlclR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgcmVnaXN0ZXJSZWJ1aWx0LmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAoYXdhaXQgcmVnaXN0ZXJSZWJ1aWx0LmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJlZ2lzdGVyVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91dGVzIHBhcnNlZCBzdGFrZSB0cmFuc2FjdGlvbnMgdG8gdGhlIFBvWC01IGJ1aWxkZXIgb24gdHN0eHNpZ25ldCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9ICh0eCBhcyBTdHhMaWIuVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgdW5rbm93biBhcyBDb250cmFjdENhbGxQYXlsb2FkO1xuXG4gICAgICBidWlsZGVyLnNob3VsZC5iZS5hbi5pbnN0YW5jZU9mKFN0eExpYi5Qb3g1QnVpbGRlcik7XG4gICAgICBzaG91bGQuZXF1YWwoU3R4TGliLlBveDVCdWlsZGVyLmlzVmFsaWRDb250cmFjdENhbGwoY29pbnMuZ2V0KCd0c3R4c2lnbmV0JyksIHBheWxvYWQpLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgU3R4TGliLlBveDVCdWlsZGVyLmlzVmFsaWRDb250cmFjdENhbGwoY29pbnMuZ2V0KCd0c3R4c2lnbmV0JyksIHtcbiAgICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogY3JlYXRlQWRkcmVzcyh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWRkcmVzcyksXG4gICAgICAgIH0pLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgcm91dGVkID0gc2lnbmV0RmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgcm91dGVkLnNob3VsZC5iZS5hbi5pbnN0YW5jZU9mKFN0eExpYi5Qb3g1QnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnZXhwb3NlcyBmZWUsIG5vbmNlIGFuZCBzZW5kZXIgb24gdGhlIGJ1aWx0IHN0YWtlIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci5zdGFrZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eEpzb24gPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5mZWUuc2hvdWxkLmVxdWFsKCcxODAnKTtcbiAgICAgIHR4SnNvbi5ub25jZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgICB0eEpzb24uaWQuc2hvdWxkLm1hdGNoKC9eWzAtOWEtZl17NjR9JC8pO1xuICAgICAgdHhKc29uLmZyb20uc2hvdWxkLmVxdWFsKHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc2lnbmVyLW1hbmFnZXIgcHJpbmNpcGFsIHdpdGhvdXQgdGhlIGFkZHJlc3MuY29udHJhY3QtbmFtZSBzaGFwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYnVpbGRlci5zdGFrZSh7XG4gICAgICAgICAgICBzaWduZXJNYW5hZ2VyOiAnbm8tZG90JyxcbiAgICAgICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgICAgIH0pLFxuICAgICAgICAvYWRkcmVzcy5jb250cmFjdC1uYW1lIGZvcm1hdC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYWxjdWxhdGVSZXdhcmRzIGFuZCBjbGFpbVN0YWtlclJld2FyZHNGb3JTaWduZXInLCAoKSA9PiB7XG4gICAgaXQoJ2J1aWxkcyBjYWxjdWxhdGUtcmV3YXJkcyB3aXRoIGEgbGlzdCBvZiBib25kIGluZGljZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLmNhbGN1bGF0ZVJld2FyZHMoWzEsIDJdKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5wYXlsb2FkKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZHMgY2xhaW0tc3Rha2VyLXJld2FyZHMgZm9yIGEgc2lnbmVyIHdpdGggYW5kIHdpdGhvdXQgYSBib25kIGluZGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgd2l0aEJvbmRJbmRleCA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgd2l0aEJvbmRJbmRleC5jbGFpbVN0YWtlclJld2FyZHNGb3JTaWduZXIoe1xuICAgICAgICBzdGFrZXI6IHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzLFxuICAgICAgICByZXdhcmRDeWNsZTogMSxcbiAgICAgICAgYm9uZEluZGV4OiAyLFxuICAgICAgfSk7XG4gICAgICBzaG91bGQuZXhpc3QoKGF3YWl0IHdpdGhCb25kSW5kZXguYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG5cbiAgICAgIGNvbnN0IHdpdGhvdXRCb25kSW5kZXggPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHdpdGhvdXRCb25kSW5kZXguY2xhaW1TdGFrZXJSZXdhcmRzRm9yU2lnbmVyKHtcbiAgICAgICAgc3Rha2VyOiB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyxcbiAgICAgICAgcmV3YXJkQ3ljbGU6IDEsXG4gICAgICB9KTtcbiAgICAgIHNob3VsZC5leGlzdCgoYXdhaXQgd2l0aG91dEJvbmRJbmRleC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==