occam-verify-cli 1.0.427 → 1.0.428
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/element/equivalence.js +12 -16
- package/lib/element/equivalences.js +1 -1
- package/lib/node/equivalence.js +116 -0
- package/lib/nonTerminalNodeMap.js +4 -3
- package/lib/process/instantiate.js +8 -2
- package/lib/ruleNames.js +5 -1
- package/lib/utilities/element.js +19 -6
- package/lib/utilities/string.js +17 -36
- package/package.json +6 -6
- package/src/element/equivalence.js +21 -21
- package/src/element/equivalences.js +0 -1
- package/src/node/equivalence.js +16 -0
- package/src/nonTerminalNodeMap.js +4 -1
- package/src/process/instantiate.js +4 -0
- package/src/ruleNames.js +1 -0
- package/src/utilities/element.js +28 -9
- package/src/utilities/string.js +27 -65
package/lib/utilities/element.js
CHANGED
|
@@ -78,6 +78,9 @@ _export(exports, {
|
|
|
78
78
|
get equalityFromStatementNode () {
|
|
79
79
|
return equalityFromStatementNode;
|
|
80
80
|
},
|
|
81
|
+
get equivalenceFromEquivalenceNode () {
|
|
82
|
+
return equivalenceFromEquivalenceNode;
|
|
83
|
+
},
|
|
81
84
|
get frameFromContainedAssertionNode () {
|
|
82
85
|
return frameFromContainedAssertionNode;
|
|
83
86
|
},
|
|
@@ -318,6 +321,9 @@ _export(exports, {
|
|
|
318
321
|
get termSubstitutionFromTermSubstitutionNode () {
|
|
319
322
|
return termSubstitutionFromTermSubstitutionNode;
|
|
320
323
|
},
|
|
324
|
+
get termsFromEquivalenceNode () {
|
|
325
|
+
return termsFromEquivalenceNode;
|
|
326
|
+
},
|
|
321
327
|
get termsFromSignatureNode () {
|
|
322
328
|
return termsFromSignatureNode;
|
|
323
329
|
},
|
|
@@ -370,7 +376,6 @@ _export(exports, {
|
|
|
370
376
|
var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
371
377
|
var _type = require("../element/type");
|
|
372
378
|
var _string = require("../utilities/string");
|
|
373
|
-
var _node = /*#__PURE__*/ _interop_require_default(require("occam-parsers/lib/mixins/node"));
|
|
374
379
|
function _interop_require_default(obj) {
|
|
375
380
|
return obj && obj.__esModule ? obj : {
|
|
376
381
|
default: obj
|
|
@@ -479,6 +484,10 @@ function typePrefixFromTypePrefixNode(typePrefixNode, context) {
|
|
|
479
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);
|
|
480
485
|
return typePrefix;
|
|
481
486
|
}
|
|
487
|
+
function equivalenceFromEquivalenceNode(equivalenceNode, context) {
|
|
488
|
+
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
|
+
return equivalence;
|
|
490
|
+
}
|
|
482
491
|
function metavariableFromMetavariableNode(metavariableNode, context) {
|
|
483
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);
|
|
484
493
|
return metavariable;
|
|
@@ -1030,10 +1039,6 @@ function signatureFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectur
|
|
|
1030
1039
|
}
|
|
1031
1040
|
return signature;
|
|
1032
1041
|
}
|
|
1033
|
-
function suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
|
|
1034
|
-
var suppositionNodes = axiomLemmaTheoremConjectureNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
|
|
1035
|
-
return suppositions;
|
|
1036
|
-
}
|
|
1037
1042
|
function termsFromTermNodes(termNodes, context) {
|
|
1038
1043
|
var terms = termNodes.map(function(termNode) {
|
|
1039
1044
|
var term = termFromTermNode(termNode, context);
|
|
@@ -1095,6 +1100,10 @@ function assumptionsFromFrameNode(frameNode, context) {
|
|
|
1095
1100
|
var assumptionNodes = frameNode.getAssumptionNodes(), assumptions = assumptionsFromAssumptionNodes(assumptionNodes, context);
|
|
1096
1101
|
return assumptions;
|
|
1097
1102
|
}
|
|
1103
|
+
function termsFromEquivalenceNode(equivalenceNode, context) {
|
|
1104
|
+
var termNodes = equivalenceNode.getTermNodes(), terms = termsFromTermNodes(termNodes, context);
|
|
1105
|
+
return terms;
|
|
1106
|
+
}
|
|
1098
1107
|
function suppositionsFromSubproofNode(subproofNode, context) {
|
|
1099
1108
|
var suppositionNodes = subproofNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
|
|
1100
1109
|
return suppositions;
|
|
@@ -1115,6 +1124,10 @@ function labelsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNo
|
|
|
1115
1124
|
var labelNodes = axiomLemmaTheoremConjectureNode.getLabelNodes(), labels = labelsFromLabelNodes(labelNodes, context);
|
|
1116
1125
|
return labels;
|
|
1117
1126
|
}
|
|
1127
|
+
function suppositionsFromAxiomLemmaTheoremConjectureNode(axiomLemmaTheoremConjectureNode, context) {
|
|
1128
|
+
var suppositionNodes = axiomLemmaTheoremConjectureNode.getSuppositionNodes(), suppositions = suppositionsFromSuppositionNodes(suppositionNodes, context);
|
|
1129
|
+
return suppositions;
|
|
1130
|
+
}
|
|
1118
1131
|
function _typeFromMetavariableDeclarationNode(metavariableDeclarationNode, context) {
|
|
1119
1132
|
var type = null;
|
|
1120
1133
|
var typeNode = metavariableDeclarationNode.getTypeNode();
|
|
@@ -1125,4 +1138,4 @@ function _typeFromMetavariableDeclarationNode(metavariableDeclarationNode, conte
|
|
|
1125
1138
|
return type;
|
|
1126
1139
|
}
|
|
1127
1140
|
|
|
1128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVcIjtcbmltcG9ydCB7IHN1YnByb29mU3RyaW5nRnJvbVN1YnByb29mTm9kZSwgc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgbm9kZSBmcm9tIFwib2NjYW0tcGFyc2Vycy9saWIvbWl4aW5zL25vZGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGU7XG5cbiAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgdHlwZSA9IGJhc2VUeXBlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTm9kZS5nZXRUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGVQcmVmaXhOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZVByZWZpeE5hbWUoKSxcbiAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSBub21pbmFsVHlwZU5hbWUsICAvLy9cbiAgICAgICAgICBub2RlID0gdHlwZU5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gdHlwZU5hbWUsICAvLy9cbiAgICAgICAgICBwcmVmaXhOYW1lID0gdHlwZVByZWZpeE5hbWUsICAvLy9cbiAgICAgICAgICBzdXBlclR5cGVzID0gbnVsbCxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gbnVsbCxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoc3RyaW5nLCBub2RlLCBuYW1lLCBwcmVmaXhOYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgdGVybSA9IG5ldyBUZXJtKHN0cmluZywgbm9kZSwgdHlwZSk7XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3RlcCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGVwTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwID0gbmV3IFN0ZXAoY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uKTtcblxuICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbW1hcm9tQXhpb21Ob2RlKGxlbW1hTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IExlbW1hIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IGxlbW1hTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSBsZW1tYU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBsZW1tYSA9IG5ldyBMZW1tYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBsZW1tYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZSB9ID0gZWxlbWVudHMsXG4gICAgbm9kZSA9IGZyYW1lTm9kZSwgLy8vXG4gICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICBmcmFtZSA9IG5ldyBGcmFtZShzdHJpbmcsIG5vZGUsIGFzc3VtcHRpb25zKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvb2YgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvb2ZOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb29mID0gbmV3IFByb29mKHN0cmluZywgbm9kZSwgZGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEF4aW9tIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IGF4aW9tTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSBheGlvbU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBheGlvbSA9IG5ldyBBeGlvbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBheGlvbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRoZW9yZW1yb21BeGlvbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUaGVvcmVtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSA9IHRoZW9yZW1Ob2RlLCAgLy8vXG4gICAgICAgIHByb29mID0gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGh5cG90aGVzZXMgPSBbXSxcbiAgICAgICAgbm9kZSA9IHRoZW9yZW1Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgdGhlb3JlbSA9IG5ldyBUaGVvcmVtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgcmV0dXJuIHRoZW9yZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25qZWN0dXJlcm9tQXhpb21Ob2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uamVjdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSBjb25qZWN0dXJlTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSBjb25qZWN0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIGNvbmplY3R1cmUgPSBuZXcgQ29uamVjdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiBjb25qZWN0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEVxdWFsaXR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICByaWdodFRlcm1Ob2RlID0gZXF1YWxpdHlOb2RlLmdldFJpZ2h0VGVybU5vZGUoKSxcbiAgICAgICAgbGVmdFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJpZ2h0VGVybSA9IHRlcm1Gcm9tVGVybU5vZGUocmlnaHRUZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KHN0cmluZywgbGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YVR5cGVOb2RlKG1ldGFUeXBlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGFUeXBlIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGFUeXBlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YVR5cGVOYW1lID0gbWV0YVR5cGVOb2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YVR5cGVOYW1lLCAgLy8vXG4gICAgICAgIG1ldGFUeXBlID0gbmV3IE1ldGFUeXBlKHN0cmluZywgbm9kZSwgbmFtZSk7XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb3BlcnR5IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5vZGUuZ2V0UHJvcGVydHlOYW1lKCksXG4gICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IG51bGwsXG4gICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWUsICAvLy9cbiAgICAgICAgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoc3RyaW5nLCBub2RlLCBuYW1lLCBub21pbmFsVHlwZU5hbWUpO1xuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbnMgPSBbXSxcbiAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUoc3RyaW5nLCBub2RlLCB0eXBlLCBpZGVudGlmaWVyLCBwcm9wZXJ0eVJlbGF0aW9ucyk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YlByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mTm9kZSwgLy8vXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2ZTdHJpbmdGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0cmluZyA9IHN1YnByb29mU3RyaW5nLCAgLy8vXG4gICAgICAgIHN1YnByb29mID0gbmV3IFN1YlByb29mKHN0cmluZywgbm9kZSwgc3VwcG9zaXRpb25zLCBzdWJEZXJpdmF0aW9uKTtcblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGVxdWFsaXR5ID0gbnVsbDtcblxuICBjb25zdCBlcXVhbGl0eU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEVxdWFsaXR5Tm9kZSgpO1xuXG4gIGlmIChlcXVhbGl0eU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBub2RlID0gZXF1YWxpdHlOb2RlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgbGVmdFRlcm0gPSBsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICByaWdodFRlcm0gPSByaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCk7XG5cbiAgICBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuICB9XG5cbiAgcmV0dXJuIGVxdWFsaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlZHVjdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWR1Y3Rpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBuZXcgRGVkdWN0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gZGVkdWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0YXRlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IG5ldyBTdGF0ZW1lbnQoc3RyaW5nLCBub2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpZ25hdHVyZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzdHJpbmcsIG5vZGUsIHRlcm1zKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBuZXcgUmVmZXJlbmNlKHN0cmluZywgbm9kZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2x1c2lub0Zyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmNsdXNpb24gfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSBjb25jbHVzaW5vTm9kZSwgLy8vXG4gICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbmNsdXNpb25Ob2RlKGNvbmNsdXNpbm9Ob2RlLCBjb250ZXh0KSxcbiAgICBjb25jbHVzaW5vID0gbmV3IENvbmNsdXNpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnQpO1xuXG4gIHJldHVybiBjb25jbHVzaW5vO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gYXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYXNzdW1wdGlvbiA9IG5ldyBBc3N1bXB0aW9uKHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21EZXJpdmF0aW9uTm9kZShkZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IERlcml2YXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVyaXZhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZXJpdmF0aW9uID0gbmV3IERlcml2YXRpb24oc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gZGVyaXZhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4IH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZVByZWZpeE5vZGUodHlwZVByZWZpeE5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4ID0gbmV3IFR5cGVQcmVmaXgoc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gbWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICBuYW1lID0gbWV0YXZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgbWV0YVR5cGUgPSBudWxsLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBuZXcgTWV0YXZhcmlhYmxlKHN0cmluZywgbm9kZSwgbmFtZSwgdHlwZSwgbWV0YVR5cGUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3ViRGVyaXZhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJEZXJpdmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3ViRGVyaXZhdGlvbiA9IG5ldyBTdWJEZXJpdmF0aW9uKHN0cmluZywgbm9kZSwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIHN1YkRlcml2YXRpb247XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpb25Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlQXNzZXJ0aW9uID0gbmV3IFR5cGVBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCB0eXBlKTtcblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZiA9IHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdGVwT3JTdWJwcm9vZiA9IChzdGVwIHx8IHN1YnByb29mKTtcblxuICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJlZml4ZWQgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVmaXhlZCA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmlzUHJlZml4ZWQoKTtcblxuICByZXR1cm4gcHJlZml4ZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmVnYXRlZCA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uID0gbmV3IERlZmluZWRBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCk7XG5cbiAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlSZWxhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IG5ldyBQcm9wZXJ0eVJlbGF0aW9uKHN0cmluZywgbm9kZSwgcHJvcGVydHksIHRlcm0pO1xuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBuZXcgVGVybVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHRlcm0sIHZhcmlhYmxlKTtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBuZXcgRnJhbWVTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBmcmFtZSwgbWV0YXZhcmlhYmxlKTtcblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKHN0cmluZywgbm9kZSwgdGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBuZXcgU3VicHJvb2ZBc3NlcnRpb24oc3RyaW5nLCBub2RlLCBzdGF0ZW1lbnRzKTtcblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG5lZ2F0ZWQgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmlzTmVnYXRlZCgpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKHN0cmluZywgbm9kZSwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTYXRpc2ZpZXNBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBuZXcgU2F0aXNmaWVzQXNzZXJ0aW9uKHN0cmluZywgbm9kZSwgc2lnbmF0dXJlLCByZWZlcmVuY2UpO1xuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdmFyaWFsYmUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB2YXJpYWxiZSk7XG5cbiAgcmV0dXJuIHZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeERlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSwgIC8vL1xuICAgICAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb24gPSBuZXcgVHlwZVByZWZpeERlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZVByZWZpeCk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXhEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb21iaW5hdG9yRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb21iaW5hdG9yID0gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBuZXcgQ29tYmluYXRvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29tYmluYXRvcik7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaW1wbGVUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVmaXhlZCA9IHByZWZpeGVkRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IG5ldyBTaW1wbGVUeXBlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlLCBwcmVmaXhlZCk7XG5cbiAgcmV0dXJuIHNpbXBsZVR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIHN1YnN0aXR1dGlvbiwgY29udGV4dCkge1xuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29udGV4dCA9IHN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICBzdWJzdGl0dXRpb24gPSBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVzb2x2ZWQgPSB0cnVlLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZXNvbHZlZCwgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbik7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvbkZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2VTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBuZXcgUmVmZXJlbmNlU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgcmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgY29uc3RydWN0b3IpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbXBsZXhUeXBlRGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJlZml4ZWQgPSBwcmVmaXhlZEZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb24gPSBuZXcgQ29tcGxleFR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByZWZpeGVkKTtcblxuICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGF2YXJpYWxiZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbmV3IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgbWV0YXZhcmlhbGJlKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXBOb2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc3RlcE5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZhdGlvbkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZXJpdmF0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZXJpdmF0aW9uTm9kZSA9IHByb29mTm9kZS5nZXREZXJpdmF0aW9uTm9kZSgpO1xuXG4gIGlmIChkZXJpdmF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZXJpdmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGVwID0gbnVsbDtcblxuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZS5pc1N0ZXBOb2RlKCk7XG5cbiAgaWYgKHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlKSB7XG4gICAgY29uc3Qgc3RlcE5vZGUgPSBzdGVwT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN0ZXAgPSBzdGVwRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgaWRlbnRpZmllciA9IHZhcmlhYmxlSWRlbnRpZmllcjsgIC8vL1xuXG4gIHJldHVybiBpZGVudGlmaWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbURlZHVjdGlvbk5vZGUoZGVkdWN0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZGVkdWN0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbmNsdXNpbm9Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gYXNzdW1wdGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgYXNzdW1wdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgYXNzdW1wdGlvbk5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEFzc3VtcHRpb25Ob2RlKCk7XG5cbiAgaWYgKGFzc3VtcHRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgYXNzdW1wdGlvbiA9IGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFzc3VtcHRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YkRlcnZpYXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YkRlcml2YXRpb25Ob2RlID0gc3VicHJvb2ZOb2RlLmdldFN1YkRlcml2YXRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YkRlcml2YXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3ViRGVydmlhdGlvbiA9IHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YkRlcnZpYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQXNzZXJ0aW5Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VHlwZUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAodHlwZUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZU5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyYWlibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVOb2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0ZXBOb2RlLmdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdWJwcm9vZk9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGUuaXNTdWJwcm9vZk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSkge1xuICAgIGNvbnN0IHN1YnByb29mTm9kZSA9IHN1YnByb29mT3JTdWJwcm9vZk5vZGU7ICAvLy9cblxuICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2Y7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdGVybSA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldEZyYW1lTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpXG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHByb3BlcnR5Tm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlOb2RlKHByb3BlcnR5Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHRlcm1TdWJzdGl0dXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1TdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICBjb25zdCB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAodGVybVN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtU3Vic3RpdHV0aW9uID0gdGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSh0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lU3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWVTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0RnJhbWVTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgaWYgKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gZnJhbWVTdWJzdGl0dXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBkZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwc09yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eUFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRQcm9wZXJ0eUFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7MFxuICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNhdGlzZmllc0Fzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5ID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZS5nZXRQcm9wZXJ0eU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNhdGlzZmllc0Fzc2VydGlvbk5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcmVmZXJlbmNlID0gbnVsbDtcblxuICBjb25zdCByZWZlcmVuY2VOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mc0Zyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGVwT3JTdWJwcm9vZk5vZGVzID0gc3ViRGVyaXZhdGlvbk5vZGUuZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcygpLFxuICAgICAgICBzdGVwc09yU3VicHJvb2ZzID0gc3RlcE9yU3VicHJvb2ZOb2Rlcy5tYXAoKHN0ZXBPclN1YnByb29mTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0ZXBPclN1YnByb29mID0gc3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0ZXBPclN1YnByb29mO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RlcHNPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZVN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhGcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlUHJlZml4ID0gbnVsbDtcblxuICBjb25zdCB0eXBlUHJlZml4Tm9kZSA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZVByZWZpeE5vZGUoKTtcblxuICBpZiAodHlwZVByZWZpeE5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlUHJlZml4ID0gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb21iaW5hdG9yID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IENvbWJpbmF0b3IgfSA9IGVsZW1lbnRzLFxuICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICBjb21iaW5hdG9yID0gbmV3IENvbWJpbmF0b3Ioc3RhdGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5hdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YVR5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YVR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGFUeXBlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhVHlwZU5vZGUoKTtcblxuICBpZiAobWV0YVR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YVR5cGUgPSBtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUobWV0YVR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHlSZWxhdGlvbiA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlSZWxhdGlvbk5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUuZ2V0UHJvcGVydHlSZWxhdGlvbk5vZGUoKTtcblxuICBpZiAocHJvcGVydHlSZWxhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcHJvcGVydHlSZWxhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBjb25zdHJ1Y3RvciA9IG51bGw7XG5cbiAgY29uc3QgdGVybU5vZGUgPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBDb25zdHJ1Y3RvciB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IodGVybSk7XG4gIH1cblxuICByZXR1cm4gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9vZiA9IG51bGw7XG5cbiAgY29uc3QgcHJvb2ZOb2RlID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXRQcm9vZk5vZGUoKTtcblxuICBpZiAocHJvb2ZOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvb2YgPSBwcm9vZkZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhdmFyaWFibGUgPSBudWxsO1xuXG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBsZXQgZGVkdWN0aW9uID0gbnVsbDtcblxuICBjb25zdCBkZWR1Y3Rpb25Ob2RlID0gYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZS5nZXREZWR1Y3Rpb25Ob2RlKCk7XG5cbiAgaWYgKGRlZHVjdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWR1Y3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzaWduYXR1cmUgPSBudWxsO1xuXG4gIGNvbnN0IHNpZ25hdHVyZU5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldFNpZ25hdHVyZU5vZGUoKTtcblxuICBpZiAoc2lnbmF0dXJlTm9kZSAhPT0gbnVsbCkge1xuICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21TdXBwb3NpdGlvbk5vZGVzKHN1cHBvc2l0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3RhdGVtZW50Tm9kZXMoc3RhdGVtZW50Tm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZW50Tm9kZSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cGVyVHlwZXMgPSBzdXBlclR5cGVOb2Rlcy5tYXAoKHN1cGVyVHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlTm9kZSA9IHN1cGVyVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdXBlclR5cGUgPSB0eXBlOyAgLy8vXG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3Qgc3VwZXJUeXBlID0gYmFzZVR5cGU7IC8vL1xuXG4gICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG4gIH1cblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IGFzc3VtcHRpb24gPSBhc3N1bXB0aW9uRnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBhc3N1bXB0aW9uO1xuICB9KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uTm9kZXMubWFwKChzdXBwb3NpdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydGllc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMubWFwKChwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydHlGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVRlcm1Ob2Rlcyh0ZXJtTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgYXNzdW1wdGlvbk5vZGVzID0gZnJhbWVOb2RlLmdldEFzc3VtcHRpb25Ob2RlcygpLFxuICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUFzc3VtcHRpb25Ob2Rlcyhhc3N1bXB0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN1cHBvc2l0aW9uTm9kZXMgPSBzdWJwcm9vZk5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0UHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKCksXG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcyhwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVOb2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFN1cGVyVHlwZU5vZGVzKCksXG4gICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzKHN1cGVyVHlwZU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxOb2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tTGFiZWxOb2RlcyhsYWJlbE5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5cblxuXG5leHBvcnQgZnVuY3Rpb24gX3R5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuIl0sIm5hbWVzIjpbIl90eXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW5vRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uamVjdHVyZXJvbUF4aW9tTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUiLCJsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGVtbWFyb21BeGlvbU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicHJlZml4ZWRGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzIiwic3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtcm9tQXhpb21Ob2RlIiwidHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJUeXBlIiwiZWxlbWVudHMiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJnZXRUeXBlUHJlZml4TmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsImxlbW1hTm9kZSIsIkxlbW1hIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mIiwibGFiZWxzIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJsZW1tYSIsImZyYW1lTm9kZSIsIkZyYW1lIiwiYXNzdW1wdGlvbnMiLCJmcmFtZSIsInByb29mTm9kZSIsIlByb29mIiwiZGVyaXZhdGlvbiIsImF4aW9tTm9kZSIsIkF4aW9tIiwiYXhpb20iLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwibWV0YVR5cGVOb2RlIiwiTWV0YVR5cGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsInByb3BlcnR5Tm9kZSIsIlByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwicHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3ViUHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdWJwcm9vZk5vZGUiLCJzdWJwcm9vZiIsInN0YXRlbWVudE5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJtZXRhdmFyaWFibGUiLCJjb25jbHVzaW5vTm9kZSIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW5vIiwiYXNzdW1wdGlvbk5vZGUiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJtZXRhdmFyaWFibGVOb2RlIiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJzdWJEZXJpdmF0aW9uTm9kZSIsIlN1YkRlcml2YXRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwic3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcE9yU3VicHJvb2YiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJlZml4ZWQiLCJpc1ByZWZpeGVkIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJkZWZpbmVkQXNzZXJ0aW9uTm9kZSIsIkRlZmluZWRBc3NlcnRpb24iLCJuZWdhdGVkIiwiaXNOZWdhdGVkIiwiZGVmaW5lZEFzc2VydGlvbiIsInByb3BlcnR5UmVsYXRpb25Ob2RlIiwiUHJvcGVydHlSZWxhdGlvbiIsInByb3BlcnR5UmVsYXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uTm9kZSIsIlRlcm1TdWJzdGl0dXRpb24iLCJ0ZXJtU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHMiLCJzdWJwcm9vZkFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwiU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJWYXJpYWJsZURlY2xhcmF0aW9uIiwidmFyaWFsYmUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsIlR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb21iaW5hdG9yRGVjbGFyYXRpb24iLCJjb21iaW5hdG9yIiwiY29tYmluYXRvckRlY2xhcmF0aW9uIiwiU2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsInVuZGVmaW5lZCIsIlN0YXRlbWVudFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIlJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiQ29uc3RydWN0b3JEZWNsYXJhdGlvbiIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbiIsIkNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwiTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFsYmUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRSZWZlcmVuY2VOb2RlIiwiZ2V0RGVyaXZhdGlvbk5vZGUiLCJnZXRUZXJtTm9kZSIsImdldFR5cGVOb2RlIiwic3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUiLCJpc1N0ZXBOb2RlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwianVkZ2VtZW50Tm9kZSIsImdldEFzc3VtcHRpb25Ob2RlIiwic3ViRGVydmlhdGlvbiIsImdldFN1YkRlcml2YXRpb25Ob2RlIiwiZ2V0VHlwZUFzc2VydGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmFpYmxlTm9kZSIsImdldEZyYW1lTm9kZSIsImdldFNhdGlzZmllZEFzc2VydGlvbk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZPclN1YnByb29mTm9kZVN1YnByb29mTm9kZSIsImlzU3VicHJvb2ZOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJnZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVzIiwiZ2V0U3RlcE9yU3VicHJvb2ZOb2RlcyIsIm1hcCIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsImdldFByb3BlcnR5Tm9kZSIsImdldFNpZ25hdHVyZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRUeXBlUHJlZml4Tm9kZSIsIkNvbWJpbmF0b3IiLCJnZXRNZXRhVHlwZU5vZGUiLCJnZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSIsIkNvbnN0cnVjdG9yIiwiZ2V0UHJvb2ZOb2RlIiwiZ2V0RGVkdWN0aW9uTm9kZSIsInN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdXBwb3NpdGlvbk5vZGVzIiwidGVybU5vZGVzIiwibGFiZWxOb2RlcyIsImxhYmVsTm9kZSIsImxhYmVsIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJzdXBlclR5cGVOb2RlcyIsInN1cGVyVHlwZU5vZGUiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwicHVzaCIsImFzc3VtcHRpb25Ob2RlcyIsInN1cHBvc2l0aW9uTm9kZSIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25Gcm9tU3VwcG9zaXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzIiwiZ2V0QXNzdW1wdGlvbk5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJnZXRQcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJnZXRTdXBlclR5cGVOb2RlcyIsImdldExhYmVsTm9kZXMiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUF1MUNnQkE7ZUFBQUE7O1FBL2tDQUM7ZUFBQUE7O1FBdVpBQztlQUFBQTs7UUFzbUJBQztlQUFBQTs7UUFxQ0FDO2VBQUFBOztRQWh0Q0FDO2VBQUFBOztRQW1YQUM7ZUFBQUE7O1FBa29CQUM7ZUFBQUE7O1FBdGtCQUM7ZUFB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
|
|
1141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZSB9IGZyb20gXCIuLi9lbGVtZW50L3R5cGVcIjtcbmltcG9ydCB7IGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zLFxuICAgICAgICAgc3VicHJvb2ZTdHJpbmdGcm9tU3VicHJvb2ZOb2RlLFxuICAgICAgICAgc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlO1xuXG4gIGlmICh0eXBlTm9kZSA9PT0gbnVsbCkge1xuICAgIHR5cGUgPSBiYXNlVHlwZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0VHlwZU5hbWUoKSxcbiAgICAgICAgICB0eXBlUHJlZml4TmFtZSA9IHR5cGVOb2RlLmdldFR5cGVQcmVmaXhOYW1lKCksXG4gICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gbm9taW5hbFR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgbm9kZSA9IHR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgcHJlZml4TmFtZSA9IHR5cGVQcmVmaXhOYW1lLCAgLy8vXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IG51bGwsXG4gICAgICAgICAgcHJvcGVydGllcyA9IG51bGwsXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbm9kZSwgbmFtZSwgcHJlZml4TmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IG51bGwsXG4gICAgICAgIHRlcm0gPSBuZXcgVGVybShzdHJpbmcsIG5vZGUsIHR5cGUpO1xuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFN0ZXAgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RlcE5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RlcCA9IG5ldyBTdGVwKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbik7XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW1tYXJvbUF4aW9tTm9kZShsZW1tYU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBMZW1tYSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSBsZW1tYU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBub2RlID0gbGVtbWFOb2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgbGVtbWEgPSBuZXcgTGVtbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gbGVtbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgZnJhbWUgPSBuZXcgRnJhbWUoc3RyaW5nLCBub2RlLCBhc3N1bXB0aW9ucyk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb29mTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIGRlcml2YXRpb24gPSBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9vZiA9IG5ldyBQcm9vZihzdHJpbmcsIG5vZGUsIGRlcml2YXRpb24pO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBeGlvbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSBheGlvbU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBub2RlID0gYXhpb21Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgYXhpb20gPSBuZXcgQXhpb20oY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gYXhpb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGVvcmVtcm9tQXhpb21Ob2RlKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGhlb3JlbSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUgPSB0aGVvcmVtTm9kZSwgIC8vL1xuICAgICAgICBwcm9vZiA9IHByb29mRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBoeXBvdGhlc2VzID0gW10sXG4gICAgICAgIG5vZGUgPSB0aGVvcmVtTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgIHRoZW9yZW0gPSBuZXcgVGhlb3JlbShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpO1xuXG4gIHJldHVybiB0aGVvcmVtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uamVjdHVyZXJvbUF4aW9tTm9kZShjb25qZWN0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbmplY3R1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlID0gY29uamVjdHVyZU5vZGUsICAvLy9cbiAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUoYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgaHlwb3RoZXNlcyA9IFtdLFxuICAgICAgICBub2RlID0gY29uamVjdHVyZU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICBjb25qZWN0dXJlID0gbmV3IENvbmplY3R1cmUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICByZXR1cm4gY29uamVjdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBlcXVhbGl0eU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRMZWZ0VGVybU5vZGUoKSxcbiAgICAgICAgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5Tm9kZS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIGxlZnRUZXJtID0gdGVybUZyb21UZXJtTm9kZShsZWZ0VGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICByaWdodFRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICBlcXVhbGl0eSA9IG5ldyBFcXVhbGl0eShzdHJpbmcsIGxlZnRUZXJtLCByaWdodFRlcm0pO1xuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFUeXBlRnJvbU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBNZXRhVHlwZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhVHlwZU5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgbmFtZSA9IG1ldGFUeXBlTmFtZSwgIC8vL1xuICAgICAgICBtZXRhVHlwZSA9IG5ldyBNZXRhVHlwZShzdHJpbmcsIG5vZGUsIG5hbWUpO1xuXG4gIHJldHVybiBtZXRhVHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eU5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOb2RlLmdldFByb3BlcnR5TmFtZSgpLFxuICAgICAgICBub21pbmFsVHlwZU5hbWUgPSBudWxsLFxuICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lLCAgLy8vXG4gICAgICAgIHByb3BlcnR5ID0gbmV3IFByb3BlcnR5KHN0cmluZywgbm9kZSwgbmFtZSwgbm9taW5hbFR5cGVOYW1lKTtcblxuICByZXR1cm4gcHJvcGVydHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tVmFyaWFsYmVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb3BlcnR5UmVsYXRpb25zID0gW10sXG4gICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKHN0cmluZywgbm9kZSwgdHlwZSwgaWRlbnRpZmllciwgcHJvcGVydHlSZWxhdGlvbnMpO1xuXG4gIHJldHVybiB2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnByb29mRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJQcm9vZiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdWJwcm9vZk5vZGUsIC8vL1xuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YkRlcml2YXRpb24gPSBzdWJEZXJpdmF0aW9uRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mU3RyaW5nRnJvbVN1YnByb29mTm9kZShzdWJwcm9vZk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdHJpbmcgPSBzdWJwcm9vZlN0cmluZywgIC8vL1xuICAgICAgICBzdWJwcm9vZiA9IG5ldyBTdWJQcm9vZihzdHJpbmcsIG5vZGUsIHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbik7XG5cbiAgcmV0dXJuIHN1YnByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxpdHlGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgY29uc3QgZXF1YWxpdHlOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRFcXVhbGl0eU5vZGUoKTtcblxuICBpZiAoZXF1YWxpdHlOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgbm9kZSA9IGVxdWFsaXR5Tm9kZSwgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIGxlZnRUZXJtID0gbGVmdFRlcm1Gcm9tRXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcmlnaHRUZXJtID0gcmlnaHRUZXJtRnJvbUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUsIGNvbnRleHQpO1xuXG4gICAgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkoY29udGV4dCwgc3RyaW5nLCBub2RlLCBsZWZ0VGVybSwgcmlnaHRUZXJtKTtcbiAgfVxuXG4gIHJldHVybiBlcXVhbGl0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWR1Y3Rpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZGVkdWN0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVkdWN0aW9uID0gbmV3IERlZHVjdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBuZXcgU3RhdGVtZW50KHN0cmluZywgbm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTaWduYXR1cmUgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc3RyaW5nLCBub2RlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBSZWZlcmVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gcmVmZXJlbmNlTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gbmV3IFJlZmVyZW5jZShzdHJpbmcsIG5vZGUsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNsdXNpbm9Gcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lub05vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBlbGVtZW50cyxcbiAgICBub2RlID0gY29uY2x1c2lub05vZGUsIC8vL1xuICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCksXG4gICAgY29uY2x1c2lubyA9IG5ldyBDb25jbHVzaW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29uY2x1c2lubztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGFzc3VtcHRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGFzc3VtcHRpb24gPSBuZXcgQXNzdW1wdGlvbihzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcmVmZXJlbmNlKTtcblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlcml2YXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IG51bGwsXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwc09yU3VicHJvb2ZzRnJvbURlcml2YXRpb25Ob2RlKGRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZGVyaXZhdGlvbiA9IG5ldyBEZXJpdmF0aW9uKHN0cmluZywgbm9kZSwgc3RlcHNPclN1YnByb29mcyk7XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVHlwZVByZWZpeCB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0eXBlUHJlZml4Tm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlUHJlZml4Tm9kZSh0eXBlUHJlZml4Tm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgdHlwZVByZWZpeCA9IG5ldyBUeXBlUHJlZml4KHN0cmluZywgbm9kZSwgdGVybSwgdHlwZSk7XG5cbiAgcmV0dXJuIHR5cGVQcmVmaXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgRXF1aXZhbGVuY2UgfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gZXF1aXZhbGVuY2VOb2RlLCAvLy9cbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgZXF1aXZhbGVuY2VTdHJpbmcgPSBlcXVpdmFsZW5jZVN0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHN0cmluZyA9IGVxdWl2YWxlbmNlU3RyaW5nLCAvLy9cbiAgICAgICAgZXF1aXZhbGVuY2UgPSBuZXcgRXF1aXZhbGVuY2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0ZXJtcyk7XG5cbiAgcmV0dXJuIGVxdWl2YWxlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBtZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgIG5hbWUgPSBtZXRhdmFyaWFibGVOYW1lLCAgLy8vXG4gICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICBtZXRhVHlwZSA9IG51bGwsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IG5ldyBNZXRhdmFyaWFibGUoc3RyaW5nLCBub2RlLCBuYW1lLCB0eXBlLCBtZXRhVHlwZSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTdWJEZXJpdmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHN1YkRlcml2YXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBzT3JTdWJwcm9vZnNGcm9tU3ViRGVyaXZhdGlvbk5vZGUoc3ViRGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJEZXJpdmF0aW9uID0gbmV3IFN1YkRlcml2YXRpb24oc3RyaW5nLCBub2RlLCBzdGVwc09yU3VicHJvb2ZzKTtcblxuICByZXR1cm4gc3ViRGVyaXZhdGlvbjtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUFzc2VydGlvbkZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihzdHJpbmcsIG5vZGUsIHRlcm0sIHR5cGUpO1xuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcCA9IHN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN1YnByb29mID0gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCksXG4gICAgICAgIHN0ZXBPclN1YnByb29mID0gKHN0ZXAgfHwgc3VicHJvb2YpO1xuXG4gIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVkRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBwcmVmaXhlZCA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcmVmaXhlZCgpO1xuXG4gIHJldHVybiBwcmVmaXhlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVkRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByZWZpeGVkID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuaXNQcmVmaXhlZCgpO1xuXG4gIHJldHVybiBwcmVmaXhlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWRBc3NlcnRpb25Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBuZWdhdGVkID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihzdHJpbmcsIG5vZGUsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKTtcblxuICByZXR1cm4gZGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5UmVsYXRpb25Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eVJlbGF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHByb3BlcnR5UmVsYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gbmV3IFByb3BlcnR5UmVsYXRpb24oc3RyaW5nLCBub2RlLCBwcm9wZXJ0eSwgdGVybSk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSB0ZXJtU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdGVybSA9IHRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IG5ldyBUZXJtU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGVybSwgdmFyaWFibGUpO1xuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZVN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGZyYW1lLCBtZXRhdmFyaWFibGUpO1xuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBwcm9wZXJ0eUFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIG5vZGUsIHN0YXRlbWVudHMpO1xuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb250YWluZWRBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuaXNOZWdhdGVkKCksXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGZyYW1lID0gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oc3RyaW5nLCBub2RlLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcblxuICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNhdGlzZmllc0Fzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IG5ldyBTYXRpc2ZpZXNBc3NlcnRpb24oc3RyaW5nLCBub2RlLCBzaWduYXR1cmUsIHJlZmVyZW5jZSk7XG5cbiAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBWYXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICB2YXJpYWxiZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHZhcmlhbGJlKTtcblxuICByZXR1cm4gdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBUeXBlUHJlZml4RGVjbGFyYXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBub2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLCAgLy8vXG4gICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IG5ldyBUeXBlUHJlZml4RGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCB0eXBlUHJlZml4KTtcblxuICByZXR1cm4gdHlwZVByZWZpeERlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IENvbWJpbmF0b3JEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbWJpbmF0b3IgPSBjb21iaW5hdG9yRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbiA9IG5ldyBDb21iaW5hdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBjb21iaW5hdG9yKTtcblxuICByZXR1cm4gY29tYmluYXRvckRlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFNpbXBsZVR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIHR5cGUgPSB0eXBlRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByZWZpeGVkID0gcHJlZml4ZWRGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc2ltcGxlVHlwZURlY2xhcmF0aW9uID0gbmV3IFNpbXBsZVR5cGVEZWNsYXJhdGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHR5cGUsIHByZWZpeGVkKTtcblxuICByZXR1cm4gc2ltcGxlVHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uRnJvbVN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSwgc3Vic3RpdHV0aW9uLCBjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb250ZXh0ID0gc3Vic3RpdHV0aW9uOyAvLy9cblxuICAgIHN1YnN0aXR1dGlvbiA9IG51bGw7XG4gIH1cblxuICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZXNvbHZlZCA9IHRydWUsXG4gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudFN1YnN0aXR1dGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHJlc29sdmVkLCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKTtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSByZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZShyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvbiA9IG5ldyBSZWZlcmVuY2VTdWJzdGl0dXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCByZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uID0gbmV3IENvbnN0cnVjdG9yRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBjb25zdHJ1Y3Rvcik7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yRGVjbGFyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgdHlwZSA9IHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBwcmVmaXhlZCA9IHByZWZpeGVkRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb21wbGV4VHlwZURlY2xhcmF0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdHlwZSwgcHJlZml4ZWQpO1xuXG4gIHJldHVybiBjb21wbGV4VHlwZURlY2xhcmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgbWV0YXZhcmlhbGJlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBuZXcgTWV0YXZhcmlhYmxlRGVjbGFyYXRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBtZXRhdmFyaWFsYmUpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcE5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlRnJvbVN0ZXBOb2RlKHN0ZXBOb2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzdGVwTm9kZS5nZXRSZWZlcmVuY2VOb2RlKCk7XG5cbiAgaWYgKHJlZmVyZW5jZU5vZGUgIT09IG51bGwpIHtcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZShyZWZlcmVuY2VOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmF0aW9uRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlcml2YXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlcml2YXRpb25Ob2RlID0gcHJvb2ZOb2RlLmdldERlcml2YXRpb25Ob2RlKCk7XG5cbiAgaWYgKGRlcml2YXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZGVyaXZhdGlvbiA9IGRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFRlcm1Ob2RlKCk7XG5cbiAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRlcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0eXBlID0gbnVsbDtcblxuICBjb25zdCB0eXBlTm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLmdldFR5cGVOb2RlKCk7XG5cbiAgaWYgKHR5cGVOb2RlICE9PSBudWxsKSB7XG4gICAgdHlwZSA9IHR5cGVGcm9tVHlwZU5vZGUodHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwRnJvbVN0ZXBPclN1YnByb29mTm9kZShzdGVwT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0ZXAgPSBudWxsO1xuXG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZVN0ZXBOb2RlID0gc3RlcE9yU3VicHJvb2ZOb2RlLmlzU3RlcE5vZGUoKTtcblxuICBpZiAoc3RlcE9yU3VicHJvb2ZOb2RlU3RlcE5vZGUpIHtcbiAgICBjb25zdCBzdGVwTm9kZSA9IHN0ZXBPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3RlcCA9IHN0ZXBGcm9tU3RlcE5vZGUoc3RlcE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyRnJvbVZhcmlhbGJlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICBpZGVudGlmaWVyID0gdmFyaWFibGVJZGVudGlmaWVyOyAgLy8vXG5cbiAgcmV0dXJuIGlkZW50aWZpZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tRGVkdWN0aW9uTm9kZShkZWR1Y3Rpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBkZWR1Y3Rpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db25jbHVzaW9uTm9kZShjb25jbHVzaW5vTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gY29uY2x1c2lub05vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50RnJvbUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBhc3N1bXB0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tQXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IGFzc3VtcHRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25Gcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBhc3N1bXB0aW9uID0gbnVsbDtcblxuICBjb25zdCBhc3N1bXB0aW9uTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0QXNzdW1wdGlvbk5vZGUoKTtcblxuICBpZiAoYXNzdW1wdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gYXNzdW1wdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tUHJvcGVydHlSZWxhdGlvbk5vZGUocHJvcGVydHlSZWxhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUodGVybVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm0gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3ViRGVydmlhdGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3ViRGVyaXZhdGlvbk5vZGUgPSBzdWJwcm9vZk5vZGUuZ2V0U3ViRGVyaXZhdGlvbk5vZGUoKTtcblxuICBpZiAoc3ViRGVyaXZhdGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzdWJEZXJ2aWF0aW9uID0gc3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZShzdWJEZXJpdmF0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3ViRGVydmlhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVBc3NlcnRpbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUeXBlQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJhaWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZyYW1lID0gbnVsbDtcblxuICBjb25zdCBmcmFtZU5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmIChmcmFtZU5vZGUgIT09IG51bGwpIHtcbiAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRUZXJtTm9kZSgpO1xuXG4gIGlmICh0ZXJtTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlKGZyYW1lU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRGcmFtZU5vZGUoKTtcblxuICBpZiAoZnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGVwTm9kZShzdGVwTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RlcE5vZGUuZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN1YnByb29mT3JTdWJwcm9vZk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mID0gbnVsbDtcblxuICBjb25zdCBzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZS5pc1N1YnByb29mTm9kZSgpO1xuXG4gIGlmIChzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZOb2RlID0gc3VicHJvb2ZPclN1YnByb29mTm9kZTsgIC8vL1xuXG4gICAgc3VicHJvb2YgPSBzdWJwcm9vZkZyb21TdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgZnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0RnJhbWVOb2RlKCk7XG5cbiAgaWYgKGZyYW1lTm9kZSAhPT0gbnVsbCkge1xuICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eSA9IG51bGw7XG5cbiAgY29uc3QgcHJvcGVydHlOb2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUuZ2V0VGVybU5vZGUoKTtcblxuICBpZiAocHJvcGVydHlOb2RlICE9PSBudWxsKSB7XG4gICAgcHJvcGVydHkgPSBwcm9wZXJ0eUZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdGVybVN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICB2YXJpYWJsZSA9IHZhcmlhYmxlRnJvbVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXREZWZpbmVkQXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZUZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZS5nZXRUeXBlTm9kZSgpO1xuXG4gIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGUgPSB0eXBlRnJvbVR5cGVOb2RlKHR5cGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHRlcm1TdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gIGNvbnN0IHRlcm1TdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSgpO1xuXG4gIGlmICh0ZXJtU3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHRlcm1TdWJzdGl0dXRpb24gPSB0ZXJtU3Vic3RpdHV0aW9uRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlKHRlcm1TdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtU3Vic3RpdHV0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmcmFtZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgY29uc3QgZnJhbWVTdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRGcmFtZVN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICBpZiAoZnJhbWVTdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgZnJhbWVTdWJzdGl0dXRpb24gPSBmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUoZnJhbWVTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZVN1YnN0aXR1dGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUoZGVyaXZhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcE9yU3VicHJvb2ZOb2RlcyA9IGRlcml2YXRpb25Ob2RlLmdldFN0ZXBPclN1YnByb29mTm9kZXMoKSxcbiAgICAgICAgc3RlcHNPclN1YnByb29mcyA9IHN0ZXBPclN1YnByb29mTm9kZXMubWFwKChzdGVwT3JTdWJwcm9vZk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZiA9IHN0ZXBzT3JTdWJwcm9vZkZyb21TdGVwT3JTdWJwcm9vZk5vZGUoc3RlcE9yU3VicHJvb2ZOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdGVwT3JTdWJwcm9vZjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0ZXBzT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbiA9IG51bGw7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGUgPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVOb2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpIHswXG4gIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUoKTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudCA9IG51bGw7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCkge1xuICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uID0gbnVsbDtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTYXRpc2ZpZWRBc3NlcnRpb25Ob2RlKCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgcHJvcGVydHkgPSBudWxsO1xuXG4gIGNvbnN0IHByb3BlcnR5Tm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5Tm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eU5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZShwcm9wZXJ0eU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb3BlcnR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlRnJvbVNhdGlzZmllc0Fzc2VydGlvbk5vZGUoc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc2lnbmF0dXJlID0gbnVsbDtcblxuICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2F0aXNmaWVzQXNzZXJ0aW9uTm9kZS5nZXRTaWduYXR1cmVOb2RlKCk7XG5cbiAgaWYgKHNpZ25hdHVyZU5vZGUgIT09IG51bGwpIHtcbiAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZShzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCByZWZlcmVuY2UgPSBudWxsO1xuXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBzYXRpc2ZpZXNBc3NlcnRpb25Ob2RlLmdldFJlZmVyZW5jZU5vZGUoKTtcblxuICBpZiAocmVmZXJlbmNlTm9kZSAhPT0gbnVsbCkge1xuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZUZyb21SZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgdmFyaWFibGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlKHN1YkRlcml2YXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBPclN1YnByb29mTm9kZXMgPSBzdWJEZXJpdmF0aW9uTm9kZS5nZXRTdGVwT3JTdWJwcm9vZk5vZGVzKCksXG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnMgPSBzdGVwT3JTdWJwcm9vZk5vZGVzLm1hcCgoc3RlcE9yU3VicHJvb2ZOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBzdGVwc09yU3VicHJvb2ZGcm9tU3RlcE9yU3VicHJvb2ZOb2RlKHN0ZXBPclN1YnByb29mTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gc3RlcE9yU3VicHJvb2Y7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBzdGVwc09yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbUZyYW1lU3Vic3RpdHV0aW9uTm9kZShmcmFtZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZShzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZUZyb21SZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlKHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHJlZmVyZW5jZSA9IG51bGw7XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVmZXJlbmNlTm9kZSgpO1xuXG4gIGlmIChyZWZlcmVuY2VOb2RlICE9PSBudWxsKSB7XG4gICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUocmVmZXJlbmNlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZVByZWZpeEZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHR5cGVQcmVmaXggPSBudWxsO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhOb2RlID0gdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZS5nZXRUeXBlUHJlZml4Tm9kZSgpO1xuXG4gIGlmICh0eXBlUHJlZml4Tm9kZSAhPT0gbnVsbCkge1xuICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlKHR5cGVQcmVmaXhOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0eXBlUHJlZml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXRvckZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbWJpbmF0b3IgPSBudWxsO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgQ29tYmluYXRvciB9ID0gZWxlbWVudHMsXG4gICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIGNvbWJpbmF0b3IgPSBuZXcgQ29tYmluYXRvcihzdGF0ZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBtZXRhVHlwZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YVR5cGVOb2RlID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLmdldE1ldGFUeXBlTm9kZSgpO1xuXG4gIGlmIChtZXRhVHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhVHlwZSA9IG1ldGFUeXBlRnJvbU1ldGFUeXBlTm9kZShtZXRhVHlwZU5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGxldCBwcm9wZXJ0eVJlbGF0aW9uID0gbnVsbDtcblxuICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uTm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZS5nZXRQcm9wZXJ0eVJlbGF0aW9uTm9kZSgpO1xuXG4gIGlmIChwcm9wZXJ0eVJlbGF0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlKHByb3BlcnR5UmVsYXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBwcm9wZXJ0eVJlbGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0b3JGcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGNvbnN0cnVjdG9yID0gbnVsbDtcblxuICBjb25zdCB0ZXJtTm9kZSA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICBpZiAodGVybU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IENvbnN0cnVjdG9yIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcih0ZXJtKTtcbiAgfVxuXG4gIHJldHVybiBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlKHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbk5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUocmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlID0gbnVsbDtcblxuICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9vZkZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHByb29mID0gbnVsbDtcblxuICBjb25zdCBwcm9vZk5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldFByb29mTm9kZSgpO1xuXG4gIGlmIChwcm9vZk5vZGUgIT09IG51bGwpIHtcbiAgICBwcm9vZiA9IHByb29mRnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZShtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG1ldGF2YXJpYWJsZSA9IG51bGw7XG5cbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBkZWR1Y3Rpb24gPSBudWxsO1xuXG4gIGNvbnN0IGRlZHVjdGlvbk5vZGUgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldERlZHVjdGlvbk5vZGUoKTtcblxuICBpZiAoZGVkdWN0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlKGRlZHVjdGlvbk5vZGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZHVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25hdHVyZUZyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IHNpZ25hdHVyZSA9IG51bGw7XG5cbiAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0U2lnbmF0dXJlTm9kZSgpO1xuXG4gIGlmIChzaWduYXR1cmVOb2RlICE9PSBudWxsKSB7XG4gICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybXNGcm9tVGVybU5vZGVzKHRlcm1Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zyb21MYWJlbE5vZGVzKGxhYmVsTm9kZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgbGFiZWxzID0gbGFiZWxOb2Rlcy5tYXAoKGxhYmVsTm9kZSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN0YXRlbWVudE5vZGVzKHN0YXRlbWVudE5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWVudE5vZGUpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJUeXBlc0Zyb21TdXBlclR5cGVOb2RlcyhzdXBlclR5cGVOb2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBlclR5cGVzID0gc3VwZXJUeXBlTm9kZXMubWFwKChzdXBlclR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBzdXBlclR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICB0eXBlID0gdHlwZUZyb21UeXBlTm9kZSh0eXBlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlID0gdHlwZTsgIC8vL1xuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZTtcbiAgICAgICAgfSksXG4gICAgICAgIHN1cGVyVHlwZXNMZW5ndGggPSBzdXBlclR5cGVzLmxlbmd0aDtcblxuICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMCkge1xuICAgIGNvbnN0IHN1cGVyVHlwZSA9IGJhc2VUeXBlOyAvLy9cblxuICAgIHN1cGVyVHlwZXMucHVzaChzdXBlclR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBhc3N1bXB0aW9uID0gYXNzdW1wdGlvbkZyb21Bc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSBzdXBwb3NpdGlvbkZyb21TdXBwb3NpdGlvbk5vZGUoc3VwcG9zaXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcywgY29udGV4dCkge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gcHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLm1hcCgocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfSk7XG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21TaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGVybU5vZGVzID0gc2lnbmF0dXJlTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMoYXNzdW1wdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gYXNzdW1wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc0Zyb21FcXVpdmFsZW5jZU5vZGUoZXF1aXZhbGVuY2VOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IGVxdWl2YWxlbmNlTm9kZS5nZXRUZXJtTm9kZXMoKSxcbiAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21UZXJtTm9kZXModGVybU5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gdGVybXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdXBwb3NpdGlvbk5vZGVzID0gc3VicHJvb2ZOb2RlLmdldFN1cHBvc2l0aW9uTm9kZXMoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMoc3VwcG9zaXRpb25Ob2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlKHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlcyA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZS5nZXRTdGF0ZW1lbnROb2RlcygpLFxuICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyhzdGF0ZW1lbnROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0aWVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLmdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcygpLFxuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMocHJvcGVydHlEZWNsYXJhdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gcHJvcGVydGllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwZXJUeXBlTm9kZXMgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZS5nZXRTdXBlclR5cGVOb2RlcygpLFxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21TdXBlclR5cGVOb2RlcyhzdXBlclR5cGVOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZShheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxhYmVsTm9kZXMgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlLmdldExhYmVsTm9kZXMoKSxcbiAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUxhYmVsTm9kZXMobGFiZWxOb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxhYmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21BeGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVOb2RlKGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25Ob2RlcyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUuZ2V0U3VwcG9zaXRpb25Ob2RlcygpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tU3VwcG9zaXRpb25Ob2RlcyhzdXBwb3NpdGlvbk5vZGVzLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5cblxuXG5leHBvcnQgZnVuY3Rpb24gX3R5cGVGcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgdHlwZSA9IG51bGw7XG5cbiAgY29uc3QgdHlwZU5vZGUgPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUuZ2V0VHlwZU5vZGUoKTtcblxuICBpZiAodHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuIl0sIm5hbWVzIjpbIl90eXBlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsImFzc3VtcHRpb25Gcm9tQXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uRnJvbUp1ZGdlbWVudE5vZGUiLCJhc3N1bXB0aW9uc0Zyb21Bc3N1bXB0aW9uTm9kZXMiLCJhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUiLCJheGlvbUZyb21BeGlvbU5vZGUiLCJjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JGcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb25jbHVzaW5vRnJvbUNvbmNsdXNpb25Ob2RlIiwiY29uamVjdHVyZXJvbUF4aW9tTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJjb25zdHJ1Y3RvckZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJkZWR1Y3Rpb25Gcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImRlZHVjdGlvbkZyb21EZWR1Y3Rpb25Ob2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21EZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImRlcml2YXRpb25Gcm9tRGVyaXZhdGlvbk5vZGUiLCJkZXJpdmF0aW9uRnJvbVByb29mTm9kZSIsImVxdWFsaXR5RnJvbUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudE5vZGUiLCJlcXVpdmFsZW5jZUZyb21FcXVpdmFsZW5jZU5vZGUiLCJmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21GcmFtZU5vZGUiLCJmcmFtZUZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21GcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJmcmFtZVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiaWRlbnRpZmllckZyb21WYXJpYWxiZU5vZGUiLCJsYWJlbHNGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsImxhYmVsc0Zyb21MYWJlbE5vZGVzIiwibGVtbWFyb21BeGlvbU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhVHlwZU5vZGUiLCJtZXRhVHlwZUZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJtZXRhdmFyaWFibGVGcm9tRnJhbWVTdWJzdGl0dXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRnJvbU1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbVJlZmVyZW5jZU5vZGUiLCJtZXRhdmFyaWFibGVGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwicHJlZml4ZWRGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZEZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwicHJvb2ZGcm9tQXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mRnJvbVByb29mTm9kZSIsInByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJwcm9wZXJ0eUZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5Tm9kZSIsInByb3BlcnR5RnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbkZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJwcm9wZXJ0eVJlbGF0aW9uRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbUFzc3VtcHRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VGcm9tUmVmZXJlbmNlU3Vic3RpdHV0aW9uTm9kZSIsInJlZmVyZW5jZUZyb21TYXRpc2ZpZXNBc3NlcnRpb25Ob2RlIiwicmVmZXJlbmNlRnJvbVN0ZXBOb2RlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uRnJvbVJlZmVyZW5jZVN1YnN0aXR1dGlvbk5vZGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0ZXBOb2RlIiwic2lnbmF0dXJlRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzaWduYXR1cmVGcm9tU2F0aXNmaWVzQXNzZXJ0aW9uTm9kZSIsInNpZ25hdHVyZUZyb21TaWduYXR1cmVOb2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQXNzdW1wdGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29uY2x1c2lvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21EZWR1Y3Rpb25Ob2RlIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudEZyb21TdGVwTm9kZSIsInN0YXRlbWVudFN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3RhdGVtZW50c0Zyb21TdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwic3RlcEZyb21TdGVwTm9kZSIsInN0ZXBGcm9tU3RlcE9yU3VicHJvb2ZOb2RlIiwic3RlcHNPclN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN0ZXBzT3JTdWJwcm9vZnNGcm9tRGVyaXZhdGlvbk5vZGUiLCJzdGVwc09yU3VicHJvb2ZzRnJvbVN1YkRlcml2YXRpb25Ob2RlIiwic3ViRGVyaXZhdGlvbkZyb21TdWJEZXJpdmF0aW9uTm9kZSIsInN1YkRlcml2YXRpb25Gcm9tU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mRnJvbVN0ZXBPclN1YnByb29mTm9kZSIsInN1YnByb29mRnJvbVN1YnByb29mTm9kZSIsInN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVN1cGVyVHlwZU5vZGVzIiwic3VwcG9zaXRpb25zRnJvbUF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tU3VicHJvb2ZOb2RlIiwic3VwcG9zaXRpb25zRnJvbVN1cHBvc2l0aW9uTm9kZXMiLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbURlZmluZWRBc3NlcnRpb25Ob2RlIiwidGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJ0ZXJtRnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwidGVybUZyb21UZXJtTm9kZSIsInRlcm1Gcm9tVGVybVN1YnN0aXR1dGlvbk5vZGUiLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVN1YnN0aXR1dGlvbkZyb21UZXJtU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1zRnJvbUVxdWl2YWxlbmNlTm9kZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtc0Zyb21UZXJtTm9kZXMiLCJ0aGVvcmVtcm9tQXhpb21Ob2RlIiwidHlwZUFzc2VydGluRnJvbVN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVGcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbVR5cGVOb2RlIiwidHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RnJvbVR5cGVQcmVmaXhOb2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRnJvbVRlcm1TdWJzdGl0dXRpb25Ob2RlIiwidmFyaWFibGVGcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJ0eXBlTm9kZSIsImNvbnRleHQiLCJ0eXBlIiwiYmFzZVR5cGUiLCJUeXBlIiwiZWxlbWVudHMiLCJ0eXBlTmFtZSIsImdldFR5cGVOYW1lIiwidHlwZVByZWZpeE5hbWUiLCJnZXRUeXBlUHJlZml4TmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInN0cmluZyIsIm5vZGUiLCJuYW1lIiwicHJlZml4TmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJ0ZXJtTm9kZSIsIlRlcm0iLCJub2RlQXNTdHJpbmciLCJ0ZXJtIiwic3RlcE5vZGUiLCJTdGVwIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RlcCIsImxlbW1hTm9kZSIsIkxlbW1hIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlTm9kZSIsInByb29mIiwibGFiZWxzIiwiZGVkdWN0aW9uIiwic3VwcG9zaXRpb25zIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsInN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJsZW1tYSIsImZyYW1lTm9kZSIsIkZyYW1lIiwiYXNzdW1wdGlvbnMiLCJmcmFtZSIsInByb29mTm9kZSIsIlByb29mIiwiZGVyaXZhdGlvbiIsImF4aW9tTm9kZSIsIkF4aW9tIiwiYXhpb20iLCJ0aGVvcmVtTm9kZSIsIlRoZW9yZW0iLCJ0aGVvcmVtIiwiY29uamVjdHVyZU5vZGUiLCJDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImVxdWFsaXR5Tm9kZSIsIkVxdWFsaXR5IiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsImVxdWFsaXR5IiwibWV0YVR5cGVOb2RlIiwiTWV0YVR5cGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsInByb3BlcnR5Tm9kZSIsIlByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZ2V0UHJvcGVydHlOYW1lIiwicHJvcGVydHkiLCJ2YXJpYWJsZU5vZGUiLCJWYXJpYWJsZSIsImlkZW50aWZpZXIiLCJwcm9wZXJ0eVJlbGF0aW9ucyIsInZhcmlhYmxlIiwic3VicHJvb2ZOb2RlIiwiU3ViUHJvb2YiLCJzdWJEZXJpdmF0aW9uIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlN0cmluZ0Zyb21TdWJwcm9vZk5vZGUiLCJzdWJwcm9vZiIsInN0YXRlbWVudE5vZGUiLCJnZXRFcXVhbGl0eU5vZGUiLCJsZWZ0VGVybUZyb21FcXVhbGl0eU5vZGUiLCJyaWdodFRlcm1Gcm9tRXF1YWxpdHlOb2RlIiwiZGVkdWN0aW9uTm9kZSIsIkRlZHVjdGlvbiIsIlN0YXRlbWVudCIsInNpZ25hdHVyZU5vZGUiLCJTaWduYXR1cmUiLCJ0ZXJtcyIsInJlZmVyZW5jZU5vZGUiLCJSZWZlcmVuY2UiLCJtZXRhdmFyaWFibGUiLCJjb25jbHVzaW5vTm9kZSIsIkNvbmNsdXNpb24iLCJjb25jbHVzaW5vIiwiYXNzdW1wdGlvbk5vZGUiLCJBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImRlcml2YXRpb25Ob2RlIiwiRGVyaXZhdGlvbiIsInN0ZXBzT3JTdWJwcm9vZnMiLCJ0eXBlUHJlZml4Tm9kZSIsIlR5cGVQcmVmaXgiLCJ0ZXJtRnJvbVR5cGVQcmVmaXhOb2RlIiwidHlwZUZyb21UeXBlUHJlZml4Tm9kZSIsInR5cGVQcmVmaXgiLCJlcXVpdmFsZW5jZU5vZGUiLCJFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJlcXVpdmFsZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInN1YkRlcml2YXRpb25Ob2RlIiwiU3ViRGVyaXZhdGlvbiIsInR5cGVBc3NlcnRpb25Ob2RlIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJzdGVwT3JTdWJwcm9vZk5vZGUiLCJzdGVwT3JTdWJwcm9vZiIsInNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiRGVmaW5lZEFzc2VydGlvbiIsIm5lZ2F0ZWQiLCJpc05lZ2F0ZWQiLCJkZWZpbmVkQXNzZXJ0aW9uIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJQcm9wZXJ0eVJlbGF0aW9uIiwicHJvcGVydHlSZWxhdGlvbiIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiVGVybVN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbk5vZGUiLCJGcmFtZVN1YnN0aXR1dGlvbiIsImZyYW1lU3Vic3RpdHV0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50cyIsInN1YnByb29mQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbk5vZGUiLCJTYXRpc2ZpZXNBc3NlcnRpb24iLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIlZhcmlhYmxlRGVjbGFyYXRpb24iLCJ2YXJpYWxiZSIsInZhcmlhYmxlRGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlIiwiVHlwZVByZWZpeERlY2xhcmF0aW9uIiwidHlwZVByZWZpeERlY2xhcmF0aW9uIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsIkNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yRGVjbGFyYXRpb24iLCJTaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzaW1wbGVUeXBlRGVjbGFyYXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwidW5kZWZpbmVkIiwiU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25Ob2RlIiwiUmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiQ29tcGxleFR5cGVEZWNsYXJhdGlvbiIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJNZXRhdmFyaWFibGVEZWNsYXJhdGlvbiIsIm1ldGF2YXJpYWxiZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldFJlZmVyZW5jZU5vZGUiLCJnZXREZXJpdmF0aW9uTm9kZSIsImdldFRlcm1Ob2RlIiwiZ2V0VHlwZU5vZGUiLCJzdGVwT3JTdWJwcm9vZk5vZGVTdGVwTm9kZSIsImlzU3RlcE5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJqdWRnZW1lbnROb2RlIiwiZ2V0QXNzdW1wdGlvbk5vZGUiLCJzdWJEZXJ2aWF0aW9uIiwiZ2V0U3ViRGVyaXZhdGlvbk5vZGUiLCJnZXRUeXBlQXNzZXJ0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21NZXRhdmFyYWlibGVOb2RlIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0U2F0aXNmaWVkQXNzZXJ0aW9uTm9kZSIsInN1YnByb29mT3JTdWJwcm9vZk5vZGUiLCJzdWJwcm9vZk9yU3VicHJvb2ZOb2RlU3VicHJvb2ZOb2RlIiwiaXNTdWJwcm9vZk5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXRUZXJtU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInN0ZXBPclN1YnByb29mTm9kZXMiLCJnZXRTdGVwT3JTdWJwcm9vZk5vZGVzIiwibWFwIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwiZ2V0UHJvcGVydHlOb2RlIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsImdldFR5cGVQcmVmaXhOb2RlIiwiQ29tYmluYXRvciIsImdldE1ldGFUeXBlTm9kZSIsImdldFByb3BlcnR5UmVsYXRpb25Ob2RlIiwiQ29uc3RydWN0b3IiLCJnZXRQcm9vZk5vZGUiLCJnZXREZWR1Y3Rpb25Ob2RlIiwidGVybU5vZGVzIiwibGFiZWxOb2RlcyIsImxhYmVsTm9kZSIsImxhYmVsIiwibGFiZWxGcm9tTGFiZWxOb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJzdXBlclR5cGVOb2RlcyIsInN1cGVyVHlwZU5vZGUiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwicHVzaCIsImFzc3VtcHRpb25Ob2RlcyIsInN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbk5vZGUiLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uRnJvbVN1cHBvc2l0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsImdldFRlcm1Ob2RlcyIsImdldFN1cHBvc2l0aW9uTm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsImdldFByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyIsImdldFN1cGVyVHlwZU5vZGVzIiwiZ2V0TGFiZWxOb2RlcyIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTAyQ2dCQTtlQUFBQTs7UUFqbUNBQztlQUFBQTs7UUFrYUFDO2VBQUFBOztRQStsQkFDO2VBQUFBOztRQXFDQUM7ZUFBQUE7O1FBcHRDQUM7ZUFBQUE7O1FBOFhBQztlQUFBQTs7UUFrb0JBQztlQUFBQTs7UUF0a0JBQztlQUFBQTs7UUF0UkFDO2VBQUFBOztRQXBJQUM7ZUFBQUE7O1FBZ1pBQztlQUFBQTs7UUF1bkJBQztlQUFBQTs7UUFydEJBQztlQUFBQTs7UUEraEJBQztlQUFBQTs7UUFxUEFDO2VBQUFB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
|