occam-verify-cli 1.0.768 → 1.0.776

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 (106) hide show
  1. package/lib/context/file/nominal.js +11 -11
  2. package/lib/context/illative.js +28 -0
  3. package/lib/context/nested.js +27 -0
  4. package/lib/context/proof.js +232 -0
  5. package/lib/context/thetic.js +28 -0
  6. package/lib/context.js +15 -21
  7. package/lib/element/assertion/contained.js +24 -22
  8. package/lib/element/assertion/defined.js +20 -19
  9. package/lib/element/assertion/property.js +14 -13
  10. package/lib/element/assertion/satisfies.js +8 -9
  11. package/lib/element/assertion/subproof.js +23 -26
  12. package/lib/element/assertion/type.js +9 -11
  13. package/lib/element/assumption.js +32 -39
  14. package/lib/element/combinator/bracketed.js +3 -3
  15. package/lib/element/combinator.js +20 -20
  16. package/lib/element/conclusion.js +33 -29
  17. package/lib/element/constructor.js +19 -18
  18. package/lib/element/deduction.js +33 -29
  19. package/lib/element/equality.js +13 -15
  20. package/lib/element/equivalence.js +59 -52
  21. package/lib/element/frame.js +41 -34
  22. package/lib/element/hypothesis.js +7 -5
  23. package/lib/element/judgement.js +32 -73
  24. package/lib/element/label.js +22 -22
  25. package/lib/element/metavariable.js +23 -7
  26. package/lib/element/proofAssertion/premise.js +48 -35
  27. package/lib/element/proofAssertion/step.js +35 -20
  28. package/lib/element/proofAssertion/supposition.js +48 -34
  29. package/lib/element/proofAssertion.js +1 -14
  30. package/lib/element/reference.js +80 -53
  31. package/lib/element/signature.js +44 -3
  32. package/lib/element/statement.js +28 -29
  33. package/lib/element/subproof.js +2 -2
  34. package/lib/element/substitution/frame.js +24 -19
  35. package/lib/element/substitution/metaLevel.js +31 -27
  36. package/lib/element/substitution/reference.js +11 -10
  37. package/lib/element/substitution/statement.js +30 -23
  38. package/lib/element/substitution/term.js +11 -10
  39. package/lib/element/term.js +24 -20
  40. package/lib/element/topLevelMetaAssertion.js +2 -2
  41. package/lib/element/variable.js +6 -2
  42. package/lib/process/assign.js +10 -4
  43. package/lib/process/unify.js +8 -8
  44. package/lib/process/validate.js +10 -8
  45. package/lib/utilities/context.js +68 -23
  46. package/lib/utilities/element.js +55 -27
  47. package/lib/utilities/json.js +8 -8
  48. package/lib/utilities/statement.js +1 -8
  49. package/lib/utilities/string.js +12 -1
  50. package/lib/utilities/unification.js +9 -7
  51. package/lib/utilities/validation.js +39 -31
  52. package/package.json +1 -1
  53. package/src/context/file/nominal.js +14 -16
  54. package/src/context/illative.js +17 -0
  55. package/src/context/nested.js +15 -0
  56. package/src/context/{scoped.js → proof.js} +73 -73
  57. package/src/context/thetic.js +17 -0
  58. package/src/context.js +23 -36
  59. package/src/element/assertion/contained.js +28 -28
  60. package/src/element/assertion/defined.js +23 -23
  61. package/src/element/assertion/property.js +15 -14
  62. package/src/element/assertion/satisfies.js +7 -9
  63. package/src/element/assertion/subproof.js +26 -31
  64. package/src/element/assertion/type.js +10 -12
  65. package/src/element/assumption.js +33 -54
  66. package/src/element/combinator/bracketed.js +2 -2
  67. package/src/element/combinator.js +23 -29
  68. package/src/element/conclusion.js +37 -40
  69. package/src/element/constructor.js +29 -34
  70. package/src/element/deduction.js +36 -39
  71. package/src/element/equality.js +16 -18
  72. package/src/element/equivalence.js +76 -67
  73. package/src/element/frame.js +42 -34
  74. package/src/element/hypothesis.js +7 -6
  75. package/src/element/judgement.js +34 -44
  76. package/src/element/label.js +25 -31
  77. package/src/element/metavariable.js +32 -12
  78. package/src/element/proofAssertion/premise.js +63 -49
  79. package/src/element/proofAssertion/step.js +43 -23
  80. package/src/element/proofAssertion/supposition.js +64 -50
  81. package/src/element/proofAssertion.js +0 -22
  82. package/src/element/reference.js +119 -80
  83. package/src/element/signature.js +5 -2
  84. package/src/element/statement.js +30 -35
  85. package/src/element/subproof.js +1 -1
  86. package/src/element/substitution/frame.js +27 -26
  87. package/src/element/substitution/metaLevel.js +38 -42
  88. package/src/element/substitution/reference.js +13 -14
  89. package/src/element/substitution/statement.js +35 -33
  90. package/src/element/substitution/term.js +13 -14
  91. package/src/element/term.js +42 -34
  92. package/src/element/topLevelMetaAssertion.js +1 -1
  93. package/src/element/variable.js +8 -1
  94. package/src/process/assign.js +9 -3
  95. package/src/process/unify.js +7 -7
  96. package/src/process/validate.js +9 -8
  97. package/src/utilities/context.js +82 -31
  98. package/src/utilities/element.js +68 -31
  99. package/src/utilities/json.js +13 -13
  100. package/src/utilities/statement.js +1 -9
  101. package/src/utilities/string.js +16 -2
  102. package/src/utilities/unification.js +10 -9
  103. package/src/utilities/validation.js +50 -38
  104. package/lib/context/scoped.js +0 -232
  105. package/lib/utilities/term.js +0 -17
  106. package/src/utilities/term.js +0 -10
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "unifyStatements", {
10
10
  });
11
11
  const _necessary = require("necessary");
12
12
  const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
13
+ const _context = require("./context");
13
14
  const _statement = require("../utilities/statement");
14
15
  function _interop_require_default(obj) {
15
16
  return obj && obj.__esModule ? obj : {
@@ -40,7 +41,7 @@ async function unifyStatementWithReference(statement, reference, satisfiesAssert
40
41
  if (reference !== null) {
41
42
  const statementString = statement.getString(), referenceString = reference.getString();
42
43
  context.trace(`Unifying the '${statementString}' statement with the '${referenceString}' reference...`);
43
- const topLevelAssertion = context.findTopLevelAssertionByReference(reference, context);
44
+ const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
44
45
  if (topLevelAssertion !== null) {
45
46
  const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), statementAndSubproofOrProofAssertionsUnify = await topLevelAssertion.unifyStatementAndSubproofOrProofAssertions(statement, subproofOrProofAssertions, context);
46
47
  if (statementAndSubproofOrProofAssertionsUnify) {
@@ -66,8 +67,9 @@ async function unifyStatementAsSatisfiesAssertion(statement, reference, satisfie
66
67
  if (satisfiesAssertion !== null) {
67
68
  const statementString = statement.getString();
68
69
  context.trace(`Unifying the '${statementString}' statement as a satisfies assertion...`);
69
- const stated = true;
70
- satisfiesAssertion.verifySignature(stated, context);
70
+ (0, _context.descend)((context)=>{
71
+ satisfiesAssertion.verifySignature(context);
72
+ }, context);
71
73
  if (reference === null) {
72
74
  const subproofOrProofAssertions = context.getSubproofOrProofAssertions();
73
75
  statementUnifiesAsSatisfiesAssertion = backwardsSome(subproofOrProofAssertions, (stepsOrSubproof)=>{
@@ -77,7 +79,7 @@ async function unifyStatementAsSatisfiesAssertion(statement, reference, satisfie
77
79
  }
78
80
  });
79
81
  } else {
80
- const topLevelAssertion = context.findTopLevelAssertionByReference(reference, context);
82
+ const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
81
83
  if (topLevelAssertion !== null) {
82
84
  reference = satisfiesAssertion.getReference();
83
85
  const axiom = context.findAxiomByReference(reference);
@@ -107,7 +109,7 @@ async function unifyStatementAsSatisfiesAssertion(statement, reference, satisfie
107
109
  async function unifyStatementWithTopLevelAssertion(statement, reference, satisfiesAssertion, context) {
108
110
  let statementUnifiesWithTopLevelAssertion = false;
109
111
  if (reference !== null) {
110
- const topLevelAssertion = context.findTopLevelAssertionByReference(reference, context);
112
+ const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
111
113
  if (topLevelAssertion !== null) {
112
114
  const statementString = statement.getString(), topLevelAssertionString = reference.getString();
113
115
  context.trace(`Unifying the '${statementString}' statement with the '${topLevelAssertionString}' top level assertion...`);
@@ -125,7 +127,7 @@ async function unifyStatementWithTopLevelAssertion(statement, reference, satisfi
125
127
  async function unifyStatementAsEquality(statement, reference, satisfiesAssertion, context) {
126
128
  let statementUnifiesAEquality = false;
127
129
  if (reference === null) {
128
- const equality = (0, _statement.equalityFromStatement)(statement, context);
130
+ const { Equality } = _elements.default, equality = Equality.fromStatement(statement, context);
129
131
  if (equality !== null) {
130
132
  const statementString = statement.getString();
131
133
  context.trace(`Unifying the '${statementString}' statement as an equality...`);
@@ -237,4 +239,4 @@ const unifyStatements = [
237
239
  compareStatementWithSubproofOrProofAssertions
238
240
  ];
239
241
 
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5jb25zdCB7IGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSdWxlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgcnVsZS51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0KTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgdG9wTGV2ZWxBc3NlcnRpb24udW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXRhTGV2ZWxTdWJzdGl0dXRpb25zID0gY29udGV4dC5oYXNNZXRhTGV2ZWxTdWJzdGl0dXRpb25zKCk7XG5cbiAgICAgIGlmIChtZXRhTGV2ZWxTdWJzdGl0dXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgTWV0YUxldmVsU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uID0gTWV0YUxldmVsU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRBbmRSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uLnZhbGlkYXRlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IHRydWU7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24udmVyaWZ5U2lnbmF0dXJlKHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IGJhY2t3YXJkc1NvbWUoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgKHN0ZXBzT3JTdWJwcm9vZikgPT4ge1xuICAgICAgICBjb25zdCBzdGVwT3JTdWJQcm9vZlVuaWZpZXNXSXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gc3RlcHNPclN1YnByb29mLnVuaWZ5V2l0aFNhdGlzZmllc0Fzc2VydGlvbihzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGVwT3JTdWJQcm9vZlVuaWZpZXNXSXRoU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHJlZmVyZW5jZSA9IHNhdGlzZmllc0Fzc2VydGlvbi5nZXRSZWZlcmVuY2UoKTtcblxuICAgICAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzYXRpc2ZpYWJsZSA9IGF4aW9tLmlzU2F0aXNmaWFibGUoKTtcblxuICAgICAgICAgIGlmIChzYXRpc2ZpYWJsZSkge1xuICAgICAgICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzID0gYXhpb20udW5pZnlUb3BMZXZlbEFzc2VydGlvbih0b3BMZXZlbEFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmICh0b3BMZXZlbEFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uc0NvcnJlbGF0ZXMgPSBzYXRpc2ZpZXNBc3NlcnRpb24uY29ycmVsYXRlU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uc0NvcnJlbGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gYXhpb20uZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFVuYWJsZSB0byB1bmlmeSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGJlY2F1c2UgaXQgaXMgbm90IHNhdGlzZmlhYmxlLmApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhUb3BMZXZlbEFzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQpO1xuXG4gICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgdG9wTGV2ZWxBc3NlcnRpb24udW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5ID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgICBjb25zdCBlcXVhbGl0eUVxdWFsID0gZXF1YWxpdHkuaXNFcXVhbChjb250ZXh0KTtcblxuICAgICAgaWYgKGVxdWFsaXR5RXF1YWwpIHtcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCA9IHRydWU7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiA9IHRydWU7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm0gPSBwcm9wZXJ0eUFzc2VydGlvbi5nZXRUZXJtKCksXG4gICAgICAgICAgICBlcXVpdmFsZW5jZSA9IGNvbnRleHQuZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pO1xuXG4gICAgICBpZiAoZXF1aXZhbGVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25NYXRjaGVzID0gZXF1aXZhbGVuY2Uuc29tZU90aGVyVGVybSh0ZXJtLCAodGVybSkgPT4geyAgLy8vXG4gICAgICAgICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uLmdldFByb3BlcnR5UmVsYXRpb24oKSxcbiAgICAgICAgICAgICAgICBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBjb250ZXh0LmNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICAgICAgICAgIGlmIChjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmcgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW1udCB3aXRoIHRoZSAnJHtzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmd9JyBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IHNhdGlzZmllc0Fzc2VydGlvbi51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbW50IHdpdGggdGhlICcke3NhdGlzZmllc0Fzc2VydGlvblN0cmluZ30nIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhTdGVwcyA9IHN0YXRlbWVudC5jb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzKSB7XG4gICAgICBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlIHN1YnByb29mcyBvciBwcm9vZiBhc3NzZXJ0aW9ucy5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBjb25zdCB1bmlmeVN0YXRlbWVudHMgPSBbXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFJ1bGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFJlZmVyZW5jZSxcbiAgdW5pZnlTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgdW5pZnlTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uLFxuICBjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNcbl07XG4iXSwibmFtZXMiOlsidW5pZnlTdGF0ZW1lbnRzIiwiYmFja3dhcmRzU29tZSIsImFycmF5VXRpbGl0aWVzIiwidW5pZnlTdGF0ZW1lbnRXaXRoUnVsZSIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsImNvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUiLCJydWxlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInJ1bGVTdHJpbmciLCJnZXRTdHJpbmciLCJzdGF0ZW1lbnRTdHJpbmciLCJ0cmFjZSIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5IiwidW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZGVidWciLCJ1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2UiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJtZXRhTGV2ZWxTdWJzdGl0dXRpb25zIiwiaGFzTWV0YUxldmVsU3Vic3RpdHV0aW9ucyIsIk1ldGFMZXZlbFN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwibWV0YUxldmVsU3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudEFuZFJlZmVyZW5jZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidmFsaWRhdGUiLCJ1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInN0YXRlZCIsInZlcmlmeVNpZ25hdHVyZSIsInN0ZXBzT3JTdWJwcm9vZiIsInN0ZXBPclN1YlByb29mVW5pZmllc1dJdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJ1bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJnZXRSZWZlcmVuY2UiLCJheGlvbSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwic2F0aXNmaWFibGUiLCJpc1NhdGlzZmlhYmxlIiwidG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzIiwidW5pZnlUb3BMZXZlbEFzc2VydGlvbiIsInN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzIiwiY29ycmVsYXRlU3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJheGlvbVN0cmluZyIsInVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlFcXVhbCIsImlzRXF1YWwiLCJ1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50Iiwic3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ0ZXJtIiwiZ2V0VGVybSIsImVxdWl2YWxlbmNlIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwicHJvcGVydHlBc3NlcnRpb25NYXRjaGVzIiwic29tZU90aGVyVGVybSIsInByb3BlcnR5UmVsYXRpb24iLCJnZXRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwidW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmciLCJzdGF0ZW1lbnRVbmlmaWVzIiwiY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMiLCJzdGF0ZW1lbnRV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
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlc2NlbmQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuY29uc3QgeyBiYWNrd2FyZHNTb21lIH0gPSBhcnJheVV0aWxpdGllcztcblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoUnVsZShzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcnVsZSA9IGNvbnRleHQuZmluZFJ1bGVCeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKHJ1bGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJ1bGVTdHJpbmcgPSBydWxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLi4uYCk7XG5cbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICAgIHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHJ1bGUudW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoUmVmZXJlbmNlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICAgIHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHRvcExldmVsQXNzZXJ0aW9uLnVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWV0YUxldmVsU3Vic3RpdHV0aW9ucyA9IGNvbnRleHQuaGFzTWV0YUxldmVsU3Vic3RpdHV0aW9ucygpO1xuXG4gICAgICBpZiAobWV0YUxldmVsU3Vic3RpdHV0aW9ucykge1xuICAgICAgICBjb25zdCB7IE1ldGFMZXZlbFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICAgIG1ldGFMZXZlbFN1YnN0aXR1dGlvbiA9IE1ldGFMZXZlbFN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50QW5kUmVmZXJlbmNlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgIG1ldGFMZXZlbFN1YnN0aXR1dGlvbi52YWxpZGF0ZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICBzYXRpc2ZpZXNBc3NlcnRpb24udmVyaWZ5U2lnbmF0dXJlKGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSBiYWNrd2FyZHNTb21lKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdGVwc09yU3VicHJvb2YpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHN0ZXBzT3JTdWJwcm9vZi51bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICByZWZlcmVuY2UgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0UmVmZXJlbmNlKCk7XG5cbiAgICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgICBpZiAoc2F0aXNmaWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyA9IGF4aW9tLnVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmNvcnJlbGF0ZVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdW5pZnkgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBiZWNhdXNlIGl0IGlzIG5vdCBzYXRpc2ZpYWJsZS5gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICAgIHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHRvcExldmVsQXNzZXJ0aW9uLnVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIGNvbnN0IGVxdWFsaXR5RXF1YWwgPSBlcXVhbGl0eS5pc0VxdWFsKGNvbnRleHQpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlFcXVhbCkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgY29uc3QgdGVybSA9IHByb3BlcnR5QXNzZXJ0aW9uLmdldFRlcm0oKSxcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlID0gY29udGV4dC5maW5kRXF1aXZhbGVuY2VCeVRlcm0odGVybSk7XG5cbiAgICAgIGlmIChlcXVpdmFsZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk1hdGNoZXMgPSBlcXVpdmFsZW5jZS5zb21lT3RoZXJUZXJtKHRlcm0sICh0ZXJtKSA9PiB7ICAvLy9cbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlBc3NlcnRpb24uZ2V0UHJvcGVydHlSZWxhdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiA9IGNvbnRleHQuY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24pO1xuXG4gICAgICAgICAgaWYgKGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocHJvcGVydHlBc3NlcnRpb25NYXRjaGVzKSB7XG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvblN0cmluZyA9IHNhdGlzZmllc0Fzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbW50IHdpdGggdGhlICcke3NhdGlzZmllc0Fzc2VydGlvblN0cmluZ30nIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLnVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVtbnQgd2l0aCB0aGUgJyR7c2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nfScgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhcmVTdGF0ZW1lbnRXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzID0gc3RhdGVtZW50LmNvbXBhcmVTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMpIHtcbiAgICAgIHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGNvbnN0IHVuaWZ5U3RhdGVtZW50cyA9IFtcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoUnVsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoUmVmZXJlbmNlLFxuICB1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudFdpdGhUb3BMZXZlbEFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB1bmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24sXG4gIGNvbXBhcmVTdGF0ZW1lbnRXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuXTtcbiJdLCJuYW1lcyI6WyJ1bmlmeVN0YXRlbWVudHMiLCJiYWNrd2FyZHNTb21lIiwiYXJyYXlVdGlsaXRpZXMiLCJ1bmlmeVN0YXRlbWVudFdpdGhSdWxlIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSIsInJ1bGUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicnVsZVN0cmluZyIsImdldFN0cmluZyIsInN0YXRlbWVudFN0cmluZyIsInRyYWNlIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJ1bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJkZWJ1ZyIsInVuaWZ5U3RhdGVtZW50V2l0aFJlZmVyZW5jZSIsInN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsIm1ldGFMZXZlbFN1YnN0aXR1dGlvbnMiLCJoYXNNZXRhTGV2ZWxTdWJzdGl0dXRpb25zIiwiTWV0YUxldmVsU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJtZXRhTGV2ZWxTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50QW5kUmVmZXJlbmNlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVzY2VuZCIsInZlcmlmeVNpZ25hdHVyZSIsInN0ZXBzT3JTdWJwcm9vZiIsInN0ZXBPclN1YlByb29mVW5pZmllc1dJdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJ1bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJnZXRSZWZlcmVuY2UiLCJheGlvbSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwic2F0aXNmaWFibGUiLCJpc1NhdGlzZmlhYmxlIiwidG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzIiwidW5pZnlUb3BMZXZlbEFzc2VydGlvbiIsInN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzIiwiY29ycmVsYXRlU3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJheGlvbVN0cmluZyIsInVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSIsIkVxdWFsaXR5IiwiZXF1YWxpdHkiLCJmcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlFcXVhbCIsImlzRXF1YWwiLCJ1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50Iiwic3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ0ZXJtIiwiZ2V0VGVybSIsImVxdWl2YWxlbmNlIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwicHJvcGVydHlBc3NlcnRpb25NYXRjaGVzIiwic29tZU90aGVyVGVybSIsInByb3BlcnR5UmVsYXRpb24iLCJnZXRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwidW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmciLCJzdGF0ZW1lbnRVbmlmaWVzIiwiY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzIiwiY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXVVYUE7OztlQUFBQTs7OzJCQXJVa0I7aUVBRVY7eUJBRUc7MkJBSXdCOzs7Ozs7QUFFaEQsTUFBTSxFQUFFQyxhQUFhLEVBQUUsR0FBR0MseUJBQWM7QUFFeEMsZUFBZUMsdUJBQXVCQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU87SUFDckYsSUFBSUMsMkJBQTJCO0lBRS9CLElBQUlILGNBQWMsTUFBTTtRQUN0QixNQUFNSSxPQUFPRixRQUFRRyxtQkFBbUIsQ0FBQ0w7UUFFekMsSUFBSUksU0FBUyxNQUFNO1lBQ2pCLE1BQU1FLGFBQWFGLEtBQUtHLFNBQVMsSUFDM0JDLGtCQUFrQlQsVUFBVVEsU0FBUztZQUUzQ0wsUUFBUU8sS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFRCxnQkFBZ0Isc0JBQXNCLEVBQUVGLFdBQVcsU0FBUyxDQUFDO1lBRTVGLE1BQU1JLDRCQUE0QlIsUUFBUVMsNEJBQTRCLElBQ2hFQyw2Q0FBNkMsTUFBTVIsS0FBS1MsMENBQTBDLENBQUNkLFdBQVdXLDJCQUEyQlI7WUFFL0ksSUFBSVUsNENBQTRDO2dCQUM5Q1QsMkJBQTJCO1lBQzdCO1lBRUEsSUFBSUEsMEJBQTBCO2dCQUM1QkQsUUFBUVksS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVOLGdCQUFnQixzQkFBc0IsRUFBRUYsV0FBVyxPQUFPLENBQUM7WUFDOUY7UUFDRjtJQUNGO0lBRUEsT0FBT0g7QUFDVDtBQUVBLGVBQWVZLDRCQUE0QmhCLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTztJQUMxRixJQUFJYyxnQ0FBZ0M7SUFFcEMsSUFBSWhCLGNBQWMsTUFBTTtRQUN0QixNQUFNUSxrQkFBa0JULFVBQVVRLFNBQVMsSUFDckNVLGtCQUFrQmpCLFVBQVVPLFNBQVM7UUFF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
@@ -18,7 +18,6 @@ _export(exports, {
18
18
  });
19
19
  const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
20
20
  const _context = require("./context");
21
- const _term = require("../utilities/term");
22
21
  const _instance = require("../utilities/instance");
23
22
  const _statement = require("../utilities/statement");
24
23
  function _interop_require_default(obj) {
@@ -28,8 +27,9 @@ function _interop_require_default(obj) {
28
27
  }
29
28
  function validateTermAsVariable(term, context, validateForwards) {
30
29
  let termValidatesAsVariable = false;
30
+ const { Variable } = _elements.default;
31
31
  let variable;
32
- variable = (0, _term.variableFromTerm)(term, context);
32
+ variable = Variable.fromTerm(term, context);
33
33
  if (variable !== null) {
34
34
  const termString = term.getString();
35
35
  context.trace(`Validating the '${termString}' term as a variable...`);
@@ -50,9 +50,9 @@ function validateTermAsVariable(term, context, validateForwards) {
50
50
  return termValidatesAsVariable;
51
51
  }
52
52
  function unifyTermWithConstructors(term, context, validateForwards) {
53
- let termUnifiesWithConstructors;
53
+ let termUnifiesWithConstructors = false;
54
54
  const constructors = context.getConstructors();
55
- termUnifiesWithConstructors = constructors.some((constructor)=>{
55
+ constructors.some((constructor)=>{
56
56
  let termUnifies;
57
57
  (0, _context.choose)((context)=>{
58
58
  termUnifies = constructor.unifyTerm(term, context, validateForwards);
@@ -61,6 +61,7 @@ function unifyTermWithConstructors(term, context, validateForwards) {
61
61
  }
62
62
  }, context);
63
63
  if (termUnifies) {
64
+ termUnifiesWithConstructors = true;
64
65
  return true;
65
66
  }
66
67
  });
@@ -72,7 +73,7 @@ function unifyTermWithBracketedConstructor(term, context, validateForwards) {
72
73
  termUnifiesWithBracketedConstructor = bracketedConstructor.unifyTerm(term, context, validateForwards);
73
74
  return termUnifiesWithBracketedConstructor;
74
75
  }
75
- function validateStatementAsMetavariable(statement, stated, context) {
76
+ function validateStatementAsMetavariable(statement, context) {
76
77
  let statementValidatesAsMetavariable = false;
77
78
  let metavariable;
78
79
  metavariable = (0, _statement.metavariableFromStatement)(statement, context);
@@ -105,29 +106,36 @@ function validateStatementAsMetavariable(statement, stated, context) {
105
106
  }
106
107
  return statementValidatesAsMetavariable;
107
108
  }
108
- function unifyStatementWithCombinators(statement, stated, context) {
109
- stated = true; ///
110
- const combinators = context.getCombinators(), statementUnifiesWithCombinators = combinators.some((combinator)=>{
111
- const unifiesWithCombinator = combinator.unifyStatement(statement, stated, context);
112
- if (unifiesWithCombinator) {
109
+ function unifyStatementWithCombinators(statement, context) {
110
+ let statementUnifiesWithCombinators = false;
111
+ const combinators = context.getCombinators();
112
+ combinators.some((combinator)=>{
113
+ let statementUnifies;
114
+ (0, _context.descend)((context)=>{
115
+ statementUnifies = combinator.unifyStatement(statement, context);
116
+ }, context);
117
+ if (statementUnifies) {
118
+ statementUnifiesWithCombinators = true;
113
119
  return true;
114
120
  }
115
121
  });
116
122
  return statementUnifiesWithCombinators;
117
123
  }
118
- function unifyStatementWithBracketedCombinator(statement, stated, context) {
119
- stated = true; ///
120
- const bracketedCombinator = (0, _instance.bracketedCombinatorFromNothing)(), statementUnifiesWithBracketedCombinator = bracketedCombinator.unifyStatement(statement, stated, context);
124
+ function unifyStatementWithBracketedCombinator(statement, context) {
125
+ let statementUnifiesWithBracketedCombinator;
126
+ const bracketedCombinator = (0, _instance.bracketedCombinatorFromNothing)();
127
+ statementUnifiesWithBracketedCombinator = bracketedCombinator.unifyStatement(statement, context);
121
128
  return statementUnifiesWithBracketedCombinator;
122
129
  }
123
- function validateStatementAsEquality(statement, stated, context) {
130
+ function validateStatementAsEquality(statement, context) {
124
131
  let statementValidatesAsEquality = false;
132
+ const { Equality } = _elements.default;
125
133
  let equality;
126
- equality = (0, _statement.equalityFromStatement)(statement, context);
134
+ equality = Equality.fromStatement(statement, context);
127
135
  if (equality !== null) {
128
136
  const statementString = statement.getString();
129
137
  context.trace(`Validating the '${statementString}' statement as an equality...`);
130
- equality = equality.validate(stated, context); ///
138
+ equality = equality.validate(context); ///
131
139
  if (equality !== null) {
132
140
  statementValidatesAsEquality = true;
133
141
  }
@@ -137,14 +145,14 @@ function validateStatementAsEquality(statement, stated, context) {
137
145
  }
138
146
  return statementValidatesAsEquality;
139
147
  }
140
- function validateStatementAsJudgement(statement, stated, context) {
148
+ function validateStatementAsJudgement(statement, context) {
141
149
  let validatesStatementAsJudgement = false;
142
150
  let judgement;
143
151
  judgement = (0, _statement.judgementFromStatement)(statement, context);
144
152
  if (judgement !== null) {
145
153
  const statementString = statement.getString();
146
154
  context.trace(`Validating the '${statementString}' statement as a judgement...`);
147
- judgement = judgement.validate(stated, context); ///
155
+ judgement = judgement.validate(context); ///
148
156
  if (judgement !== null) {
149
157
  validatesStatementAsJudgement = true;
150
158
  }
@@ -154,14 +162,14 @@ function validateStatementAsJudgement(statement, stated, context) {
154
162
  }
155
163
  return validatesStatementAsJudgement;
156
164
  }
157
- function validateStatementAsTypeAssertion(statement, stated, context) {
165
+ function validateStatementAsTypeAssertion(statement, context) {
158
166
  let validatesStatementAsTypeAssertion = false;
159
167
  let typeAssertion;
160
168
  typeAssertion = (0, _statement.typeAssertionFromStatement)(statement, context);
161
169
  if (typeAssertion !== null) {
162
170
  const statementString = statement.getString();
163
171
  context.trace(`Validating the '${statementString}' statement as a type assertion...`);
164
- typeAssertion = typeAssertion.validate(stated, context); ///
172
+ typeAssertion = typeAssertion.validate(context); ///
165
173
  if (typeAssertion !== null) {
166
174
  validatesStatementAsTypeAssertion = true;
167
175
  }
@@ -171,14 +179,14 @@ function validateStatementAsTypeAssertion(statement, stated, context) {
171
179
  }
172
180
  return validatesStatementAsTypeAssertion;
173
181
  }
174
- function validateStatementAsDefinedAssertion(statement, stated, context) {
182
+ function validateStatementAsDefinedAssertion(statement, context) {
175
183
  let validatesStatementAsDefinedAssertion = false;
176
184
  let definedAssertion;
177
185
  definedAssertion = (0, _statement.definedAssertionFromStatement)(statement, context);
178
186
  if (definedAssertion !== null) {
179
187
  const statementString = statement.getString();
180
188
  context.trace(`Validating the '${statementString}' statement as a defined assertion...`);
181
- definedAssertion = definedAssertion.validate(stated, context); ///
189
+ definedAssertion = definedAssertion.validate(context); ///
182
190
  if (definedAssertion !== null) {
183
191
  validatesStatementAsDefinedAssertion = true;
184
192
  }
@@ -188,14 +196,14 @@ function validateStatementAsDefinedAssertion(statement, stated, context) {
188
196
  }
189
197
  return validatesStatementAsDefinedAssertion;
190
198
  }
191
- function validateStatementAsPropertyAssertion(statement, stated, context) {
199
+ function validateStatementAsPropertyAssertion(statement, context) {
192
200
  let statementValidatesAsPropertyAssertion = false;
193
201
  let propertyAssertion;
194
202
  propertyAssertion = (0, _statement.propertyAssertionFromStatement)(statement, context);
195
203
  if (propertyAssertion !== null) {
196
204
  const statementString = statement.getString();
197
205
  context.trace(`Validating the '${statementString}' statement as a property assertion...`);
198
- propertyAssertion = propertyAssertion.validate(stated, context); ///
206
+ propertyAssertion = propertyAssertion.validate(context); ///
199
207
  if (propertyAssertion !== null) {
200
208
  statementValidatesAsPropertyAssertion = true;
201
209
  }
@@ -205,14 +213,14 @@ function validateStatementAsPropertyAssertion(statement, stated, context) {
205
213
  }
206
214
  return statementValidatesAsPropertyAssertion;
207
215
  }
208
- function validateStatementAsSubproofAssertion(statement, stated, context) {
216
+ function validateStatementAsSubproofAssertion(statement, context) {
209
217
  let statementValidatesAsSubproofAssertion = false;
210
218
  let subproofAssertion;
211
219
  subproofAssertion = (0, _statement.subproofAssertionFromStatement)(statement, context);
212
220
  if (subproofAssertion !== null) {
213
221
  const statementString = statement.getString();
214
222
  context.trace(`Validating the '${statementString}' statement as a subproof assertion...`);
215
- subproofAssertion = subproofAssertion.validate(stated, context); ///
223
+ subproofAssertion = subproofAssertion.validate(context); ///
216
224
  if (subproofAssertion !== null) {
217
225
  statementValidatesAsSubproofAssertion = true;
218
226
  }
@@ -222,14 +230,14 @@ function validateStatementAsSubproofAssertion(statement, stated, context) {
222
230
  }
223
231
  return statementValidatesAsSubproofAssertion;
224
232
  }
225
- function validateStatementAsContainedAssertion(statement, stated, context) {
233
+ function validateStatementAsContainedAssertion(statement, context) {
226
234
  let validatesStatementAsContainedAssertion = false;
227
235
  let containedAssertion;
228
236
  containedAssertion = (0, _statement.containedAssertionFromStatement)(statement, context);
229
237
  if (containedAssertion !== null) {
230
238
  const statementString = statement.getString();
231
239
  context.trace(`Validating the '${statementString}' statement as a contained assertion...`);
232
- containedAssertion = containedAssertion.validate(stated, context); ///
240
+ containedAssertion = containedAssertion.validate(context); ///
233
241
  if (containedAssertion !== null) {
234
242
  validatesStatementAsContainedAssertion = true;
235
243
  }
@@ -239,14 +247,14 @@ function validateStatementAsContainedAssertion(statement, stated, context) {
239
247
  }
240
248
  return validatesStatementAsContainedAssertion;
241
249
  }
242
- function validateStatementAsSatisfiesAssertion(statement, stated, context) {
250
+ function validateStatementAsSatisfiesAssertion(statement, context) {
243
251
  let validatesAStatementsSatisfiesAssertion = false;
244
252
  let satisfiesAssertion;
245
253
  satisfiesAssertion = (0, _statement.satisfiesAssertionFromStatement)(statement, context);
246
254
  if (satisfiesAssertion !== null) {
247
255
  const statementString = statement.getString();
248
256
  context.trace(`Validating the '${statementString}' statement as a satisfies assertion...`);
249
- satisfiesAssertion = satisfiesAssertion.validate(stated, context); ///
257
+ satisfiesAssertion = satisfiesAssertion.validate(context); ///
250
258
  if (satisfiesAssertion !== null) {
251
259
  validatesAStatementsSatisfiesAssertion = true;
252
260
  }
@@ -275,4 +283,4 @@ const validateStatements = [
275
283
  validateStatementAsSatisfiesAssertion
276
284
  ];
277
285
 
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyB2YXJpYWJsZUZyb21UZXJtIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90ZXJtXCI7XG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RhdGVtZW50XCI7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICBsZXQgdmFyaWFibGU7XG5cbiAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS4uLmApO1xuXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBTZXR0aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSdzIHR5cGUgdG8gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLmApO1xuXG4gICAgICB0ZXJtLnNldFR5cGUodHlwZSk7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc0ZvcndhcmRzID0gdmFsaWRhdGVGb3J3YXJkcyh0ZXJtKTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVZhbGlkYXRlc0FzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICB0ZXJtVW5pZmllcyA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICBsZXQgbWV0YXZhcmlhYmxlO1xuXG4gIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgbGV0IHRlcm1TdWJzdGl0dXRpb24sXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb247XG5cbiAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1TdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb24udmFsaWRhdGUoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7ICAvLy9cblxuICAgICAgICBpZiAodGVybVN1YnN0aXR1dGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChmcmFtZVN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uLnZhbGlkYXRlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpOyAgLy8vXG5cbiAgICAgICAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCksXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5pZmllc1dpdGhDb21iaW5hdG9yID0gY29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodW5pZmllc1dpdGhDb21iaW5hdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGxldCBlcXVhbGl0eTtcblxuICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eS52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBsZXQganVkZ2VtZW50O1xuXG4gIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnQudmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHR5cGVBc3NlcnRpb247XG5cbiAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IGRlZmluZWRBc3NlcnRpb247XG5cbiAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgcHJvcGVydHlBc3NlcnRpb247XG5cbiAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uO1xuXG4gIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbjtcblxuICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUZXJtcyA9IFtcbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSxcbiAgdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyxcbiAgdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gW1xuICB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbInZhbGlkYXRlU3RhdGVtZW50cyIsInZhbGlkYXRlVGVybXMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidGVybSIsImNvbnRleHQiLCJ2YWxpZGF0ZUZvcndhcmRzIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ2YXJpYWJsZSIsInZhcmlhYmxlRnJvbVRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZSIsInR5cGUiLCJnZXRUeXBlIiwidHlwZVN0cmluZyIsInNldFR5cGUiLCJ2YWxpZGF0ZXNGb3J3YXJkcyIsImRlYnVnIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzIiwiY2hvb3NlIiwidW5pZnlUZXJtIiwiY29tbWl0IiwidW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50Iiwic3RhdGVkIiwic3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwiVGVybVN1YnN0aXR1dGlvbiIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvciIsInVuaWZpZXNXaXRoQ29tYmluYXRvciIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmciLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEyWGFBO2VBQUFBOztRQU5BQztlQUFBQTs7O2lFQW5YUTt5QkFFRTtzQkFDVTswQkFDK0M7MkJBU2hDOzs7Ozs7QUFFaEQsU0FBU0MsdUJBQXVCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsZ0JBQWdCO0lBQzdELElBQUlDLDBCQUEwQjtJQUU5QixJQUFJQztJQUVKQSxXQUFXQyxJQUFBQSxzQkFBZ0IsRUFBQ0wsTUFBTUM7SUFFbEMsSUFBSUcsYUFBYSxNQUFNO1FBQ3JCLE1BQU1FLGFBQWFOLEtBQUtPLFNBQVM7UUFFakNOLFFBQVFPLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLHVCQUF1QixDQUFDO1FBRXBFRixXQUFXQSxTQUFTSyxRQUFRLENBQUNSO1FBRTdCLElBQUlHLGFBQWEsTUFBTTtZQUNyQixNQUFNTSxPQUFPTixTQUFTTyxPQUFPLElBQ3ZCQyxh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
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RhdGVtZW50XCI7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cztcblxuICBsZXQgdmFyaWFibGU7XG5cbiAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIHZhcmlhYmxlID0gdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgICB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0ncyB0eXBlIHRvIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS5gKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHModGVybSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNGb3J3YXJkcykge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICB0ZXJtVW5pZmllcyA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IHRydWU7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgbGV0IG1ldGF2YXJpYWJsZTtcblxuICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSB0cnVlO1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgIGxldCB0ZXJtU3Vic3RpdHV0aW9uLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uO1xuXG4gICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uLnZhbGlkYXRlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpOyAgLy8vXG5cbiAgICAgICAgaWYgKHRlcm1TdWJzdGl0dXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoZnJhbWVTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbi52YWxpZGF0ZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTsgIC8vL1xuXG4gICAgICAgIGlmIChmcmFtZVN1YnN0aXR1dGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzID0gZmFsc2U7XG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCk7XG5cbiAgY29tYmluYXRvcnMuc29tZSgoY29tYmluYXRvcikgPT4ge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVzO1xuXG4gICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgc3RhdGVtZW50VW5pZmllcyA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCk7XG5cbiAgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cztcblxuICBsZXQgZXF1YWxpdHk7XG5cbiAgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgbGV0IGp1ZGdlbWVudDtcblxuICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAganVkZ2VtZW50ID0ganVkZ2VtZW50LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHR5cGVBc3NlcnRpb247XG5cbiAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgZGVmaW5lZEFzc2VydGlvbjtcblxuICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uO1xuXG4gIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBjb250YWluZWRBc3NlcnRpb247XG5cbiAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb247XG5cbiAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRlcm1zID0gW1xuICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLFxuICB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzLFxuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3Jcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidmFsaWRhdGVTdGF0ZW1lbnRzIiwidmFsaWRhdGVUZXJtcyIsInZhbGlkYXRlVGVybUFzVmFyaWFibGUiLCJ0ZXJtIiwiY29udGV4dCIsInZhbGlkYXRlRm9yd2FyZHMiLCJ0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSIsIlZhcmlhYmxlIiwiZWxlbWVudHMiLCJ2YXJpYWJsZSIsImZyb21UZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGUiLCJ0eXBlIiwiZ2V0VHlwZSIsInR5cGVTdHJpbmciLCJzZXRUeXBlIiwidmFsaWRhdGVzRm9yd2FyZHMiLCJkZWJ1ZyIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJzb21lIiwiY29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllcyIsImNob29zZSIsInVuaWZ5VGVybSIsImNvbW1pdCIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSIsInN0YXRlbWVudCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsIlRlcm1TdWJzdGl0dXRpb24iLCJGcmFtZVN1YnN0aXR1dGlvbiIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwic3RhdGVtZW50VW5pZmllcyIsImRlc2NlbmQiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsIkVxdWFsaXR5IiwiZXF1YWxpdHkiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF1WWFBO2VBQUFBOztRQU5BQztlQUFBQTs7O2lFQS9YUTt5QkFFVzswQkFDZ0Q7MkJBUWhDOzs7Ozs7QUFFaEQsU0FBU0MsdUJBQXVCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsZ0JBQWdCO0lBQzdELElBQUlDLDBCQUEwQjtJQUU5QixNQUFNLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxpQkFBUTtJQUU3QixJQUFJQztJQUVKQSxXQUFXRixTQUFTRyxRQUFRLENBQUNQLE1BQU1DO0lBRW5DLElBQUlLLGFBQWEsTUFBTTtRQUNyQixNQUFNRSxhQUFhUixLQUFLUyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyx1QkFBdUIsQ0FBQztRQUVwRUYsV0FBV0EsU0FBU0ssUUFBUSxDQUFDVjtRQUU3QixJQUFJSyxhQUFhLE1BQU07WUFDckIsTUFBTU0sT0FBT04sU0FBU08sT0FBTyxJQUN2QkMsYUFBYUYsS0FBS0gsU0FBUztZQUVqQ1IsUUFBUVMsS0FBSyxDQUFDLENBQUMsYUFB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "1.0.768",
4
+ "version": "1.0.776",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -452,9 +452,8 @@ export default class NominalFileContext extends FileContext {
452
452
  const metaLemmas = this.getMetaLemmas();
453
453
 
454
454
  filter(metaLemmas, (metaLemma) => {
455
- const context = this, ///
456
- topLevelMetaAssertion = metaLemma, ///
457
- topLevelMetaAssertionCompares = reference.compareTopLevelMetaAssertion(topLevelMetaAssertion, context);
455
+ const topLevelMetaAssertion = metaLemma, ///
456
+ topLevelMetaAssertionCompares = reference.compareTopLevelMetaAssertion(topLevelMetaAssertion);
458
457
 
459
458
  if (topLevelMetaAssertionCompares) {
460
459
  return true;
@@ -468,9 +467,8 @@ export default class NominalFileContext extends FileContext {
468
467
  const metatheorems = this.getMetatheorems();
469
468
 
470
469
  filter(metatheorems, (metatheorem) => {
471
- const context = this, ///
472
- topLevelMetaAssertion = metatheorem, ///
473
- topLevelMetaAssertionCompares = reference.compareTopLevelMetaAssertion(topLevelMetaAssertion, context);
470
+ const topLevelMetaAssertion = metatheorem, ///
471
+ topLevelMetaAssertionCompares = reference.compareTopLevelMetaAssertion(topLevelMetaAssertion);
474
472
 
475
473
  if (topLevelMetaAssertionCompares) {
476
474
  return true;
@@ -490,17 +488,17 @@ export default class NominalFileContext extends FileContext {
490
488
  return topLevelAssertion;
491
489
  }
492
490
 
493
- findTopLevelMetaAssertionByReference(reference, context) {
494
- const metaLemma = this.findMetaLemmaByReference(reference, context),
495
- metatheorem = this.findMetatheoremByReference(reference, context),
491
+ findTopLevelMetaAssertionByReference(reference) {
492
+ const metaLemma = this.findMetaLemmaByReference(reference),
493
+ metatheorem = this.findMetatheoremByReference(reference),
496
494
  topLevelMetaAssertion = (metaLemma || metatheorem); ///
497
495
 
498
496
  return topLevelMetaAssertion;
499
497
  }
500
498
 
501
- findTopLevelMetaAssertionsByReference(reference, context) {
502
- const metaLemmas = this.findMetaLemmasByReference(reference, context),
503
- metatheorems = this.findMetatheoremsByReference(reference, context),
499
+ findTopLevelMetaAssertionsByReference(reference) {
500
+ const metaLemmas = this.findMetaLemmasByReference(reference),
501
+ metatheorems = this.findMetatheoremsByReference(reference),
504
502
  topLevelMetaAssertions = [
505
503
  ...metaLemmas,
506
504
  ...metatheorems
@@ -634,10 +632,10 @@ export default class NominalFileContext extends FileContext {
634
632
  return metavariablePresent;
635
633
  }
636
634
 
637
- isLabelPresentByReference(reference, context) {
635
+ isLabelPresentByReference(reference) {
638
636
  const labels = this.getLabels(),
639
637
  labelPresent = labels.some((label) => {
640
- const labelUnifies = reference.unifyLabel(label, context);
638
+ const labelUnifies = reference.unifyLabel(label);
641
639
 
642
640
  if (labelUnifies) {
643
641
  return true;
@@ -647,8 +645,8 @@ export default class NominalFileContext extends FileContext {
647
645
  return labelPresent;
648
646
  }
649
647
 
650
- isTopLevelMetaAssertionPresentByReference(reference, context) {
651
- const topLevelMetaAssertion = this.findTopLevelMetaAssertionByReference(reference, context),
648
+ isTopLevelMetaAssertionPresentByReference(reference) {
649
+ const topLevelMetaAssertion = this.findTopLevelMetaAssertionByReference(reference),
652
650
  topLevelMetaAssertionPresent = (topLevelMetaAssertion !== null);
653
651
 
654
652
  return topLevelMetaAssertionPresent;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ import Context from "../context";
4
+
5
+ export default class IllativeContext extends Context {
6
+ isStated() {
7
+ const stated = false;
8
+
9
+ return stated;
10
+ }
11
+
12
+ static fromNothing(context) {
13
+ const illativeContext = new IllativeContext(context);
14
+
15
+ return illativeContext;
16
+ }
17
+ }