@bitgo-beta/abstract-utxo 1.6.1-alpha.431 → 1.6.1-alpha.432

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.
@@ -168,7 +168,9 @@ describe(`UTXO coin signTransaction`, async function () {
168
168
  }));
169
169
  const unspentSum = inputs.reduce((prev, curr) => prev + curr.value, BigInt(0));
170
170
  const outputs = [{ scriptType: 'p2sh', value: unspentSum - BigInt(1000) }];
171
- const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, rootWalletKeys, 'unsigned');
171
+ const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, rootWalletKeys, 'unsigned', {
172
+ p2shP2pkKey: (0, src_1.getReplayProtectionPubkeys)(coin.network)[0],
173
+ });
172
174
  for (const v of [false, true]) {
173
175
  await signTransaction(psbt, v);
174
176
  }
@@ -324,7 +326,9 @@ function run(coin, inputScripts, txFormat, { decodeWith } = {}) {
324
326
  const outputs = [
325
327
  { address: getOutputAddress((0, util_2.getWalletKeys)('test')), value: unspentSum - BigInt(1000) },
326
328
  ];
327
- const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, walletKeys, 'unsigned');
329
+ const psbt = utxo_lib_1.testutil.constructPsbt(inputs, outputs, coin.network, walletKeys, 'unsigned', {
330
+ p2shP2pkKey: (0, src_1.getReplayProtectionPubkeys)(coin.network)[0],
331
+ });
328
332
  utxolib.bitgo.addXpubsToPsbt(psbt, walletKeys);
329
333
  return psbt;
330
334
  }
@@ -521,4 +525,4 @@ describe('Transaction Suite', function () {
521
525
  });
522
526
  });
523
527
  });
524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIsOERBQWdEO0FBQ2hELDZCQUE4QjtBQUM5QixtREFBdUU7QUFDdkUsbURBTThCO0FBRTlCLG1DQUE0RjtBQUc1Rix5REFBb0U7QUFDcEUsaUNBZ0JnQjtBQUtoQixTQUFTLGtCQUFrQjtJQUN6QixPQUFPLENBQUMsR0FBRyxnQkFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUscUJBQXFCLENBQVUsQ0FBQztBQUNsRixDQUFDO0FBRUQsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEtBQUs7SUFDekMsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUU3RCxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxrQ0FBa0MsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RyxNQUFNLGNBQWMsR0FBRyxJQUFBLDJCQUFvQixHQUFFLENBQUM7SUFDOUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxzQkFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBbUIsQ0FBQztJQUVqRSxTQUFTLFlBQVksQ0FBQyxLQUFhLEVBQUUsY0FB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QUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxJQUFBLGtDQUE0QixFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEQsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDdkUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixnQkFBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3pCLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQzdCLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ21vY2hhJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UsIGJpdGdvLCB0ZXN0dXRpbCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7XG4gIGNvbW1vbixcbiAgRnVsbHlTaWduZWRUcmFuc2FjdGlvbixcbiAgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgVHJpcGxlLFxuICBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMsIGdlbmVyYXRlQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBTZGtCYWNrZW5kIH0gZnJvbSAnLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzV2FzbVV0eG9TdXBwb3J0IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC91dGlsJztcbmltcG9ydCB7XG4gIHV0eG9Db2lucyxcbiAgc2hvdWxkRXF1YWxKU09OLFxuICBnZXRGaXh0dXJlLFxuICBnZXRVdHhvV2FsbGV0LFxuICBtb2NrVW5zcGVudCxcbiAgSW5wdXRTY3JpcHRUeXBlLFxuICBUcmFuc2FjdGlvbk9iaixcbiAgdHJhbnNhY3Rpb25Ub09iaixcbiAgdHJhbnNhY3Rpb25IZXhUb09iaixcbiAgY3JlYXRlUHJlYnVpbGRUcmFuc2FjdGlvbixcbiAgZ2V0RGVmYXVsdFdhbGxldEtleXMsXG4gIGdldFV0eG9Db2luLFxuICBrZXljaGFpbnNCYXNlNTgsXG4gIGdldFdhbGxldEtleXMsXG4gIGRlZmF1bHRCaXRHbyxcbn0gZnJvbSAnLi91dGlsJztcblxudHlwZSBVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gYml0Z28uVW5zcGVudDxUTnVtYmVyPjtcbnR5cGUgV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IGJpdGdvLldhbGxldFVuc3BlbnQ8VE51bWJlcj47XG5cbmZ1bmN0aW9uIGdldFNjcmlwdFR5cGVzMk9mMygpIHtcbiAgcmV0dXJuIFsuLi5iaXRnby5vdXRwdXRTY3JpcHRzLnNjcmlwdFR5cGVzMk9mMywgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXSBhcyBjb25zdDtcbn1cblxuZGVzY3JpYmUoYFVUWE8gY29pbiBzaWduVHJhbnNhY3Rpb25gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICBjb25zdCBjb2luID0gZ2V0VXR4b0NvaW4oJ2J0YycpO1xuICBjb25zdCB3YWxsZXQgPSBnZXRVdHhvV2FsbGV0KGNvaW4sIHsgaWQ6ICc1YjM0MjUyZjFiZjM0OTkzMGUzNDAyMGEwMDAwMDAwMCcsIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSB9KTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICBjb25zdCB1c2VyUHJ2ID0gcm9vdFdhbGxldEtleXMudXNlci50b0Jhc2U1OCgpO1xuICBjb25zdCBwdWJzID0ga2V5Y2hhaW5zQmFzZTU4Lm1hcCgodikgPT4gdi5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUHNidCh0eEhleDogc3RyaW5nLCB0YXJnZXRTaWdDb3VudDogMCB8IDEsIHRhcmdldE5vbmNlQ291bnQ/OiAxIHwgMikge1xuICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHR4SGV4LCBjb2luLm5ldHdvcmspO1xuICAgIHBzYnQuZGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB1dHhvbGliLmJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcbiAgICAgIGlmIChwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICAgIGFzc2VydC5vayh0YXJnZXROb25jZUNvdW50KTtcbiAgICAgICAgY29uc3Qgbm9uY2UgPSBwc2J0LmdldFByb3ByaWV0YXJ5S2V5VmFscyhpbmRleCwge1xuICAgICAgICAgIGlkZW50aWZpZXI6IHV0eG9saWIuYml0Z28uUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgICAgICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLk1VU0lHMl9QVUJfTk9OQ0UsXG4gICAgICAgIH0pO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobm9uY2UubGVuZ3RoLCB0YXJnZXROb25jZUNvdW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnQ291bnQgPSBwYXJzZWQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJyB8fCB0YXJnZXRTaWdDb3VudCA9PT0gMCA/IHVuZGVmaW5lZCA6IDE7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnNpZ25hdHVyZXM/Lmxlbmd0aCwgZXhwZWN0ZWRTaWdDb3VudCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZVR4KHR4SGV4OiBzdHJpbmcsIHVuc3BlbnRzOiBVbnNwZW50PGJpZ2ludD5bXSwgdGFyZ2V0U2lnQ291bnQ6IDAgfCAxKSB7XG4gICAgY29uc3QgdHggPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleCh0eEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgICBjb25zdCBzaWdDb3VudCA9IHV0eG9saWIuYml0Z28uZ2V0U3RyaWN0U2lnbmF0dXJlQ291bnQodHguaW5zW2ldKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkU2lnQ291bnQgPSB1dHhvbGliLmJpdGdvLmlzV2FsbGV0VW5zcGVudCh1KSAmJiAhIXRhcmdldFNpZ0NvdW50ID8gMSA6IDA7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnQ291bnQsIGV4cGVjdGVkU2lnQ291bnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2lnblRyYW5zYWN0aW9uKFxuICAgIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHwgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgICB1c2VTaWduaW5nU3RlcHM6IGJvb2xlYW4sXG4gICAgdW5zcGVudHM/OiBVbnNwZW50PGJpZ2ludD5bXVxuICApIHtcbiAgICBjb25zdCBpc1BzYnQgPSB0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG4gICAgY29uc3QgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID0gaXNQc2J0ICYmIHV0eG9saWIuYml0Z28uaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmRJbnB1dCh0eCk7XG4gICAgY29uc3QgdHhIZXggPSB0eC50b0hleCgpO1xuXG4gICAgZnVuY3Rpb24gbm9ja1NpZ25Qc2J0KHBzYnRIZXg6IHN0cmluZyk6IG5vY2suU2NvcGUge1xuICAgICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgocHNidEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICAgIHJldHVybiBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zaWducHNidGAsIChib2R5KSA9PiBib2R5LnBzYnQpXG4gICAgICAgIC5yZXBseSgyMDAsIHsgcHNidDogcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKS50b0hleCgpIH0pO1xuICAgIH1cblxuICAgIGlmICghdXNlU2lnbmluZ1N0ZXBzKSB7XG4gICAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0ICYmIGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCkge1xuICAgICAgICBzY29wZSA9IG5vY2tTaWduUHNidCh0eC5jbG9uZSgpLnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMuYml0Z28pLnRvSGV4KCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4LFxuICAgICAgICAgIHR4SW5mbzogaXNQc2J0ID8gdW5kZWZpbmVkIDogeyB1bnNwZW50cyB9LFxuICAgICAgICAgIHdhbGxldElkOiBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyB3YWxsZXQuaWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgICBwdWJzOiBpc1BzYnQgPyB1bmRlZmluZWQgOiBwdWJzLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBwc2J0KTtcbiAgICAgIGlmIChpc1BzYnQpIHtcbiAgICAgICAgdmFsaWRhdGVQc2J0KHBzYnQudHhIZXgsIDEsIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgICAgdmFsaWRhdGVUeChwc2J0LnR4SGV4LCB1bnNwZW50cywgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2NvcGUpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjb3BlLmlzRG9uZSgpLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduZXJOb25jZVBzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICBzaWduaW5nU3RlcDogJ3NpZ25lck5vbmNlJyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBzaWduZXJOb25jZVBzYnQpO1xuICAgIGlmIChpc1BzYnQpIHtcbiAgICAgIHZhbGlkYXRlUHNidChzaWduZXJOb25jZVBzYnQudHhIZXgsIDAsIGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA/IDEgOiB1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQub2sodW5zcGVudHMpO1xuICAgICAgdmFsaWRhdGVUeChzaWduZXJOb25jZVBzYnQudHhIZXgsIHVuc3BlbnRzLCAwKTtcbiAgICB9XG5cbiAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCkge1xuICAgICAgc2NvcGUgPSBub2NrU2lnblBzYnQoc2lnbmVyTm9uY2VQc2J0LnR4SGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlUHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uc2lnbmVyTm9uY2VQc2J0LCB3YWxsZXRJZDogd2FsbGV0LmlkKCkgfSxcbiAgICAgIHNpZ25pbmdTdGVwOiAnY29zaWduZXJOb25jZScsXG4gICAgfSk7XG4gICAgYXNzZXJ0Lm9rKCd0eEhleCcgaW4gY29zaWduZXJOb25jZVBzYnQpO1xuICAgIGlmIChpc1BzYnQpIHtcbiAgICAgIHZhbGlkYXRlUHNidChjb3NpZ25lck5vbmNlUHNidC50eEhleCwgMCwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KGNvc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCB1bnNwZW50cywgMCk7XG4gICAgfVxuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NvcGUuaXNEb25lKCksIHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lclNpZ1BzYnQgPSBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLmNvc2lnbmVyTm9uY2VQc2J0LCB0eEluZm86IGlzUHNidCA/IHVuZGVmaW5lZCA6IHsgdW5zcGVudHMgfSB9LFxuICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgcHViczogaXNQc2J0ID8gdW5kZWZpbmVkIDogcHVicyxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBzaWduZXJTaWdQc2J0KTtcbiAgICBpZiAoaXNQc2J0KSB7XG4gICAgICB2YWxpZGF0ZVBzYnQoc2lnbmVyU2lnUHNidC50eEhleCwgMSwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMiA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KHNpZ25lclNpZ1BzYnQudHhIZXgsIHVuc3BlbnRzLCAxKTtcbiAgICB9XG4gIH1cblxuICBpdCgnc3VjY2VzcyB3aGVuIGNhbGxlZCBsaWtlIGN1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gUFNCVCB3aXRoIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IHRlc3R1dGlsLmlucHV0U2NyaXB0VHlwZXMubWFwKChzY3JpcHRUeXBlKSA9PiAoe1xuICAgICAgc2NyaXB0VHlwZSxcbiAgICAgIHZhbHVlOiBCaWdJbnQoMTAwMCksXG4gICAgfSkpO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcpO1xuXG4gICAgZm9yIChjb25zdCB2IG9mIFtmYWxzZSwgdHJ1ZV0pIHtcbiAgICAgIGF3YWl0IHNpZ25UcmFuc2FjdGlvbihwc2J0LCB2KTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzdWNjZXNzIHdoZW4gY2FsbGVkIGxpa2UgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGZsb3cgLSBQU0JUIHdpdGhvdXQgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gdGVzdHV0aWwuaW5wdXRTY3JpcHRUeXBlc1xuICAgICAgLmZpbHRlcigodikgPT4gdiAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKVxuICAgICAgLm1hcCgoc2NyaXB0VHlwZSkgPT4gKHtcbiAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgdmFsdWU6IEJpZ0ludCgxMDAwKSxcbiAgICAgIH0pKTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXIpID0+IHByZXYgKyBjdXIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJyk7XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgYXdhaXQgc2lnblRyYW5zYWN0aW9uKHBzYnQsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3N1Y2Nlc3Mgd2hlbiBjYWxsZWQgbGlrZSBjdXN0b21TaWduaW5nRnVuY3Rpb24gZmxvdyAtIE5ldHdvcmsgVHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5UeG5JbnB1dDxiaWdpbnQ+W10gPSB0ZXN0dXRpbC50eG5JbnB1dFNjcmlwdFR5cGVzXG4gICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSAncDJzaFAycGsnKVxuICAgICAgLm1hcCgoc2NyaXB0VHlwZSkgPT4gKHtcbiAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgdmFsdWU6IEJpZ0ludCgxMDAwKSxcbiAgICAgIH0pKTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5UeG5PdXRwdXQ8YmlnaW50PltdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RUeG5CdWlsZGVyKGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJyk7XG4gICAgY29uc3QgdW5zcGVudHMgPSBpbnB1dHMubWFwKCh2LCBpKSA9PiB0ZXN0dXRpbC50b1R4blVuc3BlbnQodiwgaSwgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cykpO1xuXG4gICAgZm9yIChjb25zdCB2IG9mIFtmYWxzZSwgdHJ1ZV0pIHtcbiAgICAgIGF3YWl0IHNpZ25UcmFuc2FjdGlvbih0eEJ1aWxkZXIuYnVpbGRJbmNvbXBsZXRlKCksIHYsIHVuc3BlbnRzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB3aGVuIGNhbGxlZCBsaWtlIGN1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gUFNCVCBjYWNoZSBtaXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlucHV0czogdGVzdHV0aWwuSW5wdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICd0YXByb290S2V5UGF0aFNwZW5kJywgdmFsdWU6IEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfV07XG4gICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBjb2luLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogcHNidC50b0hleCgpIH0sXG4gICAgICAgICAgcHJ2OiB1c2VyUHJ2LFxuICAgICAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtZXNzYWdlOiBgUHNidCBpcyBtaXNzaW5nIGZyb20gdHhDYWNoZSAoY2FjaGUgc2l6ZSAwKS5cbiAgICAgICAgICAgIFRoaXMgbWF5IGJlIGR1ZSB0byB0aGUgcmVxdWVzdCBiZWluZyByb3V0ZWQgdG8gYSBkaWZmZXJlbnQgQml0R28tRXhwcmVzcyBpbnN0YW5jZSB0aGF0IGZvciBzaWduaW5nIHN0ZXAgJ3NpZ25lck5vbmNlJy5gLFxuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyB3aGVuIHVuc3VwcG9ydGVkIGxvY2tpbmcgc2NyaXB0IGlzIHVzZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gW1xuICAgICAgeyBzY3JpcHRUeXBlOiAncDJ3c2gnLCB2YWx1ZTogQmlnSW50KDEwMDApIH0sXG4gICAgICB7IHNjcmlwdFR5cGU6ICdwMnRyTXVzaWcyJywgdmFsdWU6IEJpZ0ludCgxMDAwKSB9LFxuICAgIF07XG4gICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDUwMCkgfV07XG4gICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnKTtcblxuICAgIC8vIG92ZXJyaWRlIHRoZSAxc3QgUFNCVCBpbnB1dCB3aXRoIHVuc3VwcG9ydGVkIDIgb2YgMiBtdWx0aS1zaWcgbG9ja2luZyBzY3JpcHQuXG4gICAgY29uc3QgdW5zcGVudCA9IHRlc3R1dGlsLnRvVW5zcGVudChpbnB1dHNbMF0sIDAsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMpO1xuICAgIGlmICghdXR4b2xpYi5iaXRnby5pc1dhbGxldFVuc3BlbnQodW5zcGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1bnNwZW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcHVibGljS2V5cyB9ID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh1bnNwZW50LmNoYWluLCB1bnNwZW50LmluZGV4KTtcbiAgICBjb25zdCBzY3JpcHQyT2YyID0gdXR4b2xpYi5wYXltZW50cy5wMm1zKHsgbTogMiwgcHVia2V5czogW3B1YmxpY0tleXNbMF0sIHB1YmxpY0tleXNbMV1dIH0pO1xuICAgIHBzYnQuZGF0YS5pbnB1dHNbMF0ud2l0bmVzc1NjcmlwdCA9IHNjcmlwdDJPZjIub3V0cHV0O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSxcbiAgICAgICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogYGxlbmd0aCBtaXNtYXRjaGAsXG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gcnVuPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBpbnB1dFNjcmlwdHM6IHRlc3R1dGlsLklucHV0U2NyaXB0VHlwZVtdLFxuICB0eEZvcm1hdDogJ2xlZ2FjeScgfCAncHNidCcsXG4gIHsgZGVjb2RlV2l0aCB9OiB7IGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kIH0gPSB7fVxuKSB7XG4gIGNvbnN0IGFtb3VudFR5cGUgPSBjb2luLmFtb3VudFR5cGU7XG4gIGNvbnN0IHRpdGxlID0gW1xuICAgIGlucHV0U2NyaXB0cy5qb2luKCcsJyksXG4gICAgYHR4Rm9ybWF0PSR7dHhGb3JtYXR9YCxcbiAgICBgYW1vdW50VHlwZT0ke2Ftb3VudFR5cGV9YCxcbiAgICBkZWNvZGVXaXRoID8gYGRlY29kZVdpdGg9JHtkZWNvZGVXaXRofWAgOiAnJyxcbiAgXTtcbiAgZGVzY3JpYmUoYCR7dGl0bGUuam9pbignICcpfWAsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBiZ1VybCA9IGNvbW1vbi5FbnZpcm9ubWVudHNbZGVmYXVsdEJpdEdvLmdldEVudigpXS51cmk7XG5cbiAgICBjb25zdCBpc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZCA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUmVwbGF5UHJvdGVjdGlvbiA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJzaFAycGsnKTtcbiAgICBjb25zdCBpc1RyYW5zYWN0aW9uV2l0aFAydHIgPSBpbnB1dFNjcmlwdHMuc29tZSgocykgPT4gcyA9PT0gJ3AydHInKTtcbiAgICBjb25zdCBpc1RyYW5zYWN0aW9uV2l0aFAydHJNdXNpZzIgPSBpbnB1dFNjcmlwdHMuc29tZSgocykgPT4gcyA9PT0gJ3AydHJNdXNpZzInKTtcblxuICAgIGNvbnN0IHZhbHVlID0gKGFtb3VudFR5cGUgPT09ICdiaWdpbnQnID8gQmlnSW50KCcxMDk5OTk5OTgwMDAwMDAwMScpIDogMWU4KSBhcyBUTnVtYmVyO1xuICAgIGNvbnN0IHdhbGxldCA9IGdldFV0eG9XYWxsZXQoY29pbiwgeyBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJywgY29pbjogY29pbi5nZXRDaGFpbigpIH0pO1xuICAgIGNvbnN0IHdhbGxldEtleXMgPSBnZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuXG4gICAgY29uc3QgZnVsbFNpZ24gPSAhKGlzVHJhbnNhY3Rpb25XaXRoUmVwbGF5UHJvdGVjdGlvbiB8fCBpc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZCk7XG5cbiAgICBmdW5jdGlvbiBnZXRVbnNwZW50c0ZvclBzYnQoKTogVW5zcGVudDxiaWdpbnQ+W10ge1xuICAgICAgcmV0dXJuIGlucHV0U2NyaXB0cy5tYXAoKHQsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiB0ZXN0dXRpbC50b1Vuc3BlbnQoXG4gICAgICAgICAgeyBzY3JpcHRUeXBlOiB0LCB2YWx1ZTogdCA9PT0gJ3Ayc2hQMnBrJyA/IEJpZ0ludCgxMDAwKSA6IEJpZ0ludCh2YWx1ZSkgfSxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBjb2luLm5ldHdvcmssXG4gICAgICAgICAgd2FsbGV0S2V5c1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9UeG5JbnB1dFNjcmlwdFR5cGUodHlwZTogdGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlKTogSW5wdXRTY3JpcHRUeXBlIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAncDJzaFAycGsnID8gJ3JlcGxheVByb3RlY3Rpb24nIDogdHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogdHlwZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRVbnNwZW50cygpOiBVbnNwZW50PFROdW1iZXI+W10ge1xuICAgICAgcmV0dXJuIGlucHV0U2NyaXB0cy5tYXAoKHR5cGUsIGkpID0+XG4gICAgICAgIG1vY2tVbnNwZW50PFROdW1iZXI+KGNvaW4ubmV0d29yaywgd2FsbGV0S2V5cywgdG9UeG5JbnB1dFNjcmlwdFR5cGUodHlwZSksIGksIHZhbHVlKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRPdXRwdXRBZGRyZXNzKHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUFkZHJlc3MoY29pbi5uZXR3b3JrLCB7XG4gICAgICAgIGtleWNoYWluczogcm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gKHsgcHViOiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSB9KSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTaWduUGFyYW1zKFxuICAgICAgcHJlYnVpbGRIZXg6IHN0cmluZyxcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBkZWNvZGVXaXRoOiBTZGtCYWNrZW5kIHwgdW5kZWZpbmVkXG4gICAgKTogV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gICAgICBjb25zdCB0eEluZm8gPSB7XG4gICAgICAgIHVuc3BlbnRzOiB0eEZvcm1hdCA9PT0gJ3BzYnQnID8gdW5kZWZpbmVkIDogZ2V0VW5zcGVudHMoKSxcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgd2FsbGV0SWQ6IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kID8gd2FsbGV0LmlkKCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHhIZXg6IHByZWJ1aWxkSGV4LFxuICAgICAgICAgIHR4SW5mbyxcbiAgICAgICAgICBkZWNvZGVXaXRoLFxuICAgICAgICB9LFxuICAgICAgICBwcnY6IHNpZ25lci50b0Jhc2U1OCgpLFxuICAgICAgICBwdWJzOiB3YWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSxcbiAgICAgICAgY29zaWduZXJQdWI6IGNvc2lnbmVyLm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgICAgIH0gYXMgV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZVxuICAgICk6IFByb21pc2U8SGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgICAgbGV0IHNjb3BlOiBub2NrLlNjb3BlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHByZWJ1aWxkIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCAmJiBpc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZCkge1xuICAgICAgICBjb25zdCBwc2J0ID0gcHJlYnVpbGQuY2xvbmUoKS5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKGNvc2lnbmVyKTtcbiAgICAgICAgc2NvcGUgPSBub2NrKGJnVXJsKVxuICAgICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NpZ25wc2J0YCwgKGJvZHkpID0+IGJvZHkucHNidClcbiAgICAgICAgICAucmVwbHkoMjAwLCB7IHBzYnQ6IHBzYnQudG9IZXgoKSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gaGFsZi1zaWduIHdpdGggdGhlIHVzZXIga2V5XG4gICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbihcbiAgICAgICAgZ2V0U2lnblBhcmFtcyhwcmVidWlsZC50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSwgc2lnbmVyLCBjb3NpZ25lciwgZGVjb2RlV2l0aClcbiAgICAgICkpIGFzIFByb21pc2U8SGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj47XG5cbiAgICAgIGlmIChzY29wZSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NvcGUuaXNEb25lKCksIHRydWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihcbiAgICAgIGhhbGZTaWduZWQ6IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gICAgICBzaWduZXI6IEJJUDMySW50ZXJmYWNlLFxuICAgICAgY29zaWduZXI6IEJJUDMySW50ZXJmYWNlXG4gICAgKTogUHJvbWlzZTxGdWxseVNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgICByZXR1cm4gKGF3YWl0IHdhbGxldC5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAuLi5nZXRTaWduUGFyYW1zKGhhbGZTaWduZWQudHhIZXgsIHNpZ25lciwgY29zaWduZXIsIGRlY29kZVdpdGgpLFxuICAgICAgICBpc0xhc3RTaWduYXR1cmU6IHRydWUsXG4gICAgICB9KSkgYXMgRnVsbHlTaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9XG5cbiAgICB0eXBlIFRyYW5zYWN0aW9uU3RhZ2VzID0ge1xuICAgICAgcHJlYnVpbGQ6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHwgdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcbiAgICAgIGhhbGZTaWduZWRVc2VyQmFja3VwPzogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcbiAgICAgIGhhbGZTaWduZWRVc2VyQml0R286IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb247XG4gICAgICBmdWxsU2lnbmVkVXNlckJhY2t1cD86IEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb247XG4gICAgICBmdWxsU2lnbmVkVXNlckJpdEdvPzogRnVsbHlTaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9O1xuXG4gICAgdHlwZSBUcmFuc2FjdGlvbk9ialN0YWdlcyA9IFJlY29yZDxrZXlvZiBUcmFuc2FjdGlvblN0YWdlcywgVHJhbnNhY3Rpb25PYmo+O1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlUHJlYnVpbGRQc2J0KCkge1xuICAgICAgY29uc3QgaW5wdXRzID0gaW5wdXRTY3JpcHRzLm1hcChcbiAgICAgICAgKHQpOiB0ZXN0dXRpbC5JbnB1dCA9PiAoe1xuICAgICAgICAgIHNjcmlwdFR5cGU6IHQsXG4gICAgICAgICAgdmFsdWU6IHQgPT09ICdwMnNoUDJwaycgPyBCaWdJbnQoMTAwMCkgOiBCaWdJbnQodmFsdWUpLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgICAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbXG4gICAgICAgIHsgYWRkcmVzczogZ2V0T3V0cHV0QWRkcmVzcyhnZXRXYWxsZXRLZXlzKCd0ZXN0JykpLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCB3YWxsZXRLZXlzLCAndW5zaWduZWQnKTtcbiAgICAgIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgd2FsbGV0S2V5cyk7XG4gICAgICByZXR1cm4gcHNidDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblN0YWdlcygpOiBQcm9taXNlPFRyYW5zYWN0aW9uU3RhZ2VzPiB7XG4gICAgICBjb25zdCBwcmVidWlsZCA9XG4gICAgICAgIHR4Rm9ybWF0ID09PSAncHNidCdcbiAgICAgICAgICA/IGNyZWF0ZVByZWJ1aWxkUHNidCgpXG4gICAgICAgICAgOiBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uPFROdW1iZXI+KGNvaW4ubmV0d29yaywgZ2V0VW5zcGVudHMoKSwgZ2V0T3V0cHV0QWRkcmVzcyh3YWxsZXRLZXlzKSk7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQml0R28gPSBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJpdEdvID1cbiAgICAgICAgZnVsbFNpZ24gJiYgIWlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMlxuICAgICAgICAgID8gYXdhaXQgY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKGhhbGZTaWduZWRVc2VyQml0R28sIHdhbGxldEtleXMuYml0Z28sIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFVzZXJCYWNrdXAgPVxuICAgICAgICAhaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgJiYgISh0eEZvcm1hdCA9PT0gJ3BzYnQnICYmIGlzVHJhbnNhY3Rpb25XaXRoUDJ0cilcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihwcmVidWlsZCwgd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgZnVsbFNpZ24gJiYgaGFsZlNpZ25lZFVzZXJCYWNrdXBcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJhY2t1cCwgd2FsbGV0S2V5cy5iYWNrdXAsIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlYnVpbGQsXG4gICAgICAgIGhhbGZTaWduZWRVc2VyQmFja3VwLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJpdEdvLFxuICAgICAgICBmdWxsU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCaXRHbyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uU3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcztcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyYW5zYWN0aW9uU3RhZ2VzID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25TdGFnZXMoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChub2NrLmNsZWFuQWxsKTtcblxuICAgIGl0KCdtYXRjaCBmaXh0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNb2NoYS5Db250ZXh0KSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICAvLyBUT0RPIChtYXliZSkgLSBvbmNlIGZ1bGwgUFNCVCBzdXBwb3J0IGlzIGFkZGVkIHRvIGFic3RyYWN0LXV0eG8gbW9kdWxlLCBjdXN0b20gSlNPTiByZXByZXNlbnRhdGlvbiBvZiBQU0JUIGNhbiBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgaGVyZS5cbiAgICAgICAgLy8gc2lnbmF0dXJlcyBvZiB0YXByb290S2V5UGF0aFNwZW5kcyBhcmUgcmFuZG9tIHNpbmNlIHJhbmRvbSBuYXR1cmUgb2YgTXVTaWcyIG5vbmNlLCBzbyBwc2J0IGhleCBjb21wYXJpc29uIGFsc28gd29udCB3b3JrLlxuXG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvblN0YWdlc09iaihzdGFnZXM6IFRyYW5zYWN0aW9uU3RhZ2VzKTogVHJhbnNhY3Rpb25PYmpTdGFnZXMge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMoc3RhZ2VzLCAodikgPT5cbiAgICAgICAgICB2ID09PSB1bmRlZmluZWQgfHwgdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvblxuICAgICAgICAgICAgPyB0cmFuc2FjdGlvblRvT2JqPFROdW1iZXI+KHYpXG4gICAgICAgICAgICA6IHRyYW5zYWN0aW9uSGV4VG9PYmoodi50eEhleCwgY29pbi5uZXR3b3JrLCBhbW91bnRUeXBlKVxuICAgICAgICApIGFzIFRyYW5zYWN0aW9uT2JqU3RhZ2VzO1xuICAgICAgfVxuXG4gICAgICBzaG91bGRFcXVhbEpTT04oXG4gICAgICAgIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmoodHJhbnNhY3Rpb25TdGFnZXMpLFxuICAgICAgICBhd2FpdCBnZXRGaXh0dXJlKFxuICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgYHRyYW5zYWN0aW9ucy0ke2lucHV0U2NyaXB0cy5tYXAoKHQpID0+IHRvVHhuSW5wdXRTY3JpcHRUeXBlKHQpKS5qb2luKCctJyl9YCxcbiAgICAgICAgICB0b1RyYW5zYWN0aW9uU3RhZ2VzT2JqKHRyYW5zYWN0aW9uU3RhZ2VzKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gdGVzdFBzYnRWYWxpZFNpZ25hdHVyZXModHg6IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sIHNpZ25lZEJ5OiBCSVAzMkludGVyZmFjZVtdKSB7XG4gICAgICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eC50eEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gZ2V0VW5zcGVudHNGb3JQc2J0KCk7XG4gICAgICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB1bnNwZW50ID0gdW5zcGVudHNbaW5kZXhdO1xuICAgICAgICBpZiAoIXV0eG9saWIuYml0Z28uaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpKSB7XG4gICAgICAgICAgYXNzZXJ0Lm9rKHV0eG9saWIuYml0Z28uZ2V0UHNidElucHV0U2NyaXB0VHlwZShpbnB1dCksICdwMnNoUDJwaycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24oaW5kZXgsIHBrKS5zaG91bGQuZXFsKHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFZhbGlkU2lnbmF0dXJlcyhcbiAgICAgIHR4OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uIHwgRnVsbHlTaWduZWRUcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lZEJ5OiBCSVAzMkludGVyZmFjZVtdLFxuICAgICAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4gICAgKSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0JyAmJiBzaWduID09PSAnaGFsZnNpZ25lZCcpIHtcbiAgICAgICAgdGVzdFBzYnRWYWxpZFNpZ25hdHVyZXModHgsIHNpZ25lZEJ5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5zcGVudHMgPVxuICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgPyBnZXRVbnNwZW50c0ZvclBzYnQoKS5tYXAoKHUpID0+ICh7IC4uLnUsIHZhbHVlOiBiaXRnby50b1ROdW1iZXIodS52YWx1ZSwgYW1vdW50VHlwZSkgYXMgVE51bWJlciB9KSlcbiAgICAgICAgICA6IGdldFVuc3BlbnRzKCk7XG4gICAgICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcChcbiAgICAgICAgKHUpOiB1dHhvbGliLlR4T3V0cHV0PFROdW1iZXI+ID0+ICh7XG4gICAgICAgICAgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQodS5hZGRyZXNzLCBjb2luLm5ldHdvcmspLFxuICAgICAgICAgIHZhbHVlOiB1LnZhbHVlLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcjxUTnVtYmVyPihcbiAgICAgICAgQnVmZmVyLmZyb20odHgudHhIZXgsICdoZXgnKSxcbiAgICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgICB7IGFtb3VudFR5cGUgfVxuICAgICAgKTtcbiAgICAgIHRyYW5zYWN0aW9uLmlucy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0U2NyaXB0c1tpbmRleF0gPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICBhc3NlcnQub2soY29pbi5pc0JpdEdvVGFpbnRlZFVuc3BlbnQodW5zcGVudHNbaW5kZXhdKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XSBhcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG5cbiAgICAgICAgcHVia2V5cy5mb3JFYWNoKChwaywgcGtJbmRleCkgPT4ge1xuICAgICAgICAgIHV0eG9saWIuYml0Z29cbiAgICAgICAgICAgIC52ZXJpZnlTaWduYXR1cmU8VE51bWJlcj4oXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcHJldk91dHB1dHNbaW5kZXhdLnZhbHVlLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiBwayxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcHJldk91dHB1dHNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zaG91bGQuZXFsKHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gdGVzdEV4cGxhaW5UeChcbiAgICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgICAgdHhIZXg6IHN0cmluZyxcbiAgICAgIHVuc3BlbnRzOiB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgICAgIHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIHVuc3BlbnRzLFxuICAgICAgICB9LFxuICAgICAgICBwdWJzLFxuICAgICAgICBkZWNvZGVXaXRoLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJvcGVydGllcyA9IFsnaWQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRBbW91bnQnXTtcblxuICAgICAgaWYgKGRlY29kZVdpdGggIT09ICd3YXNtLXV0eG8nKSB7XG4gICAgICAgIGV4cGVjdGVkUHJvcGVydGllcy5wdXNoKCdkaXNwbGF5T3JkZXInLCAnaW5wdXRTaWduYXR1cmVzJywgJ3NpZ25hdHVyZXMnKTtcbiAgICAgIH1cblxuICAgICAgZXhwbGFuYXRpb24uc2hvdWxkLmhhdmUucHJvcGVydGllcyguLi5leHBlY3RlZFByb3BlcnRpZXMpO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25hdHVyZUNvdW50ID1cbiAgICAgICAgc3RhZ2VOYW1lID09PSAncHJlYnVpbGQnIHx8IHB1YnMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2hhbGZTaWduZWQnKVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2Z1bGxTaWduZWQnKVxuICAgICAgICAgID8gMlxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoJ2lucHV0U2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgZXhwbGFuYXRpb24uaW5wdXRTaWduYXR1cmVzLnNob3VsZC5lcWwoXG4gICAgICAgICAgLy8gRklYTUUoQkctMzUxNTQpOiBpbXBsZW1lbnQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmb3IgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzXG4gICAgICAgICAgaW5wdXRTY3JpcHRzLm1hcCgodHlwZSkgPT4gKHR5cGUgPT09ICdwMnNoUDJwaycgPyAwIDogZXhwZWN0ZWRTaWduYXR1cmVDb3VudCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoJ3NpZ25hdHVyZXMnIGluIGV4cGxhbmF0aW9uKSB7XG4gICAgICAgIGV4cGxhbmF0aW9uLnNpZ25hdHVyZXMuc2hvdWxkLmVxbChleHBlY3RlZFNpZ25hdHVyZUNvdW50KTtcbiAgICAgICAgZXhwbGFuYXRpb24uY2hhbmdlQW1vdW50LnNob3VsZC5lcWwoJzAnKTsgLy8gbm8gY2hhbmdlIGFkZHJlc3NlcyBnaXZlblxuICAgICAgfVxuICAgICAgbGV0IGV4cGVjdGVkT3V0cHV0QW1vdW50ID1cbiAgICAgICAgQmlnSW50KCh0eEZvcm1hdCA9PT0gJ3BzYnQnID8gZ2V0VW5zcGVudHNGb3JQc2J0KCkgOiBnZXRVbnNwZW50cygpKS5sZW5ndGgpICogQmlnSW50KHZhbHVlKTtcbiAgICAgIGlucHV0U2NyaXB0cy5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgICAgLy8gcmVwbGF5UHJvdGVjdGlvbiB1bnNwZW50cyBoYXZlIHZhbHVlIDEwMDBcbiAgICAgICAgICBleHBlY3RlZE91dHB1dEFtb3VudCAtPSBCaWdJbnQodmFsdWUpO1xuICAgICAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50ICs9IEJpZ0ludCgxMDAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBleHBlY3RlZE91dHB1dEFtb3VudCAtPSBCaWdJbnQoMTAwMCk7IC8vIGZlZSBvZiAxMDAwXG4gICAgICBleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxbChleHBlY3RlZE91dHB1dEFtb3VudC50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBpdCgnaGF2ZSB2YWxpZCBzaWduYXR1cmUgZm9yIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQmFja3VwKSB7XG4gICAgICAgIHRlc3RWYWxpZFNpZ25hdHVyZXModHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXAsIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyXSwgJ2hhbGZzaWduZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZXMgZm9yIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFmdWxsU2lnbikge1xuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXBdLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28pIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJpdGdvXSwgJ2Z1bGxzaWduZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIGNvcnJlY3QgcmVzdWx0cyBmb3IgZXhwbGFpblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBbc3RhZ2VOYW1lLCBzdGFnZVR4XSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2FjdGlvblN0YWdlcykpIHtcbiAgICAgICAgaWYgKCFzdGFnZVR4KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICAgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHN0YWdlVHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeC50eEhleDtcblxuICAgICAgICBjb25zdCBwdWJzID0gd2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICAgIGNvbnN0IHVuc3BlbnRzID1cbiAgICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgICA/IGdldFVuc3BlbnRzRm9yUHNidCgpLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IGJpdGdvLnRvVE51bWJlcih1LnZhbHVlLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyIH0pKVxuICAgICAgICAgICAgOiBnZXRVbnNwZW50cygpO1xuICAgICAgICBhd2FpdCB0ZXN0RXhwbGFpblR4KHN0YWdlTmFtZSwgdHhIZXgsIHVuc3BlbnRzLCBwdWJzKTtcbiAgICAgICAgaWYgKGRlY29kZVdpdGggIT09ICd3YXNtLXV0eG8nKSB7XG4gICAgICAgICAgYXdhaXQgdGVzdEV4cGxhaW5UeChzdGFnZU5hbWUsIHR4SGV4LCB1bnNwZW50cywgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuVGVzdEZvckNvaW4oY29pbjogQWJzdHJhY3RVdHhvQ29pbikge1xuICBnZXRTY3JpcHRUeXBlczJPZjMoKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgKFsnbGVnYWN5JywgJ3BzYnQnXSBhcyBjb25zdCkuZm9yRWFjaCgodHhGb3JtYXQpID0+IHtcbiAgICAgIGlmICghY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKHR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IHR5cGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0eXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHwgdHlwZSA9PT0gJ3AydHJNdXNpZzInKSAmJiB0eEZvcm1hdCAhPT0gJ3BzYnQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcnVuKGNvaW4sIFt0eXBlLCB0eXBlXSwgdHhGb3JtYXQpO1xuICAgICAgaWYgKGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMoY29pbi5uZXR3b3JrKS5sZW5ndGgpIHtcbiAgICAgICAgcnVuKGNvaW4sIFsncDJzaFAycGsnLCB0eXBlXSwgdHhGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0JyAmJiBoYXNXYXNtVXR4b1N1cHBvcnQoY29pbi5uZXR3b3JrKSkge1xuICAgICAgICBydW4oY29pbiwgW3R5cGUsIHR5cGVdLCB0eEZvcm1hdCwgeyBkZWNvZGVXaXRoOiAnd2FzbS11dHhvJyB9KTtcbiAgICAgICAgaWYgKGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMoY29pbi5uZXR3b3JrKS5sZW5ndGgpIHtcbiAgICAgICAgICBydW4oY29pbiwgWydwMnNoUDJwaycsIHR5cGVdLCB0eEZvcm1hdCwgeyBkZWNvZGVXaXRoOiAnd2FzbS11dHhvJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFN1aXRlJywgZnVuY3Rpb24gKCkge1xuICB1dHhvQ29pbnMuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW4uZ2V0Q2hhaW4oKX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICBydW5UZXN0Rm9yQ29pbihjb2luKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
528
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpQkFBZTtBQUNmLCtDQUFpQztBQUVqQywwQ0FBNEI7QUFDNUIsOERBQWdEO0FBQ2hELDZCQUE4QjtBQUM5QixtREFBdUU7QUFDdkUsbURBTThCO0FBRTlCLG1DQUF3SDtBQUd4SCx5REFBb0U7QUFDcEUsaUNBZ0JnQjtBQUtoQixTQUFTLGtCQUFrQjtJQUN6QixPQUFPLENBQUMsR0FBRyxnQkFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUscUJBQXFCLENBQVUsQ0FBQztBQUNsRixDQUFDO0FBRUQsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEtBQUs7SUFDekMsTUFBTSxLQUFLLEdBQUcsaUJBQU0sQ0FBQyxZQUFZLENBQUMsbUJBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUU3RCxNQUFNLElBQUksR0FBRyxJQUFBLGtCQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxrQ0FBa0MsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RyxNQUFNLGNBQWMsR0FBRyxJQUFBLDJCQUFvQixHQUFFLENBQUM7SUFDOUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxzQkFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBbUIsQ0FBQztJQUVqRSxTQUFTLFlBQVksQ0FBQyxLQUFhLEVBQUUsY0FB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QyxDQUFDO1lBRUQsSUFBSSxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUEseUJBQWtCLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzVELEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELElBQUksSUFBQSxrQ0FBNEIsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RELEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7SUFDNUIsZ0JBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN6QixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUM3QixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBiaXRnbywgdGVzdHV0aWwgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQge1xuICBjb21tb24sXG4gIEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24sXG4gIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gIFRyaXBsZSxcbiAgV2FsbGV0U2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzLCBnZW5lcmF0ZUFkZHJlc3MsIGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IFNka0JhY2tlbmQgfSBmcm9tICcuLi8uLi9zcmMvdHJhbnNhY3Rpb24vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNXYXNtVXR4b1N1cHBvcnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3V0aWwnO1xuaW1wb3J0IHtcbiAgdXR4b0NvaW5zLFxuICBzaG91bGRFcXVhbEpTT04sXG4gIGdldEZpeHR1cmUsXG4gIGdldFV0eG9XYWxsZXQsXG4gIG1vY2tVbnNwZW50LFxuICBJbnB1dFNjcmlwdFR5cGUsXG4gIFRyYW5zYWN0aW9uT2JqLFxuICB0cmFuc2FjdGlvblRvT2JqLFxuICB0cmFuc2FjdGlvbkhleFRvT2JqLFxuICBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uLFxuICBnZXREZWZhdWx0V2FsbGV0S2V5cyxcbiAgZ2V0VXR4b0NvaW4sXG4gIGtleWNoYWluc0Jhc2U1OCxcbiAgZ2V0V2FsbGV0S2V5cyxcbiAgZGVmYXVsdEJpdEdvLFxufSBmcm9tICcuL3V0aWwnO1xuXG50eXBlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBiaXRnby5VbnNwZW50PFROdW1iZXI+O1xudHlwZSBXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gYml0Z28uV2FsbGV0VW5zcGVudDxUTnVtYmVyPjtcblxuZnVuY3Rpb24gZ2V0U2NyaXB0VHlwZXMyT2YzKCkge1xuICByZXR1cm4gWy4uLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLCAndGFwcm9vdEtleVBhdGhTcGVuZCddIGFzIGNvbnN0O1xufVxuXG5kZXNjcmliZShgVVRYTyBjb2luIHNpZ25UcmFuc2FjdGlvbmAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYmdVcmwgPSBjb21tb24uRW52aXJvbm1lbnRzW2RlZmF1bHRCaXRHby5nZXRFbnYoKV0udXJpO1xuXG4gIGNvbnN0IGNvaW4gPSBnZXRVdHhvQ29pbignYnRjJyk7XG4gIGNvbnN0IHdhbGxldCA9IGdldFV0eG9XYWxsZXQoY29pbiwgeyBpZDogJzViMzQyNTJmMWJmMzQ5OTMwZTM0MDIwYTAwMDAwMDAwJywgY29pbjogY29pbi5nZXRDaGFpbigpIH0pO1xuICBjb25zdCByb290V2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gIGNvbnN0IHVzZXJQcnYgPSByb290V2FsbGV0S2V5cy51c2VyLnRvQmFzZTU4KCk7XG4gIGNvbnN0IHB1YnMgPSBrZXljaGFpbnNCYXNlNTgubWFwKCh2KSA9PiB2LnB1YikgYXMgVHJpcGxlPHN0cmluZz47XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVQc2J0KHR4SGV4OiBzdHJpbmcsIHRhcmdldFNpZ0NvdW50OiAwIHwgMSwgdGFyZ2V0Tm9uY2VDb3VudD86IDEgfCAyKSB7XG4gICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgodHhIZXgsIGNvaW4ubmV0d29yayk7XG4gICAgcHNidC5kYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHV0eG9saWIuYml0Z28ucGFyc2VQc2J0SW5wdXQoaW5wdXQpO1xuICAgICAgaWYgKHBhcnNlZC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICAgICAgYXNzZXJ0Lm9rKHRhcmdldE5vbmNlQ291bnQpO1xuICAgICAgICBjb25zdCBub25jZSA9IHBzYnQuZ2V0UHJvcHJpZXRhcnlLZXlWYWxzKGluZGV4LCB7XG4gICAgICAgICAgaWRlbnRpZmllcjogdXR4b2xpYi5iaXRnby5QU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIsXG4gICAgICAgICAgc3VidHlwZTogdXR4b2xpYi5iaXRnby5Qcm9wcmlldGFyeUtleVN1YnR5cGUuTVVTSUcyX1BVQl9OT05DRSxcbiAgICAgICAgfSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChub25jZS5sZW5ndGgsIHRhcmdldE5vbmNlQ291bnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwZWN0ZWRTaWdDb3VudCA9IHBhcnNlZC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnIHx8IHRhcmdldFNpZ0NvdW50ID09PSAwID8gdW5kZWZpbmVkIDogMTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQuc2lnbmF0dXJlcz8ubGVuZ3RoLCBleHBlY3RlZFNpZ0NvdW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlVHgodHhIZXg6IHN0cmluZywgdW5zcGVudHM6IFVuc3BlbnQ8YmlnaW50PltdLCB0YXJnZXRTaWdDb3VudDogMCB8IDEpIHtcbiAgICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4KHR4SGV4LCBjb2luLm5ldHdvcmspO1xuICAgIHVuc3BlbnRzLmZvckVhY2goKHUsIGkpID0+IHtcbiAgICAgIGNvbnN0IHNpZ0NvdW50ID0gdXR4b2xpYi5iaXRnby5nZXRTdHJpY3RTaWduYXR1cmVDb3VudCh0eC5pbnNbaV0pO1xuICAgICAgY29uc3QgZXhwZWN0ZWRTaWdDb3VudCA9IHV0eG9saWIuYml0Z28uaXNXYWxsZXRVbnNwZW50KHUpICYmICEhdGFyZ2V0U2lnQ291bnQgPyAxIDogMDtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdDb3VudCwgZXhwZWN0ZWRTaWdDb3VudCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzaWduVHJhbnNhY3Rpb24oXG4gICAgdHg6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICAgIHVzZVNpZ25pbmdTdGVwczogYm9vbGVhbixcbiAgICB1bnNwZW50cz86IFVuc3BlbnQ8YmlnaW50PltdXG4gICkge1xuICAgIGNvbnN0IGlzUHNidCA9IHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcbiAgICBjb25zdCBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPSBpc1BzYnQgJiYgdXR4b2xpYi5iaXRnby5pc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZElucHV0KHR4KTtcbiAgICBjb25zdCB0eEhleCA9IHR4LnRvSGV4KCk7XG5cbiAgICBmdW5jdGlvbiBub2NrU2lnblBzYnQocHNidEhleDogc3RyaW5nKTogbm9jay5TY29wZSB7XG4gICAgICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleChwc2J0SGV4LCBjb2luLm5ldHdvcmspO1xuICAgICAgcmV0dXJuIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L3R4L3NpZ25wc2J0YCwgKGJvZHkpID0+IGJvZHkucHNidClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyBwc2J0OiBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMuYml0Z28pLnRvSGV4KCkgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VTaWduaW5nU3RlcHMpIHtcbiAgICAgIGxldCBzY29wZTogbm9jay5TY29wZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgJiYgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kKSB7XG4gICAgICAgIHNjb3BlID0gbm9ja1NpZ25Qc2J0KHR4LmNsb25lKCkuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy5iaXRnbykudG9IZXgoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBwc2J0ID0gYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXgsXG4gICAgICAgICAgdHhJbmZvOiBpc1BzYnQgPyB1bmRlZmluZWQgOiB7IHVuc3BlbnRzIH0sXG4gICAgICAgICAgd2FsbGV0SWQ6IGlzVHhXaXRoVGFwcm9vdEtleVBhdGhTcGVuZCA/IHdhbGxldC5pZCgpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICAgIHB1YnM6IGlzUHNidCA/IHVuZGVmaW5lZCA6IHB1YnMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5vaygndHhIZXgnIGluIHBzYnQpO1xuICAgICAgaWYgKGlzUHNidCkge1xuICAgICAgICB2YWxpZGF0ZVBzYnQocHNidC50eEhleCwgMSwgMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQub2sodW5zcGVudHMpO1xuICAgICAgICB2YWxpZGF0ZVR4KHBzYnQudHhIZXgsIHVuc3BlbnRzLCAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzY29wZSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NvcGUuaXNEb25lKCksIHRydWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lck5vbmNlUHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgIHBydjogdXNlclBydixcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIHNpZ25lck5vbmNlUHNidCk7XG4gICAgaWYgKGlzUHNidCkge1xuICAgICAgdmFsaWRhdGVQc2J0KHNpZ25lck5vbmNlUHNidC50eEhleCwgMCwgaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kID8gMSA6IHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5vayh1bnNwZW50cyk7XG4gICAgICB2YWxpZGF0ZVR4KHNpZ25lck5vbmNlUHNidC50eEhleCwgdW5zcGVudHMsIDApO1xuICAgIH1cblxuICAgIGxldCBzY29wZTogbm9jay5TY29wZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNUeFdpdGhUYXByb290S2V5UGF0aFNwZW5kKSB7XG4gICAgICBzY29wZSA9IG5vY2tTaWduUHNidChzaWduZXJOb25jZVBzYnQudHhIZXgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvc2lnbmVyTm9uY2VQc2J0ID0gYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduZXJOb25jZVBzYnQsIHdhbGxldElkOiB3YWxsZXQuaWQoKSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJyxcbiAgICB9KTtcbiAgICBhc3NlcnQub2soJ3R4SGV4JyBpbiBjb3NpZ25lck5vbmNlUHNidCk7XG4gICAgaWYgKGlzUHNidCkge1xuICAgICAgdmFsaWRhdGVQc2J0KGNvc2lnbmVyTm9uY2VQc2J0LnR4SGV4LCAwLCBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyAyIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgIHZhbGlkYXRlVHgoY29zaWduZXJOb25jZVBzYnQudHhIZXgsIHVuc3BlbnRzLCAwKTtcbiAgICB9XG5cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVyU2lnUHNidCA9IGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uY29zaWduZXJOb25jZVBzYnQsIHR4SW5mbzogaXNQc2J0ID8gdW5kZWZpbmVkIDogeyB1bnNwZW50cyB9IH0sXG4gICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICBwdWJzOiBpc1BzYnQgPyB1bmRlZmluZWQgOiBwdWJzLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgIH0pO1xuICAgIGFzc2VydC5vaygndHhIZXgnIGluIHNpZ25lclNpZ1BzYnQpO1xuICAgIGlmIChpc1BzYnQpIHtcbiAgICAgIHZhbGlkYXRlUHNidChzaWduZXJTaWdQc2J0LnR4SGV4LCAxLCBpc1R4V2l0aFRhcHJvb3RLZXlQYXRoU3BlbmQgPyAyIDogdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm9rKHVuc3BlbnRzKTtcbiAgICAgIHZhbGlkYXRlVHgoc2lnbmVyU2lnUHNidC50eEhleCwgdW5zcGVudHMsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGl0KCdzdWNjZXNzIHdoZW4gY2FsbGVkIGxpa2UgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGZsb3cgLSBQU0JUIHdpdGggdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gdGVzdHV0aWwuaW5wdXRTY3JpcHRUeXBlcy5tYXAoKHNjcmlwdFR5cGUpID0+ICh7XG4gICAgICBzY3JpcHRUeXBlLFxuICAgICAgdmFsdWU6IEJpZ0ludCgxMDAwKSxcbiAgICB9KSk7XG4gICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0czogdGVzdHV0aWwuT3V0cHV0W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHBzYnQgPSB0ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cywgJ3Vuc2lnbmVkJywge1xuICAgICAgcDJzaFAycGtLZXk6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW4ubmV0d29yaylbMF0sXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgYXdhaXQgc2lnblRyYW5zYWN0aW9uKHBzYnQsIHYpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3N1Y2Nlc3Mgd2hlbiBjYWxsZWQgbGlrZSBjdXN0b21TaWduaW5nRnVuY3Rpb24gZmxvdyAtIFBTQlQgd2l0aG91dCB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLklucHV0W10gPSB0ZXN0dXRpbC5pbnB1dFNjcmlwdFR5cGVzXG4gICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpXG4gICAgICAubWFwKChzY3JpcHRUeXBlKSA9PiAoe1xuICAgICAgICBzY3JpcHRUeXBlLFxuICAgICAgICB2YWx1ZTogQmlnSW50KDEwMDApLFxuICAgICAgfSkpO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cikgPT4gcHJldiArIGN1ci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoMTAwMCkgfV07XG4gICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnKTtcblxuICAgIGZvciAoY29uc3QgdiBvZiBbZmFsc2UsIHRydWVdKSB7XG4gICAgICBhd2FpdCBzaWduVHJhbnNhY3Rpb24ocHNidCwgdik7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc3VjY2VzcyB3aGVuIGNhbGxlZCBsaWtlIGN1c3RvbVNpZ25pbmdGdW5jdGlvbiBmbG93IC0gTmV0d29yayBUeCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLlR4bklucHV0PGJpZ2ludD5bXSA9IHRlc3R1dGlsLnR4bklucHV0U2NyaXB0VHlwZXNcbiAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT09ICdwMnNoUDJwaycpXG4gICAgICAubWFwKChzY3JpcHRUeXBlKSA9PiAoe1xuICAgICAgICBzY3JpcHRUeXBlLFxuICAgICAgICB2YWx1ZTogQmlnSW50KDEwMDApLFxuICAgICAgfSkpO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLlR4bk91dHB1dDxiaWdpbnQ+W10gPSBbeyBzY3JpcHRUeXBlOiAncDJzaCcsIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRlc3R1dGlsLmNvbnN0cnVjdFR4bkJ1aWxkZXIoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzLCAndW5zaWduZWQnKTtcbiAgICBjb25zdCB1bnNwZW50cyA9IGlucHV0cy5tYXAoKHYsIGkpID0+IHRlc3R1dGlsLnRvVHhuVW5zcGVudCh2LCBpLCBjb2luLm5ldHdvcmssIHJvb3RXYWxsZXRLZXlzKSk7XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgYXdhaXQgc2lnblRyYW5zYWN0aW9uKHR4QnVpbGRlci5idWlsZEluY29tcGxldGUoKSwgdiwgdW5zcGVudHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIHdoZW4gY2FsbGVkIGxpa2UgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGZsb3cgLSBQU0JUIGNhY2hlIG1pc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW5wdXRzOiB0ZXN0dXRpbC5JbnB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3RhcHJvb3RLZXlQYXRoU3BlbmQnLCB2YWx1ZTogQmlnSW50KDEwMDApIH1dO1xuICAgIGNvbnN0IHVuc3BlbnRTdW0gPSBpbnB1dHMucmVkdWNlKChwcmV2OiBiaWdpbnQsIGN1cnIpID0+IHByZXYgKyBjdXJyLnZhbHVlLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dHM6IHRlc3R1dGlsLk91dHB1dFtdID0gW3sgc2NyaXB0VHlwZTogJ3Ayc2gnLCB2YWx1ZTogdW5zcGVudFN1bSAtIEJpZ0ludCgxMDAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGNvaW4uc2lnblRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiBwc2J0LnRvSGV4KCkgfSxcbiAgICAgICAgICBwcnY6IHVzZXJQcnYsXG4gICAgICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1lc3NhZ2U6IGBQc2J0IGlzIG1pc3NpbmcgZnJvbSB0eENhY2hlIChjYWNoZSBzaXplIDApLlxuICAgICAgICAgICAgVGhpcyBtYXkgYmUgZHVlIHRvIHRoZSByZXF1ZXN0IGJlaW5nIHJvdXRlZCB0byBhIGRpZmZlcmVudCBCaXRHby1FeHByZXNzIGluc3RhbmNlIHRoYXQgZm9yIHNpZ25pbmcgc3RlcCAnc2lnbmVyTm9uY2UnLmAsXG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIHdoZW4gdW5zdXBwb3J0ZWQgbG9ja2luZyBzY3JpcHQgaXMgdXNlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnB1dHM6IHRlc3R1dGlsLklucHV0W10gPSBbXG4gICAgICB7IHNjcmlwdFR5cGU6ICdwMndzaCcsIHZhbHVlOiBCaWdJbnQoMTAwMCkgfSxcbiAgICAgIHsgc2NyaXB0VHlwZTogJ3AydHJNdXNpZzInLCB2YWx1ZTogQmlnSW50KDEwMDApIH0sXG4gICAgXTtcbiAgICBjb25zdCB1bnNwZW50U3VtID0gaW5wdXRzLnJlZHVjZSgocHJldjogYmlnaW50LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci52YWx1ZSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFt7IHNjcmlwdFR5cGU6ICdwMnNoJywgdmFsdWU6IHVuc3BlbnRTdW0gLSBCaWdJbnQoNTAwKSB9XTtcbiAgICBjb25zdCBwc2J0ID0gdGVzdHV0aWwuY29uc3RydWN0UHNidChpbnB1dHMsIG91dHB1dHMsIGNvaW4ubmV0d29yaywgcm9vdFdhbGxldEtleXMsICd1bnNpZ25lZCcpO1xuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIDFzdCBQU0JUIGlucHV0IHdpdGggdW5zdXBwb3J0ZWQgMiBvZiAyIG11bHRpLXNpZyBsb2NraW5nIHNjcmlwdC5cbiAgICBjb25zdCB1bnNwZW50ID0gdGVzdHV0aWwudG9VbnNwZW50KGlucHV0c1swXSwgMCwgY29pbi5uZXR3b3JrLCByb290V2FsbGV0S2V5cyk7XG4gICAgaWYgKCF1dHhvbGliLmJpdGdvLmlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVuc3BlbnQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBwdWJsaWNLZXlzIH0gPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdDJPZjIgPSB1dHhvbGliLnBheW1lbnRzLnAybXMoeyBtOiAyLCBwdWJrZXlzOiBbcHVibGljS2V5c1swXSwgcHVibGljS2V5c1sxXV0gfSk7XG4gICAgcHNidC5kYXRhLmlucHV0c1swXS53aXRuZXNzU2NyaXB0ID0gc2NyaXB0Mk9mMi5vdXRwdXQ7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6IHBzYnQudG9IZXgoKSB9LFxuICAgICAgICAgIHBydjogdXNlclBydixcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBtZXNzYWdlOiBgbGVuZ3RoIG1pc21hdGNoYCxcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBydW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGlucHV0U2NyaXB0czogdGVzdHV0aWwuSW5wdXRTY3JpcHRUeXBlW10sXG4gIHR4Rm9ybWF0OiAnbGVnYWN5JyB8ICdwc2J0JyxcbiAgeyBkZWNvZGVXaXRoIH06IHsgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQgfSA9IHt9XG4pIHtcbiAgY29uc3QgYW1vdW50VHlwZSA9IGNvaW4uYW1vdW50VHlwZTtcbiAgY29uc3QgdGl0bGUgPSBbXG4gICAgaW5wdXRTY3JpcHRzLmpvaW4oJywnKSxcbiAgICBgdHhGb3JtYXQ9JHt0eEZvcm1hdH1gLFxuICAgIGBhbW91bnRUeXBlPSR7YW1vdW50VHlwZX1gLFxuICAgIGRlY29kZVdpdGggPyBgZGVjb2RlV2l0aD0ke2RlY29kZVdpdGh9YCA6ICcnLFxuICBdO1xuICBkZXNjcmliZShgJHt0aXRsZS5qb2luKCcgJyl9YCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJnVXJsID0gY29tbW9uLkVudmlyb25tZW50c1tkZWZhdWx0Qml0R28uZ2V0RW52KCldLnVyaTtcblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyk7XG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uID0gaW5wdXRTY3JpcHRzLnNvbWUoKHMpID0+IHMgPT09ICdwMnNoUDJwaycpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ciA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0cicpO1xuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMiA9IGlucHV0U2NyaXB0cy5zb21lKChzKSA9PiBzID09PSAncDJ0ck11c2lnMicpO1xuXG4gICAgY29uc3QgdmFsdWUgPSAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBCaWdJbnQoJzEwOTk5OTk5ODAwMDAwMDAxJykgOiAxZTgpIGFzIFROdW1iZXI7XG4gICAgY29uc3Qgd2FsbGV0ID0gZ2V0VXR4b1dhbGxldChjb2luLCB7IGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhMDAwMDAwMDAnLCBjb2luOiBjb2luLmdldENoYWluKCkgfSk7XG4gICAgY29uc3Qgd2FsbGV0S2V5cyA9IGdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG5cbiAgICBjb25zdCBmdWxsU2lnbiA9ICEoaXNUcmFuc2FjdGlvbldpdGhSZXBsYXlQcm90ZWN0aW9uIHx8IGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKTtcblxuICAgIGZ1bmN0aW9uIGdldFVuc3BlbnRzRm9yUHNidCgpOiBVbnNwZW50PGJpZ2ludD5bXSB7XG4gICAgICByZXR1cm4gaW5wdXRTY3JpcHRzLm1hcCgodCwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRlc3R1dGlsLnRvVW5zcGVudChcbiAgICAgICAgICB7IHNjcmlwdFR5cGU6IHQsIHZhbHVlOiB0ID09PSAncDJzaFAycGsnID8gQmlnSW50KDEwMDApIDogQmlnSW50KHZhbHVlKSB9LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGNvaW4ubmV0d29yayxcbiAgICAgICAgICB3YWxsZXRLZXlzXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b1R4bklucHV0U2NyaXB0VHlwZSh0eXBlOiB0ZXN0dXRpbC5JbnB1dFNjcmlwdFR5cGUpOiBJbnB1dFNjcmlwdFR5cGUge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICdwMnNoUDJwaycgPyAncmVwbGF5UHJvdGVjdGlvbicgOiB0eXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiB0eXBlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFVuc3BlbnRzKCk6IFVuc3BlbnQ8VE51bWJlcj5bXSB7XG4gICAgICByZXR1cm4gaW5wdXRTY3JpcHRzLm1hcCgodHlwZSwgaSkgPT5cbiAgICAgICAgbW9ja1Vuc3BlbnQ8VE51bWJlcj4oY29pbi5uZXR3b3JrLCB3YWxsZXRLZXlzLCB0b1R4bklucHV0U2NyaXB0VHlwZSh0eXBlKSwgaSwgdmFsdWUpXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldE91dHB1dEFkZHJlc3Mocm9vdFdhbGxldEtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQWRkcmVzcyhjb2luLm5ldHdvcmssIHtcbiAgICAgICAga2V5Y2hhaW5zOiByb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiAoeyBwdWI6IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNpZ25QYXJhbXMoXG4gICAgICBwcmVidWlsZEhleDogc3RyaW5nLFxuICAgICAgc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGNvc2lnbmVyOiBCSVAzMkludGVyZmFjZSxcbiAgICAgIGRlY29kZVdpdGg6IFNka0JhY2tlbmQgfCB1bmRlZmluZWRcbiAgICApOiBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgICAgIGNvbnN0IHR4SW5mbyA9IHtcbiAgICAgICAgdW5zcGVudHM6IHR4Rm9ybWF0ID09PSAncHNidCcgPyB1bmRlZmluZWQgOiBnZXRVbnNwZW50cygpLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB3YWxsZXRJZDogaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgPyB3YWxsZXQuaWQoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0eEhleDogcHJlYnVpbGRIZXgsXG4gICAgICAgICAgdHhJbmZvLFxuICAgICAgICAgIGRlY29kZVdpdGgsXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogc2lnbmVyLnRvQmFzZTU4KCksXG4gICAgICAgIHB1YnM6IHdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpLFxuICAgICAgICBjb3NpZ25lclB1YjogY29zaWduZXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgICAgfSBhcyBXYWxsZXRTaWduVHJhbnNhY3Rpb25PcHRpb25zO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihcbiAgICAgIHByZWJ1aWxkOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsXG4gICAgICBzaWduZXI6IEJJUDMySW50ZXJmYWNlLFxuICAgICAgY29zaWduZXI6IEJJUDMySW50ZXJmYWNlXG4gICAgKTogUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPiB7XG4gICAgICBsZXQgc2NvcGU6IG5vY2suU2NvcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlYnVpbGQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0ICYmIGlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kKSB7XG4gICAgICAgIGNvbnN0IHBzYnQgPSBwcmVidWlsZC5jbG9uZSgpLnNldEFsbElucHV0c011c2lnMk5vbmNlSEQoY29zaWduZXIpO1xuICAgICAgICBzY29wZSA9IG5vY2soYmdVcmwpXG4gICAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2lnbnBzYnRgLCAoYm9keSkgPT4gYm9keS5wc2J0KVxuICAgICAgICAgIC5yZXBseSgyMDAsIHsgcHNidDogcHNidC50b0hleCgpIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBoYWxmLXNpZ24gd2l0aCB0aGUgdXNlciBrZXlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB3YWxsZXQuc2lnblRyYW5zYWN0aW9uKFxuICAgICAgICBnZXRTaWduUGFyYW1zKHByZWJ1aWxkLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLCBzaWduZXIsIGNvc2lnbmVyLCBkZWNvZGVXaXRoKVxuICAgICAgKSkgYXMgUHJvbWlzZTxIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPjtcblxuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY29wZS5pc0RvbmUoKSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKFxuICAgICAgaGFsZlNpZ25lZDogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lcjogQklQMzJJbnRlcmZhY2UsXG4gICAgICBjb3NpZ25lcjogQklQMzJJbnRlcmZhY2VcbiAgICApOiBQcm9taXNlPEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICAgIHJldHVybiAoYXdhaXQgd2FsbGV0LnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIC4uLmdldFNpZ25QYXJhbXMoaGFsZlNpZ25lZC50eEhleCwgc2lnbmVyLCBjb3NpZ25lciwgZGVjb2RlV2l0aCksXG4gICAgICAgIGlzTGFzdFNpZ25hdHVyZTogdHJ1ZSxcbiAgICAgIH0pKSBhcyBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIHR5cGUgVHJhbnNhY3Rpb25TdGFnZXMgPSB7XG4gICAgICBwcmVidWlsZDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj4gfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgICAgaGFsZlNpZ25lZFVzZXJCYWNrdXA/OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uO1xuICAgICAgaGFsZlNpZ25lZFVzZXJCaXRHbzogSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQmFja3VwPzogRnVsbHlTaWduZWRUcmFuc2FjdGlvbjtcbiAgICAgIGZ1bGxTaWduZWRVc2VyQml0R28/OiBGdWxseVNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH07XG5cbiAgICB0eXBlIFRyYW5zYWN0aW9uT2JqU3RhZ2VzID0gUmVjb3JkPGtleW9mIFRyYW5zYWN0aW9uU3RhZ2VzLCBUcmFuc2FjdGlvbk9iaj47XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQcmVidWlsZFBzYnQoKSB7XG4gICAgICBjb25zdCBpbnB1dHMgPSBpbnB1dFNjcmlwdHMubWFwKFxuICAgICAgICAodCk6IHRlc3R1dGlsLklucHV0ID0+ICh7XG4gICAgICAgICAgc2NyaXB0VHlwZTogdCxcbiAgICAgICAgICB2YWx1ZTogdCA9PT0gJ3Ayc2hQMnBrJyA/IEJpZ0ludCgxMDAwKSA6IEJpZ0ludCh2YWx1ZSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY29uc3QgdW5zcGVudFN1bSA9IGlucHV0cy5yZWR1Y2UoKHByZXY6IGJpZ2ludCwgY3VycikgPT4gcHJldiArIGN1cnIudmFsdWUsIEJpZ0ludCgwKSk7XG4gICAgICBjb25zdCBvdXRwdXRzOiB0ZXN0dXRpbC5PdXRwdXRbXSA9IFtcbiAgICAgICAgeyBhZGRyZXNzOiBnZXRPdXRwdXRBZGRyZXNzKGdldFdhbGxldEtleXMoJ3Rlc3QnKSksIHZhbHVlOiB1bnNwZW50U3VtIC0gQmlnSW50KDEwMDApIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcHNidCA9IHRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoaW5wdXRzLCBvdXRwdXRzLCBjb2luLm5ldHdvcmssIHdhbGxldEtleXMsICd1bnNpZ25lZCcsIHtcbiAgICAgICAgcDJzaFAycGtLZXk6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW4ubmV0d29yaylbMF0sXG4gICAgICB9KTtcbiAgICAgIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgd2FsbGV0S2V5cyk7XG4gICAgICByZXR1cm4gcHNidDtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvblN0YWdlcygpOiBQcm9taXNlPFRyYW5zYWN0aW9uU3RhZ2VzPiB7XG4gICAgICBjb25zdCBwcmVidWlsZCA9XG4gICAgICAgIHR4Rm9ybWF0ID09PSAncHNidCdcbiAgICAgICAgICA/IGNyZWF0ZVByZWJ1aWxkUHNidCgpXG4gICAgICAgICAgOiBjcmVhdGVQcmVidWlsZFRyYW5zYWN0aW9uPFROdW1iZXI+KGNvaW4ubmV0d29yaywgZ2V0VW5zcGVudHMoKSwgZ2V0T3V0cHV0QWRkcmVzcyh3YWxsZXRLZXlzKSk7XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRVc2VyQml0R28gPSBhd2FpdCBjcmVhdGVIYWxmU2lnbmVkVHJhbnNhY3Rpb24ocHJlYnVpbGQsIHdhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVXNlckJpdEdvID1cbiAgICAgICAgZnVsbFNpZ24gJiYgIWlzVHJhbnNhY3Rpb25XaXRoUDJ0ck11c2lnMlxuICAgICAgICAgID8gYXdhaXQgY3JlYXRlRnVsbFNpZ25lZFRyYW5zYWN0aW9uKGhhbGZTaWduZWRVc2VyQml0R28sIHdhbGxldEtleXMuYml0Z28sIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFVzZXJCYWNrdXAgPVxuICAgICAgICAhaXNUcmFuc2FjdGlvbldpdGhLZXlQYXRoU3BlbmQgJiYgISh0eEZvcm1hdCA9PT0gJ3BzYnQnICYmIGlzVHJhbnNhY3Rpb25XaXRoUDJ0cilcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUhhbGZTaWduZWRUcmFuc2FjdGlvbihwcmVidWlsZCwgd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJhY2t1cClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRVc2VyQmFja3VwID1cbiAgICAgICAgZnVsbFNpZ24gJiYgaGFsZlNpZ25lZFVzZXJCYWNrdXBcbiAgICAgICAgICA/IGF3YWl0IGNyZWF0ZUZ1bGxTaWduZWRUcmFuc2FjdGlvbihoYWxmU2lnbmVkVXNlckJhY2t1cCwgd2FsbGV0S2V5cy5iYWNrdXAsIHdhbGxldEtleXMudXNlcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlYnVpbGQsXG4gICAgICAgIGhhbGZTaWduZWRVc2VyQmFja3VwLFxuICAgICAgICBoYWxmU2lnbmVkVXNlckJpdEdvLFxuICAgICAgICBmdWxsU2lnbmVkVXNlckJhY2t1cCxcbiAgICAgICAgZnVsbFNpZ25lZFVzZXJCaXRHbyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zYWN0aW9uU3RhZ2VzOiBUcmFuc2FjdGlvblN0YWdlcztcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyYW5zYWN0aW9uU3RhZ2VzID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25TdGFnZXMoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChub2NrLmNsZWFuQWxsKTtcblxuICAgIGl0KCdtYXRjaCBmaXh0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBNb2NoYS5Db250ZXh0KSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICAvLyBUT0RPIChtYXliZSkgLSBvbmNlIGZ1bGwgUFNCVCBzdXBwb3J0IGlzIGFkZGVkIHRvIGFic3RyYWN0LXV0eG8gbW9kdWxlLCBjdXN0b20gSlNPTiByZXByZXNlbnRhdGlvbiBvZiBQU0JUIGNhbiBiZSBjcmVhdGVkIGFuZCB0ZXN0ZWQgaGVyZS5cbiAgICAgICAgLy8gc2lnbmF0dXJlcyBvZiB0YXByb290S2V5UGF0aFNwZW5kcyBhcmUgcmFuZG9tIHNpbmNlIHJhbmRvbSBuYXR1cmUgb2YgTXVTaWcyIG5vbmNlLCBzbyBwc2J0IGhleCBjb21wYXJpc29uIGFsc28gd29udCB3b3JrLlxuXG4gICAgICAgIHJldHVybiB0aGlzLnNraXAoKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9UcmFuc2FjdGlvblN0YWdlc09iaihzdGFnZXM6IFRyYW5zYWN0aW9uU3RhZ2VzKTogVHJhbnNhY3Rpb25PYmpTdGFnZXMge1xuICAgICAgICByZXR1cm4gXy5tYXBWYWx1ZXMoc3RhZ2VzLCAodikgPT5cbiAgICAgICAgICB2ID09PSB1bmRlZmluZWQgfHwgdiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHYgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvblxuICAgICAgICAgICAgPyB0cmFuc2FjdGlvblRvT2JqPFROdW1iZXI+KHYpXG4gICAgICAgICAgICA6IHRyYW5zYWN0aW9uSGV4VG9PYmoodi50eEhleCwgY29pbi5uZXR3b3JrLCBhbW91bnRUeXBlKVxuICAgICAgICApIGFzIFRyYW5zYWN0aW9uT2JqU3RhZ2VzO1xuICAgICAgfVxuXG4gICAgICBzaG91bGRFcXVhbEpTT04oXG4gICAgICAgIHRvVHJhbnNhY3Rpb25TdGFnZXNPYmoodHJhbnNhY3Rpb25TdGFnZXMpLFxuICAgICAgICBhd2FpdCBnZXRGaXh0dXJlKFxuICAgICAgICAgIGNvaW4sXG4gICAgICAgICAgYHRyYW5zYWN0aW9ucy0ke2lucHV0U2NyaXB0cy5tYXAoKHQpID0+IHRvVHhuSW5wdXRTY3JpcHRUeXBlKHQpKS5qb2luKCctJyl9YCxcbiAgICAgICAgICB0b1RyYW5zYWN0aW9uU3RhZ2VzT2JqKHRyYW5zYWN0aW9uU3RhZ2VzKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gdGVzdFBzYnRWYWxpZFNpZ25hdHVyZXModHg6IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sIHNpZ25lZEJ5OiBCSVAzMkludGVyZmFjZVtdKSB7XG4gICAgICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eC50eEhleCwgY29pbi5uZXR3b3JrKTtcbiAgICAgIGNvbnN0IHVuc3BlbnRzID0gZ2V0VW5zcGVudHNGb3JQc2J0KCk7XG4gICAgICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB1bnNwZW50ID0gdW5zcGVudHNbaW5kZXhdO1xuICAgICAgICBpZiAoIXV0eG9saWIuYml0Z28uaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpKSB7XG4gICAgICAgICAgYXNzZXJ0Lm9rKHV0eG9saWIuYml0Z28uZ2V0UHNidElucHV0U2NyaXB0VHlwZShpbnB1dCksICdwMnNoUDJwaycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG4gICAgICAgIHB1YmtleXMuZm9yRWFjaCgocGssIHBrSW5kZXgpID0+IHtcbiAgICAgICAgICBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24oaW5kZXgsIHBrKS5zaG91bGQuZXFsKHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGVzdFZhbGlkU2lnbmF0dXJlcyhcbiAgICAgIHR4OiBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uIHwgRnVsbHlTaWduZWRUcmFuc2FjdGlvbixcbiAgICAgIHNpZ25lZEJ5OiBCSVAzMkludGVyZmFjZVtdLFxuICAgICAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4gICAgKSB7XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0JyAmJiBzaWduID09PSAnaGFsZnNpZ25lZCcpIHtcbiAgICAgICAgdGVzdFBzYnRWYWxpZFNpZ25hdHVyZXModHgsIHNpZ25lZEJ5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5zcGVudHMgPVxuICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgPyBnZXRVbnNwZW50c0ZvclBzYnQoKS5tYXAoKHUpID0+ICh7IC4uLnUsIHZhbHVlOiBiaXRnby50b1ROdW1iZXIodS52YWx1ZSwgYW1vdW50VHlwZSkgYXMgVE51bWJlciB9KSlcbiAgICAgICAgICA6IGdldFVuc3BlbnRzKCk7XG4gICAgICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcChcbiAgICAgICAgKHUpOiB1dHhvbGliLlR4T3V0cHV0PFROdW1iZXI+ID0+ICh7XG4gICAgICAgICAgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQodS5hZGRyZXNzLCBjb2luLm5ldHdvcmspLFxuICAgICAgICAgIHZhbHVlOiB1LnZhbHVlLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcjxUTnVtYmVyPihcbiAgICAgICAgQnVmZmVyLmZyb20odHgudHhIZXgsICdoZXgnKSxcbiAgICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgICB7IGFtb3VudFR5cGUgfVxuICAgICAgKTtcbiAgICAgIHRyYW5zYWN0aW9uLmlucy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0U2NyaXB0c1tpbmRleF0gPT09ICdwMnNoUDJwaycpIHtcbiAgICAgICAgICBhc3NlcnQub2soY29pbi5pc0JpdEdvVGFpbnRlZFVuc3BlbnQodW5zcGVudHNbaW5kZXhdKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2luZGV4XSBhcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+O1xuICAgICAgICBjb25zdCBwdWJrZXlzID0gd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXM7XG5cbiAgICAgICAgcHVia2V5cy5mb3JFYWNoKChwaywgcGtJbmRleCkgPT4ge1xuICAgICAgICAgIHV0eG9saWIuYml0Z29cbiAgICAgICAgICAgIC52ZXJpZnlTaWduYXR1cmU8VE51bWJlcj4oXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgcHJldk91dHB1dHNbaW5kZXhdLnZhbHVlLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiBwayxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcHJldk91dHB1dHNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zaG91bGQuZXFsKHNpZ25lZEJ5LmluY2x1ZGVzKHdhbGxldEtleXMudHJpcGxlW3BrSW5kZXhdKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gdGVzdEV4cGxhaW5UeChcbiAgICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgICAgdHhIZXg6IHN0cmluZyxcbiAgICAgIHVuc3BlbnRzOiB1dHhvbGliLmJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgICAgIHB1YnM6IFRyaXBsZTxzdHJpbmc+IHwgdW5kZWZpbmVkXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGF3YWl0IGNvaW4uZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXI+KHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIHR4SW5mbzoge1xuICAgICAgICAgIHVuc3BlbnRzLFxuICAgICAgICB9LFxuICAgICAgICBwdWJzLFxuICAgICAgICBkZWNvZGVXaXRoLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJvcGVydGllcyA9IFsnaWQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRBbW91bnQnXTtcblxuICAgICAgaWYgKGRlY29kZVdpdGggIT09ICd3YXNtLXV0eG8nKSB7XG4gICAgICAgIGV4cGVjdGVkUHJvcGVydGllcy5wdXNoKCdkaXNwbGF5T3JkZXInLCAnaW5wdXRTaWduYXR1cmVzJywgJ3NpZ25hdHVyZXMnKTtcbiAgICAgIH1cblxuICAgICAgZXhwbGFuYXRpb24uc2hvdWxkLmhhdmUucHJvcGVydGllcyguLi5leHBlY3RlZFByb3BlcnRpZXMpO1xuXG4gICAgICBjb25zdCBleHBlY3RlZFNpZ25hdHVyZUNvdW50ID1cbiAgICAgICAgc3RhZ2VOYW1lID09PSAncHJlYnVpbGQnIHx8IHB1YnMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2hhbGZTaWduZWQnKVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogc3RhZ2VOYW1lLnN0YXJ0c1dpdGgoJ2Z1bGxTaWduZWQnKVxuICAgICAgICAgID8gMlxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoJ2lucHV0U2lnbmF0dXJlcycgaW4gZXhwbGFuYXRpb24pIHtcbiAgICAgICAgZXhwbGFuYXRpb24uaW5wdXRTaWduYXR1cmVzLnNob3VsZC5lcWwoXG4gICAgICAgICAgLy8gRklYTUUoQkctMzUxNTQpOiBpbXBsZW1lbnQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmb3IgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzXG4gICAgICAgICAgaW5wdXRTY3JpcHRzLm1hcCgodHlwZSkgPT4gKHR5cGUgPT09ICdwMnNoUDJwaycgPyAwIDogZXhwZWN0ZWRTaWduYXR1cmVDb3VudCkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoJ3NpZ25hdHVyZXMnIGluIGV4cGxhbmF0aW9uKSB7XG4gICAgICAgIGV4cGxhbmF0aW9uLnNpZ25hdHVyZXMuc2hvdWxkLmVxbChleHBlY3RlZFNpZ25hdHVyZUNvdW50KTtcbiAgICAgICAgZXhwbGFuYXRpb24uY2hhbmdlQW1vdW50LnNob3VsZC5lcWwoJzAnKTsgLy8gbm8gY2hhbmdlIGFkZHJlc3NlcyBnaXZlblxuICAgICAgfVxuICAgICAgbGV0IGV4cGVjdGVkT3V0cHV0QW1vdW50ID1cbiAgICAgICAgQmlnSW50KCh0eEZvcm1hdCA9PT0gJ3BzYnQnID8gZ2V0VW5zcGVudHNGb3JQc2J0KCkgOiBnZXRVbnNwZW50cygpKS5sZW5ndGgpICogQmlnSW50KHZhbHVlKTtcbiAgICAgIGlucHV0U2NyaXB0cy5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgICAgICAgLy8gcmVwbGF5UHJvdGVjdGlvbiB1bnNwZW50cyBoYXZlIHZhbHVlIDEwMDBcbiAgICAgICAgICBleHBlY3RlZE91dHB1dEFtb3VudCAtPSBCaWdJbnQodmFsdWUpO1xuICAgICAgICAgIGV4cGVjdGVkT3V0cHV0QW1vdW50ICs9IEJpZ0ludCgxMDAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBleHBlY3RlZE91dHB1dEFtb3VudCAtPSBCaWdJbnQoMTAwMCk7IC8vIGZlZSBvZiAxMDAwXG4gICAgICBleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxbChleHBlY3RlZE91dHB1dEFtb3VudC50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBpdCgnaGF2ZSB2YWxpZCBzaWduYXR1cmUgZm9yIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmhhbGZTaWduZWRVc2VyQmFja3VwKSB7XG4gICAgICAgIHRlc3RWYWxpZFNpZ25hdHVyZXModHJhbnNhY3Rpb25TdGFnZXMuaGFsZlNpZ25lZFVzZXJCYWNrdXAsIFt3YWxsZXRLZXlzLnVzZXJdLCAnaGFsZnNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5oYWxmU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyXSwgJ2hhbGZzaWduZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIHZhbGlkIHNpZ25hdHVyZXMgZm9yIGZ1bGwtc2lnbmVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFmdWxsU2lnbikge1xuICAgICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNhY3Rpb25TdGFnZXMuZnVsbFNpZ25lZFVzZXJCYWNrdXApIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJhY2t1cCwgW3dhbGxldEtleXMudXNlciwgd2FsbGV0S2V5cy5iYWNrdXBdLCAnZnVsbHNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zYWN0aW9uU3RhZ2VzLmZ1bGxTaWduZWRVc2VyQml0R28pIHtcbiAgICAgICAgdGVzdFZhbGlkU2lnbmF0dXJlcyh0cmFuc2FjdGlvblN0YWdlcy5mdWxsU2lnbmVkVXNlckJpdEdvLCBbd2FsbGV0S2V5cy51c2VyLCB3YWxsZXRLZXlzLmJpdGdvXSwgJ2Z1bGxzaWduZWQnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdoYXZlIGNvcnJlY3QgcmVzdWx0cyBmb3IgZXhwbGFpblRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCBbc3RhZ2VOYW1lLCBzdGFnZVR4XSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2FjdGlvblN0YWdlcykpIHtcbiAgICAgICAgaWYgKCFzdGFnZVR4KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICAgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgc3RhZ2VUeCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgICA/IHN0YWdlVHgudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JylcbiAgICAgICAgICAgIDogc3RhZ2VUeC50eEhleDtcblxuICAgICAgICBjb25zdCBwdWJzID0gd2FsbGV0S2V5cy50cmlwbGUubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSkgYXMgVHJpcGxlPHN0cmluZz47XG4gICAgICAgIGNvbnN0IHVuc3BlbnRzID1cbiAgICAgICAgICB0eEZvcm1hdCA9PT0gJ3BzYnQnXG4gICAgICAgICAgICA/IGdldFVuc3BlbnRzRm9yUHNidCgpLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IGJpdGdvLnRvVE51bWJlcih1LnZhbHVlLCBhbW91bnRUeXBlKSBhcyBUTnVtYmVyIH0pKVxuICAgICAgICAgICAgOiBnZXRVbnNwZW50cygpO1xuICAgICAgICBhd2FpdCB0ZXN0RXhwbGFpblR4KHN0YWdlTmFtZSwgdHhIZXgsIHVuc3BlbnRzLCBwdWJzKTtcbiAgICAgICAgaWYgKGRlY29kZVdpdGggIT09ICd3YXNtLXV0eG8nKSB7XG4gICAgICAgICAgYXdhaXQgdGVzdEV4cGxhaW5UeChzdGFnZU5hbWUsIHR4SGV4LCB1bnNwZW50cywgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcnVuVGVzdEZvckNvaW4oY29pbjogQWJzdHJhY3RVdHhvQ29pbikge1xuICBnZXRTY3JpcHRUeXBlczJPZjMoKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgKFsnbGVnYWN5JywgJ3BzYnQnXSBhcyBjb25zdCkuZm9yRWFjaCgodHhGb3JtYXQpID0+IHtcbiAgICAgIGlmICghY29pbi5zdXBwb3J0c0FkZHJlc3NUeXBlKHR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJyA/ICdwMnRyTXVzaWcyJyA6IHR5cGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0eXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHwgdHlwZSA9PT0gJ3AydHJNdXNpZzInKSAmJiB0eEZvcm1hdCAhPT0gJ3BzYnQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcnVuKGNvaW4sIFt0eXBlLCB0eXBlXSwgdHhGb3JtYXQpO1xuICAgICAgaWYgKGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMoY29pbi5uZXR3b3JrKS5sZW5ndGgpIHtcbiAgICAgICAgcnVuKGNvaW4sIFsncDJzaFAycGsnLCB0eXBlXSwgdHhGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0JyAmJiBoYXNXYXNtVXR4b1N1cHBvcnQoY29pbi5uZXR3b3JrKSkge1xuICAgICAgICBydW4oY29pbiwgW3R5cGUsIHR5cGVdLCB0eEZvcm1hdCwgeyBkZWNvZGVXaXRoOiAnd2FzbS11dHhvJyB9KTtcbiAgICAgICAgaWYgKGdldFJlcGxheVByb3RlY3Rpb25BZGRyZXNzZXMoY29pbi5uZXR3b3JrKS5sZW5ndGgpIHtcbiAgICAgICAgICBydW4oY29pbiwgWydwMnNoUDJwaycsIHR5cGVdLCB0eEZvcm1hdCwgeyBkZWNvZGVXaXRoOiAnd2FzbS11dHhvJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFN1aXRlJywgZnVuY3Rpb24gKCkge1xuICB1dHhvQ29pbnMuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW4uZ2V0Q2hhaW4oKX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICBydW5UZXN0Rm9yQ29pbihjb2luKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==