occam-verify-cli 1.0.956 → 1.0.973

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.
Files changed (81) hide show
  1. package/lib/context/bounded.js +11 -7
  2. package/lib/context.js +17 -5
  3. package/lib/element/assertion/signature.js +17 -19
  4. package/lib/element/assertion/subproof.js +36 -39
  5. package/lib/element/assertion/type.js +20 -1
  6. package/lib/element/assumption/metaLevel.js +18 -17
  7. package/lib/element/assumption.js +52 -3
  8. package/lib/element/combinator.js +10 -12
  9. package/lib/element/conclusion.js +33 -33
  10. package/lib/element/constructor.js +7 -11
  11. package/lib/element/deduction.js +33 -33
  12. package/lib/element/equivalence.js +11 -7
  13. package/lib/element/hypothesis.js +45 -19
  14. package/lib/element/judgement.js +1 -1
  15. package/lib/element/label.js +9 -11
  16. package/lib/element/proofAssertion/premise.js +98 -87
  17. package/lib/element/proofAssertion/step.js +27 -27
  18. package/lib/element/proofAssertion/supposition.js +99 -88
  19. package/lib/element/proofAssertion.js +3 -3
  20. package/lib/element/reference.js +30 -38
  21. package/lib/element/signature.js +38 -47
  22. package/lib/element/statement.js +18 -58
  23. package/lib/element/substitution/frame.js +34 -42
  24. package/lib/element/substitution/reference.js +12 -13
  25. package/lib/element/substitution/statement.js +26 -31
  26. package/lib/element/substitution/term.js +32 -37
  27. package/lib/element/term.js +2 -2
  28. package/lib/element/topLevelAssertion/axiom.js +33 -34
  29. package/lib/element/topLevelAssertion.js +30 -7
  30. package/lib/element/topLevelMetaAssertion.js +2 -2
  31. package/lib/process/discharge.js +38 -0
  32. package/lib/process/unification.js +228 -0
  33. package/lib/process/unify.js +9 -5
  34. package/lib/process/validation.js +291 -0
  35. package/lib/utilities/context.js +69 -105
  36. package/lib/utilities/element.js +2 -4
  37. package/lib/utilities/string.js +4 -4
  38. package/package.json +1 -1
  39. package/src/context/bounded.js +19 -7
  40. package/src/context.js +26 -6
  41. package/src/element/assertion/signature.js +21 -26
  42. package/src/element/assertion/subproof.js +43 -45
  43. package/src/element/assertion/type.js +30 -1
  44. package/src/element/assumption/metaLevel.js +26 -22
  45. package/src/element/assumption.js +80 -2
  46. package/src/element/combinator.js +11 -14
  47. package/src/element/conclusion.js +38 -37
  48. package/src/element/constructor.js +8 -13
  49. package/src/element/deduction.js +38 -37
  50. package/src/element/equivalence.js +17 -13
  51. package/src/element/hypothesis.js +59 -19
  52. package/src/element/judgement.js +1 -1
  53. package/src/element/label.js +10 -12
  54. package/src/element/proofAssertion/premise.js +123 -107
  55. package/src/element/proofAssertion/step.js +29 -29
  56. package/src/element/proofAssertion/supposition.js +124 -108
  57. package/src/element/proofAssertion.js +2 -2
  58. package/src/element/reference.js +36 -47
  59. package/src/element/signature.js +42 -53
  60. package/src/element/statement.js +18 -89
  61. package/src/element/substitution/frame.js +45 -58
  62. package/src/element/substitution/reference.js +13 -16
  63. package/src/element/substitution/statement.js +27 -34
  64. package/src/element/substitution/term.js +37 -46
  65. package/src/element/term.js +1 -1
  66. package/src/element/topLevelAssertion/axiom.js +43 -45
  67. package/src/element/topLevelAssertion.js +42 -6
  68. package/src/element/topLevelMetaAssertion.js +2 -2
  69. package/src/process/discharge.js +33 -0
  70. package/src/{utilities → process}/unification.js +21 -27
  71. package/src/process/unify.js +9 -5
  72. package/src/{utilities → process}/validation.js +2 -2
  73. package/src/utilities/context.js +77 -128
  74. package/src/utilities/element.js +2 -5
  75. package/src/utilities/string.js +6 -6
  76. package/lib/context/ephemeral.js +0 -28
  77. package/lib/context/synoptic.js +0 -255
  78. package/lib/utilities/unification.js +0 -233
  79. package/lib/utilities/validation.js +0 -291
  80. package/src/context/ephemeral.js +0 -17
  81. package/src/context/synoptic.js +0 -361
@@ -1,255 +0,0 @@
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
- const _synoptic = require("../utilities/synoptic");
14
- function _interop_require_default(obj) {
15
- return obj && obj.__esModule ? obj : {
16
- default: obj
17
- };
18
- }
19
- const { first, last } = _necessary.arrayUtilities;
20
- class SynopticContext extends _context.default {
21
- constructor(context, contexts){
22
- super(context);
23
- this.contexts = contexts;
24
- }
25
- getContexts() {
26
- return this.contexts;
27
- }
28
- isStated() {
29
- const firstContext = first(this.contexts), context = firstContext, stated = context.isStated();
30
- return stated;
31
- }
32
- getTerms(terms = []) {
33
- this.contexts.forEach((context)=>{
34
- context.getTerms(terms);
35
- });
36
- (0, _synoptic.compressTerms)(terms);
37
- return terms;
38
- }
39
- getFrames(frames = []) {
40
- this.contexts.forEach((context)=>{
41
- context.getFrames(frames);
42
- });
43
- (0, _synoptic.compressFrames)(frames);
44
- return frames;
45
- }
46
- getProperties(properties = []) {
47
- this.contexts.forEach((context)=>{
48
- context.getProperties(properties);
49
- });
50
- (0, _synoptic.compressProperties)(properties);
51
- return properties;
52
- }
53
- getEqualities(equalities = []) {
54
- this.contexts.forEach((context)=>{
55
- context.getEqualities(equalities);
56
- });
57
- (0, _synoptic.compressEqualities)(equalities);
58
- return equalities;
59
- }
60
- getJudgements(judgements = []) {
61
- this.contexts.forEach((context)=>{
62
- context.getJudgements(judgements);
63
- });
64
- (0, _synoptic.compressJudgements)(judgements);
65
- return judgements;
66
- }
67
- getAssertions(assertions = []) {
68
- this.contexts.forEach((context)=>{
69
- context.getAssertions(assertions);
70
- });
71
- (0, _synoptic.compressAssertions)(assertions);
72
- return assertions;
73
- }
74
- getStatements(statements = []) {
75
- this.contexts.forEach((context)=>{
76
- context.getStatements(statements);
77
- });
78
- (0, _synoptic.compressStatements)(statements);
79
- return statements;
80
- }
81
- getSignatures(signatures = []) {
82
- this.contexts.forEach((context)=>{
83
- context.getSignatures(signatures);
84
- });
85
- (0, _synoptic.compressSignatures)(signatures);
86
- return signatures;
87
- }
88
- getReferences(references = []) {
89
- this.contexts.forEach((context)=>{
90
- context.getReferences(references);
91
- });
92
- (0, _synoptic.compressReferences)(references);
93
- return references;
94
- }
95
- getAssumptions(assumptions = []) {
96
- this.contexts.forEach((context)=>{
97
- context.getAssumptions(assumptions);
98
- });
99
- (0, _synoptic.compressAssumptions)(assumptions);
100
- return assumptions;
101
- }
102
- getMetavariables(metavariables = []) {
103
- this.contexts.forEach((context)=>{
104
- context.getMetavariables(metavariables);
105
- });
106
- (0, _synoptic.compressMetavariables)(metavariables);
107
- return metavariables;
108
- }
109
- getSubstitutions(substitutions = []) {
110
- this.contexts.forEach((context)=>{
111
- context.getSubstitutions(substitutions);
112
- });
113
- (0, _synoptic.compressSubstitutions)(substitutions);
114
- return substitutions;
115
- }
116
- getPropertyRelations(propertyRelations = []) {
117
- this.contexts.forEach((context)=>{
118
- context.getPropertyRelations(propertyRelations);
119
- });
120
- (0, _synoptic.compressPropertyRelations)(propertyRelations);
121
- return propertyRelations;
122
- }
123
- findTermByTermNode(termNode) {
124
- const terms = this.getTerms(), term = terms.find((term)=>{
125
- const termNodeMatches = term.matchTermNode(termNode);
126
- if (termNodeMatches) {
127
- return true;
128
- }
129
- }) || null;
130
- return term;
131
- }
132
- findFrameByFrameNode(frameNode) {
133
- const frames = this.getFrames(), frame = frames.find((frame)=>{
134
- const frameNodeMatches = frame.matchFrameNode(frameNode);
135
- if (frameNodeMatches) {
136
- return true;
137
- }
138
- }) || null;
139
- return frame;
140
- }
141
- findPropertyByPropetyNode(propertyNode) {
142
- const propertys = this.getProperties(), property = propertys.find((property)=>{
143
- const propertyNodeMatches = property.matchFrameNode(propertyNode);
144
- if (propertyNodeMatches) {
145
- return true;
146
- }
147
- }) || null;
148
- return property;
149
- }
150
- findEqualityByEqualityNode(equalityNode) {
151
- const equalities = this.getEqualities(), equality = equalities.find((equality)=>{
152
- const equalityNodeMatches = equality.matchEqualityNode(equalityNode);
153
- if (equalityNodeMatches) {
154
- return true;
155
- }
156
- }) || null;
157
- return equality;
158
- }
159
- findJudgementByJudgementNode(judgementNode) {
160
- const judgements = this.getJudgements(), judgement = judgements.find((judgement)=>{
161
- const judgementNodeMatches = judgement.matchJudgementNode(judgementNode);
162
- if (judgementNodeMatches) {
163
- return true;
164
- }
165
- }) || null;
166
- return judgement;
167
- }
168
- findAssertionByAssertionNode(assertionNode) {
169
- const assertions = this.getAssertions(), assertion = assertions.find((assertion)=>{
170
- const assertionNodeMatches = assertion.matchAssertionNode(assertionNode);
171
- if (assertionNodeMatches) {
172
- return true;
173
- }
174
- }) || null;
175
- return assertion;
176
- }
177
- findStatementByStatementNode(statementNode) {
178
- const statements = this.getStatements(), statement = statements.find((statement)=>{
179
- const statementNodeMatches = statement.matchStatementNode(statementNode);
180
- if (statementNodeMatches) {
181
- return true;
182
- }
183
- }) || null;
184
- return statement;
185
- }
186
- findSignatureBySignatureNode(signatureNode) {
187
- const signatures = this.getSignatures(), signature = signatures.find((signature)=>{
188
- const signatureNodeMatches = signature.matchSignatureNode(signatureNode);
189
- if (signatureNodeMatches) {
190
- return true;
191
- }
192
- }) || null;
193
- return signature;
194
- }
195
- findReferenceByReferenceNode(referenceNode) {
196
- const references = this.getReferences(), reference = references.find((reference)=>{
197
- const referenceMatcheReferenceNode = reference.matchReferenceNode(referenceNode);
198
- if (referenceMatcheReferenceNode) {
199
- return true;
200
- }
201
- }) || null;
202
- return reference;
203
- }
204
- findAssumptionByAssumptionNode(assumptionNode) {
205
- const assumptions = this.getAssumptions(), assumption = assumptions.find((assumption)=>{
206
- const assumptionNodeMatches = assumption.matchAssumptionNode(assumptionNode);
207
- if (assumptionNodeMatches) {
208
- return true;
209
- }
210
- }) || null;
211
- return assumption;
212
- }
213
- findReferenceByMetavariableNode(metavariableNode) {
214
- const references = this.getReferences(), reference = references.find((reference)=>{
215
- const referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
216
- if (referenceMatcheMetavariableNode) {
217
- return true;
218
- }
219
- }) || null;
220
- return reference;
221
- }
222
- findMetavariableByMetavariableNode(metavariableNode) {
223
- const metavariables = this.getMetavariables(), metavariable = metavariables.find((metavariable)=>{
224
- const metavariableNodeMatches = metavariable.matchMetavariableNode(metavariableNode);
225
- if (metavariableNodeMatches) {
226
- return true;
227
- }
228
- }) || null;
229
- return metavariable;
230
- }
231
- findSubstitutionBySubstitutionNode(substitutionNode) {
232
- const substitutions = this.getSubstitutions(), substitution = substitutions.find((substitution)=>{
233
- const substitutionNodeMatches = substitution.matchSubstitutionNode(substitutionNode);
234
- if (substitutionNodeMatches) {
235
- return true;
236
- }
237
- }) || null;
238
- return substitution;
239
- }
240
- findPropertyRelationByPropertyRelationNode(propertyRelationNode) {
241
- const propertyRelations = this.getPropertyRelations(), propertyRelation = propertyRelations.find((propertyRelation)=>{
242
- const propertyRelationNodeMatches = propertyRelation.matchPropertyRelationNode(propertyRelationNode);
243
- if (propertyRelationNodeMatches) {
244
- return true;
245
- }
246
- }) || null;
247
- return propertyRelation;
248
- }
249
- static fromContexts(contexts) {
250
- const lastContext = last(contexts), context = lastContext, synopticContext = new SynopticContext(context, contexts);
251
- return synopticContext;
252
- }
253
- }
254
-
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3N5bm9wdGljLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgY29tcHJlc3NUZXJtcyxcbiAgICAgICAgIGNvbXByZXNzRnJhbWVzLFxuICAgICAgICAgY29tcHJlc3NQcm9wZXJ0aWVzLFxuICAgICAgICAgY29tcHJlc3NFcXVhbGl0aWVzLFxuICAgICAgICAgY29tcHJlc3NKdWRnZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NBc3NlcnRpb25zLFxuICAgICAgICAgY29tcHJlc3NTdGF0ZW1lbnRzLFxuICAgICAgICAgY29tcHJlc3NTaWduYXR1cmVzLFxuICAgICAgICAgY29tcHJlc3NSZWZlcmVuY2VzLFxuICAgICAgICAgY29tcHJlc3NBc3N1bXB0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzTWV0YXZhcmlhYmxlcyxcbiAgICAgICAgIGNvbXByZXNzU3Vic3RpdHV0aW9ucyxcbiAgICAgICAgIGNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMsfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N5bm9wdGljXCI7XG5cbmNvbnN0IHsgZmlyc3QsIGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW5vcHRpY0NvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgY29udGV4dHMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcbiAgfVxuXG4gIGdldENvbnRleHRzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRzO1xuICB9XG5cbiAgaXNTdGF0ZWQoKSB7XG4gICAgY29uc3QgZmlyc3RDb250ZXh0ID0gZmlyc3QodGhpcy5jb250ZXh0cyksXG4gICAgICAgICAgY29udGV4dCA9IGZpcnN0Q29udGV4dCwgLy8vXG4gICAgICAgICAgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgcmV0dXJuIHN0YXRlZDtcbiAgfVxuXG4gIGdldFRlcm1zKHRlcm1zID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NUZXJtcyh0ZXJtcyk7XG5cbiAgICByZXR1cm4gdGVybXM7XG4gIH1cblxuICBnZXRGcmFtZXMoZnJhbWVzID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnRleHQuZ2V0RnJhbWVzKGZyYW1lcyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc0ZyYW1lcyhmcmFtZXMpO1xuXG4gICAgcmV0dXJuIGZyYW1lcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMocHJvcGVydGllcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldFByb3BlcnRpZXMocHJvcGVydGllcyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc1Byb3BlcnRpZXMocHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldEVxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc0VxdWFsaXRpZXMoZXF1YWxpdGllcyk7XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfVxuXG4gIGdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc0p1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc0Fzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldFN0YXRlbWVudHMoc3RhdGVtZW50cyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc1N0YXRlbWVudHMoc3RhdGVtZW50cyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc1NpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG4gICAgfSk7XG5cbiAgICBjb21wcmVzc1JlZmVyZW5jZXMocmVmZXJlbmNlcyk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlcztcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKGFzc3VtcHRpb25zID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnRleHQuZ2V0QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaCgoY29udGV4dCkgPT4ge1xuICAgICAgY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuICAgIH0pO1xuXG4gICAgY29tcHJlc3NTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVJlbGF0aW9ucyhwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKChjb250ZXh0KSA9PiB7XG4gICAgICBjb250ZXh0LmdldFByb3BlcnR5UmVsYXRpb25zKHByb3BlcnR5UmVsYXRpb25zKTtcbiAgICB9KTtcblxuICAgIGNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMocHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb25zO1xuICB9XG5cbiAgZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmdldFRlcm1zKCksXG4gICAgICAgICAgdGVybSA9IHRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXMoKSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lcy5maW5kKChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVOb2RlTWF0Y2hlcyA9IGZyYW1lLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmaW5kUHJvcGVydHlCeVByb3BldHlOb2RlKHByb3BlcnR5Tm9kZSkge1xuICAgIGNvbnN0IHByb3BlcnR5cyA9IHRoaXMuZ2V0UHJvcGVydGllcygpLFxuICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydHlzLmZpbmQoKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5vZGVNYXRjaGVzID0gcHJvcGVydHkubWF0Y2hGcmFtZU5vZGUocHJvcGVydHlOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5Tm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIGZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGVxdWFsaXRpZXMgPSB0aGlzLmdldEVxdWFsaXRpZXMoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IGVxdWFsaXRpZXMuZmluZCgoZXF1YWxpdHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsaXR5Tm9kZU1hdGNoZXMgPSBlcXVhbGl0eS5tYXRjaEVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoZXF1YWxpdHlOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QganVkZ2VtZW50cyA9IHRoaXMuZ2V0SnVkZ2VtZW50cygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudHMuZmluZCgoanVkZ2VtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IGp1ZGdlbWVudC5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbnMgPSB0aGlzLmdldEFzc2VydGlvbnMoKSxcbiAgICAgICAgICBhc3NlcnRpb24gPSBhc3NlcnRpb25zLmZpbmQoKGFzc2VydGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0aW9uTm9kZU1hdGNoZXMgPSBhc3NlcnRpb24ubWF0Y2hBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAoYXNzZXJ0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gdGhpcy5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50cy5maW5kKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGVNYXRjaGVzID0gc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlcyA9IHRoaXMuZ2V0U2lnbmF0dXJlcygpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZXMuZmluZCgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmVOb2RlTWF0Y2hlcyA9IHNpZ25hdHVyZS5tYXRjaFNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlUmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSB0aGlzLmdldEFzc3VtcHRpb25zKCksXG4gICAgICAgICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25zLmZpbmQoKGFzc3VtcHRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IGFzc3VtcHRpb24ubWF0Y2hBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChhc3N1bXB0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuZ2V0UmVmZXJlbmNlcygpLFxuICAgICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMuZmluZCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiByZWZlcmVuY2U7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlcy5maW5kKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbWV0YXZhcmlhYmxlLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSkge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25zID0gdGhpcy5nZXRQcm9wZXJ0eVJlbGF0aW9ucygpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9ucy5maW5kKChwcm9wZXJ0eVJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZU1hdGNoZXMgPSBwcm9wZXJ0eVJlbGF0aW9uLm1hdGNoUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUpO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHlSZWxhdGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGV4dHMoY29udGV4dHMpIHtcbiAgICBjb25zdCBsYXN0Q29udGV4dCA9IGxhc3QoY29udGV4dHMpLFxuICAgICAgICAgIGNvbnRleHQgPSBsYXN0Q29udGV4dCwgIC8vL1xuICAgICAgICAgIHN5bm9wdGljQ29udGV4dCA9IG5ldyBTeW5vcHRpY0NvbnRleHQoY29udGV4dCwgY29udGV4dHMpO1xuXG4gICAgcmV0dXJuIHN5bm9wdGljQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlN5bm9wdGljQ29udGV4dCIsImZpcnN0IiwibGFzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJjb250ZXh0cyIsImdldENvbnRleHRzIiwiaXNTdGF0ZWQiLCJmaXJzdENvbnRleHQiLCJzdGF0ZWQiLCJnZXRUZXJtcyIsInRlcm1zIiwiZm9yRWFjaCIsImNvbXByZXNzVGVybXMiLCJnZXRGcmFtZXMiLCJmcmFtZXMiLCJjb21wcmVzc0ZyYW1lcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiY29tcHJlc3NQcm9wZXJ0aWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJjb21wcmVzc0VxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50cyIsImNvbXByZXNzSnVkZ2VtZW50cyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiY29tcHJlc3NBc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJjb21wcmVzc1N0YXRlbWVudHMiLCJnZXRTaWduYXR1cmVzIiwic2lnbmF0dXJlcyIsImNvbXByZXNzU2lnbmF0dXJlcyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiY29tcHJlc3NSZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImNvbXByZXNzQXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImNvbXByZXNzTWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiY29tcHJlc3NTdWJzdGl0dXRpb25zIiwiZ2V0UHJvcGVydHlSZWxhdGlvbnMiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsImNvbXByZXNzUHJvcGVydHlSZWxhdGlvbnMiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm0iLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hUZXJtTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJmaW5kUHJvcGVydHlCeVByb3BldHlOb2RlIiwicHJvcGVydHlOb2RlIiwicHJvcGVydHlzIiwicHJvcGVydHkiLCJwcm9wZXJ0eU5vZGVNYXRjaGVzIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eSIsImVxdWFsaXR5Tm9kZU1hdGNoZXMiLCJtYXRjaEVxdWFsaXR5Tm9kZSIsImZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnROb2RlIiwianVkZ2VtZW50IiwianVkZ2VtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaEp1ZGdlbWVudE5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImFzc2VydGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hBc3NlcnRpb25Ob2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsImZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlIiwic2lnbmF0dXJlTm9kZU1hdGNoZXMiLCJtYXRjaFNpZ25hdHVyZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlZmVyZW5jZSIsInJlZmVyZW5jZU1hdGNoZVJlZmVyZW5jZU5vZGUiLCJtYXRjaFJlZmVyZW5jZU5vZGUiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb24iLCJhc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEFzc3VtcHRpb25Ob2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImZpbmRQcm9wZXJ0eVJlbGF0aW9uQnlQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJmcm9tQ29udGV4dHMiLCJsYXN0Q29udGV4dCIsInN5bm9wdGljQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc0JBOzs7ZUFBcUJBOzs7MkJBcEJVO2dFQUVYOzBCQWNzQjs7Ozs7O0FBRTFDLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUs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
@@ -1,233 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "unifySteps", {
6
- enumerable: true,
7
- get: function() {
8
- return unifySteps;
9
- }
10
- });
11
- const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
12
- const _context = require("./context");
13
- function _interop_require_default(obj) {
14
- return obj && obj.__esModule ? obj : {
15
- default: obj
16
- };
17
- }
18
- async function unifyStepWithRule(step, context) {
19
- let stepUnifiesWithRule = false;
20
- const reference = step.getReference();
21
- if (reference !== null) {
22
- const rule = context.findRuleByReference(reference);
23
- if (rule !== null) {
24
- const stepString = step.getString(), ruleString = rule.getString();
25
- context.trace(`Unifying the '${stepString}' step with the '${ruleString}' rule...`);
26
- const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await rule.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
27
- if (stepAndSubproofOrProofAssertionsUnify) {
28
- stepUnifiesWithRule = true;
29
- }
30
- if (stepUnifiesWithRule) {
31
- context.debug(`...unified the '${stepString}' step with the '${ruleString}' rule.`);
32
- }
33
- }
34
- }
35
- return stepUnifiesWithRule;
36
- }
37
- async function unifyStepWithTopLevelAssertion(step, context) {
38
- let stepUnifiesWithTopLevelAssertion = false;
39
- const reference = step.getReference();
40
- if (reference !== null) {
41
- const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
42
- if (topLevelAssertion !== null) {
43
- const satisfiable = topLevelAssertion.isSatisfiable();
44
- if (!satisfiable) {
45
- const stepString = step.getString(), topLevelAssertionString = reference.getString();
46
- context.trace(`Unifying the '${stepString}' step with the '${topLevelAssertionString}' top level assertion...`);
47
- const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await topLevelAssertion.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
48
- if (stepAndSubproofOrProofAssertionsUnify) {
49
- stepUnifiesWithTopLevelAssertion = true;
50
- }
51
- if (stepUnifiesWithTopLevelAssertion) {
52
- context.debug(`...unified the '${stepString}' step with the '${topLevelAssertionString}' top level assertion.`);
53
- }
54
- }
55
- }
56
- }
57
- return stepUnifiesWithTopLevelAssertion;
58
- }
59
- async function unifyStepWithSignatureAssertion(step, context) {
60
- let stepUnifiesWithSignatureAssertion = false;
61
- const signatureAssertion = step.getSignatureAssertion();
62
- if (signatureAssertion !== null) {
63
- const stepString = step.getString(), signatureAssertionString = signatureAssertion.getString();
64
- context.trace(`Unifying the '${stepString}' step with the '${signatureAssertionString}' signature assertion...`);
65
- const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), stepAndSubproofOrProofAssertionsUnify = await signatureAssertion.unifyStepAndSubproofOrProofAssertions(step, subproofOrProofAssertions, context);
66
- if (stepAndSubproofOrProofAssertionsUnify) {
67
- stepUnifiesWithSignatureAssertion = true;
68
- }
69
- if (stepUnifiesWithSignatureAssertion) {
70
- context.debug(`...unified the '${stepString}' step with the '${signatureAssertionString}' signature assertion.`);
71
- }
72
- }
73
- return stepUnifiesWithSignatureAssertion;
74
- }
75
- async function unifyStepAsUnqualifiedEquality(step, context) {
76
- let stepUnifiesAUnqualifiedEquality = false;
77
- const unqualified = step.isUnqualified();
78
- if (unqualified) {
79
- const { Equality } = _elements.default, statement = step.getStatement(), equality = Equality.fromStatement(statement, context);
80
- if (equality !== null) {
81
- const stepString = step.getString();
82
- context.trace(`Unifying the '${stepString}' step as an unqualified equality...`);
83
- stepUnifiesAUnqualifiedEquality = true;
84
- if (stepUnifiesAUnqualifiedEquality) {
85
- context.debug(`...unified the '${stepString}' step as an unqualified equality.`);
86
- }
87
- }
88
- }
89
- return stepUnifiesAUnqualifiedEquality;
90
- }
91
- async function unifyStepAsUNqualifiedJudgement(step, context) {
92
- let stepUnifiesAsUnqualifiedJudgement = false;
93
- const unqualified = step.isUnqualified();
94
- if (unqualified) {
95
- const { Judgement } = _elements.default, statement = step.getStatement(), judgement = Judgement.fromStatement(statement, context);
96
- if (judgement !== null) {
97
- const stepString = step.getString();
98
- context.trace(`Unifying the '${stepString}' step as an unqualified judgement...`);
99
- stepUnifiesAsUnqualifiedJudgement = true;
100
- if (stepUnifiesAsUnqualifiedJudgement) {
101
- context.debug(`...unified the '${stepString}' step as an unqualified judgement.`);
102
- }
103
- }
104
- }
105
- return stepUnifiesAsUnqualifiedJudgement;
106
- }
107
- async function unifyStepAsUnqualifiedTypeAssertion(step, context) {
108
- let stepUnifiesAsUnqualifiedTypeAssertion = false;
109
- const unqualified = step.isUnqualified();
110
- if (unqualified) {
111
- const { TypeAssertion } = _elements.default, statement = step.getStatement(), typeAssertion = TypeAssertion.fromStatement(statement, context);
112
- if (typeAssertion !== null) {
113
- const stepString = step.getString();
114
- context.trace(`Unifying the '${stepString}' step as an unqualified type assertion...`);
115
- stepUnifiesAsUnqualifiedTypeAssertion = true;
116
- if (stepUnifiesAsUnqualifiedTypeAssertion) {
117
- context.debug(`...unified the '${stepString}' step as an unqualified type assertion.`);
118
- }
119
- }
120
- }
121
- return stepUnifiesAsUnqualifiedTypeAssertion;
122
- }
123
- async function unifyStepAsUnqualifiedPropertyAssertion(step, context) {
124
- let stepUnifiesAsUnqualifiedPropertyAssertion = false;
125
- const unqualified = step.isUnqualified();
126
- if (unqualified) {
127
- const { PropertyAssertion } = _elements.default, statement = step.getStatement(), propertyAssertion = PropertyAssertion.fromStatement(statement, context);
128
- if (propertyAssertion !== null) {
129
- const stepString = step.getString();
130
- context.trace(`Unifying the '${stepString}' step as an unqualified property assertion...`);
131
- stepUnifiesAsUnqualifiedPropertyAssertion = true;
132
- if (stepUnifiesAsUnqualifiedPropertyAssertion) {
133
- context.debug(`...unified the '${stepString}' step as an unqualified property assertion.`);
134
- }
135
- }
136
- }
137
- return stepUnifiesAsUnqualifiedPropertyAssertion;
138
- }
139
- async function unifyStepAsUnqualifiedSignatureAssertion(step, context) {
140
- let stepUnifiesAsUnqualifiedSignatureAssertion = false;
141
- const unqualified = step.isUnqualified();
142
- if (unqualified) {
143
- const { SignatureAssertion } = _elements.default, statement = step.getStatement(), signatureAssertion = SignatureAssertion.fromStatement(statement, context);
144
- if (signatureAssertion !== null) {
145
- const stepString = step.getString();
146
- context.trace(`Unifying the '${stepString}' step as a signature assertion...`);
147
- stepUnifiesAsUnqualifiedSignatureAssertion = true;
148
- if (stepUnifiesAsUnqualifiedSignatureAssertion) {
149
- context.debug(`...unified the '${stepString}' step as a signature assertion.`);
150
- }
151
- }
152
- }
153
- return stepUnifiesAsUnqualifiedSignatureAssertion;
154
- }
155
- async function validateStepAsMetaLevelAssumption(step, context) {
156
- let stepValidatesAsMetaLevelAssumption = false;
157
- const metaLevel = context.isMetaLevel();
158
- if (metaLevel) {
159
- const reference = step.getReference();
160
- if (reference !== null) {
161
- const stepString = step.getString(), topLevelAssertion = context.findTopLevelAssertionByReference(reference);
162
- if (topLevelAssertion === null) {
163
- context.trace(`Validating the '${stepString}' step as a meta-level assumption...`);
164
- (0, _context.descend)((context)=>{
165
- let metaLevelAssumption;
166
- const { MetaLevelAssumption } = _elements.default;
167
- metaLevelAssumption = MetaLevelAssumption.fromStep(step, context);
168
- metaLevelAssumption = metaLevelAssumption.validate(context); ///
169
- if (metaLevelAssumption !== null) {
170
- stepValidatesAsMetaLevelAssumption = true;
171
- }
172
- }, context);
173
- if (stepValidatesAsMetaLevelAssumption) {
174
- context.debug(`...validated the '${stepString}' step as a meta-level assumption.`);
175
- }
176
- }
177
- }
178
- }
179
- return stepValidatesAsMetaLevelAssumption;
180
- }
181
- async function unifyStepAsSignatureAssertion(step, context) {
182
- let stepUnifiesAsSignatureAssertion = false;
183
- const reference = step.getReference();
184
- if (reference !== null) {
185
- const topLevelAssertion = context.findTopLevelAssertionByReference(reference);
186
- if (topLevelAssertion !== null) {
187
- const statementNode = step.getStatementNode(), signatureAssertionNode = statementNode.getSignatureAssertionNode();
188
- if (signatureAssertionNode !== null) {
189
- const stepString = step.getString(), referenceString = reference.getString(), signatureAssertion = context.findAssertionByAssertionNode(signatureAssertionNode);
190
- context.trace(`Unifying the '${stepString}' step as a signature assertion with the '${referenceString}' reference...`);
191
- const unifyTopLevelAssertion = await signatureAssertion.unifyTopLevelAssertion(topLevelAssertion, context);
192
- if (unifyTopLevelAssertion) {
193
- stepUnifiesAsSignatureAssertion = true;
194
- }
195
- if (stepUnifiesAsSignatureAssertion) {
196
- context.debug(`...unified the '${stepString}' step as a signature assertion with the '${referenceString}' reference.`);
197
- }
198
- }
199
- }
200
- }
201
- return stepUnifiesAsSignatureAssertion;
202
- }
203
- async function compareStepWithSubproofOrProofAssertions(step, context) {
204
- let stepComparesToSubproofOrProofAssertions = false;
205
- const unqualified = step.isUnqualified();
206
- if (unqualified) {
207
- const stepString = step.getString();
208
- context.trace(`Comparing the '${stepString}' step with the subproofs or proof asssertions...`);
209
- const subproofOrProofAssertions = context.getSubproofOrProofAssertions(), comparesToSubproofOrProofAssertions = step.compareSubproofOrProofAssertions(subproofOrProofAssertions, context);
210
- if (comparesToSubproofOrProofAssertions) {
211
- stepComparesToSubproofOrProofAssertions = true;
212
- }
213
- if (stepComparesToSubproofOrProofAssertions) {
214
- context.debug(`...compared the '${stepString}' step with the subproofs or proof asssertions.`);
215
- }
216
- }
217
- return stepComparesToSubproofOrProofAssertions;
218
- }
219
- const unifySteps = [
220
- unifyStepWithRule,
221
- unifyStepWithTopLevelAssertion,
222
- unifyStepWithSignatureAssertion,
223
- unifyStepAsUnqualifiedEquality,
224
- unifyStepAsUNqualifiedJudgement,
225
- unifyStepAsUnqualifiedTypeAssertion,
226
- unifyStepAsUnqualifiedPropertyAssertion,
227
- unifyStepAsUnqualifiedSignatureAssertion,
228
- validateStepAsMetaLevelAssumption,
229
- unifyStepAsSignatureAssertion,
230
- compareStepWithSubproofOrProofAssertions
231
- ];
232
-
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVzY2VuZCB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwV2l0aFJ1bGUoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHN0ZXAuZ2V0UmVmZXJlbmNlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJ1bGUgPSBjb250ZXh0LmZpbmRSdWxlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmIChydWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHJ1bGVTdHJpbmcgPSBydWxlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHJ1bGUudW5pZnlTdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGVwLCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgc3RlcFVuaWZpZXNXaXRoUnVsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSB0b3BMZXZlbEFzc2VydGlvbi5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgIGlmICghc2F0aXNmaWFibGUpIHtcbiAgICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgICAgIHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSBhd2FpdCB0b3BMZXZlbEFzc2VydGlvbi51bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGVwQW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgc3RlcFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IHN0ZXAuZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uKCk7XG5cbiAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RlcEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHNpZ25hdHVyZUFzc2VydGlvbi51bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0ZXAsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgIHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBVbmlmaWVzV2l0aFNpZ25hdHVyZUFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNXaXRoU2lnbmF0dXJlQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkRXF1YWxpdHkoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBVW5xdWFsaWZpZWRFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBlcXVhbGl0eS4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5ID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYW4gdW5xdWFsaWZpZWQgZXF1YWxpdHkuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQVVucXVhbGlmaWVkRXF1YWxpdHk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RlcEFzVU5xdWFsaWZpZWRKdWRnZW1lbnQoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgY29uc3QgdW5xdWFsaWZpZWQgPSBzdGVwLmlzVW5xdWFsaWZpZWQoKTtcblxuICBpZiAodW5xdWFsaWZpZWQpIHtcbiAgICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBqdWRnZW1lbnQuLi5gKTtcblxuICAgICAgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkSnVkZ2VtZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBqdWRnZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZEp1ZGdlbWVudDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24oc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHR5cGVBc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RlcFVuaWZpZXNBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGVwQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgdW5xdWFsaWZpZWQgPSBzdGVwLmlzVW5xdWFsaWZpZWQoKTtcblxuICBpZiAodW5xdWFsaWZpZWQpIHtcbiAgICBjb25zdCB7IFByb3BlcnR5QXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gUHJvcGVydHlBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGFuIHVucXVhbGlmaWVkIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhbiB1bnF1YWxpZmllZCBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1VucXVhbGlmaWVkU2lnbmF0dXJlQXNzZXJ0aW9uKHN0ZXAsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHVucXVhbGlmaWVkID0gc3RlcC5pc1VucXVhbGlmaWVkKCk7XG5cbiAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gU2lnbmF0dXJlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIHN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlU3RlcEFzTWV0YUxldmVsQXNzdW1wdGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuXG4gIGlmIChtZXRhTGV2ZWwpIHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSBzdGVwLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgaWYgKHJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIGFzIGEgbWV0YS1sZXZlbCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICAgICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGxldCBtZXRhTGV2ZWxBc3N1bXB0aW9uO1xuXG4gICAgICAgICAgY29uc3QgeyBNZXRhTGV2ZWxBc3N1bXB0aW9uIH0gPSBlbGVtZW50cztcblxuICAgICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb24gPSBNZXRhTGV2ZWxBc3N1bXB0aW9uLmZyb21TdGVwKHN0ZXAsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbWV0YUxldmVsQXNzdW1wdGlvbiA9IG1ldGFMZXZlbEFzc3VtcHRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cblxuICAgICAgICAgIGlmIChtZXRhTGV2ZWxBc3N1bXB0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIG1ldGEtbGV2ZWwgYXNzdW1wdGlvbi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0ZXBBc1NpZ25hdHVyZUFzc2VydGlvbihzdGVwLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwVW5pZmllc0FzU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcmVmZXJlbmNlID0gc3RlcC5nZXRSZWZlcmVuY2UoKTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKTtcblxuICAgICAgaWYgKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKHNpZ25hdHVyZUFzc2VydGlvbk5vZGUpO1xuXG4gICAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICAgICAgY29uc3QgdW5pZnlUb3BMZXZlbEFzc2VydGlvbiA9IGF3YWl0IHNpZ25hdHVyZUFzc2VydGlvbi51bmlmeVRvcExldmVsQXNzZXJ0aW9uKHRvcExldmVsQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAodW5pZnlUb3BMZXZlbEFzc2VydGlvbikge1xuICAgICAgICAgIHN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBVbmlmaWVzQXNTaWduYXR1cmVBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhcmVTdGVwV2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RlcCwgY29udGV4dCkge1xuICBsZXQgc3RlcENvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gZmFsc2U7XG5cbiAgY29uc3QgdW5xdWFsaWZpZWQgPSBzdGVwLmlzVW5xdWFsaWZpZWQoKTtcblxuICBpZiAodW5xdWFsaWZpZWQpIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgY29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBzdGVwLmNvbXBhcmVTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKSB7XG4gICAgICBzdGVwQ29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGVwQ29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucztcbn1cblxuZXhwb3J0IGNvbnN0IHVuaWZ5U3RlcHMgPSBbXG4gIHVuaWZ5U3RlcFdpdGhSdWxlLFxuICB1bmlmeVN0ZXBXaXRoVG9wTGV2ZWxBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcFdpdGhTaWduYXR1cmVBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRFcXVhbGl0eSxcbiAgdW5pZnlTdGVwQXNVTnF1YWxpZmllZEp1ZGdlbWVudCxcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24sXG4gIHVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbixcbiAgdW5pZnlTdGVwQXNVbnF1YWxpZmllZFNpZ25hdHVyZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGVwQXNNZXRhTGV2ZWxBc3N1bXB0aW9uLFxuICB1bmlmeVN0ZXBBc1NpZ25hdHVyZUFzc2VydGlvbixcbiAgY29tcGFyZVN0ZXBXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuXTtcbiJdLCJuYW1lcyI6WyJ1bmlmeVN0ZXBzIiwidW5pZnlTdGVwV2l0aFJ1bGUiLCJzdGVwIiwiY29udGV4dCIsInN0ZXBVbmlmaWVzV2l0aFJ1bGUiLCJyZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJydWxlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJydWxlU3RyaW5nIiwidHJhY2UiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJ1bmlmeVN0ZXBBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZGVidWciLCJ1bmlmeVN0ZXBXaXRoVG9wTGV2ZWxBc3NlcnRpb24iLCJzdGVwVW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJzYXRpc2ZpYWJsZSIsImlzU2F0aXNmaWFibGUiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RlcFdpdGhTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc1dpdGhTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJnZXRTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkRXF1YWxpdHkiLCJzdGVwVW5pZmllc0FVbnF1YWxpZmllZEVxdWFsaXR5IiwidW5xdWFsaWZpZWQiLCJpc1VucXVhbGlmaWVkIiwiRXF1YWxpdHkiLCJlbGVtZW50cyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImVxdWFsaXR5IiwiZnJvbVN0YXRlbWVudCIsInVuaWZ5U3RlcEFzVU5xdWFsaWZpZWRKdWRnZW1lbnQiLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRKdWRnZW1lbnQiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJ1bmlmeVN0ZXBBc1VucXVhbGlmaWVkVHlwZUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFR5cGVBc3NlcnRpb24iLCJUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRQcm9wZXJ0eUFzc2VydGlvbiIsInN0ZXBVbmlmaWVzQXNVbnF1YWxpZmllZFByb3BlcnR5QXNzZXJ0aW9uIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInVuaWZ5U3RlcEFzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzVW5xdWFsaWZpZWRTaWduYXR1cmVBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0ZXBBc01ldGFMZXZlbEFzc3VtcHRpb24iLCJzdGVwVmFsaWRhdGVzQXNNZXRhTGV2ZWxBc3N1bXB0aW9uIiwibWV0YUxldmVsIiwiaXNNZXRhTGV2ZWwiLCJkZXNjZW5kIiwibWV0YUxldmVsQXNzdW1wdGlvbiIsIk1ldGFMZXZlbEFzc3VtcHRpb24iLCJmcm9tU3RlcCIsInZhbGlkYXRlIiwidW5pZnlTdGVwQXNTaWduYXR1cmVBc3NlcnRpb24iLCJzdGVwVW5pZmllc0FzU2lnbmF0dXJlQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZVN0cmluZyIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJ1bmlmeVRvcExldmVsQXNzZXJ0aW9uIiwiY29tcGFyZVN0ZXBXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0ZXBDb21wYXJlc1RvU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXFVYUE7OztlQUFBQTs7O2lFQW5VUTt5QkFFRzs7Ozs7O0FBRXhCLGVBQWVDLGtCQUFrQkMsSUFBSSxFQUFFQyxPQUFPO0lBQzVDLElBQUlDLHNCQUFzQjtJQUUxQixNQUFNQyxZQUFZSCxLQUFLSSxZQUFZO0lBRW5DLElBQUlELGNBQWMsTUFBTTtRQUN0QixNQUFNRSxPQUFPSixRQUFRSyxtQkFBbUIsQ0FBQ0g7UUFFekMsSUFBSUUsU0FBUyxNQUFNO1lBQ2pCLE1BQU1FLGFBQWFQLEtBQUtRLFNBQVMsSUFDM0JDLGFBQWFKLEtBQUtHLFNBQVM7WUFFakNQLFFBQVFTLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRUgsV0FBVyxpQkFBaUIsRUFBRUUsV0FBVyxTQUFTLENBQUM7WUFFbEYsTUFBTUUsNEJBQTRCVixRQUFRVyw0QkFBNEIs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