projen 0.103.11 → 0.103.13
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/.jsii +188 -130
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +3 -3
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/awscdk/private/feature-flags-v2.const.d.ts +1 -1
- package/lib/awscdk/private/feature-flags-v2.const.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/cdktn/cdktn-app-ts.js +1 -1
- package/lib/cdktn/cdktn-config.js +1 -1
- package/lib/cdktn/cdktn-construct.js +1 -1
- package/lib/cdktn/cdktn-deps.js +1 -1
- package/lib/cdktn/cdktn-tasks.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/component.js +2 -2
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/actions.const.d.ts +2 -2
- package/lib/github/actions.const.js +3 -3
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-config-file.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/pnpm-workspace-config.js +2 -2
- package/lib/javascript/pnpm-workspace.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/polaris/coverity-go.js +1 -1
- package/lib/polaris/coverity-java.js +1 -1
- package/lib/polaris/coverity-javascript.js +1 -1
- package/lib/polaris/coverity.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/projenrc.js +1 -1
- package/lib/properties-file.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv-config.js +1 -1
- package/lib/python/uv.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.d.ts +23 -0
- package/lib/release/publisher.js +41 -29
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.d.ts +20 -0
- package/lib/release/release.js +3 -2
- package/lib/renovatebot.js +1 -1
- package/lib/run-task.cjs +3 -3
- package/lib/sample-file.js +2 -2
- package/lib/script-runner.js +1 -1
- package/lib/sonarqube/javascript.js +1 -1
- package/lib/sonarqube/rust.js +1 -1
- package/lib/sonarqube/sonarqube.js +1 -1
- package/lib/sonarqube/typescript.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-shell.js +1 -1
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-runner.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +3 -3
package/lib/release/publisher.js
CHANGED
|
@@ -11,30 +11,9 @@ const constants_1 = require("../github/constants");
|
|
|
11
11
|
const workflows_model_1 = require("../github/workflows-model");
|
|
12
12
|
const node_package_1 = require("../javascript/node-package");
|
|
13
13
|
const runner_options_1 = require("../runner-options");
|
|
14
|
-
const task_shell_1 = require("../task-shell");
|
|
15
14
|
const dax_1 = require("../util/dax");
|
|
16
15
|
const version_1 = require("../version");
|
|
17
16
|
const PUBLIB_VERSION = "latest";
|
|
18
|
-
/**
|
|
19
|
-
* Creates a GitHub release, tolerating a release that already exists so that
|
|
20
|
-
* re-running a release is a no-op rather than a failure.
|
|
21
|
-
*
|
|
22
|
-
* A fixed script: the release tag file, the changelog file and the prerelease
|
|
23
|
-
* flag arrive through the environment (`RELEASE_TAG_FILE`, `CHANGELOG_FILE`,
|
|
24
|
-
* `PRERELEASE`), so no value is ever interpolated into shell text.
|
|
25
|
-
*
|
|
26
|
-
* @TODO This is quite complex and should be solved differently in future
|
|
27
|
-
*/
|
|
28
|
-
const GITHUB_RELEASE_SCRIPT = [
|
|
29
|
-
"errout=$(mktemp)",
|
|
30
|
-
'tag=$(cat "$RELEASE_TAG_FILE")',
|
|
31
|
-
'gh release create "$tag" -R "$GITHUB_REPOSITORY" -F "$CHANGELOG_FILE" -t "$tag" --target "$GITHUB_SHA" ${PRERELEASE:+-p} 2> "$errout" && true',
|
|
32
|
-
"exitcode=$?",
|
|
33
|
-
'if [ $exitcode -ne 0 ] && ! grep -q "Release.tag_name already exists" "$errout"; then',
|
|
34
|
-
' cat "$errout"',
|
|
35
|
-
" exit $exitcode",
|
|
36
|
-
"fi",
|
|
37
|
-
].join("\n");
|
|
38
17
|
/**
|
|
39
18
|
* Fails unless the checked out branch is the one a publish task releases.
|
|
40
19
|
*
|
|
@@ -85,7 +64,7 @@ const PUBLISH_JOB_PREFIX = "release_";
|
|
|
85
64
|
* Under the hood, it uses https://github.com/cdklabs/publib
|
|
86
65
|
*/
|
|
87
66
|
class Publisher extends component_1.Component {
|
|
88
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.Publisher", version: "0.103.
|
|
67
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.Publisher", version: "0.103.13" };
|
|
89
68
|
static PUBLISH_GIT_TASK_NAME = "publish:git";
|
|
90
69
|
buildJobId;
|
|
91
70
|
artifactName;
|
|
@@ -204,6 +183,10 @@ class Publisher extends component_1.Component {
|
|
|
204
183
|
}
|
|
205
184
|
/**
|
|
206
185
|
* Creates a GitHub Release.
|
|
186
|
+
*
|
|
187
|
+
* Tolerates a release that already exists, so that re-running a release is
|
|
188
|
+
* a no-op rather than a failure.
|
|
189
|
+
*
|
|
207
190
|
* @param options Options
|
|
208
191
|
*/
|
|
209
192
|
publishToGitHubReleases(options) {
|
|
@@ -576,7 +559,7 @@ class Publisher extends component_1.Component {
|
|
|
576
559
|
task.execArgs(commandToRun.argv);
|
|
577
560
|
}
|
|
578
561
|
else {
|
|
579
|
-
task.exec(commandToRun.script
|
|
562
|
+
task.exec(commandToRun.script);
|
|
580
563
|
}
|
|
581
564
|
}
|
|
582
565
|
const steps = [
|
|
@@ -660,16 +643,45 @@ class Publisher extends component_1.Component {
|
|
|
660
643
|
publibCommand(command) {
|
|
661
644
|
return { argv: ["npx", "-p", `publib@${this.publibVersion}`, command] };
|
|
662
645
|
}
|
|
646
|
+
/**
|
|
647
|
+
* Creates a GitHub release, tolerating a release that already exists so
|
|
648
|
+
* that re-running a release is a no-op rather than a failure: if
|
|
649
|
+
* `gh release view` finds a release for the tag, creation is skipped and
|
|
650
|
+
* the existing release is left untouched.
|
|
651
|
+
*
|
|
652
|
+
* A fixed script: variable values arrive through the environment
|
|
653
|
+
* (`RELEASE_TAG_FILE`, `CHANGELOG_FILE`), never interpolated into shell
|
|
654
|
+
* text. Uses only syntax the built-in cross-platform shell implements.
|
|
655
|
+
*/
|
|
663
656
|
githubReleaseCommand(options, branchOptions) {
|
|
657
|
+
const latest = branchOptions.githubReleaseLatest ?? options.latest;
|
|
658
|
+
// map each value to a fixed literal flag; never interpolate the value
|
|
659
|
+
// into the shell text
|
|
660
|
+
const latestFlag = [];
|
|
661
|
+
if (latest === true) {
|
|
662
|
+
latestFlag.push("--latest=true");
|
|
663
|
+
}
|
|
664
|
+
else if (latest === false) {
|
|
665
|
+
latestFlag.push("--latest=false");
|
|
666
|
+
}
|
|
667
|
+
const createArgs = [
|
|
668
|
+
'"$tag"',
|
|
669
|
+
'-R "$GITHUB_REPOSITORY"',
|
|
670
|
+
'-F "$CHANGELOG_FILE"',
|
|
671
|
+
'-t "$tag"',
|
|
672
|
+
'--target "$GITHUB_SHA"',
|
|
673
|
+
...(branchOptions.prerelease ? ["--prerelease"] : []),
|
|
674
|
+
...latestFlag,
|
|
675
|
+
];
|
|
664
676
|
return {
|
|
665
|
-
script:
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
677
|
+
script: [
|
|
678
|
+
'tag=$(cat "$RELEASE_TAG_FILE") &&',
|
|
679
|
+
'gh release view "$tag" -R "$GITHUB_REPOSITORY" 2>/dev/null ||',
|
|
680
|
+
`gh release create ${createArgs.join(" ")}`,
|
|
681
|
+
].join("\n"),
|
|
669
682
|
env: {
|
|
670
683
|
RELEASE_TAG_FILE: options.releaseTagFile,
|
|
671
684
|
CHANGELOG_FILE: options.changelogFile,
|
|
672
|
-
...(branchOptions.prerelease ? { PRERELEASE: "true" } : {}),
|
|
673
685
|
},
|
|
674
686
|
};
|
|
675
687
|
}
|
|
@@ -721,4 +733,4 @@ function awsCodeArtifactInfoFromUrl(url) {
|
|
|
721
733
|
const [_, domain, account, region] = matches;
|
|
722
734
|
return { domain, account, region };
|
|
723
735
|
}
|
|
724
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbGVhc2UvcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTY3Q0EsOERBTUM7O0FBbDhDRCxvREFBNkQ7QUFDN0QsNENBQXlDO0FBQ3pDLHNDQUEwQztBQUMxQywyREFBd0Q7QUFDeEQsbURBRzZCO0FBUTdCLCtEQUEwRDtBQUMxRCw2REFBNkQ7QUFHN0Qsc0RBQTBEO0FBQzFELDhDQUEwQztBQUMxQyxxQ0FBNEM7QUFDNUMsd0NBQXdEO0FBRXhELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUVoQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHO0lBQzVCLGtCQUFrQjtJQUNsQixnQ0FBZ0M7SUFDaEMsK0lBQStJO0lBQy9JLGFBQWE7SUFDYix1RkFBdUY7SUFDdkYsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixJQUFJO0NBQ0wsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFYjs7Ozs7O0dBTUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLDRFQUE0RTtJQUM1RSw2QkFBNkI7SUFDN0IsZ0dBQWdHO0lBQ2hHLG9CQUFvQjtJQUNwQixHQUFHO0NBQ0osQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFYjs7Ozs7R0FLRztBQUNILFNBQVMsY0FBYyxDQUNyQixHQUF1QixFQUN2QixZQUFvQjtJQUVwQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7SUFD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QUFDLElBQUEsbUJBQWEsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDOUQsQ0FBQztBQTBLRDs7R0FFRztBQUNILElBQVksd0JBYVg7QUFiRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHFGQUF5RCxDQUFBO0lBRXpEOzs7OztPQUtHO0lBQ0gsdURBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQWJXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBYW5DO0FBbVREOzs7O0dBSUc7QUFDSCxTQUFnQix5QkFBeUIsQ0FDdkMsV0FBK0I7SUFFL0IsT0FBTyxPQUFPLENBQ1osV0FBVyxJQUFJLCtCQUErQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDakUsQ0FBQztBQUNKLENBQUM7QUFXRDs7OztHQUlHO0FBQ0gsU0FBUywwQkFBMEIsQ0FBQyxHQUFZO0lBQzlDLE1BQU0sWUFBWSxHQUNoQiwwREFBMEQsQ0FBQztJQUM3RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJyYW5jaE9wdGlvbnMgfSBmcm9tIFwiLi9yZWxlYXNlXCI7XG5pbXBvcnQgeyBBUlRJRkFDVF9JRF9PVVRQVVQgfSBmcm9tIFwiLi4vYnVpbGQvcHJpdmF0ZS9jb25zdHNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IFdvcmtmbG93U3RlcHMgfSBmcm9tIFwiLi4vZ2l0aHViXCI7XG5pbXBvcnQgeyBHaXRIdWJBY3Rpb25zIH0gZnJvbSBcIi4uL2dpdGh1Yi9hY3Rpb25zLmNvbnN0XCI7XG5pbXBvcnQge1xuICBERUZBVUxUX0dJVEhVQl9BQ1RJT05TX1VTRVIsXG4gIFBFUk1JU1NJT05fQkFDS1VQX0ZJTEUsXG59IGZyb20gXCIuLi9naXRodWIvY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL2dpdGh1Yi9naXRodWItY3JlZGVudGlhbHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgSm9iLFxuICBKb2JQZXJtaXNzaW9ucyxcbiAgSm9iU3RlcCxcbiAgVG9vbHMsXG59IGZyb20gXCIuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcIi4uL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IGRlZmF1bHROcG1Ub2tlbiB9IGZyb20gXCIuLi9qYXZhc2NyaXB0L25vZGUtcGFja2FnZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB0eXBlIHsgR3JvdXBSdW5uZXJPcHRpb25zIH0gZnJvbSBcIi4uL3J1bm5lci1vcHRpb25zXCI7XG5pbXBvcnQgeyBmaWx0ZXJlZFJ1bnNPbk9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IFRhc2tTaGVsbCB9IGZyb20gXCIuLi90YXNrLXNoZWxsXCI7XG5pbXBvcnQgeyBlc2NhcGVDb21tYW5kIH0gZnJvbSBcIi4uL3V0aWwvZGF4XCI7XG5pbXBvcnQgeyBDSEFOR0VTX1NJTkNFX0xBU1RfUkVMRUFTRSB9IGZyb20gXCIuLi92ZXJzaW9uXCI7XG5cbmNvbnN0IFBVQkxJQl9WRVJTSU9OID0gXCJsYXRlc3RcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgR2l0SHViIHJlbGVhc2UsIHRvbGVyYXRpbmcgYSByZWxlYXNlIHRoYXQgYWxyZWFkeSBleGlzdHMgc28gdGhhdFxuICogcmUtcnVubmluZyBhIHJlbGVhc2UgaXMgYSBuby1vcCByYXRoZXIgdGhhbiBhIGZhaWx1cmUuXG4gKlxuICogQSBmaXhlZCBzY3JpcHQ6IHRoZSByZWxlYXNlIHRhZyBmaWxlLCB0aGUgY2hhbmdlbG9nIGZpbGUgYW5kIHRoZSBwcmVyZWxlYXNlXG4gKiBmbGFnIGFycml2ZSB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCAoYFJFTEVBU0VfVEFHX0ZJTEVgLCBgQ0hBTkdFTE9HX0ZJTEVgLFxuICogYFBSRVJFTEVBU0VgKSwgc28gbm8gdmFsdWUgaXMgZXZlciBpbnRlcnBvbGF0ZWQgaW50byBzaGVsbCB0ZXh0LlxuICpcbiAqIEBUT0RPIFRoaXMgaXMgcXVpdGUgY29tcGxleCBhbmQgc2hvdWxkIGJlIHNvbHZlZCBkaWZmZXJlbnRseSBpbiBmdXR1cmVcbiAqL1xuY29uc3QgR0lUSFVCX1JFTEVBU0VfU0NSSVBUID0gW1xuICBcImVycm91dD0kKG1rdGVtcClcIixcbiAgJ3RhZz0kKGNhdCBcIiRSRUxFQVNFX1RBR19GSUxFXCIpJyxcbiAgJ2doIHJlbGVhc2UgY3JlYXRlIFwiJHRhZ1wiIC1SIFwiJEdJVEhVQl9SRVBPU0lUT1JZXCIgLUYgXCIkQ0hBTkdFTE9HX0ZJTEVcIiAtdCBcIiR0YWdcIiAtLXRhcmdldCBcIiRHSVRIVUJfU0hBXCIgJHtQUkVSRUxFQVNFOistcH0gMj4gXCIkZXJyb3V0XCIgJiYgdHJ1ZScsXG4gIFwiZXhpdGNvZGU9JD9cIixcbiAgJ2lmIFsgJGV4aXRjb2RlIC1uZSAwIF0gJiYgISBncmVwIC1xIFwiUmVsZWFzZS50YWdfbmFtZSBhbHJlYWR5IGV4aXN0c1wiIFwiJGVycm91dFwiOyB0aGVuJyxcbiAgJyAgY2F0IFwiJGVycm91dFwiJyxcbiAgXCIgIGV4aXQgJGV4aXRjb2RlXCIsXG4gIFwiZmlcIixcbl0uam9pbihcIlxcblwiKTtcblxuLyoqXG4gKiBGYWlscyB1bmxlc3MgdGhlIGNoZWNrZWQgb3V0IGJyYW5jaCBpcyB0aGUgb25lIGEgcHVibGlzaCB0YXNrIHJlbGVhc2VzLlxuICpcbiAqIENvbXBhcmVzIGBDVVJSRU5UX0JSQU5DSGAgLSByZXNvbHZlZCBieSB0aGUgdGFzaydzIGR5bmFtaWMgZW52IC0gYWdhaW5zdFxuICogYFBVQkxJU0hfQlJBTkNIYCwgc28gbmVpdGhlciB0aGUgYnJhbmNoIG5hbWUgbm9yIHRoZSBnaXQgaW52b2NhdGlvbiBlbmRzIHVwXG4gKiBpbnNpZGUgYSBjb21tYW5kLiBSdW5zIGFzIGFuIGFyZ3YgKGBub2RlIC1lIDxzY3JpcHQ+YCksIHNvIHRoZXJlIGlzIG5vIHNoZWxsLlxuICovXG5jb25zdCBDSEVDS19CUkFOQ0hfU0NSSVBUID0gW1xuICBcImNvbnN0IHsgQ1VSUkVOVF9CUkFOQ0g6IGN1cnJlbnQsIFBVQkxJU0hfQlJBTkNIOiBleHBlY3RlZCB9ID0gcHJvY2Vzcy5lbnY7XCIsXG4gIFwiaWYgKGN1cnJlbnQgIT09IGV4cGVjdGVkKSB7XCIsXG4gICcgIGNvbnNvbGUuZXJyb3IoYGNhbm5vdCBwdWJsaXNoIGZyb20gYnJhbmNoIFwiJHtjdXJyZW50fVwiOiB0aGlzIHRhc2sgcHVibGlzaGVzIFwiJHtleHBlY3RlZH1cImApOycsXG4gIFwiICBwcm9jZXNzLmV4aXQoMSk7XCIsXG4gIFwifVwiLFxuXS5qb2luKFwiXFxuXCIpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIFVSTCdzIGhvc3QgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgaG9zdCBleGFjdGx5LlxuICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIGNoZWNrXG4gKiBAcGFyYW0gZXhwZWN0ZWRIb3N0IFRoZSBleHBlY3RlZCBob3N0IChlLmcuLCBcIm5wbS5wa2cuZ2l0aHViLmNvbVwiKVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgVVJMJ3MgaG9zdCBtYXRjaGVzIGV4YWN0bHlcbiAqL1xuZnVuY3Rpb24gdXJsSG9zdE1hdGNoZXMoXG4gIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBleHBlY3RlZEhvc3Q6IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICBpZiAoIXVybCkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsLmluY2x1ZGVzKFwiOi8vXCIpID8gdXJsIDogYGh0dHBzOi8vJHt1cmx9YCk7XG4gICAgcmV0dXJuIHBhcnNlZC5ob3N0ID09PSBleHBlY3RlZEhvc3Q7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuY29uc3QgR0lUSFVCX1BBQ0tBR0VTX05QTSA9IFwibnBtLnBrZy5naXRodWIuY29tXCI7XG5jb25zdCBHSVRIVUJfUEFDS0FHRVNfTUFWRU4gPSBcIm1hdmVuLnBrZy5naXRodWIuY29tXCI7XG5jb25zdCBHSVRIVUJfUEFDS0FHRVNfTlVHRVQgPSBcIm51Z2V0LnBrZy5naXRodWIuY29tXCI7XG5jb25zdCBBUlRJRkFDVFNfRE9XTkxPQURfRElSID0gXCJkaXN0XCI7XG5jb25zdCBBV1NfQ09ERUFSVElGQUNUX1JFR0lTVFJZX1JFR0VYID0gL1xcLmNvZGVhcnRpZmFjdFxcLi4qXFwuYW1hem9uYXdzXFwuY29tLztcbmNvbnN0IFBVQkxJQl9UT09MQ0hBSU46IFJlY29yZDxzdHJpbmcsIFRvb2xzPiA9IHtcbiAganM6IHt9LFxuICBqYXZhOiB7IGphdmE6IHsgdmVyc2lvbjogXCIxMVwiIH0gfSxcbiAgcHl0aG9uOiB7IHB5dGhvbjogeyB2ZXJzaW9uOiBcIjMueFwiIH0gfSxcbiAgZ286IHsgZ286IHsgdmVyc2lvbjogXCJeMS4xOC4wXCIgfSB9LFxuICBkb3RuZXQ6IHsgZG90bmV0OiB7IHZlcnNpb246IFwiNi54XCIgfSB9LFxufTtcbmNvbnN0IFBVQkxJU0hfSk9CX1BSRUZJWCA9IFwicmVsZWFzZV9cIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgUHVibGlzaGVyYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaXNoZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBqb2IgSUQgdGhhdCBwcm9kdWNlcyB0aGUgYnVpbGQgYXJ0aWZhY3RzLiBBbGwgcHVibGlzaCBqb2JzIHdpbGwgdGFrZSBhIGRlcGVuZGVuY3kgb24gdGhpcyBqb2IuXG4gICAqL1xuICByZWFkb25seSBidWlsZEpvYklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgR2l0SHViIHdvcmtmbG93IGV4cHJlc3Npb24gdXNlZCBhcyBhIGNvbmRpdGlvbiBmb3IgcHVibGlzaGVycy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb25kaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNvbmRpdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFydGlmYWN0IHRvIGRvd25sb2FkIChlLmcuIGBkaXN0YCkuXG4gICAqXG4gICAqIFRoZSBhcnRpZmFjdCBpcyBleHBlY3RlZCB0byBpbmNsdWRlIGEgc3ViZGlyZWN0b3J5IGZvciBlYWNoIHJlbGVhc2UgdGFyZ2V0OlxuICAgKiBgZ29gIChHaXRIdWIpLCBgZG90bmV0YCAoTnVHZXQpLCBgamF2YWAgKE1hdmVuKSwgYGpzYCAobnBtKSwgYHB5dGhvbmBcbiAgICogKFB5UEkpLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGtsYWJzL3B1YmxpYlxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5vZGUgdmVyc2lvbiB0byBzZXR1cCBpbiBHaXRIdWIgd29ya2Zsb3dzIGlmIGFueSBub2RlLWJhc2VkIENMSSB1dGlsaXRpZXNcbiAgICogYXJlIG5lZWRlZC4gRm9yIGV4YW1wbGUgYHB1YmxpYmAsIHRoZSBDTEkgcHJvamVuIHVzZXMgdG8gcHVibGlzaCByZWxlYXNlcyxcbiAgICogaXMgYW4gbnBtIGxpYnJhcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGx0cy8qXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd05vZGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgaW1hZ2UgdG8gdXNlIGZvciBHaXRIdWIgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93Q29udGFpbmVySW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gcmVxdWlyZW1lbnQgZm9yIGBwdWJsaWJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImxhdGVzdFwiXG4gICAqL1xuICByZWFkb25seSBwdWJsaWJWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaXNzdWUgd2hlbiBhIHB1Ymxpc2ggdGFzayBmYWlscy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZhaWx1cmVJc3N1ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbCB0byBhcHBseSB0byB0aGUgaXNzdWUgbWFya2luZyBmYWlsZWQgcHVibGlzaCB0YXNrcy5cbiAgICogT25seSBhcHBsaWVzIGlmIGBmYWlsdXJlSXNzdWVgIGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiZmFpbGVkLXJlbGVhc2VcIlxuICAgKi9cbiAgcmVhZG9ubHkgZmFpbHVyZUlzc3VlTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdGh1YiBSdW5uZXIgc2VsZWN0aW9uIGxhYmVsc1xuICAgKiBAZGVmYXVsdCBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgdGFyZ2V0IFJ1bm5lciBieSBsYWJlbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGJvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgYXJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dSdW5zT24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogR2l0aHViIFJ1bm5lciBHcm91cCBzZWxlY3Rpb24gb3B0aW9uc1xuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgR3JvdXAgYnkgbmFtZSBhbmQvb3IgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93UnVuc09uR3JvdXA/OiBHcm91cFJ1bm5lck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERlZmluZSBwdWJsaXNoaW5nIHRhc2tzIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIG1hbnVhbGx5IGFzIHdlbGwgYXMgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBOb3JtYWxseSwgcHVibGlzaGluZyBvbmx5IGhhcHBlbnMgd2l0aGluIGF1dG9tYXRlZCB3b3JrZmxvd3MuIEVuYWJsZSB0aGlzXG4gICAqIGluIG9yZGVyIHRvIGNyZWF0ZSBhIHB1Ymxpc2hpbmcgdGFzayBmb3IgZWFjaCBwdWJsaXNoaW5nIGFjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFRhc2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG8gbm90IGFjdHVhbGx5IHB1Ymxpc2gsIG9ubHkgcHJpbnQgdGhlIGNvbW1hbmRzIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQgaW5zdGVhZC5cbiAgICpcbiAgICogVXNlZnVsIGlmIHlvdSB3aXNoIHRvIGJsb2NrIGFsbCBwdWJsaXNoaW5nIGZyb20gYSBzaW5nbGUgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIEdpdEh1YiBqb2JzIGZvciBwdWJsaXNoaW5nIG1vZHVsZXMgdG8gcGFja2FnZSBtYW5hZ2Vycy5cbiAqXG4gKiBVbmRlciB0aGUgaG9vZCwgaXQgdXNlcyBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWJcbiAqL1xuZXhwb3J0IGNsYXNzIFB1Ymxpc2hlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFVCTElTSF9HSVRfVEFTS19OQU1FID0gXCJwdWJsaXNoOmdpdFwiO1xuXG4gIHB1YmxpYyByZWFkb25seSBidWlsZEpvYklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpYlZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbmRpdGlvbj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGZhaWx1cmVJc3N1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBmYWlsdXJlSXNzdWVMYWJlbDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnNPbj86IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnNPbkdyb3VwPzogR3JvdXBSdW5uZXJPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IHB1Ymxpc2hUYXNrczogYm9vbGVhbjtcblxuICAvLyBmdW5jdGlvbnMgdGhhdCBjcmVhdGUgam9icyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBicmFuY2hcbiAgcHJpdmF0ZSByZWFkb25seSBfam9iRmFjdG9yaWVzOiBQdWJsaXNoSm9iRmFjdG9yeVtdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZ2l0SHViUHJlUHVibGlzaGluZzogSm9iU3RlcFtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dpdEh1YlBvc3RQdWJsaXNoaW5nOiBKb2JTdGVwW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93Tm9kZVZlcnNpb246IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd0NvbnRhaW5lckltYWdlPzogc3RyaW5nO1xuXG4gIC8vIExpc3Qgb2YgcHVibGlzaCBqb2JzIGFkZGVkIHRvIHRoZSBwdWJsaXNoZXJcbiAgLy8gTWFwcyBiZXR3ZWVuIHRoZSBiYXNlbmFtZSBhbmQgdGhlIGpvYm5hbWVcbiAgcHJpdmF0ZSByZWFkb25seSBwdWJsaXNoSm9iczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFB1Ymxpc2hlck9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuYnVpbGRKb2JJZCA9IG9wdGlvbnMuYnVpbGRKb2JJZDtcbiAgICB0aGlzLmFydGlmYWN0TmFtZSA9IG9wdGlvbnMuYXJ0aWZhY3ROYW1lO1xuICAgIHRoaXMucHVibGliVmVyc2lvbiA9IG9wdGlvbnMucHVibGliVmVyc2lvbiA/PyBQVUJMSUJfVkVSU0lPTjtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IG9wdGlvbnMuY29uZGl0aW9uO1xuICAgIHRoaXMuZHJ5UnVuID0gb3B0aW9ucy5kcnlSdW4gPz8gZmFsc2U7XG4gICAgdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uID0gb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uID8/IFwibHRzLypcIjtcbiAgICB0aGlzLndvcmtmbG93Q29udGFpbmVySW1hZ2UgPSBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2U7XG5cbiAgICB0aGlzLmZhaWx1cmVJc3N1ZSA9IG9wdGlvbnMuZmFpbHVyZUlzc3VlID8/IGZhbHNlO1xuICAgIHRoaXMuZmFpbHVyZUlzc3VlTGFiZWwgPSBvcHRpb25zLmZhaWx1cmVJc3N1ZUxhYmVsID8/IFwiZmFpbGVkLXJlbGVhc2VcIjtcbiAgICB0aGlzLnB1Ymxpc2hUYXNrcyA9IG9wdGlvbnMucHVibGlzaFRhc2tzID8/IGZhbHNlO1xuICAgIHRoaXMucnVuc09uID0gb3B0aW9ucy53b3JrZmxvd1J1bnNPbjtcbiAgICB0aGlzLnJ1bnNPbkdyb3VwID0gb3B0aW9ucy53b3JrZmxvd1J1bnNPbkdyb3VwO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSBgUmVsZWFzZWAgdG8gYWRkIHRoZSBwdWJsaXNoaW5nIGpvYnMgdG8gYSByZWxlYXNlIHdvcmtmbG93XG4gICAqIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGJyYW5jaC5cbiAgICogQHBhcmFtIGJyYW5jaCBUaGUgYnJhbmNoIG5hbWVcbiAgICogQHBhcmFtIG9wdGlvbnMgQnJhbmNoIG9wdGlvbnNcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3JlbmRlckpvYnNGb3JCcmFuY2goXG4gICAgYnJhbmNoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUGFydGlhbDxCcmFuY2hPcHRpb25zPixcbiAgKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgbGV0IGpvYnM6IFJlY29yZDxzdHJpbmcsIEpvYj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgZmFjdG9yeSBvZiB0aGlzLl9qb2JGYWN0b3JpZXMpIHtcbiAgICAgIGpvYnMgPSB7XG4gICAgICAgIC4uLmpvYnMsXG4gICAgICAgIC4uLmZhY3RvcnkoYnJhbmNoLCBvcHRpb25zKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwcmUgcHVibGlzaGluZyBzdGVwcyBmb3IgdGhlIEdpdEh1YiByZWxlYXNlIGpvYi5cbiAgICpcbiAgICogQHBhcmFtIHN0ZXBzIFRoZSBzdGVwcy5cbiAgICovXG4gIHB1YmxpYyBhZGRHaXRIdWJQcmVQdWJsaXNoaW5nU3RlcHMoLi4uc3RlcHM6IEpvYlN0ZXBbXSkge1xuICAgIHRoaXMuX2dpdEh1YlByZVB1Ymxpc2hpbmcucHVzaCguLi5zdGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwb3N0IHB1Ymxpc2hpbmcgc3RlcHMgZm9yIHRoZSBHaXRIdWIgcmVsZWFzZSBqb2IuXG4gICAqXG4gICAqIEBwYXJhbSBzdGVwcyBUaGUgc3RlcHMuXG4gICAqL1xuICBwdWJsaWMgYWRkR2l0SHViUG9zdFB1Ymxpc2hpbmdTdGVwcyguLi5zdGVwczogSm9iU3RlcFtdKSB7XG4gICAgdGhpcy5fZ2l0SHViUG9zdFB1Ymxpc2hpbmcucHVzaCguLi5zdGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCB0byBnaXQuXG4gICAqXG4gICAqIFRoaXMgaW5jbHVkZXMgZ2VuZXJhdGluZyBhIHByb2plY3QtbGV2ZWwgY2hhbmdlbG9nIGFuZCByZWxlYXNlIHRhZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9HaXQob3B0aW9uczogR2l0UHVibGlzaE9wdGlvbnMpIHtcbiAgICBjb25zdCByZWxlYXNlVGFnRmlsZSA9IG9wdGlvbnMucmVsZWFzZVRhZ0ZpbGU7XG4gICAgY29uc3QgdmVyc2lvbkZpbGUgPSBvcHRpb25zLnZlcnNpb25GaWxlO1xuICAgIGNvbnN0IGNoYW5nZWxvZyA9IG9wdGlvbnMuY2hhbmdlbG9nRmlsZTtcbiAgICBjb25zdCBwcm9qZWN0Q2hhbmdlbG9nRmlsZSA9IG9wdGlvbnMucHJvamVjdENoYW5nZWxvZ0ZpbGU7XG4gICAgY29uc3QgZ2l0QnJhbmNoID0gb3B0aW9ucy5naXRCcmFuY2ggPz8gXCJtYWluXCI7XG5cbiAgICBjb25zdCB0YXNrTmFtZSA9XG4gICAgICBnaXRCcmFuY2ggPT09IFwibWFpblwiIHx8IGdpdEJyYW5jaCA9PT0gXCJtYXN0ZXJcIlxuICAgICAgICA/IFB1Ymxpc2hlci5QVUJMSVNIX0dJVF9UQVNLX05BTUVcbiAgICAgICAgOiBgJHtQdWJsaXNoZXIuUFVCTElTSF9HSVRfVEFTS19OQU1FfToke2dpdEJyYW5jaH1gO1xuXG4gICAgY29uc3QgcHVibGlzaFRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayh0YXNrTmFtZSwge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUHJlcGVuZHMgdGhlIHJlbGVhc2UgY2hhbmdlbG9nIG9udG8gdGhlIHByb2plY3QgY2hhbmdlbG9nLCBjcmVhdGVzIGEgcmVsZWFzZSBjb21taXQsIGFuZCB0YWdzIHRoZSByZWxlYXNlXCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgQ0hBTkdFTE9HOiBjaGFuZ2Vsb2csXG4gICAgICAgIFJFTEVBU0VfVEFHX0ZJTEU6IHJlbGVhc2VUYWdGaWxlLFxuICAgICAgICBQUk9KRUNUX0NIQU5HRUxPR19GSUxFOiBwcm9qZWN0Q2hhbmdlbG9nRmlsZSA/PyBcIlwiLFxuICAgICAgICBWRVJTSU9OX0ZJTEU6IHZlcnNpb25GaWxlLFxuICAgICAgfSxcbiAgICAgIGNvbmRpdGlvbjogQ0hBTkdFU19TSU5DRV9MQVNUX1JFTEVBU0UsXG4gICAgfSk7XG4gICAgaWYgKHByb2plY3RDaGFuZ2Vsb2dGaWxlKSB7XG4gICAgICBwdWJsaXNoVGFzay5idWlsdGluKFwicmVsZWFzZS91cGRhdGUtY2hhbmdlbG9nXCIpO1xuICAgIH1cbiAgICBwdWJsaXNoVGFzay5idWlsdGluKFwicmVsZWFzZS90YWctdmVyc2lvblwiKTtcblxuICAgIC8vIGFuIGV4cGxpY2l0IGVtcHR5IHN0cmluZyBkaXNhYmxlcyBwdXNoaW5nXG4gICAgaWYgKG9wdGlvbnMuZ2l0UHVzaENvbW1hbmQgIT09IFwiXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLmdpdFB1c2hDb21tYW5kKSB7XG4gICAgICAgIHB1Ymxpc2hUYXNrLmV4ZWMob3B0aW9ucy5naXRQdXNoQ29tbWFuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwdWJsaXNoVGFzay5leGVjQXJncyhbXG4gICAgICAgICAgXCJnaXRcIixcbiAgICAgICAgICBcInB1c2hcIixcbiAgICAgICAgICBcIi0tZm9sbG93LXRhZ3NcIixcbiAgICAgICAgICBcIm9yaWdpblwiLFxuICAgICAgICAgIGdpdEJyYW5jaCxcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hUYXNrO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBHaXRIdWIgUmVsZWFzZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YlJlbGVhc2VzKG9wdGlvbnM6IEdpdEh1YlJlbGVhc2VzUHVibGlzaE9wdGlvbnMpIHtcbiAgICBjb25zdCBqb2JOYW1lID0gXCJnaXRodWJcIjtcbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2Ioam9iTmFtZSwgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RyeU5hbWU6IFwiR2l0SHViIFJlbGVhc2VzXCIsXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwczogb3B0aW9ucy5wcmVQdWJsaXNoU3RlcHMgPz8gdGhpcy5fZ2l0SHViUHJlUHVibGlzaGluZyxcbiAgICAgICAgcG9zdFB1Ymxpc2hTdGVwczpcbiAgICAgICAgICBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gdGhpcy5fZ2l0SHViUG9zdFB1Ymxpc2hpbmcsXG4gICAgICAgIHB1Ymxpc2hUb29sczogb3B0aW9ucy5wdWJsaXNoVG9vbHMsXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIH0sXG4gICAgICAgIG5lZWRzOiBPYmplY3QuZW50cmllcyh0aGlzLnB1Ymxpc2hKb2JzKVxuICAgICAgICAgIC5maWx0ZXIoKFtuYW1lLCBfXSkgPT4gbmFtZSAhPSBqb2JOYW1lKVxuICAgICAgICAgIC5tYXAoKFtfLCBqb2JdKSA9PiBqb2IpLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBydW46IHRoaXMuZ2l0aHViUmVsZWFzZUNvbW1hbmQob3B0aW9ucywgYnJhbmNoT3B0aW9ucyksXG4gICAgICAgIHJlbGVhc2VTdGVwSWY6IFwiJHt7ICFpbnB1dHMuZHJ5X3J1biB9fVwiLFxuICAgICAgICBpc1B1YkxpYjogZmFsc2UsXG4gICAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgICAgR0lUSFVCX1RPS0VOOiBcIiR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYXJ0aWZhY3RzIGZyb20gYGpzLyoqYCB0byBucG0uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9OcG0ob3B0aW9uczogTnBtUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIGlmIChvcHRpb25zLnRydXN0ZWRQdWJsaXNoaW5nICYmIG9wdGlvbnMubnBtVG9rZW5TZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgdXNlIG5wbVRva2VuU2VjcmV0IHdoZW4gdHJ1c3RlZFB1Ymxpc2hpbmcgaXMgZW5hYmxlZC4gXCIgK1xuICAgICAgICAgIFwiVHJ1c3RlZCBwdWJsaXNoaW5nIHVzZXMgT0lEQyB0b2tlbnMgZm9yIGF1dGhlbnRpY2F0aW9uIGluc3RlYWQgb2YgTlBNIHRva2Vucy4gXCIgK1xuICAgICAgICAgIFwiUmVtb3ZlIHRoZSBucG1Ub2tlblNlY3JldCBvcHRpb24gdG8gdXNlIHRydXN0ZWQgcHVibGlzaGluZy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJ1c3RlZFB1Ymxpc2hlciA9IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmcgPyBcInRydWVcIiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBucG1Qcm92ZW5hbmNlID0gb3B0aW9ucy5ucG1Qcm92ZW5hbmNlID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBpc0dpdEh1YlBhY2thZ2VzID0gdXJsSG9zdE1hdGNoZXMoXG4gICAgICBvcHRpb25zLnJlZ2lzdHJ5LFxuICAgICAgR0lUSFVCX1BBQ0tBR0VTX05QTSxcbiAgICApO1xuICAgIGNvbnN0IGlzQXdzQ29kZUFydGlmYWN0ID0gaXNBd3NDb2RlQXJ0aWZhY3RSZWdpc3RyeShvcHRpb25zLnJlZ2lzdHJ5KTtcbiAgICBjb25zdCBpc0F3c0NvZGVBcnRpZmFjdFdpdGhPaWRjID1cbiAgICAgIGlzQXdzQ29kZUFydGlmYWN0ICYmXG4gICAgICBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlciA9PT1cbiAgICAgICAgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDO1xuICAgIGNvbnN0IG5lZWRzSWRUb2tlbldyaXRlID1cbiAgICAgIGlzQXdzQ29kZUFydGlmYWN0V2l0aE9pZGMgfHwgdHJ1c3RlZFB1Ymxpc2hlciB8fCBucG1Qcm92ZW5hbmNlO1xuICAgIGNvbnN0IG5wbVRva2VuID0gdHJ1c3RlZFB1Ymxpc2hlclxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZGVmYXVsdE5wbVRva2VuKG9wdGlvbnMubnBtVG9rZW5TZWNyZXQsIG9wdGlvbnMucmVnaXN0cnkpO1xuXG4gICAgY29uc3QgcHJlUHVibGlzaFN0ZXBzOiBKb2JTdGVwW10gPSBvcHRpb25zLnByZVB1Ymxpc2hTdGVwcyA/PyBbXTtcblxuICAgIGlmIChpc0F3c0NvZGVBcnRpZmFjdFdpdGhPaWRjKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uYWNjZXNzS2V5SWRTZWNyZXQgfHxcbiAgICAgICAgb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJhY2Nlc3MgYW5kIHNlY3JldCBrZXkgcGFpciBzaG91bGQgbm90IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgR0lUSFVCX09JREMgYXV0aCBwcm92aWRlciBmb3IgQVdTIENvZGVBcnRpZmFjdFwiLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5yb2xlVG9Bc3N1bWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdcInJvbGVUb0Fzc3VtZVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgR0lUSFVCX09JREMgZm9yIEFXUyBDb2RlQXJ0aWZhY3Qgb3B0aW9ucycsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWdpb25DYXB0dXJlUmVnZXggPSAvY29kZWFydGlmYWN0XFwuKC4rKVxcLmFtYXpvbmF3c1xcLmNvbS87XG4gICAgICBjb25zdCByZWdpb24gPSBvcHRpb25zLnJlZ2lzdHJ5Py5tYXRjaChyZWdpb25DYXB0dXJlUmVnZXgpPy5bMV07XG4gICAgICBwcmVQdWJsaXNoU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiQ29uZmlndXJlIEFXUyBDcmVkZW50aWFscyB2aWEgR2l0SHViIE9JREMgUHJvdmlkZXJcIixcbiAgICAgICAgdXNlczogR2l0SHViQWN0aW9ucy5BV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOiBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnMucm9sZVRvQXNzdW1lLFxuICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiByZWdpb24sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoXCJucG1cIiwgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uanMsXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwcyxcbiAgICAgICAgcG9zdFB1Ymxpc2hTdGVwczogb3B0aW9ucy5wb3N0UHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBydW46IHRoaXMucHVibGliQ29tbWFuZChcInB1YmxpYi1ucG1cIiksXG4gICAgICAgIHJlZ2lzdHJ5TmFtZTogXCJucG1cIixcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTlBNX0RJU1RfVEFHOiBicmFuY2hPcHRpb25zLm5wbURpc3RUYWcgPz8gXCJsYXRlc3RcIixcbiAgICAgICAgICBOUE1fUkVHSVNUUlk6IG9wdGlvbnMucmVnaXN0cnksXG4gICAgICAgICAgTlBNX0NPTkZJR19QUk9WRU5BTkNFOiBucG1Qcm92ZW5hbmNlLFxuICAgICAgICAgIE5QTV9UUlVTVEVEX1BVQkxJU0hFUjogdHJ1c3RlZFB1Ymxpc2hlcixcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBpZFRva2VuOiBuZWVkc0lkVG9rZW5Xcml0ZSA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgICBwYWNrYWdlczogaXNHaXRIdWJQYWNrYWdlcyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgICAgTlBNX1RPS0VOOiBucG1Ub2tlbiA/IHNlY3JldChucG1Ub2tlbikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgLy8gaWYgd2UgYXJlIHB1Ymxpc2hpbmcgdG8gQVdTIENvZGVBcnRpZmFjdCwgcGFzcyBBV1MgYWNjZXNzIGtleXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgTlBNX1RPS0VOIHVzaW5nIEFXUyBDTEkuXG4gICAgICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6XG4gICAgICAgICAgICBpc0F3c0NvZGVBcnRpZmFjdCAmJiAhaXNBd3NDb2RlQXJ0aWZhY3RXaXRoT2lkY1xuICAgICAgICAgICAgICA/IHNlY3JldChcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uYWNjZXNzS2V5SWRTZWNyZXQgPz9cbiAgICAgICAgICAgICAgICAgICAgXCJBV1NfQUNDRVNTX0tFWV9JRFwiLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOlxuICAgICAgICAgICAgaXNBd3NDb2RlQXJ0aWZhY3QgJiYgIWlzQXdzQ29kZUFydGlmYWN0V2l0aE9pZGNcbiAgICAgICAgICAgICAgPyBzZWNyZXQoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnNlY3JldEFjY2Vzc0tleVNlY3JldCA/P1xuICAgICAgICAgICAgICAgICAgICBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgQVdTX1JPTEVfVE9fQVNTVU1FOlxuICAgICAgICAgICAgaXNBd3NDb2RlQXJ0aWZhY3QgJiYgIWlzQXdzQ29kZUFydGlmYWN0V2l0aE9pZGNcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnJvbGVUb0Fzc3VtZVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGFydGlmYWN0cyBmcm9tIGBkb3RuZXQvKipgIHRvIE51R2V0IEdhbGxlcnkuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9OdWdldChvcHRpb25zOiBOdWdldFB1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy50cnVzdGVkUHVibGlzaGluZyAmJiBvcHRpb25zLm51Z2V0QXBpS2V5U2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVzZSBudWdldEFwaUtleVNlY3JldCB3aGVuIHRydXN0ZWRQdWJsaXNoaW5nIGlzIGVuYWJsZWQuIFwiICtcbiAgICAgICAgICBcIlRydXN0ZWQgcHVibGlzaGluZyB1c2VzIE9JREMgdG9rZW5zIGZvciBhdXRoZW50aWNhdGlvbiBpbnN0ZWFkIG9mIEFQSSBrZXlzLiBcIiArXG4gICAgICAgICAgXCJSZW1vdmUgdGhlIG51Z2V0QXBpS2V5U2VjcmV0IG9wdGlvbiB0byB1c2UgdHJ1c3RlZCBwdWJsaXNoaW5nLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0dpdEh1YlBhY2thZ2VzID0gdXJsSG9zdE1hdGNoZXMoXG4gICAgICBvcHRpb25zLm51Z2V0U2VydmVyLFxuICAgICAgR0lUSFVCX1BBQ0tBR0VTX05VR0VULFxuICAgICk7XG4gICAgY29uc3QgbmVlZHNJZFRva2VuV3JpdGUgPSBvcHRpb25zLnRydXN0ZWRQdWJsaXNoaW5nO1xuXG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKFxuICAgICAgXCJudWdldFwiLFxuICAgICAgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiAoe1xuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uZG90bmV0LFxuICAgICAgICBwcmVQdWJsaXNoU3RlcHM6IG9wdGlvbnMucHJlUHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgICBwb3N0UHVibGlzaFN0ZXBzOiBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmdpdGh1YkVudmlyb25tZW50ID8/IGJyYW5jaE9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIHJ1bjogdGhpcy5wdWJsaWJDb21tYW5kKFwicHVibGliLW51Z2V0XCIpLFxuICAgICAgICByZWdpc3RyeU5hbWU6IFwiTnVHZXQgR2FsbGVyeVwiLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgcGFja2FnZXM6IGlzR2l0SHViUGFja2FnZXMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlkVG9rZW46IG5lZWRzSWRUb2tlbldyaXRlID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTlVHRVRfVFJVU1RFRF9QVUJMSVNIRVI6IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmdcbiAgICAgICAgICAgID8gXCJ0cnVlXCJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICAgIE5VR0VUX0FQSV9LRVk6IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmdcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHNlY3JldChcbiAgICAgICAgICAgICAgICBpc0dpdEh1YlBhY2thZ2VzXG4gICAgICAgICAgICAgICAgICA/IFwiR0lUSFVCX1RPS0VOXCJcbiAgICAgICAgICAgICAgICAgIDogKG9wdGlvbnMubnVnZXRBcGlLZXlTZWNyZXQgPz8gXCJOVUdFVF9BUElfS0VZXCIpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIE5VR0VUX1NFUlZFUjogb3B0aW9ucy5udWdldFNlcnZlciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgTlVHRVRfVVNFUk5BTUU6IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmdcbiAgICAgICAgICAgID8gc2VjcmV0KG9wdGlvbnMubnVnZXRVc2VybmFtZVNlY3JldCA/PyBcIk5VR0VUX1VTRVJOQU1FXCIpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGFydGlmYWN0cyBmcm9tIGBqYXZhLyoqYCB0byBNYXZlbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHB1Ymxpc2hUb01hdmVuKG9wdGlvbnM6IE1hdmVuUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGlzR2l0SHViUGFja2FnZXMgPSB1cmxIb3N0TWF0Y2hlcyhcbiAgICAgIG9wdGlvbnMubWF2ZW5SZXBvc2l0b3J5VXJsLFxuICAgICAgR0lUSFVCX1BBQ0tBR0VTX01BVkVOLFxuICAgICk7XG4gICAgY29uc3QgaXNHaXRIdWJBY3RvciA9XG4gICAgICBpc0dpdEh1YlBhY2thZ2VzICYmIG9wdGlvbnMubWF2ZW5Vc2VybmFtZSA9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWF2ZW5TZXJ2ZXJJZCA9XG4gICAgICBvcHRpb25zLm1hdmVuU2VydmVySWQgPz8gKGlzR2l0SHViUGFja2FnZXMgPyBcImdpdGh1YlwiIDogXCJjZW50cmFsLW9zc3JoXCIpO1xuXG4gICAgaWYgKGlzR2l0SHViUGFja2FnZXMgJiYgbWF2ZW5TZXJ2ZXJJZCAhPSBcImdpdGh1YlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdwdWJsaXNoaW5nIHRvIEdpdEh1YiBQYWNrYWdlcyByZXF1aXJlcyB0aGUgXCJtYXZlblNlcnZlcklkXCIgdG8gYmUgXCJnaXRodWJcIicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtYXZlblNlcnZlcklkID09PSBcImNlbnRyYWwtb3NzcmhcIiAmJiBvcHRpb25zLm1hdmVuRW5kcG9pbnQgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ3VzdG9tIGVuZHBvaW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHB1Ymxpc2hpbmcgdG8gTWF2ZW4gQ2VudHJhbCAobWF2ZW5TZXJ2ZXJJZDogXCJjZW50cmFsLW9zc3JoXCIpLiBQbGVhc2UgcmVtb3ZlIFwibWF2ZW5FbmRwb2ludFwiIGZyb20gdGhlIG9wdGlvbnMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKFxuICAgICAgXCJtYXZlblwiLFxuICAgICAgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiAoe1xuICAgICAgICByZWdpc3RyeU5hbWU6IFwiTWF2ZW4gQ2VudHJhbFwiLFxuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uamF2YSxcbiAgICAgICAgcHJlUHVibGlzaFN0ZXBzOiBvcHRpb25zLnByZVB1Ymxpc2hTdGVwcyA/PyBbXSxcbiAgICAgICAgcG9zdFB1Ymxpc2hTdGVwczogb3B0aW9ucy5wb3N0UHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBydW46IHRoaXMucHVibGliQ29tbWFuZChcInB1YmxpYi1tYXZlblwiKSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTUFWRU5fRU5EUE9JTlQ6IG9wdGlvbnMubWF2ZW5FbmRwb2ludCxcbiAgICAgICAgICBNQVZFTl9TRVJWRVJfSUQ6IG1hdmVuU2VydmVySWQsXG4gICAgICAgICAgTUFWRU5fUkVQT1NJVE9SWV9VUkw6IG9wdGlvbnMubWF2ZW5SZXBvc2l0b3J5VXJsLFxuICAgICAgICB9LFxuICAgICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICAgIE1BVkVOX0dQR19QUklWQVRFX0tFWTogaXNHaXRIdWJQYWNrYWdlc1xuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogc2VjcmV0KFxuICAgICAgICAgICAgICAgIG9wdGlvbnMubWF2ZW5HcGdQcml2YXRlS2V5U2VjcmV0ID8/IFwiTUFWRU5fR1BHX1BSSVZBVEVfS0VZXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0U6IGlzR2l0SHViUGFja2FnZXNcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHNlY3JldChcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1hdmVuR3BnUHJpdmF0ZUtleVBhc3NwaHJhc2UgPz9cbiAgICAgICAgICAgICAgICAgIFwiTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0VcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICBNQVZFTl9QQVNTV09SRDogc2VjcmV0KFxuICAgICAgICAgICAgb3B0aW9ucy5tYXZlblBhc3N3b3JkID8/XG4gICAgICAgICAgICAgIChpc0dpdEh1YlBhY2thZ2VzID8gXCJHSVRIVUJfVE9LRU5cIiA6IFwiTUFWRU5fUEFTU1dPUkRcIiksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBNQVZFTl9VU0VSTkFNRTogaXNHaXRIdWJBY3RvclxuICAgICAgICAgICAgPyBcIiR7eyBnaXRodWIuYWN0b3IgfX1cIlxuICAgICAgICAgICAgOiBzZWNyZXQob3B0aW9ucy5tYXZlblVzZXJuYW1lID8/IFwiTUFWRU5fVVNFUk5BTUVcIiksXG4gICAgICAgICAgTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEOiBpc0dpdEh1YlBhY2thZ2VzXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBzZWNyZXQoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tYXZlblN0YWdpbmdQcm9maWxlSWQgPz8gXCJNQVZFTl9TVEFHSU5HX1BST0ZJTEVfSURcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIHBhY2thZ2VzOiBpc0dpdEh1YlBhY2thZ2VzID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIHdoZWVsIGFydGlmYWN0cyBmcm9tIGBweXRob25gIHRvIFB5UEkuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9QeVBpKG9wdGlvbnM6IFB5UGlQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy50cnVzdGVkUHVibGlzaGluZyAmJlxuICAgICAgKG9wdGlvbnMudHdpbmVVc2VybmFtZVNlY3JldCB8fCBvcHRpb25zLnR3aW5lUGFzc3dvcmRTZWNyZXQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVzZSB0d2luZVVzZXJuYW1lU2VjcmV0IGFuZCB0d2luZVBhc3N3b3JkU2VjcmV0IHdoZW4gdHJ1c3RlZFB1Ymxpc2hpbmcgaXMgZW5hYmxlZC4gXCIgK1xuICAgICAgICAgIFwiVHJ1c3RlZCBwdWJsaXNoaW5nIHVzZXMgT0lEQyB0b2tlbnMgZm9yIGF1dGhlbnRpY2F0aW9uIGluc3RlYWQgb2YgdXNlcm5hbWUvcGFzc3dvcmQgY3JlZGVudGlhbHMuIFwiICtcbiAgICAgICAgICBcIlJlbW92ZSB0aGUgdHdpbmVVc2VybmFtZVNlY3JldCBhbmQgdHdpbmVQYXNzd29yZFNlY3JldCBvcHRpb25zIHRvIHVzZSB0cnVzdGVkIHB1Ymxpc2hpbmcuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBwZXJtaXNzaW9uczogSm9iUGVybWlzc2lvbnMgPSB7IGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfTtcbiAgICBjb25zdCBwcmVQdWJsaXNoU3RlcHMgPSBvcHRpb25zLnByZVB1Ymxpc2hTdGVwcyA/PyBbXTtcbiAgICBsZXQgd29ya2Zsb3dFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7fTtcbiAgICBjb25zdCBpc0F3c0NvZGVBcnRpZmFjdCA9IGlzQXdzQ29kZUFydGlmYWN0UmVnaXN0cnkoXG4gICAgICBvcHRpb25zLnR3aW5lUmVnaXN0cnlVcmwsXG4gICAgKTtcbiAgICBpZiAoaXNBd3NDb2RlQXJ0aWZhY3QpIHtcbiAgICAgIGNvbnN0IHsgZG9tYWluLCBhY2NvdW50LCByZWdpb24gfSA9IGF3c0NvZGVBcnRpZmFjdEluZm9Gcm9tVXJsKFxuICAgICAgICBvcHRpb25zLnR3aW5lUmVnaXN0cnlVcmwsXG4gICAgICApO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhdXRoUHJvdmlkZXIsXG4gICAgICAgIHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYWNjZXNzS2V5SWRTZWNyZXQsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldCxcbiAgICAgIH0gPSBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnMgPz8ge307XG4gICAgICBjb25zdCB1c2VPaWRjQXV0aCA9IGF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDO1xuICAgICAgaWYgKHVzZU9pZGNBdXRoKSB7XG4gICAgICAgIGlmICghcm9sZVRvQXNzdW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1wicm9sZVRvQXNzdW1lXCIgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBHSVRIVUJfT0lEQyBmb3IgQVdTIENvZGVBcnRpZmFjdCBvcHRpb25zJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBlcm1pc3Npb25zID0geyAuLi5wZXJtaXNzaW9ucywgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSB9O1xuICAgICAgICBwcmVQdWJsaXNoU3RlcHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJDb25maWd1cmUgQVdTIENyZWRlbnRpYWxzIHZpYSBHaXRIdWIgT0lEQyBQcm92aWRlclwiLFxuICAgICAgICAgIHVzZXM6IEdpdEh1YkFjdGlvbnMuQVdTX0FDVElPTlNfQ09ORklHVVJFX0FXU19DUkVERU5USUFMUyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBcInJvbGUtdG8tYXNzdW1lXCI6IHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiByZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcmVQdWJsaXNoU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiR2VuZXJhdGUgQ29kZUFydGlmYWN0IFRva2VuXCIsXG4gICAgICAgIHJ1bjogYGVjaG8gXCJUV0lORV9QQVNTV09SRD0kKGF3cyBjb2RlYXJ0aWZhY3QgZ2V0LWF1dGhvcml6YXRpb24tdG9rZW4gLS1kb21haW4gJHtkb21haW59IC0tZG9tYWluLW93bmVyICR7YWNjb3VudH0gLS1yZWdpb24gJHtyZWdpb259IC0tcXVlcnkgYXV0aG9yaXphdGlvblRva2VuIC0tb3V0cHV0IHRleHQpXCIgPj4gJEdJVEhVQl9FTlZgLFxuICAgICAgICBlbnY6IHVzZU9pZGNBdXRoXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6IHNlY3JldChcbiAgICAgICAgICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldCA/PyBcIkFXU19BQ0NFU1NfS0VZX0lEXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogc2VjcmV0KFxuICAgICAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldCA/PyBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgd29ya2Zsb3dFbnYgPSB7IFRXSU5FX1VTRVJOQU1FOiBcImF3c1wiIH07XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRydXN0ZWRQdWJsaXNoaW5nKSB7XG4gICAgICBwZXJtaXNzaW9ucyA9IHsgLi4ucGVybWlzc2lvbnMsIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUgfTtcbiAgICAgIHdvcmtmbG93RW52ID0ge1xuICAgICAgICBQWVBJX1RSVVNURURfUFVCTElTSEVSOiBcInRydWVcIixcbiAgICAgIH07XG4gICAgICAvLyBhdHRlc3RhdGlvbnMgZGVmYXVsdCB0byB0cnVlLCBvbmx5IGRpc2FibGUgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZFxuICAgICAgaWYgKG9wdGlvbnMuYXR0ZXN0YXRpb25zID09PSBmYWxzZSkge1xuICAgICAgICB3b3JrZmxvd0Vudi5QWVBJX0RJU0FCTEVfQVRURVNUQVRJT05TID0gXCJ0cnVlXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdvcmtmbG93RW52ID0ge1xuICAgICAgICBUV0lORV9VU0VSTkFNRTogc2VjcmV0KG9wdGlvbnMudHdpbmVVc2VybmFtZVNlY3JldCA/PyBcIlRXSU5FX1VTRVJOQU1FXCIpLFxuICAgICAgICBUV0lORV9QQVNTV09SRDogc2VjcmV0KG9wdGlvbnMudHdpbmVQYXNzd29yZFNlY3JldCA/PyBcIlRXSU5FX1BBU1NXT1JEXCIpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoXCJweXBpXCIsIChfYnJhbmNoLCBicmFuY2hPcHRpb25zKTogUHVibGlzaEpvYk9wdGlvbnMgPT4gKHtcbiAgICAgIHJlZ2lzdHJ5TmFtZTogXCJQeVBJXCIsXG4gICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4ucHl0aG9uLFxuICAgICAgcGVybWlzc2lvbnMsXG4gICAgICBwcmVQdWJsaXNoU3RlcHMsXG4gICAgICBwb3N0UHVibGlzaFN0ZXBzOiBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgcnVuOiB0aGlzLnB1YmxpYkNvbW1hbmQoXCJwdWJsaWItcHlwaVwiKSxcbiAgICAgIGVudjoge1xuICAgICAgICBUV0lORV9SRVBPU0lUT1JZX1VSTDogb3B0aW9ucy50d2luZVJlZ2lzdHJ5VXJsLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93RW52LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgZ28gcHVibGlzaGluZyBqb2IuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9HbyhvcHRpb25zOiBHb1B1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmdpdGh1YkNyZWRlbnRpYWxzICYmXG4gICAgICAob3B0aW9ucy5naXRodWJVc2VTc2ggfHxcbiAgICAgICAgb3B0aW9ucy5naXRodWJUb2tlblNlY3JldCB8fFxuICAgICAgICBvcHRpb25zLmdpdGh1YkRlcGxveUtleVNlY3JldClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJPbmx5IG9uZSBvZiAnZ2l0aHViQ3JlZGVudGlhbHMnIG9yICdnaXRodWJVc2VTc2gnLydnaXRodWJUb2tlblNlY3JldCcvJ2dpdGh1YkRlcGxveUtleVNlY3JldCcgbWF5IGJlIHNwZWNpZmllZCwgbm90IGJvdGguXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmdpdGh1YlVzZVNzaCAmJiBvcHRpb25zLmdpdGh1YlRva2VuU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiJ2dpdGh1YlRva2VuU2VjcmV0JyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoICdnaXRodWJVc2VTc2gnLiBVc2UgJ2dpdGh1YkRlcGxveUtleVNlY3JldCcgaW5zdGVhZC5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlUHVibGlzaFN0ZXBzID0gb3B0aW9ucy5wcmVQdWJsaXNoU3RlcHMgPz8gW107XG4gICAgY29uc3Qgd29ya2Zsb3dFbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gICAgaWYgKG9wdGlvbnMuZ2l0aHViQ3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gb3B0aW9ucy5naXRodWJDcmVkZW50aWFscztcbiAgICAgIHByZVB1Ymxpc2hTdGVwcy5wdXNoKC4uLmNyZWRlbnRpYWxzLnNldHVwU3RlcHMpO1xuICAgICAgd29ya2Zsb3dFbnYuR0lUSFVCX1RPS0VOID0gY3JlZGVudGlhbHMudG9rZW5SZWY7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmdpdGh1YlVzZVNzaCkge1xuICAgICAgd29ya2Zsb3dFbnYuR0lUSFVCX1VTRV9TU0ggPSBcInRydWVcIjtcbiAgICAgIHdvcmtmbG93RW52LlNTSF9BVVRIX1NPQ0sgPSBcIi90bXAvc3NoX2FnZW50LnNvY2tcIjtcbiAgICAgIHByZVB1Ymxpc2hTdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogXCJTZXR1cCBHaXRIdWIgZGVwbG95IGtleVwiLFxuICAgICAgICBydW46ICdzc2gtYWdlbnQgLWEgJHtTU0hfQVVUSF9TT0NLfSAmJiBzc2gtYWRkIC0gPDw8IFwiJHtHSVRIVUJfREVQTE9ZX0tFWX1cIicsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIEdJVEhVQl9ERVBMT1lfS0VZOiBzZWNyZXQoXG4gICAgICAgICAgICBvcHRpb25zLmdpdGh1YkRlcGxveUtleVNlY3JldCA/PyBcIkdPX0dJVEhVQl9ERVBMT1lfS0VZXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBTU0hfQVVUSF9TT0NLOiB3b3JrZmxvd0Vudi5TU0hfQVVUSF9TT0NLLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdvcmtmbG93RW52LkdJVEhVQl9UT0tFTiA9IHNlY3JldChcbiAgICAgICAgb3B0aW9ucy5naXRodWJUb2tlblNlY3JldCA/PyBcIkdPX0dJVEhVQl9UT0tFTlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoXG4gICAgICBcImdvbGFuZ1wiLFxuICAgICAgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiAoe1xuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uZ28sXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwczogcHJlUHVibGlzaFN0ZXBzLFxuICAgICAgICBwb3N0UHVibGlzaFN0ZXBzOiBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICAgIGVudmlyb25tZW50OlxuICAgICAgICAgIG9wdGlvbnMuZ2l0aHViRW52aXJvbm1lbnQgPz9cbiAgICAgICAgICBvcHRpb25zLmdpdGh1YkNyZWRlbnRpYWxzPy5lbnZpcm9ubWVudCA/P1xuICAgICAgICAgIGJyYW5jaE9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIHJ1bjogdGhpcy5wdWJsaWJDb21tYW5kKFwicHVibGliLWdvbGFuZ1wiKSxcbiAgICAgICAgcmVnaXN0cnlOYW1lOiBcIkdpdEh1YiBHbyBNb2R1bGUgUmVwb3NpdG9yeVwiLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBHSVRfQlJBTkNIOiBvcHRpb25zLmdpdEJyYW5jaCxcbiAgICAgICAgICBHSVRfVVNFUl9OQU1FOlxuICAgICAgICAgICAgb3B0aW9ucy5naXRVc2VyTmFtZSA/PyBERUZBVUxUX0dJVEhVQl9BQ1RJT05TX1VTRVIubmFtZSxcbiAgICAgICAgICBHSVRfVVNFUl9FTUFJTDpcbiAgICAgICAgICAgIG9wdGlvbnMuZ2l0VXNlckVtYWlsID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUi5lbWFpbCxcbiAgICAgICAgICBHSVRfQ09NTUlUX01FU1NBR0U6IG9wdGlvbnMuZ2l0Q29tbWl0TWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgICAgd29ya2Zsb3dFbnY6IHdvcmtmbG93RW52LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUHVibGlzaEpvYihcbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZW5hbWUgb2YgdGhlIHB1Ymxpc2ggam9iIChzaG91bGQgYmUgbG93ZXJjYXNlKS5cbiAgICAgKiBXaWxsIGJlIGV4dGVuZGVkIHdpdGggYSBwcmVmaXguXG4gICAgICovXG4gICAgYmFzZW5hbWU6IHN0cmluZyxcbiAgICBmYWN0b3J5OiAoXG4gICAgICBicmFuY2g6IHN0cmluZyxcbiAgICAgIGJyYW5jaE9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4sXG4gICAgKSA9PiBQdWJsaXNoSm9iT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3Qgam9ibmFtZSA9IGAke1BVQkxJU0hfSk9CX1BSRUZJWH0ke2Jhc2VuYW1lfWA7XG4gICAgdGhpcy5wdWJsaXNoSm9ic1tiYXNlbmFtZV0gPSBqb2JuYW1lO1xuXG4gICAgdGhpcy5fam9iRmFjdG9yaWVzLnB1c2goKGJyYW5jaCwgYnJhbmNoT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9IGZhY3RvcnkoYnJhbmNoLCBicmFuY2hPcHRpb25zKTtcbiAgICAgIGlmIChqb2JuYW1lIGluIHRoaXMuX2pvYkZhY3Rvcmllcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBqb2Igd2l0aCBuYW1lIFwiJHtqb2JuYW1lfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1hbmRUb1J1bjogUHVibGlzaFJ1biA9IHRoaXMuZHJ5UnVuXG4gICAgICAgID8geyBhcmd2OiBbXCJlY2hvXCIsIGBEUlkgUlVOOiAke3JlbmRlclJ1bihvcHRzLnJ1bil9YF0gfVxuICAgICAgICA6IG9wdHMucnVuO1xuICAgICAgY29uc3QgcmVxdWlyZWRFbnYgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgICAvLyBqb2JFbnYgaXMgdGhlIGVudiB3ZSBwYXNzIHRvIHRoZSBnaXRodWIgam9iICh0YXNrIGVudmlyb25tZW50ICsgc2VjcmV0cy9leHByZXNzaW9ucykuXG4gICAgICBjb25zdCBqb2JFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIC4uLm9wdHMuZW52LFxuICAgICAgICAuLi4oXCJzY3JpcHRcIiBpbiBjb21tYW5kVG9SdW4gPyBjb21tYW5kVG9SdW4uZW52IDoge30pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdvcmtmbG93RW52RW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG9wdHMud29ya2Zsb3dFbnYgPz8ge30pLmZpbHRlcihcbiAgICAgICAgKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9IHVuZGVmaW5lZCxcbiAgICAgICkgYXMgc3RyaW5nW11bXTtcbiAgICAgIGZvciAoY29uc3QgW2VudiwgZXhwcmVzc2lvbl0gb2Ygd29ya2Zsb3dFbnZFbnRyaWVzKSB7XG4gICAgICAgIHJlcXVpcmVkRW52LnB1c2goZW52KTtcbiAgICAgICAgam9iRW52W2Vudl0gPSBleHByZXNzaW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wdWJsaXNoVGFza3MpIHtcbiAgICAgICAgY29uc3QgYnJhbmNoU3VmZml4ID1cbiAgICAgICAgICBicmFuY2ggPT09IFwibWFpblwiIHx8IGJyYW5jaCA9PT0gXCJtYXN0ZXJcIiA/IFwiXCIgOiBgOiR7YnJhbmNofWA7XG5cbiAgICAgICAgLy8gZGVmaW5lIGEgdGFzayB3aGljaCBjYW4gYmUgdXNlZCB0aHJvdWdoIGBwcm9qZW4gcHVibGlzaDp4eHhgLlxuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soXG4gICAgICAgICAgYHB1Ymxpc2g6JHtiYXNlbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpfSR7YnJhbmNoU3VmZml4fWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQdWJsaXNoIHRoaXMgcGFja2FnZSB0byAke29wdHMucmVnaXN0cnlOYW1lfWAsXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgLi4ub3B0cy5lbnYsXG4gICAgICAgICAgICAgIC4uLihcInNjcmlwdFwiIGluIGNvbW1hbmRUb1J1biA/IGNvbW1hbmRUb1J1bi5lbnYgOiB7fSksXG4gICAgICAgICAgICAgIC8vIGNvbnN1bWVkIGJ5IHRoZSBicmFuY2ggY2hlY2sgYmVsb3dcbiAgICAgICAgICAgICAgUFVCTElTSF9CUkFOQ0g6IGJyYW5jaCxcbiAgICAgICAgICAgICAgQ1VSUkVOVF9CUkFOQ0g6IFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkRW52OiByZXF1aXJlZEVudixcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGZpcnN0IHZlcmlmeSB0aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVjdCBicmFuY2hcbiAgICAgICAgdGFzay5leGVjQXJncyhbXCJub2RlXCIsIFwiLWVcIiwgQ0hFQ0tfQlJBTkNIX1NDUklQVF0pO1xuXG4gICAgICAgIC8vIHJ1biBjb21tYW5kc1xuICAgICAgICBpZiAoXCJhcmd2XCIgaW4gY29tbWFuZFRvUnVuKSB7XG4gICAgICAgICAgdGFzay5leGVjQXJncyhjb21tYW5kVG9SdW4uYXJndik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFzay5leGVjKGNvbW1hbmRUb1J1bi5zY3JpcHQsIHsgc2hlbGw6IGNvbW1hbmRUb1J1bi5zaGVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGVwczogSm9iU3RlcFtdID0gW1xuICAgICAgICBXb3JrZmxvd1N0ZXBzLmRvd25sb2FkQXJ0aWZhY3Qoe1xuICAgICAgICAgIG5hbWU6IFwiRG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzXCIsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgYXJ0aWZhY3RJZHM6IFtcbiAgICAgICAgICAgICAgYFxcJHt7IG5lZWRzLiR7dGhpcy5idWlsZEpvYklkfS5vdXRwdXRzLiR7QVJUSUZBQ1RfSURfT1VUUFVUfSB9fWAsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcGF0aDogQVJUSUZBQ1RTX0RPV05MT0FEX0RJUiwgLy8gdGhpcyBtdXN0IGJlIFwiZGlzdFwiIGZvciBwdWJsaWJcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiUmVzdG9yZSBidWlsZCBhcnRpZmFjdCBwZXJtaXNzaW9uc1wiLFxuICAgICAgICAgIGNvbnRpbnVlT25FcnJvcjogdHJ1ZSxcbiAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgIGBjZCAke0FSVElGQUNUU19ET1dOTE9BRF9ESVJ9ICYmIHNldGZhY2wgLS1yZXN0b3JlPSR7UEVSTUlTU0lPTl9CQUNLVVBfRklMRX1gLFxuICAgICAgICAgIF0uam9pbihcIlxcblwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4ub3B0cy5wcmVQdWJsaXNoU3RlcHMsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIlJlbGVhc2VcIixcbiAgICAgICAgICAvLyBpdCB3b3VsZCBoYXZlIGJlZW4gbmljZSBpZiB3ZSBjb3VsZCBqdXN0IHJ1biBcInByb2plbiBwdWJsaXNoOnh4eFwiIGhlcmUgYnV0IHRoYXQgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgdGhpcyBqb2IgZG9lcyBub3QgY2hlY2tvdXQgc291cmNlc1xuICAgICAgICAgIGlmOiBvcHRzLnJlbGVhc2VTdGVwSWYsXG4gICAgICAgICAgcnVuOiByZW5kZXJSdW4oY29tbWFuZFRvUnVuKSxcbiAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgIC4uLmpvYkVudixcbiAgICAgICAgICAgIC4uLigob3B0cy5pc1B1YkxpYiA/PyB0cnVlKVxuICAgICAgICAgICAgICA/IHsgUFVCTElCX0RSWVJVTjogXCIke3sgaW5wdXRzLmRyeV9ydW4gfX1cIiB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLm9wdHMucG9zdFB1Ymxpc2hTdGVwcyxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHBlcm1zID0gb3B0cy5wZXJtaXNzaW9ucyA/PyB7IGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMud29ya2Zsb3dDb250YWluZXJJbWFnZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLndvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRoaXMuZmFpbHVyZUlzc3VlKSB7XG4gICAgICAgIHN0ZXBzLnB1c2goXG4gICAgICAgICAgLi4uW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIkV4dHJhY3QgVmVyc2lvblwiLFxuICAgICAgICAgICAgICBpZjogXCIke3sgZmFpbHVyZSgpIH19XCIsXG4gICAgICAgICAgICAgIGlkOiBcImV4dHJhY3QtdmVyc2lvblwiLFxuICAgICAgICAgICAgICBzaGVsbDogXCJiYXNoXCIsXG4gICAgICAgICAgICAgIHJ1bjogJ2VjaG8gXCJWRVJTSU9OPSQoY2F0IGRpc3QvdmVyc2lvbi50eHQpXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJDcmVhdGUgSXNzdWVcIixcbiAgICAgICAgICAgICAgaWY6IFwiJHt7IGZhaWx1cmUoKSB9fVwiLFxuICAgICAgICAgICAgICBydW46IGBnaCBpc3N1ZSBjcmVhdGUgLS10aXRsZSBcIlB1Ymxpc2hpbmcgdiRWRVJTSU9OIHRvICR7b3B0cy5yZWdpc3RyeU5hbWV9IGZhaWxlZFwiIC0tYm9keSBcIlNlZSAkUlVOX1VSTFwiIC0tbGFiZWwgXCIke3RoaXMuZmFpbHVyZUlzc3VlTGFiZWx9XCJgLFxuICAgICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgICBHSF9UT0tFTjogXCIke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX1cIixcbiAgICAgICAgICAgICAgICBWRVJTSU9OOiBcIiR7eyBzdGVwcy5leHRyYWN0LXZlcnNpb24ub3V0cHV0cy5WRVJTSU9OIH19XCIsXG4gICAgICAgICAgICAgICAgUlVOX1VSTDpcbiAgICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tLyR7eyBnaXRodWIucmVwb3NpdG9yeSB9fS9hY3Rpb25zL3J1bnMvJHt7IGdpdGh1Yi5ydW5faWQgfX1cIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwZXJtcywgeyBpc3N1ZXM6IEpvYlBlcm1pc3Npb24uV1JJVEUgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtqb2JuYW1lXToge1xuICAgICAgICAgIC4uLihvcHRzLmVudmlyb25tZW50ID8geyBlbnZpcm9ubWVudDogb3B0cy5lbnZpcm9ubWVudCB9IDoge30pLFxuICAgICAgICAgIHRvb2xzOiB7XG4gICAgICAgICAgICBub2RlOiB7IHZlcnNpb246IHRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiB9LFxuICAgICAgICAgICAgLi4ub3B0cy5wdWJsaXNoVG9vbHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lOiBgUHVibGlzaCB0byAke29wdHMucmVnaXN0cnlOYW1lfWAsXG4gICAgICAgICAgcGVybWlzc2lvbnM6IHBlcm1zLFxuICAgICAgICAgIGlmOiB0aGlzLmNvbmRpdGlvbixcbiAgICAgICAgICBuZWVkczogW3RoaXMuYnVpbGRKb2JJZCwgLi4uKG9wdHMubmVlZHMgPz8gW10pXSxcbiAgICAgICAgICAuLi5maWx0ZXJlZFJ1bnNPbk9wdGlvbnModGhpcy5ydW5zT24sIHRoaXMucnVuc09uR3JvdXApLFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBzdGVwcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1YmxpYkNvbW1hbmQoY29tbWFuZDogc3RyaW5nKTogUHVibGlzaFJ1biB7XG4gICAgcmV0dXJuIHsgYXJndjogW1wibnB4XCIsIFwiLXBcIiwgYHB1YmxpYkAke3RoaXMucHVibGliVmVyc2lvbn1gLCBjb21tYW5kXSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnaXRodWJSZWxlYXNlQ29tbWFuZChcbiAgICBvcHRpb25zOiBHaXRIdWJSZWxlYXNlc1B1Ymxpc2hPcHRpb25zLFxuICAgIGJyYW5jaE9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4sXG4gICk6IFB1Ymxpc2hSdW4ge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JpcHQ6IEdJVEhVQl9SRUxFQVNFX1NDUklQVCxcbiAgICAgIC8vIHRoZSBzY3JpcHQgdXNlcyBgaWZgLCBgIWAgYW5kIGAkP2AsIHdoaWNoIHRoZSBidWlsdC1pbiBzaGVsbCBkb2VzIG5vdFxuICAgICAgLy8gaW1wbGVtZW50XG4gICAgICBzaGVsbDogVGFza1NoZWxsLnNoKCksXG4gICAgICBlbnY6IHtcbiAgICAgICAgUkVMRUFTRV9UQUdfRklMRTogb3B0aW9ucy5yZWxlYXNlVGFnRmlsZSxcbiAgICAgICAgQ0hBTkdFTE9HX0ZJTEU6IG9wdGlvbnMuY2hhbmdlbG9nRmlsZSxcbiAgICAgICAgLi4uKGJyYW5jaE9wdGlvbnMucHJlcmVsZWFzZSA/IHsgUFJFUkVMRUFTRTogXCJ0cnVlXCIgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWNyZXQoc2VjcmV0TmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBgXFwke3sgc2VjcmV0cy4ke3NlY3JldE5hbWV9IH19YDtcbn1cblxuLyoqXG4gKiBXaGF0IGEgcHVibGlzaCBqb2IgcnVuczogZWl0aGVyIGFuIGFyZ3YsIHdoaWNoIG5lZWRzIG5vIHNoZWxsIGF0IGFsbCwgb3IgYVxuICogc2hlbGwgc2NyaXB0IGZvciB0aGUgY2FzZXMgdGhhdCBnZW51aW5lbHkgbmVlZCBzaGVsbCBmZWF0dXJlcy5cbiAqXG4gKiBBIHNjcmlwdCBpcyBhIGZpeGVkIHN0cmluZyAtIGV2ZXJ5dGhpbmcgdmFyaWFibGUgYWJvdXQgaXQgaXMgcGFzc2VkIGluIGBlbnZgLFxuICogd2hpY2ggaXMgbmV2ZXIgc2hlbGwtcGFyc2VkIC0gc28gbm8gdmFsdWUgaXMgZXZlciBpbnRlcnBvbGF0ZWQgaW50byBzaGVsbFxuICogdGV4dC4gSXQgYWxzbyBkZWNsYXJlcyB0aGUgYHNoZWxsYCBpdCBpcyB3cml0dGVuIGZvciwgc2luY2UgdGhlIGJ1aWx0LWluIHNoZWxsXG4gKiBvbmx5IGltcGxlbWVudHMgYSBzdWJzZXQgb2YgUE9TSVggc3ludGF4LlxuICovXG50eXBlIFB1Ymxpc2hSdW4gPVxuICB8IHsgcmVhZG9ubHkgYXJndjogc3RyaW5nW10gfVxuICB8IHtcbiAgICAgIHJlYWRvbmx5IHNjcmlwdDogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgIHJlYWRvbmx5IHNoZWxsPzogVGFza1NoZWxsO1xuICAgIH07XG5cbi8qKlxuICogUmVuZGVycyBhIGBQdWJsaXNoUnVuYCBhcyBhIGNvbW1hbmQgbGluZSBmb3IgYSBgcnVuOmAgd29ya2Zsb3cgc3RlcCBvciBhXG4gKiBgcHJvamVuIHB1Ymxpc2g6eHh4YCB0YXNrLlxuICovXG5mdW5jdGlvbiByZW5kZXJSdW4ocnVuOiBQdWJsaXNoUnVuKTogc3RyaW5nIHtcbiAgcmV0dXJuIFwiYXJndlwiIGluIHJ1biA/IGVzY2FwZUNvbW1hbmQocnVuLmFyZ3YpIDogcnVuLnNjcmlwdDtcbn1cblxuaW50ZXJmYWNlIFB1Ymxpc2hKb2JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuXG4gICAqL1xuICByZWFkb25seSBydW46IFB1Ymxpc2hSdW47XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHJlZ2lzdHJ5IChmb3IgZGVzY3JpcHRpb24pXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSm9iIHBlcm1pc3Npb25zXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9ucz86IEpvYlBlcm1pc3Npb25zO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB0byBpbmNsdWRlIG9ubHkgaW4gdGhlIHdvcmtmbG93IChhbmQgbm90IHRhc2tzKS5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93RW52PzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cbiAgLyoqXG4gICAqIFN0ZXBzIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSByZWxlYXNlIGNvbW1hbmQgZm9yIHByZXBhcmluZyB0aGUgZGlzdC8gb3V0cHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlUHVibGlzaFN0ZXBzOiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFN0ZXBzIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSByZWxlYXNlIGNvbW1hbmQgZm9yIHByZXBhcmluZyB0aGUgZGlzdC8gb3V0cHV0LlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdFB1Ymxpc2hTdGVwczogSm9iU3RlcFtdO1xuXG4gIC8qKlxuICAgKiBUb29scyBzZXR1cCBmb3IgdGhlIHdvcmtmbG93LlxuICAgKiBAZGVmYXVsdCAtIG5vIHRvb2xzIGFyZSBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hUb29scz86IFRvb2xzO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGpvYnMgdGhlIHB1Ymxpc2ggam9icyBkZXBlbmRzIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBBY3Rpb25zIGVudmlyb25tZW50IHVzZWQgZm9yIHB1Ymxpc2hpbmcuXG4gICAqIEBkZWZhdWx0IC0gbm8gZW52aXJvbm1lbnQgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29uZGl0aW9uIGZvciB0aGUgcmVsZWFzZSBzdGVwLlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbmRpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZVN0ZXBJZj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGpvYiB1c2VzIHB1YmxpYiAoYW5kIHRodXMgc3VwcG9ydHMgUFVCTElCX0RSWVJVTikuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGlzUHViTGliPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb21tb24gcHVibGlzaGluZyBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogU3RlcHMgdG8gZXhlY3V0ZSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwdWJsaXNoaW5nIGNvbW1hbmQuIFRoZXNlIGNhbiBiZSB1c2VkXG4gICAqIHRvIHByZXBhcmUgdGhlIGFydGlmYWN0IGZvciBwdWJsaXNoaW5nIGlmIG5lZWRlZC5cbiAgICpcbiAgICogVGhlc2Ugc3RlcHMgYXJlIGV4ZWN1dGVkIGFmdGVyIGBkaXN0L2AgaGFzIGJlZW4gcG9wdWxhdGVkIHdpdGggdGhlIGJ1aWxkXG4gICAqIG91dHB1dC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHdoZW4gdXNpbmcgdGhpcyBpbiBgcHVibGlzaFRvR2l0SHViUmVsZWFzZXNgIHRoaXMgd2lsbCBvdmVycmlkZSBzdGVwcyBhZGRlZCB2aWEgYGFkZEdpdEh1YlByZVB1Ymxpc2hpbmdTdGVwc2AuXG4gICAqL1xuICByZWFkb25seSBwcmVQdWJsaXNoU3RlcHM/OiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFN0ZXBzIHRvIGV4ZWN1dGUgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBwdWJsaXNoaW5nIGNvbW1hbmQuIFRoZXNlIGNhbiBiZSB1c2VkXG4gICAqIHRvIGFkZC91cGRhdGUgdGhlIHJlbGVhc2UgYXJ0aWZhY3RzIG90IGFueSBvdGhlciB0YXNrcyBuZWVkZWQuXG4gICAqXG4gICAqXG4gICAqIE5vdGUgdGhhdCB3aGVuIHVzaW5nIHRoaXMgaW4gYHB1Ymxpc2hUb0dpdEh1YlJlbGVhc2VzYCB0aGlzIHdpbGwgb3ZlcnJpZGUgc3RlcHMgYWRkZWQgdmlhIGBhZGRHaXRIdWJQb3N0UHVibGlzaGluZ1N0ZXBzYC5cbiAgICovXG4gIHJlYWRvbmx5IHBvc3RQdWJsaXNoU3RlcHM/OiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdG9vbHMgdG8gaW5zdGFsbCBpbiB0aGUgcHVibGlzaGluZyBqb2IuXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCB0b29scyBhcmUgaW5zdGFsbGVkXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoVG9vbHM/OiBUb29scztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBBY3Rpb25zIGVudmlyb25tZW50IHVzZWQgZm9yIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFuIGV4cGxpY2l0IGFwcHJvdmFsIHN0ZXAgdG8gdGhlIHJlbGVhc2VcbiAgICogb3IgbGltaXQgd2hvIGNhbiBpbml0aWF0ZSBhIHJlbGVhc2UgdGhyb3VnaCBlbnZpcm9ubWVudCBwcm90ZWN0aW9uIHJ1bGVzLlxuICAgKlxuICAgKiBTZXQgdGhpcyB0byBvdmVyd3JpdGUgYSBwYWNrYWdlIGxldmVsIHB1Ymxpc2hpbmcgZW52aXJvbm1lbnQganVzdCBmb3IgdGhpcyBhcnRpZmFjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbnZpcm9ubWVudCB1c2VkLCB1bmxlc3Mgc2V0IGF0IHRoZSBwYWNrYWdlIGxldmVsXG4gICAqL1xuICByZWFkb25seSBnaXRodWJFbnZpcm9ubWVudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBucG0gcmVsZWFzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5wbVB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRvbWFpbiBuYW1lIG9mIHRoZSBucG0gcGFja2FnZSByZWdpc3RyeS5cbiAgICpcbiAgICogVG8gcHVibGlzaCB0byBHaXRIdWIgUGFja2FnZXMsIHNldCB0aGlzIHZhbHVlIHRvIGBcIm5wbS5wa2cuZ2l0aHViLmNvbVwiYC4gSW5cbiAgICogdGhpcyBpZiBgbnBtVG9rZW5TZWNyZXRgIGlzIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgKiBgR0lUSFVCX1RPS0VOYCB3aGljaCBtZWFucyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gcHVibGlzaCB0byB0aGVcbiAgICogcmVwb3NpdG9yeSdzIHBhY2thZ2Ugc3RvcmUuIEluIHRoaXMgY2FzZSwgbWFrZSBzdXJlIGByZXBvc2l0b3J5VXJsYCBpc1xuICAgKiBjb3JyZWN0bHkgZGVmaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJyZWdpc3RyeS5ucG1qcy5vcmdcIlxuICAgKiBAZXhhbXBsZSBcIm5wbS5wa2cuZ2l0aHViLmNvbVwiXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeT86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIHNlY3JldCB3aGljaCBjb250YWlucyB0aGUgTlBNIHRva2VuIHRvIHVzZSBmb3IgcHVibGlzaGluZyBwYWNrYWdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBcIk5QTV9UT0tFTlwiIG9yIFwiR0lUSFVCX1RPS0VOXCIgaWYgYHJlZ2lzdHJ5YCBpcyBzZXQgdG8gYG5wbS5wa2cuZ2l0aHViLmNvbWAuXG4gICAqL1xuICByZWFkb25seSBucG1Ub2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogVXNlIHRydXN0ZWQgcHVibGlzaGluZyBmb3IgcHVibGlzaGluZyB0byBucG1qcy5jb21cbiAgICogTmVlZHMgdG8gYmUgcHJlLWNvbmZpZ3VyZWQgb24gbnBtLmpzIHRvIHdvcmsuXG4gICAqXG4gICAqIFJlcXVpcmVzIG5wbSBDTEkgdmVyc2lvbiAxMS41LjEgb3IgbGF0ZXIsIHRoaXMgaXMgTk9UIGVuc3VyZWQgYXV0b21hdGljYWxseS5cbiAgICogV2hlbiB1c2VkLCBgbnBtVG9rZW5TZWNyZXRgIHdpbGwgYmUgaWdub3JlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MubnBtanMuY29tL3RydXN0ZWQtcHVibGlzaGVyc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0cnVzdGVkUHVibGlzaGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNob3VsZCBwcm92ZW5hbmNlIHN0YXRlbWVudHMgYmUgZ2VuZXJhdGVkIHdoZW4gcGFja2FnZSBpcyBwdWJsaXNoZWQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIGNvbXBvbmVudCBpcyB1c2luZyBgcHVibGliYCB0byBwdWJsaXNoIHBhY2thZ2VzLFxuICAgKiB3aGljaCBpcyB1c2luZyBucG0gaW50ZXJuYWxseSBhbmQgc3VwcG9ydHMgcHJvdmVuYW5jZSBzdGF0ZW1lbnRzIGluZGVwZW5kZW50bHkgb2YgdGhlIHBhY2thZ2UgbWFuYWdlciB1c2VkLlxuICAgKlxuICAgKiBPbmx5IHdvcmtzIGluIHN1cHBvcnRlZCBDSS9DRCBlbnZpcm9ubWVudHMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9nZW5lcmF0aW5nLXByb3ZlbmFuY2Utc3RhdGVtZW50c1xuICAgKiBAZGVmYXVsdCAtIGVuYWJsZWQgZm9yIGZvciBwdWJsaWMgcGFja2FnZXMgdXNpbmcgdHJ1c3RlZCBwdWJsaXNoaW5nLCBkaXNhYmxlZCBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IG5wbVByb3ZlbmFuY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBwdWJsaXNoaW5nIG5wbSBwYWNrYWdlIHRvIEFXUyBDb2RlQXJ0aWZhY3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGFja2FnZSBpcyBub3QgcHVibGlzaGVkIHRvXG4gICAqL1xuICByZWFkb25seSBjb2RlQXJ0aWZhY3RPcHRpb25zPzogQ29kZUFydGlmYWN0T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhdXRob3JpemluZyByZXF1ZXN0cyB0byBhIEFXUyBDb2RlQXJ0aWZhY3QgbnBtIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBlbnVtIENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciB7XG4gIC8qKlxuICAgKiBGaXhlZCBjcmVkZW50aWFscyBwcm92aWRlZCB2aWEgR2l0aHViIHNlY3JldHMuXG4gICAqL1xuICBBQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUiA9IFwiQUNDRVNTX0FORF9TRUNSRVRfS0VZX1BBSVJcIixcblxuICAvKipcbiAgICogRXBoZW1lcmFsIGNyZWRlbnRpYWxzIHByb3ZpZGVkIHZpYSBHaXRodWIncyBPSURDIGludGVncmF0aW9uIHdpdGggYW4gSUFNIHJvbGUuXG4gICAqIFNlZTpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2lkX3JvbGVzX3Byb3ZpZGVyc19jcmVhdGVfb2lkYy5odG1sXG4gICAqIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvZGVwbG95bWVudC9zZWN1cml0eS1oYXJkZW5pbmcteW91ci1kZXBsb3ltZW50cy9jb25maWd1cmluZy1vcGVuaWQtY29ubmVjdC1pbi1hbWF6b24td2ViLXNlcnZpY2VzXG4gICAqL1xuICBHSVRIVUJfT0lEQyA9IFwiR0lUSFVCX09JRENcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBwdWJsaXNoaW5nIHBhY2thZ2VzIHRvIEFXUyBDb2RlQXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUFydGlmYWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm92aWRlciB0byB1c2UgZm9yIGF1dGhvcml6aW5nIHJlcXVlc3RzIHRvIEFXUyBDb2RlQXJ0aWZhY3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aFByb3ZpZGVyPzogQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyO1xuICAvKipcbiAgICogR2l0SHViIHNlY3JldCB3aGljaCBjb250YWlucyB0aGUgQVdTIGFjY2VzcyBrZXkgSUQgdG8gdXNlIHdoZW4gcHVibGlzaGluZyBwYWNrYWdlcyB0byBBV1MgQ29kZUFydGlmYWN0LlxuICAgKiBUaGlzIHByb3BlcnR5IG11c3QgYmUgc3BlY2lmaWVkIG9ubHkgd2hlbiBwdWJsaXNoaW5nIHRvIEFXUyBDb2RlQXJ0aWZhY3QgKGBucG1SZWdpc3RyeVVybGAgY29udGFpbnMgQVdTIENvZGVBcnRpZmFjdCBVUkwpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFdoZW4gdGhlIGBhdXRoUHJvdmlkZXJgIHZhbHVlIGlzIHNldCB0b1xuICAgKiBgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSYCwgdGhlIGRlZmF1bHQgaXNcbiAgICogXCJBV1NfQUNDRVNTX0tFWV9JRFwiLiBGb3IgYENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQ2AsIHRoaXNcbiAgICogdmFsdWUgbXVzdCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc0tleUlkU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IHdoaWNoIGNvbnRhaW5zIHRoZSBBV1Mgc2VjcmV0IGFjY2VzcyBrZXkgdG8gdXNlIHdoZW4gcHVibGlzaGluZyBwYWNrYWdlcyB0byBBV1MgQ29kZUFydGlmYWN0LlxuICAgKiBUaGlzIHByb3BlcnR5IG11c3QgYmUgc3BlY2lmaWVkIG9ubHkgd2hlbiBwdWJsaXNoaW5nIHRvIEFXUyBDb2RlQXJ0aWZhY3QgKGBucG1SZWdpc3RyeVVybGAgY29udGFpbnMgQVdTIENvZGVBcnRpZmFjdCBVUkwpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFdoZW4gdGhlIGBhdXRoUHJvdmlkZXJgIHZhbHVlIGlzIHNldCB0b1xuICAgKiBgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSYCwgdGhlIGRlZmF1bHQgaXNcbiAgICogXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVlcIi4gRm9yIGBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JRENgLCB0aGlzXG4gICAqIHZhbHVlIG11c3QgYmUgbGVmdCB1bmRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiBvZiBBV1Mgcm9sZSB0byBiZSBhc3N1bWVkIHByaW9yIHRvIGdldCBhdXRob3JpemF0aW9uIHRva2VuIGZyb20gQVdTIENvZGVBcnRpZmFjdFxuICAgKiBUaGlzIHByb3BlcnR5IG11c3QgYmUgc3BlY2lmaWVkIG9ubHkgd2hlbiBwdWJsaXNoaW5nIHRvIEFXUyBDb2RlQXJ0aWZhY3QgKGByZWdpc3RyeWAgY29udGFpbnMgQVdTIENvZGVBcnRpZmFjdCBVUkwpLlxuICAgKiBXaGVuIHVzaW5nIHRoZSBgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDYCBhdXRoIHByb3ZpZGVyLCB0aGlzIHZhbHVlIG11c3QgYmUgZGVmaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSByb2xlVG9Bc3N1bWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgUHlQSSByZWxlYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHlQaVB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHJlZ2lzdHJ5IHVybCB0byB1c2Ugd2hlbiByZWxlYXNpbmcgcGFja2FnZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHdpbmUgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdHdpbmVSZWdpc3RyeVVybD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBzZWNyZXQgd2hpY2ggY29udGFpbnMgUHlQSSB1c2VyIG5hbWUuXG4gICAqIEBkZWZhdWx0IFwiVFdJTkVfVVNFUk5BTUVcIlxuICAgKi9cbiAgcmVhZG9ubHkgdHdpbmVVc2VybmFtZVNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBzZWNyZXQgd2hpY2ggY29udGFpbnMgUHlQSSBwYXNzd29yZC5cbiAgICogQGRlZmF1bHQgXCJUV0lORV9QQVNTV09SRFwiXG4gICAqL1xuICByZWFkb25seSB0d2luZVBhc3N3b3JkU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgUHlQSSB0cnVzdGVkIHB1Ymxpc2hpbmcgaW5zdGVhZCBvZiB0b2tlbnMgb3IgdXNlcm5hbWUgJiBwYXNzd29yZC5cbiAgICpcbiAgICogTmVlZHMgdG8gYmUgc2V0dXAgaW4gUHlQSS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MucHlwaS5vcmcvdHJ1c3RlZC1wdWJsaXNoZXJzL2FkZGluZy1hLXB1Ymxpc2hlci9cbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRQdWJsaXNoaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2VuZXJhdGUgYW5kIHB1Ymxpc2ggY3J5cHRvZ3JhcGhpYyBhdHRlc3RhdGlvbnMgZm9yIGZpbGVzIHVwbG9hZGVkIHRvIFB5UEkuXG4gICAqXG4gICAqIEF0dGVzdGF0aW9ucyBwcm92aWRlIHBhY2thZ2UgcHJvdmVuYW5jZSBhbmQgaW50ZWdyaXR5IGFuIGNhbiBiZSB2aWV3ZWQgb24gUHlQSS5cbiAgICogVGhleSBhcmUgb25seSBhdmFpbGFibGUgd2hlbiB1c2luZyBhIFRydXN0ZWQgUHVibGlzaGVyIGZvciBwdWJsaXNoaW5nLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5weXBpLm9yZy9hdHRlc3RhdGlvbnMvcHJvZHVjaW5nLWF0dGVzdGF0aW9ucy9cbiAgICogQGRlZmF1bHQgLSBlbmFibGVkIHdoZW4gdXNpbmcgdHJ1c3RlZCBwdWJsaXNoaW5nLCBvdGhlcndpc2Ugbm90IGFwcGxpY2FibGVcbiAgICovXG4gIHJlYWRvbmx5IGF0dGVzdGF0aW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHB1Ymxpc2hpbmcgdG8gQVdTIENvZGVBcnRpZmFjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVBcnRpZmFjdE9wdGlvbnM/OiBDb2RlQXJ0aWZhY3RPcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIE51R2V0IHJlbGVhc2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnVnZXRQdWJsaXNoT3B0aW9ucyBleHRlbmRzIENvbW1vblB1Ymxpc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgd2hpY2ggY29udGFpbnMgdGhlIEFQSSBrZXkgZm9yIE51R2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIk5VR0VUX0FQSV9LRVlcIlxuICAgKi9cbiAgcmVhZG9ubHkgbnVnZXRBcGlLZXlTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBOdUdldCBTZXJ2ZXIgVVJMIChkZWZhdWx0cyB0byBudWdldC5vcmcpXG4gICAqL1xuICByZWFkb25seSBudWdldFNlcnZlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVXNlIE51R2V0IHRydXN0ZWQgcHVibGlzaGluZyBpbnN0ZWFkIG9mIEFQSSBrZXlzLlxuICAgKlxuICAgKiBOZWVkcyB0byBiZSBzZXR1cCBpbiBOdUdldC5vcmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL251Z2V0L251Z2V0LW9yZy90cnVzdGVkLXB1Ymxpc2hpbmdcbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRQdWJsaXNoaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIE51R2V0Lm9yZyB1c2VybmFtZSAocHJvZmlsZSBuYW1lLCBub3QgZW1haWwgYWRkcmVzcykgZm9yIHRydXN0ZWQgcHVibGlzaGVyIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBSZXF1aXJlZCB3aGVuIHVzaW5nIHRydXN0ZWQgcHVibGlzaGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJOVUdFVF9VU0VSTkFNRVwiXG4gICAqL1xuICByZWFkb25seSBudWdldFVzZXJuYW1lU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIE1hdmVuIHJlbGVhc2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5QdWJsaXNoT3B0aW9ucyBleHRlbmRzIENvbW1vblB1Ymxpc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVSTCBvZiBOZXh1cyByZXBvc2l0b3J5LiBpZiBub3Qgc2V0LCBkZWZhdWx0cyB0byBodHRwczovL29zcy5zb25hdHlwZS5vcmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBcImh0dHBzOi8vb3NzLnNvbmF0eXBlLm9yZ1wiIG9yIG5vbmUgd2hlbiBwdWJsaXNoaW5nIHRvIE1hdmVuIENlbnRyYWxcbiAgICovXG4gIHJlYWRvbmx5IG1hdmVuRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZWQgaW4gbWF2ZW4gc2V0dGluZ3MgZm9yIGNyZWRlbnRpYWwgbG9va3VwIChlLmcuIHVzZSBnaXRodWIgd2hlbiBwdWJsaXNoaW5nIHRvIEdpdEh1YikuXG4gICAqXG4gICAqIFNldCB0byBgY2VudHJhbC1vc3NyaGAgdG8gcHVibGlzaCB0byBNYXZlbiBDZW50cmFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImNlbnRyYWwtb3NzcmhcIiAoTWF2ZW4gQ2VudHJhbCkgb3IgXCJnaXRodWJcIiB3aGVuIHVzaW5nIEdpdEh1YiBQYWNrYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5TZXJ2ZXJJZD86IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCByZXBvc2l0b3J5IHdoZW4gbm90IGRlcGxveWluZyB0byBNYXZlbiBDZW50cmFsXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5SZXBvc2l0b3J5VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IG5hbWUgd2hpY2ggY29udGFpbnMgdGhlIEdQRyBwcml2YXRlIGtleSBvciBmaWxlIHRoYXQgaW5jbHVkZXNcbiAgICogaXQuIFRoaXMgaXMgdXNlZCB0byBzaWduIHlvdXIgTWF2ZW5cbiAgICogcGFja2FnZXMuIFNlZSBpbnN0cnVjdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvcHVibGliI21hdmVuXG4gICAqIEBkZWZhdWx0IFwiTUFWRU5fR1BHX1BSSVZBVEVfS0VZXCIgb3Igbm90IHNldCB3aGVuIHVzaW5nIEdpdEh1YiBQYWNrYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5HcGdQcml2YXRlS2V5U2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IG5hbWUgd2hpY2ggY29udGFpbnMgdGhlIEdQRyBwcml2YXRlIGtleSBvciBmaWxlIHRoYXQgaW5jbHVkZXNcbiAgICogaXQuIFRoaXMgaXMgdXNlZCB0byBzaWduIHlvdXIgTWF2ZW4gcGFja2FnZXMuIFNlZSBpbnN0cnVjdGlvbnMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvcHVibGliI21hdmVuXG4gICAqIEBkZWZhdWx0IFwiTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0VcIiBvciBub3Qgc2V0IHdoZW4gdXNpbmcgR2l0SHViIFBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBtYXZlbkdwZ1ByaXZhdGVLZXlQYXNzcGhyYXNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IG5hbWUgd2hpY2ggY29udGFpbnMgdGhlIFVzZXJuYW1lIGZvciBtYXZlbiByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBGb3IgTWF2ZW4gQ2VudHJhbCwgeW91IHdpbGwgbmVlZCB0byBDcmVhdGUgSklSQSBhY2NvdW50IGFuZCB0aGVuIHJlcXVlc3QgYVxuICAgKiBuZXcgcHJvamVjdCAoc2VlIGxpbmtzKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2lzc3Vlcy5zb25hdHlwZS5vcmcvc2VjdXJlL1NpZ251cFxuICAgKiBAc2VlIGh0dHBzOi8vaXNzdWVzLnNvbmF0eXBlLm9yZy9zZWN1cmUvQ3JlYXRlSXNzdWUuanNwYT9pc3N1ZXR5cGU9MjEmcGlkPTEwMTM0XG4gICAqXG4gICAqIEBkZWZhdWx0IFwiTUFWRU5fVVNFUk5BTUVcIiBvciB0aGUgR2l0SHViIEFjdG9yIHdoZW4gdXNpbmcgR2l0SHViIFBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBtYXZlblVzZXJuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IG5hbWUgd2hpY2ggY29udGFpbnMgdGhlIFBhc3N3b3JkIGZvciBtYXZlbiByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBGb3IgTWF2ZW4gQ2VudHJhbCwgeW91IHdpbGwgbmVlZCB0byBDcmVhdGUgSklSQSBhY2NvdW50IGFuZCB0aGVuIHJlcXVlc3QgYVxuICAgKiBuZXcgcHJvamVjdCAoc2VlIGxpbmtzKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2lzc3Vlcy5zb25hdHlwZS5vcmcvc2VjdXJlL1NpZ251cFxuICAgKiBAc2VlIGh0dHBzOi8vaXNzdWVzLnNvbmF0eXBlLm9yZy9zZWN1cmUvQ3JlYXRlSXNzdWUuanNwYT9pc3N1ZXR5cGU9MjEmcGlkPTEwMTM0XG4gICAqXG4gICAqIEBkZWZhdWx0IFwiTUFWRU5fUEFTU1dPUkRcIiBvciBcIkdJVEhVQl9UT0tFTlwiIHdoZW4gdXNpbmcgR2l0SHViIFBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBtYXZlblBhc3N3b3JkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IG5hbWUgd2hpY2ggY29udGFpbnMgdGhlIE1hdmVuIENlbnRyYWwgKHNvbmF0eXBlKSBzdGFnaW5nXG4gICAqIHByb2ZpbGUgSUQgKGUuZy4gNjhhMDUzNjMwODMxNzQpLiBTdGFnaW5nIHByb2ZpbGUgSUQgY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgKiBVUkwgb2YgdGhlIFwiUmVsZWFzZXNcIiBzdGFnaW5nIHByb2ZpbGUgdW5kZXIgXCJTdGFnaW5nIFByb2ZpbGVzXCIgaW5cbiAgICogaHR0cHM6Ly9vc3Muc29uYXR5cGUub3JnIChlLmcuXG4gICAqIGh0dHBzOi8vb3NzLnNvbmF0eXBlLm9yZy8jc3RhZ2luZ1Byb2ZpbGVzOzExYTMzNDUxMjM0NTIxKVxuXG4gICAqIEBkZWZhdWx0IFwiTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEXCIgb3Igbm90IHNldCB3aGVuIHVzaW5nIEdpdEh1YiBQYWNrYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5TdGFnaW5nUHJvZmlsZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIEdvIHJlbGVhc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdvUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBDb21tb25QdWJsaXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHRoYXQgaW5jbHVkZXMgYSBwZXJzb25hbCBHaXRIdWIgYWNjZXNzIHRva2VuIHVzZWQgdG9cbiAgICogcHVzaCB0byB0aGUgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIElnbm9yZWQgaWYgYGdpdGh1YlVzZVNzaGAgb3IgYGdpdGh1YkNyZWRlbnRpYWxzYCBpcyBzZXQuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZ2l0aHViQ3JlZGVudGlhbHNgIHdpdGggYEdpdGh1YkNyZWRlbnRpYWxzLmZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKClgIGluc3RlYWQuXG4gICAqIEBkZWZhdWx0IFwiR09fR0lUSFVCX1RPS0VOXCJcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YlRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHRoYXQgaW5jbHVkZXMgYSBHaXRIdWIgZGVwbG95IGtleSB1c2VkIHRvIHB1c2ggdG8gdGhlXG4gICAqIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGBnaXRodWJVc2VTc2hgIGlzIGBmYWxzZWAgb3IgYGdpdGh1YkNyZWRlbnRpYWxzYCBpcyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiR09fR0lUSFVCX0RFUExPWV9LRVlcIlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViRGVwbG95S2V5U2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgU1NIIHRvIHB1c2ggdG8gR2l0SHViIGluc3RlYWQgb2YgYSBwZXJzb25hbCBhY2NzZXMgdG9rZW4uXG4gICAqXG4gICAqIElnbm9yZWQgaWYgYGdpdGh1YkNyZWRlbnRpYWxzYCBpcyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBnaXRodWJVc2VTc2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlIEFQSSBhY2Nlc3MgdG8gdGhlIEdpdEh1YiByZXBvc2l0b3J5IHVzaW5nIGBHaXRodWJDcmVkZW50aWFsc2AsIGUuZy4gYSBHaXRIdWIgQXBwLlxuICAgKlxuICAgKiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgZ2l0aHViVXNlU3NoYCwgYGdpdGh1YlRva2VuU2VjcmV0YCBvciBgZ2l0aHViRGVwbG95S2V5U2VjcmV0YC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBHaXRIdWIgQXBwIGNyZWRlbnRpYWxzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkNyZWRlbnRpYWxzPzogR2l0aHViQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIEJyYW5jaCB0byBwdXNoIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIm1haW5cIlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0QnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdXNlciBuYW1lIHRvIHVzZSBmb3IgdGhlIHJlbGVhc2UgZ2l0IGNvbW1pdC5cbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IEdpdEh1YiBBY3Rpb25zIHVzZXIgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0VXNlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbWFpbCB0byB1c2UgaW4gdGhlIHJlbGVhc2UgZ2l0IGNvbW1pdC5cbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IEdpdEh1YiBBY3Rpb25zIHVzZXIgZW1haWxcbiAgICovXG4gIHJlYWRvbmx5IGdpdFVzZXJFbWFpbD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbW1pdCBtZXNzYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImNob3JlKHJlbGVhc2UpOiAkVkVSU0lPTlwiXG4gICAqL1xuICByZWFkb25seSBnaXRDb21taXRNZXNzYWdlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVmVyc2lvbkFydGlmYWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgYSB0ZXh0IGZpbGUgKHJlbGF0aXZlIHRvIGBkaXN0L2ApIHRoYXQgY29udGFpbnMgdGhlIHZlcnNpb24gbnVtYmVyLlxuICAgKlxuICAgKiBAZXhhbXBsZSB2ZXJzaW9uLnR4dFxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbkZpbGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIG9mIGEgdGV4dCBmaWxlIChyZWxhdGl2ZSB0byBgZGlzdC9gKSB0aGF0IGNvbnRhaW5zIHRoZSByZWxlYXNlIHRhZy5cbiAgICpcbiAgICogQGV4YW1wbGUgcmVsZWFzZXRhZy50eHRcbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2VUYWdGaWxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiBhbiAubWQgZmlsZSAocmVsYXRpdmUgdG8gYGRpc3QvYCkgdGhhdCBpbmNsdWRlcyB0aGUgY2hhbmdlbG9nIGZvciB0aGUgcmVsZWFzZS5cbiAgICpcbiAgICogQGV4YW1wbGUgY2hhbmdlbG9nLm1kXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2Vsb2dGaWxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIGlmIHRoZSBgcmVnaXN0cnlVcmxgIGlzIGEgQVdTIENvZGVBcnRpZmFjdCByZWdpc3RyeS5cbiAqIEBwYXJhbSByZWdpc3RyeVVybCB1cmwgb2YgcmVnaXN0cnlcbiAqIEByZXR1cm5zIHRydWUgZm9yIEFXUyBDb2RlQXJ0aWZhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXdzQ29kZUFydGlmYWN0UmVnaXN0cnkoXG4gIHJlZ2lzdHJ5VXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgcmVnaXN0cnlVcmwgJiYgQVdTX0NPREVBUlRJRkFDVF9SRUdJU1RSWV9SRUdFWC50ZXN0KHJlZ2lzdHJ5VXJsKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBJbmZvIGV4dHJhY3RlZCBmcm9tIEFXUyBDb2RlQXJ0aWZhY3QgVVJMXG4gKi9cbmludGVyZmFjZSBBd3NDb2RlQXJ0aWZhY3RJbmZvIHtcbiAgcmVhZG9ubHkgZG9tYWluPzogc3RyaW5nO1xuICByZWFkb25seSBhY2NvdW50Pzogc3RyaW5nO1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2VzIGluZm8gYWJvdXQgY29kZSBhcnRpZmFjdCBkb21haW4gZnJvbSBnaXZlbiBBV1MgY29kZSBhcnRpZmFjdCB1cmxcbiAqIEBwYXJhbSB1cmwgT2YgY29kZSBhcnRpZmFjdCBkb21haW5cbiAqIEByZXR1cm5zIGRvbWFpbiwgYWNjb3VudCwgYW5kIHJlZ2lvbiBvZiBjb2RlIGFydGlmYWN0IGRvbWFpblxuICovXG5mdW5jdGlvbiBhd3NDb2RlQXJ0aWZhY3RJbmZvRnJvbVVybCh1cmw/OiBzdHJpbmcpOiBBd3NDb2RlQXJ0aWZhY3RJbmZvIHtcbiAgY29uc3QgY2FwdHVyZVJlZ2V4ID1cbiAgICAvKFthLXowLTktXSspLSguKylcXC5kXFwuY29kZWFydGlmYWN0XFwuKC4rKVxcLmFtYXpvbmF3c1xcLmNvbS87XG4gIGNvbnN0IG1hdGNoZXMgPSB1cmw/Lm1hdGNoKGNhcHR1cmVSZWdleCkgPz8gW107XG4gIGNvbnN0IFtfLCBkb21haW4sIGFjY291bnQsIHJlZ2lvbl0gPSBtYXRjaGVzO1xuICByZXR1cm4geyBkb21haW4sIGFjY291bnQsIHJlZ2lvbiB9O1xufVxuXG4vKipcbiAqIFB1Ymxpc2hpbmcgb3B0aW9ucyBmb3IgR2l0SHViIHJlbGVhc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VzUHVibGlzaE9wdGlvbnNcbiAgZXh0ZW5kcyBWZXJzaW9uQXJ0aWZhY3RPcHRpb25zLCBDb21tb25QdWJsaXNoT3B0aW9ucyB7fVxuXG4vKipcbiAqIFB1Ymxpc2hpbmcgb3B0aW9ucyBmb3IgR2l0IHJlbGVhc2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0UHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBWZXJzaW9uQXJ0aWZhY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiBhbiAubWQgZmlsZSB0aGF0IGluY2x1ZGVzIHRoZSBwcm9qZWN0LWxldmVsIGNoYW5nZWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RDaGFuZ2Vsb2dGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCcmFuY2ggdG8gcHVzaCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJtYWluXCJcbiAgICovXG4gIHJlYWRvbmx5IGdpdEJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgZ2l0LXB1c2ggY29tbWFuZC5cbiAgICpcbiAgICogUnVucyBhcyBhIHNoZWxsIGNvbW1hbmQgaW4gdGhlIGBwdWJsaXNoOmdpdGAgdGFzayAtIHdoZXJlIHJlbGVhc2VcbiAgICogY3JlZGVudGlhbHMgYXJlIGluIHNjb3BlIC0gcmVwbGFjaW5nIHRoZSBkZWZhdWx0XG4gICAqIGBnaXQgcHVzaCAtLWZvbGxvdy10YWdzIG9yaWdpbiA8YnJhbmNoPmAuIFNoZWxsIHN5bnRheCBpcyBpbnRlcnByZXRlZCwgc29cbiAgICoga2VlcCBpdCBhIGxpdGVyYWwgY29tbWFuZC5cbiAgICpcbiAgICogU2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIHB1c2hpbmcuXG4gICAqL1xuICByZWFkb25seSBnaXRQdXNoQ29tbWFuZD86IHN0cmluZztcbn1cblxudHlwZSBQdWJsaXNoSm9iRmFjdG9yeSA9IChcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIGJyYW5jaE9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4sXG4pID0+IFJlY29yZDxzdHJpbmcsIEpvYj47XG4iXX0=
|
|
736
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbGVhc2UvcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXc4Q0EsOERBTUM7O0FBNzhDRCxvREFBNkQ7QUFDN0QsNENBQXlDO0FBQ3pDLHNDQUEwQztBQUMxQywyREFBd0Q7QUFDeEQsbURBRzZCO0FBUTdCLCtEQUEwRDtBQUMxRCw2REFBNkQ7QUFHN0Qsc0RBQTBEO0FBQzFELHFDQUE0QztBQUM1Qyx3Q0FBd0Q7QUFFeEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBRWhDOzs7Ozs7R0FNRztBQUNILE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsNEVBQTRFO0lBQzVFLDZCQUE2QjtJQUM3QixnR0FBZ0c7SUFDaEcsb0JBQW9CO0lBQ3BCLEdBQUc7Q0FDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUViOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQ3JCLEdBQXVCLEVBQ3ZCLFlBQW9CO0lBRXBCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckUsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUNELE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CLENBQUM7QUFDakQsTUFBTSxxQkFBcUIsR0FBRyxzQkFBc0IsQ0FBQztBQUNyRCxNQUFNLHFCQUFxQixHQUFHLHNCQUFzQixDQUFDO0FBQ3JELE1BQU0sc0JBQXNCLEdB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T3B0aW9ucyB9IGZyb20gXCIuL3JlbGVhc2VcIjtcbmltcG9ydCB7IEFSVElGQUNUX0lEX09VVFBVVCB9IGZyb20gXCIuLi9idWlsZC9wcml2YXRlL2NvbnN0c1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgV29ya2Zsb3dTdGVwcyB9IGZyb20gXCIuLi9naXRodWJcIjtcbmltcG9ydCB7IEdpdEh1YkFjdGlvbnMgfSBmcm9tIFwiLi4vZ2l0aHViL2FjdGlvbnMuY29uc3RcIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUixcbiAgUEVSTUlTU0lPTl9CQUNLVVBfRklMRSxcbn0gZnJvbSBcIi4uL2dpdGh1Yi9jb25zdGFudHNcIjtcbmltcG9ydCB0eXBlIHsgR2l0aHViQ3JlZGVudGlhbHMgfSBmcm9tIFwiLi4vZ2l0aHViL2dpdGh1Yi1jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHR5cGUge1xuICBKb2IsXG4gIEpvYlBlcm1pc3Npb25zLFxuICBKb2JTdGVwLFxuICBUb29scyxcbn0gZnJvbSBcIi4uL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24gfSBmcm9tIFwiLi4vZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgZGVmYXVsdE5wbVRva2VuIH0gZnJvbSBcIi4uL2phdmFzY3JpcHQvbm9kZS1wYWNrYWdlXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBHcm91cFJ1bm5lck9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IGZpbHRlcmVkUnVuc09uT3B0aW9ucyB9IGZyb20gXCIuLi9ydW5uZXItb3B0aW9uc1wiO1xuaW1wb3J0IHsgZXNjYXBlQ29tbWFuZCB9IGZyb20gXCIuLi91dGlsL2RheFwiO1xuaW1wb3J0IHsgQ0hBTkdFU19TSU5DRV9MQVNUX1JFTEVBU0UgfSBmcm9tIFwiLi4vdmVyc2lvblwiO1xuXG5jb25zdCBQVUJMSUJfVkVSU0lPTiA9IFwibGF0ZXN0XCI7XG5cbi8qKlxuICogRmFpbHMgdW5sZXNzIHRoZSBjaGVja2VkIG91dCBicmFuY2ggaXMgdGhlIG9uZSBhIHB1Ymxpc2ggdGFzayByZWxlYXNlcy5cbiAqXG4gKiBDb21wYXJlcyBgQ1VSUkVOVF9CUkFOQ0hgIC0gcmVzb2x2ZWQgYnkgdGhlIHRhc2sncyBkeW5hbWljIGVudiAtIGFnYWluc3RcbiAqIGBQVUJMSVNIX0JSQU5DSGAsIHNvIG5laXRoZXIgdGhlIGJyYW5jaCBuYW1lIG5vciB0aGUgZ2l0IGludm9jYXRpb24gZW5kcyB1cFxuICogaW5zaWRlIGEgY29tbWFuZC4gUnVucyBhcyBhbiBhcmd2IChgbm9kZSAtZSA8c2NyaXB0PmApLCBzbyB0aGVyZSBpcyBubyBzaGVsbC5cbiAqL1xuY29uc3QgQ0hFQ0tfQlJBTkNIX1NDUklQVCA9IFtcbiAgXCJjb25zdCB7IENVUlJFTlRfQlJBTkNIOiBjdXJyZW50LCBQVUJMSVNIX0JSQU5DSDogZXhwZWN0ZWQgfSA9IHByb2Nlc3MuZW52O1wiLFxuICBcImlmIChjdXJyZW50ICE9PSBleHBlY3RlZCkge1wiLFxuICAnICBjb25zb2xlLmVycm9yKGBjYW5ub3QgcHVibGlzaCBmcm9tIGJyYW5jaCBcIiR7Y3VycmVudH1cIjogdGhpcyB0YXNrIHB1Ymxpc2hlcyBcIiR7ZXhwZWN0ZWR9XCJgKTsnLFxuICBcIiAgcHJvY2Vzcy5leGl0KDEpO1wiLFxuICBcIn1cIixcbl0uam9pbihcIlxcblwiKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBVUkwncyBob3N0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGhvc3QgZXhhY3RseS5cbiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBjaGVja1xuICogQHBhcmFtIGV4cGVjdGVkSG9zdCBUaGUgZXhwZWN0ZWQgaG9zdCAoZS5nLiwgXCJucG0ucGtnLmdpdGh1Yi5jb21cIilcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIFVSTCdzIGhvc3QgbWF0Y2hlcyBleGFjdGx5XG4gKi9cbmZ1bmN0aW9uIHVybEhvc3RNYXRjaGVzKFxuICB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZXhwZWN0ZWRIb3N0OiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybC5pbmNsdWRlcyhcIjovL1wiKSA/IHVybCA6IGBodHRwczovLyR7dXJsfWApO1xuICAgIHJldHVybiBwYXJzZWQuaG9zdCA9PT0gZXhwZWN0ZWRIb3N0O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmNvbnN0IEdJVEhVQl9QQUNLQUdFU19OUE0gPSBcIm5wbS5wa2cuZ2l0aHViLmNvbVwiO1xuY29uc3QgR0lUSFVCX1BBQ0tBR0VTX01BVkVOID0gXCJtYXZlbi5wa2cuZ2l0aHViLmNvbVwiO1xuY29uc3QgR0lUSFVCX1BBQ0tBR0VTX05VR0VUID0gXCJudWdldC5wa2cuZ2l0aHViLmNvbVwiO1xuY29uc3QgQVJUSUZBQ1RTX0RPV05MT0FEX0RJUiA9IFwiZGlzdFwiO1xuY29uc3QgQVdTX0NPREVBUlRJRkFDVF9SRUdJU1RSWV9SRUdFWCA9IC9cXC5jb2RlYXJ0aWZhY3RcXC4uKlxcLmFtYXpvbmF3c1xcLmNvbS87XG5jb25zdCBQVUJMSUJfVE9PTENIQUlOOiBSZWNvcmQ8c3RyaW5nLCBUb29scz4gPSB7XG4gIGpzOiB7fSxcbiAgamF2YTogeyBqYXZhOiB7IHZlcnNpb246IFwiMTFcIiB9IH0sXG4gIHB5dGhvbjogeyBweXRob246IHsgdmVyc2lvbjogXCIzLnhcIiB9IH0sXG4gIGdvOiB7IGdvOiB7IHZlcnNpb246IFwiXjEuMTguMFwiIH0gfSxcbiAgZG90bmV0OiB7IGRvdG5ldDogeyB2ZXJzaW9uOiBcIjYueFwiIH0gfSxcbn07XG5jb25zdCBQVUJMSVNIX0pPQl9QUkVGSVggPSBcInJlbGVhc2VfXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFB1Ymxpc2hlcmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGlzaGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgam9iIElEIHRoYXQgcHJvZHVjZXMgdGhlIGJ1aWxkIGFydGlmYWN0cy4gQWxsIHB1Ymxpc2ggam9icyB3aWxsIHRha2UgYSBkZXBlbmRlbmN5IG9uIHRoaXMgam9iLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRKb2JJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIEdpdEh1YiB3b3JrZmxvdyBleHByZXNzaW9uIHVzZWQgYXMgYSBjb25kaXRpb24gZm9yIHB1Ymxpc2hlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29uZGl0aW9uXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhcnRpZmFjdCB0byBkb3dubG9hZCAoZS5nLiBgZGlzdGApLlxuICAgKlxuICAgKiBUaGUgYXJ0aWZhY3QgaXMgZXhwZWN0ZWQgdG8gaW5jbHVkZSBhIHN1YmRpcmVjdG9yeSBmb3IgZWFjaCByZWxlYXNlIHRhcmdldDpcbiAgICogYGdvYCAoR2l0SHViKSwgYGRvdG5ldGAgKE51R2V0KSwgYGphdmFgIChNYXZlbiksIGBqc2AgKG5wbSksIGBweXRob25gXG4gICAqIChQeVBJKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWJcbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb2RlIHZlcnNpb24gdG8gc2V0dXAgaW4gR2l0SHViIHdvcmtmbG93cyBpZiBhbnkgbm9kZS1iYXNlZCBDTEkgdXRpbGl0aWVzXG4gICAqIGFyZSBuZWVkZWQuIEZvciBleGFtcGxlIGBwdWJsaWJgLCB0aGUgQ0xJIHByb2plbiB1c2VzIHRvIHB1Ymxpc2ggcmVsZWFzZXMsXG4gICAqIGlzIGFuIG5wbSBsaWJyYXJ5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBsdHMvKlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dOb2RlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udGFpbmVyIGltYWdlIHRvIHVzZSBmb3IgR2l0SHViIHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IGltYWdlXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd0NvbnRhaW5lckltYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIHJlcXVpcmVtZW50IGZvciBgcHVibGliYC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJsYXRlc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGliVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGlzc3VlIHdoZW4gYSBwdWJsaXNoIHRhc2sgZmFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlSXNzdWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGlzc3VlIG1hcmtpbmcgZmFpbGVkIHB1Ymxpc2ggdGFza3MuXG4gICAqIE9ubHkgYXBwbGllcyBpZiBgZmFpbHVyZUlzc3VlYCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImZhaWxlZC1yZWxlYXNlXCJcbiAgICovXG4gIHJlYWRvbmx5IGZhaWx1cmVJc3N1ZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIHNlbGVjdGlvbiBsYWJlbHNcbiAgICogQGRlZmF1bHQgW1widWJ1bnR1LWxhdGVzdFwiXVxuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgYnkgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93UnVuc09uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdpdGh1YiBSdW5uZXIgR3JvdXAgc2VsZWN0aW9uIG9wdGlvbnNcbiAgICogQGRlc2NyaXB0aW9uIERlZmluZXMgYSB0YXJnZXQgUnVubmVyIEdyb3VwIGJ5IG5hbWUgYW5kL29yIGxhYmVsc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgYm90aCBgcnVuc09uYCBhbmQgYHJ1bnNPbkdyb3VwYCBhcmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd1J1bnNPbkdyb3VwPzogR3JvdXBSdW5uZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgcHVibGlzaGluZyB0YXNrcyB0aGF0IGNhbiBiZSBleGVjdXRlZCBtYW51YWxseSBhcyB3ZWxsIGFzIHdvcmtmbG93cy5cbiAgICpcbiAgICogTm9ybWFsbHksIHB1Ymxpc2hpbmcgb25seSBoYXBwZW5zIHdpdGhpbiBhdXRvbWF0ZWQgd29ya2Zsb3dzLiBFbmFibGUgdGhpc1xuICAgKiBpbiBvcmRlciB0byBjcmVhdGUgYSBwdWJsaXNoaW5nIHRhc2sgZm9yIGVhY2ggcHVibGlzaGluZyBhY3Rpdml0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hUYXNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvIG5vdCBhY3R1YWxseSBwdWJsaXNoLCBvbmx5IHByaW50IHRoZSBjb21tYW5kcyB0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkIGluc3RlYWQuXG4gICAqXG4gICAqIFVzZWZ1bCBpZiB5b3Ugd2lzaCB0byBibG9jayBhbGwgcHVibGlzaGluZyBmcm9tIGEgc2luZ2xlIG9wdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBHaXRIdWIgam9icyBmb3IgcHVibGlzaGluZyBtb2R1bGVzIHRvIHBhY2thZ2UgbWFuYWdlcnMuXG4gKlxuICogVW5kZXIgdGhlIGhvb2QsIGl0IHVzZXMgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvcHVibGliXG4gKi9cbmV4cG9ydCBjbGFzcyBQdWJsaXNoZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBVQkxJU0hfR0lUX1RBU0tfTkFNRSA9IFwicHVibGlzaDpnaXRcIjtcblxuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRKb2JJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3ROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWJWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBmYWlsdXJlSXNzdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFpbHVyZUlzc3VlTGFiZWw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBydW5zT24/OiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBydW5zT25Hcm91cD86IEdyb3VwUnVubmVyT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBwdWJsaXNoVGFza3M6IGJvb2xlYW47XG5cbiAgLy8gZnVuY3Rpb25zIHRoYXQgY3JlYXRlIGpvYnMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgYnJhbmNoXG4gIHByaXZhdGUgcmVhZG9ubHkgX2pvYkZhY3RvcmllczogUHVibGlzaEpvYkZhY3RvcnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2dpdEh1YlByZVB1Ymxpc2hpbmc6IEpvYlN0ZXBbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9naXRIdWJQb3N0UHVibGlzaGluZzogSm9iU3RlcFtdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkcnlSdW46IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd05vZGVWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dDb250YWluZXJJbWFnZT86IHN0cmluZztcblxuICAvLyBMaXN0IG9mIHB1Ymxpc2ggam9icyBhZGRlZCB0byB0aGUgcHVibGlzaGVyXG4gIC8vIE1hcHMgYmV0d2VlbiB0aGUgYmFzZW5hbWUgYW5kIHRoZSBqb2JuYW1lXG4gIHByaXZhdGUgcmVhZG9ubHkgcHVibGlzaEpvYnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBQdWJsaXNoZXJPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmJ1aWxkSm9iSWQgPSBvcHRpb25zLmJ1aWxkSm9iSWQ7XG4gICAgdGhpcy5hcnRpZmFjdE5hbWUgPSBvcHRpb25zLmFydGlmYWN0TmFtZTtcbiAgICB0aGlzLnB1YmxpYlZlcnNpb24gPSBvcHRpb25zLnB1YmxpYlZlcnNpb24gPz8gUFVCTElCX1ZFUlNJT047XG4gICAgdGhpcy5jb25kaXRpb24gPSBvcHRpb25zLmNvbmRpdGlvbjtcbiAgICB0aGlzLmRyeVJ1biA9IG9wdGlvbnMuZHJ5UnVuID8/IGZhbHNlO1xuICAgIHRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyBcImx0cy8qXCI7XG4gICAgdGhpcy53b3JrZmxvd0NvbnRhaW5lckltYWdlID0gb3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlO1xuXG4gICAgdGhpcy5mYWlsdXJlSXNzdWUgPSBvcHRpb25zLmZhaWx1cmVJc3N1ZSA/PyBmYWxzZTtcbiAgICB0aGlzLmZhaWx1cmVJc3N1ZUxhYmVsID0gb3B0aW9ucy5mYWlsdXJlSXNzdWVMYWJlbCA/PyBcImZhaWxlZC1yZWxlYXNlXCI7XG4gICAgdGhpcy5wdWJsaXNoVGFza3MgPSBvcHRpb25zLnB1Ymxpc2hUYXNrcyA/PyBmYWxzZTtcbiAgICB0aGlzLnJ1bnNPbiA9IG9wdGlvbnMud29ya2Zsb3dSdW5zT247XG4gICAgdGhpcy5ydW5zT25Hcm91cCA9IG9wdGlvbnMud29ya2Zsb3dSdW5zT25Hcm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgYFJlbGVhc2VgIHRvIGFkZCB0aGUgcHVibGlzaGluZyBqb2JzIHRvIGEgcmVsZWFzZSB3b3JrZmxvd1xuICAgKiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBicmFuY2guXG4gICAqIEBwYXJhbSBicmFuY2ggVGhlIGJyYW5jaCBuYW1lXG4gICAqIEBwYXJhbSBvcHRpb25zIEJyYW5jaCBvcHRpb25zXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9yZW5kZXJKb2JzRm9yQnJhbmNoKFxuICAgIGJyYW5jaDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4sXG4gICk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuICAgIGxldCBqb2JzOiBSZWNvcmQ8c3RyaW5nLCBKb2I+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2YgdGhpcy5fam9iRmFjdG9yaWVzKSB7XG4gICAgICBqb2JzID0ge1xuICAgICAgICAuLi5qb2JzLFxuICAgICAgICAuLi5mYWN0b3J5KGJyYW5jaCwgb3B0aW9ucyksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBqb2JzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcHJlIHB1Ymxpc2hpbmcgc3RlcHMgZm9yIHRoZSBHaXRIdWIgcmVsZWFzZSBqb2IuXG4gICAqXG4gICAqIEBwYXJhbSBzdGVwcyBUaGUgc3RlcHMuXG4gICAqL1xuICBwdWJsaWMgYWRkR2l0SHViUHJlUHVibGlzaGluZ1N0ZXBzKC4uLnN0ZXBzOiBKb2JTdGVwW10pIHtcbiAgICB0aGlzLl9naXRIdWJQcmVQdWJsaXNoaW5nLnB1c2goLi4uc3RlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcG9zdCBwdWJsaXNoaW5nIHN0ZXBzIGZvciB0aGUgR2l0SHViIHJlbGVhc2Ugam9iLlxuICAgKlxuICAgKiBAcGFyYW0gc3RlcHMgVGhlIHN0ZXBzLlxuICAgKi9cbiAgcHVibGljIGFkZEdpdEh1YlBvc3RQdWJsaXNoaW5nU3RlcHMoLi4uc3RlcHM6IEpvYlN0ZXBbXSkge1xuICAgIHRoaXMuX2dpdEh1YlBvc3RQdWJsaXNoaW5nLnB1c2goLi4uc3RlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggdG8gZ2l0LlxuICAgKlxuICAgKiBUaGlzIGluY2x1ZGVzIGdlbmVyYXRpbmcgYSBwcm9qZWN0LWxldmVsIGNoYW5nZWxvZyBhbmQgcmVsZWFzZSB0YWdzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zXG4gICAqL1xuICBwdWJsaWMgcHVibGlzaFRvR2l0KG9wdGlvbnM6IEdpdFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgY29uc3QgcmVsZWFzZVRhZ0ZpbGUgPSBvcHRpb25zLnJlbGVhc2VUYWdGaWxlO1xuICAgIGNvbnN0IHZlcnNpb25GaWxlID0gb3B0aW9ucy52ZXJzaW9uRmlsZTtcbiAgICBjb25zdCBjaGFuZ2Vsb2cgPSBvcHRpb25zLmNoYW5nZWxvZ0ZpbGU7XG4gICAgY29uc3QgcHJvamVjdENoYW5nZWxvZ0ZpbGUgPSBvcHRpb25zLnByb2plY3RDaGFuZ2Vsb2dGaWxlO1xuICAgIGNvbnN0IGdpdEJyYW5jaCA9IG9wdGlvbnMuZ2l0QnJhbmNoID8/IFwibWFpblwiO1xuXG4gICAgY29uc3QgdGFza05hbWUgPVxuICAgICAgZ2l0QnJhbmNoID09PSBcIm1haW5cIiB8fCBnaXRCcmFuY2ggPT09IFwibWFzdGVyXCJcbiAgICAgICAgPyBQdWJsaXNoZXIuUFVCTElTSF9HSVRfVEFTS19OQU1FXG4gICAgICAgIDogYCR7UHVibGlzaGVyLlBVQkxJU0hfR0lUX1RBU0tfTkFNRX06JHtnaXRCcmFuY2h9YDtcblxuICAgIGNvbnN0IHB1Ymxpc2hUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2sodGFza05hbWUsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByZXBlbmRzIHRoZSByZWxlYXNlIGNoYW5nZWxvZyBvbnRvIHRoZSBwcm9qZWN0IGNoYW5nZWxvZywgY3JlYXRlcyBhIHJlbGVhc2UgY29tbWl0LCBhbmQgdGFncyB0aGUgcmVsZWFzZVwiLFxuICAgICAgZW52OiB7XG4gICAgICAgIENIQU5HRUxPRzogY2hhbmdlbG9nLFxuICAgICAgICBSRUxFQVNFX1RBR19GSUxFOiByZWxlYXNlVGFnRmlsZSxcbiAgICAgICAgUFJPSkVDVF9DSEFOR0VMT0dfRklMRTogcHJvamVjdENoYW5nZWxvZ0ZpbGUgPz8gXCJcIixcbiAgICAgICAgVkVSU0lPTl9GSUxFOiB2ZXJzaW9uRmlsZSxcbiAgICAgIH0sXG4gICAgICBjb25kaXRpb246IENIQU5HRVNfU0lOQ0VfTEFTVF9SRUxFQVNFLFxuICAgIH0pO1xuICAgIGlmIChwcm9qZWN0Q2hhbmdlbG9nRmlsZSkge1xuICAgICAgcHVibGlzaFRhc2suYnVpbHRpbihcInJlbGVhc2UvdXBkYXRlLWNoYW5nZWxvZ1wiKTtcbiAgICB9XG4gICAgcHVibGlzaFRhc2suYnVpbHRpbihcInJlbGVhc2UvdGFnLXZlcnNpb25cIik7XG5cbiAgICAvLyBhbiBleHBsaWNpdCBlbXB0eSBzdHJpbmcgZGlzYWJsZXMgcHVzaGluZ1xuICAgIGlmIChvcHRpb25zLmdpdFB1c2hDb21tYW5kICE9PSBcIlwiKSB7XG4gICAgICBpZiAob3B0aW9ucy5naXRQdXNoQ29tbWFuZCkge1xuICAgICAgICBwdWJsaXNoVGFzay5leGVjKG9wdGlvbnMuZ2l0UHVzaENvbW1hbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVibGlzaFRhc2suZXhlY0FyZ3MoW1xuICAgICAgICAgIFwiZ2l0XCIsXG4gICAgICAgICAgXCJwdXNoXCIsXG4gICAgICAgICAgXCItLWZvbGxvdy10YWdzXCIsXG4gICAgICAgICAgXCJvcmlnaW5cIixcbiAgICAgICAgICBnaXRCcmFuY2gsXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoVGFzaztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgR2l0SHViIFJlbGVhc2UuXG4gICAqXG4gICAqIFRvbGVyYXRlcyBhIHJlbGVhc2UgdGhhdCBhbHJlYWR5IGV4aXN0cywgc28gdGhhdCByZS1ydW5uaW5nIGEgcmVsZWFzZSBpc1xuICAgKiBhIG5vLW9wIHJhdGhlciB0aGFuIGEgZmFpbHVyZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YlJlbGVhc2VzKG9wdGlvbnM6IEdpdEh1YlJlbGVhc2VzUHVibGlzaE9wdGlvbnMpIHtcbiAgICBjb25zdCBqb2JOYW1lID0gXCJnaXRodWJcIjtcbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2Ioam9iTmFtZSwgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWdpc3RyeU5hbWU6IFwiR2l0SHViIFJlbGVhc2VzXCIsXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwczogb3B0aW9ucy5wcmVQdWJsaXNoU3RlcHMgPz8gdGhpcy5fZ2l0SHViUHJlUHVibGlzaGluZyxcbiAgICAgICAgcG9zdFB1Ymxpc2hTdGVwczpcbiAgICAgICAgICBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gdGhpcy5fZ2l0SHViUG9zdFB1Ymxpc2hpbmcsXG4gICAgICAgIHB1Ymxpc2hUb29sczogb3B0aW9ucy5wdWJsaXNoVG9vbHMsXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIH0sXG4gICAgICAgIG5lZWRzOiBPYmplY3QuZW50cmllcyh0aGlzLnB1Ymxpc2hKb2JzKVxuICAgICAgICAgIC5maWx0ZXIoKFtuYW1lLCBfXSkgPT4gbmFtZSAhPSBqb2JOYW1lKVxuICAgICAgICAgIC5tYXAoKFtfLCBqb2JdKSA9PiBqb2IpLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBydW46IHRoaXMuZ2l0aHViUmVsZWFzZUNvbW1hbmQob3B0aW9ucywgYnJhbmNoT3B0aW9ucyksXG4gICAgICAgIHJlbGVhc2VTdGVwSWY6IFwiJHt7ICFpbnB1dHMuZHJ5X3J1biB9fVwiLFxuICAgICAgICBpc1B1YkxpYjogZmFsc2UsXG4gICAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgICAgR0lUSFVCX1RPS0VOOiBcIiR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYXJ0aWZhY3RzIGZyb20gYGpzLyoqYCB0byBucG0uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9OcG0ob3B0aW9uczogTnBtUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIGlmIChvcHRpb25zLnRydXN0ZWRQdWJsaXNoaW5nICYmIG9wdGlvbnMubnBtVG9rZW5TZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgdXNlIG5wbVRva2VuU2VjcmV0IHdoZW4gdHJ1c3RlZFB1Ymxpc2hpbmcgaXMgZW5hYmxlZC4gXCIgK1xuICAgICAgICAgIFwiVHJ1c3RlZCBwdWJsaXNoaW5nIHVzZXMgT0lEQyB0b2tlbnMgZm9yIGF1dGhlbnRpY2F0aW9uIGluc3RlYWQgb2YgTlBNIHRva2Vucy4gXCIgK1xuICAgICAgICAgIFwiUmVtb3ZlIHRoZSBucG1Ub2tlblNlY3JldCBvcHRpb24gdG8gdXNlIHRydXN0ZWQgcHVibGlzaGluZy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJ1c3RlZFB1Ymxpc2hlciA9IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmcgPyBcInRydWVcIiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBucG1Qcm92ZW5hbmNlID0gb3B0aW9ucy5ucG1Qcm92ZW5hbmNlID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBpc0dpdEh1YlBhY2thZ2VzID0gdXJsSG9zdE1hdGNoZXMoXG4gICAgICBvcHRpb25zLnJlZ2lzdHJ5LFxuICAgICAgR0lUSFVCX1BBQ0tBR0VTX05QTSxcbiAgICApO1xuICAgIGNvbnN0IGlzQXdzQ29kZUFydGlmYWN0ID0gaXNBd3NDb2RlQXJ0aWZhY3RSZWdpc3RyeShvcHRpb25zLnJlZ2lzdHJ5KTtcbiAgICBjb25zdCBpc0F3c0NvZGVBcnRpZmFjdFdpdGhPaWRjID1cbiAgICAgIGlzQXdzQ29kZUFydGlmYWN0ICYmXG4gICAgICBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlciA9PT1cbiAgICAgICAgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDO1xuICAgIGNvbnN0IG5lZWRzSWRUb2tlbldyaXRlID1cbiAgICAgIGlzQXdzQ29kZUFydGlmYWN0V2l0aE9pZGMgfHwgdHJ1c3RlZFB1Ymxpc2hlciB8fCBucG1Qcm92ZW5hbmNlO1xuICAgIGNvbnN0IG5wbVRva2VuID0gdHJ1c3RlZFB1Ymxpc2hlclxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZGVmYXVsdE5wbVRva2VuKG9wdGlvbnMubnBtVG9rZW5TZWNyZXQsIG9wdGlvbnMucmVnaXN0cnkpO1xuXG4gICAgY29uc3QgcHJlUHVibGlzaFN0ZXBzOiBKb2JTdGVwW10gPSBvcHRpb25zLnByZVB1Ymxpc2hTdGVwcyA/PyBbXTtcblxuICAgIGlmIChpc0F3c0NvZGVBcnRpZmFjdFdpdGhPaWRjKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uYWNjZXNzS2V5SWRTZWNyZXQgfHxcbiAgICAgICAgb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJhY2Nlc3MgYW5kIHNlY3JldCBrZXkgcGFpciBzaG91bGQgbm90IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgR0lUSFVCX09JREMgYXV0aCBwcm92aWRlciBmb3IgQVdTIENvZGVBcnRpZmFjdFwiLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5yb2xlVG9Bc3N1bWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdcInJvbGVUb0Fzc3VtZVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgR0lUSFVCX09JREMgZm9yIEFXUyBDb2RlQXJ0aWZhY3Qgb3B0aW9ucycsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWdpb25DYXB0dXJlUmVnZXggPSAvY29kZWFydGlmYWN0XFwuKC4rKVxcLmFtYXpvbmF3c1xcLmNvbS87XG4gICAgICBjb25zdCByZWdpb24gPSBvcHRpb25zLnJlZ2lzdHJ5Py5tYXRjaChyZWdpb25DYXB0dXJlUmVnZXgpPy5bMV07XG4gICAgICBwcmVQdWJsaXNoU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiQ29uZmlndXJlIEFXUyBDcmVkZW50aWFscyB2aWEgR2l0SHViIE9JREMgUHJvdmlkZXJcIixcbiAgICAgICAgdXNlczogR2l0SHViQWN0aW9ucy5BV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOiBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnMucm9sZVRvQXNzdW1lLFxuICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiByZWdpb24sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoXCJucG1cIiwgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uanMsXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwcyxcbiAgICAgICAgcG9zdFB1Ymxpc2hTdGVwczogb3B0aW9ucy5wb3N0UHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBydW46IHRoaXMucHVibGliQ29tbWFuZChcInB1YmxpYi1ucG1cIiksXG4gICAgICAgIHJlZ2lzdHJ5TmFtZTogXCJucG1cIixcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTlBNX0RJU1RfVEFHOiBicmFuY2hPcHRpb25zLm5wbURpc3RUYWcgPz8gXCJsYXRlc3RcIixcbiAgICAgICAgICBOUE1fUkVHSVNUUlk6IG9wdGlvbnMucmVnaXN0cnksXG4gICAgICAgICAgTlBNX0NPTkZJR19QUk9WRU5BTkNFOiBucG1Qcm92ZW5hbmNlLFxuICAgICAgICAgIE5QTV9UUlVTVEVEX1BVQkxJU0hFUjogdHJ1c3RlZFB1Ymxpc2hlcixcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBpZFRva2VuOiBuZWVkc0lkVG9rZW5Xcml0ZSA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgICBwYWNrYWdlczogaXNHaXRIdWJQYWNrYWdlcyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgICAgTlBNX1RPS0VOOiBucG1Ub2tlbiA/IHNlY3JldChucG1Ub2tlbikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgLy8gaWYgd2UgYXJlIHB1Ymxpc2hpbmcgdG8gQVdTIENvZGVBcnRpZmFjdCwgcGFzcyBBV1MgYWNjZXNzIGtleXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgTlBNX1RPS0VOIHVzaW5nIEFXUyBDTEkuXG4gICAgICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6XG4gICAgICAgICAgICBpc0F3c0NvZGVBcnRpZmFjdCAmJiAhaXNBd3NDb2RlQXJ0aWZhY3RXaXRoT2lkY1xuICAgICAgICAgICAgICA/IHNlY3JldChcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uYWNjZXNzS2V5SWRTZWNyZXQgPz9cbiAgICAgICAgICAgICAgICAgICAgXCJBV1NfQUNDRVNTX0tFWV9JRFwiLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOlxuICAgICAgICAgICAgaXNBd3NDb2RlQXJ0aWZhY3QgJiYgIWlzQXdzQ29kZUFydGlmYWN0V2l0aE9pZGNcbiAgICAgICAgICAgICAgPyBzZWNyZXQoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnNlY3JldEFjY2Vzc0tleVNlY3JldCA/P1xuICAgICAgICAgICAgICAgICAgICBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgQVdTX1JPTEVfVE9fQVNTVU1FOlxuICAgICAgICAgICAgaXNBd3NDb2RlQXJ0aWZhY3QgJiYgIWlzQXdzQ29kZUFydGlmYWN0V2l0aE9pZGNcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnJvbGVUb0Fzc3VtZVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGFydGlmYWN0cyBmcm9tIGBkb3RuZXQvKipgIHRvIE51R2V0IEdhbGxlcnkuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9OdWdldChvcHRpb25zOiBOdWdldFB1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy50cnVzdGVkUHVibGlzaGluZyAmJiBvcHRpb25zLm51Z2V0QXBpS2V5U2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVzZSBudWdldEFwaUtleVNlY3JldCB3aGVuIHRydXN0ZWRQdWJsaXNoaW5nIGlzIGVuYWJsZWQuIFwiICtcbiAgICAgICAgICBcIlRydXN0ZWQgcHVibGlzaGluZyB1c2VzIE9JREMgdG9rZW5zIGZvciBhdXRoZW50aWNhdGlvbiBpbnN0ZWFkIG9mIEFQSSBrZXlzLiBcIiArXG4gICAgICAgICAgXCJSZW1vdmUgdGhlIG51Z2V0QXBpS2V5U2VjcmV0IG9wdGlvbiB0byB1c2UgdHJ1c3RlZCBwdWJsaXNoaW5nLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0dpdEh1YlBhY2thZ2VzID0gdXJsSG9zdE1hdGNoZXMoXG4gICAgICBvcHRpb25zLm51Z2V0U2VydmVyLFxuICAgICAgR0lUSFVCX1BBQ0tBR0VTX05VR0VULFxuICAgICk7XG4gICAgY29uc3QgbmVlZHNJZFRva2VuV3JpdGUgPSBvcHRpb25zLnRydXN0ZWRQdWJsaXNoaW5nO1xuXG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKFxuICAgICAgXCJudWdldFwiLFxuICAgICAgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiAoe1xuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uZG90bmV0LFxuICAgICAgICBwcmVQdWJsaXNoU3RlcHM6IG9wdGlvbnMucHJlUHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgICBwb3N0UHVibGlzaFN0ZXBzOiBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmdpdGh1YkVudmlyb25tZW50ID8/IGJyYW5jaE9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIHJ1bjogdGhpcy5wdWJsaWJDb21tYW5kKFwicHVibGliLW51Z2V0XCIpLFxuICAgICAgICByZWdpc3RyeU5hbWU6IFwiTnVHZXQgR2FsbGVyeVwiLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgcGFja2FnZXM6IGlzR2l0SHViUGFja2FnZXMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlkVG9rZW46IG5lZWRzSWRUb2tlbldyaXRlID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTlVHRVRfVFJVU1RFRF9QVUJMSVNIRVI6IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmdcbiAgICAgICAgICAgID8gXCJ0cnVlXCJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICAgIE5VR0VUX0FQSV9LRVk6IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmdcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHNlY3JldChcbiAgICAgICAgICAgICAgICBpc0dpdEh1YlBhY2thZ2VzXG4gICAgICAgICAgICAgICAgICA/IFwiR0lUSFVCX1RPS0VOXCJcbiAgICAgICAgICAgICAgICAgIDogKG9wdGlvbnMubnVnZXRBcGlLZXlTZWNyZXQgPz8gXCJOVUdFVF9BUElfS0VZXCIpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIE5VR0VUX1NFUlZFUjogb3B0aW9ucy5udWdldFNlcnZlciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgTlVHRVRfVVNFUk5BTUU6IG9wdGlvbnMudHJ1c3RlZFB1Ymxpc2hpbmdcbiAgICAgICAgICAgID8gc2VjcmV0KG9wdGlvbnMubnVnZXRVc2VybmFtZVNlY3JldCA/PyBcIk5VR0VUX1VTRVJOQU1FXCIpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGFydGlmYWN0cyBmcm9tIGBqYXZhLyoqYCB0byBNYXZlbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHB1Ymxpc2hUb01hdmVuKG9wdGlvbnM6IE1hdmVuUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGlzR2l0SHViUGFja2FnZXMgPSB1cmxIb3N0TWF0Y2hlcyhcbiAgICAgIG9wdGlvbnMubWF2ZW5SZXBvc2l0b3J5VXJsLFxuICAgICAgR0lUSFVCX1BBQ0tBR0VTX01BVkVOLFxuICAgICk7XG4gICAgY29uc3QgaXNHaXRIdWJBY3RvciA9XG4gICAgICBpc0dpdEh1YlBhY2thZ2VzICYmIG9wdGlvbnMubWF2ZW5Vc2VybmFtZSA9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWF2ZW5TZXJ2ZXJJZCA9XG4gICAgICBvcHRpb25zLm1hdmVuU2VydmVySWQgPz8gKGlzR2l0SHViUGFja2FnZXMgPyBcImdpdGh1YlwiIDogXCJjZW50cmFsLW9zc3JoXCIpO1xuXG4gICAgaWYgKGlzR2l0SHViUGFja2FnZXMgJiYgbWF2ZW5TZXJ2ZXJJZCAhPSBcImdpdGh1YlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdwdWJsaXNoaW5nIHRvIEdpdEh1YiBQYWNrYWdlcyByZXF1aXJlcyB0aGUgXCJtYXZlblNlcnZlcklkXCIgdG8gYmUgXCJnaXRodWJcIicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtYXZlblNlcnZlcklkID09PSBcImNlbnRyYWwtb3NzcmhcIiAmJiBvcHRpb25zLm1hdmVuRW5kcG9pbnQgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ3VzdG9tIGVuZHBvaW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHB1Ymxpc2hpbmcgdG8gTWF2ZW4gQ2VudHJhbCAobWF2ZW5TZXJ2ZXJJZDogXCJjZW50cmFsLW9zc3JoXCIpLiBQbGVhc2UgcmVtb3ZlIFwibWF2ZW5FbmRwb2ludFwiIGZyb20gdGhlIG9wdGlvbnMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKFxuICAgICAgXCJtYXZlblwiLFxuICAgICAgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiAoe1xuICAgICAgICByZWdpc3RyeU5hbWU6IFwiTWF2ZW4gQ2VudHJhbFwiLFxuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uamF2YSxcbiAgICAgICAgcHJlUHVibGlzaFN0ZXBzOiBvcHRpb25zLnByZVB1Ymxpc2hTdGVwcyA/PyBbXSxcbiAgICAgICAgcG9zdFB1Ymxpc2hTdGVwczogb3B0aW9ucy5wb3N0UHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBydW46IHRoaXMucHVibGliQ29tbWFuZChcInB1YmxpYi1tYXZlblwiKSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTUFWRU5fRU5EUE9JTlQ6IG9wdGlvbnMubWF2ZW5FbmRwb2ludCxcbiAgICAgICAgICBNQVZFTl9TRVJWRVJfSUQ6IG1hdmVuU2VydmVySWQsXG4gICAgICAgICAgTUFWRU5fUkVQT1NJVE9SWV9VUkw6IG9wdGlvbnMubWF2ZW5SZXBvc2l0b3J5VXJsLFxuICAgICAgICB9LFxuICAgICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICAgIE1BVkVOX0dQR19QUklWQVRFX0tFWTogaXNHaXRIdWJQYWNrYWdlc1xuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogc2VjcmV0KFxuICAgICAgICAgICAgICAgIG9wdGlvbnMubWF2ZW5HcGdQcml2YXRlS2V5U2VjcmV0ID8/IFwiTUFWRU5fR1BHX1BSSVZBVEVfS0VZXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0U6IGlzR2l0SHViUGFja2FnZXNcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHNlY3JldChcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1hdmVuR3BnUHJpdmF0ZUtleVBhc3NwaHJhc2UgPz9cbiAgICAgICAgICAgICAgICAgIFwiTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0VcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICBNQVZFTl9QQVNTV09SRDogc2VjcmV0KFxuICAgICAgICAgICAgb3B0aW9ucy5tYXZlblBhc3N3b3JkID8/XG4gICAgICAgICAgICAgIChpc0dpdEh1YlBhY2thZ2VzID8gXCJHSVRIVUJfVE9LRU5cIiA6IFwiTUFWRU5fUEFTU1dPUkRcIiksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBNQVZFTl9VU0VSTkFNRTogaXNHaXRIdWJBY3RvclxuICAgICAgICAgICAgPyBcIiR7eyBnaXRodWIuYWN0b3IgfX1cIlxuICAgICAgICAgICAgOiBzZWNyZXQob3B0aW9ucy5tYXZlblVzZXJuYW1lID8/IFwiTUFWRU5fVVNFUk5BTUVcIiksXG4gICAgICAgICAgTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEOiBpc0dpdEh1YlBhY2thZ2VzXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBzZWNyZXQoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tYXZlblN0YWdpbmdQcm9maWxlSWQgPz8gXCJNQVZFTl9TVEFHSU5HX1BST0ZJTEVfSURcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIHBhY2thZ2VzOiBpc0dpdEh1YlBhY2thZ2VzID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIHdoZWVsIGFydGlmYWN0cyBmcm9tIGBweXRob25gIHRvIFB5UEkuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9QeVBpKG9wdGlvbnM6IFB5UGlQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy50cnVzdGVkUHVibGlzaGluZyAmJlxuICAgICAgKG9wdGlvbnMudHdpbmVVc2VybmFtZVNlY3JldCB8fCBvcHRpb25zLnR3aW5lUGFzc3dvcmRTZWNyZXQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVzZSB0d2luZVVzZXJuYW1lU2VjcmV0IGFuZCB0d2luZVBhc3N3b3JkU2VjcmV0IHdoZW4gdHJ1c3RlZFB1Ymxpc2hpbmcgaXMgZW5hYmxlZC4gXCIgK1xuICAgICAgICAgIFwiVHJ1c3RlZCBwdWJsaXNoaW5nIHVzZXMgT0lEQyB0b2tlbnMgZm9yIGF1dGhlbnRpY2F0aW9uIGluc3RlYWQgb2YgdXNlcm5hbWUvcGFzc3dvcmQgY3JlZGVudGlhbHMuIFwiICtcbiAgICAgICAgICBcIlJlbW92ZSB0aGUgdHdpbmVVc2VybmFtZVNlY3JldCBhbmQgdHdpbmVQYXNzd29yZFNlY3JldCBvcHRpb25zIHRvIHVzZSB0cnVzdGVkIHB1Ymxpc2hpbmcuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBwZXJtaXNzaW9uczogSm9iUGVybWlzc2lvbnMgPSB7IGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfTtcbiAgICBjb25zdCBwcmVQdWJsaXNoU3RlcHMgPSBvcHRpb25zLnByZVB1Ymxpc2hTdGVwcyA/PyBbXTtcbiAgICBsZXQgd29ya2Zsb3dFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7fTtcbiAgICBjb25zdCBpc0F3c0NvZGVBcnRpZmFjdCA9IGlzQXdzQ29kZUFydGlmYWN0UmVnaXN0cnkoXG4gICAgICBvcHRpb25zLnR3aW5lUmVnaXN0cnlVcmwsXG4gICAgKTtcbiAgICBpZiAoaXNBd3NDb2RlQXJ0aWZhY3QpIHtcbiAgICAgIGNvbnN0IHsgZG9tYWluLCBhY2NvdW50LCByZWdpb24gfSA9IGF3c0NvZGVBcnRpZmFjdEluZm9Gcm9tVXJsKFxuICAgICAgICBvcHRpb25zLnR3aW5lUmVnaXN0cnlVcmwsXG4gICAgICApO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhdXRoUHJvdmlkZXIsXG4gICAgICAgIHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYWNjZXNzS2V5SWRTZWNyZXQsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldCxcbiAgICAgIH0gPSBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnMgPz8ge307XG4gICAgICBjb25zdCB1c2VPaWRjQXV0aCA9IGF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDO1xuICAgICAgaWYgKHVzZU9pZGNBdXRoKSB7XG4gICAgICAgIGlmICghcm9sZVRvQXNzdW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1wicm9sZVRvQXNzdW1lXCIgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBHSVRIVUJfT0lEQyBmb3IgQVdTIENvZGVBcnRpZmFjdCBvcHRpb25zJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBlcm1pc3Npb25zID0geyAuLi5wZXJtaXNzaW9ucywgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSB9O1xuICAgICAgICBwcmVQdWJsaXNoU3RlcHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJDb25maWd1cmUgQVdTIENyZWRlbnRpYWxzIHZpYSBHaXRIdWIgT0lEQyBQcm92aWRlclwiLFxuICAgICAgICAgIHVzZXM6IEdpdEh1YkFjdGlvbnMuQVdTX0FDVElPTlNfQ09ORklHVVJFX0FXU19DUkVERU5USUFMUyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBcInJvbGUtdG8tYXNzdW1lXCI6IHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiByZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcmVQdWJsaXNoU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiR2VuZXJhdGUgQ29kZUFydGlmYWN0IFRva2VuXCIsXG4gICAgICAgIHJ1bjogYGVjaG8gXCJUV0lORV9QQVNTV09SRD0kKGF3cyBjb2RlYXJ0aWZhY3QgZ2V0LWF1dGhvcml6YXRpb24tdG9rZW4gLS1kb21haW4gJHtkb21haW59IC0tZG9tYWluLW93bmVyICR7YWNjb3VudH0gLS1yZWdpb24gJHtyZWdpb259IC0tcXVlcnkgYXV0aG9yaXphdGlvblRva2VuIC0tb3V0cHV0IHRleHQpXCIgPj4gJEdJVEhVQl9FTlZgLFxuICAgICAgICBlbnY6IHVzZU9pZGNBdXRoXG4gICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6IHNlY3JldChcbiAgICAgICAgICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldCA/PyBcIkFXU19BQ0NFU1NfS0VZX0lEXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogc2VjcmV0KFxuICAgICAgICAgICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldCA/PyBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgd29ya2Zsb3dFbnYgPSB7IFRXSU5FX1VTRVJOQU1FOiBcImF3c1wiIH07XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRydXN0ZWRQdWJsaXNoaW5nKSB7XG4gICAgICBwZXJtaXNzaW9ucyA9IHsgLi4ucGVybWlzc2lvbnMsIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUgfTtcbiAgICAgIHdvcmtmbG93RW52ID0ge1xuICAgICAgICBQWVBJX1RSVVNURURfUFVCTElTSEVSOiBcInRydWVcIixcbiAgICAgIH07XG4gICAgICAvLyBhdHRlc3RhdGlvbnMgZGVmYXVsdCB0byB0cnVlLCBvbmx5IGRpc2FibGUgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZFxuICAgICAgaWYgKG9wdGlvbnMuYXR0ZXN0YXRpb25zID09PSBmYWxzZSkge1xuICAgICAgICB3b3JrZmxvd0Vudi5QWVBJX0RJU0FCTEVfQVRURVNUQVRJT05TID0gXCJ0cnVlXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdvcmtmbG93RW52ID0ge1xuICAgICAgICBUV0lORV9VU0VSTkFNRTogc2VjcmV0KG9wdGlvbnMudHdpbmVVc2VybmFtZVNlY3JldCA/PyBcIlRXSU5FX1VTRVJOQU1FXCIpLFxuICAgICAgICBUV0lORV9QQVNTV09SRDogc2VjcmV0KG9wdGlvbnMudHdpbmVQYXNzd29yZFNlY3JldCA/PyBcIlRXSU5FX1BBU1NXT1JEXCIpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoXCJweXBpXCIsIChfYnJhbmNoLCBicmFuY2hPcHRpb25zKTogUHVibGlzaEpvYk9wdGlvbnMgPT4gKHtcbiAgICAgIHJlZ2lzdHJ5TmFtZTogXCJQeVBJXCIsXG4gICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4ucHl0aG9uLFxuICAgICAgcGVybWlzc2lvbnMsXG4gICAgICBwcmVQdWJsaXNoU3RlcHMsXG4gICAgICBwb3N0UHVibGlzaFN0ZXBzOiBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5naXRodWJFbnZpcm9ubWVudCA/PyBicmFuY2hPcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgcnVuOiB0aGlzLnB1YmxpYkNvbW1hbmQoXCJwdWJsaWItcHlwaVwiKSxcbiAgICAgIGVudjoge1xuICAgICAgICBUV0lORV9SRVBPU0lUT1JZX1VSTDogb3B0aW9ucy50d2luZVJlZ2lzdHJ5VXJsLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93RW52LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgZ28gcHVibGlzaGluZyBqb2IuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBwdWJsaXNoVG9HbyhvcHRpb25zOiBHb1B1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmdpdGh1YkNyZWRlbnRpYWxzICYmXG4gICAgICAob3B0aW9ucy5naXRodWJVc2VTc2ggfHxcbiAgICAgICAgb3B0aW9ucy5naXRodWJUb2tlblNlY3JldCB8fFxuICAgICAgICBvcHRpb25zLmdpdGh1YkRlcGxveUtleVNlY3JldClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJPbmx5IG9uZSBvZiAnZ2l0aHViQ3JlZGVudGlhbHMnIG9yICdnaXRodWJVc2VTc2gnLydnaXRodWJUb2tlblNlY3JldCcvJ2dpdGh1YkRlcGxveUtleVNlY3JldCcgbWF5IGJlIHNwZWNpZmllZCwgbm90IGJvdGguXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmdpdGh1YlVzZVNzaCAmJiBvcHRpb25zLmdpdGh1YlRva2VuU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiJ2dpdGh1YlRva2VuU2VjcmV0JyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoICdnaXRodWJVc2VTc2gnLiBVc2UgJ2dpdGh1YkRlcGxveUtleVNlY3JldCcgaW5zdGVhZC5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlUHVibGlzaFN0ZXBzID0gb3B0aW9ucy5wcmVQdWJsaXNoU3RlcHMgPz8gW107XG4gICAgY29uc3Qgd29ya2Zsb3dFbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gICAgaWYgKG9wdGlvbnMuZ2l0aHViQ3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gb3B0aW9ucy5naXRodWJDcmVkZW50aWFscztcbiAgICAgIHByZVB1Ymxpc2hTdGVwcy5wdXNoKC4uLmNyZWRlbnRpYWxzLnNldHVwU3RlcHMpO1xuICAgICAgd29ya2Zsb3dFbnYuR0lUSFVCX1RPS0VOID0gY3JlZGVudGlhbHMudG9rZW5SZWY7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmdpdGh1YlVzZVNzaCkge1xuICAgICAgd29ya2Zsb3dFbnYuR0lUSFVCX1VTRV9TU0ggPSBcInRydWVcIjtcbiAgICAgIHdvcmtmbG93RW52LlNTSF9BVVRIX1NPQ0sgPSBcIi90bXAvc3NoX2FnZW50LnNvY2tcIjtcbiAgICAgIHByZVB1Ymxpc2hTdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogXCJTZXR1cCBHaXRIdWIgZGVwbG95IGtleVwiLFxuICAgICAgICBydW46ICdzc2gtYWdlbnQgLWEgJHtTU0hfQVVUSF9TT0NLfSAmJiBzc2gtYWRkIC0gPDw8IFwiJHtHSVRIVUJfREVQTE9ZX0tFWX1cIicsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIEdJVEhVQl9ERVBMT1lfS0VZOiBzZWNyZXQoXG4gICAgICAgICAgICBvcHRpb25zLmdpdGh1YkRlcGxveUtleVNlY3JldCA/PyBcIkdPX0dJVEhVQl9ERVBMT1lfS0VZXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBTU0hfQVVUSF9TT0NLOiB3b3JrZmxvd0Vudi5TU0hfQVVUSF9TT0NLLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdvcmtmbG93RW52LkdJVEhVQl9UT0tFTiA9IHNlY3JldChcbiAgICAgICAgb3B0aW9ucy5naXRodWJUb2tlblNlY3JldCA/PyBcIkdPX0dJVEhVQl9UT0tFTlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoXG4gICAgICBcImdvbGFuZ1wiLFxuICAgICAgKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiAoe1xuICAgICAgICBwdWJsaXNoVG9vbHM6IFBVQkxJQl9UT09MQ0hBSU4uZ28sXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwczogcHJlUHVibGlzaFN0ZXBzLFxuICAgICAgICBwb3N0UHVibGlzaFN0ZXBzOiBvcHRpb25zLnBvc3RQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICAgIGVudmlyb25tZW50OlxuICAgICAgICAgIG9wdGlvbnMuZ2l0aHViRW52aXJvbm1lbnQgPz9cbiAgICAgICAgICBvcHRpb25zLmdpdGh1YkNyZWRlbnRpYWxzPy5lbnZpcm9ubWVudCA/P1xuICAgICAgICAgIGJyYW5jaE9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIHJ1bjogdGhpcy5wdWJsaWJDb21tYW5kKFwicHVibGliLWdvbGFuZ1wiKSxcbiAgICAgICAgcmVnaXN0cnlOYW1lOiBcIkdpdEh1YiBHbyBNb2R1bGUgUmVwb3NpdG9yeVwiLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBHSVRfQlJBTkNIOiBvcHRpb25zLmdpdEJyYW5jaCxcbiAgICAgICAgICBHSVRfVVNFUl9OQU1FOlxuICAgICAgICAgICAgb3B0aW9ucy5naXRVc2VyTmFtZSA/PyBERUZBVUxUX0dJVEhVQl9BQ1RJT05TX1VTRVIubmFtZSxcbiAgICAgICAgICBHSVRfVVNFUl9FTUFJTDpcbiAgICAgICAgICAgIG9wdGlvbnMuZ2l0VXNlckVtYWlsID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUi5lbWFpbCxcbiAgICAgICAgICBHSVRfQ09NTUlUX01FU1NBR0U6IG9wdGlvbnMuZ2l0Q29tbWl0TWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgICAgd29ya2Zsb3dFbnY6IHdvcmtmbG93RW52LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUHVibGlzaEpvYihcbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZW5hbWUgb2YgdGhlIHB1Ymxpc2ggam9iIChzaG91bGQgYmUgbG93ZXJjYXNlKS5cbiAgICAgKiBXaWxsIGJlIGV4dGVuZGVkIHdpdGggYSBwcmVmaXguXG4gICAgICovXG4gICAgYmFzZW5hbWU6IHN0cmluZyxcbiAgICBmYWN0b3J5OiAoXG4gICAgICBicmFuY2g6IHN0cmluZyxcbiAgICAgIGJyYW5jaE9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4sXG4gICAgKSA9PiBQdWJsaXNoSm9iT3B0aW9ucyxcbiAgKSB7XG4gICAgY29uc3Qgam9ibmFtZSA9IGAke1BVQkxJU0hfSk9CX1BSRUZJWH0ke2Jhc2VuYW1lfWA7XG4gICAgdGhpcy5wdWJsaXNoSm9ic1tiYXNlbmFtZV0gPSBqb2JuYW1lO1xuXG4gICAgdGhpcy5fam9iRmFjdG9yaWVzLnB1c2goKGJyYW5jaCwgYnJhbmNoT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9IGZhY3RvcnkoYnJhbmNoLCBicmFuY2hPcHRpb25zKTtcbiAgICAgIGlmIChqb2JuYW1lIGluIHRoaXMuX2pvYkZhY3Rvcmllcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBqb2Igd2l0aCBuYW1lIFwiJHtqb2JuYW1lfVwiYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1hbmRUb1J1bjogUHVibGlzaFJ1biA9IHRoaXMuZHJ5UnVuXG4gICAgICAgID8geyBhcmd2OiBbXCJlY2hvXCIsIGBEUlkgUlVOOiAke3JlbmRlclJ1bihvcHRzLnJ1bil9YF0gfVxuICAgICAgICA6IG9wdHMucnVuO1xuICAgICAgY29uc3QgcmVxdWlyZWRFbnYgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgICAvLyBqb2JFbnYgaXMgdGhlIGVudiB3ZSBwYXNzIHRvIHRoZSBnaXRodWIgam9iICh0YXNrIGVudmlyb25tZW50ICsgc2VjcmV0cy9leHByZXNzaW9ucykuXG4gICAgICBjb25zdCBqb2JFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIC4uLm9wdHMuZW52LFxuICAgICAgICAuLi4oXCJzY3JpcHRcIiBpbiBjb21tYW5kVG9SdW4gPyBjb21tYW5kVG9SdW4uZW52IDoge30pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHdvcmtmbG93RW52RW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG9wdHMud29ya2Zsb3dFbnYgPz8ge30pLmZpbHRlcihcbiAgICAgICAgKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9IHVuZGVmaW5lZCxcbiAgICAgICkgYXMgc3RyaW5nW11bXTtcbiAgICAgIGZvciAoY29uc3QgW2VudiwgZXhwcmVzc2lvbl0gb2Ygd29ya2Zsb3dFbnZFbnRyaWVzKSB7XG4gICAgICAgIHJlcXVpcmVkRW52LnB1c2goZW52KTtcbiAgICAgICAgam9iRW52W2Vudl0gPSBleHByZXNzaW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wdWJsaXNoVGFza3MpIHtcbiAgICAgICAgY29uc3QgYnJhbmNoU3VmZml4ID1cbiAgICAgICAgICBicmFuY2ggPT09IFwibWFpblwiIHx8IGJyYW5jaCA9PT0gXCJtYXN0ZXJcIiA/IFwiXCIgOiBgOiR7YnJhbmNofWA7XG5cbiAgICAgICAgLy8gZGVmaW5lIGEgdGFzayB3aGljaCBjYW4gYmUgdXNlZCB0aHJvdWdoIGBwcm9qZW4gcHVibGlzaDp4eHhgLlxuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soXG4gICAgICAgICAgYHB1Ymxpc2g6JHtiYXNlbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpfSR7YnJhbmNoU3VmZml4fWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQdWJsaXNoIHRoaXMgcGFja2FnZSB0byAke29wdHMucmVnaXN0cnlOYW1lfWAsXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgLi4ub3B0cy5lbnYsXG4gICAgICAgICAgICAgIC4uLihcInNjcmlwdFwiIGluIGNvbW1hbmRUb1J1biA/IGNvbW1hbmRUb1J1bi5lbnYgOiB7fSksXG4gICAgICAgICAgICAgIC8vIGNvbnN1bWVkIGJ5IHRoZSBicmFuY2ggY2hlY2sgYmVsb3dcbiAgICAgICAgICAgICAgUFVCTElTSF9CUkFOQ0g6IGJyYW5jaCxcbiAgICAgICAgICAgICAgQ1VSUkVOVF9CUkFOQ0g6IFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkRW52OiByZXF1aXJlZEVudixcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGZpcnN0IHZlcmlmeSB0aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVjdCBicmFuY2hcbiAgICAgICAgdGFzay5leGVjQXJncyhbXCJub2RlXCIsIFwiLWVcIiwgQ0hFQ0tfQlJBTkNIX1NDUklQVF0pO1xuXG4gICAgICAgIC8vIHJ1biBjb21tYW5kc1xuICAgICAgICBpZiAoXCJhcmd2XCIgaW4gY29tbWFuZFRvUnVuKSB7XG4gICAgICAgICAgdGFzay5leGVjQXJncyhjb21tYW5kVG9SdW4uYXJndik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFzay5leGVjKGNvbW1hbmRUb1J1bi5zY3JpcHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gPSBbXG4gICAgICAgIFdvcmtmbG93U3RlcHMuZG93bmxvYWRBcnRpZmFjdCh7XG4gICAgICAgICAgbmFtZTogXCJEb3dubG9hZCBidWlsZCBhcnRpZmFjdHNcIixcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBhcnRpZmFjdElkczogW1xuICAgICAgICAgICAgICBgXFwke3sgbmVlZHMuJHt0aGlzLmJ1aWxkSm9iSWR9Lm91dHB1dHMuJHtBUlRJRkFDVF9JRF9PVVRQVVR9IH19YCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwYXRoOiBBUlRJRkFDVFNfRE9XTkxPQURfRElSLCAvLyB0aGlzIG11c3QgYmUgXCJkaXN0XCIgZm9yIHB1YmxpYlxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJSZXN0b3JlIGJ1aWxkIGFydGlmYWN0IHBlcm1pc3Npb25zXCIsXG4gICAgICAgICAgY29udGludWVPbkVycm9yOiB0cnVlLFxuICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgYGNkICR7QVJUSUZBQ1RTX0RPV05MT0FEX0RJUn0gJiYgc2V0ZmFjbCAtLXJlc3RvcmU9JHtQRVJNSVNTSU9OX0JBQ0tVUF9GSUxFfWAsXG4gICAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICB9LFxuICAgICAgICAuLi5vcHRzLnByZVB1Ymxpc2hTdGVwcyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiUmVsZWFzZVwiLFxuICAgICAgICAgIC8vIGl0IHdvdWxkIGhhdmUgYmVlbiBuaWNlIGlmIHdlIGNvdWxkIGp1c3QgcnVuIFwicHJvamVuIHB1Ymxpc2g6eHh4XCIgaGVyZSBidXQgdGhhdCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB0aGlzIGpvYiBkb2VzIG5vdCBjaGVja291dCBzb3VyY2VzXG4gICAgICAgICAgaWY6IG9wdHMucmVsZWFzZVN0ZXBJZixcbiAgICAgICAgICBydW46IHJlbmRlclJ1bihjb21tYW5kVG9SdW4pLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgLi4uam9iRW52LFxuICAgICAgICAgICAgLi4uKChvcHRzLmlzUHViTGliID8/IHRydWUpXG4gICAgICAgICAgICAgID8geyBQVUJMSUJfRFJZUlVOOiBcIiR7eyBpbnB1dHMuZHJ5X3J1biB9fVwiIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4ub3B0cy5wb3N0UHVibGlzaFN0ZXBzLFxuICAgICAgXTtcblxuICAgICAgY29uc3QgcGVybXMgPSBvcHRzLnBlcm1pc3Npb25zID8/IHsgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9O1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy53b3JrZmxvd0NvbnRhaW5lckltYWdlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaW1hZ2U6IHRoaXMud29ya2Zsb3dDb250YWluZXJJbWFnZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodGhpcy5mYWlsdXJlSXNzdWUpIHtcbiAgICAgICAgc3RlcHMucHVzaChcbiAgICAgICAgICAuLi5bXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiRXh0cmFjdCBWZXJzaW9uXCIsXG4gICAgICAgICAgICAgIGlmOiBcIiR7eyBmYWlsdXJlKCkgfX1cIixcbiAgICAgICAgICAgICAgaWQ6IFwiZXh0cmFjdC12ZXJzaW9uXCIsXG4gICAgICAgICAgICAgIHNoZWxsOiBcImJhc2hcIixcbiAgICAgICAgICAgICAgcnVuOiAnZWNobyBcIlZFUlNJT049JChjYXQgZGlzdC92ZXJzaW9uLnR4dClcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcIkNyZWF0ZSBJc3N1ZVwiLFxuICAgICAgICAgICAgICBpZjogXCIke3sgZmFpbHVyZSgpIH19XCIsXG4gICAgICAgICAgICAgIHJ1bjogYGdoIGlzc3VlIGNyZWF0ZSAtLXRpdGxlIFwiUHVibGlzaGluZyB2JFZFUlNJT04gdG8gJHtvcHRzLnJlZ2lzdHJ5TmFtZX0gZmFpbGVkXCIgLS1ib2R5IFwiU2VlICRSVU5fVVJMXCIgLS1sYWJlbCBcIiR7dGhpcy5mYWlsdXJlSXNzdWVMYWJlbH1cImAsXG4gICAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICAgIEdIX1RPS0VOOiBcIiR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICAgICAgICAgIFZFUlNJT046IFwiJHt7IHN0ZXBzLmV4dHJhY3QtdmVyc2lvbi5vdXRwdXRzLlZFUlNJT04gfX1cIixcbiAgICAgICAgICAgICAgICBSVU5fVVJMOlxuICAgICAgICAgICAgICAgICAgXCJodHRwczovL2dpdGh1Yi5jb20vJHt7IGdpdGh1Yi5yZXBvc2l0b3J5IH19L2FjdGlvbnMvcnVucy8ke3sgZ2l0aHViLnJ1bl9pZCB9fVwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICApO1xuICAgICAgICBPYmplY3QuYXNzaWduKHBlcm1zLCB7IGlzc3VlczogSm9iUGVybWlzc2lvbi5XUklURSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2pvYm5hbWVdOiB7XG4gICAgICAgICAgLi4uKG9wdHMuZW52aXJvbm1lbnQgPyB7IGVudmlyb25tZW50OiBvcHRzLmVudmlyb25tZW50IH0gOiB7fSksXG4gICAgICAgICAgdG9vbHM6IHtcbiAgICAgICAgICAgIG5vZGU6IHsgdmVyc2lvbjogdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uIH0sXG4gICAgICAgICAgICAuLi5vcHRzLnB1Ymxpc2hUb29scyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IGBQdWJsaXNoIHRvICR7b3B0cy5yZWdpc3RyeU5hbWV9YCxcbiAgICAgICAgICBwZXJtaXNzaW9uczogcGVybXMsXG4gICAgICAgICAgaWY6IHRoaXMuY29uZGl0aW9uLFxuICAgICAgICAgIG5lZWRzOiBbdGhpcy5idWlsZEpvYklkLCAuLi4ob3B0cy5uZWVkcyA/PyBbXSldLFxuICAgICAgICAgIC4uLmZpbHRlcmVkUnVuc09uT3B0aW9ucyh0aGlzLnJ1bnNPbiwgdGhpcy5ydW5zT25Hcm91cCksXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIHN0ZXBzLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGliQ29tbWFuZChjb21tYW5kOiBzdHJpbmcpOiBQdWJsaXNoUnVuIHtcbiAgICByZXR1cm4geyBhcmd2OiBbXCJucHhcIiwgXCItcFwiLCBgcHVibGliQCR7dGhpcy5wdWJsaWJWZXJzaW9ufWAsIGNvbW1hbmRdIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEdpdEh1YiByZWxlYXNlLCB0b2xlcmF0aW5nIGEgcmVsZWFzZSB0aGF0IGFscmVhZHkgZXhpc3RzIHNvXG4gICAqIHRoYXQgcmUtcnVubmluZyBhIHJlbGVhc2UgaXMgYSBuby1vcCByYXRoZXIgdGhhbiBhIGZhaWx1cmU6IGlmXG4gICAqIGBnaCByZWxlYXNlIHZpZXdgIGZpbmRzIGEgcmVsZWFzZSBmb3IgdGhlIHRhZywgY3JlYXRpb24gaXMgc2tpcHBlZCBhbmRcbiAgICogdGhlIGV4aXN0aW5nIHJlbGVhc2UgaXMgbGVmdCB1bnRvdWNoZWQuXG4gICAqXG4gICAqIEEgZml4ZWQgc2NyaXB0OiB2YXJpYWJsZSB2YWx1ZXMgYXJyaXZlIHRocm91Z2ggdGhlIGVudmlyb25tZW50XG4gICAqIChgUkVMRUFTRV9UQUdfRklMRWAsIGBDSEFOR0VMT0dfRklMRWApLCBuZXZlciBpbnRlcnBvbGF0ZWQgaW50byBzaGVsbFxuICAgKiB0ZXh0LiBVc2VzIG9ubHkgc3ludGF4IHRoZSBidWlsdC1pbiBjcm9zcy1wbGF0Zm9ybSBzaGVsbCBpbXBsZW1lbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBnaXRodWJSZWxlYXNlQ29tbWFuZChcbiAgICBvcHRpb25zOiBHaXRIdWJSZWxlYXNlc1B1Ymxpc2hPcHRpb25zLFxuICAgIGJyYW5jaE9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4sXG4gICk6IFB1Ymxpc2hSdW4ge1xuICAgIGNvbnN0IGxhdGVzdCA9IGJyYW5jaE9wdGlvbnMuZ2l0aHViUmVsZWFzZUxhdGVzdCA/PyBvcHRpb25zLmxhdGVzdDtcblxuICAgIC8vIG1hcCBlYWNoIHZhbHVlIHRvIGEgZml4ZWQgbGl0ZXJhbCBmbGFnOyBuZXZlciBpbnRlcnBvbGF0ZSB0aGUgdmFsdWVcbiAgICAvLyBpbnRvIHRoZSBzaGVsbCB0ZXh0XG4gICAgY29uc3QgbGF0ZXN0RmxhZzogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobGF0ZXN0ID09PSB0cnVlKSB7XG4gICAgICBsYXRlc3RGbGFnLnB1c2goXCItLWxhdGVzdD10cnVlXCIpO1xuICAgIH0gZWxzZSBpZiAobGF0ZXN0ID09PSBmYWxzZSkge1xuICAgICAgbGF0ZXN0RmxhZy5wdXNoKFwiLS1sYXRlc3Q9ZmFsc2VcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlQXJncyA9IFtcbiAgICAgICdcIiR0YWdcIicsXG4gICAgICAnLVIgXCIkR0lUSFVCX1JFUE9TSVRPUllcIicsXG4gICAgICAnLUYgXCIkQ0hBTkdFTE9HX0ZJTEVcIicsXG4gICAgICAnLXQgXCIkdGFnXCInLFxuICAgICAgJy0tdGFyZ2V0IFwiJEdJVEhVQl9TSEFcIicsXG4gICAgICAuLi4oYnJhbmNoT3B0aW9ucy5wcmVyZWxlYXNlID8gW1wiLS1wcmVyZWxlYXNlXCJdIDogW10pLFxuICAgICAgLi4ubGF0ZXN0RmxhZyxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcmlwdDogW1xuICAgICAgICAndGFnPSQoY2F0IFwiJFJFTEVBU0VfVEFHX0ZJTEVcIikgJiYnLFxuICAgICAgICAnZ2ggcmVsZWFzZSB2aWV3IFwiJHRhZ1wiIC1SIFwiJEdJVEhVQl9SRVBPU0lUT1JZXCIgMj4vZGV2L251bGwgfHwnLFxuICAgICAgICBgZ2ggcmVsZWFzZSBjcmVhdGUgJHtjcmVhdGVBcmdzLmpvaW4oXCIgXCIpfWAsXG4gICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgICBlbnY6IHtcbiAgICAgICAgUkVMRUFTRV9UQUdfRklMRTogb3B0aW9ucy5yZWxlYXNlVGFnRmlsZSxcbiAgICAgICAgQ0hBTkdFTE9HX0ZJTEU6IG9wdGlvbnMuY2hhbmdlbG9nRmlsZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWNyZXQoc2VjcmV0TmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBgXFwke3sgc2VjcmV0cy4ke3NlY3JldE5hbWV9IH19YDtcbn1cblxuLyoqXG4gKiBXaGF0IGEgcHVibGlzaCBqb2IgcnVuczogZWl0aGVyIGFuIGFyZ3YsIHdoaWNoIG5lZWRzIG5vIHNoZWxsIGF0IGFsbCwgb3IgYVxuICogc2hlbGwgc2NyaXB0IGZvciB0aGUgY2FzZXMgdGhhdCBnZW51aW5lbHkgbmVlZCBzaGVsbCBmZWF0dXJlcy5cbiAqXG4gKiBBIHNjcmlwdCBpcyBhIGZpeGVkIHN0cmluZyAtIGV2ZXJ5dGhpbmcgdmFyaWFibGUgYWJvdXQgaXQgaXMgcGFzc2VkIGluIGBlbnZgLFxuICogd2hpY2ggaXMgbmV2ZXIgc2hlbGwtcGFyc2VkIC0gc28gbm8gdmFsdWUgaXMgZXZlciBpbnRlcnBvbGF0ZWQgaW50byBzaGVsbFxuICogdGV4dC5cbiAqL1xudHlwZSBQdWJsaXNoUnVuID1cbiAgfCB7IHJlYWRvbmx5IGFyZ3Y6IHN0cmluZ1tdIH1cbiAgfCB7XG4gICAgICByZWFkb25seSBzY3JpcHQ6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgfTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgYFB1Ymxpc2hSdW5gIGFzIGEgY29tbWFuZCBsaW5lIGZvciBhIGBydW46YCB3b3JrZmxvdyBzdGVwIG9yIGFcbiAqIGBwcm9qZW4gcHVibGlzaDp4eHhgIHRhc2suXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclJ1bihydW46IFB1Ymxpc2hSdW4pOiBzdHJpbmcge1xuICByZXR1cm4gXCJhcmd2XCIgaW4gcnVuID8gZXNjYXBlQ29tbWFuZChydW4uYXJndikgOiBydW4uc2NyaXB0O1xufVxuXG5pbnRlcmZhY2UgUHVibGlzaEpvYk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bjogUHVibGlzaFJ1bjtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcmVnaXN0cnkgKGZvciBkZXNjcmlwdGlvbilcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBKb2IgcGVybWlzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zPzogSm9iUGVybWlzc2lvbnM7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHRvIGluY2x1ZGUgb25seSBpbiB0aGUgd29ya2Zsb3cgKGFuZCBub3QgdGFza3MpLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dFbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogU3RlcHMgdG8gZXhlY3V0ZSBiZWZvcmUgdGhlIHJlbGVhc2UgY29tbWFuZCBmb3IgcHJlcGFyaW5nIHRoZSBkaXN0LyBvdXRwdXQuXG4gICAqL1xuICByZWFkb25seSBwcmVQdWJsaXNoU3RlcHM6IEpvYlN0ZXBbXTtcblxuICAvKipcbiAgICogU3RlcHMgdG8gZXhlY3V0ZSBiZWZvcmUgdGhlIHJlbGVhc2UgY29tbWFuZCBmb3IgcHJlcGFyaW5nIHRoZSBkaXN0LyBvdXRwdXQuXG4gICAqL1xuICByZWFkb25seSBwb3N0UHVibGlzaFN0ZXBzOiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFRvb2xzIHNldHVwIGZvciB0aGUgd29ya2Zsb3cuXG4gICAqIEBkZWZhdWx0IC0gbm8gdG9vbHMgYXJlIGluc3RhbGxlZFxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFRvb2xzPzogVG9vbHM7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgam9icyB0aGUgcHVibGlzaCBqb2JzIGRlcGVuZHMgb24uXG4gICAqL1xuICByZWFkb25seSBuZWVkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIEFjdGlvbnMgZW52aXJvbm1lbnQgdXNlZCBmb3IgcHVibGlzaGluZy5cbiAgICogQGRlZmF1bHQgLSBubyBlbnZpcm9ubWVudCB1c2VkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb25kaXRpb24gZm9yIHRoZSByZWxlYXNlIHN0ZXAuXG4gICAqIEBkZWZhdWx0IC0gbm8gY29uZGl0aW9uXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlU3RlcElmPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgam9iIHVzZXMgcHVibGliIChhbmQgdGh1cyBzdXBwb3J0cyBQVUJMSUJfRFJZUlVOKS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNQdWJMaWI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbW1vbiBwdWJsaXNoaW5nIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tb25QdWJsaXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGVwcyB0byBleGVjdXRlIGJlZm9yZSBleGVjdXRpbmcgdGhlIHB1Ymxpc2hpbmcgY29tbWFuZC4gVGhlc2UgY2FuIGJlIHVzZWRcbiAgICogdG8gcHJlcGFyZSB0aGUgYXJ0aWZhY3QgZm9yIHB1Ymxpc2hpbmcgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBUaGVzZSBzdGVwcyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgYGRpc3QvYCBoYXMgYmVlbiBwb3B1bGF0ZWQgd2l0aCB0aGUgYnVpbGRcbiAgICogb3V0cHV0LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgd2hlbiB1c2luZyB0aGlzIGluIGBwdWJsaXNoVG9HaXRIdWJSZWxlYXNlc2AgdGhpcyB3aWxsIG92ZXJyaWRlIHN0ZXBzIGFkZGVkIHZpYSBgYWRkR2l0SHViUHJlUHVibGlzaGluZ1N0ZXBzYC5cbiAgICovXG4gIHJlYWRvbmx5IHByZVB1Ymxpc2hTdGVwcz86IEpvYlN0ZXBbXTtcblxuICAvKipcbiAgICogU3RlcHMgdG8gZXhlY3V0ZSBhZnRlciBleGVjdXRpbmcgdGhlIHB1Ymxpc2hpbmcgY29tbWFuZC4gVGhlc2UgY2FuIGJlIHVzZWRcbiAgICogdG8gYWRkL3VwZGF0ZSB0aGUgcmVsZWFzZSBhcnRpZmFjdHMgb3QgYW55IG90aGVyIHRhc2tzIG5lZWRlZC5cbiAgICpcbiAgICpcbiAgICogTm90ZSB0aGF0IHdoZW4gdXNpbmcgdGhpcyBpbiBgcHVibGlzaFRvR2l0SHViUmVsZWFzZXNgIHRoaXMgd2lsbCBvdmVycmlkZSBzdGVwcyBhZGRlZCB2aWEgYGFkZEdpdEh1YlBvc3RQdWJsaXNoaW5nU3RlcHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdFB1Ymxpc2hTdGVwcz86IEpvYlN0ZXBbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0b29scyB0byBpbnN0YWxsIGluIHRoZSBwdWJsaXNoaW5nIGpvYi5cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIHRvb2xzIGFyZSBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hUb29scz86IFRvb2xzO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIEFjdGlvbnMgZW52aXJvbm1lbnQgdXNlZCBmb3IgcHVibGlzaGluZy5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgYW4gZXhwbGljaXQgYXBwcm92YWwgc3RlcCB0byB0aGUgcmVsZWFzZVxuICAgKiBvciBsaW1pdCB3aG8gY2FuIGluaXRpYXRlIGEgcmVsZWFzZSB0aHJvdWdoIGVudmlyb25tZW50IHByb3RlY3Rpb24gcnVsZXMuXG4gICAqXG4gICAqIFNldCB0aGlzIHRvIG92ZXJ3cml0ZSBhIHBhY2thZ2UgbGV2ZWwgcHVibGlzaGluZyBlbnZpcm9ubWVudCBqdXN0IGZvciB0aGlzIGFydGlmYWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHVzZWQsIHVubGVzcyBzZXQgYXQgdGhlIHBhY2thZ2UgbGV2ZWxcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YkVudmlyb25tZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIG5wbSByZWxlYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBDb21tb25QdWJsaXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgb2YgdGhlIG5wbSBwYWNrYWdlIHJlZ2lzdHJ5LlxuICAgKlxuICAgKiBUbyBwdWJsaXNoIHRvIEdpdEh1YiBQYWNrYWdlcywgc2V0IHRoaXMgdmFsdWUgdG8gYFwibnBtLnBrZy5naXRodWIuY29tXCJgLiBJblxuICAgKiB0aGlzIGlmIGBucG1Ub2tlblNlY3JldGAgaXMgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAqIGBHSVRIVUJfVE9LRU5gIHdoaWNoIG1lYW5zIHRoYXQgeW91IHdpbGwgYmUgYWJsZSB0byBwdWJsaXNoIHRvIHRoZVxuICAgKiByZXBvc2l0b3J5J3MgcGFja2FnZSBzdG9yZS4gSW4gdGhpcyBjYXNlLCBtYWtlIHN1cmUgYHJlcG9zaXRvcnlVcmxgIGlzXG4gICAqIGNvcnJlY3RseSBkZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcInJlZ2lzdHJ5Lm5wbWpzLm9yZ1wiXG4gICAqIEBleGFtcGxlIFwibnBtLnBrZy5naXRodWIuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IHdoaWNoIGNvbnRhaW5zIHRoZSBOUE0gdG9rZW4gdG8gdXNlIGZvciBwdWJsaXNoaW5nIHBhY2thZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFwiTlBNX1RPS0VOXCIgb3IgXCJHSVRIVUJfVE9LRU5cIiBpZiBgcmVnaXN0cnlgIGlzIHNldCB0byBgbnBtLnBrZy5naXRodWIuY29tYC5cbiAgICovXG4gIHJlYWRvbmx5IG5wbVRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgdHJ1c3RlZCBwdWJsaXNoaW5nIGZvciBwdWJsaXNoaW5nIHRvIG5wbWpzLmNvbVxuICAgKiBOZWVkcyB0byBiZSBwcmUtY29uZmlndXJlZCBvbiBucG0uanMgdG8gd29yay5cbiAgICpcbiAgICogUmVxdWlyZXMgbnBtIENMSSB2ZXJzaW9uIDExLjUuMSBvciBsYXRlciwgdGhpcyBpcyBOT1QgZW5zdXJlZCBhdXRvbWF0aWNhbGx5LlxuICAgKiBXaGVuIHVzZWQsIGBucG1Ub2tlblNlY3JldGAgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5ucG1qcy5jb20vdHJ1c3RlZC1wdWJsaXNoZXJzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRQdWJsaXNoaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIHByb3ZlbmFuY2Ugc3RhdGVtZW50cyBiZSBnZW5lcmF0ZWQgd2hlbiBwYWNrYWdlIGlzIHB1Ymxpc2hlZC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgY29tcG9uZW50IGlzIHVzaW5nIGBwdWJsaWJgIHRvIHB1Ymxpc2ggcGFja2FnZXMsXG4gICAqIHdoaWNoIGlzIHVzaW5nIG5wbSBpbnRlcm5hbGx5IGFuZCBzdXBwb3J0cyBwcm92ZW5hbmNlIHN0YXRlbWVudHMgaW5kZXBlbmRlbnRseSBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyIHVzZWQuXG4gICAqXG4gICAqIE9ubHkgd29ya3MgaW4gc3VwcG9ydGVkIENJL0NEIGVudmlyb25tZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MubnBtanMuY29tL2dlbmVyYXRpbmctcHJvdmVuYW5jZS1zdGF0ZW1lbnRzXG4gICAqIEBkZWZhdWx0IC0gZW5hYmxlZCBmb3IgZm9yIHB1YmxpYyBwYWNrYWdlcyB1c2luZyB0cnVzdGVkIHB1Ymxpc2hpbmcsIGRpc2FibGVkIG90aGVyd2lzZVxuICAgKi9cbiAgcmVhZG9ubHkgbnBtUHJvdmVuYW5jZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHB1Ymxpc2hpbmcgbnBtIHBhY2thZ2UgdG8gQVdTIENvZGVBcnRpZmFjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwYWNrYWdlIGlzIG5vdCBwdWJsaXNoZWQgdG9cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVBcnRpZmFjdE9wdGlvbnM/OiBDb2RlQXJ0aWZhY3RPcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGF1dGhvcml6aW5nIHJlcXVlc3RzIHRvIGEgQVdTIENvZGVBcnRpZmFjdCBucG0gcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGVudW0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEZpeGVkIGNyZWRlbnRpYWxzIHByb3ZpZGVkIHZpYSBHaXRodWIgc2VjcmV0cy5cbiAgICovXG4gIEFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSID0gXCJBQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUlwiLFxuXG4gIC8qKlxuICAgKiBFcGhlbWVyYWwgY3JlZGVudGlhbHMgcHJvdmlkZWQgdmlhIEdpdGh1YidzIE9JREMgaW50ZWdyYXRpb24gd2l0aCBhbiBJQU0gcm9sZS5cbiAgICogU2VlOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvaWRfcm9sZXNfcHJvdmlkZXJzX2NyZWF0ZV9vaWRjLmh0bWxcbiAgICogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9kZXBsb3ltZW50L3NlY3VyaXR5LWhhcmRlbmluZy15b3VyLWRlcGxveW1lbnRzL2NvbmZpZ3VyaW5nLW9wZW5pZC1jb25uZWN0LWluLWFtYXpvbi13ZWItc2VydmljZXNcbiAgICovXG4gIEdJVEhVQl9PSURDID0gXCJHSVRIVUJfT0lEQ1wiLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHB1Ymxpc2hpbmcgcGFja2FnZXMgdG8gQVdTIENvZGVBcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQXJ0aWZhY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIHRvIHVzZSBmb3IgYXV0aG9yaXppbmcgcmVxdWVzdHMgdG8gQVdTIENvZGVBcnRpZmFjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSXG4gICAqL1xuICByZWFkb25seSBhdXRoUHJvdmlkZXI/OiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXI7XG4gIC8qKlxuICAgKiBHaXRIdWIgc2VjcmV0IHdoaWNoIGNvbnRhaW5zIHRoZSBBV1MgYWNjZXNzIGtleSBJRCB0byB1c2Ugd2hlbiBwdWJsaXNoaW5nIHBhY2thZ2VzIHRvIEFXUyBDb2RlQXJ0aWZhY3QuXG4gICAqIFRoaXMgcHJvcGVydHkgbXVzdCBiZSBzcGVjaWZpZWQgb25seSB3aGVuIHB1Ymxpc2hpbmcgdG8gQVdTIENvZGVBcnRpZmFjdCAoYG5wbVJlZ2lzdHJ5VXJsYCBjb250YWlucyBBV1MgQ29kZUFydGlmYWN0IFVSTCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gV2hlbiB0aGUgYGF1dGhQcm92aWRlcmAgdmFsdWUgaXMgc2V0IHRvXG4gICAqIGBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuQUNDRVNTX0FORF9TRUNSRVRfS0VZX1BBSVJgLCB0aGUgZGVmYXVsdCBpc1xuICAgKiBcIkFXU19BQ0NFU1NfS0VZX0lEXCIuIEZvciBgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDYCwgdGhpc1xuICAgKiB2YWx1ZSBtdXN0IGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzS2V5SWRTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgd2hpY2ggY29udGFpbnMgdGhlIEFXUyBzZWNyZXQgYWNjZXNzIGtleSB0byB1c2Ugd2hlbiBwdWJsaXNoaW5nIHBhY2thZ2VzIHRvIEFXUyBDb2RlQXJ0aWZhY3QuXG4gICAqIFRoaXMgcHJvcGVydHkgbXVzdCBiZSBzcGVjaWZpZWQgb25seSB3aGVuIHB1Ymxpc2hpbmcgdG8gQVdTIENvZGVBcnRpZmFjdCAoYG5wbVJlZ2lzdHJ5VXJsYCBjb250YWlucyBBV1MgQ29kZUFydGlmYWN0IFVSTCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gV2hlbiB0aGUgYGF1dGhQcm92aWRlcmAgdmFsdWUgaXMgc2V0IHRvXG4gICAqIGBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuQUNDRVNTX0FORF9TRUNSRVRfS0VZX1BBSVJgLCB0aGUgZGVmYXVsdCBpc1xuICAgKiBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLiBGb3IgYENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQ2AsIHRoaXNcbiAgICogdmFsdWUgbXVzdCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldEFjY2Vzc0tleVNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIEFXUyByb2xlIHRvIGJlIGFzc3VtZWQgcHJpb3IgdG8gZ2V0IGF1dGhvcml6YXRpb24gdG9rZW4gZnJvbSBBV1MgQ29kZUFydGlmYWN0XG4gICAqIFRoaXMgcHJvcGVydHkgbXVzdCBiZSBzcGVjaWZpZWQgb25seSB3aGVuIHB1Ymxpc2hpbmcgdG8gQVdTIENvZGVBcnRpZmFjdCAoYHJlZ2lzdHJ5YCBjb250YWlucyBBV1MgQ29kZUFydGlmYWN0IFVSTCkuXG4gICAqIFdoZW4gdXNpbmcgdGhlIGBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JRENgIGF1dGggcHJvdmlkZXIsIHRoaXMgdmFsdWUgbXVzdCBiZSBkZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVUb0Fzc3VtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBQeVBJIHJlbGVhc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQeVBpUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBDb21tb25QdWJsaXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaXN0cnkgdXJsIHRvIHVzZSB3aGVuIHJlbGVhc2luZyBwYWNrYWdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0d2luZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSB0d2luZVJlZ2lzdHJ5VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIHNlY3JldCB3aGljaCBjb250YWlucyBQeVBJIHVzZXIgbmFtZS5cbiAgICogQGRlZmF1bHQgXCJUV0lORV9VU0VSTkFNRVwiXG4gICAqL1xuICByZWFkb25seSB0d2luZVVzZXJuYW1lU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIHNlY3JldCB3aGljaCBjb250YWlucyBQeVBJIHBhc3N3b3JkLlxuICAgKiBAZGVmYXVsdCBcIlRXSU5FX1BBU1NXT1JEXCJcbiAgICovXG4gIHJlYWRvbmx5IHR3aW5lUGFzc3dvcmRTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSBQeVBJIHRydXN0ZWQgcHVibGlzaGluZyBpbnN0ZWFkIG9mIHRva2VucyBvciB1c2VybmFtZSAmIHBhc3N3b3JkLlxuICAgKlxuICAgKiBOZWVkcyB0byBiZSBzZXR1cCBpbiBQeVBJLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5weXBpLm9yZy90cnVzdGVkLXB1Ymxpc2hlcnMvYWRkaW5nLWEtcHVibGlzaGVyL1xuICAgKi9cbiAgcmVhZG9ubHkgdHJ1c3RlZFB1Ymxpc2hpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhbmQgcHVibGlzaCBjcnlwdG9ncmFwaGljIGF0dGVzdGF0aW9ucyBmb3IgZmlsZXMgdXBsb2FkZWQgdG8gUHlQSS5cbiAgICpcbiAgICogQXR0ZXN0YXRpb25zIHByb3ZpZGUgcGFja2FnZSBwcm92ZW5hbmNlIGFuZCBpbnRlZ3JpdHkgYW4gY2FuIGJlIHZpZXdlZCBvbiBQeVBJLlxuICAgKiBUaGV5IGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIGEgVHJ1c3RlZCBQdWJsaXNoZXIgZm9yIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLnB5cGkub3JnL2F0dGVzdGF0aW9ucy9wcm9kdWNpbmctYXR0ZXN0YXRpb25zL1xuICAgKiBAZGVmYXVsdCAtIGVuYWJsZWQgd2hlbiB1c2luZyB0cnVzdGVkIHB1Ymxpc2hpbmcsIG90aGVyd2lzZSBub3QgYXBwbGljYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgYXR0ZXN0YXRpb25zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgcHVibGlzaGluZyB0byBBV1MgQ29kZUFydGlmYWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUFydGlmYWN0T3B0aW9ucz86IENvZGVBcnRpZmFjdE9wdGlvbnM7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgTnVHZXQgcmVsZWFzZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdWdldFB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogR2l0SHViIHNlY3JldCB3aGljaCBjb250YWlucyB0aGUgQVBJIGtleSBmb3IgTnVHZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiTlVHRVRfQVBJX0tFWVwiXG4gICAqL1xuICByZWFkb25seSBudWdldEFwaUtleVNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogIE51R2V0IFNlcnZlciBVUkwgKGRlZmF1bHRzIHRvIG51Z2V0Lm9yZylcbiAgICovXG4gIHJlYWRvbmx5IG51Z2V0U2VydmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgTnVHZXQgdHJ1c3RlZCBwdWJsaXNoaW5nIGluc3RlYWQgb2YgQVBJIGtleXMuXG4gICAqXG4gICAqIE5lZWRzIHRvIGJlIHNldHVwIGluIE51R2V0Lm9yZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvbnVnZXQvbnVnZXQtb3JnL3RydXN0ZWQtcHVibGlzaGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgdHJ1c3RlZFB1Ymxpc2hpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgTnVHZXQub3JnIHVzZXJuYW1lIChwcm9maWxlIG5hbWUsIG5vdCBlbWFpbCBhZGRyZXNzKSBmb3IgdHJ1c3RlZCBwdWJsaXNoZXIgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIFJlcXVpcmVkIHdoZW4gdXNpbmcgdHJ1c3RlZCBwdWJsaXNoaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIk5VR0VUX1VTRVJOQU1FXCJcbiAgICovXG4gIHJlYWRvbmx5IG51Z2V0VXNlcm5hbWVTZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgTWF2ZW4gcmVsZWFzZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXZlblB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAvKipcbiAgICogVVJMIG9mIE5leHVzIHJlcG9zaXRvcnkuIGlmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIGh0dHBzOi8vb3NzLnNvbmF0eXBlLm9yZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFwiaHR0cHM6Ly9vc3Muc29uYXR5cGUub3JnXCIgb3Igbm9uZSB3aGVuIHB1Ymxpc2hpbmcgdG8gTWF2ZW4gQ2VudHJhbFxuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5FbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogVXNlZCBpbiBtYXZlbiBzZXR0aW5ncyBmb3IgY3JlZGVudGlhbCBsb29rdXAgKGUuZy4gdXNlIGdpdGh1YiB3aGVuIHB1Ymxpc2hpbmcgdG8gR2l0SHViKS5cbiAgICpcbiAgICogU2V0IHRvIGBjZW50cmFsLW9zc3JoYCB0byBwdWJsaXNoIHRvIE1hdmVuIENlbnRyYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiY2VudHJhbC1vc3NyaFwiIChNYXZlbiBDZW50cmFsKSBvciBcImdpdGh1YlwiIHdoZW4gdXNpbmcgR2l0SHViIFBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBtYXZlblNlcnZlcklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IHJlcG9zaXRvcnkgd2hlbiBub3QgZGVwbG95aW5nIHRvIE1hdmVuIENlbnRyYWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3Qgc2V0XG4gICAqL1xuICByZWFkb25seSBtYXZlblJlcG9zaXRvcnlVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgbmFtZSB3aGljaCBjb250YWlucyB0aGUgR1BHIHByaXZhdGUga2V5IG9yIGZpbGUgdGhhdCBpbmNsdWRlc1xuICAgKiBpdC4gVGhpcyBpcyB1c2VkIHRvIHNpZ24geW91ciBNYXZlblxuICAgKiBwYWNrYWdlcy4gU2VlIGluc3RydWN0aW9ucy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWIjbWF2ZW5cbiAgICogQGRlZmF1bHQgXCJNQVZFTl9HUEdfUFJJVkFURV9LRVlcIiBvciBub3Qgc2V0IHdoZW4gdXNpbmcgR2l0SHViIFBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBtYXZlbkdwZ1ByaXZhdGVLZXlTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgbmFtZSB3aGljaCBjb250YWlucyB0aGUgR1BHIHByaXZhdGUga2V5IG9yIGZpbGUgdGhhdCBpbmNsdWRlc1xuICAgKiBpdC4gVGhpcyBpcyB1c2VkIHRvIHNpZ24geW91ciBNYXZlbiBwYWNrYWdlcy4gU2VlIGluc3RydWN0aW9ucy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWIjbWF2ZW5cbiAgICogQGRlZmF1bHQgXCJNQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRVwiIG9yIG5vdCBzZXQgd2hlbiB1c2luZyBHaXRIdWIgUGFja2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IG1hdmVuR3BnUHJpdmF0ZUtleVBhc3NwaHJhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgbmFtZSB3aGljaCBjb250YWlucyB0aGUgVXNlcm5hbWUgZm9yIG1hdmVuIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEZvciBNYXZlbiBDZW50cmFsLCB5b3Ugd2lsbCBuZWVkIHRvIENyZWF0ZSBKSVJBIGFjY291bnQgYW5kIHRoZW4gcmVxdWVzdCBhXG4gICAqIG5ldyBwcm9qZWN0IChzZWUgbGlua3MpLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaXNzdWVzLnNvbmF0eXBlLm9yZy9zZWN1cmUvU2lnbnVwXG4gICAqIEBzZWUgaHR0cHM6Ly9pc3N1ZXMuc29uYXR5cGUub3JnL3NlY3VyZS9DcmVhdGVJc3N1ZS5qc3BhP2lzc3VldHlwZT0yMSZwaWQ9MTAxMzRcbiAgICpcbiAgICogQGRlZmF1bHQgXCJNQVZFTl9VU0VSTkFNRVwiIG9yIHRoZSBHaXRIdWIgQWN0b3Igd2hlbiB1c2luZyBHaXRIdWIgUGFja2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IG1hdmVuVXNlcm5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgbmFtZSB3aGljaCBjb250YWlucyB0aGUgUGFzc3dvcmQgZm9yIG1hdmVuIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEZvciBNYXZlbiBDZW50cmFsLCB5b3Ugd2lsbCBuZWVkIHRvIENyZWF0ZSBKSVJBIGFjY291bnQgYW5kIHRoZW4gcmVxdWVzdCBhXG4gICAqIG5ldyBwcm9qZWN0IChzZWUgbGlua3MpLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaXNzdWVzLnNvbmF0eXBlLm9yZy9zZWN1cmUvU2lnbnVwXG4gICAqIEBzZWUgaHR0cHM6Ly9pc3N1ZXMuc29uYXR5cGUub3JnL3NlY3VyZS9DcmVhdGVJc3N1ZS5qc3BhP2lzc3VldHlwZT0yMSZwaWQ9MTAxMzRcbiAgICpcbiAgICogQGRlZmF1bHQgXCJNQVZFTl9QQVNTV09SRFwiIG9yIFwiR0lUSFVCX1RPS0VOXCIgd2hlbiB1c2luZyBHaXRIdWIgUGFja2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IG1hdmVuUGFzc3dvcmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBzZWNyZXQgbmFtZSB3aGljaCBjb250YWlucyB0aGUgTWF2ZW4gQ2VudHJhbCAoc29uYXR5cGUpIHN0YWdpbmdcbiAgICogcHJvZmlsZSBJRCAoZS5nLiA2OGEwNTM2MzA4MzE3NCkuIFN0YWdpbmcgcHJvZmlsZSBJRCBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICAqIFVSTCBvZiB0aGUgXCJSZWxlYXNlc1wiIHN0YWdpbmcgcHJvZmlsZSB1bmRlciBcIlN0YWdpbmcgUHJvZmlsZXNcIiBpblxuICAgKiBodHRwczovL29zcy5zb25hdHlwZS5vcmcgKGUuZy5cbiAgICogaHR0cHM6Ly9vc3Muc29uYXR5cGUub3JnLyNzdGFnaW5nUHJvZmlsZXM7MTFhMzM0NTEyMzQ1MjEpXG5cbiAgICogQGRlZmF1bHQgXCJNQVZFTl9TVEFHSU5HX1BST0ZJTEVfSURcIiBvciBub3Qgc2V0IHdoZW4gdXNpbmcgR2l0SHViIFBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBtYXZlblN0YWdpbmdQcm9maWxlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgR28gcmVsZWFzZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29QdWJsaXNoT3B0aW9ucyBleHRlbmRzIENvbW1vblB1Ymxpc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdGhhdCBpbmNsdWRlcyBhIHBlcnNvbmFsIEdpdEh1YiBhY2Nlc3MgdG9rZW4gdXNlZCB0b1xuICAgKiBwdXNoIHRvIHRoZSBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogSWdub3JlZCBpZiBgZ2l0aHViVXNlU3NoYCBvciBgZ2l0aHViQ3JlZGVudGlhbHNgIGlzIHNldC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBnaXRodWJDcmVkZW50aWFsc2Agd2l0aCBgR2l0aHViQ3JlZGVudGlhbHMuZnJvbVBlcnNvbmFsQWNjZXNzVG9rZW4oKWAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgXCJHT19HSVRIVUJfVE9LRU5cIlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViVG9rZW5TZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdGhhdCBpbmNsdWRlcyBhIEdpdEh1YiBkZXBsb3kga2V5IHVzZWQgdG8gcHVzaCB0byB0aGVcbiAgICogR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIElnbm9yZWQgaWYgYGdpdGh1YlVzZVNzaGAgaXMgYGZhbHNlYCBvciBgZ2l0aHViQ3JlZGVudGlhbHNgIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJHT19HSVRIVUJfREVQTE9ZX0tFWVwiXG4gICAqL1xuICByZWFkb25seSBnaXRodWJEZXBsb3lLZXlTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSBTU0ggdG8gcHVzaCB0byBHaXRIdWIgaW5zdGVhZCBvZiBhIHBlcnNvbmFsIGFjY3NlcyB0b2tlbi5cbiAgICpcbiAgICogSWdub3JlZCBpZiBgZ2l0aHViQ3JlZGVudGlhbHNgIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1YlVzZVNzaD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgQVBJIGFjY2VzcyB0byB0aGUgR2l0SHViIHJlcG9zaXRvcnkgdXNpbmcgYEdpdGh1YkNyZWRlbnRpYWxzYCwgZS5nLiBhIEdpdEh1YiBBcHAuXG4gICAqXG4gICAqIENhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGBnaXRodWJVc2VTc2hgLCBgZ2l0aHViVG9rZW5TZWNyZXRgIG9yIGBnaXRodWJEZXBsb3lLZXlTZWNyZXRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIEdpdEh1YiBBcHAgY3JlZGVudGlhbHMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViQ3JlZGVudGlhbHM/OiBHaXRodWJDcmVkZW50aWFscztcblxuICAvKipcbiAgICogQnJhbmNoIHRvIHB1c2ggdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwibWFpblwiXG4gICAqL1xuICByZWFkb25seSBnaXRCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyIG5hbWUgdG8gdXNlIGZvciB0aGUgcmVsZWFzZSBnaXQgY29tbWl0LlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgR2l0SHViIEFjdGlvbnMgdXNlciBuYW1lXG4gICAqL1xuICByZWFkb25seSBnaXRVc2VyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVtYWlsIHRvIHVzZSBpbiB0aGUgcmVsZWFzZSBnaXQgY29tbWl0LlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgR2l0SHViIEFjdGlvbnMgdXNlciBlbWFpbFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0VXNlckVtYWlsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG1lc3NhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiY2hvcmUocmVsZWFzZSk6ICRWRVJTSU9OXCJcbiAgICovXG4gIHJlYWRvbmx5IGdpdENvbW1pdE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBWZXJzaW9uQXJ0aWZhY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiBhIHRleHQgZmlsZSAocmVsYXRpdmUgdG8gYGRpc3QvYCkgdGhhdCBjb250YWlucyB0aGUgdmVyc2lvbiBudW1iZXIuXG4gICAqXG4gICAqIEBleGFtcGxlIHZlcnNpb24udHh0XG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uRmlsZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgYSB0ZXh0IGZpbGUgKHJlbGF0aXZlIHRvIGBkaXN0L2ApIHRoYXQgY29udGFpbnMgdGhlIHJlbGVhc2UgdGFnLlxuICAgKlxuICAgKiBAZXhhbXBsZSByZWxlYXNldGFnLnR4dFxuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZVRhZ0ZpbGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIG9mIGFuIC5tZCBmaWxlIChyZWxhdGl2ZSB0byBgZGlzdC9gKSB0aGF0IGluY2x1ZGVzIHRoZSBjaGFuZ2Vsb2cgZm9yIHRoZSByZWxlYXNlLlxuICAgKlxuICAgKiBAZXhhbXBsZSBjaGFuZ2Vsb2cubWRcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZWxvZ0ZpbGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgaWYgdGhlIGByZWdpc3RyeVVybGAgaXMgYSBBV1MgQ29kZUFydGlmYWN0IHJlZ2lzdHJ5LlxuICogQHBhcmFtIHJlZ2lzdHJ5VXJsIHVybCBvZiByZWdpc3RyeVxuICogQHJldHVybnMgdHJ1ZSBmb3IgQVdTIENvZGVBcnRpZmFjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBd3NDb2RlQXJ0aWZhY3RSZWdpc3RyeShcbiAgcmVnaXN0cnlVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICByZWdpc3RyeVVybCAmJiBBV1NfQ09ERUFSVElGQUNUX1JFR0lTVFJZX1JFR0VYLnRlc3QocmVnaXN0cnlVcmwpLFxuICApO1xufVxuXG4vKipcbiAqIEluZm8gZXh0cmFjdGVkIGZyb20gQVdTIENvZGVBcnRpZmFjdCBVUkxcbiAqL1xuaW50ZXJmYWNlIEF3c0NvZGVBcnRpZmFjdEluZm8ge1xuICByZWFkb25seSBkb21haW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJzZXMgaW5mbyBhYm91dCBjb2RlIGFydGlmYWN0IGRvbWFpbiBmcm9tIGdpdmVuIEFXUyBjb2RlIGFydGlmYWN0IHVybFxuICogQHBhcmFtIHVybCBPZiBjb2RlIGFydGlmYWN0IGRvbWFpblxuICogQHJldHVybnMgZG9tYWluLCBhY2NvdW50LCBhbmQgcmVnaW9uIG9mIGNvZGUgYXJ0aWZhY3QgZG9tYWluXG4gKi9cbmZ1bmN0aW9uIGF3c0NvZGVBcnRpZmFjdEluZm9Gcm9tVXJsKHVybD86IHN0cmluZyk6IEF3c0NvZGVBcnRpZmFjdEluZm8ge1xuICBjb25zdCBjYXB0dXJlUmVnZXggPVxuICAgIC8oW2EtejAtOS1dKyktKC4rKVxcLmRcXC5jb2RlYXJ0aWZhY3RcXC4oLispXFwuYW1hem9uYXdzXFwuY29tLztcbiAgY29uc3QgbWF0Y2hlcyA9IHVybD8ubWF0Y2goY2FwdHVyZVJlZ2V4KSA/PyBbXTtcbiAgY29uc3QgW18sIGRvbWFpbiwgYWNjb3VudCwgcmVnaW9uXSA9IG1hdGNoZXM7XG4gIHJldHVybiB7IGRvbWFpbiwgYWNjb3VudCwgcmVnaW9uIH07XG59XG5cbi8qKlxuICogUHVibGlzaGluZyBvcHRpb25zIGZvciBHaXRIdWIgcmVsZWFzZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViUmVsZWFzZXNQdWJsaXNoT3B0aW9uc1xuICBleHRlbmRzIFZlcnNpb25BcnRpZmFjdE9wdGlvbnMsIENvbW1vblB1Ymxpc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgR2l0SHViIHNob3VsZCBleHBsaWNpdGx5IG1hcmsgdGhlIHJlbGVhc2UgYXMgdGhlIGxhdGVzdCByZWxlYXNlLlxuICAgKlxuICAgKiBTZXQgdG8gYHRydWVgIHRvIG1hcmsgdGhlIHJlbGVhc2UgYXMgbGF0ZXN0LCBvciBgZmFsc2VgIHRvIGV4cGxpY2l0bHkgbm90XG4gICAqIG1hcmsgaXQgYXMgbGF0ZXN0LiBBIGJyYW5jaC1zcGVjaWZpYyBzZXR0aW5nIHRha2VzIHByZWNlZGVuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gR2l0SHViIGRldGVybWluZXMgdGhlIGxhdGVzdCByZWxlYXNlIGJhc2VkIG9uIGRhdGUgYW5kIHNlbWFudGljIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBsYXRlc3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFB1Ymxpc2hpbmcgb3B0aW9ucyBmb3IgR2l0IHJlbGVhc2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0UHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBWZXJzaW9uQXJ0aWZhY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiBhbiAubWQgZmlsZSB0aGF0IGluY2x1ZGVzIHRoZSBwcm9qZWN0LWxldmVsIGNoYW5nZWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RDaGFuZ2Vsb2dGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCcmFuY2ggdG8gcHVzaCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJtYWluXCJcbiAgICovXG4gIHJlYWRvbmx5IGdpdEJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgZ2l0LXB1c2ggY29tbWFuZC5cbiAgICpcbiAgICogUnVucyBhcyBhIHNoZWxsIGNvbW1hbmQgaW4gdGhlIGBwdWJsaXNoOmdpdGAgdGFzayAtIHdoZXJlIHJlbGVhc2VcbiAgICogY3JlZGVudGlhbHMgYXJlIGluIHNjb3BlIC0gcmVwbGFjaW5nIHRoZSBkZWZhdWx0XG4gICAqIGBnaXQgcHVzaCAtLWZvbGxvdy10YWdzIG9yaWdpbiA8YnJhbmNoPmAuIFNoZWxsIHN5bnRheCBpcyBpbnRlcnByZXRlZCwgc29cbiAgICoga2VlcCBpdCBhIGxpdGVyYWwgY29tbWFuZC5cbiAgICpcbiAgICogU2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIHB1c2hpbmcuXG4gICAqL1xuICByZWFkb25seSBnaXRQdXNoQ29tbWFuZD86IHN0cmluZztcbn1cblxudHlwZSBQdWJsaXNoSm9iRmFjdG9yeSA9IChcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIGJyYW5jaE9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4sXG4pID0+IFJlY29yZDxzdHJpbmcsIEpvYj47XG4iXX0=
|
|
@@ -7,7 +7,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
7
7
|
* and release artifact automation
|
|
8
8
|
*/
|
|
9
9
|
class ReleaseTrigger {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.ReleaseTrigger", version: "0.103.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.release.ReleaseTrigger", version: "0.103.13" };
|
|
11
11
|
/**
|
|
12
12
|
* Creates a manual release trigger.
|
|
13
13
|
*
|
package/lib/release/release.d.ts
CHANGED
|
@@ -108,6 +108,16 @@ export interface ReleaseProjectOptions {
|
|
|
108
108
|
readonly releaseBranches?: {
|
|
109
109
|
[name: string]: BranchOptions;
|
|
110
110
|
};
|
|
111
|
+
/**
|
|
112
|
+
* Whether GitHub should explicitly mark the release from the default branch
|
|
113
|
+
* as the latest release.
|
|
114
|
+
*
|
|
115
|
+
* Set to `true` to mark the release as latest, or `false` to explicitly not
|
|
116
|
+
* mark it as latest.
|
|
117
|
+
*
|
|
118
|
+
* @default - GitHub determines the latest release based on date and semantic version.
|
|
119
|
+
*/
|
|
120
|
+
readonly githubReleaseLatest?: boolean;
|
|
111
121
|
/**
|
|
112
122
|
* Create a github issue on every failed publishing task.
|
|
113
123
|
*
|
|
@@ -408,6 +418,16 @@ export interface BranchOptions {
|
|
|
408
418
|
* @default - normal releases
|
|
409
419
|
*/
|
|
410
420
|
readonly prerelease?: string;
|
|
421
|
+
/**
|
|
422
|
+
* Whether GitHub should explicitly mark the release from this branch as the
|
|
423
|
+
* latest release.
|
|
424
|
+
*
|
|
425
|
+
* Set to `true` to mark the release as latest, or `false` to explicitly not
|
|
426
|
+
* mark it as latest.
|
|
427
|
+
*
|
|
428
|
+
* @default - GitHub determines the latest release based on date and semantic version.
|
|
429
|
+
*/
|
|
430
|
+
readonly githubReleaseLatest?: boolean;
|
|
411
431
|
/**
|
|
412
432
|
* Automatically add the given prefix to release tags.
|
|
413
433
|
* Useful if you are releasing on multiple branches with overlapping
|