@bitgo-beta/sdk-coin-vet 1.0.1-beta.496 → 1.0.1-beta.498

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 (40) hide show
  1. package/dist/src/lib/constants.d.ts +3 -2
  2. package/dist/src/lib/constants.d.ts.map +1 -1
  3. package/dist/src/lib/constants.js +5 -4
  4. package/dist/src/lib/iface.d.ts +2 -0
  5. package/dist/src/lib/iface.d.ts.map +1 -1
  6. package/dist/src/lib/iface.js +1 -1
  7. package/dist/src/lib/transaction/burnNftTransaction.d.ts +3 -0
  8. package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -1
  9. package/dist/src/lib/transaction/burnNftTransaction.js +14 -7
  10. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +6 -6
  11. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -1
  12. package/dist/src/lib/transaction/delegateClauseTransaction.js +17 -15
  13. package/dist/src/lib/transaction/exitDelegation.d.ts +3 -0
  14. package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -1
  15. package/dist/src/lib/transaction/exitDelegation.js +14 -7
  16. package/dist/src/lib/transaction/stakeClauseTransaction.js +3 -3
  17. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +4 -4
  18. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -1
  19. package/dist/src/lib/transactionBuilder/burnNftBuilder.js +9 -9
  20. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +8 -2
  21. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +16 -3
  23. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +7 -6
  24. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -1
  25. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +15 -12
  26. package/dist/src/lib/utils.d.ts +8 -8
  27. package/dist/src/lib/utils.d.ts.map +1 -1
  28. package/dist/src/lib/utils.js +12 -12
  29. package/dist/test/resources/vet.d.ts +5 -3
  30. package/dist/test/resources/vet.d.ts.map +1 -1
  31. package/dist/test/resources/vet.js +8 -6
  32. package/dist/test/transactionBuilder/burnNftBuilder.js +25 -29
  33. package/dist/test/transactionBuilder/claimRewardsBuilder.js +9 -9
  34. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +32 -20
  35. package/dist/test/transactionBuilder/exitDelegationBuilder.js +25 -29
  36. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +9 -10
  37. package/dist/test/transactionBuilder/stakingTransaction.js +2 -2
  38. package/dist/test/unit/stakingFlowE2E.js +11 -18
  39. package/dist/tsconfig.tsbuildinfo +1 -1
  40. package/package.json +9 -9
@@ -47,9 +47,7 @@ describe('VET Staking Flow - End-to-End Test', function () {
47
47
  // Test data
48
48
  const stakingContractAddress = testData.STAKING_CONTRACT_ADDRESS;
49
49
  const amountToStake = '1000000000000000000'; // 1 VET in wei
50
- const amountToStakeHex = '0xde0b6b3a7640000'; // Same amount in hex
51
50
  const levelId = testData.STAKING_LEVEL_ID;
52
- const autorenew = testData.STAKING_AUTORENEW;
53
51
  const senderAddress = '0x9378c12BD7502A11F770a5C1F223c959B2805dA9';
54
52
  const feePayerAddress = '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083';
55
53
  // Mock signatures for testing (these would come from actual signing in real scenario)
@@ -58,7 +56,7 @@ describe('VET Staking Flow - End-to-End Test', function () {
58
56
  describe('Complete Staking Transaction Flow', function () {
59
57
  it('should build, sign, and serialize a complete staking transaction with fee delegation', async function () {
60
58
  // Step 1: Build the staking transaction
61
- const stakingBuilder = factory.getStakingBuilder();
59
+ const stakingBuilder = factory.getStakingActivateBuilder();
62
60
  stakingBuilder
63
61
  .stakingContractAddress(stakingContractAddress)
64
62
  .amountToStake(amountToStake)
@@ -73,14 +71,13 @@ describe('VET Staking Flow - End-to-End Test', function () {
73
71
  stakingBuilder.addFeePayerAddress(feePayerAddress);
74
72
  const unsignedTx = await stakingBuilder.build();
75
73
  should_1.default.exist(unsignedTx);
76
- unsignedTx.should.be.instanceof(lib_1.StakingTransaction);
74
+ unsignedTx.should.be.instanceof(lib_1.StakeClauseTransaction);
77
75
  const stakingTx = unsignedTx;
78
76
  // Verify transaction structure
79
- stakingTx.type.should.equal(sdk_core_1.TransactionType.ContractCall);
77
+ stakingTx.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
80
78
  stakingTx.stakingContractAddress.should.equal(stakingContractAddress);
81
79
  stakingTx.amountToStake.should.equal(amountToStake);
82
80
  stakingTx.levelId.should.equal(levelId);
83
- stakingTx.autorenew.should.equal(autorenew);
84
81
  should_1.default.exist(stakingTx.rawTransaction);
85
82
  should_1.default.exist(stakingTx.rawTransaction.body);
86
83
  // This is the critical test - ensure reserved.features = 1 for ContractCall type
@@ -107,12 +104,10 @@ describe('VET Staking Flow - End-to-End Test', function () {
107
104
  // Step 7: Verify transaction can be deserialized
108
105
  const deserializedBuilder = factory.from(serializedTx);
109
106
  const deserializedTx = deserializedBuilder.transaction;
110
- deserializedTx.should.be.instanceof(lib_1.StakingTransaction);
107
+ deserializedTx.should.be.instanceof(lib_1.StakeClauseTransaction);
111
108
  deserializedTx.stakingContractAddress.should.equal(stakingContractAddress);
112
- // Amount is stored in hex format in deserialized transaction
113
- deserializedTx.amountToStake.should.equal(amountToStakeHex);
109
+ deserializedTx.amountToStake.should.equal(amountToStake);
114
110
  deserializedTx.levelId.should.equal(levelId);
115
- deserializedTx.autorenew.should.equal(autorenew);
116
111
  // Step 8: Verify toJson output
117
112
  const jsonOutput = stakingTx.toJson();
118
113
  should_1.default.exist(jsonOutput);
@@ -120,12 +115,11 @@ describe('VET Staking Flow - End-to-End Test', function () {
120
115
  jsonOutput.should.have.property('stakingContractAddress', stakingContractAddress);
121
116
  // JSON output keeps decimal format for amounts
122
117
  jsonOutput.should.have.property('amountToStake', amountToStake);
123
- jsonOutput.should.have.property('nftTokenId', levelId);
124
- jsonOutput.should.have.property('autorenew', autorenew);
118
+ jsonOutput.should.have.property('levelId', levelId);
125
119
  });
126
120
  it('should handle signature combination in the correct order', async function () {
127
121
  // This test specifically validates the signature combination flow that was failing
128
- const stakingBuilder = factory.getStakingBuilder();
122
+ const stakingBuilder = factory.getStakingActivateBuilder();
129
123
  stakingBuilder
130
124
  .stakingContractAddress(stakingContractAddress)
131
125
  .amountToStake(amountToStake)
@@ -153,7 +147,7 @@ describe('VET Staking Flow - End-to-End Test', function () {
153
147
  });
154
148
  it('should properly set transaction type for fee delegation validation', async function () {
155
149
  // This test ensures our fix for TransactionType.ContractCall is working
156
- const stakingBuilder = factory.getStakingBuilder();
150
+ const stakingBuilder = factory.getStakingActivateBuilder();
157
151
  stakingBuilder
158
152
  .stakingContractAddress(stakingContractAddress)
159
153
  .amountToStake(amountToStake)
@@ -168,7 +162,7 @@ describe('VET Staking Flow - End-to-End Test', function () {
168
162
  stakingBuilder.addFeePayerAddress(feePayerAddress);
169
163
  const tx = (await stakingBuilder.build());
170
164
  // Verify the transaction type is ContractCall
171
- tx.type.should.equal(sdk_core_1.TransactionType.ContractCall);
165
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
172
166
  // Verify fee delegation is enabled via reserved.features = 1
173
167
  const rawTxBody = tx.rawTransaction.body;
174
168
  should_1.default.exist(rawTxBody.reserved);
@@ -188,7 +182,6 @@ describe('VET Staking Flow - End-to-End Test', function () {
188
182
  // The actual contract address from the parsed transaction is 0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7
189
183
  tx.stakingContractAddress.should.equal('0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7');
190
184
  tx.levelId.should.equal(testData.STAKING_LEVEL_ID);
191
- tx.autorenew.should.equal(testData.STAKING_AUTORENEW);
192
185
  });
193
186
  });
194
187
  describe('Fee Delegation Flag Tests', function () {
@@ -200,7 +193,7 @@ describe('VET Staking Flow - End-to-End Test', function () {
200
193
  { type: sdk_core_1.TransactionType.StakingClaim, name: 'Claim Rewards' },
201
194
  ];
202
195
  for (const testCase of testTypes) {
203
- const stakingBuilder = factory.getStakingBuilder();
196
+ const stakingBuilder = factory.getStakingActivateBuilder();
204
197
  stakingBuilder
205
198
  .stakingContractAddress(stakingContractAddress)
206
199
  .amountToStake(amountToStake)
@@ -226,4 +219,4 @@ describe('VET Staking Flow - End-to-End Test', function () {
226
219
  });
227
220
  });
228
221
  });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBOEU7QUFDOUUsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLENBQUMscUJBQXFCO0lBQ25FLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsc0ZBQXNGO0lBQ3RGLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZFLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtRQUM1QyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztZQUM5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QyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqQyxTQUFTLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFN0YWtpbmdUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCdWRVQgU3Rha2luZyBGbG93IC0gRW5kLXRvLUVuZCBUZXN0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dmV0Jyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICAvLyBUZXN0IGRhdGFcbiAgY29uc3Qgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IHRlc3REYXRhLlNUQUtJTkdfQ09OVFJBQ1RfQUREUkVTUztcbiAgY29uc3QgYW1vdW50VG9TdGFrZSA9ICcxMDAwMDAwMDAwMDAwMDAwMDAwJzsgLy8gMSBWRVQgaW4gd2VpXG4gIGNvbnN0IGFtb3VudFRvU3Rha2VIZXggPSAnMHhkZTBiNmIzYTc2NDAwMDAnOyAvLyBTYW1lIGFtb3VudCBpbiBoZXhcbiAgY29uc3QgbGV2ZWxJZCA9IHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQ7XG4gIGNvbnN0IGF1dG9yZW5ldyA9IHRlc3REYXRhLlNUQUtJTkdfQVVUT1JFTkVXO1xuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOSc7XG4gIGNvbnN0IGZlZVBheWVyQWRkcmVzcyA9ICcweGRjOWZlZjBiODRhMGNjZjNmMWJkNGI4NGU0MTc0M2UzZTA1MWEwODMnO1xuXG4gIC8vIE1vY2sgc2lnbmF0dXJlcyBmb3IgdGVzdGluZyAodGhlc2Ugd291bGQgY29tZSBmcm9tIGFjdHVhbCBzaWduaW5nIGluIHJlYWwgc2NlbmFyaW8pXG4gIGNvbnN0IG1vY2tTZW5kZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zZW5kZXJTaWcsICdoZXgnKTtcbiAgY29uc3QgbW9ja0ZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVzdERhdGEuZmVlUGF5ZXJTaWcsICdoZXgnKTtcblxuICBkZXNjcmliZSgnQ29tcGxldGUgU3Rha2luZyBUcmFuc2FjdGlvbiBGbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQsIHNpZ24sIGFuZCBzZXJpYWxpemUgYSBjb21wbGV0ZSBzdGFraW5nIHRyYW5zYWN0aW9uIHdpdGggZmVlIGRlbGVnYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTdGVwIDE6IEJ1aWxkIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNykgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh1bnNpZ25lZFR4KTtcbiAgICAgIHVuc2lnbmVkVHguc2hvdWxkLmJlLmluc3RhbmNlb2YoU3Rha2luZ1RyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3Qgc3Rha2luZ1R4ID0gdW5zaWduZWRUeCBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHN0YWtpbmdUeC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIHN0YWtpbmdUeC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIHN0YWtpbmdUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcbiAgICAgIHN0YWtpbmdUeC5hdXRvcmVuZXcuc2hvdWxkLmVxdWFsKGF1dG9yZW5ldyk7XG5cbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbi5ib2R5KTtcblxuICAgICAgLy8gVGhpcyBpcyB0aGUgY3JpdGljYWwgdGVzdCAtIGVuc3VyZSByZXNlcnZlZC5mZWF0dXJlcyA9IDEgZm9yIENvbnRyYWN0Q2FsbCB0eXBlXG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkucmVzZXJ2ZWQpO1xuICAgICAgc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBTdGVwIDM6IEFkZCBzZW5kZXIgc2lnbmF0dXJlXG4gICAgICBzdGFraW5nVHguYWRkU2VuZGVyU2lnbmF0dXJlKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5zZW5kZXJTaWduYXR1cmUpO1xuICAgICAgQnVmZmVyLmZyb20oc3Rha2luZ1R4LnNlbmRlclNpZ25hdHVyZSEpLnNob3VsZC5lcWwobW9ja1NlbmRlclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFN0ZXAgNDogQWRkIGZlZSBwYXllciBzaWduYXR1cmVcbiAgICAgIHN0YWtpbmdUeC5hZGRGZWVQYXllclNpZ25hdHVyZShtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5mZWVQYXllclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbShzdGFraW5nVHguZmVlUGF5ZXJTaWduYXR1cmUhKS5zaG91bGQuZXFsKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFN0ZXAgNTogR2VuZXJhdGUgdHJhbnNhY3Rpb24gSURcblxuICAgICAgLy8gVGhpcyBzaG91bGQgTk9UIHRocm93IFwibm90IHNpZ25lZCB0cmFuc2FjdGlvbjogaWQgdW5hdmFpbGFibGVcIiBlcnJvciBhbnltb3JlXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gc3Rha2luZ1R4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zYWN0aW9uSWQpO1xuICAgICAgdHJhbnNhY3Rpb25JZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBTdGVwIDY6IFNlcmlhbGl6ZSB0aGUgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzZXJpYWxpemVkVHggPSBzdGFraW5nVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5leGlzdChzZXJpYWxpemVkVHgpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5iZS50eXBlKCdzdHJpbmcnKTtcbiAgICAgIHNlcmlhbGl6ZWRUeC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuXG4gICAgICAvLyBTdGVwIDc6IFZlcmlmeSB0cmFuc2FjdGlvbiBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRUeCA9IGRlc2VyaWFsaXplZEJ1aWxkZXIudHJhbnNhY3Rpb24gYXMgU3Rha2luZ1RyYW5zYWN0aW9uO1xuXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihTdGFraW5nVHJhbnNhY3Rpb24pO1xuICAgICAgZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAvLyBBbW91bnQgaXMgc3RvcmVkIGluIGhleCBmb3JtYXQgaW4gZGVzZXJpYWxpemVkIHRyYW5zYWN0aW9uXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlSGV4KTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKGxldmVsSWQpO1xuICAgICAgZGVzZXJpYWxpemVkVHguYXV0b3JlbmV3LnNob3VsZC5lcXVhbChhdXRvcmVuZXcpO1xuXG4gICAgICAvLyBTdGVwIDg6IFZlcmlmeSB0b0pzb24gb3V0cHV0XG4gICAgICBjb25zdCBqc29uT3V0cHV0ID0gc3Rha2luZ1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb25PdXRwdXQpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCB0cmFuc2FjdGlvbklkKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdDb250cmFjdEFkZHJlc3MnLCBzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIC8vIEpTT04gb3V0cHV0IGtlZXBzIGRlY2ltYWwgZm9ybWF0IGZvciBhbW91bnRzXG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhbW91bnRUb1N0YWtlJywgYW1vdW50VG9TdGFrZSk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCduZnRUb2tlbklkJywgbGV2ZWxJZCk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhdXRvcmVuZXcnLCBhdXRvcmVuZXcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmF0dXJlIGNvbWJpbmF0aW9uIGluIHRoZSBjb3JyZWN0IG9yZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBmbG93IHRoYXQgd2FzIGZhaWxpbmdcbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVGVzdCAxOiBPbmx5IHNlbmRlciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gVGVzdCAyOiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZSAtIHNob3VsZCBnZW5lcmF0ZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBJRCB3aXRoIGJvdGggc2lnbmF0dXJlc1xuICAgICAgY29uc3QgZnVsbFNpZ25lZElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QoZnVsbFNpZ25lZElkKTtcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBUaGUgSUQgc2hvdWxkIGJlIGNvbnNpc3RlbnRcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBmdWxsU2lnbmVkSWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHNldCB0cmFuc2FjdGlvbiB0eXBlIGZvciBmZWUgZGVsZWdhdGlvbiB2YWxpZGF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgb3VyIGZpeCBmb3IgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCBpcyB3b3JraW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBDb250cmFjdENhbGxcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuXG4gICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgZW5hYmxlZCB2aWEgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICByYXdUeEJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBUaGlzIHByb3ZlcyB0aGF0IENvbnRyYWN0Q2FsbCB0cmFuc2FjdGlvbnMgbm93IGdldCBmZWUgZGVsZWdhdGlvbiBzdXBwb3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBwcmUtYnVpbHQgc2lnbmVkIHRyYW5zYWN0aW9uIGZyb20gdGVzdCBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCB1c2luZyB0aGUgYWN0dWFsIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIG91ciB0ZXN0IGRhdGFcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TVEFLSU5HX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gU2hvdWxkIGJlIGFibGUgdG8gZ2V0IElEIHdpdGhvdXQgdGhyb3dpbmcgZXJyb3JzXG4gICAgICBjb25zdCB0eElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QodHhJZCk7XG4gICAgICB0eElkLnNob3VsZC5ub3QuZXF1YWwoJ1VOQVZBSUxBQkxFJyk7XG5cbiAgICAgIC8vIFZlcmlmeSBhbGwgc3Rha2luZyBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWRcbiAgICAgIC8vIE5vdGU6IFRoZSB0ZXN0IGRhdGEgdXNlcyBhIGRpZmZlcmVudCBjb250cmFjdCBhZGRyZXNzIGluIHRoZSB0cmFuc2FjdGlvblxuICAgICAgLy8gVGhlIGFjdHVhbCBjb250cmFjdCBhZGRyZXNzIGZyb20gdGhlIHBhcnNlZCB0cmFuc2FjdGlvbiBpcyAweDE4NTZjNTMzYWMyZDk0MzQwYWFhODU0NGQzNWE1YzFkNGEyMWRlZTdcbiAgICAgIHR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDE4NTZjNTMzYWMyZDk0MzQwYWFhODU0NGQzNWE1YzFkNGEyMWRlZTcnKTtcbiAgICAgIHR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQpO1xuICAgICAgdHguYXV0b3JlbmV3LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TVEFLSU5HX0FVVE9SRU5FVyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGZWUgRGVsZWdhdGlvbiBGbGFnIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IGZlZSBkZWxlZ2F0aW9uIGZvciBhbGwgc3Rha2luZy1yZWxhdGVkIHRyYW5zYWN0aW9uIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdFR5cGVzID0gW1xuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwsIG5hbWU6ICdTdGFraW5nJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrLCBuYW1lOiAnRXhpdCBEZWxlZ2F0aW9uJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcsIG5hbWU6ICdCdXJuIE5GVCcgfSxcbiAgICAgICAgeyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltLCBuYW1lOiAnQ2xhaW0gUmV3YXJkcycgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgdGVzdFR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuICAgICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZSB0byB0ZXN0IGRpZmZlcmVudCB0eXBlc1xuICAgICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgICAgICh0eCBhcyBhbnkpLl90eXBlID0gdGVzdENhc2UudHlwZTtcblxuICAgICAgICAvLyBSZWJ1aWxkIHRoZSByYXcgdHJhbnNhY3Rpb24gdG8gdGVzdCBmZWUgZGVsZWdhdGlvbiBmbGFnXG4gICAgICAgIGF3YWl0ICh0eCBhcyBhbnkpLmJ1aWxkUmF3VHJhbnNhY3Rpb24oKTtcblxuICAgICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgc2V0IGZvciBhbGwgdHlwZXNcbiAgICAgICAgY29uc3QgcmF3VHhCb2R5ID0gdHgucmF3VHJhbnNhY3Rpb24uYm9keTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICAgIHJhd1R4Qm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBa0Y7QUFDbEYsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7SUFDMUMsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsc0ZBQXNGO0lBQ3RGLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZFLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtRQUM1QyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztZQUM5Rix3Q0FBd0M7WUFDeEMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFFM0QsY0FBYztpQkFDWCxzQkFBc0IsQ0FBQyxzQkFB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LENBQUM7cUJBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUM7cUJBQ2hCLE1BQU0sQ0FBQyxhQUFhLENBQUM7cUJBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUM7cUJBQ2QsUUFBUSxDQUFDLG9CQUFvQixDQUFDO3FCQUM5QixVQUFVLENBQUMsRUFBRSxDQUFDO3FCQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7cUJBQ1gsWUFBWSxDQUFDLEdBQUcsQ0FBQztxQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVsQixjQUFjLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRW5ELDREQUE0RDtnQkFDNUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBMkIsQ0FBQztnQkFDbkUsRUFBVSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUVsQywwREFBMEQ7Z0JBQzFELE1BQU8sRUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBRXhDLDZDQUE2QztnQkFDN0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsU0FBUyxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvdmV0JztcblxuZGVzY3JpYmUoJ1ZFVCBTdGFraW5nIEZsb3cgLSBFbmQtdG8tRW5kIFRlc3QnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3R2ZXQnKTtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuXG4gIC8vIFRlc3QgZGF0YVxuICBjb25zdCBzdGFraW5nQ29udHJhY3RBZGRyZXNzID0gdGVzdERhdGEuU1RBS0lOR19DT05UUkFDVF9BRERSRVNTO1xuICBjb25zdCBhbW91bnRUb1N0YWtlID0gJzEwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAxIFZFVCBpbiB3ZWlcbiAgY29uc3QgbGV2ZWxJZCA9IHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQ7XG4gIGNvbnN0IHNlbmRlckFkZHJlc3MgPSAnMHg5Mzc4YzEyQkQ3NTAyQTExRjc3MGE1QzFGMjIzYzk1OUIyODA1ZEE5JztcbiAgY29uc3QgZmVlUGF5ZXJBZGRyZXNzID0gJzB4ZGM5ZmVmMGI4NGEwY2NmM2YxYmQ0Yjg0ZTQxNzQzZTNlMDUxYTA4Myc7XG5cbiAgLy8gTW9jayBzaWduYXR1cmVzIGZvciB0ZXN0aW5nICh0aGVzZSB3b3VsZCBjb21lIGZyb20gYWN0dWFsIHNpZ25pbmcgaW4gcmVhbCBzY2VuYXJpbylcbiAgY29uc3QgbW9ja1NlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNlbmRlclNpZywgJ2hleCcpO1xuICBjb25zdCBtb2NrRmVlUGF5ZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5mZWVQYXllclNpZywgJ2hleCcpO1xuXG4gIGRlc2NyaWJlKCdDb21wbGV0ZSBTdGFraW5nIFRyYW5zYWN0aW9uIEZsb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCwgc2lnbiwgYW5kIHNlcmlhbGl6ZSBhIGNvbXBsZXRlIHN0YWtpbmcgdHJhbnNhY3Rpb24gd2l0aCBmZWUgZGVsZWdhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFN0ZXAgMTogQnVpbGQgdGhlIHN0YWtpbmcgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpIC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXhpc3QodW5zaWduZWRUeCk7XG4gICAgICB1bnNpZ25lZFR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCBzdGFraW5nVHggPSB1bnNpZ25lZFR4IGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHN0YWtpbmdUeC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcbiAgICAgIHN0YWtpbmdUeC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIHN0YWtpbmdUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbik7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkpO1xuXG4gICAgICAvLyBUaGlzIGlzIHRoZSBjcml0aWNhbCB0ZXN0IC0gZW5zdXJlIHJlc2VydmVkLmZlYXR1cmVzID0gMSBmb3IgQ29udHJhY3RDYWxsIHR5cGVcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCk7XG4gICAgICBzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogQWRkIHNlbmRlciBzaWduYXR1cmVcbiAgICAgIHN0YWtpbmdUeC5hZGRTZW5kZXJTaWduYXR1cmUobW9ja1NlbmRlclNpZ25hdHVyZSk7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnNlbmRlclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbShzdGFraW5nVHguc2VuZGVyU2lnbmF0dXJlISkuc2hvdWxkLmVxbChtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gU3RlcCA0OiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZVxuICAgICAgc3Rha2luZ1R4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LmZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtpbmdUeC5mZWVQYXllclNpZ25hdHVyZSEpLnNob3VsZC5lcWwobW9ja0ZlZVBheWVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gU3RlcCA1OiBHZW5lcmF0ZSB0cmFuc2FjdGlvbiBJRFxuXG4gICAgICAvLyBUaGlzIHNob3VsZCBOT1QgdGhyb3cgXCJub3Qgc2lnbmVkIHRyYW5zYWN0aW9uOiBpZCB1bmF2YWlsYWJsZVwiIGVycm9yIGFueW1vcmVcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBzdGFraW5nVHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QodHJhbnNhY3Rpb25JZCk7XG4gICAgICB0cmFuc2FjdGlvbklkLnNob3VsZC5ub3QuZXF1YWwoJ1VOQVZBSUxBQkxFJyk7XG5cbiAgICAgIC8vIFN0ZXAgNjogU2VyaWFsaXplIHRoZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHN0YWtpbmdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlcmlhbGl6ZWRUeCk7XG4gICAgICBzZXJpYWxpemVkVHguc2hvdWxkLmJlLnR5cGUoJ3N0cmluZycpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG5cbiAgICAgIC8vIFN0ZXAgNzogVmVyaWZ5IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFR4ID0gZGVzZXJpYWxpemVkQnVpbGRlci50cmFuc2FjdGlvbiBhcyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uO1xuXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihTdGFrZUNsYXVzZVRyYW5zYWN0aW9uKTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgICAgZGVzZXJpYWxpemVkVHguYW1vdW50VG9TdGFrZS5zaG91bGQuZXF1YWwoYW1vdW50VG9TdGFrZSk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcblxuICAgICAgLy8gU3RlcCA4OiBWZXJpZnkgdG9Kc29uIG91dHB1dFxuICAgICAgY29uc3QganNvbk91dHB1dCA9IHN0YWtpbmdUeC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdChqc29uT3V0cHV0KTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lkJywgdHJhbnNhY3Rpb25JZCk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzdGFraW5nQ29udHJhY3RBZGRyZXNzJywgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAvLyBKU09OIG91dHB1dCBrZWVwcyBkZWNpbWFsIGZvcm1hdCBmb3IgYW1vdW50c1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYW1vdW50VG9TdGFrZScsIGFtb3VudFRvU3Rha2UpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbGV2ZWxJZCcsIGxldmVsSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmF0dXJlIGNvbWJpbmF0aW9uIGluIHRoZSBjb3JyZWN0IG9yZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBmbG93IHRoYXQgd2FzIGZhaWxpbmdcbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKSkgYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVGVzdCAxOiBPbmx5IHNlbmRlciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gVGVzdCAyOiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZSAtIHNob3VsZCBnZW5lcmF0ZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBJRCB3aXRoIGJvdGggc2lnbmF0dXJlc1xuICAgICAgY29uc3QgZnVsbFNpZ25lZElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QoZnVsbFNpZ25lZElkKTtcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBUaGUgSUQgc2hvdWxkIGJlIGNvbnNpc3RlbnRcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBmdWxsU2lnbmVkSWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHNldCB0cmFuc2FjdGlvbiB0eXBlIGZvciBmZWUgZGVsZWdhdGlvbiB2YWxpZGF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgb3VyIGZpeCBmb3IgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCBpcyB3b3JraW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBDb250cmFjdENhbGxcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuXG4gICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgZW5hYmxlZCB2aWEgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICByYXdUeEJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBUaGlzIHByb3ZlcyB0aGF0IENvbnRyYWN0Q2FsbCB0cmFuc2FjdGlvbnMgbm93IGdldCBmZWUgZGVsZWdhdGlvbiBzdXBwb3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBwcmUtYnVpbHQgc2lnbmVkIHRyYW5zYWN0aW9uIGZyb20gdGVzdCBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCB1c2luZyB0aGUgYWN0dWFsIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIG91ciB0ZXN0IGRhdGFcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TVEFLSU5HX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCBJRCB3aXRob3V0IHRocm93aW5nIGVycm9yc1xuICAgICAgY29uc3QgdHhJZCA9IHR4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SWQpO1xuICAgICAgdHhJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBWZXJpZnkgYWxsIHN0YWtpbmcgcHJvcGVydGllcyBhcmUgcHJlc2VydmVkXG4gICAgICAvLyBOb3RlOiBUaGUgdGVzdCBkYXRhIHVzZXMgYSBkaWZmZXJlbnQgY29udHJhY3QgYWRkcmVzcyBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICAgIC8vIFRoZSBhY3R1YWwgY29udHJhY3QgYWRkcmVzcyBmcm9tIHRoZSBwYXJzZWQgdHJhbnNhY3Rpb24gaXMgMHgxODU2YzUzM2FjMmQ5NDM0MGFhYTg1NDRkMzVhNWMxZDRhMjFkZWU3XG4gICAgICB0eC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnMHgxODU2YzUzM2FjMmQ5NDM0MGFhYTg1NDRkMzVhNWMxZDRhMjFkZWU3Jyk7XG4gICAgICB0eC5sZXZlbElkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TVEFLSU5HX0xFVkVMX0lEKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZlZSBEZWxlZ2F0aW9uIEZsYWcgVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgZmVlIGRlbGVnYXRpb24gZm9yIGFsbCBzdGFraW5nLXJlbGF0ZWQgdHJhbnNhY3Rpb24gdHlwZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0VHlwZXMgPSBbXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCwgbmFtZTogJ1N0YWtpbmcnIH0sXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2ssIG5hbWU6ICdFeGl0IERlbGVnYXRpb24nIH0sXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdywgbmFtZTogJ0J1cm4gTkZUJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0sIG5hbWU6ICdDbGFpbSBSZXdhcmRzJyB9LFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCB0ZXN0Q2FzZSBvZiB0ZXN0VHlwZXMpIHtcbiAgICAgICAgY29uc3Qgc3Rha2luZ0J1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgICAgLmNoYWluVGFnKDB4MjcpXG4gICAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgICAvLyBNYW51YWxseSBzZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gdGVzdCBkaWZmZXJlbnQgdHlwZXNcbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKSkgYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcbiAgICAgICAgKHR4IGFzIGFueSkuX3R5cGUgPSB0ZXN0Q2FzZS50eXBlO1xuXG4gICAgICAgIC8vIFJlYnVpbGQgdGhlIHJhdyB0cmFuc2FjdGlvbiB0byB0ZXN0IGZlZSBkZWxlZ2F0aW9uIGZsYWdcbiAgICAgICAgYXdhaXQgKHR4IGFzIGFueSkuYnVpbGRSYXdUcmFuc2FjdGlvbigpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBmZWUgZGVsZWdhdGlvbiBpcyBzZXQgZm9yIGFsbCB0eXBlc1xuICAgICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgICBzaG91bGQuZXhpc3QocmF3VHhCb2R5LnJlc2VydmVkKTtcbiAgICAgICAgcmF3VHhCb2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==