occam-verify-cli 1.0.33 → 1.0.35

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.
@@ -121,14 +121,15 @@ function _unsupported_iterable_to_array(o, minLen) {
121
121
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
122
122
  }
123
123
  var _Variable;
124
- var termVariableNodeQuery = (0, _query.nodeQuery)("/term/variable!"), variableDeclarationTypeNodeQuery = (0, _query.nodeQuery)("/variableDeclaration/type"), variableDeclarationVariableNodeQuery = (0, _query.nodeQuery)("/variableDeclaration/variable");
124
+ var termVariableNodeQuery = (0, _query.nodeQuery)("/term/variable!"), variableDeclarationVariableNodeQuery = (0, _query.nodeQuery)("/variableDeclaration/variable"), lastSecondaryKeywordTerminalNodeQuery = (0, _query.nodeQuery)("/variableDeclaration/@secondary-keyword[-1]");
125
125
  var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
126
- function Variable(string, node, name, type, propertyRelations) {
126
+ function Variable(string, node, name, type, provisional, propertyRelations) {
127
127
  _class_call_check(this, Variable);
128
128
  this.string = string;
129
129
  this.node = node;
130
130
  this.name = name;
131
131
  this.type = type;
132
+ this.provisional = provisional;
132
133
  this.propertyRelations = propertyRelations;
133
134
  }
134
135
  _create_class(Variable, [
@@ -156,6 +157,12 @@ var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
156
157
  return this.type;
157
158
  }
158
159
  },
160
+ {
161
+ key: "isProvisional",
162
+ value: function isProvisional() {
163
+ return this.provisional;
164
+ }
165
+ },
159
166
  {
160
167
  key: "getPropertyRelations",
161
168
  value: function getPropertyRelations() {
@@ -288,7 +295,7 @@ var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
288
295
  {
289
296
  key: "fromJSON",
290
297
  value: function fromJSON(json, fileContext) {
291
- var string = json.string, localContext = _local.default.fromFileContext(fileContext), context = localContext, variableString = string, variableNode = (0, _variable.variableNodeFromVariableString)(variableString, context), variableName = (0, _name.variableNameFromVariableNode)(variableNode), node = variableNode, name = variableName, type = (0, _json.typeFromJSON)(json, fileContext), propertyRelations = [], variable = new Variable(string, node, name, type, propertyRelations);
298
+ var string = json.string, localContext = _local.default.fromFileContext(fileContext), context = localContext, variableString = string, variableNode = (0, _variable.variableNodeFromVariableString)(variableString, context), variableName = (0, _name.variableNameFromVariableNode)(variableNode), node = variableNode, name = variableName, type = (0, _json.typeFromJSON)(json, fileContext), provisional = null, propertyRelations = [], variable = new Variable(string, node, name, type, provisional, propertyRelations);
292
299
  return variable;
293
300
  }
294
301
  },
@@ -298,8 +305,8 @@ var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
298
305
  var variable = null;
299
306
  var termVariableNode = termVariableNodeQuery(termNode);
300
307
  if (termVariableNode !== null) {
301
- var variableNode = termVariableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), node = variableNode, string = context.nodeAsString(node), name = variableName, type = null, propertyRelations = [];
302
- variable = new Variable(string, node, name, type, propertyRelations);
308
+ var variableNode = termVariableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), node = variableNode, string = context.nodeAsString(node), name = variableName, type = null, provisional = null, propertyRelations = [];
309
+ variable = new Variable(string, node, name, type, provisional, propertyRelations);
303
310
  }
304
311
  return variable;
305
312
  }
@@ -309,8 +316,8 @@ var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
309
316
  value: function fromVariableNode(variableNode, context) {
310
317
  var variable = null;
311
318
  if (variableNode !== null) {
312
- var node = variableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), string = context.nodeAsString(node), name = variableName, type = null, propertyRelations = [];
313
- variable = new Variable(string, node, name, type, propertyRelations);
319
+ var node = variableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), string = context.nodeAsString(node), name = variableName, type = null, provisional = null, propertyRelations = [];
320
+ variable = new Variable(string, node, name, type, provisional, propertyRelations);
314
321
  }
315
322
  return variable;
316
323
  }
@@ -320,8 +327,8 @@ var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
320
327
  value: function fromVariableNodeAndType(variableNode, type, context) {
321
328
  var variable = null;
322
329
  if (variableNode !== null) {
323
- var node = variableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), string = context.nodeAsString(node), name = variableName, propertyRelations = [];
324
- variable = new Variable(string, node, name, type, propertyRelations);
330
+ var node = variableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), string = context.nodeAsString(node), name = variableName, provisional = null, propertyRelations = [];
331
+ variable = new Variable(string, node, name, type, provisional, propertyRelations);
325
332
  }
326
333
  return variable;
327
334
  }
@@ -329,7 +336,7 @@ var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
329
336
  {
330
337
  key: "fromVariableDeclarationNode",
331
338
  value: function fromVariableDeclarationNode(variableDeclarationNode, fileContext) {
332
- var variableDeclarationVariableNode = variableDeclarationVariableNodeQuery(variableDeclarationNode), variableNode = variableDeclarationVariableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), variableString = fileContext.nodeAsString(variableNode), string = variableString, node = variableNode, name = variableName, type = typeFromVariableDeclarationNode(variableDeclarationNode, fileContext), propertyRelations = [], variable = new Variable(string, node, name, type, propertyRelations);
339
+ var Type = _dom.default.Type, variableDeclarationVariableNode = variableDeclarationVariableNodeQuery(variableDeclarationNode), variableNode = variableDeclarationVariableNode, variableName = (0, _name.variableNameFromVariableNode)(variableNode), variableString = fileContext.nodeAsString(variableNode), string = variableString, node = variableNode, name = variableName, type = Type.fromVariableDeclarationNode(variableDeclarationNode, fileContext), provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, fileContext), propertyRelations = [], variable = new Variable(string, node, name, type, provisional, propertyRelations);
333
340
  return variable;
334
341
  }
335
342
  },
@@ -337,23 +344,19 @@ var _default = (0, _dom.domAssigned)((_Variable = /*#__PURE__*/ function() {
337
344
  key: "fromVariableAndPropertyRelation",
338
345
  value: function fromVariableAndPropertyRelation(variable, propertyRelation, context) {
339
346
  var propertyRelations;
340
- var node = variable.getNode(), name = variable.getName(), type = variable.getType();
347
+ var node = variable.getNode(), name = variable.getName(), type = variable.getType(), provisional = variable.isProvisional();
341
348
  propertyRelations = variable.getPropertyRelations();
342
349
  propertyRelations = _to_consumable_array(propertyRelations).concat([
343
350
  propertyRelation
344
351
  ]);
345
352
  var string = stringFromNameAndPropertyRelations(name, propertyRelations);
346
- variable = new Variable(string, node, name, type, propertyRelations);
353
+ variable = new Variable(string, node, name, type, provisional, propertyRelations);
347
354
  return variable;
348
355
  }
349
356
  }
350
357
  ]);
351
358
  return Variable;
352
359
  }(), _define_property(_Variable, "name", "Variable"), _Variable));
353
- function typeFromVariableDeclarationNode(variableDeclarationNode, fileContext) {
354
- var Type = _dom.default.Type, variableDeclarationTypeNode = variableDeclarationTypeNodeQuery(variableDeclarationNode), typeNode = variableDeclarationTypeNode, context = _local.default.fromFileContext(fileContext), type = Type.fromTypeNode(typeNode, context);
355
- return type;
356
- }
357
360
  function stringFromNameAndPropertyRelations(name, propertyRelations) {
358
361
  var propertyRelationsString = propertyRelations.reduce(function(propertyRelationsString, propertyRelation) {
359
362
  var propertyRelationString = propertyRelation.getString();
@@ -362,5 +365,14 @@ function stringFromNameAndPropertyRelations(name, propertyRelations) {
362
365
  }, _constants.EMPTY_STRING), string = "".concat(name).concat(propertyRelationsString);
363
366
  return string;
364
367
  }
368
+ function provisionalFromVariableDeclarationNode(variableDeclarationNode, fileContext) {
369
+ var provisional = false;
370
+ var lastSecondaryKeywordTerminalNode = lastSecondaryKeywordTerminalNodeQuery(variableDeclarationNode);
371
+ if (lastSecondaryKeywordTerminalNode !== null) {
372
+ var content = lastSecondaryKeywordTerminalNode.getContent(), contentProvisionally = content === _constants.PROVISIONALLY;
373
+ provisional = contentProvisionally; ///
374
+ }
375
+ return provisional;
376
+ }
365
377
 
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uL2RvbVwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9sb2NhbFwiO1xuaW1wb3J0IFRlcm1TdWJzdGl0dXRpb24gZnJvbSBcIi4uL3N1YnN0aXR1dGlvbi90ZXJtXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XG5pbXBvcnQgeyBkb21Bc3NpZ25lZCB9IGZyb20gXCIuLi9kb21cIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IHZhcmlhYmxlTm9kZUZyb21WYXJpYWJsZVN0cmluZyB9IGZyb20gXCIuLi9jb250ZXh0L3BhcnRpYWwvdmFyaWFibGVcIjtcblxuY29uc3QgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvbi90eXBlXCIpLFxuICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3ZhcmlhYmxlRGVjbGFyYXRpb24vdmFyaWFibGVcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGRvbUFzc2lnbmVkKGNsYXNzIFZhcmlhYmxlIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlLCBwcm9wZXJ0eVJlbGF0aW9ucykge1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJvcGVydHlSZWxhdGlvbnMgPSBwcm9wZXJ0eVJlbGF0aW9ucztcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVJlbGF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eVJlbGF0aW9ucztcbiAgfVxuXG4gIHNldFR5cGUodHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBpc0VxdWFsVG8odmFyaWFibGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgIGVxdWFsVG8gPSAodmFyaWFibGVTdHJpbmcgPT09IHRoaXMuc3RyaW5nKTtcblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hOYW1lKG5hbWUpIHtcbiAgICBjb25zdCBuYW1lTWF0Y2hlcyA9IChuYW1lID09PSB0aGlzLm5hbWUpO1xuXG4gICAgcmV0dXJuIG5hbWVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgdmFyaWFibGVOYW1lTWF0Y2hlcyA9ICh2YXJpYWJsZU5hbWUgPT09IHRoaXMubmFtZSk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIGlzRWZmZWN0aXZlbHlFcXVhbFRvVGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGVmZmVjdGl2ZWx5RXF1YWxUb1Rlcm0gPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0RmlsZVBhdGggPSBnZW5lcmFsQ29udGV4dC5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dEZpbGVQYXRoID0gc3BlY2lmaWNDb250ZXh0LmdldEZpbGVQYXRoKCk7XG5cbiAgICBpZiAoZ2VuZXJhbENvbnRleHRGaWxlUGF0aCA9PT0gc3BlY2lmaWNDb250ZXh0RmlsZVBhdGgpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgICBpZiAodGVybVN0cmluZyA9PT0gdGhpcy5zdHJpbmcpIHtcbiAgICAgICAgZWZmZWN0aXZlbHlFcXVhbFRvVGVybSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVmZmVjdGl2ZWx5RXF1YWxUb1Rlcm07XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZDtcblxuICAgIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSB0aGlzLm5hbWUsXG4gICAgICAgICAgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCk7XG5cbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgICAgIHZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUeXBlKGZpbGVDb250ZXh0KSB7XG4gICAgbGV0IHR5cGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBmaWxlQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlTmFtZX0nIHR5cGUuLi5gKTtcblxuICAgICAgY29uc3QgdHlwZSA9IGZpbGVDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIGZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZU5hbWV9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsgLy8vXG5cbiAgICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVWZXJpZmllZCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVOYW1lfScgdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVkO1xuICB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgdGVybVVuaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlbHlFcXVhbFRvVGVybSA9IHRoaXMuaXNFZmZlY3RpdmVseUVxdWFsVG9UZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKGVmZmVjdGl2ZWx5RXF1YWxUb1Rlcm0pIHtcbiAgICAgIHRlcm1VbmlmaWVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIHN1YnN0aXR1dGlvblByZXNlbnQgPSBzdWJzdGl0dXRpb25zLmlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5VmFyaWFibGUodmFyaWFibGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uUHJlc2VudCkge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlKHZhcmlhYmxlKSxcbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uVGVybUVxdWFsVG9UZXJtID0gc3Vic3RpdHV0aW9uLmlzVGVybUVxdWFsVG8odGVybSk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvblRlcm1FcXVhbFRvVGVybSkge1xuICAgICAgICAgIHRlcm1VbmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVRlcm5BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb25zLmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgdGVybVVuaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXJtVW5pZmllZCkge1xuICAgICAgc3BlY2lmaWNDb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllZDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5zdHJpbmcsXG4gICAgICAgICAgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiVmFyaWFibGVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBjb250ZXh0ID0gbG9jYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHN0cmluZywgIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZUZyb21WYXJpYWJsZVN0cmluZyh2YXJpYWJsZVN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsXG4gICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gW10sXG4gICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIGNvbnN0IHRlcm1WYXJpYWJsZU5vZGUgPSB0ZXJtVmFyaWFibGVOb2RlUXVlcnkodGVybU5vZGUpO1xuXG4gICAgaWYgKHRlcm1WYXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1WYXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3BlcnR5UmVsYXRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gICAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgICBuYW1lID0gdmFyaWFibGVOYW1lLCAgLy8vXG4gICAgICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gW107XG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSwgcHJvcGVydHlSZWxhdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSh2YXJpYWJsZU5vZGUsIHR5cGUsIGNvbnRleHQpIHtcbiAgICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gICAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgICBuYW1lID0gdmFyaWFibGVOYW1lLCAgLy8vXG4gICAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3BlcnR5UmVsYXRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb25WYXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uVmFyaWFibGVOb2RlUXVlcnkodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25WYXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gW10sXG4gICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlQW5kUHJvcGVydHlSZWxhdGlvbih2YXJpYWJsZSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBwcm9wZXJ0eVJlbGF0aW9ucztcblxuICAgIGNvbnN0IG5vZGUgPSB2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgICAgbmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgcHJvcGVydHlSZWxhdGlvbnMgPSB2YXJpYWJsZS5nZXRQcm9wZXJ0eVJlbGF0aW9ucygpO1xuXG4gICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXG4gICAgICAuLi5wcm9wZXJ0eVJlbGF0aW9ucyxcbiAgICAgIHByb3BlcnR5UmVsYXRpb25cbiAgICBdO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbU5hbWVBbmRQcm9wZXJ0eVJlbGF0aW9ucyhuYW1lLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3BlcnR5UmVsYXRpb25zKTtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZSB9ID0gZG9tLFxuICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uVHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uVHlwZU5vZGVRdWVyeSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgIHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvblR5cGVOb2RlLCAvLy9cbiAgICAgICAgY29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpLFxuICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tTmFtZUFuZFByb3BlcnR5UmVsYXRpb25zKG5hbWUsIHByb3BlcnR5UmVsYXRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb25zU3RyaW5nID0gcHJvcGVydHlSZWxhdGlvbnMucmVkdWNlKChwcm9wZXJ0eVJlbGF0aW9uc1N0cmluZywgcHJvcGVydHlSZWxhdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25TdHJpbmcgPSBwcm9wZXJ0eVJlbGF0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbnNTdHJpbmcgPSBgJHtwcm9wZXJ0eVJlbGF0aW9uc1N0cmluZ30sICR7cHJvcGVydHlSZWxhdGlvblN0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25zU3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICBzdHJpbmcgPSBgJHtuYW1lfSR7cHJvcGVydHlSZWxhdGlvbnNTdHJpbmd9YDtcblxuICByZXR1cm4gc3RyaW5nO1xufSJdLCJuYW1lcyI6WyJ0ZXJtVmFyaWFibGVOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ2YXJpYWJsZURlY2xhcmF0aW9uVHlwZU5vZGVRdWVyeSIsInZhcmlhYmxlRGVjbGFyYXRpb25WYXJpYWJsZU5vZGVRdWVyeSIsImRvbUFzc2lnbmVkIiwiVmFyaWFibGUiLCJzdHJpbmciLCJub2RlIiwibmFtZSIsInR5cGUiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsImdldFN0cmluZyIsImdldE5vZGUiLCJnZXROYW1lIiwiZ2V0VHlwZSIsImdldFByb3BlcnR5UmVsYXRpb25zIiwic2V0VHlwZSIsImlzRXF1YWxUbyIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJlcXVhbFRvIiwibWF0Y2hOYW1lIiwibmFtZU1hdGNoZXMiLCJtYXRjaFZhcmlhYmxlTmFtZSIsInZhcmlhYmxlTmFtZSIsInZhcmlhYmxlTmFtZU1hdGNoZXMiLCJpc0VmZmVjdGl2ZWx5RXF1YWxUb1Rlcm0iLCJ0ZXJtIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJlZmZlY3RpdmVseUVxdWFsVG9UZXJtIiwiZ2VuZXJhbENvbnRleHRGaWxlUGF0aCIsImdldEZpbGVQYXRoIiwic3BlY2lmaWNDb250ZXh0RmlsZVBhdGgiLCJ0ZXJtU3RyaW5nIiwidmVyaWZ5IiwiY29udGV4dCIsInZlcmlmaWVkIiwidHJhY2UiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSIsImRlYnVnIiwidmVyaWZ5VHlwZSIsImZpbGVDb250ZXh0IiwidHlwZVZlcmlmaWVkIiwib2JqZWN0VHlwZSIsInR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidW5pZnlUZXJtIiwic3Vic3RpdHV0aW9ucyIsInRlcm1VbmlmaWVkIiwic3Vic3RpdHV0aW9uUHJlc2VudCIsImlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5VmFyaWFibGUiLCJzdWJzdGl0dXRpb24iLCJmaW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZSIsInN1YnN0aXR1dGlvblRlcm1FcXVhbFRvVGVybSIsImlzVGVybUVxdWFsVG8iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiVGVybVN1YnN0aXR1dGlvbiIsImZyb21UZXJuQW5kVmFyaWFibGUiLCJhZGRTdWJzdGl0dXRpb24iLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwianNvbiIsImZyb21KU09OIiwibG9jYWxDb250ZXh0IiwiTG9jYWxDb250ZXh0IiwiZnJvbUZpbGVDb250ZXh0IiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlRnJvbVZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVGcm9tSlNPTiIsImZyb21UZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybVZhcmlhYmxlTm9kZSIsIm5vZGVBc1N0cmluZyIsImZyb21WYXJpYWJsZU5vZGUiLCJmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSIsImZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvblZhcmlhYmxlTm9kZSIsInR5cGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJmcm9tVmFyaWFibGVBbmRQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsInN0cmluZ0Zyb21OYW1lQW5kUHJvcGVydHlSZWxhdGlvbnMiLCJUeXBlIiwiZG9tIiwidmFyaWFibGVEZWNsYXJhdGlvblR5cGVOb2RlIiwidHlwZU5vZGUiLCJmcm9tVHlwZU5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uc1N0cmluZyIsInJlZHVjZSIsInByb3BlcnR5UmVsYXRpb25TdHJpbmciLCJFTVBUWV9TVFJJTkciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQUE7OzsyREFoQmdCOzREQUNTOzJEQUNJO3FCQUVIO29CQUNDO3lCQUVFO29CQUNnQjtvQkFDQTt3QkFDRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLElBQU1BLHdCQUF3QkMsSUFBQUEsZ0JBQVMsRUFBQyxvQkFDbENDLG1DQUFtQ0QsSUFBQUEsZ0JBQVMsRUFBQyw4QkFDN0NFLHVDQUF1Q0YsSUFBQUEsZ0JBQVMsRUFBQztJQUV2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
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uL2RvbVwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9sb2NhbFwiO1xuaW1wb3J0IFRlcm1TdWJzdGl0dXRpb24gZnJvbSBcIi4uL3N1YnN0aXR1dGlvbi90ZXJtXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi90eXBlXCI7XG5pbXBvcnQgeyBkb21Bc3NpZ25lZCB9IGZyb20gXCIuLi9kb21cIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORywgUFJPVklTSU9OQUxMWSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IHZhcmlhYmxlTm9kZUZyb21WYXJpYWJsZVN0cmluZyB9IGZyb20gXCIuLi9jb250ZXh0L3BhcnRpYWwvdmFyaWFibGVcIjtcblxuY29uc3QgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3ZhcmlhYmxlRGVjbGFyYXRpb24vdmFyaWFibGVcIiksXG4gICAgICBsYXN0U2Vjb25kYXJ5S2V5d29yZFRlcm1pbmFsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3ZhcmlhYmxlRGVjbGFyYXRpb24vQHNlY29uZGFyeS1rZXl3b3JkWy0xXVwiKVxuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChjbGFzcyBWYXJpYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSwgcHJvdmlzaW9uYWwsIHByb3BlcnR5UmVsYXRpb25zKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICAgIHRoaXMucHJvcGVydHlSZWxhdGlvbnMgPSBwcm9wZXJ0eVJlbGF0aW9ucztcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlSZWxhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlSZWxhdGlvbnM7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgaXNFcXVhbFRvKHZhcmlhYmxlKSB7XG4gICAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBlcXVhbFRvID0gKHZhcmlhYmxlU3RyaW5nID09PSB0aGlzLnN0cmluZyk7XG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoTmFtZShuYW1lKSB7XG4gICAgY29uc3QgbmFtZU1hdGNoZXMgPSAobmFtZSA9PT0gdGhpcy5uYW1lKTtcblxuICAgIHJldHVybiBuYW1lTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZU1hdGNoZXMgPSAodmFyaWFibGVOYW1lID09PSB0aGlzLm5hbWUpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIH1cblxuICBpc0VmZmVjdGl2ZWx5RXF1YWxUb1Rlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBlZmZlY3RpdmVseUVxdWFsVG9UZXJtID0gZmFsc2U7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dEZpbGVQYXRoID0gZ2VuZXJhbENvbnRleHQuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRGaWxlUGF0aCA9IHNwZWNpZmljQ29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgaWYgKGdlbmVyYWxDb250ZXh0RmlsZVBhdGggPT09IHNwZWNpZmljQ29udGV4dEZpbGVQYXRoKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgICAgaWYgKHRlcm1TdHJpbmcgPT09IHRoaXMuc3RyaW5nKSB7XG4gICAgICAgIGVmZmVjdGl2ZWx5RXF1YWxUb1Rlcm0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlZmZlY3RpdmVseUVxdWFsVG9UZXJtO1xuICB9XG5cbiAgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZWQ7XG5cbiAgICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdmFyaWFibGVOYW1lID0gdGhpcy5uYW1lLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5VHlwZShmaWxlQ29udGV4dCkge1xuICAgIGxldCB0eXBlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIHR5cGVWZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKTtcblxuICAgICAgZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLi4uYCk7XG5cbiAgICAgIGNvbnN0IHR5cGUgPSBmaWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBmaWxlQ29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVOYW1lfScgdHlwZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7IC8vL1xuXG4gICAgICAgIHR5cGVWZXJpZmllZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlVmVyaWZpZWQpIHtcbiAgICAgICAgZmlsZUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlTmFtZX0nIHR5cGUuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVWZXJpZmllZDtcbiAgfVxuXG4gIHVuaWZ5VGVybSh0ZXJtLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHRlcm1VbmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIHNwZWNpZmljQ29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZWx5RXF1YWxUb1Rlcm0gPSB0aGlzLmlzRWZmZWN0aXZlbHlFcXVhbFRvVGVybSh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChlZmZlY3RpdmVseUVxdWFsVG9UZXJtKSB7XG4gICAgICB0ZXJtVW5pZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcywgLy8vXG4gICAgICAgICAgICBzdWJzdGl0dXRpb25QcmVzZW50ID0gc3Vic3RpdHV0aW9ucy5pc1N1YnN0aXR1dGlvblByZXNlbnRCeVZhcmlhYmxlKHZhcmlhYmxlKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvblByZXNlbnQpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZSh2YXJpYWJsZSksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvblRlcm1FcXVhbFRvVGVybSA9IHN1YnN0aXR1dGlvbi5pc1Rlcm1FcXVhbFRvKHRlcm0pO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25UZXJtRXF1YWxUb1Rlcm0pIHtcbiAgICAgICAgICB0ZXJtVW5pZmllZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21UZXJuQW5kVmFyaWFibGUodGVybSwgdmFyaWFibGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9ucy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIHRlcm1VbmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVVuaWZpZWQpIHtcbiAgICAgIHNwZWNpZmljQ29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVVuaWZpZWQ7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuc3RyaW5nLFxuICAgICAgICAgIHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlZhcmlhYmxlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21GaWxlQ29udGV4dChmaWxlQ29udGV4dCksXG4gICAgICAgICAgY29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgdmFyaWFibGVTdHJpbmcgPSBzdHJpbmcsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVGcm9tVmFyaWFibGVTdHJpbmcodmFyaWFibGVTdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLFxuICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IG51bGwsXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXSxcbiAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIGNvbnN0IHRlcm1WYXJpYWJsZU5vZGUgPSB0ZXJtVmFyaWFibGVOb2RlUXVlcnkodGVybU5vZGUpO1xuXG4gICAgaWYgKHRlcm1WYXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1WYXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IG51bGwsXG4gICAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICAgIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IG51bGwsXG4gICAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdO1xuXG4gICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZU5vZGVBbmRUeXBlKHZhcmlhYmxlTm9kZSwgdHlwZSwgY29udGV4dCkge1xuICAgIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gbnVsbCxcbiAgICAgICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gW107XG5cbiAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSwgcHJvdmlzaW9uYWwsIHByb3BlcnR5UmVsYXRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZG9tLFxuICAgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25WYXJpYWJsZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uVmFyaWFibGVOb2RlUXVlcnkodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25WYXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSxcbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHN0cmluZyA9IHZhcmlhYmxlU3RyaW5nLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXSxcbiAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlQW5kUHJvcGVydHlSZWxhdGlvbih2YXJpYWJsZSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCkge1xuICAgIGxldCBwcm9wZXJ0eVJlbGF0aW9ucztcblxuICAgIGNvbnN0IG5vZGUgPSB2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgICAgbmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gdmFyaWFibGUuaXNQcm92aXNpb25hbCgpO1xuXG4gICAgcHJvcGVydHlSZWxhdGlvbnMgPSB2YXJpYWJsZS5nZXRQcm9wZXJ0eVJlbGF0aW9ucygpO1xuXG4gICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXG4gICAgICAuLi5wcm9wZXJ0eVJlbGF0aW9ucyxcbiAgICAgIHByb3BlcnR5UmVsYXRpb25cbiAgICBdO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbU5hbWVBbmRQcm9wZXJ0eVJlbGF0aW9ucyhuYW1lLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIHByb3Zpc2lvbmFsLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgICByZXR1cm4gdmFyaWFibGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdHJpbmdGcm9tTmFtZUFuZFByb3BlcnR5UmVsYXRpb25zKG5hbWUsIHByb3BlcnR5UmVsYXRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb25zU3RyaW5nID0gcHJvcGVydHlSZWxhdGlvbnMucmVkdWNlKChwcm9wZXJ0eVJlbGF0aW9uc1N0cmluZywgcHJvcGVydHlSZWxhdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25TdHJpbmcgPSBwcm9wZXJ0eVJlbGF0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgcHJvcGVydHlSZWxhdGlvbnNTdHJpbmcgPSBgJHtwcm9wZXJ0eVJlbGF0aW9uc1N0cmluZ30sICR7cHJvcGVydHlSZWxhdGlvblN0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25zU3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICBzdHJpbmcgPSBgJHtuYW1lfSR7cHJvcGVydHlSZWxhdGlvbnNTdHJpbmd9YDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgbGV0IHByb3Zpc2lvbmFsID0gZmFsc2U7XG5cbiAgY29uc3QgbGFzdFNlY29uZGFyeUtleXdvcmRUZXJtaW5hbE5vZGUgPSBsYXN0U2Vjb25kYXJ5S2V5d29yZFRlcm1pbmFsTm9kZVF1ZXJ5KHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKTtcblxuICBpZiAobGFzdFNlY29uZGFyeUtleXdvcmRUZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBjb250ZW50ID0gbGFzdFNlY29uZGFyeUtleXdvcmRUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnRQcm92aXNpb25hbGx5ID0gKGNvbnRlbnQgPT09IFBST1ZJU0lPTkFMTFkpO1xuXG4gICAgcHJvdmlzaW9uYWwgPSBjb250ZW50UHJvdmlzaW9uYWxseTsgLy8vXG4gIH1cblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG4iXSwibmFtZXMiOlsidGVybVZhcmlhYmxlTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidmFyaWFibGVEZWNsYXJhdGlvblZhcmlhYmxlTm9kZVF1ZXJ5IiwibGFzdFNlY29uZGFyeUtleXdvcmRUZXJtaW5hbE5vZGVRdWVyeSIsImRvbUFzc2lnbmVkIiwiVmFyaWFibGUiLCJzdHJpbmciLCJub2RlIiwibmFtZSIsInR5cGUiLCJwcm92aXNpb25hbCIsInByb3BlcnR5UmVsYXRpb25zIiwiZ2V0U3RyaW5nIiwiZ2V0Tm9kZSIsImdldE5hbWUiLCJnZXRUeXBlIiwiaXNQcm92aXNpb25hbCIsImdldFByb3BlcnR5UmVsYXRpb25zIiwic2V0VHlwZSIsImlzRXF1YWxUbyIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJlcXVhbFRvIiwibWF0Y2hOYW1lIiwibmFtZU1hdGNoZXMiLCJtYXRjaFZhcmlhYmxlTmFtZSIsInZhcmlhYmxlTmFtZSIsInZhcmlhYmxlTmFtZU1hdGNoZXMiLCJpc0VmZmVjdGl2ZWx5RXF1YWxUb1Rlcm0iLCJ0ZXJtIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJlZmZlY3RpdmVseUVxdWFsVG9UZXJtIiwiZ2VuZXJhbENvbnRleHRGaWxlUGF0aCIsImdldEZpbGVQYXRoIiwic3BlY2lmaWNDb250ZXh0RmlsZVBhdGgiLCJ0ZXJtU3RyaW5nIiwidmVyaWZ5IiwiY29udGV4dCIsInZlcmlmaWVkIiwidHJhY2UiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSIsImRlYnVnIiwidmVyaWZ5VHlwZSIsImZpbGVDb250ZXh0IiwidHlwZVZlcmlmaWVkIiwib2JqZWN0VHlwZSIsInR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidW5pZnlUZXJtIiwic3Vic3RpdHV0aW9ucyIsInRlcm1VbmlmaWVkIiwic3Vic3RpdHV0aW9uUHJlc2VudCIsImlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5VmFyaWFibGUiLCJzdWJzdGl0dXRpb24iLCJmaW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZSIsInN1YnN0aXR1dGlvblRlcm1FcXVhbFRvVGVybSIsImlzVGVybUVxdWFsVG8iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiVGVybVN1YnN0aXR1dGlvbiIsImZyb21UZXJuQW5kVmFyaWFibGUiLCJhZGRTdWJzdGl0dXRpb24iLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwianNvbiIsImZyb21KU09OIiwibG9jYWxDb250ZXh0IiwiTG9jYWxDb250ZXh0IiwiZnJvbUZpbGVDb250ZXh0IiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlRnJvbVZhcmlhYmxlU3RyaW5nIiwidmFyaWFibGVOYW1lRnJvbVZhcmlhYmxlTm9kZSIsInR5cGVGcm9tSlNPTiIsImZyb21UZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybVZhcmlhYmxlTm9kZSIsIm5vZGVBc1N0cmluZyIsImZyb21WYXJpYWJsZU5vZGUiLCJmcm9tVmFyaWFibGVOb2RlQW5kVHlwZSIsImZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZSIsImRvbSIsInZhcmlhYmxlRGVjbGFyYXRpb25WYXJpYWJsZU5vZGUiLCJwcm92aXNpb25hbEZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsImZyb21WYXJpYWJsZUFuZFByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwic3RyaW5nRnJvbU5hbWVBbmRQcm9wZXJ0eVJlbGF0aW9ucyIsInByb3BlcnR5UmVsYXRpb25zU3RyaW5nIiwicmVkdWNlIiwicHJvcGVydHlSZWxhdGlvblN0cmluZyIsIkVNUFRZX1NUUklORyIsImxhc3RTZWNvbmRhcnlLZXl3b3JkVGVybWluYWxOb2RlIiwiY29udGVudCIsImdldENvbnRlbnQiLCJjb250ZW50UHJvdmlzaW9uYWxseSIsIlBST1ZJU0lPTkFMTFkiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQUE7OzsyREFoQmdCOzREQUNTOzJEQUNJO3FCQUVIO29CQUNDO3lCQUVpQjtvQkFDQztvQkFDQTt3QkFDRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLElBQU1BLHdCQUF3QkMsSUFBQUEsZ0JBQVMsRUFBQyxvQkFDbENDLHVDQUF1Q0QsSUFBQUEsZ0JBQVMsRUFBQyxrQ0FDakRFLHdDQUF3Q0YsSUFBQUEsZ0JBQVMsRUFBQztJQUV4RCxXQUFlRyxJQUFBQSxnQkFBVyw2QkFBQzthQUFNQyxTQUNuQkMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxXQUFXLEVBQUVDLGlCQUFpQjtnQ0FEckNOO1FBRTdCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "1.0.33",
4
+ "version": "1.0.35",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
package/src/constants.js CHANGED
@@ -5,6 +5,8 @@ export const NOTHING = "";
5
5
  export const MISSING = "missing";
6
6
  export const FUNCTION = "function";
7
7
  export const UNDEFINED = "undefined";
8
+ export const PROVISIONAL = "Provisional";
8
9
  export const EMPTY_STRING = "";
10
+ export const PROVISIONALLY = "provisionally";
9
11
  export const BRACKETED_TERM_DEPTH = 2;
10
12
  export const BRACKETED_STATEMENT_DEPTH = 2;
@@ -735,6 +735,13 @@ export default class FileContext {
735
735
  return metavariablePresent;
736
736
  }
737
737
 
738
+ isMetaLemmaMetatheoremPresentByReference(reference) {
739
+ const metaLemmaMetatheorem = this.findMetaLemmaMetatheoremByReference(reference),
740
+ metaLemmaMetatheoremPresent = (metaLemmaMetatheorem !== null);
741
+
742
+ return metaLemmaMetatheoremPresent;
743
+ }
744
+
738
745
  nodeAsString(node, tokens = null) {
739
746
  if (tokens === null) {
740
747
  tokens = this.tokens;
@@ -281,6 +281,8 @@ class LocalContext {
281
281
 
282
282
  isMetavariablePresentByReference(reference) { return this.context.isMetavariablePresentByReference(reference); }
283
283
 
284
+ isMetaLemmaMetatheoremPresentByReference(reference) { return this.context.isMetaLemmaMetatheoremPresentByReference(reference); }
285
+
284
286
  findAxiomLemmaTheoremConjectureByReference(reference) { return this.context.findAxiomLemmaTheoremConjectureByReference(reference); }
285
287
 
286
288
  isMetavariablePresent(metavariable, generalContext, specificContext) { return this.context.isMetavariablePresent(metavariable, generalContext, specificContext); }
@@ -7,8 +7,9 @@ import { domAssigned } from "../../dom";
7
7
  import combinatorVerifier from "../../verifier/combinator";
8
8
 
9
9
  export default domAssigned(class CombinatorDeclaration {
10
- constructor(fileContext, combinator) {
10
+ constructor(fileContext, string, combinator) {
11
11
  this.fileContext = fileContext;
12
+ this.string = string;
12
13
  this.combinator = combinator;
13
14
  }
14
15
 
@@ -16,12 +17,14 @@ export default domAssigned(class CombinatorDeclaration {
16
17
  return this.fileContext;
17
18
  }
18
19
 
20
+ getString() {
21
+ return this.string;
22
+ }
23
+
19
24
  getCombinator() {
20
25
  return this.combinator;
21
26
  }
22
27
 
23
- getString() { return this.combinator.getString(); }
24
-
25
28
  verify() {
26
29
  let verified = false;
27
30
 
@@ -67,8 +70,10 @@ export default domAssigned(class CombinatorDeclaration {
67
70
 
68
71
  static fromCombinatorDeclarationNode(combinatorDeclarationNode, fileContext) {
69
72
  const { Combinator } = dom,
73
+ node = combinatorDeclarationNode, ///
74
+ string = fileContext.nodeAsString(node),
70
75
  combinator = Combinator.fromCombinatorDeclarationNode(combinatorDeclarationNode, fileContext),
71
- combinatorDeclaration = new CombinatorDeclaration(fileContext, combinator);
76
+ combinatorDeclaration = new CombinatorDeclaration(fileContext, string, combinator);
72
77
 
73
78
  return combinatorDeclaration;
74
79
  }
@@ -6,8 +6,9 @@ import { objectType } from "../type";
6
6
  import { domAssigned } from "../../dom";
7
7
 
8
8
  export default domAssigned(class ComplexTypeDeclaration {
9
- constructor(fileContext, type) {
9
+ constructor(fileContext, string, type) {
10
10
  this.fileContext = fileContext;
11
+ this.string = string;
11
12
  this.type = type;
12
13
  }
13
14
 
@@ -15,12 +16,14 @@ export default domAssigned(class ComplexTypeDeclaration {
15
16
  return this.fileContext;
16
17
  }
17
18
 
19
+ getString() {
20
+ return this.string;
21
+ }
22
+
18
23
  getType() {
19
24
  return this.type;
20
25
  }
21
26
 
22
- getString() { return this.type.getString(); }
23
-
24
27
  verify() {
25
28
  let verified = false;
26
29
 
@@ -28,12 +31,12 @@ export default domAssigned(class ComplexTypeDeclaration {
28
31
 
29
32
  this.fileContext.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration...`);
30
33
 
31
- const typeVerified = this.verifyType(this.type);
34
+ const typeVerified = this.verifyType();
32
35
 
33
36
  if (typeVerified) {
34
37
  const includeSuperType = false,
35
38
  properties = this.type.getProperties(includeSuperType),
36
- propertiesVerified = this.verifyProperties(properties, this.type);
39
+ propertiesVerified = this.verifyProperties(properties);
37
40
 
38
41
  if (propertiesVerified) {
39
42
  this.fileContext.addType(this.type);
@@ -49,24 +52,24 @@ export default domAssigned(class ComplexTypeDeclaration {
49
52
  return verified;
50
53
  }
51
54
 
52
- verifyType(type) {
55
+ verifyType() {
53
56
  let typeVerified = false;
54
57
 
55
- const typeString = type.getString(); ///
58
+ const typeString = this.type.getString(); ///
56
59
 
57
60
  this.fileContext.trace(`Verifying the '${typeString}' type...`);
58
61
 
59
- const typeName = type.getName(),
62
+ const typeName = this.type.getName(),
60
63
  typePresent = this.fileContext.isTypePresentByTypeName(typeName);
61
64
 
62
65
  if (typePresent) {
63
- const typeString = type.getString();
66
+ const typeString = this.type.getString();
64
67
 
65
68
  this.fileContext.debug(`The '${typeString}' type is already present.`);
66
69
  } else {
67
70
  let superType;
68
71
 
69
- superType = type.getSuperType();
72
+ superType = this.type.getSuperType();
70
73
 
71
74
  const superTypeName = superType.getName();
72
75
 
@@ -77,7 +80,7 @@ export default domAssigned(class ComplexTypeDeclaration {
77
80
 
78
81
  this.fileContext.debug(`The super-type '${superTypeString}' is not present.`);
79
82
  } else {
80
- type.setSuperType(superType);
83
+ this.type.setSuperType(superType);
81
84
 
82
85
  typeVerified = true;
83
86
  }
@@ -151,10 +154,10 @@ export default domAssigned(class ComplexTypeDeclaration {
151
154
  return propertyVerified;
152
155
  }
153
156
 
154
- verifyProperties(properties, type) {
157
+ verifyProperties(properties) {
155
158
  let propertiesVerified;
156
159
 
157
- const superType = type.getSuperType(),
160
+ const superType = this.type.getSuperType(),
158
161
  superTypeProperties = superType.getProperties();
159
162
 
160
163
  propertiesVerified = properties.every((property) => {
@@ -201,8 +204,10 @@ export default domAssigned(class ComplexTypeDeclaration {
201
204
 
202
205
  static fromComplexTypeDeclarationNode(complexTypeDeclarationNode, fileContext) {
203
206
  const { Type } = dom,
207
+ node = complexTypeDeclarationNode, ///
208
+ string = fileContext.nodeAsString(node),
204
209
  type = Type.fromComplexTypeDeclarationNode(complexTypeDeclarationNode, fileContext),
205
- complexTypeDeclaration = new ComplexTypeDeclaration(fileContext, type);
210
+ complexTypeDeclaration = new ComplexTypeDeclaration(fileContext, string, type);
206
211
 
207
212
  return complexTypeDeclaration;
208
213
  }
@@ -8,8 +8,9 @@ import { domAssigned } from "../../dom";
8
8
  import constructorVerifier from "../../verifier/constructor";
9
9
 
10
10
  export default domAssigned(class ConstructorDeclaration {
11
- constructor(fileContext, constructor) {
11
+ constructor(fileContext, string, constructor) {
12
12
  this.fileContext = fileContext;
13
+ this.string = string;
13
14
  this.constructor = constructor;
14
15
  }
15
16
 
@@ -17,12 +18,14 @@ export default domAssigned(class ConstructorDeclaration {
17
18
  return this.fileContext;
18
19
  }
19
20
 
21
+ getString() {
22
+ return this.string;
23
+ }
24
+
20
25
  getConstructor() {
21
26
  return this.constructor;
22
27
  }
23
28
 
24
- getString() { return this.constructor.getString(); }
25
-
26
29
  verify() {
27
30
  let verified;
28
31
 
@@ -106,8 +109,10 @@ export default domAssigned(class ConstructorDeclaration {
106
109
 
107
110
  static fromConstructorDeclarationNode(constructorDeclarationNode, fileContext) {
108
111
  const { Constructor } = dom,
112
+ node = constructorDeclarationNode, ///
113
+ string = fileContext.nodeAsString(node),
109
114
  constructor = Constructor.fromConstructorDeclarationNode(constructorDeclarationNode, fileContext),
110
- constructorDeclaration = new ConstructorDeclaration(fileContext, constructor);
115
+ constructorDeclaration = new ConstructorDeclaration(fileContext, string, constructor);
111
116
 
112
117
  return constructorDeclaration;
113
118
  }
@@ -5,8 +5,9 @@ import dom from "../../dom";
5
5
  import { domAssigned } from "../../dom";
6
6
 
7
7
  export default domAssigned(class TypeDeclaration {
8
- constructor(fileContext, type) {
8
+ constructor(fileContext, string, type) {
9
9
  this.fileContext = fileContext;
10
+ this.string = string;
10
11
  this.type = type;
11
12
  }
12
13
 
@@ -14,12 +15,14 @@ export default domAssigned(class TypeDeclaration {
14
15
  return this.fileContext;
15
16
  }
16
17
 
18
+ getString() {
19
+ return this.string;
20
+ }
21
+
17
22
  getType() {
18
23
  return this.type;
19
24
  }
20
25
 
21
- getString() { return this.type.getString(); }
22
-
23
26
  verify() {
24
27
  let verified = false;
25
28
 
@@ -27,7 +30,7 @@ export default domAssigned(class TypeDeclaration {
27
30
 
28
31
  this.fileContext.trace(`Verifying the '${typeDeclarationString}' type declaration...`);
29
32
 
30
- const typeVerified = this.verifyType(this.type);
33
+ const typeVerified = this.verifyType();
31
34
 
32
35
  if (typeVerified) {
33
36
  this.fileContext.addType(this.type);
@@ -42,10 +45,10 @@ export default domAssigned(class TypeDeclaration {
42
45
  return verified;
43
46
  }
44
47
 
45
- verifyType(type) {
48
+ verifyType() {
46
49
  let typeVerified = false;
47
50
 
48
- const typeName = type.getName();
51
+ const typeName = this.type.getName();
49
52
 
50
53
  this.fileContext.trace(`Verifying the '${typeName}' type...`);
51
54
 
@@ -56,7 +59,7 @@ export default domAssigned(class TypeDeclaration {
56
59
  } else {
57
60
  let superType;
58
61
 
59
- superType = type.getSuperType();
62
+ superType = this.type.getSuperType();
60
63
 
61
64
  const superTypeName = superType.getName();
62
65
 
@@ -65,7 +68,7 @@ export default domAssigned(class TypeDeclaration {
65
68
  if (superType === null) {
66
69
  this.fileContext.debug(`The super-type '${superTypeName}' is not present.`);
67
70
  } else {
68
- type.setSuperType(superType);
71
+ this.type.setSuperType(superType);
69
72
 
70
73
  typeVerified = true;
71
74
  }
@@ -83,7 +86,9 @@ export default domAssigned(class TypeDeclaration {
83
86
  static fromTypeDeclarationNode(typeDeclarationNode, fileContext) {
84
87
  const { Type } = dom,
85
88
  type = Type.fromTypeDeclarationNode(typeDeclarationNode, fileContext),
86
- typeDeclaration = new TypeDeclaration(fileContext, type);
89
+ node = typeDeclarationNode, ///
90
+ string = fileContext.nodeAsString(node),
91
+ typeDeclaration = new TypeDeclaration(fileContext, string, type);
87
92
 
88
93
  return typeDeclaration;
89
94
  }
@@ -6,8 +6,9 @@ import { objectType } from "../type";
6
6
  import { domAssigned } from "../../dom";
7
7
 
8
8
  export default domAssigned(class VariableDeclaration {
9
- constructor(fileContext, variable) {
9
+ constructor(fileContext, string, variable) {
10
10
  this.fileContext = fileContext;
11
+ this.string = string;
11
12
  this.variable = variable;
12
13
  }
13
14
 
@@ -15,12 +16,14 @@ export default domAssigned(class VariableDeclaration {
15
16
  return this.fileContext;
16
17
  }
17
18
 
19
+ getString() {
20
+ return this.string;
21
+ }
22
+
18
23
  getVariable() {
19
24
  return this.variable;
20
25
  }
21
26
 
22
- getString() { return this.variable.getString(); }
23
-
24
27
  verify() {
25
28
  let verified = false;
26
29
 
@@ -28,25 +31,41 @@ export default domAssigned(class VariableDeclaration {
28
31
 
29
32
  this.fileContext.trace(`Verifying the '${variableDeclarationString}' variable declaration...`);
30
33
 
31
- const variableVerified = this.verifyVariable(this.variable);
34
+ const variableVerified = this.verifyVariable();
32
35
 
33
36
  if (variableVerified) {
34
- let type;
37
+ const variableTypeVerified = this.verifyVariableType();
35
38
 
36
- type = this.variable.getType();
39
+ if (variableTypeVerified) {
40
+ let type;
37
41
 
38
- const typeVerified = this.verifyType(type);
42
+ type = this.variable.getType();
39
43
 
40
- if (typeVerified) {
41
44
  const typeName = type.getName();
42
45
 
43
46
  type = this.fileContext.findTypeByTypeName(typeName);
44
47
 
45
- this.variable.setType(type);
48
+ const typeProvisional = type.isProvisional(),
49
+ variableProvisional = this.variable.isProvisional();
46
50
 
47
- this.fileContext.addVariable(this.variable);
51
+ if (typeProvisional !== variableProvisional) {
52
+ const typeString = type.getString(),
53
+ variableString = this.variable.getString();
48
54
 
49
- verified = true;
55
+ if (typeProvisional) {
56
+ this.fileContext.debug(`The '${typeString}' type is provisional whilst the '${variableString}' variable's type is not.`);
57
+ }
58
+
59
+ if (variableProvisional) {
60
+ this.fileContext.debug(`The '${typeString}' type is not provisional whilst the '${variableString}' variable's type is.`);
61
+ }
62
+ } else {
63
+ this.variable.setType(type);
64
+
65
+ this.fileContext.addVariable(this.variable);
66
+
67
+ verified = true;
68
+ }
50
69
  }
51
70
  }
52
71
 
@@ -57,9 +76,11 @@ export default domAssigned(class VariableDeclaration {
57
76
  return verified;
58
77
  }
59
78
 
60
- verifyType(type) {
79
+ verifyVariableType() {
61
80
  let typeVerified = false;
62
81
 
82
+ const type = this.variable.getType();
83
+
63
84
  if (type === objectType) {
64
85
  typeVerified = true;
65
86
  } else {
@@ -83,14 +104,14 @@ export default domAssigned(class VariableDeclaration {
83
104
  return typeVerified;
84
105
  }
85
106
 
86
- verifyVariable(variable) {
107
+ verifyVariable() {
87
108
  let variableVerified = false;
88
109
 
89
- const variableString = variable.getString();
110
+ const variableString = this.variable.getString();
90
111
 
91
112
  this.fileContext.trace(`Verifying the '${variableString}' variable...`);
92
113
 
93
- const variableName = variable.getName(),
114
+ const variableName = this.variable.getName(),
94
115
  variablePresent = this.fileContext.isVariablePresentByVariableName(variableName);
95
116
 
96
117
  if (variablePresent) {
@@ -110,8 +131,10 @@ export default domAssigned(class VariableDeclaration {
110
131
 
111
132
  static fromVariableDeclarationNode(variableDeclarationNode, fileContext) {
112
133
  const { Variable } = dom,
134
+ node = variableDeclarationNode, ///
135
+ string = fileContext.nodeAsString(node),
113
136
  variable = Variable.fromVariableDeclarationNode(variableDeclarationNode, fileContext),
114
- variableDeclaration = new VariableDeclaration(fileContext, variable);
137
+ variableDeclaration = new VariableDeclaration(fileContext, string, variable);
115
138
 
116
139
  return variableDeclaration;
117
140
  }