occam-verify-cli 1.0.428 → 1.0.437
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/file.js +1 -1
- package/lib/element/assertion.js +115 -24
- package/lib/element/assumption.js +120 -20
- package/lib/element/axiomLemmaTheoremConjecture.js +118 -30
- package/lib/element/conclusion.js +113 -25
- package/lib/element/declaration.js +112 -37
- package/lib/element/deduction.js +112 -66
- package/lib/element/derivation.js +114 -5
- package/lib/element/equality.js +119 -26
- package/lib/element/equivalence.js +121 -28
- package/lib/element/equivalences.js +122 -7
- package/lib/element/error.js +115 -32
- package/lib/element/frame.js +119 -59
- package/lib/element/hypothesis.js +115 -27
- package/lib/element/judgement.js +120 -33
- package/lib/element/label.js +116 -63
- package/lib/element/lemma.js +1 -9
- package/lib/element/metaLemma.js +1 -8
- package/lib/element/metaLemmaMetatheorem.js +117 -29
- package/lib/element/metaType.js +68 -61
- package/lib/element/metatheorem.js +1 -8
- package/lib/element/metavariable.js +122 -93
- package/lib/element/parameter.js +120 -20
- package/lib/element/premise.js +114 -35
- package/lib/element/procedureCall.js +117 -99
- package/lib/element/procedureReference.js +120 -20
- package/lib/element/proof.js +111 -55
- package/lib/element/property.js +121 -35
- package/lib/element/propertyRelation.js +116 -72
- package/lib/element/reference.js +120 -70
- package/lib/element/rule.js +116 -41
- package/lib/element/section.js +114 -133
- package/lib/element/signature.js +120 -20
- package/lib/element/statement/combinator/bracketed.js +4 -9
- package/lib/element/statement.js +110 -125
- package/lib/element/step.js +115 -27
- package/lib/element/subDerivation.js +111 -43
- package/lib/element/subproof.js +115 -20
- package/lib/element/substitution.js +115 -31
- package/lib/element/substitutions.js +120 -6
- package/lib/element/supposition.js +114 -35
- package/lib/element/term/constructor/bracketed.js +4 -8
- package/lib/element/term.js +111 -98
- package/lib/element/theorem.js +1 -8
- package/lib/element/type.js +71 -91
- package/lib/element/typePrefix.js +120 -20
- package/lib/element/variable.js +116 -111
- package/lib/element.js +67 -0
- package/lib/node/{nonsense.js → equivalences.js} +10 -10
- package/lib/node/frame.js +11 -5
- package/lib/node/procedureReference.js +6 -6
- package/lib/node/statement.js +11 -5
- package/lib/node/term.js +8 -1
- package/lib/nonTerminalNodeMap.js +3 -3
- package/lib/process/instantiate.js +8 -39
- package/lib/process/verify.js +22 -29
- package/lib/ruleNames.js +5 -5
- package/lib/utilities/brackets.js +11 -11
- package/lib/utilities/element.js +588 -94
- package/lib/utilities/instance.js +61 -0
- package/lib/utilities/string.js +73 -1
- package/package.json +10 -10
- package/src/context/file.js +1 -1
- package/src/element/assertion.js +4 -16
- package/src/element/assumption.js +5 -12
- package/src/element/axiomLemmaTheoremConjecture.js +4 -16
- package/src/element/conclusion.js +4 -16
- package/src/element/declaration.js +4 -16
- package/src/element/deduction.js +5 -19
- package/src/element/derivation.js +5 -2
- package/src/element/equality.js +4 -16
- package/src/element/equivalence.js +4 -16
- package/src/element/equivalences.js +12 -5
- package/src/element/error.js +4 -24
- package/src/element/frame.js +5 -56
- package/src/element/hypothesis.js +6 -23
- package/src/element/judgement.js +5 -30
- package/src/element/label.js +8 -19
- package/src/element/lemma.js +0 -7
- package/src/element/metaLemma.js +0 -7
- package/src/element/metaLemmaMetatheorem.js +4 -16
- package/src/element/metaType.js +23 -64
- package/src/element/metatheorem.js +0 -7
- package/src/element/metavariable.js +6 -94
- package/src/element/parameter.js +10 -18
- package/src/element/premise.js +4 -31
- package/src/element/procedureCall.js +5 -77
- package/src/element/procedureReference.js +7 -17
- package/src/element/proof.js +5 -17
- package/src/element/property.js +8 -30
- package/src/element/propertyRelation.js +5 -33
- package/src/element/reference.js +8 -72
- package/src/element/rule.js +4 -41
- package/src/element/section.js +4 -129
- package/src/element/signature.js +7 -13
- package/src/element/statement/combinator/bracketed.js +3 -9
- package/src/element/statement.js +3 -126
- package/src/element/step.js +4 -16
- package/src/element/subDerivation.js +5 -3
- package/src/element/subproof.js +5 -12
- package/src/element/substitution.js +4 -24
- package/src/element/substitutions.js +6 -2
- package/src/element/supposition.js +4 -31
- package/src/element/term/constructor/bracketed.js +4 -9
- package/src/element/term.js +6 -59
- package/src/element/theorem.js +0 -7
- package/src/element/type.js +9 -104
- package/src/element/typePrefix.js +8 -13
- package/src/element/variable.js +6 -109
- package/src/element.js +29 -0
- package/src/node/{nonsense.js → equivalences.js} +2 -2
- package/src/node/frame.js +10 -5
- package/src/node/procedureReference.js +4 -4
- package/src/node/statement.js +10 -5
- package/src/node/term.js +7 -0
- package/src/nonTerminalNodeMap.js +3 -3
- package/src/process/instantiate.js +4 -36
- package/src/process/verify.js +42 -47
- package/src/ruleNames.js +1 -1
- package/src/utilities/brackets.js +13 -13
- package/src/utilities/element.js +731 -129
- package/src/utilities/instance.js +53 -0
- package/src/utilities/string.js +97 -0
package/lib/utilities/element.js
CHANGED
|
@@ -27,6 +27,9 @@ _export(exports, {
|
|
|
27
27
|
get axiomFromAxiomNode () {
|
|
28
28
|
return axiomFromAxiomNode;
|
|
29
29
|
},
|
|
30
|
+
get axiomFromSectionNode () {
|
|
31
|
+
return axiomFromSectionNode;
|
|
32
|
+
},
|
|
30
33
|
get combinatorDeclarationFromCombinatorDeclarationNode () {
|
|
31
34
|
return combinatorDeclarationFromCombinatorDeclarationNode;
|
|
32
35
|
},
|
|
@@ -39,8 +42,20 @@ _export(exports, {
|
|
|
39
42
|
get conclusinoFromConclusionNode () {
|
|
40
43
|
return conclusinoFromConclusionNode;
|
|
41
44
|
},
|
|
42
|
-
get
|
|
43
|
-
return
|
|
45
|
+
get conclusionFromConclusionNode () {
|
|
46
|
+
return conclusionFromConclusionNode;
|
|
47
|
+
},
|
|
48
|
+
get conclusionFromPremiseNode () {
|
|
49
|
+
return conclusionFromPremiseNode;
|
|
50
|
+
},
|
|
51
|
+
get conclusionFromRuleNode () {
|
|
52
|
+
return conclusionFromRuleNode;
|
|
53
|
+
},
|
|
54
|
+
get conjectureFromSectionNode () {
|
|
55
|
+
return conjectureFromSectionNode;
|
|
56
|
+
},
|
|
57
|
+
get conjectureroConjectureNode () {
|
|
58
|
+
return conjectureroConjectureNode;
|
|
44
59
|
},
|
|
45
60
|
get constructorDeclarationFromConstructorDeclarationNode () {
|
|
46
61
|
return constructorDeclarationFromConstructorDeclarationNode;
|
|
@@ -60,6 +75,9 @@ _export(exports, {
|
|
|
60
75
|
get deductionFromDeductionNode () {
|
|
61
76
|
return deductionFromDeductionNode;
|
|
62
77
|
},
|
|
78
|
+
get deductionFromMetaLemmaMetatheoremNode () {
|
|
79
|
+
return deductionFromMetaLemmaMetatheoremNode;
|
|
80
|
+
},
|
|
63
81
|
get definedAssertionFromDefinedAssertionNode () {
|
|
64
82
|
return definedAssertionFromDefinedAssertionNode;
|
|
65
83
|
},
|
|
@@ -81,6 +99,9 @@ _export(exports, {
|
|
|
81
99
|
get equivalenceFromEquivalenceNode () {
|
|
82
100
|
return equivalenceFromEquivalenceNode;
|
|
83
101
|
},
|
|
102
|
+
get errorFromErrorNode () {
|
|
103
|
+
return errorFromErrorNode;
|
|
104
|
+
},
|
|
84
105
|
get frameFromContainedAssertionNode () {
|
|
85
106
|
return frameFromContainedAssertionNode;
|
|
86
107
|
},
|
|
@@ -93,23 +114,56 @@ _export(exports, {
|
|
|
93
114
|
get frameFromFrameSubstitutionNode () {
|
|
94
115
|
return frameFromFrameSubstitutionNode;
|
|
95
116
|
},
|
|
117
|
+
get frameFromJudgementNode () {
|
|
118
|
+
return frameFromJudgementNode;
|
|
119
|
+
},
|
|
96
120
|
get frameSubstitutionFromFrameSubstitutionNode () {
|
|
97
121
|
return frameSubstitutionFromFrameSubstitutionNode;
|
|
98
122
|
},
|
|
99
123
|
get frameSubstitutionFromStatementNode () {
|
|
100
124
|
return frameSubstitutionFromStatementNode;
|
|
101
125
|
},
|
|
126
|
+
get hypothesesFromHypothesisNodes () {
|
|
127
|
+
return hypothesesFromHypothesisNodes;
|
|
128
|
+
},
|
|
129
|
+
get hypothesisFromHypothesisNode () {
|
|
130
|
+
return hypothesisFromHypothesisNode;
|
|
131
|
+
},
|
|
132
|
+
get hyppothesisFromHypothesisNode () {
|
|
133
|
+
return hyppothesisFromHypothesisNode;
|
|
134
|
+
},
|
|
102
135
|
get identifierFromVarialbeNode () {
|
|
103
136
|
return identifierFromVarialbeNode;
|
|
104
137
|
},
|
|
138
|
+
get judgementFomStatementNode () {
|
|
139
|
+
return judgementFomStatementNode;
|
|
140
|
+
},
|
|
141
|
+
get judgementFromJudgementNode () {
|
|
142
|
+
return judgementFromJudgementNode;
|
|
143
|
+
},
|
|
144
|
+
get labelFromLabelNode () {
|
|
145
|
+
return labelFromLabelNode;
|
|
146
|
+
},
|
|
147
|
+
get labelFromMetaLemmaMetatheoremNode () {
|
|
148
|
+
return labelFromMetaLemmaMetatheoremNode;
|
|
149
|
+
},
|
|
105
150
|
get labelsFromAxiomLemmaTheoremConjectureNode () {
|
|
106
151
|
return labelsFromAxiomLemmaTheoremConjectureNode;
|
|
107
152
|
},
|
|
108
153
|
get labelsFromLabelNodes () {
|
|
109
154
|
return labelsFromLabelNodes;
|
|
110
155
|
},
|
|
111
|
-
get
|
|
112
|
-
return
|
|
156
|
+
get labelsFromRuleNode () {
|
|
157
|
+
return labelsFromRuleNode;
|
|
158
|
+
},
|
|
159
|
+
get lemmaFromLemmaNode () {
|
|
160
|
+
return lemmaFromLemmaNode;
|
|
161
|
+
},
|
|
162
|
+
get lemmaFromSectionNode () {
|
|
163
|
+
return lemmaFromSectionNode;
|
|
164
|
+
},
|
|
165
|
+
get metaLemmaFromMetaLemmaNode () {
|
|
166
|
+
return metaLemmaFromMetaLemmaNode;
|
|
113
167
|
},
|
|
114
168
|
get metaTypeFromMetaTypeNode () {
|
|
115
169
|
return metaTypeFromMetaTypeNode;
|
|
@@ -117,12 +171,24 @@ _export(exports, {
|
|
|
117
171
|
get metaTypeFromMetavariableDeclarationNode () {
|
|
118
172
|
return metaTypeFromMetavariableDeclarationNode;
|
|
119
173
|
},
|
|
174
|
+
get metatheoremFromMetaLemmaNode () {
|
|
175
|
+
return metatheoremFromMetaLemmaNode;
|
|
176
|
+
},
|
|
120
177
|
get metavariableDeclarationFromMetavariableDeclarationNode () {
|
|
121
178
|
return metavariableDeclarationFromMetavariableDeclarationNode;
|
|
122
179
|
},
|
|
180
|
+
get metavariableFromAssumptionNode () {
|
|
181
|
+
return metavariableFromAssumptionNode;
|
|
182
|
+
},
|
|
183
|
+
get metavariableFromFrameNode () {
|
|
184
|
+
return metavariableFromFrameNode;
|
|
185
|
+
},
|
|
123
186
|
get metavariableFromFrameSubstitutionNode () {
|
|
124
187
|
return metavariableFromFrameSubstitutionNode;
|
|
125
188
|
},
|
|
189
|
+
get metavariableFromLabelNode () {
|
|
190
|
+
return metavariableFromLabelNode;
|
|
191
|
+
},
|
|
126
192
|
get metavariableFromMetavariableDeclarationNode () {
|
|
127
193
|
return metavariableFromMetavariableDeclarationNode;
|
|
128
194
|
},
|
|
@@ -135,21 +201,69 @@ _export(exports, {
|
|
|
135
201
|
get metavariableFromReferenceSubstitutionNode () {
|
|
136
202
|
return metavariableFromReferenceSubstitutionNode;
|
|
137
203
|
},
|
|
204
|
+
get metavariableFromStatementNode () {
|
|
205
|
+
return metavariableFromStatementNode;
|
|
206
|
+
},
|
|
138
207
|
get metavariableFromStatementSubstitutionNode () {
|
|
139
208
|
return metavariableFromStatementSubstitutionNode;
|
|
140
209
|
},
|
|
210
|
+
get nameFromProcedureReferenceNode () {
|
|
211
|
+
return nameFromProcedureReferenceNode;
|
|
212
|
+
},
|
|
213
|
+
get parameterFromParameterNode () {
|
|
214
|
+
return parameterFromParameterNode;
|
|
215
|
+
},
|
|
216
|
+
get parameterNameFromParameterNode () {
|
|
217
|
+
return parameterNameFromParameterNode;
|
|
218
|
+
},
|
|
219
|
+
get parametersFromParameterNodes () {
|
|
220
|
+
return parametersFromParameterNodes;
|
|
221
|
+
},
|
|
222
|
+
get parametersFromProcedureCallNode () {
|
|
223
|
+
return parametersFromProcedureCallNode;
|
|
224
|
+
},
|
|
141
225
|
get prefixedFromComplexTypeDeclarationNode () {
|
|
142
226
|
return prefixedFromComplexTypeDeclarationNode;
|
|
143
227
|
},
|
|
144
228
|
get prefixedFromSimpleTypeDeclarationNode () {
|
|
145
229
|
return prefixedFromSimpleTypeDeclarationNode;
|
|
146
230
|
},
|
|
231
|
+
get premiseFromPremiseNode () {
|
|
232
|
+
return premiseFromPremiseNode;
|
|
233
|
+
},
|
|
234
|
+
get premisesFromPremiseNodes () {
|
|
235
|
+
return premisesFromPremiseNodes;
|
|
236
|
+
},
|
|
237
|
+
get premisesFromRuleNode () {
|
|
238
|
+
return premisesFromRuleNode;
|
|
239
|
+
},
|
|
240
|
+
get procedureCallFromPremiseNode () {
|
|
241
|
+
return procedureCallFromPremiseNode;
|
|
242
|
+
},
|
|
243
|
+
get procedureCallFromProcedureCallNode () {
|
|
244
|
+
return procedureCallFromProcedureCallNode;
|
|
245
|
+
},
|
|
246
|
+
get procedureCallFromSuppositionNode () {
|
|
247
|
+
return procedureCallFromSuppositionNode;
|
|
248
|
+
},
|
|
249
|
+
get procedureReferenceFromProcedureCallNode () {
|
|
250
|
+
return procedureReferenceFromProcedureCallNode;
|
|
251
|
+
},
|
|
252
|
+
get procedureReferenceFromProcedureReferenceNode () {
|
|
253
|
+
return procedureReferenceFromProcedureReferenceNode;
|
|
254
|
+
},
|
|
147
255
|
get proofFromAxiomLemmaTheoremConjectureNode () {
|
|
148
256
|
return proofFromAxiomLemmaTheoremConjectureNode;
|
|
149
257
|
},
|
|
258
|
+
get proofFromMetaLemmaMetatheoremNode () {
|
|
259
|
+
return proofFromMetaLemmaMetatheoremNode;
|
|
260
|
+
},
|
|
150
261
|
get proofFromProofNode () {
|
|
151
262
|
return proofFromProofNode;
|
|
152
263
|
},
|
|
264
|
+
get proofFromRuleNode () {
|
|
265
|
+
return proofFromRuleNode;
|
|
266
|
+
},
|
|
153
267
|
get propertiesFromComplexTypeDeclarationNode () {
|
|
154
268
|
return propertiesFromComplexTypeDeclarationNode;
|
|
155
269
|
},
|
|
@@ -180,6 +294,12 @@ _export(exports, {
|
|
|
180
294
|
get referenceFromAssumptionNode () {
|
|
181
295
|
return referenceFromAssumptionNode;
|
|
182
296
|
},
|
|
297
|
+
get referenceFromMetavariableNode () {
|
|
298
|
+
return referenceFromMetavariableNode;
|
|
299
|
+
},
|
|
300
|
+
get referenceFromProcedureCallNode () {
|
|
301
|
+
return referenceFromProcedureCallNode;
|
|
302
|
+
},
|
|
183
303
|
get referenceFromReferenceNode () {
|
|
184
304
|
return referenceFromReferenceNode;
|
|
185
305
|
},
|
|
@@ -195,6 +315,9 @@ _export(exports, {
|
|
|
195
315
|
get referenceSubstitutionFromReferenceSubstitutionNode () {
|
|
196
316
|
return referenceSubstitutionFromReferenceSubstitutionNode;
|
|
197
317
|
},
|
|
318
|
+
get ruleFromRuleNode () {
|
|
319
|
+
return ruleFromRuleNode;
|
|
320
|
+
},
|
|
198
321
|
get satisfiesAssertionFromSatisfiesAssertionNode () {
|
|
199
322
|
return satisfiesAssertionFromSatisfiesAssertionNode;
|
|
200
323
|
},
|
|
@@ -204,6 +327,9 @@ _export(exports, {
|
|
|
204
327
|
get satisfiesAssertionFromStepNode () {
|
|
205
328
|
return satisfiesAssertionFromStepNode;
|
|
206
329
|
},
|
|
330
|
+
get sectionFromSectionNode () {
|
|
331
|
+
return sectionFromSectionNode;
|
|
332
|
+
},
|
|
207
333
|
get signatureFromAxiomLemmaTheoremConjectureNode () {
|
|
208
334
|
return signatureFromAxiomLemmaTheoremConjectureNode;
|
|
209
335
|
},
|
|
@@ -219,6 +345,9 @@ _export(exports, {
|
|
|
219
345
|
get statementFromAssumptionNode () {
|
|
220
346
|
return statementFromAssumptionNode;
|
|
221
347
|
},
|
|
348
|
+
get statementFromCombinatorDeclarationNode () {
|
|
349
|
+
return statementFromCombinatorDeclarationNode;
|
|
350
|
+
},
|
|
222
351
|
get statementFromConclusionNode () {
|
|
223
352
|
return statementFromConclusionNode;
|
|
224
353
|
},
|
|
@@ -228,6 +357,12 @@ _export(exports, {
|
|
|
228
357
|
get statementFromDeductionNode () {
|
|
229
358
|
return statementFromDeductionNode;
|
|
230
359
|
},
|
|
360
|
+
get statementFromHypothesisNode () {
|
|
361
|
+
return statementFromHypothesisNode;
|
|
362
|
+
},
|
|
363
|
+
get statementFromPremiseNode () {
|
|
364
|
+
return statementFromPremiseNode;
|
|
365
|
+
},
|
|
231
366
|
get statementFromStatementNode () {
|
|
232
367
|
return statementFromStatementNode;
|
|
233
368
|
},
|
|
@@ -237,6 +372,9 @@ _export(exports, {
|
|
|
237
372
|
get statementFromStepNode () {
|
|
238
373
|
return statementFromStepNode;
|
|
239
374
|
},
|
|
375
|
+
get statementFromSuppositionNode () {
|
|
376
|
+
return statementFromSuppositionNode;
|
|
377
|
+
},
|
|
240
378
|
get statementSubstitutionFromStatementSubstitutionNode () {
|
|
241
379
|
return statementSubstitutionFromStatementSubstitutionNode;
|
|
242
380
|
},
|
|
@@ -285,15 +423,24 @@ _export(exports, {
|
|
|
285
423
|
get superTypesFromSuperTypeNodes () {
|
|
286
424
|
return superTypesFromSuperTypeNodes;
|
|
287
425
|
},
|
|
426
|
+
get suppositionFromSuppositionNode () {
|
|
427
|
+
return suppositionFromSuppositionNode;
|
|
428
|
+
},
|
|
288
429
|
get suppositionsFromAxiomLemmaTheoremConjectureNode () {
|
|
289
430
|
return suppositionsFromAxiomLemmaTheoremConjectureNode;
|
|
290
431
|
},
|
|
432
|
+
get suppositionsFromMetaLemmaMetatheoremNode () {
|
|
433
|
+
return suppositionsFromMetaLemmaMetatheoremNode;
|
|
434
|
+
},
|
|
291
435
|
get suppositionsFromSubproofNode () {
|
|
292
436
|
return suppositionsFromSubproofNode;
|
|
293
437
|
},
|
|
294
438
|
get suppositionsFromSuppositionNodes () {
|
|
295
439
|
return suppositionsFromSuppositionNodes;
|
|
296
440
|
},
|
|
441
|
+
get termFromConstructorDeclarationNode () {
|
|
442
|
+
return termFromConstructorDeclarationNode;
|
|
443
|
+
},
|
|
297
444
|
get termFromContainedAssertionNode () {
|
|
298
445
|
return termFromContainedAssertionNode;
|
|
299
446
|
},
|
|
@@ -330,8 +477,11 @@ _export(exports, {
|
|
|
330
477
|
get termsFromTermNodes () {
|
|
331
478
|
return termsFromTermNodes;
|
|
332
479
|
},
|
|
333
|
-
get
|
|
334
|
-
return
|
|
480
|
+
get theoremFromSectionNode () {
|
|
481
|
+
return theoremFromSectionNode;
|
|
482
|
+
},
|
|
483
|
+
get theoremFromTheoremNode () {
|
|
484
|
+
return theoremFromTheoremNode;
|
|
335
485
|
},
|
|
336
486
|
get typeAssertinFromStatementNode () {
|
|
337
487
|
return typeAssertinFromStatementNode;
|
|
@@ -342,6 +492,12 @@ _export(exports, {
|
|
|
342
492
|
get typeFromComplexTypeDeclarationNode () {
|
|
343
493
|
return typeFromComplexTypeDeclarationNode;
|
|
344
494
|
},
|
|
495
|
+
get typeFromConstructorDeclarationNode () {
|
|
496
|
+
return typeFromConstructorDeclarationNode;
|
|
497
|
+
},
|
|
498
|
+
get typeFromPropertyDeclarationNode () {
|
|
499
|
+
return typeFromPropertyDeclarationNode;
|
|
500
|
+
},
|
|
345
501
|
get typeFromSimpleTypeDeclarationNode () {
|
|
346
502
|
return typeFromSimpleTypeDeclarationNode;
|
|
347
503
|
},
|
|
@@ -363,6 +519,9 @@ _export(exports, {
|
|
|
363
519
|
get variableDeclarationFromVariableDeclarationNode () {
|
|
364
520
|
return variableDeclarationFromVariableDeclarationNode;
|
|
365
521
|
},
|
|
522
|
+
get variableFromTermNode () {
|
|
523
|
+
return variableFromTermNode;
|
|
524
|
+
},
|
|
366
525
|
get variableFromTermSubstitutionNode () {
|
|
367
526
|
return variableFromTermSubstitutionNode;
|
|
368
527
|
},
|
|
@@ -375,6 +534,7 @@ _export(exports, {
|
|
|
375
534
|
});
|
|
376
535
|
var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
377
536
|
var _type = require("../element/type");
|
|
537
|
+
var _instantiate = require("../process/instantiate");
|
|
378
538
|
var _string = require("../utilities/string");
|
|
379
539
|
function _interop_require_default(obj) {
|
|
380
540
|
return obj && obj.__esModule ? obj : {
|
|
@@ -387,60 +547,76 @@ function typeFromTypeNode(typeNode, context) {
|
|
|
387
547
|
type = _type.baseType;
|
|
388
548
|
} else {
|
|
389
549
|
var Type = _elements.default.Type, typeName = typeNode.getTypeName(), typePrefixName = typeNode.getTypePrefixName(), nominalTypeName = typeNode.getNominalTypeName(), string = nominalTypeName, node = typeNode, name = typeName, prefixName = typePrefixName, superTypes = null, properties = null, provisional = null;
|
|
390
|
-
type = new Type(string, node, name, prefixName, superTypes, properties, provisional);
|
|
550
|
+
type = new Type(context, string, node, name, prefixName, superTypes, properties, provisional);
|
|
391
551
|
}
|
|
392
552
|
return type;
|
|
393
553
|
}
|
|
394
554
|
function termFromTermNode(termNode, context) {
|
|
395
|
-
var Term = _elements.default.Term, node = termNode, string = context.nodeAsString(node), type = null, term = new Term(string, node, type);
|
|
555
|
+
var Term = _elements.default.Term, node = termNode, string = context.nodeAsString(node), type = null, term = new Term(context, string, node, type);
|
|
396
556
|
return term;
|
|
397
557
|
}
|
|
398
558
|
function stepFromStepNode(stepNode, context) {
|
|
399
559
|
var Step = _elements.default.Step, node = stepNode, string = context.nodeAsString(node), statement = statementFromStepNode(stepNode, context), reference = referenceFromStepNode(stepNode, context), satisfiesAssertion = satisfiesAssertionFromStepNode(stepNode, context), step = new Step(context, string, node, statement, reference, satisfiesAssertion);
|
|
400
560
|
return step;
|
|
401
561
|
}
|
|
402
|
-
function
|
|
403
|
-
var
|
|
562
|
+
function ruleFromRuleNode(ruleNode, context) {
|
|
563
|
+
var Rule = _elements.default.Rule, proof = proofFromRuleNode(ruleNode, context), labels = labelsFromRuleNode(ruleNode, context), premises = premisesFromRuleNode(ruleNode, context), conclusion = conclusionFromRuleNode(ruleNode, context), ruleString = (0, _string.rulsStringFromLabelsPremisesAndConclusion)(labels, premises, conclusion), node = ruleNode, string = ruleString, rule = new Rule(context, string, node, labels, premises, conclusion, proof);
|
|
564
|
+
return rule;
|
|
565
|
+
}
|
|
566
|
+
function labelFromLabelNode(labelNode, context) {
|
|
567
|
+
var Label = _elements.default.Label, node = labelNode, string = context.nodeAsString(node), metavariable = metavariableFromLabelNode(labelNode, context), label = new Label(context, string, node, metavariable);
|
|
568
|
+
return label;
|
|
569
|
+
}
|
|
570
|
+
function errorFromErrorNode(errorNode, context) {
|
|
571
|
+
var Error = _elements.default.Error, node = errorNode, string = context.nodeAsString(node), error = new Error(context, string, node);
|
|
572
|
+
return error;
|
|
573
|
+
}
|
|
574
|
+
function lemmaFromLemmaNode(lemmaNode, context) {
|
|
575
|
+
var Lemma = _elements.default.Lemma, axiomLemmaTheoremConjectureNode = lemmaNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = lemmaNode, string = axiomLemmaTheoremConjectureString, lemma = new Lemma(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
|
|
404
576
|
return lemma;
|
|
405
577
|
}
|
|
406
578
|
function frameFromFrameNode(frameNode, context) {
|
|
407
|
-
var Frame = _elements.default.Frame, node = frameNode, string = context.nodeAsString(node), assumptions = assumptionsFromFrameNode(frameNode, context), frame = new Frame(string, node, assumptions);
|
|
579
|
+
var Frame = _elements.default.Frame, node = frameNode, string = context.nodeAsString(node), assumptions = assumptionsFromFrameNode(frameNode, context), frame = new Frame(context, string, node, assumptions);
|
|
408
580
|
return frame;
|
|
409
581
|
}
|
|
410
582
|
function proofFromProofNode(proofNode, context) {
|
|
411
|
-
var Proof = _elements.default.Proof, node = proofNode, string = null, derivation = derivationFromProofNode(proofNode, context), proof = new Proof(string, node, derivation);
|
|
583
|
+
var Proof = _elements.default.Proof, node = proofNode, string = null, derivation = derivationFromProofNode(proofNode, context), proof = new Proof(context, string, node, derivation);
|
|
412
584
|
return proof;
|
|
413
585
|
}
|
|
414
586
|
function axiomFromAxiomNode(axiomNode, context) {
|
|
415
|
-
var Axiom = _elements.default.Axiom, axiomLemmaTheoremConjectureNode = axiomNode, proof = null, labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [],
|
|
587
|
+
var Axiom = _elements.default.Axiom, axiomLemmaTheoremConjectureNode = axiomNode, proof = null, labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = axiomNode, string = axiomLemmaTheoremConjectureString, axiom = new Axiom(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
|
|
416
588
|
return axiom;
|
|
417
589
|
}
|
|
418
|
-
function
|
|
419
|
-
var
|
|
420
|
-
return
|
|
590
|
+
function sectionFromSectionNode(sectionNode, context) {
|
|
591
|
+
var hypothesisNodes = sectionNode.getHypothesisNodes(), hypotheses = hypothesesFromHypothesisNodes(hypothesisNodes, context), axiom = axiomFromSectionNode(sectionNode, context), lemma = lemmaFromSectionNode(sectionNode, context), theorem = theoremFromSectionNode(sectionNode, context), conjecture = conjectureFromSectionNode(sectionNode, context), sectionString = (0, _string.sectionStringFromHypothesesAxiomLemmaTheoremAndConjecture)(hypotheses, axiom, lemma, theorem, conjecture, context), node = sectionNode, string = sectionString, section = new Section(context, string, node, hypotheses, axiom, lemma, theorem, conjecture);
|
|
592
|
+
return section;
|
|
421
593
|
}
|
|
422
|
-
function
|
|
423
|
-
var
|
|
424
|
-
return
|
|
594
|
+
function premiseFromPremiseNode(premiseNode, context) {
|
|
595
|
+
var Premise = _elements.default.Premise, node = premiseNode, string = context.nodeAsString(node), statement = statementFromPremiseNode(premiseNode, context), procedureCall = procedureCallFromPremiseNode(premiseNode, context), premise = new Premise(context, string, node, statement, procedureCall);
|
|
596
|
+
return premise;
|
|
597
|
+
}
|
|
598
|
+
function theoremFromTheoremNode(theoremNode, context) {
|
|
599
|
+
var Theorem = _elements.default.Theorem, axiomLemmaTheoremConjectureNode = theoremNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = theoremNode, string = axiomLemmaTheoremConjectureString, theorem = new Theorem(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
|
|
600
|
+
return theorem;
|
|
425
601
|
}
|
|
426
602
|
function equalityFromEqualityNode(equalityNode, context) {
|
|
427
603
|
var Equality1 = _elements.default.Equality, node = equalityNode, string = context.nodeAsString(node), leftTermNode = equalityNode.getLeftTermNode(), rightTermNode = equalityNode.getRightTermNode(), leftTerm = termFromTermNode(leftTermNode, context), rightTerm = termFromTermNode(rightTermNode, context), equality = new Equality1(string, leftTerm, rightTerm);
|
|
428
604
|
return equality;
|
|
429
605
|
}
|
|
430
606
|
function metaTypeFromMetaTypeNode(metaTypeNode, context) {
|
|
431
|
-
var MetaType = _elements.default.MetaType, node = metaTypeNode, string = context.nodeAsString(node), metaTypeName = metaTypeNode.getMetaTypeName(), name = metaTypeName, metaType = new MetaType(string, node, name);
|
|
607
|
+
var MetaType = _elements.default.MetaType, node = metaTypeNode, string = context.nodeAsString(node), metaTypeName = metaTypeNode.getMetaTypeName(), name = metaTypeName, metaType = new MetaType(context, string, node, name);
|
|
432
608
|
return metaType;
|
|
433
609
|
}
|
|
434
610
|
function propertyFromPropertyNode(propertyNode, context) {
|
|
435
|
-
var Property = _elements.default.Property, node = propertyNode, string = context.nodeAsString(node), propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName, property = new Property(string, node, name, nominalTypeName);
|
|
611
|
+
var Property = _elements.default.Property, node = propertyNode, string = context.nodeAsString(node), propertyName = propertyNode.getPropertyName(), nominalTypeName = null, name = propertyName, property = new Property(context, string, node, name, nominalTypeName);
|
|
436
612
|
return property;
|
|
437
613
|
}
|
|
438
614
|
function variableFromVariableNode(variableNode, context) {
|
|
439
|
-
var Variable = _elements.default.Variable, node = variableNode, string = context.nodeAsString(node), type = null, identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = [], variable = new Variable(string, node, type, identifier, propertyRelations);
|
|
615
|
+
var Variable = _elements.default.Variable, node = variableNode, string = context.nodeAsString(node), type = null, identifier = identifierFromVarialbeNode(variableNode, context), propertyRelations = [], variable = new Variable(context, string, node, type, identifier, propertyRelations);
|
|
440
616
|
return variable;
|
|
441
617
|
}
|
|
442
618
|
function subproofFromSubproofNode(subproofNode, context) {
|
|
443
|
-
var SubProof = _elements.default.SubProof, node = subproofNode, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSubproofNode)(subproofNode, context), string = subproofString, subproof = new SubProof(string, node, suppositions, subDerivation);
|
|
619
|
+
var SubProof = _elements.default.SubProof, node = subproofNode, suppositions = suppositionsFromSubproofNode(subproofNode, context), subDerivation = subDerivationFromSubproofNode(subproofNode, context), subproofString = (0, _string.subproofStringFromSubproofNode)(subproofNode, context), string = subproofString, subproof = new SubProof(context, string, node, suppositions, subDerivation);
|
|
444
620
|
return subproof;
|
|
445
621
|
}
|
|
446
622
|
function equalityFromStatementNode(statementNode, context) {
|
|
@@ -457,49 +633,97 @@ function deductionFromDeductionNode(deductionNode, context) {
|
|
|
457
633
|
return deduction;
|
|
458
634
|
}
|
|
459
635
|
function statementFromStatementNode(statementNode, context) {
|
|
460
|
-
var Statement = _elements.default.Statement, node = statementNode, string = context.nodeAsString(node), statement = new Statement(string, node);
|
|
636
|
+
var Statement = _elements.default.Statement, node = statementNode, string = context.nodeAsString(node), statement = new Statement(context, string, node);
|
|
461
637
|
return statement;
|
|
462
638
|
}
|
|
463
639
|
function signatureFromSignatureNode(signatureNode, context) {
|
|
464
|
-
var Signature = _elements.default.Signature, node = signatureNode, string = context.nodeAsString(node), terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(string, node, terms);
|
|
640
|
+
var Signature = _elements.default.Signature, node = signatureNode, string = context.nodeAsString(node), terms = termsFromSignatureNode(signatureNode, context), signature = new Signature(context, string, node, terms);
|
|
465
641
|
return signature;
|
|
466
642
|
}
|
|
467
643
|
function referenceFromReferenceNode(referenceNode, context) {
|
|
468
|
-
var Reference = _elements.default.Reference, node = referenceNode, string = context.nodeAsString(node), metavariable = metavariableFromReferenceNode(referenceNode, context), reference = new Reference(string, node, metavariable);
|
|
644
|
+
var Reference = _elements.default.Reference, node = referenceNode, string = context.nodeAsString(node), metavariable = metavariableFromReferenceNode(referenceNode, context), reference = new Reference(context, string, node, metavariable);
|
|
469
645
|
return reference;
|
|
470
646
|
}
|
|
647
|
+
function conjectureroConjectureNode(conjectureNode, context) {
|
|
648
|
+
var Conjecture = _elements.default.Conjecture, axiomLemmaTheoremConjectureNode = conjectureNode, proof = proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), labels = labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), deduction = deductionFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), suppositions = suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), signature = signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context), hypotheses = [], axiomLemmaTheoremConjectureString = (0, _string.axiomLemmaTheoremConjectureStringFromLabelsSuppositionsAndDeduction)(labels, suppositions, deduction), node = conjectureNode, string = axiomLemmaTheoremConjectureString, conjecture = new Conjecture(context, string, node, labels, suppositions, deduction, proof, signature, hypotheses);
|
|
649
|
+
return conjecture;
|
|
650
|
+
}
|
|
651
|
+
function judgementFromJudgementNode(judgementNode, context) {
|
|
652
|
+
var Judgement = _elements.default.Judgement, node = judgementNode, string = context.nodeAsString(node), frame = frameFromJudgementNode(judgementNode, context), assumption = assumptionFromJudgementNode(judgementNode, context), judgement = new Judgement(context, string, node, frame, assumption);
|
|
653
|
+
return judgement;
|
|
654
|
+
}
|
|
655
|
+
function metaLemmaFromMetaLemmaNode(metaLemmaNode1, context) {
|
|
656
|
+
var MetaLemma = _elements.default.MetaLemma, metaLemmaMetathoremNode = metaLemmaNode1, proof = proofFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), label = labelFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), deduction = deductionFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), substitutions = null, node = metaLemmaNode1, string = (0, _string.metaLemmaMetatheoremStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), metaLemma = new MetaLemma(context, string, node, label, suppositions, deduction, proof, substitutions);
|
|
657
|
+
return metaLemma;
|
|
658
|
+
}
|
|
659
|
+
function parameterFromParameterNode(parameterNode, context) {
|
|
660
|
+
var Parameter = _elements.default.Parameter, node = parameterNode, string = context.nodeAsString(node), parameterName = parameterNode.getParameterName(), name = parameterName, parameter = new Parameter(context, string, node, name);
|
|
661
|
+
return parameter;
|
|
662
|
+
}
|
|
663
|
+
function hypothesisFromHypothesisNode(hypotheseNode, context) {
|
|
664
|
+
var Hypothsis = _elements.default.Hypothsis, node = hypotheseNode, string = context.nodeAsString(node), statement = statementFromHypothesisNode(hypotheseNode, context), parameter = new Hypothsis(context, string, node, statement);
|
|
665
|
+
return parameter;
|
|
666
|
+
}
|
|
667
|
+
function conclusionFromConclusionNode(conclusionNode, context) {
|
|
668
|
+
var Conclusion = _elements.default.Conclusion, node = conclusionNode, string = context.nodeAsString(node), statement = statementFromConclusionNode(conclusionNode, context), conclusion = new Conclusion(context, string, node, statement);
|
|
669
|
+
return conclusion;
|
|
670
|
+
}
|
|
471
671
|
function conclusinoFromConclusionNode(conclusinoNode, context) {
|
|
472
672
|
var Conclusion = _elements.default.Conclusion, node = conclusinoNode, string = context.nodeAsString(node), statement = statementFromConclusionNode(conclusinoNode, context), conclusino = new Conclusion(context, string, node, statement);
|
|
473
673
|
return conclusino;
|
|
474
674
|
}
|
|
475
675
|
function assumptionFromAssumptionNode(assumptionNode, context) {
|
|
476
|
-
var Assumption = _elements.default.Assumption, node = assumptionNode, string = context.nodeAsString(node), statement = statementFromAssumptionNode(assumptionNode, context), reference = referenceFromAssumptionNode(assumptionNode, context), assumption = new Assumption(string, node, statement, reference);
|
|
676
|
+
var Assumption = _elements.default.Assumption, node = assumptionNode, string = context.nodeAsString(node), statement = statementFromAssumptionNode(assumptionNode, context), reference = referenceFromAssumptionNode(assumptionNode, context), assumption = new Assumption(context, string, node, statement, reference);
|
|
477
677
|
return assumption;
|
|
478
678
|
}
|
|
479
679
|
function derivationFromDerivationNode(derivationNode, context) {
|
|
480
|
-
var Derivation = _elements.default.Derivation, node = derivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context), derivation = new Derivation(string, node, stepsOrSubproofs);
|
|
680
|
+
var Derivation = _elements.default.Derivation, node = derivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromDerivationNode(derivationNode, context), derivation = new Derivation(context, string, node, stepsOrSubproofs);
|
|
481
681
|
return derivation;
|
|
482
682
|
}
|
|
483
683
|
function typePrefixFromTypePrefixNode(typePrefixNode, context) {
|
|
484
|
-
var TypePrefix = _elements.default.TypePrefix, node = typePrefixNode, string = context.nodeAsString(node), term = termFromTypePrefixNode(typePrefixNode, context), type = typeFromTypePrefixNode(typePrefixNode, context), typePrefix = new TypePrefix(string, node, term, type);
|
|
684
|
+
var TypePrefix = _elements.default.TypePrefix, node = typePrefixNode, string = context.nodeAsString(node), term = termFromTypePrefixNode(typePrefixNode, context), type = typeFromTypePrefixNode(typePrefixNode, context), typePrefix = new TypePrefix(context, string, node, term, type);
|
|
485
685
|
return typePrefix;
|
|
486
686
|
}
|
|
687
|
+
function metatheoremFromMetaLemmaNode(metatheoremNode, context) {
|
|
688
|
+
var Metatehorem = _elements.default.Metatehorem, metaLemmaMetathoremNode = metatheoremNode, proof = proofFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), label = labelFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), deduction = deductionFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), suppositions = suppositionsFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context), substitutions = null, node = metaLemmaNode, string = (0, _string.metaLemmaMetatheoremStringFromLabelSuppositionsAndDeduction)(label, suppositions, deduction), metatheorem = new Metatehorem(context, string, node, label, suppositions, deduction, proof, substitutions);
|
|
689
|
+
return metatheorem;
|
|
690
|
+
}
|
|
691
|
+
function referenceFromMetavariableNode(metavariableNode, context) {
|
|
692
|
+
var metavariableString = context.nodeAsString(metavariableNode), referenceString = metavariableString, string = referenceString, referenceNode = (0, _instantiate.instantiateReference)(string, context), reference = referenceFromReferenceNode(referenceNode, context);
|
|
693
|
+
return reference;
|
|
694
|
+
}
|
|
695
|
+
function hyppothesisFromHypothesisNode(hypothesisNode, context) {
|
|
696
|
+
var Hypothesis = _elements.default.Hypothesis, node = hypothesisNode, string = context.nodeAsString(node), statement = statementFromHypothesisNode(hypothesisNode, context), hypothesis = new Hypothesis(context, string, node, statement);
|
|
697
|
+
return hypothesis;
|
|
698
|
+
}
|
|
699
|
+
function suppositionFromSuppositionNode(suppositionNode, context) {
|
|
700
|
+
var Supposition = _elements.default.Supposition, node = suppositionNode, string = context.nodeAsString(node), statement = statementFromSuppositionNode(suppositionNode, context), procedureCall = procedureCallFromSuppositionNode(suppositionNode, context), supposition = new Supposition(context, string, node, statement, procedureCall);
|
|
701
|
+
return supposition;
|
|
702
|
+
}
|
|
487
703
|
function equivalenceFromEquivalenceNode(equivalenceNode, context) {
|
|
488
704
|
var Equivalence = _elements.default.Equivalence, node = equivalenceNode, terms = termsFromEquivalenceNode(equivalenceNode, context), equivalenceString = (0, _string.equivalenceStringFromTerms)(terms), string = equivalenceString, equivalence = new Equivalence(context, string, node, terms);
|
|
489
705
|
return equivalence;
|
|
490
706
|
}
|
|
707
|
+
function nameFromProcedureReferenceNode(procedureReferenceNode, context) {
|
|
708
|
+
var name = procedureReferenceNode.getName();
|
|
709
|
+
return name;
|
|
710
|
+
}
|
|
491
711
|
function metavariableFromMetavariableNode(metavariableNode, context) {
|
|
492
|
-
var Metavariable = _elements.default.Metavariable, node = metavariableNode, string = context.nodeAsString(node), metavariableName = metavariableNode.getMetavariableName(), name = metavariableName, type = null, metaType = null, metavariable = new Metavariable(string, node, name, type, metaType);
|
|
712
|
+
var Metavariable = _elements.default.Metavariable, node = metavariableNode, string = context.nodeAsString(node), metavariableName = metavariableNode.getMetavariableName(), name = metavariableName, type = null, metaType = null, metavariable = new Metavariable(context, string, node, name, type, metaType);
|
|
493
713
|
return metavariable;
|
|
494
714
|
}
|
|
495
715
|
function subDerivationFromSubDerivationNode(subDerivationNode, context) {
|
|
496
|
-
var SubDerivation = _elements.default.SubDerivation, node = subDerivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context), subDerivation = new SubDerivation(string, node, stepsOrSubproofs);
|
|
716
|
+
var SubDerivation = _elements.default.SubDerivation, node = subDerivationNode, string = null, stepsOrSubproofs = stepsOrSubproofsFromSubDerivationNode(subDerivationNode, context), subDerivation = new SubDerivation(context, string, node, stepsOrSubproofs);
|
|
497
717
|
return subDerivation;
|
|
498
718
|
}
|
|
499
719
|
function typeAssertionFromTypeAssertionNode(typeAssertionNode, context) {
|
|
500
|
-
var TypeAssertion = _elements.default.TypeAssertion, node = typeAssertionNode, string = context.nodeAsString(node), term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context), typeAssertion = new TypeAssertion(string, node, term, type);
|
|
720
|
+
var TypeAssertion = _elements.default.TypeAssertion, node = typeAssertionNode, string = context.nodeAsString(node), term = termFromTypeAssertionNode(typeAssertionNode, context), type = typeFromTypeAssertionNode(typeAssertionNode, context), typeAssertion = new TypeAssertion(context, string, node, term, type);
|
|
501
721
|
return typeAssertion;
|
|
502
722
|
}
|
|
723
|
+
function procedureCallFromProcedureCallNode(procedureCallNode, context) {
|
|
724
|
+
var ProcedureCall = _elements.default.ProcedureCall, parameters = parametersFromProcedureCallNode(procedureCallNode, context), procedureReference = procedureReferenceFromProcedureCallNode(procedureCallNode, context), procedureCallString = (0, _string.procedureCallStringFromProcedureReferenceAndParameters)(procedureReference, parameters), node = procedureCallNode, string = procedureCallString, procedureCall = new ProcedureCall(context, string, node, parameters, procedureReference);
|
|
725
|
+
return procedureCall;
|
|
726
|
+
}
|
|
503
727
|
function stepsOrSubproofFromStepOrSubproofNode(stepOrSubproofNode, context) {
|
|
504
728
|
var step = stepFromStepOrSubproofNode(stepOrSubproofNode, context), subproof = subproofFromStepOrSubproofNode(stepOrSubproofNode, context), stepOrSubproof = step || subproof;
|
|
505
729
|
return stepOrSubproof;
|
|
@@ -513,11 +737,11 @@ function prefixedFromComplexTypeDeclarationNode(complexTypeDeclarationNode, cont
|
|
|
513
737
|
return prefixed;
|
|
514
738
|
}
|
|
515
739
|
function definedAssertionFromDefinedAssertionNode(definedAssertionNode, context) {
|
|
516
|
-
var DefinedAssertion = _elements.default.DefinedAssertion, node = definedAssertionNode, string = context.nodeAsString(node), negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context), definedAssertion = new DefinedAssertion(string, node, term, frame, negated);
|
|
740
|
+
var DefinedAssertion = _elements.default.DefinedAssertion, node = definedAssertionNode, string = context.nodeAsString(node), negated = definedAssertionNode.isNegated(), term = termFromDefinedAssertionNode(definedAssertionNode, context), frame = frameFromDefinedAssertionNode(definedAssertionNode, context), definedAssertion = new DefinedAssertion(context, string, node, term, frame, negated);
|
|
517
741
|
return definedAssertion;
|
|
518
742
|
}
|
|
519
743
|
function propertyRelationFromPropertyRelationNode(propertyRelationNode, context) {
|
|
520
|
-
var PropertyRelation = _elements.default.PropertyRelation, node = propertyRelationNode, string = context.nodeAsString(node), property = propertyFromPropertyRelationNode(propertyRelationNode, context), term = termFromPropertyRelationNode(propertyRelationNode, context), propertyRelation = new PropertyRelation(string, node, property, term);
|
|
744
|
+
var PropertyRelation = _elements.default.PropertyRelation, node = propertyRelationNode, string = context.nodeAsString(node), property = propertyFromPropertyRelationNode(propertyRelationNode, context), term = termFromPropertyRelationNode(propertyRelationNode, context), propertyRelation = new PropertyRelation(context, string, node, property, term);
|
|
521
745
|
return propertyRelation;
|
|
522
746
|
}
|
|
523
747
|
function termSubstitutionFromTermSubstitutionNode(termSubstitutionNode, context) {
|
|
@@ -529,23 +753,27 @@ function frameSubstitutionFromFrameSubstitutionNode(frameSubstitutionNode, conte
|
|
|
529
753
|
return frameSubstitution;
|
|
530
754
|
}
|
|
531
755
|
function propertyAssertionFromPropertyAssertionNode(propertyAssertionNode, context) {
|
|
532
|
-
var PropertyAssertion = _elements.default.PropertyAssertion, node = propertyAssertionNode, string = context.nodeAsString(node), term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context), propertyAssertion = new PropertyAssertion(string, node, term, propertyRelation);
|
|
756
|
+
var PropertyAssertion = _elements.default.PropertyAssertion, node = propertyAssertionNode, string = context.nodeAsString(node), term = termFromPropertyAssertionNode(propertyAssertionNode, context), propertyRelation = propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context), propertyAssertion = new PropertyAssertion(context, string, node, term, propertyRelation);
|
|
533
757
|
return propertyAssertion;
|
|
534
758
|
}
|
|
535
759
|
function subproofAssertionFromSubproofAssertionNode(subproofAssertionNode, context) {
|
|
536
|
-
var SubproofAssertion = _elements.default.SubproofAssertion, node = subproofAssertionNode, string = context.nodeAsString(node), statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context), subproofAssertion = new SubproofAssertion(string, node, statements);
|
|
760
|
+
var SubproofAssertion = _elements.default.SubproofAssertion, node = subproofAssertionNode, string = context.nodeAsString(node), statements = statementsFromSubproofAssertionNode(subproofAssertionNode, context), subproofAssertion = new SubproofAssertion(context, string, node, statements);
|
|
537
761
|
return subproofAssertion;
|
|
538
762
|
}
|
|
539
763
|
function containedAssertionFromContainedAssertionNode(containedAssertionNode, context) {
|
|
540
|
-
var ContainedAssertion = _elements.default.ContainedAssertion, node = containedAssertionNode, string = context.nodeAsString(node), negated = containedAssertionNode.isNegated(), term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context), containedAssertion = new ContainedAssertion(string, node, term, frame, negated, statement);
|
|
764
|
+
var ContainedAssertion = _elements.default.ContainedAssertion, node = containedAssertionNode, string = context.nodeAsString(node), negated = containedAssertionNode.isNegated(), term = termFromContainedAssertionNode(containedAssertionNode, context), frame = frameFromContainedAssertionNode(containedAssertionNode, context), statement = statementFromContainedAssertionNode(containedAssertionNode, context), containedAssertion = new ContainedAssertion(context, string, node, term, frame, negated, statement);
|
|
541
765
|
return containedAssertion;
|
|
542
766
|
}
|
|
543
767
|
function satisfiesAssertionFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
|
|
544
|
-
var SatisfiesAssertion = _elements.default.SatisfiesAssertion, node = satisfiesAssertionNode, string = context.nodeAsString(node), signature = signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context), reference = referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context), satisfiesAssertion = new SatisfiesAssertion(string, node, signature, reference);
|
|
768
|
+
var SatisfiesAssertion = _elements.default.SatisfiesAssertion, node = satisfiesAssertionNode, string = context.nodeAsString(node), signature = signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context), reference = referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context), satisfiesAssertion = new SatisfiesAssertion(context, string, node, signature, reference);
|
|
545
769
|
return satisfiesAssertion;
|
|
546
770
|
}
|
|
771
|
+
function procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context) {
|
|
772
|
+
var ProcedureReference = _elements.default.ProcedureReference, node = procedureReferenceNode, string = context.nodeAsString(node), name = nameFromProcedureReferenceNode(procedureReferenceNode, context), variableDeclaration = new ProcedureReference(context, string, node, name);
|
|
773
|
+
return variableDeclaration;
|
|
774
|
+
}
|
|
547
775
|
function variableDeclarationFromVariableDeclarationNode(variableDeclarationNode, context) {
|
|
548
|
-
var VariableDeclaration = _elements.default.VariableDeclaration, node = variableDeclarationNode, string = context.nodeAsString(node),
|
|
776
|
+
var VariableDeclaration = _elements.default.VariableDeclaration, node = variableDeclarationNode, string = context.nodeAsString(node), variable = variableFromVariableNode(variableDeclarationNode, context), variableDeclaration = new VariableDeclaration(context, string, node, variable);
|
|
549
777
|
return variableDeclaration;
|
|
550
778
|
}
|
|
551
779
|
function typePrefixDeclarationFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context) {
|
|
@@ -560,12 +788,8 @@ function simpleTypeDeclarationFromSimpleTypeDeclarationNode(simpleTypeDeclaratio
|
|
|
560
788
|
var SimpleTypeDeclaration = _elements.default.SimpleTypeDeclaration, node = simpleTypeDeclarationNode, string = context.nodeAsString(node), type = typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), prefixed = prefixedFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context), simpleTypeDeclaration = new SimpleTypeDeclaration(context, string, node, type, prefixed);
|
|
561
789
|
return simpleTypeDeclaration;
|
|
562
790
|
}
|
|
563
|
-
function statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode,
|
|
564
|
-
|
|
565
|
-
context = substitution; ///
|
|
566
|
-
substitution = null;
|
|
567
|
-
}
|
|
568
|
-
var StatementSubstitution = _elements.default.StatementSubstitution, node = statementSubstitutionNode, string = context.nodeAsString(node), resolved = true, statement = statementFromStatementSubstitutionNode(statementSubstitutionNode, context), metavariable = metavariableFromStatementSubstitutionNode(statementSubstitutionNode, context), statementSubstitution = new StatementSubstitution(context, string, node, resolved, statement, metavariable, substitution);
|
|
791
|
+
function statementSubstitutionFromStatementSubstitutionNode(statementSubstitutionNode, context) {
|
|
792
|
+
var StatementSubstitution = _elements.default.StatementSubstitution, node = statementSubstitutionNode, string = context.nodeAsString(node), resolved = true, statement = statementFromStatementSubstitutionNode(statementSubstitutionNode, context), metavariable = metavariableFromStatementSubstitutionNode(statementSubstitutionNode, context), substitution = null, statementSubstitution = new StatementSubstitution(context, string, node, resolved, statement, metavariable, substitution);
|
|
569
793
|
return statementSubstitution;
|
|
570
794
|
}
|
|
571
795
|
function referenceSubstitutionFromReferenceSubstitutionNode(referenceSubstitutionNode, context) {
|
|
@@ -581,9 +805,43 @@ function complexTypeDeclarationFromComplexTypeDeclarationNode(complexTypeDeclara
|
|
|
581
805
|
return complexTypeDeclaration;
|
|
582
806
|
}
|
|
583
807
|
function metavariableDeclarationFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
|
|
584
|
-
var MetavariableDeclaration = _elements.default.MetavariableDeclaration, node = metavariableDeclarationNode, string = context.nodeAsString(node),
|
|
808
|
+
var MetavariableDeclaration = _elements.default.MetavariableDeclaration, node = metavariableDeclarationNode, string = context.nodeAsString(node), metaType = metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, context), metavariable = metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context);
|
|
809
|
+
metavariable.setMetaType(metaType);
|
|
810
|
+
var metavariableDeclaration = new MetavariableDeclaration(context, string, node, metavariable);
|
|
585
811
|
return metavariableDeclaration;
|
|
586
812
|
}
|
|
813
|
+
function proofFromRuleNode(ruleNode, context) {
|
|
814
|
+
var proof = null;
|
|
815
|
+
var proofNode = ruleNode.getProofNode();
|
|
816
|
+
if (proofNode !== null) {
|
|
817
|
+
proof = proofFromProofNode(proofNode, context);
|
|
818
|
+
}
|
|
819
|
+
return proof;
|
|
820
|
+
}
|
|
821
|
+
function axiomFromSectionNode(sectionNode, context) {
|
|
822
|
+
var axiom = null;
|
|
823
|
+
var axiomNode = sectionNode.getAxiomNode();
|
|
824
|
+
if (axiomNode !== null) {
|
|
825
|
+
axiom = axiomFromAxiomNode(axiomNode, context);
|
|
826
|
+
}
|
|
827
|
+
return axiom;
|
|
828
|
+
}
|
|
829
|
+
function lemmaFromSectionNode(sectionNode, context) {
|
|
830
|
+
var lemma = null;
|
|
831
|
+
var lemmaNode = sectionNode.getLemmaNode();
|
|
832
|
+
if (lemmaNode !== null) {
|
|
833
|
+
lemma = lemmaFromLemmaNode(lemmaNode, context);
|
|
834
|
+
}
|
|
835
|
+
return lemma;
|
|
836
|
+
}
|
|
837
|
+
function variableFromTermNode(termNode, context) {
|
|
838
|
+
var variable = null;
|
|
839
|
+
var variableNode = termNode.getVariableNode();
|
|
840
|
+
if (variableNode !== null) {
|
|
841
|
+
variable = variableFromVariableNode(variableNode, context);
|
|
842
|
+
}
|
|
843
|
+
return variable;
|
|
844
|
+
}
|
|
587
845
|
function statementFromStepNode(stepNode, context) {
|
|
588
846
|
var statement = null;
|
|
589
847
|
var statementNode = stepNode.getStatementNode();
|
|
@@ -600,6 +858,30 @@ function referenceFromStepNode(stepNode, context) {
|
|
|
600
858
|
}
|
|
601
859
|
return reference;
|
|
602
860
|
}
|
|
861
|
+
function conclusionFromRuleNode(ruleNode, context) {
|
|
862
|
+
var conclusion = null;
|
|
863
|
+
var conclusionNode = ruleNode.getConclusionNode();
|
|
864
|
+
if (conclusionNode !== null) {
|
|
865
|
+
conclusion = conclusionFromConclusionNode(conclusionNode, context);
|
|
866
|
+
}
|
|
867
|
+
return conclusion;
|
|
868
|
+
}
|
|
869
|
+
function theoremFromSectionNode(sectionNode, context) {
|
|
870
|
+
var theorem = null;
|
|
871
|
+
var theoremNode = sectionNode.getTheoremNode();
|
|
872
|
+
if (theoremNode !== null) {
|
|
873
|
+
theorem = theoremFromTheoremNode(theoremNode, context);
|
|
874
|
+
}
|
|
875
|
+
return theorem;
|
|
876
|
+
}
|
|
877
|
+
function frameFromJudgementNode(judgementNode, context) {
|
|
878
|
+
var frame = null;
|
|
879
|
+
var frameNode = judgementNode.getFrameNode();
|
|
880
|
+
if (frameNode !== null) {
|
|
881
|
+
frame = frameFromFrameNode(frameNode, context);
|
|
882
|
+
}
|
|
883
|
+
return frame;
|
|
884
|
+
}
|
|
603
885
|
function derivationFromProofNode(proofNode, context) {
|
|
604
886
|
var derivation = null;
|
|
605
887
|
var derivationNode = proofNode.getDerivationNode();
|
|
@@ -608,6 +890,46 @@ function derivationFromProofNode(proofNode, context) {
|
|
|
608
890
|
}
|
|
609
891
|
return derivation;
|
|
610
892
|
}
|
|
893
|
+
function statementFromPremiseNode(premiseNode, context) {
|
|
894
|
+
var statement = null;
|
|
895
|
+
var statementNode = premiseNode.getStatementNode();
|
|
896
|
+
if (statementNode !== null) {
|
|
897
|
+
statement = statementFromStatementNode(statementNode, context);
|
|
898
|
+
}
|
|
899
|
+
return statement;
|
|
900
|
+
}
|
|
901
|
+
function metavariableFromLabelNode(labelNode, context) {
|
|
902
|
+
var metavariable = null;
|
|
903
|
+
var metavariableNode = labelNode.getMetavariableNode();
|
|
904
|
+
if (metavariableNode !== null) {
|
|
905
|
+
metavariable = metavariableFromMetavariableNode(metavariableNode, context);
|
|
906
|
+
}
|
|
907
|
+
return metavariable;
|
|
908
|
+
}
|
|
909
|
+
function conjectureFromSectionNode(sectionNode, context) {
|
|
910
|
+
var conjecture = null;
|
|
911
|
+
var conjectureNode = sectionNode.getConjectureNode();
|
|
912
|
+
if (conjectureNode !== null) {
|
|
913
|
+
conjecture = conjectureFromConjectureNode(conjectureNode, context);
|
|
914
|
+
}
|
|
915
|
+
return conjecture;
|
|
916
|
+
}
|
|
917
|
+
function conclusionFromPremiseNode(premiseNode, context) {
|
|
918
|
+
var conclusion = null;
|
|
919
|
+
var conclusionNode = premiseNode.getConclusionNode();
|
|
920
|
+
if (conclusionNode !== null) {
|
|
921
|
+
conclusion = conclusionFromConclusionNode(conclusionNode, context);
|
|
922
|
+
}
|
|
923
|
+
return conclusion;
|
|
924
|
+
}
|
|
925
|
+
function judgementFomStatementNode(statementNode, context) {
|
|
926
|
+
var judgement = null;
|
|
927
|
+
var judgementNode = statementNode.getJudgementNode();
|
|
928
|
+
if (judgementNode !== null) {
|
|
929
|
+
judgement = judgementFromJudgementNode(judgementNode, context);
|
|
930
|
+
}
|
|
931
|
+
return judgement;
|
|
932
|
+
}
|
|
611
933
|
function termFromTypeAssertionNode(typeAssertionNode, context) {
|
|
612
934
|
var term = null;
|
|
613
935
|
var termNode = typeAssertionNode.getTermNode();
|
|
@@ -624,14 +946,13 @@ function typeFromTypeAssertionNode(typeAssertionNode, context) {
|
|
|
624
946
|
}
|
|
625
947
|
return type;
|
|
626
948
|
}
|
|
627
|
-
function
|
|
628
|
-
var
|
|
629
|
-
var
|
|
630
|
-
if (
|
|
631
|
-
|
|
632
|
-
step = stepFromStepNode(stepNode, context);
|
|
949
|
+
function metavariableFromFrameNode(frameNode, context) {
|
|
950
|
+
var metavariable = null;
|
|
951
|
+
var metavariableNode = frameNode.getMetavariableNode();
|
|
952
|
+
if (metavariableNode !== null) {
|
|
953
|
+
metavariable = metavariableFromMetavariableNode(metavariableNode, context);
|
|
633
954
|
}
|
|
634
|
-
return
|
|
955
|
+
return metavariable;
|
|
635
956
|
}
|
|
636
957
|
function identifierFromVarialbeNode(variableNode, context) {
|
|
637
958
|
var variableIdentifier = variableNode.getVariableIdentifier(), identifier = variableIdentifier; ///
|
|
@@ -645,6 +966,15 @@ function statementFromDeductionNode(deductionNode, context) {
|
|
|
645
966
|
}
|
|
646
967
|
return statement;
|
|
647
968
|
}
|
|
969
|
+
function stepFromStepOrSubproofNode(stepOrSubproofNode, context) {
|
|
970
|
+
var step = null;
|
|
971
|
+
var stepOrSubproofNodeStepNode = stepOrSubproofNode.isStepNode();
|
|
972
|
+
if (stepOrSubproofNodeStepNode) {
|
|
973
|
+
var stepNode = stepOrSubproofNode; ///
|
|
974
|
+
step = stepFromStepNode(stepNode, context);
|
|
975
|
+
}
|
|
976
|
+
return step;
|
|
977
|
+
}
|
|
648
978
|
function statementFromConclusionNode(conclusinoNode, context) {
|
|
649
979
|
var statement = null;
|
|
650
980
|
var statementNode = conclusinoNode.getStatementNode();
|
|
@@ -663,9 +993,9 @@ function statementFromAssumptionNode(assumptionNode, context) {
|
|
|
663
993
|
}
|
|
664
994
|
function referenceFromAssumptionNode(assumptionNode, context) {
|
|
665
995
|
var reference = null;
|
|
666
|
-
var
|
|
667
|
-
if (
|
|
668
|
-
reference =
|
|
996
|
+
var metavariableNode = assumptionNode.getMetavariableNode();
|
|
997
|
+
if (metavariableNode !== null) {
|
|
998
|
+
reference = referenceFromMetavariableNode(metavariableNode, context);
|
|
669
999
|
}
|
|
670
1000
|
return reference;
|
|
671
1001
|
}
|
|
@@ -677,6 +1007,30 @@ function assumptionFromJudgementNode(judgementNode, context) {
|
|
|
677
1007
|
}
|
|
678
1008
|
return assumption;
|
|
679
1009
|
}
|
|
1010
|
+
function statementFromHypothesisNode(hypothesisNode, context) {
|
|
1011
|
+
var statement = null;
|
|
1012
|
+
var statementNode = hypothesisNode.getStatementNode();
|
|
1013
|
+
if (statementNode !== null) {
|
|
1014
|
+
statement = statementFromStatementNode(statementNode, context);
|
|
1015
|
+
}
|
|
1016
|
+
return statement;
|
|
1017
|
+
}
|
|
1018
|
+
function procedureCallFromPremiseNode(premiseNode, context) {
|
|
1019
|
+
var procedureCall = null;
|
|
1020
|
+
var procedureCallNode = premiseNode.getProcedureCallNode();
|
|
1021
|
+
if (procedureCallNode !== null) {
|
|
1022
|
+
procedureCall = procedureCallFromProcedureCallNode(procedureCallNode, context);
|
|
1023
|
+
}
|
|
1024
|
+
return procedureCall;
|
|
1025
|
+
}
|
|
1026
|
+
function statementFromSuppositionNode(suppositionNode, context) {
|
|
1027
|
+
var statement = null;
|
|
1028
|
+
var statementNode = suppositionNode.getStatementNode();
|
|
1029
|
+
if (statementNode !== null) {
|
|
1030
|
+
statement = statementFromStatementNode(statementNode, context);
|
|
1031
|
+
}
|
|
1032
|
+
return statement; ///
|
|
1033
|
+
}
|
|
680
1034
|
function termFromDefinedAssertionNode(definedAssertionNode, context) {
|
|
681
1035
|
var term = null;
|
|
682
1036
|
var termNode = definedAssertionNode.getTermNode();
|
|
@@ -701,6 +1055,15 @@ function termFromTermSubstitutionNode(termSubstitutionNode, context) {
|
|
|
701
1055
|
}
|
|
702
1056
|
return term;
|
|
703
1057
|
}
|
|
1058
|
+
function metavariableFromStatementNode(statementNode, context) {
|
|
1059
|
+
var metavariable = null;
|
|
1060
|
+
var singularMetavariableNode = statementNode.getSingularMetavariableNode();
|
|
1061
|
+
if (singularMetavariableNode !== null) {
|
|
1062
|
+
var metavariableNode = singularMetavariableNode; ///
|
|
1063
|
+
metavariable = metavariableFromMetavariableNode(metavariableNode, context);
|
|
1064
|
+
}
|
|
1065
|
+
return metavariable;
|
|
1066
|
+
}
|
|
704
1067
|
function subDerivationFromSubproofNode(subproofNode, context) {
|
|
705
1068
|
var subDerviation = null;
|
|
706
1069
|
var subDerivationNode = subproofNode.getSubDerivationNode();
|
|
@@ -719,9 +1082,9 @@ function typeAssertinFromStatementNode(statementNode, context) {
|
|
|
719
1082
|
}
|
|
720
1083
|
function metavariableFromReferenceNode(referenceNode, context) {
|
|
721
1084
|
var metavariable = null;
|
|
722
|
-
var metavariableNode = referenceNode.
|
|
1085
|
+
var metavariableNode = referenceNode.getMetavariableNode();
|
|
723
1086
|
if (metavariableNode !== null) {
|
|
724
|
-
metavariable =
|
|
1087
|
+
metavariable = metavariableFromMetavariableNode(metavariableNode, context);
|
|
725
1088
|
}
|
|
726
1089
|
return metavariable;
|
|
727
1090
|
}
|
|
@@ -741,14 +1104,6 @@ function termFromPropertyAssertionNode(propertyAssertionNode, context) {
|
|
|
741
1104
|
}
|
|
742
1105
|
return term;
|
|
743
1106
|
}
|
|
744
|
-
function frameFromFrameSubstitutionNode(frameSubstitutionNode, context) {
|
|
745
|
-
var frame = null;
|
|
746
|
-
var frameNode = frameSubstitutionNode.getFrameNode();
|
|
747
|
-
if (frameNode !== null) {
|
|
748
|
-
frame = frameFromFrameNode(frameNode, context);
|
|
749
|
-
}
|
|
750
|
-
return frame;
|
|
751
|
-
}
|
|
752
1107
|
function satisfiesAssertionFromStepNode(stepNode, context) {
|
|
753
1108
|
var satisfiesAssertion = null;
|
|
754
1109
|
var satisfiesAssertionNode = stepNode.getSatisfiedAssertionNode();
|
|
@@ -757,6 +1112,34 @@ function satisfiesAssertionFromStepNode(stepNode, context) {
|
|
|
757
1112
|
}
|
|
758
1113
|
return satisfiesAssertion;
|
|
759
1114
|
}
|
|
1115
|
+
function parameterNameFromParameterNode(parameterNode, context) {
|
|
1116
|
+
var parameterName = parameterNode.getParameterName();
|
|
1117
|
+
return parameterName;
|
|
1118
|
+
}
|
|
1119
|
+
function metavariableFromAssumptionNode(assumptionNode, context) {
|
|
1120
|
+
var metavariable = null;
|
|
1121
|
+
var metavariableNode = assumptionNode.getMetavariableNode();
|
|
1122
|
+
if (metavariableNode !== null) {
|
|
1123
|
+
metavariable = metavariableFromMetavariableNode(metavariableNode, context);
|
|
1124
|
+
}
|
|
1125
|
+
return metavariable;
|
|
1126
|
+
}
|
|
1127
|
+
function referenceFromProcedureCallNode(procedureCallNode, context) {
|
|
1128
|
+
var reference = null;
|
|
1129
|
+
var referenceNode = procedureCallNode.getReferenceNode();
|
|
1130
|
+
if (referenceNode !== null) {
|
|
1131
|
+
reference = referenceFromReferenceNode(referenceNode, context);
|
|
1132
|
+
}
|
|
1133
|
+
return reference;
|
|
1134
|
+
}
|
|
1135
|
+
function frameFromFrameSubstitutionNode(frameSubstitutionNode, context) {
|
|
1136
|
+
var frame = null;
|
|
1137
|
+
var frameNode = frameSubstitutionNode.getFrameNode();
|
|
1138
|
+
if (frameNode !== null) {
|
|
1139
|
+
frame = frameFromFrameNode(frameNode, context);
|
|
1140
|
+
}
|
|
1141
|
+
return frame;
|
|
1142
|
+
}
|
|
760
1143
|
function subproofFromStepOrSubproofNode(subproofOrSubproofNode, context) {
|
|
761
1144
|
var subproof = null;
|
|
762
1145
|
var subproofOrSubproofNodeSubproofNode = subproofOrSubproofNode.isSubproofNode();
|
|
@@ -774,6 +1157,14 @@ function termFromContainedAssertionNode(containedAssertionNode, context) {
|
|
|
774
1157
|
}
|
|
775
1158
|
return term;
|
|
776
1159
|
}
|
|
1160
|
+
function typeFromPropertyDeclarationNode(propertyDeclarationNode, context) {
|
|
1161
|
+
var type = null;
|
|
1162
|
+
var typeNode = propertyDeclarationNode.getTypeNode();
|
|
1163
|
+
if (typeNode !== null) {
|
|
1164
|
+
type = typeFromTypeNode(typeNode, context);
|
|
1165
|
+
}
|
|
1166
|
+
return type;
|
|
1167
|
+
}
|
|
777
1168
|
function frameFromContainedAssertionNode(containedAssertionNode, context) {
|
|
778
1169
|
var frame = null;
|
|
779
1170
|
var frameNode = containedAssertionNode.getFrameNode();
|
|
@@ -798,6 +1189,14 @@ function variableFromTermSubstitutionNode(termSubstitutionNode, context) {
|
|
|
798
1189
|
}
|
|
799
1190
|
return variable;
|
|
800
1191
|
}
|
|
1192
|
+
function procedureCallFromSuppositionNode(suppositionNode, context) {
|
|
1193
|
+
var procedureCall = null;
|
|
1194
|
+
var procedureCallNode = suppositionNode.getProcedureCallNode();
|
|
1195
|
+
if (procedureCallNode !== null) {
|
|
1196
|
+
procedureCall = procedureCallFromProcedureCallNode(procedureCallNode, context);
|
|
1197
|
+
}
|
|
1198
|
+
return procedureCall;
|
|
1199
|
+
}
|
|
801
1200
|
function definedAssertionFromStatementNode(statementNode, context) {
|
|
802
1201
|
var definedAssertion = null;
|
|
803
1202
|
var definedAssertionNode = statementNode.getDefinedAssertionNode();
|
|
@@ -806,14 +1205,6 @@ function definedAssertionFromStatementNode(statementNode, context) {
|
|
|
806
1205
|
}
|
|
807
1206
|
return definedAssertion;
|
|
808
1207
|
}
|
|
809
|
-
function typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context) {
|
|
810
|
-
var type = null;
|
|
811
|
-
var typeNode = simpleTypeDeclarationNode.getTypeNode();
|
|
812
|
-
if (typeNode !== null) {
|
|
813
|
-
type = typeFromTypeNode(typeNode, context);
|
|
814
|
-
}
|
|
815
|
-
return type;
|
|
816
|
-
}
|
|
817
1208
|
function termSubstitutionFromStatementNode(statementNode, context) {
|
|
818
1209
|
var termSubstitution = null;
|
|
819
1210
|
var termSubstitutionNode = statementNode.getTermSubstitutionNode();
|
|
@@ -822,6 +1213,30 @@ function termSubstitutionFromStatementNode(statementNode, context) {
|
|
|
822
1213
|
}
|
|
823
1214
|
return termSubstitution;
|
|
824
1215
|
}
|
|
1216
|
+
function proofFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
|
|
1217
|
+
var proof = null;
|
|
1218
|
+
var proofNode = metaLemmaMetathoremNode.getProofNode();
|
|
1219
|
+
if (proofNode !== null) {
|
|
1220
|
+
proof = proofFromProofNode(proofNode, context);
|
|
1221
|
+
}
|
|
1222
|
+
return proof;
|
|
1223
|
+
}
|
|
1224
|
+
function labelFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
|
|
1225
|
+
var label = null;
|
|
1226
|
+
var labelNode = metaLemmaMetathoremNode.getLabelNode();
|
|
1227
|
+
if (labelNode !== null) {
|
|
1228
|
+
label = labelFromLabelNode(labelNode, context);
|
|
1229
|
+
}
|
|
1230
|
+
return label;
|
|
1231
|
+
}
|
|
1232
|
+
function typeFromSimpleTypeDeclarationNode(simpleTypeDeclarationNode, context) {
|
|
1233
|
+
var type = null;
|
|
1234
|
+
var typeNode = simpleTypeDeclarationNode.getTypeNode();
|
|
1235
|
+
if (typeNode !== null) {
|
|
1236
|
+
type = typeFromTypeNode(typeNode, context);
|
|
1237
|
+
}
|
|
1238
|
+
return type;
|
|
1239
|
+
}
|
|
825
1240
|
function frameSubstitutionFromStatementNode(statementNode, context) {
|
|
826
1241
|
var frameSubstitution = null;
|
|
827
1242
|
var frameSubstitutionNode = statementNode.getFrameSubstitutionNode();
|
|
@@ -853,6 +1268,14 @@ function subproofAssertionFromStatementNode(statementNode, context) {
|
|
|
853
1268
|
}
|
|
854
1269
|
return subproofAssertion;
|
|
855
1270
|
}
|
|
1271
|
+
function termFromConstructorDeclarationNode(constructorDeclarationNode, context) {
|
|
1272
|
+
var term = null;
|
|
1273
|
+
var termNode = constructorDeclarationNode.getTermNode();
|
|
1274
|
+
if (termNode !== null) {
|
|
1275
|
+
term = termFromTermNode(termNode, context);
|
|
1276
|
+
}
|
|
1277
|
+
return term;
|
|
1278
|
+
}
|
|
856
1279
|
function typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context) {
|
|
857
1280
|
var type = null;
|
|
858
1281
|
var typeNode = complexTypeDeclarationNode.getTypeNode();
|
|
@@ -861,6 +1284,16 @@ function typeFromComplexTypeDeclarationNode(complexTypeDeclarationNode, context)
|
|
|
861
1284
|
}
|
|
862
1285
|
return type;
|
|
863
1286
|
}
|
|
1287
|
+
function typeFromConstructorDeclarationNode(constructorDeclarationNode, context) {
|
|
1288
|
+
var type;
|
|
1289
|
+
var typeNode = constructorDeclarationNode.getTypeNode();
|
|
1290
|
+
if (typeNode !== null) {
|
|
1291
|
+
type = typeFromTypeNode(typeNode, context);
|
|
1292
|
+
} else {
|
|
1293
|
+
type = _type.baseType;
|
|
1294
|
+
}
|
|
1295
|
+
return type;
|
|
1296
|
+
}
|
|
864
1297
|
function containedAssertionFromStatementNode(statementNode, context) {
|
|
865
1298
|
0;
|
|
866
1299
|
var containedAssertion = null;
|
|
@@ -870,14 +1303,6 @@ function containedAssertionFromStatementNode(statementNode, context) {
|
|
|
870
1303
|
}
|
|
871
1304
|
return containedAssertion;
|
|
872
1305
|
}
|
|
873
|
-
function statementFromContainedAssertionNode(containedAssertionNode, context) {
|
|
874
|
-
var statement = null;
|
|
875
|
-
var statementNode = containedAssertionNode.getStatementNode();
|
|
876
|
-
if (statementNode !== null) {
|
|
877
|
-
statement = statementFromStatementNode(statementNode, context);
|
|
878
|
-
}
|
|
879
|
-
return statement;
|
|
880
|
-
}
|
|
881
1306
|
function satisfiesAssertionFromStatementNode(statementNode, context) {
|
|
882
1307
|
var satisfiesAssertion = null;
|
|
883
1308
|
var satisfiesAssertionNode = statementNode.getSatisfiedAssertionNode();
|
|
@@ -886,6 +1311,14 @@ function satisfiesAssertionFromStatementNode(statementNode, context) {
|
|
|
886
1311
|
}
|
|
887
1312
|
return satisfiesAssertion;
|
|
888
1313
|
}
|
|
1314
|
+
function statementFromContainedAssertionNode(containedAssertionNode, context) {
|
|
1315
|
+
var statement = null;
|
|
1316
|
+
var statementNode = containedAssertionNode.getStatementNode();
|
|
1317
|
+
if (statementNode !== null) {
|
|
1318
|
+
statement = statementFromStatementNode(statementNode, context);
|
|
1319
|
+
}
|
|
1320
|
+
return statement;
|
|
1321
|
+
}
|
|
889
1322
|
function propertyFromPropertyDeclarationNode(propertyDeclarationNode, context) {
|
|
890
1323
|
var property = null;
|
|
891
1324
|
var propertyNode = propertyDeclarationNode.getPropertyNode();
|
|
@@ -904,9 +1337,9 @@ function signatureFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
|
|
|
904
1337
|
}
|
|
905
1338
|
function referenceFromSatisfiesAssertionNode(satisfiesAssertionNode, context) {
|
|
906
1339
|
var reference = null;
|
|
907
|
-
var
|
|
908
|
-
if (
|
|
909
|
-
reference =
|
|
1340
|
+
var metavariableNode = satisfiesAssertionNode.getMetavariableNode();
|
|
1341
|
+
if (metavariableNode !== null) {
|
|
1342
|
+
reference = referenceFromMetavariableNode(metavariableNode, context);
|
|
910
1343
|
}
|
|
911
1344
|
return reference;
|
|
912
1345
|
}
|
|
@@ -933,6 +1366,14 @@ function metavariableFromFrameSubstitutionNode(frameSubstitutionNode, context) {
|
|
|
933
1366
|
}
|
|
934
1367
|
return metavariable;
|
|
935
1368
|
}
|
|
1369
|
+
function deductionFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
|
|
1370
|
+
var deduction = null;
|
|
1371
|
+
var deductionNode = metaLemmaMetathoremNode.getDeductionNode();
|
|
1372
|
+
if (deductionNode !== null) {
|
|
1373
|
+
deduction = deductionFromDeductionNode(deductionNode, context);
|
|
1374
|
+
}
|
|
1375
|
+
return deduction;
|
|
1376
|
+
}
|
|
936
1377
|
function statementFromStatementSubstitutionNode(statementSubstitutionNode, context) {
|
|
937
1378
|
var statement = null;
|
|
938
1379
|
var statementNode = statementSubstitutionNode.getStatementNode();
|
|
@@ -949,6 +1390,22 @@ function referenceFromReferenceSubstitutionNode(referenceSubstitutionNode, conte
|
|
|
949
1390
|
}
|
|
950
1391
|
return reference;
|
|
951
1392
|
}
|
|
1393
|
+
function statementFromCombinatorDeclarationNode(combinatorDeclarationNode, context) {
|
|
1394
|
+
var statement = null;
|
|
1395
|
+
var statementNode = combinatorDeclarationNode.getStatementNode();
|
|
1396
|
+
if (statementNode !== null) {
|
|
1397
|
+
statement = statementFromStatementNode(statementNode, context);
|
|
1398
|
+
}
|
|
1399
|
+
return statement;
|
|
1400
|
+
}
|
|
1401
|
+
function procedureReferenceFromProcedureCallNode(procedureCallNode, context) {
|
|
1402
|
+
var procedureReference = null;
|
|
1403
|
+
var procedureReferenceNode = procedureCallNode.getProcedureReferenceNode();
|
|
1404
|
+
if (procedureReferenceNode !== null) {
|
|
1405
|
+
procedureReference = procedureReferenceFromProcedureReferenceNode(procedureReferenceNode, context);
|
|
1406
|
+
}
|
|
1407
|
+
return procedureReference;
|
|
1408
|
+
}
|
|
952
1409
|
function typePrefixFromTypePrefixDeclarationNode(typePrefixDeclarationNode, context) {
|
|
953
1410
|
var typePrefix = null;
|
|
954
1411
|
var typePrefixNode = typePrefixDeclarationNode.getTypePrefixNode();
|
|
@@ -974,6 +1431,14 @@ function metaTypeFromMetavariableDeclarationNode(metavariableDeclarationNode, co
|
|
|
974
1431
|
}
|
|
975
1432
|
return metaType;
|
|
976
1433
|
}
|
|
1434
|
+
function proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
|
|
1435
|
+
var proof = null;
|
|
1436
|
+
var proofNode = axiomLemmaTheoremConjectureNode.getProofNode();
|
|
1437
|
+
if (proofNode !== null) {
|
|
1438
|
+
proof = proofFromProofNode(proofNode, context);
|
|
1439
|
+
}
|
|
1440
|
+
return proof;
|
|
1441
|
+
}
|
|
977
1442
|
function propertyRelationFromPropertyAssertionNode(propertyAssertionNode, context) {
|
|
978
1443
|
var propertyRelation = null;
|
|
979
1444
|
var propertyRelationNode = propertyAssertionNode.getPropertyRelationNode();
|
|
@@ -1007,14 +1472,6 @@ function metavariableFromReferenceSubstitutionNode(referenceSubstitutionNode, co
|
|
|
1007
1472
|
}
|
|
1008
1473
|
return metavariable;
|
|
1009
1474
|
}
|
|
1010
|
-
function proofFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
|
|
1011
|
-
var proof = null;
|
|
1012
|
-
var proofNode = axiomLemmaTheoremConjectureNode.getProofNode();
|
|
1013
|
-
if (proofNode !== null) {
|
|
1014
|
-
proof = proofFromProofNode(proofNode, context);
|
|
1015
|
-
}
|
|
1016
|
-
return proof;
|
|
1017
|
-
}
|
|
1018
1475
|
function metavariableFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
|
|
1019
1476
|
var metavariable = null;
|
|
1020
1477
|
var metavariableNode = metavariableDeclarationNode.getMetavariableNode();
|
|
@@ -1053,6 +1510,13 @@ function labelsFromLabelNodes(labelNodes, context) {
|
|
|
1053
1510
|
});
|
|
1054
1511
|
return labels;
|
|
1055
1512
|
}
|
|
1513
|
+
function premisesFromPremiseNodes(premiseNodes, context) {
|
|
1514
|
+
var premises = premiseNodes.map(function(premiseNode) {
|
|
1515
|
+
var premise = premiseFromPremiseNode(premiseNode, context);
|
|
1516
|
+
return premise;
|
|
1517
|
+
});
|
|
1518
|
+
return premises;
|
|
1519
|
+
}
|
|
1056
1520
|
function statementsFromStatementNodes(statementNodes, context) {
|
|
1057
1521
|
var statements = statementNodes.map(function(statementNode) {
|
|
1058
1522
|
var statement = statementFromStatementNode(statementNode, context);
|
|
@@ -1071,6 +1535,20 @@ function superTypesFromSuperTypeNodes(superTypeNodes, context) {
|
|
|
1071
1535
|
}
|
|
1072
1536
|
return superTypes;
|
|
1073
1537
|
}
|
|
1538
|
+
function parametersFromParameterNodes(parameterNodes, context) {
|
|
1539
|
+
var parameters = parameterNodes.map(function(parameterNode) {
|
|
1540
|
+
var parameter = parameterFromParameterNode(parameterNode, context);
|
|
1541
|
+
return parameter;
|
|
1542
|
+
});
|
|
1543
|
+
return parameters;
|
|
1544
|
+
}
|
|
1545
|
+
function hypothesesFromHypothesisNodes(hypothesisNodes, context) {
|
|
1546
|
+
var hypotheses = hypothesisNodes.map(function(hypotheseNode) {
|
|
1547
|
+
var hypothesis = hypothesisFromHypothesisNode(hypotheseNode, context);
|
|
1548
|
+
return hypothesis;
|
|
1549
|
+
});
|
|
1550
|
+
return hypotheses;
|
|
1551
|
+
}
|
|
1074
1552
|
function assumptionsFromAssumptionNodes(assumptionNodes, context) {
|
|
1075
1553
|
var assumptions = assumptionNodes.map(function(assumptionNode) {
|
|
1076
1554
|
var assumption = assumptionFromAssumptionNode(assumptionNode, context);
|
|
@@ -1092,6 +1570,14 @@ function propertiesFromPropertyDeclarationNodes(propertyDeclarationNodes, contex
|
|
|
1092
1570
|
});
|
|
1093
1571
|
return properties;
|
|
1094
1572
|
}
|
|
1573
|
+
function labelsFromRuleNode(ruleNode, context) {
|
|
1574
|
+
var labelNodes = ruleNode.getLabelNodes(), labels = labelsFromLabelNodes(labelNodes, context);
|
|
1575
|
+
return labels;
|
|
1576
|
+
}
|
|
1577
|
+
function premisesFromRuleNode(ruleNode, context) {
|
|
1578
|
+
var premiseNodes = ruleNode.getPremiseNodes(), premises = premisesFromPremiseNodes(premiseNodes, context);
|
|
1579
|
+
return premises;
|
|
1580
|
+
}
|
|
1095
1581
|
function termsFromSignatureNode(signatureNode, context) {
|
|
1096
1582
|
var termNodes = signatureNode.getAssumptionNodes(), terms = termsFromTermNodes(termNodes, context);
|
|
1097
1583
|
return terms;
|
|
@@ -1108,6 +1594,10 @@ function suppositionsFromSubproofNode(subproofNode, context) {
|
|
|
1108
1594
|
var suppositionNodes = subproofNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
|
|
1109
1595
|
return suppositions;
|
|
1110
1596
|
}
|
|
1597
|
+
function parametersFromProcedureCallNode(procedureCallNode, context) {
|
|
1598
|
+
var parameterNodes = procedureCallNode.getParameterNodes(), parameters = parametersFromParameterNodes(parameterNodes, context);
|
|
1599
|
+
return parameters;
|
|
1600
|
+
}
|
|
1111
1601
|
function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
|
|
1112
1602
|
var statementNodes = subproofAssertionNode.getStatementNodes(), statements = statementsFromStatementNodes(statementNodes, context);
|
|
1113
1603
|
return statements;
|
|
@@ -1120,6 +1610,10 @@ function superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, co
|
|
|
1120
1610
|
var superTypeNodes = complexTypeDeclarationNode.getSuperTypeNodes(), superTypes = superTypesFromSuperTypeNodes(superTypeNodes, context);
|
|
1121
1611
|
return superTypes;
|
|
1122
1612
|
}
|
|
1613
|
+
function suppositionsFromMetaLemmaMetatheoremNode(metaLemmaMetathoremNode, context) {
|
|
1614
|
+
var suppositionNodes = metaLemmaMetathoremNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
|
|
1615
|
+
return suppositions;
|
|
1616
|
+
}
|
|
1123
1617
|
function labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
|
|
1124
1618
|
var labelNodes = axiomLemmaTheoremConjectureNode.getLabelNodes(), labels = labelsFromLabelNodes(labelNodes, context);
|
|
1125
1619
|
return labels;
|
|
@@ -1138,4 +1632,4 @@ function _typeFromMetavariableDeclarationNode(metavariableDeclarationNode, conte
|
|
|
1138
1632
|
return type;
|
|
1139
1633
|
}
|
|
1140
1634
|
|
|
1141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VicHJvb2ZOb2RlLFxuICAgICAgICAgc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIHR5cGUgPSBiYXNlVHlwZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgICB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gbm9taW5hbFR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lLCAgLy8vXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IG51bGwsXG4gICAgICAgICAgcHJvcGVydGllcyA9IG51bGwsXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbm9kZSwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIHRlcm0gPSBuZXcgVGVybShzdHJpbmcsIG5vZGUsIHR5cGUpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYXJvbUF4aW9tTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBub2RlID0gbGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgZnJhbWUgPSBuZXcgRnJhbWUoc3RyaW5nLCBub2RlLCBhc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9vZiA9IG5ldyBQcm9vZihzdHJpbmcsIG5vZGUsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtcm9tQXhpb21Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXJvbUF4aW9tTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShzdHJpbmcsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhVHlwZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGFUeXBlTmFtZSwgIC8vL1xuICAgICAgICBtZXRhVHlwZSA9IG5ldyBNZXRhVHlwZShzdHJpbmcsIG5vZGUsIG5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOb2RlLmdldFByb3BlcnR5TmFtZSgpLFxuICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBudWxsLFxuICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lLCAgLy8vXG4gICAgICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KHN0cmluZywgbm9kZSwgbmFtZSwgbm9taW5hbFR5cGVOYW1lKTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gW10sXG4gICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKHN0cmluZywgbm9kZSwgdHlwZSwgaWRlbnRpZmllciwgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBzdWJwcm9vZlN0cmluZywgIC8vL1xuICAgICAgICBzdWJwcm9vZiA9IG5ldyBTdWJQcm9vZihzdHJpbmcsIG5vZGUsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KHN0cmluZywgbm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc3RyaW5nLCBub2RlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShzdHJpbmcsIG5vZGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpbm9Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gY29uY2x1c2lub05vZGUsIC8vL1xuICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCksXG4gICAgY29uY2x1c2lubyA9IG5ldyBDb25jbHVzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lubztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVyaXZhdGlvbiA9IG5ldyBEZXJpdmF0aW9uKHN0cmluZywgbm9kZSwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KHN0cmluZywgbm9kZSwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1aXZhbGVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1aXZhbGVuY2VOb2RlLCAvLy9cbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nLCAvLy9cbiAgICAgICAgZXF1aXZhbGVuY2UgPSBuZXcgRXF1aXZhbGVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhdmFyaWFibGVOYW1lLCAgLy8vXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YkRlcml2YXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gbmV3IFN1YkRlcml2YXRpb24oc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihzdHJpbmcsIG5vZGUsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBPclN1YnByb29mID0gKHN0ZXAgfHwgc3VicHJvb2YpO1xuXG4gIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVkRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVmaXhlZCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcmVmaXhlZCgpO1xuXG4gIHJldHVybiBwcmVmaXhlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVkRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZWZpeGVkID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcmVmaXhlZCgpO1xuXG4gIHJldHVybiBwcmVmaXhlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihzdHJpbmcsIG5vZGUsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eVJlbGF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gbmV3IFByb3BlcnR5UmVsYXRpb24oc3RyaW5nLCBub2RlLCBwcm9wZXJ0eSwgdGVybSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGZyYW1lLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIG5vZGUsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNhdGlzZmllc0Fzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IG5ldyBTYXRpc2ZpZXNBc3NlcnRpb24oc3RyaW5nLCBub2RlLCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YXJpYWxiZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHZhcmlhbGJlKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpbXBsZVR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZWZpeGVkID0gcHJlZml4ZWRGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2ltcGxlVHlwZURlY2xhcmF0aW9uID0gbmV3IFNpbXBsZVR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByZWZpeGVkKTtcblxuICByZXR1cm4gc2ltcGxlVHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3Vic3RpdHV0aW9uLCBjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250ZXh0ID0gc3Vic3RpdHV0aW9uOyAvLy9cblxuICAgIHN1YnN0aXR1dGlvbiA9IG51bGw7XG4gIH1cblxuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZXNvbHZlZCA9IHRydWUsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHJlc29sdmVkLCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbmV3IENvbnN0cnVjdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVmaXhlZCA9IHByZWZpeGVkRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb21wbGV4VHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgcHJlZml4ZWQpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhbGJlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhdmFyaWFsYmUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlcml2YXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlcml2YXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICBpZGVudGlmaWVyID0gdmFyaWFibGVJZGVudGlmaWVyOyAgLy8vXG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uY2x1c2lub05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhc3N1bXB0aW9uID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0QXNzdW1wdGlvbk5vZGUoKTtcblxuICBpZiAoYXNzdW1wdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3ViRGVydmlhdGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKTtcblxuICBpZiAoc3ViRGVyaXZhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJEZXJ2aWF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJhaWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlOb2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwc09yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVQcmVmaXggPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpO1xuXG4gIGlmICh0eXBlUHJlZml4Tm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbWJpbmF0b3IgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihzdGF0ZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YVR5cGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTm9kZSgpO1xuXG4gIGlmIChtZXRhVHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eVJlbGF0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eVJlbGF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbnN0cnVjdG9yID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcih0ZXJtKTtcbiAgfVxuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWR1Y3Rpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldERlZHVjdGlvbk5vZGUoKTtcblxuICBpZiAoZGVkdWN0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21TdXBlclR5cGVOb2RlcyhzdXBlclR5cGVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gc3VwZXJUeXBlTm9kZXMubWFwKChzdXBlclR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBzdXBlclR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlID0gdHlwZTsgIC8vL1xuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZTtcbiAgICAgICAgfSksXG4gICAgICAgIHN1cGVyVHlwZXNMZW5ndGggPSBzdXBlclR5cGVzLmxlbmd0aDtcblxuICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMCkge1xuICAgIGNvbnN0IHN1cGVyVHlwZSA9IGJhc2VUeXBlOyAvLy9cblxuICAgIHN1cGVyVHlwZXMucHVzaChzdXBlclR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcygpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlTm9kZXMgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRTdXBlclR5cGVOb2RlcygpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TdXBlclR5cGVOb2RlcyhzdXBlclR5cGVOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5cblxuXG5leHBvcnQgZnVuY3Rpb24gX3R5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuIl0sIm5hbWVzIjpbIl90eXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW5vRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uamVjdHVyZXJvbUF4aW9tTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUiLCJsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGVtbWFyb21BeGlvbU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicHJlZml4ZWRGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzIiwic3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtcm9tQXhpb21Ob2RlIiwidHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJUeXBlIiwiZWxlbWVudHMiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJnZXRUeXBlUHJlZml4TmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsImxlbW1hTm9kZSIsIkxlbW1hIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mIiwibGFiZWxzIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJsZW1tYSIsImZyYW1lTm9kZSIsIkZyYW1lIiwiYXNzdW1wdGlvbnMiLCJmcmFtZSIsInByb29mTm9kZSIsIlByb29mIiwiZGVyaXZhdGlvbiIsImF4aW9tTm9kZSIsIkF4aW9tIiwiYXhpb20iLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwibWV0YVR5cGVOb2RlIiwiTWV0YVR5cGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsInByb3BlcnR5Tm9kZSIsIlByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwicHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3ViUHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdWJwcm9vZk5vZGUiLCJzdWJwcm9vZiIsInN0YXRlbWVudE5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJtZXRhdmFyaWFibGUiLCJjb25jbHVzaW5vTm9kZSIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW5vIiwiYXNzdW1wdGlvbk5vZGUiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiVGVybVN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJTYXRpc2ZpZXNBc3NlcnRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWxiZSIsInZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yRGVjbGFyYXRpb24iLCJTaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwidW5kZWZpbmVkIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiQ29tcGxleFR5cGVEZWNsYXJhdGlvbiIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWxiZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJnZXREZXJpdmF0aW9uTm9kZSIsImdldFRlcm1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJqdWRnZW1lbnROb2RlIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyYWlibGVOb2RlIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwibWFwIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiZ2V0UHJvcGVydHlOb2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiQ29tYmluYXRvciIsImdldE1ldGFUeXBlTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiQ29uc3RydWN0b3IiLCJnZXRQcm9vZk5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwidGVybU5vZGVzIiwibGFiZWxOb2RlcyIsImxhYmVsTm9kZSIsImxhYmVsIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJzdXBlclR5cGVOb2RlcyIsInN1cGVyVHlwZU5vZGUiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwicHVzaCIsImFzc3VtcHRpb25Ob2RlcyIsInN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImdldFRlcm1Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldFN1cGVyVHlwZU5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTAyQ2dCQTtlQUFBQTs7UUFqbUNBQztlQUFBQTs7UUFrYUFDO2VBQUFBOztRQStsQkFDO2VBQUFBOztRQXFDQUM7ZUFBQUE7O1FBcHRDQUM7ZUFBQUE7O1FBOFhBQztlQUFBQTs7UUFrb0JBQztlQUFBQTs7UUF0a0JBQztlQUFBQTs7UUF0UkFDO2VBQUFBOztRQXBJQUM7ZUFBQUE7O1FBZ1pBQztlQUFBQTs7UUF1bkJBQztlQUFBQTs7UUFydEJBQztlQUFBQTs7UUEraEJBQztlQUFBQTs7UUFxUEFDO2VBQUFB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
|
|
1635
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlUmVmZXJlbmNlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VicHJvb2ZOb2RlLFxuICAgICAgICAgcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24sXG4gICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMsXG4gICAgICAgICBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBeGlvbUxlbW1hVGhlb3JlbUFuZENvbmplY3R1cmUsXG4gICAgICAgICBtZXRhTGVtbWFNZXRhdGhlb3JlbVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbixcbiAgICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZTtcblxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICB0eXBlID0gYmFzZVR5cGU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICB0eXBlTmFtZSA9IHR5cGVOb2RlLmdldFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZVByZWZpeE5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlUHJlZml4TmFtZSgpLFxuICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHN0cmluZyA9IG5vbWluYWxUeXBlTmFtZSwgIC8vL1xuICAgICAgICAgIG5vZGUgPSB0eXBlTm9kZSwgIC8vL1xuICAgICAgICAgIG5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgIHByZWZpeE5hbWUgPSB0eXBlUHJlZml4TmFtZSwgIC8vL1xuICAgICAgICAgIHN1cGVyVHlwZXMgPSBudWxsLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBudWxsLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHByZWZpeE5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICB0ZXJtID0gbmV3IFRlcm0oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlKTtcblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGVwIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0ZXBOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXAgPSBuZXcgU3RlcChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24pO1xuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZUZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJ1bGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9vZiA9IHByb29mRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcnVsZVN0cmluZyA9IHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pLFxuICAgICAgICBub2RlID0gcnVsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gcnVsZVN0cmluZywgIC8vL1xuICAgICAgICBydWxlID0gbmV3IFJ1bGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uLCBwcm9vZik7XG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWwgPSBuZXcgTGFiZWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yRnJvbUVycm9yTm9kZShlcnJvck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcnJvciB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcnJvck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gbGVtbWFOb2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGxlbW1hTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZywgLy8vXG4gICAgICAgIGxlbW1hID0gbmV3IExlbW1hKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGxlbW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgIGZyYW1lID0gbmV3IEZyYW1lKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYXNzdW1wdGlvbnMpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBkZXJpdmF0aW9uID0gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvb2YgPSBuZXcgUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBkZXJpdmF0aW9uKTtcblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQXhpb20gfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gYXhpb21Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gbnVsbCxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IGF4aW9tTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZywgLy8vXG4gICAgICAgIGF4aW9tID0gbmV3IEF4aW9tKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIGF4aW9tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBoeXBvdGhlc2lzTm9kZXMgPSBzZWN0aW9uTm9kZS5nZXRIeXBvdGhlc2lzTm9kZXMoKSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IGh5cG90aGVzZXNGcm9tSHlwb3RoZXNpc05vZGVzKGh5cG90aGVzaXNOb2RlcywgY29udGV4dCksXG4gICAgICAgIGF4aW9tID0gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsZW1tYSA9IGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25qZWN0dXJlID0gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNlY3Rpb25TdHJpbmcgPSBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBeGlvbUxlbW1hVGhlb3JlbUFuZENvbmplY3R1cmUoaHlwb3RoZXNlcywgYXhpb20sIGxlbW1hLCB0aGVvcmVtLCBjb25qZWN0dXJlLCBjb250ZXh0KSxcbiAgICAgICAgbm9kZSA9IHNlY3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc2VjdGlvblN0cmluZywgLy8vXG4gICAgICAgIHNlY3Rpb24gPSBuZXcgU2VjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVtaXNlRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nLCAvLy9cbiAgICAgICAgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBsZWZ0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgIHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eU5vZGUuZ2V0UmlnaHRUZXJtTm9kZSgpLFxuICAgICAgICBsZWZ0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmlnaHRUZXJtID0gdGVybUZyb21UZXJtTm9kZShyaWdodFRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoc3RyaW5nLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUobWV0YVR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YVR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YVR5cGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhVHlwZU5hbWUsICAvLy9cbiAgICAgICAgbWV0YVR5cGUgPSBuZXcgTWV0YVR5cGUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBuYW1lKTtcblxuICByZXR1cm4gbWV0YVR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHkgfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Tm9kZS5nZXRQcm9wZXJ0eU5hbWUoKSxcbiAgICBub21pbmFsVHlwZU5hbWUgPSBudWxsLFxuICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWUsICAvLy9cbiAgICBwcm9wZXJ0eSA9IG5ldyBQcm9wZXJ0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9ucyA9IFtdLFxuICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIGlkZW50aWZpZXIsIHByb3BlcnR5UmVsYXRpb25zKTtcblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBzdWJwcm9vZlN0cmluZ0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3VicHJvb2ZTdHJpbmcsICAvLy9cbiAgICAgICAgc3VicHJvb2YgPSBuZXcgU3ViUHJvb2YoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pO1xuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZXF1YWxpdHkgPSBudWxsO1xuXG4gIGNvbnN0IGVxdWFsaXR5Tm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RXF1YWxpdHlOb2RlKCk7XG5cbiAgaWYgKGVxdWFsaXR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG5vZGUgPSBlcXVhbGl0eU5vZGUsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICBsZWZ0VGVybSA9IGxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHJpZ2h0VGVybSA9IHJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KTtcblxuICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG4gIH1cblxuICByZXR1cm4gZXF1YWxpdHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVkdWN0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZHVjdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IG5ldyBEZWR1Y3Rpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RhdGVtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gbmV3IFN0YXRlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHNpZ25hdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybXMpO1xuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHJlZmVyZW5jZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IG5ldyBSZWZlcmVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlcm9Db25qZWN0dXJlTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmcgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmcsIC8vL1xuICAgICAgICBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBKdWRnZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgIGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBmcmFtZSwgYXNzdW1wdGlvbik7XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZW1tYUZyb21NZXRhTGVtbWFOb2RlKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhTGVtbWEgfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGFMZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbCA9IGxhYmVsRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3Vic3RpdHV0aW9ucyA9IG51bGwsXG4gICAgICAgIG5vZGUgPSBtZXRhTGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbWV0YUxlbW1hTWV0YXRoZW9yZW1TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbWV0YUxlbW1hID0gbmV3IE1ldGFMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHN1YnN0aXR1dGlvbnMpO1xuXG4gIHJldHVybiBtZXRhTGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUGFyYW1ldGVyIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHBhcmFtZXRlck5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0UGFyYW1ldGVyTmFtZSgpLFxuICAgICAgICBuYW1lID0gcGFyYW1ldGVyTmFtZSwgIC8vL1xuICAgICAgICBwYXJhbWV0ZXIgPSBuZXcgUGFyYW1ldGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEh5cG90aHNpcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBoeXBvdGhlc2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcGFyYW1ldGVyID0gbmV3IEh5cG90aHNpcyhjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbmNsdXNpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbmNsdXNpb24gPSBuZXcgQ29uY2x1c2lvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbmNsdXNpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jbHVzaW5vRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uY2x1c2lvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25jbHVzaW5vTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25jbHVzaW5vID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW5vO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF0aGVvcmVtRnJvbU1ldGFMZW1tYU5vZGUobWV0YXRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXRlaG9yZW0gfSA9IGVsZW1lbnRzLFxuICAgICAgICBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSA9IG1ldGF0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsID0gbGFiZWxGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJzdGl0dXRpb25zID0gbnVsbCxcbiAgICAgICAgbm9kZSA9IG1ldGFMZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBtZXRhTGVtbWFNZXRhdGhlb3JlbVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBtZXRhdGhlb3JlbSA9IG5ldyBNZXRhdGVob3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHN1YnN0aXR1dGlvbnMpO1xuXG4gIHJldHVybiBtZXRhdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlU3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IG1ldGF2YXJpYWJsZVN0cmluZywgLy8vXG4gICAgICAgIHN0cmluZyA9IHJlZmVyZW5jZVN0cmluZywgIC8vL1xuICAgICAgICByZWZlcmVuY2VOb2RlID0gaW5zdGFudGlhdGVSZWZlcmVuY2Uoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5cHBvdGhlc2lzRnJvbUh5cG90aGVzaXNOb2RlKGh5cG90aGVzaXNOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSHlwb3RoZXNpcyB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBoeXBvdGhlc2lzTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2lzID0gbmV3IEh5cG90aGVzaXMoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBoeXBvdGhlc2lzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VwcG9zaXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9uID0gbmV3IFN1cHBvc2l0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVpdmFsZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVpdmFsZW5jZU5vZGUsIC8vL1xuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZShlcXVpdmFsZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSxcbiAgICAgICAgc3RyaW5nID0gZXF1aXZhbGVuY2VTdHJpbmcsIC8vL1xuICAgICAgICBlcXVpdmFsZW5jZSA9IG5ldyBFcXVpdmFsZW5jZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm1zKTtcblxuICByZXR1cm4gZXF1aXZhbGVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBuYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlTm9kZS5nZXROYW1lKCk7XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTWV0YXZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGF2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIG1ldGFUeXBlID0gbnVsbCxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbmV3IE1ldGF2YXJpYWJsZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIG5hbWUsIHR5cGUsIG1ldGFUeXBlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YkRlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3ViRGVyaXZhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBudWxsLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBuZXcgU3ViRGVyaXZhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0ZXBzT3JTdWJwcm9vZnMpO1xuXG4gIHJldHVybiBzdWJEZXJpdmF0aW9uO1xuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlQ2FsbCB9ID0gZWxlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlUmVmZXJlbmNlID0gcHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyhwcm9jZWR1cmVSZWZlcmVuY2UsIHBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBwcm9jZWR1cmVDYWxsU3RyaW5nLCAvLy9cbiAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IG5ldyBQcm9jZWR1cmVDYWxsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKTtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlZml4ZWQgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVmaXhlZCA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcHJvcGVydHksIHRlcm0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBmcmFtZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTYXRpc2ZpZXNBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc2lnbmF0dXJlLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvY2VkdXJlUmVmZXJlbmNlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5hbWUgPSBuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgUHJvY2VkdXJlUmVmZXJlbmNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVmaXhlZCA9IHByZWZpeGVkRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBwcmVmaXhlZCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVzb2x2ZWQgPSB0cnVlLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IG51bGwsXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZXNvbHZlZCwgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29uc3RydWN0b3IpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBsZXhUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlZml4ZWQgPSBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByZWZpeGVkKTtcblxuICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGFUeXBlID0gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICBtZXRhdmFyaWFibGUuc2V0TWV0YVR5cGUobWV0YVR5cGUpO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IHJ1bGVOb2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGF4aW9tID0gbnVsbDtcblxuICBjb25zdCBheGlvbU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRBeGlvbU5vZGUoKTtcblxuICBpZiAoYXhpb21Ob2RlICE9PSBudWxsKSB7XG4gICAgYXhpb20gPSBheGlvbUZyb21BeGlvbU5vZGUoYXhpb21Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBsZW1tYSA9IG51bGw7XG5cbiAgY29uc3QgbGVtbWFOb2RlID0gc2VjdGlvbk5vZGUuZ2V0TGVtbWFOb2RlKCk7XG5cbiAgaWYgKGxlbW1hTm9kZSAhPT0gbnVsbCkge1xuICAgIGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHN0ZXBOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbmNsdXNpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbmNsdXNpb25Ob2RlID0gcnVsZU5vZGUuZ2V0Q29uY2x1c2lvbk5vZGUoKTtcblxuICBpZiAoY29uY2x1c2lvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb25jbHVzaW9uID0gY29uY2x1c2lvbkZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gY29uY2x1c2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRoZW9yZW0gPSBudWxsO1xuXG4gIGNvbnN0IHRoZW9yZW1Ob2RlID0gc2VjdGlvbk5vZGUuZ2V0VGhlb3JlbU5vZGUoKTtcblxuICBpZiAodGhlb3JlbU5vZGUgIT09IG51bGwpIHtcbiAgICB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGhlb3JlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlcml2YXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlcml2YXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBsYWJlbE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZUZyb21TZWN0aW9uTm9kZShzZWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uamVjdHVyZSA9IG51bGw7XG5cbiAgY29uc3QgY29uamVjdHVyZU5vZGUgPSBzZWN0aW9uTm9kZS5nZXRDb25qZWN0dXJlTm9kZSgpO1xuXG4gIGlmIChjb25qZWN0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lvbkZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uY2x1c2lvbiA9IG51bGw7XG5cbiAgY29uc3QgY29uY2x1c2lvbk5vZGUgPSBwcmVtaXNlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpO1xuXG4gIGlmIChjb25jbHVzaW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50Rm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEp1ZGdlbWVudE5vZGUoKTtcblxuICBpZiAoanVkZ2VtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGp1ZGdlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZUFzc2VydGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCk7XG5cbiAgaWYgKGFzc3VtcHRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGh5cG90aGVzaXNOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gcHJlbWlzZU5vZGUuZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlQ2FsbE5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21Qcm9jZWR1cmVDYWxsTm9kZShwcm9jZWR1cmVDYWxsTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdXBwb3NpdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50OyAvLy9cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3Qgc2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTaW5ndWxhck1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAoc2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHNpbmd1bGFyTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ViRGVyaXZhdGlvbkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJEZXJ2aWF0aW9uID0gbnVsbDtcblxuICBjb25zdCBzdWJEZXJpdmF0aW9uTm9kZSA9IHN1YnByb29mTm9kZS5nZXRTdWJEZXJpdmF0aW9uTm9kZSgpO1xuXG4gIGlmIChzdWJEZXJpdmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YkRlcnZpYXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJEZXJ2aWF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFR5cGVBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyTmFtZUZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5vZGUuZ2V0UGFyYW1ldGVyTmFtZSgpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3VicHJvb2ZPclN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLmlzU3VicHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUpIHtcbiAgICBjb25zdCBzdWJwcm9vZk5vZGUgPSBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlOyAgLy8vXG5cbiAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVGcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZUNhbGwgPSBudWxsO1xuXG4gIGNvbnN0IHByb2NlZHVyZUNhbGxOb2RlID0gc3VwcG9zaXRpb25Ob2RlLmdldFByb2NlZHVyZUNhbGxOb2RlKCk7XG5cbiAgaWYgKHByb2NlZHVyZUNhbGxOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvY2VkdXJlQ2FsbCA9IHByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVmaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldERlZmluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgdGVybVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFRlcm1TdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKHRlcm1TdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybVN1YnN0aXR1dGlvbiA9IHRlcm1TdWJzdGl0dXRpb25Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZShtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZSwgY29udGV4dCkge1xuICBsZXQgbGFiZWwgPSBudWxsO1xuXG4gIGNvbnN0IGxhYmVsTm9kZSA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldExhYmVsTm9kZSgpO1xuXG4gIGlmIChsYWJlbE5vZGUgIT09IG51bGwpIHtcbiAgICBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICB0eXBlID0gYmFzZVR5cGU7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwc09yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlKG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWR1Y3Rpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBtZXRhTGVtbWFNZXRhdGhvcmVtTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZHVjdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUocHJvY2VkdXJlQ2FsbE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb2NlZHVyZVJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcHJvY2VkdXJlUmVmZXJlbmNlTm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLmdldFByb2NlZHVyZVJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlUHJlZml4ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKTtcblxuICBpZiAodHlwZVByZWZpeE5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21iaW5hdG9yID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3Ioc3RhdGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFUeXBlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5vZGUoKTtcblxuICBpZiAobWV0YVR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUobWV0YVR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvb2YgPSBudWxsO1xuXG4gIGNvbnN0IHByb29mTm9kZSA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0UHJvb2ZOb2RlKCk7XG5cbiAgaWYgKHByb29mTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb29mID0gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5UmVsYXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5UmVsYXRpb25Ob2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLmdldFByb3BlcnR5UmVsYXRpb25Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5UmVsYXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZShjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgY29uc3RydWN0b3IgPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgQ29uc3RydWN0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIGNvbnN0cnVjdG9yID0gbmV3IENvbnN0cnVjdG9yKHRlcm0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVkdWN0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZHVjdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybXMgPSB0ZXJtTm9kZXMubWFwKCh0ZXJtTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVscyA9IGxhYmVsTm9kZXMubWFwKChsYWJlbE5vZGUpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IGxhYmVsRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgY29uc3QgcHJlbWlzZSA9IHByZW1pc2VGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH0pO1xuXG4gIHJldHVybiBwcmVtaXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBzdXBlclR5cGVOb2Rlcy5tYXAoKHN1cGVyVHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlTm9kZSA9IHN1cGVyVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSB0eXBlOyAgLy8vXG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3Qgc3VwZXJUeXBlID0gYmFzZVR5cGU7IC8vL1xuXG4gICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlckZyb21QYXJhbWV0ZXJOb2RlKHBhcmFtZXRlck5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyhoeXBvdGhlc2lzTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgaHlwb3RoZXNlcyA9IGh5cG90aGVzaXNOb2Rlcy5tYXAoKGh5cG90aGVzZU5vZGUpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzID0gaHlwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2VOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBoeXBvdGhlc2lzO1xuICB9KTtcblxuICByZXR1cm4gaHlwb3RoZXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlbWlzZXNGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlbWlzZU5vZGVzID0gcnVsZU5vZGUuZ2V0UHJlbWlzZU5vZGVzKCksXG4gICAgICAgIHByZW1pc2VzID0gcHJlbWlzZXNGcm9tUHJlbWlzZU5vZGVzKHByZW1pc2VOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tQXNzdW1wdGlvbk5vZGVzKGFzc3VtcHRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlKGVxdWl2YWxlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBlcXVpdmFsZW5jZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IHN1YnByb29mTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlKHByb2NlZHVyZUNhbGxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gcHJvY2VkdXJlQ2FsbE5vZGUuZ2V0UGFyYW1ldGVyTm9kZXMoKSxcbiAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMocGFyYW1ldGVyTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwYXJhbWV0ZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVOb2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFN1cGVyVHlwZU5vZGVzKCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21NZXRhTGVtbWFNZXRhdGhlb3JlbU5vZGUobWV0YUxlbW1hTWV0YXRob3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IG1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXRTdXBwb3NpdGlvbk5vZGVzKCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBfdHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG4iXSwibmFtZXMiOlsiX3R5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZSIsImFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2RlcyIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tRnJvbVNlY3Rpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiY29uY2x1c2lub0Zyb21Db25jbHVzaW9uTm9kZSIsImNvbmNsdXNpb25Gcm9tQ29uY2x1c2lvbk5vZGUiLCJjb25jbHVzaW9uRnJvbVByZW1pc2VOb2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsImNvbmplY3R1cmVGcm9tU2VjdGlvbk5vZGUiLCJjb25qZWN0dXJlcm9Db25qZWN0dXJlTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVkdWN0aW9uRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlIiwiZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUiLCJlcXVhbGl0eUZyb21FcXVhbGl0eU5vZGUiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlIiwiZXF1aXZhbGVuY2VGcm9tRXF1aXZhbGVuY2VOb2RlIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJoeXBvdGhlc2VzRnJvbUh5cG90aGVzaXNOb2RlcyIsImh5cG90aGVzaXNGcm9tSHlwb3RoZXNpc05vZGUiLCJoeXBwb3RoZXNpc0Zyb21IeXBvdGhlc2lzTm9kZSIsImlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlIiwianVkZ2VtZW50Rm9tU3RhdGVtZW50Tm9kZSIsImp1ZGdlbWVudEZyb21KdWRnZW1lbnROb2RlIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwibGFiZWxGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlIiwibGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJsYWJlbHNGcm9tTGFiZWxOb2RlcyIsImxhYmVsc0Zyb21SdWxlTm9kZSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hRnJvbVNlY3Rpb25Ob2RlIiwibWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdGhlb3JlbUZyb21NZXRhTGVtbWFOb2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUFzc3VtcHRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUiLCJuYW1lRnJvbVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwYXJhbWV0ZXJGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlck5hbWVGcm9tUGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlcnNGcm9tUGFyYW1ldGVyTm9kZXMiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJlZml4ZWRGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJlbWlzZUZyb21QcmVtaXNlTm9kZSIsInByZW1pc2VzRnJvbVByZW1pc2VOb2RlcyIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mRnJvbU1ldGFMZW1tYU1ldGF0aGVvcmVtTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb29mRnJvbVJ1bGVOb2RlIiwicHJvcGVydGllc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnRpZXNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlOb2RlIiwicHJvcGVydHlGcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSIsInJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJyZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TdGVwTm9kZSIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwicnVsZUZyb21SdWxlTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUiLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwic3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUiLCJzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50RnJvbVN0ZXBOb2RlIiwic3RhdGVtZW50RnJvbVN1cHBvc2l0aW9uTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwic3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tTWV0YUxlbW1hTWV0YXRoZW9yZW1Ob2RlIiwic3VwcG9zaXRpb25zRnJvbVN1YnByb29mTm9kZSIsInN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzIiwidGVybUZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUiLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwidGVybUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidGVybXNGcm9tRXF1aXZhbGVuY2VOb2RlIiwidGVybXNGcm9tU2lnbmF0dXJlTm9kZSIsInRlcm1zRnJvbVRlcm1Ob2RlcyIsInRoZW9yZW1Gcm9tU2VjdGlvbk5vZGUiLCJ0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlIiwidHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tVHlwZU5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVGVybU5vZGUiLCJ2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwidHlwZU5vZGUiLCJjb250ZXh0IiwidHlwZSIsImJhc2VUeXBlIiwiVHlwZSIsImVsZW1lbnRzIiwidHlwZU5hbWUiLCJnZXRUeXBlTmFtZSIsInR5cGVQcmVmaXhOYW1lIiwiZ2V0VHlwZVByZWZpeE5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJzdHJpbmciLCJub2RlIiwibmFtZSIsInByZWZpeE5hbWUiLCJzdXBlclR5cGVzIiwicHJvcGVydGllcyIsInByb3Zpc2lvbmFsIiwidGVybU5vZGUiLCJUZXJtIiwibm9kZUFzU3RyaW5nIiwidGVybSIsInN0ZXBOb2RlIiwiU3RlcCIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsInN0ZXAiLCJydWxlTm9kZSIsIlJ1bGUiLCJwcm9vZiIsImxhYmVscyIsInByZW1pc2VzIiwiY29uY2x1c2lvbiIsInJ1bGVTdHJpbmciLCJydWxzU3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbiIsInJ1bGUiLCJsYWJlbE5vZGUiLCJMYWJlbCIsIm1ldGF2YXJpYWJsZSIsImxhYmVsIiwiZXJyb3JOb2RlIiwiRXJyb3IiLCJlcnJvciIsImxlbW1hTm9kZSIsIkxlbW1hIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmciLCJheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibGVtbWEiLCJmcmFtZU5vZGUiLCJGcmFtZSIsImFzc3VtcHRpb25zIiwiZnJhbWUiLCJwcm9vZk5vZGUiLCJQcm9vZiIsImRlcml2YXRpb24iLCJheGlvbU5vZGUiLCJBeGlvbSIsImF4aW9tIiwic2VjdGlvbk5vZGUiLCJoeXBvdGhlc2lzTm9kZXMiLCJnZXRIeXBvdGhlc2lzTm9kZXMiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInNlY3Rpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNBeGlvbUxlbW1hVGhlb3JlbUFuZENvbmplY3R1cmUiLCJzZWN0aW9uIiwiU2VjdGlvbiIsInByZW1pc2VOb2RlIiwiUHJlbWlzZSIsInByb2NlZHVyZUNhbGwiLCJwcmVtaXNlIiwidGhlb3JlbU5vZGUiLCJUaGVvcmVtIiwiZXF1YWxpdHlOb2RlIiwiRXF1YWxpdHkiLCJsZWZ0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiZ2V0UmlnaHRUZXJtTm9kZSIsImxlZnRUZXJtIiwicmlnaHRUZXJtIiwiZXF1YWxpdHkiLCJtZXRhVHlwZU5vZGUiLCJNZXRhVHlwZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlIiwicHJvcGVydHlOb2RlIiwiUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJnZXRQcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eSIsInZhcmlhYmxlTm9kZSIsIlZhcmlhYmxlIiwiaWRlbnRpZmllciIsInByb3BlcnR5UmVsYXRpb25zIiwidmFyaWFibGUiLCJzdWJwcm9vZk5vZGUiLCJTdWJQcm9vZiIsInN1YkRlcml2YXRpb24iLCJzdWJwcm9vZlN0cmluZyIsInN1YnByb29mU3RyaW5nRnJvbVN1YnByb29mTm9kZSIsInN1YnByb29mIiwic3RhdGVtZW50Tm9kZSIsImdldEVxdWFsaXR5Tm9kZSIsImxlZnRUZXJtRnJvbUVxdWFsaXR5Tm9kZSIsInJpZ2h0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJkZWR1Y3Rpb25Ob2RlIiwiRGVkdWN0aW9uIiwiU3RhdGVtZW50Iiwic2lnbmF0dXJlTm9kZSIsIlNpZ25hdHVyZSIsInRlcm1zIiwicmVmZXJlbmNlTm9kZSIsIlJlZmVyZW5jZSIsImNvbmplY3R1cmVOb2RlIiwiQ29uamVjdHVyZSIsImp1ZGdlbWVudE5vZGUiLCJKdWRnZW1lbnQiLCJhc3N1bXB0aW9uIiwianVkZ2VtZW50IiwibWV0YUxlbW1hTm9kZSIsIk1ldGFMZW1tYSIsIm1ldGFMZW1tYU1ldGF0aG9yZW1Ob2RlIiwic3Vic3RpdHV0aW9ucyIsIm1ldGFMZW1tYU1ldGF0aGVvcmVtU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwibWV0YUxlbW1hIiwicGFyYW1ldGVyTm9kZSIsIlBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJnZXRQYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVyIiwiaHlwb3RoZXNlTm9kZSIsIkh5cG90aHNpcyIsImNvbmNsdXNpb25Ob2RlIiwiQ29uY2x1c2lvbiIsImNvbmNsdXNpbm9Ob2RlIiwiY29uY2x1c2lubyIsImFzc3VtcHRpb25Ob2RlIiwiQXNzdW1wdGlvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJtZXRhdGhlb3JlbU5vZGUiLCJNZXRhdGVob3JlbSIsIm1ldGF0aGVvcmVtIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInJlZmVyZW5jZVN0cmluZyIsImluc3RhbnRpYXRlUmVmZXJlbmNlIiwiaHlwb3RoZXNpc05vZGUiLCJIeXBvdGhlc2lzIiwiaHlwb3RoZXNpcyIsInN1cHBvc2l0aW9uTm9kZSIsIlN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJnZXROYW1lIiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJQcm9jZWR1cmVDYWxsIiwicGFyYW1ldGVycyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMiLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiVGVybVN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJTYXRpc2ZpZXNBc3NlcnRpb24iLCJQcm9jZWR1cmVSZWZlcmVuY2UiLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwiU2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJzZXRNZXRhVHlwZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0UHJvb2ZOb2RlIiwiZ2V0QXhpb21Ob2RlIiwiZ2V0TGVtbWFOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJnZXRDb25jbHVzaW9uTm9kZSIsImdldFRoZW9yZW1Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0Q29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlIiwiZ2V0SnVkZ2VtZW50Tm9kZSIsImdldFRlcm1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJnZXRBc3N1bXB0aW9uTm9kZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwic2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlIiwiZ2V0U2luZ3VsYXJNZXRhdmFyaWFibGVOb2RlIiwic3ViRGVydmlhdGlvbiIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJnZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGVTdWJwcm9vZk5vZGUiLCJpc1N1YnByb29mTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldExhYmVsTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwibWFwIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldFByb3BlcnR5Tm9kZSIsImdldFNpZ25hdHVyZU5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiQ29tYmluYXRvciIsImdldE1ldGFUeXBlTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiQ29uc3RydWN0b3IiLCJ0ZXJtTm9kZXMiLCJsYWJlbE5vZGVzIiwicHJlbWlzZU5vZGVzIiwic3RhdGVtZW50Tm9kZXMiLCJzdXBlclR5cGVOb2RlcyIsInN1cGVyVHlwZU5vZGUiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwicHVzaCIsInBhcmFtZXRlck5vZGVzIiwiYXNzdW1wdGlvbk5vZGVzIiwic3VwcG9zaXRpb25Ob2RlcyIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldExhYmVsTm9kZXMiLCJnZXRQcmVtaXNlTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwiZ2V0UGFyYW1ldGVyTm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldFN1cGVyVHlwZU5vZGVzIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBbzhEZ0JBO2VBQUFBOztRQTlqREFDO2VBQUFBOztRQXVvQkFDO2VBQUFBOztRQTJ6QkFDO2VBQUFBOztRQW1EQUM7ZUFBQUE7O1FBenZEQUM7ZUFBQUE7O1FBMG5CQUM7ZUFBQUE7O1FBNUZBQztlQUFBQTs7UUEyOUJBQztlQUFBQTs7UUFwNkJBQztlQUFBQTs7UUEzVkFDO2VBQUFBOztRQVZBQztlQUFBQTs7UUEwaEJBQztlQUFBQTs7UUFwRkFDO2VBQUFBOztRQXdFQUM7ZUFBQUE7O1FBOWtCQUM7ZUFBQUE7O1FBMlpBQztlQUFBQTs7UUFpK0JBQztlQUFBQTs7UUFwa0NBQztlQUFBQTs7UUE4MUJBQztlQUFBQTs7UUF5UkFDO2VBQUFBOztRQXQ5Q0FDO2VBQUFBOztRQXd5Q0FDO2VBQUFBOztRQTNnQ0FDO2VBQUFB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
|