occam-verify-cli 1.0.405 → 1.0.414

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 (122) hide show
  1. package/lib/context/file.js +3 -3
  2. package/lib/context/local.js +3 -3
  3. package/lib/context/release.js +2 -2
  4. package/lib/context/temporary.js +103 -54
  5. package/lib/mixins/statement/verify.js +2 -2
  6. package/lib/mixins/step/unify.js +2 -2
  7. package/lib/node/argument.js +2 -2
  8. package/lib/node/assumption.js +6 -6
  9. package/lib/node/frame.js +19 -7
  10. package/lib/node/judgement.js +8 -1
  11. package/lib/node/statement.js +34 -15
  12. package/lib/node/substitution/term.js +3 -11
  13. package/lib/node/term.js +20 -8
  14. package/lib/nonTerminalNode.js +3 -3
  15. package/lib/ontology/assertion/contained.js +7 -7
  16. package/lib/ontology/assertion/defined.js +8 -8
  17. package/lib/ontology/assertion/subproof.js +3 -3
  18. package/lib/ontology/assumption.js +49 -45
  19. package/lib/ontology/combinator.js +3 -3
  20. package/lib/ontology/constructor.js +3 -3
  21. package/lib/ontology/equality.js +4 -4
  22. package/lib/ontology/equivalence.js +2 -2
  23. package/lib/ontology/frame.js +37 -12
  24. package/lib/ontology/judgement.js +13 -6
  25. package/lib/ontology/metavariable.js +75 -76
  26. package/lib/ontology/propertyRelation.js +2 -2
  27. package/lib/ontology/reference.js +33 -4
  28. package/lib/ontology/signature.js +2 -2
  29. package/lib/ontology/statement.js +33 -8
  30. package/lib/ontology/step.js +4 -4
  31. package/lib/ontology/substitution/frame.js +13 -15
  32. package/lib/ontology/substitution/statement.js +31 -32
  33. package/lib/ontology/substitution/term.js +26 -25
  34. package/lib/ontology/substitution.js +2 -2
  35. package/lib/ontology/substitutions.js +4 -4
  36. package/lib/ontology/term.js +26 -12
  37. package/lib/ontology/variable.js +2 -2
  38. package/lib/process/equate.js +322 -0
  39. package/lib/process/unify.js +623 -0
  40. package/lib/process/verify.js +332 -0
  41. package/lib/utilities/brackets.js +3 -8
  42. package/lib/utilities/context.js +4 -14
  43. package/lib/utilities/json.js +18 -1
  44. package/lib/utilities/pass.js +68 -0
  45. package/lib/utilities/substitutions.js +11 -16
  46. package/package.json +2 -2
  47. package/src/context/file.js +2 -2
  48. package/src/context/local.js +2 -2
  49. package/src/context/release.js +1 -1
  50. package/src/context/temporary.js +124 -54
  51. package/src/mixins/statement/verify.js +3 -1
  52. package/src/mixins/step/unify.js +0 -1
  53. package/src/node/argument.js +1 -1
  54. package/src/node/assumption.js +4 -4
  55. package/src/node/frame.js +19 -5
  56. package/src/node/judgement.js +7 -0
  57. package/src/node/statement.js +35 -13
  58. package/src/node/substitution/term.js +4 -14
  59. package/src/node/term.js +20 -6
  60. package/src/nonTerminalNode.js +1 -1
  61. package/src/ontology/assertion/contained.js +6 -6
  62. package/src/ontology/assertion/defined.js +7 -7
  63. package/src/ontology/assertion/subproof.js +1 -1
  64. package/src/ontology/assumption.js +52 -57
  65. package/src/ontology/combinator.js +1 -1
  66. package/src/ontology/constructor.js +1 -1
  67. package/src/ontology/equality.js +3 -3
  68. package/src/ontology/equivalence.js +1 -1
  69. package/src/ontology/frame.js +44 -10
  70. package/src/ontology/judgement.js +8 -3
  71. package/src/ontology/metavariable.js +108 -102
  72. package/src/ontology/propertyRelation.js +3 -2
  73. package/src/ontology/reference.js +39 -1
  74. package/src/ontology/signature.js +3 -3
  75. package/src/ontology/statement.js +38 -4
  76. package/src/ontology/step.js +7 -7
  77. package/src/ontology/substitution/frame.js +13 -17
  78. package/src/ontology/substitution/statement.js +45 -48
  79. package/src/ontology/substitution/term.js +19 -19
  80. package/src/ontology/substitution.js +3 -2
  81. package/src/ontology/substitutions.js +3 -3
  82. package/src/ontology/term.js +26 -5
  83. package/src/ontology/variable.js +3 -2
  84. package/src/process/equate.js +212 -0
  85. package/src/process/unify.js +634 -0
  86. package/src/process/verify.js +204 -0
  87. package/src/utilities/brackets.js +2 -11
  88. package/src/utilities/context.js +1 -21
  89. package/src/utilities/json.js +19 -0
  90. package/src/utilities/{unifier.js → pass.js} +17 -1
  91. package/src/utilities/substitutions.js +10 -20
  92. package/lib/unifier/equantional.js +0 -170
  93. package/lib/unifier/intrinsicLevel.js +0 -144
  94. package/lib/unifier/metaLevel.js +0 -197
  95. package/lib/unifier/metavariable.js +0 -140
  96. package/lib/unifier/statementWithCombinator.js +0 -177
  97. package/lib/unifier/termWithConstructor.js +0 -145
  98. package/lib/unifier.js +0 -241
  99. package/lib/utilities/arguments.js +0 -28
  100. package/lib/utilities/frame.js +0 -18
  101. package/lib/utilities/metavariable.js +0 -18
  102. package/lib/utilities/statement.js +0 -18
  103. package/lib/utilities/unification.js +0 -109
  104. package/lib/utilities/unifier.js +0 -51
  105. package/lib/utilities/variable.js +0 -18
  106. package/lib/verifier/combinator.js +0 -158
  107. package/lib/verifier.js +0 -219
  108. package/src/unifier/equantional.js +0 -90
  109. package/src/unifier/intrinsicLevel.js +0 -52
  110. package/src/unifier/metaLevel.js +0 -151
  111. package/src/unifier/metavariable.js +0 -50
  112. package/src/unifier/statementWithCombinator.js +0 -114
  113. package/src/unifier/termWithConstructor.js +0 -56
  114. package/src/unifier.js +0 -183
  115. package/src/utilities/arguments.js +0 -21
  116. package/src/utilities/frame.js +0 -13
  117. package/src/utilities/metavariable.js +0 -13
  118. package/src/utilities/statement.js +0 -13
  119. package/src/utilities/unification.js +0 -136
  120. package/src/utilities/variable.js +0 -13
  121. package/src/verifier/combinator.js +0 -72
  122. package/src/verifier.js +0 -150
@@ -55,7 +55,7 @@ function _unsupported_iterable_to_array(o, minLen) {
55
55
  }
56
56
  var extract = _necessary.arrayUtilities.extract, compress = _necessary.arrayUtilities.compress;
57
57
  var TemporaryContext = /*#__PURE__*/ function() {
58
- function TemporaryContext(context, tokens1, terms, frames, statements, assertions, substitutions, reference) {
58
+ function TemporaryContext(context, tokens1, terms, frames, statements, assertions, references, substitutions) {
59
59
  _class_call_check(this, TemporaryContext);
60
60
  this.context = context;
61
61
  this.tokens = tokens1;
@@ -63,8 +63,8 @@ var TemporaryContext = /*#__PURE__*/ function() {
63
63
  this.frames = frames;
64
64
  this.statements = statements;
65
65
  this.assertions = assertions;
66
+ this.references = references;
66
67
  this.substitutions = substitutions;
67
- this.reference = reference;
68
68
  }
69
69
  _create_class(TemporaryContext, [
70
70
  {
@@ -104,95 +104,101 @@ var TemporaryContext = /*#__PURE__*/ function() {
104
104
  }
105
105
  },
106
106
  {
107
- key: "getSubstitutions",
108
- value: function getSubstitutions() {
109
- return this.substitutions;
107
+ key: "getReferences",
108
+ value: function getReferences() {
109
+ return this.references;
110
110
  }
111
111
  },
112
112
  {
113
- key: "getReference",
114
- value: function getReference() {
115
- return this.reference;
113
+ key: "getSubstitutions",
114
+ value: function getSubstitutions() {
115
+ return this.substitutions;
116
116
  }
117
117
  },
118
118
  {
119
119
  key: "addTerm",
120
120
  value: function addTerm(term) {
121
- var context = this, termNode = term.getNode(), termString = term.getString();
121
+ var termA = term, context = this, termString = term.getString();
122
122
  extract(this.terms, function(term) {
123
- var termMatchesTermNode = term.matchTermNode(termNode);
124
- if (termMatchesTermNode) {
123
+ var termB = term, termAEqualToTermB = termA.isEqualTo(termB);
124
+ if (termAEqualToTermB) {
125
125
  return true;
126
126
  }
127
127
  });
128
- context.trace("ADded the '".concat(termString, "' term."));
128
+ context.trace("ADded the '".concat(termString, "' term to the context."));
129
129
  this.terms.push(term);
130
130
  }
131
131
  },
132
132
  {
133
133
  key: "addFrame",
134
134
  value: function addFrame(frame) {
135
- var context = this, frameNode = frame.getNode(), frameString = frame.getString();
135
+ var frameA = frame, context = this, frameString = frame.getString();
136
136
  extract(this.frames, function(frame) {
137
- var frameMatchesFrameNode = frame.matchFrameNode(frameNode);
138
- if (frameMatchesFrameNode) {
137
+ var frameB = frame, frameAEqualToFrameB = frameA.isEqualTo(frameB);
138
+ if (frameAEqualToFrameB) {
139
139
  return true;
140
140
  }
141
141
  });
142
- context.trace("Added the '".concat(frameString, "' frame."));
142
+ context.trace("Added the '".concat(frameString, "' frame to the context."));
143
143
  this.frames.push(frame);
144
144
  }
145
145
  },
146
146
  {
147
147
  key: "addStatement",
148
148
  value: function addStatement(statement) {
149
- var context = this, statementNode = statement.getNode(), statementString = statement.getString();
149
+ var context = this, statementA = statement, statementString = statement.getString();
150
150
  extract(this.statements, function(statement) {
151
- var statementMatchesFrameNode = statement.matchStatementNode(statementNode);
152
- if (statementMatchesFrameNode) {
151
+ var statementB = statement, statementAEqualToFrameB = statementA.isEqualTo(statementB);
152
+ if (statementAEqualToFrameB) {
153
153
  return true;
154
154
  }
155
155
  });
156
- context.trace("Added the '".concat(statementString, "' statement."));
156
+ context.trace("Added the '".concat(statementString, "' statement to the context."));
157
157
  this.statements.push(statement);
158
158
  }
159
159
  },
160
160
  {
161
161
  key: "addAssertion",
162
162
  value: function addAssertion(assertion) {
163
- var context = this, assertionNode = assertion.getNode(), assertionString = assertion.getString();
163
+ var context = this, assertionA = assertion, assertionString = assertion.getString();
164
164
  extract(this.assertions, function(assertion) {
165
- var assertionMatchesFrameNode = assertion.matchAssertionNode(assertionNode);
166
- if (assertionMatchesFrameNode) {
165
+ var assertionB = assertion, assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
166
+ if (assertionAEqualToAssertionB) {
167
167
  return true;
168
168
  }
169
169
  });
170
- context.trace("Added the '".concat(assertionString, "' assertion."));
170
+ context.trace("Added the '".concat(assertionString, "' assertion to the context."));
171
171
  this.assertions.push(assertion);
172
172
  }
173
173
  },
174
+ {
175
+ key: "addReference",
176
+ value: function addReference(reference) {
177
+ var context = this, referenceA = reference, referenceString = reference.getString();
178
+ extract(this.references, function(reference) {
179
+ var referenceB = reference, referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
180
+ if (referenceAEqualToReferenceB) {
181
+ return true;
182
+ }
183
+ });
184
+ context.trace("Added the '".concat(referenceString, "' reference to the context."));
185
+ this.references.push(reference);
186
+ }
187
+ },
174
188
  {
175
189
  key: "addSubstitution",
176
190
  value: function addSubstitution(substitution) {
177
- var context = this, substitutionNode = substitution.getNode(), substitutionString = substitution.getString();
191
+ var context = this, substitutionA = substitution, substitutionString = substitution.getString();
178
192
  extract(this.substitutions, function(substitution) {
179
- var substitutionMatchesFrameNode = substitution.matchSubstitutionNode(substitutionNode);
180
- if (substitutionMatchesFrameNode) {
193
+ var substitutionB = substitution, substituionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
194
+ if (substituionAEqualToSubstitutionB) {
181
195
  return true;
182
196
  }
183
197
  });
184
- context.trace("Added the '".concat(substitutionString, "' substitution."));
198
+ context.trace("Added the '".concat(substitutionString, "' substitution to the context."));
185
199
  this.substitutions.push(substitution);
186
200
  }
187
201
  },
188
- {
189
- key: "addReference",
190
- value: function addReference(reference) {
191
- var context = this, referenceString = reference.getString();
192
- this.reference = reference;
193
- context.trace("Added the '".concat(referenceString, "' reference."));
194
- }
195
- },
196
202
  {
197
203
  key: "findTermByTermNode",
198
204
  value: function findTermByTermNode(termNode) {
@@ -217,6 +223,18 @@ var TemporaryContext = /*#__PURE__*/ function() {
217
223
  return frame;
218
224
  }
219
225
  },
226
+ {
227
+ key: "findStatementByStatementNode",
228
+ value: function findStatementByStatementNode(statementNode) {
229
+ var statement = this.statements.find(function(statement) {
230
+ var statementMatchesStatementNode = statement.matchStatementNode(statementNode);
231
+ if (statementMatchesStatementNode) {
232
+ return true;
233
+ }
234
+ }) || null;
235
+ return statement;
236
+ }
237
+ },
220
238
  {
221
239
  key: "findAssertionByAssertionNode",
222
240
  value: function findAssertionByAssertionNode(assertionNode) {
@@ -230,22 +248,22 @@ var TemporaryContext = /*#__PURE__*/ function() {
230
248
  }
231
249
  },
232
250
  {
233
- key: "findStatementByStatementNode",
234
- value: function findStatementByStatementNode(statementNode) {
235
- var statement = this.statements.find(function(statement) {
236
- var statementMatchesStatementNode = statement.matchStatementNode(statementNode);
237
- if (statementMatchesStatementNode) {
251
+ key: "findReferenceByMetavariableNode",
252
+ value: function findReferenceByMetavariableNode(metavariableNode) {
253
+ var reference = this.references.find(function(reference) {
254
+ var referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
255
+ if (referenceMatcheMetavariableNode) {
238
256
  return true;
239
257
  }
240
258
  }) || null;
241
- return statement;
259
+ return reference;
242
260
  }
243
261
  },
244
262
  {
245
- key: "findSubtitutionBySubtitutionNode",
246
- value: function findSubtitutionBySubtitutionNode(substitutionNode) {
263
+ key: "findSubstitutionBySubstitutionNode",
264
+ value: function findSubstitutionBySubstitutionNode(substitutionNode) {
247
265
  var substitution = this.substitutions.find(function(substitution) {
248
- var substitutionMatchesSubtitutionNode = substitution.matchSubtitutionNode(substitutionNode);
266
+ var substitutionMatchesSubtitutionNode = substitution.matchSubstitutionNode(substitutionNode);
249
267
  if (substitutionMatchesSubtitutionNode) {
250
268
  return true;
251
269
  }
@@ -710,17 +728,48 @@ var TemporaryContext = /*#__PURE__*/ function() {
710
728
  }
711
729
  },
712
730
  {
713
- key: "marge",
714
- value: function marge(context) {
715
- var terms = context.getTerms(), frames = context.getFrames(), statements = context.getStatements(), assertions = context.getAssertions(), substitutions = context.getSubstitutions();
731
+ key: "merge",
732
+ value: function merge(context) {
733
+ var terms = context.getTerms(), frames = context.getFrames(), statements = context.getStatements(), assertions = context.getAssertions(), references = context.getReferences(), substitutions = context.getSubstitutions();
716
734
  this.terms = _to_consumable_array(this.terms).concat(_to_consumable_array(terms));
717
735
  this.frames = _to_consumable_array(this.frames).concat(_to_consumable_array(frames));
718
736
  this.statements = _to_consumable_array(this.statements).concat(_to_consumable_array(statements));
719
737
  this.assertions = _to_consumable_array(this.assertions).concat(_to_consumable_array(assertions));
738
+ this.references = _to_consumable_array(this.references).concat(_to_consumable_array(references));
720
739
  this.substitutions = _to_consumable_array(this.substitutions).concat(_to_consumable_array(substitutions));
721
740
  compress(this.terms, function(termA, termB) {
722
- var termANode = termA.getNode(), termBNode = termB.getNode(), termANodeMatchesTermBNode = termANode.match(termBNode);
723
- if (termAMatchesTermB) {
741
+ var termAEqualToTermB = termA.isEqualTo(termB);
742
+ if (!termAEqualToTermB) {
743
+ return true;
744
+ }
745
+ });
746
+ compress(this.frames, function(frameA, frameB) {
747
+ var frameAEqualToFrameB = frameA.isEqualTo(frameB);
748
+ if (!frameAEqualToFrameB) {
749
+ return true;
750
+ }
751
+ });
752
+ compress(this.statements, function(statementA, statementB) {
753
+ var statementAEqualToStatementB = statementA.isEqualTo(statementB);
754
+ if (!statementAEqualToStatementB) {
755
+ return true;
756
+ }
757
+ });
758
+ compress(this.assertions, function(assertionA, assertionB) {
759
+ var assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
760
+ if (!assertionAEqualToAssertionB) {
761
+ return true;
762
+ }
763
+ });
764
+ compress(this.references, function(referenceA, referenceB) {
765
+ var referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
766
+ if (!referenceAEqualToReferenceB) {
767
+ return true;
768
+ }
769
+ });
770
+ compress(this.substitutions, function(substitutionA, substitutionB) {
771
+ var substitutionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
772
+ if (!substitutionAEqualToSubstitutionB) {
724
773
  return true;
725
774
  }
726
775
  });
@@ -730,21 +779,21 @@ var TemporaryContext = /*#__PURE__*/ function() {
730
779
  {
731
780
  key: "fromNothing",
732
781
  value: function fromNothing(context) {
733
- var terms = [], frames = [], tokens1 = null, statements = [], assertions = [], substitutions = [], reference = null, temporaryContext = new TemporaryContext(context, tokens1, terms, frames, statements, assertions, substitutions, reference);
782
+ var terms = [], frames = [], tokens1 = null, statements = [], assertions = [], references = [], substitutions = [], temporaryContext = new TemporaryContext(context, tokens1, terms, frames, statements, assertions, references, substitutions);
734
783
  return temporaryContext;
735
784
  }
736
785
  },
737
786
  {
738
787
  key: "fromTermsAndFrames",
739
788
  value: function fromTermsAndFrames(terms, frames, context) {
740
- var tokens1 = null, statements = [], assertions = [], substitutions = [], reference = null, temporaryContext = new TemporaryContext(context, tokens1, terms, frames, statements, assertions, substitutions, reference);
789
+ var tokens1 = null, statements = [], assertions = [], references = [], substitutions = [], temporaryContext = new TemporaryContext(context, tokens1, terms, frames, statements, assertions, references, substitutions);
741
790
  return temporaryContext;
742
791
  }
743
792
  },
744
793
  {
745
794
  key: "fromContextAndTokens",
746
795
  value: function fromContextAndTokens(context, tokens1) {
747
- var terms = [], frames = [], statements = [], assertions = [], substitutions = [], reference = null, temporaryContext = new TemporaryContext(context, tokens1, terms, frames, statements, assertions, substitutions, reference);
796
+ var terms = [], frames = [], statements = [], assertions = [], references = [], substitutions = [], temporaryContext = new TemporaryContext(context, tokens1, terms, frames, statements, assertions, references, substitutions);
748
797
  return temporaryContext;
749
798
  }
750
799
  }
@@ -752,4 +801,4 @@ var TemporaryContext = /*#__PURE__*/ function() {
752
801
  return TemporaryContext;
753
802
  }();
754
803
 
755
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3RlbXBvcmFyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZXh0cmFjdCwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wb3JhcnlDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdG9rZW5zLCB0ZXJtcywgZnJhbWVzLCBzdGF0ZW1lbnRzLCBhc3NlcnRpb25zLCBzdWJzdGl0dXRpb25zLCByZWZlcmVuY2UpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICB0aGlzLmZyYW1lcyA9IGZyYW1lcztcbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICAgIHRoaXMuYXNzZXJ0aW9ucyA9IGFzc2VydGlvbnM7XG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucztcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGFkZFRlcm0odGVybSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgZXh0cmFjdCh0aGlzLnRlcm1zLCAodGVybSkgPT4ge1xuICAgICAgY29uc3QgdGVybU1hdGNoZXNUZXJtTm9kZSA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTWF0Y2hlc1Rlcm1Ob2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGV4dC50cmFjZShgQURkZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuXG4gICAgdGhpcy50ZXJtcy5wdXNoKHRlcm0pO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZnJhbWVOb2RlID0gZnJhbWUuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCk7XG5cbiAgICBleHRyYWN0KHRoaXMuZnJhbWVzLCAoZnJhbWUpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lTWF0Y2hlc0ZyYW1lTm9kZSA9IGZyYW1lLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgIGlmIChmcmFtZU1hdGNoZXNGcmFtZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcblxuICAgIHRoaXMuZnJhbWVzLnB1c2goZnJhbWUpO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBleHRyYWN0KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50TWF0Y2hlc0ZyYW1lTm9kZSA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRNYXRjaGVzRnJhbWVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC5gKTtcblxuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cblxuICBhZGRBc3NlcnRpb24oYXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGFzc2VydGlvbk5vZGUgPSBhc3NlcnRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICAgIGFzc2VydGlvblN0cmluZyA9IGFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGV4dHJhY3QodGhpcy5hc3NlcnRpb25zLCAoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25NYXRjaGVzRnJhbWVOb2RlID0gYXNzZXJ0aW9uLm1hdGNoQXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgaWYgKGFzc2VydGlvbk1hdGNoZXNGcmFtZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uLmApO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zLnB1c2goYXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IHN1YnN0aXR1dGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk1hdGNoZXNGcmFtZU5vZGUgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uTWF0Y2hlc0ZyYW1lTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGVkIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24uYCk7XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMucHVzaChzdWJzdGl0dXRpb24pO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1NYXRjaGVzVGVybU5vZGUgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICBpZiAodGVybU1hdGNoZXNUZXJtTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZU1hdGNoZXNGcmFtZU5vZGUgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICBpZiAoZnJhbWVNYXRjaGVzRnJhbWVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzLmFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25NYXRjaGVzQXNzZXJ0aW9uTm9kZSA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgIGlmIChhc3NlcnRpb25NYXRjaGVzQXNzZXJ0aW9uTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuc3RhdGVtZW50cy5maW5kKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE1hdGNoZXNTdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgaWYgKHN0YXRlbWVudE1hdGNoZXNTdGF0ZW1lbnROb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFN1YnRpdHV0aW9uQnlTdWJ0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXMuc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk1hdGNoZXNTdWJ0aXR1dGlvbk5vZGUgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJ0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25NYXRjaGVzU3VidGl0dXRpb25Ob2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKG5lc3RlZCA9IHRydWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRWYXJpYWJsZXMobmVzdGVkKTsgfVxuXG4gIGdldEp1ZGdlbWVudHMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0SnVkZ2VtZW50cygpOyB9XG5cbiAgZ2V0RXF1aXZhbGVuY2VzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldEVxdWl2YWxlbmNlcygpOyB9XG5cbiAgZ2V0U3RlcHMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0U3RlcHMoKTsgfVxuXG4gIGdldExhc3RTdGVwKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldExhc3RTdGVwKCk7IH1cblxuICBnZXRTdGVwc09yU3VicHJvb2ZzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFN0ZXBzT3JTdWJwcm9vZnMoKTsgfVxuXG4gIGdldEZpbGVQYXRoKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldEZpbGVQYXRoKCk7IH1cblxuICBnZXRMZXhlcigpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRMZXhlcigpOyB9XG5cbiAgZ2V0UGFyc2VyKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFBhcnNlcigpOyB9XG5cbiAgZ2V0QXhpb21zKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldEF4aW9tcygpOyB9XG5cbiAgZ2V0TGVtbWFzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldExlbW1hcygpOyB9XG5cbiAgZ2V0VGhlb3JlbXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VGhlb3JlbXMoKTsgfVxuXG4gIGdldENvbmplY3R1cmVzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbmplY3R1cmVzKCk7IH1cblxuICBnZXRDb21iaW5hdG9ycygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDb21iaW5hdG9ycygpOyB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbnN0cnVjdG9ycygpOyB9XG5cbiAgZ2V0VHlwZVByZWZpeCgpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRUeXBlUHJlZml4KCk7IH1cblxuICBhZGRBeGlvbShheGlvbSkgeyB0aGlzLmNvbnRleHQuYWRkQXhpb20oYXhpb20pOyB9XG5cbiAgYWRkTGVtbWEobGVtbWEpIHsgdGhpcy5jb250ZXh0LmFkZExlbW1hKGxlbW1hKTsgfVxuXG4gIGFkZFRoZW9yZW0odGhlb3JlbSkgeyB0aGlzLmNvbnRleHQuYWRkVGhlb3JlbSh0aGVvcmVtKTsgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7IHJldHVybiB0aGlzLmNvbnRleHQuYWRkRXF1YWxpdHkoZXF1YWxpdHkpOyB9XG5cbiAgYWRkVmFyaWFibGUodmFyaWFibGUsIG5lc3RlZCA9IHRydWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5hZGRWYXJpYWJsZSh2YXJpYWJsZSwgbmVzdGVkKTsgfVxuXG4gIGFkZEp1ZGdlbWVudChqdWRnZW1lbnQpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTsgfVxuXG4gIGFkZFN0ZXBPclN1YnByb29mKHN0ZXBPclN1YnByb29mKSB7IHRoaXMuY29udGV4dC5hZGRTdGVwT3JTdWJwcm9vZihzdGVwT3JTdWJwcm9vZik7IH1cblxuICBmaW5kUHJvY2VkdXJlQnlOYW1lKG5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kUHJvY2VkdXJlQnlOYW1lKG5hbWUpOyB9XG5cbiAgZmluZExhYmVsQnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0KSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZExhYmVsQnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0KTsgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFJ1bGVCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRMZW1tYUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRMZW1tYUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kVGhlb3JlbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRUaGVvcmVtQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZENvbmplY3R1cmVCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZE1ldGFMZW1tYXNCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTWV0YUxlbW1hc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kTWV0YXRoZW9yZW1zQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZE1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kTWV0YUxlbW1hTWV0YXRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTWV0YUxlbW1hTWV0YXRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZE1ldGFMZW1tYU1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhTGVtbWFNZXRhdGhlb3JlbXNCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyLCBuZXN0ZWQgPSB0cnVlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyLCBuZXN0ZWQpOyB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpOyB9XG5cbiAgZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kRXF1aXZhbGVuY2VCeVRlcm0odGVybSk7IH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGZpbmRMYWJlbEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRMYWJlbEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7IH1cblxuICBmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTsgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7IH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpOyB9XG5cbiAgaXNQcm9jZWR1cmVQcmVzZW50QnlOYW1lKG5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1Byb2NlZHVyZVByZXNlbnRCeU5hbWUobmFtZSk7IH1cblxuICBpc0xhYmVsUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTGFiZWxQcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBpc01ldGFMZW1tYU1ldGF0aGVvcmVtUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTWV0YUxlbW1hTWV0YXRoZW9yZW1QcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRBeGlvbUxlbW1hVGhlb3JlbU9yQ29uamVjdHVyZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRBeGlvbUxlbW1hVGhlb3JlbU9yQ29uamVjdHVyZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnQobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50KG1ldGF2YXJpYWJsZSk7IH1cblxuICBpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7IH1cblxuICBpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7IH1cblxuICBpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpOyB9XG5cbiAgaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVmaXhQcmVzZW50QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSk7IH1cblxuICBpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciwgbmVzdGVkID0gdHJ1ZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciwgbmVzdGVkKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNMYWJlbFByZXNlbnRCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpOyB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBpc0p1ZGdlbWVudFByZXNlbnRCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc0p1ZGdlbWVudFByZXNlbnRCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpOyB9XG5cbiAgaXNUZXJtR3JvdW5kZWQodGVybSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVGVybUdyb3VuZGVkKHRlcm0pOyB9XG5cbiAgaXNWYXJpYWJsZURlZmluZWQodmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1ZhcmlhYmxlRGVmaW5lZCh2YXJpYWJsZSk7IH1cblxuICBpc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNNZXRhdmFyaWFibGVEZWZpbmVkKG1ldGF2YXJpYWJsZSk7IH1cblxuICBtYXRjaFRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24pIHsgcmV0dXJuIHRoaXMuY29udGV4dC5tYXRjaFRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24pOyB9XG5cbiAgbm9kZUFzU3RyaW5nKG5vZGUsIHRva2VucyA9IG51bGwpIHtcbiAgICBpZiAodG9rZW5zID09PSBudWxsKSB7XG4gICAgICB0b2tlbnMgPSB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUsIHRva2Vucyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgbm9kZXNBc1N0cmluZyhub2RlLCB0b2tlbnMgPSBudWxsKSB7XG4gICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgdG9rZW5zID0gdGhpcy50b2tlbnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5jb250ZXh0Lm5vZGVzQXNTdHJpbmcobm9kZSwgdG9rZW5zKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBub2RlQXNUb2tlbnMobm9kZSwgdG9rZW5zID0gbnVsbCkge1xuICAgIGlmICh0b2tlbnMgPT09IG51bGwpIHtcbiAgICAgIHRva2VucyA9IHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHRva2VucyA9IHRoaXMuY29udGV4dC5ub2RlQXNUb2tlbnMobm9kZSwgdG9rZW5zKTsgLy8vXG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgbm9kZXNBc1Rva2Vucyhub2RlLCB0b2tlbnMgPSBudWxsKSB7XG4gICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgdG9rZW5zID0gdGhpcy50b2tlbnM7XG4gICAgfVxuXG4gICAgdG9rZW5zID0gdGhpcy5jb250ZXh0Lm5vZGVzQXNUb2tlbnMobm9kZSwgdG9rZW5zKTsgIC8vL1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHRva2Vuc0FzU3RyaW5nKHRva2VucykgeyByZXR1cm4gdGhpcy5jb250ZXh0LnRva2Vuc0FzU3RyaW5nKHRva2Vucyk7IH1cblxuICB0cmFjZShtZXNzYWdlLCBub2RlID0gbnVsbCkgeyB0aGlzLmNvbnRleHQudHJhY2UobWVzc2FnZSwgbm9kZSk7IH1cblxuICBkZWJ1ZyhtZXNzYWdlLCBub2RlID0gbnVsbCkgeyB0aGlzLmNvbnRleHQuZGVidWcobWVzc2FnZSwgbm9kZSk7IH1cblxuICBpbmZvKG1lc3NhZ2UsIG5vZGUgPSBudWxsKSB7IHRoaXMuY29udGV4dC5pbmZvKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgd2FybmluZyhtZXNzYWdlLCBub2RlID0gbnVsbCkgeyB0aGlzLmNvbnRleHQud2FybmluZyhtZXNzYWdlLCBub2RlKTsgfVxuXG4gIGVycm9yKG1lc3NhZ2UsIG5vZGUgPSBudWxsKSB7IHRoaXMuY29udGV4dC5lcnJvcihtZXNzYWdlLCBub2RlKTsgfVxuXG4gIG1hcmdlKGNvbnRleHQpIHtcbiAgICBjb25zdCB0ZXJtcyA9IGNvbnRleHQuZ2V0VGVybXMoKSxcbiAgICAgICAgICBmcmFtZXMgPSBjb250ZXh0LmdldEZyYW1lcygpLFxuICAgICAgICAgIHN0YXRlbWVudHMgPSBjb250ZXh0LmdldFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBhc3NlcnRpb25zID0gY29udGV4dC5nZXRBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucygpO1xuXG4gICAgdGhpcy50ZXJtcyA9IFtcbiAgICAgIC4uLnRoaXMudGVybXMsXG4gICAgICAuLi50ZXJtc1xuICAgIF07XG5cbiAgICB0aGlzLmZyYW1lcyA9IFtcbiAgICAgIC4uLnRoaXMuZnJhbWVzLFxuICAgICAgLi4uZnJhbWVzXG4gICAgXTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IFtcbiAgICAgIC4uLnRoaXMuc3RhdGVtZW50cyxcbiAgICAgIC4uLnN0YXRlbWVudHNcbiAgICBdO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zID0gW1xuICAgICAgLi4udGhpcy5hc3NlcnRpb25zLFxuICAgICAgLi4uYXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBbXG4gICAgICAuLi50aGlzLnN1YnN0aXR1dGlvbnMsXG4gICAgICAuLi5zdWJzdGl0dXRpb25zXG4gICAgXTtcblxuICAgIGNvbXByZXNzKHRoaXMudGVybXMsICh0ZXJtQSwgdGVybUIpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1BTm9kZSA9IHRlcm1BLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHRlcm1CTm9kZSA9IHRlcm1CLmdldE5vZGUoKSxcbiAgICAgICAgICAgIHRlcm1BTm9kZU1hdGNoZXNUZXJtQk5vZGUgPSB0ZXJtQU5vZGUubWF0Y2godGVybUJOb2RlKTtcblxuICAgICAgaWYgKHRlcm1BTWF0Y2hlc1Rlcm1CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgdG9rZW5zID0gbnVsbCxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gW10sXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICByZWZlcmVuY2UgPSBudWxsLFxuICAgICAgICAgIHRlbXBvcmFyeUNvbnRleHQgPSBuZXcgVGVtcG9yYXJ5Q29udGV4dChjb250ZXh0LCB0b2tlbnMsIHRlcm1zLCBmcmFtZXMsIHN0YXRlbWVudHMsIGFzc2VydGlvbnMsIHN1YnN0aXR1dGlvbnMsIHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGVtcG9yYXJ5Q29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGVybXNBbmRGcmFtZXModGVybXMsIGZyYW1lcywgY29udGV4dCkge1xuICAgIGNvbnN0IHRva2VucyA9IG51bGwsXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgcmVmZXJlbmNlID0gbnVsbCxcbiAgICAgICAgICB0ZW1wb3JhcnlDb250ZXh0ID0gbmV3IFRlbXBvcmFyeUNvbnRleHQoY29udGV4dCwgdG9rZW5zLCB0ZXJtcywgZnJhbWVzLCBzdGF0ZW1lbnRzLCBhc3NlcnRpb25zLCBzdWJzdGl0dXRpb25zLCByZWZlcmVuY2UpO1xuXG4gICAgcmV0dXJuIHRlbXBvcmFyeUNvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRBbmRUb2tlbnMoY29udGV4dCwgdG9rZW5zKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gW10sXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICByZWZlcmVuY2UgPSBudWxsLFxuICAgICAgICAgIHRlbXBvcmFyeUNvbnRleHQgPSBuZXcgVGVtcG9yYXJ5Q29udGV4dChjb250ZXh0LCB0b2tlbnMsIHRlcm1zLCBmcmFtZXMsIHN0YXRlbWVudHMsIGFzc2VydGlvbnMsIHN1YnN0aXR1dGlvbnMsIHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGVtcG9yYXJ5Q29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlRlbXBvcmFyeUNvbnRleHQiLCJleHRyYWN0IiwiYXJyYXlVdGlsaXRpZXMiLCJjb21wcmVzcyIsImNvbnRleHQiLCJ0b2tlbnMiLCJ0ZXJtcyIsImZyYW1lcyIsInN0YXRlbWVudHMiLCJhc3NlcnRpb25zIiwic3Vic3RpdHV0aW9ucyIsInJlZmVyZW5jZSIsImdldENvbnRleHQiLCJnZXRUb2tlbnMiLCJnZXRUZXJtcyIsImdldEZyYW1lcyIsImdldFN0YXRlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiZ2V0U3Vic3RpdHV0aW9ucyIsImdldFJlZmVyZW5jZSIsImFkZFRlcm0iLCJ0ZXJtIiwidGVybU5vZGUiLCJnZXROb2RlIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRlcm1NYXRjaGVzVGVybU5vZGUiLCJtYXRjaFRlcm1Ob2RlIiwidHJhY2UiLCJwdXNoIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lTm9kZSIsImZyYW1lU3RyaW5nIiwiZnJhbWVNYXRjaGVzRnJhbWVOb2RlIiwibWF0Y2hGcmFtZU5vZGUiLCJhZGRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50TWF0Y2hlc0ZyYW1lTm9kZSIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25NYXRjaGVzRnJhbWVOb2RlIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvblN0cmluZyIsInN1YnN0aXR1dGlvbk1hdGNoZXNGcmFtZU5vZGUiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJhZGRSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdHJpbmciLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJmaW5kIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTWF0Y2hlc0Fzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50TWF0Y2hlc1N0YXRlbWVudE5vZGUiLCJmaW5kU3VidGl0dXRpb25CeVN1YnRpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk1hdGNoZXNTdWJ0aXR1dGlvbk5vZGUiLCJtYXRjaFN1YnRpdHV0aW9uTm9kZSIsImdldFZhcmlhYmxlcyIsIm5lc3RlZCIsImdldEp1ZGdlbWVudHMiLCJnZXRFcXVpdmFsZW5jZXMiLCJnZXRTdGVwcyIsImdldExhc3RTdGVwIiwiZ2V0U3RlcHNPclN1YnByb29mcyIsImdldEZpbGVQYXRoIiwiZ2V0TGV4ZXIiLCJnZXRQYXJzZXIiLCJnZXRBeGlvbXMiLCJnZXRMZW1tYXMiLCJnZXRUaGVvcmVtcyIsImdldENvbmplY3R1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJnZXRUeXBlUHJlZml4IiwiYWRkQXhpb20iLCJheGlvbSIsImFkZExlbW1hIiwibGVtbWEiLCJhZGRUaGVvcmVtIiwidGhlb3JlbSIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHkiLCJhZGRWYXJpYWJsZSIsInZhcmlhYmxlIiwiYWRkSnVkZ2VtZW50IiwianVkZ2VtZW50IiwiYWRkU3RlcE9yU3VicHJvb2YiLCJzdGVwT3JTdWJwcm9vZiIsImZpbmRQcm9jZWR1cmVCeU5hbWUiLCJuYW1lIiwiZmluZExhYmVsQnlSZWZlcmVuY2UiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJmaW5kTGVtbWFCeVJlZmVyZW5jZSIsImZpbmRUaGVvcmVtQnlSZWZlcmVuY2UiLCJmaW5kQ29uamVjdHVyZUJ5UmVmZXJlbmNlIiwiZmluZE1ldGFMZW1tYXNCeVJlZmVyZW5jZSIsImZpbmRNZXRhdGhlb3JlbXNCeVJlZmVyZW5jZSIsImZpbmRNZXRhTGVtbWFNZXRhdGhlb3JlbUJ5UmVmZXJlbmNlIiwiZmluZE1ldGFMZW1tYU1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm0iLCJmaW5kTWV0YXZhcmlhYmxlIiwiZmluZExhYmVsQnlNZXRhdmFyaWFibGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwibm9taW5hbFR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImlzUHJvY2VkdXJlUHJlc2VudEJ5TmFtZSIsImlzTGFiZWxQcmVzZW50QnlSZWZlcmVuY2UiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeVJlZmVyZW5jZSIsImlzTWV0YUxlbW1hTWV0YXRoZW9yZW1QcmVzZW50QnlSZWZlcmVuY2UiLCJmaW5kQXhpb21MZW1tYVRoZW9yZW1PckNvbmplY3R1cmVCeVJlZmVyZW5jZSIsImlzTWV0YXZhcmlhYmxlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZU5hbWUiLCJpbmNsdWRlUmVsZWFzZSIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwicHJlZml4ZWRUeXBlTmFtZSIsImlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyIiwiaXNMYWJlbFByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJpc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlIiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTm9kZSIsImlzSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlIiwiaXNUZXJtR3JvdW5kZWQiLCJpc1ZhcmlhYmxlRGVmaW5lZCIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1hdGNoVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwibm9kZUFzU3RyaW5nIiwibm9kZSIsInN0cmluZyIsIm5vZGVzQXNTdHJpbmciLCJub2RlQXNUb2tlbnMiLCJub2Rlc0FzVG9rZW5zIiwidG9rZW5zQXNTdHJpbmciLCJtZXNzYWdlIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwibWFyZ2UiLCJ0ZXJtQSIsInRlcm1CIiwidGVybUFOb2RlIiwidGVybUJOb2RlIiwidGVybUFOb2RlTWF0Y2hlc1Rlcm1CTm9kZSIsIm1hdGNoIiwidGVybUFNYXRjaGVzVGVybUIiLCJmcm9tTm90aGluZyIsInRlbXBvcmFyeUNvbnRleHQiLCJmcm9tVGVybXNBbmRGcmFtZXMiLCJmcm9tQ29udGV4dEFuZFRva2VucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFNcUJBOzs7eUJBSlU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvQixJQUFRQyxVQUFzQkMseUJBQWMsQ0FBcENELFNBQVNFLFdBQWFELHlCQUFjLENBQTNCQztBQUVGLElBQUEsQUFBTUgsaUNBQU47YUFBTUEsaUJBQ1BJLE9BQU8sRUFBRUMsT0FBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUztnQ0FEekVYO1FBRWpCLElBQUksQ0FBQ0ksT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxh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
804
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3RlbXBvcmFyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZXh0cmFjdCwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wb3JhcnlDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdG9rZW5zLCB0ZXJtcywgZnJhbWVzLCBzdGF0ZW1lbnRzLCBhc3NlcnRpb25zLCByZWZlcmVuY2VzLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgdGhpcy5mcmFtZXMgPSBmcmFtZXM7XG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50cztcbiAgICB0aGlzLmFzc2VydGlvbnMgPSBhc3NlcnRpb25zO1xuICAgIHRoaXMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXM7XG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgICBleHRyYWN0KHRoaXMudGVybXMsICh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtQiA9IHRlcm0sIC8vL1xuICAgICAgICAgICAgdGVybUFFcXVhbFRvVGVybUIgPSB0ZXJtQS5pc0VxdWFsVG8odGVybUIpO1xuXG4gICAgICBpZiAodGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBRGRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdG8gdGhlIGNvbnRleHQuYCk7XG5cbiAgICB0aGlzLnRlcm1zLnB1c2godGVybSk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lQSA9IGZyYW1lLCAvLy9cbiAgICAgICAgICBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKTtcblxuICAgIGV4dHJhY3QodGhpcy5mcmFtZXMsIChmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVCID0gZnJhbWUsIC8vL1xuICAgICAgICAgICAgZnJhbWVBRXF1YWxUb0ZyYW1lQiA9IGZyYW1lQS5pc0VxdWFsVG8oZnJhbWVCKTtcblxuICAgICAgaWYgKGZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSB0byB0aGUgY29udGV4dC5gKTtcblxuICAgIHRoaXMuZnJhbWVzLnB1c2goZnJhbWUpO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRBID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBleHRyYWN0KHRoaXMuc3RhdGVtZW50cywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50QiA9IHN0YXRlbWVudCwgLy8vXG4gICAgICAgICAgICBzdGF0ZW1lbnRBRXF1YWxUb0ZyYW1lQiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSBjb250ZXh0LmApO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uQSA9IGFzc2VydGlvbiwgLy8vXG4gICAgICAgICAgYXNzZXJ0aW9uU3RyaW5nID0gYXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgZXh0cmFjdCh0aGlzLmFzc2VydGlvbnMsIChhc3NlcnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbkIgPSBhc3NlcnRpb24sIC8vL1xuICAgICAgICAgICAgYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CID0gYXNzZXJ0aW9uQS5pc0VxdWFsVG8oYXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJyR7YXNzZXJ0aW9uU3RyaW5nfScgYXNzZXJ0aW9uIHRvIHRoZSBjb250ZXh0LmApO1xuXG4gICAgdGhpcy5hc3NlcnRpb25zLnB1c2goYXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlQSA9IHJlZmVyZW5jZSwgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgZXh0cmFjdCh0aGlzLnJlZmVyZW5jZXMsIChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZUIgPSByZWZlcmVuY2UsIC8vL1xuICAgICAgICAgICAgcmVmZXJlbmNlQUVxdWFsVG9SZWZlcmVuY2VCID0gcmVmZXJlbmNlQS5pc0VxdWFsVG8ocmVmZXJlbmNlQik7XG5cbiAgICAgIGlmIChyZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LmApO1xuXG4gICAgdGhpcy5yZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgZXh0cmFjdCh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHVpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKHN1YnN0aXR1aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkZWQgdGhlICcke3N1YnN0aXR1dGlvblN0cmluZ30nIHN1YnN0aXR1dGlvbiB0byB0aGUgY29udGV4dC5gKTtcblxuICAgIHRoaXMuc3Vic3RpdHV0aW9ucy5wdXNoKHN1YnN0aXR1dGlvbik7XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy50ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtTWF0Y2hlc1Rlcm1Ob2RlID0gdGVybS5tYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgaWYgKHRlcm1NYXRjaGVzVGVybU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLmZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZnJhbWVNYXRjaGVzRnJhbWVOb2RlID0gZnJhbWUubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgaWYgKGZyYW1lTWF0Y2hlc0ZyYW1lTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5zdGF0ZW1lbnRzLmZpbmQoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50TWF0Y2hlc1N0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50TWF0Y2hlc1N0YXRlbWVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzLmFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25NYXRjaGVzQXNzZXJ0aW9uTm9kZSA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgIGlmIChhc3NlcnRpb25NYXRjaGVzQXNzZXJ0aW9uTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlcy5maW5kKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAocmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHRoaXMuc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk1hdGNoZXNTdWJ0aXR1dGlvbk5vZGUgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uTWF0Y2hlc1N1YnRpdHV0aW9uTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFZhcmlhYmxlcyhuZXN0ZWQgPSB0cnVlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VmFyaWFibGVzKG5lc3RlZCk7IH1cblxuICBnZXRKdWRnZW1lbnRzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldEp1ZGdlbWVudHMoKTsgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTsgfVxuXG4gIGdldFN0ZXBzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFN0ZXBzKCk7IH1cblxuICBnZXRMYXN0U3RlcCgpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRMYXN0U3RlcCgpOyB9XG5cbiAgZ2V0U3RlcHNPclN1YnByb29mcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRTdGVwc09yU3VicHJvb2ZzKCk7IH1cblxuICBnZXRGaWxlUGF0aCgpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRGaWxlUGF0aCgpOyB9XG5cbiAgZ2V0TGV4ZXIoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0TGV4ZXIoKTsgfVxuXG4gIGdldFBhcnNlcigpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRQYXJzZXIoKTsgfVxuXG4gIGdldEF4aW9tcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKTsgfVxuXG4gIGdldExlbW1hcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRMZW1tYXMoKTsgfVxuXG4gIGdldFRoZW9yZW1zKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFRoZW9yZW1zKCk7IH1cblxuICBnZXRDb25qZWN0dXJlcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDb25qZWN0dXJlcygpOyB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTsgfVxuXG4gIGdldENvbnN0cnVjdG9ycygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKTsgfVxuXG4gIGdldFR5cGVQcmVmaXgoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VHlwZVByZWZpeCgpOyB9XG5cbiAgYWRkQXhpb20oYXhpb20pIHsgdGhpcy5jb250ZXh0LmFkZEF4aW9tKGF4aW9tKTsgfVxuXG4gIGFkZExlbW1hKGxlbW1hKSB7IHRoaXMuY29udGV4dC5hZGRMZW1tYShsZW1tYSk7IH1cblxuICBhZGRUaGVvcmVtKHRoZW9yZW0pIHsgdGhpcy5jb250ZXh0LmFkZFRoZW9yZW0odGhlb3JlbSk7IH1cblxuICBhZGRFcXVhbGl0eShlcXVhbGl0eSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KTsgfVxuXG4gIGFkZFZhcmlhYmxlKHZhcmlhYmxlLCBuZXN0ZWQgPSB0cnVlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUsIG5lc3RlZCk7IH1cblxuICBhZGRKdWRnZW1lbnQoanVkZ2VtZW50KSB7IHJldHVybiB0aGlzLmNvbnRleHQuYWRkSnVkZ2VtZW50KGp1ZGdlbWVudCk7IH1cblxuICBhZGRTdGVwT3JTdWJwcm9vZihzdGVwT3JTdWJwcm9vZikgeyB0aGlzLmNvbnRleHQuYWRkU3RlcE9yU3VicHJvb2Yoc3RlcE9yU3VicHJvb2YpOyB9XG5cbiAgZmluZFByb2NlZHVyZUJ5TmFtZShuYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFByb2NlZHVyZUJ5TmFtZShuYW1lKTsgfVxuXG4gIGZpbmRMYWJlbEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRMYWJlbEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCk7IH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kTGVtbWFCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTGVtbWFCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZFRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVGhlb3JlbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kQ29uamVjdHVyZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRNZXRhTGVtbWFzQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZE1ldGFMZW1tYXNCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZE1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhdGhlb3JlbXNCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZE1ldGFMZW1tYU1ldGF0aGVvcmVtQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZE1ldGFMZW1tYU1ldGF0aGVvcmVtQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRNZXRhTGVtbWFNZXRhdGhlb3JlbXNCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTWV0YUxlbW1hTWV0YXRoZW9yZW1zQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciwgbmVzdGVkID0gdHJ1ZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciwgbmVzdGVkKTsgfVxuXG4gIGZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0ZXJtKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pOyB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7IH1cblxuICBmaW5kTGFiZWxCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTGFiZWxCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpOyB9XG5cbiAgZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7IH1cblxuICBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpOyB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTsgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5TmFtZShuYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNQcm9jZWR1cmVQcmVzZW50QnlOYW1lKG5hbWUpOyB9XG5cbiAgaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc0xhYmVsUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgaXNNZXRhTGVtbWFNZXRhdGhlb3JlbVByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc01ldGFMZW1tYU1ldGF0aGVvcmVtUHJlc2VudEJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kQXhpb21MZW1tYVRoZW9yZW1PckNvbmplY3R1cmVCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kQXhpb21MZW1tYVRoZW9yZW1PckNvbmplY3R1cmVCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50KG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudChtZXRhdmFyaWFibGUpOyB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpOyB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpOyB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKTsgfVxuXG4gIGlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUpOyB9XG5cbiAgaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIsIG5lc3RlZCA9IHRydWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIsIG5lc3RlZCk7IH1cblxuICBpc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNMYWJlbFByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7IH1cblxuICBpc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5vZGUpOyB9XG5cbiAgaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNKdWRnZW1lbnRQcmVzZW50QnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1Rlcm1Hcm91bmRlZCh0ZXJtKTsgfVxuXG4gIGlzVmFyaWFibGVEZWZpbmVkKHZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNWYXJpYWJsZURlZmluZWQodmFyaWFibGUpOyB9XG5cbiAgaXNNZXRhdmFyaWFibGVEZWZpbmVkKG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpOyB9XG5cbiAgbWF0Y2hUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKSB7IHJldHVybiB0aGlzLmNvbnRleHQubWF0Y2hUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTsgfVxuXG4gIG5vZGVBc1N0cmluZyhub2RlLCB0b2tlbnMgPSBudWxsKSB7XG4gICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgdG9rZW5zID0gdGhpcy50b2tlbnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5jb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlLCB0b2tlbnMpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIG5vZGVzQXNTdHJpbmcobm9kZSwgdG9rZW5zID0gbnVsbCkge1xuICAgIGlmICh0b2tlbnMgPT09IG51bGwpIHtcbiAgICAgIHRva2VucyA9IHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuY29udGV4dC5ub2Rlc0FzU3RyaW5nKG5vZGUsIHRva2Vucyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgbm9kZUFzVG9rZW5zKG5vZGUsIHRva2VucyA9IG51bGwpIHtcbiAgICBpZiAodG9rZW5zID09PSBudWxsKSB7XG4gICAgICB0b2tlbnMgPSB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICB0b2tlbnMgPSB0aGlzLmNvbnRleHQubm9kZUFzVG9rZW5zKG5vZGUsIHRva2Vucyk7IC8vL1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIG5vZGVzQXNUb2tlbnMobm9kZSwgdG9rZW5zID0gbnVsbCkge1xuICAgIGlmICh0b2tlbnMgPT09IG51bGwpIHtcbiAgICAgIHRva2VucyA9IHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHRva2VucyA9IHRoaXMuY29udGV4dC5ub2Rlc0FzVG9rZW5zKG5vZGUsIHRva2Vucyk7ICAvLy9cblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICB0b2tlbnNBc1N0cmluZyh0b2tlbnMpIHsgcmV0dXJuIHRoaXMuY29udGV4dC50b2tlbnNBc1N0cmluZyh0b2tlbnMpOyB9XG5cbiAgdHJhY2UobWVzc2FnZSwgbm9kZSA9IG51bGwpIHsgdGhpcy5jb250ZXh0LnRyYWNlKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgZGVidWcobWVzc2FnZSwgbm9kZSA9IG51bGwpIHsgdGhpcy5jb250ZXh0LmRlYnVnKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgaW5mbyhtZXNzYWdlLCBub2RlID0gbnVsbCkgeyB0aGlzLmNvbnRleHQuaW5mbyhtZXNzYWdlLCBub2RlKTsgfVxuXG4gIHdhcm5pbmcobWVzc2FnZSwgbm9kZSA9IG51bGwpIHsgdGhpcy5jb250ZXh0Lndhcm5pbmcobWVzc2FnZSwgbm9kZSk7IH1cblxuICBlcnJvcihtZXNzYWdlLCBub2RlID0gbnVsbCkgeyB0aGlzLmNvbnRleHQuZXJyb3IobWVzc2FnZSwgbm9kZSk7IH1cblxuICBtZXJnZShjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBjb250ZXh0LmdldFRlcm1zKCksXG4gICAgICAgICAgZnJhbWVzID0gY29udGV4dC5nZXRGcmFtZXMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gY29udGV4dC5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSBjb250ZXh0LmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICB0aGlzLnRlcm1zID0gW1xuICAgICAgLi4udGhpcy50ZXJtcyxcbiAgICAgIC4uLnRlcm1zXG4gICAgXTtcblxuICAgIHRoaXMuZnJhbWVzID0gW1xuICAgICAgLi4udGhpcy5mcmFtZXMsXG4gICAgICAuLi5mcmFtZXNcbiAgICBdO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gW1xuICAgICAgLi4udGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgLi4uc3RhdGVtZW50c1xuICAgIF07XG5cbiAgICB0aGlzLmFzc2VydGlvbnMgPSBbXG4gICAgICAuLi50aGlzLmFzc2VydGlvbnMsXG4gICAgICAuLi5hc3NlcnRpb25zXG4gICAgXTtcblxuICAgIHRoaXMucmVmZXJlbmNlcyA9IFtcbiAgICAgIC4uLnRoaXMucmVmZXJlbmNlcyxcbiAgICAgIC4uLnJlZmVyZW5jZXNcbiAgICBdO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gW1xuICAgICAgLi4udGhpcy5zdWJzdGl0dXRpb25zLFxuICAgICAgLi4uc3Vic3RpdHV0aW9uc1xuICAgIF07XG5cbiAgICBjb21wcmVzcyh0aGlzLnRlcm1zLCAodGVybUEsIHRlcm1CKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICghdGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLmZyYW1lcywgKGZyYW1lQSwgZnJhbWVCKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuXG4gICAgICBpZiAoIWZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLnN0YXRlbWVudHMsIChzdGF0ZW1lbnRBLCBzdGF0ZW1lbnRCKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIgPSBzdGF0ZW1lbnRBLmlzRXF1YWxUbyhzdGF0ZW1lbnRCKTtcblxuICAgICAgaWYgKCFzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLmFzc2VydGlvbnMsIChhc3NlcnRpb25BLCBhc3NlcnRpb25CKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIgPSBhc3NlcnRpb25BLmlzRXF1YWxUbyhhc3NlcnRpb25CKTtcblxuICAgICAgaWYgKCFhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLnJlZmVyZW5jZXMsIChyZWZlcmVuY2VBLCByZWZlcmVuY2VCKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIgPSByZWZlcmVuY2VBLmlzRXF1YWxUbyhyZWZlcmVuY2VCKTtcblxuICAgICAgaWYgKCFyZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb25BLCBzdWJzdGl0dXRpb25CKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKCFzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgdG9rZW5zID0gbnVsbCxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gW10sXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSBbXSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgdGVtcG9yYXJ5Q29udGV4dCA9IG5ldyBUZW1wb3JhcnlDb250ZXh0KGNvbnRleHQsIHRva2VucywgdGVybXMsIGZyYW1lcywgc3RhdGVtZW50cywgYXNzZXJ0aW9ucywgcmVmZXJlbmNlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gdGVtcG9yYXJ5Q29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVGVybXNBbmRGcmFtZXModGVybXMsIGZyYW1lcywgY29udGV4dCkge1xuICAgIGNvbnN0IHRva2VucyA9IG51bGwsXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICByZWZlcmVuY2VzID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIHRlbXBvcmFyeUNvbnRleHQgPSBuZXcgVGVtcG9yYXJ5Q29udGV4dChjb250ZXh0LCB0b2tlbnMsIHRlcm1zLCBmcmFtZXMsIHN0YXRlbWVudHMsIGFzc2VydGlvbnMsIHJlZmVyZW5jZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHRlbXBvcmFyeUNvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRBbmRUb2tlbnMoY29udGV4dCwgdG9rZW5zKSB7XG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICBmcmFtZXMgPSBbXSxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gW10sXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IFtdLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSBbXSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgdGVtcG9yYXJ5Q29udGV4dCA9IG5ldyBUZW1wb3JhcnlDb250ZXh0KGNvbnRleHQsIHRva2VucywgdGVybXMsIGZyYW1lcywgc3RhdGVtZW50cywgYXNzZXJ0aW9ucywgcmVmZXJlbmNlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gdGVtcG9yYXJ5Q29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlRlbXBvcmFyeUNvbnRleHQiLCJleHRyYWN0IiwiYXJyYXlVdGlsaXRpZXMiLCJjb21wcmVzcyIsImNvbnRleHQiLCJ0b2tlbnMiLCJ0ZXJtcyIsImZyYW1lcyIsInN0YXRlbWVudHMiLCJhc3NlcnRpb25zIiwicmVmZXJlbmNlcyIsInN1YnN0aXR1dGlvbnMiLCJnZXRDb250ZXh0IiwiZ2V0VG9rZW5zIiwiZ2V0VGVybXMiLCJnZXRGcmFtZXMiLCJnZXRTdGF0ZW1lbnRzIiwiZ2V0QXNzZXJ0aW9ucyIsImdldFJlZmVyZW5jZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwiYWRkVGVybSIsInRlcm0iLCJ0ZXJtQSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0ZXJtQiIsInRlcm1BRXF1YWxUb1Rlcm1CIiwiaXNFcXVhbFRvIiwidHJhY2UiLCJwdXNoIiwiYWRkRnJhbWUiLCJmcmFtZSIsImZyYW1lQSIsImZyYW1lU3RyaW5nIiwiZnJhbWVCIiwiZnJhbWVBRXF1YWxUb0ZyYW1lQiIsImFkZFN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudEEiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdGF0ZW1lbnRCIiwic3RhdGVtZW50QUVxdWFsVG9GcmFtZUIiLCJhZGRBc3NlcnRpb24iLCJhc3NlcnRpb24iLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uU3RyaW5nIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImFkZFJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZUEiLCJyZWZlcmVuY2VTdHJpbmciLCJyZWZlcmVuY2VCIiwicmVmZXJlbmNlQUVxdWFsVG9SZWZlcmVuY2VCIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQSIsInN1YnN0aXR1dGlvblN0cmluZyIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dWlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwiZmluZCIsInRlcm1NYXRjaGVzVGVybU5vZGUiLCJtYXRjaFRlcm1Ob2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU1hdGNoZXNGcmFtZU5vZGUiLCJtYXRjaEZyYW1lTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50TWF0Y2hlc1N0YXRlbWVudE5vZGUiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbk1hdGNoZXNBc3NlcnRpb25Ob2RlIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25NYXRjaGVzU3VidGl0dXRpb25Ob2RlIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0VmFyaWFibGVzIiwibmVzdGVkIiwiZ2V0SnVkZ2VtZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldFN0ZXBzIiwiZ2V0TGFzdFN0ZXAiLCJnZXRTdGVwc09yU3VicHJvb2ZzIiwiZ2V0RmlsZVBhdGgiLCJnZXRMZXhlciIsImdldFBhcnNlciIsImdldEF4aW9tcyIsImdldExlbW1hcyIsImdldFRoZW9yZW1zIiwiZ2V0Q29uamVjdHVyZXMiLCJnZXRDb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImdldFR5cGVQcmVmaXgiLCJhZGRBeGlvbSIsImF4aW9tIiwiYWRkTGVtbWEiLCJsZW1tYSIsImFkZFRoZW9yZW0iLCJ0aGVvcmVtIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImFkZFZhcmlhYmxlIiwidmFyaWFibGUiLCJhZGRKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJhZGRTdGVwT3JTdWJwcm9vZiIsInN0ZXBPclN1YnByb29mIiwiZmluZFByb2NlZHVyZUJ5TmFtZSIsIm5hbWUiLCJmaW5kTGFiZWxCeVJlZmVyZW5jZSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImZpbmRMZW1tYUJ5UmVmZXJlbmNlIiwiZmluZFRoZW9yZW1CeVJlZmVyZW5jZSIsImZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UiLCJmaW5kTWV0YUxlbW1hc0J5UmVmZXJlbmNlIiwiZmluZE1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlIiwiZmluZE1ldGFMZW1tYU1ldGF0aGVvcmVtQnlSZWZlcmVuY2UiLCJmaW5kTWV0YUxlbW1hTWV0YXRoZW9yZW1zQnlSZWZlcmVuY2UiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImZpbmRFcXVpdmFsZW5jZUJ5VGVybSIsImZpbmRNZXRhdmFyaWFibGUiLCJmaW5kTGFiZWxCeU1ldGF2YXJpYWJsZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiaXNQcm9jZWR1cmVQcmVzZW50QnlOYW1lIiwiaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZSIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5UmVmZXJlbmNlIiwiaXNNZXRhTGVtbWFNZXRhdGhlb3JlbVByZXNlbnRCeVJlZmVyZW5jZSIsImZpbmRBeGlvbUxlbW1hVGhlb3JlbU9yQ29uamVjdHVyZUJ5UmVmZXJlbmNlIiwiaXNNZXRhdmFyaWFibGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImluY2x1ZGVSZWxlYXNlIiwiaW5jbHVkZURlcGVuZGVuY2llcyIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsImlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwiaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJpc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsImlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGUiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJpc0p1ZGdlbWVudFByZXNlbnRCeU1ldGF2YXJpYWJsZSIsImlzVGVybUdyb3VuZGVkIiwiaXNWYXJpYWJsZURlZmluZWQiLCJpc01ldGF2YXJpYWJsZURlZmluZWQiLCJtYXRjaFRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsIm5vZGVBc1N0cmluZyIsIm5vZGUiLCJzdHJpbmciLCJub2Rlc0FzU3RyaW5nIiwibm9kZUFzVG9rZW5zIiwibm9kZXNBc1Rva2VucyIsInRva2Vuc0FzU3RyaW5nIiwibWVzc2FnZSIsImRlYnVnIiwiaW5mbyIsIndhcm5pbmciLCJlcnJvciIsIm1lcmdlIiwic3RhdGVtZW50QUVxdWFsVG9TdGF0ZW1lbnRCIiwic3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CIiwiZnJvbU5vdGhpbmciLCJ0ZW1wb3JhcnlDb250ZXh0IiwiZnJvbVRlcm1zQW5kRnJhbWVzIiwiZnJv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
@@ -23,7 +23,7 @@ function verifyAsMetavariableAndSubstitution(statement, assignments, stated, con
23
23
  context.trace("Verifying the '".concat(statementString, "' statement as a metavariable and substitution..."));
24
24
  var metavariableVerifies = metavariable.verify(context);
25
25
  if (metavariableVerifies) {
26
- var TermSubstitution = _ontology.default.TermSubstitution, FrameSubstitution = _ontology.default.FrameSubstitution, substitution = TermSubstitution.fromStatement(statement, context) || FrameSubstitution.fromStatement(statement, context);
26
+ var TermSubstitution = _ontology.default.TermSubstitution, FrameSubstitution = _ontology.default.FrameSubstitution, frameSubstitution = FrameSubstitution.fromStatement(statement, context), termSubstitution = TermSubstitution.fromStatement(statement, context), substitution = termSubstitution || frameSubstitution;
27
27
  if (substitution !== null) {
28
28
  var substitutionVerifies = substitution.verify(context);
29
29
  if (substitutionVerifies) {
@@ -195,4 +195,4 @@ var verifyMixins = [
195
195
  ];
196
196
  var _default = verifyMixins;
197
197
 
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXhpbnMvc3RhdGVtZW50L3ZlcmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG9udG9sb2d5IGZyb20gXCIuLi8uLi9vbnRvbG9neVwiO1xuXG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5mdW5jdGlvbiB2ZXJpZnlBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlIGFuZCBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVZlcmlmaWVzID0gbWV0YXZhcmlhYmxlLnZlcmlmeShjb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVWZXJpZmllcykge1xuICAgICAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uLCBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gb250b2xvZ3ksXG4gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB8fCBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uVmVyaWZpZXMgPSBzdWJzdGl0dXRpb24udmVyaWZ5KGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHZlcmlmaWVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ZXJpZmllc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZSBhbmQgc3Vic3RpdHV0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2ZXJpZmllc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uO1xufVxuXG5mdW5jdGlvbiB1bmlmeVdpdGhCcmFja2V0ZWRDb21iaW5hdG9yKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgYXNzaWdubWVudHMgPSBudWxsOyAvLy9cblxuICBjb25zdCB7IEJyYWNrZXRlZENvbWJpbmF0b3IgfSA9IG9udG9sb2d5LFxuICAgICAgICBicmFja2V0ZWRDb21iaW5hdG9yID0gQnJhY2tldGVkQ29tYmluYXRvci5mcm9tTm90aGluZygpLFxuICAgICAgICB1bmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZnVuY3Rpb24gdW5pZnlXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycygpLFxuICAgICAgICB1bmlmaWVzV2l0aENvbWJpbmF0b3JzID0gY29tYmluYXRvcnMuc29tZSgoY29tYmluYXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29tYmluYXRvciA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmICh1bmlmaWVzV2l0aENvbWJpbmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHVuaWZpZXNXaXRoQ29tYmluYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFzRXF1YWxpdHkoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVZlcmlmaWVzID0gZXF1YWxpdHkudmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmVyaWZpZXNBc0VxdWFsaXR5ID0gZXF1YWxpdHlWZXJpZmllczsgLy8vXG5cbiAgICBpZiAodmVyaWZpZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2ZXJpZmllc0FzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFzSnVkZ2VtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmVyaWZpZXNBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZlcmlmaWVzID0ganVkZ2VtZW50LnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZlcmlmaWVzQXNKdWRnZW1lbnQgPSBqdWRnZW1lbnRWZXJpZmllczsgIC8vL1xuXG4gICAgaWYgKHZlcmlmaWVzQXNKdWRnZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzQXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVzQXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmVyaWZpZXMgPSB0eXBlQXNzZXJ0aW9uLnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZlcmlmaWVzQXNUeXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvblZlcmlmaWVzOyAvLy9cblxuICAgIGlmICh2ZXJpZmllc0FzVHlwZUFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzQXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc0FzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblZlcmlmaWVzID0gZGVmaW5lZEFzc2VydGlvbi52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2ZXJpZmllc0FzRGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25WZXJpZmllczsgLy8vXG5cbiAgICBpZiAodmVyaWZpZXNBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2ZXJpZmllc0FzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uVmVyaWZpZXMgPSBwcm9wZXJ0eUFzc2VydGlvbi52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2ZXJpZmllc0FzUHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvblZlcmlmaWVzOyAvLy9cblxuICAgIGlmICh2ZXJpZmllc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmVyaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmVyaWZpZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25WZXJpZmllcyA9IHN1YnByb29mQXNzZXJ0aW9uLnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZlcmlmaWVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uVmVyaWZpZXM7IC8vL1xuXG4gICAgaWYgKHZlcmlmaWVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2ZXJpZmllc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmVyaWZpZXNBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25WZXJpZmllcyA9IGNvbnRhaW5lZEFzc2VydGlvbi52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2ZXJpZmllc0FzQ29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uVmVyaWZpZXM7IC8vL1xuXG4gICAgaWYgKHZlcmlmaWVzQXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2ZXJpZmllc0FzQ29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBc1NhdGlzZmllc0Fzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uVmVyaWZpZXMgPSBzYXRpc2ZpZXNBc3NlcnRpb24udmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmVyaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvblZlcmlmaWVzOyAvLy9cblxuICAgIGlmICh2ZXJpZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmVyaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuY29uc3QgdmVyaWZ5TWl4aW5zID0gW1xuICB2ZXJpZnlBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbixcbiAgdW5pZnlXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdW5pZnlXaXRoQ29tYmluYXRvcnMsXG4gIHZlcmlmeUFzRXF1YWxpdHksXG4gIHZlcmlmeUFzSnVkZ2VtZW50LFxuICB2ZXJpZnlBc1R5cGVBc3NlcnRpb24sXG4gIHZlcmlmeUFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmVyaWZ5QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmVyaWZ5QXNTdWJwcm9vZkFzc2VydGlvbixcbiAgdmVyaWZ5QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZlcmlmeUFzU2F0aXNmaWVzQXNzZXJ0aW9uXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB2ZXJpZnlNaXhpbnM7XG4iXSwibmFtZXMiOlsidmVyaWZ5QXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnQiLCJhc3NpZ25tZW50cyIsInN0YXRlZCIsImNvbnRleHQiLCJ2ZXJpZmllc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwibWV0YXZhcmlhYmxlVmVyaWZpZXMiLCJ2ZXJpZnkiLCJUZXJtU3Vic3RpdHV0aW9uIiwib250b2xvZ3kiLCJGcmFtZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJzdWJzdGl0dXRpb25WZXJpZmllcyIsImRlYnVnIiwidW5pZnlXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsIkJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiZnJvbU5vdGhpbmciLCJ1bmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5V2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJzb21lIiwiY29tYmluYXRvciIsInVuaWZpZXNXaXRoQ29tYmluYXRvciIsInZlcmlmeUFzRXF1YWxpdHkiLCJ2ZXJpZmllc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsImVxdWFsaXR5VmVyaWZpZXMiLCJ2ZXJpZnlBc0p1ZGdlbWVudCIsInZlcmlmaWVzQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwianVkZ2VtZW50VmVyaWZpZXMiLCJ2ZXJpZnlBc1R5cGVBc3NlcnRpb24iLCJ2ZXJpZmllc0FzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInR5cGVBc3NlcnRpb25WZXJpZmllcyIsImFzc2VydGlvbiIsImFkZEFzc2VydGlvbiIsInZlcmlmeUFzRGVmaW5lZEFzc2VydGlvbiIsInZlcmlmaWVzQXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVmaW5lZEFzc2VydGlvblZlcmlmaWVzIiwidmVyaWZ5QXNQcm9wZXJ0eUFzc2VydGlvbiIsInZlcmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwicHJvcGVydHlBc3NlcnRpb25WZXJpZmllcyIsInZlcmlmeUFzU3VicHJvb2ZBc3NlcnRpb24iLCJ2ZXJpZmllc0FzU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInN1YnByb29mQXNzZXJ0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZlcmlmaWVzQXNDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiY29udGFpbmVkQXNzZXJ0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlBc1NhdGlzZmllc0Fzc2VydGlvbiIsInZlcmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic2F0aXNmaWVzQXNzZXJ0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW9TQTs7O2VBQUE7OzsrREFsU3FCO3VCQVUyQjs7Ozs7O0FBRWhELFNBQVNBLG9DQUFvQ0MsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsT0FBTztJQUNsRixJQUFJQyx3Q0FBd0M7SUFFNUMsSUFBTUMsZUFBZUMsSUFBQUEsa0NBQXlCLEVBQUNOLFdBQVdHO0lBRTFELElBQUlFLGlCQUFpQixNQUFNO1FBQ3pCLElBQU1FLGtCQUFrQlAsVUFBVVEsU0FBUztRQUUzQ0wsUUFBUU0sS0FBSyxDQUFDLEFBQUMsa0JBQWlDLE9BQWhCRixpQkFBZ0I7UUFFaEQsSUFBTUcsdUJBQXVCTCxhQUFhTSxNQUFNLENBQUNSO1FBRWpELElBQUlPLHNCQUFzQjtZQUN4QixJQUFRRSxtQkFBd0NDLGlCQUFRLENBQWhERCxrQkFBa0JFLG9CQUFzQkQsaUJBQVEsQ0FBOUJDLG1CQUNwQkMsZUFBZUgsaUJBQWlCSSxhQUFhLENBQUNoQixXQUFXRyxZQUFZVyxrQkFBa0JFLGFBQWEsQ0FBQ2hCLFdBQVdHO1lBRXRILElBQUlZLGlCQUFpQixNQUFNO2dCQUN6QixJQUFNRSx1QkFBdUJGLGFBQWFKLE1BQU0sQ0FBQ1I7Z0JBRWpELElBQUljLHNCQUFzQjtvQkFDeEJiLHdDQUF3QztnQkFDMUM7WUFDRixPQUFPO2dCQUNMQSx3Q0FBd0M7WUFDMUM7UUFDRjtRQUVBLElBQUlBLHVDQUF1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
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXhpbnMvc3RhdGVtZW50L3ZlcmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG9udG9sb2d5IGZyb20gXCIuLi8uLi9vbnRvbG9neVwiO1xuXG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5mdW5jdGlvbiB2ZXJpZnlBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlIGFuZCBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVZlcmlmaWVzID0gbWV0YXZhcmlhYmxlLnZlcmlmeShjb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVWZXJpZmllcykge1xuICAgICAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uLCBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gb250b2xvZ3ksXG4gICAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IEZyYW1lU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9ICh0ZXJtU3Vic3RpdHV0aW9uIHx8IGZyYW1lU3Vic3RpdHV0aW9uKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25WZXJpZmllcyA9IHN1YnN0aXR1dGlvbi52ZXJpZnkoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgdmVyaWZpZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZlcmlmaWVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlIGFuZCBzdWJzdGl0dXRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IHsgQnJhY2tldGVkQ29tYmluYXRvciB9ID0gb250b2xvZ3ksXG4gICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBCcmFja2V0ZWRDb21iaW5hdG9yLmZyb21Ob3RoaW5nKCksXG4gICAgICAgIHVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICByZXR1cm4gdW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB1bmlmeVdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCksXG4gICAgICAgIHVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5pZmllc1dpdGhDb21iaW5hdG9yID0gY29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHVuaWZpZXNXaXRoQ29tYmluYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gdW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdmVyaWZ5QXNFcXVhbGl0eShzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVzQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmVyaWZpZXMgPSBlcXVhbGl0eS52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2ZXJpZmllc0FzRXF1YWxpdHkgPSBlcXVhbGl0eVZlcmlmaWVzOyAvLy9cblxuICAgIGlmICh2ZXJpZmllc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5QXNKdWRnZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc0FzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgY29uc3QganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3QganVkZ2VtZW50VmVyaWZpZXMgPSBqdWRnZW1lbnQudmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmVyaWZpZXNBc0p1ZGdlbWVudCA9IGp1ZGdlbWVudFZlcmlmaWVzOyAgLy8vXG5cbiAgICBpZiAodmVyaWZpZXNBc0p1ZGdlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmVyaWZpZXNBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmVyaWZpZXNBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WZXJpZmllcyA9IHR5cGVBc3NlcnRpb24udmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmVyaWZpZXNBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmVyaWZpZXM7IC8vL1xuXG4gICAgaWYgKHZlcmlmaWVzQXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmVyaWZpZXNBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVzQXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uVmVyaWZpZXMgPSBkZWZpbmVkQXNzZXJ0aW9uLnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZlcmlmaWVzQXNEZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvblZlcmlmaWVzOyAvLy9cblxuICAgIGlmICh2ZXJpZmllc0FzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzQXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmVyaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25WZXJpZmllcyA9IHByb3BlcnR5QXNzZXJ0aW9uLnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZlcmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uVmVyaWZpZXM7IC8vL1xuXG4gICAgaWYgKHZlcmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2ZXJpZmllc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblZlcmlmaWVzID0gc3VicHJvb2ZBc3NlcnRpb24udmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmVyaWZpZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25WZXJpZmllczsgLy8vXG5cbiAgICBpZiAodmVyaWZpZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc0FzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblZlcmlmaWVzID0gY29udGFpbmVkQXNzZXJ0aW9uLnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZlcmlmaWVzQXNDb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25WZXJpZmllczsgLy8vXG5cbiAgICBpZiAodmVyaWZpZXNBc0NvbnRhaW5lZEFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzQXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmVyaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25WZXJpZmllcyA9IHNhdGlzZmllc0Fzc2VydGlvbi52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2ZXJpZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uVmVyaWZpZXM7IC8vL1xuXG4gICAgaWYgKHZlcmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2ZXJpZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5jb25zdCB2ZXJpZnlNaXhpbnMgPSBbXG4gIHZlcmlmeUFzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uLFxuICB1bmlmeVdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB1bmlmeVdpdGhDb21iaW5hdG9ycyxcbiAgdmVyaWZ5QXNFcXVhbGl0eSxcbiAgdmVyaWZ5QXNKdWRnZW1lbnQsXG4gIHZlcmlmeUFzVHlwZUFzc2VydGlvbixcbiAgdmVyaWZ5QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICB2ZXJpZnlBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2ZXJpZnlBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2ZXJpZnlBc0NvbnRhaW5lZEFzc2VydGlvbixcbiAgdmVyaWZ5QXNTYXRpc2ZpZXNBc3NlcnRpb25cbl07XG5cbmV4cG9ydCBkZWZhdWx0IHZlcmlmeU1peGlucztcbiJdLCJuYW1lcyI6WyJ2ZXJpZnlBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN0YXRlbWVudCIsImFzc2lnbm1lbnRzIiwic3RhdGVkIiwiY29udGV4dCIsInZlcmlmaWVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50U3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJtZXRhdmFyaWFibGVWZXJpZmllcyIsInZlcmlmeSIsIlRlcm1TdWJzdGl0dXRpb24iLCJvbnRvbG9neSIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50IiwidGVybVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblZlcmlmaWVzIiwiZGVidWciLCJ1bmlmeVdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJmcm9tTm90aGluZyIsInVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwidW5pZmllc1dpdGhDb21iaW5hdG9ycyIsInNvbWUiLCJjb21iaW5hdG9yIiwidW5pZmllc1dpdGhDb21iaW5hdG9yIiwidmVyaWZ5QXNFcXVhbGl0eSIsInZlcmlmaWVzQXNFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlWZXJpZmllcyIsInZlcmlmeUFzSnVkZ2VtZW50IiwidmVyaWZpZXNBc0p1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnQiLCJqdWRnZW1lbnRWZXJpZmllcyIsInZlcmlmeUFzVHlwZUFzc2VydGlvbiIsInZlcmlmaWVzQXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidHlwZUFzc2VydGlvblZlcmlmaWVzIiwiYXNzZXJ0aW9uIiwiYWRkQXNzZXJ0aW9uIiwidmVyaWZ5QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmVyaWZpZXNBc0RlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWZpbmVkQXNzZXJ0aW9uVmVyaWZpZXMiLCJ2ZXJpZnlBc1Byb3BlcnR5QXNzZXJ0aW9uIiwidmVyaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJwcm9wZXJ0eUFzc2VydGlvblZlcmlmaWVzIiwidmVyaWZ5QXNTdWJwcm9vZkFzc2VydGlvbiIsInZlcmlmaWVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb25WZXJpZmllcyIsInZlcmlmeUFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmVyaWZpZXNBc0NvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJjb250YWluZWRBc3NlcnRpb25WZXJpZmllcyIsInZlcmlmeUFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmVyaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzYXRpc2ZpZXNBc3NlcnRpb25WZXJpZmllcyIsInZlcmlmeU1peGlucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc1NBOzs7ZUFBQTs7OytEQXBTcUI7dUJBVTJCOzs7Ozs7QUFFaEQsU0FBU0Esb0NBQW9DQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxPQUFPO0lBQ2xGLElBQUlDLHdDQUF3QztJQUU1QyxJQUFNQyxlQUFlQyxJQUFBQSxrQ0FBeUIsRUFBQ04sV0FBV0c7SUFFMUQsSUFBSUUsaUJBQWlCLE1BQU07UUFDekIsSUFBTUUsa0JBQWtCUCxVQUFVUSxTQUFTO1FBRTNDTCxRQUFRTSxLQUFLLENBQUMsQUFBQyxrQkFBaUMsT0FBaEJGLGlCQUFnQjtRQUVoRCxJQUFNRyx1QkFBdUJMLGFBQWFNLE1BQU0sQ0FBQ1I7UUFFakQsSUFBSU8sc0JBQXNCO1lBQ3hCLElBQVFFLG1CQUF3Q0MsaUJBQVEsQ0FBaERELGtCQUFrQkUsb0JBQXNCRCxpQkFBUSxDQUE5QkMsbUJBQ3BCQyxvQkFBb0JELGtCQUFrQkUsYUFBYSxDQUFDaEIsV0FBV0csVUFDL0RjLG1CQUFtQkwsaUJBQWlCSSxhQUFhLENBQUNoQixXQUFXRyxV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