occam-verify-cli 1.0.806 → 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 +242 -0
- 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 +272 -0
- 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/derivation.js +1 -7
- 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/proof.js +2 -2
- package/lib/element/proofAssertion/premise.js +27 -27
- package/lib/element/proofAssertion/step.js +26 -6
- 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 +42 -44
- package/lib/element/signature.js +4 -4
- package/lib/element/statement.js +35 -45
- package/lib/element/subproof.js +5 -5
- package/lib/element/substitution/frame.js +16 -11
- package/lib/element/substitution/reference.js +15 -10
- package/lib/element/substitution/statement.js +62 -56
- 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 +37 -39
- package/lib/element/topLevelMetaAssertion.js +2 -2
- 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/context.js +41 -42
- package/lib/utilities/element.js +33 -5
- package/lib/utilities/equivalence.js +4 -4
- package/lib/utilities/equivalences.js +28 -13
- package/lib/utilities/instance.js +3 -3
- package/lib/utilities/string.js +2 -2
- package/lib/utilities/substitutions.js +16 -15
- package/lib/utilities/unification.js +133 -124
- package/package.json +4 -4
- package/src/context/{proof.js → bounded.js} +9 -9
- 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/{synthetic.js → synoptic.js} +84 -4
- 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/derivation.js +0 -2
- 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 +15 -10
- package/src/element/proof.js +2 -2
- package/src/element/proofAssertion/premise.js +41 -41
- package/src/element/proofAssertion/step.js +39 -9
- 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 +59 -63
- package/src/element/signature.js +3 -3
- package/src/element/statement.js +54 -68
- package/src/element/subproof.js +5 -5
- package/src/element/substitution/frame.js +18 -8
- package/src/element/substitution/reference.js +16 -7
- package/src/element/substitution/statement.js +87 -74
- 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 +51 -55
- package/src/element/topLevelMetaAssertion.js +2 -2
- 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/context.js +41 -43
- package/src/utilities/element.js +32 -4
- package/src/utilities/equivalence.js +3 -4
- package/src/utilities/equivalences.js +29 -17
- package/src/utilities/instance.js +3 -3
- package/src/utilities/string.js +2 -2
- package/src/utilities/substitutions.js +17 -15
- package/src/utilities/unification.js +145 -119
- package/lib/context/proof.js +0 -242
- package/lib/context/synthetic.js +0 -212
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return SynopticContext;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _necessary = require("necessary");
|
|
12
|
+
const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
|
|
13
|
+
function _interop_require_default(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const { push, last, compress } = _necessary.arrayUtilities;
|
|
19
|
+
class SynopticContext extends _context.default {
|
|
20
|
+
constructor(context, contexts){
|
|
21
|
+
super(context);
|
|
22
|
+
this.contexts = contexts;
|
|
23
|
+
}
|
|
24
|
+
getContexts() {
|
|
25
|
+
return this.contexts;
|
|
26
|
+
}
|
|
27
|
+
getTerms() {
|
|
28
|
+
const terms = [];
|
|
29
|
+
this.contexts.forEach((context)=>{
|
|
30
|
+
const contextTerms = context.getTerms();
|
|
31
|
+
push(terms, contextTerms);
|
|
32
|
+
});
|
|
33
|
+
compress(terms, (termA, termB)=>{
|
|
34
|
+
const termAComparesToTermB = termA.compareTerm(termB);
|
|
35
|
+
if (!termAComparesToTermB) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return terms;
|
|
40
|
+
}
|
|
41
|
+
getFrames() {
|
|
42
|
+
const frames = [];
|
|
43
|
+
this.contexts.forEach((context)=>{
|
|
44
|
+
const contextFrames = context.getFrames();
|
|
45
|
+
push(frames, contextFrames);
|
|
46
|
+
});
|
|
47
|
+
compress(frames, (frameA, frameB)=>{
|
|
48
|
+
const frameAEqualToFrameB = frameA.isEqualTo(frameB);
|
|
49
|
+
if (!frameAEqualToFrameB) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return frames;
|
|
54
|
+
}
|
|
55
|
+
getEqualities() {
|
|
56
|
+
const equalities = [];
|
|
57
|
+
this.contexts.forEach((context)=>{
|
|
58
|
+
const contextEqualities = context.getEqualities();
|
|
59
|
+
push(equalities, contextEqualities);
|
|
60
|
+
});
|
|
61
|
+
compress(equalities, (equalityA, equalityB)=>{
|
|
62
|
+
const equalityAEqualToEqualityB = equalityA.isEqualTo(equalityB);
|
|
63
|
+
if (!equalityAEqualToEqualityB) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return equalities;
|
|
68
|
+
}
|
|
69
|
+
getJudgements() {
|
|
70
|
+
const judgements = [];
|
|
71
|
+
this.contexts.forEach((context)=>{
|
|
72
|
+
const contextJudgements = context.getJudgements();
|
|
73
|
+
push(judgements, contextJudgements);
|
|
74
|
+
});
|
|
75
|
+
compress(judgements, (judgementA, judgementB)=>{
|
|
76
|
+
const judgementAEqualToJudgementB = judgementA.isEqualTo(judgementB);
|
|
77
|
+
if (!judgementAEqualToJudgementB) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return judgements;
|
|
82
|
+
}
|
|
83
|
+
getStatements() {
|
|
84
|
+
const statements = [];
|
|
85
|
+
this.contexts.forEach((context)=>{
|
|
86
|
+
const contextStatements = context.getStatements();
|
|
87
|
+
push(statements, contextStatements);
|
|
88
|
+
});
|
|
89
|
+
compress(statements, (statementA, statementB)=>{
|
|
90
|
+
const statementAEqualToStatementB = statementA.isEqualTo(statementB);
|
|
91
|
+
if (!statementAEqualToStatementB) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return statements;
|
|
96
|
+
}
|
|
97
|
+
getAssertions() {
|
|
98
|
+
const assertions = [];
|
|
99
|
+
this.contexts.forEach((context)=>{
|
|
100
|
+
const contextAssertions = context.getAssertions();
|
|
101
|
+
push(assertions, contextAssertions);
|
|
102
|
+
});
|
|
103
|
+
compress(assertions, (assertionA, assertionB)=>{
|
|
104
|
+
const assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
|
|
105
|
+
if (!assertionAEqualToAssertionB) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
return assertions;
|
|
110
|
+
}
|
|
111
|
+
getReferences() {
|
|
112
|
+
const references = [];
|
|
113
|
+
this.contexts.forEach((context)=>{
|
|
114
|
+
const contextReferences = context.getReferences();
|
|
115
|
+
push(references, contextReferences);
|
|
116
|
+
});
|
|
117
|
+
compress(references, (referenceA, referenceB)=>{
|
|
118
|
+
const referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
|
|
119
|
+
if (!referenceAEqualToReferenceB) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return references;
|
|
124
|
+
}
|
|
125
|
+
getAssumptions() {
|
|
126
|
+
const assumptions = [];
|
|
127
|
+
this.contexts.forEach((context)=>{
|
|
128
|
+
const contextAssumptions = context.getAssumptions();
|
|
129
|
+
push(assumptions, contextAssumptions);
|
|
130
|
+
});
|
|
131
|
+
compress(assumptions, (assumptionA, assumptionB)=>{
|
|
132
|
+
const assumptionAEqualToAssumptionB = assumptionA.isEqualTo(assumptionB);
|
|
133
|
+
if (!assumptionAEqualToAssumptionB) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
return assumptions;
|
|
138
|
+
}
|
|
139
|
+
getMetavariables() {
|
|
140
|
+
const metavariables = [];
|
|
141
|
+
this.contexts.forEach((context)=>{
|
|
142
|
+
const contextMetavariables = context.getMetavariables();
|
|
143
|
+
push(metavariables, contextMetavariables);
|
|
144
|
+
});
|
|
145
|
+
compress(metavariables, (metavariableA, metavariableB)=>{
|
|
146
|
+
const metavariableAEqualToMetavariableB = metavariableA.isEqualTo(metavariableB);
|
|
147
|
+
if (!metavariableAEqualToMetavariableB) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return metavariables;
|
|
152
|
+
}
|
|
153
|
+
getSubstitutions() {
|
|
154
|
+
const substitutions = [];
|
|
155
|
+
this.contexts.forEach((context)=>{
|
|
156
|
+
const contextSubstitutions = context.getSubstitutions();
|
|
157
|
+
push(substitutions, contextSubstitutions);
|
|
158
|
+
});
|
|
159
|
+
compress(substitutions, (substitutionA, substitutionB)=>{
|
|
160
|
+
const substitutionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
|
|
161
|
+
if (!substitutionAEqualToSubstitutionB) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return substitutions;
|
|
166
|
+
}
|
|
167
|
+
findTermByTermNode(termNode) {
|
|
168
|
+
const terms = this.getTerms(), term = terms.find((term)=>{
|
|
169
|
+
const termNodeMatches = term.matchTermNode(termNode);
|
|
170
|
+
if (termNodeMatches) {
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
}) || null;
|
|
174
|
+
return term;
|
|
175
|
+
}
|
|
176
|
+
findFrameByFrameNode(frameNode) {
|
|
177
|
+
const frames = this.getFrames(), frame = frames.find((frame)=>{
|
|
178
|
+
const frameNodeMatches = frame.matchFrameNode(frameNode);
|
|
179
|
+
if (frameNodeMatches) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
}) || null;
|
|
183
|
+
return frame;
|
|
184
|
+
}
|
|
185
|
+
findEqualityByEqualityNode(equalityNode) {
|
|
186
|
+
const equalities = this.getEqualities(), equality = equalities.find((equality)=>{
|
|
187
|
+
const equalityNodeMatches = equality.matchEqualityNode(equalityNode);
|
|
188
|
+
if (equalityNodeMatches) {
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
}) || null;
|
|
192
|
+
return equality;
|
|
193
|
+
}
|
|
194
|
+
findJudgementByJudgementNode(judgementNode) {
|
|
195
|
+
const judgements = this.getJudgements(), judgement = judgements.find((judgement)=>{
|
|
196
|
+
const judgementNodeMatches = judgement.matchJudgementNode(judgementNode);
|
|
197
|
+
if (judgementNodeMatches) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
}) || null;
|
|
201
|
+
return judgement;
|
|
202
|
+
}
|
|
203
|
+
findStatementByStatementNode(statementNode) {
|
|
204
|
+
const statements = this.getStatements(), statement = statements.find((statement)=>{
|
|
205
|
+
const statementNodeMatches = statement.matchStatementNode(statementNode);
|
|
206
|
+
if (statementNodeMatches) {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
}) || null;
|
|
210
|
+
return statement;
|
|
211
|
+
}
|
|
212
|
+
findReferenceByReferenceNode(referenceNode) {
|
|
213
|
+
const references = this.getReferences(), reference = references.find((reference)=>{
|
|
214
|
+
const referenceMatcheReferenceNode = reference.matchReferenceNode(referenceNode);
|
|
215
|
+
if (referenceMatcheReferenceNode) {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
}) || null;
|
|
219
|
+
return reference;
|
|
220
|
+
}
|
|
221
|
+
findAssertionByAssertionNode(assertionNode) {
|
|
222
|
+
const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
|
|
223
|
+
const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
|
|
224
|
+
if (assertionNodeMatches) {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
}) || null;
|
|
228
|
+
return assertion;
|
|
229
|
+
}
|
|
230
|
+
findAssumptionByAssumptionNode(assumptionNode) {
|
|
231
|
+
const assumptions = this.getAssumptions(), assumption = assumptions.find((assumption)=>{
|
|
232
|
+
const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
|
|
233
|
+
if (assumptionNodeMatches) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
}) || null;
|
|
237
|
+
return assumption;
|
|
238
|
+
}
|
|
239
|
+
findReferenceByMetavariableNode(metavariableNode) {
|
|
240
|
+
const references = this.getReferences(), reference = references.find((reference)=>{
|
|
241
|
+
const referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
|
|
242
|
+
if (referenceMatcheMetavariableNode) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
}) || null;
|
|
246
|
+
return reference;
|
|
247
|
+
}
|
|
248
|
+
findMetavariableByMetavariableNode(metavariableNode) {
|
|
249
|
+
const metavariables = this.getMetavariables(), metavariable = metavariables.find((metavariable)=>{
|
|
250
|
+
const metavariableNodeMatches = metavariable.matchMetavariableNode(metavariableNode);
|
|
251
|
+
if (metavariableNodeMatches) {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
}) || null;
|
|
255
|
+
return metavariable;
|
|
256
|
+
}
|
|
257
|
+
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
258
|
+
const substitutions = this.getSubstitutions(), substitution = substitutions.find((substitution)=>{
|
|
259
|
+
const substitutionNodeMatches = substitution.matchSubstitutionNode(substitutionNode);
|
|
260
|
+
if (substitutionNodeMatches) {
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
}) || null;
|
|
264
|
+
return substitution;
|
|
265
|
+
}
|
|
266
|
+
static fromContexts(...contexts) {
|
|
267
|
+
const lastContext = last(contexts), context = lastContext, synopticContext = new SynopticContext(context, contexts);
|
|
268
|
+
return synopticContext;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuY29uc3QgeyBwdXNoLCBsYXN0LCBjb21wcmVzcyB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bm9wdGljQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjb250ZXh0cykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5jb250ZXh0cyA9IGNvbnRleHRzO1xuICB9XG5cbiAgZ2V0Q29udGV4dHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICBjb25zdCB0ZXJtcyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0VGVybXMgPSBjb250ZXh0LmdldFRlcm1zKCk7XG5cbiAgICAgIHB1c2godGVybXMsIGNvbnRleHRUZXJtcyk7XG4gICAgfSk7XG4gICAgXG4gICAgY29tcHJlc3ModGVybXMsICh0ZXJtQSwgdGVybUIpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1BQ29tcGFyZXNUb1Rlcm1CID0gdGVybUEuY29tcGFyZVRlcm0odGVybUIpO1xuICAgICAgXG4gICAgICBpZiAoIXRlcm1BQ29tcGFyZXNUb1Rlcm1CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0RnJhbWVzKCkge1xuICAgIGNvbnN0IGZyYW1lcyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0RnJhbWVzID0gY29udGV4dC5nZXRGcmFtZXMoKTtcblxuICAgICAgcHVzaChmcmFtZXMsIGNvbnRleHRGcmFtZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoZnJhbWVzLCAoZnJhbWVBLCBmcmFtZUIpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lQUVxdWFsVG9GcmFtZUIgPSBmcmFtZUEuaXNFcXVhbFRvKGZyYW1lQik7XG5cbiAgICAgIGlmICghZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKCkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEVxdWFsaXRpZXMgPSBjb250ZXh0LmdldEVxdWFsaXRpZXMoKTtcblxuICAgICAgcHVzaChlcXVhbGl0aWVzLCBjb250ZXh0RXF1YWxpdGllcyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyhlcXVhbGl0aWVzLCAoZXF1YWxpdHlBLCBlcXVhbGl0eUIpID0+IHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5QUVxdWFsVG9FcXVhbGl0eUIgPSBlcXVhbGl0eUEuaXNFcXVhbFRvKGVxdWFsaXR5Qik7XG5cbiAgICAgIGlmICghZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5Qikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cygpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRKdWRnZW1lbnRzID0gY29udGV4dC5nZXRKdWRnZW1lbnRzKCk7XG5cbiAgICAgIHB1c2goanVkZ2VtZW50cywgY29udGV4dEp1ZGdlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoanVkZ2VtZW50cywgKGp1ZGdlbWVudEEsIGp1ZGdlbWVudEIpID0+IHtcbiAgICAgIGNvbnN0IGp1ZGdlbWVudEFFcXVhbFRvSnVkZ2VtZW50QiA9IGp1ZGdlbWVudEEuaXNFcXVhbFRvKGp1ZGdlbWVudEIpO1xuXG4gICAgICBpZiAoIWp1ZGdlbWVudEFFcXVhbFRvSnVkZ2VtZW50Qikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRTdGF0ZW1lbnRzID0gY29udGV4dC5nZXRTdGF0ZW1lbnRzKCk7XG5cbiAgICAgIHB1c2goc3RhdGVtZW50cywgY29udGV4dFN0YXRlbWVudHMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3Moc3RhdGVtZW50cywgKHN0YXRlbWVudEEsIHN0YXRlbWVudEIpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiA9IHN0YXRlbWVudEEuaXNFcXVhbFRvKHN0YXRlbWVudEIpO1xuXG4gICAgICBpZiAoIXN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50Qikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBhc3NlcnRpb25zID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRBc3NlcnRpb25zID0gY29udGV4dC5nZXRBc3NlcnRpb25zKCk7XG5cbiAgICAgIHB1c2goYXNzZXJ0aW9ucywgY29udGV4dEFzc2VydGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoYXNzZXJ0aW9ucywgKGFzc2VydGlvbkEsIGFzc2VydGlvbkIpID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiA9IGFzc2VydGlvbkEuaXNFcXVhbFRvKGFzc2VydGlvbkIpO1xuXG4gICAgICBpZiAoIWFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhc3NlcnRpb25zO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gW107XG5cbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHRSZWZlcmVuY2VzID0gY29udGV4dC5nZXRSZWZlcmVuY2VzKCk7XG5cbiAgICAgIHB1c2gocmVmZXJlbmNlcywgY29udGV4dFJlZmVyZW5jZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MocmVmZXJlbmNlcywgKHJlZmVyZW5jZUEsIHJlZmVyZW5jZUIpID0+IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQiA9IHJlZmVyZW5jZUEuaXNFcXVhbFRvKHJlZmVyZW5jZUIpO1xuXG4gICAgICBpZiAoIXJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dEFzc3VtcHRpb25zID0gY29udGV4dC5nZXRBc3N1bXB0aW9ucygpO1xuXG4gICAgICBwdXNoKGFzc3VtcHRpb25zLCBjb250ZXh0QXNzdW1wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3MoYXNzdW1wdGlvbnMsIChhc3N1bXB0aW9uQSwgYXNzdW1wdGlvbkIpID0+IHtcbiAgICAgIGNvbnN0IGFzc3VtcHRpb25BRXF1YWxUb0Fzc3VtcHRpb25CID0gYXNzdW1wdGlvbkEuaXNFcXVhbFRvKGFzc3VtcHRpb25CKTtcblxuICAgICAgaWYgKCFhc3N1bXB0aW9uQUVxdWFsVG9Bc3N1bXB0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0TWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcygpO1xuXG4gICAgICBwdXNoKG1ldGF2YXJpYWJsZXMsIGNvbnRleHRNZXRhdmFyaWFibGVzKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzKG1ldGF2YXJpYWJsZXMsIChtZXRhdmFyaWFibGVBLCBtZXRhdmFyaWFibGVCKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKCFtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFtdO1xuXG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0U3Vic3RpdHV0aW9ucyA9IGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucygpO1xuXG4gICAgICBwdXNoKHN1YnN0aXR1dGlvbnMsIGNvbnRleHRTdWJzdGl0dXRpb25zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzKHN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb25BLCBzdWJzdGl0dXRpb25CKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKCFzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5nZXRUZXJtcygpLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtcy5maW5kKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTm9kZU1hdGNoZXMgPSB0ZXJtLm1hdGNoVGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZXMuZmluZCgoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSBmcmFtZS5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZnJhbWVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdGllcyA9IHRoaXMuZ2V0RXF1YWxpdGllcygpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gZXF1YWxpdGllcy5maW5kKChlcXVhbGl0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXF1YWxpdHlOb2RlTWF0Y2hlcyA9IGVxdWFsaXR5Lm1hdGNoRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChlcXVhbGl0eU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRzID0gdGhpcy5nZXRKdWRnZW1lbnRzKCksXG4gICAgICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50cy5maW5kKChqdWRnZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudE5vZGVNYXRjaGVzID0ganVkZ2VtZW50Lm1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKGp1ZGdlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuZ2V0U3RhdGVtZW50cygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzZXJ0aW9ucyA9IHRoaXMuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGFzc2VydGlvbnMuZmluZCgoYXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRpb25Ob2RlTWF0Y2hlcyA9IGFzc2VydGlvbi5tYXRjaEFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3NlcnRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gdGhpcy5nZXRBc3N1bXB0aW9ucygpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9ucy5maW5kKChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBhc3N1bXB0aW9uLm1hdGNoQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzdW1wdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZXMuZmluZCgobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRleHRzKC4uLmNvbnRleHRzKSB7XG4gICAgY29uc3QgbGFzdENvbnRleHQgPSBsYXN0KGNvbnRleHRzKSxcbiAgICAgICAgICBjb250ZXh0ID0gbGFzdENvbnRleHQsICAvLy9cbiAgICAgICAgICBzeW5vcHRpY0NvbnRleHQgPSBuZXcgU3lub3B0aWNDb250ZXh0KGNvbnRleHQsIGNvbnRleHRzKTtcblxuICAgIHJldHVybiBzeW5vcHRpY0NvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTeW5vcHRpY0NvbnRleHQiLCJwdXNoIiwibGFzdCIsImNvbXByZXNzIiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImNvbnRleHRzIiwiZ2V0Q29udGV4dHMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZm9yRWFjaCIsImNvbnRleHRUZXJtcyIsInRlcm1BIiwidGVybUIiLCJ0ZXJtQUNvbXBhcmVzVG9UZXJtQiIsImNvbXBhcmVUZXJtIiwiZ2V0RnJhbWVzIiwiZnJhbWVzIiwiY29udGV4dEZyYW1lcyIsImZyYW1lQSIsImZyYW1lQiIsImZyYW1lQUVxdWFsVG9GcmFtZUIiLCJpc0VxdWFsVG8iLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImNvbnRleHRFcXVhbGl0aWVzIiwiZXF1YWxpdHlBIiwiZXF1YWxpdHlCIiwiZXF1YWxpdHlBRXF1YWxUb0VxdWFsaXR5QiIsImdldEp1ZGdlbWVudHMiLCJqdWRnZW1lbnRzIiwiY29udGV4dEp1ZGdlbWVudHMiLCJqdWRnZW1lbnRBIiwianVkZ2VtZW50QiIsImp1ZGdlbWVudEFFcXVhbFRvSnVkZ2VtZW50QiIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiY29udGV4dFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRBIiwic3RhdGVtZW50QiIsInN0YXRlbWVudEFFcXVhbFRvU3RhdGVtZW50QiIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiY29udGV4dEFzc2VydGlvbnMiLCJhc3NlcnRpb25BIiwiYXNzZXJ0aW9uQiIsImFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQiIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiY29udGV4dFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VBIiwicmVmZXJlbmNlQiIsInJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQiIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJjb250ZXh0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9uQSIsImFzc3VtcHRpb25CIiwiYXNzdW1wdGlvbkFFcXVhbFRvQXNzdW1wdGlvbkIiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImNvbnRleHRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJnZXRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImNvbnRleHRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9uQSIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5IiwiZXF1YWxpdHlOb2RlTWF0Y2hlcyIsIm1hdGNoRXF1YWxpdHlOb2RlIiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3N1bXB0aW9uTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwicmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJm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
|