occam-nominal 1.0.431 → 1.0.434

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.
@@ -61,16 +61,6 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
61
61
  const equalityNode = equality.getNode(), equalityNodeMatches = this.matchEqualityNode(equalityNode), equalTo = equalityNodeMatches; ///
62
62
  return equalTo;
63
63
  }
64
- isReflexive() {
65
- let reflexive = false;
66
- if (!this.negated) {
67
- const leftTermEqualToRightTerm = this.leftTerm.isEqualTo(this.rightTerm);
68
- if (leftTermEqualToRightTerm) {
69
- reflexive = true;
70
- }
71
- }
72
- return reflexive;
73
- }
74
64
  findEquality(context) {
75
65
  const equalityNode = this.getEqualityNode(), equality = context.findEqualityByEqualityNode(equalityNode);
76
66
  return equality;
@@ -171,10 +161,11 @@ const _default = (0, _elements.define)(class Equality extends _occamlanguages.El
171
161
  if (transient) {
172
162
  return;
173
163
  }
174
- const equality = this, negated = this.isNegated(), reflexive = this.isReflexive();
175
- if (negated || reflexive) {
164
+ const negated = this.isNegated();
165
+ if (negated) {
176
166
  return;
177
167
  }
168
+ const equality = this; ///
178
169
  const equalityAssignment = (0, _assign.equalityAssignmentFromEquality)(equality, context);
179
170
  context.addAssignment(equalityAssignment);
180
171
  const derived = (0, _state.isDerived)(state);
@@ -225,4 +216,4 @@ function rightTermFromEqualityNode(equalityNode, context) {
225
216
  return rightTerm;
226
217
  }
227
218
 
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVxdWF0ZVRlcm1zIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVFcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQsIGlzVHJhbnNpZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uZWdhdGVkID0gbmVnYXRlZDtcbiAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG4gICAgdGhpcy5yaWdodFRlcm0gPSByaWdodFRlcm07XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldExlZnRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRUZXJtO1xuICB9XG5cbiAgZ2V0UmlnaHRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0VGVybTtcbiAgfVxuXG4gIGdldEVxdWFsaXR5Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHlOZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5kZTtcbiAgfVxuXG4gIGdldExlZnRUZXJtTm9kZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybU5vZGUgPSB0aGlzLmxlZnRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiBsZWZ0VGVybU5vZGU7XG4gIH1cblxuICBnZXRSaWdodFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSB0aGlzLnJpZ2h0VGVybS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gcmlnaHRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIGNvbnN0IHRlcm1zID0gW1xuICAgICAgdGhpcy5sZWZ0VGVybSxcbiAgICAgIHRoaXMucmlnaHRUZXJtXG4gICAgXTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIG1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgaXNFcXVhbFRvKGVxdWFsaXR5KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gZXF1YWxpdHkuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGVxdWFsaXR5Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNSZWZsZXhpdmUoKSB7XG4gICAgbGV0IHJlZmxleGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLm5lZ2F0ZWQpIHtcbiAgICAgIGNvbnN0IGxlZnRUZXJtRXF1YWxUb1JpZ2h0VGVybSA9IHRoaXMubGVmdFRlcm0uaXNFcXVhbFRvKHRoaXMucmlnaHRUZXJtKTtcblxuICAgICAgaWYgKGxlZnRUZXJtRXF1YWxUb1JpZ2h0VGVybSkge1xuICAgICAgICByZWZsZXhpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWZsZXhpdmU7XG4gIH1cblxuICBmaW5kRXF1YWxpdHkoY29udGV4dCkge1xuICAgIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHRoaXMuZ2V0RXF1YWxpdHlOb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBjb250ZXh0LmZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS4uLmApO1xuXG4gICAgbGV0IGVxdWFsaXR5O1xuXG4gICAgZXF1YWxpdHkgPSB0aGlzLmZpbmRFcXVhbGl0eShjb250ZXh0KTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oZXF1YWxpdHksIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcXVhbGl0eSA9IHRoaXM7ICAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVRlcm1zXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgICBjb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihlcXVhbGl0eSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5hc3NpZ24oc3RhdGUsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtcyhzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1zVmFsaWRhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IGxlZnRUZXJtVmFsaWRhdGVzID0gdGhpcy5sZWZ0VGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxlZnRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByaWdodFRlcm1WYWxpZHRlcyA9IHRoaXMucmlnaHRUZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAocmlnaHRUZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBsZWZ0VGVybVR5cGUgPSBsZWZ0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHJpZ2h0VGVybVR5cGUgPSByaWdodFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICBsZWZ0VGVybVR5cGVCYXNlVHlwZSA9IGxlZnRUZXJtVHlwZS5pc0Jhc2VUeXBlKCksXG4gICAgICAgICAgICAgIHJpZ2h0VGVybVR5cGVCYXNlVHlwZSA9IHJpZ2h0VGVybVR5cGUuaXNCYXNlVHlwZSgpLFxuICAgICAgICAgICAgICBsZWZ0VGVybVR5cGVKb2luZWRUb1JpZ2h0VGVybVR5cGUgPSBsZWZ0VGVybVR5cGUuaXNKb2luZWRUbyhyaWdodFRlcm1UeXBlKTtcblxuICAgICAgICBpZiAobGVmdFRlcm1UeXBlQmFzZVR5cGUgfHwgcmlnaHRUZXJtVHlwZUJhc2VUeXBlIHx8IGxlZnRUZXJtVHlwZUpvaW5lZFRvUmlnaHRUZXJtVHlwZSkge1xuICAgICAgICAgIHRoaXMubGVmdFRlcm0gPSBsZWZ0VGVybTtcblxuICAgICAgICAgIHRoaXMucmlnaHRUZXJtID0gcmlnaHRUZXJtO1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJpZ2h0VGVybVZhbGlkdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGxlZnRUZXJtVmFsaWRhdGVzKSB7XG4gICAgICB0ZXJtc1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5J3MgdGVybXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1zVmFsaWRhdGU7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVjbGFyZWQgPSBpc0RlY2xhcmVkKHN0YXRlKTtcblxuICAgIGlmIChkZWNsYXJlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZWNsYXJlZCBlcXVhbGl0eS4uLmApO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZWNsYXJlZCBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlY2xhcmVkO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmIChkZXJpdmVkKSB7XG4gICAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGRlcml2ZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgY29uc3QgdGVybXNFcXVhdGUgPSBlcXVhdGVUZXJtcyh0aGlzLmxlZnRUZXJtLCB0aGlzLnJpZ2h0VGVybSwgY29udGV4dCk7XG5cbiAgICAgIGlmICgodGhpcy5uZWdhdGVkICYmICF0ZXJtc0VxdWF0ZSkgfHwgKCF0aGlzLm5lZ2F0ZWQgJiYgdGVybXNFcXVhdGUpKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIGFzc2lnbihzdGF0ZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHRyYW5zaWVudCA9IGlzVHJhbnNpZW50KHN0YXRlKTtcblxuICAgIGlmICh0cmFuc2llbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBuZWdhdGVkID0gdGhpcy5pc05lZ2F0ZWQoKSxcbiAgICAgICAgICByZWZsZXhpdmUgPSB0aGlzLmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAobmVnYXRlZCB8fCByZWZsZXhpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcXVhbGl0eUFzc2lnbm1lbnQgPSBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGVxdWFsaXR5QXNzaWdubWVudCk7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmIChkZXJpdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGVmdFZhcmlhYmxlQXNzaWdubWVudCA9IGxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpLFxuICAgICAgICAgIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50ID0gcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJFcXVhbGl0eVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGVxdWFsaXR5O1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgZXF1YWxpdHlOb2RlID0gaW5zdGFudGlhdGVFcXVhbGl0eShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmVnYXRlZCwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbmVnYXRlZCA9IGVxdWFsaXR5Tm9kZS5pc05lZ2F0ZWQoKTtcblxuICByZXR1cm4gbmVnYXRlZDtcbn1cblxuZnVuY3Rpb24gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUobGVmdFRlcm1Ob2RlKTtcblxuICByZXR1cm4gbGVmdFRlcm07XG59XG5cbmZ1bmN0aW9uIHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUpO1xuXG4gIHJldHVybiByaWdodFRlcm07XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiRXF1YWxpdHkiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibmVnYXRlZCIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiaXNOZWdhdGVkIiwiZ2V0TGVmdFRlcm0iLCJnZXRSaWdodFRlcm0iLCJnZXRFcXVhbGl0eU5vZGUiLCJnZXROb2RlIiwiZXF1YWxpdHlOZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJsZWZ0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFRlcm1zIiwidGVybXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsImlzRXF1YWxUbyIsImVxdWFsaXR5IiwiZXF1YWxUbyIsImlzUmVmbGV4aXZlIiwicmVmbGV4aXZlIiwibGVmdFRlcm1FcXVhbFRvUmlnaHRUZXJtIiwiZmluZEVxdWFsaXR5IiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwiZXF1YWxpdHlTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhbGwiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRFcXVhbGl0eSIsImFzc2lnbiIsInRlcm1zVmFsaWRhdGUiLCJsZWZ0VGVybVZhbGlkYXRlcyIsInJpZ2h0VGVybVZhbGlkdGVzIiwibGVmdFRlcm1UeXBlIiwiZ2V0VHlwZSIsInJpZ2h0VGVybVR5cGUiLCJsZWZ0VGVybVR5cGVCYXNlVHlwZSIsImlzQmFzZVR5cGUiLCJyaWdodFRlcm1UeXBlQmFzZVR5cGUiLCJsZWZ0VGVybVR5cGVKb2luZWRUb1JpZ2h0VGVybVR5cGUiLCJpc0pvaW5lZFRvIiwidmFsaWRhdGVzV2hlbkRlY2xhcmVkIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidGVybXNFcXVhdGUiLCJlcXVhdGVUZXJtcyIsInRyYW5zaWVudCIsImlzVHJhbnNpZW50IiwiZXF1YWxpdHlBc3NpZ25tZW50IiwiZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwiYWRkQXNzaWdubWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnQiLCJsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwicmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlRXF1YWxpdHkiLCJuZWdhdGVkRnJvbUVxdWFsaXR5Tm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWVBOzs7ZUFBQTs7O2dDQWI2QzswQkFFdEI7d0JBQ0s7eUJBQ0E7OEJBQ0E7NkJBQ1E7eUJBQ007dUJBQ1M7d0JBQ3FF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
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWFsaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGVxdWF0ZVRlcm1zIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVFcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQsIGlzVHJhbnNpZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5LCByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSB9IGZyb20gXCIuLi9wcm9jZXNzL2Fzc2lnblwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBFcXVhbGl0eSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uZWdhdGVkID0gbmVnYXRlZDtcbiAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG4gICAgdGhpcy5yaWdodFRlcm0gPSByaWdodFRlcm07XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldExlZnRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRUZXJtO1xuICB9XG5cbiAgZ2V0UmlnaHRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0VGVybTtcbiAgfVxuXG4gIGdldEVxdWFsaXR5Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHlOZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5kZTtcbiAgfVxuXG4gIGdldExlZnRUZXJtTm9kZSgpIHtcbiAgICBjb25zdCBsZWZ0VGVybU5vZGUgPSB0aGlzLmxlZnRUZXJtLmdldE5vZGUoKTtcblxuICAgIHJldHVybiBsZWZ0VGVybU5vZGU7XG4gIH1cblxuICBnZXRSaWdodFRlcm1Ob2RlKCkge1xuICAgIGNvbnN0IHJpZ2h0VGVybU5vZGUgPSB0aGlzLnJpZ2h0VGVybS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gcmlnaHRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIGNvbnN0IHRlcm1zID0gW1xuICAgICAgdGhpcy5sZWZ0VGVybSxcbiAgICAgIHRoaXMucmlnaHRUZXJtXG4gICAgXTtcblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIG1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBlcXVhbGl0eU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBlcXVhbGl0eU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgaXNFcXVhbFRvKGVxdWFsaXR5KSB7XG4gICAgY29uc3QgZXF1YWxpdHlOb2RlID0gZXF1YWxpdHkuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGVxdWFsaXR5Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5KGNvbnRleHQpIHtcbiAgICBjb25zdCBlcXVhbGl0eU5vZGUgPSB0aGlzLmdldEVxdWFsaXR5Tm9kZSgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuLi5gKTtcblxuICAgIGxldCBlcXVhbGl0eTtcblxuICAgIGVxdWFsaXR5ID0gdGhpcy5maW5kRXF1YWxpdHkoY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGVxdWFsaXR5LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXF1YWxpdHkgPSB0aGlzOyAgLy8vXG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlVGVybXMgPSB0aGlzLnZhbGlkYXRlVGVybXMuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUZXJtc1xuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlV2hlbkRlY2xhcmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZWNsYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKFtcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG5cbiAgICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHRoaXMuYXNzaWduKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtc1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSdzIHRlcm1zLi4uYCk7XG5cbiAgICBjb25zdCBsZWZ0VGVybVZhbGlkYXRlcyA9IHRoaXMubGVmdFRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChsZWZ0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmlnaHRUZXJtVmFsaWR0ZXMgPSB0aGlzLnJpZ2h0VGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHJpZ2h0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVmdFRlcm1UeXBlID0gbGVmdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICByaWdodFRlcm1UeXBlID0gcmlnaHRUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgbGVmdFRlcm1UeXBlQmFzZVR5cGUgPSBsZWZ0VGVybVR5cGUuaXNCYXNlVHlwZSgpLFxuICAgICAgICAgICAgICByaWdodFRlcm1UeXBlQmFzZVR5cGUgPSByaWdodFRlcm1UeXBlLmlzQmFzZVR5cGUoKSxcbiAgICAgICAgICAgICAgbGVmdFRlcm1UeXBlSm9pbmVkVG9SaWdodFRlcm1UeXBlID0gbGVmdFRlcm1UeXBlLmlzSm9pbmVkVG8ocmlnaHRUZXJtVHlwZSk7XG5cbiAgICAgICAgaWYgKGxlZnRUZXJtVHlwZUJhc2VUeXBlIHx8IHJpZ2h0VGVybVR5cGVCYXNlVHlwZSB8fCBsZWZ0VGVybVR5cGVKb2luZWRUb1JpZ2h0VGVybVR5cGUpIHtcbiAgICAgICAgICB0aGlzLmxlZnRUZXJtID0gbGVmdFRlcm07XG5cbiAgICAgICAgICB0aGlzLnJpZ2h0VGVybSA9IHJpZ2h0VGVybTtcblxuICAgICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByaWdodFRlcm1WYWxpZHRlcztcbiAgICB9KTtcblxuICAgIGlmIChsZWZ0VGVybVZhbGlkYXRlcykge1xuICAgICAgdGVybXNWYWxpZGF0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1zVmFsaWRhdGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSdzIHRlcm1zLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtc1ZhbGlkYXRlO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVjbGFyZWQoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVjbGFyZWQpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVjbGFyZWQgZXF1YWxpdHkuLi5gKTtcblxuICAgICAgdmFsaWRhdGVzV2hlbkRlY2xhcmVkID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZWNsYXJlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVjbGFyZWQgZXF1YWxpdHkuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZWNsYXJlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgY29uc3QgZXF1YWxpdHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBkZXJpdmVkIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm1zRXF1YXRlID0gZXF1YXRlVGVybXModGhpcy5sZWZ0VGVybSwgdGhpcy5yaWdodFRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoKHRoaXMubmVnYXRlZCAmJiAhdGVybXNFcXVhdGUpIHx8ICghdGhpcy5uZWdhdGVkICYmIHRlcm1zRXF1YXRlKSkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZGVyaXZlZCBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICBhc3NpZ24oc3RhdGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCB0cmFuc2llbnQgPSBpc1RyYW5zaWVudChzdGF0ZSk7XG5cbiAgICBpZiAodHJhbnNpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmVnYXRlZCA9IHRoaXMuaXNOZWdhdGVkKCk7XG5cbiAgICBpZiAobmVnYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVxdWFsaXR5ID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChlcXVhbGl0eUFzc2lnbm1lbnQpO1xuXG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQgPSBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgICByaWdodFZhcmlhYmxlQXNzaWdubWVudCA9IHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChsZWZ0VmFyaWFibGVBc3NpZ25tZW50KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudChyaWdodFZhcmlhYmxlQXNzaWdubWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1YWxpdHlcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBlcXVhbGl0eTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGVxdWFsaXR5Tm9kZSA9IGluc3RhbnRpYXRlRXF1YWxpdHkoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5lZ2F0ZWQsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG59KTtcblxuZnVuY3Rpb24gbmVnYXRlZEZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG5lZ2F0ZWQgPSBlcXVhbGl0eU5vZGUuaXNOZWdhdGVkKCk7XG5cbiAgcmV0dXJuIG5lZ2F0ZWQ7XG59XG5cbmZ1bmN0aW9uIGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSk7XG5cbiAgcmV0dXJuIGxlZnRUZXJtO1xufVxuXG5mdW5jdGlvbiByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZShyaWdodFRlcm1Ob2RlKTtcblxuICByZXR1cm4gcmlnaHRUZXJtO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkVxdWFsaXR5IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5lZ2F0ZWQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImlzTmVnYXRlZCIsImdldExlZnRUZXJtIiwiZ2V0UmlnaHRUZXJtIiwiZ2V0RXF1YWxpdHlOb2RlIiwiZ2V0Tm9kZSIsImVxdWFsaXR5TmRlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRUZXJtcyIsInRlcm1zIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJpc0VxdWFsVG8iLCJlcXVhbGl0eSIsImVxdWFsVG8iLCJmaW5kRXF1YWxpdHkiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsInZhbGlkYXRlIiwic3RhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJlcXVhbGl0eVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1zIiwiYmluZCIsImFsbCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsImFkZEVxdWFsaXR5IiwiYXNzaWduIiwidGVybXNWYWxpZGF0ZSIsImxlZnRUZXJtVmFsaWRhdGVzIiwicmlnaHRUZXJtVmFsaWR0ZXMiLCJsZWZ0VGVybVR5cGUiLCJnZXRUeXBlIiwicmlnaHRUZXJtVHlwZSIsImxlZnRUZXJtVHlwZUJhc2VUeXBlIiwiaXNCYXNlVHlwZSIsInJpZ2h0VGVybVR5cGVCYXNlVHlwZSIsImxlZnRUZXJtVHlwZUpvaW5lZFRvUmlnaHRUZXJtVHlwZSIsImlzSm9pbmVkVG8iLCJ2YWxpZGF0ZXNXaGVuRGVjbGFyZWQiLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ0ZXJtc0VxdWF0ZSIsImVxdWF0ZVRlcm1zIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJlcXVhbGl0eUFzc2lnbm1lbnQiLCJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJhZGRBc3NpZ25tZW50IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudCIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVFcXVhbGl0eSIsIm5lZ2F0ZWRGcm9tRXF1YWxpdHlOb2RlIiwibGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwicmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZSIsImZpbmRUZXJtQnlUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7Z0NBYjZDOzBCQUV0Qjt3QkFDSzt5QkFDQTs4QkFDQTs2QkFDUTt5QkFDTTt1QkFDUzt3QkFDcUU7QUFFeEgsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsaUJBQWlCQyx1QkFBTztJQUNsRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLENBQUU7UUFDM0UsS0FBSyxDQUFDTixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ0gsT0FBTztJQUNyQjtJQUVBSSxjQUFjO1FBQ1osT0FB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
@@ -12,11 +12,11 @@ const _occamlanguages = require("occam-languages");
12
12
  const _necessary = require("necessary");
13
13
  const _elements = require("../elements");
14
14
  const _context = require("../utilities/context");
15
- const _instantiate = require("../process/instantiate");
16
15
  const _brackets = require("../utilities/brackets");
16
+ const _instantiate = require("../process/instantiate");
17
17
  const _string = require("../utilities/string");
18
18
  const _element = require("../utilities/element");
19
- const { compress } = _necessary.arrayUtilities;
19
+ const { first, second, compress } = _necessary.arrayUtilities;
20
20
  const _default = (0, _elements.define)(class Equivalence extends _occamlanguages.Element {
21
21
  constructor(context, string, node, breakPoint, terms){
22
22
  super(context, string, node, breakPoint);
@@ -70,8 +70,8 @@ const _default = (0, _elements.define)(class Equivalence extends _occamlanguages
70
70
  }
71
71
  isDisjointFrom(equivalence) {
72
72
  const disjointFrom = equivalence.everyTerm((term)=>{
73
- const comparesToTerm = this.compareTerm(term);
74
- if (!comparesToTerm) {
73
+ const termEquates = this.equateTerm(term);
74
+ if (!termEquates) {
75
75
  return true;
76
76
  }
77
77
  });
@@ -85,48 +85,32 @@ const _default = (0, _elements.define)(class Equivalence extends _occamlanguages
85
85
  const implicitlyGroundedTerms = this.getImplicitlyGroundedTerms(definedVariables, context), implicitlyGroundedTermsLength = implicitlyGroundedTerms.length, implicitlyGrounded = implicitlyGroundedTermsLength > 0;
86
86
  return implicitlyGrounded;
87
87
  }
88
- matchTermNode(termNode) {
89
- termNode = (0, _brackets.stripBracketsFromTermNode)(termNode); ///
90
- const termNodeMatches = this.someTerm((term)=>{
91
- const termNodeMatches = term.matchTermNode(termNode);
92
- if (termNodeMatches) {
88
+ equateTerm(term) {
89
+ const termA = term, termEquates = this.someTerm((term)=>{
90
+ const termB = term, termAEqualToTermB = termA.isEqualTo(termB);
91
+ if (termAEqualToTermB) {
93
92
  return true;
94
93
  }
95
94
  });
96
- return termNodeMatches;
95
+ return termEquates;
97
96
  }
98
- matchTermNodes(termNodes) {
99
- const termNodesMatch = termNodes.every((termNode)=>{
100
- const termNodeMatches = this.matchTermNode(termNode);
101
- if (termNodeMatches) {
97
+ equateTerms(terms) {
98
+ const termsEquate = terms.every((term)=>{
99
+ const termEquates = this.equateTerm(term);
100
+ if (termEquates) {
102
101
  return true;
103
102
  }
104
103
  });
105
- return termNodesMatch;
104
+ return termsEquate;
106
105
  }
107
- someTerm(callback) {
108
- return this.terms.some(callback);
109
- }
110
- everyTerm(callback) {
111
- return this.terms.every(callback);
112
- }
113
- compareTerm(term) {
114
- const termA = term, comparesToTerm = this.someTerm((term)=>{
115
- const termB = term, termAEqualToTermB = termA.isEqualTo(termB);
116
- if (termAEqualToTermB) {
106
+ matchTermNode(termNode) {
107
+ const termNodeMatches = this.terms.some((term)=>{
108
+ const termNodeMatches = term.matchTermNode(termNode);
109
+ if (termNodeMatches) {
117
110
  return true;
118
111
  }
119
112
  });
120
- return comparesToTerm;
121
- }
122
- someOtherTerm(term, callback) {
123
- const termA = term, terms = this.terms.filter((term)=>{
124
- const termB = term, termAEqualToTermB = termA.isEqualTo(termB);
125
- if (!termAEqualToTermB) {
126
- return true;
127
- }
128
- }), result = terms.some(callback);
129
- return result;
113
+ return termNodeMatches;
130
114
  }
131
115
  combineTerms(terms) {
132
116
  const combinedTerms = [
@@ -152,15 +136,43 @@ const _default = (0, _elements.define)(class Equivalence extends _occamlanguages
152
136
  }, context);
153
137
  return equivalence;
154
138
  }
139
+ someOtherTerm(termNode, callback) {
140
+ const terms = this.terms.filter((term)=>{
141
+ const termNodeMatches = term.matchTermNode(termNode);
142
+ if (!termNodeMatches) {
143
+ return true;
144
+ }
145
+ }), result = terms.some(callback);
146
+ return result;
147
+ }
148
+ someTerm(callback) {
149
+ return this.terms.some(callback);
150
+ }
151
+ everyTerm(callback) {
152
+ return this.terms.every(callback);
153
+ }
155
154
  static name = "Equivalence";
156
155
  static fromEquality(equality, context) {
157
156
  let equivalence;
157
+ let terms;
158
+ terms = equality.getTerms();
159
+ terms = terms.map((term)=>{
160
+ term = (0, _brackets.stripBracketsFromTerm)(term, context);
161
+ return term;
162
+ });
163
+ const firstTerm = first(terms), secondTerm = second(terms), firstTermEqualToSecondTerm = firstTerm.isEqualTo(secondTerm);
164
+ if (firstTermEqualToSecondTerm) {
165
+ const term = firstTerm; ///
166
+ terms = [
167
+ term
168
+ ];
169
+ }
158
170
  (0, _context.instantiate)((context)=>{
159
- const terms = equality.getTerms(), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalenceNode = (0, _instantiate.instantiateEquivalence)(string, context);
171
+ const equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalenceNode = (0, _instantiate.instantiateEquivalence)(string, context);
160
172
  equivalence = (0, _element.equivalenceFromEquivalenceNode)(equivalenceNode, context);
161
173
  }, context);
162
174
  return equivalence;
163
175
  }
164
176
  });
165
177
 
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1aXZhbGVuY2UgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGNvbXByZXNzIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVxdWl2YWxlbmNlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGVxdWl2YWxlbmNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlTm9kZTtcbiAgfVxuXG4gIGdldEdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCkge1xuICAgIHRoaXMudGVybXMuZm9yRWFjaCgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUdyb3VuZGVkID0gdGVybS5pc0dyb3VuZGVkKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtID0gZ3JvdW5kZWRUZXJtcy5zb21lKChncm91bmRlZFRlcm0pID0+IHtcbiAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm1Ob2RlID0gZ3JvdW5kZWRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgIGlmIChncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghdGVybU1hdGNoZXNHcm91bmRlZFRlcm0pIHtcbiAgICAgICAgICBjb25zdCBncm91bmRlZFRlcm0gPSB0ZXJtO1xuXG4gICAgICAgICAgZ3JvdW5kZWRUZXJtcy5wdXNoKGdyb3VuZGVkVGVybSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEluaXRpYWxseUdyb3VuZGVkVGVybXMoY29udGV4dCkge1xuICAgIGNvbnN0IGluaXRpYWxseUdyb3VuZGVkVGVybXMgPSB0aGlzLnRlcm1zLnJlZHVjZSgoaW5pdGlhbGx5R3JvdW5kZWRUZXJtcywgdGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUluaXRpYWxseUdyb3VuZGVkID0gdGVybS5pc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybUluaXRpYWxseUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxseUdyb3VuZGVkVGVybSA9IHRlcm07IC8vL1xuXG4gICAgICAgIGluaXRpYWxseUdyb3VuZGVkVGVybXMucHVzaChpbml0aWFsbHlHcm91bmRlZFRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcztcbiAgfVxuXG4gIGdldEltcGxpY2l0bHlHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMudGVybXMucmVkdWNlKChpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcywgdGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUltcGxpY2l0bHlHcm91bmRlZCA9IHRlcm0uaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtSW1wbGljaXRseUdyb3VuZGVkKSB7XG4gICAgICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm0gPSB0ZXJtOyAvLy9cblxuICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcy5wdXNoKGltcGxpY2l0bHlHcm91bmRlZFRlcm0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkVGVybXM7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zO1xuICB9XG5cbiAgaXNEaXNqb2ludEZyb20oZXF1aXZhbGVuY2UpIHtcbiAgICBjb25zdCBkaXNqb2ludEZyb20gPSBlcXVpdmFsZW5jZS5ldmVyeVRlcm0oKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBhcmVzVG9UZXJtID0gdGhpcy5jb21wYXJlVGVybSh0ZXJtKTtcblxuICAgICAgaWYgKCFjb21wYXJlc1RvVGVybSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkaXNqb2ludEZyb207XG4gIH1cblxuICBpc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpIHtcbiAgICBjb25zdCBpbml0aWFsbHlHcm91bmRlZFRlcm1zID0gdGhpcy5nZXRJbml0aWFsbHlHcm91bmRlZFRlcm1zKGNvbnRleHQpLFxuICAgICAgICAgIGluaXRpYWxseUdyb3VuZGVkVGVybXNMZW5ndGggPSBpbml0aWFsbHlHcm91bmRlZFRlcm1zLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZCA9IChpbml0aWFsbHlHcm91bmRlZFRlcm1zTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWQ7XG4gIH1cblxuICBpc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgaW1wbGljaXRseUdyb3VuZGVkVGVybXMgPSB0aGlzLmdldEltcGxpY2l0bHlHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zTGVuZ3RoID0gaW1wbGljaXRseUdyb3VuZGVkVGVybXMubGVuZ3RoLFxuICAgICAgICAgIGltcGxpY2l0bHlHcm91bmRlZCA9IChpbXBsaWNpdGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0bHlHcm91bmRlZDtcbiAgfVxuXG4gIG1hdGNoVGVybU5vZGUodGVybU5vZGUpIHtcbiAgICB0ZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUodGVybU5vZGUpOyAvLy9cblxuICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMuc29tZVRlcm0oKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZXModGVybU5vZGVzKSB7XG4gICAgY29uc3QgdGVybU5vZGVzTWF0Y2ggPSB0ZXJtTm9kZXMuZXZlcnkoKHRlcm1Ob2RlKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1Ob2Rlc01hdGNoO1xuICB9XG5cbiAgc29tZVRlcm0oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMudGVybXMuc29tZShjYWxsYmFjayk7IH1cblxuICBldmVyeVRlcm0oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMudGVybXMuZXZlcnkoY2FsbGJhY2spOyB9XG5cbiAgY29tcGFyZVRlcm0odGVybSkge1xuICAgIGNvbnN0IHRlcm1BID0gdGVybSwgLy8vXG4gICAgICAgICAgY29tcGFyZXNUb1Rlcm0gPSB0aGlzLnNvbWVUZXJtKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICAgICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1Rlcm07XG4gIH1cblxuICBzb21lT3RoZXJUZXJtKHRlcm0sIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICB0ZXJtcyA9IHRoaXMudGVybXMuZmlsdGVyKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICAgICAgICBpZiAoIXRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJlc3VsdCA9IHRlcm1zLnNvbWUoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbWJpbmVUZXJtcyh0ZXJtcykge1xuICAgIGNvbnN0IGNvbWJpbmVkVGVybXMgPSBbXG4gICAgICAuLi50aGlzLnRlcm1zLFxuICAgICAgLi4udGVybXNcbiAgICBdO1xuXG4gICAgY29tcHJlc3MoY29tYmluZWRUZXJtcywgKGNvbWJpbmVkVGVybUEsIGNvbWJpbmVkVGVybUIpID0+IHtcbiAgICAgIGNvbnN0IGNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CID0gY29tYmluZWRUZXJtQS5pc0VxdWFsVG8oY29tYmluZWRUZXJtQik7XG5cbiAgICAgIGlmICghY29tYmluZWRUZXJtRXF1YWxUb0NvbWJpbmVkVGVybUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tYmluZWRUZXJtcztcbiAgfVxuXG4gIG1lcmdlZFdpdGgoZXF1aXZhbGVuY2UsIGNvbnRleHQpIHtcbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHRlcm1zO1xuXG4gICAgICB0ZXJtcyA9IGVxdWl2YWxlbmNlLmdldFRlcm1zKCk7XG5cbiAgICAgIGNvbnN0IGNvbWJpbmVkVGVybXMgPSB0aGlzLmNvbWJpbmVUZXJtcyh0ZXJtcyk7XG5cbiAgICAgIHRlcm1zID0gY29tYmluZWRUZXJtczsgIC8vL1xuXG4gICAgICBjb25zdCBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICBlcXVpdmFsZW5jZU5vZGUgPSBpbnN0YW50aWF0ZUVxdWl2YWxlbmNlKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgIGVxdWl2YWxlbmNlID0gZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2U7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1aXZhbGVuY2VcIjtcblxuICBzdGF0aWMgZnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1zID0gZXF1YWxpdHkuZ2V0VGVybXMoKSxcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmcsICAvLy9cbiAgICAgICAgICAgIGVxdWl2YWxlbmNlTm9kZSA9IGluc3RhbnRpYXRlRXF1aXZhbGVuY2Uoc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgZXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImRlZmluZSIsIkVxdWl2YWxlbmNlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm1zIiwiZ2V0VGVybXMiLCJnZXRFcXVpdmFsZW5jZU5vZGUiLCJnZXROb2RlIiwiZXF1aXZhbGVuY2VOb2RlIiwiZ2V0R3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJncm91bmRlZFRlcm1zIiwiZm9yRWFjaCIsInRlcm0iLCJ0ZXJtR3JvdW5kZWQiLCJpc0dyb3VuZGVkIiwidGVybU1hdGNoZXNHcm91bmRlZFRlcm0iLCJzb21lIiwiZ3JvdW5kZWRUZXJtIiwiZ3JvdW5kZWRUZXJtTm9kZSIsImdyb3VuZGVkVGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsInB1c2giLCJnZXRJbml0aWFsbHlHcm91bmRlZFRlcm1zIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyIsInJlZHVjZSIsInRlcm1Jbml0aWFsbHlHcm91bmRlZCIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJpbml0aWFsbHlHcm91bmRlZFRlcm0iLCJnZXRJbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyIsImltcGxpY2l0bHlHcm91bmRlZFRlcm1zIiwidGVybUltcGxpY2l0bHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybSIsImlzRGlzam9pbnRGcm9tIiwiZXF1aXZhbGVuY2UiLCJkaXNqb2ludEZyb20iLCJldmVyeVRlcm0iLCJjb21wYXJlc1RvVGVybSIsImNvbXBhcmVUZXJtIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCIsImxlbmd0aCIsImluaXRpYWxseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGgiLCJpbXBsaWNpdGx5R3JvdW5kZWQiLCJ0ZXJtTm9kZSIsInN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJzb21lVGVybSIsIm1hdGNoVGVybU5vZGVzIiwidGVybU5vZGVzIiwidGVybU5vZGVzTWF0Y2giLCJldmVyeSIsImNhbGxiYWNrIiwidGVybUEiLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwic29tZU90aGVyVGVybSIsImZpbHRlciIsInJlc3VsdCIsImNvbWJpbmVUZXJtcyIsImNvbWJpbmVkVGVybXMiLCJjb21iaW5lZFRlcm1BIiwiY29tYmluZWRUZXJtQiIsImNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CIiwibWVyZ2VkV2l0aCIsImluc3RhbnRpYXRlIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImluc3RhbnRpYXRlRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJuYW1lIiwiZnJvbUVxdWFsaXR5IiwiZXF1YWxpdHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVp3QjsyQkFDTzswQkFFUjt5QkFDSzs2QkFDVzswQkFDRzt3QkFDQzt5QkFDSTtBQUUvQyxNQUFNLEVBQUVBLFFBQVEsRUFBRSxHQUFHQyx5QkFBYztNQUVuQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLENBQUU7UUFDcEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLEtBQUssR0FBR0E7SUFDZjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNELEtBQUs7SUFDbkI7SUFFQUUscUJBQXFCO1FBQ25CLE1BQU1KLE9BQU8sSUFBSSxDQUFDSyxP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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2VxdWl2YWxlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRXF1aXZhbGVuY2UgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgRXF1aXZhbGVuY2UgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtcztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VOb2RlO1xuICB9XG5cbiAgZ2V0R3JvdW5kZWRUZXJtcyhkZWZpbmVkVmFyaWFibGVzLCBncm91bmRlZFRlcm1zLCBjb250ZXh0KSB7XG4gICAgdGhpcy50ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtR3JvdW5kZWQgPSB0ZXJtLmlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtR3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VuZGVkVGVybU5vZGUgPSBncm91bmRlZFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgIGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKGdyb3VuZGVkVGVybU5vZGUpO1xuXG4gICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCF0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VuZGVkVGVybSA9IHRlcm07XG5cbiAgICAgICAgICBncm91bmRlZFRlcm1zLnB1c2goZ3JvdW5kZWRUZXJtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0SW5pdGlhbGx5R3JvdW5kZWRUZXJtcyhjb250ZXh0KSB7XG4gICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMudGVybXMucmVkdWNlKChpbml0aWFsbHlHcm91bmRlZFRlcm1zLCB0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSW5pdGlhbGx5R3JvdW5kZWQgPSB0ZXJtLmlzSW5pdGlhbGx5R3JvdW5kZWQoY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtSW5pdGlhbGx5R3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtID0gdGVybTsgLy8vXG5cbiAgICAgICAgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcy5wdXNoKGluaXRpYWxseUdyb3VuZGVkVGVybSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbml0aWFsbHlHcm91bmRlZFRlcm1zO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBpbml0aWFsbHlHcm91bmRlZFRlcm1zO1xuICB9XG5cbiAgZ2V0SW1wbGljaXRseUdyb3VuZGVkVGVybXMoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm1zID0gdGhpcy50ZXJtcy5yZWR1Y2UoKGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLCB0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtSW1wbGljaXRseUdyb3VuZGVkID0gdGVybS5pc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1JbXBsaWNpdGx5R3JvdW5kZWQpIHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRseUdyb3VuZGVkVGVybSA9IHRlcm07IC8vL1xuXG4gICAgICAgIGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLnB1c2goaW1wbGljaXRseUdyb3VuZGVkVGVybSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcztcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gaW1wbGljaXRseUdyb3VuZGVkVGVybXM7XG4gIH1cblxuICBpc0Rpc2pvaW50RnJvbShlcXVpdmFsZW5jZSkge1xuICAgIGNvbnN0IGRpc2pvaW50RnJvbSA9IGVxdWl2YWxlbmNlLmV2ZXJ5VGVybSgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybUVxdWF0ZXMgPSB0aGlzLmVxdWF0ZVRlcm0odGVybSk7XG5cbiAgICAgIGlmICghdGVybUVxdWF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlzam9pbnRGcm9tO1xuICB9XG5cbiAgaXNJbml0aWFsbHlHcm91bmRlZChjb250ZXh0KSB7XG4gICAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRUZXJtcyA9IHRoaXMuZ2V0SW5pdGlhbGx5R3JvdW5kZWRUZXJtcyhjb250ZXh0KSxcbiAgICAgICAgICBpbml0aWFsbHlHcm91bmRlZFRlcm1zTGVuZ3RoID0gaW5pdGlhbGx5R3JvdW5kZWRUZXJtcy5sZW5ndGgsXG4gICAgICAgICAgaW5pdGlhbGx5R3JvdW5kZWQgPSAoaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGluaXRpYWxseUdyb3VuZGVkO1xuICB9XG5cbiAgaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICAgIGNvbnN0IGltcGxpY2l0bHlHcm91bmRlZFRlcm1zID0gdGhpcy5nZXRJbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyhkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSxcbiAgICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWRUZXJtc0xlbmd0aCA9IGltcGxpY2l0bHlHcm91bmRlZFRlcm1zLmxlbmd0aCxcbiAgICAgICAgICBpbXBsaWNpdGx5R3JvdW5kZWQgPSAoaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBpbXBsaWNpdGx5R3JvdW5kZWQ7XG4gIH1cblxuICBlcXVhdGVUZXJtKHRlcm0pIHtcbiAgICBjb25zdCB0ZXJtQSA9IHRlcm0sIC8vL1xuICAgICAgICAgIHRlcm1FcXVhdGVzID0gdGhpcy5zb21lVGVybSgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgIHRlcm1BRXF1YWxUb1Rlcm1CID0gdGVybUEuaXNFcXVhbFRvKHRlcm1CKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1BRXF1YWxUb1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1FcXVhdGVzO1xuICB9XG5cbiAgZXF1YXRlVGVybXModGVybXMpIHtcbiAgICBjb25zdCB0ZXJtc0VxdWF0ZSA9IHRlcm1zLmV2ZXJ5KCh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtRXF1YXRlcyA9IHRoaXMuZXF1YXRlVGVybSh0ZXJtKTtcblxuICAgICAgaWYgKHRlcm1FcXVhdGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1zRXF1YXRlO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMudGVybXMuc29tZSgodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXJtTm9kZU1hdGNoZXM7XG4gIH1cblxuICBjb21iaW5lVGVybXModGVybXMpIHtcbiAgICBjb25zdCBjb21iaW5lZFRlcm1zID0gW1xuICAgICAgLi4udGhpcy50ZXJtcyxcbiAgICAgIC4uLnRlcm1zXG4gICAgXTtcblxuICAgIGNvbXByZXNzKGNvbWJpbmVkVGVybXMsIChjb21iaW5lZFRlcm1BLCBjb21iaW5lZFRlcm1CKSA9PiB7XG4gICAgICBjb25zdCBjb21iaW5lZFRlcm1FcXVhbFRvQ29tYmluZWRUZXJtQiA9IGNvbWJpbmVkVGVybUEuaXNFcXVhbFRvKGNvbWJpbmVkVGVybUIpO1xuXG4gICAgICBpZiAoIWNvbWJpbmVkVGVybUVxdWFsVG9Db21iaW5lZFRlcm1CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVkVGVybXM7XG4gIH1cblxuICBtZXJnZWRXaXRoKGVxdWl2YWxlbmNlLCBjb250ZXh0KSB7XG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB0ZXJtcztcblxuICAgICAgdGVybXMgPSBlcXVpdmFsZW5jZS5nZXRUZXJtcygpO1xuXG4gICAgICBjb25zdCBjb21iaW5lZFRlcm1zID0gdGhpcy5jb21iaW5lVGVybXModGVybXMpO1xuXG4gICAgICB0ZXJtcyA9IGNvbWJpbmVkVGVybXM7ICAvLy9cblxuICAgICAgY29uc3QgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZywgIC8vL1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gaW5zdGFudGlhdGVFcXVpdmFsZW5jZShzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlO1xuICB9XG5cbiAgc29tZU90aGVyVGVybSh0ZXJtTm9kZSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCB0ZXJtcyA9IHRoaXMudGVybXMuZmlsdGVyKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICByZXN1bHQgPSB0ZXJtcy5zb21lKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzb21lVGVybShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy50ZXJtcy5zb21lKGNhbGxiYWNrKTsgfVxuXG4gIGV2ZXJ5VGVybShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy50ZXJtcy5ldmVyeShjYWxsYmFjayk7IH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXF1aXZhbGVuY2VcIjtcblxuICBzdGF0aWMgZnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlO1xuXG4gICAgbGV0IHRlcm1zO1xuXG4gICAgdGVybXMgPSBlcXVhbGl0eS5nZXRUZXJtcygpO1xuXG4gICAgdGVybXMgPSB0ZXJtcy5tYXAoKHRlcm0pID0+IHsgLy8vXG4gICAgICB0ZXJtID0gc3RyaXBCcmFja2V0c0Zyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdGVybTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpcnN0VGVybSA9IGZpcnN0KHRlcm1zKSxcbiAgICAgICAgICBzZWNvbmRUZXJtID0gc2Vjb25kKHRlcm1zKSxcbiAgICAgICAgICBmaXJzdFRlcm1FcXVhbFRvU2Vjb25kVGVybSA9IGZpcnN0VGVybS5pc0VxdWFsVG8oc2Vjb25kVGVybSk7XG5cbiAgICBpZiAoZmlyc3RUZXJtRXF1YWxUb1NlY29uZFRlcm0pIHtcbiAgICAgIGNvbnN0IHRlcm0gPSBmaXJzdFRlcm07IC8vL1xuXG4gICAgICB0ZXJtcyA9IFtcbiAgICAgICAgdGVybVxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgICAgICBzdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZywgIC8vL1xuICAgICAgICAgICAgZXF1aXZhbGVuY2VOb2RlID0gaW5zdGFudGlhdGVFcXVpdmFsZW5jZShzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgICBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJmaXJzdCIsInNlY29uZCIsImNvbXByZXNzIiwiYXJyYXlVdGlsaXRpZXMiLCJkZWZpbmUiLCJFcXVpdmFsZW5jZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtcyIsImdldFRlcm1zIiwiZ2V0RXF1aXZhbGVuY2VOb2RlIiwiZ2V0Tm9kZSIsImVxdWl2YWxlbmNlTm9kZSIsImdldEdyb3VuZGVkVGVybXMiLCJkZWZpbmVkVmFyaWFibGVzIiwiZ3JvdW5kZWRUZXJtcyIsImZvckVhY2giLCJ0ZXJtIiwidGVybUdyb3VuZGVkIiwiaXNHcm91bmRlZCIsInRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtIiwic29tZSIsImdyb3VuZGVkVGVybSIsImdyb3VuZGVkVGVybU5vZGUiLCJncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJwdXNoIiwiZ2V0SW5pdGlhbGx5R3JvdW5kZWRUZXJtcyIsImluaXRpYWxseUdyb3VuZGVkVGVybXMiLCJyZWR1Y2UiLCJ0ZXJtSW5pdGlhbGx5R3JvdW5kZWQiLCJpc0luaXRpYWxseUdyb3VuZGVkIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtIiwiZ2V0SW1wbGljaXRseUdyb3VuZGVkVGVybXMiLCJpbXBsaWNpdGx5R3JvdW5kZWRUZXJtcyIsInRlcm1JbXBsaWNpdGx5R3JvdW5kZWQiLCJpc0ltcGxpY2l0bHlHcm91bmRlZCIsImltcGxpY2l0bHlHcm91bmRlZFRlcm0iLCJpc0Rpc2pvaW50RnJvbSIsImVxdWl2YWxlbmNlIiwiZGlzam9pbnRGcm9tIiwiZXZlcnlUZXJtIiwidGVybUVxdWF0ZXMiLCJlcXVhdGVUZXJtIiwiaW5pdGlhbGx5R3JvdW5kZWRUZXJtc0xlbmd0aCIsImxlbmd0aCIsImluaXRpYWxseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkVGVybXNMZW5ndGgiLCJpbXBsaWNpdGx5R3JvdW5kZWQiLCJ0ZXJtQSIsInNvbWVUZXJtIiwidGVybUIiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImVxdWF0ZVRlcm1zIiwidGVybXNFcXVhdGUiLCJldmVyeSIsInRlcm1Ob2RlIiwidGVybU5vZGVNYXRjaGVzIiwiY29tYmluZVRlcm1zIiwiY29tYmluZWRUZXJtcyIsImNvbWJpbmVkVGVybUEiLCJjb21iaW5lZFRlcm1CIiwiY29tYmluZWRUZXJtRXF1YWxUb0NvbWJpbmVkVGVybUIiLCJtZXJnZWRXaXRoIiwiaW5zdGFudGlhdGUiLCJlcXVpdmFsZW5jZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiaW5zdGFudGlhdGVFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZSIsInNvbWVPdGhlclRlcm0iLCJjYWxsYmFjayIsImZpbHRlciIsInJlc3VsdCIsIm5hbWUiLCJmcm9tRXF1YWxpdHkiLCJlcXVhbGl0eSIsIm1hcCIsInN0cmlwQnJhY2tldHNGcm9tVGVybSIsImZpcnN0VGVybSIsInNlY29uZFRlcm0iLCJmaXJzdFRlcm1FcXVhbFRvU2Vjb25kVGVybSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7Z0NBWndCOzJCQUNPOzBCQUVSO3lCQUNLOzBCQUNVOzZCQUNDO3dCQUNJO3lCQUNJ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
@@ -18,6 +18,7 @@ _export(exports, {
18
18
  });
19
19
  const _occamquery = require("occam-query");
20
20
  const _zip = /*#__PURE__*/ _interop_require_default(require("../pass/zip"));
21
+ const _brackets = require("../utilities/brackets");
21
22
  const _equivalences = require("../utilities/equivalences");
22
23
  function _interop_require_default(obj) {
23
24
  return obj && obj.__esModule ? obj : {
@@ -33,25 +34,40 @@ class EquationalPass extends _zip.default {
33
34
  specificNodeQuery: termNodeQuery,
34
35
  run: (leftTermNode, rightTermNode, context)=>{
35
36
  let success = false;
37
+ leftTermNode = (0, _brackets.stripBracketsFromTermNode)(leftTermNode); ///
38
+ rightTermNode = (0, _brackets.stripBracketsFromTermNode)(rightTermNode); ///
36
39
  if (!success) {
37
- const depth = Infinity, leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode, depth);
38
- if (leftTermNodeMatchesRightTermNode) {
39
- success = true;
40
+ const equivalences = context.getEquivalences(), leftEquivalence = (0, _equivalences.findEquivalenceByTermNode)(equivalences, leftTermNode), rightEquivalence = (0, _equivalences.findEquivalenceByTermNode)(equivalences, rightTermNode);
41
+ if (!success) {
42
+ if (leftEquivalence !== null && rightEquivalence !== null && leftEquivalence === rightEquivalence) {
43
+ success = true;
44
+ }
40
45
  }
41
- }
42
- if (!success) {
43
- const equivalences = context.getEquivalences(), termNodes = [
44
- leftTermNode,
45
- rightTermNode
46
- ], equivalence = (0, _equivalences.findEquivalenceByTermNodes)(equivalences, termNodes);
47
- if (equivalence !== null) {
48
- success = true;
46
+ if (!success) {
47
+ if (leftEquivalence !== null) {
48
+ success = leftEquivalence.someOtherTerm(leftTermNode, (otherTerm)=>{
49
+ const leftTerm = otherTerm, leftTermNode = leftTerm.getNode(), descended = descend(leftTermNode, rightTermNode, context);
50
+ if (descended) {
51
+ return true;
52
+ }
53
+ });
54
+ }
55
+ }
56
+ if (!success) {
57
+ if (rightEquivalence !== null) {
58
+ success = rightEquivalence.someOtherTerm(rightTermNode, (otherTerm)=>{
59
+ const rightTerm = otherTerm, rightTermNode = rightTerm.getNode(), descended = descend(leftTermNode, rightTermNode, context);
60
+ if (descended) {
61
+ return true;
62
+ }
63
+ });
64
+ }
49
65
  }
50
66
  }
51
67
  if (!success) {
52
68
  const depth = 1, leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode, depth);
53
69
  if (leftTermNodeMatchesRightTermNode) {
54
- const leftNonTerminalNode = leftTermNode, rightNonTerminalNode = rightTermNode, leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(), rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(), leftChildNodes = leftNonTerminalNodeChildNodes, rightChildNodes = rightNonTerminalNodeChildNodes, descended = equationalPass.descend(leftChildNodes, rightChildNodes, context);
70
+ const descended = descend(leftTermNode, rightTermNode, context);
55
71
  if (descended) {
56
72
  success = true;
57
73
  }
@@ -64,16 +80,34 @@ class EquationalPass extends _zip.default {
64
80
  }
65
81
  const equationalPass = new EquationalPass();
66
82
  function equateTerms(leftTerm, rightTerm, context) {
67
- let termsEquate;
83
+ let termsEquate = false;
84
+ const leftTermString = leftTerm.getString(), rightTermString = rightTerm.getString();
85
+ context.trace(`Equating the '${leftTermString}' and '${rightTermString}' terms...`);
68
86
  const leftTermNode = leftTerm.getNode(), rightTermNode = rightTerm.getNode(), generalNode = leftTermNode, specificNode = rightTermNode, success = equationalPass.run(generalNode, specificNode, context);
69
- termsEquate = success; ///
87
+ if (success) {
88
+ termsEquate = true;
89
+ }
90
+ if (termsEquate) {
91
+ context.debug(`...equated the '${leftTermString}' and '${rightTermString}' terms.`);
92
+ }
70
93
  return termsEquate;
71
94
  }
72
95
  function equateStatements(leftStatement, rightStatement, context) {
73
- let statementsEquate;
96
+ let statementsEquate = false;
97
+ const leftStatementString = leftStatement.getString(), rightStatementString = rightStatement.getString();
98
+ context.trace(`Equating the '${leftStatementString}' and '${rightStatementString}' statements...`);
74
99
  const leftStatementNode = leftStatement.getNode(), rightStatementNode = rightStatement.getNode(), generalNode = leftStatementNode, specificNode = rightStatementNode, success = equationalPass.run(generalNode, specificNode, context);
75
- statementsEquate = success; ///
100
+ if (success) {
101
+ statementsEquate = true;
102
+ }
103
+ if (statementsEquate) {
104
+ context.debug(`...equated the '${leftStatementString}' and '${rightStatementString}' statements.`);
105
+ }
76
106
  return statementsEquate;
77
107
  }
108
+ function descend(leftTermNode, rightTermNode, context) {
109
+ const leftNonTerminalNode = leftTermNode, rightNonTerminalNode = rightTermNode, leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(), rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(), leftChildNodes = leftNonTerminalNodeChildNodes, rightChildNodes = rightNonTerminalNodeChildNodes, descended = equationalPass.descend(leftChildNodes, rightChildNodes, context);
110
+ return descended;
111
+ }
78
112
 
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2VxdWF0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IFppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvemlwXCI7XG5cbmltcG9ydCB7IGZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm1cIik7XG5cbmNsYXNzIEVxdWF0aW9uYWxQYXNzIGV4dGVuZHMgWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksICAvLy9cbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LCAvLy9cbiAgICAgIHJ1bjogKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGRlcHRoID0gSW5maW5pdHksXG4gICAgICAgICAgICAgICAgbGVmdFRlcm1Ob2RlTWF0Y2hlc1JpZ2h0VGVybU5vZGUgPSBsZWZ0VGVybU5vZGUubWF0Y2gocmlnaHRUZXJtTm9kZSwgZGVwdGgpO1xuXG4gICAgICAgICAgaWYgKGxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgICAgICAgIHRlcm1Ob2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgIGxlZnRUZXJtTm9kZSxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0VGVybU5vZGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGVxdWl2YWxlbmNlID0gZmluZEVxdWl2YWxlbmNlQnlUZXJtTm9kZXMoZXF1aXZhbGVuY2VzLCB0ZXJtTm9kZXMpO1xuXG4gICAgICAgICAgaWYgKGVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBkZXB0aCA9IDEsXG4gICAgICAgICAgICAgICAgbGVmdFRlcm1Ob2RlTWF0Y2hlc1JpZ2h0VGVybU5vZGUgPSBsZWZ0VGVybU5vZGUubWF0Y2gocmlnaHRUZXJtTm9kZSwgZGVwdGgpO1xuXG4gICAgICAgICAgaWYgKGxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlID0gbGVmdFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlID0gcmlnaHRUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGxlZnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcmlnaHROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgbGVmdENoaWxkTm9kZXMgPSBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgICByaWdodENoaWxkTm9kZXMgPSByaWdodE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkID0gZXF1YXRpb25hbFBhc3MuZGVzY2VuZChsZWZ0Q2hpbGROb2RlcywgcmlnaHRDaGlsZE5vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKGRlc2NlbmRlZCkge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNvbnN0IGVxdWF0aW9uYWxQYXNzID0gbmV3IEVxdWF0aW9uYWxQYXNzKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhdGVUZXJtcyhsZWZ0VGVybSwgcmlnaHRUZXJtLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtc0VxdWF0ZTtcblxuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBsZWZ0VGVybS5nZXROb2RlKCksXG4gICAgICAgIHJpZ2h0VGVybU5vZGUgPSByaWdodFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGxlZnRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHNwZWNpZmljTm9kZSA9IHJpZ2h0VGVybU5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gZXF1YXRpb25hbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGNvbnRleHQpO1xuXG4gIHRlcm1zRXF1YXRlID0gc3VjY2VzczsgLy8vXG5cbiAgcmV0dXJuIHRlcm1zRXF1YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YXRlU3RhdGVtZW50cyhsZWZ0U3RhdGVtZW50LCByaWdodFN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50c0VxdWF0ZTtcblxuICBjb25zdCBsZWZ0U3RhdGVtZW50Tm9kZSA9IGxlZnRTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICByaWdodFN0YXRlbWVudE5vZGUgPSByaWdodFN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gbGVmdFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSByaWdodFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gZXF1YXRpb25hbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGNvbnRleHQpO1xuXG4gIHN0YXRlbWVudHNFcXVhdGUgPSBzdWNjZXNzOyAvLy9cblxuICByZXR1cm4gc3RhdGVtZW50c0VxdWF0ZTtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhdGVTdGF0ZW1lbnRzIiwiZXF1YXRlVGVybXMiLCJub2RlUXVlcnkiLCJxdWVyeVV0aWxpdGllcyIsInRlcm1Ob2RlUXVlcnkiLCJFcXVhdGlvbmFsUGFzcyIsIlppcFBhc3MiLCJtYXBzIiwiZ2VuZXJhbE5vZGVRdWVyeSIsInNwZWNpZmljTm9kZVF1ZXJ5IiwicnVuIiwibGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImNvbnRleHQiLCJzdWNjZXNzIiwiZGVwdGgiLCJJbmZpbml0eSIsImxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlIiwibWF0Y2giLCJlcXVpdmFsZW5jZXMiLCJnZXRFcXVpdmFsZW5jZXMiLCJ0ZXJtTm9kZXMiLCJlcXVpdmFsZW5jZSIsImZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGVzIiwibGVmdE5vblRlcm1pbmFsTm9kZSIsInJpZ2h0Tm9uVGVybWluYWxOb2RlIiwibGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwicmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwibGVmdENoaWxkTm9kZXMiLCJyaWdodENoaWxkTm9kZXMiLCJkZXNjZW5kZWQiLCJlcXVhdGlvbmFsUGFzcyIsImRlc2NlbmQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsInRlcm1zRXF1YXRlIiwiZ2V0Tm9kZSIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwibGVmdFN0YXRlbWVudCIsInJpZ2h0U3RhdGVtZW50Iiwic3RhdGVtZW50c0VxdWF0ZSIsImxlZnRTdGF0ZW1lbnROb2RlIiwicmlnaHRTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFtRmdCQTtlQUFBQTs7UUFkQUM7ZUFBQUE7Ozs0QkFuRWU7NERBRVg7OEJBRXVCOzs7Ozs7QUFFM0MsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBR0MsMEJBQWM7QUFFcEMsTUFBTUMsZ0JBQWdCRixVQUFVO0FBRWhDLE1BQU1HLHVCQUF1QkMsWUFBTztJQUNsQyxPQUFPQyxPQUFPO1FBQ1o7WUFDRUMsa0JBQWtCSjtZQUNsQkssbUJBQW1CTDtZQUNuQk0sS0FBSyxDQUFDQyxjQUFjQyxlQUFlQztnQkFDakMsSUFBSUMsVUFBVTtnQkFFZCxJQUFJLENBQUNBLFNBQVM7b0JBQ1osTUFBTUMsUUFBUUMsVUFDUkMsbUNBQW1DTixhQUFhTyxLQUFLLENBQUNOLGVBQWVHO29CQUUzRSxJQUFJRSxrQ0FBa0M7d0JBQ3BDSCxVQUFVO29CQUNaO2dCQUNGO2dCQUVBLElBQUksQ0FBQ0EsU0FBUztvQkFDWixNQUFNSyxlQUFlTixRQUFRTyxlQUFlLElBQ3RDQyxZQUFZO3dCQUNWVjt3QkFDQUM7cUJBQ0QsRUFDRFUsY0FBY0MsSUFBQUEsd0NBQTBCLEVBQUNKLGNBQWNFO29CQUU3RCxJQUFJQyxnQkFBZ0IsTUFBTTt3QkFDeEJSLFVBQVU7b0JBQ1o7Z0JBQ0Y7Z0JBRUEsSUFBSSxDQUFDQSxTQUFTO29CQUNaLE1BQU1DLFFBQVEsR0FDUkUsbUNBQW1DTixhQUFhTyxLQUFLLENBQUNOLGVBQWVHO29CQUUzRSxJQUFJRSxrQ0FBa0M7d0JBQ3BDLE1BQU1PLHNCQUFzQmIsY0FDdEJjLHVCQUF1QmIsZUFDdkJjLGdDQUFnQ0Ysb0JBQW9CRyxhQUFhLElBQ2pFQyxpQ0FBaUNILHFCQUFxQkUsYUFBYSxJQUNuRUUsaUJBQWlCSCwrQkFDakJJLGtCQUFrQkYsZ0NBQ2xCRyxZQUFZQyxlQUFlQyxPQUFPLENBQUNKLGdCQUFnQkMsaUJBQWlCakI7d0JBRTFFLElBQUlrQixXQUFXOzRCQUNiakIsVUFBVTt3QkFDWjtvQkFDRjtnQkFDRjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7S0FDRCxDQUFDO0FBQ0o7QUFFQSxNQUFNa0IsaUJBQWlCLElBQUkzQjtBQUVwQixTQUFTSixZQUFZaUMsUUFBUSxFQUFFQyxTQUFTLEVBQUV0QixPQUFPO0lBQ3RELElBQUl1QjtJQUVKLE1BQU16QixlQUFldUIsU0FBU0csT0FBTyxJQUMvQnpCLGdCQUFnQnVCLFVBQVVFLE9BQU8sSUFDakNDLGNBQWMzQixjQUNkNEIsZUFBZTNCLGVBQ2ZFLFVBQVVrQixlQUFldEIsR0FBRyxDQUFDNEIsYUFBYUMsY0FBYzFCO0lBRTlEdUIsY0FBY3RCLFNBQVMsR0FBRztJQUUxQixPQUFPc0I7QUFDVDtBQUVPLFNBQVNwQyxpQkFBaUJ3QyxhQUFhLEVBQUVDLGNBQWMsRUFBRTVCLE9BQU87SUFDckUsSUFBSTZCO0lBRUosTUFBTUMsb0JBQW9CSCxjQUFjSCxPQUFPLElBQ3pDTyxxQkFBcUJILGVBQWVKLE9BQU8sSUFDM0NDLGNBQWNLLG1CQUNkSixlQUFlSyxvQkFDZjlCLFVBQVVrQixlQUFldEIsR0FBRyxDQUFDNEIsYUFBYUMsY0FBYzFCO0lBRTlENkIsbUJBQW1CNUIsU0FBUyxHQUFHO0lBRS9CLE9BQU80QjtBQUNUIn0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2VxdWF0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IFppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvemlwXCI7XG5cbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2JyYWNrZXRzXCI7XG5pbXBvcnQgeyBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm1cIik7XG5cbmNsYXNzIEVxdWF0aW9uYWxQYXNzIGV4dGVuZHMgWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksICAvLy9cbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LCAvLy9cbiAgICAgIHJ1bjogKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGxlZnRUZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlKTsgLy8vXG4gICAgICAgIHJpZ2h0VGVybU5vZGUgPSBzdHJpcEJyYWNrZXRzRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUpOyAvLy9cblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgICAgICAgIGxlZnRFcXVpdmFsZW5jZSA9IGZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGUoZXF1aXZhbGVuY2VzLCBsZWZ0VGVybU5vZGUpLFxuICAgICAgICAgICAgICAgIHJpZ2h0RXF1aXZhbGVuY2UgPSBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlKGVxdWl2YWxlbmNlcywgcmlnaHRUZXJtTm9kZSk7XG5cbiAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmICgobGVmdEVxdWl2YWxlbmNlICE9PSBudWxsKSAmJiAocmlnaHRFcXVpdmFsZW5jZSAhPT0gbnVsbCkgJiYgKGxlZnRFcXVpdmFsZW5jZSA9PT0gcmlnaHRFcXVpdmFsZW5jZSkpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAobGVmdEVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSBsZWZ0RXF1aXZhbGVuY2Uuc29tZU90aGVyVGVybShsZWZ0VGVybU5vZGUsIChvdGhlclRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0VGVybSA9IG90aGVyVGVybSwgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRlZCA9IGRlc2NlbmQobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAocmlnaHRFcXVpdmFsZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gcmlnaHRFcXVpdmFsZW5jZS5zb21lT3RoZXJUZXJtKHJpZ2h0VGVybU5vZGUsIChvdGhlclRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodFRlcm0gPSBvdGhlclRlcm0sIC8vL1xuICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0VGVybU5vZGUgPSByaWdodFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRlZCA9IGRlc2NlbmQobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgZGVwdGggPSAxLFxuICAgICAgICAgICAgICAgIGxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlID0gbGVmdFRlcm1Ob2RlLm1hdGNoKHJpZ2h0VGVybU5vZGUsIGRlcHRoKTtcblxuICAgICAgICAgIGlmIChsZWZ0VGVybU5vZGVNYXRjaGVzUmlnaHRUZXJtTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgZGVzY2VuZGVkID0gZGVzY2VuZChsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoZGVzY2VuZGVkKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY29uc3QgZXF1YXRpb25hbFBhc3MgPSBuZXcgRXF1YXRpb25hbFBhc3MoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWF0ZVRlcm1zKGxlZnRUZXJtLCByaWdodFRlcm0sIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1zRXF1YXRlID0gZmFsc2U7XG5cbiAgY29uc3QgbGVmdFRlcm1TdHJpbmcgPSBsZWZ0VGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmlnaHRUZXJtU3RyaW5nID0gcmlnaHRUZXJtLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYEVxdWF0aW5nIHRoZSAnJHtsZWZ0VGVybVN0cmluZ30nIGFuZCAnJHtyaWdodFRlcm1TdHJpbmd9JyB0ZXJtcy4uLmApO1xuXG4gIGNvbnN0IGxlZnRUZXJtTm9kZSA9IGxlZnRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gbGVmdFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gcmlnaHRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHN1Y2Nlc3MgPSBlcXVhdGlvbmFsUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgY29udGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICB0ZXJtc0VxdWF0ZSA9IHRydWU7XG4gIH1cblxuICBpZiAodGVybXNFcXVhdGUpIHtcbiAgICBjb250ZXh0LmRlYnVnKGAuLi5lcXVhdGVkIHRoZSAnJHtsZWZ0VGVybVN0cmluZ30nIGFuZCAnJHtyaWdodFRlcm1TdHJpbmd9JyB0ZXJtcy5gKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtc0VxdWF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWF0ZVN0YXRlbWVudHMobGVmdFN0YXRlbWVudCwgcmlnaHRTdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudHNFcXVhdGUgPSBmYWxzZTtcblxuICBjb25zdCBsZWZ0U3RhdGVtZW50U3RyaW5nID0gbGVmdFN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmlnaHRTdGF0ZW1lbnRTdHJpbmcgPSByaWdodFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBFcXVhdGluZyB0aGUgJyR7bGVmdFN0YXRlbWVudFN0cmluZ30nIGFuZCAnJHtyaWdodFN0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudHMuLi5gKTtcblxuICBjb25zdCBsZWZ0U3RhdGVtZW50Tm9kZSA9IGxlZnRTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICByaWdodFN0YXRlbWVudE5vZGUgPSByaWdodFN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gbGVmdFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSByaWdodFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gZXF1YXRpb25hbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGNvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50c0VxdWF0ZSA9IHRydWU7XG4gIH1cblxuICBpZiAoc3RhdGVtZW50c0VxdWF0ZSkge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLmVxdWF0ZWQgdGhlICcke2xlZnRTdGF0ZW1lbnRTdHJpbmd9JyBhbmQgJyR7cmlnaHRTdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnRzLmApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudHNFcXVhdGU7XG59XG5cbmZ1bmN0aW9uIGRlc2NlbmQobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSBsZWZ0VGVybU5vZGUsIC8vL1xuICAgICAgICByaWdodE5vblRlcm1pbmFsTm9kZSA9IHJpZ2h0VGVybU5vZGUsIC8vL1xuICAgICAgICBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGxlZnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICByaWdodE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSByaWdodE5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGxlZnRDaGlsZE5vZGVzID0gbGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICByaWdodENoaWxkTm9kZXMgPSByaWdodE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICBkZXNjZW5kZWQgPSBlcXVhdGlvbmFsUGFzcy5kZXNjZW5kKGxlZnRDaGlsZE5vZGVzLCByaWdodENoaWxkTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBkZXNjZW5kZWQ7XG59XG4iXSwibmFtZXMiOlsiZXF1YXRlU3RhdGVtZW50cyIsImVxdWF0ZVRlcm1zIiwibm9kZVF1ZXJ5IiwicXVlcnlVdGlsaXRpZXMiLCJ0ZXJtTm9kZVF1ZXJ5IiwiRXF1YXRpb25hbFBhc3MiLCJaaXBQYXNzIiwibWFwcyIsImdlbmVyYWxOb2RlUXVlcnkiLCJzcGVjaWZpY05vZGVRdWVyeSIsInJ1biIsImxlZnRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJjb250ZXh0Iiwic3VjY2VzcyIsInN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUiLCJlcXVpdmFsZW5jZXMiLCJnZXRFcXVpdmFsZW5jZXMiLCJsZWZ0RXF1aXZhbGVuY2UiLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlIiwicmlnaHRFcXVpdmFsZW5jZSIsInNvbWVPdGhlclRlcm0iLCJvdGhlclRlcm0iLCJsZWZ0VGVybSIsImdldE5vZGUiLCJkZXNjZW5kZWQiLCJkZXNjZW5kIiwicmlnaHRUZXJtIiwiZGVwdGgiLCJsZWZ0VGVybU5vZGVNYXRjaGVzUmlnaHRUZXJtTm9kZSIsIm1hdGNoIiwiZXF1YXRpb25hbFBhc3MiLCJ0ZXJtc0VxdWF0ZSIsImxlZnRUZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwicmlnaHRUZXJtU3RyaW5nIiwidHJhY2UiLCJnZW5lcmFsTm9kZSIsInNwZWNpZmljTm9kZSIsImRlYnVnIiwibGVmdFN0YXRlbWVudCIsInJpZ2h0U3RhdGVtZW50Iiwic3RhdGVtZW50c0VxdWF0ZSIsImxlZnRTdGF0ZW1lbnRTdHJpbmciLCJyaWdodFN0YXRlbWVudFN0cmluZyIsImxlZnRTdGF0ZW1lbnROb2RlIiwicmlnaHRTdGF0ZW1lbnROb2RlIiwibGVmdE5vblRlcm1pbmFsTm9kZSIsInJpZ2h0Tm9uVGVybWluYWxOb2RlIiwibGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwicmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwibGVmdENoaWxkTm9kZXMiLCJyaWdodENoaWxkTm9kZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThHZ0JBO2VBQUFBOztRQXpCQUM7ZUFBQUE7Ozs0QkFuRmU7NERBRVg7MEJBRXNCOzhCQUNBOzs7Ozs7QUFFMUMsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBR0MsMEJBQWM7QUFFcEMsTUFBTUMsZ0JBQWdCRixVQUFVO0FBRWhDLE1BQU1HLHVCQUF1QkMsWUFBTztJQUNsQyxPQUFPQyxPQUFPO1FBQ1o7WUFDRUMsa0JBQWtCSjtZQUNsQkssbUJBQW1CTDtZQUNuQk0sS0FBSyxDQUFDQyxjQUFjQyxlQUFlQztnQkFDakMsSUFBSUMsVUFBVTtnQkFFZEgsZUFBZUksSUFBQUEsbUNBQXlCLEVBQUNKLGVBQWUsR0FBRztnQkFDM0RDLGdCQUFnQkcsSUFBQUEsbUNBQXlCLEVBQUNILGdCQUFnQixHQUFHO2dCQUU3RCxJQUFJLENBQUNFLFNBQVM7b0JBQ1osTUFBTUUsZUFBZUgsUUFBUUksZUFBZSxJQUN0Q0Msa0JBQWtCQyxJQUFBQSx1Q0FBeUIsRUFBQ0gsY0FBY0wsZUFDMURTLG1CQUFtQkQsSUFBQUEsdUNBQXlCLEVBQUNILGNBQWNKO29CQUVqRSxJQUFJLENBQUNFLFNBQVM7d0JBQ1os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
@@ -26,32 +26,36 @@ const _element = require("../utilities/element");
26
26
  const _constants = require("../constants");
27
27
  const _instance = require("../utilities/instance");
28
28
  function stripBracketsFromTerm(term, context) {
29
- const termNode = term.getNode(), bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
30
- if (bracketedTermChildNode !== null) {
31
- const termNode = bracketedTermChildNode; ///
32
- term = (0, _element.termFromTermNode)(termNode, context);
29
+ let termNode = term.getNode(), bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
30
+ while(bracketedTermChildNode !== null){
31
+ termNode = bracketedTermChildNode; ///
32
+ bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
33
33
  }
34
+ term = (0, _element.termFromTermNode)(termNode, context);
34
35
  return term;
35
36
  }
36
37
  function stripBracketsFromTermNode(termNode) {
37
- const bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
38
- if (bracketedTermChildNode !== null) {
38
+ let bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
39
+ while(bracketedTermChildNode !== null){
39
40
  termNode = bracketedTermChildNode; ///
41
+ bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
40
42
  }
41
43
  return termNode;
42
44
  }
43
45
  function stripBracketsFromStatement(statement, context) {
44
- const statementNode = statement.getNode(), bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
45
- if (bracketedStatementChildNode !== null) {
46
- const statementNode = bracketedStatementChildNode; ///
47
- statement = (0, _element.statementFromStatementNode)(statementNode, context);
46
+ let statementNode = statement.getNode(), bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
47
+ while(bracketedStatementChildNode !== null){
48
+ statementNode = bracketedStatementChildNode; ///
49
+ bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
48
50
  }
51
+ statement = (0, _element.statementFromStatementNode)(statementNode, context);
49
52
  return statement;
50
53
  }
51
54
  function stripBracketsFromStatementNode(statementNode) {
52
- const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
53
- if (bracketedStatementChildNode !== null) {
55
+ let bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
56
+ while(bracketedStatementChildNode !== null){
54
57
  statementNode = bracketedStatementChildNode; ///
58
+ bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
55
59
  }
56
60
  return statementNode;
57
61
  }
@@ -74,4 +78,4 @@ function bracketedStatementChildNodeFromStatementNode(statementNode) {
74
78
  return bracketedStatementChildNode;
75
79
  }
76
80
 
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYnJhY2tldHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHRlcm1Gcm9tVGVybU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBCUkFDS0VURURfVEVSTV9ERVBUSCwgQlJBQ0tFVEVEX1NUQVRFTUVOVF9ERVBUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcsIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvaW5zdGFuY2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGJyYWNrZXRlZFRlcm1DaGlsZE5vZGUgPSBicmFja2V0ZWRUZXJtQ2hpbGROb2RlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICBpZiAoYnJhY2tldGVkVGVybUNoaWxkTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gYnJhY2tldGVkVGVybUNoaWxkTm9kZTsgIC8vL1xuXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEJyYWNrZXRzRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gIGNvbnN0IGJyYWNrZXRlZFRlcm1DaGlsZE5vZGUgPSBicmFja2V0ZWRUZXJtQ2hpbGROb2RlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICBpZiAoYnJhY2tldGVkVGVybUNoaWxkTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1Ob2RlID0gYnJhY2tldGVkVGVybUNoaWxkTm9kZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIHRlcm1Ob2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGUgPSBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZTsgIC8vL1xuXG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgY29uc3QgYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlID0gYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgaWYgKGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnROb2RlO1xufVxuXG5mdW5jdGlvbiBicmFja2V0ZWRUZXJtQ2hpbGROb2RlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gIGxldCBicmFja2V0ZWRUZXJtQ2hpbGROb2RlID0gbnVsbDtcblxuICBjb25zdCBkZXB0aCA9IEJSQUNLRVRFRF9URVJNX0RFUFRILFxuICAgICAgICBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtID0gYnJhY2tldGVkQ29uc3RydWN0b3IuZ2V0VGVybSgpLFxuICAgICAgICBicmFja2V0ZWRDb25zdHJ1Y3RvclRlcm1Ob2RlID0gYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgdGVybU5vZGVNYXRjaEJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSA9IHRlcm1Ob2RlLm1hdGNoKGJyYWNrZXRlZENvbnN0cnVjdG9yVGVybU5vZGUsIGRlcHRoKTtcblxuICBpZiAodGVybU5vZGVNYXRjaEJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSkge1xuICAgIGNvbnN0IHNpbmd1bGFyVGVybU5vZGUgPSB0ZXJtTm9kZS5nZXRTaW5ndWxhclRlcm1Ob2RlKCk7XG5cbiAgICBicmFja2V0ZWRUZXJtQ2hpbGROb2RlID0gc2luZ3VsYXJUZXJtTm9kZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGJyYWNrZXRlZFRlcm1DaGlsZE5vZGU7XG59XG5cbmZ1bmN0aW9uIGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgbGV0IGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZSA9IG51bGw7XG5cbiAgY29uc3QgZGVwdGggPSBCUkFDS0VURURfU1RBVEVNRU5UX0RFUFRILFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnQgPSBicmFja2V0ZWRDb21iaW5hdG9yLmdldFN0YXRlbWVudCgpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50bk5vZGUgPSBicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50Tm9kZU1hdGNoQnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLm1hdGNoKGJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnRuTm9kZSwgZGVwdGgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hCcmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHNpbmd1bGFyU3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2luZ3VsYXJTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGUgPSBzaW5ndWxhclN0YXRlbWVudE5vZGU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGU7XG59XG4iXSwibmFtZXMiOlsic3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQiLCJzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudE5vZGUiLCJzdHJpcEJyYWNrZXRzRnJvbVRlcm0iLCJzdHJpcEJyYWNrZXRzRnJvbVRlcm1Ob2RlIiwidGVybSIsImNvbnRleHQiLCJ0ZXJtTm9kZSIsImdldE5vZGUiLCJicmFja2V0ZWRUZXJtQ2hpbGROb2RlIiwiYnJhY2tldGVkVGVybUNoaWxkTm9kZUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybU5vZGUiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlIiwiYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlRnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImRlcHRoIiwiQlJBQ0tFVEVEX1RFUk1fREVQVEgiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmciLCJicmFja2V0ZWRDb25zdHJ1Y3RvclRlcm0iLCJnZXRUZXJtIiwiYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtTm9kZSIsInRlcm1Ob2RlTWF0Y2hCcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUiLCJtYXRjaCIsInNpbmd1bGFyVGVybU5vZGUiLCJnZXRTaW5ndWxhclRlcm1Ob2RlIiwiQlJBQ0tFVEVEX1NUQVRFTUVOVF9ERVBUSCIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmciLCJicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudG5Ob2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoQnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudE5vZGUiLCJzaW5ndWxhclN0YXRlbWVudE5vZGUiLCJnZXRTaW5ndWxhclN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZCZ0JBO2VBQUFBOztRQWFBQztlQUFBQTs7UUFwQ0FDO2VBQUFBOztRQWFBQztlQUFBQTs7O3lCQWpCNkM7MkJBQ0c7MEJBQ2dCO0FBRXpFLFNBQVNELHNCQUFzQkUsSUFBSSxFQUFFQyxPQUFPO0lBQ2pELE1BQU1DLFdBQVdGLEtBQUtHLE9BQU8sSUFDdkJDLHlCQUF5QkMsbUNBQW1DSDtJQUVsRSxJQUFJRSwyQkFBMkIsTUFBTTtRQUNuQyxNQUFNRixXQUFXRSx3QkFBeUIsR0FBRztRQUU3Q0osT0FBT00sSUFBQUEseUJBQWdCLEVBQUNKLFVBQVVEO0lBQ3BDO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNELDBCQUEwQkcsUUFBUTtJQUNoRCxNQUFNRSx5QkFBeUJDLG1DQUFtQ0g7SUFFbEUsSUFBSUUsMkJBQTJCLE1BQU07UUFDbkNGLFdBQVdFLHdCQUF5QixHQUFHO0lBQ3pDO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVNOLDJCQUEyQlcsU0FBUyxFQUFFTixPQUFPO0lBQzNELE1BQU1PLGdCQUFnQkQsVUFBVUosT0FBTyxJQUNqQ00sOEJBQThCQyw2Q0FBNkNGO0lBRWpGLElBQUlDLGdDQUFnQyxNQUFNO1FBQ3hDLE1BQU1ELGdCQUFnQkMsNkJBQThCLEdBQUc7UUFFdkRGLFlBQVlJLElBQUFBLG1DQUEwQixFQUFDSCxlQUFlUDtJQUN4RDtJQUVBLE9BQU9NO0FBQ1Q7QUFFTyxTQUFTViwrQkFBK0JXLGFBQWE7SUFDMUQsTUFBTUMsOEJBQThCQyw2Q0FBNkNGO0lBRWpGLElBQUlDLGdDQUFnQyxNQUFNO1FBQ3hDRCxnQkFBZ0JDLDZCQUE4QixHQUFHO0lBQ25EO0lBRUEsT0FBT0Q7QUFDVDtBQUVBLFNBQVNILG1DQUFtQ0gsUUFBUTtJQUNsRCxJQUFJRSx5QkFBeUI7SUFFN0IsTUFBTVEsUUFBUUMsK0JBQW9CLEVBQzVCQyx1QkFBdUJDLElBQUFBLHlDQUErQixLQUN0REMsMkJBQTJCRixxQkFBcUJHLE9BQU8sSUFDdkRDLCtCQUErQkYseUJBQXlCYixPQUFPLElBQy9EZ0Isd0NBQXdDakIsU0FBU2tCLEtBQUssQ0FBQ0YsOEJBQThCTjtJQUUzRixJQUFJTyx1Q0FBdUM7UUFDekMsTUFBTUUsbUJBQW1CbkIsU0FBU29CLG1CQUFtQjtRQUVyRGxCLHlCQUF5QmlCLGtCQUFtQixHQUFHO0lBQ2pEO0lBRUEsT0FBT2pCO0FBQ1Q7QUFFQSxTQUFTTSw2Q0FBNkNGLGFBQWE7SUFDakUsSUFBSUMsOEJBQThCO0lBRWxDLE1BQU1HLFFBQVFXLG9DQUF5QixFQUNqQ0Msc0JBQXNCQyxJQUFBQSx3Q0FBOEIsS0FDcERDLCtCQUErQkYsb0JBQW9CRyxZQUFZLElBQy9EQyxvQ0FBb0NGLDZCQUE2QnZCLE9BQU8sSUFDeEUwQixxREFBcURyQixjQUFjWSxLQUFLLENBQUNRLG1DQUFtQ2hCO0lBRWxILElBQUlpQixvREFBb0Q7UUFDdEQsTUFBTUMsd0JBQXdCdEIsY0FBY3VCLHdCQUF3QjtRQUVwRXRCLDhCQUE4QnFCLHVCQUF3QixHQUFHO0lBQzNEO0lBRUEsT0FBT3JCO0FBQ1QifQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYnJhY2tldHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHRlcm1Gcm9tVGVybU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBCUkFDS0VURURfVEVSTV9ERVBUSCwgQlJBQ0tFVEVEX1NUQVRFTUVOVF9ERVBUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcsIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvaW5zdGFuY2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgYnJhY2tldGVkVGVybUNoaWxkTm9kZSA9IGJyYWNrZXRlZFRlcm1DaGlsZE5vZGVGcm9tVGVybU5vZGUodGVybU5vZGUpO1xuXG4gIHdoaWxlIChicmFja2V0ZWRUZXJtQ2hpbGROb2RlICE9PSBudWxsKSB7XG4gICAgdGVybU5vZGUgPSBicmFja2V0ZWRUZXJtQ2hpbGROb2RlOyAgLy8vXG5cbiAgICBicmFja2V0ZWRUZXJtQ2hpbGROb2RlID0gYnJhY2tldGVkVGVybUNoaWxkTm9kZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSk7XG4gIH1cblxuICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEJyYWNrZXRzRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gIGxldCBicmFja2V0ZWRUZXJtQ2hpbGROb2RlID0gYnJhY2tldGVkVGVybUNoaWxkTm9kZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgd2hpbGUgKGJyYWNrZXRlZFRlcm1DaGlsZE5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtTm9kZSA9IGJyYWNrZXRlZFRlcm1DaGlsZE5vZGU7ICAvLy9cblxuICAgIGJyYWNrZXRlZFRlcm1DaGlsZE5vZGUgPSBicmFja2V0ZWRUZXJtQ2hpbGROb2RlRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlID0gYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgd2hpbGUgKGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudE5vZGUgPSBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGU7ICAvLy9cblxuICAgIGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZSA9IGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuICB9XG5cbiAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gIGxldCBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGUgPSBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICB3aGlsZSAoYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50Tm9kZSA9IGJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZTsgIC8vL1xuXG4gICAgYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlID0gYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50Tm9kZTtcbn1cblxuZnVuY3Rpb24gYnJhY2tldGVkVGVybUNoaWxkTm9kZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSkge1xuICBsZXQgYnJhY2tldGVkVGVybUNoaWxkTm9kZSA9IG51bGw7XG5cbiAgY29uc3QgZGVwdGggPSBCUkFDS0VURURfVEVSTV9ERVBUSCxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nKCksXG4gICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yVGVybSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtTm9kZSA9IGJyYWNrZXRlZENvbnN0cnVjdG9yVGVybS5nZXROb2RlKCksXG4gICAgICAgIHRlcm1Ob2RlTWF0Y2hCcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUgPSB0ZXJtTm9kZS5tYXRjaChicmFja2V0ZWRDb25zdHJ1Y3RvclRlcm1Ob2RlLCBkZXB0aCk7XG5cbiAgaWYgKHRlcm1Ob2RlTWF0Y2hCcmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUpIHtcbiAgICBjb25zdCBzaW5ndWxhclRlcm1Ob2RlID0gdGVybU5vZGUuZ2V0U2luZ3VsYXJUZXJtTm9kZSgpO1xuXG4gICAgYnJhY2tldGVkVGVybUNoaWxkTm9kZSA9IHNpbmd1bGFyVGVybU5vZGU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWRUZXJtQ2hpbGROb2RlO1xufVxuXG5mdW5jdGlvbiBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gIGxldCBicmFja2V0ZWRTdGF0ZW1lbnRDaGlsZE5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IGRlcHRoID0gQlJBQ0tFVEVEX1NUQVRFTUVOVF9ERVBUSCxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpLFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50ID0gYnJhY2tldGVkQ29tYmluYXRvci5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudG5Ob2RlID0gYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudE5vZGVNYXRjaEJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Tm9kZS5tYXRjaChicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50bk5vZGUsIGRlcHRoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoQnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzaW5ndWxhclN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpbmd1bGFyU3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlID0gc2luZ3VsYXJTdGF0ZW1lbnROb2RlOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkU3RhdGVtZW50Q2hpbGROb2RlO1xufVxuIl0sIm5hbWVzIjpbInN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Iiwic3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnROb2RlIiwic3RyaXBCcmFja2V0c0Zyb21UZXJtIiwic3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSIsInRlcm0iLCJjb250ZXh0IiwidGVybU5vZGUiLCJnZXROb2RlIiwiYnJhY2tldGVkVGVybUNoaWxkTm9kZSIsImJyYWNrZXRlZFRlcm1DaGlsZE5vZGVGcm9tVGVybU5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZSIsImJyYWNrZXRlZFN0YXRlbWVudENoaWxkTm9kZUZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJkZXB0aCIsIkJSQUNLRVRFRF9URVJNX0RFUFRIIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwiYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtIiwiZ2V0VGVybSIsImJyYWNrZXRlZENvbnN0cnVjdG9yVGVybU5vZGUiLCJ0ZXJtTm9kZU1hdGNoQnJhY2tldGVkQ29uc3RydWN0b3JOb2RlIiwibWF0Y2giLCJzaW5ndWxhclRlcm1Ob2RlIiwiZ2V0U2luZ3VsYXJUZXJtTm9kZSIsIkJSQUNLRVRFRF9TVEFURU1FTlRfREVQVEgiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwiYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnRuTm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaEJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnROb2RlIiwic2luZ3VsYXJTdGF0ZW1lbnROb2RlIiwiZ2V0U2luZ3VsYXJTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpQ2dCQTtlQUFBQTs7UUFlQUM7ZUFBQUE7O1FBMUNBQztlQUFBQTs7UUFlQUM7ZUFBQUE7Ozt5QkFuQjZDOzJCQUNHOzBCQUNnQjtBQUV6RSxTQUFTRCxzQkFBc0JFLElBQUksRUFBRUMsT0FBTztJQUNqRCxJQUFJQyxXQUFXRixLQUFLRyxPQUFPLElBQ3ZCQyx5QkFBeUJDLG1DQUFtQ0g7SUFFaEUsTUFBT0UsMkJBQTJCLEtBQU07UUFDdENGLFdBQVdFLHdCQUF5QixHQUFHO1FBRXZDQSx5QkFBeUJDLG1DQUFtQ0g7SUFDOUQ7SUFFQUYsT0FBT00sSUFBQUEseUJBQWdCLEVBQUNKLFVBQVVEO0lBRWxDLE9BQU9EO0FBQ1Q7QUFFTyxTQUFTRCwwQkFBMEJHLFFBQVE7SUFDaEQsSUFBSUUseUJBQXlCQyxtQ0FBbUNIO0lBRWhFLE1BQU9FLDJCQUEyQixLQUFNO1FBQ3RDRixXQUFXRSx3QkFBeUIsR0FBRztRQUV2Q0EseUJBQXlCQyxtQ0FBbUNIO0lBQzlEO0lBRUEsT0FBT0E7QUFDVDtBQUVPLFNBQVNOLDJCQUEyQlcsU0FBUyxFQUFFTixPQUFPO0lBQzNELElBQUlPLGdCQUFnQkQsVUFBVUosT0FBTyxJQUNuQ00sOEJBQThCQyw2Q0FBNkNGO0lBRTdFLE1BQU9DLGdDQUFnQyxLQUFNO1FBQzNDRCxnQkFBZ0JDLDZCQUE4QixHQUFHO1FBRWpEQSw4QkFBOEJDLDZDQUE2Q0Y7SUFDN0U7SUFFQUQsWUFBWUksSUFBQUEsbUNBQTBCLEVBQUNILGVBQWVQO0lBRXRELE9BQU9NO0FBQ1Q7QUFFTyxTQUFTViwrQkFBK0JXLGFBQWE7SUFDMUQsSUFBSUMsOEJBQThCQyw2Q0FBNkNGO0lBRS9FLE1BQU9DLGdDQUFnQyxLQUFNO1FBQzNDRCxnQkFBZ0JDLDZCQUE4QixHQUFHO1FBRWpEQSw4QkFBOEJDLDZDQUE2Q0Y7SUFDN0U7SUFFQSxPQUFPQTtBQUNUO0FBRUEsU0FBU0gsbUNBQW1DSCxRQUFRO0lBQ2xELElBQUlFLHlCQUF5QjtJQUU3QixNQUFNUSxRQUFRQywrQkFBb0IsRUFDNUJDLHVCQUF1QkMsSUFBQUEseUNBQStCLEtBQ3REQywyQkFBMkJGLHFCQUFxQkcsT0FBTyxJQUN2REMsK0JBQStCRix5QkFBeUJiLE9BQU8sSUFDL0RnQix3Q0FBd0NqQixTQUFTa0IsS0FBSyxDQUFDRiw4QkFBOEJOO0lBRTNGLElBQUlPLHVDQUF1QztRQUN6QyxNQUFNRSxtQkFBbUJuQixTQUFTb0IsbUJBQW1CO1FBRXJEbEIseUJBQXlCaUIsa0JBQW1CLEdBQUc7SUFDakQ7SUFFQSxPQUFPakI7QUFDVDtBQUVBLFNBQVNNLDZDQUE2Q0YsYUFBYTtJQUNqRSxJQUFJQyw4QkFBOEI7SUFFbEMsTUFBTUcsUUFBUVcsb0NBQXlCLEVBQ2pDQyxzQkFBc0JDLElBQUFBLHdDQUE4QixLQUNwREMsK0JBQStCRixvQkFBb0JHLFlBQVksSUFDL0RDLG9DQUFvQ0YsNkJBQTZCdkIsT0FBTyxJQUN4RTBCLHFEQUFxRHJCLGNBQWNZLEtBQUssQ0FBQ1EsbUNBQW1DaEI7SUFFbEgsSUFBSWlCLG9EQUFvRDtRQUN0RCxNQUFNQyx3QkFBd0J0QixjQUFjdUIsd0JBQXdCO1FBRXBFdEIsOEJBQThCcUIsdUJBQXdCLEdBQUc7SUFDM0Q7SUFFQSxPQUFPckI7QUFDVCJ9
@@ -12,8 +12,8 @@ _export(exports, {
12
12
  get equivalencesFromEquality () {
13
13
  return equivalencesFromEquality;
14
14
  },
15
- get findEquivalenceByTermNodes () {
16
- return findEquivalenceByTermNodes;
15
+ get findEquivalenceByTermNode () {
16
+ return findEquivalenceByTermNode;
17
17
  },
18
18
  get mergeEquivalences () {
19
19
  return mergeEquivalences;
@@ -46,10 +46,10 @@ function equivalencesFromEquality(equality, context) {
46
46
  ];
47
47
  return equivalences;
48
48
  }
49
- function findEquivalenceByTermNodes(equivalences, termNodes) {
49
+ function findEquivalenceByTermNode(equivalences, termNode) {
50
50
  const equivalence = equivalences.find((equivalence)=>{
51
- const termNodeMatches = equivalence.matchTermNodes(termNodes);
52
- if (termNodeMatches) {
51
+ const termEquates = equivalence.matchTermNode(termNode);
52
+ if (termEquates) {
53
53
  return true;
54
54
  }
55
55
  }) || null;
@@ -131,4 +131,4 @@ function groundedTermsFromGroundedEquivalencesAndDefinedVariables(groundedEquiva
131
131
  });
132
132
  }
133
133
 
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZXF1aXZhbGVuY2VzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcblxuY29uc3QgeyBwdXNoLCBzZXBhcmF0ZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZXNCLCBjb250ZXh0KSB7XG4gIGVxdWl2YWxlbmNlc0EgPSBbICAvLy9cbiAgICAuLi5lcXVpdmFsZW5jZXNBXG4gIF07XG5cbiAgZXF1aXZhbGVuY2VzQi5mb3JFYWNoKChlcXVpdmFsZW5jZUIpID0+IHtcbiAgICBlcXVpdmFsZW5jZXNBID0gbWVyZ2VFcXVpdmFsZW5jZShlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZUIsIGNvbnRleHQpO1xuICB9KTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2VzQTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWl2YWxlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZWF1bGl2YWxlbmNlID0gRXF1aXZhbGVuY2UuZnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VzID0gW1xuICAgICAgICAgIGVhdWxpdmFsZW5jZVxuICAgICAgICBdO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlcyhlcXVpdmFsZW5jZXMsIHRlcm1Ob2Rlcykge1xuICBjb25zdCBlcXVpdmFsZW5jZSA9IGVxdWl2YWxlbmNlcy5maW5kKChlcXVpdmFsZW5jZSkgPT4ge1xuICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IGVxdWl2YWxlbmNlLm1hdGNoVGVybU5vZGVzKHRlcm1Ob2Rlcyk7XG5cbiAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pIHx8IG51bGw7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgbGV0IGdyb3VuZGVkRXF1aXZhbGVuY2VzLFxuICAgICAgcmVtYWluaW5nRXF1aXZhbGVuY2VzLFxuICAgICAgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsXG4gICAgICBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXM7XG5cbiAgcmVtYWluaW5nRXF1aXZhbGVuY2VzID0gW107XG5cbiAgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMgPSBbXTtcblxuICBzZXBhcmF0ZUluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgcmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcywgY29udGV4dCk7XG5cbiAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGggPSBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcy5sZW5ndGg7XG5cbiAgaWYgKGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgIGdyb3VuZGVkRXF1aXZhbGVuY2VzID0gaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXM7IC8vL1xuXG4gICAgbGV0IGltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlc0xlbmd0aCA9IDE7XG5cbiAgICB3aGlsZSAoaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGRlZmluZWRWYXJpYWJsZXNMZW5ndGggPSAwLFxuICAgICAgICAgICAgcHJldmlvdXNEZWZpbmVkVmFyaWFibGVzTGVuZ3RoID0gLTE7XG5cbiAgICAgIHdoaWxlIChkZWZpbmVkVmFyaWFibGVzTGVuZ3RoID4gcHJldmlvdXNEZWZpbmVkVmFyaWFibGVzTGVuZ3RoKSB7XG4gICAgICAgIHByZXZpb3VzRGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IGRlZmluZWRWYXJpYWJsZXNMZW5ndGg7ICAvLy9cblxuICAgICAgICBncm91bmRlZFRlcm1zRnJvbUdyb3VuZGVkRXF1aXZhbGVuY2VzQW5kRGVmaW5lZFZhcmlhYmxlcyhncm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCk7XG5cbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlc0Zyb21Hcm91bmRlZFRlcm1zKGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIGRlZmluZWRWYXJpYWJsZXNMZW5ndGggPSBkZWZpbmVkVmFyaWFibGVzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgZXF1aXZhbGVuY2VzID0gcmVtYWluaW5nRXF1aXZhbGVuY2VzOyAvLy9cblxuICAgICAgcmVtYWluaW5nRXF1aXZhbGVuY2VzID0gW107XG5cbiAgICAgIGltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyA9IFtdO1xuXG4gICAgICBzZXBhcmF0ZUltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXMsIHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgcHVzaChncm91bmRlZEVxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzKTtcblxuICAgICAgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID0gaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLmxlbmd0aDsgIC8vL1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZUVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlc0EsIGVxdWl2YWxlbmNlQiwgY29udGV4dCkge1xuICBjb25zdCBtZXJnZWRFcXVpdmFsZW5jZXMgPSBbXTtcblxuICBlcXVpdmFsZW5jZXNBLmZvckVhY2goKGVxdWl2YWxlbmNlQSkgPT4ge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlQkRpc2pvaW50RnJvbUVxdWl2YWxlbmNlQSA9IGVxdWl2YWxlbmNlQi5pc0Rpc2pvaW50RnJvbShlcXVpdmFsZW5jZUEpO1xuXG4gICAgaWYgKGVxdWl2YWxlbmNlQkRpc2pvaW50RnJvbUVxdWl2YWxlbmNlQSkge1xuICAgICAgY29uc3QgbWVyZ2VkRXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZUE7ICAvLy9cblxuICAgICAgbWVyZ2VkRXF1aXZhbGVuY2VzLnB1c2gobWVyZ2VkRXF1aXZhbGVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcXVpdmFsZW5jZUIgPSBlcXVpdmFsZW5jZUIubWVyZ2VkV2l0aChlcXVpdmFsZW5jZUEsIGNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbWVyZ2VkRXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZUI7ICAvLy9cblxuICBtZXJnZWRFcXVpdmFsZW5jZXMucHVzaChtZXJnZWRFcXVpdmFsZW5jZSk7XG5cbiAgZXF1aXZhbGVuY2VzQSA9IG1lcmdlZEVxdWl2YWxlbmNlczsgIC8vL1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZXNBO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVkVmFyaWFibGVzRnJvbUdyb3VuZGVkVGVybXMoZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICBncm91bmRlZFRlcm1zLmZvckVhY2goKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSBncm91bmRlZFRlcm0sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlcy5wdXNoKGRlZmluZWRWYXJpYWJsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXBhcmF0ZUluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgcmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcywgY29udGV4dCkge1xuICBzZXBhcmF0ZShlcXVpdmFsZW5jZXMsIHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsIChlcXVpdmFsZW5jZSkgPT4ge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlSW5pdGlhbGx5R3JvdW5kZWQgPSBlcXVpdmFsZW5jZS5pc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpO1xuXG4gICAgaWYgKCFlcXVpdmFsZW5jZUluaXRpYWxseUdyb3VuZGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXBhcmF0ZUltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXMsIHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gIHNlcGFyYXRlKGVxdWl2YWxlbmNlcywgcmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsIChlcXVpdmFsZW5jZSkgPT4ge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlSW1wbGljaXRseUdyb3VuZGVkID0gZXF1aXZhbGVuY2UuaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBpZiAoIWVxdWl2YWxlbmNlSW1wbGljaXRseUdyb3VuZGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBncm91bmRlZFRlcm1zRnJvbUdyb3VuZGVkRXF1aXZhbGVuY2VzQW5kRGVmaW5lZFZhcmlhYmxlcyhncm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCkge1xuICBncm91bmRlZEVxdWl2YWxlbmNlcy5mb3JFYWNoKChncm91bmRlZEVxdWl2YWxlbmNlKSA9PiB7XG4gICAgZ3JvdW5kZWRFcXVpdmFsZW5jZS5nZXRHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGdyb3VuZGVkVGVybXMsIGNvbnRleHQpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkiLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlcyIsIm1lcmdlRXF1aXZhbGVuY2VzIiwic2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyIsInB1c2giLCJzZXBhcmF0ZSIsImFycmF5VXRpbGl0aWVzIiwiZXF1aXZhbGVuY2VzQSIsImVxdWl2YWxlbmNlc0IiLCJjb250ZXh0IiwiZm9yRWFjaCIsImVxdWl2YWxlbmNlQiIsIm1lcmdlRXF1aXZhbGVuY2UiLCJlcXVhbGl0eSIsIkVxdWl2YWxlbmNlIiwiZWxlbWVudHMiLCJlYXVsaXZhbGVuY2UiLCJmcm9tRXF1YWxpdHkiLCJlcXVpdmFsZW5jZXMiLCJ0ZXJtTm9kZXMiLCJlcXVpdmFsZW5jZSIsImZpbmQiLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlcyIsImdyb3VuZGVkVGVybXMiLCJkZWZpbmVkVmFyaWFibGVzIiwiZ3JvdW5kZWRFcXVpdmFsZW5jZXMiLCJyZW1haW5pbmdFcXVpdmFsZW5jZXMiLCJpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcyIsImltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyIsInNlcGFyYXRlSW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMiLCJpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlc0xlbmd0aCIsImxlbmd0aCIsImltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlc0xlbmd0aCIsImRlZmluZWRWYXJpYWJsZXNMZW5ndGgiLCJwcmV2aW91c0RlZmluZWRWYXJpYWJsZXNMZW5ndGgiLCJncm91bmRlZFRlcm1zRnJvbUdyb3VuZGVkRXF1aXZhbGVuY2VzQW5kRGVmaW5lZFZhcmlhYmxlcyIsImRlZmluZWRWYXJpYWJsZXNGcm9tR3JvdW5kZWRUZXJtcyIsInNlcGFyYXRlSW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwibWVyZ2VkRXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VBIiwiZXF1aXZhbGVuY2VCRGlzam9pbnRGcm9tRXF1aXZhbGVuY2VBIiwiaXNEaXNqb2ludEZyb20iLCJtZXJnZWRFcXVpdmFsZW5jZSIsIm1lcmdlZFdpdGgiLCJncm91bmRlZFRlcm0iLCJ0ZXJtIiwidmFyaWFibGVzIiwidmFyaWFibGVzRnJvbVRlcm0iLCJ2YXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1Rlcm1WYXJpYWJsZSIsImluY2x1ZGVzIiwiZGVmaW5lZFZhcmlhYmxlIiwiZXF1aXZhbGVuY2VJbml0aWFsbHlHcm91bmRlZCIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJlcXVpdmFsZW5jZUltcGxpY2l0bHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiZ3JvdW5kZWRFcXVpdmFsZW5jZSIsImdldEdyb3VuZGVkVGVybXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXNCZ0JBO2VBQUFBOztRQVVBQztlQUFBQTs7UUF0QkFDO2VBQUFBOztRQWtDQUM7ZUFBQUE7OzsyQkExQ2U7aUVBRVY7NkJBRWE7Ozs7OztBQUVsQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO0FBRWxDLFNBQVNKLGtCQUFrQkssYUFBYSxFQUFFQyxhQUFhLEVBQUVDLE9BQU87SUFDckVGLGdCQUFnQjtXQUNYQTtLQUNKO0lBRURDLGNBQWNFLE9BQU8sQ0FBQyxDQUFDQztRQUNyQkosZ0JBQWdCSyxpQkFBaUJMLGVBQWVJLGNBQWNGO0lBQ2hFO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVNQLHlCQUF5QmEsUUFBUSxFQUFFSixPQUFPO0lBQ3hELE1BQU0sRUFBRUssV0FBVyxFQUFFLEdBQUdDLGlCQUFRLEVBQzFCQyxlQUFlRixZQUFZRyxZQUFZLENBQUNKLFVBQVVKLFVBQ2xEUyxlQUFlO1FBQ2JGO0tBQ0Q7SUFFUCxPQUFPRTtBQUNUO0FBRU8sU0FBU2pCLDJCQUEyQmlCLFlBQVksRUFBRUMsU0FBUztJQUNoRSxNQUFNQyxjQUFjRixhQUFhRyxJQUFJLENBQUMsQ0FBQ0Q7UUFDckMsTUFBTUUsa0JBQWtCRixZQUFZRyxjQUFjLENBQUNKO1FBRW5ELElBQUlHLGlCQUFpQjtZQUNuQixPQUFPO1FBQ1Q7SUFDRixNQUFNO0lBRU4sT0FBT0Y7QUFDVDtBQUVPLFNBQVNqQix5Q0FBeUNlLFlBQVksRUFBRU0sYUFBYSxFQUFFQyxnQkFBZ0IsRUFBRWhC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
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZXF1aXZhbGVuY2VzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcblxuY29uc3QgeyBwdXNoLCBzZXBhcmF0ZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZXNCLCBjb250ZXh0KSB7XG4gIGVxdWl2YWxlbmNlc0EgPSBbICAvLy9cbiAgICAuLi5lcXVpdmFsZW5jZXNBXG4gIF07XG5cbiAgZXF1aXZhbGVuY2VzQi5mb3JFYWNoKChlcXVpdmFsZW5jZUIpID0+IHtcbiAgICBlcXVpdmFsZW5jZXNBID0gbWVyZ2VFcXVpdmFsZW5jZShlcXVpdmFsZW5jZXNBLCBlcXVpdmFsZW5jZUIsIGNvbnRleHQpO1xuICB9KTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2VzQTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlc0Zyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWl2YWxlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZWF1bGl2YWxlbmNlID0gRXF1aXZhbGVuY2UuZnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VzID0gW1xuICAgICAgICAgIGVhdWxpdmFsZW5jZVxuICAgICAgICBdO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlKGVxdWl2YWxlbmNlcywgdGVybU5vZGUpIHtcbiAgY29uc3QgZXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZXMuZmluZCgoZXF1aXZhbGVuY2UpID0+IHtcbiAgICBjb25zdCB0ZXJtRXF1YXRlcyA9IGVxdWl2YWxlbmNlLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgaWYgKHRlcm1FcXVhdGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pIHx8IG51bGw7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgbGV0IGdyb3VuZGVkRXF1aXZhbGVuY2VzLFxuICAgICAgcmVtYWluaW5nRXF1aXZhbGVuY2VzLFxuICAgICAgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsXG4gICAgICBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXM7XG5cbiAgcmVtYWluaW5nRXF1aXZhbGVuY2VzID0gW107XG5cbiAgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMgPSBbXTtcblxuICBzZXBhcmF0ZUluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgcmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcywgY29udGV4dCk7XG5cbiAgY29uc3QgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXNMZW5ndGggPSBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcy5sZW5ndGg7XG5cbiAgaWYgKGluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgIGdyb3VuZGVkRXF1aXZhbGVuY2VzID0gaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXM7IC8vL1xuXG4gICAgbGV0IGltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlc0xlbmd0aCA9IDE7XG5cbiAgICB3aGlsZSAoaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGRlZmluZWRWYXJpYWJsZXNMZW5ndGggPSAwLFxuICAgICAgICAgICAgcHJldmlvdXNEZWZpbmVkVmFyaWFibGVzTGVuZ3RoID0gLTE7XG5cbiAgICAgIHdoaWxlIChkZWZpbmVkVmFyaWFibGVzTGVuZ3RoID4gcHJldmlvdXNEZWZpbmVkVmFyaWFibGVzTGVuZ3RoKSB7XG4gICAgICAgIHByZXZpb3VzRGVmaW5lZFZhcmlhYmxlc0xlbmd0aCA9IGRlZmluZWRWYXJpYWJsZXNMZW5ndGg7ICAvLy9cblxuICAgICAgICBncm91bmRlZFRlcm1zRnJvbUdyb3VuZGVkRXF1aXZhbGVuY2VzQW5kRGVmaW5lZFZhcmlhYmxlcyhncm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCk7XG5cbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlc0Zyb21Hcm91bmRlZFRlcm1zKGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgICAgIGRlZmluZWRWYXJpYWJsZXNMZW5ndGggPSBkZWZpbmVkVmFyaWFibGVzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgZXF1aXZhbGVuY2VzID0gcmVtYWluaW5nRXF1aXZhbGVuY2VzOyAvLy9cblxuICAgICAgcmVtYWluaW5nRXF1aXZhbGVuY2VzID0gW107XG5cbiAgICAgIGltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyA9IFtdO1xuXG4gICAgICBzZXBhcmF0ZUltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXMsIHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgICAgcHVzaChncm91bmRlZEVxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzKTtcblxuICAgICAgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoID0gaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLmxlbmd0aDsgIC8vL1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZUVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlc0EsIGVxdWl2YWxlbmNlQiwgY29udGV4dCkge1xuICBjb25zdCBtZXJnZWRFcXVpdmFsZW5jZXMgPSBbXTtcblxuICBlcXVpdmFsZW5jZXNBLmZvckVhY2goKGVxdWl2YWxlbmNlQSkgPT4ge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlQkRpc2pvaW50RnJvbUVxdWl2YWxlbmNlQSA9IGVxdWl2YWxlbmNlQi5pc0Rpc2pvaW50RnJvbShlcXVpdmFsZW5jZUEpO1xuXG4gICAgaWYgKGVxdWl2YWxlbmNlQkRpc2pvaW50RnJvbUVxdWl2YWxlbmNlQSkge1xuICAgICAgY29uc3QgbWVyZ2VkRXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZUE7ICAvLy9cblxuICAgICAgbWVyZ2VkRXF1aXZhbGVuY2VzLnB1c2gobWVyZ2VkRXF1aXZhbGVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcXVpdmFsZW5jZUIgPSBlcXVpdmFsZW5jZUIubWVyZ2VkV2l0aChlcXVpdmFsZW5jZUEsIGNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbWVyZ2VkRXF1aXZhbGVuY2UgPSBlcXVpdmFsZW5jZUI7ICAvLy9cblxuICBtZXJnZWRFcXVpdmFsZW5jZXMucHVzaChtZXJnZWRFcXVpdmFsZW5jZSk7XG5cbiAgZXF1aXZhbGVuY2VzQSA9IG1lcmdlZEVxdWl2YWxlbmNlczsgIC8vL1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZXNBO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVkVmFyaWFibGVzRnJvbUdyb3VuZGVkVGVybXMoZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCkge1xuICBncm91bmRlZFRlcm1zLmZvckVhY2goKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSBncm91bmRlZFRlcm0sICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIHZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5pbmNsdWRlcyh2YXJpYWJsZSk7XG5cbiAgICAgIGlmICghZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnN0IGRlZmluZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgZGVmaW5lZFZhcmlhYmxlcy5wdXNoKGRlZmluZWRWYXJpYWJsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXBhcmF0ZUluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgcmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcywgY29udGV4dCkge1xuICBzZXBhcmF0ZShlcXVpdmFsZW5jZXMsIHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW5pdGlhbGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsIChlcXVpdmFsZW5jZSkgPT4ge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlSW5pdGlhbGx5R3JvdW5kZWQgPSBlcXVpdmFsZW5jZS5pc0luaXRpYWxseUdyb3VuZGVkKGNvbnRleHQpO1xuXG4gICAgaWYgKCFlcXVpdmFsZW5jZUluaXRpYWxseUdyb3VuZGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXBhcmF0ZUltcGxpY2l0bHlHcm91bmRlZEVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXMsIHJlbWFpbmluZ0VxdWl2YWxlbmNlcywgaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gIHNlcGFyYXRlKGVxdWl2YWxlbmNlcywgcmVtYWluaW5nRXF1aXZhbGVuY2VzLCBpbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMsIChlcXVpdmFsZW5jZSkgPT4ge1xuICAgIGNvbnN0IGVxdWl2YWxlbmNlSW1wbGljaXRseUdyb3VuZGVkID0gZXF1aXZhbGVuY2UuaXNJbXBsaWNpdGx5R3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBpZiAoIWVxdWl2YWxlbmNlSW1wbGljaXRseUdyb3VuZGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBncm91bmRlZFRlcm1zRnJvbUdyb3VuZGVkRXF1aXZhbGVuY2VzQW5kRGVmaW5lZFZhcmlhYmxlcyhncm91bmRlZEVxdWl2YWxlbmNlcywgZGVmaW5lZFZhcmlhYmxlcywgZ3JvdW5kZWRUZXJtcywgY29udGV4dCkge1xuICBncm91bmRlZEVxdWl2YWxlbmNlcy5mb3JFYWNoKChncm91bmRlZEVxdWl2YWxlbmNlKSA9PiB7XG4gICAgZ3JvdW5kZWRFcXVpdmFsZW5jZS5nZXRHcm91bmRlZFRlcm1zKGRlZmluZWRWYXJpYWJsZXMsIGdyb3VuZGVkVGVybXMsIGNvbnRleHQpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkiLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlIiwibWVyZ2VFcXVpdmFsZW5jZXMiLCJzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIiwicHVzaCIsInNlcGFyYXRlIiwiYXJyYXlVdGlsaXRpZXMiLCJlcXVpdmFsZW5jZXNBIiwiZXF1aXZhbGVuY2VzQiIsImNvbnRleHQiLCJmb3JFYWNoIiwiZXF1aXZhbGVuY2VCIiwibWVyZ2VFcXVpdmFsZW5jZSIsImVxdWFsaXR5IiwiRXF1aXZhbGVuY2UiLCJlbGVtZW50cyIsImVhdWxpdmFsZW5jZSIsImZyb21FcXVhbGl0eSIsImVxdWl2YWxlbmNlcyIsInRlcm1Ob2RlIiwiZXF1aXZhbGVuY2UiLCJmaW5kIiwidGVybUVxdWF0ZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZ3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJncm91bmRlZEVxdWl2YWxlbmNlcyIsInJlbWFpbmluZ0VxdWl2YWxlbmNlcyIsImluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwiaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzIiwic2VwYXJhdGVJbml0aWFsbHlHcm91bmRlZEVxdWl2YWxlbmNlcyIsImluaXRpYWxseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoIiwibGVuZ3RoIiwiaW1wbGljaXRseUdyb3VuZGVkRXF1aXZhbGVuY2VzTGVuZ3RoIiwiZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCIsInByZXZpb3VzRGVmaW5lZFZhcmlhYmxlc0xlbmd0aCIsImdyb3VuZGVkVGVybXNGcm9tR3JvdW5kZWRFcXVpdmFsZW5jZXNBbmREZWZpbmVkVmFyaWFibGVzIiwiZGVmaW5lZFZhcmlhYmxlc0Zyb21Hcm91bmRlZFRlcm1zIiwic2VwYXJhdGVJbXBsaWNpdGx5R3JvdW5kZWRFcXVpdmFsZW5jZXMiLCJtZXJnZWRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZUEiLCJlcXVpdmFsZW5jZUJEaXNqb2ludEZyb21FcXVpdmFsZW5jZUEiLCJpc0Rpc2pvaW50RnJvbSIsIm1lcmdlZEVxdWl2YWxlbmNlIiwibWVyZ2VkV2l0aCIsImdyb3VuZGVkVGVybSIsInRlcm0iLCJ2YXJpYWJsZXMiLCJ2YXJpYWJsZXNGcm9tVGVybSIsInZhcmlhYmxlIiwiZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVGVybVZhcmlhYmxlIiwiaW5jbHVkZXMiLCJkZWZpbmVkVmFyaWFibGUiLCJlcXVpdmFsZW5jZUluaXRpYWxseUdyb3VuZGVkIiwiaXNJbml0aWFsbHlHcm91bmRlZCIsImVxdWl2YWxlbmNlSW1wbGljaXRseUdyb3VuZGVkIiwiaXNJbXBsaWNpdGx5R3JvdW5kZWQiLCJncm91bmRlZEVxdWl2YWxlbmNlIiwiZ2V0R3JvdW5kZWRUZXJtcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBc0JnQkE7ZUFBQUE7O1FBVUFDO2VBQUFBOztRQXRCQUM7ZUFBQUE7O1FBa0NBQztlQUFBQTs7OzJCQTFDZTtpRUFFVjs2QkFFYTs7Ozs7O0FBRWxDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUUsR0FBR0MseUJBQWM7QUFFbEMsU0FBU0osa0JBQWtCSyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsT0FBTztJQUNyRUYsZ0JBQWdCO1dBQ1hBO0tBQ0o7SUFFREMsY0FBY0UsT0FBTyxDQUFDLENBQUNDO1FBQ3JCSixnQkFBZ0JLLGlCQUFpQkwsZUFBZUksY0FBY0Y7SUFDaEU7SUFFQSxPQUFPRjtBQUNUO0FBRU8sU0FBU1AseUJBQXlCYSxRQUFRLEVBQUVKLE9BQU87SUFDeEQsTUFBTSxFQUFFSyxXQUFXLEVBQUUsR0FBR0MsaUJBQVEsRUFDMUJDLGVBQWVGLFlBQVlHLFlBQVksQ0FBQ0osVUFBVUosVUFDbERTLGVBQWU7UUFDYkY7S0FDRDtJQUVQLE9BQU9FO0FBQ1Q7QUFFTyxTQUFTakIsMEJBQTBCaUIsWUFBWSxFQUFFQyxRQUFRO0lBQzlELE1BQU1DLGNBQWNGLGFBQWFHLElBQUksQ0FBQyxDQUFDRDtRQUNyQyxNQUFNRSxjQUFjRixZQUFZRyxhQUFhLENBQUNKO1FBRTlDLElBQUlHLGFBQWE7WUFDZixPQUFPO1FBQ1Q7SUFDRixNQUFNO0lBRU4sT0FBT0Y7QUFDVDtBQUVPLFNBQVNqQix5Q0FBeUNlLFlBQVksRUFBRU0sYUFBYSxFQUFFQyxnQkFBZ0IsRUFBRWhCLE9BQU87SUFDN0csSUFBSWlCLHNCQUNB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-nominal",
3
3
  "author": "James Smith",
4
- "version": "1.0.431",
4
+ "version": "1.0.434",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-nominal",
7
7
  "description": "Occam's Nominal language.",
@@ -11,16 +11,16 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^17.6.3",
14
- "occam-furtle": "^3.0.439",
14
+ "occam-furtle": "^3.0.440",
15
15
  "occam-grammar-utilities": "^8.1.22",
16
- "occam-languages": "^2.2.56",
16
+ "occam-languages": "^2.2.57",
17
17
  "occam-query": "^4.1.203"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@swc/core": "1.13.20",
21
21
  "decaf-cli": "^1.0.37",
22
- "occam-model": "^1.0.573",
23
- "occam-server": "^7.0.73",
22
+ "occam-model": "^1.0.574",
23
+ "occam-server": "^7.0.74",
24
24
  "watchful-cli": "^1.7.102"
25
25
  },
26
26
  "scripts": {
@@ -78,20 +78,6 @@ export default define(class Equality extends Element {
78
78
  return equalTo;
79
79
  }
80
80
 
81
- isReflexive() {
82
- let reflexive = false;
83
-
84
- if (!this.negated) {
85
- const leftTermEqualToRightTerm = this.leftTerm.isEqualTo(this.rightTerm);
86
-
87
- if (leftTermEqualToRightTerm) {
88
- reflexive = true;
89
- }
90
- }
91
-
92
- return reflexive;
93
- }
94
-
95
81
  findEquality(context) {
96
82
  const equalityNode = this.getEqualityNode(),
97
83
  equality = context.findEqualityByEqualityNode(equalityNode);
@@ -248,14 +234,14 @@ export default define(class Equality extends Element {
248
234
  return;
249
235
  }
250
236
 
251
- const equality = this, ///
252
- negated = this.isNegated(),
253
- reflexive = this.isReflexive();
237
+ const negated = this.isNegated();
254
238
 
255
- if (negated || reflexive) {
239
+ if (negated) {
256
240
  return;
257
241
  }
258
242
 
243
+ const equality = this; ///
244
+
259
245
  const equalityAssignment = equalityAssignmentFromEquality(equality, context);
260
246
 
261
247
  context.addAssignment(equalityAssignment);
@@ -5,12 +5,12 @@ import { arrayUtilities } from "necessary";
5
5
 
6
6
  import { define } from "../elements";
7
7
  import { instantiate } from "../utilities/context";
8
+ import { stripBracketsFromTerm } from "../utilities/brackets";
8
9
  import { instantiateEquivalence } from "../process/instantiate";
9
- import { stripBracketsFromTermNode } from "../utilities/brackets";
10
10
  import { equivalenceStringFromTerms } from "../utilities/string";
11
11
  import { equivalenceFromEquivalenceNode } from "../utilities/element";
12
12
 
13
- const { compress } = arrayUtilities;
13
+ const { first, second, compress } = arrayUtilities;
14
14
 
15
15
  export default define(class Equivalence extends Element {
16
16
  constructor(context, string, node, breakPoint, terms) {
@@ -87,9 +87,9 @@ export default define(class Equivalence extends Element {
87
87
 
88
88
  isDisjointFrom(equivalence) {
89
89
  const disjointFrom = equivalence.everyTerm((term) => {
90
- const comparesToTerm = this.compareTerm(term);
90
+ const termEquates = this.equateTerm(term);
91
91
 
92
- if (!comparesToTerm) {
92
+ if (!termEquates) {
93
93
  return true;
94
94
  }
95
95
  });
@@ -113,63 +113,42 @@ export default define(class Equivalence extends Element {
113
113
  return implicitlyGrounded;
114
114
  }
115
115
 
116
- matchTermNode(termNode) {
117
- termNode = stripBracketsFromTermNode(termNode); ///
116
+ equateTerm(term) {
117
+ const termA = term, ///
118
+ termEquates = this.someTerm((term) => {
119
+ const termB = term, ///
120
+ termAEqualToTermB = termA.isEqualTo(termB);
118
121
 
119
- const termNodeMatches = this.someTerm((term) => {
120
- const termNodeMatches = term.matchTermNode(termNode);
122
+ if (termAEqualToTermB) {
123
+ return true;
124
+ }
125
+ });
121
126
 
122
- if (termNodeMatches) {
127
+ return termEquates;
128
+ }
129
+
130
+ equateTerms(terms) {
131
+ const termsEquate = terms.every((term) => {
132
+ const termEquates = this.equateTerm(term);
133
+
134
+ if (termEquates) {
123
135
  return true;
124
136
  }
125
137
  });
126
138
 
127
- return termNodeMatches;
139
+ return termsEquate;
128
140
  }
129
141
 
130
- matchTermNodes(termNodes) {
131
- const termNodesMatch = termNodes.every((termNode) => {
132
- const termNodeMatches = this.matchTermNode(termNode);
142
+ matchTermNode(termNode) {
143
+ const termNodeMatches = this.terms.some((term) => {
144
+ const termNodeMatches = term.matchTermNode(termNode);
133
145
 
134
146
  if (termNodeMatches) {
135
147
  return true;
136
148
  }
137
149
  });
138
150
 
139
- return termNodesMatch;
140
- }
141
-
142
- someTerm(callback) { return this.terms.some(callback); }
143
-
144
- everyTerm(callback) { return this.terms.every(callback); }
145
-
146
- compareTerm(term) {
147
- const termA = term, ///
148
- comparesToTerm = this.someTerm((term) => {
149
- const termB = term, ///
150
- termAEqualToTermB = termA.isEqualTo(termB);
151
-
152
- if (termAEqualToTermB) {
153
- return true;
154
- }
155
- });
156
-
157
- return comparesToTerm;
158
- }
159
-
160
- someOtherTerm(term, callback) {
161
- const termA = term, ///
162
- terms = this.terms.filter((term) => {
163
- const termB = term, ///
164
- termAEqualToTermB = termA.isEqualTo(termB);
165
-
166
- if (!termAEqualToTermB) {
167
- return true;
168
- }
169
- }),
170
- result = terms.some(callback);
171
-
172
- return result;
151
+ return termNodeMatches;
173
152
  }
174
153
 
175
154
  combineTerms(terms) {
@@ -209,14 +188,52 @@ export default define(class Equivalence extends Element {
209
188
  return equivalence;
210
189
  }
211
190
 
191
+ someOtherTerm(termNode, callback) {
192
+ const terms = this.terms.filter((term) => {
193
+ const termNodeMatches = term.matchTermNode(termNode);
194
+
195
+ if (!termNodeMatches) {
196
+ return true;
197
+ }
198
+ }),
199
+ result = terms.some(callback);
200
+
201
+ return result;
202
+ }
203
+
204
+ someTerm(callback) { return this.terms.some(callback); }
205
+
206
+ everyTerm(callback) { return this.terms.every(callback); }
207
+
212
208
  static name = "Equivalence";
213
209
 
214
210
  static fromEquality(equality, context) {
215
211
  let equivalence;
216
212
 
213
+ let terms;
214
+
215
+ terms = equality.getTerms();
216
+
217
+ terms = terms.map((term) => { ///
218
+ term = stripBracketsFromTerm(term, context);
219
+
220
+ return term;
221
+ });
222
+
223
+ const firstTerm = first(terms),
224
+ secondTerm = second(terms),
225
+ firstTermEqualToSecondTerm = firstTerm.isEqualTo(secondTerm);
226
+
227
+ if (firstTermEqualToSecondTerm) {
228
+ const term = firstTerm; ///
229
+
230
+ terms = [
231
+ term
232
+ ];
233
+ }
234
+
217
235
  instantiate((context) => {
218
- const terms = equality.getTerms(),
219
- equivalenceString = equivalenceStringFromTerms(terms),
236
+ const equivalenceString = equivalenceStringFromTerms(terms),
220
237
  string = equivalenceString, ///
221
238
  equivalenceNode = instantiateEquivalence(string, context);
222
239
 
@@ -4,7 +4,8 @@ import { queryUtilities } from "occam-query";
4
4
 
5
5
  import ZipPass from "../pass/zip";
6
6
 
7
- import { findEquivalenceByTermNodes } from "../utilities/equivalences";
7
+ import { stripBracketsFromTermNode } from "../utilities/brackets";
8
+ import { findEquivalenceByTermNode } from "../utilities/equivalences";
8
9
 
9
10
  const { nodeQuery } = queryUtilities;
10
11
 
@@ -18,25 +19,46 @@ class EquationalPass extends ZipPass {
18
19
  run: (leftTermNode, rightTermNode, context) => {
19
20
  let success = false;
20
21
 
22
+ leftTermNode = stripBracketsFromTermNode(leftTermNode); ///
23
+ rightTermNode = stripBracketsFromTermNode(rightTermNode); ///
24
+
21
25
  if (!success) {
22
- const depth = Infinity,
23
- leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode, depth);
26
+ const equivalences = context.getEquivalences(),
27
+ leftEquivalence = findEquivalenceByTermNode(equivalences, leftTermNode),
28
+ rightEquivalence = findEquivalenceByTermNode(equivalences, rightTermNode);
24
29
 
25
- if (leftTermNodeMatchesRightTermNode) {
26
- success = true;
30
+ if (!success) {
31
+ if ((leftEquivalence !== null) && (rightEquivalence !== null) && (leftEquivalence === rightEquivalence)) {
32
+ success = true;
33
+ }
27
34
  }
28
- }
29
35
 
30
- if (!success) {
31
- const equivalences = context.getEquivalences(),
32
- termNodes = [
33
- leftTermNode,
34
- rightTermNode
35
- ],
36
- equivalence = findEquivalenceByTermNodes(equivalences, termNodes);
37
-
38
- if (equivalence !== null) {
39
- success = true;
36
+ if (!success) {
37
+ if (leftEquivalence !== null) {
38
+ success = leftEquivalence.someOtherTerm(leftTermNode, (otherTerm) => {
39
+ const leftTerm = otherTerm, ///
40
+ leftTermNode = leftTerm.getNode(),
41
+ descended = descend(leftTermNode, rightTermNode, context);
42
+
43
+ if (descended) {
44
+ return true;
45
+ }
46
+ });
47
+ }
48
+ }
49
+
50
+ if (!success) {
51
+ if (rightEquivalence !== null) {
52
+ success = rightEquivalence.someOtherTerm(rightTermNode, (otherTerm) => {
53
+ const rightTerm = otherTerm, ///
54
+ rightTermNode = rightTerm.getNode(),
55
+ descended = descend(leftTermNode, rightTermNode, context);
56
+
57
+ if (descended) {
58
+ return true;
59
+ }
60
+ });
61
+ }
40
62
  }
41
63
  }
42
64
 
@@ -45,13 +67,7 @@ class EquationalPass extends ZipPass {
45
67
  leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode, depth);
46
68
 
47
69
  if (leftTermNodeMatchesRightTermNode) {
48
- const leftNonTerminalNode = leftTermNode, ///
49
- rightNonTerminalNode = rightTermNode, ///
50
- leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
51
- rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
52
- leftChildNodes = leftNonTerminalNodeChildNodes, ///
53
- rightChildNodes = rightNonTerminalNodeChildNodes, ///
54
- descended = equationalPass.descend(leftChildNodes, rightChildNodes, context);
70
+ const descended = descend(leftTermNode, rightTermNode, context);
55
71
 
56
72
  if (descended) {
57
73
  success = true;
@@ -68,7 +84,12 @@ class EquationalPass extends ZipPass {
68
84
  const equationalPass = new EquationalPass();
69
85
 
70
86
  export function equateTerms(leftTerm, rightTerm, context) {
71
- let termsEquate;
87
+ let termsEquate = false;
88
+
89
+ const leftTermString = leftTerm.getString(),
90
+ rightTermString = rightTerm.getString();
91
+
92
+ context.trace(`Equating the '${leftTermString}' and '${rightTermString}' terms...`);
72
93
 
73
94
  const leftTermNode = leftTerm.getNode(),
74
95
  rightTermNode = rightTerm.getNode(),
@@ -76,13 +97,24 @@ export function equateTerms(leftTerm, rightTerm, context) {
76
97
  specificNode = rightTermNode, ///
77
98
  success = equationalPass.run(generalNode, specificNode, context);
78
99
 
79
- termsEquate = success; ///
100
+ if (success) {
101
+ termsEquate = true;
102
+ }
103
+
104
+ if (termsEquate) {
105
+ context.debug(`...equated the '${leftTermString}' and '${rightTermString}' terms.`);
106
+ }
80
107
 
81
108
  return termsEquate;
82
109
  }
83
110
 
84
111
  export function equateStatements(leftStatement, rightStatement, context) {
85
- let statementsEquate;
112
+ let statementsEquate = false;
113
+
114
+ const leftStatementString = leftStatement.getString(),
115
+ rightStatementString = rightStatement.getString();
116
+
117
+ context.trace(`Equating the '${leftStatementString}' and '${rightStatementString}' statements...`);
86
118
 
87
119
  const leftStatementNode = leftStatement.getNode(),
88
120
  rightStatementNode = rightStatement.getNode(),
@@ -90,7 +122,25 @@ export function equateStatements(leftStatement, rightStatement, context) {
90
122
  specificNode = rightStatementNode, ///
91
123
  success = equationalPass.run(generalNode, specificNode, context);
92
124
 
93
- statementsEquate = success; ///
125
+ if (success) {
126
+ statementsEquate = true;
127
+ }
128
+
129
+ if (statementsEquate) {
130
+ context.debug(`...equated the '${leftStatementString}' and '${rightStatementString}' statements.`);
131
+ }
94
132
 
95
133
  return statementsEquate;
96
134
  }
135
+
136
+ function descend(leftTermNode, rightTermNode, context) {
137
+ const leftNonTerminalNode = leftTermNode, ///
138
+ rightNonTerminalNode = rightTermNode, ///
139
+ leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
140
+ rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
141
+ leftChildNodes = leftNonTerminalNodeChildNodes, ///
142
+ rightChildNodes = rightNonTerminalNodeChildNodes, ///
143
+ descended = equationalPass.descend(leftChildNodes, rightChildNodes, context);
144
+
145
+ return descended;
146
+ }
@@ -5,46 +5,54 @@ import { BRACKETED_TERM_DEPTH, BRACKETED_STATEMENT_DEPTH } from "../constants";
5
5
  import { bracketedConstructorFromNothing, bracketedCombinatorFromNothing } from "../utilities/instance";
6
6
 
7
7
  export function stripBracketsFromTerm(term, context) {
8
- const termNode = term.getNode(),
9
- bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
8
+ let termNode = term.getNode(),
9
+ bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
10
10
 
11
- if (bracketedTermChildNode !== null) {
12
- const termNode = bracketedTermChildNode; ///
11
+ while (bracketedTermChildNode !== null) {
12
+ termNode = bracketedTermChildNode; ///
13
13
 
14
- term = termFromTermNode(termNode, context);
14
+ bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
15
15
  }
16
16
 
17
+ term = termFromTermNode(termNode, context);
18
+
17
19
  return term;
18
20
  }
19
21
 
20
22
  export function stripBracketsFromTermNode(termNode) {
21
- const bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
23
+ let bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
22
24
 
23
- if (bracketedTermChildNode !== null) {
25
+ while (bracketedTermChildNode !== null) {
24
26
  termNode = bracketedTermChildNode; ///
27
+
28
+ bracketedTermChildNode = bracketedTermChildNodeFromTermNode(termNode);
25
29
  }
26
30
 
27
31
  return termNode;
28
32
  }
29
33
 
30
34
  export function stripBracketsFromStatement(statement, context) {
31
- const statementNode = statement.getNode(),
32
- bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
35
+ let statementNode = statement.getNode(),
36
+ bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
33
37
 
34
- if (bracketedStatementChildNode !== null) {
35
- const statementNode = bracketedStatementChildNode; ///
38
+ while (bracketedStatementChildNode !== null) {
39
+ statementNode = bracketedStatementChildNode; ///
36
40
 
37
- statement = statementFromStatementNode(statementNode, context);
41
+ bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
38
42
  }
39
43
 
44
+ statement = statementFromStatementNode(statementNode, context);
45
+
40
46
  return statement;
41
47
  }
42
48
 
43
49
  export function stripBracketsFromStatementNode(statementNode) {
44
- const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
50
+ let bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
45
51
 
46
- if (bracketedStatementChildNode !== null) {
52
+ while (bracketedStatementChildNode !== null) {
47
53
  statementNode = bracketedStatementChildNode; ///
54
+
55
+ bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
48
56
  }
49
57
 
50
58
  return statementNode;
@@ -30,11 +30,11 @@ export function equivalencesFromEquality(equality, context) {
30
30
  return equivalences;
31
31
  }
32
32
 
33
- export function findEquivalenceByTermNodes(equivalences, termNodes) {
33
+ export function findEquivalenceByTermNode(equivalences, termNode) {
34
34
  const equivalence = equivalences.find((equivalence) => {
35
- const termNodeMatches = equivalence.matchTermNodes(termNodes);
35
+ const termEquates = equivalence.matchTermNode(termNode);
36
36
 
37
- if (termNodeMatches) {
37
+ if (termEquates) {
38
38
  return true;
39
39
  }
40
40
  }) || null;