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
|
@@ -561,8 +561,17 @@ export function semanticEntries(module) {
|
|
|
561
561
|
else if (node.kind == "RaiseStatement") {
|
|
562
562
|
visit(node.error, `${path}/error`, location);
|
|
563
563
|
}
|
|
564
|
+
else if (node.kind == "RethrowStatement") {
|
|
565
|
+
visit(node.bindingNode, `${path}/bindingNode`, location);
|
|
566
|
+
visit(node.bindingNode, `${path}/bindingNode/name`, location);
|
|
567
|
+
}
|
|
564
568
|
else if (node.kind == "TryStatement") {
|
|
565
569
|
visit(node.body, `${path}/body`, location);
|
|
570
|
+
node.handlers.forEach((child, index) => visit(child, `${path}/handlers/${index}`, location));
|
|
571
|
+
if (node.finallyBody)
|
|
572
|
+
visit(node.finallyBody, `${path}/finallyBody`, location);
|
|
573
|
+
}
|
|
574
|
+
else if (node.kind == "CatchHandler") {
|
|
566
575
|
visit(node.catchType, `${path}/catchType`, location);
|
|
567
576
|
visit(node.catchBinding, `${path}/catchBinding`, location);
|
|
568
577
|
visit(node.catchBody, `${path}/catchBody`, location);
|
|
@@ -871,13 +880,23 @@ function resolveSymbols(module, records) {
|
|
|
871
880
|
reference(statement.error, errorSymbols.get(statement.error.error.declarationId), "construct", `${statementPath}/error`);
|
|
872
881
|
visitExpression(statement.error.message, scope, `${statementPath}/error/message`);
|
|
873
882
|
}
|
|
883
|
+
else if (statement.kind == "RethrowStatement") {
|
|
884
|
+
const symbol = scope.get(statement.binding);
|
|
885
|
+
if (symbol)
|
|
886
|
+
reference(statement, symbol, "read", statementPath);
|
|
887
|
+
}
|
|
874
888
|
else if (statement.kind == "TryStatement") {
|
|
875
889
|
visitBlock(statement.body, scope, `${statementPath}/body`);
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
890
|
+
for (const [index, handler] of statement.handlers.entries()) {
|
|
891
|
+
const handlerPath = `${statementPath}/handlers/${index}`;
|
|
892
|
+
visitType(handler.catchType, `${handlerPath}/catchType`);
|
|
893
|
+
visitType(handler.catchBinding.type, `${handlerPath}/catchBinding/type`);
|
|
894
|
+
const catchScope = new Map(scope);
|
|
895
|
+
catchScope.set(handler.catchBinding.name, declare(handler.catchBinding, handler.catchBinding.name, "catch", `${handlerPath}/catchBinding`));
|
|
896
|
+
visitBlock(handler.catchBody, catchScope, `${handlerPath}/catchBody`);
|
|
897
|
+
}
|
|
898
|
+
if (statement.finallyBody)
|
|
899
|
+
visitBlock(statement.finallyBody, scope, `${statementPath}/finallyBody`);
|
|
881
900
|
}
|
|
882
901
|
}
|
|
883
902
|
}
|
|
@@ -1005,7 +1024,7 @@ function resolveSymbols(module, records) {
|
|
|
1005
1024
|
}
|
|
1006
1025
|
/**
|
|
1007
1026
|
* Attaches one resolved symbol reference.
|
|
1008
|
-
* @param {import("./types.js").IdentifierExpression | import("./types.js").ReceiverExpression | import("./types.js").CallExpression | import("./types.js").EffectCallExpression | import("./types.js").MethodCallExpression | import("./types.js").TypeVariableReference | import("./types.js").RecordType | import("./types.js").ReferenceType | import("./types.js").OwnedReferenceType | import("./types.js").OwnedResourceType | import("./types.js").RecordConstruction | import("./types.js").ReferenceConstruction | import("./types.js").MemberRead | import("./types.js").PrivateFieldRead | import("./types.js").PrivateFieldWriteStatement | import("./types.js").ErrorType | import("./types.js").ErrorConstruction} node - Reference node.
|
|
1027
|
+
* @param {import("./types.js").IdentifierExpression | import("./types.js").ReceiverExpression | import("./types.js").CallExpression | import("./types.js").EffectCallExpression | import("./types.js").MethodCallExpression | import("./types.js").TypeVariableReference | import("./types.js").RecordType | import("./types.js").ReferenceType | import("./types.js").OwnedReferenceType | import("./types.js").OwnedResourceType | import("./types.js").RecordConstruction | import("./types.js").ReferenceConstruction | import("./types.js").MemberRead | import("./types.js").PrivateFieldRead | import("./types.js").PrivateFieldWriteStatement | import("./types.js").RethrowStatement | import("./types.js").ErrorType | import("./types.js").ErrorConstruction} node - Reference node.
|
|
1009
1028
|
* @param {string | undefined} symbolId - Resolved symbol.
|
|
1010
1029
|
* @param {"type" | "construct" | "member" | "read" | "write" | "call"} role - Reference role.
|
|
1011
1030
|
* @param {string} path - Reference occurrence path.
|
|
@@ -1026,4 +1045,4 @@ function resolveSymbols(module, records) {
|
|
|
1026
1045
|
symbol.references.push({ location, nodeId: record.id, role });
|
|
1027
1046
|
}
|
|
1028
1047
|
}
|
|
1029
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVuYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBRW5FLDZGQUE2RjtBQUM3RixNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBQ2xDLHVHQUF1RztBQUN2RyxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFN0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNO0lBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU07SUFDM0MsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU3QixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUk7SUFDdkMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDdkMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDdkUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0s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QUcsQ0FBQyxDQUFBO1FBRTNGLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzlGLElBQUksSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzdILElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ2xJLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFFbEgsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDMUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2NyZWF0ZUNvb3JkaW5hdGVJbmRleCwgaW5kZXhlZFBvaW50QXR9IGZyb20gXCIuL2xvY2F0aW9uLmpzXCJcblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj4+Pn0gKi9cbmNvbnN0IHBhcnNlclJhbmdlcyA9IG5ldyBXZWFrTWFwKClcbi8qKiBAdHlwZSB7V2Vha01hcDxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2UsIFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUNvb3JkaW5hdGVJbmRleD4+fSAqL1xuY29uc3Qgc291cmNlQ29vcmRpbmF0ZUluZGV4ZXMgPSBuZXcgV2Vha01hcCgpXG5cbi8qKlxuICogUmVjb3JkcyBwYXJzZXItcHJvdmlkZWQgc2VtYW50aWMtdG9rZW4gcmFuZ2VzIHdpdGhvdXQgZXhwb3NpbmcgcGFyc2VyIHRyZWVzLlxuICogQHBhcmFtIHtvYmplY3R9IG5vZGUgLSBTZW1hbnRpYyBub2RlLlxuICogQHBhcmFtIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IHJvbGUgcmFuZ2VzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYXJzZXJSYW5nZXMobm9kZSwgcmFuZ2VzKSB7XG4gIHBhcnNlclJhbmdlcy5zZXQobm9kZSwgcmFuZ2VzKVxufVxuXG4vKipcbiAqIFJlY29yZHMgcGFyc2VyIHJhbmdlcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBzZW1hbnRpYyBub2RlLlxuICogQHRlbXBsYXRlIHtvYmplY3R9IE5vZGVcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFNlbWFudGljIG5vZGUuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gRXhhY3Qgcm9sZSByYW5nZXMuXG4gKiBAcmV0dXJucyB7Tm9kZX0gVGhlIHNhbWUgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhQYXJzZXJSYW5nZXMobm9kZSwgcmFuZ2VzKSB7XG4gIHNldFBhcnNlclJhbmdlcyhub2RlLCByYW5nZXMpXG5cbiAgcmV0dXJuIG5vZGVcbn1cblxuLyoqXG4gKiBSZXR1cm5zIG9uZSBwYXJzZXItb3duZWQgdG9rZW4gcmFuZ2Ugd2hpbGUgZnJvbnRlbmQgdmFsaWRhdGlvbiBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBub2RlIC0gU2VtYW50aWMgbm9kZSBvciB0eXBlIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gRXhhY3Qgc2VtYW50aWMgdG9rZW4gcm9sZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBQYXJzZXIgcmFuZ2Ugd2hlbiBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyUmFuZ2VGb3Iobm9kZSwgcm9sZSkge1xuICByZXR1cm4gcGFyc2VyUmFuZ2VzLmdldChub2RlKT8uW3JvbGVdXG59XG5cbi8qKlxuICogQWRkcyBkZXRlcm1pbmlzdGljIHByb3ZlbmFuY2UgdG8gYSB2YWxpZGF0ZWQgZnJvbnRlbmQgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIFBhcnNlZCBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlLmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IHNvdXJjZS5sYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Uuc291cmNlIC0gRXhhY3Qgc291cmNlIGNvbnRlbnQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gVGhlIHNhbWUgc2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGVQYXJzZWRNb2R1bGUobW9kdWxlLCB7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHNvdXJjZXMgPSBbe2NvbnRlbnQ6IHNvdXJjZSwgZmlsZW5hbWUsIGlkOiBcInNvdXJjZTowXCIsIGxhbmd1YWdlfV1cbiAgY29uc3QgZW50cmllcyA9IHNlbWFudGljRW50cmllcyhtb2R1bGUpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlPn0gKi9cbiAgY29uc3QgcmVjb3Jkc0J5UGF0aCA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdfSAqL1xuICBjb25zdCByZWNvcmRzID0gW11cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcmFuZ2VzID0gcGFyc2VyUmFuZ2VzLmdldChlbnRyeS5ub2RlKSA/PyB7fVxuICAgIGNvbnN0IGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIGVudHJ5Lm5vZGUgPyBlbnRyeS5ub2RlLmxvY2F0aW9uIDogcmFuZ2VzLnR5cGUgPz8gZW50cnkub3duZXJMb2NhdGlvblxuICAgIGNvbnN0IHJlbGF0ZWQgPSB7bG9jYXRpb24sIHNvdXJjZUlkOiBcInNvdXJjZTowXCJ9XG4gICAgY29uc3Qgb3JpZ2luID0gZW50cnkucGF0aC5zdGFydHNXaXRoKFwiL2NhcGFiaWxpdGllcy9cIilcbiAgICAgID8ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInN5bnRoZXRpY1wiKSwgcmVhc29uOiBcImNvbXBpbGVyLWF1dGhvcml6ZWQgY2FwYWJpbGl0eVwiLCByZWxhdGVkT3JpZ2luczogW3JlbGF0ZWRdfVxuICAgICAgOiBlbnRyeS5ub2RlLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgZW50cnkubm9kZS5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCJcbiAgICAgICAgPyB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZGVyaXZlZFwiKSwgb3JpZ2luczogW3JlbGF0ZWRdfVxuICAgICAgICA6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJzb3VyY2VcIiksIGxvY2F0aW9uLCBzb3VyY2VJZDogXCJzb3VyY2U6MFwifVxuICAgIGNvbnN0IHNvdXJjZVByb3ZlbmFuY2UgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gKi8gKHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHJhbmdlcyxcbiAgICAgIHNjaGVtYTogXCJTZW1hbnRpZm9sZE5vZGVQcm92ZW5hbmNlXCIsXG4gICAgICB2ZXJzaW9uOiAxXG4gICAgfSlcbiAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICBpZDogYG5vZGU6JHtpbmRleH1gLFxuICAgICAga2luZDogZW50cnkubm9kZS5raW5kLFxuICAgICAgb3JpZ2luOiBzb3VyY2VQcm92ZW5hbmNlLm9yaWdpbixcbiAgICAgIHBhdGg6IGVudHJ5LnBhdGgsXG4gICAgICByYW5nZXM6IHNvdXJjZVByb3ZlbmFuY2UucmFuZ2VzXG4gICAgfVxuXG4gICAgcmVjb3Jkcy5wdXNoKHJlY29yZClcbiAgICByZWNvcmRzQnlQYXRoLnNldChlbnRyeS5wYXRoLCByZWNvcmQpXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoZW50cnkubm9kZSkpIFJlZmxlY3Quc2V0KGVudHJ5Lm5vZGUsIFwic291cmNlUHJvdmVuYW5jZVwiLCBzb3VyY2VQcm92ZW5hbmNlKVxuICB9XG5cbiAgY29uc3Qgc3ltYm9scyA9IHJlc29sdmVTeW1ib2xzKG1vZHVsZSwgcmVjb3Jkc0J5UGF0aClcblxuICBtb2R1bGUucHJvdmVuYW5jZSA9IHtcbiAgICBjb29yZGluYXRlU3lzdGVtOiBcInV0ZjE2XCIsXG4gICAgbm9kZXM6IHJlY29yZHMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiLFxuICAgIHNvdXJjZXMsXG4gICAgc3ltYm9scyxcbiAgICB2ZXJzaW9uOiAxXG4gIH1cblxuICByZXR1cm4gbW9kdWxlXG59XG5cbi8qKlxuICogUmVidWlsZHMgY2Fub25pY2FsIGdlbmVyYXRpb24gbWV0YWRhdGEgd2l0aG91dCB0cnVzdGluZyBjYWxsZXItcHJvdmlkZWQgaWRlbnRpdGllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW3Byb3ZpZGVkU291cmNlc10gLSBBZGRpdGlvbmFsIHNvdXJjZSBjb250ZW50LlxuICogQHJldHVybnMge3twcm92ZW5hbmNlOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZSwgcmVjb3JkRm9yOiAobm9kZTogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGUsIHBhdGg/OiBzdHJpbmcpID0+IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZX19IENhbm9uaWNhbCBpbmRleC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdlbmVyYXRpb25JbmRleChtb2R1bGUsIHByb3ZpZGVkU291cmNlcyA9IFtdKSB7XG4gIGNvbnN0IGVudHJpZXMgPSBzZW1hbnRpY0VudHJpZXMobW9kdWxlKVxuICBjb25zdCBwcmlvclNvdXJjZXMgPSB1c2FibGVTb3VyY2VQcm92ZW5hbmNlKG1vZHVsZS5wcm92ZW5hbmNlKVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSAqL1xuICBjb25zdCBzb3VyY2VzID0gW11cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2U+fSAqL1xuICBjb25zdCBwcmlvclNvdXJjZXNCeUlkID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2YgcHJvdmlkZWRTb3VyY2VzKSBhZGRTb3VyY2Uoc291cmNlLmZpbGVuYW1lLCBzb3VyY2UuY29udGVudCwgc291cmNlLmxhbmd1YWdlID8/IG51bGwpXG4gIGlmIChwcmlvclNvdXJjZXMpIHtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcmlvclNvdXJjZXMuc291cmNlcykge1xuICAgICAgY29uc3QgY2Fub25pY2FsID0gYWRkU291cmNlKHNvdXJjZS5maWxlbmFtZSwgc291cmNlLmNvbnRlbnQsIHNvdXJjZS5sYW5ndWFnZSlcblxuICAgICAgcHJpb3JTb3VyY2VzQnlJZC5zZXQoc291cmNlLmlkLCBjYW5vbmljYWwpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIGVudHJ5Lm5vZGUgPyBlbnRyeS5ub2RlLmxvY2F0aW9uIDogZW50cnkub3duZXJMb2NhdGlvblxuXG4gICAgaWYgKCFzb3VyY2VzLnNvbWUoKHNvdXJjZSkgPT4gc291cmNlLmZpbGVuYW1lID09IGxvY2F0aW9uLmZpbGVuYW1lKSkgYWRkU291cmNlKGxvY2F0aW9uLmZpbGVuYW1lLCBudWxsLCBudWxsKVxuICB9XG4gIGNvbnN0IHZlcmlmaWFibGVTb3VyY2VzID0gc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLmNvbnRlbnQgIT0gbnVsbClcblxuICAvKiogQHR5cGUge01hcDxvYmplY3QsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdPn0gKi9cbiAgY29uc3QgcmVjb3Jkc0J5Tm9kZSA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZT59ICovXG4gIGNvbnN0IHJlY29yZHNCeVBhdGggPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2VbXX0gKi9cbiAgY29uc3QgcmVjb3JkcyA9IFtdXG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGxvY2F0ZWQgPSBcImxvY2F0aW9uXCIgaW4gZW50cnkubm9kZSA/IGVudHJ5Lm5vZGUubG9jYXRpb24gOiBlbnRyeS5vd25lckxvY2F0aW9uXG4gICAgY29uc3QgYXNzb2NpYXRlZCA9IHVzYWJsZU5vZGVQcm92ZW5hbmNlKFJlZmxlY3QuZ2V0KGVudHJ5Lm5vZGUsIFwic291cmNlUHJvdmVuYW5jZVwiKSlcbiAgICBjb25zdCByYW5nZXMgPSBhc3NvY2lhdGVkID8gdmFsaWRSYW5nZXMoYXNzb2NpYXRlZC5yYW5nZXMsIHZlcmlmaWFibGVTb3VyY2VzKSA6IHt9XG4gICAgY29uc3Qgbm9ybWFsaXplZE9yaWdpbiA9IGFzc29jaWF0ZWRcbiAgICAgID8gbm9ybWFsaXplT3JpZ2luKGFzc29jaWF0ZWQub3JpZ2luLCBwcmlvclNvdXJjZXNCeUlkLCB2ZXJpZmlhYmxlU291cmNlcylcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZmFsbGJhY2tTb3VyY2UgPSBzb3VyY2VGb3JMb2NhdGlvbihsb2NhdGVkLCBzb3VyY2VzKVxuICAgIGNvbnN0IG9yaWdpbiA9IGVudHJ5LnBhdGguc3RhcnRzV2l0aChcIi9jYXBhYmlsaXRpZXMvXCIpXG4gICAgICA/IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJzeW50aGV0aWNcIiksIHJlYXNvbjogXCJjb21waWxlci1hdXRob3JpemVkIGNhcGFiaWxpdHlcIixcbiAgICAgICAgcmVsYXRlZE9yaWdpbnM6IFt7bG9jYXRpb246IGxvY2F0ZWQsIHNvdXJjZUlkOiBmYWxsYmFja1NvdXJjZS5pZH1dfVxuICAgICAgOiBub3JtYWxpemVkT3JpZ2luID8/IHNvdXJjZU9yaWdpbihmYWxsYmFja1NvdXJjZSwgbG9jYXRlZClcblxuICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgIGlkOiBgbm9kZToke2luZGV4fWAsXG4gICAgICBraW5kOiBlbnRyeS5ub2RlLmtpbmQsXG4gICAgICBvcmlnaW4sXG4gICAgICBwYXRoOiBlbnRyeS5wYXRoLFxuICAgICAgcmFuZ2VzXG4gICAgfVxuXG4gICAgcmVjb3Jkcy5wdXNoKHJlY29yZClcbiAgICByZWNvcmRzQnlQYXRoLnNldChlbnRyeS5wYXRoLCByZWNvcmQpXG4gICAgY29uc3Qgb2NjdXJyZW5jZXMgPSByZWNvcmRzQnlOb2RlLmdldChlbnRyeS5ub2RlKSA/PyBbXVxuXG4gICAgb2NjdXJyZW5jZXMucHVzaChyZWNvcmQpXG4gICAgcmVjb3Jkc0J5Tm9kZS5zZXQoZW50cnkubm9kZSwgb2NjdXJyZW5jZXMpXG4gIH1cblxuICBjb25zdCBzeW1ib2xzID0gcmVzb2x2ZVN5bWJvbHMobW9kdWxlLCByZWNvcmRzQnlQYXRoKVxuICBjb25zdCBwcm92ZW5hbmNlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZX0gKi8gKHtcbiAgICBjb29yZGluYXRlU3lzdGVtOiBcInV0ZjE2XCIsXG4gICAgbm9kZXM6IHJlY29yZHMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiLFxuICAgIHNvdXJjZXMsXG4gICAgc3ltYm9scyxcbiAgICB2ZXJzaW9uOiAxXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBwcm92ZW5hbmNlLFxuICAgIHJlY29yZEZvcihub2RlLCBwYXRoKSB7XG4gICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJlY29yZHNCeU5vZGUuZ2V0KG5vZGUpXG5cbiAgICAgIGlmICghb2NjdXJyZW5jZXMpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiU2VtYW50aWMgbm9kZSBpcyBub3QgcGFydCBvZiB0aGlzIG1vZHVsZS5cIilcbiAgICAgIGlmIChwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gb2NjdXJyZW5jZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUucGF0aCA9PSBwYXRoKVxuXG4gICAgICAgIGlmICghcmVjb3JkKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2VtYW50aWMgbm9kZSBkb2VzIG5vdCBvY2N1ciBhdCAnJHtwYXRofScuYClcblxuICAgICAgICByZXR1cm4gcmVjb3JkXG4gICAgICB9XG4gICAgICBpZiAob2NjdXJyZW5jZXMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJTaGFyZWQgc2VtYW50aWMgbm9kZSByZXF1aXJlcyBhbiBvY2N1cnJlbmNlIHBhdGguXCIpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvY2N1cnJlbmNlc1swXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgb25lIGNhbm9uaWNhbCBzb3VyY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IC0gU291cmNlIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlIHwgbnVsbH0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IENhbm9uaWNhbCBzb3VyY2UuXG4gICAqL1xuICBmdW5jdGlvbiBhZGRTb3VyY2UoZmlsZW5hbWUsIGNvbnRlbnQsIGxhbmd1YWdlKSB7XG4gICAgaWYgKHR5cGVvZiBmaWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IGNvbnRlbnQgIT09IG51bGwgJiYgdHlwZW9mIGNvbnRlbnQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgbGFuZ3VhZ2UgIT09IG51bGwgJiYgIVtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIiwgXCJrb3RsaW5cIiwgXCJweXRob25cIiwgXCJjc2hhcnBcIiwgXCJnb1wiLCBcImNcIiwgXCJjcHBcIiwgXCJydXN0XCIsIFwic3dpZnRcIiwgXCJkYXJ0XCIsIFwiemlnXCJdLmluY2x1ZGVzKGxhbmd1YWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1hbGZvcm1lZCBzZW1hbnRpYyBzb3VyY2UgcmVnaXN0cnkgZW50cnkuXCIpXG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBzb3VyY2VzLmZpbmQoKHNvdXJjZSkgPT4gc291cmNlLmZpbGVuYW1lID09IGZpbGVuYW1lICYmIHNvdXJjZS5jb250ZW50ID09IGNvbnRlbnQpXG5cbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZ1xuXG4gICAgY29uc3QgcmVnaXN0ZXJlZCA9IHtjb250ZW50LCBmaWxlbmFtZSwgaWQ6IGBzb3VyY2U6JHtzb3VyY2VzLmxlbmd0aH1gLCBsYW5ndWFnZX1cblxuICAgIHNvdXJjZXMucHVzaChyZWdpc3RlcmVkKVxuXG4gICAgcmV0dXJuIHJlZ2lzdGVyZWRcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHNhZmUgcHJpbWFyeSBvcmlnaW5hbCBsb2NhdGlvbiBmb3IgY2xvc2VkIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIENsb3NlZCBwcm92ZW5hbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFByaW1hcnkgbG9jYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmltYXJ5TG9jYXRpb24ob3JpZ2luKSB7XG4gIGlmIChvcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiKSByZXR1cm4gb3JpZ2luLmxvY2F0aW9uXG4gIGlmIChvcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIikgcmV0dXJuIG9yaWdpbi5vcmlnaW5zWzBdPy5sb2NhdGlvblxuXG4gIHJldHVybiBvcmlnaW4ucmVsYXRlZE9yaWdpbnNbMF0/LmxvY2F0aW9uXG59XG5cbi8qKlxuICogQWNjZXB0cyBzb3VyY2UgbWV0YWRhdGEgb25seSB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIHRoZSBzZW1hbnRpYyBub2RlIGl0IGRlc2NyaWJlcy5cbiAqIFJlZ2lzdHJ5LWxvY2FsIElEcyBhbmQgcGF0aHMgYXJlIGludGVudGlvbmFsbHkgaWdub3JlZCBhbmQgcmVidWlsdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlIHwgdW5kZWZpbmVkfSByZWNvcmQgLSBDYW5kaWRhdGUgbm9kZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2UgfCB1bmRlZmluZWR9IFVzYWJsZSBhc3NvY2lhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdXNhYmxlTm9kZVByb3ZlbmFuY2UocmVjb3JkKSB7XG4gIGlmICghcmVjb3JkIHx8IHJlY29yZC5zY2hlbWEgIT0gXCJTZW1hbnRpZm9sZE5vZGVQcm92ZW5hbmNlXCIgfHwgcmVjb3JkLnZlcnNpb24gIT0gMSB8fFxuICAgICFyZWNvcmQub3JpZ2luIHx8IHR5cGVvZiByZWNvcmQub3JpZ2luICE9IFwib2JqZWN0XCIgfHxcbiAgICAhcmVjb3JkLnJhbmdlcyB8fCB0eXBlb2YgcmVjb3JkLnJhbmdlcyAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmVjb3JkLnJhbmdlcykpIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gcmVjb3JkXG59XG5cbi8qKlxuICogUmV0YWlucyBhIHZhbGlkIHNvdXJjZSByZWdpc3RyeSBpbmRlcGVuZGVudGx5IGZyb20gcG90ZW50aWFsbHkgc3RhbGUgbm9kZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb3ZlbmFuY2UgfCB1bmRlZmluZWR9IHByb3ZlbmFuY2UgLSBDYW5kaWRhdGUgcHJvdmVuYW5jZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZSB8IHVuZGVmaW5lZH0gUHJvdmVuYW5jZSB3aXRoIGEgdXNhYmxlIHNvdXJjZSByZWdpc3RyeS5cbiAqL1xuZnVuY3Rpb24gdXNhYmxlU291cmNlUHJvdmVuYW5jZShwcm92ZW5hbmNlKSB7XG4gIGlmICghcHJvdmVuYW5jZSB8fCBwcm92ZW5hbmNlLnNjaGVtYSAhPSBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiIHx8IHByb3ZlbmFuY2UudmVyc2lvbiAhPSAxIHx8XG4gICAgcHJvdmVuYW5jZS5jb29yZGluYXRlU3lzdGVtICE9IFwidXRmMTZcIiB8fCAhQXJyYXkuaXNBcnJheShwcm92ZW5hbmNlLnNvdXJjZXMpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3Qgc291cmNlSWRzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2YgcHJvdmVuYW5jZS5zb3VyY2VzKSB7XG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZS5pZCAhPSBcInN0cmluZ1wiIHx8IHNvdXJjZUlkcy5oYXMoc291cmNlLmlkKSB8fCB0eXBlb2Ygc291cmNlLmZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIHNvdXJjZS5maWxlbmFtZS5sZW5ndGggPT0gMCB8fFxuICAgICAgc291cmNlLmNvbnRlbnQgIT09IG51bGwgJiYgdHlwZW9mIHNvdXJjZS5jb250ZW50ICE9IFwic3RyaW5nXCIgfHwgc291cmNlLmxhbmd1YWdlICE9PSBudWxsICYmXG4gICAgICAhW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiLCBcImtvdGxpblwiLCBcInB5dGhvblwiLCBcImNzaGFycFwiLCBcImdvXCIsIFwiY1wiLCBcImNwcFwiLCBcInJ1c3RcIiwgXCJzd2lmdFwiLCBcImRhcnRcIiwgXCJ6aWdcIl0uaW5jbHVkZXMoc291cmNlLmxhbmd1YWdlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHNvdXJjZUlkcy5hZGQoc291cmNlLmlkKVxuICB9XG5cbiAgcmV0dXJuIHByb3ZlbmFuY2Vcbn1cblxuLyoqXG4gKiBSZXRhaW5zIG9ubHkgc2VsZi1jb25zaXN0ZW50IHNvdXJjZSByYW5nZXMuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gQ2FuZGlkYXRlIHJhbmdlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBDYW5vbmljYWwgc291cmNlcy5cbiAqIEByZXR1cm5zIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj59IFNhZmUgcmFuZ2VzLlxuICovXG5mdW5jdGlvbiB2YWxpZFJhbmdlcyhyYW5nZXMsIHNvdXJjZXMpIHtcbiAgaWYgKCFyYW5nZXMgfHwgdHlwZW9mIHJhbmdlcyAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmFuZ2VzKSkgcmV0dXJuIHt9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPn0gKi9cbiAgY29uc3QgdmFsaWQgPSB7fVxuXG4gIGZvciAoY29uc3QgW3JvbGUsIGxvY2F0aW9uXSBvZiBPYmplY3QuZW50cmllcyhyYW5nZXMpKSB7XG4gICAgaWYgKHZhbGlkTG9jYXRpb24obG9jYXRpb24sIHNvdXJjZXMpKSB2YWxpZFtyb2xlXSA9IGxvY2F0aW9uXG4gIH1cblxuICByZXR1cm4gdmFsaWRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgY2xvc2VkIG9yaWdpbiB3aGlsZSByZW1hcHBpbmcgdW50cnVzdGVkIHNvdXJjZSBpZGVudGl0aWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBDYW5kaWRhdGUgb3JpZ2luLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2U+fSBwcmlvclNvdXJjZXMgLSBQcmlvci10by1jYW5vbmljYWwgc291cmNlIG1hcHBpbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gQ2Fub25pY2FsIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY09yaWdpbiB8IHVuZGVmaW5lZH0gU2FmZSBvcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9yaWdpbihvcmlnaW4sIHByaW9yU291cmNlcywgc291cmNlcykge1xuICBpZiAoIW9yaWdpbiB8fCB0eXBlb2Ygb3JpZ2luICE9IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWRcblxuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJzb3VyY2VcIiAmJiB2YWxpZExvY2F0aW9uKG9yaWdpbi5sb2NhdGlvbiwgc291cmNlcykpIHtcbiAgICBjb25zdCBjbGFpbWVkID0gcHJpb3JTb3VyY2VzLmdldChvcmlnaW4uc291cmNlSWQpXG4gICAgY29uc3Qgc291cmNlID0gY2xhaW1lZCAmJiBzb3VyY2VPd25zTG9jYXRpb24oY2xhaW1lZCwgb3JpZ2luLmxvY2F0aW9uKSA/IGNsYWltZWQgOiBzb3VyY2VGb3JMb2NhdGlvbihvcmlnaW4ubG9jYXRpb24sIHNvdXJjZXMpXG5cbiAgICByZXR1cm4gc291cmNlT3JpZ2luKHNvdXJjZSwgb3JpZ2luLmxvY2F0aW9uKVxuICB9XG4gIGlmIChvcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIiAmJiBBcnJheS5pc0FycmF5KG9yaWdpbi5vcmlnaW5zKSAmJiBvcmlnaW4ub3JpZ2lucy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgb3JpZ2lucyA9IG9yaWdpbi5vcmlnaW5zLm1hcCgocmVsYXRlZCkgPT4gbm9ybWFsaXplUmVsYXRlZE9yaWdpbihyZWxhdGVkLCBwcmlvclNvdXJjZXMsIHNvdXJjZXMpKVxuXG4gICAgaWYgKG9yaWdpbnMuZXZlcnkoQm9vbGVhbikpIHJldHVybiB7a2luZDogXCJkZXJpdmVkXCIsIG9yaWdpbnM6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119ICovIChvcmlnaW5zKX1cbiAgfVxuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJzeW50aGV0aWNcIiAmJiB0eXBlb2Ygb3JpZ2luLnJlYXNvbiA9PSBcInN0cmluZ1wiICYmIEFycmF5LmlzQXJyYXkob3JpZ2luLnJlbGF0ZWRPcmlnaW5zKSkge1xuICAgIGNvbnN0IHJlbGF0ZWRPcmlnaW5zID0gb3JpZ2luLnJlbGF0ZWRPcmlnaW5zLm1hcCgocmVsYXRlZCkgPT4gbm9ybWFsaXplUmVsYXRlZE9yaWdpbihyZWxhdGVkLCBwcmlvclNvdXJjZXMsIHNvdXJjZXMpKVxuXG4gICAgaWYgKHJlbGF0ZWRPcmlnaW5zLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICByZXR1cm4ge2tpbmQ6IFwic3ludGhldGljXCIsIHJlYXNvbjogb3JpZ2luLnJlYXNvbiwgcmVsYXRlZE9yaWdpbnM6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119ICovIChyZWxhdGVkT3JpZ2lucyl9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgb25lIHJlbGF0ZWQgb3JpZ2luLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW59IHJlbGF0ZWQgLSBDYW5kaWRhdGUgcmVsYXRlZCBvcmlnaW4uXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZT59IHByaW9yU291cmNlcyAtIFByaW9yIHNvdXJjZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gQ2Fub25pY2FsIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luIHwgdW5kZWZpbmVkfSBTYWZlIHJlbGF0ZWQgb3JpZ2luLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWxhdGVkT3JpZ2luKHJlbGF0ZWQsIHByaW9yU291cmNlcywgc291cmNlcykge1xuICBpZiAoIXJlbGF0ZWQgfHwgIXZhbGlkTG9jYXRpb24ocmVsYXRlZC5sb2NhdGlvbiwgc291cmNlcykpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBjbGFpbWVkID0gcHJpb3JTb3VyY2VzLmdldChyZWxhdGVkLnNvdXJjZUlkKVxuICBjb25zdCBzb3VyY2UgPSBjbGFpbWVkICYmIHNvdXJjZU93bnNMb2NhdGlvbihjbGFpbWVkLCByZWxhdGVkLmxvY2F0aW9uKSA/IGNsYWltZWQgOiBzb3VyY2VGb3JMb2NhdGlvbihyZWxhdGVkLmxvY2F0aW9uLCBzb3VyY2VzKVxuICBjb25zdCBub3JtYWxpemVkID0ge2xvY2F0aW9uOiByZWxhdGVkLmxvY2F0aW9uLCBzb3VyY2VJZDogc291cmNlLmlkfVxuXG4gIGlmICh0eXBlb2YgcmVsYXRlZC5yb2xlID09IFwic3RyaW5nXCIpIE9iamVjdC5hc3NpZ24obm9ybWFsaXplZCwge3JvbGU6IHJlbGF0ZWQucm9sZX0pXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBDaGVja3Mgbm9ybWFsaXplZCBjb29yZGluYXRlcyBhZ2FpbnN0IGV4YWN0IHNvdXJjZSBjb250ZW50IHdoZW4gYXZhaWxhYmxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENhbmRpZGF0ZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBSZWdpc3RlcmVkIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbG9jYXRpb24gaXMgc2FmZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRMb2NhdGlvbihsb2NhdGlvbiwgc291cmNlcykge1xuICBpZiAoIWxvY2F0aW9uIHx8IHR5cGVvZiBsb2NhdGlvbi5maWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8ICFsb2NhdGlvbi5zdGFydCB8fCAhbG9jYXRpb24uZW5kIHx8XG4gICAgIU51bWJlci5pc0ludGVnZXIobG9jYXRpb24uc3RhcnQub2Zmc2V0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihsb2NhdGlvbi5lbmQub2Zmc2V0KSB8fCBsb2NhdGlvbi5zdGFydC5vZmZzZXQgPCAwIHx8XG4gICAgbG9jYXRpb24uZW5kLm9mZnNldCA8IGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCB8fCAhdmFsaWRQb2ludFNoYXBlKGxvY2F0aW9uLnN0YXJ0KSB8fCAhdmFsaWRQb2ludFNoYXBlKGxvY2F0aW9uLmVuZCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBzb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UuZmlsZW5hbWUgPT0gbG9jYXRpb24uZmlsZW5hbWUpXG5cbiAgcmV0dXJuIGNhbmRpZGF0ZXMuc29tZSgoc291cmNlKSA9PiBzb3VyY2VPd25zTG9jYXRpb24oc291cmNlLCBsb2NhdGlvbikpXG59XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgb25lIGlkZW50aWZpZWQgcmVnaXN0cnkgc291cmNlIG93bnMgYSBub3JtYWxpemVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IHNvdXJjZSAtIElkZW50aWZpZWQgc291cmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENhbmRpZGF0ZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VyY2Ugb3ducyB0aGUgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHNvdXJjZU93bnNMb2NhdGlvbihzb3VyY2UsIGxvY2F0aW9uKSB7XG4gIGlmIChzb3VyY2UuZmlsZW5hbWUgIT0gbG9jYXRpb24uZmlsZW5hbWUpIHJldHVybiBmYWxzZVxuICBpZiAoc291cmNlLmNvbnRlbnQgPT0gbnVsbCkgcmV0dXJuIHRydWVcbiAgaWYgKGxvY2F0aW9uLmVuZC5vZmZzZXQgPiBzb3VyY2UuY29udGVudC5sZW5ndGgpIHJldHVybiBmYWxzZVxuICBsZXQgY29vcmRpbmF0ZXMgPSBzb3VyY2VDb29yZGluYXRlSW5kZXhlcy5nZXQoc291cmNlKVxuXG4gIGlmICghY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcyA9IGNyZWF0ZUNvb3JkaW5hdGVJbmRleChzb3VyY2UuY29udGVudClcbiAgICBzb3VyY2VDb29yZGluYXRlSW5kZXhlcy5zZXQoc291cmNlLCBjb29yZGluYXRlcylcbiAgfVxuXG4gIHJldHVybiBzYW1lUG9pbnQoaW5kZXhlZFBvaW50QXQoY29vcmRpbmF0ZXMsIGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCksIGxvY2F0aW9uLnN0YXJ0KSAmJlxuICAgIHNhbWVQb2ludChpbmRleGVkUG9pbnRBdChjb29yZGluYXRlcywgbG9jYXRpb24uZW5kLm9mZnNldCksIGxvY2F0aW9uLmVuZClcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGludGVnZXIgc2hhcGUgb2Ygb25lIHNvdXJjZSBwb2ludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VQb2ludH0gcG9pbnQgLSBTb3VyY2UgcG9pbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBpdCBpcyBzdHJ1Y3R1cmFsbHkgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkUG9pbnRTaGFwZShwb2ludCkge1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwb2ludC5saW5lKSAmJiBwb2ludC5saW5lID49IDEgJiYgTnVtYmVyLmlzSW50ZWdlcihwb2ludC5jb2x1bW4pICYmIHBvaW50LmNvbHVtbiA+PSAxXG59XG5cbi8qKlxuICogQ29tcGFyZXMgbm9ybWFsaXplZCBzb3VyY2UgY29vcmRpbmF0ZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlUG9pbnR9IGxlZnQgLSBMZWZ0IHBvaW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSByaWdodCAtIFJpZ2h0IHBvaW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYWxsIGNvb3JkaW5hdGVzIG1hdGNoLlxuICovXG5mdW5jdGlvbiBzYW1lUG9pbnQobGVmdCwgcmlnaHQpIHtcbiAgcmV0dXJuIGxlZnQub2Zmc2V0ID09IHJpZ2h0Lm9mZnNldCAmJiBsZWZ0LmxpbmUgPT0gcmlnaHQubGluZSAmJiBsZWZ0LmNvbHVtbiA9PSByaWdodC5jb2x1bW5cbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZGV0ZXJtaW5pc3RpYyBzb3VyY2Ugb3duaW5nIGEgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIENhbm9uaWNhbCBzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZX0gT3duaW5nIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gc291cmNlRm9yTG9jYXRpb24obG9jYXRpb24sIHNvdXJjZXMpIHtcbiAgY29uc3Qgc291cmNlID0gc291cmNlcy5maW5kKChjYW5kaWRhdGUpID0+IHNvdXJjZU93bnNMb2NhdGlvbihjYW5kaWRhdGUsIGxvY2F0aW9uKSlcblxuICBpZiAoIXNvdXJjZSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIHJlZ2lzdGVyZWQgc291cmNlIG93bnMgJHtsb2NhdGlvbi5maWxlbmFtZX06JHtsb2NhdGlvbi5zdGFydC5vZmZzZXR9LmApXG5cbiAgcmV0dXJuIHNvdXJjZVxufVxuXG4vKipcbiAqIENyZWF0ZXMgZGlyZWN0IHNvdXJjZSBwcm92ZW5hbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IHNvdXJjZSAtIFNvdXJjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZU9yaWdpbn0gT3JpZ2luLlxuICovXG5mdW5jdGlvbiBzb3VyY2VPcmlnaW4oc291cmNlLCBsb2NhdGlvbikge1xuICByZXR1cm4ge2tpbmQ6IFwic291cmNlXCIsIGxvY2F0aW9uLCBzb3VyY2VJZDogc291cmNlLmlkfVxufVxuXG4vKipcbiAqIEZpbmRzIG9uZSBub2RlIHByb3ZlbmFuY2UgcmVjb3JkIGJ5IHNlbWFudGljIG9iamVjdCBvciBub2RlIGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlIHwgc3RyaW5nfSBub2RlIC0gU2VtYW50aWMgb2JqZWN0IG9yIG5vZGUgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlfSBQcm92ZW5hbmNlIHJlY29yZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVQcm92ZW5hbmNlKG1vZHVsZSwgbm9kZSkge1xuICByZXF1aXJlUHJvdmVuYW5jZShtb2R1bGUpXG4gIGNvbnN0IGluZGV4ID0gY3JlYXRlR2VuZXJhdGlvbkluZGV4KG1vZHVsZSlcbiAgY29uc3QgcmVjb3JkID0gdHlwZW9mIG5vZGUgPT0gXCJzdHJpbmdcIlxuICAgID8gaW5kZXgucHJvdmVuYW5jZS5ub2Rlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PSBub2RlKVxuICAgIDogaW5kZXgucmVjb3JkRm9yKG5vZGUpXG5cbiAgaWYgKCFyZWNvcmQpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHNlbWFudGljIG5vZGU6ICR7bm9kZX1gKVxuXG4gIHJldHVybiByZWNvcmRcbn1cblxuLyoqXG4gKiBGaW5kcyBvbmUgc2VtYW50aWMgc3ltYm9sIHJlY29yZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbElkIC0gU3ltYm9sIGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNTeW1ib2xQcm92ZW5hbmNlfSBTeW1ib2wgcmVjb3JkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ltYm9sUHJvdmVuYW5jZShtb2R1bGUsIHN5bWJvbElkKSB7XG4gIHJlcXVpcmVQcm92ZW5hbmNlKG1vZHVsZSlcbiAgY29uc3Qgc3ltYm9sID0gY3JlYXRlR2VuZXJhdGlvbkluZGV4KG1vZHVsZSkucHJvdmVuYW5jZS5zeW1ib2xzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09IHN5bWJvbElkKVxuXG4gIGlmICghc3ltYm9sKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBzZW1hbnRpYyBzeW1ib2w6ICR7c3ltYm9sSWR9YClcblxuICByZXR1cm4gc3ltYm9sXG59XG5cbi8qKlxuICogUmVxdWlyZXMgZnJvbnRlbmQgcHJvdmVuYW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNQcm92ZW5hbmNlfSBQcm92ZW5hbmNlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlUHJvdmVuYW5jZShtb2R1bGUpIHtcbiAgaWYgKCFtb2R1bGUucHJvdmVuYW5jZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNlbWFudGljIG1vZHVsZSBkb2VzIG5vdCBjb250YWluIHNvdXJjZSBwcm92ZW5hbmNlLlwiKVxuXG4gIHJldHVybiBtb2R1bGUucHJvdmVuYW5jZVxufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBwdWJsaWMgc2VtYW50aWMgbm9kZXMgaW4gb25lIHN0YWJsZSBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7e25vZGU6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlLCBvd25lckxvY2F0aW9uOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXRoOiBzdHJpbmd9W119IEVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW1hbnRpY0VudHJpZXMobW9kdWxlKSB7XG4gIC8qKiBAdHlwZSB7e25vZGU6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlLCBvd25lckxvY2F0aW9uOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXRoOiBzdHJpbmd9W119ICovXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuXG4gIHZpc2l0KG1vZHVsZSwgXCJcIiwgbW9kdWxlLmxvY2F0aW9uKVxuXG4gIHJldHVybiBlbnRyaWVzXG5cbiAgLyoqXG4gICAqIFZpc2l0cyBvbmUgc2VtYW50aWMgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlfSBub2RlIC0gQ3VycmVudCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEN1cnJlbnQgSlNPTiBQb2ludGVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IGxvY2F0ZWQgb3duZXIuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSwgcGF0aCwgb3duZXJMb2NhdGlvbikge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIG5vZGUgPyBub2RlLmxvY2F0aW9uIDogb3duZXJMb2NhdGlvblxuXG4gICAgZW50cmllcy5wdXNoKHtub2RlLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbiwgcGF0aH0pXG5cbiAgICBpZiAobm9kZS5raW5kID09IFwiTW9kdWxlXCIpIHtcbiAgICAgIGlmIChcImltcG9ydHNcIiBpbiBub2RlKSB7XG4gICAgICAgIG5vZGUuaW1wb3J0cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgL2ltcG9ydHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICB9XG4gICAgICA7KG5vZGUucmVjb3JkcyA/PyBbXSkuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYC9yZWNvcmRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgaWYgKCEoXCJzb3VyY2VGaWxlbmFtZVwiIGluIG5vZGUpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwic3RkbGliRmFjYWRlXCIpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgOyhub2RlLmNsYXNzZXMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAvY2xhc3Nlcy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIH1cbiAgICAgIDsobm9kZS5lcnJvcnMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAvZXJyb3JzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgOyhub2RlLmNhcGFiaWxpdGllcyA/PyBbXSkuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYC9jYXBhYmlsaXRpZXMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICBub2RlLmZ1bmN0aW9ucy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgL2Z1bmN0aW9ucy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIGlmIChcImV4cG9ydHNcIiBpbiBub2RlKSB7XG4gICAgICAgIG5vZGUuZXhwb3J0cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgL2V4cG9ydHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5lbnRyeVBvaW50KSB2aXNpdChub2RlLmVudHJ5UG9pbnQsIFwiL2VudHJ5UG9pbnRcIiwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZWNvcmREZWNsYXJhdGlvblwiKSB7XG4gICAgICA7KG5vZGUudHlwZVBhcmFtZXRlcnMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L3R5cGVQYXJhbWV0ZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgbm9kZS5maWVsZHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vZmllbGRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIG5vZGUucmVzb3VyY2VzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L3Jlc291cmNlcy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIG5vZGUuZmFpbHVyZXMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vZmFpbHVyZXMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICBub2RlLm9wZXJhdGlvbnMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vb3BlcmF0aW9ucy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkVmZmVjdE9wZXJhdGlvbkRlY2xhcmF0aW9uXCIpIHtcbiAgICAgIG5vZGUucGFyYW1ldGVycy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLnR5cGUsIGAke3BhdGh9L3BhcmFtZXRlcnMvJHtpbmRleH0vdHlwZWAsIGxvY2F0aW9uKSlcbiAgICAgIHZpc2l0KG5vZGUucmV0dXJuVHlwZSwgYCR7cGF0aH0vcmV0dXJuVHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICBub2RlLmZpZWxkcy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9maWVsZHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICB2aXNpdChub2RlLmNvbnN0cnVjdG9yLCBgJHtwYXRofS9jb25zdHJ1Y3RvcmAsIGxvY2F0aW9uKVxuICAgICAgbm9kZS5tZXRob2RzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L21ldGhvZHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJQcml2YXRlRmllbGRcIikge1xuICAgICAgdmlzaXQobm9kZS50eXBlLCBgJHtwYXRofS90eXBlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpIHtcbiAgICAgIG5vZGUucGFyYW1ldGVycy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKSB7XG4gICAgICBub2RlLnBhcmFtZXRlcnMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vcGFyYW1ldGVycy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIHZpc2l0KG5vZGUucmV0dXJuVHlwZSwgYCR7cGF0aH0vcmV0dXJuVHlwZWAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZWNvcmRGaWVsZFwiKSB7XG4gICAgICB2aXNpdChub2RlLnR5cGUsIGAke3BhdGh9L3R5cGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIikge1xuICAgICAgOyhub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS90eXBlUGFyYW1ldGVycy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIG5vZGUucGFyYW1ldGVycy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgdmlzaXQobm9kZS5yZXR1cm5UeXBlLCBgJHtwYXRofS9yZXR1cm5UeXBlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmJvZHksIGAke3BhdGh9L2JvZHlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkJsb2NrXCIpIHtcbiAgICAgIG5vZGUuc3RhdGVtZW50cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiUGFyYW1ldGVyXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudHlwZSwgYCR7cGF0aH0vdHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiVmFsdWVCaW5kaW5nXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudHlwZSwgYCR7cGF0aH0vdHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQ2F0Y2hCaW5kaW5nXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudHlwZSwgYCR7cGF0aH0vdHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTGlzdFR5cGVcIikge1xuICAgICAgdmlzaXQobm9kZS5lbGVtZW50VHlwZSwgYCR7cGF0aH0vZWxlbWVudFR5cGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBub2RlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICB2aXNpdChub2RlLmtleVR5cGUsIGAke3BhdGh9L2tleVR5cGVgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICB2aXNpdChub2RlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgIDsobm9kZS5hcmd1bWVudHMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgICAgdmlzaXQobm9kZS50eXBlLCBgJHtwYXRofS90eXBlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmluaXRpYWxpemVyLCBgJHtwYXRofS9pbml0aWFsaXplcmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLnRhcmdldCwgYCR7cGF0aH0vdGFyZ2V0YCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBub2RlLmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUuY29uc2VxdWVudCwgYCR7cGF0aH0vY29uc2VxdWVudGAsIGxvY2F0aW9uKVxuICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB2aXNpdChub2RlLmFsdGVybmF0ZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUubGlzdCwgYCR7cGF0aH0vbGlzdGAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS52YWx1ZUJpbmRpbmcsIGAke3BhdGh9L3ZhbHVlQmluZGluZ2AsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUubWFwLCBgJHtwYXRofS9tYXBgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUua2V5QmluZGluZywgYCR7cGF0aH0va2V5QmluZGluZ2AsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS52YWx1ZUJpbmRpbmcsIGAke3BhdGh9L3ZhbHVlQmluZGluZ2AsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmJvZHksIGAke3BhdGh9L2JvZHlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuZXJyb3IsIGAke3BhdGh9L2Vycm9yYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmNhdGNoVHlwZSwgYCR7cGF0aH0vY2F0Y2hUeXBlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmNhdGNoQmluZGluZywgYCR7cGF0aH0vY2F0Y2hCaW5kaW5nYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmNhdGNoQm9keSwgYCR7cGF0aH0vY2F0Y2hCb2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJFbnRyeVBvaW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuYm9keSwgYCR7cGF0aH0vYm9keWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdChub2RlLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5jb25zZXF1ZW50LCBgJHtwYXRofS9jb25zZXF1ZW50YCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmFsdGVybmF0ZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiIHx8IG5vZGUua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBub2RlLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdChub2RlLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxvY2F0aW9uKVxuICAgICAgbm9kZS5hcmd1bWVudHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUucmVmZXJlbmNlLCBgJHtwYXRofS9yZWZlcmVuY2VgLCBsb2NhdGlvbilcbiAgICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgICB2aXNpdChub2RlLnJlY29yZCwgYCR7cGF0aH0vcmVjb3JkYCwgbG9jYXRpb24pXG4gICAgICBub2RlLmFyZ3VtZW50cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJFcnJvckNvbnN0cnVjdGlvblwiKSB7XG4gICAgICB2aXNpdChub2RlLmVycm9yLCBgJHtwYXRofS9lcnJvcmAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5tZXNzYWdlLCBgJHtwYXRofS9tZXNzYWdlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJFcnJvck1lc3NhZ2VSZWFkXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSB7XG4gICAgICBub2RlLmVsZW1lbnRzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2VsZW1lbnRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IG5vZGUua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICAgIG5vZGUuZW50cmllcy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTWFwRW50cnlcIikge1xuICAgICAgdmlzaXQobm9kZS5rZXksIGAke3BhdGh9L2tleWAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS52YWx1ZSwgYCR7cGF0aH0vdmFsdWVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkxpc3RJbmRleEV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmluZGV4LCBgJHtwYXRofS9pbmRleGAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdChub2RlLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUua2V5LCBgJHtwYXRofS9rZXlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdChub2RlLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSB7XG4gICAgICB2aXNpdChub2RlLnZhbHVlLCBgJHtwYXRofS92YWx1ZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIiB8fCBub2RlLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgICB2aXNpdChub2RlLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsb2NhdGlvbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBkZWNsYXJhdGlvbnMgYW5kIHJlZmVyZW5jZXMgYWZ0ZXIgc2VtYW50aWMgdmFsaWRhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlPn0gcmVjb3JkcyAtIE5vZGUgcmVjb3JkcyBieSBvY2N1cnJlbmNlIHBhdGguXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1N5bWJvbFByb3ZlbmFuY2VbXX0gU3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVN5bWJvbHMobW9kdWxlLCByZWNvcmRzKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1N5bWJvbFByb3ZlbmFuY2VbXX0gKi9cbiAgY29uc3Qgc3ltYm9scyA9IFtdXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3QgZnVuY3Rpb25zID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3QgcmVjb3JkU3ltYm9scyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGVycm9yU3ltYm9scyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGZpZWxkU3ltYm9scyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGNsYXNzU3ltYm9scyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGNvbnN0cnVjdG9yU3ltYm9scyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG1ldGhvZFN5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCB0eXBlUGFyYW1ldGVyU3ltYm9scyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IHJlc291cmNlU3ltYm9scyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG9wZXJhdGlvblN5bWJvbHMgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IFtjYXBhYmlsaXR5SW5kZXgsIGNhcGFiaWxpdHldIG9mIChtb2R1bGUuY2FwYWJpbGl0aWVzID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBjYXBhYmlsaXR5UGF0aCA9IGAvY2FwYWJpbGl0aWVzLyR7Y2FwYWJpbGl0eUluZGV4fWBcblxuICAgIGRlY2xhcmUoY2FwYWJpbGl0eSwgY2FwYWJpbGl0eS5uYW1lLCBcImNhcGFiaWxpdHlcIiwgY2FwYWJpbGl0eVBhdGgpXG4gICAgZm9yIChjb25zdCBbcmVzb3VyY2VJbmRleCwgcmVzb3VyY2VdIG9mIGNhcGFiaWxpdHkucmVzb3VyY2VzLmVudHJpZXMoKSkge1xuICAgICAgcmVzb3VyY2VTeW1ib2xzLnNldChyZXNvdXJjZS5pZCwgZGVjbGFyZShyZXNvdXJjZSwgcmVzb3VyY2UubmFtZSwgXCJyZXNvdXJjZVwiLCBgJHtjYXBhYmlsaXR5UGF0aH0vcmVzb3VyY2VzLyR7cmVzb3VyY2VJbmRleH1gKSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBbZmFpbHVyZUluZGV4LCBmYWlsdXJlXSBvZiBjYXBhYmlsaXR5LmZhaWx1cmVzLmVudHJpZXMoKSkge1xuICAgICAgZXJyb3JTeW1ib2xzLnNldChmYWlsdXJlLmlkLCBkZWNsYXJlKGZhaWx1cmUsIGZhaWx1cmUubmFtZSwgXCJmYWlsdXJlXCIsIGAke2NhcGFiaWxpdHlQYXRofS9mYWlsdXJlcy8ke2ZhaWx1cmVJbmRleH1gKSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBbb3BlcmF0aW9uSW5kZXgsIG9wZXJhdGlvbl0gb2YgY2FwYWJpbGl0eS5vcGVyYXRpb25zLmVudHJpZXMoKSkge1xuICAgICAgb3BlcmF0aW9uU3ltYm9scy5zZXQob3BlcmF0aW9uLmlkLCBkZWNsYXJlKG9wZXJhdGlvbiwgb3BlcmF0aW9uLm5hbWUsIFwib3BlcmF0aW9uXCIsIGAke2NhcGFiaWxpdHlQYXRofS9vcGVyYXRpb25zLyR7b3BlcmF0aW9uSW5kZXh9YCkpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgW2NhcGFiaWxpdHlJbmRleCwgY2FwYWJpbGl0eV0gb2YgKG1vZHVsZS5jYXBhYmlsaXRpZXMgPz8gW10pLmVudHJpZXMoKSkge1xuICAgIGZvciAoY29uc3QgW29wZXJhdGlvbkluZGV4LCBvcGVyYXRpb25dIG9mIGNhcGFiaWxpdHkub3BlcmF0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IG9wZXJhdGlvblBhdGggPSBgL2NhcGFiaWxpdGllcy8ke2NhcGFiaWxpdHlJbmRleH0vb3BlcmF0aW9ucy8ke29wZXJhdGlvbkluZGV4fWBcbiAgICAgIG9wZXJhdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+XG4gICAgICAgIHZpc2l0VHlwZShwYXJhbWV0ZXIudHlwZSwgYCR7b3BlcmF0aW9uUGF0aH0vcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fS90eXBlYCkpXG4gICAgICB2aXNpdFR5cGUob3BlcmF0aW9uLnJldHVyblR5cGUsIGAke29wZXJhdGlvblBhdGh9L3JldHVyblR5cGVgKVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBkZWNsYXJhdGlvbl0gb2YgKG1vZHVsZS5yZWNvcmRzID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvblBhdGggPSBgL3JlY29yZHMvJHtpbmRleH1gXG4gICAgY29uc3Qgc3ltYm9sID0gZGVjbGFyZShkZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24ubmFtZSwgXCJyZWNvcmRcIiwgZGVjbGFyYXRpb25QYXRoKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uLmlkKSByZWNvcmRTeW1ib2xzLnNldChkZWNsYXJhdGlvbi5pZCwgc3ltYm9sKVxuICAgIGZvciAoY29uc3QgW3BhcmFtZXRlckluZGV4LCBwYXJhbWV0ZXJdIG9mIChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJTeW1ib2wgPSBkZWNsYXJlKHBhcmFtZXRlciwgcGFyYW1ldGVyLm5hbWUsIFwidHlwZVBhcmFtZXRlclwiLCBgJHtkZWNsYXJhdGlvblBhdGh9L3R5cGVQYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YClcblxuICAgICAgaWYgKHBhcmFtZXRlci5pZCkgdHlwZVBhcmFtZXRlclN5bWJvbHMuc2V0KHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyU3ltYm9sKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtmaWVsZEluZGV4LCBmaWVsZF0gb2YgZGVjbGFyYXRpb24uZmllbGRzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgZmllbGRQYXRoID0gYCR7ZGVjbGFyYXRpb25QYXRofS9maWVsZHMvJHtmaWVsZEluZGV4fWBcbiAgICAgIGNvbnN0IGZpZWxkU3ltYm9sID0gZGVjbGFyZShmaWVsZCwgZmllbGQubmFtZSwgXCJmaWVsZFwiLCBmaWVsZFBhdGgpXG5cbiAgICAgIGlmIChmaWVsZC5pZCkgZmllbGRTeW1ib2xzLnNldChmaWVsZC5pZCwgZmllbGRTeW1ib2wpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGRlY2xhcmF0aW9uXSBvZiAobW9kdWxlLmVycm9ycyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgY29uc3Qgc3ltYm9sID0gZGVjbGFyZShkZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24ubmFtZSwgXCJlcnJvclwiLCBgL2Vycm9ycy8ke2luZGV4fWApXG5cbiAgICBpZiAoZGVjbGFyYXRpb24uaWQpIGVycm9yU3ltYm9scy5zZXQoZGVjbGFyYXRpb24uaWQsIHN5bWJvbClcbiAgfVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBkZWNsYXJhdGlvbl0gb2YgKG1vZHVsZS5jbGFzc2VzID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvblBhdGggPSBgL2NsYXNzZXMvJHtpbmRleH1gXG4gICAgY29uc3QgY2xhc3NTeW1ib2wgPSBkZWNsYXJlKGRlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbi5uYW1lLCBcImNsYXNzXCIsIGRlY2xhcmF0aW9uUGF0aClcblxuICAgIGlmIChkZWNsYXJhdGlvbi5pZCkgY2xhc3NTeW1ib2xzLnNldChkZWNsYXJhdGlvbi5pZCwgY2xhc3NTeW1ib2wpXG4gICAgZm9yIChjb25zdCBbZmllbGRJbmRleCwgZmllbGRdIG9mIGRlY2xhcmF0aW9uLmZpZWxkcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IGRlY2xhcmUoZmllbGQsIGZpZWxkLm5hbWUsIFwiZmllbGRcIiwgYCR7ZGVjbGFyYXRpb25QYXRofS9maWVsZHMvJHtmaWVsZEluZGV4fWApXG5cbiAgICAgIGlmIChmaWVsZC5pZCkgZmllbGRTeW1ib2xzLnNldChmaWVsZC5pZCwgc3ltYm9sKVxuICAgICAgdmlzaXRUeXBlKGZpZWxkLnR5cGUsIGAke2RlY2xhcmF0aW9uUGF0aH0vZmllbGRzLyR7ZmllbGRJbmRleH0vdHlwZWApXG4gICAgfVxuICAgIGNvbnN0IGNvbnN0cnVjdG9yU3ltYm9sID0gZGVjbGFyZShkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvciwgXCJjb25zdHJ1Y3RvclwiLCBcImNvbnN0cnVjdG9yXCIsIGAke2RlY2xhcmF0aW9uUGF0aH0vY29uc3RydWN0b3JgKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmlkKSBjb25zdHJ1Y3RvclN5bWJvbHMuc2V0KGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmlkLCBjb25zdHJ1Y3RvclN5bWJvbClcbiAgICBmb3IgKGNvbnN0IFttZXRob2RJbmRleCwgbWV0aG9kXSBvZiBkZWNsYXJhdGlvbi5tZXRob2RzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgc3ltYm9sID0gZGVjbGFyZShtZXRob2QsIG1ldGhvZC5uYW1lLCBcIm1ldGhvZFwiLCBgJHtkZWNsYXJhdGlvblBhdGh9L21ldGhvZHMvJHttZXRob2RJbmRleH1gKVxuXG4gICAgICBpZiAobWV0aG9kLmlkKSBtZXRob2RTeW1ib2xzLnNldChtZXRob2QuaWQsIHN5bWJvbClcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZGVjbGFyYXRpb25dIG9mIChtb2R1bGUucmVjb3JkcyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgZm9yIChjb25zdCBbZmllbGRJbmRleCwgZmllbGRdIG9mIGRlY2xhcmF0aW9uLmZpZWxkcy5lbnRyaWVzKCkpIHtcbiAgICAgIHZpc2l0VHlwZShmaWVsZC50eXBlLCBgL3JlY29yZHMvJHtpbmRleH0vZmllbGRzLyR7ZmllbGRJbmRleH0vdHlwZWApXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGRlY2xhcmF0aW9uXSBvZiBtb2R1bGUuZnVuY3Rpb25zLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uUGF0aCA9IGAvZnVuY3Rpb25zLyR7aW5kZXh9YFxuXG4gICAgZnVuY3Rpb25zLnNldChkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJlKGRlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbi5uYW1lLCBcImZ1bmN0aW9uXCIsIGRlY2xhcmF0aW9uUGF0aCkpXG4gICAgZm9yIChjb25zdCBbcGFyYW1ldGVySW5kZXgsIHBhcmFtZXRlcl0gb2YgKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlclN5bWJvbCA9IGRlY2xhcmUocGFyYW1ldGVyLCBwYXJhbWV0ZXIubmFtZSwgXCJ0eXBlUGFyYW1ldGVyXCIsIGAke2RlY2xhcmF0aW9uUGF0aH0vdHlwZVBhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH1gKVxuXG4gICAgICBpZiAocGFyYW1ldGVyLmlkKSB0eXBlUGFyYW1ldGVyU3ltYm9scy5zZXQocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXJTeW1ib2wpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGRlY2xhcmF0aW9uXSBvZiBtb2R1bGUuZnVuY3Rpb25zLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uUGF0aCA9IGAvZnVuY3Rpb25zLyR7aW5kZXh9YFxuICAgIGNvbnN0IHNjb3BlID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IFtwYXJhbWV0ZXJJbmRleCwgcGFyYW1ldGVyXSBvZiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgICAgc2NvcGUuc2V0KHBhcmFtZXRlci5uYW1lLCBkZWNsYXJlKHBhcmFtZXRlciwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIGAke2RlY2xhcmF0aW9uUGF0aH0vcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWApKVxuICAgICAgdmlzaXRUeXBlKHBhcmFtZXRlci50eXBlLCBgJHtkZWNsYXJhdGlvblBhdGh9L3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH0vdHlwZWApXG4gICAgfVxuICAgIHZpc2l0VHlwZShkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBgJHtkZWNsYXJhdGlvblBhdGh9L3JldHVyblR5cGVgKVxuICAgIHZpc2l0QmxvY2soZGVjbGFyYXRpb24uYm9keSwgc2NvcGUsIGAke2RlY2xhcmF0aW9uUGF0aH0vYm9keWApXG4gIH1cblxuICBmb3IgKGNvbnN0IFtjbGFzc0luZGV4LCBkZWNsYXJhdGlvbl0gb2YgKG1vZHVsZS5jbGFzc2VzID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvblBhdGggPSBgL2NsYXNzZXMvJHtjbGFzc0luZGV4fWBcbiAgICBjb25zdCBjb25zdHJ1Y3RvclNjb3BlID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IFtwYXJhbWV0ZXJJbmRleCwgcGFyYW1ldGVyXSBvZiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgcGF0aCA9IGAke2RlY2xhcmF0aW9uUGF0aH0vY29uc3RydWN0b3IvcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWBcblxuICAgICAgY29uc3RydWN0b3JTY29wZS5zZXQocGFyYW1ldGVyLm5hbWUsIGRlY2xhcmUocGFyYW1ldGVyLCBwYXJhbWV0ZXIubmFtZSwgXCJwYXJhbWV0ZXJcIiwgcGF0aCkpXG4gICAgICB2aXNpdFR5cGUocGFyYW1ldGVyLnR5cGUsIGAke3BhdGh9L3R5cGVgKVxuICAgIH1cbiAgICB2aXNpdEJsb2NrKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIGNvbnN0cnVjdG9yU2NvcGUsIGAke2RlY2xhcmF0aW9uUGF0aH0vY29uc3RydWN0b3IvYm9keWApXG4gICAgZm9yIChjb25zdCBbbWV0aG9kSW5kZXgsIG1ldGhvZF0gb2YgZGVjbGFyYXRpb24ubWV0aG9kcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IG1ldGhvZFBhdGggPSBgJHtkZWNsYXJhdGlvblBhdGh9L21ldGhvZHMvJHttZXRob2RJbmRleH1gXG4gICAgICBjb25zdCBzY29wZSA9IG5ldyBNYXAoKVxuXG4gICAgICBmb3IgKGNvbnN0IFtwYXJhbWV0ZXJJbmRleCwgcGFyYW1ldGVyXSBvZiBtZXRob2QucGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGAke21ldGhvZFBhdGh9L3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH1gXG5cbiAgICAgICAgc2NvcGUuc2V0KHBhcmFtZXRlci5uYW1lLCBkZWNsYXJlKHBhcmFtZXRlciwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIHBhdGgpKVxuICAgICAgICB2aXNpdFR5cGUocGFyYW1ldGVyLnR5cGUsIGAke3BhdGh9L3R5cGVgKVxuICAgICAgfVxuICAgICAgdmlzaXRUeXBlKG1ldGhvZC5yZXR1cm5UeXBlLCBgJHttZXRob2RQYXRofS9yZXR1cm5UeXBlYClcbiAgICAgIHZpc2l0QmxvY2sobWV0aG9kLmJvZHksIHNjb3BlLCBgJHttZXRob2RQYXRofS9ib2R5YClcbiAgICB9XG4gIH1cblxuICB2aXNpdEJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIG5ldyBNYXAoKSwgXCIvZW50cnlQb2ludC9ib2R5XCIpXG5cbiAgcmV0dXJuIHN5bWJvbHNcblxuICAvKipcbiAgICogRGVjbGFyZXMgb25lIGNhbm9uaWNhbCBzeW1ib2wuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkVmZmVjdFJlc291cmNlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkVmZmVjdEZhaWx1cmVEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuRWZmZWN0T3BlcmF0aW9uRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWNvcmRGaWVsZCB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Db25zdHJ1Y3RvckRlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5NZXRob2REZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuVHlwZVBhcmFtZXRlciB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUGFyYW1ldGVyIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5WYWx1ZUJpbmRpbmcgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZ30gbm9kZSAtIERlY2xhcmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFN5bWJvbCBuYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNTeW1ib2xLaW5kfSBraW5kIC0gU3ltYm9sIGtpbmQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gRGVjbGFyYXRpb24gb2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTeW1ib2wgaWRlbnRpdHkuXG4gICAqL1xuICBmdW5jdGlvbiBkZWNsYXJlKG5vZGUsIG5hbWUsIGtpbmQsIHBhdGgpIHtcbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzLmdldChwYXRoKVxuXG4gICAgaWYgKCFyZWNvcmQpIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBwcm92ZW5hbmNlIGZvciAke25vZGUua2luZH0uYClcblxuICAgIGNvbnN0IGxvY2F0aW9uID0gcmVjb3JkLnJhbmdlcy5uYW1lID8/IChcImxvY2F0aW9uXCIgaW4gbm9kZSA/IG5vZGUubG9jYXRpb24gOiBwcmltYXJ5TG9jYXRpb24ocmVjb3JkLm9yaWdpbikpXG4gICAgY29uc3QgaWQgPSBgc3ltYm9sOiR7c3ltYm9scy5sZW5ndGh9YFxuXG4gICAgcmVjb3JkLnN5bWJvbElkID0gaWRcbiAgICBzeW1ib2xzLnB1c2goe1xuICAgICAgZGVjbGFyYXRpb25Ob2RlSWQ6IHJlY29yZC5pZCxcbiAgICAgIGlkLFxuICAgICAga2luZCxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgbmFtZSxcbiAgICAgIHJlZmVyZW5jZXM6IFtdLFxuICAgICAgLi4uKFtcImNhcGFiaWxpdHlcIiwgXCJyZXNvdXJjZVwiLCBcImZhaWx1cmVcIiwgXCJvcGVyYXRpb25cIiwgXCJyZWNvcmRcIiwgXCJjbGFzc1wiLCBcImVycm9yXCIsIFwiZmllbGRcIiwgXCJjb25zdHJ1Y3RvclwiLCBcIm1ldGhvZFwiLCBcImZ1bmN0aW9uXCIsIFwidHlwZVBhcmFtZXRlclwiXS5pbmNsdWRlcyhraW5kKVxuICAgICAgICA/IHtzZW1hbnRpY0RlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7e2lkPzogc3RyaW5nfX0gKi8gKG5vZGUpLmlkfVxuICAgICAgICA6IHt9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gaWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyByZWZlcmVuY2VzIGluIG9uZSBsZXhpY2FsIGJsb2NrLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gcGFyZW50IC0gVmlzaWJsZSBiaW5kaW5ncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBTdGF0ZW1lbnQgc2VxdWVuY2UgcGF0aC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrLCBwYXJlbnQsIHBhdGgpIHtcbiAgICBjb25zdCBzY29wZSA9IG5ldyBNYXAocGFyZW50KVxuXG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHN0YXRlbWVudF0gb2YgYmxvY2suc3RhdGVtZW50cy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFBhdGggPSBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YFxuXG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgICAgdmlzaXRUeXBlKHN0YXRlbWVudC50eXBlLCBgJHtzdGF0ZW1lbnRQYXRofS90eXBlYClcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5pbml0aWFsaXplciwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2luaXRpYWxpemVyYClcbiAgICAgICAgc2NvcGUuc2V0KHN0YXRlbWVudC5uYW1lLCBkZWNsYXJlKHN0YXRlbWVudCwgc3RhdGVtZW50Lm5hbWUsIFwibG9jYWxcIiwgc3RhdGVtZW50UGF0aCkpXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgICAgIHJlZmVyZW5jZShzdGF0ZW1lbnQudGFyZ2V0LCBzY29wZS5nZXQoc3RhdGVtZW50LnRhcmdldC5uYW1lKSwgXCJ3cml0ZVwiLCBgJHtzdGF0ZW1lbnRQYXRofS90YXJnZXRgKVxuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmV4cHJlc3Npb24sIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9leHByZXNzaW9uYClcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHJlZmVyZW5jZShzdGF0ZW1lbnQsIGZpZWxkU3ltYm9scy5nZXQoc3RhdGVtZW50LmZpZWxkKSwgXCJ3cml0ZVwiLCBzdGF0ZW1lbnRQYXRoKVxuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LnJlY2VpdmVyLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vcmVjZWl2ZXJgKVxuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmV4cHJlc3Npb24sIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9leHByZXNzaW9uYClcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgICAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24pIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2V4cHJlc3Npb25gKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5leHByZXNzaW9uLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vZXhwcmVzc2lvbmApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmNvbmRpdGlvbiwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2NvbmRpdGlvbmApXG4gICAgICAgIHZpc2l0QmxvY2soc3RhdGVtZW50LmNvbnNlcXVlbnQsIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9jb25zZXF1ZW50YClcbiAgICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHZpc2l0QmxvY2soc3RhdGVtZW50LmFsdGVybmF0ZSwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2FsdGVybmF0ZWApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQubGlzdCwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2xpc3RgKVxuICAgICAgICBjb25zdCBib2R5U2NvcGUgPSBuZXcgTWFwKHNjb3BlKVxuXG4gICAgICAgIHZpc2l0VHlwZShzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLnR5cGUsIGAke3N0YXRlbWVudFBhdGh9L3ZhbHVlQmluZGluZy90eXBlYClcblxuICAgICAgICBib2R5U2NvcGUuc2V0KHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSwgZGVjbGFyZShcbiAgICAgICAgICBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLFxuICAgICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSxcbiAgICAgICAgICBcIml0ZXJhdGlvblwiLFxuICAgICAgICAgIGAke3N0YXRlbWVudFBhdGh9L3ZhbHVlQmluZGluZ2BcbiAgICAgICAgKSlcbiAgICAgICAgdmlzaXRCbG9jayhzdGF0ZW1lbnQuYm9keSwgYm9keVNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9ib2R5YClcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5tYXAsIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9tYXBgKVxuICAgICAgICBjb25zdCBib2R5U2NvcGUgPSBuZXcgTWFwKHNjb3BlKVxuXG4gICAgICAgIHZpc2l0VHlwZShzdGF0ZW1lbnQua2V5QmluZGluZy50eXBlLCBgJHtzdGF0ZW1lbnRQYXRofS9rZXlCaW5kaW5nL3R5cGVgKVxuICAgICAgICB2aXNpdFR5cGUoc3RhdGVtZW50LnZhbHVlQmluZGluZy50eXBlLCBgJHtzdGF0ZW1lbnRQYXRofS92YWx1ZUJpbmRpbmcvdHlwZWApXG4gICAgICAgIGJvZHlTY29wZS5zZXQoc3RhdGVtZW50LmtleUJpbmRpbmcubmFtZSwgZGVjbGFyZShcbiAgICAgICAgICBzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LmtleUJpbmRpbmcubmFtZSwgXCJpdGVyYXRpb25cIiwgYCR7c3RhdGVtZW50UGF0aH0va2V5QmluZGluZ2BcbiAgICAgICAgKSlcbiAgICAgICAgYm9keVNjb3BlLnNldChzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUsIGRlY2xhcmUoXG4gICAgICAgICAgc3RhdGVtZW50LnZhbHVlQmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lLCBcIml0ZXJhdGlvblwiLCBgJHtzdGF0ZW1lbnRQYXRofS92YWx1ZUJpbmRpbmdgXG4gICAgICAgICkpXG4gICAgICAgIHZpc2l0QmxvY2soc3RhdGVtZW50LmJvZHksIGJvZHlTY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vYm9keWApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmNvbmRpdGlvbiwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2NvbmRpdGlvbmApXG4gICAgICAgIHZpc2l0QmxvY2soc3RhdGVtZW50LmJvZHksIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9ib2R5YClcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0VHlwZShzdGF0ZW1lbnQuZXJyb3IuZXJyb3IsIGAke3N0YXRlbWVudFBhdGh9L2Vycm9yL2Vycm9yYClcbiAgICAgICAgcmVmZXJlbmNlKHN0YXRlbWVudC5lcnJvciwgZXJyb3JTeW1ib2xzLmdldChzdGF0ZW1lbnQuZXJyb3IuZXJyb3IuZGVjbGFyYXRpb25JZCksIFwiY29uc3RydWN0XCIsIGAke3N0YXRlbWVudFBhdGh9L2Vycm9yYClcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5lcnJvci5tZXNzYWdlLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vZXJyb3IvbWVzc2FnZWApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXRCbG9jayhzdGF0ZW1lbnQuYm9keSwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2JvZHlgKVxuICAgICAgICB2aXNpdFR5cGUoc3RhdGVtZW50LmNhdGNoVHlwZSwgYCR7c3RhdGVtZW50UGF0aH0vY2F0Y2hUeXBlYClcbiAgICAgICAgdmlzaXRUeXBlKHN0YXRlbWVudC5jYXRjaEJpbmRpbmcudHlwZSwgYCR7c3RhdGVtZW50UGF0aH0vY2F0Y2hCaW5kaW5nL3R5cGVgKVxuICAgICAgICBjb25zdCBjYXRjaFNjb3BlID0gbmV3IE1hcChzY29wZSlcblxuICAgICAgICBjYXRjaFNjb3BlLnNldChzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWUsIGRlY2xhcmUoXG4gICAgICAgICAgc3RhdGVtZW50LmNhdGNoQmluZGluZyxcbiAgICAgICAgICBzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWUsXG4gICAgICAgICAgXCJjYXRjaFwiLFxuICAgICAgICAgIGAke3N0YXRlbWVudFBhdGh9L2NhdGNoQmluZGluZ2BcbiAgICAgICAgKSlcbiAgICAgICAgdmlzaXRCbG9jayhzdGF0ZW1lbnQuY2F0Y2hCb2R5LCBjYXRjaFNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9jYXRjaEJvZHlgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyByZWZlcmVuY2VzIGluIG9uZSBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gc2NvcGUgLSBWaXNpYmxlIGJpbmRpbmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4cHJlc3Npb24gb2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLCBzY29wZSwgcGF0aCkge1xuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZWZlcmVuY2UoZXhwcmVzc2lvbiwgc2NvcGUuZ2V0KGV4cHJlc3Npb24ubmFtZSksIFwicmVhZFwiLCBwYXRoKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSByZWZlcmVuY2UoZXhwcmVzc2lvbiwgY2xhc3NTeW1ib2xzLmdldChleHByZXNzaW9uLmNsYXNzSWQpLCBcInJlYWRcIiwgcGF0aClcbiAgICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IG1vZHVsZS5mdW5jdGlvbnMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gZXhwcmVzc2lvbi5yZXNvbHV0aW9uPy5kZWNsYXJhdGlvbklkKVxuXG4gICAgICByZWZlcmVuY2UoZXhwcmVzc2lvbiwgZGVjbGFyYXRpb24gPyBmdW5jdGlvbnMuZ2V0KGRlY2xhcmF0aW9uLm5hbWUpIDogdW5kZWZpbmVkLCBcImNhbGxcIiwgcGF0aClcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcmd1bWVudF0gb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMuZW50cmllcygpKSB2aXNpdEV4cHJlc3Npb24oYXJndW1lbnQsIHNjb3BlLCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIikge1xuICAgICAgcmVmZXJlbmNlKGV4cHJlc3Npb24sIG9wZXJhdGlvblN5bWJvbHMuZ2V0KGV4cHJlc3Npb24ub3BlcmF0aW9uKSwgXCJjYWxsXCIsIHBhdGgpXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50LCBzY29wZSwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uZXhwcmVzc2lvbiwgc2NvcGUsIGAke3BhdGh9L2V4cHJlc3Npb25gKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICAgIHJlZmVyZW5jZShleHByZXNzaW9uLCByZWNvcmRTeW1ib2xzLmdldChleHByZXNzaW9uLnJlY29yZC5kZWNsYXJhdGlvbklkKSwgXCJjb25zdHJ1Y3RcIiwgcGF0aClcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcmd1bWVudF0gb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMuZW50cmllcygpKSB2aXNpdEV4cHJlc3Npb24oYXJndW1lbnQsIHNjb3BlLCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICAgIHJlZmVyZW5jZShleHByZXNzaW9uLCBjb25zdHJ1Y3RvclN5bWJvbHMuZ2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZXhwcmVzc2lvbi5yZXNvbHV0aW9uPy5kZWNsYXJhdGlvbklkKSksIFwiY29uc3RydWN0XCIsIHBhdGgpXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50LCBzY29wZSwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIHJlZmVyZW5jZShleHByZXNzaW9uLCBtZXRob2RTeW1ib2xzLmdldChleHByZXNzaW9uLm1ldGhvZCksIFwiY2FsbFwiLCBwYXRoKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIsIHNjb3BlLCBgJHtwYXRofS9yZWNlaXZlcmApXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50LCBzY29wZSwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1lbWJlclJlYWRcIikge1xuICAgICAgcmVmZXJlbmNlKGV4cHJlc3Npb24sIGZpZWxkU3ltYm9scy5nZXQoZXhwcmVzc2lvbi5maWVsZCksIFwibWVtYmVyXCIsIHBhdGgpXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5yZWNlaXZlciwgc2NvcGUsIGAke3BhdGh9L3JlY2VpdmVyYClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgICAgcmVmZXJlbmNlKGV4cHJlc3Npb24sIGZpZWxkU3ltYm9scy5nZXQoZXhwcmVzc2lvbi5maWVsZCksIFwibWVtYmVyXCIsIHBhdGgpXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5yZWNlaXZlciwgc2NvcGUsIGAke3BhdGh9L3JlY2VpdmVyYClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVycm9yTWVzc2FnZVJlYWRcIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIsIHNjb3BlLCBgJHtwYXRofS9yZWNlaXZlcmApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ub3BlcmFuZCwgc2NvcGUsIGAke3BhdGh9L29wZXJhbmRgKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5sZWZ0LCBzY29wZSwgYCR7cGF0aH0vbGVmdGApXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5yaWdodCwgc2NvcGUsIGAke3BhdGh9L3JpZ2h0YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb25kaXRpb24sIHNjb3BlLCBgJHtwYXRofS9jb25kaXRpb25gKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc2VxdWVudCwgc2NvcGUsIGAke3BhdGh9L2NvbnNlcXVlbnRgKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uYWx0ZXJuYXRlLCBzY29wZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBlbGVtZW50XSBvZiBleHByZXNzaW9uLmVsZW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGVsZW1lbnQsIHNjb3BlLCBgJHtwYXRofS9lbGVtZW50cy8ke2luZGV4fWApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBleHByZXNzaW9uLmVudHJpZXMuZW50cmllcygpKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihlbnRyeS5rZXksIHNjb3BlLCBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9L2tleWApXG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihlbnRyeS52YWx1ZSwgc2NvcGUsIGAke3BhdGh9L2VudHJpZXMvJHtpbmRleH0vdmFsdWVgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBzY29wZSwgYCR7cGF0aH0vY29sbGVjdGlvbmApXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5pbmRleCwgc2NvcGUsIGAke3BhdGh9L2luZGV4YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uY29sbGVjdGlvbiwgc2NvcGUsIGAke3BhdGh9L2NvbGxlY3Rpb25gKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ua2V5LCBzY29wZSwgYCR7cGF0aH0va2V5YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBzY29wZSwgYCR7cGF0aH0vY29sbGVjdGlvbmApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24udmFsdWUsIHNjb3BlLCBgJHtwYXRofS92YWx1ZWApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICAgIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLm9wZXJhbmQsIHNjb3BlLCBgJHtwYXRofS9vcGVyYW5kYClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgbm9taW5hbCByZWZlcmVuY2VzIG5lc3RlZCBpbiBhIHNlbWFudGljIHR5cGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuRXJyb3JUeXBlfSB0eXBlIC0gU2VtYW50aWMgdHlwZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUeXBlIG9jY3VycmVuY2UgcGF0aC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdFR5cGUodHlwZSwgcGF0aCkge1xuICAgIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmVmZXJlbmNlKHR5cGUsIHR5cGVQYXJhbWV0ZXJTeW1ib2xzLmdldCh0eXBlLnBhcmFtZXRlcklkKSwgXCJ0eXBlXCIsIHBhdGgpXG4gICAgZWxzZSBpZiAodHlwZS5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICByZWZlcmVuY2UodHlwZSwgcmVjb3JkU3ltYm9scy5nZXQodHlwZS5kZWNsYXJhdGlvbklkKSwgXCJ0eXBlXCIsIHBhdGgpXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mICh0eXBlLmFyZ3VtZW50cyA/PyBbXSkuZW50cmllcygpKSB2aXNpdFR5cGUoYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWApXG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUua2luZCA9PSBcIkVycm9yVHlwZVwiKSByZWZlcmVuY2UodHlwZSwgZXJyb3JTeW1ib2xzLmdldCh0eXBlLmRlY2xhcmF0aW9uSWQpLCBcInR5cGVcIiwgcGF0aClcbiAgICBlbHNlIGlmICh0eXBlLmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgdHlwZS5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHJlZmVyZW5jZSh0eXBlLCBjbGFzc1N5bWJvbHMuZ2V0KHR5cGUuZGVjbGFyYXRpb25JZCksIFwidHlwZVwiLCBwYXRoKVxuICAgIGVsc2UgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHJlZmVyZW5jZSh0eXBlLCByZXNvdXJjZVN5bWJvbHMuZ2V0KHR5cGUucmVzb3VyY2VJZCksIFwidHlwZVwiLCBwYXRoKVxuICAgIGVsc2UgaWYgKHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIpIHZpc2l0VHlwZSh0eXBlLmVsZW1lbnRUeXBlLCBgJHtwYXRofS9lbGVtZW50VHlwZWApXG4gICAgZWxzZSBpZiAodHlwZS5raW5kID09IFwiTWFwVHlwZVwiIHx8IHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIHZpc2l0VHlwZSh0eXBlLmtleVR5cGUsIGAke3BhdGh9L2tleVR5cGVgKVxuICAgICAgdmlzaXRUeXBlKHR5cGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgKVxuICAgIH0gZWxzZSBpZiAodHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHZpc2l0VHlwZSh0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYClcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBvbmUgcmVzb2x2ZWQgc3ltYm9sIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLklkZW50aWZpZXJFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FZmZlY3RDYWxsRXhwcmVzc2lvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlR5cGVWYXJpYWJsZVJlZmVyZW5jZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVjb3JkVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVmZXJlbmNlVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuT3duZWRSZWZlcmVuY2VUeXBlIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Pd25lZFJlc291cmNlVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVjb3JkQ29uc3RydWN0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWZlcmVuY2VDb25zdHJ1Y3Rpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLk1lbWJlclJlYWQgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFJlYWQgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50IHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkVycm9yQ29uc3RydWN0aW9ufSBub2RlIC0gUmVmZXJlbmNlIG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBzeW1ib2xJZCAtIFJlc29sdmVkIHN5bWJvbC5cbiAgICogQHBhcmFtIHtcInR5cGVcIiB8IFwiY29uc3RydWN0XCIgfCBcIm1lbWJlclwiIHwgXCJyZWFkXCIgfCBcIndyaXRlXCIgfCBcImNhbGxcIn0gcm9sZSAtIFJlZmVyZW5jZSByb2xlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFJlZmVyZW5jZSBvY2N1cnJlbmNlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVmZXJlbmNlKG5vZGUsIHN5bWJvbElkLCByb2xlLCBwYXRoKSB7XG4gICAgaWYgKCFzeW1ib2xJZCkgcmV0dXJuXG5cbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzLmdldChwYXRoKVxuICAgIGNvbnN0IHN5bWJvbCA9IHN5bWJvbHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gc3ltYm9sSWQpXG5cbiAgICBpZiAoIXJlY29yZCB8fCAhc3ltYm9sKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcHJvdmVuYW5jZSB3aGlsZSByZXNvbHZpbmcgJHtub2RlLmtpbmR9LmApXG5cbiAgICBjb25zdCByYW5nZVJvbGUgPSByb2xlID09IFwiY2FsbFwiID8gKG5vZGUua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIgPyBcIm1lbWJlclwiIDogXCJjYWxsZWVcIikgOlxuICAgICAgcm9sZSA9PSBcImNvbnN0cnVjdFwiID8gKG5vZGUua2luZCA9PSBcIkVycm9yQ29uc3RydWN0aW9uXCIgPyBcInR5cGVcIiA6IG5vZGUua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiID8gXCJjbGFzc1wiIDogXCJyZWNvcmRcIikgOlxuICAgICAgICByb2xlID09IFwibWVtYmVyXCIgfHwgcm9sZSA9PSBcIndyaXRlXCIgJiYgbm9kZS5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiA/IFwibWVtYmVyXCIgOiByb2xlID09IFwidHlwZVwiID8gXCJ0eXBlXCIgOiBcIm5hbWVcIlxuICAgIGNvbnN0IGxvY2F0aW9uID0gcmVjb3JkLnJhbmdlc1tyYW5nZVJvbGVdID8/IChcImxvY2F0aW9uXCIgaW4gbm9kZSA/IG5vZGUubG9jYXRpb24gOiBwcmltYXJ5TG9jYXRpb24ocmVjb3JkLm9yaWdpbikpXG5cbiAgICByZWNvcmQuc3ltYm9sSWQgPSBzeW1ib2xJZFxuICAgIHN5bWJvbC5yZWZlcmVuY2VzLnB1c2goe2xvY2F0aW9uLCBub2RlSWQ6IHJlY29yZC5pZCwgcm9sZX0pXG4gIH1cbn1cbiJdfQ==
|
|
1048
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmVuYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBRW5FLDZGQUE2RjtBQUM3RixNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBQ2xDLHVHQUF1RztBQUN2RyxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFN0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNO0lBQzFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU07SUFDM0MsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUU3QixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUk7SUFDdkMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDdkMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDdkUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0s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aGVja1xuXG5pbXBvcnQge2NyZWF0ZUNvb3JkaW5hdGVJbmRleCwgaW5kZXhlZFBvaW50QXR9IGZyb20gXCIuL2xvY2F0aW9uLmpzXCJcblxuLyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj4+Pn0gKi9cbmNvbnN0IHBhcnNlclJhbmdlcyA9IG5ldyBXZWFrTWFwKClcbi8qKiBAdHlwZSB7V2Vha01hcDxpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2UsIFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUNvb3JkaW5hdGVJbmRleD4+fSAqL1xuY29uc3Qgc291cmNlQ29vcmRpbmF0ZUluZGV4ZXMgPSBuZXcgV2Vha01hcCgpXG5cbi8qKlxuICogUmVjb3JkcyBwYXJzZXItcHJvdmlkZWQgc2VtYW50aWMtdG9rZW4gcmFuZ2VzIHdpdGhvdXQgZXhwb3NpbmcgcGFyc2VyIHRyZWVzLlxuICogQHBhcmFtIHtvYmplY3R9IG5vZGUgLSBTZW1hbnRpYyBub2RlLlxuICogQHBhcmFtIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IHJvbGUgcmFuZ2VzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYXJzZXJSYW5nZXMobm9kZSwgcmFuZ2VzKSB7XG4gIHBhcnNlclJhbmdlcy5zZXQobm9kZSwgcmFuZ2VzKVxufVxuXG4vKipcbiAqIFJlY29yZHMgcGFyc2VyIHJhbmdlcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBzZW1hbnRpYyBub2RlLlxuICogQHRlbXBsYXRlIHtvYmplY3R9IE5vZGVcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFNlbWFudGljIG5vZGUuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gRXhhY3Qgcm9sZSByYW5nZXMuXG4gKiBAcmV0dXJucyB7Tm9kZX0gVGhlIHNhbWUgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhQYXJzZXJSYW5nZXMobm9kZSwgcmFuZ2VzKSB7XG4gIHNldFBhcnNlclJhbmdlcyhub2RlLCByYW5nZXMpXG5cbiAgcmV0dXJuIG5vZGVcbn1cblxuLyoqXG4gKiBSZXR1cm5zIG9uZSBwYXJzZXItb3duZWQgdG9rZW4gcmFuZ2Ugd2hpbGUgZnJvbnRlbmQgdmFsaWRhdGlvbiBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBub2RlIC0gU2VtYW50aWMgbm9kZSBvciB0eXBlIHJlZmVyZW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gRXhhY3Qgc2VtYW50aWMgdG9rZW4gcm9sZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBQYXJzZXIgcmFuZ2Ugd2hlbiBwcmVzZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VyUmFuZ2VGb3Iobm9kZSwgcm9sZSkge1xuICByZXR1cm4gcGFyc2VyUmFuZ2VzLmdldChub2RlKT8uW3JvbGVdXG59XG5cbi8qKlxuICogQWRkcyBkZXRlcm1pbmlzdGljIHByb3ZlbmFuY2UgdG8gYSB2YWxpZGF0ZWQgZnJvbnRlbmQgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIFBhcnNlZCBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlLmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IHNvdXJjZS5sYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Uuc291cmNlIC0gRXhhY3Qgc291cmNlIGNvbnRlbnQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gVGhlIHNhbWUgc2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGVQYXJzZWRNb2R1bGUobW9kdWxlLCB7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2V9KSB7XG4gIGNvbnN0IHNvdXJjZXMgPSBbe2NvbnRlbnQ6IHNvdXJjZSwgZmlsZW5hbWUsIGlkOiBcInNvdXJjZTowXCIsIGxhbmd1YWdlfV1cbiAgY29uc3QgZW50cmllcyA9IHNlbWFudGljRW50cmllcyhtb2R1bGUpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlPn0gKi9cbiAgY29uc3QgcmVjb3Jkc0J5UGF0aCA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdfSAqL1xuICBjb25zdCByZWNvcmRzID0gW11cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcmFuZ2VzID0gcGFyc2VyUmFuZ2VzLmdldChlbnRyeS5ub2RlKSA/PyB7fVxuICAgIGNvbnN0IGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIGVudHJ5Lm5vZGUgPyBlbnRyeS5ub2RlLmxvY2F0aW9uIDogcmFuZ2VzLnR5cGUgPz8gZW50cnkub3duZXJMb2NhdGlvblxuICAgIGNvbnN0IHJlbGF0ZWQgPSB7bG9jYXRpb24sIHNvdXJjZUlkOiBcInNvdXJjZTowXCJ9XG4gICAgY29uc3Qgb3JpZ2luID0gZW50cnkucGF0aC5zdGFydHNXaXRoKFwiL2NhcGFiaWxpdGllcy9cIilcbiAgICAgID8ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInN5bnRoZXRpY1wiKSwgcmVhc29uOiBcImNvbXBpbGVyLWF1dGhvcml6ZWQgY2FwYWJpbGl0eVwiLCByZWxhdGVkT3JpZ2luczogW3JlbGF0ZWRdfVxuICAgICAgOiBlbnRyeS5ub2RlLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgZW50cnkubm9kZS5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCJcbiAgICAgICAgPyB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZGVyaXZlZFwiKSwgb3JpZ2luczogW3JlbGF0ZWRdfVxuICAgICAgICA6IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJzb3VyY2VcIiksIGxvY2F0aW9uLCBzb3VyY2VJZDogXCJzb3VyY2U6MFwifVxuICAgIGNvbnN0IHNvdXJjZVByb3ZlbmFuY2UgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlU291cmNlUHJvdmVuYW5jZX0gKi8gKHtcbiAgICAgIG9yaWdpbixcbiAgICAgIHJhbmdlcyxcbiAgICAgIHNjaGVtYTogXCJTZW1hbnRpZm9sZE5vZGVQcm92ZW5hbmNlXCIsXG4gICAgICB2ZXJzaW9uOiAxXG4gICAgfSlcbiAgICBjb25zdCByZWNvcmQgPSB7XG4gICAgICBpZDogYG5vZGU6JHtpbmRleH1gLFxuICAgICAga2luZDogZW50cnkubm9kZS5raW5kLFxuICAgICAgb3JpZ2luOiBzb3VyY2VQcm92ZW5hbmNlLm9yaWdpbixcbiAgICAgIHBhdGg6IGVudHJ5LnBhdGgsXG4gICAgICByYW5nZXM6IHNvdXJjZVByb3ZlbmFuY2UucmFuZ2VzXG4gICAgfVxuXG4gICAgcmVjb3Jkcy5wdXNoKHJlY29yZClcbiAgICByZWNvcmRzQnlQYXRoLnNldChlbnRyeS5wYXRoLCByZWNvcmQpXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoZW50cnkubm9kZSkpIFJlZmxlY3Quc2V0KGVudHJ5Lm5vZGUsIFwic291cmNlUHJvdmVuYW5jZVwiLCBzb3VyY2VQcm92ZW5hbmNlKVxuICB9XG5cbiAgY29uc3Qgc3ltYm9scyA9IHJlc29sdmVTeW1ib2xzKG1vZHVsZSwgcmVjb3Jkc0J5UGF0aClcblxuICBtb2R1bGUucHJvdmVuYW5jZSA9IHtcbiAgICBjb29yZGluYXRlU3lzdGVtOiBcInV0ZjE2XCIsXG4gICAgbm9kZXM6IHJlY29yZHMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiLFxuICAgIHNvdXJjZXMsXG4gICAgc3ltYm9scyxcbiAgICB2ZXJzaW9uOiAxXG4gIH1cblxuICByZXR1cm4gbW9kdWxlXG59XG5cbi8qKlxuICogUmVidWlsZHMgY2Fub25pY2FsIGdlbmVyYXRpb24gbWV0YWRhdGEgd2l0aG91dCB0cnVzdGluZyBjYWxsZXItcHJvdmlkZWQgaWRlbnRpdGllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW3Byb3ZpZGVkU291cmNlc10gLSBBZGRpdGlvbmFsIHNvdXJjZSBjb250ZW50LlxuICogQHJldHVybnMge3twcm92ZW5hbmNlOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZSwgcmVjb3JkRm9yOiAobm9kZTogaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGUsIHBhdGg/OiBzdHJpbmcpID0+IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZX19IENhbm9uaWNhbCBpbmRleC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdlbmVyYXRpb25JbmRleChtb2R1bGUsIHByb3ZpZGVkU291cmNlcyA9IFtdKSB7XG4gIGNvbnN0IGVudHJpZXMgPSBzZW1hbnRpY0VudHJpZXMobW9kdWxlKVxuICBjb25zdCBwcmlvclNvdXJjZXMgPSB1c2FibGVTb3VyY2VQcm92ZW5hbmNlKG1vZHVsZS5wcm92ZW5hbmNlKVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSAqL1xuICBjb25zdCBzb3VyY2VzID0gW11cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2U+fSAqL1xuICBjb25zdCBwcmlvclNvdXJjZXNCeUlkID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2YgcHJvdmlkZWRTb3VyY2VzKSBhZGRTb3VyY2Uoc291cmNlLmZpbGVuYW1lLCBzb3VyY2UuY29udGVudCwgc291cmNlLmxhbmd1YWdlID8/IG51bGwpXG4gIGlmIChwcmlvclNvdXJjZXMpIHtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwcmlvclNvdXJjZXMuc291cmNlcykge1xuICAgICAgY29uc3QgY2Fub25pY2FsID0gYWRkU291cmNlKHNvdXJjZS5maWxlbmFtZSwgc291cmNlLmNvbnRlbnQsIHNvdXJjZS5sYW5ndWFnZSlcblxuICAgICAgcHJpb3JTb3VyY2VzQnlJZC5zZXQoc291cmNlLmlkLCBjYW5vbmljYWwpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIGVudHJ5Lm5vZGUgPyBlbnRyeS5ub2RlLmxvY2F0aW9uIDogZW50cnkub3duZXJMb2NhdGlvblxuXG4gICAgaWYgKCFzb3VyY2VzLnNvbWUoKHNvdXJjZSkgPT4gc291cmNlLmZpbGVuYW1lID09IGxvY2F0aW9uLmZpbGVuYW1lKSkgYWRkU291cmNlKGxvY2F0aW9uLmZpbGVuYW1lLCBudWxsLCBudWxsKVxuICB9XG4gIGNvbnN0IHZlcmlmaWFibGVTb3VyY2VzID0gc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLmNvbnRlbnQgIT0gbnVsbClcblxuICAvKiogQHR5cGUge01hcDxvYmplY3QsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZVtdPn0gKi9cbiAgY29uc3QgcmVjb3Jkc0J5Tm9kZSA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZT59ICovXG4gIGNvbnN0IHJlY29yZHNCeVBhdGggPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2VbXX0gKi9cbiAgY29uc3QgcmVjb3JkcyA9IFtdXG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGxvY2F0ZWQgPSBcImxvY2F0aW9uXCIgaW4gZW50cnkubm9kZSA/IGVudHJ5Lm5vZGUubG9jYXRpb24gOiBlbnRyeS5vd25lckxvY2F0aW9uXG4gICAgY29uc3QgYXNzb2NpYXRlZCA9IHVzYWJsZU5vZGVQcm92ZW5hbmNlKFJlZmxlY3QuZ2V0KGVudHJ5Lm5vZGUsIFwic291cmNlUHJvdmVuYW5jZVwiKSlcbiAgICBjb25zdCByYW5nZXMgPSBhc3NvY2lhdGVkID8gdmFsaWRSYW5nZXMoYXNzb2NpYXRlZC5yYW5nZXMsIHZlcmlmaWFibGVTb3VyY2VzKSA6IHt9XG4gICAgY29uc3Qgbm9ybWFsaXplZE9yaWdpbiA9IGFzc29jaWF0ZWRcbiAgICAgID8gbm9ybWFsaXplT3JpZ2luKGFzc29jaWF0ZWQub3JpZ2luLCBwcmlvclNvdXJjZXNCeUlkLCB2ZXJpZmlhYmxlU291cmNlcylcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZmFsbGJhY2tTb3VyY2UgPSBzb3VyY2VGb3JMb2NhdGlvbihsb2NhdGVkLCBzb3VyY2VzKVxuICAgIGNvbnN0IG9yaWdpbiA9IGVudHJ5LnBhdGguc3RhcnRzV2l0aChcIi9jYXBhYmlsaXRpZXMvXCIpXG4gICAgICA/IHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJzeW50aGV0aWNcIiksIHJlYXNvbjogXCJjb21waWxlci1hdXRob3JpemVkIGNhcGFiaWxpdHlcIixcbiAgICAgICAgcmVsYXRlZE9yaWdpbnM6IFt7bG9jYXRpb246IGxvY2F0ZWQsIHNvdXJjZUlkOiBmYWxsYmFja1NvdXJjZS5pZH1dfVxuICAgICAgOiBub3JtYWxpemVkT3JpZ2luID8/IHNvdXJjZU9yaWdpbihmYWxsYmFja1NvdXJjZSwgbG9jYXRlZClcblxuICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgIGlkOiBgbm9kZToke2luZGV4fWAsXG4gICAgICBraW5kOiBlbnRyeS5ub2RlLmtpbmQsXG4gICAgICBvcmlnaW4sXG4gICAgICBwYXRoOiBlbnRyeS5wYXRoLFxuICAgICAgcmFuZ2VzXG4gICAgfVxuXG4gICAgcmVjb3Jkcy5wdXNoKHJlY29yZClcbiAgICByZWNvcmRzQnlQYXRoLnNldChlbnRyeS5wYXRoLCByZWNvcmQpXG4gICAgY29uc3Qgb2NjdXJyZW5jZXMgPSByZWNvcmRzQnlOb2RlLmdldChlbnRyeS5ub2RlKSA/PyBbXVxuXG4gICAgb2NjdXJyZW5jZXMucHVzaChyZWNvcmQpXG4gICAgcmVjb3Jkc0J5Tm9kZS5zZXQoZW50cnkubm9kZSwgb2NjdXJyZW5jZXMpXG4gIH1cblxuICBjb25zdCBzeW1ib2xzID0gcmVzb2x2ZVN5bWJvbHMobW9kdWxlLCByZWNvcmRzQnlQYXRoKVxuICBjb25zdCBwcm92ZW5hbmNlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZX0gKi8gKHtcbiAgICBjb29yZGluYXRlU3lzdGVtOiBcInV0ZjE2XCIsXG4gICAgbm9kZXM6IHJlY29yZHMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiLFxuICAgIHNvdXJjZXMsXG4gICAgc3ltYm9scyxcbiAgICB2ZXJzaW9uOiAxXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBwcm92ZW5hbmNlLFxuICAgIHJlY29yZEZvcihub2RlLCBwYXRoKSB7XG4gICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJlY29yZHNCeU5vZGUuZ2V0KG5vZGUpXG5cbiAgICAgIGlmICghb2NjdXJyZW5jZXMpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiU2VtYW50aWMgbm9kZSBpcyBub3QgcGFydCBvZiB0aGlzIG1vZHVsZS5cIilcbiAgICAgIGlmIChwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gb2NjdXJyZW5jZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUucGF0aCA9PSBwYXRoKVxuXG4gICAgICAgIGlmICghcmVjb3JkKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgU2VtYW50aWMgbm9kZSBkb2VzIG5vdCBvY2N1ciBhdCAnJHtwYXRofScuYClcblxuICAgICAgICByZXR1cm4gcmVjb3JkXG4gICAgICB9XG4gICAgICBpZiAob2NjdXJyZW5jZXMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJTaGFyZWQgc2VtYW50aWMgbm9kZSByZXF1aXJlcyBhbiBvY2N1cnJlbmNlIHBhdGguXCIpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvY2N1cnJlbmNlc1swXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgb25lIGNhbm9uaWNhbCBzb3VyY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBjb250ZW50IC0gU291cmNlIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlIHwgbnVsbH0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IENhbm9uaWNhbCBzb3VyY2UuXG4gICAqL1xuICBmdW5jdGlvbiBhZGRTb3VyY2UoZmlsZW5hbWUsIGNvbnRlbnQsIGxhbmd1YWdlKSB7XG4gICAgaWYgKHR5cGVvZiBmaWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IGNvbnRlbnQgIT09IG51bGwgJiYgdHlwZW9mIGNvbnRlbnQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgbGFuZ3VhZ2UgIT09IG51bGwgJiYgIVtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIiwgXCJrb3RsaW5cIiwgXCJweXRob25cIiwgXCJjc2hhcnBcIiwgXCJnb1wiLCBcImNcIiwgXCJjcHBcIiwgXCJydXN0XCIsIFwic3dpZnRcIiwgXCJkYXJ0XCIsIFwiemlnXCJdLmluY2x1ZGVzKGxhbmd1YWdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1hbGZvcm1lZCBzZW1hbnRpYyBzb3VyY2UgcmVnaXN0cnkgZW50cnkuXCIpXG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBzb3VyY2VzLmZpbmQoKHNvdXJjZSkgPT4gc291cmNlLmZpbGVuYW1lID09IGZpbGVuYW1lICYmIHNvdXJjZS5jb250ZW50ID09IGNvbnRlbnQpXG5cbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZ1xuXG4gICAgY29uc3QgcmVnaXN0ZXJlZCA9IHtjb250ZW50LCBmaWxlbmFtZSwgaWQ6IGBzb3VyY2U6JHtzb3VyY2VzLmxlbmd0aH1gLCBsYW5ndWFnZX1cblxuICAgIHNvdXJjZXMucHVzaChyZWdpc3RlcmVkKVxuXG4gICAgcmV0dXJuIHJlZ2lzdGVyZWRcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHNhZmUgcHJpbWFyeSBvcmlnaW5hbCBsb2NhdGlvbiBmb3IgY2xvc2VkIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIENsb3NlZCBwcm92ZW5hbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFByaW1hcnkgbG9jYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmltYXJ5TG9jYXRpb24ob3JpZ2luKSB7XG4gIGlmIChvcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiKSByZXR1cm4gb3JpZ2luLmxvY2F0aW9uXG4gIGlmIChvcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIikgcmV0dXJuIG9yaWdpbi5vcmlnaW5zWzBdPy5sb2NhdGlvblxuXG4gIHJldHVybiBvcmlnaW4ucmVsYXRlZE9yaWdpbnNbMF0/LmxvY2F0aW9uXG59XG5cbi8qKlxuICogQWNjZXB0cyBzb3VyY2UgbWV0YWRhdGEgb25seSB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIHRoZSBzZW1hbnRpYyBub2RlIGl0IGRlc2NyaWJlcy5cbiAqIFJlZ2lzdHJ5LWxvY2FsIElEcyBhbmQgcGF0aHMgYXJlIGludGVudGlvbmFsbHkgaWdub3JlZCBhbmQgcmVidWlsdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlIHwgdW5kZWZpbmVkfSByZWNvcmQgLSBDYW5kaWRhdGUgbm9kZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2UgfCB1bmRlZmluZWR9IFVzYWJsZSBhc3NvY2lhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdXNhYmxlTm9kZVByb3ZlbmFuY2UocmVjb3JkKSB7XG4gIGlmICghcmVjb3JkIHx8IHJlY29yZC5zY2hlbWEgIT0gXCJTZW1hbnRpZm9sZE5vZGVQcm92ZW5hbmNlXCIgfHwgcmVjb3JkLnZlcnNpb24gIT0gMSB8fFxuICAgICFyZWNvcmQub3JpZ2luIHx8IHR5cGVvZiByZWNvcmQub3JpZ2luICE9IFwib2JqZWN0XCIgfHxcbiAgICAhcmVjb3JkLnJhbmdlcyB8fCB0eXBlb2YgcmVjb3JkLnJhbmdlcyAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmVjb3JkLnJhbmdlcykpIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gcmVjb3JkXG59XG5cbi8qKlxuICogUmV0YWlucyBhIHZhbGlkIHNvdXJjZSByZWdpc3RyeSBpbmRlcGVuZGVudGx5IGZyb20gcG90ZW50aWFsbHkgc3RhbGUgbm9kZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb3ZlbmFuY2UgfCB1bmRlZmluZWR9IHByb3ZlbmFuY2UgLSBDYW5kaWRhdGUgcHJvdmVuYW5jZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvdmVuYW5jZSB8IHVuZGVmaW5lZH0gUHJvdmVuYW5jZSB3aXRoIGEgdXNhYmxlIHNvdXJjZSByZWdpc3RyeS5cbiAqL1xuZnVuY3Rpb24gdXNhYmxlU291cmNlUHJvdmVuYW5jZShwcm92ZW5hbmNlKSB7XG4gIGlmICghcHJvdmVuYW5jZSB8fCBwcm92ZW5hbmNlLnNjaGVtYSAhPSBcIlNlbWFudGlmb2xkUHJvdmVuYW5jZVwiIHx8IHByb3ZlbmFuY2UudmVyc2lvbiAhPSAxIHx8XG4gICAgcHJvdmVuYW5jZS5jb29yZGluYXRlU3lzdGVtICE9IFwidXRmMTZcIiB8fCAhQXJyYXkuaXNBcnJheShwcm92ZW5hbmNlLnNvdXJjZXMpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3Qgc291cmNlSWRzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2YgcHJvdmVuYW5jZS5zb3VyY2VzKSB7XG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZS5pZCAhPSBcInN0cmluZ1wiIHx8IHNvdXJjZUlkcy5oYXMoc291cmNlLmlkKSB8fCB0eXBlb2Ygc291cmNlLmZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIHNvdXJjZS5maWxlbmFtZS5sZW5ndGggPT0gMCB8fFxuICAgICAgc291cmNlLmNvbnRlbnQgIT09IG51bGwgJiYgdHlwZW9mIHNvdXJjZS5jb250ZW50ICE9IFwic3RyaW5nXCIgfHwgc291cmNlLmxhbmd1YWdlICE9PSBudWxsICYmXG4gICAgICAhW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiLCBcImtvdGxpblwiLCBcInB5dGhvblwiLCBcImNzaGFycFwiLCBcImdvXCIsIFwiY1wiLCBcImNwcFwiLCBcInJ1c3RcIiwgXCJzd2lmdFwiLCBcImRhcnRcIiwgXCJ6aWdcIl0uaW5jbHVkZXMoc291cmNlLmxhbmd1YWdlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHNvdXJjZUlkcy5hZGQoc291cmNlLmlkKVxuICB9XG5cbiAgcmV0dXJuIHByb3ZlbmFuY2Vcbn1cblxuLyoqXG4gKiBSZXRhaW5zIG9ubHkgc2VsZi1jb25zaXN0ZW50IHNvdXJjZSByYW5nZXMuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+Pn0gcmFuZ2VzIC0gQ2FuZGlkYXRlIHJhbmdlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBDYW5vbmljYWwgc291cmNlcy5cbiAqIEByZXR1cm5zIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj59IFNhZmUgcmFuZ2VzLlxuICovXG5mdW5jdGlvbiB2YWxpZFJhbmdlcyhyYW5nZXMsIHNvdXJjZXMpIHtcbiAgaWYgKCFyYW5nZXMgfHwgdHlwZW9mIHJhbmdlcyAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmFuZ2VzKSkgcmV0dXJuIHt9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPn0gKi9cbiAgY29uc3QgdmFsaWQgPSB7fVxuXG4gIGZvciAoY29uc3QgW3JvbGUsIGxvY2F0aW9uXSBvZiBPYmplY3QuZW50cmllcyhyYW5nZXMpKSB7XG4gICAgaWYgKHZhbGlkTG9jYXRpb24obG9jYXRpb24sIHNvdXJjZXMpKSB2YWxpZFtyb2xlXSA9IGxvY2F0aW9uXG4gIH1cblxuICByZXR1cm4gdmFsaWRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgY2xvc2VkIG9yaWdpbiB3aGlsZSByZW1hcHBpbmcgdW50cnVzdGVkIHNvdXJjZSBpZGVudGl0aWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBDYW5kaWRhdGUgb3JpZ2luLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2U+fSBwcmlvclNvdXJjZXMgLSBQcmlvci10by1jYW5vbmljYWwgc291cmNlIG1hcHBpbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gQ2Fub25pY2FsIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY09yaWdpbiB8IHVuZGVmaW5lZH0gU2FmZSBvcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9yaWdpbihvcmlnaW4sIHByaW9yU291cmNlcywgc291cmNlcykge1xuICBpZiAoIW9yaWdpbiB8fCB0eXBlb2Ygb3JpZ2luICE9IFwib2JqZWN0XCIpIHJldHVybiB1bmRlZmluZWRcblxuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJzb3VyY2VcIiAmJiB2YWxpZExvY2F0aW9uKG9yaWdpbi5sb2NhdGlvbiwgc291cmNlcykpIHtcbiAgICBjb25zdCBjbGFpbWVkID0gcHJpb3JTb3VyY2VzLmdldChvcmlnaW4uc291cmNlSWQpXG4gICAgY29uc3Qgc291cmNlID0gY2xhaW1lZCAmJiBzb3VyY2VPd25zTG9jYXRpb24oY2xhaW1lZCwgb3JpZ2luLmxvY2F0aW9uKSA/IGNsYWltZWQgOiBzb3VyY2VGb3JMb2NhdGlvbihvcmlnaW4ubG9jYXRpb24sIHNvdXJjZXMpXG5cbiAgICByZXR1cm4gc291cmNlT3JpZ2luKHNvdXJjZSwgb3JpZ2luLmxvY2F0aW9uKVxuICB9XG4gIGlmIChvcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIiAmJiBBcnJheS5pc0FycmF5KG9yaWdpbi5vcmlnaW5zKSAmJiBvcmlnaW4ub3JpZ2lucy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgb3JpZ2lucyA9IG9yaWdpbi5vcmlnaW5zLm1hcCgocmVsYXRlZCkgPT4gbm9ybWFsaXplUmVsYXRlZE9yaWdpbihyZWxhdGVkLCBwcmlvclNvdXJjZXMsIHNvdXJjZXMpKVxuXG4gICAgaWYgKG9yaWdpbnMuZXZlcnkoQm9vbGVhbikpIHJldHVybiB7a2luZDogXCJkZXJpdmVkXCIsIG9yaWdpbnM6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119ICovIChvcmlnaW5zKX1cbiAgfVxuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJzeW50aGV0aWNcIiAmJiB0eXBlb2Ygb3JpZ2luLnJlYXNvbiA9PSBcInN0cmluZ1wiICYmIEFycmF5LmlzQXJyYXkob3JpZ2luLnJlbGF0ZWRPcmlnaW5zKSkge1xuICAgIGNvbnN0IHJlbGF0ZWRPcmlnaW5zID0gb3JpZ2luLnJlbGF0ZWRPcmlnaW5zLm1hcCgocmVsYXRlZCkgPT4gbm9ybWFsaXplUmVsYXRlZE9yaWdpbihyZWxhdGVkLCBwcmlvclNvdXJjZXMsIHNvdXJjZXMpKVxuXG4gICAgaWYgKHJlbGF0ZWRPcmlnaW5zLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICByZXR1cm4ge2tpbmQ6IFwic3ludGhldGljXCIsIHJlYXNvbjogb3JpZ2luLnJlYXNvbiwgcmVsYXRlZE9yaWdpbnM6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119ICovIChyZWxhdGVkT3JpZ2lucyl9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgb25lIHJlbGF0ZWQgb3JpZ2luLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW59IHJlbGF0ZWQgLSBDYW5kaWRhdGUgcmVsYXRlZCBvcmlnaW4uXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZT59IHByaW9yU291cmNlcyAtIFByaW9yIHNvdXJjZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZVtdfSBzb3VyY2VzIC0gQ2Fub25pY2FsIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luIHwgdW5kZWZpbmVkfSBTYWZlIHJlbGF0ZWQgb3JpZ2luLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVSZWxhdGVkT3JpZ2luKHJlbGF0ZWQsIHByaW9yU291cmNlcywgc291cmNlcykge1xuICBpZiAoIXJlbGF0ZWQgfHwgIXZhbGlkTG9jYXRpb24ocmVsYXRlZC5sb2NhdGlvbiwgc291cmNlcykpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBjbGFpbWVkID0gcHJpb3JTb3VyY2VzLmdldChyZWxhdGVkLnNvdXJjZUlkKVxuICBjb25zdCBzb3VyY2UgPSBjbGFpbWVkICYmIHNvdXJjZU93bnNMb2NhdGlvbihjbGFpbWVkLCByZWxhdGVkLmxvY2F0aW9uKSA/IGNsYWltZWQgOiBzb3VyY2VGb3JMb2NhdGlvbihyZWxhdGVkLmxvY2F0aW9uLCBzb3VyY2VzKVxuICBjb25zdCBub3JtYWxpemVkID0ge2xvY2F0aW9uOiByZWxhdGVkLmxvY2F0aW9uLCBzb3VyY2VJZDogc291cmNlLmlkfVxuXG4gIGlmICh0eXBlb2YgcmVsYXRlZC5yb2xlID09IFwic3RyaW5nXCIpIE9iamVjdC5hc3NpZ24obm9ybWFsaXplZCwge3JvbGU6IHJlbGF0ZWQucm9sZX0pXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBDaGVja3Mgbm9ybWFsaXplZCBjb29yZGluYXRlcyBhZ2FpbnN0IGV4YWN0IHNvdXJjZSBjb250ZW50IHdoZW4gYXZhaWxhYmxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENhbmRpZGF0ZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBSZWdpc3RlcmVkIHNvdXJjZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbG9jYXRpb24gaXMgc2FmZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRMb2NhdGlvbihsb2NhdGlvbiwgc291cmNlcykge1xuICBpZiAoIWxvY2F0aW9uIHx8IHR5cGVvZiBsb2NhdGlvbi5maWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8ICFsb2NhdGlvbi5zdGFydCB8fCAhbG9jYXRpb24uZW5kIHx8XG4gICAgIU51bWJlci5pc0ludGVnZXIobG9jYXRpb24uc3RhcnQub2Zmc2V0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihsb2NhdGlvbi5lbmQub2Zmc2V0KSB8fCBsb2NhdGlvbi5zdGFydC5vZmZzZXQgPCAwIHx8XG4gICAgbG9jYXRpb24uZW5kLm9mZnNldCA8IGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCB8fCAhdmFsaWRQb2ludFNoYXBlKGxvY2F0aW9uLnN0YXJ0KSB8fCAhdmFsaWRQb2ludFNoYXBlKGxvY2F0aW9uLmVuZCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBzb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UuZmlsZW5hbWUgPT0gbG9jYXRpb24uZmlsZW5hbWUpXG5cbiAgcmV0dXJuIGNhbmRpZGF0ZXMuc29tZSgoc291cmNlKSA9PiBzb3VyY2VPd25zTG9jYXRpb24oc291cmNlLCBsb2NhdGlvbikpXG59XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgb25lIGlkZW50aWZpZWQgcmVnaXN0cnkgc291cmNlIG93bnMgYSBub3JtYWxpemVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IHNvdXJjZSAtIElkZW50aWZpZWQgc291cmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIENhbmRpZGF0ZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBzb3VyY2Ugb3ducyB0aGUgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHNvdXJjZU93bnNMb2NhdGlvbihzb3VyY2UsIGxvY2F0aW9uKSB7XG4gIGlmIChzb3VyY2UuZmlsZW5hbWUgIT0gbG9jYXRpb24uZmlsZW5hbWUpIHJldHVybiBmYWxzZVxuICBpZiAoc291cmNlLmNvbnRlbnQgPT0gbnVsbCkgcmV0dXJuIHRydWVcbiAgaWYgKGxvY2F0aW9uLmVuZC5vZmZzZXQgPiBzb3VyY2UuY29udGVudC5sZW5ndGgpIHJldHVybiBmYWxzZVxuICBsZXQgY29vcmRpbmF0ZXMgPSBzb3VyY2VDb29yZGluYXRlSW5kZXhlcy5nZXQoc291cmNlKVxuXG4gIGlmICghY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcyA9IGNyZWF0ZUNvb3JkaW5hdGVJbmRleChzb3VyY2UuY29udGVudClcbiAgICBzb3VyY2VDb29yZGluYXRlSW5kZXhlcy5zZXQoc291cmNlLCBjb29yZGluYXRlcylcbiAgfVxuXG4gIHJldHVybiBzYW1lUG9pbnQoaW5kZXhlZFBvaW50QXQoY29vcmRpbmF0ZXMsIGxvY2F0aW9uLnN0YXJ0Lm9mZnNldCksIGxvY2F0aW9uLnN0YXJ0KSAmJlxuICAgIHNhbWVQb2ludChpbmRleGVkUG9pbnRBdChjb29yZGluYXRlcywgbG9jYXRpb24uZW5kLm9mZnNldCksIGxvY2F0aW9uLmVuZClcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGludGVnZXIgc2hhcGUgb2Ygb25lIHNvdXJjZSBwb2ludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VQb2ludH0gcG9pbnQgLSBTb3VyY2UgcG9pbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBpdCBpcyBzdHJ1Y3R1cmFsbHkgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkUG9pbnRTaGFwZShwb2ludCkge1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwb2ludC5saW5lKSAmJiBwb2ludC5saW5lID49IDEgJiYgTnVtYmVyLmlzSW50ZWdlcihwb2ludC5jb2x1bW4pICYmIHBvaW50LmNvbHVtbiA+PSAxXG59XG5cbi8qKlxuICogQ29tcGFyZXMgbm9ybWFsaXplZCBzb3VyY2UgY29vcmRpbmF0ZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlUG9pbnR9IGxlZnQgLSBMZWZ0IHBvaW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSByaWdodCAtIFJpZ2h0IHBvaW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYWxsIGNvb3JkaW5hdGVzIG1hdGNoLlxuICovXG5mdW5jdGlvbiBzYW1lUG9pbnQobGVmdCwgcmlnaHQpIHtcbiAgcmV0dXJuIGxlZnQub2Zmc2V0ID09IHJpZ2h0Lm9mZnNldCAmJiBsZWZ0LmxpbmUgPT0gcmlnaHQubGluZSAmJiBsZWZ0LmNvbHVtbiA9PSByaWdodC5jb2x1bW5cbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZGV0ZXJtaW5pc3RpYyBzb3VyY2Ugb3duaW5nIGEgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIENhbm9uaWNhbCBzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuUmVnaXN0ZXJlZFNvdXJjZX0gT3duaW5nIHNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gc291cmNlRm9yTG9jYXRpb24obG9jYXRpb24sIHNvdXJjZXMpIHtcbiAgY29uc3Qgc291cmNlID0gc291cmNlcy5maW5kKChjYW5kaWRhdGUpID0+IHNvdXJjZU93bnNMb2NhdGlvbihjYW5kaWRhdGUsIGxvY2F0aW9uKSlcblxuICBpZiAoIXNvdXJjZSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5vIHJlZ2lzdGVyZWQgc291cmNlIG93bnMgJHtsb2NhdGlvbi5maWxlbmFtZX06JHtsb2NhdGlvbi5zdGFydC5vZmZzZXR9LmApXG5cbiAgcmV0dXJuIHNvdXJjZVxufVxuXG4vKipcbiAqIENyZWF0ZXMgZGlyZWN0IHNvdXJjZSBwcm92ZW5hbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2V9IHNvdXJjZSAtIFNvdXJjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZU9yaWdpbn0gT3JpZ2luLlxuICovXG5mdW5jdGlvbiBzb3VyY2VPcmlnaW4oc291cmNlLCBsb2NhdGlvbikge1xuICByZXR1cm4ge2tpbmQ6IFwic291cmNlXCIsIGxvY2F0aW9uLCBzb3VyY2VJZDogc291cmNlLmlkfVxufVxuXG4vKipcbiAqIEZpbmRzIG9uZSBub2RlIHByb3ZlbmFuY2UgcmVjb3JkIGJ5IHNlbWFudGljIG9iamVjdCBvciBub2RlIGlkZW50aXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlIHwgc3RyaW5nfSBub2RlIC0gU2VtYW50aWMgb2JqZWN0IG9yIG5vZGUgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlfSBQcm92ZW5hbmNlIHJlY29yZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVQcm92ZW5hbmNlKG1vZHVsZSwgbm9kZSkge1xuICByZXF1aXJlUHJvdmVuYW5jZShtb2R1bGUpXG4gIGNvbnN0IGluZGV4ID0gY3JlYXRlR2VuZXJhdGlvbkluZGV4KG1vZHVsZSlcbiAgY29uc3QgcmVjb3JkID0gdHlwZW9mIG5vZGUgPT0gXCJzdHJpbmdcIlxuICAgID8gaW5kZXgucHJvdmVuYW5jZS5ub2Rlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PSBub2RlKVxuICAgIDogaW5kZXgucmVjb3JkRm9yKG5vZGUpXG5cbiAgaWYgKCFyZWNvcmQpIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIHNlbWFudGljIG5vZGU6ICR7bm9kZX1gKVxuXG4gIHJldHVybiByZWNvcmRcbn1cblxuLyoqXG4gKiBGaW5kcyBvbmUgc2VtYW50aWMgc3ltYm9sIHJlY29yZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbElkIC0gU3ltYm9sIGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNTeW1ib2xQcm92ZW5hbmNlfSBTeW1ib2wgcmVjb3JkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ltYm9sUHJvdmVuYW5jZShtb2R1bGUsIHN5bWJvbElkKSB7XG4gIHJlcXVpcmVQcm92ZW5hbmNlKG1vZHVsZSlcbiAgY29uc3Qgc3ltYm9sID0gY3JlYXRlR2VuZXJhdGlvbkluZGV4KG1vZHVsZSkucHJvdmVuYW5jZS5zeW1ib2xzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09IHN5bWJvbElkKVxuXG4gIGlmICghc3ltYm9sKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBzZW1hbnRpYyBzeW1ib2w6ICR7c3ltYm9sSWR9YClcblxuICByZXR1cm4gc3ltYm9sXG59XG5cbi8qKlxuICogUmVxdWlyZXMgZnJvbnRlbmQgcHJvdmVuYW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNQcm92ZW5hbmNlfSBQcm92ZW5hbmNlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlUHJvdmVuYW5jZShtb2R1bGUpIHtcbiAgaWYgKCFtb2R1bGUucHJvdmVuYW5jZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNlbWFudGljIG1vZHVsZSBkb2VzIG5vdCBjb250YWluIHNvdXJjZSBwcm92ZW5hbmNlLlwiKVxuXG4gIHJldHVybiBtb2R1bGUucHJvdmVuYW5jZVxufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBwdWJsaWMgc2VtYW50aWMgbm9kZXMgaW4gb25lIHN0YWJsZSBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7e25vZGU6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlLCBvd25lckxvY2F0aW9uOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXRoOiBzdHJpbmd9W119IEVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW1hbnRpY0VudHJpZXMobW9kdWxlKSB7XG4gIC8qKiBAdHlwZSB7e25vZGU6IGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlLCBvd25lckxvY2F0aW9uOiBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBwYXRoOiBzdHJpbmd9W119ICovXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuXG4gIHZpc2l0KG1vZHVsZSwgXCJcIiwgbW9kdWxlLmxvY2F0aW9uKVxuXG4gIHJldHVybiBlbnRyaWVzXG5cbiAgLyoqXG4gICAqIFZpc2l0cyBvbmUgc2VtYW50aWMgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlfSBub2RlIC0gQ3VycmVudCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEN1cnJlbnQgSlNPTiBQb2ludGVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IGxvY2F0ZWQgb3duZXIuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQobm9kZSwgcGF0aCwgb3duZXJMb2NhdGlvbikge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gXCJsb2NhdGlvblwiIGluIG5vZGUgPyBub2RlLmxvY2F0aW9uIDogb3duZXJMb2NhdGlvblxuXG4gICAgZW50cmllcy5wdXNoKHtub2RlLCBvd25lckxvY2F0aW9uOiBsb2NhdGlvbiwgcGF0aH0pXG5cbiAgICBpZiAobm9kZS5raW5kID09IFwiTW9kdWxlXCIpIHtcbiAgICAgIGlmIChcImltcG9ydHNcIiBpbiBub2RlKSB7XG4gICAgICAgIG5vZGUuaW1wb3J0cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgL2ltcG9ydHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICB9XG4gICAgICA7KG5vZGUucmVjb3JkcyA/PyBbXSkuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYC9yZWNvcmRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgaWYgKCEoXCJzb3VyY2VGaWxlbmFtZVwiIGluIG5vZGUpIHx8IFJlZmxlY3QuZ2V0KG5vZGUsIFwic3RkbGliRmFjYWRlXCIpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgOyhub2RlLmNsYXNzZXMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAvY2xhc3Nlcy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIH1cbiAgICAgIDsobm9kZS5lcnJvcnMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAvZXJyb3JzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgOyhub2RlLmNhcGFiaWxpdGllcyA/PyBbXSkuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYC9jYXBhYmlsaXRpZXMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICBub2RlLmZ1bmN0aW9ucy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgL2Z1bmN0aW9ucy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIGlmIChcImV4cG9ydHNcIiBpbiBub2RlKSB7XG4gICAgICAgIG5vZGUuZXhwb3J0cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgL2V4cG9ydHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5lbnRyeVBvaW50KSB2aXNpdChub2RlLmVudHJ5UG9pbnQsIFwiL2VudHJ5UG9pbnRcIiwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZWNvcmREZWNsYXJhdGlvblwiKSB7XG4gICAgICA7KG5vZGUudHlwZVBhcmFtZXRlcnMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L3R5cGVQYXJhbWV0ZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgbm9kZS5maWVsZHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vZmllbGRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uXCIpIHtcbiAgICAgIG5vZGUucmVzb3VyY2VzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L3Jlc291cmNlcy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIG5vZGUuZmFpbHVyZXMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vZmFpbHVyZXMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICBub2RlLm9wZXJhdGlvbnMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vb3BlcmF0aW9ucy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkVmZmVjdE9wZXJhdGlvbkRlY2xhcmF0aW9uXCIpIHtcbiAgICAgIG5vZGUucGFyYW1ldGVycy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLnR5cGUsIGAke3BhdGh9L3BhcmFtZXRlcnMvJHtpbmRleH0vdHlwZWAsIGxvY2F0aW9uKSlcbiAgICAgIHZpc2l0KG5vZGUucmV0dXJuVHlwZSwgYCR7cGF0aH0vcmV0dXJuVHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiKSB7XG4gICAgICBub2RlLmZpZWxkcy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9maWVsZHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgICB2aXNpdChub2RlLmNvbnN0cnVjdG9yLCBgJHtwYXRofS9jb25zdHJ1Y3RvcmAsIGxvY2F0aW9uKVxuICAgICAgbm9kZS5tZXRob2RzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L21ldGhvZHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJQcml2YXRlRmllbGRcIikge1xuICAgICAgdmlzaXQobm9kZS50eXBlLCBgJHtwYXRofS90eXBlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIpIHtcbiAgICAgIG5vZGUucGFyYW1ldGVycy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJNZXRob2REZWNsYXJhdGlvblwiKSB7XG4gICAgICBub2RlLnBhcmFtZXRlcnMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vcGFyYW1ldGVycy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIHZpc2l0KG5vZGUucmV0dXJuVHlwZSwgYCR7cGF0aH0vcmV0dXJuVHlwZWAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZWNvcmRGaWVsZFwiKSB7XG4gICAgICB2aXNpdChub2RlLnR5cGUsIGAke3BhdGh9L3R5cGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIikge1xuICAgICAgOyhub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS90eXBlUGFyYW1ldGVycy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICAgIG5vZGUucGFyYW1ldGVycy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgdmlzaXQobm9kZS5yZXR1cm5UeXBlLCBgJHtwYXRofS9yZXR1cm5UeXBlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmJvZHksIGAke3BhdGh9L2JvZHlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkJsb2NrXCIpIHtcbiAgICAgIG5vZGUuc3RhdGVtZW50cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiUGFyYW1ldGVyXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudHlwZSwgYCR7cGF0aH0vdHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiVmFsdWVCaW5kaW5nXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudHlwZSwgYCR7cGF0aH0vdHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQ2F0Y2hCaW5kaW5nXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUudHlwZSwgYCR7cGF0aH0vdHlwZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTGlzdFR5cGVcIikge1xuICAgICAgdmlzaXQobm9kZS5lbGVtZW50VHlwZSwgYCR7cGF0aH0vZWxlbWVudFR5cGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk1hcFR5cGVcIiB8fCBub2RlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSB7XG4gICAgICB2aXNpdChub2RlLmtleVR5cGUsIGAke3BhdGh9L2tleVR5cGVgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiKSB7XG4gICAgICB2aXNpdChub2RlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZWNvcmRUeXBlXCIpIHtcbiAgICAgIDsobm9kZS5hcmd1bWVudHMgPz8gW10pLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgICAgdmlzaXQobm9kZS50eXBlLCBgJHtwYXRofS90eXBlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmluaXRpYWxpemVyLCBgJHtwYXRofS9pbml0aWFsaXplcmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLnRhcmdldCwgYCR7cGF0aH0vdGFyZ2V0YCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBub2RlLmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUuY29uc2VxdWVudCwgYCR7cGF0aH0vY29uc2VxdWVudGAsIGxvY2F0aW9uKVxuICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB2aXNpdChub2RlLmFsdGVybmF0ZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUubGlzdCwgYCR7cGF0aH0vbGlzdGAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS52YWx1ZUJpbmRpbmcsIGAke3BhdGh9L3ZhbHVlQmluZGluZ2AsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUubWFwLCBgJHtwYXRofS9tYXBgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUua2V5QmluZGluZywgYCR7cGF0aH0va2V5QmluZGluZ2AsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS52YWx1ZUJpbmRpbmcsIGAke3BhdGh9L3ZhbHVlQmluZGluZ2AsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdChub2RlLmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmJvZHksIGAke3BhdGh9L2JvZHlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuZXJyb3IsIGAke3BhdGh9L2Vycm9yYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZXRocm93U3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuYmluZGluZ05vZGUsIGAke3BhdGh9L2JpbmRpbmdOb2RlYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmJpbmRpbmdOb2RlLCBgJHtwYXRofS9iaW5kaW5nTm9kZS9uYW1lYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgdmlzaXQobm9kZS5ib2R5LCBgJHtwYXRofS9ib2R5YCwgbG9jYXRpb24pXG4gICAgICBub2RlLmhhbmRsZXJzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2hhbmRsZXJzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgICAgaWYgKG5vZGUuZmluYWxseUJvZHkpIHZpc2l0KG5vZGUuZmluYWxseUJvZHksIGAke3BhdGh9L2ZpbmFsbHlCb2R5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJDYXRjaEhhbmRsZXJcIikge1xuICAgICAgdmlzaXQobm9kZS5jYXRjaFR5cGUsIGAke3BhdGh9L2NhdGNoVHlwZWAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5jYXRjaEJpbmRpbmcsIGAke3BhdGh9L2NhdGNoQmluZGluZ2AsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5jYXRjaEJvZHksIGAke3BhdGh9L2NhdGNoQm9keWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiRW50cnlQb2ludFwiKSB7XG4gICAgICB2aXNpdChub2RlLmJvZHksIGAke3BhdGh9L2JvZHlgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdChub2RlLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuY29uZGl0aW9uLCBgJHtwYXRofS9jb25kaXRpb25gLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUuY29uc2VxdWVudCwgYCR7cGF0aH0vY29uc2VxdWVudGAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5hbHRlcm5hdGUsIGAke3BhdGh9L2FsdGVybmF0ZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIiB8fCBub2RlLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICBub2RlLmFyZ3VtZW50cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgbm9kZS5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsb2NhdGlvbilcbiAgICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4gdmlzaXQoY2hpbGQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgICB2aXNpdChub2RlLnJlZmVyZW5jZSwgYCR7cGF0aH0vcmVmZXJlbmNlYCwgbG9jYXRpb24pXG4gICAgICBub2RlLmFyZ3VtZW50cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsb2NhdGlvbikpXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJSZWNvcmRDb25zdHJ1Y3Rpb25cIikge1xuICAgICAgdmlzaXQobm9kZS5yZWNvcmQsIGAke3BhdGh9L3JlY29yZGAsIGxvY2F0aW9uKVxuICAgICAgbm9kZS5hcmd1bWVudHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbG9jYXRpb24pKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTWVtYmVyUmVhZFwiKSB7XG4gICAgICB2aXNpdChub2RlLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB7XG4gICAgICB2aXNpdChub2RlLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiRXJyb3JDb25zdHJ1Y3Rpb25cIikge1xuICAgICAgdmlzaXQobm9kZS5lcnJvciwgYCR7cGF0aH0vZXJyb3JgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUubWVzc2FnZSwgYCR7cGF0aH0vbWVzc2FnZWAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiRXJyb3JNZXNzYWdlUmVhZFwiKSB7XG4gICAgICB2aXNpdChub2RlLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAobm9kZS5raW5kID09IFwiTGlzdExpdGVyYWxcIikge1xuICAgICAgbm9kZS5lbGVtZW50cy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHZpc2l0KGNoaWxkLCBgJHtwYXRofS9lbGVtZW50cy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBub2RlLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgICBub2RlLmVudHJpZXMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB2aXNpdChjaGlsZCwgYCR7cGF0aH0vZW50cmllcy8ke2luZGV4fWAsIGxvY2F0aW9uKSlcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk1hcEVudHJ5XCIpIHtcbiAgICAgIHZpc2l0KG5vZGUua2V5LCBgJHtwYXRofS9rZXlgLCBsb2NhdGlvbilcbiAgICAgIHZpc2l0KG5vZGUudmFsdWUsIGAke3BhdGh9L3ZhbHVlYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICAgIHZpc2l0KG5vZGUuY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxvY2F0aW9uKVxuICAgICAgdmlzaXQobm9kZS5pbmRleCwgYCR7cGF0aH0vaW5kZXhgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbG9jYXRpb24pXG4gICAgICB2aXNpdChub2RlLmtleSwgYCR7cGF0aH0va2V5YCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXQobm9kZS5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIikge1xuICAgICAgdmlzaXQobm9kZS52YWx1ZSwgYCR7cGF0aH0vdmFsdWVgLCBsb2NhdGlvbilcbiAgICB9IGVsc2UgaWYgKG5vZGUua2luZCA9PSBcIk9wdGlvbmFsSXNQcmVzZW50XCIgfHwgbm9kZS5raW5kID09IFwiT3B0aW9uYWxVbndyYXBcIikge1xuICAgICAgdmlzaXQobm9kZS5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbG9jYXRpb24pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgZGVjbGFyYXRpb25zIGFuZCByZWZlcmVuY2VzIGFmdGVyIHNlbWFudGljIHZhbGlkYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBtb2R1bGUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIGltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNOb2RlUHJvdmVuYW5jZT59IHJlY29yZHMgLSBOb2RlIHJlY29yZHMgYnkgb2NjdXJyZW5jZSBwYXRoLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNTeW1ib2xQcm92ZW5hbmNlW119IFN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTeW1ib2xzKG1vZHVsZSwgcmVjb3Jkcykge1xuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU2VtYW50aWNTeW1ib2xQcm92ZW5hbmNlW119ICovXG4gIGNvbnN0IHN5bWJvbHMgPSBbXVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IGZ1bmN0aW9ucyA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IHJlY29yZFN5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBlcnJvclN5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBmaWVsZFN5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBjbGFzc1N5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBjb25zdHJ1Y3RvclN5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBtZXRob2RTeW1ib2xzID0gbmV3IE1hcCgpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3QgdHlwZVBhcmFtZXRlclN5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCByZXNvdXJjZVN5bWJvbHMgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBvcGVyYXRpb25TeW1ib2xzID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBbY2FwYWJpbGl0eUluZGV4LCBjYXBhYmlsaXR5XSBvZiAobW9kdWxlLmNhcGFiaWxpdGllcyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgY29uc3QgY2FwYWJpbGl0eVBhdGggPSBgL2NhcGFiaWxpdGllcy8ke2NhcGFiaWxpdHlJbmRleH1gXG5cbiAgICBkZWNsYXJlKGNhcGFiaWxpdHksIGNhcGFiaWxpdHkubmFtZSwgXCJjYXBhYmlsaXR5XCIsIGNhcGFiaWxpdHlQYXRoKVxuICAgIGZvciAoY29uc3QgW3Jlc291cmNlSW5kZXgsIHJlc291cmNlXSBvZiBjYXBhYmlsaXR5LnJlc291cmNlcy5lbnRyaWVzKCkpIHtcbiAgICAgIHJlc291cmNlU3ltYm9scy5zZXQocmVzb3VyY2UuaWQsIGRlY2xhcmUocmVzb3VyY2UsIHJlc291cmNlLm5hbWUsIFwicmVzb3VyY2VcIiwgYCR7Y2FwYWJpbGl0eVBhdGh9L3Jlc291cmNlcy8ke3Jlc291cmNlSW5kZXh9YCkpXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2ZhaWx1cmVJbmRleCwgZmFpbHVyZV0gb2YgY2FwYWJpbGl0eS5mYWlsdXJlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGVycm9yU3ltYm9scy5zZXQoZmFpbHVyZS5pZCwgZGVjbGFyZShmYWlsdXJlLCBmYWlsdXJlLm5hbWUsIFwiZmFpbHVyZVwiLCBgJHtjYXBhYmlsaXR5UGF0aH0vZmFpbHVyZXMvJHtmYWlsdXJlSW5kZXh9YCkpXG4gICAgfVxuICAgIGZvciAoY29uc3QgW29wZXJhdGlvbkluZGV4LCBvcGVyYXRpb25dIG9mIGNhcGFiaWxpdHkub3BlcmF0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICAgIG9wZXJhdGlvblN5bWJvbHMuc2V0KG9wZXJhdGlvbi5pZCwgZGVjbGFyZShvcGVyYXRpb24sIG9wZXJhdGlvbi5uYW1lLCBcIm9wZXJhdGlvblwiLCBgJHtjYXBhYmlsaXR5UGF0aH0vb3BlcmF0aW9ucy8ke29wZXJhdGlvbkluZGV4fWApKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IFtjYXBhYmlsaXR5SW5kZXgsIGNhcGFiaWxpdHldIG9mIChtb2R1bGUuY2FwYWJpbGl0aWVzID8/IFtdKS5lbnRyaWVzKCkpIHtcbiAgICBmb3IgKGNvbnN0IFtvcGVyYXRpb25JbmRleCwgb3BlcmF0aW9uXSBvZiBjYXBhYmlsaXR5Lm9wZXJhdGlvbnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBvcGVyYXRpb25QYXRoID0gYC9jYXBhYmlsaXRpZXMvJHtjYXBhYmlsaXR5SW5kZXh9L29wZXJhdGlvbnMvJHtvcGVyYXRpb25JbmRleH1gXG4gICAgICBvcGVyYXRpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIHBhcmFtZXRlckluZGV4KSA9PlxuICAgICAgICB2aXNpdFR5cGUocGFyYW1ldGVyLnR5cGUsIGAke29wZXJhdGlvblBhdGh9L3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH0vdHlwZWApKVxuICAgICAgdmlzaXRUeXBlKG9wZXJhdGlvbi5yZXR1cm5UeXBlLCBgJHtvcGVyYXRpb25QYXRofS9yZXR1cm5UeXBlYClcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZGVjbGFyYXRpb25dIG9mIChtb2R1bGUucmVjb3JkcyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25QYXRoID0gYC9yZWNvcmRzLyR7aW5kZXh9YFxuICAgIGNvbnN0IHN5bWJvbCA9IGRlY2xhcmUoZGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLm5hbWUsIFwicmVjb3JkXCIsIGRlY2xhcmF0aW9uUGF0aClcblxuICAgIGlmIChkZWNsYXJhdGlvbi5pZCkgcmVjb3JkU3ltYm9scy5zZXQoZGVjbGFyYXRpb24uaWQsIHN5bWJvbClcbiAgICBmb3IgKGNvbnN0IFtwYXJhbWV0ZXJJbmRleCwgcGFyYW1ldGVyXSBvZiAoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pLmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgcGFyYW1ldGVyU3ltYm9sID0gZGVjbGFyZShwYXJhbWV0ZXIsIHBhcmFtZXRlci5uYW1lLCBcInR5cGVQYXJhbWV0ZXJcIiwgYCR7ZGVjbGFyYXRpb25QYXRofS90eXBlUGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWApXG5cbiAgICAgIGlmIChwYXJhbWV0ZXIuaWQpIHR5cGVQYXJhbWV0ZXJTeW1ib2xzLnNldChwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlclN5bWJvbClcbiAgICB9XG4gICAgZm9yIChjb25zdCBbZmllbGRJbmRleCwgZmllbGRdIG9mIGRlY2xhcmF0aW9uLmZpZWxkcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke2RlY2xhcmF0aW9uUGF0aH0vZmllbGRzLyR7ZmllbGRJbmRleH1gXG4gICAgICBjb25zdCBmaWVsZFN5bWJvbCA9IGRlY2xhcmUoZmllbGQsIGZpZWxkLm5hbWUsIFwiZmllbGRcIiwgZmllbGRQYXRoKVxuXG4gICAgICBpZiAoZmllbGQuaWQpIGZpZWxkU3ltYm9scy5zZXQoZmllbGQuaWQsIGZpZWxkU3ltYm9sKVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBkZWNsYXJhdGlvbl0gb2YgKG1vZHVsZS5lcnJvcnMgPz8gW10pLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHN5bWJvbCA9IGRlY2xhcmUoZGVjbGFyYXRpb24sIGRlY2xhcmF0aW9uLm5hbWUsIFwiZXJyb3JcIiwgYC9lcnJvcnMvJHtpbmRleH1gKVxuXG4gICAgaWYgKGRlY2xhcmF0aW9uLmlkKSBlcnJvclN5bWJvbHMuc2V0KGRlY2xhcmF0aW9uLmlkLCBzeW1ib2wpXG4gIH1cblxuICBmb3IgKGNvbnN0IFtpbmRleCwgZGVjbGFyYXRpb25dIG9mIChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25QYXRoID0gYC9jbGFzc2VzLyR7aW5kZXh9YFxuICAgIGNvbnN0IGNsYXNzU3ltYm9sID0gZGVjbGFyZShkZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24ubmFtZSwgXCJjbGFzc1wiLCBkZWNsYXJhdGlvblBhdGgpXG5cbiAgICBpZiAoZGVjbGFyYXRpb24uaWQpIGNsYXNzU3ltYm9scy5zZXQoZGVjbGFyYXRpb24uaWQsIGNsYXNzU3ltYm9sKVxuICAgIGZvciAoY29uc3QgW2ZpZWxkSW5kZXgsIGZpZWxkXSBvZiBkZWNsYXJhdGlvbi5maWVsZHMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBzeW1ib2wgPSBkZWNsYXJlKGZpZWxkLCBmaWVsZC5uYW1lLCBcImZpZWxkXCIsIGAke2RlY2xhcmF0aW9uUGF0aH0vZmllbGRzLyR7ZmllbGRJbmRleH1gKVxuXG4gICAgICBpZiAoZmllbGQuaWQpIGZpZWxkU3ltYm9scy5zZXQoZmllbGQuaWQsIHN5bWJvbClcbiAgICAgIHZpc2l0VHlwZShmaWVsZC50eXBlLCBgJHtkZWNsYXJhdGlvblBhdGh9L2ZpZWxkcy8ke2ZpZWxkSW5kZXh9L3R5cGVgKVxuICAgIH1cbiAgICBjb25zdCBjb25zdHJ1Y3RvclN5bWJvbCA9IGRlY2xhcmUoZGVjbGFyYXRpb24uY29uc3RydWN0b3IsIFwiY29uc3RydWN0b3JcIiwgXCJjb25zdHJ1Y3RvclwiLCBgJHtkZWNsYXJhdGlvblBhdGh9L2NvbnN0cnVjdG9yYClcblxuICAgIGlmIChkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5pZCkgY29uc3RydWN0b3JTeW1ib2xzLnNldChkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5pZCwgY29uc3RydWN0b3JTeW1ib2wpXG4gICAgZm9yIChjb25zdCBbbWV0aG9kSW5kZXgsIG1ldGhvZF0gb2YgZGVjbGFyYXRpb24ubWV0aG9kcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IGRlY2xhcmUobWV0aG9kLCBtZXRob2QubmFtZSwgXCJtZXRob2RcIiwgYCR7ZGVjbGFyYXRpb25QYXRofS9tZXRob2RzLyR7bWV0aG9kSW5kZXh9YClcblxuICAgICAgaWYgKG1ldGhvZC5pZCkgbWV0aG9kU3ltYm9scy5zZXQobWV0aG9kLmlkLCBzeW1ib2wpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIGRlY2xhcmF0aW9uXSBvZiAobW9kdWxlLnJlY29yZHMgPz8gW10pLmVudHJpZXMoKSkge1xuICAgIGZvciAoY29uc3QgW2ZpZWxkSW5kZXgsIGZpZWxkXSBvZiBkZWNsYXJhdGlvbi5maWVsZHMuZW50cmllcygpKSB7XG4gICAgICB2aXNpdFR5cGUoZmllbGQudHlwZSwgYC9yZWNvcmRzLyR7aW5kZXh9L2ZpZWxkcy8ke2ZpZWxkSW5kZXh9L3R5cGVgKVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBkZWNsYXJhdGlvbl0gb2YgbW9kdWxlLmZ1bmN0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvblBhdGggPSBgL2Z1bmN0aW9ucy8ke2luZGV4fWBcblxuICAgIGZ1bmN0aW9ucy5zZXQoZGVjbGFyYXRpb24ubmFtZSwgZGVjbGFyZShkZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24ubmFtZSwgXCJmdW5jdGlvblwiLCBkZWNsYXJhdGlvblBhdGgpKVxuICAgIGZvciAoY29uc3QgW3BhcmFtZXRlckluZGV4LCBwYXJhbWV0ZXJdIG9mIChkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJTeW1ib2wgPSBkZWNsYXJlKHBhcmFtZXRlciwgcGFyYW1ldGVyLm5hbWUsIFwidHlwZVBhcmFtZXRlclwiLCBgJHtkZWNsYXJhdGlvblBhdGh9L3R5cGVQYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YClcblxuICAgICAgaWYgKHBhcmFtZXRlci5pZCkgdHlwZVBhcmFtZXRlclN5bWJvbHMuc2V0KHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyU3ltYm9sKVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBkZWNsYXJhdGlvbl0gb2YgbW9kdWxlLmZ1bmN0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvblBhdGggPSBgL2Z1bmN0aW9ucy8ke2luZGV4fWBcbiAgICBjb25zdCBzY29wZSA9IG5ldyBNYXAoKVxuXG4gICAgZm9yIChjb25zdCBbcGFyYW1ldGVySW5kZXgsIHBhcmFtZXRlcl0gb2YgZGVjbGFyYXRpb24ucGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAgIHNjb3BlLnNldChwYXJhbWV0ZXIubmFtZSwgZGVjbGFyZShwYXJhbWV0ZXIsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBgJHtkZWNsYXJhdGlvblBhdGh9L3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH1gKSlcbiAgICAgIHZpc2l0VHlwZShwYXJhbWV0ZXIudHlwZSwgYCR7ZGVjbGFyYXRpb25QYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9L3R5cGVgKVxuICAgIH1cbiAgICB2aXNpdFR5cGUoZGVjbGFyYXRpb24ucmV0dXJuVHlwZSwgYCR7ZGVjbGFyYXRpb25QYXRofS9yZXR1cm5UeXBlYClcbiAgICB2aXNpdEJsb2NrKGRlY2xhcmF0aW9uLmJvZHksIHNjb3BlLCBgJHtkZWNsYXJhdGlvblBhdGh9L2JvZHlgKVxuICB9XG5cbiAgZm9yIChjb25zdCBbY2xhc3NJbmRleCwgZGVjbGFyYXRpb25dIG9mIChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZW50cmllcygpKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25QYXRoID0gYC9jbGFzc2VzLyR7Y2xhc3NJbmRleH1gXG4gICAgY29uc3QgY29uc3RydWN0b3JTY29wZSA9IG5ldyBNYXAoKVxuXG4gICAgZm9yIChjb25zdCBbcGFyYW1ldGVySW5kZXgsIHBhcmFtZXRlcl0gb2YgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBgJHtkZWNsYXJhdGlvblBhdGh9L2NvbnN0cnVjdG9yL3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH1gXG5cbiAgICAgIGNvbnN0cnVjdG9yU2NvcGUuc2V0KHBhcmFtZXRlci5uYW1lLCBkZWNsYXJlKHBhcmFtZXRlciwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIHBhdGgpKVxuICAgICAgdmlzaXRUeXBlKHBhcmFtZXRlci50eXBlLCBgJHtwYXRofS90eXBlYClcbiAgICB9XG4gICAgdmlzaXRCbG9jayhkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBjb25zdHJ1Y3RvclNjb3BlLCBgJHtkZWNsYXJhdGlvblBhdGh9L2NvbnN0cnVjdG9yL2JvZHlgKVxuICAgIGZvciAoY29uc3QgW21ldGhvZEluZGV4LCBtZXRob2RdIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBtZXRob2RQYXRoID0gYCR7ZGVjbGFyYXRpb25QYXRofS9tZXRob2RzLyR7bWV0aG9kSW5kZXh9YFxuICAgICAgY29uc3Qgc2NvcGUgPSBuZXcgTWFwKClcblxuICAgICAgZm9yIChjb25zdCBbcGFyYW1ldGVySW5kZXgsIHBhcmFtZXRlcl0gb2YgbWV0aG9kLnBhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBgJHttZXRob2RQYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICAgIHNjb3BlLnNldChwYXJhbWV0ZXIubmFtZSwgZGVjbGFyZShwYXJhbWV0ZXIsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBwYXRoKSlcbiAgICAgICAgdmlzaXRUeXBlKHBhcmFtZXRlci50eXBlLCBgJHtwYXRofS90eXBlYClcbiAgICAgIH1cbiAgICAgIHZpc2l0VHlwZShtZXRob2QucmV0dXJuVHlwZSwgYCR7bWV0aG9kUGF0aH0vcmV0dXJuVHlwZWApXG4gICAgICB2aXNpdEJsb2NrKG1ldGhvZC5ib2R5LCBzY29wZSwgYCR7bWV0aG9kUGF0aH0vYm9keWApXG4gICAgfVxuICB9XG5cbiAgdmlzaXRCbG9jayhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBuZXcgTWFwKCksIFwiL2VudHJ5UG9pbnQvYm9keVwiKVxuXG4gIHJldHVybiBzeW1ib2xzXG5cbiAgLyoqXG4gICAqIERlY2xhcmVzIG9uZSBjYW5vbmljYWwgc3ltYm9sLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FZmZlY3RSZXNvdXJjZURlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FZmZlY3RGYWlsdXJlRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkVmZmVjdE9wZXJhdGlvbkRlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVjb3JkRmllbGQgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZCB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuQ29uc3RydWN0b3JEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuTWV0aG9kRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlR5cGVQYXJhbWV0ZXIgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlBhcmFtZXRlciB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuVmFsdWVCaW5kaW5nIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5DYXRjaEJpbmRpbmd9IG5vZGUgLSBEZWNsYXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBTeW1ib2wgbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNlbWFudGljU3ltYm9sS2luZH0ga2luZCAtIFN5bWJvbCBraW5kLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIERlY2xhcmF0aW9uIG9jY3VycmVuY2UgcGF0aC5cbiAgICogQHJldHVybnMge3N0cmluZ30gU3ltYm9sIGlkZW50aXR5LlxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyZShub2RlLCBuYW1lLCBraW5kLCBwYXRoKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkcy5nZXQocGF0aClcblxuICAgIGlmICghcmVjb3JkKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcHJvdmVuYW5jZSBmb3IgJHtub2RlLmtpbmR9LmApXG5cbiAgICBjb25zdCBsb2NhdGlvbiA9IHJlY29yZC5yYW5nZXMubmFtZSA/PyAoXCJsb2NhdGlvblwiIGluIG5vZGUgPyBub2RlLmxvY2F0aW9uIDogcHJpbWFyeUxvY2F0aW9uKHJlY29yZC5vcmlnaW4pKVxuICAgIGNvbnN0IGlkID0gYHN5bWJvbDoke3N5bWJvbHMubGVuZ3RofWBcblxuICAgIHJlY29yZC5zeW1ib2xJZCA9IGlkXG4gICAgc3ltYm9scy5wdXNoKHtcbiAgICAgIGRlY2xhcmF0aW9uTm9kZUlkOiByZWNvcmQuaWQsXG4gICAgICBpZCxcbiAgICAgIGtpbmQsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIG5hbWUsXG4gICAgICByZWZlcmVuY2VzOiBbXSxcbiAgICAgIC4uLihbXCJjYXBhYmlsaXR5XCIsIFwicmVzb3VyY2VcIiwgXCJmYWlsdXJlXCIsIFwib3BlcmF0aW9uXCIsIFwicmVjb3JkXCIsIFwiY2xhc3NcIiwgXCJlcnJvclwiLCBcImZpZWxkXCIsIFwiY29uc3RydWN0b3JcIiwgXCJtZXRob2RcIiwgXCJmdW5jdGlvblwiLCBcInR5cGVQYXJhbWV0ZXJcIl0uaW5jbHVkZXMoa2luZClcbiAgICAgICAgPyB7c2VtYW50aWNEZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3tpZD86IHN0cmluZ319ICovIChub2RlKS5pZH1cbiAgICAgICAgOiB7fSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIGlkXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgcmVmZXJlbmNlcyBpbiBvbmUgbGV4aWNhbCBibG9jay5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIHN0cmluZz59IHBhcmVudCAtIFZpc2libGUgYmluZGluZ3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gU3RhdGVtZW50IHNlcXVlbmNlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXRCbG9jayhibG9jaywgcGFyZW50LCBwYXRoKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBuZXcgTWFwKHBhcmVudClcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBzdGF0ZW1lbnRdIG9mIGJsb2NrLnN0YXRlbWVudHMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRQYXRoID0gYCR7cGF0aH0vc3RhdGVtZW50cy8ke2luZGV4fWBcblxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgICAgIHZpc2l0VHlwZShzdGF0ZW1lbnQudHlwZSwgYCR7c3RhdGVtZW50UGF0aH0vdHlwZWApXG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9pbml0aWFsaXplcmApXG4gICAgICAgIHNjb3BlLnNldChzdGF0ZW1lbnQubmFtZSwgZGVjbGFyZShzdGF0ZW1lbnQsIHN0YXRlbWVudC5uYW1lLCBcImxvY2FsXCIsIHN0YXRlbWVudFBhdGgpKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgICAgICByZWZlcmVuY2Uoc3RhdGVtZW50LnRhcmdldCwgc2NvcGUuZ2V0KHN0YXRlbWVudC50YXJnZXQubmFtZSksIFwid3JpdGVcIiwgYCR7c3RhdGVtZW50UGF0aH0vdGFyZ2V0YClcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5leHByZXNzaW9uLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vZXhwcmVzc2lvbmApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIikge1xuICAgICAgICByZWZlcmVuY2Uoc3RhdGVtZW50LCBmaWVsZFN5bWJvbHMuZ2V0KHN0YXRlbWVudC5maWVsZCksIFwid3JpdGVcIiwgc3RhdGVtZW50UGF0aClcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5yZWNlaXZlciwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L3JlY2VpdmVyYClcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5leHByZXNzaW9uLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vZXhwcmVzc2lvbmApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICAgICAgaWYgKHN0YXRlbWVudC5leHByZXNzaW9uKSB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmV4cHJlc3Npb24sIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9leHByZXNzaW9uYClcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2V4cHJlc3Npb25gKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5jb25kaXRpb24sIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9jb25kaXRpb25gKVxuICAgICAgICB2aXNpdEJsb2NrKHN0YXRlbWVudC5jb25zZXF1ZW50LCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vY29uc2VxdWVudGApXG4gICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdEJsb2NrKHN0YXRlbWVudC5hbHRlcm5hdGUsIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9hbHRlcm5hdGVgKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50Lmxpc3QsIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9saXN0YClcbiAgICAgICAgY29uc3QgYm9keVNjb3BlID0gbmV3IE1hcChzY29wZSlcblxuICAgICAgICB2aXNpdFR5cGUoc3RhdGVtZW50LnZhbHVlQmluZGluZy50eXBlLCBgJHtzdGF0ZW1lbnRQYXRofS92YWx1ZUJpbmRpbmcvdHlwZWApXG5cbiAgICAgICAgYm9keVNjb3BlLnNldChzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUsIGRlY2xhcmUoXG4gICAgICAgICAgc3RhdGVtZW50LnZhbHVlQmluZGluZyxcbiAgICAgICAgICBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUsXG4gICAgICAgICAgXCJpdGVyYXRpb25cIixcbiAgICAgICAgICBgJHtzdGF0ZW1lbnRQYXRofS92YWx1ZUJpbmRpbmdgXG4gICAgICAgICkpXG4gICAgICAgIHZpc2l0QmxvY2soc3RhdGVtZW50LmJvZHksIGJvZHlTY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vYm9keWApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQubWFwLCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vbWFwYClcbiAgICAgICAgY29uc3QgYm9keVNjb3BlID0gbmV3IE1hcChzY29wZSlcblxuICAgICAgICB2aXNpdFR5cGUoc3RhdGVtZW50LmtleUJpbmRpbmcudHlwZSwgYCR7c3RhdGVtZW50UGF0aH0va2V5QmluZGluZy90eXBlYClcbiAgICAgICAgdmlzaXRUeXBlKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcudHlwZSwgYCR7c3RhdGVtZW50UGF0aH0vdmFsdWVCaW5kaW5nL3R5cGVgKVxuICAgICAgICBib2R5U2NvcGUuc2V0KHN0YXRlbWVudC5rZXlCaW5kaW5nLm5hbWUsIGRlY2xhcmUoXG4gICAgICAgICAgc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC5rZXlCaW5kaW5nLm5hbWUsIFwiaXRlcmF0aW9uXCIsIGAke3N0YXRlbWVudFBhdGh9L2tleUJpbmRpbmdgXG4gICAgICAgICkpXG4gICAgICAgIGJvZHlTY29wZS5zZXQoc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lLCBkZWNsYXJlKFxuICAgICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSwgXCJpdGVyYXRpb25cIiwgYCR7c3RhdGVtZW50UGF0aH0vdmFsdWVCaW5kaW5nYFxuICAgICAgICApKVxuICAgICAgICB2aXNpdEJsb2NrKHN0YXRlbWVudC5ib2R5LCBib2R5U2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2JvZHlgKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5jb25kaXRpb24sIHNjb3BlLCBgJHtzdGF0ZW1lbnRQYXRofS9jb25kaXRpb25gKVxuICAgICAgICB2aXNpdEJsb2NrKHN0YXRlbWVudC5ib2R5LCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vYm9keWApXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdFR5cGUoc3RhdGVtZW50LmVycm9yLmVycm9yLCBgJHtzdGF0ZW1lbnRQYXRofS9lcnJvci9lcnJvcmApXG4gICAgICAgIHJlZmVyZW5jZShzdGF0ZW1lbnQuZXJyb3IsIGVycm9yU3ltYm9scy5nZXQoc3RhdGVtZW50LmVycm9yLmVycm9yLmRlY2xhcmF0aW9uSWQpLCBcImNvbnN0cnVjdFwiLCBgJHtzdGF0ZW1lbnRQYXRofS9lcnJvcmApXG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSwgc2NvcGUsIGAke3N0YXRlbWVudFBhdGh9L2Vycm9yL21lc3NhZ2VgKVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldGhyb3dTdGF0ZW1lbnRcIikge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBzY29wZS5nZXQoc3RhdGVtZW50LmJpbmRpbmcpXG5cbiAgICAgICAgaWYgKHN5bWJvbCkgcmVmZXJlbmNlKHN0YXRlbWVudCwgc3ltYm9sLCBcInJlYWRcIiwgc3RhdGVtZW50UGF0aClcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdEJsb2NrKHN0YXRlbWVudC5ib2R5LCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vYm9keWApXG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBoYW5kbGVyXSBvZiBzdGF0ZW1lbnQuaGFuZGxlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBgJHtzdGF0ZW1lbnRQYXRofS9oYW5kbGVycy8ke2luZGV4fWBcblxuICAgICAgICAgIHZpc2l0VHlwZShoYW5kbGVyLmNhdGNoVHlwZSwgYCR7aGFuZGxlclBhdGh9L2NhdGNoVHlwZWApXG4gICAgICAgICAgdmlzaXRUeXBlKGhhbmRsZXIuY2F0Y2hCaW5kaW5nLnR5cGUsIGAke2hhbmRsZXJQYXRofS9jYXRjaEJpbmRpbmcvdHlwZWApXG4gICAgICAgICAgY29uc3QgY2F0Y2hTY29wZSA9IG5ldyBNYXAoc2NvcGUpXG5cbiAgICAgICAgICBjYXRjaFNjb3BlLnNldChoYW5kbGVyLmNhdGNoQmluZGluZy5uYW1lLCBkZWNsYXJlKFxuICAgICAgICAgICAgaGFuZGxlci5jYXRjaEJpbmRpbmcsXG4gICAgICAgICAgICBoYW5kbGVyLmNhdGNoQmluZGluZy5uYW1lLFxuICAgICAgICAgICAgXCJjYXRjaFwiLFxuICAgICAgICAgICAgYCR7aGFuZGxlclBhdGh9L2NhdGNoQmluZGluZ2BcbiAgICAgICAgICApKVxuICAgICAgICAgIHZpc2l0QmxvY2soaGFuZGxlci5jYXRjaEJvZHksIGNhdGNoU2NvcGUsIGAke2hhbmRsZXJQYXRofS9jYXRjaEJvZHlgKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZW1lbnQuZmluYWxseUJvZHkpIHZpc2l0QmxvY2soc3RhdGVtZW50LmZpbmFsbHlCb2R5LCBzY29wZSwgYCR7c3RhdGVtZW50UGF0aH0vZmluYWxseUJvZHlgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyByZWZlcmVuY2VzIGluIG9uZSBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24uXG4gICAqIEBwYXJhbSB7TWFwPHN0cmluZywgc3RyaW5nPn0gc2NvcGUgLSBWaXNpYmxlIGJpbmRpbmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4cHJlc3Npb24gb2NjdXJyZW5jZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLCBzY29wZSwgcGF0aCkge1xuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZWZlcmVuY2UoZXhwcmVzc2lvbiwgc2NvcGUuZ2V0KGV4cHJlc3Npb24ubmFtZSksIFwicmVhZFwiLCBwYXRoKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSByZWZlcmVuY2UoZXhwcmVzc2lvbiwgY2xhc3NTeW1ib2xzLmdldChleHByZXNzaW9uLmNsYXNzSWQpLCBcInJlYWRcIiwgcGF0aClcbiAgICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IG1vZHVsZS5mdW5jdGlvbnMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gZXhwcmVzc2lvbi5yZXNvbHV0aW9uPy5kZWNsYXJhdGlvbklkKVxuXG4gICAgICByZWZlcmVuY2UoZXhwcmVzc2lvbiwgZGVjbGFyYXRpb24gPyBmdW5jdGlvbnMuZ2V0KGRlY2xhcmF0aW9uLm5hbWUpIDogdW5kZWZpbmVkLCBcImNhbGxcIiwgcGF0aClcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcmd1bWVudF0gb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMuZW50cmllcygpKSB2aXNpdEV4cHJlc3Npb24oYXJndW1lbnQsIHNjb3BlLCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIikge1xuICAgICAgcmVmZXJlbmNlKGV4cHJlc3Npb24sIG9wZXJhdGlvblN5bWJvbHMuZ2V0KGV4cHJlc3Npb24ub3BlcmF0aW9uKSwgXCJjYWxsXCIsIHBhdGgpXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50LCBzY29wZSwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uZXhwcmVzc2lvbiwgc2NvcGUsIGAke3BhdGh9L2V4cHJlc3Npb25gKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICAgIHJlZmVyZW5jZShleHByZXNzaW9uLCByZWNvcmRTeW1ib2xzLmdldChleHByZXNzaW9uLnJlY29yZC5kZWNsYXJhdGlvbklkKSwgXCJjb25zdHJ1Y3RcIiwgcGF0aClcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcmd1bWVudF0gb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMuZW50cmllcygpKSB2aXNpdEV4cHJlc3Npb24oYXJndW1lbnQsIHNjb3BlLCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICAgIHJlZmVyZW5jZShleHByZXNzaW9uLCBjb25zdHJ1Y3RvclN5bWJvbHMuZ2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZXhwcmVzc2lvbi5yZXNvbHV0aW9uPy5kZWNsYXJhdGlvbklkKSksIFwiY29uc3RydWN0XCIsIHBhdGgpXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50LCBzY29wZSwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIHJlZmVyZW5jZShleHByZXNzaW9uLCBtZXRob2RTeW1ib2xzLmdldChleHByZXNzaW9uLm1ldGhvZCksIFwiY2FsbFwiLCBwYXRoKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIsIHNjb3BlLCBgJHtwYXRofS9yZWNlaXZlcmApXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mIGV4cHJlc3Npb24uYXJndW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGFyZ3VtZW50LCBzY29wZSwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1lbWJlclJlYWRcIikge1xuICAgICAgcmVmZXJlbmNlKGV4cHJlc3Npb24sIGZpZWxkU3ltYm9scy5nZXQoZXhwcmVzc2lvbi5maWVsZCksIFwibWVtYmVyXCIsIHBhdGgpXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5yZWNlaXZlciwgc2NvcGUsIGAke3BhdGh9L3JlY2VpdmVyYClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgICAgcmVmZXJlbmNlKGV4cHJlc3Npb24sIGZpZWxkU3ltYm9scy5nZXQoZXhwcmVzc2lvbi5maWVsZCksIFwibWVtYmVyXCIsIHBhdGgpXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5yZWNlaXZlciwgc2NvcGUsIGAke3BhdGh9L3JlY2VpdmVyYClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVycm9yTWVzc2FnZVJlYWRcIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIsIHNjb3BlLCBgJHtwYXRofS9yZWNlaXZlcmApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ub3BlcmFuZCwgc2NvcGUsIGAke3BhdGh9L29wZXJhbmRgKVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5sZWZ0LCBzY29wZSwgYCR7cGF0aH0vbGVmdGApXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5yaWdodCwgc2NvcGUsIGAke3BhdGh9L3JpZ2h0YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb25kaXRpb24sIHNjb3BlLCBgJHtwYXRofS9jb25kaXRpb25gKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc2VxdWVudCwgc2NvcGUsIGAke3BhdGh9L2NvbnNlcXVlbnRgKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uYWx0ZXJuYXRlLCBzY29wZSwgYCR7cGF0aH0vYWx0ZXJuYXRlYClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBlbGVtZW50XSBvZiBleHByZXNzaW9uLmVsZW1lbnRzLmVudHJpZXMoKSkgdmlzaXRFeHByZXNzaW9uKGVsZW1lbnQsIHNjb3BlLCBgJHtwYXRofS9lbGVtZW50cy8ke2luZGV4fWApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBleHByZXNzaW9uLmVudHJpZXMuZW50cmllcygpKSB7XG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihlbnRyeS5rZXksIHNjb3BlLCBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9L2tleWApXG4gICAgICAgIHZpc2l0RXhwcmVzc2lvbihlbnRyeS52YWx1ZSwgc2NvcGUsIGAke3BhdGh9L2VudHJpZXMvJHtpbmRleH0vdmFsdWVgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBzY29wZSwgYCR7cGF0aH0vY29sbGVjdGlvbmApXG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5pbmRleCwgc2NvcGUsIGAke3BhdGh9L2luZGV4YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24uY29sbGVjdGlvbiwgc2NvcGUsIGAke3BhdGh9L2NvbGxlY3Rpb25gKVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ua2V5LCBzY29wZSwgYCR7cGF0aH0va2V5YClcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBzY29wZSwgYCR7cGF0aH0vY29sbGVjdGlvbmApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24udmFsdWUsIHNjb3BlLCBgJHtwYXRofS92YWx1ZWApXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICAgIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLm9wZXJhbmQsIHNjb3BlLCBgJHtwYXRofS9vcGVyYW5kYClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgbm9taW5hbCByZWZlcmVuY2VzIG5lc3RlZCBpbiBhIHNlbWFudGljIHR5cGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuRXJyb3JUeXBlfSB0eXBlIC0gU2VtYW50aWMgdHlwZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUeXBlIG9jY3VycmVuY2UgcGF0aC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdFR5cGUodHlwZSwgcGF0aCkge1xuICAgIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIikgcmVmZXJlbmNlKHR5cGUsIHR5cGVQYXJhbWV0ZXJTeW1ib2xzLmdldCh0eXBlLnBhcmFtZXRlcklkKSwgXCJ0eXBlXCIsIHBhdGgpXG4gICAgZWxzZSBpZiAodHlwZS5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgICByZWZlcmVuY2UodHlwZSwgcmVjb3JkU3ltYm9scy5nZXQodHlwZS5kZWNsYXJhdGlvbklkKSwgXCJ0eXBlXCIsIHBhdGgpXG4gICAgICBmb3IgKGNvbnN0IFtpbmRleCwgYXJndW1lbnRdIG9mICh0eXBlLmFyZ3VtZW50cyA/PyBbXSkuZW50cmllcygpKSB2aXNpdFR5cGUoYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWApXG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUua2luZCA9PSBcIkVycm9yVHlwZVwiKSByZWZlcmVuY2UodHlwZSwgZXJyb3JTeW1ib2xzLmdldCh0eXBlLmRlY2xhcmF0aW9uSWQpLCBcInR5cGVcIiwgcGF0aClcbiAgICBlbHNlIGlmICh0eXBlLmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIgfHwgdHlwZS5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHJlZmVyZW5jZSh0eXBlLCBjbGFzc1N5bWJvbHMuZ2V0KHR5cGUuZGVjbGFyYXRpb25JZCksIFwidHlwZVwiLCBwYXRoKVxuICAgIGVsc2UgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHJlZmVyZW5jZSh0eXBlLCByZXNvdXJjZVN5bWJvbHMuZ2V0KHR5cGUucmVzb3VyY2VJZCksIFwidHlwZVwiLCBwYXRoKVxuICAgIGVsc2UgaWYgKHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIpIHZpc2l0VHlwZSh0eXBlLmVsZW1lbnRUeXBlLCBgJHtwYXRofS9lbGVtZW50VHlwZWApXG4gICAgZWxzZSBpZiAodHlwZS5raW5kID09IFwiTWFwVHlwZVwiIHx8IHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHtcbiAgICAgIHZpc2l0VHlwZSh0eXBlLmtleVR5cGUsIGAke3BhdGh9L2tleVR5cGVgKVxuICAgICAgdmlzaXRUeXBlKHR5cGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgKVxuICAgIH0gZWxzZSBpZiAodHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHZpc2l0VHlwZSh0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYClcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBvbmUgcmVzb2x2ZWQgc3ltYm9sIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLklkZW50aWZpZXJFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWNlaXZlckV4cHJlc3Npb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkNhbGxFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FZmZlY3RDYWxsRXhwcmVzc2lvbiB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuTWV0aG9kQ2FsbEV4cHJlc3Npb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlR5cGVWYXJpYWJsZVJlZmVyZW5jZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVjb3JkVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVmZXJlbmNlVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuT3duZWRSZWZlcmVuY2VUeXBlIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5Pd25lZFJlc291cmNlVHlwZSB8IGltcG9ydChcIi4vdHlwZXMuanNcIikuUmVjb3JkQ29uc3RydWN0aW9uIHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZWZlcmVuY2VDb25zdHJ1Y3Rpb24gfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLk1lbWJlclJlYWQgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFJlYWQgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50IHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5SZXRocm93U3RhdGVtZW50IHwgaW1wb3J0KFwiLi90eXBlcy5qc1wiKS5FcnJvclR5cGUgfCBpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkVycm9yQ29uc3RydWN0aW9ufSBub2RlIC0gUmVmZXJlbmNlIG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBzeW1ib2xJZCAtIFJlc29sdmVkIHN5bWJvbC5cbiAgICogQHBhcmFtIHtcInR5cGVcIiB8IFwiY29uc3RydWN0XCIgfCBcIm1lbWJlclwiIHwgXCJyZWFkXCIgfCBcIndyaXRlXCIgfCBcImNhbGxcIn0gcm9sZSAtIFJlZmVyZW5jZSByb2xlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFJlZmVyZW5jZSBvY2N1cnJlbmNlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVmZXJlbmNlKG5vZGUsIHN5bWJvbElkLCByb2xlLCBwYXRoKSB7XG4gICAgaWYgKCFzeW1ib2xJZCkgcmV0dXJuXG5cbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzLmdldChwYXRoKVxuICAgIGNvbnN0IHN5bWJvbCA9IHN5bWJvbHMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT0gc3ltYm9sSWQpXG5cbiAgICBpZiAoIXJlY29yZCB8fCAhc3ltYm9sKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcHJvdmVuYW5jZSB3aGlsZSByZXNvbHZpbmcgJHtub2RlLmtpbmR9LmApXG5cbiAgICBjb25zdCByYW5nZVJvbGUgPSByb2xlID09IFwiY2FsbFwiID8gKG5vZGUua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIgPyBcIm1lbWJlclwiIDogXCJjYWxsZWVcIikgOlxuICAgICAgcm9sZSA9PSBcImNvbnN0cnVjdFwiID8gKG5vZGUua2luZCA9PSBcIkVycm9yQ29uc3RydWN0aW9uXCIgPyBcInR5cGVcIiA6IG5vZGUua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiID8gXCJjbGFzc1wiIDogXCJyZWNvcmRcIikgOlxuICAgICAgICByb2xlID09IFwibWVtYmVyXCIgfHwgcm9sZSA9PSBcIndyaXRlXCIgJiYgbm9kZS5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiA/IFwibWVtYmVyXCIgOiByb2xlID09IFwidHlwZVwiID8gXCJ0eXBlXCIgOiBcIm5hbWVcIlxuICAgIGNvbnN0IGxvY2F0aW9uID0gcmVjb3JkLnJhbmdlc1tyYW5nZVJvbGVdID8/IChcImxvY2F0aW9uXCIgaW4gbm9kZSA/IG5vZGUubG9jYXRpb24gOiBwcmltYXJ5TG9jYXRpb24ocmVjb3JkLm9yaWdpbikpXG5cbiAgICByZWNvcmQuc3ltYm9sSWQgPSBzeW1ib2xJZFxuICAgIHN5bWJvbC5yZWZlcmVuY2VzLnB1c2goe2xvY2F0aW9uLCBub2RlSWQ6IHJlY29yZC5pZCwgcm9sZX0pXG4gIH1cbn1cbiJdfQ==
|