occam-verify-cli 0.0.978 → 0.0.980

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.
@@ -10,10 +10,11 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _judgement = /*#__PURE__*/ _interop_require_default(require("../judgement"));
12
12
  var _frame = /*#__PURE__*/ _interop_require_default(require("../verify/frame"));
13
+ var _declaration = /*#__PURE__*/ _interop_require_default(require("./declaration"));
13
14
  var _judgement1 = /*#__PURE__*/ _interop_require_default(require("../assignment/judgement"));
14
15
  var _array = require("../utilities/array");
15
16
  var _query = require("../utilities/query");
16
- var _declaration = /*#__PURE__*/ _interop_require_default(require("./declaration"));
17
+ var _name = require("../utilities/name");
17
18
  function _interop_require_default(obj) {
18
19
  return obj && obj.__esModule ? obj : {
19
20
  default: obj
@@ -44,26 +45,16 @@ function verifyDerivedJudgement(judgementNode, assignments, stated, localContext
44
45
  if (!stated) {
45
46
  var judgementString = localContext.nodeAsString(judgementNode);
46
47
  localContext.trace("Verifying the '".concat(judgementString, "' derived judgement..."), judgementNode);
47
- var frames = [], frameNode = frameNodeQuery(judgementNode), frameVerified = (0, _frame.default)(frameNode, frames, stated, localContext);
48
- if (frameVerified) {
49
- // const firstFrame = first(frames),
50
- // frame = firstFrame, ///
51
- // declaration = frame.getDeclaration(),
52
- // metavariableNode = declaration.getMetavariableNode(),
53
- // metatheorem = localContext.findMetatheoremByMetavariableNode(metavariableNode),
54
- // metaLemma = localContext.findMetaLemmaByMetavariableNode(metavariableNode),
55
- // metaLemmaMetatheorem = (metaLemma || metatheorem); ///
56
- //
57
- // if (metaLemmaMetatheorem !== null) {
58
- // const metaLemmaMetatheoremUnifiedWithJudgement = judgement.unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem),
59
- // metaLemmaMetatheoremUnifiedWithDeclaration = declaration.unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem);
60
- //
61
- // derivedJudgementVerified = (metaLemmaMetatheoremUnifiedWithJudgement && metaLemmaMetatheoremUnifiedWithDeclaration);
62
- // }
63
- } else {
64
- // const metavariableString = localContext.nodeAsString(metavariableNode);
65
- //
66
- // localContext.debug(`There is no judgement for the '${metavariableString}' metavariable.`, metavariableNode)
48
+ var declarations = [], declarationNode = declarationNodeQuery(judgementNode), declarationVerified = (0, _declaration.default)(declarationNode, declarations, stated, localContext);
49
+ if (declarationVerified) {
50
+ var firstDeclaration = (0, _array.first)(declarations), declaration = firstDeclaration, metavariableNode = declaration.getMetavariableNode(), metatheorem = localContext.findMetatheoremByMetavariableNode(metavariableNode), metaLemma = localContext.findMetaLemmaByMetavariableNode(metavariableNode), metaLemmaMetatheorem = metaLemma || metatheorem; ///
51
+ if (metaLemmaMetatheorem !== null) {
52
+ var frames = [], frameNode = frameNodeQuery(judgementNode), frameVerified = (0, _frame.default)(frameNode, frames, stated, localContext);
53
+ if (frameVerified) {
54
+ var firstFrame = (0, _array.first)(frames), frame = firstFrame, metaLemmaMetatheoremUnified = frame.unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem);
55
+ derivedJudgementVerified = metaLemmaMetatheoremUnified; ///
56
+ }
57
+ }
67
58
  }
68
59
  if (derivedJudgementVerified) {
69
60
  localContext.debug("...verified the '".concat(judgementString, "' derived judgement."), judgementNode);
@@ -78,13 +69,18 @@ function verifyStatedJudgement(judgementNode, assignments, stated, localContext)
78
69
  localContext.trace("Verifying the '".concat(judgementString, "' stated judgement..."), judgementNode);
79
70
  var frames = [], frameNode = frameNodeQuery(judgementNode), frameVerified = (0, _frame.default)(frameNode, frames, stated, localContext);
80
71
  if (frameVerified) {
81
- var declarations = [], declarationNode = declarationNodeQuery(judgementNode), declarationVerified = (0, _declaration.default)(declarationNode, declarations, stated, localContext);
82
- if (declarationVerified) {
83
- if (assignments !== null) {
84
- var firstDeclaration = (0, _array.first)(declarations), declaration = firstDeclaration, firstFrame = (0, _array.first)(frames), frame = firstFrame, judgement = _judgement.default.fromJudgementNodeFrameAndDeclaration(judgementNode, frame, declaration), judgementAssignment = _judgement1.default.fromJudgement(judgement), assignment = judgementAssignment;
85
- assignments.push(assignment);
72
+ var firstFrame = (0, _array.first)(frames), frame = firstFrame, metavariable = frame.getMetavariable(), metavariableNode = metavariable.getNode(), metavariableName = (0, _name.metavariableNameFromMetavariableNode)(metavariableNode), judgementPresent = localContext.isJudgementPresentByMetavariableName(metavariableName);
73
+ if (!judgementPresent) {
74
+ var declarations = [], declarationNode = declarationNodeQuery(judgementNode), declarationVerified = (0, _declaration.default)(declarationNode, declarations, stated, localContext);
75
+ if (declarationVerified) {
76
+ if (assignments !== null) {
77
+ var firstDeclaration = (0, _array.first)(declarations), declaration = firstDeclaration, judgement = _judgement.default.fromJudgementNodeFrameAndDeclaration(judgementNode, frame, declaration), judgementAssignment = _judgement1.default.fromJudgement(judgement), assignment = judgementAssignment;
78
+ assignments.push(assignment);
79
+ }
80
+ statedJudgementVerified = true;
86
81
  }
87
- statedJudgementVerified = true;
82
+ } else {
83
+ localContext.trace("There is already a judgement for the '".concat(metavariableName, "' metavariable."), judgementNode);
88
84
  }
89
85
  }
90
86
  if (statedJudgementVerified) {
@@ -94,4 +90,4 @@ function verifyStatedJudgement(judgementNode, assignments, stated, localContext)
94
90
  return statedJudgementVerified;
95
91
  }
96
92
 
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvanVkZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgSnVkZ2VtZW50IGZyb20gXCIuLi9qdWRnZW1lbnRcIjtcbmltcG9ydCB2ZXJpZnlGcmFtZSBmcm9tIFwiLi4vdmVyaWZ5L2ZyYW1lXCI7XG5pbXBvcnQgSnVkZ2VtZW50QXNzaWdubWVudCBmcm9tIFwiLi4vYXNzaWdubWVudC9qdWRnZW1lbnRcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgdmVyaWZ5RGVjbGFyYXRpb24gZnJvbSBcIi4vZGVjbGFyYXRpb25cIjtcblxuY29uc3QgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvanVkZ2VtZW50L2ZyYW1lXCIpLFxuICAgICAgZGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvanVkZ2VtZW50L2RlY2xhcmF0aW9uXCIpO1xuXG5jb25zdCB2ZXJpZnlKdWRnZW1lbnRGdW5jdGlvbnMgPSBbXG4gIHZlcmlmeURlcml2ZWRKdWRnZW1lbnQsXG4gIHZlcmlmeVN0YXRlZEp1ZGdlbWVudFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5SnVkZ2VtZW50KGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQganVkZ2VtZW50VmVyaWZpZWQ7XG5cbiAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhqdWRnZW1lbnROb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50Li4uYCwganVkZ2VtZW50Tm9kZSk7XG5cbiAganVkZ2VtZW50VmVyaWZpZWQgPSB2ZXJpZnlKdWRnZW1lbnRGdW5jdGlvbnMuc29tZSgodmVyaWZ5SnVkZ2VtZW50RnVuY3Rpb24pID0+IHtcbiAgICBjb25zdCBqdWRnZW1lbnRWZXJpZmllZCA9IHZlcmlmeUp1ZGdlbWVudEZ1bmN0aW9uKGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoanVkZ2VtZW50VmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGp1ZGdlbWVudFZlcmlmaWVkKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50LmAsIGp1ZGdlbWVudE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkSnVkZ2VtZW50KGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgZGVyaXZlZEp1ZGdlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgaWYgKCFzdGF0ZWQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKGp1ZGdlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50Li4uYCwganVkZ2VtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBmcmFtZU5vZGVRdWVyeShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICBmcmFtZVZlcmlmaWVkID0gdmVyaWZ5RnJhbWUoZnJhbWVOb2RlLCBmcmFtZXMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmIChmcmFtZVZlcmlmaWVkKSB7XG4gICAgICAvLyBjb25zdCBmaXJzdEZyYW1lID0gZmlyc3QoZnJhbWVzKSxcbiAgICAgIC8vICAgICAgIGZyYW1lID0gZmlyc3RGcmFtZSwgLy8vXG4gICAgICAvLyAgICAgICBkZWNsYXJhdGlvbiA9IGZyYW1lLmdldERlY2xhcmF0aW9uKCksXG4gICAgICAvLyAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZGVjbGFyYXRpb24uZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgLy8gICAgICAgbWV0YXRoZW9yZW0gPSBsb2NhbENvbnRleHQuZmluZE1ldGF0aGVvcmVtQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgLy8gICAgICAgbWV0YUxlbW1hID0gbG9jYWxDb250ZXh0LmZpbmRNZXRhTGVtbWFCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAvLyAgICAgICBtZXRhTGVtbWFNZXRhdGhlb3JlbSA9IChtZXRhTGVtbWEgfHwgbWV0YXRoZW9yZW0pOyAgLy8vXG4gICAgICAvL1xuICAgICAgLy8gaWYgKG1ldGFMZW1tYU1ldGF0aGVvcmVtICE9PSBudWxsKSB7XG4gICAgICAvLyAgIGNvbnN0IG1ldGFMZW1tYU1ldGF0aGVvcmVtVW5pZmllZFdpdGhKdWRnZW1lbnQgPSBqdWRnZW1lbnQudW5pZnlNZXRhTGVtbWFPck1ldGF0aGVvcmVtKG1ldGFMZW1tYU1ldGF0aGVvcmVtKSxcbiAgICAgIC8vICAgICAgICAgbWV0YUxlbW1hTWV0YXRoZW9yZW1VbmlmaWVkV2l0aERlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24udW5pZnlNZXRhTGVtbWFPck1ldGF0aGVvcmVtKG1ldGFMZW1tYU1ldGF0aGVvcmVtKTtcbiAgICAgIC8vXG4gICAgICAvLyAgIGRlcml2ZWRKdWRnZW1lbnRWZXJpZmllZCA9IChtZXRhTGVtbWFNZXRhdGhlb3JlbVVuaWZpZWRXaXRoSnVkZ2VtZW50ICYmIG1ldGFMZW1tYU1ldGF0aGVvcmVtVW5pZmllZFdpdGhEZWNsYXJhdGlvbik7XG4gICAgICAvLyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSk7XG4gICAgICAvL1xuICAgICAgLy8gbG9jYWxDb250ZXh0LmRlYnVnKGBUaGVyZSBpcyBubyBqdWRnZW1lbnQgZm9yIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCwgbWV0YXZhcmlhYmxlTm9kZSlcbiAgICB9XG5cbiAgICBpZiAoZGVyaXZlZEp1ZGdlbWVudFZlcmlmaWVkKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBkZXJpdmVkIGp1ZGdlbWVudC5gLCBqdWRnZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZEp1ZGdlbWVudFZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZWRKdWRnZW1lbnQoanVkZ2VtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZWRKdWRnZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gIGlmIChzdGF0ZWQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKGp1ZGdlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIHN0YXRlZCBqdWRnZW1lbnQuLi5gLCBqdWRnZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGZyYW1lcyA9IFtdLFxuICAgICAgICAgIGZyYW1lTm9kZSA9IGZyYW1lTm9kZVF1ZXJ5KGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGZyYW1lVmVyaWZpZWQgPSB2ZXJpZnlGcmFtZShmcmFtZU5vZGUsIGZyYW1lcywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKGZyYW1lVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IFtdLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25Ob2RlID0gZGVjbGFyYXRpb25Ob2RlUXVlcnkoanVkZ2VtZW50Tm9kZSksXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZlcmlmaWVkID0gdmVyaWZ5RGVjbGFyYXRpb24oZGVjbGFyYXRpb25Ob2RlLCBkZWNsYXJhdGlvbnMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgaWYgKGRlY2xhcmF0aW9uVmVyaWZpZWQpIHtcbiAgICAgICAgaWYgKGFzc2lnbm1lbnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3REZWNsYXJhdGlvbiA9IGZpcnN0KGRlY2xhcmF0aW9ucyksXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBmaXJzdERlY2xhcmF0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICBmaXJzdEZyYW1lID0gZmlyc3QoZnJhbWVzKSxcbiAgICAgICAgICAgICAgICBmcmFtZSA9IGZpcnN0RnJhbWUsIC8vL1xuICAgICAgICAgICAgICAgIGp1ZGdlbWVudCA9IEp1ZGdlbWVudC5mcm9tSnVkZ2VtZW50Tm9kZUZyYW1lQW5kRGVjbGFyYXRpb24oanVkZ2VtZW50Tm9kZSwgZnJhbWUsIGRlY2xhcmF0aW9uKSxcbiAgICAgICAgICAgICAgICBqdWRnZW1lbnRBc3NpZ25tZW50ID0gSnVkZ2VtZW50QXNzaWdubWVudC5mcm9tSnVkZ2VtZW50KGp1ZGdlbWVudCksXG4gICAgICAgICAgICAgICAgYXNzaWdubWVudCA9IGp1ZGdlbWVudEFzc2lnbm1lbnQ7XG5cbiAgICAgICAgICBhc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGVkSnVkZ2VtZW50VmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZWRKdWRnZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgc3RhdGVkIGp1ZGdlbWVudC5gLCBqdWRnZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVkSnVkZ2VtZW50VmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5SnVkZ2VtZW50IiwiZnJhbWVOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJkZWNsYXJhdGlvbk5vZGVRdWVyeSIsInZlcmlmeUp1ZGdlbWVudEZ1bmN0aW9ucyIsInZlcmlmeURlcml2ZWRKdWRnZW1lbnQiLCJ2ZXJpZnlTdGF0ZWRKdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlIiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJsb2NhbENvbnRleHQiLCJqdWRnZW1lbnRWZXJpZmllZCIsImp1ZGdlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwic29tZSIsInZlcmlmeUp1ZGdlbWVudEZ1bmN0aW9uIiwiZGVidWciLCJkZXJpdmVkSnVkZ2VtZW50VmVyaWZpZWQiLCJmcmFtZXMiLCJmcmFtZU5vZGUiLCJmcmFtZVZlcmlmaWVkIiwidmVyaWZ5RnJhbWUiLCJzdGF0ZWRKdWRnZW1lbnRWZXJpZmllZCIsImRlY2xhcmF0aW9ucyIsImRlY2xhcmF0aW9uTm9kZSIsImRlY2xhcmF0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlEZWNsYXJhdGlvbiIsImZpcnN0RGVjbGFyYXRpb24iLCJmaXJzdCIsImRlY2xhcmF0aW9uIiwiZmlyc3RGcmFtZSIsImZyYW1lIiwianVkZ2VtZW50IiwiSnVkZ2VtZW50IiwiZnJvbUp1ZGdlbWVudE5vZGVGcmFtZUFuZERlY2xhcmF0aW9uIiwianVkZ2VtZW50QXNzaWdubWVudCIsIkp1ZGdlbWVudEFzc2lnbm1lbnQiLCJmcm9tSnVkZ2VtZW50IiwiYXNzaWdubWVudCIsInB1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
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvanVkZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgSnVkZ2VtZW50IGZyb20gXCIuLi9qdWRnZW1lbnRcIjtcbmltcG9ydCB2ZXJpZnlGcmFtZSBmcm9tIFwiLi4vdmVyaWZ5L2ZyYW1lXCI7XG5pbXBvcnQgdmVyaWZ5RGVjbGFyYXRpb24gZnJvbSBcIi4vZGVjbGFyYXRpb25cIjtcbmltcG9ydCBKdWRnZW1lbnRBc3NpZ25tZW50IGZyb20gXCIuLi9hc3NpZ25tZW50L2p1ZGdlbWVudFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5jb25zdCBmcmFtZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9qdWRnZW1lbnQvZnJhbWVcIiksXG4gICAgICBkZWNsYXJhdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9qdWRnZW1lbnQvZGVjbGFyYXRpb25cIik7XG5cbmNvbnN0IHZlcmlmeUp1ZGdlbWVudEZ1bmN0aW9ucyA9IFtcbiAgdmVyaWZ5RGVyaXZlZEp1ZGdlbWVudCxcbiAgdmVyaWZ5U3RhdGVkSnVkZ2VtZW50XG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlKdWRnZW1lbnQoanVkZ2VtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnRWZXJpZmllZDtcblxuICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKGp1ZGdlbWVudE5vZGUpO1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuLi5gLCBqdWRnZW1lbnROb2RlKTtcblxuICBqdWRnZW1lbnRWZXJpZmllZCA9IHZlcmlmeUp1ZGdlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlKdWRnZW1lbnRGdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IGp1ZGdlbWVudFZlcmlmaWVkID0gdmVyaWZ5SnVkZ2VtZW50RnVuY3Rpb24oanVkZ2VtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnRWZXJpZmllZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBpZiAoanVkZ2VtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCwganVkZ2VtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4ganVkZ2VtZW50VmVyaWZpZWQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeURlcml2ZWRKdWRnZW1lbnQoanVkZ2VtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkSnVkZ2VtZW50VmVyaWZpZWQgPSBmYWxzZTtcblxuICBpZiAoIXN0YXRlZCkge1xuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgZGVyaXZlZCBqdWRnZW1lbnQuLi5gLCBqdWRnZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmF0aW9uTm9kZSA9IGRlY2xhcmF0aW9uTm9kZVF1ZXJ5KGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uVmVyaWZpZWQgPSB2ZXJpZnlEZWNsYXJhdGlvbihkZWNsYXJhdGlvbk5vZGUsIGRlY2xhcmF0aW9ucywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0RGVjbGFyYXRpb24gPSBmaXJzdChkZWNsYXJhdGlvbnMpLFxuICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBmaXJzdERlY2xhcmF0aW9uLCAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBkZWNsYXJhdGlvbi5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgICBtZXRhdGhlb3JlbSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXRoZW9yZW1CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBtZXRhTGVtbWEgPSBsb2NhbENvbnRleHQuZmluZE1ldGFMZW1tYUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIG1ldGFMZW1tYU1ldGF0aGVvcmVtID0gKG1ldGFMZW1tYSB8fCBtZXRhdGhlb3JlbSk7ICAvLy9cblxuICAgICAgaWYgKG1ldGFMZW1tYU1ldGF0aGVvcmVtICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lcyA9IFtdLFxuICAgICAgICAgICAgICBmcmFtZU5vZGUgPSBmcmFtZU5vZGVRdWVyeShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICAgICAgZnJhbWVWZXJpZmllZCA9IHZlcmlmeUZyYW1lKGZyYW1lTm9kZSwgZnJhbWVzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKGZyYW1lVmVyaWZpZWQpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdEZyYW1lID0gZmlyc3QoZnJhbWVzKSxcbiAgICAgICAgICAgICAgICBmcmFtZSA9IGZpcnN0RnJhbWUsIC8vL1xuICAgICAgICAgICAgICAgIG1ldGFMZW1tYU1ldGF0aGVvcmVtVW5pZmllZCA9IGZyYW1lLnVuaWZ5TWV0YUxlbW1hT3JNZXRhdGhlb3JlbShtZXRhTGVtbWFNZXRhdGhlb3JlbSk7XG5cbiAgICAgICAgICBkZXJpdmVkSnVkZ2VtZW50VmVyaWZpZWQgPSBtZXRhTGVtbWFNZXRhdGhlb3JlbVVuaWZpZWQ7IC8vL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlcml2ZWRKdWRnZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgZGVyaXZlZCBqdWRnZW1lbnQuYCwganVkZ2VtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlcml2ZWRKdWRnZW1lbnRWZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkSnVkZ2VtZW50KGp1ZGdlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVkSnVkZ2VtZW50VmVyaWZpZWQgPSBmYWxzZTtcblxuICBpZiAoc3RhdGVkKSB7XG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhqdWRnZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBzdGF0ZWQganVkZ2VtZW50Li4uYCwganVkZ2VtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBmcmFtZU5vZGVRdWVyeShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICBmcmFtZVZlcmlmaWVkID0gdmVyaWZ5RnJhbWUoZnJhbWVOb2RlLCBmcmFtZXMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmIChmcmFtZVZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBmaXJzdEZyYW1lID0gZmlyc3QoZnJhbWVzKSxcbiAgICAgICAgICAgIGZyYW1lID0gZmlyc3RGcmFtZSwgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBmcmFtZS5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIGp1ZGdlbWVudFByZXNlbnQgPSBsb2NhbENvbnRleHQuaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAoIWp1ZGdlbWVudFByZXNlbnQpIHtcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb25zID0gW10sXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uTm9kZSA9IGRlY2xhcmF0aW9uTm9kZVF1ZXJ5KGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgICAgICBkZWNsYXJhdGlvblZlcmlmaWVkID0gdmVyaWZ5RGVjbGFyYXRpb24oZGVjbGFyYXRpb25Ob2RlLCBkZWNsYXJhdGlvbnMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgICBpZiAoZGVjbGFyYXRpb25WZXJpZmllZCkge1xuICAgICAgICAgIGlmIChhc3NpZ25tZW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3REZWNsYXJhdGlvbiA9IGZpcnN0KGRlY2xhcmF0aW9ucyksXG4gICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IGZpcnN0RGVjbGFyYXRpb24sIC8vL1xuICAgICAgICAgICAgICAgICAganVkZ2VtZW50ID0gSnVkZ2VtZW50LmZyb21KdWRnZW1lbnROb2RlRnJhbWVBbmREZWNsYXJhdGlvbihqdWRnZW1lbnROb2RlLCBmcmFtZSwgZGVjbGFyYXRpb24pLFxuICAgICAgICAgICAgICAgICAganVkZ2VtZW50QXNzaWdubWVudCA9IEp1ZGdlbWVudEFzc2lnbm1lbnQuZnJvbUp1ZGdlbWVudChqdWRnZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgYXNzaWdubWVudCA9IGp1ZGdlbWVudEFzc2lnbm1lbnQ7XG5cbiAgICAgICAgICAgIGFzc2lnbm1lbnRzLnB1c2goYXNzaWdubWVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RhdGVkSnVkZ2VtZW50VmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhbENvbnRleHQudHJhY2UoYFRoZXJlIGlzIGFscmVhZHkgYSBqdWRnZW1lbnQgZm9yIHRoZSAnJHttZXRhdmFyaWFibGVOYW1lfScgbWV0YXZhcmlhYmxlLmAsIGp1ZGdlbWVudE5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZWRKdWRnZW1lbnRWZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgc3RhdGVkIGp1ZGdlbWVudC5gLCBqdWRnZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVkSnVkZ2VtZW50VmVyaWZpZWQ7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5SnVkZ2VtZW50IiwiZnJhbWVOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJkZWNsYXJhdGlvbk5vZGVRdWVyeSIsInZlcmlmeUp1ZGdlbWVudEZ1bmN0aW9ucyIsInZlcmlmeURlcml2ZWRKdWRnZW1lbnQiLCJ2ZXJpZnlTdGF0ZWRKdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlIiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJsb2NhbENvbnRleHQiLCJqdWRnZW1lbnRWZXJpZmllZCIsImp1ZGdlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwic29tZSIsInZlcmlmeUp1ZGdlbWVudEZ1bmN0aW9uIiwiZGVidWciLCJkZXJpdmVkSnVkZ2VtZW50VmVyaWZpZWQiLCJkZWNsYXJhdGlvbnMiLCJkZWNsYXJhdGlvbk5vZGUiLCJkZWNsYXJhdGlvblZlcmlmaWVkIiwidmVyaWZ5RGVjbGFyYXRpb24iLCJmaXJzdERlY2xhcmF0aW9uIiwiZmlyc3QiLCJkZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXRoZW9yZW0iLCJmaW5kTWV0YXRoZW9yZW1CeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhTGVtbWEiLCJmaW5kTWV0YUxlbW1hQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YUxlbW1hTWV0YXRoZW9yZW0iLCJmcmFtZXMiLCJmcmFtZU5vZGUiLCJmcmFtZVZlcmlmaWVkIiwidmVyaWZ5RnJhbWUiLCJmaXJzdEZyYW1lIiwiZnJhbWUiLCJtZXRhTGVtbWFNZXRhdGhlb3JlbVVuaWZpZWQiLCJ1bmlmeU1ldGFMZW1tYU9yTWV0YXRoZW9yZW0iLCJzdGF0ZWRKdWRnZW1lbnRWZXJpZmllZCIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsImdldE5vZGUiLCJtZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwianVkZ2VtZW50UHJlc2VudCIsImlzSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsImp1ZGdlbWVudCIsIkp1ZGdlbWVudCIsImZyb21KdWRnZW1lbnROb2RlRnJhbWVBbmREZWNsYXJhdGlvbiIsImp1ZGdlbWVudEFzc2lnbm1lbnQiLCJKdWRnZW1lbnRBc3NpZ25tZW50IiwiZnJvbUp1ZGdlbWVudCIsImFzc2lnbm1lbnQiLCJwdXNoIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFtQkE7OztlQUF3QkE7OztnRUFqQkY7NERBQ0U7a0VBQ007aUVBQ0U7cUJBRVY7cUJBQ0k7b0JBQzJCOzs7Ozs7QUFF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
@@ -15,7 +15,7 @@ function _interop_require_default(obj) {
15
15
  default: obj
16
16
  };
17
17
  }
18
- function verifyMetavariableGivenMetaType(metavariableNode, metaType, localContext) {
18
+ function verifyMetavariableGivenMetaType(metavariableNode, metaType, metavariables, localContext) {
19
19
  var metavariableVerifiedGivenMetaType = false;
20
20
  var metaTypeName = metaType.getName(), metavariableString = localContext.nodeAsString(metavariableNode);
21
21
  localContext.trace("Verifying the '".concat(metavariableString, "' metavariable given the '").concat(metaTypeName, "' meta-type..."), metavariableNode);
@@ -27,7 +27,10 @@ function verifyMetavariableGivenMetaType(metavariableNode, metaType, localContex
27
27
  metavariableNode = metavariable.getNode();
28
28
  var metavariableNodeB = metavariableNode; ///
29
29
  var unified = _metavariable.default.unify(metavariableNodeA, metavariableNodeB, localContext);
30
- metavariableVerifiedGivenMetaType = unified; ///
30
+ if (unified) {
31
+ metavariables.push(metavariable);
32
+ metavariableVerifiedGivenMetaType = true;
33
+ }
31
34
  } else {
32
35
  var metavariableMetaTypeName = metavariableMetaType.getName();
33
36
  localContext.debug("The '".concat(metavariableString, "' metavariable's meta-type is '").concat(metavariableMetaTypeName, "' when it should be '").concat(metaTypeName, "'."), metavariableNode);
@@ -41,4 +44,4 @@ function verifyMetavariableGivenMetaType(metavariableNode, metaType, localContex
41
44
  return metavariableVerifiedGivenMetaType;
42
45
  }
43
46
 
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YXZhcmlhYmxlR2l2ZW5NZXRhVHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG1ldGF2YXJpYWJsZVVuaWZpZXIgZnJvbSBcIi4uL3VuaWZpZXIvbWV0YXZhcmlhYmxlXCI7XG5cbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlNZXRhdmFyaWFibGVHaXZlbk1ldGFUeXBlKG1ldGF2YXJpYWJsZU5vZGUsIG1ldGFUeXBlLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlLmdldE5hbWUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGdpdmVuIHRoZSAnJHttZXRhVHlwZU5hbWV9JyBtZXRhLXR5cGUuLi5gLCBtZXRhdmFyaWFibGVOb2RlKTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBsb2NhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTWV0YVR5cGUgPSBtZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVNZXRhVHlwZSA9PT0gbWV0YVR5cGUpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVBID0gbWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuXG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlQiA9IG1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICBjb25zdCB1bmlmaWVkID0gbWV0YXZhcmlhYmxlVW5pZmllci51bmlmeShtZXRhdmFyaWFibGVOb2RlQSwgbWV0YXZhcmlhYmxlTm9kZUIsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIG1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZSA9IHVuaWZpZWQ7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVNZXRhVHlwZU5hbWUgPSBtZXRhdmFyaWFibGVNZXRhVHlwZS5nZXROYW1lKCk7XG5cbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgVGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzIG1ldGEtdHlwZSBpcyAnJHttZXRhdmFyaWFibGVNZXRhVHlwZU5hbWV9JyB3aGVuIGl0IHNob3VsZCBiZSAnJHttZXRhVHlwZU5hbWV9Jy5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGBUaGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGlzIG5vdCBwcmVzZW50Jy5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIGlmIChtZXRhdmFyaWFibGVWZXJpZmllZEdpdmVuTWV0YVR5cGUpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgZ2l2ZW4gdGhlICcke21ldGFUeXBlTmFtZX0nIG1ldGEtdHlwZS5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVWZXJpZmllZEdpdmVuTWV0YVR5cGU7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5TWV0YXZhcmlhYmxlR2l2ZW5NZXRhVHlwZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhVHlwZSIsImxvY2FsQ29udGV4dCIsIm1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZSIsIm1ldGFUeXBlTmFtZSIsImdldE5hbWUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTWV0YVR5cGUiLCJnZXRNZXRhVHlwZSIsIm1ldGF2YXJpYWJsZU5vZGVBIiwiZ2V0Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVCIiwidW5pZmllZCIsIm1ldGF2YXJpYWJsZVVuaWZpZXIiLCJ1bmlmeSIsIm1ldGF2YXJpYWJsZU1ldGFUeXBlTmFtZSIsImRlYnVnIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFNQTs7O2VBQXdCQTs7O21FQUpRO29CQUVxQjs7Ozs7O0FBRXRDLFNBQVNBLGdDQUFnQ0MsZ0JBQWdCLEVBQUVDLFFBQVEsRUFBRUMsWUFBWTtJQUM5RixJQUFJQyxvQ0FBb0M7SUFFeEMsSUFBTUMsZUFBZUgsU0FBU0ksT0FBTyxJQUMvQkMscUJBQXFCSixhQUFhSyxZQUFZLENBQUNQO0lBRXJERSxhQUFhTSxLQUFLLENBQUMsQUFBQyxrQkFBZ0VKLE9BQS9DRSxvQkFBbUIsOEJBQXlDLE9BQWJGLGNBQWEsbUJBQWlCSjtJQUVsSCxJQUFNUyxtQkFBbUJDLElBQUFBLDBDQUFvQyxFQUFDVixtQkFDeERXLGVBQWVULGFBQWFVLGtDQUFrQyxDQUFDSDtJQUVyRSxJQUFJRSxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSx1QkFBdUJGLGFBQWFHLFdBQVc7UUFFckQsSUFBSUQseUJBQXlCWixVQUFVO1lBQ3JDLElBQU1jLG9CQUFvQmYsa0JBQWtCLEdBQUc7WUFFL0NBLG1CQUFtQlcsYUFBYUssT0FBTztZQUV2QyxJQUFNQyxvQkFBb0JqQixrQkFBa0IsR0FBRztZQUUvQyxJQUFNa0IsVUFBVUMscUJBQW1CLENBQUNDLEtBQUssQ0FBQ0wsbUJBQW1CRSxtQkFBbUJmO1lBRWhGQyxvQ0FBb0NlLFNBQVMsR0FBRztRQUNsRCxPQUFPO1lBQ0wsSUFBTUcsMkJBQTJCUixxQkFBcUJSLE9BQU87WUFFN0RILGFBQWFvQixLQUFLLENBQUMsQUFBQyxRQUEyREQsT0FBcERmLG9CQUFtQixtQ0FBaUZGLE9BQWhEaUIsMEJBQXlCLHlCQUFvQyxPQUFiakIsY0FBYSxPQUFLSjtRQUNuSjtJQUNGLE9BQU87UUFDTEUsYUFBYW9CLEtBQUssQ0FBQyxBQUFDLFFBQTBCLE9BQW5CaEIsb0JBQW1CLG9DQUFrQ047SUFDbEY7SUFFQSxJQUFJRyxtQ0FBbUM7UUFDckNELGFBQWFvQixLQUFLLENBQUMsQUFBQyxvQkFBa0VsQixPQUEvQ0Usb0JBQW1CLDhCQUF5QyxPQUFiRixjQUFhLGlCQUFlSjtJQUNwSDtJQUVBLE9BQU9HO0FBQ1QifQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YXZhcmlhYmxlR2l2ZW5NZXRhVHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG1ldGF2YXJpYWJsZVVuaWZpZXIgZnJvbSBcIi4uL3VuaWZpZXIvbWV0YXZhcmlhYmxlXCI7XG5cbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlNZXRhdmFyaWFibGVHaXZlbk1ldGFUeXBlKG1ldGF2YXJpYWJsZU5vZGUsIG1ldGFUeXBlLCBtZXRhdmFyaWFibGVzLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlLmdldE5hbWUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhdmFyaWFibGVOb2RlKTtcblxuICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGdpdmVuIHRoZSAnJHttZXRhVHlwZU5hbWV9JyBtZXRhLXR5cGUuLi5gLCBtZXRhdmFyaWFibGVOb2RlKTtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBsb2NhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTWV0YVR5cGUgPSBtZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVNZXRhVHlwZSA9PT0gbWV0YVR5cGUpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVBID0gbWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuXG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlQiA9IG1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICBjb25zdCB1bmlmaWVkID0gbWV0YXZhcmlhYmxlVW5pZmllci51bmlmeShtZXRhdmFyaWFibGVOb2RlQSwgbWV0YXZhcmlhYmxlTm9kZUIsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmICh1bmlmaWVkKSB7XG4gICAgICAgIG1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuXG4gICAgICAgIG1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU1ldGFUeXBlTmFtZSA9IG1ldGF2YXJpYWJsZU1ldGFUeXBlLmdldE5hbWUoKTtcblxuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGBUaGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgbWV0YS10eXBlIGlzICcke21ldGF2YXJpYWJsZU1ldGFUeXBlTmFtZX0nIHdoZW4gaXQgc2hvdWxkIGJlICcke21ldGFUeXBlTmFtZX0nLmAsIG1ldGF2YXJpYWJsZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYFRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgaXMgbm90IHByZXNlbnQnLmAsIG1ldGF2YXJpYWJsZU5vZGUpO1xuICB9XG5cbiAgaWYgKG1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZSkge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBnaXZlbiB0aGUgJyR7bWV0YVR5cGVOYW1lfScgbWV0YS10eXBlLmAsIG1ldGF2YXJpYWJsZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZTtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlNZXRhdmFyaWFibGVHaXZlbk1ldGFUeXBlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGFUeXBlIiwibWV0YXZhcmlhYmxlcyIsImxvY2FsQ29udGV4dCIsIm1ldGF2YXJpYWJsZVZlcmlmaWVkR2l2ZW5NZXRhVHlwZSIsIm1ldGFUeXBlTmFtZSIsImdldE5hbWUiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTWV0YVR5cGUiLCJnZXRNZXRhVHlwZSIsIm1ldGF2YXJpYWJsZU5vZGVBIiwiZ2V0Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVCIiwidW5pZmllZCIsIm1ldGF2YXJpYWJsZVVuaWZpZXIiLCJ1bmlmeSIsInB1c2giLCJtZXRhdmFyaWFibGVNZXRhVHlwZU5hbWUiLCJkZWJ1ZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBTUE7OztlQUF3QkE7OzttRUFKUTtvQkFFcUI7Ozs7OztBQUV0QyxTQUFTQSxnQ0FBZ0NDLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLGFBQWEsRUFBRUMsWUFBWTtJQUM3RyxJQUFJQyxvQ0FBb0M7SUFFeEMsSUFBTUMsZUFBZUosU0FBU0ssT0FBTyxJQUMvQkMscUJBQXFCSixhQUFhSyxZQUFZLENBQUNSO0lBRXJERyxhQUFhTSxLQUFLLENBQUMsQUFBQyxrQkFBZ0VKLE9BQS9DRSxvQkFBbUIsOEJBQXlDLE9BQWJGLGNBQWEsbUJBQWlCTDtJQUVsSCxJQUFNVSxtQkFBbUJDLElBQUFBLDBDQUFvQyxFQUFDWCxtQkFDeERZLGVBQWVULGFBQWFVLGtDQUFrQyxDQUFDSDtJQUVyRSxJQUFJRSxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSx1QkFBdUJGLGFBQWFHLFdBQVc7UUFFckQsSUFBSUQseUJBQXlCYixVQUFVO1lBQ3JDLElBQU1lLG9CQUFvQmhCLGtCQUFrQixHQUFHO1lBRS9DQSxtQkFBbUJZLGFBQWFLLE9BQU87WUFFdkMsSUFBTUMsb0JBQW9CbEIsa0JBQWtCLEdBQUc7WUFFL0MsSUFBTW1CLFVBQVVDLHFCQUFtQixDQUFDQyxLQUFLLENBQUNMLG1CQUFtQkUsbUJBQW1CZjtZQUVoRixJQUFJZ0IsU0FBUztnQkFDWGpCLGNBQWNvQixJQUFJLENBQUNWO2dCQUVuQlIsb0NBQW9DO1lBQ3RDO1FBQ0YsT0FBTztZQUNMLElBQU1tQiwyQkFBMkJULHFCQUFxQlIsT0FBTztZQUU3REgsYUFBYXFCLEtBQUssQ0FBQyxBQUFDLFFBQTJERCxPQUFwRGhCLG9CQUFtQixtQ0FBaUZGLE9BQWhEa0IsMEJBQXlCLHlCQUFvQyxPQUFibEIsY0FBYSxPQUFLTDtRQUNuSjtJQUNGLE9BQU87UUFDTEcsYUFBYXFCLEtBQUssQ0FBQyxBQUFDLFFBQTBCLE9BQW5CakIsb0JBQW1CLG9DQUFrQ1A7SUFDbEY7SUFFQSxJQUFJSSxtQ0FBbUM7UUFDckNELGFBQWFxQixLQUFLLENBQUMsQUFBQyxvQkFBa0VuQixPQUEvQ0Usb0JBQW1CLDhCQUF5QyxPQUFiRixjQUFhLGlCQUFlTDtJQUNwSDtJQUVBLE9BQU9JO0FBQ1QifQ==
@@ -79,7 +79,7 @@ function verifyStatementAsMetavariable(statementNode, assignments, stated, local
79
79
  var statementString = localContext.nodeAsString(statementNode);
80
80
  localContext.trace("Verifying the '".concat(statementString, "' statement as a metavariable..."), statementNode);
81
81
  var metavariableUnified = unifyMetavariable(metavariableNode, localContext);
82
- statementVerifiedAsMetavariable = metavariableUnified;
82
+ statementVerifiedAsMetavariable = metavariableUnified; ///
83
83
  if (statementVerifiedAsMetavariable) {
84
84
  localContext.debug("...verified the '".concat(statementString, "' statement as a metavariable."), statementNode);
85
85
  }
@@ -216,4 +216,4 @@ function unifyMetavariable(metavariableNode, localContext) {
216
216
  return metavariableUnified;
217
217
  }
218
218
 
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc2hpbSBmcm9tIFwiLi4vc2hpbVwiO1xuaW1wb3J0IHZlcmlmeUZyYW1lIGZyb20gXCIuLi92ZXJpZnkvZnJhbWVcIjtcbmltcG9ydCB2ZXJpZnlFcXVhbGl0eSBmcm9tIFwiLi4vdmVyaWZ5L2VxdWFsaXR5XCI7XG5pbXBvcnQgdmVyaWZ5SnVkZ2VtZW50IGZyb20gXCIuLi92ZXJpZnkvanVkZ2VtZW50XCI7XG5pbXBvcnQgdmVyaWZ5RGVjbGFyYXRpb24gZnJvbSBcIi4uL3ZlcmlmeS9kZWNsYXJhdGlvblwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vdHlwZVwiO1xuaW1wb3J0IG1ldGF2YXJpYWJsZVVuaWZpZXIgZnJvbSBcIi4uL3VuaWZpZXIvbWV0YXZhcmlhYmxlXCI7XG5pbXBvcnQgdmVyaWZ5RGVmaW5lZEFzc2VydGlvbiBmcm9tIFwiLi4vdmVyaWZ5L2Fzc2VydGlvbi9kZWZpbmVkXCI7XG5pbXBvcnQgdmVyaWZ5U3VicHJvb2ZBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vc3VicHJvb2ZcIjtcbmltcG9ydCB2ZXJpZnlDb250YWluZWRBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vY29udGFpbmVkXCI7XG5pbXBvcnQgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMgZnJvbSBcIi4uL3VuaWZ5L3N0YXRlbWVudFdpdGhDb21iaW5hdG9yc1wiO1xuaW1wb3J0IHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgZnJvbSBcIi4uL3VuaWZ5L3N0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5jb25zdCBmcmFtZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZnJhbWUhXCIpLFxuICAgICAgZXF1YWxpdHlOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L2VxdWFsaXR5IVwiKSxcbiAgICAgIGp1ZGdlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvanVkZ2VtZW50IVwiKSxcbiAgICAgIGRlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9kZWNsYXJhdGlvbiFcIiksXG4gICAgICBtZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L21ldGF2YXJpYWJsZSFcIiksXG4gICAgICB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKSxcbiAgICAgIGRlZmluZWRBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L2RlZmluZWRBc3NlcnRpb24hXCIpLFxuICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3N1YnByb29mQXNzZXJ0aW9uIVwiKSxcbiAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvY29udGFpbmVkQXNzZXJ0aW9uIVwiKTtcblxuY29uc3QgdW5pZnlTdGF0ZW1lbnRGdW5jdGlvbnMgPSBbXG4gICAgICAgIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gICAgICAgIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzXG4gICAgICBdLFxuICAgICAgdmVyaWZ5U3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgICAgICB2ZXJpZnlTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNGcmFtZSxcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gICAgICAgIHZlcmlmeVN0YXRlbWVudEFzRGVjbGFyYXRpb24sXG4gICAgICAgIHZlcmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICAgICAgICB2ZXJpZnlTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICAgICAgICB2ZXJpZnlTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvblxuICAgICAgXTtcblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoIXN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllZCA9IHVuaWZ5U3RhdGVtZW50RnVuY3Rpb25zLnNvbWUoKHVuaWZ5U3RhdGVtZW50RnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFVuaWZpZWQgPSB1bmlmeVN0YXRlbWVudEZ1bmN0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnRVbmlmaWVkOyAvLy9cbiAgfVxuXG4gIGlmICghc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlTdGF0ZW1lbnRGdW5jdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZW1lbnRGdW5jdGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuYCwgc3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbk9iamVjdC5hc3NpZ24oc2hpbSwge1xuICB2ZXJpZnlTdGF0ZW1lbnRcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB2ZXJpZnlTdGF0ZW1lbnQ7XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc01ldGF2YXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlVW5pZmllZCA9IHVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzTWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlVW5pZmllZDtcblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZEFzTWV0YXZhcmlhYmxlKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNNZXRhdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBlcXVhbGl0eU5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZWQgPSB2ZXJpZnlFcXVhbGl0eShlcXVhbGl0eU5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSBlcXVhbGl0eVZlcmlmaWVkOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc0ZyYW1lKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc0ZyYW1lID0gZmFsc2U7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZnJhbWVOb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZnJhbWUuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGZyYW1lVmVyaWZpZWQgPSB2ZXJpZnlGcmFtZShmcmFtZU5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRnJhbWUgPSBmcmFtZVZlcmlmaWVkOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZEFzRnJhbWUpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGZyYW1lLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzRnJhbWU7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBqdWRnZW1lbnROb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGp1ZGdlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QganVkZ2VtZW50VmVyaWZpZWQgPSB2ZXJpZnlKdWRnZW1lbnQoanVkZ2VtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQgPSBqdWRnZW1lbnRWZXJpZmllZDsgIC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QXNEZWNsYXJhdGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNEZWNsYXJhdGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlY2xhcmF0aW9uTm9kZSA9IGRlY2xhcmF0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChkZWNsYXJhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlY2xhcmF0aW9uLi4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBkZWNsYXJhdGlvblZlcmlmaWVkID0gdmVyaWZ5RGVjbGFyYXRpb24oZGVjbGFyYXRpb25Ob2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc0RlY2xhcmF0aW9uID0gZGVjbGFyYXRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc0RlY2xhcmF0aW9uKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWNsYXJhdGlvbi5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0RlY2xhcmF0aW9uO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeURlZmluZWRBc3NlcnRpb24oZGVmaW5lZEFzc2VydGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVN1YnByb29mQXNzZXJ0aW9uKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNTdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5Q29udGFpbmVkQXNzZXJ0aW9uKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllZDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS4uLmAsIG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IGxvY2FsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlQSA9IG1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlQiA9IG1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgY29uc3QgdW5pZmllZCA9IG1ldGF2YXJpYWJsZVVuaWZpZXIudW5pZnkobWV0YXZhcmlhYmxlTm9kZUEsIG1ldGF2YXJpYWJsZU5vZGVCLCBsb2NhbENvbnRleHQpO1xuXG4gICAgbWV0YXZhcmlhYmxlVW5pZmllZCA9IHVuaWZpZWQ7ICAvLy9cbiAgfVxuXG4gIGlmIChtZXRhdmFyaWFibGVVbmlmaWVkKSB7XG4gICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCwgbWV0YXZhcmlhYmxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlVW5pZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJmcmFtZU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsImVxdWFsaXR5Tm9kZVF1ZXJ5IiwianVkZ2VtZW50Tm9kZVF1ZXJ5IiwiZGVjbGFyYXRpb25Ob2RlUXVlcnkiLCJtZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5IiwiZGVmaW5lZEFzc2VydGlvbk5vZGVRdWVyeSIsInN1YnByb29mQXNzZXJ0aW9uTm9kZVF1ZXJ5IiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZVF1ZXJ5IiwidW5pZnlTdGF0ZW1lbnRGdW5jdGlvbnMiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMiLCJ2ZXJpZnlTdGF0ZW1lbnRGdW5jdGlvbnMiLCJ2ZXJpZnlTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSIsInZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkiLCJ2ZXJpZnlTdGF0ZW1lbnRBc0ZyYW1lIiwidmVyaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2ZXJpZnlTdGF0ZW1lbnRBc0RlY2xhcmF0aW9uIiwidmVyaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmVyaWZ5U3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmVyaWZ5U3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbiIsInZlcmlmeVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmVyaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImFzc2lnbm1lbnRzIiwic3RhdGVkIiwibG9jYWxDb250ZXh0Iiwic3RhdGVtZW50VmVyaWZpZWQiLCJzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJ0cmFjZSIsInN0YXRlbWVudFVuaWZpZWQiLCJzb21lIiwidW5pZnlTdGF0ZW1lbnRGdW5jdGlvbiIsInZlcmlmeVN0YXRlbWVudEZ1bmN0aW9uIiwiZGVidWciLCJPYmplY3QiLCJhc3NpZ24iLCJzaGltIiwic3RhdGVtZW50VmVyaWZpZWRBc01ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVVbmlmaWVkIiwidW5pZnlNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVZlcmlmaWVkIiwidmVyaWZ5RXF1YWxpdHkiLCJzdGF0ZW1lbnRWZXJpZmllZEFzRnJhbWUiLCJmcmFtZU5vZGUiLCJmcmFtZVZlcmlmaWVkIiwidmVyaWZ5RnJhbWUiLCJzdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFZlcmlmaWVkIiwidmVyaWZ5SnVkZ2VtZW50Iiwic3RhdGVtZW50VmVyaWZpZWRBc0RlY2xhcmF0aW9uIiwiZGVjbGFyYXRpb25Ob2RlIiwiZGVjbGFyYXRpb25WZXJpZmllZCIsInZlcmlmeURlY2xhcmF0aW9uIiwic3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVR5cGVBc3NlcnRpb24iLCJzdGF0ZW1lbnRWZXJpZmllZEFzRGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5RGVmaW5lZEFzc2VydGlvbiIsInN0YXRlbWVudFZlcmlmaWVkQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mQXNzZXJ0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudFZlcmlmaWVkQXNDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlDb250YWluZWRBc3NlcnRpb24iLCJtZXRhdmFyaWFibGVTdHJpbmciLCJtZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5vZGVBIiwiZ2V0Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVCIiwidW5pZmllZCIsIm1ldGF2YXJpYWJsZVVuaWZpZXIiLCJ1bmlmeSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBb0ZBOzs7ZUFBQTs7OzJEQWxGaUI7NERBQ087K0RBQ0c7Z0VBQ0M7a0VBQ0U7MkRBQ0U7bUVBQ0E7OERBQ0c7K0RBQ0M7Z0VBQ0M7K0VBQ0s7dUZBQ1E7cUJBRXhCO29CQUMyQjs7Ozs7O0FBRXJELElBQU1BLGlCQUFpQkMsSUFBQUEsZ0JBQVMsRUFBQyxzQkFDM0JDLG9CQUFvQkQsSUFBQUEsZ0JBQVMsRUFBQyx5QkFDOUJFLHFCQUFxQkYsSUFBQUEsZ0JBQVMsRUFBQywwQkFDL0JHLHVCQUF1QkgsSUFBQUEsZ0JBQVMsRUFBQyw0QkFDakNJLHdCQUF3QkosSUFBQUEsZ0JBQVMsRUFBQyw2QkFDbENLLHlCQUF5QkwsSUFBQUEsZ0JBQVMsRUFBQyw4QkFDbkNNLDRCQUE0Qk4sSUFBQUEsZ0JBQVMsRUFBQyxpQ0FDdENPLDZCQUE2QlAsSUFBQUEsZ0JBQVMsRUFBQyxrQ0FDdkNRLDhCQUE4QlIsSUFBQUEsZ0JBQVMsRUFBQztBQUU5QyxJQUFNUywwQkFBMEI7SUFDeEJDLHlDQUFxQztJQUNyQ0MsaUNBQTZCO0NBQzlCLEVBQ0RDLDJCQUEyQjtJQUN6QkM7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUM7SUFDQUM7Q0FDRDtBQUVQLFNBQVNDLGdCQUFnQkMsYUFBYSxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsWUFBWTtJQUN2RSxJQUFJQyxvQkFBb0I7SUFFeEIsSUFBTUMsa0JBQWtCRixhQUFhRyxZQUFZLENBQUNOO0lBRWxERyxhQUFhSSxLQUFLLENB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
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc2hpbSBmcm9tIFwiLi4vc2hpbVwiO1xuaW1wb3J0IHZlcmlmeUZyYW1lIGZyb20gXCIuLi92ZXJpZnkvZnJhbWVcIjtcbmltcG9ydCB2ZXJpZnlFcXVhbGl0eSBmcm9tIFwiLi4vdmVyaWZ5L2VxdWFsaXR5XCI7XG5pbXBvcnQgdmVyaWZ5SnVkZ2VtZW50IGZyb20gXCIuLi92ZXJpZnkvanVkZ2VtZW50XCI7XG5pbXBvcnQgdmVyaWZ5RGVjbGFyYXRpb24gZnJvbSBcIi4uL3ZlcmlmeS9kZWNsYXJhdGlvblwiO1xuaW1wb3J0IHZlcmlmeVR5cGVBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vdHlwZVwiO1xuaW1wb3J0IG1ldGF2YXJpYWJsZVVuaWZpZXIgZnJvbSBcIi4uL3VuaWZpZXIvbWV0YXZhcmlhYmxlXCI7XG5pbXBvcnQgdmVyaWZ5RGVmaW5lZEFzc2VydGlvbiBmcm9tIFwiLi4vdmVyaWZ5L2Fzc2VydGlvbi9kZWZpbmVkXCI7XG5pbXBvcnQgdmVyaWZ5U3VicHJvb2ZBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vc3VicHJvb2ZcIjtcbmltcG9ydCB2ZXJpZnlDb250YWluZWRBc3NlcnRpb24gZnJvbSBcIi4uL3ZlcmlmeS9hc3NlcnRpb24vY29udGFpbmVkXCI7XG5pbXBvcnQgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMgZnJvbSBcIi4uL3VuaWZ5L3N0YXRlbWVudFdpdGhDb21iaW5hdG9yc1wiO1xuaW1wb3J0IHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgZnJvbSBcIi4uL3VuaWZ5L3N0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvbmFtZVwiO1xuXG5jb25zdCBmcmFtZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvZnJhbWUhXCIpLFxuICAgICAgZXF1YWxpdHlOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L2VxdWFsaXR5IVwiKSxcbiAgICAgIGp1ZGdlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvanVkZ2VtZW50IVwiKSxcbiAgICAgIGRlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9kZWNsYXJhdGlvbiFcIiksXG4gICAgICBtZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L21ldGF2YXJpYWJsZSFcIiksXG4gICAgICB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKSxcbiAgICAgIGRlZmluZWRBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L2RlZmluZWRBc3NlcnRpb24hXCIpLFxuICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3N1YnByb29mQXNzZXJ0aW9uIVwiKSxcbiAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvY29udGFpbmVkQXNzZXJ0aW9uIVwiKTtcblxuY29uc3QgdW5pZnlTdGF0ZW1lbnRGdW5jdGlvbnMgPSBbXG4gICAgICAgIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gICAgICAgIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzXG4gICAgICBdLFxuICAgICAgdmVyaWZ5U3RhdGVtZW50RnVuY3Rpb25zID0gW1xuICAgICAgICB2ZXJpZnlTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNGcmFtZSxcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gICAgICAgIHZlcmlmeVN0YXRlbWVudEFzRGVjbGFyYXRpb24sXG4gICAgICAgIHZlcmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgICAgICAgdmVyaWZ5U3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICAgICAgICB2ZXJpZnlTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICAgICAgICB2ZXJpZnlTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvblxuICAgICAgXTtcblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50KHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoIXN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllZCA9IHVuaWZ5U3RhdGVtZW50RnVuY3Rpb25zLnNvbWUoKHVuaWZ5U3RhdGVtZW50RnVuY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFVuaWZpZWQgPSB1bmlmeVN0YXRlbWVudEZ1bmN0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnRVbmlmaWVkOyAvLy9cbiAgfVxuXG4gIGlmICghc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeVN0YXRlbWVudEZ1bmN0aW9ucy5zb21lKCh2ZXJpZnlTdGF0ZW1lbnRGdW5jdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZW1lbnRGdW5jdGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoc3RhdGVtZW50VmVyaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuYCwgc3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWQ7XG59XG5cbk9iamVjdC5hc3NpZ24oc2hpbSwge1xuICB2ZXJpZnlTdGF0ZW1lbnRcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB2ZXJpZnlTdGF0ZW1lbnQ7XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc01ldGF2YXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVOb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlVW5pZmllZCA9IHVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZU5vZGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzTWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlVW5pZmllZDsgIC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNNZXRhdmFyaWFibGUpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc01ldGF2YXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IGVxdWFsaXR5Tm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgZXF1YWxpdHlWZXJpZmllZCA9IHZlcmlmeUVxdWFsaXR5KGVxdWFsaXR5Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzRnJhbWUoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFzRnJhbWUgPSBmYWxzZTtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZU5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBmcmFtZS4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgZnJhbWVWZXJpZmllZCA9IHZlcmlmeUZyYW1lKGZyYW1lTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNGcmFtZSA9IGZyYW1lVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNGcmFtZSkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZnJhbWUuYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNGcmFtZTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgY29uc3QganVkZ2VtZW50Tm9kZSA9IGp1ZGdlbWVudE5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRWZXJpZmllZCA9IHZlcmlmeUp1ZGdlbWVudChqdWRnZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCA9IGp1ZGdlbWVudFZlcmlmaWVkOyAgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc0p1ZGdlbWVudCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzSnVkZ2VtZW50O1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc0RlY2xhcmF0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc0RlY2xhcmF0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgZGVjbGFyYXRpb25Ob2RlID0gZGVjbGFyYXRpb25Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGRlY2xhcmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVjbGFyYXRpb24uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uVmVyaWZpZWQgPSB2ZXJpZnlEZWNsYXJhdGlvbihkZWNsYXJhdGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvblZlcmlmaWVkOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZEFzRGVjbGFyYXRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlY2xhcmF0aW9uLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzRGVjbGFyYXRpb247XG59XG5cbmZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmAsIHN0YXRlbWVudE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc0RlZmluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICAgIGxvY2FsQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5RGVmaW5lZEFzc2VydGlvbihkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNEZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvblZlcmlmaWVkOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudE5vZGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmVyaWZpZWRBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCwgc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5U3VicHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmVyaWZpZWRBc1N1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCwgc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllZEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmAsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlDb250YWluZWRBc3NlcnRpb24oY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZlcmlmaWVkQXNDb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25WZXJpZmllZDsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmVyaWZpZWRBc0NvbnRhaW5lZEFzc2VydGlvbikge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gLCBzdGF0ZW1lbnROb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0NvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGVVbmlmaWVkO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCwgbWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbG9jYWxDb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVBID0gbWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlLmdldE5vZGUoKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVCID0gbWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICBjb25zdCB1bmlmaWVkID0gbWV0YXZhcmlhYmxlVW5pZmllci51bmlmeShtZXRhdmFyaWFibGVOb2RlQSwgbWV0YXZhcmlhYmxlTm9kZUIsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBtZXRhdmFyaWFibGVVbmlmaWVkID0gdW5pZmllZDsgIC8vL1xuICB9XG5cbiAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZWQpIHtcbiAgICBsb2NhbENvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gLCBtZXRhdmFyaWFibGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVVbmlmaWVkO1xufVxuIl0sIm5hbWVzIjpbImZyYW1lTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZXF1YWxpdHlOb2RlUXVlcnkiLCJqdWRnZW1lbnROb2RlUXVlcnkiLCJkZWNsYXJhdGlvbk5vZGVRdWVyeSIsIm1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsInR5cGVBc3NlcnRpb25Ob2RlUXVlcnkiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlUXVlcnkiLCJ1bmlmeVN0YXRlbWVudEZ1bmN0aW9ucyIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsInZlcmlmeVN0YXRlbWVudEZ1bmN0aW9ucyIsInZlcmlmeVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlIiwidmVyaWZ5U3RhdGVtZW50QXNFcXVhbGl0eSIsInZlcmlmeVN0YXRlbWVudEFzRnJhbWUiLCJ2ZXJpZnlTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZlcmlmeVN0YXRlbWVudEFzRGVjbGFyYXRpb24iLCJ2ZXJpZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2ZXJpZnlTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJ2ZXJpZnlTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwidmVyaWZ5U3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJ2ZXJpZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJsb2NhbENvbnRleHQiLCJzdGF0ZW1lbnRWZXJpZmllZCIsInN0YXRlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwic3RhdGVtZW50VW5pZmllZCIsInNvbWUiLCJ1bmlmeVN0YXRlbWVudEZ1bmN0aW9uIiwidmVyaWZ5U3RhdGVtZW50RnVuY3Rpb24iLCJkZWJ1ZyIsIk9iamVjdCIsImFzc2lnbiIsInNoaW0iLCJzdGF0ZW1lbnRWZXJpZmllZEFzTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZVVuaWZpZWQiLCJ1bmlmeU1ldGF2YXJpYWJsZSIsInN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5VmVyaWZpZWQiLCJ2ZXJpZnlFcXVhbGl0eSIsInN0YXRlbWVudFZlcmlmaWVkQXNGcmFtZSIsImZyYW1lTm9kZSIsImZyYW1lVmVyaWZpZWQiLCJ2ZXJpZnlGcmFtZSIsInN0YXRlbWVudFZlcmlmaWVkQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50VmVyaWZpZWQiLCJ2ZXJpZnlKdWRnZW1lbnQiLCJzdGF0ZW1lbnRWZXJpZmllZEFzRGVjbGFyYXRpb24iLCJkZWNsYXJhdGlvbk5vZGUiLCJkZWNsYXJhdGlvblZlcmlmaWVkIiwidmVyaWZ5RGVjbGFyYXRpb24iLCJzdGF0ZW1lbnRWZXJpZmllZEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VHlwZUFzc2VydGlvbiIsInN0YXRlbWVudFZlcmlmaWVkQXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uVmVyaWZpZWQiLCJ2ZXJpZnlEZWZpbmVkQXNzZXJ0aW9uIiwic3RhdGVtZW50VmVyaWZpZWRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmVyaWZpZWRBc0NvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeUNvbnRhaW5lZEFzc2VydGlvbiIsIm1ldGF2YXJpYWJsZVN0cmluZyIsIm1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTm9kZUEiLCJnZXROb2RlIiwibWV0YXZhcmlhYmxlTm9kZUIiLCJ1bmlmaWVkIiwibWV0YXZhcmlhYmxlVW5pZmllciIsInVuaWZ5Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFvRkE7OztlQUFBOzs7MkRBbEZpQjs0REFDTzsrREFDRztnRUFDQztrRUFDRTsyREFDRTttRUFDQTs4REFDRzsrREFDQztnRUFDQzsrRUFDSzt1RkFDUTtxQkFFeEI7b0JBQzJCOzs7Ozs7QUFFckQsSUFBTUEsaUJBQWlCQyxJQUFBQSxnQkFBUyxFQUFDLHNCQUMzQkMsb0JBQW9CRCxJQUFBQSxnQkFBUyxFQUFDLHlCQUM5QkUscUJBQXFCRixJQUFBQSxnQkFBUyxFQUFDLDBCQUMvQkcsdUJBQXVCSCxJQUFBQSxnQkFBUyxFQUFDLDRCQUNqQ0ksd0JBQXdCSixJQUFBQSxnQkFBUyxFQUFDLDZCQUNsQ0sseUJBQXlCTCxJQUFBQSxnQkFBUyxFQUFDLDhCQUNuQ00sNEJBQTRCTixJQUFBQSxnQkFBUyxFQUFDLGlDQUN0Q08sNkJBQTZCUCxJQUFBQSxnQkFBUyxFQUFDLGtDQUN2Q1EsOEJBQThCUixJQUFBQSxnQkFBUyxFQUFDO0FBRTlDLElBQU1TLDBCQUEwQjtJQUN4QkMseUNBQXFDO0lBQ3JDQyxpQ0FBNkI7Q0FDOUIsRUFDREMsMkJBQTJCO0lBQ3pCQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztJQUNBQztDQUNEO0FBRVAsU0FBU0MsZ0JBQWdCQyxhQUFhLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxZQUFZO0lBQ3ZFLElBQUlDLG9CQUFvQjtJQUV4QixJQUFNQyxrQkFBa0JGLGFBQWFHLFlBQVksQ0FBQ047SUFFbERHLGFBQWFJLEtB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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.978",
4
+ "version": "0.0.980",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -12,10 +12,10 @@
12
12
  "dependencies": {
13
13
  "argumentative": "^2.0.32",
14
14
  "necessary": "^14.0.1",
15
- "occam-custom-grammars": "^5.0.854",
15
+ "occam-custom-grammars": "^5.0.856",
16
16
  "occam-entities": "^1.0.159",
17
17
  "occam-file-system": "^6.0.199",
18
- "occam-grammar-utilities": "^8.0.207",
18
+ "occam-grammar-utilities": "^8.0.212",
19
19
  "occam-query": "^3.1.174"
20
20
  },
21
21
  "devDependencies": {
@@ -3,6 +3,7 @@
3
3
  import Equivalence from "../equivalence";
4
4
 
5
5
  import { last, reverse } from "../utilities/array";
6
+ import { metavariableNameFromMetavariableNode } from "../utilities/name";
6
7
  import { mergeEquivalences, findEquivalenceByTerm, groundedTermsAndDefinedVariablesFromFromEquivalences } from "../utilities/equivalences";
7
8
 
8
9
  class LocalContext {
@@ -196,8 +197,9 @@ class LocalContext {
196
197
  addJudgement(judgement) {
197
198
  let judgementAdded = false;
198
199
 
199
- const metavariableNode = judgement.getMetavariableNode(),
200
- judgementPresent = this.isJudgementPresentByMetavariableNode(metavariableNode);
200
+ const metavariable = judgement.getMetavariable(),
201
+ metavariableDefined = this.isMetavariableDefined(metavariable),
202
+ judgementPresent = metavariableDefined; ///
201
203
 
202
204
  if (!judgementPresent) {
203
205
  this.judgements.push(judgement);
@@ -303,15 +305,10 @@ class LocalContext {
303
305
  }
304
306
 
305
307
  isMetavariableDefined(metavariable) {
306
- const judgements = this.getJudgements(),
307
- metavariableNode = metavariable.getNode(),
308
- metavariableDefined = judgements.some((judgement) => {
309
- const metavariableNodeMatchesJudgement = judgement.matchMetavariableNode(metavariableNode);
310
-
311
- if (metavariableNodeMatchesJudgement) {
312
- return true;
313
- }
314
- });
308
+ const metavariableNode = metavariable.getNode(),
309
+ metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
310
+ judgementPresent = this.isJudgementPresentByMetavariableName(metavariableName),
311
+ metavariableDefined = judgementPresent; ///
315
312
 
316
313
  return metavariableDefined
317
314
  }
@@ -323,8 +320,8 @@ class LocalContext {
323
320
  return variablePresent;
324
321
  }
325
322
 
326
- isJudgementPresentByMetavariableNode(metavariableNode) {
327
- const judgement = this.findJudgementByMetavariableNode(metavariableNode),
323
+ isJudgementPresentByMetavariableName(metavariableName) {
324
+ const judgement = this.findJudgementByMetavariableName(metavariableName),
328
325
  judgementPresent = (judgement !== null);
329
326
 
330
327
  return judgementPresent;
@@ -354,12 +351,12 @@ class LocalContext {
354
351
  return variable;
355
352
  }
356
353
 
357
- findJudgementByMetavariableNode(metavariableNode) {
354
+ findJudgementByMetavariableName(metavariableName) {
358
355
  const judgements = this.getJudgements(),
359
356
  judgement = judgements.find((judgement) => {
360
- const judgementMatchesMetavariableNode = judgement.matchMetavariableNode(metavariableNode);
357
+ const judgementMatchesMetavariableName = judgement.matchMetavariableName(metavariableName);
361
358
 
362
- if (judgementMatchesMetavariableNode) {
359
+ if (judgementMatchesMetavariableName) {
363
360
  return true;
364
361
  }
365
362
  }) || null;
@@ -3,19 +3,30 @@
3
3
  import { stripBracketsFromStatement } from "./utilities/brackets";
4
4
 
5
5
  export default class Declaration {
6
- constructor(metavariableNode, statementNode) {
7
- this.metavariableNode = metavariableNode;
6
+ constructor(reference, statementNode) {
7
+ this.reference = reference;
8
8
  this.statementNode = statementNode;
9
9
  }
10
10
 
11
- getMetavariableNode() {
12
- return this.metavariableNode;
11
+ getReference() {
12
+ return this.reference;
13
13
  }
14
14
 
15
15
  getStatementNode() {
16
16
  return this.statementNode;
17
17
  }
18
18
 
19
+ getMetavariableNode() { return this.reference.getMetavariableNode(); }
20
+
21
+ unifyStatement(statementNode) {
22
+ statementNode = stripBracketsFromStatement(statementNode); ///
23
+
24
+ const statementNodeMatches = this.statementNode.match(statementNode),
25
+ statementUnified = statementNodeMatches; ///
26
+
27
+ return statementUnified;
28
+ }
29
+
19
30
  unifySubstitution(substitution) {
20
31
  const statementNode = substitution.getStatementNode(),
21
32
  metavariableNode = substitution.getMetavariableNode(),
@@ -26,21 +37,12 @@ export default class Declaration {
26
37
  return substitutionUnified;
27
38
  }
28
39
 
29
- unifyMetavariable(metavariableNode) {
30
- const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
40
+ unifyMetavariable(metavariable) {
41
+ const metavariableNodeMatches = this.reference.matchMetavariableNode(metavariable);
31
42
 
32
43
  return metavariableNodeMatches;
33
44
  }
34
45
 
35
- unifyStatement(statementNode) {
36
- statementNode = stripBracketsFromStatement(statementNode); ///
37
-
38
- const statementNodeMatches = this.statementNode.match(statementNode),
39
- statementUnified = statementNodeMatches; ///
40
-
41
- return statementUnified;
42
- }
43
-
44
46
  unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem) {
45
47
  const consequent = metaLemmaMetatheorem.getConsequent(),
46
48
  statementNode = consequent.getStatementNode(),
@@ -50,12 +52,10 @@ export default class Declaration {
50
52
  return metaLemmaOrMetaTheoremUnified;
51
53
  }
52
54
 
53
- static fromMetavariableNodeAndStatementNode(metavariableNode, statementNode) {
54
- if (statementNode !== null) {
55
- statementNode = stripBracketsFromStatement(statementNode); ///
56
- }
55
+ static fromReferenceAndStatementNode(reference, statementNode) {
56
+ statementNode = stripBracketsFromStatement(statementNode); ///
57
57
 
58
- const declaration = new Declaration(metavariableNode, statementNode);
58
+ const declaration = new Declaration(reference, statementNode);
59
59
 
60
60
  return declaration;
61
61
  }
package/src/frame.js CHANGED
@@ -1,39 +1,52 @@
1
1
  "use strict";
2
2
 
3
- import { push, first } from "./utilities/array";
3
+ import { first } from "./utilities/array";
4
4
 
5
5
  export default class Frame {
6
- constructor(declarations) {
6
+ constructor(declarations, metavariables) {
7
7
  this.declarations = declarations;
8
+ this.metavariables = metavariables;
8
9
  }
9
10
 
10
11
  getDeclarations() {
11
12
  return this.declarations;
12
13
  }
13
14
 
14
- getDeclaration() {
15
- let declaration = null;
15
+ getMetavariables() {
16
+ return this.metavariables;
17
+ }
18
+
19
+ getMetavariable() {
20
+ let metavariable = null;
16
21
 
17
- const singular = this.isSingular();
22
+ const declarationsLength = this.declarations.length;
18
23
 
19
- if (singular) {
20
- const firstDeclaration = first(this.declarations);
24
+ if (declarationsLength === 0) {
25
+ const metavariablesLength = this.metavariables.length;
21
26
 
22
- declaration = firstDeclaration; ///
27
+ if (metavariablesLength === 1) {
28
+ const firstMetavariable = first(this.metavariables);
29
+
30
+ metavariable = firstMetavariable; ///
31
+ }
23
32
  }
24
33
 
25
- return declaration;
34
+ return metavariable;
26
35
  }
27
36
 
28
- isSingular() {
29
- const declarationsLength = this.declarations.length,
30
- singular = (declarationsLength === 1);
37
+ matchMetavariableName(metavariableName) {
38
+ let metavariableNameMatches = false;
31
39
 
32
- return singular;
33
- }
40
+ const metavariable = this.getMetavariable();
41
+
42
+ if (metavariable !== null) {
43
+ const name = metavariableName, ///
44
+ nameMatches = metavariable.matchName(name);
45
+
46
+ metavariableNameMatches = nameMatches; ///
47
+ }
34
48
 
35
- addDeclarations(declarations) {
36
- push(this.declarations, declarations);
49
+ return metavariableNameMatches;
37
50
  }
38
51
 
39
52
  unifySubstitution(substitution) {
@@ -62,8 +75,25 @@ export default class Frame {
62
75
  return metaLemmaOrMetaTheoremUnified;
63
76
  }
64
77
 
78
+ static fromMetavariable(metavariable) {
79
+ const declarations = [],
80
+ metavariables = [
81
+ metavariable
82
+ ],
83
+ frame = new Frame(declarations, metavariables);
84
+
85
+ return frame;
86
+ }
87
+
65
88
  static fromDeclarations(declarations) {
66
- const frame = new Frame(declarations);
89
+ const metavariables = [],
90
+ frame = new Frame(declarations, metavariables);
91
+
92
+ return frame;
93
+ }
94
+
95
+ static fromDeclarationsAndMetavariables(declarations, metavariables) {
96
+ const frame = new Frame(declarations, metavariables);
67
97
 
68
98
  return frame;
69
99
  }
package/src/judgement.js CHANGED
@@ -19,16 +19,12 @@ export default class Judgement {
19
19
  return this.declaration;
20
20
  }
21
21
 
22
- // matchMetavariableNode(metavariableNode) {
23
- // const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
24
- //
25
- // return metavariableNodeMatches;
26
- // }
22
+ getMetavariable() { return this.frame.getMetavariable(); }
27
23
 
28
- // unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem) { return this.frame.unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem); }
24
+ matchMetavariableName(metavariableName) { return this.frame.matchMetavariableName(metavariableName); }
29
25
 
30
26
  static fromJudgementNodeFrameAndDeclaration(judgementNode, frame, declaration) {
31
- const node = judgementNode,
27
+ const node = judgementNode, ///
32
28
  judgement = new Judgement(node, frame, declaration);
33
29
 
34
30
  return judgement;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ import { nodeAsString } from "./utilities/string";
4
+
5
+ export default class Reference {
6
+ constructor(metavariableNode) {
7
+ this.metavariableNode = metavariableNode;
8
+ }
9
+
10
+ getMetavariableNode() {
11
+ return this.metavariableNode;
12
+ }
13
+
14
+ matchMetavariableNode(metavariableNode) {
15
+ const metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
16
+
17
+ return metavariableNodeMatches;
18
+ }
19
+
20
+ asString(tokens) {
21
+ const string = nodeAsString(this.metavariableNode, tokens);
22
+
23
+ return string;
24
+ }
25
+
26
+ static fromMetavariableNode(metavariableNode) {
27
+ const reference = new Reference(metavariableNode);
28
+
29
+ return reference;
30
+ }
31
+ }