occam-nominal 1.0.554 → 1.0.558

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.
@@ -10,10 +10,10 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  const _occamlanguages = require("occam-languages");
12
12
  const _elements = require("../elements");
13
- const _context = require("../utilities/context");
14
13
  const _state = require("../utilities/state");
15
14
  const _instantiate = require("../process/instantiate");
16
- const { all, exists, backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
15
+ const _context = require("../utilities/context");
16
+ const { all, some, exists, backwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
17
17
  const _default = (0, _elements.define)(class Assumption extends _occamlanguages.Element {
18
18
  constructor(context, string, node, breakPoint, link, statement){
19
19
  super(context, string, node, breakPoint);
@@ -93,35 +93,24 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
93
93
  }
94
94
  const assumptionString = this.getString(); ///
95
95
  context.trace(`Validating the '${assumptionString}' declared assumption...`);
96
- ///
97
- context.debug(`...validated the '${assumptionString}' declared assumption.`);
98
- return forward(state, context, back);
96
+ const schemas = context.getSchemas();
97
+ return some(schemas, (schema, context, forward, back)=>{
98
+ return this.unifySchema(schema, context, forward, back);
99
+ }, context, (context, back)=>{
100
+ context.debug(`...validated the '${assumptionString}' declared assumption.`);
101
+ return forward(state, context, back);
102
+ }, back);
99
103
  }
100
104
  validateWhenDerived(state, context, forward, back) {
101
- let validatesWhenDerived = false;
102
105
  const derived = (0, _state.isDerived)(state);
103
106
  if (!derived) {
104
107
  return back();
105
108
  }
106
109
  const assumptionString = this.getString(); ///
107
110
  context.trace(`Validating the '${assumptionString}' derived assumption...`);
108
- const schemas = context.getSchemas();
109
- validatesWhenDerived = some(schemas, (schema, context)=>{
110
- let success = false;
111
- this.unifySchema(schema, context, (schemaUnifies)=>{
112
- if (schemaUnifies) {
113
- success = true;
114
- }
115
- });
116
- return success;
117
- }, context, (context)=>true); ///
118
- if (validatesWhenDerived) {
119
- validatesWhenDerived = continuation(state, context);
120
- }
121
- if (validatesWhenDerived) {
122
- context.debug(`...validated the '${assumptionString}' derived assumption.`);
123
- }
124
- return validatesWhenDerived;
111
+ ///
112
+ context.debug(`...validated the '${assumptionString}' derived assumption.`);
113
+ return forward(state, context, back);
125
114
  }
126
115
  validateLink(state, context, forward, back) {
127
116
  const assumptionString = this.getString(); ///
@@ -144,39 +133,28 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
144
133
  unifySchema(schema, context, forward, back) {
145
134
  const assumptionString = this.getString(), schemaString = schema.getString();
146
135
  context.trace(`Unifying the '${schemaString}' schema with the '${assumptionString}' assumption...`);
147
- const generalContext = context; ///
148
- return (0, _context.reconcile)((context)=>{
149
- const label = schema.getLabel();
150
- return this.link.unifyLabel(label, context, (labelUnifies)=>{
151
- const specificContext = context; ///
152
- if (!labelUnifies) {
153
- const schemaUnifies = false;
154
- return continuation(schemaUnifies);
155
- }
156
- const deduction = schema.getDeduction(), deducedStatement = this.findDeducedStatement(context);
157
- return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (deductionUnifies)=>{
158
- let schemaUnifies = false;
159
- if (!deductionUnifies) {
160
- return continuation(schemaUnifies);
161
- }
162
- const conditional = this.isConditional(), schemaConditional = schema.isConditional();
163
- if (conditional !== schemaConditional) {
164
- context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
165
- return continuation(schemaUnifies);
166
- }
167
- const suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context);
168
- return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, (suppositionsUnify)=>{
169
- if (suppositionsUnify) {
170
- schemaUnifies = true;
171
- }
172
- if (schemaUnifies) {
173
- context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
136
+ return (0, _context.isolate)((schema, context, forward, back)=>{
137
+ const generalContext = context; ///
138
+ return (0, _context.reconcile)((context)=>{
139
+ const label = schema.getLabel();
140
+ return this.link.unifyLabel(label, context, (context, back)=>{
141
+ const specificContext = context; ///
142
+ const deduction = schema.getDeduction(), deducedStatement = this.findDeducedStatement(context);
143
+ return this.unifyDeduction(deduction, deducedStatement, generalContext, specificContext, (generalContext, specificContext, back)=>{
144
+ const conditional = this.isConditional(), schemaConditional = schema.isConditional();
145
+ if (conditional !== schemaConditional) {
146
+ context.trace(`Either the '${schemaString}' schema is unconditional whilst the '${assumptionString}' assumption is conditional or vice verse.`);
147
+ return back();
174
148
  }
175
- return continuation(schemaUnifies);
176
- });
177
- });
178
- });
179
- }, context);
149
+ const suppositions = schema.getSuppositions(), supposedStatements = this.findSupposedStatements(context);
150
+ return this.unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back);
151
+ }, back);
152
+ }, back);
153
+ }, context);
154
+ }, schema, context, (schema, context, back)=>{
155
+ context.debug(`...unified the '${schemaString}' schema with the '${assumptionString}' assumption.`);
156
+ return forward(context, back);
157
+ }, back);
180
158
  }
181
159
  unifyDeduction(deduction, deducedStatement, generalContext, specificContext, forward, back) {
182
160
  const context = specificContext, assumptionString = this.getString(), deductionString = deduction.getString();
@@ -211,12 +189,9 @@ const _default = (0, _elements.define)(class Assumption extends _occamlanguages.
211
189
  unifySuppositions(suppositions, supposedStatements, generalContext, specificContext, forward, back) {
212
190
  const suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
213
191
  if (suppositionsLength !== supposedStatementsLength) {
214
- const suppositionsUnify = false;
215
- return continuation(suppositionsUnify);
192
+ return back();
216
193
  }
217
- let index = suppositionsLength; ///
218
- return backwardsEvery(suppositions, (supposition, forward, back)=>{
219
- index--;
194
+ return backwardsEvery(suppositions, (supposition, forward, back, index)=>{
220
195
  const supposedStatement = supposedStatements[index];
221
196
  return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back);
222
197
  }, forward, back);
@@ -253,4 +228,4 @@ function statementFromAssumptionNode(assumptionNode, context) {
253
228
  return statement;
254
229
  }
255
230
 
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgam9pbiwgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuXG5jb25zdCB7IGFsbCwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICAvLy9cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlY2xhcmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVyaXZlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgZGVyaXZlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHNvbWUoc2NoZW1hcywgKHNjaGVtYSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIChzY2hlbWFVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9LCBjb250ZXh0LCAoY29udGV4dCkgPT4gdHJ1ZSk7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgdmFsaWRhdGVMaW5rKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubGluay52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxpbmssIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMubGluayA9IGxpbms7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5saW5rLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIChsYWJlbFVuaWZpZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgIGlmICghbGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZHVjdGlvbiA9IHNjaGVtYS5nZXREZWR1Y3Rpb24oKSxcbiAgICAgICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBkZWR1Y2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoIWRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uYWwgPSB0aGlzLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgICBzY2hlbWFDb25kaXRpb25hbCA9IHNjaGVtYS5pc0NvbmRpdGlvbmFsKCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWwgIT09IHNjaGVtYUNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRyYWNlKGBFaXRoZXIgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSBpcyB1bmNvbmRpdGlvbmFsIHdoaWxzdCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgY29uZGl0aW9uYWwgb3IgdmljZSB2ZXJzZS5gKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzY2hlbWEuZ2V0U3VwcG9zaXRpb25zKCksXG4gICAgICAgICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5maW5kU3VwcG9zZWRTdGF0ZW1lbnRzKGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgICAgIHNjaGVtYVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGRlZHVjZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGRlZHVjdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmcgPSBzdXBwb3NlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgc3VwcG9zZWRTdGF0ZW1lbnRzLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1VuaWZ5KTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSBzdXBwb3NpdGlvbnNMZW5ndGg7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBpbmRleC0tO1xuXG4gICAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudCA9IHN1cHBvc2VkU3RhdGVtZW50c1tpbmRleF07XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIHN1cHBvc2VkU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkFzc3VtcHRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBpbnN0YW50aWF0ZUFzc3VtcHRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBhc3N1bXB0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIGxpbmsgPSBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGxpbmtGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGlua05vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRMaW5rTm9kZShjb250ZXh0KSxcbiAgICAgICAgbGluayA9IGNvbnRleHQuZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKTtcblxuICByZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImV4aXN0cyIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsaW5rIiwic3RhdGVtZW50IiwiZ2V0TGluayIsImdldFN0YXRlbWVudCIsImdldE1ldGF2YXJpYWJsZSIsImdldFN0YXRlbWVudE5vZGUiLCJpc0NvbmRpdGlvbmFsIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJnZXROb2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJpc0VxdWFsVG8iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRBc3N1bXB0aW9uIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiZmluZERlZHVjZWRTdGF0ZW1lbnQiLCJmaW5kU3VwcG9zZWRTdGF0ZW1lbnRzIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzdW1wdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZUxpbmsiLCJiaW5kIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3N1bXB0aW9uIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzb21lIiwic2NoZW1hIiwic3VjY2VzcyIsInVuaWZ5U2NoZW1hIiwic2NoZW1hVW5pZmllcyIsImNvbnRpbnVhdGlvbiIsInNjaGVtYVN0cmluZyIsImdlbmVyYWxDb250ZXh0IiwicmVjb25jaWxlIiwibGFiZWwiLCJnZXRMYWJlbCIsInVuaWZ5TGFiZWwiLCJsYWJlbFVuaWZpZXMiLCJzcGVjaWZpY0NvbnRleHQiLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJkZWR1Y2VkU3RhdGVtZW50IiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwiY29uZGl0aW9uYWwiLCJzY2hlbWFDb25kaXRpb25hbCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInN1cHBvc2VkU3RhdGVtZW50cyIsInVuaWZ5U3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zVW5pZnkiLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2VkU3RhdGVtZW50Iiwic3VwcG9zaXRpb25TdHJpbmciLCJzdXBwb3NlZFN0YXRlbWVudFN0cmluZyIsInN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsImluZGV4IiwidG9KU09OIiwianNvbiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVBc3N1bXB0aW9uIiwibGlua0Zyb21Bc3N1bXB0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZSIsImxpbmtOb2RlIiwiZ2V0TGlua05vZGUiLCJmaW5kTGlua0J5TGlua05vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWG9FOzBCQUU3Qzt5QkFDSzt1QkFFVTs2QkFDQTtBQUV0QyxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsTUFBTSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3ZELEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxtQkFBbUJDLHVCQUFPO0lBQ3BELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxTQUFTLENBQUU7UUFDOUQsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLGVBQWU7UUFDYixP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
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpc0Rlcml2ZWQsIGlzRGVjbGFyZWQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUFzc3VtcHRpb24gfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgam9pbiwgaXNvbGF0ZSwgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGFsbCwgc29tZSwgZXhpc3RzLCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMubGluay5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBpc0NvbmRpdGlvbmFsKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuaXNDb25kaXRpb25hbCgpIH1cblxuICBnZXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oYXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlID0gYXNzdW1wdGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gYXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgYXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IHRoaXMuZ2V0QXNzdW1wdGlvbk5vZGUoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KTsgfVxuXG4gIGZpbmRTdXBwb3NlZFN0YXRlbWVudHMoY29udGV4dCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCk7IH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3N1bXB0aW9uO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpcy5maW5kQXNzdW1wdGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhc3N1bXB0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBhc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICByZXR1cm4gc29tZShzY2hlbWFzLCAoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZWNsYXJlZCBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGRlcml2ZWQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgLy8vXG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBkZXJpdmVkIGFzc3VtcHRpb24uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZUxpbmsoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5saW5rLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobGluaywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbidzIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc2NoZW1hLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmsudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCksXG4gICAgICAgICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGRlZHVjZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25hbCA9IHRoaXMuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uYWwgIT09IHNjaGVtYUNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQudHJhY2UoYEVpdGhlciB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIGlzIHVuY29uZGl0aW9uYWwgd2hpbHN0IHRoZSAnJHthc3N1bXB0aW9uU3RyaW5nfScgYXNzdW1wdGlvbiBpcyBjb25kaXRpb25hbCBvciB2aWNlIHZlcnNlLmApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHNjaGVtYS5nZXRTdXBwb3NpdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgICAgICAgIH0sIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHNjaGVtYSwgY29udGV4dCwgKHNjaGVtYSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZGVkdWNlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjdGlvbkNvbnRleHQgPSBkZWR1Y3Rpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24ncyAnJHthc3N1bXB0aW9uU3RyaW5nfScgc3RhdGVtZW50LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgc3VwcG9zZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbkNvbnRleHQgPSBzdXBwb3NpdGlvbi5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50LmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBzdXBwb3NlZFN0YXRlbWVudHMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudHNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBzdXBwb3NlZFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgYXNzdW1wdGlvbjtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBsaW5rID0gbGlua0Zyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBhc3N1bXB0aW9uID0gbmV3IEFzc3VtcHRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCBzdGF0ZW1lbnQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBsaW5rRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbmtOb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0TGlua05vZGUoY29udGV4dCksXG4gICAgICAgIGxpbmsgPSBjb250ZXh0LmZpbmRMaW5rQnlMaW5rTm9kZShsaW5rTm9kZSk7XG5cbiAgcmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJzb21lIiwiZXhpc3RzIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJBc3N1bXB0aW9uIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJzdGF0ZW1lbnQiLCJnZXRMaW5rIiwiZ2V0U3RhdGVtZW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzQ29uZGl0aW9uYWwiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImlzRXF1YWxUbyIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZEFzc3VtcHRpb24iLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJmaW5kRGVkdWNlZFN0YXRlbWVudCIsImZpbmRTdXBwb3NlZFN0YXRlbWVudHMiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRlTGluayIsImJpbmQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEFzc3VtcHRpb24iLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsInNjaGVtYSIsInVuaWZ5U2NoZW1hIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsInNjaGVtYVN0cmluZyIsImlzb2xhdGUiLCJnZW5lcmFsQ29udGV4dCIsInJlY29uY2lsZSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJ1bmlmeUxhYmVsIiwic3BlY2lmaWNDb250ZXh0IiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwiZGVkdWNlZFN0YXRlbWVudCIsInVuaWZ5RGVkdWN0aW9uIiwiY29uZGl0aW9uYWwiLCJzY2hlbWFDb25kaXRpb25hbCIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInN1cHBvc2VkU3RhdGVtZW50cyIsInVuaWZ5U3VwcG9zaXRpb25zIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJqb2luIiwidW5pZnlTdGF0ZW1lbnQiLCJjb21taXQiLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJzdXBwb3NlZFN0YXRlbWVudCIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmciLCJzdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJpbmRleCIsInRvSlNPTiIsImpzb24iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQXNzdW1wdGlvbiIsImxpbmtGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJsaW5rTm9kZSIsImdldExpbmtOb2RlIiwiZmluZExpbmtCeUxpbmtOb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2dDQVZvRTswQkFFN0M7dUJBQ2U7NkJBQ0E7eUJBQ2dCO0FBRXRELE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQixFQUM3RCxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsbUJBQW1CQyx1QkFBTztJQUNwRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsU0FBUyxDQUFFO1FBQzlELEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFB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
@@ -116,16 +116,10 @@ const _default = (0, _elements.define)(class Link extends _occamlanguages.Elemen
116
116
  unifyMetavariable(metavariable, generalContext, specificContext, forward, back) {
117
117
  const context = specificContext, linkString = this.getString(), metavariableString = metavariable.getString();
118
118
  context.trace(`Unifying the '${metavariableString}' metavariable with the '${linkString}' link...`);
119
- return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (metavariableUnifiesIntrinsically)=>{
120
- let metavariableUnifies = false;
121
- if (metavariableUnifiesIntrinsically) {
122
- metavariableUnifies = true;
123
- }
124
- if (metavariableUnifies) {
125
- context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
126
- }
127
- return continuation(metavariableUnifies);
128
- });
119
+ return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (generalContext, specificContext, back)=>{
120
+ context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
121
+ return forward(generalContext, specificContext, back);
122
+ }, back);
129
123
  }
130
124
  toJSON() {
131
125
  let json;
@@ -151,4 +145,4 @@ function metavariableFromLinkNode(linkNode, context) {
151
145
  return metavariable;
152
146
  }
153
147
 
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBsYWJlbENvbnRleHQgPSBsYWJlbC5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gbGFiZWxDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5KSA9PiB7XG4gICAgICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkpIHtcbiAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihtZXRhdmFyaWFibGVVbmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkxpbmtcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBsaW5rO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgbGlua05vZGUgPSBpbnN0YW50aWF0ZUxpbmsoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBsaW5rTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgbGluayA9IG5ldyBMaW5rKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsaW5rO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsaW5rTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIkxpbmsiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0TGlua05vZGUiLCJnZXROb2RlIiwibGlua05vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGFUeXBlIiwiaXNFcXVhbFRvIiwibGluayIsImxpbmtOb2RlTWF0Y2hlcyIsIm1hdGNoTGlua05vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kTGluayIsImZpbmRMaW5rQnlMaW5rTm9kZSIsImNvbXBhcmVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW10ZXIiLCJzaW5ndWxhciIsImlzU2luZ3VsYXIiLCJwYXJhbWV0ZXJOYW1lIiwiZ2V0TmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwibGlua1N0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZU1ldGF2YXJpYWJsZSIsImJpbmQiLCJhZGRMaW5rIiwibWV0YVR5cGUiLCJyZWZlcmVuY2VNZXRhVHlwZU5hbWUiLCJSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUiLCJyZWZlcmVuY2VNZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvUmVmZXJlbmNlTWV0YVR5cGUiLCJpc01ldGFUeXBlRXF1YWxUbyIsIm1ldGFUeXBlU3RyaW5nIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwicmVmZXJlbmNlTWV0YVR5cGVTdHJpbmciLCJ1bmlmeUxhYmVsIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsImxhYmVsQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJ1bmlmeU1ldGF2YXJpYWJsZSIsImNvbW1pdCIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsIm1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImNvbnRpbnVhdGlvbiIsInRvSlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlTGluayIsIm1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVQrQzswQkFFeEI7NkJBQ1M7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
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBsYWJlbENvbnRleHQgPSBsYWJlbC5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gbGFiZWxDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIHN0cmluZ1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJMaW5rXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgbGluaztcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGxpbmtOb2RlID0gaW5zdGFudGlhdGVMaW5rKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gbGlua05vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGxpbmsgPSBuZXcgTGluayhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbGlua05vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJMaW5rIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsImdldExpbmtOb2RlIiwiZ2V0Tm9kZSIsImxpbmtOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhVHlwZSIsImlzRXF1YWxUbyIsImxpbmsiLCJsaW5rTm9kZU1hdGNoZXMiLCJtYXRjaExpbmtOb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZExpbmsiLCJmaW5kTGlua0J5TGlua05vZGUiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtdGVyIiwic2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwicGFyYW1ldGVyTmFtZSIsImdldE5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInZhbGlkYXRlIiwic3RhdGUiLCJmb3J3YXJkIiwiYmFjayIsImxpbmtTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJiaW5kIiwiYWRkTGluayIsIm1ldGFUeXBlIiwicmVmZXJlbmNlTWV0YVR5cGVOYW1lIiwiUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIiwicmVmZXJlbmNlTWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb1JlZmVyZW5jZU1ldGFUeXBlIiwiaXNNZXRhVHlwZUVxdWFsVG8iLCJtZXRhVHlwZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nIiwidW5pZnlMYWJlbCIsImxhYmVsIiwibGFiZWxTdHJpbmciLCJsYWJlbENvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJqb2luIiwicmVjb25jaWxlIiwidW5pZnlNZXRhdmFyaWFibGUiLCJjb21taXQiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ0b0pTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUxpbmsiLCJtZXRhdmFyaWFibGVGcm9tTGlua05vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFXQTs7O2VBQUE7OztnQ0FUK0M7MEJBRXhCOzZCQUNTOytCQUNTO3lCQUNJO0FBRTdDLE1BQU0sRUFBRUEsR0FBRyxFQUFFLEdBQUdDLHFDQUFxQjtNQUVyQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxDQUFFO1FBQzNELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO0lB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
@@ -16,7 +16,7 @@ const _validation = require("../process/validation");
16
16
  const _discharge = require("../process/discharge");
17
17
  const _instantiate = require("../process/instantiate");
18
18
  const _element = require("../utilities/element");
19
- const { all, some, exists } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
19
+ const { unbreakable } = _occamlanguages.breakPointUtilities, { all, some, exists } = _occamlanguages.continuationUtilities;
20
20
  const _default = (0, _elements.define)(class Statement extends _occamlanguages.Element {
21
21
  constructor(context, string, node, breakPoint, substitution){
22
22
  super(context, string, node, breakPoint);
@@ -169,7 +169,7 @@ const _default = (0, _elements.define)(class Statement extends _occamlanguages.E
169
169
  }
170
170
  return comparesToParamter;
171
171
  }
172
- validate(state, context, forward, back) {
172
+ validate = unbreakable(function(state, context, forward, back) {
173
173
  let statement;
174
174
  const statementString = this.getString(); ///
175
175
  context.trace(`Validating the '${statementString}' statement...`);
@@ -184,7 +184,7 @@ const _default = (0, _elements.define)(class Statement extends _occamlanguages.E
184
184
  context.debug(`...validated the '${statementString}' statement.`);
185
185
  return forward(statement, context, back);
186
186
  }, back);
187
- }
187
+ });
188
188
  discharge(generalContext, specificContext, forward, back) {
189
189
  const context = specificContext, statementString = this.getString(); ///
190
190
  context.trace(`Dicharging the '${statementString}' statement...`);
@@ -268,13 +268,8 @@ const _default = (0, _elements.define)(class Statement extends _occamlanguages.E
268
268
  toJSON() {
269
269
  let json;
270
270
  const string = this.getString();
271
- let breakPoint;
272
- breakPoint = this.getBreakPoint();
273
- const breakPointJSON = breakPointToBreakPointJSON(breakPoint);
274
- breakPoint = breakPointJSON; ///
275
271
  json = {
276
- string,
277
- breakPoint
272
+ string
278
273
  };
279
274
  return json;
280
275
  }
@@ -282,7 +277,7 @@ const _default = (0, _elements.define)(class Statement extends _occamlanguages.E
282
277
  static fromJSON(json, context) {
283
278
  let statement;
284
279
  (0, _context.instantiate)((context)=>{
285
- const { string } = json, statementNode = (0, _instantiate.instantiateStatement)(string, context), node = statementNode, breakPoint = breakPointFromJSON(json), substitution = (0, _element.substitutionFromStatementNode)(statementNode, context);
280
+ const { string } = json, statementNode = (0, _instantiate.instantiateStatement)(string, context), node = statementNode, breakPoint = null, substitution = (0, _element.substitutionFromStatementNode)(statementNode, context);
286
281
  context = null;
287
282
  statement = new Statement(context, string, node, breakPoint, substitution);
288
283
  }, context);
@@ -290,4 +285,4 @@ const _default = (0, _elements.define)(class Statement extends _occamlanguages.E
290
285
  }
291
286
  });
292
287
 
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3N0YXRlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyB1bmlmeVN0YXRlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0YXRlbWVudHMgfSBmcm9tIFwiLi4vcHJvY2Vzcy92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBkaXNjaGFyZ2VTdGF0ZW1lbnRzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZGlzY2hhcmdlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN0YXRlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGFsbCwgc29tZSwgZXhpc3RzIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdGF0ZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJzdGl0dXRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc2V0U3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIHRoaXMuc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVOb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTmFtZSgpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlTmFtZSA9IG51bGw7XG5cbiAgICBjb25zdCBzaW5ndWxhciA9IHRoaXMuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKHNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZTtcbiAgfVxuXG4gIGdldFR5cGVBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICAgIHJldHVybiB0eXBlQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGdldERlZmluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUgKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzdGF0ZW1lbnQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBzdGF0ZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc1NpbXBsZSgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSAodGhpcy5zdWJzdGl0dXRpb24gPT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNpbXBsZTtcbiAgfVxuXG4gIGlzQ29tcGxleCgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSB0aGlzLmlzU2ltcGxlKCksXG4gICAgICAgICAgY29tcGxleCA9ICFzaW1wbGU7XG5cbiAgICByZXR1cm4gY29tcGxleDtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gc3RhdGVtZW50Tm9kZS5pc1Npbmd1bGFyKCk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBpc1Rlcm1Db250YWluZWQodGVybSwgY29udGV4dCkge1xuICAgIGxldCB0ZXJtQ29udGFpbmVkO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgSXMgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGNvbnRhaW5lZCBpbiB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZVRlcm1Ob2RlcyA9IHN0YXRlbWVudE5vZGUuZ2V0VGVybU5vZGVzKCk7XG5cbiAgICB0ZXJtQ29udGFpbmVkID0gc3RhdGVtZW50Tm9kZVRlcm1Ob2Rlcy5zb21lKChzdGF0ZW1lbnROb2RlVGVybU5vZGUpID0+IHsgIC8vL1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZVRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZShzdGF0ZW1lbnROb2RlVGVybU5vZGUpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50Tm9kZVRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0ZXJtQ29udGFpbmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gaXMgY29udGFpbmVkIGluIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1Db250YWluZWQ7XG4gIH1cblxuICBpc0ZyYW1lQ29udGFpbmVkKGZyYW1lLCBjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lQ29udGFpbmVkO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBJcyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBjb250YWluZWQgaW4gdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGVGcmFtZU5vZGVzID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZU5vZGVzKCk7XG5cbiAgICBmcmFtZUNvbnRhaW5lZCA9IHN0YXRlbWVudE5vZGVGcmFtZU5vZGVzLnNvbWUoKHN0YXRlbWVudE5vZGVGcmFtZU5vZGUpID0+IHsgIC8vL1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZUZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaE5vZGUoc3RhdGVtZW50Tm9kZUZyYW1lTm9kZSk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnROb2RlRnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmcmFtZUNvbnRhaW5lZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgaXMgY29udGFpbmVkIGluIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lQ29udGFpbmVkO1xuICB9XG5cbiAgbWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzaW5ndWxhciA9IHRoaXMuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKHNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlQSA9IG1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVCID0gbWV0YXZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlQU1hdGNoZXNNZXRhdmFyaWFibGVOb2RlQiA9IG1ldGF2YXJpYWJsZU5vZGVBLm1hdGNoKG1ldGF2YXJpYWJsZU5vZGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVBTWF0Y2hlc01ldGF2YXJpYWJsZU5vZGVCKSB7XG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICBpc0NvbmRpdGlvbmFsKCkge1xuICAgIGxldCBjb25kaXRpb25hbCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25kaXRpb25hbCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsO1xuICB9XG5cbiAgZmluZFN0YXRlbWVudChjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kRGVkdWNlZFN0YXRlbWVudChjb250ZXh0KSB7XG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uLmdldERlZHVjZWRTdGF0ZW1lbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpczsgLy8vXG5cbiAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3VwcG9zZWRTdGF0ZW1lbnRzKGNvbnRleHQpIHtcbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IHRoaXMuZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24uZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXTtcblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHN0YXRlbWVudDtcblxuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50ID0gdGhpcy5maW5kU3RhdGVtZW50KGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlbWVudCwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgc3RhdGVtZW50ID0gdGhpczsgLy8vXG5cbiAgICByZXR1cm4gZXhpc3RzKHZhbGlkYXRlU3RhdGVtZW50cywgc3RhdGVtZW50LCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuYWRkU3RhdGVtZW50KHN0YXRlbWVudCk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgZGlzY2hhcmdlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGljaGFyZ2luZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIHJldHVybiBzb21lKGRpc2NoYXJnZVN0YXRlbWVudHMsIChkaXNjaGFyZ2VTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBkaXNjaGFyZ2VTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsU3RhdGVtZW50ID0gdGhpcywgIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3RhdGVtZW50ID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICBnZW5lcmFsU3RhdGVtZW50U3RyaW5nID0gZ2VuZXJhbFN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N0YXRlbWVudFN0cmluZyA9IHNwZWNpZmljU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2dlbmVyYWxTdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiB1bmlmeVN0YXRlbWVudChnZW5lcmFsU3RhdGVtZW50LCBzcGVjaWZpY1N0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2dlbmVyYWxTdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCBhcHBseVR5cGVBc3NlcnRpb25JbmRlcGVuZGVudGx5ID0gdGhpcy5hcHBseVR5cGVBc3NlcnRpb25JbmRlcGVuZGVudGx5LmJpbmQodGhpcyksXG4gICAgICAgICAgYXBwbHlEZWZpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseSA9IHRoaXMuYXBwbHlEZWZpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseS5iaW5kKHRoaXMpLFxuICAgICAgICAgIGFwcGx5Q29udGFpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseSA9IHRoaXMuYXBwbHlDb250YWluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5LmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIGFwcGx5VHlwZUFzc2VydGlvbkluZGVwZW5kZW50bHksXG4gICAgICBhcHBseURlZmluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5LFxuICAgICAgYXBwbHlDb250YWluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5XG4gICAgXSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBpbmRlcGVuZGVudGx5LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGFwcGx5VHlwZUFzc2VydGlvbkluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0aGlzLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbk5vZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQncyB0eXBlIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbi5hcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmFwcGxpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCdzIHR5cGUgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlEZWZpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGNvbnRleHQ7XG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHRoaXMuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCdzIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uLmFwcGx5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYXBwbHlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCdzIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlDb250YWluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSB0aGlzLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChjb250YWluZWRBc3NlcnRpb25Ob2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcHBseWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50J3MgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbi5hcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGx5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQncyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3RhdGVtZW50XCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50O1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IGluc3RhbnRpYXRlU3RhdGVtZW50KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3Vic3RpdHV0aW9uKTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImFsbCIsInNvbWUiLCJleGlzdHMiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJTdGF0ZW1lbnQiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3Vic3RpdHV0aW9uIiwiZ2V0U3Vic3RpdHV0aW9uIiwic2V0U3Vic3RpdHV0aW9uIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJzaW5ndWxhciIsImlzU2luZ3VsYXIiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldFR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUFzc2VydGlvbk5vZGUiLCJnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJpc0VxdWFsVG8iLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImVxdWFsVG8iLCJpc1NpbXBsZSIsInNpbXBsZSIsImlzQ29tcGxleCIsImNvbXBsZXgiLCJpc1Rlcm1Db250YWluZWQiLCJ0ZXJtIiwidGVybUNvbnRhaW5lZCIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJzdGF0ZW1lbnRTdHJpbmciLCJ0cmFjZSIsInN0YXRlbWVudE5vZGVUZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJzdGF0ZW1lbnROb2RlVGVybU5vZGUiLCJzdGF0ZW1lbnROb2RlVGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImRlYnVnIiwiaXNGcmFtZUNvbnRhaW5lZCIsImZyYW1lIiwiZnJhbWVDb250YWluZWQiLCJmcmFtZVN0cmluZyIsInN0YXRlbWVudE5vZGVGcmFtZU5vZGVzIiwiZ2V0RnJhbWVOb2RlcyIsInN0YXRlbWVudE5vZGVGcmFtZU5vZGUiLCJzdGF0ZW1lbnROb2RlRnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtZXRhdmFyaWFibGVOb2RlQSIsIm1ldGF2YXJpYWJsZU5vZGVCIiwibWV0YXZhcmlhYmxlTm9kZUFNYXRjaGVzTWV0YXZhcmlhYmxlTm9kZUIiLCJtYXRjaCIsImlzQ29uZGl0aW9uYWwiLCJjb25kaXRpb25hbCIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImZpbmRTdGF0ZW1lbnQiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwiZmluZERlZHVjZWRTdGF0ZW1lbnQiLCJzdWJwcm9vZkFzc2VydGlvbiIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImZpbmRTdXBwb3NlZFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHMiLCJnZXRTdXBwb3NlZFN0YXRlbWVudHMiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtdGVyIiwicGFyYW1ldGVyTmFtZSIsImdldE5hbWUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJhZGRTdGF0ZW1lbnQiLCJkaXNjaGFyZ2UiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImRpc2NoYXJnZVN0YXRlbWVudHMiLCJkaXNjaGFyZ2VTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsImdlbmVyYWxTdGF0ZW1lbnQiLCJzcGVjaWZpY1N0YXRlbWVudCIsImdlbmVyYWxTdGF0ZW1lbnRTdHJpbmciLCJzcGVjaWZpY1N0YXRlbWVudFN0cmluZyIsImFwcGx5SW5kZXBlbmRlbnRseSIsImFwcGx5VHlwZUFzc2VydGlvbkluZGVwZW5kZW50bHkiLCJiaW5kIiwiYXBwbHlEZWZpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseSIsImFwcGx5Q29udGFpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseSIsInR5cGVBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwidG9KU09OIiwianNvbiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdGF0ZW1lbnQiLCJzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7Z0NBYm9FOzBCQUU3Qzt5QkFDSzt1QkFDRzs0QkFDSTsyQkFDQzs2QkFDQzt5QkFDUztBQUU5QyxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0MscUNBQXFCLEVBQzdDLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxrQkFBa0JDLHVCQUFPO0lBQ25ELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxDQUFFO1FBQzNELEtBQUssQ0FBQ0osU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO0lBQ3RCO0lBRUFDLGtCQUFrQjtRQUNoQixPQUFPLElBQUks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
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3N0YXRlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyB1bmlmeVN0YXRlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0YXRlbWVudHMgfSBmcm9tIFwiLi4vcHJvY2Vzcy92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBkaXNjaGFyZ2VTdGF0ZW1lbnRzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZGlzY2hhcmdlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN0YXRlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBzdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IHVuYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBhbGwsIHNvbWUsIGV4aXN0cyB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU3RhdGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3Vic3RpdHV0aW9uKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHNldFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICB0aGlzLnN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBzdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlTm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBzaW5ndWxhciA9IHRoaXMuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKHNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5hbWUoKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5hbWUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gICAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICBnZXRUeXBlQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbk5vZGU7XG4gIH1cblxuICBnZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldERlZmluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICBnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlICgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICBpc0VxdWFsVG8oc3RhdGVtZW50KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gc3RhdGVtZW50Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNTaW1wbGUoKSB7XG4gICAgY29uc3Qgc2ltcGxlID0gKHRoaXMuc3Vic3RpdHV0aW9uID09PSBudWxsKTtcblxuICAgIHJldHVybiBzaW1wbGU7XG4gIH1cblxuICBpc0NvbXBsZXgoKSB7XG4gICAgY29uc3Qgc2ltcGxlID0gdGhpcy5pc1NpbXBsZSgpLFxuICAgICAgICAgIGNvbXBsZXggPSAhc2ltcGxlO1xuXG4gICAgcmV0dXJuIGNvbXBsZXg7XG4gIH1cblxuICBpc1Npbmd1bGFyKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IHN0YXRlbWVudE5vZGUuaXNTaW5ndWxhcigpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNUZXJtQ29udGFpbmVkKHRlcm0sIGNvbnRleHQpIHtcbiAgICBsZXQgdGVybUNvbnRhaW5lZDtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYElzIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBjb250YWluZWQgaW4gdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGVUZXJtTm9kZXMgPSBzdGF0ZW1lbnROb2RlLmdldFRlcm1Ob2RlcygpO1xuXG4gICAgdGVybUNvbnRhaW5lZCA9IHN0YXRlbWVudE5vZGVUZXJtTm9kZXMuc29tZSgoc3RhdGVtZW50Tm9kZVRlcm1Ob2RlKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVUZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUoc3RhdGVtZW50Tm9kZVRlcm1Ob2RlKTtcblxuICAgICAgaWYgKHN0YXRlbWVudE5vZGVUZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGVybUNvbnRhaW5lZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIGNvbnRhaW5lZCBpbiB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtQ29udGFpbmVkO1xuICB9XG5cbiAgaXNGcmFtZUNvbnRhaW5lZChmcmFtZSwgY29udGV4dCkge1xuICAgIGxldCBmcmFtZUNvbnRhaW5lZDtcblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgSXMgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgY29udGFpbmVkIGluIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlRnJhbWVOb2RlcyA9IHN0YXRlbWVudE5vZGUuZ2V0RnJhbWVOb2RlcygpO1xuXG4gICAgZnJhbWVDb250YWluZWQgPSBzdGF0ZW1lbnROb2RlRnJhbWVOb2Rlcy5zb21lKChzdGF0ZW1lbnROb2RlRnJhbWVOb2RlKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVGcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hOb2RlKHN0YXRlbWVudE5vZGVGcmFtZU5vZGUpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50Tm9kZUZyYW1lTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVDb250YWluZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGlzIGNvbnRhaW5lZCBpbiB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZUNvbnRhaW5lZDtcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGxldCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZUEgPSBtZXRhdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlQiA9IG1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZUFNYXRjaGVzTWV0YXZhcmlhYmxlTm9kZUIgPSBtZXRhdmFyaWFibGVOb2RlQS5tYXRjaChtZXRhdmFyaWFibGVOb2RlQik7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlQU1hdGNoZXNNZXRhdmFyaWFibGVOb2RlQikge1xuICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgaXNDb25kaXRpb25hbCgpIHtcbiAgICBsZXQgY29uZGl0aW9uYWwgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uZGl0aW9uYWwgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjb25kaXRpb25hbDtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZERlZHVjZWRTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdGhpcy5maW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbi5nZXREZWR1Y2VkU3RhdGVtZW50KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXM7IC8vL1xuXG4gICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFN1cHBvc2VkU3RhdGVtZW50cyhjb250ZXh0KSB7XG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uLmdldFN1cHBvc2VkU3RhdGVtZW50cygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107XG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgY29tcGFyZVBhcmFtZXRlcihwYXJhbWV0ZXIpIHtcbiAgICBsZXQgY29tcGFyZXNUb1BhcmFtdGVyID0gZmFsc2U7XG5cbiAgICBjb25zdCBzaW5ndWxhciA9IHRoaXMuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKHNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyLmdldE5hbWUoKTtcblxuICAgICAgaWYgKHBhcmFtZXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgIGlmIChwYXJhbWV0ZXJOYW1lID09PSBtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgY29tcGFyZXNUb1BhcmFtdGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvUGFyYW10ZXI7XG4gIH1cblxuICB2YWxpZGF0ZSA9IHVuYnJlYWthYmxlKCBmdW5jdGlvbihzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudCA9IHRoaXMuZmluZFN0YXRlbWVudChjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZW1lbnQsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIHN0YXRlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgcmV0dXJuIGV4aXN0cyh2YWxpZGF0ZVN0YXRlbWVudHMsIHN0YXRlbWVudCwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfSk7XG5cbiAgZGlzY2hhcmdlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGljaGFyZ2luZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIHJldHVybiBzb21lKGRpc2NoYXJnZVN0YXRlbWVudHMsIChkaXNjaGFyZ2VTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBkaXNjaGFyZ2VTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsU3RhdGVtZW50ID0gdGhpcywgIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3RhdGVtZW50ID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICBnZW5lcmFsU3RhdGVtZW50U3RyaW5nID0gZ2VuZXJhbFN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY1N0YXRlbWVudFN0cmluZyA9IHNwZWNpZmljU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2dlbmVyYWxTdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiB1bmlmeVN0YXRlbWVudChnZW5lcmFsU3RhdGVtZW50LCBzcGVjaWZpY1N0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljU3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2dlbmVyYWxTdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCBhcHBseVR5cGVBc3NlcnRpb25JbmRlcGVuZGVudGx5ID0gdGhpcy5hcHBseVR5cGVBc3NlcnRpb25JbmRlcGVuZGVudGx5LmJpbmQodGhpcyksXG4gICAgICAgICAgYXBwbHlEZWZpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseSA9IHRoaXMuYXBwbHlEZWZpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseS5iaW5kKHRoaXMpLFxuICAgICAgICAgIGFwcGx5Q29udGFpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseSA9IHRoaXMuYXBwbHlDb250YWluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5LmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIGFwcGx5VHlwZUFzc2VydGlvbkluZGVwZW5kZW50bHksXG4gICAgICBhcHBseURlZmluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5LFxuICAgICAgYXBwbHlDb250YWluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5XG4gICAgXSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGxpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBpbmRlcGVuZGVudGx5LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGFwcGx5VHlwZUFzc2VydGlvbkluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBjb250ZXh0O1xuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0aGlzLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbk5vZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQncyB0eXBlIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbi5hcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmFwcGxpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCdzIHR5cGUgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlEZWZpbmVkQXNzZXJ0aW9uSW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGNvbnRleHQ7XG5cbiAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHRoaXMuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCdzIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uLmFwcGx5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYXBwbHlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCdzIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHlDb250YWluZWRBc3NlcnRpb25JbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgY29udGV4dDtcblxuICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSB0aGlzLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICAgIGlmIChjb250YWluZWRBc3NlcnRpb25Ob2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcHBseWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50J3MgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbi5hcHBseUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmFwcGx5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQncyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3RhdGVtZW50XCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50O1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgc3RhdGVtZW50Tm9kZSA9IGluc3RhbnRpYXRlU3RhdGVtZW50KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YnN0aXR1dGlvbik7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJ1bmJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJhbGwiLCJzb21lIiwiZXhpc3RzIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3RhdGVtZW50IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN1YnN0aXR1dGlvbiIsImdldFN1YnN0aXR1dGlvbiIsInNldFN1YnN0aXR1dGlvbiIsImdldFN0YXRlbWVudE5vZGUiLCJnZXROb2RlIiwic3RhdGVtZW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwic2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVBc3NlcnRpb25Ob2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiaXNFcXVhbFRvIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJlcXVhbFRvIiwiaXNTaW1wbGUiLCJzaW1wbGUiLCJpc0NvbXBsZXgiLCJjb21wbGV4IiwiaXNUZXJtQ29udGFpbmVkIiwidGVybSIsInRlcm1Db250YWluZWQiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwidHJhY2UiLCJzdGF0ZW1lbnROb2RlVGVybU5vZGVzIiwiZ2V0VGVybU5vZGVzIiwic3RhdGVtZW50Tm9kZVRlcm1Ob2RlIiwic3RhdGVtZW50Tm9kZVRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJkZWJ1ZyIsImlzRnJhbWVDb250YWluZWQiLCJmcmFtZSIsImZyYW1lQ29udGFpbmVkIiwiZnJhbWVTdHJpbmciLCJzdGF0ZW1lbnROb2RlRnJhbWVOb2RlcyIsImdldEZyYW1lTm9kZXMiLCJzdGF0ZW1lbnROb2RlRnJhbWVOb2RlIiwic3RhdGVtZW50Tm9kZUZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWV0YXZhcmlhYmxlTm9kZUEiLCJtZXRhdmFyaWFibGVOb2RlQiIsIm1ldGF2YXJpYWJsZU5vZGVBTWF0Y2hlc01ldGF2YXJpYWJsZU5vZGVCIiwibWF0Y2giLCJpc0NvbmRpdGlvbmFsIiwiY29uZGl0aW9uYWwiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJmaW5kU3RhdGVtZW50IiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsImZpbmREZWR1Y2VkU3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb24iLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJkZWR1Y2VkU3RhdGVtZW50IiwiZ2V0RGVkdWNlZFN0YXRlbWVudCIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJmaW5kU3VwcG9zZWRTdGF0ZW1lbnRzIiwic3VwcG9zZWRTdGF0ZW1lbnRzIiwiZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlck5hbWUiLCJnZXROYW1lIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwidmFsaWRhdGVTdGF0ZW1lbnRzIiwiYWRkU3RhdGVtZW50IiwiZGlzY2hhcmdlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJkaXNjaGFyZ2VTdGF0ZW1lbnRzIiwiZGlzY2hhcmdlU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnQiLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJnZW5lcmFsU3RhdGVtZW50U3RyaW5nIiwic3BlY2lmaWNTdGF0ZW1lbnRTdHJpbmciLCJhcHBseUluZGVwZW5kZW50bHkiLCJhcHBseVR5cGVBc3NlcnRpb25JbmRlcGVuZGVudGx5IiwiYmluZCIsImFwcGx5RGVmaW5lZEFzc2VydGlvbkluZGVwZW5kZW50bHkiLCJhcHBseUNvbnRhaW5lZEFzc2VydGlvbkluZGVwZW5kZW50bHkiLCJ0eXBlQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInRvSlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlU3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWVBOzs7ZUFBQTs7O2dDQWJvRTswQkFFN0M7eUJBQ0s7dUJBQ0c7NEJBQ0k7MkJBQ0M7NkJBQ0M7eUJBQ1M7QUFFOUMsTUFBTSxFQUFFQSxXQUFXLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ3JDLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUUsR0FBR0MscUNBQXFCO01BRW5ELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsa0JBQWtCQyx1QkFBTztJQUNuRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFlBQVksQ0FBRTtRQUMzRCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtJQUN0QjtJQUVBQyxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNELFlBQVk7SUFDMUI7SUFFQUUsZ0JBQWdCRixZQUFZLEVBQUU7UUFDNUIsSUFBSSxDQUFDQSxZQUFZLEdBQUdBO0lBQ3RCO0lBRUFHLG1CQUFtQjtRQUNqQixNQUFNTCxPQUFPLElBQUksQ0FBQ00sT0FBTyxJQUNuQkMsZ0JBQWdCUCxNQUFNLEdBQUc7UUFFL0IsT0FBT087SUFDVDtJQUVBQyxzQkFBc0I7UUFDcEIsSUFBSUMsbUJBQW1CO1FBRXZCLE1BQU1DLFdBQVcsSUFBSSxDQUFDQyxVQUFVO1FBRWhDLElBQUlELFVBQVU7WUFDWixNQUFNSCxnQkFBZ0IsSUFBSSxDQUFDRixnQkFBZ0I7WUFFM0NJLG1CQUFtQkYsY0FBY0MsbUJBQW1C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