occam-verify-cli 1.0.809 → 1.0.814
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/bounded.js +6 -6
- package/lib/context/branching.js +3 -3
- package/lib/context/ephemeral.js +3 -3
- package/lib/context/file/nominal.js +16 -16
- package/lib/context/liminal.js +26 -30
- package/lib/context/synoptic.js +62 -2
- package/lib/context.js +66 -54
- package/lib/element/assertion/defined.js +8 -8
- package/lib/element/assertion/satisfies.js +15 -11
- package/lib/element/assertion.js +5 -5
- package/lib/element/assumption/metaLevel.js +3 -3
- package/lib/element/conclusion.js +11 -8
- package/lib/element/deduction.js +11 -8
- package/lib/element/frame.js +6 -14
- package/lib/element/label.js +5 -8
- package/lib/element/metavariable.js +17 -17
- package/lib/element/procedureCall.js +10 -6
- package/lib/element/proofAssertion/premise.js +27 -27
- package/lib/element/proofAssertion/step.js +25 -5
- package/lib/element/proofAssertion/supposition.js +27 -27
- package/lib/element/proofAssertion.js +10 -10
- package/lib/element/reference.js +9 -13
- package/lib/element/rule.js +41 -43
- package/lib/element/signature.js +4 -4
- package/lib/element/statement.js +35 -45
- package/lib/element/subproof.js +4 -4
- package/lib/element/substitution/frame.js +16 -11
- package/lib/element/substitution/reference.js +15 -10
- package/lib/element/substitution/statement.js +55 -51
- package/lib/element/substitution/term.js +15 -10
- package/lib/element/substitution.js +29 -31
- package/lib/element/term.js +1 -16
- package/lib/element/topLevelAssertion/axiom.js +5 -3
- package/lib/element/topLevelAssertion.js +36 -38
- package/lib/element/variable.js +6 -6
- package/lib/node/frame.js +1 -9
- package/lib/node/statement.js +1 -9
- package/lib/node/term.js +1 -19
- package/lib/process/assign.js +23 -31
- package/lib/utilities/element.js +33 -5
- package/lib/utilities/equivalence.js +4 -4
- package/lib/utilities/equivalences.js +28 -13
- package/lib/utilities/string.js +2 -2
- package/lib/utilities/substitutions.js +16 -15
- package/lib/utilities/unification.js +133 -124
- package/package.json +1 -1
- package/src/context/bounded.js +5 -5
- package/src/context/branching.js +2 -2
- package/src/context/ephemeral.js +2 -2
- package/src/context/file/nominal.js +15 -15
- package/src/context/liminal.js +29 -35
- package/src/context/synoptic.js +81 -1
- package/src/context.js +88 -69
- package/src/element/assertion/defined.js +8 -8
- package/src/element/assertion/satisfies.js +17 -10
- package/src/element/assertion.js +8 -8
- package/src/element/assumption/metaLevel.js +4 -2
- package/src/element/conclusion.js +12 -7
- package/src/element/deduction.js +12 -7
- package/src/element/frame.js +7 -20
- package/src/element/label.js +3 -5
- package/src/element/metavariable.js +27 -27
- package/src/element/procedureCall.js +14 -9
- package/src/element/proofAssertion/premise.js +41 -41
- package/src/element/proofAssertion/step.js +37 -7
- package/src/element/proofAssertion/supposition.js +41 -41
- package/src/element/proofAssertion.js +10 -9
- package/src/element/reference.js +9 -13
- package/src/element/rule.js +57 -61
- package/src/element/signature.js +3 -3
- package/src/element/statement.js +54 -68
- package/src/element/subproof.js +3 -3
- package/src/element/substitution/frame.js +18 -8
- package/src/element/substitution/reference.js +16 -7
- package/src/element/substitution/statement.js +78 -67
- package/src/element/substitution/term.js +15 -6
- package/src/element/substitution.js +38 -41
- package/src/element/term.js +0 -26
- package/src/element/topLevelAssertion/axiom.js +5 -2
- package/src/element/topLevelAssertion.js +49 -53
- package/src/element/variable.js +5 -5
- package/src/node/frame.js +0 -12
- package/src/node/statement.js +0 -12
- package/src/node/term.js +0 -28
- package/src/process/assign.js +35 -46
- package/src/utilities/element.js +32 -4
- package/src/utilities/equivalence.js +3 -4
- package/src/utilities/equivalences.js +29 -17
- package/src/utilities/string.js +2 -2
- package/src/utilities/substitutions.js +17 -15
- package/src/utilities/unification.js +145 -119
package/lib/process/assign.js
CHANGED
|
@@ -44,25 +44,11 @@ function judgementAssignmentFromJudgement(judgement, context) {
|
|
|
44
44
|
return judgementAssignment;
|
|
45
45
|
}
|
|
46
46
|
function leftVariableAssignmentFromEquality(equality, context) {
|
|
47
|
-
|
|
48
|
-
///
|
|
49
|
-
};
|
|
50
|
-
const type = equality.getType(), leftTermNode = equality.getLeftTermNode(), singularVariableNode = leftTermNode.getSingularVariableNode();
|
|
51
|
-
if (singularVariableNode !== null) {
|
|
52
|
-
const leftVariableNode = singularVariableNode; ///
|
|
53
|
-
leftVariableAssignment = variableAssignmentFromVariableNodeAndType(leftVariableNode, type, context);
|
|
54
|
-
}
|
|
47
|
+
const type = equality.getType(), leftTerm = equality.getLeftTerm(), leftVariableAssignment = variableAssignmentFromTermAndType(leftTerm, type, context);
|
|
55
48
|
return leftVariableAssignment;
|
|
56
49
|
}
|
|
57
50
|
function rightVariableAssignmentFromEquality(equality, context) {
|
|
58
|
-
|
|
59
|
-
///
|
|
60
|
-
};
|
|
61
|
-
const type = equality.getType(), rightTermNode = equality.getRightTermNode(), singularVariableNode = rightTermNode.getSingularVariableNode();
|
|
62
|
-
if (singularVariableNode !== null) {
|
|
63
|
-
const rightVariableNode = singularVariableNode; ///
|
|
64
|
-
rightVariableAssignment = variableAssignmentFromVariableNodeAndType(rightVariableNode, type, context);
|
|
65
|
-
}
|
|
51
|
+
const type = equality.getType(), rightTerm = equality.getRightTerm(), rightVariableAssignment = variableAssignmentFromTermAndType(rightTerm, type, context);
|
|
66
52
|
return rightVariableAssignment;
|
|
67
53
|
}
|
|
68
54
|
function variableAssignmentFromTypeAssertion(typeAssertion, context) {
|
|
@@ -71,11 +57,8 @@ function variableAssignmentFromTypeAssertion(typeAssertion, context) {
|
|
|
71
57
|
};
|
|
72
58
|
const term = typeAssertion.getTerm(), termSingular = term.isSingular();
|
|
73
59
|
if (termSingular) {
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
const type = typeAssertion.getType(), variableNode = variable.getNode();
|
|
77
|
-
variableAssignment = variableAssignmentFromVariableNodeAndType(variableNode, type, context);
|
|
78
|
-
}
|
|
60
|
+
const type = typeAssertion.getType(), variableNode = term.getVariableNode();
|
|
61
|
+
variableAssignment = variableAssignmentFromTermAndType(variableNode, type, context);
|
|
79
62
|
}
|
|
80
63
|
return variableAssignment;
|
|
81
64
|
}
|
|
@@ -97,17 +80,26 @@ function variableAssignmentFromPrepertyAssertion(propertyAssertion, context) {
|
|
|
97
80
|
//
|
|
98
81
|
// const variableAssignment = variableAssignmentFromVariable(variable),
|
|
99
82
|
}
|
|
100
|
-
function
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const variableAssignment = (context)=>{
|
|
104
|
-
const declaredVariable = variable; ///
|
|
105
|
-
context.addDeclaredVariable(declaredVariable);
|
|
106
|
-
const declaredVariableTypeString = declaredVariable.getTypeString(), declaredVariableString = declaredVariable.getString(), assigned = true; ///
|
|
107
|
-
assigned ? context.trace(`Assigned the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`) : context.debug(`Unable to assign the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`);
|
|
108
|
-
return assigned;
|
|
83
|
+
function variableAssignmentFromTermAndType(term, type, context) {
|
|
84
|
+
let variableAssignment = (context)=>{
|
|
85
|
+
///
|
|
109
86
|
};
|
|
87
|
+
const termSingular = term.isSingular();
|
|
88
|
+
if (termSingular) {
|
|
89
|
+
const termType = term.getType(), termTypeEqualToType = termType.isEqualTo(type);
|
|
90
|
+
if (!termTypeEqualToType) {
|
|
91
|
+
const variableNode = term.getVariableNode(), variable = (0, _element.variableFromVariableNode)(variableNode, context);
|
|
92
|
+
variable.setType(type);
|
|
93
|
+
variableAssignment = (context)=>{
|
|
94
|
+
const declaredVariable = variable; ///
|
|
95
|
+
context.addDeclaredVariable(declaredVariable);
|
|
96
|
+
const declaredVariableTypeString = declaredVariable.getTypeString(), declaredVariableString = declaredVariable.getString(), assigned = true; ///
|
|
97
|
+
assigned ? context.trace(`Assigned the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`) : context.debug(`Unable to assign the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`);
|
|
98
|
+
return assigned;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}
|
|
110
102
|
return variableAssignment;
|
|
111
103
|
}
|
|
112
104
|
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Fzc2lnbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpIHtcbiAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Fzc2lnbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpIHtcbiAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlcXVhbGl0eUFkZGVkID0gY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlBZGRlZDtcbiAgfTtcblxuICByZXR1cm4gZXF1YWxpdHlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50QXNzaWdubWVudEZyb21KdWRnZW1lbnQoanVkZ2VtZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IGp1ZGdlbWVudEFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGRlY2xhcmVkSnVkZ2VtZW50ID0ganVkZ2VtZW50LCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRBZGRlZCA9IGNvbnRleHQuYWRkRGVjbGFyZWRKdWRnZW1lbnQoZGVjbGFyZWRKdWRnZW1lbnQpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50QWRkZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGp1ZGdlbWVudEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBlcXVhbGl0eS5nZXRUeXBlKCksXG4gICAgICAgIGxlZnRUZXJtID0gZXF1YWxpdHkuZ2V0TGVmdFRlcm0oKSxcbiAgICAgICAgbGVmdFZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZShsZWZ0VGVybSwgdHlwZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gZXF1YWxpdHkuZ2V0VHlwZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBlcXVhbGl0eS5nZXRSaWdodFRlcm0oKSxcbiAgICAgICAgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVGVybUFuZFR5cGUocmlnaHRUZXJtLCB0eXBlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIC8vL1xuICB9O1xuXG4gIGNvbnN0IHRlcm0gPSB0eXBlQXNzZXJ0aW9uLmdldFRlcm0oKSxcbiAgICAgICAgdGVybVNpbmd1bGFyID0gdGVybS5pc1Npbmd1bGFyKCk7XG5cbiAgaWYgKHRlcm1TaW5ndWxhcikge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlQXNzZXJ0aW9uLmdldFR5cGUoKSxcbiAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB0ZXJtLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVRlcm1BbmRUeXBlKHZhcmlhYmxlTm9kZSwgdHlwZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KSB7XG5cbiAgZGVidWdnZXJcblxuICAvLyBsZXQgdmFyaWFibGU7XG4gIC8vXG4gIC8vIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAvLyAgIHRlcm1Ob2RlID0gdGhpcy50ZXJtLmdldE5vZGUoKTtcbiAgLy9cbiAgLy8gdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICAvL1xuICAvLyBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgLy8gICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZS5nZXRJZGVudGlmaWVyKCk7XG4gIC8vXG4gIC8vICAgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG4gIC8vXG4gIC8vICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVmFyaWFibGVBbmRQcm9wZXJ0eVJlbGF0aW9uKHZhcmlhYmxlLCB0aGlzLnByb3BlcnR5UmVsYXRpb24pO1xuICAvL1xuICAvLyAgIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21WYXJpYWJsZSh2YXJpYWJsZSksXG5cbiAgfVxuXG5mdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVGVybUFuZFR5cGUodGVybSwgdHlwZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICAvLy9cbiAgfTtcblxuICBjb25zdCB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9UeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvKHR5cGUpO1xuXG4gICAgaWYgKCF0ZXJtVHlwZUVxdWFsVG9UeXBlKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgdmFyaWFibGUuc2V0VHlwZSh0eXBlKTtcblxuICAgICAgdmFyaWFibGVBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpO1xuXG4gICAgICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVUeXBlU3RyaW5nID0gZGVjbGFyZWRWYXJpYWJsZS5nZXRUeXBlU3RyaW5nKCksXG4gICAgICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVTdHJpbmcgPSBkZWNsYXJlZFZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7ICAvLy9cblxuICAgICAgICBhc3NpZ25lZCA/XG4gICAgICAgICAgY29udGV4dC50cmFjZShgQXNzaWduZWQgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB3aXRoIHR5cGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVR5cGVTdHJpbmd9Jy5gKSA6XG4gICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIGFzc2lnbiB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHdpdGggdHlwZSAnJHtkZWNsYXJlZFZhcmlhYmxlVHlwZVN0cmluZ30nLmApO1xuXG4gICAgICAgIHJldHVybiBhc3NpZ25lZDtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJqdWRnZW1lbnRBc3NpZ25tZW50RnJvbUp1ZGdlbWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbiIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uIiwiZXF1YWxpdHkiLCJjb250ZXh0IiwiZXF1YWxpdHlBc3NpZ25tZW50IiwiZXF1YWxpdHlBZGRlZCIsImFkZEVxdWFsaXR5IiwianVkZ2VtZW50IiwianVkZ2VtZW50QXNzaWdubWVudCIsImRlY2xhcmVkSnVkZ2VtZW50IiwiZGVjbGFyZWRKdWRnZW1lbnRBZGRlZCIsImFkZERlY2xhcmVkSnVkZ2VtZW50IiwidHlwZSIsImdldFR5cGUiLCJsZWZ0VGVybSIsImdldExlZnRUZXJtIiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZSIsInJpZ2h0VGVybSIsImdldFJpZ2h0VGVybSIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50IiwidHlwZUFzc2VydGlvbiIsInZhcmlhYmxlQXNzaWdubWVudCIsInRlcm0iLCJnZXRUZXJtIiwidGVybVNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9UeXBlIiwiaXNFcXVhbFRvIiwidmFyaWFibGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJzZXRUeXBlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlVHlwZVN0cmluZyIsImdldFR5cGVTdHJpbmciLCJkZWNsYXJlZFZhcmlhYmxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwiYXNzaWduZWQiLCJ0cmFjZSIsImRlYnVnIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFJZ0JBO2VBQUFBOztRQVVBQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQTBCQUM7ZUFBQUE7O1FBbEJBQztlQUFBQTs7O3lCQXZDeUI7QUFFbEMsU0FBU0wsK0JBQStCTSxRQUFRLEVBQUVDLE9BQU87SUFDOUQsTUFBTUMscUJBQXFCLENBQUNEO1FBQzFCLE1BQU1FLGdCQUFnQkYsUUFBUUcsV0FBVyxDQUFDSjtRQUUxQyxPQUFPRztJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNQLGlDQUFpQ1UsU0FBUyxFQUFFSixPQUFPO0lBQ2pFLE1BQU1LLHNCQUFzQixDQUFDTDtRQUMzQixNQUFNTSxvQkFBb0JGLFdBQ3BCRyx5QkFBeUJQLFFBQVFRLG9CQUFvQixDQUFDRjtRQUU1RCxPQUFPQztJQUNUO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVNWLG1DQUFtQ0ksUUFBUSxFQUFFQyxPQUFPO0lBQ2xFLE1BQU1TLE9BQU9WLFNBQVNXLE9BQU8sSUFDdkJDLFdBQVdaLFNBQVNhLFdBQVcsSUFDL0JDLHlCQUF5QkMsa0NBQWtDSCxVQUFVRixNQUFNVDtJQUVqRixPQUFPYTtBQUNUO0FBRU8sU0FBU2pCLG9DQUFvQ0csUUFBUSxFQUFFQyxPQUFPO0lBQ25FLE1BQU1TLE9BQU9WLFNBQVNXLE9BQU8sSUFDdkJLLFlBQVloQixTQUFTaUIsWUFBWSxJQUNqQ0MsMEJBQTBCSCxrQ0FBa0NDLFdBQVdOLE1BQU1UO0lBRW5GLE9BQU9pQjtBQUNUO0FBRU8sU0FBU25CLG9DQUFvQ29CLGFBQWEsRUFBRWxCLE9BQU87SUFDeEUsSUFBSW1CLHFCQUFxQixDQUFDbkI7SUFDeEIsR0FBRztJQUNMO0lBRUEsTUFBTW9CLE9BQU9GLGNBQWNHLE9BQU8sSUFDNUJDLGVBQWVGLEtBQUtHLFVBQVU7SUFFcEMsSUFBSUQsY0FBYztRQUNoQixNQUFNYixPQUFPUyxjQUFjUixPQUFPLElBQzVCYyxlQUFlSixLQUFLSyxlQUFlO1FBRXpDTixxQkFBcUJMLGtDQUFrQ1UsY0FBY2YsTUFBTVQ7SUFDN0U7SUFFQSxPQUFPbUI7QUFDVDtBQUVPLFNBQVN0Qix3Q0FBd0M2QixpQkFBaUIsRUFBRTFCLE9BQU87SUFFaEYsUUFBUTtBQUVSLGdCQUFnQjtBQUNoQixFQUFFO0FBQ0YsaUNBQWlDO0FBQ2pDLG9DQUFvQztBQUNwQyxFQUFFO0FBQ0YsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiwyQkFBMkI7QUFDM0IseURBQXlEO0FBQ3pELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsRUFBRTtBQUNGLDBGQUEwRjtBQUMxRixFQUFFO0FBQ0YseUVBQXlFO0FBRXpFO0FBRUYsU0FBU2Msa0NBQWtDTSxJQUFJLEVBQUVYLElBQUksRUFBRVQsT0FBTztJQUM1RCxJQUFJbUIscUJBQXFCLENBQUNuQjtJQUN4QixHQUFHO0lBQ0w7SUFFQSxNQUFNc0IsZUFBZUYsS0FBS0csVUFBVTtJQUVwQyxJQUFJRCxjQUFjO1FBQ2hCLE1BQU1LLFdBQVdQLEtBQUtWLE9BQU8sSUFDdkJrQixzQkFBc0JELFNBQVNFLFNBQVMsQ0FBQ3BCO1FBRS9DLElBQUksQ0FBQ21CLHFCQUFxQjtZQUN4QixNQUFNSixlQUFlSixLQUFLSyxlQUFlLElBQ25DSyxXQUFXQyxJQUFBQSxpQ0FBd0IsRUFBQ1AsY0FBY3hCO1lBRXhEOEIsU0FBU0UsT0FBTyxDQUFDdkI7WUFFakJVLHFCQUFxQixDQUFDbkI7Z0JBQ3BCLE1BQU1pQyxtQkFBbUJILFVBQVcsR0FBRztnQkFFdkM5QixRQUFRa0MsbUJBQW1CLENBQUNEO2dCQUU1QixNQUFNRSw2QkFBNkJGLGlCQUFpQkcsYUFBYSxJQUMzREMseUJBQXlCSixpQkFBaUJLLFNBQVMsSUFDbkRDLFdBQVcsTUFBTyxHQUFHO2dCQUUzQkEsV0FDRXZDLFFBQVF3QyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVILHVCQUF1QiwrQkFBK0IsRUFBRUYsMkJBQTJCLEVBQUUsQ0FBQyxJQUNsSG5DLFFBQVF5QyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRUosdUJBQXVCLCtCQUErQixFQUFFRiwyQkFBMkIsRUFBRSxDQUFDO2dCQUVsSSxPQUFPSTtZQUNUO1FBQ0Y7SUFDRjtJQUVBLE9BQU9wQjtBQUNUIn0=
|