occam-nominal 1.0.317 → 1.0.319

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/lib/context/bounded.js +8 -8
  2. package/lib/context/branching.js +3 -3
  3. package/lib/context/mnemic.js +14 -18
  4. package/lib/context/phaneric.js +22 -5
  5. package/lib/context.js +1 -5
  6. package/lib/element/equality.js +5 -7
  7. package/lib/element/metavariable.js +2 -2
  8. package/lib/element/substitution/frame.js +11 -11
  9. package/lib/element/substitution/reference.js +3 -3
  10. package/lib/element/substitution/statement.js +11 -11
  11. package/lib/element/substitution/term.js +13 -12
  12. package/lib/element/substitution.js +1 -15
  13. package/lib/element/variable.js +36 -35
  14. package/lib/process/unify.js +4 -4
  15. package/lib/utilities/compression.js +12 -1
  16. package/lib/utilities/context.js +20 -13
  17. package/lib/utilities/element.js +9 -9
  18. package/lib/utilities/equivalence.js +2 -2
  19. package/package.json +2 -2
  20. package/src/context/bounded.js +8 -8
  21. package/src/context/branching.js +1 -1
  22. package/src/context/mnemic.js +1 -9
  23. package/src/context/phaneric.js +30 -7
  24. package/src/context.js +0 -7
  25. package/src/element/equality.js +4 -8
  26. package/src/element/metavariable.js +1 -1
  27. package/src/element/substitution/frame.js +12 -12
  28. package/src/element/substitution/reference.js +4 -4
  29. package/src/element/substitution/statement.js +13 -13
  30. package/src/element/substitution/term.js +16 -13
  31. package/src/element/substitution.js +0 -20
  32. package/src/element/variable.js +41 -38
  33. package/src/process/unify.js +9 -3
  34. package/src/utilities/compression.js +10 -0
  35. package/src/utilities/context.js +22 -10
  36. package/src/utilities/element.js +8 -8
  37. package/src/utilities/equivalence.js +3 -1
  38. package/lib/utilities/synoptic.js +0 -148
  39. package/src/utilities/synoptic.js +0 -125
@@ -18,14 +18,17 @@ function _interop_require_default(obj) {
18
18
  }
19
19
  const { last, clear } = _necessary.arrayUtilities;
20
20
  class BoundedContext extends _context.default {
21
- constructor(context, assignments, equivalences, declaredVariables, constraints, subproofOrProofAssertions){
21
+ constructor(context, constraints, assignments, equivalences, declaredVariables, subproofOrProofAssertions){
22
22
  super(context);
23
+ this.constraints = constraints;
23
24
  this.assignments = assignments;
24
25
  this.equivalences = equivalences;
25
26
  this.declaredVariables = declaredVariables;
26
- this.constraints = constraints;
27
27
  this.subproofOrProofAssertions = subproofOrProofAssertions;
28
28
  }
29
+ getConstraints() {
30
+ return this.constraints;
31
+ }
29
32
  getAssignments() {
30
33
  return this.assignments;
31
34
  }
@@ -48,9 +51,6 @@ class BoundedContext extends _context.default {
48
51
  ];
49
52
  return declaredVariables;
50
53
  }
51
- getConstraints() {
52
- return this.constraints;
53
- }
54
54
  getSubproofOrProofAssertions() {
55
55
  let subproofOrProofAssertions;
56
56
  const context = this.getContext();
@@ -198,14 +198,14 @@ class BoundedContext extends _context.default {
198
198
  return termGrounded;
199
199
  }
200
200
  static fromNothing(context) {
201
- const assignments = [], equivalences = [], declaredVariables = [], constraints = null, subproofOrProofAssertions = [], boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, constraints, subproofOrProofAssertions);
201
+ const assignments = [], equivalences = [], declaredVariables = [], constraints = null, subproofOrProofAssertions = [], boundedContext = new BoundedContext(context, constraints, assignments, equivalences, declaredVariables, subproofOrProofAssertions);
202
202
  return boundedContext;
203
203
  }
204
204
  static fromConstraints(constraints, context) {
205
- const assignments = [], equivalences = [], declaredVariables = [], subproofOrProofAssertions = [], boundedContext = new BoundedContext(context, assignments, equivalences, declaredVariables, constraints, subproofOrProofAssertions);
205
+ const assignments = [], equivalences = [], declaredVariables = [], subproofOrProofAssertions = [], boundedContext = new BoundedContext(context, constraints, assignments, equivalences, declaredVariables, subproofOrProofAssertions);
206
206
  return boundedContext;
207
207
  }
208
208
  }
209
209
  const _default = BoundedContext;
210
210
 
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5LCBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBsYXN0LCBjbGVhciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEJvdW5kZWRDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdHJhaW50cywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cyA9IGFzc2lnbm1lbnRzO1xuICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gZXF1aXZhbGVuY2VzO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcztcbiAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEFzc2lnbm1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2lnbm1lbnRzO1xuICB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzKCkge1xuICAgIGxldCBlcXVpdmFsZW5jZXM7XG5cbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGVxdWl2YWxlbmNlcyA9IGNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCk7XG5cbiAgICBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICBlcXVpdmFsZW5jZXMgPSBtZXJnZUVxdWl2YWxlbmNlcyh0aGlzLmVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKCkge1xuICAgIGxldCBkZWNsYXJlZFZhcmlhYmxlcztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcygpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXG4gICAgICAuLi50aGlzLmRlY2xhcmVkVmFyaWFibGVzLFxuICAgICAgLi4uZGVjbGFyZWRWYXJpYWJsZXNcbiAgICBdO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0Q29uc3RyYWludHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4uc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyxcbiAgICAgIC4uLnRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGVwcyA9IHByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZkFzc2VydGlvblN0ZXAgPSBwcm9vZkFzc2VydGlvbi5pc1N0ZXAoKTtcblxuICAgICAgICAgICAgaWYgKHByb29mQXNzZXJ0aW9uU3RlcCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkge1xuICAgIGxldCBsYXN0U3RlcCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGVwcyA9IHRoaXMuZ2V0U3RlcHMoKSxcbiAgICAgICAgICBzdGVwc0xlbmd0aCA9IHN0ZXBzLmxlbmd0aDtcblxuICAgIGlmIChzdGVwc0xlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RTdGVwID0gbGFzdChzdGVwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RTdGVwO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgbGV0IG1ldGFMZXZlbDtcblxuICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzICE9PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVJlbGZleGl2ZSA9IGVxdWFsaXR5LmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAoIWVxdWFsaXR5UmVsZmV4aXZlKSB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgcmVmbGV4aXZlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgY2xlYXIodGhpcy5hc3NpZ25tZW50cyk7XG4gIH1cblxuICBhZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzLnB1c2goZGVjbGFyZWRWYXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpIHtcbiAgICBpZiAodGhpcy5jb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBjb25zdHJhaW50QSA9IGNvbnN0cmFpbnQsIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSBjb25zdHJhaW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBjb25zdHJhaW50QiA9IHRoaXMuY29uc3RyYWludHMuZmluZCgoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludEIgPSBjb25zdHJhaW50LCAvLy9cbiAgICAgICAgICAgIGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CID0gY29uc3RyYWludEEuaXNFcXVhbFRvKGNvbnN0cmFpbnRCKTtcblxuICAgICAgaWYgKGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoY29uc3RyYWludEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEdlbmVyYXRvcihnZW5lcmF0b3IpO1xuICB9XG5cbiAgYWRkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLnB1c2goc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGxldCBjb25zdHJhaW50O1xuXG4gICAgaWYgKHRoaXMuY29uc3RyYWludHMgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0cmFpbnQgPSBzdXBlci5maW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdHJhaW50ID0gdGhpcy5jb25zdHJhaW50cy5maW5kKChjb25zdHJhaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IGNvbnN0cmFpbnQubWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICAgICAgaWYgKGNvbnN0cmFpbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gdGhpcy5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgICBncm91bmRlZFRlcm1zID0gW10sXG4gICAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gICAgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdW5kZWRUZXJtTm9kZSA9IGdyb3VuZGVkVGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRlcm1Hcm91bmRlZCA9IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0ZXJtR3JvdW5kZWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gW10sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBjb25zdHJhaW50cyA9IG51bGwsXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGFzc2lnbm1lbnRzLCBlcXVpdmFsZW5jZXMsIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdHJhaW50cywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYm91bmRlZENvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBib3VuZGVkQ29udGV4dCA9IG5ldyBCb3VuZGVkQ29udGV4dChjb250ZXh0LCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBkZWNsYXJlZFZhcmlhYmxlcywgY29uc3RyYWludHMsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGJvdW5kZWRDb250ZXh0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvdW5kZWRDb250ZXh0OyJdLCJuYW1lcyI6WyJsYXN0IiwiY2xlYXIiLCJhcnJheVV0aWxpdGllcyIsIkJvdW5kZWRDb250ZXh0IiwiQ29udGV4dCIsImNvbnRleHQiLCJhc3NpZ25tZW50cyIsImVxdWl2YWxlbmNlcyIsImRlY2xhcmVkVmFyaWFibGVzIiwiY29uc3RyYWludHMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0QXNzaWdubWVudHMiLCJnZXRFcXVpdmFsZW5jZXMiLCJnZXRDb250ZXh0IiwibWVyZ2VFcXVpdmFsZW5jZXMiLCJnZXREZWNsYXJlZFZhcmlhYmxlcyIsImdldENvbnN0cmFpbnRzIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImdldFByb29mQXNzZXJ0aW9ucyIsInByb29mQXNzZXJ0aW9ucyIsImZpbHRlciIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnByb29mQXNzZXJ0aW9uIiwiaXNQcm9vZkFzc2VydGlvbiIsImdldFN0ZXBzIiwic3RlcHMiLCJwcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uU3RlcCIsImlzU3RlcCIsImdldExhc3RTdGVwIiwibGFzdFN0ZXAiLCJzdGVwc0xlbmd0aCIsImxlbmd0aCIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlcXVhbGl0eVJlbGZleGl2ZSIsImlzUmVmbGV4aXZlIiwiZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5IiwiZGVidWciLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsInB1c2giLCJhc3NpZ25Bc3NpZ25tZW50cyIsImZvckVhY2giLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVTdHJpbmciLCJhZGRDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbnN0cmFpbnRBIiwiY29uc3RyYWludFN0cmluZyIsImNvbnN0cmFpbnRCIiwiZmluZCIsImNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CIiwiaXNFcXVhbFRvIiwiYWRkR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiYWRkQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIiLCJjb21wYXJlVmFyaWFibGVJZGVudGlmaWVyIiwiZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50Tm9kZU1hdGNoZXMiLCJtYXRjaENvbnN0cmFpbnROb2RlIiwiaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQiLCJpc1Rlcm1Hcm91bmRlZCIsInRlcm0iLCJncm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsInNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMiLCJ0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSIsInNvbWUiLCJncm91bmRlZFRlcm0iLCJncm91bmRlZFRlcm1Ob2RlIiwiZ2V0Tm9kZSIsImdyb3VuZGVkVGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsInRlcm1Hcm91bmRlZCIsImZyb21Ob3RoaW5nIiwiYm91bmRlZENvbnRleHQiLCJmcm9tQ29uc3RyYWludHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW1UQTs7O2VBQUE7OzsyQkFqVCtCO2dFQUVYOzhCQUVrRjs7Ozs7O0FBRXRHLE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWM7QUFFdEMsTUFBTUMsdUJBQXVCQyxnQkFBTztJQUNsQyxZQUFZQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsV0FBVyxFQUFFQyx5QkFBeUIsQ0FBRTtRQUN6RyxLQUFLLENBQUNMO1FB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
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JvdW5kZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBtZXJnZUVxdWl2YWxlbmNlcywgZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5LCBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBsYXN0LCBjbGVhciB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNsYXNzIEJvdW5kZWRDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnN0cmFpbnRzLCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBkZWNsYXJlZFZhcmlhYmxlcywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xuICAgIHRoaXMuYXNzaWdubWVudHMgPSBhc3NpZ25tZW50cztcbiAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IGVxdWl2YWxlbmNlcztcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXM7XG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldENvbnN0cmFpbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRzO1xuICB9XG5cbiAgZ2V0QXNzaWdubWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWdubWVudHM7XG4gIH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7XG4gICAgbGV0IGVxdWl2YWxlbmNlcztcblxuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSB7XG4gICAgbGV0IGRlY2xhcmVkVmFyaWFibGVzO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtcbiAgICAgIC4uLnRoaXMuZGVjbGFyZWRWYXJpYWJsZXMsXG4gICAgICAuLi5kZWNsYXJlZFZhcmlhYmxlc1xuICAgIF07XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGxldCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFsgIC8vL1xuICAgICAgLi4uc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyxcbiAgICAgIC4uLnRoaXMuc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25zID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25zID0gdGhpcy5nZXRQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGVwcyA9IHByb29mQXNzZXJ0aW9ucy5maWx0ZXIoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZkFzc2VydGlvblN0ZXAgPSBwcm9vZkFzc2VydGlvbi5pc1N0ZXAoKTtcblxuICAgICAgICAgICAgaWYgKHByb29mQXNzZXJ0aW9uU3RlcCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIGdldExhc3RTdGVwKCkge1xuICAgIGxldCBsYXN0U3RlcCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGVwcyA9IHRoaXMuZ2V0U3RlcHMoKSxcbiAgICAgICAgICBzdGVwc0xlbmd0aCA9IHN0ZXBzLmxlbmd0aDtcblxuICAgIGlmIChzdGVwc0xlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RTdGVwID0gbGFzdChzdGVwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RTdGVwO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgbGV0IG1ldGFMZXZlbDtcblxuICAgIGlmICh0aGlzLmNvbnN0cmFpbnRzICE9PSBudWxsKSB7XG4gICAgICBtZXRhTGV2ZWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1YWxpdHlTdHJpbmcgPSBlcXVhbGl0eS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVJlbGZleGl2ZSA9IGVxdWFsaXR5LmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAoIWVxdWFsaXR5UmVsZmV4aXZlKSB7XG4gICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXNGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpO1xuXG4gICAgICB0aGlzLmVxdWl2YWxlbmNlcyA9IG1lcmdlRXF1aXZhbGVuY2VzKHRoaXMuZXF1aXZhbGVuY2VzLCBlcXVpdmFsZW5jZXMsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgYm91bmRlZCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgcmVmbGV4aXZlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgdGhpcy5hc3NpZ25tZW50cy5wdXNoKGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXNzaWduQXNzaWdubWVudHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5hc3NpZ25tZW50cy5mb3JFYWNoKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICBhc3NpZ25tZW50KGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgY2xlYXIodGhpcy5hc3NpZ25tZW50cyk7XG4gIH1cblxuICBhZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzLnB1c2goZGVjbGFyZWRWYXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpIHtcbiAgICBpZiAodGhpcy5jb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgICAgc3VwZXIuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBjb25zdHJhaW50QSA9IGNvbnN0cmFpbnQsIC8vL1xuICAgICAgICAgIGNvbnN0cmFpbnRTdHJpbmcgPSBjb25zdHJhaW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCB0byB0aGUgYm91bmRlZCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBjb25zdHJhaW50QiA9IHRoaXMuY29uc3RyYWludHMuZmluZCgoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludEIgPSBjb25zdHJhaW50LCAvLy9cbiAgICAgICAgICAgIGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CID0gY29uc3RyYWludEEuaXNFcXVhbFRvKGNvbnN0cmFpbnRCKTtcblxuICAgICAgaWYgKGNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoY29uc3RyYWludEIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtjb25zdHJhaW50U3RyaW5nfScgY29uc3RyYWludCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBib3VuZGVkIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uc3RyYWludHMucHVzaChjb25zdHJhaW50KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7Y29uc3RyYWludFN0cmluZ30nIGNvbnN0cmFpbnQgdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEdlbmVyYXRvcihnZW5lcmF0b3IpO1xuICB9XG5cbiAgYWRkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIGFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLnB1c2goc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBvciBwcm9vZiBhc3NlcnRpb24gdG8gdGhlIGJvdW5kZWQgY29udGV4dC5gKTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSkge1xuICAgIGxldCBjb25zdHJhaW50O1xuXG4gICAgaWYgKHRoaXMuY29uc3RyYWludHMgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0cmFpbnQgPSBzdXBlci5maW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdHJhaW50ID0gdGhpcy5jb25zdHJhaW50cy5maW5kKChjb25zdHJhaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnROb2RlTWF0Y2hlcyA9IGNvbnN0cmFpbnQubWF0Y2hDb25zdHJhaW50Tm9kZShjb25zdHJhaW50Tm9kZSk7XG5cbiAgICAgICAgaWYgKGNvbnN0cmFpbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gdGhpcy5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgICBncm91bmRlZFRlcm1zID0gW10sXG4gICAgICAgICAgZGVmaW5lZFZhcmlhYmxlcyA9IFtdO1xuXG4gICAgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgY29uc3QgdGVybU1hdGNoZXNHcm91bmRlZFRlcm0gPSBncm91bmRlZFRlcm1zLnNvbWUoKGdyb3VuZGVkVGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdW5kZWRUZXJtTm9kZSA9IGdyb3VuZGVkVGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICBncm91bmRlZFRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShncm91bmRlZFRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VuZGVkVGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRlcm1Hcm91bmRlZCA9IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0ZXJtR3JvdW5kZWQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gW10sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBjb25zdHJhaW50cyA9IG51bGwsXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIGJvdW5kZWRDb250ZXh0ID0gbmV3IEJvdW5kZWRDb250ZXh0KGNvbnRleHQsIGNvbnN0cmFpbnRzLCBhc3NpZ25tZW50cywgZXF1aXZhbGVuY2VzLCBkZWNsYXJlZFZhcmlhYmxlcywgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYm91bmRlZENvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnN0cmFpbnRzKGNvbnN0cmFpbnRzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbXSxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBib3VuZGVkQ29udGV4dCA9IG5ldyBCb3VuZGVkQ29udGV4dChjb250ZXh0LCBjb25zdHJhaW50cywgYXNzaWdubWVudHMsIGVxdWl2YWxlbmNlcywgZGVjbGFyZWRWYXJpYWJsZXMsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGJvdW5kZWRDb250ZXh0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvdW5kZWRDb250ZXh0OyJdLCJuYW1lcyI6WyJsYXN0IiwiY2xlYXIiLCJhcnJheVV0aWxpdGllcyIsIkJvdW5kZWRDb250ZXh0IiwiQ29udGV4dCIsImNvbnRleHQiLCJjb25zdHJhaW50cyIsImFzc2lnbm1lbnRzIiwiZXF1aXZhbGVuY2VzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0Q29uc3RyYWludHMiLCJnZXRBc3NpZ25tZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldENvbnRleHQiLCJtZXJnZUVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImdldFByb29mQXNzZXJ0aW9ucyIsInByb29mQXNzZXJ0aW9ucyIsImZpbHRlciIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnByb29mQXNzZXJ0aW9uIiwiaXNQcm9vZkFzc2VydGlvbiIsImdldFN0ZXBzIiwic3RlcHMiLCJwcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uU3RlcCIsImlzU3RlcCIsImdldExhc3RTdGVwIiwibGFzdFN0ZXAiLCJzdGVwc0xlbmd0aCIsImxlbmd0aCIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlcXVhbGl0eVJlbGZleGl2ZSIsImlzUmVmbGV4aXZlIiwiZXF1aXZhbGVuY2VzRnJvbUVxdWFsaXR5IiwiZGVidWciLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsInB1c2giLCJhc3NpZ25Bc3NpZ25tZW50cyIsImZvckVhY2giLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVTdHJpbmciLCJhZGRDb25zdHJhaW50IiwiY29uc3RyYWludCIsImNvbnN0cmFpbnRBIiwiY29uc3RyYWludFN0cmluZyIsImNvbnN0cmFpbnRCIiwiZmluZCIsImNvbnN0cmFpbnRBRXF1YWxUb0Fzc3VtcHRpb25CIiwiaXNFcXVhbFRvIiwiYWRkR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiYWRkQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIiLCJjb21wYXJlVmFyaWFibGVJZGVudGlmaWVyIiwiZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50Tm9kZU1hdGNoZXMiLCJtYXRjaENvbnN0cmFpbnROb2RlIiwiaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQiLCJpc1Rlcm1Hcm91bmRlZCIsInRlcm0iLCJncm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsInNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMiLCJ0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSIsInNvbWUiLCJncm91bmRlZFRlcm0iLCJncm91bmRlZFRlcm1Ob2RlIiwiZ2V0Tm9kZSIsImdyb3VuZGVkVGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsInRlcm1Hcm91bmRlZCIsImZyb21Ob3RoaW5nIiwiYm91bmRlZENvbnRleHQiLCJmcm9tQ29uc3RyYWludHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW1UQTs7O2VBQUE7OzsyQkFqVCtCO2dFQUVYOzhCQUVrRjs7Ozs7O0FBRXRHLE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWM7QUFFdEMsTUFBTUMsdUJBQXVCQyxnQkFBTztJQUNsQyxZQUFZQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLGlCQUFpQixFQUFFQyx5QkFBeUIsQ0FBRTtRQUN6RyxLQUFLLENBQUNMO1FB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
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _necessary = require("necessary");
12
12
  const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
13
- const _synoptic = require("../utilities/synoptic");
13
+ const _compression = require("../utilities/compression");
14
14
  function _interop_require_default(obj) {
15
15
  return obj && obj.__esModule ? obj : {
16
16
  default: obj
@@ -24,7 +24,7 @@ class BranchingContext extends _context.default {
24
24
  }
25
25
  getTerms(terms = []) {
26
26
  push(terms, this.terms);
27
- (0, _synoptic.compressTerms)(terms);
27
+ (0, _compression.compressTerms)(terms);
28
28
  return terms;
29
29
  }
30
30
  addTerm(term) {
@@ -58,4 +58,4 @@ class BranchingContext extends _context.default {
58
58
  }
59
59
  }
60
60
 
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JyYW5jaGluZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N5bm9wdGljXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyYW5jaGluZ0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIGNvbXByZXNzVGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBicmFuY2hpbmcgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgdGVybUIgPSB0aGlzLnRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKHRlcm1CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7dGVybVN0cmluZ30nIHRlcm0gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgYnJhbmNoaW5nIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGJyYW5jaGluZyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBjb21taXQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUZXJtcyh0aGlzLnRlcm1zKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICBicmFuY2hpbmdDb250ZXh0ID0gbmV3IEJyYW5jaGluZ0NvbnRleHQoY29udGV4dCwgdGVybXMpO1xuXG4gICAgcmV0dXJuIGJyYW5jaGluZ0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJCcmFuY2hpbmdDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImdldFRlcm1zIiwiY29tcHJlc3NUZXJtcyIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybUEiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtQiIsImZpbmQiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiY29tbWl0IiwiZ2V0Q29udGV4dCIsImZyb21Ob3RoaW5nIiwiYnJhbmNoaW5nQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFxQkE7OzsyQkFSVTtnRUFFWDswQkFFVTs7Ozs7O0FBRTlCLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1GLHlCQUF5QkcsZ0JBQU87SUFDbkQsWUFBWUMsT0FBTyxFQUFFQyxLQUFLLENBQUU7UUFDMUIsS0FBSyxDQUFDRDtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtJQUNmO0lBRUFDLFNBQVNELFFBQVEsRUFBRSxFQUFFO1FBQ25CSixLQUFLSSxPQUFPLElBQUksQ0FBQ0EsS0FBSztRQUV0QkUsSUFBQUEsdUJBQWEsRUFBQ0Y7UUFFZCxPQUFPQTtJQUNUO0lBRUFHLFFBQVFDLElBQUksRUFBRTtRQUNaLE1BQU1DLFFBQVFELE1BQ1JMLFVBQVUsSUFBSSxFQUNkTyxhQUFhRixLQUFLRyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUVGLFdBQVcsa0NBQWtDLENBQUM7UUFFM0UsTUFBTUcsUUFBUSxJQUFJLENBQUNULEtBQUssQ0FBQ1UsSUFBSSxDQUFDLENBQUNOO1lBQzdCLE1BQU1LLFFBQVFMLE1BQ1JPLG9CQUFvQk4sTUFBTU8sU0FBUyxDQUFDSDtZQUUxQyxJQUFJRSxtQkFBbUI7Z0JBQ3JCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFTixJQUFJRixVQUFVLE1BQU07WUFDbEJWLFFBQVFTLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRUYsV0FBVyx1REFBdUQsQ0FBQztRQUMzRixPQUFPO1lBQ0wsSUFBSSxDQUFDTixLQUFLLENBQUNKLElBQUksQ0FBQ1E7UUFDbEI7UUFFQUwsUUFBUWMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFUCxXQUFXLGdDQUFnQyxDQUFDO0lBQzdFO0lBRUFRLFNBQVNkLEtBQUssRUFBRTtRQUNkQSxNQUFNZSxPQUFPLENBQUMsQ0FBQ1g7WUFDYixJQUFJLENBQUNELE9BQU8sQ0FBQ0M7UUFDZjtJQUNGO0lBRUFZLFNBQVM7UUFDUCxNQUFNakIsVUFBVSxJQUFJLENBQUNrQixVQUFVO1FBRS9CbEIsUUFBUWUsUUFBUSxDQUFDLElBQUksQ0FBQ2QsS0FBSztJQUM3QjtJQUVBLE9BQU9rQixZQUFZbkIsT0FBTyxFQUFFO1FBQzFCLE1BQU1DLFFBQVEsRUFBRSxFQUNWbUIsbUJBQW1CLElBQUl4QixpQkFBaUJJLFNBQVNDO1FBRXZELE9BQU9tQjtJQUNUO0FBQ0YifQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2JyYW5jaGluZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbXByZXNzaW9uXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyYW5jaGluZ0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICBwdXNoKHRlcm1zLCB0aGlzLnRlcm1zKTtcblxuICAgIGNvbXByZXNzVGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHRvIHRoZSBicmFuY2hpbmcgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgdGVybUIgPSB0aGlzLnRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKHRlcm1CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7dGVybVN0cmluZ30nIHRlcm0gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgYnJhbmNoaW5nIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGJyYW5jaGluZyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkVGVybXModGVybXMpIHtcbiAgICB0ZXJtcy5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICB0aGlzLmFkZFRlcm0odGVybSk7XG4gICAgfSk7XG4gIH1cblxuICBjb21taXQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUZXJtcyh0aGlzLnRlcm1zKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICBicmFuY2hpbmdDb250ZXh0ID0gbmV3IEJyYW5jaGluZ0NvbnRleHQoY29udGV4dCwgdGVybXMpO1xuXG4gICAgcmV0dXJuIGJyYW5jaGluZ0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJCcmFuY2hpbmdDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImdldFRlcm1zIiwiY29tcHJlc3NUZXJtcyIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybUEiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtQiIsImZpbmQiLCJ0ZXJtQUVxdWFsVG9UZXJtQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiY29tbWl0IiwiZ2V0Q29udGV4dCIsImZyb21Ob3RoaW5nIiwiYnJhbmNoaW5nQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFxQkE7OzsyQkFSVTtnRUFFWDs2QkFFVTs7Ozs7O0FBRTlCLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1GLHlCQUF5QkcsZ0JBQU87SUFDbkQsWUFBWUMsT0FBTyxFQUFFQyxLQUFLLENBQUU7UUFDMUIsS0FBSyxDQUFDRDtRQUVOLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtJQUNmO0lBRUFDLFNBQVNELFFBQVEsRUFBRSxFQUFFO1FBQ25CSixLQUFLSSxPQUFPLElBQUksQ0FBQ0EsS0FBSztRQUV0QkUsSUFBQUEsMEJBQWEsRUFBQ0Y7UUFFZCxPQUFPQTtJQUNUO0lBRUFHLFFBQVFDLElBQUksRUFBRTtRQUNaLE1BQU1DLFFBQVFELE1BQ1JMLFVBQVUsSUFBSSxFQUNkTyxhQUFhRixLQUFLRyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUVGLFdBQVcsa0NBQWtDLENBQUM7UUFFM0UsTUFBTUcsUUFBUSxJQUFJLENBQUNULEtBQUssQ0FBQ1UsSUFBSSxDQUFDLENBQUNOO1lBQzdCLE1BQU1LLFFBQVFMLE1BQ1JPLG9CQUFvQk4sTUFBTU8sU0FBUyxDQUFDSDtZQUUxQyxJQUFJRSxtQkFBbUI7Z0JBQ3JCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFTixJQUFJRixVQUFVLE1BQU07WUFDbEJWLFFBQVFTLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRUYsV0FBVyx1REFBdUQsQ0FBQztRQUMzRixPQUFPO1lBQ0wsSUFBSSxDQUFDTixLQUFLLENBQUNKLElBQUksQ0FBQ1E7UUFDbEI7UUFFQUwsUUFBUWMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFUCxXQUFXLGdDQUFnQyxDQUFDO0lBQzdFO0lBRUFRLFNBQVNkLEtBQUssRUFBRTtRQUNkQSxNQUFNZSxPQUFPLENBQUMsQ0FBQ1g7WUFDYixJQUFJLENBQUNELE9BQU8sQ0FBQ0M7UUFDZjtJQUNGO0lBRUFZLFNBQVM7UUFDUCxNQUFNakIsVUFBVSxJQUFJLENBQUNrQixVQUFVO1FBRS9CbEIsUUFBUWUsUUFBUSxDQUFDLElBQUksQ0FBQ2QsS0FBSztJQUM3QjtJQUVBLE9BQU9rQixZQUFZbkIsT0FBTyxFQUFFO1FBQzFCLE1BQU1DLFFBQVEsRUFBRSxFQUNWbUIsbUJBQW1CLElBQUl4QixpQkFBaUJJLFNBQVNDO1FBRXZELE9BQU9tQjtJQUNUO0FBQ0YifQ==
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _necessary = require("necessary");
12
12
  const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
13
- const _synoptic = require("../utilities/synoptic");
13
+ const _compression = require("../utilities/compression");
14
14
  const _json = require("../utilities/json");
15
15
  function _interop_require_default(obj) {
16
16
  return obj && obj.__esModule ? obj : {
@@ -38,84 +38,84 @@ class MnemicContext extends _context.default {
38
38
  const context = this.getContext();
39
39
  push(terms, this.terms);
40
40
  context.getTerms(terms);
41
- (0, _synoptic.compressTerms)(context);
41
+ (0, _compression.compressTerms)(context);
42
42
  return terms;
43
43
  }
44
44
  getGoals(goals = []) {
45
45
  const context = this.getContext();
46
46
  push(goals, this.goals);
47
47
  context.getGoals(goals);
48
- (0, _synoptic.compressGoals)(context);
48
+ (0, _compression.compressGoals)(context);
49
49
  return goals;
50
50
  }
51
51
  getFrames(frames = []) {
52
52
  const context = this.getContext();
53
53
  push(frames, this.frames);
54
54
  context.getFrames(frames);
55
- (0, _synoptic.compressFrames)(context);
55
+ (0, _compression.compressFrames)(context);
56
56
  return frames;
57
57
  }
58
58
  getEqualities(equalities = []) {
59
59
  const context = this.getContext();
60
60
  push(equalities, this.equalities);
61
61
  context.getEqualities(equalities);
62
- (0, _synoptic.compressEqualities)(context);
62
+ (0, _compression.compressEqualities)(context);
63
63
  return equalities;
64
64
  }
65
65
  getJudgements(judgements = []) {
66
66
  const context = this.getContext();
67
67
  push(judgements, this.judgements);
68
68
  context.getJudgements(judgements);
69
- (0, _synoptic.compressJudgements)(context);
69
+ (0, _compression.compressJudgements)(context);
70
70
  return judgements;
71
71
  }
72
72
  getStatements(statements = []) {
73
73
  const context = this.getContext();
74
74
  push(statements, this.statements);
75
75
  context.getStatements(statements);
76
- (0, _synoptic.compressStatements)(context);
76
+ (0, _compression.compressStatements)(context);
77
77
  return statements;
78
78
  }
79
79
  getSignatures(signatures = []) {
80
80
  const context = this.getContext();
81
81
  push(signatures, this.signatures);
82
82
  context.getSignatures(signatures);
83
- (0, _synoptic.compressSignatures)(context);
83
+ (0, _compression.compressSignatures)(context);
84
84
  return signatures;
85
85
  }
86
86
  getAssertions(assertions = []) {
87
87
  const context = this.getContext();
88
88
  push(assertions, this.assertions);
89
89
  context.getAssertions(assertions);
90
- (0, _synoptic.compressAssertions)(context);
90
+ (0, _compression.compressAssertions)(context);
91
91
  return assertions;
92
92
  }
93
93
  getReferences(references = []) {
94
94
  const context = this.getContext();
95
95
  push(references, this.references);
96
96
  context.getReferences(references);
97
- (0, _synoptic.compressReferences)(context);
97
+ (0, _compression.compressReferences)(context);
98
98
  return references;
99
99
  }
100
100
  getAssumptions(assumptions = []) {
101
101
  const context = this.getContext();
102
102
  push(assumptions, this.assumptions);
103
103
  context.getAssumptions(assumptions);
104
- (0, _synoptic.compressAssumptions)(context);
104
+ (0, _compression.compressAssumptions)(context);
105
105
  return assumptions;
106
106
  }
107
107
  getMetavariables(metavariables = []) {
108
108
  const context = this.getContext();
109
109
  push(metavariables, this.metavariables);
110
110
  context.getMetavariables(metavariables);
111
- (0, _synoptic.compressMetavariables)(context);
111
+ (0, _compression.compressMetavariables)(context);
112
112
  return metavariables;
113
113
  }
114
114
  getSubstitutions(substitutions = []) {
115
115
  const context = this.getContext();
116
116
  push(substitutions, this.substitutions);
117
117
  context.getSubstitutions(substitutions);
118
- (0, _synoptic.compressSubstitutions)(context);
118
+ (0, _compression.compressSubstitutions)(context);
119
119
  return substitutions;
120
120
  }
121
121
  addTerm(term) {
@@ -312,10 +312,6 @@ class MnemicContext extends _context.default {
312
312
  }) || null;
313
313
  return substitution;
314
314
  }
315
- findVariableByVariableNode(variableNode) {
316
- const variableIdentifier = variableNode.getVariableIdentifier(), declaredVariable = this.findDeclaredVariableByVariableIdentifier(variableIdentifier), variable = declaredVariable; ///
317
- return variable;
318
- }
319
315
  isTermPresentByTermNode(termNode) {
320
316
  const term = this.findTermByTermNode(termNode), termPresent = term !== null;
321
317
  return termPresent;
@@ -421,4 +417,4 @@ class MnemicContext extends _context.default {
421
417
  }
422
418
  }
423
419
 
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMsXG4gICAgICAgICBjb21wcmVzc0dvYWxzLFxuICAgICAgICAgY29tcHJlc3NGcmFtZXMsXG4gICAgICAgICBjb21wcmVzc0VxdWFsaXRpZXMsXG4gICAgICAgICBjb21wcmVzc0p1ZGdlbWVudHMsXG4gICAgICAgICBjb21wcmVzc0Fzc2VydGlvbnMsXG4gICAgICAgICBjb21wcmVzc1N0YXRlbWVudHMsXG4gICAgICAgICBjb21wcmVzc1NpZ25hdHVyZXMsXG4gICAgICAgICBjb21wcmVzc1JlZmVyZW5jZXMsXG4gICAgICAgICBjb21wcmVzc0Fzc3VtcHRpb25zLFxuICAgICAgICAgY29tcHJlc3NNZXRhdmFyaWFibGVzLFxuICAgICAgICAgY29tcHJlc3NTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zeW5vcHRpY1wiO1xuaW1wb3J0IHsgdGVybXNGcm9tSlNPTixcbiAgICAgICAgIGdvYWxzRnJvbUpTT04sXG4gICAgICAgICBmcmFtZXNGcm9tSlNPTixcbiAgICAgICAgIHRlcm1zVG9UZXJtc0pTT04sXG4gICAgICAgICBnb2Fsc1RvR29hbHNKU09OLFxuICAgICAgICAgZnJhbWVzVG9GcmFtZXNKU09OLFxuICAgICAgICAgZXF1YWxpdGllc0Zyb21KU09OLFxuICAgICAgICAganVkZ2VtZW50c0Zyb21KU09OLFxuICAgICAgICAgc3RhdGVtZW50c0Zyb21KU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc0Zyb21KU09OLFxuICAgICAgICAgcmVmZXJlbmNlc0Zyb21KU09OLFxuICAgICAgICAgc2lnbmF0dXJlc0Zyb21KU09OLFxuICAgICAgICAgYXNzdW1wdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIG1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OLFxuICAgICAgICAgZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04sXG4gICAgICAgICBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZXNUb1NpZ25hdHVyZXNKU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04sXG4gICAgICAgICByZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTixcbiAgICAgICAgIGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04sXG4gICAgICAgICBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1uZW1pY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGdvYWxzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHNpZ25hdHVyZXMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5nb2FscyA9IGdvYWxzO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7XG4gICAgdGhpcy5qdWRnZW1lbnRzID0ganVkZ2VtZW50cztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5zaWduYXR1cmVzID0gc2lnbmF0dXJlcztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIGNvbXByZXNzVGVybXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRHb2Fscyhnb2FscyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChnb2FscywgdGhpcy5nb2Fscyk7XG5cbiAgICBjb250ZXh0LmdldEdvYWxzKGdvYWxzKTtcblxuICAgIGNvbXByZXNzR29hbHMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ29hbHM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIGNvbXByZXNzRnJhbWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goanVkZ2VtZW50cywgdGhpcy5qdWRnZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzKTtcblxuICAgIGNvbXByZXNzSnVkZ2VtZW50cyhjb250ZXh0KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICBjb21wcmVzc1N0YXRlbWVudHMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzaWduYXR1cmVzLCB0aGlzLnNpZ25hdHVyZXMpO1xuXG4gICAgY29udGV4dC5nZXRTaWduYXR1cmVzKHNpZ25hdHVyZXMpO1xuXG4gICAgY29tcHJlc3NTaWduYXR1cmVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIGNvbXByZXNzQXNzZXJ0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHJlZmVyZW5jZXMsIHRoaXMucmVmZXJlbmNlcyk7XG5cbiAgICBjb250ZXh0LmdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgICBjb21wcmVzc1JlZmVyZW5jZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3N1bXB0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChtZXRhdmFyaWFibGVzLCB0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29tcHJlc3NNZXRhdmFyaWFibGVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3Vic3RpdHV0aW9ucywgdGhpcy5zdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRHb2FsKGdvYWwpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZ29hbFN0cmluZyA9IGdvYWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5nb2Fscy5wdXNoKGdvYWwpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmVxdWFsaXRpZXMucHVzaChlcXVhbGl0eSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRKdWRnZW1lbnQoanVkZ2VtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGp1ZGdlbWVudFN0cmluZyA9IGp1ZGdlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5qdWRnZW1lbnRzLnB1c2goanVkZ2VtZW50KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IHNpZ25hdHVyZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMucmVmZXJlbmNlcy5wdXNoKHJlZmVyZW5jZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMucHVzaChzdWJzdGl0dXRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIHRlcm1zLmZvckVhY2goKHRlcm0pID0+IHtcbiAgICAgIHRoaXMuYWRkVGVybSh0ZXJtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRHb2FsQnlHb2FsTm9kZShnb2FsTm9kZSkge1xuICAgIGNvbnN0IGdvYWxzID0gdGhpcy5nZXRHb2FscygpLFxuICAgICAgICAgIGdvYWwgPSBnb2Fscy5maW5kKChnb2FsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnb2FsTm9kZU1hdGNoZXMgPSBnb2FsLm1hdGNoR29hbE5vZGUoZ29hbE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZ29hbE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZ29hbDtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50cy5maW5kKChqdWRnZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKGp1ZGdlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUpIHtcbiAgICBjb25zdCBzaWduYXR1cmVzID0gdGhpcy5nZXRTaWduYXR1cmVzKCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlcy5maW5kKChzaWduYXR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZU5vZGVNYXRjaGVzID0gc2lnbmF0dXJlLm1hdGNoU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMuZmluZCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlLm1hdGNoUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGU7ICAvLy9cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGlzVGVybVByZXNlbnRCeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybSA9IHRoaXMuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgIHRlcm1QcmVzZW50ID0gKHRlcm0gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNHb2FsUHJlc2VudEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBnb2FsID0gdGhpcy5maW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpLFxuICAgICAgICAgIGdvYWxQcmVzZW50ID0gKGdvYWwgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGdvYWxQcmVzZW50O1xuICB9XG5cbiAgaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICBmcmFtZVByZXNlbnQgPSAoZnJhbWUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSB0aGlzLmZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSksXG4gICAgICAgICAgZXF1YWxpdHlQcmVzZW50ID0gKGVxdWFsaXR5ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBlcXVhbGl0eVByZXNlbnQ7XG4gIH1cblxuICBpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSkge1xuICAgIGNvbnN0IGp1ZGdlbWVudCA9IHRoaXMuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICBqdWRnZW1lbnRQcmVzZW50ID0gKGp1ZGdlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSAoYXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IChzdGF0ZW1lbnQgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1NpZ25hdHVyZVByZXNlbnRCeVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSxcbiAgICAgICAgICBzaWduYXR1cmVQcmVzZW50ID0gKHNpZ25hdHVyZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlUHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbiA9IHRoaXMuZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBhc3N1bXB0aW9uUHJlc2VudCA9IChhc3N1bXB0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHJlZmVyZW5jZVByZXNlbnQgPSAocmVmZXJlbmNlICE9PSBudWxsKTtcblxuICAgIHJldHVybiByZWZlcmVuY2VQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZW5Ob2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlbiA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVuTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlblByZXNlbnQgPSAobWV0YXZhcmlhYmxlbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlblByZXNlbnQ7XG4gIH1cblxuICBjb21taXQoZWxlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIGVsZW1lbnQuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoanNvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzOyAvLy9cblxuICAgIHRoaXMudGVybXMgPSB0ZXJtc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzID0gbWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuZ29hbHMgPSBnb2Fsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLmp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICBnb2FscyA9IHRoaXMuZ2V0R29hbHMoKSxcbiAgICAgICAgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgIGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICBzaWduYXR1cmVzID0gdGhpcy5nZXRTaWduYXR1cmVzKCksXG4gICAgICAgIHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpO1xuXG4gICAgY29uc3QgdGVybXNKU09OID0gdGVybXNUb1Rlcm1zSlNPTih0ZXJtcyksXG4gICAgICAgICAgZ29hbHNKU09OID0gZ29hbHNUb0dvYWxzSlNPTihnb2FscyksXG4gICAgICAgICAgZnJhbWVzSlNPTiA9IGZyYW1lc1RvRnJhbWVzSlNPTihmcmFtZXMpLFxuICAgICAgICAgIGVxdWFsaXRpZXNKU09OID0gZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04oZXF1YWxpdGllcyksXG4gICAgICAgICAganVkZ2VtZW50c0pTT04gPSBqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTihqdWRnZW1lbnRzKSxcbiAgICAgICAgICBhc3NlcnRpb25zSlNPTiA9IGFzc2VydGlvbnNUb0Fzc2VydGlvbnNKU09OKGFzc2VydGlvbnMpLFxuICAgICAgICAgIHN0YXRlbWVudHNKU09OID0gc3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04oc3RhdGVtZW50cyksXG4gICAgICAgICAgc2lnbmF0dXJlc0pTT04gPSBzaWduYXR1cmVzVG9TaWduYXR1cmVzSlNPTihzaWduYXR1cmVzKSxcbiAgICAgICAgICByZWZlcmVuY2VzSlNPTiA9IHJlZmVyZW5jZXNUb1JlZmVyZW5jZXNKU09OKHJlZmVyZW5jZXMpLFxuICAgICAgICAgIGFzc3VtcHRpb25zSlNPTiA9IGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04oYXNzdW1wdGlvbnMpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXNKU09OID0gbWV0YXZhcmlhYmxlc1RvTWV0YXZhcmlhYmxlc0pTT04obWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uc0pTT04gPSBzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTihzdWJzdGl0dXRpb25zKTtcblxuICAgIHRlcm1zID0gdGVybXNKU09OOyAvLy9cbiAgICBnb2FscyA9IGdvYWxzSlNPTjsgLy8vXG4gICAgZnJhbWVzID0gZnJhbWVzSlNPTjsgLy8vXG4gICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNKU09OOyAvLy9cbiAgICBqdWRnZW1lbnRzID0ganVkZ2VtZW50c0pTT047IC8vL1xuICAgIGFzc2VydGlvbnMgPSBhc3NlcnRpb25zSlNPTjsgLy8vXG4gICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNKU09OOyAvLy9cbiAgICBzaWduYXR1cmVzID0gc2lnbmF0dXJlc0pTT047IC8vL1xuICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzSlNPTjsgLy8vXG4gICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0pTT047IC8vL1xuICAgIG1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzSlNPTjsgIC8vXG4gICAgc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNKU09OOyAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICB0ZXJtcyxcbiAgICAgIGdvYWxzLFxuICAgICAgZnJhbWVzLFxuICAgICAgZXF1YWxpdGllcyxcbiAgICAgIGp1ZGdlbWVudHMsXG4gICAgICBhc3NlcnRpb25zLFxuICAgICAgc3RhdGVtZW50cyxcbiAgICAgIHNpZ25hdHVyZXMsXG4gICAgICByZWZlcmVuY2VzLFxuICAgICAgYXNzdW1wdGlvbnMsXG4gICAgICBtZXRhdmFyaWFibGVzLFxuICAgICAgc3Vic3RpdHV0aW9uc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBudWxsLFxuICAgICAgICAgIGdvYWxzID0gbnVsbCxcbiAgICAgICAgICBmcmFtZXMgPSBudWxsLFxuICAgICAgICAgIGVxdWFsaXRpZXMgPSBudWxsLFxuICAgICAgICAgIGp1ZGdlbWVudHMgPSBudWxsLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBudWxsLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBudWxsLFxuICAgICAgICAgIHNpZ25hdHVyZXMgPSBudWxsLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSBudWxsLFxuICAgICAgICAgIGFzc3VtcHRpb25zID0gbnVsbCxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgICBtbmVtaWNDb250ZXh0ID0gbmV3IE1uZW1pY0NvbnRleHQoY29udGV4dCwgdGVybXMsIGdvYWxzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHNpZ25hdHVyZXMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIG1uZW1pY0NvbnRleHQuaW5pdGlhbGlzZShqc29uKTtcblxuICAgIHJldHVybiBtbmVtaWNDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIGdvYWxzID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgZXF1YWxpdGllcyA9IFtdLFxuICAgICAgICAgIGp1ZGdlbWVudHMgPSBbXSxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gW10sXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIHNpZ25hdHVyZXMgPSBbXSxcbiAgICAgICAgICByZWZlcmVuY2VzID0gW10sXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgZ29hbHMsIGZyYW1lcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgc2lnbmF0dXJlcywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJNbmVtaWNDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJ0ZXJtcyIsImdvYWxzIiwiZnJhbWVzIiwiZXF1YWxpdGllcyIsImp1ZGdlbWVudHMiLCJhc3NlcnRpb25zIiwic3RhdGVtZW50cyIsInNpZ25hdHVyZXMiLCJyZWZlcmVuY2VzIiwiYXNzdW1wdGlvbnMiLCJtZXRhdmFyaWFibGVzIiwic3Vic3RpdHV0aW9ucyIsImdldFRlcm1zIiwiZ2V0Q29udGV4dCIsImNvbXByZXNzVGVybXMiLCJnZXRHb2FscyIsImNvbXByZXNzR29hbHMiLCJnZXRGcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJjb21wcmVzc0VxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwiY29tcHJlc3NKdWRnZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImNvbXByZXNzU3RhdGVtZW50cyIsImdldFNpZ25hdHVyZXMiLCJjb21wcmVzc1NpZ25hdHVyZXMiLCJnZXRBc3NlcnRpb25zIiwiY29tcHJlc3NBc3NlcnRpb25zIiwiZ2V0UmVmZXJlbmNlcyIsImNvbXByZXNzUmVmZXJlbmNlcyIsImdldEFzc3VtcHRpb25zIiwiY29tcHJlc3NBc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJjb21wcmVzc01ldGF2YXJpYWJsZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3NTdWJzdGl0dXRpb25zIiwiYWRkVGVybSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsImFkZEdvYWwiLCJnb2FsIiwiZ29hbFN0cmluZyIsImFkZEZyYW1lIiwiZnJhbWUiLCJmcmFtZVN0cmluZyIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eVN0cmluZyIsImFkZEp1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudFN0cmluZyIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvblN0cmluZyIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsImFkZFNpZ25hdHVyZSIsInNpZ25hdHVyZSIsInNpZ25hdHVyZVN0cmluZyIsImFkZFJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsImFkZEFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblN0cmluZyIsImFkZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyIsImFkZFRlcm1zIiwiZm9yRWFjaCIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwiZmluZCIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJmaW5kR29hbEJ5R29hbE5vZGUiLCJnb2FsTm9kZSIsImdvYWxOb2RlTWF0Y2hlcyIsIm1hdGNoR29hbE5vZGUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwiZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVOb2RlTWF0Y2hlcyIsIm1hdGNoU2lnbmF0dXJlTm9kZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSIsIm1hdGNoUmVmZXJlbmNlTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNHb2FsUHJlc2VudEJ5R29hbE5vZGUiLCJnb2FsUHJlc2VudCIsImlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUiLCJmcmFtZVByZXNlbnQiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNKdWRnZW1lbnRQcmVzZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50UHJlc2VudCIsImlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvblByZXNlbnQiLCJpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRQcmVzZW50IiwiaXNTaWduYXR1cmVQcmVzZW50QnlTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlUHJlc2VudCIsImlzQXNzdW1wdGlvblByZXNlbnRCeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvblByZXNlbnQiLCJpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlbk5vZGUiLCJtZXRhdmFyaWFibGVuIiwibWV0YXZhcmlhYmxlblByZXNlbnQiLCJjb21taXQiLCJlbGVtZW50Iiwic2V0Q29udGV4dCIsImluaXRpYWxpc2UiLCJqc29uIiwidGVybXNGcm9tSlNPTiIsIm1ldGF2YXJpYWJsZXNGcm9tSlNPTiIsInN0YXRlbWVudHNGcm9tSlNPTiIsInJlZmVyZW5jZXNGcm9tSlNPTiIsImVxdWFsaXRpZXNGcm9tSlNPTiIsImFzc3VtcHRpb25zRnJvbUpTT04iLCJnb2Fsc0Zyb21KU09OIiwiZnJhbWVzRnJvbUpTT04iLCJqdWRnZW1lbnRzRnJvbUpTT04iLCJhc3NlcnRpb25zRnJvbUpTT04iLCJzaWduYXR1cmVzRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJ0b0pTT04iLCJ0ZXJtc0pTT04iLCJ0ZXJtc1RvVGVybXNKU09OIiwiZ29hbHNKU09OIiwiZ29hbHNUb0dvYWxzSlNPTiIsImZyYW1lc0pTT04iLCJmcmFtZXNUb0ZyYW1lc0pTT04iLCJlcXVhbGl0aWVzSlNPTiIsImVxdWFsaXRpZXNUb0VxdWFsaXRpZXNKU09OIiwianVkZ2VtZW50c0pTT04iLCJqdWRnZW1lbnRzVG9KdWRnZW1lbnRzSlNPTiIsImFzc2VydGlvbnNKU09OIiwiYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04iLCJzdGF0ZW1lbnRzSlNPTiIsInN0YXRlbWVudHNUb1N0YXRlbWVudHNKU09OIiwic2lnbmF0dXJlc0pTT04iLCJzaWduYXR1cmVzVG9TaWduYXR1cmVzSlNPTiIsInJlZmVyZW5jZXNKU09OIiwicmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04iLCJhc3N1bXB0aW9uc0pTT04iLCJhc3N1bXB0aW9uc1RvQXNzdW1wdGlvbnNKU09OIiwibWV0YXZhcmlhYmxlc0pTT04iLCJtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTiIsInN1YnN0aXR1dGlvbnNKU09OIiwic3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04iLCJmcm9tSlNPTiIsIm1uZW1pY0NvbnRleHQiLCJmcm9tTm90aGluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBNkNBOzs7ZUFBcUJBOzs7MkJBM0NVO2dFQUVYOzBCQWFrQjtzQkF3Qlc7Ozs7OztBQUVqRCxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUVoQixNQUFNRixzQkFBc0JHLGdCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsQ0FBRTtRQUM1SixLQUFLLENBQUNaO1FBRU4sSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQ0MsYUFBYSxHQUFHQTtRQUNyQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsU0FBU1osUUFBUSxFQUFFLEVBQUU7UUFDbkIsTUFBTUQsVUFBVSxJQUFJLENBQUNjLFVBQVU7UUFF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
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21uZW1pYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0XCI7XG5cbmltcG9ydCB7IGNvbXByZXNzVGVybXMsXG4gICAgICAgICBjb21wcmVzc0dvYWxzLFxuICAgICAgICAgY29tcHJlc3NGcmFtZXMsXG4gICAgICAgICBjb21wcmVzc0VxdWFsaXRpZXMsXG4gICAgICAgICBjb21wcmVzc0p1ZGdlbWVudHMsXG4gICAgICAgICBjb21wcmVzc0Fzc2VydGlvbnMsXG4gICAgICAgICBjb21wcmVzc1N0YXRlbWVudHMsXG4gICAgICAgICBjb21wcmVzc1NpZ25hdHVyZXMsXG4gICAgICAgICBjb21wcmVzc1JlZmVyZW5jZXMsXG4gICAgICAgICBjb21wcmVzc0Fzc3VtcHRpb25zLFxuICAgICAgICAgY29tcHJlc3NNZXRhdmFyaWFibGVzLFxuICAgICAgICAgY29tcHJlc3NTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb21wcmVzc2lvblwiO1xuaW1wb3J0IHsgdGVybXNGcm9tSlNPTixcbiAgICAgICAgIGdvYWxzRnJvbUpTT04sXG4gICAgICAgICBmcmFtZXNGcm9tSlNPTixcbiAgICAgICAgIHRlcm1zVG9UZXJtc0pTT04sXG4gICAgICAgICBnb2Fsc1RvR29hbHNKU09OLFxuICAgICAgICAgZnJhbWVzVG9GcmFtZXNKU09OLFxuICAgICAgICAgZXF1YWxpdGllc0Zyb21KU09OLFxuICAgICAgICAganVkZ2VtZW50c0Zyb21KU09OLFxuICAgICAgICAgc3RhdGVtZW50c0Zyb21KU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc0Zyb21KU09OLFxuICAgICAgICAgcmVmZXJlbmNlc0Zyb21KU09OLFxuICAgICAgICAgc2lnbmF0dXJlc0Zyb21KU09OLFxuICAgICAgICAgYXNzdW1wdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIG1ldGF2YXJpYWJsZXNGcm9tSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OLFxuICAgICAgICAgZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04sXG4gICAgICAgICBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZXNUb1NpZ25hdHVyZXNKU09OLFxuICAgICAgICAgYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04sXG4gICAgICAgICByZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTixcbiAgICAgICAgIGFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04sXG4gICAgICAgICBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1uZW1pY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGdvYWxzLCBmcmFtZXMsIGVxdWFsaXRpZXMsIGp1ZGdlbWVudHMsIGFzc2VydGlvbnMsIHN0YXRlbWVudHMsIHNpZ25hdHVyZXMsIHJlZmVyZW5jZXMsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5nb2FscyA9IGdvYWxzO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIHRoaXMuZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7XG4gICAgdGhpcy5qdWRnZW1lbnRzID0ganVkZ2VtZW50cztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5zaWduYXR1cmVzID0gc2lnbmF0dXJlcztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9ucztcbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaCh0ZXJtcywgdGhpcy50ZXJtcyk7XG5cbiAgICBjb250ZXh0LmdldFRlcm1zKHRlcm1zKTtcblxuICAgIGNvbXByZXNzVGVybXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRHb2Fscyhnb2FscyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChnb2FscywgdGhpcy5nb2Fscyk7XG5cbiAgICBjb250ZXh0LmdldEdvYWxzKGdvYWxzKTtcblxuICAgIGNvbXByZXNzR29hbHMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ29hbHM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGZyYW1lcywgdGhpcy5mcmFtZXMpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIGNvbXByZXNzRnJhbWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChlcXVhbGl0aWVzLCB0aGlzLmVxdWFsaXRpZXMpO1xuXG4gICAgY29udGV4dC5nZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMpO1xuXG4gICAgY29tcHJlc3NFcXVhbGl0aWVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXRpZXM7XG4gIH1cblxuICBnZXRKdWRnZW1lbnRzKGp1ZGdlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goanVkZ2VtZW50cywgdGhpcy5qdWRnZW1lbnRzKTtcblxuICAgIGNvbnRleHQuZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzKTtcblxuICAgIGNvbXByZXNzSnVkZ2VtZW50cyhjb250ZXh0KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHN0YXRlbWVudHMsIHRoaXMuc3RhdGVtZW50cyk7XG5cbiAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICBjb21wcmVzc1N0YXRlbWVudHMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChzaWduYXR1cmVzLCB0aGlzLnNpZ25hdHVyZXMpO1xuXG4gICAgY29udGV4dC5nZXRTaWduYXR1cmVzKHNpZ25hdHVyZXMpO1xuXG4gICAgY29tcHJlc3NTaWduYXR1cmVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKGFzc2VydGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goYXNzZXJ0aW9ucywgdGhpcy5hc3NlcnRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zKTtcblxuICAgIGNvbXByZXNzQXNzZXJ0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcyhyZWZlcmVuY2VzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKHJlZmVyZW5jZXMsIHRoaXMucmVmZXJlbmNlcyk7XG5cbiAgICBjb250ZXh0LmdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgICBjb21wcmVzc1JlZmVyZW5jZXMoY29udGV4dCk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCB0aGlzLmFzc3VtcHRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuXG4gICAgY29tcHJlc3NBc3N1bXB0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMobWV0YXZhcmlhYmxlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChtZXRhdmFyaWFibGVzLCB0aGlzLm1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgY29tcHJlc3NNZXRhdmFyaWFibGVzKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goc3Vic3RpdHV0aW9ucywgdGhpcy5zdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyhjb250ZXh0KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRHb2FsKGdvYWwpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZ29hbFN0cmluZyA9IGdvYWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5nb2Fscy5wdXNoKGdvYWwpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmZyYW1lcy5wdXNoKGZyYW1lKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGVxdWFsaXR5U3RyaW5nID0gZXF1YWxpdHkuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmVxdWFsaXRpZXMucHVzaChlcXVhbGl0eSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZXF1YWxpdHlTdHJpbmd9JyBlcXVhbGl0eSB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRKdWRnZW1lbnQoanVkZ2VtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGp1ZGdlbWVudFN0cmluZyA9IGp1ZGdlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50IHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5qdWRnZW1lbnRzLnB1c2goanVkZ2VtZW50KTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Fzc2VydGlvblN0cmluZ30nIGFzc2VydGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMuYXNzZXJ0aW9ucy5wdXNoKGFzc2VydGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN0YXRlbWVudChzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IHNpZ25hdHVyZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlIHRvIHRoZSBtbmVtaWMgY29udGV4dC4uLmApO1xuXG4gICAgdGhpcy5zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUgdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMucmVmZXJlbmNlcy5wdXNoKHJlZmVyZW5jZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLmFzc3VtcHRpb25zLnB1c2goYXNzdW1wdGlvbik7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB0byB0aGUgbW5lbWljIGNvbnRleHQuLi5gKTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlcy5wdXNoKG1ldGF2YXJpYWJsZSk7XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHRvIHRoZSBtbmVtaWMgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIG1uZW1pYyBjb250ZXh0Li4uYCk7XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMucHVzaChzdWJzdGl0dXRpb24pO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgbW5lbWljIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIHRlcm1zLmZvckVhY2goKHRlcm0pID0+IHtcbiAgICAgIHRoaXMuYWRkVGVybSh0ZXJtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRHb2FsQnlHb2FsTm9kZShnb2FsTm9kZSkge1xuICAgIGNvbnN0IGdvYWxzID0gdGhpcy5nZXRHb2FscygpLFxuICAgICAgICAgIGdvYWwgPSBnb2Fscy5maW5kKChnb2FsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnb2FsTm9kZU1hdGNoZXMgPSBnb2FsLm1hdGNoR29hbE5vZGUoZ29hbE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZ29hbE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZ29hbDtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgZXF1YWxpdHkgPSBlcXVhbGl0aWVzLmZpbmQoKGVxdWFsaXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50cy5maW5kKChqdWRnZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKGp1ZGdlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSB0aGlzLmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUpIHtcbiAgICBjb25zdCBzaWduYXR1cmVzID0gdGhpcy5nZXRTaWduYXR1cmVzKCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlcy5maW5kKChzaWduYXR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZU5vZGVNYXRjaGVzID0gc2lnbmF0dXJlLm1hdGNoU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMuZmluZCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlID0gcmVmZXJlbmNlLm1hdGNoUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbnMuZmluZCgoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gYXNzdW1wdGlvbi5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKGFzc3VtcHRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gdGhpcy5nZXRSZWZlcmVuY2VzKCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVzLmZpbmQoKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgdGVybVByZXNlbnQgPSAodGVybSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdGVybVByZXNlbnQ7XG4gIH1cblxuICBpc0dvYWxQcmVzZW50QnlHb2FsTm9kZShnb2FsTm9kZSkge1xuICAgIGNvbnN0IGdvYWwgPSB0aGlzLmZpbmRHb2FsQnlHb2FsTm9kZShnb2FsTm9kZSksXG4gICAgICAgICAgZ29hbFByZXNlbnQgPSAoZ29hbCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZ29hbFByZXNlbnQ7XG4gIH1cblxuICBpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IChmcmFtZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IHRoaXMuZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSAoZXF1YWxpdHkgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50ID0gdGhpcy5maW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGp1ZGdlbWVudFByZXNlbnQgPSAoanVkZ2VtZW50ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IChhc3NlcnRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gKHN0YXRlbWVudCAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5maW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUpLFxuICAgICAgICAgIHNpZ25hdHVyZVByZXNlbnQgPSAoc2lnbmF0dXJlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzaWduYXR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNBc3N1bXB0aW9uUHJlc2VudEJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGFzc3VtcHRpb25QcmVzZW50ID0gKGFzc3VtcHRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgcmVmZXJlbmNlUHJlc2VudCA9IChyZWZlcmVuY2UgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlbk5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVuID0gdGhpcy5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZW5Ob2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVuUHJlc2VudCA9IChtZXRhdmFyaWFibGVuICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVuUHJlc2VudDtcbiAgfVxuXG4gIGNvbW1pdChlbGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgZWxlbWVudC5zZXRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgaW5pdGlhbGlzZShqc29uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLm1ldGF2YXJpYWJsZXMgPSBtZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5yZWZlcmVuY2VzID0gcmVmZXJlbmNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5lcXVhbGl0aWVzID0gZXF1YWxpdGllc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgdGhpcy5nb2FscyA9IGdvYWxzRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuanVkZ2VtZW50cyA9IGp1ZGdlbWVudHNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgdGhpcy5zaWduYXR1cmVzID0gc2lnbmF0dXJlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgIGdvYWxzID0gdGhpcy5nZXRHb2FscygpLFxuICAgICAgICBmcmFtZXMgPSB0aGlzLmdldEZyYW1lcygpLFxuICAgICAgICBlcXVhbGl0aWVzID0gdGhpcy5nZXRFcXVhbGl0aWVzKCksXG4gICAgICAgIGp1ZGdlbWVudHMgPSB0aGlzLmdldEp1ZGdlbWVudHMoKSxcbiAgICAgICAgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gdGhpcy5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgIHNpZ25hdHVyZXMgPSB0aGlzLmdldFNpZ25hdHVyZXMoKSxcbiAgICAgICAgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IHRoaXMuZ2V0QXNzdW1wdGlvbnMoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBjb25zdCB0ZXJtc0pTT04gPSB0ZXJtc1RvVGVybXNKU09OKHRlcm1zKSxcbiAgICAgICAgICBnb2Fsc0pTT04gPSBnb2Fsc1RvR29hbHNKU09OKGdvYWxzKSxcbiAgICAgICAgICBmcmFtZXNKU09OID0gZnJhbWVzVG9GcmFtZXNKU09OKGZyYW1lcyksXG4gICAgICAgICAgZXF1YWxpdGllc0pTT04gPSBlcXVhbGl0aWVzVG9FcXVhbGl0aWVzSlNPTihlcXVhbGl0aWVzKSxcbiAgICAgICAgICBqdWRnZW1lbnRzSlNPTiA9IGp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OKGp1ZGdlbWVudHMpLFxuICAgICAgICAgIGFzc2VydGlvbnNKU09OID0gYXNzZXJ0aW9uc1RvQXNzZXJ0aW9uc0pTT04oYXNzZXJ0aW9ucyksXG4gICAgICAgICAgc3RhdGVtZW50c0pTT04gPSBzdGF0ZW1lbnRzVG9TdGF0ZW1lbnRzSlNPTihzdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzaWduYXR1cmVzSlNPTiA9IHNpZ25hdHVyZXNUb1NpZ25hdHVyZXNKU09OKHNpZ25hdHVyZXMpLFxuICAgICAgICAgIHJlZmVyZW5jZXNKU09OID0gcmVmZXJlbmNlc1RvUmVmZXJlbmNlc0pTT04ocmVmZXJlbmNlcyksXG4gICAgICAgICAgYXNzdW1wdGlvbnNKU09OID0gYXNzdW1wdGlvbnNUb0Fzc3VtcHRpb25zSlNPTihhc3N1bXB0aW9ucyksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlc0pTT04gPSBtZXRhdmFyaWFibGVzVG9NZXRhdmFyaWFibGVzSlNPTihtZXRhdmFyaWFibGVzKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgdGVybXMgPSB0ZXJtc0pTT047IC8vL1xuICAgIGdvYWxzID0gZ29hbHNKU09OOyAvLy9cbiAgICBmcmFtZXMgPSBmcmFtZXNKU09OOyAvLy9cbiAgICBlcXVhbGl0aWVzID0gZXF1YWxpdGllc0pTT047IC8vL1xuICAgIGp1ZGdlbWVudHMgPSBqdWRnZW1lbnRzSlNPTjsgLy8vXG4gICAgYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnNKU09OOyAvLy9cbiAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0pTT047IC8vL1xuICAgIHNpZ25hdHVyZXMgPSBzaWduYXR1cmVzSlNPTjsgLy8vXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXNKU09OOyAvLy9cbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zSlNPTjsgLy8vXG4gICAgbWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXNKU09OOyAgLy9cbiAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT047IC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHRlcm1zLFxuICAgICAgZ29hbHMsXG4gICAgICBmcmFtZXMsXG4gICAgICBlcXVhbGl0aWVzLFxuICAgICAganVkZ2VtZW50cyxcbiAgICAgIGFzc2VydGlvbnMsXG4gICAgICBzdGF0ZW1lbnRzLFxuICAgICAgc2lnbmF0dXJlcyxcbiAgICAgIHJlZmVyZW5jZXMsXG4gICAgICBhc3N1bXB0aW9ucyxcbiAgICAgIG1ldGF2YXJpYWJsZXMsXG4gICAgICBzdWJzdGl0dXRpb25zXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IG51bGwsXG4gICAgICAgICAgZ29hbHMgPSBudWxsLFxuICAgICAgICAgIGZyYW1lcyA9IG51bGwsXG4gICAgICAgICAgZXF1YWxpdGllcyA9IG51bGwsXG4gICAgICAgICAganVkZ2VtZW50cyA9IG51bGwsXG4gICAgICAgICAgc3RhdGVtZW50cyA9IG51bGwsXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IG51bGwsXG4gICAgICAgICAgc2lnbmF0dXJlcyA9IG51bGwsXG4gICAgICAgICAgcmVmZXJlbmNlcyA9IG51bGwsXG4gICAgICAgICAgYXNzdW1wdGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBudWxsLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBudWxsLFxuICAgICAgICAgIG1uZW1pY0NvbnRleHQgPSBuZXcgTW5lbWljQ29udGV4dChjb250ZXh0LCB0ZXJtcywgZ29hbHMsIGZyYW1lcywgZXF1YWxpdGllcywganVkZ2VtZW50cywgYXNzZXJ0aW9ucywgc3RhdGVtZW50cywgc2lnbmF0dXJlcywgcmVmZXJlbmNlcywgYXNzdW1wdGlvbnMsIG1ldGF2YXJpYWJsZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbW5lbWljQ29udGV4dC5pbml0aWFsaXNlKGpzb24pO1xuXG4gICAgcmV0dXJuIG1uZW1pY0NvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgZ29hbHMgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBlcXVhbGl0aWVzID0gW10sXG4gICAgICAgICAganVkZ2VtZW50cyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBbXSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gW10sXG4gICAgICAgICAgc2lnbmF0dXJlcyA9IFtdLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSBbXSxcbiAgICAgICAgICBhc3N1bXB0aW9ucyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbW5lbWljQ29udGV4dCA9IG5ldyBNbmVtaWNDb250ZXh0KGNvbnRleHQsIHRlcm1zLCBnb2FscywgZnJhbWVzLCBlcXVhbGl0aWVzLCBqdWRnZW1lbnRzLCBhc3NlcnRpb25zLCBzdGF0ZW1lbnRzLCBzaWduYXR1cmVzLCByZWZlcmVuY2VzLCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbW5lbWljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIk1uZW1pY0NvbnRleHQiLCJwdXNoIiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsInRlcm1zIiwiZ29hbHMiLCJmcmFtZXMiLCJlcXVhbGl0aWVzIiwianVkZ2VtZW50cyIsImFzc2VydGlvbnMiLCJzdGF0ZW1lbnRzIiwic2lnbmF0dXJlcyIsInJlZmVyZW5jZXMiLCJhc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0VGVybXMiLCJnZXRDb250ZXh0IiwiY29tcHJlc3NUZXJtcyIsImdldEdvYWxzIiwiY29tcHJlc3NHb2FscyIsImdldEZyYW1lcyIsImNvbXByZXNzRnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImNvbXByZXNzRXF1YWxpdGllcyIsImdldEp1ZGdlbWVudHMiLCJjb21wcmVzc0p1ZGdlbWVudHMiLCJnZXRTdGF0ZW1lbnRzIiwiY29tcHJlc3NTdGF0ZW1lbnRzIiwiZ2V0U2lnbmF0dXJlcyIsImNvbXByZXNzU2lnbmF0dXJlcyIsImdldEFzc2VydGlvbnMiLCJjb21wcmVzc0Fzc2VydGlvbnMiLCJnZXRSZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJjb21wcmVzc0Fzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJjb21wcmVzc1N1YnN0aXR1dGlvbnMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwiYWRkR29hbCIsImdvYWwiLCJnb2FsU3RyaW5nIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lU3RyaW5nIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiYWRkSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50U3RyaW5nIiwiYWRkQXNzZXJ0aW9uIiwiYXNzZXJ0aW9uIiwiYXNzZXJ0aW9uU3RyaW5nIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwiYWRkU2lnbmF0dXJlIiwic2lnbmF0dXJlIiwic2lnbmF0dXJlU3RyaW5nIiwiYWRkUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwiYWRkQXNzdW1wdGlvbiIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uU3RyaW5nIiwiYWRkTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwiYWRkVGVybXMiLCJmb3JFYWNoIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRHb2FsQnlHb2FsTm9kZSIsImdvYWxOb2RlIiwiZ29hbE5vZGVNYXRjaGVzIiwibWF0Y2hHb2FsTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGVNYXRjaGVzIiwibWF0Y2hFcXVhbGl0eU5vZGUiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hKdWRnZW1lbnROb2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoQXNzZXJ0aW9uTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZU5vZGVNYXRjaGVzIiwibWF0Y2hTaWduYXR1cmVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5UmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlIiwibWF0Y2hSZWZlcmVuY2VOb2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0dvYWxQcmVzZW50QnlHb2FsTm9kZSIsImdvYWxQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFByZXNlbnQiLCJpc1NpZ25hdHVyZVByZXNlbnRCeVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVQcmVzZW50IiwiaXNBc3N1bXB0aW9uUHJlc2VudEJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uUHJlc2VudCIsImlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZVByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVuTm9kZSIsIm1ldGF2YXJpYWJsZW4iLCJtZXRhdmFyaWFibGVuUHJlc2VudCIsImNvbW1pdCIsImVsZW1lbnQiLCJzZXRDb250ZXh0IiwiaW5pdGlhbGlzZSIsImpzb24iLCJ0ZXJtc0Zyb21KU09OIiwibWV0YXZhcmlhYmxlc0Zyb21KU09OIiwic3RhdGVtZW50c0Zyb21KU09OIiwicmVmZXJlbmNlc0Zyb21KU09OIiwiZXF1YWxpdGllc0Zyb21KU09OIiwiYXNzdW1wdGlvbnNGcm9tSlNPTiIsImdvYWxzRnJvbUpTT04iLCJmcmFtZXNGcm9tSlNPTiIsImp1ZGdlbWVudHNGcm9tSlNPTiIsImFzc2VydGlvbnNGcm9tSlNPTiIsInNpZ25hdHVyZXNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsInRvSlNPTiIsInRlcm1zSlNPTiIsInRlcm1zVG9UZXJtc0pTT04iLCJnb2Fsc0pTT04iLCJnb2Fsc1RvR29hbHNKU09OIiwiZnJhbWVzSlNPTiIsImZyYW1lc1RvRnJhbWVzSlNPTiIsImVxdWFsaXRpZXNKU09OIiwiZXF1YWxpdGllc1RvRXF1YWxpdGllc0pTT04iLCJqdWRnZW1lbnRzSlNPTiIsImp1ZGdlbWVudHNUb0p1ZGdlbWVudHNKU09OIiwiYXNzZXJ0aW9uc0pTT04iLCJhc3NlcnRpb25zVG9Bc3NlcnRpb25zSlNPTiIsInN0YXRlbWVudHNKU09OIiwic3RhdGVtZW50c1RvU3RhdGVtZW50c0pTT04iLCJzaWduYXR1cmVzSlNPTiIsInNpZ25hdHVyZXNUb1NpZ25hdHVyZXNKU09OIiwicmVmZXJlbmNlc0pTT04iLCJyZWZlcmVuY2VzVG9SZWZlcmVuY2VzSlNPTiIsImFzc3VtcHRpb25zSlNPTiIsImFzc3VtcHRpb25zVG9Bc3N1bXB0aW9uc0pTT04iLCJtZXRhdmFyaWFibGVzSlNPTiIsIm1ldGF2YXJpYWJsZXNUb01ldGF2YXJpYWJsZXNKU09OIiwic3Vic3RpdHV0aW9uc0pTT04iLCJzdWJzdGl0dXRpb25zVG9TdWJzdGl0dXRpb25zSlNPTiIsImZyb21KU09OIiwibW5lbWljQ29udGV4dCIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkE2Q0E7OztlQUFxQkE7OzsyQkEzQ1U7Z0VBRVg7NkJBYWtCO3NCQXdCVzs7Ozs7O0FBRWpELE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRWhCLE1BQU1GLHNCQUFzQkcsZ0JBQU87SUFDaEQsWUFBWUMsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFF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
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "default", {
8
8
  return PhanericContext;
9
9
  }
10
10
  });
11
- const _necessary = require("necessary");
12
11
  const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
13
12
  const _constants = require("../constants");
14
13
  function _interop_require_default(obj) {
@@ -16,7 +15,6 @@ function _interop_require_default(obj) {
16
15
  default: obj
17
16
  };
18
17
  }
19
- const { first } = _necessary.arrayUtilities;
20
18
  class PhanericContext extends _context.default {
21
19
  constructor(context, contexts){
22
20
  super(context);
@@ -25,9 +23,25 @@ class PhanericContext extends _context.default {
25
23
  getContexts() {
26
24
  return this.contexts;
27
25
  }
26
+ nullifyContext() {
27
+ const context = null;
28
+ this.setContext(context);
29
+ }
30
+ attach(context) {
31
+ this.setContext(context);
32
+ }
33
+ detach() {
34
+ const context = this.getContext();
35
+ this.nullifyContext();
36
+ return context;
37
+ }
28
38
  nodeAsString(node) {
29
39
  let string = _constants.EMPTY_STRING;
30
- this.contexts.some((context)=>{
40
+ const context = this.getContext(), contexts = [
41
+ context,
42
+ ...this.contexts
43
+ ];
44
+ contexts.some((context)=>{
31
45
  string = context.nodeAsString(node);
32
46
  if (string !== _constants.EMPTY_STRING) {
33
47
  return true;
@@ -36,9 +50,12 @@ class PhanericContext extends _context.default {
36
50
  return string;
37
51
  }
38
52
  static fromContexts(contexts) {
39
- const firstContext = first(contexts), context = firstContext, phanericContext = new PhanericContext(context, contexts);
53
+ contexts = [
54
+ ...contexts
55
+ ];
56
+ const context = contexts.shift(), phanericContext = new PhanericContext(context, contexts);
40
57
  return phanericContext;
41
58
  }
42
59
  }
43
60
 
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3BoYW5lcmljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhhbmVyaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnRleHRzKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XG4gIH1cblxuICBnZXRDb250ZXh0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0cztcbiAgfVxuXG4gIG5vZGVBc1N0cmluZyhub2RlKSB7XG4gICAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICAgIHRoaXMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSk7XG5cbiAgICAgIGlmIChzdHJpbmcgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gICAgY29uc3QgZmlyc3RDb250ZXh0ID0gZmlyc3QoY29udGV4dHMpLFxuICAgICAgICAgIGNvbnRleHQgPSBmaXJzdENvbnRleHQsICAvLy9cbiAgICAgICAgICBwaGFuZXJpY0NvbnRleHQgPSBuZXcgUGhhbmVyaWNDb250ZXh0KGNvbnRleHQsIGNvbnRleHRzKTtcblxuICAgIHJldHVybiBwaGFuZXJpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQaGFuZXJpY0NvbnRleHQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJjb250ZXh0cyIsImdldENvbnRleHRzIiwibm9kZUFzU3RyaW5nIiwibm9kZSIsInN0cmluZyIsIkVNUFRZX1NUUklORyIsInNvbWUiLCJmcm9tQ29udGV4dHMiLCJmaXJzdENvbnRleHQiLCJwaGFuZXJpY0NvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBcUJBOzs7MkJBUlU7Z0VBRVg7MkJBRVM7Ozs7OztBQUU3QixNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYztBQUVqQixNQUFNRix3QkFBd0JHLGdCQUFPO0lBQ2xELFlBQVlDLE9BQU8sRUFBRUMsUUFBUSxDQUFFO1FBQzdCLEtBQUssQ0FBQ0Q7UUFFTixJQUFJLENBQUNDLFFBQVEsR0FBR0E7SUFDbEI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDRCxRQUFRO0lBQ3RCO0lBRUFFLGFBQWFDLElBQUksRUFBRTtRQUNqQixJQUFJQyxTQUFTQyx1QkFBWTtRQUV6QixJQUFJLENBQUNMLFFBQVEsQ0FBQ00sSUFBSSxDQUFDLENBQUNQO1lBQ2xCSyxTQUFTTCxRQUFRRyxZQUFZLENBQUNDO1lBRTlCLElBQUlDLFdBQVdDLHVCQUFZLEVBQUU7Z0JBQzNCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0Q7SUFDVDtJQUVBLE9BQU9HLGFBQWFQLFFBQVEsRUFBRTtRQUM1QixNQUFNUSxlQUFlWixNQUFNSSxXQUNyQkQsVUFBVVMsY0FDVkMsa0JBQWtCLElBQUlkLGdCQUFnQkksU0FBU0M7UUFFckQsT0FBT1M7SUFDVDtBQUNGIn0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3BoYW5lcmljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBoYW5lcmljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb250ZXh0cykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5jb250ZXh0cyA9IGNvbnRleHRzO1xuICB9XG5cbiAgZ2V0Q29udGV4dHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG4gIH1cblxuICBudWxsaWZ5Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gbnVsbDtcblxuICAgIHRoaXMuc2V0Q29udGV4dChjb250ZXh0KTtcbiAgfVxuXG4gIGF0dGFjaChjb250ZXh0KSB7XG4gICAgdGhpcy5zZXRDb250ZXh0KGNvbnRleHQpO1xuICB9XG5cbiAgZGV0YWNoKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHRoaXMubnVsbGlmeUNvbnRleHQoKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgbm9kZUFzU3RyaW5nKG5vZGUpIHtcbiAgICBsZXQgc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbnRleHRzID0gW1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIC4uLnRoaXMuY29udGV4dHNcbiAgICAgICAgICBdO1xuXG4gICAgY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4ge1xuICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSk7XG5cbiAgICAgIGlmIChzdHJpbmcgIT09IEVNUFRZX1NUUklORykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRzKGNvbnRleHRzKSB7XG4gICAgY29udGV4dHMgPSBbICAvLy9cbiAgICAgIC4uLmNvbnRleHRzXG4gICAgXTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjb250ZXh0cy5zaGlmdCgpLFxuICAgICAgICAgIHBoYW5lcmljQ29udGV4dCA9IG5ldyBQaGFuZXJpY0NvbnRleHQoY29udGV4dCwgY29udGV4dHMpO1xuXG4gICAgcmV0dXJuIHBoYW5lcmljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlBoYW5lcmljQ29udGV4dCIsIkNvbnRleHQiLCJjb250ZXh0IiwiY29udGV4dHMiLCJnZXRDb250ZXh0cyIsIm51bGxpZnlDb250ZXh0Iiwic2V0Q29udGV4dCIsImF0dGFjaCIsImRldGFjaCIsImdldENvbnRleHQiLCJub2RlQXNTdHJpbmciLCJub2RlIiwic3RyaW5nIiwiRU1QVFlfU1RSSU5HIiwic29tZSIsImZyb21Db250ZXh0cyIsInNoaWZ0IiwicGhhbmVyaWNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFNQTs7O2VBQXFCQTs7O2dFQUpEOzJCQUVTOzs7Ozs7QUFFZCxNQUFNQSx3QkFBd0JDLGdCQUFPO0lBQ2xELFlBQVlDLE9BQU8sRUFBRUMsUUFBUSxDQUFFO1FBQzdCLEtBQUssQ0FBQ0Q7UUFFTixJQUFJLENBQUNDLFFBQVEsR0FBR0E7SUFDbEI7SUFFQUMsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDRCxRQUFRO0lBQ3RCO0lBRUFFLGlCQUFpQjtRQUNmLE1BQU1ILFVBQVU7UUFFaEIsSUFBSSxDQUFDSSxVQUFVLENBQUNKO0lBQ2xCO0lBRUFLLE9BQU9MLE9BQU8sRUFBRTtRQUNkLElBQUksQ0FBQ0ksVUFBVSxDQUFDSjtJQUNsQjtJQUVBTSxTQUFTO1FBQ1AsTUFBTU4sVUFBVSxJQUFJLENBQUNPLFVBQVU7UUFFL0IsSUFBSSxDQUFDSixjQUFjO1FBRW5CLE9BQU9IO0lBQ1Q7SUFFQVEsYUFBYUMsSUFBSSxFQUFFO1FBQ2pCLElBQUlDLFNBQVNDLHVCQUFZO1FBRXpCLE1BQU1YLFVBQVUsSUFBSSxDQUFDTyxVQUFVLElBQ3pCTixXQUFXO1lBQ1REO2VBQ0csSUFBSSxDQUFDQyxRQUFRO1NBQ2pCO1FBRVBBLFNBQVNXLElBQUksQ0FBQyxDQUFDWjtZQUNiVSxTQUFTVixRQUFRUSxZQUFZLENBQUNDO1lBRTlCLElBQUlDLFdBQVdDLHVCQUFZLEVBQUU7Z0JBQzNCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0Q7SUFDVDtJQUVBLE9BQU9HLGFBQWFaLFFBQVEsRUFBRTtRQUM1QkEsV0FBVztlQUNOQTtTQUNKO1FBRUQsTUFBTUQsVUFBVUMsU0FBU2EsS0FBSyxJQUN4QkMsa0JBQWtCLElBQUlqQixnQkFBZ0JFLFNBQVNDO1FBRXJELE9BQU9jO0lBQ1Q7QUFDRiJ9