mnemonica 1.0.1 → 1.0.7

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 (99) hide show
  1. package/.ai/AGENTS.md +1 -1
  2. package/.ai/ONBOARDING.md +3 -2
  3. package/.ai/PROTOTYPE-CHAIN.md +122 -0
  4. package/.ai/TACTICA-DEEP-DIVE.md +52 -49
  5. package/.ai/TACTICA-RULES.md +8 -8
  6. package/.ai/ask/AGENTS.md +15 -9
  7. package/.ai/rules-skill/contributing.md +1 -1
  8. package/.ai/rules-skill/define-patterns.md +8 -2
  9. package/.ai/rules-skill/ecosystem.md +4 -4
  10. package/.ai/rules-skill/instance-methods.md +48 -15
  11. package/.ai/rules-skill/lookup-typed.md +17 -19
  12. package/.ai/rules-skill/type-system.md +12 -2
  13. package/AGENTS.md +25 -15
  14. package/CONTRIBUTING.md +8 -2
  15. package/FOR_HUMANS.md +193 -218
  16. package/README.md +84 -47
  17. package/SKILL.md +4 -4
  18. package/build/api/errors/exceptionConstructor.js +20 -12
  19. package/build/api/errors/index.js +9 -5
  20. package/build/api/errors/throwModificationError.js +15 -9
  21. package/build/api/index.js +35 -2
  22. package/build/api/types/InstanceCreator.js +5 -2
  23. package/build/api/types/Mnemosyne.d.ts +6 -6
  24. package/build/api/types/Mnemosyne.js +43 -120
  25. package/build/api/types/Props.js +5 -3
  26. package/build/api/types/TypeProxy.js +13 -9
  27. package/build/api/types/compileNewModificatorFunctionBody.js +14 -8
  28. package/build/api/types/createInstanceModificator.js +1 -1
  29. package/build/api/types/index.js +56 -13
  30. package/build/api/utils/index.js +21 -12
  31. package/build/constants/index.js +11 -8
  32. package/build/descriptors/types/index.js +79 -26
  33. package/build/index.d.ts +9 -10
  34. package/build/index.js +65 -25
  35. package/build/types/index.d.ts +76 -32
  36. package/build/types/index.js +1 -1
  37. package/build/utils/clone.d.ts +1 -0
  38. package/build/utils/clone.js +11 -0
  39. package/build/utils/collectConstructors.js +5 -3
  40. package/build/utils/exception.d.ts +1 -0
  41. package/build/utils/exception.js +14 -0
  42. package/build/utils/extract.d.ts +2 -3
  43. package/build/utils/extract.js +3 -2
  44. package/build/utils/fork.d.ts +1 -0
  45. package/build/utils/fork.js +33 -0
  46. package/build/utils/index.d.ts +2 -3
  47. package/build/utils/index.js +21 -7
  48. package/build/utils/merge.d.ts +2 -1
  49. package/build/utils/merge.js +10 -6
  50. package/build/utils/parent.d.ts +4 -1
  51. package/build/utils/parent.js +7 -7
  52. package/build/utils/parse.d.ts +2 -12
  53. package/build/utils/parse.js +1 -1
  54. package/build/utils/pick.d.ts +4 -3
  55. package/build/utils/pick.js +4 -5
  56. package/build/utils/sibling.d.ts +1 -0
  57. package/build/utils/sibling.js +25 -0
  58. package/build/utils/toJSON.d.ts +1 -1
  59. package/build/utils/toJSON.js +3 -2
  60. package/docs/UTILS.md +184 -0
  61. package/docs/ai-learning-trajectory.md +9 -9
  62. package/docs/async-constructors.md +21 -1
  63. package/docs/empathy-in-ai.md +170 -0
  64. package/docs/hott-primer.md +47 -0
  65. package/docs/performance-vs-security.md +2 -2
  66. package/docs/prototype-chain.md +127 -0
  67. package/docs/purpose.md +42 -11
  68. package/docs/tactica-pattern.md +20 -20
  69. package/docs/theory-of-operations.md +224 -0
  70. package/docs/typed-lookup.md +30 -26
  71. package/module/index.js +0 -1
  72. package/package.json +13 -7
  73. package/src/api/errors/exceptionConstructor.ts +14 -9
  74. package/src/api/errors/index.ts +8 -4
  75. package/src/api/errors/throwModificationError.ts +10 -9
  76. package/src/api/types/InstanceCreator.ts +5 -8
  77. package/src/api/types/Mnemosyne.ts +72 -231
  78. package/src/api/types/Props.ts +4 -2
  79. package/src/api/types/TypeProxy.ts +7 -11
  80. package/src/api/types/compileNewModificatorFunctionBody.ts +13 -7
  81. package/src/api/types/createInstanceModificator.ts +13 -0
  82. package/src/api/types/index.ts +15 -8
  83. package/src/api/utils/index.ts +16 -14
  84. package/src/constants/index.ts +6 -9
  85. package/src/descriptors/types/index.ts +45 -25
  86. package/src/index.ts +60 -71
  87. package/src/types/index.ts +188 -70
  88. package/src/utils/clone.ts +11 -0
  89. package/src/utils/collectConstructors.ts +4 -2
  90. package/src/utils/exception.ts +16 -0
  91. package/src/utils/extract.ts +5 -2
  92. package/src/utils/fork.ts +57 -0
  93. package/src/utils/index.ts +32 -13
  94. package/src/utils/merge.ts +18 -6
  95. package/src/utils/parent.ts +16 -7
  96. package/src/utils/parse.ts +5 -4
  97. package/src/utils/pick.ts +10 -2
  98. package/src/utils/sibling.ts +33 -0
  99. package/src/utils/toJSON.ts +3 -2
package/build/index.js CHANGED
@@ -1,39 +1,72 @@
1
1
  'use strict';
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
2
38
  var _a;
3
39
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.defineStackCleaner = exports.utils = exports.errors = exports.defaultCollection = exports.createTypesCollection = exports.ErrorMessages = exports.TYPE_TITLE_PREFIX = exports.MNEMOSYNE = exports.MNEMONICA = exports.SymbolConfig = exports.SymbolDefaultTypesCollection = exports.SymbolConstructorName = exports.SymbolParentType = exports._lookup = exports._define = exports.mnemonica = exports.registerHook = exports.decorate = exports.bind = exports.call = exports.apply = exports.lookupTyped = exports.lookup = exports.define = exports.defaultTypes = exports.setProps = exports.getProps = exports.findSubTypeFromParent = exports.isClass = void 0;
5
- const index_1 = require("./api/utils/index");
40
+ exports.defineStackCleaner = exports.utils = exports.errors = exports.defaultCollection = exports.createTypesCollection = exports.ErrorMessages = exports.TYPE_TITLE_PREFIX = exports.MNEMOSYNE = exports.MNEMONICA = exports.SymbolConfig = exports.SymbolDefaultTypesCollection = exports.SymbolConstructorName = exports.SymbolParentType = exports._lookup = exports._define = exports.mnemonica = exports.registerHook = exports.decorate = exports.bind = exports.call = exports.apply = exports.define = exports.defaultTypes = exports.setProps = exports.getProps = exports.findSubTypeFromParent = exports.isClass = void 0;
41
+ exports.lookup = lookup;
42
+ const index_1 = __importDefault(require("./api/utils/index"));
6
43
  exports.isClass = index_1.default.isClass, exports.findSubTypeFromParent = index_1.default.findSubTypeFromParent;
7
44
  var Props_1 = require("./api/types/Props");
8
45
  Object.defineProperty(exports, "getProps", { enumerable: true, get: function () { return Props_1.getProps; } });
9
46
  Object.defineProperty(exports, "setProps", { enumerable: true, get: function () { return Props_1.setProps; } });
10
47
  const constants_1 = require("./constants");
11
48
  const { odp } = constants_1.constants;
12
- const errorsApi = require("./api/errors");
49
+ const errorsApi = __importStar(require("./api/errors"));
13
50
  const descriptors_1 = require("./descriptors");
14
51
  const { WRONG_MODIFICATION_PATTERN } = descriptors_1.descriptors.ErrorsTypes;
15
- const Mnemosyne_1 = require("./api/types/Mnemosyne");
52
+ const Mnemosyne_1 = __importDefault(require("./api/types/Mnemosyne"));
16
53
  const { prepareSubtypeForConstruction } = Mnemosyne_1.default;
17
54
  exports.defaultTypes = descriptors_1.descriptors.defaultTypes;
18
55
  function checkThis(pointer) {
19
- return pointer === exports.mnemonica || pointer === exports;
56
+ const result = pointer === exports.mnemonica || pointer === exports;
57
+ return result;
20
58
  }
21
59
  exports.define = function (TypeName, constructHandler, config) {
22
60
  const types = checkThis(this) ? exports.defaultTypes : this || exports.defaultTypes;
23
- return types
61
+ const defineResult = types
24
62
  .define(TypeName, constructHandler, config);
63
+ return defineResult;
25
64
  };
26
- const lookup = function (TypeNestedPath) {
65
+ function lookup(TypeNestedPath) {
27
66
  const types = checkThis(this) ? exports.defaultTypes : this || exports.defaultTypes;
28
- return types.lookup(TypeNestedPath);
29
- };
30
- exports.lookup = lookup;
31
- const lookupTyped = function (TypeNestedPath) {
32
- const types = checkThis(this) ? exports.defaultTypes : this || exports.defaultTypes;
33
- return types
34
- .lookup(TypeNestedPath);
35
- };
36
- exports.lookupTyped = lookupTyped;
67
+ const lookupResult = types.lookup(TypeNestedPath);
68
+ return lookupResult;
69
+ }
37
70
  const $run = function (entity, Ctor, args) {
38
71
  const { TypeName } = Ctor;
39
72
  const Cstr = prepareSubtypeForConstruction(TypeName, entity);
@@ -41,21 +74,28 @@ const $run = function (entity, Ctor, args) {
41
74
  const ErrorCtor = WRONG_MODIFICATION_PATTERN;
42
75
  throw new ErrorCtor(`[ ${TypeName} ] is not defined as a Type Constructor on used instance`);
43
76
  }
44
- const result = new Cstr(...args);
45
- return result;
77
+ const runResult = new Cstr(...args);
78
+ return runResult;
46
79
  };
47
80
  const apply = function (entity, Ctor, args = []) {
48
- return $run(entity, Ctor, args);
81
+ const runResult = $run(entity, Ctor, args);
82
+ const result = runResult;
83
+ return result;
49
84
  };
50
85
  exports.apply = apply;
51
86
  const call = function (entity, Ctor, ...args) {
52
- return $run(entity, Ctor, args);
87
+ const runResult = $run(entity, Ctor, args);
88
+ const result = runResult;
89
+ return result;
53
90
  };
54
91
  exports.call = call;
55
92
  const bind = function (entity, Ctor) {
56
- return (...args) => {
57
- return $run(entity, Ctor, args);
93
+ const result = (...args) => {
94
+ const runResult = $run(entity, Ctor, args);
95
+ const typedResult = runResult;
96
+ return typedResult;
58
97
  };
98
+ return result;
59
99
  };
60
100
  exports.bind = bind;
61
101
  const decorate = function (target, config) {
@@ -83,7 +123,7 @@ const registerHook = function (Ctor, hookType, cb) {
83
123
  };
84
124
  exports.registerHook = registerHook;
85
125
  exports.mnemonica = Object.entries(Object.assign(Object.assign(Object.assign({ define: exports.define,
86
- lookup: exports.lookup,
126
+ lookup,
87
127
  apply: exports.apply,
88
128
  call: exports.call,
89
129
  bind: exports.bind,
@@ -98,7 +138,7 @@ exports.mnemonica = Object.entries(Object.assign(Object.assign(Object.assign({ d
98
138
  });
99
139
  return acc;
100
140
  }, {});
101
- const api = require("./api");
141
+ const api = __importStar(require("./api"));
102
142
  _a = api.types, exports._define = _a.define, exports._lookup = _a.lookup;
103
143
  exports.SymbolParentType = exports.mnemonica.SymbolParentType, exports.SymbolConstructorName = exports.mnemonica.SymbolConstructorName, exports.SymbolDefaultTypesCollection = exports.mnemonica.SymbolDefaultTypesCollection, exports.SymbolConfig = exports.mnemonica.SymbolConfig, exports.MNEMONICA = exports.mnemonica.MNEMONICA, exports.MNEMOSYNE = exports.mnemonica.MNEMOSYNE, exports.TYPE_TITLE_PREFIX = exports.mnemonica.TYPE_TITLE_PREFIX, exports.ErrorMessages = exports.mnemonica.ErrorMessages;
104
144
  exports.createTypesCollection = exports.mnemonica.createTypesCollection;
@@ -108,4 +148,4 @@ var utils_1 = require("./utils");
108
148
  Object.defineProperty(exports, "utils", { enumerable: true, get: function () { return utils_1.utils; } });
109
149
  var utils_2 = require("./utils");
110
150
  Object.defineProperty(exports, "defineStackCleaner", { enumerable: true, get: function () { return utils_2.defineStackCleaner; } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsWUFBWSxDQUFDOzs7O0FBa0JiLDZDQUEyQztBQUUxQyxlQUFPLEdBRUosZUFBVSxVQURiLDZCQUFxQixHQUNsQixlQUFVLHVCQUFDO0FBTWYsMkNBRTJCO0FBRDFCLGlHQUFBLFFBQVEsT0FBQTtBQUFFLGlHQUFBLFFBQVEsT0FBQTtBQUduQiwyQ0FBd0M7QUFDeEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLHFCQUFTLENBQUM7QUFFMUIsMENBQTBDO0FBQzFDLCtDQUE0QztBQUU1QyxNQUFNLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyx5QkFBVyxDQUFDLFdBQVcsQ0FBQztBQUUvRCxxREFBK0M7QUFDL0MsTUFBTSxFQUFFLDZCQUE2QixFQUFFLEdBQUcsbUJBQVUsQ0FBQztBQUV0QyxvQkFBWSxHQUFNLHlCQUFXLGNBQUM7QUFFN0MsU0FBUyxTQUFTLENBQUMsT0FBb0Q7SUFDdEUsT0FBTyxPQUFPLEtBQUssaUJBQVMsSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDO0FBQ3JELENBQUM7QUFJWSxRQUFBLE1BQU0sR0FBRyxVQVNyQixRQUFzRCxFQUV0RCxnQkFBa0YsRUFDbEYsTUFBMkI7SUFFM0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksb0JBQVksQ0FBQztJQUVwRSxPQUFRLEtBQWtDO1NBQ3hDLE1BQU0sQ0FDTixRQUFrQixFQUNsQixnQkFBMkIsRUFDM0IsTUFBTSxDQUNVLENBQUM7QUFDcEIsQ0FBaUIsQ0FBQztBQUVYLE1BQU0sTUFBTSxHQUFHLFVBRXJCLGNBQXNCO0lBRXRCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQVksQ0FBQyxDQUFDLENBQUMs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TixpQkFBUyxZQUhaLHlCQUFpQixHQUdkLGlCQUFTLG9CQUZaLHFCQUFhLEdBRVYsaUJBQVMsZUFBQztBQUdELFFBQUEscUJBQXFCLEdBQ2pDLGlCQUFTLENBQUMscUJBQXNELENBQUM7QUFHckQsUUFBQSxpQkFBaUIsR0FBSSxvQkFBa0QsQ0FBQyxRQUFRLENBQUM7QUFDakYsUUFBQSxNQUFNLEdBQUcseUJBQVcsQ0FBQyxXQUFXLENBQUM7QUFFOUMsaUNBQWdDO0FBQXZCLDhGQUFBLEtBQUssT0FBQTtBQUNkLGlDQUE2QztBQUFwQywyR0FBQSxrQkFBa0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7XG5cdENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uLFxuXHRJREVGLFxuXHRob29rLFxuXHRob29rc1R5cGVzLFxuXHRjb25zdHJ1Y3Rvck9wdGlvbnMsXG5cdFByb3RvLFxuXHRJRGVmaW5pdG9ySW5zdGFuY2UsXG5cdENvbnN0cnVjdG9yLFxuXHREZWNvcmF0ZWRDbGFzcyxcblx0VHlwZUNsYXNzLFxuXHRUeXBlQWJzb3JiZXIsXG5cdE1uZW1vbmljYU1vZHVsZSxcblx0VHlwZUNvbnN0cnVjdG9yXG59IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgVHlwZXNVdGlscyBmcm9tICcuL2FwaS91dGlscy9pbmRleCc7XG5leHBvcnQgY29uc3Qge1xuXHRpc0NsYXNzLFxuXHRmaW5kU3ViVHlwZUZyb21QYXJlbnQsXG59ID0gVHlwZXNVdGlscztcblxuZXhwb3J0IHR5cGUge1xuXHRJREVGLCBUeXBlQ29uc3RydWN0b3IsIF9JbnRlcm5hbF9UQ18sIFByb3RvLCBQcm90b0ZsYXQsXG5cdGhvb2tzT3B0cywgaG9vaywgaG9va3NUeXBlcywgVHlwZXNDb2xsZWN0aW9uXG59IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHtcblx0Z2V0UHJvcHMsIHNldFByb3BzIFxufSBmcm9tICcuL2FwaS90eXBlcy9Qcm9wcyc7XG5cbmltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmNvbnN0IHsgb2RwIH0gPSBjb25zdGFudHM7XG5cbmltcG9ydCAqIGFzIGVycm9yc0FwaSBmcm9tICcuL2FwaS9lcnJvcnMnO1xuaW1wb3J0IHsgZGVzY3JpcHRvcnMgfSBmcm9tICcuL2Rlc2NyaXB0b3JzJztcblxuY29uc3QgeyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTiB9ID0gZGVzY3JpcHRvcnMuRXJyb3JzVHlwZXM7XG5cbmltcG9ydCBtbmVtb3N5bmVzIGZyb20gJy4vYXBpL3R5cGVzL01uZW1vc3luZSc7XG5jb25zdCB7IHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uIH0gPSBtbmVtb3N5bmVzO1xuXG5leHBvcnQgY29uc3QgeyBkZWZhdWx0VHlwZXMsIH0gPSBkZXNjcmlwdG9ycztcblxuZnVuY3Rpb24gY2hlY2tUaGlzKHBvaW50ZXI6IHR5cGVvZiBtbmVtb25pY2EgfCB0eXBlb2YgZXhwb3J0cyB8IHVua25vd24pOiBib29sZWFuIHtcblx0cmV0dXJuIHBvaW50ZXIgPT09IG1uZW1vbmljYSB8fCBwb2ludGVyID09PSBleHBvcnRzO1xufVxuXG5cbi8vIERlZmluZSBmdW5jdGlvbiB1c2luZyBUeXBlQWJzb3JiZXIgaW50ZXJmYWNlIHdpdGggcHJvcGVyIHR5cGUgY2FzdGluZ1xuZXhwb3J0IGNvbnN0IGRlZmluZSA9IGZ1bmN0aW9uIDxcblx0VCBleHRlbmRzIG9iamVjdCxcblx0UCBleHRlbmRzIG9iamVjdCA9IG9iamVjdCxcblx0TiBleHRlbmRzIFByb3RvPFAsIFQ+ID0gUHJvdG88UCwgVD4sXG5cblx0Ly8gaGVyZSBJRGVmaW5pdG9ySW5zdGFuY2UgaXMgYSBDT05TVFJVQ1RPUiAhISFcblx0UiBleHRlbmRzIElEZWZpbml0b3JJbnN0YW5jZTxOPiA9IElEZWZpbml0b3JJbnN0YW5jZTxOPlxuPihcblx0dGhpczogdW5rbm93bixcblx0VHlwZU5hbWU/OiBzdHJpbmcgfCBDYWxsYWJsZUZ1bmN0aW9uIHwgTmV3YWJsZUZ1bmN0aW9uLFxuXHQvLyBBbGxvdyBib3RoIHN0cmljdCBJREVGIGFuZCBtb3JlIGZsZXhpYmxlIGZ1bmN0aW9uIHNpZ25hdHVyZXNcblx0Y29uc3RydWN0SGFuZGxlcj86IElERUY8VD4gfCBDYWxsYWJsZUZ1bmN0aW9uIHwgTmV3YWJsZUZ1bmN0aW9uIHwgb2JqZWN0IHwgYm9vbGVhbixcblx0Y29uZmlnPzogY29uc3RydWN0b3JPcHRpb25zLFxuKTogUiB7XG5cdGNvbnN0IHR5cGVzID0gY2hlY2tUaGlzKHRoaXMpID8gZGVmYXVsdFR5cGVzIDogdGhpcyB8fCBkZWZhdWx0VHlwZXM7XG5cdC8vIFR5cGUgYXNzZXJ0aW9uIG5lZWRlZCBiZWNhdXNlIFR5cGVzQ29sbGVjdGlvblByb3h5IGlzIGEgUHJveHlcblx0cmV0dXJuICh0eXBlcyBhcyB7IGRlZmluZTogVHlwZUFic29yYmVyIH0pXG5cdFx0LmRlZmluZShcblx0XHRcdFR5cGVOYW1lIGFzIHN0cmluZyxcblx0XHRcdGNvbnN0cnVjdEhhbmRsZXIgYXMgSURFRjxUPixcblx0XHRcdGNvbmZpZ1xuXHRcdCkgYXMgdW5rbm93biBhcyBSO1xufSBhcyBUeXBlQWJzb3JiZXI7XG5cbmV4cG9ydCBjb25zdCBsb29rdXAgPSBmdW5jdGlvbiAoXG5cdHRoaXM6IHVua25vd24sXG5cdFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmdcbik6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHR5cGVzID0gY2hlY2tUaGlzKHRoaXMpID8gZGVmYXVsdFR5cGVzIDogdGhpcyB8fCBkZWZhdWx0VHlwZXM7XG5cdC8vIFR5cGUgYXNzZXJ0aW9uIG5lZWRlZCBiZWNhdXNlIFR5cGVzQ29sbGVjdGlvblByb3h5IGlzIGEgUHJveHlcblx0cmV0dXJuICh0eXBlcyBhcyB7IGxvb2t1cDogKHBhdGg6IHN0cmluZykgPT4gVHlwZUNsYXNzIHwgdW5kZWZpbmVkIH0pLmxvb2t1cChUeXBlTmVzdGVkUGF0aCk7XG59O1xuXG4vKipcbiAqIERlZmF1bHQgVHlwZVJlZ2lzdHJ5IGludGVyZmFjZSAtIGF1Z21lbnQgdGhpcyBpbiB5b3VyIHByb2plY3QgdmlhXG4gKiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIG1lcmdpbmcuIFRoZSBhdWdtZW50YXRpb24gY2FuIGJlIGhhbmQtd3JpdHRlblxuICogaW4gYSAuZC50cyBmaWxlIChzbWFsbCBwcm9qZWN0cykgb3IgZ2VuZXJhdGVkIGJ5IEBtbmVtb25pY2EvdGFjdGljYS5cbiAqXG4gKiBVc2VzIGBUeXBlQ29uc3RydWN0b3I8bmV2ZXI+YCBhcyB0aGUgaW5kZXggdmFsdWUgdHlwZSB0byBlbmZvcmNlXG4gKiBhdWdtZW50YXRpb246IHdpdGhvdXQgaXQsIGFueSBrZXkgbG9va3VwIHJlc29sdmVzIHRvIGEgdXNlbGVzcyB0eXBlXG4gKiBiZWNhdXNlIGBUeXBlQ29uc3RydWN0b3I8bmV2ZXI+YCBpcyBub3QgYXNzaWduYWJsZSB0byBjb25jcmV0ZSB0eXBlcy5cbiAqXG4gKiBFeGFtcGxlIChpbiBhIGhhbmQtd3JpdHRlbiAuZC50cywgb3IgZ2VuZXJhdGVkIGJ5IHRhY3RpY2EgaW5cbiAqIC50YWN0aWNhL3JlZ2lzdHJ5LnRzKTpcbiAqICAgZGVjbGFyZSBtb2R1bGUgJ21uZW1vbmljYScge1xuICogICAgIGludGVyZmFjZSBUeXBlUmVnaXN0cnkge1xuICogICAgICAgJ015VHlwZSc6IG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBNeVR5cGVJbnN0YW5jZTtcbiAqICAgICB9XG4gKiAgIH1cbiAqXG4gKiBTZWUgZG9jcy90eXBlZC1sb29rdXAubWQgZm9yIGJvdGggcGF0aHMgc2lkZSBieSBzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVSZWdpc3RyeSB7XG5cdFtrZXk6IHN0cmluZ106IFR5cGVDb25zdHJ1Y3RvcjxuZXZlcj47XG59XG5cbi8qKlxuICogVHlwZS1zYWZlIGxvb2t1cCBmdW5jdGlvbi4gUmVxdWlyZXMgYSBUeXBlUmVnaXN0cnkgYXVnbWVudGF0aW9uIOKAlFxuICogaGFuZC13cml0dGVuIGluIGEgLmQudHMgKHNtYWxsIHByb2plY3RzKSBvciBnZW5lcmF0ZWQgYnlcbiAqIEBtbmVtb25pY2EvdGFjdGljYSAoYXV0by1zeW5jZWQgZnJvbSB5b3VyIGRlZmluZSgpIGNhbGxzKS5cbiAqXG4gKiBBdCBydW50aW1lIHRoaXMgZGVsZWdhdGVzIHRvIGxvb2t1cCgpLiBUaGUgdHlwZSBzYWZldHkgaXNcbiAqIGNvbXBpbGUtdGltZSBvbmx5OiBUeXBlU2NyaXB0IHJlc29sdmVzIHRoZSBrZXkgYWdhaW5zdCB0aGUgYXVnbWVudGVkXG4gKiBUeXBlUmVnaXN0cnkgYW5kIHJldHVybnMgdGhlIGNvbnN0cnVjdG9yJ3MgdHlwZSBzaWduYXR1cmUuXG4gKlxuICogVXNhZ2UgKG9uY2UgVHlwZVJlZ2lzdHJ5IGlzIGF1Z21lbnRlZCk6XG4gKiAgIGNvbnN0IFNvbWVUeXBlID0gbG9va3VwVHlwZWQoJ1NvbWVUeXBlJyk7XG4gKiAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFNvbWVUeXBlKHsgLi4uIH0pOyAvLyBGdWxsIHR5cGUgc2FmZXR5IVxuICpcbiAqIFNlZSBkb2NzL3R5cGVkLWxvb2t1cC5tZCBmb3IgYm90aCBhdWdtZW50YXRpb24gcGF0aHMgc2lkZSBieSBzaWRlLlxuICovXG5leHBvcnQgY29uc3QgbG9va3VwVHlwZWQgPSBmdW5jdGlvbiA8XG5cdGNvbnN0IEsgZXh0ZW5kcyBrZXlvZiBUeXBlUmVnaXN0cnlcbj4oXG5cdHRoaXM6IHVua25vd24sXG5cdFR5cGVOZXN0ZWRQYXRoOiBLXG4pOiBUeXBlUmVnaXN0cnlbS10gIHtcblx0Y29uc3QgdHlwZXMgPSBjaGVja1RoaXModGhpcykgPyBkZWZhdWx0VHlwZXMgOiB0aGlzIHx8IGRlZmF1bHRUeXBlcztcblx0cmV0dXJuICh0eXBlcyBhcyB7IGxvb2t1cDogKHBhdGg6IHN0cmluZykgPT4gdW5rbm93biB9KVxuXHRcdC5sb29rdXAoVHlwZU5lc3RlZFBhdGggYXMgc3RyaW5nKSBhcyBUeXBlUmVnaXN0cnlbS107XG59O1xuXG5cbmNvbnN0ICRydW4gPSBmdW5jdGlvbiA8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdCwgUyBleHRlbmRzIFByb3RvPEUsIFQ+Pihcblx0ZW50aXR5OiBFLFxuXHRDdG9yOiBJREVGPFQ+LFxuXHRhcmdzOiB1bmtub3duW11cbik6IHtcblx0XHRba2V5IGluIGtleW9mIFNdOiBTW2tleV1cblx0fSB7XG5cblx0Ly8gZGVidWdnZXI7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBleHRyYWN0aW5nIFR5cGVOYW1lIGZyb20gZnVuY3Rpb25cblx0Y29uc3QgeyBUeXBlTmFtZSB9ID0gQ3Rvcjtcblx0Y29uc3QgQ3N0ciA9IHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uKFxuXHRcdFR5cGVOYW1lLFxuXHRcdGVudGl0eVxuXHQpIGFzIHsgbmV3KC4uLmFyczogdW5rbm93bltdKTogdW5rbm93biB9O1xuXHQvLyBUT0RPOiBjaGVjayBsaW5lcyBiZWxvdyBhbmQgaWYgQ29uc3RydWN0b3IgaXMgbm90IG1uZW1vbml6ZWQgLi4uXG5cdGlmIChDc3RyID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBFcnJvckN0b3IgPSBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTiBhcyB1bmtub3duIGFzIG5ldyAobXNnOiBzdHJpbmcpID0+IEVycm9yO1xuXHRcdHRocm93IG5ldyBFcnJvckN0b3IoYFsgJHtUeXBlTmFtZX0gXSBpcyBub3QgZGVmaW5lZCBhcyBhIFR5cGUgQ29uc3RydWN0b3Igb24gdXNlZCBpbnN0YW5jZWApO1xuXHR9XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBDc3RyKC4uLmFyZ3MpO1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gcmV0dXJuaW5nIHJlc3VsdCBhcyBtZXJnZWQgcHJvdG8gdHlwZVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVE9ETzogYXBwbHkgaW5zdGFuY2UgLnRvIHR5cGUgLndpdGggYXJndW1lbnRzXG5leHBvcnQgY29uc3QgYXBwbHkgPSBmdW5jdGlvbiA8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdCwgUyBleHRlbmRzIFByb3RvPEUsIFQ+Pihcblx0ZW50aXR5OiBFLFxuXHRDdG9yOiBJREVGPFQ+LFxuXHRhcmdzOiB1bmtub3duW10gPSBbXVxuKToge1xuXHRcdFtrZXkgaW4ga2V5b2YgU106IFNba2V5XVxuXHR9IHtcblx0cmV0dXJuICRydW48RSwgVCwgUz4oXG5cdFx0ZW50aXR5LFxuXHRcdEN0b3IsXG5cdFx0YXJnc1xuXHQpO1xufTtcblxuLy8gVE9ETzogY2FsbCB0eXBlIC5ieSBpbnN0YW5jZSAud2l0aCBhcmd1bWVudHNcbmV4cG9ydCBjb25zdCBjYWxsID0gZnVuY3Rpb24gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q3RvcjogSURFRjxUPixcblx0Li4uYXJnczogdW5rbm93bltdXG4pOiB7XG5cdFx0W2tleSBpbiBrZXlvZiBTXTogU1trZXldXG5cdH0ge1xuXHRyZXR1cm4gJHJ1bjxFLCBULCBTPihcblx0XHRlbnRpdHksXG5cdFx0Q3Rvcixcblx0XHRhcmdzXG5cdCk7XG59O1xuXG4vLyBUT0RPOiBiaW5kIHR5cGUgLndpdGggaW5zdGFuY2Ug4oaSICguLi5hcmdzKVxuZXhwb3J0IGNvbnN0IGJpbmQgPSBmdW5jdGlvbiA8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdCwgUyBleHRlbmRzIFByb3RvPEUsIFQ+Pihcblx0ZW50aXR5OiBFLFxuXHRDdG9yOiBJREVGPFQ+XG4pOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFtrZXkgaW4ga2V5b2YgU106IFNba2V5XVxufSB7XG5cdHJldHVybiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0cmV0dXJuICRydW48RSwgVCwgUz4oXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRDdG9yLFxuXHRcdFx0YXJnc1xuXHRcdCk7XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb3JhdGUgPSBmdW5jdGlvbiA8XG5cdFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+IHwgY29uc3RydWN0b3JPcHRpb25zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4+KFxuXHR0YXJnZXQ/OiBULFxuXHRjb25maWc/OiBjb25zdHJ1Y3Rvck9wdGlvbnNcbik6IDxVIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0Pj4oY3N0cjogVSkgPT4gRGVjb3JhdGVkQ2xhc3M8VT4ge1xuXHRjb25zdCBvcHRzID0gKGNvbmZpZyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnICYmICEodGFyZ2V0IGluc3RhbmNlb2YgRnVuY3Rpb24pKVxuXHRcdD8gdGFyZ2V0IGFzIGNvbnN0cnVjdG9yT3B0aW9uc1xuXHRcdDogY29uZmlnO1xuXG5cdGNvbnN0IHBhcmVudFR5cGUgPSAodGFyZ2V0IGluc3RhbmNlb2YgRnVuY3Rpb24pXG5cdFx0PyB0YXJnZXQgYXMgQ29uc3RydWN0b3I8b2JqZWN0PlxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGRlY29yYXRvciA9IGZ1bmN0aW9uIDxVIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0Pj4oY3N0cjogVSk6IERlY29yYXRlZENsYXNzPFU+IHtcblx0XHRjb25zdCB7IG5hbWUgfSA9IGNzdHI7XG5cdFx0aWYgKHBhcmVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGVjb3JhdG9yUmVzdWx0ID0gZGVmaW5lKFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRjc3RyIGFzIElERUY8b2JqZWN0Pixcblx0XHRcdFx0b3B0c1xuXHRcdFx0KSBhcyB1bmtub3duIGFzIERlY29yYXRlZENsYXNzPFU+O1xuXHRcdFx0cmV0dXJuIGRlY29yYXRvclJlc3VsdDtcblx0XHR9XG5cdFx0Y29uc3QgcGFyZW50ID0gcGFyZW50VHlwZSBhcyB1bmtub3duIGFzIHtcblx0XHRcdGRlZmluZTogVHlwZUFic29yYmVyO1xuXHRcdH07XG5cdFx0Y29uc3QgZGVmaW5lUmVzdWx0ID0gcGFyZW50LmRlZmluZShcblx0XHRcdG5hbWUsXG5cdFx0XHRjc3RyIGFzIElERUY8b2JqZWN0Pixcblx0XHRcdG9wdHNcblx0XHQpIGFzIHVua25vd24gYXMgRGVjb3JhdGVkQ2xhc3M8VT47XG5cdFx0cmV0dXJuIGRlZmluZVJlc3VsdDtcblx0fTtcblx0cmV0dXJuIGRlY29yYXRvcjtcbn07XG5cblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVySG9vayA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgQ29uc3RydWN0b3I8VD4+KFxuXHRDdG9yOiBEZWNvcmF0ZWRDbGFzczxUPixcblx0aG9va1R5cGU6IGhvb2tzVHlwZXMsXG5cdGNiOiBob29rXG4pOiB2b2lkIHtcblx0Q3Rvci5yZWdpc3Rlckhvb2soXG5cdFx0aG9va1R5cGUsXG5cdFx0Y2Jcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBtbmVtb25pY2EgPSBPYmplY3QuZW50cmllcyh7XG5cblx0ZGVmaW5lLFxuXHRsb29rdXAsXG5cdGFwcGx5LFxuXHRjYWxsLFxuXHRiaW5kLFxuXHRkZWNvcmF0ZSxcblx0cmVnaXN0ZXJIb29rLFxuXG5cdC4uLmRlc2NyaXB0b3JzLFxuXG5cdC4uLmVycm9yc0FwaSxcblx0Li4uY29uc3RhbnRzLFxuXG59KS5yZWR1Y2UoXG5cdChhY2M6IHsgW2luZGV4OiBzdHJpbmddOiB1bmtub3duIH0sIGVudHJ5OiBbc3RyaW5nLCB1bmtub3duXSkgPT4ge1xuXHRcdGNvbnN0IFsgbmFtZSwgY29kZSBdID0gZW50cnk7XG5cdFx0b2RwKFxuXHRcdFx0YWNjLFxuXHRcdFx0bmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiBjb2RlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlbnVtZXJhYmxlIDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0cmV0dXJuIGFjYztcblx0fSxcblx0e31cbikgYXMgTW5lbW9uaWNhTW9kdWxlO1xuXG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi9hcGknO1xuXG5leHBvcnQgY29uc3Qge1xuXHRkZWZpbmU6IF9kZWZpbmUsXG5cdGxvb2t1cDogX2xvb2t1cFxufSA9IGFwaS50eXBlcztcblxuZXhwb3J0IGNvbnN0IHtcblxuXHRTeW1ib2xQYXJlbnRUeXBlLFxuXHRTeW1ib2xDb25zdHJ1Y3Rvck5hbWUsXG5cdFN5bWJvbERlZmF1bHRUeXBlc0NvbGxlY3Rpb24sXG5cdFN5bWJvbENvbmZpZyxcblx0TU5FTU9OSUNBLFxuXHRNTkVNT1NZTkUsXG5cdFRZUEVfVElUTEVfUFJFRklYLFxuXHRFcnJvck1lc3NhZ2VzLFxuXG59ID0gbW5lbW9uaWNhO1xuXG4vLyBFeHBvcnQgY3JlYXRlVHlwZXNDb2xsZWN0aW9uIHdpdGggcHJvcGVyIHR5cGVcbmV4cG9ydCBjb25zdCBjcmVhdGVUeXBlc0NvbGxlY3Rpb246IENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uID1cblx0bW5lbW9uaWNhLmNyZWF0ZVR5cGVzQ29sbGVjdGlvbiBhcyBDcmVhdGVUeXBlc0NvbGxlY3Rpb25GdW5jdGlvbjtcblxuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbGxlY3Rpb24gPSAoZGVmYXVsdFR5cGVzIGFzIHsgc3VidHlwZXM6IE1hcDxzdHJpbmcsIG9iamVjdD4gfSkuc3VidHlwZXM7XG5leHBvcnQgY29uc3QgZXJyb3JzID0gZGVzY3JpcHRvcnMuRXJyb3JzVHlwZXM7XG5cbmV4cG9ydCB7IHV0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBkZWZpbmVTdGFja0NsZWFuZXIgfSBmcm9tICcuL3V0aWxzJztcbi8qIGVzbGludC1lbmFibGUgc3BhY2UtYmVmb3JlLWZ1bmN0aW9uLXBhcmVuICovXG4iXX0=
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0diLHdCQVFDO0FBcEdELDhEQUEyQztBQUUxQyxlQUFPLEdBRUosZUFBVSxVQURiLDZCQUFxQixHQUNsQixlQUFVLHVCQUFDO0FBa0NmLDJDQUUyQjtBQUQxQixpR0FBQSxRQUFRLE9BQUE7QUFBRSxpR0FBQSxRQUFRLE9BQUE7QUFHbkIsMkNBQXdDO0FBQ3hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxxQkFBUyxDQUFDO0FBRTFCLHdEQUEwQztBQUMxQywrQ0FBNEM7QUFFNUMsTUFBTSxFQUFFLDBCQUEwQixFQUFFLEdBQUcseUJBQVcsQ0FBQyxXQUFXLENBQUM7QUFFL0Qsc0VBQStDO0FBQy9DLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxHQUFHLG1CQUFVLENBQUM7QUFFdEMsb0JBQVksR0FBTSx5QkFBVyxjQUFDO0FBRTdDLFNBQVMsU0FBUyxDQUFDLE9BQW9EO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLE9BQU8sS0FBSyxpQkFBUyxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUM7SUFDNUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBSVksUUFBQSxNQUFNLEdBQUcsVUFTckIsUUFBc0QsRUFFdEQsZ0JBQWtGLEVBQ2xGLE1BQTJCO0lBRTNCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLG9CQUFZLENBQUM7SUFFcEUsTUFBTSxZQUFZLEdBQUksS0FBa0M7U0FDdEQsTUFBTSxDQUNOLFFBQWtCLEVBQ2xCLGdCQUEyQixFQUMzQixNQUFNLENBQ1UsQ0FBQztJQUNuQixPQUFPLFlBQVksQ0FBQztBQUNyQixDQUFpQixDQUFD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Wiw2QkFBcUIsR0FRbEIsaUJBQVMsd0JBUFosb0NBQTRCLEdBT3pCLGlCQUFTLCtCQU5aLG9CQUFZLEdBTVQsaUJBQVMsZUFMWixpQkFBUyxHQUtOLGlCQUFTLFlBSlosaUJBQVMsR0FJTixpQkFBUyxZQUhaLHlCQUFpQixHQUdkLGlCQUFTLG9CQUZaLHFCQUFhLEdBRVYsaUJBQVMsZUFBQztBQUdELFFBQUEscUJBQXFCLEdBQ2pDLGlCQUFTLENBQUMscUJBQXNELENBQUM7QUFHckQsUUFBQSxpQkFBaUIsR0FBSSxvQkFBa0QsQ0FBQyxRQUFRLENBQUM7QUFDakYsUUFBQSxNQUFNLEdBQUcseUJBQVcsQ0FBQyxXQUFXLENBQUM7QUFFOUMsaUNBQWdDO0FBQXZCLDhGQUFBLEtBQUssT0FBQTtBQUNkLGlDQUE2QztBQUFwQywyR0FBQSxrQkFBa0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7XG5cdENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uLFxuXHRJREVGLFxuXHRob29rLFxuXHRob29rc1R5cGVzLFxuXHRjb25zdHJ1Y3Rvck9wdGlvbnMsXG5cdFByb3RvLFxuXHRJRGVmaW5pdG9ySW5zdGFuY2UsXG5cdENvbnN0cnVjdG9yLFxuXHREZWNvcmF0ZWRDbGFzcyxcblx0VHlwZUNsYXNzLFxuXHRUeXBlQWJzb3JiZXIsXG5cdE1uZW1vbmljYU1vZHVsZSxcblx0SW5zdGFuY2VSZXN1bHQsXG5cdE1lcmdlXG59IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgVHlwZXNVdGlscyBmcm9tICcuL2FwaS91dGlscy9pbmRleCc7XG5leHBvcnQgY29uc3Qge1xuXHRpc0NsYXNzLFxuXHRmaW5kU3ViVHlwZUZyb21QYXJlbnQsXG59ID0gVHlwZXNVdGlscztcblxuZXhwb3J0IHR5cGUge1xuXHRJREVGLCBUeXBlQ29uc3RydWN0b3IsIFR5cGVDb25zdHJ1Y3RvckJhc2UsXG5cdEluc3RhbmNlT2ZUeXBlUmVnaXN0cnksIExpdGVyYWxLZXlzT2YsIFBhcmVudFBhdGgsIFBhdGhPZkluc3RhbmNlLFxuXHRBbGxQYXJlbnRQcmVmaXhlcywgUGFyZW50UGF0aE9mSW5zdGFuY2UsXG5cdF9JbnRlcm5hbF9UQ18sIFByb3RvLCBQcm90b0ZsYXQsXG5cdGhvb2tzT3B0cywgaG9vaywgaG9va3NUeXBlcywgVHlwZXNDb2xsZWN0aW9uXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFR5cGUtc2FmZSByZWdpc3RyeSBmb3IgbW5lbW9uaWNhIHR5cGVzLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIHN0YXJ0cyBlbXB0eS4gQXBwbGljYXRpb24gY29kZSBvciBgQG1uZW1vbmljYS90YWN0aWNhYFxuICogYXVnbWVudHMgaXQgdGhyb3VnaCBUeXBlU2NyaXB0IG1vZHVsZSBkZWNsYXJhdGlvbiBtZXJnaW5nOlxuICpcbiAqIGBgYHRzXG4gKiBkZWNsYXJlIG1vZHVsZSAnbW5lbW9uaWNhJyB7XG4gKiAgIGludGVyZmFjZSBUeXBlUmVnaXN0cnkge1xuICogICAgICdNeVR5cGUnOiBUeXBlQ29uc3RydWN0b3I8TXlUeXBlSW5zdGFuY2U+O1xuICogICAgICdNeVR5cGUuU3ViVHlwZSc6IFR5cGVDb25zdHJ1Y3RvcjxTdWJUeXBlSW5zdGFuY2U+O1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBPbmNlIGF1Z21lbnRlZCwgYGxvb2t1cCgnTXlUeXBlJylgIGFuZCBgdXRpbHMucGFyZW50KGluc3RhbmNlLCAnTXlUeXBlJylgXG4gKiByZXNvbHZlIGtleXMgYWdhaW5zdCB0aGlzIHJlZ2lzdHJ5LiBVbmF1Z21lbnRlZCBrZXlzIGZhbGwgYmFjayB0byB0aGUgYnJvYWRcbiAqIGBUeXBlQ2xhc3MgfCB1bmRlZmluZWRgIHJldHVybiB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVSZWdpc3RyeSB7XG5cdC8vIEludGVudGlvbmFsbHkgZW1wdHkuIEF1Z21lbnQgdGhpcyBpbnRlcmZhY2UgdmlhIGRlY2xhcmF0aW9uIG1lcmdpbmdcblx0Ly8gKGhhbmQtd3JpdHRlbiBvciBnZW5lcmF0ZWQgYnkgQG1uZW1vbmljYS90YWN0aWNhKSB0byBlbmFibGUgdHlwZWRcblx0Ly8gdXRpbGl0aWVzIGxpa2UgbG9va3VwKCkgYW5kIHBhcmVudCgpLlxufVxuZXhwb3J0IHtcblx0Z2V0UHJvcHMsIHNldFByb3BzIFxufSBmcm9tICcuL2FwaS90eXBlcy9Qcm9wcyc7XG5cbmltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmNvbnN0IHsgb2RwIH0gPSBjb25zdGFudHM7XG5cbmltcG9ydCAqIGFzIGVycm9yc0FwaSBmcm9tICcuL2FwaS9lcnJvcnMnO1xuaW1wb3J0IHsgZGVzY3JpcHRvcnMgfSBmcm9tICcuL2Rlc2NyaXB0b3JzJztcblxuY29uc3QgeyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTiB9ID0gZGVzY3JpcHRvcnMuRXJyb3JzVHlwZXM7XG5cbmltcG9ydCBtbmVtb3N5bmVzIGZyb20gJy4vYXBpL3R5cGVzL01uZW1vc3luZSc7XG5jb25zdCB7IHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uIH0gPSBtbmVtb3N5bmVzO1xuXG5leHBvcnQgY29uc3QgeyBkZWZhdWx0VHlwZXMsIH0gPSBkZXNjcmlwdG9ycztcblxuZnVuY3Rpb24gY2hlY2tUaGlzKHBvaW50ZXI6IHR5cGVvZiBtbmVtb25pY2EgfCB0eXBlb2YgZXhwb3J0cyB8IHVua25vd24pOiBib29sZWFuIHtcblx0Y29uc3QgcmVzdWx0ID0gcG9pbnRlciA9PT0gbW5lbW9uaWNhIHx8IHBvaW50ZXIgPT09IGV4cG9ydHM7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cblxuLy8gRGVmaW5lIGZ1bmN0aW9uIHVzaW5nIFR5cGVBYnNvcmJlciBpbnRlcmZhY2Ugd2l0aCBwcm9wZXIgdHlwZSBjYXN0aW5nXG5leHBvcnQgY29uc3QgZGVmaW5lID0gZnVuY3Rpb24gPFxuXHRUIGV4dGVuZHMgb2JqZWN0LFxuXHRQIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0LFxuXHROIGV4dGVuZHMgUHJvdG88UCwgVD4gPSBQcm90bzxQLCBUPixcblxuXHQvLyBoZXJlIElEZWZpbml0b3JJbnN0YW5jZSBpcyBhIENPTlNUUlVDVE9SICEhIVxuXHRSIGV4dGVuZHMgSURlZmluaXRvckluc3RhbmNlPE4+ID0gSURlZmluaXRvckluc3RhbmNlPE4+XG4+KFxuXHR0aGlzOiB1bmtub3duLFxuXHRUeXBlTmFtZT86IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24gfCBOZXdhYmxlRnVuY3Rpb24sXG5cdC8vIEFsbG93IGJvdGggc3RyaWN0IElERUYgYW5kIG1vcmUgZmxleGlibGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuXHRjb25zdHJ1Y3RIYW5kbGVyPzogSURFRjxUPiB8IENhbGxhYmxlRnVuY3Rpb24gfCBOZXdhYmxlRnVuY3Rpb24gfCBvYmplY3QgfCBib29sZWFuLFxuXHRjb25maWc/OiBjb25zdHJ1Y3Rvck9wdGlvbnMsXG4pOiBSIHtcblx0Y29uc3QgdHlwZXMgPSBjaGVja1RoaXModGhpcykgPyBkZWZhdWx0VHlwZXMgOiB0aGlzIHx8IGRlZmF1bHRUeXBlcztcblx0Ly8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIGJlY2F1c2UgVHlwZXNDb2xsZWN0aW9uUHJveHkgaXMgYSBQcm94eVxuXHRjb25zdCBkZWZpbmVSZXN1bHQgPSAodHlwZXMgYXMgeyBkZWZpbmU6IFR5cGVBYnNvcmJlciB9KVxuXHRcdC5kZWZpbmUoXG5cdFx0XHRUeXBlTmFtZSBhcyBzdHJpbmcsXG5cdFx0XHRjb25zdHJ1Y3RIYW5kbGVyIGFzIElERUY8VD4sXG5cdFx0XHRjb25maWdcblx0XHQpIGFzIHVua25vd24gYXMgUjtcblx0cmV0dXJuIGRlZmluZVJlc3VsdDtcbn0gYXMgVHlwZUFic29yYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9va3VwPGNvbnN0IEsgZXh0ZW5kcyBrZXlvZiBUeXBlUmVnaXN0cnk+KFxuXHR0aGlzOiB1bmtub3duLFxuXHRUeXBlTmVzdGVkUGF0aDogS1xuKTogVHlwZVJlZ2lzdHJ5W0tdIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cCh0aGlzOiB1bmtub3duLCBUeXBlTmVzdGVkUGF0aDogc3RyaW5nKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cChcblx0dGhpczogdW5rbm93bixcblx0VHlwZU5lc3RlZFBhdGg6IHN0cmluZ1xuKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdHlwZXMgPSBjaGVja1RoaXModGhpcykgPyBkZWZhdWx0VHlwZXMgOiB0aGlzIHx8IGRlZmF1bHRUeXBlcztcblx0Ly8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIGJlY2F1c2UgVHlwZXNDb2xsZWN0aW9uUHJveHkgaXMgYSBQcm94eVxuXHRjb25zdCBsb29rdXBSZXN1bHQgPSAodHlwZXMgYXMgeyBsb29rdXA6IChwYXRoOiBzdHJpbmcpID0+IFR5cGVDbGFzcyB8IHVuZGVmaW5lZCB9KS5sb29rdXAoVHlwZU5lc3RlZFBhdGgpO1xuXHRyZXR1cm4gbG9va3VwUmVzdWx0O1xufVxuXG5cbmNvbnN0ICRydW4gPSBmdW5jdGlvbiA8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdCwgUyBleHRlbmRzIFByb3RvPEUsIFQ+Pihcblx0ZW50aXR5OiBFLFxuXHRDdG9yOiBJREVGPFQ+LFxuXHRhcmdzOiB1bmtub3duW11cbik6IHtcblx0XHRba2V5IGluIGtleW9mIFNdOiBTW2tleV1cblx0fSB7XG5cblx0Ly8gZGVidWdnZXI7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBleHRyYWN0aW5nIFR5cGVOYW1lIGZyb20gZnVuY3Rpb25cblx0Y29uc3QgeyBUeXBlTmFtZSB9ID0gQ3Rvcjtcblx0Y29uc3QgQ3N0ciA9IHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uKFxuXHRcdFR5cGVOYW1lLFxuXHRcdGVudGl0eVxuXHQpIGFzIHVua25vd24gYXMgeyBuZXcoLi4uYXJzOiB1bmtub3duW10pOiB1bmtub3duIH07XG5cdC8vIFRPRE86IGNoZWNrIGxpbmVzIGJlbG93IGFuZCBpZiBDb25zdHJ1Y3RvciBpcyBub3QgbW5lbW9uaXplZCAuLi5cblx0aWYgKENzdHIgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IEVycm9yQ3RvciA9IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOIGFzIHVua25vd24gYXMgbmV3IChtc2c6IHN0cmluZykgPT4gRXJyb3I7XG5cdFx0dGhyb3cgbmV3IEVycm9yQ3RvcihgWyAke1R5cGVOYW1lfSBdIGlzIG5vdCBkZWZpbmVkIGFzIGEgVHlwZSBDb25zdHJ1Y3RvciBvbiB1c2VkIGluc3RhbmNlYCk7XG5cdH1cblx0Y29uc3QgcnVuUmVzdWx0ID0gbmV3IENzdHIoLi4uYXJncyk7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSByZXR1cm5pbmcgcmVzdWx0IGFzIG1lcmdlZCBwcm90byB0eXBlXG5cdHJldHVybiBydW5SZXN1bHQ7XG59O1xuXG4vLyBUT0RPOiBhcHBseSBpbnN0YW5jZSAudG8gdHlwZSAud2l0aCBhcmd1bWVudHNcbmV4cG9ydCBjb25zdCBhcHBseSA9IGZ1bmN0aW9uIDxFIGV4dGVuZHMgb2JqZWN0LCBUIGV4dGVuZHMgb2JqZWN0LCBTIGV4dGVuZHMgUHJvdG88RSwgVD4+KFxuXHRlbnRpdHk6IEUsXG5cdEN0b3I6IElERUY8VD4sXG5cdGFyZ3M6IHVua25vd25bXSA9IFtdXG4pOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj4ge1xuXHRjb25zdCBydW5SZXN1bHQgPSAkcnVuPEUsIFQsIFM+KFxuXHRcdGVudGl0eSxcblx0XHRDdG9yLFxuXHRcdGFyZ3Ncblx0KTtcblx0Y29uc3QgcmVzdWx0ID0gcnVuUmVzdWx0IGFzIHVua25vd24gYXMgSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVE9ETzogY2FsbCB0eXBlIC5ieSBpbnN0YW5jZSAud2l0aCBhcmd1bWVudHNcbmV4cG9ydCBjb25zdCBjYWxsID0gZnVuY3Rpb24gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q3RvcjogSURFRjxUPixcblx0Li4uYXJnczogdW5rbm93bltdXG4pOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj4ge1xuXHRjb25zdCBydW5SZXN1bHQgPSAkcnVuPEUsIFQsIFM+KFxuXHRcdGVudGl0eSxcblx0XHRDdG9yLFxuXHRcdGFyZ3Ncblx0KTtcblx0Y29uc3QgcmVzdWx0ID0gcnVuUmVzdWx0IGFzIHVua25vd24gYXMgSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVE9ETzogYmluZCB0eXBlIC53aXRoIGluc3RhbmNlIOKGkiAoLi4uYXJncylcbmV4cG9ydCBjb25zdCBiaW5kID0gZnVuY3Rpb24gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q3RvcjogSURFRjxUPlxuKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+IHtcblx0Y29uc3QgcmVzdWx0ID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdGNvbnN0IHJ1blJlc3VsdCA9ICRydW48RSwgVCwgUz4oXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRDdG9yLFxuXHRcdFx0YXJnc1xuXHRcdCk7XG5cdFx0Y29uc3QgdHlwZWRSZXN1bHQgPSBydW5SZXN1bHQgYXMgdW5rbm93biBhcyBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj47XG5cdFx0cmV0dXJuIHR5cGVkUmVzdWx0O1xuXHR9O1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY29yYXRlID0gZnVuY3Rpb24gPFxuXHRUIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0PiB8IGNvbnN0cnVjdG9yT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuPihcblx0dGFyZ2V0PzogVCxcblx0Y29uZmlnPzogY29uc3RydWN0b3JPcHRpb25zXG4pOiA8VSBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4+KGNzdHI6IFUpID0+IERlY29yYXRlZENsYXNzPFU+IHtcblx0Y29uc3Qgb3B0cyA9IChjb25maWcgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JyAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSlcblx0XHQ/IHRhcmdldCBhcyBjb25zdHJ1Y3Rvck9wdGlvbnNcblx0XHQ6IGNvbmZpZztcblxuXHRjb25zdCBwYXJlbnRUeXBlID0gKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uKVxuXHRcdD8gdGFyZ2V0IGFzIENvbnN0cnVjdG9yPG9iamVjdD5cblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBkZWNvcmF0b3IgPSBmdW5jdGlvbiA8VSBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4+KGNzdHI6IFUpOiBEZWNvcmF0ZWRDbGFzczxVPiB7XG5cdFx0Y29uc3QgeyBuYW1lIH0gPSBjc3RyO1xuXHRcdGlmIChwYXJlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRlY29yYXRvclJlc3VsdCA9IGRlZmluZShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0Y3N0ciBhcyBJREVGPG9iamVjdD4sXG5cdFx0XHRcdG9wdHNcblx0XHRcdCkgYXMgdW5rbm93biBhcyBEZWNvcmF0ZWRDbGFzczxVPjtcblx0XHRcdHJldHVybiBkZWNvcmF0b3JSZXN1bHQ7XG5cdFx0fVxuXHRcdGNvbnN0IHBhcmVudCA9IHBhcmVudFR5cGUgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRkZWZpbmU6IFR5cGVBYnNvcmJlcjtcblx0XHR9O1xuXHRcdGNvbnN0IGRlZmluZVJlc3VsdCA9IHBhcmVudC5kZWZpbmUoXG5cdFx0XHRuYW1lLFxuXHRcdFx0Y3N0ciBhcyBJREVGPG9iamVjdD4sXG5cdFx0XHRvcHRzXG5cdFx0KSBhcyB1bmtub3duIGFzIERlY29yYXRlZENsYXNzPFU+O1xuXHRcdHJldHVybiBkZWZpbmVSZXN1bHQ7XG5cdH07XG5cdHJldHVybiBkZWNvcmF0b3I7XG59O1xuXG5cbmV4cG9ydCBjb25zdCByZWdpc3Rlckhvb2sgPSBmdW5jdGlvbiA8VCBleHRlbmRzIENvbnN0cnVjdG9yPFQ+Pihcblx0Q3RvcjogRGVjb3JhdGVkQ2xhc3M8VD4sXG5cdGhvb2tUeXBlOiBob29rc1R5cGVzLFxuXHRjYjogaG9va1xuKTogdm9pZCB7XG5cdEN0b3IucmVnaXN0ZXJIb29rKFxuXHRcdGhvb2tUeXBlLFxuXHRcdGNiXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgbW5lbW9uaWNhID0gT2JqZWN0LmVudHJpZXMoe1xuXG5cdGRlZmluZSxcblx0bG9va3VwLFxuXHRhcHBseSxcblx0Y2FsbCxcblx0YmluZCxcblx0ZGVjb3JhdGUsXG5cdHJlZ2lzdGVySG9vayxcblxuXHQuLi5kZXNjcmlwdG9ycyxcblxuXHQuLi5lcnJvcnNBcGksXG5cdC4uLmNvbnN0YW50cyxcblxufSkucmVkdWNlKFxuXHQoYWNjOiB7IFtpbmRleDogc3RyaW5nXTogdW5rbm93biB9LCBlbnRyeTogW3N0cmluZywgdW5rbm93bl0pID0+IHtcblx0XHRjb25zdCBbIG5hbWUsIGNvZGUgXSA9IGVudHJ5O1xuXHRcdG9kcChcblx0XHRcdGFjYyxcblx0XHRcdG5hbWUsXG5cdFx0XHR7XG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29kZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW51bWVyYWJsZSA6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXHRcdHJldHVybiBhY2M7XG5cdH0sXG5cdHt9XG4pIGFzIE1uZW1vbmljYU1vZHVsZTtcblxuaW1wb3J0ICogYXMgYXBpIGZyb20gJy4vYXBpJztcblxuZXhwb3J0IGNvbnN0IHtcblx0ZGVmaW5lOiBfZGVmaW5lLFxuXHRsb29rdXA6IF9sb29rdXBcbn0gPSBhcGkudHlwZXM7XG5cbmV4cG9ydCBjb25zdCB7XG5cblx0U3ltYm9sUGFyZW50VHlwZSxcblx0U3ltYm9sQ29uc3RydWN0b3JOYW1lLFxuXHRTeW1ib2xEZWZhdWx0VHlwZXNDb2xsZWN0aW9uLFxuXHRTeW1ib2xDb25maWcsXG5cdE1ORU1PTklDQSxcblx0TU5FTU9TWU5FLFxuXHRUWVBFX1RJVExFX1BSRUZJWCxcblx0RXJyb3JNZXNzYWdlcyxcblxufSA9IG1uZW1vbmljYTtcblxuLy8gRXhwb3J0IGNyZWF0ZVR5cGVzQ29sbGVjdGlvbiB3aXRoIHByb3BlciB0eXBlXG5leHBvcnQgY29uc3QgY3JlYXRlVHlwZXNDb2xsZWN0aW9uOiBDcmVhdGVUeXBlc0NvbGxlY3Rpb25GdW5jdGlvbiA9XG5cdG1uZW1vbmljYS5jcmVhdGVUeXBlc0NvbGxlY3Rpb24gYXMgQ3JlYXRlVHlwZXNDb2xsZWN0aW9uRnVuY3Rpb247XG5cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xsZWN0aW9uID0gKGRlZmF1bHRUeXBlcyBhcyB7IHN1YnR5cGVzOiBNYXA8c3RyaW5nLCBvYmplY3Q+IH0pLnN1YnR5cGVzO1xuZXhwb3J0IGNvbnN0IGVycm9ycyA9IGRlc2NyaXB0b3JzLkVycm9yc1R5cGVzO1xuXG5leHBvcnQgeyB1dGlscyB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHsgZGVmaW5lU3RhY2tDbGVhbmVyIH0gZnJvbSAnLi91dGlscyc7XG4vKiBlc2xpbnQtZW5hYmxlIHNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbiAqL1xuIl19
@@ -1,3 +1,4 @@
1
+ import type { TypeRegistry } from '../index';
1
2
  export type PropsType = Record<string, unknown>;
2
3
  export type IDEF<T, Args extends unknown[] = unknown[]> = {
3
4
  new (): T;
@@ -30,6 +31,22 @@ export interface _Internal_TC_<ConstructorInstance extends object> {
30
31
  };
31
32
  }
32
33
  export type TypeConstructor<ConstructorInstance extends object> = _Internal_TC_<ConstructorInstance>;
34
+ export interface TypeConstructorBase {
35
+ new (...args: unknown[]): object;
36
+ }
37
+ export type InstanceOfTypeRegistry<K extends keyof TypeRegistry> = TypeRegistry[K] extends new (...args: unknown[]) => infer R ? R : never;
38
+ export type LiteralKeysOf<T> = keyof T extends infer K ? K extends string ? string extends K ? never : K : never : never;
39
+ export type ParentPath<K extends string> = K extends `${infer P}.${string}` ? P : never;
40
+ export type AllParentPrefixes<K extends string> = K extends `${infer P}.${string}` ? P | AllParentPrefixes<P> : never;
41
+ export type ChildKeysOf<P extends string> = {
42
+ [K in keyof TypeRegistry]: K extends `${P}.${string}` ? K : never;
43
+ }[keyof TypeRegistry];
44
+ export type PathOfInstance<T extends object> = {
45
+ [K in LiteralKeysOf<TypeRegistry>]: TypeRegistry[K] extends new (...args: unknown[]) => infer R ? T extends R ? K : never : never;
46
+ }[LiteralKeysOf<TypeRegistry>];
47
+ export type ParentPathOfInstance<T extends object> = {
48
+ [K in LiteralKeysOf<TypeRegistry>]: TypeRegistry[K] extends new (...args: unknown[]) => infer R ? T extends R ? AllParentPrefixes<K> : never : never;
49
+ }[LiteralKeysOf<TypeRegistry>];
33
50
  export type hooksTypes = 'preCreation' | 'postCreation' | 'creationError';
34
51
  export type hooksOpts<P = object, T = P> = {
35
52
  TypeName: string;
@@ -64,10 +81,6 @@ export type constructorOptions = {
64
81
  submitStack?: boolean;
65
82
  awaitReturn?: boolean;
66
83
  asClass?: boolean;
67
- exposeInstanceMethods?: boolean;
68
- };
69
- export type HideInstanceMethodsOptions = constructorOptions & {
70
- exposeInstanceMethods: true;
71
84
  };
72
85
  export type SubtypesMap = Map<string, TypeClass>;
73
86
  export type TypeDef = {
@@ -130,21 +143,36 @@ export type ProtoFlat<P extends object, T extends object, L extends Exclude<keyo
130
143
  } & {
131
144
  [key in L]: P[key];
132
145
  };
146
+ export type MnemonicaInstanceMethodKeys = 'extract' | 'pick' | 'parent' | 'clone' | 'fork' | 'exception' | 'sibling';
133
147
  export type Flatten<F> = {
134
148
  [key in keyof F]: F[key];
135
149
  };
150
+ export type Extracted<T extends object> = {
151
+ [K in keyof T as K extends string ? (K extends MnemonicaInstanceMethodKeys ? never : K) : never]: T[K];
152
+ } & {};
153
+ export type Parsed<T extends object> = {
154
+ name: string;
155
+ props: Extracted<T>;
156
+ self: T;
157
+ proto: object;
158
+ joint: Record<string, unknown>;
159
+ parent: object | undefined;
160
+ };
136
161
  export interface SiblingAccessor {
137
162
  (SiblingTypeName: string): TypeClass | undefined;
138
163
  [key: string]: TypeClass | undefined;
139
164
  }
140
- export interface MnemonicaInstance {
141
- extract(): Record<string, unknown>;
165
+ export interface MnemonicaInstance<T extends object = object> {
166
+ extract(): Extracted<T>;
167
+ pick<K extends keyof T>(...keys: (K | K[])[]): {
168
+ [P in K]: T[P];
169
+ } & {};
142
170
  pick(...keys: string[]): Record<string, unknown>;
143
- pick(keys: string[]): Record<string, unknown>;
144
171
  parent(): object | undefined;
172
+ parent<K extends ParentPathOfInstance<this> & string>(constructorLookupPath: K): InstanceOfTypeRegistry<K> | undefined;
145
173
  parent(constructorLookupPath: string): object | undefined;
146
- readonly clone: object;
147
- fork(...forkArgs: unknown[]): object;
174
+ readonly clone: this;
175
+ fork(...forkArgs: unknown[]): this;
148
176
  exception(error: Error, ...args: unknown[]): Error;
149
177
  readonly sibling: SiblingAccessor;
150
178
  }
@@ -160,19 +188,18 @@ export type InstanceInternalProps = {
160
188
  __timestamp__: number;
161
189
  };
162
190
  export type Props = InstanceInternalProps & {
163
- __self__: InstanceInternalProps & MnemonicaInstance;
191
+ __self__: InstanceInternalProps;
164
192
  [key: string]: unknown;
165
193
  };
166
- export type IsHidingMethods<Config extends constructorOptions> = Config extends {
167
- exposeInstanceMethods: false;
168
- } ? true : false;
169
- export type InstanceResult<N extends object, Config extends constructorOptions> = IsHidingMethods<Config> extends true ? Flatten<N> : Flatten<N> & MnemonicaInstance;
170
- export interface IDefinitorInstance<N extends object, Config extends constructorOptions = constructorOptions, R extends InstanceResult<N, Config> = InstanceResult<N, Config>> {
194
+ export type InstanceResult<N extends object> = {
195
+ [K in keyof N]: N[K];
196
+ };
197
+ export interface IDefinitorInstance<N extends object, R extends InstanceResult<N> = InstanceResult<N>> {
171
198
  TypeName: string;
172
199
  prototype: N;
173
200
  new (...args: unknown[]): R;
174
- (...args: unknown[]): IDefinitorInstance<R, Config>;
175
- define<T extends object, F extends Proto<N, T>>(TypeOrTypeName: string | CallableFunction, constructHandlerOrConfig?: IDEF<T> | object | boolean | CallableFunction, configOrUndefined?: constructorOptions | CallableFunction | boolean): IDefinitorInstance<F, Config>;
201
+ (...args: unknown[]): IDefinitorInstance<R>;
202
+ define<T extends object, F extends Proto<N, T>>(TypeOrTypeName: string | CallableFunction, constructHandlerOrConfig?: IDEF<T> | object | boolean | CallableFunction, configOrUndefined?: constructorOptions | CallableFunction | boolean): IDefinitorInstance<F>;
176
203
  lookup: TypeLookup;
177
204
  registerHook(hookType: hooksTypes, cb: hook): void;
178
205
  subtypes: SubtypesMap;
@@ -180,8 +207,7 @@ export interface IDefinitorInstance<N extends object, Config extends constructor
180
207
  collection?: CollectionDef;
181
208
  }
182
209
  export interface TypeAbsorber extends CallableFunction {
183
- <T extends object>(this: unknown, TypeOrTypeName: string | CallableFunction, constructHandlerOrConfig: IDEF<T> | object | boolean | CallableFunction, configOrUndefined: HideInstanceMethodsOptions): IDefinitorInstance<T, HideInstanceMethodsOptions>;
184
- <T extends object>(this: unknown, TypeOrTypeName: string | CallableFunction, constructHandlerOrConfig?: IDEF<T> | object | boolean | CallableFunction, configOrUndefined?: constructorOptions | CallableFunction | boolean): IDefinitorInstance<T, constructorOptions>;
210
+ <T extends object>(this: unknown, TypeOrTypeName: string | CallableFunction, constructHandlerOrConfig?: IDEF<T> | object | boolean | CallableFunction, configOrUndefined?: constructorOptions | CallableFunction | boolean): IDefinitorInstance<T>;
185
211
  }
186
212
  export interface TypesCollection extends Hookable {
187
213
  define: TypeAbsorber;
@@ -221,26 +247,46 @@ export type DecoratedClass<T extends Constructor<object>> = T & (<U extends Cons
221
247
  lookup: TypeLookup;
222
248
  TypeName: string;
223
249
  };
224
- export type ApplyFunction = <E extends object, T extends object, S extends Proto<E, T>>(entity: E, Constructor: IDEF<T>, args?: unknown[]) => S;
225
- export type CallFunction = <E extends object, T extends object, S extends Proto<E, T>>(entity: E, Constructor: IDEF<T>, ...args: unknown[]) => S;
226
- export type BindFunction = <E extends object, T extends object, S extends Proto<E, T>>(entity: E, Constructor: IDEF<T>) => (...args: unknown[]) => S;
250
+ export type Merge<E extends object, T extends object> = {
251
+ [K in keyof T | keyof E as K extends MnemonicaInstanceMethodKeys ? never : K]: K extends keyof T ? T[K] : E[K & keyof E];
252
+ };
253
+ export interface ApplyFunction extends CallableFunction {
254
+ <E extends object, T extends object>(entity: E, Constructor: IDEF<T>, args?: unknown[]): InstanceResult<Merge<E, T>>;
255
+ }
256
+ export interface CallFunction extends CallableFunction {
257
+ <E extends object, T extends object>(entity: E, Constructor: IDEF<T>, ...args: unknown[]): InstanceResult<Merge<E, T>>;
258
+ }
259
+ export interface BindFunction extends CallableFunction {
260
+ <E extends object, T extends object>(entity: E, Constructor: IDEF<T>): (...args: unknown[]) => InstanceResult<Merge<E, T>>;
261
+ }
227
262
  export interface UtilsCollection {
228
- extract: (instance: object) => Record<string, unknown>;
229
- pick: (instance: object, ...args: (string | string[])[]) => Record<string, unknown>;
263
+ extract<T extends object>(instance: T): Extracted<T>;
264
+ pick<T extends object, K extends keyof T>(instance: T, ...args: (K | K[])[]): {
265
+ [P in K]: T[P];
266
+ } & {};
267
+ pick<T extends object>(instance: T, ...args: (string | string[])[]): Record<string, unknown>;
268
+ clone<T extends object>(instance: T): T;
269
+ fork<T extends object>(instance: T): (this: object, ...forkArgs: unknown[]) => T;
270
+ sibling(instance: object): SiblingAccessor;
230
271
  collectConstructors: (instance: object, flat?: boolean) => (CallableFunction | string)[];
231
- merge: (...args: unknown[]) => unknown;
232
- parse: (value: unknown) => object | undefined;
233
- parent: (instance: object, strict?: boolean) => object | undefined;
234
- toJSON: (instance: object) => string;
272
+ merge<A extends object, B extends object>(a: A, b: B, ...args: unknown[]): InstanceResult<Merge<B, A>>;
273
+ parse<T extends object>(self: T): Parsed<T>;
274
+ parent<T extends object>(instance: T): object | undefined;
275
+ parent<T extends object, K extends ParentPathOfInstance<T> & string>(instance: T, path: K): InstanceOfTypeRegistry<K> | undefined;
276
+ parent<T extends object>(instance: T, path: string): object | undefined;
277
+ toJSON<T extends object>(instance: T): string;
235
278
  [key: string]: CallableFunction;
236
279
  }
237
280
  export interface MnemonicaModule {
238
281
  define: TypeAbsorber;
239
- lookup: (TypeNestedPath: string) => TypeClass | undefined;
282
+ lookup: {
283
+ (TypeNestedPath: string): TypeClass | undefined;
284
+ <const K extends keyof TypeRegistry>(TypeNestedPath: K): TypeRegistry[K] | undefined;
285
+ };
240
286
  apply: ApplyFunction;
241
287
  call: CallFunction;
242
288
  bind: BindFunction;
243
- decorate: <U extends Constructor<object>>(target?: object, config?: object) => DecoratedClass<U>;
289
+ decorate: <T extends Constructor<object> | constructorOptions | undefined = undefined>(target?: T, config?: constructorOptions) => <U extends Constructor<object>>(cstr: U) => DecoratedClass<U>;
244
290
  registerHook: <T extends object>(Constructor: IDEF<T>, hookType: hooksTypes, cb: hook) => void;
245
291
  defaultTypes: TypesCollection;
246
292
  BASE_MNEMONICA_ERROR: MnemonicaErrorConstructor;
@@ -258,12 +304,10 @@ export interface MnemonicaModule {
258
304
  WRONG_STACK_CLEANER: MnemonicaErrorConstructor;
259
305
  MNEMONICA: string;
260
306
  MNEMOSYNE: string;
261
- URANUS: string;
262
307
  SymbolParentType: symbol;
263
308
  SymbolConstructorName: symbol;
264
309
  SymbolDefaultTypesCollection: symbol;
265
310
  SymbolConfig: symbol;
266
- SymbolGaia: symbol;
267
311
  TYPE_TITLE_PREFIX: string;
268
312
  ErrorMessages: ErrorMessages;
269
313
  utils: UtilsCollection;
@@ -1,3 +1,3 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5cbi8vIFByb3BzIHR5cGUgZm9yIGdldFByb3BzL3NldFByb3BzXG5leHBvcnQgdHlwZSBQcm9wc1R5cGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLy8gQ29yZSB0eXBlIGRlZmluaXRpb25zIGZvciBtbmVtb25pY2FcblxuLy8gQmFzZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0eXBlIC0gY2FuIGJlIGEgY2xhc3MgY29uc3RydWN0b3Igb3IgYSBmdW5jdGlvbi5cbi8vIEFyZ3MgZGVmYXVsdHMgdG8gdW5rbm93bltdIHNvIElERUY8VD4gaXMgYmFja3dhcmRzIGNvbXBhdGlibGU7XG4vLyBzdXBwbHkgQXJncyB0byBnZXQgdHlwZWQgY29uc3RydWN0b3IgcGFyYW1zOiBJREVGPE15VHlwZSwgW3N0cmluZywgbnVtYmVyXT5cbmV4cG9ydCB0eXBlIElERUY8VCwgQXJncyBleHRlbmRzIHVua25vd25bXSA9IHVua25vd25bXT4gPSB7IG5ldygpOiBUIH0gfCB7ICh0aGlzOiBULCAuLi5hcmdzOiBBcmdzKTogdm9pZCB9O1xuXG4vLyBFcnJvciBtZXNzYWdlIHR5cGVzIC0gYWxsIGVycm9yIG1lc3NhZ2VzIGFyZSBzdHJpbmdzXG5leHBvcnQgdHlwZSBFcnJvck1lc3NhZ2VLZXkgPVxuXHR8ICdCQVNFX0VSUk9SX01FU1NBR0UnXG5cdHwgJ0hBTkRMRVJfTVVTVF9CRV9BX0ZVTkNUSU9OJ1xuXHR8ICdXUk9OR19UWVBFX0RFRklOSVRJT04nXG5cdHwgJ1dST05HX0lOU1RBTkNFX0lOVk9DQVRJT04nXG5cdHwgJ1dST05HX01PRElGSUNBVElPTl9QQVRURVJOJ1xuXHR8ICdBTFJFQURZX0RFQ0xBUkVEJ1xuXHR8ICdXUk9OR19BUkdVTUVOVFNfVVNFRCdcblx0fCAnV1JPTkdfSE9PS19UWVBFJ1xuXHR8ICdNSVNTSU5HX0hPT0tfQ0FMTEJBQ0snXG5cdHwgJ01JU1NJTkdfQ0FMTEJBQ0tfQVJHVU1FTlQnXG5cdHwgJ09QVElPTlNfRVJST1InXG5cdHwgJ1dST05HX1NUQUNLX0NMRUFORVInO1xuXHQvLyB8ICdUWVBFTkFNRV9NVVNUX0JFX0FfU1RSSU5HJ1xuXHQvLyB8ICdGTE9XX0NIRUNLRVJfUkVERUZJTklUSU9OJ1xuXG4vLyBFcnJvciBtZXNzYWdlcyBvYmplY3QgdHlwZVxuZXhwb3J0IHR5cGUgRXJyb3JNZXNzYWdlcyA9IFJlY29yZDxFcnJvck1lc3NhZ2VLZXksIHN0cmluZz47XG5cbi8vIEhvb2sgY2FsbGJhY2sg4oCUIHBhc3NlZCB0byByZWdpc3Rlckhvb2sgYW5kIGludm9rZWQgYnkgaW52b2tlSG9va1xuZXhwb3J0IGludGVyZmFjZSBob29rIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChvcHRzOiBob29rc09wdHMpOiB1bmtub3duO1xufVxuXG4vLyBFcnJvciBjb25zdHJ1Y3RvciBmcm9tIGNvbnN0cnVjdEVycm9yIC0gY29uc3RydWN0YWJsZSBmdW5jdGlvbiB3aXRoIHByb3RvdHlwZVxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yIHtcblx0bmV3KGFkZGl0aW9uPzogc3RyaW5nLCBzdGFjaz86IHN0cmluZyB8IHN0cmluZ1tdKTogRXJyb3I7XG5cdChuYW1lOiBzdHJpbmcpOiBFcnJvcjtcblx0cHJvdG90eXBlOiB7XG5cdFx0Y29uc3RydWN0b3I6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdH07XG59XG5cbi8vIEVycm9ycyB0eXBlcyBtYXAgLSBpbmRleGFibGUgcmVjb3JkIG9mIGVycm9yIGNvbnN0cnVjdG9yc1xuZXhwb3J0IHR5cGUgRXJyb3JzVHlwZXNNYXAgPSBSZWNvcmQ8c3RyaW5nLCBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yPjtcblxuLy8gTW5lbW9uaWNhIGVycm9yIGludGVyZmFjZSBmb3IgZXh0ZW5kZWQgRXJyb3Igb2JqZWN0c1xuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FFcnJvciBleHRlbmRzIEVycm9yIHtcblx0ZXhjZXB0aW9uUmVhc29uPzogRXJyb3I7XG5cdHJlYXNvbnM/OiBFcnJvcltdO1xuXHRzdXJwbHVzPzogRXJyb3JbXTtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBUeXBlIENvbnN0cnVjdG9yLlxuICogXCJUeXBlXCIgaGVyZSBpcyB1c2VkIGluIHRoZSBDb21wdXRlciBTY2llbmNlIHNlbnNlIOKAlCBhbiBpbnRlcmZhY2UvY29udHJhY3RcbiAqIGRlc2NyaWJpbmcgd2hhdCBhIGNvbnN0cnVjdG9yIG11c3Qgc2F0aXNmeSAoYm90aCBgbmV3YC1hYmxlIGFuZCBjYWxsYWJsZSkuXG4gKiBUQyA9IFR5cGUgQ29uc3RydWN0b3I7IFwiSW50ZXJuYWxcIiBtZWFucyB0aGlzIGlzIHRoZSBsaWJyYXJ5J3Mgb3duIGNvbnN0cnVjdG9yXG4gKiBzaGFwZSwgZGlzdGluY3QgZnJvbSB1c2VyLWZhY2luZyBUeXBlQ29uc3RydWN0b3IgYmVsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0ludGVybmFsX1RDXzxDb25zdHJ1Y3Rvckluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PiB7XG5cdG5ldyguLi5hcmdzOiB1bmtub3duW10pOiBDb25zdHJ1Y3Rvckluc3RhbmNlO1xuXHQodGhpczogQ29uc3RydWN0b3JJbnN0YW5jZSwgLi4uYXJnczogdW5rbm93bltdKTogQ29uc3RydWN0b3JJbnN0YW5jZTtcblx0cmVhZG9ubHkgcHJvdG90eXBlOiBDb25zdHJ1Y3Rvckluc3RhbmNlICYge1xuXHRcdHJlYWRvbmx5IGNvbnN0cnVjdG9yOiBfSW50ZXJuYWxfVENfPENvbnN0cnVjdG9ySW5zdGFuY2U+XG5cdH07XG59XG5cbi8qKlxuICogUHVibGljIGFsaWFzIGZvciBfSW50ZXJuYWxfVENfIOKAlCB0aGUgc2hhcGUgb2YgY29uc3RydWN0b3IgZnVuY3Rpb25zIHJldHVybmVkIGJ5IGBkZWZpbmUoKWAuXG4gKiBBdWdtZW50ZWQgYnkgdGFjdGljYS1nZW5lcmF0ZWQgVHlwZVJlZ2lzdHJ5IHRvIGJlY29tZSB1c2VyLXNwZWNpZmljIHR5cGVzLlxuICogS2VwdCBhcyBhIG5hbWVkIGFsaWFzIChyYXRoZXIgdGhhbiBpbmxpbmluZyBfSW50ZXJuYWxfVENfKSBzbyB0YWN0aWNhIGNhbiByZWZlcmVuY2UgaXRcbiAqIGNsZWFubHkgaW4gZ2VuZXJhdGVkIGRlY2xhcmF0aW9uIGZpbGVzLlxuICovXG5leHBvcnQgdHlwZSBUeXBlQ29uc3RydWN0b3I8Q29uc3RydWN0b3JJbnN0YW5jZSBleHRlbmRzIG9iamVjdD4gPSBfSW50ZXJuYWxfVENfPENvbnN0cnVjdG9ySW5zdGFuY2U+O1xuXG4vLyBIb29rIHR5cGVzXG5leHBvcnQgdHlwZSBob29rc1R5cGVzID0gJ3ByZUNyZWF0aW9uJyB8ICdwb3N0Q3JlYXRpb24nIHwgJ2NyZWF0aW9uRXJyb3InO1xuXG4vLyBIb29rIG9wdGlvbnMgcGFzc2VkIHRvIGhvb2sgY2FsbGJhY2tzXG4vLyBQID0gcGFyZW50IC8gZXhpc3RlbnQgaW5zdGFuY2UgKHByb3RvKVxuLy8gVCA9IGNoaWxkIC8gaW5oZXJpdGVkIGluc3RhbmNlICh0eXBlIGJlaW5nIGNyZWF0ZWQpXG5leHBvcnQgdHlwZSBob29rc09wdHM8UCA9IG9iamVjdCwgVCA9IFA+ID0ge1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHR0eXBlOiBUeXBlRGVmO1xuXHRhcmdzOiB1bmtub3duW107XG5cdGV4aXN0ZW50SW5zdGFuY2U6IFA7XG5cdGluaGVyaXRlZEluc3RhbmNlPzogVDtcblx0Y3JlYXRvcj86IHsgdGhyb3dNb2RpZmljYXRpb25FcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIH07XG59O1xuXG4vLyBDYWxsYmFjayBwYXNzZWQgaW50byBNb2RpZmljYXRpb25Db25zdHJ1Y3RvciB0byBhdHRhY2ggaW50ZXJuYWwgcHJvcHMgdG8gdGhlIHByb3RvdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGRQcm9wc0NhbGxiYWNrIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChwcm90bzogb2JqZWN0KTogdm9pZDtcbn1cblxuLy8gTW9kaWZpY2F0aW9uQ29uc3RydWN0b3I6IHdpcmVzIHByb3RvdHlwZSBjaGFpbiBkdXJpbmcgaW5zdGFuY2UgY3JlYXRpb25cbmV4cG9ydCBpbnRlcmZhY2UgTW9kaWZpY2F0aW9uQ29uc3RydWN0b3IgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KFxuXHRcdHRoaXM6IG9iamVjdCxcblx0XHRNb2RpZmljYXRvclR5cGU6IE1uZW1vbmljYUNvbnN0cnVjdG9yLFxuXHRcdE1vZGlmaWNhdG9yVHlwZVByb3RvdHlwZTogb2JqZWN0LFxuXHRcdF9hZGRQcm9wczogQWRkUHJvcHNDYWxsYmFja1xuXHQpOiBNbmVtb25pY2FDb25zdHJ1Y3Rvcjtcbn1cblxuLy8gRmFjdG9yeSB0aGF0IHJldHVybnMgYSBNb2RpZmljYXRpb25Db25zdHJ1Y3RvciAodXNlZCBpbiBjb25zdHJ1Y3Rvck9wdGlvbnMpXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yRmFjdG9yeSBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQoKTogTW9kaWZpY2F0aW9uQ29uc3RydWN0b3I7XG59XG5cbi8vIEZhY3RvcnkgdGhhdCByZXR1cm5zIGEgTW5lbW9uaWNhQ29uc3RydWN0b3IgKHN0b3JlZCBpbiBUeXBlRGVmLmNvbnN0cnVjdEhhbmRsZXIpXG5leHBvcnQgaW50ZXJmYWNlIE1uZW1vbmljYUNvbnN0cnVjdG9yRmFjdG9yeSBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQoKTogTW5lbW9uaWNhQ29uc3RydWN0b3I7XG59XG5cbi8vIE1hcmtzIHRoZSB0b3Agb2YgYSBjYXB0dXJlZCBzdGFjayB0cmFjZSAocGFzc2VkIHRvIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlIGFzIGNvbnN0cnVjdG9yT3B0KVxuZXhwb3J0IGludGVyZmFjZSBTdGFja0JvdW5kYXJ5IGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7fVxuXG4vLyBBIHdyYXBwYWJsZSB1dGlsaXR5IG1ldGhvZCDigJQgYW55IGNhbGxhYmxlIHRoYXQgd3JhcFRoaXMoKSBjYW4gcHJveHlcbmV4cG9ydCBpbnRlcmZhY2UgV3JhcHBhYmxlTWV0aG9kIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7fVxuXG4vLyBDb25zdHJ1Y3RvciBvcHRpb25zIGZvciBkZWZpbmUgLSBkZWZhdWx0IChleHBvc2VJbnN0YW5jZU1ldGhvZHMgZGVmYXVsdHMgdG8gdHJ1ZSBiZWhhdmlvcilcbmV4cG9ydCB0eXBlIGNvbnN0cnVjdG9yT3B0aW9ucyA9IHtcblx0Ly8gZXhwbGljaXQgZGVjbGFyYXRpb24gd2Ugd2lzaCB1c2Vcblx0Ly8gYW4gb2xkIHN0eWxlIGJhc2VkIGNvbnN0cnVjdG9yc1xuXHRNb2RpZmljYXRpb25Db25zdHJ1Y3Rvcj86IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yRmFjdG9yeSxcblx0Ly8gc2hhbGwgb3Igbm90IHdlIHVzZSBzdHJpY3QgY2hlY2tpbmdcblx0Ly8gZm9yIGNyZWF0aW9uIHN1Yi1pbnN0YW5jZXMgT25seSBmcm9tIGN1cnJlbnQgdHlwZVxuXHQvLyBvciB3ZSBtaWdodCB1c2UgdXAtbmVzdGVkIHN1Yi1pbnN0YW5jZXMgZnJvbSBjaGFpblxuXHRzdHJpY3RDaGFpbj86IGJvb2xlYW4sXG5cdC8vIHNob3VsZCB3ZSB1c2UgZm9yY2VkIGVycm9ycyBjaGVja2luZ1xuXHQvLyB0byBtYWtlIGFsbCBpbmhlcml0ZWQgdHlwZXMgZXJyb3JlZFxuXHQvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciBzb21ld2hlcmUgaW4gY2hhaW5cblx0YmxvY2tFcnJvcnM/OiBib29sZWFuLFxuXHQvLyBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gY29sbGVjdCBzdGFja1xuXHQvLyBhcyBhIF9fc3RhY2tfXyBwcm90b3R5cGUgcHJvcGVydHlcblx0Ly8gZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGluc3RhbmNlIGNyZWF0aW9uXG5cdHN1Ym1pdFN0YWNrPzogYm9vbGVhbixcblx0Ly8gYXdhaXQgbmV3IENvbnN0cnVjdG9yKClcblx0Ly8gbXVzdCByZXR1cm4gdmFsdWVcblx0YXdhaXRSZXR1cm4/OiBib29sZWFuLFxuXHQvLyBGb3JjZSBjbGFzcyBtb2RlIChhdXRvLWRldGVjdGVkIGJ5IGRlZmF1bHQpXG5cdGFzQ2xhc3M/OiBib29sZWFuLFxuXHQvLyBFeHBvc2UgaW5zdGFuY2UgbWV0aG9kcyAoZXh0cmFjdCwgcGljaywgcGFyZW50LCBjbG9uZSwgZm9yaywgZXhjZXB0aW9uLCBzaWJsaW5nKVxuXHQvLyBvbiB0aGUgaW5zdGFuY2UgdHlwZS4gV2hlbiBmYWxzZSwgdGhlc2UgbWV0aG9kcyBhcmUgc3RpbGwgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGVcblx0Ly8gYnV0IGhpZGRlbiBmcm9tIHRoZSB0eXBlIGRlZmluaXRpb24gdW5sZXNzIGV4cGxpY2l0bHkgZXhwb3NlZC5cblx0ZXhwb3NlSW5zdGFuY2VNZXRob2RzPzogYm9vbGVhbixcbn07XG5cbi8vIENvbnN0cnVjdG9yIG9wdGlvbnMgdGhhdCBleHBsaWNpdGx5IGhpZGUgaW5zdGFuY2UgbWV0aG9kc1xuZXhwb3J0IHR5cGUgSGlkZUluc3RhbmNlTWV0aG9kc09wdGlvbnMgPSBjb25zdHJ1Y3Rvck9wdGlvbnMgJiB7XG5cdGV4cG9zZUluc3RhbmNlTWV0aG9kczogdHJ1ZTtcbn07XG5cbi8vIFN1YnR5cGVzIG1hcCAtIHJlcHJlc2VudHMgdGhlIHN1YnR5cGVzIHByb3BlcnR5XG5leHBvcnQgdHlwZSBTdWJ0eXBlc01hcCA9IE1hcDxzdHJpbmcsIFR5cGVDbGFzcz47XG5cbi8vIFR5cGUgZGVmaW5pdGlvbiBvYmplY3QgKGludGVybmFsIHByb3BlcnRpZXMpXG5leHBvcnQgdHlwZSBUeXBlRGVmID0ge1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRwcm90bzogb2JqZWN0O1xuXHRpc1N1YlR5cGU6IGJvb2xlYW47XG5cdHN1YnR5cGVzOiBTdWJ0eXBlc01hcDtcblx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkRlZjtcblx0Y29uZmlnOiBjb25zdHJ1Y3Rvck9wdGlvbnM7XG5cdHBhcmVudFR5cGU/OiBUeXBlRGVmO1xuXHRjb25zdHJ1Y3RIYW5kbGVyOiBNbmVtb25pY2FDb25zdHJ1Y3RvckZhY3Rvcnk7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdGhvb2tzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8aG9vaz4+O1xuXHRpbnZva2VIb29rOiAoaG9va1R5cGU6IGhvb2tzVHlwZXMsIG9wdHM6IGhvb2tzT3B0cykgPT4gU2V0PHVua25vd24+O1xuXHRwcm90b3R5cGU6IHVua25vd247XG5cdHN0YWNrPzogc3RyaW5nO1xuXHRbU3ltYm9sLmhhc0luc3RhbmNlXTogKGluc3RhbmNlOiBvYmplY3QpID0+IGJvb2xlYW47XG59O1xuXG4vLyBDb2xsZWN0aW9uIGRlZmluaXRpb25cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25EZWYgPSBIb29rYWJsZSAmIHtcblx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdGxvb2t1cDogVHlwZUxvb2t1cDtcblx0c3VidHlwZXM6IFN1YnR5cGVzTWFwO1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuLy8gVHlwZSBsb29rdXAgZnVuY3Rpb24gdHlwZTogbWF5IGhhdmUgYXVnbWVudGF0aW9uIGJ5IFRhY3RpY2EgcmUtZGVmaW5pdGlvblxuZXhwb3J0IGludGVyZmFjZSBUeXBlTG9va3VwIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdCh0aGlzOiBNYXA8c3RyaW5nLCB1bmtub3duPiwgVHlwZU5lc3RlZFBhdGg6IHN0cmluZyk6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcbn1cblxuLy8gU3BlY2lmaWNhdGlvbiBmb3IgY2hhaW5lZCBzdWJ0eXBlIGNyZWF0aW9uIHdpdGggLnRoZW4oKVxuZXhwb3J0IGludGVyZmFjZSBUaGVuU3BlYyB7XG5cdHN1YnR5cGU6IG9iamVjdDtcblx0YXJnczogdW5rbm93bltdO1xuXHRuYW1lPzogc3RyaW5nO1xufVxuXG4vLyBDb250ZXh0IG9iamVjdCBwYXNzZWQgdGhyb3VnaCB0aGUgSW5zdGFuY2VDcmVhdG9yIHBpcGVsaW5lXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlQ3JlYXRvckNvbnRleHQge1xuXHR0eXBlOiBUeXBlRGVmO1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRleGlzdGVudEluc3RhbmNlOiBvYmplY3Q7XG5cdGFyZ3M6IHVua25vd25bXTtcblx0TW9kaWZpY2F0aW9uQ29uc3RydWN0b3I6IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yO1xuXHRNb2RpZmljYXRvclR5cGU6IE1uZW1vbmljYUNvbnN0cnVjdG9yO1xuXHRJbnN0YW5jZU1vZGlmaWNhdG9yOiBNbmVtb25pY2FDb25zdHJ1Y3Rvcjtcblx0aW5oZXJpdGVkSW5zdGFuY2U6IG9iamVjdCB8IFByb21pc2U8b2JqZWN0Pjtcblx0Y29uZmlnOiBjb25zdHJ1Y3Rvck9wdGlvbnM7XG5cdHByb3RvOiBvYmplY3Q7XG5cdF9fcHJvdG9fcHJvdG9fXz86IG9iamVjdDtcblx0c3RhY2s/OiBzdHJpbmdbXTtcblxuXHRnZXRFeGlzdGVudEFzeW5jU3RhY2soZXhpc3RlbnRJbnN0YW5jZTogb2JqZWN0KTogdW5rbm93bjtcblx0cG9zdFByb2Nlc3NpbmcoY29udGludWF0aW9uT2Y/OiBUeXBlRGVmKTogdm9pZDtcblx0bWFrZUF3YWl0ZXIodHlwZTogVHlwZURlZiwgdGhlbj86IFRoZW5TcGVjKTogUHJvbWlzZTxvYmplY3Q+O1xuXHRhZGRUaGVuKHRoZW46IFRoZW5TcGVjKTogdm9pZDtcblx0aW52b2tlUHJlSG9va3MoKTogdm9pZDtcblx0aW52b2tlUG9zdEhvb2tzKCk6IHsgdHlwZTogU2V0PHVua25vd24+OyBjb2xsZWN0aW9uOiBTZXQ8dW5rbm93bj4gfTtcblx0dGhyb3dNb2RpZmljYXRpb25FcnJvcihlcnJvcjogTW5lbW9uaWNhRXJyb3IpOiB2b2lkO1xufVxuXG4vKipcbiAqIFByb3RvIG1lcmdlIHR5cGUgLSBjb21iaW5lcyBwYXJlbnQgYW5kIGNoaWxkIHR5cGVzIHdpdGhvdXQgcHJvcGVydHkgY29uZmxpY3RzLlxuICpcbiAqIFdoZW4gYSBzdWJ0eXBlIGlzIGRlZmluZWQgZnJvbSBhIHBhcmVudCBpbnN0YW5jZSwgd2Ugd2FudCB0aGUgY2hpbGQgcHJvcGVydGllc1xuICogdG8gdGFrZSBwcmVjZWRlbmNlLiBgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPmAgcmVtb3ZlcyBvdmVybGFwcGluZyBrZXlzIGZyb20gUCxcbiAqIHNvIGBQaWNrPFAsIC4uLj5gIG9ubHkgYnJpbmdzIGluIHBhcmVudCBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QgY2xhc2ggd2l0aCBjaGlsZC5cbiAqXG4gKiBSZXN1bHQ6IGNoaWxkIFQgZ2V0cyBhbGwgaXRzIG93biBwcm9wcywgcGx1cyBwYXJlbnQncyBub24tb3ZlcmxhcHBpbmcgcHJvcHMuXG4gKi9cbmV4cG9ydCB0eXBlIFByb3RvPFAgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3Q+ID0gVCAmIFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPj47XG5cblxuLy8gZXhwb3J0IHR5cGUgUHJvdG9GbGF0PFxuLy8gXHRQIGV4dGVuZHMgb2JqZWN0LFxuLy8gXHRUIGV4dGVuZHMgb2JqZWN0LFxuLy8gXHRGIGV4dGVuZHMgUHJvdG88UCwgVD4gPSBQcm90bzxQLCBUPlxuLy8gPiA9IHsgW2tleSBpbiBrZXlvZiBGXTogRltrZXldfSA7XG5cbmV4cG9ydCB0eXBlIFByb3RvRmxhdDxcblx0UCBleHRlbmRzIG9iamVjdCxcblx0VCBleHRlbmRzIG9iamVjdCxcblx0TCBleHRlbmRzIEV4Y2x1ZGU8a2V5b2YgUCwga2V5b2YgVD4gPSBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+LFxuPiA9IHtcbiAgICBba2V5IGluIGtleW9mIFRdOiBUW2tleV07XG59ICYge1xuXHRba2V5IGluIExdOiBQW2tleV07XG59O1xuXG5leHBvcnQgdHlwZSBGbGF0dGVuPEY+ID0geyBba2V5IGluIGtleW9mIEZdOiBGW2tleV0gfVxuXG4vLyBTaWJsaW5nIHR5cGUgYWNjZXNzb3JcbmV4cG9ydCBpbnRlcmZhY2UgU2libGluZ0FjY2Vzc29yIHtcblx0KFNpYmxpbmdUeXBlTmFtZTogc3RyaW5nKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xuXHRba2V5OiBzdHJpbmddOiBUeXBlQ2xhc3MgfCB1bmRlZmluZWQ7XG59XG5cbi8vIE1uZW1vbmljYSBpbnN0YW5jZSBtZXRob2RzIGludGVyZmFjZVxuLy8gVGhlc2UgbWV0aG9kcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSBvbiB0aGUgcHJvdG90eXBlIGNoYWluXG4vLyBidXQgY2FuIGJlIGhpZGRlbiBmcm9tIHR5cGUgZGVmaW5pdGlvbnMgdmlhIGV4cG9zZUluc3RhbmNlTWV0aG9kcyBvcHRpb25cbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhSW5zdGFuY2Uge1xuXHRleHRyYWN0KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRwaWNrKC4uLmtleXM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdHBpY2soa2V5czogc3RyaW5nW10pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0cGFyZW50KCk6IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0cGFyZW50KGNvbnN0cnVjdG9yTG9va3VwUGF0aDogc3RyaW5nKTogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRyZWFkb25seSBjbG9uZTogb2JqZWN0O1xuXHRmb3JrKC4uLmZvcmtBcmdzOiB1bmtub3duW10pOiBvYmplY3Q7XG5cdGV4Y2VwdGlvbihlcnJvcjogRXJyb3IsIC4uLmFyZ3M6IHVua25vd25bXSk6IEVycm9yO1xuXHRyZWFkb25seSBzaWJsaW5nOiBTaWJsaW5nQWNjZXNzb3I7XG59XG5cbi8vIEluc3RhbmNlIHByb3BlcnRpZXMgZm9yIF9fc2VsZl9fIHJlZmVyZW5jZVxuLy8gVGhpcyBtZXJnZXMgaW50ZXJuYWwgcHJvcHMgd2l0aCB0aGUgaW5zdGFuY2UgbWV0aG9kc1xuLy8gSW50ZXJuYWwgaW5zdGFuY2UgcHJvcGVydGllcyAobm9uLWVudW1lcmFibGUpXG4vLyBUaGVzZSBhcmUgYWx3YXlzIHByZXNlbnQgb24gaW5zdGFuY2VzIGJ1dCBhY2Nlc3NlZCB2aWEgZ2V0UHJvcHMvc2V0UHJvcHNcbmV4cG9ydCB0eXBlIEluc3RhbmNlSW50ZXJuYWxQcm9wcyA9IHtcblx0X19wcm90b19wcm90b19fOiBvYmplY3Q7XG5cdF9fYXJnc19fOiB1bmtub3duW107XG5cdF9fY29sbGVjdGlvbl9fOiBDb2xsZWN0aW9uRGVmO1xuXHRfX3N1YnR5cGVzX186IE1hcDxzdHJpbmcsIG9iamVjdD47XG5cdF9fdHlwZV9fOiBUeXBlRGVmO1xuXHRfX3BhcmVudF9fOiBvYmplY3Q7XG5cdF9fc3RhY2tfXz86IHN0cmluZztcblx0X19jcmVhdG9yX186IEluc3RhbmNlQ3JlYXRvckNvbnRleHQ7XG5cdF9fdGltZXN0YW1wX186IG51bWJlcjtcbn07XG5cbi8vIENvbWJpbmVkIFByb3BzIHR5cGUgZm9yIGludGVybmFsIHVzZSBpbnNpZGUgLi9zcmNcbmV4cG9ydCB0eXBlIFByb3BzID0gSW5zdGFuY2VJbnRlcm5hbFByb3BzICYge1xuXHRfX3NlbGZfXzogSW5zdGFuY2VJbnRlcm5hbFByb3BzICYgTW5lbW9uaWNhSW5zdGFuY2U7XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4vLyBIZWxwZXIgdHlwZTogdHJ1ZSB3aGVuIGV4cG9zZUluc3RhbmNlTWV0aG9kcyBpcyBleHBsaWNpdGx5IGZhbHNlXG5leHBvcnQgdHlwZSBJc0hpZGluZ01ldGhvZHM8Q29uZmlnIGV4dGVuZHMgY29uc3RydWN0b3JPcHRpb25zPiA9XG4gIENvbmZpZyBleHRlbmRzIHsgZXhwb3NlSW5zdGFuY2VNZXRob2RzOiBmYWxzZSB9ID8gdHJ1ZSA6IGZhbHNlO1xuXG4vLyBDb21iaW5lZCBpbnN0YW5jZSB0eXBlIGJhc2VkIG9uIGNvbmZpZzpcbi8vICAgaGlkaW5nIOKGkiBGbGF0dGVuPE4+ICh1c2VyIHByb3BzIG9ubHkpXG4vLyAgIHNob3dpbmcg4oaSIEZsYXR0ZW48Tj4gJiBNbmVtb25pY2FJbnN0YW5jZSAodXNlciBwcm9wcyArIGV4dHJhY3QvZm9yay9ldGMuKVxuZXhwb3J0IHR5cGUgSW5zdGFuY2VSZXN1bHQ8XG4gIE4gZXh0ZW5kcyBvYmplY3QsXG4gIENvbmZpZyBleHRlbmRzIGNvbnN0cnVjdG9yT3B0aW9ucyxcbj4gPSBJc0hpZGluZ01ldGhvZHM8Q29uZmlnPiBleHRlbmRzIHRydWUgPyBGbGF0dGVuPE4+IDogRmxhdHRlbjxOPiAmIE1uZW1vbmljYUluc3RhbmNlO1xuXG4vLyBEZWZpbml0b3IgaW5zdGFuY2UgLSB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gcmV0dXJuZWQgYnkgZGVmaW5lXG4vLyBOID0gaW5zdGFuY2UgdHlwZSAocHJvcGVydGllcyBhdmFpbGFibGUgb24gaW5zdGFuY2VzKVxuLy8gUyA9IHN1YnR5cGVzIG1hcFxuLy8gQ29uZmlnID0gY29uc3RydWN0b3Igb3B0aW9ucyBjb250cm9sbGluZyB0eXBlIHZpc2liaWxpdHlcbmV4cG9ydCBpbnRlcmZhY2UgSURlZmluaXRvckluc3RhbmNlPFxuXHROIGV4dGVuZHMgb2JqZWN0LFxuXHRDb25maWcgZXh0ZW5kcyBjb25zdHJ1Y3Rvck9wdGlvbnMgPSBjb25zdHJ1Y3Rvck9wdGlvbnMsXG5cdFIgZXh0ZW5kcyBJbnN0YW5jZVJlc3VsdDxOLCBDb25maWc+ID0gSW5zdGFuY2VSZXN1bHQ8TiwgQ29uZmlnPlxuPiB7XG5cblx0VHlwZU5hbWU6IHN0cmluZztcblx0cHJvdG90eXBlOiBOO1xuXG5cdFxuXHQvLyB0aGUgbGluZSBiZWxvdyBkZWNsYXJlcyBhIGBuZXcgLi4uYCBpbnZvY2F0aW9uLFxuXHQvLyBzbyBtYWtlcyBpbnRlcmZhY2UgY29uc3RydWN0aWJsZVxuXHQvLyBuZXcoLi4uYXJnczogdW5rbm93bltdKTogeyBba2V5IGluIGtleW9mIFJdOiBSW2tleV0gfTtcblx0bmV3KC4uLmFyZ3M6IHVua25vd25bXSk6IFI7XG5cblx0XG5cdC8vIFRPRE86IG5lZWQgY2hlY2sgaWYgbGluZSBiZWxvdyB3b3Jrc1xuXHQvLyBhbHNvIFRTIGhpbnRpbmcgY2hlY2sgYXMgd2VsbFxuXHQvLyB0aGUgbGluZSBiZWxvdyBzaG91bGQgbWFrZSBpcyBhIEBkZWNvcmF0ZSBkZWNvcmF0b3Igd29ya2luZ1xuXHQoLi4uYXJnczogdW5rbm93bltdKTogSURlZmluaXRvckluc3RhbmNlPFIsIENvbmZpZz47XG5cblxuXHQvLyBEZWZpbmUgbWV0aG9kIHRoYXQgY29tYmluZXMgcGFyZW50IE4gd2l0aCBuZXcgdHlwZSBUIHVzaW5nIFByb3RvXG5cdGRlZmluZTxcblx0XHRUIGV4dGVuZHMgb2JqZWN0LFxuXG5cdFx0Ly8gdGhpcyB3aWxsIGJlIGluc3RhbmNlIHR5cGUgZm9yIHN1Yi10eXBlICEhIVxuXHRcdC8vIEYgZXh0ZW5kcyBGbGF0dGVuPFByb3RvPE4sIFQ+PlxuXHRcdEYgZXh0ZW5kcyBQcm90bzxOLCBUPlxuXHQ+KFxuXHRcdFR5cGVPclR5cGVOYW1lOiBzdHJpbmcgfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbnN0cnVjdEhhbmRsZXJPckNvbmZpZz86IElERUY8VD4gfCBvYmplY3QgfCBib29sZWFuIHwgQ2FsbGFibGVGdW5jdGlvbixcblx0XHRjb25maWdPclVuZGVmaW5lZD86IGNvbnN0cnVjdG9yT3B0aW9ucyB8IENhbGxhYmxlRnVuY3Rpb24gfCBib29sZWFuXG5cdCk6IElEZWZpbml0b3JJbnN0YW5jZTxGLCBDb25maWc+O1xuXHRcblx0bG9va3VwOiBUeXBlTG9va3VwO1xuXHRcblx0cmVnaXN0ZXJIb29rKGhvb2tUeXBlOiBob29rc1R5cGVzLCBjYjogaG9vayk6IHZvaWQ7XG5cdFxuXHRcblx0c3VidHlwZXM6IFN1YnR5cGVzTWFwO1xuXHRcblx0Ly8gSW50ZXJuYWwgcHJvcGVydGllcyBhY2Nlc3NlZCBieSB0ZXN0c1xuXHRfX3R5cGVfXz86IFR5cGVEZWY7XG5cdGNvbGxlY3Rpb24/OiBDb2xsZWN0aW9uRGVmO1xuXG5cdC8qXG5cdC8vIEFsbG93IGR5bmFtaWMgcHJvcGVydHkgYWNjZXNzIGZvciBzdWJ0eXBlc1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHQqL1xufVxuXG4vLyBUeXBlIGFic29yYmVyIGZ1bmN0aW9uIHR5cGUgLSB1c2VkIGZvciBkZWZpbmluZyBzdWJ0eXBlc1xuLy8gU3VwcG9ydHMgbXVsdGlwbGUgY2FsbGluZyBjb252ZW50aW9uczpcbi8vIDEuIE1vZGVybjogZGVmaW5lKFR5cGVOYW1lLCBjb25zdHJ1Y3RIYW5kbGVyLCBjb25maWc/KVxuLy8gMi4gTGVnYWN5OiBkZWZpbmUoY29uc3RydWN0SGFuZGxlciwgY29uZmlnPykgLSBUeXBlTmFtZSBmcm9tIGNvbnN0cnVjdG9yIG5hbWVcbi8vIDMuIE5lc3RlZDogcGFyZW50VHlwZS5kZWZpbmUoVHlwZU5hbWUsIGNvbnN0cnVjdEhhbmRsZXIsIGNvbmZpZz8pXG4vLyBVc2luZyBpbnRlcmZhY2Ugd2l0aCBvdmVybG9hZHMgdG8gcHJvcGVybHkgaGFuZGxlIGV4cG9zZUluc3RhbmNlTWV0aG9kcyBvcHRpb25cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUFic29yYmVyIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdC8vIE92ZXJsb2FkOiB3aXRoIGV4cG9zZUluc3RhbmNlTWV0aG9kczogZmFsc2UgLSBoaWRlIGluc3RhbmNlIG1ldGhvZHNcblx0PFQgZXh0ZW5kcyBvYmplY3Q+KFxuXHRcdHRoaXM6IHVua25vd24sXG5cdFx0VHlwZU9yVHlwZU5hbWU6IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24sXG5cdFx0Y29uc3RydWN0SGFuZGxlck9yQ29uZmlnOiBJREVGPFQ+IHwgb2JqZWN0IHwgYm9vbGVhbiB8IENhbGxhYmxlRnVuY3Rpb24sXG5cdFx0Y29uZmlnT3JVbmRlZmluZWQ6IEhpZGVJbnN0YW5jZU1ldGhvZHNPcHRpb25zXG5cdCk6IElEZWZpbml0b3JJbnN0YW5jZTxULCBIaWRlSW5zdGFuY2VNZXRob2RzT3B0aW9ucz47XG5cdFxuXHQvLyBPdmVybG9hZDogd2l0aG91dCBjb25maWcgb3Igd2l0aCBleHBvc2VJbnN0YW5jZU1ldGhvZHMgbm90IGZhbHNlIC0gc2hvdyBhbGxcblx0PFQgZXh0ZW5kcyBvYmplY3Q+KFxuXHRcdHRoaXM6IHVua25vd24sXG5cdFx0VHlwZU9yVHlwZU5hbWU6IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24sXG5cdFx0Y29uc3RydWN0SGFuZGxlck9yQ29uZmlnPzogSURFRjxUPiB8IG9iamVjdCB8IGJvb2xlYW4gfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbmZpZ09yVW5kZWZpbmVkPzogY29uc3RydWN0b3JPcHRpb25zIHwgQ2FsbGFibGVGdW5jdGlvbiB8IGJvb2xlYW5cblx0KTogSURlZmluaXRvckluc3RhbmNlPFQsIGNvbnN0cnVjdG9yT3B0aW9ucz47XG59XG5cbi8vIFR5cGVzQ29sbGVjdGlvbiBpbnRlcmZhY2UgZm9yIGNyZWF0ZVR5cGVzQ29sbGVjdGlvblxuLy8gVGhpcyByZXByZXNlbnRzIHRoZSBhY3R1YWwgcmV0dXJuIHR5cGUgb2YgY3JlYXRlVHlwZXNDb2xsZWN0aW9uXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVzQ29sbGVjdGlvbiBleHRlbmRzIEhvb2thYmxlIHtcblx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdGxvb2t1cDogVHlwZUxvb2t1cDtcblx0c3VidHlwZXM6IFN1YnR5cGVzTWFwO1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vLyBTaGFyZWQgaW50ZXJmYWNlIGZvciBvYmplY3RzIHRoYXQgc3VwcG9ydCBob29rcyAoVHlwZURlZiBhbmQgQ29sbGVjdGlvbkRlZilcbmV4cG9ydCBpbnRlcmZhY2UgSG9va2FibGUge1xuXHRob29rczogUmVjb3JkPHN0cmluZywgU2V0PGhvb2s+Pjtcblx0aW52b2tlSG9vayhob29rVHlwZTogaG9va3NUeXBlcywgb3B0czogaG9va3NPcHRzKTogU2V0PHVua25vd24+O1xuXHRyZWdpc3Rlckhvb2soaG9va1R5cGU6IGhvb2tzVHlwZXMsIGNiOiBob29rKTogdm9pZDtcblx0cmVnaXN0ZXJGbG93Q2hlY2tlcihjYjogKG9wdHM6IG9iamVjdCkgPT4gdW5rbm93bik6IHZvaWQ7XG59XG5cbi8vIGNyZWF0ZVR5cGVzQ29sbGVjdGlvbiBmdW5jdGlvbiB0eXBlXG5leHBvcnQgdHlwZSBDcmVhdGVUeXBlc0NvbGxlY3Rpb25GdW5jdGlvbiA9IChjb25maWc/OiBjb25zdHJ1Y3Rvck9wdGlvbnMpID0+IFR5cGVzQ29sbGVjdGlvbjtcblxuLy8gVHlwZSBjbGFzcyAtIGJhc2UgdHlwZSBjb25zdHJ1Y3RvclxuZXhwb3J0IHR5cGUgVHlwZUNsYXNzID0gSURlZmluaXRvckluc3RhbmNlPG9iamVjdD47XG5cbi8vIE1uZW1vbmljYSBjb25zdHJ1Y3RvciDigJQgdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGNvbnN0cnVjdEhhbmRsZXIoKVxuLy8gSGFzIFN5bWJvbENvbnN0cnVjdG9yTmFtZSBhdHRhY2hlZCBhbmQgaXMgYm90aCBuZXdhYmxlIGFuZCBjYWxsYWJsZVxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FDb25zdHJ1Y3RvciBleHRlbmRzIE5ld2FibGVGdW5jdGlvbiB7XG5cdG5ldyAoLi4uYXJnczogdW5rbm93bltdKTogb2JqZWN0O1xuXHQodGhpczogb2JqZWN0LCAuLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duO1xuXHRba2V5OiBzeW1ib2xdOiB1bmtub3duO1xufVxuXG4vLyBUeXBlIGRlc2NyaXB0b3IgaW5zdGFuY2Ug4oCUIGludGVybmFsIHNoYXBlIG9mIFR5cGVEZXNjcmlwdG9yIG9iamVjdHNcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURlc2NyaXB0b3JEZWZpbmUgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KFxuXHRcdFR5cGVPclR5cGVOYW1lOiBzdHJpbmcgfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbnN0cnVjdEhhbmRsZXJPckNvbmZpZz86IENhbGxhYmxlRnVuY3Rpb24gfCBvYmplY3QsXG5cdFx0Y29uZmlnPzogb2JqZWN0XG5cdCk6IFR5cGVDbGFzcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRGVzY3JpcHRvckxvb2t1cCBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQoVHlwZU5lc3RlZFBhdGg6IHN0cmluZyk6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgVHlwZURlc2NyaXB0b3JJbnN0YW5jZSA9IHtcblx0ZGVmaW5lOiBUeXBlRGVzY3JpcHRvckRlZmluZTtcblx0bG9va3VwOiBUeXBlRGVzY3JpcHRvckxvb2t1cDtcblx0c3VidHlwZXM6IE1hcDxzdHJpbmcsIG9iamVjdD47XG5cdFR5cGVOYW1lOiBzdHJpbmc7XG59O1xuXG4vLyBDb25zdHJ1Y3RvciB0eXBlIGZvciBkZWNvcmF0ZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gVDtcblxuLy8gRGVjb3JhdGVkIGNsYXNzIHR5cGUgLSBpbmNsdWRlcyBjYWxsIHNpZ25hdHVyZSBmb3IgZGVjb3JhdG9yIHBhdHRlcm5cbmV4cG9ydCB0eXBlIERlY29yYXRlZENsYXNzPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+PiA9XG5cdFQgJlxuXHQoPFUgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+Pih0YXJnZXQ6IFUpID0+IERlY29yYXRlZENsYXNzPFU+KSAmIHtcblx0XHRkZWZpbmU6IFR5cGVBYnNvcmJlcjtcblx0XHRyZWdpc3Rlckhvb2soaG9va1R5cGU6IGhvb2tzVHlwZXMsIGNiOiBob29rKTogdm9pZDtcblx0XHRsb29rdXA6IFR5cGVMb29rdXA7XG5cdFx0VHlwZU5hbWU6IHN0cmluZztcblx0fTtcblxuLy8gQXBwbHkvQ2FsbC9CaW5kIGZ1bmN0aW9uIHR5cGVzXG5leHBvcnQgdHlwZSBBcHBseUZ1bmN0aW9uID0gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q29uc3RydWN0b3I6IElERUY8VD4sXG5cdGFyZ3M/OiB1bmtub3duW11cbikgPT4gUztcblxuZXhwb3J0IHR5cGUgQ2FsbEZ1bmN0aW9uID0gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q29uc3RydWN0b3I6IElERUY8VD4sXG5cdC4uLmFyZ3M6IHVua25vd25bXVxuKSA9PiBTO1xuXG5leHBvcnQgdHlwZSBCaW5kRnVuY3Rpb24gPSA8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdCwgUyBleHRlbmRzIFByb3RvPEUsIFQ+Pihcblx0ZW50aXR5OiBFLFxuXHRDb25zdHJ1Y3RvcjogSURFRjxUPlxuKSA9PiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBTO1xuXG4vLyBVdGlscyBvYmplY3QgdHlwZVxuZXhwb3J0IGludGVyZmFjZSBVdGlsc0NvbGxlY3Rpb24ge1xuXHRleHRyYWN0OiAoaW5zdGFuY2U6IG9iamVjdCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdHBpY2s6IChpbnN0YW5jZTogb2JqZWN0LCAuLi5hcmdzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRjb2xsZWN0Q29uc3RydWN0b3JzOiAoaW5zdGFuY2U6IG9iamVjdCwgZmxhdD86IGJvb2xlYW4pID0+IChDYWxsYWJsZUZ1bmN0aW9uIHwgc3RyaW5nKVtdO1xuXHRtZXJnZTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcblx0cGFyc2U6ICh2YWx1ZTogdW5rbm93bikgPT4gb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRwYXJlbnQ6IChpbnN0YW5jZTogb2JqZWN0LCBzdHJpY3Q/OiBib29sZWFuKSA9PiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdHRvSlNPTjogKGluc3RhbmNlOiBvYmplY3QpID0+IHN0cmluZztcblx0W2tleTogc3RyaW5nXTogQ2FsbGFibGVGdW5jdGlvbjtcbn1cblxuLy8gTWFpbiBtbmVtb25pY2EgbW9kdWxlIGludGVyZmFjZSAtIHJlcHJlc2VudHMgdGhlIGV4cG9ydGVkIG1vZHVsZSBvYmplY3RcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhTW9kdWxlIHtcblx0Ly8gQ29yZSBmdW5jdGlvbnNcblx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdGxvb2t1cDogKFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmcpID0+IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcblx0YXBwbHk6IEFwcGx5RnVuY3Rpb247XG5cdGNhbGw6IENhbGxGdW5jdGlvbjtcblx0YmluZDogQmluZEZ1bmN0aW9uO1xuXHRkZWNvcmF0ZTogPFUgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+Pih0YXJnZXQ/OiBvYmplY3QsIGNvbmZpZz86IG9iamVjdCkgPT4gRGVjb3JhdGVkQ2xhc3M8VT47XG5cdHJlZ2lzdGVySG9vazogPFQgZXh0ZW5kcyBvYmplY3Q+KENvbnN0cnVjdG9yOiBJREVGPFQ+LCBob29rVHlwZTogaG9va3NUeXBlcywgY2I6IGhvb2spID0+IHZvaWQ7XG5cblx0Ly8gRGVzY3JpcHRvcnNcblx0ZGVmYXVsdFR5cGVzOiBUeXBlc0NvbGxlY3Rpb247XG5cblx0Ly8gRXJyb3JzXG5cdEJBU0VfTU5FTU9OSUNBX0VSUk9SOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19UWVBFX0RFRklOSVRJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX0lOU1RBTkNFX0lOVk9DQVRJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX01PRElGSUNBVElPTl9QQVRURVJOOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRBTFJFQURZX0RFQ0xBUkVEOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19BUkdVTUVOVFNfVVNFRDogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0V1JPTkdfSE9PS19UWVBFOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRNSVNTSU5HX0NBTExCQUNLX0FSR1VNRU5UOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHQvLyBGTE9XX0NIRUNLRVJfUkVERUZJTklUSU9OOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRNSVNTSU5HX0hPT0tfQ0FMTEJBQ0s6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFRZUEVOQU1FX01VU1RfQkVfQV9TVFJJTkc6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdEhBTkRMRVJfTVVTVF9CRV9BX0ZVTkNUSU9OOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRPUFRJT05TX0VSUk9SOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19TVEFDS19DTEVBTkVSOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXG5cdC8vIENvbnN0YW50c1xuXHRNTkVNT05JQ0E6IHN0cmluZztcblx0TU5FTU9TWU5FOiBzdHJpbmc7XG5cdFVSQU5VUzogc3RyaW5nO1xuXHRTeW1ib2xQYXJlbnRUeXBlOiBzeW1ib2w7XG5cdFN5bWJvbENvbnN0cnVjdG9yTmFtZTogc3ltYm9sO1xuXHRTeW1ib2xEZWZhdWx0VHlwZXNDb2xsZWN0aW9uOiBzeW1ib2w7XG5cdFN5bWJvbENvbmZpZzogc3ltYm9sO1xuXHRTeW1ib2xHYWlhOiBzeW1ib2w7XG5cdFRZUEVfVElUTEVfUFJFRklYOiBzdHJpbmc7XG5cdEVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZXM7XG5cblx0Ly8gVXRpbHNcblx0dXRpbHM6IFV0aWxzQ29sbGVjdGlvbjtcblx0Z2V0UHJvcHM6IChpbnN0YW5jZTogb2JqZWN0KSA9PiBQcm9wc1R5cGUgfCB1bmRlZmluZWQ7XG5cdHNldFByb3BzOiAoaW5zdGFuY2U6IG9iamVjdCwgdmFsdWVzOiBvYmplY3QpID0+IHN0cmluZ1tdIHwgZmFsc2U7XG5cdGZpbmRTdWJUeXBlRnJvbVBhcmVudDogKGluc3RhbmNlOiBvYmplY3QgfCB1bmRlZmluZWQsIHN1YlR5cGU6IHN0cmluZykgPT4gb2JqZWN0IHwgbnVsbDtcblx0aXNDbGFzczogKGZuOiBDYWxsYWJsZUZ1bmN0aW9uKSA9PiBib29sZWFuO1xuXG5cdC8vIGNyZWF0ZVR5cGVzQ29sbGVjdGlvblxuXHRjcmVhdGVUeXBlc0NvbGxlY3Rpb246IENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uO1xuXG5cdC8vIEFsbG93IGFkZGl0aW9uYWwgcHJvcGVydGllc1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5cbmltcG9ydCB0eXBlIHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnLi4vaW5kZXgnO1xuXG4vLyBQcm9wcyB0eXBlIGZvciBnZXRQcm9wcy9zZXRQcm9wc1xuZXhwb3J0IHR5cGUgUHJvcHNUeXBlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8vIENvcmUgdHlwZSBkZWZpbml0aW9ucyBmb3IgbW5lbW9uaWNhXG5cbi8vIEJhc2UgY29uc3RydWN0b3IgZnVuY3Rpb24gdHlwZSAtIGNhbiBiZSBhIGNsYXNzIGNvbnN0cnVjdG9yIG9yIGEgZnVuY3Rpb24uXG4vLyBBcmdzIGRlZmF1bHRzIHRvIHVua25vd25bXSBzbyBJREVGPFQ+IGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlO1xuLy8gc3VwcGx5IEFyZ3MgdG8gZ2V0IHR5cGVkIGNvbnN0cnVjdG9yIHBhcmFtczogSURFRjxNeVR5cGUsIFtzdHJpbmcsIG51bWJlcl0+XG5leHBvcnQgdHlwZSBJREVGPFQsIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10+ID0geyBuZXcoKTogVCB9IHwgeyAodGhpczogVCwgLi4uYXJnczogQXJncyk6IHZvaWQgfTtcblxuLy8gRXJyb3IgbWVzc2FnZSB0eXBlcyAtIGFsbCBlcnJvciBtZXNzYWdlcyBhcmUgc3RyaW5nc1xuZXhwb3J0IHR5cGUgRXJyb3JNZXNzYWdlS2V5ID1cblx0fCAnQkFTRV9FUlJPUl9NRVNTQUdFJ1xuXHR8ICdIQU5ETEVSX01VU1RfQkVfQV9GVU5DVElPTidcblx0fCAnV1JPTkdfVFlQRV9ERUZJTklUSU9OJ1xuXHR8ICdXUk9OR19JTlNUQU5DRV9JTlZPQ0FUSU9OJ1xuXHR8ICdXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTidcblx0fCAnQUxSRUFEWV9ERUNMQVJFRCdcblx0fCAnV1JPTkdfQVJHVU1FTlRTX1VTRUQnXG5cdHwgJ1dST05HX0hPT0tfVFlQRSdcblx0fCAnTUlTU0lOR19IT09LX0NBTExCQUNLJ1xuXHR8ICdNSVNTSU5HX0NBTExCQUNLX0FSR1VNRU5UJ1xuXHR8ICdPUFRJT05TX0VSUk9SJ1xuXHR8ICdXUk9OR19TVEFDS19DTEVBTkVSJztcblx0Ly8gfCAnVFlQRU5BTUVfTVVTVF9CRV9BX1NUUklORydcblx0Ly8gfCAnRkxPV19DSEVDS0VSX1JFREVGSU5JVElPTidcblxuLy8gRXJyb3IgbWVzc2FnZXMgb2JqZWN0IHR5cGVcbmV4cG9ydCB0eXBlIEVycm9yTWVzc2FnZXMgPSBSZWNvcmQ8RXJyb3JNZXNzYWdlS2V5LCBzdHJpbmc+O1xuXG4vLyBIb29rIGNhbGxiYWNrIOKAlCBwYXNzZWQgdG8gcmVnaXN0ZXJIb29rIGFuZCBpbnZva2VkIGJ5IGludm9rZUhvb2tcbmV4cG9ydCBpbnRlcmZhY2UgaG9vayBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQob3B0czogaG9va3NPcHRzKTogdW5rbm93bjtcbn1cblxuLy8gRXJyb3IgY29uc3RydWN0b3IgZnJvbSBjb25zdHJ1Y3RFcnJvciAtIGNvbnN0cnVjdGFibGUgZnVuY3Rpb24gd2l0aCBwcm90b3R5cGVcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3RvciB7XG5cdG5ldyhhZGRpdGlvbj86IHN0cmluZywgc3RhY2s/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IEVycm9yO1xuXHQobmFtZTogc3RyaW5nKTogRXJyb3I7XG5cdHByb3RvdHlwZToge1xuXHRcdGNvbnN0cnVjdG9yOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHR9O1xufVxuXG4vLyBFcnJvcnMgdHlwZXMgbWFwIC0gaW5kZXhhYmxlIHJlY29yZCBvZiBlcnJvciBjb25zdHJ1Y3RvcnNcbmV4cG9ydCB0eXBlIEVycm9yc1R5cGVzTWFwID0gUmVjb3JkPHN0cmluZywgTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcj47XG5cbi8vIE1uZW1vbmljYSBlcnJvciBpbnRlcmZhY2UgZm9yIGV4dGVuZGVkIEVycm9yIG9iamVjdHNcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGV4Y2VwdGlvblJlYXNvbj86IEVycm9yO1xuXHRyZWFzb25zPzogRXJyb3JbXTtcblx0c3VycGx1cz86IEVycm9yW107XG59XG5cbi8qKlxuICogSW50ZXJuYWwgVHlwZSBDb25zdHJ1Y3Rvci5cbiAqIFwiVHlwZVwiIGhlcmUgaXMgdXNlZCBpbiB0aGUgQ29tcHV0ZXIgU2NpZW5jZSBzZW5zZSDigJQgYW4gaW50ZXJmYWNlL2NvbnRyYWN0XG4gKiBkZXNjcmliaW5nIHdoYXQgYSBjb25zdHJ1Y3RvciBtdXN0IHNhdGlzZnkgKGJvdGggYG5ld2AtYWJsZSBhbmQgY2FsbGFibGUpLlxuICogVEMgPSBUeXBlIENvbnN0cnVjdG9yOyBcIkludGVybmFsXCIgbWVhbnMgdGhpcyBpcyB0aGUgbGlicmFyeSdzIG93biBjb25zdHJ1Y3RvclxuICogc2hhcGUsIGRpc3RpbmN0IGZyb20gdXNlci1mYWNpbmcgVHlwZUNvbnN0cnVjdG9yIGJlbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9JbnRlcm5hbF9UQ188Q29uc3RydWN0b3JJbnN0YW5jZSBleHRlbmRzIG9iamVjdD4ge1xuXHRuZXcoLi4uYXJnczogdW5rbm93bltdKTogQ29uc3RydWN0b3JJbnN0YW5jZTtcblx0KHRoaXM6IENvbnN0cnVjdG9ySW5zdGFuY2UsIC4uLmFyZ3M6IHVua25vd25bXSk6IENvbnN0cnVjdG9ySW5zdGFuY2U7XG5cdHJlYWRvbmx5IHByb3RvdHlwZTogQ29uc3RydWN0b3JJbnN0YW5jZSAmIHtcblx0XHRyZWFkb25seSBjb25zdHJ1Y3RvcjogX0ludGVybmFsX1RDXzxDb25zdHJ1Y3Rvckluc3RhbmNlPlxuXHR9O1xufVxuXG4vKipcbiAqIFB1YmxpYyBhbGlhcyBmb3IgX0ludGVybmFsX1RDXyDigJQgdGhlIHNoYXBlIG9mIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyByZXR1cm5lZCBieSBgZGVmaW5lKClgLlxuICogQXVnbWVudGVkIGJ5IHRhY3RpY2EtZ2VuZXJhdGVkIFR5cGVSZWdpc3RyeSB0byBiZWNvbWUgdXNlci1zcGVjaWZpYyB0eXBlcy5cbiAqIEtlcHQgYXMgYSBuYW1lZCBhbGlhcyAocmF0aGVyIHRoYW4gaW5saW5pbmcgX0ludGVybmFsX1RDXykgc28gdGFjdGljYSBjYW4gcmVmZXJlbmNlIGl0XG4gKiBjbGVhbmx5IGluIGdlbmVyYXRlZCBkZWNsYXJhdGlvbiBmaWxlcy5cbiAqL1xuZXhwb3J0IHR5cGUgVHlwZUNvbnN0cnVjdG9yPENvbnN0cnVjdG9ySW5zdGFuY2UgZXh0ZW5kcyBvYmplY3Q+ID0gX0ludGVybmFsX1RDXzxDb25zdHJ1Y3Rvckluc3RhbmNlPjtcblxuLyoqXG4gKiBNaW5pbWFsIGNvbnN0cnVjdG9yIHNoYXBlIHVzZWQgZm9yIHRoZSBUeXBlUmVnaXN0cnkgaW5kZXggc2lnbmF0dXJlLlxuICogSXQgYWNjZXB0cyBhbnkgbW5lbW9uaWNhLWNvbXBhdGlibGUgY29uc3RydWN0b3IsIGJ1dCBkZWxpYmVyYXRlbHkgcmV0dXJuc1xuICogYG9iamVjdGAgc28gdW5hdWdtZW50ZWQgcmVnaXN0cnkgbG9va3VwcyBhcmUgbm90IHVzZWZ1bCB3aXRob3V0IGFuIGV4cGxpY2l0XG4gKiBwZXIta2V5IGNvbnN0cnVjdG9yIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUNvbnN0cnVjdG9yQmFzZSB7XG5cdG5ldyAoLi4uYXJnczogdW5rbm93bltdKTogb2JqZWN0O1xufVxuXG4vKipcbiAqIEluc3RhbmNlIHR5cGUgcHJvZHVjZWQgYnkgYSBUeXBlUmVnaXN0cnkgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbmNlT2ZUeXBlUmVnaXN0cnk8SyBleHRlbmRzIGtleW9mIFR5cGVSZWdpc3RyeT4gPVxuXHRUeXBlUmVnaXN0cnlbS10gZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gaW5mZXIgUiA/IFIgOiBuZXZlcjtcblxuXG4vKipcbiAqIEV4dHJhY3Qgb25seSB0aGUgbGl0ZXJhbCBzdHJpbmcga2V5cyBvZiBhIHR5cGUsIGZpbHRlcmluZyBvdXQgZ2VuZXJpY1xuICogaW5kZXggc2lnbmF0dXJlcy4gVGhpcyBsZXRzIHVzIGl0ZXJhdGUgb3ZlciBhdWdtZW50ZWQgVHlwZVJlZ2lzdHJ5IGtleXNcbiAqIHdpdGhvdXQgcGlja2luZyB1cCB0aGUgYFtrZXk6IHN0cmluZ11gIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgTGl0ZXJhbEtleXNPZjxUPiA9IGtleW9mIFQgZXh0ZW5kcyBpbmZlciBLXG5cdD8gSyBleHRlbmRzIHN0cmluZ1xuXHRcdD8gc3RyaW5nIGV4dGVuZHMgSyA/IG5ldmVyIDogS1xuXHRcdDogbmV2ZXJcblx0OiBuZXZlcjtcblxuLyoqXG4gKiBHaXZlbiBhIGRvdHRlZCBUeXBlUmVnaXN0cnkga2V5LCBleHRyYWN0IHRoZSBwYXJlbnQgcGF0aC5cbiAqIGBQYXJlbnRQYXRoPCdBLkIuQyc+YCDihpIgYCdBLkInYC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFyZW50UGF0aDxLIGV4dGVuZHMgc3RyaW5nPiA9XG5cdEsgZXh0ZW5kcyBgJHtpbmZlciBQfS4ke3N0cmluZ31gID8gUCA6IG5ldmVyO1xuXG4vKipcbiAqIEdpdmVuIGEgZG90dGVkIFR5cGVSZWdpc3RyeSBrZXksIHJldHVybiB0aGUgdW5pb24gb2YgYWxsIGFuY2VzdG9yIHByZWZpeGVzLlxuICogYEFsbFBhcmVudFByZWZpeGVzPCdBLkIuQyc+YCDihpIgYCdBJyB8ICdBLkInYC5cbiAqL1xuZXhwb3J0IHR5cGUgQWxsUGFyZW50UHJlZml4ZXM8SyBleHRlbmRzIHN0cmluZz4gPVxuXHRLIGV4dGVuZHMgYCR7aW5mZXIgUH0uJHtzdHJpbmd9YCA/IFAgfCBBbGxQYXJlbnRQcmVmaXhlczxQPiA6IG5ldmVyO1xuXG4vKipcbiAqIEdpdmVuIGEgcGFyZW50IHBhdGgsIHJldHVybiB0aGUgdW5pb24gb2YgVHlwZVJlZ2lzdHJ5IGtleXMgdGhhdCBhcmUgZGlyZWN0XG4gKiBvciBpbmRpcmVjdCBjaGlsZHJlbiBvZiB0aGF0IHBhdGguXG4gKi9cbmV4cG9ydCB0eXBlIENoaWxkS2V5c09mPFAgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuXHRbSyBpbiBrZXlvZiBUeXBlUmVnaXN0cnldOiBLIGV4dGVuZHMgYCR7UH0uJHtzdHJpbmd9YCA/IEsgOiBuZXZlclxufVtrZXlvZiBUeXBlUmVnaXN0cnldO1xuXG4vKipcbiAqIEdpdmVuIGFuIGluc3RhbmNlIHR5cGUsIGZpbmQgdGhlIFR5cGVSZWdpc3RyeSBrZXkocykgd2hvc2UgY29uc3RydWN0b3JcbiAqIHJldHVybnMgdGhhdCBpbnN0YW5jZSB0eXBlLiBUaGlzIGludmVydHMgdGhlIHJlZ2lzdHJ5IGF0IHRoZSB0eXBlIGxldmVsXG4gKiBzbyB1dGlsaXRpZXMgbGlrZSBgcGFyZW50KClgIGNhbiBkZXJpdmUgYW4gaW5zdGFuY2UncyBwYXRoIGZyb20gaXRzXG4gKiB0eXBlIGFsb25lLlxuICovXG5leHBvcnQgdHlwZSBQYXRoT2ZJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcblx0W0sgaW4gTGl0ZXJhbEtleXNPZjxUeXBlUmVnaXN0cnk+XTogVHlwZVJlZ2lzdHJ5W0tdIGV4dGVuZHMgbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IGluZmVyIFJcblx0XHQ/IFQgZXh0ZW5kcyBSID8gSyA6IG5ldmVyXG5cdFx0OiBuZXZlclxufVtMaXRlcmFsS2V5c09mPFR5cGVSZWdpc3RyeT5dO1xuXG4vKipcbiAqIEdpdmVuIGFuIGluc3RhbmNlIHR5cGUsIHJldHVybiB0aGUgdW5pb24gb2YgVHlwZVJlZ2lzdHJ5IHBhdGhzIHRoYXQgYXJlXG4gKiB2YWxpZCBwYXJlbnQgbG9va3VwcyBmb3IgdGhhdCBpbnN0YW5jZS4gUm9vdCB0eXBlcyBwcm9kdWNlIGBuZXZlcmAgYmVjYXVzZVxuICogdGhleSBoYXZlIG5vIHBhcmVudCBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBQYXJlbnRQYXRoT2ZJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcblx0W0sgaW4gTGl0ZXJhbEtleXNPZjxUeXBlUmVnaXN0cnk+XTogVHlwZVJlZ2lzdHJ5W0tdIGV4dGVuZHMgbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IGluZmVyIFJcblx0XHQ/IFQgZXh0ZW5kcyBSID8gQWxsUGFyZW50UHJlZml4ZXM8Sz4gOiBuZXZlclxuXHRcdDogbmV2ZXJcbn1bTGl0ZXJhbEtleXNPZjxUeXBlUmVnaXN0cnk+XTtcblxuLy8gSG9vayB0eXBlc1xuZXhwb3J0IHR5cGUgaG9va3NUeXBlcyA9ICdwcmVDcmVhdGlvbicgfCAncG9zdENyZWF0aW9uJyB8ICdjcmVhdGlvbkVycm9yJztcblxuLy8gSG9vayBvcHRpb25zIHBhc3NlZCB0byBob29rIGNhbGxiYWNrc1xuLy8gUCA9IHBhcmVudCAvIGV4aXN0ZW50IGluc3RhbmNlIChwcm90bylcbi8vIFQgPSBjaGlsZCAvIGluaGVyaXRlZCBpbnN0YW5jZSAodHlwZSBiZWluZyBjcmVhdGVkKVxuZXhwb3J0IHR5cGUgaG9va3NPcHRzPFAgPSBvYmplY3QsIFQgPSBQPiA9IHtcblx0VHlwZU5hbWU6IHN0cmluZztcblx0dHlwZTogVHlwZURlZjtcblx0YXJnczogdW5rbm93bltdO1xuXHRleGlzdGVudEluc3RhbmNlOiBQO1xuXHRpbmhlcml0ZWRJbnN0YW5jZT86IFQ7XG5cdGNyZWF0b3I/OiB7IHRocm93TW9kaWZpY2F0aW9uRXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB9O1xufTtcblxuLy8gQ2FsbGJhY2sgcGFzc2VkIGludG8gTW9kaWZpY2F0aW9uQ29uc3RydWN0b3IgdG8gYXR0YWNoIGludGVybmFsIHByb3BzIHRvIHRoZSBwcm90b3R5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRkUHJvcHNDYWxsYmFjayBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQocHJvdG86IG9iamVjdCk6IHZvaWQ7XG59XG5cbi8vIE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yOiB3aXJlcyBwcm90b3R5cGUgY2hhaW4gZHVyaW5nIGluc3RhbmNlIGNyZWF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChcblx0XHR0aGlzOiBvYmplY3QsXG5cdFx0TW9kaWZpY2F0b3JUeXBlOiBNbmVtb25pY2FDb25zdHJ1Y3Rvcixcblx0XHRNb2RpZmljYXRvclR5cGVQcm90b3R5cGU6IG9iamVjdCxcblx0XHRfYWRkUHJvcHM6IEFkZFByb3BzQ2FsbGJhY2tcblx0KTogTW5lbW9uaWNhQ29uc3RydWN0b3I7XG59XG5cbi8vIEZhY3RvcnkgdGhhdCByZXR1cm5zIGEgTW9kaWZpY2F0aW9uQ29uc3RydWN0b3IgKHVzZWQgaW4gY29uc3RydWN0b3JPcHRpb25zKVxuZXhwb3J0IGludGVyZmFjZSBNb2RpZmljYXRpb25Db25zdHJ1Y3RvckZhY3RvcnkgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KCk6IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yO1xufVxuXG4vLyBGYWN0b3J5IHRoYXQgcmV0dXJucyBhIE1uZW1vbmljYUNvbnN0cnVjdG9yIChzdG9yZWQgaW4gVHlwZURlZi5jb25zdHJ1Y3RIYW5kbGVyKVxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FDb25zdHJ1Y3RvckZhY3RvcnkgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KCk6IE1uZW1vbmljYUNvbnN0cnVjdG9yO1xufVxuXG4vLyBNYXJrcyB0aGUgdG9wIG9mIGEgY2FwdHVyZWQgc3RhY2sgdHJhY2UgKHBhc3NlZCB0byBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSBhcyBjb25zdHJ1Y3Rvck9wdClcbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tCb3VuZGFyeSBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge31cblxuLy8gQSB3cmFwcGFibGUgdXRpbGl0eSBtZXRob2Qg4oCUIGFueSBjYWxsYWJsZSB0aGF0IHdyYXBUaGlzKCkgY2FuIHByb3h5XG5leHBvcnQgaW50ZXJmYWNlIFdyYXBwYWJsZU1ldGhvZCBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge31cblxuLy8gQ29uc3RydWN0b3Igb3B0aW9ucyBmb3IgZGVmaW5lXG5leHBvcnQgdHlwZSBjb25zdHJ1Y3Rvck9wdGlvbnMgPSB7XG5cdC8vIGV4cGxpY2l0IGRlY2xhcmF0aW9uIHdlIHdpc2ggdXNlXG5cdC8vIGFuIG9sZCBzdHlsZSBiYXNlZCBjb25zdHJ1Y3RvcnNcblx0TW9kaWZpY2F0aW9uQ29uc3RydWN0b3I/OiBNb2RpZmljYXRpb25Db25zdHJ1Y3RvckZhY3RvcnksXG5cdC8vIHNoYWxsIG9yIG5vdCB3ZSB1c2Ugc3RyaWN0IGNoZWNraW5nXG5cdC8vIGZvciBjcmVhdGlvbiBzdWItaW5zdGFuY2VzIE9ubHkgZnJvbSBjdXJyZW50IHR5cGVcblx0Ly8gb3Igd2UgbWlnaHQgdXNlIHVwLW5lc3RlZCBzdWItaW5zdGFuY2VzIGZyb20gY2hhaW5cblx0c3RyaWN0Q2hhaW4/OiBib29sZWFuLFxuXHQvLyBzaG91bGQgd2UgdXNlIGZvcmNlZCBlcnJvcnMgY2hlY2tpbmdcblx0Ly8gdG8gbWFrZSBhbGwgaW5oZXJpdGVkIHR5cGVzIGVycm9yZWRcblx0Ly8gaWYgdGhlcmUgaXMgYW4gZXJyb3Igc29tZXdoZXJlIGluIGNoYWluXG5cdGJsb2NrRXJyb3JzPzogYm9vbGVhbixcblx0Ly8gaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNvbGxlY3Qgc3RhY2tcblx0Ly8gYXMgYSBfX3N0YWNrX18gcHJvdG90eXBlIHByb3BlcnR5XG5cdC8vIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBpbnN0YW5jZSBjcmVhdGlvblxuXHRzdWJtaXRTdGFjaz86IGJvb2xlYW4sXG5cdC8vIGF3YWl0IG5ldyBDb25zdHJ1Y3RvcigpXG5cdC8vIG11c3QgcmV0dXJuIHZhbHVlXG5cdGF3YWl0UmV0dXJuPzogYm9vbGVhbixcblx0Ly8gRm9yY2UgY2xhc3MgbW9kZSAoYXV0by1kZXRlY3RlZCBieSBkZWZhdWx0KVxuXHRhc0NsYXNzPzogYm9vbGVhbixcbn07XG5cbi8vIFN1YnR5cGVzIG1hcCAtIHJlcHJlc2VudHMgdGhlIHN1YnR5cGVzIHByb3BlcnR5XG5leHBvcnQgdHlwZSBTdWJ0eXBlc01hcCA9IE1hcDxzdHJpbmcsIFR5cGVDbGFzcz47XG5cbi8vIFR5cGUgZGVmaW5pdGlvbiBvYmplY3QgKGludGVybmFsIHByb3BlcnRpZXMpXG5leHBvcnQgdHlwZSBUeXBlRGVmID0ge1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRwcm90bzogb2JqZWN0O1xuXHRpc1N1YlR5cGU6IGJvb2xlYW47XG5cdHN1YnR5cGVzOiBTdWJ0eXBlc01hcDtcblx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkRlZjtcblx0Y29uZmlnOiBjb25zdHJ1Y3Rvck9wdGlvbnM7XG5cdHBhcmVudFR5cGU/OiBUeXBlRGVmO1xuXHRjb25zdHJ1Y3RIYW5kbGVyOiBNbmVtb25pY2FDb25zdHJ1Y3RvckZhY3Rvcnk7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdGhvb2tzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8aG9vaz4+O1xuXHRpbnZva2VIb29rOiAoaG9va1R5cGU6IGhvb2tzVHlwZXMsIG9wdHM6IGhvb2tzT3B0cykgPT4gU2V0PHVua25vd24+O1xuXHRwcm90b3R5cGU6IHVua25vd247XG5cdHN0YWNrPzogc3RyaW5nO1xuXHRbU3ltYm9sLmhhc0luc3RhbmNlXTogKGluc3RhbmNlOiBvYmplY3QpID0+IGJvb2xlYW47XG59O1xuXG4vLyBDb2xsZWN0aW9uIGRlZmluaXRpb25cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25EZWYgPSBIb29rYWJsZSAmIHtcblx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdGxvb2t1cDogVHlwZUxvb2t1cDtcblx0c3VidHlwZXM6IFN1YnR5cGVzTWFwO1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuLy8gVHlwZSBsb29rdXAgZnVuY3Rpb24gdHlwZTogbWF5IGhhdmUgYXVnbWVudGF0aW9uIGJ5IFRhY3RpY2EgcmUtZGVmaW5pdGlvblxuZXhwb3J0IGludGVyZmFjZSBUeXBlTG9va3VwIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdCh0aGlzOiBNYXA8c3RyaW5nLCB1bmtub3duPiwgVHlwZU5lc3RlZFBhdGg6IHN0cmluZyk6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcbn1cblxuLy8gU3BlY2lmaWNhdGlvbiBmb3IgY2hhaW5lZCBzdWJ0eXBlIGNyZWF0aW9uIHdpdGggLnRoZW4oKVxuZXhwb3J0IGludGVyZmFjZSBUaGVuU3BlYyB7XG5cdHN1YnR5cGU6IG9iamVjdDtcblx0YXJnczogdW5rbm93bltdO1xuXHRuYW1lPzogc3RyaW5nO1xufVxuXG4vLyBDb250ZXh0IG9iamVjdCBwYXNzZWQgdGhyb3VnaCB0aGUgSW5zdGFuY2VDcmVhdG9yIHBpcGVsaW5lXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlQ3JlYXRvckNvbnRleHQge1xuXHR0eXBlOiBUeXBlRGVmO1xuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRleGlzdGVudEluc3RhbmNlOiBvYmplY3Q7XG5cdGFyZ3M6IHVua25vd25bXTtcblx0TW9kaWZpY2F0aW9uQ29uc3RydWN0b3I6IE1vZGlmaWNhdGlvbkNvbnN0cnVjdG9yO1xuXHRNb2RpZmljYXRvclR5cGU6IE1uZW1vbmljYUNvbnN0cnVjdG9yO1xuXHRJbnN0YW5jZU1vZGlmaWNhdG9yOiBNbmVtb25pY2FDb25zdHJ1Y3Rvcjtcblx0aW5oZXJpdGVkSW5zdGFuY2U6IG9iamVjdCB8IFByb21pc2U8b2JqZWN0Pjtcblx0Y29uZmlnOiBjb25zdHJ1Y3Rvck9wdGlvbnM7XG5cdHByb3RvOiBvYmplY3Q7XG5cdF9fcHJvdG9fcHJvdG9fXz86IG9iamVjdDtcblx0c3RhY2s/OiBzdHJpbmdbXTtcblxuXHRnZXRFeGlzdGVudEFzeW5jU3RhY2soZXhpc3RlbnRJbnN0YW5jZTogb2JqZWN0KTogdW5rbm93bjtcblx0cG9zdFByb2Nlc3NpbmcoY29udGludWF0aW9uT2Y/OiBUeXBlRGVmKTogdm9pZDtcblx0bWFrZUF3YWl0ZXIodHlwZTogVHlwZURlZiwgdGhlbj86IFRoZW5TcGVjKTogUHJvbWlzZTxvYmplY3Q+O1xuXHRhZGRUaGVuKHRoZW46IFRoZW5TcGVjKTogdm9pZDtcblx0aW52b2tlUHJlSG9va3MoKTogdm9pZDtcblx0aW52b2tlUG9zdEhvb2tzKCk6IHsgdHlwZTogU2V0PHVua25vd24+OyBjb2xsZWN0aW9uOiBTZXQ8dW5rbm93bj4gfTtcblx0dGhyb3dNb2RpZmljYXRpb25FcnJvcihlcnJvcjogTW5lbW9uaWNhRXJyb3IpOiB2b2lkO1xufVxuXG4vKipcbiAqIFByb3RvIG1lcmdlIHR5cGUgLSBjb21iaW5lcyBwYXJlbnQgYW5kIGNoaWxkIHR5cGVzIHdpdGhvdXQgcHJvcGVydHkgY29uZmxpY3RzLlxuICpcbiAqIFdoZW4gYSBzdWJ0eXBlIGlzIGRlZmluZWQgZnJvbSBhIHBhcmVudCBpbnN0YW5jZSwgd2Ugd2FudCB0aGUgY2hpbGQgcHJvcGVydGllc1xuICogdG8gdGFrZSBwcmVjZWRlbmNlLiBgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPmAgcmVtb3ZlcyBvdmVybGFwcGluZyBrZXlzIGZyb20gUCxcbiAqIHNvIGBQaWNrPFAsIC4uLj5gIG9ubHkgYnJpbmdzIGluIHBhcmVudCBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QgY2xhc2ggd2l0aCBjaGlsZC5cbiAqXG4gKiBSZXN1bHQ6IGNoaWxkIFQgZ2V0cyBhbGwgaXRzIG93biBwcm9wcywgcGx1cyBwYXJlbnQncyBub24tb3ZlcmxhcHBpbmcgcHJvcHMuXG4gKi9cbmV4cG9ydCB0eXBlIFByb3RvPFAgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3Q+ID0gVCAmIFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPj47XG5cblxuLy8gZXhwb3J0IHR5cGUgUHJvdG9GbGF0PFxuLy8gXHRQIGV4dGVuZHMgb2JqZWN0LFxuLy8gXHRUIGV4dGVuZHMgb2JqZWN0LFxuLy8gXHRGIGV4dGVuZHMgUHJvdG88UCwgVD4gPSBQcm90bzxQLCBUPlxuLy8gPiA9IHsgW2tleSBpbiBrZXlvZiBGXTogRltrZXldfSA7XG5cbmV4cG9ydCB0eXBlIFByb3RvRmxhdDxcblx0UCBleHRlbmRzIG9iamVjdCxcblx0VCBleHRlbmRzIG9iamVjdCxcblx0TCBleHRlbmRzIEV4Y2x1ZGU8a2V5b2YgUCwga2V5b2YgVD4gPSBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFQ+LFxuPiA9IHtcbiAgICBba2V5IGluIGtleW9mIFRdOiBUW2tleV07XG59ICYge1xuXHRba2V5IGluIExdOiBQW2tleV07XG59O1xuXG4vLyBNbmVtb25pY2EgaW5zdGFuY2UgbWV0aG9kIGtleXMuIFRoZXNlIGFyZSBmaWx0ZXJlZCBvdXQgb2YgZXh0cmFjdGVkL21lcmdlZFxuLy8gZmllbGQtb25seSB2aWV3cyBiZWNhdXNlIHRoZXkgYmVsb25nIHRvIHRoZSBwcm90b3R5cGUsIG5vdCB0byB0aGUgdXNlcidzXG4vLyBlbnVtZXJhYmxlIGRhdGEgcHJvcGVydGllcy5cbmV4cG9ydCB0eXBlIE1uZW1vbmljYUluc3RhbmNlTWV0aG9kS2V5cyA9XG5cdCdleHRyYWN0JyB8ICdwaWNrJyB8ICdwYXJlbnQnIHwgJ2Nsb25lJyB8ICdmb3JrJyB8ICdleGNlcHRpb24nIHwgJ3NpYmxpbmcnO1xuXG5leHBvcnQgdHlwZSBGbGF0dGVuPEY+ID0geyBba2V5IGluIGtleW9mIEZdOiBGW2tleV0gfVxuXG4vLyBFeHRyYWN0ZWQ8VD46IHRoZSBzaGFwZSByZXR1cm5lZCBieSB1dGlscy5leHRyYWN0KGluc3RhbmNlKS5cbi8vIEl0IGNvbnRhaW5zIHRoZSBlbnVtZXJhYmxlIHN0cmluZy1rZXllZCB1c2VyIHByb3BlcnRpZXMgb2YgdGhlIGluc3RhbmNlLFxuLy8gb21pdHRpbmcgTW5lbW9uaWNhSW5zdGFuY2UgbWV0aG9kcyAoZXh0cmFjdCwgcGljaywgcGFyZW50LCBjbG9uZSwgZm9yayxcbi8vIGV4Y2VwdGlvbiwgc2libGluZykuIE9wdGlvbmFsaXR5IGlzIHByZXNlcnZlZCBmcm9tIHRoZSBzb3VyY2UgdHlwZS5cbi8vIFRoZSBgJiB7fWAgdHJpY2sgZm9yY2VzIFR5cGVTY3JpcHQgdG8gZXhwYW5kIHRoZSBhbGlhcyBpbiBob3ZlciB0b29sdGlwc1xuLy8gc28gaXQgcmVuZGVycyBhcyBhIHBsYWluIG9iamVjdCBsaXRlcmFsIGluc3RlYWQgb2YgXCJFeHRyYWN0ZWQ8ey4uLn0+XCIuXG5leHBvcnQgdHlwZSBFeHRyYWN0ZWQ8VCBleHRlbmRzIG9iamVjdD4gPSB7XG5cdFtLIGluIGtleW9mIFQgYXMgSyBleHRlbmRzIHN0cmluZyA/IChLIGV4dGVuZHMgTW5lbW9uaWNhSW5zdGFuY2VNZXRob2RLZXlzID8gbmV2ZXIgOiBLKSA6IG5ldmVyXTogVFtLXTtcbn0gJiB7fTtcblxuLy8gUGFyc2VkPFQ+OiB0aGUgc2hhcGUgcmV0dXJuZWQgYnkgdXRpbHMucGFyc2UoaW5zdGFuY2UpLlxuLy8gSXQgaXMgYSBvbmUtbGV2ZWwgc25hcHNob3Qgb2YgdGhlIGluc3RhbmNlJ3MgcHJvdG90eXBlIGNoYWluLlxuLy8gYHByb3BzYCBjb250YWlucyB0aGUgaW5zdGFuY2UncyBlbnVtZXJhYmxlIHVzZXIgcHJvcGVydGllcztcbi8vIGBqb2ludGAgY29udGFpbnMgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGNvcGllZCBmcm9tIHRoZSBpbW1lZGlhdGUgcHJvdG90eXBlO1xuLy8gYHBhcmVudGAgaXMgdGhlIG5leHQgbGluayB1cCB0aGUgY2hhaW4gKGN1cnJlbnRseSBub3QgcmVjdXJzaXZlbHkgcGFyc2VkKS5cbmV4cG9ydCB0eXBlIFBhcnNlZDxUIGV4dGVuZHMgb2JqZWN0PiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wczogRXh0cmFjdGVkPFQ+O1xuXHRzZWxmOiBUO1xuXHRwcm90bzogb2JqZWN0O1xuXHRqb2ludDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdHBhcmVudDogb2JqZWN0IHwgdW5kZWZpbmVkO1xufTtcblxuLy8gU2libGluZyB0eXBlIGFjY2Vzc29yXG5leHBvcnQgaW50ZXJmYWNlIFNpYmxpbmdBY2Nlc3NvciB7XG5cdChTaWJsaW5nVHlwZU5hbWU6IHN0cmluZyk6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcblx0W2tleTogc3RyaW5nXTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xufVxuXG4vLyBNbmVtb25pY2EgaW5zdGFuY2UgbWV0aG9kcyBpbnRlcmZhY2UgKG9wdC1pbikuXG4vLyBUaGVzZSBtZXRob2RzIHVzZWQgdG8gYmUgYXV0by1pbmplY3RlZCBvbnRvIGV2ZXJ5IGluc3RhbmNlLiBUaGV5IGFyZSBub3dcbi8vIGF2YWlsYWJsZSBvbmx5IHdoZW4gYSB0eXBlIGV4cGxpY2l0bHkgYWRkcyB0aGVtIHRvIGl0cyBwcm90b3R5cGUuXG4vLyBVc2VycyBjYW4gc3RpbGwgdXNlIHRoaXMgaW50ZXJmYWNlIHRvIHR5cGUgdGhlaXIgb3duIHJvb3QtbGV2ZWwgaGVscGVycy5cbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhSW5zdGFuY2U8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4ge1xuXHRleHRyYWN0KCk6IEV4dHJhY3RlZDxUPjtcblx0cGljazxLIGV4dGVuZHMga2V5b2YgVD4oLi4ua2V5czogKEsgfCBLW10pW10pOiB7IFtQIGluIEtdOiBUW1BdIH0gJiB7fTtcblx0cGljayguLi5rZXlzOiBzdHJpbmdbXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRwYXJlbnQoKTogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRwYXJlbnQ8SyBleHRlbmRzIFBhcmVudFBhdGhPZkluc3RhbmNlPHRoaXM+ICYgc3RyaW5nPihcblx0XHRjb25zdHJ1Y3Rvckxvb2t1cFBhdGg6IEtcblx0KTogSW5zdGFuY2VPZlR5cGVSZWdpc3RyeTxLPiB8IHVuZGVmaW5lZDtcblx0cGFyZW50KGNvbnN0cnVjdG9yTG9va3VwUGF0aDogc3RyaW5nKTogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRyZWFkb25seSBjbG9uZTogdGhpcztcblx0Zm9yayguLi5mb3JrQXJnczogdW5rbm93bltdKTogdGhpcztcblx0ZXhjZXB0aW9uKGVycm9yOiBFcnJvciwgLi4uYXJnczogdW5rbm93bltdKTogRXJyb3I7XG5cdHJlYWRvbmx5IHNpYmxpbmc6IFNpYmxpbmdBY2Nlc3Nvcjtcbn1cblxuLy8gSW5zdGFuY2UgcHJvcGVydGllcyBmb3IgX19zZWxmX18gcmVmZXJlbmNlXG4vLyBUaGlzIG1lcmdlcyBpbnRlcm5hbCBwcm9wcyB3aXRoIHRoZSBpbnN0YW5jZSBtZXRob2RzXG4vLyBJbnRlcm5hbCBpbnN0YW5jZSBwcm9wZXJ0aWVzIChub24tZW51bWVyYWJsZSlcbi8vIFRoZXNlIGFyZSBhbHdheXMgcHJlc2VudCBvbiBpbnN0YW5jZXMgYnV0IGFjY2Vzc2VkIHZpYSBnZXRQcm9wcy9zZXRQcm9wc1xuZXhwb3J0IHR5cGUgSW5zdGFuY2VJbnRlcm5hbFByb3BzID0ge1xuXHRfX3Byb3RvX3Byb3RvX186IG9iamVjdDtcblx0X19hcmdzX186IHVua25vd25bXTtcblx0X19jb2xsZWN0aW9uX186IENvbGxlY3Rpb25EZWY7XG5cdF9fc3VidHlwZXNfXzogTWFwPHN0cmluZywgb2JqZWN0Pjtcblx0X190eXBlX186IFR5cGVEZWY7XG5cdF9fcGFyZW50X186IG9iamVjdDtcblx0X19zdGFja19fPzogc3RyaW5nO1xuXHRfX2NyZWF0b3JfXzogSW5zdGFuY2VDcmVhdG9yQ29udGV4dDtcblx0X190aW1lc3RhbXBfXzogbnVtYmVyO1xufTtcblxuLy8gQ29tYmluZWQgUHJvcHMgdHlwZSBmb3IgaW50ZXJuYWwgdXNlIGluc2lkZSAuL3NyY1xuZXhwb3J0IHR5cGUgUHJvcHMgPSBJbnN0YW5jZUludGVybmFsUHJvcHMgJiB7XG5cdF9fc2VsZl9fOiBJbnN0YW5jZUludGVybmFsUHJvcHM7XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG4vLyBDb21iaW5lZCBpbnN0YW5jZSB0eXBlOiBwbGFpbiBvYmplY3Qgd2l0aCB0aGUgdXNlcidzIGZpZWxkcyBvbmx5LlxuLy8gSW5zdGFuY2UgbWV0aG9kcyAoZXh0cmFjdCwgcGljaywgZm9yaywgZXRjLikgYXJlIG5vIGxvbmdlciBhdXRvLWluamVjdGVkLlxuLy8gVGhlIGlubGluZSBtYXBwZWQgdHlwZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIEZsYXR0ZW4gYWxpYXMgc28gdGhhdCBob3ZlclxuLy8gdG9vbHRpcHMgc2hvdyB0aGUgYWN0dWFsIGZpZWxkIG9iamVjdCBsaXRlcmFsIGZpcnN0LCBub3QgXCJGbGF0dGVuPHsuLi59PlwiLlxuZXhwb3J0IHR5cGUgSW5zdGFuY2VSZXN1bHQ8XG4gIE4gZXh0ZW5kcyBvYmplY3QsXG4+ID0geyBbSyBpbiBrZXlvZiBOXTogTltLXSB9O1xuXG4vLyBEZWZpbml0b3IgaW5zdGFuY2UgLSB0aGUgY29uc3RydWN0b3IgZnVuY3Rpb24gcmV0dXJuZWQgYnkgZGVmaW5lXG4vLyBOID0gaW5zdGFuY2UgdHlwZSAocHJvcGVydGllcyBhdmFpbGFibGUgb24gaW5zdGFuY2VzKVxuLy8gUyA9IHN1YnR5cGVzIG1hcFxuZXhwb3J0IGludGVyZmFjZSBJRGVmaW5pdG9ySW5zdGFuY2U8XG5cdE4gZXh0ZW5kcyBvYmplY3QsXG5cdFIgZXh0ZW5kcyBJbnN0YW5jZVJlc3VsdDxOPiA9IEluc3RhbmNlUmVzdWx0PE4+XG4+IHtcblxuXHRUeXBlTmFtZTogc3RyaW5nO1xuXHRwcm90b3R5cGU6IE47XG5cblx0XG5cdC8vIHRoZSBsaW5lIGJlbG93IGRlY2xhcmVzIGEgYG5ldyAuLi5gIGludm9jYXRpb24sXG5cdC8vIHNvIG1ha2VzIGludGVyZmFjZSBjb25zdHJ1Y3RpYmxlXG5cdC8vIG5ldyguLi5hcmdzOiB1bmtub3duW10pOiB7IFtrZXkgaW4ga2V5b2YgUl06IFJba2V5XSB9O1xuXHRuZXcoLi4uYXJnczogdW5rbm93bltdKTogUjtcblxuXHRcblx0Ly8gVE9ETzogbmVlZCBjaGVjayBpZiBsaW5lIGJlbG93IHdvcmtzXG5cdC8vIGFsc28gVFMgaGludGluZyBjaGVjayBhcyB3ZWxsXG5cdC8vIHRoZSBsaW5lIGJlbG93IHNob3VsZCBtYWtlIGlzIGEgQGRlY29yYXRlIGRlY29yYXRvciB3b3JraW5nXG5cdCguLi5hcmdzOiB1bmtub3duW10pOiBJRGVmaW5pdG9ySW5zdGFuY2U8Uj47XG5cblxuXHQvLyBEZWZpbmUgbWV0aG9kIHRoYXQgY29tYmluZXMgcGFyZW50IE4gd2l0aCBuZXcgdHlwZSBUIHVzaW5nIFByb3RvXG5cdGRlZmluZTxcblx0XHRUIGV4dGVuZHMgb2JqZWN0LFxuXG5cdFx0Ly8gdGhpcyB3aWxsIGJlIGluc3RhbmNlIHR5cGUgZm9yIHN1Yi10eXBlICEhIVxuXHRcdC8vIEYgZXh0ZW5kcyBGbGF0dGVuPFByb3RvPE4sIFQ+PlxuXHRcdEYgZXh0ZW5kcyBQcm90bzxOLCBUPlxuXHQ+KFxuXHRcdFR5cGVPclR5cGVOYW1lOiBzdHJpbmcgfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbnN0cnVjdEhhbmRsZXJPckNvbmZpZz86IElERUY8VD4gfCBvYmplY3QgfCBib29sZWFuIHwgQ2FsbGFibGVGdW5jdGlvbixcblx0XHRjb25maWdPclVuZGVmaW5lZD86IGNvbnN0cnVjdG9yT3B0aW9ucyB8IENhbGxhYmxlRnVuY3Rpb24gfCBib29sZWFuXG5cdCk6IElEZWZpbml0b3JJbnN0YW5jZTxGPjtcblx0XG5cdGxvb2t1cDogVHlwZUxvb2t1cDtcblx0XG5cdHJlZ2lzdGVySG9vayhob29rVHlwZTogaG9va3NUeXBlcywgY2I6IGhvb2spOiB2b2lkO1xuXHRcblx0XG5cdHN1YnR5cGVzOiBTdWJ0eXBlc01hcDtcblx0XG5cdC8vIEludGVybmFsIHByb3BlcnRpZXMgYWNjZXNzZWQgYnkgdGVzdHNcblx0X190eXBlX18/OiBUeXBlRGVmO1xuXHRjb2xsZWN0aW9uPzogQ29sbGVjdGlvbkRlZjtcblxuXHQvKlxuXHQvLyBBbGxvdyBkeW5hbWljIHByb3BlcnR5IGFjY2VzcyBmb3Igc3VidHlwZXNcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0Ki9cbn1cblxuLy8gVHlwZSBhYnNvcmJlciBmdW5jdGlvbiB0eXBlIC0gdXNlZCBmb3IgZGVmaW5pbmcgc3VidHlwZXNcbi8vIFN1cHBvcnRzIG11bHRpcGxlIGNhbGxpbmcgY29udmVudGlvbnM6XG4vLyAxLiBNb2Rlcm46IGRlZmluZShUeXBlTmFtZSwgY29uc3RydWN0SGFuZGxlciwgY29uZmlnPylcbi8vIDIuIExlZ2FjeTogZGVmaW5lKGNvbnN0cnVjdEhhbmRsZXIsIGNvbmZpZz8pIC0gVHlwZU5hbWUgZnJvbSBjb25zdHJ1Y3RvciBuYW1lXG4vLyAzLiBOZXN0ZWQ6IHBhcmVudFR5cGUuZGVmaW5lKFR5cGVOYW1lLCBjb25zdHJ1Y3RIYW5kbGVyLCBjb25maWc/KVxuZXhwb3J0IGludGVyZmFjZSBUeXBlQWJzb3JiZXIgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0PFQgZXh0ZW5kcyBvYmplY3Q+KFxuXHRcdHRoaXM6IHVua25vd24sXG5cdFx0VHlwZU9yVHlwZU5hbWU6IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24sXG5cdFx0Y29uc3RydWN0SGFuZGxlck9yQ29uZmlnPzogSURFRjxUPiB8IG9iamVjdCB8IGJvb2xlYW4gfCBDYWxsYWJsZUZ1bmN0aW9uLFxuXHRcdGNvbmZpZ09yVW5kZWZpbmVkPzogY29uc3RydWN0b3JPcHRpb25zIHwgQ2FsbGFibGVGdW5jdGlvbiB8IGJvb2xlYW5cblx0KTogSURlZmluaXRvckluc3RhbmNlPFQ+O1xufVxuXG4vLyBUeXBlc0NvbGxlY3Rpb24gaW50ZXJmYWNlIGZvciBjcmVhdGVUeXBlc0NvbGxlY3Rpb25cbi8vIFRoaXMgcmVwcmVzZW50cyB0aGUgYWN0dWFsIHJldHVybiB0eXBlIG9mIGNyZWF0ZVR5cGVzQ29sbGVjdGlvblxuZXhwb3J0IGludGVyZmFjZSBUeXBlc0NvbGxlY3Rpb24gZXh0ZW5kcyBIb29rYWJsZSB7XG5cdGRlZmluZTogVHlwZUFic29yYmVyO1xuXHRsb29rdXA6IFR5cGVMb29rdXA7XG5cdHN1YnR5cGVzOiBTdWJ0eXBlc01hcDtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gU2hhcmVkIGludGVyZmFjZSBmb3Igb2JqZWN0cyB0aGF0IHN1cHBvcnQgaG9va3MgKFR5cGVEZWYgYW5kIENvbGxlY3Rpb25EZWYpXG5leHBvcnQgaW50ZXJmYWNlIEhvb2thYmxlIHtcblx0aG9va3M6IFJlY29yZDxzdHJpbmcsIFNldDxob29rPj47XG5cdGludm9rZUhvb2soaG9va1R5cGU6IGhvb2tzVHlwZXMsIG9wdHM6IGhvb2tzT3B0cyk6IFNldDx1bmtub3duPjtcblx0cmVnaXN0ZXJIb29rKGhvb2tUeXBlOiBob29rc1R5cGVzLCBjYjogaG9vayk6IHZvaWQ7XG5cdHJlZ2lzdGVyRmxvd0NoZWNrZXIoY2I6IChvcHRzOiBvYmplY3QpID0+IHVua25vd24pOiB2b2lkO1xufVxuXG4vLyBjcmVhdGVUeXBlc0NvbGxlY3Rpb24gZnVuY3Rpb24gdHlwZVxuZXhwb3J0IHR5cGUgQ3JlYXRlVHlwZXNDb2xsZWN0aW9uRnVuY3Rpb24gPSAoY29uZmlnPzogY29uc3RydWN0b3JPcHRpb25zKSA9PiBUeXBlc0NvbGxlY3Rpb247XG5cbi8vIFR5cGUgY2xhc3MgLSBiYXNlIHR5cGUgY29uc3RydWN0b3JcbmV4cG9ydCB0eXBlIFR5cGVDbGFzcyA9IElEZWZpbml0b3JJbnN0YW5jZTxvYmplY3Q+O1xuXG4vLyBNbmVtb25pY2EgY29uc3RydWN0b3Ig4oCUIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiByZXR1cm5lZCBieSBjb25zdHJ1Y3RIYW5kbGVyKClcbi8vIEhhcyBTeW1ib2xDb25zdHJ1Y3Rvck5hbWUgYXR0YWNoZWQgYW5kIGlzIGJvdGggbmV3YWJsZSBhbmQgY2FsbGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgTW5lbW9uaWNhQ29uc3RydWN0b3IgZXh0ZW5kcyBOZXdhYmxlRnVuY3Rpb24ge1xuXHRuZXcgKC4uLmFyZ3M6IHVua25vd25bXSk6IG9iamVjdDtcblx0KHRoaXM6IG9iamVjdCwgLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93bjtcblx0W2tleTogc3ltYm9sXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBkZXNjcmlwdG9yIGluc3RhbmNlIOKAlCBpbnRlcm5hbCBzaGFwZSBvZiBUeXBlRGVzY3JpcHRvciBvYmplY3RzXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEZXNjcmlwdG9yRGVmaW5lIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdChcblx0XHRUeXBlT3JUeXBlTmFtZTogc3RyaW5nIHwgQ2FsbGFibGVGdW5jdGlvbixcblx0XHRjb25zdHJ1Y3RIYW5kbGVyT3JDb25maWc/OiBDYWxsYWJsZUZ1bmN0aW9uIHwgb2JqZWN0LFxuXHRcdGNvbmZpZz86IG9iamVjdFxuXHQpOiBUeXBlQ2xhc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURlc2NyaXB0b3JMb29rdXAgZXh0ZW5kcyBDYWxsYWJsZUZ1bmN0aW9uIHtcblx0KFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmcpOiBUeXBlQ2xhc3MgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCB0eXBlIFR5cGVEZXNjcmlwdG9ySW5zdGFuY2UgPSB7XG5cdGRlZmluZTogVHlwZURlc2NyaXB0b3JEZWZpbmU7XG5cdGxvb2t1cDogVHlwZURlc2NyaXB0b3JMb29rdXA7XG5cdHN1YnR5cGVzOiBNYXA8c3RyaW5nLCBvYmplY3Q+O1xuXHRUeXBlTmFtZTogc3RyaW5nO1xufTtcblxuLy8gQ29uc3RydWN0b3IgdHlwZSBmb3IgZGVjb3JhdGUgZnVuY3Rpb25cbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQgPSBvYmplY3Q+ID0gbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQ7XG5cbi8vIERlY29yYXRlZCBjbGFzcyB0eXBlIC0gaW5jbHVkZXMgY2FsbCBzaWduYXR1cmUgZm9yIGRlY29yYXRvciBwYXR0ZXJuXG5leHBvcnQgdHlwZSBEZWNvcmF0ZWRDbGFzczxUIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0Pj4gPVxuXHRUICZcblx0KDxVIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0Pj4odGFyZ2V0OiBVKSA9PiBEZWNvcmF0ZWRDbGFzczxVPikgJiB7XG5cdFx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdFx0cmVnaXN0ZXJIb29rKGhvb2tUeXBlOiBob29rc1R5cGVzLCBjYjogaG9vayk6IHZvaWQ7XG5cdFx0bG9va3VwOiBUeXBlTG9va3VwO1xuXHRcdFR5cGVOYW1lOiBzdHJpbmc7XG5cdH07XG5cbi8vIEhlbHBlcjogbWVyZ2UgcGFyZW50IGVudGl0eSAoRSkgYW5kIGNoaWxkIGNvbnN0cnVjdG9yIGluc3RhbmNlIChUKSBpbnRvIGFcbi8vIHNpbmdsZSBmbGF0IG9iamVjdCB0eXBlLCBmaWx0ZXJpbmcgb3V0IE1uZW1vbmljYUluc3RhbmNlIG1ldGhvZCBuYW1lcy5cbi8vIFVzZWQgYnkgYXBwbHkvY2FsbC9iaW5kLlxuZXhwb3J0IHR5cGUgTWVyZ2U8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4gPSB7XG5cdFtLIGluIGtleW9mIFQgfCBrZXlvZiBFIGFzIEsgZXh0ZW5kcyBNbmVtb25pY2FJbnN0YW5jZU1ldGhvZEtleXMgPyBuZXZlciA6IEtdOlxuXHRcdEsgZXh0ZW5kcyBrZXlvZiBUID8gVFtLXSA6IEVbSyAmIGtleW9mIEVdO1xufTtcblxuLy8gQXBwbHkvQ2FsbC9CaW5kIGZ1bmN0aW9uIHR5cGVzXG4vLyBUaGUgcmV0dXJuIHR5cGUgbWVyZ2VzIHRoZSBwYXJlbnQgZW50aXR5IGZpZWxkcyB3aXRoIHRoZSBjaGlsZCBjb25zdHJ1Y3RvclxuLy8gZmllbGRzIChmaWx0ZXJpbmcgb3V0IE1uZW1vbmljYUluc3RhbmNlIG1ldGhvZCBuYW1lcyksIHByb2R1Y2luZyB0aGUgc2FtZVxuLy8gYHsgZmllbGRzIH1gIGhvdmVyIHN0eWxlIGFzIGBuZXcgVHlwZSgpYC5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbHlGdW5jdGlvbiBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQ8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4oXG5cdFx0ZW50aXR5OiBFLFxuXHRcdENvbnN0cnVjdG9yOiBJREVGPFQ+LFxuXHRcdGFyZ3M/OiB1bmtub3duW11cblx0KTogSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxGdW5jdGlvbiBleHRlbmRzIENhbGxhYmxlRnVuY3Rpb24ge1xuXHQ8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdD4oXG5cdFx0ZW50aXR5OiBFLFxuXHRcdENvbnN0cnVjdG9yOiBJREVGPFQ+LFxuXHRcdC4uLmFyZ3M6IHVua25vd25bXVxuXHQpOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluZEZ1bmN0aW9uIGV4dGVuZHMgQ2FsbGFibGVGdW5jdGlvbiB7XG5cdDxFIGV4dGVuZHMgb2JqZWN0LCBUIGV4dGVuZHMgb2JqZWN0Pihcblx0XHRlbnRpdHk6IEUsXG5cdFx0Q29uc3RydWN0b3I6IElERUY8VD5cblx0KTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xufVxuXG4vLyBVdGlscyBvYmplY3QgdHlwZVxuZXhwb3J0IGludGVyZmFjZSBVdGlsc0NvbGxlY3Rpb24ge1xuXHRleHRyYWN0PFQgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBUKTogRXh0cmFjdGVkPFQ+O1xuXHRwaWNrPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihpbnN0YW5jZTogVCwgLi4uYXJnczogKEsgfCBLW10pW10pOiB7IFtQIGluIEtdOiBUW1BdIH0gJiB7fTtcblx0cGljazxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCwgLi4uYXJnczogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdGNsb25lPFQgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBUKTogVDtcblx0Zm9yazxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6ICh0aGlzOiBvYmplY3QsIC4uLmZvcmtBcmdzOiB1bmtub3duW10pID0+IFQ7XG5cdHNpYmxpbmcoaW5zdGFuY2U6IG9iamVjdCk6IFNpYmxpbmdBY2Nlc3Nvcjtcblx0Y29sbGVjdENvbnN0cnVjdG9yczogKGluc3RhbmNlOiBvYmplY3QsIGZsYXQ/OiBib29sZWFuKSA9PiAoQ2FsbGFibGVGdW5jdGlvbiB8IHN0cmluZylbXTtcblx0bWVyZ2U8QSBleHRlbmRzIG9iamVjdCwgQiBleHRlbmRzIG9iamVjdD4oXG5cdFx0YTogQSxcblx0XHRiOiBCLFxuXHRcdC4uLmFyZ3M6IHVua25vd25bXVxuXHQpOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxCLCBBPj47XG5cdHBhcnNlPFQgZXh0ZW5kcyBvYmplY3Q+KHNlbGY6IFQpOiBQYXJzZWQ8VD47XG5cdHBhcmVudDxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0cGFyZW50PFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBQYXJlbnRQYXRoT2ZJbnN0YW5jZTxUPiAmIHN0cmluZz4oXG5cdFx0aW5zdGFuY2U6IFQsXG5cdFx0cGF0aDogS1xuXHQpOiBJbnN0YW5jZU9mVHlwZVJlZ2lzdHJ5PEs+IHwgdW5kZWZpbmVkO1xuXHRwYXJlbnQ8VCBleHRlbmRzIG9iamVjdD4oaW5zdGFuY2U6IFQsIHBhdGg6IHN0cmluZyk6IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0dG9KU09OPFQgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBUKTogc3RyaW5nO1xuXHRba2V5OiBzdHJpbmddOiBDYWxsYWJsZUZ1bmN0aW9uO1xufVxuXG4vLyBNYWluIG1uZW1vbmljYSBtb2R1bGUgaW50ZXJmYWNlIC0gcmVwcmVzZW50cyB0aGUgZXhwb3J0ZWQgbW9kdWxlIG9iamVjdFxuZXhwb3J0IGludGVyZmFjZSBNbmVtb25pY2FNb2R1bGUge1xuXHQvLyBDb3JlIGZ1bmN0aW9uc1xuXHRkZWZpbmU6IFR5cGVBYnNvcmJlcjtcblx0bG9va3VwOiB7XG5cdFx0KFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmcpOiBUeXBlQ2xhc3MgfCB1bmRlZmluZWQ7XG5cdFx0PGNvbnN0IEsgZXh0ZW5kcyBrZXlvZiBUeXBlUmVnaXN0cnk+KFR5cGVOZXN0ZWRQYXRoOiBLKTogVHlwZVJlZ2lzdHJ5W0tdIHwgdW5kZWZpbmVkO1xuXHR9O1xuXHRhcHBseTogQXBwbHlGdW5jdGlvbjtcblx0Y2FsbDogQ2FsbEZ1bmN0aW9uO1xuXHRiaW5kOiBCaW5kRnVuY3Rpb247XG5cdGRlY29yYXRlOiA8VCBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4gfCBjb25zdHJ1Y3Rvck9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuXHRcdHRhcmdldD86IFQsXG5cdFx0Y29uZmlnPzogY29uc3RydWN0b3JPcHRpb25zXG5cdCkgPT4gPFUgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+Pihjc3RyOiBVKSA9PiBEZWNvcmF0ZWRDbGFzczxVPjtcblx0cmVnaXN0ZXJIb29rOiA8VCBleHRlbmRzIG9iamVjdD4oQ29uc3RydWN0b3I6IElERUY8VD4sIGhvb2tUeXBlOiBob29rc1R5cGVzLCBjYjogaG9vaykgPT4gdm9pZDtcblxuXHQvLyBEZXNjcmlwdG9yc1xuXHRkZWZhdWx0VHlwZXM6IFR5cGVzQ29sbGVjdGlvbjtcblxuXHQvLyBFcnJvcnNcblx0QkFTRV9NTkVNT05JQ0FfRVJST1I6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX1RZUEVfREVGSU5JVElPTjogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0V1JPTkdfSU5TVEFOQ0VfSU5WT0NBVElPTjogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0V1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk46IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdEFMUkVBRFlfREVDTEFSRUQ6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX0FSR1VNRU5UU19VU0VEOiBNbmVtb25pY2FFcnJvckNvbnN0cnVjdG9yO1xuXHRXUk9OR19IT09LX1RZUEU6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdE1JU1NJTkdfQ0FMTEJBQ0tfQVJHVU1FTlQ6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdC8vIEZMT1dfQ0hFQ0tFUl9SRURFRklOSVRJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdE1JU1NJTkdfSE9PS19DQUxMQkFDSzogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0VFlQRU5BTUVfTVVTVF9CRV9BX1NUUklORzogTW5lbW9uaWNhRXJyb3JDb25zdHJ1Y3Rvcjtcblx0SEFORExFUl9NVVNUX0JFX0FfRlVOQ1RJT046IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdE9QVElPTlNfRVJST1I6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cdFdST05HX1NUQUNLX0NMRUFORVI6IE1uZW1vbmljYUVycm9yQ29uc3RydWN0b3I7XG5cblx0Ly8gQ29uc3RhbnRzXG5cdE1ORU1PTklDQTogc3RyaW5nO1xuXHRNTkVNT1NZTkU6IHN0cmluZztcblx0U3ltYm9sUGFyZW50VHlwZTogc3ltYm9sO1xuXHRTeW1ib2xDb25zdHJ1Y3Rvck5hbWU6IHN5bWJvbDtcblx0U3ltYm9sRGVmYXVsdFR5cGVzQ29sbGVjdGlvbjogc3ltYm9sO1xuXHRTeW1ib2xDb25maWc6IHN5bWJvbDtcblx0VFlQRV9USVRMRV9QUkVGSVg6IHN0cmluZztcblx0RXJyb3JNZXNzYWdlczogRXJyb3JNZXNzYWdlcztcblxuXHQvLyBVdGlsc1xuXHR1dGlsczogVXRpbHNDb2xsZWN0aW9uO1xuXHRnZXRQcm9wczogKGluc3RhbmNlOiBvYmplY3QpID0+IFByb3BzVHlwZSB8IHVuZGVmaW5lZDtcblx0c2V0UHJvcHM6IChpbnN0YW5jZTogb2JqZWN0LCB2YWx1ZXM6IG9iamVjdCkgPT4gc3RyaW5nW10gfCBmYWxzZTtcblx0ZmluZFN1YlR5cGVGcm9tUGFyZW50OiAoaW5zdGFuY2U6IG9iamVjdCB8IHVuZGVmaW5lZCwgc3ViVHlwZTogc3RyaW5nKSA9PiBvYmplY3QgfCBudWxsO1xuXHRpc0NsYXNzOiAoZm46IENhbGxhYmxlRnVuY3Rpb24pID0+IGJvb2xlYW47XG5cblx0Ly8gY3JlYXRlVHlwZXNDb2xsZWN0aW9uXG5cdGNyZWF0ZVR5cGVzQ29sbGVjdGlvbjogQ3JlYXRlVHlwZXNDb2xsZWN0aW9uRnVuY3Rpb247XG5cblx0Ly8gQWxsb3cgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare const clone: <T extends object>(instance: T) => T;
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clone = void 0;
4
+ const fork_1 = require("./fork");
5
+ const clone = (instance) => {
6
+ const forkFn = (0, fork_1.fork)(instance);
7
+ const result = forkFn.call(instance);
8
+ return result;
9
+ };
10
+ exports.clone = clone;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY2xvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOzs7QUFFYixpQ0FBOEI7QUFFdkIsTUFBTSxLQUFLLEdBQUcsQ0FBbUIsUUFBVyxFQUFLLEVBQUU7SUFFekQsTUFBTSxNQUFNLEdBQUcsSUFBQSxXQUFJLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQU0sQ0FBQztJQUMxQyxPQUFPLE1BQU0sQ0FBQztBQUVmLENBQUMsQ0FBQztBQU5XLFFBQUEsS0FBSyxTQU1oQiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgZm9yayB9IGZyb20gJy4vZm9yayc7XG5cbmV4cG9ydCBjb25zdCBjbG9uZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVCk6IFQgPT4ge1xuXG5cdGNvbnN0IGZvcmtGbiA9IGZvcmsoaW5zdGFuY2UpO1xuXHRjb25zdCByZXN1bHQgPSBmb3JrRm4uY2FsbChpbnN0YW5jZSkgYXMgVDtcblx0cmV0dXJuIHJlc3VsdDtcblxufTtcbiJdfQ==
@@ -4,15 +4,17 @@ exports.collectConstructors = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  const { MNEMOSYNE, MNEMONICA, } = constants_1.constants;
6
6
  const getAdditor = (constructors) => {
7
- return Array.isArray(constructors) ?
7
+ const result = Array.isArray(constructors) ?
8
8
  (name) => {
9
9
  constructors.push(name);
10
10
  } : (name) => {
11
11
  constructors[name] = true;
12
12
  };
13
+ return result;
13
14
  };
14
15
  const getAccumulator = (asSequence) => {
15
- return asSequence ? [] : {};
16
+ const result = asSequence ? [] : {};
17
+ return result;
16
18
  };
17
19
  const collectConstructors = (self, asSequence = false) => {
18
20
  const constructors = getAccumulator(asSequence);
@@ -58,4 +60,4 @@ const collectConstructors = (self, asSequence = false) => {
58
60
  return constructors;
59
61
  };
60
62
  exports.collectConstructors = collectConstructors;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdENvbnN0cnVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb2xsZWN0Q29uc3RydWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsNENBQXlDO0FBRXpDLE1BQU0sRUFDTCxTQUFTLEVBQ1QsU0FBUyxHQUVULEdBQUcscUJBQVMsQ0FBQztBQUVkLE1BQU0sVUFBVSxHQUFHLENBQUMsWUFBcUQsRUFBRSxFQUFFO0lBQzVFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDaEIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDcEIsWUFBWSxDQUFFLElBQUksQ0FBRSxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDLENBQUM7QUFFSixDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQW1CLEVBQUUsRUFBRTtJQUM5QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUssTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxVQUFVLEdBQUcsS0FBSyxFQUFFLEVBQUU7SUFFdkUsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUvQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU8sWUFBWSxDQUFDO1FBQ3JCLENBQUM7SUFDRixDQUFDO1NBQU0sQ0FBQztRQUNQLE9BQU8sWUFBWSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEtBQUssR0FBWSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQzdCLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUMvQyxJQUFJLGVBQWUsS0FBSyxTQUFTLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QixLQUFLLEVBQ0wsYUFBYSxDQUNiLEVBQUUsQ0FBQztvQkFDSCxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQy9CLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDekIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixDQUFDO1lBQ0YsQ0FBQztpQkFBTSxJQUFJLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDekMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0YsQ0FBQztRQUVELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixNQUFNO1FBQ1AsQ0FBQztRQUVELElBQUksR0FBRyxLQUFLLENBQUM7UUFDYixLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN4QyxNQUFNO1FBQ1AsQ0FBQztJQVdGLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUNyQixDQUFDLENBQUM7QUExRFcsUUFBQSxtQkFBbUIsdUJBMEQ5QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgY29uc3RhbnRzIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuY29uc3Qge1xuXHRNTkVNT1NZTkUsXG5cdE1ORU1PTklDQSxcblx0Ly8gU3ltYm9sQ29uc3RydWN0b3JOYW1lXG59ID0gY29uc3RhbnRzO1xuXG5jb25zdCBnZXRBZGRpdG9yID0gKGNvbnN0cnVjdG9yczogc3RyaW5nW10gfCB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9KSA9PiB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9ycykgP1xuXHRcdChuYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGNvbnN0cnVjdG9ycy5wdXNoKG5hbWUpO1xuXHRcdH0gOiAobmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRjb25zdHJ1Y3RvcnNbIG5hbWUgXSA9IHRydWU7XG5cdFx0fTtcblxufTtcblxuY29uc3QgZ2V0QWNjdW11bGF0b3IgPSAoYXNTZXF1ZW5jZTogYm9vbGVhbikgPT4ge1xuXHRyZXR1cm4gYXNTZXF1ZW5jZSA/IFtdIDoge307XG59O1xuXG5leHBvcnQgY29uc3QgY29sbGVjdENvbnN0cnVjdG9ycyA9IChzZWxmOiBvYmplY3QsIGFzU2VxdWVuY2UgPSBmYWxzZSkgPT4ge1xuXG5cdGNvbnN0IGNvbnN0cnVjdG9ycyA9IGdldEFjY3VtdWxhdG9yKGFzU2VxdWVuY2UpO1xuXHRjb25zdCBhZGRUb1NlcXVlbmNlID0gZ2V0QWRkaXRvcihjb25zdHJ1Y3RvcnMpO1xuXG5cdGlmICh0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcpIHtcblx0XHRpZiAoc2VsZiA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0cnVjdG9ycztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0cnVjdG9ycztcblx0fVxuXG5cdGxldCBwcm90bzogdW5rbm93biA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yoc2VsZik7XG5cblx0bGV0IG1uZW1vbmljYVJlYWNoZWQgPSBmYWxzZTtcblx0d2hpbGUgKHByb3RvKSB7XG5cdFx0aWYgKHByb3RvLmNvbnN0cnVjdG9yKSB7XG5cdFx0XHRjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSBwcm90by5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdFx0aWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gTU5FTU9OSUNBICYmICFtbmVtb25pY2FSZWFjaGVkKSB7XG5cdFx0XHRcdGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChcblx0XHRcdFx0XHRwcm90byxcblx0XHRcdFx0XHQnY29uc3RydWN0b3InXG5cdFx0XHRcdCkpIHtcblx0XHRcdFx0XHRhZGRUb1NlcXVlbmNlKGNvbnN0cnVjdG9yTmFtZSk7XG5cdFx0XHRcdFx0YWRkVG9TZXF1ZW5jZShNTkVNT1NZTkUpO1xuXHRcdFx0XHRcdG1uZW1vbmljYVJlYWNoZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gJ09iamVjdCcpIHtcblx0XHRcdFx0YWRkVG9TZXF1ZW5jZShjb25zdHJ1Y3Rvck5hbWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFkZFRvU2VxdWVuY2UoY29uc3RydWN0b3JOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobW5lbW9uaWNhUmVhY2hlZCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdFxuXHRcdHNlbGYgPSBwcm90bztcblx0XHRwcm90byA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yoc2VsZik7XG5cdFx0aWYgKHByb3RvID09PSBudWxsKSB7XG5cdFx0XHRhZGRUb1NlcXVlbmNlKCdPYmplY3Q6IG51bGwgcHJvdG90eXBlJyk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Lypcblx0XHRUT0RPOiBzaG93IGZ1bGwgY2hhaW4gYW5kIHRlc3QgaXQgISEhXG5cdFx0ZWxzZSB7XG5cdFx0XHQvLyBwcm90byBtYXkgYmUgZWl0aGVyIGVtcHR5IG9iamVjdCBvciBudWxsXG5cdFx0XHQvLyBzbyB0eXBlb2Ygd2lsbCBhbHdheXMgYmUgJ29iamVjdCdcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb25lbHktaWZcblx0XHRcdGFkZFRvU2VxdWVuY2UoJy4uLiBwbGFpbiBvYmplY3QgLi4uJyk7XG5cdFx0fVxuXHRcdCovXG5cdFx0Ly8gc28gaGVyZSB3ZSBnbyBkZWVwZXIgdG8gdGhlIGNoYWluXG5cdH1cblx0cmV0dXJuIGNvbnN0cnVjdG9ycztcbn07XG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdENvbnN0cnVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb2xsZWN0Q29uc3RydWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7O0FBRWIsNENBQXlDO0FBRXpDLE1BQU0sRUFDTCxTQUFTLEVBQ1QsU0FBUyxHQUVULEdBQUcscUJBQVMsQ0FBQztBQUVkLE1BQU0sVUFBVSxHQUFHLENBQUMsWUFBcUQsRUFBRSxFQUFFO0lBQzVFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ2hCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQ3BCLFlBQVksQ0FBRSxJQUFJLENBQUUsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFFZixDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQW1CLEVBQUUsRUFBRTtJQUM5QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BDLE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUssTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxVQUFVLEdBQUcsS0FBSyxFQUFFLEVBQUU7SUFFdkUsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUvQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU8sWUFBWSxDQUFDO1FBQ3JCLENBQUM7SUFDRixDQUFDO1NBQU0sQ0FBQztRQUNQLE9BQU8sWUFBWSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLEtBQUssR0FBWSxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQzdCLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUMvQyxJQUFJLGVBQWUsS0FBSyxTQUFTLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QixLQUFLLEVBQ0wsYUFBYSxDQUNiLEVBQUUsQ0FBQztvQkFDSCxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQy9CLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDekIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixDQUFDO1lBQ0YsQ0FBQztpQkFBTSxJQUFJLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDekMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0YsQ0FBQztRQUVELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixNQUFNO1FBQ1AsQ0FBQztRQUVELElBQUksR0FBRyxLQUFLLENBQUM7UUFDYixLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN4QyxNQUFNO1FBQ1AsQ0FBQztJQVdGLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUNyQixDQUFDLENBQUM7QUExRFcsUUFBQSxtQkFBbUIsdUJBMEQ5QiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgY29uc3RhbnRzIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuY29uc3Qge1xuXHRNTkVNT1NZTkUsXG5cdE1ORU1PTklDQSxcblx0Ly8gU3ltYm9sQ29uc3RydWN0b3JOYW1lXG59ID0gY29uc3RhbnRzO1xuXG5jb25zdCBnZXRBZGRpdG9yID0gKGNvbnN0cnVjdG9yczogc3RyaW5nW10gfCB7IFtpbmRleDogc3RyaW5nXTogYm9vbGVhbiB9KSA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IEFycmF5LmlzQXJyYXkoY29uc3RydWN0b3JzKSA/XG5cdFx0KG5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0Y29uc3RydWN0b3JzLnB1c2gobmFtZSk7XG5cdFx0fSA6IChuYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGNvbnN0cnVjdG9yc1sgbmFtZSBdID0gdHJ1ZTtcblx0XHR9O1xuXHRyZXR1cm4gcmVzdWx0O1xuXG59O1xuXG5jb25zdCBnZXRBY2N1bXVsYXRvciA9IChhc1NlcXVlbmNlOiBib29sZWFuKSA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IGFzU2VxdWVuY2UgPyBbXSA6IHt9O1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbGxlY3RDb25zdHJ1Y3RvcnMgPSAoc2VsZjogb2JqZWN0LCBhc1NlcXVlbmNlID0gZmFsc2UpID0+IHtcblxuXHRjb25zdCBjb25zdHJ1Y3RvcnMgPSBnZXRBY2N1bXVsYXRvcihhc1NlcXVlbmNlKTtcblx0Y29uc3QgYWRkVG9TZXF1ZW5jZSA9IGdldEFkZGl0b3IoY29uc3RydWN0b3JzKTtcblxuXHRpZiAodHlwZW9mIHNlbGYgPT09ICdvYmplY3QnKSB7XG5cdFx0aWYgKHNlbGYgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBjb25zdHJ1Y3RvcnM7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvcnM7XG5cdH1cblxuXHRsZXQgcHJvdG86IHVua25vd24gPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHNlbGYpO1xuXG5cdGxldCBtbmVtb25pY2FSZWFjaGVkID0gZmFsc2U7XG5cdHdoaWxlIChwcm90bykge1xuXHRcdGlmIChwcm90by5jb25zdHJ1Y3Rvcikge1xuXHRcdFx0Y29uc3QgY29uc3RydWN0b3JOYW1lID0gcHJvdG8uY29uc3RydWN0b3IubmFtZTtcblx0XHRcdGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IE1ORU1PTklDQSAmJiAhbW5lbW9uaWNhUmVhY2hlZCkge1xuXHRcdFx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoXG5cdFx0XHRcdFx0cHJvdG8sXG5cdFx0XHRcdFx0J2NvbnN0cnVjdG9yJ1xuXHRcdFx0XHQpKSB7XG5cdFx0XHRcdFx0YWRkVG9TZXF1ZW5jZShjb25zdHJ1Y3Rvck5hbWUpO1xuXHRcdFx0XHRcdGFkZFRvU2VxdWVuY2UoTU5FTU9TWU5FKTtcblx0XHRcdFx0XHRtbmVtb25pY2FSZWFjaGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09ICdPYmplY3QnKSB7XG5cdFx0XHRcdGFkZFRvU2VxdWVuY2UoY29uc3RydWN0b3JOYW1lKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRUb1NlcXVlbmNlKGNvbnN0cnVjdG9yTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG1uZW1vbmljYVJlYWNoZWQpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRcblx0XHRzZWxmID0gcHJvdG87XG5cdFx0cHJvdG8gPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHNlbGYpO1xuXHRcdGlmIChwcm90byA9PT0gbnVsbCkge1xuXHRcdFx0YWRkVG9TZXF1ZW5jZSgnT2JqZWN0OiBudWxsIHByb3RvdHlwZScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8qXG5cdFx0VE9ETzogc2hvdyBmdWxsIGNoYWluIGFuZCB0ZXN0IGl0ICEhIVxuXHRcdGVsc2Uge1xuXHRcdFx0Ly8gcHJvdG8gbWF5IGJlIGVpdGhlciBlbXB0eSBvYmplY3Qgb3IgbnVsbFxuXHRcdFx0Ly8gc28gdHlwZW9mIHdpbGwgYWx3YXlzIGJlICdvYmplY3QnXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRhZGRUb1NlcXVlbmNlKCcuLi4gcGxhaW4gb2JqZWN0IC4uLicpO1xuXHRcdH1cblx0XHQqL1xuXHRcdC8vIHNvIGhlcmUgd2UgZ28gZGVlcGVyIHRvIHRoZSBjaGFpblxuXHR9XG5cdHJldHVybiBjb25zdHJ1Y3RvcnM7XG59O1xuIl19
@@ -0,0 +1 @@
1
+ export declare const exception: (instance: object, error: Error, ...args: unknown[]) => any;