occam-verify-cli 1.0.747 → 1.0.757
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 +5 -10
- package/lib/context/scoped.js +6 -5
- package/lib/context/synthetic.js +7 -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 +111 -14
- package/lib/element/assertion/type.js +7 -7
- package/lib/element/assumption.js +21 -33
- package/lib/element/combinator.js +4 -4
- package/lib/element/conclusion.js +3 -7
- package/lib/element/constructor/bracketed.js +9 -8
- package/lib/element/constructor.js +9 -5
- package/lib/element/deduction.js +17 -20
- package/lib/element/derivation.js +4 -4
- 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 +65 -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 +7 -7
- package/lib/element/proofAssertion/premise.js +12 -18
- package/lib/element/proofAssertion/step.js +3 -3
- package/lib/element/proofAssertion/supposition.js +13 -19
- package/lib/element/property.js +2 -2
- package/lib/element/propertyRelation.js +3 -3
- package/lib/element/reference.js +11 -9
- package/lib/element/rule.js +2 -2
- package/lib/element/signature.js +3 -3
- package/lib/element/statement.js +100 -59
- package/lib/element/subDerivation.js +4 -4
- package/lib/element/subproof.js +7 -7
- 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 +73 -60
- package/lib/element/substitution/term.js +10 -10
- package/lib/element/term.js +17 -14
- package/lib/element/topLevelAssertion/axiom.js +15 -13
- package/lib/element/topLevelAssertion.js +2 -5
- package/lib/element/topLevelMetaAssertion.js +27 -3
- package/lib/element/type.js +2 -2
- package/lib/element/typePrefix.js +2 -2
- package/lib/element/variable.js +6 -3
- package/lib/process/unify.js +51 -9
- 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/releaseContext.js +3 -3
- package/lib/utilities/string.js +2 -2
- package/lib/utilities/validation.js +13 -5
- package/package.json +3 -3
- package/src/context/branching.js +59 -0
- package/src/context/ephemeral.js +12 -0
- package/src/context/file/nominal.js +4 -12
- package/src/context/scoped.js +6 -4
- package/src/context/synthetic.js +9 -2
- package/src/context.js +14 -0
- package/src/element/assertion/contained.js +8 -8
- 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 +191 -18
- package/src/element/assertion/type.js +7 -7
- package/src/element/assumption.js +21 -52
- package/src/element/combinator.js +4 -4
- package/src/element/conclusion.js +3 -10
- package/src/element/constructor/bracketed.js +9 -7
- package/src/element/constructor.js +11 -5
- package/src/element/deduction.js +17 -23
- package/src/element/derivation.js +4 -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 +96 -32
- 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 +8 -8
- package/src/element/proofAssertion/premise.js +22 -32
- package/src/element/proofAssertion/step.js +3 -3
- package/src/element/proofAssertion/supposition.js +27 -36
- package/src/element/property.js +2 -2
- package/src/element/propertyRelation.js +3 -3
- package/src/element/reference.js +11 -9
- package/src/element/rule.js +2 -2
- package/src/element/signature.js +3 -3
- package/src/element/statement.js +154 -88
- package/src/element/subDerivation.js +4 -3
- package/src/element/subproof.js +6 -6
- 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 +99 -76
- package/src/element/substitution/term.js +10 -10
- package/src/element/term.js +22 -16
- package/src/element/topLevelAssertion/axiom.js +20 -16
- package/src/element/topLevelAssertion.js +2 -4
- package/src/element/topLevelMetaAssertion.js +42 -3
- package/src/element/type.js +3 -2
- package/src/element/typePrefix.js +2 -2
- package/src/element/variable.js +12 -3
- package/src/process/unify.js +78 -9
- 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/releaseContext.js +1 -1
- package/src/utilities/string.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,9 +17,9 @@ _export(exports, {
|
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
19
|
const _occamlanguages = require("occam-languages");
|
|
20
|
-
const
|
|
20
|
+
const _occamserver = require("occam-server");
|
|
21
21
|
const _necessary = require("necessary");
|
|
22
|
-
const { loadProject } =
|
|
22
|
+
const { loadProject } = _occamserver.fileSystemUtilities, { concatenatePaths } = _necessary.pathUtilities, { readFile, isEntryFile, checkEntryExists } = _necessary.fileSystemUtilities, { releaseContextFromJSON, releaseContextFromProject } = _occamlanguages.releaseContextUtilities;
|
|
23
23
|
async function releaseContextFromDependency(dependency, context) {
|
|
24
24
|
let releaseContext = null;
|
|
25
25
|
const projectsDirectoryPath = process.cwd(), dependencyName = dependency.getName(), entryPath = concatenatePaths(projectsDirectoryPath, dependencyName), entryExists = checkEntryExists(entryPath);
|
|
@@ -39,4 +39,4 @@ const _default = {
|
|
|
39
39
|
releaseContextFromDependency
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcmVsZWFzZUNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHJlbGVhc2VDb250ZXh0VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgZmlsZVN5c3RlbVV0aWxpdGllcyBhcyBvY2NhbUZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tc2VydmVyXCI7XG5pbXBvcnQgeyBwYXRoVXRpbGl0aWVzLCBmaWxlU3lzdGVtVXRpbGl0aWVzIGFzIG5lY2Vzc2FyeUZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgbG9hZFByb2plY3QgfSA9IG9jY2FtRmlsZVN5c3RlbVV0aWxpdGllcyxcbiAgICAgIHsgY29uY2F0ZW5hdGVQYXRocyB9ID0gcGF0aFV0aWxpdGllcyxcbiAgICAgIHsgcmVhZEZpbGUsIGlzRW50cnlGaWxlLCBjaGVja0VudHJ5RXhpc3RzIH0gPSBuZWNlc3NhcnlGaWxlU3lzdGVtVXRpbGl0aWVzLFxuICAgICAgeyByZWxlYXNlQ29udGV4dEZyb21KU09OLCByZWxlYXNlQ29udGV4dEZyb21Qcm9qZWN0IH0gPSByZWxlYXNlQ29udGV4dFV0aWxpdGllcztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3koZGVwZW5kZW5jeSwgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZUNvbnRleHQgPSBudWxsO1xuXG4gIGNvbnN0IHByb2plY3RzRGlyZWN0b3J5UGF0aCA9IHByb2Nlc3MuY3dkKCksIC8vL1xuICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICBlbnRyeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgZGVwZW5kZW5jeU5hbWUpLFxuICAgICAgICBlbnRyeUV4aXN0cyA9IGNoZWNrRW50cnlFeGlzdHMoZW50cnlQYXRoKTtcblxuICBpZiAoZW50cnlFeGlzdHMpIHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShlbnRyeVBhdGgpO1xuXG4gICAgaWYgKGVudHJ5RmlsZSkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBlbnRyeVBhdGgsIC8vL1xuICAgICAgICAgICAgY29udGVudCA9IHJlYWRGaWxlKGZpbGVQYXRoKSxcbiAgICAgICAgICAgIGpzb25TdHJpbmcgPSBjb250ZW50LCAvLy9cbiAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuXG4gICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0RnJvbUpTT04oanNvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByb2plY3ROYW1lID0gZGVwZW5kZW5jeU5hbWUsIC8vL1xuICAgICAgICAgICAgcHJvamVjdCA9IGxvYWRQcm9qZWN0KHByb2plY3ROYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xuXG4gICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0RnJvbVByb2plY3QocHJvamVjdCwgY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3lcbn07XG4iXSwibmFtZXMiOlsicmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeSIsImxvYWRQcm9qZWN0Iiwib2NjYW1GaWxlU3lzdGVtVXRpbGl0aWVzIiwiY29uY2F0ZW5hdGVQYXRocyIsInBhdGhVdGlsaXRpZXMiLCJyZWFkRmlsZSIsImlzRW50cnlGaWxlIiwiY2hlY2tFbnRyeUV4aXN0cyIsIm5lY2Vzc2FyeUZpbGVTeXN0ZW1VdGlsaXRpZXMiLCJyZWxlYXNlQ29udGV4dEZyb21KU09OIiwicmVsZWFzZUNvbnRleHRGcm9tUHJvamVjdCIsInJlbGVhc2VDb250ZXh0VXRpbGl0aWVzIiwiZGVwZW5kZW5jeSIsImNvbnRleHQiLCJyZWxlYXNlQ29udGV4dCIsInByb2plY3RzRGlyZWN0b3J5UGF0aCIsInByb2Nlc3MiLCJjd2QiLCJkZXBlbmRlbmN5TmFtZSIsImdldE5hbWUiLCJlbnRyeVBhdGgiLCJlbnRyeUV4aXN0cyIsImVudHJ5RmlsZSIsImZpbGVQYXRoIiwiY29udGVudCIsImpzb25TdHJpbmciLCJqc29uIiwiSlNPTiIsInBhcnNlIiwicHJvamVjdE5hbWUiLCJwcm9qZWN0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF3Q0E7ZUFBQTs7UUE3QnNCQTtlQUFBQTs7O2dDQVRrQjs2QkFDd0I7MkJBQ21CO0FBRW5GLE1BQU0sRUFBRUMsV0FBVyxFQUFFLEdBQUdDLGdDQUF3QixFQUMxQyxFQUFFQyxnQkFBZ0IsRUFBRSxHQUFHQyx3QkFBYSxFQUNwQyxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsZ0JBQWdCLEVBQUUsR0FBR0MsOEJBQTRCLEVBQzFFLEVBQUVDLHNCQUFzQixFQUFFQyx5QkFBeUIsRUFBRSxHQUFHQyx1Q0FBdUI7QUFFOUUsZUFBZVgsNkJBQTZCWSxVQUFVLEVBQUVDLE9BQU87SUFDcEUsSUFBSUMsaUJBQWlCO0lBRXJCLE1BQU1DLHdCQUF3QkMsUUFBUUMsR0FBRyxJQUNuQ0MsaUJBQWlCTixXQUFXTyxPQUFPLElBQ25DQyxZQUFZakIsaUJBQWlCWSx1QkFBdUJHLGlCQUNwREcsY0FBY2QsaUJBQWlCYTtJQUVyQyxJQUFJQyxhQUFhO1FBQ2YsTUFBTUMsWUFBWWhCLFlBQVljO1FBRTlCLElBQUlFLFdBQVc7WUFDYixNQUFNQyxXQUFXSCxXQUNYSSxVQUFVbkIsU0FBU2tCLFdBQ25CRSxhQUFhRCxTQUNiRSxPQUFPQyxLQUFLQyxLQUFLLENBQUNIO1lBRXhCWCxpQkFBaUJMLHVCQUF1QmlCLE1BQU1iO1FBQ2hELE9BQU87WUFDTCxNQUFNZ0IsY0FBY1gsZ0JBQ2RZLFVBQVU3QixZQUFZNEIsYUFBYWQ7WUFFekNELGlCQUFpQkosMEJBQTBCb0IsU0FBU2pCO1FBQ3REO0lBQ0Y7SUFFQSxPQUFPQztBQUNUO01BRUEsV0FBZTtJQUNiZDtBQUNGIn0=
|
package/lib/utilities/string.js
CHANGED
|
@@ -171,7 +171,7 @@ function sectionStringFromHypothesesTopLevelAssertion(hypotheses, axiom, lemma,
|
|
|
171
171
|
return sectionString;
|
|
172
172
|
}
|
|
173
173
|
function subproofStringFromSuppositionsAndSubDerivation(suppositions, subDerivation) {
|
|
174
|
-
const
|
|
174
|
+
const lastStep = subDerivation.getLastStep(), suppositionsString = suppositionsStringFromSuppositions(suppositions), lastStepString = lastStep.getString(), subproofString = `[${suppositionsString}]...${lastStepString}`;
|
|
175
175
|
return subproofString;
|
|
176
176
|
}
|
|
177
177
|
function frameSubstitutionStringFromFrameAndMetavariable(frame, metavariable) {
|
|
@@ -213,4 +213,4 @@ function statementSubstitutionStringFromStatementMetavariableAndSubstitution(sta
|
|
|
213
213
|
return statementSubstitutionString;
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc1N0cmluZ0Zyb21Bc3N1bXB0aW9ucyhhc3N1bXB0aW9ucykge1xuICBjb25zdCBhc3N1bXB0aW9uc1N0cmluZyA9IGFzc3VtcHRpb25zLnJlZHVjZSgoYXNzdW1wdGlvbnNTdHJpbmcsIGFzc3VtcHRpb24pID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGFzc3VtcHRpb25zU3RyaW5nID0gKGFzc3VtcHRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YXNzdW1wdGlvbnNTdHJpbmd9LCAke2Fzc3VtcHRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zLnJlZHVjZSgoc3VwcG9zaXRpb25zU3RyaW5nLCBzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3VwcG9zaXRpb25zU3RyaW5nfSwgJHtzdXBwb3NpdGlvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzaWduYXR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBgWyR7dGVybXNTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSBub21pbmFsVHlwZU5hbWU7ICAvLy9cblxuICByZXR1cm4gdHlwZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlKHRlcm0sIHZhcmlhYmxlKSB7XG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3Rlcm1TdHJpbmd9IGZvciAke3ZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbikge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSxcbiAgICAgICAgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSkge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpLFxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gKHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6IGA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICBjb25zdCBsYXN0UHJvb2ZBc3NlcnRpb24gPSBzdWJEZXJpdmF0aW9uLmdldExhc3RQcm9vZkFzc2VydGlvbigpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGxhc3RQcm9vZkFzc2VydGlvblN0cmluZyA9IGxhc3RQcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2xhc3RQcm9vZkFzc2VydGlvblN0cmluZ31gO1xuXG4gIHJldHVybiBzdWJwcm9vZlN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgZnJhbWVTdHJpbmcgPSBmcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdHJpbmcgPSBgWyR7ZnJhbWVTdHJpbmd9IGZvciBbJHttZXRhdmFyaWFibGVTdHJpbmd9XV1gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kUmVmZXJlbmNlKHN0YXRlbWVudCwgcmVmZXJlbmNlKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHtyZWZlcmVuY2VTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTmFtZSA9IHByb2NlZHVyZVJlZmVyZW5jZS5nZXROYW1lKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMocGFyYW1ldGVycyksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBgQCR7cHJvY2VkdXJlUmVmZXJlbmNlTmFtZX0oJHtwYXJhbWV0ZXJzU3RyaW5nfSlgO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlKHJlZmVyZW5jZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7cmVmZXJlbmNlU3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGxldCB0b3BMZXZlbEFzc2VydGlvblN0cmluZztcblxuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgbGFiZWxzU3RyaW5nID0gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpO1xuXG4gIGlmIChsYWJlbHNTdHJpbmcgIT09IG51bGwpIHtcbiAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG4gIH0gZWxzZSB7XG4gICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdWN0aW9uU3RyaW5nO1xuICB9XG5cbiAgcmV0dXJuIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6IFske3N1cHBvc2l0aW9uc1N0cmluZ31dLi4uJHtkZWR1Y3Rpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiAke2RlZHVjdGlvblN0cmluZ31gO1xuXG4gIHJldHVybiB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfSR7c3Vic3RpdHV0aW9uU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmc7XG59XG4iXSwibmFtZXMiOlsiYXNzdW1wdGlvbnNTdHJpbmdGcm9tQXNzdW1wdGlvbnMiLCJlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyIsImZyYW1lU3Vic3RpdHV0aW9uU3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzIiwibGFiZWxzU3RyaW5nRnJvbUxhYmVscyIsIm1ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRSZWZlcmVuY2UiLCJwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMiLCJwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUiLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uIiwic2lnbmF0dXJlU3RyaW5nRnJvbVRlcm1zIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uIiwic3VwZXJUeXBlc1N0cmluZ0Zyb21TdXBlclR5cGVzIiwic3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlIiwidGVybXNTdHJpbmdGcm9tVGVybXMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJ0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZSIsInRlcm1zIiwidGVybXNTdHJpbmciLCJyZWR1Y2UiLCJ0ZXJtIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsImxhYmVscyIsImxhYmVsc1N0cmluZyIsImxhYmVsIiwibGFiZWxTdHJpbmciLCJwcmVtaXNlcyIsInByZW1pc2VzU3RyaW5nIiwicHJlbWlzZSIsInByZW1pc2VTdHJpbmciLCJoeXBvdGhlc2VzIiwiaHlwb3RoZXNlc1N0cmluZyIsImh5cG90aGVzaXMiLCJoeXBvdGhlc2lzU3RyaW5nIiwic3VwZXJUeXBlcyIsImJhc2VUeXBlIiwiYmFzZVR5cGVGcm9tTm90aGluZyIsInN1cGVyVHlwZXNTdHJpbmciLCJzdXBlclR5cGUiLCJzdXBlclR5cGVTdHJpbmciLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyc1N0cmluZyIsInBhcmFtZXRlciIsInBhcmFtZXRlclN0cmluZyIsImFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNTdHJpbmciLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblN0cmluZyIsInN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1N0cmluZyIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJzaWduYXR1cmVTdHJpbmciLCJlcXVpdmFsZW5jZVN0cmluZyIsIm5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJ2YXJpYWJsZSIsInZhcmlhYmxlU3RyaW5nIiwidGVybVN1YnN0aXR1dGlvblN0cmluZyIsImNvbmNsdXNpb24iLCJjb25jbHVzaW9uU3RyaW5nIiwicnVsZVN0cmluZyIsImF4aW9tIiwibGVtbWEiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RQcm9vZkFzc2VydGlvbiIsImdldExhc3RQcm9vZkFzc2VydGlvbiIsImxhc3RQcm9vZkFzc2VydGlvblN0cmluZyIsInN1YnByb29mU3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJmcmFtZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInN0cmluZyIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInN0YXRlbWVudFN0cmluZyIsInJlZmVyZW5jZVN0cmluZyIsIm1ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZU5hbWUiLCJnZXROYW1lIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyIsImRlZHVjdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBMkZnQkE7ZUFBQUE7O1FBbUNBQztlQUFBQTs7UUFvREFDO2VBQUFBOztRQXBJQUM7ZUFBQUE7O1FBNUJBQztlQUFBQTs7UUF3S0FDO2VBQUFBOztRQTdHQUM7ZUFBQUE7O1FBN0NBQztlQUFBQTs7UUFrS0FDO2VBQUFBOztRQWdCQUM7ZUFBQUE7O1FBL0RBQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBdkNBQztlQUFBQTs7UUFtRkFDO2VBQUFBOztRQStDQUM7ZUFBQUE7O1FBaEZBQztlQUFBQTs7UUE3R0FDO2VBQUFBOztRQTZDQUM7ZUFBQUE7O1FBa0NBQztlQUFBQTs7UUF2SUFDO2VBQUFBOztRQXNOQUM7ZUFBQUE7O1FBb0JBQztlQUFBQTs7UUF6R0FDO2VBQUFBOzs7c0JBbklvQjtBQUU3QixTQUFTSCxxQkFBcUJJLEtBQUs7SUFDeEMsTUFBTUMsY0FBY0QsTUFBTUUsTUFBTSxDQUFDLENBQUNELGFBQWFFO1FBQzdDLE1BQU1DLGFBQWFELEtBQUtFLFNBQVM7UUFFakNKLGNBQWMsQUFBQ0EsZ0JBQWdCLE9BQ2hCLEdBQUdBLFlBQVksRUFBRSxFQUFFRyxZQUFZLEdBQzVCQTtRQUVsQixPQUFPSDtJQUNULEdBQUc7SUFFSCxPQUFPQTtBQUNUO0FBRU8sU0FBU3BCLHVCQUF1QnlCLE1BQU07SUFDM0MsTUFBTUMsZUFBZUQsT0FBT0osTUFBTSxDQUFDLENBQUNLLGNBQWNDO1FBQ2hELE1BQU1DLGNBQWNELE1BQU1ILFNBQVM7UUFFbkNFLGVBQWUsQUFBQ0EsaUJBQWlCLE9BQ2hCRSxjQUNDLEdBQUdGLGFBQWEsRUFBRSxFQUFFRSxhQUFhO1FBRW5ELE9BQU9GO0lBQ1Qs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
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc1N0cmluZ0Zyb21Bc3N1bXB0aW9ucyhhc3N1bXB0aW9ucykge1xuICBjb25zdCBhc3N1bXB0aW9uc1N0cmluZyA9IGFzc3VtcHRpb25zLnJlZHVjZSgoYXNzdW1wdGlvbnNTdHJpbmcsIGFzc3VtcHRpb24pID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uU3RyaW5nID0gYXNzdW1wdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGFzc3VtcHRpb25zU3RyaW5nID0gKGFzc3VtcHRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YXNzdW1wdGlvbnNTdHJpbmd9LCAke2Fzc3VtcHRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zLnJlZHVjZSgoc3VwcG9zaXRpb25zU3RyaW5nLCBzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7c3VwcG9zaXRpb25zU3RyaW5nfSwgJHtzdXBwb3NpdGlvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9uc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBzaWduYXR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBgWyR7dGVybXNTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSBub21pbmFsVHlwZU5hbWU7ICAvLy9cblxuICByZXR1cm4gdHlwZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25TdHJpbmdGcm9tVGVybUFuZFZhcmlhYmxlKHRlcm0sIHZhcmlhYmxlKSB7XG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3Rlcm1TdHJpbmd9IGZvciAke3ZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbikge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSxcbiAgICAgICAgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSkge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpLFxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gKHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6IGA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICBjb25zdCBsYXN0U3RlcCA9IHN1YkRlcml2YXRpb24uZ2V0TGFzdFN0ZXAoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBsYXN0U3RlcFN0cmluZyA9IGxhc3RTdGVwLmdldFN0cmluZygpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7bGFzdFN0ZXBTdHJpbmd9YDtcblxuICByZXR1cm4gc3VicHJvb2ZTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RyaW5nID0gYFske2ZyYW1lU3RyaW5nfSBmb3IgWyR7bWV0YXZhcmlhYmxlU3RyaW5nfV1dYDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZFJlZmVyZW5jZShzdGF0ZW1lbnQsIHJlZmVyZW5jZSkge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7cmVmZXJlbmNlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0TmFtZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzU3RyaW5nID0gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gYEAke3Byb2NlZHVyZVJlZmVyZW5jZU5hbWV9KCR7cGFyYW1ldGVyc1N0cmluZ30pYDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3JlZmVyZW5jZVN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBsZXQgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG5cbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKTtcblxuICBpZiAobGFiZWxzU3RyaW5nICE9PSBudWxsKSB7XG4gICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2RlZHVjdGlvblN0cmluZ31gO1xuICB9IGVsc2Uge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVjdGlvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB0b3BMZXZlbEFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ30ke3N1YnN0aXR1dGlvblN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25zU3RyaW5nRnJvbUFzc3VtcHRpb25zIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyIsImxhYmVsc1N0cmluZ0Zyb21MYWJlbHMiLCJtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kUmVmZXJlbmNlIiwicGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzIiwicHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMiLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbiIsInNpZ25hdHVyZVN0cmluZ0Zyb21UZXJtcyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMiLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJ0ZXJtcyIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJsYWJlbHMiLCJsYWJlbHNTdHJpbmciLCJsYWJlbCIsImxhYmVsU3RyaW5nIiwicHJlbWlzZXMiLCJwcmVtaXNlc1N0cmluZyIsInByZW1pc2UiLCJwcmVtaXNlU3RyaW5nIiwiaHlwb3RoZXNlcyIsImh5cG90aGVzZXNTdHJpbmciLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsInN1cGVyVHlwZXMiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJzdXBlclR5cGVzU3RyaW5nIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlU3RyaW5nIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcnNTdHJpbmciLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJhc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zU3RyaW5nIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJzdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNTdHJpbmciLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic2lnbmF0dXJlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidmFyaWFibGUiLCJ2YXJpYWJsZVN0cmluZyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmciLCJjb25jbHVzaW9uIiwiY29uY2x1c2lvblN0cmluZyIsInJ1bGVTdHJpbmciLCJheGlvbSIsImxlbW1hIiwidGhlb3JlbSIsImNvbmplY3R1cmUiLCJ0b3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwic2VjdGlvblN0cmluZyIsInN1YkRlcml2YXRpb24iLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwibGFzdFN0ZXBTdHJpbmciLCJzdWJwcm9vZlN0cmluZyIsImZyYW1lIiwibWV0YXZhcmlhYmxlIiwiZnJhbWVTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJzdHJpbmciLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnRTdHJpbmciLCJyZWZlcmVuY2VTdHJpbmciLCJtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOYW1lIiwiZ2V0TmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmciLCJkZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTJGZ0JBO2VBQUFBOztRQW1DQUM7ZUFBQUE7O1FBb0RBQztlQUFBQTs7UUFwSUFDO2VBQUFBOztRQTVCQUM7ZUFBQUE7O1FBd0tBQztlQUFBQTs7UUE3R0FDO2VBQUFBOztRQTdDQUM7ZUFBQUE7O1FBa0tBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQS9EQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQXZDQUM7ZUFBQUE7O1FBbUZBQztlQUFBQTs7UUErQ0FDO2VBQUFBOztRQWhGQUM7ZUFBQUE7O1FBN0dBQztlQUFBQTs7UUE2Q0FDO2VBQUFBOztRQWtDQUM7ZUFBQUE7O1FBdklBQztlQUFBQTs7UUFzTkFDO2VBQUFBOztRQW9CQUM7ZUFBQUE7O1FBekdBQztlQUFBQTs7O3NCQW5Jb0I7QUFFN0IsU0FBU0gscUJBQXFCSSxLQUFLO0lBQ3hDLE1BQU1DLGNBQWNELE1BQU1FLE1BQU0sQ0FBQyxDQUFDRCxhQUFhRTtRQUM3QyxNQUFNQyxhQUFhRCxLQUFLRSxTQUFTO1FBRWpDSixjQUFjLEFBQUNBLGdCQUFnQixPQUNoQixHQUFHQSxZQUFZLEVBQUUsRUFBRUcsWUFBWSxHQUM1QkE7UUFFbEIsT0FBT0g7SUFDVCxHQUFHO0lBRUgsT0FBT0E7QUFDVDtBQUVPLFNBQVNwQix1QkFBdUJ5QixNQUFNO0lBQzNDLE1BQU1DLGVBQWVELE9BQU9KLE1BQU0sQ0FBQyxDQUFDSyxjQUFjQztRQUNoRCxNQUFNQyxjQUFjRCxNQUFNSCxTQUFTO1FBRW5DRSxlQUFlLEFBQUNBLGlCQUFpQixPQUNoQkUsY0FDQyxHQUFHRixhQUFhLEVBQUUsRUFBRUUsYUFBYTtRQUVuRCxPQUFPRjtJQUNULEdBQUc7SUFFSCxPQUFPQTtBQUNUO0FBRU8sU0FBU3ZCLDJCQUEyQjBCLFFBQVE7SUFDakQsTUFBTUMsaUJBQWlCRCxTQUFTUixNQUFNLENB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
|
|
@@ -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
|
@@ -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.757",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"argumentative": "^2.0.47",
|
|
14
14
|
"necessary": "^17.1.7",
|
|
15
|
-
"occam-file-system": "^6.0.505",
|
|
16
15
|
"occam-furtle": "^3.0.164",
|
|
17
16
|
"occam-grammars": "^1.3.520",
|
|
18
17
|
"occam-languages": "^0.0.150",
|
|
19
18
|
"occam-lexers": "^23.1.44",
|
|
20
19
|
"occam-model": "^1.0.505",
|
|
21
20
|
"occam-nominal": "^1.0.77",
|
|
22
|
-
"occam-parsers": "^23.1.50"
|
|
21
|
+
"occam-parsers": "^23.1.50",
|
|
22
|
+
"occam-server": "^7.0.4"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@swc/core": "1.13.20",
|
|
@@ -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
|
|
|
@@ -473,9 +473,9 @@ export default class NominalFileContext extends FileContext {
|
|
|
473
473
|
filter(metaLemmas, (metaLemma) => {
|
|
474
474
|
const context = this, ///
|
|
475
475
|
topLevelMetaAssertion = metaLemma, ///
|
|
476
|
-
|
|
476
|
+
topLevelMetaAssertionCompares = reference.compareTopLevelMetaAssertion(topLevelMetaAssertion, context);
|
|
477
477
|
|
|
478
|
-
if (
|
|
478
|
+
if (topLevelMetaAssertionCompares) {
|
|
479
479
|
return true;
|
|
480
480
|
}
|
|
481
481
|
});
|
|
@@ -502,9 +502,9 @@ export default class NominalFileContext extends FileContext {
|
|
|
502
502
|
filter(metatheorems, (metatheorem) => {
|
|
503
503
|
const context = this, ///
|
|
504
504
|
topLevelMetaAssertion = metatheorem, ///
|
|
505
|
-
|
|
505
|
+
topLevelMetaAssertionCompares = reference.compareTopLevelMetaAssertion(topLevelMetaAssertion, context);
|
|
506
506
|
|
|
507
|
-
if (
|
|
507
|
+
if (topLevelMetaAssertionCompares) {
|
|
508
508
|
return true;
|
|
509
509
|
}
|
|
510
510
|
});
|
|
@@ -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/scoped.js
CHANGED
|
@@ -101,17 +101,19 @@ class ScopedContext extends Context {
|
|
|
101
101
|
return proofAssertions;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
let
|
|
104
|
+
getLastStep() {
|
|
105
|
+
let lastStep = null;
|
|
106
106
|
|
|
107
107
|
const proofAssertions = this.getProofAssertions(),
|
|
108
108
|
proofAssertionsLength = proofAssertions.length;
|
|
109
109
|
|
|
110
110
|
if (proofAssertionsLength > 0) {
|
|
111
|
-
lastProofAssertion = last(proofAssertions);
|
|
111
|
+
const lastProofAssertion = last(proofAssertions);
|
|
112
|
+
|
|
113
|
+
lastStep = lastProofAssertion; ///
|
|
112
114
|
}
|
|
113
115
|
|
|
114
|
-
return
|
|
116
|
+
return lastStep;
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
hasMetaLevelSubstitutions() {
|
package/src/context/synthetic.js
CHANGED
|
@@ -13,6 +13,12 @@ export default class SyntheticContext extends Context {
|
|
|
13
13
|
return this.contexts;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
addSubstitutions(substitutions) {
|
|
17
|
+
const context = this.getContext();
|
|
18
|
+
|
|
19
|
+
context.addSubstitutions(substitutions);
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
findTermByTermNode(termNode) {
|
|
17
23
|
let term = null;
|
|
18
24
|
|
|
@@ -41,8 +47,9 @@ export default class SyntheticContext extends Context {
|
|
|
41
47
|
return frame;
|
|
42
48
|
}
|
|
43
49
|
|
|
44
|
-
static fromContexts(contexts
|
|
45
|
-
const
|
|
50
|
+
static fromContexts(...contexts) {
|
|
51
|
+
const context = contexts.pop(), ///
|
|
52
|
+
syntheticContext = new SyntheticContext(context, contexts);
|
|
46
53
|
|
|
47
54
|
return syntheticContext;
|
|
48
55
|
}
|
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);
|