semantifold 0.9.0 → 0.11.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 +6 -3
- package/bin/semantifold.js +6 -0
- package/build/bin/semantifold.d.ts +3 -0
- package/build/bin/semantifold.d.ts.map +1 -0
- package/build/bin/semantifold.js +5 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +9 -1
- package/build/src/artifact-path.d.ts +16 -0
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +29 -3
- package/build/src/backends/c-check.d.ts +7 -0
- package/build/src/backends/c-check.d.ts.map +1 -0
- package/build/src/backends/c-check.js +65 -0
- package/build/src/backends/check-plan.d.ts +96 -0
- package/build/src/backends/check-plan.d.ts.map +1 -0
- package/build/src/backends/check-plan.js +135 -0
- package/build/src/backends/cpp-check.d.ts +7 -0
- package/build/src/backends/cpp-check.d.ts.map +1 -0
- package/build/src/backends/cpp-check.js +59 -0
- package/build/src/backends/csharp-check.d.ts +7 -0
- package/build/src/backends/csharp-check.d.ts.map +1 -0
- package/build/src/backends/csharp-check.js +125 -0
- package/build/src/backends/csharp.d.ts +1 -0
- package/build/src/backends/csharp.d.ts.map +1 -1
- package/build/src/backends/csharp.js +5 -4
- package/build/src/backends/dart-check.d.ts +7 -0
- package/build/src/backends/dart-check.d.ts.map +1 -0
- package/build/src/backends/dart-check.js +103 -0
- package/build/src/backends/dart.d.ts +2 -0
- package/build/src/backends/dart.d.ts.map +1 -1
- package/build/src/backends/dart.js +5 -5
- package/build/src/backends/go-check.d.ts +7 -0
- package/build/src/backends/go-check.d.ts.map +1 -0
- package/build/src/backends/go-check.js +77 -0
- package/build/src/backends/go.d.ts +1 -0
- package/build/src/backends/go.d.ts.map +1 -1
- package/build/src/backends/go.js +3 -3
- package/build/src/backends/java-check.d.ts +21 -0
- package/build/src/backends/java-check.d.ts.map +1 -0
- package/build/src/backends/java-check.js +73 -0
- package/build/src/backends/javascript-check.d.ts +7 -0
- package/build/src/backends/javascript-check.d.ts.map +1 -0
- package/build/src/backends/javascript-check.js +29 -0
- package/build/src/backends/kotlin-check.d.ts +7 -0
- package/build/src/backends/kotlin-check.d.ts.map +1 -0
- package/build/src/backends/kotlin-check.js +31 -0
- package/build/src/backends/kotlin.d.ts +1 -1
- package/build/src/backends/kotlin.js +2 -2
- package/build/src/backends/php-check.d.ts +7 -0
- package/build/src/backends/php-check.d.ts.map +1 -0
- package/build/src/backends/php-check.js +21 -0
- package/build/src/backends/program.d.ts +7 -0
- package/build/src/backends/program.d.ts.map +1 -1
- package/build/src/backends/program.js +16 -1
- package/build/src/backends/python-check.d.ts +7 -0
- package/build/src/backends/python-check.d.ts.map +1 -0
- package/build/src/backends/python-check.js +28 -0
- package/build/src/backends/ruby-check.d.ts +7 -0
- package/build/src/backends/ruby-check.d.ts.map +1 -0
- package/build/src/backends/ruby-check.js +21 -0
- package/build/src/backends/rust-check.d.ts +7 -0
- package/build/src/backends/rust-check.d.ts.map +1 -0
- package/build/src/backends/rust-check.js +65 -0
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +29 -1
- package/build/src/backends/swift-check.d.ts +7 -0
- package/build/src/backends/swift-check.d.ts.map +1 -0
- package/build/src/backends/swift-check.js +77 -0
- package/build/src/backends/typescript-check.d.ts +7 -0
- package/build/src/backends/typescript-check.d.ts.map +1 -0
- package/build/src/backends/typescript-check.js +33 -0
- package/build/src/backends/zig-check.d.ts +7 -0
- package/build/src/backends/zig-check.d.ts.map +1 -0
- package/build/src/backends/zig-check.js +70 -0
- package/build/src/diagnostic.d.ts +13 -1
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +14 -2
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +23 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +45 -4
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +54 -3
- package/build/src/frontends/program.d.ts +6 -0
- package/build/src/frontends/program.d.ts.map +1 -1
- package/build/src/frontends/program.js +9 -1
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +55 -5
- package/build/src/language-registry.d.ts +54 -0
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +124 -10
- package/build/src/project-build.d.ts +172 -0
- package/build/src/project-build.d.ts.map +1 -0
- package/build/src/project-build.js +320 -0
- package/build/src/project-cli.d.ts +40 -0
- package/build/src/project-cli.d.ts.map +1 -0
- package/build/src/project-cli.js +145 -0
- package/build/src/project-manifest.d.ts +148 -0
- package/build/src/project-manifest.d.ts.map +1 -0
- package/build/src/project-manifest.js +432 -0
- package/build/src/project-reporter.d.ts +81 -0
- package/build/src/project-reporter.d.ts.map +1 -0
- package/build/src/project-reporter.js +293 -0
- package/build/src/project-snapshot.d.ts +129 -0
- package/build/src/project-snapshot.d.ts.map +1 -0
- package/build/src/project-snapshot.js +362 -0
- package/build/src/project-watch-reporter.d.ts +125 -0
- package/build/src/project-watch-reporter.d.ts.map +1 -0
- package/build/src/project-watch-reporter.js +280 -0
- package/build/src/project-watch.d.ts +133 -0
- package/build/src/project-watch.d.ts.map +1 -0
- package/build/src/project-watch.js +839 -0
- package/build/src/publication.d.ts +69 -5
- package/build/src/publication.d.ts.map +1 -1
- package/build/src/publication.js +246 -57
- package/build/src/semantic/effects.js +3 -1
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +11 -1
- package/build/src/semantic/types.d.ts +355 -4
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +92 -3
- package/build/src/semantic/validate.js +18 -1
- package/build/src/subprocess.d.ts +8 -0
- package/build/src/subprocess.d.ts.map +1 -1
- package/build/src/subprocess.js +50 -9
- package/build/src/target-check.d.ts +52 -0
- package/build/src/target-check.d.ts.map +1 -0
- package/build/src/target-check.js +796 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +3 -3
- package/docs/adr-expression-breadth.md +186 -0
- package/docs/architecture.md +3 -1
- package/docs/c.md +4 -0
- package/docs/cpp.md +4 -0
- package/docs/dart.md +4 -0
- package/docs/generated-artifact-publication.md +11 -8
- package/docs/kotlin.md +2 -2
- package/docs/language-support.md +40 -6
- package/docs/parser-qualification.md +1 -1
- package/docs/project-build-cli.md +147 -0
- package/docs/project-watch.md +60 -0
- package/docs/rust.md +4 -0
- package/docs/swift.md +2 -0
- package/docs/testing.md +70 -3
- package/docs/watch-build-pipeline.md +39 -23
- package/docs/zig.md +2 -0
- package/examples/jsdoc-java-watch/expected-output.txt +3 -0
- package/examples/jsdoc-java-watch/semantifold.json +23 -0
- package/examples/jsdoc-java-watch/src/main.js +21 -0
- package/index.js +8 -0
- package/package.json +6 -1
- package/src/artifact-path.js +31 -2
- package/src/backends/c-check.js +80 -0
- package/src/backends/check-plan.js +147 -0
- package/src/backends/cpp-check.js +73 -0
- package/src/backends/csharp-check.js +139 -0
- package/src/backends/csharp.js +4 -3
- package/src/backends/dart-check.js +117 -0
- package/src/backends/dart.js +4 -4
- package/src/backends/go-check.js +89 -0
- package/src/backends/go.js +2 -2
- package/src/backends/java-check.js +77 -0
- package/src/backends/javascript-check.js +33 -0
- package/src/backends/kotlin-check.js +41 -0
- package/src/backends/kotlin.js +1 -1
- package/src/backends/php-check.js +23 -0
- package/src/backends/program.js +17 -0
- package/src/backends/python-check.js +30 -0
- package/src/backends/ruby-check.js +23 -0
- package/src/backends/rust-check.js +78 -0
- package/src/backends/shared.js +30 -0
- package/src/backends/swift-check.js +89 -0
- package/src/backends/typescript-check.js +37 -0
- package/src/backends/zig-check.js +81 -0
- package/src/diagnostic.js +9 -1
- package/src/frontends/java.js +24 -0
- package/src/frontends/javascript-typescript.js +49 -2
- package/src/frontends/php.js +61 -2
- package/src/frontends/program.js +9 -0
- package/src/frontends/ruby.js +62 -2
- package/src/language-registry.js +130 -9
- package/src/project-build.js +353 -0
- package/src/project-cli.js +155 -0
- package/src/project-manifest.js +479 -0
- package/src/project-reporter.js +320 -0
- package/src/project-snapshot.js +403 -0
- package/src/project-watch-reporter.js +303 -0
- package/src/project-watch.js +870 -0
- package/src/publication.js +275 -58
- package/src/semantic/effects.js +1 -0
- package/src/semantic/provenance.js +8 -0
- package/src/semantic/types.js +101 -2
- package/src/semantic/validate.js +26 -0
- package/src/subprocess.js +49 -8
- package/src/target-check.js +844 -0
- package/src/toolchains.js +3 -2
- package/tsconfig.json +1 -1
|
@@ -14,6 +14,14 @@ import { inspectPhpModule } from "./php.js";
|
|
|
14
14
|
import { inspectRubyModule } from "./ruby.js";
|
|
15
15
|
const programLanguages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
16
16
|
const moduleIdPattern = /^[a-z][a-z0-9_]*(?:[.-][a-z][a-z0-9_]*)*$/u;
|
|
17
|
+
/**
|
|
18
|
+
* Reports whether a registered frontend participates in the explicit Task-010 program profile.
|
|
19
|
+
* @param {string} language - Registered source identity.
|
|
20
|
+
* @returns {boolean} Whether the profile accepts the language.
|
|
21
|
+
*/
|
|
22
|
+
export function supportsProgramSourceLanguage(language) {
|
|
23
|
+
return programLanguages.has(/** @type {import("../semantic/types.js").SemanticLanguage} */ (language));
|
|
24
|
+
}
|
|
17
25
|
/** @typedef {{facade?: import("../stdlib-facades.js").StdlibFacadeRecord, filename: string, id: string, language: import("../semantic/types.js").SemanticLanguage, ownership: "application" | "facade", source: string}} ProgramSource */
|
|
18
26
|
/** @typedef {{declarationLocation?: import("../semantic/types.js").SourceLocation, facade?: import("../stdlib-facades.js").StdlibFacadeRecord, importedName: string, importedNameLocation?: import("../semantic/types.js").SourceLocation, localName: string, localNameLocation?: import("../semantic/types.js").SourceLocation, location: import("../semantic/types.js").SourceLocation, namespace?: boolean, pathLocation: import("../semantic/types.js").SourceLocation, specifier: string, stdlibCandidate?: true, typeOnly: boolean}} ProgramImportRequest */
|
|
19
27
|
/** @typedef {{importedName: string, localName: string, location: import("../semantic/types.js").SourceLocation, nativeName: string, symbolKind: import("../semantic/types.js").SemanticDeclarationKind, typeOnly: boolean}} ProgramNativeBinding */
|
|
@@ -986,4 +994,4 @@ function requiredMapValue(map, key) {
|
|
|
986
994
|
function invalidProgram(message) {
|
|
987
995
|
throw new SemantifoldDiagnostic({ code: "INVALID_PROGRAM", language: "program", message });
|
|
988
996
|
}
|
|
989
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvcHJvZ3JhbS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUMscUJBQXFCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQy9HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ3hELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUM5RCxPQUFPLEVBQUMsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RixPQUFPLEVBQ0wseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQUUsb0JBQW9CLEVBQzNHLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sNEJBQTRCLENBQUE7QUFDNUUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLFVBQVUsQ0FBQTtBQUN6QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFFM0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZUFBZSxHQUFHLDRDQUE0QyxDQUFBO0FBRXBFLDBPQUEwTztBQUMxTyxtaUJBQW1pQjtBQUNuaUIsb1BBQW9QO0FBQ3BQLHFzQkFBcXNCO0FBRXJzQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQUs7SUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztRQUNwRixPQUFPLEtBQUssQ0FBQyxXQUFXLElBQUksUUFBUTtRQUFFLGNBQWMsQ0FBQywyRUFBMkUsQ0FBQyxDQUFBO0lBRW5JLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDOUYsTUFBTSxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNsRixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBRWpGLElBQUksZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLHdCQUF3QixFQUFFLHdFQUF3RSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ2hLLENBQUM7SUFDRCxJQUFJLGtCQUFrQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQzlILHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxxREFBcUQsRUFDekcsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFNUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsOEJBQThCLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNySSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLDhCQUE4QixNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDdkosSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDakMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3BJLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0YsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDckUsTUFBTSxhQUFhLEdBQUcsMEJBQTBCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFN0QsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDakcsSUFBSSxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFBO1FBRXZDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLEVBQzVFLDBHQUEwRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3hILENBQUM7SUFDRCxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNoRSxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUMzSCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hGLE1BQU07UUFDTixRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1FBQ2hDLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDcEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFNBQVMsRUFBRSxRQUFRO1FBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU87S0FDOUIsQ0FBQyxDQUFDLENBQUE7SUFFSCx3QkFBd0IsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDcEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUE7SUFFekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDM0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RCxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLEVBQUUsRUFBRSxVQUFVLEtBQUssRUFBRTtRQUNyQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO0tBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXpGLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxvSkFBb0o7SUFDcEosTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUV2QixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RSxHQUFHLE9BQU87WUFDVixRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQztTQUNqSSxDQUFDLENBQUMsQ0FBQTtRQUVILEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDbkQsZ0ZBQWdGO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDeEIsdUNBQXVDO0lBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1QyxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzVELE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNqRSxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUM1QixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDbEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUN0QyxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3BDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUN0QyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNuQyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDbEMsOERBQThEO1FBQzlELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVsQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBRSxDQUM1RixNQUFNLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLFVBQVU7Z0JBQ2hGLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUTtnQkFDdEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFFOUcsS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQUUsU0FBUTtnQkFDN0MsTUFBTSxXQUFXLEdBQUcsOERBQThELENBQUMsRUFBQyxzQkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2dCQUVySCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtnQkFDbEQsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUE7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRS9DLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLE9BQU8sQ0FBQyxRQUFRLDRCQUE0QixNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUMzRixDQUFDO1lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3BFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRO2dCQUNySCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUE7WUFDN0IsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLElBQUksT0FBTyxDQUFDLFNBQVM7Z0JBQ2xFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLG1CQUFtQixJQUFJLENBQUMsQ0FBQztnQkFDckcsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUNOLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLO2dCQUNuRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDO2dCQUN0SCxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVM7b0JBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTztvQkFDdEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUV2RixJQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxTQUFTO29CQUNyRSxDQUFDLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxRQUFRLG9DQUFvQztvQkFDMUUsQ0FBQyxDQUFDLFdBQVcsT0FBTyxDQUFDLFFBQVEsc0JBQXNCLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDbEcsQ0FBQztZQUNELEtBQUssTUFBTSxRQUFRLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUNwRyxNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUUsU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7b0JBQzlELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7b0JBQzdFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNwQixDQUFBO2dCQUNELE1BQU0sY0FBYyxHQUFHLGFBQWEsRUFBRSxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQTtnQkFFbEUsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLDBCQUEwQixFQUFFLDZCQUE2QixTQUFTLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQTtnQkFDMUgsQ0FBQztnQkFDRCxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUN6QixJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVO29CQUNsRSxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUM1RSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLGFBQWEsQ0FBQyxZQUFZLG1DQUFtQyxFQUFFLGNBQWMsQ0FBQyxDQUFBO2dCQUNwSixDQUFDO2dCQUNELElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUN4RCxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsT0FBTyxDQUFDLFlBQVksMkJBQTJCLEVBQUUsY0FBYyxDQUFDLENBQUE7Z0JBQzNJLENBQUM7Z0JBQ0QsSUFBSSxhQUFhO29CQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDdEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFDeEQsTUFBTSxRQUFRLEdBQUcsYUFBYSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFBO2dCQUU1RCxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ3RDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsaUVBQWlFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO29CQUNoSCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDMUcsQ0FBQztxQkFDSSxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sTUFBTSxHQUFHLCtEQUErRCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUE7b0JBRTVGLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7b0JBQzNDLElBQUksQ0FBQyxRQUFRO3dCQUFFLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7b0JBQy9ELGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQTtnQkFDbkUsQ0FBQztxQkFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQzFDLE1BQU0sV0FBVyxHQUFHLDhEQUE4RCxDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO29CQUV6SCxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFBO29CQUNoRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUE7Z0JBQzdFLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLEtBQUssR0FBRyw4REFBOEQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFBO29CQUUxRixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO29CQUN6QyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQ2hFLENBQUM7Z0JBQ0QsNEVBQTRFO2dCQUM1RSxNQUFNLE1BQU0sR0FBRztvQkFDYixXQUFXLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxRQUFRO29CQUM1RCxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVk7aUJBQzNCLENBQUE7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksYUFBYSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDMUQsTUFBTSxDQUFDLFlBQVksR0FBRyxhQUFhLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxjQUFjLENBQUE7b0JBQy9GLE1BQU0sQ0FBQyxTQUFTLEdBQUcsYUFBYSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksY0FBYyxDQUFBO2dCQUMzRixDQUFDO2dCQUVELE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhO29CQUNyQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7b0JBQ25DLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDMUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFOzRCQUNsQyxjQUFjLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFROzRCQUN2QyxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPOzRCQUNyQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFNBQVM7NEJBQy9CLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTs0QkFDbkMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUMsbUNBQW1DLENBQUM7NEJBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDbEMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1IsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7b0JBQ3JFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtvQkFDL0IsUUFBUTtpQkFDVCxDQUFDLENBQUE7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUVuRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLGlCQUFpQixDQUFDLFVBQVUsb0NBQW9DLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkssQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLCtFQUErRSxDQUFDLENBQy9GLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDeEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7UUFDMUYsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsRUFBRSxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQ2hHLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ2pILFNBQVMsRUFBRSxZQUFZO1lBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNkLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQztZQUNuQixZQUFZLEVBQUUsa0JBQWtCO1lBQ2hDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLFNBQVMsRUFBRSxnQkFBZ0I7Z0JBQzNCLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXO2dCQUN2QyxNQUFNLEVBQUUsbUJBQW1CO2dCQUMzQixPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixZQUFZLEVBQUUseUJBQXlCO2FBQ3hDO1lBQ0QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1NBQ3RCLENBQUMsQ0FBQTtRQUVGLElBQUksa0JBQWtCO1lBQUUsR0FBRyxDQUFDLFlBQVksR0FBRywyRUFBMkUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDM0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0csZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLEVBQ25ELHdGQUF3RixFQUN4RixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMvQyxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqRixlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSwwQkFBMEIsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6SixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pDLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLE1BQU0sRUFBRSxpQkFBaUI7Z0JBQ3pCLFNBQVMsRUFBRSxnQkFBZ0I7Z0JBQzNCLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLE9BQU8sRUFBRSxrQkFBa0I7YUFDNUIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQTtZQUVuSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFlBQVkscUJBQXFCLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxnQkFBZ0I7Z0JBQ3JGLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztnQkFDL0MsYUFBYSxDQUFDLE1BQU0sRUFBRSxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN6RixDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO1FBQ0QsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqQyxNQUFNLGdCQUFnQixHQUFHLDJCQUEyQixDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFBO1FBRXpILEtBQUssTUFBTSxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDL0gsQ0FBQztRQUNELG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNqQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFOUQsd1RBQXdUO1FBQ3hULE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUVwQyxLQUFLLE1BQU0sV0FBVyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRTtZQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQzFILEtBQUssTUFBTSxXQUFXLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFDekgsS0FBSyxNQUFNLFdBQVcsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUN4SCxLQUFLLE1BQU0sV0FBVyxJQUFJLEdBQUcsQ0FBQyxTQUFTO1lBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDeEgsOERBQThEO1FBQzlELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0MsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUUxRCxJQUFJLENBQUMsUUFBUTtnQkFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxpQ0FBaUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUM5SSxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDeEQsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxZQUFZLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUM3SSxDQUFDO1lBRUQsT0FBTztnQkFDTCxhQUFhLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtnQkFDMUIsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtvQkFDcEQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxPQUFPLENBQUMsUUFBUTtvQkFDNUQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxPQUFPLENBQUMsUUFBUTtvQkFDOUQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsUUFBUTtpQkFDekQsRUFBRSxRQUFRLENBQUM7Z0JBQ1osVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO2FBQ2hDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFFL0IsS0FBSyxNQUFNLFFBQVEsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMvQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixRQUFRLENBQUMsWUFBWSxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3pILENBQUM7WUFDRCxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUMxQyxDQUFDO1FBRUQsTUFBTSxFQUFDLFVBQVUsRUFBRSxHQUFHLGtCQUFrQixFQUFDLEdBQUcsR0FBRyxDQUFBO1FBQy9DLE1BQU0sTUFBTSxHQUFHLG1FQUFtRSxDQUFDLENBQUM7WUFDbEYsR0FBRyxrQkFBa0I7WUFDckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU87WUFDUCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDYixPQUFPO1lBQ1AsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFLEVBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RyxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVE7U0FDaEMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxNQUFNLENBQUMsTUFBTTtZQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFOUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1FBQzlCLElBQUksRUFBRSxTQUFTO1FBQ2YsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLG1FQUFtRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JILEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDdkIsY0FBYyxFQUFFO2dCQUNkLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO2dCQUMvQixHQUFHLENBQUMsa0JBQWtCLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsZUFBZSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNuSDtTQUNGLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxXQUFXLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFDO1lBQ2xHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RFLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxhQUFhLEVBQUUsNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsSSxPQUFPLEVBQUUsaUJBQWlCO0tBQzNCLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTztJQUM1QyxrRUFBa0U7SUFDbEUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFBO0lBRWhCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVuRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTTtZQUFFLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFL0UsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQzdCLEtBQUssTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzVDLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7Z0JBQ2xELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBRXJDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDO29CQUFFLFNBQVE7Z0JBQ2hFLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBRTlFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNsQixtQkFBbUIsRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDckMsTUFBTTtvQkFDTixZQUFZLEVBQUUsR0FBRztvQkFDakIsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLFFBQVE7b0JBQ3RDLFNBQVMsRUFBRSxFQUFFO29CQUNiLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxRQUFRO29CQUNuQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7b0JBQzFCLFNBQVMsRUFBRSxJQUFJO29CQUNmLFlBQVksRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDOUIsU0FBUyxFQUFFLFlBQVk7b0JBQ3ZCLGVBQWUsRUFBRSxJQUFJO29CQUNyQixRQUFRLEVBQUUsS0FBSztpQkFDaEIsQ0FBQyxDQUFBO2dCQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDcEIsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1lBRXZHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsYUFBYTtnQkFBRSxTQUFRO1lBQ3hELElBQUksT0FBTyxDQUFDLE1BQU07Z0JBQUUsU0FBUTtZQUM1QixJQUFJLDZCQUE2QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsNENBQTRDLEVBQ3pFLDBFQUEwRSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUNyRyxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7WUFFMUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFDckQsMkJBQTJCLFFBQVEsQ0FBQyxDQUFDLENBQUMscURBQXFELE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDM0ksQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTO2dCQUM5QixDQUFDLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDeEUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7WUFFdEgsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7WUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMseUJBQXlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLO0lBQ3RELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxTQUFTLEVBQUUsZUFBZSxFQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLENBQUE7SUFFNUgsSUFBSSxlQUFlLEdBQUcsQ0FBQztRQUFFLE9BQU07SUFDL0IsTUFBTSxVQUFVLEdBQUcsbUNBQW1DLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRTFCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3RELElBQUksU0FBUyxDQUFDLFlBQVksSUFBSSxRQUFRLElBQUksU0FBUyxDQUFDLFlBQVksSUFBSSxhQUFhO1lBQUUsU0FBUTtRQUMzRixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFBO1FBRXRGLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFBRSxTQUFRO1FBQ3JDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdkIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXBHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2xCLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxRQUFRO1lBQ3ZDLE1BQU07WUFDTixZQUFZLEVBQUUsU0FBUyxDQUFDLE1BQU07WUFDOUIsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDeEMsU0FBUztZQUNULGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxRQUFRO1lBQ3JDLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7WUFDckMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxZQUFZO1lBQ2pDLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQTtRQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDcEIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUTtJQUM3RCxJQUFJLENBQUM7UUFDSCxPQUFPLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNsRixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLHFCQUFxQjtZQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM5RyxNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVE7SUFDM0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLHFCQUFxQjtZQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM5RyxNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsYUFBYTtJQUMxRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxRCxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUM1RSxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUVsSCxLQUFLLE1BQU0sTUFBTSxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVuRCxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDckUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsOEJBQThCLEVBQzNELGtCQUFrQixNQUFNLENBQUMsRUFBRSxnRUFBZ0UsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNoSixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNsRSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFDckQsb0VBQW9FLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUM5SSxDQUFDO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7YUFDcEksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSztZQUNqRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNuSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDcEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUV0RixJQUFJLFFBQVE7WUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFDbkUsc0JBQXNCLFFBQVEsQ0FBQyxTQUFTLGtEQUFrRCxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNsSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVqRixLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNoQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBQ3RGLFNBQVE7UUFDVixDQUFDO1FBQ0QsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxRCxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUN6SCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU07WUFDMUYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSTtnQkFDaEcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFBO1FBRS9ELElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxvQ0FBb0MsRUFDeEYsV0FBVyxNQUFNLENBQUMsUUFBUSwwREFBMEQsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2xKLENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ25FLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRTFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0csYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsb0NBQW9DLEVBQ2pFLFdBQVcsTUFBTSxDQUFDLFFBQVEsOERBQThELEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzlHLENBQUM7SUFDRCxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUM1RixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqSSxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFFdEUsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0UsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0NBQWdDLEVBQzdELFdBQVcsTUFBTSxDQUFDLFFBQVEsMkRBQTJELEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzNHLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMseUJBQXlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsVUFBVSxJQUFJLE9BQU87UUFDNUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQzVFLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzNILE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ25HLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLGVBQWU7UUFDckcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDakYsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDMUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU07UUFDaEYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJO1lBQ3ZILGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0RixNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN2SCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ2xGLE1BQU0sU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzlELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxpQkFBaUI7Z0JBQy9GLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7WUFFbkcsT0FBTyxVQUFVLEVBQUUsSUFBSSxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDTCxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQTtRQUMvQyxNQUFNLGlCQUFpQixHQUFHLElBQUksRUFBRSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUU5RyxJQUFJLGlCQUFpQjtZQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUE7UUFDL0UsT0FBTyxNQUFNLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQzdGLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQ2pILE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQ3BELFNBQVMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJO2dCQUMxRCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDL0UsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUE7SUFDOUQsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxvQ0FBb0MsRUFDakUsV0FBVyxNQUFNLENBQUMsUUFBUSxvREFBb0QsVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzNJLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxjQUFjO0lBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtJQUUxQjs7OztPQUlHO0lBQ0gsU0FBUyxLQUFLLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU07UUFDakUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBQUM7WUFDbEYsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO1lBRWhFLElBQUksSUFBSTtnQkFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFCLENBQUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksR0FBRyxJQUFJLGNBQWMsSUFBSSxHQUFHLElBQUksVUFBVSxJQUFJLEdBQUcsSUFBSSxZQUFZLElBQUksR0FBRyxJQUFJLGtCQUFrQjtnQkFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbEgsQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDYixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJO0lBQzVCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlO1FBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksZUFBZTtRQUMxRSxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUE7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRO0lBQ3RELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7QUFDdEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsT0FBTztJQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO1FBQUUsT0FBTTtJQUNwSCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7UUFDckcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFeEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUVsRSxJQUFJLENBQUMsVUFBVTtZQUFFLFNBQVE7UUFDekIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUV0QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1lBRXpELGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUNqRCxhQUFhLEtBQUssNEJBQTRCLFVBQVUsU0FBUyxPQUFPLENBQUMsUUFBUSxVQUFVLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFDOUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDbkQsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSztJQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxjQUFjLENBQUMsa0JBQWtCLEtBQUsseUVBQXlFLENBQUMsQ0FBQTtJQUN6SCxDQUFDO0lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxFQUFFLElBQUksUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3JHLE9BQU8sU0FBUyxDQUFDLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQzlFLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUksT0FBTyxTQUFTLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9FLGNBQWMsQ0FBQyxrQkFBa0IsS0FBSyx5RUFBeUUsQ0FBQyxDQUFBO0lBQ2xILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUE7SUFFekcsT0FBTyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ25DLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtRQUM1QixFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDaEIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1FBQzVCLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtLQUN6QixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLE1BQU07SUFDM0IsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLFlBQVksSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZFLE9BQU8saUNBQWlDLENBQUMsd0ZBQXdGLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzdJLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7UUFDOUIsT0FBTyxpQkFBaUIsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDeEcsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM3QixPQUFPLGdCQUFnQixDQUFDLGtFQUFrRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUN0RyxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE9BQU8saUJBQWlCLENBQUMsbUVBQW1FLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3hHLENBQUM7SUFFRCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUE7QUFDaEUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTztJQUN4RSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsQ0FBQTtRQUUzRixJQUFJLENBQUMsT0FBTztZQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsU0FBUyx3Q0FBd0MsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUUzSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQixDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQTtJQUU1QixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUc7WUFBRSxTQUFRO1FBQ3ZDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsU0FBUyxxQ0FBcUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNsSixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDYixDQUFDOztZQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUNELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFM0IsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQTtJQUN2RSxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTFCLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekcsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXpHLElBQUksQ0FBQyxPQUFPO1FBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxTQUFTLHdDQUF3QyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRTNJLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQTtBQUNuQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVE7SUFDekQsSUFBSSxDQUFDLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUE7SUFDaEcsSUFBSSxRQUFRLElBQUksTUFBTTtRQUFFLE9BQU8sR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN2SCxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTlDLElBQUksQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO1FBRTVFLE9BQU8sUUFBUSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2hHLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxRQUFRLElBQUksQ0FBQyxDQUFBO0FBQ3hFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUs7SUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ3hCLHVCQUF1QjtJQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFFakI7OztPQUdHO0lBQ0gsU0FBUyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFBRSxPQUFNO1FBQzVCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFcEQsZUFBZSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxpQ0FBaUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZJLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2QsS0FBSyxNQUFNLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUTtZQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqQixRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTztRQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFOUMsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUTtJQUN0QyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUN0SSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUU3RSxJQUFJLENBQUMsV0FBVztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLFFBQVEsQ0FBQyxhQUFhLHVCQUF1QixDQUFDLENBQUE7SUFFcEcsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsUUFBUTtJQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRTlCLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMvQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDakUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDekYsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsTUFBTTtZQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM3RixLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPO1lBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ25HLENBQUM7SUFDRCxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7UUFDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2pFLEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6RCxJQUFJLFNBQVMsQ0FBQyxFQUFFO2dCQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNqRixDQUFDO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsTUFBTTtZQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMvRixDQUFDO0lBQ0QsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUU7UUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDaEgsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2pFLEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6RCxJQUFJLFNBQVMsQ0FBQyxFQUFFO2dCQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNqRixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMvQyxXQUFXLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6RCxTQUFTLENBQUMsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDL0YsQ0FBQztRQUNELEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxDQUFDLE1BQU07WUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN2RyxDQUFDO0lBQ0QsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUU7UUFBRSxXQUFXLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2hHLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMvQyxXQUFXLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsQ0FBQyxNQUFNO1lBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPO1lBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqRixJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ25ELFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDekcsQ0FBQztJQUNILENBQUM7SUFDRCxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxXQUFXLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6RCxTQUFTLENBQUMsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDL0YsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0lBQzFCOzs7T0FHRztJQUNILFNBQVMsS0FBSyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFNO1FBQ2pFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDZixNQUFNLE1BQU0sR0FBRyxzQ0FBc0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTdELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLGVBQWUsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLG9CQUFvQjtZQUN2RyxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLDJCQUEyQjtZQUN4RSxNQUFNLENBQUMsSUFBSSxJQUFJLDhCQUE4QixJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUkseUJBQXlCLENBQUM7WUFDMUYsT0FBTyxNQUFNLENBQUMsYUFBYSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3BGLE1BQU0sQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksNEJBQTRCLENBQUM7WUFDbkgsT0FBTyxNQUFNLENBQUMsS0FBSyxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDL0MsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxzQkFBc0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDakgsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNqRCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLG9CQUFvQixJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxNQUFNLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ25ELENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksdUJBQXVCLElBQUksT0FBTyxNQUFNLENBQUMsV0FBVyxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzVILE1BQU0sQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0QsQ0FBQztRQUNELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFBRSxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVE7Z0JBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7SUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDZixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVE7SUFDbkQsT0FBTztRQUNMLE1BQU0sRUFBRSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQztRQUM1QyxNQUFNO1FBQ04sTUFBTSxFQUFFLDJCQUEyQjtRQUNuQyxPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVE7SUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO0lBQzFGLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7SUFFMUI7OztPQUdHO0lBQ0gsU0FBUyxLQUFLLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU07UUFDakUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNmLE1BQU0sU0FBUyxHQUFHLHNDQUFzQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEUsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFBO1FBQzdDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRXhFLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUTtZQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ2hGLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNiLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDbkUsQ0FBQztJQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUE7QUFDaEksQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUc7SUFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQixJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsQ0FBQTtJQUVqRixPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBTztJQUM3QixNQUFNLElBQUkscUJBQXFCLENBQUMsRUFBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0FBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtpc0RlbnNlQXJyYXl9IGZyb20gXCIuLi9hcnJheS5qc1wiXG5pbXBvcnQge2lzU2FmZVNvdXJjZVBhdGh9IGZyb20gXCIuLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCBzZW1hbnRpY0ZhaWx1cmUsIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSwgdW5zdXBwb3J0ZWRSb2xlfSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xhbmd1YWdlUmVnaXN0cnl9IGZyb20gXCIuLi9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5pbXBvcnQge25vcm1hbGl6ZUNhcGFiaWxpdHlBdXRob3JpdHl9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHttb2R1bGVMb2NhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7YW5ub3RhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7bW9kdWxlVW5jaGVja2VkRXJyb3JFZmZlY3RzLCB2YWxpZGF0ZVBhcnNlZE1vZHVsZX0gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7XG4gIGZhY2FkZUNhcGFiaWxpdHlBdXRob3JpdHksIHJlc29sdmVTdGRsaWJGYWNhZGVDbG9zdXJlLCBzdGRsaWJGYWNhZGVQcm9ncmFtRGVzY3JpcHRvciwgc3RkbGliRmFjYWRlUmVnaXN0cnlcbn0gZnJvbSBcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCJcbmltcG9ydCB7aW5zcGVjdEphdmFTY3JpcHRUeXBlU2NyaXB0TW9kdWxlfSBmcm9tIFwiLi9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanNcIlxuaW1wb3J0IHtpbnNwZWN0SmF2YU1vZHVsZX0gZnJvbSBcIi4vamF2YS5qc1wiXG5pbXBvcnQge2luc3BlY3RQaHBNb2R1bGV9IGZyb20gXCIuL3BocC5qc1wiXG5pbXBvcnQge2luc3BlY3RSdWJ5TW9kdWxlfSBmcm9tIFwiLi9ydWJ5LmpzXCJcblxuY29uc3QgcHJvZ3JhbUxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IG1vZHVsZUlkUGF0dGVybiA9IC9eW2Etel1bYS16MC05X10qKD86Wy4tXVthLXpdW2EtejAtOV9dKikqJC91XG5cbi8qKiBAdHlwZWRlZiB7e2ZhY2FkZT86IGltcG9ydChcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCIpLlN0ZGxpYkZhY2FkZVJlY29yZCwgZmlsZW5hbWU6IHN0cmluZywgaWQ6IHN0cmluZywgbGFuZ3VhZ2U6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2UsIG93bmVyc2hpcDogXCJhcHBsaWNhdGlvblwiIHwgXCJmYWNhZGVcIiwgc291cmNlOiBzdHJpbmd9fSBQcm9ncmFtU291cmNlICovXG4vKiogQHR5cGVkZWYge3tkZWNsYXJhdGlvbkxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGZhY2FkZT86IGltcG9ydChcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCIpLlN0ZGxpYkZhY2FkZVJlY29yZCwgaW1wb3J0ZWROYW1lOiBzdHJpbmcsIGltcG9ydGVkTmFtZUxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhbE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hbWVzcGFjZT86IGJvb2xlYW4sIHBhdGhMb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHNwZWNpZmllcjogc3RyaW5nLCBzdGRsaWJDYW5kaWRhdGU/OiB0cnVlLCB0eXBlT25seTogYm9vbGVhbn19IFByb2dyYW1JbXBvcnRSZXF1ZXN0ICovXG4vKiogQHR5cGVkZWYge3tpbXBvcnRlZE5hbWU6IHN0cmluZywgbG9jYWxOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmF0aXZlTmFtZTogc3RyaW5nLCBzeW1ib2xLaW5kOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZCwgdHlwZU9ubHk6IGJvb2xlYW59fSBQcm9ncmFtTmF0aXZlQmluZGluZyAqL1xuLyoqIEB0eXBlZGVmIHt7aW1wb3J0czogUHJvZ3JhbUltcG9ydFJlcXVlc3RbXSwgZXhwb3J0czoge2RlY2xhcmF0aW9uTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgZXhwb3J0ZWROYW1lOiBzdHJpbmcsIGV4cG9ydGVkTmFtZUxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhbE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIHN5bWJvbEtpbmQ/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZCwgdHlwZU9ubHk6IGJvb2xlYW59W10sIGJpbmRpbmdzPzogUHJvZ3JhbU5hdGl2ZUJpbmRpbmdbXSwgbmF0aXZlTmFtZT86IHN0cmluZywgbmF0aXZlUmVmZXJlbmNlcz86IHtmb3JtOiBcImNvbnN0cnVjdG9yLWNhbGxcIiB8IFwicmVjZWl2ZXItY2FsbFwiIHwgXCJ1bnF1YWxpZmllZC1jYWxsXCIsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmF0aXZlTW9kdWxlOiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nfVtdfX0gUHJvZ3JhbUhlYWRlciAqL1xuXG4vKipcbiAqIFBhcnNlcyBhbiBleHBsaWNpdCBjYWxsZXItc3VwcGxpZWQgbXVsdGktc291cmNlIHByb2dyYW0gd2l0aG91dCBmaWxlc3lzdGVtIGRpc2NvdmVyeS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFByb2dyYW0gcGFyc2UgcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5lbnRyeU1vZHVsZSAtIFNvbGUgZW50cnkgbW9kdWxlIGlkZW50aXR5LlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgaWQ6IHN0cmluZywgbGFuZ3VhZ2U6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2UsIHNvdXJjZTogc3RyaW5nfVtdfSBpbnB1dC5zb3VyY2VzIC0gQ29tcGxldGUgc291cmNlIHNldC5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FwYWJpbGl0eUF1dGhvcml0eT4gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXBhYmlsaXR5QXV0aG9yaXR5SW5wdXR9IFtpbnB1dC5jYXBhYmlsaXR5QXV0aG9yaXR5XSAtIEV4cGxpY2l0IGNvbXBpbGVyIGF1dGhvcml0eS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW19IFJlc29sdmVkIHNlbWFudGljIHByb2dyYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyYW1Tb3VyY2UoaW5wdXQpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0KSB8fCAhaXNEZW5zZUFycmF5KGlucHV0LnNvdXJjZXMpIHx8IGlucHV0LnNvdXJjZXMubGVuZ3RoID09IDAgfHxcbiAgICB0eXBlb2YgaW5wdXQuZW50cnlNb2R1bGUgIT0gXCJzdHJpbmdcIikgaW52YWxpZFByb2dyYW0oXCJQcm9ncmFtIHBhcnNpbmcgcmVxdWlyZXMgYSBub24tZW1wdHkgb3JkZXJlZCBzb3VyY2Ugc2V0IGFuZCBlbnRyeSBtb2R1bGUuXCIpXG5cbiAgY29uc3QgYXBwbGljYXRpb25Tb3VyY2VzID0gaW5wdXQuc291cmNlcy5tYXAoKHNvdXJjZSwgaW5kZXgpID0+IHZhbGlkYXRlU291cmNlKHNvdXJjZSwgaW5kZXgpKVxuICBjb25zdCByZXF1ZXN0ZWRBdXRob3JpdHkgPSBub3JtYWxpemVDYXBhYmlsaXR5QXV0aG9yaXR5KGlucHV0LmNhcGFiaWxpdHlBdXRob3JpdHkpXG4gIGNvbnN0IHNvdXJjZUxhbmd1YWdlcyA9IG5ldyBTZXQoYXBwbGljYXRpb25Tb3VyY2VzLm1hcCgoe2xhbmd1YWdlfSkgPT4gbGFuZ3VhZ2UpKVxuXG4gIGlmIChzb3VyY2VMYW5ndWFnZXMuc2l6ZSAhPSAxKSB7XG4gICAgc2VtYW50aWNGYWlsdXJlKGFwcGxpY2F0aW9uU291cmNlc1swXS5sYW5ndWFnZSwgXCJNSVhFRF9TT1VSQ0VfTEFOR1VBR0VTXCIsIFwiQSBzZW1hbnRpYyBwcm9ncmFtIG11c3QgdXNlIG9uZSBzb3VyY2UtbGFuZ3VhZ2UgY29tcGF0aWJpbGl0eSBwcm9maWxlLlwiLCB1bmRlZmluZWQpXG4gIH1cbiAgaWYgKHJlcXVlc3RlZEF1dGhvcml0eSAmJiAhbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQoYXBwbGljYXRpb25Tb3VyY2VzWzBdLmxhbmd1YWdlKS5mZWF0dXJlcy5lZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXMpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoYXBwbGljYXRpb25Tb3VyY2VzWzBdLmxhbmd1YWdlLCBcIlRhc2sgMDM0IGVmZmVjdGZ1bCBjYXBhYmlsaXRpZXMgYW5kIG93bmVkIHJlc291cmNlc1wiLFxuICAgICAgbW9kdWxlTG9jYXRpb24oYXBwbGljYXRpb25Tb3VyY2VzWzBdLmZpbGVuYW1lLCBhcHBsaWNhdGlvblNvdXJjZXNbMF0uc291cmNlKSlcbiAgfVxuICBjb25zdCBieUlkID0gbmV3IE1hcCgpXG4gIGNvbnN0IGJ5RmlsZW5hbWUgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBhcHBsaWNhdGlvblNvdXJjZXMpIHtcbiAgICBpZiAoYnlJZC5oYXMoc291cmNlLmlkKSkgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJEVVBMSUNBVEVfTU9EVUxFXCIsIGBEdXBsaWNhdGUgbW9kdWxlIGlkZW50aXR5ICcke3NvdXJjZS5pZH0nLmAsIHVuZGVmaW5lZClcbiAgICBpZiAoYnlGaWxlbmFtZS5oYXMoc291cmNlLmZpbGVuYW1lKSkgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJEVVBMSUNBVEVfTU9EVUxFXCIsIGBEdXBsaWNhdGUgbW9kdWxlIGZpbGVuYW1lICcke3NvdXJjZS5maWxlbmFtZX0nLmAsIHVuZGVmaW5lZClcbiAgICBieUlkLnNldChzb3VyY2UuaWQsIHNvdXJjZSlcbiAgICBieUZpbGVuYW1lLnNldChzb3VyY2UuZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuICBpZiAoIWJ5SWQuaGFzKGlucHV0LmVudHJ5TW9kdWxlKSkge1xuICAgIHNlbWFudGljRmFpbHVyZShhcHBsaWNhdGlvblNvdXJjZXNbMF0ubGFuZ3VhZ2UsIFwiSU5WQUxJRF9FTlRSWV9NT0RVTEVcIiwgYFVua25vd24gZW50cnkgbW9kdWxlICcke2lucHV0LmVudHJ5TW9kdWxlfScuYCwgdW5kZWZpbmVkKVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IG5ldyBNYXAoYXBwbGljYXRpb25Tb3VyY2VzLm1hcCgoc291cmNlKSA9PiBbc291cmNlLmlkLCBpbnNwZWN0U291cmNlKHNvdXJjZSldKSlcbiAgY29uc3QgZmFjYWRlUm9vdHMgPSByZXNvbHZlRmFjYWRlSW1wb3J0cyhhcHBsaWNhdGlvblNvdXJjZXMsIGhlYWRlcnMpXG4gIGNvbnN0IGZhY2FkZVJlY29yZHMgPSByZXNvbHZlU3RkbGliRmFjYWRlQ2xvc3VyZShmYWNhZGVSb290cylcblxuICBpZiAoZmFjYWRlUmVjb3Jkcy5sZW5ndGggPiAwICYmIHJlcXVlc3RlZEF1dGhvcml0eSkge1xuICAgIGNvbnN0IGxvY2F0ZWQgPSBhcHBsaWNhdGlvblNvdXJjZXMuZmxhdE1hcCgoc291cmNlKSA9PiByZXF1aXJlZE1hcFZhbHVlKGhlYWRlcnMsIHNvdXJjZS5pZCkuaW1wb3J0cylcbiAgICAgIC5maW5kKCh7ZmFjYWRlfSkgPT4gZmFjYWRlKT8ubG9jYXRpb25cblxuICAgIGZhY2FkZUZhaWx1cmUoYXBwbGljYXRpb25Tb3VyY2VzWzBdLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfQVVUSE9SSVRZX0ZPUkdFRFwiLFxuICAgICAgXCJQcm9ncmFtcyByZXNvbHZlZCB0aHJvdWdoIGNvbXBpbGVyLW93bmVkIGZhY2FkZXMgY2Fubm90IHN1cHBseSB0aGVpciBvd24gY2Fub25pY2FsIGNhcGFiaWxpdHkgYXV0aG9yaXR5LlwiLCBsb2NhdGVkKVxuICB9XG4gIGNvbnN0IGZhY2FkZUF1dGhvcml0eSA9IGZhY2FkZUNhcGFiaWxpdHlBdXRob3JpdHkoZmFjYWRlUmVjb3JkcylcbiAgY29uc3QgYXV0aG9yaXR5ID0gcmVxdWVzdGVkQXV0aG9yaXR5ID8/IChmYWNhZGVBdXRob3JpdHkgPyBub3JtYWxpemVDYXBhYmlsaXR5QXV0aG9yaXR5KGZhY2FkZUF1dGhvcml0eS5pbnB1dCkgOiB1bmRlZmluZWQpXG4gIGNvbnN0IGZhY2FkZVNvdXJjZXMgPSBmYWNhZGVSZWNvcmRzLm1hcCgoZmFjYWRlKSA9PiAvKiogQHR5cGUge1Byb2dyYW1Tb3VyY2V9ICovICh7XG4gICAgZmFjYWRlLFxuICAgIGZpbGVuYW1lOiBmYWNhZGUuc291cmNlLmZpbGVuYW1lLFxuICAgIGlkOiBmYWNhZGUuc291cmNlLmlkLFxuICAgIGxhbmd1YWdlOiBmYWNhZGUubGFuZ3VhZ2UsXG4gICAgb3duZXJzaGlwOiBcImZhY2FkZVwiLFxuICAgIHNvdXJjZTogZmFjYWRlLnNvdXJjZS5jb250ZW50XG4gIH0pKVxuXG4gIHZhbGlkYXRlRmFjYWRlQ29sbGlzaW9ucyhhcHBsaWNhdGlvblNvdXJjZXMsIGhlYWRlcnMsIGZhY2FkZVNvdXJjZXMpXG4gIGNvbnN0IHNvdXJjZXMgPSBbLi4uYXBwbGljYXRpb25Tb3VyY2VzLCAuLi5mYWNhZGVTb3VyY2VzXVxuXG4gIGZvciAoY29uc3Qgc291cmNlIG9mIGZhY2FkZVNvdXJjZXMpIHtcbiAgICBieUlkLnNldChzb3VyY2UuaWQsIHNvdXJjZSlcbiAgICBieUZpbGVuYW1lLnNldChzb3VyY2UuZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBoZWFkZXJzLnNldChzb3VyY2UuaWQsIGluc3BlY3RTb3VyY2Uoc291cmNlKSlcbiAgfVxuICBjb25zdCByZWdpc3RlcmVkU291cmNlcyA9IHNvdXJjZXMubWFwKChzb3VyY2UsIGluZGV4KSA9PiAoe1xuICAgIGNvbnRlbnQ6IHNvdXJjZS5zb3VyY2UsXG4gICAgZmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZSxcbiAgICBpZDogYHNvdXJjZToke2luZGV4fWAsXG4gICAgbGFuZ3VhZ2U6IHNvdXJjZS5sYW5ndWFnZSxcbiAgICBvd25lcnNoaXA6IHNvdXJjZS5vd25lcnNoaXBcbiAgfSkpXG4gIGNvbnN0IHNvdXJjZUlkcyA9IG5ldyBNYXAoc291cmNlcy5tYXAoKHNvdXJjZSwgaW5kZXgpID0+IFtzb3VyY2UuaWQsIGBzb3VyY2U6JHtpbmRleH1gXSkpXG5cbiAgdmFsaWRhdGVOYXRpdmVNb2R1bGVJZGVudGl0aWVzKHNvdXJjZXMsIGhlYWRlcnMpXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywge3NvdXJjZTogdHlwZW9mIHNvdXJjZXNbbnVtYmVyXSwgcmVxdWVzdHM6IChSZXR1cm5UeXBlPHR5cGVvZiBpbnNwZWN0U291cmNlPltcImltcG9ydHNcIl1bbnVtYmVyXSAmIHttb2R1bGVJZDogc3RyaW5nfSlbXX0+fSAqL1xuICBjb25zdCBncmFwaCA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHJlcXVpcmVkTWFwVmFsdWUoaGVhZGVycywgc291cmNlLmlkKS5pbXBvcnRzLm1hcCgocmVxdWVzdCkgPT4gKHtcbiAgICAgIC4uLnJlcXVlc3QsXG4gICAgICBtb2R1bGVJZDogcmVxdWVzdC5mYWNhZGU/LnNvdXJjZS5pZCA/PyByZXNvbHZlSW1wb3J0TW9kdWxlKHNvdXJjZSwgcmVxdWVzdC5zcGVjaWZpZXIsIHJlcXVlc3QucGF0aExvY2F0aW9uLCBieUZpbGVuYW1lLCBoZWFkZXJzKVxuICAgIH0pKVxuXG4gICAgZ3JhcGguc2V0KHNvdXJjZS5pZCwge3JlcXVlc3RzLCBzb3VyY2V9KVxuICB9XG4gIGNvbnN0IG9yZGVyZWRJZHMgPSB0b3BvbG9naWNhbE9yZGVyKHNvdXJjZXMsIGdyYXBoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZT59ICovXG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pn0gKi9cbiAgY29uc3QgY2FsbEVmZmVjdHNCeURlY2xhcmF0aW9uSWQgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IG1vZHVsZUlkIG9mIG9yZGVyZWRJZHMpIHtcbiAgICBjb25zdCB7cmVxdWVzdHMsIHNvdXJjZX0gPSByZXF1aXJlZE1hcFZhbHVlKGdyYXBoLCBtb2R1bGVJZClcbiAgICBjb25zdCBzb3VyY2VJZCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoc291cmNlSWRzLmdldChzb3VyY2UuaWQpKVxuICAgIGNvbnN0IGhlYWRlciA9IHJlcXVpcmVkTWFwVmFsdWUoaGVhZGVycywgbW9kdWxlSWQpXG4gICAgY29uc3QgbG9jYWxOYW1lcyA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IHZpc2libGVGdW5jdGlvbnMgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlQ2FsbEVmZmVjdHMgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlUmVjb3Jkc0J5TmFtZSA9IG5ldyBNYXAoKVxuICAgIGNvbnN0IHZpc2libGVWYWx1ZVJlY29yZHNCeU5hbWUgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlUmVjb3Jkc0J5SWQgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlQ2xhc3Nlc0J5TmFtZSA9IG5ldyBNYXAoKVxuICAgIGNvbnN0IHZpc2libGVDbGFzc2VzQnlJZCA9IG5ldyBNYXAoKVxuICAgIGNvbnN0IHZpc2libGVFcnJvcnNCeU5hbWUgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlRXJyb3JzQnlJZCA9IG5ldyBNYXAoKVxuICAgIGNvbnN0IGNvbnN1bWVkQmluZGluZ3MgPSBuZXcgU2V0KClcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljSW1wb3J0W119ICovXG4gICAgY29uc3QgaW1wb3J0cyA9IFtdXG5cbiAgICBpZiAoIXNvdXJjZS5mYWNhZGUgJiYgYXV0aG9yaXR5KSB7XG4gICAgICBjb25zdCBmYWlsdXJlTmFtZXMgPSBuZXcgU2V0KGhlYWRlci5pbXBvcnRzLmZpbHRlcigoe2ZhY2FkZX0pID0+IGZhY2FkZSkuZmxhdE1hcCgoe2ZhY2FkZX0pID0+XG4gICAgICAgIGZhY2FkZT8ucHVibGljRGVjbGFyYXRpb25zLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5raW5kID09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZGVjbGFyYXRpb24uZmFpbHVyZXNcbiAgICAgICAgICA6IFsuLi5kZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5mYWlsdXJlcywgLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcyldKSA/PyBbXSkpXG5cbiAgICAgIGZvciAoY29uc3QgZmFpbHVyZSBvZiBhdXRob3JpdHkuY2FwYWJpbGl0aWVzLmZsYXRNYXAoKHtmYWlsdXJlc30pID0+IGZhaWx1cmVzKSkge1xuICAgICAgICBpZiAoIWZhaWx1cmVOYW1lcy5oYXMoZmFpbHVyZS5uYW1lKSkgY29udGludWVcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChmYWlsdXJlKSlcblxuICAgICAgICB2aXNpYmxlRXJyb3JzQnlOYW1lLnNldChmYWlsdXJlLm5hbWUsIGRlY2xhcmF0aW9uKVxuICAgICAgICB2aXNpYmxlRXJyb3JzQnlJZC5zZXQoZmFpbHVyZS5pZCwgZGVjbGFyYXRpb24pXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmN5ID0gcGFyc2VkLmdldChyZXF1ZXN0Lm1vZHVsZUlkKVxuXG4gICAgICBpZiAoIWRlcGVuZGVuY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBlbmRlbmN5ICcke3JlcXVlc3QubW9kdWxlSWR9JyB3YXMgbm90IHBhcnNlZCBiZWZvcmUgJyR7c291cmNlLmlkfScuYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lIZWFkZXIgPSByZXF1aXJlZE1hcFZhbHVlKGhlYWRlcnMsIHJlcXVlc3QubW9kdWxlSWQpXG4gICAgICBjb25zdCBuYXRpdmVCaW5kaW5nUHJlZml4ID0gcmVxdWVzdC5mYWNhZGU/Lm5hdGl2ZU1vZHVsZXMuZmluZCgoe2lkZW50aXR5fSkgPT4gaWRlbnRpdHkgPT0gcmVxdWVzdC5zcGVjaWZpZXIpPy5pZGVudGl0eSA/P1xuICAgICAgICBkZXBlbmRlbmN5SGVhZGVyLm5hdGl2ZU5hbWVcbiAgICAgIGNvbnN0IG5hdGl2ZUJpbmRpbmdzID0gc291cmNlLmxhbmd1YWdlID09IFwicGhwXCIgJiYgcmVxdWVzdC5uYW1lc3BhY2VcbiAgICAgICAgPyAoaGVhZGVyLmJpbmRpbmdzID8/IFtdKS5maWx0ZXIoKHtuYXRpdmVOYW1lfSkgPT4gbmF0aXZlTmFtZS5zdGFydHNXaXRoKGAke25hdGl2ZUJpbmRpbmdQcmVmaXh9XFxcXGApKVxuICAgICAgICA6IFtdXG4gICAgICBjb25zdCBzZWxlY3RlZEV4cG9ydHMgPSByZXF1ZXN0Lm5hbWVzcGFjZSAmJiBzb3VyY2UubGFuZ3VhZ2UgPT0gXCJwaHBcIlxuICAgICAgICA/IGRlcGVuZGVuY3kuZXhwb3J0cy5maWx0ZXIoKHtleHBvcnRlZE5hbWV9KSA9PiBuYXRpdmVCaW5kaW5ncy5zb21lKCh7aW1wb3J0ZWROYW1lfSkgPT4gaW1wb3J0ZWROYW1lID09IGV4cG9ydGVkTmFtZSkpXG4gICAgICAgIDogcmVxdWVzdC5uYW1lc3BhY2VcbiAgICAgICAgICA/IGRlcGVuZGVuY3kuZXhwb3J0c1xuICAgICAgICA6IGRlcGVuZGVuY3kuZXhwb3J0cy5maWx0ZXIoKHtleHBvcnRlZE5hbWV9KSA9PiBleHBvcnRlZE5hbWUgPT0gcmVxdWVzdC5pbXBvcnRlZE5hbWUpXG5cbiAgICAgIGlmIChzZWxlY3RlZEV4cG9ydHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJVTlJFU09MVkVEX0lNUE9SVFwiLCByZXF1ZXN0Lm5hbWVzcGFjZVxuICAgICAgICAgID8gYEltcG9ydGVkIG1vZHVsZSAnJHtyZXF1ZXN0Lm1vZHVsZUlkfScgaGFzIG5vIGV4cGxpY2l0bHkgYm91bmQgZXhwb3J0cy5gXG4gICAgICAgICAgOiBgTW9kdWxlICcke3JlcXVlc3QubW9kdWxlSWR9JyBkb2VzIG5vdCBleHBvcnQgJyR7cmVxdWVzdC5pbXBvcnRlZE5hbWV9Jy5gLCByZXF1ZXN0LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBleHBvcnRlZCBvZiBzZWxlY3RlZEV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlQmluZGluZyA9IG5hdGl2ZUJpbmRpbmdzLmZpbmQoKHtpbXBvcnRlZE5hbWV9KSA9PiBpbXBvcnRlZE5hbWUgPT0gZXhwb3J0ZWQuZXhwb3J0ZWROYW1lKVxuICAgICAgICBjb25zdCBsb2NhbE5hbWUgPSBuYXRpdmVCaW5kaW5nPy5sb2NhbE5hbWUgPz8gKHJlcXVlc3QubmFtZXNwYWNlXG4gICAgICAgICAgPyBxdWFsaWZpZWRJbXBvcnROYW1lKHNvdXJjZS5sYW5ndWFnZSwgZGVwZW5kZW5jeUhlYWRlci5uYXRpdmVOYW1lLCBleHBvcnRlZClcbiAgICAgICAgICA6IHJlcXVlc3QubG9jYWxOYW1lXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgaW1wb3J0TG9jYXRpb24gPSBuYXRpdmVCaW5kaW5nPy5sb2NhdGlvbiA/PyByZXF1ZXN0LmxvY2F0aW9uXG5cbiAgICAgICAgaWYgKGxvY2FsTmFtZXMuaGFzKGxvY2FsTmFtZSkpIHtcbiAgICAgICAgICBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIkRVUExJQ0FURV9JTVBPUlRfQklORElOR1wiLCBgRHVwbGljYXRlIGltcG9ydCBiaW5kaW5nICcke2xvY2FsTmFtZX0nLmAsIGltcG9ydExvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIGxvY2FsTmFtZXMuYWRkKGxvY2FsTmFtZSlcbiAgICAgICAgaWYgKG5hdGl2ZUJpbmRpbmcgJiYgbmF0aXZlQmluZGluZy5zeW1ib2xLaW5kICE9IGV4cG9ydGVkLnN5bWJvbEtpbmQgJiZcbiAgICAgICAgICAhKG5hdGl2ZUJpbmRpbmcuc3ltYm9sS2luZCA9PSBcInJlY29yZFwiICYmIGV4cG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJlcnJvclwiKSkge1xuICAgICAgICAgIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiSU1QT1JUX0tJTkRfTUlTTUFUQ0hcIiwgYEltcG9ydCAnJHtuYXRpdmVCaW5kaW5nLmltcG9ydGVkTmFtZX0nIGhhcyB0aGUgd3JvbmcgZGVjbGFyYXRpb24ga2luZC5gLCBpbXBvcnRMb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdC50eXBlT25seSAmJiBleHBvcnRlZC5zeW1ib2xLaW5kICE9IFwicmVjb3JkXCIpIHtcbiAgICAgICAgICBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIklNUE9SVF9LSU5EX01JU01BVENIXCIsIGBUeXBlIGltcG9ydCAnJHtyZXF1ZXN0LmltcG9ydGVkTmFtZX0nIGRvZXMgbm90IG5hbWUgYSByZWNvcmQuYCwgaW1wb3J0TG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hdGl2ZUJpbmRpbmcpIGNvbnN1bWVkQmluZGluZ3MuYWRkKG5hdGl2ZUJpbmRpbmcpXG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb25Gb3IoZGVwZW5kZW5jeSwgZXhwb3J0ZWQpXG4gICAgICAgIGNvbnN0IHR5cGVPbmx5ID0gbmF0aXZlQmluZGluZz8udHlwZU9ubHkgPz8gcmVxdWVzdC50eXBlT25seVxuXG4gICAgICAgIGlmIChleHBvcnRlZC5zeW1ib2xLaW5kID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHZpc2libGVGdW5jdGlvbnMuc2V0KGxvY2FsTmFtZSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSAqLyAoZGVjbGFyYXRpb24pKVxuICAgICAgICAgIHZpc2libGVDYWxsRWZmZWN0cy5zZXQobG9jYWxOYW1lLCBuZXcgU2V0KGNhbGxFZmZlY3RzQnlEZWNsYXJhdGlvbklkLmdldChleHBvcnRlZC5kZWNsYXJhdGlvbklkKSA/PyBbXSkpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXhwb3J0ZWQuc3ltYm9sS2luZCA9PSBcInJlY29yZFwiKSB7XG4gICAgICAgICAgY29uc3QgcmVjb3JkID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gKi8gKGRlY2xhcmF0aW9uKVxuXG4gICAgICAgICAgdmlzaWJsZVJlY29yZHNCeU5hbWUuc2V0KGxvY2FsTmFtZSwgcmVjb3JkKVxuICAgICAgICAgIGlmICghdHlwZU9ubHkpIHZpc2libGVWYWx1ZVJlY29yZHNCeU5hbWUuc2V0KGxvY2FsTmFtZSwgcmVjb3JkKVxuICAgICAgICAgIHZpc2libGVSZWNvcmRzQnlJZC5zZXQoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZWNvcmQuaWQpLCByZWNvcmQpXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwb3J0ZWQuc3ltYm9sS2luZCA9PSBcImNsYXNzXCIpIHtcbiAgICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbn0gKi8gKGRlY2xhcmF0aW9uRm9yKGRlcGVuZGVuY3ksIGV4cG9ydGVkKSlcblxuICAgICAgICAgIHZpc2libGVDbGFzc2VzQnlOYW1lLnNldChsb2NhbE5hbWUsIGRlY2xhcmF0aW9uKVxuICAgICAgICAgIHZpc2libGVDbGFzc2VzQnlJZC5zZXQoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIGRlY2xhcmF0aW9uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoZGVjbGFyYXRpb24pXG5cbiAgICAgICAgICB2aXNpYmxlRXJyb3JzQnlOYW1lLnNldChsb2NhbE5hbWUsIGVycm9yKVxuICAgICAgICAgIHZpc2libGVFcnJvcnNCeUlkLnNldCgvKiogQHR5cGUge3N0cmluZ30gKi8gKGVycm9yLmlkKSwgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj59ICovXG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IHtcbiAgICAgICAgICBkZWNsYXJhdGlvbjogcmVxdWVzdC5kZWNsYXJhdGlvbkxvY2F0aW9uID8/IHJlcXVlc3QubG9jYXRpb24sXG4gICAgICAgICAgcGF0aDogcmVxdWVzdC5wYXRoTG9jYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVxdWVzdC5uYW1lc3BhY2UgfHwgbmF0aXZlQmluZGluZyB8fCByZXF1ZXN0LmZhY2FkZSkge1xuICAgICAgICAgIHJhbmdlcy5pbXBvcnRlZE5hbWUgPSBuYXRpdmVCaW5kaW5nPy5sb2NhdGlvbiA/PyByZXF1ZXN0LmltcG9ydGVkTmFtZUxvY2F0aW9uID8/IGltcG9ydExvY2F0aW9uXG4gICAgICAgICAgcmFuZ2VzLmxvY2FsTmFtZSA9IG5hdGl2ZUJpbmRpbmc/LmxvY2F0aW9uID8/IHJlcXVlc3QubG9jYWxOYW1lTG9jYXRpb24gPz8gaW1wb3J0TG9jYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGltcG9ydHMucHVzaCh7XG4gICAgICAgICAgZGVjbGFyYXRpb25JZDogZXhwb3J0ZWQuZGVjbGFyYXRpb25JZCxcbiAgICAgICAgICBpbXBvcnRlZE5hbWU6IGV4cG9ydGVkLmV4cG9ydGVkTmFtZSxcbiAgICAgICAgICBraW5kOiBcIkltcG9ydFwiLFxuICAgICAgICAgIGxvY2FsTmFtZSxcbiAgICAgICAgICBsb2NhdGlvbjogaW1wb3J0TG9jYXRpb24sXG4gICAgICAgICAgbW9kdWxlSWQ6IHJlcXVlc3QubW9kdWxlSWQsXG4gICAgICAgICAgLi4uKHJlcXVlc3QuZmFjYWRlID8ge3N0ZGxpYkZhY2FkZToge1xuICAgICAgICAgICAgZmFjYWRlSWRlbnRpdHk6IHJlcXVlc3QuZmFjYWRlLmlkZW50aXR5LFxuICAgICAgICAgICAgZmFjYWRlVmVyc2lvbjogcmVxdWVzdC5mYWNhZGUudmVyc2lvbixcbiAgICAgICAgICAgIG5hdGl2ZU1vZHVsZTogcmVxdWVzdC5zcGVjaWZpZXIsXG4gICAgICAgICAgICBuYXRpdmVTeW1ib2w6IGV4cG9ydGVkLmV4cG9ydGVkTmFtZSxcbiAgICAgICAgICAgIHNjaGVtYTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU2VtYW50aWZvbGRTdGRsaWJGYWNhZGVSZXNvbHV0aW9uXCIpLFxuICAgICAgICAgICAgdmVyc2lvbjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKDEpXG4gICAgICAgICAgfX0gOiB7fSksXG4gICAgICAgICAgc291cmNlUHJvdmVuYW5jZTogc291cmNlQXNzb2NpYXRpb24oaW1wb3J0TG9jYXRpb24sIHJhbmdlcywgc291cmNlSWQpLFxuICAgICAgICAgIHN5bWJvbEtpbmQ6IGV4cG9ydGVkLnN5bWJvbEtpbmQsXG4gICAgICAgICAgdHlwZU9ubHlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdW5jb25zdW1lZEJpbmRpbmcgPSAoaGVhZGVyLmJpbmRpbmdzID8/IFtdKS5maW5kKChiaW5kaW5nKSA9PiAhY29uc3VtZWRCaW5kaW5ncy5oYXMoYmluZGluZykpXG5cbiAgICBpZiAodW5jb25zdW1lZEJpbmRpbmcpIHtcbiAgICAgIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiVU5SRVNPTFZFRF9JTVBPUlRcIiwgYE5hdGl2ZSBpbXBvcnQgJyR7dW5jb25zdW1lZEJpbmRpbmcubmF0aXZlTmFtZX0nIGhhcyBubyBtYXRjaGluZyByZXF1aXJlZCBtb2R1bGUuYCwgdW5jb25zdW1lZEJpbmRpbmcubG9jYXRpb24pXG4gICAgfVxuXG4gICAgY29uc3QgZnJvbnRlbmQgPSAvKiogQHR5cGUgeyhpbnB1dDogb2JqZWN0KSA9PiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gKi8gKFxuICAgICAgbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKHNvdXJjZS5sYW5ndWFnZSwgXCJmcm9udGVuZFwiKSlcbiAgICBjb25zdCBmYWNhZGVNb2R1bGVzID0gbmV3IFNldChzb3VyY2UuZmFjYWRlPy5yZXF1aXJlbWVudHMubWFwKCh7bW9kdWxlfSkgPT4gbW9kdWxlKSA/PyBbXSlcbiAgICBjb25zdCBtb2R1bGVDYXBhYmlsaXRpZXMgPSByZXF1ZXN0ZWRBdXRob3JpdHk/LmNhcGFiaWxpdGllcyA/PyAoc291cmNlLmZhY2FkZT8ucmVxdWlyZW1lbnRzLmxlbmd0aFxuICAgICAgPyBhdXRob3JpdHk/Lm1vZHVsZXM/LmZpbHRlcigoe2lkZW50aXR5fSkgPT4gZmFjYWRlTW9kdWxlcy5oYXMoaWRlbnRpdHkpKS5mbGF0TWFwKCh7Y2FwYWJpbGl0aWVzfSkgPT4gY2FwYWJpbGl0aWVzKSA/P1xuICAgICAgICBhdXRob3JpdHk/LmNhcGFiaWxpdGllc1xuICAgICAgOiB1bmRlZmluZWQpXG4gICAgY29uc3QgcmF3ID0gZnJvbnRlbmQoe1xuICAgICAgY2FwYWJpbGl0aWVzOiBtb2R1bGVDYXBhYmlsaXRpZXMsXG4gICAgICBmaWxlbmFtZTogc291cmNlLmZpbGVuYW1lLFxuICAgICAgbGFuZ3VhZ2U6IHNvdXJjZS5sYW5ndWFnZSxcbiAgICAgIHByb2dyYW06IHtcbiAgICAgICAgY2xhc3NlczogdmlzaWJsZUNsYXNzZXNCeU5hbWUsXG4gICAgICAgIGZ1bmN0aW9uczogdmlzaWJsZUZ1bmN0aW9ucyxcbiAgICAgICAgaXNFbnRyeTogc291cmNlLmlkID09IGlucHV0LmVudHJ5TW9kdWxlLFxuICAgICAgICBlcnJvcnM6IHZpc2libGVFcnJvcnNCeU5hbWUsXG4gICAgICAgIHJlY29yZHM6IHZpc2libGVSZWNvcmRzQnlOYW1lLFxuICAgICAgICB2YWx1ZVJlY29yZHM6IHZpc2libGVWYWx1ZVJlY29yZHNCeU5hbWVcbiAgICAgIH0sXG4gICAgICBzb3VyY2U6IHNvdXJjZS5zb3VyY2VcbiAgICB9KVxuXG4gICAgaWYgKG1vZHVsZUNhcGFiaWxpdGllcykgcmF3LmNhcGFiaWxpdGllcyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119ICovIChtb2R1bGVDYXBhYmlsaXRpZXMpXG4gICAgaWYgKChyYXcuY2xhc3Nlcz8ubGVuZ3RoID8/IDApID4gMCAmJiAhc291cmNlLmZhY2FkZT8ucHVibGljRGVjbGFyYXRpb25zLnNvbWUoKHtraW5kfSkgPT4ga2luZCA9PSBcImNsYXNzXCIpKSB7XG4gICAgICBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlVOU1VQUE9SVEVEX1NZTlRBWFwiLFxuICAgICAgICBcIlRhc2sgMDMzIHJlZmVyZW5jZSBjbGFzc2VzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBUYXNrIDAxMCBzZW1hbnRpYyBwcm9ncmFtIHByb2ZpbGUuXCIsXG4gICAgICAgIHJhdy5jbGFzc2VzPy5bMF0/LmxvY2F0aW9uID8/IHJhdy5sb2NhdGlvbilcbiAgICB9XG5cbiAgICBpZiAoc291cmNlLmlkID09IGlucHV0LmVudHJ5TW9kdWxlICYmIHJhdy5lbnRyeVBvaW50LmJvZHkuc3RhdGVtZW50cy5sZW5ndGggPT0gMCkge1xuICAgICAgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJJTlZBTElEX0VOVFJZX01PRFVMRVwiLCBgU2VsZWN0ZWQgZW50cnkgbW9kdWxlICcke3NvdXJjZS5pZH0nIGhhcyBubyBleGVjdXRhYmxlIHN0YXRlbWVudHMuYCwgcmF3LmVudHJ5UG9pbnQubG9jYXRpb24pXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZVBhcnNlZE1vZHVsZShyYXcsIHNvdXJjZS5sYW5ndWFnZSwge1xuICAgICAgICBjYWxsRWZmZWN0czogdmlzaWJsZUNhbGxFZmZlY3RzLFxuICAgICAgICBlcnJvcnM6IHZpc2libGVFcnJvcnNCeUlkLFxuICAgICAgICBmdW5jdGlvbnM6IHZpc2libGVGdW5jdGlvbnMsXG4gICAgICAgIHJlY29yZHM6IHZpc2libGVSZWNvcmRzQnlJZCxcbiAgICAgICAgY2xhc3NlczogdmlzaWJsZUNsYXNzZXNCeUlkXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB0YXNrMDM3ID0gc291cmNlLmxhbmd1YWdlID09IFwicnVieVwiICYmIGhlYWRlci5pbXBvcnRzLnNvbWUoKHtmYWNhZGV9KSA9PiBmYWNhZGU/LmlkZW50aXR5LnN0YXJ0c1dpdGgoXCJzZW1hbnRpZm9sZC50YXNrMDM3LlwiKSlcblxuICAgICAgaWYgKHRhc2swMzcgJiYgZXJyb3IgaW5zdGFuY2VvZiBTZW1hbnRpZm9sZERpYWdub3N0aWMgJiYgZXJyb3IuY29kZSA9PSBcIlVOS05PV05fTUVUSE9EXCIgJiZcbiAgICAgICAgZXJyb3IuZGV0YWlsLnN0YXJ0c1dpdGgoXCJDbGFzcyAnVENQU29ja2V0J1wiKSkge1xuICAgICAgICBmYWNhZGVGYWlsdXJlKFwicnVieVwiLCBcIlNURExJQl9GQUNBREVfTUVNQkVSX1VOU1VQUE9SVEVEXCIsIGVycm9yLmRldGFpbCwgZXJyb3IubG9jYXRpb24pXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgICByZWtleURlY2xhcmF0aW9ucyhyYXcsIHNvdXJjZS5pZClcbiAgICBjb25zdCBsb2NhbENhbGxFZmZlY3RzID0gbW9kdWxlVW5jaGVja2VkRXJyb3JFZmZlY3RzKHJhdywge2NhbGxFZmZlY3RzOiB2aXNpYmxlQ2FsbEVmZmVjdHMsIGZ1bmN0aW9uczogdmlzaWJsZUZ1bmN0aW9uc30pXG5cbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJhdy5mdW5jdGlvbnMpIHtcbiAgICAgIGNhbGxFZmZlY3RzQnlEZWNsYXJhdGlvbklkLnNldCgvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSwgbmV3IFNldChsb2NhbENhbGxFZmZlY3RzLmdldChkZWNsYXJhdGlvbi5uYW1lKSA/PyBbXSkpXG4gICAgfVxuICAgIGFubm90YXRlUGFyc2VkTW9kdWxlKHJhdywgc291cmNlKVxuICAgIHJlYmFzZVBhcnNlZE1vZHVsZVByb3ZlbmFuY2UocmF3LCByZWdpc3RlcmVkU291cmNlcywgc291cmNlSWQpXG5cbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHtkZWNsYXJhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24sIHN5bWJvbEtpbmQ6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRGVjbGFyYXRpb25LaW5kfT59ICovXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQnlOYW1lID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJhdy5yZWNvcmRzID8/IFtdKSBkZWNsYXJhdGlvbnNCeU5hbWUuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIHtkZWNsYXJhdGlvbiwgc3ltYm9sS2luZDogXCJyZWNvcmRcIn0pXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByYXcuY2xhc3NlcyA/PyBbXSkgZGVjbGFyYXRpb25zQnlOYW1lLnNldChkZWNsYXJhdGlvbi5uYW1lLCB7ZGVjbGFyYXRpb24sIHN5bWJvbEtpbmQ6IFwiY2xhc3NcIn0pXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByYXcuZXJyb3JzID8/IFtdKSBkZWNsYXJhdGlvbnNCeU5hbWUuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIHtkZWNsYXJhdGlvbiwgc3ltYm9sS2luZDogXCJlcnJvclwifSlcbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHJhdy5mdW5jdGlvbnMpIGRlY2xhcmF0aW9uc0J5TmFtZS5zZXQoZGVjbGFyYXRpb24ubmFtZSwge2RlY2xhcmF0aW9uLCBzeW1ib2xLaW5kOiBcImZ1bmN0aW9uXCJ9KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNFeHBvcnRbXX0gKi9cbiAgICBjb25zdCBleHBvcnRzID0gaGVhZGVyLmV4cG9ydHMubWFwKChyZXF1ZXN0KSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGRlY2xhcmF0aW9uc0J5TmFtZS5nZXQocmVxdWVzdC5sb2NhbE5hbWUpXG5cbiAgICAgIGlmICghcmVzb2x2ZWQpIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiVU5SRVNPTFZFRF9FWFBPUlRcIiwgYFVua25vd24gZXhwb3J0ZWQgZGVjbGFyYXRpb24gJyR7cmVxdWVzdC5sb2NhbE5hbWV9Jy5gLCByZXF1ZXN0LmxvY2F0aW9uKVxuICAgICAgaWYgKHJlcXVlc3QudHlwZU9ubHkgJiYgcmVzb2x2ZWQuc3ltYm9sS2luZCAhPSBcInJlY29yZFwiKSB7XG4gICAgICAgIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiRVhQT1JUX0tJTkRfTUlTTUFUQ0hcIiwgYFR5cGUgZXhwb3J0ICcke3JlcXVlc3QuZXhwb3J0ZWROYW1lfScgZG9lcyBub3QgbmFtZSBhIHJlY29yZC5gLCByZXF1ZXN0LmxvY2F0aW9uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlc29sdmVkLmRlY2xhcmF0aW9uLmlkKSxcbiAgICAgICAgZXhwb3J0ZWROYW1lOiByZXF1ZXN0LmV4cG9ydGVkTmFtZSxcbiAgICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRXhwb3J0XCIpLFxuICAgICAgICBsb2NhdGlvbjogcmVxdWVzdC5sb2NhdGlvbixcbiAgICAgICAgc291cmNlUHJvdmVuYW5jZTogc291cmNlQXNzb2NpYXRpb24ocmVxdWVzdC5sb2NhdGlvbiwge1xuICAgICAgICAgIGRlY2xhcmF0aW9uOiByZXF1ZXN0LmRlY2xhcmF0aW9uTG9jYXRpb24gPz8gcmVxdWVzdC5sb2NhdGlvbixcbiAgICAgICAgICBleHBvcnRlZE5hbWU6IHJlcXVlc3QuZXhwb3J0ZWROYW1lTG9jYXRpb24gPz8gcmVxdWVzdC5sb2NhdGlvbixcbiAgICAgICAgICBsb2NhbE5hbWU6IHJlcXVlc3QubG9jYWxOYW1lTG9jYXRpb24gPz8gcmVxdWVzdC5sb2NhdGlvblxuICAgICAgICB9LCBzb3VyY2VJZCksXG4gICAgICAgIHN5bWJvbEtpbmQ6IHJlc29sdmVkLnN5bWJvbEtpbmRcbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbnN0IGV4cG9ydGVkTmFtZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAoY29uc3QgZXhwb3J0ZWQgb2YgZXhwb3J0cykge1xuICAgICAgaWYgKGV4cG9ydGVkTmFtZXMuaGFzKGV4cG9ydGVkLmV4cG9ydGVkTmFtZSkpIHtcbiAgICAgICAgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJEVVBMSUNBVEVfRVhQT1JUXCIsIGBEdXBsaWNhdGUgZXhwb3J0ICcke2V4cG9ydGVkLmV4cG9ydGVkTmFtZX0nLmAsIGV4cG9ydGVkLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgZXhwb3J0ZWROYW1lcy5hZGQoZXhwb3J0ZWQuZXhwb3J0ZWROYW1lKVxuICAgIH1cblxuICAgIGNvbnN0IHtlbnRyeVBvaW50LCAuLi5tb2R1bGVXaXRob3V0RW50cnl9ID0gcmF3XG4gICAgY29uc3QgbW9kdWxlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGV9ICovICh7XG4gICAgICAuLi5tb2R1bGVXaXRob3V0RW50cnksXG4gICAgICAuLi4oc291cmNlLmlkID09IGlucHV0LmVudHJ5TW9kdWxlID8ge2VudHJ5UG9pbnR9IDoge30pLFxuICAgICAgZXhwb3J0cyxcbiAgICAgIGlkOiBzb3VyY2UuaWQsXG4gICAgICBpbXBvcnRzLFxuICAgICAgLi4uKHNvdXJjZS5mYWNhZGUgPyB7c3RkbGliRmFjYWRlOiB7aWRlbnRpdHk6IHNvdXJjZS5mYWNhZGUuaWRlbnRpdHksIHZlcnNpb246IHNvdXJjZS5mYWNhZGUudmVyc2lvbn19IDoge30pLFxuICAgICAgc291cmNlRmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZVxuICAgIH0pXG5cbiAgICBpZiAoc291cmNlLmZhY2FkZSkgdmFsaWRhdGVQYXJzZWRGYWNhZGUoc291cmNlLmZhY2FkZSwgbW9kdWxlKVxuXG4gICAgcGFyc2VkLnNldChzb3VyY2UuaWQsIG1vZHVsZSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW50cnlNb2R1bGU6IGlucHV0LmVudHJ5TW9kdWxlLFxuICAgIGtpbmQ6IFwiUHJvZ3JhbVwiLFxuICAgIG1vZHVsZXM6IG9yZGVyZWRJZHMubWFwKChpZCkgPT4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGV9ICovIChwYXJzZWQuZ2V0KGlkKSkpLFxuICAgIC4uLihyZXF1ZXN0ZWRBdXRob3JpdHkgPyB7XG4gICAgICBzdGRsaWJDb250cmFjdDoge1xuICAgICAgICBpZGVudGl0eTogcmVxdWVzdGVkQXV0aG9yaXR5LmlkLFxuICAgICAgICAuLi4ocmVxdWVzdGVkQXV0aG9yaXR5LmNvbnRyYWN0VmVyc2lvbiAhPT0gdW5kZWZpbmVkID8ge2NvbnRyYWN0VmVyc2lvbjogcmVxdWVzdGVkQXV0aG9yaXR5LmNvbnRyYWN0VmVyc2lvbn0gOiB7fSlcbiAgICAgIH1cbiAgICB9IDogZmFjYWRlQXV0aG9yaXR5ICYmIFwiY29udHJhY3RzXCIgaW4gZmFjYWRlQXV0aG9yaXR5ID8ge3N0ZGxpYkNvbnRyYWN0czogZmFjYWRlQXV0aG9yaXR5LmNvbnRyYWN0c31cbiAgICAgIDogZmFjYWRlQXV0aG9yaXR5ID8ge3N0ZGxpYkNvbnRyYWN0OiBmYWNhZGVBdXRob3JpdHkuY29udHJhY3R9IDoge30pLFxuICAgIC4uLihmYWNhZGVSZWNvcmRzLmxlbmd0aCA+IDAgPyB7c3RkbGliRmFjYWRlczogc3RkbGliRmFjYWRlUHJvZ3JhbURlc2NyaXB0b3IoYXBwbGljYXRpb25Tb3VyY2VzWzBdLmxhbmd1YWdlLCBmYWNhZGVSZWNvcmRzKX0gOiB7fSksXG4gICAgc291cmNlczogcmVnaXN0ZXJlZFNvdXJjZXNcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHBhcnNlci1vd25lZCBuYXRpdmUgbW9kdWxlIGFuZCBzeW1ib2wgZXZpZGVuY2UgdG8gZmFjYWRlIHJvb3RzLlxuICogTXV0YXRpbmcgdGhlIHByaXZhdGUgaGVhZGVyIHJlcXVlc3RzIGtlZXBzIHRoZSBwcm9vZiBhdHRhY2hlZCB0byB0aGUgZXhhY3QgaW1wb3J0IG5vZGUuXG4gKiBAcGFyYW0ge1Byb2dyYW1Tb3VyY2VbXX0gc291cmNlcyAtIENhbGxlci1vd25lZCBzb3VyY2VzLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBQcm9ncmFtSGVhZGVyPn0gaGVhZGVycyAtIFBhcnNlci1vd25lZCBzb3VyY2UgaGVhZGVycy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zdGRsaWItZmFjYWRlcy5qc1wiKS5TdGRsaWJGYWNhZGVSZWNvcmRbXX0gU2VsZWN0ZWQgZmFjYWRlIHJvb3RzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRmFjYWRlSW1wb3J0cyhzb3VyY2VzLCBoZWFkZXJzKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc3RkbGliLWZhY2FkZXMuanNcIikuU3RkbGliRmFjYWRlUmVjb3JkW119ICovXG4gIGNvbnN0IHJvb3RzID0gW11cblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgY29uc3QgaGVhZGVyID0gcmVxdWlyZWRNYXBWYWx1ZShoZWFkZXJzLCBzb3VyY2UuaWQpXG5cbiAgICBpZiAoc291cmNlLmxhbmd1YWdlID09IFwicnVieVwiKSByZXNvbHZlUnVieVRhc2swMzdGYWNhZGVzKHNvdXJjZSwgaGVhZGVyLCByb290cylcblxuICAgIGlmIChzb3VyY2UubGFuZ3VhZ2UgPT0gXCJwaHBcIikge1xuICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIGhlYWRlci5iaW5kaW5ncyA/PyBbXSkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGJpbmRpbmcubmF0aXZlTmFtZS5zcGxpdChcIlxcXFxcIilcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXJ0cy5wb3AoKSlcbiAgICAgICAgY29uc3QgbmF0aXZlTW9kdWxlID0gcGFydHMuam9pbihcIlxcXFxcIilcblxuICAgICAgICBpZiAoIW5hdGl2ZU1vZHVsZS5zdGFydHNXaXRoKFwiU2VtYW50aWZvbGRcXFxcVGFzazAzNlxcXFxcIikpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGZhY2FkZSA9IHJlc29sdmVGYWNhZGVBdChzb3VyY2UsIG5hdGl2ZU1vZHVsZSwgc3ltYm9sLCBiaW5kaW5nLmxvY2F0aW9uKVxuXG4gICAgICAgIGhlYWRlci5pbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IGJpbmRpbmcubG9jYXRpb24sXG4gICAgICAgICAgZmFjYWRlLFxuICAgICAgICAgIGltcG9ydGVkTmFtZTogXCIqXCIsXG4gICAgICAgICAgaW1wb3J0ZWROYW1lTG9jYXRpb246IGJpbmRpbmcubG9jYXRpb24sXG4gICAgICAgICAgbG9jYWxOYW1lOiBcIlwiLFxuICAgICAgICAgIGxvY2FsTmFtZUxvY2F0aW9uOiBiaW5kaW5nLmxvY2F0aW9uLFxuICAgICAgICAgIGxvY2F0aW9uOiBiaW5kaW5nLmxvY2F0aW9uLFxuICAgICAgICAgIG5hbWVzcGFjZTogdHJ1ZSxcbiAgICAgICAgICBwYXRoTG9jYXRpb246IGJpbmRpbmcubG9jYXRpb24sXG4gICAgICAgICAgc3BlY2lmaWVyOiBuYXRpdmVNb2R1bGUsXG4gICAgICAgICAgc3RkbGliQ2FuZGlkYXRlOiB0cnVlLFxuICAgICAgICAgIHR5cGVPbmx5OiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICByb290cy5wdXNoKGZhY2FkZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgaGVhZGVyLmltcG9ydHMpIHtcbiAgICAgIGNvbnN0IGphdmFDYW5kaWRhdGUgPSBzb3VyY2UubGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgcmVxdWVzdC5zcGVjaWZpZXIuc3RhcnRzV2l0aChcInNlbWFudGlmb2xkLnRhc2swMzYuXCIpXG5cbiAgICAgIGlmICghcmVxdWVzdC5zdGRsaWJDYW5kaWRhdGUgJiYgIWphdmFDYW5kaWRhdGUpIGNvbnRpbnVlXG4gICAgICBpZiAocmVxdWVzdC5mYWNhZGUpIGNvbnRpbnVlXG4gICAgICBpZiAoL1xcLig/OmJ1bmRsZXxkbGx8bm9kZXxzbykkL2l1LnRlc3QocmVxdWVzdC5zcGVjaWZpZXIpKSB7XG4gICAgICAgIGZhY2FkZUZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfTkFUSVZFX0VYVEVOU0lPTl9VTlNVUFBPUlRFRFwiLFxuICAgICAgICAgIFwiTmF0aXZlLWV4dGVuc2lvbiBsb2FkaW5nIGNhbm5vdCBwYXJ0aWNpcGF0ZSBpbiBhIHBvcnRhYmxlIHN0ZGxpYiBmYWNhZGUuXCIsIHJlcXVlc3QucGF0aExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3Qgc3VwcGxpZWQgPSBbLi4uaGVhZGVycy5lbnRyaWVzKCldLmZpbmQoKFssIGNhbmRpZGF0ZV0pID0+IGNhbmRpZGF0ZS5uYXRpdmVOYW1lID09IHJlcXVlc3Quc3BlY2lmaWVyKVxuXG4gICAgICBpZiAoc3VwcGxpZWQpIHtcbiAgICAgICAgZmFjYWRlRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9TSEFET1dFRFwiLFxuICAgICAgICAgIGBDYWxsZXItc3VwcGxpZWQgbW9kdWxlICcke3N1cHBsaWVkWzBdfScgcmVwbGFjZXMgdGhlIGNhdGFsb2d1ZWQgbmF0aXZlIGZhY2FkZSBpZGVudGl0eSAnJHtyZXF1ZXN0LnNwZWNpZmllcn0nLmAsIHJlcXVlc3QucGF0aExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3QgZmFjYWRlID0gcmVxdWVzdC5uYW1lc3BhY2VcbiAgICAgICAgPyByZXNvbHZlRmFjYWRlTW9kdWxlQXQoc291cmNlLCByZXF1ZXN0LnNwZWNpZmllciwgcmVxdWVzdC5wYXRoTG9jYXRpb24pXG4gICAgICAgIDogcmVzb2x2ZUZhY2FkZUF0KHNvdXJjZSwgcmVxdWVzdC5zcGVjaWZpZXIsIHJlcXVlc3QuaW1wb3J0ZWROYW1lLCByZXF1ZXN0LmltcG9ydGVkTmFtZUxvY2F0aW9uID8/IHJlcXVlc3QubG9jYXRpb24pXG5cbiAgICAgIHJlcXVlc3QuZmFjYWRlID0gZmFjYWRlXG4gICAgICByb290cy5wdXNoKGZhY2FkZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdHNcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBleGFjdCBUYXNrIDAzNyBSdWJ5IHJlZmVyZW5jZXMgdW5kZXIgYSBsaXRlcmFsIHNvY2tldCBhY3RpdmF0aW9uIGVkZ2UuXG4gKiBAcGFyYW0ge1Byb2dyYW1Tb3VyY2V9IHNvdXJjZSAtIEltcG9ydGluZyBSdWJ5IHNvdXJjZS5cbiAqIEBwYXJhbSB7UHJvZ3JhbUhlYWRlcn0gaGVhZGVyIC0gUGFyc2VyLW93bmVkIFJ1YnkgaGVhZGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zdGRsaWItZmFjYWRlcy5qc1wiKS5TdGRsaWJGYWNhZGVSZWNvcmRbXX0gcm9vdHMgLSBTZWxlY3RlZCBmYWNhZGUgcm9vdHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJ1YnlUYXNrMDM3RmFjYWRlcyhzb3VyY2UsIGhlYWRlciwgcm9vdHMpIHtcbiAgY29uc3QgYWN0aXZhdGlvbkluZGV4ID0gaGVhZGVyLmltcG9ydHMuZmluZEluZGV4KCh7c3BlY2lmaWVyLCBzdGRsaWJDYW5kaWRhdGV9KSA9PiBzdGRsaWJDYW5kaWRhdGUgJiYgc3BlY2lmaWVyID09IFwic29ja2V0XCIpXG5cbiAgaWYgKGFjdGl2YXRpb25JbmRleCA8IDApIHJldHVyblxuICBjb25zdCBhY3RpdmF0aW9uID0gLyoqIEB0eXBlIHtQcm9ncmFtSW1wb3J0UmVxdWVzdH0gKi8gKGhlYWRlci5pbXBvcnRzLnNwbGljZShhY3RpdmF0aW9uSW5kZXgsIDEpWzBdKVxuICBjb25zdCBiaW5kaW5ncyA9IG5ldyBTZXQoKVxuXG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGhlYWRlci5uYXRpdmVSZWZlcmVuY2VzID8/IFtdKSB7XG4gICAgaWYgKHJlZmVyZW5jZS5uYXRpdmVNb2R1bGUgIT0gXCJzb2NrZXRcIiAmJiByZWZlcmVuY2UubmF0aXZlTW9kdWxlICE9IFwicnVieTpLZXJuZWxcIikgY29udGludWVcbiAgICBjb25zdCBsb2NhbE5hbWUgPSByZWZlcmVuY2UuZm9ybSA9PSBcInJlY2VpdmVyLWNhbGxcIiA/IFwiS2VybmVsLnB1dHNcIiA6IHJlZmVyZW5jZS5zeW1ib2xcblxuICAgIGlmIChiaW5kaW5ncy5oYXMobG9jYWxOYW1lKSkgY29udGludWVcbiAgICBiaW5kaW5ncy5hZGQobG9jYWxOYW1lKVxuICAgIGNvbnN0IGZhY2FkZSA9IHJlc29sdmVGYWNhZGVBdChzb3VyY2UsIHJlZmVyZW5jZS5uYXRpdmVNb2R1bGUsIHJlZmVyZW5jZS5zeW1ib2wsIHJlZmVyZW5jZS5sb2NhdGlvbilcblxuICAgIGhlYWRlci5pbXBvcnRzLnB1c2goe1xuICAgICAgZGVjbGFyYXRpb25Mb2NhdGlvbjogcmVmZXJlbmNlLmxvY2F0aW9uLFxuICAgICAgZmFjYWRlLFxuICAgICAgaW1wb3J0ZWROYW1lOiByZWZlcmVuY2Uuc3ltYm9sLFxuICAgICAgaW1wb3J0ZWROYW1lTG9jYXRpb246IHJlZmVyZW5jZS5sb2NhdGlvbixcbiAgICAgIGxvY2FsTmFtZSxcbiAgICAgIGxvY2FsTmFtZUxvY2F0aW9uOiByZWZlcmVuY2UubG9jYXRpb24sXG4gICAgICBsb2NhdGlvbjogcmVmZXJlbmNlLmxvY2F0aW9uLFxuICAgICAgcGF0aExvY2F0aW9uOiBhY3RpdmF0aW9uLnBhdGhMb2NhdGlvbixcbiAgICAgIHNwZWNpZmllcjogcmVmZXJlbmNlLm5hdGl2ZU1vZHVsZSxcbiAgICAgIHN0ZGxpYkNhbmRpZGF0ZTogdHJ1ZSxcbiAgICAgIHR5cGVPbmx5OiBmYWxzZVxuICAgIH0pXG4gICAgcm9vdHMucHVzaChmYWNhZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBvbmUgZXhhY3QgbmF0aXZlIG1vZHVsZSBhbmQgc3ltYm9sIHdoaWxlIHByZXNlcnZpbmcgcGFyc2VyIGxvY2F0aW9uLlxuICogQHBhcmFtIHtQcm9ncmFtU291cmNlfSBzb3VyY2UgLSBJbXBvcnRpbmcgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hdGl2ZU1vZHVsZSAtIFBhcnNlci1wcm92ZWQgbmF0aXZlIG1vZHVsZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgLSBQYXJzZXItcHJvdmVkIG5hdGl2ZSBzeW1ib2wuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIElkZW50aXR5IGV2aWRlbmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCIpLlN0ZGxpYkZhY2FkZVJlY29yZH0gTG9jYXRlZCBleGFjdCBuYXRpdmUgZmFjYWRlIHJlc29sdXRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGYWNhZGVBdChzb3VyY2UsIG5hdGl2ZU1vZHVsZSwgc3ltYm9sLCBsb2NhdGlvbikge1xuICB0cnkge1xuICAgIHJldHVybiBzdGRsaWJGYWNhZGVSZWdpc3RyeS5yZXNvbHZlRmFjYWRlKHNvdXJjZS5sYW5ndWFnZSwgbmF0aXZlTW9kdWxlLCBzeW1ib2wpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljKSBmYWNhZGVGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgZXJyb3IuY29kZSwgZXJyb3IuZGV0YWlsLCBsb2NhdGlvbilcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25lIGV4YWN0IG5hbWVzcGFjZS1zdHlsZSBuYXRpdmUgbW9kdWxlIHdoaWxlIHByZXNlcnZpbmcgcGFyc2VyIGxvY2F0aW9uLlxuICogQHBhcmFtIHtQcm9ncmFtU291cmNlfSBzb3VyY2UgLSBJbXBvcnRpbmcgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hdGl2ZU1vZHVsZSAtIFBhcnNlci1wcm92ZWQgbmF0aXZlIG1vZHVsZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gSWRlbnRpdHkgZXZpZGVuY2UgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc3RkbGliLWZhY2FkZXMuanNcIikuU3RkbGliRmFjYWRlUmVjb3JkfSBMb2NhdGVkIGV4YWN0IG5hdGl2ZSBmYWNhZGUtbW9kdWxlIHJlc29sdXRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGYWNhZGVNb2R1bGVBdChzb3VyY2UsIG5hdGl2ZU1vZHVsZSwgbG9jYXRpb24pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3RkbGliRmFjYWRlUmVnaXN0cnkucmVzb2x2ZU1vZHVsZShzb3VyY2UubGFuZ3VhZ2UsIG5hdGl2ZU1vZHVsZSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZW1hbnRpZm9sZERpYWdub3N0aWMpIGZhY2FkZUZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBlcnJvci5jb2RlLCBlcnJvci5kZXRhaWwsIGxvY2F0aW9uKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cblxuLyoqXG4gKiBSZWplY3RzIGNhbGxlciBjYXB0dXJlIG9mIGNvbXBpbGVyLW93bmVkIG1vZHVsZS9zb3VyY2UvbmF0aXZlIG5hbWVzIGFuZCBpbXBvcnRlZCBiaW5kaW5ncy5cbiAqIEBwYXJhbSB7UHJvZ3JhbVNvdXJjZVtdfSBhcHBsaWNhdGlvblNvdXJjZXMgLSBDYWxsZXItb3duZWQgc291cmNlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUHJvZ3JhbUhlYWRlcj59IGhlYWRlcnMgLSBDYWxsZXIgcGFyc2VyIGhlYWRlcnMuXG4gKiBAcGFyYW0ge1Byb2dyYW1Tb3VyY2VbXX0gZmFjYWRlU291cmNlcyAtIFNlbGVjdGVkIGNvbXBpbGVyLW93bmVkIGZhY2FkZSBzb3VyY2VzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmFjYWRlQ29sbGlzaW9ucyhhcHBsaWNhdGlvblNvdXJjZXMsIGhlYWRlcnMsIGZhY2FkZVNvdXJjZXMpIHtcbiAgY29uc3QgZmFjYWRlSWRzID0gbmV3IFNldChmYWNhZGVTb3VyY2VzLm1hcCgoe2lkfSkgPT4gaWQpKVxuICBjb25zdCBmYWNhZGVGaWxlbmFtZXMgPSBuZXcgU2V0KGZhY2FkZVNvdXJjZXMubWFwKCh7ZmlsZW5hbWV9KSA9PiBmaWxlbmFtZSkpXG4gIGNvbnN0IGZhY2FkZU5hdGl2ZU5hbWVzID0gbmV3IFNldChmYWNhZGVTb3VyY2VzLm1hcCgoc291cmNlKSA9PiBpbnNwZWN0U291cmNlKHNvdXJjZSkubmF0aXZlTmFtZSkuZmlsdGVyKEJvb2xlYW4pKVxuXG4gIGZvciAoY29uc3Qgc291cmNlIG9mIGFwcGxpY2F0aW9uU291cmNlcykge1xuICAgIGNvbnN0IGhlYWRlciA9IHJlcXVpcmVkTWFwVmFsdWUoaGVhZGVycywgc291cmNlLmlkKVxuXG4gICAgaWYgKGZhY2FkZUlkcy5oYXMoc291cmNlLmlkKSB8fCBmYWNhZGVGaWxlbmFtZXMuaGFzKHNvdXJjZS5maWxlbmFtZSkpIHtcbiAgICAgIGZhY2FkZUZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfTkFNRV9DT0xMSVNJT05cIixcbiAgICAgICAgYENhbGxlciBtb2R1bGUgJyR7c291cmNlLmlkfScgY29sbGlkZXMgd2l0aCBhIGNvbXBpbGVyLW93bmVkIGZhY2FkZSBtb2R1bGUgb3Igc291cmNlIHBhdGguYCwgbW9kdWxlTG9jYXRpb24oc291cmNlLmZpbGVuYW1lLCBzb3VyY2Uuc291cmNlKSlcbiAgICB9XG4gICAgaWYgKGhlYWRlci5uYXRpdmVOYW1lICYmIGZhY2FkZU5hdGl2ZU5hbWVzLmhhcyhoZWFkZXIubmF0aXZlTmFtZSkpIHtcbiAgICAgIGZhY2FkZUZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfUkVPUEVORURcIixcbiAgICAgICAgYENhbGxlciBzb3VyY2UgcmVvcGVucyB0aGUgY29tcGlsZXItb3duZWQgZmFjYWRlIG5hdGl2ZSBpZGVudGl0eSAnJHtoZWFkZXIubmF0aXZlTmFtZX0nLmAsIG1vZHVsZUxvY2F0aW9uKHNvdXJjZS5maWxlbmFtZSwgc291cmNlLnNvdXJjZSkpXG4gICAgfVxuICAgIGNvbnN0IGltcG9ydGVkQmluZGluZ3MgPSBuZXcgU2V0KGhlYWRlci5pbXBvcnRzLmZpbHRlcigoe2ZhY2FkZX0pID0+IGZhY2FkZSAmJiAhZmFjYWRlLnB1YmxpY0RlY2xhcmF0aW9ucy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJcIikpXG4gICAgICAuZmxhdE1hcCgocmVxdWVzdCkgPT4gcmVxdWVzdC5uYW1lc3BhY2UgJiYgc291cmNlLmxhbmd1YWdlID09IFwicGhwXCJcbiAgICAgICAgPyAoaGVhZGVyLmJpbmRpbmdzID8/IFtdKS5maWx0ZXIoKHtuYXRpdmVOYW1lfSkgPT4gbmF0aXZlTmFtZS5zdGFydHNXaXRoKGAke3JlcXVlc3Quc3BlY2lmaWVyfVxcXFxgKSkubWFwKCh7bG9jYWxOYW1lfSkgPT4gbG9jYWxOYW1lKVxuICAgICAgICA6IHJlcXVlc3QubmFtZXNwYWNlID8gW10gOiBbcmVxdWVzdC5sb2NhbE5hbWVdKSlcbiAgICBjb25zdCBzaGFkb3dlZCA9IGhlYWRlci5leHBvcnRzLmZpbmQoKHtsb2NhbE5hbWV9KSA9PiBpbXBvcnRlZEJpbmRpbmdzLmhhcyhsb2NhbE5hbWUpKVxuXG4gICAgaWYgKHNoYWRvd2VkKSBmYWNhZGVGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX1NIQURPV0VEXCIsXG4gICAgICBgTG9jYWwgZGVjbGFyYXRpb24gJyR7c2hhZG93ZWQubG9jYWxOYW1lfScgc2hhZG93cyBhIHBhcnNlci1wcm92ZWQgc3RkbGliIGZhY2FkZSBiaW5kaW5nLmAsIHNoYWRvd2VkLmxvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgcGFyc2VkIGNvbXBpbGVyLW93bmVkIGZhY2FkZSBhZ2FpbnN0IGl0cyByZWdpc3RyeSBkZWNsYXJhdGlvbiBhbmQgY2Fub25pY2FsLW9ubHkgcmVxdWlyZW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zdGRsaWItZmFjYWRlcy5qc1wiKS5TdGRsaWJGYWNhZGVSZWNvcmR9IGZhY2FkZSAtIFNlbGVjdGVkIGZhY2FkZSByZWNvcmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZX0gbW9kdWxlIC0gUGFyc2VkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcnNlZEZhY2FkZShmYWNhZGUsIG1vZHVsZSkge1xuICBjb25zdCBleHBvcnRlZCA9IG5ldyBNYXAobW9kdWxlLmV4cG9ydHMubWFwKChpdGVtKSA9PiBbaXRlbS5leHBvcnRlZE5hbWUsIGl0ZW1dKSlcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGZhY2FkZS5wdWJsaWNEZWNsYXJhdGlvbnMpIHtcbiAgICBpZiAoZGVjbGFyYXRpb24ua2luZCA9PSBcImNsYXNzXCIpIHtcbiAgICAgIHZhbGlkYXRlUGFyc2VkRmFjYWRlQ2xhc3MoZmFjYWRlLCBtb2R1bGUsIGRlY2xhcmF0aW9uLCBleHBvcnRlZC5nZXQoZGVjbGFyYXRpb24ubmFtZSkpXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBleHBvcnRlZERlY2xhcmF0aW9uID0gZXhwb3J0ZWQuZ2V0KGRlY2xhcmF0aW9uLm5hbWUpXG4gICAgY29uc3QgcGFyc2VkID0gZXhwb3J0ZWREZWNsYXJhdGlvbiA/IG1vZHVsZS5mdW5jdGlvbnMuZmluZCgoe2lkfSkgPT4gaWQgPT0gZXhwb3J0ZWREZWNsYXJhdGlvbi5kZWNsYXJhdGlvbklkKSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHNpZ25hdHVyZU1hdGNoZXMgPSBwYXJzZWQgJiYgcGFyc2VkLnBhcmFtZXRlcnMubGVuZ3RoID09IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMubGVuZ3RoICYmXG4gICAgICBwYXJzZWQucGFyYW1ldGVycy5ldmVyeSgocGFyYW1ldGVyLCBpbmRleCkgPT4gcGFyYW1ldGVyLm5hbWUgPT0gZGVjbGFyYXRpb24ucGFyYW1ldGVyc1tpbmRleF0ubmFtZSAmJlxuICAgICAgICBzZW1hbnRpY1R5cGVOYW1lKHBhcmFtZXRlci50eXBlKSA9PSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzW2luZGV4XS50eXBlKSAmJlxuICAgICAgc2VtYW50aWNUeXBlTmFtZShwYXJzZWQucmV0dXJuVHlwZSkgPT0gZGVjbGFyYXRpb24ucmV0dXJuVHlwZVxuXG4gICAgaWYgKCFzaWduYXR1cmVNYXRjaGVzKSBmYWNhZGVGYWlsdXJlKGZhY2FkZS5sYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX0RFQ0xBUkFUSU9OX01JU01BVENIXCIsXG4gICAgICBgRmFjYWRlICcke2ZhY2FkZS5pZGVudGl0eX0nIGV4ZWN1dGFibGUgc291cmNlIGRvZXMgbm90IG1hdGNoIHB1YmxpYyBkZWNsYXJhdGlvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfScuYCwgcGFyc2VkPy5sb2NhdGlvbiA/PyBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVwZW5kZW5jeUlkcyA9IG5ldyBTZXQoZmFjYWRlLmRlcGVuZGVuY2llcy5tYXAoKGRlcGVuZGVuY3kpID0+XG4gICAgc3RkbGliRmFjYWRlUmVnaXN0cnkucmVzb2x2ZUlkZW50aXR5KGRlcGVuZGVuY3kuaWRlbnRpdHksIGZhY2FkZS5sYW5ndWFnZSwgZGVwZW5kZW5jeS5yYW5nZSkuc291cmNlLmlkKSlcblxuICBpZiAobW9kdWxlLmltcG9ydHMuc29tZSgoe21vZHVsZUlkfSkgPT4gIWRlcGVuZGVuY3lJZHMuaGFzKG1vZHVsZUlkKSkgfHxcbiAgICBbLi4uZGVwZW5kZW5jeUlkc10uc29tZSgobW9kdWxlSWQpID0+ICFtb2R1bGUuaW1wb3J0cy5zb21lKChpbXBvcnRlZCkgPT4gaW1wb3J0ZWQubW9kdWxlSWQgPT0gbW9kdWxlSWQpKSkge1xuICAgIGZhY2FkZUZhaWx1cmUoZmFjYWRlLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfREVDTEFSQVRJT05fTUlTTUFUQ0hcIixcbiAgICAgIGBGYWNhZGUgJyR7ZmFjYWRlLmlkZW50aXR5fScgZXhlY3V0YWJsZSBpbXBvcnRzIGRvIG5vdCBtYXRjaCBpdHMgZGVjbGFyZWQgZGVwZW5kZW5jaWVzLmAsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBjb25zdCBhbGxvd2VkT3BlcmF0aW9ucyA9IG5ldyBTZXQoZmFjYWRlLnJlcXVpcmVtZW50cy5mbGF0TWFwKCh7b3BlcmF0aW9uc30pID0+IG9wZXJhdGlvbnMpKVxuICBjb25zdCBvcGVyYXRpb25OYW1lcyA9IG5ldyBNYXAoKG1vZHVsZS5jYXBhYmlsaXRpZXMgPz8gW10pLmZsYXRNYXAoKHtvcGVyYXRpb25zfSkgPT4gb3BlcmF0aW9ucy5tYXAoKHtpZCwgbmFtZX0pID0+IFtpZCwgbmFtZV0pKSlcbiAgY29uc3QgdXNlZE9wZXJhdGlvbnMgPSBjb2xsZWN0RWZmZWN0T3BlcmF0aW9ucyhtb2R1bGUsIG9wZXJhdGlvbk5hbWVzKVxuXG4gIGlmIChbLi4udXNlZE9wZXJhdGlvbnNdLnNvbWUoKG9wZXJhdGlvbikgPT4gIWFsbG93ZWRPcGVyYXRpb25zLmhhcyhvcGVyYXRpb24pKSB8fFxuICAgIFsuLi5hbGxvd2VkT3BlcmF0aW9uc10uc29tZSgob3BlcmF0aW9uKSA9PiAhdXNlZE9wZXJhdGlvbnMuaGFzKG9wZXJhdGlvbikpKSB7XG4gICAgZmFjYWRlRmFpbHVyZShmYWNhZGUubGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9BVVRIT1JJVFlfRk9SR0VEXCIsXG4gICAgICBgRmFjYWRlICcke2ZhY2FkZS5pZGVudGl0eX0nIGNhbm9uaWNhbCBjYWxscyBkbyBub3QgbWF0Y2ggaXRzIGRlY2xhcmVkIHJlcXVpcmVtZW50cy5gLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyBvbmUgZXhlY3V0YWJsZSBjb21waWxlci1vd25lZCBmYWNhZGUgY2xhc3MgYWdhaW5zdCBpdHMgY2xvc2VkIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCIpLlN0ZGxpYkZhY2FkZVJlY29yZH0gZmFjYWRlIC0gT3duaW5nIGZhY2FkZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSBtb2R1bGUgLSBQYXJzZWQgZmFjYWRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc3RkbGliLWZhY2FkZXMuanNcIikuU3RkbGliRmFjYWRlQ2xhc3NEZWNsYXJhdGlvbn0gZGVzY3JpcHRvciAtIFJlZ2lzdHJ5IGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRXhwb3J0IHwgdW5kZWZpbmVkfSBleHBvcnRlZCAtIE1hdGNoaW5nIGV4cG9ydCBldmlkZW5jZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcnNlZEZhY2FkZUNsYXNzKGZhY2FkZSwgbW9kdWxlLCBkZXNjcmlwdG9yLCBleHBvcnRlZCkge1xuICBjb25zdCBwYXJzZWQgPSBleHBvcnRlZD8uc3ltYm9sS2luZCA9PSBcImNsYXNzXCJcbiAgICA/IG1vZHVsZS5jbGFzc2VzPy5maW5kKCh7aWR9KSA9PiBpZCA9PSBleHBvcnRlZC5kZWNsYXJhdGlvbklkKSA6IHVuZGVmaW5lZFxuICBjb25zdCBmYWlsdXJlTmFtZXMgPSBuZXcgTWFwKChtb2R1bGUuY2FwYWJpbGl0aWVzID8/IFtdKS5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcy5tYXAoKHtpZCwgbmFtZX0pID0+IFtpZCwgbmFtZV0pKSlcbiAgY29uc3QgY29uc3RydWN0b3JGYWlsdXJlcyA9IHBhcnNlZD8uY29uc3RydWN0b3IuZmFpbHVyZUlkcz8ubWFwKChpZCkgPT4gZmFpbHVyZU5hbWVzLmdldChpZCkpID8/IFtdXG4gIGNvbnN0IGNvbnN0cnVjdG9yTWF0Y2hlcyA9IHBhcnNlZD8ubmFtZSA9PSBkZXNjcmlwdG9yLm5hbWUgJiYgcGFyc2VkLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIiAmJlxuICAgIHBhcnNlZC5jb25zdHJ1Y3Rvci5lZmZlY3RzPy5qb2luKFwiLFwiKSA9PSBkZXNjcmlwdG9yLmNvbnN0cnVjdG9yLmVmZmVjdHMuam9pbihcIixcIikgJiZcbiAgICBjb25zdHJ1Y3RvckZhaWx1cmVzLmpvaW4oXCIsXCIpID09IGRlc2NyaXB0b3IuY29uc3RydWN0b3IuZmFpbHVyZXMuam9pbihcIixcIikgJiZcbiAgICBwYXJzZWQuY29uc3RydWN0b3IucGFyYW1ldGVycy5sZW5ndGggPT0gZGVzY3JpcHRvci5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuICAgIHBhcnNlZC5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLmV2ZXJ5KChwYXJhbWV0ZXIsIGluZGV4KSA9PiBwYXJhbWV0ZXIubmFtZSA9PSBkZXNjcmlwdG9yLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdLm5hbWUgJiZcbiAgICAgIHNlbWFudGljVHlwZU5hbWUocGFyYW1ldGVyLnR5cGUpID09IGRlc2NyaXB0b3IuY29uc3RydWN0b3IucGFyYW1ldGVyc1tpbmRleF0udHlwZSlcbiAgY29uc3QgbWV0aG9kc01hdGNoID0gcGFyc2VkPy5tZXRob2RzLmxlbmd0aCA9PSBkZXNjcmlwdG9yLm1ldGhvZHMubGVuZ3RoICYmIGRlc2NyaXB0b3IubWV0aG9kcy5ldmVyeSgoZXhwZWN0ZWQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbWV0aG9kID0gcGFyc2VkPy5tZXRob2RzW2luZGV4XVxuICAgIGNvbnN0IGFjdHVhbEZhaWx1cmVzID0gbWV0aG9kPy5mYWlsdXJlSWRzPy5tYXAoKGlkKSA9PiBmYWlsdXJlTmFtZXMuZ2V0KGlkKSkgPz8gW11cbiAgICBjb25zdCBvcGVyYXRpb24gPSBtZXRob2Q/LmJvZHkuc3RhdGVtZW50cy5mbGF0TWFwKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiXG4gICAgICAgID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOiBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gZXhwcmVzc2lvbj8ua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIgPyBbZXhwcmVzc2lvbl0gOiBbXVxuICAgIH0pWzBdXG4gICAgY29uc3QgZmxvdyA9IG9wZXJhdGlvbj8ucmVzb2x1dGlvbi5yZXNvdXJjZUZsb3dcbiAgICBjb25zdCB0ZXJtaW5hbEZhaWx1cmVJZCA9IGZsb3c/LmtpbmQgPT0gXCJib3Jyb3dcIiB8fCBmbG93Py5raW5kID09IFwiY2xvc2VcIiA/IGZsb3cudGVybWluYWxGYWlsdXJlSWQgOiB1bmRlZmluZWRcblxuICAgIGlmICh0ZXJtaW5hbEZhaWx1cmVJZCkgYWN0dWFsRmFpbHVyZXMucHVzaChmYWlsdXJlTmFtZXMuZ2V0KHRlcm1pbmFsRmFpbHVyZUlkKSlcbiAgICByZXR1cm4gbWV0aG9kPy5uYW1lID09IGV4cGVjdGVkLm5hbWUgJiYgbWV0aG9kLmVmZmVjdHM/LmpvaW4oXCIsXCIpID09IGV4cGVjdGVkLmVmZmVjdHMuam9pbihcIixcIikgJiZcbiAgICAgIGFjdHVhbEZhaWx1cmVzLmpvaW4oXCIsXCIpID09IGV4cGVjdGVkLmZhaWx1cmVzLmpvaW4oXCIsXCIpICYmIG1ldGhvZC5wYXJhbWV0ZXJzLmxlbmd0aCA9PSBleHBlY3RlZC5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuICAgICAgbWV0aG9kLnBhcmFtZXRlcnMuZXZlcnkoKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+XG4gICAgICAgIHBhcmFtZXRlci5uYW1lID09IGV4cGVjdGVkLnBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdLm5hbWUgJiZcbiAgICAgICAgc2VtYW50aWNUeXBlTmFtZShwYXJhbWV0ZXIudHlwZSkgPT0gZXhwZWN0ZWQucGFyYW1ldGVyc1twYXJhbWV0ZXJJbmRleF0udHlwZSkgJiZcbiAgICAgIHNlbWFudGljVHlwZU5hbWUobWV0aG9kLnJldHVyblR5cGUpID09IGV4cGVjdGVkLnJldHVyblR5cGVcbiAgfSlcblxuICBpZiAoIWNvbnN0cnVjdG9yTWF0Y2hlcyB8fCAhbWV0aG9kc01hdGNoKSB7XG4gICAgZmFjYWRlRmFpbHVyZShmYWNhZGUubGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9ERUNMQVJBVElPTl9NSVNNQVRDSFwiLFxuICAgICAgYEZhY2FkZSAnJHtmYWNhZGUuaWRlbnRpdHl9JyBleGVjdXRhYmxlIHNvdXJjZSBkb2VzIG5vdCBtYXRjaCBwdWJsaWMgY2xhc3MgJyR7ZGVzY3JpcHRvci5uYW1lfScuYCwgcGFyc2VkPy5sb2NhdGlvbiA/PyBtb2R1bGUubG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBjYW5vbmljYWwgb3BlcmF0aW9uIG5hbWVzIHJlYWNoZWQgaW4gb25lIGZhY2FkZSBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZX0gbW9kdWxlIC0gUGFyc2VkIGZhY2FkZSBtb2R1bGUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIHN0cmluZz59IG9wZXJhdGlvbk5hbWVzIC0gQ2Fub25pY2FsIG5hbWVzIGJ5IG9wZXJhdGlvbiBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtTZXQ8c3RyaW5nPn0gVXNlZCBvcGVyYXRpb24gbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RFZmZlY3RPcGVyYXRpb25zKG1vZHVsZSwgb3BlcmF0aW9uTmFtZXMpIHtcbiAgY29uc3QgdXNlZCA9IG5ldyBTZXQoKVxuICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgb25lIHNlbWFudGljIHN1YnRyZWUgd2l0aG91dCBmb2xsb3dpbmcgYXV0aG9yaXR5IG9yIHByb3ZlbmFuY2UgZ3JhcGhzLlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gU2VtYW50aWMgc3VidHJlZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdCh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXModmFsdWUpKSByZXR1cm5cbiAgICBzZWVuLmFkZCh2YWx1ZSlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIFJlZmxlY3QuZ2V0KHZhbHVlLCBcImtpbmRcIikgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gb3BlcmF0aW9uTmFtZXMuZ2V0KFJlZmxlY3QuZ2V0KHZhbHVlLCBcIm9wZXJhdGlvblwiKSlcblxuICAgICAgaWYgKG5hbWUpIHVzZWQuYWRkKG5hbWUpXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgaWYgKGtleSAhPSBcImNhcGFiaWxpdGllc1wiICYmIGtleSAhPSBcImxvY2F0aW9uXCIgJiYga2V5ICE9IFwicHJvdmVuYW5jZVwiICYmIGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikgdmlzaXQoY2hpbGQpXG4gICAgfVxuICB9XG4gIHZpc2l0KG1vZHVsZSlcbiAgcmV0dXJuIHVzZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgcGFyc2VkIHNlbWFudGljIHR5cGUgdG8gdGhlIGZhY2FkZSBkZWNsYXJhdGlvbiB2b2NhYnVsYXJ5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gdHlwZSAtIFBhcnNlZCB0eXBlLlxuICogQHJldHVybnMge3N0cmluZ30gQ2xvc2VkIGNhbm9uaWNhbCBwdWJsaWMgdHlwZSBuYW1lLlxuICovXG5mdW5jdGlvbiBzZW1hbnRpY1R5cGVOYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIikgcmV0dXJuIHR5cGUubmFtZVxuICByZXR1cm4gdHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIgJiYgdHlwZS52YWx1ZVR5cGUua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIlxuICAgID8gYG9wdGlvbmFsOiR7dHlwZS52YWx1ZVR5cGUubmFtZX1gIDogXCJ1bnN1cHBvcnRlZFwiXG59XG5cbi8qKlxuICogVGhyb3dzIG9uZSBzdGFibGUgbG9jYXRlZCBmYWNhZGUgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIC0gU3RhYmxlIGRpYWdub3N0aWMgY29kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRGlhZ25vc3RpYyBkZXRhaWwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIFBhcnNlci1vd25lZCBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gZmFjYWRlRmFpbHVyZShsYW5ndWFnZSwgY29kZSwgbWVzc2FnZSwgbG9jYXRpb24pIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBtZXNzYWdlfSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIHNvdXJjZS1wcm9maWxlIGlkZW50aXRpZXMgd2hvc2UgbG9va3VwIG9yIHJlb3BlbmluZyB3b3VsZCBkZXBlbmQgb24gY2FsbGVyIG9yZGVyLlxuICogQHBhcmFtIHtQcm9ncmFtU291cmNlW119IHNvdXJjZXMgLSBDb21wbGV0ZSB2YWxpZGF0ZWQgc291cmNlIHNldC5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUHJvZ3JhbUhlYWRlcj59IGhlYWRlcnMgLSBQYXJzZXItb3duZWQgbW9kdWxlIGhlYWRlcnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVOYXRpdmVNb2R1bGVJZGVudGl0aWVzKHNvdXJjZXMsIGhlYWRlcnMpIHtcbiAgaWYgKCFzb3VyY2VzLmV2ZXJ5KCh7bGFuZ3VhZ2V9KSA9PiBsYW5ndWFnZSA9PSBcImphdmFcIikgJiYgIXNvdXJjZXMuZXZlcnkoKHtsYW5ndWFnZX0pID0+IGxhbmd1YWdlID09IFwicnVieVwiKSkgcmV0dXJuXG4gIGNvbnN0IG9yZGVyZWQgPSBbLi4uc291cmNlc10uc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuZmlsZW5hbWUubG9jYWxlQ29tcGFyZShyaWdodC5maWxlbmFtZSwgXCJlbi1VU1wiKSB8fFxuICAgIGxlZnQuaWQubG9jYWxlQ29tcGFyZShyaWdodC5pZCwgXCJlbi1VU1wiKSlcbiAgY29uc3Qgb3duZXJzID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygb3JkZXJlZCkge1xuICAgIGNvbnN0IG5hdGl2ZU5hbWUgPSByZXF1aXJlZE1hcFZhbHVlKGhlYWRlcnMsIHNvdXJjZS5pZCkubmF0aXZlTmFtZVxuXG4gICAgaWYgKCFuYXRpdmVOYW1lKSBjb250aW51ZVxuICAgIGNvbnN0IGVhcmxpZXIgPSBvd25lcnMuZ2V0KG5hdGl2ZU5hbWUpXG5cbiAgICBpZiAoZWFybGllcikge1xuICAgICAgY29uc3QgbGFiZWwgPSBzb3VyY2UubGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIkphdmFcIiA6IFwiUnVieVwiXG5cbiAgICAgIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiRFVQTElDQVRFX01PRFVMRVwiLFxuICAgICAgICBgRHVwbGljYXRlICR7bGFiZWx9IG5hdGl2ZSBtb2R1bGUgaWRlbnRpdHkgJyR7bmF0aXZlTmFtZX0nIGluICcke2VhcmxpZXIuZmlsZW5hbWV9JyBhbmQgJyR7c291cmNlLmZpbGVuYW1lfScuYCxcbiAgICAgICAgbW9kdWxlTG9jYXRpb24oc291cmNlLmZpbGVuYW1lLCBzb3VyY2Uuc291cmNlKSlcbiAgICB9XG4gICAgb3duZXJzLnNldChuYXRpdmVOYW1lLCBzb3VyY2UpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW5kIHNuYXBzaG90cyBvbmUgY2FsbGVyLXN1cHBsaWVkIHByb2dyYW0gc291cmNlIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIENhbmRpZGF0ZSBzb3VyY2UgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFNvdXJjZSBpbmRleC5cbiAqIEByZXR1cm5zIHtQcm9ncmFtU291cmNlfSBWYWxpZGF0ZWQgc291cmNlIGRlc2NyaXB0b3IuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU291cmNlKGNhbmRpZGF0ZSwgaW5kZXgpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkpIHtcbiAgICByZXR1cm4gaW52YWxpZFByb2dyYW0oYFByb2dyYW0gc291cmNlICR7aW5kZXh9IHJlcXVpcmVzIGEgc3RhYmxlIG1vZHVsZSBJRCwgc2FmZSBmaWxlbmFtZSwgbGFuZ3VhZ2UsIGFuZCBzb3VyY2UgdGV4dC5gKVxuICB9XG4gIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUpIHx8IHR5cGVvZiBjYW5kaWRhdGUuaWQgIT0gXCJzdHJpbmdcIiB8fCAhbW9kdWxlSWRQYXR0ZXJuLnRlc3QoY2FuZGlkYXRlLmlkKSB8fFxuICAgIHR5cGVvZiBjYW5kaWRhdGUuZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhaXNTYWZlU291cmNlUGF0aChjYW5kaWRhdGUuZmlsZW5hbWUpIHx8XG4gICAgdHlwZW9mIGNhbmRpZGF0ZS5zb3VyY2UgIT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmxhbmd1YWdlICE9IFwic3RyaW5nXCIpIHtcbiAgICBpbnZhbGlkUHJvZ3JhbShgUHJvZ3JhbSBzb3VyY2UgJHtpbmRleH0gcmVxdWlyZXMgYSBzdGFibGUgbW9kdWxlIElELCBzYWZlIGZpbGVuYW1lLCBsYW5ndWFnZSwgYW5kIHNvdXJjZSB0ZXh0LmApXG4gIH1cbiAgbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQoY2FuZGlkYXRlLmxhbmd1YWdlKVxuICBpZiAoIXByb2dyYW1MYW5ndWFnZXMuaGFzKGNhbmRpZGF0ZS5sYW5ndWFnZSkpIHVuc3VwcG9ydGVkUm9sZShjYW5kaWRhdGUubGFuZ3VhZ2UsIFwibXVsdGktZmlsZSBmcm9udGVuZFwiKVxuXG4gIHJldHVybiAvKiogQHR5cGUge1Byb2dyYW1Tb3VyY2V9ICovICh7XG4gICAgZmlsZW5hbWU6IGNhbmRpZGF0ZS5maWxlbmFtZSxcbiAgICBpZDogY2FuZGlkYXRlLmlkLFxuICAgIGxhbmd1YWdlOiBjYW5kaWRhdGUubGFuZ3VhZ2UsXG4gICAgb3duZXJzaGlwOiBcImFwcGxpY2F0aW9uXCIsXG4gICAgc291cmNlOiBjYW5kaWRhdGUuc291cmNlXG4gIH0pXG59XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBwYXJzZXItb3duZWQgbW9kdWxlIGhlYWRlciBpbnNwZWN0aW9uIGZvciBvbmUgY29ob3J0IHNvdXJjZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGxhbmd1YWdlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlLCBzb3VyY2U6IHN0cmluZ319IHNvdXJjZSAtIFZhbGlkYXRlZCBzb3VyY2UuXG4gKiBAcmV0dXJucyB7UHJvZ3JhbUhlYWRlcn0gUGFyc2VyLW93bmVkIGltcG9ydC9leHBvcnQgaGVhZGVyLlxuICovXG5mdW5jdGlvbiBpbnNwZWN0U291cmNlKHNvdXJjZSkge1xuICBpZiAoc291cmNlLmxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IHNvdXJjZS5sYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikge1xuICAgIHJldHVybiBpbnNwZWN0SmF2YVNjcmlwdFR5cGVTY3JpcHRNb2R1bGUoLyoqIEB0eXBlIHt7ZmlsZW5hbWU6IHN0cmluZywgbGFuZ3VhZ2U6IFwiamF2YXNjcmlwdFwiIHwgXCJ0eXBlc2NyaXB0XCIsIHNvdXJjZTogc3RyaW5nfX0gKi8gKHNvdXJjZSkpXG4gIH1cbiAgaWYgKHNvdXJjZS5sYW5ndWFnZSA9PSBcInJ1YnlcIikge1xuICAgIHJldHVybiBpbnNwZWN0UnVieU1vZHVsZSgvKiogQHR5cGUge3tmaWxlbmFtZTogc3RyaW5nLCBsYW5ndWFnZTogXCJydWJ5XCIsIHNvdXJjZTogc3RyaW5nfX0gKi8gKHNvdXJjZSkpXG4gIH1cbiAgaWYgKHNvdXJjZS5sYW5ndWFnZSA9PSBcInBocFwiKSB7XG4gICAgcmV0dXJuIGluc3BlY3RQaHBNb2R1bGUoLyoqIEB0eXBlIHt7ZmlsZW5hbWU6IHN0cmluZywgbGFuZ3VhZ2U6IFwicGhwXCIsIHNvdXJjZTogc3RyaW5nfX0gKi8gKHNvdXJjZSkpXG4gIH1cbiAgaWYgKHNvdXJjZS5sYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgIHJldHVybiBpbnNwZWN0SmF2YU1vZHVsZSgvKiogQHR5cGUge3tmaWxlbmFtZTogc3RyaW5nLCBsYW5ndWFnZTogXCJqYXZhXCIsIHNvdXJjZTogc3RyaW5nfX0gKi8gKHNvdXJjZSkpXG4gIH1cblxuICByZXR1cm4gdW5zdXBwb3J0ZWRSb2xlKHNvdXJjZS5sYW5ndWFnZSwgXCJtdWx0aS1maWxlIGZyb250ZW5kXCIpXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25seSBhbiBleHBsaWNpdCByZWxhdGl2ZSBFU00gc3BlY2lmaWVyIGFnYWluc3QgY2FsbGVyLXN1cHBsaWVkIGZpbGVuYW1lcy5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGxhbmd1YWdlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfX0gc291cmNlIC0gSW1wb3J0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzcGVjaWZpZXIgLSBQYXJzZXItb3duZWQgcmVsYXRpdmUgc3BlY2lmaWVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBTcGVjaWZpZXIgbG9jYXRpb24uXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIFByb2dyYW1Tb3VyY2U+fSBzb3VyY2VzIC0gU291cmNlcyBieSBleGFjdCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUHJvZ3JhbUhlYWRlcj59IGhlYWRlcnMgLSBQYXJzZXItb3duZWQgbW9kdWxlIGhlYWRlcnMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXNvbHZlZCBtb2R1bGUgaWRlbnRpdHkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbXBvcnRNb2R1bGUoc291cmNlLCBzcGVjaWZpZXIsIGxvY2F0aW9uLCBzb3VyY2VzLCBoZWFkZXJzKSB7XG4gIGlmIChzb3VyY2UubGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICBjb25zdCBtYXRjaGVkID0gWy4uLmhlYWRlcnMuZW50cmllcygpXS5maW5kKChbLCBoZWFkZXJdKSA9PiBoZWFkZXIubmF0aXZlTmFtZSA9PSBzcGVjaWZpZXIpXG5cbiAgICBpZiAoIW1hdGNoZWQpIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiVU5SRVNPTFZFRF9NT0RVTEVcIiwgYEltcG9ydCAnJHtzcGVjaWZpZXJ9JyBkb2VzIG5vdCBpZGVudGlmeSBhIHN1cHBsaWVkIHNvdXJjZS5gLCBsb2NhdGlvbilcblxuICAgIHJldHVybiBtYXRjaGVkWzBdXG4gIH1cbiAgY29uc3QgZGlyZWN0b3J5ID0gc291cmNlLmZpbGVuYW1lLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSlcbiAgY29uc3QgcGFydHMgPSBbLi4uZGlyZWN0b3J5XVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBzcGVjaWZpZXIuc3BsaXQoXCIvXCIpKSB7XG4gICAgaWYgKHBhcnQgPT0gXCJcIiB8fCBwYXJ0ID09IFwiLlwiKSBjb250aW51ZVxuICAgIGlmIChwYXJ0ID09IFwiLi5cIikge1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAwKSBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlVOU0FGRV9NT0RVTEVfUEFUSFwiLCBgSW1wb3J0ICcke3NwZWNpZmllcn0nIGVzY2FwZXMgdGhlIHN1cHBsaWVkIHNvdXJjZSByb290LmAsIGxvY2F0aW9uKVxuICAgICAgcGFydHMucG9wKClcbiAgICB9IGVsc2UgcGFydHMucHVzaChwYXJ0KVxuICB9XG4gIGxldCBleGFjdCA9IHBhcnRzLmpvaW4oXCIvXCIpXG5cbiAgaWYgKHNvdXJjZS5sYW5ndWFnZSA9PSBcInJ1YnlcIiAmJiAhZXhhY3QuZW5kc1dpdGgoXCIucmJcIikpIGV4YWN0ICs9IFwiLnJiXCJcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtleGFjdF1cblxuICBpZiAoc291cmNlLmxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIGV4YWN0LmVuZHNXaXRoKFwiLmpzXCIpKSBjYW5kaWRhdGVzLnB1c2goYCR7ZXhhY3Quc2xpY2UoMCwgLTMpfS50c2ApXG4gIGNvbnN0IG1hdGNoZWQgPSBjYW5kaWRhdGVzLmZsYXRNYXAoKGZpbGVuYW1lKSA9PiBzb3VyY2VzLmhhcyhmaWxlbmFtZSkgPyBbc291cmNlcy5nZXQoZmlsZW5hbWUpXSA6IFtdKVswXVxuXG4gIGlmICghbWF0Y2hlZCkgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJVTlJFU09MVkVEX01PRFVMRVwiLCBgSW1wb3J0ICcke3NwZWNpZmllcn0nIGRvZXMgbm90IGlkZW50aWZ5IGEgc3VwcGxpZWQgc291cmNlLmAsIGxvY2F0aW9uKVxuXG4gIHJldHVybiBtYXRjaGVkLmlkXG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzb3VyY2UtcHJvZmlsZSBzcGVsbGluZyB1c2VkIHRvIHJlc29sdmUgb25lIG5hbWVzcGFjZS1xdWFsaWZpZWQgaW1wb3J0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEltcG9ydGluZyBzb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gbmF0aXZlTmFtZSAtIERlcGVuZGVuY3kgbmFtZXNwYWNlL21vZHVsZSBuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0V4cG9ydH0gZXhwb3J0ZWQgLSBJbXBvcnRlZCBleHBvcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTb3VyY2UtcHJvZmlsZSBiaW5kaW5nIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBxdWFsaWZpZWRJbXBvcnROYW1lKGxhbmd1YWdlLCBuYXRpdmVOYW1lLCBleHBvcnRlZCkge1xuICBpZiAoIW5hdGl2ZU5hbWUpIHRocm93IG5ldyBFcnJvcihcIk5hbWVzcGFjZSBpbXBvcnQgZGVwZW5kZW5jeSBoYXMgbm8gcGFyc2VyLW93bmVkIG5hdGl2ZSBuYW1lLlwiKVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHJldHVybiBgJHtuYXRpdmVOYW1lfSR7ZXhwb3J0ZWQuc3ltYm9sS2luZCA9PSBcImZ1bmN0aW9uXCIgPyBcIi5cIiA6IFwiOjpcIn0ke2V4cG9ydGVkLmV4cG9ydGVkTmFtZX1gXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5hdGl2ZU5hbWUuc3BsaXQoXCIuXCIpLmF0KC0xKVxuXG4gICAgaWYgKCFjbGFzc05hbWUpIHRocm93IG5ldyBFcnJvcihcIkphdmEgaW1wb3J0IGRlcGVuZGVuY3kgaGFzIG5vIGNsYXNzIG5hbWUuXCIpXG5cbiAgICByZXR1cm4gZXhwb3J0ZWQuc3ltYm9sS2luZCA9PSBcImZ1bmN0aW9uXCIgPyBgJHtjbGFzc05hbWV9LiR7ZXhwb3J0ZWQuZXhwb3J0ZWROYW1lfWAgOiBjbGFzc05hbWVcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbmFtZXNwYWNlIGltcG9ydCBwcm9maWxlICcke2xhbmd1YWdlfScuYClcbn1cblxuLyoqXG4gKiBTb3J0cyB0aGUgZXhwbGljaXQgbW9kdWxlIGdyYXBoIGluIHN0YWJsZSBkZXBlbmRlbmN5LWZpcnN0IG9yZGVyLlxuICogQHBhcmFtIHtQcm9ncmFtU291cmNlW119IHNvdXJjZXMgLSBWYWxpZGF0ZWQgc291cmNlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywge3NvdXJjZTogUHJvZ3JhbVNvdXJjZSwgcmVxdWVzdHM6IHttb2R1bGVJZDogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259W119Pn0gZ3JhcGggLSBSZXNvbHZlZCBncmFwaC5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gRGVwZW5kZW5jeS1maXJzdCBtb2R1bGUgaWRlbnRpdGllcy5cbiAqL1xuZnVuY3Rpb24gdG9wb2xvZ2ljYWxPcmRlcihzb3VyY2VzLCBncmFwaCkge1xuICBjb25zdCBjb21wbGV0ZSA9IG5ldyBTZXQoKVxuICBjb25zdCBhY3RpdmUgPSBuZXcgU2V0KClcbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cblxuICAvKipcbiAgICogVmlzaXRzIG9uZSBtb2R1bGUgYW5kIGl0cyBkZXBlbmRlbmNpZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIE1vZHVsZSBpZGVudGl0eS5cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0KGlkKSB7XG4gICAgaWYgKGNvbXBsZXRlLmhhcyhpZCkpIHJldHVyblxuICAgIGlmIChhY3RpdmUuaGFzKGlkKSkge1xuICAgICAgY29uc3QgZWRnZSA9IHJlcXVpcmVkTWFwVmFsdWUoZ3JhcGgsIGlkKS5yZXF1ZXN0c1swXVxuXG4gICAgICBzZW1hbnRpY0ZhaWx1cmUocmVxdWlyZWRNYXBWYWx1ZShncmFwaCwgaWQpLnNvdXJjZS5sYW5ndWFnZSwgXCJJTVBPUlRfQ1lDTEVcIiwgYEltcG9ydCBjeWNsZSBpbmNsdWRlcyBtb2R1bGUgJyR7aWR9Jy5gLCBlZGdlPy5sb2NhdGlvbilcbiAgICB9XG4gICAgYWN0aXZlLmFkZChpZClcbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWlyZWRNYXBWYWx1ZShncmFwaCwgaWQpLnJlcXVlc3RzKSB2aXNpdChyZXF1ZXN0Lm1vZHVsZUlkKVxuICAgIGFjdGl2ZS5kZWxldGUoaWQpXG4gICAgY29tcGxldGUuYWRkKGlkKVxuICAgIHJlc3VsdC5wdXNoKGlkKVxuICB9XG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykgdmlzaXQoc291cmNlLmlkKVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBMb29rcyB1cCBvbmUgYWxyZWFkeS1yZXNvbHZlZCBleHBvcnRlZCBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSBtb2R1bGUgLSBFeHBvcnRpbmcgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0V4cG9ydH0gZXhwb3J0ZWQgLSBSZXNvbHZlZCBleHBvcnQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2xhc3NEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb259IERlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBkZWNsYXJhdGlvbkZvcihtb2R1bGUsIGV4cG9ydGVkKSB7XG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IGV4cG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJmdW5jdGlvblwiID8gbW9kdWxlLmZ1bmN0aW9ucyA6XG4gICAgZXhwb3J0ZWQuc3ltYm9sS2luZCA9PSBcInJlY29yZFwiID8gbW9kdWxlLnJlY29yZHMgPz8gW10gOiBleHBvcnRlZC5zeW1ib2xLaW5kID09IFwiY2xhc3NcIiA/IG1vZHVsZS5jbGFzc2VzID8/IFtdIDogbW9kdWxlLmVycm9ycyA/PyBbXVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9ucy5maW5kKCh7aWR9KSA9PiBpZCA9PSBleHBvcnRlZC5kZWNsYXJhdGlvbklkKVxuXG4gIGlmICghZGVjbGFyYXRpb24pIHRocm93IG5ldyBFcnJvcihgUmVzb2x2ZWQgZXhwb3J0ICcke2V4cG9ydGVkLmRlY2xhcmF0aW9uSWR9JyBoYXMgbm8gZGVjbGFyYXRpb24uYClcblxuICByZXR1cm4gZGVjbGFyYXRpb25cbn1cblxuLyoqXG4gKiBQcmVmaXhlcyBtb2R1bGUtb3duZWQgZGVjbGFyYXRpb24gaWRlbnRpdGllcyBhbmQgZXhwbGljaXQgcmVzb2x2ZWQgcmVmZXJlbmNlcyB0byB0aGVtLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCAtIFN0YWJsZSBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVrZXlEZWNsYXJhdGlvbnMobW9kdWxlLCBtb2R1bGVJZCkge1xuICBjb25zdCByZXBsYWNlbWVudHMgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgcmVwbGFjZW1lbnRzLnNldChkZWNsYXJhdGlvbi5pZCwgYCR7bW9kdWxlSWR9IyR7ZGVjbGFyYXRpb24uaWR9YClcbiAgICByZXBsYWNlbWVudHMuc2V0KGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmlkLCBgJHttb2R1bGVJZH0jJHtkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5pZH1gKVxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGVjbGFyYXRpb24uZmllbGRzKSByZXBsYWNlbWVudHMuc2V0KGZpZWxkLmlkLCBgJHttb2R1bGVJZH0jJHtmaWVsZC5pZH1gKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHJlcGxhY2VtZW50cy5zZXQobWV0aG9kLmlkLCBgJHttb2R1bGVJZH0jJHttZXRob2QuaWR9YClcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5yZWNvcmRzID8/IFtdKSB7XG4gICAgcmVwbGFjZW1lbnRzLnNldChkZWNsYXJhdGlvbi5pZCwgYCR7bW9kdWxlSWR9IyR7ZGVjbGFyYXRpb24uaWR9YClcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgaWYgKHBhcmFtZXRlci5pZCkgcmVwbGFjZW1lbnRzLnNldChwYXJhbWV0ZXIuaWQsIGAke21vZHVsZUlkfSMke3BhcmFtZXRlci5pZH1gKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGRlY2xhcmF0aW9uLmZpZWxkcykgcmVwbGFjZW1lbnRzLnNldChmaWVsZC5pZCwgYCR7bW9kdWxlSWR9IyR7ZmllbGQuaWR9YClcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5lcnJvcnMgPz8gW10pIHJlcGxhY2VtZW50cy5zZXQoZGVjbGFyYXRpb24uaWQsIGAke21vZHVsZUlkfSMke2RlY2xhcmF0aW9uLmlkfWApXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIHJlcGxhY2VtZW50cy5zZXQoZGVjbGFyYXRpb24uaWQsIGAke21vZHVsZUlkfSMke2RlY2xhcmF0aW9uLmlkfWApXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pIHtcbiAgICAgIGlmIChwYXJhbWV0ZXIuaWQpIHJlcGxhY2VtZW50cy5zZXQocGFyYW1ldGVyLmlkLCBgJHttb2R1bGVJZH0jJHtwYXJhbWV0ZXIuaWR9YClcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5yZWNvcmRzID8/IFtdKSB7XG4gICAgZGVjbGFyYXRpb24uaWQgPSByZXBsYWNlbWVudHMuZ2V0KGRlY2xhcmF0aW9uLmlkKVxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKSB7XG4gICAgICBwYXJhbWV0ZXIuaWQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlcGxhY2VtZW50cy5nZXQoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwYXJhbWV0ZXIuaWQpKSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBkZWNsYXJhdGlvbi5maWVsZHMpIGZpZWxkLmlkID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZXBsYWNlbWVudHMuZ2V0KGZpZWxkLmlkKSlcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5lcnJvcnMgPz8gW10pIGRlY2xhcmF0aW9uLmlkID0gcmVwbGFjZW1lbnRzLmdldChkZWNsYXJhdGlvbi5pZClcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuY2xhc3NlcyA/PyBbXSkge1xuICAgIGRlY2xhcmF0aW9uLmlkID0gcmVwbGFjZW1lbnRzLmdldChkZWNsYXJhdGlvbi5pZClcbiAgICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5pZCA9IHJlcGxhY2VtZW50cy5nZXQoZGVjbGFyYXRpb24uY29uc3RydWN0b3IuaWQpXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBkZWNsYXJhdGlvbi5maWVsZHMpIGZpZWxkLmlkID0gcmVwbGFjZW1lbnRzLmdldChmaWVsZC5pZClcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBkZWNsYXJhdGlvbi5tZXRob2RzKSBtZXRob2QuaWQgPSByZXBsYWNlbWVudHMuZ2V0KG1ldGhvZC5pZClcbiAgICBpZiAoZGVjbGFyYXRpb24ub3duZXJzaGlwPy5raW5kID09IFwib3duZWRSZXNvdXJjZVwiKSB7XG4gICAgICBkZWNsYXJhdGlvbi5vd25lcnNoaXAuZmllbGRJZCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVwbGFjZW1lbnRzLmdldChkZWNsYXJhdGlvbi5vd25lcnNoaXAuZmllbGRJZCkpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGRlY2xhcmF0aW9uLmlkID0gcmVwbGFjZW1lbnRzLmdldChkZWNsYXJhdGlvbi5pZClcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgcGFyYW1ldGVyLmlkID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZXBsYWNlbWVudHMuZ2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGFyYW1ldGVyLmlkKSkpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KClcbiAgLyoqXG4gICAqIFJld3JpdGVzIG9ubHkgdHlwZWQgaWRlbnRpdHktYmVhcmluZyBmaWVsZHMgdGhyb3VnaG91dCBvbmUgc2VtYW50aWMgc3VidHJlZS5cbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFNlbWFudGljIHN1YnRyZWUuXG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdCh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgc2Vlbi5oYXModmFsdWUpKSByZXR1cm5cbiAgICBzZWVuLmFkZCh2YWx1ZSlcbiAgICBjb25zdCBvYmplY3QgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgICBpZiAoKG9iamVjdC5raW5kID09IFwiUmVjb3JkVHlwZVwiIHx8IG9iamVjdC5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiIHx8IG9iamVjdC5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIgfHxcbiAgICAgIG9iamVjdC5raW5kID09IFwiRXJyb3JUeXBlXCIgfHwgb2JqZWN0LmtpbmQgPT0gXCJSZXNvbHZlZEZ1bmN0aW9uU2lnbmF0dXJlXCIgfHxcbiAgICAgIG9iamVjdC5raW5kID09IFwiUmVzb2x2ZWRDb25zdHJ1Y3RvclNpZ25hdHVyZVwiIHx8IG9iamVjdC5raW5kID09IFwiUmVzb2x2ZWRNZXRob2RTaWduYXR1cmVcIikgJiZcbiAgICAgIHR5cGVvZiBvYmplY3QuZGVjbGFyYXRpb25JZCA9PSBcInN0cmluZ1wiICYmIHJlcGxhY2VtZW50cy5oYXMob2JqZWN0LmRlY2xhcmF0aW9uSWQpKSB7XG4gICAgICBvYmplY3QuZGVjbGFyYXRpb25JZCA9IHJlcGxhY2VtZW50cy5nZXQob2JqZWN0LmRlY2xhcmF0aW9uSWQpXG4gICAgfVxuICAgIGlmICgob2JqZWN0LmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIgfHwgb2JqZWN0LmtpbmQgPT0gXCJQcml2YXRlRmllbGRSZWFkXCIgfHwgb2JqZWN0LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSAmJlxuICAgICAgdHlwZW9mIG9iamVjdC5maWVsZCA9PSBcInN0cmluZ1wiICYmIHJlcGxhY2VtZW50cy5oYXMob2JqZWN0LmZpZWxkKSkge1xuICAgICAgb2JqZWN0LmZpZWxkID0gcmVwbGFjZW1lbnRzLmdldChvYmplY3QuZmllbGQpXG4gICAgfVxuICAgIGlmIChvYmplY3Qua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIgJiYgdHlwZW9mIG9iamVjdC5tZXRob2QgPT0gXCJzdHJpbmdcIiAmJiByZXBsYWNlbWVudHMuaGFzKG9iamVjdC5tZXRob2QpKSB7XG4gICAgICBvYmplY3QubWV0aG9kID0gcmVwbGFjZW1lbnRzLmdldChvYmplY3QubWV0aG9kKVxuICAgIH1cbiAgICBpZiAob2JqZWN0LmtpbmQgPT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIiAmJiB0eXBlb2Ygb2JqZWN0LmNsYXNzSWQgPT0gXCJzdHJpbmdcIiAmJiByZXBsYWNlbWVudHMuaGFzKG9iamVjdC5jbGFzc0lkKSkge1xuICAgICAgb2JqZWN0LmNsYXNzSWQgPSByZXBsYWNlbWVudHMuZ2V0KG9iamVjdC5jbGFzc0lkKVxuICAgIH1cbiAgICBpZiAob2JqZWN0LmtpbmQgPT0gXCJUeXBlVmFyaWFibGVSZWZlcmVuY2VcIiAmJiB0eXBlb2Ygb2JqZWN0LnBhcmFtZXRlcklkID09IFwic3RyaW5nXCIgJiYgcmVwbGFjZW1lbnRzLmhhcyhvYmplY3QucGFyYW1ldGVySWQpKSB7XG4gICAgICBvYmplY3QucGFyYW1ldGVySWQgPSByZXBsYWNlbWVudHMuZ2V0KG9iamVjdC5wYXJhbWV0ZXJJZClcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKG9iamVjdCkpIGlmICh0eXBlb2YgY2hpbGQgPT0gXCJvYmplY3RcIikgdmlzaXQoY2hpbGQpXG4gIH1cbiAgdmlzaXQobW9kdWxlKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzb3VyY2UgYXNzb2NpYXRpb24gZm9yIGEgcGFyc2VyLW93bmVkIG1vZHVsZSBoZWFkZXIgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gTm9kZSBvcmlnaW4uXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uPj59IHJhbmdlcyAtIEV4YWN0IGF2YWlsYWJsZSBoZWFkZXIgcm9sZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlSWQgLSBQcm9ncmFtLXdpZGUgc291cmNlIGlkZW50aXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVNvdXJjZVByb3ZlbmFuY2V9IFNvdXJjZSBhc3NvY2lhdGlvbi5cbiAqL1xuZnVuY3Rpb24gc291cmNlQXNzb2NpYXRpb24obG9jYXRpb24sIHJhbmdlcywgc291cmNlSWQpIHtcbiAgcmV0dXJuIHtcbiAgICBvcmlnaW46IHtraW5kOiBcInNvdXJjZVwiLCBsb2NhdGlvbiwgc291cmNlSWR9LFxuICAgIHJhbmdlcyxcbiAgICBzY2hlbWE6IFwiU2VtYW50aWZvbGROb2RlUHJvdmVuYW5jZVwiLFxuICAgIHZlcnNpb246IDFcbiAgfVxufVxuXG4vKipcbiAqIFJlYmluZHMgb25lIHBhcnNlci1sb2NhbCBwcm92ZW5hbmNlIHJlZ2lzdHJ5IHRvIHRoZSBjb21wbGV0ZSBwcm9ncmFtIHNvdXJjZSByZWdpc3RyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIE5ld2x5IHBhcnNlZCBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlZ2lzdGVyZWRTb3VyY2VbXX0gc291cmNlcyAtIFByb2dyYW0td2lkZSByZWdpc3RyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VJZCAtIE93bmluZyBzb3VyY2UgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmViYXNlUGFyc2VkTW9kdWxlUHJvdmVuYW5jZShtb2R1bGUsIHNvdXJjZXMsIHNvdXJjZUlkKSB7XG4gIGlmICghbW9kdWxlLnByb3ZlbmFuY2UpIHRocm93IG5ldyBFcnJvcihcIlBhcnNlZCBwcm9ncmFtIG1vZHVsZSBoYXMgbm8gc291cmNlIHByb3ZlbmFuY2UuXCIpXG4gIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpXG5cbiAgLyoqXG4gICAqIFJlYmluZHMgc291cmNlLW9yaWdpbiBpZGVudGl0aWVzIHRocm91Z2hvdXQgb25lIHNlbWFudGljIHN1YnRyZWUuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBTZW1hbnRpYyBzdWJ0cmVlLlxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuXG4gICAgc2Vlbi5hZGQodmFsdWUpXG4gICAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuICAgIGNvbnN0IHByb3ZlbmFuY2UgPSBjYW5kaWRhdGUuc291cmNlUHJvdmVuYW5jZVxuICAgIGNvbnN0IG9yaWdpbiA9IGlzUGxhaW5PYmplY3QocHJvdmVuYW5jZSkgPyBwcm92ZW5hbmNlLm9yaWdpbiA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3JpZ2luKSAmJiBvcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiKSBvcmlnaW4uc291cmNlSWQgPSBzb3VyY2VJZFxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgT2JqZWN0LnZhbHVlcyhjYW5kaWRhdGUpKSB2aXNpdChjaGlsZClcbiAgfVxuICB2aXNpdChtb2R1bGUpXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBtb2R1bGUucHJvdmVuYW5jZS5ub2Rlcykge1xuICAgIGlmIChub2RlLm9yaWdpbi5raW5kID09IFwic291cmNlXCIpIG5vZGUub3JpZ2luLnNvdXJjZUlkID0gc291cmNlSWRcbiAgfVxuICBtb2R1bGUucHJvdmVuYW5jZS5zb3VyY2VzID0gc291cmNlc1xufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIGNhbmRpZGF0ZSBpcyBhIGRpcmVjdCBwbGFpbiBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIG9iamVjdC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gV2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09IE9iamVjdC5wcm90b3R5cGVcbn1cblxuLyoqXG4gKiBSZWFkcyBhIHZhbHVlIHdob3NlIG1hcCBrZXkgd2FzIHZhbGlkYXRlZCBlYXJsaWVyIGluIHByb2dyYW0gYXNzZW1ibHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBUPn0gbWFwIC0gTWFwIHdpdGggYSBwcmV2aW91c2x5IHZhbGlkYXRlZCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gUmVxdWlyZWQga2V5LlxuICogQHJldHVybnMge1R9IFN0b3JlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRNYXBWYWx1ZShtYXAsIGtleSkge1xuICBjb25zdCB2YWx1ZSA9IG1hcC5nZXQoa2V5KVxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdmFsaWRhdGVkIG1hcCB2YWx1ZSAnJHtrZXl9Jy5gKVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFJhaXNlcyBhIHN0YWJsZSBtYWxmb3JtZWQgcHJvZ3JhbSByZXF1ZXN0IGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFN0YWJsZSByZXF1ZXN0IGZhaWx1cmUgZGV0YWlsLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBpbnZhbGlkUHJvZ3JhbShtZXNzYWdlKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiSU5WQUxJRF9QUk9HUkFNXCIsIGxhbmd1YWdlOiBcInByb2dyYW1cIiwgbWVzc2FnZX0pXG59XG4iXX0=
|
|
997
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZHMvcHJvZ3JhbS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUMscUJBQXFCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQy9HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ3hELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ3hFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUM5RCxPQUFPLEVBQUMsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RixPQUFPLEVBQ0wseUJBQXlCLEVBQUUsMEJBQTBCLEVBQUUsNkJBQTZCLEVBQUUsb0JBQW9CLEVBQzNHLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sNEJBQTRCLENBQUE7QUFDNUUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLFVBQVUsQ0FBQTtBQUN6QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFFM0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZUFB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QUFJLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDbkUsQ0FBQztJQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUE7QUFDaEksQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUc7SUFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQixJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUMsQ0FBQTtJQUVqRixPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBTztJQUM3QixNQUFNLElBQUkscUJBQXFCLENBQUMsRUFBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0FBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtpc0RlbnNlQXJyYXl9IGZyb20gXCIuLi9hcnJheS5qc1wiXG5pbXBvcnQge2lzU2FmZVNvdXJjZVBhdGh9IGZyb20gXCIuLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCBzZW1hbnRpY0ZhaWx1cmUsIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eSwgdW5zdXBwb3J0ZWRSb2xlfSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xhbmd1YWdlUmVnaXN0cnl9IGZyb20gXCIuLi9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5pbXBvcnQge25vcm1hbGl6ZUNhcGFiaWxpdHlBdXRob3JpdHl9IGZyb20gXCIuLi9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuaW1wb3J0IHttb2R1bGVMb2NhdGlvbn0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7YW5ub3RhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7bW9kdWxlVW5jaGVja2VkRXJyb3JFZmZlY3RzLCB2YWxpZGF0ZVBhcnNlZE1vZHVsZX0gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7XG4gIGZhY2FkZUNhcGFiaWxpdHlBdXRob3JpdHksIHJlc29sdmVTdGRsaWJGYWNhZGVDbG9zdXJlLCBzdGRsaWJGYWNhZGVQcm9ncmFtRGVzY3JpcHRvciwgc3RkbGliRmFjYWRlUmVnaXN0cnlcbn0gZnJvbSBcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCJcbmltcG9ydCB7aW5zcGVjdEphdmFTY3JpcHRUeXBlU2NyaXB0TW9kdWxlfSBmcm9tIFwiLi9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanNcIlxuaW1wb3J0IHtpbnNwZWN0SmF2YU1vZHVsZX0gZnJvbSBcIi4vamF2YS5qc1wiXG5pbXBvcnQge2luc3BlY3RQaHBNb2R1bGV9IGZyb20gXCIuL3BocC5qc1wiXG5pbXBvcnQge2luc3BlY3RSdWJ5TW9kdWxlfSBmcm9tIFwiLi9ydWJ5LmpzXCJcblxuY29uc3QgcHJvZ3JhbUxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IG1vZHVsZUlkUGF0dGVybiA9IC9eW2Etel1bYS16MC05X10qKD86Wy4tXVthLXpdW2EtejAtOV9dKikqJC91XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgcmVnaXN0ZXJlZCBmcm9udGVuZCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIGV4cGxpY2l0IFRhc2stMDEwIHByb2dyYW0gcHJvZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIFJlZ2lzdGVyZWQgc291cmNlIGlkZW50aXR5LlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHByb2ZpbGUgYWNjZXB0cyB0aGUgbGFuZ3VhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1Byb2dyYW1Tb3VyY2VMYW5ndWFnZShsYW5ndWFnZSkge1xuICByZXR1cm4gcHJvZ3JhbUxhbmd1YWdlcy5oYXMoLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSAqLyAobGFuZ3VhZ2UpKVxufVxuXG4vKiogQHR5cGVkZWYge3tmYWNhZGU/OiBpbXBvcnQoXCIuLi9zdGRsaWItZmFjYWRlcy5qc1wiKS5TdGRsaWJGYWNhZGVSZWNvcmQsIGZpbGVuYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGxhbmd1YWdlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlLCBvd25lcnNoaXA6IFwiYXBwbGljYXRpb25cIiB8IFwiZmFjYWRlXCIsIHNvdXJjZTogc3RyaW5nfX0gUHJvZ3JhbVNvdXJjZSAqL1xuLyoqIEB0eXBlZGVmIHt7ZGVjbGFyYXRpb25Mb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBmYWNhZGU/OiBpbXBvcnQoXCIuLi9zdGRsaWItZmFjYWRlcy5qc1wiKS5TdGRsaWJGYWNhZGVSZWNvcmQsIGltcG9ydGVkTmFtZTogc3RyaW5nLCBpbXBvcnRlZE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYWxOYW1lTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBuYW1lc3BhY2U/OiBib29sZWFuLCBwYXRoTG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzcGVjaWZpZXI6IHN0cmluZywgc3RkbGliQ2FuZGlkYXRlPzogdHJ1ZSwgdHlwZU9ubHk6IGJvb2xlYW59fSBQcm9ncmFtSW1wb3J0UmVxdWVzdCAqL1xuLyoqIEB0eXBlZGVmIHt7aW1wb3J0ZWROYW1lOiBzdHJpbmcsIGxvY2FsTmFtZTogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hdGl2ZU5hbWU6IHN0cmluZywgc3ltYm9sS2luZDogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNEZWNsYXJhdGlvbktpbmQsIHR5cGVPbmx5OiBib29sZWFufX0gUHJvZ3JhbU5hdGl2ZUJpbmRpbmcgKi9cbi8qKiBAdHlwZWRlZiB7e2ltcG9ydHM6IFByb2dyYW1JbXBvcnRSZXF1ZXN0W10sIGV4cG9ydHM6IHtkZWNsYXJhdGlvbkxvY2F0aW9uPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIGV4cG9ydGVkTmFtZTogc3RyaW5nLCBleHBvcnRlZE5hbWVMb2NhdGlvbj86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBsb2NhbE5hbWU6IHN0cmluZywgbG9jYWxOYW1lTG9jYXRpb24/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uLCBzeW1ib2xLaW5kPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNEZWNsYXJhdGlvbktpbmQsIHR5cGVPbmx5OiBib29sZWFufVtdLCBiaW5kaW5ncz86IFByb2dyYW1OYXRpdmVCaW5kaW5nW10sIG5hdGl2ZU5hbWU/OiBzdHJpbmcsIG5hdGl2ZVJlZmVyZW5jZXM/OiB7Zm9ybTogXCJjb25zdHJ1Y3Rvci1jYWxsXCIgfCBcInJlY2VpdmVyLWNhbGxcIiB8IFwidW5xdWFsaWZpZWQtY2FsbFwiLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hdGl2ZU1vZHVsZTogc3RyaW5nLCBzeW1ib2w6IHN0cmluZ31bXX19IFByb2dyYW1IZWFkZXIgKi9cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXhwbGljaXQgY2FsbGVyLXN1cHBsaWVkIG11bHRpLXNvdXJjZSBwcm9ncmFtIHdpdGhvdXQgZmlsZXN5c3RlbSBkaXNjb3ZlcnkuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQcm9ncmFtIHBhcnNlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZW50cnlNb2R1bGUgLSBTb2xlIGVudHJ5IG1vZHVsZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGxhbmd1YWdlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlLCBzb3VyY2U6IHN0cmluZ31bXX0gaW5wdXQuc291cmNlcyAtIENvbXBsZXRlIHNvdXJjZSBzZXQuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhcGFiaWxpdHlBdXRob3JpdHk+IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2FwYWJpbGl0eUF1dGhvcml0eUlucHV0fSBbaW5wdXQuY2FwYWJpbGl0eUF1dGhvcml0eV0gLSBFeHBsaWNpdCBjb21waWxlciBhdXRob3JpdHkuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtfSBSZXNvbHZlZCBzZW1hbnRpYyBwcm9ncmFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmFtU291cmNlKGlucHV0KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChpbnB1dCkgfHwgIWlzRGVuc2VBcnJheShpbnB1dC5zb3VyY2VzKSB8fCBpbnB1dC5zb3VyY2VzLmxlbmd0aCA9PSAwIHx8XG4gICAgdHlwZW9mIGlucHV0LmVudHJ5TW9kdWxlICE9IFwic3RyaW5nXCIpIGludmFsaWRQcm9ncmFtKFwiUHJvZ3JhbSBwYXJzaW5nIHJlcXVpcmVzIGEgbm9uLWVtcHR5IG9yZGVyZWQgc291cmNlIHNldCBhbmQgZW50cnkgbW9kdWxlLlwiKVxuXG4gIGNvbnN0IGFwcGxpY2F0aW9uU291cmNlcyA9IGlucHV0LnNvdXJjZXMubWFwKChzb3VyY2UsIGluZGV4KSA9PiB2YWxpZGF0ZVNvdXJjZShzb3VyY2UsIGluZGV4KSlcbiAgY29uc3QgcmVxdWVzdGVkQXV0aG9yaXR5ID0gbm9ybWFsaXplQ2FwYWJpbGl0eUF1dGhvcml0eShpbnB1dC5jYXBhYmlsaXR5QXV0aG9yaXR5KVxuICBjb25zdCBzb3VyY2VMYW5ndWFnZXMgPSBuZXcgU2V0KGFwcGxpY2F0aW9uU291cmNlcy5tYXAoKHtsYW5ndWFnZX0pID0+IGxhbmd1YWdlKSlcblxuICBpZiAoc291cmNlTGFuZ3VhZ2VzLnNpemUgIT0gMSkge1xuICAgIHNlbWFudGljRmFpbHVyZShhcHBsaWNhdGlvblNvdXJjZXNbMF0ubGFuZ3VhZ2UsIFwiTUlYRURfU09VUkNFX0xBTkdVQUdFU1wiLCBcIkEgc2VtYW50aWMgcHJvZ3JhbSBtdXN0IHVzZSBvbmUgc291cmNlLWxhbmd1YWdlIGNvbXBhdGliaWxpdHkgcHJvZmlsZS5cIiwgdW5kZWZpbmVkKVxuICB9XG4gIGlmIChyZXF1ZXN0ZWRBdXRob3JpdHkgJiYgIWxhbmd1YWdlUmVnaXN0cnkucmVjb3JkKGFwcGxpY2F0aW9uU291cmNlc1swXS5sYW5ndWFnZSkuZmVhdHVyZXMuZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGFwcGxpY2F0aW9uU291cmNlc1swXS5sYW5ndWFnZSwgXCJUYXNrIDAzNCBlZmZlY3RmdWwgY2FwYWJpbGl0aWVzIGFuZCBvd25lZCByZXNvdXJjZXNcIixcbiAgICAgIG1vZHVsZUxvY2F0aW9uKGFwcGxpY2F0aW9uU291cmNlc1swXS5maWxlbmFtZSwgYXBwbGljYXRpb25Tb3VyY2VzWzBdLnNvdXJjZSkpXG4gIH1cbiAgY29uc3QgYnlJZCA9IG5ldyBNYXAoKVxuICBjb25zdCBieUZpbGVuYW1lID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2YgYXBwbGljYXRpb25Tb3VyY2VzKSB7XG4gICAgaWYgKGJ5SWQuaGFzKHNvdXJjZS5pZCkpIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiRFVQTElDQVRFX01PRFVMRVwiLCBgRHVwbGljYXRlIG1vZHVsZSBpZGVudGl0eSAnJHtzb3VyY2UuaWR9Jy5gLCB1bmRlZmluZWQpXG4gICAgaWYgKGJ5RmlsZW5hbWUuaGFzKHNvdXJjZS5maWxlbmFtZSkpIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiRFVQTElDQVRFX01PRFVMRVwiLCBgRHVwbGljYXRlIG1vZHVsZSBmaWxlbmFtZSAnJHtzb3VyY2UuZmlsZW5hbWV9Jy5gLCB1bmRlZmluZWQpXG4gICAgYnlJZC5zZXQoc291cmNlLmlkLCBzb3VyY2UpXG4gICAgYnlGaWxlbmFtZS5zZXQoc291cmNlLmZpbGVuYW1lLCBzb3VyY2UpXG4gIH1cbiAgaWYgKCFieUlkLmhhcyhpbnB1dC5lbnRyeU1vZHVsZSkpIHtcbiAgICBzZW1hbnRpY0ZhaWx1cmUoYXBwbGljYXRpb25Tb3VyY2VzWzBdLmxhbmd1YWdlLCBcIklOVkFMSURfRU5UUllfTU9EVUxFXCIsIGBVbmtub3duIGVudHJ5IG1vZHVsZSAnJHtpbnB1dC5lbnRyeU1vZHVsZX0nLmAsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgTWFwKGFwcGxpY2F0aW9uU291cmNlcy5tYXAoKHNvdXJjZSkgPT4gW3NvdXJjZS5pZCwgaW5zcGVjdFNvdXJjZShzb3VyY2UpXSkpXG4gIGNvbnN0IGZhY2FkZVJvb3RzID0gcmVzb2x2ZUZhY2FkZUltcG9ydHMoYXBwbGljYXRpb25Tb3VyY2VzLCBoZWFkZXJzKVxuICBjb25zdCBmYWNhZGVSZWNvcmRzID0gcmVzb2x2ZVN0ZGxpYkZhY2FkZUNsb3N1cmUoZmFjYWRlUm9vdHMpXG5cbiAgaWYgKGZhY2FkZVJlY29yZHMubGVuZ3RoID4gMCAmJiByZXF1ZXN0ZWRBdXRob3JpdHkpIHtcbiAgICBjb25zdCBsb2NhdGVkID0gYXBwbGljYXRpb25Tb3VyY2VzLmZsYXRNYXAoKHNvdXJjZSkgPT4gcmVxdWlyZWRNYXBWYWx1ZShoZWFkZXJzLCBzb3VyY2UuaWQpLmltcG9ydHMpXG4gICAgICAuZmluZCgoe2ZhY2FkZX0pID0+IGZhY2FkZSk/LmxvY2F0aW9uXG5cbiAgICBmYWNhZGVGYWlsdXJlKGFwcGxpY2F0aW9uU291cmNlc1swXS5sYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX0FVVEhPUklUWV9GT1JHRURcIixcbiAgICAgIFwiUHJvZ3JhbXMgcmVzb2x2ZWQgdGhyb3VnaCBjb21waWxlci1vd25lZCBmYWNhZGVzIGNhbm5vdCBzdXBwbHkgdGhlaXIgb3duIGNhbm9uaWNhbCBjYXBhYmlsaXR5IGF1dGhvcml0eS5cIiwgbG9jYXRlZClcbiAgfVxuICBjb25zdCBmYWNhZGVBdXRob3JpdHkgPSBmYWNhZGVDYXBhYmlsaXR5QXV0aG9yaXR5KGZhY2FkZVJlY29yZHMpXG4gIGNvbnN0IGF1dGhvcml0eSA9IHJlcXVlc3RlZEF1dGhvcml0eSA/PyAoZmFjYWRlQXV0aG9yaXR5ID8gbm9ybWFsaXplQ2FwYWJpbGl0eUF1dGhvcml0eShmYWNhZGVBdXRob3JpdHkuaW5wdXQpIDogdW5kZWZpbmVkKVxuICBjb25zdCBmYWNhZGVTb3VyY2VzID0gZmFjYWRlUmVjb3Jkcy5tYXAoKGZhY2FkZSkgPT4gLyoqIEB0eXBlIHtQcm9ncmFtU291cmNlfSAqLyAoe1xuICAgIGZhY2FkZSxcbiAgICBmaWxlbmFtZTogZmFjYWRlLnNvdXJjZS5maWxlbmFtZSxcbiAgICBpZDogZmFjYWRlLnNvdXJjZS5pZCxcbiAgICBsYW5ndWFnZTogZmFjYWRlLmxhbmd1YWdlLFxuICAgIG93bmVyc2hpcDogXCJmYWNhZGVcIixcbiAgICBzb3VyY2U6IGZhY2FkZS5zb3VyY2UuY29udGVudFxuICB9KSlcblxuICB2YWxpZGF0ZUZhY2FkZUNvbGxpc2lvbnMoYXBwbGljYXRpb25Tb3VyY2VzLCBoZWFkZXJzLCBmYWNhZGVTb3VyY2VzKVxuICBjb25zdCBzb3VyY2VzID0gWy4uLmFwcGxpY2F0aW9uU291cmNlcywgLi4uZmFjYWRlU291cmNlc11cblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBmYWNhZGVTb3VyY2VzKSB7XG4gICAgYnlJZC5zZXQoc291cmNlLmlkLCBzb3VyY2UpXG4gICAgYnlGaWxlbmFtZS5zZXQoc291cmNlLmZpbGVuYW1lLCBzb3VyY2UpXG4gICAgaGVhZGVycy5zZXQoc291cmNlLmlkLCBpbnNwZWN0U291cmNlKHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcmVnaXN0ZXJlZFNvdXJjZXMgPSBzb3VyY2VzLm1hcCgoc291cmNlLCBpbmRleCkgPT4gKHtcbiAgICBjb250ZW50OiBzb3VyY2Uuc291cmNlLFxuICAgIGZpbGVuYW1lOiBzb3VyY2UuZmlsZW5hbWUsXG4gICAgaWQ6IGBzb3VyY2U6JHtpbmRleH1gLFxuICAgIGxhbmd1YWdlOiBzb3VyY2UubGFuZ3VhZ2UsXG4gICAgb3duZXJzaGlwOiBzb3VyY2Uub3duZXJzaGlwXG4gIH0pKVxuICBjb25zdCBzb3VyY2VJZHMgPSBuZXcgTWFwKHNvdXJjZXMubWFwKChzb3VyY2UsIGluZGV4KSA9PiBbc291cmNlLmlkLCBgc291cmNlOiR7aW5kZXh9YF0pKVxuXG4gIHZhbGlkYXRlTmF0aXZlTW9kdWxlSWRlbnRpdGllcyhzb3VyY2VzLCBoZWFkZXJzKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHtzb3VyY2U6IHR5cGVvZiBzb3VyY2VzW251bWJlcl0sIHJlcXVlc3RzOiAoUmV0dXJuVHlwZTx0eXBlb2YgaW5zcGVjdFNvdXJjZT5bXCJpbXBvcnRzXCJdW251bWJlcl0gJiB7bW9kdWxlSWQ6IHN0cmluZ30pW119Pn0gKi9cbiAgY29uc3QgZ3JhcGggPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgY29uc3QgcmVxdWVzdHMgPSByZXF1aXJlZE1hcFZhbHVlKGhlYWRlcnMsIHNvdXJjZS5pZCkuaW1wb3J0cy5tYXAoKHJlcXVlc3QpID0+ICh7XG4gICAgICAuLi5yZXF1ZXN0LFxuICAgICAgbW9kdWxlSWQ6IHJlcXVlc3QuZmFjYWRlPy5zb3VyY2UuaWQgPz8gcmVzb2x2ZUltcG9ydE1vZHVsZShzb3VyY2UsIHJlcXVlc3Quc3BlY2lmaWVyLCByZXF1ZXN0LnBhdGhMb2NhdGlvbiwgYnlGaWxlbmFtZSwgaGVhZGVycylcbiAgICB9KSlcblxuICAgIGdyYXBoLnNldChzb3VyY2UuaWQsIHtyZXF1ZXN0cywgc291cmNlfSlcbiAgfVxuICBjb25zdCBvcmRlcmVkSWRzID0gdG9wb2xvZ2ljYWxPcmRlcihzb3VyY2VzLCBncmFwaClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGU+fSAqL1xuICBjb25zdCBwYXJzZWQgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj59ICovXG4gIGNvbnN0IGNhbGxFZmZlY3RzQnlEZWNsYXJhdGlvbklkID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBtb2R1bGVJZCBvZiBvcmRlcmVkSWRzKSB7XG4gICAgY29uc3Qge3JlcXVlc3RzLCBzb3VyY2V9ID0gcmVxdWlyZWRNYXBWYWx1ZShncmFwaCwgbW9kdWxlSWQpXG4gICAgY29uc3Qgc291cmNlSWQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHNvdXJjZUlkcy5nZXQoc291cmNlLmlkKSlcbiAgICBjb25zdCBoZWFkZXIgPSByZXF1aXJlZE1hcFZhbHVlKGhlYWRlcnMsIG1vZHVsZUlkKVxuICAgIGNvbnN0IGxvY2FsTmFtZXMgPSBuZXcgU2V0KClcbiAgICBjb25zdCB2aXNpYmxlRnVuY3Rpb25zID0gbmV3IE1hcCgpXG4gICAgY29uc3QgdmlzaWJsZUNhbGxFZmZlY3RzID0gbmV3IE1hcCgpXG4gICAgY29uc3QgdmlzaWJsZVJlY29yZHNCeU5hbWUgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlVmFsdWVSZWNvcmRzQnlOYW1lID0gbmV3IE1hcCgpXG4gICAgY29uc3QgdmlzaWJsZVJlY29yZHNCeUlkID0gbmV3IE1hcCgpXG4gICAgY29uc3QgdmlzaWJsZUNsYXNzZXNCeU5hbWUgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlQ2xhc3Nlc0J5SWQgPSBuZXcgTWFwKClcbiAgICBjb25zdCB2aXNpYmxlRXJyb3JzQnlOYW1lID0gbmV3IE1hcCgpXG4gICAgY29uc3QgdmlzaWJsZUVycm9yc0J5SWQgPSBuZXcgTWFwKClcbiAgICBjb25zdCBjb25zdW1lZEJpbmRpbmdzID0gbmV3IFNldCgpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0ltcG9ydFtdfSAqL1xuICAgIGNvbnN0IGltcG9ydHMgPSBbXVxuXG4gICAgaWYgKCFzb3VyY2UuZmFjYWRlICYmIGF1dGhvcml0eSkge1xuICAgICAgY29uc3QgZmFpbHVyZU5hbWVzID0gbmV3IFNldChoZWFkZXIuaW1wb3J0cy5maWx0ZXIoKHtmYWNhZGV9KSA9PiBmYWNhZGUpLmZsYXRNYXAoKHtmYWNhZGV9KSA9PlxuICAgICAgICBmYWNhZGU/LnB1YmxpY0RlY2xhcmF0aW9ucy5mbGF0TWFwKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24ua2luZCA9PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlY2xhcmF0aW9uLmZhaWx1cmVzXG4gICAgICAgICAgOiBbLi4uZGVjbGFyYXRpb24uY29uc3RydWN0b3IuZmFpbHVyZXMsIC4uLmRlY2xhcmF0aW9uLm1ldGhvZHMuZmxhdE1hcCgoe2ZhaWx1cmVzfSkgPT4gZmFpbHVyZXMpXSkgPz8gW10pKVxuXG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgYXV0aG9yaXR5LmNhcGFiaWxpdGllcy5mbGF0TWFwKCh7ZmFpbHVyZXN9KSA9PiBmYWlsdXJlcykpIHtcbiAgICAgICAgaWYgKCFmYWlsdXJlTmFtZXMuaGFzKGZhaWx1cmUubmFtZSkpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoZmFpbHVyZSkpXG5cbiAgICAgICAgdmlzaWJsZUVycm9yc0J5TmFtZS5zZXQoZmFpbHVyZS5uYW1lLCBkZWNsYXJhdGlvbilcbiAgICAgICAgdmlzaWJsZUVycm9yc0J5SWQuc2V0KGZhaWx1cmUuaWQsIGRlY2xhcmF0aW9uKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHBhcnNlZC5nZXQocmVxdWVzdC5tb2R1bGVJZClcblxuICAgICAgaWYgKCFkZXBlbmRlbmN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSAnJHtyZXF1ZXN0Lm1vZHVsZUlkfScgd2FzIG5vdCBwYXJzZWQgYmVmb3JlICcke3NvdXJjZS5pZH0nLmApXG4gICAgICB9XG4gICAgICBjb25zdCBkZXBlbmRlbmN5SGVhZGVyID0gcmVxdWlyZWRNYXBWYWx1ZShoZWFkZXJzLCByZXF1ZXN0Lm1vZHVsZUlkKVxuICAgICAgY29uc3QgbmF0aXZlQmluZGluZ1ByZWZpeCA9IHJlcXVlc3QuZmFjYWRlPy5uYXRpdmVNb2R1bGVzLmZpbmQoKHtpZGVudGl0eX0pID0+IGlkZW50aXR5ID09IHJlcXVlc3Quc3BlY2lmaWVyKT8uaWRlbnRpdHkgPz9cbiAgICAgICAgZGVwZW5kZW5jeUhlYWRlci5uYXRpdmVOYW1lXG4gICAgICBjb25zdCBuYXRpdmVCaW5kaW5ncyA9IHNvdXJjZS5sYW5ndWFnZSA9PSBcInBocFwiICYmIHJlcXVlc3QubmFtZXNwYWNlXG4gICAgICAgID8gKGhlYWRlci5iaW5kaW5ncyA/PyBbXSkuZmlsdGVyKCh7bmF0aXZlTmFtZX0pID0+IG5hdGl2ZU5hbWUuc3RhcnRzV2l0aChgJHtuYXRpdmVCaW5kaW5nUHJlZml4fVxcXFxgKSlcbiAgICAgICAgOiBbXVxuICAgICAgY29uc3Qgc2VsZWN0ZWRFeHBvcnRzID0gcmVxdWVzdC5uYW1lc3BhY2UgJiYgc291cmNlLmxhbmd1YWdlID09IFwicGhwXCJcbiAgICAgICAgPyBkZXBlbmRlbmN5LmV4cG9ydHMuZmlsdGVyKCh7ZXhwb3J0ZWROYW1lfSkgPT4gbmF0aXZlQmluZGluZ3Muc29tZSgoe2ltcG9ydGVkTmFtZX0pID0+IGltcG9ydGVkTmFtZSA9PSBleHBvcnRlZE5hbWUpKVxuICAgICAgICA6IHJlcXVlc3QubmFtZXNwYWNlXG4gICAgICAgICAgPyBkZXBlbmRlbmN5LmV4cG9ydHNcbiAgICAgICAgOiBkZXBlbmRlbmN5LmV4cG9ydHMuZmlsdGVyKCh7ZXhwb3J0ZWROYW1lfSkgPT4gZXhwb3J0ZWROYW1lID09IHJlcXVlc3QuaW1wb3J0ZWROYW1lKVxuXG4gICAgICBpZiAoc2VsZWN0ZWRFeHBvcnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiVU5SRVNPTFZFRF9JTVBPUlRcIiwgcmVxdWVzdC5uYW1lc3BhY2VcbiAgICAgICAgICA/IGBJbXBvcnRlZCBtb2R1bGUgJyR7cmVxdWVzdC5tb2R1bGVJZH0nIGhhcyBubyBleHBsaWNpdGx5IGJvdW5kIGV4cG9ydHMuYFxuICAgICAgICAgIDogYE1vZHVsZSAnJHtyZXF1ZXN0Lm1vZHVsZUlkfScgZG9lcyBub3QgZXhwb3J0ICcke3JlcXVlc3QuaW1wb3J0ZWROYW1lfScuYCwgcmVxdWVzdC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZXhwb3J0ZWQgb2Ygc2VsZWN0ZWRFeHBvcnRzKSB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUJpbmRpbmcgPSBuYXRpdmVCaW5kaW5ncy5maW5kKCh7aW1wb3J0ZWROYW1lfSkgPT4gaW1wb3J0ZWROYW1lID09IGV4cG9ydGVkLmV4cG9ydGVkTmFtZSlcbiAgICAgICAgY29uc3QgbG9jYWxOYW1lID0gbmF0aXZlQmluZGluZz8ubG9jYWxOYW1lID8/IChyZXF1ZXN0Lm5hbWVzcGFjZVxuICAgICAgICAgID8gcXVhbGlmaWVkSW1wb3J0TmFtZShzb3VyY2UubGFuZ3VhZ2UsIGRlcGVuZGVuY3lIZWFkZXIubmF0aXZlTmFtZSwgZXhwb3J0ZWQpXG4gICAgICAgICAgOiByZXF1ZXN0LmxvY2FsTmFtZVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGltcG9ydExvY2F0aW9uID0gbmF0aXZlQmluZGluZz8ubG9jYXRpb24gPz8gcmVxdWVzdC5sb2NhdGlvblxuXG4gICAgICAgIGlmIChsb2NhbE5hbWVzLmhhcyhsb2NhbE5hbWUpKSB7XG4gICAgICAgICAgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJEVVBMSUNBVEVfSU1QT1JUX0JJTkRJTkdcIiwgYER1cGxpY2F0ZSBpbXBvcnQgYmluZGluZyAnJHtsb2NhbE5hbWV9Jy5gLCBpbXBvcnRMb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgICBsb2NhbE5hbWVzLmFkZChsb2NhbE5hbWUpXG4gICAgICAgIGlmIChuYXRpdmVCaW5kaW5nICYmIG5hdGl2ZUJpbmRpbmcuc3ltYm9sS2luZCAhPSBleHBvcnRlZC5zeW1ib2xLaW5kICYmXG4gICAgICAgICAgIShuYXRpdmVCaW5kaW5nLnN5bWJvbEtpbmQgPT0gXCJyZWNvcmRcIiAmJiBleHBvcnRlZC5zeW1ib2xLaW5kID09IFwiZXJyb3JcIikpIHtcbiAgICAgICAgICBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIklNUE9SVF9LSU5EX01JU01BVENIXCIsIGBJbXBvcnQgJyR7bmF0aXZlQmluZGluZy5pbXBvcnRlZE5hbWV9JyBoYXMgdGhlIHdyb25nIGRlY2xhcmF0aW9uIGtpbmQuYCwgaW1wb3J0TG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudHlwZU9ubHkgJiYgZXhwb3J0ZWQuc3ltYm9sS2luZCAhPSBcInJlY29yZFwiKSB7XG4gICAgICAgICAgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJJTVBPUlRfS0lORF9NSVNNQVRDSFwiLCBgVHlwZSBpbXBvcnQgJyR7cmVxdWVzdC5pbXBvcnRlZE5hbWV9JyBkb2VzIG5vdCBuYW1lIGEgcmVjb3JkLmAsIGltcG9ydExvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIGlmIChuYXRpdmVCaW5kaW5nKSBjb25zdW1lZEJpbmRpbmdzLmFkZChuYXRpdmVCaW5kaW5nKVxuICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uRm9yKGRlcGVuZGVuY3ksIGV4cG9ydGVkKVxuICAgICAgICBjb25zdCB0eXBlT25seSA9IG5hdGl2ZUJpbmRpbmc/LnR5cGVPbmx5ID8/IHJlcXVlc3QudHlwZU9ubHlcblxuICAgICAgICBpZiAoZXhwb3J0ZWQuc3ltYm9sS2luZCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB2aXNpYmxlRnVuY3Rpb25zLnNldChsb2NhbE5hbWUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gKi8gKGRlY2xhcmF0aW9uKSlcbiAgICAgICAgICB2aXNpYmxlQ2FsbEVmZmVjdHMuc2V0KGxvY2FsTmFtZSwgbmV3IFNldChjYWxsRWZmZWN0c0J5RGVjbGFyYXRpb25JZC5nZXQoZXhwb3J0ZWQuZGVjbGFyYXRpb25JZCkgPz8gW10pKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4cG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJyZWNvcmRcIikge1xuICAgICAgICAgIGNvbnN0IHJlY29yZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259ICovIChkZWNsYXJhdGlvbilcblxuICAgICAgICAgIHZpc2libGVSZWNvcmRzQnlOYW1lLnNldChsb2NhbE5hbWUsIHJlY29yZClcbiAgICAgICAgICBpZiAoIXR5cGVPbmx5KSB2aXNpYmxlVmFsdWVSZWNvcmRzQnlOYW1lLnNldChsb2NhbE5hbWUsIHJlY29yZClcbiAgICAgICAgICB2aXNpYmxlUmVjb3Jkc0J5SWQuc2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVjb3JkLmlkKSwgcmVjb3JkKVxuICAgICAgICB9IGVsc2UgaWYgKGV4cG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJjbGFzc1wiKSB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb259ICovIChkZWNsYXJhdGlvbkZvcihkZXBlbmRlbmN5LCBleHBvcnRlZCkpXG5cbiAgICAgICAgICB2aXNpYmxlQ2xhc3Nlc0J5TmFtZS5zZXQobG9jYWxOYW1lLCBkZWNsYXJhdGlvbilcbiAgICAgICAgICB2aXNpYmxlQ2xhc3Nlc0J5SWQuc2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLCBkZWNsYXJhdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbn0gKi8gKGRlY2xhcmF0aW9uKVxuXG4gICAgICAgICAgdmlzaWJsZUVycm9yc0J5TmFtZS5zZXQobG9jYWxOYW1lLCBlcnJvcilcbiAgICAgICAgICB2aXNpYmxlRXJyb3JzQnlJZC5zZXQoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChlcnJvci5pZCksIGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24+fSAqL1xuICAgICAgICBjb25zdCByYW5nZXMgPSB7XG4gICAgICAgICAgZGVjbGFyYXRpb246IHJlcXVlc3QuZGVjbGFyYXRpb25Mb2NhdGlvbiA/PyByZXF1ZXN0LmxvY2F0aW9uLFxuICAgICAgICAgIHBhdGg6IHJlcXVlc3QucGF0aExvY2F0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlcXVlc3QubmFtZXNwYWNlIHx8IG5hdGl2ZUJpbmRpbmcgfHwgcmVxdWVzdC5mYWNhZGUpIHtcbiAgICAgICAgICByYW5nZXMuaW1wb3J0ZWROYW1lID0gbmF0aXZlQmluZGluZz8ubG9jYXRpb24gPz8gcmVxdWVzdC5pbXBvcnRlZE5hbWVMb2NhdGlvbiA/PyBpbXBvcnRMb2NhdGlvblxuICAgICAgICAgIHJhbmdlcy5sb2NhbE5hbWUgPSBuYXRpdmVCaW5kaW5nPy5sb2NhdGlvbiA/PyByZXF1ZXN0LmxvY2FsTmFtZUxvY2F0aW9uID8/IGltcG9ydExvY2F0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBpbXBvcnRzLnB1c2goe1xuICAgICAgICAgIGRlY2xhcmF0aW9uSWQ6IGV4cG9ydGVkLmRlY2xhcmF0aW9uSWQsXG4gICAgICAgICAgaW1wb3J0ZWROYW1lOiBleHBvcnRlZC5leHBvcnRlZE5hbWUsXG4gICAgICAgICAga2luZDogXCJJbXBvcnRcIixcbiAgICAgICAgICBsb2NhbE5hbWUsXG4gICAgICAgICAgbG9jYXRpb246IGltcG9ydExvY2F0aW9uLFxuICAgICAgICAgIG1vZHVsZUlkOiByZXF1ZXN0Lm1vZHVsZUlkLFxuICAgICAgICAgIC4uLihyZXF1ZXN0LmZhY2FkZSA/IHtzdGRsaWJGYWNhZGU6IHtcbiAgICAgICAgICAgIGZhY2FkZUlkZW50aXR5OiByZXF1ZXN0LmZhY2FkZS5pZGVudGl0eSxcbiAgICAgICAgICAgIGZhY2FkZVZlcnNpb246IHJlcXVlc3QuZmFjYWRlLnZlcnNpb24sXG4gICAgICAgICAgICBuYXRpdmVNb2R1bGU6IHJlcXVlc3Quc3BlY2lmaWVyLFxuICAgICAgICAgICAgbmF0aXZlU3ltYm9sOiBleHBvcnRlZC5leHBvcnRlZE5hbWUsXG4gICAgICAgICAgICBzY2hlbWE6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlNlbWFudGlmb2xkU3RkbGliRmFjYWRlUmVzb2x1dGlvblwiKSxcbiAgICAgICAgICAgIHZlcnNpb246IC8qKiBAdHlwZSB7Y29uc3R9ICovICgxKVxuICAgICAgICAgIH19IDoge30pLFxuICAgICAgICAgIHNvdXJjZVByb3ZlbmFuY2U6IHNvdXJjZUFzc29jaWF0aW9uKGltcG9ydExvY2F0aW9uLCByYW5nZXMsIHNvdXJjZUlkKSxcbiAgICAgICAgICBzeW1ib2xLaW5kOiBleHBvcnRlZC5zeW1ib2xLaW5kLFxuICAgICAgICAgIHR5cGVPbmx5XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHVuY29uc3VtZWRCaW5kaW5nID0gKGhlYWRlci5iaW5kaW5ncyA/PyBbXSkuZmluZCgoYmluZGluZykgPT4gIWNvbnN1bWVkQmluZGluZ3MuaGFzKGJpbmRpbmcpKVxuXG4gICAgaWYgKHVuY29uc3VtZWRCaW5kaW5nKSB7XG4gICAgICBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlVOUkVTT0xWRURfSU1QT1JUXCIsIGBOYXRpdmUgaW1wb3J0ICcke3VuY29uc3VtZWRCaW5kaW5nLm5hdGl2ZU5hbWV9JyBoYXMgbm8gbWF0Y2hpbmcgcmVxdWlyZWQgbW9kdWxlLmAsIHVuY29uc3VtZWRCaW5kaW5nLmxvY2F0aW9uKVxuICAgIH1cblxuICAgIGNvbnN0IGZyb250ZW5kID0gLyoqIEB0eXBlIHsoaW5wdXQ6IG9iamVjdCkgPT4gaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9ICovIChcbiAgICAgIGxhbmd1YWdlUmVnaXN0cnkucmVzb2x2ZShzb3VyY2UubGFuZ3VhZ2UsIFwiZnJvbnRlbmRcIikpXG4gICAgY29uc3QgZmFjYWRlTW9kdWxlcyA9IG5ldyBTZXQoc291cmNlLmZhY2FkZT8ucmVxdWlyZW1lbnRzLm1hcCgoe21vZHVsZX0pID0+IG1vZHVsZSkgPz8gW10pXG4gICAgY29uc3QgbW9kdWxlQ2FwYWJpbGl0aWVzID0gcmVxdWVzdGVkQXV0aG9yaXR5Py5jYXBhYmlsaXRpZXMgPz8gKHNvdXJjZS5mYWNhZGU/LnJlcXVpcmVtZW50cy5sZW5ndGhcbiAgICAgID8gYXV0aG9yaXR5Py5tb2R1bGVzPy5maWx0ZXIoKHtpZGVudGl0eX0pID0+IGZhY2FkZU1vZHVsZXMuaGFzKGlkZW50aXR5KSkuZmxhdE1hcCgoe2NhcGFiaWxpdGllc30pID0+IGNhcGFiaWxpdGllcykgPz9cbiAgICAgICAgYXV0aG9yaXR5Py5jYXBhYmlsaXRpZXNcbiAgICAgIDogdW5kZWZpbmVkKVxuICAgIGNvbnN0IHJhdyA9IGZyb250ZW5kKHtcbiAgICAgIGNhcGFiaWxpdGllczogbW9kdWxlQ2FwYWJpbGl0aWVzLFxuICAgICAgZmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZSxcbiAgICAgIGxhbmd1YWdlOiBzb3VyY2UubGFuZ3VhZ2UsXG4gICAgICBwcm9ncmFtOiB7XG4gICAgICAgIGNsYXNzZXM6IHZpc2libGVDbGFzc2VzQnlOYW1lLFxuICAgICAgICBmdW5jdGlvbnM6IHZpc2libGVGdW5jdGlvbnMsXG4gICAgICAgIGlzRW50cnk6IHNvdXJjZS5pZCA9PSBpbnB1dC5lbnRyeU1vZHVsZSxcbiAgICAgICAgZXJyb3JzOiB2aXNpYmxlRXJyb3JzQnlOYW1lLFxuICAgICAgICByZWNvcmRzOiB2aXNpYmxlUmVjb3Jkc0J5TmFtZSxcbiAgICAgICAgdmFsdWVSZWNvcmRzOiB2aXNpYmxlVmFsdWVSZWNvcmRzQnlOYW1lXG4gICAgICB9LFxuICAgICAgc291cmNlOiBzb3VyY2Uuc291cmNlXG4gICAgfSlcblxuICAgIGlmIChtb2R1bGVDYXBhYmlsaXRpZXMpIHJhdy5jYXBhYmlsaXRpZXMgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVmZmVjdENhcGFiaWxpdHlEZWNsYXJhdGlvbltdfSAqLyAobW9kdWxlQ2FwYWJpbGl0aWVzKVxuICAgIGlmICgocmF3LmNsYXNzZXM/Lmxlbmd0aCA/PyAwKSA+IDAgJiYgIXNvdXJjZS5mYWNhZGU/LnB1YmxpY0RlY2xhcmF0aW9ucy5zb21lKCh7a2luZH0pID0+IGtpbmQgPT0gXCJjbGFzc1wiKSkge1xuICAgICAgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJVTlNVUFBPUlRFRF9TWU5UQVhcIixcbiAgICAgICAgXCJUYXNrIDAzMyByZWZlcmVuY2UgY2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgVGFzayAwMTAgc2VtYW50aWMgcHJvZ3JhbSBwcm9maWxlLlwiLFxuICAgICAgICByYXcuY2xhc3Nlcz8uWzBdPy5sb2NhdGlvbiA/PyByYXcubG9jYXRpb24pXG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZS5pZCA9PSBpbnB1dC5lbnRyeU1vZHVsZSAmJiByYXcuZW50cnlQb2ludC5ib2R5LnN0YXRlbWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiSU5WQUxJRF9FTlRSWV9NT0RVTEVcIiwgYFNlbGVjdGVkIGVudHJ5IG1vZHVsZSAnJHtzb3VyY2UuaWR9JyBoYXMgbm8gZXhlY3V0YWJsZSBzdGF0ZW1lbnRzLmAsIHJhdy5lbnRyeVBvaW50LmxvY2F0aW9uKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVQYXJzZWRNb2R1bGUocmF3LCBzb3VyY2UubGFuZ3VhZ2UsIHtcbiAgICAgICAgY2FsbEVmZmVjdHM6IHZpc2libGVDYWxsRWZmZWN0cyxcbiAgICAgICAgZXJyb3JzOiB2aXNpYmxlRXJyb3JzQnlJZCxcbiAgICAgICAgZnVuY3Rpb25zOiB2aXNpYmxlRnVuY3Rpb25zLFxuICAgICAgICByZWNvcmRzOiB2aXNpYmxlUmVjb3Jkc0J5SWQsXG4gICAgICAgIGNsYXNzZXM6IHZpc2libGVDbGFzc2VzQnlJZFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgdGFzazAzNyA9IHNvdXJjZS5sYW5ndWFnZSA9PSBcInJ1YnlcIiAmJiBoZWFkZXIuaW1wb3J0cy5zb21lKCh7ZmFjYWRlfSkgPT4gZmFjYWRlPy5pZGVudGl0eS5zdGFydHNXaXRoKFwic2VtYW50aWZvbGQudGFzazAzNy5cIikpXG5cbiAgICAgIGlmICh0YXNrMDM3ICYmIGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmNvZGUgPT0gXCJVTktOT1dOX01FVEhPRFwiICYmXG4gICAgICAgIGVycm9yLmRldGFpbC5zdGFydHNXaXRoKFwiQ2xhc3MgJ1RDUFNvY2tldCdcIikpIHtcbiAgICAgICAgZmFjYWRlRmFpbHVyZShcInJ1YnlcIiwgXCJTVERMSUJfRkFDQURFX01FTUJFUl9VTlNVUFBPUlRFRFwiLCBlcnJvci5kZXRhaWwsIGVycm9yLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgcmVrZXlEZWNsYXJhdGlvbnMocmF3LCBzb3VyY2UuaWQpXG4gICAgY29uc3QgbG9jYWxDYWxsRWZmZWN0cyA9IG1vZHVsZVVuY2hlY2tlZEVycm9yRWZmZWN0cyhyYXcsIHtjYWxsRWZmZWN0czogdmlzaWJsZUNhbGxFZmZlY3RzLCBmdW5jdGlvbnM6IHZpc2libGVGdW5jdGlvbnN9KVxuXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByYXcuZnVuY3Rpb25zKSB7XG4gICAgICBjYWxsRWZmZWN0c0J5RGVjbGFyYXRpb25JZC5zZXQoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZWNsYXJhdGlvbi5pZCksIG5ldyBTZXQobG9jYWxDYWxsRWZmZWN0cy5nZXQoZGVjbGFyYXRpb24ubmFtZSkgPz8gW10pKVxuICAgIH1cbiAgICBhbm5vdGF0ZVBhcnNlZE1vZHVsZShyYXcsIHNvdXJjZSlcbiAgICByZWJhc2VQYXJzZWRNb2R1bGVQcm92ZW5hbmNlKHJhdywgcmVnaXN0ZXJlZFNvdXJjZXMsIHNvdXJjZUlkKVxuXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCB7ZGVjbGFyYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uLCBzeW1ib2xLaW5kOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0RlY2xhcmF0aW9uS2luZH0+fSAqL1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0J5TmFtZSA9IG5ldyBNYXAoKVxuXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByYXcucmVjb3JkcyA/PyBbXSkgZGVjbGFyYXRpb25zQnlOYW1lLnNldChkZWNsYXJhdGlvbi5uYW1lLCB7ZGVjbGFyYXRpb24sIHN5bWJvbEtpbmQ6IFwicmVjb3JkXCJ9KVxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmF3LmNsYXNzZXMgPz8gW10pIGRlY2xhcmF0aW9uc0J5TmFtZS5zZXQoZGVjbGFyYXRpb24ubmFtZSwge2RlY2xhcmF0aW9uLCBzeW1ib2xLaW5kOiBcImNsYXNzXCJ9KVxuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgcmF3LmVycm9ycyA/PyBbXSkgZGVjbGFyYXRpb25zQnlOYW1lLnNldChkZWNsYXJhdGlvbi5uYW1lLCB7ZGVjbGFyYXRpb24sIHN5bWJvbEtpbmQ6IFwiZXJyb3JcIn0pXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiByYXcuZnVuY3Rpb25zKSBkZWNsYXJhdGlvbnNCeU5hbWUuc2V0KGRlY2xhcmF0aW9uLm5hbWUsIHtkZWNsYXJhdGlvbiwgc3ltYm9sS2luZDogXCJmdW5jdGlvblwifSlcbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRXhwb3J0W119ICovXG4gICAgY29uc3QgZXhwb3J0cyA9IGhlYWRlci5leHBvcnRzLm1hcCgocmVxdWVzdCkgPT4ge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSBkZWNsYXJhdGlvbnNCeU5hbWUuZ2V0KHJlcXVlc3QubG9jYWxOYW1lKVxuXG4gICAgICBpZiAoIXJlc29sdmVkKSBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlVOUkVTT0xWRURfRVhQT1JUXCIsIGBVbmtub3duIGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3JlcXVlc3QubG9jYWxOYW1lfScuYCwgcmVxdWVzdC5sb2NhdGlvbilcbiAgICAgIGlmIChyZXF1ZXN0LnR5cGVPbmx5ICYmIHJlc29sdmVkLnN5bWJvbEtpbmQgIT0gXCJyZWNvcmRcIikge1xuICAgICAgICBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIkVYUE9SVF9LSU5EX01JU01BVENIXCIsIGBUeXBlIGV4cG9ydCAnJHtyZXF1ZXN0LmV4cG9ydGVkTmFtZX0nIGRvZXMgbm90IG5hbWUgYSByZWNvcmQuYCwgcmVxdWVzdC5sb2NhdGlvbilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjbGFyYXRpb25JZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZXNvbHZlZC5kZWNsYXJhdGlvbi5pZCksXG4gICAgICAgIGV4cG9ydGVkTmFtZTogcmVxdWVzdC5leHBvcnRlZE5hbWUsXG4gICAgICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkV4cG9ydFwiKSxcbiAgICAgICAgbG9jYXRpb246IHJlcXVlc3QubG9jYXRpb24sXG4gICAgICAgIHNvdXJjZVByb3ZlbmFuY2U6IHNvdXJjZUFzc29jaWF0aW9uKHJlcXVlc3QubG9jYXRpb24sIHtcbiAgICAgICAgICBkZWNsYXJhdGlvbjogcmVxdWVzdC5kZWNsYXJhdGlvbkxvY2F0aW9uID8/IHJlcXVlc3QubG9jYXRpb24sXG4gICAgICAgICAgZXhwb3J0ZWROYW1lOiByZXF1ZXN0LmV4cG9ydGVkTmFtZUxvY2F0aW9uID8/IHJlcXVlc3QubG9jYXRpb24sXG4gICAgICAgICAgbG9jYWxOYW1lOiByZXF1ZXN0LmxvY2FsTmFtZUxvY2F0aW9uID8/IHJlcXVlc3QubG9jYXRpb25cbiAgICAgICAgfSwgc291cmNlSWQpLFxuICAgICAgICBzeW1ib2xLaW5kOiByZXNvbHZlZC5zeW1ib2xLaW5kXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBleHBvcnRlZE5hbWVzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGNvbnN0IGV4cG9ydGVkIG9mIGV4cG9ydHMpIHtcbiAgICAgIGlmIChleHBvcnRlZE5hbWVzLmhhcyhleHBvcnRlZC5leHBvcnRlZE5hbWUpKSB7XG4gICAgICAgIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiRFVQTElDQVRFX0VYUE9SVFwiLCBgRHVwbGljYXRlIGV4cG9ydCAnJHtleHBvcnRlZC5leHBvcnRlZE5hbWV9Jy5gLCBleHBvcnRlZC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGV4cG9ydGVkTmFtZXMuYWRkKGV4cG9ydGVkLmV4cG9ydGVkTmFtZSlcbiAgICB9XG5cbiAgICBjb25zdCB7ZW50cnlQb2ludCwgLi4ubW9kdWxlV2l0aG91dEVudHJ5fSA9IHJhd1xuICAgIGNvbnN0IG1vZHVsZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSAqLyAoe1xuICAgICAgLi4ubW9kdWxlV2l0aG91dEVudHJ5LFxuICAgICAgLi4uKHNvdXJjZS5pZCA9PSBpbnB1dC5lbnRyeU1vZHVsZSA/IHtlbnRyeVBvaW50fSA6IHt9KSxcbiAgICAgIGV4cG9ydHMsXG4gICAgICBpZDogc291cmNlLmlkLFxuICAgICAgaW1wb3J0cyxcbiAgICAgIC4uLihzb3VyY2UuZmFjYWRlID8ge3N0ZGxpYkZhY2FkZToge2lkZW50aXR5OiBzb3VyY2UuZmFjYWRlLmlkZW50aXR5LCB2ZXJzaW9uOiBzb3VyY2UuZmFjYWRlLnZlcnNpb259fSA6IHt9KSxcbiAgICAgIHNvdXJjZUZpbGVuYW1lOiBzb3VyY2UuZmlsZW5hbWVcbiAgICB9KVxuXG4gICAgaWYgKHNvdXJjZS5mYWNhZGUpIHZhbGlkYXRlUGFyc2VkRmFjYWRlKHNvdXJjZS5mYWNhZGUsIG1vZHVsZSlcblxuICAgIHBhcnNlZC5zZXQoc291cmNlLmlkLCBtb2R1bGUpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVudHJ5TW9kdWxlOiBpbnB1dC5lbnRyeU1vZHVsZSxcbiAgICBraW5kOiBcIlByb2dyYW1cIixcbiAgICBtb2R1bGVzOiBvcmRlcmVkSWRzLm1hcCgoaWQpID0+IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtTW9kdWxlfSAqLyAocGFyc2VkLmdldChpZCkpKSxcbiAgICAuLi4ocmVxdWVzdGVkQXV0aG9yaXR5ID8ge1xuICAgICAgc3RkbGliQ29udHJhY3Q6IHtcbiAgICAgICAgaWRlbnRpdHk6IHJlcXVlc3RlZEF1dGhvcml0eS5pZCxcbiAgICAgICAgLi4uKHJlcXVlc3RlZEF1dGhvcml0eS5jb250cmFjdFZlcnNpb24gIT09IHVuZGVmaW5lZCA/IHtjb250cmFjdFZlcnNpb246IHJlcXVlc3RlZEF1dGhvcml0eS5jb250cmFjdFZlcnNpb259IDoge30pXG4gICAgICB9XG4gICAgfSA6IGZhY2FkZUF1dGhvcml0eSAmJiBcImNvbnRyYWN0c1wiIGluIGZhY2FkZUF1dGhvcml0eSA/IHtzdGRsaWJDb250cmFjdHM6IGZhY2FkZUF1dGhvcml0eS5jb250cmFjdHN9XG4gICAgICA6IGZhY2FkZUF1dGhvcml0eSA/IHtzdGRsaWJDb250cmFjdDogZmFjYWRlQXV0aG9yaXR5LmNvbnRyYWN0fSA6IHt9KSxcbiAgICAuLi4oZmFjYWRlUmVjb3Jkcy5sZW5ndGggPiAwID8ge3N0ZGxpYkZhY2FkZXM6IHN0ZGxpYkZhY2FkZVByb2dyYW1EZXNjcmlwdG9yKGFwcGxpY2F0aW9uU291cmNlc1swXS5sYW5ndWFnZSwgZmFjYWRlUmVjb3Jkcyl9IDoge30pLFxuICAgIHNvdXJjZXM6IHJlZ2lzdGVyZWRTb3VyY2VzXG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBwYXJzZXItb3duZWQgbmF0aXZlIG1vZHVsZSBhbmQgc3ltYm9sIGV2aWRlbmNlIHRvIGZhY2FkZSByb290cy5cbiAqIE11dGF0aW5nIHRoZSBwcml2YXRlIGhlYWRlciByZXF1ZXN0cyBrZWVwcyB0aGUgcHJvb2YgYXR0YWNoZWQgdG8gdGhlIGV4YWN0IGltcG9ydCBub2RlLlxuICogQHBhcmFtIHtQcm9ncmFtU291cmNlW119IHNvdXJjZXMgLSBDYWxsZXItb3duZWQgc291cmNlcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgUHJvZ3JhbUhlYWRlcj59IGhlYWRlcnMgLSBQYXJzZXItb3duZWQgc291cmNlIGhlYWRlcnMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc3RkbGliLWZhY2FkZXMuanNcIikuU3RkbGliRmFjYWRlUmVjb3JkW119IFNlbGVjdGVkIGZhY2FkZSByb290cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZhY2FkZUltcG9ydHMoc291cmNlcywgaGVhZGVycykge1xuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCIpLlN0ZGxpYkZhY2FkZVJlY29yZFtdfSAqL1xuICBjb25zdCByb290cyA9IFtdXG5cbiAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgIGNvbnN0IGhlYWRlciA9IHJlcXVpcmVkTWFwVmFsdWUoaGVhZGVycywgc291cmNlLmlkKVxuXG4gICAgaWYgKHNvdXJjZS5sYW5ndWFnZSA9PSBcInJ1YnlcIikgcmVzb2x2ZVJ1YnlUYXNrMDM3RmFjYWRlcyhzb3VyY2UsIGhlYWRlciwgcm9vdHMpXG5cbiAgICBpZiAoc291cmNlLmxhbmd1YWdlID09IFwicGhwXCIpIHtcbiAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBoZWFkZXIuYmluZGluZ3MgPz8gW10pIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBiaW5kaW5nLm5hdGl2ZU5hbWUuc3BsaXQoXCJcXFxcXCIpXG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGFydHMucG9wKCkpXG4gICAgICAgIGNvbnN0IG5hdGl2ZU1vZHVsZSA9IHBhcnRzLmpvaW4oXCJcXFxcXCIpXG5cbiAgICAgICAgaWYgKCFuYXRpdmVNb2R1bGUuc3RhcnRzV2l0aChcIlNlbWFudGlmb2xkXFxcXFRhc2swMzZcXFxcXCIpKSBjb250aW51ZVxuICAgICAgICBjb25zdCBmYWNhZGUgPSByZXNvbHZlRmFjYWRlQXQoc291cmNlLCBuYXRpdmVNb2R1bGUsIHN5bWJvbCwgYmluZGluZy5sb2NhdGlvbilcblxuICAgICAgICBoZWFkZXIuaW1wb3J0cy5wdXNoKHtcbiAgICAgICAgICBkZWNsYXJhdGlvbkxvY2F0aW9uOiBiaW5kaW5nLmxvY2F0aW9uLFxuICAgICAgICAgIGZhY2FkZSxcbiAgICAgICAgICBpbXBvcnRlZE5hbWU6IFwiKlwiLFxuICAgICAgICAgIGltcG9ydGVkTmFtZUxvY2F0aW9uOiBiaW5kaW5nLmxvY2F0aW9uLFxuICAgICAgICAgIGxvY2FsTmFtZTogXCJcIixcbiAgICAgICAgICBsb2NhbE5hbWVMb2NhdGlvbjogYmluZGluZy5sb2NhdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogYmluZGluZy5sb2NhdGlvbixcbiAgICAgICAgICBuYW1lc3BhY2U6IHRydWUsXG4gICAgICAgICAgcGF0aExvY2F0aW9uOiBiaW5kaW5nLmxvY2F0aW9uLFxuICAgICAgICAgIHNwZWNpZmllcjogbmF0aXZlTW9kdWxlLFxuICAgICAgICAgIHN0ZGxpYkNhbmRpZGF0ZTogdHJ1ZSxcbiAgICAgICAgICB0eXBlT25seTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICAgcm9vdHMucHVzaChmYWNhZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIGhlYWRlci5pbXBvcnRzKSB7XG4gICAgICBjb25zdCBqYXZhQ2FuZGlkYXRlID0gc291cmNlLmxhbmd1YWdlID09IFwiamF2YVwiICYmIHJlcXVlc3Quc3BlY2lmaWVyLnN0YXJ0c1dpdGgoXCJzZW1hbnRpZm9sZC50YXNrMDM2LlwiKVxuXG4gICAgICBpZiAoIXJlcXVlc3Quc3RkbGliQ2FuZGlkYXRlICYmICFqYXZhQ2FuZGlkYXRlKSBjb250aW51ZVxuICAgICAgaWYgKHJlcXVlc3QuZmFjYWRlKSBjb250aW51ZVxuICAgICAgaWYgKC9cXC4oPzpidW5kbGV8ZGxsfG5vZGV8c28pJC9pdS50ZXN0KHJlcXVlc3Quc3BlY2lmaWVyKSkge1xuICAgICAgICBmYWNhZGVGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX05BVElWRV9FWFRFTlNJT05fVU5TVVBQT1JURURcIixcbiAgICAgICAgICBcIk5hdGl2ZS1leHRlbnNpb24gbG9hZGluZyBjYW5ub3QgcGFydGljaXBhdGUgaW4gYSBwb3J0YWJsZSBzdGRsaWIgZmFjYWRlLlwiLCByZXF1ZXN0LnBhdGhMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1cHBsaWVkID0gWy4uLmhlYWRlcnMuZW50cmllcygpXS5maW5kKChbLCBjYW5kaWRhdGVdKSA9PiBjYW5kaWRhdGUubmF0aXZlTmFtZSA9PSByZXF1ZXN0LnNwZWNpZmllcilcblxuICAgICAgaWYgKHN1cHBsaWVkKSB7XG4gICAgICAgIGZhY2FkZUZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfU0hBRE9XRURcIixcbiAgICAgICAgICBgQ2FsbGVyLXN1cHBsaWVkIG1vZHVsZSAnJHtzdXBwbGllZFswXX0nIHJlcGxhY2VzIHRoZSBjYXRhbG9ndWVkIG5hdGl2ZSBmYWNhZGUgaWRlbnRpdHkgJyR7cmVxdWVzdC5zcGVjaWZpZXJ9Jy5gLCByZXF1ZXN0LnBhdGhMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZhY2FkZSA9IHJlcXVlc3QubmFtZXNwYWNlXG4gICAgICAgID8gcmVzb2x2ZUZhY2FkZU1vZHVsZUF0KHNvdXJjZSwgcmVxdWVzdC5zcGVjaWZpZXIsIHJlcXVlc3QucGF0aExvY2F0aW9uKVxuICAgICAgICA6IHJlc29sdmVGYWNhZGVBdChzb3VyY2UsIHJlcXVlc3Quc3BlY2lmaWVyLCByZXF1ZXN0LmltcG9ydGVkTmFtZSwgcmVxdWVzdC5pbXBvcnRlZE5hbWVMb2NhdGlvbiA/PyByZXF1ZXN0LmxvY2F0aW9uKVxuXG4gICAgICByZXF1ZXN0LmZhY2FkZSA9IGZhY2FkZVxuICAgICAgcm9vdHMucHVzaChmYWNhZGUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3RzXG59XG5cbi8qKlxuICogUmVzb2x2ZXMgZXhhY3QgVGFzayAwMzcgUnVieSByZWZlcmVuY2VzIHVuZGVyIGEgbGl0ZXJhbCBzb2NrZXQgYWN0aXZhdGlvbiBlZGdlLlxuICogQHBhcmFtIHtQcm9ncmFtU291cmNlfSBzb3VyY2UgLSBJbXBvcnRpbmcgUnVieSBzb3VyY2UuXG4gKiBAcGFyYW0ge1Byb2dyYW1IZWFkZXJ9IGhlYWRlciAtIFBhcnNlci1vd25lZCBSdWJ5IGhlYWRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc3RkbGliLWZhY2FkZXMuanNcIikuU3RkbGliRmFjYWRlUmVjb3JkW119IHJvb3RzIC0gU2VsZWN0ZWQgZmFjYWRlIHJvb3RzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVSdWJ5VGFzazAzN0ZhY2FkZXMoc291cmNlLCBoZWFkZXIsIHJvb3RzKSB7XG4gIGNvbnN0IGFjdGl2YXRpb25JbmRleCA9IGhlYWRlci5pbXBvcnRzLmZpbmRJbmRleCgoe3NwZWNpZmllciwgc3RkbGliQ2FuZGlkYXRlfSkgPT4gc3RkbGliQ2FuZGlkYXRlICYmIHNwZWNpZmllciA9PSBcInNvY2tldFwiKVxuXG4gIGlmIChhY3RpdmF0aW9uSW5kZXggPCAwKSByZXR1cm5cbiAgY29uc3QgYWN0aXZhdGlvbiA9IC8qKiBAdHlwZSB7UHJvZ3JhbUltcG9ydFJlcXVlc3R9ICovIChoZWFkZXIuaW1wb3J0cy5zcGxpY2UoYWN0aXZhdGlvbkluZGV4LCAxKVswXSlcbiAgY29uc3QgYmluZGluZ3MgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBoZWFkZXIubmF0aXZlUmVmZXJlbmNlcyA/PyBbXSkge1xuICAgIGlmIChyZWZlcmVuY2UubmF0aXZlTW9kdWxlICE9IFwic29ja2V0XCIgJiYgcmVmZXJlbmNlLm5hdGl2ZU1vZHVsZSAhPSBcInJ1Ynk6S2VybmVsXCIpIGNvbnRpbnVlXG4gICAgY29uc3QgbG9jYWxOYW1lID0gcmVmZXJlbmNlLmZvcm0gPT0gXCJyZWNlaXZlci1jYWxsXCIgPyBcIktlcm5lbC5wdXRzXCIgOiByZWZlcmVuY2Uuc3ltYm9sXG5cbiAgICBpZiAoYmluZGluZ3MuaGFzKGxvY2FsTmFtZSkpIGNvbnRpbnVlXG4gICAgYmluZGluZ3MuYWRkKGxvY2FsTmFtZSlcbiAgICBjb25zdCBmYWNhZGUgPSByZXNvbHZlRmFjYWRlQXQoc291cmNlLCByZWZlcmVuY2UubmF0aXZlTW9kdWxlLCByZWZlcmVuY2Uuc3ltYm9sLCByZWZlcmVuY2UubG9jYXRpb24pXG5cbiAgICBoZWFkZXIuaW1wb3J0cy5wdXNoKHtcbiAgICAgIGRlY2xhcmF0aW9uTG9jYXRpb246IHJlZmVyZW5jZS5sb2NhdGlvbixcbiAgICAgIGZhY2FkZSxcbiAgICAgIGltcG9ydGVkTmFtZTogcmVmZXJlbmNlLnN5bWJvbCxcbiAgICAgIGltcG9ydGVkTmFtZUxvY2F0aW9uOiByZWZlcmVuY2UubG9jYXRpb24sXG4gICAgICBsb2NhbE5hbWUsXG4gICAgICBsb2NhbE5hbWVMb2NhdGlvbjogcmVmZXJlbmNlLmxvY2F0aW9uLFxuICAgICAgbG9jYXRpb246IHJlZmVyZW5jZS5sb2NhdGlvbixcbiAgICAgIHBhdGhMb2NhdGlvbjogYWN0aXZhdGlvbi5wYXRoTG9jYXRpb24sXG4gICAgICBzcGVjaWZpZXI6IHJlZmVyZW5jZS5uYXRpdmVNb2R1bGUsXG4gICAgICBzdGRsaWJDYW5kaWRhdGU6IHRydWUsXG4gICAgICB0eXBlT25seTogZmFsc2VcbiAgICB9KVxuICAgIHJvb3RzLnB1c2goZmFjYWRlKVxuICB9XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgb25lIGV4YWN0IG5hdGl2ZSBtb2R1bGUgYW5kIHN5bWJvbCB3aGlsZSBwcmVzZXJ2aW5nIHBhcnNlciBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7UHJvZ3JhbVNvdXJjZX0gc291cmNlIC0gSW1wb3J0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYXRpdmVNb2R1bGUgLSBQYXJzZXItcHJvdmVkIG5hdGl2ZSBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIC0gUGFyc2VyLXByb3ZlZCBuYXRpdmUgc3ltYm9sLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBJZGVudGl0eSBldmlkZW5jZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zdGRsaWItZmFjYWRlcy5qc1wiKS5TdGRsaWJGYWNhZGVSZWNvcmR9IExvY2F0ZWQgZXhhY3QgbmF0aXZlIGZhY2FkZSByZXNvbHV0aW9uLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRmFjYWRlQXQoc291cmNlLCBuYXRpdmVNb2R1bGUsIHN5bWJvbCwgbG9jYXRpb24pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3RkbGliRmFjYWRlUmVnaXN0cnkucmVzb2x2ZUZhY2FkZShzb3VyY2UubGFuZ3VhZ2UsIG5hdGl2ZU1vZHVsZSwgc3ltYm9sKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbWFudGlmb2xkRGlhZ25vc3RpYykgZmFjYWRlRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIGVycm9yLmNvZGUsIGVycm9yLmRldGFpbCwgbG9jYXRpb24pXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIG9uZSBleGFjdCBuYW1lc3BhY2Utc3R5bGUgbmF0aXZlIG1vZHVsZSB3aGlsZSBwcmVzZXJ2aW5nIHBhcnNlciBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7UHJvZ3JhbVNvdXJjZX0gc291cmNlIC0gSW1wb3J0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYXRpdmVNb2R1bGUgLSBQYXJzZXItcHJvdmVkIG5hdGl2ZSBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIElkZW50aXR5IGV2aWRlbmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCIpLlN0ZGxpYkZhY2FkZVJlY29yZH0gTG9jYXRlZCBleGFjdCBuYXRpdmUgZmFjYWRlLW1vZHVsZSByZXNvbHV0aW9uLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRmFjYWRlTW9kdWxlQXQoc291cmNlLCBuYXRpdmVNb2R1bGUsIGxvY2F0aW9uKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN0ZGxpYkZhY2FkZVJlZ2lzdHJ5LnJlc29sdmVNb2R1bGUoc291cmNlLmxhbmd1YWdlLCBuYXRpdmVNb2R1bGUpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljKSBmYWNhZGVGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgZXJyb3IuY29kZSwgZXJyb3IuZGV0YWlsLCBsb2NhdGlvbilcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBjYWxsZXIgY2FwdHVyZSBvZiBjb21waWxlci1vd25lZCBtb2R1bGUvc291cmNlL25hdGl2ZSBuYW1lcyBhbmQgaW1wb3J0ZWQgYmluZGluZ3MuXG4gKiBAcGFyYW0ge1Byb2dyYW1Tb3VyY2VbXX0gYXBwbGljYXRpb25Tb3VyY2VzIC0gQ2FsbGVyLW93bmVkIHNvdXJjZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIFByb2dyYW1IZWFkZXI+fSBoZWFkZXJzIC0gQ2FsbGVyIHBhcnNlciBoZWFkZXJzLlxuICogQHBhcmFtIHtQcm9ncmFtU291cmNlW119IGZhY2FkZVNvdXJjZXMgLSBTZWxlY3RlZCBjb21waWxlci1vd25lZCBmYWNhZGUgc291cmNlcy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZhY2FkZUNvbGxpc2lvbnMoYXBwbGljYXRpb25Tb3VyY2VzLCBoZWFkZXJzLCBmYWNhZGVTb3VyY2VzKSB7XG4gIGNvbnN0IGZhY2FkZUlkcyA9IG5ldyBTZXQoZmFjYWRlU291cmNlcy5tYXAoKHtpZH0pID0+IGlkKSlcbiAgY29uc3QgZmFjYWRlRmlsZW5hbWVzID0gbmV3IFNldChmYWNhZGVTb3VyY2VzLm1hcCgoe2ZpbGVuYW1lfSkgPT4gZmlsZW5hbWUpKVxuICBjb25zdCBmYWNhZGVOYXRpdmVOYW1lcyA9IG5ldyBTZXQoZmFjYWRlU291cmNlcy5tYXAoKHNvdXJjZSkgPT4gaW5zcGVjdFNvdXJjZShzb3VyY2UpLm5hdGl2ZU5hbWUpLmZpbHRlcihCb29sZWFuKSlcblxuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBhcHBsaWNhdGlvblNvdXJjZXMpIHtcbiAgICBjb25zdCBoZWFkZXIgPSByZXF1aXJlZE1hcFZhbHVlKGhlYWRlcnMsIHNvdXJjZS5pZClcblxuICAgIGlmIChmYWNhZGVJZHMuaGFzKHNvdXJjZS5pZCkgfHwgZmFjYWRlRmlsZW5hbWVzLmhhcyhzb3VyY2UuZmlsZW5hbWUpKSB7XG4gICAgICBmYWNhZGVGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX05BTUVfQ09MTElTSU9OXCIsXG4gICAgICAgIGBDYWxsZXIgbW9kdWxlICcke3NvdXJjZS5pZH0nIGNvbGxpZGVzIHdpdGggYSBjb21waWxlci1vd25lZCBmYWNhZGUgbW9kdWxlIG9yIHNvdXJjZSBwYXRoLmAsIG1vZHVsZUxvY2F0aW9uKHNvdXJjZS5maWxlbmFtZSwgc291cmNlLnNvdXJjZSkpXG4gICAgfVxuICAgIGlmIChoZWFkZXIubmF0aXZlTmFtZSAmJiBmYWNhZGVOYXRpdmVOYW1lcy5oYXMoaGVhZGVyLm5hdGl2ZU5hbWUpKSB7XG4gICAgICBmYWNhZGVGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX1JFT1BFTkVEXCIsXG4gICAgICAgIGBDYWxsZXIgc291cmNlIHJlb3BlbnMgdGhlIGNvbXBpbGVyLW93bmVkIGZhY2FkZSBuYXRpdmUgaWRlbnRpdHkgJyR7aGVhZGVyLm5hdGl2ZU5hbWV9Jy5gLCBtb2R1bGVMb2NhdGlvbihzb3VyY2UuZmlsZW5hbWUsIHNvdXJjZS5zb3VyY2UpKVxuICAgIH1cbiAgICBjb25zdCBpbXBvcnRlZEJpbmRpbmdzID0gbmV3IFNldChoZWFkZXIuaW1wb3J0cy5maWx0ZXIoKHtmYWNhZGV9KSA9PiBmYWNhZGUgJiYgIWZhY2FkZS5wdWJsaWNEZWNsYXJhdGlvbnMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09IFwiXCIpKVxuICAgICAgLmZsYXRNYXAoKHJlcXVlc3QpID0+IHJlcXVlc3QubmFtZXNwYWNlICYmIHNvdXJjZS5sYW5ndWFnZSA9PSBcInBocFwiXG4gICAgICAgID8gKGhlYWRlci5iaW5kaW5ncyA/PyBbXSkuZmlsdGVyKCh7bmF0aXZlTmFtZX0pID0+IG5hdGl2ZU5hbWUuc3RhcnRzV2l0aChgJHtyZXF1ZXN0LnNwZWNpZmllcn1cXFxcYCkpLm1hcCgoe2xvY2FsTmFtZX0pID0+IGxvY2FsTmFtZSlcbiAgICAgICAgOiByZXF1ZXN0Lm5hbWVzcGFjZSA/IFtdIDogW3JlcXVlc3QubG9jYWxOYW1lXSkpXG4gICAgY29uc3Qgc2hhZG93ZWQgPSBoZWFkZXIuZXhwb3J0cy5maW5kKCh7bG9jYWxOYW1lfSkgPT4gaW1wb3J0ZWRCaW5kaW5ncy5oYXMobG9jYWxOYW1lKSlcblxuICAgIGlmIChzaGFkb3dlZCkgZmFjYWRlRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9TSEFET1dFRFwiLFxuICAgICAgYExvY2FsIGRlY2xhcmF0aW9uICcke3NoYWRvd2VkLmxvY2FsTmFtZX0nIHNoYWRvd3MgYSBwYXJzZXItcHJvdmVkIHN0ZGxpYiBmYWNhZGUgYmluZGluZy5gLCBzaGFkb3dlZC5sb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIHBhcnNlZCBjb21waWxlci1vd25lZCBmYWNhZGUgYWdhaW5zdCBpdHMgcmVnaXN0cnkgZGVjbGFyYXRpb24gYW5kIGNhbm9uaWNhbC1vbmx5IHJlcXVpcmVtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc3RkbGliLWZhY2FkZXMuanNcIikuU3RkbGliRmFjYWRlUmVjb3JkfSBmYWNhZGUgLSBTZWxlY3RlZCBmYWNhZGUgcmVjb3JkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGV9IG1vZHVsZSAtIFBhcnNlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXJzZWRGYWNhZGUoZmFjYWRlLCBtb2R1bGUpIHtcbiAgY29uc3QgZXhwb3J0ZWQgPSBuZXcgTWFwKG1vZHVsZS5leHBvcnRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0uZXhwb3J0ZWROYW1lLCBpdGVtXSkpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBmYWNhZGUucHVibGljRGVjbGFyYXRpb25zKSB7XG4gICAgaWYgKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJjbGFzc1wiKSB7XG4gICAgICB2YWxpZGF0ZVBhcnNlZEZhY2FkZUNsYXNzKGZhY2FkZSwgbW9kdWxlLCBkZWNsYXJhdGlvbiwgZXhwb3J0ZWQuZ2V0KGRlY2xhcmF0aW9uLm5hbWUpKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXhwb3J0ZWREZWNsYXJhdGlvbiA9IGV4cG9ydGVkLmdldChkZWNsYXJhdGlvbi5uYW1lKVxuICAgIGNvbnN0IHBhcnNlZCA9IGV4cG9ydGVkRGVjbGFyYXRpb24gPyBtb2R1bGUuZnVuY3Rpb25zLmZpbmQoKHtpZH0pID0+IGlkID09IGV4cG9ydGVkRGVjbGFyYXRpb24uZGVjbGFyYXRpb25JZCkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBzaWduYXR1cmVNYXRjaGVzID0gcGFyc2VkICYmIHBhcnNlZC5wYXJhbWV0ZXJzLmxlbmd0aCA9PSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuICAgICAgcGFyc2VkLnBhcmFtZXRlcnMuZXZlcnkoKHBhcmFtZXRlciwgaW5kZXgpID0+IHBhcmFtZXRlci5uYW1lID09IGRlY2xhcmF0aW9uLnBhcmFtZXRlcnNbaW5kZXhdLm5hbWUgJiZcbiAgICAgICAgc2VtYW50aWNUeXBlTmFtZShwYXJhbWV0ZXIudHlwZSkgPT0gZGVjbGFyYXRpb24ucGFyYW1ldGVyc1tpbmRleF0udHlwZSkgJiZcbiAgICAgIHNlbWFudGljVHlwZU5hbWUocGFyc2VkLnJldHVyblR5cGUpID09IGRlY2xhcmF0aW9uLnJldHVyblR5cGVcblxuICAgIGlmICghc2lnbmF0dXJlTWF0Y2hlcykgZmFjYWRlRmFpbHVyZShmYWNhZGUubGFuZ3VhZ2UsIFwiU1RETElCX0ZBQ0FERV9ERUNMQVJBVElPTl9NSVNNQVRDSFwiLFxuICAgICAgYEZhY2FkZSAnJHtmYWNhZGUuaWRlbnRpdHl9JyBleGVjdXRhYmxlIHNvdXJjZSBkb2VzIG5vdCBtYXRjaCBwdWJsaWMgZGVjbGFyYXRpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nLmAsIHBhcnNlZD8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGRlcGVuZGVuY3lJZHMgPSBuZXcgU2V0KGZhY2FkZS5kZXBlbmRlbmNpZXMubWFwKChkZXBlbmRlbmN5KSA9PlxuICAgIHN0ZGxpYkZhY2FkZVJlZ2lzdHJ5LnJlc29sdmVJZGVudGl0eShkZXBlbmRlbmN5LmlkZW50aXR5LCBmYWNhZGUubGFuZ3VhZ2UsIGRlcGVuZGVuY3kucmFuZ2UpLnNvdXJjZS5pZCkpXG5cbiAgaWYgKG1vZHVsZS5pbXBvcnRzLnNvbWUoKHttb2R1bGVJZH0pID0+ICFkZXBlbmRlbmN5SWRzLmhhcyhtb2R1bGVJZCkpIHx8XG4gICAgWy4uLmRlcGVuZGVuY3lJZHNdLnNvbWUoKG1vZHVsZUlkKSA9PiAhbW9kdWxlLmltcG9ydHMuc29tZSgoaW1wb3J0ZWQpID0+IGltcG9ydGVkLm1vZHVsZUlkID09IG1vZHVsZUlkKSkpIHtcbiAgICBmYWNhZGVGYWlsdXJlKGZhY2FkZS5sYW5ndWFnZSwgXCJTVERMSUJfRkFDQURFX0RFQ0xBUkFUSU9OX01JU01BVENIXCIsXG4gICAgICBgRmFjYWRlICcke2ZhY2FkZS5pZGVudGl0eX0nIGV4ZWN1dGFibGUgaW1wb3J0cyBkbyBub3QgbWF0Y2ggaXRzIGRlY2xhcmVkIGRlcGVuZGVuY2llcy5gLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgY29uc3QgYWxsb3dlZE9wZXJhdGlvbnMgPSBuZXcgU2V0KGZhY2FkZS5yZXF1aXJlbWVudHMuZmxhdE1hcCgoe29wZXJhdGlvbnN9KSA9PiBvcGVyYXRpb25zKSlcbiAgY29uc3Qgb3BlcmF0aW9uTmFtZXMgPSBuZXcgTWFwKChtb2R1bGUuY2FwYWJpbGl0aWVzID8/IFtdKS5mbGF0TWFwKCh7b3BlcmF0aW9uc30pID0+IG9wZXJhdGlvbnMubWFwKCh7aWQsIG5hbWV9KSA9PiBbaWQsIG5hbWVdKSkpXG4gIGNvbnN0IHVzZWRPcGVyYXRpb25zID0gY29sbGVjdEVmZmVjdE9wZXJhdGlvbnMobW9kdWxlLCBvcGVyYXRpb25OYW1lcylcblxuICBpZiAoWy4uLnVzZWRPcGVyYXRpb25zXS5zb21lKChvcGVyYXRpb24pID0+ICFhbGxvd2VkT3BlcmF0aW9ucy5oYXMob3BlcmF0aW9uKSkgfHxcbiAgICBbLi4uYWxsb3dlZE9wZXJhdGlvbnNdLnNvbWUoKG9wZXJhdGlvbikgPT4gIXVzZWRPcGVyYXRpb25zLmhhcyhvcGVyYXRpb24pKSkge1xuICAgIGZhY2FkZUZhaWx1cmUoZmFjYWRlLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfQVVUSE9SSVRZX0ZPUkdFRFwiLFxuICAgICAgYEZhY2FkZSAnJHtmYWNhZGUuaWRlbnRpdHl9JyBjYW5vbmljYWwgY2FsbHMgZG8gbm90IG1hdGNoIGl0cyBkZWNsYXJlZCByZXF1aXJlbWVudHMuYCwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgb25lIGV4ZWN1dGFibGUgY29tcGlsZXItb3duZWQgZmFjYWRlIGNsYXNzIGFnYWluc3QgaXRzIGNsb3NlZCBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zdGRsaWItZmFjYWRlcy5qc1wiKS5TdGRsaWJGYWNhZGVSZWNvcmR9IGZhY2FkZSAtIE93bmluZyBmYWNhZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZX0gbW9kdWxlIC0gUGFyc2VkIGZhY2FkZSBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3N0ZGxpYi1mYWNhZGVzLmpzXCIpLlN0ZGxpYkZhY2FkZUNsYXNzRGVjbGFyYXRpb259IGRlc2NyaXB0b3IgLSBSZWdpc3RyeSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0V4cG9ydCB8IHVuZGVmaW5lZH0gZXhwb3J0ZWQgLSBNYXRjaGluZyBleHBvcnQgZXZpZGVuY2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXJzZWRGYWNhZGVDbGFzcyhmYWNhZGUsIG1vZHVsZSwgZGVzY3JpcHRvciwgZXhwb3J0ZWQpIHtcbiAgY29uc3QgcGFyc2VkID0gZXhwb3J0ZWQ/LnN5bWJvbEtpbmQgPT0gXCJjbGFzc1wiXG4gICAgPyBtb2R1bGUuY2xhc3Nlcz8uZmluZCgoe2lkfSkgPT4gaWQgPT0gZXhwb3J0ZWQuZGVjbGFyYXRpb25JZCkgOiB1bmRlZmluZWRcbiAgY29uc3QgZmFpbHVyZU5hbWVzID0gbmV3IE1hcCgobW9kdWxlLmNhcGFiaWxpdGllcyA/PyBbXSkuZmxhdE1hcCgoe2ZhaWx1cmVzfSkgPT4gZmFpbHVyZXMubWFwKCh7aWQsIG5hbWV9KSA9PiBbaWQsIG5hbWVdKSkpXG4gIGNvbnN0IGNvbnN0cnVjdG9yRmFpbHVyZXMgPSBwYXJzZWQ/LmNvbnN0cnVjdG9yLmZhaWx1cmVJZHM/Lm1hcCgoaWQpID0+IGZhaWx1cmVOYW1lcy5nZXQoaWQpKSA/PyBbXVxuICBjb25zdCBjb25zdHJ1Y3Rvck1hdGNoZXMgPSBwYXJzZWQ/Lm5hbWUgPT0gZGVzY3JpcHRvci5uYW1lICYmIHBhcnNlZC5vd25lcnNoaXA/LmtpbmQgPT0gXCJvd25lZFJlc291cmNlXCIgJiZcbiAgICBwYXJzZWQuY29uc3RydWN0b3IuZWZmZWN0cz8uam9pbihcIixcIikgPT0gZGVzY3JpcHRvci5jb25zdHJ1Y3Rvci5lZmZlY3RzLmpvaW4oXCIsXCIpICYmXG4gICAgY29uc3RydWN0b3JGYWlsdXJlcy5qb2luKFwiLFwiKSA9PSBkZXNjcmlwdG9yLmNvbnN0cnVjdG9yLmZhaWx1cmVzLmpvaW4oXCIsXCIpICYmXG4gICAgcGFyc2VkLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnMubGVuZ3RoID09IGRlc2NyaXB0b3IuY29uc3RydWN0b3IucGFyYW1ldGVycy5sZW5ndGggJiZcbiAgICBwYXJzZWQuY29uc3RydWN0b3IucGFyYW1ldGVycy5ldmVyeSgocGFyYW1ldGVyLCBpbmRleCkgPT4gcGFyYW1ldGVyLm5hbWUgPT0gZGVzY3JpcHRvci5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzW2luZGV4XS5uYW1lICYmXG4gICAgICBzZW1hbnRpY1R5cGVOYW1lKHBhcmFtZXRlci50eXBlKSA9PSBkZXNjcmlwdG9yLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnNbaW5kZXhdLnR5cGUpXG4gIGNvbnN0IG1ldGhvZHNNYXRjaCA9IHBhcnNlZD8ubWV0aG9kcy5sZW5ndGggPT0gZGVzY3JpcHRvci5tZXRob2RzLmxlbmd0aCAmJiBkZXNjcmlwdG9yLm1ldGhvZHMuZXZlcnkoKGV4cGVjdGVkLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IHBhcnNlZD8ubWV0aG9kc1tpbmRleF1cbiAgICBjb25zdCBhY3R1YWxGYWlsdXJlcyA9IG1ldGhvZD8uZmFpbHVyZUlkcz8ubWFwKChpZCkgPT4gZmFpbHVyZU5hbWVzLmdldChpZCkpID8/IFtdXG4gICAgY29uc3Qgb3BlcmF0aW9uID0gbWV0aG9kPy5ib2R5LnN0YXRlbWVudHMuZmxhdE1hcCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIlxuICAgICAgICA/IHN0YXRlbWVudC5leHByZXNzaW9uIDogc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGV4cHJlc3Npb24/LmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiID8gW2V4cHJlc3Npb25dIDogW11cbiAgICB9KVswXVxuICAgIGNvbnN0IGZsb3cgPSBvcGVyYXRpb24/LnJlc29sdXRpb24ucmVzb3VyY2VGbG93XG4gICAgY29uc3QgdGVybWluYWxGYWlsdXJlSWQgPSBmbG93Py5raW5kID09IFwiYm9ycm93XCIgfHwgZmxvdz8ua2luZCA9PSBcImNsb3NlXCIgPyBmbG93LnRlcm1pbmFsRmFpbHVyZUlkIDogdW5kZWZpbmVkXG5cbiAgICBpZiAodGVybWluYWxGYWlsdXJlSWQpIGFjdHVhbEZhaWx1cmVzLnB1c2goZmFpbHVyZU5hbWVzLmdldCh0ZXJtaW5hbEZhaWx1cmVJZCkpXG4gICAgcmV0dXJuIG1ldGhvZD8ubmFtZSA9PSBleHBlY3RlZC5uYW1lICYmIG1ldGhvZC5lZmZlY3RzPy5qb2luKFwiLFwiKSA9PSBleHBlY3RlZC5lZmZlY3RzLmpvaW4oXCIsXCIpICYmXG4gICAgICBhY3R1YWxGYWlsdXJlcy5qb2luKFwiLFwiKSA9PSBleHBlY3RlZC5mYWlsdXJlcy5qb2luKFwiLFwiKSAmJiBtZXRob2QucGFyYW1ldGVycy5sZW5ndGggPT0gZXhwZWN0ZWQucGFyYW1ldGVycy5sZW5ndGggJiZcbiAgICAgIG1ldGhvZC5wYXJhbWV0ZXJzLmV2ZXJ5KChwYXJhbWV0ZXIsIHBhcmFtZXRlckluZGV4KSA9PlxuICAgICAgICBwYXJhbWV0ZXIubmFtZSA9PSBleHBlY3RlZC5wYXJhbWV0ZXJzW3BhcmFtZXRlckluZGV4XS5uYW1lICYmXG4gICAgICAgIHNlbWFudGljVHlwZU5hbWUocGFyYW1ldGVyLnR5cGUpID09IGV4cGVjdGVkLnBhcmFtZXRlcnNbcGFyYW1ldGVySW5kZXhdLnR5cGUpICYmXG4gICAgICBzZW1hbnRpY1R5cGVOYW1lKG1ldGhvZC5yZXR1cm5UeXBlKSA9PSBleHBlY3RlZC5yZXR1cm5UeXBlXG4gIH0pXG5cbiAgaWYgKCFjb25zdHJ1Y3Rvck1hdGNoZXMgfHwgIW1ldGhvZHNNYXRjaCkge1xuICAgIGZhY2FkZUZhaWx1cmUoZmFjYWRlLmxhbmd1YWdlLCBcIlNURExJQl9GQUNBREVfREVDTEFSQVRJT05fTUlTTUFUQ0hcIixcbiAgICAgIGBGYWNhZGUgJyR7ZmFjYWRlLmlkZW50aXR5fScgZXhlY3V0YWJsZSBzb3VyY2UgZG9lcyBub3QgbWF0Y2ggcHVibGljIGNsYXNzICcke2Rlc2NyaXB0b3IubmFtZX0nLmAsIHBhcnNlZD8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdHMgY2Fub25pY2FsIG9wZXJhdGlvbiBuYW1lcyByZWFjaGVkIGluIG9uZSBmYWNhZGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGV9IG1vZHVsZSAtIFBhcnNlZCBmYWNhZGUgbW9kdWxlLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSBvcGVyYXRpb25OYW1lcyAtIENhbm9uaWNhbCBuYW1lcyBieSBvcGVyYXRpb24gaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7U2V0PHN0cmluZz59IFVzZWQgb3BlcmF0aW9uIG5hbWVzLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0RWZmZWN0T3BlcmF0aW9ucyhtb2R1bGUsIG9wZXJhdGlvbk5hbWVzKSB7XG4gIGNvbnN0IHVzZWQgPSBuZXcgU2V0KClcbiAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KClcblxuICAvKipcbiAgICogVmlzaXRzIG9uZSBzZW1hbnRpYyBzdWJ0cmVlIHdpdGhvdXQgZm9sbG93aW5nIGF1dGhvcml0eSBvciBwcm92ZW5hbmNlIGdyYXBocy5cbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFNlbWFudGljIHN1YnRyZWUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuXG4gICAgc2Vlbi5hZGQodmFsdWUpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBSZWZsZWN0LmdldCh2YWx1ZSwgXCJraW5kXCIpID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIikge1xuICAgICAgY29uc3QgbmFtZSA9IG9wZXJhdGlvbk5hbWVzLmdldChSZWZsZWN0LmdldCh2YWx1ZSwgXCJvcGVyYXRpb25cIikpXG5cbiAgICAgIGlmIChuYW1lKSB1c2VkLmFkZChuYW1lKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIGlmIChrZXkgIT0gXCJjYXBhYmlsaXRpZXNcIiAmJiBrZXkgIT0gXCJsb2NhdGlvblwiICYmIGtleSAhPSBcInByb3ZlbmFuY2VcIiAmJiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpIHZpc2l0KGNoaWxkKVxuICAgIH1cbiAgfVxuICB2aXNpdChtb2R1bGUpXG4gIHJldHVybiB1c2VkXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHBhcnNlZCBzZW1hbnRpYyB0eXBlIHRvIHRoZSBmYWNhZGUgZGVjbGFyYXRpb24gdm9jYWJ1bGFyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBQYXJzZWQgdHlwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IENsb3NlZCBjYW5vbmljYWwgcHVibGljIHR5cGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gc2VtYW50aWNUeXBlTmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIpIHJldHVybiB0eXBlLm5hbWVcbiAgcmV0dXJuIHR5cGUua2luZCA9PSBcIk9wdGlvbmFsVHlwZVwiICYmIHR5cGUudmFsdWVUeXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCJcbiAgICA/IGBvcHRpb25hbDoke3R5cGUudmFsdWVUeXBlLm5hbWV9YCA6IFwidW5zdXBwb3J0ZWRcIlxufVxuXG4vKipcbiAqIFRocm93cyBvbmUgc3RhYmxlIGxvY2F0ZWQgZmFjYWRlIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSAtIFN0YWJsZSBkaWFnbm9zdGljIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIERpYWdub3N0aWMgZGV0YWlsLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBQYXJzZXItb3duZWQgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGZhY2FkZUZhaWx1cmUobGFuZ3VhZ2UsIGNvZGUsIG1lc3NhZ2UsIGxvY2F0aW9uKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZX0pXG59XG5cbi8qKlxuICogUmVqZWN0cyBzb3VyY2UtcHJvZmlsZSBpZGVudGl0aWVzIHdob3NlIGxvb2t1cCBvciByZW9wZW5pbmcgd291bGQgZGVwZW5kIG9uIGNhbGxlciBvcmRlci5cbiAqIEBwYXJhbSB7UHJvZ3JhbVNvdXJjZVtdfSBzb3VyY2VzIC0gQ29tcGxldGUgdmFsaWRhdGVkIHNvdXJjZSBzZXQuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIFByb2dyYW1IZWFkZXI+fSBoZWFkZXJzIC0gUGFyc2VyLW93bmVkIG1vZHVsZSBoZWFkZXJzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTmF0aXZlTW9kdWxlSWRlbnRpdGllcyhzb3VyY2VzLCBoZWFkZXJzKSB7XG4gIGlmICghc291cmNlcy5ldmVyeSgoe2xhbmd1YWdlfSkgPT4gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpICYmICFzb3VyY2VzLmV2ZXJ5KCh7bGFuZ3VhZ2V9KSA9PiBsYW5ndWFnZSA9PSBcInJ1YnlcIikpIHJldHVyblxuICBjb25zdCBvcmRlcmVkID0gWy4uLnNvdXJjZXNdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmZpbGVuYW1lLmxvY2FsZUNvbXBhcmUocmlnaHQuZmlsZW5hbWUsIFwiZW4tVVNcIikgfHxcbiAgICBsZWZ0LmlkLmxvY2FsZUNvbXBhcmUocmlnaHQuaWQsIFwiZW4tVVNcIikpXG4gIGNvbnN0IG93bmVycyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3Qgc291cmNlIG9mIG9yZGVyZWQpIHtcbiAgICBjb25zdCBuYXRpdmVOYW1lID0gcmVxdWlyZWRNYXBWYWx1ZShoZWFkZXJzLCBzb3VyY2UuaWQpLm5hdGl2ZU5hbWVcblxuICAgIGlmICghbmF0aXZlTmFtZSkgY29udGludWVcbiAgICBjb25zdCBlYXJsaWVyID0gb3duZXJzLmdldChuYXRpdmVOYW1lKVxuXG4gICAgaWYgKGVhcmxpZXIpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc291cmNlLmxhbmd1YWdlID09IFwiamF2YVwiID8gXCJKYXZhXCIgOiBcIlJ1YnlcIlxuXG4gICAgICBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIkRVUExJQ0FURV9NT0RVTEVcIixcbiAgICAgICAgYER1cGxpY2F0ZSAke2xhYmVsfSBuYXRpdmUgbW9kdWxlIGlkZW50aXR5ICcke25hdGl2ZU5hbWV9JyBpbiAnJHtlYXJsaWVyLmZpbGVuYW1lfScgYW5kICcke3NvdXJjZS5maWxlbmFtZX0nLmAsXG4gICAgICAgIG1vZHVsZUxvY2F0aW9uKHNvdXJjZS5maWxlbmFtZSwgc291cmNlLnNvdXJjZSkpXG4gICAgfVxuICAgIG93bmVycy5zZXQobmF0aXZlTmFtZSwgc291cmNlKVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBzbmFwc2hvdHMgb25lIGNhbGxlci1zdXBwbGllZCBwcm9ncmFtIHNvdXJjZSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBDYW5kaWRhdGUgc291cmNlIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBTb3VyY2UgaW5kZXguXG4gKiBAcmV0dXJucyB7UHJvZ3JhbVNvdXJjZX0gVmFsaWRhdGVkIHNvdXJjZSBkZXNjcmlwdG9yLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVNvdXJjZShjYW5kaWRhdGUsIGluZGV4KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUpKSB7XG4gICAgcmV0dXJuIGludmFsaWRQcm9ncmFtKGBQcm9ncmFtIHNvdXJjZSAke2luZGV4fSByZXF1aXJlcyBhIHN0YWJsZSBtb2R1bGUgSUQsIHNhZmUgZmlsZW5hbWUsIGxhbmd1YWdlLCBhbmQgc291cmNlIHRleHQuYClcbiAgfVxuICBpZiAoIWlzUGxhaW5PYmplY3QoY2FuZGlkYXRlKSB8fCB0eXBlb2YgY2FuZGlkYXRlLmlkICE9IFwic3RyaW5nXCIgfHwgIW1vZHVsZUlkUGF0dGVybi50ZXN0KGNhbmRpZGF0ZS5pZCkgfHxcbiAgICB0eXBlb2YgY2FuZGlkYXRlLmZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHwgIWlzU2FmZVNvdXJjZVBhdGgoY2FuZGlkYXRlLmZpbGVuYW1lKSB8fFxuICAgIHR5cGVvZiBjYW5kaWRhdGUuc291cmNlICE9IFwic3RyaW5nXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5sYW5ndWFnZSAhPSBcInN0cmluZ1wiKSB7XG4gICAgaW52YWxpZFByb2dyYW0oYFByb2dyYW0gc291cmNlICR7aW5kZXh9IHJlcXVpcmVzIGEgc3RhYmxlIG1vZHVsZSBJRCwgc2FmZSBmaWxlbmFtZSwgbGFuZ3VhZ2UsIGFuZCBzb3VyY2UgdGV4dC5gKVxuICB9XG4gIGxhbmd1YWdlUmVnaXN0cnkucmVjb3JkKGNhbmRpZGF0ZS5sYW5ndWFnZSlcbiAgaWYgKCFwcm9ncmFtTGFuZ3VhZ2VzLmhhcyhjYW5kaWRhdGUubGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZFJvbGUoY2FuZGlkYXRlLmxhbmd1YWdlLCBcIm11bHRpLWZpbGUgZnJvbnRlbmRcIilcblxuICByZXR1cm4gLyoqIEB0eXBlIHtQcm9ncmFtU291cmNlfSAqLyAoe1xuICAgIGZpbGVuYW1lOiBjYW5kaWRhdGUuZmlsZW5hbWUsXG4gICAgaWQ6IGNhbmRpZGF0ZS5pZCxcbiAgICBsYW5ndWFnZTogY2FuZGlkYXRlLmxhbmd1YWdlLFxuICAgIG93bmVyc2hpcDogXCJhcHBsaWNhdGlvblwiLFxuICAgIHNvdXJjZTogY2FuZGlkYXRlLnNvdXJjZVxuICB9KVxufVxuXG4vKipcbiAqIERpc3BhdGNoZXMgcGFyc2VyLW93bmVkIG1vZHVsZSBoZWFkZXIgaW5zcGVjdGlvbiBmb3Igb25lIGNvaG9ydCBzb3VyY2UuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBsYW5ndWFnZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZSwgc291cmNlOiBzdHJpbmd9fSBzb3VyY2UgLSBWYWxpZGF0ZWQgc291cmNlLlxuICogQHJldHVybnMge1Byb2dyYW1IZWFkZXJ9IFBhcnNlci1vd25lZCBpbXBvcnQvZXhwb3J0IGhlYWRlci5cbiAqL1xuZnVuY3Rpb24gaW5zcGVjdFNvdXJjZShzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZS5sYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBzb3VyY2UubGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICByZXR1cm4gaW5zcGVjdEphdmFTY3JpcHRUeXBlU2NyaXB0TW9kdWxlKC8qKiBAdHlwZSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGxhbmd1YWdlOiBcImphdmFzY3JpcHRcIiB8IFwidHlwZXNjcmlwdFwiLCBzb3VyY2U6IHN0cmluZ319ICovIChzb3VyY2UpKVxuICB9XG4gIGlmIChzb3VyY2UubGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHtcbiAgICByZXR1cm4gaW5zcGVjdFJ1YnlNb2R1bGUoLyoqIEB0eXBlIHt7ZmlsZW5hbWU6IHN0cmluZywgbGFuZ3VhZ2U6IFwicnVieVwiLCBzb3VyY2U6IHN0cmluZ319ICovIChzb3VyY2UpKVxuICB9XG4gIGlmIChzb3VyY2UubGFuZ3VhZ2UgPT0gXCJwaHBcIikge1xuICAgIHJldHVybiBpbnNwZWN0UGhwTW9kdWxlKC8qKiBAdHlwZSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGxhbmd1YWdlOiBcInBocFwiLCBzb3VyY2U6IHN0cmluZ319ICovIChzb3VyY2UpKVxuICB9XG4gIGlmIChzb3VyY2UubGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICByZXR1cm4gaW5zcGVjdEphdmFNb2R1bGUoLyoqIEB0eXBlIHt7ZmlsZW5hbWU6IHN0cmluZywgbGFuZ3VhZ2U6IFwiamF2YVwiLCBzb3VyY2U6IHN0cmluZ319ICovIChzb3VyY2UpKVxuICB9XG5cbiAgcmV0dXJuIHVuc3VwcG9ydGVkUm9sZShzb3VyY2UubGFuZ3VhZ2UsIFwibXVsdGktZmlsZSBmcm9udGVuZFwiKVxufVxuXG4vKipcbiAqIFJlc29sdmVzIG9ubHkgYW4gZXhwbGljaXQgcmVsYXRpdmUgRVNNIHNwZWNpZmllciBhZ2FpbnN0IGNhbGxlci1zdXBwbGllZCBmaWxlbmFtZXMuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBsYW5ndWFnZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX19IHNvdXJjZSAtIEltcG9ydGluZyBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY2lmaWVyIC0gUGFyc2VyLW93bmVkIHJlbGF0aXZlIHNwZWNpZmllci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IGxvY2F0aW9uIC0gU3BlY2lmaWVyIGxvY2F0aW9uLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nLCBQcm9ncmFtU291cmNlPn0gc291cmNlcyAtIFNvdXJjZXMgYnkgZXhhY3QgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIFByb2dyYW1IZWFkZXI+fSBoZWFkZXJzIC0gUGFyc2VyLW93bmVkIG1vZHVsZSBoZWFkZXJzLlxuICogQHJldHVybnMge3N0cmluZ30gUmVzb2x2ZWQgbW9kdWxlIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiByZXNvbHZlSW1wb3J0TW9kdWxlKHNvdXJjZSwgc3BlY2lmaWVyLCBsb2NhdGlvbiwgc291cmNlcywgaGVhZGVycykge1xuICBpZiAoc291cmNlLmxhbmd1YWdlID09IFwiamF2YVwiKSB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IFsuLi5oZWFkZXJzLmVudHJpZXMoKV0uZmluZCgoWywgaGVhZGVyXSkgPT4gaGVhZGVyLm5hdGl2ZU5hbWUgPT0gc3BlY2lmaWVyKVxuXG4gICAgaWYgKCFtYXRjaGVkKSBzZW1hbnRpY0ZhaWx1cmUoc291cmNlLmxhbmd1YWdlLCBcIlVOUkVTT0xWRURfTU9EVUxFXCIsIGBJbXBvcnQgJyR7c3BlY2lmaWVyfScgZG9lcyBub3QgaWRlbnRpZnkgYSBzdXBwbGllZCBzb3VyY2UuYCwgbG9jYXRpb24pXG5cbiAgICByZXR1cm4gbWF0Y2hlZFswXVxuICB9XG4gIGNvbnN0IGRpcmVjdG9yeSA9IHNvdXJjZS5maWxlbmFtZS5zcGxpdChcIi9cIikuc2xpY2UoMCwgLTEpXG4gIGNvbnN0IHBhcnRzID0gWy4uLmRpcmVjdG9yeV1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3BlY2lmaWVyLnNwbGl0KFwiL1wiKSkge1xuICAgIGlmIChwYXJ0ID09IFwiXCIgfHwgcGFydCA9PSBcIi5cIikgY29udGludWVcbiAgICBpZiAocGFydCA9PSBcIi4uXCIpIHtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMCkgc2VtYW50aWNGYWlsdXJlKHNvdXJjZS5sYW5ndWFnZSwgXCJVTlNBRkVfTU9EVUxFX1BBVEhcIiwgYEltcG9ydCAnJHtzcGVjaWZpZXJ9JyBlc2NhcGVzIHRoZSBzdXBwbGllZCBzb3VyY2Ugcm9vdC5gLCBsb2NhdGlvbilcbiAgICAgIHBhcnRzLnBvcCgpXG4gICAgfSBlbHNlIHBhcnRzLnB1c2gocGFydClcbiAgfVxuICBsZXQgZXhhY3QgPSBwYXJ0cy5qb2luKFwiL1wiKVxuXG4gIGlmIChzb3VyY2UubGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgIWV4YWN0LmVuZHNXaXRoKFwiLnJiXCIpKSBleGFjdCArPSBcIi5yYlwiXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBbZXhhY3RdXG5cbiAgaWYgKHNvdXJjZS5sYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBleGFjdC5lbmRzV2l0aChcIi5qc1wiKSkgY2FuZGlkYXRlcy5wdXNoKGAke2V4YWN0LnNsaWNlKDAsIC0zKX0udHNgKVxuICBjb25zdCBtYXRjaGVkID0gY2FuZGlkYXRlcy5mbGF0TWFwKChmaWxlbmFtZSkgPT4gc291cmNlcy5oYXMoZmlsZW5hbWUpID8gW3NvdXJjZXMuZ2V0KGZpbGVuYW1lKV0gOiBbXSlbMF1cblxuICBpZiAoIW1hdGNoZWQpIHNlbWFudGljRmFpbHVyZShzb3VyY2UubGFuZ3VhZ2UsIFwiVU5SRVNPTFZFRF9NT0RVTEVcIiwgYEltcG9ydCAnJHtzcGVjaWZpZXJ9JyBkb2VzIG5vdCBpZGVudGlmeSBhIHN1cHBsaWVkIHNvdXJjZS5gLCBsb2NhdGlvbilcblxuICByZXR1cm4gbWF0Y2hlZC5pZFxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc291cmNlLXByb2ZpbGUgc3BlbGxpbmcgdXNlZCB0byByZXNvbHZlIG9uZSBuYW1lc3BhY2UtcXVhbGlmaWVkIGltcG9ydC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBJbXBvcnRpbmcgc291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IG5hdGl2ZU5hbWUgLSBEZXBlbmRlbmN5IG5hbWVzcGFjZS9tb2R1bGUgbmFtZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNFeHBvcnR9IGV4cG9ydGVkIC0gSW1wb3J0ZWQgZXhwb3J0LlxuICogQHJldHVybnMge3N0cmluZ30gU291cmNlLXByb2ZpbGUgYmluZGluZyBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gcXVhbGlmaWVkSW1wb3J0TmFtZShsYW5ndWFnZSwgbmF0aXZlTmFtZSwgZXhwb3J0ZWQpIHtcbiAgaWYgKCFuYXRpdmVOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJOYW1lc3BhY2UgaW1wb3J0IGRlcGVuZGVuY3kgaGFzIG5vIHBhcnNlci1vd25lZCBuYXRpdmUgbmFtZS5cIilcbiAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSByZXR1cm4gYCR7bmF0aXZlTmFtZX0ke2V4cG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJmdW5jdGlvblwiID8gXCIuXCIgOiBcIjo6XCJ9JHtleHBvcnRlZC5leHBvcnRlZE5hbWV9YFxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBuYXRpdmVOYW1lLnNwbGl0KFwiLlwiKS5hdCgtMSlcblxuICAgIGlmICghY2xhc3NOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJKYXZhIGltcG9ydCBkZXBlbmRlbmN5IGhhcyBubyBjbGFzcyBuYW1lLlwiKVxuXG4gICAgcmV0dXJuIGV4cG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJmdW5jdGlvblwiID8gYCR7Y2xhc3NOYW1lfS4ke2V4cG9ydGVkLmV4cG9ydGVkTmFtZX1gIDogY2xhc3NOYW1lXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG5hbWVzcGFjZSBpbXBvcnQgcHJvZmlsZSAnJHtsYW5ndWFnZX0nLmApXG59XG5cbi8qKlxuICogU29ydHMgdGhlIGV4cGxpY2l0IG1vZHVsZSBncmFwaCBpbiBzdGFibGUgZGVwZW5kZW5jeS1maXJzdCBvcmRlci5cbiAqIEBwYXJhbSB7UHJvZ3JhbVNvdXJjZVtdfSBzb3VyY2VzIC0gVmFsaWRhdGVkIHNvdXJjZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIHtzb3VyY2U6IFByb2dyYW1Tb3VyY2UsIHJlcXVlc3RzOiB7bW9kdWxlSWQ6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufVtdfT59IGdyYXBoIC0gUmVzb2x2ZWQgZ3JhcGguXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IERlcGVuZGVuY3ktZmlyc3QgbW9kdWxlIGlkZW50aXRpZXMuXG4gKi9cbmZ1bmN0aW9uIHRvcG9sb2dpY2FsT3JkZXIoc291cmNlcywgZ3JhcGgpIHtcbiAgY29uc3QgY29tcGxldGUgPSBuZXcgU2V0KClcbiAgY29uc3QgYWN0aXZlID0gbmV3IFNldCgpXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgLyoqXG4gICAqIFZpc2l0cyBvbmUgbW9kdWxlIGFuZCBpdHMgZGVwZW5kZW5jaWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBNb2R1bGUgaWRlbnRpdHkuXG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChpZCkge1xuICAgIGlmIChjb21wbGV0ZS5oYXMoaWQpKSByZXR1cm5cbiAgICBpZiAoYWN0aXZlLmhhcyhpZCkpIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSByZXF1aXJlZE1hcFZhbHVlKGdyYXBoLCBpZCkucmVxdWVzdHNbMF1cblxuICAgICAgc2VtYW50aWNGYWlsdXJlKHJlcXVpcmVkTWFwVmFsdWUoZ3JhcGgsIGlkKS5zb3VyY2UubGFuZ3VhZ2UsIFwiSU1QT1JUX0NZQ0xFXCIsIGBJbXBvcnQgY3ljbGUgaW5jbHVkZXMgbW9kdWxlICcke2lkfScuYCwgZWRnZT8ubG9jYXRpb24pXG4gICAgfVxuICAgIGFjdGl2ZS5hZGQoaWQpXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVpcmVkTWFwVmFsdWUoZ3JhcGgsIGlkKS5yZXF1ZXN0cykgdmlzaXQocmVxdWVzdC5tb2R1bGVJZClcbiAgICBhY3RpdmUuZGVsZXRlKGlkKVxuICAgIGNvbXBsZXRlLmFkZChpZClcbiAgICByZXN1bHQucHVzaChpZClcbiAgfVxuXG4gIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHZpc2l0KHNvdXJjZS5pZClcblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogTG9va3MgdXAgb25lIGFscmVhZHktcmVzb2x2ZWQgZXhwb3J0ZWQgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZX0gbW9kdWxlIC0gRXhwb3J0aW5nIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNFeHBvcnR9IGV4cG9ydGVkIC0gUmVzb2x2ZWQgZXhwb3J0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9ufSBEZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZGVjbGFyYXRpb25Gb3IobW9kdWxlLCBleHBvcnRlZCkge1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBleHBvcnRlZC5zeW1ib2xLaW5kID09IFwiZnVuY3Rpb25cIiA/IG1vZHVsZS5mdW5jdGlvbnMgOlxuICAgIGV4cG9ydGVkLnN5bWJvbEtpbmQgPT0gXCJyZWNvcmRcIiA/IG1vZHVsZS5yZWNvcmRzID8/IFtdIDogZXhwb3J0ZWQuc3ltYm9sS2luZCA9PSBcImNsYXNzXCIgPyBtb2R1bGUuY2xhc3NlcyA/PyBbXSA6IG1vZHVsZS5lcnJvcnMgPz8gW11cbiAgY29uc3QgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbnMuZmluZCgoe2lkfSkgPT4gaWQgPT0gZXhwb3J0ZWQuZGVjbGFyYXRpb25JZClcblxuICBpZiAoIWRlY2xhcmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoYFJlc29sdmVkIGV4cG9ydCAnJHtleHBvcnRlZC5kZWNsYXJhdGlvbklkfScgaGFzIG5vIGRlY2xhcmF0aW9uLmApXG5cbiAgcmV0dXJuIGRlY2xhcmF0aW9uXG59XG5cbi8qKlxuICogUHJlZml4ZXMgbW9kdWxlLW93bmVkIGRlY2xhcmF0aW9uIGlkZW50aXRpZXMgYW5kIGV4cGxpY2l0IHJlc29sdmVkIHJlZmVyZW5jZXMgdG8gdGhlbS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBtb2R1bGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgLSBTdGFibGUgbW9kdWxlIGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJla2V5RGVjbGFyYXRpb25zKG1vZHVsZSwgbW9kdWxlSWQpIHtcbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuY2xhc3NlcyA/PyBbXSkge1xuICAgIHJlcGxhY2VtZW50cy5zZXQoZGVjbGFyYXRpb24uaWQsIGAke21vZHVsZUlkfSMke2RlY2xhcmF0aW9uLmlkfWApXG4gICAgcmVwbGFjZW1lbnRzLnNldChkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5pZCwgYCR7bW9kdWxlSWR9IyR7ZGVjbGFyYXRpb24uY29uc3RydWN0b3IuaWR9YClcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGRlY2xhcmF0aW9uLmZpZWxkcykgcmVwbGFjZW1lbnRzLnNldChmaWVsZC5pZCwgYCR7bW9kdWxlSWR9IyR7ZmllbGQuaWR9YClcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBkZWNsYXJhdGlvbi5tZXRob2RzKSByZXBsYWNlbWVudHMuc2V0KG1ldGhvZC5pZCwgYCR7bW9kdWxlSWR9IyR7bWV0aG9kLmlkfWApXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUucmVjb3JkcyA/PyBbXSkge1xuICAgIHJlcGxhY2VtZW50cy5zZXQoZGVjbGFyYXRpb24uaWQsIGAke21vZHVsZUlkfSMke2RlY2xhcmF0aW9uLmlkfWApXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pIHtcbiAgICAgIGlmIChwYXJhbWV0ZXIuaWQpIHJlcGxhY2VtZW50cy5zZXQocGFyYW1ldGVyLmlkLCBgJHttb2R1bGVJZH0jJHtwYXJhbWV0ZXIuaWR9YClcbiAgICB9XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBkZWNsYXJhdGlvbi5maWVsZHMpIHJlcGxhY2VtZW50cy5zZXQoZmllbGQuaWQsIGAke21vZHVsZUlkfSMke2ZpZWxkLmlkfWApXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZXJyb3JzID8/IFtdKSByZXBsYWNlbWVudHMuc2V0KGRlY2xhcmF0aW9uLmlkLCBgJHttb2R1bGVJZH0jJHtkZWNsYXJhdGlvbi5pZH1gKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICByZXBsYWNlbWVudHMuc2V0KGRlY2xhcmF0aW9uLmlkLCBgJHttb2R1bGVJZH0jJHtkZWNsYXJhdGlvbi5pZH1gKVxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID8/IFtdKSB7XG4gICAgICBpZiAocGFyYW1ldGVyLmlkKSByZXBsYWNlbWVudHMuc2V0KHBhcmFtZXRlci5pZCwgYCR7bW9kdWxlSWR9IyR7cGFyYW1ldGVyLmlkfWApXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUucmVjb3JkcyA/PyBbXSkge1xuICAgIGRlY2xhcmF0aW9uLmlkID0gcmVwbGFjZW1lbnRzLmdldChkZWNsYXJhdGlvbi5pZClcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgcGFyYW1ldGVyLmlkID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyZXBsYWNlbWVudHMuZ2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGFyYW1ldGVyLmlkKSkpXG4gICAgfVxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGVjbGFyYXRpb24uZmllbGRzKSBmaWVsZC5pZCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVwbGFjZW1lbnRzLmdldChmaWVsZC5pZCkpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZXJyb3JzID8/IFtdKSBkZWNsYXJhdGlvbi5pZCA9IHJlcGxhY2VtZW50cy5nZXQoZGVjbGFyYXRpb24uaWQpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICBkZWNsYXJhdGlvbi5pZCA9IHJlcGxhY2VtZW50cy5nZXQoZGVjbGFyYXRpb24uaWQpXG4gICAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuaWQgPSByZXBsYWNlbWVudHMuZ2V0KGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmlkKVxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGVjbGFyYXRpb24uZmllbGRzKSBmaWVsZC5pZCA9IHJlcGxhY2VtZW50cy5nZXQoZmllbGQuaWQpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykgbWV0aG9kLmlkID0gcmVwbGFjZW1lbnRzLmdldChtZXRob2QuaWQpXG4gICAgaWYgKGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCA9PSBcIm93bmVkUmVzb3VyY2VcIikge1xuICAgICAgZGVjbGFyYXRpb24ub3duZXJzaGlwLmZpZWxkSWQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlcGxhY2VtZW50cy5nZXQoZGVjbGFyYXRpb24ub3duZXJzaGlwLmZpZWxkSWQpKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBkZWNsYXJhdGlvbi5pZCA9IHJlcGxhY2VtZW50cy5nZXQoZGVjbGFyYXRpb24uaWQpXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPz8gW10pIHtcbiAgICAgIHBhcmFtZXRlci5pZCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVwbGFjZW1lbnRzLmdldCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhcmFtZXRlci5pZCkpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpXG4gIC8qKlxuICAgKiBSZXdyaXRlcyBvbmx5IHR5cGVkIGlkZW50aXR5LWJlYXJpbmcgZmllbGRzIHRocm91Z2hvdXQgb25lIHNlbWFudGljIHN1YnRyZWUuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBTZW1hbnRpYyBzdWJ0cmVlLlxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuXG4gICAgc2Vlbi5hZGQodmFsdWUpXG4gICAgY29uc3Qgb2JqZWN0ID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKVxuXG4gICAgaWYgKChvYmplY3Qua2luZCA9PSBcIlJlY29yZFR5cGVcIiB8fCBvYmplY3Qua2luZCA9PSBcIlJlZmVyZW5jZVR5cGVcIiB8fCBvYmplY3Qua2luZCA9PSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiIHx8XG4gICAgICBvYmplY3Qua2luZCA9PSBcIkVycm9yVHlwZVwiIHx8IG9iamVjdC5raW5kID09IFwiUmVzb2x2ZWRGdW5jdGlvblNpZ25hdHVyZVwiIHx8XG4gICAgICBvYmplY3Qua2luZCA9PSBcIlJlc29sdmVkQ29uc3RydWN0b3JTaWduYXR1cmVcIiB8fCBvYmplY3Qua2luZCA9PSBcIlJlc29sdmVkTWV0aG9kU2lnbmF0dXJlXCIpICYmXG4gICAgICB0eXBlb2Ygb2JqZWN0LmRlY2xhcmF0aW9uSWQgPT0gXCJzdHJpbmdcIiAmJiByZXBsYWNlbWVudHMuaGFzKG9iamVjdC5kZWNsYXJhdGlvbklkKSkge1xuICAgICAgb2JqZWN0LmRlY2xhcmF0aW9uSWQgPSByZXBsYWNlbWVudHMuZ2V0KG9iamVjdC5kZWNsYXJhdGlvbklkKVxuICAgIH1cbiAgICBpZiAoKG9iamVjdC5raW5kID09IFwiTWVtYmVyUmVhZFwiIHx8IG9iamVjdC5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiIHx8IG9iamVjdC5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIikgJiZcbiAgICAgIHR5cGVvZiBvYmplY3QuZmllbGQgPT0gXCJzdHJpbmdcIiAmJiByZXBsYWNlbWVudHMuaGFzKG9iamVjdC5maWVsZCkpIHtcbiAgICAgIG9iamVjdC5maWVsZCA9IHJlcGxhY2VtZW50cy5nZXQob2JqZWN0LmZpZWxkKVxuICAgIH1cbiAgICBpZiAob2JqZWN0LmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiICYmIHR5cGVvZiBvYmplY3QubWV0aG9kID09IFwic3RyaW5nXCIgJiYgcmVwbGFjZW1lbnRzLmhhcyhvYmplY3QubWV0aG9kKSkge1xuICAgICAgb2JqZWN0Lm1ldGhvZCA9IHJlcGxhY2VtZW50cy5nZXQob2JqZWN0Lm1ldGhvZClcbiAgICB9XG4gICAgaWYgKG9iamVjdC5raW5kID09IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIgJiYgdHlwZW9mIG9iamVjdC5jbGFzc0lkID09IFwic3RyaW5nXCIgJiYgcmVwbGFjZW1lbnRzLmhhcyhvYmplY3QuY2xhc3NJZCkpIHtcbiAgICAgIG9iamVjdC5jbGFzc0lkID0gcmVwbGFjZW1lbnRzLmdldChvYmplY3QuY2xhc3NJZClcbiAgICB9XG4gICAgaWYgKG9iamVjdC5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIgJiYgdHlwZW9mIG9iamVjdC5wYXJhbWV0ZXJJZCA9PSBcInN0cmluZ1wiICYmIHJlcGxhY2VtZW50cy5oYXMob2JqZWN0LnBhcmFtZXRlcklkKSkge1xuICAgICAgb2JqZWN0LnBhcmFtZXRlcklkID0gcmVwbGFjZW1lbnRzLmdldChvYmplY3QucGFyYW1ldGVySWQpXG4gICAgfVxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgT2JqZWN0LnZhbHVlcyhvYmplY3QpKSBpZiAodHlwZW9mIGNoaWxkID09IFwib2JqZWN0XCIpIHZpc2l0KGNoaWxkKVxuICB9XG4gIHZpc2l0KG1vZHVsZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc291cmNlIGFzc29jaWF0aW9uIGZvciBhIHBhcnNlci1vd25lZCBtb2R1bGUgaGVhZGVyIG5vZGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIE5vZGUgb3JpZ2luLlxuICogQHBhcmFtIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbj4+fSByYW5nZXMgLSBFeGFjdCBhdmFpbGFibGUgaGVhZGVyIHJvbGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZUlkIC0gUHJvZ3JhbS13aWRlIHNvdXJjZSBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVTb3VyY2VQcm92ZW5hbmNlfSBTb3VyY2UgYXNzb2NpYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHNvdXJjZUFzc29jaWF0aW9uKGxvY2F0aW9uLCByYW5nZXMsIHNvdXJjZUlkKSB7XG4gIHJldHVybiB7XG4gICAgb3JpZ2luOiB7a2luZDogXCJzb3VyY2VcIiwgbG9jYXRpb24sIHNvdXJjZUlkfSxcbiAgICByYW5nZXMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkTm9kZVByb3ZlbmFuY2VcIixcbiAgICB2ZXJzaW9uOiAxXG4gIH1cbn1cblxuLyoqXG4gKiBSZWJpbmRzIG9uZSBwYXJzZXItbG9jYWwgcHJvdmVuYW5jZSByZWdpc3RyeSB0byB0aGUgY29tcGxldGUgcHJvZ3JhbSBzb3VyY2UgcmVnaXN0cnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBOZXdseSBwYXJzZWQgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWdpc3RlcmVkU291cmNlW119IHNvdXJjZXMgLSBQcm9ncmFtLXdpZGUgcmVnaXN0cnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlSWQgLSBPd25pbmcgc291cmNlIGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlYmFzZVBhcnNlZE1vZHVsZVByb3ZlbmFuY2UobW9kdWxlLCBzb3VyY2VzLCBzb3VyY2VJZCkge1xuICBpZiAoIW1vZHVsZS5wcm92ZW5hbmNlKSB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZWQgcHJvZ3JhbSBtb2R1bGUgaGFzIG5vIHNvdXJjZSBwcm92ZW5hbmNlLlwiKVxuICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKVxuXG4gIC8qKlxuICAgKiBSZWJpbmRzIHNvdXJjZS1vcmlnaW4gaWRlbnRpdGllcyB0aHJvdWdob3V0IG9uZSBzZW1hbnRpYyBzdWJ0cmVlLlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gU2VtYW50aWMgc3VidHJlZS5cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0KHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVyblxuICAgIHNlZW4uYWRkKHZhbHVlKVxuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcbiAgICBjb25zdCBwcm92ZW5hbmNlID0gY2FuZGlkYXRlLnNvdXJjZVByb3ZlbmFuY2VcbiAgICBjb25zdCBvcmlnaW4gPSBpc1BsYWluT2JqZWN0KHByb3ZlbmFuY2UpID8gcHJvdmVuYW5jZS5vcmlnaW4gOiB1bmRlZmluZWRcblxuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yaWdpbikgJiYgb3JpZ2luLmtpbmQgPT0gXCJzb3VyY2VcIikgb3JpZ2luLnNvdXJjZUlkID0gc291cmNlSWRcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC52YWx1ZXMoY2FuZGlkYXRlKSkgdmlzaXQoY2hpbGQpXG4gIH1cbiAgdmlzaXQobW9kdWxlKVxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbW9kdWxlLnByb3ZlbmFuY2Uubm9kZXMpIHtcbiAgICBpZiAobm9kZS5vcmlnaW4ua2luZCA9PSBcInNvdXJjZVwiKSBub2RlLm9yaWdpbi5zb3VyY2VJZCA9IHNvdXJjZUlkXG4gIH1cbiAgbW9kdWxlLnByb3ZlbmFuY2Uuc291cmNlcyA9IHNvdXJjZXNcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgYSBjYW5kaWRhdGUgaXMgYSBkaXJlY3QgcGxhaW4gb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PSBPYmplY3QucHJvdG90eXBlXG59XG5cbi8qKlxuICogUmVhZHMgYSB2YWx1ZSB3aG9zZSBtYXAga2V5IHdhcyB2YWxpZGF0ZWQgZWFybGllciBpbiBwcm9ncmFtIGFzc2VtYmx5LlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgVD59IG1hcCAtIE1hcCB3aXRoIGEgcHJldmlvdXNseSB2YWxpZGF0ZWQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFJlcXVpcmVkIGtleS5cbiAqIEByZXR1cm5zIHtUfSBTdG9yZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkTWFwVmFsdWUobWFwLCBrZXkpIHtcbiAgY29uc3QgdmFsdWUgPSBtYXAuZ2V0KGtleSlcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHZhbGlkYXRlZCBtYXAgdmFsdWUgJyR7a2V5fScuYClcblxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBSYWlzZXMgYSBzdGFibGUgbWFsZm9ybWVkIHByb2dyYW0gcmVxdWVzdCBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBTdGFibGUgcmVxdWVzdCBmYWlsdXJlIGRldGFpbC5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZFByb2dyYW0obWVzc2FnZSkge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIklOVkFMSURfUFJPR1JBTVwiLCBsYW5ndWFnZTogXCJwcm9ncmFtXCIsIG1lc3NhZ2V9KVxufVxuIl19
|