semantifold 0.11.0 → 0.13.0
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/README.md +2 -1
- package/build/src/backends/c.d.ts +2 -1
- package/build/src/backends/c.d.ts.map +1 -1
- package/build/src/backends/c.js +26 -5
- package/build/src/backends/cpp.js +3 -1
- package/build/src/backends/effects.js +3 -2
- package/build/src/backends/java.js +33 -14
- package/build/src/backends/javascript.js +83 -18
- package/build/src/backends/ordered-expressions.d.ts +19 -7
- package/build/src/backends/ordered-expressions.d.ts.map +1 -1
- package/build/src/backends/ordered-expressions.js +46 -11
- package/build/src/backends/php.js +33 -14
- package/build/src/backends/ruby.js +37 -12
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +92 -37
- package/build/src/backends/typescript.js +83 -18
- package/build/src/frontends/c.d.ts +34 -1
- package/build/src/frontends/c.d.ts.map +1 -1
- package/build/src/frontends/c.js +128 -21
- package/build/src/frontends/java.d.ts +8 -0
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +77 -33
- package/build/src/frontends/javascript-typescript.d.ts +2 -0
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +118 -37
- package/build/src/frontends/php.d.ts +8 -0
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +68 -29
- package/build/src/frontends/ruby.d.ts +3 -0
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +103 -30
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +16 -1
- package/build/src/semantic/effects.d.ts.map +1 -1
- package/build/src/semantic/effects.js +18 -6
- package/build/src/semantic/lifetime.js +28 -4
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +26 -7
- package/build/src/semantic/types.d.ts +76 -16
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +23 -7
- package/build/src/semantic/validate.d.ts.map +1 -1
- package/build/src/semantic/validate.js +106 -35
- package/docs/adr/20261026-typed-error-handling-extension.md +55 -0
- package/docs/adr-numeric-tower.md +156 -0
- package/docs/architecture.md +1 -1
- package/docs/c.md +1 -1
- package/docs/language-support.md +10 -9
- package/docs/testing.md +8 -5
- package/package.json +1 -1
- package/src/backends/c.js +23 -4
- package/src/backends/cpp.js +1 -0
- package/src/backends/effects.js +2 -1
- package/src/backends/java.js +33 -14
- package/src/backends/javascript.js +83 -18
- package/src/backends/ordered-expressions.js +46 -10
- package/src/backends/php.js +33 -14
- package/src/backends/ruby.js +36 -12
- package/src/backends/shared.js +89 -42
- package/src/backends/typescript.js +83 -18
- package/src/frontends/c.js +135 -19
- package/src/frontends/java.js +82 -33
- package/src/frontends/javascript-typescript.js +130 -38
- package/src/frontends/php.js +68 -27
- package/src/frontends/ruby.js +107 -28
- package/src/language-registry.js +15 -0
- package/src/semantic/effects.js +17 -5
- package/src/semantic/lifetime.js +29 -3
- package/src/semantic/provenance.js +27 -12
- package/src/semantic/types.js +24 -6
- package/src/semantic/validate.js +105 -36
|
@@ -3,7 +3,7 @@ import { parser } from "@lezer/java";
|
|
|
3
3
|
import { SemantifoldDiagnostic, missingType, unsupportedSyntax } from "../diagnostic.js";
|
|
4
4
|
import { locationFromOffsets, moduleLocation } from "../semantic/location.js";
|
|
5
5
|
import { withAdaptedOperation } from "../semantic/operators.js";
|
|
6
|
-
import { withParserRanges } from "../semantic/provenance.js";
|
|
6
|
+
import { setParserRanges, withParserRanges } from "../semantic/provenance.js";
|
|
7
7
|
import { hasOnlyUnicodeScalars } from "../semantic/scalars.js";
|
|
8
8
|
import { isTask034ResourceProbe } from "../semantic/capabilities.js";
|
|
9
9
|
import { hasExactEffectSupport } from "../backends/effects.js";
|
|
@@ -38,6 +38,8 @@ const referenceMethodHooks = new Set(["clone", "equals", "finalize", "getClass",
|
|
|
38
38
|
/**
|
|
39
39
|
* @typedef JavaConversionContext
|
|
40
40
|
* @property {Map<string, import("../semantic/types.js").SemanticBindingType>} bindings - Explicitly typed visible bindings.
|
|
41
|
+
* @property {Set<string>} [catchBindingNames] - Lexically visible exact catch binding names.
|
|
42
|
+
* @property {Map<string, import("../semantic/types.js").CatchBinding>} [catchBindingNodes] - Exact catch binding nodes by visible name.
|
|
41
43
|
* @property {Map<string, import("../semantic/types.js").ClassDeclaration>} classes - Reference classes by identity.
|
|
42
44
|
* @property {import("../semantic/types.js").ClassDeclaration} [currentClass] - Enclosing reference class.
|
|
43
45
|
* @property {Map<string, import("../semantic/types.js").ErrorDeclaration>} errorNames - Errors by source name.
|
|
@@ -821,7 +823,7 @@ function convertStatement(statement, filename, source, context) {
|
|
|
821
823
|
* @param {string} filename - Source filename.
|
|
822
824
|
* @param {string} source - Complete source.
|
|
823
825
|
* @param {JavaConversionContext} context - Typed lexical context.
|
|
824
|
-
* @returns {import("../semantic/types.js").RaiseStatement} Semantic raise.
|
|
826
|
+
* @returns {import("../semantic/types.js").RaiseStatement | import("../semantic/types.js").RethrowStatement} Semantic raise or rethrow.
|
|
825
827
|
*/
|
|
826
828
|
function convertJavaRaise(statement, filename, source, context) {
|
|
827
829
|
const location = nodeLocation(statement, filename, source);
|
|
@@ -830,6 +832,22 @@ function convertJavaRaise(statement, filename, source, context) {
|
|
|
830
832
|
const argumentsNode = construction?.getChild("ArgumentList");
|
|
831
833
|
const arguments_ = argumentsNode ? structuralChildren(argumentsNode) : [];
|
|
832
834
|
const declaration = typeNode ? context.errorNames.get(nodeText(typeNode, source)) : undefined;
|
|
835
|
+
if (!construction && arguments_.length == 0) {
|
|
836
|
+
const throwNode = requiredChild(statement, "throw", filename, source);
|
|
837
|
+
const rethrown = structuralChildren(statement).find((candidate) => candidate.name == "Identifier");
|
|
838
|
+
const binding = rethrown ? context.bindings.get(nodeText(rethrown, source)) : undefined;
|
|
839
|
+
if (rethrown && binding?.kind == "ErrorType" && context.catchBindingNames?.has(nodeText(rethrown, source))) {
|
|
840
|
+
const bindingNode = context.catchBindingNodes?.get(nodeText(rethrown, source));
|
|
841
|
+
if (!bindingNode)
|
|
842
|
+
return unsupportedSyntax("java", "throw of a catch binding without an exact handler binding", location);
|
|
843
|
+
return withParserRanges({
|
|
844
|
+
binding: nodeText(rethrown, source),
|
|
845
|
+
bindingNode,
|
|
846
|
+
kind: /** @type {const} */ ("RethrowStatement"),
|
|
847
|
+
location
|
|
848
|
+
}, { keyword: nodeLocation(throwNode, filename, source) });
|
|
849
|
+
}
|
|
850
|
+
}
|
|
833
851
|
if (!construction || !typeNode || !argumentsNode || !declaration || arguments_.length != 1 || construction.getChild("ClassBody")) {
|
|
834
852
|
return unsupportedSyntax("java", "throw other than exact declared error construction", location);
|
|
835
853
|
}
|
|
@@ -857,43 +875,69 @@ function convertJavaTry(statement, filename, source, context) {
|
|
|
857
875
|
const location = nodeLocation(statement, filename, source);
|
|
858
876
|
const body = statement.getChild("Block");
|
|
859
877
|
const catches = statement.getChildren("CatchClause");
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
const
|
|
866
|
-
const
|
|
867
|
-
const
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
878
|
+
const finalizer = statement.getChild("FinallyClause");
|
|
879
|
+
if (!body || (catches.length == 0 && !finalizer) || statement.getChild("ResourceSpecification")) {
|
|
880
|
+
return unsupportedSyntax("java", "try without catches or finally and without resources", location);
|
|
881
|
+
}
|
|
882
|
+
/** @type {import("../semantic/types.js").CatchHandler[]} */
|
|
883
|
+
const handlers = [];
|
|
884
|
+
const seenHandlerNames = new Set(context.catchBindingNames ?? []);
|
|
885
|
+
for (const handler of catches) {
|
|
886
|
+
const parameter = handler.getChild("CatchFormalParameter");
|
|
887
|
+
const caught = parameter?.getChild("CatchType");
|
|
888
|
+
const typeNodes = caught ? structuralChildren(caught) : [];
|
|
889
|
+
const definition = parameter?.getChild("Definition");
|
|
890
|
+
const catchBody = handler.getChild("Block");
|
|
891
|
+
const typeNode = typeNodes[0];
|
|
892
|
+
const declaration = typeNode ? context.errorNames.get(nodeText(typeNode, source)) : undefined;
|
|
893
|
+
if (!parameter || !caught || typeNodes.length != 1 || typeNode?.name != "TypeName" || !definition || !catchBody || !declaration ||
|
|
894
|
+
parameter.getChild("Modifiers")) {
|
|
895
|
+
return unsupportedSyntax("java", "broad, multiple, or malformed catch", nodeLocation(handler, filename, source));
|
|
896
|
+
}
|
|
897
|
+
const name = nodeText(definition, source);
|
|
898
|
+
if (seenHandlerNames.has(name)) {
|
|
899
|
+
return unsupportedSyntax("java", `catch binding '${name}' shadows an outer handler binding`, nodeLocation(definition, filename, source));
|
|
900
|
+
}
|
|
901
|
+
seenHandlerNames.add(name);
|
|
902
|
+
const caughtLocation = nodeLocation(typeNode, filename, source);
|
|
903
|
+
const catchType = withParserRanges({ declarationId: /** @type {string} */ (declaration.id), kind: /** @type {const} */ ("ErrorType") }, {
|
|
904
|
+
type: caughtLocation
|
|
905
|
+
});
|
|
906
|
+
const catchContext = { ...context, bindings: new Map(context.bindings), erasedBindingNames: new Set(context.erasedBindingNames),
|
|
907
|
+
catchBindingNames: new Set(seenHandlerNames), catchBindingNodes: new Map(context.catchBindingNodes) };
|
|
908
|
+
catchContext.bindings.set(name, catchType);
|
|
909
|
+
const catchBindingNode = withParserRanges({
|
|
886
910
|
kind: /** @type {const} */ ("CatchBinding"),
|
|
887
911
|
location: nodeLocation(definition, filename, source),
|
|
888
912
|
mutable: /** @type {const} */ (false),
|
|
889
913
|
name,
|
|
890
914
|
type: catchType
|
|
891
|
-
}, { name: nodeLocation(definition, filename, source) })
|
|
892
|
-
|
|
893
|
-
|
|
915
|
+
}, { name: nodeLocation(definition, filename, source) });
|
|
916
|
+
catchContext.catchBindingNodes.set(name, catchBindingNode);
|
|
917
|
+
handlers.push(withParserRanges({
|
|
918
|
+
catchBinding: catchBindingNode,
|
|
919
|
+
catchBody: convertBlock(catchBody, filename, source, catchContext),
|
|
920
|
+
catchType,
|
|
921
|
+
kind: /** @type {const} */ ("CatchHandler"),
|
|
922
|
+
location: nodeLocation(handler, filename, source)
|
|
923
|
+
}, { catch: nodeLocation(handler, filename, source) }));
|
|
924
|
+
}
|
|
925
|
+
const bodyContext = { ...context, bindings: new Map(context.bindings), erasedBindingNames: new Set(context.erasedBindingNames) };
|
|
926
|
+
const semantic = /** @type {import("../semantic/types.js").TryStatement} */ (withParserRanges({
|
|
927
|
+
body: convertBlock(body, filename, source, bodyContext),
|
|
928
|
+
handlers,
|
|
894
929
|
kind: /** @type {const} */ ("TryStatement"),
|
|
895
930
|
location
|
|
896
|
-
}, {
|
|
931
|
+
}, { try: nodeLocation(requiredChild(statement, "try", filename, source), filename, source) }));
|
|
932
|
+
if (finalizer) {
|
|
933
|
+
const finallyBlock = finalizer.getChild("Block");
|
|
934
|
+
if (!finallyBlock)
|
|
935
|
+
return unsupportedSyntax("java", "malformed finally block", nodeLocation(finalizer, filename, source));
|
|
936
|
+
semantic.finallyBody = convertBlock(finallyBlock, filename, source, bodyContext);
|
|
937
|
+
setParserRanges(semantic, { finally: nodeLocation(finalizer, filename, source),
|
|
938
|
+
try: nodeLocation(requiredChild(statement, "try", filename, source), filename, source) });
|
|
939
|
+
}
|
|
940
|
+
return semantic;
|
|
897
941
|
}
|
|
898
942
|
/**
|
|
899
943
|
* Converts exact Java enhanced-for syntax over one resolved `List<T>`.
|
|
@@ -2304,4 +2348,4 @@ export function inspectJavaModule({ filename, source }) {
|
|
|
2304
2348
|
});
|
|
2305
2349
|
return { exports, imports, nativeName: `${packageName}.${className}` };
|
|
2306
2350
|
}
|
|
2307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvamF2YS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQzFELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN0RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUVqUiwrQ0FBK0M7QUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hDLElBQUksRUFBRSxJQUFJO0lBQ1YsR0FBRyxFQUFFLEdBQUc7SUFDUixJQUFJLEVBQUUsSUFBSTtJQUNWLENBQUMsRUFBRSxJQUFJO0lBQ1AsQ0FBQyxFQUFFLElBQUk7SUFDUCxDQUFDLEVBQUUsSUFBSTtJQUNQLENBQUMsRUFBRSxJQUFJO0lBQ1AsQ0FBQyxFQUFFLEdBQUc7SUFDTixDQUFDLEVBQUUsSUFBSTtDQUNSLENBQUMsQ0FBQTtBQUNGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO0lBQ1osQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO0lBQ2pCLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQztJQUNqQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7SUFDYixDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDWixDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7SUFDbkIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDO0lBQ3RCLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQztJQUNqQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQztJQUN6QixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUM7SUFDcEIsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUM7Q0FDN0IsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUV4STs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsSUFBSTtJQUMxQixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFFbkIsS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVc7UUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXhGLE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJO0lBQzlCLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUMxRyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSTtJQUM3QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7SUFFbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNO0lBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFakMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLFlBQVksSUFBSSxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUVsSCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU07SUFDMUMsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNO0lBQzVCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUN6QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNO0lBQ3RDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ25GLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFDNUUsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFekMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUMxQyxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDcEQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRXJELE9BQU8sSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDeEQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsTUFBTTtJQUN4QyxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFOUMsT0FBTyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFBO0FBQ25GLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVk7SUFDdEUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFckQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFekMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHNDQUFzQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BGLENBQUM7UUFFRCxPQUFPLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDMUksQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMzRyxPQUFPLGdCQUFnQixDQUFDLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDL0UsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsRUFBRSxRQUFRLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzVCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUUxQixJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxJQUFJLElBQUksWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlHLElBQUksUUFBUSxJQUFJLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDbEcsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsc0NBQXNDLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDcEYsQ0FBQztZQUNELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDZDQUE2QyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzNGLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBRXpHLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzNJLE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxRQUFRO1lBQ3pILFFBQVEsRUFBRSxnRUFBZ0UsQ0FBQyxDQUN6RSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0lBQ2pILENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBRTVDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBRXhHLE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ2hILENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsQyxPQUFPLGdCQUFnQixDQUFDLEVBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtJQUNsSixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQzVKLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTTtRQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRXJGLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM3RyxNQUFNLFFBQVEsR0FBRyxRQUFRLEVBQUUsSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUM3RixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2xELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFOUYsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsdURBQXVELEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDckcsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3RELElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzNDLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxhQUFhO2dCQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGdDQUFnQyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDaEosTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFFOUQsT0FBTyxnQkFBZ0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ3hFLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUcsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsRUFBRSxRQUFRO2dCQUM5RCxTQUFTLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQTtRQUMzRyxDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLDJCQUEyQixFQUFFLENBQUM7WUFDcEQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUMzRyxDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRTVELElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxhQUFhLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHVDQUF1QyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDckgsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGlCQUFpQjtZQUNyQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUMvRSxRQUFRLEVBQUUsV0FBVyxXQUFXLENBQUMsSUFBSSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakksQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUNiLE9BQU8sZ0JBQWdCLENBQUM7WUFDdEIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDL0MsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUNuRCwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUM7WUFDakQsUUFBUTtZQUNSLE1BQU0sRUFBRSxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsYUFBYSxDQUFDO1NBQ3BILEVBQUUsRUFBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0lBQ3hELENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQTtRQUM1RixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUUxRSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5RixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBRUQsSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUM5RixDQUFDLG9DQUFvQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUUsT0FBTyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2hJLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNyRCxJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLFFBQVE7WUFDUixPQUFPLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1NBQy9ELEVBQUUsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFakcsT0FBTyx3REFBd0QsQ0FBQyxFQUFDLHNCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDckcsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFakksSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7WUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUV2RyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyQyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUUxRixJQUFJLGtCQUFrQjtZQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFckksTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUUvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLFVBQVUsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFekcsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUM7WUFDckQsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQy9ELFFBQVE7WUFDUixLQUFLLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1NBQ2pFLEVBQUUsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxFQUFFLGtFQUFrRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV0SyxPQUFPLHdEQUF3RCxDQUFDLEVBQUMsc0JBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNyRyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzNILE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3hILE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFBO1FBRS9FLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFOUcsT0FBTyx3REFBd0QsQ0FBQyxFQUFDLHNCQUF1QixDQUFDLGdCQUFnQixDQUFDO1lBQ3hHLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDakUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztZQUNqRSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQ2xFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO1lBQ3BELFFBQVE7U0FDVCxFQUFFO1lBQ0QsU0FBUyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUNuRCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQzVDLFNBQVMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDbkQsVUFBVSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUNwRCxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1NBQ25ELENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9HLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUV0RSxPQUFPLHFCQUFxQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDNUgsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN0RSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDMUUsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDdEQsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFBO1FBQ3JILE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDM0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFL0QsSUFBSSxRQUFRLEVBQUUsSUFBSSxJQUFJLFlBQVksSUFBSSxNQUFNLElBQUksWUFBWSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN2RixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7WUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUVqRSxPQUFPLGdCQUFnQixDQUFDO2dCQUN0QixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDL0MsUUFBUTtnQkFDUixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFDLEVBQUU7b0JBQ2hJLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3ZCLENBQUM7YUFDSCxFQUFFLEVBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUMxRCxDQUFDO1FBRUQsSUFBSSxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5RyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3BILENBQUM7UUFFRCxJQUFJLFFBQVEsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEcsTUFBTSxZQUFZLEdBQUcsMkRBQTJELENBQUMsQ0FDL0UsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUMzRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQTtZQUU3SCxPQUFPLGdCQUFnQixDQUFDLEVBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDeEUsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xHLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRSxJQUFJLE1BQU07Z0JBQ25HLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUMxSCxDQUFDO1FBRUQsSUFBSSxRQUFRLElBQUksb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFFbEUsSUFBSSxNQUFNLElBQUksT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUMsRUFBRTtvQkFDL0UsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLE9BQU8sRUFBRSxlQUFlO2lCQUN6QixDQUFDLENBQUE7WUFDSixDQUFDO1lBQ0QsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE9BQU8sZ0JBQWdCLENBQUM7b0JBQ3RCLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQztvQkFDM0MsUUFBUTtvQkFDUixLQUFLLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUNsRSxZQUFZLEVBQUUsSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2lCQUM3RSxFQUFFLEVBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtZQUN2RCxDQUFDO1lBRUQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLE1BQU0sRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3JGLENBQUM7UUFDRCxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksWUFBWSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqRyxNQUFNLE9BQU8sR0FBRyxrRUFBa0UsQ0FBQyxDQUNqRixpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FDdkQsQ0FBQTtZQUNELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFFcEUsSUFBSSxNQUFNLElBQUksV0FBVyxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUMsRUFBRTtvQkFDN0YsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUIsQ0FBQyxDQUFBO1lBQ0osQ0FBQztZQUNELElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxPQUFPLGdCQUFnQixDQUFDLEVBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFDLEVBQUU7b0JBQzFGLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLE1BQU0sRUFBRSxpQkFBaUI7aUJBQzFCLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFFRCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx3QkFBd0IsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtRQUN2RixDQUFDO1FBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNuRSxNQUFNLFdBQVcsR0FBRyxZQUFZLEVBQUUsSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1lBRTNGLE9BQU8sZ0JBQWdCLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQzlHLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDMUMsUUFBUTthQUNULEVBQUUsRUFBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFDRCxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLFlBQVksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDMUcsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUM5QixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSwrQ0FBK0MsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQy9ILENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7WUFDbEIsTUFBTSxTQUFTLEdBQUcsWUFBWSxFQUFFLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUV0RixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNwQyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxxQ0FBcUMsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO2dCQUNsSCxDQUFDO2dCQUNELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRztvQkFDOUUsS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFeEUsSUFBSSxDQUFDLFNBQVM7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO2dCQUNqRixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO29CQUM1QixHQUFHLEVBQUUsMkRBQTJELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDeEgsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDO29CQUN2QyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxRixLQUFLLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7aUJBQ3pGLEVBQUUsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUE7WUFDNUQsQ0FBQztZQUVELE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUU7Z0JBQ3RGLE9BQU8sRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDcEQsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7WUFFakgsSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLFNBQVMsSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLGdCQUFnQjtnQkFDM0UsQ0FBQyxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlELE9BQU8sZ0JBQWdCLENBQUM7b0JBQ3RCLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7b0JBQ2xFLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7b0JBQ25FLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO29CQUNsRCxRQUFRO29CQUNSLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQztpQkFDMUMsRUFBRSxFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7WUFDNUQsQ0FBQztZQUVELE9BQU8sZ0JBQWdCLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7Z0JBQ2xFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7Z0JBQ3JFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO2dCQUNsRCxRQUFRO2dCQUNSLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO2FBQ25ELEVBQUUsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzVELENBQUM7UUFDRCxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUQsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFFN0UsSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUN2QyxPQUFPLGdCQUFnQixDQUFDO29CQUN0QixLQUFLLEVBQUUsTUFBTTtvQkFDYixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUM7b0JBQ3pDLFFBQVE7b0JBQ1IsUUFBUSxFQUFFLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztpQkFDakUsRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7WUFDMUQsQ0FBQztZQUNELE9BQU8sZ0JBQWdCLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7Z0JBQ2xFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO2dCQUN2RCxRQUFRO2FBQ1QsRUFBRSxFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDNUQsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdEcsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7WUFFcEQsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNwRCxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO2dCQUU5RixPQUFPLGdCQUFnQixDQUFDLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUU7b0JBQ3hILE1BQU0sRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7aUJBQ25ELENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sYUFBYSxHQUFHLEdBQUcsWUFBWSxJQUFJLE1BQU0sRUFBRSxDQUFBO1lBQ2pELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7WUFFL0QsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN2QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ3BELGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFFbEcsT0FBTyxnQkFBZ0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsRUFBQyxFQUFFO29CQUMvSCxNQUFNLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO2lCQUNuRCxDQUFDLENBQUE7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyxnQkFBZ0IsQ0FBQztnQkFDdEIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUN6QyxRQUFRO2dCQUNSLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7YUFDakUsRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDMUQsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFBO1FBRXBDLElBQUksbUJBQW1CO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzVJLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBRTVGLElBQUksbUJBQW1CO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLG1CQUFtQixDQUFDLElBQUksRUFBRSxFQUFFLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUU3SixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDckUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNwRCxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRTFGLE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxFQUFDLEVBQUU7WUFDOUksTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztTQUNuRCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUN2RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNO0lBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDOUMsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFBO0lBRXhILE9BQU8sVUFBVSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFFBQVEsSUFBSSxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtBQUNoRyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsb0NBQW9DLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztJQUMzRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQTtJQUVySCxPQUFPLFlBQVksSUFBSSxJQUFJLElBQUksa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksSUFBSTtRQUM3RixtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksWUFBWSxDQUFBO0FBQ2xGLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU87SUFDakcsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzFFLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ25ELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQTtJQUN4SCxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUV6RixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDM0UsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNwRyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sTUFBTSxHQUFHLEVBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFDLENBQUE7SUFFM0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUMvRyxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUM7UUFDckQsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixJQUFJLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ2hFLFFBQVE7UUFDUixLQUFLLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO0tBQ25FLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFdkQsT0FBTyx3REFBd0QsQ0FBQyxFQUFDLHNCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDckcsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHlCQUF5QixDQUFDLElBQUk7SUFDckMsT0FBTztRQUNMLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLG1CQUFtQjtRQUNuQixrQkFBa0I7UUFDbEIsMEJBQTBCO1FBQzFCLGFBQWE7UUFDYixNQUFNO1FBQ04sTUFBTTtRQUNOLHlCQUF5QjtLQUMxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDdkIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsUUFBUTtJQUNoRCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFDbkIsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLENBQUE7SUFDOUIsSUFBSSx3QkFBd0IsR0FBRyxLQUFLLENBQUE7SUFFcEMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEMsTUFBTSxRQUFRLEdBQUcsU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDLHdCQUF3QixJQUFJLHNCQUFzQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVuRyxJQUFJLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzFDLElBQUksV0FBVyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7WUFFM0IsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRztnQkFBRSxXQUFXLEVBQUUsQ0FBQTtZQUVqRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDL0QsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2hGLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUNuRyxDQUFBO1lBRUQsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFFM0YsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFFakYsVUFBVSxJQUFJLG1CQUFtQixDQUFBO1lBQ2pDLHNCQUFzQixHQUFHLG1CQUFtQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDckYsd0JBQXdCLEdBQUcsSUFBSSxDQUFBO1lBQy9CLEtBQUssR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZCLFNBQVE7UUFDVixDQUFDO1FBRUQsVUFBVSxJQUFJLFNBQVMsQ0FBQTtRQUN2QixzQkFBc0IsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzRSx3QkFBd0IsR0FBRyxLQUFLLENBQUE7SUFDbEMsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUNqRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyRCxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3pFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQTtJQUVkLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVoQyxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDdEUsQ0FBQztRQUVELElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLEtBQUssSUFBSSxTQUFTLENBQUE7WUFDbEIsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFekcsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDaEMsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFM0MsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLE1BQU0sQ0FBQTtZQUNmLFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUE7WUFDbkIsTUFBTSxhQUFhLEdBQUcsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFNUMsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUM5RixLQUFLLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDM0IsQ0FBQztZQUVELEtBQUssSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDdkQsU0FBUTtRQUNWLENBQUM7UUFFRCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSwyQkFBMkIsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRS9HLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPO0lBQ3pELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTFELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxpQkFBaUI7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRW5HLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUE7SUFDaEgsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRS9FLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFdEMsT0FBTyxpQkFBaUIsQ0FDdEIsTUFBTSxFQUNOLFdBQVcsRUFBRSxJQUFJLElBQUksbUJBQW1CLEVBQ3hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDckUsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsaUJBQWlCLENBQzdDLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLE9BQU8sRUFDUCxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxlQUFlLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksTUFBTTtnQkFDOUUsQ0FBQyxDQUFDLFNBQVM7Z0JBQ1gsQ0FBQyxDQUFDLDJFQUEyRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUNyRyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNSLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsUUFBUTtLQUNULENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMscUJBQXFCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztJQUNqRSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUUxRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDL0QsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNqRCxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUV2RSxJQUFJLE9BQU87WUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQy9HLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDckcsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFdBQVc7WUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNuSCxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0YsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkksQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDNUUsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQTtRQUU3SCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHlCQUF5QixFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDbEksSUFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNqSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUV6QyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx1REFBdUQsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3ZJLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLFVBQVUsSUFBSSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDOUgsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFM0YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRWhDLE9BQU8sZ0JBQWdCLENBQUM7WUFDdEIsV0FBVztZQUNYLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUTtZQUNSLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNyQyxJQUFJO1lBQ0osSUFBSTtTQUNMLEVBQUUsRUFBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQTtJQUM5RyxDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDNUMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRTdELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUUzRSxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMxQixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFbEMsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUc7WUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3ZKLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxhQUFhLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFELE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2pELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNsQyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDaEMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFLElBQUksSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxZQUFZO2dCQUNsRyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdGLENBQUMsQ0FBQyxTQUFTLENBQUE7WUFFYixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsSUFBSSxNQUFNLElBQUksVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM1RSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxvREFBb0QsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQ2hJLENBQUM7WUFDRCxPQUFPLGdCQUFnQixDQUFDLEVBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUN2RyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRSxRQUFRO2dCQUM1RyxRQUFRLEVBQUUsZ0VBQWdFLENBQUMsQ0FDekUsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQyxFQUM1RCxFQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZHLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksWUFBWTtZQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDN0ssSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLElBQUksTUFBTSxJQUFJLFVBQVUsSUFBSSxRQUFRO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUV4SyxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1lBQ3hDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO1lBQ25ELFFBQVEsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDaEQsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1NBQy9CLEVBQUUsRUFBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBRWxELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDM0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDcEQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUNuRSxXQUFXLEVBQUUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUU3RCxPQUFPLGdCQUFnQixDQUFDO1lBQ3RCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsUUFBUTtZQUNSLE1BQU0sRUFBRSxnQkFBZ0I7U0FDekIsRUFBRSxFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUVELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7QUFDNUQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU87SUFDNUQsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGlCQUFpQjtRQUFFLE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ25HLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxhQUFhO1FBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDM0YsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQjtRQUFFLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDckcsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWM7UUFBRSxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCO1FBQUUsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDakcsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHNCQUFzQjtRQUFFLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3pHLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDaEYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUV6QyxJQUFJLEtBQUs7WUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxXQUFXLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQ2hILFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDeEMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDckgsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFeEQsT0FBTyxnQkFBZ0IsQ0FBQztZQUN0QixJQUFJLEVBQUUscURBQXFELENBQUMsQ0FDMUQsU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUM1RTtZQUNELFFBQVE7U0FDVCxFQUFFLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSwwQkFBMEI7UUFBRSxPQUFPLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BILElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzVDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQztZQUFFLE9BQU8scUJBQXFCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbEgsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDN0YsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDdEQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUVwRCxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDOUgsT0FBTztnQkFDTCxVQUFVLEVBQUUsa0hBQWtILENBQUMsQ0FDN0gsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQ3pEO2dCQUNELElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLFFBQVEsRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDcEQsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQzdGLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPO0lBQzVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzFELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtJQUNuRSxNQUFNLFFBQVEsR0FBRyxZQUFZLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sYUFBYSxHQUFHLFlBQVksRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDNUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFFN0YsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDakksT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsb0RBQW9ELEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbEcsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTdELE9BQU8sZ0JBQWdCLENBQUM7UUFDdEIsS0FBSyxFQUFFLGdCQUFnQixDQUFDO1lBQ3RCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxFQUFDLGFBQWEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxDQUFDO1lBQ2hKLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQ2hELFFBQVEsRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDdEQsT0FBTyxFQUFFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztTQUNyRSxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxDQUFDO1FBQ3hCLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLFFBQVE7S0FDVCxFQUFFLEVBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQTtBQUNwRyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU87SUFDMUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDMUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN4QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBRXBELElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztRQUN2SCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxtREFBbUQsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUMxRCxNQUFNLE1BQU0sR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMxRCxNQUFNLFVBQVUsR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3BELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDM0MsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFFN0YsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUUsSUFBSSxJQUFJLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVc7UUFDN0gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHFDQUFxQyxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDbEgsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQy9ELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLEVBQUMsYUFBYSxFQUFFLHFCQUFxQixDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFDLEVBQUU7UUFDcEksSUFBSSxFQUFFLGNBQWM7S0FDckIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxXQUFXLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFDLENBQUE7SUFDOUgsTUFBTSxZQUFZLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFDLENBQUE7SUFDL0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUV6QyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDMUMsT0FBTyxnQkFBZ0IsQ0FBQztRQUN0QixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQztRQUN2RCxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7WUFDN0IsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDO1lBQzNDLFFBQVEsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDcEQsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUk7WUFDSixJQUFJLEVBQUUsU0FBUztTQUNoQixFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUM7UUFDdEQsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUM7UUFDbEUsU0FBUztRQUNULElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxRQUFRO0tBQ1QsRUFBRSxFQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0FBQzlJLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztJQUNyRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUE7SUFFckcsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMzRixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTztRQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzlKLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNyQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sUUFBUSxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN2RSxNQUFNLFdBQVcsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDMUUsTUFBTSxjQUFjLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRTdFLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksQ0FBQyxjQUFjO1FBQ2xGLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLFdBQVcsSUFBSSxjQUFjLElBQUksSUFBSSxDQUFBO1FBRXpELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHNDQUFzQyxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdkgsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLGlEQUFpRCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBRXpILE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHdCQUF3QixFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdkcsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDeEQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUM1RCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLENBQUE7UUFDOUgsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRTlGLElBQUksVUFBVSxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsSUFBSSxJQUFJLFlBQVk7WUFDN0QsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxtQkFBbUIsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUNuRyxRQUFRLEVBQUUsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDcEYsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDcEcsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFDdEgsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDO2dCQUM5QyxDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ2IsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUN4SCxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxTQUFTLENBQUE7WUFFYixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUkscUJBQXFCLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUNoSCxDQUFDLGFBQWEsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDckYsQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQ3RHLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUUvQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDJCQUEyQixFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDckcsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFFL0MsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHFDQUFxQyxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDdEgsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHO2dCQUNsQixHQUFHLE9BQU87Z0JBQ1YsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLGtCQUFrQixFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7YUFDdkUsQ0FBQTtZQUNELE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUMxQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUN4RixDQUFBO1lBQ0QsTUFBTSxZQUFZLEdBQUcseUJBQXlCLENBQzVDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQzVGLENBQUE7WUFFRCxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMxRCxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUM5RCxPQUFPLGdCQUFnQixDQUFDO2dCQUN0QixJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDO29CQUNwQyxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO29CQUM5QyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQztpQkFDdEY7Z0JBQ0QsVUFBVTtnQkFDVixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDbEQsUUFBUTtnQkFDUixHQUFHLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO2dCQUMxRCxZQUFZO2FBQ2IsRUFBRSxFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDdEUsQ0FBQztRQUNELElBQUksVUFBVSxJQUFJLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHdDQUF3QyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDNUgsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNuRSxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQzVILFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDaEUsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUUzRyxJQUFJLENBQUMsY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksVUFBVSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7UUFDN0YsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLHNCQUFzQixFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDcEcsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxRQUFRLEVBQUUsZUFBZTtRQUN6QixPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQ25DLElBQUksRUFBRSxZQUFZO0tBQ25CLEVBQUUsRUFBQyxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtJQUMzQixNQUFNLFdBQVcsR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUMsQ0FBQTtJQUU5SCxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFBO0lBQ2hHLE9BQU8sZ0JBQWdCLENBQUM7UUFDdEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDdkQsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFDL0MsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNsRSxRQUFRO1FBQ1IsWUFBWTtLQUNiLEVBQUUsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0FBQ3RFLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPO0lBQ3hHLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzFELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDakQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQyxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3JELE1BQU0sVUFBVSxHQUFHLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDbkQsTUFBTSxXQUFXLEdBQUcsVUFBVTtRQUM1QixDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7UUFDcEcsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLE1BQU0sVUFBVSxHQUFHLFdBQVcsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDdEQsTUFBTSxZQUFZLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUMxRCxNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsSUFBSSxJQUFJLGtCQUFrQjtRQUN0RCxDQUFDLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQztRQUM3RyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2IsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRTNDLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSwwQkFBMEIsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxPQUFPO1FBQ3JHLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVztRQUM1RyxXQUFXLENBQUMsSUFBSSxJQUFJLGtCQUFrQixJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksUUFBUTtRQUNqRyxDQUFDLFlBQVksSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksWUFBWTtRQUMvRixRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGVBQWUsUUFBUSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDL0UsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFekMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsZUFBZSxRQUFRLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDM0gsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLElBQUksR0FBRyxFQUFFLFFBQVEsRUFDNUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUVoRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGVBQWUsUUFBUSxlQUFlLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNwSCxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQztRQUN0QixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDM0MsUUFBUTtRQUNSLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJO1FBQ0osSUFBSTtLQUNMLEVBQUUsRUFBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0FBQ3hELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPO0lBQzFELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXpDLE9BQU8sUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDdkcsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUMsQ0FBQTtJQUN4RSxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFlBQVk7UUFBRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNsRixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV6QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksWUFBWSxFQUFFLENBQUM7WUFDM0YsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQTtRQUN2RyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNsRCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLENBQUE7UUFFckgsSUFBSSxVQUFVLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDckUsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBRXZFLElBQUksU0FBUztnQkFBRSxPQUFPLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDL0UsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlELENBQUM7UUFDRCxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMzQixNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUU3RSxJQUFJLFlBQVksRUFBRSxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUM5RSxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUE7WUFDNUQsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUE7WUFDakYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDbEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3ZFLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUN4RixtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUV4RSxJQUFJLFVBQVU7Z0JBQUUsT0FBTyxVQUFVLENBQUE7UUFDbkMsQ0FBQztRQUNELElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxZQUFZLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNwRixNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUNuRCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUU3RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLFlBQVksRUFBRSxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ3BHLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLFVBQVU7Z0JBQUUsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFBO1lBQy9GLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLFNBQVMsSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDMUcsT0FBTyxZQUFZLENBQUMsU0FBUyxDQUFBO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxVQUFVLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0YsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFFN0UsSUFBSSxZQUFZLEVBQUUsSUFBSSxJQUFJLFlBQVk7Z0JBQUUsT0FBTyxTQUFTLENBQUE7WUFDeEQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ25FLE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUV4RyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUMxRyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzdILE1BQU0sUUFBUSxHQUFHLFFBQVEsRUFBRSxJQUFJLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQzdGLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFOUYsSUFBSSxXQUFXLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUM3RCxNQUFNLGFBQWEsR0FBRyxpQkFBaUI7Z0JBQ3JDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsdUJBQXVCLENBQy9FLFFBQVEsRUFDUixXQUFXLFdBQVcsQ0FBQyxJQUFJLGVBQWUsRUFDMUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQ3hDLFFBQVEsRUFDUixNQUFNLEVBQ04sT0FBTyxDQUFDLFdBQVcsRUFDbkIsT0FBTyxDQUFDLGNBQWMsQ0FDdkIsQ0FBQztnQkFDRixDQUFDLENBQUMsU0FBUyxDQUFBO1lBRWIsT0FBTyxXQUFXLENBQUMsSUFBSSxJQUFJLGtCQUFrQjtnQkFDM0MsQ0FBQyxDQUFDLEVBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBQztnQkFDeEQsQ0FBQyxDQUFDLEVBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQTtRQUMvRyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztJQUNuRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUMzRCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSw0QkFBNEIsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDakgsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBTztRQUNiLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7UUFDOUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO0tBQ25GLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztJQUM5RCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFcEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFFM0YsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ2pDLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFBO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQzlFLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU87SUFDakYsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUMsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ3ZILE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxFQUFFLElBQUksSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFN0csSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSx5QkFBeUI7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUU5SCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDN0UsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvQyxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNuRSxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNqRSxNQUFNLGtCQUFrQixHQUFHLGlCQUFpQjtRQUMxQyxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQztRQUMzRyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2IsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLElBQUksMEJBQTBCO1FBQzdFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxhQUFhLENBQUM7UUFDckYsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLE1BQU0sd0JBQXdCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUM3RixNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUMxRSxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsSUFBSSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXRILElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLElBQUksQ0FBQztRQUNyRyxDQUFDLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLElBQUksUUFBUSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtRQUM3RyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksMEJBQTBCLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUNqRyx3QkFBd0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSx5QkFBeUI7UUFDbEgsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCO1FBQ3JGLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUV2RCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNyRixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx1Q0FBdUMsRUFBRSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDOUgsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUN4RyxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM5QyxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFDNUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDOUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQ2xCLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7SUFFckIsT0FBTyxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN0QyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNoSCxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3JELE1BQU0sWUFBWSxHQUFHLFVBQVUsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDekQsTUFBTSxRQUFRLEdBQUcsVUFBVTtZQUN6QixDQUFDLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQztZQUM1RyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRWIsSUFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUUsSUFBSSxJQUFJLFlBQVksSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFdBQVc7WUFDNUYsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLO1lBQUUsTUFBSztRQUM3RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFdkUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDbkcsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDNUIsR0FBRyxFQUFFLDJEQUEyRCxDQUFDLENBQy9ELGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FDckU7WUFDRCxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDdkMsUUFBUSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUNwRCxLQUFLLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztTQUM5RSxFQUFFLEVBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNELEtBQUssSUFBSSxDQUFDLENBQUE7SUFDWixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLGFBQWEsRUFBRSxJQUFJLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQzlHLE1BQU0sZUFBZSxHQUFHLGFBQWEsRUFBRSxJQUFJLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ2hJLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN6QyxNQUFNLGNBQWMsR0FBRyxjQUFjLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQzdELE1BQU0sY0FBYyxHQUFHLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDM0QsTUFBTSxlQUFlLEdBQUcsY0FBYztRQUNwQyxDQUFDLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUM7UUFDeEcsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLE1BQU0sVUFBVSxHQUFHLGVBQWUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDcEYsTUFBTSxZQUFZLEdBQUcsZUFBZSxFQUFFLElBQUksSUFBSSxrQkFBa0I7UUFDOUQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUM7UUFDakgsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUViLElBQUksQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU87UUFDckcsQ0FBQyxZQUFZLElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHO1FBQzdILGVBQWUsRUFBRSxJQUFJLElBQUksa0JBQWtCLElBQUksUUFBUSxDQUFDLFlBQVksSUFBSSxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksdUJBQXVCO1FBQ3pILENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksMEJBQTBCLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQ3RHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDN0YsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsZ0RBQWdELEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDOUYsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFN0MsSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7UUFDeEIsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsd0NBQXdDLEVBQUUsWUFBWSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUM1SCxDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksRUFBRSxVQUFVLElBQUksR0FBRyxFQUFFLFlBQVksQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUM3RyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDbkcsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFckgsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSx3QkFBd0I7UUFDbkcsaUJBQWlCLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUNoSCxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUN0SCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUN6QixZQUFZLENBQUMsT0FBTyxFQUNwQixZQUFZLENBQUMsU0FBUyxFQUN0QixZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFDNUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFDcEQsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FDckQsQ0FBQTtJQUVELE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzNDLE9BQU87UUFDTCxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUM7UUFDcEIsU0FBUyxFQUFFLGdCQUFnQixDQUFDO1lBQzFCLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztnQkFDNUIsT0FBTztnQkFDUCxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDaEQsUUFBUSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUM7YUFDN0YsRUFBRSxFQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUM7WUFDakUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDL0MsUUFBUSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDeEYsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUk7WUFDSixJQUFJO1NBQ0wsRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQztLQUNySCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRTtJQUN2SCxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDOUQsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLE1BQU07UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzlILElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRWpDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN6RSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ25ILENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRXBELElBQUksSUFBSSxJQUFJLGdCQUFnQixJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkQsT0FBTyxRQUFRLENBQ2IsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQ3hHLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUMxQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FDOUMsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLElBQUksSUFBSSxlQUFlLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQTtZQUV4SCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGdDQUFnQyxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDbkgsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUNaLE9BQU8sRUFDUCx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFDeEcsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQzFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUM3QyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FDOUMsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLElBQUksSUFBSSx3QkFBd0IsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1lBRXhILElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxlQUFlLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDaEUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUNuSCxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQ1osT0FBTyxFQUNQLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUN4RyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFDMUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQzdDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUM5QyxDQUFBO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLElBQUksb0JBQW9CLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkYsT0FBTyxZQUFZLENBQ2pCLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUN4RyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFDMUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQzlDLENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVwQyxJQUFJLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNmLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSw4QkFBOEIsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1lBQzlHLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNqRyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekcsQ0FBQztRQUVELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDMUcsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0UsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdkUsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRXRFLElBQUksYUFBYSxFQUFFLEVBQUU7UUFBRSxPQUFPLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDeEcsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFakUsSUFBSSxXQUFXLEVBQUUsRUFBRTtRQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksSUFBSSxrQkFBa0I7WUFDaEUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLDJCQUEyQjtnQkFDL0MsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQy9FLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRTVFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFL0csSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUUzSCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRTtJQUM3SCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYTtRQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQzFILE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRWhFLElBQUksYUFBYSxFQUFFLEVBQUU7UUFBRSxPQUFPLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDbEcsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFM0QsSUFBSSxXQUFXLEVBQUUsRUFBRTtRQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksSUFBSSxrQkFBa0I7WUFDaEUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLDJCQUEyQjtnQkFDL0MsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3pFLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdkMsTUFBTSxNQUFNLEdBQUcsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRWxJLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsc0NBQXNDLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUMzSCxNQUFNLElBQUksR0FBRyxFQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSw4REFBOEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUE7SUFFMUksT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0FBQzdFLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRTtJQUM3SCxJQUFJLFVBQVUsRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7UUFDL0IsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUMvRyxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDbEcsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUFJO0lBQzNCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDaEssQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLHlCQUF5QixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU07SUFDaEUsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUMzQixNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUzQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDekMsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDOUMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTlCLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxlQUFlLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNsRyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxpREFBaUQsRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ2hJLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUUzRCxPQUFPLGdCQUFnQixDQUFDO1lBQ3RCLEVBQUUsRUFBRSxHQUFHLE9BQU8sU0FBUyxLQUFLLEVBQUU7WUFDOUIsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDO1lBQzVDLFFBQVE7WUFDUixJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7U0FDbkMsRUFBRSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO0lBQ3RCLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLHdCQUF3QixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxZQUFZLEVBQ3BILGVBQWUsR0FBRyxLQUFLO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXJHLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUE7SUFDakosTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUU3QyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDOUcsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsNkJBQTZCLGlCQUFpQixFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDdEosQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXRDLElBQUksTUFBTTtRQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdEcsTUFBTSxzQkFBc0IsR0FBRyx5QkFBeUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNuRyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xILE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN0RSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3pDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2hGLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxDQUFBO0lBRXBHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUN6QixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSw0QkFBNEIsRUFBRSxZQUFZLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdEgsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNsRCxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ25FLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFdkQsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3hHLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDRCQUE0QixFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFDbkYsQ0FBQztRQUNELE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ2xGLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUV6RCxNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUN4QyxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLElBQUksRUFBRSxhQUFhO1lBQ25CLElBQUksRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsYUFBYSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFDL0csV0FBVyxFQUFFLGtCQUFrQixDQUFDO1NBQ25DLENBQUE7UUFFRCxPQUFPLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZHLENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTztRQUNMLFFBQVE7UUFDUixJQUFJO1FBQ0osWUFBWSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUN4RCxVQUFVO1FBQ1YsVUFBVSxFQUFFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLElBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUMxRyxXQUFXLEVBQUUsa0JBQWtCLENBQUM7UUFDbEMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFDLGNBQWMsRUFBRSxzQkFBc0IsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDNUUsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUN0SCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDNUQsTUFBTSxPQUFPLEdBQUc7UUFDZCxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RixPQUFPO1FBQ1AsVUFBVTtRQUNWLGtCQUFrQixFQUFFLElBQUksR0FBRyxFQUFFO1FBQzdCLE1BQU07UUFDTixTQUFTO1FBQ1QsV0FBVztRQUNYLE9BQU87UUFDUCxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVU7UUFDaEMsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQzFHLENBQUE7SUFFRCxPQUFPLGdCQUFnQixDQUFDO1FBQ3RCLElBQUksRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ3BELElBQUksRUFBRSxxQkFBcUI7UUFDM0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtRQUNwQixVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVU7UUFDaEMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVO1FBQ2hDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsY0FBYyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNoRixFQUFFLEVBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksR0FBRyxLQUFLO0lBQ2pGLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUM5RyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQzlDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQzNFLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3BELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5QixNQUFNLFVBQVUsR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDNUQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3ZFLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ25FLE1BQU0sYUFBYSxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDdkQsTUFBTSxlQUFlLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ2hFLE1BQU0scUJBQXFCLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3hGLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sY0FBYyxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDMUQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRTVFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDO1FBQzlGLENBQUMsVUFBVSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxVQUFVLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxrQkFBa0I7UUFDN0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDbkcsV0FBVyxFQUFFLElBQUksSUFBSSx3QkFBd0I7UUFDN0MsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkksV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDOUIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQzlHLFNBQVMsRUFBRSxJQUFJLElBQUksaUJBQWlCLElBQUksUUFBUSxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksUUFBUTtRQUMzRixRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxlQUFlLElBQUkscUJBQXFCLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDN0csU0FBUyxFQUFFLElBQUksSUFBSSwrQkFBK0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQzdHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDdkYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsc0NBQXNDLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDcEYsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxFQUFFO1FBQ25DLElBQUksRUFBRSxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7UUFDekYsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztLQUM3QyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU07SUFDdkcsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDckQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDekMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDaEYsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUU1QyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDekUsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BHLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHVDQUF1QyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFDRCxJQUFJLENBQUMsV0FBVyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25ELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDhCQUE4QixJQUFJLEdBQUcsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3JILENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDbEQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNuRSxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5QyxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFMUQsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGlCQUFpQixJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ2hHLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHVDQUF1QyxFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFDOUYsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUV6RCxPQUFPLGdCQUFnQixDQUFDLEVBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxhQUFhO1lBQ2pILElBQUksRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsYUFBYSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBQyxFQUNuSSxFQUFDLElBQUksRUFBRSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQTtJQUM1RCxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFVBQVU7UUFDOUgsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxJQUFJLFVBQVUsRUFBRSxRQUFRLEVBQzlHLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUE7QUFDeEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFTLHlCQUF5QixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQ2pILFFBQVEsRUFBRSxNQUFNO0lBQ2hCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3JHLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUMvRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUE7SUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLHdCQUF3QixDQUFDLENBQUE7SUFDNUYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxDQUFBO0lBRWxGLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQztRQUN6RixVQUFVLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNO1FBQ2xGLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksa0JBQWtCLENBQUM7UUFDdkYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDakQsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7UUFDNUYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsMENBQTBDLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDeEYsQ0FBQztJQUNELFdBQVcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN2RCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUMvRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUN2RyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDakUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBRXBFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQzFFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzlFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHFDQUFxQyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3hGLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRXpDLE9BQU8sZ0JBQWdCLENBQUMsRUFBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUMxRyxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUk7WUFDN0IsSUFBSSxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsa0JBQWtCLElBQUksR0FBRyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFDLEVBQzFILEVBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQTtJQUNyRCxDQUFDLENBQUMsQ0FBQTtJQUNGLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sb0JBQW9CLEdBQUcsaUNBQWlDLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUVsSSxXQUFXLENBQUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDLEVBQUMsSUFBSSxFQUFFLG1EQUFtRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hHLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztRQUMxRixRQUFRLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxDQUFBO0lBQzFJLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xELGlDQUFpQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUVoRyxXQUFXLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hGLElBQUksRUFBRSxtREFBbUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLFdBQVcsS0FBSyxFQUFFO1FBQ3ZHLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3BHLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVTtRQUNoQyxVQUFVLEVBQUUsd0VBQXdFLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO0tBQzVHLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQyxNQUFNLElBQUksR0FBRyxFQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE1BQU07UUFDdEgsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFDLENBQUE7SUFDaEQsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFM0YsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUMzRSxFQUFDLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsSCxVQUFVLEVBQUUsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQTtJQUNyRyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV6QyxNQUFNLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFDdkcsRUFBQyxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUN4SSxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFBO0FBQ25JLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsR0FBRyxLQUFLO0lBQ2hHLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0SCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUVyRyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRTdDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUscUNBQXFDLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNwRSxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUE7SUFDNUUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSx3QkFBd0IsQ0FBQyxDQUFBO0lBQ3hGLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUMsQ0FBQTtJQUNoRixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFFeEksSUFBSSxXQUFXLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTTtRQUM5RSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ2hJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3hGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLG9DQUFvQyxFQUFFLFlBQVksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzdILENBQUM7SUFDRCxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUM1QyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUMvRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUN2RyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNqRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUVyRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzFHLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLG9EQUFvRCxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3ZHLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRztZQUNaLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUMxQyxRQUFRLEVBQUUsYUFBYTtZQUN2QixJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7WUFDbEMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsaUJBQWlCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFDN0gsV0FBVyxFQUFFLGtCQUFrQixDQUFDO1NBQ25DLENBQUE7UUFFRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7SUFDcEYsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2xGLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZGLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3JELE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzVFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTVDLE1BQU0sb0JBQW9CLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM5RCxNQUFNLHdCQUF3QixHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFdEksSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJO1FBQ3ZELHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN2RyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUksT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNsSCxDQUFDO0lBQ0QsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsRSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQyxNQUFNLGFBQWEsR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNyQyxNQUFNLG9CQUFvQixHQUFHLFVBQVUsRUFBRSxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUN6RSxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDL0YsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekMsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEMsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGlDQUFpQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQ3RILFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUUzRyxJQUFJLFNBQVMsRUFBRSxJQUFJLElBQUksaUJBQWlCLElBQUksQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSTtZQUN6RyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDakksVUFBVSxFQUFFLElBQUksSUFBSSxxQkFBcUIsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsRUFBRSxJQUFJLElBQUksYUFBYTtZQUNqSCxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksVUFBVSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRztZQUMxSCxLQUFLLEVBQUUsSUFBSSxJQUFJLFlBQVksSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2RSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSwyQ0FBMkMsRUFBRSxZQUFZLENBQUMsVUFBVSxJQUFJLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUMxSSxDQUFDO0lBQ0gsQ0FBQztJQUNELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN2QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ2hGLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNoRSxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM1QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsb0JBQW9CLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFDM0YsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUU5RixNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDeEQsTUFBTSxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRTdILElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMxSSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDNUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxpQkFBaUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUMxRyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUM1RyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFDLENBQUMsQ0FBQTtBQUNuSSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNO0lBQzNDLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUUxRixPQUFPLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDdEUsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPO0lBQ2hELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDM0YsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUM3RCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDNUUsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksa0JBQWtCLENBQUMsSUFBSTtRQUN0RixLQUFLLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDakQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFakYsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2pGLElBQUksU0FBUyxDQUFBO0lBQ2IsTUFBTSxpQkFBaUIsR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUMsQ0FBQTtJQUNwSSxNQUFNLGdCQUFnQixHQUFHLEVBQUMsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBQyxDQUFBO0lBRW5JLElBQUksYUFBYSxFQUFFLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuQyxTQUFTLEdBQUcsWUFBWSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUE7SUFDN0UsQ0FBQztTQUFNLElBQUksYUFBYSxFQUFFLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNoRCxTQUFTLEdBQUc7WUFDVixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDcEMsUUFBUSxFQUFFLFlBQVksQ0FBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUN2RCxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztTQUMzRSxDQUFBO0lBQ0gsQ0FBQztTQUFNLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7UUFDekQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3ZILENBQUM7SUFFRCxPQUFPO1FBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFNBQVMsRUFBRSxpQkFBaUI7UUFDNUIsVUFBVSxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQztRQUM3RSxJQUFJLEVBQUUsYUFBYTtRQUNuQixRQUFRO0tBQ1QsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztJQUNuRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUE7SUFDbkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuQyxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXZGLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSx5QkFBeUI7UUFDaEcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzFGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDhDQUE4QyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzVGLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRztRQUNsQixHQUFHLE9BQU87UUFDVixRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxrQkFBa0IsRUFBRSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7S0FDeEQsQ0FBQTtJQUVELE9BQU8sZ0JBQWdCLENBQUM7UUFDdEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDdkQsU0FBUyxFQUFFLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUMxRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3QyxRQUFRO0tBQ1QsRUFBRSxFQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBQyxDQUFDLENBQUE7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNO0lBQzdHLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN4QyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDckcsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3ZFLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQyxNQUFNLGFBQWEsR0FBRyxTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3RELE1BQU0sYUFBYSxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFdkQsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGVBQWUsSUFBSSxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDekYsU0FBUyxFQUFFLElBQUksSUFBSSxpQkFBaUIsSUFBSSxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxVQUFVO1FBQzdGLFFBQVEsQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLFVBQVU7UUFDekgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM3RCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNyRSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzVELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtRQUNqRCxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDbkIsT0FBTztRQUNQLFVBQVU7UUFDVixrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUM3QixNQUFNO1FBQ04sU0FBUztRQUNULFdBQVc7UUFDWCxPQUFPO1FBQ1AsVUFBVSxFQUFFLFNBQVM7S0FDdEIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBQyxDQUFBO0FBQzdDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTztJQUN4RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUUxRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFOUQsSUFBSSxDQUFDLGVBQWU7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxpQ0FBaUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUVuRyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzNELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFekQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLFlBQVksSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzlILE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxFQUFFLFlBQVksQ0FBQyxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdEgsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyRixNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUVuRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsd0NBQXdDLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUMxSCxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFckUsT0FBTyxFQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBQyxDQUFBO0FBQ25JLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsRUFBQyxZQUFZLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFDO0lBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDakMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFL0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFakUsSUFBSSxXQUFXO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsaURBQWlELEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNqSixNQUFNLElBQUkscUJBQXFCLENBQUM7WUFDOUIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLE1BQU07WUFDaEIsUUFBUSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUMvQyxPQUFPLEVBQUUsc0NBQXNDO1NBQ2hELENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxJQUFJLE9BQU87UUFBRSxPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFFakcsTUFBTSxjQUFjLEdBQUcseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEgsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUE7SUFDOUYsTUFBTSx1QkFBdUIsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUE7SUFDbEcsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFBO0lBQ3JKLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXZDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSx1QkFBdUIsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVILE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHVFQUF1RSxFQUN0RyxZQUFZLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDakYsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzdELE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXBILElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzVGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLHlCQUF5QixFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUMvRyxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDaEYsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNyRyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUMsQ0FBQTtJQUV0RixJQUFJLGlCQUFpQjtRQUFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDbEksTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3ZCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUE7SUFDakksTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQTtJQUN4RSxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRWpELElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDaEgsSUFBSSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUU1SCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFBO0lBQy9GLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUNyRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2pELE9BQU8sTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksMEJBQTBCLENBQUE7SUFDekUsQ0FBQyxDQUFDLENBQUE7SUFDRixNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFDaEcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDNUYsTUFBTSxDQUFDLElBQUksSUFBSSxrQkFBa0IsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUNoSCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtJQUN6SSxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELEVBQUUsRUFBRSxTQUFTLEtBQUssRUFBRTtRQUNwQixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ25ELElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUNqRixDQUFDLENBQUMsQ0FBQTtJQUNILE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMvRCxNQUFNLEVBQUUsR0FBRyxVQUFVLEtBQUssRUFBRSxDQUFBO1FBQzVCLE1BQU0sY0FBYyxHQUFHLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBRTdHLE9BQU87WUFDTCxNQUFNLEVBQUUsRUFBRTtZQUNWLEVBQUU7WUFDRixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztZQUNoRCxRQUFRLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3BELElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztZQUNqRixHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDNUMsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLFdBQVcsRUFBRSxvRUFBb0UsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsS0FBSyxFQUFFO1FBQ3hILElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ2pILElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUNqRixDQUFDLENBQUMsQ0FBQTtJQUNILE1BQU0sV0FBVyxHQUFHLHlMQUF5TCxDQUFDLENBQzVNLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRyxLQUFLLE1BQU0sUUFBUSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDakgsS0FBSyxNQUFNLFdBQVcsSUFBSSxxQkFBcUI7UUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDL0YsMkVBQTJFO0lBQzNFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUgsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsOERBQThELENBQUMsRUFBQyxzQkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakksQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hJLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDNUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzSCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlILE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDcEQsaUJBQWlCLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUNyRCw0RUFBNEUsQ0FBQyxFQUFDLHNCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDM0ksTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUN2RCx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksS0FBSyxFQUFFLEVBQUUscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEksaURBQWlEO0lBQ2pELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDeEYsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVO1FBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDckYsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUM3SCxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3ZHLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDdEQsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQ2xHLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDOUMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFDN0csV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUV0QyxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RixHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQTtBQUN2RixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMseUJBQXlCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUN4RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxnQ0FBZ0M7UUFBRSxPQUFPLE9BQU8sQ0FBQTtJQUM3SCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLGdEQUFnRCxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDaEksQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CO1FBQ3BHLHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxrQkFBa0I7UUFDekYsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7SUFFOUYsSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksd0NBQXdDLEVBQUUsQ0FBQztRQUN4RyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxnREFBZ0QsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ2hJLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUNyRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSx3Q0FBd0M7UUFBRSxPQUFPLE9BQU8sQ0FBQTtJQUNySSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3RELE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLDZDQUE2QyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDN0gsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHO1FBQ2YsQ0FBQyxrQkFBa0IsRUFBRSwyQkFBMkIsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDO1FBQ3ZGLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUM7UUFDekUsQ0FBQyxtQkFBbUIsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQztLQUN6RSxDQUFBO0lBQ0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDakMsSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUN0QyxJQUFJLElBQUksSUFBSSxrQkFBa0I7WUFBRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQTtRQUN0RixPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFBO0lBQ3hGLENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksNENBQTRDLEVBQUUsQ0FBQztRQUMvRyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzdILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUMzQyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZO0lBQzNFLGlCQUFpQixDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxpREFBaUQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7SUFDckosTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzdELE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3pHLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2hGLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksbUJBQW1CO1FBQy9FLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUE7SUFDcEYsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQzFELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxDQUFBO0lBQ2pHLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSx3QkFBd0IsQ0FBQyxDQUFBO0lBQ25JLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFFakQsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN0RSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxzREFBc0QsRUFBRSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDNUksQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSw4Q0FBOEMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMxSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSwrQ0FBK0MsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ2pMLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSwrQkFBK0IsRUFBRSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDckgsQ0FBQztJQUVELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEVBQUUsRUFBRSxTQUFTO1lBQ2IsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDL0MsUUFBUSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQzFELElBQUksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDO1NBQ3hGLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRVAsTUFBTSxvQkFBb0IsR0FBRyxRQUFRO1FBQ25DLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUN0RyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2IsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsTUFBTSxFQUFFLEVBQUU7WUFDVixFQUFFLEVBQUUsVUFBVTtZQUNkLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQ2hELFFBQVEsRUFBRSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUMxRCxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztZQUN2RixHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN4RSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNQLHVJQUF1STtJQUN2SSxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUVoRCxLQUFLLE1BQU0sUUFBUSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDakgsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsOERBQThELENBQUMsRUFBQyxzQkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakksQ0FBQztJQUNELEtBQUssTUFBTSxXQUFXLElBQUksa0JBQWtCO1FBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzVGLEtBQUssTUFBTSxXQUFXLElBQUksaUJBQWlCO1FBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzFGLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hJLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM5SCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixDQUFDO1NBQzdFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0UsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUM3QixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUNyRCxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXO0lBQzdDLDRFQUE0RSxDQUFDLEVBQUMsc0JBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDbkgsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzVCLE1BQU0sZUFBZSxHQUFHLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNsSixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ3ZELHdCQUF3QixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsWUFBWSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDN0YsZ0RBQWdEO0lBQ2hELE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUU7WUFDdEcsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO1lBQzlCLElBQUksRUFBRSxTQUFTO1lBQ2YsWUFBWSxFQUFFLFdBQVcsQ0FBQyxRQUFRO1lBQ2xDLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTtZQUNsQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7WUFDbEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3BGLENBQUMsQ0FBQyxDQUFBO0lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsNEJBQTRCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsMEJBQTBCLENBQUMsQ0FBQyxDQUFBO0lBRTVILEtBQUssTUFBTSxTQUFTLElBQUksVUFBVTtRQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3JGLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDdEQsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQ2xHLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDOUMsTUFBTSxVQUFVLEdBQUcsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBQyxDQUFBO0lBQ25GLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQ2hDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFDN0csVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUN6QixDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBQyxDQUFBO0lBRTNFLE9BQU87UUFDTCxVQUFVO1FBQ1YsU0FBUztRQUNULElBQUksRUFBRSxRQUFRO1FBQ2QsUUFBUTtRQUNSLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3pDLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQztJQUNsRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRS9DLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixNQUFNLElBQUkscUJBQXFCLENBQUM7WUFDOUIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLE1BQU07WUFDaEIsUUFBUSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztZQUMvQyxPQUFPLEVBQUUsc0NBQXNDO1NBQ2hELENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxDQUFBO0lBQzVFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksbUJBQW1CLENBQUMsQ0FBQTtJQUMvRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUE7SUFDekUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzVILE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFNUIsSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxPQUFPO1FBQ3RGLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxzREFBc0QsRUFDckYsWUFBWSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDekYsQ0FBQztJQUNELE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3RHLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUM5RSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMxRixNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUM1RSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2pELE1BQU0sY0FBYyxHQUFHLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksU0FBUyxPQUFPLENBQUE7SUFFOUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDM0gsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUNuSCxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRTdFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNyRyxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUV4QyxPQUFPO1lBQ0wsWUFBWSxFQUFFLEdBQUc7WUFDakIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUM1QyxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQzlDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN0QyxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ2xELFNBQVM7WUFDVCxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDdkMsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSx3QkFBd0IsQ0FBQyxDQUFBO0lBQy9ILE1BQU0sT0FBTyxHQUFHLFdBQVc7UUFDekIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksY0FBYztZQUN6QyxDQUFDLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztZQUNwSixDQUFDLENBQUMsRUFBRTtRQUNOLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakYsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLG1CQUFtQjtnQkFBRSxPQUFPLEVBQUUsQ0FBQTtZQUNqRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDbEUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUNwRCxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFFbEksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCO2dCQUFFLE9BQU8sRUFBRSxDQUFBO1lBRXBHLE9BQU8sQ0FBQyxFQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDNUssQ0FBQyxDQUFDLENBQUE7SUFFSixPQUFPLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxXQUFXLElBQUksU0FBUyxFQUFFLEVBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7cGFyc2VyfSBmcm9tIFwiQGxlemVyL2phdmFcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWMsIG1pc3NpbmdUeXBlLCB1bnN1cHBvcnRlZFN5bnRheH0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtsb2NhdGlvbkZyb21PZmZzZXRzLCBtb2R1bGVMb2NhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCBzb3VyY2VTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7Y2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcywgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlLCBpdGVyYXRpb25CaW5kaW5nVHlwZSwgaXRlcmF0aW9uT3BlcmFuZFR5cGUsIGtub3duQ2FsbFJldHVyblR5cGUsIGxpc3RUeXBlLCBtYXBUeXBlLCBvcHRpb25hbFR5cGUsIG9yZGVyZWRNYXBUeXBlLCBvd25lZFJlc291cmNlVHlwZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgc2FtZVZhbHVlVHlwZSwgdHlwZVZhcmlhYmxlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59ICovXG5jb25zdCBzaW1wbGVTdHJpbmdFc2NhcGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFwiXFxcIlwiOiBcIlxcXCJcIixcbiAgXCInXCI6IFwiJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXCIsXG4gIGI6IFwiXFxiXCIsXG4gIGY6IFwiXFxmXCIsXG4gIG46IFwiXFxuXCIsXG4gIHI6IFwiXFxyXCIsXG4gIHM6IFwiIFwiLFxuICB0OiBcIlxcdFwiXG59KVxuY29uc3QgamF2YUJpbmFyeU9wZXJhdGlvbnMgPSBuZXcgTWFwKFtcbiAgW1wiK1wiLCBcIkFkZFwiXSxcbiAgW1wiLVwiLCBcIlN1YnRyYWN0XCJdLFxuICBbXCIqXCIsIFwiTXVsdGlwbHlcIl0sXG4gIFtcIiYmXCIsIFwiQW5kXCJdLFxuICBbXCJ8fFwiLCBcIk9yXCJdLFxuICBbXCI9PVwiLCBcIkphdmFFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJKYXZhTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUNvbnZlcnNpb25Db250ZXh0XG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+fSBiaW5kaW5ncyAtIEV4cGxpY2l0bHkgdHlwZWQgdmlzaWJsZSBiaW5kaW5ncy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbj59IGNsYXNzZXMgLSBSZWZlcmVuY2UgY2xhc3NlcyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gW2N1cnJlbnRDbGFzc10gLSBFbmNsb3NpbmcgcmVmZXJlbmNlIGNsYXNzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9ycyBieSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7U2V0PHN0cmluZz59IGVyYXNlZEJpbmRpbmdOYW1lcyAtIFNvdXJjZSBiaW5kaW5ncyBjb25zdW1lZCBieSBleGFjdCBzZW1hbnRpYyBmb2xkcyBpbiB0aGlzIHNjb3BlLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBFeHBsaWNpdCBtb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZHMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlIHwgdW5kZWZpbmVkfSByZXR1cm5UeXBlIC0gRW5jbG9zaW5nIHJldHVybiB0eXBlLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUGFyYW1ldGVyPn0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENvbXBsZXRlIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbmFtZUxvY2F0aW9uIC0gUGFyc2VyLW93bmVkIG5hbWUgbG9jYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIEZ1bmN0aW9uIG5hbWUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHJldHVyblR5cGUgLSBTZW1hbnRpYyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcltdfSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBkaXJlY3QgY2hpbGQgc3ludGF4IG5vZGVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJlbnQgc3ludGF4IG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IENoaWxkIHN5bnRheCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gZGlyZWN0Q2hpbGRyZW4obm9kZSkge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG5cbiAgZm9yIChsZXQgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKSBjaGlsZHJlbi5wdXNoKGNoaWxkKVxuXG4gIHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIFJldHVybnMgc3RydWN0dXJhbCBkaXJlY3QgY2hpbGRyZW4sIGV4Y2x1ZGluZyBrbm93biBncmFtbWFyIGRlbGltaXRlcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBzeW50YXggbm9kZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gTmFtZWQgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKSB7XG4gIHJldHVybiBkaXJlY3RDaGlsZHJlbihub2RlKS5maWx0ZXIoKGNoaWxkKSA9PiAhW1wie1wiLCBcIn1cIiwgXCIoXCIsIFwiKVwiLCBcIixcIiwgXCI7XCIsIFwiLlwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgZGVzY2VuZGFudCBzeW50YXggbm9kZXMgd2l0aCBhIGdpdmVuIG5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFJvb3Qgc3ludGF4IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5vZGUgbmFtZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gTWF0Y2hpbmcgZGVzY2VuZGFudHMuXG4gKi9cbmZ1bmN0aW9uIGRlc2NlbmRhbnRzKG5vZGUsIG5hbWUpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdXG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBkaXJlY3RDaGlsZHJlbihub2RlKSkge1xuICAgIGlmIChjaGlsZC5uYW1lID09IG5hbWUpIG1hdGNoZXMucHVzaChjaGlsZClcbiAgICBtYXRjaGVzLnB1c2goLi4uZGVzY2VuZGFudHMoY2hpbGQsIG5hbWUpKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXNcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBvbmUgZGlyZWN0IGNoaWxkIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDaGlsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IENoaWxkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkQ2hpbGQobm9kZSwgbmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjaGlsZCA9IG5vZGUuZ2V0Q2hpbGQobmFtZSlcblxuICBpZiAoIWNoaWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGAke25vZGUubmFtZX0gd2l0aG91dCAke25hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gIHJldHVybiBjaGlsZFxufVxuXG4vKipcbiAqIFJldHVybnMgYSBub3JtYWxpemVkIExlemVyIG5vZGUgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIExlemVyIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2UgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIHJldHVybiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIG5vZGUuZnJvbSwgbm9kZS50bylcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHNvdXJjZSB0ZXh0IGJlbG9uZ2luZyB0byBhIHN5bnRheCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMZXplciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IE5vZGUgdGV4dC5cbiAqL1xuZnVuY3Rpb24gbm9kZVRleHQobm9kZSwgc291cmNlKSB7XG4gIHJldHVybiBzb3VyY2Uuc2xpY2Uobm9kZS5mcm9tLCBub2RlLnRvKVxufVxuXG4vKipcbiAqIFByb3ZlcyBhbiBleGFjdCBwYXJzZXItc3RydWN0dXJlZCBKYXZhIHF1YWxpZmllZCBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBJZGVudGlmaWVyIG9yIGZpZWxkLWFjY2VzcyBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gRXhhY3Qgc3RydWN0dXJhbCBuYW1lIHBhcnRzLlxuICovXG5mdW5jdGlvbiBxdWFsaWZpZWROYW1lUGFydHMobm9kZSwgc291cmNlKSB7XG4gIGlmIChbXCJJZGVudGlmaWVyXCIsIFwiVHlwZU5hbWVcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkgcmV0dXJuIFtub2RlVGV4dChub2RlLCBzb3VyY2UpXVxuICBpZiAoIVtcIkZpZWxkQWNjZXNzXCIsIFwiU2NvcGVkVHlwZU5hbWVcIl0uaW5jbHVkZXMobm9kZS5uYW1lKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMikgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBsZWZ0ID0gcXVhbGlmaWVkTmFtZVBhcnRzKGNoaWxkcmVuWzBdLCBzb3VyY2UpXG4gIGNvbnN0IHJpZ2h0ID0gcXVhbGlmaWVkTmFtZVBhcnRzKGNoaWxkcmVuWzFdLCBzb3VyY2UpXG5cbiAgcmV0dXJuIGxlZnQgJiYgcmlnaHQgPyBbLi4ubGVmdCwgLi4ucmlnaHRdIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBvbmx5IGFjY2VwdGVkIEphdmEgT3B0aW9uYWwgdHlwZS9mYWN0b3J5IHN5bWJvbCBzcGVsbGluZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcnNlci1xdWFsaWZpZWQgc3ltYm9sIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaWRlbnRpZmllcyBqYXZhLnV0aWwuT3B0aW9uYWwgb3IgT3B0aW9uYWwuXG4gKi9cbmZ1bmN0aW9uIGlzSmF2YU9wdGlvbmFsU3ltYm9sKG5vZGUsIHNvdXJjZSkge1xuICBjb25zdCBwYXJ0cyA9IHF1YWxpZmllZE5hbWVQYXJ0cyhub2RlLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHBhcnRzPy5qb2luKFwiLlwiKSA9PSBcImphdmEudXRpbC5PcHRpb25hbFwiIHx8IHBhcnRzPy5qb2luKFwiLlwiKSA9PSBcIk9wdGlvbmFsXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN1cHBvcnRlZCBKYXZhIGV4cHJlc3Npb24gbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTGV6ZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gW2V4cGVjdGVkVHlwZV0gLSBDb250ZXh0dWFsIHNlbWFudGljIHR5cGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyZW50aGVzaXplZCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZXhwZWN0ZWRUeXBlKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG5hbWU6IG5vZGVUZXh0KG5vZGUsIHNvdXJjZSl9LCB7bmFtZTogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcInRoaXNcIikge1xuICAgIGlmICghY29udGV4dC5jdXJyZW50Q2xhc3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNlaXZlciBvdXRzaWRlIGEgcmVmZXJlbmNlIGNsYXNzXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtjbGFzc0lkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbnRleHQuY3VycmVudENsYXNzLmlkKSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7cmVjZWl2ZXI6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCByZWNlaXZlciA9IGNoaWxkcmVuWzBdXG4gICAgY29uc3QgbWVtYmVyID0gY2hpbGRyZW5bMV1cblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcInRoaXNcIiB8fCBtZW1iZXI/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgIWNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICBpZiAocmVjZWl2ZXIgJiYga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaXZhdGUgcmVmZXJlbmNlLWNsYXNzIGZpZWxkIGFjY2Vzc1wiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJmaWVsZCBhY2Nlc3Mgb3V0c2lkZSB0aGUgZGVjbGFyaW5nIHJlY2VpdmVyXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IGNvbnRleHQuY3VycmVudENsYXNzLmZpZWxkcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG5vZGVUZXh0KG1lbWJlciwgc291cmNlKSlcblxuICAgIGlmICghZmllbGQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHVua25vd24gcHJpdmF0ZSBmaWVsZCAnJHtub2RlVGV4dChtZW1iZXIsIHNvdXJjZSl9J2AsIG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFJlYWRcIiksIGxvY2F0aW9uLFxuICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSl9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG5cbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkgPT0gXCJ0cnVlXCJ9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZVN0cmluZ0xpdGVyYWwobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9LCB7bGl0ZXJhbDogbG9jYXRpb259KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIm51bGxcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm51bGwgcmVmZXJlbmNlXCIsIGxvY2F0aW9uKVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3QgdHlwZU5vZGUgPSBjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gW1wiR2VuZXJpY1R5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKGNoaWxkLm5hbWUpKVxuICAgIGNvbnN0IG5hbWVOb2RlID0gdHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKVswXSA6IHR5cGVOb2RlXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gbm9kZS5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghdHlwZU5vZGUgfHwgIW5hbWVOb2RlIHx8ICFhcmd1bWVudExpc3QgfHwgIWRlY2xhcmF0aW9uIHx8IG5vZGUuZ2V0Q2hpbGQoXCJDbGFzc0JvZHlcIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjb25zdHJ1Y3Rpb24gb2YgYW4gdW5rbm93biBub21pbmFsIG9yIGFub255bW91cyBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYXJndW1lbnROb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImdlbmVyaWMgcmVmZXJlbmNlIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgY29uc3QgY2xhc3NMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIiksIGxvY2F0aW9uLFxuICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2VUeXBlKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBjbGFzc0xvY2F0aW9uKX0sIHtjbGFzczogY2xhc3NMb2NhdGlvbn0pXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3duZWQgcmVzb3VyY2UgY29uc3RydWN0aW9uXCIsIG5vZGVMb2NhdGlvbih0eXBlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHR5cGVBcmd1bWVudHNOb2RlID0gdHlwZU5vZGUuZ2V0Q2hpbGQoXCJUeXBlQXJndW1lbnRzXCIpXG5cbiAgICBpZiAodHlwZU5vZGUubmFtZSA9PSBcIkdlbmVyaWNUeXBlXCIgJiYgIXR5cGVBcmd1bWVudHNOb2RlKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGdlbmVyaWMgcmVjb3JkIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gdHlwZUFyZ3VtZW50c05vZGVcbiAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVBcmd1bWVudHNOb2RlKS5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChcbiAgICAgICAgYXJndW1lbnQsIGBSZWNvcmQgJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGFwcGxpY2F0aW9uYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBhcmd1bWVudHM6IGFyZ3VtZW50Tm9kZXMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICAgIGluc3RhbnRpYXRlZFJlY29yZEZpZWxkVHlwZShkZWNsYXJhdGlvbiwgdHlwZUFyZ3VtZW50cywgaW5kZXgpKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJlY29yZDogcmVjb3JkVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgdHlwZUFyZ3VtZW50cylcbiAgICB9LCB7cmVjb3JkOiBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3Qgb3BlcmF0b3JOb2RlID0gbm9kZS5nZXRDaGlsZChcIkxvZ2ljT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkFyaXRoT3BcIilcbiAgICBjb25zdCBvcGVyYW5kID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJMb2dpY09wXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyaXRoT3BcIilcbiAgICBjb25zdCBvcGVyYXRvciA9IG9wZXJhdG9yTm9kZSA/IG5vZGVUZXh0KG9wZXJhdG9yTm9kZSwgc291cmNlKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFvcGVyYXRvck5vZGUgfHwgIW9wZXJhbmQgfHwgY2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgKG9wZXJhdG9yICE9IFwiIVwiICYmIG9wZXJhdG9yICE9IFwiLVwiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuYXJ5IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdG9yID09IFwiIVwiICYmIG9wZXJhbmQubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIiAmJiBpc0VxdWFsc0ludm9jYXRpb24ob3BlcmFuZCwgc291cmNlKSAmJlxuICAgICAgIWlzWmVyb0FyZ3VtZW50UmVjb3JkTWVtYmVySW52b2NhdGlvbihvcGVyYW5kLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkge1xuICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdFcXVhbGl0eShvcGVyYW5kLCB0cnVlLCBsb2NhdGlvbiwgbm9kZUxvY2F0aW9uKG9wZXJhdG9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfVxuXG4gICAgY29uc3Qgc2VtYW50aWMgPSB3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG9wZXJhbmQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3JOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pLCBvcGVyYXRvciA9PSBcIiFcIiA/IFwiTm90XCIgOiBcIk5lZ2F0ZVwiKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBuYW1lZCA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IG9wZXJhdG9yTm9kZSA9IG5vZGUuZ2V0Q2hpbGQoXCJDb21wYXJlT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkFyaXRoT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkxvZ2ljT3BcIikgPz8gbm9kZS5nZXRDaGlsZChcIkJpdE9wXCIpXG5cbiAgICBpZiAoIW9wZXJhdG9yTm9kZSB8fCBuYW1lZC5sZW5ndGggIT0gMykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImJpbmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuXG4gICAgY29uc3Qgb3BlcmFuZHMgPSBbbmFtZWRbMF0sIG5hbWVkWzJdXVxuICAgIGNvbnN0IHVuc3VwcG9ydGVkT3BlcmFuZCA9IG9wZXJhbmRzLmZpbmQoKG9wZXJhbmQpID0+ICFpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKG9wZXJhbmQpKVxuXG4gICAgaWYgKHVuc3VwcG9ydGVkT3BlcmFuZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCB1bnN1cHBvcnRlZE9wZXJhbmQubmFtZSwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkT3BlcmFuZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICBjb25zdCBvcGVyYXRvciA9IG5vZGVUZXh0KG9wZXJhdG9yTm9kZSwgc291cmNlKVxuXG4gICAgaWYgKCFqYXZhQmluYXJ5T3BlcmF0aW9ucy5oYXMob3BlcmF0b3IpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBiaW5hcnkgJHtvcGVyYXRvcn1gLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmRzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKG9wZXJhbmRzWzFdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKGphdmFCaW5hcnlPcGVyYXRpb25zLmdldChvcGVyYXRvcikpKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJUZXJuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IHF1ZXN0aW9uID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI/XCIgfHwgKGNoaWxkLm5hbWUgPT0gXCJMb2dpY09wXCIgJiYgbm9kZVRleHQoY2hpbGQsIHNvdXJjZSkgPT0gXCI/XCIpKVxuICAgIGNvbnN0IGNvbG9uID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIgfHwgKGNoaWxkLm5hbWUgPT0gXCJMb2dpY09wXCIgJiYgbm9kZVRleHQoY2hpbGQsIHNvdXJjZSkgPT0gXCI6XCIpKVxuICAgIGNvbnN0IG5hbWVkID0gY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQgIT09IHF1ZXN0aW9uICYmIGNoaWxkICE9PSBjb2xvbilcblxuICAgIGlmICghcXVlc3Rpb24gfHwgIWNvbG9uIHx8IG5hbWVkLmxlbmd0aCAhPSAzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidGVybmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYWx0ZXJuYXRlOiBjb252ZXJ0RXhwcmVzc2lvbihuYW1lZFsyXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25kaXRpb246IGNvbnZlcnRFeHByZXNzaW9uKG5hbWVkWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRFeHByZXNzaW9uKG5hbWVkWzFdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge1xuICAgICAgYWx0ZXJuYXRlOiBub2RlTG9jYXRpb24obmFtZWRbMl0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29sb246IG5vZGVMb2NhdGlvbihjb2xvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25kaXRpb246IG5vZGVMb2NhdGlvbihuYW1lZFswXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBjb25zZXF1ZW50OiBub2RlTG9jYXRpb24obmFtZWRbMV0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihxdWVzdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KSkpXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiTWV0aG9kSW52b2NhdGlvblwiKSB7XG4gICAgaWYgKGlzRXF1YWxzSW52b2NhdGlvbihub2RlLCBzb3VyY2UpICYmICFpc1plcm9Bcmd1bWVudFJlY29yZE1lbWJlckludm9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpIHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiTWV0aG9kTmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICByZXR1cm4gY29udmVydFN0cmluZ0VxdWFsaXR5KG5vZGUsIGZhbHNlLCBsb2NhdGlvbiwgbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiTWV0aG9kTmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJBcmd1bWVudExpc3RcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudE5vZGVzID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdClcbiAgICBjb25zdCByZWNlaXZlciA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWV0aG9kID0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHJlY2VpdmVyVGV4dCA9IHJlY2VpdmVyID8gbm9kZVRleHQocmVjZWl2ZXIsIHNvdXJjZSkgOiBcIlwiXG5cbiAgICBpZiAocmVjZWl2ZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiYgbWV0aG9kID09IFwiZ2V0TWVzc2FnZVwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDAgJiZcbiAgICAgIGNvbnRleHQuYmluZGluZ3MuZ2V0KHJlY2VpdmVyVGV4dCk/LmtpbmQgPT0gXCJFcnJvclR5cGVcIikge1xuICAgICAgY29uc3QgcmVjZWl2ZXJMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvck1lc3NhZ2VSZWFkXCIpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbjogcmVjZWl2ZXJMb2NhdGlvbiwgbmFtZTogcmVjZWl2ZXJUZXh0fSwge1xuICAgICAgICAgIG5hbWU6IHJlY2VpdmVyTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIFtcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJ0b1N0cmluZ1wiLCBcImNsb25lXCIsIFwibm90aWZ5XCIsIFwibm90aWZ5QWxsXCIsIFwid2FpdFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicmVmbGVjdGl2ZSBvciBPYmplY3QgbWVtYmVyIGFjY2Vzc1wiLCBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlZmVyZW5jZVR5cGV9ICovIChcbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG4gICAgICBjb25zdCBkZWNsYXJlZE1ldGhvZCA9IGNvbnRleHQuY2xhc3Nlcy5nZXQocmVjZWl2ZXJUeXBlLmRlY2xhcmF0aW9uSWQpPy5tZXRob2RzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gbWV0aG9kKVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZGVjbGFyZWRNZXRob2Q/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb24sIG1ldGhvZDogZGVjbGFyZWRNZXRob2Q/LmlkID8/IG1ldGhvZCxcbiAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCl9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBpc0phdmFPcHRpb25hbFN5bWJvbChyZWNlaXZlciwgc291cmNlKSkge1xuICAgICAgY29uc3QgZmFjdG9yeUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIGlmIChtZXRob2QgPT0gXCJlbXB0eVwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsTm9uZVwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgICAgYWJzZW5jZTogZmFjdG9yeUxvY2F0aW9uLFxuICAgICAgICAgIGZhY3Rvcnk6IGZhY3RvcnlMb2NhdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PSBcIm9mXCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMSkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxTb21lXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgICAgICAgZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkKVxuICAgICAgICB9LCB7ZmFjdG9yeTogZmFjdG9yeUxvY2F0aW9uLCBzb21lOiBmYWN0b3J5TG9jYXRpb259KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGB1bnN1cHBvcnRlZCBPcHRpb25hbC4ke21ldGhvZH1gLCBmYWN0b3J5TG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlcj8ubmFtZSA9PSBcIklkZW50aWZpZXJcIiAmJiBjb250ZXh0LmJpbmRpbmdzLmdldChyZWNlaXZlclRleHQpPy5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICAgIGNvbnN0IG9wZXJhbmQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklkZW50aWZpZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgKVxuICAgICAgY29uc3Qgb3BlcmF0aW9uTG9jYXRpb24gPSBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgaWYgKG1ldGhvZCA9PSBcImlzUHJlc2VudFwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsSXNQcmVzZW50XCIpLCBsb2NhdGlvbiwgb3BlcmFuZH0sIHtcbiAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0aW9uTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT0gXCJnZXRcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbFVud3JhcFwiKSwgbG9jYXRpb24sIG9wZXJhbmR9LCB7XG4gICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdGlvbkxvY2F0aW9uLFxuICAgICAgICAgIHVud3JhcDogb3BlcmF0aW9uTG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgdW5zdXBwb3J0ZWQgT3B0aW9uYWwuJHttZXRob2R9YCwgb3BlcmF0aW9uTG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcIm9mXCIgJiYgcmVjZWl2ZXJUZXh0ID09IFwiamF2YS51dGlsLkxpc3RcIikge1xuICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiID8gZXhwZWN0ZWRUeXBlLmVsZW1lbnRUeXBlIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZWxlbWVudHM6IGFyZ3VtZW50Tm9kZXMubWFwKChhcmd1bWVudCkgPT4gY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGVsZW1lbnRUeXBlKSksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvblxuICAgICAgfSwge2ZhY3Rvcnk6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJvZlwiICYmIHJlY2VpdmVyVGV4dCA9PSBcImphdmEudXRpbC5NYXBcIikge1xuICAgICAgaWYgKGFyZ3VtZW50Tm9kZXMubGVuZ3RoICUgMiAhPSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiTWFwLm9mIG9kZCBhcmd1bWVudCBjb3VudFwiLCBsb2NhdGlvbilcbiAgICAgIGlmIChhcmd1bWVudE5vZGVzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJqYXZhLnV0aWwuTWFwLm9mIHN1cHBvcnRzIGF0IG1vc3QgdGVuIGVudHJpZXNcIiwgbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBleHBlY3RlZFR5cGU/LmtpbmQgPT0gXCJNYXBUeXBlXCIgPyBleHBlY3RlZFR5cGUudmFsdWVUeXBlIDogdW5kZWZpbmVkXG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmd1bWVudE5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgICAgICBjb25zdCBrZXlOb2RlID0gYXJndW1lbnROb2Rlc1tpbmRleF1cblxuICAgICAgICBpZiAoa2V5Tm9kZS5uYW1lICE9IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgb3RoZXIgdGhhbiBhIHN0cmluZyBsaXRlcmFsXCIsIG5vZGVMb2NhdGlvbihrZXlOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBkaXJlY3RDaGlsZHJlbihhcmd1bWVudExpc3QpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiLFwiICYmXG4gICAgICAgICAgY2hpbGQuZnJvbSA+PSBrZXlOb2RlLnRvICYmIGNoaWxkLnRvIDw9IGFyZ3VtZW50Tm9kZXNbaW5kZXggKyAxXS5mcm9tKVxuXG4gICAgICAgIGlmICghc2VwYXJhdG9yKSB0aHJvdyBuZXcgRXJyb3IoXCJMZXplciBvbWl0dGVkIHRoZSBKYXZhIE1hcC5vZiBlbnRyeSBzZXBhcmF0b3IuXCIpXG4gICAgICAgIGVudHJpZXMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBrZXk6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RyaW5nTGl0ZXJhbH0gKi8gKGNvbnZlcnRFeHByZXNzaW9uKGtleU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBFbnRyeVwiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBrZXlOb2RlLmZyb20sIGFyZ3VtZW50Tm9kZXNbaW5kZXggKyAxXS50byksXG4gICAgICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50Tm9kZXNbaW5kZXggKyAxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdmFsdWVUeXBlKVxuICAgICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihzZXBhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtlbnRyaWVzLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNYXBMaXRlcmFsXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgICAgZmFjdG9yeTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXIgJiYgbWV0aG9kID09IFwiZ2V0XCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMSkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIubmFtZSA9PSBcIklkZW50aWZpZXJcIiA/IGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgfHxcbiAgICAgICAgKCFyZWNlaXZlclR5cGUgJiYgYXJndW1lbnROb2Rlc1swXS5uYW1lID09IFwiU3RyaW5nTGl0ZXJhbFwiKSkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICAgIGtleTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwicHJvdmVuXCIpXG4gICAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGluZGV4OiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHRvdGFsaXR5OiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJmYWlsLW9uLWFic2VuY2VcIilcbiAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcInNpemVcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgICBmaWVsZDogbWV0aG9kLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcmVjZWl2ZXI6IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgcmVjZWl2ZXJUZXh0ID09IFwiTWFpblwiICYmIGNvbnRleHQuY3VycmVudENsYXNzICYmICFjb250ZXh0LmJpbmRpbmdzLmhhcyhyZWNlaXZlclRleHQpKSB7XG4gICAgICBjb25zdCBsb2NhbFNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChtZXRob2QpXG5cbiAgICAgIGlmIChsb2NhbFNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnROb2Rlcy5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgbG9jYWxTaWduYXR1cmUucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZTogbWV0aG9kLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgICAgY2FsbGVlOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIpIHtcbiAgICAgIGNvbnN0IHF1YWxpZmllZE5hbWUgPSBgJHtyZWNlaXZlclRleHR9LiR7bWV0aG9kfWBcbiAgICAgIGNvbnN0IHF1YWxpZmllZFNpZ25hdHVyZSA9IGNvbnRleHQuZnVuY3Rpb25zLmdldChxdWFsaWZpZWROYW1lKVxuXG4gICAgICBpZiAocXVhbGlmaWVkU2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudE5vZGVzLm1hcCgoY2hpbGQsIGluZGV4KSA9PlxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGNoaWxkLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBxdWFsaWZpZWRTaWduYXR1cmUucGFyYW1ldGVyc1tpbmRleF0/LnR5cGUpKVxuXG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZTogcXVhbGlmaWVkTmFtZSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgZmllbGQ6IG1ldGhvZCxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWVtYmVyUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgIH0sIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRSZWNlaXZlciA9IHJlY2VpdmVyXG5cbiAgICBpZiAodW5zdXBwb3J0ZWRSZWNlaXZlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1ldGhvZCBpbnZvY2F0aW9uIHJlY2VpdmVyXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gYXJndW1lbnROb2Rlcy5maW5kKChjaGlsZCkgPT4gIWlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUoY2hpbGQpKVxuXG4gICAgaWYgKHVuc3VwcG9ydGVkQXJndW1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYG1ldGhvZCBhcmd1bWVudCAke3Vuc3VwcG9ydGVkQXJndW1lbnQubmFtZX1gLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRBcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnROb2Rlcy5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGNoaWxkLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBzaWduYXR1cmU/LnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZTogbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgY2FsbGVlOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBub2RlLm5hbWUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgb25lIHBhcnNlci1uYXRpdmUgSmF2YSBzdHJpbmcgZXF1YWxpdHkgaW52b2NhdGlvbiBmb3JtLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgaW52b2NhdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBpbnZvY2F0aW9uIHNwZWxscyBgLmVxdWFsc2Agd2l0aCBhIHJlY2VpdmVyLlxuICovXG5mdW5jdGlvbiBpc0VxdWFsc0ludm9jYXRpb24obm9kZSwgc291cmNlKSB7XG4gIGNvbnN0IG1ldGhvZE5hbWUgPSBub2RlLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICBjb25zdCByZWNlaXZlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG5cbiAgcmV0dXJuIG1ldGhvZE5hbWUgIT0gbnVsbCAmJiBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpID09IFwiZXF1YWxzXCIgJiYgcmVjZWl2ZXJzLmxlbmd0aCA9PSAxXG59XG5cbi8qKlxuICogRGlzdGluZ3Vpc2hlcyBhIHplcm8tYXJndW1lbnQgbm9taW5hbCBmaWVsZCBhY2Nlc3NvciBmcm9tIEphdmEgc3RyaW5nIGVxdWFsaXR5IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWV0aG9kIGludm9jYXRpb24gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBpcyBhIGtub3duIHJlY29yZCByZWNlaXZlciB3aXRoIG5vIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gaXNaZXJvQXJndW1lbnRSZWNvcmRNZW1iZXJJbnZvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gbm9kZS5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCByZWNlaXZlciA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG5cbiAgcmV0dXJuIGFyZ3VtZW50TGlzdCAhPSBudWxsICYmIHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpLmxlbmd0aCA9PSAwICYmIHJlY2VpdmVyICE9IG51bGwgJiZcbiAgICBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIlxufVxuXG4vKipcbiAqIENvbnZlcnRzIEphdmEgYC5lcXVhbHNgIG9yIGl0cyBkaXJlY3RseSBuZWdhdGVkIGZvcm0gd2l0aG91dCBzb3VyY2UtdGV4dCBpbmZlcmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcnNlciBtZXRob2QgaW52b2NhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbmVnYXRlZCAtIFdoZXRoZXIgYSBwYXJzZXItb3duZWQgdW5hcnkgbm90IHdyYXBzIHRoZSBpbnZvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBXaG9sZSBlcXVhbGl0eSBleHByZXNzaW9uIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3BlcmF0b3JMb2NhdGlvbiAtIFBhcnNlci1vd25lZCBvcGVyYXRvci9tZXRob2QgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBBZGFwdGVkIGVxdWFsaXR5IGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdHJpbmdFcXVhbGl0eShub2RlLCBuZWdhdGVkLCBsb2NhdGlvbiwgb3BlcmF0b3JMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBhcmd1bWVudExpc3QgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuICBjb25zdCByZWNlaXZlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHVuc3VwcG9ydGVkQXJndW1lbnQgPSBhcmd1bWVudHNfLmZpbmQoKGNoaWxkKSA9PiAhaXNTdXBwb3J0ZWRFeHByZXNzaW9uTm9kZShjaGlsZCkpXG5cbiAgaWYgKHJlY2VpdmVycy5sZW5ndGggIT0gMSB8fCBhcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8IHVuc3VwcG9ydGVkQXJndW1lbnQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic3RyaW5nIGVxdWFscyBpbnZvY2F0aW9uXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+fSAqL1xuICBjb25zdCByYW5nZXMgPSB7b3BlcmF0b3I6IG9wZXJhdG9yTG9jYXRpb259XG5cbiAgaWYgKG5lZ2F0ZWQpIHtcbiAgICByYW5nZXMuZXF1YWxpdHlPcGVyYXRvciA9IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiTWV0aG9kTmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuXG4gIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgbGVmdDogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICByaWdodDogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgfSwgcmFuZ2VzKSwgbmVnYXRlZCA/IFwiU3RyaW5nTm90RXF1YWxcIiA6IFwiU3RyaW5nRXF1YWxcIilcblxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc2VtYW50aWMpKVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgTGV6ZXIgbm9kZSBpcyBpbiB0aGUgZXhwcmVzc2lvbiBzdWJzZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgc3ludGF4IG5vZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUobm9kZSkge1xuICByZXR1cm4gW1xuICAgIFwiSWRlbnRpZmllclwiLFxuICAgIFwiSW50ZWdlckxpdGVyYWxcIixcbiAgICBcIkJvb2xlYW5MaXRlcmFsXCIsXG4gICAgXCJTdHJpbmdMaXRlcmFsXCIsXG4gICAgXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICBcIlRlcm5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJNZXRob2RJbnZvY2F0aW9uXCIsXG4gICAgXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIixcbiAgICBcIkZpZWxkQWNjZXNzXCIsXG4gICAgXCJ0aGlzXCIsXG4gICAgXCJudWxsXCIsXG4gICAgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiXG4gIF0uaW5jbHVkZXMobm9kZS5uYW1lKVxufVxuXG4vKipcbiAqIEFwcGxpZXMgSmF2YSBVbmljb2RlIHRyYW5zbGF0aW9uIGJlZm9yZSB0b2tlbi1sZXZlbCBzdHJpbmcgZXNjYXBlIGRlY29kaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IGxpdGVyYWwgLSBQYXJzZXItY29uZmlybWVkIEphdmEgc3RyaW5nIGxpdGVyYWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIExpdGVyYWwgc291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge3N0cmluZ30gVW5pY29kZS10cmFuc2xhdGVkIGxpdGVyYWwuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zbGF0ZVVuaWNvZGVFc2NhcGVzKGxpdGVyYWwsIGxvY2F0aW9uKSB7XG4gIGxldCB0cmFuc2xhdGVkID0gXCJcIlxuICBsZXQgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyA9IDBcbiAgbGV0IHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSA9IGZhbHNlXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpdGVyYWwubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gbGl0ZXJhbFtpbmRleF1cbiAgICBjb25zdCBlbGlnaWJsZSA9IGNoYXJhY3RlciA9PSBcIlxcXFxcIiAmJiAocHJldmlvdXNXYXNVbmljb2RlRXNjYXBlIHx8IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgJSAyID09IDApXG5cbiAgICBpZiAoZWxpZ2libGUgJiYgbGl0ZXJhbFtpbmRleCArIDFdID09IFwidVwiKSB7XG4gICAgICBsZXQgZGlnaXRzU3RhcnQgPSBpbmRleCArIDJcblxuICAgICAgd2hpbGUgKGxpdGVyYWxbZGlnaXRzU3RhcnRdID09IFwidVwiKSBkaWdpdHNTdGFydCsrXG5cbiAgICAgIGNvbnN0IGhleGFkZWNpbWFsID0gbGl0ZXJhbC5zbGljZShkaWdpdHNTdGFydCwgZGlnaXRzU3RhcnQgKyA0KVxuICAgICAgY29uc3QgaXNIZXhhZGVjaW1hbCA9IGhleGFkZWNpbWFsLmxlbmd0aCA9PSA0ICYmIFsuLi5oZXhhZGVjaW1hbF0uZXZlcnkoKGRpZ2l0KSA9PlxuICAgICAgICAoZGlnaXQgPj0gXCIwXCIgJiYgZGlnaXQgPD0gXCI5XCIpIHx8IChkaWdpdCA+PSBcIkFcIiAmJiBkaWdpdCA8PSBcIkZcIikgfHwgKGRpZ2l0ID49IFwiYVwiICYmIGRpZ2l0IDw9IFwiZlwiKVxuICAgICAgKVxuXG4gICAgICBpZiAoIWlzSGV4YWRlY2ltYWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzdHJpbmcgZXNjYXBlXCIsIGxvY2F0aW9uKVxuXG4gICAgICBjb25zdCB0cmFuc2xhdGVkQ2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIucGFyc2VJbnQoaGV4YWRlY2ltYWwsIDE2KSlcblxuICAgICAgdHJhbnNsYXRlZCArPSB0cmFuc2xhdGVkQ2hhcmFjdGVyXG4gICAgICBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzID0gdHJhbnNsYXRlZENoYXJhY3RlciA9PSBcIlxcXFxcIiA/IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgKyAxIDogMFxuICAgICAgcHJldmlvdXNXYXNVbmljb2RlRXNjYXBlID0gdHJ1ZVxuICAgICAgaW5kZXggPSBkaWdpdHNTdGFydCArIDNcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdHJhbnNsYXRlZCArPSBjaGFyYWN0ZXJcbiAgICBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzID0gY2hhcmFjdGVyID09IFwiXFxcXFwiID8gY29uc2VjdXRpdmVCYWNrc2xhc2hlcyArIDEgOiAwXG4gICAgcHJldmlvdXNXYXNVbmljb2RlRXNjYXBlID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cmFuc2xhdGVkXG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgYWNjZXB0ZWQgZXNjYXBlcyBmcm9tIG9uZSBwYXJzZXItY29uZmlybWVkIEphdmEgc3RyaW5nIGxpdGVyYWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgU3RyaW5nTGl0ZXJhbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IERlY29kZWQgVW5pY29kZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZVN0cmluZ0xpdGVyYWwobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBsaXRlcmFsID0gdHJhbnNsYXRlVW5pY29kZUVzY2FwZXMobm9kZVRleHQobm9kZSwgc291cmNlKSwgbG9jYXRpb24pXG4gIGxldCB2YWx1ZSA9IFwiXCJcblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbGl0ZXJhbC5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gbGl0ZXJhbFtpbmRleF1cblxuICAgIGlmIChjaGFyYWN0ZXIgPT0gXCJcXFwiXCIgfHwgY2hhcmFjdGVyID09IFwiXFxuXCIgfHwgY2hhcmFjdGVyID09IFwiXFxyXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChjaGFyYWN0ZXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgIHZhbHVlICs9IGNoYXJhY3RlclxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggKyAxID49IGxpdGVyYWwubGVuZ3RoIC0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImludmFsaWQgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBlc2NhcGVkID0gbGl0ZXJhbFsrK2luZGV4XVxuICAgIGNvbnN0IHNpbXBsZSA9IHNpbXBsZVN0cmluZ0VzY2FwZXNbZXNjYXBlZF1cblxuICAgIGlmIChzaW1wbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgKz0gc2ltcGxlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChlc2NhcGVkID49IFwiMFwiICYmIGVzY2FwZWQgPD0gXCI3XCIpIHtcbiAgICAgIGxldCBvY3RhbCA9IGVzY2FwZWRcbiAgICAgIGNvbnN0IG1heGltdW1MZW5ndGggPSBlc2NhcGVkIDw9IFwiM1wiID8gMyA6IDJcblxuICAgICAgd2hpbGUgKG9jdGFsLmxlbmd0aCA8IG1heGltdW1MZW5ndGggJiYgbGl0ZXJhbFtpbmRleCArIDFdID49IFwiMFwiICYmIGxpdGVyYWxbaW5kZXggKyAxXSA8PSBcIjdcIikge1xuICAgICAgICBvY3RhbCArPSBsaXRlcmFsWysraW5kZXhdXG4gICAgICB9XG5cbiAgICAgIHZhbHVlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KG9jdGFsLCA4KSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBpZiAoIWhhc09ubHlVbmljb2RlU2NhbGFycyh2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIFVuaWNvZGUgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cGxpY2l0IEphdmEgcmV0dXJuIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJldHVyblN0YXRlbWVudH0gU2VtYW50aWMgcmV0dXJuLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lICE9IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IGV4cHJlc3Npb25Ob2RlcyA9IGRpcmVjdENoaWxkcmVuKHN0YXRlbWVudCkuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcInJldHVyblwiICYmIGNoaWxkLm5hbWUgIT0gXCI7XCIpXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBleHByZXNzaW9uTm9kZXMubGVuZ3RoID09IDEgPyBleHByZXNzaW9uTm9kZXNbMF0gOiB1bmRlZmluZWRcblxuICBpZiAoZXhwcmVzc2lvbk5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCB1bnN1cHBvcnRlZCA9IGV4cHJlc3Npb25Ob2Rlc1swXVxuXG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFxuICAgICAgXCJqYXZhXCIsXG4gICAgICB1bnN1cHBvcnRlZD8ubmFtZSA/PyBcInJldHVybiBleHByZXNzaW9uXCIsXG4gICAgICB1bnN1cHBvcnRlZCA/IG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvblxuICAgIClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uKGV4cHJlc3Npb24gPyB7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGV4dC5yZXR1cm5UeXBlPy5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiICYmIGNvbnRleHQucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZSB8IHVuZGVmaW5lZH0gKi8gKGNvbnRleHQucmV0dXJuVHlwZSlcbiAgICApfSA6IHt9KSxcbiAgICBraW5kOiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBsb2NhbCBkZWNsYXJhdGlvbiBvciBhc3NpZ25tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Qcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudH0gU2VtYW50aWMgbG9jYWwgb3IgcHJpdmF0ZS1maWVsZCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMb2NhbFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRvcnMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIilcbiAgICBjb25zdCB0eXBlTm9kZSA9IGRlY2xhcmF0aW9uVHlwZShzdGF0ZW1lbnQpXG4gICAgY29uc3QgdmFyTm9kZSA9IHN0YXRlbWVudC5nZXRDaGlsZChcInZhclwiKVxuICAgIGNvbnN0IG1vZGlmaWVycyA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG1vZGlmaWVyQ2hpbGRyZW4gPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKSA6IFtdXG5cbiAgICBpZiAodmFyTm9kZSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInZhciBsb2NhbCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24odmFyTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgaWYgKGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibXVsdGlwbGUgbG9jYWwgZGVjbGFyYXRvcnNcIiwgbG9jYXRpb24pXG4gICAgaWYgKCF0eXBlTm9kZSB8fCB0eXBlTm9kZS5uYW1lID09IFwiQXJyYXlUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBsb2NhbCB0eXBlXCIsIGxvY2F0aW9uKVxuICAgIGlmIChtb2RpZmllckNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiZmluYWxcIikgfHwgbW9kaWZpZXJDaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgbG9jYWwgbW9kaWZpZXJzXCIsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRvciA9IGRlY2xhcmF0b3JzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQoZGVjbGFyYXRvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGRlY2xhcmF0b3IuZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBkZWNsYXJhdG9yLmdldENoaWxkcmVuKFwiRGltZW5zaW9uXCIpXG4gICAgY29uc3QgaW5pdGlhbGl6ZXJOb2RlcyA9IGRpcmVjdENoaWxkcmVuKGRlY2xhcmF0b3IpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG5cbiAgICBpZiAoZGltZW5zaW9ucy5sZW5ndGggPiAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYXJyYXkgbG9jYWwgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKGRlY2xhcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmICghYXNzaWdubWVudCB8fCBub2RlVGV4dChhc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8IGluaXRpYWxpemVyTm9kZXMubGVuZ3RoICE9IDEpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bmluaXRpYWxpemVkIGxvY2FsIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKVxuXG4gICAgaWYgKGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImxvY2FsIGJpbmRpbmcgY29sbGlkZXMgd2l0aCBhIGNvbnN1bWVkIHNvdXJjZSBiaW5kaW5nXCIsIG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTG9jYWwgJyR7bmFtZX0nYCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjb252ZXJ0RXhwcmVzc2lvbihpbml0aWFsaXplck5vZGVzWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCB0eXBlKVxuXG4gICAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGluaXRpYWxpemVyLFxuICAgICAga2luZDogXCJMb2NhbERlY2xhcmF0aW9uXCIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG11dGFibGU6IG1vZGlmaWVyQ2hpbGRyZW4ubGVuZ3RoID09IDAsXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksIG9wZXJhdG9yOiBub2RlTG9jYXRpb24oYXNzaWdubWVudCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpXG5cbiAgICBpZiAoIWFzc2lnbm1lbnQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXNzaWdubWVudClcbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnQuZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICAgIGNvbnN0IHRhcmdldCA9IGNoaWxkcmVuWzBdXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGNoaWxkcmVuLmF0KC0xKVxuXG4gICAgaWYgKCFvcGVyYXRvciB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImNvbXBvdW5kIGFzc2lnbm1lbnRcIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmICh0YXJnZXQ/Lm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgICBjb25zdCB0YXJnZXRDaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbih0YXJnZXQpXG4gICAgICBjb25zdCByZWNlaXZlciA9IHRhcmdldENoaWxkcmVuWzBdXG4gICAgICBjb25zdCBtZW1iZXIgPSB0YXJnZXRDaGlsZHJlblsxXVxuICAgICAgY29uc3QgZmllbGQgPSB0YXJnZXRDaGlsZHJlbi5sZW5ndGggPT0gMiAmJiByZWNlaXZlcj8ubmFtZSA9PSBcInRoaXNcIiAmJiBtZW1iZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgPyBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBub2RlVGV4dChtZW1iZXIsIHNvdXJjZSkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICghZmllbGQgfHwgIWV4cHJlc3Npb24gfHwgZXhwcmVzc2lvbiA9PSB0YXJnZXQgfHwgZXhwcmVzc2lvbiA9PSBvcGVyYXRvcikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicHJpdmF0ZSBmaWVsZCB3cml0ZSBvdXRzaWRlIHRoZSBkZWNsYXJpbmcgcmVjZWl2ZXJcIiwgbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgZmllbGQudHlwZSksXG4gICAgICAgIGZpZWxkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGZpZWxkLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiksIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb259ICovIChcbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpfSxcbiAgICAgIHttZW1iZXI6IG5vZGVMb2NhdGlvbihtZW1iZXIsIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmICghdGFyZ2V0IHx8IHRhcmdldC5uYW1lICE9IFwiSWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHRhcmdldD8ubmFtZSA/PyBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIHRhcmdldCA/IG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gICAgaWYgKCFleHByZXNzaW9uIHx8IGV4cHJlc3Npb24gPT0gdGFyZ2V0IHx8IGV4cHJlc3Npb24gPT0gb3BlcmF0b3IpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJhc3NpZ25tZW50IGV4cHJlc3Npb25cIiwgbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3QgdGFyZ2V0RXhwcmVzc2lvbiA9IHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBuYW1lOiBub2RlVGV4dCh0YXJnZXQsIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKHRhcmdldCwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IG5vZGVUZXh0KHRhcmdldCwgc291cmNlKVxuICAgIGNvbnN0IGJpbmRpbmdUeXBlID0gY29udGV4dC5iaW5kaW5ncy5nZXQodGFyZ2V0TmFtZSlcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsXG4gICAgICBiaW5kaW5nVHlwZT8ua2luZCA9PSBcIkVycm9yVHlwZVwiID8gdW5kZWZpbmVkIDogYmluZGluZ1R5cGUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBleHByZXNzaW9uOiB2YWx1ZSxcbiAgICAgIGtpbmQ6IFwiQXNzaWdubWVudFN0YXRlbWVudFwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0YXJnZXQ6IHRhcmdldEV4cHJlc3Npb25cbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4aGF1c3RpdmUgZGlyZWN0IEphdmEgYmxvY2sgY2hpbGQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFNlbWFudGljIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0UmV0dXJuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRJZihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIlRocm93U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SmF2YVJhaXNlKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SmF2YVRyeShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0V2hpbGUoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJFbmhhbmNlZEZvclN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEZvckVhY2goc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5uYW1lID09IFwiQ29udGludWVTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGxhYmVsID0gc3RhdGVtZW50LmdldENoaWxkKFwiTGFiZWxcIilcblxuICAgIGlmIChsYWJlbCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgbGFiZWxlZCAke3N0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn1gLFxuICAgICAgbm9kZUxvY2F0aW9uKGxhYmVsLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBjb25zdCBrZXl3b3JkID0gcmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIHN0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihrZXl3b3JkLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtcIkJyZWFrU3RhdGVtZW50XCIgfCBcIkNvbnRpbnVlU3RhdGVtZW50XCJ9ICovIChcbiAgICAgICAgc3RhdGVtZW50Lm5hbWUgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiXG4gICAgICApLFxuICAgICAgbG9jYXRpb25cbiAgICB9LCB7a2V5d29yZDogbG9jYXRpb259KVxuICB9XG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkxvY2FsVmFyaWFibGVEZWNsYXJhdGlvblwiKSByZXR1cm4gY29udmVydExvY2FsU3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgaWYgKHN0YXRlbWVudC5nZXRDaGlsZChcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpKSByZXR1cm4gY29udmVydExvY2FsU3RhdGVtZW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICBjb25zdCBpbnZvY2F0aW9uID0gc3RhdGVtZW50LmdldENoaWxkKFwiTWV0aG9kSW52b2NhdGlvblwiKVxuXG4gICAgaWYgKCFpbnZvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBpbnZvY2F0aW9uLmdldENoaWxkKFwiRmllbGRBY2Nlc3NcIilcbiAgICBjb25zdCBtZXRob2ROYW1lID0gaW52b2NhdGlvbi5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcblxuICAgIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcmVzc2lvbjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYWxsRXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk1ldGhvZENhbGxFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oaW52b2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgKSxcbiAgICAgICAga2luZDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0UHJpbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgYHRocm93IG5ldyBEZWNsYXJlZEVycm9yKG1lc3NhZ2UpYC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHRocm93IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SYWlzZVN0YXRlbWVudH0gU2VtYW50aWMgcmFpc2UuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhUmFpc2Uoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uc3RydWN0aW9uID0gc3RhdGVtZW50LmdldENoaWxkKFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCIpXG4gIGNvbnN0IHR5cGVOb2RlID0gY29uc3RydWN0aW9uPy5nZXRDaGlsZChcIlR5cGVOYW1lXCIpXG4gIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjb25zdHJ1Y3Rpb24/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpIDogW11cbiAgY29uc3QgZGVjbGFyYXRpb24gPSB0eXBlTm9kZSA/IGNvbnRleHQuZXJyb3JOYW1lcy5nZXQobm9kZVRleHQodHlwZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFjb25zdHJ1Y3Rpb24gfHwgIXR5cGVOb2RlIHx8ICFhcmd1bWVudHNOb2RlIHx8ICFkZWNsYXJhdGlvbiB8fCBhcmd1bWVudHNfLmxlbmd0aCAhPSAxIHx8IGNvbnN0cnVjdGlvbi5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ0aHJvdyBvdGhlciB0aGFuIGV4YWN0IGRlY2xhcmVkIGVycm9yIGNvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCB0eXBlTG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGVycm9yOiB3aXRoUGFyc2VyUmFuZ2VzKHtkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JUeXBlXCIpfSwge3R5cGU6IHR5cGVMb2NhdGlvbn0pLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JDb25zdHJ1Y3Rpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNvbnN0cnVjdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSYWlzZVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7a2V5d29yZDogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQoc3RhdGVtZW50LCBcInRocm93XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGNhdGNoIHdpdGggbm8gcmVzb3VyY2VzIG9yIGZpbmFsbHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSB0cnkgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gU2VtYW50aWMgZXhhY3QgaGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUcnkoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYm9keSA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkJsb2NrXCIpXG4gIGNvbnN0IGNhdGNoZXMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJDYXRjaENsYXVzZVwiKVxuXG4gIGlmICghYm9keSB8fCBjYXRjaGVzLmxlbmd0aCAhPSAxIHx8IHN0YXRlbWVudC5nZXRDaGlsZChcIkZpbmFsbHlDbGF1c2VcIikgfHwgc3RhdGVtZW50LmdldENoaWxkKFwiUmVzb3VyY2VTcGVjaWZpY2F0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInRyeSB3aXRob3V0IG9uZSBjYXRjaCBhbmQgbm8gcmVzb3VyY2VzIG9yIGZpbmFsbHlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgaGFuZGxlciA9IGNhdGNoZXNbMF1cbiAgY29uc3QgcGFyYW1ldGVyID0gaGFuZGxlci5nZXRDaGlsZChcIkNhdGNoRm9ybWFsUGFyYW1ldGVyXCIpXG4gIGNvbnN0IGNhdWdodCA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJDYXRjaFR5cGVcIilcbiAgY29uc3QgdHlwZU5vZGVzID0gY2F1Z2h0ID8gc3RydWN0dXJhbENoaWxkcmVuKGNhdWdodCkgOiBbXVxuICBjb25zdCBkZWZpbml0aW9uID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgY2F0Y2hCb2R5ID0gaGFuZGxlci5nZXRDaGlsZChcIkJsb2NrXCIpXG4gIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVzWzBdXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gdHlwZU5vZGUgPyBjb250ZXh0LmVycm9yTmFtZXMuZ2V0KG5vZGVUZXh0KHR5cGVOb2RlLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gIGlmICghcGFyYW1ldGVyIHx8ICFjYXVnaHQgfHwgdHlwZU5vZGVzLmxlbmd0aCAhPSAxIHx8IHR5cGVOb2RlPy5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCAhZGVmaW5pdGlvbiB8fCAhY2F0Y2hCb2R5IHx8ICFkZWNsYXJhdGlvbiB8fFxuICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJicm9hZCwgbXVsdGlwbGUsIG9yIG1hbGZvcm1lZCBjYXRjaFwiLCBub2RlTG9jYXRpb24oaGFuZGxlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNhdGNoVHlwZSA9IHdpdGhQYXJzZXJSYW5nZXMoe2RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJFcnJvclR5cGVcIil9LCB7XG4gICAgdHlwZTogY2F1Z2h0TG9jYXRpb25cbiAgfSlcbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGNhdGNoQ29udGV4dCA9IHsuLi5jb250ZXh0LCBiaW5kaW5nczogbmV3IE1hcChjb250ZXh0LmJpbmRpbmdzKSwgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KGNvbnRleHQuZXJhc2VkQmluZGluZ05hbWVzKX1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBjYXRjaENvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIGNhdGNoVHlwZSlcbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhib2R5LCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dCksXG4gICAgY2F0Y2hCaW5kaW5nOiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhdGNoQmluZGluZ1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IGNhdGNoVHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSl9KSxcbiAgICBjYXRjaEJvZHk6IGNvbnZlcnRCbG9jayhjYXRjaEJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGNhdGNoQ29udGV4dCksXG4gICAgY2F0Y2hUeXBlLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlRyeVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7Y2F0Y2g6IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKSwgdHJ5OiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidHJ5XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgSmF2YSBlbmhhbmNlZC1mb3Igc3ludGF4IG92ZXIgb25lIHJlc29sdmVkIGBMaXN0PFQ+YC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gRW5oYW5jZWQtZm9yIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBzcGVjID0gbm9kZS5nZXRDaGlsZChcIkZvclNwZWNcIilcbiAgY29uc3QgYm9keSA9IGRpcmVjdENoaWxkcmVuKG5vZGUpLmZpbmRMYXN0KChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkZvclNwZWNcIiAmJiBjaGlsZC5uYW1lICE9IFwiZm9yXCIpXG5cbiAgaWYgKCFzcGVjKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZW5oYW5jZWQgZm9yIHdpdGhvdXQgc3BlY2lmaWNhdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKCFib2R5IHx8IGJvZHkubmFtZSAhPSBcIkJsb2NrXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3Igd2l0aG91dCBibG9jayBib2R5XCIsIGJvZHkgPyBub2RlTG9jYXRpb24oYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgY29uc3QgY2hpbGRyZW4gPSBkaXJlY3RDaGlsZHJlbihzcGVjKVxuICBjb25zdCBjb2xvbkluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIjpcIilcbiAgY29uc3QgdHlwZU5vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMl0gOiB1bmRlZmluZWRcbiAgY29uc3QgYmluZGluZ05vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMV0gOiB1bmRlZmluZWRcbiAgY29uc3QgY29sbGVjdGlvbk5vZGUgPSBjb2xvbkluZGV4ID49IDAgPyBjaGlsZHJlbltjb2xvbkluZGV4ICsgMV0gOiB1bmRlZmluZWRcblxuICBpZiAoIXR5cGVOb2RlIHx8ICFiaW5kaW5nTm9kZSB8fCBiaW5kaW5nTm9kZS5uYW1lICE9IFwiRGVmaW5pdGlvblwiIHx8ICFjb2xsZWN0aW9uTm9kZSB8fFxuICAgIGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIpLmxlbmd0aCAhPSAxKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBiaW5kaW5nTm9kZSA/PyBjb2xsZWN0aW9uTm9kZSA/PyBzcGVjXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGVuaGFuY2VkIGZvciBzcGVjaWZpY2F0aW9uXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKGNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiTW9kaWZpZXJzXCIpKSB7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIk1vZGlmaWVyc1wiKSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3IgbW9kaWZpZXJzXCIsIG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGNvbGxlY3Rpb25Ob2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBtYXBOb2RlID0gc3RydWN0dXJhbENoaWxkcmVuKGNvbGxlY3Rpb25Ob2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWFwVHlwZV8gPSBtYXBOb2RlID8ga25vd25FeHByZXNzaW9uVHlwZShtYXBOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgYXJndW1lbnRMaXN0ICYmIG1hcE5vZGU/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJzZXF1ZW5jZWRFbnRyeVNldFwiICYmIHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpLmxlbmd0aCA9PSAwICYmXG4gICAgICBtYXBUeXBlXz8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGVudHJ5VHlwZSA9IHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKSA6IFtdXG4gICAgICBjb25zdCBlbnRyeUFyZ3VtZW50cyA9IGVudHJ5VHlwZVsxXT8ubmFtZSA9PSBcIlR5cGVBcmd1bWVudHNcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihlbnRyeVR5cGVbMV0pIDogW11cbiAgICAgIGNvbnN0IHBhcnNlZEtleVR5cGUgPSBlbnRyeUFyZ3VtZW50c1swXVxuICAgICAgICA/IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGVudHJ5QXJndW1lbnRzWzBdLCBcIk1hcCBlbnRyeSBrZXlcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGFyc2VkVmFsdWVUeXBlID0gZW50cnlBcmd1bWVudHNbMV1cbiAgICAgICAgPyBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChlbnRyeUFyZ3VtZW50c1sxXSwgXCJNYXAgZW50cnkgdmFsdWVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoZW50cnlUeXBlLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGVudHJ5VHlwZVswXSwgc291cmNlKSAhPSBcImphdmEudXRpbC5NYXAuRW50cnlcIiB8fCBlbnRyeUFyZ3VtZW50cy5sZW5ndGggIT0gMiB8fFxuICAgICAgICAhcGFyc2VkS2V5VHlwZSB8fCAhcGFyc2VkVmFsdWVUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcnNlZEtleVR5cGUsIG1hcFR5cGVfLmtleVR5cGUpIHx8XG4gICAgICAgICFzYW1lVmFsdWVUeXBlKHBhcnNlZFZhbHVlVHlwZSwgbWFwVHlwZV8udmFsdWVUeXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgZW50cnkgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgYm9keVN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICAgICAgaWYgKGJvZHlTdGF0ZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHBhaXIgYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlOYW1lID0gbm9kZVRleHQoYmluZGluZ05vZGUsIHNvdXJjZSlcblxuICAgICAgaWYgKGNvbnRleHQuYmluZGluZ3MuaGFzKGVudHJ5TmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGVudHJ5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIGVudHJ5IGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksXG4gICAgICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcykuYWRkKGVudHJ5TmFtZSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleUJpbmRpbmcgPSBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKFxuICAgICAgICBib2R5U3RhdGVtZW50c1swXSwgZW50cnlOYW1lLCBcImdldEtleVwiLCBtYXBUeXBlXy5rZXlUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dFxuICAgICAgKVxuICAgICAgY29uc3QgdmFsdWVCaW5kaW5nID0gY29udmVydEphdmFNYXBQYWlyQmluZGluZyhcbiAgICAgICAgYm9keVN0YXRlbWVudHNbMV0sIGVudHJ5TmFtZSwgXCJnZXRWYWx1ZVwiLCBtYXBUeXBlXy52YWx1ZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0XG4gICAgICApXG5cbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlCaW5kaW5nLm5hbWUsIGtleUJpbmRpbmcudHlwZSlcbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgdmFsdWVCaW5kaW5nLnR5cGUpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHN0YXRlbWVudHM6IGNvbnZlcnRTdGF0ZW1lbnRzKGJvZHlTdGF0ZW1lbnRzLnNsaWNlKDIpLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dClcbiAgICAgICAgfSxcbiAgICAgICAga2V5QmluZGluZyxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obWFwTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlQmluZGluZ1xuICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgW1wiZW50cnlTZXRcIiwgXCJzZXF1ZW5jZWRFbnRyeVNldFwiXS5pbmNsdWRlcyhub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVub3JkZXJlZCBvciB1bnN1cHBvcnRlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVjbGFyZWRUeXBlID0gY29udmVydEphdmFUeXBlQXJndW1lbnQodHlwZU5vZGUsIGBJdGVyYXRpb24gYmluZGluZyAnJHtub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKX0nYCwgYmluZGluZ0xvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG5cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIiAmJiBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTWFwVHlwZVwiKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YVwiLCBcIkl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKSxcbiAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgfSwge25hbWU6IGJpbmRpbmdMb2NhdGlvbn0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpfVxuXG4gIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUoZGVjbGFyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKGNvbGxlY3Rpb25Ob2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgaW1tdXRhYmxlIGxvY2FsIGV4dHJhY3RlZCBmcm9tIGEgSmF2YSBvcmRlcmVkLW1hcCBlbnRyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBQYWlyLWJpbmRpbmcgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZW50cnlOYW1lIC0gRW5oYW5jZWQtZm9yIGVudHJ5IGJpbmRpbmcgbmFtZS5cbiAqIEBwYXJhbSB7XCJnZXRLZXlcIiB8IFwiZ2V0VmFsdWVcIn0gYWNjZXNzb3IgLSBSZXF1aXJlZCBlbnRyeSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IGV4cGVjdGVkVHlwZSAtIENhbm9uaWNhbCBiaW5kaW5nIHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZ30gUGFpciBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKHN0YXRlbWVudCwgZW50cnlOYW1lLCBhY2Nlc3NvciwgZXhwZWN0ZWRUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gc3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3JzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICBjb25zdCBkZWZpbml0aW9uID0gZGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IGFzc2lnbm1lbnQgPSBkZWNsYXJhdG9yPy5nZXRDaGlsZChcIkFzc2lnbk9wXCIpXG4gIGNvbnN0IGluaXRpYWxpemVyID0gZGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oZGVjbGFyYXRvcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRpYWxpemVyPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gaW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHJlY2VpdmVyID0gaW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCJcbiAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbihpbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHR5cGVOb2RlID0gZGVjbGFyYXRpb25UeXBlKHN0YXRlbWVudClcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgIT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiB8fCBub2RlVGV4dChtb2RpZmllcnMgPz8gc3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fFxuICAgIGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxIHx8ICFkZWZpbml0aW9uIHx8ICFhc3NpZ25tZW50IHx8IG5vZGVUZXh0KGFzc2lnbm1lbnQsIHNvdXJjZSkgIT0gXCI9XCIgfHwgIWluaXRpYWxpemVyIHx8XG4gICAgaW5pdGlhbGl6ZXIubmFtZSAhPSBcIk1ldGhvZEludm9jYXRpb25cIiB8fCAhbWV0aG9kTmFtZSB8fCBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpICE9IGFjY2Vzc29yIHx8XG4gICAgIWFyZ3VtZW50TGlzdCB8fCBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggIT0gMCB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpICE9IGVudHJ5TmFtZSB8fCAhdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nYCwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBpZiAoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgb3JkZXJlZC1tYXAgJHthY2Nlc3Nvcn0gYmluZGluZyBjb2xsaXNpb25gLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTWFwIGl0ZXJhdGlvbiBiaW5kaW5nICcke25hbWV9J2AsIGxvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKCFzYW1lVmFsdWVUeXBlKHR5cGUsIGV4cGVjdGVkVHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nIHR5cGVgLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbixcbiAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgIG5hbWUsXG4gICAgdHlwZVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleHByZXNzaW9uIHR5cGVzIGVzdGFibGlzaGVkIGJ5IEphdmEgZGVjbGFyYXRpb25zIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBpZiAobm9kZS5uYW1lID09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoID09IDEgPyBrbm93bkV4cHJlc3Npb25UeXBlKGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJ0aGlzXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3M/LmlkKSB7XG4gICAgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMiAmJiBjaGlsZHJlblswXS5uYW1lID09IFwidGhpc1wiICYmIGNoaWxkcmVuWzFdLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQoY2hpbGRyZW5bMV0sIHNvdXJjZSkpPy50eXBlXG4gICAgfVxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBub2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgIXJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgYXJndW1lbnRzXy5tYXAoKGFyZ3VtZW50KSA9PlxuICAgICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkpXG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+XG4gICAgICAgICAgbWV0aG9kLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSk/LnJldHVyblR5cGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1YWxpZmllZCA9IGAke25vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpfS4ke25vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSl9YFxuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KHF1YWxpZmllZClcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG4gICAgICBjb25zdCByZXR1cm5UeXBlID0gc2lnbmF0dXJlID8ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmV0dXJuVHlwZSkgcmV0dXJuIHJldHVyblR5cGVcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgcmVjZWl2ZXIgJiYgYXJndW1lbnRMaXN0ICYmIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJnZXRcIikge1xuICAgICAgY29uc3QgYXJndW1lbnRzXyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMCAmJiByZWNlaXZlci5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gcmVjZWl2ZXJUeXBlLmVsZW1lbnRUeXBlXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyICYmIGFyZ3VtZW50TGlzdCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCAhPSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKVxuICAgICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSkgPz8gLTFcblxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlclR5cGUuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IFtcIkdlbmVyaWNUeXBlXCIsIFwiVHlwZU5hbWVcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSlbMF0gOiB0eXBlTm9kZVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmIChkZWNsYXJhdGlvbj8uaWQgJiYgdHlwZU5vZGUpIHtcbiAgICAgIGNvbnN0IHR5cGVBcmd1bWVudHNOb2RlID0gdHlwZU5vZGU/LmdldENoaWxkKFwiVHlwZUFyZ3VtZW50c1wiKVxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHNOb2RlXG4gICAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVBcmd1bWVudHNOb2RlKS5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgICAgOiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBkaXJlY3Qgc3RydWN0dXJhbCBjaGlsZHJlbiBvZiBvbmUgSmF2YSBibG9jayBpbiBzb3VyY2Ugb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUubmFtZSAhPSBcIkJsb2NrXCIgJiYgbm9kZS5uYW1lICE9IFwiQ29uc3RydWN0b3JCb2R5XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBleHBlY3RlZCBibG9jaywgcmVjZWl2ZWQgJHtub2RlLm5hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzdGF0ZW1lbnRzOiBjb252ZXJ0U3RhdGVtZW50cyhzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmEgc3RhdGVtZW50IHNlcXVlbmNlLCBmb2xkaW5nIHRoZSBleGFjdCBwcm90ZWN0ZWQgb3JkZXJlZC1tYXAgY29uc3RydWN0aW9uIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBzdGF0ZW1lbnRzIC0gRGlyZWN0IGJsb2NrIHN0YXRlbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnRbXX0gU2VtYW50aWMgc3RhdGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudHMoc3RhdGVtZW50cywgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBjb252ZXJ0ZWQgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZW1lbnRzLmxlbmd0aDspIHtcbiAgICBjb25zdCBvcmRlcmVkID0gY29udmVydEphdmFPcmRlcmVkTWFwU2VxdWVuY2Uoc3RhdGVtZW50cywgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBpZiAob3JkZXJlZCkge1xuICAgICAgY29udmVydGVkLnB1c2gob3JkZXJlZC5zdGF0ZW1lbnQpXG4gICAgICBpbmRleCA9IG9yZGVyZWQubmV4dEluZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnZlcnRlZC5wdXNoKGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50c1tpbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgaW5kZXggKz0gMVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIGNvbnN0cnVjdGlvbiB0aHJvdWdoIGEgcHJpdmF0ZSBMaW5rZWRIYXNoTWFwIGJhY2tpbmcgZm9sbG93ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIFNlcXVlbmNlZE1hcCBib3VuZGFyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IHN0YXRlbWVudHMgLSBEaXJlY3QgYmxvY2sgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIENhbmRpZGF0ZSBiYWNraW5nLWRlY2xhcmF0aW9uIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7e3N0YXRlbWVudDogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiwgbmV4dEluZGV4OiBudW1iZXJ9IHwgdW5kZWZpbmVkfSBGb2xkZWQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhT3JkZXJlZE1hcFNlcXVlbmNlKHN0YXRlbWVudHMsIHN0YXJ0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhY2tpbmdTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW3N0YXJ0XVxuICBjb25zdCBiYWNraW5nVHlwZU5vZGUgPSBiYWNraW5nU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoYmFja2luZ1N0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IGJhY2tpbmdUeXBlQ2hpbGRyZW4gPSBiYWNraW5nVHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdUeXBlTm9kZSkgOiBbXVxuXG4gIGlmIChiYWNraW5nVHlwZUNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGJhY2tpbmdUeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oYmFja2luZ1N0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmFja2luZ01vZGlmaWVycyA9IGJhY2tpbmdTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgYmFja2luZ0RlY2xhcmF0b3JzID0gYmFja2luZ1N0YXRlbWVudC5nZXRDaGlsZHJlbihcIlZhcmlhYmxlRGVjbGFyYXRvclwiKVxuICBjb25zdCBiYWNraW5nRGVjbGFyYXRvciA9IGJhY2tpbmdEZWNsYXJhdG9yc1swXVxuICBjb25zdCBiYWNraW5nRGVmaW5pdGlvbiA9IGJhY2tpbmdEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgYmFja2luZ0Fzc2lnbm1lbnQgPSBiYWNraW5nRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBiYWNraW5nSW5pdGlhbGl6ZXIgPSBiYWNraW5nRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oYmFja2luZ0RlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGUgPSBiYWNraW5nSW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbiA9IGNvbnN0cnVjdGlvblR5cGUgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uc3RydWN0aW9uVHlwZSkgOiBbXVxuICBjb25zdCBjb25zdHJ1Y3Rpb25Bcmd1bWVudHMgPSBiYWNraW5nSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGJhY2tpbmdBcmd1bWVudHNOb2RlID0gYmFja2luZ1R5cGVDaGlsZHJlblsxXVxuICBjb25zdCBiYWNraW5nQXJndW1lbnRzID0gYmFja2luZ0FyZ3VtZW50c05vZGU/Lm5hbWUgPT0gXCJUeXBlQXJndW1lbnRzXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmFja2luZ0FyZ3VtZW50c05vZGUpIDogW11cblxuICBpZiAobm9kZVRleHQoYmFja2luZ01vZGlmaWVycyA/PyBiYWNraW5nU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fCBiYWNraW5nRGVjbGFyYXRvcnMubGVuZ3RoICE9IDEgfHxcbiAgICAhYmFja2luZ0RlZmluaXRpb24gfHwgIWJhY2tpbmdBc3NpZ25tZW50IHx8IG5vZGVUZXh0KGJhY2tpbmdBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8ICFiYWNraW5nSW5pdGlhbGl6ZXIgfHxcbiAgICBiYWNraW5nSW5pdGlhbGl6ZXIubmFtZSAhPSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiIHx8IGJhY2tpbmdJbml0aWFsaXplci5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSB8fFxuICAgIGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiIHx8XG4gICAgc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlblsxXSkubGVuZ3RoICE9IDAgfHwgIWNvbnN0cnVjdGlvbkFyZ3VtZW50cyB8fFxuICAgIHN0cnVjdHVyYWxDaGlsZHJlbihjb25zdHJ1Y3Rpb25Bcmd1bWVudHMpLmxlbmd0aCAhPSAwIHx8IGJhY2tpbmdBcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgTGlua2VkSGFzaE1hcCBiYWNraW5nXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgYmFja2luZ05hbWUgPSBub2RlVGV4dChiYWNraW5nRGVmaW5pdGlvbiwgc291cmNlKVxuXG4gIGlmIChjb250ZXh0LmJpbmRpbmdzLmhhcyhiYWNraW5nTmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGJhY2tpbmdOYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBiYWNraW5nIGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiYWNraW5nRGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMF0sIFwiT3JkZXJlZCBtYXAga2V5XCIsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHZhbHVlVHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMV0sIFwiT3JkZXJlZCBtYXAgdmFsdWVcIiwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGxldCBpbmRleCA9IHN0YXJ0ICsgMVxuXG4gIHdoaWxlIChpbmRleCA8IHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgcHV0U3RhdGVtZW50ID0gc3RhdGVtZW50c1tpbmRleF1cbiAgICBjb25zdCBpbnZvY2F0aW9uID0gcHV0U3RhdGVtZW50Lm5hbWUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgPyBwdXRTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNZXRob2RJbnZvY2F0aW9uXCIpIDogbnVsbFxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gaW52b2NhdGlvblxuICAgICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oaW52b2NhdGlvbikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICghaW52b2NhdGlvbiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSAhPSBiYWNraW5nTmFtZSB8fFxuICAgICAgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInB1dFwiKSBicmVha1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggIT0gMiB8fCBhcmd1bWVudHNfWzBdLm5hbWUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBwdXRcIiwgbm9kZUxvY2F0aW9uKHB1dFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGVudHJpZXMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGtleVR5cGUpXG4gICAgICApLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgIGluZGV4ICs9IDFcbiAgfVxuXG4gIGNvbnN0IHNlYWxTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICBjb25zdCBzZWFsVHlwZU5vZGUgPSBzZWFsU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoc2VhbFN0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IHNlYWxEZWNsYXJhdG9ycyA9IHNlYWxTdGF0ZW1lbnQ/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIikgOiBbXVxuICBjb25zdCBzZWFsRGVjbGFyYXRvciA9IHNlYWxEZWNsYXJhdG9yc1swXVxuICBjb25zdCBzZWFsRGVmaW5pdGlvbiA9IHNlYWxEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3Qgc2VhbEFzc2lnbm1lbnQgPSBzZWFsRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBzZWFsSW5pdGlhbGl6ZXIgPSBzZWFsRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oc2VhbERlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHNlYWxNZXRob2QgPSBzZWFsSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICBjb25zdCBzZWFsQXJndW1lbnRzTm9kZSA9IHNlYWxJbml0aWFsaXplcj8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3Qgc2VhbEFyZ3VtZW50cyA9IHNlYWxBcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxBcmd1bWVudHNOb2RlKSA6IFtdXG4gIGNvbnN0IHNlYWxSZWNlaXZlciA9IHNlYWxJbml0aWFsaXplcj8ubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFzZWFsU3RhdGVtZW50IHx8IG5vZGVUZXh0KHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gc2VhbFN0YXRlbWVudCwgc291cmNlKSAhPSBcImZpbmFsXCIgfHxcbiAgICAhc2VhbFR5cGVOb2RlIHx8IHNlYWxEZWNsYXJhdG9ycy5sZW5ndGggIT0gMSB8fCAhc2VhbERlZmluaXRpb24gfHwgIXNlYWxBc3NpZ25tZW50IHx8IG5vZGVUZXh0KHNlYWxBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8XG4gICAgc2VhbEluaXRpYWxpemVyPy5uYW1lICE9IFwiTWV0aG9kSW52b2NhdGlvblwiIHx8IG5vZGVUZXh0KHNlYWxSZWNlaXZlciA/PyBzZWFsU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiamF2YS51dGlsLkNvbGxlY3Rpb25zXCIgfHxcbiAgICAhc2VhbE1ldGhvZCB8fCBub2RlVGV4dChzZWFsTWV0aG9kLCBzb3VyY2UpICE9IFwidW5tb2RpZmlhYmxlU2VxdWVuY2VkTWFwXCIgfHwgc2VhbEFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIHNlYWxBcmd1bWVudHNbMF0ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChzZWFsQXJndW1lbnRzWzBdLCBzb3VyY2UpICE9IGJhY2tpbmdOYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHVubW9kaWZpYWJsZSBTZXF1ZW5jZWRNYXAgYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KHNlYWxEZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWUgPT0gYmFja2luZ05hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgYm91bmRhcnkgYmluZGluZyBjb2xsaXNpb25cIiwgbm9kZUxvY2F0aW9uKHNlYWxEZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib3VuZGFyeVR5cGUgPSBjb252ZXJ0VHlwZShzZWFsVHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBub2RlTG9jYXRpb24oc2VhbFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3Qgc2VhbFR5cGVDaGlsZHJlbiA9IHNlYWxUeXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsVHlwZU5vZGUpIDogW11cbiAgY29uc3Qgc2VhbFR5cGVBcmd1bWVudHMgPSBzZWFsVHlwZUNoaWxkcmVuWzFdPy5uYW1lID09IFwiVHlwZUFyZ3VtZW50c1wiID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxUeXBlQ2hpbGRyZW5bMV0pIDogW11cblxuICBpZiAoc2VhbFR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChzZWFsVHlwZUNoaWxkcmVuWzBdLCBzb3VyY2UpICE9IFwiamF2YS51dGlsLlNlcXVlbmNlZE1hcFwiIHx8XG4gICAgc2VhbFR5cGVBcmd1bWVudHMubGVuZ3RoICE9IDIgfHwgYm91bmRhcnlUeXBlLmtpbmQgIT0gXCJNYXBUeXBlXCIgfHwgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLmtleVR5cGUsIGtleVR5cGUpIHx8XG4gICAgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLnZhbHVlVHlwZSwgdmFsdWVUeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBib3VuZGFyeSB0eXBlIG1pc21hdGNoXCIsIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHR5cGUgPSBvcmRlcmVkTWFwVHlwZShcbiAgICBib3VuZGFyeVR5cGUua2V5VHlwZSxcbiAgICBib3VuZGFyeVR5cGUudmFsdWVUeXBlLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZUFyZ3VtZW50c1swXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbm9kZUxvY2F0aW9uKHNlYWxUeXBlQXJndW1lbnRzWzFdLCBmaWxlbmFtZSwgc291cmNlKVxuICApXG5cbiAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcbiAgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuYWRkKGJhY2tpbmdOYW1lKVxuICByZXR1cm4ge1xuICAgIG5leHRJbmRleDogaW5kZXggKyAxLFxuICAgIHN0YXRlbWVudDogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBiYWNraW5nSW5pdGlhbGl6ZXIuZnJvbSwgc2VhbEluaXRpYWxpemVyLnRvKVxuICAgICAgfSwge2ZhY3Rvcnk6IG5vZGVMb2NhdGlvbihiYWNraW5nSW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgYmFja2luZ1N0YXRlbWVudC5mcm9tLCBzZWFsU3RhdGVtZW50LnRvKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oc2VhbERlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKHNlYWxBc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBKYXZhIHNjYWxhciB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZSB8IG51bGx9IHNvdXJjZVR5cGUgLSBKYXZhIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIXNvdXJjZVR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFcIiwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2b2lkIHZhbHVlIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoc291cmNlVHlwZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHNvdXJjZVR5cGUpXG4gICAgY29uc3QgbmFtZU5vZGUgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjaGlsZHJlblsxXVxuXG4gICAgaWYgKCFuYW1lTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCBhcmd1bWVudHNOb2RlLm5hbWUgIT0gXCJUeXBlQXJndW1lbnRzXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyBjb2xsZWN0aW9uIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpXG5cbiAgICBpZiAobmFtZSA9PSBcImphdmEudXRpbC5MaXN0XCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChhcmd1bWVudHNfWzBdLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwga2V5VHlwZS5uYW1lICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKChuYW1lID09IFwiamF2YS51dGlsLk9wdGlvbmFsXCIgfHwgbmFtZSA9PSBcIk9wdGlvbmFsXCIpICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICAgIGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZE5hbWVzLmdldChuYW1lKVxuXG4gICAgaWYgKHJlY29yZD8uaWQpIHtcbiAgICAgIGlmIChyZWNvcmQua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkVHlwZShyZWNvcmQuaWQsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnQsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgZ2VuZXJpYyB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIVtcIlByaW1pdGl2ZVR5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKHNvdXJjZVR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCB0eXBlUGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnMuZ2V0KG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSkpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXI/LmlkKSByZXR1cm4gdHlwZVZhcmlhYmxlKHR5cGVQYXJhbWV0ZXIuaWQsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNvcmROYW1lcy5nZXQobm9kZVRleHQoc291cmNlVHlwZSwgc291cmNlKSlcblxuICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgID8gcmVmZXJlbmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIlxuICAgICAgPyBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgOiByZWNvcmRUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJqYXZhXCIsIG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSksIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBpZiAoIXR5cGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgbG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYm94ZWQgSmF2YSBjb2xsZWN0aW9uIHR5cGUgYXJndW1lbnQgb3IgbmVzdGVkIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFR5cGUgYXJndW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlQXJndW1lbnQobm9kZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIGNvbnZlcnRUeXBlKG5vZGUsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVycy5nZXQobm9kZVRleHQobm9kZSwgc291cmNlKSlcblxuICBpZiAodHlwZVBhcmFtZXRlcj8uaWQpIHJldHVybiB0eXBlVmFyaWFibGUodHlwZVBhcmFtZXRlci5pZCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHJlY29yZE5hbWVzLmdldChub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgPyByZWZlcmVuY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiBkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiXG4gICAgICA/IG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICA6IHJlY29yZFR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3BlbGxpbmcgPSBub2RlVGV4dChub2RlLCBzb3VyY2UpXG4gIGNvbnN0IHNjYWxhciA9IHNwZWxsaW5nID09IFwiSW50ZWdlclwiID8gXCJpbnRlZ2VyXCIgOiBzcGVsbGluZyA9PSBcIkJvb2xlYW5cIiA/IFwiYm9vbGVhblwiIDogc3BlbGxpbmcgPT0gXCJTdHJpbmdcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoIXNjYWxhcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gdHlwZSBhcmd1bWVudFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHR5cGUgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lfSAqLyAoc2NhbGFyKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh0eXBlLCB7dHlwZTogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhwbGljaXQgSmF2YSBmdW5jdGlvbiByZXR1cm4gdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gc291cmNlVHlwZSAtIEphdmEgcmV0dXJuIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBGdW5jdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IFNlbWFudGljIHJldHVybiB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuVHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlPy5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwiamF2YVwiLCBcInZvaWRcIiwgc3ViamVjdCwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRpcmVjdCBKYXZhIGRlY2xhcmF0aW9uIHR5cGUgbm9kZSBzdXBwb3J0ZWQgYnkgc2NhbGFyIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIERlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gVHlwZSBzeW50YXggbm9kZS5cbiAqL1xuZnVuY3Rpb24gZGVjbGFyYXRpb25UeXBlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZ2V0Q2hpbGQoXCJHZW5lcmljVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiUHJpbWl0aXZlVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiVHlwZU5hbWVcIikgPz8gbm9kZS5nZXRDaGlsZChcIlNjb3BlZFR5cGVOYW1lXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJ2b2lkXCIpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIG5hdGl2ZSB1bmJvdW5kZWQgaW52YXJpYW50IEphdmEgdHlwZS1wYXJhbWV0ZXIgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gbm9kZSAtIFR5cGVQYXJhbWV0ZXJzIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBvd25pbmcgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgcmV0dXJuIHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVyKVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBjaGlsZHJlblswXVxuXG4gICAgaWYgKHBhcmFtZXRlci5uYW1lICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IGRlZmluaXRpb24/Lm5hbWUgIT0gXCJEZWZpbml0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJib3VuZGVkLCBhbm5vdGF0ZWQsIG9yIG1hbGZvcm1lZCB0eXBlIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGlkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG5hbWU6IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbG9jYXRpb259KVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFkYXB0aW5nIGFueSBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1GdW5jdGlvbl0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBleHBsaWNpdCBwdWJsaWMgb3IgcHJpdmF0ZSB2aXNpYmlsaXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZmVyZW5jZU1vZHVsZV0gLSBXaGV0aGVyIHBhY2thZ2UtdmlzaWJsZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBieSBzaWJsaW5nIHJlZmVyZW5jZSBjbGFzc2VzLlxuICogQHJldHVybnMge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHByb2dyYW1GdW5jdGlvbiA9IGZhbHNlLCBvd25lcklkID0gXCJmdW5jdGlvbjowXCIsXG4gIHJlZmVyZW5jZU1vZHVsZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJOYW1lcyA9IG1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBjb25zdCByZXF1aXJlZE1vZGlmaWVycyA9IHByb2dyYW1GdW5jdGlvbiA/IFwicHVibGljIG9yIHByaXZhdGUgc3RhdGljXCIgOiByZWZlcmVuY2VNb2R1bGUgPyBcInByaXZhdGUgb3IgcGFja2FnZS12aXNpYmxlIHN0YXRpY1wiIDogXCJwcml2YXRlIHN0YXRpY1wiXG4gIGNvbnN0IG1vZGlmaWVyc1RleHQgPSBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpXG5cbiAgaWYgKHByb2dyYW1GdW5jdGlvbiA/ICFbXCJwdWJsaWMgc3RhdGljXCIsIFwicHJpdmF0ZSBzdGF0aWNcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOlxuICAgIHJlZmVyZW5jZU1vZHVsZSA/ICFbXCJwcml2YXRlIHN0YXRpY1wiLCBcInN0YXRpY1wiXS5pbmNsdWRlcyhtb2RpZmllcnNUZXh0KSA6IG1vZGlmaWVyc1RleHQgIT0gXCJwcml2YXRlIHN0YXRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgc2VtYW50aWMgZnVuY3Rpb24gd2l0aG91dCAke3JlcXVpcmVkTW9kaWZpZXJzfWAsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIilcbiAgY29uc3QgdGhyb3dzID0gbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKVxuXG4gIGlmICh0aHJvd3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjaGVja2VkIHRocm93c1wiLCBub2RlTG9jYXRpb24odGhyb3dzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2VtYW50aWNUeXBlUGFyYW1ldGVycyA9IGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnModHlwZVBhcmFtZXRlcnMsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlcy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIpXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlckNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcilcblxuICAgIGlmIChwYXJhbWV0ZXJDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1cIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcmVxdWlyZWRDaGlsZChwYXJhbWV0ZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBub2RlVGV4dChwYXJhbWV0ZXJOYW1lTm9kZSwgc291cmNlKVxuXG4gICAgY29uc3Qgc2VtYW50aWNQYXJhbWV0ZXIgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlciksIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoc2VtYW50aWNQYXJhbWV0ZXIsIHtuYW1lOiBub2RlTG9jYXRpb24ocGFyYW1ldGVyTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUoZGVjbGFyYXRpb25UeXBlKG5vZGUpLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNlbWFudGljVHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBmdW5jdGlvbiBib2R5IHVzaW5nIGFscmVhZHktcHJvdmVkIG1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gUHJlY29udmVydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gTW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIFJlZmVyZW5jZSBjbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmUsIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGVycm9yTmFtZXMsIGVycm9ycywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBmaW5hbCBSdW50aW1lRXhjZXB0aW9uIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1FcnJvcl0gLSBXaGV0aGVyIHB1YmxpYyBwcm9ncmFtIHZpc2liaWxpdHkgaXMgYWRtaXR0ZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhRXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW1FcnJvciA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJUZXh0ID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkuam9pbihcIiBcIikgOiBcIlwiXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBzdXBlcmNsYXNzQ2hpbGRyZW4gPSBzdXBlcmNsYXNzID8gc3RydWN0dXJhbENoaWxkcmVuKHN1cGVyY2xhc3MpIDogW11cbiAgY29uc3QgcGFyZW50ID0gc3VwZXJjbGFzc0NoaWxkcmVuLmF0KC0xKVxuICBjb25zdCBib2R5ID0gbm9kZS5nZXRDaGlsZChcIkNsYXNzQm9keVwiKVxuICBjb25zdCBtZW1iZXJzID0gYm9keSA/IHN0cnVjdHVyYWxDaGlsZHJlbihib2R5KSA6IFtdXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbWVtYmVyc1swXVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3I/LmdldENoaWxkKFwiRm9ybWFsUGFyYW1ldGVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyID8gZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlcikgOiBudWxsXG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvckJvZHkgPSBjb25zdHJ1Y3Rvcj8uZ2V0Q2hpbGQoXCJDb25zdHJ1Y3RvckJvZHlcIilcbiAgY29uc3QgY29uc3RydWN0b3JTdGF0ZW1lbnRzID0gY29uc3RydWN0b3JCb2R5ID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yQm9keSkgOiBbXVxuICBjb25zdCBzdXBlckNhbGwgPSBjb25zdHJ1Y3RvclN0YXRlbWVudHNbMF1cbiAgY29uc3Qgc3VwZXJBcmd1bWVudHMgPSBzdXBlckNhbGw/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHN1cGVyVmFsdWVzID0gc3VwZXJBcmd1bWVudHMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oc3VwZXJBcmd1bWVudHMpIDogW11cblxuICBpZiAoKHByb2dyYW1FcnJvciA/ICFbXCJwdWJsaWMgZmluYWxcIiwgXCJmaW5hbFwiXS5pbmNsdWRlcyhtb2RpZmllclRleHQpIDogbW9kaWZpZXJUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICAhc3VwZXJjbGFzcyB8fCBzdXBlcmNsYXNzQ2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcGFyZW50Py5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCBub2RlVGV4dChwYXJlbnQsIHNvdXJjZSkgIT0gXCJSdW50aW1lRXhjZXB0aW9uXCIgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8IG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCAhYm9keSB8fCBtZW1iZXJzLmxlbmd0aCAhPSAxIHx8XG4gICAgY29uc3RydWN0b3I/Lm5hbWUgIT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIgfHxcbiAgICAocHJvZ3JhbUVycm9yID8gbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gY29uc3RydWN0b3IsIHNvdXJjZSkgIT0gXCJwdWJsaWNcIiA6IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpKSB8fFxuICAgIGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpID8/IG5vZGUsIHNvdXJjZSkgIT0gZGVjbGFyYXRpb24ubmFtZSB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1wiIHx8XG4gICAgbm9kZVRleHQocGFyYW1ldGVyTmFtZSA/PyBub2RlLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiIHx8ICFjb25zdHJ1Y3RvckJvZHkgfHwgY29uc3RydWN0b3JTdGF0ZW1lbnRzLmxlbmd0aCAhPSAxIHx8XG4gICAgc3VwZXJDYWxsPy5uYW1lICE9IFwiRXhwbGljaXRDb25zdHJ1Y3Rvckludm9jYXRpb25cIiB8fCAhc3VwZXJDYWxsLmdldENoaWxkKFwic3VwZXJcIikgfHwgc3VwZXJWYWx1ZXMubGVuZ3RoICE9IDEgfHxcbiAgICBzdXBlclZhbHVlc1swXS5uYW1lICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGVUZXh0KHN1cGVyVmFsdWVzWzBdLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCB0eXBlZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7XG4gICAgbmFtZTogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0eXBlOiBub2RlTG9jYXRpb24ocGFyZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBwYWNrYWdlLXByaXZhdGUgSmF2YSByZWZlcmVuY2UgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UtbWV0aG9kIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ29uc3RydWN0b3Igb3IgbWV0aG9kIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBzb2xlIGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBFeGFjdCBzaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhQ2xhc3NDYWxsYWJsZVNpZ25hdHVyZShub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuXG4gIGlmIChtb2RpZmllcnMgfHwgbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIikgfHxcbiAgICBjb25zdHJ1Y3RvciAhPSAobm9kZS5uYW1lID09IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSB8fCBjb25zdHJ1Y3RvciAmJiBuYW1lICE9IGRlY2xhcmF0aW9uLm5hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXIpXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZU5vZGUgPSBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG5cbiAgICBpZiAocGFyYW1ldGVyLm5hbWUgIT0gXCJGb3JtYWxQYXJhbWV0ZXJcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHxcbiAgICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIkRpbWVuc2lvblwiKSB8fCAhcGFyYW1ldGVyTmFtZU5vZGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCByZWZlcmVuY2UgY2xhc3MgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gbm9kZVRleHQocGFyYW1ldGVyTmFtZU5vZGUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpfSxcbiAgICB7bmFtZTogbm9kZUxvY2F0aW9uKHBhcmFtZXRlck5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZTogY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBuYW1lLCBuYW1lTG9jYXRpb246IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSwgcGFyYW1ldGVycyxcbiAgICAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBjb252ZXJ0UmV0dXJuVHlwZShkZWNsYXJhdGlvblR5cGUobm9kZSksIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0pfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBib3VuZGVkIGZpbmFsL3ByaXZhdGUtZmllbGQgSmF2YSByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIENsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIFRvcC1sZXZlbCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3JzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsIGVycm9ycyxcbiAgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG4gIGNvbnN0IGJvZHkgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuXG4gIGlmIChtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwiZmluYWxcIiB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8XG4gICAgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8IGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggIT0gbWVtYmVycy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkTm9kZXMubGVuZ3RoKS5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiRmllbGREZWNsYXJhdGlvblwiKSB8fFxuICAgIG1lbWJlcnNbZmllbGROb2Rlcy5sZW5ndGhdICE9IGNvbnN0cnVjdG9yTm9kZXNbMF0gfHxcbiAgICBtZW1iZXJzLnNsaWNlKGZpZWxkTm9kZXMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gZmllbGROb2Rlcy5tYXAoKGZpZWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGZpZWxkTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZE1vZGlmaWVycyA9IGZpZWxkTm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG5hbWVzID0gZmllbGRNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oZmllbGRNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cbiAgICBjb25zdCB2YXJpYWJsZU5vZGVzID0gZmllbGROb2RlLmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZU5vZGVzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlID8gdmFyaWFibGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpIDogbnVsbFxuXG4gICAgaWYgKG5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZVwiIHx8IHZhcmlhYmxlTm9kZXMubGVuZ3RoICE9IDEgfHwgIWRlZmluaXRpb24gfHxcbiAgICAgIHN0cnVjdHVyYWxDaGlsZHJlbih2YXJpYWJsZSkubGVuZ3RoICE9IDEgfHwgZmllbGROb2RlLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJhdGlvblR5cGUoZmllbGROb2RlKSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0sXG4gICAge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yTm9kZXNbMF1cbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUoY29uc3RydWN0b3JOb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB0cnVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZCkgPT5cbiAgICBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBmYWxzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KSlcbiAgY29uc3QgYmFzZSA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzLCBjdXJyZW50Q2xhc3M6IGRlY2xhcmF0aW9uLCBlcnJvck5hbWVzLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSwgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cbiAgY29uc3QgY29uc3RydWN0b3JCb2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3Rvck5vZGUsIFwiQ29uc3RydWN0b3JCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhjb25zdHJ1Y3RvckJvZHksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidm9pZFwiKX19KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKHJlcXVpcmVkQ2hpbGQobWV0aG9kTm9kZXNbaW5kZXhdLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLCByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjb252ZW50aW9uYWwgZmluYWwgSmF2YSBjbGFzcyB3aXRoIGV4YWN0IHByaXZhdGUtZmluYWwgc3RvcmFnZSxcbiAqIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLCBhbmQgY2Fub25pY2FsIGZpZWxkLW5hbWUgYWNjZXNzb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIFJlY29yZHMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvZ3JhbVJlY29yZF0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGNsYXNzIHZpc2liaWxpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtUmVjb3JkID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgY29uc3QgbW9kaWZpZXJzVGV4dCA9IG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIilcblxuICBpZiAoKHByb2dyYW1SZWNvcmQgPyAhW1wicHVibGljIGZpbmFsXCIsIFwiZmluYWxcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOiBtb2RpZmllcnNUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY2xhc3MgbW9kaWZpZXJzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IGZpZWxkcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIubmFtZSA9PSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIilcbiAgY29uc3QgYWNjZXNzb3JzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bnN1cHBvcnRlZCA9IG1lbWJlcnMuZmluZCgobWVtYmVyKSA9PiAhW1wiRmllbGREZWNsYXJhdGlvblwiLCBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiwgXCJNZXRob2REZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhtZW1iZXIubmFtZSkpXG5cbiAgaWYgKHVuc3VwcG9ydGVkIHx8IGNvbnN0cnVjdG9ycy5sZW5ndGggIT0gMSB8fCBhY2Nlc3NvcnMubGVuZ3RoICE9IGZpZWxkcy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkcy5sZW5ndGgpLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJGaWVsZERlY2xhcmF0aW9uXCIpIHx8IG1lbWJlcnNbZmllbGRzLmxlbmd0aF0gIT0gY29uc3RydWN0b3JzWzBdIHx8XG4gICAgbWVtYmVycy5zbGljZShmaWVsZHMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBjbGFzcyBtZW1iZXIgb3JkZXIgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkcy5tYXAoKGZpZWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24oZmllbGROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkTW9kaWZpZXJzID0gZmllbGROb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gICAgY29uc3QgbmFtZXMgPSBmaWVsZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihmaWVsZE1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICAgIGNvbnN0IHZhcmlhYmxlID0gcmVxdWlyZWRDaGlsZChmaWVsZE5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQodmFyaWFibGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhcmlhYmxlQ2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odmFyaWFibGUpXG5cbiAgICBpZiAobmFtZXMuam9pbihcIiBcIikgIT0gXCJwcml2YXRlIGZpbmFsXCIgfHwgdmFyaWFibGVDaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGUuZ2V0Q2hpbGQoXCJEaW1lbnNpb25cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSBwcml2YXRlIGZpbmFsIHN0b3JhZ2UgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sXG4gICAgICBuYW1lOiBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGZpZWxkTm9kZSksIGBSZWNvcmQgZmllbGQgJyR7bm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JzWzBdXG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnNOb2RlKVxuICBjb25zdCBib2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3RvciwgXCJDb25zdHJ1Y3RvckJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXNzaWdubWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICBjb25zdCBjb25zdHJ1Y3Rvck1vZGlmaWVycyA9IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNvbnN0cnVjdG9yTW9kaWZpZXJOYW1lcyA9IGNvbnN0cnVjdG9yTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yTW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgaWYgKG5vZGVUZXh0KGNvbnN0cnVjdG9yTmFtZSwgc291cmNlKSAhPSBkZWNsYXJhdGlvbi5uYW1lIHx8XG4gICAgY29uc3RydWN0b3JNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IChwcm9ncmFtUmVjb3JkID8gXCJwdWJsaWNcIiA6IFwiXCIpIHx8IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoIHx8IGFzc2lnbm1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XVxuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGFzc2lnbm1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFzc2lnbm1lbnRFeHByZXNzaW9uID0gYXNzaWdubWVudD8uZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuICAgIGNvbnN0IGFzc2lnbm1lbnRDaGlsZHJlbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uID8gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnRFeHByZXNzaW9uKSA6IFtdXG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBhc3NpZ25tZW50Q2hpbGRyZW5bMF1cbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnRDaGlsZHJlblsxXVxuICAgIGNvbnN0IHZhbHVlID0gYXNzaWdubWVudENoaWxkcmVuWzJdXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlciA/IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAocGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgIXBhcmFtZXRlck5hbWUgfHwgbm9kZVRleHQocGFyYW1ldGVyTmFtZSwgc291cmNlKSAhPSBmaWVsZC5uYW1lIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpIHx8ICFwYXJhbWV0ZXJUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcmFtZXRlclR5cGUsIGZpZWxkLnR5cGUpIHx8XG4gICAgICBhc3NpZ25tZW50Py5uYW1lICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGFzc2lnbm1lbnRDaGlsZHJlbi5sZW5ndGggIT0gMyB8fCBmaWVsZEFjY2Vzcz8ubmFtZSAhPSBcIkZpZWxkQWNjZXNzXCIgfHxcbiAgICAgIG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IGB0aGlzLiR7ZmllbGQubmFtZX1gIHx8IG9wZXJhdG9yPy5uYW1lICE9IFwiQXNzaWduT3BcIiB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIiB8fFxuICAgICAgdmFsdWU/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQodmFsdWUsIHNvdXJjZSkgIT0gZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpbmRleF1cbiAgICBjb25zdCBuYW1lID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkQ2hpbGQoYWNjZXNzb3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmxvY2spXG4gICAgY29uc3QgcmV0dXJuZWQgPSBzdGF0ZW1lbnRzWzBdPy5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgYWNjZXNzb3JUeXBlID0gY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGFjY2Vzc29yKSwgYFJlY29yZCBhY2Nlc3NvciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGNvbnN0IGFjY2Vzc29yTW9kaWZpZXJzID0gYWNjZXNzb3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBhY2Nlc3Nvck1vZGlmaWVyTmFtZXMgPSBhY2Nlc3Nvck1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihhY2Nlc3Nvck1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuXG4gICAgaWYgKGFjY2Vzc29yTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSAocHJvZ3JhbVJlY29yZCA/IFwicHVibGljXCIgOiBcIlwiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8XG4gICAgICBub2RlVGV4dChuYW1lLCBzb3VyY2UpICE9IGZpZWxkLm5hbWUgfHwgc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnMpLmxlbmd0aCAhPSAwIHx8IHN0YXRlbWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICAgIHN0YXRlbWVudHNbMF0ubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiIHx8ICFyZXR1cm5lZCB8fCBub2RlVGV4dChyZXR1cm5lZCwgc291cmNlKSAhPSBgdGhpcy4ke2ZpZWxkLm5hbWV9YCB8fFxuICAgICAgIXNhbWVWYWx1ZVR5cGUoYWNjZXNzb3JUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgYWNjZXNzb3JcIiwgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIERldGVjdHMgb25seSB0aGUgcGlubmVkIGdyYW1tYXIncyBwYXJzZXItYmFja2VkIHJlY292ZXJ5IHNoYXBlIGZvciBKYXZhIHJlY29yZCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gcm9vdCAtIFByb2dyYW0gcm9vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgdW5kZWZpbmVkfSBUaGUgcGFyc2VyLW93bmVkIGByZWNvcmRgIHR5cGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHJvb3QsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHN0cnVjdHVyYWxDaGlsZHJlbihyb290KVswXVxuICBjb25zdCB0eXBlID0gZmlyc3Q/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IGZpcnN0LmdldENoaWxkKFwiVHlwZU5hbWVcIikgOiBudWxsXG5cbiAgcmV0dXJuIHR5cGUgJiYgbm9kZVRleHQodHlwZSwgc291cmNlKSA9PSBcInJlY29yZFwiID8gdHlwZSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBKYXZhIGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uTm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uZGl0aW9uQ29udGFpbmVyKVxuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25Ob2Rlcy5sZW5ndGggPT0gMSA/IGNvbmRpdGlvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRpcmVjdCA9IGRpcmVjdENoaWxkcmVuKG5vZGUpXG4gIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gZGlyZWN0LmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gY29uZGl0aW9uQ29udGFpbmVyLm5hbWUgJiZcbiAgICBjaGlsZC5mcm9tID09IGNvbmRpdGlvbkNvbnRhaW5lci5mcm9tICYmIGNoaWxkLnRvID09IGNvbmRpdGlvbkNvbnRhaW5lci50bylcbiAgY29uc3QgY29uc2VxdWVudE5vZGUgPSBkaXJlY3RbY29uZGl0aW9uSW5kZXggKyAxXVxuICBjb25zdCBhbHRlcm5hdGVOb2RlID0gZGlyZWN0LmF0KC0xKSA9PSBjb25zZXF1ZW50Tm9kZSA/IHVuZGVmaW5lZCA6IGRpcmVjdC5hdCgtMSlcblxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uc2VxdWVudE5vZGUgfHwgY29uc2VxdWVudE5vZGUubmFtZSAhPSBcIkJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaWYgd2l0aG91dCBibG9jayBjb25zZXF1ZW50XCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3Qgc2VtYW50aWNDb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihjb25kaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGxldCBhbHRlcm5hdGVcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG5cbiAgaWYgKGFsdGVybmF0ZU5vZGU/Lm5hbWUgPT0gXCJCbG9ja1wiKSB7XG4gICAgYWx0ZXJuYXRlID0gY29udmVydEJsb2NrKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXG4gIH0gZWxzZSBpZiAoYWx0ZXJuYXRlTm9kZT8ubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBhbHRlcm5hdGUgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXVxuICAgIH1cbiAgfSBlbHNlIGlmIChhbHRlcm5hdGVOb2RlICYmIGFsdGVybmF0ZU5vZGUubmFtZSAhPSBcImVsc2VcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGlmIGFsdGVybmF0ZSAke2FsdGVybmF0ZU5vZGUubmFtZX1gLCBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IHNlbWFudGljQ29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc2VxdWVudENvbnRleHQpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGJsb2NrLWJvZGllZCBKYXZhIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBXaGlsZVN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0V2hpbGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSBub2RlLmdldENoaWxkKFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgY29uc3QgYm9keSA9IG5vZGUuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjb25kaXRpb25Ob2RlcyA9IGNvbmRpdGlvbkNvbnRhaW5lciA/IHN0cnVjdHVyYWxDaGlsZHJlbihjb25kaXRpb25Db250YWluZXIpIDogW11cblxuICBpZiAoZGlyZWN0Lmxlbmd0aCAhPSAzIHx8IGRpcmVjdFswXS5uYW1lICE9IFwid2hpbGVcIiB8fCBkaXJlY3RbMV0ubmFtZSAhPSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIgfHxcbiAgICBkaXJlY3RbMl0ubmFtZSAhPSBcIkJsb2NrXCIgfHwgIWNvbmRpdGlvbkNvbnRhaW5lciB8fCAhYm9keSB8fCBjb25kaXRpb25Ob2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ3aGlsZSB3aXRob3V0IGV4YWN0IGNvbmRpdGlvbiBhbmQgYmxvY2sgYm9keVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAuLi5jb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLFxuICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcylcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24oY29uZGl0aW9uTm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIldoaWxlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24oZGlyZWN0WzBdLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgSmF2YSdzIHN1cHBvcnRlZCBtYWluIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWFpbiBtZXRob2QuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVudHJ5UG9pbnR9IFNlbWFudGljIGVudHJ5IHBvaW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50cnlQb2ludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5nZXRDaGlsZChcIkZvcm1hbFBhcmFtZXRlcnNcIilcbiAgY29uc3QgZGVmaW5pdGlvbiA9IG5vZGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IHJldHVyblR5cGUgPSBub2RlLmdldENoaWxkKFwidm9pZFwiKVxuICBjb25zdCBtb2RpZmllck5hbWVzID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkFycmF5VHlwZVwiKVxuICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcblxuICBpZiAobW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBzdGF0aWNcIiB8fCAhcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1tdXCIgfHxcbiAgICBub2RlVGV4dChwYXJhbWV0ZXJOYW1lID8/IG5vZGUsIHNvdXJjZSkgIT0gXCJhcmdzXCIgfHwgIWRlZmluaXRpb24gfHwgbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKSAhPSBcIm1haW5cIiB8fCAhcmV0dXJuVHlwZSB8fFxuICAgIG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBub2RlLmdldENoaWxkKFwiVGhyb3dzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KCksXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICByZWNvcmROYW1lcyxcbiAgICByZWNvcmRzLFxuICAgIHJldHVyblR5cGU6IHVuZGVmaW5lZFxuICB9KVxuXG4gIHJldHVybiB7Ym9keSwga2luZDogXCJFbnRyeVBvaW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBwcmludCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gRXhwcmVzc2lvbiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gU2VtYW50aWMgcHJpbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGNvbnN0IHByaW50SW52b2NhdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1ldGhvZEludm9jYXRpb25cIilcblxuICBpZiAoIXByaW50SW52b2NhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gd2l0aG91dCBTeXN0ZW0ub3V0LnByaW50bG5cIiwgbG9jYXRpb24pXG5cbiAgY29uc3QgZmllbGRBY2Nlc3MgPSBwcmludEludm9jYXRpb24uZ2V0Q2hpbGQoXCJGaWVsZEFjY2Vzc1wiKVxuICBjb25zdCBtZXRob2ROYW1lID0gcHJpbnRJbnZvY2F0aW9uLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuXG4gIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWluIHdpdGhvdXQgU3lzdGVtLm91dC5wcmludGxuXCIsIG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChwcmludEludm9jYXRpb24sIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuXG4gIGlmIChhcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaW50bG4gd2l0aG91dCBvbmUgc3VwcG9ydGVkIGFyZ3VtZW50XCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudExpc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgcHJpbnRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbjogcHJpbnRMb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YSBpbnRvIHRoZSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2lucHV0LmNhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCByZWNvcmRUb2tlbiA9IGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHRyZWUudG9wTm9kZSwgc291cmNlKVxuXG4gICAgaWYgKHJlY29yZFRva2VuKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiSmF2YSByZWNvcmQgZGVjbGFyYXRpb24gdW5kZXIgdGhlIHBpbm5lZCBwYXJzZXJcIiwgbm9kZUxvY2F0aW9uKHJlY29yZFRva2VuLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cblxuICBpZiAocHJvZ3JhbSkgcmV0dXJuIHBhcnNlSmF2YVByb2dyYW1Nb2R1bGUodHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpXG5cbiAgY29uc3QgcHJvZ3JhbU1lbWJlcnMgPSB0YXNrMDM0SmF2YVByb2dyYW1NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcHJvZ3JhbU1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bmV4cGVjdGVkUHJvZ3JhbU1lbWJlciA9IHByb2dyYW1NZW1iZXJzLmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1haW5DbGFzc2VzID0gY2xhc3NEZWNsYXJhdGlvbnMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwiTWFpblwiKVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gbWFpbkNsYXNzZXNbMF1cblxuICBpZiAoIWNsYXNzRGVjbGFyYXRpb24gfHwgbWFpbkNsYXNzZXMubGVuZ3RoICE9IDEgfHwgdW5leHBlY3RlZFByb2dyYW1NZW1iZXIgfHwgY2xhc3NEZWNsYXJhdGlvbnMuYXQoLTEpICE9IGNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29tcGlsYXRpb24gdW5pdCBvdGhlciB0aGFuIHJlY29yZCBjbGFzc2VzIGZvbGxvd2VkIGJ5IG9uZSBNYWluIGNsYXNzXCIsXG4gICAgICBub2RlTG9jYXRpb24odW5leHBlY3RlZFByb2dyYW1NZW1iZXIgPz8gdHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc05hbWUgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc01vZGlmaWVycyA9IGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgY2xhc3NNb2RpZmllck5hbWVzID0gY2xhc3NNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBpZiAobm9kZVRleHQoY2xhc3NOYW1lLCBzb3VyY2UpICE9IFwiTWFpblwiIHx8IGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInB1YmxpYyBmaW5hbCBNYWluIGNsYXNzXCIsIG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSB0YXNrMDM0SmF2YU1haW5NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHVuc3VwcG9ydGVkTWVtYmVyID0gbWVtYmVycy5maW5kKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiTWV0aG9kRGVjbGFyYXRpb25cIilcblxuICBpZiAodW5zdXBwb3J0ZWRNZW1iZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdW5zdXBwb3J0ZWRNZW1iZXIubmFtZSwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkTWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbWV0aG9kcyA9IG1lbWJlcnNcbiAgY29uc3QgbWFpbk1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1ldGhvZCwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwibWFpblwiKVxuICBjb25zdCBtYWluTWV0aG9kID0gbWFpbk1ldGhvZHNbMF1cbiAgY29uc3QgZnVuY3Rpb25NZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG1ldGhvZCkgPT4gbWV0aG9kICE9IG1haW5NZXRob2QpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZnVuY3Rpb25NZXRob2RzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY2xhc3Mgd2l0aG91dCBhIHNlbWFudGljIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAoIW1haW5NZXRob2QgfHwgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjbGFzcyB3aXRob3V0IG9uZSB1bmFtYmlndW91cyBtYWluXCIsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IG5vbWluYWxOb2RlcyA9IGNsYXNzRGVjbGFyYXRpb25zLmZpbHRlcigoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uICE9IGNsYXNzRGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBub21pbmFsTm9kZXMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGRlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICAgIHJldHVybiBwYXJlbnQgJiYgbm9kZVRleHQocGFyZW50LCBzb3VyY2UpID09IFwiZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uXCJcbiAgfSlcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiZcbiAgICBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSkpLnNvbWUoKG1lbWJlcikgPT5cbiAgICAgIG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiICYmIG5vZGVUZXh0KG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSA/PyBtZW1iZXIsIHNvdXJjZSkgPT0gXCJwcml2YXRlXCIpKVxuICBjb25zdCByZWNvcmROb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMoZGVjbGFyYXRpb24pKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlcnJvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoZXJyb3JOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgocmVjb3JkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKHJlY29yZE5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlY29yZE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChyZWNvcmROb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSksXG4gICAgICAuLi4odHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnN9IDoge30pXG4gICAgfVxuICB9KVxuICBjb25zdCByZWZlcmVuY2VEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gKHtcbiAgICBjb25zdHJ1Y3RvcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9ufSAqLyAoe30pLCBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDbGFzc0RlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocmVjb3JkRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb25dKSkpKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlZmVyZW5jZURlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSAqL1xuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChlcnJvckRlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoW2RlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uXSkpKVxuICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgIGVycm9yTmFtZXMuc2V0KGZhaWx1cmUubmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpKVxuICB9XG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiBjb252ZXJ0SmF2YUVycm9yKGVycm9yTm9kZSwgZXJyb3JEZWNsYXJhdGlvbnNbaW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChyZWZlcmVuY2VEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChyZWNvcmROb2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0SmF2YVJlY29yZChyZWNvcmROb2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIGZhbHNlLCBgZnVuY3Rpb246JHtpbmRleH1gLCByZWZlcmVuY2VEZWNsYXJhdGlvbnMubGVuZ3RoID4gMCkpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gKi9cbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzKGNhcGFiaWxpdGllcywgbG9jYXRpb24pKVxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhjbGFzc05vZGUsIHJlZmVyZW5jZURlY2xhcmF0aW9uc1tpbmRleF0sXG4gICAgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBjb252ZXJ0RW50cnlQb2ludChtYWluTWV0aG9kLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCxcbiAgICBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzQnlJZClcblxuICByZXR1cm4ge2VudHJ5UG9pbnQsIGZ1bmN0aW9ucywga2luZDogXCJNb2R1bGVcIiwgbG9jYXRpb24sIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihjbGFzc2VzLmxlbmd0aCA+IDAgPyB7Y2xhc3Nlc30gOiB7fSksIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSl9XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIHRvcC1sZXZlbCBzdXBwb3J0IGVtaXR0ZWQgZm9yIHRoZSBidWlsdC1pbiBwcm9iZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IG1lbWJlcnMgLSBQYXJzZWQgcHJvZ3JhbSBtZW1iZXJzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBQb3J0YWJsZSBwcm9ncmFtIG1lbWJlcnMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhUHJvZ3JhbU1lbWJlcnMobWVtYmVycywgY2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpIHx8IG5vZGVUZXh0KG1lbWJlcnNbMF0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIikgcmV0dXJuIG1lbWJlcnNcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcImphdmFcIiwgXCJ0b3BcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCB0b3AtbGV2ZWwgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24obWVtYmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbmFtZXMgPSBbXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIsIFwiUHJvYmVSZWFkRmFpbHVyZVwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCIsXG4gICAgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIsIFwiUHJvYmVSZXNvdXJjZVwiXVxuICBjb25zdCBtYXRjaGVzID0gbmFtZXMuZXZlcnkoKG5hbWUsIGluZGV4KSA9PiBtZW1iZXJzW2luZGV4ICsgMV0/Lm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgJiZcbiAgICBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1lbWJlcnNbaW5kZXggKyAxXSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IG5hbWUpXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbbmFtZXMubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtdG9wLWVuZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgdG9wLWxldmVsIHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKG1lbWJlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBtZW1iZXJzLnNsaWNlKG5hbWVzLmxlbmd0aCArIDIpXG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIE1haW4tbWVtYmVyIHN1cHBvcnQgZW1pdHRlZCBmb3IgdGhlIGJ1aWx0LWluIHByb2JlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gbWVtYmVycyAtIFBhcnNlZCBNYWluIG1lbWJlcnMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IFBvcnRhYmxlIE1haW4gbWVtYmVycy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNEphdmFNYWluTWVtYmVycyhtZW1iZXJzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykgfHwgbm9kZVRleHQobWVtYmVyc1swXSwgc291cmNlKSAhPSBcIi8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1tZW1iZXJzXCIpIHJldHVybiBtZW1iZXJzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgXCJqYXZhXCIsIFwibWVtYmVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJGaWVsZERlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUVmZmVjdFwiXSxcbiAgICBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlQWNxdWlyZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sXG4gICAgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlVHJhY2VcIl1cbiAgXVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFtraW5kLCBuYW1lXSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBtZW1iZXIgPSBtZW1iZXJzW2luZGV4ICsgMV1cbiAgICBpZiAobWVtYmVyPy5uYW1lICE9IGtpbmQpIHJldHVybiBmYWxzZVxuICAgIGlmIChraW5kID09IFwiRmllbGREZWNsYXJhdGlvblwiKSByZXR1cm4gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpLmluY2x1ZGVzKGAgJHtuYW1lfSA9YClcbiAgICByZXR1cm4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChtZW1iZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSA9PSBuYW1lXG4gIH0pXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbZXhwZWN0ZWQubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVycy1lbmRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbWVtYmVycy5zbGljZShleHBlY3RlZC5sZW5ndGggKyAyKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBhbHJlYWR5LXF1YWxpZmllZCBjYW5vbmljYWwgSmF2YSBjb21waWxhdGlvbiB1bml0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHJvb3QgLSBFcnJvci1mcmVlIFByb2dyYW0gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBwcm9ncmFtIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VKYXZhUHJvZ3JhbU1vZHVsZShyb290LCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpIHtcbiAgaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChzdHJ1Y3R1cmFsQ2hpbGRyZW4ocm9vdCkuZmluZCgobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSlcbiAgY29uc3QgY2xhc3NNb2RpZmllcnMgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJOYW1lcyA9IGNsYXNzTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNsYXNzTW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NCb2R5KVxuICBjb25zdCBtYWluTWV0aG9kcyA9IG1lbWJlcnMuZmlsdGVyKChtZXRob2QpID0+IG1ldGhvZC5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJlxuICAgIG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQobWV0aG9kLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gXCJtYWluXCIpXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBpc0Vycm9yID0gQm9vbGVhbihzdXBlcmNsYXNzICYmIG5vZGVUZXh0KHN1cGVyY2xhc3MsIHNvdXJjZSkgPT0gXCJleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb25cIilcbiAgY29uc3QgaXNSZWNvcmQgPSAhaXNFcnJvciAmJiBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbS5pc0VudHJ5ICYmIGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInNlbGVjdGVkIGVudHJ5IGNsYXNzIHdpdGhvdXQgcHVibGljIGZpbmFsIHZpc2liaWxpdHlcIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJzZWxlY3RlZCBlbnRyeSBjbGFzcyB3aXRob3V0IG9uZSBtYWluIG1ldGhvZFwiLCBsb2NhdGlvbilcbiAgaWYgKCFwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24obWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoKGlzUmVjb3JkIHx8IGlzRXJyb3IpICYmIG1haW5NZXRob2RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9taW5hbCBjbGFzcyBjb250YWluaW5nIG1haW5cIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgZXJyb3JEZWNsYXJhdGlvbnMgPSBpc0Vycm9yID8gW3tcbiAgICBpZDogXCJlcnJvcjowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NEZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpXG4gIH1dIDogW11cblxuICBjb25zdCByZWNvcmRUeXBlUGFyYW1ldGVycyA9IGlzUmVjb3JkXG4gICAgPyBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgXCJyZWNvcmQ6MFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IGlzUmVjb3JkID8gW3tcbiAgICBmaWVsZHM6IFtdLFxuICAgIGlkOiBcInJlY29yZDowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChyZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSxcbiAgICAuLi4ocmVjb3JkVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHJlY29yZFR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSA6IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi9cbiAgY29uc3QgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0ucmVjb3JkcylcbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAocHJvZ3JhbS5lcnJvcnMgPz8gW10pXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gY29udmVydEphdmFFcnJvcihjbGFzc0RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IHJlY29yZHNCeUlkID0gbmV3IE1hcChbLi4ucHJvZ3JhbS5yZWNvcmRzLnZhbHVlcygpLCAuLi5yZWNvcmREZWNsYXJhdGlvbnNdXG4gICAgLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgY2xhc3Nlc0J5SWQgPSBuZXcgTWFwKClcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PlxuICAgIGNvbnZlcnRKYXZhUmVjb3JkKGNsYXNzRGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IGZ1bmN0aW9uTWV0aG9kcyA9IGlzUmVjb3JkIHx8IGlzRXJyb3IgPyBbXSA6IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJiAhbWFpbk1ldGhvZHMuaW5jbHVkZXMobWVtYmVyKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHRydWUsIGBmdW5jdGlvbjoke2luZGV4fWApKVxuICAvKiogQHR5cGUge1tzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZV1bXX0gKi9cbiAgY29uc3QgaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXMgPSBbLi4ucHJvZ3JhbS5mdW5jdGlvbnNdLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4uY2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcyhjYXBhYmlsaXRpZXMsIGxvY2F0aW9uKSwgLi4uaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXNdKVxuXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVtcHR5QmxvY2sgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksIGxvY2F0aW9uLCBzdGF0ZW1lbnRzOiBbXX1cbiAgY29uc3QgZW50cnlQb2ludCA9IHByb2dyYW0uaXNFbnRyeVxuICAgID8gY29udmVydEVudHJ5UG9pbnQobWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQpXG4gICAgOiB7Ym9keTogZW1wdHlCbG9jaywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRW50cnlQb2ludFwiKSwgbG9jYXRpb259XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uLFxuICAgIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGRpcmVjdCBwYWNrYWdlL2ltcG9ydC9jbGFzcyBub2RlcyBmcm9tIHRoZSBwaW5uZWQgTGV6ZXIgZ3JhbW1hci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmd9fSBQYXJzZXItb3duZWQgSmF2YSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpXG4gIGNvbnN0IHBhY2thZ2VzID0gbWVtYmVycy5maWx0ZXIoKG5vZGUpID0+IG5vZGUubmFtZSA9PSBcIlBhY2thZ2VEZWNsYXJhdGlvblwiKVxuICBjb25zdCBpbXBvcnRzTm9kZXMgPSBtZW1iZXJzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIilcbiAgY29uc3QgY2xhc3NlcyA9IG1lbWJlcnMuZmlsdGVyKChub2RlKSA9PiBub2RlLm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGludmFsaWQgPSBtZW1iZXJzLmZpbmQoKG5vZGUpID0+ICFbXCJQYWNrYWdlRGVjbGFyYXRpb25cIiwgXCJJbXBvcnREZWNsYXJhdGlvblwiLCBcIkNsYXNzRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5uYW1lKSlcbiAgY29uc3QgcGFja2FnZU5vZGUgPSBwYWNrYWdlc1swXVxuICBjb25zdCBjbGFzc05vZGUgPSBjbGFzc2VzWzBdXG5cbiAgaWYgKCFwYWNrYWdlTm9kZSB8fCBwYWNrYWdlcy5sZW5ndGggIT0gMSB8fCAhY2xhc3NOb2RlIHx8IGNsYXNzZXMubGVuZ3RoICE9IDEgfHwgaW52YWxpZCB8fFxuICAgIG1lbWJlcnMuaW5kZXhPZihwYWNrYWdlTm9kZSkgIT0gMCB8fCBtZW1iZXJzLmluZGV4T2YoY2xhc3NOb2RlKSAhPSBtZW1iZXJzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib25lIHBhY2thZ2UgZm9sbG93ZWQgYnkgaW1wb3J0cyBhbmQgb25lIHB1YmxpYyBjbGFzc1wiLFxuICAgICAgbm9kZUxvY2F0aW9uKGludmFsaWQgPz8gcGFja2FnZXNbMV0gPz8gY2xhc3Nlc1sxXSA/PyB0cmVlLnRvcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhY2thZ2VOYW1lTm9kZSA9IHBhY2thZ2VOb2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBwYWNrYWdlTm9kZS5nZXRDaGlsZChcIklkZW50aWZpZXJcIilcbiAgY29uc3QgY2xhc3NOYW1lTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gY2xhc3NOb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBwYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lTm9kZSA/IG5vZGVUZXh0KHBhY2thZ2VOYW1lTm9kZSwgc291cmNlKSA6IFwiXCJcbiAgY29uc3QgY2xhc3NOYW1lID0gbm9kZVRleHQoY2xhc3NOYW1lTm9kZSwgc291cmNlKVxuICBjb25zdCBleHBlY3RlZFN1ZmZpeCA9IGAke3BhY2thZ2VOYW1lLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX0vJHtjbGFzc05hbWV9LmphdmFgXG5cbiAgaWYgKCFwYWNrYWdlTmFtZU5vZGUgfHwgIVtcInB1YmxpYyBmaW5hbFwiLCBcImZpbmFsXCJdLmluY2x1ZGVzKG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIikpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChleHBlY3RlZFN1ZmZpeCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicGFja2FnZS9wYXRoL3B1YmxpYy1jbGFzcyBjb250cmFjdFwiLCBub2RlTG9jYXRpb24oY2xhc3NOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBpbXBvcnRzID0gaW1wb3J0c05vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBub2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBub2RlLmdldENoaWxkKFwiSWRlbnRpZmllclwiKVxuXG4gICAgaWYgKCFuYW1lIHx8IG5vZGUuZ2V0Q2hpbGQoXCJzdGF0aWNcIikgfHwgbm9kZS5nZXRDaGlsZChcIkFzdGVyaXNrXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic3RhdGljIG9yIHdpbGRjYXJkIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHNwZWNpZmllciA9IG5vZGVUZXh0KG5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIuc3BsaXQoXCIuXCIpLmF0KC0xKSA/PyBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24obmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzcGVjaWZpZXIsXG4gICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NCb2R5ID0gcmVxdWlyZWRDaGlsZChjbGFzc05vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IHJlY29yZENsYXNzID0gY2xhc3NNZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGV4cG9ydHMgPSByZWNvcmRDbGFzc1xuICAgID8gbW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSA9PSBcInB1YmxpYyBmaW5hbFwiXG4gICAgICA/IFt7ZXhwb3J0ZWROYW1lOiBjbGFzc05hbWUsIGxvY2FsTmFtZTogY2xhc3NOYW1lLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgICA6IFtdXG4gICAgOiBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHVibGljIGZpbmFsXCIgPyBbXSA6IGNsYXNzTWVtYmVycy5mbGF0TWFwKChtZW1iZXIpID0+IHtcbiAgICAgIGlmIChtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpIHJldHVybiBbXVxuICAgICAgY29uc3QgbmFtZSA9IHJlcXVpcmVkQ2hpbGQobWVtYmVyLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIGNvbnN0IG1ldGhvZE1vZGlmaWVycyA9IG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgICAgY29uc3QgbWV0aG9kTW9kaWZpZXJOYW1lcyA9IG1ldGhvZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtZXRob2RNb2RpZmllcnMpLm1hcCgoe25hbWU6IG1vZGlmaWVyTmFtZX0pID0+IG1vZGlmaWVyTmFtZSkgOiBbXVxuXG4gICAgICBpZiAobm9kZVRleHQobmFtZSwgc291cmNlKSA9PSBcIm1haW5cIiB8fCBtZXRob2RNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpID09IFwicHJpdmF0ZSBzdGF0aWNcIikgcmV0dXJuIFtdXG5cbiAgICAgIHJldHVybiBbe2V4cG9ydGVkTmFtZTogbm9kZVRleHQobmFtZSwgc291cmNlKSwgbG9jYWxOYW1lOiBub2RlVGV4dChuYW1lLCBzb3VyY2UpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgfSlcblxuICByZXR1cm4ge2V4cG9ydHMsIGltcG9ydHMsIG5hdGl2ZU5hbWU6IGAke3BhY2thZ2VOYW1lfS4ke2NsYXNzTmFtZX1gfVxufVxuIl19
|
|
2351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvamF2YS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEYsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMzRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDdEUsT0FBTyxFQUFDLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFFalIsK0NBQStDO0FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QyxJQUFJLEVBQUUsSUFBSTtJQUNWLEdBQUcsRUFBRSxHQUFHO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixDQUFDLEVBQUUsSUFBSTtJQUNQ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RUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFBO1FBQzVLLENBQUMsQ0FBQyxDQUFBO0lBRUosT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsV0FBVyxJQUFJLFNBQVMsRUFBRSxFQUFDLENBQUE7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlcn0gZnJvbSBcIkBsZXplci9qYXZhXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCBtaXNzaW5nVHlwZSwgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7c2V0UGFyc2VyUmFuZ2VzLCB3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtpc1Rhc2swMzRSZXNvdXJjZVByb2JlfSBmcm9tIFwiLi4vc2VtYW50aWMvY2FwYWJpbGl0aWVzLmpzXCJcbmltcG9ydCB7aGFzRXhhY3RFZmZlY3RTdXBwb3J0fSBmcm9tIFwiLi4vYmFja2VuZHMvZWZmZWN0cy5qc1wiXG5pbXBvcnQge3JlcXVpcmVTb3VyY2VSZXR1cm5UeXBlLCBzb3VyY2VTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7Y2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcywgaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlLCBpdGVyYXRpb25CaW5kaW5nVHlwZSwgaXRlcmF0aW9uT3BlcmFuZFR5cGUsIGtub3duQ2FsbFJldHVyblR5cGUsIGxpc3RUeXBlLCBtYXBUeXBlLCBvcHRpb25hbFR5cGUsIG9yZGVyZWRNYXBUeXBlLCBvd25lZFJlc291cmNlVHlwZSwgcmVjb3JkVHlwZSwgcmVmZXJlbmNlVHlwZSwgc2FtZVZhbHVlVHlwZSwgdHlwZVZhcmlhYmxlfSBmcm9tIFwiLi90eXBlcy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59ICovXG5jb25zdCBzaW1wbGVTdHJpbmdFc2NhcGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFwiXFxcIlwiOiBcIlxcXCJcIixcbiAgXCInXCI6IFwiJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXCIsXG4gIGI6IFwiXFxiXCIsXG4gIGY6IFwiXFxmXCIsXG4gIG46IFwiXFxuXCIsXG4gIHI6IFwiXFxyXCIsXG4gIHM6IFwiIFwiLFxuICB0OiBcIlxcdFwiXG59KVxuY29uc3QgamF2YUJpbmFyeU9wZXJhdGlvbnMgPSBuZXcgTWFwKFtcbiAgW1wiK1wiLCBcIkFkZFwiXSxcbiAgW1wiLVwiLCBcIlN1YnRyYWN0XCJdLFxuICBbXCIqXCIsIFwiTXVsdGlwbHlcIl0sXG4gIFtcIiYmXCIsIFwiQW5kXCJdLFxuICBbXCJ8fFwiLCBcIk9yXCJdLFxuICBbXCI9PVwiLCBcIkphdmFFcXVhbFwiXSxcbiAgW1wiIT1cIiwgXCJKYXZhTm90RXF1YWxcIl0sXG4gIFtcIjxcIiwgXCJMZXNzVGhhblwiXSxcbiAgW1wiPD1cIiwgXCJMZXNzVGhhbk9yRXF1YWxcIl0sXG4gIFtcIj5cIiwgXCJHcmVhdGVyVGhhblwiXSxcbiAgW1wiPj1cIiwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIl1cbl0pXG5jb25zdCByZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5cbi8qKlxuICogQHR5cGVkZWYgSmF2YUNvbnZlcnNpb25Db250ZXh0XG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluZGluZ1R5cGU+fSBiaW5kaW5ncyAtIEV4cGxpY2l0bHkgdHlwZWQgdmlzaWJsZSBiaW5kaW5ncy5cbiAqIEBwcm9wZXJ0eSB7U2V0PHN0cmluZz59IFtjYXRjaEJpbmRpbmdOYW1lc10gLSBMZXhpY2FsbHkgdmlzaWJsZSBleGFjdCBjYXRjaCBiaW5kaW5nIG5hbWVzLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXRjaEJpbmRpbmc+fSBbY2F0Y2hCaW5kaW5nTm9kZXNdIC0gRXhhY3QgY2F0Y2ggYmluZGluZyBub2RlcyBieSB2aXNpYmxlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IFtjdXJyZW50Q2xhc3NdIC0gRW5jbG9zaW5nIHJlZmVyZW5jZSBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9yTmFtZXMgLSBFcnJvcnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvcnMgLSBFcnJvcnMgYnkgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge1NldDxzdHJpbmc+fSBlcmFzZWRCaW5kaW5nTmFtZXMgLSBTb3VyY2UgYmluZGluZ3MgY29uc3VtZWQgYnkgZXhhY3Qgc2VtYW50aWMgZm9sZHMgaW4gdGhpcyBzY29wZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gRXhwbGljaXQgbW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcHJvcGVydHkge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHByb3BlcnR5IHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IHVuZGVmaW5lZH0gcmV0dXJuVHlwZSAtIEVuY2xvc2luZyByZXR1cm4gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEphdmFGdW5jdGlvblNpZ25hdHVyZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBDb21wbGV0ZSBkZWNsYXJhdGlvbiBsb2NhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG5hbWVMb2NhdGlvbiAtIFBhcnNlci1vd25lZCBuYW1lIGxvY2F0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBGdW5jdGlvbiBuYW1lLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIFNlbWFudGljIHBhcmFtZXRlcnMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRnVuY3Rpb25SZXR1cm5UeXBlfSByZXR1cm5UeXBlIC0gU2VtYW50aWMgcmV0dXJuIHR5cGUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXX0gW3R5cGVQYXJhbWV0ZXJzXSAtIERlY2xhcmF0aW9uLXNjb3BlZCBwYXJhbWV0ZXJzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBhbGwgZGlyZWN0IGNoaWxkIHN5bnRheCBub2Rlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyZW50IHN5bnRheCBub2RlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBDaGlsZCBzeW50YXggbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGRpcmVjdENoaWxkcmVuKG5vZGUpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuXG4gIGZvciAobGV0IGNoaWxkID0gbm9kZS5maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZykgY2hpbGRyZW4ucHVzaChjaGlsZClcblxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHN0cnVjdHVyYWwgZGlyZWN0IGNoaWxkcmVuLCBleGNsdWRpbmcga25vd24gZ3JhbW1hciBkZWxpbWl0ZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJlbnQgc3ludGF4IG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IE5hbWVkIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkge1xuICByZXR1cm4gZGlyZWN0Q2hpbGRyZW4obm9kZSkuZmlsdGVyKChjaGlsZCkgPT4gIVtcIntcIiwgXCJ9XCIsIFwiKFwiLCBcIilcIiwgXCIsXCIsIFwiO1wiLCBcIi5cIl0uaW5jbHVkZXMoY2hpbGQubmFtZSkpXG59XG5cbi8qKlxuICogRmluZHMgYWxsIGRlc2NlbmRhbnQgc3ludGF4IG5vZGVzIHdpdGggYSBnaXZlbiBuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBSb290IHN5bnRheCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOb2RlIG5hbWUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IE1hdGNoaW5nIGRlc2NlbmRhbnRzLlxuICovXG5mdW5jdGlvbiBkZXNjZW5kYW50cyhub2RlLCBuYW1lKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXVxuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgZGlyZWN0Q2hpbGRyZW4obm9kZSkpIHtcbiAgICBpZiAoY2hpbGQubmFtZSA9PSBuYW1lKSBtYXRjaGVzLnB1c2goY2hpbGQpXG4gICAgbWF0Y2hlcy5wdXNoKC4uLmRlc2NlbmRhbnRzKGNoaWxkLCBuYW1lKSlcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzXG59XG5cbi8qKlxuICogUmVxdWlyZXMgb25lIGRpcmVjdCBjaGlsZCBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJlbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ2hpbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBDaGlsZCBub2RlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlZENoaWxkKG5vZGUsIG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgY2hpbGQgPSBub2RlLmdldENoaWxkKG5hbWUpXG5cbiAgaWYgKCFjaGlsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgJHtub2RlLm5hbWV9IHdpdGhvdXQgJHtuYW1lfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gY2hpbGRcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBMZXplciBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMZXplciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gU291cmNlIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBub2RlLmZyb20sIG5vZGUudG8pXG59XG5cbi8qKlxuICogUmV0dXJucyBzb3VyY2UgdGV4dCBiZWxvbmdpbmcgdG8gYSBzeW50YXggbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTGV6ZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBOb2RlIHRleHQuXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkge1xuICByZXR1cm4gc291cmNlLnNsaWNlKG5vZGUuZnJvbSwgbm9kZS50bylcbn1cblxuLyoqXG4gKiBQcm92ZXMgYW4gZXhhY3QgcGFyc2VyLXN0cnVjdHVyZWQgSmF2YSBxdWFsaWZpZWQgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSWRlbnRpZmllciBvciBmaWVsZC1hY2Nlc3Mgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nW10gfCB1bmRlZmluZWR9IEV4YWN0IHN0cnVjdHVyYWwgbmFtZSBwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gcXVhbGlmaWVkTmFtZVBhcnRzKG5vZGUsIHNvdXJjZSkge1xuICBpZiAoW1wiSWRlbnRpZmllclwiLCBcIlR5cGVOYW1lXCJdLmluY2x1ZGVzKG5vZGUubmFtZSkpIHJldHVybiBbbm9kZVRleHQobm9kZSwgc291cmNlKV1cbiAgaWYgKCFbXCJGaWVsZEFjY2Vzc1wiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKG5vZGUubmFtZSkpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDIpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgbGVmdCA9IHF1YWxpZmllZE5hbWVQYXJ0cyhjaGlsZHJlblswXSwgc291cmNlKVxuICBjb25zdCByaWdodCA9IHF1YWxpZmllZE5hbWVQYXJ0cyhjaGlsZHJlblsxXSwgc291cmNlKVxuXG4gIHJldHVybiBsZWZ0ICYmIHJpZ2h0ID8gWy4uLmxlZnQsIC4uLnJpZ2h0XSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgb25seSBhY2NlcHRlZCBKYXZhIE9wdGlvbmFsIHR5cGUvZmFjdG9yeSBzeW1ib2wgc3BlbGxpbmdzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXItcXVhbGlmaWVkIHN5bWJvbCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlkZW50aWZpZXMgamF2YS51dGlsLk9wdGlvbmFsIG9yIE9wdGlvbmFsLlxuICovXG5mdW5jdGlvbiBpc0phdmFPcHRpb25hbFN5bWJvbChub2RlLCBzb3VyY2UpIHtcbiAgY29uc3QgcGFydHMgPSBxdWFsaWZpZWROYW1lUGFydHMobm9kZSwgc291cmNlKVxuXG4gIHJldHVybiBwYXJ0cz8uam9pbihcIi5cIikgPT0gXCJqYXZhLnV0aWwuT3B0aW9uYWxcIiB8fCBwYXJ0cz8uam9pbihcIi5cIikgPT0gXCJPcHRpb25hbFwiXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdXBwb3J0ZWQgSmF2YSBleHByZXNzaW9uIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIExlemVyIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IFtleHBlY3RlZFR5cGVdIC0gQ29udGV4dHVhbCBzZW1hbnRpYyB0eXBlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IFNlbWFudGljIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRFeHByZXNzaW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oY2hpbGRyZW5bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGV4cGVjdGVkVHlwZSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lOiBub2RlVGV4dChub2RlLCBzb3VyY2UpfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJ0aGlzXCIpIHtcbiAgICBpZiAoIWNvbnRleHQuY3VycmVudENsYXNzKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicmVjZWl2ZXIgb3V0c2lkZSBhIHJlZmVyZW5jZSBjbGFzc1wiLCBsb2NhdGlvbilcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7Y2xhc3NJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJSZWNlaXZlckV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge3JlY2VpdmVyOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiRmllbGRBY2Nlc3NcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IG1lbWJlciA9IGNoaWxkcmVuWzFdXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcmVjZWl2ZXI/Lm5hbWUgIT0gXCJ0aGlzXCIgfHwgbWVtYmVyPy5uYW1lICE9IFwiSWRlbnRpZmllclwiIHx8ICFjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgICAgaWYgKHJlY2VpdmVyICYmIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJwcml2YXRlIHJlZmVyZW5jZS1jbGFzcyBmaWVsZCBhY2Nlc3NcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZmllbGQgYWNjZXNzIG91dHNpZGUgdGhlIGRlY2xhcmluZyByZWNlaXZlclwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZmllbGQgPSBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBub2RlVGV4dChtZW1iZXIsIHNvdXJjZSkpXG5cbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGB1bmtub3duIHByaXZhdGUgZmllbGQgJyR7bm9kZVRleHQobWVtYmVyLCBzb3VyY2UpfSdgLCBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZmllbGQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZmllbGQuaWQpLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQcml2YXRlRmllbGRSZWFkXCIpLCBsb2NhdGlvbixcbiAgICAgIHJlY2VpdmVyOiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY2VpdmVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1lbWJlciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJub24tc2FmZSBpbnRlZ2VyIGxpdGVyYWxcIiwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW50ZWdlckxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiQm9vbGVhbkxpdGVyYWxcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCb29sZWFuTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBub2RlVGV4dChub2RlLCBzb3VyY2UpID09IFwidHJ1ZVwifSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBkZWNvZGVTdHJpbmdMaXRlcmFsKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuXG4gIGlmIChub2RlLm5hbWUgPT0gXCJudWxsXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJudWxsIHJlZmVyZW5jZVwiLCBsb2NhdGlvbilcblxuICBpZiAobm9kZS5uYW1lID09IFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IHR5cGVOb2RlID0gY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IFtcIkdlbmVyaWNUeXBlXCIsIFwiVHlwZU5hbWVcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSlbMF0gOiB0eXBlTm9kZVxuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IG5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IG5hbWVOb2RlID8gY29udGV4dC5yZWNvcmROYW1lcy5nZXQobm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIXR5cGVOb2RlIHx8ICFuYW1lTm9kZSB8fCAhYXJndW1lbnRMaXN0IHx8ICFkZWNsYXJhdGlvbiB8fCBub2RlLmdldENoaWxkKFwiQ2xhc3NCb2R5XCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29uc3RydWN0aW9uIG9mIGFuIHVua25vd24gbm9taW5hbCBvciBhbm9ueW1vdXMgY2xhc3NcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGFyZ3VtZW50Tm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuICAgIGlmIChkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICBpZiAodHlwZU5vZGUubmFtZSA9PSBcIkdlbmVyaWNUeXBlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJnZW5lcmljIHJlZmVyZW5jZSBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGNsYXNzTG9jYXRpb24gPSBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50Tm9kZXMubWFwKChhcmd1bWVudCwgaW5kZXgpID0+XG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpLCBsb2NhdGlvbixcbiAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlVHlwZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgY2xhc3NMb2NhdGlvbil9LCB7Y2xhc3M6IGNsYXNzTG9jYXRpb259KVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm93bmVkIHJlc291cmNlIGNvbnN0cnVjdGlvblwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCB0eXBlQXJndW1lbnRzTm9kZSA9IHR5cGVOb2RlLmdldENoaWxkKFwiVHlwZUFyZ3VtZW50c1wiKVxuXG4gICAgaWYgKHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiICYmICF0eXBlQXJndW1lbnRzTm9kZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBnZW5lcmljIHJlY29yZCBjb25zdHJ1Y3Rpb25cIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHNOb2RlXG4gICAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlQXJndW1lbnRzTm9kZSkubWFwKChhcmd1bWVudCkgPT4gY29udmVydEphdmFUeXBlQXJndW1lbnQoXG4gICAgICAgIGFyZ3VtZW50LCBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKSlcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgYXJndW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQsIGluZGV4KSA9PlxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgICBpbnN0YW50aWF0ZWRSZWNvcmRGaWVsZFR5cGUoZGVjbGFyYXRpb24sIHR5cGVBcmd1bWVudHMsIGluZGV4KSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByZWNvcmQ6IHJlY29yZFR5cGUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIHR5cGVBcmd1bWVudHMpXG4gICAgfSwge3JlY29yZDogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IG9wZXJhdG9yTm9kZSA9IG5vZGUuZ2V0Q2hpbGQoXCJMb2dpY09wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJBcml0aE9wXCIpXG4gICAgY29uc3Qgb3BlcmFuZCA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiTG9naWNPcFwiICYmIGNoaWxkLm5hbWUgIT0gXCJBcml0aE9wXCIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRvck5vZGUgPyBub2RlVGV4dChvcGVyYXRvck5vZGUsIHNvdXJjZSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghb3BlcmF0b3JOb2RlIHx8ICFvcGVyYW5kIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IChvcGVyYXRvciAhPSBcIiFcIiAmJiBvcGVyYXRvciAhPSBcIi1cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChvcGVyYXRvciA9PSBcIiFcIiAmJiBvcGVyYW5kLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIgJiYgaXNFcXVhbHNJbnZvY2F0aW9uKG9wZXJhbmQsIHNvdXJjZSkgJiZcbiAgICAgICFpc1plcm9Bcmd1bWVudFJlY29yZE1lbWJlckludm9jYXRpb24ob3BlcmFuZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpIHtcbiAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nRXF1YWxpdHkob3BlcmFuZCwgdHJ1ZSwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihvcGVyYXRvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IHNlbWFudGljID0gd2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgb3BlcmF0b3IgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgbmFtZWQgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBvcGVyYXRvck5vZGUgPSBub2RlLmdldENoaWxkKFwiQ29tcGFyZU9wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJBcml0aE9wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJMb2dpY09wXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJCaXRPcFwiKVxuXG4gICAgaWYgKCFvcGVyYXRvck5vZGUgfHwgbmFtZWQubGVuZ3RoICE9IDMpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJiaW5hcnkgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IG9wZXJhbmRzID0gW25hbWVkWzBdLCBuYW1lZFsyXV1cbiAgICBjb25zdCB1bnN1cHBvcnRlZE9wZXJhbmQgPSBvcGVyYW5kcy5maW5kKChvcGVyYW5kKSA9PiAhaXNTdXBwb3J0ZWRFeHByZXNzaW9uTm9kZShvcGVyYW5kKSlcblxuICAgIGlmICh1bnN1cHBvcnRlZE9wZXJhbmQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdW5zdXBwb3J0ZWRPcGVyYW5kLm5hbWUsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZE9wZXJhbmQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBub2RlVGV4dChvcGVyYXRvck5vZGUsIHNvdXJjZSlcblxuICAgIGlmICghamF2YUJpbmFyeU9wZXJhdGlvbnMuaGFzKG9wZXJhdG9yKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgYmluYXJ5ICR7b3BlcmF0b3J9YCwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgICBsZWZ0OiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJpZ2h0OiBjb252ZXJ0RXhwcmVzc2lvbihvcGVyYW5kc1sxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSksIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCIpLkFkYXB0ZWRPcGVyYXRpb259ICovIChqYXZhQmluYXJ5T3BlcmF0aW9ucy5nZXQob3BlcmF0b3IpKSlcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChzZW1hbnRpYykpXG4gIH1cblxuICBpZiAobm9kZS5uYW1lID09IFwiVGVybmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZGlyZWN0Q2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBxdWVzdGlvbiA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiP1wiIHx8IChjaGlsZC5uYW1lID09IFwiTG9naWNPcFwiICYmIG5vZGVUZXh0KGNoaWxkLCBzb3VyY2UpID09IFwiP1wiKSlcbiAgICBjb25zdCBjb2xvbiA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiOlwiIHx8IChjaGlsZC5uYW1lID09IFwiTG9naWNPcFwiICYmIG5vZGVUZXh0KGNoaWxkLCBzb3VyY2UpID09IFwiOlwiKSlcbiAgICBjb25zdCBuYW1lZCA9IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkICE9PSBxdWVzdGlvbiAmJiBjaGlsZCAhPT0gY29sb24pXG5cbiAgICBpZiAoIXF1ZXN0aW9uIHx8ICFjb2xvbiB8fCBuYW1lZC5sZW5ndGggIT0gMykgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInRlcm5hcnkgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGFsdGVybmF0ZTogY29udmVydEV4cHJlc3Npb24obmFtZWRbMl0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihuYW1lZFswXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBjb25zZXF1ZW50OiBjb252ZXJ0RXhwcmVzc2lvbihuYW1lZFsxXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIiksXG4gICAgICBsb2NhdGlvblxuICAgIH0sIHtcbiAgICAgIGFsdGVybmF0ZTogbm9kZUxvY2F0aW9uKG5hbWVkWzJdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGNvbG9uOiBub2RlTG9jYXRpb24oY29sb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uZGl0aW9uOiBub2RlTG9jYXRpb24obmFtZWRbMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgY29uc2VxdWVudDogbm9kZUxvY2F0aW9uKG5hbWVkWzFdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG9wZXJhdG9yOiBub2RlTG9jYXRpb24ocXVlc3Rpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSkpKVxuICB9XG5cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIikge1xuICAgIGlmIChpc0VxdWFsc0ludm9jYXRpb24obm9kZSwgc291cmNlKSAmJiAhaXNaZXJvQXJndW1lbnRSZWNvcmRNZW1iZXJJbnZvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKSB7XG4gICAgICBjb25zdCBtZXRob2ROYW1lID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdFcXVhbGl0eShub2RlLCBmYWxzZSwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2ROYW1lID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXJndW1lbnROb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IG1ldGhvZCA9IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCByZWNlaXZlclRleHQgPSByZWNlaXZlciA/IG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpIDogXCJcIlxuXG4gICAgaWYgKHJlY2VpdmVyPy5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIG1ldGhvZCA9PSBcImdldE1lc3NhZ2VcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwICYmXG4gICAgICBjb250ZXh0LmJpbmRpbmdzLmdldChyZWNlaXZlclRleHQpPy5raW5kID09IFwiRXJyb3JUeXBlXCIpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JNZXNzYWdlUmVhZFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJlY2VpdmVyOiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IHJlY2VpdmVyTG9jYXRpb24sIG5hbWU6IHJlY2VpdmVyVGV4dH0sIHtcbiAgICAgICAgICBuYW1lOiByZWNlaXZlckxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBbXCJnZXRDbGFzc1wiLCBcImhhc2hDb2RlXCIsIFwidG9TdHJpbmdcIiwgXCJjbG9uZVwiLCBcIm5vdGlmeVwiLCBcIm5vdGlmeUFsbFwiLCBcIndhaXRcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlZmxlY3RpdmUgb3IgT2JqZWN0IG1lbWJlciBhY2Nlc3NcIiwgbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KT8ua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIikge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWZlcmVuY2VUeXBlfSAqLyAoXG4gICAgICAgIGtub3duRXhwcmVzc2lvblR5cGUocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgY29uc3QgZGVjbGFyZWRNZXRob2QgPSBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5uYW1lID09IG1ldGhvZClcblxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnROb2Rlcy5tYXAoKGFyZ3VtZW50LCBpbmRleCkgPT5cbiAgICAgICAgY29udmVydEV4cHJlc3Npb24oYXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGRlY2xhcmVkTWV0aG9kPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBtZXRob2Q6IGRlY2xhcmVkTWV0aG9kPy5pZCA/PyBtZXRob2QsXG4gICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG5cbiAgICBpZiAocmVjZWl2ZXIgJiYgaXNKYXZhT3B0aW9uYWxTeW1ib2wocmVjZWl2ZXIsIHNvdXJjZSkpIHtcbiAgICAgIGNvbnN0IGZhY3RvcnlMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgICBpZiAobWV0aG9kID09IFwiZW1wdHlcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbE5vbmVcIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGFic2VuY2U6IGZhY3RvcnlMb2NhdGlvbixcbiAgICAgICAgICBmYWN0b3J5OiBmYWN0b3J5TG9jYXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT0gXCJvZlwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9wdGlvbmFsU29tZVwiKSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICB2YWx1ZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZClcbiAgICAgICAgfSwge2ZhY3Rvcnk6IGZhY3RvcnlMb2NhdGlvbiwgc29tZTogZmFjdG9yeUxvY2F0aW9ufSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgdW5zdXBwb3J0ZWQgT3B0aW9uYWwuJHttZXRob2R9YCwgZmFjdG9yeUxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXI/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiYgY29udGV4dC5iaW5kaW5ncy5nZXQocmVjZWl2ZXJUZXh0KT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICBjb25zdCBvcGVyYW5kID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgIClcbiAgICAgIGNvbnN0IG9wZXJhdGlvbkxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICAgIGlmIChtZXRob2QgPT0gXCJpc1ByZXNlbnRcIiAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJPcHRpb25hbElzUHJlc2VudFwiKSwgbG9jYXRpb24sIG9wZXJhbmR9LCB7XG4gICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdGlvbkxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09IFwiZ2V0XCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiT3B0aW9uYWxVbndyYXBcIiksIGxvY2F0aW9uLCBvcGVyYW5kfSwge1xuICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRpb25Mb2NhdGlvbixcbiAgICAgICAgICB1bndyYXA6IG9wZXJhdGlvbkxvY2F0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHVuc3VwcG9ydGVkIE9wdGlvbmFsLiR7bWV0aG9kfWAsIG9wZXJhdGlvbkxvY2F0aW9uKVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJvZlwiICYmIHJlY2VpdmVyVGV4dCA9PSBcImphdmEudXRpbC5MaXN0XCIpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTGlzdFR5cGVcIiA/IGV4cGVjdGVkVHlwZS5lbGVtZW50VHlwZSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVsZW1lbnRzOiBhcmd1bWVudE5vZGVzLm1hcCgoYXJndW1lbnQpID0+IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LCBlbGVtZW50VHlwZSkpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMaXN0TGl0ZXJhbFwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtmYWN0b3J5OiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAocmVjZWl2ZXIgJiYgbWV0aG9kID09IFwib2ZcIiAmJiByZWNlaXZlclRleHQgPT0gXCJqYXZhLnV0aWwuTWFwXCIpIHtcbiAgICAgIGlmIChhcmd1bWVudE5vZGVzLmxlbmd0aCAlIDIgIT0gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIk1hcC5vZiBvZGQgYXJndW1lbnQgY291bnRcIiwgbG9jYXRpb24pXG4gICAgICBpZiAoYXJndW1lbnROb2Rlcy5sZW5ndGggPiAyMCkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiamF2YS51dGlsLk1hcC5vZiBzdXBwb3J0cyBhdCBtb3N0IHRlbiBlbnRyaWVzXCIsIG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gZXhwZWN0ZWRUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiID8gZXhwZWN0ZWRUeXBlLnZhbHVlVHlwZSA6IHVuZGVmaW5lZFxuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJndW1lbnROb2Rlcy5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICAgICAgY29uc3Qga2V5Tm9kZSA9IGFyZ3VtZW50Tm9kZXNbaW5kZXhdXG5cbiAgICAgICAgaWYgKGtleU5vZGUubmFtZSAhPSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYXAga2V5IG90aGVyIHRoYW4gYSBzdHJpbmcgbGl0ZXJhbFwiLCBub2RlTG9jYXRpb24oa2V5Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gZGlyZWN0Q2hpbGRyZW4oYXJndW1lbnRMaXN0KS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIixcIiAmJlxuICAgICAgICAgIGNoaWxkLmZyb20gPj0ga2V5Tm9kZS50byAmJiBjaGlsZC50byA8PSBhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0uZnJvbSlcblxuICAgICAgICBpZiAoIXNlcGFyYXRvcikgdGhyb3cgbmV3IEVycm9yKFwiTGV6ZXIgb21pdHRlZCB0aGUgSmF2YSBNYXAub2YgZW50cnkgc2VwYXJhdG9yLlwiKVxuICAgICAgICBlbnRyaWVzLnB1c2god2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAga2V5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0cmluZ0xpdGVyYWx9ICovIChjb252ZXJ0RXhwcmVzc2lvbihrZXlOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSksXG4gICAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwga2V5Tm9kZS5mcm9tLCBhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0udG8pLFxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudE5vZGVzW2luZGV4ICsgMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oc2VwYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7ZW50cmllcywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwTGl0ZXJhbFwiKSwgbG9jYXRpb259LCB7XG4gICAgICAgIGZhY3Rvcnk6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHJlY2VpdmVyICYmIG1ldGhvZCA9PSBcImdldFwiICYmIGFyZ3VtZW50Tm9kZXMubGVuZ3RoID09IDEpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgPyBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk1hcFR5cGVcIiB8fCByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiIHx8XG4gICAgICAgICghcmVjZWl2ZXJUeXBlICYmIGFyZ3VtZW50Tm9kZXNbMF0ubmFtZSA9PSBcIlN0cmluZ0xpdGVyYWxcIikpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICAgICAgICBrZXk6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50Tm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1hcExvb2t1cEV4cHJlc3Npb25cIiksXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgdG90YWxpdHk6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInByb3ZlblwiKVxuICAgICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBpbmRleDogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnROb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkxpc3RJbmRleEV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICB0b3RhbGl0eTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZmFpbC1vbi1hYnNlbmNlXCIpXG4gICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICAgIGlmIChyZWNlaXZlciAmJiBtZXRob2QgPT0gXCJzaXplXCIgJiYgYXJndW1lbnROb2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgICAgZmllbGQ6IG1ldGhvZCxcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJNZW1iZXJSZWFkXCIpLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIHJlY2VpdmVyOiBjb252ZXJ0RXhwcmVzc2lvbihyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICAgICAgfSwge21lbWJlcjogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgICAgY29sbGVjdGlvbjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIiksXG4gICAgICAgIGxvY2F0aW9uXG4gICAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyICYmIHJlY2VpdmVyVGV4dCA9PSBcIk1haW5cIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcyAmJiAhY29udGV4dC5iaW5kaW5ncy5oYXMocmVjZWl2ZXJUZXh0KSkge1xuICAgICAgY29uc3QgbG9jYWxTaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobWV0aG9kKVxuXG4gICAgICBpZiAobG9jYWxTaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50Tm9kZXMubWFwKChjaGlsZCwgaW5kZXgpID0+XG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24oY2hpbGQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGxvY2FsU2lnbmF0dXJlLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG1ldGhvZCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBxdWFsaWZpZWROYW1lID0gYCR7cmVjZWl2ZXJUZXh0fS4ke21ldGhvZH1gXG4gICAgICBjb25zdCBxdWFsaWZpZWRTaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQocXVhbGlmaWVkTmFtZSlcblxuICAgICAgaWYgKHF1YWxpZmllZFNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnROb2Rlcy5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgcXVhbGlmaWVkU2lnbmF0dXJlLnBhcmFtZXRlcnNbaW5kZXhdPy50eXBlKSlcblxuICAgICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IHF1YWxpZmllZE5hbWUsIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgICAgICBjYWxsZWU6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWNlaXZlciAmJiBhcmd1bWVudE5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGZpZWxkOiBtZXRob2QsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1lbWJlclJlYWRcIiksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByZWNlaXZlcjogY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICB9LCB7bWVtYmVyOiBub2RlTG9jYXRpb24obWV0aG9kTmFtZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cblxuICAgIGNvbnN0IHVuc3VwcG9ydGVkUmVjZWl2ZXIgPSByZWNlaXZlclxuXG4gICAgaWYgKHVuc3VwcG9ydGVkUmVjZWl2ZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtZXRob2QgaW52b2NhdGlvbiByZWNlaXZlclwiLCBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWRSZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRBcmd1bWVudCA9IGFyZ3VtZW50Tm9kZXMuZmluZCgoY2hpbGQpID0+ICFpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKGNoaWxkKSlcblxuICAgIGlmICh1bnN1cHBvcnRlZEFyZ3VtZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBtZXRob2QgYXJndW1lbnQgJHt1bnN1cHBvcnRlZEFyZ3VtZW50Lm5hbWV9YCwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkQXJndW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3QgYXJndW1lbnRzXyA9IGFyZ3VtZW50Tm9kZXMubWFwKChjaGlsZCwgaW5kZXgpID0+XG4gICAgICBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgc2lnbmF0dXJlPy5wYXJhbWV0ZXJzW2luZGV4XT8udHlwZSkpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7YXJndW1lbnRzOiBhcmd1bWVudHNfLCBjYWxsZWU6IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkNhbGxFeHByZXNzaW9uXCIpLCBsb2NhdGlvbn0sIHtcbiAgICAgIGNhbGxlZTogbm9kZUxvY2F0aW9uKG1ldGhvZE5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgbm9kZS5uYW1lLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIG9uZSBwYXJzZXItbmF0aXZlIEphdmEgc3RyaW5nIGVxdWFsaXR5IGludm9jYXRpb24gZm9ybS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWV0aG9kIGludm9jYXRpb24gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaW52b2NhdGlvbiBzcGVsbHMgYC5lcXVhbHNgIHdpdGggYSByZWNlaXZlci5cbiAqL1xuZnVuY3Rpb24gaXNFcXVhbHNJbnZvY2F0aW9uKG5vZGUsIHNvdXJjZSkge1xuICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgcmVjZWl2ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gIHJldHVybiBtZXRob2ROYW1lICE9IG51bGwgJiYgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSA9PSBcImVxdWFsc1wiICYmIHJlY2VpdmVycy5sZW5ndGggPT0gMVxufVxuXG4vKipcbiAqIERpc3Rpbmd1aXNoZXMgYSB6ZXJvLWFyZ3VtZW50IG5vbWluYWwgZmllbGQgYWNjZXNzb3IgZnJvbSBKYXZhIHN0cmluZyBlcXVhbGl0eSBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIE1ldGhvZCBpbnZvY2F0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgaXMgYSBrbm93biByZWNvcmQgcmVjZWl2ZXIgd2l0aCBubyBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGlzWmVyb0FyZ3VtZW50UmVjb3JkTWVtYmVySW52b2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFyZ3VtZW50TGlzdCA9IG5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gIHJldHVybiBhcmd1bWVudExpc3QgIT0gbnVsbCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCAmJiByZWNlaXZlciAhPSBudWxsICYmXG4gICAga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCk/LmtpbmQgPT0gXCJSZWNvcmRUeXBlXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBKYXZhIGAuZXF1YWxzYCBvciBpdHMgZGlyZWN0bHkgbmVnYXRlZCBmb3JtIHdpdGhvdXQgc291cmNlLXRleHQgaW5mZXJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgbWV0aG9kIGludm9jYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG5lZ2F0ZWQgLSBXaGV0aGVyIGEgcGFyc2VyLW93bmVkIHVuYXJ5IG5vdCB3cmFwcyB0aGUgaW52b2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gV2hvbGUgZXF1YWxpdHkgZXhwcmVzc2lvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG9wZXJhdG9yTG9jYXRpb24gLSBQYXJzZXItb3duZWQgb3BlcmF0b3IvbWV0aG9kIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gQWRhcHRlZCBlcXVhbGl0eSBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RyaW5nRXF1YWxpdHkobm9kZSwgbmVnYXRlZCwgbG9jYXRpb24sIG9wZXJhdG9yTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkFyZ3VtZW50TGlzdFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50TGlzdClcbiAgY29uc3QgcmVjZWl2ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCB1bnN1cHBvcnRlZEFyZ3VtZW50ID0gYXJndW1lbnRzXy5maW5kKChjaGlsZCkgPT4gIWlzU3VwcG9ydGVkRXhwcmVzc2lvbk5vZGUoY2hpbGQpKVxuXG4gIGlmIChyZWNlaXZlcnMubGVuZ3RoICE9IDEgfHwgYXJndW1lbnRzXy5sZW5ndGggIT0gMSB8fCB1bnN1cHBvcnRlZEFyZ3VtZW50KSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInN0cmluZyBlcXVhbHMgaW52b2NhdGlvblwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPn0gKi9cbiAgY29uc3QgcmFuZ2VzID0ge29wZXJhdG9yOiBvcGVyYXRvckxvY2F0aW9ufVxuXG4gIGlmIChuZWdhdGVkKSB7XG4gICAgcmFuZ2VzLmVxdWFsaXR5T3BlcmF0b3IgPSBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChub2RlLCBcIk1ldGhvZE5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH1cblxuICBjb25zdCBzZW1hbnRpYyA9IHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKHJlY2VpdmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgbG9jYXRpb24sXG4gICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH0sIHJhbmdlcyksIG5lZ2F0ZWQgPyBcIlN0cmluZ05vdEVxdWFsXCIgOiBcIlN0cmluZ0VxdWFsXCIpXG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHNlbWFudGljKSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIExlemVyIG5vZGUgaXMgaW4gdGhlIGV4cHJlc3Npb24gc3Vic2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIHN5bnRheCBub2RlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG5vZGUgaXMgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBpc1N1cHBvcnRlZEV4cHJlc3Npb25Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIFtcbiAgICBcIklkZW50aWZpZXJcIixcbiAgICBcIkludGVnZXJMaXRlcmFsXCIsXG4gICAgXCJCb29sZWFuTGl0ZXJhbFwiLFxuICAgIFwiU3RyaW5nTGl0ZXJhbFwiLFxuICAgIFwiVW5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgXCJUZXJuYXJ5RXhwcmVzc2lvblwiLFxuICAgIFwiTWV0aG9kSW52b2NhdGlvblwiLFxuICAgIFwiT2JqZWN0Q3JlYXRpb25FeHByZXNzaW9uXCIsXG4gICAgXCJGaWVsZEFjY2Vzc1wiLFxuICAgIFwidGhpc1wiLFxuICAgIFwibnVsbFwiLFxuICAgIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIlxuICBdLmluY2x1ZGVzKG5vZGUubmFtZSlcbn1cblxuLyoqXG4gKiBBcHBsaWVzIEphdmEgVW5pY29kZSB0cmFuc2xhdGlvbiBiZWZvcmUgdG9rZW4tbGV2ZWwgc3RyaW5nIGVzY2FwZSBkZWNvZGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsaXRlcmFsIC0gUGFyc2VyLWNvbmZpcm1lZCBKYXZhIHN0cmluZyBsaXRlcmFsLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBMaXRlcmFsIHNvdXJjZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaWNvZGUtdHJhbnNsYXRlZCBsaXRlcmFsLlxuICovXG5mdW5jdGlvbiB0cmFuc2xhdGVVbmljb2RlRXNjYXBlcyhsaXRlcmFsLCBsb2NhdGlvbikge1xuICBsZXQgdHJhbnNsYXRlZCA9IFwiXCJcbiAgbGV0IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgPSAwXG4gIGxldCBwcmV2aW91c1dhc1VuaWNvZGVFc2NhcGUgPSBmYWxzZVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXRlcmFsLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGNoYXJhY3RlciA9IGxpdGVyYWxbaW5kZXhdXG4gICAgY29uc3QgZWxpZ2libGUgPSBjaGFyYWN0ZXIgPT0gXCJcXFxcXCIgJiYgKHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSB8fCBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzICUgMiA9PSAwKVxuXG4gICAgaWYgKGVsaWdpYmxlICYmIGxpdGVyYWxbaW5kZXggKyAxXSA9PSBcInVcIikge1xuICAgICAgbGV0IGRpZ2l0c1N0YXJ0ID0gaW5kZXggKyAyXG5cbiAgICAgIHdoaWxlIChsaXRlcmFsW2RpZ2l0c1N0YXJ0XSA9PSBcInVcIikgZGlnaXRzU3RhcnQrK1xuXG4gICAgICBjb25zdCBoZXhhZGVjaW1hbCA9IGxpdGVyYWwuc2xpY2UoZGlnaXRzU3RhcnQsIGRpZ2l0c1N0YXJ0ICsgNClcbiAgICAgIGNvbnN0IGlzSGV4YWRlY2ltYWwgPSBoZXhhZGVjaW1hbC5sZW5ndGggPT0gNCAmJiBbLi4uaGV4YWRlY2ltYWxdLmV2ZXJ5KChkaWdpdCkgPT5cbiAgICAgICAgKGRpZ2l0ID49IFwiMFwiICYmIGRpZ2l0IDw9IFwiOVwiKSB8fCAoZGlnaXQgPj0gXCJBXCIgJiYgZGlnaXQgPD0gXCJGXCIpIHx8IChkaWdpdCA+PSBcImFcIiAmJiBkaWdpdCA8PSBcImZcIilcbiAgICAgIClcblxuICAgICAgaWYgKCFpc0hleGFkZWNpbWFsKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc3RyaW5nIGVzY2FwZVwiLCBsb2NhdGlvbilcblxuICAgICAgY29uc3QgdHJhbnNsYXRlZENoYXJhY3RlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoTnVtYmVyLnBhcnNlSW50KGhleGFkZWNpbWFsLCAxNikpXG5cbiAgICAgIHRyYW5zbGF0ZWQgKz0gdHJhbnNsYXRlZENoYXJhY3RlclxuICAgICAgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyA9IHRyYW5zbGF0ZWRDaGFyYWN0ZXIgPT0gXCJcXFxcXCIgPyBjb25zZWN1dGl2ZUJhY2tzbGFzaGVzICsgMSA6IDBcbiAgICAgIHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSA9IHRydWVcbiAgICAgIGluZGV4ID0gZGlnaXRzU3RhcnQgKyAzXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRyYW5zbGF0ZWQgKz0gY2hhcmFjdGVyXG4gICAgY29uc2VjdXRpdmVCYWNrc2xhc2hlcyA9IGNoYXJhY3RlciA9PSBcIlxcXFxcIiA/IGNvbnNlY3V0aXZlQmFja3NsYXNoZXMgKyAxIDogMFxuICAgIHByZXZpb3VzV2FzVW5pY29kZUVzY2FwZSA9IGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJhbnNsYXRlZFxufVxuXG4vKipcbiAqIERlY29kZXMgdGhlIGFjY2VwdGVkIGVzY2FwZXMgZnJvbSBvbmUgcGFyc2VyLWNvbmZpcm1lZCBKYXZhIHN0cmluZyBsaXRlcmFsLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIFN0cmluZ0xpdGVyYWwgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZWNvZGVkIFVuaWNvZGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmdMaXRlcmFsKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbGl0ZXJhbCA9IHRyYW5zbGF0ZVVuaWNvZGVFc2NhcGVzKG5vZGVUZXh0KG5vZGUsIHNvdXJjZSksIGxvY2F0aW9uKVxuICBsZXQgdmFsdWUgPSBcIlwiXG5cbiAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGxpdGVyYWwubGVuZ3RoIC0gMTsgaW5kZXgrKykge1xuICAgIGNvbnN0IGNoYXJhY3RlciA9IGxpdGVyYWxbaW5kZXhdXG5cbiAgICBpZiAoY2hhcmFjdGVyID09IFwiXFxcIlwiIHx8IGNoYXJhY3RlciA9PSBcIlxcblwiIHx8IGNoYXJhY3RlciA9PSBcIlxcclwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaW52YWxpZCBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG5cbiAgICBpZiAoY2hhcmFjdGVyICE9IFwiXFxcXFwiKSB7XG4gICAgICB2YWx1ZSArPSBjaGFyYWN0ZXJcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGluZGV4ICsgMSA+PSBsaXRlcmFsLmxlbmd0aCAtIDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJpbnZhbGlkIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gICAgY29uc3QgZXNjYXBlZCA9IGxpdGVyYWxbKytpbmRleF1cbiAgICBjb25zdCBzaW1wbGUgPSBzaW1wbGVTdHJpbmdFc2NhcGVzW2VzY2FwZWRdXG5cbiAgICBpZiAoc2ltcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlICs9IHNpbXBsZVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoZXNjYXBlZCA+PSBcIjBcIiAmJiBlc2NhcGVkIDw9IFwiN1wiKSB7XG4gICAgICBsZXQgb2N0YWwgPSBlc2NhcGVkXG4gICAgICBjb25zdCBtYXhpbXVtTGVuZ3RoID0gZXNjYXBlZCA8PSBcIjNcIiA/IDMgOiAyXG5cbiAgICAgIHdoaWxlIChvY3RhbC5sZW5ndGggPCBtYXhpbXVtTGVuZ3RoICYmIGxpdGVyYWxbaW5kZXggKyAxXSA+PSBcIjBcIiAmJiBsaXRlcmFsW2luZGV4ICsgMV0gPD0gXCI3XCIpIHtcbiAgICAgICAgb2N0YWwgKz0gbGl0ZXJhbFsrK2luZGV4XVxuICAgICAgfVxuXG4gICAgICB2YWx1ZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlci5wYXJzZUludChvY3RhbCwgOCkpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzdHJpbmcgZXNjYXBlXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgaWYgKCFoYXNPbmx5VW5pY29kZVNjYWxhcnModmFsdWUpKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdCBKYXZhIHJldHVybiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXR1cm5TdGF0ZW1lbnR9IFNlbWFudGljIHJldHVybi5cbiAqL1xuZnVuY3Rpb24gY29udmVydFJldHVybihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChzdGF0ZW1lbnQubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBsb2NhdGlvbilcblxuICBjb25zdCBleHByZXNzaW9uTm9kZXMgPSBkaXJlY3RDaGlsZHJlbihzdGF0ZW1lbnQpLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJyZXR1cm5cIiAmJiBjaGlsZC5uYW1lICE9IFwiO1wiKVxuICBjb25zdCBleHByZXNzaW9uID0gZXhwcmVzc2lvbk5vZGVzLmxlbmd0aCA9PSAxID8gZXhwcmVzc2lvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG5cbiAgaWYgKGV4cHJlc3Npb25Ob2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBleHByZXNzaW9uTm9kZXNbMF1cblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcbiAgICAgIFwiamF2YVwiLFxuICAgICAgdW5zdXBwb3J0ZWQ/Lm5hbWUgPz8gXCJyZXR1cm4gZXhwcmVzc2lvblwiLFxuICAgICAgdW5zdXBwb3J0ZWQgPyBub2RlTG9jYXRpb24odW5zdXBwb3J0ZWQsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb25cbiAgICApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihleHByZXNzaW9uID8ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlLFxuICAgICAgY29udGV4dCxcbiAgICAgIGNvbnRleHQucmV0dXJuVHlwZT8ua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIiAmJiBjb250ZXh0LnJldHVyblR5cGUubmFtZSA9PSBcInZvaWRcIlxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGUgfCB1bmRlZmluZWR9ICovIChjb250ZXh0LnJldHVyblR5cGUpXG4gICAgKX0gOiB7fSksXG4gICAga2luZDogXCJSZXR1cm5TdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIEphdmEgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBKYXZhIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9IFNlbWFudGljIGxvY2FsIG9yIHByaXZhdGUtZmllbGQgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWxTdGF0ZW1lbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0b3JzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdHlwZU5vZGUgPSBkZWNsYXJhdGlvblR5cGUoc3RhdGVtZW50KVxuICAgIGNvbnN0IHZhck5vZGUgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJ2YXJcIilcbiAgICBjb25zdCBtb2RpZmllcnMgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBtb2RpZmllckNoaWxkcmVuID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykgOiBbXVxuXG4gICAgaWYgKHZhck5vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2YXIgbG9jYWwgZGVjbGFyYXRpb25cIiwgbm9kZUxvY2F0aW9uKHZhck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIGlmIChkZWNsYXJhdG9ycy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm11bHRpcGxlIGxvY2FsIGRlY2xhcmF0b3JzXCIsIGxvY2F0aW9uKVxuICAgIGlmICghdHlwZU5vZGUgfHwgdHlwZU5vZGUubmFtZSA9PSBcIkFycmF5VHlwZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgbG9jYWwgdHlwZVwiLCBsb2NhdGlvbilcbiAgICBpZiAobW9kaWZpZXJDaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcImZpbmFsXCIpIHx8IG1vZGlmaWVyQ2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGxvY2FsIG1vZGlmaWVyc1wiLCBtb2RpZmllcnMgPyBub2RlTG9jYXRpb24obW9kaWZpZXJzLCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uKVxuICAgIH1cblxuICAgIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSByZXF1aXJlZENoaWxkKGRlY2xhcmF0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBkZWNsYXJhdG9yLmdldENoaWxkKFwiQXNzaWduT3BcIilcbiAgICBjb25zdCBkaW1lbnNpb25zID0gZGVjbGFyYXRvci5nZXRDaGlsZHJlbihcIkRpbWVuc2lvblwiKVxuICAgIGNvbnN0IGluaXRpYWxpemVyTm9kZXMgPSBkaXJlY3RDaGlsZHJlbihkZWNsYXJhdG9yKS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuXG4gICAgaWYgKGRpbWVuc2lvbnMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImFycmF5IGxvY2FsIGRlY2xhcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihkZWNsYXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAoIWFzc2lnbm1lbnQgfHwgbm9kZVRleHQoYXNzaWdubWVudCwgc291cmNlKSAhPSBcIj1cIiB8fCBpbml0aWFsaXplck5vZGVzLmxlbmd0aCAhPSAxKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5pbml0aWFsaXplZCBsb2NhbCBkZWNsYXJhdGlvblwiLCBub2RlTG9jYXRpb24oZGVjbGFyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIGlmIChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJsb2NhbCBiaW5kaW5nIGNvbGxpZGVzIHdpdGggYSBjb25zdW1lZCBzb3VyY2UgYmluZGluZ1wiLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBjb252ZXJ0VHlwZSh0eXBlTm9kZSwgYExvY2FsICcke25hbWV9J2AsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgIGNvbnN0IGluaXRpYWxpemVyID0gY29udmVydEV4cHJlc3Npb24oaW5pdGlhbGl6ZXJOb2Rlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCwgdHlwZSlcblxuICAgIGNvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIHR5cGUpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcixcbiAgICAgIGtpbmQ6IFwiTG9jYWxEZWNsYXJhdGlvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBtdXRhYmxlOiBtb2RpZmllckNoaWxkcmVuLmxlbmd0aCA9PSAwLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKGFzc2lnbm1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuXG4gICAgaWYgKCFhc3NpZ25tZW50KSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIHN0YXRlbWVudC5uYW1lLCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnQpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBhc3NpZ25tZW50LmdldENoaWxkKFwiQXNzaWduT3BcIilcbiAgICBjb25zdCB0YXJnZXQgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjaGlsZHJlbi5hdCgtMSlcblxuICAgIGlmICghb3BlcmF0b3IgfHwgbm9kZVRleHQob3BlcmF0b3IsIHNvdXJjZSkgIT0gXCI9XCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjb21wb3VuZCBhc3NpZ25tZW50XCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBpZiAodGFyZ2V0Py5uYW1lID09IFwiRmllbGRBY2Nlc3NcIiAmJiBjb250ZXh0LmN1cnJlbnRDbGFzcykge1xuICAgICAgY29uc3QgdGFyZ2V0Q2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odGFyZ2V0KVxuICAgICAgY29uc3QgcmVjZWl2ZXIgPSB0YXJnZXRDaGlsZHJlblswXVxuICAgICAgY29uc3QgbWVtYmVyID0gdGFyZ2V0Q2hpbGRyZW5bMV1cbiAgICAgIGNvbnN0IGZpZWxkID0gdGFyZ2V0Q2hpbGRyZW4ubGVuZ3RoID09IDIgJiYgcmVjZWl2ZXI/Lm5hbWUgPT0gXCJ0aGlzXCIgJiYgbWVtYmVyPy5uYW1lID09IFwiSWRlbnRpZmllclwiXG4gICAgICAgID8gY29udGV4dC5jdXJyZW50Q2xhc3MuZmllbGRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT0gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoIWZpZWxkIHx8ICFleHByZXNzaW9uIHx8IGV4cHJlc3Npb24gPT0gdGFyZ2V0IHx8IGV4cHJlc3Npb24gPT0gb3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaXZhdGUgZmllbGQgd3JpdGUgb3V0c2lkZSB0aGUgZGVjbGFyaW5nIHJlY2VpdmVyXCIsIG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGZpZWxkLnR5cGUpLFxuICAgICAgICBmaWVsZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChmaWVsZC5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpLCBsb2NhdGlvbixcbiAgICAgICAgcmVjZWl2ZXI6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjZWl2ZXJFeHByZXNzaW9ufSAqLyAoXG4gICAgICAgICAgY29udmVydEV4cHJlc3Npb24ocmVjZWl2ZXIsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKX0sXG4gICAgICB7bWVtYmVyOiBub2RlTG9jYXRpb24obWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxuICAgIH1cbiAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQubmFtZSAhPSBcIklkZW50aWZpZXJcIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCB0YXJnZXQ/Lm5hbWUgPz8gXCJhc3NpZ25tZW50IHRhcmdldFwiLCB0YXJnZXQgPyBub2RlTG9jYXRpb24odGFyZ2V0LCBmaWxlbmFtZSwgc291cmNlKSA6IGxvY2F0aW9uKVxuICAgIGlmICghZXhwcmVzc2lvbiB8fCBleHByZXNzaW9uID09IHRhcmdldCB8fCBleHByZXNzaW9uID09IG9wZXJhdG9yKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiYXNzaWdubWVudCBleHByZXNzaW9uXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKSlcblxuICAgIGNvbnN0IHRhcmdldEV4cHJlc3Npb24gPSB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZVRleHQodGFyZ2V0LCBzb3VyY2UpXG4gICAgfSwge25hbWU6IG5vZGVMb2NhdGlvbih0YXJnZXQsIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBub2RlVGV4dCh0YXJnZXQsIHNvdXJjZSlcbiAgICBjb25zdCBiaW5kaW5nVHlwZSA9IGNvbnRleHQuYmluZGluZ3MuZ2V0KHRhcmdldE5hbWUpXG4gICAgY29uc3QgdmFsdWUgPSBjb252ZXJ0RXhwcmVzc2lvbihleHByZXNzaW9uLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0LFxuICAgICAgYmluZGluZ1R5cGU/LmtpbmQgPT0gXCJFcnJvclR5cGVcIiA/IHVuZGVmaW5lZCA6IGJpbmRpbmdUeXBlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgZXhwcmVzc2lvbjogdmFsdWUsXG4gICAgICBraW5kOiBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdGFyZ2V0OiB0YXJnZXRFeHByZXNzaW9uXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGhhdXN0aXZlIGRpcmVjdCBKYXZhIGJsb2NrIGNoaWxkLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIlJldHVyblN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydFJldHVybihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SWYoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJUaHJvd1N0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEphdmFSYWlzZShzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIlRyeVN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydEphdmFUcnkoc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZXR1cm4gY29udmVydFdoaWxlKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiRW5oYW5jZWRGb3JTdGF0ZW1lbnRcIikgcmV0dXJuIGNvbnZlcnRGb3JFYWNoKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgaWYgKHN0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQubmFtZSA9PSBcIkNvbnRpbnVlU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBsYWJlbCA9IHN0YXRlbWVudC5nZXRDaGlsZChcIkxhYmVsXCIpXG5cbiAgICBpZiAobGFiZWwpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGxhYmVsZWQgJHtzdGF0ZW1lbnQubmFtZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCJ9YCxcbiAgICAgIG5vZGVMb2NhdGlvbihsYWJlbCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgY29uc3Qga2V5d29yZCA9IHJlcXVpcmVkQ2hpbGQoc3RhdGVtZW50LCBzdGF0ZW1lbnQubmFtZSA9PSBcIkJyZWFrU3RhdGVtZW50XCIgPyBcImJyZWFrXCIgOiBcImNvbnRpbnVlXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oa2V5d29yZCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7XCJCcmVha1N0YXRlbWVudFwiIHwgXCJDb250aW51ZVN0YXRlbWVudFwifSAqLyAoXG4gICAgICAgIHN0YXRlbWVudC5uYW1lID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiQnJlYWtTdGF0ZW1lbnRcIiA6IFwiQ29udGludWVTdGF0ZW1lbnRcIlxuICAgICAgKSxcbiAgICAgIGxvY2F0aW9uXG4gICAgfSwge2tleXdvcmQ6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAoc3RhdGVtZW50Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIikgcmV0dXJuIGNvbnZlcnRMb2NhbFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGlmIChzdGF0ZW1lbnQubmFtZSA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmIChzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKSkgcmV0dXJuIGNvbnZlcnRMb2NhbFN0YXRlbWVudChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgY29uc3QgaW52b2NhdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1ldGhvZEludm9jYXRpb25cIilcblxuICAgIGlmICghaW52b2NhdGlvbikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBzdGF0ZW1lbnQubmFtZSwgbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQWNjZXNzID0gaW52b2NhdGlvbi5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGludm9jYXRpb24uZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG5cbiAgICBpZiAoIWZpZWxkQWNjZXNzIHx8ICFtZXRob2ROYW1lIHx8IG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IFwiU3lzdGVtLm91dFwiIHx8IG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgIT0gXCJwcmludGxuXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cHJlc3Npb246IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FsbEV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5NZXRob2RDYWxsRXhwcmVzc2lvbn0gKi8gKFxuICAgICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gICAgICAgICksXG4gICAgICAgIGtpbmQ6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiLFxuICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydFByaW50KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgfVxuXG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgc3RhdGVtZW50Lm5hbWUsIG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGV4YWN0IGB0aHJvdyBuZXcgRGVjbGFyZWRFcnJvcihtZXNzYWdlKWAuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gSmF2YSB0aHJvdyBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmFpc2VTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZXRocm93U3RhdGVtZW50fSBTZW1hbnRpYyByYWlzZSBvciByZXRocm93LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YVJhaXNlKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbnN0cnVjdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKVxuICBjb25zdCB0eXBlTm9kZSA9IGNvbnN0cnVjdGlvbj8uZ2V0Q2hpbGQoXCJUeXBlTmFtZVwiKVxuICBjb25zdCBhcmd1bWVudHNOb2RlID0gY29uc3RydWN0aW9uPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICBjb25zdCBhcmd1bWVudHNfID0gYXJndW1lbnRzTm9kZSA/IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudHNOb2RlKSA6IFtdXG4gIGNvbnN0IGRlY2xhcmF0aW9uID0gdHlwZU5vZGUgPyBjb250ZXh0LmVycm9yTmFtZXMuZ2V0KG5vZGVUZXh0KHR5cGVOb2RlLCBzb3VyY2UpKSA6IHVuZGVmaW5lZFxuXG4gIGlmICghY29uc3RydWN0aW9uICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDApIHtcbiAgICBjb25zdCB0aHJvd05vZGUgPSByZXF1aXJlZENoaWxkKHN0YXRlbWVudCwgXCJ0aHJvd1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHJldGhyb3duID0gc3RydWN0dXJhbENoaWxkcmVuKHN0YXRlbWVudCkuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUubmFtZSA9PSBcIklkZW50aWZpZXJcIilcbiAgICBjb25zdCBiaW5kaW5nID0gcmV0aHJvd24gPyBjb250ZXh0LmJpbmRpbmdzLmdldChub2RlVGV4dChyZXRocm93biwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmIChyZXRocm93biAmJiBiaW5kaW5nPy5raW5kID09IFwiRXJyb3JUeXBlXCIgJiYgY29udGV4dC5jYXRjaEJpbmRpbmdOYW1lcz8uaGFzKG5vZGVUZXh0KHJldGhyb3duLCBzb3VyY2UpKSkge1xuICAgICAgY29uc3QgYmluZGluZ05vZGUgPSBjb250ZXh0LmNhdGNoQmluZGluZ05vZGVzPy5nZXQobm9kZVRleHQocmV0aHJvd24sIHNvdXJjZSkpXG5cbiAgICAgIGlmICghYmluZGluZ05vZGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ0aHJvdyBvZiBhIGNhdGNoIGJpbmRpbmcgd2l0aG91dCBhbiBleGFjdCBoYW5kbGVyIGJpbmRpbmdcIiwgbG9jYXRpb24pXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGJpbmRpbmc6IG5vZGVUZXh0KHJldGhyb3duLCBzb3VyY2UpLFxuICAgICAgICBiaW5kaW5nTm9kZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmV0aHJvd1N0YXRlbWVudFwiKSxcbiAgICAgICAgbG9jYXRpb25cbiAgICAgIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24odGhyb3dOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gICAgfVxuICB9XG4gIGlmICghY29uc3RydWN0aW9uIHx8ICF0eXBlTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCAhZGVjbGFyYXRpb24gfHwgYXJndW1lbnRzXy5sZW5ndGggIT0gMSB8fCBjb25zdHJ1Y3Rpb24uZ2V0Q2hpbGQoXCJDbGFzc0JvZHlcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidGhyb3cgb3RoZXIgdGhhbiBleGFjdCBkZWNsYXJlZCBlcnJvciBjb25zdHJ1Y3Rpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBlcnJvcjogd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHt0eXBlOiB0eXBlTG9jYXRpb259KSxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yQ29uc3RydWN0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjb25zdHJ1Y3Rpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogY29udmVydEV4cHJlc3Npb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcbiAgICB9LCB7dHlwZTogdHlwZUxvY2F0aW9ufSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmFpc2VTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfSwge2tleXdvcmQ6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKHN0YXRlbWVudCwgXCJ0aHJvd1wiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBjYXRjaCB3aXRoIG5vIHJlc291cmNlcyBvciBmaW5hbGx5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHN0YXRlbWVudCAtIEphdmEgdHJ5IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9IFNlbWFudGljIGV4YWN0IGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhVHJ5KHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGJvZHkgPSBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjYXRjaGVzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiQ2F0Y2hDbGF1c2VcIilcbiAgY29uc3QgZmluYWxpemVyID0gc3RhdGVtZW50LmdldENoaWxkKFwiRmluYWxseUNsYXVzZVwiKVxuXG4gIGlmICghYm9keSB8fCAoY2F0Y2hlcy5sZW5ndGggPT0gMCAmJiAhZmluYWxpemVyKSB8fCBzdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJSZXNvdXJjZVNwZWNpZmljYXRpb25cIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidHJ5IHdpdGhvdXQgY2F0Y2hlcyBvciBmaW5hbGx5IGFuZCB3aXRob3V0IHJlc291cmNlc1wiLCBsb2NhdGlvbilcbiAgfVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoSGFuZGxlcltdfSAqL1xuICBjb25zdCBoYW5kbGVycyA9IFtdXG4gIGNvbnN0IHNlZW5IYW5kbGVyTmFtZXMgPSBuZXcgU2V0KGNvbnRleHQuY2F0Y2hCaW5kaW5nTmFtZXMgPz8gW10pXG5cbiAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGNhdGNoZXMpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBoYW5kbGVyLmdldENoaWxkKFwiQ2F0Y2hGb3JtYWxQYXJhbWV0ZXJcIilcbiAgICBjb25zdCBjYXVnaHQgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiQ2F0Y2hUeXBlXCIpXG4gICAgY29uc3QgdHlwZU5vZGVzID0gY2F1Z2h0ID8gc3RydWN0dXJhbENoaWxkcmVuKGNhdWdodCkgOiBbXVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICAgIGNvbnN0IGNhdGNoQm9keSA9IGhhbmRsZXIuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVzWzBdXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB0eXBlTm9kZSA/IGNvbnRleHQuZXJyb3JOYW1lcy5nZXQobm9kZVRleHQodHlwZU5vZGUsIHNvdXJjZSkpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCAhY2F1Z2h0IHx8IHR5cGVOb2Rlcy5sZW5ndGggIT0gMSB8fCB0eXBlTm9kZT8ubmFtZSAhPSBcIlR5cGVOYW1lXCIgfHwgIWRlZmluaXRpb24gfHwgIWNhdGNoQm9keSB8fCAhZGVjbGFyYXRpb24gfHxcbiAgICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcImJyb2FkLCBtdWx0aXBsZSwgb3IgbWFsZm9ybWVkIGNhdGNoXCIsIG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIGlmIChzZWVuSGFuZGxlck5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgY2F0Y2ggYmluZGluZyAnJHtuYW1lfScgc2hhZG93cyBhbiBvdXRlciBoYW5kbGVyIGJpbmRpbmdgLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIHNlZW5IYW5kbGVyTmFtZXMuYWRkKG5hbWUpXG4gICAgY29uc3QgY2F1Z2h0TG9jYXRpb24gPSBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgY2F0Y2hUeXBlID0gd2l0aFBhcnNlclJhbmdlcyh7ZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yVHlwZVwiKX0sIHtcbiAgICAgIHR5cGU6IGNhdWdodExvY2F0aW9uXG4gICAgfSlcbiAgICBjb25zdCBjYXRjaENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyksXG4gICAgICBjYXRjaEJpbmRpbmdOYW1lczogbmV3IFNldChzZWVuSGFuZGxlck5hbWVzKSwgY2F0Y2hCaW5kaW5nTm9kZXM6IG5ldyBNYXAoY29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcyl9XG5cbiAgICBjYXRjaENvbnRleHQuYmluZGluZ3Muc2V0KG5hbWUsIGNhdGNoVHlwZSlcbiAgICBjb25zdCBjYXRjaEJpbmRpbmdOb2RlID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYXRjaEJpbmRpbmdcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiBjYXRjaFR5cGVcbiAgICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcblxuICAgIGNhdGNoQ29udGV4dC5jYXRjaEJpbmRpbmdOb2Rlcy5zZXQobmFtZSwgY2F0Y2hCaW5kaW5nTm9kZSlcbiAgICBoYW5kbGVycy5wdXNoKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAgY2F0Y2hCaW5kaW5nOiBjYXRjaEJpbmRpbmdOb2RlLFxuICAgICAgY2F0Y2hCb2R5OiBjb252ZXJ0QmxvY2soY2F0Y2hCb2R5LCBmaWxlbmFtZSwgc291cmNlLCBjYXRjaENvbnRleHQpLFxuICAgICAgY2F0Y2hUeXBlLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2F0Y2hIYW5kbGVyXCIpLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihoYW5kbGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0sIHtjYXRjaDogbm9kZUxvY2F0aW9uKGhhbmRsZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSkpXG4gIH1cbiAgY29uc3QgYm9keUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IHNlbWFudGljID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UcnlTdGF0ZW1lbnR9ICovICh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGhhbmRsZXJzLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlRyeVN0YXRlbWVudFwiKSxcbiAgICBsb2NhdGlvblxuICB9LCB7dHJ5OiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidHJ5XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuXG4gIGlmIChmaW5hbGl6ZXIpIHtcbiAgICBjb25zdCBmaW5hbGx5QmxvY2sgPSBmaW5hbGl6ZXIuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuXG4gICAgaWYgKCFmaW5hbGx5QmxvY2spIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZmluYWxseSBibG9ja1wiLCBub2RlTG9jYXRpb24oZmluYWxpemVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICBzZW1hbnRpYy5maW5hbGx5Qm9keSA9IGNvbnZlcnRCbG9jayhmaW5hbGx5QmxvY2ssIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KVxuICAgIHNldFBhcnNlclJhbmdlcyhzZW1hbnRpYywge2ZpbmFsbHk6IG5vZGVMb2NhdGlvbihmaW5hbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdHJ5OiBub2RlTG9jYXRpb24ocmVxdWlyZWRDaGlsZChzdGF0ZW1lbnQsIFwidHJ5XCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbiAgcmV0dXJuIHNlbWFudGljXG59XG5cbi8qKlxuICogQ29udmVydHMgZXhhY3QgSmF2YSBlbmhhbmNlZC1mb3Igc3ludGF4IG92ZXIgb25lIHJlc29sdmVkIGBMaXN0PFQ+YC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gRW5oYW5jZWQtZm9yIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudH0gU2VtYW50aWMgbG9vcC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZvckVhY2gobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBzcGVjID0gbm9kZS5nZXRDaGlsZChcIkZvclNwZWNcIilcbiAgY29uc3QgYm9keSA9IGRpcmVjdENoaWxkcmVuKG5vZGUpLmZpbmRMYXN0KChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIkZvclNwZWNcIiAmJiBjaGlsZC5uYW1lICE9IFwiZm9yXCIpXG5cbiAgaWYgKCFzcGVjKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZW5oYW5jZWQgZm9yIHdpdGhvdXQgc3BlY2lmaWNhdGlvblwiLCBsb2NhdGlvbilcbiAgaWYgKCFib2R5IHx8IGJvZHkubmFtZSAhPSBcIkJsb2NrXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3Igd2l0aG91dCBibG9jayBib2R5XCIsIGJvZHkgPyBub2RlTG9jYXRpb24oYm9keSwgZmlsZW5hbWUsIHNvdXJjZSkgOiBsb2NhdGlvbilcbiAgY29uc3QgY2hpbGRyZW4gPSBkaXJlY3RDaGlsZHJlbihzcGVjKVxuICBjb25zdCBjb2xvbkluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIjpcIilcbiAgY29uc3QgdHlwZU5vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMl0gOiB1bmRlZmluZWRcbiAgY29uc3QgYmluZGluZ05vZGUgPSBjb2xvbkluZGV4ID49IDIgPyBjaGlsZHJlbltjb2xvbkluZGV4IC0gMV0gOiB1bmRlZmluZWRcbiAgY29uc3QgY29sbGVjdGlvbk5vZGUgPSBjb2xvbkluZGV4ID49IDAgPyBjaGlsZHJlbltjb2xvbkluZGV4ICsgMV0gOiB1bmRlZmluZWRcblxuICBpZiAoIXR5cGVOb2RlIHx8ICFiaW5kaW5nTm9kZSB8fCBiaW5kaW5nTm9kZS5uYW1lICE9IFwiRGVmaW5pdGlvblwiIHx8ICFjb2xsZWN0aW9uTm9kZSB8fFxuICAgIGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCI6XCIpLmxlbmd0aCAhPSAxKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBiaW5kaW5nTm9kZSA/PyBjb2xsZWN0aW9uTm9kZSA/PyBzcGVjXG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIGVuaGFuY2VkIGZvciBzcGVjaWZpY2F0aW9uXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgaWYgKGNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09IFwiTW9kaWZpZXJzXCIpKSB7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChjaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PSBcIk1vZGlmaWVyc1wiKSlcblxuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJlbmhhbmNlZCBmb3IgbW9kaWZpZXJzXCIsIG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgaWYgKGNvbGxlY3Rpb25Ob2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJNZXRob2ROYW1lXCIpXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gY29sbGVjdGlvbk5vZGUuZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgICBjb25zdCBtYXBOb2RlID0gc3RydWN0dXJhbENoaWxkcmVuKGNvbGxlY3Rpb25Ob2RlKS5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSAhPSBcIk1ldGhvZE5hbWVcIiAmJiBjaGlsZC5uYW1lICE9IFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgbWFwVHlwZV8gPSBtYXBOb2RlID8ga25vd25FeHByZXNzaW9uVHlwZShtYXBOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgYXJndW1lbnRMaXN0ICYmIG1hcE5vZGU/Lm5hbWUgPT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJzZXF1ZW5jZWRFbnRyeVNldFwiICYmIHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpLmxlbmd0aCA9PSAwICYmXG4gICAgICBtYXBUeXBlXz8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIGNvbnN0IGVudHJ5VHlwZSA9IHR5cGVOb2RlLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVOb2RlKSA6IFtdXG4gICAgICBjb25zdCBlbnRyeUFyZ3VtZW50cyA9IGVudHJ5VHlwZVsxXT8ubmFtZSA9PSBcIlR5cGVBcmd1bWVudHNcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihlbnRyeVR5cGVbMV0pIDogW11cbiAgICAgIGNvbnN0IHBhcnNlZEtleVR5cGUgPSBlbnRyeUFyZ3VtZW50c1swXVxuICAgICAgICA/IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGVudHJ5QXJndW1lbnRzWzBdLCBcIk1hcCBlbnRyeSBrZXlcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcGFyc2VkVmFsdWVUeXBlID0gZW50cnlBcmd1bWVudHNbMV1cbiAgICAgICAgPyBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChlbnRyeUFyZ3VtZW50c1sxXSwgXCJNYXAgZW50cnkgdmFsdWVcIiwgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgICBjb250ZXh0LnJlY29yZE5hbWVzLCBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoZW50cnlUeXBlLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGVudHJ5VHlwZVswXSwgc291cmNlKSAhPSBcImphdmEudXRpbC5NYXAuRW50cnlcIiB8fCBlbnRyeUFyZ3VtZW50cy5sZW5ndGggIT0gMiB8fFxuICAgICAgICAhcGFyc2VkS2V5VHlwZSB8fCAhcGFyc2VkVmFsdWVUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcnNlZEtleVR5cGUsIG1hcFR5cGVfLmtleVR5cGUpIHx8XG4gICAgICAgICFzYW1lVmFsdWVUeXBlKHBhcnNlZFZhbHVlVHlwZSwgbWFwVHlwZV8udmFsdWVUeXBlKSkge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgZW50cnkgdHlwZVwiLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgYm9keVN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICAgICAgaWYgKGJvZHlTdGF0ZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHBhaXIgYmluZGluZ3NcIiwgbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlOYW1lID0gbm9kZVRleHQoYmluZGluZ05vZGUsIHNvdXJjZSlcblxuICAgICAgaWYgKGNvbnRleHQuYmluZGluZ3MuaGFzKGVudHJ5TmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGVudHJ5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIGVudHJ5IGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksXG4gICAgICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcykuYWRkKGVudHJ5TmFtZSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleUJpbmRpbmcgPSBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKFxuICAgICAgICBib2R5U3RhdGVtZW50c1swXSwgZW50cnlOYW1lLCBcImdldEtleVwiLCBtYXBUeXBlXy5rZXlUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dFxuICAgICAgKVxuICAgICAgY29uc3QgdmFsdWVCaW5kaW5nID0gY29udmVydEphdmFNYXBQYWlyQmluZGluZyhcbiAgICAgICAgYm9keVN0YXRlbWVudHNbMV0sIGVudHJ5TmFtZSwgXCJnZXRWYWx1ZVwiLCBtYXBUeXBlXy52YWx1ZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0XG4gICAgICApXG5cbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldChrZXlCaW5kaW5nLm5hbWUsIGtleUJpbmRpbmcudHlwZSlcbiAgICAgIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgdmFsdWVCaW5kaW5nLnR5cGUpXG4gICAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHN0YXRlbWVudHM6IGNvbnZlcnRTdGF0ZW1lbnRzKGJvZHlTdGF0ZW1lbnRzLnNsaWNlKDIpLCBmaWxlbmFtZSwgc291cmNlLCBib2R5Q29udGV4dClcbiAgICAgICAgfSxcbiAgICAgICAga2V5QmluZGluZyxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIG1hcDogY29udmVydEV4cHJlc3Npb24obWFwTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCksXG4gICAgICAgIHZhbHVlQmluZGluZ1xuICAgICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgW1wiZW50cnlTZXRcIiwgXCJzZXF1ZW5jZWRFbnRyeVNldFwiXS5pbmNsdWRlcyhub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVub3JkZXJlZCBvciB1bnN1cHBvcnRlZCBtYXAgaXRlcmF0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihiaW5kaW5nTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVjbGFyZWRUeXBlID0gY29udmVydEphdmFUeXBlQXJndW1lbnQodHlwZU5vZGUsIGBJdGVyYXRpb24gYmluZGluZyAnJHtub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKX0nYCwgYmluZGluZ0xvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IGNvbGxlY3Rpb25UeXBlID0gaXRlcmF0aW9uT3BlcmFuZFR5cGUoa25vd25FeHByZXNzaW9uVHlwZShjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpXG5cbiAgaWYgKCFjb2xsZWN0aW9uVHlwZSB8fCBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTGlzdFR5cGVcIiAmJiBjb2xsZWN0aW9uVHlwZS5raW5kICE9IFwiTWFwVHlwZVwiKSB7XG4gICAgcmV0dXJuIG1pc3NpbmdUeXBlKFwiamF2YVwiLCBcIkl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIG5vZGVMb2NhdGlvbihjb2xsZWN0aW9uTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdmFsdWVCaW5kaW5nID0gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVmFsdWVCaW5kaW5nXCIpLFxuICAgIGxvY2F0aW9uOiBiaW5kaW5nTG9jYXRpb24sXG4gICAgbXV0YWJsZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChiaW5kaW5nTm9kZSwgc291cmNlKSxcbiAgICB0eXBlOiBkZWNsYXJlZFR5cGVcbiAgfSwge25hbWU6IGJpbmRpbmdMb2NhdGlvbn0pXG4gIGNvbnN0IGJvZHlDb250ZXh0ID0gey4uLmNvbnRleHQsIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMpfVxuXG4gIGJvZHlDb250ZXh0LmJpbmRpbmdzLnNldCh2YWx1ZUJpbmRpbmcubmFtZSwgaXRlcmF0aW9uQmluZGluZ1R5cGUoZGVjbGFyZWRUeXBlLCBiaW5kaW5nTG9jYXRpb24pKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHksIGZpbGVuYW1lLCBzb3VyY2UsIGJvZHlDb250ZXh0KSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGb3JFYWNoU3RhdGVtZW50XCIpLFxuICAgIGxpc3Q6IGNvbnZlcnRFeHByZXNzaW9uKGNvbGxlY3Rpb25Ob2RlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBsb2NhdGlvbixcbiAgICB2YWx1ZUJpbmRpbmdcbiAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24oY2hpbGRyZW5bY29sb25JbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgaW1tdXRhYmxlIGxvY2FsIGV4dHJhY3RlZCBmcm9tIGEgSmF2YSBvcmRlcmVkLW1hcCBlbnRyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBzdGF0ZW1lbnQgLSBQYWlyLWJpbmRpbmcgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZW50cnlOYW1lIC0gRW5oYW5jZWQtZm9yIGVudHJ5IGJpbmRpbmcgbmFtZS5cbiAqIEBwYXJhbSB7XCJnZXRLZXlcIiB8IFwiZ2V0VmFsdWVcIn0gYWNjZXNzb3IgLSBSZXF1aXJlZCBlbnRyeSBhY2Nlc3Nvci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNWYWx1ZVR5cGV9IGV4cGVjdGVkVHlwZSAtIENhbm9uaWNhbCBiaW5kaW5nIHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZ30gUGFpciBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SmF2YU1hcFBhaXJCaW5kaW5nKHN0YXRlbWVudCwgZW50cnlOYW1lLCBhY2Nlc3NvciwgZXhwZWN0ZWRUeXBlLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gc3RhdGVtZW50LmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3JzID0gc3RhdGVtZW50LmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICBjb25zdCBkZWZpbml0aW9uID0gZGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IGFzc2lnbm1lbnQgPSBkZWNsYXJhdG9yPy5nZXRDaGlsZChcIkFzc2lnbk9wXCIpXG4gIGNvbnN0IGluaXRpYWxpemVyID0gZGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oZGVjbGFyYXRvcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJEZWZpbml0aW9uXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFzc2lnbk9wXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgbWV0aG9kTmFtZSA9IGluaXRpYWxpemVyPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gaW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHJlY2VpdmVyID0gaW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCJcbiAgICA/IHN0cnVjdHVyYWxDaGlsZHJlbihpbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHR5cGVOb2RlID0gZGVjbGFyYXRpb25UeXBlKHN0YXRlbWVudClcblxuICBpZiAoc3RhdGVtZW50Lm5hbWUgIT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiB8fCBub2RlVGV4dChtb2RpZmllcnMgPz8gc3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fFxuICAgIGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxIHx8ICFkZWZpbml0aW9uIHx8ICFhc3NpZ25tZW50IHx8IG5vZGVUZXh0KGFzc2lnbm1lbnQsIHNvdXJjZSkgIT0gXCI9XCIgfHwgIWluaXRpYWxpemVyIHx8XG4gICAgaW5pdGlhbGl6ZXIubmFtZSAhPSBcIk1ldGhvZEludm9jYXRpb25cIiB8fCAhbWV0aG9kTmFtZSB8fCBub2RlVGV4dChtZXRob2ROYW1lLCBzb3VyY2UpICE9IGFjY2Vzc29yIHx8XG4gICAgIWFyZ3VtZW50TGlzdCB8fCBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggIT0gMCB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fFxuICAgIG5vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpICE9IGVudHJ5TmFtZSB8fCAhdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nYCwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICBpZiAoY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgb3JkZXJlZC1tYXAgJHthY2Nlc3Nvcn0gYmluZGluZyBjb2xsaXNpb25gLCBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgdHlwZSA9IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgTWFwIGl0ZXJhdGlvbiBiaW5kaW5nICcke25hbWV9J2AsIGxvY2F0aW9uLFxuICAgIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG5cbiAgaWYgKCFzYW1lVmFsdWVUeXBlKHR5cGUsIGV4cGVjdGVkVHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBvcmRlcmVkLW1hcCAke2FjY2Vzc29yfSBiaW5kaW5nIHR5cGVgLCBub2RlTG9jYXRpb24odHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlZhbHVlQmluZGluZ1wiKSxcbiAgICBsb2NhdGlvbixcbiAgICBtdXRhYmxlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoZmFsc2UpLFxuICAgIG5hbWUsXG4gICAgdHlwZVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleHByZXNzaW9uIHR5cGVzIGVzdGFibGlzaGVkIGJ5IEphdmEgZGVjbGFyYXRpb25zIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJzZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGUgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCB1bmRlZmluZWR9IEtub3duIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGtub3duRXhwcmVzc2lvblR5cGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBpZiAobm9kZS5uYW1lID09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgICByZXR1cm4gY2hpbGRyZW4ubGVuZ3RoID09IDEgPyBrbm93bkV4cHJlc3Npb25UeXBlKGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSA6IHVuZGVmaW5lZFxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJ0aGlzXCIgJiYgY29udGV4dC5jdXJyZW50Q2xhc3M/LmlkKSB7XG4gICAgcmV0dXJuIHtkZWNsYXJhdGlvbklkOiBjb250ZXh0LmN1cnJlbnRDbGFzcy5pZCwga2luZDogXCJSZWZlcmVuY2VUeXBlXCJ9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGNvbnRleHQuYmluZGluZ3MuZ2V0KG5vZGVUZXh0KG5vZGUsIHNvdXJjZSkpXG4gIGlmIChub2RlLm5hbWUgPT0gXCJGaWVsZEFjY2Vzc1wiICYmIGNvbnRleHQuY3VycmVudENsYXNzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT0gMiAmJiBjaGlsZHJlblswXS5uYW1lID09IFwidGhpc1wiICYmIGNoaWxkcmVuWzFdLm5hbWUgPT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICAgIHJldHVybiBjb250ZXh0LmN1cnJlbnRDbGFzcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQoY2hpbGRyZW5bMV0sIHNvdXJjZSkpPy50eXBlXG4gICAgfVxuICB9XG4gIGlmIChub2RlLm5hbWUgPT0gXCJNZXRob2RJbnZvY2F0aW9uXCIpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBub2RlLmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuXG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgIXJlY2VpdmVyKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBjb250ZXh0LmZ1bmN0aW9ucy5nZXQobm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSlcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICAgIGlmIChzaWduYXR1cmUpIHJldHVybiBrbm93bkNhbGxSZXR1cm5UeXBlKHNpZ25hdHVyZSwgYXJndW1lbnRzXy5tYXAoKGFyZ3VtZW50KSA9PlxuICAgICAgICBrbm93bkV4cHJlc3Npb25UeXBlKGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSkpXG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyKSB7XG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNsYXNzZXMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKT8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+XG4gICAgICAgICAgbWV0aG9kLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSk/LnJldHVyblR5cGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1YWxpZmllZCA9IGAke25vZGVUZXh0KHJlY2VpdmVyLCBzb3VyY2UpfS4ke25vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSl9YFxuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY29udGV4dC5mdW5jdGlvbnMuZ2V0KHF1YWxpZmllZClcbiAgICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG4gICAgICBjb25zdCByZXR1cm5UeXBlID0gc2lnbmF0dXJlID8ga25vd25DYWxsUmV0dXJuVHlwZShzaWduYXR1cmUsIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAga25vd25FeHByZXNzaW9uVHlwZShhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkpKSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAocmV0dXJuVHlwZSkgcmV0dXJuIHJldHVyblR5cGVcbiAgICB9XG4gICAgaWYgKG1ldGhvZE5hbWUgJiYgcmVjZWl2ZXIgJiYgYXJndW1lbnRMaXN0ICYmIG5vZGVUZXh0KG1ldGhvZE5hbWUsIHNvdXJjZSkgPT0gXCJnZXRcIikge1xuICAgICAgY29uc3QgYXJndW1lbnRzXyA9IHN0cnVjdHVyYWxDaGlsZHJlbihhcmd1bWVudExpc3QpXG4gICAgICBjb25zdCByZWNlaXZlclR5cGUgPSBrbm93bkV4cHJlc3Npb25UeXBlKHJlY2VpdmVyLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KVxuXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMCAmJiByZWNlaXZlci5uYW1lID09IFwiSWRlbnRpZmllclwiICYmIHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiByZWNlaXZlclR5cGU/LmtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gcmVjZWl2ZXJUeXBlLmVsZW1lbnRUeXBlXG4gICAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggPT0gMSAmJiAocmVjZWl2ZXJUeXBlPy5raW5kID09IFwiTWFwVHlwZVwiIHx8IHJlY2VpdmVyVHlwZT8ua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpKSB7XG4gICAgICAgIHJldHVybiByZWNlaXZlclR5cGUudmFsdWVUeXBlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtZXRob2ROYW1lICYmIHJlY2VpdmVyICYmIGFyZ3VtZW50TGlzdCAmJiBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KS5sZW5ndGggPT0gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZXJUeXBlID0ga25vd25FeHByZXNzaW9uVHlwZShyZWNlaXZlciwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dClcblxuICAgICAgaWYgKHJlY2VpdmVyVHlwZT8ua2luZCAhPSBcIlJlY29yZFR5cGVcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBjb250ZXh0LnJlY29yZHMuZ2V0KHJlY2VpdmVyVHlwZS5kZWNsYXJhdGlvbklkKVxuICAgICAgY29uc3QgaW5kZXggPSBkZWNsYXJhdGlvbj8uZmllbGRzLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT0gbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSkgPz8gLTFcblxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uID8gaW5zdGFudGlhdGVkUmVjb3JkRmllbGRUeXBlKGRlY2xhcmF0aW9uLCByZWNlaXZlclR5cGUuYXJndW1lbnRzLCBpbmRleCkgOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgaWYgKG5vZGUubmFtZSA9PSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgdHlwZU5vZGUgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSkuZmluZCgoY2hpbGQpID0+IFtcIkdlbmVyaWNUeXBlXCIsIFwiVHlwZU5hbWVcIiwgXCJTY29wZWRUeXBlTmFtZVwiXS5pbmNsdWRlcyhjaGlsZC5uYW1lKSlcbiAgICBjb25zdCBuYW1lTm9kZSA9IHR5cGVOb2RlPy5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbih0eXBlTm9kZSlbMF0gOiB0eXBlTm9kZVxuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gbmFtZU5vZGUgPyBjb250ZXh0LnJlY29yZE5hbWVzLmdldChub2RlVGV4dChuYW1lTm9kZSwgc291cmNlKSkgOiB1bmRlZmluZWRcblxuICAgIGlmIChkZWNsYXJhdGlvbj8uaWQgJiYgdHlwZU5vZGUpIHtcbiAgICAgIGNvbnN0IHR5cGVBcmd1bWVudHNOb2RlID0gdHlwZU5vZGU/LmdldENoaWxkKFwiVHlwZUFyZ3VtZW50c1wiKVxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHNOb2RlXG4gICAgICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHR5cGVBcmd1bWVudHNOb2RlKS5tYXAoKGFyZ3VtZW50KSA9PiBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICBgUmVjb3JkICcke2RlY2xhcmF0aW9uLm5hbWV9JyBhcHBsaWNhdGlvbmAsXG4gICAgICAgICAgbm9kZUxvY2F0aW9uKHR5cGVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgY29udGV4dC5yZWNvcmROYW1lcyxcbiAgICAgICAgICBjb250ZXh0LnR5cGVQYXJhbWV0ZXJzXG4gICAgICAgICkpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgICAgID8ge2RlY2xhcmF0aW9uSWQ6IGRlY2xhcmF0aW9uLmlkLCBraW5kOiBcIlJlZmVyZW5jZVR5cGVcIn1cbiAgICAgICAgOiB7ZGVjbGFyYXRpb25JZDogZGVjbGFyYXRpb24uaWQsIGtpbmQ6IFwiUmVjb3JkVHlwZVwiLCAuLi4odHlwZUFyZ3VtZW50cyA/IHthcmd1bWVudHM6IHR5cGVBcmd1bWVudHN9IDoge30pfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBkaXJlY3Qgc3RydWN0dXJhbCBjaGlsZHJlbiBvZiBvbmUgSmF2YSBibG9jayBpbiBzb3VyY2Ugb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIEphdmEgQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBTZW1hbnRpYyBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJsb2NrKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgaWYgKG5vZGUubmFtZSAhPSBcIkJsb2NrXCIgJiYgbm9kZS5uYW1lICE9IFwiQ29uc3RydWN0b3JCb2R5XCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIGBleHBlY3RlZCBibG9jaywgcmVjZWl2ZWQgJHtub2RlLm5hbWV9YCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBraW5kOiBcIkJsb2NrXCIsXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBzdGF0ZW1lbnRzOiBjb252ZXJ0U3RhdGVtZW50cyhzdHJ1Y3R1cmFsQ2hpbGRyZW4obm9kZSksIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIEphdmEgc3RhdGVtZW50IHNlcXVlbmNlLCBmb2xkaW5nIHRoZSBleGFjdCBwcm90ZWN0ZWQgb3JkZXJlZC1tYXAgY29uc3RydWN0aW9uIHByb2ZpbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBzdGF0ZW1lbnRzIC0gRGlyZWN0IGJsb2NrIHN0YXRlbWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnRbXX0gU2VtYW50aWMgc3RhdGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudHMoc3RhdGVtZW50cywgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBjb252ZXJ0ZWQgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZW1lbnRzLmxlbmd0aDspIHtcbiAgICBjb25zdCBvcmRlcmVkID0gY29udmVydEphdmFPcmRlcmVkTWFwU2VxdWVuY2Uoc3RhdGVtZW50cywgaW5kZXgsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG5cbiAgICBpZiAob3JkZXJlZCkge1xuICAgICAgY29udmVydGVkLnB1c2gob3JkZXJlZC5zdGF0ZW1lbnQpXG4gICAgICBpbmRleCA9IG9yZGVyZWQubmV4dEluZGV4XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnZlcnRlZC5wdXNoKGNvbnZlcnRTdGF0ZW1lbnQoc3RhdGVtZW50c1tpbmRleF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpKVxuICAgICAgaW5kZXggKz0gMVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0ZWRcbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIGNvbnN0cnVjdGlvbiB0aHJvdWdoIGEgcHJpdmF0ZSBMaW5rZWRIYXNoTWFwIGJhY2tpbmcgZm9sbG93ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIFNlcXVlbmNlZE1hcCBib3VuZGFyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IHN0YXRlbWVudHMgLSBEaXJlY3QgYmxvY2sgc3RhdGVtZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAtIENhbmRpZGF0ZSBiYWNraW5nLWRlY2xhcmF0aW9uIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7SmF2YUNvbnZlcnNpb25Db250ZXh0fSBjb250ZXh0IC0gVHlwZWQgbGV4aWNhbCBjb252ZXJzaW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7e3N0YXRlbWVudDogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiwgbmV4dEluZGV4OiBudW1iZXJ9IHwgdW5kZWZpbmVkfSBGb2xkZWQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhT3JkZXJlZE1hcFNlcXVlbmNlKHN0YXRlbWVudHMsIHN0YXJ0LCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJhY2tpbmdTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW3N0YXJ0XVxuICBjb25zdCBiYWNraW5nVHlwZU5vZGUgPSBiYWNraW5nU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoYmFja2luZ1N0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IGJhY2tpbmdUeXBlQ2hpbGRyZW4gPSBiYWNraW5nVHlwZU5vZGU/Lm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdUeXBlTm9kZSkgOiBbXVxuXG4gIGlmIChiYWNraW5nVHlwZUNoaWxkcmVuLmxlbmd0aCAhPSAyIHx8IG5vZGVUZXh0KGJhY2tpbmdUeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oYmFja2luZ1N0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYmFja2luZ01vZGlmaWVycyA9IGJhY2tpbmdTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgYmFja2luZ0RlY2xhcmF0b3JzID0gYmFja2luZ1N0YXRlbWVudC5nZXRDaGlsZHJlbihcIlZhcmlhYmxlRGVjbGFyYXRvclwiKVxuICBjb25zdCBiYWNraW5nRGVjbGFyYXRvciA9IGJhY2tpbmdEZWNsYXJhdG9yc1swXVxuICBjb25zdCBiYWNraW5nRGVmaW5pdGlvbiA9IGJhY2tpbmdEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3QgYmFja2luZ0Fzc2lnbm1lbnQgPSBiYWNraW5nRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBiYWNraW5nSW5pdGlhbGl6ZXIgPSBiYWNraW5nRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oYmFja2luZ0RlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGUgPSBiYWNraW5nSW5pdGlhbGl6ZXI/Lm5hbWUgPT0gXCJPYmplY3RDcmVhdGlvbkV4cHJlc3Npb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKGJhY2tpbmdJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gXCJHZW5lcmljVHlwZVwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbiA9IGNvbnN0cnVjdGlvblR5cGUgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uc3RydWN0aW9uVHlwZSkgOiBbXVxuICBjb25zdCBjb25zdHJ1Y3Rpb25Bcmd1bWVudHMgPSBiYWNraW5nSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IGJhY2tpbmdBcmd1bWVudHNOb2RlID0gYmFja2luZ1R5cGVDaGlsZHJlblsxXVxuICBjb25zdCBiYWNraW5nQXJndW1lbnRzID0gYmFja2luZ0FyZ3VtZW50c05vZGU/Lm5hbWUgPT0gXCJUeXBlQXJndW1lbnRzXCIgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmFja2luZ0FyZ3VtZW50c05vZGUpIDogW11cblxuICBpZiAobm9kZVRleHQoYmFja2luZ01vZGlmaWVycyA/PyBiYWNraW5nU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiZmluYWxcIiB8fCBiYWNraW5nRGVjbGFyYXRvcnMubGVuZ3RoICE9IDEgfHxcbiAgICAhYmFja2luZ0RlZmluaXRpb24gfHwgIWJhY2tpbmdBc3NpZ25tZW50IHx8IG5vZGVUZXh0KGJhY2tpbmdBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8ICFiYWNraW5nSW5pdGlhbGl6ZXIgfHxcbiAgICBiYWNraW5nSW5pdGlhbGl6ZXIubmFtZSAhPSBcIk9iamVjdENyZWF0aW9uRXhwcmVzc2lvblwiIHx8IGJhY2tpbmdJbml0aWFsaXplci5nZXRDaGlsZChcIkNsYXNzQm9keVwiKSB8fFxuICAgIGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChjb25zdHJ1Y3Rpb25UeXBlQ2hpbGRyZW5bMF0sIHNvdXJjZSkgIT0gXCJqYXZhLnV0aWwuTGlua2VkSGFzaE1hcFwiIHx8XG4gICAgc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdGlvblR5cGVDaGlsZHJlblsxXSkubGVuZ3RoICE9IDAgfHwgIWNvbnN0cnVjdGlvbkFyZ3VtZW50cyB8fFxuICAgIHN0cnVjdHVyYWxDaGlsZHJlbihjb25zdHJ1Y3Rpb25Bcmd1bWVudHMpLmxlbmd0aCAhPSAwIHx8IGJhY2tpbmdBcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgTGlua2VkSGFzaE1hcCBiYWNraW5nXCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgYmFja2luZ05hbWUgPSBub2RlVGV4dChiYWNraW5nRGVmaW5pdGlvbiwgc291cmNlKVxuXG4gIGlmIChjb250ZXh0LmJpbmRpbmdzLmhhcyhiYWNraW5nTmFtZSkgfHwgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuaGFzKGJhY2tpbmdOYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBiYWNraW5nIGJpbmRpbmcgY29sbGlzaW9uXCIsIG5vZGVMb2NhdGlvbihiYWNraW5nRGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMF0sIFwiT3JkZXJlZCBtYXAga2V5XCIsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgIGNvbnRleHQucmVjb3JkTmFtZXMsIGNvbnRleHQudHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHZhbHVlVHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGJhY2tpbmdBcmd1bWVudHNbMV0sIFwiT3JkZXJlZCBtYXAgdmFsdWVcIiwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGxldCBpbmRleCA9IHN0YXJ0ICsgMVxuXG4gIHdoaWxlIChpbmRleCA8IHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgcHV0U3RhdGVtZW50ID0gc3RhdGVtZW50c1tpbmRleF1cbiAgICBjb25zdCBpbnZvY2F0aW9uID0gcHV0U3RhdGVtZW50Lm5hbWUgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgPyBwdXRTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNZXRob2RJbnZvY2F0aW9uXCIpIDogbnVsbFxuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIk1ldGhvZE5hbWVcIilcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBpbnZvY2F0aW9uPy5nZXRDaGlsZChcIkFyZ3VtZW50TGlzdFwiKVxuICAgIGNvbnN0IHJlY2VpdmVyID0gaW52b2NhdGlvblxuICAgICAgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oaW52b2NhdGlvbikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICghaW52b2NhdGlvbiB8fCByZWNlaXZlcj8ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChyZWNlaXZlciwgc291cmNlKSAhPSBiYWNraW5nTmFtZSB8fFxuICAgICAgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInB1dFwiKSBicmVha1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBhcmd1bWVudExpc3QgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KSA6IFtdXG5cbiAgICBpZiAoYXJndW1lbnRzXy5sZW5ndGggIT0gMiB8fCBhcmd1bWVudHNfWzBdLm5hbWUgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBwdXRcIiwgbm9kZUxvY2F0aW9uKHB1dFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGVudHJpZXMucHVzaCh3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtleTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdHJpbmdMaXRlcmFsfSAqLyAoXG4gICAgICAgIGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIGtleVR5cGUpXG4gICAgICApLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWFwRW50cnlcIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgdmFsdWU6IGNvbnZlcnRFeHByZXNzaW9uKGFyZ3VtZW50c19bMV0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQsIHZhbHVlVHlwZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihtZXRob2ROYW1lLCBmaWxlbmFtZSwgc291cmNlKX0pKVxuICAgIGluZGV4ICs9IDFcbiAgfVxuXG4gIGNvbnN0IHNlYWxTdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2luZGV4XVxuICBjb25zdCBzZWFsVHlwZU5vZGUgPSBzZWFsU3RhdGVtZW50Py5uYW1lID09IFwiTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvblR5cGUoc2VhbFN0YXRlbWVudCkgOiBudWxsXG4gIGNvbnN0IHNlYWxEZWNsYXJhdG9ycyA9IHNlYWxTdGF0ZW1lbnQ/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGRyZW4oXCJWYXJpYWJsZURlY2xhcmF0b3JcIikgOiBbXVxuICBjb25zdCBzZWFsRGVjbGFyYXRvciA9IHNlYWxEZWNsYXJhdG9yc1swXVxuICBjb25zdCBzZWFsRGVmaW5pdGlvbiA9IHNlYWxEZWNsYXJhdG9yPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcbiAgY29uc3Qgc2VhbEFzc2lnbm1lbnQgPSBzZWFsRGVjbGFyYXRvcj8uZ2V0Q2hpbGQoXCJBc3NpZ25PcFwiKVxuICBjb25zdCBzZWFsSW5pdGlhbGl6ZXIgPSBzZWFsRGVjbGFyYXRvclxuICAgID8gZGlyZWN0Q2hpbGRyZW4oc2VhbERlY2xhcmF0b3IpLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lICE9IFwiRGVmaW5pdGlvblwiICYmIGNoaWxkLm5hbWUgIT0gXCJBc3NpZ25PcFwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHNlYWxNZXRob2QgPSBzZWFsSW5pdGlhbGl6ZXI/LmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuICBjb25zdCBzZWFsQXJndW1lbnRzTm9kZSA9IHNlYWxJbml0aWFsaXplcj8uZ2V0Q2hpbGQoXCJBcmd1bWVudExpc3RcIilcbiAgY29uc3Qgc2VhbEFyZ3VtZW50cyA9IHNlYWxBcmd1bWVudHNOb2RlID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxBcmd1bWVudHNOb2RlKSA6IFtdXG4gIGNvbnN0IHNlYWxSZWNlaXZlciA9IHNlYWxJbml0aWFsaXplcj8ubmFtZSA9PSBcIk1ldGhvZEludm9jYXRpb25cIlxuICAgID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxJbml0aWFsaXplcikuZmluZCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgIT0gXCJNZXRob2ROYW1lXCIgJiYgY2hpbGQubmFtZSAhPSBcIkFyZ3VtZW50TGlzdFwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFzZWFsU3RhdGVtZW50IHx8IG5vZGVUZXh0KHNlYWxTdGF0ZW1lbnQuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gc2VhbFN0YXRlbWVudCwgc291cmNlKSAhPSBcImZpbmFsXCIgfHxcbiAgICAhc2VhbFR5cGVOb2RlIHx8IHNlYWxEZWNsYXJhdG9ycy5sZW5ndGggIT0gMSB8fCAhc2VhbERlZmluaXRpb24gfHwgIXNlYWxBc3NpZ25tZW50IHx8IG5vZGVUZXh0KHNlYWxBc3NpZ25tZW50LCBzb3VyY2UpICE9IFwiPVwiIHx8XG4gICAgc2VhbEluaXRpYWxpemVyPy5uYW1lICE9IFwiTWV0aG9kSW52b2NhdGlvblwiIHx8IG5vZGVUZXh0KHNlYWxSZWNlaXZlciA/PyBzZWFsU3RhdGVtZW50LCBzb3VyY2UpICE9IFwiamF2YS51dGlsLkNvbGxlY3Rpb25zXCIgfHxcbiAgICAhc2VhbE1ldGhvZCB8fCBub2RlVGV4dChzZWFsTWV0aG9kLCBzb3VyY2UpICE9IFwidW5tb2RpZmlhYmxlU2VxdWVuY2VkTWFwXCIgfHwgc2VhbEFyZ3VtZW50cy5sZW5ndGggIT0gMSB8fFxuICAgIHNlYWxBcmd1bWVudHNbMF0ubmFtZSAhPSBcIklkZW50aWZpZXJcIiB8fCBub2RlVGV4dChzZWFsQXJndW1lbnRzWzBdLCBzb3VyY2UpICE9IGJhY2tpbmdOYW1lKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm9yZGVyZWQtbWFwIHVubW9kaWZpYWJsZSBTZXF1ZW5jZWRNYXAgYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KHNlYWxEZWZpbml0aW9uLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWUgPT0gYmFja2luZ05hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib3JkZXJlZC1tYXAgYm91bmRhcnkgYmluZGluZyBjb2xsaXNpb25cIiwgbm9kZUxvY2F0aW9uKHNlYWxEZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBib3VuZGFyeVR5cGUgPSBjb252ZXJ0VHlwZShzZWFsVHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBub2RlTG9jYXRpb24oc2VhbFN0YXRlbWVudCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dC5yZWNvcmROYW1lcywgY29udGV4dC50eXBlUGFyYW1ldGVycylcbiAgY29uc3Qgc2VhbFR5cGVDaGlsZHJlbiA9IHNlYWxUeXBlTm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIiA/IHN0cnVjdHVyYWxDaGlsZHJlbihzZWFsVHlwZU5vZGUpIDogW11cbiAgY29uc3Qgc2VhbFR5cGVBcmd1bWVudHMgPSBzZWFsVHlwZUNoaWxkcmVuWzFdPy5uYW1lID09IFwiVHlwZUFyZ3VtZW50c1wiID8gc3RydWN0dXJhbENoaWxkcmVuKHNlYWxUeXBlQ2hpbGRyZW5bMV0pIDogW11cblxuICBpZiAoc2VhbFR5cGVDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBub2RlVGV4dChzZWFsVHlwZUNoaWxkcmVuWzBdLCBzb3VyY2UpICE9IFwiamF2YS51dGlsLlNlcXVlbmNlZE1hcFwiIHx8XG4gICAgc2VhbFR5cGVBcmd1bWVudHMubGVuZ3RoICE9IDIgfHwgYm91bmRhcnlUeXBlLmtpbmQgIT0gXCJNYXBUeXBlXCIgfHwgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLmtleVR5cGUsIGtleVR5cGUpIHx8XG4gICAgIXNhbWVWYWx1ZVR5cGUoYm91bmRhcnlUeXBlLnZhbHVlVHlwZSwgdmFsdWVUeXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJvcmRlcmVkLW1hcCBib3VuZGFyeSB0eXBlIG1pc21hdGNoXCIsIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHR5cGUgPSBvcmRlcmVkTWFwVHlwZShcbiAgICBib3VuZGFyeVR5cGUua2V5VHlwZSxcbiAgICBib3VuZGFyeVR5cGUudmFsdWVUeXBlLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5vZGVMb2NhdGlvbihzZWFsVHlwZUFyZ3VtZW50c1swXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgbm9kZUxvY2F0aW9uKHNlYWxUeXBlQXJndW1lbnRzWzFdLCBmaWxlbmFtZSwgc291cmNlKVxuICApXG5cbiAgY29udGV4dC5iaW5kaW5ncy5zZXQobmFtZSwgdHlwZSlcbiAgY29udGV4dC5lcmFzZWRCaW5kaW5nTmFtZXMuYWRkKGJhY2tpbmdOYW1lKVxuICByZXR1cm4ge1xuICAgIG5leHRJbmRleDogaW5kZXggKyAxLFxuICAgIHN0YXRlbWVudDogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBpbml0aWFsaXplcjogd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk9yZGVyZWRNYXBMaXRlcmFsXCIpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBiYWNraW5nSW5pdGlhbGl6ZXIuZnJvbSwgc2VhbEluaXRpYWxpemVyLnRvKVxuICAgICAgfSwge2ZhY3Rvcnk6IG5vZGVMb2NhdGlvbihiYWNraW5nSW5pdGlhbGl6ZXIsIGZpbGVuYW1lLCBzb3VyY2UpfSksXG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgICAgbG9jYXRpb246IGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgYmFja2luZ1N0YXRlbWVudC5mcm9tLCBzZWFsU3RhdGVtZW50LnRvKSxcbiAgICAgIG11dGFibGU6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChmYWxzZSksXG4gICAgICBuYW1lLFxuICAgICAgdHlwZVxuICAgIH0sIHtuYW1lOiBub2RlTG9jYXRpb24oc2VhbERlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLCBvcGVyYXRvcjogbm9kZUxvY2F0aW9uKHNlYWxBc3NpZ25tZW50LCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhbiBleGFjdCBKYXZhIHNjYWxhciB0eXBlIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZSB8IG51bGx9IHNvdXJjZVR5cGUgLSBKYXZhIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUoc291cmNlVHlwZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAoIXNvdXJjZVR5cGUpIHJldHVybiBtaXNzaW5nVHlwZShcImphdmFcIiwgc3ViamVjdCwgbG9jYXRpb24pXG4gIGlmIChzb3VyY2VUeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ2b2lkIHZhbHVlIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoc291cmNlVHlwZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHNvdXJjZVR5cGUpXG4gICAgY29uc3QgbmFtZU5vZGUgPSBjaGlsZHJlblswXVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSBjaGlsZHJlblsxXVxuXG4gICAgaWYgKCFuYW1lTm9kZSB8fCAhYXJndW1lbnRzTm9kZSB8fCBhcmd1bWVudHNOb2RlLm5hbWUgIT0gXCJUeXBlQXJndW1lbnRzXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgZ2VuZXJpYyBjb2xsZWN0aW9uIHR5cGVcIiwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBuYW1lID0gbm9kZVRleHQobmFtZU5vZGUsIHNvdXJjZSlcbiAgICBjb25zdCBhcmd1bWVudHNfID0gc3RydWN0dXJhbENoaWxkcmVuKGFyZ3VtZW50c05vZGUpXG5cbiAgICBpZiAobmFtZSA9PSBcImphdmEudXRpbC5MaXN0XCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxpc3RUeXBlKFxuICAgICAgICBjb252ZXJ0SmF2YVR5cGVBcmd1bWVudChhcmd1bWVudHNfWzBdLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKG5hbWUgPT0gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgJiYgYXJndW1lbnRzXy5sZW5ndGggPT0gMikge1xuICAgICAgY29uc3Qga2V5VHlwZSA9IGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG5cbiAgICAgIGlmIChrZXlUeXBlLmtpbmQgIT0gXCJUeXBlUmVmZXJlbmNlXCIgfHwga2V5VHlwZS5uYW1lICE9IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hcCBrZXkgdHlwZSBvdGhlciB0aGFuIHN0cmluZ1wiLCBub2RlTG9jYXRpb24oYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwVHlwZShcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnRzX1sxXSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVycyksXG4gICAgICAgIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgbm9kZUxvY2F0aW9uKGFyZ3VtZW50c19bMF0sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICBub2RlTG9jYXRpb24oYXJndW1lbnRzX1sxXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKChuYW1lID09IFwiamF2YS51dGlsLk9wdGlvbmFsXCIgfHwgbmFtZSA9PSBcIk9wdGlvbmFsXCIpICYmIGFyZ3VtZW50c18ubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBvcHRpb25hbFR5cGUoXG4gICAgICAgIGNvbnZlcnRKYXZhVHlwZUFyZ3VtZW50KGFyZ3VtZW50c19bMF0sIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpLFxuICAgICAgICBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICAgIG5vZGVMb2NhdGlvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZE5hbWVzLmdldChuYW1lKVxuXG4gICAgaWYgKHJlY29yZD8uaWQpIHtcbiAgICAgIGlmIChyZWNvcmQua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIikge1xuICAgICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiZ2VuZXJpYyByZWZlcmVuY2UgY2xhc3MgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVjb3JkVHlwZShyZWNvcmQuaWQsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT5cbiAgICAgICAgY29udmVydEphdmFUeXBlQXJndW1lbnQoYXJndW1lbnQsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgZ2VuZXJpYyB0eXBlXCIsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBpZiAoIVtcIlByaW1pdGl2ZVR5cGVcIiwgXCJUeXBlTmFtZVwiLCBcIlNjb3BlZFR5cGVOYW1lXCJdLmluY2x1ZGVzKHNvdXJjZVR5cGUubmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgc2NhbGFyIHR5cGVcIiwgbG9jYXRpb24pXG4gIH1cblxuICBjb25zdCB0eXBlUGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnMuZ2V0KG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSkpXG5cbiAgaWYgKHR5cGVQYXJhbWV0ZXI/LmlkKSByZXR1cm4gdHlwZVZhcmlhYmxlKHR5cGVQYXJhbWV0ZXIuaWQsIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSByZWNvcmROYW1lcy5nZXQobm9kZVRleHQoc291cmNlVHlwZSwgc291cmNlKSlcblxuICBpZiAoZGVjbGFyYXRpb24/LmlkKSByZXR1cm4gZGVjbGFyYXRpb24ua2luZCA9PSBcIkNsYXNzRGVjbGFyYXRpb25cIlxuICAgID8gcmVmZXJlbmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgIDogZGVjbGFyYXRpb24ua2luZCA9PSBcIkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb25cIlxuICAgICAgPyBvd25lZFJlc291cmNlVHlwZShkZWNsYXJhdGlvbi5pZCwgbm9kZUxvY2F0aW9uKHNvdXJjZVR5cGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICAgICAgOiByZWNvcmRUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJqYXZhXCIsIG5vZGVUZXh0KHNvdXJjZVR5cGUsIHNvdXJjZSksIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICBpZiAoIXR5cGUpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCBzY2FsYXIgdHlwZVwiLCBub2RlTG9jYXRpb24oc291cmNlVHlwZSwgbG9jYXRpb24uZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgYm94ZWQgSmF2YSBjb2xsZWN0aW9uIHR5cGUgYXJndW1lbnQgb3IgbmVzdGVkIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIFR5cGUgYXJndW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgc3ViamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gT3duaW5nIGxvY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IFtyZWNvcmROYW1lc10gLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlcj59IFt0eXBlUGFyYW1ldGVyc10gLSBEZWNsYXJhdGlvbi1zY29wZWQgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1ZhbHVlVHlwZX0gU2VtYW50aWMgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlQXJndW1lbnQobm9kZSwgc3ViamVjdCwgbG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzID0gbmV3IE1hcCgpLCB0eXBlUGFyYW1ldGVycyA9IG5ldyBNYXAoKSkge1xuICBpZiAobm9kZS5uYW1lID09IFwiR2VuZXJpY1R5cGVcIikgcmV0dXJuIGNvbnZlcnRUeXBlKG5vZGUsIHN1YmplY3QsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCByZWNvcmROYW1lcywgdHlwZVBhcmFtZXRlcnMpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXIgPSB0eXBlUGFyYW1ldGVycy5nZXQobm9kZVRleHQobm9kZSwgc291cmNlKSlcblxuICBpZiAodHlwZVBhcmFtZXRlcj8uaWQpIHJldHVybiB0eXBlVmFyaWFibGUodHlwZVBhcmFtZXRlci5pZCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHJlY29yZE5hbWVzLmdldChub2RlVGV4dChub2RlLCBzb3VyY2UpKVxuXG4gIGlmIChkZWNsYXJhdGlvbj8uaWQpIHJldHVybiBkZWNsYXJhdGlvbi5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiXG4gICAgPyByZWZlcmVuY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgOiBkZWNsYXJhdGlvbi5raW5kID09IFwiRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvblwiXG4gICAgICA/IG93bmVkUmVzb3VyY2VUeXBlKGRlY2xhcmF0aW9uLmlkLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgICA6IHJlY29yZFR5cGUoZGVjbGFyYXRpb24uaWQsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc3BlbGxpbmcgPSBub2RlVGV4dChub2RlLCBzb3VyY2UpXG4gIGNvbnN0IHNjYWxhciA9IHNwZWxsaW5nID09IFwiSW50ZWdlclwiID8gXCJpbnRlZ2VyXCIgOiBzcGVsbGluZyA9PSBcIkJvb2xlYW5cIiA/IFwiYm9vbGVhblwiIDogc3BlbGxpbmcgPT0gXCJTdHJpbmdcIiA/IFwic3RyaW5nXCIgOiB1bmRlZmluZWRcblxuICBpZiAoIXNjYWxhcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIGNvbGxlY3Rpb24gdHlwZSBhcmd1bWVudFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IHR5cGUgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1R5cGVOYW1lfSAqLyAoc2NhbGFyKX1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh0eXBlLCB7dHlwZTogbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhwbGljaXQgSmF2YSBmdW5jdGlvbiByZXR1cm4gdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gc291cmNlVHlwZSAtIEphdmEgcmV0dXJuIHR5cGUgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVHlwZWQgZnVuY3Rpb24gcmV0dXJuLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBGdW5jdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBbcmVjb3JkTmFtZXNdIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXI+fSBbdHlwZVBhcmFtZXRlcnNdIC0gRGVjbGFyYXRpb24tc2NvcGVkIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IFNlbWFudGljIHJldHVybiB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmV0dXJuVHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKCksIHR5cGVQYXJhbWV0ZXJzID0gbmV3IE1hcCgpKSB7XG4gIGlmIChzb3VyY2VUeXBlPy5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgcmV0dXJuIHJlcXVpcmVTb3VyY2VSZXR1cm5UeXBlKFwiamF2YVwiLCBcInZvaWRcIiwgc3ViamVjdCwgbG9jYXRpb24sIG5vZGVMb2NhdGlvbihzb3VyY2VUeXBlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0VHlwZShzb3VyY2VUeXBlLCBzdWJqZWN0LCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJzKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRpcmVjdCBKYXZhIGRlY2xhcmF0aW9uIHR5cGUgbm9kZSBzdXBwb3J0ZWQgYnkgc2NhbGFyIGNvbnZlcnNpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gbm9kZSAtIERlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gVHlwZSBzeW50YXggbm9kZS5cbiAqL1xuZnVuY3Rpb24gZGVjbGFyYXRpb25UeXBlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuZ2V0Q2hpbGQoXCJHZW5lcmljVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiUHJpbWl0aXZlVHlwZVwiKSA/PyBub2RlLmdldENoaWxkKFwiVHlwZU5hbWVcIikgPz8gbm9kZS5nZXRDaGlsZChcIlNjb3BlZFR5cGVOYW1lXCIpID8/IG5vZGUuZ2V0Q2hpbGQoXCJ2b2lkXCIpXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIG5hdGl2ZSB1bmJvdW5kZWQgaW52YXJpYW50IEphdmEgdHlwZS1wYXJhbWV0ZXIgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgbnVsbH0gbm9kZSAtIFR5cGVQYXJhbWV0ZXJzIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXJJZCAtIFN0YWJsZSBvd25pbmcgZGVjbGFyYXRpb24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZH0gU2VtYW50aWMgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFUeXBlUGFyYW1ldGVycyhub2RlLCBvd25lcklkLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKG5vZGUpXG5cbiAgcmV0dXJuIHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVyKVxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBjaGlsZHJlblswXVxuXG4gICAgaWYgKHBhcmFtZXRlci5uYW1lICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IGRlZmluaXRpb24/Lm5hbWUgIT0gXCJEZWZpbml0aW9uXCIpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJib3VuZGVkLCBhbm5vdGF0ZWQsIG9yIG1hbGZvcm1lZCB0eXBlIHBhcmFtZXRlclwiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gICAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oZGVmaW5pdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGlkOiBgJHtvd25lcklkfTp0eXBlOiR7aW5kZXh9YCxcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlR5cGVQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG5hbWU6IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgICB9LCB7bmFtZTogbG9jYXRpb259KVxuICB9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBmdW5jdGlvbiBzaWduYXR1cmUgYmVmb3JlIGFkYXB0aW5nIGFueSBib2R5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gcmVjb3JkTmFtZXMgLSBOb21pbmFsIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1GdW5jdGlvbl0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBleHBsaWNpdCBwdWJsaWMgb3IgcHJpdmF0ZSB2aXNpYmlsaXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcklkXSAtIFN0YWJsZSBmdW5jdGlvbiBpZGVudGl0eS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZmVyZW5jZU1vZHVsZV0gLSBXaGV0aGVyIHBhY2thZ2UtdmlzaWJsZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBieSBzaWJsaW5nIHJlZmVyZW5jZSBjbGFzc2VzLlxuICogQHJldHVybnMge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gU2VtYW50aWMgZnVuY3Rpb24gc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RnVuY3Rpb25TaWduYXR1cmUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHByb2dyYW1GdW5jdGlvbiA9IGZhbHNlLCBvd25lcklkID0gXCJmdW5jdGlvbjowXCIsXG4gIHJlZmVyZW5jZU1vZHVsZSA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJOYW1lcyA9IG1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBjb25zdCByZXF1aXJlZE1vZGlmaWVycyA9IHByb2dyYW1GdW5jdGlvbiA/IFwicHVibGljIG9yIHByaXZhdGUgc3RhdGljXCIgOiByZWZlcmVuY2VNb2R1bGUgPyBcInByaXZhdGUgb3IgcGFja2FnZS12aXNpYmxlIHN0YXRpY1wiIDogXCJwcml2YXRlIHN0YXRpY1wiXG4gIGNvbnN0IG1vZGlmaWVyc1RleHQgPSBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpXG5cbiAgaWYgKHByb2dyYW1GdW5jdGlvbiA/ICFbXCJwdWJsaWMgc3RhdGljXCIsIFwicHJpdmF0ZSBzdGF0aWNcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOlxuICAgIHJlZmVyZW5jZU1vZHVsZSA/ICFbXCJwcml2YXRlIHN0YXRpY1wiLCBcInN0YXRpY1wiXS5pbmNsdWRlcyhtb2RpZmllcnNUZXh0KSA6IG1vZGlmaWVyc1RleHQgIT0gXCJwcml2YXRlIHN0YXRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBgc2VtYW50aWMgZnVuY3Rpb24gd2l0aG91dCAke3JlcXVpcmVkTW9kaWZpZXJzfWAsIG1vZGlmaWVycyA/IG5vZGVMb2NhdGlvbihtb2RpZmllcnMsIGZpbGVuYW1lLCBzb3VyY2UpIDogbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIilcbiAgY29uc3QgdGhyb3dzID0gbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKVxuXG4gIGlmICh0aHJvd3MpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjaGVja2VkIHRocm93c1wiLCBub2RlTG9jYXRpb24odGhyb3dzLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2VtYW50aWNUeXBlUGFyYW1ldGVycyA9IGNvbnZlcnRKYXZhVHlwZVBhcmFtZXRlcnModHlwZVBhcmFtZXRlcnMsIG93bmVySWQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVQYXJhbWV0ZXJOYW1lcyA9IG5ldyBNYXAoKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgdW5zdXBwb3J0ZWRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlcy5maW5kKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIpXG5cbiAgaWYgKHVuc3VwcG9ydGVkUGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInVuc3VwcG9ydGVkIHBhcmFtZXRlciBmb3JtXCIsIG5vZGVMb2NhdGlvbih1bnN1cHBvcnRlZFBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyTG9jYXRpb24gPSBub2RlTG9jYXRpb24ocGFyYW1ldGVyLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlckNoaWxkcmVuID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcilcblxuICAgIGlmIChwYXJhbWV0ZXJDaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwidW5zdXBwb3J0ZWQgcGFyYW1ldGVyIGZvcm1cIiwgcGFyYW1ldGVyTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWVOb2RlID0gcmVxdWlyZWRDaGlsZChwYXJhbWV0ZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBub2RlVGV4dChwYXJhbWV0ZXJOYW1lTm9kZSwgc291cmNlKVxuXG4gICAgY29uc3Qgc2VtYW50aWNQYXJhbWV0ZXIgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyTG9jYXRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlciksIGBQYXJhbWV0ZXIgJyR7cGFyYW1ldGVyTmFtZX0nYCwgcGFyYW1ldGVyTG9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgICAgIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoc2VtYW50aWNQYXJhbWV0ZXIsIHtuYW1lOiBub2RlTG9jYXRpb24ocGFyYW1ldGVyTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIG5hbWVMb2NhdGlvbjogbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFJldHVyblR5cGUoZGVjbGFyYXRpb25UeXBlKG5vZGUpLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcyksXG4gICAgLi4uKHNlbWFudGljVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNlbWFudGljVHlwZVBhcmFtZXRlcnN9IDoge30pXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgSmF2YSBmdW5jdGlvbiBib2R5IHVzaW5nIGFscmVhZHktcHJvdmVkIG1vZHVsZSBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2QgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge0phdmFGdW5jdGlvblNpZ25hdHVyZX0gc2lnbmF0dXJlIC0gUHJlY29udmVydGVkIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gZnVuY3Rpb25zIC0gTW9kdWxlIGZ1bmN0aW9uIHNpZ25hdHVyZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIE5vbWluYWwgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIFJlZmVyZW5jZSBjbGFzc2VzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBzb3VyY2UgbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucyBieSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBzaWduYXR1cmUsIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXMsIHJlY29yZHMsIGNsYXNzZXMsIGVycm9yTmFtZXMsIGVycm9ycywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJpbmRpbmdzOiBuZXcgTWFwKHNpZ25hdHVyZS5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLFxuICAgIGNsYXNzZXMsXG4gICAgZXJyb3JOYW1lcyxcbiAgICBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSxcbiAgICBlcnJvcnMsXG4gICAgZnVuY3Rpb25zLFxuICAgIHJlY29yZE5hbWVzLFxuICAgIHJlY29yZHMsXG4gICAgcmV0dXJuVHlwZTogc2lnbmF0dXJlLnJldHVyblR5cGUsXG4gICAgdHlwZVBhcmFtZXRlcnM6IG5ldyBNYXAoKHNpZ25hdHVyZS50eXBlUGFyYW1ldGVycyA/PyBbXSkubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyXSkpXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSxcbiAgICBraW5kOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBsb2NhdGlvbjogc2lnbmF0dXJlLmxvY2F0aW9uLFxuICAgIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IHNpZ25hdHVyZS5yZXR1cm5UeXBlLFxuICAgIC4uLihzaWduYXR1cmUudHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHNpZ25hdHVyZS50eXBlUGFyYW1ldGVyc30gOiB7fSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBmaW5hbCBSdW50aW1lRXhjZXB0aW9uIHN1YmNsYXNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBKYXZhIGNsYXNzIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFByZWRlY2xhcmVkIHNlbWFudGljIGVycm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb2dyYW1FcnJvcl0gLSBXaGV0aGVyIHB1YmxpYyBwcm9ncmFtIHZpc2liaWxpdHkgaXMgYWRtaXR0ZWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gU2VtYW50aWMgZXJyb3IgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhRXJyb3Iobm9kZSwgZGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW1FcnJvciA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1vZGlmaWVycyA9IG5vZGUuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgbW9kaWZpZXJUZXh0ID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkuam9pbihcIiBcIikgOiBcIlwiXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBzdXBlcmNsYXNzQ2hpbGRyZW4gPSBzdXBlcmNsYXNzID8gc3RydWN0dXJhbENoaWxkcmVuKHN1cGVyY2xhc3MpIDogW11cbiAgY29uc3QgcGFyZW50ID0gc3VwZXJjbGFzc0NoaWxkcmVuLmF0KC0xKVxuICBjb25zdCBib2R5ID0gbm9kZS5nZXRDaGlsZChcIkNsYXNzQm9keVwiKVxuICBjb25zdCBtZW1iZXJzID0gYm9keSA/IHN0cnVjdHVyYWxDaGlsZHJlbihib2R5KSA6IFtdXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gbWVtYmVyc1swXVxuICBjb25zdCBwYXJhbWV0ZXJzID0gY29uc3RydWN0b3I/LmdldENoaWxkKFwiRm9ybWFsUGFyYW1ldGVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyID8gZGVjbGFyYXRpb25UeXBlKHBhcmFtZXRlcikgOiBudWxsXG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXI/LmdldENoaWxkKFwiRGVmaW5pdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvckJvZHkgPSBjb25zdHJ1Y3Rvcj8uZ2V0Q2hpbGQoXCJDb25zdHJ1Y3RvckJvZHlcIilcbiAgY29uc3QgY29uc3RydWN0b3JTdGF0ZW1lbnRzID0gY29uc3RydWN0b3JCb2R5ID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yQm9keSkgOiBbXVxuICBjb25zdCBzdXBlckNhbGwgPSBjb25zdHJ1Y3RvclN0YXRlbWVudHNbMF1cbiAgY29uc3Qgc3VwZXJBcmd1bWVudHMgPSBzdXBlckNhbGw/LmdldENoaWxkKFwiQXJndW1lbnRMaXN0XCIpXG4gIGNvbnN0IHN1cGVyVmFsdWVzID0gc3VwZXJBcmd1bWVudHMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oc3VwZXJBcmd1bWVudHMpIDogW11cblxuICBpZiAoKHByb2dyYW1FcnJvciA/ICFbXCJwdWJsaWMgZmluYWxcIiwgXCJmaW5hbFwiXS5pbmNsdWRlcyhtb2RpZmllclRleHQpIDogbW9kaWZpZXJUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICAhc3VwZXJjbGFzcyB8fCBzdXBlcmNsYXNzQ2hpbGRyZW4ubGVuZ3RoICE9IDIgfHwgcGFyZW50Py5uYW1lICE9IFwiVHlwZU5hbWVcIiB8fCBub2RlVGV4dChwYXJlbnQsIHNvdXJjZSkgIT0gXCJSdW50aW1lRXhjZXB0aW9uXCIgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8IG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCAhYm9keSB8fCBtZW1iZXJzLmxlbmd0aCAhPSAxIHx8XG4gICAgY29uc3RydWN0b3I/Lm5hbWUgIT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIgfHxcbiAgICAocHJvZ3JhbUVycm9yID8gbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgPz8gY29uc3RydWN0b3IsIHNvdXJjZSkgIT0gXCJwdWJsaWNcIiA6IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpKSB8fFxuICAgIGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgbm9kZVRleHQoY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpID8/IG5vZGUsIHNvdXJjZSkgIT0gZGVjbGFyYXRpb24ubmFtZSB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1wiIHx8XG4gICAgbm9kZVRleHQocGFyYW1ldGVyTmFtZSA/PyBub2RlLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiIHx8ICFjb25zdHJ1Y3RvckJvZHkgfHwgY29uc3RydWN0b3JTdGF0ZW1lbnRzLmxlbmd0aCAhPSAxIHx8XG4gICAgc3VwZXJDYWxsPy5uYW1lICE9IFwiRXhwbGljaXRDb25zdHJ1Y3Rvckludm9jYXRpb25cIiB8fCAhc3VwZXJDYWxsLmdldENoaWxkKFwic3VwZXJcIikgfHwgc3VwZXJWYWx1ZXMubGVuZ3RoICE9IDEgfHxcbiAgICBzdXBlclZhbHVlc1swXS5uYW1lICE9IFwiSWRlbnRpZmllclwiIHx8IG5vZGVUZXh0KHN1cGVyVmFsdWVzWzBdLCBzb3VyY2UpICE9IFwibWVzc2FnZVwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCB0eXBlZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKGRlY2xhcmF0aW9uLCB7XG4gICAgbmFtZTogbm9kZUxvY2F0aW9uKHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICB0eXBlOiBub2RlTG9jYXRpb24ocGFyZW50LCBmaWxlbmFtZSwgc291cmNlKVxuICB9KVxufVxuXG4vKipcbiAqIFJlYWRzIG9uZSBwYWNrYWdlLXByaXZhdGUgSmF2YSByZWZlcmVuY2UgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UtbWV0aG9kIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ29uc3RydWN0b3Igb3IgbWV0aG9kIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIERlY2xhcmluZyBjbGFzcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IG5vbWluYWxOYW1lcyAtIFZpc2libGUgbm9taW5hbCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnN0cnVjdG9yIC0gV2hldGhlciB0aGlzIGlzIHRoZSBzb2xlIGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHt7bG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcsIG5hbWVMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHBhcmFtZXRlcnM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdLCByZXR1cm5UeXBlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9fSBFeGFjdCBzaWduYXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKYXZhQ2xhc3NDYWxsYWJsZVNpZ25hdHVyZShub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBjb25zdHJ1Y3RvciwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkZWZpbml0aW9uID0gcmVxdWlyZWRDaGlsZChub2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuXG4gIGlmIChtb2RpZmllcnMgfHwgbm9kZS5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBub2RlLmdldENoaWxkKFwiVHlwZVBhcmFtZXRlcnNcIikgfHxcbiAgICBjb25zdHJ1Y3RvciAhPSAobm9kZS5uYW1lID09IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSB8fCBjb25zdHJ1Y3RvciAmJiBuYW1lICE9IGRlY2xhcmF0aW9uLm5hbWUpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHJlZmVyZW5jZSBjbGFzcyBjYWxsYWJsZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoIWNvbnN0cnVjdG9yICYmIHJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYHJlc2VydmVkIHJlZmVyZW5jZSBtZXRob2QgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKGRlZmluaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBjaGlsZHJlbiA9IHN0cnVjdHVyYWxDaGlsZHJlbihwYXJhbWV0ZXIpXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZU5vZGUgPSBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG5cbiAgICBpZiAocGFyYW1ldGVyLm5hbWUgIT0gXCJGb3JtYWxQYXJhbWV0ZXJcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHxcbiAgICAgIHBhcmFtZXRlci5nZXRDaGlsZChcIkRpbWVuc2lvblwiKSB8fCAhcGFyYW1ldGVyTmFtZU5vZGUpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ1bnN1cHBvcnRlZCByZWZlcmVuY2UgY2xhc3MgcGFyYW1ldGVyXCIsIHBhcmFtZXRlckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gbm9kZVRleHQocGFyYW1ldGVyTmFtZU5vZGUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uOiBwYXJhbWV0ZXJMb2NhdGlvbiwgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHR5cGU6IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUGFyYW1ldGVyICcke3BhcmFtZXRlck5hbWV9J2AsIHBhcmFtZXRlckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBub21pbmFsTmFtZXMpfSxcbiAgICB7bmFtZTogbm9kZUxvY2F0aW9uKHBhcmFtZXRlck5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG5cbiAgcmV0dXJuIHtsb2NhdGlvbiwgbmFtZTogY29uc3RydWN0b3IgPyBcImNvbnN0cnVjdG9yXCIgOiBuYW1lLCBuYW1lTG9jYXRpb246IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKSwgcGFyYW1ldGVycyxcbiAgICAuLi4oY29uc3RydWN0b3IgPyB7fSA6IHtyZXR1cm5UeXBlOiBjb252ZXJ0UmV0dXJuVHlwZShkZWNsYXJhdGlvblR5cGUobm9kZSksIGBNZXRob2QgJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0pfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBib3VuZGVkIGZpbmFsL3ByaXZhdGUtZmllbGQgSmF2YSByZWZlcmVuY2UtY2xhc3MgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ2xhc3MgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgY2xhc3MgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24+fSBub21pbmFsTmFtZXMgLSBWaXNpYmxlIG5vbWluYWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59IHJlY29yZHMgLSBSZWNvcmRzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPn0gY2xhc3NlcyAtIENsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZT59IGZ1bmN0aW9ucyAtIFRvcC1sZXZlbCBzaWduYXR1cmVzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JOYW1lcyAtIEVycm9ycyBieSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3JzIGJ5IGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9ufSBTZW1hbnRpYyBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhub2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGVycm9yTmFtZXMsIGVycm9ycyxcbiAgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG4gIGNvbnN0IGJvZHkgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcbiAgY29uc3QgZmllbGROb2RlcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3Rvck5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1ldGhvZE5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuXG4gIGlmIChtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwiZmluYWxcIiB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpIHx8XG4gICAgbm9kZS5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8IGNvbnN0cnVjdG9yTm9kZXMubGVuZ3RoICE9IDEgfHwgZmllbGROb2Rlcy5sZW5ndGggPT0gMCB8fFxuICAgIGZpZWxkTm9kZXMubGVuZ3RoICsgY29uc3RydWN0b3JOb2Rlcy5sZW5ndGggKyBtZXRob2ROb2Rlcy5sZW5ndGggIT0gbWVtYmVycy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkTm9kZXMubGVuZ3RoKS5zb21lKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiRmllbGREZWNsYXJhdGlvblwiKSB8fFxuICAgIG1lbWJlcnNbZmllbGROb2Rlcy5sZW5ndGhdICE9IGNvbnN0cnVjdG9yTm9kZXNbMF0gfHxcbiAgICBtZW1iZXJzLnNsaWNlKGZpZWxkTm9kZXMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgZGVjbGFyYXRpb24uZmllbGRzID0gZmllbGROb2Rlcy5tYXAoKGZpZWxkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGZpZWxkTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBmaWVsZE1vZGlmaWVycyA9IGZpZWxkTm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgIGNvbnN0IG5hbWVzID0gZmllbGRNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oZmllbGRNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cbiAgICBjb25zdCB2YXJpYWJsZU5vZGVzID0gZmllbGROb2RlLmdldENoaWxkcmVuKFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpXG4gICAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZU5vZGVzWzBdXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHZhcmlhYmxlID8gdmFyaWFibGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpIDogbnVsbFxuXG4gICAgaWYgKG5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZVwiIHx8IHZhcmlhYmxlTm9kZXMubGVuZ3RoICE9IDEgfHwgIWRlZmluaXRpb24gfHxcbiAgICAgIHN0cnVjdHVyYWxDaGlsZHJlbih2YXJpYWJsZSkubGVuZ3RoICE9IDEgfHwgZmllbGROb2RlLmdldENoaWxkKFwiRGltZW5zaW9uXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9uY2Fub25pY2FsIHByaXZhdGUgaW5zdGFuY2UgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IG5vZGVUZXh0KGRlZmluaXRpb24sIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmZpZWxkOiR7aW5kZXh9YCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpdmF0ZUZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sIG5hbWUsXG4gICAgICB0eXBlOiBjb252ZXJ0VHlwZShkZWNsYXJhdGlvblR5cGUoZmllbGROb2RlKSwgYFByaXZhdGUgZmllbGQgJyR7bmFtZX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgbm9taW5hbE5hbWVzKX0sXG4gICAge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yTm9kZSA9IGNvbnN0cnVjdG9yTm9kZXNbMF1cbiAgY29uc3QgY29uc3RydWN0b3JTaWduYXR1cmUgPSBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUoY29uc3RydWN0b3JOb2RlLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCB0cnVlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yID0gd2l0aFBhcnNlclJhbmdlcyh7Ym9keTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKHt9KSxcbiAgICBpZDogYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogY29uc3RydWN0b3JTaWduYXR1cmUubG9jYXRpb24sIHBhcmFtZXRlcnM6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLnBhcmFtZXRlcnN9LCB7Y29uc3RydWN0b3I6IGNvbnN0cnVjdG9yU2lnbmF0dXJlLm5hbWVMb2NhdGlvbn0pXG4gIGNvbnN0IG1ldGhvZFNpZ25hdHVyZXMgPSBtZXRob2ROb2Rlcy5tYXAoKG1ldGhvZCkgPT5cbiAgICBjb252ZXJ0SmF2YUNsYXNzQ2FsbGFibGVTaWduYXR1cmUobWV0aG9kLCBkZWNsYXJhdGlvbiwgbm9taW5hbE5hbWVzLCBmYWxzZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgZGVjbGFyYXRpb24ubWV0aG9kcyA9IG1ldGhvZFNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoe30pLCBpZDogYCR7ZGVjbGFyYXRpb24uaWR9Om1ldGhvZDoke2luZGV4fWAsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTWV0aG9kRGVjbGFyYXRpb25cIiksIGxvY2F0aW9uOiBzaWduYXR1cmUubG9jYXRpb24sIG5hbWU6IHNpZ25hdHVyZS5uYW1lLFxuICAgIHBhcmFtZXRlcnM6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzLFxuICAgIHJldHVyblR5cGU6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9ICovIChzaWduYXR1cmUucmV0dXJuVHlwZSlcbiAgfSwge25hbWU6IHNpZ25hdHVyZS5uYW1lTG9jYXRpb259KSlcbiAgY29uc3QgYmFzZSA9IHtiaW5kaW5nczogbmV3IE1hcCgpLCBjbGFzc2VzLCBjdXJyZW50Q2xhc3M6IGRlY2xhcmF0aW9uLCBlcnJvck5hbWVzLCBlcmFzZWRCaW5kaW5nTmFtZXM6IG5ldyBTZXQoKSwgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucywgcmVjb3JkTmFtZXM6IG5vbWluYWxOYW1lcywgcmVjb3Jkc31cbiAgY29uc3QgY29uc3RydWN0b3JCb2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3Rvck5vZGUsIFwiQ29uc3RydWN0b3JCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSA9IGNvbnZlcnRCbG9jayhjb25zdHJ1Y3RvckJvZHksIGZpbGVuYW1lLCBzb3VyY2UsXG4gICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IFtwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLnR5cGVdKSksXG4gICAgICByZXR1cm5UeXBlOiB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiVHlwZVJlZmVyZW5jZVwiKSwgbmFtZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidm9pZFwiKX19KVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWV0aG9kTm9kZXMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgbWV0aG9kID0gZGVjbGFyYXRpb24ubWV0aG9kc1tpbmRleF1cblxuICAgIG1ldGhvZC5ib2R5ID0gY29udmVydEJsb2NrKHJlcXVpcmVkQ2hpbGQobWV0aG9kTm9kZXNbaW5kZXhdLCBcIkJsb2NrXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBmaWxlbmFtZSwgc291cmNlLFxuICAgICAgey4uLmJhc2UsIGJpbmRpbmdzOiBuZXcgTWFwKG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci50eXBlXSkpLCByZXR1cm5UeXBlOiBtZXRob2QucmV0dXJuVHlwZX0pXG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBjb252ZW50aW9uYWwgZmluYWwgSmF2YSBjbGFzcyB3aXRoIGV4YWN0IHByaXZhdGUtZmluYWwgc3RvcmFnZSxcbiAqIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLCBhbmQgY2Fub25pY2FsIGZpZWxkLW5hbWUgYWNjZXNzb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBDbGFzcyBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gUHJlZGVjbGFyZWQgbm9taW5hbCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fSByZWNvcmROYW1lcyAtIFJlY29yZHMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJvZ3JhbVJlY29yZF0gLSBXaGV0aGVyIHRoZSBjYW5vbmljYWwgcHJvamVjdCBwcm9maWxlIGFkbWl0cyBwdWJsaWMgb3IgcGFja2FnZS1wcml2YXRlIGNsYXNzIHZpc2liaWxpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IFNlbWFudGljIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEphdmFSZWNvcmQobm9kZSwgZGVjbGFyYXRpb24sIHJlY29yZE5hbWVzLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtUmVjb3JkID0gZmFsc2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZVBhcmFtZXRlck5hbWVzID0gbmV3IE1hcCgoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLm1hcCgocGFyYW1ldGVyKSA9PiBbcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlcl0pKVxuICBjb25zdCBtb2RpZmllcnMgPSBub2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgY29uc3QgbW9kaWZpZXJzVGV4dCA9IG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIilcblxuICBpZiAoKHByb2dyYW1SZWNvcmQgPyAhW1wicHVibGljIGZpbmFsXCIsIFwiZmluYWxcIl0uaW5jbHVkZXMobW9kaWZpZXJzVGV4dCkgOiBtb2RpZmllcnNUZXh0ICE9IFwiZmluYWxcIikgfHxcbiAgICBub2RlLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKSB8fCBub2RlLmdldENoaWxkKFwiU3VwZXJJbnRlcmZhY2VzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY2xhc3MgbW9kaWZpZXJzXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGNsYXNzQm9keSA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IGZpZWxkcyA9IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiKVxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIubmFtZSA9PSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIilcbiAgY29uc3QgYWNjZXNzb3JzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bnN1cHBvcnRlZCA9IG1lbWJlcnMuZmluZCgobWVtYmVyKSA9PiAhW1wiRmllbGREZWNsYXJhdGlvblwiLCBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiwgXCJNZXRob2REZWNsYXJhdGlvblwiXS5pbmNsdWRlcyhtZW1iZXIubmFtZSkpXG5cbiAgaWYgKHVuc3VwcG9ydGVkIHx8IGNvbnN0cnVjdG9ycy5sZW5ndGggIT0gMSB8fCBhY2Nlc3NvcnMubGVuZ3RoICE9IGZpZWxkcy5sZW5ndGggfHxcbiAgICBtZW1iZXJzLnNsaWNlKDAsIGZpZWxkcy5sZW5ndGgpLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJGaWVsZERlY2xhcmF0aW9uXCIpIHx8IG1lbWJlcnNbZmllbGRzLmxlbmd0aF0gIT0gY29uc3RydWN0b3JzWzBdIHx8XG4gICAgbWVtYmVycy5zbGljZShmaWVsZHMubGVuZ3RoICsgMSkuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBjbGFzcyBtZW1iZXIgb3JkZXIgb3Igc2hhcGVcIiwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkID8/IG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGRlY2xhcmF0aW9uLmZpZWxkcyA9IGZpZWxkcy5tYXAoKGZpZWxkTm9kZSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBub2RlTG9jYXRpb24oZmllbGROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGZpZWxkTW9kaWZpZXJzID0gZmllbGROb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gICAgY29uc3QgbmFtZXMgPSBmaWVsZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihmaWVsZE1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICAgIGNvbnN0IHZhcmlhYmxlID0gcmVxdWlyZWRDaGlsZChmaWVsZE5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJlcXVpcmVkQ2hpbGQodmFyaWFibGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHZhcmlhYmxlQ2hpbGRyZW4gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4odmFyaWFibGUpXG5cbiAgICBpZiAobmFtZXMuam9pbihcIiBcIikgIT0gXCJwcml2YXRlIGZpbmFsXCIgfHwgdmFyaWFibGVDaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBmaWVsZE5vZGUuZ2V0Q2hpbGQoXCJEaW1lbnNpb25cIikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJyZWNvcmQgZmllbGQgb3V0c2lkZSBwcml2YXRlIGZpbmFsIHN0b3JhZ2UgcHJvZmlsZVwiLCBmaWVsZExvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHtcbiAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJlY29yZEZpZWxkXCIpLFxuICAgICAgbG9jYXRpb246IGZpZWxkTG9jYXRpb24sXG4gICAgICBuYW1lOiBub2RlVGV4dChkZWZpbml0aW9uLCBzb3VyY2UpLFxuICAgICAgdHlwZTogY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGZpZWxkTm9kZSksIGBSZWNvcmQgZmllbGQgJyR7bm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKX0nYCwgZmllbGRMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSxcbiAgICAgICAgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhmaWVsZCwge25hbWU6IG5vZGVMb2NhdGlvbihkZWZpbml0aW9uLCBmaWxlbmFtZSwgc291cmNlKX0pXG4gIH0pXG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JzWzBdXG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY29uc3RydWN0b3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnNOb2RlKVxuICBjb25zdCBib2R5ID0gcmVxdWlyZWRDaGlsZChjb25zdHJ1Y3RvciwgXCJDb25zdHJ1Y3RvckJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXNzaWdubWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYm9keSlcblxuICBjb25zdCBjb25zdHJ1Y3Rvck1vZGlmaWVycyA9IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNvbnN0cnVjdG9yTW9kaWZpZXJOYW1lcyA9IGNvbnN0cnVjdG9yTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNvbnN0cnVjdG9yTW9kaWZpZXJzKS5tYXAoKG1vZGlmaWVyKSA9PiBtb2RpZmllci5uYW1lKSA6IFtdXG5cbiAgaWYgKG5vZGVUZXh0KGNvbnN0cnVjdG9yTmFtZSwgc291cmNlKSAhPSBkZWNsYXJhdGlvbi5uYW1lIHx8XG4gICAgY29uc3RydWN0b3JNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IChwcm9ncmFtUmVjb3JkID8gXCJwdWJsaWNcIiA6IFwiXCIpIHx8IGNvbnN0cnVjdG9yLmdldENoaWxkKFwiVGhyb3dzXCIpIHx8XG4gICAgY29uc3RydWN0b3IuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoIHx8IGFzc2lnbm1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgY29uc3RydWN0b3JcIiwgbm9kZUxvY2F0aW9uKGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2luZGV4XVxuICAgIGNvbnN0IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlcj8uZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gICAgY29uc3QgYXNzaWdubWVudCA9IGFzc2lnbm1lbnRzW2luZGV4XVxuICAgIGNvbnN0IGFzc2lnbm1lbnRFeHByZXNzaW9uID0gYXNzaWdubWVudD8uZ2V0Q2hpbGQoXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiKVxuICAgIGNvbnN0IGFzc2lnbm1lbnRDaGlsZHJlbiA9IGFzc2lnbm1lbnRFeHByZXNzaW9uID8gc3RydWN0dXJhbENoaWxkcmVuKGFzc2lnbm1lbnRFeHByZXNzaW9uKSA6IFtdXG4gICAgY29uc3QgZmllbGRBY2Nlc3MgPSBhc3NpZ25tZW50Q2hpbGRyZW5bMF1cbiAgICBjb25zdCBvcGVyYXRvciA9IGFzc2lnbm1lbnRDaGlsZHJlblsxXVxuICAgIGNvbnN0IHZhbHVlID0gYXNzaWdubWVudENoaWxkcmVuWzJdXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IHBhcmFtZXRlciA/IGNvbnZlcnRUeXBlKGRlY2xhcmF0aW9uVHlwZShwYXJhbWV0ZXIpLCBgUmVjb3JkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKHBhcmFtZXRlciwgZmlsZW5hbWUsIHNvdXJjZSksIGZpbGVuYW1lLCBzb3VyY2UsIHJlY29yZE5hbWVzLCB0eXBlUGFyYW1ldGVyTmFtZXMpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAocGFyYW1ldGVyPy5uYW1lICE9IFwiRm9ybWFsUGFyYW1ldGVyXCIgfHwgIXBhcmFtZXRlck5hbWUgfHwgbm9kZVRleHQocGFyYW1ldGVyTmFtZSwgc291cmNlKSAhPSBmaWVsZC5uYW1lIHx8XG4gICAgICBwYXJhbWV0ZXIuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIikgfHwgcGFyYW1ldGVyLmdldENoaWxkKFwiRGltZW5zaW9uXCIpIHx8ICFwYXJhbWV0ZXJUeXBlIHx8ICFzYW1lVmFsdWVUeXBlKHBhcmFtZXRlclR5cGUsIGZpZWxkLnR5cGUpIHx8XG4gICAgICBhc3NpZ25tZW50Py5uYW1lICE9IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IGFzc2lnbm1lbnRDaGlsZHJlbi5sZW5ndGggIT0gMyB8fCBmaWVsZEFjY2Vzcz8ubmFtZSAhPSBcIkZpZWxkQWNjZXNzXCIgfHxcbiAgICAgIG5vZGVUZXh0KGZpZWxkQWNjZXNzLCBzb3VyY2UpICE9IGB0aGlzLiR7ZmllbGQubmFtZX1gIHx8IG9wZXJhdG9yPy5uYW1lICE9IFwiQXNzaWduT3BcIiB8fCBub2RlVGV4dChvcGVyYXRvciwgc291cmNlKSAhPSBcIj1cIiB8fFxuICAgICAgdmFsdWU/Lm5hbWUgIT0gXCJJZGVudGlmaWVyXCIgfHwgbm9kZVRleHQodmFsdWUsIHNvdXJjZSkgIT0gZmllbGQubmFtZSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInJlY29yZCBmaWVsZCBub3QgaW5pdGlhbGl6ZWQgZXhhY3RseSBvbmNlXCIsIG5vZGVMb2NhdGlvbihhc3NpZ25tZW50ID8/IGNvbnN0cnVjdG9yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tpbmRleF1cbiAgICBjb25zdCBhY2Nlc3NvciA9IGFjY2Vzc29yc1tpbmRleF1cbiAgICBjb25zdCBuYW1lID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkQ2hpbGQoYWNjZXNzb3IsIFwiRm9ybWFsUGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGJsb2NrID0gcmVxdWlyZWRDaGlsZChhY2Nlc3NvciwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYmxvY2spXG4gICAgY29uc3QgcmV0dXJuZWQgPSBzdGF0ZW1lbnRzWzBdPy5nZXRDaGlsZChcIkZpZWxkQWNjZXNzXCIpXG4gICAgY29uc3QgYWNjZXNzb3JUeXBlID0gY29udmVydFR5cGUoZGVjbGFyYXRpb25UeXBlKGFjY2Vzc29yKSwgYFJlY29yZCBhY2Nlc3NvciAnJHtmaWVsZC5uYW1lfSdgLFxuICAgICAgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHR5cGVQYXJhbWV0ZXJOYW1lcylcblxuICAgIGNvbnN0IGFjY2Vzc29yTW9kaWZpZXJzID0gYWNjZXNzb3IuZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgICBjb25zdCBhY2Nlc3Nvck1vZGlmaWVyTmFtZXMgPSBhY2Nlc3Nvck1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihhY2Nlc3Nvck1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuXG4gICAgaWYgKGFjY2Vzc29yTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSAocHJvZ3JhbVJlY29yZCA/IFwicHVibGljXCIgOiBcIlwiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlRocm93c1wiKSB8fCBhY2Nlc3Nvci5nZXRDaGlsZChcIlR5cGVQYXJhbWV0ZXJzXCIpIHx8XG4gICAgICBub2RlVGV4dChuYW1lLCBzb3VyY2UpICE9IGZpZWxkLm5hbWUgfHwgc3RydWN0dXJhbENoaWxkcmVuKHBhcmFtZXRlcnMpLmxlbmd0aCAhPSAwIHx8IHN0YXRlbWVudHMubGVuZ3RoICE9IDEgfHxcbiAgICAgIHN0YXRlbWVudHNbMF0ubmFtZSAhPSBcIlJldHVyblN0YXRlbWVudFwiIHx8ICFyZXR1cm5lZCB8fCBub2RlVGV4dChyZXR1cm5lZCwgc291cmNlKSAhPSBgdGhpcy4ke2ZpZWxkLm5hbWV9YCB8fFxuICAgICAgIXNhbWVWYWx1ZVR5cGUoYWNjZXNzb3JUeXBlLCBmaWVsZC50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm5vbmNhbm9uaWNhbCByZWNvcmQgYWNjZXNzb3JcIiwgbm9kZUxvY2F0aW9uKGFjY2Vzc29yLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyhkZWNsYXJhdGlvbiwge25hbWU6IG5vZGVMb2NhdGlvbihyZXF1aXJlZENoaWxkKG5vZGUsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIERldGVjdHMgb25seSB0aGUgcGlubmVkIGdyYW1tYXIncyBwYXJzZXItYmFja2VkIHJlY292ZXJ5IHNoYXBlIGZvciBKYXZhIHJlY29yZCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gcm9vdCAtIFByb2dyYW0gcm9vdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlIHwgdW5kZWZpbmVkfSBUaGUgcGFyc2VyLW93bmVkIGByZWNvcmRgIHR5cGUgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHJvb3QsIHNvdXJjZSkge1xuICBjb25zdCBmaXJzdCA9IHN0cnVjdHVyYWxDaGlsZHJlbihyb290KVswXVxuICBjb25zdCB0eXBlID0gZmlyc3Q/Lm5hbWUgPT0gXCJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25cIiA/IGZpcnN0LmdldENoaWxkKFwiVHlwZU5hbWVcIikgOiBudWxsXG5cbiAgcmV0dXJuIHR5cGUgJiYgbm9kZVRleHQodHlwZSwgc291cmNlKSA9PSBcInJlY29yZFwiID8gdHlwZSA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGlzdGluZyBleGFjdCBKYXZhIGlmL2Vsc2UgdGVybWluYWwgd2l0aCByZXN0cmljdGVkIGJyYW5jaCBwcmVmaXhlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBpZiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgYnJhbmNoLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSByZXF1aXJlZENoaWxkKG5vZGUsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uZGl0aW9uTm9kZXMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY29uZGl0aW9uQ29udGFpbmVyKVxuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25Ob2Rlcy5sZW5ndGggPT0gMSA/IGNvbmRpdGlvbk5vZGVzWzBdIDogdW5kZWZpbmVkXG4gIGNvbnN0IGRpcmVjdCA9IGRpcmVjdENoaWxkcmVuKG5vZGUpXG4gIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gZGlyZWN0LmZpbmRJbmRleCgoY2hpbGQpID0+IGNoaWxkLm5hbWUgPT0gY29uZGl0aW9uQ29udGFpbmVyLm5hbWUgJiZcbiAgICBjaGlsZC5mcm9tID09IGNvbmRpdGlvbkNvbnRhaW5lci5mcm9tICYmIGNoaWxkLnRvID09IGNvbmRpdGlvbkNvbnRhaW5lci50bylcbiAgY29uc3QgY29uc2VxdWVudE5vZGUgPSBkaXJlY3RbY29uZGl0aW9uSW5kZXggKyAxXVxuICBjb25zdCBhbHRlcm5hdGVOb2RlID0gZGlyZWN0LmF0KC0xKSA9PSBjb25zZXF1ZW50Tm9kZSA/IHVuZGVmaW5lZCA6IGRpcmVjdC5hdCgtMSlcblxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uc2VxdWVudE5vZGUgfHwgY29uc2VxdWVudE5vZGUubmFtZSAhPSBcIkJsb2NrXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiaWYgd2l0aG91dCBibG9jayBjb25zZXF1ZW50XCIsIGxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3Qgc2VtYW50aWNDb25kaXRpb24gPSBjb252ZXJ0RXhwcmVzc2lvbihjb25kaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpXG4gIGxldCBhbHRlcm5hdGVcbiAgY29uc3QgY29uc2VxdWVudENvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG4gIGNvbnN0IGFsdGVybmF0ZUNvbnRleHQgPSB7Li4uY29udGV4dCwgYmluZGluZ3M6IG5ldyBNYXAoY29udGV4dC5iaW5kaW5ncyksIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcyl9XG5cbiAgaWYgKGFsdGVybmF0ZU5vZGU/Lm5hbWUgPT0gXCJCbG9ja1wiKSB7XG4gICAgYWx0ZXJuYXRlID0gY29udmVydEJsb2NrKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXG4gIH0gZWxzZSBpZiAoYWx0ZXJuYXRlTm9kZT8ubmFtZSA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBhbHRlcm5hdGUgPSB7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSxcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKGFsdGVybmF0ZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGFsdGVybmF0ZUNvbnRleHQpXVxuICAgIH1cbiAgfSBlbHNlIGlmIChhbHRlcm5hdGVOb2RlICYmIGFsdGVybmF0ZU5vZGUubmFtZSAhPSBcImVsc2VcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgYGlmIGFsdGVybmF0ZSAke2FsdGVybmF0ZU5vZGUubmFtZX1gLCBub2RlTG9jYXRpb24oYWx0ZXJuYXRlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGUgPyB7YWx0ZXJuYXRlfSA6IHt9KSxcbiAgICBjb25kaXRpb246IHNlbWFudGljQ29uZGl0aW9uLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW50Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29uc2VxdWVudENvbnRleHQpLFxuICAgIGtpbmQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IGJsb2NrLWJvZGllZCBKYXZhIHByZS1jb25kaXRpb24gbG9vcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gSmF2YSBXaGlsZVN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge0phdmFDb252ZXJzaW9uQ29udGV4dH0gY29udGV4dCAtIFR5cGVkIGxleGljYWwgY29udmVyc2lvbiBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50fSBTZW1hbnRpYyBsb29wLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0V2hpbGUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkaXJlY3QgPSBkaXJlY3RDaGlsZHJlbihub2RlKVxuICBjb25zdCBjb25kaXRpb25Db250YWluZXIgPSBub2RlLmdldENoaWxkKFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgY29uc3QgYm9keSA9IG5vZGUuZ2V0Q2hpbGQoXCJCbG9ja1wiKVxuICBjb25zdCBjb25kaXRpb25Ob2RlcyA9IGNvbmRpdGlvbkNvbnRhaW5lciA/IHN0cnVjdHVyYWxDaGlsZHJlbihjb25kaXRpb25Db250YWluZXIpIDogW11cblxuICBpZiAoZGlyZWN0Lmxlbmd0aCAhPSAzIHx8IGRpcmVjdFswXS5uYW1lICE9IFwid2hpbGVcIiB8fCBkaXJlY3RbMV0ubmFtZSAhPSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIgfHxcbiAgICBkaXJlY3RbMl0ubmFtZSAhPSBcIkJsb2NrXCIgfHwgIWNvbmRpdGlvbkNvbnRhaW5lciB8fCAhYm9keSB8fCBjb25kaXRpb25Ob2Rlcy5sZW5ndGggIT0gMSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJ3aGlsZSB3aXRob3V0IGV4YWN0IGNvbmRpdGlvbiBhbmQgYmxvY2sgYm9keVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBib2R5Q29udGV4dCA9IHtcbiAgICAuLi5jb250ZXh0LFxuICAgIGJpbmRpbmdzOiBuZXcgTWFwKGNvbnRleHQuYmluZGluZ3MpLFxuICAgIGVyYXNlZEJpbmRpbmdOYW1lczogbmV3IFNldChjb250ZXh0LmVyYXNlZEJpbmRpbmdOYW1lcylcbiAgfVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgZmlsZW5hbWUsIHNvdXJjZSwgYm9keUNvbnRleHQpLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24oY29uZGl0aW9uTm9kZXNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIldoaWxlU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH0sIHtrZXl3b3JkOiBub2RlTG9jYXRpb24oZGlyZWN0WzBdLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgSmF2YSdzIHN1cHBvcnRlZCBtYWluIG1ldGhvZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWFpbiBtZXRob2QuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBKYXZhRnVuY3Rpb25TaWduYXR1cmU+fSBmdW5jdGlvbnMgLSBNb2R1bGUgZnVuY3Rpb24gc2lnbmF0dXJlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0UmVzb3VyY2VEZWNsYXJhdGlvbj59IHJlY29yZE5hbWVzIC0gTm9taW5hbCBkZWNsYXJhdGlvbnMgYnkgc291cmNlIG5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+fSBjbGFzc2VzIC0gUmVmZXJlbmNlIGNsYXNzZXMgYnkgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSBlcnJvck5hbWVzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IHNvdXJjZSBuYW1lLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uPn0gZXJyb3JzIC0gRXJyb3IgZGVjbGFyYXRpb25zIGJ5IGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVudHJ5UG9pbnR9IFNlbWFudGljIGVudHJ5IHBvaW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50cnlQb2ludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvbnMsIHJlY29yZE5hbWVzLCByZWNvcmRzLCBjbGFzc2VzLCBlcnJvck5hbWVzLCBlcnJvcnMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gbm9kZS5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gbm9kZS5nZXRDaGlsZChcIkZvcm1hbFBhcmFtZXRlcnNcIilcbiAgY29uc3QgZGVmaW5pdGlvbiA9IG5vZGUuZ2V0Q2hpbGQoXCJEZWZpbml0aW9uXCIpXG4gIGNvbnN0IHJldHVyblR5cGUgPSBub2RlLmdldENoaWxkKFwidm9pZFwiKVxuICBjb25zdCBtb2RpZmllck5hbWVzID0gbW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKG1vZGlmaWVycykubWFwKChtb2RpZmllcikgPT4gbW9kaWZpZXIubmFtZSkgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXJOb2RlcyA9IHBhcmFtZXRlcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocGFyYW1ldGVycykgOiBbXVxuICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJOb2Rlc1swXVxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkFycmF5VHlwZVwiKVxuICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyPy5nZXRDaGlsZChcIkRlZmluaXRpb25cIilcblxuICBpZiAobW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBzdGF0aWNcIiB8fCAhcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMSB8fFxuICAgIHBhcmFtZXRlcj8ubmFtZSAhPSBcIkZvcm1hbFBhcmFtZXRlclwiIHx8IG5vZGVUZXh0KHBhcmFtZXRlclR5cGUgPz8gbm9kZSwgc291cmNlKSAhPSBcIlN0cmluZ1tdXCIgfHxcbiAgICBub2RlVGV4dChwYXJhbWV0ZXJOYW1lID8/IG5vZGUsIHNvdXJjZSkgIT0gXCJhcmdzXCIgfHwgIWRlZmluaXRpb24gfHwgbm9kZVRleHQoZGVmaW5pdGlvbiwgc291cmNlKSAhPSBcIm1haW5cIiB8fCAhcmV0dXJuVHlwZSB8fFxuICAgIG5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSB8fCBub2RlLmdldENoaWxkKFwiVGhyb3dzXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBibG9jayA9IHJlcXVpcmVkQ2hpbGQobm9kZSwgXCJCbG9ja1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBib2R5ID0gY29udmVydEJsb2NrKGJsb2NrLCBmaWxlbmFtZSwgc291cmNlLCB7XG4gICAgYmluZGluZ3M6IG5ldyBNYXAoKSxcbiAgICBjbGFzc2VzLFxuICAgIGVycm9yTmFtZXMsXG4gICAgZXJhc2VkQmluZGluZ05hbWVzOiBuZXcgU2V0KCksXG4gICAgZXJyb3JzLFxuICAgIGZ1bmN0aW9ucyxcbiAgICByZWNvcmROYW1lcyxcbiAgICByZWNvcmRzLFxuICAgIHJldHVyblR5cGU6IHVuZGVmaW5lZFxuICB9KVxuXG4gIHJldHVybiB7Ym9keSwga2luZDogXCJFbnRyeVBvaW50XCIsIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBzdXBwb3J0ZWQgSmF2YSBwcmludCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZX0gc3RhdGVtZW50IC0gRXhwcmVzc2lvbiBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtKYXZhQ29udmVyc2lvbkNvbnRleHR9IGNvbnRleHQgLSBUeXBlZCBsZXhpY2FsIGNvbnZlcnNpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QcmludFN0YXRlbWVudH0gU2VtYW50aWMgcHJpbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24oc3RhdGVtZW50LCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGNvbnN0IHByaW50SW52b2NhdGlvbiA9IHN0YXRlbWVudC5nZXRDaGlsZChcIk1ldGhvZEludm9jYXRpb25cIilcblxuICBpZiAoIXByaW50SW52b2NhdGlvbikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gd2l0aG91dCBTeXN0ZW0ub3V0LnByaW50bG5cIiwgbG9jYXRpb24pXG5cbiAgY29uc3QgZmllbGRBY2Nlc3MgPSBwcmludEludm9jYXRpb24uZ2V0Q2hpbGQoXCJGaWVsZEFjY2Vzc1wiKVxuICBjb25zdCBtZXRob2ROYW1lID0gcHJpbnRJbnZvY2F0aW9uLmdldENoaWxkKFwiTWV0aG9kTmFtZVwiKVxuXG4gIGlmICghZmllbGRBY2Nlc3MgfHwgIW1ldGhvZE5hbWUgfHwgbm9kZVRleHQoZmllbGRBY2Nlc3MsIHNvdXJjZSkgIT0gXCJTeXN0ZW0ub3V0XCIgfHwgbm9kZVRleHQobWV0aG9kTmFtZSwgc291cmNlKSAhPSBcInByaW50bG5cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWluIHdpdGhvdXQgU3lzdGVtLm91dC5wcmludGxuXCIsIG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgYXJndW1lbnRMaXN0ID0gcmVxdWlyZWRDaGlsZChwcmludEludm9jYXRpb24sIFwiQXJndW1lbnRMaXN0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFyZ3VtZW50c18gPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oYXJndW1lbnRMaXN0KVxuXG4gIGlmIChhcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInByaW50bG4gd2l0aG91dCBvbmUgc3VwcG9ydGVkIGFyZ3VtZW50XCIsIG5vZGVMb2NhdGlvbihhcmd1bWVudExpc3QsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgcHJpbnRMb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihwcmludEludm9jYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlLCBjb250ZXh0KSwga2luZDogXCJQcmludFN0YXRlbWVudFwiLCBsb2NhdGlvbjogcHJpbnRMb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBQYXJzZXMgSmF2YSBpbnRvIHRoZSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2lucHV0LmNhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBbaW5wdXQucHJvZ3JhbV0gLSBSZXNvbHZlZCBwcm9ncmFtIGltcG9ydHMgYW5kIGVudHJ5IHJvbGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSmF2YSh7Y2FwYWJpbGl0aWVzID0gW10sIGZpbGVuYW1lLCBzb3VyY2UsIHByb2dyYW19KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zdCByZWNvcmRUb2tlbiA9IGphdmFSZWNvcmRSZWNvdmVyeVRva2VuKHRyZWUudG9wTm9kZSwgc291cmNlKVxuXG4gICAgaWYgKHJlY29yZFRva2VuKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiSmF2YSByZWNvcmQgZGVjbGFyYXRpb24gdW5kZXIgdGhlIHBpbm5lZCBwYXJzZXJcIiwgbm9kZUxvY2F0aW9uKHJlY29yZFRva2VuLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cblxuICBpZiAocHJvZ3JhbSkgcmV0dXJuIHBhcnNlSmF2YVByb2dyYW1Nb2R1bGUodHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpXG5cbiAgY29uc3QgcHJvZ3JhbU1lbWJlcnMgPSB0YXNrMDM0SmF2YVByb2dyYW1NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzRGVjbGFyYXRpb25zID0gcHJvZ3JhbU1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKVxuICBjb25zdCB1bmV4cGVjdGVkUHJvZ3JhbU1lbWJlciA9IHByb2dyYW1NZW1iZXJzLmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IG1haW5DbGFzc2VzID0gY2xhc3NEZWNsYXJhdGlvbnMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwiTWFpblwiKVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gbWFpbkNsYXNzZXNbMF1cblxuICBpZiAoIWNsYXNzRGVjbGFyYXRpb24gfHwgbWFpbkNsYXNzZXMubGVuZ3RoICE9IDEgfHwgdW5leHBlY3RlZFByb2dyYW1NZW1iZXIgfHwgY2xhc3NEZWNsYXJhdGlvbnMuYXQoLTEpICE9IGNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY29tcGlsYXRpb24gdW5pdCBvdGhlciB0aGFuIHJlY29yZCBjbGFzc2VzIGZvbGxvd2VkIGJ5IG9uZSBNYWluIGNsYXNzXCIsXG4gICAgICBub2RlTG9jYXRpb24odW5leHBlY3RlZFByb2dyYW1NZW1iZXIgPz8gdHJlZS50b3BOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc05hbWUgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc01vZGlmaWVycyA9IGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJNb2RpZmllcnNcIilcbiAgY29uc3QgY2xhc3NNb2RpZmllck5hbWVzID0gY2xhc3NNb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NNb2RpZmllcnMpLm1hcCgobW9kaWZpZXIpID0+IG1vZGlmaWVyLm5hbWUpIDogW11cblxuICBpZiAobm9kZVRleHQoY2xhc3NOYW1lLCBzb3VyY2UpICE9IFwiTWFpblwiIHx8IGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInB1YmxpYyBmaW5hbCBNYWluIGNsYXNzXCIsIG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSB0YXNrMDM0SmF2YU1haW5NZW1iZXJzKHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHVuc3VwcG9ydGVkTWVtYmVyID0gbWVtYmVycy5maW5kKChtZW1iZXIpID0+IG1lbWJlci5uYW1lICE9IFwiTWV0aG9kRGVjbGFyYXRpb25cIilcblxuICBpZiAodW5zdXBwb3J0ZWRNZW1iZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgdW5zdXBwb3J0ZWRNZW1iZXIubmFtZSwgbm9kZUxvY2F0aW9uKHVuc3VwcG9ydGVkTWVtYmVyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbWV0aG9kcyA9IG1lbWJlcnNcbiAgY29uc3QgbWFpbk1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1ldGhvZCwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IFwibWFpblwiKVxuICBjb25zdCBtYWluTWV0aG9kID0gbWFpbk1ldGhvZHNbMF1cbiAgY29uc3QgZnVuY3Rpb25NZXRob2RzID0gbWV0aG9kcy5maWx0ZXIoKG1ldGhvZCkgPT4gbWV0aG9kICE9IG1haW5NZXRob2QpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoZnVuY3Rpb25NZXRob2RzLmxlbmd0aCA9PSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwiY2xhc3Mgd2l0aG91dCBhIHNlbWFudGljIGZ1bmN0aW9uXCIsIGxvY2F0aW9uKVxuICBpZiAoIW1haW5NZXRob2QgfHwgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJjbGFzcyB3aXRob3V0IG9uZSB1bmFtYmlndW91cyBtYWluXCIsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IG5vbWluYWxOb2RlcyA9IGNsYXNzRGVjbGFyYXRpb25zLmZpbHRlcigoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uICE9IGNsYXNzRGVjbGFyYXRpb24pXG4gIGNvbnN0IGVycm9yTm9kZXMgPSBub21pbmFsTm9kZXMuZmlsdGVyKChkZWNsYXJhdGlvbikgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGRlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICAgIHJldHVybiBwYXJlbnQgJiYgbm9kZVRleHQocGFyZW50LCBzb3VyY2UpID09IFwiZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uXCJcbiAgfSlcbiAgY29uc3QgcmVmZXJlbmNlQ2xhc3NOb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiZcbiAgICBzdHJ1Y3R1cmFsQ2hpbGRyZW4ocmVxdWlyZWRDaGlsZChkZWNsYXJhdGlvbiwgXCJDbGFzc0JvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSkpLnNvbWUoKG1lbWJlcikgPT5cbiAgICAgIG1lbWJlci5uYW1lID09IFwiRmllbGREZWNsYXJhdGlvblwiICYmIG5vZGVUZXh0KG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKSA/PyBtZW1iZXIsIHNvdXJjZSkgPT0gXCJwcml2YXRlXCIpKVxuICBjb25zdCByZWNvcmROb2RlcyA9IG5vbWluYWxOb2Rlcy5maWx0ZXIoKGRlY2xhcmF0aW9uKSA9PiAhZXJyb3JOb2Rlcy5pbmNsdWRlcyhkZWNsYXJhdGlvbikgJiYgIXJlZmVyZW5jZUNsYXNzTm9kZXMuaW5jbHVkZXMoZGVjbGFyYXRpb24pKVxuICBjb25zdCBlcnJvckRlY2xhcmF0aW9ucyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiAoe1xuICAgIGlkOiBgZXJyb3I6JHtpbmRleH1gLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVycm9yRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihlcnJvck5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoZXJyb3JOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IHJlY29yZE5vZGVzLm1hcCgocmVjb3JkTm9kZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpZCA9IGByZWNvcmQ6JHtpbmRleH1gXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKHJlY29yZE5vZGUuZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgaWQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIGlkLFxuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKHJlY29yZE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbmFtZTogbm9kZVRleHQocmVxdWlyZWRDaGlsZChyZWNvcmROb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSksXG4gICAgICAuLi4odHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnN9IDoge30pXG4gICAgfVxuICB9KVxuICBjb25zdCByZWZlcmVuY2VEZWNsYXJhdGlvbnMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gKHtcbiAgICBjb25zdHJ1Y3RvcjogLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9ufSAqLyAoe30pLCBmaWVsZHM6IFtdLCBpZDogYGNsYXNzOiR7aW5kZXh9YCxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDbGFzc0RlY2xhcmF0aW9uXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG1ldGhvZHM6IFtdLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSlcbiAgfSkpXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi8gKFxuICAgIG5ldyBNYXAocmVjb3JkRGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyYXRpb25dKSkpKVxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7cmVzb3VyY2VzfSkgPT4gcmVzb3VyY2VzKSkgcmVjb3JkTmFtZXMuc2V0KHJlc291cmNlLm5hbWUsIHJlc291cmNlKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlZmVyZW5jZURlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+fSAqL1xuICBjb25zdCBlcnJvck5hbWVzID0gbmV3IE1hcChlcnJvckRlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiAvKiogQHR5cGUge2NvbnN0fSAqLyAoW2RlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uXSkpKVxuICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgIGVycm9yTmFtZXMuc2V0KGZhaWx1cmUubmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpKVxuICB9XG4gIGNvbnN0IGVycm9yc0J5SWQgPSBuZXcgTWFwKFsuLi5lcnJvck5hbWVzLnZhbHVlcygpXS5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGVycm9ycyA9IGVycm9yTm9kZXMubWFwKChlcnJvck5vZGUsIGluZGV4KSA9PiBjb252ZXJ0SmF2YUVycm9yKGVycm9yTm9kZSwgZXJyb3JEZWNsYXJhdGlvbnNbaW5kZXhdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PiBbLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uXSkpXG4gIGNvbnN0IGNsYXNzZXNCeUlkID0gbmV3IE1hcChyZWZlcmVuY2VEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbl0pKVxuICBjb25zdCByZWNvcmRzID0gcmVjb3JkTm9kZXMubWFwKChyZWNvcmROb2RlLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0SmF2YVJlY29yZChyZWNvcmROb2RlLCByZWNvcmREZWNsYXJhdGlvbnNbaW5kZXhdLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIGZhbHNlLCBgZnVuY3Rpb246JHtpbmRleH1gLCByZWZlcmVuY2VEZWNsYXJhdGlvbnMubGVuZ3RoID4gMCkpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgSmF2YUZ1bmN0aW9uU2lnbmF0dXJlPn0gKi9cbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChjYXBhYmlsaXR5RnVuY3Rpb25TaWduYXR1cmVzKGNhcGFiaWxpdGllcywgbG9jYXRpb24pKVxuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiBzaWduYXR1cmVzKSBmdW5jdGlvblNpZ25hdHVyZXMuc2V0KHNpZ25hdHVyZS5uYW1lLCBzaWduYXR1cmUpXG4gIGNvbnN0IGNsYXNzZXMgPSByZWZlcmVuY2VDbGFzc05vZGVzLm1hcCgoY2xhc3NOb2RlLCBpbmRleCkgPT4gY29udmVydEphdmFSZWZlcmVuY2VDbGFzcyhjbGFzc05vZGUsIHJlZmVyZW5jZURlY2xhcmF0aW9uc1tpbmRleF0sXG4gICAgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCwgZnVuY3Rpb25TaWduYXR1cmVzLCBlcnJvck5hbWVzLCBlcnJvcnNCeUlkLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBjb252ZXJ0RW50cnlQb2ludChtYWluTWV0aG9kLCBmaWxlbmFtZSwgc291cmNlLCBmdW5jdGlvblNpZ25hdHVyZXMsIHJlY29yZE5hbWVzLCByZWNvcmRzQnlJZCxcbiAgICBjbGFzc2VzQnlJZCwgZXJyb3JOYW1lcywgZXJyb3JzQnlJZClcblxuICByZXR1cm4ge2VudHJ5UG9pbnQsIGZ1bmN0aW9ucywga2luZDogXCJNb2R1bGVcIiwgbG9jYXRpb24sIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihjbGFzc2VzLmxlbmd0aCA+IDAgPyB7Y2xhc3Nlc30gOiB7fSksIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSl9XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIHRvcC1sZXZlbCBzdXBwb3J0IGVtaXR0ZWQgZm9yIHRoZSBidWlsdC1pbiBwcm9iZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IG1lbWJlcnMgLSBQYXJzZWQgcHJvZ3JhbSBtZW1iZXJzLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIkBsZXplci9jb21tb25cIikuU3ludGF4Tm9kZVtdfSBQb3J0YWJsZSBwcm9ncmFtIG1lbWJlcnMuXG4gKi9cbmZ1bmN0aW9uIHRhc2swMzRKYXZhUHJvZ3JhbU1lbWJlcnMobWVtYmVycywgY2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGlmICghaXNUYXNrMDM0UmVzb3VyY2VQcm9iZShjYXBhYmlsaXRpZXMpIHx8IG5vZGVUZXh0KG1lbWJlcnNbMF0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnRcIikgcmV0dXJuIG1lbWJlcnNcbiAgaWYgKCFoYXNFeGFjdEVmZmVjdFN1cHBvcnQoc291cmNlLCBcImphdmFcIiwgXCJ0b3BcIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibWFsZm9ybWVkIHByb3RlY3RlZCBUYXNrIDAzNCB0b3AtbGV2ZWwgc3VwcG9ydFwiLCBub2RlTG9jYXRpb24obWVtYmVyc1swXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbmFtZXMgPSBbXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcIiwgXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIsIFwiUHJvYmVSZWFkRmFpbHVyZVwiLCBcIlByb2JlQ2xvc2VGYWlsdXJlXCIsXG4gICAgXCJQcm9iZVJlc291cmNlQ2xvc2VkXCIsIFwiUHJvYmVSZXNvdXJjZVwiXVxuICBjb25zdCBtYXRjaGVzID0gbmFtZXMuZXZlcnkoKG5hbWUsIGluZGV4KSA9PiBtZW1iZXJzW2luZGV4ICsgMV0/Lm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgJiZcbiAgICBub2RlVGV4dChyZXF1aXJlZENoaWxkKG1lbWJlcnNbaW5kZXggKyAxXSwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpID09IG5hbWUpXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbbmFtZXMubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtdG9wLWVuZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1hbGZvcm1lZCBwcm90ZWN0ZWQgVGFzayAwMzQgdG9wLWxldmVsIHN1cHBvcnRcIiwgbm9kZUxvY2F0aW9uKG1lbWJlcnNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBtZW1iZXJzLnNsaWNlKG5hbWVzLmxlbmd0aCArIDIpXG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZXhhY3QgcHJvdGVjdGVkIE1haW4tbWVtYmVyIHN1cHBvcnQgZW1pdHRlZCBmb3IgdGhlIGJ1aWx0LWluIHByb2JlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGVbXX0gbWVtYmVycyAtIFBhcnNlZCBNYWluIG1lbWJlcnMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSBjYXBhYmlsaXRpZXMgLSBBdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGxlemVyL2NvbW1vblwiKS5TeW50YXhOb2RlW119IFBvcnRhYmxlIE1haW4gbWVtYmVycy5cbiAqL1xuZnVuY3Rpb24gdGFzazAzNEphdmFNYWluTWVtYmVycyhtZW1iZXJzLCBjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKCFpc1Rhc2swMzRSZXNvdXJjZVByb2JlKGNhcGFiaWxpdGllcykgfHwgbm9kZVRleHQobWVtYmVyc1swXSwgc291cmNlKSAhPSBcIi8vIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1tZW1iZXJzXCIpIHJldHVybiBtZW1iZXJzXG4gIGlmICghaGFzRXhhY3RFZmZlY3RTdXBwb3J0KHNvdXJjZSwgXCJqYXZhXCIsIFwibWVtYmVyc1wiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9IFtcbiAgICBbXCJGaWVsZERlY2xhcmF0aW9uXCIsIFwiX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUVmZmVjdFwiXSxcbiAgICBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlQWNxdWlyZVwiXSwgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZVJlYWRcIl0sXG4gICAgW1wiTWV0aG9kRGVjbGFyYXRpb25cIiwgXCJwcm9iZUNsb3NlXCJdLCBbXCJNZXRob2REZWNsYXJhdGlvblwiLCBcInByb2JlVHJhY2VcIl1cbiAgXVxuICBjb25zdCBtYXRjaGVzID0gZXhwZWN0ZWQuZXZlcnkoKFtraW5kLCBuYW1lXSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBtZW1iZXIgPSBtZW1iZXJzW2luZGV4ICsgMV1cbiAgICBpZiAobWVtYmVyPy5uYW1lICE9IGtpbmQpIHJldHVybiBmYWxzZVxuICAgIGlmIChraW5kID09IFwiRmllbGREZWNsYXJhdGlvblwiKSByZXR1cm4gbm9kZVRleHQobWVtYmVyLCBzb3VyY2UpLmluY2x1ZGVzKGAgJHtuYW1lfSA9YClcbiAgICByZXR1cm4gbm9kZVRleHQocmVxdWlyZWRDaGlsZChtZW1iZXIsIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSA9PSBuYW1lXG4gIH0pXG5cbiAgaWYgKCFtYXRjaGVzIHx8IG5vZGVUZXh0KG1lbWJlcnNbZXhwZWN0ZWQubGVuZ3RoICsgMV0sIHNvdXJjZSkgIT0gXCIvLyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtbWVtYmVycy1lbmRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJtYWxmb3JtZWQgcHJvdGVjdGVkIFRhc2sgMDM0IG1lbWJlciBzdXBwb3J0XCIsIG5vZGVMb2NhdGlvbihtZW1iZXJzWzBdLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbWVtYmVycy5zbGljZShleHBlY3RlZC5sZW5ndGggKyAyKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBhbHJlYWR5LXF1YWxpZmllZCBjYW5vbmljYWwgSmF2YSBjb21waWxhdGlvbiB1bml0LlxuICogQHBhcmFtIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9IHJvb3QgLSBFcnJvci1mcmVlIFByb2dyYW0gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgZXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj59fSBwcm9ncmFtIC0gUmVzb2x2ZWQgcHJvZ3JhbSBpbXBvcnRzIGFuZCBlbnRyeSByb2xlLlxuICogQHBhcmFtIHtyZWFkb25seSBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gY2FwYWJpbGl0aWVzIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VKYXZhUHJvZ3JhbU1vZHVsZShyb290LCBmaWxlbmFtZSwgc291cmNlLCBwcm9ncmFtLCBjYXBhYmlsaXRpZXMpIHtcbiAgaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KVxuICBjb25zdCBjbGFzc0RlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAbGV6ZXIvY29tbW9uXCIpLlN5bnRheE5vZGV9ICovIChzdHJ1Y3R1cmFsQ2hpbGRyZW4ocm9vdCkuZmluZCgobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSlcbiAgY29uc3QgY2xhc3NNb2RpZmllcnMgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJOYW1lcyA9IGNsYXNzTW9kaWZpZXJzID8gc3RydWN0dXJhbENoaWxkcmVuKGNsYXNzTW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG1lbWJlcnMgPSBzdHJ1Y3R1cmFsQ2hpbGRyZW4oY2xhc3NCb2R5KVxuICBjb25zdCBtYWluTWV0aG9kcyA9IG1lbWJlcnMuZmlsdGVyKChtZXRob2QpID0+IG1ldGhvZC5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJlxuICAgIG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQobWV0aG9kLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSksIHNvdXJjZSkgPT0gXCJtYWluXCIpXG4gIGNvbnN0IHN1cGVyY2xhc3MgPSBjbGFzc0RlY2xhcmF0aW9uLmdldENoaWxkKFwiU3VwZXJjbGFzc1wiKVxuICBjb25zdCBpc0Vycm9yID0gQm9vbGVhbihzdXBlcmNsYXNzICYmIG5vZGVUZXh0KHN1cGVyY2xhc3MsIHNvdXJjZSkgPT0gXCJleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb25cIilcbiAgY29uc3QgaXNSZWNvcmQgPSAhaXNFcnJvciAmJiBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAocHJvZ3JhbS5pc0VudHJ5ICYmIGNsYXNzTW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSAhPSBcInB1YmxpYyBmaW5hbFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcInNlbGVjdGVkIGVudHJ5IGNsYXNzIHdpdGhvdXQgcHVibGljIGZpbmFsIHZpc2liaWxpdHlcIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGlmIChwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImphdmFcIiwgXCJzZWxlY3RlZCBlbnRyeSBjbGFzcyB3aXRob3V0IG9uZSBtYWluIG1ldGhvZFwiLCBsb2NhdGlvbilcbiAgaWYgKCFwcm9ncmFtLmlzRW50cnkgJiYgbWFpbk1ldGhvZHMubGVuZ3RoID4gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiamF2YVwiLCBcIm1haW4gbWV0aG9kIG91dHNpZGUgdGhlIHNlbGVjdGVkIGVudHJ5IG1vZHVsZVwiLCBub2RlTG9jYXRpb24obWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBpZiAoKGlzUmVjb3JkIHx8IGlzRXJyb3IpICYmIG1haW5NZXRob2RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwibm9taW5hbCBjbGFzcyBjb250YWluaW5nIG1haW5cIiwgbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG5cbiAgY29uc3QgZXJyb3JEZWNsYXJhdGlvbnMgPSBpc0Vycm9yID8gW3tcbiAgICBpZDogXCJlcnJvcjowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXJyb3JEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzRGVjbGFyYXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIG5hbWU6IG5vZGVUZXh0KHJlcXVpcmVkQ2hpbGQoY2xhc3NEZWNsYXJhdGlvbiwgXCJEZWZpbml0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpLCBzb3VyY2UpXG4gIH1dIDogW11cblxuICBjb25zdCByZWNvcmRUeXBlUGFyYW1ldGVycyA9IGlzUmVjb3JkXG4gICAgPyBjb252ZXJ0SmF2YVR5cGVQYXJhbWV0ZXJzKGNsYXNzRGVjbGFyYXRpb24uZ2V0Q2hpbGQoXCJUeXBlUGFyYW1ldGVyc1wiKSwgXCJyZWNvcmQ6MFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHJlY29yZERlY2xhcmF0aW9ucyA9IGlzUmVjb3JkID8gW3tcbiAgICBmaWVsZHM6IFtdLFxuICAgIGlkOiBcInJlY29yZDowXCIsXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmVjb3JkRGVjbGFyYXRpb25cIiksXG4gICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihjbGFzc0RlY2xhcmF0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBuYW1lOiBub2RlVGV4dChyZXF1aXJlZENoaWxkKGNsYXNzRGVjbGFyYXRpb24sIFwiRGVmaW5pdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKSwgc291cmNlKSxcbiAgICAuLi4ocmVjb3JkVHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IHJlY29yZFR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSA6IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uPn0gKi9cbiAgY29uc3QgcmVjb3JkTmFtZXMgPSBuZXcgTWFwKHByb2dyYW0ucmVjb3JkcylcbiAgY29uc3QgZXJyb3JOYW1lcyA9IG5ldyBNYXAocHJvZ3JhbS5lcnJvcnMgPz8gW10pXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBjYXBhYmlsaXRpZXMuZmxhdE1hcCgoe3Jlc291cmNlc30pID0+IHJlc291cmNlcykpIHJlY29yZE5hbWVzLnNldChyZXNvdXJjZS5uYW1lLCByZXNvdXJjZSlcbiAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICBlcnJvck5hbWVzLnNldChmYWlsdXJlLm5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGZhaWx1cmUpKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJlY29yZERlY2xhcmF0aW9ucykgcmVjb3JkTmFtZXMuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGVycm9yRGVjbGFyYXRpb25zKSBlcnJvck5hbWVzLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbilcbiAgY29uc3QgZXJyb3JzQnlJZCA9IG5ldyBNYXAoWy4uLmVycm9yTmFtZXMudmFsdWVzKCldLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgZXJyb3JzID0gZXJyb3JEZWNsYXJhdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gY29udmVydEphdmFFcnJvcihjbGFzc0RlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IHJlY29yZHNCeUlkID0gbmV3IE1hcChbLi4ucHJvZ3JhbS5yZWNvcmRzLnZhbHVlcygpLCAuLi5yZWNvcmREZWNsYXJhdGlvbnNdXG4gICAgLm1hcCgoZGVjbGFyYXRpb24pID0+IFsvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgZGVjbGFyYXRpb25dKSlcbiAgY29uc3QgY2xhc3Nlc0J5SWQgPSBuZXcgTWFwKClcbiAgY29uc3QgcmVjb3JkcyA9IHJlY29yZERlY2xhcmF0aW9ucy5tYXAoKGRlY2xhcmF0aW9uKSA9PlxuICAgIGNvbnZlcnRKYXZhUmVjb3JkKGNsYXNzRGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLFxuICAgICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj59ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChyZWNvcmROYW1lcykpLFxuICAgICAgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSkpXG4gIGNvbnN0IGZ1bmN0aW9uTWV0aG9kcyA9IGlzUmVjb3JkIHx8IGlzRXJyb3IgPyBbXSA6IG1lbWJlcnMuZmlsdGVyKChtZW1iZXIpID0+IG1lbWJlci5uYW1lID09IFwiTWV0aG9kRGVjbGFyYXRpb25cIiAmJiAhbWFpbk1ldGhvZHMuaW5jbHVkZXMobWVtYmVyKSlcbiAgY29uc3Qgc2lnbmF0dXJlcyA9IGZ1bmN0aW9uTWV0aG9kcy5tYXAoKG1ldGhvZCwgaW5kZXgpID0+XG4gICAgY29udmVydEZ1bmN0aW9uU2lnbmF0dXJlKG1ldGhvZCwgZmlsZW5hbWUsIHNvdXJjZSwgcmVjb3JkTmFtZXMsIHRydWUsIGBmdW5jdGlvbjoke2luZGV4fWApKVxuICAvKiogQHR5cGUge1tzdHJpbmcsIEphdmFGdW5jdGlvblNpZ25hdHVyZV1bXX0gKi9cbiAgY29uc3QgaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXMgPSBbLi4ucHJvZ3JhbS5mdW5jdGlvbnNdLm1hcCgoW2xvY2FsTmFtZSwgZGVjbGFyYXRpb25dKSA9PiBbbG9jYWxOYW1lLCB7XG4gICAgbG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICBuYW1lTG9jYXRpb246IGRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSxcbiAgICAuLi4oZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPyB7dHlwZVBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzfSA6IHt9KVxuICB9XSlcbiAgY29uc3QgZnVuY3Rpb25TaWduYXR1cmVzID0gbmV3IE1hcChbLi4uY2FwYWJpbGl0eUZ1bmN0aW9uU2lnbmF0dXJlcyhjYXBhYmlsaXRpZXMsIGxvY2F0aW9uKSwgLi4uaW1wb3J0ZWRGdW5jdGlvblNpZ25hdHVyZXNdKVxuXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIHNpZ25hdHVyZXMpIGZ1bmN0aW9uU2lnbmF0dXJlcy5zZXQoc2lnbmF0dXJlLm5hbWUsIHNpZ25hdHVyZSlcbiAgY29uc3QgZnVuY3Rpb25zID0gZnVuY3Rpb25NZXRob2RzLm1hcCgobWV0aG9kLCBpbmRleCkgPT5cbiAgICBjb252ZXJ0RnVuY3Rpb24obWV0aG9kLCBzaWduYXR1cmVzW2luZGV4XSwgZnVuY3Rpb25TaWduYXR1cmVzLCByZWNvcmROYW1lcywgcmVjb3Jkc0J5SWQsIGNsYXNzZXNCeUlkLFxuICAgICAgZXJyb3JOYW1lcywgZXJyb3JzQnlJZCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGVtcHR5QmxvY2sgPSB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksIGxvY2F0aW9uLCBzdGF0ZW1lbnRzOiBbXX1cbiAgY29uc3QgZW50cnlQb2ludCA9IHByb2dyYW0uaXNFbnRyeVxuICAgID8gY29udmVydEVudHJ5UG9pbnQobWFpbk1ldGhvZHNbMF0sIGZpbGVuYW1lLCBzb3VyY2UsIGZ1bmN0aW9uU2lnbmF0dXJlcywgcmVjb3JkTmFtZXMsIHJlY29yZHNCeUlkLCBjbGFzc2VzQnlJZCxcbiAgICAgIGVycm9yTmFtZXMsIGVycm9yc0J5SWQpXG4gICAgOiB7Ym9keTogZW1wdHlCbG9jaywga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRW50cnlQb2ludFwiKSwgbG9jYXRpb259XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRyeVBvaW50LFxuICAgIGZ1bmN0aW9ucyxcbiAgICBraW5kOiBcIk1vZHVsZVwiLFxuICAgIGxvY2F0aW9uLFxuICAgIC4uLihlcnJvcnMubGVuZ3RoID4gMCA/IHtlcnJvcnN9IDoge30pLFxuICAgIC4uLihyZWNvcmRzLmxlbmd0aCA+IDAgPyB7cmVjb3Jkc30gOiB7fSlcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIGRpcmVjdCBwYWNrYWdlL2ltcG9ydC9jbGFzcyBub2RlcyBmcm9tIHRoZSBwaW5uZWQgTGV6ZXIgZ3JhbW1hci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt7aW1wb3J0czoge2ltcG9ydGVkTmFtZTogc3RyaW5nLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U6IHRydWUsIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCB0eXBlT25seTogZmFsc2V9W10sIGV4cG9ydHM6IHtleHBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgdHlwZU9ubHk6IGZhbHNlfVtdLCBuYXRpdmVOYW1lOiBzdHJpbmd9fSBQYXJzZXItb3duZWQgSmF2YSBtb2R1bGUgaGVhZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdEphdmFNb2R1bGUoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICBjb25zdCBlcnJvciA9IGRlc2NlbmRhbnRzKHRyZWUudG9wTm9kZSwgXCLimqBcIilbMF1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oZXJyb3IsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIHBhcnNlciByZXBvcnRlZCBpbnZhbGlkIHN5bnRheC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbih0cmVlLnRvcE5vZGUpXG4gIGNvbnN0IHBhY2thZ2VzID0gbWVtYmVycy5maWx0ZXIoKG5vZGUpID0+IG5vZGUubmFtZSA9PSBcIlBhY2thZ2VEZWNsYXJhdGlvblwiKVxuICBjb25zdCBpbXBvcnRzTm9kZXMgPSBtZW1iZXJzLmZpbHRlcigobm9kZSkgPT4gbm9kZS5uYW1lID09IFwiSW1wb3J0RGVjbGFyYXRpb25cIilcbiAgY29uc3QgY2xhc3NlcyA9IG1lbWJlcnMuZmlsdGVyKChub2RlKSA9PiBub2RlLm5hbWUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGludmFsaWQgPSBtZW1iZXJzLmZpbmQoKG5vZGUpID0+ICFbXCJQYWNrYWdlRGVjbGFyYXRpb25cIiwgXCJJbXBvcnREZWNsYXJhdGlvblwiLCBcIkNsYXNzRGVjbGFyYXRpb25cIl0uaW5jbHVkZXMobm9kZS5uYW1lKSlcbiAgY29uc3QgcGFja2FnZU5vZGUgPSBwYWNrYWdlc1swXVxuICBjb25zdCBjbGFzc05vZGUgPSBjbGFzc2VzWzBdXG5cbiAgaWYgKCFwYWNrYWdlTm9kZSB8fCBwYWNrYWdlcy5sZW5ndGggIT0gMSB8fCAhY2xhc3NOb2RlIHx8IGNsYXNzZXMubGVuZ3RoICE9IDEgfHwgaW52YWxpZCB8fFxuICAgIG1lbWJlcnMuaW5kZXhPZihwYWNrYWdlTm9kZSkgIT0gMCB8fCBtZW1iZXJzLmluZGV4T2YoY2xhc3NOb2RlKSAhPSBtZW1iZXJzLmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwib25lIHBhY2thZ2UgZm9sbG93ZWQgYnkgaW1wb3J0cyBhbmQgb25lIHB1YmxpYyBjbGFzc1wiLFxuICAgICAgbm9kZUxvY2F0aW9uKGludmFsaWQgPz8gcGFja2FnZXNbMV0gPz8gY2xhc3Nlc1sxXSA/PyB0cmVlLnRvcE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhY2thZ2VOYW1lTm9kZSA9IHBhY2thZ2VOb2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBwYWNrYWdlTm9kZS5nZXRDaGlsZChcIklkZW50aWZpZXJcIilcbiAgY29uc3QgY2xhc3NOYW1lTm9kZSA9IHJlcXVpcmVkQ2hpbGQoY2xhc3NOb2RlLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gY2xhc3NOb2RlLmdldENoaWxkKFwiTW9kaWZpZXJzXCIpXG4gIGNvbnN0IG1vZGlmaWVyTmFtZXMgPSBtb2RpZmllcnMgPyBzdHJ1Y3R1cmFsQ2hpbGRyZW4obW9kaWZpZXJzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSkgOiBbXVxuICBjb25zdCBwYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lTm9kZSA/IG5vZGVUZXh0KHBhY2thZ2VOYW1lTm9kZSwgc291cmNlKSA6IFwiXCJcbiAgY29uc3QgY2xhc3NOYW1lID0gbm9kZVRleHQoY2xhc3NOYW1lTm9kZSwgc291cmNlKVxuICBjb25zdCBleHBlY3RlZFN1ZmZpeCA9IGAke3BhY2thZ2VOYW1lLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX0vJHtjbGFzc05hbWV9LmphdmFgXG5cbiAgaWYgKCFwYWNrYWdlTmFtZU5vZGUgfHwgIVtcInB1YmxpYyBmaW5hbFwiLCBcImZpbmFsXCJdLmluY2x1ZGVzKG1vZGlmaWVyTmFtZXMuam9pbihcIiBcIikpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChleHBlY3RlZFN1ZmZpeCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwicGFja2FnZS9wYXRoL3B1YmxpYy1jbGFzcyBjb250cmFjdFwiLCBub2RlTG9jYXRpb24oY2xhc3NOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBpbXBvcnRzID0gaW1wb3J0c05vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBub2RlLmdldENoaWxkKFwiU2NvcGVkSWRlbnRpZmllclwiKSA/PyBub2RlLmdldENoaWxkKFwiSWRlbnRpZmllclwiKVxuXG4gICAgaWYgKCFuYW1lIHx8IG5vZGUuZ2V0Q2hpbGQoXCJzdGF0aWNcIikgfHwgbm9kZS5nZXRDaGlsZChcIkFzdGVyaXNrXCIpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJqYXZhXCIsIFwic3RhdGljIG9yIHdpbGRjYXJkIGltcG9ydFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IHNwZWNpZmllciA9IG5vZGVUZXh0KG5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB7XG4gICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAgbG9jYWxOYW1lOiBzcGVjaWZpZXIuc3BsaXQoXCIuXCIpLmF0KC0xKSA/PyBcIlwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG5hbWVzcGFjZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKHRydWUpLFxuICAgICAgcGF0aExvY2F0aW9uOiBub2RlTG9jYXRpb24obmFtZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBzcGVjaWZpZXIsXG4gICAgICB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgY2xhc3NCb2R5ID0gcmVxdWlyZWRDaGlsZChjbGFzc05vZGUsIFwiQ2xhc3NCb2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzTWVtYmVycyA9IHN0cnVjdHVyYWxDaGlsZHJlbihjbGFzc0JvZHkpXG4gIGNvbnN0IHJlY29yZENsYXNzID0gY2xhc3NNZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLm5hbWUgPT0gXCJGaWVsZERlY2xhcmF0aW9uXCIgfHwgbWVtYmVyLm5hbWUgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpXG4gIGNvbnN0IGV4cG9ydHMgPSByZWNvcmRDbGFzc1xuICAgID8gbW9kaWZpZXJOYW1lcy5qb2luKFwiIFwiKSA9PSBcInB1YmxpYyBmaW5hbFwiXG4gICAgICA/IFt7ZXhwb3J0ZWROYW1lOiBjbGFzc05hbWUsIGxvY2FsTmFtZTogY2xhc3NOYW1lLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGNsYXNzTmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgICA6IFtdXG4gICAgOiBtb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpICE9IFwicHVibGljIGZpbmFsXCIgPyBbXSA6IGNsYXNzTWVtYmVycy5mbGF0TWFwKChtZW1iZXIpID0+IHtcbiAgICAgIGlmIChtZW1iZXIubmFtZSAhPSBcIk1ldGhvZERlY2xhcmF0aW9uXCIpIHJldHVybiBbXVxuICAgICAgY29uc3QgbmFtZSA9IHJlcXVpcmVkQ2hpbGQobWVtYmVyLCBcIkRlZmluaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICAgIGNvbnN0IG1ldGhvZE1vZGlmaWVycyA9IG1lbWJlci5nZXRDaGlsZChcIk1vZGlmaWVyc1wiKVxuICAgICAgY29uc3QgbWV0aG9kTW9kaWZpZXJOYW1lcyA9IG1ldGhvZE1vZGlmaWVycyA/IHN0cnVjdHVyYWxDaGlsZHJlbihtZXRob2RNb2RpZmllcnMpLm1hcCgoe25hbWU6IG1vZGlmaWVyTmFtZX0pID0+IG1vZGlmaWVyTmFtZSkgOiBbXVxuXG4gICAgICBpZiAobm9kZVRleHQobmFtZSwgc291cmNlKSA9PSBcIm1haW5cIiB8fCBtZXRob2RNb2RpZmllck5hbWVzLmpvaW4oXCIgXCIpID09IFwicHJpdmF0ZSBzdGF0aWNcIikgcmV0dXJuIFtdXG5cbiAgICAgIHJldHVybiBbe2V4cG9ydGVkTmFtZTogbm9kZVRleHQobmFtZSwgc291cmNlKSwgbG9jYWxOYW1lOiBub2RlVGV4dChuYW1lLCBzb3VyY2UpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKG5hbWUsIGZpbGVuYW1lLCBzb3VyY2UpLCB0eXBlT25seTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKGZhbHNlKX1dXG4gICAgfSlcblxuICByZXR1cm4ge2V4cG9ydHMsIGltcG9ydHMsIG5hdGl2ZU5hbWU6IGAke3BhY2thZ2VOYW1lfS4ke2NsYXNzTmFtZX1gfVxufVxuIl19
|