occam-verify-cli 1.0.776 → 1.0.785

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 (67) hide show
  1. package/lib/context/branching.js +1 -1
  2. package/lib/context/ephemeral.js +22 -11
  3. package/lib/context/file/nominal.js +4 -4
  4. package/lib/context/nested.js +5 -1
  5. package/lib/context/proof.js +74 -59
  6. package/lib/context.js +20 -20
  7. package/lib/element/assertion/contained.js +9 -3
  8. package/lib/element/assertion/defined.js +28 -22
  9. package/lib/element/assertion/property.js +5 -1
  10. package/lib/element/assertion/satisfies.js +5 -1
  11. package/lib/element/assertion/subproof.js +6 -1
  12. package/lib/element/assertion/type.js +6 -2
  13. package/lib/element/assumption.js +47 -20
  14. package/lib/element/equivalences.js +4 -2
  15. package/lib/element/frame.js +17 -41
  16. package/lib/element/judgement.js +42 -6
  17. package/lib/element/metavariable.js +15 -11
  18. package/lib/element/proofAssertion/step.js +44 -4
  19. package/lib/element/topLevelMetaAssertion.js +9 -9
  20. package/lib/nonTerminalNodeMap.js +1 -3
  21. package/lib/preamble.js +1 -2
  22. package/lib/process/instantiate.js +2 -8
  23. package/lib/process/unify.js +72 -5
  24. package/lib/ruleNames.js +1 -5
  25. package/lib/utilities/context.js +30 -10
  26. package/lib/utilities/element.js +18 -41
  27. package/lib/utilities/json.js +1 -23
  28. package/lib/utilities/string.js +8 -19
  29. package/lib/utilities/unification.js +13 -11
  30. package/lib/utilities/validation.js +17 -10
  31. package/package.json +4 -4
  32. package/src/context/branching.js +1 -1
  33. package/src/context/ephemeral.js +26 -10
  34. package/src/context/file/nominal.js +3 -3
  35. package/src/context/nested.js +6 -0
  36. package/src/context/proof.js +93 -73
  37. package/src/context.js +27 -26
  38. package/src/element/assertion/contained.js +16 -3
  39. package/src/element/assertion/defined.js +32 -23
  40. package/src/element/assertion/property.js +8 -1
  41. package/src/element/assertion/satisfies.js +8 -1
  42. package/src/element/assertion/subproof.js +8 -0
  43. package/src/element/assertion/type.js +8 -1
  44. package/src/element/assumption.js +72 -31
  45. package/src/element/equivalences.js +5 -2
  46. package/src/element/frame.js +29 -66
  47. package/src/element/judgement.js +56 -6
  48. package/src/element/metavariable.js +22 -18
  49. package/src/element/proofAssertion/step.js +4 -3
  50. package/src/element/topLevelMetaAssertion.js +13 -13
  51. package/src/nonTerminalNodeMap.js +0 -3
  52. package/src/preamble.js +0 -1
  53. package/src/process/instantiate.js +2 -6
  54. package/src/process/unify.js +117 -7
  55. package/src/ruleNames.js +0 -1
  56. package/src/utilities/context.js +43 -11
  57. package/src/utilities/element.js +26 -56
  58. package/src/utilities/json.js +0 -26
  59. package/src/utilities/string.js +8 -22
  60. package/src/utilities/unification.js +17 -16
  61. package/src/utilities/validation.js +24 -16
  62. package/lib/element/substitution/metaLevel.js +0 -148
  63. package/lib/node/substitution/metaLevel.js +0 -40
  64. package/lib/utilities/statement.js +0 -71
  65. package/src/element/substitution/metaLevel.js +0 -212
  66. package/src/node/substitution/metaLevel.js +0 -37
  67. package/src/utilities/statement.js +0 -66
@@ -9,6 +9,9 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get unifyAssumption () {
13
+ return unifyAssumption;
14
+ },
12
15
  get unifyMetavariable () {
13
16
  return unifyMetavariable;
14
17
  },
@@ -38,7 +41,7 @@ function _interop_require_default(obj) {
38
41
  };
39
42
  }
40
43
  const { nodeQuery } = _occamlanguages.queryUtilities;
41
- const typeNodeQuery = nodeQuery("/type"), termNodeQuery = nodeQuery("/term"), frameNodeQuery = nodeQuery("/frame"), metaTypeNodeQuery = nodeQuery("/metaType"), statementNodeQuery = nodeQuery("/statement"), termVariableNodeQuery = nodeQuery("/term/variable!"), frameAMetavariableNodeQuery = nodeQuery("/frame/metavariable!"), statementMetavariableNodeQuery = nodeQuery("/statement/metavariable!"), assumptionMetavariableNodeQuery = nodeQuery("/assumption/metavariable!");
44
+ const typeNodeQuery = nodeQuery("/type"), termNodeQuery = nodeQuery("/term"), frameNodeQuery = nodeQuery("/frame"), metaTypeNodeQuery = nodeQuery("/metaType"), statementNodeQuery = nodeQuery("/statement"), metavariableNodeQuery = nodeQuery("/metavariable"), termVariableNodeQuery = nodeQuery("/term/variable!"), frameMetavariableNodeQuery = nodeQuery("/frame/metavariable!"), statementMetavariableNodeQuery = nodeQuery("/statement/metavariable!"), assumptionMetavariableNodeQuery = nodeQuery("/assumption/metavariable!");
42
45
  class MetaLevelPass extends _occamlanguages.ZipPass {
43
46
  static maps = [
44
47
  {
@@ -79,7 +82,7 @@ class MetaLevelPass extends _occamlanguages.ZipPass {
79
82
  }
80
83
  },
81
84
  {
82
- generalNodeQuery: frameAMetavariableNodeQuery,
85
+ generalNodeQuery: frameMetavariableNodeQuery,
83
86
  specificNodeQuery: frameNodeQuery,
84
87
  run: (generalFrameMetavariableNode, specificFrameNode, generalContext, specificContext)=>{
85
88
  let success = false;
@@ -114,6 +117,62 @@ class MetaLevelPass extends _occamlanguages.ZipPass {
114
117
  }
115
118
  ];
116
119
  }
120
+ class AssumptionPass extends _zip.default {
121
+ static maps = [
122
+ {
123
+ generalNodeQuery: statementMetavariableNodeQuery,
124
+ specificNodeQuery: statementNodeQuery,
125
+ run: (generalStatementMetavariableNode, specificStatementNode, generalContext, specificContext)=>{
126
+ let success = false;
127
+ const statementNode = specificStatementNode, metavariableNode = generalStatementMetavariableNode, metavariableName = metavariableNode.getMetavariableName();
128
+ let context;
129
+ context = generalContext; ///
130
+ const metavariable = context.findMetavariableByMetavariableName(metavariableName);
131
+ context = specificContext; ///
132
+ const statement = context.findStatementByStatementNode(statementNode), substitution = null, statementUnifies = metavariable.unifyStatement(statement, substitution, generalContext, specificContext);
133
+ if (statementUnifies) {
134
+ success = true;
135
+ }
136
+ return success;
137
+ }
138
+ },
139
+ {
140
+ generalNodeQuery: metavariableNodeQuery,
141
+ specificNodeQuery: metavariableNodeQuery,
142
+ run: (generalMetavariableNode, specificMetavariableNode, generalContext, specificContext)=>{
143
+ let success = false;
144
+ let context, metavariableNode;
145
+ context = generalContext; ///
146
+ metavariableNode = generalMetavariableNode; ///
147
+ const metavariableName = metavariableNode.getMetavariableName(), metavariable = context.findMetavariableByMetavariableName(metavariableName);
148
+ context = specificContext; ///
149
+ metavariableNode = specificMetavariableNode; ///
150
+ const reference = context.findReferenceByMetavariableNode(metavariableNode), referenceUnifies = metavariable.unifyReference(reference, generalContext, specificContext);
151
+ if (referenceUnifies) {
152
+ success = true;
153
+ }
154
+ return success;
155
+ }
156
+ },
157
+ {
158
+ generalNodeQuery: termVariableNodeQuery,
159
+ specificNodeQuery: termNodeQuery,
160
+ run: (generalTermVariableNode, specificTermNode, generalContext, specificContext)=>{
161
+ let success = false;
162
+ const termNode = specificTermNode, variableNode = generalTermVariableNode, variableIdentifier = variableNode.getVariableIdentifier();
163
+ let context;
164
+ context = generalContext; ///
165
+ const variable = context.findVariableByVariableIdentifier(variableIdentifier);
166
+ context = specificContext; ///
167
+ const term = context.findTermByTermNode(termNode), termUnifies = variable.unifyTerm(term, generalContext, specificContext);
168
+ if (termUnifies) {
169
+ success = true;
170
+ }
171
+ return success;
172
+ }
173
+ }
174
+ ];
175
+ }
117
176
  class CombinatorPass extends _zip.default {
118
177
  static maps = [
119
178
  {
@@ -217,7 +276,7 @@ class MetavariablePass extends _zip.default {
217
276
  class SubstitutionPass extends _zip.default {
218
277
  static maps = [
219
278
  {
220
- generalNodeQuery: frameAMetavariableNodeQuery,
279
+ generalNodeQuery: frameMetavariableNodeQuery,
221
280
  specificNodeQuery: frameNodeQuery,
222
281
  run: (generalFrameMetavariableNode, specificFrameNode, generalContext, specificContext)=>{
223
282
  let success = false;
@@ -273,7 +332,7 @@ class IntrinsicLevelPass extends _zip.default {
273
332
  }
274
333
  ];
275
334
  }
276
- const metaLevelPass = new MetaLevelPass(), combinatorPass = new CombinatorPass(), constructorPass = new ConstructorPass(), metavariablePass = new MetavariablePass(), substitutionPass = new SubstitutionPass(), intrinsicLevelPass = new IntrinsicLevelPass();
335
+ const metaLevelPass = new MetaLevelPass(), assumptionPass = new AssumptionPass(), combinatorPass = new CombinatorPass(), constructorPass = new ConstructorPass(), metavariablePass = new MetavariablePass(), substitutionPass = new SubstitutionPass(), intrinsicLevelPass = new IntrinsicLevelPass();
277
336
  function unifyStatement(generalStatement, specificStatement, generalContext, specificContext) {
278
337
  let statementUnifies = false;
279
338
  const generalStatementNode = generalStatement.getNode(), specificStatementNode = specificStatement.getNode(), generalNode = generalStatementNode, specificNode = specificStatementNode, success = metaLevelPass.run(generalNode, specificNode, generalContext, specificContext);
@@ -282,6 +341,14 @@ function unifyStatement(generalStatement, specificStatement, generalContext, spe
282
341
  }
283
342
  return statementUnifies;
284
343
  }
344
+ function unifyAssumption(generalAssumption, specificAssumption, generalContext, specificContext) {
345
+ let assumptionUnifies = false;
346
+ const generalAssumptionNode = generalAssumption.getNode(), specificAssumptionNode = specificAssumption.getNode(), generalNode = generalAssumptionNode, specificNode = specificAssumptionNode, success = assumptionPass.run(generalNode, specificNode, generalContext, specificContext);
347
+ if (success) {
348
+ assumptionUnifies = true;
349
+ }
350
+ return assumptionUnifies;
351
+ }
285
352
  function unifySubstitution(generalSubstitution, specificSubstitution, generalContext, specificContext) {
286
353
  let substitutionUnifies = false;
287
354
  const generalSubstitutionNode = generalSubstitution.getNode(), specificSubstitutionNode = specificSubstitution.getNode(), generalNode = generalSubstitutionNode, specificNode = specificSubstitutionNode, success = substitutionPass.run(generalNode, specificNode, generalContext, specificContext);
@@ -323,4 +390,4 @@ function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariabl
323
390
  return metavariableUnifiesIntrinsically;
324
391
  }
325
392
 
326
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcywgWmlwUGFzcyBhcyBaaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvemlwXCI7XG5cbmltcG9ydCB7IEZSQU1FX01FVEFfVFlQRV9OQU1FLCBTVEFURU1FTlRfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtTm9kZSwgZnJhbWVGcm9tRnJhbWVOb2RlLCBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IG5vZGVRdWVyeSB9ID0gcXVlcnlVdGlsaXRpZXM7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZVwiKSxcbiAgICAgIHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybVwiKSxcbiAgICAgIGZyYW1lTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2ZyYW1lXCIpLFxuICAgICAgbWV0YVR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YVR5cGVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVBTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2ZyYW1lL21ldGF2YXJpYWJsZSFcIiksXG4gICAgICBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L21ldGF2YXJpYWJsZSFcIiksXG4gICAgICBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2Fzc3VtcHRpb24vbWV0YXZhcmlhYmxlIVwiKTtcblxuY2xhc3MgTWV0YUxldmVsUGFzcyBleHRlbmRzIFppcFBhc3NCYXNlIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0Fzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VVbmlmaWVzID0gbWV0YXZhcmlhYmxlLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRQYXJlbnROb2RlKCk7XG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlOyAvLy9cblxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHNwZWNpZmljU3RhdGVtZW50Tm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogZnJhbWVBTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBmcmFtZU5vZGUgPSBzcGVjaWZpY0ZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgICAgIGZyYW1lVW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeUZyYW1lKGZyYW1lLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBaaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FKTtcblxuICAgICAgICBpZiAobWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICAgICAgICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUgPSAobWV0YVR5cGVOYW1lID09PSBGUkFNRV9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlOyAgLy8vXG5cbiAgICAgICAgICBsZXQgZnJhbWU7XG5cbiAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZS52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGxldCB0ZXJtO1xuXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtID0gdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBaaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGxldCB0ZXJtO1xuXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgdGVybSA9IHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGUgPSBnZW5lcmFsQ29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIFN1YnN0aXR1dGlvblBhc3MgZXh0ZW5kcyBaaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogZnJhbWVBTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBmcmFtZU5vZGUgPSBzcGVjaWZpY0ZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgICAgIGZyYW1lVW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeUZyYW1lKGZyYW1lLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgSW50cmluc2ljTGV2ZWxQYXNzIGV4dGVuZHMgWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY29uc3QgbWV0YUxldmVsUGFzcyA9IG5ldyBNZXRhTGV2ZWxQYXNzKCksXG4gICAgICBjb21iaW5hdG9yUGFzcyA9IG5ldyBDb21iaW5hdG9yUGFzcygpLFxuICAgICAgY29uc3RydWN0b3JQYXNzID0gbmV3IENvbnN0cnVjdG9yUGFzcygpLFxuICAgICAgbWV0YXZhcmlhYmxlUGFzcyA9IG5ldyBNZXRhdmFyaWFibGVQYXNzKCksXG4gICAgICBzdWJzdGl0dXRpb25QYXNzID0gbmV3IFN1YnN0aXR1dGlvblBhc3MoKSxcbiAgICAgIGludHJpbnNpY0xldmVsUGFzcyA9IG5ldyBJbnRyaW5zaWNMZXZlbFBhc3MoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbFN0YXRlbWVudE5vZGUgPSBnZW5lcmFsU3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNTdGF0ZW1lbnROb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN1Y2Nlc3MgPSBtZXRhTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHN0YXRlbWVudFVuaWZpZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVN1YnN0aXR1dGlvbihnZW5lcmFsU3Vic3RpdHV0aW9uLCBzcGVjaWZpY1N1YnN0aXR1dGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgc3Vic3RpdHV0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGdlbmVyYWxTdWJzdGl0dXRpb25Ob2RlID0gZ2VuZXJhbFN1YnN0aXR1dGlvbi5nZXROb2RlKCksXG4gICAgICAgIHNwZWNpZmljU3Vic3RpdHV0aW9uTm9kZSA9IHNwZWNpZmljU3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uTm9kZSwgLy8vXG4gICAgICAgIHNwZWNpZmljTm9kZSA9IHNwZWNpZmljU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdWNjZXNzID0gc3Vic3RpdHV0aW9uUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBzdWJzdGl0dXRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzdWJzdGl0dXRpb25VbmlmaWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlNZXRhdmFyaWFibGUoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZVVuaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBtZXRhdmFyaWFibGVQYXNzLnJ1bihnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIG1ldGF2YXJpYWJsZVVuaWZpZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZVVuaWZpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IodGVybSwgY29uc3RydWN0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtID0gY29uc3RydWN0b3IuZ2V0VGVybSgpLFxuICAgICAgICBjb25zdHJ1Y3RvclRlcm1Ob2RlID0gY29uc3RydWN0b3JUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IGNvbnN0cnVjdG9yUGFzcy5ydW4oY29uc3RydWN0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbWJpbmF0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50ID0gY29tYmluYXRvci5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yU3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IGNvbWJpbmF0b3JQYXNzLnJ1bihjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gaW50cmluc2ljTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseTtcbn1cbiJdLCJuYW1lcyI6WyJ1bmlmeU1ldGF2YXJpYWJsZSIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciIsInVuaWZ5U3Vic3RpdHV0aW9uIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwibm9kZVF1ZXJ5IiwicXVlcnlVdGlsaXRpZXMiLCJ0eXBlTm9kZVF1ZXJ5IiwidGVybU5vZGVRdWVyeSIsImZyYW1lTm9kZVF1ZXJ5IiwibWV0YVR5cGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJ0ZXJtVmFyaWFibGVOb2RlUXVlcnkiLCJmcmFtZUFNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiTWV0YUxldmVsUGFzcyIsIlppcFBhc3NCYXNlIiwibWFwcyIsImdlbmVyYWxOb2RlUXVlcnkiLCJzcGVjaWZpY05vZGVRdWVyeSIsInJ1biIsImdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1Y2Nlc3MiLCJjb250ZXh0IiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsInJlZmVyZW5jZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VVbmlmaWVzIiwidW5pZnlSZWZlcmVuY2UiLCJnZW5lcmFsU3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlUGFyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwiZ2V0U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50VW5pZmllcyIsImdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY0ZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZVVuaWZpZXMiLCJ1bmlmeUZyYW1lIiwiZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwidGVybU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiQ29tYmluYXRvclBhc3MiLCJaaXBQYXNzIiwiZ2VuZXJhbE1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwidmFsaWRhdGUiLCJtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZ2VuZXJhbFR5cGVOb2RlIiwidHlwZU5vZGUiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsIkNvbnN0cnVjdG9yUGFzcyIsIk1ldGF2YXJpYWJsZVBhc3MiLCJ0ZXJtVHlwZSIsImdldFR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsIlN1YnN0aXR1dGlvblBhc3MiLCJJbnRyaW5zaWNMZXZlbFBhc3MiLCJtZXRhTGV2ZWxQYXNzIiwiY29tYmluYXRvclBhc3MiLCJjb25zdHJ1Y3RvclBhc3MiLCJtZXRhdmFyaWFibGVQYXNzIiwic3Vic3RpdHV0aW9uUGFzcyIsImludHJpbnNpY0xldmVsUGFzcyIsImdlbmVyYWxTdGF0ZW1lbnQiLCJzcGVjaWZpY1N0YXRlbWVudCIsImdlbmVyYWxTdGF0ZW1lbnROb2RlIiwiZ2V0Tm9kZSIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbiIsInNwZWNpZmljU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb25Ob2RlIiwic3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwiY29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yVGVybSIsImdldFRlcm0iLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwiY29tYmluYXRvciIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvciIsImNvbWJpbmF0b3JTdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF1YmdCQTtlQUFBQTs7UUE0Q0FDO2VBQUFBOztRQTVFQUM7ZUFBQUE7O1FBNkRBQztlQUFBQTs7UUE3Q0FDO2VBQUFBOztRQThCQUM7ZUFBQUE7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
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcywgWmlwUGFzcyBhcyBaaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvemlwXCI7XG5cbmltcG9ydCB7IEZSQU1FX01FVEFfVFlQRV9OQU1FLCBTVEFURU1FTlRfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtTm9kZSwgZnJhbWVGcm9tRnJhbWVOb2RlLCBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IG5vZGVRdWVyeSB9ID0gcXVlcnlVdGlsaXRpZXM7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZVwiKSxcbiAgICAgIHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybVwiKSxcbiAgICAgIGZyYW1lTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2ZyYW1lXCIpLFxuICAgICAgbWV0YVR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YVR5cGVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgbWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGF2YXJpYWJsZVwiKSxcbiAgICAgIHRlcm1WYXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtL3ZhcmlhYmxlIVwiKSxcbiAgICAgIGZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2ZyYW1lL21ldGF2YXJpYWJsZSFcIiksXG4gICAgICBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L21ldGF2YXJpYWJsZSFcIiksXG4gICAgICBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2Fzc3VtcHRpb24vbWV0YXZhcmlhYmxlIVwiKTtcblxuY2xhc3MgTWV0YUxldmVsUGFzcyBleHRlbmRzIFppcFBhc3NCYXNlIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0Fzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VVbmlmaWVzID0gbWV0YXZhcmlhYmxlLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRQYXJlbnROb2RlKCk7XG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlOyAvLy9cblxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHNwZWNpZmljU3RhdGVtZW50Tm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogZnJhbWVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICAgICAgZnJhbWVVbmlmaWVzID0gbWV0YXZhcmlhYmxlLnVuaWZ5RnJhbWUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChmcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgICAgIHRlcm1VbmlmaWVzID0gdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBBc3N1bXB0aW9uUGFzcyBleHRlbmRzIFppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IG51bGwsXG4gICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IG1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBtZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlOyAgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlVW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBaaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FKTtcblxuICAgICAgICBpZiAobWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICAgICAgICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUgPSAobWV0YVR5cGVOYW1lID09PSBGUkFNRV9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlOyAgLy8vXG5cbiAgICAgICAgICBsZXQgZnJhbWU7XG5cbiAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZS52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGxldCB0ZXJtO1xuXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtID0gdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBaaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGxldCB0ZXJtO1xuXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgdGVybSA9IHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGUgPSBnZW5lcmFsQ29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIFN1YnN0aXR1dGlvblBhc3MgZXh0ZW5kcyBaaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogZnJhbWVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICAgICAgZnJhbWVVbmlmaWVzID0gbWV0YXZhcmlhYmxlLnVuaWZ5RnJhbWUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChmcmFtZVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgICAgIHRlcm1VbmlmaWVzID0gdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBJbnRyaW5zaWNMZXZlbFBhc3MgZXh0ZW5kcyBaaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgICAgIHRlcm1VbmlmaWVzID0gdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBtZXRhTGV2ZWxQYXNzID0gbmV3IE1ldGFMZXZlbFBhc3MoKSxcbiAgICAgIGFzc3VtcHRpb25QYXNzID0gbmV3IEFzc3VtcHRpb25QYXNzKCksXG4gICAgICBjb21iaW5hdG9yUGFzcyA9IG5ldyBDb21iaW5hdG9yUGFzcygpLFxuICAgICAgY29uc3RydWN0b3JQYXNzID0gbmV3IENvbnN0cnVjdG9yUGFzcygpLFxuICAgICAgbWV0YXZhcmlhYmxlUGFzcyA9IG5ldyBNZXRhdmFyaWFibGVQYXNzKCksXG4gICAgICBzdWJzdGl0dXRpb25QYXNzID0gbmV3IFN1YnN0aXR1dGlvblBhc3MoKSxcbiAgICAgIGludHJpbnNpY0xldmVsUGFzcyA9IG5ldyBJbnRyaW5zaWNMZXZlbFBhc3MoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbFN0YXRlbWVudE5vZGUgPSBnZW5lcmFsU3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNTdGF0ZW1lbnROb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgIHN1Y2Nlc3MgPSBtZXRhTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHN0YXRlbWVudFVuaWZpZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeUFzc3VtcHRpb24oZ2VuZXJhbEFzc3VtcHRpb24sIHNwZWNpZmljQXNzdW1wdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgYXNzdW1wdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsQXNzdW1wdGlvbk5vZGUgPSBnZW5lcmFsQXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgIHNwZWNpZmljQXNzdW1wdGlvbk5vZGUgPSBzcGVjaWZpY0Fzc3VtcHRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxBc3N1bXB0aW9uTm9kZSwgLy8vXG4gICAgICAgIHNwZWNpZmljTm9kZSA9IHNwZWNpZmljQXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3VjY2VzcyA9IGFzc3VtcHRpb25QYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIGFzc3VtcHRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhc3N1bXB0aW9uVW5pZmllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3Vic3RpdHV0aW9uKGdlbmVyYWxTdWJzdGl0dXRpb24sIHNwZWNpZmljU3Vic3RpdHV0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBzdWJzdGl0dXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbk5vZGUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICBzcGVjaWZpY1N1YnN0aXR1dGlvbk5vZGUgPSBzcGVjaWZpY1N1YnN0aXR1dGlvbi5nZXROb2RlKCksXG4gICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uTm9kZSwgLy8vXG4gICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgc3VjY2VzcyA9IHN1YnN0aXR1dGlvblBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3Vic3RpdHV0aW9uVW5pZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc3Vic3RpdHV0aW9uVW5pZmllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGVVbmlmaWVzID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gbWV0YXZhcmlhYmxlUGFzcy5ydW4oZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBtZXRhdmFyaWFibGVVbmlmaWVzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVVbmlmaWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yKHRlcm0sIGNvbnN0cnVjdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBjb25zdHJ1Y3RvclBhc3MucnVuKGNvbnN0cnVjdG9yVGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudCA9IGNvbWJpbmF0b3IuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gY29tYmluYXRvclN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBjb21iaW5hdG9yUGFzcy5ydW4oY29tYmluYXRvclN0YXRlbWVudE5vZGUsIHN0YXRlbWVudE5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgc3VjY2VzcyA9IGludHJpbnNpY0xldmVsUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHk7XG59XG4iXSwibmFtZXMiOlsidW5pZnlBc3N1bXB0aW9uIiwidW5pZnlNZXRhdmFyaWFibGUiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeVN1YnN0aXR1dGlvbiIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwidHlwZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJmcmFtZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiTWV0YUxldmVsUGFzcyIsIlppcFBhc3NCYXNlIiwibWFwcyIsImdlbmVyYWxOb2RlUXVlcnkiLCJzcGVjaWZpY05vZGVRdWVyeSIsInJ1biIsImdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1Y2Nlc3MiLCJjb250ZXh0IiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsInJlZmVyZW5jZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VVbmlmaWVzIiwidW5pZnlSZWZlcmVuY2UiLCJnZW5lcmFsU3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlUGFyZW50Tm9kZSIsImdldFBhcmVudE5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwiZ2V0U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50VW5pZmllcyIsImdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY0ZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZVVuaWZpZXMiLCJ1bmlmeUZyYW1lIiwiZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwidGVybU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiQXNzdW1wdGlvblBhc3MiLCJaaXBQYXNzIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUiLCJDb21iaW5hdG9yUGFzcyIsImdlbmVyYWxNZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWVTdGF0ZW1lbnRNZXRhVHlwZU5hbWUiLCJTVEFURU1FTlRfTUVUQV9UWVBFX05BTUUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInZhbGlkYXRlIiwibWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUiLCJGUkFNRV9NRVRBX1RZUEVfTkFNRSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsImdlbmVyYWxUeXBlTm9kZSIsInR5cGVOb2RlIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwidHlwZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidmFsaWRhdGVHaXZlblR5cGUiLCJDb25zdHJ1Y3RvclBhc3MiLCJNZXRhdmFyaWFibGVQYXNzIiwidGVybVR5cGUiLCJnZXRUeXBlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJTdWJzdGl0dXRpb25QYXNzIiwiSW50cmluc2ljTGV2ZWxQYXNzIiwibWV0YUxldmVsUGFzcyIsImFzc3VtcHRpb25QYXNzIiwiY29tYmluYXRvclBhc3MiLCJjb25zdHJ1Y3RvclBhc3MiLCJtZXRhdmFyaWFibGVQYXNzIiwic3Vic3RpdHV0aW9uUGFzcyIsImludHJpbnNpY0xldmVsUGFzcyIsImdlbmVyYWxTdGF0ZW1lbnQiLCJzcGVjaWZpY1N0YXRlbWVudCIsImdlbmVyYWxTdGF0ZW1lbnROb2RlIiwiZ2V0Tm9kZSIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwiZ2VuZXJhbEFzc3VtcHRpb24iLCJzcGVjaWZpY0Fzc3VtcHRpb24iLCJhc3N1bXB0aW9uVW5pZmllcyIsImdlbmVyYWxBc3N1bXB0aW9uTm9kZSIsInNwZWNpZmljQXNzdW1wdGlvbk5vZGUiLCJnZW5lcmFsU3Vic3RpdHV0aW9uIiwic3BlY2lmaWNTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25VbmlmaWVzIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbk5vZGUiLCJzcGVjaWZpY1N1YnN0aXR1dGlvbk5vZGUiLCJnZW5lcmFsTWV0YXZhcmlhYmxlIiwic3BlY2lmaWNNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVVbmlmaWVzIiwiY29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yVGVybSIsImdldFRlcm0iLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwiY29tYmluYXRvciIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvciIsImNvbWJpbmF0b3JTdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJjb21iaW5hdG9yU3RhdGVt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
package/lib/ruleNames.js CHANGED
@@ -132,9 +132,6 @@ _export(exports, {
132
132
  get META_LEMMA_RULE_NAME () {
133
133
  return META_LEMMA_RULE_NAME;
134
134
  },
135
- get META_LEVEL_SUBSTITUTION_RULE_NAME () {
136
- return META_LEVEL_SUBSTITUTION_RULE_NAME;
137
- },
138
135
  get META_TYPE_RULE_NAME () {
139
136
  return META_TYPE_RULE_NAME;
140
137
  },
@@ -340,11 +337,10 @@ const VARIABLE_DECLARATION_RULE_NAME = "variableDeclaration";
340
337
  const COMBINATOR_DECLARATION_RULE_NAME = "combinatorDeclaration";
341
338
  const STATEMENT_SUBSTITUTION_RULE_NAME = "statementSubstitution";
342
339
  const REFERENCE_SUBSTITUTION_RULE_NAME = "referenceSubstitution";
343
- const META_LEVEL_SUBSTITUTION_RULE_NAME = "metaLevelSubstitution";
344
340
  const TYPE_PREFIX_DECLARATION_RULE_NAME = "typePrefixDeclaration";
345
341
  const SIMPLE_TYPE_DECLARATION_RULE_NAME = "simpleTypeDeclaration";
346
342
  const CONSTRUCTOR_DECLARATION_RULE_NAME = "constructorDeclaration";
347
343
  const COMPLEX_TYPE_DECLARATION_RULE_NAME = "complexTypeDeclaration";
348
344
  const METAVARIABLE_DECLARATION_RULE_NAME = "metavariableDeclaration";
349
345
 
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ydWxlTmFtZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBSVUxFX1JVTEVfTkFNRSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IFNURVBfUlVMRV9OQU1FID0gXCJzdGVwXCI7XG5leHBvcnQgY29uc3QgVEVSTV9SVUxFX05BTUUgPSBcInRlcm1cIjtcbmV4cG9ydCBjb25zdCBUWVBFX1JVTEVfTkFNRSA9IFwidHlwZVwiO1xuZXhwb3J0IGNvbnN0IFRZUEVTX1JVTEVfTkFNRSA9IFwidHlwZXNcIjtcbmV4cG9ydCBjb25zdCBMRU1NQV9SVUxFX05BTUUgPSBcImxlbW1hXCI7XG5leHBvcnQgY29uc3QgQVhJT01fUlVMRV9OQU1FID0gXCJheGlvbVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JVTEVfTkFNRSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBGUkFNRV9SVUxFX05BTUUgPSBcImZyYW1lXCI7XG5leHBvcnQgY29uc3QgUFJPT0ZfUlVMRV9OQU1FID0gXCJwcm9vZlwiO1xuZXhwb3J0IGNvbnN0IExBQkVMX1JVTEVfTkFNRSA9IFwibGFiZWxcIjtcbmV4cG9ydCBjb25zdCBMQUJFTFNfUlVMRV9OQU1FID0gXCJsYWJlbHNcIjtcbmV4cG9ydCBjb25zdCBUSEVPUkVNX1JVTEVfTkFNRSA9IFwidGhlb3JlbVwiO1xuZXhwb3J0IGNvbnN0IFBSRU1JU0VfUlVMRV9OQU1FID0gXCJwcmVtaXNlXCI7XG5leHBvcnQgY29uc3QgU0VDVElPTl9SVUxFX05BTUUgPSBcInNlY3Rpb25cIjtcbmV4cG9ydCBjb25zdCBBUkdVTUVOVF9SVUxFX05BTUUgPSBcImFyZ3VtZW50XCI7XG5leHBvcnQgY29uc3QgUFJPUEVSVFlfUlVMRV9OQU1FID0gXCJwcm9wZXJ0eVwiO1xuZXhwb3J0IGNvbnN0IEVRVUFMSVRZX1JVTEVfTkFNRSA9IFwiZXF1YWxpdHlcIjtcbmV4cG9ydCBjb25zdCBWQVJJQUJMRV9SVUxFX05BTUUgPSBcInZhcmlhYmxlXCI7XG5leHBvcnQgY29uc3QgU1VCUFJPT0ZfUlVMRV9OQU1FID0gXCJzdWJwcm9vZlwiO1xuZXhwb3J0IGNvbnN0IERPQ1VNRU5UX1JVTEVfTkFNRSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCBSVUxFX0JPRFlfUlVMRV9OQU1FID0gXCJydWxlQm9keVwiO1xuZXhwb3J0IGNvbnN0IE1FVEFfVFlQRV9SVUxFX05BTUUgPSBcIm1ldGFUeXBlXCI7XG5leHBvcnQgY29uc3QgU0lHTkFUVVJFX1JVTEVfTkFNRSA9IFwic2lnbmF0dXJlXCI7XG5leHBvcnQgY29uc3QgUEFSQU1FVEVSX1JVTEVfTkFNRSA9IFwicGFyYW1ldGVyXCI7XG5leHBvcnQgY29uc3QgREVEVUNUSU9OX1JVTEVfTkFNRSA9IFwiZGVkdWN0aW9uXCI7XG5leHBvcnQgY29uc3QgSlVER0VNRU5UX1JVTEVfTkFNRSA9IFwianVkZ2VtZW50XCI7XG5leHBvcnQgY29uc3QgUkVGRVJFTkNFX1JVTEVfTkFNRSA9IFwicmVmZXJlbmNlXCI7XG5leHBvcnQgY29uc3QgU1RBVEVNRU5UX1JVTEVfTkFNRSA9IFwic3RhdGVtZW50XCI7XG5leHBvcnQgY29uc3QgTUVUQV9MRU1NQV9SVUxFX05BTUUgPSBcIm1ldGFMZW1tYVwiO1xuZXhwb3J0IGNvbnN0IEFYSU9NX0JPRFlfUlVMRV9OQU1FID0gXCJheGlvbUJvZHlcIjtcbmV4cG9ydCBjb25zdCBMRU1NQV9CT0RZX1JVTEVfTkFNRSA9IFwibGVtbWFCb2R5XCI7XG5leHBvcnQgY29uc3QgQ09NQklOQVRPUl9SVUxFX05BTUUgPSBcImNvbWJpbmF0b3JcIjtcbmV4cG9ydCBjb25zdCBDT05DTFVTSU9OX1JVTEVfTkFNRSA9IFwiY29uY2x1c2lvblwiO1xuZXhwb3J0IGNvbnN0IENPTkpFQ1RVUkVfUlVMRV9OQU1FID0gXCJjb25qZWN0dXJlXCI7XG5leHBvcnQgY29uc3QgREVSSVZBVElPTl9SVUxFX05BTUUgPSBcImRlcml2YXRpb25cIjtcbmV4cG9ydCBjb25zdCBIWVBPVEhFU0lTX1JVTEVfTkFNRSA9IFwiaHlwb3RoZXNpc1wiO1xuZXhwb3J0IGNvbnN0IEFTU1VNUFRJT05fUlVMRV9OQU1FID0gXCJhc3N1bXB0aW9uXCI7XG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfUlVMRV9OQU1FID0gXCJfXCI7IC8vL1xuZXhwb3J0IGNvbnN0IFJVTEVfSEVBREVSX1JVTEVfTkFNRSA9IFwicnVsZUhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfUFJFRklYX1JVTEVfTkFNRSA9IFwidHlwZVByZWZpeFwiO1xuZXhwb3J0IGNvbnN0IFNVUFBPU0lUSU9OX1JVTEVfTkFNRSA9IFwic3VwcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBDT05TVFJVQ1RPUl9SVUxFX05BTUUgPSBcImNvbnN0cnVjdG9yXCI7XG5leHBvcnQgY29uc3QgTUVUQVRIRU9SRU1fUlVMRV9OQU1FID0gXCJtZXRhdGhlb3JlbVwiO1xuZXhwb3J0IGNvbnN0IEVRVUlWQUxFTkNFX1JVTEVfTkFNRSA9IFwiZXF1aXZhbGVuY2VcIjtcbmV4cG9ydCBjb25zdCBBWElPTV9IRUFERVJfUlVMRV9OQU1FID0gXCJheGlvbUhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IExFTU1BX0hFQURFUl9SVUxFX05BTUUgPSBcImxlbW1hSGVhZGVyXCI7XG5leHBvcnQgY29uc3QgVEhFT1JFTV9CT0RZX1JVTEVfTkFNRSA9IFwidGhlb3JlbUJvZHlcIjtcbmV4cG9ydCBjb25zdCBNRVRBVkFSSUFCTEVfUlVMRV9OQU1FID0gXCJtZXRhdmFyaWFibGVcIjtcbmV4cG9ydCBjb25zdCBFUVVJVkFMRU5DRVNfUlVMRV9OQU1FID0gXCJlcXVpdmFsZW5jZXNcIjtcbmV4cG9ydCBjb25zdCBNRVRBX0FSR1VNRU5UX1JVTEVfTkFNRSA9IFwibWV0YUFyZ3VtZW50XCI7XG5leHBvcnQgY29uc3QgUVVBTElGSUNBVElPTl9SVUxFX05BTUUgPSBcInF1YWxpZmljYXRpb25cIjtcbmV4cG9ydCBjb25zdCBQUk9DRURVUkVfQ0FMTF9SVUxFX05BTUUgPSBcInByb2NlZHVyZUNhbGxcIjtcbmV4cG9ydCBjb25zdCBTVUJfREVSSVZBVElPTl9SVUxFX05BTUUgPSBcInN1YkRlcml2YXRpb25cIjtcbmV4cG9ydCBjb25zdCBUWVBFX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcInR5cGVBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBUSEVPUkVNX0hFQURFUl9SVUxFX05BTUUgPSBcInRoZW9yZW1IZWFkZXJcIjtcbmV4cG9ydCBjb25zdCBNRVRBX0xFTU1BX0JPRFlfUlVMRV9OQU1FID0gXCJtZXRhTGVtbWFCb2R5XCI7XG5leHBvcnQgY29uc3QgQ09OSkVDVFVSRV9CT0RZX1JVTEVfTkFNRSA9IFwiY29uamVjdHVyZUJvZHlcIjtcbmV4cG9ydCBjb25zdCBNRVRBVEhFT1JFTV9CT0RZX1JVTEVfTkFNRSA9IFwibWV0YXRoZW9yZW1Cb2R5XCI7XG5leHBvcnQgY29uc3QgTUVUQV9MRU1NQV9IRUFERVJfUlVMRV9OQU1FID0gXCJtZXRhTGVtbWFIZWFkZXJcIjtcbmV4cG9ydCBjb25zdCBDT05KRUNUVVJFX0hFQURFUl9SVUxFX05BTUUgPSBcImNvbmplY3R1cmVIZWFkZXJcIjtcbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9SRUxBVElPTl9SVUxFX05BTUUgPSBcInByb3BlcnR5UmVsYXRpb25cIjtcbmV4cG9ydCBjb25zdCBERUZJTkVEX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcImRlZmluZWRBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBURVJNX1NVQlNUSVRVVElPTl9SVUxFX05BTUUgPSBcInRlcm1TdWJzdGl0dXRpb25cIjtcbmV4cG9ydCBjb25zdCBNRVRBVEhFT1JFTV9IRUFERVJfUlVMRV9OQU1FID0gXCJtZXRhdGhlb3JlbUhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IFBST1BFUlRZX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcInByb3BlcnR5QXNzZXJ0aW9uXCI7XG5leHBvcnQgY29uc3QgU1VCUFJPT0ZfQVNTRVJUSU9OX1JVTEVfTkFNRSA9IFwic3VicHJvb2ZBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TVUJTVElUVVRJT05fUlVMRV9OQU1FID0gXCJmcmFtZVN1YnN0aXR1dGlvblwiO1xuZXhwb3J0IGNvbnN0IFBBUkVOVEhFU0lTRURfTEFCRUxfUlVMRV9OQU1FID0gXCJwYXJlbnRoZXNpc2VkTGFiZWxcIjtcbmV4cG9ydCBjb25zdCBQUk9DRURVUkVfUkVGRVJFTkNFX1JVTEVfTkFNRSA9IFwicHJvY2VkdXJlUmVmZXJlbmNlXCI7XG5leHBvcnQgY29uc3QgQ09OVEFJTkVEX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcImNvbnRhaW5lZEFzc2VydGlvblwiO1xuZXhwb3J0IGNvbnN0IFNBVElTRklFU19BU1NFUlRJT05fUlVMRV9OQU1FID0gXCJzYXRpc2ZpZXNBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBQQVJFTlRIRVNJU0VEX0xBQkVMU19SVUxFX05BTUUgPSBcInBhcmVudGhlc2lzZWRMYWJlbHNcIjtcbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9ERUNMQVJBVElPTl9SVUxFX05BTUUgPSBcInByb3BlcnR5RGVjbGFyYXRpb25cIjtcbmV4cG9ydCBjb25zdCBWQVJJQUJMRV9ERUNMQVJBVElPTl9SVUxFX05BTUUgPSBcInZhcmlhYmxlRGVjbGFyYXRpb25cIjtcbmV4cG9ydCBjb25zdCBDT01CSU5BVE9SX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSA9IFwiY29tYmluYXRvckRlY2xhcmF0aW9uXCI7XG5leHBvcnQgY29uc3QgU1RBVEVNRU5UX1NVQlNUSVRVVElPTl9SVUxFX05BTUUgPSBcInN0YXRlbWVudFN1YnN0aXR1dGlvblwiO1xuZXhwb3J0IGNvbnN0IFJFRkVSRU5DRV9TVUJTVElUVVRJT05fUlVMRV9OQU1FID0gXCJyZWZlcmVuY2VTdWJzdGl0dXRpb25cIjtcbmV4cG9ydCBjb25zdCBNRVRBX0xFVkVMX1NVQlNUSVRVVElPTl9SVUxFX05BTUUgPSBcIm1ldGFMZXZlbFN1YnN0aXR1dGlvblwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfUFJFRklYX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSA9IFwidHlwZVByZWZpeERlY2xhcmF0aW9uXCI7XG5leHBvcnQgY29uc3QgU0lNUExFX1RZUEVfREVDTEFSQVRJT05fUlVMRV9OQU1FID0gXCJzaW1wbGVUeXBlRGVjbGFyYXRpb25cIjtcbmV4cG9ydCBjb25zdCBDT05TVFJVQ1RPUl9ERUNMQVJBVElPTl9SVUxFX05BTUUgPSBcImNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIjtcbmV4cG9ydCBjb25zdCBDT01QTEVYX1RZUEVfREVDTEFSQVRJT05fUlVMRV9OQU1FID0gXCJjb21wbGV4VHlwZURlY2xhcmF0aW9uXCI7XG5leHBvcnQgY29uc3QgTUVUQVZBUklBQkxFX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSA9IFwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25cIjtcbiJdLCJuYW1lcyI6WyJBUkdVTUVOVF9SVUxFX05BTUUiLCJBU1NVTVBUSU9OX1JVTEVfTkFNRSIsIkFYSU9NX0JPRFlfUlVMRV9OQU1FIiwiQVhJT01fSEVBREVSX1JVTEVfTkFNRSIsIkFYSU9NX1JVTEVfTkFNRSIsIkNPTUJJTkFUT1JfREVDTEFSQVRJT05fUlVMRV9OQU1FIiwiQ09NQklOQVRPUl9SVUxFX05BTUUiLCJDT01QTEVYX1RZUEVfREVDTEFSQVRJT05fUlVMRV9OQU1FIiwiQ09OQ0xVU0lPTl9SVUxFX05BTUUiLCJDT05KRUNUVVJFX0JPRFlfUlVMRV9OQU1FIiwiQ09OSkVDVFVSRV9IRUFERVJfUlVMRV9OQU1FIiwiQ09OSkVDVFVSRV9SVUxFX05BTUUiLCJDT05TVFJVQ1RPUl9ERUNMQVJBVElPTl9SVUxFX05BTUUiLCJDT05TVFJVQ1RPUl9SVUxFX05BTUUiLCJDT05UQUlORURfQVNTRVJUSU9OX1JVTEVfTkFNRSIsIkRFRFVDVElPTl9SVUxFX05BTUUiLCJERUZJTkVEX0FTU0VSVElPTl9SVUxFX05BTUUiLCJERVJJVkFUSU9OX1JVTEVfTkFNRSIsIkRPQ1VNRU5UX1JVTEVfTkFNRSIsIkVRVUFMSVRZX1JVTEVfTkFNRSIsIkVRVUlWQUxFTkNFU19SVUxFX05BTUUiLCJFUVVJVkFMRU5DRV9SVUxFX05BTUUiLCJFUlJPUl9SVUxFX05BTUUiLCJGUkFNRV9SVUxFX05BTUUiLCJGUkFNRV9TVUJTVElUVVRJT05fUlVMRV9OQU1FIiwiSFlQT1RIRVNJU19SVUxFX05BTUUiLCJKVURHRU1FTlRfUlVMRV9OQU1FIiwiTEFCRUxTX1JVTEVfTkFNRSIsIkxBQkVMX1JVTEVfTkFNRSIsIkxFTU1BX0JPRFlfUlVMRV9OQU1FIiwiTEVNTUFfSEVBREVSX1JVTEVfTkFNRSIsIkxFTU1BX1JVTEVfTkFNRSIsIk1FVEFUSEVPUkVNX0JPRFlfUlVMRV9OQU1FIiwiTUVUQVRIRU9SRU1fSEVBREVSX1JVTEVfTkFNRSIsIk1FVEFUSEVPUkVNX1JVTEVfTkFNRSIsIk1FVEFWQVJJQUJMRV9ERUNMQVJBVElPTl9SVUxFX05BTUUiLCJNRVRBVkFSSUFCTEVfUlVMRV9OQU1FIiwiTUVUQV9BUkdVTUVOVF9SVUxFX05BTUUiLCJNRVRBX0xFTU1BX0JPRFlfUlVMRV9OQU1FIiwiTUVUQV9MRU1NQV9IRUFERVJfUlVMRV9OQU1FIiwiTUVUQV9MRU1NQV9SVUxFX05BTUUiLCJNRVRBX0xFVkVMX1NVQlNUSVRVVElPTl9SVUxFX05BTUUiLCJNRVRBX1RZUEVfUlVMRV9OQU1FIiwiUEFSQU1FVEVSX1JVTEVfTkFNRSIsIlBBUkVOVEhFU0lTRURfTEFCRUxTX1JVTEVfTkFNRSIsIlBBUkVOVEhFU0lTRURfTEFCRUxfUlVMRV9OQU1FIiwiUExBQ0VIT0xERVJfUlVMRV9OQU1FIiwiUFJFTUlTRV9SVUxFX05BTUUiLCJQUk9DRURVUkVfQ0FMTF9SVUxFX05BTUUiLCJQUk9DRURVUkVfUkVGRVJFTkNFX1JVTEVfTkFNRSIsIlBST09GX1JVTEVfTkFNRSIsIlBST1BFUlRZX0FTU0VSVElPTl9SVUxFX05BTUUiLCJQUk9QRVJUWV9ERUNMQVJBVElPTl9SVUxFX05BTUUiLCJQUk9QRVJUWV9SRUxBVElPTl9SVUxFX05BTUUiLCJQUk9QRVJUWV9SVUxFX05BTUUiLCJRVUFMSUZJQ0FUSU9OX1JVTEVfTkFNRSIsIlJFRkVSRU5DRV9SVUxFX05BTUUiLCJSRUZFUkVOQ0VfU1VCU1RJVFVUSU9OX1JVTEVfTkFNRSIsIlJVTEVfQk9EWV9SVUxFX05BTUUiLCJSVUxFX0hFQURFUl9SVUxFX05BTUUiLCJSVUxFX1JVTEVfTkFNRSIsIlNBVElTRklFU19BU1NFUlRJT05fUlVMRV9OQU1FIiwiU0VDVElPTl9SVUxFX05BTUUiLCJTSUdOQVRVUkVfUlVMRV9OQU1FIiwiU0lNUExFX1RZUEVfREVDTEFSQVRJT05fUlVMRV9OQU1FIiwiU1RBVEVNRU5UX1JVTEVfTkFNRSIsIlNUQVRFTUVOVF9TVUJTVElUVVRJT05fUlVMRV9OQU1FIiwiU1RFUF9SVUxFX05BTUUiLCJTVUJQUk9PRl9BU1NFUlRJT05fUlVMRV9OQU1FIiwiU1VCUFJPT0ZfUlVMRV9OQU1FIiwiU1VCX0RFUklWQVRJT05fUlVMRV9OQU1FIiwiU1VQUE9TSVRJT05fUlVMRV9OQU1FIiwiVEVSTV9SVUxFX05BTUUiLCJURVJNX1NVQlNUSVRVVElPTl9SVUxFX05BTUUiLCJUSEVPUkVNX0JPRFlfUlVMRV9OQU1FIiwiVEhFT1JFTV9IRUFERVJfUlVMRV9OQU1FIiwiVEhFT1JFTV9SVUxFX05BTUUiLCJUWVBFU19SVUxFX05BTUUiLCJUWVBFX0FTU0VSVElPTl9SVUxFX05BTUUiLCJUWVBFX1BSRUZJWF9ERUNMQVJBVElPTl9SVUxFX05BTUUiLCJUWVBFX1BSRUZJWF9SVUxFX05BTUUiLCJUWVBFX1JVTEVfTkFNRSIsIlZBUklBQkxFX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSIsIlZBUklBQkxFX1JVTEVfTkFNRSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBaUJhQTtlQUFBQTs7UUFzQkFDO2VBQUFBOztRQVBBQztlQUFBQTs7UUFlQUM7ZUFBQUE7O1FBdkNBQztlQUFBQTs7UUFxRUFDO2VBQUFBOztRQTNDQUM7ZUFBQUE7O1FBa0RBQztlQUFBQTs7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
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ydWxlTmFtZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBSVUxFX1JVTEVfTkFNRSA9IFwicnVsZVwiO1xuZXhwb3J0IGNvbnN0IFNURVBfUlVMRV9OQU1FID0gXCJzdGVwXCI7XG5leHBvcnQgY29uc3QgVEVSTV9SVUxFX05BTUUgPSBcInRlcm1cIjtcbmV4cG9ydCBjb25zdCBUWVBFX1JVTEVfTkFNRSA9IFwidHlwZVwiO1xuZXhwb3J0IGNvbnN0IFRZUEVTX1JVTEVfTkFNRSA9IFwidHlwZXNcIjtcbmV4cG9ydCBjb25zdCBMRU1NQV9SVUxFX05BTUUgPSBcImxlbW1hXCI7XG5leHBvcnQgY29uc3QgQVhJT01fUlVMRV9OQU1FID0gXCJheGlvbVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JVTEVfTkFNRSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBGUkFNRV9SVUxFX05BTUUgPSBcImZyYW1lXCI7XG5leHBvcnQgY29uc3QgUFJPT0ZfUlVMRV9OQU1FID0gXCJwcm9vZlwiO1xuZXhwb3J0IGNvbnN0IExBQkVMX1JVTEVfTkFNRSA9IFwibGFiZWxcIjtcbmV4cG9ydCBjb25zdCBMQUJFTFNfUlVMRV9OQU1FID0gXCJsYWJlbHNcIjtcbmV4cG9ydCBjb25zdCBUSEVPUkVNX1JVTEVfTkFNRSA9IFwidGhlb3JlbVwiO1xuZXhwb3J0IGNvbnN0IFBSRU1JU0VfUlVMRV9OQU1FID0gXCJwcmVtaXNlXCI7XG5leHBvcnQgY29uc3QgU0VDVElPTl9SVUxFX05BTUUgPSBcInNlY3Rpb25cIjtcbmV4cG9ydCBjb25zdCBBUkdVTUVOVF9SVUxFX05BTUUgPSBcImFyZ3VtZW50XCI7XG5leHBvcnQgY29uc3QgUFJPUEVSVFlfUlVMRV9OQU1FID0gXCJwcm9wZXJ0eVwiO1xuZXhwb3J0IGNvbnN0IEVRVUFMSVRZX1JVTEVfTkFNRSA9IFwiZXF1YWxpdHlcIjtcbmV4cG9ydCBjb25zdCBWQVJJQUJMRV9SVUxFX05BTUUgPSBcInZhcmlhYmxlXCI7XG5leHBvcnQgY29uc3QgU1VCUFJPT0ZfUlVMRV9OQU1FID0gXCJzdWJwcm9vZlwiO1xuZXhwb3J0IGNvbnN0IERPQ1VNRU5UX1JVTEVfTkFNRSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCBSVUxFX0JPRFlfUlVMRV9OQU1FID0gXCJydWxlQm9keVwiO1xuZXhwb3J0IGNvbnN0IE1FVEFfVFlQRV9SVUxFX05BTUUgPSBcIm1ldGFUeXBlXCI7XG5leHBvcnQgY29uc3QgU0lHTkFUVVJFX1JVTEVfTkFNRSA9IFwic2lnbmF0dXJlXCI7XG5leHBvcnQgY29uc3QgUEFSQU1FVEVSX1JVTEVfTkFNRSA9IFwicGFyYW1ldGVyXCI7XG5leHBvcnQgY29uc3QgREVEVUNUSU9OX1JVTEVfTkFNRSA9IFwiZGVkdWN0aW9uXCI7XG5leHBvcnQgY29uc3QgSlVER0VNRU5UX1JVTEVfTkFNRSA9IFwianVkZ2VtZW50XCI7XG5leHBvcnQgY29uc3QgUkVGRVJFTkNFX1JVTEVfTkFNRSA9IFwicmVmZXJlbmNlXCI7XG5leHBvcnQgY29uc3QgU1RBVEVNRU5UX1JVTEVfTkFNRSA9IFwic3RhdGVtZW50XCI7XG5leHBvcnQgY29uc3QgTUVUQV9MRU1NQV9SVUxFX05BTUUgPSBcIm1ldGFMZW1tYVwiO1xuZXhwb3J0IGNvbnN0IEFYSU9NX0JPRFlfUlVMRV9OQU1FID0gXCJheGlvbUJvZHlcIjtcbmV4cG9ydCBjb25zdCBMRU1NQV9CT0RZX1JVTEVfTkFNRSA9IFwibGVtbWFCb2R5XCI7XG5leHBvcnQgY29uc3QgQ09NQklOQVRPUl9SVUxFX05BTUUgPSBcImNvbWJpbmF0b3JcIjtcbmV4cG9ydCBjb25zdCBDT05DTFVTSU9OX1JVTEVfTkFNRSA9IFwiY29uY2x1c2lvblwiO1xuZXhwb3J0IGNvbnN0IENPTkpFQ1RVUkVfUlVMRV9OQU1FID0gXCJjb25qZWN0dXJlXCI7XG5leHBvcnQgY29uc3QgREVSSVZBVElPTl9SVUxFX05BTUUgPSBcImRlcml2YXRpb25cIjtcbmV4cG9ydCBjb25zdCBIWVBPVEhFU0lTX1JVTEVfTkFNRSA9IFwiaHlwb3RoZXNpc1wiO1xuZXhwb3J0IGNvbnN0IEFTU1VNUFRJT05fUlVMRV9OQU1FID0gXCJhc3N1bXB0aW9uXCI7XG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfUlVMRV9OQU1FID0gXCJfXCI7IC8vL1xuZXhwb3J0IGNvbnN0IFJVTEVfSEVBREVSX1JVTEVfTkFNRSA9IFwicnVsZUhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IFRZUEVfUFJFRklYX1JVTEVfTkFNRSA9IFwidHlwZVByZWZpeFwiO1xuZXhwb3J0IGNvbnN0IFNVUFBPU0lUSU9OX1JVTEVfTkFNRSA9IFwic3VwcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBDT05TVFJVQ1RPUl9SVUxFX05BTUUgPSBcImNvbnN0cnVjdG9yXCI7XG5leHBvcnQgY29uc3QgTUVUQVRIRU9SRU1fUlVMRV9OQU1FID0gXCJtZXRhdGhlb3JlbVwiO1xuZXhwb3J0IGNvbnN0IEVRVUlWQUxFTkNFX1JVTEVfTkFNRSA9IFwiZXF1aXZhbGVuY2VcIjtcbmV4cG9ydCBjb25zdCBBWElPTV9IRUFERVJfUlVMRV9OQU1FID0gXCJheGlvbUhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IExFTU1BX0hFQURFUl9SVUxFX05BTUUgPSBcImxlbW1hSGVhZGVyXCI7XG5leHBvcnQgY29uc3QgVEhFT1JFTV9CT0RZX1JVTEVfTkFNRSA9IFwidGhlb3JlbUJvZHlcIjtcbmV4cG9ydCBjb25zdCBNRVRBVkFSSUFCTEVfUlVMRV9OQU1FID0gXCJtZXRhdmFyaWFibGVcIjtcbmV4cG9ydCBjb25zdCBFUVVJVkFMRU5DRVNfUlVMRV9OQU1FID0gXCJlcXVpdmFsZW5jZXNcIjtcbmV4cG9ydCBjb25zdCBNRVRBX0FSR1VNRU5UX1JVTEVfTkFNRSA9IFwibWV0YUFyZ3VtZW50XCI7XG5leHBvcnQgY29uc3QgUVVBTElGSUNBVElPTl9SVUxFX05BTUUgPSBcInF1YWxpZmljYXRpb25cIjtcbmV4cG9ydCBjb25zdCBQUk9DRURVUkVfQ0FMTF9SVUxFX05BTUUgPSBcInByb2NlZHVyZUNhbGxcIjtcbmV4cG9ydCBjb25zdCBTVUJfREVSSVZBVElPTl9SVUxFX05BTUUgPSBcInN1YkRlcml2YXRpb25cIjtcbmV4cG9ydCBjb25zdCBUWVBFX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcInR5cGVBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBUSEVPUkVNX0hFQURFUl9SVUxFX05BTUUgPSBcInRoZW9yZW1IZWFkZXJcIjtcbmV4cG9ydCBjb25zdCBNRVRBX0xFTU1BX0JPRFlfUlVMRV9OQU1FID0gXCJtZXRhTGVtbWFCb2R5XCI7XG5leHBvcnQgY29uc3QgQ09OSkVDVFVSRV9CT0RZX1JVTEVfTkFNRSA9IFwiY29uamVjdHVyZUJvZHlcIjtcbmV4cG9ydCBjb25zdCBNRVRBVEhFT1JFTV9CT0RZX1JVTEVfTkFNRSA9IFwibWV0YXRoZW9yZW1Cb2R5XCI7XG5leHBvcnQgY29uc3QgTUVUQV9MRU1NQV9IRUFERVJfUlVMRV9OQU1FID0gXCJtZXRhTGVtbWFIZWFkZXJcIjtcbmV4cG9ydCBjb25zdCBDT05KRUNUVVJFX0hFQURFUl9SVUxFX05BTUUgPSBcImNvbmplY3R1cmVIZWFkZXJcIjtcbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9SRUxBVElPTl9SVUxFX05BTUUgPSBcInByb3BlcnR5UmVsYXRpb25cIjtcbmV4cG9ydCBjb25zdCBERUZJTkVEX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcImRlZmluZWRBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBURVJNX1NVQlNUSVRVVElPTl9SVUxFX05BTUUgPSBcInRlcm1TdWJzdGl0dXRpb25cIjtcbmV4cG9ydCBjb25zdCBNRVRBVEhFT1JFTV9IRUFERVJfUlVMRV9OQU1FID0gXCJtZXRhdGhlb3JlbUhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IFBST1BFUlRZX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcInByb3BlcnR5QXNzZXJ0aW9uXCI7XG5leHBvcnQgY29uc3QgU1VCUFJPT0ZfQVNTRVJUSU9OX1JVTEVfTkFNRSA9IFwic3VicHJvb2ZBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBGUkFNRV9TVUJTVElUVVRJT05fUlVMRV9OQU1FID0gXCJmcmFtZVN1YnN0aXR1dGlvblwiO1xuZXhwb3J0IGNvbnN0IFBBUkVOVEhFU0lTRURfTEFCRUxfUlVMRV9OQU1FID0gXCJwYXJlbnRoZXNpc2VkTGFiZWxcIjtcbmV4cG9ydCBjb25zdCBQUk9DRURVUkVfUkVGRVJFTkNFX1JVTEVfTkFNRSA9IFwicHJvY2VkdXJlUmVmZXJlbmNlXCI7XG5leHBvcnQgY29uc3QgQ09OVEFJTkVEX0FTU0VSVElPTl9SVUxFX05BTUUgPSBcImNvbnRhaW5lZEFzc2VydGlvblwiO1xuZXhwb3J0IGNvbnN0IFNBVElTRklFU19BU1NFUlRJT05fUlVMRV9OQU1FID0gXCJzYXRpc2ZpZXNBc3NlcnRpb25cIjtcbmV4cG9ydCBjb25zdCBQQVJFTlRIRVNJU0VEX0xBQkVMU19SVUxFX05BTUUgPSBcInBhcmVudGhlc2lzZWRMYWJlbHNcIjtcbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9ERUNMQVJBVElPTl9SVUxFX05BTUUgPSBcInByb3BlcnR5RGVjbGFyYXRpb25cIjtcbmV4cG9ydCBjb25zdCBWQVJJQUJMRV9ERUNMQVJBVElPTl9SVUxFX05BTUUgPSBcInZhcmlhYmxlRGVjbGFyYXRpb25cIjtcbmV4cG9ydCBjb25zdCBDT01CSU5BVE9SX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSA9IFwiY29tYmluYXRvckRlY2xhcmF0aW9uXCI7XG5leHBvcnQgY29uc3QgU1RBVEVNRU5UX1NVQlNUSVRVVElPTl9SVUxFX05BTUUgPSBcInN0YXRlbWVudFN1YnN0aXR1dGlvblwiO1xuZXhwb3J0IGNvbnN0IFJFRkVSRU5DRV9TVUJTVElUVVRJT05fUlVMRV9OQU1FID0gXCJyZWZlcmVuY2VTdWJzdGl0dXRpb25cIjtcbmV4cG9ydCBjb25zdCBUWVBFX1BSRUZJWF9ERUNMQVJBVElPTl9SVUxFX05BTUUgPSBcInR5cGVQcmVmaXhEZWNsYXJhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFNJTVBMRV9UWVBFX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSA9IFwic2ltcGxlVHlwZURlY2xhcmF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ09OU1RSVUNUT1JfREVDTEFSQVRJT05fUlVMRV9OQU1FID0gXCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ09NUExFWF9UWVBFX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSA9IFwiY29tcGxleFR5cGVEZWNsYXJhdGlvblwiO1xuZXhwb3J0IGNvbnN0IE1FVEFWQVJJQUJMRV9ERUNMQVJBVElPTl9SVUxFX05BTUUgPSBcIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uXCI7XG4iXSwibmFtZXMiOlsiQVJHVU1FTlRfUlVMRV9OQU1FIiwiQVNTVU1QVElPTl9SVUxFX05BTUUiLCJBWElPTV9CT0RZX1JVTEVfTkFNRSIsIkFYSU9NX0hFQURFUl9SVUxFX05BTUUiLCJBWElPTV9SVUxFX05BTUUiLCJDT01CSU5BVE9SX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSIsIkNPTUJJTkFUT1JfUlVMRV9OQU1FIiwiQ09NUExFWF9UWVBFX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSIsIkNPTkNMVVNJT05fUlVMRV9OQU1FIiwiQ09OSkVDVFVSRV9CT0RZX1JVTEVfTkFNRSIsIkNPTkpFQ1RVUkVfSEVBREVSX1JVTEVfTkFNRSIsIkNPTkpFQ1RVUkVfUlVMRV9OQU1FIiwiQ09OU1RSVUNUT1JfREVDTEFSQVRJT05fUlVMRV9OQU1FIiwiQ09OU1RSVUNUT1JfUlVMRV9OQU1FIiwiQ09OVEFJTkVEX0FTU0VSVElPTl9SVUxFX05BTUUiLCJERURVQ1RJT05fUlVMRV9OQU1FIiwiREVGSU5FRF9BU1NFUlRJT05fUlVMRV9OQU1FIiwiREVSSVZBVElPTl9SVUxFX05BTUUiLCJET0NVTUVOVF9SVUxFX05BTUUiLCJFUVVBTElUWV9SVUxFX05BTUUiLCJFUVVJVkFMRU5DRVNfUlVMRV9OQU1FIiwiRVFVSVZBTEVOQ0VfUlVMRV9OQU1FIiwiRVJST1JfUlVMRV9OQU1FIiwiRlJBTUVfUlVMRV9OQU1FIiwiRlJBTUVfU1VCU1RJVFVUSU9OX1JVTEVfTkFNRSIsIkhZUE9USEVTSVNfUlVMRV9OQU1FIiwiSlVER0VNRU5UX1JVTEVfTkFNRSIsIkxBQkVMU19SVUxFX05BTUUiLCJMQUJFTF9SVUxFX05BTUUiLCJMRU1NQV9CT0RZX1JVTEVfTkFNRSIsIkxFTU1BX0hFQURFUl9SVUxFX05BTUUiLCJMRU1NQV9SVUxFX05BTUUiLCJNRVRBVEhFT1JFTV9CT0RZX1JVTEVfTkFNRSIsIk1FVEFUSEVPUkVNX0hFQURFUl9SVUxFX05BTUUiLCJNRVRBVEhFT1JFTV9SVUxFX05BTUUiLCJNRVRBVkFSSUFCTEVfREVDTEFSQVRJT05fUlVMRV9OQU1FIiwiTUVUQVZBUklBQkxFX1JVTEVfTkFNRSIsIk1FVEFfQVJHVU1FTlRfUlVMRV9OQU1FIiwiTUVUQV9MRU1NQV9CT0RZX1JVTEVfTkFNRSIsIk1FVEFfTEVNTUFfSEVBREVSX1JVTEVfTkFNRSIsIk1FVEFfTEVNTUFfUlVMRV9OQU1FIiwiTUVUQV9UWVBFX1JVTEVfTkFNRSIsIlBBUkFNRVRFUl9SVUxFX05BTUUiLCJQQVJFTlRIRVNJU0VEX0xBQkVMU19SVUxFX05BTUUiLCJQQVJFTlRIRVNJU0VEX0xBQkVMX1JVTEVfTkFNRSIsIlBMQUNFSE9MREVSX1JVTEVfTkFNRSIsIlBSRU1JU0VfUlVMRV9OQU1FIiwiUFJPQ0VEVVJFX0NBTExfUlVMRV9OQU1FIiwiUFJPQ0VEVVJFX1JFRkVSRU5DRV9SVUxFX05BTUUiLCJQUk9PRl9SVUxFX05BTUUiLCJQUk9QRVJUWV9BU1NFUlRJT05fUlVMRV9OQU1FIiwiUFJPUEVSVFlfREVDTEFSQVRJT05fUlVMRV9OQU1FIiwiUFJPUEVSVFlfUkVMQVRJT05fUlVMRV9OQU1FIiwiUFJPUEVSVFlfUlVMRV9OQU1FIiwiUVVBTElGSUNBVElPTl9SVUxFX05BTUUiLCJSRUZFUkVOQ0VfUlVMRV9OQU1FIiwiUkVGRVJFTkNFX1NVQlNUSVRVVElPTl9SVUxFX05BTUUiLCJSVUxFX0JPRFlfUlVMRV9OQU1FIiwiUlVMRV9IRUFERVJfUlVMRV9OQU1FIiwiUlVMRV9SVUxFX05BTUUiLCJTQVRJU0ZJRVNfQVNTRVJUSU9OX1JVTEVfTkFNRSIsIlNFQ1RJT05fUlVMRV9OQU1FIiwiU0lHTkFUVVJFX1JVTEVfTkFNRSIsIlNJTVBMRV9UWVBFX0RFQ0xBUkFUSU9OX1JVTEVfTkFNRSIsIlNUQVRFTUVOVF9SVUxFX05BTUUiLCJTVEFURU1FTlRfU1VCU1RJVFVUSU9OX1JVTEVfTkFNRSIsIlNURVBfUlVMRV9OQU1FIiwiU1VCUFJPT0ZfQVNTRVJUSU9OX1JVTEVfTkFNRSIsIlNVQlBST09GX1JVTEVfTkFNRSIsIlNVQl9ERVJJVkFUSU9OX1JVTEVfTkFNRSIsIlNVUFBPU0lUSU9OX1JVTEVfTkFNRSIsIlRFUk1fUlVMRV9OQU1FIiwiVEVSTV9TVUJTVElUVVRJT05fUlVMRV9OQU1FIiwiVEhFT1JFTV9CT0RZX1JVTEVfTkFNRSIsIlRIRU9SRU1fSEVBREVSX1JVTEVfTkFNRSIsIlRIRU9SRU1fUlVMRV9OQU1FIiwiVFlQRVNfUlVMRV9OQU1FIiwiVFlQRV9BU1NFUlRJT05fUlVMRV9OQU1FIiwiVFlQRV9QUkVGSVhfREVDTEFSQVRJT05fUlVMRV9OQU1FIiwiVFlQRV9QUkVGSVhfUlVMRV9OQU1FIiwiVFlQRV9SVUxFX05BTUUiLCJWQVJJQUJMRV9ERUNMQVJBVElPTl9SVUxFX05BTUUiLCJWQVJJQUJMRV9SVUxFX05BTUUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWlCYUE7ZUFBQUE7O1FBc0JBQztlQUFBQTs7UUFQQUM7ZUFBQUE7O1FBZUFDO2VBQUFBOztRQXZDQUM7ZUFBQUE7O1FBcUVBQztlQUFBQTs7UUEzQ0FDO2VBQUFBOztRQWlEQUM7ZUFBQUE7O1FBaERBQztlQUFBQTs7UUF3QkFDO2VBQUFBOztRQUdBQztlQUFBQTs7UUExQkFDO2VBQUFBOztRQThDQUM7ZUFBQUE7O1FBdENBQztlQUFBQTs7UUE0QkFDO2VBQUFBOztRQTdDQUM7ZUFBQUE7O1FB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
@@ -116,11 +116,7 @@ function nominally(innerFunction) {
116
116
  return innerFunction(context);
117
117
  }
118
118
  function simplify(innerFunction, context) {
119
- let contextExtraneousContext = isContextExtraneousContext(context);
120
- while(contextExtraneousContext){
121
- context = context.getContext();
122
- contextExtraneousContext = isContextExtraneousContext(context);
123
- }
119
+ context = removeExtraneousContexts(context);
124
120
  const ephemeralContext = _ephemeral.default.fromNothing(context);
125
121
  context = ephemeralContext; ///
126
122
  return innerFunction(context);
@@ -135,12 +131,12 @@ function unserialise(innerFunction, json, context) {
135
131
  context = ephemeralContext; ///
136
132
  return innerFunction(json, context);
137
133
  }
138
- async function asyncRestrict(innerFunction, metaLevelSubstitutions, context) {
134
+ async function asyncRestrict(innerFunction, assumptions, context) {
139
135
  if (context === undefined) {
140
- context = metaLevelSubstitutions; ///
141
- metaLevelSubstitutions = null;
136
+ context = assumptions; ///
137
+ assumptions = null;
142
138
  }
143
- const proofContext = _proof.default.fromMetaLevelSubstitutions(metaLevelSubstitutions, context);
139
+ const proofContext = _proof.default.fromAssumptions(assumptions, context);
144
140
  context = proofContext; ///
145
141
  return await innerFunction(context);
146
142
  }
@@ -153,5 +149,29 @@ function isContextExtraneousContext(context) {
153
149
  const contextLiminalContext = context instanceof _liminal.default, contextEphemeralContext = context instanceof _ephemeral.default, contextBranchingContext = context instanceof _branching.default, contextSyntheticContext = context instanceof _synthetic.default, contextExtraneousContext = contextLiminalContext || contextEphemeralContext || contextBranchingContext || contextSyntheticContext;
154
150
  return contextExtraneousContext;
155
151
  }
152
+ function removeExtraneousContexts(context) {
153
+ context = trimExtraneousContexts(context);
154
+ const firstContext = context; ///
155
+ let currentContext = context; ///
156
+ while(currentContext !== null){
157
+ context = currentContext.getContext();
158
+ context = trimExtraneousContexts(context);
159
+ currentContext.setContext(context);
160
+ currentContext = context; ///
161
+ }
162
+ context = firstContext; ///
163
+ return context;
164
+ }
165
+ function trimExtraneousContexts(context) {
166
+ let contextExtraneousContext = isContextExtraneousContext(context);
167
+ while(contextExtraneousContext){
168
+ context = context.getContext();
169
+ if (context === null) {
170
+ break;
171
+ }
172
+ contextExtraneousContext = isContextExtraneousContext(context);
173
+ }
174
+ return context;
175
+ }
156
176
 
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFByb29mQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9wcm9vZlwiO1xuaW1wb3J0IE5lc3RlZENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbmVzdGVkXCI7XG5pbXBvcnQgVGhldGljQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC90aGV0aWNcIjtcbmltcG9ydCBOb21pbmFsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9ub21pbmFsXCI7XG5pbXBvcnQgTGl0ZXJhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbGl0ZXJhbFwiO1xuaW1wb3J0IExpbWluYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpbWluYWxcIjtcbmltcG9ydCBJbGxhdGl2ZUNvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvaWxsYXRpdmVcIjtcbmltcG9ydCBFcGhlbWVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2VwaGVtZXJhbFwiO1xuaW1wb3J0IEJyYW5jaGluZ0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvYnJhbmNoaW5nXCI7XG5pbXBvcnQgU3ludGhldGljQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9zeW50aGV0aWNcIjtcblxuaW1wb3J0IHsgZXBoZW1lcmFsQ29udGV4dEZyb21KU09OLCBlcGhlbWVyYWxDb250ZXh0VG9FcGhlbWVyYWxDb250ZXh0SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gam9pbihpbm5lckZ1bmN0aW9uLCAuLi5jb250ZXh0cykge1xuICBjb25zdCBzeW50aGV0aWNDb250ZXh0ID0gU3ludGhldGljQ29udGV4dC5mcm9tQ29udGV4dHMoLi4uY29udGV4dHMpLFxuICAgICAgICBjb250ZXh0ID0gc3ludGhldGljQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hvb3NlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgYnJhbmNoaW5nQ29udGV4dCA9IEJyYW5jaGluZ0NvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGJyYW5jaGluZ0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlsbGF0aXZlQ29udGV4dCA9IElsbGF0aXZlQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gaWxsYXRpdmVDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgdGhldGljQ29udGV4dCA9IFRoZXRpY0NvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IHRoZXRpY0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2NlbmQoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBuZXN0ZWRDb250ZXh0ID0gTmVzdGVkQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbmVzdGVkQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0ZW1wdChpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHQgPSBFcGhlbWVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBlcGhlbWVyYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaW1pbmFsQ29udGV4dCA9IExpbWluYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaW1pbmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaXRlcmFsQ29udGV4dCA9IExpdGVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaXRlcmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbGx5KGlubmVyRnVuY3Rpb24pIHtcbiAgbGV0IGNvbnRleHQ7XG5cbiAgY29uc3Qgbm9taW5hbENvbnRleHQgPSBOb21pbmFsQ29udGV4dC5mcm9tTm90aGluZygpO1xuXG4gIGNvbnRleHQgPSBub21pbmFsQ29udGV4dDsgLy8vXG5cbiAgY29uc3QgbGl0ZXJhbENvbnRleHQgPSBMaXRlcmFsQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbGl0ZXJhbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsaWZ5KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgbGV0IGNvbnRleHRFeHRyYW5lb3VzQ29udGV4dCA9IGlzQ29udGV4dEV4dHJhbmVvdXNDb250ZXh0KGNvbnRleHQpO1xuXG4gIHdoaWxlIChjb250ZXh0RXh0cmFuZW91c0NvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gY29udGV4dC5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0RXh0cmFuZW91c0NvbnRleHQgPSBpc0NvbnRleHRFeHRyYW5lb3VzQ29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHQgPSBFcGhlbWVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBlcGhlbWVyYWxDb250ZXh0OyAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGlzZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgZXBoZW1lcmFsQ29udGV4dEpTT04gPSBlcGhlbWVyYWxDb250ZXh0VG9FcGhlbWVyYWxDb250ZXh0SlNPTihlcGhlbWVyYWxDb250ZXh0KSxcbiAgICAgICAgY29udGV4dEpTT04gPSBlcGhlbWVyYWxDb250ZXh0SlNPTjsgLy8vXG5cbiAgY29udGV4dCA9IGNvbnRleHRKU09OOyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNlcmlhbGlzZShpbm5lckZ1bmN0aW9uLCBqc29uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHQgPSBlcGhlbWVyYWxDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGVwaGVtZXJhbENvbnRleHQ7IC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGpzb24sIGNvbnRleHQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNSZXN0cmljdChpbm5lckZ1bmN0aW9uLCBtZXRhTGV2ZWxTdWJzdGl0dXRpb25zLCBjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250ZXh0ID0gbWV0YUxldmVsU3Vic3RpdHV0aW9uczsgIC8vL1xuXG4gICAgbWV0YUxldmVsU3Vic3RpdHV0aW9ucyA9IG51bGw7XG4gIH1cblxuICBjb25zdCBwcm9vZkNvbnRleHQgPSBQcm9vZkNvbnRleHQuZnJvbU1ldGFMZXZlbFN1YnN0aXR1dGlvbnMobWV0YUxldmVsU3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IHByb29mQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBhd2FpdCBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNSZWNvbmNpbGUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaW1pbmFsQ29udGV4dCA9IExpbWluYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaW1pbmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBhd2FpdCBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRleHRFeHRyYW5lb3VzQ29udGV4dChjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHRMaW1pbmFsQ29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgTGltaW5hbENvbnRleHQpLFxuICAgICAgICBjb250ZXh0RXBoZW1lcmFsQ29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgRXBoZW1lcmFsQ29udGV4dCksXG4gICAgICAgIGNvbnRleHRCcmFuY2hpbmdDb250ZXh0ID0gKGNvbnRleHQgaW5zdGFuY2VvZiBCcmFuY2hpbmdDb250ZXh0KSxcbiAgICAgICAgY29udGV4dFN5bnRoZXRpY0NvbnRleHQgPSAoY29udGV4dCBpbnN0YW5jZW9mIFN5bnRoZXRpY0NvbnRleHQpLFxuICAgICAgICBjb250ZXh0RXh0cmFuZW91c0NvbnRleHQgPSAoIGNvbnRleHRMaW1pbmFsQ29udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbnRleHRFcGhlbWVyYWxDb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29udGV4dEJyYW5jaGluZ0NvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb250ZXh0U3ludGhldGljQ29udGV4dCApO1xuXG4gIHJldHVybiBjb250ZXh0RXh0cmFuZW91c0NvbnRleHQ7XG59XG4iXSwibmFtZXMiOlsiYXN5bmNSZWNvbmNpbGUiLCJhc3luY1Jlc3RyaWN0IiwiYXR0ZW1wdCIsImNob29zZSIsImRlY2xhcmUiLCJkZXJpdmUiLCJkZXNjZW5kIiwiaW5zdGFudGlhdGUiLCJqb2luIiwibm9taW5hbGx5IiwicmVjb25jaWxlIiwic2VyaWFsaXNlIiwic2ltcGxpZnkiLCJ1bnNlcmlhbGlzZSIsImlubmVyRnVuY3Rpb24iLCJjb250ZXh0cyIsInN5bnRoZXRpY0NvbnRleHQiLCJTeW50aGV0aWNDb250ZXh0IiwiZnJvbUNvbnRleHRzIiwiY29udGV4dCIsImJyYW5jaGluZ0NvbnRleHQiLCJCcmFuY2hpbmdDb250ZXh0IiwiZnJvbU5vdGhpbmciLCJpbGxhdGl2ZUNvbnRleHQiLCJJbGxhdGl2ZUNvbnRleHQiLCJ0aGV0aWNDb250ZXh0IiwiVGhldGljQ29udGV4dCIsIm5lc3RlZENvbnRleHQiLCJOZXN0ZWRDb250ZXh0IiwiZXBoZW1lcmFsQ29udGV4dCIsIkVwaGVtZXJhbENvbnRleHQiLCJsaW1pbmFsQ29udGV4dCIsIkxpbWluYWxDb250ZXh0IiwibGl0ZXJhbENvbnRleHQiLCJMaXRlcmFsQ29udGV4dCIsIm5vbWluYWxDb250ZXh0IiwiTm9taW5hbENvbnRleHQiLCJjb250ZXh0RXh0cmFuZW91c0NvbnRleHQiLCJpc0NvbnRleHRFeHRyYW5lb3VzQ29udGV4dCIsImdldENvbnRleHQiLCJlcGhlbWVyYWxDb250ZXh0SlNPTiIsImVwaGVtZXJhbENvbnRleHRUb0VwaGVtZXJhbENvbnRleHRKU09OIiwiY29udGV4dEpTT04iLCJqc29uIiwiZXBoZW1lcmFsQ29udGV4dEZyb21KU09OIiwibWV0YUxldmVsU3Vic3RpdHV0aW9ucyIsInVuZGVmaW5lZCIsInByb29mQ29udGV4dCIsIlByb29mQ29udGV4dCIsImZyb21NZXRhTGV2ZWxTdWJzdGl0dXRpb25zIiwiY29udGV4dExpbWluYWxDb250ZXh0IiwiY29udGV4dEVwaGVtZXJhbENvbnRleHQiLCJjb250ZXh0QnJhbmNoaW5nQ29udGV4dCIsImNvbnRleHRTeW50aGV0aWNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUE0SXNCQTtlQUFBQTs7UUFkQUM7ZUFBQUE7O1FBeEVOQztlQUFBQTs7UUFoQ0FDO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBUkFDO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBd0JBQztlQUFBQTs7UUF2REFDO2VBQUFBOztRQStEQUM7ZUFBQUE7O1FBaEJBQztlQUFBQTs7UUE4Q0FDO2VBQUFBOztRQWhCQUM7ZUFBQUE7O1FBMEJBQztlQUFBQTs7OzhEQXBIUzsrREFDQzsrREFDQTtnRUFDQztnRUFDQTtnRUFDQTtpRUFDQztrRUFDQztrRUFDQTtrRUFDQTtzQkFFb0Q7Ozs7OztBQUUxRSxTQUFTTCxLQUFLTSxhQUFhLEVBQUUsR0FBR0MsUUFBUTtJQUM3QyxNQUFNQyxtQkFBbUJDLGtCQUFnQixDQUFDQyxZQUFZLElBQUlILFdBQ3BESSxVQUFVSCxrQkFBbUIsR0FBRztJQUV0QyxPQUFPRixjQUFjSztBQUN2QjtBQUVPLFNBQVNoQixPQUFPVyxhQUFhLEVBQUVLLE9BQU87SUFDM0MsTUFBTUMsbUJBQW1CQyxrQkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDSDtJQUV0REEsVUFBVUMsa0JBQW1CLEdBQUc7SUFFaEMsT0FBT04sY0FBY0s7QUFDdkI7QUFFTyxTQUFTZCxPQUFPUyxhQUFhLEVBQUVLLE9BQU87SUFDM0MsTUFBTUksa0JBQWtCQyxp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
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFByb29mQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9wcm9vZlwiO1xuaW1wb3J0IE5lc3RlZENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbmVzdGVkXCI7XG5pbXBvcnQgVGhldGljQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC90aGV0aWNcIjtcbmltcG9ydCBOb21pbmFsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9ub21pbmFsXCI7XG5pbXBvcnQgTGl0ZXJhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbGl0ZXJhbFwiO1xuaW1wb3J0IExpbWluYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpbWluYWxcIjtcbmltcG9ydCBJbGxhdGl2ZUNvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvaWxsYXRpdmVcIjtcbmltcG9ydCBFcGhlbWVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2VwaGVtZXJhbFwiO1xuaW1wb3J0IEJyYW5jaGluZ0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvYnJhbmNoaW5nXCI7XG5pbXBvcnQgU3ludGhldGljQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9zeW50aGV0aWNcIjtcblxuaW1wb3J0IHsgZXBoZW1lcmFsQ29udGV4dEZyb21KU09OLCBlcGhlbWVyYWxDb250ZXh0VG9FcGhlbWVyYWxDb250ZXh0SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gam9pbihpbm5lckZ1bmN0aW9uLCAuLi5jb250ZXh0cykge1xuICBjb25zdCBzeW50aGV0aWNDb250ZXh0ID0gU3ludGhldGljQ29udGV4dC5mcm9tQ29udGV4dHMoLi4uY29udGV4dHMpLFxuICAgICAgICBjb250ZXh0ID0gc3ludGhldGljQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hvb3NlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgYnJhbmNoaW5nQ29udGV4dCA9IEJyYW5jaGluZ0NvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGJyYW5jaGluZ0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGlsbGF0aXZlQ29udGV4dCA9IElsbGF0aXZlQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gaWxsYXRpdmVDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgdGhldGljQ29udGV4dCA9IFRoZXRpY0NvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IHRoZXRpY0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2NlbmQoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBuZXN0ZWRDb250ZXh0ID0gTmVzdGVkQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbmVzdGVkQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXR0ZW1wdChpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHQgPSBFcGhlbWVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBlcGhlbWVyYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaW1pbmFsQ29udGV4dCA9IExpbWluYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaW1pbmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaXRlcmFsQ29udGV4dCA9IExpdGVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaXRlcmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9taW5hbGx5KGlubmVyRnVuY3Rpb24pIHtcbiAgbGV0IGNvbnRleHQ7XG5cbiAgY29uc3Qgbm9taW5hbENvbnRleHQgPSBOb21pbmFsQ29udGV4dC5mcm9tTm90aGluZygpO1xuXG4gIGNvbnRleHQgPSBub21pbmFsQ29udGV4dDsgLy8vXG5cbiAgY29uc3QgbGl0ZXJhbENvbnRleHQgPSBMaXRlcmFsQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbGl0ZXJhbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsaWZ5KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29udGV4dCA9IHJlbW92ZUV4dHJhbmVvdXNDb250ZXh0cyhjb250ZXh0KTtcblxuICBjb25zdCBlcGhlbWVyYWxDb250ZXh0ID0gRXBoZW1lcmFsQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gZXBoZW1lcmFsQ29udGV4dDsgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpc2UoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBlcGhlbWVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgIGVwaGVtZXJhbENvbnRleHRKU09OID0gZXBoZW1lcmFsQ29udGV4dFRvRXBoZW1lcmFsQ29udGV4dEpTT04oZXBoZW1lcmFsQ29udGV4dCksXG4gICAgICAgIGNvbnRleHRKU09OID0gZXBoZW1lcmFsQ29udGV4dEpTT047IC8vL1xuXG4gIGNvbnRleHQgPSBjb250ZXh0SlNPTjsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5zZXJpYWxpc2UoaW5uZXJGdW5jdGlvbiwganNvbiwgY29udGV4dCkge1xuICBjb25zdCBlcGhlbWVyYWxDb250ZXh0ID0gZXBoZW1lcmFsQ29udGV4dEZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBlcGhlbWVyYWxDb250ZXh0OyAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihqc29uLCBjb250ZXh0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jUmVzdHJpY3QoaW5uZXJGdW5jdGlvbiwgYXNzdW1wdGlvbnMsIGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnRleHQgPSBhc3N1bXB0aW9uczsgIC8vL1xuXG4gICAgYXNzdW1wdGlvbnMgPSBudWxsO1xuICB9XG5cbiAgY29uc3QgcHJvb2ZDb250ZXh0ID0gUHJvb2ZDb250ZXh0LmZyb21Bc3N1bXB0aW9ucyhhc3N1bXB0aW9ucywgY29udGV4dCk7XG5cbiAgY29udGV4dCA9IHByb29mQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBhd2FpdCBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNSZWNvbmNpbGUoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaW1pbmFsQ29udGV4dCA9IExpbWluYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaW1pbmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBhd2FpdCBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRleHRFeHRyYW5lb3VzQ29udGV4dChjb250ZXh0KSB7XG4gIGNvbnN0IGNvbnRleHRMaW1pbmFsQ29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgTGltaW5hbENvbnRleHQpLFxuICAgICAgICBjb250ZXh0RXBoZW1lcmFsQ29udGV4dCA9IChjb250ZXh0IGluc3RhbmNlb2YgRXBoZW1lcmFsQ29udGV4dCksXG4gICAgICAgIGNvbnRleHRCcmFuY2hpbmdDb250ZXh0ID0gKGNvbnRleHQgaW5zdGFuY2VvZiBCcmFuY2hpbmdDb250ZXh0KSxcbiAgICAgICAgY29udGV4dFN5bnRoZXRpY0NvbnRleHQgPSAoY29udGV4dCBpbnN0YW5jZW9mIFN5bnRoZXRpY0NvbnRleHQpLFxuICAgICAgICBjb250ZXh0RXh0cmFuZW91c0NvbnRleHQgPSAoIGNvbnRleHRMaW1pbmFsQ29udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbnRleHRFcGhlbWVyYWxDb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29udGV4dEJyYW5jaGluZ0NvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjb250ZXh0U3ludGhldGljQ29udGV4dCApO1xuXG4gIHJldHVybiBjb250ZXh0RXh0cmFuZW91c0NvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV4dHJhbmVvdXNDb250ZXh0cyhjb250ZXh0KSB7XG4gIGNvbnRleHQgPSB0cmltRXh0cmFuZW91c0NvbnRleHRzKGNvbnRleHQpO1xuXG4gIGNvbnN0IGZpcnN0Q29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gIGxldCBjdXJyZW50Q29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gIHdoaWxlIChjdXJyZW50Q29udGV4dCAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dC5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0ID0gdHJpbUV4dHJhbmVvdXNDb250ZXh0cyhjb250ZXh0KTtcblxuICAgIGN1cnJlbnRDb250ZXh0LnNldENvbnRleHQoY29udGV4dCk7XG5cbiAgICBjdXJyZW50Q29udGV4dCA9IGNvbnRleHQ7IC8vL1xuICB9XG5cbiAgY29udGV4dCA9IGZpcnN0Q29udGV4dDsgLy8vXG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHRyaW1FeHRyYW5lb3VzQ29udGV4dHMoY29udGV4dCkge1xuICBsZXQgY29udGV4dEV4dHJhbmVvdXNDb250ZXh0ID0gaXNDb250ZXh0RXh0cmFuZW91c0NvbnRleHQoY29udGV4dCk7XG5cbiAgd2hpbGUgKGNvbnRleHRFeHRyYW5lb3VzQ29udGV4dCkge1xuICAgIGNvbnRleHQgPSBjb250ZXh0LmdldENvbnRleHQoKTtcblxuICAgIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb250ZXh0RXh0cmFuZW91c0NvbnRleHQgPSBpc0NvbnRleHRFeHRyYW5lb3VzQ29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuIl0sIm5hbWVzIjpbImFzeW5jUmVjb25jaWxlIiwiYXN5bmNSZXN0cmljdCIsImF0dGVtcHQiLCJjaG9vc2UiLCJkZWNsYXJlIiwiZGVyaXZlIiwiZGVzY2VuZCIsImluc3RhbnRpYXRlIiwiam9pbiIsIm5vbWluYWxseSIsInJlY29uY2lsZSIsInNlcmlhbGlzZSIsInNpbXBsaWZ5IiwidW5zZXJpYWxpc2UiLCJpbm5lckZ1bmN0aW9uIiwiY29udGV4dHMiLCJzeW50aGV0aWNDb250ZXh0IiwiU3ludGhldGljQ29udGV4dCIsImZyb21Db250ZXh0cyIsImNvbnRleHQiLCJicmFuY2hpbmdDb250ZXh0IiwiQnJhbmNoaW5nQ29udGV4dCIsImZyb21Ob3RoaW5nIiwiaWxsYXRpdmVDb250ZXh0IiwiSWxsYXRpdmVDb250ZXh0IiwidGhldGljQ29udGV4dCIsIlRoZXRpY0NvbnRleHQiLCJuZXN0ZWRDb250ZXh0IiwiTmVzdGVkQ29udGV4dCIsImVwaGVtZXJhbENvbnRleHQiLCJFcGhlbWVyYWxDb250ZXh0IiwibGltaW5hbENvbnRleHQiLCJMaW1pbmFsQ29udGV4dCIsImxpdGVyYWxDb250ZXh0IiwiTGl0ZXJhbENvbnRleHQiLCJub21pbmFsQ29udGV4dCIsIk5vbWluYWxDb250ZXh0IiwicmVtb3ZlRXh0cmFuZW91c0NvbnRleHRzIiwiZXBoZW1lcmFsQ29udGV4dEpTT04iLCJlcGhlbWVyYWxDb250ZXh0VG9FcGhlbWVyYWxDb250ZXh0SlNPTiIsImNvbnRleHRKU09OIiwianNvbiIsImVwaGVtZXJhbENvbnRleHRGcm9tSlNPTiIsImFzc3VtcHRpb25zIiwidW5kZWZpbmVkIiwicHJvb2ZDb250ZXh0IiwiUHJvb2ZDb250ZXh0IiwiZnJvbUFzc3VtcHRpb25zIiwiaXNDb250ZXh0RXh0cmFuZW91c0NvbnRleHQiLCJjb250ZXh0TGltaW5hbENvbnRleHQiLCJjb250ZXh0RXBoZW1lcmFsQ29udGV4dCIsImNvbnRleHRCcmFuY2hpbmdDb250ZXh0IiwiY29udGV4dFN5bnRoZXRpY0NvbnRleHQiLCJjb250ZXh0RXh0cmFuZW91c0NvbnRleHQiLCJ0cmltRXh0cmFuZW91c0NvbnRleHRzIiwiZmlyc3RDb250ZXh0IiwiY3VycmVudENvbnRleHQiLCJnZXRDb250ZXh0Iiwic2V0Q29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBc0lzQkE7ZUFBQUE7O1FBZEFDO2VBQUFBOztRQWxFTkM7ZUFBQUE7O1FBaENBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQVJBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQXdCQUM7ZUFBQUE7O1FBdkRBQztlQUFBQTs7UUErREFDO2VBQUFBOztRQWhCQUM7ZUFBQUE7O1FBd0NBQztlQUFBQTs7UUFWQUM7ZUFBQUE7O1FBb0JBQztlQUFBQTs7OzhEQTlHUzsrREFDQzsrREFDQTtnRUFDQztnRUFDQTtnRUFDQTtpRUFDQztrRUFDQztrRUFDQTtrRUFDQTtzQkFFb0Q7Ozs7OztBQUUxRSxTQUFTTCxLQUFLTSxhQUFhLEVBQUUsR0FBR0MsUUFBUTtJQUM3QyxNQUFNQyxtQkFBbUJDLGtCQUFnQixDQUFDQyxZQUFZLElBQUlILFdBQ3BESSxVQUFVSCxrQkFBbUIsR0FBRztJQUV0QyxPQUFPRixjQUFjSztBQUN2QjtBQUVPLFNBQVNoQixPQUFPVyxhQUFhLEVBQUVLLE9BQU87SUFDM0MsTUFBTUMsbUJBQW1CQyxrQkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDSDtJQUV0REEsVUFBVUMsa0JBQW1CLEdBQUc7SUFFaEMsT0FBT04sY0FBY0s7QUFDdkI7QUFFTyxTQUFTZCxPQUFPUyxhQUFhLEVBQUVLLE9BQU87SUFDM0MsTUFBTUksa0JBQWtCQyxpQkFBZSxDQUFDRixXQUFXLENBQUNIO0lBRXBEQSxVQUFVSSxpQkFBa0IsR0FBRztJQUUvQixPQUFPVCxjQUFjSztBQUN2QjtBQUVPLFNBQVNmLFFBQVFVLGFBQWEsRUFBRUssT0FBTztJQUM1QyxNQUFNTSxnQkFBZ0JDLGVBQWEsQ0FBQ0osV0FBVyxDQUFDSDtJQUVoREEsVUFBVU0sZUFBZ0IsR0FBRztJQUU3QixPQUFPWCxjQUFjSztBQUN2QjtBQUVPLFNBQVNiLFFBQVFRLGFBQWEsRUFBRUssT0FBTztJQUM1QyxNQUFNUSxnQkFBZ0JDLGVBQWEsQ0FBQ04sV0FBVyxDQUFDSDtJQUVoREEsVUFBVVEsZUFBZ0IsR0FBRztJQUU3QixPQUFPYixjQUFjSztBQUN2QjtBQUVPLFNBQVNqQixRQUFRWSxhQUFhLEVBQUVLLE9BQU87SUFDNUMsTUFBTVUsbUJBQW1CQyxrQkFBZ0IsQ0FBQ1IsV0FBVyxDQUFDSDtJQUV0REEsVUFBVVUsa0JBQW1CLEdBQUc7SUFFaEMsT0FBT2YsY0FBY0s7QUFDdkI7QUFFTyxTQUFTVCxVQUFVSSxhQUFhLEVBQUVLLE9BQU87SUFDOUMsTUFBTVksaUJBQWlCQyxnQkFBYyxDQUFDVixXQUFXLENBQUNIO0lBRWxEQSxVQUFVWSxnQkFBaUIsR0FBRztJQUU5QixPQUFPakIsY0FBY0s7QUFDdkI7QUFFTyxTQUFTWixZQUFZTyxhQUFhLEVBQUVLLE9BQU87SUFDaEQsTUFBTWMsaUJBQWlCQyxnQkFBYyxDQUFDWixXQUFXLENBQUNIO0lBRWxEQSxVQUFVYyxnQkFBaUIsR0FBRztJQUU5QixPQUFPbkIsY0FBY0s7QUFDdkI7QUFFTyxTQUFTVixVQUFVSyxhQUFhO0lBQ3JDLElBQUlLO0lBRUosTUFBTWdCLGlCQUFpQkMsZ0JBQWMsQ0FBQ2QsV0FBVztJQUVqREgsVUFBVWdCLGdCQUFnQixHQUFHO0lBRTdCLE1BQU1GLGlCQUFpQkMsZ0JBQWMsQ0FBQ1osV0FBVyxDQUFDSDtJQUVsREEsVUFBVWMsZ0JBQWlCLEdBQUc7SUFFOUIsT0FBT25CLGNBQWNLO0FBQ3ZCO0FBRU8sU0FBU1AsU0FBU0UsYUFBYSxFQUFFSyxPQUFPO0lBQzdDQSxVQUFVa0IseUJBQXlCbEI7SUFFbkMsTUFBTVUsbUJBQW1CQyxrQkFBZ0IsQ0FBQ1IsV0FBVyxDQUFDSDtJQUV0REEsVUFBVVUsa0JBQWtCLEdBQUc7SUFFL0IsT0FBT2YsY0FBY0s7QUFDdkI7QUFFTyxTQUFTUixVQUFVRyxhQUFhLEVBQUVLLE9BQU87SUFDOUMsTUFBTVUsbUJBQW1CVixTQUNuQm1CLHVCQUF1QkMsSUFBQUEsNENBQXNDLEVBQUNWLG1CQUM5RFcsY0FBY0Ysc0JBQXNCLEdBQUc7SUFFN0NuQixVQUFVcUIsYUFBYyxHQUFHO0lBRTNCLE9BQU8xQixjQUFjSztBQUN2QjtBQUVPLFNBQVNOLFlBQVlDLGFBQWEsRUFBRTJCLElBQUksRUFBRXRCLE9BQU87SUFDdEQsTUFBTVUsbUJBQW1CYSxJQUFBQSw4QkFBd0IsRUFBQ0QsTUFBTXRCO0lBRXhEQSxVQUFVVSxrQkFBa0IsR0FBRztJQUUvQixPQUFPZixjQUFjMkIsTUFBTXRCO0FBQzdCO0FBRU8sZUFBZWxCLGNBQWNhLGFBQWEsRUFBRTZCLFdBQVcsRUFBRXhCLE9BQU87SUFDckUsSUFBSUEsWUFBWXlCLFdBQVc7UUFDekJ6QixVQUFVd0IsYUFBYyxHQUFHO1FBRTNCQSxjQUFjO0lBQ2hCO0lBRUEsTUFBTUUsZUFBZUMsY0FBWSxDQUFDQyxlQUFlLENBQUNKLGFBQWF4QjtJQUUvREEsVUFBVTBCLGNBQWUsR0FBRztJQUU1QixPQUFPLE1BQU0vQixjQUFjSztBQUM3QjtBQUVPLGVBQWVuQixlQUFlYyxhQUFhLEVBQUVLLE9BQU87SUFDekQsTUFBTVksaUJBQWlCQyxnQkFBYyxDQUFDVixXQUFXLENBQUNIO0lBRWxEQSxVQUFVWSxnQkFBaUIsR0FBRztJQUU5QixPQUFPLE1BQU1qQixjQUFjSztBQUM3QjtBQUVBLFNBQVM2QiwyQkFBMkI3QixPQUFPO0lBQ3pDLE1BQU04Qix3QkFBeUI5QixtQkFBbUJhLGdCQUFjLEVBQzFEa0IsMEJBQTJCL0IsbUJBQW1CVyxrQkFBZ0IsRUFDOURxQiwwQkFBMkJoQyxtQkFBbUJFLGtCQUFnQixFQUM5RCtCLDBCQUEyQmpDLG1CQUFtQkYsa0JBQWdCLEVBQzlEb0MsMkJBQTZCSix5QkFDQUMsMkJBQ0FDLDJCQUNBQztJQUVuQyxPQUFPQztBQUNUO0FBRUEsU0FBU2hCLHlCQUF5QmxCLE9BQU87SUFDdkNBLFVBQVVtQyx1QkFBdUJuQztJQUVqQyxNQUFNb0MsZUFBZXBDLFNBQVMsR0FBRztJQUVqQyxJQUFJcUMsaUJBQWlCckMsU0FBUyxHQUFHO0lBRWpDLE1BQU9xQyxtQkFBbUIsS0FBTTtRQUM5QnJDLFVBQVVxQyxlQUFlQyxVQUFVO1FBRW5DdEMsVUFBVW1DLHVCQUF1Qm5DO1FBRWpDcUMsZUFBZUUsVUFBVSxDQUFDdkM7UUFFMUJxQyxpQkFBaUJyQyxTQUFTLEdBQUc7SUFDL0I7SUFFQUEsVUFBVW9DLGNBQWMsR0FBRztJQUUzQixPQUFPcEM7QUFDVDtBQUVBLFNBQVNtQyx1QkFBdUJuQyxPQUFPO0lBQ3JDLElBQUlrQywyQkFBMkJMLDJCQUEyQjdCO0lBRTFELE1BQU9rQyx5QkFBMEI7UUFDL0JsQyxVQUFVQSxRQUFRc0MsVUFBVTtRQUU1QixJQUFJdEMsWUFBWSxNQUFNO1lBQ3BCO1FBQ0Y7UUFFQWtDLDJCQUEyQkwsMkJBQTJCN0I7SUFDeEQ7SUFFQSxPQUFPQTtBQUNUIn0=