occam-nominal 1.0.311 → 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 (85) hide show
  1. package/lib/context/bounded.js +8 -8
  2. package/lib/context/branching.js +3 -3
  3. package/lib/context/liminal.js +17 -15
  4. package/lib/context/mnemic.js +14 -18
  5. package/lib/context/phaneric.js +22 -5
  6. package/lib/context.js +3 -7
  7. package/lib/element/assertion/contained.js +19 -17
  8. package/lib/element/assertion/defined.js +16 -14
  9. package/lib/element/conclusion.js +10 -11
  10. package/lib/element/declaration/variable.js +2 -2
  11. package/lib/element/deduction.js +7 -7
  12. package/lib/element/equality.js +6 -8
  13. package/lib/element/frame.js +8 -3
  14. package/lib/element/goal.js +7 -8
  15. package/lib/element/judgement.js +8 -10
  16. package/lib/element/metavariable.js +45 -41
  17. package/lib/element/proof.js +2 -2
  18. package/lib/element/proofAssertion/premise.js +17 -21
  19. package/lib/element/proofAssertion/step.js +5 -5
  20. package/lib/element/proofAssertion/supposition.js +39 -35
  21. package/lib/element/rule.js +24 -22
  22. package/lib/element/statement.js +56 -32
  23. package/lib/element/substitution/frame.js +76 -67
  24. package/lib/element/substitution/reference.js +23 -23
  25. package/lib/element/substitution/statement.js +87 -104
  26. package/lib/element/substitution/term.js +83 -73
  27. package/lib/element/substitution.js +5 -19
  28. package/lib/element/term.js +2 -2
  29. package/lib/element/topLevelAssertion/axiom.js +4 -5
  30. package/lib/element/topLevelAssertion/conjecture.js +3 -3
  31. package/lib/element/topLevelAssertion/lemma.js +3 -3
  32. package/lib/element/topLevelAssertion/theorem.js +3 -3
  33. package/lib/element/topLevelAssertion.js +59 -69
  34. package/lib/element/variable.js +36 -35
  35. package/lib/node/metavariable.js +18 -1
  36. package/lib/process/unify.js +8 -10
  37. package/lib/process/validation.js +5 -2
  38. package/lib/utilities/compression.js +12 -1
  39. package/lib/utilities/context.js +20 -13
  40. package/lib/utilities/element.js +34 -56
  41. package/lib/utilities/equivalence.js +2 -2
  42. package/package.json +2 -2
  43. package/src/context/bounded.js +8 -8
  44. package/src/context/branching.js +1 -1
  45. package/src/context/liminal.js +18 -16
  46. package/src/context/mnemic.js +1 -9
  47. package/src/context/phaneric.js +30 -7
  48. package/src/context.js +2 -9
  49. package/src/element/assertion/contained.js +19 -18
  50. package/src/element/assertion/defined.js +16 -16
  51. package/src/element/conclusion.js +9 -11
  52. package/src/element/declaration/variable.js +1 -1
  53. package/src/element/deduction.js +6 -6
  54. package/src/element/equality.js +5 -9
  55. package/src/element/frame.js +10 -2
  56. package/src/element/goal.js +6 -8
  57. package/src/element/judgement.js +7 -11
  58. package/src/element/metavariable.js +57 -53
  59. package/src/element/proof.js +1 -1
  60. package/src/element/proofAssertion/premise.js +17 -25
  61. package/src/element/proofAssertion/step.js +4 -4
  62. package/src/element/proofAssertion/supposition.js +44 -43
  63. package/src/element/rule.js +27 -25
  64. package/src/element/statement.js +71 -41
  65. package/src/element/substitution/frame.js +95 -89
  66. package/src/element/substitution/reference.js +34 -36
  67. package/src/element/substitution/statement.js +106 -141
  68. package/src/element/substitution/term.js +106 -97
  69. package/src/element/substitution.js +6 -26
  70. package/src/element/term.js +1 -1
  71. package/src/element/topLevelAssertion/axiom.js +3 -5
  72. package/src/element/topLevelAssertion/conjecture.js +2 -2
  73. package/src/element/topLevelAssertion/lemma.js +2 -2
  74. package/src/element/topLevelAssertion/theorem.js +2 -2
  75. package/src/element/topLevelAssertion.js +61 -80
  76. package/src/element/variable.js +41 -38
  77. package/src/node/metavariable.js +28 -1
  78. package/src/process/unify.js +16 -19
  79. package/src/process/validation.js +5 -4
  80. package/src/utilities/compression.js +10 -0
  81. package/src/utilities/context.js +22 -10
  82. package/src/utilities/element.js +49 -64
  83. package/src/utilities/equivalence.js +3 -1
  84. package/lib/utilities/synoptic.js +0 -148
  85. 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==
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  const _necessary = require("necessary");
12
+ const _occamlanguages = require("occam-languages");
12
13
  const _substitutions = require("../utilities/substitutions");
13
14
  const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
14
15
  const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
@@ -17,7 +18,7 @@ function _interop_require_default(obj) {
17
18
  default: obj
18
19
  };
19
20
  }
20
- const { push, find, first } = _necessary.arrayUtilities;
21
+ const { forEach } = _occamlanguages.continuationUtilities, { push, find, first } = _necessary.arrayUtilities;
21
22
  class LiminalContext extends _context.default {
22
23
  constructor(context, derivedSubstitutions){
23
24
  super(context);
@@ -70,17 +71,18 @@ class LiminalContext extends _context.default {
70
71
  this.addDerivedSubstitution(derivedSubstitution);
71
72
  });
72
73
  }
73
- resolveDerivedSubstitutions() {
74
+ resolveDerivedSubstitutions(continuation) {
74
75
  const context = this, derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions);
75
- metavariableNodes.forEach((metavariableNode)=>{
76
+ return forEach(metavariableNodes, (metavariableNode, continuation)=>{
76
77
  const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode);
77
- complexDerivedSubstitutions.forEach((complexDerivedSubstitution)=>{
78
+ return forEach(complexDerivedSubstitutions, (complexDerivedSubstitution, continuation)=>{
78
79
  const derivedSubstitution = complexDerivedSubstitution, resolved = derivedSubstitution.isResolved();
79
- if (!resolved) {
80
- derivedSubstitution.resolve(context);
80
+ if (resolved) {
81
+ return continuation();
81
82
  }
82
- });
83
- });
83
+ return derivedSubstitution.resolve(context, continuation);
84
+ }, continuation);
85
+ }, continuation);
84
86
  }
85
87
  areDerivedSubstitutionsResolved() {
86
88
  const derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions), resolved = metavariableNodes.every((metavariableNode)=>{
@@ -170,12 +172,12 @@ class LiminalContext extends _context.default {
170
172
  }) || null;
171
173
  return complexDerivedSubstitution;
172
174
  }
173
- findDerivedSubstitutionByMetavariableNodeAndSubstitution(metavariableNode, substitution) {
174
- const substitutionA = substitution, derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
175
+ findDerivedSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
176
+ const derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
175
177
  const metavariableNodeMatches = derivedSubstitution.matchMetavariableNode(metavariableNode);
176
178
  if (metavariableNodeMatches) {
177
- const substitutionB = derivedSubstitution, substitutionBEqualToSubstitutionA = substitutionB.isEqualTo(substitutionA);
178
- if (substitutionBEqualToSubstitutionA) {
179
+ const substitutionNodeMatches = derivedSubstitution.matchSubstitutionNode(substitutionNode);
180
+ if (substitutionNodeMatches) {
179
181
  return true;
180
182
  }
181
183
  }
@@ -186,8 +188,8 @@ class LiminalContext extends _context.default {
186
188
  const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNode(metavariableNode), derivedSubstitutionPresent = derivedSubstitution !== null;
187
189
  return derivedSubstitutionPresent;
188
190
  }
189
- isDerivedSubstitutionPresentByMetavariableNodeAndSubstitution(metavariableNode, substitution) {
190
- const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNodeAndSubstitution(metavariableNode, substitution), derivedSubstitutionPresent = derivedSubstitution !== null;
191
+ isDerivedSubstitutionPresentByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
192
+ const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode), derivedSubstitutionPresent = derivedSubstitution !== null;
191
193
  return derivedSubstitutionPresent;
192
194
  }
193
195
  static fromNothing(context) {
@@ -196,4 +198,4 @@ class LiminalContext extends _context.default {
196
198
  }
197
199
  }
198
200
 
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBwdXNoLCBmaW5kLCBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbWluYWxDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zID0gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcHVzaChkZXJpdmVkU3Vic3RpdHV0aW9ucywgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCkge1xuICAgIGxldCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdERlcml2ZWRTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgICAgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSBmaXJzdERlcml2ZWRTdWJzdGl0dXRpb247IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpO1xuXG4gICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbi5pc05vblRyaXZpYWwoKTtcblxuICAgICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCkge1xuICAgICAgICBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24gPSBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbjsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9uKGRlcml2ZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbkEgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25CID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5maW5kKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIgPSBkZXJpdmVkU3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oZGVyaXZlZFN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMucHVzaChkZXJpdmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbihkZXJpdmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBtZXRhdmFyaWFibGVOb2Rlcy5mb3JFYWNoKChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucy5mb3JFYWNoKChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICByZXNvbHZlZCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uLnJlc29sdmUoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICByZXNvbHZlZCA9IG1ldGF2YXJpYWJsZU5vZGVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucy5ldmVyeSgoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGVtcHR5ID0gKGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIHF1YWxpZnkoYXNzdW1wdGlvbiwgY29uc3RyYWludCkge1xuICAgIGxldCBxdWFsaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG5cbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpO1xuXG4gICAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXMsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uLmZyb21Bc3N1bXB0aW9uQW5kQ29uc3RyYWludChhc3N1bXB0aW9uLCBjb25zdHJhaW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uLmNvbXBhcmVTdWJzdGl0dXRpb24oc29sZURlcml2ZWRTdWJzdGl0dXRpb24pO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbikge1xuICAgICAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVhbGlmaWVzO1xuICB9XG5cbiAgY29tbWl0KGNvbnRleHQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgQ29tbWl0dGluZyB0aGUgbGltaW5hbCBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZERlcml2ZWRTdWJzdGl0dXRpb25zKHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbnMuZmluZChjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyhjYWxsYmFjaykge1xuICAgIGxldCBkZXJpdmVkU3Vic3RpdHV0aW9ucztcblxuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBmaW5kKGRlcml2ZWRTdWJzdGl0dXRpb25zLCBjYWxsYmFjayk7ICAvLy9cblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmICh2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uID0gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzU2ltcGxlKCk7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uU2ltcGxlKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNDb21wbGV4KCk7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uQkVxdWFsVG9TdWJzdGl0dXRpb25BID0gc3Vic3RpdHV0aW9uQi5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbkJFcXVhbFRvU3Vic3RpdHV0aW9uQSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbiksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGltaW5hbENvbnRleHQgPSBuZXcgTGltaW5hbENvbnRleHQoY29udGV4dCwgZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGxpbWluYWxDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTGltaW5hbENvbnRleHQiLCJwdXNoIiwiZmluZCIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXRDb250ZXh0IiwiZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uIiwiZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uQSIsImRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlcml2ZWRTdWJzdGl0dXRpb25CIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZm9yRWFjaCIsInJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOb2RlIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZSIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJldmVyeSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCIsImlzRW1wdHkiLCJlbXB0eSIsInF1YWxpZnkiLCJhc3N1bXB0aW9uIiwiY29uc3RyYWludCIsInF1YWxpZmllcyIsIlJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsInJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQiLCJyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImNvbXBhcmVTdWJzdGl0dXRpb24iLCJjb21taXQiLCJ1bmRlZmluZWQiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbiIsImNhbGxiYWNrIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaFZhcmlhYmxlTm9kZSIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwic2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCIsImlzQ29tcGxleCIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQSIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dXRpb25CRXF1YWxUb1N1YnN0aXR1dGlvbkEiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uIiwiZnJvbU5vdGhpbmciLCJsaW1pbmFsQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFxQkE7OzsyQkFSVTsrQkFDMkI7Z0VBRXRDO2lFQUNDOzs7Ozs7QUFFckIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1KLHVCQUF1QkssZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtRQUMzQixJQUFJQywwQkFBMEI7UUFFOUIsTUFBTUMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU07UUFFbkUsSUFBSUQsK0JBQStCLEdBQUc7WUFDcEMsTUFBTUUsMkJBQTJCWCxNQUFNLElBQUksQ0FBQ0ksb0JBQW9CO1lBRWhFSSwwQkFBMEJHLDBCQUEwQixHQUFHO1FBQ3pEO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSx1Q0FBdUM7UUFDckMsSUFBSUMsb0NBQW9DO1FBRXhDLE1BQU1MLDBCQUEwQixJQUFJLENBQUNELDBCQUEwQjtRQUUvRCxJQUFJQyw0QkFBNEIsTUFBTTtZQUNwQyxNQUFNTSxvQ0FBb0NOLHdCQUF3Qk8sWUFBWTtZQUU5RSxJQUFJRCxtQ0FBbUM7Z0JBQ3JDRCxvQ0FBb0NMLHlCQUEwQixHQUFHO1lBQ25FO1FBQ0Y7UUFFQSxPQUFPSztJQUNUO0lBRUFHLHVCQUF1QkMsbUJBQW1CLEVBQUU7UUFDMUMsTUFBTWQsVUFBVSxJQUFJLEVBQ2RlLHVCQUF1QkQscUJBQ3ZCRSw0QkFBNEJGLG9CQUFvQkcsU0FBUztRQUUvRGpCLFFBQVFrQixLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUVGLDBCQUEwQixnREFBZ0QsQ0FBQztRQUV4RyxNQUFNRyx1QkFBdUIsSUFBSSxDQUFDbEIsb0JBQW9CLENBQUNMLElBQUksQ0FBQyxDQUFDa0I7WUFDM0QsTUFBTUssdUJBQXVCTCxxQkFDdkJNLGtEQUFrREwscUJBQXFCTSxTQUFTLENBQUNGO1lBRXZGLElBQUlDLGlEQUFpRDtnQkFDbkQsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVOLElBQUlELHlCQUF5QixNQUFNO1lBQ2pDbkIsUUFBUXNCLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRU4sMEJBQTBCLHFFQUFxRSxDQUFDO1FBQ3hILE9BQU87WUFDTCxJQUFJLENBQUNmLG9CQUFvQixDQUFDTixJQUFJLENBQUNtQjtRQUNqQztRQUVBZCxRQUFRc0IsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFTiwwQkFBMEIsOENBQThDLENBQUM7SUFDMUc7SUFFQU8sd0JBQXdCdEIsb0JBQW9CLEVBQUU7UUFDNUNBLHFCQUFxQnVCLE9BQU8sQ0FBQyxDQUFDVjtZQUM1QixJQUFJLENBQUNELHNCQUFzQixDQUFDQztRQUM5QjtJQUNGO0lBRUFXLDhCQUE4QjtRQUM1QixNQUFNekIsVUFBVSxJQUFJLEVBQ2RDLHVCQUF1QixJQUFJLENBQUNDLHVCQUF1QixJQUNuRHdCLG9CQUFvQkMsSUFBQUEsd0RBQXlDLEVBQUMxQjtRQUVwRXlCLGtCQUFrQkYsT0FBTyxDQUFDLENBQUNJO1lBQ3pCLE1BQU1DLDhCQUE4QixJQUFJLENBQUNDLGlEQUFpRCxDQUFDRjtZQUUzRkMsNEJBQTRCTCxPQUFPLENBQUMsQ0FBQ087Z0JBQ25DLE1BQU1qQixzQkFBc0JpQiw0QkFDdEJDLFdBQVdsQixvQkFBb0JtQixVQUFVO2dCQUUvQyxJQUFJLENBQUNELFVBQVU7b0JBQ2JsQixvQkFBb0JvQixPQUFPLENBQUNsQztnQkFDOUI7WUFDRjtRQUNGO0lBQ0Y7SUFFQW1DLGtDQUFrQztRQUNoQyxNQUFNbEMsdUJBQXVCLElBQUksQ0FBQ0MsdUJBQXVCLElBQ25Ed0Isb0JBQW9CQyxJQUFBQSx3REFBeUMsRUFBQzFCLHVCQUM5RCtCLFdBQVdOLGtCQUFrQlUsS0FBSyxDQUFDLENBQUNSO1lBQ2xDLE1BQU1DLDhCQUE4QixJQUFJLENBQUNDLGlEQUFpRCxDQUFDRixtQkFDckZTLHNDQUFzQ1IsNEJBQTRCTyxLQUFLLENBQUMsQ0FBQ0w7Z0JBQ3ZFLE1BQU1PLHFDQUFxQ1AsMkJBQTJCRSxVQUFVO2dCQUVoRixJQUFJSyxvQ0FBb0M7b0JBQ3RDLE9BQU87Z0JBQ1Q7WUFDRjtZQUVOLElBQUlELHFDQUFxQztnQkFDdkMsT0FBTztZQUNUO1FBQ0Y7UUFFTixPQUFPTDtJQUNUO0lBRUFPLFVBQVU7UUFDUixNQUFNakMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU0sRUFDN0RpQyxRQUFTbEMsK0JBQStCO1FBRTlDLE9BQU9rQztJQUNUO0lBRUFDLFFBQVFDLFVBQVUsRUFBRUMsVUFBVSxFQUFFO1FBQzlCLElBQUlDLFlBQVk7UUFFaEIsTUFBTUosUUFBUSxJQUFJLENBQUNELE9BQU87UUFFMUIsSUFBSUMsT0FBTztZQUNUSSxZQUFZO1FBQ2QsT0FBTztZQUNMLE1BQU12QywwQkFBMEIsSUFBSSxDQUFDRCwwQkFBMEI7WUFFL0QsSUFBSUMsNEJBQTRCLE1BQU07Z0JBQ3BDLE1BQU0sRUFBRXdDLDRCQUE0QixFQUFFLEdBQUdDLGlCQUFRLEVBQzNDOUMsVUFBVSxJQUFJLEVBQ2QrQywrQkFBK0JGLDZCQUE2QkcsMkJBQTJCLENBQUNOLFlBQVlDLFlBQVkzQyxVQUNoSGlELGlFQUFpRUYsNkJBQTZCRyxtQkFBbUIsQ0FBQzdDO2dCQUV4SCxJQUFJNEMsZ0VBQWdFO29CQUNsRUwsWUFBWTtnQkFDZDtZQUNGO1FBQ0Y7UUFFQSxPQUFPQTtJQUNUO0lBRUFPLE9BQU9uRCxPQUFPLEVBQUU7UUFDZCxJQUFJQSxZQUFZb0QsV0FBVztZQUN6QnBELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBQzNCO1FBRUFILFFBQVFzQixLQUFLLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQztRQUU5Q3RCLFFBQVF1Qix1QkFBdUIsQ0FBQyxJQUFJLENBQUN0QixvQkFBb0I7SUFDM0Q7SUFFQW9ELHdCQUF3QkMsUUFBUSxFQUFFO1FBQ2hDLE1BQU1yRCx1QkFBdUIsSUFBSSxDQUFDQyx1QkFBdUIsSUFDbkRZLHNCQUFzQmIscUJBQXFCTCxJQUFJLENBQUMwRDtRQUV0RCxPQUFPeEM7SUFDVDtJQUVBeUMseUJBQXlCRCxRQUFRLEVBQUU7UUFDakMsSUFBSXJEO1FBRUpBLHVCQUF1QixJQUFJLENBQUNDLHVCQUF1QjtRQUVuREQsdUJBQXVCTCxLQUFLSyxzQkFBc0JxRCxXQUFZLEdBQUc7UUFFakUsT0FBT3JEO0lBQ1Q7SUFFQXVELHNDQUFzQ0MsWUFBWSxFQUFFO1FBQ2xELE1BQU0zQyxzQkFBc0IsSUFBSSxDQUFDdUMsdUJBQXVCLENBQUMsQ0FBQ3ZDO1lBQ3hELE1BQU00QyxzQkFBc0I1QyxvQkFBb0I2QyxpQkFBaUIsQ0FBQ0Y7WUFFbEUsSUFBSUMscUJBQXFCO2dCQUN2QixPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRU4sT0FBTzVDO0lBQ1Q7SUFFQThDLDBDQUEwQ2hDLGdCQUFnQixFQUFFO1FBQzFELE1BQU1pQyw0QkFBNEIsSUFBSSxDQUFDQywrQ0FBK0MsQ0FBQ2xDLG1CQUNqRmQsc0JBQXNCK0MsMkJBQTRCLEdBQUc7UUFFM0QsT0FBTy9DO0lBQ1Q7SUFFQWdELGdEQUFnRGxDLGdCQUFnQixFQUFFO1FBQ2hFLE1BQU1pQyw0QkFBNEIsSUFBSSxDQUFDUix1QkFBdUIsQ0FBQyxDQUFDdkM7WUFDOUQsTUFBTWlELDRCQUE0QmpELG9CQUFvQmtELFFBQVE7WUFFOUQsSUFBSUQsMkJBQTJCO2dCQUM3QixNQUFNRiw0QkFBNEIvQyxxQkFDNUJtRCwwQkFBMEJKLDBCQUEwQksscUJBQXFCLENBQUN0QztnQkFFaEYsSUFBSXFDLHlCQUF5QjtvQkFDM0IsT0FBTztnQkFDVDtZQUNGO1FBQ0YsTUFBTTtRQUVOLE9BQU9KO0lBQ1Q7SUFFQS9CLGtEQUFrREYsZ0JBQWdCLEVBQUU7UUFDbEUsTUFBTUcsNkJBQTZCLElBQUksQ0FBQ3dCLHdCQUF3QixDQUFDLENBQUN6QztZQUNoRSxNQUFNcUQsNkJBQTZCckQsb0JBQW9Cc0QsU0FBUztZQUVoRSxJQUFJRCw0QkFBNEI7Z0JBQzlCLE1BQU1wQyw2QkFBNkJqQixxQkFDN0JtRCwwQkFBMEJsQywyQkFBMkJtQyxxQkFBcUIsQ0FBQ3RDO2dCQUVqRixJQUFJcUMseUJBQXlCO29CQUMzQixPQUFPO2dCQUNUO1lBQ0Y7UUFDRixNQUFNO1FBRU4sT0FBT2xDO0lBQ1Q7SUFFQXNDLHlEQUF5RHpDLGdCQUFnQixFQUFFMEMsWUFBWSxFQUFFO1FBQ3ZGLE1BQU1DLGdCQUFnQkQsY0FDaEJ4RCxzQkFBc0IsSUFBSSxDQUFDdUMsdUJBQXVCLENBQUMsQ0FBQ3ZDO1lBQ2xELE1BQU1tRCwwQkFBMEJuRCxvQkFBb0JvRCxxQkFBcUIsQ0FBQ3RDO1lBRTFFLElBQUlxQyx5QkFBeUI7Z0JBQzNCLE1BQU1PLGdCQUFnQjFELHFCQUNoQjJELG9DQUFvQ0QsY0FBY25ELFNBQVMsQ0FBQ2tEO2dCQUVsRSxJQUFJRSxtQ0FBbUM7b0JBQ3JDLE9BQU87Z0JBQ1Q7WUFDRjtRQUNGLE1BQU07UUFFWixPQUFPM0Q7SUFDVDtJQUVBNEQsK0NBQStDOUMsZ0JBQWdCLEVBQUU7UUFDL0QsTUFBTWQsc0JBQXNCLElBQUksQ0FBQzhDLHlDQUF5QyxDQUFDaEMsbUJBQ3JFK0MsNkJBQThCN0Qsd0JBQXdCO1FBRTVELE9BQU82RDtJQUNUO0lBRUFDLDhEQUE4RGhELGdCQUFnQixFQUFFMEMsWUFBWSxFQUFFO1FBQzVGLE1BQU14RCxzQkFBc0IsSUFBSSxDQUFDdUQsd0RBQXdELENBQUN6QyxrQkFBa0IwQyxlQUN0R0ssNkJBQThCN0Qsd0JBQXdCO1FBRTVELE9BQU82RDtJQUNUO0lBRUEsT0FBT0UsWUFBWTdFLE9BQU8sRUFBRTtRQUMxQixNQUFNQyx1QkFBdUIsRUFBRSxFQUN6QjZFLGlCQUFpQixJQUFJcEYsZUFBZU0sU0FBU0M7UUFFbkQsT0FBTzZFO0lBQ1Q7QUFDRiJ9
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGRlcml2ZWRTdWJzdGl0dXRpb25zLCB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbiA9IGZpcnN0KHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbjsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uKCkge1xuICAgIGxldCBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCA9IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uLmlzTm9uVHJpdmlhbCgpO1xuXG4gICAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb24oZGVyaXZlZFN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQSA9IGRlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmcgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmZpbmQoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhkZXJpdmVkU3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5wdXNoKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGREZXJpdmVkU3Vic3RpdHV0aW9uKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zKGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBmb3JFYWNoKG1ldGF2YXJpYWJsZU5vZGVzLCAobWV0YXZhcmlhYmxlTm9kZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIHJldHVybiBmb3JFYWNoKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucywgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbi5yZXNvbHZlKGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgICB9LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHJlc29sdmVkID0gbWV0YXZhcmlhYmxlTm9kZXMuZXZlcnkoKG1ldGF2YXJpYWJsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zLmV2ZXJ5KChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgcXVhbGlmeShhc3N1bXB0aW9uLCBjb25zdHJhaW50KSB7XG4gICAgbGV0IHF1YWxpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZW1wdHkgPSB0aGlzLmlzRW1wdHkoKTtcblxuICAgIGlmIChlbXB0eSkge1xuICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcyxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBjb21taXQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGBDb21taXR0aW5nIHRoZSBsaW1pbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnModGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKGNhbGxiYWNrKSB7XG4gICAgbGV0IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGZpbmQoZGVyaXZlZFN1YnN0aXR1dGlvbnMsIGNhbGxiYWNrKTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUpIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4ID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGRlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIGxpbWluYWxDb250ZXh0ID0gbmV3IExpbWluYWxDb250ZXh0KGNvbnRleHQsIGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBsaW1pbmFsQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkxpbWluYWxDb250ZXh0IiwiZm9yRWFjaCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInB1c2giLCJmaW5kIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsInNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdERlcml2ZWRTdWJzdGl0dXRpb24iLCJnZXRTb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwiLCJpc05vblRyaXZpYWwiLCJhZGREZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25BIiwiZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJyZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJjb250aW51YXRpb24iLCJtZXRhdmFyaWFibGVOb2RlcyIsIm1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwiaXNSZXNvbHZlZCIsInJlc29sdmUiLCJhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiZXZlcnkiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uUmVzb2x2ZWQiLCJpc0VtcHR5IiwiZW1wdHkiLCJxdWFsaWZ5IiwiYXNzdW1wdGlvbiIsImNvbnN0cmFpbnQiLCJxdWFsaWZpZXMiLCJSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50IiwicmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJjb21wYXJlU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidW5kZWZpbmVkIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb24iLCJjYWxsYmFjayIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsInNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUiLCJpc1NpbXBsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBcUJBOzs7MkJBVlU7Z0NBQ087K0JBQ29CO2dFQUV0QztpRUFDQzs7Ozs7O0FBRXJCLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQixFQUNuQyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtRQUMzQixJQUFJQywwQkFBMEI7UUFFOUIsTUFBTUMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU07UUFFbkUsSUFBSUQsK0JBQStCLEdBQUc7WUFDcEMsTUFBTUUsMkJBQTJCWCxNQUFNLElBQUksQ0FBQ0ksb0JBQW9CO1lBRWhFSSwwQkFBMEJHLDBCQUEwQixHQUFHO1FBQ3pEO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSx1Q0FBdUM7UUFD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