@bitgo-beta/sdk-coin-flrp 1.0.0-alpha.54 → 1.0.0-alpha.56

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.
@@ -139,7 +139,6 @@ describe('ExportInCTxBuilder', function () {
139
139
  const tx = await txBuilder.build();
140
140
  const rawTx = tx.toBroadcastFormat();
141
141
  rawTx.should.equal(exportInC_1.EXPORT_IN_C.unsignedHex);
142
- tx.id.should.equal(exportInC_1.EXPORT_IN_C.txhash);
143
142
  });
144
143
  it('Should recover signed export from signed raw tx', async () => {
145
144
  const txBuilder = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(exportInC_1.EXPORT_IN_C.signedHex);
@@ -180,6 +179,14 @@ describe('ExportInCTxBuilder', function () {
180
179
  err.message.should.be.equal('Private key cannot sign the transaction');
181
180
  });
182
181
  });
182
+ it('should verify on-chain tx id for signed C-chain export', async () => {
183
+ const signedExportHex = '0x0000000000010000007278db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da555247900000000000000000000000000000000000000000000000000000000000000000000000117dbd11b9dd1c9be337353db7c14f9fb3662e5b50000000002ff3d1658734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000000000000050000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf080000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f910000000100000009000000018d1ac79d2e26d1c9689ca93b3b191c077dced2f201bdda132e74c3fc5ab9b10b6c85fd318dd6c0a99b327145977ac6ea6ff54cb8e9b7093b6bbe3545b3cc126400';
184
+ const txBuilder = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(signedExportHex);
185
+ const tx = await txBuilder.build();
186
+ const rawTx = tx.toBroadcastFormat();
187
+ rawTx.should.equal(signedExportHex);
188
+ tx.id.should.equal('3kXUsHix1bZRQ9hqUc24cp7sXFiy2LbPn6Eh2HQCAaMUi75s9');
189
+ });
183
190
  });
184
191
  });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBMEQ7QUFDMUQsbURBQThFO0FBQzlFLCtDQUFpQztBQUNqQywwRkFBdUY7QUFDdkYseUVBQW9GO0FBRXBGLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUkscURBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDaEQsTUFBTSxTQUFTLEdBQUksVUFBVSxDQUFDLE9BQXdCLENBQUMsS0FBSyxDQUFDO0lBRTdELFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtRQUNuQyxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztZQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDLEVBQUUsSUFBSSxnQ0FBcUIsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtRQUNwQyxFQUFFLENBQUMsa0RBQWtELEVBQUU7WUFDckQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFNUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM5QixNQUFNLENBQUMs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LENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUN6RSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvaW5zLCBGbGFyZU5ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB7IEVYUE9SVF9JTl9DIGFzIHRlc3REYXRhIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9leHBvcnRJbkMnO1xuXG5kZXNjcmliZSgnRXhwb3J0SW5DVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0ZmxycCcpO1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZyk7XG4gIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RXhwb3J0SW5DQnVpbGRlcigpO1xuICBjb25zdCBGSVhFRF9GRUUgPSAoY29pbkNvbmZpZy5uZXR3b3JrIGFzIEZsYXJlTmV0d29yaykudHhGZWU7XG5cbiAgZGVzY3JpYmUoJ3V0eG9zIEV4cG9ydEluQ1R4QnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gdXR4b3MgYXJlIHVzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnV0eG9zKFtdKTtcbiAgICAgIH0sIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3V0eG9zIGFyZSBub3QgcmVxdWlyZWQgaW4gRXhwb3J0IFR4IGluIEMtQ2hhaW4nKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhbW91bnQgRXhwb3J0SW5DVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IHZhbGlkIGFtb3VudHMgaW4gZGlmZmVyZW50IGZvcm1hdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFtb3VudHMgPSBbQmlnSW50KDEwMDApLCAnMTAwMCddO1xuXG4gICAgICB2YWxpZEFtb3VudHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRBbW91bnRzID0gWycwJywgJy0xJ107XG5cbiAgICAgIGludmFsaWRBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICAgIH0sIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vbmNlIEV4cG9ydEluQ1R4QnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFjY2VwdCB2YWxpZCBub25jZXMgaW4gZGlmZmVyZW50IGZvcm1hdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZE5vbmNlcyA9IFsnMScsIDEsIDBdO1xuXG4gICAgICB2YWxpZE5vbmNlcy5mb3JFYWNoKChub25jZSkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIubm9uY2Uobm9uY2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgbmVnYXRpdmUgbm9uY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKCctMScpO1xuICAgICAgfSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTm9uY2UgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gMCcpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RvIEV4cG9ydEluQ1R4QnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEV4cG9ydEluQ0J1aWxkZXIoKTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IG11bHRpcGxlIFAtYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcEFkZHJlc3NlcyA9IHRlc3REYXRhLnBBZGRyZXNzZXM7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudG8ocEFkZHJlc3Nlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHNpbmdsZSBQLWFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnRvKHRlc3REYXRhLnBBZGRyZXNzZXNbMF0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCB0aWxkZS1zZXBhcmF0ZWQgUC1hZGRyZXNzZXMgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcEFkZHJlc3NlcyA9IHRlc3REYXRhLnBBZGRyZXNzZXMuam9pbignficpO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgdHhCdWlsZGVyLnRvKHBBZGRyZXNzZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQgYSBleHBvcnQgdHhuIGZyb20gQyB0byBQJywgKCkgPT4ge1xuICAgIGNvbnN0IG5ld1R4QnVpbGRlciA9ICgpID0+XG4gICAgICBmYWN0b3J5XG4gICAgICAgIC5nZXRFeHBvcnRJbkNCdWlsZGVyKClcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuY0hleEFkZHJlc3MpXG4gICAgICAgIC5ub25jZSh0ZXN0RGF0YS5ub25jZSlcbiAgICAgICAgLmFtb3VudCh0ZXN0RGF0YS5hbW91bnQpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEubG9ja3RpbWUpXG4gICAgICAgIC50byh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuZmVlUmF0ZSh0ZXN0RGF0YS5mZWUpO1xuXG4gICAgaXQoJ1Nob3VsZCBjcmVhdGUgZXhwb3J0IHR4IHdpdGggY29ycmVjdCBwcm9wZXJ0aWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3VHhCdWlsZGVyKCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBwcm9wZXJ0aWVzXG4gICAgICBqc29uLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5FeHBvcnQpO1xuICAgICAganNvbi5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBqc29uLm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgICBqc29uLnNvdXJjZUNoYWluLnNob3VsZC5lcXVhbCgnQycpO1xuICAgICAganNvbi5kZXN0aW5hdGlvbkNoYWluLnNob3VsZC5lcXVhbCgnUCcpO1xuXG4gICAgICAvLyBWZXJpZnkgdG90YWwgZmVlIGluY2x1ZGVzIGZpeGVkRmVlIChQLWNoYWluIGltcG9ydCBmZWUpXG4gICAgICBjb25zdCBleHBlY3RlZFRvdGFsRmVlID0gQmlnSW50KHRlc3REYXRhLmZlZSkgKyBCaWdJbnQoRklYRURfRkVFKTtcbiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBCaWdJbnQoanNvbi5pbnB1dHNbMF0udmFsdWUpO1xuICAgICAgY29uc3Qgb3V0cHV0VmFsdWUgPSBCaWdJbnQoanNvbi5vdXRwdXRzWzBdLnZhbHVlKTtcbiAgICAgIGNvbnN0IGFjdHVhbEZlZSA9IGlucHV0VmFsdWUgLSBvdXRwdXRWYWx1ZTtcbiAgICAgIGFjdHVhbEZlZS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRUb3RhbEZlZSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gY2FuIGJlIHNlcmlhbGl6ZWQgYW5kIGhhcyB2YWxpZCBmb3JtYXRcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICByYXdUeC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDEwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlY292ZXIgZXhwb3J0IHR4IGZyb20gcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKS5mcm9tKHRlc3REYXRhLnVuc2lnbmVkSGV4KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS51bnNpZ25lZEhleCk7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwodGVzdERhdGEudHhoYXNoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVjb3ZlciBzaWduZWQgZXhwb3J0IGZyb20gc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbSh0ZXN0RGF0YS5zaWduZWRIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5zaWduZWRIZXgpO1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4aGFzaCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHNpZ24gYSBleHBvcnQgdHggZnJvbSBzY3JhdGNoIHdpdGggY29ycmVjdCBwcm9wZXJ0aWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3VHhCdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgLy8gVmVyaWZ5IHNpZ25hdHVyZSBleGlzdHNcbiAgICAgIHR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgdHguc2lnbmF0dXJlWzBdLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBwcm9wZXJ0aWVzIGFmdGVyIHNpZ25pbmdcbiAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGpzb24udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICBqc29uLm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGZ1bGwgc2lnbiBhIGV4cG9ydCB0eCBmcm9tIHVuc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbSh0ZXN0RGF0YS51bnNpZ25lZEhleCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwodGVzdERhdGEuc2lnbmVkSGV4KTtcbiAgICAgIHR4LmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eGhhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ0tleSBjYW5ub3Qgc2lnbiB0aGUgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5mcm9tKHRlc3REYXRhLnVuc2lnbmVkSGV4KVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcml2YXRlS2V5IH0pO1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC5idWlsZCgpXG4gICAgICAgIC50aGVuKCgpID0+IGFzc2VydC5mYWlsKCdpdCBjYW4gc2lnbicpKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5iZS5lcXVhbCgnUHJpdmF0ZSBrZXkgY2Fubm90IHNpZ24gdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBMEQ7QUFDMUQsbURBQThFO0FBQzlFLCtDQUFpQztBQUNqQywwRkFBdUY7QUFDdkYseUVBQW9GO0FBRXBGLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUkscURBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDaEQsTUFBTSxTQUFTLEdBQUksVUFBVSxDQUFDLE9BQXdCLENBQUMsS0FBSyxDQUFDO0lBRTdELFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtRQUNuQyxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztZQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDakIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDLEVBQUUsSUFBSSxnQ0FBcUIsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtRQUNwQyxFQUFFLENBQUMsa0RBQWtELEVBQUU7WUFDckQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFNUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM5QixNQUFNLENBQUMs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QztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RFLE1BQU0sZUFBZSxHQUNuQiwwckJBQTByQixDQUFDO1lBQzdyQixNQUFNLFNBQVMsR0FBRyxJQUFJLHFEQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUYsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMsIEZsYXJlTmV0d29yayB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgRVhQT1JUX0lOX0MgYXMgdGVzdERhdGEgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHJhbnNhY3Rpb25EYXRhL2V4cG9ydEluQyc7XG5cbmRlc2NyaWJlKCdFeHBvcnRJbkNUeEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcbiAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRFeHBvcnRJbkNCdWlsZGVyKCk7XG4gIGNvbnN0IEZJWEVEX0ZFRSA9IChjb2luQ29uZmlnLm5ldHdvcmsgYXMgRmxhcmVOZXR3b3JrKS50eEZlZTtcblxuICBkZXNjcmliZSgndXR4b3MgRXhwb3J0SW5DVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB1dHhvcyBhcmUgdXNlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudXR4b3MoW10pO1xuICAgICAgfSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndXR4b3MgYXJlIG5vdCByZXF1aXJlZCBpbiBFeHBvcnQgVHggaW4gQy1DaGFpbicpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Ftb3VudCBFeHBvcnRJbkNUeEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgdmFsaWQgYW1vdW50cyBpbiBkaWZmZXJlbnQgZm9ybWF0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQW1vdW50cyA9IFtCaWdJbnQoMTAwMCksICcxMDAwJ107XG5cbiAgICAgIHZhbGlkQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgaW52YWxpZCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFtb3VudHMgPSBbJzAnLCAnLTEnXTtcblxuICAgICAgaW52YWxpZEFtb3VudHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgfSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbm9uY2UgRXhwb3J0SW5DVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IHZhbGlkIG5vbmNlcyBpbiBkaWZmZXJlbnQgZm9ybWF0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkTm9uY2VzID0gWycxJywgMSwgMF07XG5cbiAgICAgIHZhbGlkTm9uY2VzLmZvckVhY2goKG5vbmNlKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5ub25jZShub25jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBuZWdhdGl2ZSBub25jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UoJy0xJyk7XG4gICAgICB9LCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdOb25jZSBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiAwJykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndG8gRXhwb3J0SW5DVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RXhwb3J0SW5DQnVpbGRlcigpO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgbXVsdGlwbGUgUC1hZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwQWRkcmVzc2VzID0gdGVzdERhdGEucEFkZHJlc3NlcztcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIHR4QnVpbGRlci50byhwQWRkcmVzc2VzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgc2luZ2xlIFAtYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudG8odGVzdERhdGEucEFkZHJlc3Nlc1swXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IHRpbGRlLXNlcGFyYXRlZCBQLWFkZHJlc3NlcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwQWRkcmVzc2VzID0gdGVzdERhdGEucEFkZHJlc3Nlcy5qb2luKCd+Jyk7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICB0eEJ1aWxkZXIudG8ocEFkZHJlc3Nlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCBhIGV4cG9ydCB0eG4gZnJvbSBDIHRvIFAnLCAoKSA9PiB7XG4gICAgY29uc3QgbmV3VHhCdWlsZGVyID0gKCkgPT5cbiAgICAgIGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluQ0J1aWxkZXIoKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5jSGV4QWRkcmVzcylcbiAgICAgICAgLm5vbmNlKHRlc3REYXRhLm5vbmNlKVxuICAgICAgICAuYW1vdW50KHRlc3REYXRhLmFtb3VudClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLnRvKHRlc3REYXRhLnBBZGRyZXNzZXMpXG4gICAgICAgIC5mZWVSYXRlKHRlc3REYXRhLmZlZSk7XG5cbiAgICBpdCgnU2hvdWxkIGNyZWF0ZSBleHBvcnQgdHggd2l0aCBjb3JyZWN0IHByb3BlcnRpZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXdUeEJ1aWxkZXIoKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIHByb3BlcnRpZXNcbiAgICAgIGpzb24udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICBqc29uLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIGpzb24ub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwodGVzdERhdGEuYW1vdW50KTtcbiAgICAgIGpzb24uc291cmNlQ2hhaW4uc2hvdWxkLmVxdWFsKCdDJyk7XG4gICAgICBqc29uLmRlc3RpbmF0aW9uQ2hhaW4uc2hvdWxkLmVxdWFsKCdQJyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0b3RhbCBmZWUgaW5jbHVkZXMgZml4ZWRGZWUgKFAtY2hhaW4gaW1wb3J0IGZlZSlcbiAgICAgIGNvbnN0IGV4cGVjdGVkVG90YWxGZWUgPSBCaWdJbnQodGVzdERhdGEuZmVlKSArIEJpZ0ludChGSVhFRF9GRUUpO1xuICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IEJpZ0ludChqc29uLmlucHV0c1swXS52YWx1ZSk7XG4gICAgICBjb25zdCBvdXRwdXRWYWx1ZSA9IEJpZ0ludChqc29uLm91dHB1dHNbMF0udmFsdWUpO1xuICAgICAgY29uc3QgYWN0dWFsRmVlID0gaW5wdXRWYWx1ZSAtIG91dHB1dFZhbHVlO1xuICAgICAgYWN0dWFsRmVlLnNob3VsZC5lcXVhbChleHBlY3RlZFRvdGFsRmVlKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoZSB0cmFuc2FjdGlvbiBjYW4gYmUgc2VyaWFsaXplZCBhbmQgaGFzIHZhbGlkIGZvcm1hdFxuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcbiAgICAgIHJhd1R4Lmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMTAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVjb3ZlciBleHBvcnQgdHggZnJvbSByYXcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpLmZyb20odGVzdERhdGEudW5zaWduZWRIZXgpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKHRlc3REYXRhLnVuc2lnbmVkSGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVjb3ZlciBzaWduZWQgZXhwb3J0IGZyb20gc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbSh0ZXN0RGF0YS5zaWduZWRIZXgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHJhd1R4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5zaWduZWRIZXgpO1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnR4aGFzaCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHNpZ24gYSBleHBvcnQgdHggZnJvbSBzY3JhdGNoIHdpdGggY29ycmVjdCBwcm9wZXJ0aWVzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3VHhCdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgLy8gVmVyaWZ5IHNpZ25hdHVyZSBleGlzdHNcbiAgICAgIHR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgdHguc2lnbmF0dXJlWzBdLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBwcm9wZXJ0aWVzIGFmdGVyIHNpZ25pbmdcbiAgICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGpzb24udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkV4cG9ydCk7XG4gICAgICBqc29uLm91dHB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmFtb3VudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGZ1bGwgc2lnbiBhIGV4cG9ydCB0eCBmcm9tIHVuc2lnbmVkIHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbSh0ZXN0RGF0YS51bnNpZ25lZEhleCk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICByYXdUeC5zaG91bGQuZXF1YWwodGVzdERhdGEuc2lnbmVkSGV4KTtcbiAgICAgIHR4LmlkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS50eGhhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ0tleSBjYW5ub3Qgc2lnbiB0aGUgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5mcm9tKHRlc3REYXRhLnVuc2lnbmVkSGV4KVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcml2YXRlS2V5IH0pO1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC5idWlsZCgpXG4gICAgICAgIC50aGVuKCgpID0+IGFzc2VydC5mYWlsKCdpdCBjYW4gc2lnbicpKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5iZS5lcXVhbCgnUHJpdmF0ZSBrZXkgY2Fubm90IHNpZ24gdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgb24tY2hhaW4gdHggaWQgZm9yIHNpZ25lZCBDLWNoYWluIGV4cG9ydCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNpZ25lZEV4cG9ydEhleCA9XG4gICAgICAgICcweDAwMDAwMDAwMDAwMTAwMDAwMDcyNzhkYjVjMzBiZWQwNGMwNWNlMjA5MTc5ODEyODUwYmJiM2ZlNmQ0NmQ3ZWVmMzc0NGQ4MTRjMGRhNTU1MjQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTE3ZGJkMTFiOWRkMWM5YmUzMzczNTNkYjdjMTRmOWZiMzY2MmU1YjUwMDAwMDAwMDAyZmYzZDE2NTg3MzRmOTRhZjg3MWMzZDEzMWI1NjEzMWI2ZmI3YTAyOTFlYWNhZGQyNjFlNjlkZmI0MmE5Y2RmNmY3ZmRkZDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMTU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwNzAwMDAwMDAwMDJmYWYwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzMzMjliZTdkMDFjZDNlYmFhZTY2NTRkNzMyN2RkOWYxN2EyZTE1ODE3ZTkxOGE1ZTgwODNhZTRjOWYyZjBlZDc3MDU1YzI0YmYzNjY1MDAxYzczMjQ0MzdjOTZjN2M4YTZhMTUyZGEyMzg1YzFkYjVjM2FiMWY5MTAwMDAwMDAxMDAwMDAwMDkwMDAwMDAwMThkMWFjNzlkMmUyNmQxYzk2ODljYTkzYjNiMTkxYzA3N2RjZWQyZjIwMWJkZGExMzJlNzRjM2ZjNWFiOWIxMGI2Yzg1ZmQzMThkZDZjMGE5OWIzMjcxNDU5NzdhYzZlYTZmZjU0Y2I4ZTliNzA5M2I2YmJlMzU0NWIzY2MxMjY0MDAnO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKS5mcm9tKHNpZ25lZEV4cG9ydEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKHNpZ25lZEV4cG9ydEhleCk7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwoJzNrWFVzSGl4MWJaUlE5aHFVYzI0Y3A3c1hGaXkyTGJQbjZFaDJIUUNBYU1VaTc1czknKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -153,5 +153,173 @@ describe('Flrp Export In P Tx Builder', () => {
153
153
  err.message.should.be.equal('Private key cannot sign the transaction');
154
154
  });
155
155
  });
156
+ describe('on-chain verified transactions', () => {
157
+ it('should verify on-chain tx id for signed P-chain export', async () => {
158
+ const signedExportHex = '0x0000000000120000007200000000000000000000000000000000000000000000000000000000000000000000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000007000000001ac6e558000000000000000000000001000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f9100000003862ce86ba2e28884e8b83f5d6266d274b33632a1cc213d4c12996037fc21b2020000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd00000005000000001d6c96c60000000100000000a4891dfbd024a53b8e4512427d919910568989b9b4846026ac7bcb8290494c260000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd0000000500000000003ffabc0000000100000000c1fb3b438f8f49e1bb657a59106be9f5f91d2efce5e0259fcbbb9458e271f80d0000000058734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000050000000000400e7000000001000000000000000078db5c30bed04c05ce209179812850bbb3fe6d46d7eef3744d814c0da55524790000000158734f94af871c3d131b56131b6fb7a0291eacadd261e69dfb42a9cdf6f7fddd000000070000000002faf080000000000000000000000002000000033329be7d01cd3ebaae6654d7327dd9f17a2e15817e918a5e8083ae4c9f2f0ed77055c24bf3665001c7324437c96c7c8a6a152da2385c1db5c3ab1f91000000030000000900000001afdf0ac2bdbfb1735081dd859f4d263e587d81ba81c6bd2cb345ee5a66cef4e97a634c740f35ef6ba600796a5add1d91e69a14cfcb22b65e6ae0bcdfbcebfaba000000000900000001afdf0ac2bdbfb1735081dd859f4d263e587d81ba81c6bd2cb345ee5a66cef4e97a634c740f35ef6ba600796a5add1d91e69a14cfcb22b65e6ae0bcdfbcebfaba000000000900000001afdf0ac2bdbfb1735081dd859f4d263e587d81ba81c6bd2cb345ee5a66cef4e97a634c740f35ef6ba600796a5add1d91e69a14cfcb22b65e6ae0bcdfbcebfaba00';
159
+ const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(signedExportHex);
160
+ const tx = await txBuilder.build();
161
+ const rawTx = tx.toBroadcastFormat();
162
+ rawTx.should.equal(signedExportHex);
163
+ tx.id.should.equal('ka8at5CinmpUc6QMVr33dyUJi156LKMdodrJM59kS6EWr3vHg');
164
+ });
165
+ it('should FAIL with unsorted UTXO addresses - demonstrates AddressMap mismatch issue for export in P-chain tx', async () => {
166
+ // This test uses UTXO addresses in UNSORTED order to demonstrate the issue.
167
+ // With unsorted addresses, the current implementation will create AddressMaps incorrectly
168
+ // because it uses sorted addresses, not UTXO address order.
169
+ //
170
+ // Expected: AddressMap should map addresses to signature slots based on UTXO order (sigIndicies)
171
+ // Current (WRONG): AddressMap uses sorted addresses with sequential slots
172
+ //
173
+ // This test WILL FAIL with current implementation because AddressMaps don't match sigIndicies
174
+ // UTXO addresses in UNSORTED order (different from sorted)
175
+ // Sorted would be: [0x12cb... (smallest), 0xa6e0... (middle), 0xc386... (largest)]
176
+ // Unsorted: [0xc386... (largest), 0x12cb... (smallest), 0xa6e0... (middle)]
177
+ const unsortedUtxoAddresses = [
178
+ '0xc386d58d09a9ae77cf1cf07bf1c9de44ebb0c9f3', // Largest (would be index 2 if sorted)
179
+ '0x12cb32eaf92553064db98d271b56cba079ec78f5', // Smallest (would be index 0 if sorted)
180
+ '0xa6e0c1abd0132f70efb77e2274637ff336a29a57', // Middle (would be index 1 if sorted)
181
+ ];
182
+ // Corresponding P-chain addresses (in same order as UTXO)
183
+ const pAddresses = [
184
+ 'P-costwo15msvr27szvhhpmah0c38gcml7vm29xjh7tcek8', // Maps to 0xc386... (UTXO index 0)
185
+ 'P-costwo1zt9n96hey4fsvnde35n3k4kt5pu7c784dzewzd', // Maps to 0x12cb... (UTXO index 1)
186
+ 'P-costwo1cwrdtrgf4xh80ncu7palrjw7gn4mpj0n4dxghh', // Maps to 0xa6e0... (UTXO index 2)
187
+ ];
188
+ // Create UTXO with UNSORTED addresses
189
+ // Amount must cover export amount + fee
190
+ const exportAmount = '50000000';
191
+ const fee = '1261000';
192
+ const utxoAmount = (BigInt(exportAmount) + BigInt(fee)).toString(); // amount + fee
193
+ const utxo = {
194
+ outputID: 0,
195
+ amount: utxoAmount,
196
+ txid: 'zstyYq5riDKYDSR3fUYKKkuXKJ1aJCe8WNrXKqEBJD4CGwzFw',
197
+ outputidx: '0',
198
+ addresses: unsortedUtxoAddresses, // UNSORTED order
199
+ threshold: 2,
200
+ };
201
+ // Build transaction
202
+ const txBuilder = factory
203
+ .getExportInPBuilder()
204
+ .threshold(2)
205
+ .locktime(0)
206
+ .fromPubKey(pAddresses)
207
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
208
+ .amount(exportAmount)
209
+ .fee(fee)
210
+ .utxos([utxo]);
211
+ // Build unsigned transaction
212
+ const unsignedTx = await txBuilder.build();
213
+ const unsignedHex = unsignedTx.toBroadcastFormat();
214
+ // Parse it back to inspect AddressMaps and sigIndicies
215
+ const parsedBuilder = factory.from(unsignedHex);
216
+ const parsedTx = await parsedBuilder.build();
217
+ const flareTx = parsedTx._flareTransaction;
218
+ // Get the input to check sigIndicies
219
+ const exportTx = flareTx.tx;
220
+ const input = exportTx.baseTx.inputs[0];
221
+ const transferInput = input.input;
222
+ const sigIndicies = transferInput.sigIndicies();
223
+ // sigIndicies tells us: sigIndicies[slotIndex] = utxoAddressIndex
224
+ // For threshold=2, we need signatures for first 2 addresses in UTXO order
225
+ // UTXO order: [0xc386... (index 0), 0x12cb... (index 1), 0xa6e0... (index 2)]
226
+ // So sigIndicies should be [0, 1] meaning: slot 0 = UTXO index 0, slot 1 = UTXO index 1
227
+ // Verify sigIndicies are [0, 1] (first 2 addresses in UTXO order, NOT sorted order)
228
+ sigIndicies.length.should.equal(2);
229
+ sigIndicies[0].should.equal(0, 'First signature slot should be UTXO address index 0 (0xc386...)');
230
+ sigIndicies[1].should.equal(1, 'Second signature slot should be UTXO address index 1 (0x12cb...)');
231
+ // The critical test: Verify that signature slots have embedded addresses based on UTXO order
232
+ // With unsorted UTXO addresses, this will FAIL if AddressMaps don't match UTXO order
233
+ //
234
+ // sigIndicies tells us: sigIndicies[slotIndex] = utxoAddressIndex
235
+ // For threshold=2, we need signatures for first 2 addresses in UTXO order
236
+ // UTXO order: [0xc386... (index 0), 0x12cb... (index 1), 0xa6e0... (index 2)]
237
+ // So sigIndicies should be [0, 1] meaning: slot 0 = UTXO index 0, slot 1 = UTXO index 1
238
+ // Parse the credential to see which slots have which embedded addresses
239
+ const credential = flareTx.credentials[0];
240
+ const signatures = credential.getSignatures();
241
+ // Helper function to check if signature has embedded address (same logic as transaction.ts)
242
+ const testUtils2 = require('../../../src/lib/utils').default;
243
+ const isEmptySignature = (signature) => {
244
+ return !!signature && testUtils2.removeHexPrefix(signature).startsWith('0'.repeat(90));
245
+ };
246
+ const hasEmbeddedAddress = (signature) => {
247
+ if (!isEmptySignature(signature))
248
+ return false;
249
+ const cleanSig = testUtils2.removeHexPrefix(signature);
250
+ if (cleanSig.length < 130)
251
+ return false;
252
+ const embeddedPart = cleanSig.substring(90, 130);
253
+ // Check if embedded part is not all zeros
254
+ return embeddedPart !== '0'.repeat(40);
255
+ };
256
+ // Extract embedded addresses from signature slots
257
+ const embeddedAddresses = [];
258
+ signatures.forEach((sig, slotIndex) => {
259
+ if (hasEmbeddedAddress(sig)) {
260
+ // Extract embedded address (after position 90, 40 chars = 20 bytes)
261
+ const cleanSig = testUtils2.removeHexPrefix(sig);
262
+ const embeddedAddr = cleanSig.substring(90, 130).toLowerCase();
263
+ embeddedAddresses[slotIndex] = '0x' + embeddedAddr;
264
+ }
265
+ });
266
+ // Verify: Credentials only embed ONE address (user/recovery), not both
267
+ // The embedded address should be based on addressesIndex logic, not sorted order
268
+ //
269
+ // Compute addressesIndex to determine expected signature order
270
+ const utxoAddressBytes = unsortedUtxoAddresses.map((addr) => testUtils2.parseAddress(addr));
271
+ const pAddressBytes = pAddresses.map((addr) => testUtils2.parseAddress(addr));
272
+ const addressesIndex = [];
273
+ pAddressBytes.forEach((pAddr) => {
274
+ const utxoIndex = utxoAddressBytes.findIndex((uAddr) => Buffer.compare(Buffer.from(uAddr), Buffer.from(pAddr)) === 0);
275
+ addressesIndex.push(utxoIndex);
276
+ });
277
+ // firstIndex = 0 (user), bitgoIndex = 1
278
+ const firstIndex = 0;
279
+ const bitgoIndex = 1;
280
+ // Determine expected signature order based on addressesIndex
281
+ const userComesFirst = addressesIndex[bitgoIndex] > addressesIndex[firstIndex];
282
+ // Expected credential structure:
283
+ // - If user comes first: [userAddress, zeros]
284
+ // - If bitgo comes first: [zeros, userAddress]
285
+ const userAddressHex = Buffer.from(pAddressBytes[firstIndex]).toString('hex').toLowerCase();
286
+ const expectedUserAddr = '0x' + userAddressHex;
287
+ if (userComesFirst) {
288
+ // Expected: [userAddress, zeros]
289
+ // Slot 0 should have user address (pAddr0 = 0xc386... = UTXO index 0)
290
+ if (embeddedAddresses[0]) {
291
+ embeddedAddresses[0]
292
+ .toLowerCase()
293
+ .should.equal(expectedUserAddr, `Slot 0 should have user address (${expectedUserAddr}) because user comes first in UTXO order`);
294
+ }
295
+ else {
296
+ throw new Error(`Slot 0 should have embedded user address, but is empty`);
297
+ }
298
+ // Slot 1 should be zeros (no embedded address)
299
+ if (embeddedAddresses[1]) {
300
+ throw new Error(`Slot 1 should be zeros, but has embedded address: ${embeddedAddresses[1]}`);
301
+ }
302
+ }
303
+ else {
304
+ // Expected: [zeros, userAddress]
305
+ // Slot 0 should be zeros
306
+ if (embeddedAddresses[0]) {
307
+ throw new Error(`Slot 0 should be zeros, but has embedded address: ${embeddedAddresses[0]}`);
308
+ }
309
+ // Slot 1 should have user address
310
+ if (embeddedAddresses[1]) {
311
+ embeddedAddresses[1]
312
+ .toLowerCase()
313
+ .should.equal(expectedUserAddr, `Slot 1 should have user address (${expectedUserAddr}) because bitgo comes first in UTXO order`);
314
+ }
315
+ else {
316
+ throw new Error(`Slot 1 should have embedded user address, but is empty`);
317
+ }
318
+ }
319
+ // The key verification: AddressMaps should match the credential order
320
+ // With the fix, AddressMaps are created using the same addressesIndex logic as credentials
321
+ // This ensures signing works correctly even with unsorted UTXO addresses
322
+ });
323
+ });
156
324
  });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsa0JBQWdCO0FBQ2hCLHlFQUltRDtBQUNuRCwwQ0FBMEY7QUFDMUYsaURBQTBEO0FBQzFELDBFQUE4QztBQUU5QyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUxRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixNQUFNLFNBQVMsR0FBSSxVQUFVLENBQUMsT0FBd0IsQ0FBQyxLQUFLLENBQUM7UUFFN0QsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtZQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNoRCw0REFBNEQ7WUFDNUQsTUFBTSxXQUFXLEdBQUksU0FBaUIsQ0FBQyxXQUFXLENBQUM7WUFDbkQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRSxrRUFBa0U7WUFDbEUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsVUFBVTtZQUN0QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtZ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QUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9GLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsdUJBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELFNBQVM7YUFDTixLQUFLLEVBQUU7YUFDUCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDdEMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDYixHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHtcbiAgRVhQT1JUX0lOX1AgYXMgdGVzdERhdGEsXG4gIEVYUE9SVF9JTl9QX1RXT19VVFhPUyBhcyB0d29VdHhvVGVzdERhdGEsXG4gIEVYUE9SVF9JTl9QX05PX0NIQU5HRSBhcyBub0NoYW5nZVRlc3REYXRhLFxufSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHJhbnNhY3Rpb25EYXRhL2V4cG9ydEluUCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBEZWNvZGVkVXR4b09iaiwgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGNvaW5zLCBGbGFyZU5ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBzaWduRmxvd1Rlc3QgZnJvbSAnLi9zaWduRmxvd1Rlc3RTdWl0JztcblxuZGVzY3JpYmUoJ0ZscnAgRXhwb3J0IEluIFAgVHggQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndGZscnAnKTtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuXG4gIGRlc2NyaWJlKCdkZWZhdWx0IGZlZScsICgpID0+IHtcbiAgICBjb25zdCBGSVhFRF9GRUUgPSAoY29pbkNvbmZpZy5uZXR3b3JrIGFzIEZsYXJlTmV0d29yaykudHhGZWU7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBmaXhlZEZlZSAoMTAwMDAwMCkgYnkgZGVmYXVsdCBpbiBjb25zdHJ1Y3RvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0RXhwb3J0SW5QQnVpbGRlcigpO1xuICAgICAgLy8gVGhlIGZpeGVkRmVlIHNob3VsZCBiZSBzZXQgZnJvbSBuZXR3b3JrLnR4RmVlID0gJzEwMDAwMDAnXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9ICh0eEJ1aWxkZXIgYXMgYW55KS50cmFuc2FjdGlvbjtcbiAgICAgIHRyYW5zYWN0aW9uLl9mZWUuZmVlLnNob3VsZC5lcXVhbChGSVhFRF9GRUUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgZGVmYXVsdCBmaXhlZEZlZSB3aGVuIGZlZSBpcyBub3QgZXhwbGljaXRseSBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgYSBVVFhPIHdpdGggZW5vdWdoIGJhbGFuY2UgdG8gY292ZXIgYW1vdW50ICsgZGVmYXVsdCBmZWVcbiAgICAgIGNvbnN0IGFtb3VudCA9ICc1MDAwMDAwMDAnOyAvLyAwLjUgRkxSXG4gICAgICBjb25zdCB1dHhvQW1vdW50ID0gKEJpZ0ludChhbW91bnQpICsgQmlnSW50KEZJWEVEX0ZFRSkpLnRvU3RyaW5nKCk7IC8vIGFtb3VudCArIGZpeGVkRmVlXG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLmxvY2t0aW1lKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5zb3VyY2VDaGFpbklkKVxuICAgICAgICAvLyBOT1RFOiAuZmVlKCkgaXMgTk9UIGNhbGxlZCAtIHNob3VsZCB1c2UgZGVmYXVsdCBmaXhlZEZlZVxuICAgICAgICAudXR4b3MoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG91dHB1dElEOiAwLFxuICAgICAgICAgICAgYW1vdW50OiB1dHhvQW1vdW50LFxuICAgICAgICAgICAgdHhpZDogJzIxaGNENjROOVF6ZGF5UGpoS0xzQlFCYThGeVhjc0pHTlN0QlozdkNSZENDRXNMcnUyJyxcbiAgICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgICAgYWRkcmVzc2VzOiB0ZXN0RGF0YS5vdXRwdXRzWzBdLmFkZHJlc3NlcyxcbiAgICAgICAgICAgIHRocmVzaG9sZDogdGVzdERhdGEudGhyZXNob2xkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgZmVlIGluIHRoZSBidWlsdCB0cmFuc2FjdGlvbiBlcXVhbHMgdGhlIGZpeGVkRmVlXG4gICAgICB0eC5mZWUuZmVlLnNob3VsZC5lcXVhbChGSVhFRF9GRUUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsaWRhdGUgdHhCdWlsZGVyIGZpZWxkcycsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEV4cG9ydEluUEJ1aWxkZXIoKTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgYW1vdW50IGxvdyB0aGFuIHplcm8nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmFtb3VudCgnLTEnKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnQW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnXG4gICAgICApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB0YXJnZXQgY2hhaW4gaWQgbGVuZ3RoIGluY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuZXh0ZXJuYWxDaGFpbklkKEJ1ZmZlci5mcm9tKHRlc3REYXRhLklOVkFMSURfQ0hBSU5fSUQuc2xpY2UoMikpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnQ2hhaW4gaWQgYXJlIDMyIGJ5dGUgc2l6ZSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdGFyZ2V0IGNoYWluIGlkIG5vdCBhIHZhbGlkIGJhc2U1OCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5JTlZBTElEX0NIQUlOX0lEKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnTm9uLWJhc2U1OCBjaGFyYWN0ZXInXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRhcmdldCBjaGFpbiBpZCBjYjU4IGludmFsaWQgY2hlY2tzdW0nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5WQUxJRF9DX0NIQUlOX0lELnNsaWNlKDIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnSW52YWxpZCBjaGVja3N1bSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmFsaWRhdGUgVXR4b3MgZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci52YWxpZGF0ZVV0eG9zKFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVVRYT3MgYXJyYXkgY2Fubm90IGJlIGVtcHR5J1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2YWxpZGF0ZSBVdHhvcyB3aXRob3V0IGFtb3VudCBmaWVsZCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIudmFsaWRhdGVVdHhvcyhbeyBvdXRwdXRJRDogJycgfSBhcyBhbnkgYXMgRGVjb2RlZFV0eG9PYmpdKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVVRYTyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkOiBhbW91bnQnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBzaWduRmxvd1Rlc3Qoe1xuICAgIHRyYW5zYWN0aW9uVHlwZTogJ0V4cG9ydCBQMkMgd2l0aCBjaGFuZ2VvdXRwdXQnLFxuICAgIG5ld1R4RmFjdG9yeTogKCkgPT4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKSxcbiAgICBuZXdUeEJ1aWxkZXI6ICgpID0+XG4gICAgICBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmFtb3VudCh0ZXN0RGF0YS5hbW91bnQpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQodGVzdERhdGEuc291cmNlQ2hhaW5JZClcbiAgICAgICAgLmZlZSh0ZXN0RGF0YS5mZWUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5vdXRwdXRzKSxcbiAgICB1bnNpZ25lZFR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZEhleCxcbiAgICBoYWxmU2lnbmVkVHhIZXg6IHRlc3REYXRhLmhhbGZTaWdudHhIZXgsXG4gICAgZnVsbFNpZ25lZFR4SGV4OiB0ZXN0RGF0YS5mdWxsU2lnbnR4SGV4LFxuICAgIHByaXZhdGVLZXk6IHtcbiAgICAgIHBydjE6IHRlc3REYXRhLnByaXZhdGVLZXlzWzBdLFxuICAgICAgcHJ2MjogdGVzdERhdGEucHJpdmF0ZUtleXNbMV0sXG4gICAgfSxcbiAgICB0eEhhc2g6IHRlc3REYXRhLnR4aGFzaCxcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdFeHBvcnQgUDJDIHdpdGggMiBVVFhPcycsXG4gICAgbmV3VHhGYWN0b3J5OiAoKSA9PiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpLFxuICAgIG5ld1R4QnVpbGRlcjogKCkgPT5cbiAgICAgIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHR3b1V0eG9UZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0d29VdHhvVGVzdERhdGEubG9ja3RpbWUpXG4gICAgICAgIC5mcm9tUHViS2V5KHR3b1V0eG9UZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KHR3b1V0eG9UZXN0RGF0YS5hbW91bnQpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQodHdvVXR4b1Rlc3REYXRhLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5mZWUodHdvVXR4b1Rlc3REYXRhLmZlZSlcbiAgICAgICAgLnV0eG9zKHR3b1V0eG9UZXN0RGF0YS5vdXRwdXRzKSxcbiAgICB1bnNpZ25lZFR4SGV4OiB0d29VdHhvVGVzdERhdGEudW5zaWduZWRIZXgsXG4gICAgaGFsZlNpZ25lZFR4SGV4OiB0d29VdHhvVGVzdERhdGEuaGFsZlNpZ250eEhleCxcbiAgICBmdWxsU2lnbmVkVHhIZXg6IHR3b1V0eG9UZXN0RGF0YS5mdWxsU2lnbnR4SGV4LFxuICAgIHByaXZhdGVLZXk6IHtcbiAgICAgIHBydjE6IHR3b1V0eG9UZXN0RGF0YS5wcml2YXRlS2V5c1swXSxcbiAgICAgIHBydjI6IHR3b1V0eG9UZXN0RGF0YS5wcml2YXRlS2V5c1sxXSxcbiAgICB9LFxuICAgIHR4SGFzaDogdHdvVXR4b1Rlc3REYXRhLnR4aGFzaCxcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdFeHBvcnQgUDJDIHdpdGggbm8gY2hhbmdlIG91dHB1dCcsXG4gICAgbmV3VHhGYWN0b3J5OiAoKSA9PiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpLFxuICAgIG5ld1R4QnVpbGRlcjogKCkgPT5cbiAgICAgIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKG5vQ2hhbmdlVGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUobm9DaGFuZ2VUZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkobm9DaGFuZ2VUZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KG5vQ2hhbmdlVGVzdERhdGEuYW1vdW50KVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKG5vQ2hhbmdlVGVzdERhdGEuc291cmNlQ2hhaW5JZClcbiAgICAgICAgLmZlZShub0NoYW5nZVRlc3REYXRhLmZlZSlcbiAgICAgICAgLnV0eG9zKG5vQ2hhbmdlVGVzdERhdGEub3V0cHV0cyksXG4gICAgdW5zaWduZWRUeEhleDogbm9DaGFuZ2VUZXN0RGF0YS51bnNpZ25lZEhleCxcbiAgICBoYWxmU2lnbmVkVHhIZXg6IG5vQ2hhbmdlVGVzdERhdGEuaGFsZlNpZ250eEhleCxcbiAgICBmdWxsU2lnbmVkVHhIZXg6IG5vQ2hhbmdlVGVzdERhdGEuZnVsbFNpZ250eEhleCxcbiAgICBwcml2YXRlS2V5OiB7XG4gICAgICBwcnYxOiBub0NoYW5nZVRlc3REYXRhLnByaXZhdGVLZXlzWzBdLFxuICAgICAgcHJ2Mjogbm9DaGFuZ2VUZXN0RGF0YS5wcml2YXRlS2V5c1sxXSxcbiAgICB9LFxuICAgIHR4SGFzaDogbm9DaGFuZ2VUZXN0RGF0YS50eGhhc2gsXG4gIH0pO1xuXG4gIGl0KCdTaG91bGQgZnVsbCBzaWduIGEgZXhwb3J0IHR4IGZyb20gdW5zaWduZWQgcmF3IHR4JywgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbSh0ZXN0RGF0YS51bnNpZ25lZEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnByaXZhdGVLZXlzWzBdIH0pO1xuICAgIHR4QnVpbGRlclxuICAgICAgLmJ1aWxkKClcbiAgICAgIC50aGVuKCgpID0+IGFzc2VydC5mYWlsKCdpdCBjYW4gc2lnbicpKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLmJlLmVxdWFsKCdQcml2YXRlIGtleSBjYW5ub3Qgc2lnbiB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsa0JBQWdCO0FBQ2hCLHlFQUltRDtBQUNuRCwwQ0FBMEY7QUFDMUYsaURBQTBEO0FBQzFELDBFQUE4QztBQUU5QyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUxRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixNQUFNLFNBQVMsR0FBSSxVQUFVLENBQUMsT0FBd0IsQ0FBQyxLQUFLLENBQUM7UUFFN0QsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtZQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNoRCw0REFBNEQ7WUFDNUQsTUFBTSxXQUFXLEdBQUksU0FBaUIsQ0FBQyxXQUFXLENBQUM7WUFDbkQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxRSxrRUFBa0U7WUFDbEUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsVUFBVTtZQUN0QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtZ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QyxFQUFFLENBQUMsQ0FBQztnQkFDL0YsQ0FBQztnQkFDRCxrQ0FBa0M7Z0JBQ2xDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO3lCQUNqQixXQUFXLEVBQUU7eUJBQ2IsTUFBTSxDQUFDLEtBQUssQ0FDWCxnQkFBZ0IsRUFDaEIsb0NBQW9DLGdCQUFnQiwyQ0FBMkMsQ0FDaEcsQ0FBQztnQkFDTixDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO1lBQ0gsQ0FBQztZQUVELHNFQUFzRTtZQUN0RSwyRkFBMkY7WUFDM0YseUVBQXlFO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7XG4gIEVYUE9SVF9JTl9QIGFzIHRlc3REYXRhLFxuICBFWFBPUlRfSU5fUF9UV09fVVRYT1MgYXMgdHdvVXR4b1Rlc3REYXRhLFxuICBFWFBPUlRfSU5fUF9OT19DSEFOR0UgYXMgbm9DaGFuZ2VUZXN0RGF0YSxcbn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3RyYW5zYWN0aW9uRGF0YS9leHBvcnRJblAnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgRGVjb2RlZFV0eG9PYmosIFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBjb2lucywgRmxhcmVOZXR3b3JrIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgc2lnbkZsb3dUZXN0IGZyb20gJy4vc2lnbkZsb3dUZXN0U3VpdCc7XG5cbmRlc2NyaWJlKCdGbHJwIEV4cG9ydCBJbiBQIFR4IEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICBkZXNjcmliZSgnZGVmYXVsdCBmZWUnLCAoKSA9PiB7XG4gICAgY29uc3QgRklYRURfRkVFID0gKGNvaW5Db25maWcubmV0d29yayBhcyBGbGFyZU5ldHdvcmspLnR4RmVlO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgZml4ZWRGZWUgKDEwMDAwMDApIGJ5IGRlZmF1bHQgaW4gY29uc3RydWN0b3InLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEV4cG9ydEluUEJ1aWxkZXIoKTtcbiAgICAgIC8vIFRoZSBmaXhlZEZlZSBzaG91bGQgYmUgc2V0IGZyb20gbmV0d29yay50eEZlZSA9ICcxMDAwMDAwJ1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSAodHhCdWlsZGVyIGFzIGFueSkudHJhbnNhY3Rpb247XG4gICAgICB0cmFuc2FjdGlvbi5fZmVlLmZlZS5zaG91bGQuZXF1YWwoRklYRURfRkVFKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGRlZmF1bHQgZml4ZWRGZWUgd2hlbiBmZWUgaXMgbm90IGV4cGxpY2l0bHkgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIGEgVVRYTyB3aXRoIGVub3VnaCBiYWxhbmNlIHRvIGNvdmVyIGFtb3VudCArIGRlZmF1bHQgZmVlXG4gICAgICBjb25zdCBhbW91bnQgPSAnNTAwMDAwMDAwJzsgLy8gMC41IEZMUlxuICAgICAgY29uc3QgdXR4b0Ftb3VudCA9IChCaWdJbnQoYW1vdW50KSArIEJpZ0ludChGSVhFRF9GRUUpKS50b1N0cmluZygpOyAvLyBhbW91bnQgKyBmaXhlZEZlZVxuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQodGVzdERhdGEuc291cmNlQ2hhaW5JZClcbiAgICAgICAgLy8gTk9URTogLmZlZSgpIGlzIE5PVCBjYWxsZWQgLSBzaG91bGQgdXNlIGRlZmF1bHQgZml4ZWRGZWVcbiAgICAgICAgLnV0eG9zKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvdXRwdXRJRDogMCxcbiAgICAgICAgICAgIGFtb3VudDogdXR4b0Ftb3VudCxcbiAgICAgICAgICAgIHR4aWQ6ICcyMWhjRDY0TjlRemRheVBqaEtMc0JRQmE4RnlYY3NKR05TdEJaM3ZDUmRDQ0VzTHJ1MicsXG4gICAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICAgIGFkZHJlc3NlczogdGVzdERhdGEub3V0cHV0c1swXS5hZGRyZXNzZXMsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IHRlc3REYXRhLnRocmVzaG9sZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIGZlZSBpbiB0aGUgYnVpbHQgdHJhbnNhY3Rpb24gZXF1YWxzIHRoZSBmaXhlZEZlZVxuICAgICAgdHguZmVlLmZlZS5zaG91bGQuZXF1YWwoRklYRURfRkVFKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlIHR4QnVpbGRlciBmaWVsZHMnLCAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRFeHBvcnRJblBCdWlsZGVyKCk7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGFtb3VudCBsb3cgdGhhbiB6ZXJvJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5hbW91bnQoJy0xJyk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ0Ftb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJ1xuICAgICAgKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdGFyZ2V0IGNoYWluIGlkIGxlbmd0aCBpbmNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZChCdWZmZXIuZnJvbSh0ZXN0RGF0YS5JTlZBTElEX0NIQUlOX0lELnNsaWNlKDIpKSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ0NoYWluIGlkIGFyZSAzMiBieXRlIHNpemUnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRhcmdldCBjaGFpbiBpZCBub3QgYSB2YWxpZCBiYXNlNTggc3RyaW5nJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5leHRlcm5hbENoYWluSWQodGVzdERhdGEuSU5WQUxJRF9DSEFJTl9JRCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ05vbi1iYXNlNTggY2hhcmFjdGVyJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0YXJnZXQgY2hhaW4gaWQgY2I1OCBpbnZhbGlkIGNoZWNrc3VtJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5leHRlcm5hbENoYWluSWQodGVzdERhdGEuVkFMSURfQ19DSEFJTl9JRC5zbGljZSgyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ0ludmFsaWQgY2hlY2tzdW0nXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHZhbGlkYXRlIFV0eG9zIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIudmFsaWRhdGVVdHhvcyhbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1VUWE9zIGFycmF5IGNhbm5vdCBiZSBlbXB0eSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmFsaWRhdGUgVXR4b3Mgd2l0aG91dCBhbW91bnQgZmllbGQnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLnZhbGlkYXRlVXR4b3MoW3sgb3V0cHV0SUQ6ICcnIH0gYXMgYW55IGFzIERlY29kZWRVdHhvT2JqXSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1VUWE8gbWlzc2luZyByZXF1aXJlZCBmaWVsZDogYW1vdW50J1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdFeHBvcnQgUDJDIHdpdGggY2hhbmdlb3V0cHV0JyxcbiAgICBuZXdUeEZhY3Rvcnk6ICgpID0+IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSksXG4gICAgbmV3VHhCdWlsZGVyOiAoKSA9PlxuICAgICAgbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKVxuICAgICAgICAuZ2V0RXhwb3J0SW5QQnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEubG9ja3RpbWUpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLnBBZGRyZXNzZXMpXG4gICAgICAgIC5hbW91bnQodGVzdERhdGEuYW1vdW50KVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKHRlc3REYXRhLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5mZWUodGVzdERhdGEuZmVlKVxuICAgICAgICAudXR4b3ModGVzdERhdGEub3V0cHV0cyksXG4gICAgdW5zaWduZWRUeEhleDogdGVzdERhdGEudW5zaWduZWRIZXgsXG4gICAgaGFsZlNpZ25lZFR4SGV4OiB0ZXN0RGF0YS5oYWxmU2lnbnR4SGV4LFxuICAgIGZ1bGxTaWduZWRUeEhleDogdGVzdERhdGEuZnVsbFNpZ250eEhleCxcbiAgICBwcml2YXRlS2V5OiB7XG4gICAgICBwcnYxOiB0ZXN0RGF0YS5wcml2YXRlS2V5c1swXSxcbiAgICAgIHBydjI6IHRlc3REYXRhLnByaXZhdGVLZXlzWzFdLFxuICAgIH0sXG4gICAgdHhIYXNoOiB0ZXN0RGF0YS50eGhhc2gsXG4gIH0pO1xuXG4gIHNpZ25GbG93VGVzdCh7XG4gICAgdHJhbnNhY3Rpb25UeXBlOiAnRXhwb3J0IFAyQyB3aXRoIDIgVVRYT3MnLFxuICAgIG5ld1R4RmFjdG9yeTogKCkgPT4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKSxcbiAgICBuZXdUeEJ1aWxkZXI6ICgpID0+XG4gICAgICBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0d29VdHhvVGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodHdvVXR4b1Rlc3REYXRhLmxvY2t0aW1lKVxuICAgICAgICAuZnJvbVB1YktleSh0d29VdHhvVGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmFtb3VudCh0d29VdHhvVGVzdERhdGEuYW1vdW50KVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKHR3b1V0eG9UZXN0RGF0YS5zb3VyY2VDaGFpbklkKVxuICAgICAgICAuZmVlKHR3b1V0eG9UZXN0RGF0YS5mZWUpXG4gICAgICAgIC51dHhvcyh0d29VdHhvVGVzdERhdGEub3V0cHV0cyksXG4gICAgdW5zaWduZWRUeEhleDogdHdvVXR4b1Rlc3REYXRhLnVuc2lnbmVkSGV4LFxuICAgIGhhbGZTaWduZWRUeEhleDogdHdvVXR4b1Rlc3REYXRhLmhhbGZTaWdudHhIZXgsXG4gICAgZnVsbFNpZ25lZFR4SGV4OiB0d29VdHhvVGVzdERhdGEuZnVsbFNpZ250eEhleCxcbiAgICBwcml2YXRlS2V5OiB7XG4gICAgICBwcnYxOiB0d29VdHhvVGVzdERhdGEucHJpdmF0ZUtleXNbMF0sXG4gICAgICBwcnYyOiB0d29VdHhvVGVzdERhdGEucHJpdmF0ZUtleXNbMV0sXG4gICAgfSxcbiAgICB0eEhhc2g6IHR3b1V0eG9UZXN0RGF0YS50eGhhc2gsXG4gIH0pO1xuXG4gIHNpZ25GbG93VGVzdCh7XG4gICAgdHJhbnNhY3Rpb25UeXBlOiAnRXhwb3J0IFAyQyB3aXRoIG5vIGNoYW5nZSBvdXRwdXQnLFxuICAgIG5ld1R4RmFjdG9yeTogKCkgPT4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKSxcbiAgICBuZXdUeEJ1aWxkZXI6ICgpID0+XG4gICAgICBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZChub0NoYW5nZVRlc3REYXRhLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKG5vQ2hhbmdlVGVzdERhdGEubG9ja3RpbWUpXG4gICAgICAgIC5mcm9tUHViS2V5KG5vQ2hhbmdlVGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmFtb3VudChub0NoYW5nZVRlc3REYXRhLmFtb3VudClcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZChub0NoYW5nZVRlc3REYXRhLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5mZWUobm9DaGFuZ2VUZXN0RGF0YS5mZWUpXG4gICAgICAgIC51dHhvcyhub0NoYW5nZVRlc3REYXRhLm91dHB1dHMpLFxuICAgIHVuc2lnbmVkVHhIZXg6IG5vQ2hhbmdlVGVzdERhdGEudW5zaWduZWRIZXgsXG4gICAgaGFsZlNpZ25lZFR4SGV4OiBub0NoYW5nZVRlc3REYXRhLmhhbGZTaWdudHhIZXgsXG4gICAgZnVsbFNpZ25lZFR4SGV4OiBub0NoYW5nZVRlc3REYXRhLmZ1bGxTaWdudHhIZXgsXG4gICAgcHJpdmF0ZUtleToge1xuICAgICAgcHJ2MTogbm9DaGFuZ2VUZXN0RGF0YS5wcml2YXRlS2V5c1swXSxcbiAgICAgIHBydjI6IG5vQ2hhbmdlVGVzdERhdGEucHJpdmF0ZUtleXNbMV0sXG4gICAgfSxcbiAgICB0eEhhc2g6IG5vQ2hhbmdlVGVzdERhdGEudHhoYXNoLFxuICB9KTtcblxuICBpdCgnU2hvdWxkIGZ1bGwgc2lnbiBhIGV4cG9ydCB0eCBmcm9tIHVuc2lnbmVkIHJhdyB0eCcsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpLmZyb20odGVzdERhdGEudW5zaWduZWRIZXgpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcml2YXRlS2V5c1swXSB9KTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC5idWlsZCgpXG4gICAgICAudGhlbigoKSA9PiBhc3NlcnQuZmFpbCgnaXQgY2FuIHNpZ24nKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGVyci5tZXNzYWdlLnNob3VsZC5iZS5lcXVhbCgnUHJpdmF0ZSBrZXkgY2Fubm90IHNpZ24gdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ29uLWNoYWluIHZlcmlmaWVkIHRyYW5zYWN0aW9ucycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBvbi1jaGFpbiB0eCBpZCBmb3Igc2lnbmVkIFAtY2hhaW4gZXhwb3J0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmVkRXhwb3J0SGV4ID1cbiAgICAgICAgJzB4MDAwMDAwMDAwMDEyMDAwMDAwNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDcwMDAwMDAwMDFhYzZlNTU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDMzMzI5YmU3ZDAxY2QzZWJhYWU2NjU0ZDczMjdkZDlmMTdhMmUxNTgxN2U5MThhNWU4MDgzYWU0YzlmMmYwZWQ3NzA1NWMyNGJmMzY2NTAwMWM3MzI0NDM3Yzk2YzdjOGE2YTE1MmRhMjM4NWMxZGI1YzNhYjFmOTEwMDAwMDAwMzg2MmNlODZiYTJlMjg4ODRlOGI4M2Y1ZDYyNjZkMjc0YjMzNjMyYTFjYzIxM2Q0YzEyOTk2MDM3ZmMyMWIyMDIwMDAwMDAwMDU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwNTAwMDAwMDAwMWQ2Yzk2YzYwMDAwMDAwMTAwMDAwMDAwYTQ4OTFkZmJkMDI0YTUzYjhlNDUxMjQyN2Q5MTk5MTA1Njg5ODliOWI0ODQ2MDI2YWM3YmNiODI5MDQ5NGMyNjAwMDAwMDAwNTg3MzRmOTRhZjg3MWMzZDEzMWI1NjEzMWI2ZmI3YTAyOTFlYWNhZGQyNjFlNjlkZmI0MmE5Y2RmNmY3ZmRkZDAwMDAwMDA1MDAwMDAwMDAwMDNmZmFiYzAwMDAwMDAxMDAwMDAwMDBjMWZiM2I0MzhmOGY0OWUxYmI2NTdhNTkxMDZiZTlmNWY5MWQyZWZjZTVlMDI1OWZjYmJiOTQ1OGUyNzFmODBkMDAwMDAwMDA1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDUwMDAwMDAwMDAwNDAwZTcwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwNzhkYjVjMzBiZWQwNGMwNWNlMjA5MTc5ODEyODUwYmJiM2ZlNmQ0NmQ3ZWVmMzc0NGQ4MTRjMGRhNTU1MjQ3OTAwMDAwMDAxNTg3MzRmOTRhZjg3MWMzZDEzMWI1NjEzMWI2ZmI3YTAyOTFlYWNhZGQyNjFlNjlkZmI0MmE5Y2RmNmY3ZmRkZDAwMDAwMDA3MDAwMDAwMDAwMmZhZjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMzMyOWJlN2QwMWNkM2ViYWFlNjY1NGQ3MzI3ZGQ5ZjE3YTJlMTU4MTdlOTE4YTVlODA4M2FlNGM5ZjJmMGVkNzcwNTVjMjRiZjM2NjUwMDFjNzMyNDQzN2M5NmM3YzhhNmExNTJkYTIzODVjMWRiNWMzYWIxZjkxMDAwMDAwMDMwMDAwMDAwOTAwMDAwMDAxYWZkZjBhYzJiZGJmYjE3MzUwODFkZDg1OWY0ZDI2M2U1ODdkODFiYTgxYzZiZDJjYjM0NWVlNWE2NmNlZjRlOTdhNjM0Yzc0MGYzNWVmNmJhNjAwNzk2YTVhZGQxZDkxZTY5YTE0Y2ZjYjIyYjY1ZTZhZTBiY2RmYmNlYmZhYmEwMDAwMDAwMDA5MDAwMDAwMDFhZmRmMGFjMmJkYmZiMTczNTA4MWRkODU5ZjRkMjYzZTU4N2Q4MWJhODFjNmJkMmNiMzQ1ZWU1YTY2Y2VmNGU5N2E2MzRjNzQwZjM1ZWY2YmE2MDA3OTZhNWFkZDFkOTFlNjlhMTRjZmNiMjJiNjVlNmFlMGJjZGZiY2ViZmFiYTAwMDAwMDAwMDkwMDAwMDAwMWFmZGYwYWMyYmRiZmIxNzM1MDgxZGQ4NTlmNGQyNjNlNTg3ZDgxYmE4MWM2YmQyY2IzNDVlZTVhNjZjZWY0ZTk3YTYzNGM3NDBmMzVlZjZiYTYwMDc5NmE1YWRkMWQ5MWU2OWExNGNmY2IyMmI2NWU2YWUwYmNkZmJjZWJmYWJhMDAnO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKS5mcm9tKHNpZ25lZEV4cG9ydEhleCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgcmF3VHguc2hvdWxkLmVxdWFsKHNpZ25lZEV4cG9ydEhleCk7XG4gICAgICB0eC5pZC5zaG91bGQuZXF1YWwoJ2thOGF0NUNpbm1wVWM2UU1WcjMzZHlVSmkxNTZMS01kb2RySk01OWtTNkVXcjN2SGcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgRkFJTCB3aXRoIHVuc29ydGVkIFVUWE8gYWRkcmVzc2VzIC0gZGVtb25zdHJhdGVzIEFkZHJlc3NNYXAgbWlzbWF0Y2ggaXNzdWUgZm9yIGV4cG9ydCBpbiBQLWNoYWluIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhpcyB0ZXN0IHVzZXMgVVRYTyBhZGRyZXNzZXMgaW4gVU5TT1JURUQgb3JkZXIgdG8gZGVtb25zdHJhdGUgdGhlIGlzc3VlLlxuICAgICAgLy8gV2l0aCB1bnNvcnRlZCBhZGRyZXNzZXMsIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgY3JlYXRlIEFkZHJlc3NNYXBzIGluY29ycmVjdGx5XG4gICAgICAvLyBiZWNhdXNlIGl0IHVzZXMgc29ydGVkIGFkZHJlc3Nlcywgbm90IFVUWE8gYWRkcmVzcyBvcmRlci5cbiAgICAgIC8vXG4gICAgICAvLyBFeHBlY3RlZDogQWRkcmVzc01hcCBzaG91bGQgbWFwIGFkZHJlc3NlcyB0byBzaWduYXR1cmUgc2xvdHMgYmFzZWQgb24gVVRYTyBvcmRlciAoc2lnSW5kaWNpZXMpXG4gICAgICAvLyBDdXJyZW50IChXUk9ORyk6IEFkZHJlc3NNYXAgdXNlcyBzb3J0ZWQgYWRkcmVzc2VzIHdpdGggc2VxdWVudGlhbCBzbG90c1xuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgdGVzdCBXSUxMIEZBSUwgd2l0aCBjdXJyZW50IGltcGxlbWVudGF0aW9uIGJlY2F1c2UgQWRkcmVzc01hcHMgZG9uJ3QgbWF0Y2ggc2lnSW5kaWNpZXNcblxuICAgICAgLy8gVVRYTyBhZGRyZXNzZXMgaW4gVU5TT1JURUQgb3JkZXIgKGRpZmZlcmVudCBmcm9tIHNvcnRlZClcbiAgICAgIC8vIFNvcnRlZCB3b3VsZCBiZTogWzB4MTJjYi4uLiAoc21hbGxlc3QpLCAweGE2ZTAuLi4gKG1pZGRsZSksIDB4YzM4Ni4uLiAobGFyZ2VzdCldXG4gICAgICAvLyBVbnNvcnRlZDogWzB4YzM4Ni4uLiAobGFyZ2VzdCksIDB4MTJjYi4uLiAoc21hbGxlc3QpLCAweGE2ZTAuLi4gKG1pZGRsZSldXG4gICAgICBjb25zdCB1bnNvcnRlZFV0eG9BZGRyZXNzZXMgPSBbXG4gICAgICAgICcweGMzODZkNThkMDlhOWFlNzdjZjFjZjA3YmYxYzlkZTQ0ZWJiMGM5ZjMnLCAvLyBMYXJnZXN0ICh3b3VsZCBiZSBpbmRleCAyIGlmIHNvcnRlZClcbiAgICAgICAgJzB4MTJjYjMyZWFmOTI1NTMwNjRkYjk4ZDI3MWI1NmNiYTA3OWVjNzhmNScsIC8vIFNtYWxsZXN0ICh3b3VsZCBiZSBpbmRleCAwIGlmIHNvcnRlZClcbiAgICAgICAgJzB4YTZlMGMxYWJkMDEzMmY3MGVmYjc3ZTIyNzQ2MzdmZjMzNmEyOWE1NycsIC8vIE1pZGRsZSAod291bGQgYmUgaW5kZXggMSBpZiBzb3J0ZWQpXG4gICAgICBdO1xuXG4gICAgICAvLyBDb3JyZXNwb25kaW5nIFAtY2hhaW4gYWRkcmVzc2VzIChpbiBzYW1lIG9yZGVyIGFzIFVUWE8pXG4gICAgICBjb25zdCBwQWRkcmVzc2VzID0gW1xuICAgICAgICAnUC1jb3N0d28xNW1zdnIyN3N6dmhocG1haDBjMzhnY21sN3ZtMjl4amg3dGNlazgnLCAvLyBNYXBzIHRvIDB4YzM4Ni4uLiAoVVRYTyBpbmRleCAwKVxuICAgICAgICAnUC1jb3N0d28xenQ5bjk2aGV5NGZzdm5kZTM1bjNrNGt0NXB1N2M3ODRkemV3emQnLCAvLyBNYXBzIHRvIDB4MTJjYi4uLiAoVVRYTyBpbmRleCAxKVxuICAgICAgICAnUC1jb3N0d28xY3dyZHRyZ2Y0eGg4MG5jdTdwYWxyanc3Z240bXBqMG40ZHhnaGgnLCAvLyBNYXBzIHRvIDB4YTZlMC4uLiAoVVRYTyBpbmRleCAyKVxuICAgICAgXTtcblxuICAgICAgLy8gQ3JlYXRlIFVUWE8gd2l0aCBVTlNPUlRFRCBhZGRyZXNzZXNcbiAgICAgIC8vIEFtb3VudCBtdXN0IGNvdmVyIGV4cG9ydCBhbW91bnQgKyBmZWVcbiAgICAgIGNvbnN0IGV4cG9ydEFtb3VudCA9ICc1MDAwMDAwMCc7XG4gICAgICBjb25zdCBmZWUgPSAnMTI2MTAwMCc7XG4gICAgICBjb25zdCB1dHhvQW1vdW50ID0gKEJpZ0ludChleHBvcnRBbW91bnQpICsgQmlnSW50KGZlZSkpLnRvU3RyaW5nKCk7IC8vIGFtb3VudCArIGZlZVxuXG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IDAsXG4gICAgICAgIGFtb3VudDogdXR4b0Ftb3VudCxcbiAgICAgICAgdHhpZDogJ3pzdHlZcTVyaURLWURTUjNmVVlLS2t1WEtKMWFKQ2U4V05yWEtxRUJKRDRDR3d6RncnLFxuICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgYWRkcmVzc2VzOiB1bnNvcnRlZFV0eG9BZGRyZXNzZXMsIC8vIFVOU09SVEVEIG9yZGVyXG4gICAgICAgIHRocmVzaG9sZDogMixcbiAgICAgIH07XG5cbiAgICAgIC8vIEJ1aWxkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5XG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCgyKVxuICAgICAgICAubG9ja3RpbWUoMClcbiAgICAgICAgLmZyb21QdWJLZXkocEFkZHJlc3NlcylcbiAgICAgICAgLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5zb3VyY2VDaGFpbklkKVxuICAgICAgICAuYW1vdW50KGV4cG9ydEFtb3VudClcbiAgICAgICAgLmZlZShmZWUpXG4gICAgICAgIC51dHhvcyhbdXR4b10pO1xuXG4gICAgICAvLyBCdWlsZCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSB1bnNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFBhcnNlIGl0IGJhY2sgdG8gaW5zcGVjdCBBZGRyZXNzTWFwcyBhbmQgc2lnSW5kaWNpZXNcbiAgICAgIGNvbnN0IHBhcnNlZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odW5zaWduZWRIZXgpO1xuICAgICAgY29uc3QgcGFyc2VkVHggPSBhd2FpdCBwYXJzZWRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBmbGFyZVR4ID0gKHBhcnNlZFR4IGFzIGFueSkuX2ZsYXJlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIEdldCB0aGUgaW5wdXQgdG8gY2hlY2sgc2lnSW5kaWNpZXNcbiAgICAgIGNvbnN0IGV4cG9ydFR4ID0gZmxhcmVUeC50eCBhcyBhbnk7XG4gICAgICBjb25zdCBpbnB1dCA9IGV4cG9ydFR4LmJhc2VUeC5pbnB1dHNbMF07XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQ7XG4gICAgICBjb25zdCBzaWdJbmRpY2llcyA9IHRyYW5zZmVySW5wdXQuc2lnSW5kaWNpZXMoKTtcblxuICAgICAgLy8gc2lnSW5kaWNpZXMgdGVsbHMgdXM6IHNpZ0luZGljaWVzW3Nsb3RJbmRleF0gPSB1dHhvQWRkcmVzc0luZGV4XG4gICAgICAvLyBGb3IgdGhyZXNob2xkPTIsIHdlIG5lZWQgc2lnbmF0dXJlcyBmb3IgZmlyc3QgMiBhZGRyZXNzZXMgaW4gVVRYTyBvcmRlclxuICAgICAgLy8gVVRYTyBvcmRlcjogWzB4YzM4Ni4uLiAoaW5kZXggMCksIDB4MTJjYi4uLiAoaW5kZXggMSksIDB4YTZlMC4uLiAoaW5kZXggMildXG4gICAgICAvLyBTbyBzaWdJbmRpY2llcyBzaG91bGQgYmUgWzAsIDFdIG1lYW5pbmc6IHNsb3QgMCA9IFVUWE8gaW5kZXggMCwgc2xvdCAxID0gVVRYTyBpbmRleCAxXG5cbiAgICAgIC8vIFZlcmlmeSBzaWdJbmRpY2llcyBhcmUgWzAsIDFdIChmaXJzdCAyIGFkZHJlc3NlcyBpbiBVVFhPIG9yZGVyLCBOT1Qgc29ydGVkIG9yZGVyKVxuICAgICAgc2lnSW5kaWNpZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICAgIHNpZ0luZGljaWVzWzBdLnNob3VsZC5lcXVhbCgwLCAnRmlyc3Qgc2lnbmF0dXJlIHNsb3Qgc2hvdWxkIGJlIFVUWE8gYWRkcmVzcyBpbmRleCAwICgweGMzODYuLi4pJyk7XG4gICAgICBzaWdJbmRpY2llc1sxXS5zaG91bGQuZXF1YWwoMSwgJ1NlY29uZCBzaWduYXR1cmUgc2xvdCBzaG91bGQgYmUgVVRYTyBhZGRyZXNzIGluZGV4IDEgKDB4MTJjYi4uLiknKTtcblxuICAgICAgLy8gVGhlIGNyaXRpY2FsIHRlc3Q6IFZlcmlmeSB0aGF0IHNpZ25hdHVyZSBzbG90cyBoYXZlIGVtYmVkZGVkIGFkZHJlc3NlcyBiYXNlZCBvbiBVVFhPIG9yZGVyXG4gICAgICAvLyBXaXRoIHVuc29ydGVkIFVUWE8gYWRkcmVzc2VzLCB0aGlzIHdpbGwgRkFJTCBpZiBBZGRyZXNzTWFwcyBkb24ndCBtYXRjaCBVVFhPIG9yZGVyXG4gICAgICAvL1xuICAgICAgLy8gc2lnSW5kaWNpZXMgdGVsbHMgdXM6IHNpZ0luZGljaWVzW3Nsb3RJbmRleF0gPSB1dHhvQWRkcmVzc0luZGV4XG4gICAgICAvLyBGb3IgdGhyZXNob2xkPTIsIHdlIG5lZWQgc2lnbmF0dXJlcyBmb3IgZmlyc3QgMiBhZGRyZXNzZXMgaW4gVVRYTyBvcmRlclxuICAgICAgLy8gVVRYTyBvcmRlcjogWzB4YzM4Ni4uLiAoaW5kZXggMCksIDB4MTJjYi4uLiAoaW5kZXggMSksIDB4YTZlMC4uLiAoaW5kZXggMildXG4gICAgICAvLyBTbyBzaWdJbmRpY2llcyBzaG91bGQgYmUgWzAsIDFdIG1lYW5pbmc6IHNsb3QgMCA9IFVUWE8gaW5kZXggMCwgc2xvdCAxID0gVVRYTyBpbmRleCAxXG5cbiAgICAgIC8vIFBhcnNlIHRoZSBjcmVkZW50aWFsIHRvIHNlZSB3aGljaCBzbG90cyBoYXZlIHdoaWNoIGVtYmVkZGVkIGFkZHJlc3Nlc1xuICAgICAgY29uc3QgY3JlZGVudGlhbCA9IGZsYXJlVHguY3JlZGVudGlhbHNbMF07XG4gICAgICBjb25zdCBzaWduYXR1cmVzID0gY3JlZGVudGlhbC5nZXRTaWduYXR1cmVzKCk7XG5cbiAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaWduYXR1cmUgaGFzIGVtYmVkZGVkIGFkZHJlc3MgKHNhbWUgbG9naWMgYXMgdHJhbnNhY3Rpb24udHMpXG4gICAgICBjb25zdCB0ZXN0VXRpbHMyID0gcmVxdWlyZSgnLi4vLi4vLi4vc3JjL2xpYi91dGlscycpLmRlZmF1bHQ7XG4gICAgICBjb25zdCBpc0VtcHR5U2lnbmF0dXJlID0gKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiAhIXNpZ25hdHVyZSAmJiB0ZXN0VXRpbHMyLnJlbW92ZUhleFByZWZpeChzaWduYXR1cmUpLnN0YXJ0c1dpdGgoJzAnLnJlcGVhdCg5MCkpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFzRW1iZWRkZWRBZGRyZXNzID0gKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmICghaXNFbXB0eVNpZ25hdHVyZShzaWduYXR1cmUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNsZWFuU2lnID0gdGVzdFV0aWxzMi5yZW1vdmVIZXhQcmVmaXgoc2lnbmF0dXJlKTtcbiAgICAgICAgaWYgKGNsZWFuU2lnLmxlbmd0aCA8IDEzMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBlbWJlZGRlZFBhcnQgPSBjbGVhblNpZy5zdWJzdHJpbmcoOTAsIDEzMCk7XG4gICAgICAgIC8vIENoZWNrIGlmIGVtYmVkZGVkIHBhcnQgaXMgbm90IGFsbCB6ZXJvc1xuICAgICAgICByZXR1cm4gZW1iZWRkZWRQYXJ0ICE9PSAnMCcucmVwZWF0KDQwKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEV4dHJhY3QgZW1iZWRkZWQgYWRkcmVzc2VzIGZyb20gc2lnbmF0dXJlIHNsb3RzXG4gICAgICBjb25zdCBlbWJlZGRlZEFkZHJlc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgc2lnbmF0dXJlcy5mb3JFYWNoKChzaWc6IHN0cmluZywgc2xvdEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKGhhc0VtYmVkZGVkQWRkcmVzcyhzaWcpKSB7XG4gICAgICAgICAgLy8gRXh0cmFjdCBlbWJlZGRlZCBhZGRyZXNzIChhZnRlciBwb3NpdGlvbiA5MCwgNDAgY2hhcnMgPSAyMCBieXRlcylcbiAgICAgICAgICBjb25zdCBjbGVhblNpZyA9IHRlc3RVdGlsczIucmVtb3ZlSGV4UHJlZml4KHNpZyk7XG4gICAgICAgICAgY29uc3QgZW1iZWRkZWRBZGRyID0gY2xlYW5TaWcuc3Vic3RyaW5nKDkwLCAxMzApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgZW1iZWRkZWRBZGRyZXNzZXNbc2xvdEluZGV4XSA9ICcweCcgKyBlbWJlZGRlZEFkZHI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBWZXJpZnk6IENyZWRlbnRpYWxzIG9ubHkgZW1iZWQgT05FIGFkZHJlc3MgKHVzZXIvcmVjb3ZlcnkpLCBub3QgYm90aFxuICAgICAgLy8gVGhlIGVtYmVkZGVkIGFkZHJlc3Mgc2hvdWxkIGJlIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGxvZ2ljLCBub3Qgc29ydGVkIG9yZGVyXG4gICAgICAvL1xuICAgICAgLy8gQ29tcHV0ZSBhZGRyZXNzZXNJbmRleCB0byBkZXRlcm1pbmUgZXhwZWN0ZWQgc2lnbmF0dXJlIG9yZGVyXG4gICAgICBjb25zdCB1dHhvQWRkcmVzc0J5dGVzID0gdW5zb3J0ZWRVdHhvQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4gdGVzdFV0aWxzMi5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgICAgY29uc3QgcEFkZHJlc3NCeXRlcyA9IHBBZGRyZXNzZXMubWFwKChhZGRyKSA9PiB0ZXN0VXRpbHMyLnBhcnNlQWRkcmVzcyhhZGRyKSk7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuICAgICAgcEFkZHJlc3NCeXRlcy5mb3JFYWNoKChwQWRkcikgPT4ge1xuICAgICAgICBjb25zdCB1dHhvSW5kZXggPSB1dHhvQWRkcmVzc0J5dGVzLmZpbmRJbmRleChcbiAgICAgICAgICAodUFkZHIpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHVBZGRyKSwgQnVmZmVyLmZyb20ocEFkZHIpKSA9PT0gMFxuICAgICAgICApO1xuICAgICAgICBhZGRyZXNzZXNJbmRleC5wdXNoKHV0eG9JbmRleCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZmlyc3RJbmRleCA9IDAgKHVzZXIpLCBiaXRnb0luZGV4ID0gMVxuICAgICAgY29uc3QgZmlyc3RJbmRleCA9IDA7XG4gICAgICBjb25zdCBiaXRnb0luZGV4ID0gMTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIGV4cGVjdGVkIHNpZ25hdHVyZSBvcmRlciBiYXNlZCBvbiBhZGRyZXNzZXNJbmRleFxuICAgICAgY29uc3QgdXNlckNvbWVzRmlyc3QgPSBhZGRyZXNzZXNJbmRleFtiaXRnb0luZGV4XSA+IGFkZHJlc3Nlc0luZGV4W2ZpcnN0SW5kZXhdO1xuXG4gICAgICAvLyBFeHBlY3RlZCBjcmVkZW50aWFsIHN0cnVjdHVyZTpcbiAgICAgIC8vIC0gSWYgdXNlciBjb21lcyBmaXJzdDogW3VzZXJBZGRyZXNzLCB6ZXJvc11cbiAgICAgIC8vIC0gSWYgYml0Z28gY29tZXMgZmlyc3Q6IFt6ZXJvcywgdXNlckFkZHJlc3NdXG4gICAgICBjb25zdCB1c2VyQWRkcmVzc0hleCA9IEJ1ZmZlci5mcm9tKHBBZGRyZXNzQnl0ZXNbZmlyc3RJbmRleF0pLnRvU3RyaW5nKCdoZXgnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRVc2VyQWRkciA9ICcweCcgKyB1c2VyQWRkcmVzc0hleDtcblxuICAgICAgaWYgKHVzZXJDb21lc0ZpcnN0KSB7XG4gICAgICAgIC8vIEV4cGVjdGVkOiBbdXNlckFkZHJlc3MsIHplcm9zXVxuICAgICAgICAvLyBTbG90IDAgc2hvdWxkIGhhdmUgdXNlciBhZGRyZXNzIChwQWRkcjAgPSAweGMzODYuLi4gPSBVVFhPIGluZGV4IDApXG4gICAgICAgIGlmIChlbWJlZGRlZEFkZHJlc3Nlc1swXSkge1xuICAgICAgICAgIGVtYmVkZGVkQWRkcmVzc2VzWzBdXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLnNob3VsZC5lcXVhbChcbiAgICAgICAgICAgICAgZXhwZWN0ZWRVc2VyQWRkcixcbiAgICAgICAgICAgICAgYFNsb3QgMCBzaG91bGQgaGF2ZSB1c2VyIGFkZHJlc3MgKCR7ZXhwZWN0ZWRVc2VyQWRkcn0pIGJlY2F1c2UgdXNlciBjb21lcyBmaXJzdCBpbiBVVFhPIG9yZGVyYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNsb3QgMCBzaG91bGQgaGF2ZSBlbWJlZGRlZCB1c2VyIGFkZHJlc3MsIGJ1dCBpcyBlbXB0eWApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNsb3QgMSBzaG91bGQgYmUgemVyb3MgKG5vIGVtYmVkZGVkIGFkZHJlc3MpXG4gICAgICAgIGlmIChlbWJlZGRlZEFkZHJlc3Nlc1sxXSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2xvdCAxIHNob3VsZCBiZSB6ZXJvcywgYnV0IGhhcyBlbWJlZGRlZCBhZGRyZXNzOiAke2VtYmVkZGVkQWRkcmVzc2VzWzFdfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFeHBlY3RlZDogW3plcm9zLCB1c2VyQWRkcmVzc11cbiAgICAgICAgLy8gU2xvdCAwIHNob3VsZCBiZSB6ZXJvc1xuICAgICAgICBpZiAoZW1iZWRkZWRBZGRyZXNzZXNbMF0pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNsb3QgMCBzaG91bGQgYmUgemVyb3MsIGJ1dCBoYXMgZW1iZWRkZWQgYWRkcmVzczogJHtlbWJlZGRlZEFkZHJlc3Nlc1swXX1gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTbG90IDEgc2hvdWxkIGhhdmUgdXNlciBhZGRyZXNzXG4gICAgICAgIGlmIChlbWJlZGRlZEFkZHJlc3Nlc1sxXSkge1xuICAgICAgICAgIGVtYmVkZGVkQWRkcmVzc2VzWzFdXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLnNob3VsZC5lcXVhbChcbiAgICAgICAgICAgICAgZXhwZWN0ZWRVc2VyQWRkcixcbiAgICAgICAgICAgICAgYFNsb3QgMSBzaG91bGQgaGF2ZSB1c2VyIGFkZHJlc3MgKCR7ZXhwZWN0ZWRVc2VyQWRkcn0pIGJlY2F1c2UgYml0Z28gY29tZXMgZmlyc3QgaW4gVVRYTyBvcmRlcmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbG90IDEgc2hvdWxkIGhhdmUgZW1iZWRkZWQgdXNlciBhZGRyZXNzLCBidXQgaXMgZW1wdHlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUga2V5IHZlcmlmaWNhdGlvbjogQWRkcmVzc01hcHMgc2hvdWxkIG1hdGNoIHRoZSBjcmVkZW50aWFsIG9yZGVyXG4gICAgICAvLyBXaXRoIHRoZSBmaXgsIEFkZHJlc3NNYXBzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSBzYW1lIGFkZHJlc3Nlc0luZGV4IGxvZ2ljIGFzIGNyZWRlbnRpYWxzXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgc2lnbmluZyB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aXRoIHVuc29ydGVkIFVUWE8gYWRkcmVzc2VzXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=