occam-verify-cli 1.0.617 → 1.0.632
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/context/ephemeral.js +152 -47
- package/lib/context/file/nominal.js +136 -140
- package/lib/context/liminal.js +16 -26
- package/lib/context/scoped.js +26 -55
- package/lib/context.js +103 -53
- package/lib/element/assertion/contained.js +3 -1
- package/lib/element/assertion/defined.js +5 -3
- package/lib/element/assertion/property.js +10 -58
- package/lib/element/assertion/satisfies.js +3 -1
- package/lib/element/assertion/subproof.js +3 -1
- package/lib/element/assertion/type.js +65 -109
- package/lib/element/assumption.js +40 -16
- package/lib/element/constructor/bracketed.js +13 -53
- package/lib/element/constructor.js +5 -5
- package/lib/element/declaration/constructor.js +5 -2
- package/lib/element/derivation.js +8 -10
- package/lib/element/equality.js +102 -62
- package/lib/element/equivalence.js +6 -6
- package/lib/element/equivalences.js +4 -4
- package/lib/element/frame.js +21 -21
- package/lib/element/hypothesis.js +5 -7
- package/lib/element/judgement.js +47 -25
- package/lib/element/metaType.js +2 -2
- package/lib/element/metavariable.js +12 -3
- package/lib/element/propertyRelation.js +3 -3
- package/lib/element/reference.js +9 -21
- package/lib/element/rule.js +13 -15
- package/lib/element/signature.js +5 -5
- package/lib/element/statement.js +23 -25
- package/lib/element/subDerivation.js +4 -6
- package/lib/element/substitution/frame.js +4 -4
- package/lib/element/substitution/reference.js +4 -4
- package/lib/element/substitution/statement.js +4 -4
- package/lib/element/substitution/term.js +9 -3
- package/lib/element/substitution.js +71 -43
- package/lib/element/term.js +20 -6
- package/lib/element/topLevelAssertion.js +9 -11
- package/lib/element/topLevelMetaAssertion.js +9 -11
- package/lib/element/variable.js +44 -3
- package/lib/process/assign.js +96 -26
- package/lib/process/unify.js +3 -4
- package/lib/process/validate.js +7 -7
- package/lib/process/verify.js +2 -2
- package/lib/ruleNames.js +5 -1
- package/lib/utilities/element.js +74 -12
- package/lib/utilities/json.js +2 -2
- package/lib/utilities/string.js +9 -24
- package/lib/utilities/substitutions.js +14 -22
- package/lib/utilities/validation.js +3 -3
- package/package.json +4 -4
- package/src/context/ephemeral.js +170 -50
- package/src/context/file/nominal.js +136 -141
- package/src/context/liminal.js +22 -34
- package/src/context/scoped.js +33 -74
- package/src/context.js +97 -46
- package/src/element/assertion/contained.js +4 -0
- package/src/element/assertion/defined.js +6 -2
- package/src/element/assertion/property.js +15 -26
- package/src/element/assertion/satisfies.js +4 -0
- package/src/element/assertion/subproof.js +4 -0
- package/src/element/assertion/type.js +69 -77
- package/src/element/assumption.js +48 -16
- package/src/element/constructor/bracketed.js +11 -12
- package/src/element/constructor.js +4 -4
- package/src/element/declaration/constructor.js +5 -1
- package/src/element/derivation.js +3 -5
- package/src/element/equality.js +109 -74
- package/src/element/equivalence.js +7 -7
- package/src/element/equivalences.js +7 -5
- package/src/element/frame.js +25 -25
- package/src/element/hypothesis.js +4 -6
- package/src/element/judgement.js +54 -24
- package/src/element/metaType.js +1 -1
- package/src/element/metavariable.js +16 -3
- package/src/element/propertyRelation.js +2 -2
- package/src/element/reference.js +12 -26
- package/src/element/rule.js +8 -10
- package/src/element/signature.js +4 -4
- package/src/element/statement.js +27 -30
- package/src/element/subDerivation.js +3 -5
- package/src/element/substitution/frame.js +1 -1
- package/src/element/substitution/reference.js +1 -1
- package/src/element/substitution/statement.js +1 -1
- package/src/element/substitution/term.js +4 -2
- package/src/element/substitution.js +60 -36
- package/src/element/term.js +24 -5
- package/src/element/topLevelAssertion.js +4 -6
- package/src/element/topLevelMetaAssertion.js +4 -6
- package/src/element/variable.js +2 -0
- package/src/process/assign.js +114 -37
- package/src/process/unify.js +2 -3
- package/src/process/validate.js +5 -5
- package/src/process/verify.js +1 -1
- package/src/ruleNames.js +1 -0
- package/src/utilities/element.js +83 -26
- package/src/utilities/json.js +1 -1
- package/src/utilities/string.js +7 -29
- package/src/utilities/substitutions.js +18 -29
- package/src/utilities/validation.js +2 -2
|
@@ -34,8 +34,8 @@ function validateTermAsVariable(term, context, validateForwards) {
|
|
|
34
34
|
if (variable !== null) {
|
|
35
35
|
var type = variable.getType();
|
|
36
36
|
term.setType(type);
|
|
37
|
-
var
|
|
38
|
-
if (
|
|
37
|
+
var validatesForwards = validateForwards();
|
|
38
|
+
if (validatesForwards) {
|
|
39
39
|
termValidatesAsVariable = true;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -245,4 +245,4 @@ var validateStatements = [
|
|
|
245
245
|
validateStatementAsSatisfiesAssertion
|
|
246
246
|
];
|
|
247
247
|
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2ZXJpZmllc0ZvcndhcmRzID0gdmFsaWRhdGVGb3J3YXJkcygpO1xuXG4gICAgICBpZiAodmVyaWZpZXNGb3J3YXJkcykge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9ycy5zb21lKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgICBpZiAodW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcyk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSB0cnVlO1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uVmFsaWRhdGVzID0gc3Vic3RpdHV0aW9uLnZhbGlkYXRlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmICghc3Vic3RpdHV0aW9uVmFsaWRhdGVzKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCksXG4gICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzLnNvbWUoKGNvbWJpbmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29tYmluYXRvciA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHVuaWZpZXNXaXRoQ29tYmluYXRvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpLFxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVZhbGlkYXRlcyA9IGVxdWFsaXR5LnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgY29uc3QganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZhbGlkYXRlcyA9IGp1ZGdlbWVudC52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0ganVkZ2VtZW50VmFsaWRhdGVzOyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzID0gdHlwZUFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlcyA9IGRlZmluZWRBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzID0gcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXMgPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXMgPSBjb250YWluZWRBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUZXJtcyA9IFtcbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSxcbiAgdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyxcbiAgdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gW1xuICB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbInZhbGlkYXRlU3RhdGVtZW50cyIsInZhbGlkYXRlVGVybXMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidGVybSIsImNvbnRleHQiLCJ2YWxpZGF0ZUZvcndhcmRzIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ0ZXJtTm9kZSIsImdldE5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidHlwZSIsImdldFR5cGUiLCJzZXRUeXBlIiwidmVyaWZpZXNGb3J3YXJkcyIsImRlYnVnIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm0iLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJhc3NpZ25tZW50cyIsInN0YXRlZCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiVGVybVN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdWJzdGl0dXRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwidW5pZmllc1dpdGhDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsImVxdWFsaXR5VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsImp1ZGdlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidHlwZUFzc2VydGlvblZhbGlkYXRlcyIsImFzc2VydGlvbiIsImFkZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbiIsInZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNlZhQTtlQUFBQTs7UUFOQUM7ZUFBQUE7OzsrREFyVlE7d0JBRTJEO3lCQVFoQzs7Ozs7O0FBRWhELFNBQVNDLHVCQUF1QkMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGdCQUFnQjtJQUM3RCxJQUFJQywwQkFBMEI7SUFFOUIsSUFBTUMsV0FBV0osS0FBS0ssT0FBTyxJQUN2QkMsZUFBZUYsU0FBU0csZUFBZTtJQUU3QyxJQUFJRCxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSxhQUFhUixLQUFLUyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxtQkFBNkIsT0FBWEYsWUFBVztRQUU1QyxJQUFNRyxxQkFBcUJMLGFBQWFNLHFCQUFxQixJQUN2REMsV0FBV1osUUFBUWEsZ0NBQWdDLENBQUNIO1FBRTFELElBQUlFLGFBQWEsTUFBTTtZQUNyQixJQUFNRSxPQUFPRixTQUFTRyxPQUFPO1lBRTdCaEIsS0FBS2lCLE9BQU8sQ0FBQ0Y7WUFFYixJQUFNRyxtQkFBbUJoQjtZQUV6QixJQUFJZ0Is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
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHMoKTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVZhbGlkYXRlc0FzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgdW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgIGlmICh1bmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcih0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBzdWJzdGl0dXRpb25WYWxpZGF0ZXMgPSBzdWJzdGl0dXRpb24udmFsaWRhdGUoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKCFzdWJzdGl0dXRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgYXNzaWdubWVudHMgPSBudWxsOyAvLy9cblxuICBjb25zdCBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKSxcbiAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzID0gY29tYmluYXRvcnMuc29tZSgoY29tYmluYXRvcikgPT4ge1xuICAgICAgY29uc3QgdW5pZmllc1dpdGhDb21iaW5hdG9yID0gY29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodW5pZmllc1dpdGhDb21iaW5hdG9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgYXNzaWdubWVudHMgPSBudWxsOyAvLy9cblxuICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgY29uc3QgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgIGNvbnN0IGVxdWFsaXR5VmFsaWRhdGVzID0gZXF1YWxpdHkudmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZXF1YWxpdHlWYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBjb25zdCBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3QganVkZ2VtZW50VmFsaWRhdGVzID0ganVkZ2VtZW50LnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBqdWRnZW1lbnRWYWxpZGF0ZXM7ICAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WYWxpZGF0ZXMgPSB0eXBlQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzID0gZGVmaW5lZEFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXMgPSBwcm9wZXJ0eUFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlcyA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblZhbGlkYXRlcyA9IGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXMgPSBzYXRpc2ZpZXNBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRlcm1zID0gW1xuICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLFxuICB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzLFxuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3Jcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidmFsaWRhdGVTdGF0ZW1lbnRzIiwidmFsaWRhdGVUZXJtcyIsInZhbGlkYXRlVGVybUFzVmFyaWFibGUiLCJ0ZXJtIiwiY29udGV4dCIsInZhbGlkYXRlRm9yd2FyZHMiLCJ0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhcmlhYmxlSWRlbnRpZmllciIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ0eXBlIiwiZ2V0VHlwZSIsInNldFR5cGUiLCJ2YWxpZGF0ZXNGb3J3YXJkcyIsImRlYnVnIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm0iLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJhc3NpZ25tZW50cyIsInN0YXRlZCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiVGVybVN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdWJzdGl0dXRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwidW5pZmllc1dpdGhDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsImVxdWFsaXR5VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsImp1ZGdlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidHlwZUFzc2VydGlvblZhbGlkYXRlcyIsImFzc2VydGlvbiIsImFkZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbiIsInZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNlZhQTtlQUFBQTs7UUFOQUM7ZUFBQUE7OzsrREFyVlE7d0JBRTJEO3lCQVFoQzs7Ozs7O0FBRWhELFNBQVNDLHVCQUF1QkMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGdCQUFnQjtJQUM3RCxJQUFJQywwQkFBMEI7SUFFOUIsSUFBTUMsV0FBV0osS0FBS0ssT0FBTyxJQUN2QkMsZUFBZUYsU0FBU0csZUFBZTtJQUU3QyxJQUFJRCxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSxhQUFhUixLQUFLUyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxtQkFBNkIsT0FBWEYsWUFBVztRQUU1QyxJQUFNRyxxQkFBcUJMLGFBQWFNLHFCQUFxQixJQUN2REMsV0FBV1osUUFBUWEsZ0NBQWdDLENBQUNIO1FBRTFELElBQUlFLGFBQWEsTUFBTTtZQUNyQixJQUFNRSxPQUFPRixTQUFTRyxPQUFPO1lBRTdCaEIsS0FBS2lCLE9BQU8sQ0FBQ0Y7WUFFYixJQUFNRyxvQkFBb0JoQjtZQUUxQixJQUFJ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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.632",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"argumentative": "^2.0.36",
|
|
14
14
|
"necessary": "^17.0.9",
|
|
15
15
|
"occam-file-system": "^6.0.505",
|
|
16
|
-
"occam-furtle": "^3.0.
|
|
16
|
+
"occam-furtle": "^3.0.112",
|
|
17
17
|
"occam-grammars": "^1.3.510",
|
|
18
|
-
"occam-languages": "^0.0.
|
|
18
|
+
"occam-languages": "^0.0.81",
|
|
19
19
|
"occam-lexers": "^23.1.34",
|
|
20
20
|
"occam-model": "^1.0.494",
|
|
21
|
-
"occam-nominal": "^1.0.
|
|
21
|
+
"occam-nominal": "^1.0.39",
|
|
22
22
|
"occam-parsers": "^23.1.37"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
package/src/context/ephemeral.js
CHANGED
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
import Context from "../context";
|
|
4
4
|
|
|
5
5
|
export default class EphemeralContext extends Context {
|
|
6
|
-
constructor(context, terms, frames,
|
|
6
|
+
constructor(context, terms, frames, judgements, equalities, assertions, statements, references, assumptions, substitutions) {
|
|
7
7
|
super(context);
|
|
8
8
|
|
|
9
9
|
this.terms = terms;
|
|
10
10
|
this.frames = frames;
|
|
11
|
-
this.
|
|
11
|
+
this.judgements = judgements;
|
|
12
|
+
this.equalities = equalities;
|
|
12
13
|
this.assertions = assertions;
|
|
14
|
+
this.statements = statements;
|
|
13
15
|
this.references = references;
|
|
16
|
+
this.assumptions = assumptions;
|
|
14
17
|
this.substitutions = substitutions;
|
|
15
18
|
}
|
|
16
19
|
|
|
@@ -22,6 +25,14 @@ export default class EphemeralContext extends Context {
|
|
|
22
25
|
return this.frames;
|
|
23
26
|
}
|
|
24
27
|
|
|
28
|
+
getEqualities() {
|
|
29
|
+
return this.equalities;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getJudgements() {
|
|
33
|
+
return this.judgements;
|
|
34
|
+
}
|
|
35
|
+
|
|
25
36
|
getStatements() {
|
|
26
37
|
return this.statements;
|
|
27
38
|
}
|
|
@@ -34,6 +45,10 @@ export default class EphemeralContext extends Context {
|
|
|
34
45
|
return this.references;
|
|
35
46
|
}
|
|
36
47
|
|
|
48
|
+
getAssumptions() {
|
|
49
|
+
return this.assumptions;
|
|
50
|
+
}
|
|
51
|
+
|
|
37
52
|
getSubstitutions() {
|
|
38
53
|
return this.substitutions;
|
|
39
54
|
}
|
|
@@ -88,6 +103,56 @@ export default class EphemeralContext extends Context {
|
|
|
88
103
|
}
|
|
89
104
|
}
|
|
90
105
|
|
|
106
|
+
addEquality(equality) {
|
|
107
|
+
const equalityA = equality, ///
|
|
108
|
+
context = this, ///
|
|
109
|
+
equalityString = equality.getString();
|
|
110
|
+
|
|
111
|
+
context.trace(`Adding the '${equalityString}' equality to the ephemeral context...`);
|
|
112
|
+
|
|
113
|
+
const equalityB = this.equalities.find((equality) => {
|
|
114
|
+
const equalityB = equality, ///
|
|
115
|
+
equalityAEqualToEqualityB = equalityA.isEqualTo(equalityB);
|
|
116
|
+
|
|
117
|
+
if (equalityAEqualToEqualityB) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}) || null;
|
|
121
|
+
|
|
122
|
+
if (equalityB !== null) {
|
|
123
|
+
context.trace(`The '${equalityString}' equality has already been added to the ephemeral context.`);
|
|
124
|
+
} else {
|
|
125
|
+
this.equalities.push(equality);
|
|
126
|
+
|
|
127
|
+
context.debug(`...added the '${equalityString}' equality to the ephemeral context.`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
addJudgement(judgement) {
|
|
132
|
+
const judgementA = judgement, ///
|
|
133
|
+
context = this, ///
|
|
134
|
+
judgementString = judgement.getString();
|
|
135
|
+
|
|
136
|
+
context.trace(`Adding the '${judgementString}' judgement to the ephemeral context...`);
|
|
137
|
+
|
|
138
|
+
const judgementB = this.judgements.find((judgement) => {
|
|
139
|
+
const judgementB = judgement, ///
|
|
140
|
+
judgementAEqualToEqualityB = judgementA.isEqualTo(judgementB);
|
|
141
|
+
|
|
142
|
+
if (judgementAEqualToEqualityB) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}) || null;
|
|
146
|
+
|
|
147
|
+
if (judgementB !== null) {
|
|
148
|
+
context.trace(`The '${judgementString}' judgement has already been added to the ephemeral context.`);
|
|
149
|
+
} else {
|
|
150
|
+
this.judgements.push(judgement);
|
|
151
|
+
|
|
152
|
+
context.debug(`...added the '${judgementString}' judgement to the ephemeral context.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
91
156
|
addStatement(statement) {
|
|
92
157
|
const context = this, ///
|
|
93
158
|
statementA = statement, ///
|
|
@@ -163,6 +228,31 @@ export default class EphemeralContext extends Context {
|
|
|
163
228
|
}
|
|
164
229
|
}
|
|
165
230
|
|
|
231
|
+
addAssumption(assumption) {
|
|
232
|
+
const context = this, ///
|
|
233
|
+
assumptionA = assumption, ///
|
|
234
|
+
assumptionString = assumption.getString();
|
|
235
|
+
|
|
236
|
+
context.trace(`Adding the '${assumptionString}' assumption to the ephemeral context...`);
|
|
237
|
+
|
|
238
|
+
const assumptionB = this.assumptions.find((assumption) => {
|
|
239
|
+
const assumptionB = assumption, ///
|
|
240
|
+
assumptionAEqualToAssumptionB = assumptionA.isEqualTo(assumptionB);
|
|
241
|
+
|
|
242
|
+
if (assumptionAEqualToAssumptionB) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
}) || null;
|
|
246
|
+
|
|
247
|
+
if (assumptionB !== null) {
|
|
248
|
+
context.trace(`The '${assumptionString}' assumption has already been added to the ephemeral context.`);
|
|
249
|
+
} else {
|
|
250
|
+
this.assumptions.push(assumption);
|
|
251
|
+
|
|
252
|
+
context.debug(`...added the '${assumptionString}' assumption to the ephemeral context.`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
166
256
|
addSubstitution(substitution) {
|
|
167
257
|
const context = this, ///
|
|
168
258
|
substitutionA = substitution, ///
|
|
@@ -190,7 +280,7 @@ export default class EphemeralContext extends Context {
|
|
|
190
280
|
|
|
191
281
|
findTermByTermNode(termNode) {
|
|
192
282
|
const term = this.terms.find((term) => {
|
|
193
|
-
const termNodeMatches = term.
|
|
283
|
+
const termNodeMatches = term.matchTermNode(termNode);
|
|
194
284
|
|
|
195
285
|
if (termNodeMatches) {
|
|
196
286
|
return true;
|
|
@@ -202,7 +292,7 @@ export default class EphemeralContext extends Context {
|
|
|
202
292
|
|
|
203
293
|
findFrameByFrameNode(frameNode) {
|
|
204
294
|
const frame = this.frames.find((frame) => {
|
|
205
|
-
const frameNodeMatches = frame.
|
|
295
|
+
const frameNodeMatches = frame.matchFrameNode(frameNode);
|
|
206
296
|
|
|
207
297
|
if (frameNodeMatches) {
|
|
208
298
|
return true;
|
|
@@ -212,9 +302,33 @@ export default class EphemeralContext extends Context {
|
|
|
212
302
|
return frame;
|
|
213
303
|
}
|
|
214
304
|
|
|
305
|
+
findJudgementByJudgementNode(judgementNode) {
|
|
306
|
+
const judgement = this.judgements.find((judgement) => {
|
|
307
|
+
const judgementNodeMatches = judgement.matchJudgementNode(judgementNode);
|
|
308
|
+
|
|
309
|
+
if (judgementNodeMatches) {
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
}) || null;
|
|
313
|
+
|
|
314
|
+
return judgement;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
findEqualityByEqualityNode(equalityNode) {
|
|
318
|
+
const equality = this.equalities.find((equality) => {
|
|
319
|
+
const equalityNodeMatches = equality.matchEqualityNode(equalityNode);
|
|
320
|
+
|
|
321
|
+
if (equalityNodeMatches) {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
}) || null;
|
|
325
|
+
|
|
326
|
+
return equality;
|
|
327
|
+
}
|
|
328
|
+
|
|
215
329
|
findStatementByStatementNode(statementNode) {
|
|
216
330
|
const statement = this.statements.find((statement) => {
|
|
217
|
-
const statementNodeMatches = statement.
|
|
331
|
+
const statementNodeMatches = statement.matchStatementNode(statementNode);
|
|
218
332
|
|
|
219
333
|
if (statementNodeMatches) {
|
|
220
334
|
return true;
|
|
@@ -226,7 +340,7 @@ export default class EphemeralContext extends Context {
|
|
|
226
340
|
|
|
227
341
|
findAssertionByAssertionNode(assertionNode) {
|
|
228
342
|
const assertion = this.assertions.find((assertion) => {
|
|
229
|
-
const assertionNodeMatches = assertion.
|
|
343
|
+
const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
|
|
230
344
|
|
|
231
345
|
if (assertionNodeMatches) {
|
|
232
346
|
return true;
|
|
@@ -236,6 +350,18 @@ export default class EphemeralContext extends Context {
|
|
|
236
350
|
return assertion;
|
|
237
351
|
}
|
|
238
352
|
|
|
353
|
+
findAssumptionByAssumptionNode(assumptionNode) {
|
|
354
|
+
const assumption = this.assumptions.find((assumption) => {
|
|
355
|
+
const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
|
|
356
|
+
|
|
357
|
+
if (assumptionNodeMatches) {
|
|
358
|
+
return true;
|
|
359
|
+
}
|
|
360
|
+
}) || null;
|
|
361
|
+
|
|
362
|
+
return assumption;
|
|
363
|
+
}
|
|
364
|
+
|
|
239
365
|
findReferenceByMetavariableNode(metavariableNode) {
|
|
240
366
|
const reference = this.references.find((reference) => {
|
|
241
367
|
const referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
|
|
@@ -250,7 +376,7 @@ export default class EphemeralContext extends Context {
|
|
|
250
376
|
|
|
251
377
|
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
252
378
|
const substitution = this.substitutions.find((substitution) => {
|
|
253
|
-
const substitutionNodeMatches = substitution.
|
|
379
|
+
const substitutionNodeMatches = substitution.matchSubstitutionNode(substitutionNode);
|
|
254
380
|
|
|
255
381
|
if (substitutionNodeMatches) {
|
|
256
382
|
return true;
|
|
@@ -261,73 +387,64 @@ export default class EphemeralContext extends Context {
|
|
|
261
387
|
}
|
|
262
388
|
|
|
263
389
|
isTermPresentByTermNode(termNode) {
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (termNodeMatches) {
|
|
268
|
-
return true;
|
|
269
|
-
}
|
|
270
|
-
});
|
|
390
|
+
const term = this.findTermByTermNode(termNode),
|
|
391
|
+
termPresent = (term !== null);
|
|
271
392
|
|
|
272
393
|
return termPresent;
|
|
273
394
|
}
|
|
274
395
|
|
|
275
396
|
isFramePresentByFrameNode(frameNode) {
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
if (frameNodeMatches) {
|
|
280
|
-
return true;
|
|
281
|
-
}
|
|
282
|
-
});
|
|
397
|
+
const frame = this.findFrameByFrameNode(frameNode),
|
|
398
|
+
framePresent = (frame !== null);
|
|
283
399
|
|
|
284
400
|
return framePresent;
|
|
285
401
|
}
|
|
286
402
|
|
|
287
|
-
|
|
288
|
-
const
|
|
289
|
-
|
|
403
|
+
isEqualityPresentByEqualityNode(equalityNode) {
|
|
404
|
+
const equality = this.findEqualityByEqualityNode(equalityNode),
|
|
405
|
+
equalityPresent = (equality !== null);
|
|
290
406
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
407
|
+
return equalityPresent;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
isJudgementPresentByJudgementNode(judgementNode) {
|
|
411
|
+
const judgement = this.findJudgementByJudgementNode(judgementNode),
|
|
412
|
+
judgementPresent = (judgement !== null);
|
|
413
|
+
|
|
414
|
+
return judgementPresent;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
isStatementPresentByStatementNode(statementNode) {
|
|
418
|
+
const statement = this.findStatementByStatementNode(statementNode),
|
|
419
|
+
statementPresent = (statement !== null);
|
|
295
420
|
|
|
296
421
|
return statementPresent;
|
|
297
422
|
}
|
|
298
423
|
|
|
299
424
|
isAssertionPresentByAssertionNode(assertionNode) {
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
if (assertionNodeMatches) {
|
|
304
|
-
return true;
|
|
305
|
-
}
|
|
306
|
-
});
|
|
425
|
+
const assertion = this.findAssertionByAssertionNode(assertionNode),
|
|
426
|
+
assertionPresent = (assertion !== null);
|
|
307
427
|
|
|
308
428
|
return assertionPresent;
|
|
309
429
|
}
|
|
310
430
|
|
|
311
|
-
|
|
312
|
-
const
|
|
313
|
-
|
|
431
|
+
isAssumptionPresentByAssumptionNode(assumptionNode) {
|
|
432
|
+
const assumption = this.findAssumptionByAssumptionNode(assumptionNode),
|
|
433
|
+
assumptionPresent = (assumption !== null);
|
|
314
434
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
435
|
+
return assumptionPresent;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
isReferencePresentByMetavariableNode(metavariableNode) {
|
|
439
|
+
const reference = this.findReferenceByMetavariableNode(metavariableNode),
|
|
440
|
+
referencePresent = (reference !== null);
|
|
319
441
|
|
|
320
442
|
return referencePresent;
|
|
321
443
|
}
|
|
322
444
|
|
|
323
445
|
isSubstitutionPresentBySubstitutionNode(substitutionNode) {
|
|
324
|
-
const
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
if (substitutionNodeMatches) {
|
|
328
|
-
return true;
|
|
329
|
-
}
|
|
330
|
-
});
|
|
446
|
+
const substitution = this.findSubstitutionBySubstitutionNode(substitutionNode),
|
|
447
|
+
substitutionPresent = (substitution !== null);
|
|
331
448
|
|
|
332
449
|
return substitutionPresent;
|
|
333
450
|
}
|
|
@@ -335,11 +452,14 @@ export default class EphemeralContext extends Context {
|
|
|
335
452
|
static fromNothing(context) {
|
|
336
453
|
const terms = [],
|
|
337
454
|
frames = [],
|
|
455
|
+
judgements = [],
|
|
456
|
+
equalities = [],
|
|
338
457
|
statements = [],
|
|
339
458
|
assertions = [],
|
|
340
459
|
references = [],
|
|
460
|
+
assumptions = [],
|
|
341
461
|
substitutions = [],
|
|
342
|
-
emphemeralContext = new EphemeralContext(context, terms, frames,
|
|
462
|
+
emphemeralContext = new EphemeralContext(context, terms, frames, judgements, equalities, assertions, statements, references, assumptions, substitutions);
|
|
343
463
|
|
|
344
464
|
return emphemeralContext;
|
|
345
465
|
}
|