occam-verify-cli 1.0.746 → 1.0.753
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/branching.js +56 -0
- package/lib/context/ephemeral.js +10 -1
- package/lib/context/file/nominal.js +1 -6
- package/lib/context/synthetic.js +3 -3
- package/lib/context.js +9 -1
- package/lib/element/assertion/contained.js +7 -7
- package/lib/element/assertion/defined.js +7 -7
- package/lib/element/assertion/property.js +3 -3
- package/lib/element/assertion/satisfies.js +2 -2
- package/lib/element/assertion/subproof.js +2 -2
- package/lib/element/assertion/type.js +7 -7
- package/lib/element/assumption.js +2 -2
- package/lib/element/combinator.js +4 -4
- package/lib/element/conclusion.js +3 -3
- package/lib/element/constructor/bracketed.js +9 -8
- package/lib/element/constructor.js +9 -5
- package/lib/element/deduction.js +3 -3
- package/lib/element/equality.js +12 -11
- package/lib/element/equivalence.js +3 -3
- package/lib/element/frame.js +2 -2
- package/lib/element/hypothesis.js +2 -2
- package/lib/element/judgement.js +2 -2
- package/lib/element/label.js +4 -4
- package/lib/element/metavariable.js +59 -25
- package/lib/element/parameter.js +2 -2
- package/lib/element/procedureCall.js +2 -2
- package/lib/element/procedureReference.js +2 -2
- package/lib/element/proof.js +2 -2
- package/lib/element/proofAssertion/premise.js +5 -5
- package/lib/element/proofAssertion/step.js +3 -3
- package/lib/element/proofAssertion/supposition.js +5 -5
- package/lib/element/property.js +2 -2
- package/lib/element/propertyRelation.js +3 -3
- package/lib/element/reference.js +2 -2
- package/lib/element/rule.js +2 -2
- package/lib/element/signature.js +3 -3
- package/lib/element/statement.js +2 -2
- package/lib/element/subproof.js +2 -2
- package/lib/element/substitution/frame.js +8 -8
- package/lib/element/substitution/metaLevel.js +7 -7
- package/lib/element/substitution/reference.js +7 -7
- package/lib/element/substitution/statement.js +17 -21
- package/lib/element/substitution/term.js +10 -10
- package/lib/element/term.js +17 -14
- package/lib/element/topLevelAssertion.js +2 -2
- package/lib/element/topLevelMetaAssertion.js +2 -2
- package/lib/element/type.js +2 -2
- package/lib/element/typePrefix.js +2 -2
- package/lib/element/variable.js +4 -3
- package/lib/process/unify.js +11 -7
- package/lib/process/validate.js +5 -5
- package/lib/utilities/context.js +28 -20
- package/lib/utilities/element.js +2 -2
- package/lib/utilities/instance.js +3 -3
- package/lib/utilities/validation.js +13 -5
- package/package.json +1 -1
- package/src/context/branching.js +59 -0
- package/src/context/ephemeral.js +12 -0
- package/src/context/file/nominal.js +0 -8
- package/src/context/synthetic.js +3 -2
- package/src/context.js +14 -0
- package/src/element/assertion/contained.js +7 -7
- package/src/element/assertion/defined.js +7 -7
- package/src/element/assertion/property.js +4 -4
- package/src/element/assertion/satisfies.js +2 -2
- package/src/element/assertion/subproof.js +2 -2
- package/src/element/assertion/type.js +7 -7
- package/src/element/assumption.js +2 -2
- package/src/element/combinator.js +4 -4
- package/src/element/conclusion.js +3 -3
- package/src/element/constructor/bracketed.js +9 -7
- package/src/element/constructor.js +11 -5
- package/src/element/deduction.js +3 -3
- package/src/element/equality.js +16 -14
- package/src/element/equivalence.js +3 -3
- package/src/element/frame.js +2 -2
- package/src/element/hypothesis.js +2 -2
- package/src/element/judgement.js +2 -2
- package/src/element/label.js +4 -4
- package/src/element/metavariable.js +81 -30
- package/src/element/parameter.js +2 -2
- package/src/element/procedureCall.js +2 -2
- package/src/element/procedureReference.js +2 -2
- package/src/element/proof.js +2 -2
- package/src/element/proofAssertion/premise.js +5 -5
- package/src/element/proofAssertion/step.js +3 -3
- package/src/element/proofAssertion/supposition.js +5 -5
- package/src/element/property.js +2 -2
- package/src/element/propertyRelation.js +3 -3
- package/src/element/reference.js +2 -2
- package/src/element/rule.js +2 -2
- package/src/element/signature.js +3 -3
- package/src/element/statement.js +2 -2
- package/src/element/subproof.js +2 -2
- package/src/element/substitution/frame.js +8 -8
- package/src/element/substitution/metaLevel.js +7 -7
- package/src/element/substitution/reference.js +7 -7
- package/src/element/substitution/statement.js +17 -24
- package/src/element/substitution/term.js +10 -10
- package/src/element/term.js +22 -16
- package/src/element/topLevelAssertion.js +2 -2
- package/src/element/topLevelMetaAssertion.js +2 -2
- package/src/element/type.js +3 -2
- package/src/element/typePrefix.js +2 -2
- package/src/element/variable.js +7 -3
- package/src/process/unify.js +15 -8
- package/src/process/validate.js +4 -4
- package/src/utilities/context.js +20 -12
- package/src/utilities/element.js +2 -2
- package/src/utilities/instance.js +3 -3
- package/src/utilities/validation.js +16 -4
|
@@ -31,7 +31,7 @@ let bracketedCombinator = null, bracketedConstructor = null;
|
|
|
31
31
|
function bracketedCombinatorFromNothing() {
|
|
32
32
|
if (bracketedCombinator === null) {
|
|
33
33
|
const context = _nominal.default; ///
|
|
34
|
-
bracketedCombinator = (0, _context.
|
|
34
|
+
bracketedCombinator = (0, _context.instantiate)((context)=>{
|
|
35
35
|
const bracketedCombinatorString = `(${_metaTypeNames.STATEMENT_META_TYPE_NAME})`, string = bracketedCombinatorString, combinatorNode = (0, _instantiate.instantiateCombinator)(string, context), bracketedCombinatorNode = combinatorNode, bracketedCombinator = (0, _element.combinatorFromCombinatorNode)(bracketedCombinatorNode, context);
|
|
36
36
|
return bracketedCombinator;
|
|
37
37
|
}, context);
|
|
@@ -41,7 +41,7 @@ function bracketedCombinatorFromNothing() {
|
|
|
41
41
|
function bracketedConstructorFromNothing() {
|
|
42
42
|
if (bracketedConstructor === null) {
|
|
43
43
|
const context = _nominal.default; ///
|
|
44
|
-
bracketedConstructor = (0, _context.
|
|
44
|
+
bracketedConstructor = (0, _context.instantiate)((context)=>{
|
|
45
45
|
const bracketedConstructorString = `(${_constants.BASE_TYPE_SYMBOL})`, string = bracketedConstructorString, constructorNode = (0, _instantiate.instantiateConstructor)(string, context), bracketedConstructorNode = constructorNode, bracketedConstructor = (0, _element.constructorFromConstructorNode)(bracketedConstructorNode, context);
|
|
46
46
|
return bracketedConstructor;
|
|
47
47
|
}, context);
|
|
@@ -49,4 +49,4 @@ function bracketedConstructorFromNothing() {
|
|
|
49
49
|
return bracketedConstructor;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvaW5zdGFuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBub21pbmFsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9ub21pbmFsXCI7XG5cbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBCQVNFX1RZUEVfU1lNQk9MIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29tYmluYXRvciwgaW5zdGFudGlhdGVDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlLCBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3Rvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxubGV0IGJyYWNrZXRlZENvbWJpbmF0b3IgPSBudWxsLFxuICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpIHtcbiAgaWYgKGJyYWNrZXRlZENvbWJpbmF0b3IgPT09IG51bGwpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gbm9taW5hbENvbnRleHQ7IC8vL1xuXG4gICAgYnJhY2tldGVkQ29tYmluYXRvciA9IGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yU3RyaW5nID0gYCgke1NUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRX0pYCxcbiAgICAgICAgICAgIHN0cmluZyA9IGJyYWNrZXRlZENvbWJpbmF0b3JTdHJpbmcsIC8vL1xuICAgICAgICAgICAgY29tYmluYXRvck5vZGUgPSBpbnN0YW50aWF0ZUNvbWJpbmF0b3Ioc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlID0gY29tYmluYXRvck5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyYWNrZXRlZENvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlKGJyYWNrZXRlZENvbWJpbmF0b3JOb2RlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIGJyYWNrZXRlZENvbWJpbmF0b3I7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKSB7XG4gIGlmIChicmFja2V0ZWRDb25zdHJ1Y3RvciA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBub21pbmFsQ29udGV4dDsgLy8vXG5cbiAgICBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvclN0cmluZyA9IGAoJHtCQVNFX1RZUEVfU1lNQk9MfSlgLFxuICAgICAgICAgICAgc3RyaW5nID0gYnJhY2tldGVkQ29uc3RydWN0b3JTdHJpbmcsICAvLy9cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yTm9kZSA9IGluc3RhbnRpYXRlQ29uc3RydWN0b3Ioc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yTm9kZSwgLy8vXG4gICAgICAgICAgICBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZShicmFja2V0ZWRDb25zdHJ1Y3Rvck5vZGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG4iXSwibmFtZXMiOlsiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImNvbnRleHQiLCJub21pbmFsQ29udGV4dCIsImluc3RhbnRpYXRlIiwiYnJhY2tldGVkQ29tYmluYXRvclN0cmluZyIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0cmluZyIsImNvbWJpbmF0b3JOb2RlIiwiaW5zdGFudGlhdGVDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvck5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JOb2RlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JTdHJpbmciLCJCQVNFX1RZUEVfU1lNQk9MIiwiY29uc3RydWN0b3JOb2RlIiwiaW5zdGFudGlhdGVDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yTm9kZSIsImNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBYWdCQTtlQUFBQTs7UUFrQkFDO2VBQUFBOzs7Z0VBN0JXO3lCQUVDOzJCQUNLOytCQUNROzZCQUNxQjt5QkFDZTs7Ozs7O0FBRTdFLElBQUlDLHNCQUFzQixNQUN0QkMsdUJBQXVCO0FBRXBCLFNBQVNIO0lBQ2QsSUFBSUUsd0JBQXdCLE1BQU07UUFDaEMsTUFBTUUsVUFBVUMsZ0JBQWMsRUFBRSxHQUFHO1FBRW5DSCxzQkFBc0JJLElBQUFBLG9CQUFXLEVBQUMsQ0FBQ0Y7WUFDakMsTUFBTUcsNEJBQTRCLENBQUMsQ0FBQyxFQUFFQyx1Q0FBd0IsQ0FBQyxDQUFDLENBQUMsRUFDM0RDLFNBQVNGLDJCQUNURyxpQkFBaUJDLElBQUFBLGtDQUFxQixFQUFDRixRQUFRTCxVQUMvQ1EsMEJBQTBCRixnQkFDMUJSLHNCQUFzQlcsSUFBQUEscUNBQTRCLEVBQUNELHlCQUF5QlI7WUFFbEYsT0FBT0Y7UUFDVCxHQUFHRTtJQUNMO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVNEO0lBQ2QsSUFBSUUseUJBQXlCLE1BQU07UUFDakMsTUFBTUMsVUFBVUMsZ0JBQWMsRUFBRSxHQUFHO1FBRW5DRix1QkFBdUJHLElBQUFBLG9CQUFXLEVBQUMsQ0FBQ0Y7WUFDbEMsTUFBTVUsNkJBQTZCLENBQUMsQ0FBQyxFQUFFQywyQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFDcEROLFNBQVNLLDRCQUNURSxrQkFBa0JDLElBQUFBLG1DQUFzQixFQUFDUixRQUFRTCxVQUNqRGMsMkJBQTJCRixpQkFDM0JiLHVCQUF1QmdCLElBQUFBLHVDQUE4QixFQUFDRCwwQkFBMEJkO1lBRXRGLE9BQU9EO1FBQ1QsR0FBR0M7SUFDTDtJQUVBLE9BQU9EO0FBQ1QifQ==
|
|
@@ -17,6 +17,7 @@ _export(exports, {
|
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
19
|
const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
20
|
+
const _context = require("./context");
|
|
20
21
|
const _term = require("../utilities/term");
|
|
21
22
|
const _instance = require("../utilities/instance");
|
|
22
23
|
const _statement = require("../utilities/statement");
|
|
@@ -34,9 +35,10 @@ function validateTermAsVariable(term, context, validateForwards) {
|
|
|
34
35
|
context.trace(`Validating the '${termString}' term as a variable...`);
|
|
35
36
|
variable = variable.validate(context);
|
|
36
37
|
if (variable !== null) {
|
|
37
|
-
const type = variable.getType();
|
|
38
|
+
const type = variable.getType(), typeString = type.getString();
|
|
39
|
+
context.trace(`Setting the '${termString}' term's type to the '${typeString}' type.`);
|
|
38
40
|
term.setType(type);
|
|
39
|
-
const validatesForwards = validateForwards();
|
|
41
|
+
const validatesForwards = validateForwards(term);
|
|
40
42
|
if (validatesForwards) {
|
|
41
43
|
termValidatesAsVariable = true;
|
|
42
44
|
}
|
|
@@ -51,8 +53,14 @@ function unifyTermWithConstructors(term, context, validateForwards) {
|
|
|
51
53
|
let termUnifiesWithConstructors;
|
|
52
54
|
const constructors = context.getConstructors();
|
|
53
55
|
termUnifiesWithConstructors = constructors.some((constructor)=>{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
let termUnifies;
|
|
57
|
+
(0, _context.choose)((context)=>{
|
|
58
|
+
termUnifies = constructor.unifyTerm(term, context, validateForwards);
|
|
59
|
+
if (termUnifies) {
|
|
60
|
+
context.commit();
|
|
61
|
+
}
|
|
62
|
+
}, context);
|
|
63
|
+
if (termUnifies) {
|
|
56
64
|
return true;
|
|
57
65
|
}
|
|
58
66
|
});
|
|
@@ -261,4 +269,4 @@ const validateStatements = [
|
|
|
261
269
|
validateStatementAsSatisfiesAssertion
|
|
262
270
|
];
|
|
263
271
|
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyB2YXJpYWJsZUZyb21UZXJtIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90ZXJtXCI7XG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RhdGVtZW50XCI7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICBsZXQgdmFyaWFibGU7XG5cbiAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS4uLmApO1xuXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHMoKTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVZhbGlkYXRlc0FzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgdW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgIGlmICh1bmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcih0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgbGV0IG1ldGF2YXJpYWJsZTtcblxuICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSB0cnVlO1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICBsZXQgc3Vic3RpdHV0aW9uO1xuXG4gICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbi52YWxpZGF0ZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCksXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5pZmllc1dpdGhDb21iaW5hdG9yID0gY29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodW5pZmllc1dpdGhDb21iaW5hdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGxldCBlcXVhbGl0eTtcblxuICBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgZXF1YWxpdHkgPSBlcXVhbGl0eS52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBsZXQganVkZ2VtZW50O1xuXG4gIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnQudmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHR5cGVBc3NlcnRpb247XG5cbiAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IGRlZmluZWRBc3NlcnRpb247XG5cbiAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgcHJvcGVydHlBc3NlcnRpb247XG5cbiAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uO1xuXG4gIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbjtcblxuICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUZXJtcyA9IFtcbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSxcbiAgdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyxcbiAgdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gW1xuICB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbInZhbGlkYXRlU3RhdGVtZW50cyIsInZhbGlkYXRlVGVybXMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidGVybSIsImNvbnRleHQiLCJ2YWxpZGF0ZUZvcndhcmRzIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ2YXJpYWJsZSIsInZhcmlhYmxlRnJvbVRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZSIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwic29tZSIsImNvbnN0cnVjdG9yIiwidW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsInVuaWZ5VGVybSIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSIsInN0YXRlbWVudCIsInN0YXRlZCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCIsInN0YXRlbWVudFN0cmluZyIsIlRlcm1TdWJzdGl0dXRpb24iLCJGcmFtZVN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50IiwidGVybVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3IiLCJ1bmlmaWVzV2l0aENvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwic3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbiIsInZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBdVdhQTtl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
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyB2YXJpYWJsZUZyb21UZXJtIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90ZXJtXCI7XG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RhdGVtZW50XCI7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICBsZXQgdmFyaWFibGU7XG5cbiAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS4uLmApO1xuXG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBTZXR0aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSdzIHR5cGUgdG8gdGhlICcke3R5cGVTdHJpbmd9JyB0eXBlLmApO1xuXG4gICAgICB0ZXJtLnNldFR5cGUodHlwZSk7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc0ZvcndhcmRzID0gdmFsaWRhdGVGb3J3YXJkcyh0ZXJtKTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVZhbGlkYXRlc0FzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICB0ZXJtVW5pZmllcyA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yID0gYnJhY2tldGVkQ29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlRm9yd2FyZHMpO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICBsZXQgbWV0YXZhcmlhYmxlO1xuXG4gIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGxldCBzdWJzdGl0dXRpb247XG5cbiAgICAgIHN1YnN0aXR1dGlvbiA9ICh0ZXJtU3Vic3RpdHV0aW9uIHx8IGZyYW1lU3Vic3RpdHV0aW9uKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLnZhbGlkYXRlKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBjb25zdCBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzLnNvbWUoKGNvbWJpbmF0b3IpID0+IHtcbiAgICAgICAgICBjb25zdCB1bmlmaWVzV2l0aENvbWJpbmF0b3IgPSBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmICh1bmlmaWVzV2l0aENvbWJpbmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgbGV0IGVxdWFsaXR5O1xuXG4gIGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBlcXVhbGl0eSA9IGVxdWFsaXR5LnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGxldCBqdWRnZW1lbnQ7XG5cbiAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudC52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgdHlwZUFzc2VydGlvbjtcblxuICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgZGVmaW5lZEFzc2VydGlvbjtcblxuICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoZGVmaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbjtcblxuICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBjb250YWluZWRBc3NlcnRpb247XG5cbiAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uO1xuXG4gIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRlcm1zID0gW1xuICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLFxuICB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzLFxuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3Jcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidmFsaWRhdGVTdGF0ZW1lbnRzIiwidmFsaWRhdGVUZXJtcyIsInZhbGlkYXRlVGVybUFzVmFyaWFibGUiLCJ0ZXJtIiwiY29udGV4dCIsInZhbGlkYXRlRm9yd2FyZHMiLCJ0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSIsInZhcmlhYmxlIiwidmFyaWFibGVGcm9tVGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlIiwidHlwZSIsImdldFR5cGUiLCJ0eXBlU3RyaW5nIiwic2V0VHlwZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwic29tZSIsImNvbnN0cnVjdG9yIiwidGVybVVuaWZpZXMiLCJjaG9vc2UiLCJ1bmlmeVRlcm0iLCJjb21taXQiLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJzdGF0ZWQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnRTdHJpbmciLCJUZXJtU3Vic3RpdHV0aW9uIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsImZyYW1lU3Vic3RpdHV0aW9uIiwiZnJvbVN0YXRlbWVudCIsInRlcm1TdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwidW5pZmllc1dpdGhDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJ2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQW1YYUE7ZUFBQUE7O1FBTkFDO2VBQUFBOzs7aUVBM1dRO3lCQUVFO3NCQUNVOzBCQUMrQzsyQkFTaEM7Ozs7OztBQUVoRCxTQUFTQyx1QkFBdUJDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxnQkFBZ0I7SUFDN0QsSUFBSUMsMEJBQTBCO0lBRTlCLElBQUlDO0lBRUpBLFdBQVdDLElBQUFBLHNCQUFnQixFQUFDTCxNQUFNQztJQUVsQyxJQUFJRyxhQUFhLE1BQU07UUFDckIsTUFBTUUsYUFBYU4sS0FBS08sU0FBUztRQUVqQ04sUUFBUU8sS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsdUJBQXVCLENBQUM7UUFFcEVGLFdBQVdBLFNBQVNLLFFBQVEsQ0FBQ1I7UUFFN0IsSUFBSUcsYUFBYSxNQUFNO1lBQ3JCLE1BQU1NLE9BQU9OLFNBQVNPLE9BQU8sSUFDdkJDLGFBQWFGLEtBQUtILFNBQVM7WUFFakNOLFFBQVFPLEtBQUssQ0FBQyxDQUFDLGFBQWEsRUFBRUYsV0FBVyxzQkFBc0IsRUFBRU0sV0FBVyxPQUFPLENBQUM7WUFFcEZaLEtBQUthLE9BQU8sQ0FBQ0g7WUFFYixNQUFNSSxvQkFBb0JaLGlCQUFpQkY7WUFFM0MsSUFBSWMsbUJBQW1CO2dCQUNyQlgsMEJBQTBCO1lBQzVCO1FBQ0Y7UUFFQSxJQUFJQSx5QkFBeUI7WUFDM0JGLFFBQVFjLEtB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
|
package/package.json
CHANGED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Context from "../context";
|
|
4
|
+
|
|
5
|
+
export default class BranchingContext extends Context {
|
|
6
|
+
constructor(context, terms) {
|
|
7
|
+
super(context);
|
|
8
|
+
|
|
9
|
+
this.terms = terms;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
getTerms() {
|
|
13
|
+
return this.terms;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
addTerm(term) {
|
|
17
|
+
const termA = term, ///
|
|
18
|
+
context = this, ///
|
|
19
|
+
termString = term.getString();
|
|
20
|
+
|
|
21
|
+
context.trace(`Adding the '${termString}' term to the branching context...`);
|
|
22
|
+
|
|
23
|
+
const termB = this.terms.find((term) => {
|
|
24
|
+
const termB = term, ///
|
|
25
|
+
termAEqualToTermB = termA.isEqualTo(termB);
|
|
26
|
+
|
|
27
|
+
if (termAEqualToTermB) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
}) || null;
|
|
31
|
+
|
|
32
|
+
if (termB !== null) {
|
|
33
|
+
context.trace(`The '${termString}' term has already been added to the branching context.`);
|
|
34
|
+
} else {
|
|
35
|
+
this.terms.push(term);
|
|
36
|
+
|
|
37
|
+
context.debug(`...added the '${termString}' term to the branching context.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
addTerms(terms) {
|
|
42
|
+
terms.forEach((term) => {
|
|
43
|
+
this.addTerm(term);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
commit() {
|
|
48
|
+
const context = this.getContext();
|
|
49
|
+
|
|
50
|
+
context.addTerms(this.terms);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static fromNothing(context) {
|
|
54
|
+
const terms = [],
|
|
55
|
+
branchingContext = new BranchingContext(context, terms);
|
|
56
|
+
|
|
57
|
+
return branchingContext;
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/context/ephemeral.js
CHANGED
|
@@ -72,6 +72,12 @@ export default class EphemeralContext extends Context {
|
|
|
72
72
|
return this.substitutions;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
addTerms(terms) {
|
|
76
|
+
terms.forEach((term) => {
|
|
77
|
+
this.addTerm(term);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
75
81
|
addTerm(term) {
|
|
76
82
|
const termA = term, ///
|
|
77
83
|
context = this, ///
|
|
@@ -486,6 +492,12 @@ export default class EphemeralContext extends Context {
|
|
|
486
492
|
return substitutionPresent;
|
|
487
493
|
}
|
|
488
494
|
|
|
495
|
+
commit(element) {
|
|
496
|
+
const context = this; ///
|
|
497
|
+
|
|
498
|
+
element.context = context;
|
|
499
|
+
}
|
|
500
|
+
|
|
489
501
|
initialise(json) {
|
|
490
502
|
const context = this; ///
|
|
491
503
|
|
|
@@ -669,14 +669,6 @@ export default class NominalFileContext extends FileContext {
|
|
|
669
669
|
return procedure;
|
|
670
670
|
}
|
|
671
671
|
|
|
672
|
-
isMetavariablePresent(metavariable) {
|
|
673
|
-
metavariable = this.findMetavariable(metavariable);
|
|
674
|
-
|
|
675
|
-
const metavariablePresent = (metavariable !== null);
|
|
676
|
-
|
|
677
|
-
return metavariablePresent;
|
|
678
|
-
}
|
|
679
|
-
|
|
680
672
|
isLabelPresentByReference(reference) {
|
|
681
673
|
const labels = this.getLabels(),
|
|
682
674
|
labelPresent = labels.some((label) => {
|
package/src/context/synthetic.js
CHANGED
|
@@ -41,8 +41,9 @@ export default class SyntheticContext extends Context {
|
|
|
41
41
|
return frame;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
static fromContexts(contexts
|
|
45
|
-
const
|
|
44
|
+
static fromContexts(...contexts) {
|
|
45
|
+
const context = contexts.pop(), ///
|
|
46
|
+
syntheticContext = new SyntheticContext(context, contexts);
|
|
46
47
|
|
|
47
48
|
return syntheticContext;
|
|
48
49
|
}
|
package/src/context.js
CHANGED
|
@@ -150,6 +150,13 @@ export default class Context extends ContextBase {
|
|
|
150
150
|
return topLevelAssertion;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
findTopLevelMetaAssertionsByReference(reference) {
|
|
154
|
+
const context = this.getContext(),
|
|
155
|
+
topLevelMetaAssertion = context.findTopLevelMetaAssertionsByReference(reference);
|
|
156
|
+
|
|
157
|
+
return topLevelMetaAssertion;
|
|
158
|
+
}
|
|
159
|
+
|
|
153
160
|
findTypeByTypeName(metaTypeName) {
|
|
154
161
|
const context = this.getContext(),
|
|
155
162
|
type = context.findTypeByTypeName(metaTypeName);
|
|
@@ -402,6 +409,13 @@ export default class Context extends ContextBase {
|
|
|
402
409
|
return judgementPresent;
|
|
403
410
|
}
|
|
404
411
|
|
|
412
|
+
isMetavariablePresentByMetavariableName(metavariableName) {
|
|
413
|
+
const context = this.getContext(),
|
|
414
|
+
metavariablePresent = context.isMetavariablePresentByMetavariableName(metavariableName);
|
|
415
|
+
|
|
416
|
+
return metavariablePresent;
|
|
417
|
+
}
|
|
418
|
+
|
|
405
419
|
isSubstitutionPresentBySubstitutionNode(substitutionNode) {
|
|
406
420
|
const context = this.getContext(),
|
|
407
421
|
substitutionPresent = context.isSubstitutionPresentBySubstitutionNode(substitutionNode);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../../utilities/context";
|
|
7
7
|
import { instantiateContainedAssertion } from "../../process/instantiate";
|
|
8
8
|
import { termFromTermAndSubstitutions, frameFromFrameAndSubstitutions, statementFromStatementAndSubstitutions } from "../../utilities/substitutions";
|
|
9
9
|
import { termFromContainedAssertionNode, frameFromContainedAssertionNode, negatedFromContainedAssertionNode, statementFromContainedAssertionNode } from "../../utilities/element";
|
|
@@ -97,14 +97,14 @@ export default define(class ContainedAssertion extends Assertion {
|
|
|
97
97
|
const termString = this.term.getString(),
|
|
98
98
|
containedAssertionString = this.getString(); ///
|
|
99
99
|
|
|
100
|
-
context.trace(`Validating the '${containedAssertionString}' contained
|
|
100
|
+
context.trace(`Validating the '${containedAssertionString}' contained assertion's '${termString}' term...`);
|
|
101
101
|
|
|
102
102
|
const termSingular = this.term.isSingular();
|
|
103
103
|
|
|
104
104
|
if (!termSingular) {
|
|
105
105
|
context.debug(`The '${termString}' term is not singular.`);
|
|
106
106
|
} else {
|
|
107
|
-
const term = this.term.validate(context, () => {
|
|
107
|
+
const term = this.term.validate(context, (term) => {
|
|
108
108
|
const validatesForwards = true;
|
|
109
109
|
|
|
110
110
|
return validatesForwards;
|
|
@@ -117,7 +117,7 @@ export default define(class ContainedAssertion extends Assertion {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
if (termValidates) {
|
|
120
|
-
context.debug(`...validated the '${containedAssertionString}' contained
|
|
120
|
+
context.debug(`...validated the '${containedAssertionString}' contained assertion's '${termString}' term.`);
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
}
|
|
@@ -132,7 +132,7 @@ export default define(class ContainedAssertion extends Assertion {
|
|
|
132
132
|
const frameString = this.frame.getString(),
|
|
133
133
|
containedAssertionString = this.getString(); ///
|
|
134
134
|
|
|
135
|
-
context.trace(`Validating the '${containedAssertionString}' contained
|
|
135
|
+
context.trace(`Validating the '${containedAssertionString}' contained assertion's '${frameString}' frame...`);
|
|
136
136
|
|
|
137
137
|
const frameSingular = this.frame.isSingular();
|
|
138
138
|
|
|
@@ -151,7 +151,7 @@ export default define(class ContainedAssertion extends Assertion {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
if (frameValidates) {
|
|
154
|
-
context.debug(`...validated the '${containedAssertionString}' contained
|
|
154
|
+
context.debug(`...validated the '${containedAssertionString}' contained assertion's '${frameString}' frame.`);
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
|
|
@@ -247,7 +247,7 @@ export default define(class ContainedAssertion extends Assertion {
|
|
|
247
247
|
const { name } = json;
|
|
248
248
|
|
|
249
249
|
if (this.name === name) {
|
|
250
|
-
|
|
250
|
+
instantiate((context) => {
|
|
251
251
|
const { string } = json,
|
|
252
252
|
containedAssertionNode = instantiateContainedAssertion(string, context),
|
|
253
253
|
node = containedAssertionNode, ///
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../../utilities/context";
|
|
7
7
|
import { instantiateDefinedAssertion } from "../../process/instantiate";
|
|
8
8
|
import { termFromTermAndSubstitutions, frameFromFrameAndSubstitutions } from "../../utilities/substitutions";
|
|
9
9
|
import { termFromJDefinedAssertionNode, frameFromJDefinedAssertionNode, negatedFromJDefinedAssertionNode } from "../../utilities/element";
|
|
@@ -91,14 +91,14 @@ export default define(class DefinedAssertion extends Assertion {
|
|
|
91
91
|
const termString = this.term.getString(), ///
|
|
92
92
|
definedAssertionString = this.getString(); ///
|
|
93
93
|
|
|
94
|
-
context.trace(`Validating the '${definedAssertionString}' defined
|
|
94
|
+
context.trace(`Validating the '${definedAssertionString}' defined assertion's '${termString}' term...`);
|
|
95
95
|
|
|
96
96
|
const termSingular = this.term.isSingular();
|
|
97
97
|
|
|
98
98
|
if (!termSingular) {
|
|
99
99
|
context.debug(`The '${termString}' term is not singular.`);
|
|
100
100
|
} else {
|
|
101
|
-
const term = this.term.validate(context, () => {
|
|
101
|
+
const term = this.term.validate(context, (term) => {
|
|
102
102
|
const validatesForwards = true;
|
|
103
103
|
|
|
104
104
|
return validatesForwards;
|
|
@@ -111,7 +111,7 @@ export default define(class DefinedAssertion extends Assertion {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
if (termValidates) {
|
|
114
|
-
context.debug(`...validates the'${definedAssertionString}' defined
|
|
114
|
+
context.debug(`...validates the'${definedAssertionString}' defined assertion's '${termString}' term.`);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
}
|
|
@@ -126,7 +126,7 @@ export default define(class DefinedAssertion extends Assertion {
|
|
|
126
126
|
const frameString = this.frame.getString(), ///
|
|
127
127
|
definedAssertionString = this.getString(); ///
|
|
128
128
|
|
|
129
|
-
context.trace(`Validating the'${definedAssertionString}' defined
|
|
129
|
+
context.trace(`Validating the'${definedAssertionString}' defined assertion's '${frameString}' frame...`);
|
|
130
130
|
|
|
131
131
|
const frameSingular = this.frame.isSingular();
|
|
132
132
|
|
|
@@ -144,7 +144,7 @@ export default define(class DefinedAssertion extends Assertion {
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
if (frameValidates) {
|
|
147
|
-
context.debug(`...validates the'${definedAssertionString}' defined
|
|
147
|
+
context.debug(`...validates the'${definedAssertionString}' defined assertion's '${frameString}' frame.`);
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
}
|
|
@@ -216,7 +216,7 @@ export default define(class DefinedAssertion extends Assertion {
|
|
|
216
216
|
const { name } = json;
|
|
217
217
|
|
|
218
218
|
if (this.name === name) {
|
|
219
|
-
|
|
219
|
+
instantiate((context) => {
|
|
220
220
|
const { string } = json,
|
|
221
221
|
definedAssertionNode = instantiateDefinedAssertion(string, context),
|
|
222
222
|
node = definedAssertionNode, ///
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../../utilities/context";
|
|
7
7
|
import { instantiatePropertyAssertion } from "../../process/instantiate";
|
|
8
8
|
import { variableAssignmentFromPrepertyAssertion } from "../../process/assign";
|
|
9
9
|
import { termFromPropertyAssertionNode, propertyRelationFromPropertyAssertionNode } from "../../utilities/element";
|
|
@@ -117,13 +117,13 @@ export default define(class PropertyAssertion extends Assertion {
|
|
|
117
117
|
|
|
118
118
|
context.trace(`Validating the '${termString}' term...`);
|
|
119
119
|
|
|
120
|
-
const term = this.term.validate(context, () => {
|
|
120
|
+
const term = this.term.validate(context, (term) => {
|
|
121
121
|
const validatesForwards = true;
|
|
122
122
|
|
|
123
123
|
return validatesForwards;
|
|
124
124
|
});
|
|
125
125
|
|
|
126
|
-
if (
|
|
126
|
+
if (term !== null) {
|
|
127
127
|
this.term = term;
|
|
128
128
|
|
|
129
129
|
termValidates = true;
|
|
@@ -208,7 +208,7 @@ export default define(class PropertyAssertion extends Assertion {
|
|
|
208
208
|
const { name } = json;
|
|
209
209
|
|
|
210
210
|
if (this.name === name) {
|
|
211
|
-
|
|
211
|
+
instantiate((context) => {
|
|
212
212
|
const { string } = json,
|
|
213
213
|
propertyAssertionNode = instantiatePropertyAssertion(string, context),
|
|
214
214
|
node = propertyAssertionNode, ///
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../../utilities/context";
|
|
7
7
|
import { instantiateSatisfiesAssertion } from "../../process/instantiate";
|
|
8
8
|
import { signatureFromJSatisfiesAssertionNode, referenceFromJSatisfiesAssertionNode } from "../../utilities/element";
|
|
9
9
|
|
|
@@ -165,7 +165,7 @@ export default define(class SatisfiesAssertion extends Assertion {
|
|
|
165
165
|
const { name } = json;
|
|
166
166
|
|
|
167
167
|
if (this.name === name) {
|
|
168
|
-
|
|
168
|
+
instantiate((context) => {const { string } = json,
|
|
169
169
|
definedAssertionNode = instantiateSatisfiesAssertion(string, context),
|
|
170
170
|
node = definedAssertionNode, ///
|
|
171
171
|
signature = signatureFromJSatisfiesAssertionNode(definedAssertionNode, context),
|
|
@@ -5,7 +5,7 @@ import { arrayUtilities } from "necessary";
|
|
|
5
5
|
import Assertion from "../assertion";
|
|
6
6
|
|
|
7
7
|
import { define } from "../../elements";
|
|
8
|
-
import {
|
|
8
|
+
import { instantiate } from "../../utilities/context";
|
|
9
9
|
import { unifyStatement } from "../../process/unify";
|
|
10
10
|
import { instantiateSubproofAssertion } from "../../process/instantiate";
|
|
11
11
|
|
|
@@ -121,7 +121,7 @@ export default define(class SubproofAssertion extends Assertion {
|
|
|
121
121
|
const { name } = json;
|
|
122
122
|
|
|
123
123
|
if (this.name === name) {
|
|
124
|
-
|
|
124
|
+
instantiate((context) => {
|
|
125
125
|
const { string } = json,
|
|
126
126
|
subproofAssertionNode = instantiateSubproofAssertion(string, context),
|
|
127
127
|
statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context),
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
5
|
import { define } from "../../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../../utilities/context";
|
|
7
7
|
import { instantiateTypeAssertion } from "../../process/instantiate";
|
|
8
8
|
import { termFromTypeAssertionNode } from "../../utilities/element";
|
|
9
9
|
import { typeFromJSON, typeToTypeJSON } from "../../utilities/json";
|
|
@@ -114,10 +114,10 @@ export default define(class TypeAssertion extends Assertion {
|
|
|
114
114
|
|
|
115
115
|
context.trace(`Validating the '${typeAssertionString}' stated type assertion...`);
|
|
116
116
|
|
|
117
|
-
const term = this.term.validate(context, () => {
|
|
118
|
-
let validatesForwards;
|
|
117
|
+
const term = this.term.validate(context, (term) => {
|
|
118
|
+
let validatesForwards = false;
|
|
119
119
|
|
|
120
|
-
const termType =
|
|
120
|
+
const termType = term.getType(),
|
|
121
121
|
typeEqualToOrSubTypeOfTermType = this.type.isEqualToOrSubTypeOf(termType);
|
|
122
122
|
|
|
123
123
|
if (typeEqualToOrSubTypeOfTermType) {
|
|
@@ -147,10 +147,10 @@ export default define(class TypeAssertion extends Assertion {
|
|
|
147
147
|
|
|
148
148
|
context.trace(`Validating the '${typeAssertionString}' derived type assertion...`);
|
|
149
149
|
|
|
150
|
-
const term = this.term.validate(context, () => {
|
|
150
|
+
const term = this.term.validate(context, (term) => {
|
|
151
151
|
let validatesForwards = false;
|
|
152
152
|
|
|
153
|
-
const termType =
|
|
153
|
+
const termType = term.getType(),
|
|
154
154
|
termTypeProvisional = termType.isProvisional();
|
|
155
155
|
|
|
156
156
|
if (!termTypeProvisional) {
|
|
@@ -214,7 +214,7 @@ export default define(class TypeAssertion extends Assertion {
|
|
|
214
214
|
const { name } = json;
|
|
215
215
|
|
|
216
216
|
if (this.name === name) {
|
|
217
|
-
|
|
217
|
+
instantiate((context) => {
|
|
218
218
|
const { string } = json,
|
|
219
219
|
typeAssertionNode = instantiateTypeAssertion(string, context),
|
|
220
220
|
term = termFromTypeAssertionNode(typeAssertionNode, context),
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { Element } from "occam-languages";
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
|
-
import {
|
|
6
|
+
import { instantiate } from "../utilities/context";
|
|
7
7
|
import { instantiateAssumption } from "../process/instantiate";
|
|
8
8
|
import { unifyStatementIntrinsically } from "../process/unify";
|
|
9
9
|
|
|
@@ -311,7 +311,7 @@ export default define(class Assumption extends Element {
|
|
|
311
311
|
static name = "Assumption";
|
|
312
312
|
|
|
313
313
|
static fromJSON(json, context) {
|
|
314
|
-
const assumption =
|
|
314
|
+
const assumption = instantiate((context) => {
|
|
315
315
|
const { string } = json,
|
|
316
316
|
assumptionNode = instantiateAssumption(string, context),
|
|
317
317
|
node = assumptionNode, ///
|