occam-nominal 1.0.556 → 1.0.565
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/element/assertion/subproof.js +3 -3
- package/lib/element/assumption.js +65 -78
- package/lib/element/claim/axiom.js +1 -2
- package/lib/element/link.js +11 -15
- package/lib/element/metavariable.js +1 -59
- package/lib/element/schema.js +17 -21
- package/lib/element/signature.js +10 -3
- package/lib/element/statement.js +1 -17
- package/lib/element/subproof.js +2 -3
- package/lib/example/nominal/bnf.js +1 -9
- package/lib/nonTerminalNodeMap.js +1 -7
- package/lib/preamble.js +1 -2
- package/lib/process/instantiate.js +2 -8
- package/lib/process/unify.js +2 -17
- package/lib/ruleNames.js +1 -13
- package/lib/utilities/element.js +1 -32
- package/lib/utilities/json.js +2 -2
- package/lib/utilities/string.js +1 -8
- package/package.json +5 -5
- package/src/element/assertion/subproof.js +2 -2
- package/src/element/assumption.js +85 -100
- package/src/element/claim/axiom.js +0 -2
- package/src/element/link.js +14 -19
- package/src/element/metavariable.js +0 -102
- package/src/element/schema.js +23 -31
- package/src/element/signature.js +19 -3
- package/src/element/statement.js +0 -26
- package/src/element/subproof.js +1 -3
- package/src/example/nominal/bnf.js +0 -8
- package/src/nonTerminalNodeMap.js +0 -9
- package/src/preamble.js +0 -1
- package/src/process/instantiate.js +0 -4
- package/src/process/unify.js +0 -23
- package/src/ruleNames.js +0 -3
- package/src/utilities/element.js +0 -40
- package/src/utilities/json.js +2 -2
- package/src/utilities/string.js +0 -8
- package/lib/element/substitution/frame.js +0 -187
- package/lib/node/equivalence.js +0 -23
- package/lib/node/equivalences.js +0 -18
- package/lib/node/substitution/frame.js +0 -40
- package/src/element/substitution/frame.js +0 -261
- package/src/node/equivalence.js +0 -16
- package/src/node/equivalences.js +0 -7
- package/src/node/substitution/frame.js +0 -37
package/lib/element/link.js
CHANGED
|
@@ -99,16 +99,18 @@ const _default = (0, _elements.define)(class Link extends _occamlanguages.Elemen
|
|
|
99
99
|
return forward(state, context, back);
|
|
100
100
|
}, back);
|
|
101
101
|
}
|
|
102
|
-
unifyLabel(label,
|
|
103
|
-
const
|
|
102
|
+
unifyLabel(label, generalContext, specificContext, forward, back) {
|
|
103
|
+
const context = specificContext, linkString = this.getString(), labelString = label.getString();
|
|
104
104
|
context.trace(`Unifying the '${labelString}' label with the '${linkString}' link...`);
|
|
105
|
-
const metavariable = label.getMetavariable(), labelContext = label.getContext()
|
|
105
|
+
const metavariable = label.getMetavariable(), labelContext = label.getContext();
|
|
106
|
+
specificContext = labelContext; ///
|
|
106
107
|
return (0, _context.join)((specificContext)=>{
|
|
107
108
|
return (0, _context.reconcile)((specificContext)=>{
|
|
108
109
|
return this.unifyMetavariable(metavariable, generalContext, specificContext, (generalContext, specificContext, back)=>{
|
|
109
110
|
specificContext.commit(context);
|
|
111
|
+
specificContext = context; ///
|
|
110
112
|
context.debug(`...unified the '${labelString}' label with the '${linkString}' link.`);
|
|
111
|
-
return forward(
|
|
113
|
+
return forward(generalContext, specificContext, back);
|
|
112
114
|
}, back);
|
|
113
115
|
}, specificContext);
|
|
114
116
|
}, specificContext, context);
|
|
@@ -116,16 +118,10 @@ const _default = (0, _elements.define)(class Link extends _occamlanguages.Elemen
|
|
|
116
118
|
unifyMetavariable(metavariable, generalContext, specificContext, forward, back) {
|
|
117
119
|
const context = specificContext, linkString = this.getString(), metavariableString = metavariable.getString();
|
|
118
120
|
context.trace(`Unifying the '${metavariableString}' metavariable with the '${linkString}' link...`);
|
|
119
|
-
return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
if (metavariableUnifies) {
|
|
125
|
-
context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
|
|
126
|
-
}
|
|
127
|
-
return continuation(metavariableUnifies);
|
|
128
|
-
});
|
|
121
|
+
return this.metavariable.unifyMetavariableIntrinsically(metavariable, generalContext, specificContext, (generalContext, specificContext, back)=>{
|
|
122
|
+
context.debug(`...unified the '${metavariableString}' metavariable with the '${linkString}' link.`);
|
|
123
|
+
return forward(generalContext, specificContext, back);
|
|
124
|
+
}, back);
|
|
129
125
|
}
|
|
130
126
|
toJSON() {
|
|
131
127
|
let json;
|
|
@@ -151,4 +147,4 @@ function metavariableFromLinkNode(linkNode, context) {
|
|
|
151
147
|
return metavariable;
|
|
152
148
|
}
|
|
153
149
|
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBsYWJlbC5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBsYWJlbENvbnRleHQgPSBsYWJlbC5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gbGFiZWxDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxpbmtTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5KSA9PiB7XG4gICAgICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkpIHtcbiAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihtZXRhdmFyaWFibGVVbmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkxpbmtcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBsaW5rO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgbGlua05vZGUgPSBpbnN0YW50aWF0ZUxpbmsoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBsaW5rTm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IG51bGwsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgbGluayA9IG5ldyBMaW5rKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsaW5rO1xuICB9XG59KTtcblxuZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlKGxpbmtOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsaW5rTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuIl0sIm5hbWVzIjpbImFsbCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIkxpbmsiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0TGlua05vZGUiLCJnZXROb2RlIiwibGlua05vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGFUeXBlIiwiaXNFcXVhbFRvIiwibGluayIsImxpbmtOb2RlTWF0Y2hlcyIsIm1hdGNoTGlua05vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kTGluayIsImZpbmRMaW5rQnlMaW5rTm9kZSIsImNvbXBhcmVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXIiLCJjb21wYXJlc1RvUGFyYW10ZXIiLCJzaW5ndWxhciIsImlzU2luZ3VsYXIiLCJwYXJhbWV0ZXJOYW1lIiwiZ2V0TmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwibGlua1N0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZU1ldGF2YXJpYWJsZSIsImJpbmQiLCJhZGRMaW5rIiwibWV0YVR5cGUiLCJyZWZlcmVuY2VNZXRhVHlwZU5hbWUiLCJSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUiLCJyZWZlcmVuY2VNZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvUmVmZXJlbmNlTWV0YVR5cGUiLCJpc01ldGFUeXBlRXF1YWxUbyIsIm1ldGFUeXBlU3RyaW5nIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwicmVmZXJlbmNlTWV0YVR5cGVTdHJpbmciLCJ1bmlmeUxhYmVsIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsImxhYmVsQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJ1bmlmeU1ldGF2YXJpYWJsZSIsImNvbW1pdCIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsIm1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImNvbnRpbnVhdGlvbiIsInRvSlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlTGluayIsIm1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVQrQzswQkFFeEI7NkJBQ1M7K0JBQ1M7eUJBQ0k7QUFFN0MsTUFBTSxFQUFFQSxHQUFHLEVBQUUsR0FBR0MscUNBQXFCO01BRXJDLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsYUFBYUMsdUJBQU87SUFDOUMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxZQUFZLENBQUU7UUFDM0QsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFlBQVksR0FBR0E7SUFDdEI7SUFFQUMsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDRCxZQUFZO0lBQzFCO0lBRUFFLGNBQWM7UUFDWixNQUFNSixPQUFPLElBQUksQ0FBQ0ssT0FBTyxJQUNuQkMsV0FBV04sTUFBTSxHQUFHO1FBRTFCLE9BQU9NO0lBQ1Q7SUFFQUMsc0JBQXNCO1FBQ3BCLE1BQU1DLG1CQUFtQixJQUFJLENBQUNOLFlBQVksQ0FBQ0csT0FBTztRQUVsRCxPQUFPRztJQUNUO0lBRUFDLGNBQWM7UUFBRSxPQUFPLElBQUksQ0FBQ1AsWUFBWSxDQUFDTyxXQUFXO0lBQUk7SUFFeERDLFVBQVVDLElBQUksRUFBRTtRQUNkLE1BQU1MLFdBQVdLLEtBQUtOLE9BQU8sSUFDdkJPLGtCQUFrQixJQUFJLENBQUNDLGFBQWEsQ0FBQ1AsV0FDckNRLFVBQVVGLGlCQUFrQixHQUFHO1FBRXJDLE9BQU9FO0lBQ1Q7SUFFQUQsY0FBY1AsUUFBUSxFQUFFO1FBQ3RCLE1BQU1OLE9BQU9NLFVBQ1BTLGNBQWMsSUFBSSxDQUFDQyxTQUFTLENBQUNoQixPQUM3Qlksa0JBQWtCRyxhQUFhLEdBQUc7UUFFeEMsT0FBT0g7SUFDVDtJQUVBSyxzQkFBc0JULGdCQUFnQixFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUNOLFlBQVksQ0FBQ2UscUJBQXFCLENBQUNUO0lBQW1CO0lBRTVHVSxTQUFTcEIsT0FBTyxFQUFFO1FBQ2hCLE1BQU1RLFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCTyxPQUFPYixRQUFRcUIsa0JBQWtCLENBQUNiO1FBRXhDLE9BQU9LO0lBQ1Q7SUFFQVMsaUJBQWlCQyxTQUFTLEVBQUU7UUFDMUIsSUFBSUMscUJBQXFCO1FBRXpCLE1BQU1DLFdBQVcsSUFBSSxDQUFDQyxVQUFVO1FBRWhDLElBQUlELFVBQVU7WUFDWixNQUFNRSxnQkFBZ0JKLFVBQVVLLE9BQU87WUFFdkMsSUFBSUQsa0JBQWtCLE1BQU07Z0JBQzFCLE1BQU1FLG1CQUFtQixJQUFJLENBQUNDLG1CQUFtQjtnQkFFakQsSUFBSUgsa0JBQWtCRSxrQkFBa0I7b0JBQ3RDTCxxQkFBcUI7Z0JBQ3ZCO1lBQ0Y7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQU8sU0FBU0MsS0FBSyxFQUFFaEMsT0FBTyxFQUFFaUMsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDdEMsSUFBSXJCO1FBRUosTUFBTXNCLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUksR0FBRztRQUV4Q3BDLFFBQVFxQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyxTQUFTLENBQUM7UUFFdER0QixPQUFPLElBQUksQ0FBQ08sUUFBUSxDQUFDcEI7UUFFckIsSUFBSWEsU0FBUyxNQUFNO1lBQ2pCYixRQUFRc0MsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFSCxXQUFXLDBCQUEwQixDQUFDO1lBRS9ELE9BQU9GLFFBQVFwQixNQUFNYixTQUFTa0M7UUFDaEM7UUFFQXJCLE9BQU8sSUFBSSxFQUFFLEdBQUc7UUFFaEIsTUFBTTBCLHVCQUF1QixJQUFJLENBQUNBLG9CQUFvQixDQUFDQyxJQUFJLENBQUMsSUFBSTtRQUVoRSxPQUFPN0MsSUFBSTtZQUNUNEM7U0FDRCxFQUFFUCxPQUFPaEMsU0FBUyxDQUFDZ0MsT0FBT2hDLFNBQVNrQztZQUNsQ2xDLFFBQVF5QyxPQUFPLENBQUM1QjtZQUVoQmIsUUFBUXNDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSCxXQUFXLE9BQU8sQ0FBQztZQUV0RCxPQUFPRixRQUFRcEIsTUFBTWIsU0FBU2tDO1FBQ2hDLEdBQUdBO0lBQ0w7SUFFQUsscUJBQXFCUCxLQUFLLEVBQUVoQyxPQUFPLEVBQUVpQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUNsRCxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFeENwQyxRQUFRcUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcseUJBQXlCLENBQUM7UUFFdEUsT0FBTyxJQUFJLENBQUMvQixZQUFZLENBQUMyQixRQUFRLENBQUNDLE9BQU9oQyxTQUFTLENBQUNJLGNBQWNKLFNBQVNrQztZQUN4RSxNQUFNUSxXQUFXdEMsYUFBYU8sV0FBVztZQUV6QyxJQUFJK0IsYUFBYSxNQUFNO2dCQUNyQixNQUFNQyx3QkFBd0JDLHVDQUF3QixFQUNoREMsb0JBQW9CN0MsUUFBUThDLDBCQUEwQixDQUFDSCx3QkFDdkRJLCtDQUErQzNDLGFBQWE0QyxpQkFBaUIsQ0FBQ0g7Z0JBRXBGLElBQUksQ0FBQ0UsOENBQThDO29CQUNqRCxNQUFNRSxpQkFBaUJQLFNBQVNOLFNBQVMsSUFDbkNjLHFCQUFxQjlDLGFBQWFnQyxTQUFTLElBQzNDZSwwQkFBMEJOLGtCQUFrQlQsU0FBUztvQkFFM0RwQyxRQUFRc0MsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFSCxXQUFXLFVBQVUsRUFBRWUsbUJBQW1CLGtCQUFrQixFQUFFRCxlQUFlLDJCQUEyQixFQUFFRSx3QkFBd0IsWUFBWSxDQUFDO29CQUVySyxPQUFPakI7Z0JBQ1Q7WUFDRjtZQUVBLElBQUksQ0FBQzlCLFlBQVksR0FBR0E7WUFFcEJKLFFBQVFzQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUgsV0FBVyx1QkFBdUIsQ0FBQztZQUV0RSxPQUFPRixRQUFRRCxPQUFPaEMsU0FBU2tDO1FBQ2pDLEdBQUdBO0lBQ0w7SUFFQWtCLFdBQVdDLEtBQUssRUFBRXJELE9BQU8sRUFBRWlDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ3hDLE1BQU1vQixjQUFjRCxNQUFNakIsU0FBUyxJQUM3QkQsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRXhDcEMsUUFBUXFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRWlCLFlBQVksa0JBQWtCLEVBQUVuQixXQUFXLFNBQVMsQ0FBQztRQUVwRixNQUFNL0IsZUFBZWlELE1BQU1oRCxlQUFlLElBQ3BDa0QsZUFBZUYsTUFBTUcsVUFBVSxJQUMvQkMsaUJBQWlCLElBQUksQ0FBQ0QsVUFBVSxJQUNoQ0Usa0JBQWtCSCxjQUFlLEdBQUc7UUFFMUMsT0FBT0ksSUFBQUEsYUFBSSxFQUFDLENBQUNEO1lBQ1gsT0FBT0UsSUFBQUEsa0JBQVMsRUFBQyxDQUFDRjtnQkFDaEIsT0FBTyxJQUFJLENBQUNHLGlCQUFpQixDQUFDekQsY0FBY3FELGdCQUFnQkMsaUJBQWlCLENBQUNELGdCQUFnQkMsaUJBQWlCeEI7b0JBQzdHd0IsZ0JBQWdCSSxNQUFNLENBQUM5RDtvQkFFdkJBLFFBQVFzQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRWdCLFlBQVksa0JBQWtCLEVBQUVuQixXQUFXLE9BQU8sQ0FBQztvQkFFcEYsT0FBT0YsUUFBUWpDLFNBQVNrQztnQkFDMUIsR0FBR0E7WUFDTCxHQUFHd0I7UUFDTCxHQUFHQSxpQkFBaUIxRDtJQUN0QjtJQUVBNkQsa0JBQWtCekQsWUFBWSxFQUFFcUQsY0FBYyxFQUFFQyxlQUFlLEVBQUV6QixPQUFPLEVBQUVDLElBQUksRUFBRTtRQUM5RSxNQUFNbEMsVUFBVTBELGlCQUNWdkIsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0JjLHFCQUFxQjlDLGFBQWFnQyxTQUFTO1FBRWpEcEMsUUFBUXFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRWEsbUJBQW1CLHlCQUF5QixFQUFFZixXQUFXLFNBQVMsQ0FBQztRQUVsRyxPQUFPLElBQUksQ0FBQy9CLFlBQVksQ0FBQzJELDhCQUE4QixDQUFDM0QsY0FBY3FELGdCQUFnQkMsaUJBQWlCLENBQUNNO1lBQ3RHLElBQUlDLHNCQUFzQjtZQUUxQixJQUFJRCxrQ0FBa0M7Z0JBQ3BDQyxzQkFBc0I7WUFDeEI7WUFFQSxJQUFJQSxxQkFBcUI7Z0JBQ3ZCakUsUUFBUXNDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFWSxtQkFBbUIseUJBQXlCLEVBQUVmLFdBQVcsT0FBTyxDQUFDO1lBQ3BHO1lBRUEsT0FBTytCLGFBQWFEO1FBQ3RCO0lBQ0Y7SUFFQUUsU0FBUztRQUNQLElBQUlDO1FBRUosTUFBTW5FLFNBQVMsSUFBSSxDQUFDbUMsU0FBUztRQUU3QmdDLE9BQU87WUFDTG5FO1FBQ0Y7UUFFQSxPQUFPbUU7SUFDVDtJQUVBLE9BQU9DLE9BQU8sT0FBTztJQUVyQixPQUFPQyxTQUFTRixJQUFJLEVBQUVwRSxPQUFPLEVBQUU7UUFDN0IsSUFBSWE7UUFFSjBELElBQUFBLG9CQUFXLEVBQUMsQ0FBQ3ZFO1lBQ1gsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR21FLE1BQ2I1RCxXQUFXZ0UsSUFBQUEsNEJBQWUsRUFBQ3ZFLFFBQVFELFVBQ25DRSxPQUFPTSxVQUNQTCxhQUFhLE1BQ2JDLGVBQWVxRSx5QkFBeUJqRSxVQUFVUjtZQUV4REEsVUFBVTtZQUVWYSxPQUFPLElBQUlmLEtBQUtFLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDO1FBQ3JELEdBQUdKO1FBRUgsT0FBT2E7SUFDVDtBQUNGO0FBRUEsU0FBUzRELHlCQUF5QmpFLFFBQVEsRUFBRVIsT0FBTztJQUNqRCxNQUFNVSxtQkFBbUJGLFNBQVNDLG1CQUFtQixJQUMvQ0wsZUFBZUosUUFBUTBFLGtDQUFrQyxDQUFDaEU7SUFFaEUsT0FBT047QUFDVCJ9
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xpbmsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUxpbmsgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgUkVGRVJFTkNFX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGpvaW4sIHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIExpbmsgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGlua05vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGxpbmtOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGFUeXBlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhsaW5rKSB7XG4gICAgY29uc3QgbGlua05vZGUgPSBsaW5rLmdldE5vZGUoKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTGlua05vZGUobGlua05vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBsaW5rTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hMaW5rTm9kZShsaW5rTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBsaW5rTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsaW5rTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbGlua05vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRMaW5rKGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5rTm9kZSA9IHRoaXMuZ2V0TGlua05vZGUoKSxcbiAgICAgICAgICBsaW5rID0gY29udGV4dC5maW5kTGlua0J5TGlua05vZGUobGlua05vZGUpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cblxuICBjb21wYXJlUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgIGxldCBjb21wYXJlc1RvUGFyYW10ZXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXIuZ2V0TmFtZSgpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlck5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICBjb21wYXJlc1RvUGFyYW10ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9QYXJhbXRlcjtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBjb25zdCBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgbGluayA9IHRoaXMuZmluZExpbmsoY29udGV4dCk7XG5cbiAgICBpZiAobGluayAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2xpbmtTdHJpbmd9JyBsaW5rIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobGluaywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgbGluayA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVNZXRhdmFyaWFibGUgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlTWV0YXZhcmlhYmxlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5hZGRMaW5rKGxpbmspO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xpbmtTdHJpbmd9JyBsaW5rLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChsaW5rLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyBtZXRhdmFyaWFibGUuLi4nYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmdldE1ldGFUeXBlKCk7XG5cbiAgICAgIGlmIChtZXRhVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VNZXRhVHlwZU5hbWUgPSBSRUZFUkVOQ0VfTUVUQV9UWVBFX05BTUUsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShyZWZlcmVuY2VNZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhyZWZlcmVuY2VNZXRhVHlwZSk7XG5cbiAgICAgICAgaWYgKCFtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZU1ldGFUeXBlU3RyaW5nID0gcmVmZXJlbmNlTWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bGlua1N0cmluZ30nIGxpbmsncyAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZSBzaG91bGQgYmUgdGhlICcke3JlZmVyZW5jZU1ldGFUeXBlU3RyaW5nfScgbWV0YS10eXBlLmApO1xuXG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluaydzIG1ldGF2YXJpYWJsZS4nYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbGlua1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwgd2l0aCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGxhYmVsLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgIGxhYmVsQ29udGV4dCA9IGxhYmVsLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGxhYmVsQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBsaW5rU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsaW5rU3RyaW5nfScgbGluay4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLnVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShtZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7bGlua1N0cmluZ30nIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiTGlua1wiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGxpbms7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBsaW5rTm9kZSA9IGluc3RhbnRpYXRlTGluayhzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGxpbmtOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MaW5rTm9kZShsaW5rTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBsaW5rID0gbmV3IExpbmsoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxpbms7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTGlua05vZGUobGlua05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGxpbmtOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG4iXSwibmFtZXMiOlsiYWxsIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiTGluayIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJtZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRMaW5rTm9kZSIsImdldE5vZGUiLCJsaW5rTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YVR5cGUiLCJpc0VxdWFsVG8iLCJsaW5rIiwibGlua05vZGVNYXRjaGVzIiwibWF0Y2hMaW5rTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRMaW5rIiwiZmluZExpbmtCeUxpbmtOb2RlIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInBhcmFtZXRlck5hbWUiLCJnZXROYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJsaW5rU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsInZhbGlkYXRlTWV0YXZhcmlhYmxlIiwiYmluZCIsImFkZExpbmsiLCJtZXRhVHlwZSIsInJlZmVyZW5jZU1ldGFUeXBlTmFtZSIsIlJFRkVSRU5DRV9NRVRBX1RZUEVfTkFNRSIsInJlZmVyZW5jZU1ldGFUeXBlIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9SZWZlcmVuY2VNZXRhVHlwZSIsImlzTWV0YVR5cGVFcXVhbFRvIiwibWV0YVR5cGVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJyZWZlcmVuY2VNZXRhVHlwZVN0cmluZyIsInVuaWZ5TGFiZWwiLCJsYWJlbCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwibGFiZWxTdHJpbmciLCJsYWJlbENvbnRleHQiLCJnZXRDb250ZXh0Iiwiam9pbiIsInJlY29uY2lsZSIsInVuaWZ5TWV0YXZhcmlhYmxlIiwiY29tbWl0IiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwidG9KU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVMaW5rIiwibWV0YXZhcmlhYmxlRnJvbUxpbmtOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUFBOzs7Z0NBVCtDOzBCQUV4Qjs2QkFDUzsrQkFDUzt5QkFDSTtBQUU3QyxNQUFNLEVBQUVBLEdBQUcsRUFBRSxHQUFHQyxxQ0FBcUI7TUFFckMsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFV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
|
|
@@ -11,7 +11,6 @@ Object.defineProperty(exports, "default", {
|
|
|
11
11
|
const _occamlanguages = require("occam-languages");
|
|
12
12
|
const _elements = /*#__PURE__*/ _interop_require_wildcard(require("../elements"));
|
|
13
13
|
const _context = require("../utilities/context");
|
|
14
|
-
const _state = require("../utilities/state");
|
|
15
14
|
const _instantiate = require("../process/instantiate");
|
|
16
15
|
const _json = require("../utilities/json");
|
|
17
16
|
const _unify = require("../process/unify");
|
|
@@ -253,31 +252,6 @@ const _default = (0, _elements.define)(class Metavariable extends _occamlanguage
|
|
|
253
252
|
return forward(strict, state, context, back);
|
|
254
253
|
}, back);
|
|
255
254
|
}
|
|
256
|
-
unifyFrame(frame, generalContext, specificContext, forward, back) {
|
|
257
|
-
const context = specificContext, frameString = frame.getString(), metavariableString = this.getString(); ///
|
|
258
|
-
context.trace(`Unifying the '${frameString}' frame with the '${metavariableString}' metavariable...`);
|
|
259
|
-
const frameMetavariableCompares = this.compareFrameMetavariable(frame, generalContext, specificContext);
|
|
260
|
-
if (frameMetavariableCompares) {
|
|
261
|
-
return forward(generalContext, specificContext, back);
|
|
262
|
-
}
|
|
263
|
-
const metavariable = this, metavariableNode = metavariable.getNode(), inferredSubstitution = context.findInferredSubstitutionByMetavariableNode(metavariableNode);
|
|
264
|
-
if (inferredSubstitution !== null) {
|
|
265
|
-
const inferredSubstitutionComparesToFrame = inferredSubstitution.compareFrame(frame, context);
|
|
266
|
-
if (inferredSubstitutionComparesToFrame) {
|
|
267
|
-
const inferredSubstitutionString = inferredSubstitution.getString();
|
|
268
|
-
context.trace(`The '${inferredSubstitutionString}' inferred substitution is already present.`);
|
|
269
|
-
return forward(generalContext, specificContext, back);
|
|
270
|
-
}
|
|
271
|
-
return back();
|
|
272
|
-
}
|
|
273
|
-
const { FrameSubstitution } = _elements.default, frameSubstitution = FrameSubstitution.fromFrameAndMetavariable(frame, metavariable, generalContext, specificContext);
|
|
274
|
-
return frameSubstitution.verify(context, (context, back)=>{
|
|
275
|
-
const inferredSubstitution = frameSubstitution; ///
|
|
276
|
-
context.addInferredSubstitution(inferredSubstitution);
|
|
277
|
-
context.debug(`...unified the '${frameString}' frame with the '${metavariableString}' metavariable.`);
|
|
278
|
-
return forward(generalContext, specificContext, back);
|
|
279
|
-
}, back);
|
|
280
|
-
}
|
|
281
255
|
unifyStatement(statement, generalContext, specificContext, forward, back) {
|
|
282
256
|
const context = specificContext, statementString = statement.getString(), metavariableString = this.getString(); ///
|
|
283
257
|
context.trace(`Unifying the '${statementString}' statement with the '${metavariableString}' metavariable...`);
|
|
@@ -329,38 +303,6 @@ const _default = (0, _elements.define)(class Metavariable extends _occamlanguage
|
|
|
329
303
|
return forward(generalContext, specificContext, back);
|
|
330
304
|
}, back);
|
|
331
305
|
}
|
|
332
|
-
compareFrameMetavariable(frame, generalContext, specificContext) {
|
|
333
|
-
let frameMetavariablCompares = false;
|
|
334
|
-
const context = specificContext, frameString = frame.getString(), metavariableString = this.getString(); ///
|
|
335
|
-
context.trace(`Comparing the '${frameString}' frame's metavariable to the '${metavariableString}' metavariable...`);
|
|
336
|
-
const generalContextFilePath = generalContext.getFilePath(), specificContextFilePath = specificContext.getFilePath();
|
|
337
|
-
if (generalContextFilePath === specificContextFilePath) {
|
|
338
|
-
const metavariableNode = this.getMetavariableNode(), metavariableNodeMatches = frame.matchMetavariableNode(metavariableNode);
|
|
339
|
-
if (metavariableNodeMatches) {
|
|
340
|
-
frameMetavariablCompares = true;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
if (frameMetavariablCompares) {
|
|
344
|
-
context.debug(`...compared the '${frameString}' frame's metavariable to the '${metavariableString}' metavariable.`);
|
|
345
|
-
}
|
|
346
|
-
return frameMetavariablCompares;
|
|
347
|
-
}
|
|
348
|
-
compareReferenceMetavariable(reference, generalContext, specificContext) {
|
|
349
|
-
let referenceMetavariableCompares = false;
|
|
350
|
-
const context = specificContext, referenceString = reference.getString(), metavariableString = this.getString(); ///
|
|
351
|
-
context.trace(`Comparing the '${referenceString}' reference's metavariable to the '${metavariableString}' metavariable...`);
|
|
352
|
-
const generalContextFilePath = generalContext.getFilePath(), specificContextFilePath = specificContext.getFilePath();
|
|
353
|
-
if (generalContextFilePath === specificContextFilePath) {
|
|
354
|
-
const metavariableNode = this.getMetavariableNode(), metavariableNodeMatches = reference.matchMetavariableNode(metavariableNode);
|
|
355
|
-
if (metavariableNodeMatches) {
|
|
356
|
-
referenceMetavariableCompares = true;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
if (referenceMetavariableCompares) {
|
|
360
|
-
context.trace(`...compared the '${referenceString}' reference's metavariable to the '${metavariableString}' metavariable.`);
|
|
361
|
-
}
|
|
362
|
-
return referenceMetavariableCompares;
|
|
363
|
-
}
|
|
364
306
|
compareStatementMetavariable(statement, generalContext, specificContext) {
|
|
365
307
|
let statementMetavariableCompares = false;
|
|
366
308
|
const context = specificContext, statementString = statement.getString(), metavariableString = this.getString(); ///
|
|
@@ -406,4 +348,4 @@ const _default = (0, _elements.define)(class Metavariable extends _occamlanguage
|
|
|
406
348
|
}
|
|
407
349
|
});
|
|
408
350
|
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L21ldGF2YXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGRlc2lzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlTWV0YXZhcmlhYmxlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IG1ldGFUeXBlRnJvbUpTT04sIG1ldGFUeXBlVG9NZXRhVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IHVuaWZ5TWV0YXZhcmlhYmxlLCB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlLCB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUsIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSwgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIE1ldGF2YXJpYWJsZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcbiAgICBcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLm1ldGFUeXBlID0gbWV0YVR5cGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRNZXRhVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhVHlwZTtcbiAgfVxuXG4gIHNldE1ldGFUeXBlKG1ldGFUeXBlKSB7XG4gICAgdGhpcy5tZXRhVHlwZSA9IG1ldGFUeXBlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTmFtZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICBpc01hbGZvcm1lZCgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbWFsZm9ybWVkID0gbWV0YXZhcmlhYmxlTm9kZS5pc01hbGZvcm1lZCgpO1xuXG4gICAgcmV0dXJuIG1hbGZvcm1lZDtcbiAgfVxuXG4gIGlzRGVjbGFyZWQoKSB7XG4gICAgY29uc3QgZGVjbGFyZWQgPSAodGhpcy5tZXRhVHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWQ7XG4gIH1cblxuICBpc0VxdWFsVG8obWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNNZXRhVHlwZUVxdWFsVG8obWV0YVR5cGUpIHsgcmV0dXJuIHRoaXMubWV0YVR5cGUuaXNFcXVhbFRvKG1ldGFUeXBlKTsgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZS5nZXROYW1lKCksXG4gICAgICAgICAgY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIGNvbXBhcmVzVG9NZXRhdmFyaWFibGUgPSBjb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9NZXRhdmFyaWFibGU7XG4gIH1cblxuICBjb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbmFtZU1ldGF2YXJpYWJsZU5hbWUgPSAodGhpcy5uYW1lID09PSBtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBjb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IG5hbWVNZXRhdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtYWxmb3JtZWQgPSB0aGlzLmlzTWFsZm9ybWVkKCk7XG5cbiAgICBpZiAobWFsZm9ybWVkKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgYmVjYXVzZSBpdCBpcyBtYWxmb3JtZWQuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyaWZ5VGVybSA9IHRoaXMudmVyaWZ5VGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZlcmlmeVR5cGUgPSB0aGlzLnZlcmlmeVR5cGUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmVyaWZ5VGVybSxcbiAgICAgIHZlcmlmeVR5cGVcbiAgICBdLCAgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5VGVybShjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyB0ZXJtLi4uYCk7XG5cbiAgICBpZiAodGhpcy50ZXJtICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGNhbiBvbmx5IGhhdmUgYSB0eXBlIGFuZCBub3QgYSB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyB0ZXJtLmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2ZXJpZnlUeXBlKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkcyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdHlwZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmIChiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJhY2sgPSBmb3J3YXJkOyAvLy9cblxuICAgICAgZm9yd2FyZCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICBjb250ZXh0ID0gc3RhdGU7ICAvLy9cblxuICAgICAgc3RhdGUgPSBzdHJpY3Q7IC8vL1xuXG4gICAgICBzdHJpY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YXZhcmlhYmxlO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIG1ldGF2YXJpYWJsZSA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZShjb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IHRoaXMudmFsaWRhdGVOYW1lLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVUeXBlID0gdGhpcy52YWxpZGF0ZVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICB2YWxpZGF0ZVR5cGUsXG4gICAgICB2YWxpZGF0ZVRlcm1cbiAgICBdLCBzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCAoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgbWV0YXZhcmlhYmxlID0gdGhpczsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobWV0YXZhcmlhYmxlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTmFtZShzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgbmFtZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGxldCBuYW1lVmFsaWRhdGVzID0gdHJ1ZTsgLy8vXG5cbiAgICBpZiAoZGVjbGFyZWRNZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKSxcbiAgICAgICAgICAgIG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHRoaXMubWV0YVR5cGUgPSBtZXRhVHlwZTtcblxuICAgICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgbWV0YS10eXBlIHRvIHRoZSAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICBuYW1lVmFsaWRhdGVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFuYW1lVmFsaWRhdGVzKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgbmFtZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKHN0cmljdCwgc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVUeXBlKHN0cmljdCwgc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nICB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdHlwZS4uLmApO1xuXG4gICAgbGV0IHR5cGVWYWxpZGF0ZXMgPSB0cnVlOyAvLy9cblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlUHJlc2VuZXQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZVByZXNlbmV0KSB7XG4gICAgICB0eXBlVmFsaWRhdGVzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlVmFsaWRhdGVzKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCAgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzIHR5cGUuYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAoZGVjbGFyZWRNZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMudGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgdGhpcy50ZXJtID0gdGVybTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzIHRlcm0uYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMudGVybSA9IHRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUZyYW1lKGZyYW1lLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBmcmFtZU1ldGF2YXJpYWJsZUNvbXBhcmVzID0gdGhpcy5jb21wYXJlRnJhbWVNZXRhdmFyaWFibGUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKGZyYW1lTWV0YXZhcmlhYmxlQ29tcGFyZXMpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gbWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9GcmFtZSA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmNvbXBhcmVGcmFtZShmcmFtZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9GcmFtZSkge1xuICAgICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvblN0cmluZyA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFRoZSAnJHtpbmZlcnJlZFN1YnN0aXR1dGlvblN0cmluZ30nIGluZmVycmVkIHN1YnN0aXR1dGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb24udmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGZyYW1lU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24oaW5mZXJyZWRTdWJzdGl0dXRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHdpdGggdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRNZXRhdmFyaWFibGVDb21wYXJlcyA9IHRoaXMuY29tcGFyZVN0YXRlbWVudE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudE1ldGF2YXJpYWJsZUNvbXBhcmVzKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgICAgc2libGluZ1N1YnN0aXR1dGlvbk5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFNpYmxpbmdTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IHNpYmxpbmdTdWJzdGl0dXRpb25Ob2RlLCAvLy9cbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9TdGF0ZW1lbnQgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5jb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25TdHJpbmcgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7aW5mZXJyZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBpbmZlcnJlZCBzdWJzdGl0dXRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cztcblxuICAgIGxldCBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRJbmZlcnJlZFN1YnN0aXR1dGlvbihpbmZlcnJlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZVVuaWZpZXM7XG5cbiAgICBkZWJ1Z2dlclxuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbE1ldGF2YXJpYWJsZSA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZyA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmcgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY01ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtnZW5lcmFsTWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBtZXRhdmFyaWFibGVVbmlmaWVzID0gdW5pZnlNZXRhdmFyaWFibGUoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljTWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2dlbmVyYWxNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVVuaWZpZXM7XG4gIH1cblxuICB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxNZXRhdmFyaWFibGUgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZSxcbiAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlU3RyaW5nID0gZ2VuZXJhbE1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlU3RyaW5nID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7Z2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBpbnRyaW5zaWNhbGx5Li4uYCk7XG5cbiAgICByZXR1cm4gdW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7Z2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBpbnRyaW5zaWNhbGx5LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGNvbXBhcmVGcmFtZU1ldGF2YXJpYWJsZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBmcmFtZU1ldGF2YXJpYWJsQ29tcGFyZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIG1ldGF2YXJpYWJsZSB0byB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dEZpbGVQYXRoID0gZ2VuZXJhbENvbnRleHQuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRGaWxlUGF0aCA9IHNwZWNpZmljQ29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgaWYgKGdlbmVyYWxDb250ZXh0RmlsZVBhdGggPT09IHNwZWNpZmljQ29udGV4dEZpbGVQYXRoKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksICAvLy9cbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgZnJhbWVNZXRhdmFyaWFibENvbXBhcmVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhbWVNZXRhdmFyaWFibENvbXBhcmVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIG1ldGF2YXJpYWJsZSB0byB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZU1ldGF2YXJpYWJsQ29tcGFyZXM7XG4gIH1cblxuICBjb21wYXJlUmVmZXJlbmNlTWV0YXZhcmlhYmxlKHJlZmVyZW5jZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCByZWZlcmVuY2VNZXRhdmFyaWFibGVDb21wYXJlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSdzIG1ldGF2YXJpYWJsZSB0byB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dEZpbGVQYXRoID0gZ2VuZXJhbENvbnRleHQuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHRGaWxlUGF0aCA9IHNwZWNpZmljQ29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgaWYgKGdlbmVyYWxDb250ZXh0RmlsZVBhdGggPT09IHNwZWNpZmljQ29udGV4dEZpbGVQYXRoKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZWZlcmVuY2VNZXRhdmFyaWFibGVDb21wYXJlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlZmVyZW5jZU1ldGF2YXJpYWJsZUNvbXBhcmVzKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGAuLi5jb21wYXJlZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlJ3MgbWV0YXZhcmlhYmxlIHRvIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZU1ldGF2YXJpYWJsZUNvbXBhcmVzO1xuICB9XG5cbiAgY29tcGFyZVN0YXRlbWVudE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50TWV0YXZhcmlhYmxlQ29tcGFyZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQncyBtZXRhdmFyaWFibGUgdG8gdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHRGaWxlUGF0aCA9IGdlbmVyYWxDb250ZXh0LmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0RmlsZVBhdGggPSBzcGVjaWZpY0NvbnRleHQuZ2V0RmlsZVBhdGgoKTtcblxuICAgIGlmIChnZW5lcmFsQ29udGV4dEZpbGVQYXRoID09PSBzcGVjaWZpY0NvbnRleHRGaWxlUGF0aCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzdGF0ZW1lbnQubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgc3RhdGVtZW50TWV0YXZhcmlhYmxlQ29tcGFyZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRNZXRhdmFyaWFibGVDb21wYXJlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCdzIG1ldGF2YXJpYWJsZSB0byB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVDb21wYXJlcztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IG1ldGFUeXBlSlNPTiA9IG1ldGFUeXBlVG9NZXRhVHlwZUpTT04odGhpcy5tZXRhVHlwZSksXG4gICAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUpTT04sICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludCxcbiAgICAgIG1ldGFUeXBlXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIk1ldGF2YXJpYWJsZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBpbnN0YW50aWF0ZU1ldGF2YXJpYWJsZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBuYW1lID0gbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgIG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBuYW1lLCB0ZXJtLCB0eXBlLCBtZXRhVHlwZSk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJhbGwiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJNZXRhdmFyaWFibGUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibmFtZSIsInRlcm0iLCJ0eXBlIiwibWV0YVR5cGUiLCJnZXROYW1lIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRNZXRhVHlwZSIsInNldE1ldGFUeXBlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJpc01hbGZvcm1lZCIsIm1hbGZvcm1lZCIsImlzRGVjbGFyZWQiLCJkZWNsYXJlZCIsImlzRXF1YWxUbyIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZXF1YWxUbyIsImlzTWV0YVR5cGVFcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImNvbXBhcmVNZXRhdmFyaWFibGUiLCJjb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSIsImNvbXBhcmVNZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZXNUb01ldGF2YXJpYWJsZSIsIm5hbWVNZXRhdmFyaWFibGVOYW1lIiwidmVyaWZ5IiwiZm9yd2FyZCIsImJhY2siLCJtZXRhdmFyaWFibGVTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmeVRlcm0iLCJiaW5kIiwidmVyaWZ5VHlwZSIsImRlYnVnIiwidHlwZU5hbWUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ2YWxpZGF0ZSIsInN0cmljdCIsInN0YXRlIiwidW5kZWZpbmVkIiwidmFsaWRhdGVOYW1lIiwidmFsaWRhdGVUeXBlIiwidmFsaWRhdGVUZXJtIiwiYWRkTWV0YXZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGUiLCJmaW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJuYW1lVmFsaWRhdGVzIiwibWV0YVR5cGVTdHJpbmciLCJ0eXBlVmFsaWRhdGVzIiwidHlwZVByZXNlbmV0IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInVuaWZ5RnJhbWUiLCJmcmFtZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiZnJhbWVTdHJpbmciLCJmcmFtZU1ldGF2YXJpYWJsZUNvbXBhcmVzIiwiY29tcGFyZUZyYW1lTWV0YXZhcmlhYmxlIiwiaW5mZXJyZWRTdWJzdGl0dXRpb24iLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9GcmFtZSIsImNvbXBhcmVGcmFtZSIsImluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsImZyYW1lU3Vic3RpdHV0aW9uIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudE1ldGF2YXJpYWJsZUNvbXBhcmVzIiwiY29tcGFyZVN0YXRlbWVudE1ldGF2YXJpYWJsZSIsInNpYmxpbmdTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0U2libGluZ1N1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1N0YXRlbWVudCIsImNvbXBhcmVTdGF0ZW1lbnQiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJ1bmlmeU1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZVVuaWZpZXMiLCJnZW5lcmFsTWV0YXZhcmlhYmxlIiwic3BlY2lmaWNNZXRhdmFyaWFibGUiLCJnZW5lcmFsTWV0YXZhcmlhYmxlU3RyaW5nIiwic3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmciLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJmcmFtZU1ldGF2YXJpYWJsQ29tcGFyZXMiLCJnZW5lcmFsQ29udGV4dEZpbGVQYXRoIiwiZ2V0RmlsZVBhdGgiLCJzcGVjaWZpY0NvbnRleHRGaWxlUGF0aCIsImNvbXBhcmVSZWZlcmVuY2VNZXRhdmFyaWFibGUiLCJyZWZlcmVuY2UiLCJyZWZlcmVuY2VNZXRhdmFyaWFibGVDb21wYXJlcyIsInJlZmVyZW5jZVN0cmluZyIsInRvSlNPTiIsImpzb24iLCJtZXRhVHlwZUpTT04iLCJtZXRhVHlwZVRvTWV0YVR5cGVKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlTWV0YXZhcmlhYmxlIiwibmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwidGVybUZyb21NZXRhdmFyaWFibGVOb2RlIiwidHlwZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YVR5cGVGcm9tSlNPTiIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OztnQ0Fmb0U7a0VBRS9DO3lCQUdPO3VCQUNJOzZCQUNRO3NCQUNpQjt1QkFDUzt5QkFDMEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1SCxNQUFNLEVBQUVBLEdBQUcsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDL0IsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHFCQUFxQkMsdUJBQU87SUFDdEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxRQUFRLENBQUU7UUFDekUsS0FBSyxDQUFDUCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFD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
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L21ldGF2YXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlTWV0YXZhcmlhYmxlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IG1ldGFUeXBlRnJvbUpTT04sIG1ldGFUeXBlVG9NZXRhVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IHVuaWZ5TWV0YXZhcmlhYmxlLCB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgbmFtZUZyb21NZXRhdmFyaWFibGVOb2RlLCB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUsIHR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSwgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBhbGwgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIE1ldGF2YXJpYWJsZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG5hbWUsIHRlcm0sIHR5cGUsIG1ldGFUeXBlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcbiAgICBcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLm1ldGFUeXBlID0gbWV0YVR5cGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRNZXRhVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhVHlwZTtcbiAgfVxuXG4gIHNldE1ldGFUeXBlKG1ldGFUeXBlKSB7XG4gICAgdGhpcy5tZXRhVHlwZSA9IG1ldGFUeXBlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTmFtZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICBpc01hbGZvcm1lZCgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbWFsZm9ybWVkID0gbWV0YXZhcmlhYmxlTm9kZS5pc01hbGZvcm1lZCgpO1xuXG4gICAgcmV0dXJuIG1hbGZvcm1lZDtcbiAgfVxuXG4gIGlzRGVjbGFyZWQoKSB7XG4gICAgY29uc3QgZGVjbGFyZWQgPSAodGhpcy5tZXRhVHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWQ7XG4gIH1cblxuICBpc0VxdWFsVG8obWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNNZXRhVHlwZUVxdWFsVG8obWV0YVR5cGUpIHsgcmV0dXJuIHRoaXMubWV0YVR5cGUuaXNFcXVhbFRvKG1ldGFUeXBlKTsgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gdGhpcy5nZXRNZXRhdmFyaWFibGVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZS5nZXROYW1lKCksXG4gICAgICAgICAgY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIGNvbXBhcmVzVG9NZXRhdmFyaWFibGUgPSBjb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9NZXRhdmFyaWFibGU7XG4gIH1cblxuICBjb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbmFtZU1ldGF2YXJpYWJsZU5hbWUgPSAodGhpcy5uYW1lID09PSBtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBjb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IG5hbWVNZXRhdmFyaWFibGVOYW1lOyAgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtYWxmb3JtZWQgPSB0aGlzLmlzTWFsZm9ybWVkKCk7XG5cbiAgICBpZiAobWFsZm9ybWVkKSB7XG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgYmVjYXVzZSBpdCBpcyBtYWxmb3JtZWQuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyaWZ5VGVybSA9IHRoaXMudmVyaWZ5VGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZlcmlmeVR5cGUgPSB0aGlzLnZlcmlmeVR5cGUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmVyaWZ5VGVybSxcbiAgICAgIHZlcmlmeVR5cGVcbiAgICBdLCAgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5VGVybShjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyB0ZXJtLi4uYCk7XG5cbiAgICBpZiAodGhpcy50ZXJtICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIGNhbiBvbmx5IGhhdmUgYSB0eXBlIGFuZCBub3QgYSB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUncyB0ZXJtLmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gIH1cblxuICB2ZXJpZnlUeXBlKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkcyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdHlwZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmIChiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJhY2sgPSBmb3J3YXJkOyAvLy9cblxuICAgICAgZm9yd2FyZCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICBjb250ZXh0ID0gc3RhdGU7ICAvLy9cblxuICAgICAgc3RhdGUgPSBzdHJpY3Q7IC8vL1xuXG4gICAgICBzdHJpY3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YXZhcmlhYmxlO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIG1ldGF2YXJpYWJsZSA9IHRoaXMuZmluZE1ldGF2YXJpYWJsZShjb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChtZXRhdmFyaWFibGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlTmFtZSA9IHRoaXMudmFsaWRhdGVOYW1lLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVUeXBlID0gdGhpcy52YWxpZGF0ZVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZU5hbWUsXG4gICAgICB2YWxpZGF0ZVR5cGUsXG4gICAgICB2YWxpZGF0ZVRlcm1cbiAgICBdLCBzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCAoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgbWV0YXZhcmlhYmxlID0gdGhpczsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQobWV0YXZhcmlhYmxlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTmFtZShzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgbmFtZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGxldCBuYW1lVmFsaWRhdGVzID0gdHJ1ZTsgLy8vXG5cbiAgICBpZiAoZGVjbGFyZWRNZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFUeXBlID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0TWV0YVR5cGUoKSxcbiAgICAgICAgICAgIG1ldGFUeXBlU3RyaW5nID0gbWV0YVR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHRoaXMubWV0YVR5cGUgPSBtZXRhVHlwZTtcblxuICAgICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgbWV0YS10eXBlIHRvIHRoZSAnJHttZXRhVHlwZVN0cmluZ30nIG1ldGEtdHlwZS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICBuYW1lVmFsaWRhdGVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFuYW1lVmFsaWRhdGVzKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgbmFtZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKHN0cmljdCwgc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVUeXBlKHN0cmljdCwgc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nICB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdHlwZS4uLmApO1xuXG4gICAgbGV0IHR5cGVWYWxpZGF0ZXMgPSB0cnVlOyAvLy9cblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlUHJlc2VuZXQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZVByZXNlbmV0KSB7XG4gICAgICB0eXBlVmFsaWRhdGVzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlVmFsaWRhdGVzKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnRleHQudHJhY2UoYC4uLnZhbGlkYXRlZCAgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzIHR5cGUuYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShzdHJpY3QsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAoZGVjbGFyZWRNZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMudGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgdGhpcy50ZXJtID0gdGVybTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSdzIHRlcm0uYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMudGVybSA9IHRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlJ3MgdGVybS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RyaWN0LCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRNZXRhdmFyaWFibGVDb21wYXJlcyA9IHRoaXMuY29tcGFyZVN0YXRlbWVudE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudE1ldGF2YXJpYWJsZUNvbXBhcmVzKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgICAgc2libGluZ1N1YnN0aXR1dGlvbk5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLmdldFNpYmxpbmdTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IHNpYmxpbmdTdWJzdGl0dXRpb25Ob2RlLCAvLy9cbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9TdGF0ZW1lbnQgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5jb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25TdHJpbmcgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgICBjb250ZXh0LnRyYWNlKGBUaGUgJyR7aW5mZXJyZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBpbmZlcnJlZCBzdWJzdGl0dXRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgU3RhdGVtZW50U3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cztcblxuICAgIGxldCBzdGF0ZW1lbnRTdWJzdGl0dXRpb247XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uLnZlcmlmeShjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRJbmZlcnJlZFN1YnN0aXR1dGlvbihpbmZlcnJlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZVVuaWZpZXM7XG5cbiAgICBkZWJ1Z2dlclxuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbE1ldGF2YXJpYWJsZSA9IHRoaXMsIC8vL1xuICAgICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZyA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmcgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY01ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtnZW5lcmFsTWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBtZXRhdmFyaWFibGVVbmlmaWVzID0gdW5pZnlNZXRhdmFyaWFibGUoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljTWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2dlbmVyYWxNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVVuaWZpZXM7XG4gIH1cblxuICB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxNZXRhdmFyaWFibGUgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZSxcbiAgICAgICAgICBnZW5lcmFsTWV0YXZhcmlhYmxlU3RyaW5nID0gZ2VuZXJhbE1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlU3RyaW5nID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7Z2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBpbnRyaW5zaWNhbGx5Li4uYCk7XG5cbiAgICByZXR1cm4gdW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNNZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUgd2l0aCB0aGUgJyR7Z2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSBpbnRyaW5zaWNhbGx5LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGNvbXBhcmVTdGF0ZW1lbnRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudE1ldGF2YXJpYWJsZUNvbXBhcmVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50J3MgbWV0YXZhcmlhYmxlIHRvIHRoZSAnJHttZXRhdmFyaWFibGVTdHJpbmd9JyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0RmlsZVBhdGggPSBnZW5lcmFsQ29udGV4dC5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dEZpbGVQYXRoID0gc3BlY2lmaWNDb250ZXh0LmdldEZpbGVQYXRoKCk7XG5cbiAgICBpZiAoZ2VuZXJhbENvbnRleHRGaWxlUGF0aCA9PT0gc3BlY2lmaWNDb250ZXh0RmlsZVBhdGgpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc3RhdGVtZW50Lm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZUNvbXBhcmVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50TWV0YXZhcmlhYmxlQ29tcGFyZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQncyBtZXRhdmFyaWFibGUgdG8gdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50TWV0YXZhcmlhYmxlQ29tcGFyZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBtZXRhVHlwZUpTT04gPSBtZXRhVHlwZVRvTWV0YVR5cGVKU09OKHRoaXMubWV0YVR5cGUpLFxuICAgICAgICAgIG1ldGFUeXBlID0gbWV0YVR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnQsXG4gICAgICBtZXRhVHlwZVxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJNZXRhdmFyaWFibGVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGU7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gaW5zdGFudGlhdGVNZXRhdmFyaWFibGUoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgbmFtZSA9IG5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICB0eXBlID0gdHlwZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbmFtZSwgdGVybSwgdHlwZSwgbWV0YVR5cGUpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiYWxsIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiTWV0YXZhcmlhYmxlIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm5hbWUiLCJ0ZXJtIiwidHlwZSIsIm1ldGFUeXBlIiwiZ2V0TmFtZSIsImdldFRlcm0iLCJnZXRUeXBlIiwiZ2V0TWV0YVR5cGUiLCJzZXRNZXRhVHlwZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJnZXROb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiaXNNYWxmb3JtZWQiLCJtYWxmb3JtZWQiLCJpc0RlY2xhcmVkIiwiZGVjbGFyZWQiLCJpc0VxdWFsVG8iLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImVxdWFsVG8iLCJpc01ldGFUeXBlRXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZE1ldGF2YXJpYWJsZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wYXJlTWV0YXZhcmlhYmxlIiwiY29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsImNvbXBhcmVzVG9NZXRhdmFyaWFibGUiLCJuYW1lTWV0YXZhcmlhYmxlTmFtZSIsInZlcmlmeSIsImZvcndhcmQiLCJiYWNrIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2ZXJpZnlUZXJtIiwiYmluZCIsInZlcmlmeVR5cGUiLCJkZWJ1ZyIsInR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidmFsaWRhdGUiLCJzdHJpY3QiLCJzdGF0ZSIsInVuZGVmaW5lZCIsInZhbGlkYXRlTmFtZSIsInZhbGlkYXRlVHlwZSIsInZhbGlkYXRlVGVybSIsImFkZE1ldGF2YXJpYWJsZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibmFtZVZhbGlkYXRlcyIsIm1ldGFUeXBlU3RyaW5nIiwidHlwZVZhbGlkYXRlcyIsInR5cGVQcmVzZW5ldCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidmFsaWRhdGVHaXZlblR5cGUiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3RhdGVtZW50U3RyaW5nIiwic3RhdGVtZW50TWV0YXZhcmlhYmxlQ29tcGFyZXMiLCJjb21wYXJlU3RhdGVtZW50TWV0YXZhcmlhYmxlIiwic2libGluZ1N1YnN0aXR1dGlvbk5vZGUiLCJnZXRTaWJsaW5nU3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbiIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9TdGF0ZW1lbnQiLCJjb21wYXJlU3RhdGVtZW50IiwiaW5mZXJyZWRTdWJzdGl0dXRpb25TdHJpbmciLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsInN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZSIsImFkZEluZmVycmVkU3Vic3RpdHV0aW9uIiwidW5pZnlNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVVbmlmaWVzIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZVN0cmluZyIsInNwZWNpZmljTWV0YXZhcmlhYmxlU3RyaW5nIiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwiZ2VuZXJhbENvbnRleHRGaWxlUGF0aCIsImdldEZpbGVQYXRoIiwic3BlY2lmaWNDb250ZXh0RmlsZVBhdGgiLCJ0b0pTT04iLCJqc29uIiwibWV0YVR5cGVKU09OIiwibWV0YVR5cGVUb01ldGFUeXBlSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZU1ldGF2YXJpYWJsZSIsIm5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInRlcm1Gcm9tTWV0YXZhcmlhYmxlTm9kZSIsInR5cGVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGFUeXBlRnJvbUpTT04iLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQkE7OztlQUFBOzs7Z0NBZG9FO2tFQUUvQzt5QkFHTzs2QkFDWTtzQkFDaUI7dUJBQ1M7eUJBQzBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUgsTUFBTSxFQUFFQSxHQUFHLEVBQUUsR0FBR0MscUNBQXFCLEVBQy9CLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxxQkFBcUJDLHVCQUFPO0lBQ3RELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMs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
|