occam-nominal 1.0.477 → 1.0.485

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 (83) hide show
  1. package/lib/element/assertion/subproof.js +31 -83
  2. package/lib/element/assertion/type.js +2 -1
  3. package/lib/element/assumption/implicit.js +2 -2
  4. package/lib/element/claim.js +8 -5
  5. package/lib/element/combinator/bracketed.js +2 -4
  6. package/lib/element/combinator.js +27 -47
  7. package/lib/element/constraint.js +2 -2
  8. package/lib/element/constructor/bracketed.js +3 -3
  9. package/lib/element/constructor.js +29 -26
  10. package/lib/element/declaration/combinator.js +12 -18
  11. package/lib/element/declaration/constructor.js +2 -2
  12. package/lib/element/declaration/metavariable.js +17 -27
  13. package/lib/element/derivation.js +9 -11
  14. package/lib/element/equality.js +2 -2
  15. package/lib/element/fact/premise.js +29 -48
  16. package/lib/element/fact/step.js +49 -81
  17. package/lib/element/fact/supposition.js +4 -4
  18. package/lib/element/fact.js +6 -9
  19. package/lib/element/generator.js +9 -9
  20. package/lib/element/hypothesis.js +51 -95
  21. package/lib/element/label.js +4 -4
  22. package/lib/element/metavariable.js +35 -47
  23. package/lib/element/procedureCall.js +44 -62
  24. package/lib/element/proof.js +12 -14
  25. package/lib/element/property.js +4 -4
  26. package/lib/element/reference.js +34 -43
  27. package/lib/element/resolution/conclusion.js +8 -13
  28. package/lib/element/resolution/deduction.js +6 -6
  29. package/lib/element/resolution.js +6 -12
  30. package/lib/element/rule.js +72 -106
  31. package/lib/element/section.js +27 -40
  32. package/lib/element/signature.js +2 -2
  33. package/lib/element/statement.js +5 -7
  34. package/lib/element/subDerivation.js +9 -11
  35. package/lib/element/subproof.js +27 -36
  36. package/lib/element/substitution/statement.js +38 -58
  37. package/lib/element/term.js +2 -2
  38. package/lib/process/unification.js +67 -136
  39. package/lib/process/unify.js +3 -3
  40. package/lib/process/validate.js +16 -4
  41. package/lib/process/validation.js +14 -8
  42. package/package.json +3 -3
  43. package/src/element/assertion/subproof.js +32 -114
  44. package/src/element/assertion/type.js +2 -0
  45. package/src/element/assumption/implicit.js +1 -1
  46. package/src/element/claim.js +7 -5
  47. package/src/element/combinator/bracketed.js +1 -3
  48. package/src/element/combinator.js +32 -60
  49. package/src/element/constraint.js +1 -1
  50. package/src/element/constructor/bracketed.js +3 -3
  51. package/src/element/constructor.js +38 -34
  52. package/src/element/declaration/combinator.js +11 -17
  53. package/src/element/declaration/constructor.js +1 -1
  54. package/src/element/declaration/metavariable.js +16 -28
  55. package/src/element/derivation.js +10 -12
  56. package/src/element/equality.js +1 -1
  57. package/src/element/fact/premise.js +30 -60
  58. package/src/element/fact/step.js +54 -102
  59. package/src/element/fact/supposition.js +3 -3
  60. package/src/element/fact.js +5 -9
  61. package/src/element/generator.js +8 -8
  62. package/src/element/hypothesis.js +54 -121
  63. package/src/element/label.js +3 -3
  64. package/src/element/metavariable.js +39 -57
  65. package/src/element/procedureCall.js +59 -74
  66. package/src/element/proof.js +13 -15
  67. package/src/element/property.js +4 -4
  68. package/src/element/reference.js +31 -51
  69. package/src/element/resolution/conclusion.js +9 -16
  70. package/src/element/resolution/deduction.js +7 -6
  71. package/src/element/resolution.js +5 -13
  72. package/src/element/rule.js +69 -113
  73. package/src/element/section.js +26 -42
  74. package/src/element/signature.js +1 -1
  75. package/src/element/statement.js +4 -6
  76. package/src/element/subDerivation.js +10 -12
  77. package/src/element/subproof.js +26 -36
  78. package/src/element/substitution/statement.js +44 -71
  79. package/src/element/term.js +1 -1
  80. package/src/process/unification.js +67 -175
  81. package/src/process/unify.js +2 -2
  82. package/src/process/validate.js +17 -3
  83. package/src/process/validation.js +13 -7
@@ -12,16 +12,16 @@ const _necessary = require("necessary");
12
12
  const _occamlanguages = require("occam-languages");
13
13
  const _assertion = /*#__PURE__*/ _interop_require_default(require("../assertion"));
14
14
  const _elements = require("../../elements");
15
+ const _state = require("../../utilities/state");
15
16
  const _context = require("../../utilities/context");
16
17
  const _instantiate = require("../../process/instantiate");
17
- const _state = require("../../utilities/state");
18
18
  const _element = require("../../utilities/element");
19
19
  function _interop_require_default(obj) {
20
20
  return obj && obj.__esModule ? obj : {
21
21
  default: obj
22
22
  };
23
23
  }
24
- const { last, front } = _necessary.arrayUtilities, { backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON } = _occamlanguages.breakPointUtilities;
24
+ const { last, front } = _necessary.arrayUtilities, { breakPointFromJSON } = _occamlanguages.breakPointUtilities, { all, every, backwardsEvery } = _occamlanguages.continuationUtilities;
25
25
  const _default = (0, _elements.define)(class SubproofAssertion extends _assertion.default {
26
26
  constructor(context, string, node, breakPoint, statements){
27
27
  super(context, string, node, breakPoint);
@@ -42,94 +42,42 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
42
42
  const node = this.getNode(), subproofAssertionNode = node; ///
43
43
  return subproofAssertionNode;
44
44
  }
45
- validate(state, context, continuation) {
46
- let validates;
45
+ validate(state, context, forward, back) {
46
+ let assertion;
47
47
  const subproofAssertionString = this.getString(); ///
48
48
  context.trace(`Validating the '${subproofAssertionString}' subproof assertion...`);
49
- let assertion;
50
49
  assertion = this.findAssertion(context);
51
50
  if (assertion !== null) {
52
51
  const subproofAssertion = assertion; ///
53
52
  context.debug(`The '${subproofAssertionString}' subproof assertion is already present.`);
54
- validates = continuation(subproofAssertion, context);
55
- } else {
56
- assertion = this; ///
57
- const validateStatements = this.validateStatements.bind(this);
58
- validates = all([
59
- validateStatements
60
- ], state, context, (state, context)=>{
61
- let validates;
62
- const validateWhenDeclared = this.validateWhenDeclared.bind(this), validateWhenDerived = this.validateWhenDerived.bind(this);
63
- validates = exists([
64
- validateWhenDeclared,
65
- validateWhenDerived
66
- ], state, context, (state, context)=>{
67
- let validates;
68
- context.addAssertion(assertion);
69
- const subproofAssertion = assertion; ///
70
- validates = continuation(subproofAssertion, context);
71
- return validates;
72
- });
73
- return validates;
74
- });
53
+ return forward(subproofAssertion, context);
75
54
  }
76
- if (validates) {
55
+ assertion = this; ///
56
+ const validateStatements = this.validateStatements.bind(this);
57
+ return all([
58
+ validateStatements
59
+ ], state, context, (state, context, back)=>{
60
+ context.addAssertion(assertion);
61
+ const subproofAssertion = assertion; ///
77
62
  context.debug(`...validated the '${subproofAssertionString}' subproof assertion.`);
78
- }
79
- return validates;
63
+ return forward(subproofAssertion, context, back);
64
+ }, back);
80
65
  }
81
- validateStatements(state, context, continuation) {
82
- let statementsValidate;
66
+ validateStatements(state, context, forward, back) {
83
67
  const subproofAssertionString = this.getString(); ///
84
68
  context.trace(`Validating the '${subproofAssertionString}' subproof assertion's statements...`);
85
- statementsValidate = every(this.statements, (statement, context, continuation)=>{
86
- let statementValidates;
87
- (0, _state.declare)((state)=>{
88
- statementValidates = statement.validate(state, context, (statement, context)=>{
89
- let validates;
90
- validates = continuation(context);
91
- return validates;
92
- });
69
+ return every(this.statements, (statement, context, forward, back)=>{
70
+ return (0, _state.declare)((state)=>{
71
+ return statement.validate(state, context, (statement, context, back)=>{
72
+ return forward(context, back);
73
+ }, back);
93
74
  });
94
- return statementValidates;
95
- }, context, (context)=>{
96
- let validates;
97
- validates = continuation(state, context);
98
- return validates;
99
- });
100
- if (statementsValidate) {
75
+ }, context, (context, back)=>{
101
76
  context.debug(`...validated the '${subproofAssertionString}' subproof assertion's statements.`);
102
- }
103
- return statementsValidate;
104
- }
105
- validateWhenDeclared(state, context, continuation) {
106
- let validatesWhenDeclared = false;
107
- const declared = (0, _state.isDeclared)(state);
108
- if (declared) {
109
- const subproofAssertionString = this.getString(); ///
110
- context.trace(`Validating the '${subproofAssertionString}' declared subproof assertion...`);
111
- validatesWhenDeclared = continuation(state, context);
112
- if (validatesWhenDeclared) {
113
- context.debug(`...validated the '${subproofAssertionString}' declared subproof assertion.`);
114
- }
115
- }
116
- return validatesWhenDeclared;
117
- }
118
- validateWhenDerived(state, context, continuation) {
119
- let validatesWhenDerived = false;
120
- const derived = (0, _state.isDerived)(state);
121
- if (derived) {
122
- const subproofAssertionString = this.getString(); ///
123
- context.trace(`Validating the '${subproofAssertionString}' derived subproof assertion...`);
124
- validatesWhenDerived = true;
125
- validatesWhenDerived = continuation(state, context);
126
- if (validatesWhenDerived) {
127
- context.debug(`...validated the '${subproofAssertionString}' derived subproof assertion.`);
128
- }
129
- }
130
- return validatesWhenDerived;
77
+ return forward(state, context, back);
78
+ }, back);
131
79
  }
132
- unifySubproof(subproof, generalContext, specificContext, continuation) {
80
+ unifySubproof(subproof, generalContext, specificContext, forward, back) {
133
81
  const context = specificContext, subproofString = subproof.getString(), subproofAssertionString = this.getString(); ///
134
82
  context.trace(`Unifying the '${subproofString}' subproof with the '${subproofAssertionString}' subproof assertion...`);
135
83
  const lastStep = subproof.getLastStep();
@@ -150,7 +98,7 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
150
98
  });
151
99
  });
152
100
  }
153
- unifyLastStep(lastStep, generalContext, specificContext, continuation) {
101
+ unifyLastStep(lastStep, generalContext, specificContext, forward, back) {
154
102
  const context = specificContext, lastStepString = lastStep.getString(), deducedStatement = this.getDeducedStatement(), deducedStatementString = deducedStatement.getString();
155
103
  context.trace(`Unifying the '${lastStepString}' last step with the '${deducedStatementString}' deduced statement...`);
156
104
  const lastStepContext = lastStep.getContext();
@@ -172,7 +120,7 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
172
120
  }, specificContext);
173
121
  }, specificContext, context);
174
122
  }
175
- unifySupposition(supposition, supposedStatement, generalContext, specificContext, continuation) {
123
+ unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back) {
176
124
  const context = specificContext, suppositionString = supposition.getString(), supposedStatementString = supposedStatement.getString();
177
125
  context.trace(`Unifying the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement...`);
178
126
  const suppositionContext = supposition.getContext();
@@ -194,18 +142,18 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
194
142
  }, specificContext);
195
143
  }, specificContext, context);
196
144
  }
197
- unifySuppositions(suppositions, generalContext, specificContext, continuation) {
145
+ unifySuppositions(suppositions, generalContext, specificContext, forward, back) {
198
146
  const supposedStatements = this.getSupposedStatements(), suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
199
147
  if (suppositionsLength !== supposedStatementsLength) {
200
148
  const suppositionsUnify = false;
201
149
  return continuation(suppositionsUnify);
202
150
  }
203
151
  let index = suppositionsLength; ///
204
- return backwardsEvery(suppositions, (supposition, continuation)=>{
152
+ return backwardsEvery(suppositions, (supposition, forward, back)=>{
205
153
  index--;
206
154
  const supposedStatement = supposedStatements[index];
207
- return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, continuation);
208
- }, continuation);
155
+ return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back);
156
+ }, forward, back);
209
157
  }
210
158
  static name = "SubproofAssertion";
211
159
  static fromJSON(json, context) {
@@ -233,4 +181,4 @@ function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
233
181
  return statements;
234
182
  }
235
183
 
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZGVjbGFyZSwgaXNEZXJpdmVkLCBpc0RlY2xhcmVkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGxhc3QsIGZyb250IH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU3VicHJvb2ZBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldERlZHVjZWRTdGF0ZW1lbnQoKSB7XG4gICAgY29uc3QgbGFzdFN0YXRlbWVudCA9IGxhc3QodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gbGFzdFN0YXRlbWVudDsgLy8vXG5cbiAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN1cHBvc2VkU3RhdGVtZW50cygpIHtcbiAgICBjb25zdCBmcm9udFN0YXRlbWVudHMgPSBmcm9udCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IGZyb250U3RhdGVtZW50czsgIC8vL1xuXG4gICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudHMuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRzXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN1YnByb29mQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudHMoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGF0ZW1lbnRzVmFsaWRhdGU7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy4uLmApO1xuXG4gICAgc3RhdGVtZW50c1ZhbGlkYXRlID0gZXZlcnkodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG5cbiAgICAgIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudHNWYWxpZGF0ZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudHNWYWxpZGF0ZTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlY2xhcmVkKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlY2xhcmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZWNsYXJlZCA9IGlzRGVjbGFyZWQoc3RhdGUpO1xuXG4gICAgaWYgKGRlY2xhcmVkKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZWNsYXJlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG5cbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICB1bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGxhc3RTdGVwID0gc3VicHJvb2YuZ2V0TGFzdFN0ZXAoKTtcblxuICAgIHJldHVybiB0aGlzLnVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChsYXN0U3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKCFsYXN0U3RlcFVuaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VwcG9zaXRpb25zVW5pZnkpID0+IHtcbiAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgc3VicHJvb2ZVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5nZXREZWR1Y2VkU3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFN0cmluZyA9IGRlZHVjZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bGFzdFN0ZXBTdHJpbmd9JyBsYXN0IHN0ZXAgd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50Li4uYClcblxuICAgIGNvbnN0IGxhc3RTdGVwQ29udGV4dCA9IGxhc3RTdGVwLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGxhc3RTdGVwQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RTdGVwU3RhdGVtZW50ID0gbGFzdFN0ZXAuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQobGFzdFN0ZXBTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChsYXN0U3RlcFN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgbGFzdFN0ZXBVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAobGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBsYXN0U3RlcFVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChsYXN0U3RlcFVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24obGFzdFN0ZXBVbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VwcG9zaXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBzdXBwb3NpdGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50cygpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0xlbmd0aCA9IHN1cHBvc2l0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoID0gc3VwcG9zZWRTdGF0ZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggIT09IHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCkge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zVW5pZnkgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNVbmlmeSk7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gc3VwcG9zaXRpb25zTGVuZ3RoOyAvLy9cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBpbmRleC0tO1xuXG4gICAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudCA9IHN1cHBvc2VkU3RhdGVtZW50c1tpbmRleF07XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHN1YnByb29yQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cyk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb3JBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZXROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWV0Tm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cbiJdLCJuYW1lcyI6WyJsYXN0IiwiZnJvbnQiLCJhcnJheVV0aWxpdGllcyIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50cyIsImdldFN0YXRlbWVudHMiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwibGFzdFN0YXRlbWVudCIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXRTdXBwb3NlZFN0YXRlbWVudHMiLCJmcm9udFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHMiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInN1YnByb29mQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhc3NlcnRpb24iLCJmaW5kQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50cyIsImJpbmQiLCJhbGwiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRBc3NlcnRpb24iLCJzdGF0ZW1lbnRzVmFsaWRhdGUiLCJldmVyeSIsInN0YXRlbWVudCIsInN0YXRlbWVudFZhbGlkYXRlcyIsImRlY2xhcmUiLCJ2YWxpZGF0ZXNXaGVuRGVjbGFyZWQiLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsInVuaWZ5TGFzdFN0ZXAiLCJsYXN0U3RlcFVuaWZpZXMiLCJzdWJwcm9vZlVuaWZpZXMiLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1VuaWZ5IiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwibGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzIiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zZWRTdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2VkU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb25Db250ZXh0Iiwic3VwcG9zaXRpb25TdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMiLCJzdXBwb3NpdGlvblVuaWZpZXMiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJpbmRleCIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQzRCO2tFQUVyQzswQkFFQzt5QkFDc0I7NkJBQ0E7dUJBQ0U7eUJBQ0k7Ozs7OztBQUVuRCxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQ2hDLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDMUMsRUFBRUMsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMEJBQTBCQyxrQkFBUztJQUM3RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsQ0FBRTtRQUN6RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0QsVUFBVTtJQUN4QjtJQUVBRSxzQkFBc0I7UUFDcEIsTUFBTUMsZ0JBQWdCakIsS0FBSyxJQUFJLENBQUNjLFVBQVUsR0FDcENJLG1CQUFtQkQsZUFBZSxHQUFHO1FBRTNDLE9BQU9DO0lBQ1Q7SUFFQUMsd0JBQXdCO1FBQ3RCLE1BQU1DLGtCQUFrQm5CLE1BQU0sSUFBSSxDQUFDYSxVQUFVLEdBQ3ZDTyxxQkFBcUJELGlCQUFrQixHQUFH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
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYWxsLCBldmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN1YnByb29mQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHM7XG4gIH1cblxuICBnZXREZWR1Y2VkU3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RTdGF0ZW1lbnQgPSBsYXN0KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IGxhc3RTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudHMoKSB7XG4gICAgY29uc3QgZnJvbnRTdGF0ZW1lbnRzID0gZnJvbnQodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSBmcm9udFN0YXRlbWVudHM7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQgKHN1YnByb29mQXNzZXJ0aW9uLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnRzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlU3RhdGVtZW50c1xuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnRzKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuLi5gKTtcblxuICAgIHJldHVybiBldmVyeSh0aGlzLnN0YXRlbWVudHMsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24ncyBzdGF0ZW1lbnRzLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2YuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBsYXN0U3RlcCA9IHN1YnByb29mLmdldExhc3RTdGVwKCk7XG5cbiAgICByZXR1cm4gdGhpcy51bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAobGFzdFN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3VicHJvb2ZVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGlmICghbGFzdFN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VicHJvb2YuZ2V0U3VwcG9zaXRpb25zKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN1cHBvc2l0aW9uc1VuaWZ5KSA9PiB7XG4gICAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICAgIHN1YnByb29mVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBsYXN0U3RlcFN0cmluZyA9IGxhc3RTdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSB0aGlzLmdldERlZHVjZWRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50U3RyaW5nID0gZGVkdWNlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3QgbGFzdFN0ZXBDb250ZXh0ID0gbGFzdFN0ZXAuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gbGFzdFN0ZXBDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbGFzdFN0ZXBTdGF0ZW1lbnQgPSBsYXN0U3RlcC5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChsYXN0U3RlcFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGxhc3RTdGVwU3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBsYXN0U3RlcFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChsYXN0U3RlcFN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGxhc3RTdGVwVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhc3RTdGVwVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFzdFN0ZXBTdHJpbmd9JyBsYXN0IHN0ZXAgd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50LmApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYXN0U3RlcFVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgc3VwcG9zZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VwcG9zaXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBzdXBwb3NpdGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5nZXRTdXBwb3NlZFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25zVW5pZnkpO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IHN1cHBvc2l0aW9uc0xlbmd0aDsgLy8vXG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGluZGV4LS07XG5cbiAgICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zZWRTdGF0ZW1lbnRzW2luZGV4XTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgc3VwcG9zZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGZvcndhcmQsIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN1YnByb29mQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb3JBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYWxsIiwiZXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50cyIsImdldFN0YXRlbWVudHMiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwibGFzdFN0YXRlbWVudCIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXRTdXBwb3NlZFN0YXRlbWVudHMiLCJmcm9udFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHMiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnRzIiwiYmluZCIsImFkZEFzc2VydGlvbiIsInN0YXRlbWVudCIsImRlY2xhcmUiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsInVuaWZ5TGFzdFN0ZXAiLCJsYXN0U3RlcFVuaWZpZXMiLCJzdWJwcm9vZlVuaWZpZXMiLCJjb250aW51YXRpb24iLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1VuaWZ5IiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwibGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzIiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zZWRTdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2VkU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb25Db250ZXh0Iiwic3VwcG9zaXRpb25TdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMiLCJzdXBwb3NpdGlvblVuaWZpZXMiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJpbmRleCIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQzRCO2tFQUVyQzswQkFFQzt1QkFDQzt5QkFDcUI7NkJBQ0E7eUJBQ007Ozs7OztBQUVuRCxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlC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
@@ -80,6 +80,7 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
80
80
  validateWhenDerived
81
81
  ], state, context, (state, context, back)=>{
82
82
  assertion = this; ///
83
+ this.assign(state, context);
83
84
  context.addAssertion(assertion);
84
85
  const typeAssertion = assertion; ///
85
86
  context.debug(`...validated the '${typeAssertionString}' type assertion.`);
@@ -220,4 +221,4 @@ function validateWhenDerived(term, type, state, context, forward, back) {
220
221
  }, back);
221
222
  }
222
223
 
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi90eXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvanNvblwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IHsgdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcbmltcG9ydCB7IGRlcml2ZSwgaXNEZXJpdmVkLCBpc0RlY2xhcmVkLCBpc1RyYW5zaWVudH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSwgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYWxsLCBleGlzdHMgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0VHlwZUFzc2VydGlvbk5Cb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgZGlzY2hhcmdlKGNvbnRleHQpIHtcbiAgICBsZXQgZGlzY2hhcmdlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICBkZXJpdmUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdGhpcy50eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGRpc2NoYXJnZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpc2NoYXJnZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzY2hhcmdlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQodHlwZUFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVUeXBlID0gdGhpcy52YWxpZGF0ZVR5cGUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUeXBlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKHR5cGVBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVR5cGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uJ3MgdHlwZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKVxuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVjbGFyZWQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBkZWNsYXJlZCA9IGlzRGVjbGFyZWQoc3RhdGUpO1xuXG4gICAgaWYgKCFkZWNsYXJlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgZGVjbGFyZWQgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzV2hlbkRlY2xhcmVkID0gZmFsc2U7XG5cbiAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb1R5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG8odGhpcy50eXBlKSxcbiAgICAgICAgICAgICAgdGVybVR5cGVTdXBlclR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc1N1cGVyVHlwZU9mKHRoaXMudHlwZSk7XG5cbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgLy8vXG4gICAgICAgIH0gZWxzZSBpZiAodGVybVR5cGVFcXVhbFRvVHlwZSkge1xuICAgICAgICAgIHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGVybVR5cGVTdXBlclR5cGVPZlR5cGUpIHtcbiAgICAgICAgICBjb25zdCB0ZXJtRXN0YWJsaXNoZWQgPSB0ZXJtLmlzRXN0YWJsaXNoZWQoKTtcblxuICAgICAgICAgIGlmICh0ZXJtRXN0YWJsaXNoZWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGVybSA9IHRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIHR5cGUgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy50eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMudGVybSA9IHRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICBkZXJpdmUoKHN0YXRlKSA9PiB7XG4gICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIHRoaXMudHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcblxuICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG5cbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHVuaWZpZXNJbmRlcGVuZGVudGx5KTtcbiAgfVxuXG4gIGFzc2lnbihzdGF0ZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBpc0Rlcml2ZWQoc3RhdGUpLFxuICAgICAgICAgIHRyYW5zaWVudCA9IGlzVHJhbnNpZW50KHN0YXRlKTtcblxuICAgIGlmIChkZXJpdmVkIHx8IHRyYW5zaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICB2YXJpYWJsZUFzc2lnbWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KHZhcmlhYmxlQXNzaWdtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTixcbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlVHlwZUFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdHlwZSwgc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgcmV0dXJuIHRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIGNvbnN0IHRlcm1Fc3RhYmxpc2hlZCA9IHRlcm0uaXNFc3RhYmxpc2hlZCgpO1xuXG4gICAgICAgIGlmICh0ZXJtRXN0YWJsaXNoZWQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3J3YXJkKHRlcm0sIGNvbnRleHQsIGJhY2spO1xuICB9LCBiYWNrKTtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJleGlzdHMiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJUeXBlQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJnZXRUZXJtIiwiZ2V0VHlwZSIsImdldFR5cGVBc3NlcnRpb25OQm9kZSIsImdldE5vZGUiLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsImRpc2NoYXJnZSIsImRpc2NoYXJnZXMiLCJ0eXBlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZGVyaXZlIiwic3RhdGUiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJkZWJ1ZyIsInZhbGlkYXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJmaW5kQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInZhbGlkYXRlVHlwZSIsImJpbmQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsImFkZEFzc2VydGlvbiIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlY2xhcmVkIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9UeXBlIiwiaXNFcXVhbFRvIiwidGVybVR5cGVTdXBlclR5cGVPZlR5cGUiLCJpc1N1cGVyVHlwZU9mIiwidGVybUVzdGFibGlzaGVkIiwiaXNFc3RhYmxpc2hlZCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwiY29udGludWF0aW9uIiwiYXNzaWduIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJ2YXJpYWJsZUFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uIiwiYWRkQXNzaWdubWVudCIsInRvSlNPTiIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJuYW1lIiwiZ2V0TmFtZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVUeXBlQXNzZXJ0aW9uIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tSlNPTiIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQUE7OztnQ0FoQjJEO2tFQUVyQzswQkFFQzt5QkFDSzs2QkFDYTtzQkFDSTsrQkFDQTt3QkFDTzt1QkFDTTt5QkFDZ0I7Ozs7OztBQUUxRSxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsTUFBTSxFQUFFLEdBQUdDLHFDQUFxQixFQUN2QyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFN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
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi90eXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvanNvblwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IHsgdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcbmltcG9ydCB7IGRlcml2ZSwgaXNEZXJpdmVkLCBpc0RlY2xhcmVkLCBpc1RyYW5zaWVudH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSwgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYWxsLCBleGlzdHMgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0VHlwZUFzc2VydGlvbk5Cb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgZGlzY2hhcmdlKGNvbnRleHQpIHtcbiAgICBsZXQgZGlzY2hhcmdlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICBkZXJpdmUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdGhpcy50eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGRpc2NoYXJnZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpc2NoYXJnZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzY2hhcmdlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQodHlwZUFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVUeXBlID0gdGhpcy52YWxpZGF0ZVR5cGUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUeXBlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgICB0aGlzLmFzc2lnbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZCh0eXBlQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVUeXBlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbidzIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHRoaXMudHlwZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbidzIHR5cGUuYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjaylcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlY2xhcmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVjbGFyZWQgPSBpc0RlY2xhcmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVjbGFyZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy50ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9UeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvKHRoaXMudHlwZSksXG4gICAgICAgICAgICAgIHRlcm1UeXBlU3VwZXJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNTdXBlclR5cGVPZih0aGlzLnR5cGUpO1xuXG4gICAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAgIC8vL1xuICAgICAgICB9IGVsc2UgaWYgKHRlcm1UeXBlRXF1YWxUb1R5cGUpIHtcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRlcm1UeXBlU3VwZXJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgY29uc3QgdGVybUVzdGFibGlzaGVkID0gdGVybS5pc0VzdGFibGlzaGVkKCk7XG5cbiAgICAgICAgICBpZiAodGVybUVzdGFibGlzaGVkKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbGlkYXRlc1doZW5EZWNsYXJlZCkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCB0eXBlIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBpc0Rlcml2ZWQoc3RhdGUpO1xuXG4gICAgaWYgKCFkZXJpdmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVXaGVuRGVyaXZlZCh0aGlzLnRlcm0sIHRoaXMudHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHR5cGUgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgICAgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0aGlzLnRlcm0sIGNvbnRleHQpO1xuXG4gICAgZGVyaXZlKChzdGF0ZSkgPT4ge1xuICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCB0aGlzLnR5cGUsIHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzSW5kZXBlbmRlbnRseSk7XG4gIH1cblxuICBhc3NpZ24oc3RhdGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKSxcbiAgICAgICAgICB0cmFuc2llbnQgPSBpc1RyYW5zaWVudChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCB8fCB0cmFuc2llbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVBc3NpZ21lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCB0eXBlID0gdHlwZUpTT04sXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgdHlwZUFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZVR5cGVBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIHR5cGUsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gIHJldHVybiB0ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgaWYgKHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSkge1xuICAgICAgICBjb25zdCB0ZXJtRXN0YWJsaXNoZWQgPSB0ZXJtLmlzRXN0YWJsaXNoZWQoKTtcblxuICAgICAgICBpZiAodGVybUVzdGFibGlzaGVkKSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9yd2FyZCh0ZXJtLCBjb250ZXh0LCBiYWNrKTtcbiAgfSwgYmFjayk7XG59XG4iXSwibmFtZXMiOlsiYWxsIiwiZXhpc3RzIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZUFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm0iLCJ0eXBlIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRUeXBlQXNzZXJ0aW9uTkJvZGUiLCJnZXROb2RlIiwidHlwZUFzc2VydGlvbk5vZGUiLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VzIiwidHlwZUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsImRlcml2ZSIsInN0YXRlIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZGVidWciLCJ2YWxpZGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwiZmluZEFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZVR5cGUiLCJiaW5kIiwidmFsaWRhdGVXaGVuRGVjbGFyZWQiLCJhc3NpZ24iLCJhZGRBc3NlcnRpb24iLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsImRlY2xhcmVkIiwiaXNEZWNsYXJlZCIsInZhbGlkYXRlc1doZW5EZWNsYXJlZCIsInRlcm1UeXBlIiwidGVybVR5cGVFcXVhbFRvVHlwZSIsImlzRXF1YWxUbyIsInRlcm1UeXBlU3VwZXJUeXBlT2ZUeXBlIiwiaXNTdXBlclR5cGVPZiIsInRlcm1Fc3RhYmxpc2hlZCIsImlzRXN0YWJsaXNoZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidW5pZnlJbmRlcGVuZGVudGx5IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsImNvbnRpbnVhdGlvbiIsInRyYW5zaWVudCIsImlzVHJhbnNpZW50IiwidmFyaWFibGVBc3NpZ21lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbiIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwibmFtZSIsImdldE5hbWUiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlVHlwZUFzc2VydGlvbiIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbUpTT04iLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFrQkE7OztlQUFBOzs7Z0NBaEIyRDtrRUFFckM7MEJBRUM7eUJBQ0s7NkJBQ2E7c0JBQ0k7K0JBQ0E7d0JBQ087dUJBQ007eUJBQ2dCOzs7Ozs7QUFFMUUsTUFBTSxFQUFFQSxHQUFHLEVBQUVDLE1BQU0sRUFBRSxHQUFHQyxxQ0FBcUIsRUFDdkMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixF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
@@ -44,7 +44,7 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
44
44
  let assumption;
45
45
  assumption = this; ///
46
46
  context = this.getContext();
47
- (0, _context.attempt)((context)=>{
47
+ return (0, _context.attempt)((context)=>{
48
48
  const validateStatement = this.validateStatement.bind(this);
49
49
  validates = all([
50
50
  validateStatement
@@ -101,4 +101,4 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
101
101
  }
102
102
  });
103
103
 
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYWJsYXRlLCBhdHRlbXB0LCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSW1wbGljaXRBc3N1bXB0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0VxdWFsVG8oaW1wbGljaXRBc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgYXNzdW1wdGlvbiA9IHRoaXM7ICAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgXyApID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IGFzc3VtcHRpb247ICAvLy9cblxuICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oaW1wbGljaXRBc3N1bXB0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzO1xuXG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXQgYXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBkZWJ1Z2dlclxuXG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBpbXBsaWNpdEFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSW1wbGljaXRBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGltcGxpY2l0QXNzdW1wdGlvbjtcblxuICAgIGFibGF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IGluc3RhbnRpYXRlSW1wbGljaXRBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkltcGxpY2l0QXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRJbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZ2V0Tm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiaXNFcXVhbFRvIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwic3BlY2lmaWNDb250ZXh0IiwiaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhc3N1bXB0aW9uIiwiZ2V0Q29udGV4dCIsImF0dGVtcHQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJhbGwiLCJfIiwiY29tbWl0IiwiZGVidWciLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ1bmlmeVN0YXRlbWVudCIsImdlbmVyYWxDb250ZXh0Iiwic3RhdGVtZW50VW5pZmllcyIsInN0YXRlbWVudFN0cmluZyIsInByb29mQXNzZXJ0aW9uU3RyaW5nIiwibmFtZSIsImZyb21TdGF0ZW1lbnQiLCJhYmxhdGUiLCJpbnN0YW50aWF0ZSIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQiLCJpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBs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
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYWJsYXRlLCBhdHRlbXB0LCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSW1wbGljaXRBc3N1bXB0aW9uIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0VxdWFsVG8oaW1wbGljaXRBc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24uLi5gKTtcblxuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgYXNzdW1wdGlvbiA9IHRoaXM7ICAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIF8gKSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBhc3N1bXB0aW9uOyAgLy8vXG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGltcGxpY2l0QXNzdW1wdGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcztcblxuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXQgYXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgZGVidWdnZXJcblxuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHRoaXMuc3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkltcGxpY2l0QXNzdW1wdGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBpbXBsaWNpdEFzc3VtcHRpb247XG5cbiAgICBhYmxhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZyA9IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50KSxcbiAgICAgICAgICAgICAgc3RyaW5nID0gaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbihzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZ2V0SW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzRXF1YWxUbyIsImltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInNwZWNpZmljQ29udGV4dCIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYXNzdW1wdGlvbiIsImdldENvbnRleHQiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwiYWxsIiwiXyIsImNvbW1pdCIsImRlYnVnIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidW5pZnlTdGF0ZW1lbnQiLCJnZW5lcmFsQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJwcm9vZkFzc2VydGlvblN0cmluZyIsIm5hbWUiLCJmcm9tU3RhdGVtZW50IiwiYWJsYXRlIiwiaW5zdGFudGlhdGUiLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50IiwiaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24iLCJpbXBsaWNpdEFzc3VtcHRpb25G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