occam-parsers 23.3.22 → 23.3.23
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/lib/node/nonTerminal.js +14 -14
- package/package.json +1 -1
- package/src/node/nonTerminal.js +29 -29
package/lib/node/nonTerminal.js
CHANGED
|
@@ -143,19 +143,6 @@ class NonTerminalNode {
|
|
|
143
143
|
}
|
|
144
144
|
return unprecedented;
|
|
145
145
|
}
|
|
146
|
-
areChildNodesLowerPrecedence() {
|
|
147
|
-
let childNodesLowerPrecedence = false;
|
|
148
|
-
if (this.precedence !== null && this.precedence !== Infinity) {
|
|
149
|
-
const length = this.childNodes.length, lastIndex = length - 1, firstIndex = 0, strength = Math.abs(this.precedence), associativity = Math.sign(this.precedence);
|
|
150
|
-
childNodesLowerPrecedence = this.childNodes.some((childNode, index)=>{
|
|
151
|
-
const last = index === lastIndex, first = index === firstIndex, childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
|
|
152
|
-
if (childNodeLowerPrecedence) {
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
return childNodesLowerPrecedence;
|
|
158
|
-
}
|
|
159
146
|
isLowerPrecedence(associativity, strength, first, last) {
|
|
160
147
|
let lowerPrecedence;
|
|
161
148
|
if (false) {
|
|
@@ -184,6 +171,19 @@ class NonTerminalNode {
|
|
|
184
171
|
}
|
|
185
172
|
return lowerPrecedence;
|
|
186
173
|
}
|
|
174
|
+
areChildNodesLowerPrecedence() {
|
|
175
|
+
let childNodesLowerPrecedence = false;
|
|
176
|
+
if (this.precedence !== null && this.precedence !== Infinity) {
|
|
177
|
+
const length = this.childNodes.length, lastIndex = length - 1, firstIndex = 0, strength = Math.abs(this.precedence), associativity = Math.sign(this.precedence);
|
|
178
|
+
childNodesLowerPrecedence = this.childNodes.some((childNode, index)=>{
|
|
179
|
+
const last = index === lastIndex, first = index === firstIndex, childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
|
|
180
|
+
if (childNodeLowerPrecedence) {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return childNodesLowerPrecedence;
|
|
186
|
+
}
|
|
187
187
|
asParseTree(tokens) {
|
|
188
188
|
const nonTerminalNode = this, nonTerminalNodeParseTree = _nonTerminalNode.default.fromNonTerminalNodeAndTokens(nonTerminalNode, tokens), parseTree = nonTerminalNodeParseTree; ///
|
|
189
189
|
return parseTree;
|
|
@@ -254,4 +254,4 @@ function cloneChildNodes(childNodes) {
|
|
|
254
254
|
return childNodes;
|
|
255
255
|
}
|
|
256
256
|
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL25vZGVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eSxcbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICBzZXRPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIG51bGxpZnlQcmVjZWRlbmNlKCkge1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IG51bGw7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcykge1xuICAgIHJldHVybiBkZXNjZW5kYW50Tm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0TXVsdGlwbGljaXR5KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIG11bHRpcGxpY2l0eSA9IGNoaWxkTm9kZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBtdWx0aXBsaWNpdHk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgZW1wdHkgPSAobXVsdGlwbGljaXR5ID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IChtdWx0aXBsaWNpdHkgPT09IDEpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNQYWxhdGFibGUoKSB7XG4gICAgY29uc3QgdW5wYWxhdGFibGUgPSB0aGlzLmlzVW5wYWxhdGFibGUoKSxcbiAgICAgICAgICBwYWxhdGFibGUgPSAhdW5wYWxhdGFibGU7XG5cbiAgICByZXR1cm4gcGFsYXRhYmxlO1xuICB9XG5cbiAgaXNVbnBhbGF0YWJsZSgpIHtcbiAgICBsZXQgdW5wYWxhdGFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCksXG4gICAgICAgICAgdW5wcmVjZWRlbnRlZCA9IHRoaXMuaXNVbnByZWNlZGVudGVkKCk7XG5cbiAgICBpZiAoZW1wdHkgfHwgdW5wcmVjZWRlbnRlZCkge1xuICAgICAgdW5wYWxhdGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnBhbGF0YWJsZTtcbiAgfVxuXG4gIGlzVW5wcmVjZWRlbnRlZCgpIHtcbiAgICBsZXQgdW5wcmVjZWRlbnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSA9IHRoaXMuYXJlQ2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSgpO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnByZWNlZGVudGVkO1xuICB9XG5cbiAgYXJlQ2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSgpIHtcbiAgICBsZXQgY2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSA9IGZhbHNlO1xuXG4gICAgaWYgKCh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpICYmICh0aGlzLnByZWNlZGVuY2UgIT09IEluZmluaXR5KSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IChsZW5ndGggLSAxKSxcbiAgICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgICAgc3RyZW5ndGggPSBNYXRoLmFicyh0aGlzLnByZWNlZGVuY2UpLFxuICAgICAgICAgICAgYXNzb2NpYXRpdml0eSA9IE1hdGguc2lnbih0aGlzLnByZWNlZGVuY2UpO1xuXG4gICAgICBjaGlsZE5vZGVzTG93ZXJQcmVjZWRlbmNlID0gdGhpcy5jaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSwgaW5kZXgpID0+IHsgIC8vL1xuICAgICAgICBjb25zdCBsYXN0ID0gKGluZGV4ID09PSBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgICBmaXJzdCA9IChpbmRleCA9PT0gZmlyc3RJbmRleCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSA9IGNoaWxkTm9kZS5pc0xvd2VyUHJlY2VkZW5jZShhc3NvY2lhdGl2aXR5LCBzdHJlbmd0aCwgZmlyc3QsIGxhc3QpO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc0xvd2VyUHJlY2VkZW5jZShhc3NvY2lhdGl2aXR5LCBzdHJlbmd0aCwgZmlyc3QsIGxhc3QpIHtcbiAgICBsZXQgbG93ZXJQcmVjZWRlbmNlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByZWNlZGVuY2UgPT09IEluZmluaXR5KSB7XG4gICAgICBsb3dlclByZWNlZGVuY2UgPSB0aGlzLnNvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UgPSBjaGlsZE5vZGUuaXNMb3dlclByZWNlZGVuY2UoYXNzb2NpYXRpdml0eSwgc3RyZW5ndGgsIGZpcnN0LCBsYXN0KTtcblxuICAgICAgICBpZiAoY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJlbnRTdHJlbmd0aCA9IHN0cmVuZ3RoLCAgLy8vXG4gICAgICAgICAgICBwYXJlbnRBc3NvY2lhdGl2aXR5ID0gYXNzb2NpYXRpdml0eTsgIC8vL1xuXG4gICAgICBzdHJlbmd0aCA9IE1hdGguYWJzKHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAvLy9cbiAgICAgIH0gZWxzZSBpZiAoZmlyc3QpIHtcbiAgICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKHBhcmVudEFzc29jaWF0aXZpdHkgPCAwKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVuZ3RoIDwgcGFyZW50U3RyZW5ndGgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJlbmd0aCA8PSBwYXJlbnRTdHJlbmd0aCk7XG4gICAgICB9IGVsc2UgaWYgKGxhc3QpIHtcbiAgICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKHBhcmVudEFzc29jaWF0aXZpdHkgPCAwKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVuZ3RoIDw9IHBhcmVudFN0cmVuZ3RoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyZW5ndGggPCBwYXJlbnRTdHJlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb3dlclByZWNlZGVuY2UgPSAoc3RyZW5ndGggPCBwYXJlbnRTdHJlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvd2VyUHJlY2VkZW5jZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGggPSBJbmZpbml0eSwgZXhhY3RseSA9IGZhbHNlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBpZiAodGhpcy5ydWxlTmFtZSA9PT0gbm9uVGVybWluYWxOb2RlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlT3BhY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRPcGFjaXR5KCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3BhY2l0eSA9PT0gbm9uVGVybWluYWxOb2RlT3BhY2l0eSkge1xuICAgICAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSB0aGlzLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlID0gbm9uVGVybWluYWxOb2RlLmdldFByZWNlZGVuY2UoKTtcblxuICAgICAgICAgIGlmIChwcmVjZWRlbmNlID09PSBub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICBkZXB0aC0tO1xuXG4gICAgICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2godGhpcy5jaGlsZE5vZGVzLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAoY2hpbGROb2RlLCBub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlID0gY2hpbGROb2RlLm1hdGNoKG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSwgZGVwdGgsIGV4YWN0bHkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICByZXdyaXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUgPSB0aGlzOyAgLy8vXG5cbiAgICByZXR1cm4gcmV3cml0dGVuTm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZvckVhY2hDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY2hpbGROb2RlLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBudWxsO1xuICB9XG5cbiAgY2xvbmUoLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5ydWxlTmFtZSxcbiAgICAgICAgICBjaGlsZE5vZGVzID0gY2xvbmVDaGlsZE5vZGVzKHRoaXMuY2hpbGROb2RlcyksXG4gICAgICAgICAgb3BhY2l0eSA9IHRoaXMub3BhY2l0eSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAocHJlY2VkZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcmVjZWRlbmNlID0gb3BhY2l0eTsgLy8vXG5cbiAgICAgIG9wYWNpdHkgPSBjaGlsZE5vZGVzOyAvLy9cblxuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBudWxsLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgcGFyZW50Tm9kZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZS5zZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKE5vblRlcm1pbmFsTm9kZS5wcm90b3R5cGUsIG5vZGVNaXhpbnMpO1xuXG5mdW5jdGlvbiBjbG9uZUNoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICBjaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4geyAgLy8vXG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7ICAvLy9cblxuICAgIHJldHVybiBjaGlsZE5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiBjaGlsZE5vZGVzO1xufVxuIl0sIm5hbWVzIjpbIk5vblRlcm1pbmFsTm9kZSIsIm1hdGNoIiwiYXJyYXlVdGlsaXRpZXMiLCJvcGFxdWUiLCJvcGFxdWVTcGVjaWFsU3ltYm9sIiwic2VtaU9wYXF1ZSIsInNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIiwic3BlY2lhbFN5bWJvbHMiLCJydWxlTmFtZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGVzIiwib3BhY2l0eSIsInByZWNlZGVuY2UiLCJnZXRSdWxlTmFtZSIsImdldFBhcmVudE5vZGUiLCJnZXRDaGlsZE5vZGVzIiwiZ2V0T3BhY2l0eSIsImdldFByZWNlZGVuY2UiLCJzZXRSdWxlTmFtZSIsInNldFBhcmVudE5vZGUiLCJzZXRDaGlsZE5vZGVzIiwic3RhcnRJbmRleCIsImRlbGV0ZUNvdW50IiwiSW5maW5pdHkiLCJhZGRlZENoaWxkTm9kZXMiLCJzcGxpY2VDaGlsZE5vZGVzIiwic2V0T3BhY2l0eSIsInNldFByZWNlZGVuY2UiLCJudWxsaWZ5UHJlY2VkZW5jZSIsImlzT3BhcXVlIiwiaXNTZW1pT3BhcXVlIiwiaXNUcmFuc3BhcmVudCIsImlzVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJnZXREZXNjZW5kYW50Tm9kZXMiLCJkZXNjZW5kYW50Tm9kZXMiLCJnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsInRva2VucyIsImZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZm9yd2FyZHNTb21lQ2hpbGROb2RlIiwiY2hpbGROb2RlIiwibm9kZSIsImdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiYmFja3dhcmRzU29tZUNoaWxkTm9kZSIsImdldFNpZ25pZmljYW50VG9rZW5zIiwic2lnbmlmaWNhbnRUb2tlbnMiLCJmb3JFYWNoIiwiZ2V0TXVsdGlwbGljaXR5IiwiY2hpbGROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm11bHRpcGxpY2l0eSIsImlzRW1wdHkiLCJlbXB0eSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzUGFsYXRhYmxlIiwidW5wYWxhdGFibGUiLCJpc1VucGFsYXRhYmxlIiwicGFsYXRhYmxlIiwidW5wcmVjZWRlbnRlZCIsImlzVW5wcmVjZWRlbnRlZCIsImNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2UiLCJhcmVDaGlsZE5vZGVzTG93ZXJQcmVjZWRlbmNlIiwibGFzdEluZGV4IiwiZmlyc3RJbmRleCIsInN0cmVuZ3RoIiwiTWF0aCIsImFicyIsImFzc29jaWF0aXZpdHkiLCJzaWduIiwic29tZSIsImluZGV4IiwibGFzdCIsImZpcnN0IiwiY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlIiwiaXNMb3dlclByZWNlZGVuY2UiLCJsb3dlclByZWNlZGVuY2UiLCJzb21lQ2hpbGROb2RlIiwicGFyZW50U3RyZW5ndGgiLCJwYXJlbnRBc3NvY2lhdGl2aXR5IiwiYXNQYXJzZVRyZWUiLCJub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUiLCJmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zIiwicGFyc2VUcmVlIiwiZGVwdGgiLCJleGFjdGx5IiwibWF0Y2hlcyIsIm5vZGVOb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsIm5vblRlcm1pbmFsTm9kZU9wYWNpdHkiLCJub25UZXJtaW5hbE5vZGVQcmVjZWRlbmNlIiwibm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSIsImNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJyZXdyaXRlIiwiY29udGV4dCIsInJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSIsImRlc3Ryb3kiLCJmb3JFYWNoQ2hpbGROb2RlIiwiY2xvbmUiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJDbGFzcyIsImNsb25lQ2hpbGROb2RlcyIsInNldENoaWxkTm9kZXNQYXJlbnROb2RlIiwiZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlIiwidW5kZWZpbmVkIiwiT2JqZWN0IiwiYXNzaWduIiwicHJvdG90eXBlIiwibm9kZU1peGlucyIsIm1hcCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFxQkE7OzsyQkFUVTs2QkFDQTs2REFFUjt3RUFDYzs7Ozs7O0FBRXJDLE1BQU0sRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQzFCLEVBQUVDLFFBQVFDLG1CQUFtQixFQUFHQyxZQUFZQyx1QkFBdUIsRUFBRSxHQUFHQywyQkFBYztBQUU3RSxNQUFNUDtJQUNuQixZQUFZUSxRQUFRLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFVBQVUsQ0FBRTtRQUNqRSxJQUFJLENBQUNKLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENB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
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL25vblRlcm1pbmFsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgbm9kZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL25vZGVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGVcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IG9wYXF1ZTogb3BhcXVlU3BlY2lhbFN5bWJvbCAsIHNlbWlPcGFxdWU6IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICAgIHRoaXMub3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgZ2V0T3BhY2l0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGFjaXR5O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IDAsXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSBJbmZpbml0eSxcbiAgICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICB0aGlzLnNwbGljZUNoaWxkTm9kZXMoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQsIGFkZGVkQ2hpbGROb2Rlcyk7XG4gIH1cblxuICBzZXRPcGFjaXR5KG9wYWNpdHkpIHtcbiAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIG51bGxpZnlQcmVjZWRlbmNlKCkge1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IG51bGw7XG4gIH1cblxuICBpc09wYXF1ZSgpIHtcbiAgICBjb25zdCBvcGFxdWUgPSAodGhpcy5vcGFjaXR5ID09PSBvcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBvcGFxdWU7XG4gIH1cblxuICBpc1NlbWlPcGFxdWUoKSB7XG4gICAgY29uc3Qgc2VtaU9wYXF1ZSA9ICh0aGlzLm9wYWNpdHkgPT09IHNlbWlPcGFxdWVTcGVjaWFsU3ltYm9sKTtcblxuICAgIHJldHVybiBzZW1pT3BhcXVlO1xuICB9XG5cbiAgaXNUcmFuc3BhcmVudCgpIHtcbiAgICBjb25zdCBzZW1pT3BhcXVlID0gKHRoaXMub3BhY2l0eSA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2VtaU9wYXF1ZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0RGVzY2VuZGFudE5vZGVzKGRlc2NlbmRhbnROb2Rlcykge1xuICAgIHJldHVybiBkZXNjZW5kYW50Tm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2Vucyk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXg7XG5cbiAgICB0aGlzLmJhY2t3YXJkc1NvbWVDaGlsZE5vZGUoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleDtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW5zKHNpZ25pZmljYW50VG9rZW5zID0gW10pIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBjaGlsZE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbnMoc2lnbmlmaWNhbnRUb2tlbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5zO1xuICB9XG5cbiAgZ2V0TXVsdGlwbGljaXR5KCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIG11bHRpcGxpY2l0eSA9IGNoaWxkTm9kZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBtdWx0aXBsaWNpdHk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IG11bHRpcGxpY2l0eSA9IHRoaXMuZ2V0TXVsdGlwbGljaXR5KCksXG4gICAgICAgICAgZW1wdHkgPSAobXVsdGlwbGljaXR5ID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QgbXVsdGlwbGljaXR5ID0gdGhpcy5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IChtdWx0aXBsaWNpdHkgPT09IDEpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNQYWxhdGFibGUoKSB7XG4gICAgY29uc3QgdW5wYWxhdGFibGUgPSB0aGlzLmlzVW5wYWxhdGFibGUoKSxcbiAgICAgICAgICBwYWxhdGFibGUgPSAhdW5wYWxhdGFibGU7XG5cbiAgICByZXR1cm4gcGFsYXRhYmxlO1xuICB9XG5cbiAgaXNVbnBhbGF0YWJsZSgpIHtcbiAgICBsZXQgdW5wYWxhdGFibGUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCksXG4gICAgICAgICAgdW5wcmVjZWRlbnRlZCA9IHRoaXMuaXNVbnByZWNlZGVudGVkKCk7XG5cbiAgICBpZiAoZW1wdHkgfHwgdW5wcmVjZWRlbnRlZCkge1xuICAgICAgdW5wYWxhdGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnBhbGF0YWJsZTtcbiAgfVxuXG4gIGlzVW5wcmVjZWRlbnRlZCgpIHtcbiAgICBsZXQgdW5wcmVjZWRlbnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSA9IHRoaXMuYXJlQ2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSgpO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgIHVucHJlY2VkZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bnByZWNlZGVudGVkO1xuICB9XG5cbiAgaXNMb3dlclByZWNlZGVuY2UoYXNzb2NpYXRpdml0eSwgc3RyZW5ndGgsIGZpcnN0LCBsYXN0KSB7XG4gICAgbGV0IGxvd2VyUHJlY2VkZW5jZTtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh0aGlzLnByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcmVjZWRlbmNlID09PSBJbmZpbml0eSkge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gdGhpcy5zb21lQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlTG93ZXJQcmVjZWRlbmNlID0gY2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKGFzc29jaWF0aXZpdHksIHN0cmVuZ3RoLCBmaXJzdCwgbGFzdCk7XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyZW50U3RyZW5ndGggPSBzdHJlbmd0aCwgIC8vL1xuICAgICAgICBwYXJlbnRBc3NvY2lhdGl2aXR5ID0gYXNzb2NpYXRpdml0eTsgIC8vL1xuXG4gICAgICBzdHJlbmd0aCA9IE1hdGguYWJzKHRoaXMucHJlY2VkZW5jZSk7XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAvLy9cbiAgICAgIH0gZWxzZSBpZiAoZmlyc3QpIHtcbiAgICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKHBhcmVudEFzc29jaWF0aXZpdHkgPCAwKSA/XG4gICAgICAgICAgKHN0cmVuZ3RoIDwgcGFyZW50U3RyZW5ndGgpIDpcbiAgICAgICAgICAoc3RyZW5ndGggPD0gcGFyZW50U3RyZW5ndGgpO1xuICAgICAgfSBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IChwYXJlbnRBc3NvY2lhdGl2aXR5IDwgMCkgP1xuICAgICAgICAgIChzdHJlbmd0aCA8PSBwYXJlbnRTdHJlbmd0aCkgOlxuICAgICAgICAgIChzdHJlbmd0aCA8IHBhcmVudFN0cmVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IChzdHJlbmd0aCA8IHBhcmVudFN0cmVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG93ZXJQcmVjZWRlbmNlO1xuICB9XG5cbiAgYXJlQ2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSgpIHtcbiAgICBsZXQgY2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSA9IGZhbHNlO1xuXG4gICAgaWYgKCh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpICYmICh0aGlzLnByZWNlZGVuY2UgIT09IEluZmluaXR5KSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IChsZW5ndGggLSAxKSxcbiAgICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgICAgc3RyZW5ndGggPSBNYXRoLmFicyh0aGlzLnByZWNlZGVuY2UpLFxuICAgICAgICAgICAgYXNzb2NpYXRpdml0eSA9IE1hdGguc2lnbih0aGlzLnByZWNlZGVuY2UpO1xuXG4gICAgICBjaGlsZE5vZGVzTG93ZXJQcmVjZWRlbmNlID0gdGhpcy5jaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSwgaW5kZXgpID0+IHsgIC8vL1xuICAgICAgICBjb25zdCBsYXN0ID0gKGluZGV4ID09PSBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgICBmaXJzdCA9IChpbmRleCA9PT0gZmlyc3RJbmRleCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSA9IGNoaWxkTm9kZS5pc0xvd2VyUHJlY2VkZW5jZShhc3NvY2lhdGl2aXR5LCBzdHJlbmd0aCwgZmlyc3QsIGxhc3QpO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkTm9kZXNMb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoID0gSW5maW5pdHksIGV4YWN0bHkgPSBmYWxzZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKHRoaXMucnVsZU5hbWUgPT09IG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkgPSBub25UZXJtaW5hbE5vZGUuZ2V0T3BhY2l0eSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wYWNpdHkgPT09IG5vblRlcm1pbmFsTm9kZU9wYWNpdHkpIHtcbiAgICAgICAgICBjb25zdCBwcmVjZWRlbmNlID0gdGhpcy5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgICAgICBpZiAocHJlY2VkZW5jZSA9PT0gbm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgZGVwdGgtLTtcblxuICAgICAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IG1hdGNoKHRoaXMuY2hpbGROb2Rlcywgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgKGNoaWxkTm9kZSwgbm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSA9IGNoaWxkTm9kZS5tYXRjaChub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUsIGRlcHRoLCBleGFjdGx5KTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgcmV3cml0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgcmV3cml0dGVuTm9uVGVybWluYWxOb2RlID0gdGhpczsgIC8vL1xuXG4gICAgcmV0dXJuIHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3JFYWNoQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNoaWxkTm9kZS5kZXN0cm95KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xuXG4gICAgdGhpcy5jaGlsZE5vZGVzID0gbnVsbDtcbiAgfVxuXG4gIGNsb25lKC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IGNsb25lQ2hpbGROb2Rlcyh0aGlzLmNoaWxkTm9kZXMpLFxuICAgICAgICAgIG9wYWNpdHkgPSB0aGlzLm9wYWNpdHksXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IHRoaXMucHJlY2VkZW5jZSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlKENsYXNzLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlY2VkZW5jZSA9IG9wYWNpdHk7IC8vL1xuXG4gICAgICBvcGFjaXR5ID0gY2hpbGROb2RlczsgLy8vXG5cbiAgICAgIGNoaWxkTm9kZXMgPSBydWxlTmFtZTsgIC8vL1xuXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gbnVsbCxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIG9wYWNpdHksIHByZWNlZGVuY2UsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBub25UZXJtaW5hbE5vZGUuc2V0Q2hpbGROb2Rlc1BhcmVudE5vZGUoKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihOb25UZXJtaW5hbE5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZnVuY3Rpb24gY2xvbmVDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMubWFwKChjaGlsZE5vZGUpID0+IHsgIC8vL1xuICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jbG9uZSgpOyAgLy8vXG5cbiAgICByZXR1cm4gY2hpbGROb2RlO1xuICB9KTtcblxuICByZXR1cm4gY2hpbGROb2Rlcztcbn1cbiJdLCJuYW1lcyI6WyJOb25UZXJtaW5hbE5vZGUiLCJtYXRjaCIsImFycmF5VXRpbGl0aWVzIiwib3BhcXVlIiwib3BhcXVlU3BlY2lhbFN5bWJvbCIsInNlbWlPcGFxdWUiLCJzZW1pT3BhcXVlU3BlY2lhbFN5bWJvbCIsInNwZWNpYWxTeW1ib2xzIiwicnVsZU5hbWUiLCJwYXJlbnROb2RlIiwiY2hpbGROb2RlcyIsIm9wYWNpdHkiLCJwcmVjZWRlbmNlIiwiZ2V0UnVsZU5hbWUiLCJnZXRQYXJlbnROb2RlIiwiZ2V0Q2hpbGROb2RlcyIsImdldE9wYWNpdHkiLCJnZXRQcmVjZWRlbmNlIiwic2V0UnVsZU5hbWUiLCJzZXRQYXJlbnROb2RlIiwic2V0Q2hpbGROb2RlcyIsInN0YXJ0SW5kZXgiLCJkZWxldGVDb3VudCIsIkluZmluaXR5IiwiYWRkZWRDaGlsZE5vZGVzIiwic3BsaWNlQ2hpbGROb2RlcyIsInNldE9wYWNpdHkiLCJzZXRQcmVjZWRlbmNlIiwibnVsbGlmeVByZWNlZGVuY2UiLCJpc09wYXF1ZSIsImlzU2VtaU9wYXF1ZSIsImlzVHJhbnNwYXJlbnQiLCJpc1Rlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImlzTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlIiwiZ2V0RGVzY2VuZGFudE5vZGVzIiwiZGVzY2VuZGFudE5vZGVzIiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJ0b2tlbnMiLCJmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImZvcndhcmRzU29tZUNoaWxkTm9kZSIsImNoaWxkTm9kZSIsIm5vZGUiLCJnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwibGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImJhY2t3YXJkc1NvbWVDaGlsZE5vZGUiLCJnZXRTaWduaWZpY2FudFRva2VucyIsInNpZ25pZmljYW50VG9rZW5zIiwiZm9yRWFjaCIsImdldE11bHRpcGxpY2l0eSIsImNoaWxkTm9kZXNMZW5ndGgiLCJsZW5ndGgiLCJtdWx0aXBsaWNpdHkiLCJpc0VtcHR5IiwiZW1wdHkiLCJpc1Npbmd1bGFyIiwic2luZ3VsYXIiLCJpc1BhbGF0YWJsZSIsInVucGFsYXRhYmxlIiwiaXNVbnBhbGF0YWJsZSIsInBhbGF0YWJsZSIsInVucHJlY2VkZW50ZWQiLCJpc1VucHJlY2VkZW50ZWQiLCJjaGlsZE5vZGVzTG93ZXJQcmVjZWRlbmNlIiwiYXJlQ2hpbGROb2Rlc0xvd2VyUHJlY2VkZW5jZSIsImlzTG93ZXJQcmVjZWRlbmNlIiwiYXNzb2NpYXRpdml0eSIsInN0cmVuZ3RoIiwiZmlyc3QiLCJsYXN0IiwibG93ZXJQcmVjZWRlbmNlIiwic29tZUNoaWxkTm9kZSIsImNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSIsInBhcmVudFN0cmVuZ3RoIiwicGFyZW50QXNzb2NpYXRpdml0eSIsIk1hdGgiLCJhYnMiLCJsYXN0SW5kZXgiLCJmaXJzdEluZGV4Iiwic2lnbiIsInNvbWUiLCJpbmRleCIsImFzUGFyc2VUcmVlIiwibm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIiwiZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2VucyIsInBhcnNlVHJlZSIsImRlcHRoIiwiZXhhY3RseSIsIm1hdGNoZXMiLCJub2RlTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJub25UZXJtaW5hbE5vZGVPcGFjaXR5Iiwibm9uVGVybWluYWxOb2RlUHJlY2VkZW5jZSIsIm5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJub25UZXJtaW5hbE5vZGVDaGlsZE5vZGUiLCJjaGlsZE5vZGVNYXRjaGVzTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlIiwicmV3cml0ZSIsImNvbnRleHQiLCJyZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGUiLCJkZXN0cm95IiwiZm9yRWFjaENoaWxkTm9kZSIsImNsb25lIiwicmVtYWluaW5nQXJndW1lbnRzIiwiQ2xhc3MiLCJjbG9uZUNoaWxkTm9kZXMiLCJzZXRDaGlsZE5vZGVzUGFyZW50Tm9kZSIsImZyb21SdWxlTmFtZUNoaWxkTm9kZXNPcGFjaXR5QW5kUHJlY2VkZW5jZSIsInVuZGVmaW5lZCIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsIm5vZGVNaXhpbnMiLCJtYXAiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBcUJBOzs7MkJBVFU7NkJBQ0E7NkRBRVI7d0VBQ2M7Ozs7OztBQUVyQyxNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYyxFQUMxQixFQUFFQyxRQUFRQyxtQkFBbUIsRUFBR0MsWUFBWUMsdUJBQXVCLEVBQUUsR0FBR0MsMkJBQWM7QUFFN0UsTUFBTVA7SUFDbkIsWUFBWVEsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLENBQUU7UUFDakUsSUFBSSxDQUFDSixRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQ0wsUUFBUTtJQUN0QjtJQUVBTSxnQkFBZ0I7UUFD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
|
package/package.json
CHANGED
package/src/node/nonTerminal.js
CHANGED
|
@@ -193,30 +193,6 @@ export default class NonTerminalNode {
|
|
|
193
193
|
return unprecedented;
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
areChildNodesLowerPrecedence() {
|
|
197
|
-
let childNodesLowerPrecedence = false;
|
|
198
|
-
|
|
199
|
-
if ((this.precedence !== null) && (this.precedence !== Infinity)) {
|
|
200
|
-
const length = this.childNodes.length,
|
|
201
|
-
lastIndex = (length - 1),
|
|
202
|
-
firstIndex = 0,
|
|
203
|
-
strength = Math.abs(this.precedence),
|
|
204
|
-
associativity = Math.sign(this.precedence);
|
|
205
|
-
|
|
206
|
-
childNodesLowerPrecedence = this.childNodes.some((childNode, index) => { ///
|
|
207
|
-
const last = (index === lastIndex),
|
|
208
|
-
first = (index === firstIndex),
|
|
209
|
-
childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
|
|
210
|
-
|
|
211
|
-
if (childNodeLowerPrecedence) {
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return childNodesLowerPrecedence;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
196
|
isLowerPrecedence(associativity, strength, first, last) {
|
|
221
197
|
let lowerPrecedence;
|
|
222
198
|
|
|
@@ -234,7 +210,7 @@ export default class NonTerminalNode {
|
|
|
234
210
|
});
|
|
235
211
|
} else {
|
|
236
212
|
const parentStrength = strength, ///
|
|
237
|
-
|
|
213
|
+
parentAssociativity = associativity; ///
|
|
238
214
|
|
|
239
215
|
strength = Math.abs(this.precedence);
|
|
240
216
|
|
|
@@ -242,12 +218,12 @@ export default class NonTerminalNode {
|
|
|
242
218
|
///
|
|
243
219
|
} else if (first) {
|
|
244
220
|
lowerPrecedence = (parentAssociativity < 0) ?
|
|
245
|
-
|
|
246
|
-
|
|
221
|
+
(strength < parentStrength) :
|
|
222
|
+
(strength <= parentStrength);
|
|
247
223
|
} else if (last) {
|
|
248
224
|
lowerPrecedence = (parentAssociativity < 0) ?
|
|
249
|
-
|
|
250
|
-
|
|
225
|
+
(strength <= parentStrength) :
|
|
226
|
+
(strength < parentStrength);
|
|
251
227
|
} else {
|
|
252
228
|
lowerPrecedence = (strength < parentStrength);
|
|
253
229
|
}
|
|
@@ -256,6 +232,30 @@ export default class NonTerminalNode {
|
|
|
256
232
|
return lowerPrecedence;
|
|
257
233
|
}
|
|
258
234
|
|
|
235
|
+
areChildNodesLowerPrecedence() {
|
|
236
|
+
let childNodesLowerPrecedence = false;
|
|
237
|
+
|
|
238
|
+
if ((this.precedence !== null) && (this.precedence !== Infinity)) {
|
|
239
|
+
const length = this.childNodes.length,
|
|
240
|
+
lastIndex = (length - 1),
|
|
241
|
+
firstIndex = 0,
|
|
242
|
+
strength = Math.abs(this.precedence),
|
|
243
|
+
associativity = Math.sign(this.precedence);
|
|
244
|
+
|
|
245
|
+
childNodesLowerPrecedence = this.childNodes.some((childNode, index) => { ///
|
|
246
|
+
const last = (index === lastIndex),
|
|
247
|
+
first = (index === firstIndex),
|
|
248
|
+
childNodeLowerPrecedence = childNode.isLowerPrecedence(associativity, strength, first, last);
|
|
249
|
+
|
|
250
|
+
if (childNodeLowerPrecedence) {
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return childNodesLowerPrecedence;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
259
|
asParseTree(tokens) {
|
|
260
260
|
const nonTerminalNode = this, ///
|
|
261
261
|
nonTerminalNodeParseTree = NonTerminalNodeParseTree.fromNonTerminalNodeAndTokens(nonTerminalNode, tokens),
|