occam-verify-cli 0.0.880 → 0.0.882

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/lib/assignment/judgement.js +62 -0
  2. package/lib/axiomLemmaTheoremConjecture.js +4 -10
  3. package/lib/context/file.js +47 -41
  4. package/lib/context/local.js +19 -7
  5. package/lib/context/localMeta.js +58 -16
  6. package/lib/declaration.js +90 -0
  7. package/lib/frame.js +105 -0
  8. package/lib/judgement.js +87 -0
  9. package/lib/label.js +3 -3
  10. package/lib/metaLemmaMetatheorem.js +4 -4
  11. package/lib/metaType/{label.js → frame.js} +12 -12
  12. package/lib/metaType/{context.js → reference.js} +12 -12
  13. package/lib/metaTypeNames.js +7 -7
  14. package/lib/metaTypes.js +5 -5
  15. package/lib/mixins/context.js +32 -24
  16. package/lib/premise.js +2 -26
  17. package/lib/rule.js +4 -10
  18. package/lib/supposition.js +1 -53
  19. package/lib/utilities/name.js +3 -11
  20. package/lib/verify/declaration.js +36 -18
  21. package/lib/verify/frame.js +75 -0
  22. package/lib/verify/judgement.js +95 -20
  23. package/lib/verify/label.js +8 -8
  24. package/lib/verify/labels.js +4 -4
  25. package/lib/verify/metastatement/qualified.js +12 -8
  26. package/lib/verify/metastatement.js +5 -21
  27. package/lib/verify/metavariable.js +3 -3
  28. package/lib/verify/statement/qualified.js +6 -6
  29. package/package.json +2 -2
  30. package/src/assignment/judgement.js +30 -0
  31. package/src/axiomLemmaTheoremConjecture.js +3 -12
  32. package/src/context/file.js +38 -33
  33. package/src/context/local.js +6 -2
  34. package/src/context/localMeta.js +62 -15
  35. package/src/declaration.js +58 -0
  36. package/src/frame.js +69 -0
  37. package/src/judgement.js +38 -0
  38. package/src/label.js +2 -2
  39. package/src/metaLemmaMetatheorem.js +3 -3
  40. package/src/metaType/frame.js +18 -0
  41. package/src/metaType/reference.js +18 -0
  42. package/src/metaTypeNames.js +2 -2
  43. package/src/metaTypes.js +4 -4
  44. package/src/mixins/context.js +21 -15
  45. package/src/premise.js +0 -41
  46. package/src/rule.js +3 -12
  47. package/src/supposition.js +0 -45
  48. package/src/utilities/name.js +5 -15
  49. package/src/verify/declaration.js +48 -21
  50. package/src/verify/frame.js +91 -0
  51. package/src/verify/judgement.js +142 -21
  52. package/src/verify/label.js +7 -8
  53. package/src/verify/labels.js +4 -3
  54. package/src/verify/metastatement/qualified.js +14 -11
  55. package/src/verify/metastatement.js +4 -30
  56. package/src/verify/metavariable.js +2 -2
  57. package/src/verify/statement/qualified.js +10 -10
  58. package/lib/assignment/metaEquality.js +0 -62
  59. package/lib/metaEquality.js +0 -101
  60. package/lib/verify/context.js +0 -34
  61. package/lib/verify/metaEquality.js +0 -69
  62. package/src/assignment/metaEquality.js +0 -30
  63. package/src/metaEquality.js +0 -84
  64. package/src/metaType/context.js +0 -18
  65. package/src/metaType/label.js +0 -18
  66. package/src/verify/context.js +0 -30
  67. package/src/verify/metaEquality.js +0 -83
@@ -60,7 +60,7 @@ function verifyQualifiedStatement(qualifiedStatementNode, assignments, derived,
60
60
  }
61
61
  function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, referenceMetavariableNode, localContext) {
62
62
  var qualifiedStatementVerifiedAgainstRule = false;
63
- var labelMetavariableNode = referenceMetavariableNode, rule = localContext.findRuleByLabelMetavariableNode(labelMetavariableNode);
63
+ var metavariableNode = referenceMetavariableNode, rule = localContext.findRuleByMetavariableNode(metavariableNode);
64
64
  if (rule !== null) {
65
65
  var referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode), statementNode = statementNodeQuery(qualifiedStatementNode), statementLocalContext = localContext, qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
66
66
  localContext.trace("Verifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(referenceMetavariableString, "' rule..."), statementNode);
@@ -74,7 +74,7 @@ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, referenceM
74
74
  }
75
75
  function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, referenceMetavariableNode, localContext) {
76
76
  var qualifiedStatementVerifiedAgainstAxiom = false;
77
- var labelMetavariableNode = referenceMetavariableNode, axiom = localContext.findAxiomByLabelMetavariableNode(labelMetavariableNode);
77
+ var metavariableNode = referenceMetavariableNode, axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
78
78
  if (axiom !== null) {
79
79
  var referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode), statementNode = statementNodeQuery(qualifiedStatementNode), statementLocalContext = localContext, qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
80
80
  localContext.trace("Verifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(referenceMetavariableString, "' axiom..."), statementNode);
@@ -88,7 +88,7 @@ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, reference
88
88
  }
89
89
  function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, referenceMetavariableNode, localContext) {
90
90
  var qualifiedStatementVerifiedAgainstLemma = false;
91
- var labelMetavariableNode = referenceMetavariableNode, lemma = localContext.findLemmaByLabelMetavariableNode(labelMetavariableNode);
91
+ var metavariableNode = referenceMetavariableNode, lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
92
92
  if (lemma !== null) {
93
93
  var referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode), statementNode = statementNodeQuery(qualifiedStatementNode), statementLocalContext = localContext, qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
94
94
  localContext.trace("Verifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(referenceMetavariableString, "' lemma..."), statementNode);
@@ -102,7 +102,7 @@ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, reference
102
102
  }
103
103
  function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, referenceMetavariableNode, localContext) {
104
104
  var qualifiedStatementVerifiedAgainstTheorem = false;
105
- var labelMetavariableNode = referenceMetavariableNode, theorem = localContext.findTheoremByLabelMetavariableNode(labelMetavariableNode);
105
+ var metavariableNode = referenceMetavariableNode, theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
106
106
  if (theorem !== null) {
107
107
  var referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode), statementNode = statementNodeQuery(qualifiedStatementNode), statementLocalContext = localContext, qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
108
108
  localContext.trace("Verifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(referenceMetavariableString, "' theorem..."), statementNode);
@@ -116,7 +116,7 @@ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, referen
116
116
  }
117
117
  function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, referenceMetavariableNode, localContext) {
118
118
  var qualifiedStatementVerifiedAgainstConjecture = false;
119
- var labelMetavariableNode = referenceMetavariableNode, conjecture = localContext.findConjectureByLabelMetavariableNode(labelMetavariableNode);
119
+ var metavariableNode = referenceMetavariableNode, conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
120
120
  if (conjecture !== null) {
121
121
  var referenceMetavariableString = localContext.nodeAsString(referenceMetavariableNode), statementNode = statementNodeQuery(qualifiedStatementNode), statementLocalContext = localContext, qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
122
122
  localContext.trace("Verifying the '".concat(qualifiedStatementString, "' qualified statement against the '").concat(referenceMetavariableString, "' conjecture..."), statementNode);
@@ -157,4 +157,4 @@ function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignm
157
157
  return statementVerifiedAsTypeAssertion;
158
158
  }
159
159
 
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3F1YWxpZmllZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHZlcmlmeUVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL3R5cGVBc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9xdWFsaWZpZWRTdGF0ZW1lbnQvc3RhdGVtZW50L2VxdWFsaXR5IVwiKSxcbiAgICAgIHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9xdWFsaWZpZWRTdGF0ZW1lbnQvc3RhdGVtZW50IVwiKSxcbiAgICAgIHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKSxcbiAgICAgIHJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9xdWFsaWZpZWRTdGF0ZW1lbnQvcmVmZXJlbmNlIS9tZXRhdmFyaWFibGUhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnQocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50Li4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICAgICAgICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UnVsZSxcbiAgICAgICAgICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0QXhpb20sXG4gICAgICAgICAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdExlbW1hLFxuICAgICAgICAgICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RUaGVvcmVtLFxuICAgICAgICAgICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RDb25qZWN0dXJlXG4gICAgICAgICAgXTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zLnNvbWUoKHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICBkZXJpdmVkID0gZmFsc2U7ICAvLy9cblxuICAgICAgY29uc3QgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgICAgICAgICAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICAgICAgICAgICAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb25cbiAgICAgICAgICAgIF07XG5cbiAgICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zLmV2ZXJ5KCh2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbikgPT4geyAvLy9cbiAgICAgICAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbihxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmVyaWZpZWRBaGVhZCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudC5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UnVsZShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGUgPSBmYWxzZTtcblxuICBjb25zdCBsYWJlbE1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHJ1bGUgPSBsb2NhbENvbnRleHQuZmluZFJ1bGVCeUxhYmVsTWV0YXZhcmlhYmxlTm9kZShsYWJlbE1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChydWxlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIHJ1bGUuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHJ1bGVNYXRjaGVzU3RhdGVtZW50ID0gcnVsZS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UnVsZSA9IHJ1bGVNYXRjaGVzU3RhdGVtZW50OyAgLy8vXG5cbiAgICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UnVsZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBydWxlLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdEF4aW9tKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20gPSBmYWxzZTtcblxuICBjb25zdCBsYWJlbE1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIGF4aW9tID0gbG9jYWxDb250ZXh0LmZpbmRBeGlvbUJ5TGFiZWxNZXRhdmFyaWFibGVOb2RlKGxhYmVsTWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLi4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBheGlvbU1hdGNoZXNTdGF0ZW1lbnQgPSBheGlvbS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20gPSBheGlvbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hID0gZmFsc2U7XG5cbiAgY29uc3QgbGFiZWxNZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBsZW1tYSA9IGxvY2FsQ29udGV4dC5maW5kTGVtbWFCeUxhYmVsTWV0YXZhcmlhYmxlTm9kZShsYWJlbE1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChsZW1tYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRMb2NhbENvbnRleHQgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBsZW1tYS4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgbGVtbWFNYXRjaGVzU3RhdGVtZW50ID0gbGVtbWEubWF0Y2hTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50TG9jYWxDb250ZXh0KTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hID0gbGVtbWFNYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBsZW1tYS5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0TGVtbWE7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFRoZW9yZW0gPSBmYWxzZTtcblxuICBjb25zdCBsYWJlbE1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHRoZW9yZW0gPSBsb2NhbENvbnRleHQuZmluZFRoZW9yZW1CeUxhYmVsTWV0YXZhcmlhYmxlTm9kZShsYWJlbE1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmICh0aGVvcmVtICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIHRoZW9yZW0uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHRoZW9yZW1NYXRjaGVzU3RhdGVtZW50ID0gdGhlb3JlbS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbSA9IHRoZW9yZW1NYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIHRoZW9yZW0uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFRoZW9yZW07XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0Q29uamVjdHVyZShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmUgPSBmYWxzZTtcblxuICBjb25zdCBsYWJlbE1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIGNvbmplY3R1cmUgPSBsb2NhbENvbnRleHQuZmluZENvbmplY3R1cmVCeUxhYmVsTWV0YXZhcmlhYmxlTm9kZShsYWJlbE1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChjb25qZWN0dXJlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50ID0gY29uamVjdHVyZS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb25qZWN0dXJlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFzRXF1YWxpdHkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZWQgPSB2ZXJpZnlFcXVhbGl0eShlcXVhbGl0eU5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQsIHZlcmlmeUFoZWFkKTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudCIsImVxdWFsaXR5Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidHlwZUFzc2VydGlvbk5vZGVRdWVyeSIsInJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsInF1YWxpZmllZFN0YXRlbWVudE5vZGUiLCJhc3NpZ25tZW50cyIsImRlcml2ZWQiLCJsb2NhbENvbnRleHQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInN0YXRlbWVudE5vZGUiLCJxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbnMiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdEF4aW9tIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0Q29uamVjdHVyZSIsInNvbWUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbiIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFzRXF1YWxpdHkiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJldmVyeSIsInZlcmlmaWVkQWhlYWQiLCJkZWJ1ZyIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGUiLCJsYWJlbE1ldGF2YXJpYWJsZU5vZGUiLCJydWxlIiwiZmluZFJ1bGVCeUxhYmVsTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZyIsInN0YXRlbWVudExvY2FsQ29udGV4dCIsInJ1bGVNYXRjaGVzU3RhdGVtZW50IiwibWF0Y2hTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbSIsImF4aW9tIiwiZmluZEF4aW9tQnlMYWJlbE1ldGF2YXJpYWJsZU5vZGUiLCJheGlvbU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSIsImxlbW1hIiwiZmluZExlbW1hQnlMYWJlbE1ldGF2YXJpYWJsZU5vZGUiLCJsZW1tYU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtIiwidGhlb3JlbSIsImZpbmRUaGVvcmVtQnlMYWJlbE1ldGF2YXJpYWJsZU5vZGUiLCJ0aGVvcmVtTWF0Y2hlc1N0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmUiLCJjb25qZWN0dXJlIiwiZmluZENvbmplY3R1cmVCeUxhYmVsTWV0YXZhcmlhYmxlTm9kZSIsImNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50IiwidmVyaWZ5QWhlYWQiLCJzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVZlcmlmaWVkIiwidmVyaWZ5RXF1YWxpdHkiLCJzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VHlwZUFzc2VydGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBWUE7OztlQUF3QkE7OzsrREFWRztvRUFDSztxQkFFTjs7Ozs7O0FBRTFCLElBQU1DLG9CQUFvQkMsSUFBQUEsZ0JBQVMsRUFBQyw0Q0FDOUJDLHFCQUFxQkQsSUFBQUEsZ0JBQVMsRUFBQyxtQ0FDL0JFLHlCQUF5QkYsSUFBQUEsZ0JBQVMsRUFBQyxpREFDbkNHLGlDQUFpQ0gsSUFBQUEsZ0JBQVMsRUFBQztBQUVsQyxTQUFTRix5QkFBeUJNLHNCQUFzQixFQUFFQyxXQUFXLEVBQUVDLE9BQU8sRUFBRUMsWUFBWTtJQUN6RyxJQUFJQyw2QkFBNkI7SUFFakMsSUFBTUMsZ0JBQWdCUixtQkFBbUJHO0lBRXpDLElBQUlLLGtCQUFrQixNQUFNO1FBQzFCLElBQU1DLDJCQUEyQkgsYUFBYUksWUFBWSxDQUFDUDtRQUUzREcsYUFBYUssS0FBSyxDQUFDLEFBQUMsa0JBQTBDLE9BQXpCRiwwQkFBeUIsNkJBQTJCTjtRQUV6RixJQUFNUyw0QkFBNEJWLCtCQUErQkMseUJBQzNEVSxvQ0FBb0M7WUFDbENDO1lBQ0FDO1lBQ0FDO1lBQ0FDO1lBQ0FDO1NBQ0Q7UUFFUFgsNkJBQTZCTSxrQ0FBa0NNLElBQUksQ0FBQyxTQUFDQztZQUNuRSxJQUFNYiw2QkFBNkJhLGlDQUFpQ2pCLHdCQUF3QlMsMkJBQTJCTjtZQUV2SCxJQUFJQyw0QkFBNEI7Z0JBQzlCLE9BQU87WUFDVDtRQUNGO1FBRUEsSUFBSUEsNEJBQTRCO1lBQzlCRixVQUFVLE9BQVEsR0FBRztZQUVyQixJQUFNUSxxQ0FBb0M7Z0JBQ2xDUTtnQkFDQUM7YUFDRDtZQUVQZiw2QkFBNkJNLG1DQUFrQ1UsS0FBSyxDQUFDLFNBQUNIO2dCQUNwRSxJQUFNYiw2QkFBNkJhLGlDQUFpQ2pCLHdCQUF3QkMsYUFBYUMsU0FBU0Ms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
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3F1YWxpZmllZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHZlcmlmeUVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL3R5cGVBc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBlcXVhbGl0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9xdWFsaWZpZWRTdGF0ZW1lbnQvc3RhdGVtZW50L2VxdWFsaXR5IVwiKSxcbiAgICAgIHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9xdWFsaWZpZWRTdGF0ZW1lbnQvc3RhdGVtZW50IVwiKSxcbiAgICAgIHR5cGVBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKSxcbiAgICAgIHJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9xdWFsaWZpZWRTdGF0ZW1lbnQvcmVmZXJlbmNlIS9tZXRhdmFyaWFibGUhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnQocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50Li4uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9ucyA9IFtcbiAgICAgICAgICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UnVsZSxcbiAgICAgICAgICAgIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0QXhpb20sXG4gICAgICAgICAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdExlbW1hLFxuICAgICAgICAgICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RUaGVvcmVtLFxuICAgICAgICAgICAgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RDb25qZWN0dXJlXG4gICAgICAgICAgXTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zLnNvbWUoKHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEZ1bmN0aW9uKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb24ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICBkZXJpdmVkID0gZmFsc2U7ICAvLy9cblxuICAgICAgY29uc3QgdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgICAgICAgICAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICAgICAgICAgICAgICB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb25cbiAgICAgICAgICAgIF07XG5cbiAgICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50RnVuY3Rpb25zLmV2ZXJ5KCh2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbikgPT4geyAvLy9cbiAgICAgICAgY29uc3QgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbihxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgZGVyaXZlZCwgbG9jYWxDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmVyaWZpZWRBaGVhZCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudC5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0UnVsZShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGUgPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBydWxlID0gbG9jYWxDb250ZXh0LmZpbmRSdWxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChydWxlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIHJ1bGUuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHJ1bGVNYXRjaGVzU3RhdGVtZW50ID0gcnVsZS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UnVsZSA9IHJ1bGVNYXRjaGVzU3RhdGVtZW50OyAgLy8vXG5cbiAgICBpZiAocXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0UnVsZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBydWxlLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RSdWxlO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdEF4aW9tKHF1YWxpZmllZFN0YXRlbWVudE5vZGUsIHJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20gPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBheGlvbSA9IGxvY2FsQ29udGV4dC5maW5kQXhpb21CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLi4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBheGlvbU1hdGNoZXNTdGF0ZW1lbnQgPSBheGlvbS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0QXhpb20gPSBheGlvbU1hdGNoZXNTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgaWYgKHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGF4aW9tLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RBeGlvbTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgbGVtbWEgPSBsb2NhbENvbnRleHQuZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChsZW1tYSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRMb2NhbENvbnRleHQgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgIHF1YWxpZmllZFN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBsZW1tYS4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgbGVtbWFNYXRjaGVzU3RhdGVtZW50ID0gbGVtbWEubWF0Y2hTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50TG9jYWxDb250ZXh0KTtcblxuICAgIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdExlbW1hID0gbGVtbWFNYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhZ2FpbnN0IHRoZSAnJHtyZWZlcmVuY2VNZXRhdmFyaWFibGVTdHJpbmd9JyBsZW1tYS5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0TGVtbWE7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFRoZW9yZW0gPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICB0aGVvcmVtID0gbG9jYWxDb250ZXh0LmZpbmRUaGVvcmVtQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmICh0aGVvcmVtICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIHRoZW9yZW0uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHRoZW9yZW1NYXRjaGVzU3RhdGVtZW50ID0gdGhlb3JlbS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbSA9IHRoZW9yZW1NYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RUaGVvcmVtKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIHRoZW9yZW0uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFRoZW9yZW07XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0Q29uamVjdHVyZShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlLCByZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmUgPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBjb25qZWN0dXJlID0gbG9jYWxDb250ZXh0LmZpbmRDb25qZWN0dXJlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGlmIChjb25qZWN0dXJlICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhyZWZlcmVuY2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIHN0YXRlbWVudExvY2FsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgcXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50ID0gY29uamVjdHVyZS5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnRMb2NhbENvbnRleHQpO1xuXG4gICAgcXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSA9IGNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50OyAvLy9cblxuICAgIGlmIChxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RDb25qZWN0dXJlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFnYWluc3QgdGhlICcke3JlZmVyZW5jZU1ldGF2YXJpYWJsZVN0cmluZ30nIGNvbmplY3R1cmUuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdENvbmplY3R1cmU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFzRXF1YWxpdHkocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IHRydWU7IC8vL1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZWQgPSB2ZXJpZnlFcXVhbGl0eShlcXVhbGl0eU5vZGUsIGFzc2lnbm1lbnRzLCBkZXJpdmVkLCBsb2NhbENvbnRleHQsIHZlcmlmeUFoZWFkKTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nfScgcXVhbGlmaWVkIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gLCBxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24ocXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShxdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3F1YWxpZmllZFN0YXRlbWVudFN0cmluZ30nIHF1YWxpZmllZCBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmAsIHF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIGRlcml2ZWQsIGxvY2FsQ29udGV4dCwgdmVyaWZ5QWhlYWQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmd9JyBxdWFsaWZpZWQgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCwgcXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudCIsImVxdWFsaXR5Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidHlwZUFzc2VydGlvbk5vZGVRdWVyeSIsInJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsInF1YWxpZmllZFN0YXRlbWVudE5vZGUiLCJhc3NpZ25tZW50cyIsImRlcml2ZWQiLCJsb2NhbENvbnRleHQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCIsInN0YXRlbWVudE5vZGUiLCJxdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInJlZmVyZW5jZU1ldGF2YXJpYWJsZU5vZGUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbnMiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdFJ1bGUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBQWdhaW5zdEF4aW9tIiwidmVyaWZ5UXVhbGlmaWVkU3RhdGVtZW50QUFnYWluc3RMZW1tYSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0VGhlb3JlbSIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFBZ2FpbnN0Q29uamVjdHVyZSIsInNvbWUiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRGdW5jdGlvbiIsInZlcmlmeVF1YWxpZmllZFN0YXRlbWVudEFzRXF1YWxpdHkiLCJ2ZXJpZnlRdWFsaWZpZWRTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJldmVyeSIsInZlcmlmaWVkQWhlYWQiLCJkZWJ1ZyIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdFJ1bGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicnVsZSIsImZpbmRSdWxlQnlNZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWV0YXZhcmlhYmxlU3RyaW5nIiwic3RhdGVtZW50TG9jYWxDb250ZXh0IiwicnVsZU1hdGNoZXNTdGF0ZW1lbnQiLCJtYXRjaFN0YXRlbWVudCIsInF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkQWdhaW5zdEF4aW9tIiwiYXhpb20iLCJmaW5kQXhpb21CeU1ldGF2YXJpYWJsZU5vZGUiLCJheGlvbU1hdGNoZXNTdGF0ZW1lbnQiLCJxdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZEFnYWluc3RMZW1tYSIsImxlbW1hIiwiZmluZExlbW1hQnlNZXRhdmFyaWFibGVOb2RlIiwibGVtbWFNYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0VGhlb3JlbSIsInRoZW9yZW0iLCJmaW5kVGhlb3JlbUJ5TWV0YXZhcmlhYmxlTm9kZSIsInRoZW9yZW1NYXRjaGVzU3RhdGVtZW50IiwicXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWRBZ2FpbnN0Q29uamVjdHVyZSIsImNvbmplY3R1cmUiLCJmaW5kQ29uamVjdHVyZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImNvbmplY3R1cmVNYXRjaGVzU3RhdGVtZW50IiwidmVyaWZ5QWhlYWQiLCJzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVZlcmlmaWVkIiwidmVyaWZ5RXF1YWxpdHkiLCJzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VHlwZUFzc2VydGlv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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": "0.0.880",
4
+ "version": "0.0.882",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -12,7 +12,7 @@
12
12
  "dependencies": {
13
13
  "argumentative": "^2.0.28",
14
14
  "necessary": "^14.0.1",
15
- "occam-custom-grammars": "^5.0.786",
15
+ "occam-custom-grammars": "^5.0.788",
16
16
  "occam-entities": "^1.0.135",
17
17
  "occam-file-system": "^6.0.177",
18
18
  "occam-grammar-utilities": "^8.0.205",
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ export default class JudgementAssignment {
4
+ constructor(judgement) {
5
+ this.judgement = judgement;
6
+ }
7
+
8
+ getJudgement() {
9
+ return this.judgement;
10
+ }
11
+
12
+ assign(localMetaContext) {
13
+ const judgementAdded = localMetaContext.addJudgement(this.judgement),
14
+ judgementNode = this.judgement.getNode(),
15
+ judgementString = localMetaContext.nodeAsString(judgementNode),
16
+ judgementAssigned = judgementAdded; ///
17
+
18
+ judgementAssigned ?
19
+ localMetaContext.trace(`Assigned the '${judgementString}' judgement.`, judgementNode) :
20
+ localMetaContext.debug(`Unable to assign the '${judgementString}' judgement.`, judgementNode);
21
+
22
+ return judgementAssigned;
23
+ }
24
+
25
+ static fromJudgement(judgement) {
26
+ const judgementAssignment = new JudgementAssignment(judgement);
27
+
28
+ return judgementAssignment;
29
+ }
30
+ }
@@ -66,9 +66,9 @@ export default class AxiomLemmaTheoremConjecture {
66
66
  return statementNatches;
67
67
  }
68
68
 
69
- matchLabelMetavariableNode(labelMetavariableNode) {
69
+ matchLabelMetavariableNode(metavariableNode) {
70
70
  const labelMetavariableNodeMatches = this.labels.some((label) => {
71
- const node = labelMetavariableNode, ///
71
+ const node = metavariableNode, ///
72
72
  labelMatchesNode = label.matchNode(node);
73
73
 
74
74
  if (labelMatchesNode) {
@@ -149,16 +149,7 @@ export default class AxiomLemmaTheoremConjecture {
149
149
 
150
150
  function matchSupposition(supposition, proofSteps, substitutions, localContext, statementLocalContext) {
151
151
  const proofStep = prune(proofSteps, (proofStep) => {
152
- const subproofNode = proofStep.getSubproofNode(),
153
- statementNode = proofStep.getStatementNode();
154
-
155
- if (subproofNode !== null) {
156
- const subProofMatches = supposition.matchSubproofNode(subproofNode, substitutions, localContext, statementLocalContext);
157
-
158
- if (!subProofMatches) { ///
159
- return true;
160
- }
161
- }
152
+ const statementNode = proofStep.getStatementNode();
162
153
 
163
154
  if (statementNode !== null) {
164
155
  const statementMatches = supposition.matchStatementNode(statementNode, substitutions, localContext, statementLocalContext);
@@ -17,7 +17,6 @@ import { push } from "../utilities/array";
17
17
  import { objectType } from "../type";
18
18
  import { typeFromJSONAndFileContext } from "../type";
19
19
  import { nodeAsString, nodesAsString } from "../utilities/string";
20
- import localMeta from "./localMeta";
21
20
 
22
21
  export default class FileContext {
23
22
  constructor(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, constructors, metatheorems, metavariables) {
@@ -71,6 +70,12 @@ export default class FileContext {
71
70
  return proofSteps;
72
71
  }
73
72
 
73
+ getJudgements() {
74
+ const judgements = [];
75
+
76
+ return judgements;
77
+ }
78
+
74
79
  getEquivalences() {
75
80
  const equivalences = []; ///
76
81
 
@@ -355,22 +360,8 @@ export default class FileContext {
355
360
  return metaType;
356
361
  }
357
362
 
358
- findMetavariableByMetavariableNode(metavariableNode) {
359
- const node = metavariableNode, ///
360
- metavariables = this.getMetavariables(),
361
- metavariable = metavariables.find((metavariable) => {
362
- const matches = metavariable.matchNode(node);
363
-
364
- if (matches) {
365
- return true;
366
- }
367
- }) || null;
368
-
369
- return metavariable;
370
- }
371
-
372
- findLabelByLabelMetavariableNode(labelMetavariableNode) {
373
- const name = labelMetavariableNode, ///
363
+ findLabelByMetavariableNode(metavariableNode) {
364
+ const name = metavariableNode, ///
374
365
  labels = this.getLabels(),
375
366
  label = labels.find((label) => {
376
367
  const matches = label.matchNode(name);
@@ -383,10 +374,10 @@ export default class FileContext {
383
374
  return label;
384
375
  }
385
376
 
386
- findRuleByLabelMetavariableNode(labelMetavariableNode) {
377
+ findRuleByMetavariableNode(metavariableNode) {
387
378
  const rules = this.getRules(),
388
379
  rule = rules.find((rule) => {
389
- const ruleMatchesLabelMetavariableNode = rule.matchLabelMetavariableNode(labelMetavariableNode);
380
+ const ruleMatchesLabelMetavariableNode = rule.matchLabelMetavariableNode(metavariableNode);
390
381
 
391
382
  if (ruleMatchesLabelMetavariableNode) {
392
383
  return true;
@@ -396,10 +387,10 @@ export default class FileContext {
396
387
  return rule;
397
388
  }
398
389
 
399
- findAxiomByLabelMetavariableNode(labelMetavariableNode) {
390
+ findAxiomByMetavariableNode(metavariableNode) {
400
391
  const axioms = this.getAxioms(),
401
392
  axiom = axioms.find((axiom) => {
402
- const axiomMatchesLabelMetavariableNode = axiom.matchLabelMetavariableNode(labelMetavariableNode);
393
+ const axiomMatchesLabelMetavariableNode = axiom.matchLabelMetavariableNode(metavariableNode);
403
394
 
404
395
  if (axiomMatchesLabelMetavariableNode) {
405
396
  return true;
@@ -409,10 +400,10 @@ export default class FileContext {
409
400
  return axiom;
410
401
  }
411
402
 
412
- findLemmaByLabelMetavariableNode(labelMetavariableNode) {
403
+ findLemmaByMetavariableNode(metavariableNode) {
413
404
  const lemmas = this.getLemmas(),
414
405
  lemma = lemmas.find((lemma) => {
415
- const lemmaMatchesLabelMetavariableNode = lemma.matchLabelMetavariableNode(labelMetavariableNode);
406
+ const lemmaMatchesLabelMetavariableNode = lemma.matchLabelMetavariableNode(metavariableNode);
416
407
 
417
408
  if (lemmaMatchesLabelMetavariableNode) {
418
409
  return true;
@@ -422,10 +413,10 @@ export default class FileContext {
422
413
  return lemma;
423
414
  }
424
415
 
425
- findTheoremByLabelMetavariableNode(labelMetavariableNode) {
416
+ findTheoremByMetavariableNode(metavariableNode) {
426
417
  const theorems = this.getTheorems(),
427
418
  theorem = theorems.find((theorem) => {
428
- const theoremMatchesLabelMetavariableNode = theorem.matchLabelMetavariableNode(labelMetavariableNode);
419
+ const theoremMatchesLabelMetavariableNode = theorem.matchLabelMetavariableNode(metavariableNode);
429
420
 
430
421
  if (theoremMatchesLabelMetavariableNode) {
431
422
  return true;
@@ -435,10 +426,10 @@ export default class FileContext {
435
426
  return theorem;
436
427
  }
437
428
 
438
- findMetaLemmaByLabelMetavariableNode(labelMetavariableNode) {
429
+ findMetaLemmaByMetavariableNode(metavariableNode) {
439
430
  const metaLemmas = this.getMetaLemmas(),
440
431
  metaLemma = metaLemmas.find((metaLemma) => {
441
- const metaLemmaMatchesLabelMetavariableNode = metaLemma.matchLabelMetavariableNode(labelMetavariableNode);
432
+ const metaLemmaMatchesLabelMetavariableNode = metaLemma.matchLabelMetavariableNode(metavariableNode);
442
433
 
443
434
  if (metaLemmaMatchesLabelMetavariableNode) {
444
435
  return true;
@@ -448,10 +439,10 @@ export default class FileContext {
448
439
  return metaLemma;
449
440
  }
450
441
 
451
- findConjectureByLabelMetavariableNode(labelMetavariableNode) {
442
+ findConjectureByMetavariableNode(metavariableNode) {
452
443
  const conjectures = this.getConjectures(),
453
444
  conjecture = conjectures.find((conjecture) => {
454
- const conjectureMatchesLabelMetavariableNode = conjecture.matchLabelMetavariableNode(labelMetavariableNode);
445
+ const conjectureMatchesLabelMetavariableNode = conjecture.matchLabelMetavariableNode(metavariableNode);
455
446
 
456
447
  if (conjectureMatchesLabelMetavariableNode) {
457
448
  return true;
@@ -461,10 +452,10 @@ export default class FileContext {
461
452
  return conjecture;
462
453
  }
463
454
 
464
- findMetatheoremByLabelMetavariableNode(labelMetavariableNode) {
455
+ findMetatheoremByMetavariableNode(metavariableNode) {
465
456
  const metatheorems = this.getMetatheorems(),
466
457
  metatheorem = metatheorems.find((metatheorem) => {
467
- const metatheoremMatchesLabelMetavariableNode = metatheorem.matchLabelMetavariableNode(labelMetavariableNode);
458
+ const metatheoremMatchesLabelMetavariableNode = metatheorem.matchLabelMetavariableNode(metavariableNode);
468
459
 
469
460
  if (metatheoremMatchesLabelMetavariableNode) {
470
461
  return true;
@@ -474,6 +465,20 @@ export default class FileContext {
474
465
  return metatheorem;
475
466
  }
476
467
 
468
+ findMetavariableByMetavariableNode(metavariableNode) {
469
+ const node = metavariableNode, ///
470
+ metavariables = this.getMetavariables(),
471
+ metavariable = metavariables.find((metavariable) => {
472
+ const matches = metavariable.matchNode(node);
473
+
474
+ if (matches) {
475
+ return true;
476
+ }
477
+ }) || null;
478
+
479
+ return metavariable;
480
+ }
481
+
477
482
  isTypePresentByTypeName(typeName) {
478
483
  const type = this.findTypeByTypeName(typeName),
479
484
  typePresent = (type !== null);
@@ -502,8 +507,8 @@ export default class FileContext {
502
507
  return variablePresent;
503
508
  }
504
509
 
505
- isLabelPresentByLabelMetavariableNode(labelMetavariableNode) {
506
- const label = this.findLabelByLabelMetavariableNode(labelMetavariableNode),
510
+ isLabelPresentByMetavariableNode(metavariableNode) {
511
+ const label = this.findLabelByMetavariableNode(metavariableNode),
507
512
  labelPresent = (label !== null);
508
513
 
509
514
  return labelPresent;
@@ -53,6 +53,12 @@ class LocalContext {
53
53
  return equivalences;
54
54
  }
55
55
 
56
+ getJudgements() { return this.context.getJudgements(); }
57
+
58
+ getMetavariables() { return this.context.getMetavariables(); }
59
+
60
+ getMetaproofSteps() { return this.context.getMetaproofSteps(); }
61
+
56
62
  getLastProofStep() {
57
63
  let lastProofStep = null;
58
64
 
@@ -65,8 +71,6 @@ class LocalContext {
65
71
  return lastProofStep;
66
72
  }
67
73
 
68
- getMetavariables() { return this.context.getMetavariables(); }
69
-
70
74
  getTermType(term) {
71
75
  let termType;
72
76
 
@@ -5,8 +5,9 @@ import contextMixins from "../mixins/context";
5
5
  import { last } from "../utilities/array";
6
6
 
7
7
  class LocalMetaContext {
8
- constructor(context, metavariables, metaproofSteps) {
8
+ constructor(context, judgements, metavariables, metaproofSteps) {
9
9
  this.context = context;
10
+ this.judgements = judgements;
10
11
  this.metavariables = metavariables;
11
12
  this.metaproofSteps = metaproofSteps;
12
13
  }
@@ -15,10 +16,26 @@ class LocalMetaContext {
15
16
  return this.context;
16
17
  }
17
18
 
18
- getTermType(term) {
19
- const termType = term.getType();
19
+ getJudgements() {
20
+ let judgements = this.context.getJudgements();
20
21
 
21
- return termType;
22
+ judgements = [ ///
23
+ ...this.judgements,
24
+ ...judgements
25
+ ]
26
+
27
+ return judgements;
28
+ }
29
+
30
+ getMetavariables() {
31
+ let metavariables = this.context.getMetavariables();
32
+
33
+ metavariables = [ ///
34
+ ...this.metavariables,
35
+ ...metavariables
36
+ ]
37
+
38
+ return metavariables;
22
39
  }
23
40
 
24
41
  getMetaproofSteps() {
@@ -34,17 +51,14 @@ class LocalMetaContext {
34
51
 
35
52
  getVariables() { return this.context.getVariables(); }
36
53
 
37
- getEquivalences() { return this.context.getEquivalences(); }
54
+ getProofSteps() { return this.context.getProofSteps(); }
38
55
 
39
- getMetavariables() {
40
- let metavariables = this.context.getMetavariables();
56
+ getEquivalences() { return this.context.getEquivalences(); }
41
57
 
42
- metavariables = [ ///
43
- ...this.metavariables,
44
- ...metavariables
45
- ]
58
+ getTermType(term) {
59
+ const termType = term.getType();
46
60
 
47
- return metavariables;
61
+ return termType;
48
62
  }
49
63
 
50
64
  getLastMetaproofStep() {
@@ -59,8 +73,19 @@ class LocalMetaContext {
59
73
  return lastMetaproofStep;
60
74
  }
61
75
 
62
- addMetaEquality(metaEquality) {
76
+ addJudgement(judgement) {
77
+ let judgementAdded = false;
78
+
79
+ const metavariableNode = judgement.getMetavariableNode(),
80
+ judgementPresent = this.isJudgementPresentByMetavariableNode(metavariableNode);
81
+
82
+ if (!judgementPresent) {
83
+ this.judgements.push(judgement);
84
+
85
+ judgementAdded = true;
86
+ }
63
87
 
88
+ return judgementAdded;
64
89
  }
65
90
 
66
91
  addMetavariable(metavariable) {
@@ -124,6 +149,19 @@ class LocalMetaContext {
124
149
  return variable;
125
150
  }
126
151
 
152
+ findJudgementByMetavariableNode(metavariableNode) {
153
+ const judgements = this.getJudgements(),
154
+ judgement = judgements.find((judgement) => {
155
+ const metavariableMatches = judgement.matchMetavariableNode(metavariableNode);
156
+
157
+ if (metavariableMatches) {
158
+ return true;
159
+ }
160
+ }) || null;
161
+
162
+ return judgement;
163
+ }
164
+
127
165
  isVariablePresentByVariableNode(variableNode) {
128
166
  const variable = this.findVariableByVariableNode(variableNode),
129
167
  variablePresent = (variable !== null);
@@ -131,6 +169,13 @@ class LocalMetaContext {
131
169
  return variablePresent;
132
170
  }
133
171
 
172
+ isJudgementPresentByMetavariableNode(metavariableNode) {
173
+ const judgement = this.findJudgementByMetavariableNode(metavariableNode),
174
+ judgementPresent = (judgement !== null);
175
+
176
+ return judgementPresent;
177
+ }
178
+
134
179
  findMetavariableByMetavariableNode(metavariableNode, localMetaContext) {
135
180
  const node = metavariableNode, ///
136
181
  metavariables = this.getMetavariables(),
@@ -154,19 +199,21 @@ class LocalMetaContext {
154
199
 
155
200
  static fromFileContext(fileContext) {
156
201
  const context = fileContext, ///
202
+ judgements = [],
157
203
  metavariables = [],
158
204
  metaproofSteps = [],
159
- localMetaContext = new LocalMetaContext(context, metavariables, metaproofSteps);
205
+ localMetaContext = new LocalMetaContext(context, judgements, metavariables, metaproofSteps);
160
206
 
161
207
  return localMetaContext;
162
208
  }
163
209
 
164
210
  static fromLocalMetaContext(localMetaContext) {
165
211
  const context = localMetaContext, ///
212
+ judgements = [],
166
213
  metavariables = [],
167
214
  metaproofSteps = [];
168
215
 
169
- localMetaContext = new LocalMetaContext(context, metavariables, metaproofSteps); ///
216
+ localMetaContext = new LocalMetaContext(context, judgements, metavariables, metaproofSteps); ///
170
217
 
171
218
  return localMetaContext;
172
219
  }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ import { matchMetastatement } from "./utilities/metaproof";
4
+
5
+ export default class Declaration {
6
+ constructor(metavariableNode, metastatementNode) {
7
+ this.metavariableNode = metavariableNode;
8
+ this.metastatementNode = metastatementNode;
9
+ }
10
+
11
+ getMetavariableNode() {
12
+ return this.metavariableNode;
13
+ }
14
+
15
+ getMetastatementNode() {
16
+ return this.metastatementNode;
17
+ }
18
+
19
+ matchSubstitution(substitution) {
20
+ const metavariableNode = substitution.getMetavariableNode(),
21
+ metastatementNode = substitution.getMetastatementNode(),
22
+ metavariableNodeMatches = this.matchMetavariableNode(metavariableNode),
23
+ metastatementNodeMatches = this.matchMetastatementNode(metastatementNode),
24
+ substitutionMatches = (metavariableNodeMatches && metastatementNodeMatches);
25
+
26
+ return substitutionMatches;
27
+ }
28
+
29
+ matchMetavariableNode(metavariableNode) {
30
+ const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
31
+
32
+ return metavariableNodeMatches;
33
+ }
34
+
35
+ matchMetastatementNode(metastatementNode) {
36
+ const metastatementNodeA = metastatementNode, ///
37
+ metastatementNodeB = this.metastatementNode, ///
38
+ metastatementMatches = matchMetastatement(metastatementNodeA, metastatementNodeB),
39
+ metastatementNodeMatches = metastatementMatches; ///
40
+
41
+ return metastatementNodeMatches;
42
+ }
43
+
44
+ matchMetaLemmaOrMetaTheorem(metaLemmaMetatheorem) {
45
+ const metaConsequent = metaLemmaMetatheorem.getMetaConsequent(),
46
+ metastatementNode = metaConsequent.getMetastatementNode(),
47
+ matches = this.metastatementNode.match(metastatementNode),
48
+ metaLemmaOrMetaTheoremMatches = matches; ///
49
+
50
+ return metaLemmaOrMetaTheoremMatches;
51
+ }
52
+
53
+ static fromMetavariableNodeAndMetastatementNode(metavariableNode, metastatementNode) {
54
+ const declaration = new Declaration(metavariableNode, metastatementNode);
55
+
56
+ return declaration;
57
+ }
58
+ }