occam-verify-cli 0.0.309 → 0.0.311

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/bin/abbreviations.js +2 -4
  2. package/bin/main.js +10 -10
  3. package/bin/options.js +1 -3
  4. package/bin/utilities/logging.js +42 -0
  5. package/bin/utilities/release.js +77 -0
  6. package/lib/context/file.js +33 -16
  7. package/lib/context/metaproof.js +13 -13
  8. package/lib/context/proof.js +13 -13
  9. package/lib/context/release.js +37 -68
  10. package/lib/mixins/log.js +41 -0
  11. package/lib/utilities/customGrammar.js +32 -0
  12. package/lib/utilities/tokens.js +63 -0
  13. package/lib/verify/assertion/type.js +4 -4
  14. package/lib/verify/axiom.js +3 -3
  15. package/lib/verify/label.js +2 -2
  16. package/lib/verify/metastatement/qualified.js +2 -2
  17. package/lib/verify/metastatement/unqualified.js +2 -2
  18. package/lib/verify/release.js +8 -9
  19. package/lib/verify/rule.js +3 -3
  20. package/lib/verify/statement.js +3 -3
  21. package/lib/verify/statementAsCombinator.js +4 -4
  22. package/lib/verify/term.js +2 -2
  23. package/lib/verify/termAsConstructor.js +7 -7
  24. package/lib/verify/termAsVariable.js +2 -2
  25. package/lib/verify/type.js +5 -5
  26. package/lib/verify/variable.js +4 -4
  27. package/package.json +2 -2
  28. package/src/context/file.js +26 -10
  29. package/src/context/metaproof.js +6 -6
  30. package/src/context/proof.js +6 -6
  31. package/src/context/release.js +37 -58
  32. package/src/mixins/log.js +28 -0
  33. package/src/utilities/customGrammar.js +27 -0
  34. package/src/utilities/tokens.js +67 -0
  35. package/src/verify/assertion/type.js +3 -3
  36. package/src/verify/axiom.js +2 -2
  37. package/src/verify/label.js +1 -1
  38. package/src/verify/metastatement/qualified.js +1 -1
  39. package/src/verify/metastatement/unqualified.js +1 -1
  40. package/src/verify/release.js +8 -11
  41. package/src/verify/rule.js +2 -2
  42. package/src/verify/statement.js +2 -2
  43. package/src/verify/statementAsCombinator.js +3 -3
  44. package/src/verify/term.js +1 -1
  45. package/src/verify/termAsConstructor.js +6 -6
  46. package/src/verify/termAsVariable.js +1 -1
  47. package/src/verify/type.js +4 -4
  48. package/src/verify/variable.js +3 -3
  49. package/bin/loadReleaseContexts.js +0 -68
@@ -2,12 +2,10 @@
2
2
 
3
3
  const options = require("./options");
4
4
 
5
- const { LOG_LEVEL_OPTION, RELEASE_NAME_OPTIONS } = options;
5
+ const { RELEASE_NAME_OPTIONS } = options;
6
6
 
7
- const l = LOG_LEVEL_OPTION,
8
- p = RELEASE_NAME_OPTIONS;
7
+ const p = RELEASE_NAME_OPTIONS;
9
8
 
10
9
  module.exports = {
11
- l,
12
10
  p
13
11
  };
package/bin/main.js CHANGED
@@ -1,24 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  const { verifyRelease } = require("../lib/index"),
4
- { arrayUtilities, loggingUtilities } = require("necessary");
4
+ { arrayUtilities } = require("necessary");
5
5
 
6
- const loadReleaseContexts = require("./loadReleaseContexts");
6
+ const { createReleaseContext } = require("./utilities/release");
7
7
 
8
- const { log } = loggingUtilities,
9
- { first } = arrayUtilities;
8
+ const { first } = arrayUtilities;
10
9
 
11
10
  function main(commands, options) {
12
11
  const firstCommand = first(commands),
13
- { logLevel = null, releaseName = firstCommand } = options; ///
12
+ { name = firstCommand } = options, ///
13
+ releaseContextMap = {};
14
14
 
15
- if (logLevel !== null) {
16
- log.setLogLevel(logLevel);
17
- }
15
+ createReleaseContext(name, releaseContextMap);
18
16
 
19
- const releaseContextMap = loadReleaseContexts(releaseName);
17
+ const releaseContext = releaseContextMap[name];
20
18
 
21
- verifyRelease(releaseName, releaseContextMap);
19
+ if (releaseContext !== null) {
20
+ verifyRelease(name, releaseContextMap);
21
+ }
22
22
  }
23
23
 
24
24
  module.exports = main;
package/bin/options.js CHANGED
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
2
 
3
- const LOG_LEVEL_OPTION = "log-level",
4
- RELEASE_NAME_OPTIONS = "package-name";
3
+ const RELEASE_NAME_OPTIONS = "package-name";
5
4
 
6
5
  module.exports = {
7
- LOG_LEVEL_OPTION,
8
6
  RELEASE_NAME_OPTIONS
9
7
  };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ const { levels } = require("necessary");
4
+
5
+ const { TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL, FATAL_LEVEL } = levels;
6
+
7
+ function log(level, message, filePath = null, leastLineIndex = null, greatestLineIndex = null) {
8
+ if (filePath === null) {
9
+ console.log(`(${level}) ${message}`)
10
+ } else if (leastLineIndex === greatestLineIndex) {
11
+ const lineIndex = leastLineIndex; ///
12
+
13
+ console.log(`(${level}) '${filePath}' : [${lineIndex}] - ${message}`);
14
+ } else {
15
+ console.log(`(${level}) '${filePath}' : [${leastLineIndex}-${greatestLineIndex}] - ${message}`);
16
+ }
17
+ }
18
+
19
+ function trace(message) { log(TRACE_LEVEL, message); }
20
+
21
+ function debug(message) { log(DEBUG_LEVEL, message); }
22
+
23
+ function info(message) { log(INFO_LEVEL, message); }
24
+
25
+ function warning(message) { log(WARNING_LEVEL, message); }
26
+
27
+ function error(message) { log(ERROR_LEVEL, message); }
28
+
29
+ function fatal(message) { log(FATAL_LEVEL, message); }
30
+
31
+ Object.assign(log, {
32
+ trace,
33
+ debug,
34
+ info,
35
+ warning,
36
+ error,
37
+ fatal
38
+ });
39
+
40
+ module.exports = {
41
+ log
42
+ };
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ const { arrayUtilities } = require("necessary"),
4
+ { ReleaseContext } = require("../../lib/index"),
5
+ { fileSystemUtilities } = require("occam-file-system");
6
+
7
+ const { log } = require("../utilities/logging"),
8
+ { PERIOD } = require("../constants");
9
+
10
+ const { first } = arrayUtilities,
11
+ { loadRelease } = fileSystemUtilities;
12
+
13
+ function createReleaseContext(name, releaseContextMap, dependentNames = []) {
14
+ let releaseContext = releaseContextMap[name] || null;
15
+
16
+ if (releaseContext !== null) {
17
+ return;
18
+ }
19
+
20
+ const topmostDirectoryName = name, ///
21
+ projectsDirectoryPath = PERIOD,
22
+ release = loadRelease(topmostDirectoryName, projectsDirectoryPath);
23
+
24
+ if (release === null) {
25
+ log.error(`The '${name}' package cannot be loaded.`);
26
+ } else {
27
+ const releaseContext = ReleaseContext.fromLogAndRelease(log, release);
28
+
29
+ createDependencyReleaseContexts(releaseContext, releaseContextMap, dependentNames);
30
+
31
+ releaseContextMap[name] = releaseContext;
32
+ }
33
+ }
34
+
35
+ function createDependencyReleaseContexts(releaseContext, releaseContextMap, dependentNames = []) {
36
+ const name = releaseContext.getName(),
37
+ version = releaseContext.getVersion(),
38
+ dependencies = releaseContext.getDependencies(),
39
+ dependencyNames = dependencies.mapDependency((dependency) => {
40
+ const dependencyName = dependency.getName();
41
+
42
+ return dependencyName;
43
+ });
44
+
45
+ dependentNames = [ ...dependentNames, name ]; ///
46
+
47
+ dependencyNames.forEach((dependencyName) => {
48
+ const cyclicDependencyExists = checkCyclicDependencyExists(dependencyName, dependentNames, releaseContext);
49
+
50
+ if (cyclicDependencyExists) {
51
+ return;
52
+ }
53
+
54
+ const name = dependencyName; ///
55
+
56
+ createReleaseContext(name, releaseContextMap, dependentNames);
57
+ });
58
+ }
59
+
60
+ module.exports = {
61
+ createReleaseContext
62
+ };
63
+
64
+ function checkCyclicDependencyExists(dependencyName, dependentNames, releaseContext) {
65
+ const dependentNamesIncludesDependencyName = dependentNames.includes(dependencyName),
66
+ cyclicDependencyExists = dependentNamesIncludesDependencyName; ///
67
+
68
+ if (cyclicDependencyExists) {
69
+ const firstDependentName = first(dependentNames),
70
+ dependencyNames = dependentNames.concat(firstDependentName),
71
+ dependencyNamesString = dependencyNames.join(`' -> '`);
72
+
73
+ releaseContext.error(`There is a cyclic dependency: '${dependencyNamesString}'.`);
74
+ }
75
+
76
+ return cyclicDependencyExists;
77
+ }
@@ -8,8 +8,10 @@ Object.defineProperty(exports, "default", {
8
8
  return FileContext;
9
9
  }
10
10
  });
11
+ var _necessary = require("necessary");
11
12
  var _occamGrammarUtilities = require("occam-grammar-utilities");
12
13
  var _array = require("../utilities/array");
14
+ var _tokens = require("../utilities/tokens");
13
15
  function _arrayLikeToArray(arr, len) {
14
16
  if (len == null || len > arr.length) len = arr.length;
15
17
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -54,9 +56,11 @@ function _unsupportedIterableToArray(o, minLen) {
54
56
  if (n === "Map" || n === "Set") return Array.from(n);
55
57
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
56
58
  }
59
+ var TRACE_LEVEL = _necessary.levels.TRACE_LEVEL, DEBUG_LEVEL = _necessary.levels.DEBUG_LEVEL, INFO_LEVEL = _necessary.levels.INFO_LEVEL, WARNING_LEVEL = _necessary.levels.WARNING_LEVEL, ERROR_LEVEL = _necessary.levels.ERROR_LEVEL, FATAL_LEVEL = _necessary.levels.FATAL_LEVEL;
57
60
  var FileContext = /*#__PURE__*/ function() {
58
- function FileContext(tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext) {
61
+ function FileContext(filePath, tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext) {
59
62
  _classCallCheck(this, FileContext);
63
+ this.filePath = filePath;
60
64
  this.tokens = tokens;
61
65
  this.node = node;
62
66
  this.rules = rules;
@@ -68,6 +72,12 @@ var FileContext = /*#__PURE__*/ function() {
68
72
  this.releaseContext = releaseContext;
69
73
  }
70
74
  _createClass(FileContext, [
75
+ {
76
+ key: "getFilePath",
77
+ value: function getFilePath() {
78
+ return this.filePath;
79
+ }
80
+ },
71
81
  {
72
82
  key: "getTokens",
73
83
  value: function getTokens() {
@@ -291,47 +301,54 @@ var FileContext = /*#__PURE__*/ function() {
291
301
  },
292
302
  {
293
303
  key: "trace",
294
- value: function trace(message) {
295
- this.releaseContext.trace(message);
304
+ value: function trace(message, node) {
305
+ this.log(node, TRACE_LEVEL, message);
296
306
  }
297
307
  },
298
308
  {
299
309
  key: "debug",
300
- value: function debug(message) {
301
- this.releaseContext.debug(message);
310
+ value: function debug(message, node) {
311
+ this.log(node, DEBUG_LEVEL, message);
302
312
  }
303
313
  },
304
314
  {
305
315
  key: "info",
306
- value: function info(message) {
307
- this.releaseContext.info(message);
316
+ value: function info(message, node) {
317
+ this.log(node, INFO_LEVEL, message);
308
318
  }
309
319
  },
310
320
  {
311
321
  key: "warning",
312
- value: function warning(message) {
313
- this.releaseContext.warning(message);
322
+ value: function warning(message, node) {
323
+ this.log(node, WARNING_LEVEL, message);
314
324
  }
315
325
  },
316
326
  {
317
327
  key: "error",
318
- value: function error(message) {
319
- this.releaseContext.error(message);
328
+ value: function error(message, node) {
329
+ this.log(node, ERROR_LEVEL, message);
320
330
  }
321
331
  },
322
332
  {
323
333
  key: "fatal",
324
- value: function fatal(message) {
325
- this.releaseContext.fatal(message);
334
+ value: function fatal(message, node) {
335
+ this.log(node, FATAL_LEVEL, message);
336
+ }
337
+ },
338
+ {
339
+ key: "log",
340
+ value: function log(node, level, message) {
341
+ var leastLineIndex = (0, _tokens.leastLineIndexFromNodeAndTokens)(node, this.tokens), greatestLineIndex = (0, _tokens.greatestLineIndexFromNodeAndTokens)(node, this.tokens);
342
+ this.releaseContext.log(level, message, this.filePath, leastLineIndex, greatestLineIndex);
326
343
  }
327
344
  }
328
345
  ], [
329
346
  {
330
347
  key: "fromReleaseContextAndFilePath",
331
348
  value: function fromReleaseContextAndFilePath(releaseContext, filePath) {
332
- var fileContent = releaseContext.getFileContent(filePath), content = fileContent, tokens = releaseContext.tokenise(content), node = releaseContext.parse(tokens);
349
+ var file = releaseContext.getFile(filePath), content = file.getContent(), tokens = releaseContext.tokenise(content), node = releaseContext.parse(tokens);
333
350
  (0, _occamGrammarUtilities.rewriteNodes)(node);
334
- var rules = [], types = [], axioms = [], variables = [], combinators = [], constructors = [], fileContext = new FileContext(tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext);
351
+ var rules = [], types = [], axioms = [], variables = [], combinators = [], constructors = [], fileContext = new FileContext(filePath, tokens, node, rules, types, axioms, variables, combinators, constructors, releaseContext);
335
352
  return fileContext;
336
353
  }
337
354
  }
@@ -339,4 +356,4 @@ var FileContext = /*#__PURE__*/ function() {
339
356
  return FileContext;
340
357
  }();
341
358
 
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHJld3JpdGVOb2RlcyB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKHRva2Vucywgbm9kZSwgcnVsZXMsIHR5cGVzLCBheGlvbXMsIHZhcmlhYmxlcywgY29tYmluYXRvcnMsIGNvbnN0cnVjdG9ycywgcmVsZWFzZUNvbnRleHQpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMucmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dDtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRSdWxlcyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbXG4gICAgICAuLi50aGlzLnJ1bGVzXG4gICAgXTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0UnVsZXMgPSB0aGlzLnJlbGVhc2VDb250ZXh0LmdldFJ1bGVzKCk7XG5cbiAgICAgIHB1c2gocnVsZXMsIHJlbGVhc2VDb250ZXh0UnVsZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldFR5cGVzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IFtcbiAgICAgIC4uLnRoaXMudHlwZXNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRUeXBlcyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0VHlwZXMoKTtcblxuICAgICAgcHVzaCh0eXBlcywgcmVsZWFzZUNvbnRleHRUeXBlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZ2V0QXhpb21zKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBheGlvbXMgPSBbXG4gICAgICAuLi50aGlzLmF4aW9tc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dEF4aW9tcyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0QXhpb21zKCk7XG5cbiAgICAgIHB1c2goYXhpb21zLCByZWxlYXNlQ29udGV4dEF4aW9tcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9tcztcbiAgfVxuXG4gIGdldExhYmVscygpIHtcbiAgICBjb25zdCBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIGxhYmVscyA9IGF4aW9tcy5yZWR1Y2UoKGxhYmVscywgYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgICAgIHB1c2gobGFiZWxzLCBheGlvbUxhYmVscyk7XG5cbiAgICAgICAgICAgIHJldHVybiBsYWJlbHM7XG4gICAgICAgICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIGdldFZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YXJpYWJsZXM7XG4gIH1cblxuICBnZXRDb21iaW5hdG9ycyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29tYmluYXRvcnMgPSBbXG4gICAgICAuLi50aGlzLmNvbWJpbmF0b3JzXG4gICAgXTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMgPSB0aGlzLnJlbGVhc2VDb250ZXh0LmdldENvbWJpbmF0b3JzKCk7XG5cbiAgICAgIHB1c2goY29tYmluYXRvcnMsIHJlbGVhc2VDb250ZXh0Q29tYmluYXRvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhidWJibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uc3RydWN0b3JzID0gW1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RvcnNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMgPSB0aGlzLnJlbGVhc2VDb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gICAgICBwdXNoKGNvbnN0cnVjdG9ycywgcmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRSZWxlYXNlQ29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxlYXNlQ29udGV4dDtcbiAgfVxuXG4gIGdldE1ldGFBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25zID0gW107XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbnM7XG4gIH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuZ2V0VHlwZXMoKSxcbiAgICAgICAgICB0eXBlID0gdHlwZXMuZmluZCgodHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHR5cGUubWF0Y2hUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpIHtcbiAgICBjb25zdCBsYWJlbCA9IHJlZmVyZW5jZU5hbWUsICAvLy9cbiAgICAgICAgICBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoKSxcbiAgICAgICAgICBydWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZUxhYmVscyA9IHJ1bGUuZ2V0TGFiZWxzKCksXG4gICAgICAgICAgICAgICAgICBydWxlTGFiZWxzSW5jbHVkZXNMYWJlbCA9IHJ1bGVMYWJlbHMuaW5jbHVkZXMobGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAocnVsZUxhYmVsc0luY2x1ZGVzTGFiZWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpIHtcbiAgICBjb25zdCBsYWJlbCA9IHJlZmVyZW5jZU5hbWUsICAvLy9cbiAgICAgICAgICBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIGF4aW9tID0gYXhpb21zLmZpbmQoKGF4aW9tKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBheGlvbUxhYmVscyA9IGF4aW9tLmdldExhYmVscygpLFxuICAgICAgICAgICAgICAgICAgYXhpb21MYWJlbHNJbmNsdWRlc0xhYmVsID0gYXhpb21MYWJlbHMuaW5jbHVkZXMobGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAoYXhpb21MYWJlbHNJbmNsdWRlc0xhYmVsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBuYW1lID0gdmFyaWFibGVOYW1lLCAgLy8vXG4gICAgICAgICAgdmFyaWFibGUgPSB0aGlzLnZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHZhcmlhYmxlLm1hdGNoTmFtZShuYW1lKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZGVyaXZlZDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50KGxhYmVsKSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgICBsYWJlbHNJbmNsdWRlc0xhYmVsID0gbGFiZWxzLmluY2x1ZGVzKGxhYmVsKSxcbiAgICAgICAgICBsYWJlbFByZXNlbnQgPSBsYWJlbHNJbmNsdWRlc0xhYmVsOyAvLy9cblxuICAgIHJldHVybiBsYWJlbFByZXNlbnQ7XG4gIH1cblxuICBtYXRjaE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25NYXRjaGVzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbk1hdGNoZXM7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5maW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIHZhcmlhYmxlUHJlc2VudCA9ICh2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgYWRkVHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuICB9XG5cbiAgYWRkUnVsZShydWxlKSB7XG4gICAgdGhpcy5ydWxlcy5wdXNoKHJ1bGUpO1xuICB9XG5cbiAgYWRkQXhpb20oYXhpb20pIHtcbiAgICB0aGlzLmF4aW9tcy5wdXNoKGF4aW9tKTtcbiAgfVxuXG4gIGFkZFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRDb21iaW5hdG9yKGNvbWJpbmF0b3IpIHtcbiAgICB0aGlzLmNvbWJpbmF0b3JzLnB1c2goY29tYmluYXRvcik7XG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29uc3RydWN0b3JzLnB1c2goY29uc3RydWN0b3IpO1xuICB9XG5cbiAgdHJhY2UobWVzc2FnZSkgeyB0aGlzLnJlbGVhc2VDb250ZXh0LnRyYWNlKG1lc3NhZ2UpOyB9XG5cbiAgZGVidWcobWVzc2FnZSkgeyB0aGlzLnJlbGVhc2VDb250ZXh0LmRlYnVnKG1lc3NhZ2UpOyB9XG5cbiAgaW5mbyhtZXNzYWdlKSB7IHRoaXMucmVsZWFzZUNvbnRleHQuaW5mbyhtZXNzYWdlKTsgfVxuXG4gIHdhcm5pbmcobWVzc2FnZSkgeyB0aGlzLnJlbGVhc2VDb250ZXh0Lndhcm5pbmcobWVzc2FnZSk7IH1cblxuICBlcnJvcihtZXNzYWdlKSB7IHRoaXMucmVsZWFzZUNvbnRleHQuZXJyb3IobWVzc2FnZSk7IH1cblxuICBmYXRhbChtZXNzYWdlKSB7IHRoaXMucmVsZWFzZUNvbnRleHQuZmF0YWwobWVzc2FnZSk7IH1cblxuICBzdGF0aWMgZnJvbVJlbGVhc2VDb250ZXh0QW5kRmlsZVBhdGgocmVsZWFzZUNvbnRleHQsIGZpbGVQYXRoKSB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSByZWxlYXNlQ29udGV4dC5nZXRGaWxlQ29udGVudChmaWxlUGF0aCksXG4gICAgICAgICAgY29udGVudCA9IGZpbGVDb250ZW50LCAgLy8vXG4gICAgICAgICAgdG9rZW5zID0gcmVsZWFzZUNvbnRleHQudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgbm9kZSA9IHJlbGVhc2VDb250ZXh0LnBhcnNlKHRva2Vucyk7XG5cbiAgICByZXdyaXRlTm9kZXMobm9kZSk7XG5cbiAgICBjb25zdCBydWxlcyA9IFtdLFxuICAgICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBbXSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBbXSxcbiAgICAgICAgICBmaWxlQ29udGV4dCA9IG5ldyBGaWxlQ29udGV4dCh0b2tlbnMsIG5vZGUsIHJ1bGVzLCB0eXBlcywgYXhpb21zLCB2YXJpYWJsZXMsIGNvbWJpbmF0b3JzLCBjb25zdHJ1Y3RvcnMsIHJlbGVhc2VDb250ZXh0KTtcblxuICAgIHJldHVybiBmaWxlQ29udGV4dDtcbiAgfVxufVxuIiwiUmVhY3QuY3JlYXRlRWxlbWVudCJdLCJuYW1lcyI6WyJGaWxlQ29udGV4dCIsInRva2VucyIsIm5vZGUiLCJydWxlcyIsInR5cGVzIiwiYXhpb21zIiwidmFyaWFibGVzIiwiY29tYmluYXRvcnMiLCJjb25zdHJ1Y3RvcnMiLCJyZWxlYXNlQ29udGV4dCIsImdldFRva2VucyIsImdldE5vZGUiLCJnZXRSdWxlcyIsImJ1YmJsZSIsInJlbGVhc2VDb250ZXh0UnVsZXMiLCJwdXNoIiwiZ2V0VHlwZXMiLCJyZWxlYXNlQ29udGV4dFR5cGVzIiwiZ2V0QXhpb21zIiwicmVsZWFzZUNvbnRleHRBeGlvbXMiLCJnZXRMYWJlbHMiLCJsYWJlbHMiLCJyZWR1Y2UiLCJheGlvbSIsImF4aW9tTGFiZWxzIiwiZ2V0VmFyaWFibGVzIiwiZ2V0Q29tYmluYXRvcnMiLCJyZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwicmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMiLCJnZXRSZWxlYXNlQ29udGV4dCIsImdldE1ldGFBc3NlcnRpb25zIiwibWV0YUFzc2VydGlvbnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsInR5cGUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoVHlwZU5hbWUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlTmFtZSIsInJlZmVyZW5jZU5hbWUiLCJsYWJlbCIsInJ1bGUiLCJydWxlTGFiZWxzIiwicnVsZUxhYmVsc0luY2x1ZGVzTGFiZWwiLCJpbmNsdWRlcyIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlTmFtZSIsImF4aW9tTGFiZWxzSW5jbHVkZXNMYWJlbCIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwibmFtZSIsInZhcmlhYmxlIiwibWF0Y2hOYW1lIiwiaXNEZXJpdmVkIiwiZGVyaXZlZCIsImlzTGFiZWxQcmVzZW50IiwibGFiZWxzSW5jbHVkZXNMYWJlbCIsImxhYmVsUHJlc2VudCIsIm1hdGNoTWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb24iLCJtZXRhQXNzZXJ0aW9uTWF0Y2hlcyIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVQcmVzZW50IiwiYWRkVHlwZSIsImFkZFJ1bGUiLCJhZGRBeGlvbSIsImFkZFZhcmlhYmxlIiwiYWRkQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJhZGRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwidHJhY2UiLCJtZXNzYWdlIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwiZmF0YWwiLCJmcm9tUmVsZWFzZUNvbnRleHRBbmRGaWxlUGF0aCIsImZpbGVQYXRoIiwiZmlsZUNvbnRlbnQiLCJnZXRGaWxlQ29udGVudCIsImNvbnRlbnQiLCJ0b2tlbmlzZSIsInBhcnNlIiwicmV3cml0ZU5vZGVzIiwiZmlsZUNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBTXFCQTs7O3FDQUpRO3FCQUVSOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFTixJQUFBLEFBQU1BLDRCQUFOO2FBQU1BLFlBQ1BDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxjQUFjOzhCQURqRlQ7UUFFakIsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLFlBQVksR0FBR0E7UUFDcEIsSUFBSSxDQUFDQyxjQUFjLEdBQUdBOztpQkFWTFQ7O1lBYW5CVSxLQUFBQTttQkFBQUEsU0FBQUEsWUFBWTtnQkFDVixPQUFPLElBQUksQ0FBQ1QsTUFBTTtZQUNwQjs7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
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxldmVscyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHJld3JpdGVOb2RlcyB9IGZyb20gXCJvY2NhbS1ncmFtbWFyLXV0aWxpdGllc1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucywgZ3JlYXRlc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5zXCI7XG5cbmNvbnN0IHsgVFJBQ0VfTEVWRUwsIERFQlVHX0xFVkVMLCBJTkZPX0xFVkVMLCBXQVJOSU5HX0xFVkVMLCBFUlJPUl9MRVZFTCwgRkFUQUxfTEVWRUwgfSA9IGxldmVscztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZUNvbnRleHQge1xuICBjb25zdHJ1Y3RvcihmaWxlUGF0aCwgdG9rZW5zLCBub2RlLCBydWxlcywgdHlwZXMsIGF4aW9tcywgdmFyaWFibGVzLCBjb21iaW5hdG9ycywgY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dCkge1xuICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5jb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMucmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dDtcbiAgfVxuXG4gIGdldEZpbGVQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldFJ1bGVzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBydWxlcyA9IFtcbiAgICAgIC4uLnRoaXMucnVsZXNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRSdWxlcyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0UnVsZXMoKTtcblxuICAgICAgcHVzaChydWxlcywgcmVsZWFzZUNvbnRleHRSdWxlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgZ2V0VHlwZXMoYnViYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgLi4udGhpcy50eXBlc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dFR5cGVzID0gdGhpcy5yZWxlYXNlQ29udGV4dC5nZXRUeXBlcygpO1xuXG4gICAgICBwdXNoKHR5cGVzLCByZWxlYXNlQ29udGV4dFR5cGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBnZXRBeGlvbXMoYnViYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IFtcbiAgICAgIC4uLnRoaXMuYXhpb21zXG4gICAgXTtcblxuICAgIGlmIChidWJibGUpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0QXhpb21zID0gdGhpcy5yZWxlYXNlQ29udGV4dC5nZXRBeGlvbXMoKTtcblxuICAgICAgcHVzaChheGlvbXMsIHJlbGVhc2VDb250ZXh0QXhpb21zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXhpb21zO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIGNvbnN0IGF4aW9tcyA9IHRoaXMuZ2V0QXhpb21zKCksXG4gICAgICAgICAgbGFiZWxzID0gYXhpb21zLnJlZHVjZSgobGFiZWxzLCBheGlvbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXhpb21MYWJlbHMgPSBheGlvbS5nZXRMYWJlbHMoKTtcblxuICAgICAgICAgICAgcHVzaChsYWJlbHMsIGF4aW9tTGFiZWxzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxhYmVscztcbiAgICAgICAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcztcbiAgfVxuXG4gIGdldENvbWJpbmF0b3JzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb21iaW5hdG9ycyA9IFtcbiAgICAgIC4uLnRoaXMuY29tYmluYXRvcnNcbiAgICBdO1xuXG4gICAgaWYgKGJ1YmJsZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRDb21iaW5hdG9ycyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTtcblxuICAgICAgcHVzaChjb21iaW5hdG9ycywgcmVsZWFzZUNvbnRleHRDb21iaW5hdG9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JzO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKGJ1YmJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBbXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yc1xuICAgIF07XG5cbiAgICBpZiAoYnViYmxlKSB7XG4gICAgICBjb25zdCByZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyA9IHRoaXMucmVsZWFzZUNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgICAgIHB1c2goY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9ycztcbiAgfVxuXG4gIGdldFJlbGVhc2VDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnJlbGVhc2VDb250ZXh0O1xuICB9XG5cbiAgZ2V0TWV0YUFzc2VydGlvbnMoKSB7XG4gICAgY29uc3QgbWV0YUFzc2VydGlvbnMgPSBbXTtcblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcygpLFxuICAgICAgICAgIHR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdHlwZS5tYXRjaFR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkge1xuICAgIGNvbnN0IGxhYmVsID0gcmVmZXJlbmNlTmFtZSwgIC8vL1xuICAgICAgICAgIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlTGFiZWxzID0gcnVsZS5nZXRMYWJlbHMoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVMYWJlbHNJbmNsdWRlc0xhYmVsID0gcnVsZUxhYmVscy5pbmNsdWRlcyhsYWJlbCk7XG5cbiAgICAgICAgICAgIGlmIChydWxlTGFiZWxzSW5jbHVkZXNMYWJlbCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBmaW5kQXhpb21CeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkge1xuICAgIGNvbnN0IGxhYmVsID0gcmVmZXJlbmNlTmFtZSwgIC8vL1xuICAgICAgICAgIGF4aW9tcyA9IHRoaXMuZ2V0QXhpb21zKCksXG4gICAgICAgICAgYXhpb20gPSBheGlvbXMuZmluZCgoYXhpb20pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF4aW9tTGFiZWxzID0gYXhpb20uZ2V0TGFiZWxzKCksXG4gICAgICAgICAgICAgICAgICBheGlvbUxhYmVsc0luY2x1ZGVzTGFiZWwgPSBheGlvbUxhYmVscy5pbmNsdWRlcyhsYWJlbCk7XG5cbiAgICAgICAgICAgIGlmIChheGlvbUxhYmVsc0luY2x1ZGVzTGFiZWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMudmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdmFyaWFibGUubWF0Y2hOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgaXNEZXJpdmVkKCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBkZXJpdmVkO1xuICB9XG5cbiAgaXNMYWJlbFByZXNlbnQobGFiZWwpIHtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpLFxuICAgICAgICAgIGxhYmVsc0luY2x1ZGVzTGFiZWwgPSBsYWJlbHMuaW5jbHVkZXMobGFiZWwpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGxhYmVsc0luY2x1ZGVzTGFiZWw7IC8vL1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIG1hdGNoTWV0YUFzc2VydGlvbihtZXRhQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgbWV0YUFzc2VydGlvbk1hdGNoZXMgPSBmYWxzZTtcblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gKHZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBhZGRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7XG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG4gIH1cblxuICBhZGRBeGlvbShheGlvbSkge1xuICAgIHRoaXMuYXhpb21zLnB1c2goYXhpb20pO1xuICB9XG5cbiAgYWRkVmFyaWFibGUodmFyaWFibGUpIHtcbiAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZENvbWJpbmF0b3IoY29tYmluYXRvcikge1xuICAgIHRoaXMuY29tYmluYXRvcnMucHVzaChjb21iaW5hdG9yKTtcbiAgfVxuXG4gIGFkZENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMucHVzaChjb25zdHJ1Y3Rvcik7XG4gIH1cblxuICB0cmFjZShtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIFRSQUNFX0xFVkVMLCBtZXNzYWdlKTsgfVxuXG4gIGRlYnVnKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5sb2cobm9kZSwgREVCVUdfTEVWRUwsIG1lc3NhZ2UpOyB9XG5cbiAgaW5mbyhtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIElORk9fTEVWRUwsIG1lc3NhZ2UpOyB9XG5cbiAgd2FybmluZyhtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIFdBUk5JTkdfTEVWRUwsIG1lc3NhZ2UpOyB9XG5cbiAgZXJyb3IobWVzc2FnZSwgbm9kZSkgeyB0aGlzLmxvZyhub2RlLCBFUlJPUl9MRVZFTCwgbWVzc2FnZSk7IH1cblxuICBmYXRhbChtZXNzYWdlLCBub2RlKSB7IHRoaXMubG9nKG5vZGUsIEZBVEFMX0xFVkVMLCBtZXNzYWdlKTsgfVxuXG4gIGxvZyhub2RlLCBsZXZlbCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGxlYXN0TGluZUluZGV4ID0gbGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0aGlzLnRva2VucyksXG4gICAgICAgICAgZ3JlYXRlc3RMaW5lSW5kZXggPSBncmVhdGVzdExpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRoaXMudG9rZW5zKTtcblxuICAgIHRoaXMucmVsZWFzZUNvbnRleHQubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmZpbGVQYXRoLCBsZWFzdExpbmVJbmRleCwgZ3JlYXRlc3RMaW5lSW5kZXgpO1xuICB9XG5cbiAgc3RhdGljIGZyb21SZWxlYXNlQ29udGV4dEFuZEZpbGVQYXRoKHJlbGVhc2VDb250ZXh0LCBmaWxlUGF0aCkge1xuICAgIGNvbnN0IGZpbGUgPSByZWxlYXNlQ29udGV4dC5nZXRGaWxlKGZpbGVQYXRoKSxcbiAgICAgICAgICBjb250ZW50ID0gZmlsZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdG9rZW5zID0gcmVsZWFzZUNvbnRleHQudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgICAgbm9kZSA9IHJlbGVhc2VDb250ZXh0LnBhcnNlKHRva2Vucyk7XG5cbiAgICByZXdyaXRlTm9kZXMobm9kZSk7XG5cbiAgICBjb25zdCBydWxlcyA9IFtdLFxuICAgICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBbXSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBbXSxcbiAgICAgICAgICBmaWxlQ29udGV4dCA9IG5ldyBGaWxlQ29udGV4dChmaWxlUGF0aCwgdG9rZW5zLCBub2RlLCBydWxlcywgdHlwZXMsIGF4aW9tcywgdmFyaWFibGVzLCBjb21iaW5hdG9ycywgY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dCk7XG5cbiAgICByZXR1cm4gZmlsZUNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiRmlsZUNvbnRleHQiLCJUUkFDRV9MRVZFTCIsImxldmVscyIsIkRFQlVHX0xFVkVMIiwiSU5GT19MRVZFTCIsIldBUk5JTkdfTEVWRUwiLCJFUlJPUl9MRVZFTCIsIkZBVEFMX0xFVkVMIiwiZmlsZVBhdGgiLCJ0b2tlbnMiLCJub2RlIiwicnVsZXMiLCJ0eXBlcyIsImF4aW9tcyIsInZhcmlhYmxlcyIsImNvbWJpbmF0b3JzIiwiY29uc3RydWN0b3JzIiwicmVsZWFzZUNvbnRleHQiLCJnZXRGaWxlUGF0aCIsImdldFRva2VucyIsImdldE5vZGUiLCJnZXRSdWxlcyIsImJ1YmJsZSIsInJlbGVhc2VDb250ZXh0UnVsZXMiLCJwdXNoIiwiZ2V0VHlwZXMiLCJyZWxlYXNlQ29udGV4dFR5cGVzIiwiZ2V0QXhpb21zIiwicmVsZWFzZUNvbnRleHRBeGlvbXMiLCJnZXRMYWJlbHMiLCJsYWJlbHMiLCJyZWR1Y2UiLCJheGlvbSIsImF4aW9tTGFiZWxzIiwiZ2V0VmFyaWFibGVzIiwiZ2V0Q29tYmluYXRvcnMiLCJyZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwicmVsZWFzZUNvbnRleHRDb25zdHJ1Y3RvcnMiLCJnZXRSZWxlYXNlQ29udGV4dCIsImdldE1ldGFBc3NlcnRpb25zIiwibWV0YUFzc2VydGlvbnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsInR5cGUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoVHlwZU5hbWUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlTmFtZSIsInJlZmVyZW5jZU5hbWUiLCJsYWJlbCIsInJ1bGUiLCJydWxlTGFiZWxzIiwicnVsZUxhYmVsc0luY2x1ZGVzTGFiZWwiLCJpbmNsdWRlcyIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlTmFtZSIsImF4aW9tTGFiZWxzSW5jbHVkZXNMYWJlbCIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwibmFtZSIsInZhcmlhYmxlIiwibWF0Y2hOYW1lIiwiaXNEZXJpdmVkIiwiZGVyaXZlZCIsImlzTGFiZWxQcmVzZW50IiwibGFiZWxzSW5jbHVkZXNMYWJlbCIsImxhYmVsUHJlc2VudCIsIm1hdGNoTWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb24iLCJtZXRhQXNzZXJ0aW9uTWF0Y2hlcyIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVQcmVzZW50IiwiYWRkVHlwZSIsImFkZFJ1bGUiLCJhZGRBeGlvbSIsImFkZFZhcmlhYmxlIiwiYWRkQ29tYmluYXRvciIsImNvbWJpbmF0b3IiLCJhZGRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwidHJhY2UiLCJtZXNzYWdlIiwibG9nIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwiZmF0YWwiLCJsZXZlbCIsImxlYXN0TGluZUluZGV4IiwibGVhc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyIsImdyZWF0ZXN0TGluZUluZGV4IiwiZ3JlYXRlc3RMaW5lSW5kZXhGcm9tTm9kZUFuZFRva2VucyIsImZyb21SZWxlYXNlQ29udGV4dEFuZEZpbGVQYXRoIiwiZmlsZSIsImdldEZpbGUiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VuaXNlIiwicGFyc2UiLCJyZXdyaXRlTm9kZXMiLCJmaWxlQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFVcUJBOzs7eUJBUkU7cUNBQ007cUJBRVI7c0JBQytEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEYsSUFBUUMsY0FBa0ZDLGlCQUFNLENBQXhGRCxhQUFhRSxjQUFxRUQsaUJBQU0sQ0FBM0VDLGFBQWFDLGFBQXdERixpQkFBTSxDQUE5REUsWUFBWUMsZ0JBQTRDSCxpQkFBTSxDQUFsREcsZUFBZUMsY0FBNkJKLGlCQUFNLENBQW5DSSxhQUFhQyxjQUFnQkwsaUJBQU0sQ0FBdEJLO0FBRTNELElBQUEsQUFBTVAsNEJBQU47YUFBTUEsWUFDUFEsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRUMsY0FBYzs4QkFEM0ZqQjtRQUVqQixJQUFJLENBQUNRLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FB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
@@ -183,38 +183,38 @@ var MetaproofContext = /*#__PURE__*/ function() {
183
183
  },
184
184
  {
185
185
  key: "trace",
186
- value: function trace(message) {
187
- this.context.trace(message);
186
+ value: function trace(message, node) {
187
+ this.context.trace(message, node);
188
188
  }
189
189
  },
190
190
  {
191
191
  key: "debug",
192
- value: function debug(message) {
193
- this.context.debug(message);
192
+ value: function debug(message, node) {
193
+ this.context.debug(message, node);
194
194
  }
195
195
  },
196
196
  {
197
197
  key: "info",
198
- value: function info(message) {
199
- this.context.info(message);
198
+ value: function info(message, node) {
199
+ this.context.info(message, node);
200
200
  }
201
201
  },
202
202
  {
203
203
  key: "warning",
204
- value: function warning(message) {
205
- this.context.warning(message);
204
+ value: function warning(message, node) {
205
+ this.context.warning(message, node);
206
206
  }
207
207
  },
208
208
  {
209
209
  key: "error",
210
- value: function error(message) {
211
- this.context.error(message);
210
+ value: function error(message, node) {
211
+ this.context.error(message, node);
212
212
  }
213
213
  },
214
214
  {
215
215
  key: "fatal",
216
- value: function fatal(message) {
217
- this.context.fatal(message);
216
+ value: function fatal(message, node) {
217
+ this.context.fatal(message, node);
218
218
  }
219
219
  }
220
220
  ], [
@@ -229,4 +229,4 @@ var MetaproofContext = /*#__PURE__*/ function() {
229
229
  return MetaproofContext;
230
230
  }();
231
231
 
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21ldGFwcm9vZi5qcyIsIjw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YXByb29mQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWQsIG1ldGFBc3NlcnRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMgPSBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVkO1xuICB9XG5cbiAgZ2V0TWV0YUFzc2VydGlvbnMoKSB7XG4gICAgbGV0IG1ldGFBc3NlcnRpb25zID0gdGhpcy5jb250ZXh0LmdldE1ldGFBc3NlcnRpb25zKCk7XG5cbiAgICBtZXRhQXNzZXJ0aW9ucyA9IFtcbiAgICAgIC4uLm1ldGFBc3NlcnRpb25zLFxuICAgICAgLi4udGhpcy5tZXRhQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSdWxlcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRSdWxlcygpOyB9XG5cbiAgZ2V0VHlwZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VHlwZXMoKTsgfVxuXG4gIGdldEF4aW9tcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKTsgfVxuXG4gIGdldENvbWJpbmF0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCk7IH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7IH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpOyB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpOyB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50KGxhYmVsKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNMYWJlbFByZXNlbnQobGFiZWwpOyB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSk7IH1cblxuICBtYXRjaE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIGxldCBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcblxuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25CID0gbWV0YUFzc2VydGlvbjsgLy8vXG5cbiAgICBtZXRhQXNzZXJ0aW9uTWF0Y2hlcyA9IHRoaXMubWV0YUFzc2VydGlvbnMuc29tZSgobWV0YUFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YUFzc2VydGlvbkEgPSBtZXRhQXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIG1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uQS5tYXRjaChtZXRhQXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFtZXRhQXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgbWV0YUFzc2VydGlvbk1hdGNoZXMgPSB0aGlzLmNvbnRleHQubWF0Y2hNZXRhQXNzZXJ0aW9uKG1ldGFBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpOyB9XG5cbiAgc2V0RGVyaXZlZChkZXJpdmVkKSB7XG4gICAgdGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcbiAgfVxuXG4gIGFkZFJ1bGUocnVsZSkgeyB0aGlzLmNvbnRleHQuYWRkUnVsZShydWxlKTsgfVxuXG4gIGFkZE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMucHVzaChtZXRhQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIHRyYWNlKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LnRyYWNlKG1lc3NhZ2UpOyB9XG5cbiAgZGVidWcobWVzc2FnZSkgeyB0aGlzLmNvbnRleHQuZGVidWcobWVzc2FnZSk7IH1cblxuICBpbmZvKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LmluZm8obWVzc2FnZSk7IH1cblxuICB3YXJuaW5nKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0Lndhcm5pbmcobWVzc2FnZSk7IH1cblxuICBlcnJvcihtZXNzYWdlKSB7IHRoaXMuY29udGV4dC5lcnJvcihtZXNzYWdlKTsgfVxuXG4gIGZhdGFsKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LmZhdGFsKG1lc3NhZ2UpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZXh0KGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gZmFsc2UsXG4gICAgICAgICAgbWV0YUFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhcHJvb2ZDb250ZXh0ID0gbmV3IE1ldGFwcm9vZkNvbnRleHQoY29udGV4dCwgZGVyaXZlZCwgbWV0YUFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIG1ldGFwcm9vZkNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiTWV0YXByb29mQ29udGV4dCIsImNvbnRleHQiLCJkZXJpdmVkIiwibWV0YUFzc2VydGlvbnMiLCJnZXRDb250ZXh0IiwiaXNEZXJpdmVkIiwiZ2V0TWV0YUFzc2VydGlvbnMiLCJnZXRSdWxlcyIsImdldFR5cGVzIiwiZ2V0QXhpb21zIiwiZ2V0Q29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lIiwicmVmZXJlbmNlTmFtZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwiaXNMYWJlbFByZXNlbnQiLCJsYWJlbCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwibWF0Y2hNZXRhQXNzZXJ0aW9uIiwibWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb25NYXRjaGVzIiwibWV0YUFzc2VydGlvbkIiLCJzb21lIiwibWV0YUFzc2VydGlvbkEiLCJtYXRjaGVzIiwibWF0Y2giLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwic2V0RGVyaXZlZCIsImFkZFJ1bGUiLCJydWxlIiwiYWRkTWV0YUFzc2VydGlvbiIsInB1c2giLCJ0cmFjZSIsIm1lc3NhZ2UiLCJkZWJ1ZyIsImluZm8iLCJ3YXJuaW5nIiwiZXJyb3IiLCJmYXRhbCIsImZyb21Db250ZXh0IiwibWV0YXByb29mQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLElBQUEsQUFBTUEsaUNBQU47YUFBTUEsaUJBQ1BDLE9BQU8sRUFBRUMsT0FB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
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L21ldGFwcm9vZi5qcyIsIjw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0YXByb29mQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWQsIG1ldGFBc3NlcnRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMgPSBtZXRhQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVkO1xuICB9XG5cbiAgZ2V0TWV0YUFzc2VydGlvbnMoKSB7XG4gICAgbGV0IG1ldGFBc3NlcnRpb25zID0gdGhpcy5jb250ZXh0LmdldE1ldGFBc3NlcnRpb25zKCk7XG5cbiAgICBtZXRhQXNzZXJ0aW9ucyA9IFtcbiAgICAgIC4uLm1ldGFBc3NlcnRpb25zLFxuICAgICAgLi4udGhpcy5tZXRhQXNzZXJ0aW9uc1xuICAgIF07XG5cbiAgICByZXR1cm4gbWV0YUFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSdWxlcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRSdWxlcygpOyB9XG5cbiAgZ2V0VHlwZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VHlwZXMoKTsgfVxuXG4gIGdldEF4aW9tcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRBeGlvbXMoKTsgfVxuXG4gIGdldENvbWJpbmF0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCk7IH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7IH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpOyB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUocmVmZXJlbmNlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpOyB9XG5cbiAgZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50KGxhYmVsKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNMYWJlbFByZXNlbnQobGFiZWwpOyB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSk7IH1cblxuICBtYXRjaE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIGxldCBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcblxuICAgIGNvbnN0IG1ldGFBc3NlcnRpb25CID0gbWV0YUFzc2VydGlvbjsgLy8vXG5cbiAgICBtZXRhQXNzZXJ0aW9uTWF0Y2hlcyA9IHRoaXMubWV0YUFzc2VydGlvbnMuc29tZSgobWV0YUFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgbWV0YUFzc2VydGlvbkEgPSBtZXRhQXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICAgIG1hdGNoZXMgPSBtZXRhQXNzZXJ0aW9uQS5tYXRjaChtZXRhQXNzZXJ0aW9uQik7XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFtZXRhQXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgbWV0YUFzc2VydGlvbk1hdGNoZXMgPSB0aGlzLmNvbnRleHQubWF0Y2hNZXRhQXNzZXJ0aW9uKG1ldGFBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhQXNzZXJ0aW9uTWF0Y2hlcztcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpOyB9XG5cbiAgc2V0RGVyaXZlZChkZXJpdmVkKSB7XG4gICAgdGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcbiAgfVxuXG4gIGFkZFJ1bGUocnVsZSkgeyB0aGlzLmNvbnRleHQuYWRkUnVsZShydWxlKTsgfVxuXG4gIGFkZE1ldGFBc3NlcnRpb24obWV0YUFzc2VydGlvbikge1xuICAgIHRoaXMubWV0YUFzc2VydGlvbnMucHVzaChtZXRhQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIHRyYWNlKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0LnRyYWNlKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgZGVidWcobWVzc2FnZSwgbm9kZSkgeyB0aGlzLmNvbnRleHQuZGVidWcobWVzc2FnZSwgbm9kZSk7IH1cblxuICBpbmZvKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0LmluZm8obWVzc2FnZSwgbm9kZSk7IH1cblxuICB3YXJuaW5nKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0Lndhcm5pbmcobWVzc2FnZSwgbm9kZSk7IH1cblxuICBlcnJvcihtZXNzYWdlLCBub2RlKSB7IHRoaXMuY29udGV4dC5lcnJvcihtZXNzYWdlLCBub2RlKTsgfVxuXG4gIGZhdGFsKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0LmZhdGFsKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZXh0KGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gZmFsc2UsXG4gICAgICAgICAgbWV0YUFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhcHJvb2ZDb250ZXh0ID0gbmV3IE1ldGFwcm9vZkNvbnRleHQoY29udGV4dCwgZGVyaXZlZCwgbWV0YUFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIG1ldGFwcm9vZkNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiTWV0YXByb29mQ29udGV4dCIsImNvbnRleHQiLCJkZXJpdmVkIiwibWV0YUFzc2VydGlvbnMiLCJnZXRDb250ZXh0IiwiaXNEZXJpdmVkIiwiZ2V0TWV0YUFzc2VydGlvbnMiLCJnZXRSdWxlcyIsImdldFR5cGVzIiwiZ2V0QXhpb21zIiwiZ2V0Q29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lIiwicmVmZXJlbmNlTmFtZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVOYW1lIiwiaXNMYWJlbFByZXNlbnQiLCJsYWJlbCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwibWF0Y2hNZXRhQXNzZXJ0aW9uIiwibWV0YUFzc2VydGlvbiIsIm1ldGFBc3NlcnRpb25NYXRjaGVzIiwibWV0YUFzc2VydGlvbkIiLCJzb21lIiwibWV0YUFzc2VydGlvbkEiLCJtYXRjaGVzIiwibWF0Y2giLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwic2V0RGVyaXZlZCIsImFkZFJ1bGUiLCJydWxlIiwiYWRkTWV0YUFzc2VydGlvbiIsInB1c2giLCJ0cmFjZSIsIm1lc3NhZ2UiLCJub2RlIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwiZmF0YWwiLCJmcm9tQ29udGV4dCIsIm1ldGFwcm9vZkNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBRXFCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -162,38 +162,38 @@ var ProofContext = /*#__PURE__*/ function() {
162
162
  },
163
163
  {
164
164
  key: "trace",
165
- value: function trace(message) {
166
- this.context.trace(message);
165
+ value: function trace(message, node) {
166
+ this.context.trace(message, node);
167
167
  }
168
168
  },
169
169
  {
170
170
  key: "debug",
171
- value: function debug(message) {
172
- this.context.debug(message);
171
+ value: function debug(message, node) {
172
+ this.context.debug(message, node);
173
173
  }
174
174
  },
175
175
  {
176
176
  key: "info",
177
- value: function info(message) {
178
- this.context.info(message);
177
+ value: function info(message, node) {
178
+ this.context.info(message, node);
179
179
  }
180
180
  },
181
181
  {
182
182
  key: "warning",
183
- value: function warning(message) {
184
- this.context.warning(message);
183
+ value: function warning(message, node) {
184
+ this.context.warning(message, node);
185
185
  }
186
186
  },
187
187
  {
188
188
  key: "error",
189
- value: function error(message) {
190
- this.context.error(message);
189
+ value: function error(message, node) {
190
+ this.context.error(message, node);
191
191
  }
192
192
  },
193
193
  {
194
194
  key: "fatal",
195
- value: function fatal(message) {
196
- this.context.fatal(message);
195
+ value: function fatal(message, node) {
196
+ this.context.fatal(message, node);
197
197
  }
198
198
  }
199
199
  ], [
@@ -208,4 +208,4 @@ var ProofContext = /*#__PURE__*/ function() {
208
208
  return ProofContext;
209
209
  }();
210
210
 
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3Byb29mLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9vZkNvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBkZXJpdmVkLCB2YXJpYWJsZXMsIHN0YXRlbWVudE5vZGVzKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICAgIHRoaXMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuICAgIHRoaXMuc3RhdGVtZW50Tm9kZXMgPSBzdGF0ZW1lbnROb2RlcztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVkO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudE5vZGVzO1xuICB9XG5cbiAgZ2V0UnVsZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0UnVsZXMoKTsgfVxuXG4gIGdldFR5cGVzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFR5cGVzKCk7IH1cblxuICBnZXRBeGlvbXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0QXhpb21zKCk7IH1cblxuICBnZXRDb21iaW5hdG9ycygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDb21iaW5hdG9ycygpOyB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbnN0cnVjdG9ycygpOyB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKTsgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlTmFtZShyZWZlcmVuY2VOYW1lKTsgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMudmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdmFyaWFibGUubWF0Y2hOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgaXNMYWJlbFByZXNlbnQobGFiZWwpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc0xhYmVsUHJlc2VudChsYWJlbCk7IH1cblxuICBpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKTsgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gKHZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBzZXREZXJpdmVkKGRlcml2ZWQpIHtcbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgdGhpcy5zdGF0ZW1lbnROb2Rlcy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICB9XG5cbiAgYWRkQXhpb20oYXhpb20pIHsgdGhpcy5jb250ZXh0LmFkZEF4aW9tKGF4aW9tKTsgfVxuXG4gIGFkZFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICB0aGlzLnN0YXRlbWVudE5vZGVzLnB1c2goc3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICB0cmFjZShtZXNzYWdlKSB7IHRoaXMuY29udGV4dC50cmFjZShtZXNzYWdlKTsgfVxuXG4gIGRlYnVnKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LmRlYnVnKG1lc3NhZ2UpOyB9XG5cbiAgaW5mbyhtZXNzYWdlKSB7IHRoaXMuY29udGV4dC5pbmZvKG1lc3NhZ2UpOyB9XG5cbiAgd2FybmluZyhtZXNzYWdlKSB7IHRoaXMuY29udGV4dC53YXJuaW5nKG1lc3NhZ2UpOyB9XG5cbiAgZXJyb3IobWVzc2FnZSkgeyB0aGlzLmNvbnRleHQuZXJyb3IobWVzc2FnZSk7IH1cblxuICBmYXRhbChtZXNzYWdlKSB7IHRoaXMuY29udGV4dC5mYXRhbChtZXNzYWdlKTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGZhbHNlLFxuICAgICAgICAgIHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGVzID0gW10sXG4gICAgICAgICAgcHJvb2ZDb250ZXh0ID0gbmV3IFByb29mQ29udGV4dChjb250ZXh0LCBkZXJpdmVkLCB2YXJpYWJsZXMsIHN0YXRlbWVudE5vZGVzKTtcblxuICAgIHJldHVybiBwcm9vZkNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiUHJvb2ZDb250ZXh0IiwiY29udGV4dCIsImRlcml2ZWQiLCJ2YXJpYWJsZXMiLCJzdGF0ZW1lbnROb2RlcyIsImdldENvbnRleHQiLCJpc0Rlcml2ZWQiLCJnZXRWYXJpYWJsZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsImdldFJ1bGVzIiwiZ2V0VHlwZXMiLCJnZXRBeGlvbXMiLCJnZXRDb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwiZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUiLCJyZWZlcmVuY2VOYW1lIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWUiLCJuYW1lIiwidmFyaWFibGUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoTmFtZSIsImlzTGFiZWxQcmVzZW50IiwibGFiZWwiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUiLCJ2YXJpYWJsZVByZXNlbnQiLCJzZXREZXJpdmVkIiwicG9wIiwiYWRkQXhpb20iLCJheGlvbSIsImFkZFZhcmlhYmxlIiwicHVzaCIsImFkZFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwidHJhY2UiLCJtZXNzYWdlIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwiZmF0YWwiLCJmcm9tQ29udGV4dCIsInByb29mQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sSUFBQSxBQUFNQSw2QkFBTjthQUFNQSxhQUNQQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsU0FBUyxFQUFFQyxjQUFjOzhCQURwQ0o7UUFFakIsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxD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
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3Byb29mLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9vZkNvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBkZXJpdmVkLCB2YXJpYWJsZXMsIHN0YXRlbWVudE5vZGVzKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICAgIHRoaXMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuICAgIHRoaXMuc3RhdGVtZW50Tm9kZXMgPSBzdGF0ZW1lbnROb2RlcztcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGlzRGVyaXZlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVkO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudE5vZGVzO1xuICB9XG5cbiAgZ2V0UnVsZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0UnVsZXMoKTsgfVxuXG4gIGdldFR5cGVzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFR5cGVzKCk7IH1cblxuICBnZXRBeGlvbXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0QXhpb21zKCk7IH1cblxuICBnZXRDb21iaW5hdG9ycygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDb21iaW5hdG9ycygpOyB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbnN0cnVjdG9ycygpOyB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKTsgfVxuXG4gIGZpbmRSdWxlQnlSZWZlcmVuY2VOYW1lKHJlZmVyZW5jZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlTmFtZShyZWZlcmVuY2VOYW1lKTsgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMudmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdmFyaWFibGUubWF0Y2hOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTsgIC8vL1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgaXNMYWJlbFByZXNlbnQobGFiZWwpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc0xhYmVsUHJlc2VudChsYWJlbCk7IH1cblxuICBpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKTsgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gKHZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBzZXREZXJpdmVkKGRlcml2ZWQpIHtcbiAgICBpZiAoZGVyaXZlZCkge1xuICAgICAgdGhpcy5zdGF0ZW1lbnROb2Rlcy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xuICB9XG5cbiAgYWRkQXhpb20oYXhpb20pIHsgdGhpcy5jb250ZXh0LmFkZEF4aW9tKGF4aW9tKTsgfVxuXG4gIGFkZFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICB0aGlzLnN0YXRlbWVudE5vZGVzLnB1c2goc3RhdGVtZW50Tm9kZSk7XG4gIH1cblxuICB0cmFjZShtZXNzYWdlLCBub2RlKSB7IHRoaXMuY29udGV4dC50cmFjZShtZXNzYWdlLCBub2RlKTsgfVxuXG4gIGRlYnVnKG1lc3NhZ2UsIG5vZGUpIHsgdGhpcy5jb250ZXh0LmRlYnVnKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgaW5mbyhtZXNzYWdlLCBub2RlKSB7IHRoaXMuY29udGV4dC5pbmZvKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgd2FybmluZyhtZXNzYWdlLCBub2RlKSB7IHRoaXMuY29udGV4dC53YXJuaW5nKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgZXJyb3IobWVzc2FnZSwgbm9kZSkgeyB0aGlzLmNvbnRleHQuZXJyb3IobWVzc2FnZSwgbm9kZSk7IH1cblxuICBmYXRhbChtZXNzYWdlLCBub2RlKSB7IHRoaXMuY29udGV4dC5mYXRhbChtZXNzYWdlLCBub2RlKTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGZhbHNlLFxuICAgICAgICAgIHZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGVzID0gW10sXG4gICAgICAgICAgcHJvb2ZDb250ZXh0ID0gbmV3IFByb29mQ29udGV4dChjb250ZXh0LCBkZXJpdmVkLCB2YXJpYWJsZXMsIHN0YXRlbWVudE5vZGVzKTtcblxuICAgIHJldHVybiBwcm9vZkNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiUHJvb2ZDb250ZXh0IiwiY29udGV4dCIsImRlcml2ZWQiLCJ2YXJpYWJsZXMiLCJzdGF0ZW1lbnROb2RlcyIsImdldENvbnRleHQiLCJpc0Rlcml2ZWQiLCJnZXRWYXJpYWJsZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsImdldFJ1bGVzIiwiZ2V0VHlwZXMiLCJnZXRBeGlvbXMiLCJnZXRDb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwiZmluZFJ1bGVCeVJlZmVyZW5jZU5hbWUiLCJyZWZlcmVuY2VOYW1lIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWUiLCJuYW1lIiwidmFyaWFibGUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoTmFtZSIsImlzTGFiZWxQcmVzZW50IiwibGFiZWwiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUiLCJ2YXJpYWJsZVByZXNlbnQiLCJzZXREZXJpdmVkIiwicG9wIiwiYWRkQXhpb20iLCJheGlvbSIsImFkZFZhcmlhYmxlIiwicHVzaCIsImFkZFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwidHJhY2UiLCJtZXNzYWdlIiwibm9kZSIsImRlYnVnIiwiaW5mbyIsIndhcm5pbmciLCJlcnJvciIsImZhdGFsIiwiZnJvbUNvbnRleHQiLCJwcm9vZkNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBRXFCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLElBQUEsQUFBTUEsNkJBQU47YUFBTUEsYUFDUEMsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLFNBQVMsRUFBRUMs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