occam-verify-cli 1.0.457 → 1.0.472
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/constants.js +13 -1
- package/lib/context/ephemeral.js +270 -0
- package/lib/context/file.js +102 -66
- package/lib/context/liminal.js +120 -0
- package/lib/context/literal.js +92 -0
- package/lib/context/nominal.js +15 -1
- package/lib/context/release.js +66 -7
- package/lib/context/scoped.js +48 -40
- package/lib/context/synthetic.js +133 -0
- package/lib/element/assertion/contained.js +66 -66
- package/lib/element/assertion/defined.js +32 -32
- package/lib/element/assertion/property.js +39 -39
- package/lib/element/assertion/satisfies.js +22 -22
- package/lib/element/assumption.js +5 -8
- package/lib/element/conclusion.js +14 -13
- package/lib/element/constructor.js +2 -2
- package/lib/element/deduction.js +14 -13
- package/lib/element/derivation.js +3 -3
- package/lib/element/equality.js +5 -5
- package/lib/element/equivalence.js +112 -107
- package/lib/element/equivalences.js +24 -10
- package/lib/element/error.js +3 -3
- package/lib/element/frame.js +38 -21
- package/lib/element/hypothesis.js +2 -2
- package/lib/element/judgement.js +6 -5
- package/lib/element/metaType.js +1 -2
- package/lib/element/metavariable.js +46 -35
- package/lib/element/parameter.js +13 -5
- package/lib/element/procedureCall.js +16 -16
- package/lib/element/proof.js +14 -13
- package/lib/element/proofAssertion/premise.js +41 -30
- package/lib/element/proofAssertion/step.js +39 -35
- package/lib/element/proofAssertion/supposition.js +43 -32
- package/lib/element/proofAssertion.js +19 -5
- package/lib/element/propertyRelation.js +2 -2
- package/lib/element/reference.js +50 -9
- package/lib/element/rule.js +26 -28
- package/lib/element/section.js +2 -2
- package/lib/element/signature.js +9 -6
- package/lib/element/statement.js +44 -31
- package/lib/element/subproof.js +18 -17
- package/lib/element/substitution/frame.js +83 -46
- package/lib/element/substitution/reference.js +101 -19
- package/lib/element/substitution/statement.js +122 -75
- package/lib/element/substitution/term.js +93 -57
- package/lib/element/substitution.js +20 -69
- package/lib/element/substitutions.js +49 -34
- package/lib/element/term.js +30 -21
- package/lib/element/topLevelAssertion/axiom.js +8 -6
- package/lib/element/topLevelAssertion/conjecture.js +4 -4
- package/lib/element/topLevelAssertion/lemma.js +4 -4
- package/lib/element/topLevelAssertion/theorem.js +2 -2
- package/lib/element/topLevelAssertion.js +30 -23
- package/lib/element/topLevelMetaAssertion/metaLemma.js +2 -2
- package/lib/element/topLevelMetaAssertion/metatheorem.js +2 -2
- package/lib/element/topLevelMetaAssertion.js +16 -12
- package/lib/element/variable.js +30 -22
- package/lib/index.js +3 -3
- package/lib/main.js +3 -3
- package/lib/node/frame.js +2 -2
- package/lib/node/metavariable.js +4 -4
- package/lib/node/parameter.js +28 -7
- package/lib/node/substitution/frame.js +9 -31
- package/lib/node/substitution/reference.js +137 -0
- package/lib/node/substitution/statement.js +9 -31
- package/lib/node/substitution/term.js +9 -23
- package/lib/nonTerminalNodeMap.js +3 -2
- package/lib/process/instantiate.js +2 -14
- package/lib/process/unify.js +5 -5
- package/lib/tokenTypes.js +22 -0
- package/lib/utilities/context.js +54 -19
- package/lib/utilities/element.js +161 -336
- package/lib/utilities/instance.js +4 -4
- package/lib/utilities/string.js +18 -4
- package/lib/utilities/unification.js +24 -18
- package/lib/utilities/validation.js +31 -31
- package/package.json +2 -2
- package/src/constants.js +12 -0
- package/src/context/{transient.js → ephemeral.js} +15 -112
- package/src/context/file.js +66 -67
- package/src/context/liminal.js +67 -0
- package/src/context/{fragment.js → literal.js} +17 -4
- package/src/context/nominal.js +12 -0
- package/src/context/release.js +44 -6
- package/src/context/scoped.js +41 -31
- package/src/context/synthetic.js +60 -0
- package/src/element/assertion/contained.js +49 -47
- package/src/element/assertion/defined.js +29 -27
- package/src/element/assertion/property.js +35 -35
- package/src/element/assertion/satisfies.js +19 -18
- package/src/element/assumption.js +4 -10
- package/src/element/conclusion.js +16 -19
- package/src/element/constructor.js +1 -1
- package/src/element/deduction.js +16 -21
- package/src/element/derivation.js +2 -2
- package/src/element/equality.js +4 -4
- package/src/element/equivalence.js +115 -135
- package/src/element/equivalences.js +9 -7
- package/src/element/error.js +4 -2
- package/src/element/frame.js +50 -23
- package/src/element/hypothesis.js +1 -1
- package/src/element/judgement.js +9 -4
- package/src/element/metaType.js +0 -1
- package/src/element/metavariable.js +54 -53
- package/src/element/parameter.js +10 -5
- package/src/element/procedureCall.js +20 -18
- package/src/element/proof.js +14 -16
- package/src/element/proofAssertion/premise.js +46 -42
- package/src/element/proofAssertion/step.js +45 -40
- package/src/element/proofAssertion/supposition.js +56 -45
- package/src/element/proofAssertion.js +23 -5
- package/src/element/propertyRelation.js +1 -1
- package/src/element/reference.js +64 -16
- package/src/element/rule.js +31 -37
- package/src/element/section.js +1 -1
- package/src/element/signature.js +8 -8
- package/src/element/statement.js +51 -40
- package/src/element/subproof.js +16 -18
- package/src/element/substitution/frame.js +99 -42
- package/src/element/substitution/reference.js +120 -20
- package/src/element/substitution/statement.js +160 -89
- package/src/element/substitution/term.js +104 -63
- package/src/element/substitution.js +16 -58
- package/src/element/substitutions.js +43 -41
- package/src/element/term.js +37 -32
- package/src/element/topLevelAssertion/axiom.js +8 -6
- package/src/element/topLevelAssertion/conjecture.js +1 -2
- package/src/element/topLevelAssertion/lemma.js +2 -3
- package/src/element/topLevelAssertion/theorem.js +1 -1
- package/src/element/topLevelAssertion.js +31 -27
- package/src/element/topLevelMetaAssertion/metaLemma.js +1 -2
- package/src/element/topLevelMetaAssertion/metatheorem.js +1 -2
- package/src/element/topLevelMetaAssertion.js +15 -13
- package/src/element/variable.js +30 -31
- package/src/index.js +2 -1
- package/src/main.js +2 -1
- package/src/node/frame.js +1 -1
- package/src/node/metavariable.js +3 -3
- package/src/node/parameter.js +32 -5
- package/src/node/substitution/frame.js +6 -32
- package/src/node/substitution/reference.js +38 -0
- package/src/node/substitution/statement.js +6 -32
- package/src/node/substitution/term.js +6 -22
- package/src/nonTerminalNodeMap.js +3 -0
- package/src/process/instantiate.js +0 -8
- package/src/process/unify.js +4 -4
- package/src/tokenTypes.js +4 -0
- package/src/utilities/context.js +43 -17
- package/src/utilities/element.js +187 -401
- package/src/utilities/instance.js +3 -3
- package/src/utilities/string.js +21 -5
- package/src/utilities/unification.js +26 -23
- package/src/utilities/validation.js +47 -47
- package/lib/context/fragment.js +0 -77
- package/lib/context/transient.js +0 -371
- package/lib/log.js +0 -150
- package/lib/utilities/fragment.js +0 -23
- package/src/log.js +0 -118
- package/src/utilities/fragment.js +0 -11
|
@@ -105,7 +105,7 @@ function _is_native_reflect_construct() {
|
|
|
105
105
|
var _ContainedAssertion;
|
|
106
106
|
var _default = (0, _elements.define)((_ContainedAssertion = /*#__PURE__*/ function(Assertion) {
|
|
107
107
|
_inherits(ContainedAssertion, Assertion);
|
|
108
|
-
function ContainedAssertion(
|
|
108
|
+
function ContainedAssertion(context, string, node, term, frame, negated, statement) {
|
|
109
109
|
_class_call_check(this, ContainedAssertion);
|
|
110
110
|
var _this;
|
|
111
111
|
_this = _call_super(this, ContainedAssertion, [
|
|
@@ -145,46 +145,46 @@ var _default = (0, _elements.define)((_ContainedAssertion = /*#__PURE__*/ functi
|
|
|
145
145
|
}
|
|
146
146
|
},
|
|
147
147
|
{
|
|
148
|
-
key: "
|
|
149
|
-
value: function
|
|
150
|
-
var
|
|
148
|
+
key: "validate",
|
|
149
|
+
value: function validate(assignments, stated, context) {
|
|
150
|
+
var validates = false;
|
|
151
151
|
var containedAssertionString = this.getString(); ///
|
|
152
|
-
|
|
153
|
-
var termValidates = this.validateTerm(assignments, stated,
|
|
152
|
+
context.trace("Validating the '".concat(containedAssertionString, "' contained assertion..."));
|
|
153
|
+
var termValidates = this.validateTerm(assignments, stated, context), frameVerifies = this.validateFrame(assignments, stated, context), statementValidates = this.validateStatement(assignments, stated, context);
|
|
154
154
|
if (termValidates || frameVerifies || statementValidates) {
|
|
155
|
-
var
|
|
155
|
+
var validatesWhenStated = false, validatesWhenDerived = false;
|
|
156
156
|
if (stated) {
|
|
157
|
-
|
|
157
|
+
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
158
158
|
} else {
|
|
159
|
-
|
|
159
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
160
160
|
}
|
|
161
|
-
if (
|
|
162
|
-
|
|
161
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
162
|
+
validates = true;
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
|
-
if (
|
|
166
|
-
|
|
165
|
+
if (validates) {
|
|
166
|
+
context.debug("...validated the '".concat(containedAssertionString, "' contained assertion."));
|
|
167
167
|
}
|
|
168
|
-
return
|
|
168
|
+
return validates;
|
|
169
169
|
}
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
key: "validateTerm",
|
|
173
|
-
value: function validateTerm(assignments, stated,
|
|
173
|
+
value: function validateTerm(assignments, stated, context) {
|
|
174
174
|
var termValidates = false;
|
|
175
175
|
if (this.term !== null) {
|
|
176
|
-
var termString = this.term.getString();
|
|
177
|
-
|
|
176
|
+
var termString = this.term.getString(), containedAssertionString = this.getString(); ///
|
|
177
|
+
context.trace("Validating the '".concat(containedAssertionString, "' contained assertino's '").concat(termString, "' term..."));
|
|
178
178
|
var termSingular = this.term.isSingular();
|
|
179
179
|
if (!termSingular) {
|
|
180
|
-
|
|
180
|
+
context.debug("The '".concat(termString, "' term is not singular."));
|
|
181
181
|
} else {
|
|
182
|
-
termValidates = this.term.validate(
|
|
183
|
-
var
|
|
184
|
-
return
|
|
182
|
+
termValidates = this.term.validate(context, function() {
|
|
183
|
+
var validatesAhead = true;
|
|
184
|
+
return validatesAhead;
|
|
185
185
|
});
|
|
186
186
|
if (termValidates) {
|
|
187
|
-
|
|
187
|
+
context.debug("...validated the '".concat(containedAssertionString, "' contained assertino's '").concat(termString, "' term."));
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
}
|
|
@@ -192,21 +192,21 @@ var _default = (0, _elements.define)((_ContainedAssertion = /*#__PURE__*/ functi
|
|
|
192
192
|
}
|
|
193
193
|
},
|
|
194
194
|
{
|
|
195
|
-
key: "
|
|
196
|
-
value: function
|
|
195
|
+
key: "validateFrame",
|
|
196
|
+
value: function validateFrame(assignments, stated, context) {
|
|
197
197
|
var frameVerifies = false;
|
|
198
198
|
if (this.frame !== null) {
|
|
199
|
-
var frameString = this.frame.getString();
|
|
200
|
-
|
|
199
|
+
var frameString = this.frame.getString(), containedAssertionString = this.getString(); ///
|
|
200
|
+
context.trace("Validating the '".concat(containedAssertionString, "' contained assertino's '").concat(frameString, "' frame..."));
|
|
201
201
|
var frameSingular = this.frame.isSingular();
|
|
202
202
|
if (!frameSingular) {
|
|
203
|
-
|
|
203
|
+
context.debug("The '".concat(frameString, "' frame is not singular."));
|
|
204
204
|
} else {
|
|
205
205
|
stated = true; ///
|
|
206
206
|
assignments = null; ///
|
|
207
|
-
frameVerifies = this.frame.
|
|
207
|
+
frameVerifies = this.frame.validate(assignments, stated, context);
|
|
208
208
|
if (frameVerifies) {
|
|
209
|
-
|
|
209
|
+
context.debug("...validated the '".concat(containedAssertionString, "' contained assertino's '").concat(frameString, "' frame."));
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
}
|
|
@@ -215,58 +215,58 @@ var _default = (0, _elements.define)((_ContainedAssertion = /*#__PURE__*/ functi
|
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
key: "validateStatement",
|
|
218
|
-
value: function validateStatement(assignments, stated,
|
|
218
|
+
value: function validateStatement(assignments, stated, context) {
|
|
219
219
|
var statementValidates = false;
|
|
220
220
|
if (this.statement !== null) {
|
|
221
221
|
var statementString = this.statement.getString();
|
|
222
|
-
|
|
222
|
+
context.trace("Validating the '".concat(statementString, "' statement..."));
|
|
223
223
|
stated = true; ///
|
|
224
224
|
assignments = null; ///
|
|
225
|
-
statementValidates = this.statement.validate(assignments, stated,
|
|
225
|
+
statementValidates = this.statement.validate(assignments, stated, context);
|
|
226
226
|
if (statementValidates) {
|
|
227
|
-
|
|
227
|
+
context.debug("...validated the '".concat(statementString, "' statement."));
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
230
|
return statementValidates;
|
|
231
231
|
}
|
|
232
232
|
},
|
|
233
233
|
{
|
|
234
|
-
key: "
|
|
235
|
-
value: function
|
|
236
|
-
var
|
|
234
|
+
key: "validateWhenStated",
|
|
235
|
+
value: function validateWhenStated(assignments, context) {
|
|
236
|
+
var validatesWhenStated;
|
|
237
237
|
var containedAssertionString = this.getString(); ///
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
if (
|
|
241
|
-
|
|
238
|
+
context.trace("Validating the '".concat(containedAssertionString, "' stated contained assertion..."));
|
|
239
|
+
validatesWhenStated = true;
|
|
240
|
+
if (validatesWhenStated) {
|
|
241
|
+
context.debug("...validated the '".concat(containedAssertionString, "' stated contained assertion."));
|
|
242
242
|
}
|
|
243
|
-
return
|
|
243
|
+
return validatesWhenStated;
|
|
244
244
|
}
|
|
245
245
|
},
|
|
246
246
|
{
|
|
247
|
-
key: "
|
|
248
|
-
value: function
|
|
249
|
-
var
|
|
247
|
+
key: "validateWhenDerived",
|
|
248
|
+
value: function validateWhenDerived1(context) {
|
|
249
|
+
var validatesWhenDerived;
|
|
250
250
|
var containedAssertionString = this.getString(); ///
|
|
251
|
-
|
|
252
|
-
var generalCotnext = null, specificContext =
|
|
253
|
-
|
|
254
|
-
if (
|
|
255
|
-
|
|
251
|
+
context.trace("Validating the '".concat(containedAssertionString, "' derived contained assertion..."));
|
|
252
|
+
var generalCotnext = null, specificContext = context; ///
|
|
253
|
+
validatesWhenDerived = validateWhenDerived(this.term, this.frame, this.statement, this.negated, generalCotnext, specificContext);
|
|
254
|
+
if (validatesWhenDerived) {
|
|
255
|
+
context.debug("...validated the '".concat(containedAssertionString, "' derived contained assertion."));
|
|
256
256
|
}
|
|
257
|
-
return
|
|
257
|
+
return validatesWhenDerived;
|
|
258
258
|
}
|
|
259
259
|
},
|
|
260
260
|
{
|
|
261
261
|
key: "unifyIndependently",
|
|
262
262
|
value: function unifyIndependently(substitutions, generalContext, specificContext) {
|
|
263
263
|
var unifiesIndependently;
|
|
264
|
-
var
|
|
265
|
-
|
|
266
|
-
var term = (0, _substitutions.termFromTermAndSubstitutions)(this.term, substitutions, generalContext, specificContext), frame = (0, _substitutions.frameFromFrameAndSubstitutions)(this.frame, substitutions, generalContext, specificContext), statement = (0, _substitutions.statementFromStatementAndSubstitutions)(this.statement, substitutions, generalContext, specificContext),
|
|
267
|
-
unifiesIndependently =
|
|
264
|
+
var context = specificContext, containedAssertionString = this.getString(); ///
|
|
265
|
+
context.trace("Unifying the '".concat(containedAssertionString, "' contained assertion independently..."));
|
|
266
|
+
var term = (0, _substitutions.termFromTermAndSubstitutions)(this.term, substitutions, generalContext, specificContext), frame = (0, _substitutions.frameFromFrameAndSubstitutions)(this.frame, substitutions, generalContext, specificContext), statement = (0, _substitutions.statementFromStatementAndSubstitutions)(this.statement, substitutions, generalContext, specificContext), validatesWhenDerived = validateWhenDerived(term, frame, statement, this.negated, generalContext, specificContext);
|
|
267
|
+
unifiesIndependently = validatesWhenDerived; ///
|
|
268
268
|
if (unifiesIndependently) {
|
|
269
|
-
|
|
269
|
+
context.debug("...unified the '".concat(containedAssertionString, "' contained assertion independently."));
|
|
270
270
|
}
|
|
271
271
|
return unifiesIndependently;
|
|
272
272
|
}
|
|
@@ -274,30 +274,30 @@ var _default = (0, _elements.define)((_ContainedAssertion = /*#__PURE__*/ functi
|
|
|
274
274
|
]);
|
|
275
275
|
return ContainedAssertion;
|
|
276
276
|
}(_assertion.default), _define_property(_ContainedAssertion, "name", "ContainedAssertion"), _ContainedAssertion));
|
|
277
|
-
function
|
|
278
|
-
var
|
|
279
|
-
var
|
|
277
|
+
function validateWhenDerived(term, frame, statement, negated, generalContext, specificContext) {
|
|
278
|
+
var validatesWhenDerived = false;
|
|
279
|
+
var context = specificContext; ///
|
|
280
280
|
if (statement !== null) {
|
|
281
281
|
if (term !== null) {
|
|
282
|
-
var termContained = statement.isTermContained(term,
|
|
282
|
+
var termContained = statement.isTermContained(term, context);
|
|
283
283
|
if (!negated && termContained) {
|
|
284
|
-
|
|
284
|
+
validatesWhenDerived = true;
|
|
285
285
|
}
|
|
286
286
|
if (negated && !termContained) {
|
|
287
|
-
|
|
287
|
+
validatesWhenDerived = true;
|
|
288
288
|
}
|
|
289
289
|
}
|
|
290
290
|
if (frame !== null) {
|
|
291
|
-
var frameContained = statement.isFrameContained(frame,
|
|
291
|
+
var frameContained = statement.isFrameContained(frame, context);
|
|
292
292
|
if (!negated && frameContained) {
|
|
293
|
-
|
|
293
|
+
validatesWhenDerived = true;
|
|
294
294
|
}
|
|
295
295
|
if (negated && !frameContained) {
|
|
296
|
-
|
|
296
|
+
validatesWhenDerived = true;
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
}
|
|
300
|
-
return
|
|
300
|
+
return validatesWhenDerived;
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnMsIGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucywgc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnRhaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNwb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgdGhpcy5uZWdhdGVkID0gbmVnYXRlZDtcbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuXG4gIGdldEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICB9XG5cbiAgaXNOZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWQ7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgdmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVRlcm0oYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCksXG4gICAgICAgICAgZnJhbWVWZXJpZmllcyA9IHRoaXMudmVyaWZ5RnJhbWUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudChhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMgfHwgZnJhbWVWZXJpZmllcyB8fCBzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgIGxldCB2ZXJpZmllc1doZW5TdGF0ZWQgPSBmYWxzZSxcbiAgICAgICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgICAgdmVyaWZpZXNXaGVuU3RhdGVkID0gdGhpcy52ZXJpZnlXaGVuU3RhdGVkKGFzc2lnbm1lbnRzLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZlcmlmaWVzV2hlbkRlcml2ZWQgPSB0aGlzLnZlcmlmeVdoZW5EZXJpdmVkKGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXNXaGVuU3RhdGVkIHx8IHZlcmlmaWVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgICAgY29uc3QgdGVybVNpbmd1bGFyID0gdGhpcy50ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgICAgaWYgKCF0ZXJtU2luZ3VsYXIpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXMgPSB0aGlzLnRlcm0udmFsaWRhdGUoY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZlcmlmaWVzQWhlYWQgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIHZlcmlmaWVzQWhlYWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVmFsaWRhdGVzO1xuICB9XG5cbiAgdmVyaWZ5RnJhbWUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBmcmFtZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5mcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuLi5gKTtcblxuICAgICAgY29uc3QgZnJhbWVTaW5ndWxhciA9IHRoaXMuZnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgICBpZiAoIWZyYW1lU2luZ3VsYXIpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgaXMgbm90IHNpbmd1bGFyLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gICAgICAgIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgICAgICAgZnJhbWVWZXJpZmllcyA9IHRoaXMuZnJhbWUudmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChmcmFtZVZlcmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVWZXJpZmllcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHRoaXMuc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgICAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gICAgICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdmVyaWZ5V2hlblN0YXRlZChhc3NpZ25tZW50cywgY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllc1doZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZlcmlmaWVzV2hlblN0YXRlZCA9IHRydWU7XG5cbiAgICBpZiAodmVyaWZpZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzV2hlblN0YXRlZDtcbiAgfVxuXG4gIHZlcmlmeVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXNXaGVuRGVyaXZlZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb3RuZXh0ID0gbnVsbCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgIHZlcmlmaWVzV2hlbkRlcml2ZWQgPSB2ZXJpZnlXaGVuRGVyaXZlZCh0aGlzLnRlcm0sIHRoaXMuZnJhbWUsIHRoaXMuc3RhdGVtZW50LCB0aGlzLm5lZ2F0ZWQsIGdlbmVyYWxDb3RuZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHZlcmlmaWVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICB1bmlmeUluZGVwZW5kZW50bHkoc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnModGhpcy5mcmFtZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnModGhpcy5zdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICAgIHZlcmlmaWVzV2hlbkRlcml2ZWQgPSB2ZXJpZnlXaGVuRGVyaXZlZCh0ZXJtLCBmcmFtZSwgc3RhdGVtZW50LCB0aGlzLm5lZ2F0ZWQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB2ZXJpZmllc1doZW5EZXJpdmVkOyAvLy9cblxuICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVzSW5kZXBlbmRlbnRseTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcbn0pO1xuXG5mdW5jdGlvbiB2ZXJpZnlXaGVuRGVyaXZlZCh0ZXJtLCBmcmFtZSwgc3RhdGVtZW50LCBuZWdhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc1Rlcm1Db250YWluZWQodGVybSwgY29udGV4dCk7XG5cbiAgICAgIGlmICghbmVnYXRlZCAmJiB0ZXJtQ29udGFpbmVkKSB7XG4gICAgICAgIHZlcmlmaWVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVnYXRlZCAmJiAhdGVybUNvbnRhaW5lZCkge1xuICAgICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lQ29udGFpbmVkID0gc3RhdGVtZW50LmlzRnJhbWVDb250YWluZWQoZnJhbWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIW5lZ2F0ZWQgJiYgZnJhbWVDb250YWluZWQpIHtcbiAgICAgICAgdmVyaWZpZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWdhdGVkICYmICFmcmFtZUNvbnRhaW5lZCkge1xuICAgICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmVyaWZpZXNXaGVuRGVyaXZlZDtcbn0iXSwibmFtZXMiOlsiZGVmaW5lIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY3BvbnRleHQiLCJzdHJpbmciLCJub2RlIiwidGVybSIsImZyYW1lIiwibmVnYXRlZCIsInN0YXRlbWVudCIsImNvbnRleHQiLCJnZXRUZXJtIiwiZ2V0RnJhbWUiLCJpc05lZ2F0ZWQiLCJnZXRTdGF0ZW1lbnQiLCJ2ZXJpZnkiLCJhc3NpZ25tZW50cyIsInN0YXRlZCIsInZlcmlmaWVzIiwiY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVUZXJtIiwiZnJhbWVWZXJpZmllcyIsInZlcmlmeUZyYW1lIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2ZXJpZmllc1doZW5TdGF0ZWQiLCJ2ZXJpZmllc1doZW5EZXJpdmVkIiwidmVyaWZ5V2hlblN0YXRlZCIsInZlcmlmeVdoZW5EZXJpdmVkIiwiZGVidWciLCJ0ZXJtU3RyaW5nIiwidGVybVNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInZhbGlkYXRlIiwidmVyaWZpZXNBaGVhZCIsImZyYW1lU3RyaW5nIiwiZnJhbWVTaW5ndWxhciIsInN0YXRlbWVudFN0cmluZyIsImdlbmVyYWxDb3RuZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidW5pZnlJbmRlcGVuZGVudGx5Iiwic3Vic3RpdHV0aW9ucyIsImdlbmVyYWxDb250ZXh0IiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJBc3NlcnRpb24iLCJuYW1lIiwidGVybUNvbnRhaW5lZCIsImlzVGVybUNvbnRhaW5lZCIsImZyYW1lQ29udGFpbmVkIiwiaXNGcmFtZUNvbnRhaW5lZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBT0E7OztlQUFBOzs7Z0VBTHNCO3dCQUVDOzZCQUM4Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRXJILFdBQWVBLElBQUFBLGdCQUFNLHVDQUFDOzthQUFNQyxtQkFDZEMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsU0FBUztnQ0FEekNQOztnQkFFeEIsa0JBRndCQTtZQUVsQlE7WUFBU047WUFBUUM7O1FBRXZCLE1BQUtDLElBQUksR0FBR0E7UUFDWixNQUFLQyxLQUFLLEdBQUdBO1FBQ2IsTUFBS0MsT0FBTyxHQUFHQTtRQUNmLE1BQUtDLFNBQVMs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
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnMsIGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucywgc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnRhaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICB2YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVRlcm0oYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCksXG4gICAgICAgICAgZnJhbWVWZXJpZmllcyA9IHRoaXMudmFsaWRhdGVGcmFtZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSxcbiAgICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpXG5cbiAgICBpZiAodGVybVZhbGlkYXRlcyB8fCBmcmFtZVZlcmlmaWVzIHx8IHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZSxcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RhdGVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZChhc3NpZ25tZW50cywgY29udGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQgfHwgdmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgbGV0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlubydzICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm1TaW5ndWxhciA9IHRoaXMudGVybS5pc1Npbmd1bGFyKCk7XG5cbiAgICAgIGlmICghdGVybVNpbmd1bGFyKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBub3Qgc2luZ3VsYXIuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzID0gdGhpcy50ZXJtLnZhbGlkYXRlKGNvbnRleHQsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZXNBaGVhZCA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzQWhlYWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW5vJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBmcmFtZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5mcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpbm8ncyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICAgIGNvbnN0IGZyYW1lU2luZ3VsYXIgPSB0aGlzLmZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgICAgaWYgKCFmcmFtZVNpbmd1bGFyKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGlzIG5vdCBzaW5ndWxhci5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICAgICAgICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gICAgICAgIGZyYW1lVmVyaWZpZXMgPSB0aGlzLmZyYW1lLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChmcmFtZVZlcmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW5vJ3MgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgICAgIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoYXNzaWdubWVudHMsIGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvdG5leHQgPSBudWxsLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5mcmFtZSwgdGhpcy5zdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgZ2VuZXJhbENvdG5leHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyh0aGlzLmZyYW1lLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyh0aGlzLnN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCksXG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBzdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHZhbGlkYXRlc1doZW5EZXJpdmVkOyAvLy9cblxuICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVzSW5kZXBlbmRlbnRseTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc1Rlcm1Db250YWluZWQodGVybSwgY29udGV4dCk7XG5cbiAgICAgIGlmICghbmVnYXRlZCAmJiB0ZXJtQ29udGFpbmVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZ2F0ZWQgJiYgIXRlcm1Db250YWluZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVDb250YWluZWQgPSBzdGF0ZW1lbnQuaXNGcmFtZUNvbnRhaW5lZChmcmFtZSwgY29udGV4dCk7XG5cbiAgICAgIGlmICghbmVnYXRlZCAmJiBmcmFtZUNvbnRhaW5lZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWdhdGVkICYmICFmcmFtZUNvbnRhaW5lZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xufSJdLCJuYW1lcyI6WyJkZWZpbmUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsInRlcm0iLCJmcmFtZSIsIm5lZ2F0ZWQiLCJzdGF0ZW1lbnQiLCJnZXRUZXJtIiwiZ2V0RnJhbWUiLCJpc05lZ2F0ZWQiLCJnZXRTdGF0ZW1lbnQiLCJ2YWxpZGF0ZSIsImFzc2lnbm1lbnRzIiwic3RhdGVkIiwidmFsaWRhdGVzIiwiY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVUZXJtIiwiZnJhbWVWZXJpZmllcyIsInZhbGlkYXRlRnJhbWUiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJkZWJ1ZyIsInRlcm1TdHJpbmciLCJ0ZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidmFsaWRhdGVzQWhlYWQiLCJmcmFtZVN0cmluZyIsImZyYW1lU2luZ3VsYXIiLCJzdGF0ZW1lbnRTdHJpbmciLCJnZW5lcmFsQ290bmV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInN1YnN0aXR1dGlvbnMiLCJnZW5lcmFsQ29udGV4dCIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsImZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIiwiQXNzZXJ0aW9uIiwibmFtZSIsInRlcm1Db250YWluZWQiLCJpc1Rlcm1Db250YWluZWQiLCJmcmFtZUNvbnRhaW5lZCIsImlzRnJhbWVDb250YWluZWQiXSwibWFwcGluZ3Mi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
|
|
@@ -179,27 +179,27 @@ var _default = (0, _elements.define)((_DefinedAssertion = /*#__PURE__*/ function
|
|
|
179
179
|
}
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
|
-
key: "
|
|
183
|
-
value: function
|
|
184
|
-
var
|
|
182
|
+
key: "validate",
|
|
183
|
+
value: function validate(assignments, stated, context) {
|
|
184
|
+
var validated = false;
|
|
185
185
|
var definedAssertionString = this.getString(); ///
|
|
186
|
-
context.trace("
|
|
187
|
-
var termValidates = this.validateTerm(assignments, stated, context), frameVerifies = this.
|
|
186
|
+
context.trace("Validating the '".concat(definedAssertionString, "' defined assertion..."));
|
|
187
|
+
var termValidates = this.validateTerm(assignments, stated, context), frameVerifies = this.validateFrame(assignments, stated, context);
|
|
188
188
|
if (termValidates || frameVerifies) {
|
|
189
189
|
var verifiesWhenStated = false, verifiesWhenDerived = false;
|
|
190
190
|
if (stated) {
|
|
191
|
-
verifiesWhenStated = this.
|
|
191
|
+
verifiesWhenStated = this.validateWhenStated(assignments, context);
|
|
192
192
|
} else {
|
|
193
|
-
verifiesWhenDerived = this.
|
|
193
|
+
verifiesWhenDerived = this.validateWhenDerived(context);
|
|
194
194
|
}
|
|
195
195
|
if (verifiesWhenStated || verifiesWhenDerived) {
|
|
196
|
-
|
|
196
|
+
validated = true;
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
|
-
if (
|
|
200
|
-
context.debug("...
|
|
199
|
+
if (validated) {
|
|
200
|
+
context.debug("...validated the '".concat(definedAssertionString, "' defined assertion."));
|
|
201
201
|
}
|
|
202
|
-
return
|
|
202
|
+
return validated;
|
|
203
203
|
}
|
|
204
204
|
},
|
|
205
205
|
{
|
|
@@ -207,8 +207,8 @@ var _default = (0, _elements.define)((_DefinedAssertion = /*#__PURE__*/ function
|
|
|
207
207
|
value: function validateTerm(assignments, stated, context) {
|
|
208
208
|
var termValidates = false;
|
|
209
209
|
if (this.term !== null) {
|
|
210
|
-
var termString = this.term.getString(); ///
|
|
211
|
-
context.trace("Validating the '".concat(termString, "' term..."));
|
|
210
|
+
var termString = this.term.getString(), definedAssertionString = this.getString(); ///
|
|
211
|
+
context.trace("Validating the '".concat(definedAssertionString, "' defined assertino's '").concat(termString, "' term..."));
|
|
212
212
|
var termSingular = this.term.isSingular();
|
|
213
213
|
if (!termSingular) {
|
|
214
214
|
context.debug("The '".concat(termString, "' term is not singular."));
|
|
@@ -218,7 +218,7 @@ var _default = (0, _elements.define)((_DefinedAssertion = /*#__PURE__*/ function
|
|
|
218
218
|
return verifiesAhead;
|
|
219
219
|
});
|
|
220
220
|
if (termValidates) {
|
|
221
|
-
context.debug("...validated the '".concat(termString, "' term."));
|
|
221
|
+
context.debug("...validated the'".concat(definedAssertionString, "' defined assertino's '").concat(termString, "' term."));
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
}
|
|
@@ -226,21 +226,21 @@ var _default = (0, _elements.define)((_DefinedAssertion = /*#__PURE__*/ function
|
|
|
226
226
|
}
|
|
227
227
|
},
|
|
228
228
|
{
|
|
229
|
-
key: "
|
|
230
|
-
value: function
|
|
229
|
+
key: "validateFrame",
|
|
230
|
+
value: function validateFrame(assignments, stated, context) {
|
|
231
231
|
var frameVerifies = false;
|
|
232
232
|
if (this.frame !== null) {
|
|
233
|
-
var frameString = this.frame.getString(); ///
|
|
234
|
-
context.trace("
|
|
233
|
+
var frameString = this.frame.getString(), definedAssertionString = this.getString(); ///
|
|
234
|
+
context.trace("Validating the'".concat(definedAssertionString, "' defined assertino's '").concat(frameString, "' frame..."));
|
|
235
235
|
var frameSingular = this.frame.isSingular();
|
|
236
236
|
if (!frameSingular) {
|
|
237
237
|
context.debug("The '".concat(frameString, "' frame is not singular."));
|
|
238
238
|
} else {
|
|
239
239
|
stated = true; ///
|
|
240
240
|
assignments = null; ///
|
|
241
|
-
frameVerifies = this.frame.
|
|
241
|
+
frameVerifies = this.frame.validate(assignments, stated, context);
|
|
242
242
|
if (frameVerifies) {
|
|
243
|
-
context.debug("...
|
|
243
|
+
context.debug("...validated the'".concat(definedAssertionString, "' defined assertino's '").concat(frameString, "' frame."));
|
|
244
244
|
}
|
|
245
245
|
}
|
|
246
246
|
}
|
|
@@ -248,28 +248,28 @@ var _default = (0, _elements.define)((_DefinedAssertion = /*#__PURE__*/ function
|
|
|
248
248
|
}
|
|
249
249
|
},
|
|
250
250
|
{
|
|
251
|
-
key: "
|
|
252
|
-
value: function
|
|
251
|
+
key: "validateWhenStated",
|
|
252
|
+
value: function validateWhenStated(assignments, context) {
|
|
253
253
|
var verifiesWhenStated;
|
|
254
254
|
var definedAssertionString = this.getString(); ///
|
|
255
|
-
context.trace("
|
|
255
|
+
context.trace("Validating the '".concat(definedAssertionString, "' stated defined assertion..."));
|
|
256
256
|
verifiesWhenStated = true;
|
|
257
257
|
if (verifiesWhenStated) {
|
|
258
|
-
context.debug("...
|
|
258
|
+
context.debug("...validated the '".concat(definedAssertionString, "' stated defined assertion."));
|
|
259
259
|
}
|
|
260
260
|
return verifiesWhenStated;
|
|
261
261
|
}
|
|
262
262
|
},
|
|
263
263
|
{
|
|
264
|
-
key: "
|
|
265
|
-
value: function
|
|
264
|
+
key: "validateWhenDerived",
|
|
265
|
+
value: function validateWhenDerived1(context) {
|
|
266
266
|
var verifiesWhenDerived;
|
|
267
267
|
var definedAssertionString = this.getString(); ///
|
|
268
|
-
context.trace("
|
|
268
|
+
context.trace("Validating the '".concat(definedAssertionString, "' derived defined assertion..."));
|
|
269
269
|
var generalContext = null, specificContext = context; ///
|
|
270
|
-
verifiesWhenDerived =
|
|
270
|
+
verifiesWhenDerived = validateWhenDerived(this.term, this.frame, this.negated, generalContext, specificContext);
|
|
271
271
|
if (verifiesWhenDerived) {
|
|
272
|
-
context.debug("...
|
|
272
|
+
context.debug("...validated the '".concat(definedAssertionString, "' derived defined assertion."));
|
|
273
273
|
}
|
|
274
274
|
return verifiesWhenDerived;
|
|
275
275
|
}
|
|
@@ -280,7 +280,7 @@ var _default = (0, _elements.define)((_DefinedAssertion = /*#__PURE__*/ function
|
|
|
280
280
|
var unifiesIndependently;
|
|
281
281
|
var context = specificContext, definedAssertionString = this.getString(); ///
|
|
282
282
|
context.trace("Unifying the '".concat(definedAssertionString, "' defined assertion independently..."));
|
|
283
|
-
var term = (0, _substitutions.termFromTermAndSubstitutions)(this.term, substitutions, generalContext, specificContext), frame = (0, _substitutions.frameFromFrameAndSubstitutions)(this.frame, substitutions, generalContext, specificContext), verifiesWhenDerived =
|
|
283
|
+
var term = (0, _substitutions.termFromTermAndSubstitutions)(this.term, substitutions, generalContext, specificContext), frame = (0, _substitutions.frameFromFrameAndSubstitutions)(this.frame, substitutions, generalContext, specificContext), verifiesWhenDerived = validateWhenDerived(term, frame, this.negated, generalContext, specificContext);
|
|
284
284
|
unifiesIndependently = verifiesWhenDerived; ///
|
|
285
285
|
if (unifiesIndependently) {
|
|
286
286
|
context.debug("...unified the '".concat(definedAssertionString, "' defined assertion independently."));
|
|
@@ -291,7 +291,7 @@ var _default = (0, _elements.define)((_DefinedAssertion = /*#__PURE__*/ function
|
|
|
291
291
|
]);
|
|
292
292
|
return DefinedAssertion;
|
|
293
293
|
}(_assertion.default), _define_property(_DefinedAssertion, "name", "DefinedAssertion"), _DefinedAssertion));
|
|
294
|
-
function
|
|
294
|
+
function validateWhenDerived(term, frame, negated, generalContext, specificContext) {
|
|
295
295
|
var verifiesWhenDerived = false;
|
|
296
296
|
var context = specificContext; ///
|
|
297
297
|
if (term !== null) {
|
|
@@ -315,4 +315,4 @@ function verifyWhenDerived(term, frame, negated, generalContext, specificContext
|
|
|
315
315
|
return verifiesWhenDerived;
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9kZWZpbmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIERlZmluZWRBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgdGhpcy5mcmFtZT0gZnJhbWU7XG4gICAgdGhpcy5uZWdhdGVkID0gbmVnYXRlZDtcbiAgfVxuXG4gIGdldFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuXG4gIGdldEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICB9XG5cbiAgaXNOZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWQ7XG4gIH1cblxuICB2ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlVGVybShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSxcbiAgICAgICAgICBmcmFtZVZlcmlmaWVzID0gdGhpcy52ZXJpZnlGcmFtZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmFsaWRhdGVzIHx8IGZyYW1lVmVyaWZpZXMpIHtcbiAgICAgIGxldCB2ZXJpZmllc1doZW5TdGF0ZWQgPSBmYWxzZSxcbiAgICAgICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgICAgdmVyaWZpZXNXaGVuU3RhdGVkID0gdGhpcy52ZXJpZnlXaGVuU3RhdGVkKGFzc2lnbm1lbnRzLCBjb250ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZlcmlmaWVzV2hlbkRlcml2ZWQgPSB0aGlzLnZlcmlmeVdoZW5EZXJpdmVkKGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXNXaGVuU3RhdGVkIHx8IHZlcmlmaWVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0oYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCB0ZXJtVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy50ZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgICAgY29uc3QgdGVybVNpbmd1bGFyID0gdGhpcy50ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgICAgaWYgKCF0ZXJtU2luZ3VsYXIpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXMgPSB0aGlzLnRlcm0udmFsaWRhdGUoY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZlcmlmaWVzQWhlYWQgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIHZlcmlmaWVzQWhlYWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVmFsaWRhdGVzO1xuICB9XG5cbiAgdmVyaWZ5RnJhbWUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICAgIGxldCBmcmFtZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5mcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmZyYW1lLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICAgIGNvbnN0IGZyYW1lU2luZ3VsYXIgPSB0aGlzLmZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgICAgaWYgKCFmcmFtZVNpbmd1bGFyKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGlzIG5vdCBzaW5ndWxhci5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICAgICAgICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gICAgICAgIGZyYW1lVmVyaWZpZXMgPSB0aGlzLmZyYW1lLnZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoZnJhbWVWZXJpZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlXaGVuU3RhdGVkKGFzc2lnbm1lbnRzLCBjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIHN0YXRlZCBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdmVyaWZpZXNXaGVuU3RhdGVkID0gdHJ1ZTtcblxuICAgIGlmICh2ZXJpZmllc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGRlZmluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2ZXJpZnlXaGVuRGVyaXZlZChjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IG51bGwsXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgdmVyaWZpZXNXaGVuRGVyaXZlZCA9IHZlcmlmeVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5mcmFtZSwgdGhpcy5uZWdhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmICh2ZXJpZmllc1doZW5EZXJpdmVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICB1bmlmeUluZGVwZW5kZW50bHkoc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyh0aGlzLmZyYW1lLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSxcbiAgICAgICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdmVyaWZ5V2hlbkRlcml2ZWQodGVybSwgZnJhbWUsIHRoaXMubmVnYXRlZCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHZlcmlmaWVzV2hlbkRlcml2ZWQ7IC8vL1xuXG4gICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pZmllc0luZGVwZW5kZW50bHk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRGVmaW5lZEFzc2VydGlvblwiO1xufSk7XG5cbmZ1bmN0aW9uIHZlcmlmeVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICB2YXJpYWJsZURlZmluZWQgPSBnZW5lcmFsQ29udGV4dC5pc1ZhcmlhYmxlRGVmaW5lZCh2YXJpYWJsZSk7XG5cbiAgICBpZiAoIW5lZ2F0ZWQgJiYgdmFyaWFibGVEZWZpbmVkKSB7XG4gICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlZCAmJiAhdmFyaWFibGVEZWZpbmVkKSB7XG4gICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZnJhbWUhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVEZWZpbmVkID0gY29udGV4dC5pc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKTtcblxuICAgIGlmICghbmVnYXRlZCAmJiBtZXRhdmFyaWFibGVEZWZpbmVkKSB7XG4gICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlZCAmJiAhbWV0YXZhcmlhYmxlRGVmaW5lZCkge1xuICAgICAgdmVyaWZpZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzV2hlbkRlcml2ZWQ7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiRGVmaW5lZEFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwidGVybSIsImZyYW1lIiwibmVnYXRlZCIsImdldFRlcm0iLCJnZXRGcmFtZSIsImlzTmVnYXRlZCIsInZlcmlmeSIsImFzc2lnbm1lbnRzIiwic3RhdGVkIiwidmVyaWZpZXMiLCJkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVUZXJtIiwiZnJhbWVWZXJpZmllcyIsInZlcmlmeUZyYW1lIiwidmVyaWZpZXNXaGVuU3RhdGVkIiwidmVyaWZpZXNXaGVuRGVyaXZlZCIsInZlcmlmeVdoZW5TdGF0ZWQiLCJ2ZXJpZnlXaGVuRGVyaXZlZCIsImRlYnVnIiwidGVybVN0cmluZyIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YWxpZGF0ZSIsInZlcmlmaWVzQWhlYWQiLCJmcmFtZVN0cmluZyIsImZyYW1lU2luZ3VsYXIiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInN1YnN0aXR1dGlvbnMiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsInRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnMiLCJmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMiLCJBc3NlcnRpb24iLCJuYW1lIiwiVmFyaWFibGUiLCJlbGVtZW50cyIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInZhcmlhYmxlIiwiZnJvbVRlcm1Ob2RlIiwidmFyaWFibGVEZWZpbmVkIiwiaXNWYXJpYWJsZURlZmluZWQiLCJNZXRhdmFyaWFibGUiLCJmcmFtZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJmcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRGVmaW5lZCIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBUUE7OztlQUFBOzs7Z0VBTnFCO2dFQUNDOzZCQUd1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFN0UsV0FBZUEsSUFBQUEs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
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9kZWZpbmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIERlZmluZWRBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgdGhpcy5mcmFtZT0gZnJhbWU7XG4gICAgdGhpcy5uZWdhdGVkID0gbmVnYXRlZDtcbiAgfVxuXG4gIGdldFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuXG4gIGdldEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICB9XG5cbiAgaXNOZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhbGlkYXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVRlcm0oYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCksXG4gICAgICAgICAgZnJhbWVWZXJpZmllcyA9IHRoaXMudmFsaWRhdGVGcmFtZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVmFsaWRhdGVzIHx8IGZyYW1lVmVyaWZpZXMpIHtcbiAgICAgIGxldCB2ZXJpZmllc1doZW5TdGF0ZWQgPSBmYWxzZSxcbiAgICAgICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgICAgdmVyaWZpZXNXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQoYXNzaWdubWVudHMsIGNvbnRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVyaWZpZXNXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcmlmaWVzV2hlblN0YXRlZCB8fCB2ZXJpZmllc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIHZhbGlkYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlZDtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgbGV0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgICAgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW5vJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgICAgY29uc3QgdGVybVNpbmd1bGFyID0gdGhpcy50ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgICAgaWYgKCF0ZXJtU2luZ3VsYXIpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXMgPSB0aGlzLnRlcm0udmFsaWRhdGUoY29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZlcmlmaWVzQWhlYWQgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIHZlcmlmaWVzQWhlYWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZScke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlubydzICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUZyYW1lKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgICBsZXQgZnJhbWVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZnJhbWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5mcmFtZS5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZScke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlubydzICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuLi5gKTtcblxuICAgICAgY29uc3QgZnJhbWVTaW5ndWxhciA9IHRoaXMuZnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgICBpZiAoIWZyYW1lU2luZ3VsYXIpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgaXMgbm90IHNpbmd1bGFyLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gICAgICAgIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgICAgICAgZnJhbWVWZXJpZmllcyA9IHRoaXMuZnJhbWUudmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKGZyYW1lVmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW5vJ3MgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVZlcmlmaWVzO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGFzc2lnbm1lbnRzLCBjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBzdGF0ZWQgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZlcmlmaWVzV2hlblN0YXRlZCA9IHRydWU7XG5cbiAgICBpZiAodmVyaWZpZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBzdGF0ZWQgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVzV2hlblN0YXRlZDtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllc1doZW5EZXJpdmVkO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gbnVsbCxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdmFsaWRhdGVXaGVuRGVyaXZlZCh0aGlzLnRlcm0sIHRoaXMuZnJhbWUsIHRoaXMubmVnYXRlZCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodmVyaWZpZXNXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgICAgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0aGlzLnRlcm0sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zKHRoaXMuZnJhbWUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpLFxuICAgICAgICAgIHZlcmlmaWVzV2hlbkRlcml2ZWQgPSB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCB0aGlzLm5lZ2F0ZWQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB2ZXJpZmllc1doZW5EZXJpdmVkOyAvLy9cblxuICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkRlZmluZWRBc3NlcnRpb25cIjtcbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCB2ZXJpZmllc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICB2YXJpYWJsZURlZmluZWQgPSBnZW5lcmFsQ29udGV4dC5pc1ZhcmlhYmxlRGVmaW5lZCh2YXJpYWJsZSk7XG5cbiAgICBpZiAoIW5lZ2F0ZWQgJiYgdmFyaWFibGVEZWZpbmVkKSB7XG4gICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlZCAmJiAhdmFyaWFibGVEZWZpbmVkKSB7XG4gICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZnJhbWUhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gTWV0YXZhcmlhYmxlLmZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVEZWZpbmVkID0gY29udGV4dC5pc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKTtcblxuICAgIGlmICghbmVnYXRlZCAmJiBtZXRhdmFyaWFibGVEZWZpbmVkKSB7XG4gICAgICB2ZXJpZmllc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlZCAmJiAhbWV0YXZhcmlhYmxlRGVmaW5lZCkge1xuICAgICAgdmVyaWZpZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVzV2hlbkRlcml2ZWQ7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lIiwiRGVmaW5lZEFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwidGVybSIsImZyYW1lIiwibmVnYXRlZCIsImdldFRlcm0iLCJnZXRGcmFtZSIsImlzTmVnYXRlZCIsInZhbGlkYXRlIiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJ2YWxpZGF0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVUZXJtIiwiZnJhbWVWZXJpZmllcyIsInZhbGlkYXRlRnJhbWUiLCJ2ZXJpZmllc1doZW5TdGF0ZWQiLCJ2ZXJpZmllc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImRlYnVnIiwidGVybVN0cmluZyIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2ZXJpZmllc0FoZWFkIiwiZnJhbWVTdHJpbmciLCJmcmFtZVNpbmd1bGFyIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJzdWJzdGl0dXRpb25zIiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwiQXNzZXJ0aW9uIiwibmFtZSIsIlZhcmlhYmxlIiwiZWxlbWVudHMiLCJ0ZXJtTm9kZSIsImdldE5vZGUiLCJ2YXJpYWJsZSIsImZyb21UZXJtTm9kZSIsInZhcmlhYmxlRGVmaW5lZCIsImlzVmFyaWFibGVEZWZpbmVkIiwiTWV0YXZhcmlhYmxlIiwiZnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlIiwiZnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZURlZmluZWQiLCJpc01ldGF2YXJpYWJsZURlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVFBOzs7ZUFBQTs7O2dFQU5xQjtnRUFDQzs2QkFHdUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRTdFLFdBQWVBLElBQUFBLGdCQUFNLHFDQUFDOzthQUFNQyxpQkFDZEMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLE9BQU87Z0NBRDdCTjs7Z0JBRXhCLGtCQUZ3QkE7WUFFbEJDO1lBQVNDO1lBQVFDOztRQUV2QixNQUFLQyxJQUFJLEdBQUdBO1FBQ1osTUFBS0MsS0FBSyxHQUFFQTtRQUNaLE1BQUtDLE9BQU8sR0FBR0E7Ozs7O1lBR2pCQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILElBQUk7WUFDbEI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILEtBQUs7WUFDbkI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNILE9BQU87WUFDckI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUEsU0FBU0MsV0FBVyxFQUFFQyxNQUFNLEVBQUVYLE9BQU87Z0JBQ25DLElBQUlZLFlBQVk7Z0JBRWhCLElBQU1DLHlCQUF5QixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO2dCQUVwRGQsUUFBUWUsS0FBSyxDQUFDLEFBQUMsbUJBQXlDLE9BQXZCRix3QkFBdUI7Z0JB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
|