@bitgo-beta/abstract-utxo 1.6.1-alpha.420 → 1.6.1-alpha.422

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +6 -52
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +14 -23
  4. package/dist/cjs/src/address/fixedScript.d.ts +2 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +11 -6
  7. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  8. package/dist/cjs/src/impl/bch/bch.js +5 -1
  9. package/dist/cjs/src/impl/bcha/bcha.d.ts +0 -1
  10. package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -1
  11. package/dist/cjs/src/impl/bcha/bcha.js +1 -11
  12. package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
  13. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  14. package/dist/cjs/src/impl/doge/doge.js +1 -1
  15. package/dist/cjs/src/keychains.d.ts +6 -2
  16. package/dist/cjs/src/keychains.d.ts.map +1 -1
  17. package/dist/cjs/src/keychains.js +33 -1
  18. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  19. package/dist/cjs/src/recovery/backupKeyRecovery.js +20 -13
  20. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
  21. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  22. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +1 -1
  23. package/dist/cjs/src/transaction/descriptor/parse.d.ts +2 -1
  24. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  25. package/dist/cjs/src/transaction/descriptor/parse.js +1 -1
  26. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +2 -1
  27. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  28. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +1 -1
  29. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +2 -1
  30. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  31. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +1 -1
  32. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +1 -0
  33. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  34. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +42 -18
  35. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +15 -5
  36. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  37. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +61 -38
  38. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +3 -1
  39. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  40. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +14 -7
  41. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -1
  42. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  43. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +56 -44
  44. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  45. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +1 -1
  46. package/dist/cjs/src/transaction/index.d.ts +1 -0
  47. package/dist/cjs/src/transaction/index.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/index.js +2 -1
  49. package/dist/cjs/src/transaction/parseTransaction.d.ts +2 -1
  50. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
  51. package/dist/cjs/src/transaction/parseTransaction.js +1 -1
  52. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  53. package/dist/cjs/src/transaction/recipient.js +2 -2
  54. package/dist/cjs/src/transaction/types.d.ts +44 -0
  55. package/dist/cjs/src/transaction/types.d.ts.map +1 -0
  56. package/dist/cjs/src/transaction/types.js +3 -0
  57. package/dist/cjs/src/verifyKey.d.ts +2 -1
  58. package/dist/cjs/src/verifyKey.d.ts.map +1 -1
  59. package/dist/cjs/src/verifyKey.js +1 -1
  60. package/dist/cjs/test/unit/parseTransaction.js +1 -1
  61. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +2 -1
  62. package/dist/cjs/test/unit/transaction/descriptor/parse.js +1 -1
  63. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +40 -16
  64. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
  65. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
  66. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +288 -0
  67. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +3 -0
  68. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +1 -0
  69. package/dist/cjs/test/unit/transaction/fixedScript/util.js +46 -0
  70. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
  71. package/dist/cjs/test/unit/txFormat.js +14 -2
  72. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  73. package/dist/esm/abstractUtxoCoin.d.ts +6 -52
  74. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  75. package/dist/esm/abstractUtxoCoin.js +12 -21
  76. package/dist/esm/address/fixedScript.d.ts +2 -4
  77. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  78. package/dist/esm/address/fixedScript.js +12 -7
  79. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  80. package/dist/esm/impl/bch/bch.js +5 -1
  81. package/dist/esm/impl/bcha/bcha.d.ts +0 -1
  82. package/dist/esm/impl/bcha/bcha.d.ts.map +1 -1
  83. package/dist/esm/impl/bcha/bcha.js +1 -11
  84. package/dist/esm/impl/doge/doge.d.ts +2 -1
  85. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  86. package/dist/esm/impl/doge/doge.js +1 -1
  87. package/dist/esm/keychains.d.ts +6 -2
  88. package/dist/esm/keychains.d.ts.map +1 -1
  89. package/dist/esm/keychains.js +32 -1
  90. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  91. package/dist/esm/recovery/backupKeyRecovery.js +20 -13
  92. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
  93. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  94. package/dist/esm/transaction/descriptor/explainPsbt.js +1 -1
  95. package/dist/esm/transaction/descriptor/parse.d.ts +2 -1
  96. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  97. package/dist/esm/transaction/descriptor/parse.js +1 -1
  98. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +2 -1
  99. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  100. package/dist/esm/transaction/descriptor/parseToAmountType.js +1 -1
  101. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +2 -1
  102. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  103. package/dist/esm/transaction/descriptor/verifyTransaction.js +1 -1
  104. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +1 -0
  105. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  106. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +42 -18
  107. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +15 -5
  108. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  109. package/dist/esm/transaction/fixedScript/explainTransaction.js +61 -38
  110. package/dist/esm/transaction/fixedScript/parseOutput.d.ts +3 -1
  111. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  112. package/dist/esm/transaction/fixedScript/parseOutput.js +13 -7
  113. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -1
  114. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  115. package/dist/esm/transaction/fixedScript/parseTransaction.js +56 -44
  116. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -1
  117. package/dist/esm/transaction/fixedScript/verifyTransaction.js +1 -1
  118. package/dist/esm/transaction/index.d.ts +1 -0
  119. package/dist/esm/transaction/index.d.ts.map +1 -1
  120. package/dist/esm/transaction/index.js +2 -1
  121. package/dist/esm/transaction/parseTransaction.d.ts +2 -1
  122. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
  123. package/dist/esm/transaction/parseTransaction.js +1 -1
  124. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  125. package/dist/esm/transaction/recipient.js +2 -2
  126. package/dist/esm/transaction/types.d.ts +44 -0
  127. package/dist/esm/transaction/types.d.ts.map +1 -0
  128. package/dist/esm/transaction/types.js +2 -0
  129. package/dist/esm/verifyKey.d.ts +2 -1
  130. package/dist/esm/verifyKey.d.ts.map +1 -1
  131. package/dist/esm/verifyKey.js +1 -1
  132. package/package.json +11 -11
@@ -39,6 +39,7 @@ exports.getTxFormat = getTxFormat;
39
39
  const assert = __importStar(require("assert"));
40
40
  const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
41
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
42
+ const src_1 = require("../../src");
42
43
  const util_1 = require("./util");
43
44
  /**
44
45
  * Enumerates common wallet configurations for testing
@@ -143,7 +144,8 @@ describe('txFormat', function () {
143
144
  });
144
145
  // Test explicitly requested formats
145
146
  runTest({
146
- description: 'should respect explicitly requested legacy format',
147
+ description: 'should respect explicitly requested legacy format on mainnet',
148
+ coinFilter: (coin) => utxolib.isMainnet(coin.network),
147
149
  expectedTxFormat: 'legacy',
148
150
  requestedTxFormat: 'legacy',
149
151
  });
@@ -157,6 +159,16 @@ describe('txFormat', function () {
157
159
  expectedTxFormat: 'psbt-lite',
158
160
  requestedTxFormat: 'psbt-lite',
159
161
  });
162
+ // Test that legacy format is prohibited on testnet
163
+ it('should throw ErrorDeprecatedTxFormat when legacy format is requested on testnet', function () {
164
+ for (const coin of util_1.utxoCoins) {
165
+ if (!utxolib.isTestnet(coin.network)) {
166
+ continue;
167
+ }
168
+ const wallet = createMockWallet(coin, { type: 'hot' });
169
+ assert.throws(() => getTxFormat(coin, wallet, 'legacy'), src_1.ErrorDeprecatedTxFormat, `Expected ErrorDeprecatedTxFormat for ${coin.getChain()}`);
170
+ }
171
+ });
160
172
  });
161
173
  });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhGb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHhGb3JtYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsMERBU0M7QUFLRCw0Q0FTQztBQUtELGtDQUVDO0FBcERELCtDQUFpQztBQUVqQyw4REFBZ0Q7QUFDaEQsbURBQThDO0FBSTlDLGlDQUFpRDtBQVlqRDs7R0FFRztBQUNILFNBQWdCLHVCQUF1QjtJQUNyQyxPQUFPO1FBQ0wsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNoRCxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2xELEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRTtRQUM1RCxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxFQUFFO1FBQy9GLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEcsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtLQUM1RyxDQUFDO0FBQ0osQ0FBQztB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c2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgVHhGb3JtYXQgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5pbXBvcnQgeyB1dHhvQ29pbnMsIGRlZmF1bHRCaXRHbyB9IGZyb20gJy4vdXRpbCc7XG5cbnR5cGUgV2FsbGV0VHlwZSA9ICdob3QnIHwgJ2NvbGQnIHwgJ2N1c3RvZGlhbCcgfCAnY3VzdG9kaWFsUGFpcmVkJyB8ICd0cmFkaW5nJztcbnR5cGUgV2FsbGV0U3ViVHlwZSA9ICdkaXN0cmlidXRlZEN1c3RvZHknO1xudHlwZSBXYWxsZXRGbGFnID0geyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfTtcblxudHlwZSBXYWxsZXRPcHRpb25zID0ge1xuICB0eXBlPzogV2FsbGV0VHlwZTtcbiAgc3ViVHlwZT86IFdhbGxldFN1YlR5cGU7XG4gIHdhbGxldEZsYWdzPzogV2FsbGV0RmxhZ1tdO1xufTtcblxuLyoqXG4gKiBFbnVtZXJhdGVzIGNvbW1vbiB3YWxsZXQgY29uZmlndXJhdGlvbnMgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdhbGxldENvbmZpZ3VyYXRpb25zKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBvcHRpb25zOiBXYWxsZXRPcHRpb25zIH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7IG5hbWU6ICdob3Qgd2FsbGV0Jywgb3B0aW9uczogeyB0eXBlOiAnaG90JyB9IH0sXG4gICAgeyBuYW1lOiAnY29sZCB3YWxsZXQnLCBvcHRpb25zOiB7IHR5cGU6ICdjb2xkJyB9IH0sXG4gICAgeyBuYW1lOiAnY3VzdG9kaWFsIHdhbGxldCcsIG9wdGlvbnM6IHsgdHlwZTogJ2N1c3RvZGlhbCcgfSB9LFxuICAgIHsgbmFtZTogJ2Rpc3RyaWJ1dGVkQ3VzdG9keSB3YWxsZXQnLCBvcHRpb25zOiB7IHR5cGU6ICdjb2xkJywgc3ViVHlwZTogJ2Rpc3RyaWJ1dGVkQ3VzdG9keScgfSB9LFxuICAgIHsgbmFtZTogJ211c2lnS3Agd2FsbGV0Jywgb3B0aW9uczogeyB0eXBlOiAnY29sZCcsIHdhbGxldEZsYWdzOiBbeyBuYW1lOiAnbXVzaWdLcCcsIHZhbHVlOiAndHJ1ZScgfV0gfSB9LFxuICAgIHsgbmFtZTogJ2hvdCBtdXNpZ0twIHdhbGxldCcsIG9wdGlvbnM6IHsgdHlwZTogJ2hvdCcsIHdhbGxldEZsYWdzOiBbeyBuYW1lOiAnbXVzaWdLcCcsIHZhbHVlOiAndHJ1ZScgfV0gfSB9LFxuICBdO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBtb2NrIHdhbGxldCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1dhbGxldChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCBvcHRpb25zOiBXYWxsZXRPcHRpb25zID0ge30pOiBXYWxsZXQge1xuICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgdHlwZTogb3B0aW9ucy50eXBlIHx8ICdob3QnLFxuICAgIC4uLihvcHRpb25zLnN1YlR5cGUgJiYgeyBzdWJUeXBlOiBvcHRpb25zLnN1YlR5cGUgfSksXG4gICAgLi4uKG9wdGlvbnMud2FsbGV0RmxhZ3MgJiYgeyB3YWxsZXRGbGFnczogb3B0aW9ucy53YWxsZXRGbGFncyB9KSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBXYWxsZXQoZGVmYXVsdEJpdEdvLCBjb2luLCB3YWxsZXREYXRhKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSB0eEZvcm1hdCBmcm9tIGEgY29pbidzIGdldERlZmF1bHRUeEZvcm1hdCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR4Rm9ybWF0KGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldDogV2FsbGV0LCByZXF1ZXN0ZWRGb3JtYXQ/OiBUeEZvcm1hdCk6IFR4Rm9ybWF0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNvaW4uZ2V0RGVmYXVsdFR4Rm9ybWF0KHdhbGxldCwgcmVxdWVzdGVkRm9ybWF0KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcnVuIGEgdHhGb3JtYXQgdGVzdCB3aXRoIG5hbWVkIGFyZ3VtZW50cy5cbiAqIEJ5IGRlZmF1bHQsIGl0ZXJhdGVzIG92ZXIgYWxsIHdhbGxldCBjb25maWd1cmF0aW9ucyBhbmQgYWxsIGNvaW5zLlxuICovXG5mdW5jdGlvbiBydW5UZXN0KHBhcmFtczoge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBleHBlY3RlZFR4Rm9ybWF0OlxuICAgIHwgVHhGb3JtYXRcbiAgICB8IHVuZGVmaW5lZFxuICAgIHwgKChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXRDb25maWc6IFdhbGxldE9wdGlvbnMpID0+IFR4Rm9ybWF0IHwgdW5kZWZpbmVkKTtcbiAgY29pbkZpbHRlcj86IChjb2luOiBBYnN0cmFjdFV0eG9Db2luKSA9PiBib29sZWFuO1xuICB3YWxsZXRGaWx0ZXI/OiAod2FsbGV0Q29uZmlnOiB7IG5hbWU6IHN0cmluZzsgb3B0aW9uczogV2FsbGV0T3B0aW9ucyB9KSA9PiBib29sZWFuO1xuICByZXF1ZXN0ZWRUeEZvcm1hdD86IFR4Rm9ybWF0O1xufSk6IHZvaWQge1xuICBpdChwYXJhbXMuZGVzY3JpcHRpb24sIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXRDb25maWdzID0gZ2V0V2FsbGV0Q29uZmlndXJhdGlvbnMoKTtcblxuICAgIGZvciAoY29uc3Qgd2FsbGV0Q29uZmlnIG9mIHdhbGxldENvbmZpZ3MpIHtcbiAgICAgIC8vIFNraXAgd2FsbGV0IGNvbmZpZ3VyYXRpb25zIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGZpbHRlclxuICAgICAgaWYgKHBhcmFtcy53YWxsZXRGaWx0ZXIgJiYgIXBhcmFtcy53YWxsZXRGaWx0ZXIod2FsbGV0Q29uZmlnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjb2luIG9mIHV0eG9Db2lucykge1xuICAgICAgICAvLyBTa2lwIGNvaW5zIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGZpbHRlclxuICAgICAgICBpZiAocGFyYW1zLmNvaW5GaWx0ZXIgJiYgIXBhcmFtcy5jb2luRmlsdGVyKGNvaW4pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3YWxsZXQgPSBjcmVhdGVNb2NrV2FsbGV0KGNvaW4sIHdhbGxldENvbmZpZy5vcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHhGb3JtYXQgPSBnZXRUeEZvcm1hdChjb2luLCB3YWxsZXQsIHBhcmFtcy5yZXF1ZXN0ZWRUeEZvcm1hdCk7XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWRUeEZvcm1hdCA9XG4gICAgICAgICAgdHlwZW9mIHBhcmFtcy5leHBlY3RlZFR4Rm9ybWF0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHBhcmFtcy5leHBlY3RlZFR4Rm9ybWF0KGNvaW4sIHdhbGxldENvbmZpZy5vcHRpb25zKVxuICAgICAgICAgICAgOiBwYXJhbXMuZXhwZWN0ZWRUeEZvcm1hdDtcblxuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgdHhGb3JtYXQsXG4gICAgICAgICAgZXhwZWN0ZWRUeEZvcm1hdCxcbiAgICAgICAgICBgJHtwYXJhbXMuZGVzY3JpcHRpb259IC0gJHtcbiAgICAgICAgICAgIHdhbGxldENvbmZpZy5uYW1lXG4gICAgICAgICAgfSAtICR7Y29pbi5nZXRDaGFpbigpfTogZXhwZWN0ZWQgJHtleHBlY3RlZFR4Rm9ybWF0fSwgZ290ICR7dHhGb3JtYXR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmRlc2NyaWJlKCd0eEZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2dldERlZmF1bHRUeEZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBBbGwgdGVzdG5ldCB3YWxsZXRzIGRlZmF1bHQgdG8gUFNCVC1saXRlXG4gICAgcnVuVGVzdCh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3Nob3VsZCBhbHdheXMgcmV0dXJuIHBzYnQtbGl0ZSBmb3IgdGVzdG5ldCcsXG4gICAgICBjb2luRmlsdGVyOiAoY29pbikgPT4gdXR4b2xpYi5pc1Rlc3RuZXQoY29pbi5uZXR3b3JrKSxcbiAgICAgIGV4cGVjdGVkVHhGb3JtYXQ6ICdwc2J0LWxpdGUnLFxuICAgIH0pO1xuXG4gICAgLy8gRGlzdHJpYnV0ZWRDdXN0b2R5IHdhbGxldHMgZGVmYXVsdCB0byBQU0JUIChtYWlubmV0IG9ubHksIHRlc3RuZXQgYWxyZWFkeSBjb3ZlcmVkKVxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmV0dXJuIHBzYnQgZm9yIGRpc3RyaWJ1dGVkQ3VzdG9keSB3YWxsZXRzIG9uIG1haW5uZXQnLFxuICAgICAgY29pbkZpbHRlcjogKGNvaW4pID0+IHV0eG9saWIuaXNNYWlubmV0KGNvaW4ubmV0d29yayksXG4gICAgICB3YWxsZXRGaWx0ZXI6ICh3KSA9PiB3Lm9wdGlvbnMuc3ViVHlwZSA9PT0gJ2Rpc3RyaWJ1dGVkQ3VzdG9keScsXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiAncHNidCcsXG4gICAgfSk7XG5cbiAgICAvLyBNdVNpZzIgd2FsbGV0cyBkZWZhdWx0IHRvIFBTQlQgKG1haW5uZXQgb25seSwgdGVzdG5ldCBhbHJlYWR5IGNvdmVyZWQpXG4gICAgcnVuVGVzdCh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3Nob3VsZCByZXR1cm4gcHNidCBmb3Igd2FsbGV0cyB3aXRoIG11c2lnS3AgZmxhZyBvbiBtYWlubmV0JyxcbiAgICAgIGNvaW5GaWx0ZXI6IChjb2luKSA9PiB1dHhvbGliLmlzTWFpbm5ldChjb2luLm5ldHdvcmspLFxuICAgICAgd2FsbGV0RmlsdGVyOiAodykgPT4gQm9vbGVhbih3Lm9wdGlvbnMud2FsbGV0RmxhZ3M/LnNvbWUoKGYpID0+IGYubmFtZSA9PT0gJ211c2lnS3AnICYmIGYudmFsdWUgPT09ICd0cnVlJykpLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQnLFxuICAgIH0pO1xuXG4gICAgLy8gTWFpbm5ldCBCaXRjb2luIGhvdCB3YWxsZXRzIGRlZmF1bHQgdG8gUFNCVFxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmV0dXJuIHBzYnQgZm9yIG1haW5uZXQgYml0Y29pbiBob3Qgd2FsbGV0cycsXG4gICAgICBjb2luRmlsdGVyOiAoY29pbikgPT5cbiAgICAgICAgdXR4b2xpYi5pc01haW5uZXQoY29pbi5uZXR3b3JrKSAmJiB1dHhvbGliLmdldE1haW5uZXQoY29pbi5uZXR3b3JrKSA9PT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgd2FsbGV0RmlsdGVyOiAodykgPT4gdy5vcHRpb25zLnR5cGUgPT09ICdob3QnLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQnLFxuICAgIH0pO1xuXG4gICAgLy8gT3RoZXIgbWFpbm5ldCB3YWxsZXRzIGRvIE5PVCBkZWZhdWx0IHRvIFBTQlRcbiAgICBydW5UZXN0KHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIG90aGVyIG1haW5uZXQgd2FsbGV0cycsXG4gICAgICBjb2luRmlsdGVyOiAoY29pbikgPT4gdXR4b2xpYi5pc01haW5uZXQoY29pbi5uZXR3b3JrKSxcbiAgICAgIHdhbGxldEZpbHRlcjogKHcpID0+IHtcbiAgICAgICAgY29uc3QgaXNIb3RCaXRjb2luID0gdy5vcHRpb25zLnR5cGUgPT09ICdob3QnOyAvLyBUaGlzIHdpbGwgYmUgYml0Y29pbiBob3Qgd2FsbGV0c1xuICAgICAgICBjb25zdCBpc0Rpc3RyaWJ1dGVkQ3VzdG9keSA9IHcub3B0aW9ucy5zdWJUeXBlID09PSAnZGlzdHJpYnV0ZWRDdXN0b2R5JztcbiAgICAgICAgY29uc3QgaGFzTXVzaWdLcEZsYWcgPSBCb29sZWFuKHcub3B0aW9ucy53YWxsZXRGbGFncz8uc29tZSgoZikgPT4gZi5uYW1lID09PSAnbXVzaWdLcCcgJiYgZi52YWx1ZSA9PT0gJ3RydWUnKSk7XG4gICAgICAgIC8vIE9ubHkgdGVzdCBcIm90aGVyXCIgd2FsbGV0cyAtIGV4Y2x1ZGUgdGhlIHNwZWNpYWwgY2FzZXNcbiAgICAgICAgcmV0dXJuICFpc0hvdEJpdGNvaW4gJiYgIWlzRGlzdHJpYnV0ZWRDdXN0b2R5ICYmICFoYXNNdXNpZ0twRmxhZztcbiAgICAgIH0sXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBUZXN0IGV4cGxpY2l0bHkgcmVxdWVzdGVkIGZvcm1hdHNcbiAgICBydW5UZXN0KHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdWxkIHJlc3BlY3QgZXhwbGljaXRseSByZXF1ZXN0ZWQgbGVnYWN5IGZvcm1hdCcsXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiAnbGVnYWN5JyxcbiAgICAgIHJlcXVlc3RlZFR4Rm9ybWF0OiAnbGVnYWN5JyxcbiAgICB9KTtcblxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmVzcGVjdCBleHBsaWNpdGx5IHJlcXVlc3RlZCBwc2J0IGZvcm1hdCcsXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiAncHNidCcsXG4gICAgICByZXF1ZXN0ZWRUeEZvcm1hdDogJ3BzYnQnLFxuICAgIH0pO1xuXG4gICAgcnVuVGVzdCh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3Nob3VsZCByZXNwZWN0IGV4cGxpY2l0bHkgcmVxdWVzdGVkIHBzYnQtbGl0ZSBmb3JtYXQnLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQtbGl0ZScsXG4gICAgICByZXF1ZXN0ZWRUeEZvcm1hdDogJ3BzYnQtbGl0ZScsXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhGb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHhGb3JtYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsMERBU0M7QUFLRCw0Q0FTQztBQUtELGtDQUVDO0FBcERELCtDQUFpQztBQUVqQyw4REFBZ0Q7QUFDaEQsbURBQThDO0FBRTlDLG1DQUFnRjtBQUVoRixpQ0FBaUQ7QUFZakQ7O0dBRUc7QUFDSCxTQUFnQix1QkFBdUI7SUFDckMsT0FBTztRQUNMLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDaEQsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsRCxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUU7UUFDNUQsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsRUFBRTtRQUMvRixFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hHLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7S0FDNUcsQ0FB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QUFXO1NBQy9CLENBQUMsQ0FBQztRQUVILG1EQUFtRDtRQUNuRCxFQUFFLENBQUMsaUZBQWlGLEVBQUU7WUFDcEYsS0FBSyxNQUFNLElBQUksSUFBSSxnQkFBUyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNyQyxTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQ3pDLDZCQUF1QixFQUN2Qix3Q0FBd0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQzFELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luLCBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCwgVHhGb3JtYXQgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5pbXBvcnQgeyB1dHhvQ29pbnMsIGRlZmF1bHRCaXRHbyB9IGZyb20gJy4vdXRpbCc7XG5cbnR5cGUgV2FsbGV0VHlwZSA9ICdob3QnIHwgJ2NvbGQnIHwgJ2N1c3RvZGlhbCcgfCAnY3VzdG9kaWFsUGFpcmVkJyB8ICd0cmFkaW5nJztcbnR5cGUgV2FsbGV0U3ViVHlwZSA9ICdkaXN0cmlidXRlZEN1c3RvZHknO1xudHlwZSBXYWxsZXRGbGFnID0geyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfTtcblxudHlwZSBXYWxsZXRPcHRpb25zID0ge1xuICB0eXBlPzogV2FsbGV0VHlwZTtcbiAgc3ViVHlwZT86IFdhbGxldFN1YlR5cGU7XG4gIHdhbGxldEZsYWdzPzogV2FsbGV0RmxhZ1tdO1xufTtcblxuLyoqXG4gKiBFbnVtZXJhdGVzIGNvbW1vbiB3YWxsZXQgY29uZmlndXJhdGlvbnMgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdhbGxldENvbmZpZ3VyYXRpb25zKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBvcHRpb25zOiBXYWxsZXRPcHRpb25zIH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7IG5hbWU6ICdob3Qgd2FsbGV0Jywgb3B0aW9uczogeyB0eXBlOiAnaG90JyB9IH0sXG4gICAgeyBuYW1lOiAnY29sZCB3YWxsZXQnLCBvcHRpb25zOiB7IHR5cGU6ICdjb2xkJyB9IH0sXG4gICAgeyBuYW1lOiAnY3VzdG9kaWFsIHdhbGxldCcsIG9wdGlvbnM6IHsgdHlwZTogJ2N1c3RvZGlhbCcgfSB9LFxuICAgIHsgbmFtZTogJ2Rpc3RyaWJ1dGVkQ3VzdG9keSB3YWxsZXQnLCBvcHRpb25zOiB7IHR5cGU6ICdjb2xkJywgc3ViVHlwZTogJ2Rpc3RyaWJ1dGVkQ3VzdG9keScgfSB9LFxuICAgIHsgbmFtZTogJ211c2lnS3Agd2FsbGV0Jywgb3B0aW9uczogeyB0eXBlOiAnY29sZCcsIHdhbGxldEZsYWdzOiBbeyBuYW1lOiAnbXVzaWdLcCcsIHZhbHVlOiAndHJ1ZScgfV0gfSB9LFxuICAgIHsgbmFtZTogJ2hvdCBtdXNpZ0twIHdhbGxldCcsIG9wdGlvbnM6IHsgdHlwZTogJ2hvdCcsIHdhbGxldEZsYWdzOiBbeyBuYW1lOiAnbXVzaWdLcCcsIHZhbHVlOiAndHJ1ZScgfV0gfSB9LFxuICBdO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBtb2NrIHdhbGxldCBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1dhbGxldChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCBvcHRpb25zOiBXYWxsZXRPcHRpb25zID0ge30pOiBXYWxsZXQge1xuICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICBjb2luOiBjb2luLmdldENoYWluKCksXG4gICAgdHlwZTogb3B0aW9ucy50eXBlIHx8ICdob3QnLFxuICAgIC4uLihvcHRpb25zLnN1YlR5cGUgJiYgeyBzdWJUeXBlOiBvcHRpb25zLnN1YlR5cGUgfSksXG4gICAgLi4uKG9wdGlvbnMud2FsbGV0RmxhZ3MgJiYgeyB3YWxsZXRGbGFnczogb3B0aW9ucy53YWxsZXRGbGFncyB9KSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBXYWxsZXQoZGVmYXVsdEJpdEdvLCBjb2luLCB3YWxsZXREYXRhKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSB0eEZvcm1hdCBmcm9tIGEgY29pbidzIGdldERlZmF1bHRUeEZvcm1hdCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR4Rm9ybWF0KGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldDogV2FsbGV0LCByZXF1ZXN0ZWRGb3JtYXQ/OiBUeEZvcm1hdCk6IFR4Rm9ybWF0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNvaW4uZ2V0RGVmYXVsdFR4Rm9ybWF0KHdhbGxldCwgcmVxdWVzdGVkRm9ybWF0KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcnVuIGEgdHhGb3JtYXQgdGVzdCB3aXRoIG5hbWVkIGFyZ3VtZW50cy5cbiAqIEJ5IGRlZmF1bHQsIGl0ZXJhdGVzIG92ZXIgYWxsIHdhbGxldCBjb25maWd1cmF0aW9ucyBhbmQgYWxsIGNvaW5zLlxuICovXG5mdW5jdGlvbiBydW5UZXN0KHBhcmFtczoge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBleHBlY3RlZFR4Rm9ybWF0OlxuICAgIHwgVHhGb3JtYXRcbiAgICB8IHVuZGVmaW5lZFxuICAgIHwgKChjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXRDb25maWc6IFdhbGxldE9wdGlvbnMpID0+IFR4Rm9ybWF0IHwgdW5kZWZpbmVkKTtcbiAgY29pbkZpbHRlcj86IChjb2luOiBBYnN0cmFjdFV0eG9Db2luKSA9PiBib29sZWFuO1xuICB3YWxsZXRGaWx0ZXI/OiAod2FsbGV0Q29uZmlnOiB7IG5hbWU6IHN0cmluZzsgb3B0aW9uczogV2FsbGV0T3B0aW9ucyB9KSA9PiBib29sZWFuO1xuICByZXF1ZXN0ZWRUeEZvcm1hdD86IFR4Rm9ybWF0O1xufSk6IHZvaWQge1xuICBpdChwYXJhbXMuZGVzY3JpcHRpb24sIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXRDb25maWdzID0gZ2V0V2FsbGV0Q29uZmlndXJhdGlvbnMoKTtcblxuICAgIGZvciAoY29uc3Qgd2FsbGV0Q29uZmlnIG9mIHdhbGxldENvbmZpZ3MpIHtcbiAgICAgIC8vIFNraXAgd2FsbGV0IGNvbmZpZ3VyYXRpb25zIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGZpbHRlclxuICAgICAgaWYgKHBhcmFtcy53YWxsZXRGaWx0ZXIgJiYgIXBhcmFtcy53YWxsZXRGaWx0ZXIod2FsbGV0Q29uZmlnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjb2luIG9mIHV0eG9Db2lucykge1xuICAgICAgICAvLyBTa2lwIGNvaW5zIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGZpbHRlclxuICAgICAgICBpZiAocGFyYW1zLmNvaW5GaWx0ZXIgJiYgIXBhcmFtcy5jb2luRmlsdGVyKGNvaW4pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3YWxsZXQgPSBjcmVhdGVNb2NrV2FsbGV0KGNvaW4sIHdhbGxldENvbmZpZy5vcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHhGb3JtYXQgPSBnZXRUeEZvcm1hdChjb2luLCB3YWxsZXQsIHBhcmFtcy5yZXF1ZXN0ZWRUeEZvcm1hdCk7XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWRUeEZvcm1hdCA9XG4gICAgICAgICAgdHlwZW9mIHBhcmFtcy5leHBlY3RlZFR4Rm9ybWF0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHBhcmFtcy5leHBlY3RlZFR4Rm9ybWF0KGNvaW4sIHdhbGxldENvbmZpZy5vcHRpb25zKVxuICAgICAgICAgICAgOiBwYXJhbXMuZXhwZWN0ZWRUeEZvcm1hdDtcblxuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgdHhGb3JtYXQsXG4gICAgICAgICAgZXhwZWN0ZWRUeEZvcm1hdCxcbiAgICAgICAgICBgJHtwYXJhbXMuZGVzY3JpcHRpb259IC0gJHtcbiAgICAgICAgICAgIHdhbGxldENvbmZpZy5uYW1lXG4gICAgICAgICAgfSAtICR7Y29pbi5nZXRDaGFpbigpfTogZXhwZWN0ZWQgJHtleHBlY3RlZFR4Rm9ybWF0fSwgZ290ICR7dHhGb3JtYXR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmRlc2NyaWJlKCd0eEZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2dldERlZmF1bHRUeEZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBBbGwgdGVzdG5ldCB3YWxsZXRzIGRlZmF1bHQgdG8gUFNCVC1saXRlXG4gICAgcnVuVGVzdCh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3Nob3VsZCBhbHdheXMgcmV0dXJuIHBzYnQtbGl0ZSBmb3IgdGVzdG5ldCcsXG4gICAgICBjb2luRmlsdGVyOiAoY29pbikgPT4gdXR4b2xpYi5pc1Rlc3RuZXQoY29pbi5uZXR3b3JrKSxcbiAgICAgIGV4cGVjdGVkVHhGb3JtYXQ6ICdwc2J0LWxpdGUnLFxuICAgIH0pO1xuXG4gICAgLy8gRGlzdHJpYnV0ZWRDdXN0b2R5IHdhbGxldHMgZGVmYXVsdCB0byBQU0JUIChtYWlubmV0IG9ubHksIHRlc3RuZXQgYWxyZWFkeSBjb3ZlcmVkKVxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmV0dXJuIHBzYnQgZm9yIGRpc3RyaWJ1dGVkQ3VzdG9keSB3YWxsZXRzIG9uIG1haW5uZXQnLFxuICAgICAgY29pbkZpbHRlcjogKGNvaW4pID0+IHV0eG9saWIuaXNNYWlubmV0KGNvaW4ubmV0d29yayksXG4gICAgICB3YWxsZXRGaWx0ZXI6ICh3KSA9PiB3Lm9wdGlvbnMuc3ViVHlwZSA9PT0gJ2Rpc3RyaWJ1dGVkQ3VzdG9keScsXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiAncHNidCcsXG4gICAgfSk7XG5cbiAgICAvLyBNdVNpZzIgd2FsbGV0cyBkZWZhdWx0IHRvIFBTQlQgKG1haW5uZXQgb25seSwgdGVzdG5ldCBhbHJlYWR5IGNvdmVyZWQpXG4gICAgcnVuVGVzdCh7XG4gICAgICBkZXNjcmlwdGlvbjogJ3Nob3VsZCByZXR1cm4gcHNidCBmb3Igd2FsbGV0cyB3aXRoIG11c2lnS3AgZmxhZyBvbiBtYWlubmV0JyxcbiAgICAgIGNvaW5GaWx0ZXI6IChjb2luKSA9PiB1dHhvbGliLmlzTWFpbm5ldChjb2luLm5ldHdvcmspLFxuICAgICAgd2FsbGV0RmlsdGVyOiAodykgPT4gQm9vbGVhbih3Lm9wdGlvbnMud2FsbGV0RmxhZ3M/LnNvbWUoKGYpID0+IGYubmFtZSA9PT0gJ211c2lnS3AnICYmIGYudmFsdWUgPT09ICd0cnVlJykpLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQnLFxuICAgIH0pO1xuXG4gICAgLy8gTWFpbm5ldCBCaXRjb2luIGhvdCB3YWxsZXRzIGRlZmF1bHQgdG8gUFNCVFxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmV0dXJuIHBzYnQgZm9yIG1haW5uZXQgYml0Y29pbiBob3Qgd2FsbGV0cycsXG4gICAgICBjb2luRmlsdGVyOiAoY29pbikgPT5cbiAgICAgICAgdXR4b2xpYi5pc01haW5uZXQoY29pbi5uZXR3b3JrKSAmJiB1dHhvbGliLmdldE1haW5uZXQoY29pbi5uZXR3b3JrKSA9PT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgd2FsbGV0RmlsdGVyOiAodykgPT4gdy5vcHRpb25zLnR5cGUgPT09ICdob3QnLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQnLFxuICAgIH0pO1xuXG4gICAgLy8gT3RoZXIgbWFpbm5ldCB3YWxsZXRzIGRvIE5PVCBkZWZhdWx0IHRvIFBTQlRcbiAgICBydW5UZXN0KHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIG90aGVyIG1haW5uZXQgd2FsbGV0cycsXG4gICAgICBjb2luRmlsdGVyOiAoY29pbikgPT4gdXR4b2xpYi5pc01haW5uZXQoY29pbi5uZXR3b3JrKSxcbiAgICAgIHdhbGxldEZpbHRlcjogKHcpID0+IHtcbiAgICAgICAgY29uc3QgaXNIb3RCaXRjb2luID0gdy5vcHRpb25zLnR5cGUgPT09ICdob3QnOyAvLyBUaGlzIHdpbGwgYmUgYml0Y29pbiBob3Qgd2FsbGV0c1xuICAgICAgICBjb25zdCBpc0Rpc3RyaWJ1dGVkQ3VzdG9keSA9IHcub3B0aW9ucy5zdWJUeXBlID09PSAnZGlzdHJpYnV0ZWRDdXN0b2R5JztcbiAgICAgICAgY29uc3QgaGFzTXVzaWdLcEZsYWcgPSBCb29sZWFuKHcub3B0aW9ucy53YWxsZXRGbGFncz8uc29tZSgoZikgPT4gZi5uYW1lID09PSAnbXVzaWdLcCcgJiYgZi52YWx1ZSA9PT0gJ3RydWUnKSk7XG4gICAgICAgIC8vIE9ubHkgdGVzdCBcIm90aGVyXCIgd2FsbGV0cyAtIGV4Y2x1ZGUgdGhlIHNwZWNpYWwgY2FzZXNcbiAgICAgICAgcmV0dXJuICFpc0hvdEJpdGNvaW4gJiYgIWlzRGlzdHJpYnV0ZWRDdXN0b2R5ICYmICFoYXNNdXNpZ0twRmxhZztcbiAgICAgIH0sXG4gICAgICBleHBlY3RlZFR4Rm9ybWF0OiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBUZXN0IGV4cGxpY2l0bHkgcmVxdWVzdGVkIGZvcm1hdHNcbiAgICBydW5UZXN0KHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdWxkIHJlc3BlY3QgZXhwbGljaXRseSByZXF1ZXN0ZWQgbGVnYWN5IGZvcm1hdCBvbiBtYWlubmV0JyxcbiAgICAgIGNvaW5GaWx0ZXI6IChjb2luKSA9PiB1dHhvbGliLmlzTWFpbm5ldChjb2luLm5ldHdvcmspLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ2xlZ2FjeScsXG4gICAgICByZXF1ZXN0ZWRUeEZvcm1hdDogJ2xlZ2FjeScsXG4gICAgfSk7XG5cbiAgICBydW5UZXN0KHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdWxkIHJlc3BlY3QgZXhwbGljaXRseSByZXF1ZXN0ZWQgcHNidCBmb3JtYXQnLFxuICAgICAgZXhwZWN0ZWRUeEZvcm1hdDogJ3BzYnQnLFxuICAgICAgcmVxdWVzdGVkVHhGb3JtYXQ6ICdwc2J0JyxcbiAgICB9KTtcblxuICAgIHJ1blRlc3Qoe1xuICAgICAgZGVzY3JpcHRpb246ICdzaG91bGQgcmVzcGVjdCBleHBsaWNpdGx5IHJlcXVlc3RlZCBwc2J0LWxpdGUgZm9ybWF0JyxcbiAgICAgIGV4cGVjdGVkVHhGb3JtYXQ6ICdwc2J0LWxpdGUnLFxuICAgICAgcmVxdWVzdGVkVHhGb3JtYXQ6ICdwc2J0LWxpdGUnLFxuICAgIH0pO1xuXG4gICAgLy8gVGVzdCB0aGF0IGxlZ2FjeSBmb3JtYXQgaXMgcHJvaGliaXRlZCBvbiB0ZXN0bmV0XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCB3aGVuIGxlZ2FjeSBmb3JtYXQgaXMgcmVxdWVzdGVkIG9uIHRlc3RuZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvaW4gb2YgdXR4b0NvaW5zKSB7XG4gICAgICAgIGlmICghdXR4b2xpYi5pc1Rlc3RuZXQoY29pbi5uZXR3b3JrKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gY3JlYXRlTW9ja1dhbGxldChjb2luLCB7IHR5cGU6ICdob3QnIH0pO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGdldFR4Rm9ybWF0KGNvaW4sIHdhbGxldCwgJ2xlZ2FjeScpLFxuICAgICAgICAgIEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0LFxuICAgICAgICAgIGBFeHBlY3RlZCBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCBmb3IgJHtjb2luLmdldENoYWluKCl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19