mnemonica 1.0.1 → 1.0.6

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 (89) hide show
  1. package/.ai/ONBOARDING.md +1 -1
  2. package/.ai/ask/AGENTS.md +15 -9
  3. package/.ai/rules-skill/contributing.md +1 -1
  4. package/.ai/rules-skill/define-patterns.md +8 -2
  5. package/.ai/rules-skill/ecosystem.md +4 -4
  6. package/.ai/rules-skill/instance-methods.md +48 -15
  7. package/.ai/rules-skill/type-system.md +12 -2
  8. package/AGENTS.md +6 -2
  9. package/CONTRIBUTING.md +7 -1
  10. package/FOR_HUMANS.md +143 -199
  11. package/README.md +74 -39
  12. package/build/api/errors/exceptionConstructor.js +20 -12
  13. package/build/api/errors/index.js +9 -5
  14. package/build/api/errors/throwModificationError.js +15 -9
  15. package/build/api/index.js +35 -2
  16. package/build/api/types/InstanceCreator.js +5 -2
  17. package/build/api/types/Mnemosyne.d.ts +6 -6
  18. package/build/api/types/Mnemosyne.js +43 -120
  19. package/build/api/types/Props.js +5 -3
  20. package/build/api/types/TypeProxy.js +13 -9
  21. package/build/api/types/compileNewModificatorFunctionBody.js +14 -8
  22. package/build/api/types/index.js +56 -13
  23. package/build/api/utils/index.js +21 -12
  24. package/build/constants/index.js +11 -8
  25. package/build/descriptors/types/index.js +79 -26
  26. package/build/index.d.ts +4 -4
  27. package/build/index.js +62 -15
  28. package/build/types/index.d.ts +52 -31
  29. package/build/types/index.js +1 -1
  30. package/build/utils/clone.d.ts +1 -0
  31. package/build/utils/clone.js +11 -0
  32. package/build/utils/collectConstructors.js +5 -3
  33. package/build/utils/exception.d.ts +1 -0
  34. package/build/utils/exception.js +14 -0
  35. package/build/utils/extract.d.ts +2 -3
  36. package/build/utils/extract.js +3 -2
  37. package/build/utils/fork.d.ts +1 -0
  38. package/build/utils/fork.js +33 -0
  39. package/build/utils/index.d.ts +2 -3
  40. package/build/utils/index.js +21 -7
  41. package/build/utils/merge.d.ts +2 -1
  42. package/build/utils/merge.js +10 -6
  43. package/build/utils/parent.d.ts +1 -1
  44. package/build/utils/parent.js +3 -2
  45. package/build/utils/parse.d.ts +2 -12
  46. package/build/utils/parse.js +1 -1
  47. package/build/utils/pick.d.ts +4 -3
  48. package/build/utils/pick.js +4 -5
  49. package/build/utils/sibling.d.ts +1 -0
  50. package/build/utils/sibling.js +25 -0
  51. package/build/utils/toJSON.d.ts +1 -1
  52. package/build/utils/toJSON.js +3 -2
  53. package/docs/UTILS.md +184 -0
  54. package/docs/ai-learning-trajectory.md +1 -1
  55. package/docs/async-constructors.md +3 -1
  56. package/docs/empathy-in-ai.md +170 -0
  57. package/docs/hott-primer.md +47 -0
  58. package/docs/performance-vs-security.md +2 -2
  59. package/docs/purpose.md +38 -7
  60. package/docs/tactica-pattern.md +10 -10
  61. package/docs/theory-of-operations.md +224 -0
  62. package/docs/typed-lookup.md +12 -12
  63. package/package.json +12 -7
  64. package/src/api/errors/exceptionConstructor.ts +14 -9
  65. package/src/api/errors/index.ts +8 -4
  66. package/src/api/errors/throwModificationError.ts +10 -9
  67. package/src/api/types/InstanceCreator.ts +5 -8
  68. package/src/api/types/Mnemosyne.ts +72 -231
  69. package/src/api/types/Props.ts +4 -2
  70. package/src/api/types/TypeProxy.ts +7 -11
  71. package/src/api/types/compileNewModificatorFunctionBody.ts +13 -7
  72. package/src/api/types/index.ts +15 -8
  73. package/src/api/utils/index.ts +16 -14
  74. package/src/constants/index.ts +6 -9
  75. package/src/descriptors/types/index.ts +44 -24
  76. package/src/index.ts +28 -21
  77. package/src/types/index.ts +101 -69
  78. package/src/utils/clone.ts +11 -0
  79. package/src/utils/collectConstructors.ts +4 -2
  80. package/src/utils/exception.ts +16 -0
  81. package/src/utils/extract.ts +5 -2
  82. package/src/utils/fork.ts +57 -0
  83. package/src/utils/index.ts +32 -13
  84. package/src/utils/merge.ts +18 -6
  85. package/src/utils/parent.ts +4 -6
  86. package/src/utils/parse.ts +5 -4
  87. package/src/utils/pick.ts +10 -2
  88. package/src/utils/sibling.ts +33 -0
  89. package/src/utils/toJSON.ts +3 -2
@@ -1,11 +1,14 @@
1
1
  'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.InstanceCreator = void 0;
4
7
  const constants_1 = require("../../constants");
5
8
  const { odp, SymbolConstructorName } = constants_1.constants;
6
9
  const errors_1 = require("../../descriptors/errors");
7
10
  const { WRONG_MODIFICATION_PATTERN, } = errors_1.ErrorsTypes;
8
- const utils_1 = require("../utils");
11
+ const utils_1 = __importDefault(require("../utils"));
9
12
  const { getExistentAsyncStack, makeErrorModificatorType, } = utils_1.default;
10
13
  const errors_2 = require("../errors");
11
14
  const throwModificationError_1 = require("../errors/throwModificationError");
@@ -229,4 +232,4 @@ exports.InstanceCreator = function (type, existentInstance, args, chained) {
229
232
  return self.inheritedInstance;
230
233
  };
231
234
  Object.assign(exports.InstanceCreator.prototype, InstanceCreatorPrototype);
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zdGFuY2VDcmVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS90eXBlcy9JbnN0YW5jZUNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsWUFBWSxDQUFDOzs7QUFxQmIsK0NBQTRDO0FBRTVDLE1BQU0sRUFDTCxHQUFHLEVBQ0gscUJBQXFCLEVBQ3JCLEdBQUcscUJBQVMsQ0FBQztBQUVkLHFEQUF1RDtBQUN2RCxNQUFNLEVBQUUsMEJBQTBCLEdBQUcsR0FBRyxvQkFBVyxDQUFDO0FBRXBELG9DQUFrQztBQUNsQyxNQUFNLEVBQ0wscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUN4QixHQUFHLGVBQVUsQ0FBQztBQUVmLHNDQUFxQztBQUNyQyw2RUFBMEU7QUFFMUUsbUNBRWlCO0FBRWpCLCtEQUFnRTtBQUNoRSwrQ0FBNEM7QUFJNUMsTUFBTSxjQUFjLEdBQUc7SUFFdEIsTUFBTSxFQUNMLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixHQUFHLElBQUksQ0FBQztJQUVULE1BQU0sRUFBRSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFFN0IsTUFBTSxRQUFRLEdBQUc7UUFDaEIsSUFBSTtRQUNKLFFBQVEsRUFBRyxJQUFJLENBQUMsUUFBUTtRQUN4QixnQkFBZ0I7UUFDaEIsSUFBSTtRQUNKLG1CQUFtQjtLQUNuQixDQUFDO0lBRUYsVUFBVSxDQUFDLFVBQVUsQ0FDcEIsYUFBYSxFQUNiLFFBQVEsQ0FDUixDQUFDO0lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FDZCxhQUFhLEVBQ2IsUUFBUSxDQUNSLENBQUM7QUFFSCxDQUFDLENBQUM7QUFJRixNQUFNLGVBQWUsR0FBRztJQUd2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxFQUFFLGlCQUFpQixHQUFHLEdBQUcsT0FBTyxDQUFDO0lBRXZDLE1BQU0sS0FBSyxHQUFHLElBQUEsaUJBQVMs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RTlCLElBQWEsRUFDYixnQkFBd0IsRUFDeEIsSUFBZSxFQUNmLE9BQWdCO0lBR2hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUdsQixRQUFRLENBQ1AsSUFBSSxFQUNKLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLE9BQU8sQ0FDUCxDQUFDO0lBR0YsbUJBQW1CLENBQ2xCLElBQUksRUFDSixJQUFJLENBQ0osQ0FBQztJQUdGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUd0QixRQUFRLENBQ1AsSUFBSSxFQUNKLElBQUksQ0FDSixDQUFDO0lBR0YsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQ25DLElBQUksRUFDSixJQUFJLENBQ0osQ0FBQztJQUNGLElBQUssV0FBVyxLQUFLLFNBQVMsRUFBRyxDQUFDO1FBQ2pDLE9BQU8sV0FBVyxDQUFDO0lBQ3BCLENBQUM7SUFHRCxJQUFJLENBQUMsY0FBYyxDQUFFLElBQUksQ0FBRSxDQUFDO0lBRzVCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0FBRS9CLENBQThELENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sQ0FDWix1QkFBZSxDQUFDLFNBQVMsRUFDekIsd0JBQXdCLENBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIgIFxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEluc3RhbmNlQ3JlYXRvciBvcmNoZXN0cmF0ZXMgdGhlIGZ1bGwgaW5zdGFuY2UgY29uc3RydWN0aW9uIGxpZmVjeWNsZS5cbiAqXG4gKiBQaXBlbGluZSBzdGFnZXMgKHNlZSBhbHNvIGNyZWF0ZUluc3RhbmNlTW9kaWZpY2F0b3IudHMgYW5kIEluc3RhbmNlTW9kaWZpY2F0b3IudHMpOlxuICogICAxLiBTZXR1cCAgICAgIC0gZXh0cmFjdCB0eXBlLCBjb25maWcsIHByZXBhcmUgTW9kaWZpY2F0aW9uQ29uc3RydWN0b3JcbiAqICAgMi4gU3RhY2sgICAgICAtIGNvbGxlY3QgY3JlYXRpb24gc3RhY2sgaWYgc3VibWl0U3RhY2sgb3IgY2hhaW5lZFxuICogICAzLiBibG9ja0Vycm9ycy0gaWYgcGFyZW50IGlzIEVycm9yLCBvcHRpb25hbGx5IGJsb2NrIGZ1cnRoZXIgY29uc3RydWN0aW9uXG4gKiAgIDQuIFByZS1ob29rcyAgLSBpbnZva2UgcHJlQ3JlYXRpb24gaG9va3Mgb24gY29sbGVjdGlvbiBhbmQgdHlwZVxuICogICA1LiBCdWlsZCAgICAgIC0gbWFrZUluc3RhbmNlTW9kaWZpY2F0b3IoKSB3aXJlcyBwcm90b3R5cGUgY2hhaW5cbiAqICAgNi4gQ29uc3RydWN0ICAtIG5ldyBJbnN0YW5jZU1vZGlmaWNhdG9yKC4uLmFyZ3MpIHJ1bnMgdXNlciBjb25zdHJ1Y3RvclxuICogICA3LiBBc3luYyAgICAgIC0gaWYgcmVzdWx0IGlzIFByb21pc2UsIGF0dGFjaCBhd2FpdGVyIGFuZCBzdWJ0eXBlIGZhY3Rvcmllc1xuICogICA4LiBQb3N0LXByb2MgIC0gdmFsaWRhdGUgaW5oZXJpdGFuY2UsIHNldCBfX3NlbGZfXywgaW52b2tlIHBvc3RDcmVhdGlvbiBob29rc1xuICovXG5cblxuaW1wb3J0IHtcblx0X0ludGVybmFsX1RDXywgSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgVGhlblNwZWMsIFR5cGVEZWYsXG5cdE1uZW1vbmljYUVycm9yLCBNbmVtb25pY2FDb25zdHJ1Y3RvclxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBjb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5jb25zdCB7XG5cdG9kcCxcblx0U3ltYm9sQ29uc3RydWN0b3JOYW1lXG59ID0gY29uc3RhbnRzO1xuXG5pbXBvcnQgeyBFcnJvcnNUeXBlcyB9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2Vycm9ycyc7XG5jb25zdCB7IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOLCB9ID0gRXJyb3JzVHlwZXM7XG5cbmltcG9ydCBUeXBlc1V0aWxzIGZyb20gJy4uL3V0aWxzJztcbmNvbnN0IHtcblx0Z2V0RXhpc3RlbnRBc3luY1N0YWNrLFxuXHRtYWtlRXJyb3JNb2RpZmljYXRvclR5cGUsXG59ID0gVHlwZXNVdGlscztcblxuaW1wb3J0IHsgZ2V0U3RhY2sgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgdGhyb3dNb2RpZmljYXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycy90aHJvd01vZGlmaWNhdGlvbkVycm9yJztcblxuaW1wb3J0IHtcblx0X2dldFByb3BzLCBfc2V0U2VsZiwgUHJvcHMgXG59IGZyb20gJy4vUHJvcHMnO1xuXG5pbXBvcnQgeyBtYWtlSW5zdGFuY2VNb2RpZmljYXRvciB9IGZyb20gJy4vSW5zdGFuY2VNb2RpZmljYXRvcic7XG5pbXBvcnQgeyBwYXJlbnQgfSBmcm9tICcuLi8uLi91dGlscy9wYXJlbnQnO1xuXG4vLyBpbXBvcnQgeyBNbmVtb3N5bmUgfSBmcm9tICcuL01uZW1vc3luZSc7XG4gIFxuY29uc3QgaW52b2tlUHJlSG9va3MgPSBmdW5jdGlvbiAoIHRoaXM6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQgKSB7XG5cblx0Y29uc3Qge1xuXHRcdHR5cGUsXG5cdFx0ZXhpc3RlbnRJbnN0YW5jZSxcblx0XHRhcmdzLFxuXHRcdEluc3RhbmNlTW9kaWZpY2F0b3Jcblx0fSA9IHRoaXM7XG5cblx0Y29uc3QgeyBjb2xsZWN0aW9uLCB9ID0gdHlwZTtcblxuXHRjb25zdCBob29rRGF0YSA9IHtcblx0XHR0eXBlLFxuXHRcdFR5cGVOYW1lIDogdHlwZS5UeXBlTmFtZSxcblx0XHRleGlzdGVudEluc3RhbmNlLFxuXHRcdGFyZ3MsXG5cdFx0SW5zdGFuY2VNb2RpZmljYXRvclxuXHR9O1xuXG5cdGNvbGxlY3Rpb24uaW52b2tlSG9vayhcblx0XHQncHJlQ3JlYXRpb24nLFxuXHRcdGhvb2tEYXRhIFxuXHQpO1xuXG5cdHR5cGUuaW52b2tlSG9vayhcblx0XHQncHJlQ3JlYXRpb24nLFxuXHRcdGhvb2tEYXRhIFxuXHQpO1xuXG59O1xuXG5cbiAgXG5jb25zdCBpbnZva2VQb3N0SG9va3MgPSBmdW5jdGlvbiAoIHRoaXM6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQgKSB7XG5cblx0IFxuXHRjb25zdCBjcmVhdG9yID0gdGhpcztcblx0Y29uc3QgeyBpbmhlcml0ZWRJbnN0YW5jZSwgfSA9IGNyZWF0b3I7XG5cblx0Y29uc3QgcHJvcHMgPSBfZ2V0UHJvcHMoaW5oZXJpdGVkSW5zdGFuY2UpIGFzIFByb3BzO1xuXG5cdGNvbnN0IHtcblx0XHRfX3R5cGVfXzogdHlwZSxcblx0XHRfX3BhcmVudF9fOiBleGlzdGVudEluc3RhbmNlLFxuXHRcdF9fYXJnc19fOiBhcmdzLFxuXHR9ID0gcHJvcHM7XG5cblx0Y29uc3QgeyBjb2xsZWN0aW9uLCB9ID0gdHlwZTtcblxuXHRjb25zdCBob29rVHlwZSA9IGluaGVyaXRlZEluc3RhbmNlIGluc3RhbmNlb2YgRXJyb3IgP1xuXHRcdCdjcmVhdGlvbkVycm9yJyA6ICdwb3N0Q3JlYXRpb24nO1xuXG5cdGNvbnN0IGhvb2tEYXRhID0ge1xuXHRcdHR5cGUsXG5cdFx0VHlwZU5hbWUgOiB0eXBlLlR5cGVOYW1lLFxuXHRcdGV4aXN0ZW50SW5zdGFuY2UsXG5cdFx0aW5oZXJpdGVkSW5zdGFuY2UsXG5cdFx0YXJncyxcblx0XHRjcmVhdG9yXG5cdH07XG5cblx0Y29uc3QgcmVzdWx0ID0ge1xuXG5cdFx0dHlwZSA6IHR5cGUuaW52b2tlSG9vayhcblx0XHRcdGhvb2tUeXBlLFxuXHRcdFx0aG9va0RhdGEgXG5cdFx0KSxcblxuXHRcdGNvbGxlY3Rpb24gOiBjb2xsZWN0aW9uLmludm9rZUhvb2soXG5cdFx0XHRob29rVHlwZSxcblx0XHRcdGhvb2tEYXRhIFxuXHRcdCksXG5cblx0fTtcblx0cmV0dXJuIHJlc3VsdDtcblxufTtcblxuXG4gIFxuY29uc3QgcG9zdFByb2Nlc3NpbmcgPSBmdW5jdGlvbiAoIHRoaXM6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQsIGNvbnRpbnVhdGlvbk9mPzogVHlwZURlZiApIHtcblx0IFxuXHRjb25zdCBzZWxmID0gdGhpcztcblx0Y29uc3Qge1xuXHRcdHN0YWNrLFxuXHRcdHR5cGU6IHtcblx0XHRcdGlzU3ViVHlwZSxcblx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRzdHJpY3RDaGFpbixcblx0XHRcdFx0YmxvY2tFcnJvcnNcblx0XHRcdH1cblx0XHR9XG5cdH0gPSBzZWxmO1xuXG5cdGlmICggIXNlbGYuaW5oZXJpdGVkSW5zdGFuY2UuY29uc3RydWN0b3IgKSB7XG5cdFx0Y29uc3QgbXNnID0gJ3Nob3VsZCBpbmhlcml0IGZyb20gbW5lbW9uaWNhIGluc3RhbmNlJztcblx0XHRzZWxmLnRocm93TW9kaWZpY2F0aW9uRXJyb3IoIG5ldyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTihcblx0XHRcdG1zZyxcblx0XHRcdHN0YWNrIFxuXHRcdCkgKTtcblx0fVxuXG5cdGNvbnN0IGluaGVyaXRlZENvbnN0cnVjdG9yID0gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZS5jb25zdHJ1Y3RvciBhcyBNbmVtb25pY2FDb25zdHJ1Y3Rvcjtcblx0aWYgKCAhaW5oZXJpdGVkQ29uc3RydWN0b3JbIFN5bWJvbENvbnN0cnVjdG9yTmFtZSBdICkge1xuXHRcdGNvbnN0IG1zZyA9ICdzaG91bGQgaW5oZXJpdCBmcm9tIG1uZW1vbmljYSBpbnN0YW5jZSc7XG5cdFx0c2VsZi50aHJvd01vZGlmaWNhdGlvbkVycm9yKCBuZXcgV1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk4oXG5cdFx0XHRtc2csXG5cdFx0XHRzdGFjayBcblx0XHQpICk7XG5cdH1cblxuXHRpZiAoIGNvbnRpbnVhdGlvbk9mICYmICEoIHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgaW5zdGFuY2VvZiBjb250aW51YXRpb25PZiApICkge1xuXHRcdC8vIGRlYnVnZ2VyO1xuXHRcdGNvbnN0IGljbiA9IHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UuY29uc3RydWN0b3IubmFtZTtcblx0XHRjb25zdCBtc2cgPSBgc2hvdWxkIGluaGVyaXQgZnJvbSAke2NvbnRpbnVhdGlvbk9mLlR5cGVOYW1lfSBidXQgZ290ICR7aWNufWA7XG5cdFx0c2VsZi50aHJvd01vZGlmaWNhdGlvbkVycm9yKCBuZXcgV1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk4oXG5cdFx0XHRtc2csXG5cdFx0XHRzdGFjayBcblx0XHQpICk7XG5cdFx0Ly8gdGhyb3cgbmV3IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOKG1zZywgc2VsZi5zdGFjayk7XG5cdH1cblxuXHRpZiAoaXNTdWJUeXBlICYmIHN0cmljdENoYWluKSB7XG5cdFx0XG5cdFx0aWYgKHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgaW5zdGFuY2VvZiBFcnJvciAmJiAhYmxvY2tFcnJvcnMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwcmV2ID0gcGFyZW50KHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UpIGFzIG9iamVjdCB8IG51bGw7XG5cdFx0aWYgKCFwcmV2IHx8IChwcmV2ICYmICFwcmV2LmNvbnN0cnVjdG9yKSkge1xuXHRcdFx0Y29uc3QgbXNnID0gJ3Nob3VsZCBpbmhlcml0IGZyb20gc29tZSBpbnN0YW5jZSc7XG5cdFx0XHRzZWxmLnRocm93TW9kaWZpY2F0aW9uRXJyb3IoIG5ldyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTihcblx0XHRcdFx0bXNnLFxuXHRcdFx0XHRzdGFjayBcblx0XHRcdCkgKTtcblx0XHR9XG5cdFx0Y29uc3QgcGFyZW50TmFtZSA9IHByZXYhLmNvbnN0cnVjdG9yLm5hbWU7XG5cdFx0Y29uc3QgcGFyZW50VHlwZU5hbWUgPSBzZWxmLnR5cGUucGFyZW50VHlwZSEuVHlwZU5hbWU7XG5cdFx0aWYgKHBhcmVudE5hbWUgIT09IHBhcmVudFR5cGVOYW1lKSB7XG5cdFx0XHRjb25zdCBtc2cgPSBgc2hvdWxkIGluaGVyaXQgZnJvbSAke3BhcmVudFR5cGVOYW1lfSBidXQgbWFkZSBvbiAke3BhcmVudE5hbWV9YDtcblx0XHRcdHNlbGYudGhyb3dNb2RpZmljYXRpb25FcnJvciggbmV3IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOKFxuXHRcdFx0XHRtc2csXG5cdFx0XHRcdHN0YWNrIFxuXHRcdFx0KSApO1xuXHRcdH1cblxuXHR9XG5cblx0X3NldFNlbGYoc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSk7XG5cblx0c2VsZi5pbnZva2VQb3N0SG9va3MoKTtcblxufTtcblxuY29uc3QgYWRkVGhlbiA9IGZ1bmN0aW9uICggdGhpczogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgdGhlbjogVGhlblNwZWMgKSB7XG5cblx0IFxuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZWxmLmluaGVyaXRlZEluc3RhbmNlID0gKHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgYXMgUHJvbWlzZTxvYmplY3Q+KVxuXHRcdC50aGVuKCAoKSA9PiB7XG5cdFx0XHRzZWxmLmluaGVyaXRlZEluc3RhbmNlID1cblx0XHRcdG5ldyBJbnN0YW5jZUNyZWF0b3IoXG5cdFx0XHRcdHRoZW4uc3VidHlwZSBhcyBUeXBlRGVmLFxuXHRcdFx0XHRzZWxmLmluaGVyaXRlZEluc3RhbmNlIGFzIG9iamVjdCxcblx0XHRcdFx0dGhlbi5hcmdzLFxuXHRcdFx0XHQvLyB3YXMgY2hhaW5lZCA6XG5cdFx0XHRcdHRydWVcblx0XHRcdFx0Ly8gc2VsZi5leGlzdGVudEluc3RhbmNlXG5cdFx0XHQpIGFzIHVua25vd24gYXMgUHJvbWlzZTxvYmplY3Q+O1xuXHRcdFx0cmV0dXJuIHNlbGYuaW5oZXJpdGVkSW5zdGFuY2U7XG5cdFx0fSApO1xuXG59O1xuXG5jb25zdCBtYWtlQXdhaXRlciA9IGZ1bmN0aW9uICggdGhpczogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgdHlwZTogVHlwZURlZiwgdGhlbj86IFRoZW5TcGVjICkge1xuXG5cdCBcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0c2VsZi5pbmhlcml0ZWRJbnN0YW5jZSA9IChzZWxmLmluaGVyaXRlZEluc3RhbmNlIGFzIFByb21pc2U8b2JqZWN0Pilcblx0XHQudGhlbiggKCBpbnN0YW5jZTogdW5rbm93biApID0+IHtcblxuXHRcdFx0aWYgKCB0eXBlb2YgaW5zdGFuY2UgIT09ICdvYmplY3QnICkge1xuXHRcdFx0XHRpZiAoIHNlbGYuY29uZmlnLmF3YWl0UmV0dXJuICkge1xuXHRcdFx0XHRcdGNvbnN0IG1zZyA9IGBzaG91bGQgaW5oZXJpdCBmcm9tICR7dHlwZS5UeXBlTmFtZX06IGAgK1xuXHRcdFx0XHRcdFx0YHNlZW1zIGFzeW5jICR7dHlwZS5UeXBlTmFtZX0gaGFzIG5vIHJldHVybiBzdGF0ZW1lbnRgO1xuXHRcdFx0XHRcdHRocm93IG5ldyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTihcblx0XHRcdFx0XHRcdG1zZyxcblx0XHRcdFx0XHRcdHNlbGYuc3RhY2sgXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBpbnN0YW5jZSA9PT0gbnVsbCB8fCAhKCBpbnN0YW5jZSBpbnN0YW5jZW9mIHNlbGYudHlwZSApICkge1xuXHRcdFx0XHQgXG5cdFx0XHRcdGNvbnN0IGljbiA9IChpbnN0YW5jZSBhcyBvYmplY3QpLmNvbnN0cnVjdG9yLm5hbWU7XG5cdFx0XHRcdGNvbnN0IG1zZyA9IGBzaG91bGQgaW5oZXJpdCBmcm9tICR7dHlwZS5UeXBlTmFtZX0gYnV0IGdvdCAke2ljbn1gO1xuXHRcdFx0XHR0aHJvdyBuZXcgV1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk4oXG5cdFx0XHRcdFx0bXNnLFxuXHRcdFx0XHRcdHNlbGYuc3RhY2sgXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgPSBpbnN0YW5jZSBhcyBvYmplY3Q7XG5cblx0XHRcdGNvbnN0IHByb3BzID0gX2dldFByb3BzKHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgYXMgb2JqZWN0KSBhcyBQcm9wcztcblxuXHRcdFx0IFxuXHRcdFx0aWYgKCBwcm9wcy5fX3NlbGZfXyAhPT0gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSApIHtcblx0XHRcdFx0c2VsZi5wb3N0UHJvY2Vzc2luZyggdHlwZSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZTtcblxuXHRcdH0gKVxuXHRcdC5jYXRjaCggKCBlcnJvcjogRXJyb3IgKSA9PiB7XG5cdFx0XHRpZiAoIHNlbGYuY29uZmlnLmJsb2NrRXJyb3JzICkge1xuXHRcdFx0XHRzZWxmLnRocm93TW9kaWZpY2F0aW9uRXJyb3IoIGVycm9yICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0aWYgKCB0aGVuICkge1xuXHRcdHNlbGYuYWRkVGhlbiggdGhlbiApO1xuXHR9XG5cblx0dHlwZS5zdWJ0eXBlcy5mb3JFYWNoKCAoIHN1YnR5cGU6IG9iamVjdCwgbmFtZTogc3RyaW5nICkgPT4ge1xuXHRcdCBcblx0XHQoc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbIG5hbWUgXSA9ICggLi4uYXJnczogdW5rbm93bltdICkgPT4ge1xuXHRcdFx0c2VsZi5pbmhlcml0ZWRJbnN0YW5jZSA9IHNlbGYubWFrZUF3YWl0ZXIoXG4gc3VidHlwZSBhcyBUeXBlRGVmLFxuIHtcbiBcdG5hbWUsXG4gXHRzdWJ0eXBlLFxuIFx0YXJncyxcbiB9IFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBzZWxmLmluaGVyaXRlZEluc3RhbmNlO1xuXHRcdH07XG5cdH0gKTtcblxuXHRyZXR1cm4gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZTtcblxufTtcblxuY29uc3QgSW5zdGFuY2VDcmVhdG9yUHJvdG90eXBlID0ge1xuXHRnZXRFeGlzdGVudEFzeW5jU3RhY2ssXG5cdHBvc3RQcm9jZXNzaW5nLFxuXHRtYWtlQXdhaXRlcixcblx0YWRkVGhlbixcblx0aW52b2tlUHJlSG9va3MsXG5cdGludm9rZVBvc3RIb29rcyxcblx0dGhyb3dNb2RpZmljYXRpb25FcnJvclxufTtcblxuICBcbmNvbnN0IHJ1blNldHVwID0gZnVuY3Rpb24gKFxuXHRzZWxmOiBJbnN0YW5jZUNyZWF0b3JDb250ZXh0LFxuXHR0eXBlOiBUeXBlRGVmLFxuXHRleGlzdGVudEluc3RhbmNlOiBvYmplY3QsXG5cdGFyZ3M6IHVua25vd25bXSxcblx0Y2hhaW5lZDogYm9vbGVhblxuKSB7XG5cdGNvbnN0IHtcblx0XHRjb25zdHJ1Y3RIYW5kbGVyLFxuXHRcdHByb3RvLFxuXHRcdGNvbmZpZyxcblx0XHRUeXBlTmFtZVxuXHR9ID0gdHlwZTtcblxuXHRjb25zdCB7XG5cdFx0TW9kaWZpY2F0aW9uQ29uc3RydWN0b3IsXG5cdFx0c3VibWl0U3RhY2tcblx0fSA9IGNvbmZpZztcblxuXHRjb25zdCBtYyA9IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yISgpO1xuXHRjb25zdCBNb2RpZmljYXRvclR5cGUgPSBjb25zdHJ1Y3RIYW5kbGVyKCk7XG5cblx0T2JqZWN0LmFzc2lnbihcblx0XHRzZWxmLFxuXHRcdHtcblx0XHRcdHR5cGUsXG5cdFx0XHRUeXBlTmFtZSxcblx0XHRcdGV4aXN0ZW50SW5zdGFuY2UsXG5cdFx0XHRnZXQgYXJncyAoKSB7XG5cdFx0XHRcdHJldHVybiBhcmdzO1xuXHRcdFx0fSxcblx0XHRcdE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yIDogbWMsXG5cdFx0XHRNb2RpZmljYXRvclR5cGUsXG5cdFx0XHRjb25maWcsXG5cdFx0XHRwcm90b1xuXHRcdH0gXG5cdCk7XG5cblx0aWYgKCBzdWJtaXRTdGFjayB8fCBjaGFpbmVkICkge1xuXHRcdGNvbnN0IHN0YWNrQWRkaXRpb246IHN0cmluZ1tdID0gY2hhaW5lZCA/IHNlbGYuZ2V0RXhpc3RlbnRBc3luY1N0YWNrKCBleGlzdGVudEluc3RhbmNlICkgYXMgc3RyaW5nW10gOiBbXTtcblx0XHRjb25zdCB0aXRsZSA9IGBcXG48LS0gY3JlYXRpb24gb2YgWyAke1R5cGVOYW1lfSBdIHRyYWNlZCAtLT5gO1xuXHRcdGlmICggc3VibWl0U3RhY2sgKSB7XG5cdFx0XHRnZXRTdGFjay5jYWxsKFxuXHRcdFx0XHRzZWxmLFxuXHRcdFx0XHR0aXRsZSxcblx0XHRcdFx0c3RhY2tBZGRpdGlvbiBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuc3RhY2sgPSB0aXRsZSBhcyB1bmtub3duIGFzIHN0cmluZ1tdO1xuXHRcdH1cblx0fVxufTtcblxuY29uc3QgcnVuQmxvY2tFcnJvcnNDaGVjayA9IGZ1bmN0aW9uICggc2VsZjogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgYXJnczogdW5rbm93bltdICkge1xuXHRjb25zdCB7XG5cdFx0Y29uZmlnOiB7IGJsb2NrRXJyb3JzIH0sIFR5cGVOYW1lLCBleGlzdGVudEluc3RhbmNlIFxuXHR9ID0gc2VsZjtcblx0aWYgKCBibG9ja0Vycm9ycyAmJiBleGlzdGVudEluc3RhbmNlIGluc3RhbmNlb2YgRXJyb3IgKSB7XG5cdFx0c2VsZi5Nb2RpZmljYXRvclR5cGUgPSBtYWtlRXJyb3JNb2RpZmljYXRvclR5cGUoIFR5cGVOYW1lICk7XG5cdFx0c2VsZi5JbnN0YW5jZU1vZGlmaWNhdG9yID0gbWFrZUluc3RhbmNlTW9kaWZpY2F0b3IoIHNlbGYgKTtcblx0XHRjb25zdCBibG9ja0Vycm9yc0Vycm9ySW5zdGFuY2UgPSBuZXcgc2VsZi5JbnN0YW5jZU1vZGlmaWNhdG9yKCAuLi5hcmdzICk7XG5cdFx0dGhyb3cgYmxvY2tFcnJvcnNFcnJvckluc3RhbmNlO1xuXHR9XG59O1xuXG5jb25zdCBydW5CdWlsZCA9IGZ1bmN0aW9uICggc2VsZjogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgYXJnczogdW5rbm93bltdICkge1xuXHRzZWxmLkluc3RhbmNlTW9kaWZpY2F0b3IgPSBtYWtlSW5zdGFuY2VNb2RpZmljYXRvciggc2VsZiApO1xuXG5cdGlmICggc2VsZi5jb25maWcuYmxvY2tFcnJvcnMgKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFuc3dlciA9IG5ldyBzZWxmLkluc3RhbmNlTW9kaWZpY2F0b3IoIC4uLmFyZ3MgKTtcblx0XHRcdHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgPSBhbnN3ZXI7XG5cdFx0fSBjYXRjaCAoIGVycm9yICkge1xuXHRcdFx0c2VsZi50aHJvd01vZGlmaWNhdGlvbkVycm9yKCBlcnJvciBhcyBNbmVtb25pY2FFcnJvciApO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBhbnN3ZXIgPSBuZXcgc2VsZi5JbnN0YW5jZU1vZGlmaWNhdG9yKCAuLi5hcmdzICk7XG5cdFx0c2VsZi5pbmhlcml0ZWRJbnN0YW5jZSA9IGFuc3dlcjtcblx0fVxufTtcblxuY29uc3QgcnVuQXN5bmNIYW5kbGluZyA9IGZ1bmN0aW9uICggc2VsZjogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgdHlwZTogVHlwZURlZiApIHtcblx0aWYgKCBzZWxmLmluaGVyaXRlZEluc3RhbmNlIGluc3RhbmNlb2YgUHJvbWlzZSApIHtcblx0XHRjb25zdCB3YWl0ZXIgPSBzZWxmLm1ha2VBd2FpdGVyKCB0eXBlICk7XG5cdFx0b2RwKFxuXHRcdFx0d2FpdGVyLFxuXHRcdFx0U3ltYm9sQ29uc3RydWN0b3JOYW1lLFxuXHRcdFx0e1xuXHRcdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRcdHJldHVybiB0eXBlLlR5cGVOYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9IFxuXHRcdCk7XG5cdFx0cmV0dXJuIHdhaXRlcjtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IEluc3RhbmNlQ3JlYXRvciA9IGZ1bmN0aW9uIChcblx0dGhpczogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCxcblx0dHlwZTogVHlwZURlZixcblx0ZXhpc3RlbnRJbnN0YW5jZTogb2JqZWN0LFxuXHRhcmdzOiB1bmtub3duW10sXG5cdGNoYWluZWQ6IGJvb2xlYW5cbikge1xuXG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdC8vIFBoYXNlIDE6IFNldHVwIOKAlCBiaW5kIHR5cGUsIGNvbmZpZywgYXJncywgc3RhY2sgdG8gY29udGV4dFxuXHRydW5TZXR1cChcblx0XHRzZWxmLFxuXHRcdHR5cGUsXG5cdFx0ZXhpc3RlbnRJbnN0YW5jZSxcblx0XHRhcmdzLFxuXHRcdGNoYWluZWQgXG5cdCk7XG5cblx0Ly8gUGhhc2UgMjogQ2lyY3VpdCBicmVha2VyIOKAlCBpZiBwYXJlbnQgaXMgRXJyb3IgYW5kIGJsb2NrRXJyb3JzLCBhYm9ydCBlYXJseVxuXHRydW5CbG9ja0Vycm9yc0NoZWNrKFxuXHRcdHNlbGYsXG5cdFx0YXJncyBcblx0KTtcblxuXHQvLyBQaGFzZSAzOiBQcmUtaG9va3Mg4oCUIGludm9rZSBwcmVDcmVhdGlvbiBob29rcyBvbiBjb2xsZWN0aW9uIGFuZCB0eXBlXG5cdHNlbGYuaW52b2tlUHJlSG9va3MoKTtcblxuXHQvLyBQaGFzZSA0OiBCdWlsZCDigJQgd2lyZSBwcm90b3R5cGUgY2hhaW4gYW5kIHJ1biB1c2VyIGNvbnN0cnVjdG9yXG5cdHJ1bkJ1aWxkKFxuXHRcdHNlbGYsXG5cdFx0YXJncyBcblx0KTtcblxuXHQvLyBQaGFzZSA1OiBBc3luYyBoYW5kbGluZyDigJQgaWYgUHJvbWlzZSwgZGVmZXIgdmFsaWRhdGlvbi9wb3N0SG9va3Ncblx0Y29uc3QgYXN5bmNSZXN1bHQgPSBydW5Bc3luY0hhbmRsaW5nKFxuXHRcdHNlbGYsXG5cdFx0dHlwZSBcblx0KTtcblx0aWYgKCBhc3luY1Jlc3VsdCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdHJldHVybiBhc3luY1Jlc3VsdDtcblx0fVxuXG5cdC8vIFBoYXNlIDY6IFZhbGlkYXRpb24gKyBQb3N0LWhvb2tzIOKAlCB2YWxpZGF0ZSBpbmhlcml0YW5jZSwgc2V0IF9fc2VsZl9fLCBpbnZva2UgaG9va3Ncblx0c2VsZi5wb3N0UHJvY2Vzc2luZyggdHlwZSApO1xuXG5cdC8vIFBoYXNlIDc6IFJldHVyblxuXHRyZXR1cm4gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZTtcblxufSBhcyB1bmtub3duIGFzIF9JbnRlcm5hbF9UQ188dHlwZW9mIEluc3RhbmNlQ3JlYXRvclByb3RvdHlwZT47XG5cbk9iamVjdC5hc3NpZ24oXG5cdEluc3RhbmNlQ3JlYXRvci5wcm90b3R5cGUsXG5cdEluc3RhbmNlQ3JlYXRvclByb3RvdHlwZSBcbik7XG4iXX0=
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zdGFuY2VDcmVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS90eXBlcy9JbnN0YW5jZUNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsWUFBWSxDQUFDOzs7Ozs7QUFxQmIsK0NBQTRDO0FBRTVDLE1BQU0sRUFDTCxHQUFHLEVBQ0gscUJBQXFCLEVBQ3JCLEdBQUcscUJBQVMsQ0FBQztBQUVkLHFEQUF1RDtBQUN2RCxNQUFNLEVBQUUsMEJBQTBCLEdBQUcsR0FBRyxvQkFBVyxDQUFDO0FBRXBELHFEQUFrQztBQUNsQyxNQUFNLEVBQ0wscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUN4QixHQUFHLGVBQVUsQ0FBQztBQUVmLHNDQUFxQztBQUNyQyw2RUFBMEU7QUFFMUUsbUNBRWlCO0FBRWpCLCtEQUFnRTtBQUNoRSwrQ0FBNEM7QUFJNUMsTUFBTSxjQUFjLEdBQUc7SUFFdEIsTUFBTSxFQUNMLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixHQUFHLElBQUksQ0FBQztJQUVULE1BQU0sRUFBRSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFFN0IsTUFBTSxRQUFRLEdBQUc7UUFDaEIsSUFBSTtRQUNKLFFBQVEsRUFBRyxJQUFJLENBQUMsUUFBUTtRQUN4QixnQkFBZ0I7UUFDaEIsSUFBSTtRQUNKLG1CQUFtQjtLQUNuQixDQUFDO0lBRUYsVUFBVSxDQUFDLFVBQVUsQ0FDcEIsYUFBYSxFQUNiLFFBQVEsQ0FDUixDQUFDO0lBRUYsSUFBSSxDQUFDLFVBQVUsQ0FDZCxhQUFhLEVBQ2IsUUFBUSxDQUNSLENBQUM7QUFFSCxDQUFDLENBQUM7QUFJRixNQUFNLGVBQWUsR0FBRztJQUd2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxFQUFFLGlCQUFpQixHQUFHLEdBQUcsT0FBTyxDQUFDO0lBRXZDLE1BQU0sS0FBSyxHQUFHLElBQUEsaUJB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VUFFOUIsSUFBYSxFQUNiLGdCQUF3QixFQUN4QixJQUFlLEVBQ2YsT0FBZ0I7SUFHaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBR2xCLFFBQVEsQ0FDUCxJQUFJLEVBQ0osSUFBSSxFQUNKLGdCQUFnQixFQUNoQixJQUFJLEVBQ0osT0FBTyxDQUNQLENBQUM7SUFHRixtQkFBbUIsQ0FDbEIsSUFBSSxFQUNKLElBQUksQ0FDSixDQUFDO0lBR0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBR3RCLFFBQVEsQ0FDUCxJQUFJLEVBQ0osSUFBSSxDQUNKLENBQUM7SUFHRixNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FDbkMsSUFBSSxFQUNKLElBQUksQ0FDSixDQUFDO0lBQ0YsSUFBSyxXQUFXLEtBQUssU0FBUyxFQUFHLENBQUM7UUFDakMsT0FBTyxXQUFXLENBQUM7SUFDcEIsQ0FBQztJQUdELElBQUksQ0FBQyxjQUFjLENBQUUsSUFBSSxDQUFFLENBQUM7SUFHNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7QUFFL0IsQ0FBOEQsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxDQUNaLHVCQUFlLENBQUMsU0FBUyxFQUN6Qix3QkFBd0IsQ0FDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiAgXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogSW5zdGFuY2VDcmVhdG9yIG9yY2hlc3RyYXRlcyB0aGUgZnVsbCBpbnN0YW5jZSBjb25zdHJ1Y3Rpb24gbGlmZWN5Y2xlLlxuICpcbiAqIFBpcGVsaW5lIHN0YWdlcyAoc2VlIGFsc28gY3JlYXRlSW5zdGFuY2VNb2RpZmljYXRvci50cyBhbmQgSW5zdGFuY2VNb2RpZmljYXRvci50cyk6XG4gKiAgIDEuIFNldHVwICAgICAgLSBleHRyYWN0IHR5cGUsIGNvbmZpZywgcHJlcGFyZSBNb2RpZmljYXRpb25Db25zdHJ1Y3RvclxuICogICAyLiBTdGFjayAgICAgIC0gY29sbGVjdCBjcmVhdGlvbiBzdGFjayBpZiBzdWJtaXRTdGFjayBvciBjaGFpbmVkXG4gKiAgIDMuIGJsb2NrRXJyb3JzLSBpZiBwYXJlbnQgaXMgRXJyb3IsIG9wdGlvbmFsbHkgYmxvY2sgZnVydGhlciBjb25zdHJ1Y3Rpb25cbiAqICAgNC4gUHJlLWhvb2tzICAtIGludm9rZSBwcmVDcmVhdGlvbiBob29rcyBvbiBjb2xsZWN0aW9uIGFuZCB0eXBlXG4gKiAgIDUuIEJ1aWxkICAgICAgLSBtYWtlSW5zdGFuY2VNb2RpZmljYXRvcigpIHdpcmVzIHByb3RvdHlwZSBjaGFpblxuICogICA2LiBDb25zdHJ1Y3QgIC0gbmV3IEluc3RhbmNlTW9kaWZpY2F0b3IoLi4uYXJncykgcnVucyB1c2VyIGNvbnN0cnVjdG9yXG4gKiAgIDcuIEFzeW5jICAgICAgLSBpZiByZXN1bHQgaXMgUHJvbWlzZSwgYXR0YWNoIGF3YWl0ZXIgYW5kIHN1YnR5cGUgZmFjdG9yaWVzXG4gKiAgIDguIFBvc3QtcHJvYyAgLSB2YWxpZGF0ZSBpbmhlcml0YW5jZSwgc2V0IF9fc2VsZl9fLCBpbnZva2UgcG9zdENyZWF0aW9uIGhvb2tzXG4gKi9cblxuXG5pbXBvcnQge1xuXHRfSW50ZXJuYWxfVENfLCBJbnN0YW5jZUNyZWF0b3JDb250ZXh0LCBUaGVuU3BlYywgVHlwZURlZixcblx0TW5lbW9uaWNhRXJyb3IsIE1uZW1vbmljYUNvbnN0cnVjdG9yXG59IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbmNvbnN0IHtcblx0b2RwLFxuXHRTeW1ib2xDb25zdHJ1Y3Rvck5hbWVcbn0gPSBjb25zdGFudHM7XG5cbmltcG9ydCB7IEVycm9yc1R5cGVzIH0gZnJvbSAnLi4vLi4vZGVzY3JpcHRvcnMvZXJyb3JzJztcbmNvbnN0IHsgV1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk4sIH0gPSBFcnJvcnNUeXBlcztcblxuaW1wb3J0IFR5cGVzVXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuY29uc3Qge1xuXHRnZXRFeGlzdGVudEFzeW5jU3RhY2ssXG5cdG1ha2VFcnJvck1vZGlmaWNhdG9yVHlwZSxcbn0gPSBUeXBlc1V0aWxzO1xuXG5pbXBvcnQgeyBnZXRTdGFjayB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyB0aHJvd01vZGlmaWNhdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3Rocm93TW9kaWZpY2F0aW9uRXJyb3InO1xuXG5pbXBvcnQge1xuXHRfZ2V0UHJvcHMsIF9zZXRTZWxmLCBQcm9wcyBcbn0gZnJvbSAnLi9Qcm9wcyc7XG5cbmltcG9ydCB7IG1ha2VJbnN0YW5jZU1vZGlmaWNhdG9yIH0gZnJvbSAnLi9JbnN0YW5jZU1vZGlmaWNhdG9yJztcbmltcG9ydCB7IHBhcmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL3BhcmVudCc7XG5cbi8vIGltcG9ydCB7IE1uZW1vc3luZSB9IGZyb20gJy4vTW5lbW9zeW5lJztcbiAgXG5jb25zdCBpbnZva2VQcmVIb29rcyA9IGZ1bmN0aW9uICggdGhpczogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCApIHtcblxuXHRjb25zdCB7XG5cdFx0dHlwZSxcblx0XHRleGlzdGVudEluc3RhbmNlLFxuXHRcdGFyZ3MsXG5cdFx0SW5zdGFuY2VNb2RpZmljYXRvclxuXHR9ID0gdGhpcztcblxuXHRjb25zdCB7IGNvbGxlY3Rpb24sIH0gPSB0eXBlO1xuXG5cdGNvbnN0IGhvb2tEYXRhID0ge1xuXHRcdHR5cGUsXG5cdFx0VHlwZU5hbWUgOiB0eXBlLlR5cGVOYW1lLFxuXHRcdGV4aXN0ZW50SW5zdGFuY2UsXG5cdFx0YXJncyxcblx0XHRJbnN0YW5jZU1vZGlmaWNhdG9yXG5cdH07XG5cblx0Y29sbGVjdGlvbi5pbnZva2VIb29rKFxuXHRcdCdwcmVDcmVhdGlvbicsXG5cdFx0aG9va0RhdGEgXG5cdCk7XG5cblx0dHlwZS5pbnZva2VIb29rKFxuXHRcdCdwcmVDcmVhdGlvbicsXG5cdFx0aG9va0RhdGEgXG5cdCk7XG5cbn07XG5cblxuICBcbmNvbnN0IGludm9rZVBvc3RIb29rcyA9IGZ1bmN0aW9uICggdGhpczogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCApIHtcblxuXHQgXG5cdGNvbnN0IGNyZWF0b3IgPSB0aGlzO1xuXHRjb25zdCB7IGluaGVyaXRlZEluc3RhbmNlLCB9ID0gY3JlYXRvcjtcblxuXHRjb25zdCBwcm9wcyA9IF9nZXRQcm9wcyhpbmhlcml0ZWRJbnN0YW5jZSkgYXMgUHJvcHM7XG5cblx0Y29uc3Qge1xuXHRcdF9fdHlwZV9fOiB0eXBlLFxuXHRcdF9fcGFyZW50X186IGV4aXN0ZW50SW5zdGFuY2UsXG5cdFx0X19hcmdzX186IGFyZ3MsXG5cdH0gPSBwcm9wcztcblxuXHRjb25zdCB7IGNvbGxlY3Rpb24sIH0gPSB0eXBlO1xuXG5cdGNvbnN0IGhvb2tUeXBlID0gaW5oZXJpdGVkSW5zdGFuY2UgaW5zdGFuY2VvZiBFcnJvciA/XG5cdFx0J2NyZWF0aW9uRXJyb3InIDogJ3Bvc3RDcmVhdGlvbic7XG5cblx0Y29uc3QgaG9va0RhdGEgPSB7XG5cdFx0dHlwZSxcblx0XHRUeXBlTmFtZSA6IHR5cGUuVHlwZU5hbWUsXG5cdFx0ZXhpc3RlbnRJbnN0YW5jZSxcblx0XHRpbmhlcml0ZWRJbnN0YW5jZSxcblx0XHRhcmdzLFxuXHRcdGNyZWF0b3Jcblx0fTtcblxuXHRjb25zdCByZXN1bHQgPSB7XG5cblx0XHR0eXBlIDogdHlwZS5pbnZva2VIb29rKFxuXHRcdFx0aG9va1R5cGUsXG5cdFx0XHRob29rRGF0YSBcblx0XHQpLFxuXG5cdFx0Y29sbGVjdGlvbiA6IGNvbGxlY3Rpb24uaW52b2tlSG9vayhcblx0XHRcdGhvb2tUeXBlLFxuXHRcdFx0aG9va0RhdGEgXG5cdFx0KSxcblxuXHR9O1xuXHRyZXR1cm4gcmVzdWx0O1xuXG59O1xuXG5cbiAgXG5jb25zdCBwb3N0UHJvY2Vzc2luZyA9IGZ1bmN0aW9uICggdGhpczogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgY29udGludWF0aW9uT2Y/OiBUeXBlRGVmICkge1xuXHQgXG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRjb25zdCB7XG5cdFx0c3RhY2ssXG5cdFx0dHlwZToge1xuXHRcdFx0aXNTdWJUeXBlLFxuXHRcdFx0Y29uZmlnOiB7XG5cdFx0XHRcdHN0cmljdENoYWluLFxuXHRcdFx0XHRibG9ja0Vycm9yc1xuXHRcdFx0fVxuXHRcdH1cblx0fSA9IHNlbGY7XG5cblx0aWYgKCAhc2VsZi5pbmhlcml0ZWRJbnN0YW5jZS5jb25zdHJ1Y3RvciApIHtcblx0XHRjb25zdCBtc2cgPSAnc2hvdWxkIGluaGVyaXQgZnJvbSBtbmVtb25pY2EgaW5zdGFuY2UnO1xuXHRcdHNlbGYudGhyb3dNb2RpZmljYXRpb25FcnJvciggbmV3IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOKFxuXHRcdFx0bXNnLFxuXHRcdFx0c3RhY2sgXG5cdFx0KSApO1xuXHR9XG5cblx0Y29uc3QgaW5oZXJpdGVkQ29uc3RydWN0b3IgPSBzZWxmLmluaGVyaXRlZEluc3RhbmNlLmNvbnN0cnVjdG9yIGFzIE1uZW1vbmljYUNvbnN0cnVjdG9yO1xuXHRpZiAoICFpbmhlcml0ZWRDb25zdHJ1Y3RvclsgU3ltYm9sQ29uc3RydWN0b3JOYW1lIF0gKSB7XG5cdFx0Y29uc3QgbXNnID0gJ3Nob3VsZCBpbmhlcml0IGZyb20gbW5lbW9uaWNhIGluc3RhbmNlJztcblx0XHRzZWxmLnRocm93TW9kaWZpY2F0aW9uRXJyb3IoIG5ldyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTihcblx0XHRcdG1zZyxcblx0XHRcdHN0YWNrIFxuXHRcdCkgKTtcblx0fVxuXG5cdGlmICggY29udGludWF0aW9uT2YgJiYgISggc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSBpbnN0YW5jZW9mIGNvbnRpbnVhdGlvbk9mICkgKSB7XG5cdFx0Ly8gZGVidWdnZXI7XG5cdFx0Y29uc3QgaWNuID0gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZS5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdGNvbnN0IG1zZyA9IGBzaG91bGQgaW5oZXJpdCBmcm9tICR7Y29udGludWF0aW9uT2YuVHlwZU5hbWV9IGJ1dCBnb3QgJHtpY259YDtcblx0XHRzZWxmLnRocm93TW9kaWZpY2F0aW9uRXJyb3IoIG5ldyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTihcblx0XHRcdG1zZyxcblx0XHRcdHN0YWNrIFxuXHRcdCkgKTtcblx0XHQvLyB0aHJvdyBuZXcgV1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk4obXNnLCBzZWxmLnN0YWNrKTtcblx0fVxuXG5cdGlmIChpc1N1YlR5cGUgJiYgc3RyaWN0Q2hhaW4pIHtcblx0XHRcblx0XHRpZiAoc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSBpbnN0YW5jZW9mIEVycm9yICYmICFibG9ja0Vycm9ycykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByZXYgPSBwYXJlbnQoc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSkgYXMgb2JqZWN0IHwgbnVsbDtcblx0XHRpZiAoIXByZXYgfHwgKHByZXYgJiYgIXByZXYuY29uc3RydWN0b3IpKSB7XG5cdFx0XHRjb25zdCBtc2cgPSAnc2hvdWxkIGluaGVyaXQgZnJvbSBzb21lIGluc3RhbmNlJztcblx0XHRcdHNlbGYudGhyb3dNb2RpZmljYXRpb25FcnJvciggbmV3IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOKFxuXHRcdFx0XHRtc2csXG5cdFx0XHRcdHN0YWNrIFxuXHRcdFx0KSApO1xuXHRcdH1cblx0XHRjb25zdCBwYXJlbnROYW1lID0gcHJldiEuY29uc3RydWN0b3IubmFtZTtcblx0XHRjb25zdCBwYXJlbnRUeXBlTmFtZSA9IHNlbGYudHlwZS5wYXJlbnRUeXBlIS5UeXBlTmFtZTtcblx0XHRpZiAocGFyZW50TmFtZSAhPT0gcGFyZW50VHlwZU5hbWUpIHtcblx0XHRcdGNvbnN0IG1zZyA9IGBzaG91bGQgaW5oZXJpdCBmcm9tICR7cGFyZW50VHlwZU5hbWV9IGJ1dCBtYWRlIG9uICR7cGFyZW50TmFtZX1gO1xuXHRcdFx0c2VsZi50aHJvd01vZGlmaWNhdGlvbkVycm9yKCBuZXcgV1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk4oXG5cdFx0XHRcdG1zZyxcblx0XHRcdFx0c3RhY2sgXG5cdFx0XHQpICk7XG5cdFx0fVxuXG5cdH1cblxuXHRfc2V0U2VsZihzZWxmLmluaGVyaXRlZEluc3RhbmNlKTtcblxuXHRzZWxmLmludm9rZVBvc3RIb29rcygpO1xuXG59O1xuXG5jb25zdCBhZGRUaGVuID0gZnVuY3Rpb24gKCB0aGlzOiBJbnN0YW5jZUNyZWF0b3JDb250ZXh0LCB0aGVuOiBUaGVuU3BlYyApIHtcblxuXHQgXG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgPSAoc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSBhcyBQcm9taXNlPG9iamVjdD4pXG5cdFx0LnRoZW4oICgpID0+IHtcblx0XHRcdHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgPVxuXHRcdFx0bmV3IEluc3RhbmNlQ3JlYXRvcihcblx0XHRcdFx0dGhlbi5zdWJ0eXBlIGFzIFR5cGVEZWYsXG5cdFx0XHRcdHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgYXMgb2JqZWN0LFxuXHRcdFx0XHR0aGVuLmFyZ3MsXG5cdFx0XHRcdC8vIHdhcyBjaGFpbmVkIDpcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQvLyBzZWxmLmV4aXN0ZW50SW5zdGFuY2Vcblx0XHRcdCkgYXMgdW5rbm93biBhcyBQcm9taXNlPG9iamVjdD47XG5cdFx0XHRyZXR1cm4gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZTtcblx0XHR9ICk7XG5cbn07XG5cbmNvbnN0IG1ha2VBd2FpdGVyID0gZnVuY3Rpb24gKCB0aGlzOiBJbnN0YW5jZUNyZWF0b3JDb250ZXh0LCB0eXBlOiBUeXBlRGVmLCB0aGVuPzogVGhlblNwZWMgKSB7XG5cblx0IFxuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZWxmLmluaGVyaXRlZEluc3RhbmNlID0gKHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgYXMgUHJvbWlzZTxvYmplY3Q+KVxuXHRcdC50aGVuKCAoIGluc3RhbmNlOiB1bmtub3duICkgPT4ge1xuXG5cdFx0XHRpZiAoIHR5cGVvZiBpbnN0YW5jZSAhPT0gJ29iamVjdCcgKSB7XG5cdFx0XHRcdGlmICggc2VsZi5jb25maWcuYXdhaXRSZXR1cm4gKSB7XG5cdFx0XHRcdFx0Y29uc3QgbXNnID0gYHNob3VsZCBpbmhlcml0IGZyb20gJHt0eXBlLlR5cGVOYW1lfTogYCArXG5cdFx0XHRcdFx0XHRgc2VlbXMgYXN5bmMgJHt0eXBlLlR5cGVOYW1lfSBoYXMgbm8gcmV0dXJuIHN0YXRlbWVudGA7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOKFxuXHRcdFx0XHRcdFx0bXNnLFxuXHRcdFx0XHRcdFx0c2VsZi5zdGFjayBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBpbnN0YW5jZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGluc3RhbmNlID09PSBudWxsIHx8ICEoIGluc3RhbmNlIGluc3RhbmNlb2Ygc2VsZi50eXBlICkgKSB7XG5cdFx0XHRcdCBcblx0XHRcdFx0Y29uc3QgaWNuID0gKGluc3RhbmNlIGFzIG9iamVjdCkuY29uc3RydWN0b3IubmFtZTtcblx0XHRcdFx0Y29uc3QgbXNnID0gYHNob3VsZCBpbmhlcml0IGZyb20gJHt0eXBlLlR5cGVOYW1lfSBidXQgZ290ICR7aWNufWA7XG5cdFx0XHRcdHRocm93IG5ldyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTihcblx0XHRcdFx0XHRtc2csXG5cdFx0XHRcdFx0c2VsZi5zdGFjayBcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZi5pbmhlcml0ZWRJbnN0YW5jZSA9IGluc3RhbmNlIGFzIG9iamVjdDtcblxuXHRcdFx0Y29uc3QgcHJvcHMgPSBfZ2V0UHJvcHMoc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSBhcyBvYmplY3QpIGFzIFByb3BzO1xuXG5cdFx0XHQgXG5cdFx0XHRpZiAoIHByb3BzLl9fc2VsZl9fICE9PSBzZWxmLmluaGVyaXRlZEluc3RhbmNlICkge1xuXHRcdFx0XHRzZWxmLnBvc3RQcm9jZXNzaW5nKCB0eXBlICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWxmLmluaGVyaXRlZEluc3RhbmNlO1xuXG5cdFx0fSApXG5cdFx0LmNhdGNoKCAoIGVycm9yOiBFcnJvciApID0+IHtcblx0XHRcdGlmICggc2VsZi5jb25maWcuYmxvY2tFcnJvcnMgKSB7XG5cdFx0XHRcdHNlbGYudGhyb3dNb2RpZmljYXRpb25FcnJvciggZXJyb3IgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRpZiAoIHRoZW4gKSB7XG5cdFx0c2VsZi5hZGRUaGVuKCB0aGVuICk7XG5cdH1cblxuXHR0eXBlLnN1YnR5cGVzLmZvckVhY2goICggc3VidHlwZTogb2JqZWN0LCBuYW1lOiBzdHJpbmcgKSA9PiB7XG5cdFx0IFxuXHRcdChzZWxmLmluaGVyaXRlZEluc3RhbmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsgbmFtZSBdID0gKCAuLi5hcmdzOiB1bmtub3duW10gKSA9PiB7XG5cdFx0XHRzZWxmLmluaGVyaXRlZEluc3RhbmNlID0gc2VsZi5tYWtlQXdhaXRlciggc3VidHlwZSBhcyBUeXBlRGVmLCB7XG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHN1YnR5cGUsXG5cdFx0XHRcdGFyZ3MsXG5cdFx0XHR9ICk7XG5cdFx0XHRyZXR1cm4gc2VsZi5pbmhlcml0ZWRJbnN0YW5jZTtcblx0XHR9O1xuXHR9ICk7XG5cblx0cmV0dXJuIHNlbGYuaW5oZXJpdGVkSW5zdGFuY2U7XG5cbn07XG5cbmNvbnN0IEluc3RhbmNlQ3JlYXRvclByb3RvdHlwZSA9IHtcblx0Z2V0RXhpc3RlbnRBc3luY1N0YWNrLFxuXHRwb3N0UHJvY2Vzc2luZyxcblx0bWFrZUF3YWl0ZXIsXG5cdGFkZFRoZW4sXG5cdGludm9rZVByZUhvb2tzLFxuXHRpbnZva2VQb3N0SG9va3MsXG5cdHRocm93TW9kaWZpY2F0aW9uRXJyb3Jcbn07XG5cbiAgXG5jb25zdCBydW5TZXR1cCA9IGZ1bmN0aW9uIChcblx0c2VsZjogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCxcblx0dHlwZTogVHlwZURlZixcblx0ZXhpc3RlbnRJbnN0YW5jZTogb2JqZWN0LFxuXHRhcmdzOiB1bmtub3duW10sXG5cdGNoYWluZWQ6IGJvb2xlYW5cbikge1xuXHRjb25zdCB7XG5cdFx0Y29uc3RydWN0SGFuZGxlcixcblx0XHRwcm90byxcblx0XHRjb25maWcsXG5cdFx0VHlwZU5hbWVcblx0fSA9IHR5cGU7XG5cblx0Y29uc3Qge1xuXHRcdE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yLFxuXHRcdHN1Ym1pdFN0YWNrXG5cdH0gPSBjb25maWc7XG5cblx0Y29uc3QgbWMgPSBNb2RpZmljYXRpb25Db25zdHJ1Y3RvciEoKTtcblx0Y29uc3QgTW9kaWZpY2F0b3JUeXBlID0gY29uc3RydWN0SGFuZGxlcigpO1xuXG5cdE9iamVjdC5hc3NpZ24oXG5cdFx0c2VsZixcblx0XHR7XG5cdFx0XHR0eXBlLFxuXHRcdFx0VHlwZU5hbWUsXG5cdFx0XHRleGlzdGVudEluc3RhbmNlLFxuXHRcdFx0Z2V0IGFyZ3MgKCkge1xuXHRcdFx0XHRyZXR1cm4gYXJncztcblx0XHRcdH0sXG5cdFx0XHRNb2RpZmljYXRpb25Db25zdHJ1Y3RvciA6IG1jLFxuXHRcdFx0TW9kaWZpY2F0b3JUeXBlLFxuXHRcdFx0Y29uZmlnLFxuXHRcdFx0cHJvdG9cblx0XHR9IFxuXHQpO1xuXG5cdGlmICggc3VibWl0U3RhY2sgfHwgY2hhaW5lZCApIHtcblx0XHRjb25zdCBzdGFja0FkZGl0aW9uOiBzdHJpbmdbXSA9IGNoYWluZWQgPyBzZWxmLmdldEV4aXN0ZW50QXN5bmNTdGFjayggZXhpc3RlbnRJbnN0YW5jZSApIGFzIHN0cmluZ1tdIDogW107XG5cdFx0Y29uc3QgdGl0bGUgPSBgXFxuPC0tIGNyZWF0aW9uIG9mIFsgJHtUeXBlTmFtZX0gXSB0cmFjZWQgLS0+YDtcblx0XHRpZiAoIHN1Ym1pdFN0YWNrICkge1xuXHRcdFx0Z2V0U3RhY2suY2FsbChcblx0XHRcdFx0c2VsZixcblx0XHRcdFx0dGl0bGUsXG5cdFx0XHRcdHN0YWNrQWRkaXRpb24gXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLnN0YWNrID0gdGl0bGUgYXMgdW5rbm93biBhcyBzdHJpbmdbXTtcblx0XHR9XG5cdH1cbn07XG5cbmNvbnN0IHJ1bkJsb2NrRXJyb3JzQ2hlY2sgPSBmdW5jdGlvbiAoIHNlbGY6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQsIGFyZ3M6IHVua25vd25bXSApIHtcblx0Y29uc3Qge1xuXHRcdGNvbmZpZzogeyBibG9ja0Vycm9ycyB9LCBUeXBlTmFtZSwgZXhpc3RlbnRJbnN0YW5jZSBcblx0fSA9IHNlbGY7XG5cdGlmICggYmxvY2tFcnJvcnMgJiYgZXhpc3RlbnRJbnN0YW5jZSBpbnN0YW5jZW9mIEVycm9yICkge1xuXHRcdHNlbGYuTW9kaWZpY2F0b3JUeXBlID0gbWFrZUVycm9yTW9kaWZpY2F0b3JUeXBlKCBUeXBlTmFtZSApO1xuXHRcdHNlbGYuSW5zdGFuY2VNb2RpZmljYXRvciA9IG1ha2VJbnN0YW5jZU1vZGlmaWNhdG9yKCBzZWxmICk7XG5cdFx0Y29uc3QgYmxvY2tFcnJvcnNFcnJvckluc3RhbmNlID0gbmV3IHNlbGYuSW5zdGFuY2VNb2RpZmljYXRvciggLi4uYXJncyApO1xuXHRcdHRocm93IGJsb2NrRXJyb3JzRXJyb3JJbnN0YW5jZTtcblx0fVxufTtcblxuY29uc3QgcnVuQnVpbGQgPSBmdW5jdGlvbiAoIHNlbGY6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQsIGFyZ3M6IHVua25vd25bXSApIHtcblx0c2VsZi5JbnN0YW5jZU1vZGlmaWNhdG9yID0gbWFrZUluc3RhbmNlTW9kaWZpY2F0b3IoIHNlbGYgKTtcblxuXHRpZiAoIHNlbGYuY29uZmlnLmJsb2NrRXJyb3JzICkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhbnN3ZXIgPSBuZXcgc2VsZi5JbnN0YW5jZU1vZGlmaWNhdG9yKCAuLi5hcmdzICk7XG5cdFx0XHRzZWxmLmluaGVyaXRlZEluc3RhbmNlID0gYW5zd2VyO1xuXHRcdH0gY2F0Y2ggKCBlcnJvciApIHtcblx0XHRcdHNlbGYudGhyb3dNb2RpZmljYXRpb25FcnJvciggZXJyb3IgYXMgTW5lbW9uaWNhRXJyb3IgKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgYW5zd2VyID0gbmV3IHNlbGYuSW5zdGFuY2VNb2RpZmljYXRvciggLi4uYXJncyApO1xuXHRcdHNlbGYuaW5oZXJpdGVkSW5zdGFuY2UgPSBhbnN3ZXI7XG5cdH1cbn07XG5cbmNvbnN0IHJ1bkFzeW5jSGFuZGxpbmcgPSBmdW5jdGlvbiAoIHNlbGY6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQsIHR5cGU6IFR5cGVEZWYgKSB7XG5cdGlmICggc2VsZi5pbmhlcml0ZWRJbnN0YW5jZSBpbnN0YW5jZW9mIFByb21pc2UgKSB7XG5cdFx0Y29uc3Qgd2FpdGVyID0gc2VsZi5tYWtlQXdhaXRlciggdHlwZSApO1xuXHRcdG9kcChcblx0XHRcdHdhaXRlcixcblx0XHRcdFN5bWJvbENvbnN0cnVjdG9yTmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHlwZS5UeXBlTmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBcblx0XHQpO1xuXHRcdHJldHVybiB3YWl0ZXI7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBJbnN0YW5jZUNyZWF0b3IgPSBmdW5jdGlvbiAoXG5cdHRoaXM6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQsXG5cdHR5cGU6IFR5cGVEZWYsXG5cdGV4aXN0ZW50SW5zdGFuY2U6IG9iamVjdCxcblx0YXJnczogdW5rbm93bltdLFxuXHRjaGFpbmVkOiBib29sZWFuXG4pIHtcblxuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHQvLyBQaGFzZSAxOiBTZXR1cCDigJQgYmluZCB0eXBlLCBjb25maWcsIGFyZ3MsIHN0YWNrIHRvIGNvbnRleHRcblx0cnVuU2V0dXAoXG5cdFx0c2VsZixcblx0XHR0eXBlLFxuXHRcdGV4aXN0ZW50SW5zdGFuY2UsXG5cdFx0YXJncyxcblx0XHRjaGFpbmVkIFxuXHQpO1xuXG5cdC8vIFBoYXNlIDI6IENpcmN1aXQgYnJlYWtlciDigJQgaWYgcGFyZW50IGlzIEVycm9yIGFuZCBibG9ja0Vycm9ycywgYWJvcnQgZWFybHlcblx0cnVuQmxvY2tFcnJvcnNDaGVjayhcblx0XHRzZWxmLFxuXHRcdGFyZ3MgXG5cdCk7XG5cblx0Ly8gUGhhc2UgMzogUHJlLWhvb2tzIOKAlCBpbnZva2UgcHJlQ3JlYXRpb24gaG9va3Mgb24gY29sbGVjdGlvbiBhbmQgdHlwZVxuXHRzZWxmLmludm9rZVByZUhvb2tzKCk7XG5cblx0Ly8gUGhhc2UgNDogQnVpbGQg4oCUIHdpcmUgcHJvdG90eXBlIGNoYWluIGFuZCBydW4gdXNlciBjb25zdHJ1Y3RvclxuXHRydW5CdWlsZChcblx0XHRzZWxmLFxuXHRcdGFyZ3MgXG5cdCk7XG5cblx0Ly8gUGhhc2UgNTogQXN5bmMgaGFuZGxpbmcg4oCUIGlmIFByb21pc2UsIGRlZmVyIHZhbGlkYXRpb24vcG9zdEhvb2tzXG5cdGNvbnN0IGFzeW5jUmVzdWx0ID0gcnVuQXN5bmNIYW5kbGluZyhcblx0XHRzZWxmLFxuXHRcdHR5cGUgXG5cdCk7XG5cdGlmICggYXN5bmNSZXN1bHQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRyZXR1cm4gYXN5bmNSZXN1bHQ7XG5cdH1cblxuXHQvLyBQaGFzZSA2OiBWYWxpZGF0aW9uICsgUG9zdC1ob29rcyDigJQgdmFsaWRhdGUgaW5oZXJpdGFuY2UsIHNldCBfX3NlbGZfXywgaW52b2tlIGhvb2tzXG5cdHNlbGYucG9zdFByb2Nlc3NpbmcoIHR5cGUgKTtcblxuXHQvLyBQaGFzZSA3OiBSZXR1cm5cblx0cmV0dXJuIHNlbGYuaW5oZXJpdGVkSW5zdGFuY2U7XG5cbn0gYXMgdW5rbm93biBhcyBfSW50ZXJuYWxfVENfPHR5cGVvZiBJbnN0YW5jZUNyZWF0b3JQcm90b3R5cGU+O1xuXG5PYmplY3QuYXNzaWduKFxuXHRJbnN0YW5jZUNyZWF0b3IucHJvdG90eXBlLFxuXHRJbnN0YW5jZUNyZWF0b3JQcm90b3R5cGUgXG4pO1xuIl19
@@ -1,11 +1,11 @@
1
- import { _Internal_TC_ } from '../../types';
1
+ import { _Internal_TC_, TypeDef } from '../../types';
2
2
  export declare const Mnemosyne: _Internal_TC_<object>;
3
3
  declare const _default: {
4
- readonly createMnemosyne: (Uranus: unknown, exposeInstanceMethods: boolean) => object;
5
- readonly prepareSubtypeForConstruction: (subtypeName: string, inheritedInstance: unknown) => _Internal_TC_<{
4
+ readonly createMnemosyne: (Uranus: unknown) => object;
5
+ readonly prepareSubtypeForConstruction: (subtypeName: string, inheritedInstance: unknown) => ((this: unknown, ..._args: unknown[]) => {
6
6
  getExistentAsyncStack: (existentInstance: import("../utils").asyncStack) => unknown;
7
- postProcessing: (this: import("../../types").InstanceCreatorContext, continuationOf?: import("./Props").TypeDef) => void;
8
- makeAwaiter: (this: import("../../types").InstanceCreatorContext, type: import("./Props").TypeDef, then?: import("../../types").ThenSpec) => object;
7
+ postProcessing: (this: import("../../types").InstanceCreatorContext, continuationOf?: TypeDef) => void;
8
+ makeAwaiter: (this: import("../../types").InstanceCreatorContext, type: TypeDef, then?: import("../../types").ThenSpec) => object;
9
9
  addThen: (this: import("../../types").InstanceCreatorContext, then: import("../../types").ThenSpec) => void;
10
10
  invokePreHooks: (this: import("../../types").InstanceCreatorContext) => void;
11
11
  invokePostHooks: (this: import("../../types").InstanceCreatorContext) => {
@@ -13,7 +13,7 @@ declare const _default: {
13
13
  collection: Set<unknown>;
14
14
  };
15
15
  throwModificationError: (this: import("../../types").InstanceCreatorContext, error: import("../../types").MnemonicaError) => void;
16
- }> | undefined;
16
+ }) | undefined;
17
17
  readonly getDefaultPrototype: () => any;
18
18
  };
19
19
  export default _default;
@@ -1,89 +1,28 @@
1
1
  'use strict';
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Mnemosyne = void 0;
4
7
  const constants_1 = require("../../constants");
5
8
  const { odp, SymbolConstructorName, MNEMONICA, } = constants_1.constants;
6
- const utils_1 = require("../utils");
9
+ const utils_1 = __importDefault(require("../utils"));
7
10
  const { getTypeChecker, findSubTypeFromParent, reflectPrimitiveWrappers } = utils_1.default;
8
- const extract_1 = require("../../utils/extract");
9
- const parent_1 = require("../../utils/parent");
10
- const pick_1 = require("../../utils/pick");
11
- const exceptionConstructor_1 = require("../errors/exceptionConstructor");
12
11
  const InstanceCreator_1 = require("./InstanceCreator");
13
12
  const Props_1 = require("./Props");
14
13
  const getDefaultPrototype = () => {
15
- return Object.create(null);
16
- };
17
- const MnemonicaProtoProps = {
18
- extract() {
19
- return function () {
20
- const result = (0, extract_1.extract)(this);
21
- return result;
22
- };
23
- },
24
- pick() {
25
- return function (...args) {
26
- const result = (0, pick_1.pick)(this, ...args);
27
- return result;
28
- };
29
- },
30
- parent() {
31
- return function (constructorLookupPath) {
32
- const result = (0, parent_1.parent)(this, constructorLookupPath);
33
- return result;
34
- };
35
- },
36
- clone() {
37
- return this.fork();
38
- },
39
- fork() {
40
- const props = (0, Props_1._getProps)(this);
41
- const { __type__: type, __collection__: collection, __parent__: existentInstance, __args__, __self__, } = props;
42
- const { isSubType, TypeName } = type;
43
- return function (...forkArgs) {
44
- let forked;
45
- const Constructor = isSubType ?
46
- existentInstance :
47
- collection;
48
- const args = forkArgs.length ? forkArgs : __args__;
49
- if (this === __self__) {
50
- forked = new (Constructor[TypeName])(...args);
51
- }
52
- else {
53
- forked = new InstanceCreator_1.InstanceCreator(type, reflectPrimitiveWrappers(this), args);
54
- }
55
- return forked;
56
- };
57
- },
58
- [SymbolConstructorName]() {
59
- return MNEMONICA;
60
- },
61
- exception() {
62
- const self = this;
63
- return function (error, ...args) {
64
- const target = new.target;
65
- return exceptionConstructor_1.default.call(self, target, error, ...args);
66
- };
67
- },
68
- sibling() {
69
- const siblings = (SiblingTypeName) => {
70
- const props = (0, Props_1._getProps)(this);
71
- const { __collection__: collection, } = props;
72
- const sibling = collection[SiblingTypeName];
73
- return sibling;
74
- };
75
- return new Proxy(siblings, {
76
- get(_, prop) {
77
- const result = siblings(prop);
78
- return result;
79
- },
80
- apply(_, __, args) {
81
- const result = siblings(args[0]);
82
- return result;
83
- }
84
- });
85
- }
14
+ const result = Object.create(null);
15
+ return result;
86
16
  };
17
+ const mnemonicaInstanceMethodNames = [
18
+ 'extract',
19
+ 'pick',
20
+ 'parent',
21
+ 'clone',
22
+ 'fork',
23
+ 'exception',
24
+ 'sibling',
25
+ ];
87
26
  const staticProps = [
88
27
  'constructor',
89
28
  'prototype',
@@ -97,7 +36,7 @@ const staticProps = [
97
36
  'inspect',
98
37
  'showDiff',
99
38
  ]
100
- .concat(Object.keys(MnemonicaProtoProps))
39
+ .concat(mnemonicaInstanceMethodNames)
101
40
  .concat(Object.getOwnPropertyNames(Object.prototype))
102
41
  .concat(Object.getOwnPropertyNames(Function.prototype))
103
42
  .reduce((obj, key) => {
@@ -105,27 +44,21 @@ const staticProps = [
105
44
  return obj;
106
45
  }, Object.create(null));
107
46
  const makeSubTypeProxy = function (subtype, inheritedInstance) {
108
- const subtypeProxy = new Proxy(InstanceCreator_1.InstanceCreator, {
109
- get(Target, _prop) {
110
- if (_prop === Symbol.hasInstance) {
111
- const result = getTypeChecker(subtype.TypeName);
112
- return result;
113
- }
114
- return Reflect.get(Target, _prop);
115
- },
116
- construct(Target, _args) {
117
- return new Target(subtype, inheritedInstance, _args);
118
- },
119
- apply(Target, thisArg, _args) {
120
- if (thisArg === undefined) {
121
- thisArg = inheritedInstance;
122
- }
123
- const existentInstance = reflectPrimitiveWrappers(thisArg);
124
- const entity = new Target(subtype, existentInstance, _args);
125
- return entity;
126
- },
47
+ const SubTypeProxy = function (..._args) {
48
+ if (new.target) {
49
+ const instanceResult = new InstanceCreator_1.InstanceCreator(subtype, inheritedInstance, _args);
50
+ return instanceResult;
51
+ }
52
+ const thisArg = this === undefined ? inheritedInstance : this;
53
+ const existentInstance = reflectPrimitiveWrappers(thisArg);
54
+ const instance = new InstanceCreator_1.InstanceCreator(subtype, existentInstance, _args);
55
+ return instance;
56
+ };
57
+ const typeChecker = getTypeChecker(subtype.TypeName);
58
+ Object.defineProperty(SubTypeProxy, Symbol.hasInstance, {
59
+ value: typeChecker
127
60
  });
128
- return subtypeProxy;
61
+ return SubTypeProxy;
129
62
  };
130
63
  const prepareSubtypeForConstruction = function (subtypeName, inheritedInstance) {
131
64
  const propInstance = Reflect.getPrototypeOf(inheritedInstance);
@@ -139,7 +72,8 @@ const prepareSubtypeForConstruction = function (subtypeName, inheritedInstance)
139
72
  strictChain ?
140
73
  undefined :
141
74
  findSubTypeFromParent(inheritedInstance, subtypeName);
142
- return subtype ? makeSubTypeProxy(subtype, inheritedInstance) : undefined;
75
+ const result = subtype ? makeSubTypeProxy(subtype, inheritedInstance) : undefined;
76
+ return result;
143
77
  };
144
78
  const mnemosyneProxyHandlerGet = (target, prop, receiver) => {
145
79
  const result = Reflect.get(target, prop, receiver);
@@ -153,9 +87,10 @@ const mnemosyneProxyHandlerGet = (target, prop, receiver) => {
153
87
  return result;
154
88
  }
155
89
  const subtype = prepareSubtypeForConstruction(prop, receiver);
156
- return subtype || result;
90
+ const subTypeResult = subtype || result;
91
+ return subTypeResult;
157
92
  };
158
- exports.Mnemosyne = function (mnemonica, exposeInstanceMethods) {
93
+ exports.Mnemosyne = function (mnemonica) {
159
94
  const instance = this;
160
95
  const Mnemonica = function () {
161
96
  odp(this, SymbolConstructorName, {
@@ -165,23 +100,11 @@ exports.Mnemosyne = function (mnemonica, exposeInstanceMethods) {
165
100
  });
166
101
  };
167
102
  Object.setPrototypeOf(Mnemonica.prototype, mnemonica);
168
- if (exposeInstanceMethods) {
169
- Object.entries(MnemonicaProtoProps).forEach(([name, method]) => {
170
- odp(Mnemonica.prototype, name, {
171
- get() {
172
- return method.call(this);
173
- }
174
- });
175
- });
176
- Object.getOwnPropertySymbols(MnemonicaProtoProps).forEach((symbol) => {
177
- odp(Mnemonica.prototype, symbol, {
178
- get() {
179
- const symbolMethod = Reflect.get(MnemonicaProtoProps, symbol);
180
- return symbolMethod.call(this);
181
- }
182
- });
183
- });
184
- }
103
+ odp(Mnemonica.prototype, SymbolConstructorName, {
104
+ get() {
105
+ return MNEMONICA;
106
+ }
107
+ });
185
108
  odp(Mnemonica.prototype, Symbol.hasInstance, {
186
109
  get() {
187
110
  const result = getTypeChecker(this.constructor.name);
@@ -191,9 +114,9 @@ exports.Mnemosyne = function (mnemonica, exposeInstanceMethods) {
191
114
  const proto = new Mnemonica();
192
115
  Reflect.setPrototypeOf(instance, proto);
193
116
  };
194
- const createMnemosyne = function (Uranus, exposeInstanceMethods) {
117
+ const createMnemosyne = function (Uranus) {
195
118
  const uranus = reflectPrimitiveWrappers(Uranus);
196
- const mnemosyne = new exports.Mnemosyne(uranus, exposeInstanceMethods);
119
+ const mnemosyne = new exports.Mnemosyne(uranus);
197
120
  const mnemosyneProxy = new Proxy(mnemosyne, {
198
121
  get: mnemosyneProxyHandlerGet
199
122
  });
@@ -210,4 +133,4 @@ exports.default = {
210
133
  return getDefaultPrototype;
211
134
  },
212
135
  };
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW5lbW9zeW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS90eXBlcy9NbmVtb3N5bmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFPYiwrQ0FBNEM7QUFDNUMsTUFBTSxFQUNMLEdBQUcsRUFDSCxxQkFBcUIsRUFFckIsU0FBUyxHQUVULEdBQUcscUJBQVMsQ0FBQztBQUVkLG9DQUFrQztBQUNsQyxNQUFNLEVBQ0wsY0FBYyxFQUNkLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsR0FBRyxlQUFVLENBQUM7QUFFZixpREFBOEM7QUFDOUMsK0NBQTRDO0FBQzVDLDJDQUF3QztBQUV4Qyx5RUFBa0U7QUFFbEUsdURBQW9EO0FBRXBELG1DQUVpQjtBQUVqQixNQUFNLG1CQUFtQixHQUFHLEdBQUcsRUFBRTtJQUNoQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBSUYsTUFBTSxtQkFBbUIsR0FBRztJQUUzQixPQUFPO1FBQ04sT0FBTztZQUNOLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQU8sRUFBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixPQUFPLE1BQU0sQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0gsT0FBTyxVQUF3QixHQUFHLElBQTJCO1lBQzVELE1BQU0sTUFBTSxHQUFHLElBQUEsV0FBSSxFQUNsQixJQUFJLEVBQ0osR0FBRyxJQUFJLENBQ1AsQ0FBQztZQUNGLE9BQU8sTUFBTSxDQUFDO1FBQ2YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDTCxPQUFPLFVBQXdCLHFCQUE2QjtZQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQU0sRUFDcEIsSUFBSSxFQUNKLHFCQUFxQixDQUNyQixDQUFDO1lBQ0YsT0FBTyxNQUFNLENBQUM7UUFDZixDQUFDLENBQUM7SUFDSCxDQUFD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QUNELElBQUksbUJBQW1CO1FBQ3RCLE9BQU8sbUJBQW1CLENBQUM7SUFDNUIsQ0FBQztDQU9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7IF9JbnRlcm5hbF9UQ18gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmludGVyZmFjZSBTdWJ0eXBlRW50cnkge1xuXHRUeXBlTmFtZTogc3RyaW5nO1xufVxuaW1wb3J0IHsgY29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmNvbnN0IHtcblx0b2RwLFxuXHRTeW1ib2xDb25zdHJ1Y3Rvck5hbWUsXG5cblx0TU5FTU9OSUNBLFxuXG59ID0gY29uc3RhbnRzO1xuXG5pbXBvcnQgVHlwZXNVdGlscyBmcm9tICcuLi91dGlscyc7XG5jb25zdCB7XG5cdGdldFR5cGVDaGVja2VyLFxuXHRmaW5kU3ViVHlwZUZyb21QYXJlbnQsXG5cdHJlZmxlY3RQcmltaXRpdmVXcmFwcGVyc1xufSA9IFR5cGVzVXRpbHM7XG5cbmltcG9ydCB7IGV4dHJhY3QgfSBmcm9tICcuLi8uLi91dGlscy9leHRyYWN0JztcbmltcG9ydCB7IHBhcmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL3BhcmVudCc7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvcGljayc7XG5cbmltcG9ydCBleGNlcHRpb25Db25zdHJ1Y3RvciBmcm9tICcuLi9lcnJvcnMvZXhjZXB0aW9uQ29uc3RydWN0b3InO1xuXG5pbXBvcnQgeyBJbnN0YW5jZUNyZWF0b3IgfSBmcm9tICcuL0luc3RhbmNlQ3JlYXRvcic7XG5cbmltcG9ydCB7XG5cdF9nZXRQcm9wcywgUHJvcHMgXG59IGZyb20gJy4vUHJvcHMnO1xuXG5jb25zdCBnZXREZWZhdWx0UHJvdG90eXBlID0gKCkgPT4ge1xuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn07XG5cbi8vIGNvbnN0IEluc3RhbmNlUm9vdHMgPSBuZXcgV2Vha01hcDtcblxuY29uc3QgTW5lbW9uaWNhUHJvdG9Qcm9wcyA9IHtcblxuXHRleHRyYWN0ICgpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gZXh0cmFjdCh0aGlzKTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fSxcblxuXHRwaWNrICgpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgLi4uYXJnczogKHN0cmluZyB8IHN0cmluZ1tdKVtdKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBwaWNrKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHQuLi5hcmdzXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9O1xuXHR9LFxuXG5cdHBhcmVudCAoKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBvYmplY3QsIGNvbnN0cnVjdG9yTG9va3VwUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBwYXJlbnQoXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGNvbnN0cnVjdG9yTG9va3VwUGF0aFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0fSxcblxuXHRjbG9uZSAodGhpczogeyBmb3JrOiAoKSA9PiBvYmplY3QgfSkge1xuXHRcdHJldHVybiB0aGlzLmZvcmsoKTtcblx0fSxcblxuXHRmb3JrICh0aGlzOiBvYmplY3QpIHtcblxuXHRcdGNvbnN0IHByb3BzID0gX2dldFByb3BzKHRoaXMpIGFzIFByb3BzO1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0X190eXBlX186IHR5cGUsXG5cdFx0XHRfX2NvbGxlY3Rpb25fXzogY29sbGVjdGlvbixcblx0XHRcdF9fcGFyZW50X186IGV4aXN0ZW50SW5zdGFuY2UsXG5cdFx0XHRfX2FyZ3NfXyxcblx0XHRcdF9fc2VsZl9fLFxuXHRcdH0gPSBwcm9wcztcblxuXHRcdGNvbnN0IHtcblx0XHRcdGlzU3ViVHlwZSxcblx0XHRcdFR5cGVOYW1lXG5cdFx0fSA9IHR5cGU7XG5cblx0XHQvLyAnZnVuY3Rpb24nLCBjYXVzZSBtaWdodCBiZSBjYWxsZWQgd2l0aCAnbmV3J1xuXHRcdCBcblx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgLi4uZm9ya0FyZ3M6IHVua25vd25bXSkge1xuXG5cdFx0XHRsZXQgZm9ya2VkO1xuXHRcdFx0Y29uc3QgQ29uc3RydWN0b3IgPSBpc1N1YlR5cGUgP1xuXHRcdFx0XHRleGlzdGVudEluc3RhbmNlIDpcblx0XHRcdFx0Y29sbGVjdGlvbjtcblxuXHRcdFx0Y29uc3QgYXJncyA9IGZvcmtBcmdzLmxlbmd0aCA/IGZvcmtBcmdzIDogX19hcmdzX187XG5cblxuXHRcdFx0aWYgKHRoaXMgPT09IF9fc2VsZl9fKSB7XG5cdFx0XHRcdCBcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAgdGhpcyBpcyBkZWZpbml0ZWx5IGEgY29uc3RydWN0b3Jcblx0XHRcdFx0Zm9ya2VkID0gbmV3IChDb25zdHJ1Y3RvclsgVHlwZU5hbWUgXSkoLi4uYXJncyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBmb3JrLmNhbGwgPyBsZXQncyBkbyBpdCAhXG5cdFx0XHRcdGZvcmtlZCA9IG5ldyBJbnN0YW5jZUNyZWF0b3IoXG5cdFx0XHRcdFx0dHlwZSxcblx0XHRcdFx0XHRyZWZsZWN0UHJpbWl0aXZlV3JhcHBlcnModGhpcyksXG5cdFx0XHRcdFx0YXJnc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm9ya2VkO1xuXG5cdFx0fTtcblx0fSxcblxuXHRbIFN5bWJvbENvbnN0cnVjdG9yTmFtZSBdICgpIHtcblx0XHRyZXR1cm4gTU5FTU9OSUNBO1xuXHR9LFxuXG5cdGV4Y2VwdGlvbiAoKSB7XG5cdFx0IFxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHJldHVybiBmdW5jdGlvbiAoZXJyb3I6IEVycm9yLCAuLi5hcmdzOiB1bmtub3duW10pIHtcblx0XHRcdGNvbnN0IHRhcmdldCA9IG5ldy50YXJnZXQ7XG5cdFx0XHRyZXR1cm4gZXhjZXB0aW9uQ29uc3RydWN0b3IuY2FsbChcblx0XHRcdFx0c2VsZixcblx0XHRcdFx0dGFyZ2V0LFxuXHRcdFx0XHRlcnJvcixcblx0XHRcdFx0Li4uYXJnc1xuXHRcdFx0KTtcblx0XHR9O1xuXHR9LFxuXG5cdHNpYmxpbmcgKCkge1xuXHRcdCBcblx0XHRjb25zdCBzaWJsaW5ncyA9IChTaWJsaW5nVHlwZU5hbWU6IHN0cmluZykgPT4ge1xuXG5cdFx0XHRjb25zdCBwcm9wcyA9IF9nZXRQcm9wcyh0aGlzKSBhcyBQcm9wcztcblx0XHRcdGNvbnN0IHsgX19jb2xsZWN0aW9uX186IGNvbGxlY3Rpb24sIH0gPSBwcm9wcztcblx0XHRcdGNvbnN0IHNpYmxpbmc6IHVua25vd24gPSBjb2xsZWN0aW9uWyBTaWJsaW5nVHlwZU5hbWUgXTtcblx0XHRcdHJldHVybiBzaWJsaW5nO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gbmV3IFByb3h5KFxuXHRcdFx0c2libGluZ3MsXG5cdFx0XHR7XG5cdFx0XHRcdGdldCAoXywgcHJvcDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gc2libGluZ3MocHJvcCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSxcblx0XHRcdFx0YXBwbHkgKF8sIF9fLCBhcmdzLCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHNpYmxpbmdzKGFyZ3NbIDAgXSk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxufTtcblxuY29uc3Qgc3RhdGljUHJvcHMgPSBbXG5cblx0Ly8gYnVpbHRpbnM6IGZ1bmN0aW9ucyArIFByb21pc2VzXG5cdCdjb25zdHJ1Y3RvcicsXG5cdCdwcm90b3R5cGUnLFxuXHQndGhlbicsXG5cblx0Ly8gYnVpbHRpbnM6IGVycm9yc1xuXHQnc3RhY2snLFxuXHQnbWVzc2FnZScsXG5cdCdkb21haW4nLFxuXG5cdC8vIGJ1aWx0aW5zOiBFdmVudEVtaXR0ZXJcblx0J29uJyxcblx0J29uY2UnLFxuXHQnb2ZmJyxcblxuXHQvLyBtb2NoYSArIGNoYWkgPT4gYnVnOiAuL3V0aWxzLmpzIC5maW5kU3ViVHlwZUZyb21QYXJlbnQgJ2luc3BlY3QnXG5cdCdpbnNwZWN0Jyxcblx0J3Nob3dEaWZmJyxcblxuXVxuXHQuY29uY2F0KE9iamVjdC5rZXlzKE1uZW1vbmljYVByb3RvUHJvcHMpKVxuXHQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpKVxuXHQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEZ1bmN0aW9uLnByb3RvdHlwZSkpXG5cdC5yZWR1Y2UoXG5cdFx0KG9iaiwga2V5KSA9PiB7XG5cdFx0XHRvYmpbIGtleSBdID0gdHJ1ZTtcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fSxcblx0XHRPYmplY3QuY3JlYXRlKG51bGwpXG5cdCk7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogb25seS1hcnJvdy1mdW5jdGlvbnNcbmNvbnN0IG1ha2VTdWJUeXBlUHJveHkgPSBmdW5jdGlvbiAoc3VidHlwZTogU3VidHlwZUVudHJ5LCBpbmhlcml0ZWRJbnN0YW5jZTogdW5rbm93bikge1xuXG5cdGNvbnN0IHN1YnR5cGVQcm94eSA9IG5ldyBQcm94eShcblx0XHRJbnN0YW5jZUNyZWF0b3IsXG5cdFx0e1xuXG5cdFx0XHRnZXQgKFRhcmdldCwgX3Byb3ApIHtcblxuXHRcdFx0XHRpZiAoX3Byb3AgPT09IFN5bWJvbC5oYXNJbnN0YW5jZSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGdldFR5cGVDaGVja2VyKHN1YnR5cGUuVHlwZU5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gUmVmbGVjdC5nZXQoXG5cdFx0XHRcdFx0VGFyZ2V0LFxuXHRcdFx0XHRcdF9wcm9wXG5cdFx0XHRcdCk7XG5cblx0XHRcdH0sXG5cblx0XHRcdGNvbnN0cnVjdCAoVGFyZ2V0LCBfYXJncykge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRhcmdldChcblx0XHRcdFx0XHRzdWJ0eXBlLFxuXHRcdFx0XHRcdGluaGVyaXRlZEluc3RhbmNlLFxuXHRcdFx0XHRcdF9hcmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXG5cdFx0XHRhcHBseSAoVGFyZ2V0LCB0aGlzQXJnLCBfYXJncykge1xuXG5cdFx0XHRcdGlmICh0aGlzQXJnID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzQXJnID0gaW5oZXJpdGVkSW5zdGFuY2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBleGlzdGVudEluc3RhbmNlID0gcmVmbGVjdFByaW1pdGl2ZVdyYXBwZXJzKHRoaXNBcmcpO1xuXG5cdFx0XHRcdGNvbnN0IGVudGl0eSA9IG5ldyBUYXJnZXQoXG5cdFx0XHRcdFx0c3VidHlwZSxcblx0XHRcdFx0XHRleGlzdGVudEluc3RhbmNlLFxuXHRcdFx0XHRcdF9hcmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBlbnRpdHk7XG5cdFx0XHR9LFxuXG5cdFx0fVxuXHQpO1xuXG5cdHJldHVybiBzdWJ0eXBlUHJveHk7XG59O1xuXG5jb25zdCBwcmVwYXJlU3VidHlwZUZvckNvbnN0cnVjdGlvbiA9IGZ1bmN0aW9uIChzdWJ0eXBlTmFtZTogc3RyaW5nLCBpbmhlcml0ZWRJbnN0YW5jZTogdW5rbm93bikge1xuXHQvLyBwcm90b3R5cGUgb2YgcHJveHlcblx0Y29uc3QgcHJvcEluc3RhbmNlID0gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihpbmhlcml0ZWRJbnN0YW5jZSBhcyBvYmplY3QpIGFzIG9iamVjdDtcblxuXHRjb25zdCBwcm9wcyA9IF9nZXRQcm9wcyhwcm9wSW5zdGFuY2UpIGFzIFByb3BzO1xuXHRpZiAoIXByb3BzKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IHtcblx0XHRfX3R5cGVfXzoge1xuXHRcdFx0Y29uZmlnOiB7IHN0cmljdENoYWluIH0sXG5cdFx0XHRzdWJ0eXBlc1xuXHRcdH0sXG5cdH0gPSBwcm9wcztcblxuXG5cdGNvbnN0IHN1YnR5cGUgPSBzdWJ0eXBlcy5oYXMoc3VidHlwZU5hbWUpID9cblx0XHRzdWJ0eXBlcy5nZXQoc3VidHlwZU5hbWUpIDpcblx0XHRzdHJpY3RDaGFpbiA/XG5cdFx0XHR1bmRlZmluZWQgOlxuXHRcdFx0ZmluZFN1YlR5cGVGcm9tUGFyZW50KFxuaW5oZXJpdGVkSW5zdGFuY2UgYXMgb2JqZWN0LFxuc3VidHlwZU5hbWVcblx0XHRcdCk7XG5cblx0cmV0dXJuIHN1YnR5cGUgPyBtYWtlU3ViVHlwZVByb3h5KFxuXHRcdHN1YnR5cGUsXG5cdFx0aW5oZXJpdGVkSW5zdGFuY2Vcblx0KSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IG1uZW1vc3luZVByb3h5SGFuZGxlckdldCA9ICh0YXJnZXQ6IG9iamVjdCwgcHJvcDogc3RyaW5nLCByZWNlaXZlcjogdW5rbm93bikgPT4ge1xuXG5cdC8vIE5vZGUuanMgMjIgUmVmbGVjdC5nZXQgQmVoYXZpb3VyIENoYW5nZWQgaGVyZVxuXHQvLyBjYXVzZSBzb21ldGhpbmcgZ29uZSB3cm9uZyB3aXRoIHByb3AgYXNzaWdubWVudFxuXHQvLyBzbyBub3cgaWYgd2UgbmVlZCAuc3RhY2ssIHdlIHNob3VsZCBhdm9pZCByZWNlaXZlciBoZXJlXG5cdC8vIG5hdmUgbm90IHlldCBjaGVja2VkIG90aGVyIHN0YXRpY1Byb3BzLFxuXHQvLyBqdXN0IGZpeGVkIHRoaXMgYmVsb3dcblx0Ly8gd2hpbGUgdXNpbmcgY29uZGl0aW9uYWwgZm9yIHN0YXRpY1Byb3BzXG5cdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KFxuXHRcdHRhcmdldCxcblx0XHRwcm9wLFxuXHRcdHJlY2VpdmVyXG5cdCk7XG5cblx0aWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0aWYgKHN0YXRpY1Byb3BzWyBwcm9wIF0pIHtcblx0XHQvKlxuXHRcdGNvbnN0IG1heUJlUmVzdWx0ID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wKTtcblx0XHRpZiAobWF5QmVSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIG1heUJlUmVzdWx0O1xuXHRcdH1cblx0XHQqL1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjb25zdCBzdWJ0eXBlID0gcHJlcGFyZVN1YnR5cGVGb3JDb25zdHJ1Y3Rpb24oXG5cdFx0cHJvcCxcblx0XHRyZWNlaXZlclxuXHQpO1xuXHRyZXR1cm4gc3VidHlwZSB8fCByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgTW5lbW9zeW5lID0gZnVuY3Rpb24gKHRoaXM6IG9iamVjdCwgbW5lbW9uaWNhOiBvYmplY3QsIGV4cG9zZUluc3RhbmNlTWV0aG9kczogYm9vbGVhbikge1xuXHQgXG5cdGNvbnN0IGluc3RhbmNlID0gdGhpcztcblxuXHQvLyBiZWNhdXNlIHdlIG11c3QgaW5zdGFudGlhdGUgbmV3IGNoYWluIGZvciByb290XG5cdC8vIHRoZXJlZm9yZSB3ZSBjcmVhdGUgdGhpcyBjb25zdHJ1Y3RvciBpbnRlcm5hbGx5XG5cdC8vIHNvIGl0IGNhbiBub3QgYmUgYXVnbWVudGVkIGV4dGVybmFsbHkgZHVyaW5nIGluc3RhbmNlIGNyZWF0aW9uXG5cdGNvbnN0IE1uZW1vbmljYSA9IGZ1bmN0aW9uICh0aGlzOiBvYmplY3QpIHtcblx0XHRvZHAoXG5cdFx0XHR0aGlzLFxuXHRcdFx0U3ltYm9sQ29uc3RydWN0b3JOYW1lLFxuXHRcdFx0e1xuXHRcdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRcdHJldHVybiBNTkVNT05JQ0E7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9IGFzIF9JbnRlcm5hbF9UQ188dHlwZW9mIE1uZW1vbmljYVByb3RvUHJvcHM+O1xuXHRcblx0Ly8gdGhpcyB0aHJvd3MgYW4gZXJyb3Jcblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKFxuXHRcdE1uZW1vbmljYS5wcm90b3R5cGUsXG5cdFx0bW5lbW9uaWNhXG5cdCk7XG5cdC8vIHdoaWxlIHRoaXMganVzdCByZXR1cm5zIGZhbHNlLCBzaWxlbnRseSAuLi4gdW5mb3J0dW5hdGVseVxuXHQvLyBSZWZsZWN0LnNldFByb3RvdHlwZU9mKE1uZW1vbmljYS5wcm90b3R5cGUsIG1uZW1vbmljYSk7XG5cblx0Ly8gT25seSBhZGQgTW5lbW9uaWNhUHJvdG9Qcm9wcyBtZXRob2RzIGlmIGV4cG9zZUluc3RhbmNlTWV0aG9kcyBpcyB0cnVlXG5cdGlmIChleHBvc2VJbnN0YW5jZU1ldGhvZHMpIHtcblx0XHRPYmplY3QuZW50cmllcyhNbmVtb25pY2FQcm90b1Byb3BzKS5mb3JFYWNoKChbIG5hbWUsIG1ldGhvZCBdOiBbc3RyaW5nLCB1bmtub3duXSkgPT4ge1xuXHRcdFx0b2RwKFxuXHRcdFx0XHRNbmVtb25pY2EucHJvdG90eXBlLFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0XHQgXG5cdFx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIHRoZXJlIGlzIGEgcHJveHkgYW5kIG5leHQgbGluZSBpcyBjYWxsYWJsZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTW5lbW9uaWNhUHJvdG9Qcm9wcykuZm9yRWFjaCgoc3ltYm9sOiBzeW1ib2wpID0+IHtcblx0XHRcdG9kcChcblx0XHRcdFx0TW5lbW9uaWNhLnByb3RvdHlwZSxcblx0XHRcdFx0c3ltYm9sLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHN5bWJvbE1ldGhvZCA9IFJlZmxlY3QuZ2V0KFxuXHRcdFx0XHRcdFx0XHRNbmVtb25pY2FQcm90b1Byb3BzLFxuXHRcdFx0XHRcdFx0XHRzeW1ib2xcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ltYm9sTWV0aG9kLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gaW5zdGFuY2Ugb2Ygc2VsZiBDb25zdHJ1Y3RvciB0eXBlXG5cdG9kcChcblx0XHRNbmVtb25pY2EucHJvdG90eXBlLFxuXHRcdFN5bWJvbC5oYXNJbnN0YW5jZSxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBnZXRUeXBlQ2hlY2tlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRjb25zdCBwcm90byA9IG5ldyBNbmVtb25pY2EoKTtcblx0UmVmbGVjdC5zZXRQcm90b3R5cGVPZihcblx0XHRpbnN0YW5jZSxcblx0XHRwcm90b1xuXHQpO1xuXG5cdC8vIEluc3RhbmNlUm9vdHMuc2V0KGluc3RhbmNlLCBwcm90byk7XG5cbn0gYXMgX0ludGVybmFsX1RDXzxvYmplY3Q+O1xuXG5jb25zdCBjcmVhdGVNbmVtb3N5bmUgPSBmdW5jdGlvbiAoVXJhbnVzOiB1bmtub3duLCBleHBvc2VJbnN0YW5jZU1ldGhvZHM6IGJvb2xlYW4pIHtcbi8vIGNvbnN0IGNyZWF0ZU1uZW1vc3luZSA9IGZ1bmN0aW9uIChVcmFudXM6IHVua25vd24sIHR5cGVQcm94eTogdW5rbm93bikge1xuLy8gXHRpZiAodHlwZW9mIFVyYW51cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbi8vIFx0XHRjb25zdCB7IF9fdHlwZV9fOiB0eXBlLCBVcmFudXM6IF91cmFudXMgfSA9IHR5cGVQcm94eTtcbi8vIFx0XHRjb25zb2xlLmxvZyh0eXBlLCBfdXJhbnVzKTtcbi8vIFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZGVidWdnZXJcbi8vIFx0XHRkZWJ1Z2dlcjtcbi8vIFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NyZWF0ZU1uZW1vc3luZSBVcmFudXMgaXMgbm90IGRlZmluZWQgZm9yIHR5cGVQcm94eS4nKTtcbi8vIFx0fVxuXG5cdGNvbnN0IHVyYW51cyA9IHJlZmxlY3RQcmltaXRpdmVXcmFwcGVycyhVcmFudXMpO1xuXHRjb25zdCBtbmVtb3N5bmUgPSBuZXcgTW5lbW9zeW5lKFxuXHRcdHVyYW51cyxcblx0XHRleHBvc2VJbnN0YW5jZU1ldGhvZHNcblx0KTtcblx0Y29uc3QgbW5lbW9zeW5lUHJveHkgPSBuZXcgUHJveHkoXG5cdFx0bW5lbW9zeW5lLFxuXHRcdHtcblx0XHRcdGdldCA6IG1uZW1vc3luZVByb3h5SGFuZGxlckdldFxuXHRcdH1cblx0KTtcblxuXHRyZXR1cm4gbW5lbW9zeW5lUHJveHk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGdldCBjcmVhdGVNbmVtb3N5bmUgKCkge1xuXHRcdHJldHVybiBjcmVhdGVNbmVtb3N5bmU7XG5cdH0sXG5cdGdldCBwcmVwYXJlU3VidHlwZUZvckNvbnN0cnVjdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uO1xuXHR9LFxuXHRnZXQgZ2V0RGVmYXVsdFByb3RvdHlwZSAoKSB7XG5cdFx0cmV0dXJuIGdldERlZmF1bHRQcm90b3R5cGU7XG5cdH0sXG5cdC8vIGdldCBNbmVtb3N5bmVQcm90b3R5cGVLZXlzICgpIHtcblx0Ly8gXHRyZXR1cm4gTW5lbW9zeW5lUHJvdG90eXBlS2V5cztcblx0Ly8gfSxcblx0Ly8gZ2V0IEluc3RhbmNlUm9vdHMgKCkge1xuXHQvLyBcdHJldHVybiBJbnN0YW5jZVJvb3RzO1xuXHQvLyB9XG59O1xuIl19
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW5lbW9zeW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS90eXBlcy9NbmVtb3N5bmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7Ozs7QUFVYiwrQ0FBNEM7QUFDNUMsTUFBTSxFQUNMLEdBQUcsRUFDSCxxQkFBcUIsRUFFckIsU0FBUyxHQUVULEdBQUcscUJBQVMsQ0FBQztBQUVkLHFEQUFrQztBQUNsQyxNQUFNLEVBQ0wsY0FBYyxFQUNkLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsR0FBRyxlQUFVLENBQUM7QUFFZix1REFBb0Q7QUFFcEQsbUNBRWlCO0FBRWpCLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFO0lBQ2hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDLENBQUM7QUFPRixNQUFNLDRCQUE0QixHQUFHO0lBQ3BDLFNBQVM7SUFDVCxNQUFNO0lBQ04sUUFBUTtJQUNSLE9BQU87SUFDUCxNQUFNO0lBQ04sV0FBVztJQUNYLFNBQVM7Q0FDVCxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUc7SUFHbkIsYUFBYTtJQUNiLFdBQVc7SUFDWCxNQUFNO0lBR04sT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBR1IsSUFBSTtJQUNKLE1BQU07SUFDTixLQUFLO0lBR0wsU0FBUztJQUNULFVBQVU7Q0FFVjtLQUNDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztLQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN0RCxNQUFNLENBQ04sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDWixHQUFHLENB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LFNBQVMsRUFDVDtRQUNDLEdBQUcsRUFBRyx3QkFBd0I7S0FDOUIsQ0FDRCxDQUFDO0lBRUYsT0FBTyxjQUFjLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsa0JBQWU7SUFDZCxJQUFJLGVBQWU7UUFDbEIsT0FBTyxlQUFlLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksNkJBQTZCO1FBQ2hDLE9BQU8sNkJBQTZCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ3RCLE9BQU8sbUJBQW1CLENBQUM7SUFDNUIsQ0FBQztDQU9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7XG5cdF9JbnRlcm5hbF9UQ18sXG5cdFR5cGVEZWZcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgU3VidHlwZUVudHJ5IHtcblx0VHlwZU5hbWU6IHN0cmluZztcbn1cbmltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5jb25zdCB7XG5cdG9kcCxcblx0U3ltYm9sQ29uc3RydWN0b3JOYW1lLFxuXG5cdE1ORU1PTklDQSxcblxufSA9IGNvbnN0YW50cztcblxuaW1wb3J0IFR5cGVzVXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuY29uc3Qge1xuXHRnZXRUeXBlQ2hlY2tlcixcblx0ZmluZFN1YlR5cGVGcm9tUGFyZW50LFxuXHRyZWZsZWN0UHJpbWl0aXZlV3JhcHBlcnNcbn0gPSBUeXBlc1V0aWxzO1xuXG5pbXBvcnQgeyBJbnN0YW5jZUNyZWF0b3IgfSBmcm9tICcuL0luc3RhbmNlQ3JlYXRvcic7XG5cbmltcG9ydCB7XG5cdF9nZXRQcm9wcywgUHJvcHNcbn0gZnJvbSAnLi9Qcm9wcyc7XG5cbmNvbnN0IGdldERlZmF1bHRQcm90b3R5cGUgPSAoKSA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBjb25zdCBJbnN0YW5jZVJvb3RzID0gbmV3IFdlYWtNYXA7XG5cbi8vIE5hbWVzIHRoYXQgdXNlZCB0byBiZSBhdXRvLWluamVjdGVkIGluc3RhbmNlIG1ldGhvZHMuIFRoZXkgbXVzdCBzdGlsbCBiZVxuLy8gdHJlYXRlZCBhcyBzdGF0aWMvcmVzZXJ2ZWQgbmFtZXMgc28gdGhlIE1uZW1vc3luZSBwcm94eSBkb2VzIG5vdCB0cnkgdG9cbi8vIGNvbnN0cnVjdCBhIHN1YnR5cGUgd2hlbiBvbmUgb2YgdGhlbSBpcyBhY2Nlc3NlZC5cbmNvbnN0IG1uZW1vbmljYUluc3RhbmNlTWV0aG9kTmFtZXMgPSBbXG5cdCdleHRyYWN0Jyxcblx0J3BpY2snLFxuXHQncGFyZW50Jyxcblx0J2Nsb25lJyxcblx0J2ZvcmsnLFxuXHQnZXhjZXB0aW9uJyxcblx0J3NpYmxpbmcnLFxuXTtcblxuY29uc3Qgc3RhdGljUHJvcHMgPSBbXG5cblx0Ly8gYnVpbHRpbnM6IGZ1bmN0aW9ucyArIFByb21pc2VzXG5cdCdjb25zdHJ1Y3RvcicsXG5cdCdwcm90b3R5cGUnLFxuXHQndGhlbicsXG5cblx0Ly8gYnVpbHRpbnM6IGVycm9yc1xuXHQnc3RhY2snLFxuXHQnbWVzc2FnZScsXG5cdCdkb21haW4nLFxuXG5cdC8vIGJ1aWx0aW5zOiBFdmVudEVtaXR0ZXJcblx0J29uJyxcblx0J29uY2UnLFxuXHQnb2ZmJyxcblxuXHQvLyBtb2NoYSArIGNoYWkgPT4gYnVnOiAuL3V0aWxzLmpzIC5maW5kU3ViVHlwZUZyb21QYXJlbnQgJ2luc3BlY3QnXG5cdCdpbnNwZWN0Jyxcblx0J3Nob3dEaWZmJyxcblxuXVxuXHQuY29uY2F0KG1uZW1vbmljYUluc3RhbmNlTWV0aG9kTmFtZXMpXG5cdC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSkpXG5cdC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRnVuY3Rpb24ucHJvdG90eXBlKSlcblx0LnJlZHVjZShcblx0XHQob2JqLCBrZXkpID0+IHtcblx0XHRcdG9ialsga2V5IF0gPSB0cnVlO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9LFxuXHRcdE9iamVjdC5jcmVhdGUobnVsbClcblx0KTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBvbmx5LWFycm93LWZ1bmN0aW9uc1xuY29uc3QgbWFrZVN1YlR5cGVQcm94eSA9IGZ1bmN0aW9uIChzdWJ0eXBlOiBTdWJ0eXBlRW50cnksIGluaGVyaXRlZEluc3RhbmNlOiB1bmtub3duKSB7XG5cblx0Y29uc3QgU3ViVHlwZVByb3h5ID0gZnVuY3Rpb24gKHRoaXM6IHVua25vd24sIC4uLl9hcmdzOiB1bmtub3duW10pIHtcblx0XHRpZiAobmV3LnRhcmdldCkge1xuXHRcdFx0Y29uc3QgaW5zdGFuY2VSZXN1bHQgPSBuZXcgSW5zdGFuY2VDcmVhdG9yKFxuXHRcdFx0XHRzdWJ0eXBlIGFzIFR5cGVEZWYsXG5cdFx0XHRcdGluaGVyaXRlZEluc3RhbmNlIGFzIG9iamVjdCxcblx0XHRcdFx0X2FyZ3Ncblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gaW5zdGFuY2VSZXN1bHQ7XG5cdFx0fVxuXHRcdGNvbnN0IHRoaXNBcmcgPSB0aGlzID09PSB1bmRlZmluZWQgPyBpbmhlcml0ZWRJbnN0YW5jZSA6IHRoaXM7XG5cdFx0Y29uc3QgZXhpc3RlbnRJbnN0YW5jZSA9IHJlZmxlY3RQcmltaXRpdmVXcmFwcGVycyh0aGlzQXJnKTtcblx0XHRjb25zdCBpbnN0YW5jZSA9IG5ldyBJbnN0YW5jZUNyZWF0b3IoXG5cdFx0XHRzdWJ0eXBlIGFzIFR5cGVEZWYsXG5cdFx0XHRleGlzdGVudEluc3RhbmNlIGFzIG9iamVjdCxcblx0XHRcdF9hcmdzXG5cdFx0KTtcblx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdH07XG5cblx0Y29uc3QgdHlwZUNoZWNrZXIgPSBnZXRUeXBlQ2hlY2tlcihzdWJ0eXBlLlR5cGVOYW1lKTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YlR5cGVQcm94eSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG5cdFx0dmFsdWUgOiB0eXBlQ2hlY2tlclxuXHR9KTtcblxuXHRyZXR1cm4gU3ViVHlwZVByb3h5O1xufTtcblxuY29uc3QgcHJlcGFyZVN1YnR5cGVGb3JDb25zdHJ1Y3Rpb24gPSBmdW5jdGlvbiAoc3VidHlwZU5hbWU6IHN0cmluZywgaW5oZXJpdGVkSW5zdGFuY2U6IHVua25vd24pIHtcblx0Ly8gcHJvdG90eXBlIG9mIHByb3h5XG5cdGNvbnN0IHByb3BJbnN0YW5jZSA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoaW5oZXJpdGVkSW5zdGFuY2UgYXMgb2JqZWN0KSBhcyBvYmplY3Q7XG5cblx0Y29uc3QgcHJvcHMgPSBfZ2V0UHJvcHMocHJvcEluc3RhbmNlKSBhcyBQcm9wcztcblx0aWYgKCFwcm9wcykge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCB7XG5cdFx0X190eXBlX186IHtcblx0XHRcdGNvbmZpZzogeyBzdHJpY3RDaGFpbiB9LFxuXHRcdFx0c3VidHlwZXNcblx0XHR9LFxuXHR9ID0gcHJvcHM7XG5cblxuXHRjb25zdCBzdWJ0eXBlID0gc3VidHlwZXMuaGFzKHN1YnR5cGVOYW1lKSA/XG5cdFx0c3VidHlwZXMuZ2V0KHN1YnR5cGVOYW1lKSA6XG5cdFx0c3RyaWN0Q2hhaW4gP1xuXHRcdFx0dW5kZWZpbmVkIDpcblx0XHRcdGZpbmRTdWJUeXBlRnJvbVBhcmVudChcblx0XHRcdFx0aW5oZXJpdGVkSW5zdGFuY2UgYXMgb2JqZWN0LFxuXHRcdFx0XHRzdWJ0eXBlTmFtZVxuXHRcdFx0KTtcblxuXHRjb25zdCByZXN1bHQgPSBzdWJ0eXBlID8gbWFrZVN1YlR5cGVQcm94eShcblx0XHRzdWJ0eXBlLFxuXHRcdGluaGVyaXRlZEluc3RhbmNlXG5cdCkgOiB1bmRlZmluZWQ7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBtbmVtb3N5bmVQcm94eUhhbmRsZXJHZXQgPSAodGFyZ2V0OiBvYmplY3QsIHByb3A6IHN0cmluZywgcmVjZWl2ZXI6IHVua25vd24pID0+IHtcblxuXHQvLyBOb2RlLmpzIDIyIFJlZmxlY3QuZ2V0IEJlaGF2aW91ciBDaGFuZ2VkIGhlcmVcblx0Ly8gY2F1c2Ugc29tZXRoaW5nIGdvbmUgd3Jvbmcgd2l0aCBwcm9wIGFzc2lnbm1lbnRcblx0Ly8gc28gbm93IGlmIHdlIG5lZWQgLnN0YWNrLCB3ZSBzaG91bGQgYXZvaWQgcmVjZWl2ZXIgaGVyZVxuXHQvLyBuYXZlIG5vdCB5ZXQgY2hlY2tlZCBvdGhlciBzdGF0aWNQcm9wcyxcblx0Ly8ganVzdCBmaXhlZCB0aGlzIGJlbG93XG5cdC8vIHdoaWxlIHVzaW5nIGNvbmRpdGlvbmFsIGZvciBzdGF0aWNQcm9wc1xuXHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldChcblx0XHR0YXJnZXQsXG5cdFx0cHJvcCxcblx0XHRyZWNlaXZlclxuXHQpO1xuXG5cdGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGlmIChzdGF0aWNQcm9wc1sgcHJvcCBdKSB7XG5cdFx0Lypcblx0XHRjb25zdCBtYXlCZVJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCk7XG5cdFx0aWYgKG1heUJlUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBtYXlCZVJlc3VsdDtcblx0XHR9XG5cdFx0Ki9cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y29uc3Qgc3VidHlwZSA9IHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uKFxuXHRcdHByb3AsXG5cdFx0cmVjZWl2ZXJcblx0KTtcblx0Y29uc3Qgc3ViVHlwZVJlc3VsdCA9IHN1YnR5cGUgfHwgcmVzdWx0O1xuXHRyZXR1cm4gc3ViVHlwZVJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBNbmVtb3N5bmUgPSBmdW5jdGlvbiAodGhpczogb2JqZWN0LCBtbmVtb25pY2E6IG9iamVjdCkge1xuXG5cdGNvbnN0IGluc3RhbmNlID0gdGhpcztcblxuXHQvLyBiZWNhdXNlIHdlIG11c3QgaW5zdGFudGlhdGUgbmV3IGNoYWluIGZvciByb290XG5cdC8vIHRoZXJlZm9yZSB3ZSBjcmVhdGUgdGhpcyBjb25zdHJ1Y3RvciBpbnRlcm5hbGx5XG5cdC8vIHNvIGl0IGNhbiBub3QgYmUgYXVnbWVudGVkIGV4dGVybmFsbHkgZHVyaW5nIGluc3RhbmNlIGNyZWF0aW9uXG5cdGNvbnN0IE1uZW1vbmljYSA9IGZ1bmN0aW9uICh0aGlzOiBvYmplY3QpIHtcblx0XHRvZHAoXG5cdFx0XHR0aGlzLFxuXHRcdFx0U3ltYm9sQ29uc3RydWN0b3JOYW1lLFxuXHRcdFx0e1xuXHRcdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRcdHJldHVybiBNTkVNT05JQ0E7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9IGFzIF9JbnRlcm5hbF9UQ188b2JqZWN0PjtcblxuXHQvLyB0aGlzIHRocm93cyBhbiBlcnJvclxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YoXG5cdFx0TW5lbW9uaWNhLnByb3RvdHlwZSxcblx0XHRtbmVtb25pY2Fcblx0KTtcblx0Ly8gd2hpbGUgdGhpcyBqdXN0IHJldHVybnMgZmFsc2UsIHNpbGVudGx5IC4uLiB1bmZvcnR1bmF0ZWx5XG5cdC8vIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YoTW5lbW9uaWNhLnByb3RvdHlwZSwgbW5lbW9uaWNhKTtcblxuXHRvZHAoXG5cdFx0TW5lbW9uaWNhLnByb3RvdHlwZSxcblx0XHRTeW1ib2xDb25zdHJ1Y3Rvck5hbWUsXG5cdFx0e1xuXHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0cmV0dXJuIE1ORU1PTklDQTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cblx0Ly8gaW5zdGFuY2Ugb2Ygc2VsZiBDb25zdHJ1Y3RvciB0eXBlXG5cdG9kcChcblx0XHRNbmVtb25pY2EucHJvdG90eXBlLFxuXHRcdFN5bWJvbC5oYXNJbnN0YW5jZSxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBnZXRUeXBlQ2hlY2tlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRjb25zdCBwcm90byA9IG5ldyBNbmVtb25pY2EoKTtcblx0UmVmbGVjdC5zZXRQcm90b3R5cGVPZihcblx0XHRpbnN0YW5jZSxcblx0XHRwcm90b1xuXHQpO1xuXG5cdC8vIEluc3RhbmNlUm9vdHMuc2V0KGluc3RhbmNlLCBwcm90byk7XG5cbn0gYXMgX0ludGVybmFsX1RDXzxvYmplY3Q+O1xuXG5jb25zdCBjcmVhdGVNbmVtb3N5bmUgPSBmdW5jdGlvbiAoVXJhbnVzOiB1bmtub3duKSB7XG5cdC8vIGNvbnN0IGNyZWF0ZU1uZW1vc3luZSA9IGZ1bmN0aW9uIChVcmFudXM6IHVua25vd24sIHR5cGVQcm94eTogdW5rbm93bikge1xuXHQvLyBcdGlmICh0eXBlb2YgVXJhbnVzID09PSAndW5kZWZpbmVkJykge1xuXHQvLyBcdFx0Y29uc3QgeyBfX3R5cGVfXzogdHlwZSwgVXJhbnVzOiBfdXJhbnVzIH0gPSB0eXBlUHJveHk7XG5cdC8vIFx0XHRjb25zb2xlLmxvZyh0eXBlLCBfdXJhbnVzKTtcblx0Ly8gXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kZWJ1Z2dlclxuXHQvLyBcdFx0ZGVidWdnZXI7XG5cdC8vIFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NyZWF0ZU1uZW1vc3luZSBVcmFudXMgaXMgbm90IGRlZmluZWQgZm9yIHR5cGVQcm94eS4nKTtcblx0Ly8gXHR9XG5cblx0Y29uc3QgdXJhbnVzID0gcmVmbGVjdFByaW1pdGl2ZVdyYXBwZXJzKFVyYW51cyk7XG5cdGNvbnN0IG1uZW1vc3luZSA9IG5ldyBNbmVtb3N5bmUodXJhbnVzKTtcblx0Y29uc3QgbW5lbW9zeW5lUHJveHkgPSBuZXcgUHJveHkoXG5cdFx0bW5lbW9zeW5lLFxuXHRcdHtcblx0XHRcdGdldCA6IG1uZW1vc3luZVByb3h5SGFuZGxlckdldFxuXHRcdH1cblx0KTtcblxuXHRyZXR1cm4gbW5lbW9zeW5lUHJveHk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGdldCBjcmVhdGVNbmVtb3N5bmUgKCkge1xuXHRcdHJldHVybiBjcmVhdGVNbmVtb3N5bmU7XG5cdH0sXG5cdGdldCBwcmVwYXJlU3VidHlwZUZvckNvbnN0cnVjdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uO1xuXHR9LFxuXHRnZXQgZ2V0RGVmYXVsdFByb3RvdHlwZSAoKSB7XG5cdFx0cmV0dXJuIGdldERlZmF1bHRQcm90b3R5cGU7XG5cdH0sXG5cdC8vIGdldCBNbmVtb3N5bmVQcm90b3R5cGVLZXlzICgpIHtcblx0Ly8gXHRyZXR1cm4gTW5lbW9zeW5lUHJvdG90eXBlS2V5cztcblx0Ly8gfSxcblx0Ly8gZ2V0IEluc3RhbmNlUm9vdHMgKCkge1xuXHQvLyBcdHJldHVybiBJbnN0YW5jZVJvb3RzO1xuXHQvLyB9XG59O1xuIl19
@@ -55,7 +55,8 @@ const _addProps = function () {
55
55
  const { stack } = this;
56
56
  odp(value, '__stack__', {
57
57
  get() {
58
- return stack.join('\n');
58
+ const result = stack.join('\n');
59
+ return result;
59
60
  }
60
61
  });
61
62
  }
@@ -121,7 +122,8 @@ const getProps = (instance) => {
121
122
  const answer = {};
122
123
  Object.defineProperties(answer, additions);
123
124
  Object.defineProperties(answer, descriptors);
124
- return answer;
125
+ const result = answer;
126
+ return result;
125
127
  }
126
128
  else {
127
129
  return props;
@@ -155,4 +157,4 @@ module.exports = {
155
157
  getProps: exports.getProps,
156
158
  setProps: exports.setProps
157
159
  };
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3R5cGVzL1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsK0NBQTRDO0FBSzVDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxxQkFBUyxDQUFDO0FBTTNCLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0IsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLFVBQVU7SUFDVixZQUFZO0lBQ1osV0FBVztJQUNYLGFBQWE7SUFDYixlQUFlO0lBQ2YsVUFBVTtDQUNWLENBQUMsQ0FBQztBQUVJLE1BQU0sU0FBUyxHQUFHO0lBR3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUVsQixNQUFNLEVBQ0wsSUFBSSxFQUNKLGdCQUFnQixFQUNoQixJQUFJLEVBQ0osTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQ3ZCLGVBQWUsRUFBRSxLQUFLLEVBQ3RCLEdBQUcsSUFBSSxDQUFDO0lBRVQsTUFBTSxFQUNMLFVBQVUsRUFDVixRQUFRLEdBQ1IsR0FBRyxJQUFJLENBQUM7SUFFVCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxDLEdBQUcsQ0FDRixLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCO1FBQ0MsR0FBRztZQUNGLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztLQUNELENBQ0QsQ0FBQztJQUVGLEdBQUcsQ0FDRixLQUFLLEVBQ0wsVUFBVSxFQUNWO1FBQ0MsR0FBRztZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztLQUNELENBQ0QsQ0FBQztJQUVGLEdBQUcsQ0FDRixLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCO1FBQ0MsR0FBRztZQUNGLE9BQU8s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QUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUM3QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksRUFBRSxLQUFLLENBQUUsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxjQUFjLENBQ3BCLE9BQU8sRUFDUCxJQUFJLEVBQ0osS0FBSyxDQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsR0FBRyxDQUNaLEtBQUssRUFDTCxPQUFPLENBQ1AsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUMsQ0FBQztBQXZCVyxRQUFBLFFBQVEsWUF1Qm5CO0FBT0YsTUFBTSxDQUFDLE9BQU8sR0FBRztJQUNoQixTQUFTLEVBQVQsaUJBQVM7SUFDVCxTQUFTLEVBQVQsaUJBQVM7SUFDVCxRQUFRLEVBQVIsZ0JBQVE7SUFDUixRQUFRLEVBQVIsZ0JBQVE7SUFDUixRQUFRLEVBQVIsZ0JBQVE7Q0FDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBjb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRGVmLCBJbnN0YW5jZUNyZWF0b3JDb250ZXh0LCBQcm9wcyBhcyBQcm9wc1R5cGUsIFR5cGVEZWYgXG59IGZyb20gJy4uLy4uL3R5cGVzJztcblxuY29uc3QgeyBvZHAsIH0gPSBjb25zdGFudHM7XG5cbi8vIEV4dGVybmFsIHByb3BzIHN0b3JhZ2UgdmlhIFdlYWtNYXAga2VlcHMgaW5zdGFuY2UgZW51bWVyYXRpb24gY2xlYW4uXG4vLyBJbnN0YW5jZSBtZXRhZGF0YSAoX190eXBlX18sIF9fcGFyZW50X18sIF9fYXJnc19fLCBldGMuKSBpcyBzdG9yZWRcbi8vIGFnYWluc3QgdGhlIHByb3RvdHlwZSBvYmplY3QsIG5vdCB0aGUgaW5zdGFuY2UgaXRzZWxmLCBzbyBpdCBuZXZlclxuLy8gc2hvd3MgdXAgaW4gZm9yLi4uaW4sIE9iamVjdC5rZXlzLCBvciBKU09OLnN0cmluZ2lmeS5cbmNvbnN0IF9fcHJvcHNfXyA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IG5hdGl2ZVByb3BzID0gbmV3IFNldChbXG5cdCdfX3Byb3RvX3Byb3RvX18nLFxuXHQnX19hcmdzX18nLFxuXHQnX19jb2xsZWN0aW9uX18nLFxuXHQnX19zdWJ0eXBlc19fJyxcblx0J19fdHlwZV9fJyxcblx0J19fcGFyZW50X18nLFxuXHQnX19zdGFja19fJyxcblx0J19fY3JlYXRvcl9fJyxcblx0J19fdGltZXN0YW1wX18nLFxuXHQnX19zZWxmX18nLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBfYWRkUHJvcHMgPSBmdW5jdGlvbiAodGhpczogSW5zdGFuY2VDcmVhdG9yQ29udGV4dCk6IHZvaWQge1xuXG5cdCBcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3Qge1xuXHRcdHR5cGUsXG5cdFx0ZXhpc3RlbnRJbnN0YW5jZSxcblx0XHRhcmdzLFxuXHRcdGNvbmZpZzogeyBzdWJtaXRTdGFjayB9LFxuXHRcdF9fcHJvdG9fcHJvdG9fXzogcHJvdG9cblx0fSA9IHNlbGY7XG5cblx0Y29uc3Qge1xuXHRcdGNvbGxlY3Rpb24sXG5cdFx0c3VidHlwZXMsXG5cdH0gPSB0eXBlO1xuXG5cdGNvbnN0IHZhbHVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRvZHAoXG5cdFx0dmFsdWUsXG5cdFx0J19fcHJvdG9fcHJvdG9fXycsXG5cdFx0e1xuXHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0cmV0dXJuIHByb3RvO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRvZHAoXG5cdFx0dmFsdWUsXG5cdFx0J19fYXJnc19fJyxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRyZXR1cm4gYXJncztcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cblx0b2RwKFxuXHRcdHZhbHVlLFxuXHRcdCdfX2NvbGxlY3Rpb25fXycsXG5cdFx0e1xuXHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb247XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXG5cdG9kcChcblx0XHR2YWx1ZSxcblx0XHQnX19zdWJ0eXBlc19fJyxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRyZXR1cm4gc3VidHlwZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXG5cdG9kcChcblx0XHR2YWx1ZSxcblx0XHQnX190eXBlX18nLFxuXHRcdHtcblx0XHRcdGdldCAoKSB7XG5cdFx0XHRcdHJldHVybiB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRvZHAoXG5cdFx0dmFsdWUsXG5cdFx0J19fcGFyZW50X18nLFxuXHRcdHtcblx0XHRcdGdldCAoKSB7XG5cdFx0XHRcdHJldHVybiBleGlzdGVudEluc3RhbmNlO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRpZiAoc3VibWl0U3RhY2spIHtcblx0XHRjb25zdCB7IHN0YWNrIH0gPSB0aGlzO1xuXHRcdG9kcChcblx0XHRcdHZhbHVlLFxuXHRcdFx0J19fc3RhY2tfXycsXG5cdFx0XHR7XG5cdFx0XHRcdGdldCAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YWNrIS5qb2luKCdcXG4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRvZHAoXG5cdFx0dmFsdWUsXG5cdFx0J19fY3JlYXRvcl9fJyxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRyZXR1cm4gc2VsZjtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cblx0Y29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblx0b2RwKFxuXHRcdHZhbHVlLFxuXHRcdCdfX3RpbWVzdGFtcF9fJyxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRyZXR1cm4gdGltZXN0YW1wO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHQvLyBfX3Byb3BzX18uc2V0KHNlbGYsIHZhbHVlKTtcblx0X19wcm9wc19fLnNldChcbnByb3RvISxcbnZhbHVlXG5cdCk7XG5cbn07XG5cbmNvbnN0IGlzT2JqZWN0TmF0dXJlID0gKGluc3RhbmNlOiB1bmtub3duKSA9PiB7XG5cdGlmIChpbnN0YW5jZSBpbnN0YW5jZW9mIE9iamVjdCkgcmV0dXJuIHRydWU7XG5cdGlmICh0eXBlb2YgaW5zdGFuY2UgPT09ICdvYmplY3QnICYmIGluc3RhbmNlICE9IG51bGwpIHJldHVybiB0cnVlO1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgX2dldFByb3BzID0gKGluc3RhbmNlOiBvYmplY3QsIGJhc2U/OiBvYmplY3QpOiBQcm9wc1R5cGUgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAoIWlzT2JqZWN0TmF0dXJlKGluc3RhbmNlKSkgcmV0dXJuIHVuZGVmaW5lZDtcblx0Y29uc3QgcHJvdG8gPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKGluc3RhbmNlKSBhcyBvYmplY3Q7XG5cdGlmIChcblx0XHRiYXNlICE9PSB1bmRlZmluZWQgJiZcblx0XHRpc09iamVjdE5hdHVyZShiYXNlKSAmJlxuXHRcdGlzT2JqZWN0TmF0dXJlKHByb3RvKSAmJlxuXHRcdChiYXNlLmNvbnN0cnVjdG9yICE9PSBwcm90by5jb25zdHJ1Y3Rvcilcblx0KSB7XG5cdFx0Ly8gaGVyZSB3ZSBnb3QgcmlkIG9mIHVubmVjZXNzYXJ5IGNoYWluIGRpdmVcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IHJlc3VsdCA9IF9fcHJvcHNfXy5nZXQocHJvdG8pO1xuXHRpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBzbyB3ZSBqdW1waW5nIGRlZXBlciBoZXJlXG5cdFx0aWYgKGJhc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YmFzZSA9IGluc3RhbmNlO1xuXHRcdH1cblx0XHRjb25zdCBuZXN0ZWRSZXN1bHQgPSBfZ2V0UHJvcHMoXG5cdFx0XHRwcm90byxcblx0XHRcdGJhc2Vcblx0XHQpO1xuXHRcdHJldHVybiBuZXN0ZWRSZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBfc2V0U2VsZiA9IChpbnN0YW5jZTogb2JqZWN0KTogdm9pZCA9PiB7XG5cdC8vIGNvbnN0IHByb3BzID0gX19wcm9wc19fLmdldChpbnN0YW5jZSk7XG5cdGNvbnN0IHByb3BzID0gX2dldFByb3BzKGluc3RhbmNlKTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdHByb3BzLFxuXHRcdCdfX3NlbGZfXycsXG5cdFx0e1xuXHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0cmV0dXJuIGluc3RhbmNlO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblx0X19wcm9wc19fLnNldChcblx0XHRpbnN0YW5jZSxcblx0XHRwcm9wc1xuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFByb3BzID0gKGluc3RhbmNlOiBvYmplY3QpOiBQcm9wc1R5cGUgfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBwcm9wcyA9IF9nZXRQcm9wcyhpbnN0YW5jZSk7XG5cdGlmIChwcm9wcykge1xuXHRcdGNvbnN0IF9hZGRpdGlvbnMgPSBfX3Byb3BzX18uZ2V0KHByb3BzKTtcblx0XHRpZiAoX2FkZGl0aW9ucyBpbnN0YW5jZW9mIE9iamVjdCkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm9wcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhfYWRkaXRpb25zKTtcblx0XHRcdGNvbnN0IGFuc3dlciA9IHt9O1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG5cdFx0XHRcdGFuc3dlcixcblx0XHRcdFx0YWRkaXRpb25zXG5cdFx0XHQpO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG5cdFx0XHRcdGFuc3dlcixcblx0XHRcdFx0ZGVzY3JpcHRvcnNcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gYW5zd2VyIGFzIFByb3BzVHlwZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHByb3BzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFByb3BzID0gKGluc3RhbmNlOiBvYmplY3QsIF92YWx1ZXM6IG9iamVjdCk6IHN0cmluZ1tdIHwgZmFsc2UgPT4ge1xuXHRjb25zdCBwcm9wcyA9IF9nZXRQcm9wcyhpbnN0YW5jZSk7XG5cdGlmIChwcm9wcykge1xuXHRcdGNvbnN0IHZhbHVlcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKF92YWx1ZXMpO1xuXHRcdGNvbnN0IHdyaXR0ZW46IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3QgYWxsb3dlZCA9IHt9O1xuXHRcdE9iamVjdC5lbnRyaWVzKHZhbHVlcykuZm9yRWFjaCgoWyBuYW1lLCB2YWx1ZSBdKSA9PiB7XG5cdFx0XHRpZiAoIW5hdGl2ZVByb3BzLmhhcyhuYW1lKSkge1xuXHRcdFx0XHR3cml0dGVuLnB1c2gobmFtZSk7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcblx0XHRcdFx0XHRhbGxvd2VkLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRfX3Byb3BzX18uc2V0KFxuXHRcdFx0cHJvcHMsXG5cdFx0XHRhbGxvd2VkXG5cdFx0KTtcblx0XHRyZXR1cm4gd3JpdHRlbjtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBjZW50cmFsaXplZCB0eXBlc1xuZXhwb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRGVmLCBUeXBlRGVmLCBQcm9wc1R5cGUgYXMgUHJvcHMgXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0X2FkZFByb3BzLFxuXHRfZ2V0UHJvcHMsXG5cdF9zZXRTZWxmLFxuXHRnZXRQcm9wcyxcblx0c2V0UHJvcHNcbn07XG4iXX0=
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3R5cGVzL1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsK0NBQTRDO0FBSzVDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxxQkFBUyxDQUFDO0FBTTNCLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0IsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLFVBQVU7SUFDVixZQUFZO0lBQ1osV0FBVztJQUNYLGFBQWE7SUFDYixlQUFlO0lBQ2YsVUFBVTtDQUNWLENBQUMsQ0FBQztBQUVJLE1BQU0sU0FBUyxHQUFHO0lBR3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztJQUVsQixNQUFNLEVBQ0wsSUFBSSxFQUNKLGdCQUFnQixFQUNoQixJQUFJLEVBQ0osTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQ3ZCLGVBQWUsRUFBRSxLQUFLLEVBQ3RCLEdBQUcsSUFBSSxDQUFDO0lBRVQsTUFBTSxFQUNMLFVBQVUsRUFDVixRQUFRLEdBQ1IsR0FBRyxJQUFJLENBQUM7SUFFVCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxDLEdBQUcsQ0FDRixLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCO1FBQ0MsR0FBRztZQUNGLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztLQUNELENBQ0QsQ0FBQztJQUVGLEdBQUcsQ0FDRixLQUFLLEVBQ0wsVUFBVSxFQUNWO1FBQ0MsR0FBRztZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztLQUNELENBQ0QsQ0FBQztJQUVGLEdBQUcsQ0FDRixLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCO1FBQ0MsR0FBRztZQUNGLE9BQU8s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QUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBRSxJQUFJLEVBQUUsS0FBSyxDQUFFLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQixNQUFNLENBQUMsY0FBYyxDQUNwQixPQUFPLEVBQ1AsSUFBSSxFQUNKLEtBQUssQ0FDTCxDQUFDO1lBQ0gsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLEdBQUcsQ0FDWixLQUFLLEVBQ0wsT0FBTyxDQUNQLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDLENBQUM7QUF2QlcsUUFBQSxRQUFRLFlBdUJuQjtBQU9GLE1BQU0sQ0FBQyxPQUFPLEdBQUc7SUFDaEIsU0FBUyxFQUFULGlCQUFTO0lBQ1QsU0FBUyxFQUFULGlCQUFTO0lBQ1QsUUFBUSxFQUFSLGdCQUFRO0lBQ1IsUUFBUSxFQUFSLGdCQUFRO0lBQ1IsUUFBUSxFQUFSLGdCQUFRO0NBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgY29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkRlZiwgSW5zdGFuY2VDcmVhdG9yQ29udGV4dCwgUHJvcHMgYXMgUHJvcHNUeXBlLCBUeXBlRGVmIFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmNvbnN0IHsgb2RwLCB9ID0gY29uc3RhbnRzO1xuXG4vLyBFeHRlcm5hbCBwcm9wcyBzdG9yYWdlIHZpYSBXZWFrTWFwIGtlZXBzIGluc3RhbmNlIGVudW1lcmF0aW9uIGNsZWFuLlxuLy8gSW5zdGFuY2UgbWV0YWRhdGEgKF9fdHlwZV9fLCBfX3BhcmVudF9fLCBfX2FyZ3NfXywgZXRjLikgaXMgc3RvcmVkXG4vLyBhZ2FpbnN0IHRoZSBwcm90b3R5cGUgb2JqZWN0LCBub3QgdGhlIGluc3RhbmNlIGl0c2VsZiwgc28gaXQgbmV2ZXJcbi8vIHNob3dzIHVwIGluIGZvci4uLmluLCBPYmplY3Qua2V5cywgb3IgSlNPTi5zdHJpbmdpZnkuXG5jb25zdCBfX3Byb3BzX18gPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBuYXRpdmVQcm9wcyA9IG5ldyBTZXQoW1xuXHQnX19wcm90b19wcm90b19fJyxcblx0J19fYXJnc19fJyxcblx0J19fY29sbGVjdGlvbl9fJyxcblx0J19fc3VidHlwZXNfXycsXG5cdCdfX3R5cGVfXycsXG5cdCdfX3BhcmVudF9fJyxcblx0J19fc3RhY2tfXycsXG5cdCdfX2NyZWF0b3JfXycsXG5cdCdfX3RpbWVzdGFtcF9fJyxcblx0J19fc2VsZl9fJyxcbl0pO1xuXG5leHBvcnQgY29uc3QgX2FkZFByb3BzID0gZnVuY3Rpb24gKHRoaXM6IEluc3RhbmNlQ3JlYXRvckNvbnRleHQpOiB2b2lkIHtcblxuXHQgXG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGNvbnN0IHtcblx0XHR0eXBlLFxuXHRcdGV4aXN0ZW50SW5zdGFuY2UsXG5cdFx0YXJncyxcblx0XHRjb25maWc6IHsgc3VibWl0U3RhY2sgfSxcblx0XHRfX3Byb3RvX3Byb3RvX186IHByb3RvXG5cdH0gPSBzZWxmO1xuXG5cdGNvbnN0IHtcblx0XHRjb2xsZWN0aW9uLFxuXHRcdHN1YnR5cGVzLFxuXHR9ID0gdHlwZTtcblxuXHRjb25zdCB2YWx1ZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0b2RwKFxuXHRcdHZhbHVlLFxuXHRcdCdfX3Byb3RvX3Byb3RvX18nLFxuXHRcdHtcblx0XHRcdGdldCAoKSB7XG5cdFx0XHRcdHJldHVybiBwcm90bztcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cblx0b2RwKFxuXHRcdHZhbHVlLFxuXHRcdCdfX2FyZ3NfXycsXG5cdFx0e1xuXHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0cmV0dXJuIGFyZ3M7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXG5cdG9kcChcblx0XHR2YWx1ZSxcblx0XHQnX19jb2xsZWN0aW9uX18nLFxuXHRcdHtcblx0XHRcdGdldCAoKSB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRvZHAoXG5cdFx0dmFsdWUsXG5cdFx0J19fc3VidHlwZXNfXycsXG5cdFx0e1xuXHRcdFx0Z2V0ICgpIHtcblx0XHRcdFx0cmV0dXJuIHN1YnR5cGVzO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRvZHAoXG5cdFx0dmFsdWUsXG5cdFx0J19fdHlwZV9fJyxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRyZXR1cm4gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cblx0b2RwKFxuXHRcdHZhbHVlLFxuXHRcdCdfX3BhcmVudF9fJyxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRyZXR1cm4gZXhpc3RlbnRJbnN0YW5jZTtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cblx0aWYgKHN1Ym1pdFN0YWNrKSB7XG5cdFx0Y29uc3QgeyBzdGFjayB9ID0gdGhpcztcblx0XHRvZHAoXG5cdFx0XHR2YWx1ZSxcblx0XHRcdCdfX3N0YWNrX18nLFxuXHRcdFx0e1xuXHRcdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHN0YWNrIS5qb2luKCdcXG4nKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdG9kcChcblx0XHR2YWx1ZSxcblx0XHQnX19jcmVhdG9yX18nLFxuXHRcdHtcblx0XHRcdGdldCAoKSB7XG5cdFx0XHRcdHJldHVybiBzZWxmO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcblxuXHRjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXHRvZHAoXG5cdFx0dmFsdWUsXG5cdFx0J19fdGltZXN0YW1wX18nLFxuXHRcdHtcblx0XHRcdGdldCAoKSB7XG5cdFx0XHRcdHJldHVybiB0aW1lc3RhbXA7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXG5cdC8vIF9fcHJvcHNfXy5zZXQoc2VsZiwgdmFsdWUpO1xuXHRfX3Byb3BzX18uc2V0KFxucHJvdG8hLFxudmFsdWVcblx0KTtcblxufTtcblxuY29uc3QgaXNPYmplY3ROYXR1cmUgPSAoaW5zdGFuY2U6IHVua25vd24pID0+IHtcblx0aWYgKGluc3RhbmNlIGluc3RhbmNlb2YgT2JqZWN0KSByZXR1cm4gdHJ1ZTtcblx0aWYgKHR5cGVvZiBpbnN0YW5jZSA9PT0gJ29iamVjdCcgJiYgaW5zdGFuY2UgIT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBfZ2V0UHJvcHMgPSAoaW5zdGFuY2U6IG9iamVjdCwgYmFzZT86IG9iamVjdCk6IFByb3BzVHlwZSB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaXNPYmplY3ROYXR1cmUoaW5zdGFuY2UpKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRjb25zdCBwcm90byA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoaW5zdGFuY2UpIGFzIG9iamVjdDtcblx0aWYgKFxuXHRcdGJhc2UgIT09IHVuZGVmaW5lZCAmJlxuXHRcdGlzT2JqZWN0TmF0dXJlKGJhc2UpICYmXG5cdFx0aXNPYmplY3ROYXR1cmUocHJvdG8pICYmXG5cdFx0KGJhc2UuY29uc3RydWN0b3IgIT09IHByb3RvLmNvbnN0cnVjdG9yKVxuXHQpIHtcblx0XHQvLyBoZXJlIHdlIGdvdCByaWQgb2YgdW5uZWNlc3NhcnkgY2hhaW4gZGl2ZVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgcmVzdWx0ID0gX19wcm9wc19fLmdldChwcm90byk7XG5cdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIHNvIHdlIGp1bXBpbmcgZGVlcGVyIGhlcmVcblx0XHRpZiAoYmFzZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRiYXNlID0gaW5zdGFuY2U7XG5cdFx0fVxuXHRcdGNvbnN0IG5lc3RlZFJlc3VsdCA9IF9nZXRQcm9wcyhcblx0XHRcdHByb3RvLFxuXHRcdFx0YmFzZVxuXHRcdCk7XG5cdFx0cmV0dXJuIG5lc3RlZFJlc3VsdDtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IF9zZXRTZWxmID0gKGluc3RhbmNlOiBvYmplY3QpOiB2b2lkID0+IHtcblx0Ly8gY29uc3QgcHJvcHMgPSBfX3Byb3BzX18uZ2V0KGluc3RhbmNlKTtcblx0Y29uc3QgcHJvcHMgPSBfZ2V0UHJvcHMoaW5zdGFuY2UpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoXG5cdFx0cHJvcHMsXG5cdFx0J19fc2VsZl9fJyxcblx0XHR7XG5cdFx0XHRnZXQgKCkge1xuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHRfX3Byb3BzX18uc2V0KFxuXHRcdGluc3RhbmNlLFxuXHRcdHByb3BzXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UHJvcHMgPSAoaW5zdGFuY2U6IG9iamVjdCk6IFByb3BzVHlwZSB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHByb3BzID0gX2dldFByb3BzKGluc3RhbmNlKTtcblx0aWYgKHByb3BzKSB7XG5cdFx0Y29uc3QgX2FkZGl0aW9ucyA9IF9fcHJvcHNfXy5nZXQocHJvcHMpO1xuXHRcdGlmIChfYWRkaXRpb25zIGluc3RhbmNlb2YgT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHByb3BzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9ucyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKF9hZGRpdGlvbnMpO1xuXHRcdFx0Y29uc3QgYW5zd2VyID0ge307XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhcblx0XHRcdFx0YW5zd2VyLFxuXHRcdFx0XHRhZGRpdGlvbnNcblx0XHRcdCk7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhcblx0XHRcdFx0YW5zd2VyLFxuXHRcdFx0XHRkZXNjcmlwdG9yc1xuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGFuc3dlciBhcyBQcm9wc1R5cGU7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcHJvcHM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UHJvcHMgPSAoaW5zdGFuY2U6IG9iamVjdCwgX3ZhbHVlczogb2JqZWN0KTogc3RyaW5nW10gfCBmYWxzZSA9PiB7XG5cdGNvbnN0IHByb3BzID0gX2dldFByb3BzKGluc3RhbmNlKTtcblx0aWYgKHByb3BzKSB7XG5cdFx0Y29uc3QgdmFsdWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoX3ZhbHVlcyk7XG5cdFx0Y29uc3Qgd3JpdHRlbjogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBhbGxvd2VkID0ge307XG5cdFx0T2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChbIG5hbWUsIHZhbHVlIF0pID0+IHtcblx0XHRcdGlmICghbmF0aXZlUHJvcHMuaGFzKG5hbWUpKSB7XG5cdFx0XHRcdHdyaXR0ZW4ucHVzaChuYW1lKTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGFsbG93ZWQsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdF9fcHJvcHNfXy5zZXQoXG5cdFx0XHRwcm9wcyxcblx0XHRcdGFsbG93ZWRcblx0XHQpO1xuXHRcdHJldHVybiB3cml0dGVuO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbi8vIFJlLWV4cG9ydCB0eXBlcyBmcm9tIGNlbnRyYWxpemVkIHR5cGVzXG5leHBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25EZWYsIFR5cGVEZWYsIFByb3BzVHlwZSBhcyBQcm9wcyBcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRfYWRkUHJvcHMsXG5cdF9nZXRQcm9wcyxcblx0X3NldFNlbGYsXG5cdGdldFByb3BzLFxuXHRzZXRQcm9wc1xufTtcbiJdfQ==