projen 0.98.21 → 0.98.23
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 +6576 -900
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +5 -5
- 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 +2 -2
- 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 +4 -4
- 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.d.ts +4 -0
- package/lib/awscdk/lambda-function.js +7 -3
- 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-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/circleci/circleci.js +1 -1
- package/lib/component.js +1 -1
- 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/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/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-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.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/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 +2 -2
- package/lib/projenrc.js +1 -1
- package/lib/python/index.d.ts +4 -0
- package/lib/python/index.js +6 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.d.ts +4 -3
- package/lib/python/poetry.js +11 -18
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.d.ts +13 -0
- package/lib/python/pyproject-toml-file.js +29 -0
- package/lib/python/pyproject-toml.d.ts +418 -0
- package/lib/python/pyproject-toml.js +187 -0
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-packaging.d.ts +5 -0
- package/lib/python/python-packaging.js +1 -1
- package/lib/python/python-project.d.ts +10 -1
- package/lib/python/python-project.js +62 -8
- 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.d.ts +1804 -0
- package/lib/python/uv-config.js +344 -0
- package/lib/python/uv.d.ts +53 -0
- package/lib/python/uv.js +138 -0
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/renovatebot.js +1 -1
- package/lib/sample-file.js +2 -2
- package/lib/semver.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-runtime.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.d.ts +2 -2
- package/lib/toml.js +4 -4
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +6 -6
- 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 +4 -4
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TrustedPublishing = void 0;
|
|
4
|
+
exports.toJson_UvConfiguration = toJson_UvConfiguration;
|
|
5
|
+
exports.toJson_BuildBackendSettings = toJson_BuildBackendSettings;
|
|
6
|
+
exports.toJson_SchemaConflictItem = toJson_SchemaConflictItem;
|
|
7
|
+
exports.toJson_DependencyGroupSettings = toJson_DependencyGroupSettings;
|
|
8
|
+
exports.toJson_StaticMetadata = toJson_StaticMetadata;
|
|
9
|
+
exports.toJson_Index = toJson_Index;
|
|
10
|
+
exports.toJson_PipOptions = toJson_PipOptions;
|
|
11
|
+
exports.toJson_ToolUvWorkspace = toJson_ToolUvWorkspace;
|
|
12
|
+
exports.toJson_WheelDataIncludes = toJson_WheelDataIncludes;
|
|
13
|
+
exports.toJson_IndexCacheControl = toJson_IndexCacheControl;
|
|
14
|
+
exports.toJson_PipGroupName = toJson_PipGroupName;
|
|
15
|
+
/**
|
|
16
|
+
* Converts an object of type 'UvConfiguration' to JSON representation.
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
20
|
+
function toJson_UvConfiguration(obj) {
|
|
21
|
+
if (obj === undefined) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const result = {
|
|
25
|
+
'add-bounds': obj.addBounds,
|
|
26
|
+
'allow-insecure-host': obj.allowInsecureHost?.map(y => y),
|
|
27
|
+
'build-backend': toJson_BuildBackendSettings(obj.buildBackend),
|
|
28
|
+
'build-constraint-dependencies': obj.buildConstraintDependencies?.map(y => y),
|
|
29
|
+
'cache-dir': obj.cacheDir,
|
|
30
|
+
'cache-keys': obj.cacheKeys?.map(y => y),
|
|
31
|
+
'check-url': obj.checkUrl,
|
|
32
|
+
'compile-bytecode': obj.compileBytecode,
|
|
33
|
+
'concurrent-builds': obj.concurrentBuilds,
|
|
34
|
+
'concurrent-downloads': obj.concurrentDownloads,
|
|
35
|
+
'concurrent-installs': obj.concurrentInstalls,
|
|
36
|
+
'config-settings': ((obj.configSettings) === undefined) ? undefined : (Object.entries(obj.configSettings).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
|
|
37
|
+
'config-settings-package': ((obj.configSettingsPackage) === undefined) ? undefined : (Object.entries(obj.configSettingsPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
|
|
38
|
+
'conflicts': obj.conflicts?.map(y => y?.map(y => toJson_SchemaConflictItem(y))),
|
|
39
|
+
'constraint-dependencies': obj.constraintDependencies?.map(y => y),
|
|
40
|
+
'default-groups': obj.defaultGroups,
|
|
41
|
+
'dependency-groups': ((obj.dependencyGroups) === undefined) ? undefined : (Object.entries(obj.dependencyGroups).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: toJson_DependencyGroupSettings(i[1]) }), {})),
|
|
42
|
+
'dependency-metadata': obj.dependencyMetadata?.map(y => toJson_StaticMetadata(y)),
|
|
43
|
+
'dev-dependencies': obj.devDependencies?.map(y => y),
|
|
44
|
+
'environments': obj.environments?.map(y => y),
|
|
45
|
+
'exclude-dependencies': obj.excludeDependencies?.map(y => y),
|
|
46
|
+
'exclude-newer': obj.excludeNewer,
|
|
47
|
+
'exclude-newer-package': ((obj.excludeNewerPackage) === undefined) ? undefined : (Object.entries(obj.excludeNewerPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
|
|
48
|
+
'extra-build-dependencies': ((obj.extraBuildDependencies) === undefined) ? undefined : (Object.entries(obj.extraBuildDependencies).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.map(y => y) }), {})),
|
|
49
|
+
'extra-build-variables': ((obj.extraBuildVariables) === undefined) ? undefined : (Object.entries(obj.extraBuildVariables).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
|
|
50
|
+
'extra-index-url': obj.extraIndexUrl?.map(y => y),
|
|
51
|
+
'find-links': obj.findLinks?.map(y => y),
|
|
52
|
+
'fork-strategy': obj.forkStrategy,
|
|
53
|
+
'index': obj.index?.map(y => toJson_Index(y)),
|
|
54
|
+
'index-strategy': obj.indexStrategy,
|
|
55
|
+
'index-url': obj.indexUrl,
|
|
56
|
+
'keyring-provider': obj.keyringProvider,
|
|
57
|
+
'link-mode': obj.linkMode,
|
|
58
|
+
'managed': obj.managed,
|
|
59
|
+
'native-tls': obj.nativeTls,
|
|
60
|
+
'no-binary': obj.noBinary,
|
|
61
|
+
'no-binary-package': obj.noBinaryPackage?.map(y => y),
|
|
62
|
+
'no-build': obj.noBuild,
|
|
63
|
+
'no-build-isolation': obj.noBuildIsolation,
|
|
64
|
+
'no-build-isolation-package': obj.noBuildIsolationPackage?.map(y => y),
|
|
65
|
+
'no-build-package': obj.noBuildPackage?.map(y => y),
|
|
66
|
+
'no-cache': obj.noCache,
|
|
67
|
+
'no-index': obj.noIndex,
|
|
68
|
+
'no-sources': obj.noSources,
|
|
69
|
+
'offline': obj.offline,
|
|
70
|
+
'override-dependencies': obj.overrideDependencies?.map(y => y),
|
|
71
|
+
'package': obj.package,
|
|
72
|
+
'pip': toJson_PipOptions(obj.pip),
|
|
73
|
+
'prerelease': obj.prerelease,
|
|
74
|
+
'preview': obj.preview,
|
|
75
|
+
'publish-url': obj.publishUrl,
|
|
76
|
+
'pypy-install-mirror': obj.pypyInstallMirror,
|
|
77
|
+
'python-downloads': obj.pythonDownloads,
|
|
78
|
+
'python-downloads-json-url': obj.pythonDownloadsJsonUrl,
|
|
79
|
+
'python-install-mirror': obj.pythonInstallMirror,
|
|
80
|
+
'python-preference': obj.pythonPreference,
|
|
81
|
+
'reinstall': obj.reinstall,
|
|
82
|
+
'reinstall-package': obj.reinstallPackage?.map(y => y),
|
|
83
|
+
'required-environments': obj.requiredEnvironments?.map(y => y),
|
|
84
|
+
'required-version': obj.requiredVersion,
|
|
85
|
+
'resolution': obj.resolution,
|
|
86
|
+
'sources': ((obj.sources) === undefined) ? undefined : (Object.entries(obj.sources).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.map(y => y) }), {})),
|
|
87
|
+
'trusted-publishing': obj.trustedPublishing,
|
|
88
|
+
'upgrade': obj.upgrade,
|
|
89
|
+
'upgrade-package': obj.upgradePackage?.map(y => y),
|
|
90
|
+
'workspace': toJson_ToolUvWorkspace(obj.workspace),
|
|
91
|
+
};
|
|
92
|
+
// filter undefined values
|
|
93
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Converts an object of type 'BuildBackendSettings' to JSON representation.
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
100
|
+
function toJson_BuildBackendSettings(obj) {
|
|
101
|
+
if (obj === undefined) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
const result = {
|
|
105
|
+
'data': toJson_WheelDataIncludes(obj.data),
|
|
106
|
+
'default-excludes': obj.defaultExcludes,
|
|
107
|
+
'module-name': obj.moduleName,
|
|
108
|
+
'module-root': obj.moduleRoot,
|
|
109
|
+
'namespace': obj.namespace,
|
|
110
|
+
'source-exclude': obj.sourceExclude?.map(y => y),
|
|
111
|
+
'source-include': obj.sourceInclude?.map(y => y),
|
|
112
|
+
'wheel-exclude': obj.wheelExclude?.map(y => y),
|
|
113
|
+
};
|
|
114
|
+
// filter undefined values
|
|
115
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Converts an object of type 'SchemaConflictItem' to JSON representation.
|
|
119
|
+
* @internal
|
|
120
|
+
*/
|
|
121
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
122
|
+
function toJson_SchemaConflictItem(obj) {
|
|
123
|
+
if (obj === undefined) {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
const result = {
|
|
127
|
+
'extra': obj.extra,
|
|
128
|
+
'group': obj.group,
|
|
129
|
+
'package': obj.package,
|
|
130
|
+
};
|
|
131
|
+
// filter undefined values
|
|
132
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Converts an object of type 'DependencyGroupSettings' to JSON representation.
|
|
136
|
+
* @internal
|
|
137
|
+
*/
|
|
138
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
139
|
+
function toJson_DependencyGroupSettings(obj) {
|
|
140
|
+
if (obj === undefined) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
const result = {
|
|
144
|
+
'requires-python': obj.requiresPython,
|
|
145
|
+
};
|
|
146
|
+
// filter undefined values
|
|
147
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Converts an object of type 'StaticMetadata' to JSON representation.
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
153
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
154
|
+
function toJson_StaticMetadata(obj) {
|
|
155
|
+
if (obj === undefined) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
const result = {
|
|
159
|
+
'name': obj.name,
|
|
160
|
+
'provides-extra': obj.providesExtra?.map(y => y),
|
|
161
|
+
'requires-dist': obj.requiresDist?.map(y => y),
|
|
162
|
+
'requires-python': obj.requiresPython,
|
|
163
|
+
'version': obj.version,
|
|
164
|
+
};
|
|
165
|
+
// filter undefined values
|
|
166
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Converts an object of type 'Index' to JSON representation.
|
|
170
|
+
* @internal
|
|
171
|
+
*/
|
|
172
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
173
|
+
function toJson_Index(obj) {
|
|
174
|
+
if (obj === undefined) {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
const result = {
|
|
178
|
+
'authenticate': obj.authenticate,
|
|
179
|
+
'cache-control': toJson_IndexCacheControl(obj.cacheControl),
|
|
180
|
+
'default': obj.default,
|
|
181
|
+
'explicit': obj.explicit,
|
|
182
|
+
'format': obj.format,
|
|
183
|
+
'ignore-error-codes': obj.ignoreErrorCodes?.map(y => y),
|
|
184
|
+
'name': obj.name,
|
|
185
|
+
'publish-url': obj.publishUrl,
|
|
186
|
+
'url': obj.url,
|
|
187
|
+
};
|
|
188
|
+
// filter undefined values
|
|
189
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Converts an object of type 'PipOptions' to JSON representation.
|
|
193
|
+
* @internal
|
|
194
|
+
*/
|
|
195
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
196
|
+
function toJson_PipOptions(obj) {
|
|
197
|
+
if (obj === undefined) {
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
const result = {
|
|
201
|
+
'all-extras': obj.allExtras,
|
|
202
|
+
'allow-empty-requirements': obj.allowEmptyRequirements,
|
|
203
|
+
'annotation-style': obj.annotationStyle,
|
|
204
|
+
'break-system-packages': obj.breakSystemPackages,
|
|
205
|
+
'compile-bytecode': obj.compileBytecode,
|
|
206
|
+
'config-settings': ((obj.configSettings) === undefined) ? undefined : (Object.entries(obj.configSettings).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
|
|
207
|
+
'config-settings-package': ((obj.configSettingsPackage) === undefined) ? undefined : (Object.entries(obj.configSettingsPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
|
|
208
|
+
'custom-compile-command': obj.customCompileCommand,
|
|
209
|
+
'dependency-metadata': obj.dependencyMetadata?.map(y => toJson_StaticMetadata(y)),
|
|
210
|
+
'emit-build-options': obj.emitBuildOptions,
|
|
211
|
+
'emit-find-links': obj.emitFindLinks,
|
|
212
|
+
'emit-index-annotation': obj.emitIndexAnnotation,
|
|
213
|
+
'emit-index-url': obj.emitIndexUrl,
|
|
214
|
+
'emit-marker-expression': obj.emitMarkerExpression,
|
|
215
|
+
'exclude-newer': obj.excludeNewer,
|
|
216
|
+
'exclude-newer-package': ((obj.excludeNewerPackage) === undefined) ? undefined : (Object.entries(obj.excludeNewerPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
|
|
217
|
+
'extra': obj.extra?.map(y => y),
|
|
218
|
+
'extra-build-dependencies': ((obj.extraBuildDependencies) === undefined) ? undefined : (Object.entries(obj.extraBuildDependencies).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.map(y => y) }), {})),
|
|
219
|
+
'extra-build-variables': ((obj.extraBuildVariables) === undefined) ? undefined : (Object.entries(obj.extraBuildVariables).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
|
|
220
|
+
'extra-index-url': obj.extraIndexUrl?.map(y => y),
|
|
221
|
+
'find-links': obj.findLinks?.map(y => y),
|
|
222
|
+
'fork-strategy': obj.forkStrategy,
|
|
223
|
+
'generate-hashes': obj.generateHashes,
|
|
224
|
+
'group': obj.group?.map(y => toJson_PipGroupName(y)),
|
|
225
|
+
'index-strategy': obj.indexStrategy,
|
|
226
|
+
'index-url': obj.indexUrl,
|
|
227
|
+
'keyring-provider': obj.keyringProvider,
|
|
228
|
+
'link-mode': obj.linkMode,
|
|
229
|
+
'no-annotate': obj.noAnnotate,
|
|
230
|
+
'no-binary': obj.noBinary?.map(y => y),
|
|
231
|
+
'no-build': obj.noBuild,
|
|
232
|
+
'no-build-isolation': obj.noBuildIsolation,
|
|
233
|
+
'no-build-isolation-package': obj.noBuildIsolationPackage?.map(y => y),
|
|
234
|
+
'no-deps': obj.noDeps,
|
|
235
|
+
'no-emit-package': obj.noEmitPackage?.map(y => y),
|
|
236
|
+
'no-extra': obj.noExtra?.map(y => y),
|
|
237
|
+
'no-header': obj.noHeader,
|
|
238
|
+
'no-index': obj.noIndex,
|
|
239
|
+
'no-sources': obj.noSources,
|
|
240
|
+
'no-strip-extras': obj.noStripExtras,
|
|
241
|
+
'no-strip-markers': obj.noStripMarkers,
|
|
242
|
+
'only-binary': obj.onlyBinary?.map(y => y),
|
|
243
|
+
'output-file': obj.outputFile,
|
|
244
|
+
'prefix': obj.prefix,
|
|
245
|
+
'prerelease': obj.prerelease,
|
|
246
|
+
'python': obj.python,
|
|
247
|
+
'python-platform': obj.pythonPlatform,
|
|
248
|
+
'python-version': obj.pythonVersion,
|
|
249
|
+
'reinstall': obj.reinstall,
|
|
250
|
+
'reinstall-package': obj.reinstallPackage?.map(y => y),
|
|
251
|
+
'require-hashes': obj.requireHashes,
|
|
252
|
+
'resolution': obj.resolution,
|
|
253
|
+
'strict': obj.strict,
|
|
254
|
+
'system': obj.system,
|
|
255
|
+
'target': obj.target,
|
|
256
|
+
'torch-backend': obj.torchBackend,
|
|
257
|
+
'universal': obj.universal,
|
|
258
|
+
'upgrade': obj.upgrade,
|
|
259
|
+
'upgrade-package': obj.upgradePackage?.map(y => y),
|
|
260
|
+
'verify-hashes': obj.verifyHashes,
|
|
261
|
+
};
|
|
262
|
+
// filter undefined values
|
|
263
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
264
|
+
}
|
|
265
|
+
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
266
|
+
/**
|
|
267
|
+
* @schema TrustedPublishing
|
|
268
|
+
*/
|
|
269
|
+
var TrustedPublishing;
|
|
270
|
+
(function (TrustedPublishing) {
|
|
271
|
+
/** always */
|
|
272
|
+
TrustedPublishing["ALWAYS"] = "always";
|
|
273
|
+
/** never */
|
|
274
|
+
TrustedPublishing["NEVER"] = "never";
|
|
275
|
+
})(TrustedPublishing || (exports.TrustedPublishing = TrustedPublishing = {}));
|
|
276
|
+
/**
|
|
277
|
+
* Converts an object of type 'ToolUvWorkspace' to JSON representation.
|
|
278
|
+
* @internal
|
|
279
|
+
*/
|
|
280
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
281
|
+
function toJson_ToolUvWorkspace(obj) {
|
|
282
|
+
if (obj === undefined) {
|
|
283
|
+
return undefined;
|
|
284
|
+
}
|
|
285
|
+
const result = {
|
|
286
|
+
'exclude': obj.exclude?.map(y => y),
|
|
287
|
+
'members': obj.members?.map(y => y),
|
|
288
|
+
};
|
|
289
|
+
// filter undefined values
|
|
290
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Converts an object of type 'WheelDataIncludes' to JSON representation.
|
|
294
|
+
* @internal
|
|
295
|
+
*/
|
|
296
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
297
|
+
function toJson_WheelDataIncludes(obj) {
|
|
298
|
+
if (obj === undefined) {
|
|
299
|
+
return undefined;
|
|
300
|
+
}
|
|
301
|
+
const result = {
|
|
302
|
+
'data': obj.data,
|
|
303
|
+
'headers': obj.headers,
|
|
304
|
+
'platlib': obj.platlib,
|
|
305
|
+
'purelib': obj.purelib,
|
|
306
|
+
'scripts': obj.scripts,
|
|
307
|
+
};
|
|
308
|
+
// filter undefined values
|
|
309
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Converts an object of type 'IndexCacheControl' to JSON representation.
|
|
313
|
+
* @internal
|
|
314
|
+
*/
|
|
315
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
316
|
+
function toJson_IndexCacheControl(obj) {
|
|
317
|
+
if (obj === undefined) {
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
const result = {
|
|
321
|
+
'api': obj.api,
|
|
322
|
+
'files': obj.files,
|
|
323
|
+
};
|
|
324
|
+
// filter undefined values
|
|
325
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Converts an object of type 'PipGroupName' to JSON representation.
|
|
329
|
+
* @internal
|
|
330
|
+
*/
|
|
331
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
332
|
+
function toJson_PipGroupName(obj) {
|
|
333
|
+
if (obj === undefined) {
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
const result = {
|
|
337
|
+
'name': obj.name,
|
|
338
|
+
'path': obj.path,
|
|
339
|
+
};
|
|
340
|
+
// filter undefined values
|
|
341
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
342
|
+
}
|
|
343
|
+
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXYtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi91di1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK3VCQSx3REF3RUM7QUFtS0Qsa0VBY0M7QUFpQ0QsOERBU0M7QUFvQkQsd0VBT0M7QUE2Q0Qsc0RBV0M7QUF1SkQsb0NBZUM7QUFtcEJELDhDQWtFQztBQThDRCx3REFRQztBQTBDRCw0REFXQztBQTZCRCw0REFRQztBQTRCRCxrREFRQztBQTE2Q0Q7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLHNCQUFzQixDQUFDLEdBQWdDO0lBQ3JFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQzNCLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsZUFBZSxFQUFFLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDOUQsK0JBQStCLEVBQUUsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxXQUFXLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDekIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN6QixrQkFBa0IsRUFBRSxHQUFHLENBQUMsZUFBZTtRQUN2QyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO1FBQ3pDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7UUFDL0MscUJBQXFCLEVBQUUsR0FB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RUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxTix1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BMLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNVLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxvQkFBb0I7UUFDbEQscUJBQXFCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0I7UUFDMUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGFBQWE7UUFDcEMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLG1CQUFtQjtRQUNoRCxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsWUFBWTtRQUNsQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsb0JBQW9CO1FBQ2xELGVBQWUsRUFBRSxHQUFHLENBQUMsWUFBWTtRQUNqQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcE0sT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxTix1QkFBdUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMs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LENBQUMsSUFBSTtLQUNqQixDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUFDRCxvRkFBb0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJub2RlIC4vcHJvamVuLmpzXCIuXG4vKipcbiAqIE1ldGFkYXRhIGFuZCBjb25maWd1cmF0aW9uIGZvciB1di5cbiAqXG4gKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFV2Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2ZXJzaW9uIHNwZWNpZmllciB3aGVuIGFkZGluZyBhIGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIFdoZW4gYWRkaW5nIGEgZGVwZW5kZW5jeSB0byB0aGUgcHJvamVjdCwgaWYgbm8gY29uc3RyYWludCBvciBVUkwgaXMgcHJvdmlkZWQsIGEgY29uc3RyYWludFxuICAgKiBpcyBhZGRlZCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gQnkgZGVmYXVsdCwgYSBsb3dlciBib3VuZFxuICAgKiBjb25zdHJhaW50IGlzIHVzZWQsIGUuZy4sIGA+PTEuMi4zYC5cbiAgICpcbiAgICogV2hlbiBgLS1mcm96ZW5gIGlzIHByb3ZpZGVkLCBubyByZXNvbHV0aW9uIGlzIHBlcmZvcm1lZCwgYW5kIGRlcGVuZGVuY2llcyBhcmUgYWx3YXlzIGFkZGVkXG4gICAqIHdpdGhvdXQgY29uc3RyYWludHMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIGluIHByZXZpZXcgYW5kIG1heSBjaGFuZ2UgaW4gYW55IGZ1dHVyZSByZWxlYXNlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNhZGQtYm91bmRzXG4gICAqL1xuICByZWFkb25seSBhZGRCb3VuZHM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93IGluc2VjdXJlIGNvbm5lY3Rpb25zIHRvIGhvc3QuXG4gICAqXG4gICAqIEV4cGVjdHMgdG8gcmVjZWl2ZSBlaXRoZXIgYSBob3N0bmFtZSAoZS5nLiwgYGxvY2FsaG9zdGApLCBhIGhvc3QtcG9ydCBwYWlyIChlLmcuLFxuICAgKiBgbG9jYWxob3N0OjgwODBgKSwgb3IgYSBVUkwgKGUuZy4sIGBodHRwczovL2xvY2FsaG9zdGApLlxuICAgKlxuICAgKiBXQVJOSU5HOiBIb3N0cyBpbmNsdWRlZCBpbiB0aGlzIGxpc3Qgd2lsbCBub3QgYmUgdmVyaWZpZWQgYWdhaW5zdCB0aGUgc3lzdGVtJ3MgY2VydGlmaWNhdGVcbiAgICogc3RvcmUuIE9ubHkgdXNlIGAtLWFsbG93LWluc2VjdXJlLWhvc3RgIGluIGEgc2VjdXJlIG5ldHdvcmsgd2l0aCB2ZXJpZmllZCBzb3VyY2VzLCBhcyBpdFxuICAgKiBieXBhc3NlcyBTU0wgdmVyaWZpY2F0aW9uIGFuZCBjb3VsZCBleHBvc2UgeW91IHRvIE1JVE0gYXR0YWNrcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jYWxsb3ctaW5zZWN1cmUtaG9zdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dJbnNlY3VyZUhvc3Q/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHV2IGJ1aWxkIGJhY2tlbmQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aG9zZSBzZXR0aW5ncyBvbmx5IGFwcGx5IHdoZW4gdXNpbmcgdGhlIGB1dl9idWlsZGAgYmFja2VuZCwgb3RoZXIgYnVpbGQgYmFja2VuZHNcbiAgICogKHN1Y2ggYXMgaGF0Y2hsaW5nKSBoYXZlIHRoZWlyIG93biBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNidWlsZC1iYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBidWlsZEJhY2tlbmQ/OiBCdWlsZEJhY2tlbmRTZXR0aW5ncztcblxuICAvKipcbiAgICogUEVQIDUwOC1zdHlsZSByZXF1aXJlbWVudHMsIGUuZy4sIGBydWZmPT0wLjUuMGAsIG9yIGBydWZmIEAgaHR0cHM6Ly8uLi5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNidWlsZC1jb25zdHJhaW50LWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb25zdHJhaW50RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGNhY2hlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY2FjaGUtZGlyXG4gICAqL1xuICByZWFkb25seSBjYWNoZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGtleXMgdG8gY29uc2lkZXIgd2hlbiBjYWNoaW5nIGJ1aWxkcyBmb3IgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIENhY2hlIGtleXMgZW5hYmxlIHlvdSB0byBzcGVjaWZ5IHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgcmVidWlsZCB3aGVuXG4gICAqIG1vZGlmaWVkLiBCeSBkZWZhdWx0LCB1diB3aWxsIHJlYnVpbGQgYSBwcm9qZWN0IHdoZW5ldmVyIHRoZSBgcHlwcm9qZWN0LnRvbWxgLCBgc2V0dXAucHlgLFxuICAgKiBvciBgc2V0dXAuY2ZnYCBmaWxlcyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnkgYXJlIG1vZGlmaWVkLCBvciBpZiBhIGBzcmNgIGRpcmVjdG9yeSBpc1xuICAgKiBhZGRlZCBvciByZW1vdmVkLCBpLmUuOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCJweXByb2plY3QudG9tbFwiIH0sIHsgZmlsZSA9IFwic2V0dXAucHlcIiB9LCB7IGZpbGUgPSBcInNldHVwLmNmZ1wiIH0sIHsgZGlyID0gXCJzcmNcIiB9XVxuICAgKiBgYGBcbiAgICpcbiAgICogQXMgYW4gZXhhbXBsZTogaWYgYSBwcm9qZWN0IHVzZXMgZHluYW1pYyBtZXRhZGF0YSB0byByZWFkIGl0cyBkZXBlbmRlbmNpZXMgZnJvbSBhXG4gICAqIGByZXF1aXJlbWVudHMudHh0YCBmaWxlLCB5b3UgY2FuIHNwZWNpZnkgYGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCJyZXF1aXJlbWVudHMudHh0XCIgfSwgeyBmaWxlID0gXCJweXByb2plY3QudG9tbFwiIH1dYFxuICAgKiB0byBlbnN1cmUgdGhhdCB0aGUgcHJvamVjdCBpcyByZWJ1aWx0IHdoZW5ldmVyIHRoZSBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZSBpcyBtb2RpZmllZCAoaW5cbiAgICogYWRkaXRpb24gdG8gd2F0Y2hpbmcgdGhlIGBweXByb2plY3QudG9tbGApLlxuICAgKlxuICAgKiBHbG9icyBhcmUgc3VwcG9ydGVkLCBmb2xsb3dpbmcgdGhlIHN5bnRheCBvZiB0aGUgW2BnbG9iYF0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvMC4zLjEvZ2xvYi9zdHJ1Y3QuUGF0dGVybi5odG1sKVxuICAgKiBjcmF0ZS4gRm9yIGV4YW1wbGUsIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIHdoZW5ldmVyIGEgYC50b21sYCBmaWxlIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeVxuICAgKiBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzIGlzIG1vZGlmaWVkLCB5b3UgY2FuIHNwZWNpZnkgYGNhY2hlLWtleXMgPSBbeyBmaWxlID0gXCIqXy8qLnRvbWxcIiB9XWAuXG4gICAqIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGdsb2JzIGNhbiBiZSBleHBlbnNpdmUsIGFzIHV2IG1heSBuZWVkIHRvIHdhbGsgdGhlIGZpbGVzeXN0ZW0gdG9cbiAgICogZGV0ZXJtaW5lIHdoZXRoZXIgYW55IGZpbGVzIGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogQ2FjaGUga2V5cyBjYW4gYWxzbyBpbmNsdWRlIHZlcnNpb24gY29udHJvbCBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGlmIGEgcHJvamVjdCB1c2VzXG4gICAqIGBzZXR1cHRvb2xzX3NjbWAgdG8gcmVhZCBpdHMgdmVyc2lvbiBmcm9tIGEgR2l0IGNvbW1pdCwgeW91IGNhbiBzcGVjaWZ5IGBjYWNoZS1rZXlzID0gW3sgZ2l0ID0geyBjb21taXQgPSB0cnVlIH0sIHsgZmlsZSA9IFwicHlwcm9qZWN0LnRvbWxcIiB9XWBcbiAgICogdG8gaW5jbHVkZSB0aGUgY3VycmVudCBHaXQgY29tbWl0IGhhc2ggaW4gdGhlIGNhY2hlIGtleSAoaW4gYWRkaXRpb24gdG8gdGhlXG4gICAqIGBweXByb2plY3QudG9tbGApLiBHaXQgdGFncyBhcmUgYWxzbyBzdXBwb3J0ZWQgdmlhIGBjYWNoZS1rZXlzID0gW3sgZ2l0ID0geyBjb21taXQgPSB0cnVlLCB0YWdzID0gdHJ1ZSB9IH1dYC5cbiAgICpcbiAgICogQ2FjaGUga2V5cyBjYW4gYWxzbyBpbmNsdWRlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gRm9yIGV4YW1wbGUsIGlmIGEgcHJvamVjdCByZWxpZXMgb25cbiAgICogYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVGAgb3Igb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGRldGVybWluZSBpdHMgYmVoYXZpb3IsIHlvdSBjYW5cbiAgICogc3BlY2lmeSBgY2FjaGUta2V5cyA9IFt7IGVudiA9IFwiTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXCIgfV1gIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlXG4gICAqIHdoZW5ldmVyIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBDYWNoZSBrZXlzIG9ubHkgYWZmZWN0IHRoZSBwcm9qZWN0IGRlZmluZWQgYnkgdGhlIGBweXByb2plY3QudG9tbGAgaW4gd2hpY2ggdGhleSdyZVxuICAgKiBzcGVjaWZpZWQgKGFzIG9wcG9zZWQgdG8sIGUuZy4sIGFmZmVjdGluZyBhbGwgbWVtYmVycyBpbiBhIHdvcmtzcGFjZSksIGFuZCBhbGwgcGF0aHMgYW5kXG4gICAqIGdsb2JzIGFyZSBpbnRlcnByZXRlZCBhcyByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NhY2hlLWtleXNcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlS2V5cz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBDaGVjayBhbiBpbmRleCBVUkwgZm9yIGV4aXN0aW5nIGZpbGVzIHRvIHNraXAgZHVwbGljYXRlIHVwbG9hZHMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyByZXRyeWluZyBwdWJsaXNoaW5nIHRoYXQgZmFpbGVkIGFmdGVyIG9ubHkgc29tZSwgYnV0IG5vdCBhbGwgZmlsZXMgaGF2ZVxuICAgKiBiZWVuIHVwbG9hZGVkLCBhbmQgaGFuZGxlcyBlcnJvciBkdWUgdG8gcGFyYWxsZWwgdXBsb2FkcyBvZiB0aGUgc2FtZSBmaWxlLlxuICAgKlxuICAgKiBCZWZvcmUgdXBsb2FkaW5nLCB0aGUgaW5kZXggaXMgY2hlY2tlZC4gSWYgdGhlIGV4YWN0IHNhbWUgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgsXG4gICAqIHRoZSBmaWxlIHdpbGwgbm90IGJlIHVwbG9hZGVkLiBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIHVwbG9hZCwgdGhlIGluZGV4IGlzIGNoZWNrZWRcbiAgICogYWdhaW4sIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgaWRlbnRpY2FsIGZpbGUgd2FzIHVwbG9hZGVkIHR3aWNlIGluIHBhcmFsbGVsLlxuICAgKlxuICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igd2lsbCB2YXJ5IGJhc2VkIG9uIHRoZSBpbmRleC4gV2hlbiB1cGxvYWRpbmcgdG8gUHlQSSwgdXBsb2FkaW5nIHRoZSBzYW1lXG4gICAqIGZpbGUgc3VjY2VlZHMgZXZlbiB3aXRob3V0IGAtLWNoZWNrLXVybGAsIHdoaWxlIG1vc3Qgb3RoZXIgaW5kZXhlcyBlcnJvci5cbiAgICpcbiAgICogVGhlIGluZGV4IG11c3QgcHJvdmlkZSBvbmUgb2YgdGhlIHN1cHBvcnRlZCBoYXNoZXMgKFNIQS0yNTYsIFNIQS0zODQsIG9yIFNIQS01MTIpLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjaGVjay11cmxcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb21waWxlIFB5dGhvbiBmaWxlcyB0byBieXRlY29kZSBhZnRlciBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGRvZXMgbm90IGNvbXBpbGUgUHl0aG9uIChgLnB5YCkgZmlsZXMgdG8gYnl0ZWNvZGUgKGBfX3B5Y2FjaGVfXy8qLnB5Y2ApO1xuICAgKiBpbnN0ZWFkLCBjb21waWxhdGlvbiBpcyBwZXJmb3JtZWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIGEgbW9kdWxlIGlzIGltcG9ydGVkLiBGb3IgdXNlLWNhc2VzXG4gICAqIGluIHdoaWNoIHN0YXJ0IHRpbWUgaXMgY3JpdGljYWwsIHN1Y2ggYXMgQ0xJIGFwcGxpY2F0aW9ucyBhbmQgRG9ja2VyIGNvbnRhaW5lcnMsIHRoaXMgb3B0aW9uXG4gICAqIGNhbiBiZSBlbmFibGVkIHRvIHRyYWRlIGxvbmdlciBpbnN0YWxsYXRpb24gdGltZXMgZm9yIGZhc3RlciBzdGFydCB0aW1lcy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB1diB3aWxsIHByb2Nlc3MgdGhlIGVudGlyZSBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSAoaW5jbHVkaW5nIHBhY2thZ2VzIHRoYXRcbiAgICogYXJlIG5vdCBiZWluZyBtb2RpZmllZCBieSB0aGUgY3VycmVudCBvcGVyYXRpb24pIGZvciBjb25zaXN0ZW5jeS4gTGlrZSBwaXAsIGl0IHdpbGwgYWxzb1xuICAgKiBpZ25vcmUgZXJyb3JzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb21waWxlLWJ5dGVjb2RlXG4gICAqL1xuICByZWFkb25seSBjb21waWxlQnl0ZWNvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlIGRpc3RyaWJ1dGlvbnMgdGhhdCB1diB3aWxsIGJ1aWxkIGNvbmN1cnJlbnRseSBhdCBhbnkgZ2l2ZW5cbiAgICogdGltZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVIGNvcmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBDUFUgY29yZXMuXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmN1cnJlbnQtYnVpbGRzXG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW50QnVpbGRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IGNvbmN1cnJlbnQgZG93bmxvYWRzIHRoYXQgdXYgd2lsbCBwZXJmb3JtIGF0IGFueSBnaXZlblxuICAgKiB0aW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25jdXJyZW50LWRvd25sb2Fkc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVudERvd25sb2Fkcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aHJlYWRzIHVzZWQgd2hlbiBpbnN0YWxsaW5nIGFuZCB1bnppcHBpbmcgcGFja2FnZXMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIENQVSBjb3Jlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVIGNvcmVzLlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25jdXJyZW50LWluc3RhbGxzXG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW50SW5zdGFsbHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQsXG4gICAqIHNwZWNpZmllZCBhcyBgS0VZPVZBTFVFYCBwYWlycy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uZmlnLXNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQgZm9yIHNwZWNpZmljIHBhY2thZ2VzLFxuICAgKiBzcGVjaWZpZWQgYXMgYEtFWT1WQUxVRWAgcGFpcnMuXG4gICAqXG4gICAqIEFjY2VwdHMgYSBtYXAgZnJvbSBwYWNrYWdlIG5hbWVzIHRvIHN0cmluZyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmZpZy1zZXR0aW5ncy1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5nc1BhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYW55IH0gfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHNldHMgb2YgY29uZmxpY3RpbmcgZ3JvdXBzIG9yIGV4dHJhcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uZmxpY3RzXG4gICAqL1xuICByZWFkb25seSBjb25mbGljdHM/OiBTY2hlbWFDb25mbGljdEl0ZW1bXVtdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIHJlcXVpcmVtZW50cywgZS5nLiwgYHJ1ZmY9PTAuNS4wYCwgb3IgYHJ1ZmYgQCBodHRwczovLy4uLmAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbnN0cmFpbnQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBjb25zdHJhaW50RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGBkZXBlbmRlbmN5LWdyb3Vwc2AgdG8gaW5zdGFsbCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBDYW4gYWxzbyBiZSB0aGUgbGl0ZXJhbCBgXCJhbGxcImAgdG8gZGVmYXVsdCBlbmFibGUgYWxsIGdyb3Vwcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZGVmYXVsdC1ncm91cHNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRHcm91cHM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc2V0dGluZ3MgZm9yIGBkZXBlbmRlbmN5LWdyb3Vwc2AuXG4gICAqXG4gICAqIEN1cnJlbnRseSB0aGlzIGNhbiBvbmx5IGJlIHVzZWQgdG8gYWRkIGByZXF1aXJlcy1weXRob25gIGNvbnN0cmFpbnRzXG4gICAqIHRvIGRlcGVuZGVuY3kgZ3JvdXBzICh0eXBpY2FsbHkgdG8gaW5mb3JtIHV2IHRoYXQgeW91ciBkZXYgdG9vbGluZ1xuICAgKiBoYXMgYSBoaWdoZXIgcHl0aG9uIHJlcXVpcmVtZW50IHRoYW4geW91ciBhY3R1YWwgcHJvamVjdCkuXG4gICAqXG4gICAqIFRoaXMgY2Fubm90IGJlIHVzZWQgdG8gZGVmaW5lIGRlcGVuZGVuY3kgZ3JvdXBzLCB1c2UgdGhlIHRvcC1sZXZlbFxuICAgKiBgW2RlcGVuZGVuY3ktZ3JvdXBzXWAgdGFibGUgZm9yIHRoYXQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2RlcGVuZGVuY3ktZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5R3JvdXBzPzogeyBba2V5OiBzdHJpbmddOiBEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncyB9O1xuXG4gIC8qKlxuICAgKiBQcmUtZGVmaW5lZCBzdGF0aWMgbWV0YWRhdGEgZm9yIGRlcGVuZGVuY2llcyBvZiB0aGUgcHJvamVjdCAoZGlyZWN0IG9yIHRyYW5zaXRpdmUpLiBXaGVuXG4gICAqIHByb3ZpZGVkLCBlbmFibGVzIHRoZSByZXNvbHZlciB0byB1c2UgdGhlIHNwZWNpZmllZCBtZXRhZGF0YSBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIHRoZVxuICAgKiByZWdpc3RyeSBvciBidWlsZGluZyB0aGUgcmVsZXZhbnQgcGFja2FnZSBmcm9tIHNvdXJjZS5cbiAgICpcbiAgICogTWV0YWRhdGEgc2hvdWxkIGJlIHByb3ZpZGVkIGluIGFkaGVyZW5jZSB3aXRoIHRoZSBbTWV0YWRhdGEgMi4zXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9jb3JlLW1ldGFkYXRhLylcbiAgICogc3RhbmRhcmQsIHRob3VnaCBvbmx5IHRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZXNwZWN0ZWQ6XG4gICAqXG4gICAqIC0gYG5hbWVgOiBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZS5cbiAgICogLSAoT3B0aW9uYWwpIGB2ZXJzaW9uYDogVGhlIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuIElmIG9taXR0ZWQsIHRoZSBtZXRhZGF0YSB3aWxsIGJlIGFwcGxpZWRcbiAgICogdG8gYWxsIHZlcnNpb25zIG9mIHRoZSBwYWNrYWdlLlxuICAgKiAtIChPcHRpb25hbCkgYHJlcXVpcmVzLWRpc3RgOiBUaGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlIChlLmcuLCBgd2Vya3pldWc+PTAuMTRgKS5cbiAgICogLSAoT3B0aW9uYWwpIGByZXF1aXJlcy1weXRob25gOiBUaGUgUHl0aG9uIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhlIHBhY2thZ2UgKGUuZy4sIGA+PTMuMTBgKS5cbiAgICogLSAoT3B0aW9uYWwpIGBwcm92aWRlcy1leHRyYWA6IFRoZSBleHRyYXMgcHJvdmlkZWQgYnkgdGhlIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2RlcGVuZGVuY3ktbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lNZXRhZGF0YT86IFN0YXRpY01ldGFkYXRhW107XG5cbiAgLyoqXG4gICAqIFBFUCA1MDgtc3R5bGUgcmVxdWlyZW1lbnRzLCBlLmcuLCBgcnVmZj09MC41LjBgLCBvciBgcnVmZiBAIGh0dHBzOi8vLi4uYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZGV2LWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZGV2RGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCBtYXJrZXJzLCBlLmcuLCBgcHl0aG9uX3ZlcnNpb24gPj0gJzMuNidgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNlbnZpcm9ubWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlIG5hbWVzIHRvIGV4Y2x1ZGUsIGUuZy4sIGB3ZXJremV1Z2AsIGBudW1weWAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2V4Y2x1ZGUtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlRGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyB0byB0aG9zZSB0aGF0IHdlcmUgdXBsb2FkZWQgcHJpb3IgdG8gYSBnaXZlbiBwb2ludCBpbiB0aW1lLlxuICAgKlxuICAgKiBBY2NlcHRzIGEgc3VwZXJzZXQgb2YgW1JGQyAzMzM5XShodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzMzOS5odG1sKSAoZS5nLixcbiAgICogYDIwMDYtMTItMDJUMDI6MDc6NDNaYCkuIEEgZnVsbCB0aW1lc3RhbXAgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc29sdmVyIHdpbGxcbiAgICogYmVoYXZlIGNvbnNpc3RlbnRseSBhY3Jvc3MgdGltZXpvbmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleGNsdWRlLW5ld2VyXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyBmb3Igc3BlY2lmaWMgcGFja2FnZXMgdG8gdGhvc2UgdGhhdCB3ZXJlIHVwbG9hZGVkIHByaW9yIHRvIHRoZSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiBBY2NlcHRzIHBhY2thZ2UtZGF0ZSBwYWlycyBpbiBhIGRpY3Rpb25hcnkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleGNsdWRlLW5ld2VyLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVOZXdlclBhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcyBmb3IgcGFja2FnZXMuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGV4dGVuZGluZyB0aGUgUEVQIDUxNyBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMgd2l0aFxuICAgKiBhZGRpdGlvbmFsIHBhY2thZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFja2FnZXMgdGhhdCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIHBhY2thZ2VzIGxpa2VcbiAgICogYHBpcGAsIGFuZCBkbyBub3QgZGVjbGFyZSB0aGVtIGFzIGJ1aWxkIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkRGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gYnVpbGRpbmcgY2VydGFpbiBwYWNrYWdlcy5cbiAgICpcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgdGhlXG4gICAqIHNwZWNpZmllZCBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZXh0cmEtYnVpbGQtdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkVmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqXG4gICAqIEV4dHJhIFVSTHMgb2YgcGFja2FnZSBpbmRleGVzIHRvIHVzZSwgaW4gYWRkaXRpb24gdG8gYC0taW5kZXgtdXJsYC5cbiAgICpcbiAgICogQWNjZXB0cyBlaXRoZXIgYSByZXBvc2l0b3J5IGNvbXBsaWFudCB3aXRoIFtQRVAgNTAzXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUwMy8pXG4gICAqICh0aGUgc2ltcGxlIHJlcG9zaXRvcnkgQVBJKSwgb3IgYSBsb2NhbCBkaXJlY3RvcnkgbGFpZCBvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LlxuICAgKlxuICAgKiBBbGwgaW5kZXhlcyBwcm92aWRlZCB2aWEgdGhpcyBmbGFnIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgaW5kZXggc3BlY2lmaWVkIGJ5XG4gICAqIFtgaW5kZXhfdXJsYF0oI2luZGV4LXVybCkgb3IgW2BpbmRleGBdKCNpbmRleCkgd2l0aCBgZGVmYXVsdCA9IHRydWVgLiBXaGVuIG11bHRpcGxlIGluZGV4ZXNcbiAgICogYXJlIHByb3ZpZGVkLCBlYXJsaWVyIHZhbHVlcyB0YWtlIHByaW9yaXR5LlxuICAgKlxuICAgKiBUbyBjb250cm9sIHV2J3MgcmVzb2x1dGlvbiBzdHJhdGVneSB3aGVuIG11bHRpcGxlIGluZGV4ZXMgYXJlIHByZXNlbnQsIHNlZVxuICAgKiBbYGluZGV4X3N0cmF0ZWd5YF0oI2luZGV4LXN0cmF0ZWd5KS5cbiAgICpcbiAgICogKERlcHJlY2F0ZWQ6IHVzZSBgaW5kZXhgIGluc3RlYWQuKVxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleHRyYS1pbmRleC11cmxcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSW5kZXhVcmw/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9jYXRpb25zIHRvIHNlYXJjaCBmb3IgY2FuZGlkYXRlIGRpc3RyaWJ1dGlvbnMsIGluIGFkZGl0aW9uIHRvIHRob3NlIGZvdW5kIGluIHRoZSByZWdpc3RyeVxuICAgKiBpbmRleGVzLlxuICAgKlxuICAgKiBJZiBhIHBhdGgsIHRoZSB0YXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHBhY2thZ2VzIGFzIHdoZWVsIGZpbGVzIChgLndobGApIG9yXG4gICAqIHNvdXJjZSBkaXN0cmlidXRpb25zIChlLmcuLCBgLnRhci5nemAgb3IgYC56aXBgKSBhdCB0aGUgdG9wIGxldmVsLlxuICAgKlxuICAgKiBJZiBhIFVSTCwgdGhlIHBhZ2UgbXVzdCBjb250YWluIGEgZmxhdCBsaXN0IG9mIGxpbmtzIHRvIHBhY2thZ2UgZmlsZXMgYWRoZXJpbmcgdG8gdGhlXG4gICAqIGZvcm1hdHMgZGVzY3JpYmVkIGFib3ZlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNmaW5kLWxpbmtzXG4gICAqL1xuICByZWFkb25seSBmaW5kTGlua3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UgYWNyb3NzIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBhbmQgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIG9wdGltaXplIGZvciBzZWxlY3RpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZSBmb3IgZWFjaFxuICAgKiBzdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb24gKGByZXF1aXJlcy1weXRob25gKSwgd2hpbGUgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkXG4gICAqIHZlcnNpb25zIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIFVuZGVyIGBmZXdlc3RgLCB1diB3aWxsIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgdmVyc2lvbnMgZm9yIGVhY2ggcGFja2FnZSxcbiAgICogcHJlZmVycmluZyBvbGRlciB2ZXJzaW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggYSB3aWRlciByYW5nZSBvZiBzdXBwb3J0ZWQgUHl0aG9uXG4gICAqIHZlcnNpb25zIG9yIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZm9yay1zdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgZm9ya1N0cmF0ZWd5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXhlcyB0byB1c2Ugd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIHJlcG9zaXRvcnkgY29tcGxpYW50IHdpdGggW1BFUCA1MDNdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTAzLylcbiAgICogKHRoZSBzaW1wbGUgcmVwb3NpdG9yeSBBUEkpLCBvciBhIGxvY2FsIGRpcmVjdG9yeSBsYWlkIG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuXG4gICAqXG4gICAqIEluZGV4ZXMgYXJlIGNvbnNpZGVyZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkncmUgZGVmaW5lZCwgc3VjaCB0aGF0IHRoZSBmaXJzdC1kZWZpbmVkXG4gICAqIGluZGV4IGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS4gRnVydGhlciwgdGhlIGluZGV4ZXMgcHJvdmlkZWQgYnkgdGhpcyBzZXR0aW5nIGFyZSBnaXZlblxuICAgKiBoaWdoZXIgcHJpb3JpdHkgdGhhbiBhbnkgaW5kZXhlcyBzcGVjaWZpZWQgdmlhIFtgaW5kZXhfdXJsYF0oI2luZGV4LXVybCkgb3JcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKS4gdXYgd2lsbCBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBpbmRleCB0aGF0IGNvbnRhaW5zXG4gICAqIGEgZ2l2ZW4gcGFja2FnZSwgdW5sZXNzIGFuIGFsdGVybmF0aXZlIFtpbmRleCBzdHJhdGVneV0oI2luZGV4LXN0cmF0ZWd5KSBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIElmIGFuIGluZGV4IGlzIG1hcmtlZCBhcyBgZXhwbGljaXQgPSB0cnVlYCwgaXQgd2lsbCBiZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciB0aGVcbiAgICogZGVwZW5kZW5jaWVzIHRoYXQgc2VsZWN0IGl0IGV4cGxpY2l0bHkgdmlhIGBbdG9vbC51di5zb3VyY2VzXWAsIGFzIGluOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5dG9yY2hcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2N1MTIxXCJcbiAgICogZXhwbGljaXQgPSB0cnVlXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIElmIGFuIGluZGV4IGlzIG1hcmtlZCBhcyBgZGVmYXVsdCA9IHRydWVgLCBpdCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIHByaW9yaXRpemVkIGxpc3QsIHN1Y2ggdGhhdCBpdCBpc1xuICAgKiBnaXZlbiB0aGUgbG93ZXN0IHByaW9yaXR5IHdoZW4gcmVzb2x2aW5nIHBhY2thZ2VzLiBBZGRpdGlvbmFsbHksIG1hcmtpbmcgYW4gaW5kZXggYXMgZGVmYXVsdCB3aWxsIGRpc2FibGUgdGhlXG4gICAqIFB5UEkgZGVmYXVsdCBpbmRleC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jaW5kZXhcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4PzogSW5kZXhbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHJlc29sdmluZyBhZ2FpbnN0IG11bHRpcGxlIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgaW5kZXggb24gd2hpY2ggYSBnaXZlbiBwYWNrYWdlIGlzIGF2YWlsYWJsZSwgYW5kXG4gICAqIGxpbWl0IHJlc29sdXRpb25zIHRvIHRob3NlIHByZXNlbnQgb24gdGhhdCBmaXJzdCBpbmRleCAoYGZpcnN0LWluZGV4YCkuIFRoaXMgcHJldmVudHNcbiAgICogXCJkZXBlbmRlbmN5IGNvbmZ1c2lvblwiIGF0dGFja3MsIHdoZXJlYnkgYW4gYXR0YWNrZXIgY2FuIHVwbG9hZCBhIG1hbGljaW91cyBwYWNrYWdlIHVuZGVyIHRoZVxuICAgKiBzYW1lIG5hbWUgdG8gYW4gYWx0ZXJuYXRlIGluZGV4LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNpbmRleC1zdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhTdHJhdGVneT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgUHl0aG9uIHBhY2thZ2UgaW5kZXggKGJ5IGRlZmF1bHQ6IDxodHRwczovL3B5cGkub3JnL3NpbXBsZT4pLlxuICAgKlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIHJlcG9zaXRvcnkgY29tcGxpYW50IHdpdGggW1BFUCA1MDNdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTAzLylcbiAgICogKHRoZSBzaW1wbGUgcmVwb3NpdG9yeSBBUEkpLCBvciBhIGxvY2FsIGRpcmVjdG9yeSBsYWlkIG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuXG4gICAqXG4gICAqIFRoZSBpbmRleCBwcm92aWRlZCBieSB0aGlzIHNldHRpbmcgaXMgZ2l2ZW4gbG93ZXIgcHJpb3JpdHkgdGhhbiBhbnkgaW5kZXhlcyBzcGVjaWZpZWQgdmlhXG4gICAqIFtgZXh0cmFfaW5kZXhfdXJsYF0oI2V4dHJhLWluZGV4LXVybCkgb3IgW2BpbmRleGBdKCNpbmRleCkuXG4gICAqXG4gICAqIChEZXByZWNhdGVkOiB1c2UgYGluZGV4YCBpbnN0ZWFkLilcbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jaW5kZXgtdXJsXG4gICAqL1xuICByZWFkb25seSBpbmRleFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogQXR0ZW1wdCB0byB1c2UgYGtleXJpbmdgIGZvciBhdXRoZW50aWNhdGlvbiBmb3IgaW5kZXggVVJMcy5cbiAgICpcbiAgICogQXQgcHJlc2VudCwgb25seSBgLS1rZXlyaW5nLXByb3ZpZGVyIHN1YnByb2Nlc3NgIGlzIHN1cHBvcnRlZCwgd2hpY2ggY29uZmlndXJlcyB1diB0b1xuICAgKiB1c2UgdGhlIGBrZXlyaW5nYCBDTEkgdG8gaGFuZGxlIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNrZXlyaW5nLXByb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBrZXlyaW5nUHJvdmlkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBwYWNrYWdlcyBmcm9tIHRoZSBnbG9iYWwgY2FjaGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBjbG9uZWAgKGFsc28ga25vd24gYXMgQ29weS1vbi1Xcml0ZSkgb24gbWFjT1MsIGFuZCBgaGFyZGxpbmtgIG9uIExpbnV4IGFuZFxuICAgKiBXaW5kb3dzLlxuICAgKlxuICAgKiBXQVJOSU5HOiBUaGUgdXNlIG9mIHN5bWxpbmsgbGluayBtb2RlIGlzIGRpc2NvdXJhZ2VkLCBhcyB0aGV5IGNyZWF0ZSB0aWdodCBjb3VwbGluZyBiZXR3ZWVuXG4gICAqIHRoZSBjYWNoZSBhbmQgdGhlIHRhcmdldCBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGNsZWFyaW5nIHRoZSBjYWNoZSAoYHV2IGNhY2hlIGNsZWFuYClcbiAgICogd2lsbCBicmVhayBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IHdheSBvZiByZW1vdmluZyB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmlsZXMuIFVzZVxuICAgKiBzeW1saW5rcyB3aXRoIGNhdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUywgYW5kIGBoYXJkbGlua2Agb24gTGludXggYW5kXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2xpbmstbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbGlua01vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb2plY3QgaXMgbWFuYWdlZCBieSB1di4gSWYgYGZhbHNlYCwgdXYgd2lsbCBpZ25vcmUgdGhlIHByb2plY3Qgd2hlblxuICAgKiBgdXYgcnVuYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNtYW5hZ2VkXG4gICAqL1xuICByZWFkb25seSBtYW5hZ2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBsb2FkIFRMUyBjZXJ0aWZpY2F0ZXMgZnJvbSB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgY2VydGlmaWNhdGUgc3RvcmUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGxvYWRzIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBidW5kbGVkIGB3ZWJwa2ktcm9vdHNgIGNyYXRlLiBUaGVcbiAgICogYHdlYnBraS1yb290c2AgYXJlIGEgcmVsaWFibGUgc2V0IG9mIHRydXN0IHJvb3RzIGZyb20gTW96aWxsYSwgYW5kIGluY2x1ZGluZyB0aGVtIGluIHV2XG4gICAqIGltcHJvdmVzIHBvcnRhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSAoZXNwZWNpYWxseSBvbiBtYWNPUykuXG4gICAqXG4gICAqIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0byB1c2UgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIGNlcnRpZmljYXRlIHN0b3JlLFxuICAgKiBlc3BlY2lhbGx5IGlmIHlvdSdyZSByZWx5aW5nIG9uIGEgY29ycG9yYXRlIHRydXN0IHJvb3QgKGUuZy4sIGZvciBhIG1hbmRhdG9yeSBwcm94eSkgdGhhdCdzXG4gICAqIGluY2x1ZGVkIGluIHlvdXIgc3lzdGVtJ3MgY2VydGlmaWNhdGUgc3RvcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25hdGl2ZS10bHNcbiAgICovXG4gIHJlYWRvbmx5IG5hdGl2ZVRscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvbid0IGluc3RhbGwgcHJlLWJ1aWx0IHdoZWVscy5cbiAgICpcbiAgICogVGhlIGdpdmVuIHBhY2thZ2VzIHdpbGwgYmUgYnVpbHQgYW5kIGluc3RhbGxlZCBmcm9tIHNvdXJjZS4gVGhlIHJlc29sdmVyIHdpbGwgc3RpbGwgdXNlXG4gICAqIHByZS1idWlsdCB3aGVlbHMgdG8gZXh0cmFjdCBwYWNrYWdlIG1ldGFkYXRhLCBpZiBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJpbmFyeVxuICAgKi9cbiAgcmVhZG9ubHkgbm9CaW5hcnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBpbnN0YWxsIHByZS1idWlsdCB3aGVlbHMgZm9yIGEgc3BlY2lmaWMgcGFja2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYmluYXJ5LXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IG5vQmluYXJ5UGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEb24ndCBidWlsZCBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCByZXNvbHZpbmcgd2lsbCBub3QgcnVuIGFyYml0cmFyeSBQeXRob24gY29kZS4gVGhlIGNhY2hlZCB3aGVlbHMgb2ZcbiAgICogYWxyZWFkeS1idWlsdCBzb3VyY2UgZGlzdHJpYnV0aW9ucyB3aWxsIGJlIHJldXNlZCwgYnV0IG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGJ1aWxkaW5nXG4gICAqIGRpc3RyaWJ1dGlvbnMgd2lsbCBleGl0IHdpdGggYW4gZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJ1aWxkXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogQXNzdW1lcyB0aGF0IGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1idWlsZC1pc29sYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG5vQnVpbGRJc29sYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGlzb2xhdGlvbiB3aGVuIGJ1aWxkaW5nIHNvdXJjZSBkaXN0cmlidXRpb25zIGZvciBhIHNwZWNpZmljIHBhY2thZ2UuXG4gICAqXG4gICAqIEFzc3VtZXMgdGhhdCB0aGUgcGFja2FnZXMnIGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1idWlsZC1pc29sYXRpb24tcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9CdWlsZElzb2xhdGlvblBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRG9uJ3QgYnVpbGQgc291cmNlIGRpc3RyaWJ1dGlvbnMgZm9yIGEgc3BlY2lmaWMgcGFja2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYnVpbGQtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9CdWlsZFBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXZvaWQgcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gdGhlIGNhY2hlLCBpbnN0ZWFkIHVzaW5nIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgdGhlXG4gICAqIGR1cmF0aW9uIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWNhY2hlXG4gICAqL1xuICByZWFkb25seSBub0NhY2hlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIGFsbCByZWdpc3RyeSBpbmRleGVzIChlLmcuLCBQeVBJKSwgaW5zdGVhZCByZWx5aW5nIG9uIGRpcmVjdCBVUkwgZGVwZW5kZW5jaWVzIGFuZFxuICAgKiB0aG9zZSBwcm92aWRlZCB2aWEgYC0tZmluZC1saW5rc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWluZGV4XG4gICAqL1xuICByZWFkb25seSBub0luZGV4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIHRoZSBgdG9vbC51di5zb3VyY2VzYCB0YWJsZSB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMuIFVzZWQgdG8gbG9jayBhZ2FpbnN0IHRoZVxuICAgKiBzdGFuZGFyZHMtY29tcGxpYW50LCBwdWJsaXNoYWJsZSBwYWNrYWdlIG1ldGFkYXRhLCBhcyBvcHBvc2VkIHRvIHVzaW5nIGFueSBsb2NhbCBvciBHaXRcbiAgICogc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9Tb3VyY2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBuZXR3b3JrIGFjY2VzcywgcmVseWluZyBvbmx5IG9uIGxvY2FsbHkgY2FjaGVkIGRhdGEgYW5kIGxvY2FsbHkgYXZhaWxhYmxlIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNvZmZsaW5lXG4gICAqL1xuICByZWFkb25seSBvZmZsaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUEVQIDUwOC1zdHlsZSByZXF1aXJlbWVudHMsIGUuZy4sIGBydWZmPT0wLjUuMGAsIG9yIGBydWZmIEAgaHR0cHM6Ly8uLi5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNvdmVycmlkZS1kZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlRGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb2plY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBQeXRob24gcGFja2FnZSwgb3IgYSBub24tcGFja2FnZSAoXCJ2aXJ0dWFsXCIpXG4gICAqIHByb2plY3QuXG4gICAqXG4gICAqIFBhY2thZ2VzIGFyZSBidWlsdCBhbmQgaW5zdGFsbGVkIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gZWRpdGFibGUgbW9kZSBhbmQgdGh1c1xuICAgKiByZXF1aXJlIGEgYnVpbGQgYmFja2VuZCwgd2hpbGUgdmlydHVhbCBwcm9qZWN0cyBhcmUgX25vdF8gYnVpbHQgb3IgaW5zdGFsbGVkOyBpbnN0ZWFkLCBvbmx5XG4gICAqIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIENyZWF0aW5nIGEgcGFja2FnZSByZXF1aXJlcyB0aGF0IGEgYGJ1aWxkLXN5c3RlbWAgaXMgcHJlc2VudCBpbiB0aGUgYHB5cHJvamVjdC50b21sYCwgYW5kXG4gICAqIHRoYXQgdGhlIHByb2plY3QgYWRoZXJlcyB0byBhIHN0cnVjdHVyZSB0aGF0IGFkaGVyZXMgdG8gdGhlIGJ1aWxkIGJhY2tlbmQncyBleHBlY3RhdGlvbnNcbiAgICogKGUuZy4sIGEgYHNyY2AgbGF5b3V0KS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3BpcFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwPzogUGlwT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIGNvbnNpZGVyaW5nIHByZS1yZWxlYXNlIHZlcnNpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIGFjY2VwdCBwcmUtcmVsZWFzZXMgZm9yIHBhY2thZ2VzIHRoYXQgX29ubHlfIHB1Ymxpc2ggcHJlLXJlbGVhc2VzLFxuICAgKiBhbG9uZyB3aXRoIGZpcnN0LXBhcnR5IHJlcXVpcmVtZW50cyB0aGF0IGNvbnRhaW4gYW4gZXhwbGljaXQgcHJlLXJlbGVhc2UgbWFya2VyIGluIHRoZVxuICAgKiBkZWNsYXJlZCBzcGVjaWZpZXJzIChgaWYtbmVjZXNzYXJ5LW9yLWV4cGxpY2l0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3ByZXJlbGVhc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXJlbGVhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGV4cGVyaW1lbnRhbCwgcHJldmlldyBmZWF0dXJlcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHJldmlld1xuICAgKi9cbiAgcmVhZG9ubHkgcHJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgZm9yIHB1Ymxpc2hpbmcgcGFja2FnZXMgdG8gdGhlIFB5dGhvbiBwYWNrYWdlIGluZGV4IChieSBkZWZhdWx0OlxuICAgKiA8aHR0cHM6Ly91cGxvYWQucHlwaS5vcmcvbGVnYWN5Lz4pLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNwdWJsaXNoLXVybFxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFVybD86IHN0cmluZztcblxuICAvKipcbiAgICogTWlycm9yIFVSTCB0byB1c2UgZm9yIGRvd25sb2FkaW5nIG1hbmFnZWQgUHlQeSBpbnN0YWxsYXRpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtYW5hZ2VkIFB5UHkgaW5zdGFsbGF0aW9ucyBhcmUgZG93bmxvYWRlZCBmcm9tIFtkb3dubG9hZHMucHl0aG9uLm9yZ10oaHR0cHM6Ly9kb3dubG9hZHMucHl0aG9uLm9yZy8pLlxuICAgKiBUaGlzIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gYSBtaXJyb3IgVVJMIHRvIHVzZSBhIGRpZmZlcmVudCBzb3VyY2UgZm9yIFB5UHkgaW5zdGFsbGF0aW9ucy5cbiAgICogVGhlIHByb3ZpZGVkIFVSTCB3aWxsIHJlcGxhY2UgYGh0dHBzOi8vZG93bmxvYWRzLnB5dGhvbi5vcmcvcHlweWAgaW4sIGUuZy4sIGBodHRwczovL2Rvd25sb2Fkcy5weXRob24ub3JnL3B5cHkvcHlweTMuOC12Ny4zLjctb3N4NjQudGFyLmJ6MmAuXG4gICAqXG4gICAqIERpc3RyaWJ1dGlvbnMgY2FuIGJlIHJlYWQgZnJvbSBhXG4gICAqIGxvY2FsIGRpcmVjdG9yeSBieSB1c2luZyB0aGUgYGZpbGU6Ly9gIFVSTCBzY2hlbWUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5cHktaW5zdGFsbC1taXJyb3JcbiAgICovXG4gIHJlYWRvbmx5IHB5cHlJbnN0YWxsTWlycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IFB5dGhvbiBkb3dubG9hZHMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5dGhvbi1kb3dubG9hZHNcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbkRvd25sb2Fkcz86IHN0cmluZztcblxuICAvKipcbiAgICogVVJMIHBvaW50aW5nIHRvIEpTT04gb2YgY3VzdG9tIFB5dGhvbiBpbnN0YWxsYXRpb25zLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgY3VycmVudGx5LCBvbmx5IGxvY2FsIHBhdGhzIGFyZSBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5dGhvbi1kb3dubG9hZHMtanNvbi11cmxcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbkRvd25sb2Fkc0pzb25Vcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pcnJvciBVUkwgZm9yIGRvd25sb2FkaW5nIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMgYXJlIGRvd25sb2FkZWQgZnJvbSBbYHB5dGhvbi1idWlsZC1zdGFuZGFsb25lYF0oaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC9weXRob24tYnVpbGQtc3RhbmRhbG9uZSkuXG4gICAqIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIG1pcnJvciBVUkwgdG8gdXNlIGEgZGlmZmVyZW50IHNvdXJjZSBmb3IgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBVUkwgd2lsbCByZXBsYWNlIGBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3B5dGhvbi1idWlsZC1zdGFuZGFsb25lL3JlbGVhc2VzL2Rvd25sb2FkYCBpbiwgZS5nLiwgYGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvcHl0aG9uLWJ1aWxkLXN0YW5kYWxvbmUvcmVsZWFzZXMvZG93bmxvYWQvMjAyNDA3MTMvY3B5dGhvbi0zLjEyLjQlMkIyMDI0MDcxMy1hYXJjaDY0LWFwcGxlLWRhcndpbi1pbnN0YWxsX29ubHkudGFyLmd6YC5cbiAgICpcbiAgICogRGlzdHJpYnV0aW9ucyBjYW4gYmUgcmVhZCBmcm9tIGEgbG9jYWwgZGlyZWN0b3J5IGJ5IHVzaW5nIHRoZSBgZmlsZTovL2AgVVJMIHNjaGVtZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHl0aG9uLWluc3RhbGwtbWlycm9yXG4gICAqL1xuICByZWFkb25seSBweXRob25JbnN0YWxsTWlycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZWZlciB1c2luZyBQeXRob24gaW5zdGFsbGF0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSwgb3JcbiAgICogdGhvc2UgdGhhdCBhcmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkIGJ5IHV2LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNweXRob24tcHJlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uUHJlZmVyZW5jZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVpbnN0YWxsIGFsbCBwYWNrYWdlcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkncmUgYWxyZWFkeSBpbnN0YWxsZWQuIEltcGxpZXMgYHJlZnJlc2hgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZWluc3RhbGxcbiAgICovXG4gIHJlYWRvbmx5IHJlaW5zdGFsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlaW5zdGFsbCBhIHNwZWNpZmljIHBhY2thZ2UsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCdzIGFscmVhZHkgaW5zdGFsbGVkLiBJbXBsaWVzXG4gICAqIGByZWZyZXNoLXBhY2thZ2VgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZWluc3RhbGwtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVpbnN0YWxsUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgbWFya2VycywgZS5nLiwgYHN5c19wbGF0Zm9ybSA9PSAnZGFyd2luJy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcmVxdWlyZWQtZW52aXJvbm1lbnRzXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZEVudmlyb25tZW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFbmZvcmNlIGEgcmVxdWlyZW1lbnQgb24gdGhlIHZlcnNpb24gb2YgdXYuXG4gICAqXG4gICAqIElmIHRoZSB2ZXJzaW9uIG9mIHV2IGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50IGF0IHJ1bnRpbWUsIHV2IHdpbGwgZXhpdFxuICAgKiB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBBY2NlcHRzIGEgW1BFUCA0NDBdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNDQwLykgc3BlY2lmaWVyLCBsaWtlIGA9PTAuNS4wYCBvciBgPj0wLjUuMGAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3JlcXVpcmVkLXZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcGF0aWJsZSB2ZXJzaW9ucyBmb3IgYSBnaXZlblxuICAgKiBwYWNrYWdlIHJlcXVpcmVtZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIHVzZSB0aGUgbGF0ZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UgKGBoaWdoZXN0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3Jlc29sdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2VzIHRvIHVzZSB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIGB0b29sLnV2LnNvdXJjZXNgIGVucmljaGVzIHRoZSBkZXBlbmRlbmN5IG1ldGFkYXRhIHdpdGggYWRkaXRpb25hbCBzb3VyY2VzLCBpbmNvcnBvcmF0ZWRcbiAgICogZHVyaW5nIGRldmVsb3BtZW50LiBBIGRlcGVuZGVuY3kgc291cmNlIGNhbiBiZSBhIEdpdCByZXBvc2l0b3J5LCBhIFVSTCwgYSBsb2NhbCBwYXRoLCBvciBhblxuICAgKiBhbHRlcm5hdGl2ZSByZWdpc3RyeS5cbiAgICpcbiAgICogU2VlIFtEZXBlbmRlbmNpZXNdKGh0dHBzOi8vZG9jcy5hc3RyYWwuc2gvdXYvY29uY2VwdHMvcHJvamVjdHMvZGVwZW5kZW5jaWVzLykgZm9yIG1vcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3NvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0cnVzdGVkIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGNoZWNrcyBmb3IgdHJ1c3RlZCBwdWJsaXNoaW5nIHdoZW4gcnVubmluZyBpbiBhIHN1cHBvcnRlZCBlbnZpcm9ubWVudCwgYnV0XG4gICAqIGlnbm9yZXMgaXQgaWYgaXQgaXNuJ3QgY29uZmlndXJlZC5cbiAgICpcbiAgICogdXYncyBzdXBwb3J0ZWQgZW52aXJvbm1lbnRzIGZvciB0cnVzdGVkIHB1Ymxpc2hpbmcgaW5jbHVkZSBHaXRIdWIgQWN0aW9ucyBhbmQgR2l0TGFiIENJL0NELlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiN0cnVzdGVkLXB1Ymxpc2hpbmdcbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRQdWJsaXNoaW5nPzogVHJ1c3RlZFB1Ymxpc2hpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93IHBhY2thZ2UgdXBncmFkZXMsIGlnbm9yaW5nIHBpbm5lZCB2ZXJzaW9ucyBpbiBhbnkgZXhpc3Rpbmcgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3VwZ3JhZGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB1cGdyYWRlcyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLCBpZ25vcmluZyBwaW5uZWQgdmVyc2lvbnMgaW4gYW55IGV4aXN0aW5nIG91dHB1dFxuICAgKiBmaWxlLlxuICAgKlxuICAgKiBBY2NlcHRzIGJvdGggc3RhbmRhbG9uZSBwYWNrYWdlIG5hbWVzIChgcnVmZmApIGFuZCB2ZXJzaW9uIHNwZWNpZmllcnMgKGBydWZmPDAuNS4wYCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3VwZ3JhZGUtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZVBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBkZWZpbml0aW9uIGZvciB0aGUgcHJvamVjdCwgaWYgYW55LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiN3b3Jrc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZT86IFRvb2xVdldvcmtzcGFjZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVXZDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVXZDb25maWd1cmF0aW9uKG9iajogVXZDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWRkLWJvdW5kcyc6IG9iai5hZGRCb3VuZHMsXG4gICAgJ2FsbG93LWluc2VjdXJlLWhvc3QnOiBvYmouYWxsb3dJbnNlY3VyZUhvc3Q/Lm1hcCh5ID0+IHkpLFxuICAgICdidWlsZC1iYWNrZW5kJzogdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iai5idWlsZEJhY2tlbmQpLFxuICAgICdidWlsZC1jb25zdHJhaW50LWRlcGVuZGVuY2llcyc6IG9iai5idWlsZENvbnN0cmFpbnREZXBlbmRlbmNpZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdjYWNoZS1kaXInOiBvYmouY2FjaGVEaXIsXG4gICAgJ2NhY2hlLWtleXMnOiBvYmouY2FjaGVLZXlzPy5tYXAoeSA9PiB5KSxcbiAgICAnY2hlY2stdXJsJzogb2JqLmNoZWNrVXJsLFxuICAgICdjb21waWxlLWJ5dGVjb2RlJzogb2JqLmNvbXBpbGVCeXRlY29kZSxcbiAgICAnY29uY3VycmVudC1idWlsZHMnOiBvYmouY29uY3VycmVudEJ1aWxkcyxcbiAgICAnY29uY3VycmVudC1kb3dubG9hZHMnOiBvYmouY29uY3VycmVudERvd25sb2FkcyxcbiAgICAnY29uY3VycmVudC1pbnN0YWxscyc6IG9iai5jb25jdXJyZW50SW5zdGFsbHMsXG4gICAgJ2NvbmZpZy1zZXR0aW5ncyc6ICgob2JqLmNvbmZpZ1NldHRpbmdzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouY29uZmlnU2V0dGluZ3MpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdjb25maWctc2V0dGluZ3MtcGFja2FnZSc6ICgob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2NvbmZsaWN0cyc6IG9iai5jb25mbGljdHM/Lm1hcCh5ID0+IHk/Lm1hcCh5ID0+IHRvSnNvbl9TY2hlbWFDb25mbGljdEl0ZW0oeSkpKSxcbiAgICAnY29uc3RyYWludC1kZXBlbmRlbmNpZXMnOiBvYmouY29uc3RyYWludERlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2RlZmF1bHQtZ3JvdXBzJzogb2JqLmRlZmF1bHRHcm91cHMsXG4gICAgJ2RlcGVuZGVuY3ktZ3JvdXBzJzogKChvYmouZGVwZW5kZW5jeUdyb3VwcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRlcGVuZGVuY3lHcm91cHMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiB0b0pzb25fRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MoaVsxXSkgfSksIHt9KSksXG4gICAgJ2RlcGVuZGVuY3ktbWV0YWRhdGEnOiBvYmouZGVwZW5kZW5jeU1ldGFkYXRhPy5tYXAoeSA9PiB0b0pzb25fU3RhdGljTWV0YWRhdGEoeSkpLFxuICAgICdkZXYtZGVwZW5kZW5jaWVzJzogb2JqLmRldkRlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2Vudmlyb25tZW50cyc6IG9iai5lbnZpcm9ubWVudHM/Lm1hcCh5ID0+IHkpLFxuICAgICdleGNsdWRlLWRlcGVuZGVuY2llcyc6IG9iai5leGNsdWRlRGVwZW5kZW5jaWVzPy5tYXAoeSA9PiB5KSxcbiAgICAnZXhjbHVkZS1uZXdlcic6IG9iai5leGNsdWRlTmV3ZXIsXG4gICAgJ2V4Y2x1ZGUtbmV3ZXItcGFja2FnZSc6ICgob2JqLmV4Y2x1ZGVOZXdlclBhY2thZ2UpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leGNsdWRlTmV3ZXJQYWNrYWdlKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzJzogKChvYmouZXh0cmFCdWlsZERlcGVuZGVuY2llcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4dHJhQnVpbGREZXBlbmRlbmNpZXMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdPy5tYXAoeSA9PiB5KSB9KSwge30pKSxcbiAgICAnZXh0cmEtYnVpbGQtdmFyaWFibGVzJzogKChvYmouZXh0cmFCdWlsZFZhcmlhYmxlcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4dHJhQnVpbGRWYXJpYWJsZXMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiAoKGlbMV0pID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKGlbMV0pLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpIH0pLCB7fSkpLFxuICAgICdleHRyYS1pbmRleC11cmwnOiBvYmouZXh0cmFJbmRleFVybD8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbmQtbGlua3MnOiBvYmouZmluZExpbmtzPy5tYXAoeSA9PiB5KSxcbiAgICAnZm9yay1zdHJhdGVneSc6IG9iai5mb3JrU3RyYXRlZ3ksXG4gICAgJ2luZGV4Jzogb2JqLmluZGV4Py5tYXAoeSA9PiB0b0pzb25fSW5kZXgoeSkpLFxuICAgICdpbmRleC1zdHJhdGVneSc6IG9iai5pbmRleFN0cmF0ZWd5LFxuICAgICdpbmRleC11cmwnOiBvYmouaW5kZXhVcmwsXG4gICAgJ2tleXJpbmctcHJvdmlkZXInOiBvYmoua2V5cmluZ1Byb3ZpZGVyLFxuICAgICdsaW5rLW1vZGUnOiBvYmoubGlua01vZGUsXG4gICAgJ21hbmFnZWQnOiBvYmoubWFuYWdlZCxcbiAgICAnbmF0aXZlLXRscyc6IG9iai5uYXRpdmVUbHMsXG4gICAgJ25vLWJpbmFyeSc6IG9iai5ub0JpbmFyeSxcbiAgICAnbm8tYmluYXJ5LXBhY2thZ2UnOiBvYmoubm9CaW5hcnlQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQnOiBvYmoubm9CdWlsZCxcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uJzogb2JqLm5vQnVpbGRJc29sYXRpb24sXG4gICAgJ25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlJzogb2JqLm5vQnVpbGRJc29sYXRpb25QYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQtcGFja2FnZSc6IG9iai5ub0J1aWxkUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ25vLWNhY2hlJzogb2JqLm5vQ2FjaGUsXG4gICAgJ25vLWluZGV4Jzogb2JqLm5vSW5kZXgsXG4gICAgJ25vLXNvdXJjZXMnOiBvYmoubm9Tb3VyY2VzLFxuICAgICdvZmZsaW5lJzogb2JqLm9mZmxpbmUsXG4gICAgJ292ZXJyaWRlLWRlcGVuZGVuY2llcyc6IG9iai5vdmVycmlkZURlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ3BhY2thZ2UnOiBvYmoucGFja2FnZSxcbiAgICAncGlwJzogdG9Kc29uX1BpcE9wdGlvbnMob2JqLnBpcCksXG4gICAgJ3ByZXJlbGVhc2UnOiBvYmoucHJlcmVsZWFzZSxcbiAgICAncHJldmlldyc6IG9iai5wcmV2aWV3LFxuICAgICdwdWJsaXNoLXVybCc6IG9iai5wdWJsaXNoVXJsLFxuICAgICdweXB5LWluc3RhbGwtbWlycm9yJzogb2JqLnB5cHlJbnN0YWxsTWlycm9yLFxuICAgICdweXRob24tZG93bmxvYWRzJzogb2JqLnB5dGhvbkRvd25sb2FkcyxcbiAgICAncHl0aG9uLWRvd25sb2Fkcy1qc29uLXVybCc6IG9iai5weXRob25Eb3dubG9hZHNKc29uVXJsLFxuICAgICdweXRob24taW5zdGFsbC1taXJyb3InOiBvYmoucHl0aG9uSW5zdGFsbE1pcnJvcixcbiAgICAncHl0aG9uLXByZWZlcmVuY2UnOiBvYmoucHl0aG9uUHJlZmVyZW5jZSxcbiAgICAncmVpbnN0YWxsJzogb2JqLnJlaW5zdGFsbCxcbiAgICAncmVpbnN0YWxsLXBhY2thZ2UnOiBvYmoucmVpbnN0YWxsUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVkLWVudmlyb25tZW50cyc6IG9iai5yZXF1aXJlZEVudmlyb25tZW50cz8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVkLXZlcnNpb24nOiBvYmoucmVxdWlyZWRWZXJzaW9uLFxuICAgICdyZXNvbHV0aW9uJzogb2JqLnJlc29sdXRpb24sXG4gICAgJ3NvdXJjZXMnOiAoKG9iai5zb3VyY2VzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouc291cmNlcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0/Lm1hcCh5ID0+IHkpIH0pLCB7fSkpLFxuICAgICd0cnVzdGVkLXB1Ymxpc2hpbmcnOiBvYmoudHJ1c3RlZFB1Ymxpc2hpbmcsXG4gICAgJ3VwZ3JhZGUnOiBvYmoudXBncmFkZSxcbiAgICAndXBncmFkZS1wYWNrYWdlJzogb2JqLnVwZ3JhZGVQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnd29ya3NwYWNlJzogdG9Kc29uX1Rvb2xVdldvcmtzcGFjZShvYmoud29ya3NwYWNlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIGZvciB0aGUgdXYgYnVpbGQgYmFja2VuZCAoYHV2X2J1aWxkYCkuXG4gKlxuICogTm90ZSB0aGF0IHRob3NlIHNldHRpbmdzIG9ubHkgYXBwbHkgd2hlbiB1c2luZyB0aGUgYHV2X2J1aWxkYCBiYWNrZW5kLCBvdGhlciBidWlsZCBiYWNrZW5kc1xuICogKHN1Y2ggYXMgaGF0Y2hsaW5nKSBoYXZlIHRoZWlyIG93biBjb25maWd1cmF0aW9uLlxuICpcbiAqIEFsbCBvcHRpb25zIHRoYXQgYWNjZXB0IGdsb2JzIHVzZSB0aGUgcG9ydGFibGUgZ2xvYiBwYXR0ZXJucyBmcm9tXG4gKiBbUEVQIDYzOV0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZ2xvYi1wYXR0ZXJucy8pLlxuICpcbiAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEJhY2tlbmRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBEYXRhIGluY2x1ZGVzIGZvciB3aGVlbHMuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgaXMgYSBkaXJlY3RvcnksIHdob3NlIGNvbnRlbnRzIGFyZSBjb3BpZWQgdG8gdGhlIG1hdGNoaW5nIGRpcmVjdG9yeSBpbiB0aGUgd2hlZWxcbiAgICogaW4gYDxuYW1lPi08dmVyc2lvbj4uZGF0YS8ocHVyZWxpYnxwbGF0bGlifGhlYWRlcnN8c2NyaXB0c3xkYXRhKWAuIFVwb24gaW5zdGFsbGF0aW9uLCB0aGlzXG4gICAqIGRhdGEgaXMgbW92ZWQgdG8gaXRzIHRhcmdldCBsb2NhdGlvbiwgYXMgZGVmaW5lZCBieVxuICAgKiA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4xMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI2luc3RhbGxhdGlvbi1wYXRocz4uIFVzdWFsbHksIHNtYWxsXG4gICAqIGRhdGEgZmlsZXMgYXJlIGluY2x1ZGVkIGJ5IHBsYWNpbmcgdGhlbSBpbiB0aGUgUHl0aG9uIG1vZHVsZSBpbnN0ZWFkIG9mIHVzaW5nIGRhdGEgaW5jbHVkZXMuXG4gICAqXG4gICAqIC0gYHNjcmlwdHNgOiBJbnN0YWxsZWQgdG8gdGhlIGRpcmVjdG9yeSBmb3IgZXhlY3V0YWJsZXMsIGA8dmVudj4vYmluYCBvbiBVbml4IG9yXG4gICAqIGA8dmVudj5cXFNjcmlwdHNgIG9uIFdpbmRvd3MuIFRoaXMgZGlyZWN0b3J5IGlzIGFkZGVkIHRvIGBQQVRIYCB3aGVuIHRoZSB2aXJ0dWFsXG4gICAqIGVudmlyb25tZW50ICBpcyBhY3RpdmF0ZWQgb3Igd2hlbiB1c2luZyBgdXYgcnVuYCwgc28gdGhpcyBkYXRhIHR5cGUgY2FuIGJlIHVzZWQgdG8gaW5zdGFsbFxuICAgKiBhZGRpdGlvbmFsIGJpbmFyaWVzLiBDb25zaWRlciB1c2luZyBgcHJvamVjdC5zY3JpcHRzYCBpbnN0ZWFkIGZvciBQeXRob24gZW50cnlwb2ludHMuXG4gICAqIC0gYGRhdGFgOiBJbnN0YWxsZWQgb3ZlciB0aGUgdmlydHVhbGVudiBlbnZpcm9ubWVudCByb290LlxuICAgKlxuICAgKiBXYXJuaW5nOiBUaGlzIG1heSBvdmVycmlkZSBleGlzdGluZyBmaWxlcyFcbiAgICpcbiAgICogLSBgaGVhZGVyc2A6IEluc3RhbGxlZCB0byB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuIENvbXBpbGVycyBidWlsZGluZyBQeXRob24gcGFja2FnZXNcbiAgICogd2l0aCB0aGlzIHBhY2thZ2UgYXMgYnVpbGQgcmVxdWlyZW1lbnQgdXNlIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSB0byBmaW5kIGFkZGl0aW9uYWwgaGVhZGVyXG4gICAqIGZpbGVzLlxuICAgKiAtIGBwdXJlbGliYCBhbmQgYHBsYXRsaWJgOiBJbnN0YWxsZWQgdG8gdGhlIGBzaXRlLXBhY2thZ2VzYCBkaXJlY3RvcnkuIEl0IGlzIG5vdCByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgdGhlc2UgdHdvIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3MjZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IFdoZWVsRGF0YUluY2x1ZGVzO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYGZhbHNlYCwgdGhlIGRlZmF1bHQgZXhjbHVkZXMgYXJlbid0IGFwcGxpZWQuXG4gICAqXG4gICAqIERlZmF1bHQgZXhjbHVkZXM6IGBfX3B5Y2FjaGVfX2AsIGAqLnB5Y2AsIGFuZCBgKi5weW9gLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI2RlZmF1bHQtZXhjbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeGNsdWRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgZGlyZWN0b3J5IGluc2lkZSBgbW9kdWxlLXJvb3RgLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBtb2R1bGUgbmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIHdpdGggZG90cyBhbmQgZGFzaGVzIHJlcGxhY2VkIGJ5IHVuZGVyc2NvcmVzLlxuICAgKlxuICAgKiBQYWNrYWdlIG5hbWVzIG5lZWQgdG8gYmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLCBhbmQgdGhlIGRpcmVjdG9yeSBuZWVkcyB0byBjb250YWluIGFcbiAgICogYF9faW5pdF9fLnB5YC4gQW4gZXhjZXB0aW9uIGFyZSBzdHVicyBwYWNrYWdlcywgd2hvc2UgbmFtZSBlbmRzIHdpdGggYC1zdHVic2AsIHdpdGggdGhlIHN0ZW1cbiAgICogYmVpbmcgdGhlIG1vZHVsZSBuYW1lLCBhbmQgd2hpY2ggY29udGFpbiBhIGBfX2luaXRfXy5weWlgIGZpbGUuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBhIHNpbmdsZSBtb2R1bGUsIHRoZSBwYXRoIGNhbiBiZSBkb3R0ZWQsIGUuZy4sIGBmb28uYmFyYCBvclxuICAgKiBgZm9vLXN0dWJzLmJhcmAuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBtdWx0aXBsZSBtb2R1bGVzLCB0aGUgcGF0aCBjYW4gYmUgYSBsaXN0LCBlLmcuLFxuICAgKiBgW1wiZm9vXCIsIFwiYmFyXCJdYC4gV2UgcmVjb21tZW5kIHVzaW5nIGEgc2luZ2xlIG1vZHVsZSBwZXIgcGFja2FnZSwgc3BsaXR0aW5nIG11bHRpcGxlXG4gICAqIHBhY2thZ2VzIGludG8gYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbiBydW5zIHRoZSByaXNrIG9mIGNyZWF0aW5nIHR3byBwYWNrYWdlcyB3aXRoIGRpZmZlcmVudCBuYW1lcyBidXRcbiAgICogdGhlIHNhbWUgbW9kdWxlIG5hbWVzLiBJbnN0YWxsaW5nIHN1Y2ggcGFja2FnZXMgdG9nZXRoZXIgbGVhZHMgdG8gdW5zcGVjaWZpZWQgYmVoYXZpb3IsXG4gICAqIG9mdGVuIHdpdGggY29ycnVwdGVkIGZpbGVzIG9yIGRpcmVjdG9yeSB0cmVlcy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlTmFtZT86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBDb21tb24gdmFsdWVzIGFyZSBgc3JjYCAoc3JjIGxheW91dCwgdGhlIGRlZmF1bHQpIG9yIGFuIGVtcHR5IHBhdGggKGZsYXQgbGF5b3V0KS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtcm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUm9vdD86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYSBuYW1lc3BhY2UgcGFja2FnZS5cbiAgICpcbiAgICogQnVpbGQgYSBQRVAgNDIwIGltcGxpY2l0IG5hbWVzcGFjZSBwYWNrYWdlLCBhbGxvd2luZyBtb3JlIHRoYW4gb25lIHJvb3QgYF9faW5pdF9fLnB5YC5cbiAgICpcbiAgICogVXNlIHRoaXMgb3B0aW9uIHdoZW4gdGhlIG5hbWVzcGFjZSBwYWNrYWdlIGNvbnRhaW5zIG11bHRpcGxlIHJvb3QgYF9faW5pdF9fLnB5YCwgZm9yXG4gICAqIG5hbWVzcGFjZSBwYWNrYWdlcyB3aXRoIGEgc2luZ2xlIHJvb3QgYF9faW5pdF9fLnB5YCB1c2UgYSBkb3R0ZWQgYG1vZHVsZS1uYW1lYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBUbyBjb21wYXJlIGRvdHRlZCBgbW9kdWxlLW5hbWVgIGFuZCBgbmFtZXNwYWNlID0gdHJ1ZWAsIHRoZSBmaXJzdCBleGFtcGxlIGJlbG93IGNhbiBiZVxuICAgKiBleHByZXNzZWQgd2l0aCBgbW9kdWxlLW5hbWUgPSBcImNsb3VkLmRhdGFiYXNlXCJgOiBUaGVyZSBpcyBvbmUgcm9vdCBgX19pbml0X18ucHlgIGBkYXRhYmFzZWAuXG4gICAqIEluIHRoZSBzZWNvbmQgZXhhbXBsZSwgd2UgaGF2ZSB0aHJlZSByb290cyAoYGNsb3VkLmRhdGFiYXNlYCwgYGNsb3VkLmRhdGFiYXNlX3Byb2AsXG4gICAqIGBiaWxsaW5nLm1vZHVsZXMuZGF0YWJhc2VfcHJvYCksIHNvIGBuYW1lc3BhY2UgPSB0cnVlYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBzcmNcbiAgICog4pSU4pSA4pSAIGNsb3VkXG4gICAqIOKUlOKUgOKUgCBkYXRhYmFzZVxuICAgKiDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSc4pSA4pSAIHF1ZXJ5X2J1aWxkZXJcbiAgICog4pSCICAg4pSU4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUlOKUgOKUgCBzcWxcbiAgICog4pSc4pSA4pSAIHBhcnNlci5weVxuICAgKiDilJTilIDilIAgX19pbml0X18ucHlcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogc3JjXG4gICAqIOKUnOKUgOKUgCBjbG91ZFxuICAgKiDilIIgICDilJzilIDilIAgZGF0YWJhc2VcbiAgICog4pSCICAg4pSCICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgIOKUgiAgIOKUnOKUgOKUgCBxdWVyeV9idWlsZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilIIgICDilIIgICDilJTilIDilIAgc3FsXG4gICAqIOKUgiAgIOKUgiAgICAgICDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSCICAg4pSCICAgICAgIOKUlOKUgOKUgCBwYXJzZXIucHlcbiAgICog4pSCICAg4pSU4pSA4pSAIGRhdGFiYXNlX3Byb1xuICAgKiDilIIgICAgICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgICAgICDilJTilIDilIAgcXVlcnlfYnVpbGRlci5weVxuICAgKiDilJTilIDilIAgYmlsbGluZ1xuICAgKiDilJTilIDilIAgbW9kdWxlc1xuICAgKiDilJTilIDilIAgZGF0YWJhc2VfcHJvXG4gICAqIOKUnOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilJTilIDilIAgc3FsLnB5XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2xvYiBleHByZXNzaW9ucyB3aGljaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3NvdXJjZS1leGNsdWRlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VFeGNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdsb2IgZXhwcmVzc2lvbnMgd2hpY2ggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGFkZGl0aW9uYWxseSBpbmNsdWRlIGluIHRoZSBzb3VyY2VcbiAgICogZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBgcHlwcm9qZWN0LnRvbWxgIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIG1vZHVsZSBkaXJlY3RvcnkgYXJlIGFsd2F5cyBpbmNsdWRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNzb3VyY2UtaW5jbHVkZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSW5jbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHbG9iIGV4cHJlc3Npb25zIHdoaWNoIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBleGNsdWRlIGZyb20gdGhlIHdoZWVsLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3doZWVsLWV4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IHdoZWVsRXhjbHVkZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWlsZEJhY2tlbmRTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iajogQnVpbGRCYWNrZW5kU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRhJzogdG9Kc29uX1doZWVsRGF0YUluY2x1ZGVzKG9iai5kYXRhKSxcbiAgICAnZGVmYXVsdC1leGNsdWRlcyc6IG9iai5kZWZhdWx0RXhjbHVkZXMsXG4gICAgJ21vZHVsZS1uYW1lJzogb2JqLm1vZHVsZU5hbWUsXG4gICAgJ21vZHVsZS1yb290Jzogb2JqLm1vZHVsZVJvb3QsXG4gICAgJ25hbWVzcGFjZSc6IG9iai5uYW1lc3BhY2UsXG4gICAgJ3NvdXJjZS1leGNsdWRlJzogb2JqLnNvdXJjZUV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICAgICdzb3VyY2UtaW5jbHVkZSc6IG9iai5zb3VyY2VJbmNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnd2hlZWwtZXhjbHVkZSc6IG9iai53aGVlbEV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBzaW5nbGUgaXRlbSBpbiBhIGNvbmZsaWN0aW5nIHNldC5cbiAqXG4gKiBFYWNoIGl0ZW0gaXMgYSBwYWlyIG9mIGFuIChvcHRpb25hbCkgcGFja2FnZSBhbmQgYSBjb3JyZXNwb25kaW5nIGV4dHJhIG9yIGdyb3VwIG5hbWUgZm9yIHRoYXRcbiAqIHBhY2thZ2UuXG4gKlxuICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFDb25mbGljdEl0ZW0ge1xuICAvKipcbiAgICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW0jZXh0cmFcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFNjaGVtYUNvbmZsaWN0SXRlbSNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU2NoZW1hQ29uZmxpY3RJdGVtI3BhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1NjaGVtYUNvbmZsaWN0SXRlbScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1NjaGVtYUNvbmZsaWN0SXRlbShvYmo6IFNjaGVtYUNvbmZsaWN0SXRlbSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4dHJhJzogb2JqLmV4dHJhLFxuICAgICdncm91cCc6IG9iai5ncm91cCxcbiAgICAncGFja2FnZSc6IG9iai5wYWNrYWdlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lHcm91cFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcHl0aG9uIHRvIHJlcXVpcmUgd2hlbiBpbnN0YWxsaW5nIHRoaXMgZ3JvdXBcbiAgICpcbiAgICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncyNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RlcGVuZGVuY3lHcm91cFNldHRpbmdzKG9iajogRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZXF1aXJlcy1weXRob24nOiBvYmoucmVxdWlyZXNQeXRob24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIHN1YnNldCBvZiB0aGUgUHl0aG9uIFBhY2thZ2UgTWV0YWRhdGEgMi4zIHN0YW5kYXJkIGFzIHNwZWNpZmllZCBpblxuICogPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8+LlxuICpcbiAqIEBzY2hlbWEgU3RhdGljTWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNwcm92aWRlcy1leHRyYVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXNFeHRyYT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3JlcXVpcmVzLWRpc3RcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzRGlzdD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIFB5dGhvbiByZXF1aXJlbWVudCwgZS5nLiwgYD49My4xMGBcbiAgICpcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQRVAgNDQwLXN0eWxlIHBhY2thZ2UgdmVyc2lvbiwgZS5nLiwgYDEuMi4zYFxuICAgKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0YXRpY01ldGFkYXRhJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RhdGljTWV0YWRhdGEob2JqOiBTdGF0aWNNZXRhZGF0YSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncHJvdmlkZXMtZXh0cmEnOiBvYmoucHJvdmlkZXNFeHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVzLWRpc3QnOiBvYmoucmVxdWlyZXNEaXN0Py5tYXAoeSA9PiB5KSxcbiAgICAncmVxdWlyZXMtcHl0aG9uJzogb2JqLnJlcXVpcmVzUHl0aG9uLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEluZGV4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAvKipcbiAgICogV2hlbiB1diBzaG91bGQgdXNlIGF1dGhlbnRpY2F0aW9uIGZvciByZXF1ZXN0cyB0byB0aGUgaW5kZXguXG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW1t0b29sLnV2LmluZGV4XV1cbiAgICogbmFtZSA9IFwibXktaW5kZXhcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vPG9taXR0ZWQ+L3NpbXBsZVwiXG4gICAqIGF1dGhlbnRpY2F0ZSA9IFwiYWx3YXlzXCJcbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjYXV0aGVudGljYXRlXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhY2hlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpbmRleC5cbiAgICpcbiAgICogV2hlbiBzZXQsIHRoZXNlIGhlYWRlcnMgd2lsbCBvdmVycmlkZSB0aGUgc2VydmVyJ3MgY2FjaGUgY29udHJvbCBoZWFkZXJzXG4gICAqIGZvciBib3RoIHBhY2thZ2UgbWV0YWRhdGEgcmVxdWVzdHMgYW5kIGFydGlmYWN0IGRvd25sb2Fkcy5cbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJteS1pbmRleFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly88b21pdHRlZD4vc2ltcGxlXCJcbiAgICogY2FjaGUtY29udHJvbCA9IHsgYXBpID0gXCJtYXgtYWdlPTYwMFwiLCBmaWxlcyA9IFwibWF4LWFnZT0zNjAwXCIgfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNjYWNoZS1jb250cm9sXG4gICAqL1xuICByZWFkb25seSBjYWNoZUNvbnRyb2w/OiBJbmRleENhY2hlQ29udHJvbDtcblxuICAvKipcbiAgICogTWFyayB0aGUgaW5kZXggYXMgdGhlIGRlZmF1bHQgaW5kZXguXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHVzZXMgUHlQSSBhcyB0aGUgZGVmYXVsdCBpbmRleCwgc3VjaCB0aGF0IGV2ZW4gaWYgYWRkaXRpb25hbCBpbmRleGVzIGFyZVxuICAgKiBkZWZpbmVkIHZpYSBgW1t0b29sLnV2LmluZGV4XV1gLCBQeVBJIHdpbGwgc3RpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBwYWNrYWdlcyB0aGF0XG4gICAqIGFyZW4ndCBmb3VuZCBlbHNld2hlcmUuIFRvIGRpc2FibGUgdGhlIFB5UEkgZGVmYXVsdCwgc2V0IGBkZWZhdWx0ID0gdHJ1ZWAgb24gYXQgbGVhc3Qgb25lXG4gICAqIG90aGVyIGluZGV4LlxuICAgKlxuICAgKiBNYXJraW5nIGFuIGluZGV4IGFzIGRlZmF1bHQgd2lsbCBtb3ZlIGl0IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCBvZiBpbmRleGVzLCBzdWNoIHRoYXQgaXRcbiAgICogaXMgZ2l2ZW4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgd2hlbiByZXNvbHZpbmcgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGluZGV4IGFzIGV4cGxpY2l0LlxuICAgKlxuICAgKiBFeHBsaWNpdCBpbmRleGVzIHdpbGwgX29ubHlfIGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZCB2aWEgYSBgW3Rvb2wudXYuc291cmNlc11gXG4gICAqIGRlZmluaXRpb24sIGFzIGluOlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcInB5dG9yY2hcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vZG93bmxvYWQucHl0b3JjaC5vcmcvd2hsL2N1MTIxXCJcbiAgICogZXhwbGljaXQgPSB0cnVlXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZXhwbGljaXRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGxpY2l0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvcm1hdCB1c2VkIGJ5IHRoZSBpbmRleC5cbiAgICpcbiAgICogSW5kZXhlcyBjYW4gZWl0aGVyIGJlIFBFUCA1MDMtY29tcGxpYW50IChpLmUuLCBhIFB5UEktc3R5bGUgcmVnaXN0cnkgaW1wbGVtZW50aW5nIHRoZSBTaW1wbGVcbiAgICogQVBJKSBvciBzdHJ1Y3R1cmVkIGFzIGEgZmxhdCBsaXN0IG9mIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIGAtLWZpbmQtbGlua3NgKS4gSW4gYm90aCBjYXNlcyxcbiAgICogaW5kZXhlcyBjYW4gcG9pbnQgdG8gZWl0aGVyIGxvY2FsIG9yIHJlbW90ZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjZm9ybWF0XG4gICAqL1xuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0YXR1cyBjb2RlcyB0aGF0IHV2IHNob3VsZCBpZ25vcmUgd2hlbiBkZWNpZGluZyB3aGV0aGVyXG4gICAqIHRvIGNvbnRpbnVlIHNlYXJjaGluZyBpbiB0aGUgbmV4dCBpbmRleCBhZnRlciBhIGZhaWx1cmUuXG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW1t0b29sLnV2LmluZGV4XV1cbiAgICogbmFtZSA9IFwibXktaW5kZXhcIlxuICAgKiB1cmwgPSBcImh0dHBzOi8vPG9taXR0ZWQ+L3NpbXBsZVwiXG4gICAqIGlnbm9yZS1lcnJvci1jb2RlcyA9IFs0MDEsIDQwM11cbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjaWdub3JlLWVycm9yLWNvZGVzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVFcnJvckNvZGVzPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbmRleC5cbiAgICpcbiAgICogSW5kZXggbmFtZXMgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGluZGV4ZXMgZWxzZXdoZXJlIGluIHRoZSBjb25maWd1cmF0aW9uLiBGb3IgZXhhbXBsZSxcbiAgICogeW91IGNhbiBwaW4gYSBwYWNrYWdlIHRvIGEgc3BlY2lmaWMgaW5kZXggYnkgbmFtZTpcbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJweXRvcmNoXCJcbiAgICogdXJsID0gXCJodHRwczovL2Rvd25sb2FkLnB5dG9yY2gub3JnL3dobC9jdTEyMVwiXG4gICAqXG4gICAqIFt0b29sLnV2LnNvdXJjZXNdXG4gICAqIHRvcmNoID0geyBpbmRleCA9IFwicHl0b3JjaFwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgdXBsb2FkIGVuZHBvaW50LlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIGB1diBwdWJsaXNoIC0taW5kZXggPG5hbWU+YCwgdGhpcyBVUkwgaXMgdXNlZCBmb3IgcHVibGlzaGluZy5cbiAgICpcbiAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgZGVmYXVsdCBpbmRleCBQeVBJIHdvdWxkIGxvb2sgYXMgZm9sbG93czpcbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJweXBpXCJcbiAgICogdXJsID0gXCJodHRwczovL3B5cGkub3JnL3NpbXBsZVwiXG4gICAqIHB1Ymxpc2gtdXJsID0gXCJodHRwczovL3VwbG9hZC5weXBpLm9yZy9sZWdhY3kvXCJcbiAgICogYGBgXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjcHVibGlzaC11cmxcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGluZGV4LlxuICAgKlxuICAgKiBFeHBlY3RzIHRvIHJlY2VpdmUgYSBVUkwgKGUuZy4sIGBodHRwczovL3B5cGkub3JnL3NpbXBsZWApIG9yIGEgbG9jYWwgcGF0aC5cbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCN1cmxcbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdJbmRleCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0luZGV4KG9iajogSW5kZXggfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdXRoZW50aWNhdGUnOiBvYmouYXV0aGVudGljYXRlLFxuICAgICdjYWNoZS1jb250cm9sJzogdG9Kc29uX0luZGV4Q2FjaGVDb250cm9sKG9iai5jYWNoZUNvbnRyb2wpLFxuICAgICdkZWZhdWx0Jzogb2JqLmRlZmF1bHQsXG4gICAgJ2V4cGxpY2l0Jzogb2JqLmV4cGxpY2l0LFxuICAgICdmb3JtYXQnOiBvYmouZm9ybWF0LFxuICAgICdpZ25vcmUtZXJyb3ItY29kZXMnOiBvYmouaWdub3JlRXJyb3JDb2Rlcz8ubWFwKHkgPT4geSksXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncHVibGlzaC11cmwnOiBvYmoucHVibGlzaFVybCxcbiAgICAndXJsJzogb2JqLnVybCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBgdXYgcGlwYCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlLlxuICpcbiAqIFRoZXNlIHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQgd2hlbiBydW5uaW5nIGNvbW1hbmRzIG91dHNpZGUgdGhlIGB1diBwaXBgIG5hbWVzcGFjZSAoZS5nLixcbiAqIGB1diBsb2NrYCwgYHV2eGApLlxuICpcbiAqIEBzY2hlbWEgUGlwT3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcE9wdGlvbnMge1xuICAvKipcbiAgICogSW5jbHVkZSBhbGwgb3B0aW9uYWwgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgdG8gYHB5cHJvamVjdC50b21sYCwgYHNldHVwLnB5YCwgYW5kIGBzZXR1cC5jZmdgIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNhbGwtZXh0cmFzXG4gICAqL1xuICByZWFkb25seSBhbGxFeHRyYXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyBgdXYgcGlwIHN5bmNgIHdpdGggZW1wdHkgcmVxdWlyZW1lbnRzLCB3aGljaCB3aWxsIGNsZWFyIHRoZSBlbnZpcm9ubWVudCBvZiBhbGxcbiAgICogcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNhbGxvdy1lbXB0eS1yZXF1aXJlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93RW1wdHlSZXF1aXJlbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGUgb2YgdGhlIGFubm90YXRpb24gY29tbWVudHMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBmaWxlLCB1c2VkIHRvIGluZGljYXRlIHRoZVxuICAgKiBzb3VyY2Ugb2YgZWFjaCBwYWNrYWdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjYW5ub3RhdGlvbi1zdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgYW5ub3RhdGlvblN0eWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB1diB0byBtb2RpZnkgYW4gYEVYVEVSTkFMTFktTUFOQUdFRGAgUHl0aG9uIGluc3RhbGxhdGlvbi5cbiAgICpcbiAgICogV0FSTklORzogYC0tYnJlYWstc3lzdGVtLXBhY2thZ2VzYCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKENJKVxuICAgKiBlbnZpcm9ubWVudHMsIHdoZW4gaW5zdGFsbGluZyBpbnRvIFB5dGhvbiBpbnN0YWxsYXRpb25zIHRoYXQgYXJlIG1hbmFnZWQgYnkgYW4gZXh0ZXJuYWxcbiAgICogcGFja2FnZSBtYW5hZ2VyLCBsaWtlIGBhcHRgLiBJdCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24sIGFzIHN1Y2ggUHl0aG9uIGluc3RhbGxhdGlvbnNcbiAgICogZXhwbGljaXRseSByZWNvbW1lbmQgYWdhaW5zdCBtb2RpZmljYXRpb25zIGJ5IG90aGVyIHBhY2thZ2UgbWFuYWdlcnMgKGxpa2UgdXYgb3IgcGlwKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2JyZWFrLXN5c3RlbS1wYWNrYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgYnJlYWtTeXN0ZW1QYWNrYWdlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbXBpbGUgUHl0aG9uIGZpbGVzIHRvIGJ5dGVjb2RlIGFmdGVyIGluc3RhbGxhdGlvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgZG9lcyBub3QgY29tcGlsZSBQeXRob24gKGAucHlgKSBmaWxlcyB0byBieXRlY29kZSAoYF9fcHljYWNoZV9fLyoucHljYCk7XG4gICAqIGluc3RlYWQsIGNvbXBpbGF0aW9uIGlzIHBlcmZvcm1lZCBsYXppbHkgdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMgaW1wb3J0ZWQuIEZvciB1c2UtY2FzZXNcbiAgICogaW4gd2hpY2ggc3RhcnQgdGltZSBpcyBjcml0aWNhbCwgc3VjaCBhcyBDTEkgYXBwbGljYXRpb25zIGFuZCBEb2NrZXIgY29udGFpbmVycywgdGhpcyBvcHRpb25cbiAgICogY2FuIGJlIGVuYWJsZWQgdG8gdHJhZGUgbG9uZ2VyIGluc3RhbGxhdGlvbiB0aW1lcyBmb3IgZmFzdGVyIHN0YXJ0IHRpbWVzLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHV2IHdpbGwgcHJvY2VzcyB0aGUgZW50aXJlIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5IChpbmNsdWRpbmcgcGFja2FnZXMgdGhhdFxuICAgKiBhcmUgbm90IGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBjdXJyZW50IG9wZXJhdGlvbikgZm9yIGNvbnNpc3RlbmN5LiBMaWtlIHBpcCwgaXQgd2lsbCBhbHNvXG4gICAqIGlnbm9yZSBlcnJvcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNjb21waWxlLWJ5dGVjb2RlXG4gICAqL1xuICByZWFkb25seSBjb21waWxlQnl0ZWNvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0byBwYXNzIHRvIHRoZSBbUEVQIDUxN10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MTcvKSBidWlsZCBiYWNrZW5kLFxuICAgKiBzcGVjaWZpZWQgYXMgYEtFWT1WQUxVRWAgcGFpcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNjb25maWctc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ1NldHRpbmdzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogU2V0dGluZ3MgdG8gcGFzcyB0byB0aGUgW1BFUCA1MTddKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE3LykgYnVpbGQgYmFja2VuZCBmb3Igc3BlY2lmaWMgcGFja2FnZXMsXG4gICAqIHNwZWNpZmllZCBhcyBgS0VZPVZBTFVFYCBwYWlycy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2NvbmZpZy1zZXR0aW5ncy1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5nc1BhY2thZ2U/OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogYW55IH0gfTtcblxuICAvKipcbiAgICogVGhlIGhlYWRlciBjb21tZW50IHRvIGluY2x1ZGUgYXQgdGhlIHRvcCBvZiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIFVzZWQgdG8gcmVmbGVjdCBjdXN0b20gYnVpbGQgc2NyaXB0cyBhbmQgY29tbWFuZHMgdGhhdCB3cmFwIGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNjdXN0b20tY29tcGlsZS1jb21tYW5kXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db21waWxlQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogUHJlLWRlZmluZWQgc3RhdGljIG1ldGFkYXRhIGZvciBkZXBlbmRlbmNpZXMgb2YgdGhlIHByb2plY3QgKGRpcmVjdCBvciB0cmFuc2l0aXZlKS4gV2hlblxuICAgKiBwcm92aWRlZCwgZW5hYmxlcyB0aGUgcmVzb2x2ZXIgdG8gdXNlIHRoZSBzcGVjaWZpZWQgbWV0YWRhdGEgaW5zdGVhZCBvZiBxdWVyeWluZyB0aGVcbiAgICogcmVnaXN0cnkgb3IgYnVpbGRpbmcgdGhlIHJlbGV2YW50IHBhY2thZ2UgZnJvbSBzb3VyY2UuXG4gICAqXG4gICAqIE1ldGFkYXRhIHNob3VsZCBiZSBwcm92aWRlZCBpbiBhZGhlcmVuY2Ugd2l0aCB0aGUgW01ldGFkYXRhIDIuM10oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8pXG4gICAqIHN0YW5kYXJkLCB0aG91Z2ggb25seSB0aGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcmVzcGVjdGVkOlxuICAgKlxuICAgKiAtIGBuYW1lYDogVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuXG4gICAqIC0gKE9wdGlvbmFsKSBgdmVyc2lvbmA6IFRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiBJZiBvbWl0dGVkLCB0aGUgbWV0YWRhdGEgd2lsbCBiZSBhcHBsaWVkXG4gICAqIHRvIGFsbCB2ZXJzaW9ucyBvZiB0aGUgcGFja2FnZS5cbiAgICogLSAoT3B0aW9uYWwpIGByZXF1aXJlcy1kaXN0YDogVGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFja2FnZSAoZS5nLiwgYHdlcmt6ZXVnPj0wLjE0YCkuXG4gICAqIC0gKE9wdGlvbmFsKSBgcmVxdWlyZXMtcHl0aG9uYDogVGhlIFB5dGhvbiB2ZXJzaW9uIHJlcXVpcmVkIGJ5IHRoZSBwYWNrYWdlIChlLmcuLCBgPj0zLjEwYCkuXG4gICAqIC0gKE9wdGlvbmFsKSBgcHJvdmlkZXMtZXh0cmFgOiBUaGUgZXh0cmFzIHByb3ZpZGVkIGJ5IHRoZSBwYWNrYWdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZGVwZW5kZW5jeS1tZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeU1ldGFkYXRhPzogU3RhdGljTWV0YWRhdGFbXTtcblxuICAvKipcbiAgICogSW5jbHVkZSBgLS1uby1iaW5hcnlgIGFuZCBgLS1vbmx5LWJpbmFyeWAgZW50cmllcyBpbiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNlbWl0LWJ1aWxkLW9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGVtaXRCdWlsZE9wdGlvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGAtLWZpbmQtbGlua3NgIGVudHJpZXMgaW4gdGhlIG91dHB1dCBmaWxlIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZW1pdC1maW5kLWxpbmtzXG4gICAqL1xuICByZWFkb25seSBlbWl0RmluZExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSBjb21tZW50IGFubm90YXRpb25zIGluZGljYXRpbmcgdGhlIGluZGV4IHVzZWQgdG8gcmVzb2x2ZSBlYWNoIHBhY2thZ2UgKGUuZy4sXG4gICAqIGAjIGZyb20gaHR0cHM6Ly9weXBpLm9yZy9zaW1wbGVgKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtaW5kZXgtYW5ub3RhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW1pdEluZGV4QW5ub3RhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYC0taW5kZXgtdXJsYCBhbmQgYC0tZXh0cmEtaW5kZXgtdXJsYCBlbnRyaWVzIGluIHRoZSBvdXRwdXQgZmlsZSBnZW5lcmF0ZWQgYnkgYHV2IHBpcCBjb21waWxlYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtaW5kZXgtdXJsXG4gICAqL1xuICByZWFkb25seSBlbWl0SW5kZXhVcmw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVtaXQgYSBtYXJrZXIgc3RyaW5nIGluZGljYXRpbmcgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIHNldCBvZiBwaW5uZWRcbiAgICogZGVwZW5kZW5jaWVzIGlzIHZhbGlkLlxuICAgKlxuICAgKiBUaGUgcGlubmVkIGRlcGVuZGVuY2llcyBtYXkgYmUgdmFsaWQgZXZlbiB3aGVuIHRoZSBtYXJrZXIgZXhwcmVzc2lvbiBpc1xuICAgKiBmYWxzZSwgYnV0IHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgdHJ1ZSwgdGhlIHJlcXVpcmVtZW50cyBhcmUga25vd24gdG9cbiAgICogYmUgY29ycmVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtbWFya2VyLWV4cHJlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGVtaXRNYXJrZXJFeHByZXNzaW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGltaXQgY2FuZGlkYXRlIHBhY2thZ2VzIHRvIHRob3NlIHRoYXQgd2VyZSB1cGxvYWRlZCBwcmlvciB0byBhIGdpdmVuIHBvaW50IGluIHRpbWUuXG4gICAqXG4gICAqIEFjY2VwdHMgYSBzdXBlcnNldCBvZiBbUkZDIDMzMzldKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzMzM5Lmh0bWwpIChlLmcuLFxuICAgKiBgMjAwNi0xMi0wMlQwMjowNzo0M1pgKS4gQSBmdWxsIHRpbWVzdGFtcCBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVzb2x2ZXIgd2lsbFxuICAgKiBiZWhhdmUgY29uc2lzdGVudGx5IGFjcm9zcyB0aW1lem9uZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleGNsdWRlLW5ld2VyXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyBmb3Igc3BlY2lmaWMgcGFja2FnZXMgdG8gdGhvc2UgdGhhdCB3ZXJlIHVwbG9hZGVkIHByaW9yIHRvIHRoZSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiBBY2NlcHRzIHBhY2thZ2UtZGF0ZSBwYWlycyBpbiBhIGRpY3Rpb25hcnkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZXhjbHVkZS1uZXdlci1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXJQYWNrYWdlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogSW5jbHVkZSBvcHRpb25hbCBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGV4dHJhOyBtYXkgYmUgcHJvdmlkZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIE9ubHkgYXBwbGllcyB0byBgcHlwcm9qZWN0LnRvbWxgLCBgc2V0dXAucHlgLCBhbmQgYHNldHVwLmNmZ2Agc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhXG4gICAqL1xuICByZWFkb25seSBleHRyYT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcyBmb3IgcGFja2FnZXMuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGV4dGVuZGluZyB0aGUgUEVQIDUxNyBidWlsZCBlbnZpcm9ubWVudCBmb3IgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMgd2l0aFxuICAgKiBhZGRpdGlvbmFsIHBhY2thZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFja2FnZXMgdGhhdCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIHBhY2thZ2VzIGxpa2VcbiAgICogYHBpcGAsIGFuZCBkbyBub3QgZGVjbGFyZSB0aGVtIGFzIGJ1aWxkIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhLWJ1aWxkLWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFCdWlsZERlcGVuZGVuY2llcz86IHsgW2tleTogc3RyaW5nXTogYW55W10gfTtcblxuICAvKipcbiAgICogRXh0cmEgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIGJ1aWxkaW5nIGNlcnRhaW4gcGFja2FnZXMuXG4gICAqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbnZpcm9ubWVudCB3aGVuIGJ1aWxkaW5nIHRoZVxuICAgKiBzcGVjaWZpZWQgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleHRyYS1idWlsZC12YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhQnVpbGRWYXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfTtcblxuICAvKipcbiAgICogRXh0cmEgVVJMcyBvZiBwYWNrYWdlIGluZGV4ZXMgdG8gdXNlLCBpbiBhZGRpdGlvbiB0byBgLS1pbmRleC11cmxgLlxuICAgKlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIHJlcG9zaXRvcnkgY29tcGxpYW50IHdpdGggW1BFUCA1MDNdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTAzLylcbiAgICogKHRoZSBzaW1wbGUgcmVwb3NpdG9yeSBBUEkpLCBvciBhIGxvY2FsIGRpcmVjdG9yeSBsYWlkIG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuXG4gICAqXG4gICAqIEFsbCBpbmRleGVzIHByb3ZpZGVkIHZpYSB0aGlzIGZsYWcgdGFrZSBwcmlvcml0eSBvdmVyIHRoZSBpbmRleCBzcGVjaWZpZWQgYnlcbiAgICogW2BpbmRleF91cmxgXSgjaW5kZXgtdXJsKS4gV2hlbiBtdWx0aXBsZSBpbmRleGVzIGFyZSBwcm92aWRlZCwgZWFybGllciB2YWx1ZXMgdGFrZSBwcmlvcml0eS5cbiAgICpcbiAgICogVG8gY29udHJvbCB1didzIHJlc29sdXRpb24gc3RyYXRlZ3kgd2hlbiBtdWx0aXBsZSBpbmRleGVzIGFyZSBwcmVzZW50LCBzZWVcbiAgICogW2BpbmRleF9zdHJhdGVneWBdKCNpbmRleC1zdHJhdGVneSkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleHRyYS1pbmRleC11cmxcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSW5kZXhVcmw/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTG9jYXRpb25zIHRvIHNlYXJjaCBmb3IgY2FuZGlkYXRlIGRpc3RyaWJ1dGlvbnMsIGluIGFkZGl0aW9uIHRvIHRob3NlIGZvdW5kIGluIHRoZSByZWdpc3RyeVxuICAgKiBpbmRleGVzLlxuICAgKlxuICAgKiBJZiBhIHBhdGgsIHRoZSB0YXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHBhY2thZ2VzIGFzIHdoZWVsIGZpbGVzIChgLndobGApIG9yXG4gICAqIHNvdXJjZSBkaXN0cmlidXRpb25zIChlLmcuLCBgLnRhci5nemAgb3IgYC56aXBgKSBhdCB0aGUgdG9wIGxldmVsLlxuICAgKlxuICAgKiBJZiBhIFVSTCwgdGhlIHBhZ2UgbXVzdCBjb250YWluIGEgZmxhdCBsaXN0IG9mIGxpbmtzIHRvIHBhY2thZ2UgZmlsZXMgYWRoZXJpbmcgdG8gdGhlXG4gICAqIGZvcm1hdHMgZGVzY3JpYmVkIGFib3ZlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZmluZC1saW5rc1xuICAgKi9cbiAgcmVhZG9ubHkgZmluZExpbmtzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSBnaXZlbiBwYWNrYWdlIGFjcm9zcyBQeXRob25cbiAgICogdmVyc2lvbnMgYW5kIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgd2lsbCBvcHRpbWl6ZSBmb3Igc2VsZWN0aW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UgZm9yIGVhY2hcbiAgICogc3VwcG9ydGVkIFB5dGhvbiB2ZXJzaW9uIChgcmVxdWlyZXMtcHl0aG9uYCksIHdoaWxlIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzZWxlY3RlZFxuICAgKiB2ZXJzaW9ucyBhY3Jvc3MgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBVbmRlciBgZmV3ZXN0YCwgdXYgd2lsbCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIHZlcnNpb25zIGZvciBlYWNoIHBhY2thZ2UsXG4gICAqIHByZWZlcnJpbmcgb2xkZXIgdmVyc2lvbnMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2Ygc3VwcG9ydGVkIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBvciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNmb3JrLXN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBmb3JrU3RyYXRlZ3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgZGlzdHJpYnV0aW9uIGhhc2hlcyBpbiB0aGUgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNnZW5lcmF0ZS1oYXNoZXNcbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlSGFzaGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY3kgZ3JvdXBzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwPzogUGlwR3JvdXBOYW1lW107XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiByZXNvbHZpbmcgYWdhaW5zdCBtdWx0aXBsZSBpbmRleCBVUkxzLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIHN0b3AgYXQgdGhlIGZpcnN0IGluZGV4IG9uIHdoaWNoIGEgZ2l2ZW4gcGFja2FnZSBpcyBhdmFpbGFibGUsIGFuZFxuICAgKiBsaW1pdCByZXNvbHV0aW9ucyB0byB0aG9zZSBwcmVzZW50IG9uIHRoYXQgZmlyc3QgaW5kZXggKGBmaXJzdC1pbmRleGApLiBUaGlzIHByZXZlbnRzXG4gICAqIFwiZGVwZW5kZW5jeSBjb25mdXNpb25cIiBhdHRhY2tzLCB3aGVyZWJ5IGFuIGF0dGFja2VyIGNhbiB1cGxvYWQgYSBtYWxpY2lvdXMgcGFja2FnZSB1bmRlciB0aGVcbiAgICogc2FtZSBuYW1lIHRvIGFuIGFsdGVybmF0ZSBpbmRleC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2luZGV4LXN0cmF0ZWd5XG4gICAqL1xuICByZWFkb25seSBpbmRleFN0cmF0ZWd5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBQeXRob24gcGFja2FnZSBpbmRleCAoYnkgZGVmYXVsdDogPGh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlPikuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogVGhlIGluZGV4IHByb3ZpZGVkIGJ5IHRoaXMgc2V0dGluZyBpcyBnaXZlbiBsb3dlciBwcmlvcml0eSB0aGFuIGFueSBpbmRleGVzIHNwZWNpZmllZCB2aWFcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2luZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gdXNlIGBrZXlyaW5nYCBmb3IgYXV0aGVudGljYXRpb24gZm9yIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEF0IHByZXNlbnQsIG9ubHkgYC0ta2V5cmluZy1wcm92aWRlciBzdWJwcm9jZXNzYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGNvbmZpZ3VyZXMgdXYgdG9cbiAgICogdXNlIHRoZSBga2V5cmluZ2AgQ0xJIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2tleXJpbmctcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGtleXJpbmdQcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCB0byB1c2Ugd2hlbiBpbnN0YWxsaW5nIHBhY2thZ2VzIGZyb20gdGhlIGdsb2JhbCBjYWNoZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUywgYW5kIGBoYXJkbGlua2Agb24gTGludXggYW5kXG4gICAqIFdpbmRvd3MuXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoZSB1c2Ugb2Ygc3ltbGluayBsaW5rIG1vZGUgaXMgZGlzY291cmFnZWQsIGFzIHRoZXkgY3JlYXRlIHRpZ2h0IGNvdXBsaW5nIGJldHdlZW5cbiAgICogdGhlIGNhY2hlIGFuZCB0aGUgdGFyZ2V0IGVudmlyb25tZW50LiBGb3IgZXhhbXBsZSwgY2xlYXJpbmcgdGhlIGNhY2hlIChgdXYgY2FjaGUgY2xlYW5gKVxuICAgKiB3aWxsIGJyZWFrIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgYnkgd2F5IG9mIHJlbW92aW5nIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBmaWxlcy4gVXNlXG4gICAqIHN5bWxpbmtzIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgY2xvbmVgIChhbHNvIGtub3duIGFzIENvcHktb24tV3JpdGUpIG9uIG1hY09TLCBhbmQgYGhhcmRsaW5rYCBvbiBMaW51eCBhbmRcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2xpbmstbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbGlua01vZGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgY29tbWVudCBhbm5vdGF0aW9ucyBpbmRpY2F0aW5nIHRoZSBzb3VyY2Ugb2YgZWFjaCBwYWNrYWdlIGZyb20gdGhlIG91dHB1dCBmaWxlXG4gICAqIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYW5ub3RhdGVcbiAgICovXG4gIHJlYWRvbmx5IG5vQW5ub3RhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBpbnN0YWxsIHByZS1idWlsdCB3aGVlbHMuXG4gICAqXG4gICAqIFRoZSBnaXZlbiBwYWNrYWdlcyB3aWxsIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgZnJvbSBzb3VyY2UuIFRoZSByZXNvbHZlciB3aWxsIHN0aWxsIHVzZVxuICAgKiBwcmUtYnVpbHQgd2hlZWxzIHRvIGV4dHJhY3QgcGFja2FnZSBtZXRhZGF0YSwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBNdWx0aXBsZSBwYWNrYWdlcyBtYXkgYmUgcHJvdmlkZWQuIERpc2FibGUgYmluYXJpZXMgZm9yIGFsbCBwYWNrYWdlcyB3aXRoIGA6YWxsOmAuXG4gICAqIENsZWFyIHByZXZpb3VzbHkgc3BlY2lmaWVkIHBhY2thZ2VzIHdpdGggYDpub25lOmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1iaW5hcnlcbiAgICovXG4gIHJlYWRvbmx5IG5vQmluYXJ5Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvbid0IGJ1aWxkIHNvdXJjZSBkaXN0cmlidXRpb25zLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHJlc29sdmluZyB3aWxsIG5vdCBydW4gYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLiBUaGUgY2FjaGVkIHdoZWVscyBvZlxuICAgKiBhbHJlYWR5LWJ1aWx0IHNvdXJjZSBkaXN0cmlidXRpb25zIHdpbGwgYmUgcmV1c2VkLCBidXQgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgYnVpbGRpbmdcbiAgICogZGlzdHJpYnV0aW9ucyB3aWxsIGV4aXQgd2l0aCBhbiBlcnJvci5cbiAgICpcbiAgICogQWxpYXMgZm9yIGAtLW9ubHktYmluYXJ5IDphbGw6YC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogQXNzdW1lcyB0aGF0IGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYnVpbGQtaXNvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLlxuICAgKlxuICAgKiBBc3N1bWVzIHRoYXQgdGhlIHBhY2thZ2VzJyBidWlsZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IFtQRVAgNTE4XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxOC8pXG4gICAqIGFyZSBhbHJlYWR5IGluc3RhbGxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgcGFja2FnZSBkZXBlbmRlbmNpZXMsIGluc3RlYWQgb25seSBhZGQgdGhvc2UgcGFja2FnZXMgZXhwbGljaXRseSBsaXN0ZWRcbiAgICogb24gdGhlIGNvbW1hbmQgbGluZSB0byB0aGUgcmVzdWx0aW5nIHJlcXVpcmVtZW50cyBmaWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tZGVwc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9EZXBzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeSBhIHBhY2thZ2UgdG8gb21pdCBmcm9tIHRoZSBvdXRwdXQgcmVzb2x1dGlvbi4gSXRzIGRlcGVuZGVuY2llcyB3aWxsIHN0aWxsIGJlXG4gICAqIGluY2x1ZGVkIGluIHRoZSByZXNvbHV0aW9uLiBFcXVpdmFsZW50IHRvIHBpcC1jb21waWxlJ3MgYC0tdW5zYWZlLXBhY2thZ2VgIG9wdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWVtaXQtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9FbWl0UGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHRoZSBzcGVjaWZpZWQgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIGlmIGBhbGwtZXh0cmFzYCBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWV4dHJhXG4gICAqL1xuICByZWFkb25seSBub0V4dHJhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgdGhlIGNvbW1lbnQgaGVhZGVyIGF0IHRoZSB0b3Agb2Ygb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1oZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IG5vSGVhZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIGFsbCByZWdpc3RyeSBpbmRleGVzIChlLmcuLCBQeVBJKSwgaW5zdGVhZCByZWx5aW5nIG9uIGRpcmVjdCBVUkwgZGVwZW5kZW5jaWVzIGFuZFxuICAgKiB0aG9zZSBwcm92aWRlZCB2aWEgYC0tZmluZC1saW5rc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1pbmRleFxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElnbm9yZSB0aGUgYHRvb2wudXYuc291cmNlc2AgdGFibGUgd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLiBVc2VkIHRvIGxvY2sgYWdhaW5zdCB0aGVcbiAgICogc3RhbmRhcmRzLWNvbXBsaWFudCwgcHVibGlzaGFibGUgcGFja2FnZSBtZXRhZGF0YSwgYXMgb3Bwb3NlZCB0byB1c2luZyBhbnkgbG9jYWwgb3IgR2l0XG4gICAqIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1zb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBub1NvdXJjZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGV4dHJhcyBpbiB0aGUgb3V0cHV0IGZpbGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHN0cmlwcyBleHRyYXMsIGFzIGFueSBwYWNrYWdlcyBwdWxsZWQgaW4gYnkgdGhlIGV4dHJhcyBhcmUgYWxyZWFkeSBpbmNsdWRlZFxuICAgKiBhcyBkZXBlbmRlbmNpZXMgaW4gdGhlIG91dHB1dCBmaWxlIGRpcmVjdGx5LiBGdXJ0aGVyLCBvdXRwdXQgZmlsZXMgZ2VuZXJhdGVkIHdpdGhcbiAgICogYC0tbm8tc3RyaXAtZXh0cmFzYCBjYW5ub3QgYmUgdXNlZCBhcyBjb25zdHJhaW50cyBmaWxlcyBpbiBgaW5zdGFsbGAgYW5kIGBzeW5jYCBpbnZvY2F0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLXN0cmlwLWV4dHJhc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9TdHJpcEV4dHJhcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgZW52aXJvbm1lbnQgbWFya2VycyBpbiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHN0cmlwcyBlbnZpcm9ubWVudCBtYXJrZXJzLCBhcyB0aGUgcmVzb2x1dGlvbiBnZW5lcmF0ZWQgYnkgYGNvbXBpbGVgIGlzXG4gICAqIG9ubHkgZ3VhcmFudGVlZCB0byBiZSBjb3JyZWN0IGZvciB0aGUgdGFyZ2V0IGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tc3RyaXAtbWFya2Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9TdHJpcE1hcmtlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPbmx5IHVzZSBwcmUtYnVpbHQgd2hlZWxzOyBkb24ndCBidWlsZCBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCByZXNvbHZpbmcgd2lsbCBub3QgcnVuIGNvZGUgZnJvbSB0aGUgZ2l2ZW4gcGFja2FnZXMuIFRoZSBjYWNoZWQgd2hlZWxzIG9mIGFscmVhZHktYnVpbHRcbiAgICogc291cmNlIGRpc3RyaWJ1dGlvbnMgd2lsbCBiZSByZXVzZWQsIGJ1dCBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBidWlsZGluZyBkaXN0cmlidXRpb25zIHdpbGxcbiAgICogZXhpdCB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBNdWx0aXBsZSBwYWNrYWdlcyBtYXkgYmUgcHJvdmlkZWQuIERpc2FibGUgYmluYXJpZXMgZm9yIGFsbCBwYWNrYWdlcyB3aXRoIGA6YWxsOmAuXG4gICAqIENsZWFyIHByZXZpb3VzbHkgc3BlY2lmaWVkIHBhY2thZ2VzIHdpdGggYDpub25lOmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNvbmx5LWJpbmFyeVxuICAgKi9cbiAgcmVhZG9ubHkgb25seUJpbmFyeT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgcmVxdWlyZW1lbnRzIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgIHRvIHRoZSBnaXZlbiBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZS5cbiAgICpcbiAgICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyB2ZXJzaW9ucyB3aWxsIGJlIHByZWZlcnJlZCB3aGVuIHJlc29sdmluZ1xuICAgKiBkZXBlbmRlbmNpZXMsIHVubGVzcyBgLS11cGdyYWRlYCBpcyBhbHNvIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI291dHB1dC1maWxlXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHBhY2thZ2VzIGludG8gYGxpYmAsIGBiaW5gLCBhbmQgb3RoZXIgdG9wLWxldmVsIGZvbGRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZFxuICAgKiBkaXJlY3RvcnksIGFzIGlmIGEgdmlydHVhbCBlbnZpcm9ubWVudCB3ZXJlIHByZXNlbnQgYXQgdGhhdCBsb2NhdGlvbi5cbiAgICpcbiAgICogSW4gZ2VuZXJhbCwgcHJlZmVyIHRoZSB1c2Ugb2YgYC0tcHl0aG9uYCB0byBpbnN0YWxsIGludG8gYW4gYWx0ZXJuYXRlIGVudmlyb25tZW50LCBhc1xuICAgKiBzY3JpcHRzIGFuZCBvdGhlciBhcnRpZmFjdHMgaW5zdGFsbGVkIHZpYSBgLS1wcmVmaXhgIHdpbGwgcmVmZXJlbmNlIHRoZSBpbnN0YWxsaW5nXG4gICAqIGludGVycHJldGVyLCByYXRoZXIgdGhhbiBhbnkgaW50ZXJwcmV0ZXIgYWRkZWQgdG8gdGhlIGAtLXByZWZpeGAgZGlyZWN0b3J5LCByZW5kZXJpbmcgdGhlbVxuICAgKiBub24tcG9ydGFibGUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIGNvbnNpZGVyaW5nIHByZS1yZWxlYXNlIHZlcnNpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIGFjY2VwdCBwcmUtcmVsZWFzZXMgZm9yIHBhY2thZ2VzIHRoYXQgX29ubHlfIHB1Ymxpc2ggcHJlLXJlbGVhc2VzLFxuICAgKiBhbG9uZyB3aXRoIGZpcnN0LXBhcnR5IHJlcXVpcmVtZW50cyB0aGF0IGNvbnRhaW4gYW4gZXhwbGljaXQgcHJlLXJlbGVhc2UgbWFya2VyIGluIHRoZVxuICAgKiBkZWNsYXJlZCBzcGVjaWZpZXJzIChgaWYtbmVjZXNzYXJ5LW9yLWV4cGxpY2l0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNwcmVyZWxlYXNlXG4gICAqL1xuICByZWFkb25seSBwcmVyZWxlYXNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIGludGVycHJldGVyIGludG8gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgaW5zdGFsbHMgaW50byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvclxuICAgKiBhbnkgcGFyZW50IGRpcmVjdG9yeS4gVGhlIGAtLXB5dGhvbmAgb3B0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBpbnRlcnByZXRlcixcbiAgICogd2hpY2ggaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjb250aW51b3VzIGludGVncmF0aW9uIChDSSkgZW52aXJvbm1lbnRzIG9yIG90aGVyIGF1dG9tYXRlZFxuICAgKiB3b3JrZmxvd3MuXG4gICAqXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAtIGAzLjEwYCBsb29rcyBmb3IgYW4gaW5zdGFsbGVkIFB5dGhvbiAzLjEwIGluIHRoZSByZWdpc3RyeSBvbiBXaW5kb3dzIChzZWVcbiAgICogYHB5IC0tbGlzdC1wYXRoc2ApLCBvciBgcHl0aG9uMy4xMGAgb24gTGludXggYW5kIG1hY09TLlxuICAgKiAtIGBweXRob24zLjEwYCBvciBgcHl0aG9uLmV4ZWAgbG9va3MgZm9yIGEgYmluYXJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gYFBBVEhgLlxuICAgKiAtIGAvaG9tZS9mZXJyaXMvLmxvY2FsL2Jpbi9weXRob24zLjEwYCB1c2VzIHRoZSBleGFjdCBQeXRob24gYXQgdGhlIGdpdmVuIHBhdGguXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNweXRob25cbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsYXRmb3JtIGZvciB3aGljaCByZXF1aXJlbWVudHMgc2hvdWxkIGJlIHJlc29sdmVkLlxuICAgKlxuICAgKiBSZXByZXNlbnRlZCBhcyBhIFwidGFyZ2V0IHRyaXBsZVwiLCBhIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgdGFyZ2V0IHBsYXRmb3JtIGluIHRlcm1zIG9mXG4gICAqIGl0cyBDUFUsIHZlbmRvciwgYW5kIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSwgbGlrZSBgeDg2XzY0LXVua25vd24tbGludXgtZ251YCBvclxuICAgKiBgYWFyY2g2NC1hcHBsZS1kYXJ3aW5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcHl0aG9uLXBsYXRmb3JtXG4gICAqL1xuICByZWFkb25seSBweXRob25QbGF0Zm9ybT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gUHl0aG9uIHZlcnNpb24gdGhhdCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IHRoZSByZXNvbHZlZCByZXF1aXJlbWVudHMgKGUuZy4sXG4gICAqIGAzLjhgIG9yIGAzLjguMTdgKS5cbiAgICpcbiAgICogSWYgYSBwYXRjaCB2ZXJzaW9uIGlzIG9taXR0ZWQsIHRoZSBtaW5pbXVtIHBhdGNoIHZlcnNpb24gaXMgYXNzdW1lZC4gRm9yIGV4YW1wbGUsIGAzLjhgIGlzXG4gICAqIG1hcHBlZCB0byBgMy44LjBgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcHl0aG9uLXZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlaW5zdGFsbCBhbGwgcGFja2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5J3JlIGFscmVhZHkgaW5zdGFsbGVkLiBJbXBsaWVzIGByZWZyZXNoYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3JlaW5zdGFsbFxuICAgKi9cbiAgcmVhZG9ubHkgcmVpbnN0YWxsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVpbnN0YWxsIGEgc3BlY2lmaWMgcGFja2FnZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0J3MgYWxyZWFkeSBpbnN0YWxsZWQuIEltcGxpZXNcbiAgICogYHJlZnJlc2gtcGFja2FnZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNyZWluc3RhbGwtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVpbnN0YWxsUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlIGEgbWF0Y2hpbmcgaGFzaCBmb3IgZWFjaCByZXF1aXJlbWVudC5cbiAgICpcbiAgICogSGFzaC1jaGVja2luZyBtb2RlIGlzIGFsbCBvciBub3RoaW5nLiBJZiBlbmFibGVkLCBfYWxsXyByZXF1aXJlbWVudHMgbXVzdCBiZSBwcm92aWRlZFxuICAgKiB3aXRoIGEgY29ycmVzcG9uZGluZyBoYXNoIG9yIHNldCBvZiBoYXNoZXMuIEFkZGl0aW9uYWxseSwgaWYgZW5hYmxlZCwgX2FsbF8gcmVxdWlyZW1lbnRzXG4gICAqIG11c3QgZWl0aGVyIGJlIHBpbm5lZCB0byBleGFjdCB2ZXJzaW9ucyAoZS5nLiwgYD09MS4wLjBgKSwgb3IgYmUgc3BlY2lmaWVkIHZpYSBkaXJlY3QgVVJMLlxuICAgKlxuICAgKiBIYXNoLWNoZWNraW5nIG1vZGUgaW50cm9kdWNlcyBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzOlxuICAgKlxuICAgKiAtIEdpdCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqIC0gRWRpdGFibGUgaW5zdGFsbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICogLSBMb2NhbCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIHVubGVzcyB0aGV5IHBvaW50IHRvIGEgc3BlY2lmaWMgd2hlZWwgKGAud2hsYCkgb3JcbiAgICogc291cmNlIGFyY2hpdmUgKGAuemlwYCwgYC50YXIuZ3pgKSwgYXMgb3Bwb3NlZCB0byBhIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3JlcXVpcmUtaGFzaGVzXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSGFzaGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcGF0aWJsZSB2ZXJzaW9ucyBmb3IgYSBnaXZlblxuICAgKiBwYWNrYWdlIHJlcXVpcmVtZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIHVzZSB0aGUgbGF0ZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UgKGBoaWdoZXN0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNyZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvbHV0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgUHl0aG9uIGVudmlyb25tZW50LCB0byBkZXRlY3QgcGFja2FnZXMgd2l0aCBtaXNzaW5nIGRlcGVuZGVuY2llcyBhbmQgb3RoZXJcbiAgICogaXNzdWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjc3RyaWN0XG4gICAqL1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHBhY2thZ2VzIGludG8gdGhlIHN5c3RlbSBQeXRob24gZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGluc3RhbGxzIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3JcbiAgICogYW55IHBhcmVudCBkaXJlY3RvcnkuIFRoZSBgLS1zeXN0ZW1gIG9wdGlvbiBpbnN0cnVjdHMgdXYgdG8gaW5zdGVhZCB1c2UgdGhlIGZpcnN0IFB5dGhvblxuICAgKiBmb3VuZCBpbiB0aGUgc3lzdGVtIGBQQVRIYC5cbiAgICpcbiAgICogV0FSTklORzogYC0tc3lzdGVtYCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKENJKSBlbnZpcm9ubWVudHMgYW5kXG4gICAqIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiwgYXMgaXQgY2FuIG1vZGlmeSB0aGUgc3lzdGVtIFB5dGhvbiBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNzeXN0ZW1cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluc3RhbGwgcGFja2FnZXMgaW50byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgcmF0aGVyIHRoYW4gaW50byB0aGUgdmlydHVhbCBvciBzeXN0ZW0gUHl0aG9uXG4gICAqIGVudmlyb25tZW50LiBUaGUgcGFja2FnZXMgd2lsbCBiZSBpbnN0YWxsZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiB0aGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYWNrZW5kIHRvIHVzZSB3aGVuIGZldGNoaW5nIHBhY2thZ2VzIGluIHRoZSBQeVRvcmNoIGVjb3N5c3RlbS5cbiAgICpcbiAgICogV2hlbiBzZXQsIHV2IHdpbGwgaWdub3JlIHRoZSBjb25maWd1cmVkIGluZGV4IFVSTHMgZm9yIHBhY2thZ2VzIGluIHRoZSBQeVRvcmNoIGVjb3N5c3RlbSxcbiAgICogYW5kIHdpbGwgaW5zdGVhZCB1c2UgdGhlIGRlZmluZWQgYmFja2VuZC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHdoZW4gc2V0IHRvIGBjcHVgLCB1diB3aWxsIHVzZSB0aGUgQ1BVLW9ubHkgUHlUb3JjaCBpbmRleDsgd2hlbiBzZXQgdG8gYGN1MTI2YCxcbiAgICogdXYgd2lsbCB1c2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuNi5cbiAgICpcbiAgICogVGhlIGBhdXRvYCBtb2RlIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgdGhlIGFwcHJvcHJpYXRlIFB5VG9yY2ggaW5kZXggYmFzZWQgb24gdGhlIGN1cnJlbnRseVxuICAgKiBpbnN0YWxsZWQgQ1VEQSBkcml2ZXJzLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbiBwcmV2aWV3IGFuZCBtYXkgY2hhbmdlIGluIGFueSBmdXR1cmUgcmVsZWFzZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3RvcmNoLWJhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IHRvcmNoQmFja2VuZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGVyZm9ybSBhIHVuaXZlcnNhbCByZXNvbHV0aW9uLCBhdHRlbXB0aW5nIHRvIGdlbmVyYXRlIGEgc2luZ2xlIGByZXF1aXJlbWVudHMudHh0YCBvdXRwdXRcbiAgICogZmlsZSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgb3BlcmF0aW5nIHN5c3RlbXMsIGFyY2hpdGVjdHVyZXMsIGFuZCBQeXRob25cbiAgICogaW1wbGVtZW50YXRpb25zLlxuICAgKlxuICAgKiBJbiB1bml2ZXJzYWwgbW9kZSwgdGhlIGN1cnJlbnQgUHl0aG9uIHZlcnNpb24gKG9yIHVzZXItcHJvdmlkZWQgYC0tcHl0aG9uLXZlcnNpb25gKSB3aWxsIGJlXG4gICAqIHRyZWF0ZWQgYXMgYSBsb3dlciBib3VuZC4gRm9yIGV4YW1wbGUsIGAtLXVuaXZlcnNhbCAtLXB5dGhvbi12ZXJzaW9uIDMuN2Agd291bGQgcHJvZHVjZSBhXG4gICAqIHVuaXZlcnNhbCByZXNvbHV0aW9uIGZvciBQeXRob24gMy43IGFuZCBsYXRlci5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3VuaXZlcnNhbFxuICAgKi9cbiAgcmVhZG9ubHkgdW5pdmVyc2FsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcGFja2FnZSB1cGdyYWRlcywgaWdub3JpbmcgcGlubmVkIHZlcnNpb25zIGluIGFueSBleGlzdGluZyBvdXRwdXQgZmlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3VwZ3JhZGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyB1cGdyYWRlcyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLCBpZ25vcmluZyBwaW5uZWQgdmVyc2lvbnMgaW4gYW55IGV4aXN0aW5nIG91dHB1dFxuICAgKiBmaWxlLlxuICAgKlxuICAgKiBBY2NlcHRzIGJvdGggc3RhbmRhbG9uZSBwYWNrYWdlIG5hbWVzIChgcnVmZmApIGFuZCB2ZXJzaW9uIHNwZWNpZmllcnMgKGBydWZmPDAuNS4wYCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyN1cGdyYWRlLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGVQYWNrYWdlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFueSBoYXNoZXMgcHJvdmlkZWQgaW4gdGhlIHJlcXVpcmVtZW50cyBmaWxlLlxuICAgKlxuICAgKiBVbmxpa2UgYC0tcmVxdWlyZS1oYXNoZXNgLCBgLS12ZXJpZnktaGFzaGVzYCBkb2VzIG5vdCByZXF1aXJlIHRoYXQgYWxsIHJlcXVpcmVtZW50cyBoYXZlXG4gICAqIGhhc2hlczsgaW5zdGVhZCwgaXQgd2lsbCBsaW1pdCBpdHNlbGYgdG8gdmVyaWZ5aW5nIHRoZSBoYXNoZXMgb2YgdGhvc2UgcmVxdWlyZW1lbnRzIHRoYXQgZG9cbiAgICogaW5jbHVkZSB0aGVtLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdmVyaWZ5LWhhc2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5SGFzaGVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUGlwT3B0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1BpcE9wdGlvbnMob2JqOiBQaXBPcHRpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsLWV4dHJhcyc6IG9iai5hbGxFeHRyYXMsXG4gICAgJ2FsbG93LWVtcHR5LXJlcXVpcmVtZW50cyc6IG9iai5hbGxvd0VtcHR5UmVxdWlyZW1lbnRzLFxuICAgICdhbm5vdGF0aW9uLXN0eWxlJzogb2JqLmFubm90YXRpb25TdHlsZSxcbiAgICAnYnJlYWstc3lzdGVtLXBhY2thZ2VzJzogb2JqLmJyZWFrU3lzdGVtUGFja2FnZXMsXG4gICAgJ2NvbXBpbGUtYnl0ZWNvZGUnOiBvYmouY29tcGlsZUJ5dGVjb2RlLFxuICAgICdjb25maWctc2V0dGluZ3MnOiAoKG9iai5jb25maWdTZXR0aW5ncykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNvbmZpZ1NldHRpbmdzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnY29uZmlnLXNldHRpbmdzLXBhY2thZ2UnOiAoKG9iai5jb25maWdTZXR0aW5nc1BhY2thZ2UpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5jb25maWdTZXR0aW5nc1BhY2thZ2UpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiAoKGlbMV0pID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKGlbMV0pLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpIH0pLCB7fSkpLFxuICAgICdjdXN0b20tY29tcGlsZS1jb21tYW5kJzogb2JqLmN1c3RvbUNvbXBpbGVDb21tYW5kLFxuICAgICdkZXBlbmRlbmN5LW1ldGFkYXRhJzogb2JqLmRlcGVuZGVuY3lNZXRhZGF0YT8ubWFwKHkgPT4gdG9Kc29uX1N0YXRpY01ldGFkYXRhKHkpKSxcbiAgICAnZW1pdC1idWlsZC1vcHRpb25zJzogb2JqLmVtaXRCdWlsZE9wdGlvbnMsXG4gICAgJ2VtaXQtZmluZC1saW5rcyc6IG9iai5lbWl0RmluZExpbmtzLFxuICAgICdlbWl0LWluZGV4LWFubm90YXRpb24nOiBvYmouZW1pdEluZGV4QW5ub3RhdGlvbixcbiAgICAnZW1pdC1pbmRleC11cmwnOiBvYmouZW1pdEluZGV4VXJsLFxuICAgICdlbWl0LW1hcmtlci1leHByZXNzaW9uJzogb2JqLmVtaXRNYXJrZXJFeHByZXNzaW9uLFxuICAgICdleGNsdWRlLW5ld2VyJzogb2JqLmV4Y2x1ZGVOZXdlcixcbiAgICAnZXhjbHVkZS1uZXdlci1wYWNrYWdlJzogKChvYmouZXhjbHVkZU5ld2VyUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4Y2x1ZGVOZXdlclBhY2thZ2UpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdleHRyYSc6IG9iai5leHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ2V4dHJhLWJ1aWxkLWRlcGVuZGVuY2llcyc6ICgob2JqLmV4dHJhQnVpbGREZXBlbmRlbmNpZXMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leHRyYUJ1aWxkRGVwZW5kZW5jaWVzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXT8ubWFwKHkgPT4geSkgfSksIHt9KSksXG4gICAgJ2V4dHJhLWJ1aWxkLXZhcmlhYmxlcyc6ICgob2JqLmV4dHJhQnVpbGRWYXJpYWJsZXMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5leHRyYUJ1aWxkVmFyaWFibGVzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogKChpWzFdKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhpWzFdKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSB9KSwge30pKSxcbiAgICAnZXh0cmEtaW5kZXgtdXJsJzogb2JqLmV4dHJhSW5kZXhVcmw/Lm1hcCh5ID0+IHkpLFxuICAgICdmaW5kLWxpbmtzJzogb2JqLmZpbmRMaW5rcz8ubWFwKHkgPT4geSksXG4gICAgJ2Zvcmstc3RyYXRlZ3knOiBvYmouZm9ya1N0cmF0ZWd5LFxuICAgICdnZW5lcmF0ZS1oYXNoZXMnOiBvYmouZ2VuZXJhdGVIYXNoZXMsXG4gICAgJ2dyb3VwJzogb2JqLmdyb3VwPy5tYXAoeSA9PiB0b0pzb25fUGlwR3JvdXBOYW1lKHkpKSxcbiAgICAnaW5kZXgtc3RyYXRlZ3knOiBvYmouaW5kZXhTdHJhdGVneSxcbiAgICAnaW5kZXgtdXJsJzogb2JqLmluZGV4VXJsLFxuICAgICdrZXlyaW5nLXByb3ZpZGVyJzogb2JqLmtleXJpbmdQcm92aWRlcixcbiAgICAnbGluay1tb2RlJzogb2JqLmxpbmtNb2RlLFxuICAgICduby1hbm5vdGF0ZSc6IG9iai5ub0Fubm90YXRlLFxuICAgICduby1iaW5hcnknOiBvYmoubm9CaW5hcnk/Lm1hcCh5ID0+IHkpLFxuICAgICduby1idWlsZCc6IG9iai5ub0J1aWxkLFxuICAgICduby1idWlsZC1pc29sYXRpb24nOiBvYmoubm9CdWlsZElzb2xhdGlvbixcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uLXBhY2thZ2UnOiBvYmoubm9CdWlsZElzb2xhdGlvblBhY2thZ2U/Lm1hcCh5ID0+IHkpLFxuICAgICduby1kZXBzJzogb2JqLm5vRGVwcyxcbiAgICAnbm8tZW1pdC1wYWNrYWdlJzogb2JqLm5vRW1pdFBhY2thZ2U/Lm1hcCh5ID0+IHkpLFxuICAgICduby1leHRyYSc6IG9iai5ub0V4dHJhPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8taGVhZGVyJzogb2JqLm5vSGVhZGVyLFxuICAgICduby1pbmRleCc6IG9iai5ub0luZGV4LFxuICAgICduby1zb3VyY2VzJzogb2JqLm5vU291cmNlcyxcbiAgICAnbm8tc3RyaXAtZXh0cmFzJzogb2JqLm5vU3RyaXBFeHRyYXMsXG4gICAgJ25vLXN0cmlwLW1hcmtlcnMnOiBvYmoubm9TdHJpcE1hcmtlcnMsXG4gICAgJ29ubHktYmluYXJ5Jzogb2JqLm9ubHlCaW5hcnk/Lm1hcCh5ID0+IHkpLFxuICAgICdvdXRwdXQtZmlsZSc6IG9iai5vdXRwdXRGaWxlLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICdwcmVyZWxlYXNlJzogb2JqLnByZXJlbGVhc2UsXG4gICAgJ3B5dGhvbic6IG9iai5weXRob24sXG4gICAgJ3B5dGhvbi1wbGF0Zm9ybSc6IG9iai5weXRob25QbGF0Zm9ybSxcbiAgICAncHl0aG9uLXZlcnNpb24nOiBvYmoucHl0aG9uVmVyc2lvbixcbiAgICAncmVpbnN0YWxsJzogb2JqLnJlaW5zdGFsbCxcbiAgICAncmVpbnN0YWxsLXBhY2thZ2UnOiBvYmoucmVpbnN0YWxsUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmUtaGFzaGVzJzogb2JqLnJlcXVpcmVIYXNoZXMsXG4gICAgJ3Jlc29sdXRpb24nOiBvYmoucmVzb2x1dGlvbixcbiAgICAnc3RyaWN0Jzogb2JqLnN0cmljdCxcbiAgICAnc3lzdGVtJzogb2JqLnN5c3RlbSxcbiAgICAndGFyZ2V0Jzogb2JqLnRhcmdldCxcbiAgICAndG9yY2gtYmFja2VuZCc6IG9iai50b3JjaEJhY2tlbmQsXG4gICAgJ3VuaXZlcnNhbCc6IG9iai51bml2ZXJzYWwsXG4gICAgJ3VwZ3JhZGUnOiBvYmoudXBncmFkZSxcbiAgICAndXBncmFkZS1wYWNrYWdlJzogb2JqLnVwZ3JhZGVQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAndmVyaWZ5LWhhc2hlcyc6IG9iai52ZXJpZnlIYXNoZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFRydXN0ZWRQdWJsaXNoaW5nXG4gKi9cbmV4cG9ydCBlbnVtIFRydXN0ZWRQdWJsaXNoaW5nIHtcbiAgLyoqIGFsd2F5cyAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuICAvKiogbmV2ZXIgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBUb29sVXZXb3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sVXZXb3Jrc3BhY2Uge1xuICAvKipcbiAgICogUGFja2FnZXMgdG8gZXhjbHVkZSBhcyB3b3Jrc3BhY2UgbWVtYmVycy4gSWYgYSBwYWNrYWdlIG1hdGNoZXMgYm90aCBgbWVtYmVyc2AgYW5kXG4gICAqIGBleGNsdWRlYCwgaXQgd2lsbCBiZSBleGNsdWRlZC5cbiAgICpcbiAgICogU3VwcG9ydHMgYm90aCBnbG9icyBhbmQgZXhwbGljaXQgcGF0aHMuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBnbG9iIHN5bnRheCwgcmVmZXIgdG8gdGhlIFtgZ2xvYmAgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvbGF0ZXN0L2dsb2Ivc3RydWN0LlBhdHRlcm4uaHRtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVG9vbFV2V29ya3NwYWNlI2V4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGFja2FnZXMgdG8gaW5jbHVkZSBhcyB3b3Jrc3BhY2UgbWVtYmVycy5cbiAgICpcbiAgICogU3VwcG9ydHMgYm90aCBnbG9icyBhbmQgZXhwbGljaXQgcGF0aHMuXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBnbG9iIHN5bnRheCwgcmVmZXIgdG8gdGhlIFtgZ2xvYmAgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnJzL2dsb2IvbGF0ZXN0L2dsb2Ivc3RydWN0LlBhdHRlcm4uaHRtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVG9vbFV2V29ya3NwYWNlI21lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IG1lbWJlcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVG9vbFV2V29ya3NwYWNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVG9vbFV2V29ya3NwYWNlKG9iajogVG9vbFV2V29ya3NwYWNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZXhjbHVkZSc6IG9iai5leGNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnbWVtYmVycyc6IG9iai5tZW1iZXJzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIERhdGEgaW5jbHVkZXMgZm9yIHdoZWVscy5cbiAqXG4gKiBTZWUgYEJ1aWxkQmFja2VuZFNldHRpbmdzOjpkYXRhYC5cbiAqXG4gKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2hlZWxEYXRhSW5jbHVkZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNkYXRhXG4gICAqL1xuICByZWFkb25seSBkYXRhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzI2hlYWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgV2hlZWxEYXRhSW5jbHVkZXMjcGxhdGxpYlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGxpYj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNwdXJlbGliXG4gICAqL1xuICByZWFkb25seSBwdXJlbGliPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzI3NjcmlwdHNcbiAgICovXG4gIHJlYWRvbmx5IHNjcmlwdHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1doZWVsRGF0YUluY2x1ZGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fV2hlZWxEYXRhSW5jbHVkZXMob2JqOiBXaGVlbERhdGFJbmNsdWRlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2RhdGEnOiBvYmouZGF0YSxcbiAgICAnaGVhZGVycyc6IG9iai5oZWFkZXJzLFxuICAgICdwbGF0bGliJzogb2JqLnBsYXRsaWIsXG4gICAgJ3B1cmVsaWInOiBvYmoucHVyZWxpYixcbiAgICAnc2NyaXB0cyc6IG9iai5zY3JpcHRzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ2FjaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciBhbiBpbmRleC5cbiAqXG4gKiBAc2NoZW1hIEluZGV4Q2FjaGVDb250cm9sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDYWNoZUNvbnRyb2wge1xuICAvKipcbiAgICogQ2FjaGUgY29udHJvbCBoZWFkZXIgZm9yIFNpbXBsZSBBUEkgcmVxdWVzdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXhDYWNoZUNvbnRyb2wjYXBpXG4gICAqL1xuICByZWFkb25seSBhcGk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENhY2hlIGNvbnRyb2wgaGVhZGVyIGZvciBmaWxlIGRvd25sb2Fkcy5cbiAgICpcbiAgICogQHNjaGVtYSBJbmRleENhY2hlQ29udHJvbCNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0luZGV4Q2FjaGVDb250cm9sJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSW5kZXhDYWNoZUNvbnRyb2wob2JqOiBJbmRleENhY2hlQ29udHJvbCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FwaSc6IG9iai5hcGksXG4gICAgJ2ZpbGVzJzogb2JqLmZpbGVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIHBpcC1jb21wYXRpYmxlIHZhcmlhbnQgb2YgYSBbYEdyb3VwTmFtZWBdLlxuICpcbiAqIEVpdGhlciA8Z3JvdXBuYW1lPiBvciA8cGF0aD46PGdyb3VwbmFtZT4uXG4gKiBJZiA8cGF0aD4gaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byBcInB5cHJvamVjdC50b21sXCIuXG4gKlxuICogQHNjaGVtYSBQaXBHcm91cE5hbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBHcm91cE5hbWUge1xuICAvKipcbiAgICogQHNjaGVtYSBQaXBHcm91cE5hbWUjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBpcEdyb3VwTmFtZSNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQaXBHcm91cE5hbWUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QaXBHcm91cE5hbWUob2JqOiBQaXBHcm91cE5hbWUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3BhdGgnOiBvYmoucGF0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuIl19
|