occam-nominal 1.0.138 → 1.0.139

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 (35) hide show
  1. package/lib/element/nominalProcedureCall.js +114 -0
  2. package/lib/element/parameter.js +6 -5
  3. package/lib/element/proofAssertion/premise.js +26 -26
  4. package/lib/element/proofAssertion/supposition.js +27 -27
  5. package/lib/element/substitution.js +2 -7
  6. package/lib/node/nominalProcedureCall.js +31 -0
  7. package/lib/node/proofAssertion/premise.js +4 -4
  8. package/lib/node/proofAssertion/supposition.js +4 -4
  9. package/lib/nonTerminalNodeMap.js +3 -3
  10. package/lib/preamble.js +2 -2
  11. package/lib/process/instantiate.js +8 -8
  12. package/lib/ruleNames.js +5 -5
  13. package/lib/utilities/context.js +3 -3
  14. package/lib/utilities/element.js +46 -46
  15. package/lib/utilities/json.js +18 -18
  16. package/lib/utilities/string.js +8 -8
  17. package/package.json +1 -1
  18. package/src/element/{procedureCall.js → nominalProcedureCall.js} +29 -33
  19. package/src/element/parameter.js +6 -4
  20. package/src/element/proofAssertion/premise.js +26 -26
  21. package/src/element/proofAssertion/supposition.js +27 -27
  22. package/src/element/substitution.js +1 -11
  23. package/src/node/{procedureCall.js → nominalProcedureCall.js} +2 -2
  24. package/src/node/proofAssertion/premise.js +5 -5
  25. package/src/node/proofAssertion/supposition.js +5 -5
  26. package/src/nonTerminalNodeMap.js +3 -3
  27. package/src/preamble.js +1 -1
  28. package/src/process/instantiate.js +4 -4
  29. package/src/ruleNames.js +1 -1
  30. package/src/utilities/context.js +2 -2
  31. package/src/utilities/element.js +56 -56
  32. package/src/utilities/json.js +16 -16
  33. package/src/utilities/string.js +8 -8
  34. package/lib/element/procedureCall.js +0 -116
  35. package/lib/node/procedureCall.js +0 -31
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _default;
9
+ }
10
+ });
11
+ const _occamlanguages = require("occam-languages");
12
+ const _elements = require("../elements");
13
+ const _context = require("../utilities/context");
14
+ const _instantiate = require("../process/instantiate");
15
+ const _breakPoint = require("../utilities/breakPoint");
16
+ const _element = require("../utilities/element");
17
+ const _default = (0, _elements.define)(class NominalProcedureCall extends _occamlanguages.Element {
18
+ constructor(context1, string, node, breakPoint, parameters, procedureReference){
19
+ super(context1, string, node, breakPoint);
20
+ this.parameters = parameters;
21
+ this.procedureReference = procedureReference;
22
+ }
23
+ getParameters() {
24
+ return this.parameters;
25
+ }
26
+ getProcedureReference() {
27
+ return this.procedureReference;
28
+ }
29
+ getNominalProcedureCallNode() {
30
+ const node = this.getNode(), nominalProcedureCallNode = node;
31
+ return nominalProcedureCallNode;
32
+ }
33
+ getProcedureName() {
34
+ return this.procedureReference.getProcedureName();
35
+ }
36
+ findNodes() {
37
+ const substitutions = context.getSubstitutions(), nodes = this.parameters.map((parameter)=>{
38
+ const node = parameter.findNode(substitutions);
39
+ return node;
40
+ });
41
+ return nodes;
42
+ }
43
+ validate(context1) {
44
+ let validates = false;
45
+ const nominalProcedureCallString = this.getString(); ///
46
+ context1.trace(`Validating the '${nominalProcedureCallString}' nominal procedure call...`);
47
+ const procedureName = this.getProcedureName(), procedure = context1.findProcedureByProcedureName(procedureName);
48
+ if (procedure !== null) {
49
+ const procedureBoolean = procedure.isBoolean();
50
+ if (procedureBoolean) {
51
+ validates = true;
52
+ } else {
53
+ context1.debug(`The '${nominalProcedureCallString}' procedure is not boolean.`);
54
+ }
55
+ } else {
56
+ context1.debug(`The '${nominalProcedureCallString}' procedure is not present.`);
57
+ }
58
+ if (validates) {
59
+ context1.debug(`...validated the '${nominalProcedureCallString}' nominal procedure call.`);
60
+ }
61
+ return validates;
62
+ }
63
+ async unifyIndependently(context1) {
64
+ let unifiesIndependently = false;
65
+ const nominalProcedureCallString = this.getString(); ///
66
+ context1.trace(`Unifying the '${nominalProcedureCallString}' nominal procedure call independently...`);
67
+ const procedureName = this.getProcedureName(), procedure = context1.findProcedureByProcedureName(procedureName), nodes = this.findNodes();
68
+ let term = null;
69
+ try {
70
+ term = await (0, _context.evaluate)(procedure, nodes, context1);
71
+ } catch (exception) {
72
+ const message = exception.getMessage();
73
+ context1.info(message);
74
+ }
75
+ if (term !== null) {
76
+ const boolean = term.isBoolean();
77
+ if (!boolean) {
78
+ context1.info(`The '${nominalProcedureCallString}' nominal procedure call did not return a boolean.`);
79
+ } else {
80
+ const primitiveValue = term.getPrimitiveValue();
81
+ if (primitiveValue) {
82
+ unifiesIndependently = true;
83
+ }
84
+ }
85
+ }
86
+ if (unifiesIndependently) {
87
+ context1.debug(`...unified the '${nominalProcedureCallString}' nominal procedure call independently.`);
88
+ }
89
+ return unifiesIndependently;
90
+ }
91
+ static name = "NominalProcedureCall";
92
+ toJSON() {
93
+ const string = this.getString();
94
+ let breakPoint;
95
+ breakPoint = this.getBreakPoint();
96
+ const breakPointJSON = (0, _breakPoint.breakPointToBreakPointJSON)(breakPoint);
97
+ breakPoint = breakPointJSON; ///
98
+ const json = {
99
+ string,
100
+ breakPoint
101
+ };
102
+ return json;
103
+ }
104
+ static fromJSON(json, context1) {
105
+ return (0, _context.instantiate)((context1)=>{
106
+ const { string } = json, nominalProcedureCallNode = (0, _instantiate.instantiateNominalProcedureCall)(string, context1), node = nominalProcedureCallNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), parameters = (0, _element.parametersFromNominalProcedureCallNode)(json, context1), procedureReference = (0, _element.procedureReferenceFromNominalProcedureCallNode)(json, context1);
107
+ context1 = null;
108
+ const nominalProcedureCall = new NominalProcedureCall(context1, string, node, breakPoint, parameters, procedureReference);
109
+ return nominalProcedureCall;
110
+ }, context1);
111
+ }
112
+ });
113
+
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L25vbWluYWxQcm9jZWR1cmVDYWxsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV2YWx1YXRlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVOb21pbmFsUHJvY2VkdXJlQ2FsbCB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmVha1BvaW50XCI7XG5pbXBvcnQgeyBwYXJhbWV0ZXJzRnJvbU5vbWluYWxQcm9jZWR1cmVDYWxsTm9kZSwgcHJvY2VkdXJlUmVmZXJlbmNlRnJvbU5vbWluYWxQcm9jZWR1cmVDYWxsTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgTm9taW5hbFByb2NlZHVyZUNhbGwgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycztcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBnZXROb21pbmFsUHJvY2VkdXJlQ2FsbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIG5vbWluYWxQcm9jZWR1cmVDYWxsTm9kZSA9IG5vZGU7XG5cbiAgICByZXR1cm4gbm9taW5hbFByb2NlZHVyZUNhbGxOb2RlO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlTmFtZSgpIHsgcmV0dXJuIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlLmdldFByb2NlZHVyZU5hbWUoKTsgfVxuXG4gIGZpbmROb2RlcygpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbm9kZXMgPSB0aGlzLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwYXJhbWV0ZXIuZmluZE5vZGUoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vbWluYWxQcm9jZWR1cmVDYWxsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtub21pbmFsUHJvY2VkdXJlQ2FsbFN0cmluZ30nIG5vbWluYWwgcHJvY2VkdXJlIGNhbGwuLi5gKTtcblxuICAgIGNvbnN0IHByb2NlZHVyZU5hbWUgPSB0aGlzLmdldFByb2NlZHVyZU5hbWUoKSxcbiAgICAgICAgICBwcm9jZWR1cmUgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSk7XG5cbiAgICBpZiAocHJvY2VkdXJlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVCb29sZWFuID0gcHJvY2VkdXJlLmlzQm9vbGVhbigpO1xuXG4gICAgICBpZiAocHJvY2VkdXJlQm9vbGVhbikge1xuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke25vbWluYWxQcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGlzIG5vdCBib29sZWFuLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bm9taW5hbFByb2NlZHVyZUNhbGxTdHJpbmd9JyBwcm9jZWR1cmUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtub21pbmFsUHJvY2VkdXJlQ2FsbFN0cmluZ30nIG5vbWluYWwgcHJvY2VkdXJlIGNhbGwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBub21pbmFsUHJvY2VkdXJlQ2FsbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke25vbWluYWxQcm9jZWR1cmVDYWxsU3RyaW5nfScgbm9taW5hbCBwcm9jZWR1cmUgY2FsbCBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpLFxuICAgICAgICAgIG5vZGVzID0gdGhpcy5maW5kTm9kZXMoKTtcblxuICAgIGxldCB0ZXJtID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICB0ZXJtID0gYXdhaXQgZXZhbHVhdGUocHJvY2VkdXJlLCBub2RlcywgY29udGV4dCk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLmdldE1lc3NhZ2UoKTtcblxuICAgICAgY29udGV4dC5pbmZvKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBib29sZWFuID0gdGVybS5pc0Jvb2xlYW4oKTtcblxuICAgICAgaWYgKCFib29sZWFuKSB7XG4gICAgICAgIGNvbnRleHQuaW5mbyhgVGhlICcke25vbWluYWxQcm9jZWR1cmVDYWxsU3RyaW5nfScgbm9taW5hbCBwcm9jZWR1cmUgY2FsbCBkaWQgbm90IHJldHVybiBhIGJvb2xlYW4uYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcmltaXRpdmVWYWx1ZSA9IHRlcm0uZ2V0UHJpbWl0aXZlVmFsdWUoKTtcblxuICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHtcbiAgICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke25vbWluYWxQcm9jZWR1cmVDYWxsU3RyaW5nfScgbm9taW5hbCBwcm9jZWR1cmUgY2FsbCBpbmRlcGVuZGVudGx5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVzSW5kZXBlbmRlbnRseTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJOb21pbmFsUHJvY2VkdXJlQ2FsbFwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIG5vbWluYWxQcm9jZWR1cmVDYWxsTm9kZSA9IGluc3RhbnRpYXRlTm9taW5hbFByb2NlZHVyZUNhbGwoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBub21pbmFsUHJvY2VkdXJlQ2FsbE5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Ob21pbmFsUHJvY2VkdXJlQ2FsbE5vZGUoanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tTm9taW5hbFByb2NlZHVyZUNhbGxOb2RlKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3Qgbm9taW5hbFByb2NlZHVyZUNhbGwgPSBuZXcgTm9taW5hbFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gICAgICByZXR1cm4gbm9taW5hbFByb2NlZHVyZUNhbGw7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIk5vbWluYWxQcm9jZWR1cmVDYWxsIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJnZXRQYXJhbWV0ZXJzIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlIiwiZ2V0Tm9taW5hbFByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0Tm9kZSIsIm5vbWluYWxQcm9jZWR1cmVDYWxsTm9kZSIsImdldFByb2NlZHVyZU5hbWUiLCJmaW5kTm9kZXMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0U3Vic3RpdHV0aW9ucyIsIm5vZGVzIiwibWFwIiwicGFyYW1ldGVyIiwiZmluZE5vZGUiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlcyIsIm5vbWluYWxQcm9jZWR1cmVDYWxsU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJwcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlIiwiZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZUJvb2xlYW4iLCJpc0Jvb2xlYW4iLCJkZWJ1ZyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwidGVybSIsImV2YWx1YXRlIiwiZXhjZXB0aW9uIiwibWVzc2FnZSIsImdldE1lc3NhZ2UiLCJpbmZvIiwiYm9vbGVhbiIsInByaW1pdGl2ZVZhbHVlIiwiZ2V0UHJpbWl0aXZlVmFsdWUiLCJuYW1lIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlTm9taW5hbFByb2NlZHVyZUNhbGwiLCJicmVha1BvaW50RnJvbUpTT04iLCJwYXJhbWV0ZXJzRnJvbU5vbWluYWxQcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Ob21pbmFsUHJvY2VkdXJlQ2FsbE5vZGUiLCJub21pbmFsUHJvY2VkdXJlQ2FsbCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFBOzs7Z0NBUndCOzBCQUVEO3lCQUNlOzZCQUNVOzRCQUNlO3lCQUN3QztNQUV2RyxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDZCQUE2QkMsdUJBQU87SUFDOUQsWUFBWUMsUUFBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLGtCQUFrQixDQUFFO1FBQzdFLEtBQUssQ0FBQ0wsVUFBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0Msa0JBQWtCLEdBQUdBO0lBQzVCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRixVQUFVO0lBQ3hCO0lBRUFHLHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQ0Ysa0JBQWtCO0lBQ2hDO0lBRUFHLDhCQUE4QjtRQUM1QixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsMkJBQTJCUjtRQUVqQyxPQUFPUTtJQUNUO0lBRUFDLG1CQUFtQjtRQUFFLE9BQU8sSUFBSSxDQUFDTixrQkFBa0IsQ0FBQ00sZ0JBQWdCO0lBQUk7SUFFeEVDLFlBQVk7UUFDVixNQUFNQyxnQkFBZ0JiLFFBQVFjLGdCQUFnQixJQUN4Q0MsUUFBUSxJQUFJLENBQUNYLFVBQVUsQ0FBQ1ksR0FBRyxDQUFDLENBQUNDO1lBQzNCLE1BQU1mLE9BQU9lLFVBQVVDLFFBQVEsQ0FBQ0w7WUFFaEMsT0FBT1g7UUFDVDtRQUVOLE9BQU9hO0lBQ1Q7SUFFQUksU0FBU25CLFFBQU8sRUFBRTtRQUNoQixJQUFJb0IsWUFBWTtRQUVoQixN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
@@ -30,8 +30,8 @@ const _default = (0, _elements.define)(class Parameter extends _occamlanguages.E
30
30
  const node = this.getNode(), parameterNode = node; ///
31
31
  return parameterNode;
32
32
  }
33
- findPrimitive(substitutions, context) {
34
- let primitive = null;
33
+ findNode(substitutions) {
34
+ let node = null;
35
35
  const parameter = this, substitution = substitutions.find((substitution)=>{
36
36
  const substitutionComparesToParameter = substitution.compareParameter(parameter);
37
37
  if (substitutionComparesToParameter) {
@@ -39,9 +39,10 @@ const _default = (0, _elements.define)(class Parameter extends _occamlanguages.E
39
39
  }
40
40
  }) || null;
41
41
  if (substitution !== null) {
42
- primitive = substitution.getPrimitive(context);
42
+ const replacementNode = substitution.getReplacementNode();
43
+ node = replacementNode; ///
43
44
  }
44
- return primitive;
45
+ return node;
45
46
  }
46
47
  static name = "Parameter";
47
48
  toJSON() {
@@ -66,4 +67,4 @@ const _default = (0, _elements.define)(class Parameter extends _occamlanguages.E
66
67
  }
67
68
  });
68
69
 
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3BhcmFtZXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgbmFtZUZyb21QYXJhbmV0ZXJOb2RlLCBpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFBhcmFtZXRlciBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICB9XG4gIFxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRJZGVudGlmaWVyKCkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXI7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwYXJhbWV0ZXJOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcGFyYW1ldGVyTm9kZTtcbiAgfVxuXG4gIGZpbmRQcmltaXRpdmUoc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBwcmltaXRpdmUgPSBudWxsO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkNvbXBhcmVzVG9QYXJhbWV0ZXIgPSBzdWJzdGl0dXRpb24uY29tcGFyZVBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uQ29tcGFyZXNUb1BhcmFtZXRlcikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgcHJpbWl0aXZlID0gc3Vic3RpdHV0aW9uLmdldFByaW1pdGl2ZShjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlBhcmFtZXRlclwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHBhcmFtZXRlck5vZGUgPSBpbnN0YW50aWF0ZVBhcmFtZXRlcihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiUGFyYW1ldGVyIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5hbWUiLCJpZGVudGlmaWVyIiwiZ2V0TmFtZSIsImdldElkZW50aWZpZXIiLCJnZXRQYXJhbWV0ZXJOb2RlIiwiZ2V0Tm9kZSIsInBhcmFtZXRlck5vZGUiLCJmaW5kUHJpbWl0aXZlIiwic3Vic3RpdHV0aW9ucyIsInByaW1pdGl2ZSIsInBhcmFtZXRlciIsInN1YnN0aXR1dGlvbiIsImZpbmQiLCJzdWJzdGl0dXRpb25Db21wYXJlc1RvUGFyYW1ldGVyIiwiY29tcGFyZVBhcmFtZXRlciIsImdldFByaW1pdGl2ZSIsInRvSlNPTiIsImdldFN0cmluZyIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVBhcmFtZXRlciIsImJyZWFrUG9pbnRGcm9tSlNPTiIsIm5hbWVGcm9tUGFyYW5ldGVyTm9kZSIsImlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBVUE7OztlQUFBOzs7Z0NBUndCOzBCQUVEO3lCQUNLOzZCQUNTOzRCQUMwQjt5QkFDSTtNQUVuRSxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGtCQUFrQkMsdUJBQU87SUFDbkQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsQ0FBRTtRQUMvRCxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNGLElBQUk7SUFDbEI7SUFFQUcsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNGLFVBQVU7SUFDeEI7SUFFQUcsbUJBQW1CO1FBQ2pCLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyxnQkFBZ0JSLE1BQU0sR0FBRztRQUUvQixPQUFPUTtJQUNUO0lBRUFDLGNBQWNDLGFBQWEsRUFBRVosT0FBTyxFQUFFO1FBQ3BDLElBQUlhLFlBQVk7UUFFaEIsTUFBTUMsWUFBWSxJQUFJLEVBQ2hCQyxlQUFlSCxjQUFjSSxJQUFJLENBQUMsQ0FBQ0Q7WUFDakMsTUFBTUUsa0NBQWtDRixhQUFhRyxnQkFBZ0IsQ0FBQ0o7WUFFdEUsSUFBSUcsaUNBQWlDO2dCQUNuQyxPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRVosSUFBSUYsaUJBQWlCLE1BQU07WUFDekJGLFlBQVlFLGFBQWFJLFlBQVksQ0FBQ25CO1FBQ3hDO1FBRUEsT0FBT2E7SUFDVDtJQUVBLE9BQU9ULE9BQU8sWUFBWTtJQUUxQmdCLFNBQVM7UUFDUCxNQUFNbkIsU0FBUyxJQUFJLENBQUNvQixTQUFTO1FBRTdCLElBQUlsQjtRQUVKQSxhQUFhLElBQUksQ0FBQ21CLGFBQWE7UUFFL0IsTUFBTUMsaUJBQWlCQyxJQUFBQSxzQ0FBMEIsRUFBQ3JCO1FBRWxEQSxhQUFhb0IsZ0JBQWlCLEdBQUc7UUFFakMsTUFBTUUsT0FBTztZQUNYeEI7WUFDQUU7UUFDRjtRQUVBLE9BQU9zQjtJQUNUO0lBRUEsT0FBT0MsU0FBU0QsSUFBSSxFQUFFekIsT0FBTyxFQUFFO1FBQzdCLE9BQU8yQixJQUFBQSxvQkFBVyxFQUFDLENBQUMzQjtZQUNsQixNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHd0IsTUFDYmYsZ0JBQWdCa0IsSUFBQUEsaUNBQW9CLEVBQUMzQixRQUFRRCxVQUM3Q0UsT0FBT1EsZUFDUFAsYUFBYTBCLElBQUFBLDhCQUFrQixFQUFDSixPQUNoQ3JCLE9BQU8wQixJQUFBQSw4QkFBcUIsRUFBQ3BCLGVBQWVWLFVBQzVDSyxhQUFhMEIsSUFBQUEsb0NBQTJCLEVBQUNyQixlQUFlVjtZQUU5REEsVUFBVTtZQUVWLE1BQU1jLFlBQVksSUFBSWhCLFVBQVVFLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDLE1BQU1DO1lBRXpFLE9BQU9TO1FBQ1QsR0FBR2Q7SUFDTDtBQUNGIn0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3BhcmFtZXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgbmFtZUZyb21QYXJhbmV0ZXJOb2RlLCBpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFBhcmFtZXRlciBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIGlkZW50aWZpZXIpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICB9XG4gIFxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRJZGVudGlmaWVyKCkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aWZpZXI7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwYXJhbWV0ZXJOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcGFyYW1ldGVyTm9kZTtcbiAgfVxuXG4gIGZpbmROb2RlKHN1YnN0aXR1dGlvbnMpIHtcbiAgICBsZXQgbm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXIgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQ29tcGFyZXNUb1BhcmFtZXRlciA9IHN1YnN0aXR1dGlvbi5jb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcik7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Db21wYXJlc1RvUGFyYW1ldGVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZXBsYWNlbWVudE5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnROb2RlKCk7XG5cbiAgICAgIG5vZGUgPSByZXBsYWNlbWVudE5vZGU7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlBhcmFtZXRlclwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHBhcmFtZXRlck5vZGUgPSBpbnN0YW50aWF0ZVBhcmFtZXRlcihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBuYW1lID0gbmFtZUZyb21QYXJhbmV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHBhcmFtZXRlciA9IG5ldyBQYXJhbWV0ZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCBpZGVudGlmaWVyKTtcblxuICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiUGFyYW1ldGVyIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5hbWUiLCJpZGVudGlmaWVyIiwiZ2V0TmFtZSIsImdldElkZW50aWZpZXIiLCJnZXRQYXJhbWV0ZXJOb2RlIiwiZ2V0Tm9kZSIsInBhcmFtZXRlck5vZGUiLCJmaW5kTm9kZSIsInN1YnN0aXR1dGlvbnMiLCJwYXJhbWV0ZXIiLCJzdWJzdGl0dXRpb24iLCJmaW5kIiwic3Vic3RpdHV0aW9uQ29tcGFyZXNUb1BhcmFtZXRlciIsImNvbXBhcmVQYXJhbWV0ZXIiLCJyZXBsYWNlbWVudE5vZGUiLCJnZXRSZXBsYWNlbWVudE5vZGUiLCJ0b0pTT04iLCJnZXRTdHJpbmciLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVQYXJhbWV0ZXIiLCJicmVha1BvaW50RnJvbUpTT04iLCJuYW1lRnJvbVBhcmFuZXRlck5vZGUiLCJpZGVudGlmaWVyRnJvbVBhcmFtZXRlck5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBQTs7O2dDQVJ3QjswQkFFRDt5QkFDSzs2QkFDUzs0QkFDMEI7eUJBQ0k7TUFFbkUsV0FBZUEsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxrQkFBa0JDLHVCQUFPO0lBQ25ELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxVQUFVLENBQUU7UUFDL0QsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRixVQUFVO0lBQ3hCO0lBRUFHLG1CQUFtQjtRQUNqQixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsZ0JBQWdCUixNQUFNLEdBQUc7UUFFL0IsT0FBT1E7SUFDVDtJQUVBQyxTQUFTQyxhQUFhLEVBQUU7UUFDdEIsSUFBSVYsT0FBTztRQUVYLE1BQU1XLFlBQVksSUFBSSxFQUNoQkMsZUFBZUYsY0FBY0csSUFBSSxDQUFDLENBQUNEO1lBQ2pDLE1BQU1FLGtDQUFrQ0YsYUFBYUcsZ0JBQWdCLENBQUNKO1lBRXRFLElBQUlHLGlDQUFpQztnQkFDbkMsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVaLElBQUlGLGlCQUFpQixNQUFNO1lBQ3pCLE1BQU1JLGtCQUFrQkosYUFBYUssa0JBQWtCO1lBRXZEakIsT0FBT2dCLGlCQUFpQixHQUFHO1FBQzdCO1FBRUEsT0FBT2hCO0lBQ1Q7SUFFQSxPQUFPRSxPQUFPLFlBQVk7SUFFMUJnQixTQUFTO1FBQ1AsTUFBTW5CLFNBQVMsSUFBSSxDQUFDb0IsU0FBUztRQUU3QixJQUFJbEI7UUFFSkEsYUFBYSxJQUFJLENBQUNtQixhQUFhO1FBRS9CLE1BQU1DLGlCQUFpQkMsSUFBQUEsc0NBQTBCLEVBQUNyQjtRQUVsREEsYUFBYW9CLGdCQUFpQixHQUFHO1FBRWpDLE1BQU1FLE9BQU87WUFDWHhCO1lBQ0FFO1FBQ0Y7UUFFQSxPQUFPc0I7SUFDVDtJQUVBLE9BQU9DLFNBQVNELElBQUksRUFBRXpCLE9BQU8sRUFBRTtRQUM3QixPQUFPMkIsSUFBQUEsb0JBQVcsRUFBQyxDQUFDM0I7WUFDbEIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR3dCLE1BQ2JmLGdCQUFnQmtCLElBQUFBLGlDQUFvQixFQUFDM0IsUUFBUUQsVUFDN0NFLE9BQU9RLGVBQ1BQLGFBQWEwQixJQUFBQSw4QkFBa0IsRUFBQ0osT0FDaENyQixPQUFPMEIsSUFBQUEsOEJBQXFCLEVBQUNwQixlQUFlVixVQUM1Q0ssYUFBYTBCLElBQUFBLG9DQUEyQixFQUFDckIsZUFBZVY7WUFFOURBLFVBQVU7WUFFVixNQUFNYSxZQUFZLElBQUlmLFVBQVVFLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDLE1BQU1DO1lBRXpFLE9BQU9RO1FBQ1QsR0FBR2I7SUFDTDtBQUNGIn0=
@@ -20,12 +20,12 @@ function _interop_require_default(obj) {
20
20
  };
21
21
  }
22
22
  const _default = (0, _elements.define)(class Premise extends _proofAssertion.default {
23
- constructor(context, string, node, breakPoint, statement, procedureCall){
23
+ constructor(context, string, node, breakPoint, statement, nominalProcedureCall){
24
24
  super(context, string, node, breakPoint, statement);
25
- this.procedureCall = procedureCall;
25
+ this.nominalProcedureCall = nominalProcedureCall;
26
26
  }
27
- getProcedureCall() {
28
- return this.procedureCall;
27
+ getNominalProcedureCall() {
28
+ return this.nominalProcedureCall;
29
29
  }
30
30
  getPremiseNode() {
31
31
  const node = this.getNode(), premiseNode = node; ///
@@ -52,8 +52,8 @@ const _default = (0, _elements.define)(class Premise extends _proofAssertion.def
52
52
  await this.break(context);
53
53
  const premiseString = this.getString();
54
54
  context.trace(`Verifying the '${premiseString}' premise...`);
55
- const statement = this.getStatement(), procedureCall = this.getProcedureCall();
56
- if (statement !== null || procedureCall !== null) {
55
+ const statement = this.getStatement(), nominalProcedureCall = this.getNominalProcedureCall();
56
+ if (statement !== null || nominalProcedureCall !== null) {
57
57
  (0, _context.declare)((context)=>{
58
58
  const validates = this.validate(context);
59
59
  if (validates) {
@@ -70,16 +70,16 @@ const _default = (0, _elements.define)(class Premise extends _proofAssertion.def
70
70
  const premiseString = this.getString(); ///
71
71
  context.trace(`Validatting the '${premiseString}' premise...`);
72
72
  (0, _context.attempt)((context)=>{
73
- const statement = this.getStatement(), procedureCall = this.getProcedureCall();
73
+ const statement = this.getStatement(), nominalProcedureCall = this.getNominalProcedureCall();
74
74
  if (statement !== null) {
75
75
  const statementValidates = this.validateStatement(context);
76
76
  if (statementValidates) {
77
77
  validates = true;
78
78
  }
79
79
  }
80
- if (procedureCall !== null) {
81
- const procedureCallValidates = this.validateProcedureCall(context);
82
- if (procedureCallValidates) {
80
+ if (nominalProcedureCall !== null) {
81
+ const nominalProcedureCallValidates = this.validateNominalProcedureCall(context);
82
+ if (nominalProcedureCallValidates) {
83
83
  validates = true;
84
84
  }
85
85
  }
@@ -107,34 +107,34 @@ const _default = (0, _elements.define)(class Premise extends _proofAssertion.def
107
107
  }
108
108
  return statementValidates;
109
109
  }
110
- validateProcedureCall(context) {
111
- let procedureCallValidates = false;
110
+ validateNominalProcedureCall(context) {
111
+ let nominalProcedureCallValidates = false;
112
112
  const premiseString = this.getString(); ///
113
- context.trace(`Validatting the '${premiseString}' premise's procedure call...`);
114
- const procedureCall = this.procedureCall.validate(context);
115
- if (procedureCall !== null) {
116
- procedureCallValidates = true;
113
+ context.trace(`Validatting the '${premiseString}' premise's nominal procedure call...`);
114
+ const nominalProcedureCall = this.nominalProcedureCall.validate(context);
115
+ if (nominalProcedureCall !== null) {
116
+ nominalProcedureCallValidates = true;
117
117
  }
118
- if (procedureCallValidates) {
119
- context.debug(`...validated the '${premiseString}' premise's procedure call.`);
118
+ if (nominalProcedureCallValidates) {
119
+ context.debug(`...validated the '${premiseString}' premise's nominal procedure call.`);
120
120
  }
121
- return procedureCallValidates;
121
+ return nominalProcedureCallValidates;
122
122
  }
123
123
  async unifyIndependently(context) {
124
124
  let unifiesIndependently = false;
125
125
  const premiseString = this.getString(); ///
126
126
  context.trace(`Unifying the '${premiseString}' premise independently...`);
127
127
  await (0, _context.reconcile)(async (context)=>{
128
- const statement = this.getStatement(), procedureCall = this.getProcedureCall();
128
+ const statement = this.getStatement(), nominalProcedureCall = this.getNominalProcedureCall();
129
129
  if (statement !== null) {
130
130
  const premiseContext = this.getContext(), generalContext = premiseContext, specificContext = context, statementUnifiesIndependently = statement.unifyIndependently(generalContext, specificContext);
131
131
  if (statementUnifiesIndependently) {
132
132
  unifiesIndependently = true;
133
133
  }
134
134
  }
135
- if (procedureCall !== null) {
136
- const procedureCallResolvedIndependently = await procedureCall.unifyIndependently(context);
137
- if (procedureCallResolvedIndependently) {
135
+ if (nominalProcedureCall !== null) {
136
+ const nominalProcedureCallResolvedIndependently = await nominalProcedureCall.unifyIndependently(context);
137
+ if (nominalProcedureCallResolvedIndependently) {
138
138
  unifiesIndependently = true;
139
139
  }
140
140
  }
@@ -223,8 +223,8 @@ const _default = (0, _elements.define)(class Premise extends _proofAssertion.def
223
223
  let premise;
224
224
  (0, _context.instantiate)((context)=>{
225
225
  (0, _context.unserialise)((json, context)=>{
226
- const { string } = json, premiseNode = (0, _instantiate.instantiatePremise)(string, context), node = premiseNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), statement = statementFromPremiseNode(premiseNode, context), procedureCall = (0, _element.procedureCallFromPremiseNode)(premiseNode, context);
227
- premise = new Premise(context, string, node, breakPoint, statement, procedureCall);
226
+ const { string } = json, premiseNode = (0, _instantiate.instantiatePremise)(string, context), node = premiseNode, breakPoint = (0, _breakPoint.breakPointFromJSON)(json), statement = statementFromPremiseNode(premiseNode, context), nominalProcedureCall = (0, _element.nominalProcedureCallFromPremiseNode)(premiseNode, context);
227
+ premise = new Premise(context, string, node, breakPoint, statement, nominalProcedureCall);
228
228
  }, json, context);
229
229
  }, context);
230
230
  return premise;
@@ -235,4 +235,4 @@ function statementFromPremiseNode(premiseNode, context) {
235
235
  return statement;
236
236
  }
237
237
 
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3ByZW1pc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQcm9vZkFzc2VydGlvbiBmcm9tIFwiLi4vcHJvb2ZBc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVByZW1pc2UgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYnJlYWtQb2ludFwiO1xuaW1wb3J0IHsgZGVjbGFyZSwgYXR0ZW1wdCwgcmVjb25jaWxlLCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgUHJlbWlzZSBleHRlbmRzIFByb29mQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgICB0aGlzLnByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0UHJlbWlzZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHByZW1pc2VOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcHJlbWlzZU5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHByZW1pc2VOb2RlID0gdGhpcy5nZXRQcmVtaXNlTm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbigpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHRoaXMuZ2V0UHJvY2VkdXJlQ2FsbCgpO1xuXG4gICAgaWYgKChzdGF0ZW1lbnQgIT09IG51bGwpIHx8IChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSkge1xuICAgICAgZGVjbGFyZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmFsaWRhdGUgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGJlY2F1c2UgaXQgaXMgbm9uc2Vuc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXR0aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlUHJvY2VkdXJlQ2FsbChjb250ZXh0KTtcblxuICAgICAgICBpZiAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3Mgc3RhdHNlbWVudC4uLiBgKTtcblxuICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBzdGF0ZW1lbnQuIGApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwoY29udGV4dCkge1xuICAgIGxldCBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0dGluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBwcm9jZWR1cmUgY2FsbC4uLmApO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbCA9IHRoaXMucHJvY2VkdXJlQ2FsbC52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSdzIHByb2NlZHVyZSBjYWxsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpIHtcbiAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBhd2FpdCByZWNvbmNpbGUoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5ID0gc3RhdGVtZW50LnVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSA9IGF3YWl0IHByb2NlZHVyZUNhbGwudW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdGhpcy5maW5kU3VicHJvb2ZBc3NlcnRpb24oKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gcHJlbWlzZUNvbnRleHQsIC8vL1xuICAgICAgICAgICAgc3BzZWNmaWljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICBzdWJwcm9vZlVuaWZpZXMgPSBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BzZWNmaWljQ29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlQcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCkge1xuICAgIGxldCBwcm9vZkFzc2VydGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBwcm9vZkFzc2VydGlvblN0cmluZyA9IHByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBwcm9vZkFzc2VydGlvbkNvbnRleHQgPSBwcm9vZkFzc2VydGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gcHJvb2ZBc3NlcnRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gcHJvb2ZBc3NlcnRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgIHByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChwcm9vZkFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9vZkFzc2VydGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcztcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmcgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5pc1Byb29mQXNzZXJ0aW9uKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uID9cbiAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBpZiAocHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gdGhpcy51bmlmeVByb29mQXNzZXJ0aW9uKHByb29mQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAocHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnByb29mICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mVW5pZmllcyA9IHRoaXMudW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByZW1pc2VcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBwcmVtaXNlO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBwcmVtaXNlTm9kZSA9IGluc3RhbnRpYXRlUHJlbWlzZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImRlZmluZSIsIlByZW1pc2UiLCJQcm9vZkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN0YXRlbWVudCIsInByb2NlZHVyZUNhbGwiLCJnZXRQcm9jZWR1cmVDYWxsIiwiZ2V0UHJlbWlzZU5vZGUiLCJnZXROb2RlIiwicHJlbWlzZU5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGV4dCIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImJyZWFrIiwicHJlbWlzZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZ2V0U3RhdGVtZW50IiwiZGVjbGFyZSIsInZhbGlkYXRlcyIsInZhbGlkYXRlIiwiZGVidWciLCJhdHRlbXB0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJwcm9jZWR1cmVDYWxsVmFsaWRhdGVzIiwidmFsaWRhdGVQcm9jZWR1cmVDYWxsIiwiY29tbWl0IiwidW5pZnlJbmRlcGVuZGVudGx5IiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJyZWNvbmNpbGUiLCJwcmVtaXNlQ29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkiLCJwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5IiwidW5pZnlTdWJwcm9vZiIsInN1YnByb29mIiwic3VicHJvb2ZVbmlmaWVzIiwic3VicHJvb2ZTdHJpbmciLCJzcHNlY2ZpaWNDb250ZXh0IiwidW5pZnlQcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uIiwicHJvb2ZBc3NlcnRpb25VbmlmaWVzIiwicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJwcm9vZkFzc2VydGlvbkNvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmciLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiIsImlzUHJvb2ZBc3NlcnRpb24iLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJwcmVtaXNlIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlUHJlbWlzZSIsImJyZWFrUG9pbnRGcm9tSlNPTiIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VBQUE7Ozt1RUFSMkI7MEJBRUo7NkJBQ1k7eUJBQ1U7NEJBQ2tCO3lCQUNrQjs7Ozs7O01BRWpGLFdBQWVBLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsZ0JBQWdCQyx1QkFBYztJQUN4RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxDQUFFO1FBQ3ZFLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUM7UUFFekMsSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQ0QsYUFBYTtJQUMzQjtJQUVBRSxpQkFBaUI7UUFDZixNQUFNTCxPQUFPLElBQUksQ0FBQ00sT0FBTyxJQUNuQkMsY0FBY1AsTUFBTSxHQUFHO1FBRTdCLE9BQU9PO0lBQ1Q7SUFFQUMsbUJBQW1CO1FBQ2pCLE1BQU1ELGNBQWMsSUFBSSxDQUFDRixjQUFjLElBQ2pDSSxnQkFBZ0JGLFlBQVlDLGdCQUFnQjtRQUVsRCxPQUFPQztJQUNUO0lBRUFDLHdCQUF3QjtRQUN0QixJQUFJQyxvQkFBb0I7UUFFeEIsTUFBTUYsZ0JBQWdCLElBQUksQ0FBQ0QsZ0JBQWdCO1FBRTNDLElBQUlDLGtCQUFrQixNQUFNO1lBQzFCLE1BQU1HLHdCQUF3QkgsY0FBY0ksd0JBQXdCO1lBRXBFLElBQUlELDBCQUEwQixNQUFNO2dCQUNsQyxNQUFNZCxVQUFVLElBQUksQ0FBQ2dCLFVBQVU7Z0JBRS9CSCxvQkFBb0JiLFFBQVFpQiw0QkFBNEIsQ0FBQ0g7WUFDM0Q7UUFD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
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3ByZW1pc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQcm9vZkFzc2VydGlvbiBmcm9tIFwiLi4vcHJvb2ZBc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVByZW1pc2UgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgbm9taW5hbFByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JyZWFrUG9pbnRcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGF0dGVtcHQsIHJlY29uY2lsZSwgc2VyaWFsaXNlLCB1bnNlcmlhbGlzZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByZW1pc2UgZXh0ZW5kcyBQcm9vZkFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBub21pbmFsUHJvY2VkdXJlQ2FsbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50KTtcblxuICAgIHRoaXMubm9taW5hbFByb2NlZHVyZUNhbGwgPSBub21pbmFsUHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldE5vbWluYWxQcm9jZWR1cmVDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLm5vbWluYWxQcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0UHJlbWlzZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHByZW1pc2VOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcHJlbWlzZU5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHByZW1pc2VOb2RlID0gdGhpcy5nZXRQcmVtaXNlTm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbigpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgbm9taW5hbFByb2NlZHVyZUNhbGwgPSB0aGlzLmdldE5vbWluYWxQcm9jZWR1cmVDYWxsKCk7XG5cbiAgICBpZiAoKHN0YXRlbWVudCAhPT0gbnVsbCkgfHwgKG5vbWluYWxQcm9jZWR1cmVDYWxsICE9PSBudWxsKSkge1xuICAgICAgZGVjbGFyZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmFsaWRhdGUgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGJlY2F1c2UgaXQgaXMgbm9uc2Vuc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCkge1xuICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXR0aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIG5vbWluYWxQcm9jZWR1cmVDYWxsID0gdGhpcy5nZXROb21pbmFsUHJvY2VkdXJlQ2FsbCgpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vbWluYWxQcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5vbWluYWxQcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZU5vbWluYWxQcm9jZWR1cmVDYWxsKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChub21pbmFsUHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3Mgc3RhdHNlbWVudC4uLiBgKTtcblxuICAgIGxldCBzdGF0ZW1lbnQ7XG5cbiAgICBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBzdGF0ZW1lbnQuIGApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZU5vbWluYWxQcm9jZWR1cmVDYWxsKGNvbnRleHQpIHtcbiAgICBsZXQgbm9taW5hbFByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXR0aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSdzIG5vbWluYWwgcHJvY2VkdXJlIGNhbGwuLi5gKTtcblxuICAgIGNvbnN0IG5vbWluYWxQcm9jZWR1cmVDYWxsID0gdGhpcy5ub21pbmFsUHJvY2VkdXJlQ2FsbC52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmIChub21pbmFsUHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgbm9taW5hbFByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub21pbmFsUHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSdzIG5vbWluYWwgcHJvY2VkdXJlIGNhbGwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vbWluYWxQcm9jZWR1cmVDYWxsVmFsaWRhdGVzO1xuICB9XG5cbiAgYXN5bmMgdW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpIHtcbiAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBhd2FpdCByZWNvbmNpbGUoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICBub21pbmFsUHJvY2VkdXJlQ2FsbCA9IHRoaXMuZ2V0Tm9taW5hbFByb2NlZHVyZUNhbGwoKTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwcmVtaXNlQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHByZW1pc2VDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkgPSBzdGF0ZW1lbnQudW5pZnlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobm9taW5hbFByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgbm9taW5hbFByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkgPSBhd2FpdCBub21pbmFsUHJvY2VkdXJlQ2FsbC51bmlmeUluZGVwZW5kZW50bHkoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKG5vbWluYWxQcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdGhpcy5maW5kU3VicHJvb2ZBc3NlcnRpb24oKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gcHJlbWlzZUNvbnRleHQsIC8vL1xuICAgICAgICAgICAgc3BzZWNmaWljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICBzdWJwcm9vZlVuaWZpZXMgPSBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BzZWNmaWljQ29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlQcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCkge1xuICAgIGxldCBwcm9vZkFzc2VydGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBwcm9vZkFzc2VydGlvblN0cmluZyA9IHByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBwcm9vZkFzc2VydGlvbkNvbnRleHQgPSBwcm9vZkFzc2VydGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gcHJvb2ZBc3NlcnRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gcHJvb2ZBc3NlcnRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgIHByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChwcm9vZkFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9vZkFzc2VydGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcztcblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25TdHJpbmcgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbi5pc1Byb29mQXNzZXJ0aW9uKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbiA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uID9cbiAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uO1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBpZiAocHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gdGhpcy51bmlmeVByb29mQXNzZXJ0aW9uKHByb29mQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAocHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnByb29mICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnByb29mVW5pZmllcyA9IHRoaXMudW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICAgIHN1YnByb29mT3JQcm9vZkFzc2VydGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZPclByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2Ygb3IgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25VbmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByZW1pc2VcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBwcmVtaXNlO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBwcmVtaXNlTm9kZSA9IGluc3RhbnRpYXRlUHJlbWlzZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gcHJlbWlzZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9taW5hbFByb2NlZHVyZUNhbGwgPSBub21pbmFsUHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBub21pbmFsUHJvY2VkdXJlQ2FsbCk7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImRlZmluZSIsIlByZW1pc2UiLCJQcm9vZkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInN0YXRlbWVudCIsIm5vbWluYWxQcm9jZWR1cmVDYWxsIiwiZ2V0Tm9taW5hbFByb2NlZHVyZUNhbGwiLCJnZXRQcmVtaXNlTm9kZSIsImdldE5vZGUiLCJwcmVtaXNlTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRDb250ZXh0IiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsInZlcmlmeSIsInZlcmlmaWVzIiwiYnJlYWsiLCJwcmVtaXNlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJnZXRTdGF0ZW1lbnQiLCJkZWNsYXJlIiwidmFsaWRhdGVzIiwidmFsaWRhdGUiLCJkZWJ1ZyIsImF0dGVtcHQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsIm5vbWluYWxQcm9jZWR1cmVDYWxsVmFsaWRhdGVzIiwidmFsaWRhdGVOb21pbmFsUHJvY2VkdXJlQ2FsbCIsImNvbW1pdCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwicmVjb25jaWxlIiwicHJlbWlzZUNvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5Iiwibm9taW5hbFByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJzdWJwcm9vZlVuaWZpZXMiLCJzdWJwcm9vZlN0cmluZyIsInNwc2VjZmlpY0NvbnRleHQiLCJ1bmlmeVByb29mQXNzZXJ0aW9uIiwicHJvb2ZBc3NlcnRpb24iLCJwcm9vZkFzc2VydGlvblVuaWZpZXMiLCJwcm9vZkFzc2VydGlvblN0cmluZyIsInByb29mQXNzZXJ0aW9uQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uVW5pZmllcyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uIiwiaXNQcm9vZkFzc2VydGlvbiIsInRvSlNPTiIsInNlcmlhbGlzZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsInByZW1pc2UiLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVQcmVtaXNlIiwiYnJlYWtQb2ludEZyb21KU09OIiwic3RhdGVtZW50RnJvbVByZW1pc2VOb2RlIiwibm9taW5hbFByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VBQUE7Ozt1RUFSMkI7MEJBRUo7NkJBQ1k7eUJBQ2lCOzRCQUNXO3lCQUNrQjs7Ozs7O01BRWpGLFdBQWVBLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsZ0JBQWdCQyx1QkFBYztJQUN4RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsb0JBQW9CLENBQUU7UUFDOUUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQztRQUV6QyxJQUFJLENBQUNDLG9CQUFvQixHQUFHQTtJQUM5QjtJQUVBQywwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLENBQUNELG9CQUFvQjtJQUNsQztJQUVBRSxpQkFBaUI7UUFDZixNQUFNTCxPQUFPLElBQUksQ0FBQ00sT0FBTyxJQUNuQkMsY0FBY1AsTUFBTSxHQUFHO1FBRTdCLE9BQU9PO0lBQ1Q7SUFFQUMsbUJBQW1CO1FBQ2pCLE1BQU1ELGNBQWMsSUFB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