occam-parsers 23.0.115 → 23.0.117
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.
- package/example.js +514 -428
- package/lib/index.js +5 -1
- package/lib/mixins/node.js +195 -0
- package/lib/node/nonTerminal.js +24 -176
- package/lib/node/terminal.js +12 -27
- package/package.json +1 -1
- package/src/index.js +2 -0
- package/src/mixins/node.js +205 -0
- package/src/node/nonTerminal.js +21 -141
- package/src/node/terminal.js +10 -30
package/lib/index.js
CHANGED
|
@@ -39,6 +39,9 @@ _export(exports, {
|
|
|
39
39
|
TerminalNode: function() {
|
|
40
40
|
return _terminal.default;
|
|
41
41
|
},
|
|
42
|
+
nodeMixins: function() {
|
|
43
|
+
return _node.default;
|
|
44
|
+
},
|
|
42
45
|
parserUtilities: function() {
|
|
43
46
|
return _parser3.default;
|
|
44
47
|
},
|
|
@@ -52,6 +55,7 @@ _export(exports, {
|
|
|
52
55
|
var _parser = /*#__PURE__*/ _interop_require_default(require("./bnf/parser"));
|
|
53
56
|
var _parser1 = /*#__PURE__*/ _interop_require_default(require("./basic/parser"));
|
|
54
57
|
var _parser2 = /*#__PURE__*/ _interop_require_default(require("./common/parser"));
|
|
58
|
+
var _node = /*#__PURE__*/ _interop_require_default(require("./mixins/node"));
|
|
55
59
|
var _rules = /*#__PURE__*/ _interop_require_default(require("./utilities/rules"));
|
|
56
60
|
var _parser3 = /*#__PURE__*/ _interop_require_default(require("./utilities/parser"));
|
|
57
61
|
var _rule = /*#__PURE__*/ _interop_require_default(require("./rule"));
|
|
@@ -68,4 +72,4 @@ function _interop_require_default(obj) {
|
|
|
68
72
|
};
|
|
69
73
|
}
|
|
70
74
|
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZQYXJzZXIgfSBmcm9tIFwiLi9ibmYvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljUGFyc2VyIH0gZnJvbSBcIi4vYmFzaWMvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vblBhcnNlciB9IGZyb20gXCIuL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBub2RlTWl4aW5zIH0gZnJvbSBcIi4vbWl4aW5zL25vZGVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBydWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9ydWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZXJVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGFyc2VyXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFydHMgfSBmcm9tIFwiLi9wYXJ0c1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJ0VHlwZXMgfSBmcm9tIFwiLi9wYXJ0VHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFydENob2ljZSB9IGZyb20gXCIuL3BhcnRDaG9pY2VcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGVmaW5pdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXBzaWxvbk5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGVybWluYWxOb2RlIH0gZnJvbSBcIi4vbm9kZS90ZXJtaW5hbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25UZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL25vblRlcm1pbmFsXCI7XG4iXSwibmFtZXMiOlsiQk5GUGFyc2VyIiwiQmFzaWNQYXJzZXIiLCJDb21tb25QYXJzZXIiLCJEZWZpbml0aW9uIiwiRXBzaWxvbk5vZGUiLCJOb25UZXJtaW5hbE5vZGUiLCJQYXJ0Q2hvaWNlIiwiUGFydHMiLCJSdWxlIiwiVGVybWluYWxOb2RlIiwibm9kZU1peGlucyIsInBhcnNlclV0aWxpdGllcyIsInBhcnRUeXBlcyIsInJ1bGVzVXRpbGl0aWVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFFb0JBLFNBQVM7ZUFBVEEsZUFBUzs7SUFDVEMsV0FBVztlQUFYQSxnQkFBVzs7SUFDWEMsWUFBWTtlQUFaQSxnQkFBWTs7SUFXWkMsVUFBVTtlQUFWQSxtQkFBVTs7SUFDVkMsV0FBVztlQUFYQSxnQkFBVzs7SUFFWEMsZUFBZTtlQUFmQSxvQkFBZTs7SUFKZkMsVUFBVTtlQUFWQSxtQkFBVTs7SUFGVkMsS0FBSztlQUFMQSxjQUFLOztJQURMQyxJQUFJO2VBQUpBLGFBQUk7O0lBTUpDLFlBQVk7ZUFBWkEsaUJBQVk7O0lBWFpDLFVBQVU7ZUFBVkEsYUFBVTs7SUFHVkMsZUFBZTtlQUFmQSxnQkFBZTs7SUFJZkMsU0FBUztlQUFUQSxrQkFBUzs7SUFMVEMsY0FBYztlQUFkQSxjQUFjOzs7NkRBTkc7OERBQ0U7OERBQ0M7MkRBRUY7NERBRUk7OERBQ0M7MkRBRVg7NERBQ0M7Z0VBQ0k7aUVBQ0M7aUVBQ0E7OERBQ0M7K0RBQ0M7a0VBQ0cifQ==
|
|
@@ -0,0 +1,195 @@
|
|
|
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
|
+
var _necessary = require("necessary");
|
|
12
|
+
function _array_like_to_array(arr, len) {
|
|
13
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
14
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
15
|
+
return arr2;
|
|
16
|
+
}
|
|
17
|
+
function _array_without_holes(arr) {
|
|
18
|
+
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
19
|
+
}
|
|
20
|
+
function _iterable_to_array(iter) {
|
|
21
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
22
|
+
}
|
|
23
|
+
function _non_iterable_spread() {
|
|
24
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
25
|
+
}
|
|
26
|
+
function _to_consumable_array(arr) {
|
|
27
|
+
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
28
|
+
}
|
|
29
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
30
|
+
if (!o) return;
|
|
31
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
32
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
33
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
34
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
35
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
36
|
+
}
|
|
37
|
+
var first = _necessary.arrayUtilities.first, forwardsSome = _necessary.arrayUtilities.forwardsSome, backwardsSome = _necessary.arrayUtilities.backwardsSome;
|
|
38
|
+
function getMultiplicity() {
|
|
39
|
+
var childNodesLength = this.childNodes.length, multiplicity = childNodesLength; ///
|
|
40
|
+
return multiplicity;
|
|
41
|
+
}
|
|
42
|
+
function mapChildNode(callback) {
|
|
43
|
+
return this.childNodes.map(callback);
|
|
44
|
+
}
|
|
45
|
+
function someChildNode(callback) {
|
|
46
|
+
return this.childNodes.some(callback);
|
|
47
|
+
}
|
|
48
|
+
function findChildNode(callback) {
|
|
49
|
+
return this.childNodes.find(callback);
|
|
50
|
+
}
|
|
51
|
+
function everyChildNode(callback) {
|
|
52
|
+
return this.childNodes.every(callback);
|
|
53
|
+
}
|
|
54
|
+
function filterChildNode(callback) {
|
|
55
|
+
return this.childNodes.filter(callback);
|
|
56
|
+
}
|
|
57
|
+
function reduceChildNode(callback, initialValue) {
|
|
58
|
+
return this.childNodes.reduce(callback, initialValue);
|
|
59
|
+
}
|
|
60
|
+
function forEachChildNode(callback) {
|
|
61
|
+
this.childNodes.forEach(callback);
|
|
62
|
+
}
|
|
63
|
+
function forwardsSomeChildNode(callback) {
|
|
64
|
+
return forwardsSome(this.childNodes, callback);
|
|
65
|
+
}
|
|
66
|
+
function backwardsSomeChildNode(callback) {
|
|
67
|
+
return backwardsSome(this.childNodes, callback);
|
|
68
|
+
}
|
|
69
|
+
function indexOfChildNode(childNode) {
|
|
70
|
+
return this.childNodes.indexOf(childNode);
|
|
71
|
+
}
|
|
72
|
+
function setChildNodesParentNode(childNodes) {
|
|
73
|
+
if (childNodes === undefined) {
|
|
74
|
+
childNodes = _to_consumable_array(this.childNodes);
|
|
75
|
+
}
|
|
76
|
+
var parentNode = this;
|
|
77
|
+
childNodes.forEach(function(childNode) {
|
|
78
|
+
childNode.setParentNode(parentNode);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function resetChildNodesParentNode(childNodes) {
|
|
82
|
+
if (childNodes === undefined) {
|
|
83
|
+
childNodes = _to_consumable_array(this.childNodes);
|
|
84
|
+
}
|
|
85
|
+
var parentNode = null;
|
|
86
|
+
childNodes.forEach(function(childNode) {
|
|
87
|
+
childNode.setParentNode(parentNode);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function addChildNode(addedChildNode, startIndex) {
|
|
91
|
+
var addedChildNodes = [
|
|
92
|
+
addedChildNode
|
|
93
|
+
];
|
|
94
|
+
this.addChildNodes(addedChildNodes, startIndex);
|
|
95
|
+
}
|
|
96
|
+
function addChildNodes(addedChildNodes, startIndex) {
|
|
97
|
+
var deleteCount = 0;
|
|
98
|
+
this.spliceChildNodes(startIndex, deleteCount, addedChildNodes);
|
|
99
|
+
}
|
|
100
|
+
function removeChildNode(removedChildNode) {
|
|
101
|
+
var removedChildNodes;
|
|
102
|
+
removedChildNodes = [
|
|
103
|
+
removedChildNode
|
|
104
|
+
];
|
|
105
|
+
removedChildNodes = this.removeChildNodes(removedChildNodes);
|
|
106
|
+
return removedChildNodes;
|
|
107
|
+
}
|
|
108
|
+
function removeChildNodes(removedChildNodes) {
|
|
109
|
+
if (removedChildNodes === undefined) {
|
|
110
|
+
removedChildNodes = _to_consumable_array(this.childNodes);
|
|
111
|
+
}
|
|
112
|
+
var removedChildNodesLength = removedChildNodes.length;
|
|
113
|
+
if (removedChildNodesLength === 0) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
var firstReplacedChildNode = first(removedChildNodes), firstIndex = this.childNodes.indexOf(firstReplacedChildNode), startIndex = firstIndex, deleteCount = removedChildNodesLength, addedChildNodes = [];
|
|
117
|
+
removedChildNodes = this.spliceChildNodes(startIndex, deleteCount, addedChildNodes);
|
|
118
|
+
return removedChildNodes;
|
|
119
|
+
}
|
|
120
|
+
function replaceChildNode(replacedChildNode, replacementChildNodes) {
|
|
121
|
+
var replacedChildNodes = [
|
|
122
|
+
replacedChildNode
|
|
123
|
+
];
|
|
124
|
+
this.replaceChildNodes(replacedChildNodes, replacementChildNodes);
|
|
125
|
+
}
|
|
126
|
+
function replaceChildNodes(replacedChildNodes, replacementChildNodes) {
|
|
127
|
+
var replacedChildNodesLength = replacedChildNodes.length, firstReplacedChildNode = first(replacedChildNodes), firstIndex = this.childNodes.indexOf(firstReplacedChildNode), startIndex = firstIndex, deleteCount = replacedChildNodesLength; ///
|
|
128
|
+
this.spliceChildNodes(startIndex, deleteCount, replacementChildNodes);
|
|
129
|
+
}
|
|
130
|
+
function appendChildNode(appendedChildNode) {
|
|
131
|
+
var appendedChildNodes = [
|
|
132
|
+
appendedChildNode
|
|
133
|
+
];
|
|
134
|
+
this.appendChildNodes(appendedChildNodes);
|
|
135
|
+
}
|
|
136
|
+
function appendChildNodes(appendedChildNodes) {
|
|
137
|
+
var addedChildNodes = appendedChildNodes, multiplicity = this.getMultiplicity(), startIndex = multiplicity; ///
|
|
138
|
+
this.addChildNodes(addedChildNodes, startIndex);
|
|
139
|
+
}
|
|
140
|
+
function prependChildNode(prependedChildNode) {
|
|
141
|
+
var prependedChildNodes = [
|
|
142
|
+
prependedChildNode
|
|
143
|
+
];
|
|
144
|
+
this.prependChildNodes(prependedChildNodes);
|
|
145
|
+
}
|
|
146
|
+
function prependChildNodes(prependedChildNodes) {
|
|
147
|
+
var addedChildNodes = prependedChildNodes, startIndex = 0;
|
|
148
|
+
this.addChildNodes(addedChildNodes, startIndex);
|
|
149
|
+
}
|
|
150
|
+
function spliceChildNodes(startIndex, deleteCount) {
|
|
151
|
+
var addedChildNodes = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
|
|
152
|
+
var _this_childNodes;
|
|
153
|
+
var removedChildNodes = (_this_childNodes = this.childNodes).splice.apply(_this_childNodes, [
|
|
154
|
+
startIndex,
|
|
155
|
+
deleteCount
|
|
156
|
+
].concat(_to_consumable_array(addedChildNodes)));
|
|
157
|
+
this.resetChildNodesParentNode(removedChildNodes);
|
|
158
|
+
this.setChildNodesParentNode(addedChildNodes);
|
|
159
|
+
return removedChildNodes;
|
|
160
|
+
}
|
|
161
|
+
function sliceChildNodes(startIndex) {
|
|
162
|
+
var endIndex = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Infinity;
|
|
163
|
+
var childNodes = this.childNodes.slice(startIndex, endIndex);
|
|
164
|
+
return childNodes;
|
|
165
|
+
}
|
|
166
|
+
var nodeMixins = {
|
|
167
|
+
getMultiplicity: getMultiplicity,
|
|
168
|
+
mapChildNode: mapChildNode,
|
|
169
|
+
someChildNode: someChildNode,
|
|
170
|
+
findChildNode: findChildNode,
|
|
171
|
+
everyChildNode: everyChildNode,
|
|
172
|
+
filterChildNode: filterChildNode,
|
|
173
|
+
reduceChildNode: reduceChildNode,
|
|
174
|
+
forEachChildNode: forEachChildNode,
|
|
175
|
+
forwardsSomeChildNode: forwardsSomeChildNode,
|
|
176
|
+
backwardsSomeChildNode: backwardsSomeChildNode,
|
|
177
|
+
indexOfChildNode: indexOfChildNode,
|
|
178
|
+
setChildNodesParentNode: setChildNodesParentNode,
|
|
179
|
+
resetChildNodesParentNode: resetChildNodesParentNode,
|
|
180
|
+
addChildNode: addChildNode,
|
|
181
|
+
addChildNodes: addChildNodes,
|
|
182
|
+
removeChildNode: removeChildNode,
|
|
183
|
+
removeChildNodes: removeChildNodes,
|
|
184
|
+
replaceChildNode: replaceChildNode,
|
|
185
|
+
replaceChildNodes: replaceChildNodes,
|
|
186
|
+
appendChildNode: appendChildNode,
|
|
187
|
+
appendChildNodes: appendChildNodes,
|
|
188
|
+
prependChildNode: prependChildNode,
|
|
189
|
+
prependChildNodes: prependChildNodes,
|
|
190
|
+
spliceChildNodes: spliceChildNodes,
|
|
191
|
+
sliceChildNodes: sliceChildNodes
|
|
192
|
+
};
|
|
193
|
+
var _default = nodeMixins;
|
|
194
|
+
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taXhpbnMvbm9kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZmlyc3QsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmZ1bmN0aW9uIGdldE11bHRpcGxpY2l0eSgpIHtcbiAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IHRoaXMuY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgIG11bHRpcGxpY2l0eSA9IGNoaWxkTm9kZXNMZW5ndGg7ICAvLy9cblxuICByZXR1cm4gbXVsdGlwbGljaXR5O1xufVxuXG5mdW5jdGlvbiBtYXBDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5tYXAoY2FsbGJhY2spOyB9XG5cbmZ1bmN0aW9uIHNvbWVDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5zb21lKGNhbGxiYWNrKTsgfVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmNoaWxkTm9kZXMuZmluZChjYWxsYmFjayk7IH1cblxuZnVuY3Rpb24gZXZlcnlDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5ldmVyeShjYWxsYmFjayk7IH1cblxuZnVuY3Rpb24gZmlsdGVyQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmNoaWxkTm9kZXMuZmlsdGVyKGNhbGxiYWNrKTsgfVxuXG5mdW5jdGlvbiByZWR1Y2VDaGlsZE5vZGUoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLnJlZHVjZShjYWxsYmFjaywgaW5pdGlhbFZhbHVlKTsgfVxuXG5mdW5jdGlvbiBmb3JFYWNoQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHRoaXMuY2hpbGROb2Rlcy5mb3JFYWNoKGNhbGxiYWNrKTsgfVxuXG5mdW5jdGlvbiBmb3J3YXJkc1NvbWVDaGlsZE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIGNhbGxiYWNrKTsgfVxuXG5mdW5jdGlvbiBiYWNrd2FyZHNTb21lQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiBiYWNrd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgY2FsbGJhY2spOyB9XG5cbmZ1bmN0aW9uIGluZGV4T2ZDaGlsZE5vZGUoY2hpbGROb2RlKSB7IHJldHVybiB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihjaGlsZE5vZGUpOyB9XG5cbmZ1bmN0aW9uIHNldENoaWxkTm9kZXNQYXJlbnROb2RlKGNoaWxkTm9kZXMpIHtcbiAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkTm9kZXMgPSBbXG4gICAgICAuLi50aGlzLmNoaWxkTm9kZXNcbiAgICBdO1xuICB9XG5cbiAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXM7XG5cbiAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICBjaGlsZE5vZGUuc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoY2hpbGROb2Rlcykge1xuICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2hpbGROb2RlcyA9IFtcbiAgICAgIC4uLnRoaXMuY2hpbGROb2Rlc1xuICAgIF07XG4gIH1cblxuICBjb25zdCBwYXJlbnROb2RlID0gbnVsbDtcblxuICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgIGNoaWxkTm9kZS5zZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQ2hpbGROb2RlKGFkZGVkQ2hpbGROb2RlLCBzdGFydEluZGV4KSB7XG4gIGNvbnN0IGFkZGVkQ2hpbGROb2RlcyA9IFtcbiAgICBhZGRlZENoaWxkTm9kZVxuICBdO1xuXG4gIHRoaXMuYWRkQ2hpbGROb2RlcyhhZGRlZENoaWxkTm9kZXMsIHN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBhZGRDaGlsZE5vZGVzKGFkZGVkQ2hpbGROb2Rlcywgc3RhcnRJbmRleCkge1xuICBjb25zdCBkZWxldGVDb3VudCA9IDA7XG5cbiAgdGhpcy5zcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCBhZGRlZENoaWxkTm9kZXMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZE5vZGUocmVtb3ZlZENoaWxkTm9kZSkge1xuICBsZXQgcmVtb3ZlZENoaWxkTm9kZXM7XG5cbiAgcmVtb3ZlZENoaWxkTm9kZXMgPSBbXG4gICAgcmVtb3ZlZENoaWxkTm9kZVxuICBdO1xuXG4gIHJlbW92ZWRDaGlsZE5vZGVzID0gdGhpcy5yZW1vdmVDaGlsZE5vZGVzKHJlbW92ZWRDaGlsZE5vZGVzKTtcblxuICByZXR1cm4gcmVtb3ZlZENoaWxkTm9kZXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkTm9kZXMocmVtb3ZlZENoaWxkTm9kZXMpIHtcbiAgaWYgKHJlbW92ZWRDaGlsZE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICByZW1vdmVkQ2hpbGROb2RlcyA9IFtcbiAgICAgIC4uLnRoaXMuY2hpbGROb2Rlc1xuICAgIF07XG4gIH1cblxuICBjb25zdCByZW1vdmVkQ2hpbGROb2Rlc0xlbmd0aCA9IHJlbW92ZWRDaGlsZE5vZGVzLmxlbmd0aDtcblxuICBpZiAocmVtb3ZlZENoaWxkTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmaXJzdFJlcGxhY2VkQ2hpbGROb2RlID0gZmlyc3QocmVtb3ZlZENoaWxkTm9kZXMpLFxuICAgICAgICBmaXJzdEluZGV4ID0gdGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoZmlyc3RSZXBsYWNlZENoaWxkTm9kZSksXG4gICAgICAgIHN0YXJ0SW5kZXggPSBmaXJzdEluZGV4LCAvLy9cbiAgICAgICAgZGVsZXRlQ291bnQgPSByZW1vdmVkQ2hpbGROb2Rlc0xlbmd0aCwgLy8vXG4gICAgICAgIGFkZGVkQ2hpbGROb2RlcyA9IFtdO1xuXG4gIHJlbW92ZWRDaGlsZE5vZGVzID0gdGhpcy5zcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCBhZGRlZENoaWxkTm9kZXMpO1xuXG4gIHJldHVybiByZW1vdmVkQ2hpbGROb2Rlcztcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNoaWxkTm9kZShyZXBsYWNlZENoaWxkTm9kZSwgcmVwbGFjZW1lbnRDaGlsZE5vZGVzKSB7XG4gIGNvbnN0IHJlcGxhY2VkQ2hpbGROb2RlcyA9IFtcbiAgICByZXBsYWNlZENoaWxkTm9kZVxuICBdO1xuXG4gIHRoaXMucmVwbGFjZUNoaWxkTm9kZXMocmVwbGFjZWRDaGlsZE5vZGVzLCByZXBsYWNlbWVudENoaWxkTm9kZXMpO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlQ2hpbGROb2RlcyhyZXBsYWNlZENoaWxkTm9kZXMsIHJlcGxhY2VtZW50Q2hpbGROb2Rlcykge1xuICBjb25zdCByZXBsYWNlZENoaWxkTm9kZXNMZW5ndGggPSByZXBsYWNlZENoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICBmaXJzdFJlcGxhY2VkQ2hpbGROb2RlID0gZmlyc3QocmVwbGFjZWRDaGlsZE5vZGVzKSxcbiAgICAgICAgZmlyc3RJbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGZpcnN0UmVwbGFjZWRDaGlsZE5vZGUpLFxuICAgICAgICBzdGFydEluZGV4ID0gZmlyc3RJbmRleCwgLy8vXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gcmVwbGFjZWRDaGlsZE5vZGVzTGVuZ3RoOyAvLy9cblxuICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIHJlcGxhY2VtZW50Q2hpbGROb2Rlcyk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoaWxkTm9kZShhcHBlbmRlZENoaWxkTm9kZSkge1xuICBjb25zdCBhcHBlbmRlZENoaWxkTm9kZXMgPSBbXG4gICAgYXBwZW5kZWRDaGlsZE5vZGVcbiAgXTtcblxuICB0aGlzLmFwcGVuZENoaWxkTm9kZXMoYXBwZW5kZWRDaGlsZE5vZGVzKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGROb2RlcyhhcHBlbmRlZENoaWxkTm9kZXMpIHtcbiAgY29uc3QgYWRkZWRDaGlsZE5vZGVzID0gYXBwZW5kZWRDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgc3RhcnRJbmRleCA9IG11bHRpcGxpY2l0eTsgIC8vL1xuXG4gIHRoaXMuYWRkQ2hpbGROb2RlcyhhZGRlZENoaWxkTm9kZXMsIHN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBwcmVwZW5kQ2hpbGROb2RlKHByZXBlbmRlZENoaWxkTm9kZSkge1xuICBjb25zdCBwcmVwZW5kZWRDaGlsZE5vZGVzID0gW1xuICAgIHByZXBlbmRlZENoaWxkTm9kZVxuICBdO1xuXG4gIHRoaXMucHJlcGVuZENoaWxkTm9kZXMocHJlcGVuZGVkQ2hpbGROb2Rlcyk7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmRDaGlsZE5vZGVzKHByZXBlbmRlZENoaWxkTm9kZXMpIHtcbiAgY29uc3QgYWRkZWRDaGlsZE5vZGVzID0gcHJlcGVuZGVkQ2hpbGROb2RlcywgIC8vL1xuICAgICAgICBzdGFydEluZGV4ID0gMDtcblxuICB0aGlzLmFkZENoaWxkTm9kZXMoYWRkZWRDaGlsZE5vZGVzLCBzdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgYWRkZWRDaGlsZE5vZGVzID0gW10pIHtcbiAgY29uc3QgcmVtb3ZlZENoaWxkTm9kZXMgPSB0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCAuLi5hZGRlZENoaWxkTm9kZXMpO1xuXG4gIHRoaXMucmVzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZShyZW1vdmVkQ2hpbGROb2Rlcyk7XG5cbiAgdGhpcy5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZShhZGRlZENoaWxkTm9kZXMpO1xuXG4gIHJldHVybiByZW1vdmVkQ2hpbGROb2Rlcztcbn1cblxuZnVuY3Rpb24gc2xpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGVuZEluZGV4ID0gSW5maW5pdHkpIHtcbiAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgcmV0dXJuIGNoaWxkTm9kZXM7XG59XG5cbmNvbnN0IG5vZGVNaXhpbnMgPSB7XG4gIGdldE11bHRpcGxpY2l0eSxcbiAgbWFwQ2hpbGROb2RlLFxuICBzb21lQ2hpbGROb2RlLFxuICBmaW5kQ2hpbGROb2RlLFxuICBldmVyeUNoaWxkTm9kZSxcbiAgZmlsdGVyQ2hpbGROb2RlLFxuICByZWR1Y2VDaGlsZE5vZGUsXG4gIGZvckVhY2hDaGlsZE5vZGUsXG4gIGZvcndhcmRzU29tZUNoaWxkTm9kZSxcbiAgYmFja3dhcmRzU29tZUNoaWxkTm9kZSxcbiAgaW5kZXhPZkNoaWxkTm9kZSxcbiAgc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUsXG4gIHJlc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUsXG4gIGFkZENoaWxkTm9kZSxcbiAgYWRkQ2hpbGROb2RlcyxcbiAgcmVtb3ZlQ2hpbGROb2RlLFxuICByZW1vdmVDaGlsZE5vZGVzLFxuICByZXBsYWNlQ2hpbGROb2RlLFxuICByZXBsYWNlQ2hpbGROb2RlcyxcbiAgYXBwZW5kQ2hpbGROb2RlLFxuICBhcHBlbmRDaGlsZE5vZGVzLFxuICBwcmVwZW5kQ2hpbGROb2RlLFxuICBwcmVwZW5kQ2hpbGROb2RlcyxcbiAgc3BsaWNlQ2hpbGROb2RlcyxcbiAgc2xpY2VDaGlsZE5vZGVzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBub2RlTWl4aW5zO1xuIl0sIm5hbWVzIjpbImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJmb3J3YXJkc1NvbWUiLCJiYWNrd2FyZHNTb21lIiwiZ2V0TXVsdGlwbGljaXR5IiwiY2hpbGROb2Rlc0xlbmd0aCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJtdWx0aXBsaWNpdHkiLCJtYXBDaGlsZE5vZGUiLCJjYWxsYmFjayIsIm1hcCIsInNvbWVDaGlsZE5vZGUiLCJzb21lIiwiZmluZENoaWxkTm9kZSIsImZpbmQiLCJldmVyeUNoaWxkTm9kZSIsImV2ZXJ5IiwiZmlsdGVyQ2hpbGROb2RlIiwiZmlsdGVyIiwicmVkdWNlQ2hpbGROb2RlIiwiaW5pdGlhbFZhbHVlIiwicmVkdWNlIiwiZm9yRWFjaENoaWxkTm9kZSIsImZvckVhY2giLCJmb3J3YXJkc1NvbWVDaGlsZE5vZGUiLCJiYWNrd2FyZHNTb21lQ2hpbGROb2RlIiwiaW5kZXhPZkNoaWxkTm9kZSIsImNoaWxkTm9kZSIsImluZGV4T2YiLCJzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSIsInVuZGVmaW5lZCIsInBhcmVudE5vZGUiLCJzZXRQYXJlbnROb2RlIiwicmVzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSIsImFkZENoaWxkTm9kZSIsImFkZGVkQ2hpbGROb2RlIiwic3RhcnRJbmRleCIsImFkZGVkQ2hpbGROb2RlcyIsImFkZENoaWxkTm9kZXMiLCJkZWxldGVDb3VudCIsInNwbGljZUNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGUiLCJyZW1vdmVkQ2hpbGROb2RlIiwicmVtb3ZlZENoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGVzIiwicmVtb3ZlZENoaWxkTm9kZXNMZW5ndGgiLCJmaXJzdFJlcGxhY2VkQ2hpbGROb2RlIiwiZmlyc3RJbmRleCIsInJlcGxhY2VDaGlsZE5vZGUiLCJyZXBsYWNlZENoaWxkTm9kZSIsInJlcGxhY2VtZW50Q2hpbGROb2RlcyIsInJlcGxhY2VkQ2hpbGROb2RlcyIsInJlcGxhY2VDaGlsZE5vZGVzIiwicmVwbGFjZWRDaGlsZE5vZGVzTGVuZ3RoIiwiYXBwZW5kQ2hpbGROb2RlIiwiYXBwZW5kZWRDaGlsZE5vZGUiLCJhcHBlbmRlZENoaWxkTm9kZXMiLCJhcHBlbmRDaGlsZE5vZGVzIiwicHJlcGVuZENoaWxkTm9kZSIsInByZXBlbmRlZENoaWxkTm9kZSIsInByZXBlbmRlZENoaWxkTm9kZXMiLCJwcmVwZW5kQ2hpbGROb2RlcyIsInNwbGljZSIsInNsaWNlQ2hpbGROb2RlcyIsImVuZEluZGV4IiwiSW5maW5pdHkiLCJzbGljZSIsIm5vZGVNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQTRNQTs7O2VBQUE7Ozt5QkExTStCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvQixJQUFRQSxRQUF1Q0MseUJBQWMsQ0FBckRELE9BQU9FLGVBQWdDRCx5QkFBYyxDQUE5Q0MsY0FBY0MsZ0JBQWtCRix5QkFBYyxDQUFoQ0U7QUFFN0IsU0FBU0M7SUFDUCxJQUFNQyxtQkFBbUIsSUFBSSxDQUFDQyxVQUFVLENBQUNDLE1BQU0sRUFDekNDLGVBQWVILGtCQUFtQixHQUFHO0lBRTNDLE9BQU9HO0FBQ1Q7QUFFQSxTQUFTQyxhQUFhQyxRQUFRO0lBQUksT0FBTyxJQUFJLENBQUNKLFVBQVUsQ0FBQ0ssR0FBRyxDQUFDRDtBQUFXO0FBRXhFLFNBQVNFLGNBQWNGLFFBQVE7SUFBSSxPQUFPLElBQUksQ0FBQ0osVUFBVSxDQUFDTyxJQUFJLENBQUNIO0FBQVc7QUFFMUUsU0FBU0ksY0FBY0osUUFBUTtJQUFJLE9BQU8sSUFBSSxDQUFDSixVQUFVLENBQUNTLElBQUksQ0FBQ0w7QUFBVztBQUUxRSxTQUFTTSxlQUFlTixRQUFRO0lBQUksT0FBTyxJQUFJLENBQUNKLFVBQVUsQ0FBQ1csS0FBSyxDQUFDUDtBQUFXO0FBRTVFLFNBQVNRLGdCQUFnQlIsUUFBUTtJQUFJLE9BQU8sSUFBSSxDQUFDSixVQUFVLENBQUNhLE1BQU0sQ0FBQ1Q7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
|
package/lib/node/nonTerminal.js
CHANGED
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _necessary = require("necessary");
|
|
12
12
|
var _occamlexers = require("occam-lexers");
|
|
13
|
+
var _node = /*#__PURE__*/ _interop_require_default(require("../mixins/node"));
|
|
13
14
|
var _nonTerminalNode = /*#__PURE__*/ _interop_require_default(require("../parseTree/nonTerminalNode"));
|
|
14
15
|
function _array_like_to_array(arr, len) {
|
|
15
16
|
if (len == null || len > arr.length) len = arr.length;
|
|
@@ -92,7 +93,7 @@ function _is_native_reflect_construct() {
|
|
|
92
93
|
return !!result;
|
|
93
94
|
})();
|
|
94
95
|
}
|
|
95
|
-
var first = _necessary.arrayUtilities.first, match = _necessary.arrayUtilities.match,
|
|
96
|
+
var first = _necessary.arrayUtilities.first, match = _necessary.arrayUtilities.match, opaqueSpecialSymbol = _occamlexers.specialSymbols.opaque, semiOpaqueSpecialSymbol = _occamlexers.specialSymbols.semiOpaque;
|
|
96
97
|
var NonTerminalNode = /*#__PURE__*/ function() {
|
|
97
98
|
function NonTerminalNode(ruleName, parentNode, childNodes, opacity, precedence) {
|
|
98
99
|
_class_call_check(this, NonTerminalNode);
|
|
@@ -139,6 +140,12 @@ var NonTerminalNode = /*#__PURE__*/ function() {
|
|
|
139
140
|
this.ruleName = ruleName;
|
|
140
141
|
}
|
|
141
142
|
},
|
|
143
|
+
{
|
|
144
|
+
key: "setParentNode",
|
|
145
|
+
value: function setParentNode(parentNode) {
|
|
146
|
+
this.parentNode = parentNode;
|
|
147
|
+
}
|
|
148
|
+
},
|
|
142
149
|
{
|
|
143
150
|
key: "setChildNodes",
|
|
144
151
|
value: function setChildNodes(childNodes) {
|
|
@@ -147,9 +154,9 @@ var NonTerminalNode = /*#__PURE__*/ function() {
|
|
|
147
154
|
}
|
|
148
155
|
},
|
|
149
156
|
{
|
|
150
|
-
key: "
|
|
151
|
-
value: function
|
|
152
|
-
this.
|
|
157
|
+
key: "setOpacity",
|
|
158
|
+
value: function setOpacity(opacity) {
|
|
159
|
+
this.opacity = opacity;
|
|
153
160
|
}
|
|
154
161
|
},
|
|
155
162
|
{
|
|
@@ -158,12 +165,6 @@ var NonTerminalNode = /*#__PURE__*/ function() {
|
|
|
158
165
|
this.precedence = precedence;
|
|
159
166
|
}
|
|
160
167
|
},
|
|
161
|
-
{
|
|
162
|
-
key: "setOpacity",
|
|
163
|
-
value: function setOpacity(opacity) {
|
|
164
|
-
this.opacity = opacity;
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
168
|
{
|
|
168
169
|
key: "isOpaque",
|
|
169
170
|
value: function isOpaque() {
|
|
@@ -321,167 +322,10 @@ var NonTerminalNode = /*#__PURE__*/ function() {
|
|
|
321
322
|
}
|
|
322
323
|
},
|
|
323
324
|
{
|
|
324
|
-
key: "
|
|
325
|
-
value: function
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
},
|
|
329
|
-
{
|
|
330
|
-
key: "someChildNode",
|
|
331
|
-
value: function someChildNode(callback) {
|
|
332
|
-
return this.childNodes.some(callback);
|
|
333
|
-
}
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
key: "findChildNode",
|
|
337
|
-
value: function findChildNode(callback) {
|
|
338
|
-
return this.childNodes.find(callback);
|
|
339
|
-
}
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
key: "everyChildNode",
|
|
343
|
-
value: function everyChildNode(callback) {
|
|
344
|
-
return this.childNodes.every(callback);
|
|
345
|
-
}
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
key: "filterChildNode",
|
|
349
|
-
value: function filterChildNode(callback) {
|
|
350
|
-
return this.childNodes.filter(callback);
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
key: "reduceChildNode",
|
|
355
|
-
value: function reduceChildNode(callback, initialValue) {
|
|
356
|
-
return this.childNodes.reduce(callback, initialValue);
|
|
357
|
-
}
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
key: "forEachChildNode",
|
|
361
|
-
value: function forEachChildNode(callback) {
|
|
362
|
-
this.childNodes.forEach(callback);
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
{
|
|
366
|
-
key: "forwardsSomeChildNode",
|
|
367
|
-
value: function forwardsSomeChildNode(callback) {
|
|
368
|
-
return forwardsSome(this.childNodes, callback);
|
|
369
|
-
}
|
|
370
|
-
},
|
|
371
|
-
{
|
|
372
|
-
key: "backwardsSomeChildNode",
|
|
373
|
-
value: function backwardsSomeChildNode(callback) {
|
|
374
|
-
return backwardsSome(this.childNodes, callback);
|
|
375
|
-
}
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
key: "indexOfChildNode",
|
|
379
|
-
value: function indexOfChildNode(childNode) {
|
|
380
|
-
return this.childNodes.indexOf(childNode);
|
|
381
|
-
}
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
key: "setChildNodesParentNode",
|
|
385
|
-
value: function setChildNodesParentNode(childNodes) {
|
|
386
|
-
if (childNodes === undefined) {
|
|
387
|
-
childNodes = _to_consumable_array(this.childNodes);
|
|
388
|
-
}
|
|
389
|
-
var parentNode = this;
|
|
390
|
-
childNodes.forEach(function(childNode) {
|
|
391
|
-
childNode.setParentNode(parentNode);
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
key: "resetChildNodesParentNode",
|
|
397
|
-
value: function resetChildNodesParentNode(childNodes) {
|
|
398
|
-
if (childNodes === undefined) {
|
|
399
|
-
childNodes = _to_consumable_array(this.childNodes);
|
|
400
|
-
}
|
|
401
|
-
var parentNode = null;
|
|
402
|
-
childNodes.forEach(function(childNode) {
|
|
403
|
-
childNode.setParentNode(parentNode);
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
key: "addChildNode",
|
|
409
|
-
value: function addChildNode(addedChildNode, startIndex) {
|
|
410
|
-
var addedChildNodes = [
|
|
411
|
-
addedChildNode
|
|
412
|
-
];
|
|
413
|
-
this.addChildNodes(addedChildNodes, startIndex);
|
|
414
|
-
}
|
|
415
|
-
},
|
|
416
|
-
{
|
|
417
|
-
key: "addChildNodes",
|
|
418
|
-
value: function addChildNodes(addedChildNodes, startIndex) {
|
|
419
|
-
var deleteCount = 0;
|
|
420
|
-
this.spliceChildNodes(startIndex, deleteCount, addedChildNodes);
|
|
421
|
-
}
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
key: "removeChildNode",
|
|
425
|
-
value: function removeChildNode(removedChildNode) {
|
|
426
|
-
var removedChildNodes;
|
|
427
|
-
removedChildNodes = [
|
|
428
|
-
removedChildNode
|
|
429
|
-
];
|
|
430
|
-
removedChildNodes = this.removeChildNodes(removedChildNodes);
|
|
431
|
-
return removedChildNodes;
|
|
432
|
-
}
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
key: "removeChildNodes",
|
|
436
|
-
value: function removeChildNodes(removedChildNodes) {
|
|
437
|
-
if (removedChildNodes === undefined) {
|
|
438
|
-
removedChildNodes = _to_consumable_array(this.childNodes);
|
|
439
|
-
}
|
|
440
|
-
var removedChildNodesLength = removedChildNodes.length;
|
|
441
|
-
if (removedChildNodesLength === 0) {
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
var firstReplacedChildNode = first(removedChildNodes), firstIndex = this.childNodes.indexOf(firstReplacedChildNode), startIndex = firstIndex, deleteCount = removedChildNodesLength, addedChildNodes = [];
|
|
445
|
-
removedChildNodes = this.spliceChildNodes(startIndex, deleteCount, addedChildNodes);
|
|
446
|
-
return removedChildNodes;
|
|
447
|
-
}
|
|
448
|
-
},
|
|
449
|
-
{
|
|
450
|
-
key: "replaceChildNode",
|
|
451
|
-
value: function replaceChildNode(replacedChildNode, replacementChildNodes) {
|
|
452
|
-
var replacedChildNodes = [
|
|
453
|
-
replacedChildNode
|
|
454
|
-
];
|
|
455
|
-
this.replaceChildNodes(replacedChildNodes, replacementChildNodes);
|
|
456
|
-
}
|
|
457
|
-
},
|
|
458
|
-
{
|
|
459
|
-
key: "replaceChildNodes",
|
|
460
|
-
value: function replaceChildNodes(replacedChildNodes, replacementChildNodes) {
|
|
461
|
-
var replacedChildNodesLength = replacedChildNodes.length, firstReplacedChildNode = first(replacedChildNodes), firstIndex = this.childNodes.indexOf(firstReplacedChildNode), startIndex = firstIndex, deleteCount = replacedChildNodesLength; ///
|
|
462
|
-
this.spliceChildNodes(startIndex, deleteCount, replacementChildNodes);
|
|
463
|
-
}
|
|
464
|
-
},
|
|
465
|
-
{
|
|
466
|
-
key: "spliceChildNodes",
|
|
467
|
-
value: function spliceChildNodes(startIndex, deleteCount) {
|
|
468
|
-
var addedChildNodes = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
|
|
469
|
-
var _this_childNodes;
|
|
470
|
-
var removedChildNodes = (_this_childNodes = this.childNodes).splice.apply(_this_childNodes, [
|
|
471
|
-
startIndex,
|
|
472
|
-
deleteCount
|
|
473
|
-
].concat(_to_consumable_array(addedChildNodes)));
|
|
474
|
-
this.resetChildNodesParentNode(removedChildNodes);
|
|
475
|
-
this.setChildNodesParentNode(addedChildNodes);
|
|
476
|
-
return removedChildNodes;
|
|
477
|
-
}
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
key: "sliceChildNodes",
|
|
481
|
-
value: function sliceChildNodes(startIndex) {
|
|
482
|
-
var endIndex = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : Infinity;
|
|
483
|
-
var childNodes = this.childNodes.slice(startIndex, endIndex);
|
|
484
|
-
return childNodes;
|
|
325
|
+
key: "asParseTree",
|
|
326
|
+
value: function asParseTree(tokens) {
|
|
327
|
+
var nonTerminalNode = this, nonTerminalNodeParseTree = _nonTerminalNode.default.fromNonTerminalNodeAndTokens(nonTerminalNode, tokens), parseTree = nonTerminalNodeParseTree; ///
|
|
328
|
+
return parseTree;
|
|
485
329
|
}
|
|
486
330
|
},
|
|
487
331
|
{
|
|
@@ -524,10 +368,13 @@ var NonTerminalNode = /*#__PURE__*/ function() {
|
|
|
524
368
|
}
|
|
525
369
|
},
|
|
526
370
|
{
|
|
527
|
-
key: "
|
|
528
|
-
value: function
|
|
529
|
-
|
|
530
|
-
|
|
371
|
+
key: "destroy",
|
|
372
|
+
value: function destroy() {
|
|
373
|
+
this.forEachChildNode(function(childNode) {
|
|
374
|
+
childNode.destroy();
|
|
375
|
+
});
|
|
376
|
+
this.parentNode = null;
|
|
377
|
+
this.childNodes = null;
|
|
531
378
|
}
|
|
532
379
|
},
|
|
533
380
|
{
|
|
@@ -581,5 +428,6 @@ function cloneChildNodes(childNodes) {
|
|
|
581
428
|
});
|
|
582
429
|
return childNodes;
|
|
583
430
|
}
|
|
431
|
+
Object.assign(NonTerminalNode.prototype, _node.default);
|
|
584
432
|
|
|
585
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmNvbnN0IHsgZmlyc3QsIG1hdGNoLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBvcGFxdWU6IG9wYXF1ZVNwZWNpYWxTeW1ib2wgLCBzZW1pT3BhcXVlOiBzZW1pT3BhcXVlU3BlY2lhbFN5bWJvbCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldE9wYWNpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcbiAgfVxuXG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlY2VkZW5jZTtcbiAgfVxuXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eSxcbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIHNldE9wYWNpdHkob3BhY2l0eSkge1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4O1xuXG4gICAgdGhpcy5mb3J3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpO1xuXG4gICAgICBpZiAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucykge1xuICAgIGxldCBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4O1xuXG4gICAgdGhpcy5iYWNrd2FyZHNTb21lQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZE5vZGU7IC8vL1xuXG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VucyhzaWduaWZpY2FudFRva2VucyA9IFtdKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY2hpbGROb2RlLmdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VucztcbiAgfVxuXG4gIGdldERlc2NlbmRhbnROb2RlcyhkZXNjZW5kYW50Tm9kZXMgPSBbXSkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnROb2RlID0gdGhpczsgLy8vXG5cbiAgICBkZXNjZW5kYW50Tm9kZXMucHVzaChkZXNjZW5kYW50Tm9kZSk7XG5cbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGU7ICAvLy9cblxuICAgICAgICBub25UZXJtaW5hbE5vZGUuZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVzY2VuZGFudE5vZGVzO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JOb2RlcygpIHtcbiAgICBjb25zdCBhbmNlc3Rvck5vZGVzID0gW107XG5cbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRoaXMucGFyZW50Tm9kZTtcblxuICAgIHdoaWxlIChwYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhbmNlc3Rvck5vZGUgPSBwYXJlbnROb2RlOyAgLy8vXG5cbiAgICAgIGFuY2VzdG9yTm9kZXMucHVzaChhbmNlc3Rvck5vZGUpO1xuXG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRQYXJlbnROb2RlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yTm9kZXM7XG4gIH1cblxuICBnZXRNdWx0aXBsaWNpdHkoKSB7XG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IHRoaXMuY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgbXVsdGlwbGljaXR5ID0gY2hpbGROb2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIG11bHRpcGxpY2l0eTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBlbXB0eSA9IChtdWx0aXBsaWNpdHkgPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBtdWx0aXBsaWNpdHkgPSB0aGlzLmdldE11bHRpcGxpY2l0eSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gKG11bHRpcGxpY2l0eSA9PT0gMSk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBpc0xvd2VyUHJlY2VkZW5jZShydWxlTmFtZSwgcHJlY2VkZW5jZSkge1xuICAgIGxldCBsb3dlclByZWNlZGVuY2U7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlID0gZmlyc3QodGhpcy5jaGlsZE5vZGVzKTtcblxuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmlyc3RDaGlsZE5vZGUuaXNMb3dlclByZWNlZGVuY2UocnVsZU5hbWUsIHByZWNlZGVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSAoKHRoaXMucnVsZU5hbWUgPT09IHJ1bGVOYW1lKSAmJiAodGhpcy5wcmVjZWRlbmNlIDwgcHJlY2VkZW5jZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc1VucHJlY2VkZW50ZWQoKSB7XG4gICAgbGV0IHVucHJlY2VkZW50ZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0aGlzLmNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlKSA9PiB7ICAvLy9cbiAgICAgICAgY29uc3QgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKHRoaXMucnVsZU5hbWUsIHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5wcmVjZWRlbnRlZDtcbiAgfVxuXG4gIG1hcENoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLm1hcChjYWxsYmFjayk7IH1cblxuICBzb21lQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmNoaWxkTm9kZXMuc29tZShjYWxsYmFjayk7IH1cblxuICBmaW5kQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmNoaWxkTm9kZXMuZmluZChjYWxsYmFjayk7IH1cblxuICBldmVyeUNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmV2ZXJ5KGNhbGxiYWNrKTsgfVxuXG4gIGZpbHRlckNoaWxkTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihjYWxsYmFjayk7IH1cblxuICByZWR1Y2VDaGlsZE5vZGUoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkgeyByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLnJlZHVjZShjYWxsYmFjaywgaW5pdGlhbFZhbHVlKTsgfVxuXG4gIGZvckVhY2hDaGlsZE5vZGUoY2FsbGJhY2spIHsgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goY2FsbGJhY2spOyB9XG5cbiAgZm9yd2FyZHNTb21lQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCBjYWxsYmFjayk7IH1cblxuICBiYWNrd2FyZHNTb21lQ2hpbGROb2RlKGNhbGxiYWNrKSB7IHJldHVybiBiYWNrd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgY2FsbGJhY2spOyB9XG5cbiAgaW5kZXhPZkNoaWxkTm9kZShjaGlsZE5vZGUpIHsgcmV0dXJuIHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkTm9kZSk7IH1cblxuICBzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZShjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGROb2RlcyA9IFtcbiAgICAgICAgLi4udGhpcy5jaGlsZE5vZGVzXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNoaWxkTm9kZS5zZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZShjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGROb2RlcyA9IFtcbiAgICAgICAgLi4udGhpcy5jaGlsZE5vZGVzXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBudWxsO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNoaWxkTm9kZS5zZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQ2hpbGROb2RlKGFkZGVkQ2hpbGROb2RlLCBzdGFydEluZGV4KSB7XG4gICAgY29uc3QgYWRkZWRDaGlsZE5vZGVzID0gW1xuICAgICAgICBhZGRlZENoaWxkTm9kZVxuICAgIF07XG5cbiAgICB0aGlzLmFkZENoaWxkTm9kZXMoYWRkZWRDaGlsZE5vZGVzLCBzdGFydEluZGV4KTtcbiAgfVxuXG4gIGFkZENoaWxkTm9kZXMoYWRkZWRDaGlsZE5vZGVzLCBzdGFydEluZGV4KSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAwO1xuXG4gICAgdGhpcy5zcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCBhZGRlZENoaWxkTm9kZXMpO1xuICB9XG5cbiAgcmVtb3ZlQ2hpbGROb2RlKHJlbW92ZWRDaGlsZE5vZGUpIHtcbiAgICBsZXQgcmVtb3ZlZENoaWxkTm9kZXM7XG5cbiAgICByZW1vdmVkQ2hpbGROb2RlcyA9IFtcbiAgICAgIHJlbW92ZWRDaGlsZE5vZGVcbiAgICBdO1xuXG4gICAgcmVtb3ZlZENoaWxkTm9kZXMgPSB0aGlzLnJlbW92ZUNoaWxkTm9kZXMocmVtb3ZlZENoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIHJlbW92ZWRDaGlsZE5vZGVzO1xuICB9XG5cbiAgcmVtb3ZlQ2hpbGROb2RlcyhyZW1vdmVkQ2hpbGROb2Rlcykge1xuICAgIGlmIChyZW1vdmVkQ2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZW1vdmVkQ2hpbGROb2RlcyA9IFtcbiAgICAgICAgLi4udGhpcy5jaGlsZE5vZGVzXG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbW92ZWRDaGlsZE5vZGVzTGVuZ3RoID0gcmVtb3ZlZENoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJlbW92ZWRDaGlsZE5vZGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RSZXBsYWNlZENoaWxkTm9kZSA9IGZpcnN0KHJlbW92ZWRDaGlsZE5vZGVzKSxcbiAgICAgICAgICBmaXJzdEluZGV4ID0gdGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoZmlyc3RSZXBsYWNlZENoaWxkTm9kZSksXG4gICAgICAgICAgc3RhcnRJbmRleCA9IGZpcnN0SW5kZXgsIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gcmVtb3ZlZENoaWxkTm9kZXNMZW5ndGgsIC8vL1xuICAgICAgICAgIGFkZGVkQ2hpbGROb2RlcyA9IFtdO1xuXG4gICAgcmVtb3ZlZENoaWxkTm9kZXMgPSB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG5cbiAgICByZXR1cm4gcmVtb3ZlZENoaWxkTm9kZXM7XG4gIH1cblxuICByZXBsYWNlQ2hpbGROb2RlKHJlcGxhY2VkQ2hpbGROb2RlLCByZXBsYWNlbWVudENoaWxkTm9kZXMpIHtcbiAgICBjb25zdCByZXBsYWNlZENoaWxkTm9kZXMgPSBbXG4gICAgICByZXBsYWNlZENoaWxkTm9kZVxuICAgIF07XG5cbiAgICB0aGlzLnJlcGxhY2VDaGlsZE5vZGVzKHJlcGxhY2VkQ2hpbGROb2RlcywgcmVwbGFjZW1lbnRDaGlsZE5vZGVzKTtcbiAgfVxuXG4gIHJlcGxhY2VDaGlsZE5vZGVzKHJlcGxhY2VkQ2hpbGROb2RlcywgcmVwbGFjZW1lbnRDaGlsZE5vZGVzKSB7XG4gICAgY29uc3QgcmVwbGFjZWRDaGlsZE5vZGVzTGVuZ3RoID0gcmVwbGFjZWRDaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBmaXJzdFJlcGxhY2VkQ2hpbGROb2RlID0gZmlyc3QocmVwbGFjZWRDaGlsZE5vZGVzKSxcbiAgICAgICAgICBmaXJzdEluZGV4ID0gdGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoZmlyc3RSZXBsYWNlZENoaWxkTm9kZSksXG4gICAgICAgICAgc3RhcnRJbmRleCA9IGZpcnN0SW5kZXgsIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gcmVwbGFjZWRDaGlsZE5vZGVzTGVuZ3RoOyAvLy9cblxuICAgIHRoaXMuc3BsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBkZWxldGVDb3VudCwgcmVwbGFjZW1lbnRDaGlsZE5vZGVzKTtcbiAgfVxuXG4gIHNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2RlcyA9IFtdKSB7XG4gICAgY29uc3QgcmVtb3ZlZENoaWxkTm9kZXMgPSB0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCAuLi5hZGRlZENoaWxkTm9kZXMpO1xuXG4gICAgdGhpcy5yZXNldENoaWxkTm9kZXNQYXJlbnROb2RlKHJlbW92ZWRDaGlsZE5vZGVzKTtcblxuICAgIHRoaXMuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoYWRkZWRDaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiByZW1vdmVkQ2hpbGROb2RlcztcbiAgfVxuXG4gIHNsaWNlQ2hpbGROb2RlcyhzdGFydEluZGV4LCBlbmRJbmRleCA9IEluZmluaXR5KSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICByZXR1cm4gY2hpbGROb2RlcztcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoID0gSW5maW5pdHksIGV4YWN0bHkgPSBmYWxzZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKHRoaXMucnVsZU5hbWUgPT09IG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkgPSBub25UZXJtaW5hbE5vZGUuZ2V0T3BhY2l0eSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wYWNpdHkgPT09IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkpIHtcbiAgICAgICAgICBjb25zdCBwcmVjZWRlbmNlID0gdGhpcy5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgICAgICBpZiAocHJlY2VkZW5jZSA9PT0gbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgZGVwdGgtLTtcblxuICAgICAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoKHRoaXMuY2hpbGROb2Rlcywgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgKGNoaWxkTm9kZSwgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSA9IGNoaWxkTm9kZS5tYXRjaChub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUsIGRlcHRoLCBleGFjdGx5KTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgcmV3cml0ZSgpIHtcbiAgICBjb25zdCByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgPSBudWxsO1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgY2xvbmUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5ydWxlTmFtZSxcbiAgICAgICAgICBjaGlsZE5vZGVzID0gY2xvbmVDaGlsZE5vZGVzKHRoaXMuY2hpbGROb2RlcyksXG4gICAgICAgICAgb3BhY2l0eSA9IHRoaXMub3BhY2l0eSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eShDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChvcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wYWNpdHkgPSBjaGlsZE5vZGVzOyAvLy9cblxuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUNoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICBjaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4geyAgLy8vXG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7ICAvLy9cblxuICAgIHJldHVybiBjaGlsZE5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiBjaGlsZE5vZGVzO1xufVxuIl0sIm5hbWVzIjpbIk5vblRlcm1pbmFsTm9kZSIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJtYXRjaCIsImZvcndhcmRzU29tZSIsImJhY2t3YXJkc1NvbWUiLCJvcGFxdWUiLCJvcGFxdWVTcGVjaWFsU3ltYm9sIiwic3BlY2lhbFN5bWJvbHMiLCJzZW1pT3BhcXVlIiwic2VtaU9wYXF1ZVNwZWNpYWxTeW1ib2wiLCJydWxlTmFtZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGVzIiwib3BhY2l0eSIsInByZWNlZGVuY2UiLCJnZXRSdWxlTmFtZSIsImdldFBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVzIiwiZ2V0T3BhY2l0eSIsImdldFByZWNlZGVuY2UiLCJzZXRSdWxlTmFtZSIsInNldENoaWxkTm9kZXMiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJJbmZpbml0eSIsImFkZGVkQ2hpbGROb2RlcyIsInNwbGljZUNoaWxkTm9kZXMiLCJzZXRQYXJlbnROb2RlIiwic2V0UHJlY2VkZW5jZSIsInNldE9wYWNpdHkiLCJpc09wYXF1ZSIsImlzU2VtaU9wYXF1ZSIsImlzVHJhbnNwYXJlbnQiLCJpc1Rlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImlzTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlIiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJ0b2tlbnMiLCJmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImZvcndhcmRzU29tZUNoaWxkTm9kZSIsImNoaWxkTm9kZSIsIm5vZGUiLCJnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwibGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImJhY2t3YXJkc1NvbWVDaGlsZE5vZGUiLCJnZXRTaWduaWZpY2FudFRva2VucyIsInNpZ25pZmljYW50VG9rZW5zIiwiZm9yRWFjaCIsImdldERlc2NlbmRhbnROb2RlcyIsImRlc2NlbmRhbnROb2RlcyIsImRlc2NlbmRhbnROb2RlIiwicHVzaCIsImNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSIsImdldEFuY2VzdG9yTm9kZXMiLCJhbmNlc3Rvck5vZGVzIiwiYW5jZXN0b3JOb2RlIiwiZ2V0TXVsdGlwbGljaXR5IiwiY2hpbGROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm11bHRpcGxpY2l0eSIsImlzRW1wdHkiLCJlbXB0eSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzTG93ZXJQcmVjZWRlbmNlIiwibG93ZXJQcmVjZWRlbmNlIiwiZmlyc3RDaGlsZE5vZGUiLCJpc1VucHJlY2VkZW50ZWQiLCJ1bnByZWNlZGVudGVkIiwic29tZSIsImNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSIsIm1hcENoaWxkTm9kZSIsImNhbGxiYWNrIiwibWFwIiwic29tZUNoaWxkTm9kZSIsImZpbmRDaGlsZE5vZGUiLCJmaW5kIiwiZXZlcnlDaGlsZE5vZGUiLCJldmVyeSIsImZpbHRlckNoaWxkTm9kZSIsImZpbHRlciIsInJlZHVjZUNoaWxkTm9kZSIsImluaXRpYWxWYWx1ZSIsInJlZHVjZSIsImZvckVhY2hDaGlsZE5vZGUiLCJpbmRleE9mQ2hpbGROb2RlIiwiaW5kZXhPZiIsInNldENoaWxkTm9kZXNQYXJlbnROb2RlIiwidW5kZWZpbmVkIiwicmVzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSIsImFkZENoaWxkTm9kZSIsImFkZGVkQ2hpbGROb2RlIiwiYWRkQ2hpbGROb2RlcyIsInJlbW92ZUNoaWxkTm9kZSIsInJlbW92ZWRDaGlsZE5vZGUiLCJyZW1vdmVkQ2hpbGROb2RlcyIsInJlbW92ZUNoaWxkTm9kZXMiLCJyZW1vdmVkQ2hpbGROb2Rlc0xlbmd0aCIsImZpcnN0UmVwbGFjZWRDaGlsZE5vZGUiLCJmaXJzdEluZGV4IiwicmVwbGFjZUNoaWxkTm9kZSIsInJlcGxhY2VkQ2hpbGROb2RlIiwicmVwbGFjZW1lbnRDaGlsZE5vZGVzIiwicmVwbGFjZWRDaGlsZE5vZGVzIiwicmVwbGFjZUNoaWxkTm9kZXMiLCJyZXBsYWNlZENoaWxkTm9kZXNMZW5ndGgiLCJzcGxpY2UiLCJzbGljZUNoaWxkTm9kZXMiLCJlbmRJbmRleCIsInNsaWNlIiwiZGVwdGgiLCJleGFjdGx5IiwibWF0Y2hlcyIsIm5vZGVOb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsIm5vblRlcm1pbmFsTm9kZU9wYWNpdHkiLCJub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlIiwibm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSIsImNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJyZXdyaXRlIiwicmV3cml0dGVuTm9uVGVybWluYWxOb2RlIiwiYXNQYXJzZVRyZWUiLCJub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zIiwicGFyc2VUcmVlIiwiY2xvbmUiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJDbGFzcyIsImNvbnN0cnVjdG9yIiwiY2xvbmVDaGlsZE5vZGVzIiwiZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBVXFCQTs7O3lCQVJVOzJCQUNBO3NFQUVNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXJDLElBQVFDLFFBQThDQyx5QkFBYyxDQUE1REQsT0FBT0UsUUFBdUNELHlCQUFjLENBQXJEQyxPQUFPQyxlQUFnQ0YseUJBQWMsQ0FBOUNFLGNBQWNDLGdCQUFrQkgseUJBQWMsQ0FBaENHLGVBQzVCQyxBQUFRQyxzQkFBOERDLDJCQUFjLENBQXBGRixRQUE4QkcsQUFBWUMsMEJBQTRCRiwyQkFBYyxDQUF0REM7QUFFdkIs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
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL25vZGVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBmaXJzdCwgbWF0Y2ggfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBvcGFxdWU6IG9wYXF1ZVNwZWNpYWxTeW1ib2wgLCBzZW1pT3BhcXVlOiBzZW1pT3BhcXVlU3BlY2lhbFN5bWJvbCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldE9wYWNpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcbiAgfVxuXG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlY2VkZW5jZTtcbiAgfVxuXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIHNldENoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gSW5maW5pdHksXG4gICAgICAgICAgYWRkZWRDaGlsZE5vZGVzID0gY2hpbGROb2RlczsgIC8vL1xuXG4gICAgdGhpcy5zcGxpY2VDaGlsZE5vZGVzKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50LCBhZGRlZENoaWxkTm9kZXMpO1xuICB9XG5cbiAgc2V0T3BhY2l0eShvcGFjaXR5KSB7XG4gICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgfVxuXG4gIHNldFByZWNlZGVuY2UocHJlY2VkZW5jZSkge1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4O1xuXG4gICAgdGhpcy5mb3J3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpO1xuXG4gICAgICBpZiAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucykge1xuICAgIGxldCBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4O1xuXG4gICAgdGhpcy5iYWNrd2FyZHNTb21lQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZE5vZGU7IC8vL1xuXG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VucyhzaWduaWZpY2FudFRva2VucyA9IFtdKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY2hpbGROb2RlLmdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VucztcbiAgfVxuXG4gIGdldERlc2NlbmRhbnROb2RlcyhkZXNjZW5kYW50Tm9kZXMgPSBbXSkge1xuICAgIGNvbnN0IGRlc2NlbmRhbnROb2RlID0gdGhpczsgLy8vXG5cbiAgICBkZXNjZW5kYW50Tm9kZXMucHVzaChkZXNjZW5kYW50Tm9kZSk7XG5cbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgaWYgKGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGU7ICAvLy9cblxuICAgICAgICBub25UZXJtaW5hbE5vZGUuZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVzY2VuZGFudE5vZGVzO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JOb2RlcygpIHtcbiAgICBjb25zdCBhbmNlc3Rvck5vZGVzID0gW107XG5cbiAgICBsZXQgcGFyZW50Tm9kZSA9IHRoaXMucGFyZW50Tm9kZTtcblxuICAgIHdoaWxlIChwYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBhbmNlc3Rvck5vZGUgPSBwYXJlbnROb2RlOyAgLy8vXG5cbiAgICAgIGFuY2VzdG9yTm9kZXMucHVzaChhbmNlc3Rvck5vZGUpO1xuXG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRQYXJlbnROb2RlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9yTm9kZXM7XG4gIH1cblxuICBnZXRNdWx0aXBsaWNpdHkoKSB7XG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IHRoaXMuY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgbXVsdGlwbGljaXR5ID0gY2hpbGROb2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIG11bHRpcGxpY2l0eTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBlbXB0eSA9IChtdWx0aXBsaWNpdHkgPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBtdWx0aXBsaWNpdHkgPSB0aGlzLmdldE11bHRpcGxpY2l0eSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gKG11bHRpcGxpY2l0eSA9PT0gMSk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBpc0xvd2VyUHJlY2VkZW5jZShydWxlTmFtZSwgcHJlY2VkZW5jZSkge1xuICAgIGxldCBsb3dlclByZWNlZGVuY2U7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlID0gZmlyc3QodGhpcy5jaGlsZE5vZGVzKTtcblxuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmlyc3RDaGlsZE5vZGUuaXNMb3dlclByZWNlZGVuY2UocnVsZU5hbWUsIHByZWNlZGVuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSAoKHRoaXMucnVsZU5hbWUgPT09IHJ1bGVOYW1lKSAmJiAodGhpcy5wcmVjZWRlbmNlIDwgcHJlY2VkZW5jZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc1VucHJlY2VkZW50ZWQoKSB7XG4gICAgbGV0IHVucHJlY2VkZW50ZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0aGlzLmNoaWxkTm9kZXMuc29tZSgoY2hpbGROb2RlKSA9PiB7ICAvLy9cbiAgICAgICAgY29uc3QgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKHRoaXMucnVsZU5hbWUsIHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5wcmVjZWRlbnRlZDtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGggPSBJbmZpbml0eSwgZXhhY3RseSA9IGZhbHNlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBpZiAodGhpcy5ydWxlTmFtZSA9PT0gbm9uVGVybWluYWxOb2RlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlT3BhY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRPcGFjaXR5KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BhY2l0eSA9PT0gbm9uVGVybWluYWxOb2RlT3BhY2l0eSkge1xuICAgICAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSB0aGlzLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlID0gbm9uVGVybWluYWxOb2RlLmdldFByZWNlZGVuY2UoKTtcblxuICAgICAgICAgIGlmIChwcmVjZWRlbmNlID09PSBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICBkZXB0aC0tO1xuXG4gICAgICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2godGhpcy5jaGlsZE5vZGVzLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAoY2hpbGROb2RlLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlID0gY2hpbGROb2RlLm1hdGNoKG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSwgZGVwdGgsIGV4YWN0bHkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICByZXdyaXRlKCkge1xuICAgIGNvbnN0IHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSA9IG51bGw7XG5cbiAgICByZXR1cm4gcmV3cml0dGVuTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZvckVhY2hDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY2hpbGROb2RlLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGFyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gbnVsbDtcbiAgfVxuXG4gIGNsb25lKC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IGNsb25lQ2hpbGROb2Rlcyh0aGlzLmNoaWxkTm9kZXMpLFxuICAgICAgICAgIG9wYWNpdHkgPSB0aGlzLm9wYWNpdHksXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IHRoaXMucHJlY2VkZW5jZSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZE9wYWNpdHkoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAob3BhY2l0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcGFjaXR5ID0gY2hpbGROb2RlczsgLy8vXG5cbiAgICAgIGNoaWxkTm9kZXMgPSBydWxlTmFtZTsgIC8vL1xuXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMubWFwKChjaGlsZE5vZGUpID0+IHsgIC8vL1xuICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jbG9uZSgpOyAgLy8vXG5cbiAgICByZXR1cm4gY2hpbGROb2RlO1xuICB9KTtcblxuICByZXR1cm4gY2hpbGROb2Rlcztcbn1cblxuT2JqZWN0LmFzc2lnbihOb25UZXJtaW5hbE5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcbiJdLCJuYW1lcyI6WyJOb25UZXJtaW5hbE5vZGUiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwibWF0Y2giLCJvcGFxdWUiLCJvcGFxdWVTcGVjaWFsU3ltYm9sIiwic3BlY2lhbFN5bWJvbHMiLCJzZW1pT3BhcXVlIiwic2VtaU9wYXF1ZVNwZWNpYWxTeW1ib2wiLCJydWxlTmFtZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGVzIiwib3BhY2l0eSIsInByZWNlZGVuY2UiLCJnZXRSdWxlTmFtZSIsImdldFBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVzIiwiZ2V0T3BhY2l0eSIsImdldFByZWNlZGVuY2UiLCJzZXRSdWxlTmFtZSIsInNldFBhcmVudE5vZGUiLCJzZXRDaGlsZE5vZGVzIiwic3RhcnRJbmRleCIsImRlbGV0ZUNvdW50IiwiSW5maW5pdHkiLCJhZGRlZENoaWxkTm9kZXMiLCJzcGxpY2VDaGlsZE5vZGVzIiwic2V0T3BhY2l0eSIsInNldFByZWNlZGVuY2UiLCJpc09wYXF1ZSIsImlzU2VtaU9wYXF1ZSIsImlzVHJhbnNwYXJlbnQiLCJpc1Rlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImlzTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlIiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJ0b2tlbnMiLCJmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImZvcndhcmRzU29tZUNoaWxkTm9kZSIsImNoaWxkTm9kZSIsIm5vZGUiLCJnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwibGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImJhY2t3YXJkc1NvbWVDaGlsZE5vZGUiLCJnZXRTaWduaWZpY2FudFRva2VucyIsInNpZ25pZmljYW50VG9rZW5zIiwiZm9yRWFjaCIsImdldERlc2NlbmRhbnROb2RlcyIsImRlc2NlbmRhbnROb2RlcyIsImRlc2NlbmRhbnROb2RlIiwicHVzaCIsImNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSIsImdldEFuY2VzdG9yTm9kZXMiLCJhbmNlc3Rvck5vZGVzIiwiYW5jZXN0b3JOb2RlIiwiZ2V0TXVsdGlwbGljaXR5IiwiY2hpbGROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm11bHRpcGxpY2l0eSIsImlzRW1wdHkiLCJlbXB0eSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzTG93ZXJQcmVjZWRlbmNlIiwibG93ZXJQcmVjZWRlbmNlIiwiZmlyc3RDaGlsZE5vZGUiLCJpc1VucHJlY2VkZW50ZWQiLCJ1bnByZWNlZGVudGVkIiwic29tZSIsImNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSIsImFzUGFyc2VUcmVlIiwibm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2VucyIsInBhcnNlVHJlZSIsImRlcHRoIiwiZXhhY3RseSIsIm1hdGNoZXMiLCJub2RlTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJub25UZXJtaW5hbE5vZGVPcGFjaXR5Iiwibm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlIiwicmV3cml0ZSIsInJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSIsImRlc3Ryb3kiLCJmb3JFYWNoQ2hpbGROb2RlIiwiY2xvbmUiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJDbGFzcyIsImNvbnN0cnVjdG9yIiwiY2xvbmVDaGlsZE5vZGVzIiwic2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kT3BhY2l0eSIsInVuZGVmaW5lZCIsIm1hcCIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBV3FCQTs7O3lCQVRVOzJCQUNBOzJEQUVSO3NFQUNjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXJDLElBQVFDLFFBQWlCQyx5QkFBYyxDQUEvQkQsT0FBT0UsUUFBVUQseUJBQWMsQ0FBeEJDLE9BQ1BDLEFBQVFDLHNCQUE4REMsMkJBQWMsQ0FBcEZGLFFBQThCRyxBQUFZQywwQkFBNEJGLDJCQUFjLENBQXREQztBQUV2QixJQUFBLEFBQU1QLGdDQUFOO2FBQU1BLGdCQUNQUyxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFVBQVU7Z0NBRDlDYjtRQUVqQixJQUFJLENBQUNTLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFVBQVUsR0FBR0E7O2tCQU5EYjs7WUFTbkJjLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0wsUUFBUTtZQUN0Qjs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0wsVUFBVTtZQUN4Qjs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0wsVUFBVTtZQUN4Qjs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0wsT0FBTztZQUNyQjs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FB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
|