occam-nominal 1.0.558 → 1.0.565

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 (43) hide show
  1. package/lib/element/assertion/subproof.js +3 -3
  2. package/lib/element/assumption.js +45 -33
  3. package/lib/element/claim/axiom.js +1 -2
  4. package/lib/element/link.js +7 -5
  5. package/lib/element/metavariable.js +1 -59
  6. package/lib/element/schema.js +17 -21
  7. package/lib/element/signature.js +10 -3
  8. package/lib/element/statement.js +1 -17
  9. package/lib/example/nominal/bnf.js +1 -9
  10. package/lib/nonTerminalNodeMap.js +1 -7
  11. package/lib/preamble.js +1 -2
  12. package/lib/process/instantiate.js +2 -8
  13. package/lib/process/unify.js +2 -17
  14. package/lib/ruleNames.js +1 -13
  15. package/lib/utilities/element.js +1 -25
  16. package/lib/utilities/json.js +2 -2
  17. package/lib/utilities/string.js +1 -8
  18. package/package.json +1 -1
  19. package/src/element/assertion/subproof.js +2 -2
  20. package/src/element/assumption.js +72 -48
  21. package/src/element/claim/axiom.js +0 -2
  22. package/src/element/link.js +10 -7
  23. package/src/element/metavariable.js +0 -102
  24. package/src/element/schema.js +23 -31
  25. package/src/element/signature.js +19 -3
  26. package/src/element/statement.js +0 -26
  27. package/src/example/nominal/bnf.js +0 -8
  28. package/src/nonTerminalNodeMap.js +0 -9
  29. package/src/preamble.js +0 -1
  30. package/src/process/instantiate.js +0 -4
  31. package/src/process/unify.js +0 -23
  32. package/src/ruleNames.js +0 -3
  33. package/src/utilities/element.js +0 -33
  34. package/src/utilities/json.js +2 -4
  35. package/src/utilities/string.js +0 -8
  36. package/lib/element/substitution/frame.js +0 -187
  37. package/lib/node/equivalence.js +0 -23
  38. package/lib/node/equivalences.js +0 -18
  39. package/lib/node/substitution/frame.js +0 -40
  40. package/src/element/substitution/frame.js +0 -261
  41. package/src/node/equivalence.js +0 -16
  42. package/src/node/equivalences.js +0 -7
  43. package/src/node/substitution/frame.js +0 -37
@@ -132,9 +132,9 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
132
132
  if (suppositionsLength !== supposedStatementsLength) {
133
133
  return back();
134
134
  }
135
- return backwardsEvery(suppositions, (supposition, forward, back, index)=>{
135
+ return backwardsEvery(suppositions, (supposition, generalContext, specificContext, forward, back, index)=>{
136
136
  return this.unifySupposition(supposition, generalContext, specificContext, forward, back, index);
137
- }, forward, back);
137
+ }, generalContext, specificContext, forward, back);
138
138
  }
139
139
  toJSON() {
140
140
  let json;
@@ -171,4 +171,4 @@ function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
171
171
  return statements;
172
172
  }
173
173
 
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGFsbCwgZXZlcnksIGJhY2t3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZkFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0RGVkdWNlZFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCBsYXN0U3RhdGVtZW50ID0gbGFzdCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSBsYXN0U3RhdGVtZW50OyAvLy9cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCkge1xuICAgIGNvbnN0IGZyb250U3RhdGVtZW50cyA9IGZyb250KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzID0gZnJvbnRTdGF0ZW1lbnRzOyAgLy8vXG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50cygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zZWRTdGF0ZW1lbnRzW2luZGV4XTtcblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZCAoc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudHMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRzXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdWJwcm9vZkFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudHMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBzdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGxhc3RTdGVwID0gc3VicHJvb2YuZ2V0TGFzdFN0ZXAoKTtcblxuICAgIHJldHVybiB0aGlzLnVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnRTdHJpbmcgPSBkZWR1Y2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBsYXN0U3RlcENvbnRleHQgPSBsYXN0U3RlcC5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBsYXN0U3RlcENvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U3RlcFN0YXRlbWVudCA9IGxhc3RTdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KGxhc3RTdGVwU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnQgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50KGluZGV4KSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgZm9yd2FyZCwgYmFjaywgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KTtcbiAgICB9LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJhbGwiLCJldmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJsYXN0U3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZyb250U3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1cHBvc2VkU3RhdGVtZW50IiwiaW5kZXgiLCJzdXBwb3NlZFN0YXRlbWVudCIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZmluZEFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJiaW5kIiwiYWRkQXNzZXJ0aW9uIiwic3RhdGVtZW50IiwiZGVjbGFyZSIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3VicHJvb2ZTdHJpbmciLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwidW5pZnlMYXN0U3RlcCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VwcG9zaXRpb25zIiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uU3RhdGVtZW50Iiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJnZXROYW1lIiwiZnJvbUpTT04iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OzsyQkFkK0I7Z0NBQ087a0VBRWhCOzBCQUVDO3VCQUNDO3lCQUNxQjs2QkFDQTt5QkFDTTs7Ozs7O0FBRW5ELE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWMsRUFDaEMsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFNUQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywwQkFBMEJDLGtCQUFTO0lBQzdELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxDQUFFO1FBQ3pELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRCxVQUFVO0lBQ3hCO0lBRUFFLHNCQUFzQjtRQUNwQixNQUFNQyxnQkFBZ0JqQixLQUFLLElBQUksQ0FBQ2MsVUFBVSxHQUNwQ0ksbUJBQW1CRCxlQUFlLEdBQUc7UUFFM0MsT0FBT0M7SUFDVDtJQUVBQyx3QkFBd0I7UUFDdEIsTUFBTUMsa0JBQWtCbkIsTUFBTSxJ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
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGFsbCwgZXZlcnksIGJhY2t3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZkFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0RGVkdWNlZFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCBsYXN0U3RhdGVtZW50ID0gbGFzdCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSBsYXN0U3RhdGVtZW50OyAvLy9cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCkge1xuICAgIGNvbnN0IGZyb250U3RhdGVtZW50cyA9IGZyb250KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzID0gZnJvbnRTdGF0ZW1lbnRzOyAgLy8vXG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50cygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zZWRTdGF0ZW1lbnRzW2luZGV4XTtcblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZCAoc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudHMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRzXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdWJwcm9vZkFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudHMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy4uLmApO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBzdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGxhc3RTdGVwID0gc3VicHJvb2YuZ2V0TGFzdFN0ZXAoKTtcblxuICAgIHJldHVybiB0aGlzLnVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdWJwcm9vZi5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnRTdHJpbmcgPSBkZWR1Y2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBsYXN0U3RlcENvbnRleHQgPSBsYXN0U3RlcC5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBsYXN0U3RlcENvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U3RlcFN0YXRlbWVudCA9IGxhc3RTdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KGxhc3RTdGVwU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnQgPSB0aGlzLmdldFN1cHBvc2VkU3RhdGVtZW50KGluZGV4KSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJhbGwiLCJldmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJsYXN0U3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZyb250U3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1cHBvc2VkU3RhdGVtZW50IiwiaW5kZXgiLCJzdXBwb3NlZFN0YXRlbWVudCIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZmluZEFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJiaW5kIiwiYWRkQXNzZXJ0aW9uIiwic3RhdGVtZW50IiwiZGVjbGFyZSIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3VicHJvb2ZTdHJpbmciLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwidW5pZnlMYXN0U3RlcCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInVuaWZ5U3VwcG9zaXRpb25zIiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uU3RhdGVtZW50Iiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJnZXROYW1lIiwiZnJvbUpTT04iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OzsyQkFkK0I7Z0NBQ087a0VBRWhCOzBCQUVDO3VCQUNDO3lCQUNxQjs2QkFDQTt5QkFDTTs7Ozs7O0FBRW5ELE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWMsRUFDaEMsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFNUQsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywwQkFBMEJDLGtCQUFTO0lBQzdELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxDQUFFO1FBQ3pELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRCxVQUFVO0lBQ3hCO0lBRUFFLHNCQUFzQjtRQUNwQixNQUFNQyxnQkFBZ0JqQixLQUFLLElBQUksQ0FBQ2MsVUFBVSxHQUNwQ0ksbUJBQW1CRCxl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
@@ -54,6 +54,10 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
54
54
  findDeducedStatement(context) {
55
55
  return this.statement.findDeducedStatement(context);
56
56
  }
57
+ findSupposedStatement(index, context) {
58
+ const suppostedStatements = this.findDeducedStatement(context), supposedStatement = suppostedStatements[index] || null;
59
+ return supposedStatement;
60
+ }
57
61
  findSupposedStatements(context) {
58
62
  return this.statement.findSupposedStatements(context);
59
63
  }
@@ -131,24 +135,19 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
131
135
  }, back);
132
136
  }
133
137
  unifySchema(schema, context, forward, back) {
134
- const assumptionString = this.getString(), schemaString = schema.getString();
138
+ const schemaString = schema.getString(), assumptionString = this.getString(); ///
135
139
  context.trace(`Unifying the '${schemaString}' schema with the '${assumptionString}' assumption...`);
136
140
  return (0, _context.isolate)((schema, context, forward, back)=>{
137
141
  const generalContext = context; ///
138
142
  return (0, _context.reconcile)((context)=>{
139
- const label = schema.getLabel();
140
- return this.link.unifyLabel(label, context, (context, back)=>{
141
- const specificContext = context; ///
142
- const deduction = schema.getDeduction(), deducedStatement = this.findDeducedStatement(context);
143
- return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (generalContext, specificContext, back)=>{
144
- const conditional = this.isConditional(), schemaConditional = schema.isConditional();
145
- if (conditional !== schemaConditional) {
146
- context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
147
- return back();
148
- }
149
- const suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context);
150
- return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back);
151
- }, back);
143
+ const specificContext = context; ///
144
+ const unifySchemaLabel = this.unifySchemaLabel.bind(this), unifySchemaDeduction = this.unifySchemaDeduction.bind(this), unifySchemaSuppostions = this.unifySchemaSuppostions.bind(this);
145
+ return all([
146
+ unifySchemaLabel,
147
+ unifySchemaDeduction,
148
+ unifySchemaSuppostions
149
+ ], schema, generalContext, specificContext, (schema, generalContext, specificContext, back)=>{
150
+ return forward(back);
152
151
  }, back);
153
152
  }, context);
154
153
  }, schema, context, (schema, context, back)=>{
@@ -156,23 +155,45 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
156
155
  return forward(context, back);
157
156
  }, back);
158
157
  }
159
- unifyDeduction(deduction, deducedStatement, generalContext, specificContext, forward, back) {
160
- const context = specificContext, assumptionString = this.getString(), deductionString = deduction.getString();
161
- context.trace(`Unifying the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's '${assumptionString}' statement...`);
162
- const statement = deduction.getStatement(), deductionContext = deduction.getContext();
158
+ unifySchemaLabel(schema, generalContext, specificContext, forward, back) {
159
+ const context = specificContext, schemaString = schema.getString(), assumptionString = this.getString(); ///
160
+ context.trace(`Unifying the '${schemaString}' schema's label with the '${assumptionString}' assumption's link...`);
161
+ const label = schema.getLabel();
162
+ return this.link.unifyLabel(label, generalContext, specificContext, (generalContext, specificContext, back)=>{
163
+ context.debug(`...unified the '${schemaString}' schema's label with the '${assumptionString}' assumption's link.`);
164
+ return forward(schema, generalContext, specificContext, back);
165
+ }, back);
166
+ }
167
+ unifySchemaDeduction(schema, generalContext, specificContext, forward, back) {
168
+ const context = specificContext, deduction = schema.getDeduction(), deductionString = deduction.getString(), assumptionString = this.getString(); ///
169
+ context.trace(`Unifying the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's deduced statement...`);
170
+ const statement = deduction.getStatement(), deductionContext = deduction.getContext(), deducedStatement = this.findDeducedStatement(context);
163
171
  specificContext = deductionContext; ///
164
172
  return (0, _context.join)((specificContext)=>{
165
173
  return (0, _context.reconcile)((specificContext)=>{
166
174
  return deducedStatement.unifyStatement(statement, generalContext, specificContext, (generalContext, specificContext, back)=>{
167
175
  specificContext.commit(context);
168
- context.debug(`...unified the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's '${assumptionString}' statement.`);
169
- return forward(generalContext, specificContext, back);
176
+ specificContext = context; ///
177
+ context.debug(`...unified the '${deductionString}' deduction's statement with the '${assumptionString}' assumption's deduced statement.`);
178
+ return forward(schema, generalContext, specificContext, back);
170
179
  }, back);
171
180
  }, specificContext);
172
181
  }, specificContext, context);
173
182
  }
174
- unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back) {
175
- const context = specificContext, suppositionString = supposition.getString(), supposedStatementString = supposedStatement.getString();
183
+ unifySchemaSuppostions(schema, generalContext, specificContext, forward, back) {
184
+ const context = specificContext, suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context), suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
185
+ if (suppositionsLength !== supposedStatementsLength) {
186
+ context.trace(`The number of the schema's suppositions does not match the number of the assumption's supposed statements.`);
187
+ return back();
188
+ }
189
+ return backwardsEvery(suppositions, (supposition, generalContext, specificContext, forward, back, index)=>{
190
+ return this.unifySupposition(supposition, generalContext, specificContext, forward, back, index);
191
+ }, generalContext, specificContext, (generalContext, specificContext, back)=>{
192
+ return forward(schema, generalContext, specificContext, back);
193
+ }, back);
194
+ }
195
+ unifySupposition(supposition, generalContext, specificContext, forward, back, index) {
196
+ const context = specificContext, suppositionString = supposition.getString(), supposedStatement = this.findSupposedStatement(index, context), supposedStatementString = supposedStatement.getString();
176
197
  context.trace(`Unifying the '${suppositionString}' supposition's statement with the '${supposedStatementString}' supposed statement...`);
177
198
  const statement = supposition.getStatement(), suppositionContext = supposition.getContext();
178
199
  specificContext = suppositionContext; ///
@@ -180,22 +201,13 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
180
201
  return (0, _context.reconcile)((specificContext)=>{
181
202
  return supposedStatement.unifyStatement(statement, generalContext, specificContext, (generalContext, specificContext, back)=>{
182
203
  specificContext.commit(context);
204
+ specificContext = context; ///
183
205
  context.debug(`...unified the '${suppositionString}' supposition's statement with the '${supposedStatementString}' supposed statement.`);
184
206
  return forward(generalContext, specificContext, back);
185
207
  }, back);
186
208
  }, specificContext);
187
209
  }, specificContext, context);
188
210
  }
189
- unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back) {
190
- const suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
191
- if (suppositionsLength !== supposedStatementsLength) {
192
- return back();
193
- }
194
- return backwardsEvery(suppositions, (supposition, forward, back, index)=>{
195
- const supposedStatement = supposedStatements[index];
196
- return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back);
197
- }, forward, back);
198
- }
199
211
  toJSON() {
200
212
  let json;
201
213
  const string = this.getString();
@@ -228,4 +240,4 @@ function statementFromAssumptionNode(assumptionNode, context) {
228
240
  return statement;
229
241
  }
230
242
 
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgam9pbiwgaXNvbGF0ZSwgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGFsbCwgc29tZSwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICByZXR1cm4gc29tZShzY2hlbWFzLCAoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgLy8vXG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZUxpbmsoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5saW5rLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobGluaywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmsudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCksXG4gICAgICAgICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGRlZHVjZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25hbCA9IHRoaXMuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uYWwgIT09IHNjaGVtYUNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQudHJhY2UoYEVpdGhlciB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIGlzIHVuY29uZGl0aW9uYWwgd2hpbHN0IHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBpcyBjb25kaXRpb25hbCBvciB2aWNlIHZlcnNlLmApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHNjaGVtYS5nZXRTdXBwb3NpdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgICAgICAgIH0sIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHNjaGVtYSwgY29udGV4dCwgKHNjaGVtYSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZGVkdWNlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjdGlvbkNvbnRleHQgPSBkZWR1Y3Rpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVtZW50LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgc3VwcG9zZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbkNvbnRleHQgPSBzdXBwb3NpdGlvbi5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudHNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBzdXBwb3NlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgYXNzdW1wdGlvbjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBsaW5rID0gbGlua0Zyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBjb250ZXh0LmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJzb21lIiwiZXhpc3RzIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJzdGF0ZW1lbnQiLCJnZXRMaW5rIiwiZ2V0U3RhdGVtZW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzQ29uZGl0aW9uYWwiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImlzRXF1YWxUbyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZEFzc3VtcHRpb24iLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJmaW5kRGVkdWNlZFN0YXRlbWVudCIsImZpbmRTdXBwb3NlZFN0YXRlbWVudHMiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRlTGluayIsImJpbmQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEFzc3VtcHRpb24iLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsInNjaGVtYSIsInVuaWZ5U2NoZW1hIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsInNjaGVtYVN0cmluZyIsImlzb2xhdGUiLCJnZW5lcmFsQ29udGV4dCIsInJlY29uY2lsZSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJ1bmlmeUxhYmVsIiwic3BlY2lmaWNDb250ZXh0IiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwiZGVkdWNlZFN0YXRlbWVudCIsInVuaWZ5RGVkdWN0aW9uIiwiY29uZGl0aW9uYWwiLCJzY2hlbWFDb25kaXRpb25hbCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInN1cHBvc2VkU3RhdGVtZW50cyIsInVuaWZ5U3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJqb2luIiwidW5pZnlTdGF0ZW1lbnQiLCJjb21taXQiLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJzdXBwb3NlZFN0YXRlbWVudCIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmciLCJzdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJpbmRleCIsInRvSlNPTiIsImpzb24iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQXNzdW1wdGlvbiIsImxpbmtGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJsaW5rTm9kZSIsImdldExpbmtOb2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVZvRTswQkFFN0M7dUJBQ2U7NkJBQ0E7eUJBQ2dCO0FBRXRELE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQixFQUM3RCxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsU0FBUyxDQUFFO1FBQzlELEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFB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
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgam9pbiwgaXNvbGF0ZSwgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGFsbCwgc29tZSwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudChpbmRleCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN1cHBvc3RlZFN0YXRlbWVudHMgPSB0aGlzLmZpbmREZWR1Y2VkU3RhdGVtZW50KGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zdGVkU3RhdGVtZW50c1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICByZXR1cm4gc29tZShzY2hlbWFzLCAoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgLy8vXG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZUxpbmsoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5saW5rLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobGluaywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB1bmlmeVNjaGVtYUxhYmVsID0gdGhpcy51bmlmeVNjaGVtYUxhYmVsLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHVuaWZ5U2NoZW1hRGVkdWN0aW9uID0gdGhpcy51bmlmeVNjaGVtYURlZHVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB1bmlmeVNjaGVtYVN1cHBvc3Rpb25zID0gdGhpcy51bmlmeVNjaGVtYVN1cHBvc3Rpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdW5pZnlTY2hlbWFMYWJlbCxcbiAgICAgICAgICB1bmlmeVNjaGVtYURlZHVjdGlvbixcbiAgICAgICAgICB1bmlmeVNjaGVtYVN1cHBvc3Rpb25zXG4gICAgICAgIF0sIHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHNjaGVtYSwgY29udGV4dCwgKHNjaGVtYSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U2NoZW1hTGFiZWwoc2NoZW1hLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzIGxhYmVsIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgY29uc3QgbGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKTtcblxuICAgIHJldHVybiB0aGlzLmxpbmsudW5pZnlMYWJlbChsYWJlbCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzIGxhYmVsIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgbGluay5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc2NoZW1hLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U2NoZW1hRGVkdWN0aW9uKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCksXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgZGVkdWNlZCBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KVxuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBkZWR1Y2VkIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTY2hlbWFTdXBwb3N0aW9ucyhzY2hlbWEsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc2NoZW1hLmdldFN1cHBvc2l0aW9ucygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYFRoZSBudW1iZXIgb2YgdGhlIHNjaGVtYSdzIHN1cHBvc2l0aW9ucyBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHRoZSBhc3N1bXB0aW9uJ3Mgc3VwcG9zZWQgc3RhdGVtZW50cy5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCk7XG4gICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBmb3J3YXJkKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gdGhpcy5maW5kU3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgsIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50U3RyaW5nID0gc3VwcG9zZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uQ29udGV4dCA9IHN1cHBvc2l0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IHN1cHBvc2l0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgYXNzdW1wdGlvbjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBsaW5rID0gbGlua0Zyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBjb250ZXh0LmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJzb21lIiwiZXhpc3RzIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJzdGF0ZW1lbnQiLCJnZXRMaW5rIiwiZ2V0U3RhdGVtZW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzQ29uZGl0aW9uYWwiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImlzRXF1YWxUbyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZEFzc3VtcHRpb24iLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJmaW5kRGVkdWNlZFN0YXRlbWVudCIsImZpbmRTdXBwb3NlZFN0YXRlbWVudCIsImluZGV4Iiwic3VwcG9zdGVkU3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50IiwiZmluZFN1cHBvc2VkU3RhdGVtZW50cyIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInZhbGlkYXRlIiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsImFzc3VtcHRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVMaW5rIiwiYmluZCIsInZhbGlkYXRlU3RhdGVtZW50IiwidmFsaWRhdGVXaGVuRGVjbGFyZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiYWRkQXNzdW1wdGlvbiIsImRlY2xhcmVkIiwiaXNEZWNsYXJlZCIsInNjaGVtYXMiLCJnZXRTY2hlbWFzIiwic2NoZW1hIiwidW5pZnlTY2hlbWEiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwic2NoZW1hU3RyaW5nIiwiaXNvbGF0ZSIsImdlbmVyYWxDb250ZXh0IiwicmVjb25jaWxlIiwic3BlY2lmaWNDb250ZXh0IiwidW5pZnlTY2hlbWFMYWJlbCIsInVuaWZ5U2NoZW1hRGVkdWN0aW9uIiwidW5pZnlTY2hlbWFTdXBwb3N0aW9ucyIsImxhYmVsIiwiZ2V0TGFiZWwiLCJ1bmlmeUxhYmVsIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJkZWR1Y2VkU3RhdGVtZW50Iiwiam9pbiIsInVuaWZ5U3RhdGVtZW50IiwiY29tbWl0Iiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwic3VwcG9zZWRTdGF0ZW1lbnRzIiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwic3VwcG9zaXRpb24iLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInRvSlNPTiIsImpzb24iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQXNzdW1wdGlvbiIsImxpbmtGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJsaW5rTm9kZSIsImdldExpbmtOb2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVZvRTswQkFFN0M7dUJBQ2U7NkJBQ0E7eUJBQ2dCO0FBRXRELE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQixFQUM3RCxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0s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
@@ -111,7 +111,6 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
111
111
  }, back);
112
112
  }
113
113
  unifyClaim(claim, context, forward, back) {
114
- forward = cut(forward, back); ///
115
114
  const axiomString = this.getString(), claimString = claim.getString();
116
115
  context.trace(`Unifying the '${claimString}' claim with the '${axiomString}' axiom...`);
117
116
  return (0, _context.isolate)((claim, context, forward, back)=>{
@@ -195,4 +194,4 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
195
194
  }
196
195
  });
197
196
 
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtc1N0cmluZ0Zyb21UZXJtcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBqb2luLCBpc29sYXRlLCBlbmNsb3NlLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXhpb20gZXh0ZW5kcyBDbGFpbSB7XG4gIGdldEF4aW9tTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXhpb21Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gYXhpb21Ob2RlO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIHNhdGlzZmlhYmxlID0gKHNpZ25hdHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2F0aXNmaWFibGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSA9IHRoaXMudmVyaWZ5U2lnbmF0dXJlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXhpb20oYXhpb20pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBhcHBseURlZHVjdGlvbiA9IHRoaXMuYXBwbHlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFwcGx5U3VwcG9zaXRpb25zID0gdGhpcy5hcHBseVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGlzY2hhcmdlSHlwb3RoZXNlcyA9IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIGFwcGx5RGVkdWN0aW9uLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzZXMsXG4gICAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnNcbiAgICAgICAgXSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9IGNvbnRleHQuYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGFyZSB1bnNvbHZlZCBjb21wbGV4IHN1YnN0aXR1dGlvbnMuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dClcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIGFwcGx5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICB2ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdGhpcy5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbSdzIHNpZ25hdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcXVvdGVkID0gdHJ1ZSxcbiAgICAgICAgICB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zLCBxdW90ZWQpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICR7dGVybXNTdHJpbmd9IHRlcm1zIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY2xhaW0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZGVkdWN0aW9uID0gY2xhaW0uZ2V0RGVkdWN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IGNsYWltLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgICAgY29udGV4dC5jb21taXQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgICAgfSwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY2xhaW0sIGNvbnRleHQsIChjbGFpbSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuYWJsZSB0byB1bmlmeSB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZ2VuZXJhbERlZHVjdGlvbiA9IHRoaXMuZ2V0RGVkdWN0aW9uKCksIC8vL1xuICAgICAgICAgIHNwZWNpZmljRGVkdWN0aW9uID0gZGVkdWN0aW9uLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvblN0cmluZyA9IGdlbmVyYWxEZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmcgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY0RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQgPSBnZW5lcmFsRGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxEZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICBkZWR1Y3Rpb24gPSBnZW5lcmFsRGVkdWN0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbERlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSB7XG4gICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uOyAgLy8vXG5cbiAgICBzdXBwb3NpdGlvbiA9IHRoaXMuZ2V0U3VwcG9zaXRpb24oaW5kZXgpO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1cHBvc2l0aW9uID0gc3VwcG9zaXRpb24sIC8vL1xuICAgICAgICAgIGdlbmVyYWxTdXBwb3NpdGlvblN0cmluZyA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgIHN1cHBvc2l0aW9uID0gZ2VuZXJhbFN1cHBvc2l0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzcGVjaWZpY1N1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucywgIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3VwcG9zaXRpb25zTGVuZ3RoID0gc3BlY2lmaWNTdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgc3VwcG9zaXRpb25zID0gdGhpcy5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnMsIC8vL1xuICAgICAgICAgIGdlbmVyYWxTdXBwb3NpdGlvbnNMZW5ndGggPSBnZW5lcmFsU3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2ssIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCk7XG4gICAgfSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICB1bmlmeVNpZ25hdHVyZUFzc2VydGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1zID0gc2lnbmF0dXJlQXNzZXJ0aW9uLmdldFRlcm1zKCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQXhpb21cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkgeyByZXR1cm4gQ2xhaW0uZnJvbUpTT04oQXhpb20sIGpzb24sIGNvbnRleHQpOyB9XG59KTtcbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiY3V0IiwiYWxsIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJBeGlvbSIsIkNsYWltIiwiZ2V0QXhpb21Ob2RlIiwibm9kZSIsImdldE5vZGUiLCJheGlvbU5vZGUiLCJpc1NhdGlzZmlhYmxlIiwic2lnbmF0dXJlIiwiZ2V0U2lnbmF0dXJlIiwic2F0aXNmaWFibGUiLCJ2ZXJpZnkiLCJjb250ZXh0IiwiZm9yd2FyZCIsImJhY2siLCJheGlvbVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiaXNvbGF0ZSIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlTaWduYXR1cmUiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJheGlvbSIsImFkZEF4aW9tIiwiZGVidWciLCJleGNlcHRpb24iLCJhcHBseSIsInN0ZXAiLCJmYWN0T3JTdWJwcm9vZnMiLCJhcHBseURlZHVjdGlvbiIsImFwcGx5U3VwcG9zaXRpb25zIiwiZGlzY2hhcmdlSHlwb3RoZXNlcyIsInJlY29uY2lsZSIsImNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQiLCJhcmVDb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwidW5pZnlUZXJtcyIsInRlcm1zIiwicXVvdGVkIiwidGVybXNTdHJpbmciLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInVuaWZ5Q2xhaW0iLCJjbGFpbSIsImNsYWltU3RyaW5nIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwidW5pZnlEZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsImNvbW1pdCIsImdlbmVyYWxEZWR1Y3Rpb24iLCJzcGVjaWZpY0RlZHVjdGlvbiIsImdlbmVyYWxEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvblN0cmluZyIsInNwZWNpZmljRGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsRGVkdWN0aW9uQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwiam9pbiIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwiaW5kZXgiLCJzcGVjaWZpY1N1cHBvc2l0aW9uIiwiZ2V0U3VwcG9zaXRpb24iLCJnZW5lcmFsU3VwcG9zaXRpb24iLCJnZW5lcmFsU3VwcG9zaXRpb25TdHJpbmciLCJzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nIiwic3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQiLCJnZW5lcmFsU3VwcG9zaXRpb25Db250ZXh0Iiwic3BlY2lmaWNTdXBwb3NpdGlvbnMiLCJzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsImdlbmVyYWxTdXBwb3NpdGlvbnMiLCJnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoIiwidW5pZnlTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJnZXRUZXJtcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDs4REFFekM7MEJBRUs7d0JBQ2M7eUJBQ2E7Ozs7OztBQUVsRCxNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMs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
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtc1N0cmluZ0Zyb21UZXJtcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBqb2luLCBpc29sYXRlLCBlbmNsb3NlLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGN1dCwgYWxsLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXhpb20gZXh0ZW5kcyBDbGFpbSB7XG4gIGdldEF4aW9tTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXhpb21Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gYXhpb21Ob2RlO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIHNhdGlzZmlhYmxlID0gKHNpZ25hdHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2F0aXNmaWFibGU7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmVyaWZ5UHJvb2YgPSB0aGlzLnZlcmlmeVByb29mLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeUxhYmVscyA9IHRoaXMudmVyaWZ5TGFiZWxzLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSA9IHRoaXMudmVyaWZ5U2lnbmF0dXJlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICAgIHZlcmlmeVNpZ25hdHVyZSxcbiAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uLFxuICAgICAgICAgIHZlcmlmeVByb29mXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gdGhpczsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXhpb20oYXhpb20pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBhcHBseURlZHVjdGlvbiA9IHRoaXMuYXBwbHlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFwcGx5U3VwcG9zaXRpb25zID0gdGhpcy5hcHBseVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGlzY2hhcmdlSHlwb3RoZXNlcyA9IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlcy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIGFwcGx5RGVkdWN0aW9uLFxuICAgICAgICAgIGRpc2NoYXJnZUh5cG90aGVzZXMsXG4gICAgICAgICAgYXBwbHlTdXBwb3NpdGlvbnNcbiAgICAgICAgXSwgc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCA9IGNvbnRleHQuYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCgpO1xuXG4gICAgICAgICAgaWYgKGNvbXBsZXhTdWJzdGl0dXRpb25zVW5zb2x2ZWQpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZXJlIGFyZSB1bnNvbHZlZCBjb21wbGV4IHN1YnN0aXR1dGlvbnMuYCk7XG5cbiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dClcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIChleGNlcHRpb24pID0+IHtcbiAgICAgIGlmIChleGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC50cmFjZShgVW5hYmxlIHRvIGFwcGx5IHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICB2ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdGhpcy5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbSdzIHNpZ25hdHVyZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcXVvdGVkID0gdHJ1ZSxcbiAgICAgICAgICB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zLCBxdW90ZWQpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICR7dGVybXNTdHJpbmd9IHRlcm1zIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZHVjdGlvbiA9IGNsYWltLmdldERlZHVjdGlvbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBjbGFpbS5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICAgIH0sIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNsYWltLCBjb250ZXh0LCAoY2xhaW0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdW5pZnkgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGdlbmVyYWxEZWR1Y3Rpb24gPSB0aGlzLmdldERlZHVjdGlvbigpLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0RlZHVjdGlvbiA9IGRlZHVjdGlvbiwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxEZWR1Y3Rpb25TdHJpbmcgPSBnZW5lcmFsRGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljRGVkdWN0aW9uU3RyaW5nID0gc3BlY2lmaWNEZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbERlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNEZWR1Y3Rpb25Db250ZXh0ID0gc3BlY2lmaWNEZWR1Y3Rpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxEZWR1Y3Rpb25Db250ZXh0ID0gZ2VuZXJhbERlZHVjdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gc3BlY2lmaWNEZWR1Y3Rpb25Db250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsRGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3BlY2lmaWNEZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgZGVkdWN0aW9uID0gZ2VuZXJhbERlZHVjdGlvbjsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGRlZHVjdGlvbi51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2dlbmVyYWxEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG5cbiAgICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCkge1xuICAgIGNvbnN0IHNwZWNpZmljU3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbjsgIC8vL1xuXG4gICAgc3VwcG9zaXRpb24gPSB0aGlzLmdldFN1cHBvc2l0aW9uKGluZGV4KTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBnZW5lcmFsU3VwcG9zaXRpb25TdHJpbmcgPSBnZW5lcmFsU3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZyA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY1N1cHBvc2l0aW9uQ29udGV4dCA9IHNwZWNpZmljU3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxTdXBwb3NpdGlvbkNvbnRleHQgPSBnZW5lcmFsU3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBnZW5lcmFsU3VwcG9zaXRpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzcGVjaWZpY1N1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICBzdXBwb3NpdGlvbiA9IGdlbmVyYWxTdXBwb3NpdGlvbjsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke2dlbmVyYWxTdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnMsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCA9IHNwZWNpZmljU3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIHN1cHBvc2l0aW9ucyA9IHRoaXMuZ2V0U3VwcG9zaXRpb25zKCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zLCAvLy9cbiAgICAgICAgICBnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoID0gZ2VuZXJhbFN1cHBvc2l0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpO1xuICAgIH0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICB9XG5cbiAgdW5pZnlTaWduYXR1cmVBc3NlcnRpb24oc2lnbmF0dXJlQXNzZXJ0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSBzaWduYXR1cmVBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRUZXJtcygpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHRoaXMuZ2V0U2lnbmF0dXJlKCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlLnVuaWZ5VGVybXModGVybXMsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkF4aW9tXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHsgcmV0dXJuIENsYWltLmZyb21KU09OKEF4aW9tLCBqc29uLCBjb250ZXh0KTsgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImN1dCIsImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQXhpb20iLCJDbGFpbSIsImdldEF4aW9tTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwiYXhpb21Ob2RlIiwiaXNTYXRpc2ZpYWJsZSIsInNpZ25hdHVyZSIsImdldFNpZ25hdHVyZSIsInNhdGlzZmlhYmxlIiwidmVyaWZ5IiwiY29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwiYXhpb21TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImlzb2xhdGUiLCJlbmNsb3NlIiwidmVyaWZ5UHJvb2YiLCJiaW5kIiwidmVyaWZ5TGFiZWxzIiwidmVyaWZ5U2lnbmF0dXJlIiwidmVyaWZ5RGVkdWN0aW9uIiwidmVyaWZ5U3VwcG9zaXRpb25zIiwiYXhpb20iLCJhZGRBeGlvbSIsImRlYnVnIiwiZXhjZXB0aW9uIiwiYXBwbHkiLCJzdGVwIiwiZmFjdE9yU3VicHJvb2ZzIiwiYXBwbHlEZWR1Y3Rpb24iLCJhcHBseVN1cHBvc2l0aW9ucyIsImRpc2NoYXJnZUh5cG90aGVzZXMiLCJyZWNvbmNpbGUiLCJjb21wbGV4U3Vic3RpdHV0aW9uc1Vuc29sdmVkIiwiYXJlQ29tcGxleFN1YnN0aXR1dGlvbnNVbnNvbHZlZCIsInVuaWZ5VGVybXMiLCJ0ZXJtcyIsInF1b3RlZCIsInRlcm1zU3RyaW5nIiwidGVybXNTdHJpbmdGcm9tVGVybXMiLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVN0cmluZyIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsInVuaWZ5RGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwidW5pZnlTdXBwb3NpdGlvbnMiLCJjb21taXQiLCJnZW5lcmFsRGVkdWN0aW9uIiwic3BlY2lmaWNEZWR1Y3Rpb24iLCJnZW5lcmFsRGVkdWN0aW9uU3RyaW5nIiwic3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsImpvaW4iLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsImluZGV4Iiwic3BlY2lmaWNTdXBwb3NpdGlvbiIsImdldFN1cHBvc2l0aW9uIiwiZ2VuZXJhbFN1cHBvc2l0aW9uIiwiZ2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nIiwic3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZyIsInNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0IiwiZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCIsInNwZWNpZmljU3VwcG9zaXRpb25zIiwic3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJnZW5lcmFsU3VwcG9zaXRpb25zIiwiZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCIsInVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0VGVybXMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQUE7OztnQ0FYMkQ7OERBRXpDOzBCQUVLO3dCQUNjO3lCQUNhOzs7Ozs7QUFFbEQsTUFBTSxFQUFFQSxTQUFTLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ25DLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNB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
@@ -99,16 +99,18 @@ const _default = (0, _elements.define)(class Link extends _occamlanguages.Elemen
99
99
  return forward(state, context, back);
100
100
  }, back);
101
101
  }
102
- unifyLabel(label, context, forward, back) {
103
- const labelString = label.getString(), linkString = this.getString(); ///
102
+ unifyLabel(label, generalContext, specificContext, forward, back) {
103
+ const context = specificContext, linkString = this.getString(), labelString = label.getString();
104
104
  context.trace(`Unifying the '${labelString}' label with the '${linkString}' link...`);
105
- const metavariable = label.getMetavariable(), labelContext = label.getContext(), generalContext = this.getContext(), specificContext = labelContext; ///
105
+ const metavariable = label.getMetavariable(), labelContext = label.getContext();
106
+ specificContext = labelContext; ///
106
107
  return (0, _context.join)((specificContext)=>{
107
108
  return (0, _context.reconcile)((specificContext)=>{
108
109
  return this.unifyMetavariable(metavariable, generalContext, specificContext, (generalContext, specificContext, back)=>{
109
110
  specificContext.commit(context);
111
+ specificContext = context; ///
110
112
  context.debug(`...unified the '${labelString}' label with the '${linkString}' link.`);
111
- return forward(context, back);
113
+ return forward(generalContext, specificContext, back);
112
114
  }, back);
113
115
  }, specificContext);
114
116
  }, specificContext, context);
@@ -145,4 +147,4 @@ function metavariableFromLinkNode(linkNode, context) {
145
147
  return metavariable;
146
148
  }
147
149
 
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBsYWJlbENvbnRleHQgPSBsYWJlbC5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gbGFiZWxDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIHN0cmluZ1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJMaW5rXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgbGluaztcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGxpbmtOb2RlID0gaW5zdGFudGlhdGVMaW5rKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gbGlua05vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGxpbmsgPSBuZXcgTGluayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGlua05vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJMaW5rIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsImdldExpbmtOb2RlIiwiZ2V0Tm9kZSIsImxpbmtOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhVHlwZSIsImlzRXF1YWxUbyIsImxpbmsiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZExpbmsiLCJmaW5kTGlua0J5TGlua05vZGUiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtdGVyIiwic2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwicGFyYW1ldGVyTmFtZSIsImdldE5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInZhbGlkYXRlIiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsImxpbmtTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJiaW5kIiwiYWRkTGluayIsIm1ldGFUeXBlIiwicmVmZXJlbmNlTWV0YVR5cGVOYW1lIiwiUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIiwicmVmZXJlbmNlTWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb1JlZmVyZW5jZU1ldGFUeXBlIiwiaXNNZXRhVHlwZUVxdWFsVG8iLCJtZXRhVHlwZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nIiwidW5pZnlMYWJlbCIsImxhYmVsIiwibGFiZWxTdHJpbmciLCJsYWJlbENvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJqb2luIiwicmVjb25jaWxlIiwidW5pZnlNZXRhdmFyaWFibGUiLCJjb21taXQiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ0b0pTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUxpbmsiLCJtZXRhdmFyaWFibGVGcm9tTGlua05vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFXQTs7O2VBQUE7OztnQ0FUK0M7MEJBRXhCOzZCQUNTOytCQUNTO3lCQUNJO0FBRTdDLE1BQU0sRUFBRUEsR0FBRyxFQUFFLEdBQUdDLHFDQUFxQjtNQUVyQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxDQUFFO1FBQzNELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO0lB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
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwgd2l0aCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGxhYmVsLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgIGxhYmVsQ29udGV4dCA9IGxhYmVsLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGxhYmVsQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLnVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShtZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiTGlua1wiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBsaW5rTm9kZSA9IGluc3RhbnRpYXRlTGluayhzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGxpbmtOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBsaW5rID0gbmV3IExpbmsoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxpbmtOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG4iXSwibmFtZXMiOlsiYWxsIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiTGluayIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJtZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRMaW5rTm9kZSIsImdldE5vZGUiLCJsaW5rTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YVR5cGUiLCJpc0VxdWFsVG8iLCJsaW5rIiwibGlua05vZGVNYXRjaGVzIiwibWF0Y2hMaW5rTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRMaW5rIiwiZmluZExpbmtCeUxpbmtOb2RlIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInBhcmFtZXRlck5hbWUiLCJnZXROYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJsaW5rU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRlTWV0YXZhcmlhYmxlIiwiYmluZCIsImFkZExpbmsiLCJtZXRhVHlwZSIsInJlZmVyZW5jZU1ldGFUeXBlTmFtZSIsIlJFRkVSRU5DRV9NRVRBX1RZUEVfTkFNRSIsInJlZmVyZW5jZU1ldGFUeXBlIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSIsImlzTWV0YVR5cGVFcXVhbFRvIiwibWV0YVR5cGVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJyZWZlcmVuY2VNZXRhVHlwZVN0cmluZyIsInVuaWZ5TGFiZWwiLCJsYWJlbCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwibGFiZWxTdHJpbmciLCJsYWJlbENvbnRleHQiLCJnZXRDb250ZXh0Iiwiam9pbiIsInJlY29uY2lsZSIsInVuaWZ5TWV0YXZhcmlhYmxlIiwiY29tbWl0IiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVMaW5rIiwibWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFBOzs7Z0NBVCtDOzBCQUV4Qjs2QkFDUzsrQkFDUzt5QkFDSTtBQUU3QyxNQUFNLEVBQUVBLEdBQUcsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFckMsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFV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