projen 0.101.8 → 0.101.10
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 +1077 -310
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +3 -3
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/cli/cmds/new.js +1 -8
- package/lib/component.d.ts +21 -1
- package/lib/component.js +27 -3
- 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/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.d.ts +2 -1
- package/lib/java/projenrc.js +6 -9
- package/lib/javascript/biome/biome.d.ts +5 -1
- package/lib/javascript/biome/biome.js +8 -2
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.d.ts +5 -1
- package/lib/javascript/eslint.js +8 -2
- 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/pnpm-workspace-config.js +2 -2
- package/lib/javascript/pnpm-workspace.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.d.ts +2 -1
- package/lib/javascript/projenrc.js +6 -8
- package/lib/javascript/render-options.d.ts +15 -1
- package/lib/javascript/render-options.js +7 -3
- 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/logging.js +3 -2
- 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.d.ts +19 -5
- package/lib/project.js +34 -11
- package/lib/projects.js +7 -5
- package/lib/projenrc-json.d.ts +2 -1
- package/lib/projenrc-json.js +6 -8
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.d.ts +2 -1
- package/lib/python/projenrc.js +6 -9
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pyproject-toml.d.ts +66 -9
- package/lib/python/pyproject-toml.js +7 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv-config.d.ts +301 -128
- package/lib/python/uv-config.js +165 -106
- package/lib/python/uv.js +1 -1
- 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/run-task.cjs +245 -49
- package/lib/sample-file.js +2 -2
- package/lib/script-runner.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-shell.js +1 -1
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.d.ts +2 -1
- package/lib/typescript/projenrc-ts.js +6 -8
- package/lib/typescript/projenrc.d.ts +3 -1
- package/lib/typescript/projenrc.js +7 -9
- package/lib/typescript/typescript-runner.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/util/exec.d.ts +7 -0
- package/lib/util/exec.js +36 -13
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ const pyproject_toml_1 = require("./pyproject-toml");
|
|
|
10
10
|
* @see https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
|
|
11
11
|
*/
|
|
12
12
|
class PyprojectTomlFile extends toml_1.TomlFile {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PyprojectTomlFile", version: "0.101.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PyprojectTomlFile", version: "0.101.10" };
|
|
14
14
|
constructor(scope, config) {
|
|
15
15
|
super(scope, "pyproject.toml", {
|
|
16
16
|
omitEmpty: false,
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export interface PyprojectToml {
|
|
5
5
|
/**
|
|
6
|
-
* There are
|
|
6
|
+
* There are three kinds of metadata: _static_, _dynamic_, and _partially dynamic_.
|
|
7
7
|
* - Static metadata is listed in the `[project]` table directly and cannot be specified or changed by a tool.
|
|
8
8
|
* - Dynamic metadata key names are listed inside the `dynamic` key and represents metadata that a tool will later provide.
|
|
9
|
+
* - Partially dynamic metadata is specified in the `[project]` table as a list or table, and also listed in `dynamic`, allowing the build backend to add entries but not modify or remove existing ones.
|
|
9
10
|
*
|
|
10
11
|
* @schema PyprojectToml#project
|
|
11
12
|
*/
|
|
@@ -33,9 +34,10 @@ export interface PyprojectToml {
|
|
|
33
34
|
*/
|
|
34
35
|
export declare function toJson_PyprojectToml(obj: PyprojectToml | undefined): Record<string, any> | undefined;
|
|
35
36
|
/**
|
|
36
|
-
* There are
|
|
37
|
+
* There are three kinds of metadata: _static_, _dynamic_, and _partially dynamic_.
|
|
37
38
|
* - Static metadata is listed in the `[project]` table directly and cannot be specified or changed by a tool.
|
|
38
39
|
* - Dynamic metadata key names are listed inside the `dynamic` key and represents metadata that a tool will later provide.
|
|
40
|
+
* - Partially dynamic metadata is specified in the `[project]` table as a list or table, and also listed in `dynamic`, allowing the build backend to add entries but not modify or remove existing ones.
|
|
39
41
|
*
|
|
40
42
|
* @schema PyprojectTomlProject
|
|
41
43
|
*/
|
|
@@ -73,11 +75,9 @@ export interface PyprojectTomlProject {
|
|
|
73
75
|
*/
|
|
74
76
|
readonly requiresPython?: string;
|
|
75
77
|
/**
|
|
76
|
-
*
|
|
77
|
-
* - `file` key specifying a relative path to a license file, or
|
|
78
|
-
* - `text` key containing full license content
|
|
79
|
-
*
|
|
80
|
-
* Newer tool may accept a single [SPDX license expression](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/) string instead of a table.
|
|
78
|
+
* A string containing a valid [SPDX license expression](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/) (recommended), or a table with either:
|
|
79
|
+
* - `file` key specifying a relative path to a license file (deprecated per PEP 639), or
|
|
80
|
+
* - `text` key containing full license content (deprecated per PEP 639)
|
|
81
81
|
*
|
|
82
82
|
* @schema PyprojectTomlProject#license
|
|
83
83
|
*/
|
|
@@ -167,7 +167,7 @@ export interface PyprojectTomlProject {
|
|
|
167
167
|
*/
|
|
168
168
|
readonly importNamespaces?: string[];
|
|
169
169
|
/**
|
|
170
|
-
* Specifies which keys are intentionally unspecified under `[project]` table so build backend can/will provide such metadata dynamically. Each key must be listed only once. It is an error to both list a key in `dynamic` and use the key directly in `[project]
|
|
170
|
+
* Specifies which keys are intentionally unspecified under `[project]` table so build backend can/will provide such metadata dynamically. Each key must be listed only once. It is an error to both list a key in `dynamic` and use the key directly in `[project]` unless the key is a list or table with arbitrary entries (PEP 808), in which case the build backend may extend it.
|
|
171
171
|
* One of the most common usage is `version`, which allows build backend to retrieve project version from source code or version control system instead of hardcoding it in `pyproject.toml`.
|
|
172
172
|
*
|
|
173
173
|
* @schema PyprojectTomlProject#dynamic
|
|
@@ -243,6 +243,39 @@ export interface PyprojectTomlTool {
|
|
|
243
243
|
* @schema PyprojectTomlTool#cibuildwheel
|
|
244
244
|
*/
|
|
245
245
|
readonly cibuildwheel?: any;
|
|
246
|
+
/**
|
|
247
|
+
* FastAPI web framework configuration.
|
|
248
|
+
*
|
|
249
|
+
* @schema PyprojectTomlTool#fastapi
|
|
250
|
+
*/
|
|
251
|
+
readonly fastapi?: any;
|
|
252
|
+
/**
|
|
253
|
+
* Scheduled jobs in Python's `pyproject.toml`.
|
|
254
|
+
*
|
|
255
|
+
* This is a specification for declaring recurring scheduled jobs in Python projects, in `pyproject.toml`.
|
|
256
|
+
*
|
|
257
|
+
* It defines how jobs are declared and how providers would run them.
|
|
258
|
+
*
|
|
259
|
+
* It does not provide a specific implementation for running scheduled jobs, because that is provider specific.
|
|
260
|
+
*
|
|
261
|
+
* For example, a file at `app/jobs.py` could define:
|
|
262
|
+
*
|
|
263
|
+
* ```python
|
|
264
|
+
* def clean_files():
|
|
265
|
+
* print("Running cleanup...")
|
|
266
|
+
* ```
|
|
267
|
+
*
|
|
268
|
+
* You could define a scheduled job to run that function once per day with:
|
|
269
|
+
*
|
|
270
|
+
* ```toml
|
|
271
|
+
* [tool.scheduled.clean-files]
|
|
272
|
+
* every = "day"
|
|
273
|
+
* entrypoint = "app.jobs:clean_files"
|
|
274
|
+
* ```
|
|
275
|
+
*
|
|
276
|
+
* @schema PyprojectTomlTool#scheduled
|
|
277
|
+
*/
|
|
278
|
+
readonly scheduled?: any;
|
|
246
279
|
/**
|
|
247
280
|
* Optional static typing for Python.
|
|
248
281
|
*
|
|
@@ -292,7 +325,13 @@ export interface PyprojectTomlTool {
|
|
|
292
325
|
*/
|
|
293
326
|
readonly setuptoolsScm?: any;
|
|
294
327
|
/**
|
|
295
|
-
* A
|
|
328
|
+
* A package manager and task runner.
|
|
329
|
+
*
|
|
330
|
+
* @schema PyprojectTomlTool#pixi
|
|
331
|
+
*/
|
|
332
|
+
readonly pixi?: any;
|
|
333
|
+
/**
|
|
334
|
+
* A task runner that works well with `pyproject.toml` files.
|
|
296
335
|
*
|
|
297
336
|
* @schema PyprojectTomlTool#poe
|
|
298
337
|
*/
|
|
@@ -351,6 +390,24 @@ export interface PyprojectTomlTool {
|
|
|
351
390
|
* @schema PyprojectTomlTool#uv
|
|
352
391
|
*/
|
|
353
392
|
readonly uv?: any;
|
|
393
|
+
/**
|
|
394
|
+
* A CLI tool to check and validate Python docstring formatting and completeness
|
|
395
|
+
*
|
|
396
|
+
* @schema PyprojectTomlTool#dfc
|
|
397
|
+
*/
|
|
398
|
+
readonly dfc?: any;
|
|
399
|
+
/**
|
|
400
|
+
* A CLI tool to check and validate Python docstring formatting and completeness
|
|
401
|
+
*
|
|
402
|
+
* @schema PyprojectTomlTool#docstring-format-checker
|
|
403
|
+
*/
|
|
404
|
+
readonly docstringFormatChecker?: any;
|
|
405
|
+
/**
|
|
406
|
+
* A CLI tool to run code files instantly without typing complex commands in terminal.
|
|
407
|
+
*
|
|
408
|
+
* @schema PyprojectTomlTool#quikrun
|
|
409
|
+
*/
|
|
410
|
+
readonly quikrun?: any;
|
|
354
411
|
}
|
|
355
412
|
/**
|
|
356
413
|
* Converts an object of type 'PyprojectTomlTool' to JSON representation.
|
|
@@ -103,6 +103,8 @@ function toJson_PyprojectTomlTool(obj) {
|
|
|
103
103
|
const result = {
|
|
104
104
|
'black': obj.black,
|
|
105
105
|
'cibuildwheel': obj.cibuildwheel,
|
|
106
|
+
'fastapi': obj.fastapi,
|
|
107
|
+
'scheduled': obj.scheduled,
|
|
106
108
|
'mypy': obj.mypy,
|
|
107
109
|
'ruff': obj.ruff,
|
|
108
110
|
'ty': obj.ty,
|
|
@@ -111,6 +113,7 @@ function toJson_PyprojectTomlTool(obj) {
|
|
|
111
113
|
'scikit-build': obj.scikitBuild,
|
|
112
114
|
'setuptools': obj.setuptools,
|
|
113
115
|
'setuptools_scm': obj.setuptoolsScm,
|
|
116
|
+
'pixi': obj.pixi,
|
|
114
117
|
'poe': obj.poe,
|
|
115
118
|
'poetry': obj.poetry,
|
|
116
119
|
'pdm': obj.pdm,
|
|
@@ -121,6 +124,9 @@ function toJson_PyprojectTomlTool(obj) {
|
|
|
121
124
|
'tombi': obj.tombi,
|
|
122
125
|
'tox': obj.tox,
|
|
123
126
|
'uv': obj.uv,
|
|
127
|
+
'dfc': obj.dfc,
|
|
128
|
+
'docstring-format-checker': obj.docstringFormatChecker,
|
|
129
|
+
'quikrun': obj.quikrun,
|
|
124
130
|
};
|
|
125
131
|
// filter undefined values
|
|
126
132
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -184,4 +190,4 @@ var PyprojectTomlProjectDynamic;
|
|
|
184
190
|
/** import-namespaces */
|
|
185
191
|
PyprojectTomlProjectDynamic["IMPORT_HYPHEN_NAMESPACES"] = "import-namespaces";
|
|
186
192
|
})(PyprojectTomlProjectDynamic || (exports.PyprojectTomlProjectDynamic = PyprojectTomlProjectDynamic = {}));
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHlwcm9qZWN0LXRvbWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3B5cHJvamVjdC10b21sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVDQSxvREFVQztBQW9LRCxrRUEwQkM7QUFvQkQsb0ZBT0M7QUFvQ0QsZ0RBU0M7QUEySkQsNERBMEJDO0FBdUJELG9EQVFDO0FBemVEOzs7R0FHRztBQUNILHFGQUFxRjtBQUNyRixTQUFnQixvQkFBb0IsQ0FBQyxHQUE4QjtJQUNqRSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE9BQU8sU0FBUyxDQUFDO0lBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBRztRQUNiLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ25ELG1CQUFtQixFQUFFLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRSxjQUFjLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNuRCxNQUFNLEVBQUUsd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztLQUMzQyxDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUErSkQ7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLDJCQUEyQixDQUFDLEdBQXFDO0lBQy9FLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2hCLFNBQVMsRUFBRSxHQUFHLENBQUMsT0FBTztRQUN0QixhQUFhLEVBQUUsR0FBRyxDQUFDLFdBQVc7UUFDOUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ3BCLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxjQUFjO1FBQ3JDLFNBQVMsRUFBRSxHQUFHLENBQUMsT0FBTztRQUN0QixlQUFlLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsYUFBYSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLGFBQWEsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckosU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlKLGFBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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c0JBQXNCO0lBQ3RCLHlFQUEwQyxDQUFBO0lBQzFDLGNBQWM7SUFDZCxrREFBbUIsQ0FBQTtJQUNuQixvQkFBb0I7SUFDcEIscUVBQXNDLENBQUE7SUFDdEMsY0FBYztJQUNkLGtEQUFtQixDQUFBO0lBQ25CLGtCQUFrQjtJQUNsQiwwREFBMkIsQ0FBQTtJQUMzQixlQUFlO0lBQ2Ysb0RBQXFCLENBQUE7SUFDckIsa0JBQWtCO0lBQ2xCLDBEQUEyQixDQUFBO0lBQzNCLFdBQVc7SUFDWCw0Q0FBYSxDQUFBO0lBQ2IsY0FBYztJQUNkLGtEQUFtQixDQUFBO0lBQ25CLGtCQUFrQjtJQUNsQixpRUFBa0MsQ0FBQTtJQUNsQyxtQkFBbUI7SUFDbkIsbUVBQW9DLENBQUE7SUFDcEMsbUJBQW1CO0lBQ25CLDREQUE2QixDQUFBO0lBQzdCLDRCQUE0QjtJQUM1QixxRkFBc0QsQ0FBQTtJQUN0RCxtQkFBbUI7SUFDbkIsbUVBQW9DLENBQUE7SUFDcEMsd0JBQXdCO0lBQ3hCLDZFQUE4QyxDQUFBO0FBQ2hELENBQUMsRUFyQ1csMkJBQTJCLDJDQUEzQiwyQkFBMkIsUUFxQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibm9kZSAuL3Byb2plbi5qc1wiLlxuLyoqXG4gKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQeXByb2plY3RUb21sIHtcbiAgLyoqXG4gICAqIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgbWV0YWRhdGE6IF9zdGF0aWNfIGFuZCBfZHluYW1pY18uXG4gICAqIC0gU3RhdGljIG1ldGFkYXRhIGlzIGxpc3RlZCBpbiB0aGUgYFtwcm9qZWN0XWAgdGFibGUgZGlyZWN0bHkgYW5kIGNhbm5vdCBiZSBzcGVjaWZpZWQgb3IgY2hhbmdlZCBieSBhIHRvb2wuXG4gICAqIC0gRHluYW1pYyBtZXRhZGF0YSBrZXkgbmFtZXMgYXJlIGxpc3RlZCBpbnNpZGUgdGhlIGBkeW5hbWljYCBrZXkgYW5kIHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBhIHRvb2wgd2lsbCBsYXRlciBwcm92aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWwjcHJvamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IFB5cHJvamVjdFRvbWxQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBOYW1lZCBncm91cHMgb2YgZGVwZW5kZW5jaWVzLCBzaW1pbGFyIHRvIGByZXF1aXJlbWVudHMudHh0YCBmaWxlcywgd2hpY2ggbGF1bmNoZXJzLCBJREVzLCBhbmQgb3RoZXIgdG9vbHMgY2FuIGZpbmQgYW5kIGlkZW50aWZ5IGJ5IG5hbWUuIEVhY2ggaXRlbSBpbiBgW2RlcGVuZGVuY3ktZ3JvdXBzXWAgaXMgZGVmaW5lZCBhcyBtYXBwaW5nIG9mIGdyb3VwIG5hbWUgdG8gbGlzdCBvZiBbZGVwZW5kZW5jeSBzcGVjaWZpZXJzXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9kZXBlbmRlbmN5LXNwZWNpZmllcnMvKS5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sI2RlcGVuZGVuY3ktZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5R3JvdXBzPzogUHlwcm9qZWN0VG9tbERlcGVuZGVuY3lHcm91cHM7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbCNidWlsZC1zeXN0ZW1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkU3lzdGVtPzogQnVpbGRTeXN0ZW07XG5cbiAgLyoqXG4gICAqIEV2ZXJ5IHRvb2wgdGhhdCBpcyB1c2VkIGJ5IHRoZSBwcm9qZWN0IGNhbiBoYXZlIHVzZXJzIHNwZWNpZnkgY29uZmlndXJhdGlvbiBkYXRhIGFzIGxvbmcgYXMgdGhleSB1c2UgYSBzdWItdGFibGUgd2l0aGluIGBbdG9vbF1gLiBHZW5lcmFsbHkgYSBwcm9qZWN0IGNhbiB1c2UgdGhlIHN1YnRhYmxlIGB0b29sLiROQU1FYCBpZiwgYW5kIG9ubHkgaWYsIHRoZXkgb3duIHRoZSBlbnRyeSBmb3IgYCROQU1FYCBpbiB0aGUgQ2hlZXNlc2hvcC9QeVBJLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWwjdG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbD86IFB5cHJvamVjdFRvbWxUb29sO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQeXByb2plY3RUb21sJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUHlwcm9qZWN0VG9tbChvYmo6IFB5cHJvamVjdFRvbWwgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdwcm9qZWN0JzogdG9Kc29uX1B5cHJvamVjdFRvbWxQcm9qZWN0KG9iai5wcm9qZWN0KSxcbiAgICAnZGVwZW5kZW5jeS1ncm91cHMnOiB0b0pzb25fUHlwcm9qZWN0VG9tbERlcGVuZGVuY3lHcm91cHMob2JqLmRlcGVuZGVuY3lHcm91cHMpLFxuICAgICdidWlsZC1zeXN0ZW0nOiB0b0pzb25fQnVpbGRTeXN0ZW0ob2JqLmJ1aWxkU3lzdGVtKSxcbiAgICAndG9vbCc6IHRvSnNvbl9QeXByb2plY3RUb21sVG9vbChvYmoudG9vbCksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIG1ldGFkYXRhOiBfc3RhdGljXyBhbmQgX2R5bmFtaWNfLlxuICogLSBTdGF0aWMgbWV0YWRhdGEgaXMgbGlzdGVkIGluIHRoZSBgW3Byb2plY3RdYCB0YWJsZSBkaXJlY3RseSBhbmQgY2Fubm90IGJlIHNwZWNpZmllZCBvciBjaGFuZ2VkIGJ5IGEgdG9vbC5cbiAqIC0gRHluYW1pYyBtZXRhZGF0YSBrZXkgbmFtZXMgYXJlIGxpc3RlZCBpbnNpZGUgdGhlIGBkeW5hbWljYCBrZXkgYW5kIHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBhIHRvb2wgd2lsbCBsYXRlciBwcm92aWRlLlxuICpcbiAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQeXByb2plY3RUb21sUHJvamVjdCB7XG4gIC8qKlxuICAgKiBWYWxpZCBuYW1lIGNvbnNpc3RzIG9ubHkgb2YgQVNDSUkgbGV0dGVycyBhbmQgbnVtYmVycywgcGVyaW9kLCB1bmRlcnNjb3JlIGFuZCBoeXBoZW4uIEl0IG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoIGEgbGV0dGVyIG9yIG51bWJlci5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIHByb2plY3QsIGFzIGRlZmluZWQgaW4gdGhlIFtWZXJzaW9uIHNwZWNpZmllciBzcGVjaWZpY2F0aW9uXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy92ZXJzaW9uLXNwZWNpZmllcnMvKSwgYW5kIHByZWZlcmFibHkgW2FscmVhZHkgbm9ybWFsaXplZF0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvdmVyc2lvbi1zcGVjaWZpZXJzLyNub3JtYWxpemF0aW9uKS5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdW1tYXJ5IGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9qZWN0IGluIG9uZSBsaW5lLiBUb29scyBtYXkgbm90IGFjY2VwdCBtdWx0aXBsZSBsaW5lcy5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIGNhbiBiZSBhIHJlbGF0aXZlIHBhdGggdG8gdGV4dCAvIG1hcmtkb3duIChgLm1kYCBzdWZmaXgpIC8gcmVTdHJ1Y3R1cmVkVGV4dCAoYC5yc3RgIHN1ZmZpeCkgcmVhZG1lIGZpbGUsIG9yIGEgdGFibGUgd2l0aCBlaXRoZXI6XG4gICAqIC0gYGZpbGVgIGtleSBjb250YWluaW5nIHBhdGggb2YgYWZvcmVtZW50aW9uZWQgcmVhZG1lIGZpbGUsIG9yXG4gICAqIC0gYHRleHRgIGtleSBjb250YWluaW5nIHRoZSBmdWxsIHJlYWRtZSB0ZXh0IGVtYmVkZGVkIGluc2lkZSBgcHlwcm9qZWN0LnRvbWxgLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I3JlYWRtZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZG1lPzogYW55O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIFB5dGhvbiB2ZXJzaW9uKHMpIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBpcyBjb21wYXRpYmxlIHdpdGguIE11c3QgYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gW1ZlcnNpb24gc3BlY2lmaWVyc10oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvdmVyc2lvbi1zcGVjaWZpZXJzLykuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjcmVxdWlyZXMtcHl0aG9uXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlc1B5dGhvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIG5vdyBpdCBpcyBhIHRhYmxlIHdpdGggZWl0aGVyOlxuICAgKiAtIGBmaWxlYCBrZXkgc3BlY2lmeWluZyBhIHJlbGF0aXZlIHBhdGggdG8gYSBsaWNlbnNlIGZpbGUsIG9yXG4gICAqIC0gYHRleHRgIGtleSBjb250YWluaW5nIGZ1bGwgbGljZW5zZSBjb250ZW50XG4gICAqXG4gICAqIE5ld2VyIHRvb2wgbWF5IGFjY2VwdCBhIHNpbmdsZSBbU1BEWCBsaWNlbnNlIGV4cHJlc3Npb25dKGh0dHBzOi8vc3BkeC5naXRodWIuaW8vc3BkeC1zcGVjL3YyLjIuMi9TUERYLWxpY2Vuc2UtZXhwcmVzc2lvbnMvKSBzdHJpbmcgaW5zdGVhZCBvZiBhIHRhYmxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I2xpY2Vuc2VcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2U/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFJlbGF0aXZlIHBhdGhzIG9yIGdsb2JzIHRvIHBhdGhzIG9mIGxpY2Vuc2UgZmlsZXMuIENhbiBiZSBhbiBlbXB0eSBsaXN0LlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I2xpY2Vuc2UtZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2VGaWxlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQZW9wbGUgb3Igb3JnYW5pemF0aW9ucyBjb25zaWRlcmVkIGFzICdhdXRob3JzJyBvZiB0aGUgcHJvamVjdC4gRWFjaCBhdXRob3IgaXMgYSB0YWJsZSB3aXRoIGBuYW1lYCBrZXksIGBlbWFpbGAga2V5LCBvciBib3RoLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I2F1dGhvcnNcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcnM/OiBQcm9qZWN0QXV0aG9yW107XG5cbiAgLyoqXG4gICAqIFBlb3BsZSBvciBvcmdhbml6YXRpb25zIGNvbnNpZGVyZWQgYXMgJ21haW50YWluZXJzJyBvZiB0aGUgcHJvamVjdC4gRWFjaCBtYWludGFpbmVyIGlzIGEgdGFibGUgd2l0aCBgbmFtZWAga2V5LCBgZW1haWxgIGtleSwgb3IgYm90aC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNtYWludGFpbmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWFpbnRhaW5lcnM/OiBQcm9qZWN0QXV0aG9yW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Yga2V5d29yZHMgb3IgdGFncyB0aGF0IGRlc2NyaWJlIHRoZSBwcm9qZWN0LiBUaGV5IGNvdWxkIGJlIHVzZWQgYnkgc2VhcmNoIGVuZ2luZXMgdG8gY2F0ZWdvcml6ZSB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNrZXl3b3Jkc1xuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBbVHJvdmUgY2xhc3NpZmllcnNdKGh0dHBzOi8vcHlwaS5vcmcvY2xhc3NpZmllcnMvKSB0aGF0IGRlc2NyaWJlIHRoZSBwcm9qZWN0LiBQeVBJIHVzZSB0aGUgY2xhc3NpZmllcnMgdG8gY2F0ZWdvcml6ZSBwcm9qZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNjbGFzc2lmaWVyc1xuICAgKi9cbiAgcmVhZG9ubHkgY2xhc3NpZmllcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGFibGUgY29uc2lzdGluZyBvbmUgb3IgbXVsdGlwbGUgYGxhYmVsOiBVUkxgIHBhaXJzLiBDb21tb24gaW5kZXhlcyBsaWtlIFB5UEkgdXNlcyBbd2VsbC1rbm93biBQcm9qZWN0IFVSTHNdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL3dlbGwta25vd24tcHJvamVjdC11cmxzLyN3ZWxsLWtub3duLWxhYmVscykgd2hlbiBwcmVzZW50aW5nIHByb2plY3QgcGFnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjdXJsc1xuICAgKi9cbiAgcmVhZG9ubHkgdXJscz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRhYmxlIG9mIFtlbnRyeSBwb2ludHNdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL2VudHJ5LXBvaW50cy8pIHRoYXQgYWxsb3dzIHBhY2thZ2UgaW5zdGFsbGVycyB0byBjcmVhdGUgYSBjb21tYW5kLWxpbmUgd3JhcHBlciBmb3IuIEVhY2gga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQgdG8gYmUgY3JlYXRlZCwgYW5kIGVhY2ggdmFsdWUgaXMgdGhlIGZ1bmN0aW9uIG9yIG9iamVjdCB0byBhbGwsIGluIGZvcm0gb2YgZWl0aGVyIGBpbXBvcnRhYmxlLm1vZHVsZWAgb3IgYGltcG9ydGFibGUubW9kdWxlOm9iamVjdC5hdHRyYC4gV2luZG93cyBwbGF0Zm9ybSB0cmVhdHMgYGNvbnNvbGVfc2NyaXB0c2Agc3BlY2lhbGx5IGluIHRoYXQgdGhleSBhcmUgd3JhcHBlZCBpbiBhIGNvbnNvbGUgZXhlY3V0YWJsZSwgc28gdGhleSBhcmUgYXR0YWNoZWQgdG8gYSBjb25zb2xlIGFuZCBjYW4gdXNlIGBzeXMuc3RkaW5gLCBgc3lzLnN0ZG91dGAgYW5kIGBzeXMuc3RkZXJyYCBmb3IgSS9PLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I3NjcmlwdHNcbiAgICovXG4gIHJlYWRvbmx5IHNjcmlwdHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUYWJsZSBvZiBbZW50cnkgcG9pbnRzXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9lbnRyeS1wb2ludHMvKSB0aGF0IGFsbG93cyBwYWNrYWdlIGluc3RhbGxlcnMgdG8gY3JlYXRlIGEgR1VJIHdyYXBwZXIgZm9yLiBFYWNoIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0IHRvIGJlIGNyZWF0ZWQsIGFuZCBlYWNoIHZhbHVlIGlzIHRoZSBmdW5jdGlvbiBvciBvYmplY3QgdG8gYWxsLCBpbiBmb3JtIG9mIGVpdGhlciBgaW1wb3J0YWJsZS5tb2R1bGVgIG9yIGBpbXBvcnRhYmxlLm1vZHVsZTpvYmplY3QuYXR0cmAuIFdpbmRvd3MgcGxhdGZvcm0gdHJlYXRzIGBndWlfc2NyaXB0c2Agc3BlY2lhbGx5IGluIHRoYXQgdGhleSBhcmUgd3JhcHBlZCBpbiBhIEdVSSBleGVjdXRhYmxlLCBzbyB0aGV5IGNhbiBiZSBzdGFydGVkIHdpdGhvdXQgYSBjb25zb2xlLCBidXQgY2Fubm90IHVzZSBzdGFuZGFyZCBzdHJlYW1zIHVubGVzcyBhcHBsaWNhdGlvbiBjb2RlIHJlZGlyZWN0cyB0aGVtLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I2d1aS1zY3JpcHRzXG4gICAqL1xuICByZWFkb25seSBndWlTY3JpcHRzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRXh0cmEgW2VudHJ5IHBvaW50IGdyb3Vwc10oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZW50cnktcG9pbnRzLykgdGhhdCBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gbG9hZCBwbHVnaW5zLiBGb3IgZXhhbXBsZSwgUHlnbWVudHMgKGEgc3ludGF4IGhpZ2hsaWdodGluZyB0b29sKSBjYW4gdXNlIGFkZGl0aW9uYWwgc3R5bGVzIGZyb20gc2VwYXJhdGVseSBpbnN0YWxsZWQgcGFja2FnZXMgdGhyb3VnaCBgW3Byb2plY3QuZW50cnktcG9pbnRzLlwicHlnbWVudHMuc3R5bGVzXCJdYC4gRWFjaCBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGVudHJ5LXBvaW50IGdyb3VwLCBhbmQgZWFjaCB2YWx1ZSBpcyBhIHRhYmxlIG9mIGVudHJ5IHBvaW50cy5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNlbnRyeS1wb2ludHNcbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5UG9pbnRzPzogYW55O1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBbZGVwZW5kZW5jeSBzcGVjaWZpZXJdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL2RlcGVuZGVuY3ktc3BlY2lmaWVycy8pIHN0cmluZ3MsIGVhY2ggcmVwcmVzZW50aW5nIGEgbWFuZGF0b3J5IGRlcGVuZGVudCBwYWNrYWdlIG9mIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I2RlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVhY2ggZW50cnkgaXMgYSBrZXkvdmFsdWUgcGFpciwgd2l0aCB0aGUga2V5IHNwZWNpZnlpbmcgW2V4dHJhIGZlYXR1cmUgbmFtZV0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8jcHJvdmlkZXMtZXh0cmEtbXVsdGlwbGUtdXNlKSAoc3VjaCBhcyBgc29ja3NgIGluIGByZXF1ZXN0c1tzb2Nrc11gKSwgYW5kIHZhbHVlIGlzIGFuIGFycmF5IG9mIFtkZXBlbmRlbmN5IHNwZWNpZmllcl0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZGVwZW5kZW5jeS1zcGVjaWZpZXJzLykgc3RyaW5ncy5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNvcHRpb25hbC1kZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogYW55O1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBzdHJpbmdzIHNwZWNpZnlpbmcgdGhlIGltcG9ydCBuYW1lcyB0aGF0IHRoZSBwcm9qZWN0IGV4Y2x1c2l2ZWx5IHByb3ZpZGVzIHdoZW4gaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I2ltcG9ydC1uYW1lc1xuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0TmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIHRoZSBpbXBvcnQgbmFtZXMgdGhhdCB0aGUgcHJvamVjdCBwcm92aWRlcyB3aGVuIGluc3RhbGxlZCwgYnV0IG5vdCBleGNsdXNpdmVseS5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNpbXBvcnQtbmFtZXNwYWNlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0TmFtZXNwYWNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hpY2gga2V5cyBhcmUgaW50ZW50aW9uYWxseSB1bnNwZWNpZmllZCB1bmRlciBgW3Byb2plY3RdYCB0YWJsZSBzbyBidWlsZCBiYWNrZW5kIGNhbi93aWxsIHByb3ZpZGUgc3VjaCBtZXRhZGF0YSBkeW5hbWljYWxseS4gRWFjaCBrZXkgbXVzdCBiZSBsaXN0ZWQgb25seSBvbmNlLiBJdCBpcyBhbiBlcnJvciB0byBib3RoIGxpc3QgYSBrZXkgaW4gYGR5bmFtaWNgIGFuZCB1c2UgdGhlIGtleSBkaXJlY3RseSBpbiBgW3Byb2plY3RdYC5cbiAgICogT25lIG9mIHRoZSBtb3N0IGNvbW1vbiB1c2FnZSBpcyBgdmVyc2lvbmAsIHdoaWNoIGFsbG93cyBidWlsZCBiYWNrZW5kIHRvIHJldHJpZXZlIHByb2plY3QgdmVyc2lvbiBmcm9tIHNvdXJjZSBjb2RlIG9yIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gaW5zdGVhZCBvZiBoYXJkY29kaW5nIGl0IGluIGBweXByb2plY3QudG9tbGAuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjZHluYW1pY1xuICAgKi9cbiAgcmVhZG9ubHkgZHluYW1pYz86IFB5cHJvamVjdFRvbWxQcm9qZWN0RHluYW1pY1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQeXByb2plY3RUb21sUHJvamVjdCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1B5cHJvamVjdFRvbWxQcm9qZWN0KG9iajogUHlwcm9qZWN0VG9tbFByb2plY3QgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3ZlcnNpb24nOiBvYmoudmVyc2lvbixcbiAgICAnZGVzY3JpcHRpb24nOiBvYmouZGVzY3JpcHRpb24sXG4gICAgJ3JlYWRtZSc6IG9iai5yZWFkbWUsXG4gICAgJ3JlcXVpcmVzLXB5dGhvbic6IG9iai5yZXF1aXJlc1B5dGhvbixcbiAgICAnbGljZW5zZSc6IG9iai5saWNlbnNlLFxuICAgICdsaWNlbnNlLWZpbGVzJzogb2JqLmxpY2Vuc2VGaWxlcz8ubWFwKHkgPT4geSksXG4gICAgJ2F1dGhvcnMnOiBvYmouYXV0aG9ycz8ubWFwKHkgPT4gdG9Kc29uX1Byb2plY3RBdXRob3IoeSkpLFxuICAgICdtYWludGFpbmVycyc6IG9iai5tYWludGFpbmVycz8ubWFwKHkgPT4gdG9Kc29uX1Byb2plY3RBdXRob3IoeSkpLFxuICAgICdrZXl3b3Jkcyc6IG9iai5rZXl3b3Jkcz8ubWFwKHkgPT4geSksXG4gICAgJ2NsYXNzaWZpZXJzJzogb2JqLmNsYXNzaWZpZXJzPy5tYXAoeSA9PiB5KSxcbiAgICAndXJscyc6ICgob2JqLnVybHMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai51cmxzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnc2NyaXB0cyc6ICgob2JqLnNjcmlwdHMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5zY3JpcHRzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnZ3VpLXNjcmlwdHMnOiAoKG9iai5ndWlTY3JpcHRzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZ3VpU2NyaXB0cykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ2VudHJ5LXBvaW50cyc6IG9iai5lbnRyeVBvaW50cyxcbiAgICAnZGVwZW5kZW5jaWVzJzogb2JqLmRlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ29wdGlvbmFsLWRlcGVuZGVuY2llcyc6IG9iai5vcHRpb25hbERlcGVuZGVuY2llcyxcbiAgICAnaW1wb3J0LW5hbWVzJzogb2JqLmltcG9ydE5hbWVzPy5tYXAoeSA9PiB5KSxcbiAgICAnaW1wb3J0LW5hbWVzcGFjZXMnOiBvYmouaW1wb3J0TmFtZXNwYWNlcz8ubWFwKHkgPT4geSksXG4gICAgJ2R5bmFtaWMnOiBvYmouZHluYW1pYz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBOYW1lZCBncm91cHMgb2YgZGVwZW5kZW5jaWVzLCBzaW1pbGFyIHRvIGByZXF1aXJlbWVudHMudHh0YCBmaWxlcywgd2hpY2ggbGF1bmNoZXJzLCBJREVzLCBhbmQgb3RoZXIgdG9vbHMgY2FuIGZpbmQgYW5kIGlkZW50aWZ5IGJ5IG5hbWUuIEVhY2ggaXRlbSBpbiBgW2RlcGVuZGVuY3ktZ3JvdXBzXWAgaXMgZGVmaW5lZCBhcyBtYXBwaW5nIG9mIGdyb3VwIG5hbWUgdG8gbGlzdCBvZiBbZGVwZW5kZW5jeSBzcGVjaWZpZXJzXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9kZXBlbmRlbmN5LXNwZWNpZmllcnMvKS5cbiAqXG4gKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxEZXBlbmRlbmN5R3JvdXBzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHlwcm9qZWN0VG9tbERlcGVuZGVuY3lHcm91cHMge1xuICAvKipcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sRGVwZW5kZW5jeUdyb3VwcyNkZXZcbiAgICovXG4gIHJlYWRvbmx5IGRldj86IGFueVtdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQeXByb2plY3RUb21sRGVwZW5kZW5jeUdyb3VwcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1B5cHJvamVjdFRvbWxEZXBlbmRlbmN5R3JvdXBzKG9iajogUHlwcm9qZWN0VG9tbERlcGVuZGVuY3lHcm91cHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkZXYnOiBvYmouZGV2Py5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIERlY2xhcmVzIGFueSBQeXRob24gbGV2ZWwgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgdG8gcnVuIHRoZSBwcm9qZWN04oCZcyBidWlsZCBzeXN0ZW0gc3VjY2Vzc2Z1bGx5LlxuICpcbiAqIEBzY2hlbWEgQnVpbGRTeXN0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZFN5c3RlbSB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHN0cmluZ3MgZm9sbG93aW5nIHRoZSB2ZXJzaW9uIHNwZWNpZmllciBzcGVjaWZpY2F0aW9uLCByZXByZXNlbnRpbmcgZGVwZW5kZW5jaWVzIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdGhlIGJ1aWxkIHN5c3RlbS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZFN5c3RlbSNyZXF1aXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTdHJpbmcgaXMgZm9ybWF0dGVkIGZvbGxvd2luZyB0aGUgc2FtZSBgbW9kdWxlOm9iamVjdGAgc3ludGF4IGFzIGEgYHNldHVwdG9vbHNgIGVudHJ5IHBvaW50LiBJdOKAmXMgYWxzbyBsZWdhbCB0byBsZWF2ZSBvdXQgdGhlIGA6b2JqZWN0YCBwYXJ0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkU3lzdGVtI2J1aWxkLWJhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQmFja2VuZD86IHN0cmluZztcblxuICAvKipcbiAgICogbGlzdCBvZiBkaXJlY3RvcmllcyB0byBwcmVwZW5kIHRvIGBzeXMucGF0aGAgd2hlbiBsb2FkaW5nIHRoZSBidWlsZCBiYWNrZW5kLCByZWxhdGl2ZSB0byBwcm9qZWN0IHJvb3RcbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZFN5c3RlbSNiYWNrZW5kLXBhdGhcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmRQYXRoPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1aWxkU3lzdGVtJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVpbGRTeXN0ZW0ob2JqOiBCdWlsZFN5c3RlbSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlcXVpcmVzJzogb2JqLnJlcXVpcmVzPy5tYXAoeSA9PiB5KSxcbiAgICAnYnVpbGQtYmFja2VuZCc6IG9iai5idWlsZEJhY2tlbmQsXG4gICAgJ2JhY2tlbmQtcGF0aCc6IG9iai5iYWNrZW5kUGF0aD8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBFdmVyeSB0b29sIHRoYXQgaXMgdXNlZCBieSB0aGUgcHJvamVjdCBjYW4gaGF2ZSB1c2VycyBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZGF0YSBhcyBsb25nIGFzIHRoZXkgdXNlIGEgc3ViLXRhYmxlIHdpdGhpbiBgW3Rvb2xdYC4gR2VuZXJhbGx5IGEgcHJvamVjdCBjYW4gdXNlIHRoZSBzdWJ0YWJsZSBgdG9vbC4kTkFNRWAgaWYsIGFuZCBvbmx5IGlmLCB0aGV5IG93biB0aGUgZW50cnkgZm9yIGAkTkFNRWAgaW4gdGhlIENoZWVzZXNob3AvUHlQSS5cbiAqXG4gKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHlwcm9qZWN0VG9tbFRvb2wge1xuICAvKipcbiAgICogVGhlIHVuY29tcHJvbWlzaW5nIFB5dGhvbiBjb2RlIGZvcm1hdHRlci5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNibGFja1xuICAgKi9cbiAgcmVhZG9ubHkgYmxhY2s/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIFB5dGhvbiB3aGVlbHMgZm9yIGFsbCBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjY2lidWlsZHdoZWVsXG4gICAqL1xuICByZWFkb25seSBjaWJ1aWxkd2hlZWw/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0YXRpYyB0eXBpbmcgZm9yIFB5dGhvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNteXB5XG4gICAqL1xuICByZWFkb25seSBteXB5PzogYW55O1xuXG4gIC8qKlxuICAgKiBBbiBleHRyZW1lbHkgZmFzdCBQeXRob24gbGludGVyIGFuZCBmb3JtYXR0ZXIsIHdyaXR0ZW4gaW4gUnVzdC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNydWZmXG4gICAqL1xuICByZWFkb25seSBydWZmPzogYW55O1xuXG4gIC8qKlxuICAgKiBBbiBleHRyZW1lbHkgZmFzdCBQeXRob24gdHlwZSBjaGVja2VyLCB3cml0dGVuIGluIFJ1c3QuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjdHlcbiAgICovXG4gIHJlYWRvbmx5IHR5PzogYW55O1xuXG4gIC8qKlxuICAgKiBNb2Rlcm4sIGV4dGVuc2libGUgUHl0aG9uIHByb2plY3QgbWFuYWdlbWVudC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNoYXRjaFxuICAgKi9cbiAgcmVhZG9ubHkgaGF0Y2g/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCBwdWJsaXNoIGNyYXRlcyB3aXRoIHB5bzMsIGNmZmkgYW5kIHVuaWZmaSBiaW5kaW5ncyBhcyB3ZWxsIGFzIHJ1c3QgYmluYXJpZXMgYXMgcHl0aG9uIHBhY2thZ2VzXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjbWF0dXJpblxuICAgKi9cbiAgcmVhZG9ubHkgbWF0dXJpbj86IGFueTtcblxuICAvKipcbiAgICogSW1wcm92ZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRvciBmb3IgUHl0aG9uIEMvQysrL0ZvcnRyYW4gZXh0ZW5zaW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3NjaWtpdC1idWlsZFxuICAgKi9cbiAgcmVhZG9ubHkgc2Npa2l0QnVpbGQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVhc2lseSBkb3dubG9hZCwgYnVpbGQsIGluc3RhbGwsIHVwZ3JhZGUsIGFuZCB1bmluc3RhbGwgUHl0aG9uIHBhY2thZ2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3NldHVwdG9vbHNcbiAgICovXG4gIHJlYWRvbmx5IHNldHVwdG9vbHM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1hbmFnZSBQeXRob24gcGFja2FnZSB2ZXJzaW9ucyB1c2luZyBTQ00gKGUuZy4gR2l0KS5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNzZXR1cHRvb2xzX3NjbVxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dXB0b29sc1NjbT86IGFueTtcblxuICAvKipcbiAgICogQSB0YXNrIHJ1bm5lciB0aGF0IHdvcmtzIHdlbGwgd2l0aCBweXByb2plY3QudG9tbCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNwb2VcbiAgICovXG4gIHJlYWRvbmx5IHBvZT86IGFueTtcblxuICAvKipcbiAgICogUHl0aG9uIGRlcGVuZGVuY3kgbWFuYWdlbWVudCBhbmQgcGFja2FnaW5nIG1hZGUgZWFzeS5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNwb2V0cnlcbiAgICovXG4gIHJlYWRvbmx5IHBvZXRyeT86IGFueTtcblxuICAvKipcbiAgICogQSBtb2Rlcm4gUHl0aG9uIHBhY2thZ2UgbWFuYWdlciB3aXRoIFBFUCA2MjEgc3VwcG9ydC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNwZG1cbiAgICovXG4gIHJlYWRvbmx5IHBkbT86IGFueTtcblxuICAvKipcbiAgICogU3RhdGljIHR5cGUgY2hlY2tlciBmb3IgUHl0aG9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3B5cmlnaHRcbiAgICovXG4gIHJlYWRvbmx5IHB5cmlnaHQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkaXplZCBhdXRvbWF0ZWQgdGVzdGluZyBvZiBQeXRob24gcGFja2FnZXNcbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNweXRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHB5dGVzdD86IGFueTtcblxuICAvKipcbiAgICogUmV2aWV3IGEgcmVwb3NpdG9yeSBmb3IgYmVzdCBwcmFjdGljZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjcmVwby1yZXZpZXdcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9SZXZpZXc/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wbGVtZW50YXJ5IHRhc2sgcnVubmVyIGZvciBweXRob24uXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjdGFza2lweVxuICAgKi9cbiAgcmVhZG9ubHkgdGFza2lweT86IGFueTtcblxuICAvKipcbiAgICogVG9tYmkgaXMgYSB0b29sa2l0IGZvciBUT01MOyBwcm92aWRpbmcgYSBmb3JtYXR0ZXIvbGludGVyIGFuZCBsYW5ndWFnZSBzZXJ2ZXJcbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCN0b21iaVxuICAgKi9cbiAgcmVhZG9ubHkgdG9tYmk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFN0YW5kYXJkaXplZCBhdXRvbWF0ZWQgdGVzdGluZyBvZiBQeXRob24gcGFja2FnZXNcbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCN0b3hcbiAgICovXG4gIHJlYWRvbmx5IHRveD86IGFueTtcblxuICAvKipcbiAgICogQW4gZXh0cmVtZWx5IGZhc3QgUHl0aG9uIHBhY2thZ2UgaW5zdGFsbGVyIGFuZCByZXNvbHZlciwgd3JpdHRlbiBpbiBSdXN0LlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3V2XG4gICAqL1xuICByZWFkb25seSB1dj86IGFueTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUHlwcm9qZWN0VG9tbFRvb2wnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QeXByb2plY3RUb21sVG9vbChvYmo6IFB5cHJvamVjdFRvbWxUb29sIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmxhY2snOiBvYmouYmxhY2ssXG4gICAgJ2NpYnVpbGR3aGVlbCc6IG9iai5jaWJ1aWxkd2hlZWwsXG4gICAgJ215cHknOiBvYmoubXlweSxcbiAgICAncnVmZic6IG9iai5ydWZmLFxuICAgICd0eSc6IG9iai50eSxcbiAgICAnaGF0Y2gnOiBvYmouaGF0Y2gsXG4gICAgJ21hdHVyaW4nOiBvYmoubWF0dXJpbixcbiAgICAnc2Npa2l0LWJ1aWxkJzogb2JqLnNjaWtpdEJ1aWxkLFxuICAgICdzZXR1cHRvb2xzJzogb2JqLnNldHVwdG9vbHMsXG4gICAgJ3NldHVwdG9vbHNfc2NtJzogb2JqLnNldHVwdG9vbHNTY20sXG4gICAgJ3BvZSc6IG9iai5wb2UsXG4gICAgJ3BvZXRyeSc6IG9iai5wb2V0cnksXG4gICAgJ3BkbSc6IG9iai5wZG0sXG4gICAgJ3B5cmlnaHQnOiBvYmoucHlyaWdodCxcbiAgICAncHl0ZXN0Jzogb2JqLnB5dGVzdCxcbiAgICAncmVwby1yZXZpZXcnOiBvYmoucmVwb1JldmlldyxcbiAgICAndGFza2lweSc6IG9iai50YXNraXB5LFxuICAgICd0b21iaSc6IG9iai50b21iaSxcbiAgICAndG94Jzogb2JqLnRveCxcbiAgICAndXYnOiBvYmoudXYsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIHByb2plY3RBdXRob3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0QXV0aG9yIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgcHJvamVjdEF1dGhvciNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIHByb2plY3RBdXRob3IjZW1haWxcbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQcm9qZWN0QXV0aG9yJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUHJvamVjdEF1dGhvcihvYmo6IFByb2plY3RBdXRob3IgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ2VtYWlsJzogb2JqLmVtYWlsLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdER5bmFtaWNcbiAqL1xuZXhwb3J0IGVudW0gUHlwcm9qZWN0VG9tbFByb2plY3REeW5hbWljIHtcbiAgLyoqIHZlcnNpb24gKi9cbiAgVkVSU0lPTiA9IFwidmVyc2lvblwiLFxuICAvKiogZGVzY3JpcHRpb24gKi9cbiAgREVTQ1JJUFRJT04gPSBcImRlc2NyaXB0aW9uXCIsXG4gIC8qKiByZWFkbWUgKi9cbiAgUkVBRE1FID0gXCJyZWFkbWVcIixcbiAgLyoqIHJlcXVpcmVzLXB5dGhvbiAqL1xuICBSRVFVSVJFU19IWVBIRU5fUFlUSE9OID0gXCJyZXF1aXJlcy1weXRob25cIixcbiAgLyoqIGxpY2Vuc2UgKi9cbiAgTElDRU5TRSA9IFwibGljZW5zZVwiLFxuICAvKiogbGljZW5zZS1maWxlcyAqL1xuICBMSUNFTlNFX0hZUEhFTl9GSUxFUyA9IFwibGljZW5zZS1maWxlc1wiLFxuICAvKiogYXV0aG9ycyAqL1xuICBBVVRIT1JTID0gXCJhdXRob3JzXCIsXG4gIC8qKiBtYWludGFpbmVycyAqL1xuICBNQUlOVEFJTkVSUyA9IFwibWFpbnRhaW5lcnNcIixcbiAgLyoqIGtleXdvcmRzICovXG4gIEtFWVdPUkRTID0gXCJrZXl3b3Jkc1wiLFxuICAvKiogY2xhc3NpZmllcnMgKi9cbiAgQ0xBU1NJRklFUlMgPSBcImNsYXNzaWZpZXJzXCIsXG4gIC8qKiB1cmxzICovXG4gIFVSTFMgPSBcInVybHNcIixcbiAgLyoqIHNjcmlwdHMgKi9cbiAgU0NSSVBUUyA9IFwic2NyaXB0c1wiLFxuICAvKiogZ3VpLXNjcmlwdHMgKi9cbiAgR1VJX0hZUEhFTl9TQ1JJUFRTID0gXCJndWktc2NyaXB0c1wiLFxuICAvKiogZW50cnktcG9pbnRzICovXG4gIEVOVFJZX0hZUEhFTl9QT0lOVFMgPSBcImVudHJ5LXBvaW50c1wiLFxuICAvKiogZGVwZW5kZW5jaWVzICovXG4gIERFUEVOREVOQ0lFUyA9IFwiZGVwZW5kZW5jaWVzXCIsXG4gIC8qKiBvcHRpb25hbC1kZXBlbmRlbmNpZXMgKi9cbiAgT1BUSU9OQUxfSFlQSEVOX0RFUEVOREVOQ0lFUyA9IFwib3B0aW9uYWwtZGVwZW5kZW5jaWVzXCIsXG4gIC8qKiBpbXBvcnQtbmFtZXMgKi9cbiAgSU1QT1JUX0hZUEhFTl9OQU1FUyA9IFwiaW1wb3J0LW5hbWVzXCIsXG4gIC8qKiBpbXBvcnQtbmFtZXNwYWNlcyAqL1xuICBJTVBPUlRfSFlQSEVOX05BTUVTUEFDRVMgPSBcImltcG9ydC1uYW1lc3BhY2VzXCIsXG59XG4iXX0=
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHlwcm9qZWN0LXRvbWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3B5cHJvamVjdC10b21sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdDQSxvREFVQztBQW1LRCxrRUEwQkM7QUFvQkQsb0ZBT0M7QUFvQ0QsZ0RBU0M7QUEwTkQsNERBZ0NDO0FBdUJELG9EQVFDO0FBN2lCRDs7O0dBR0c7QUFDSCxxRkFBcUY7QUFDckYsU0FBZ0Isb0JBQW9CLENBQUMsR0FBOEI7SUFDakUsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFBQyxPQUFPLFNBQVMsQ0FBQztJQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUc7UUFDYixTQUFTLEVBQUUsMkJBQTJCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuRCxtQkFBbUIsRUFBRSxvQ0FBb0MsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDL0UsY0FBYyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDbkQsTUFBTSxFQUFFLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7S0FDM0MsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBOEpEOzs7R0FHRztBQUNILHFGQUFxRjtBQUNyRixTQUFnQiwyQkFBMkIsQ0FBQyxHQUFxQztJQUMvRSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE9BQU8sU0FBUyxDQUFDO0lBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBRztRQUNiLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNoQixTQUFTLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDdEIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxXQUFXO1FBQzlCLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTTtRQUNwQixpQkFBaUIsRUFBRSxHQUFHLENBQUMsY0FBYztRQUNyQyxTQUFTLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDdEIsZUFBZSxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlDLFNBQVMsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELGFBQWEsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQyxhQUFhLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JKLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5SixhQUFhLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxD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RSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUNELG9GQUFvRjtBQUVwRjs7R0FFRztBQUNILElBQVksMkJBcUNYO0FBckNELFdBQVksMkJBQTJCO0lBQ3JDLGNBQWM7SUFDZCxrREFBbUIsQ0FBQTtJQUNuQixrQkFBa0I7SUFDbEIsMERBQTJCLENBQUE7SUFDM0IsYUFBYTtJQUNiLGdEQUFpQixDQUFBO0lBQ2pCLHNCQUFzQjtJQUN0Qix5RUFBMEMsQ0FBQTtJQUMxQyxjQUFjO0lBQ2Qsa0RBQW1CLENBQUE7SUFDbkIsb0JBQW9CO0lBQ3BCLHFFQUFzQyxDQUFBO0lBQ3RDLGNBQWM7SUFDZCxrREFBbUIsQ0FBQTtJQUNuQixrQkFBa0I7SUFDbEIsMERBQTJCLENBQUE7SUFDM0IsZUFBZTtJQUNmLG9EQUFxQixDQUFBO0lBQ3JCLGtCQUFrQjtJQUNsQiwwREFBMkIsQ0FBQTtJQUMzQixXQUFXO0lBQ1gsNENBQWEsQ0FBQTtJQUNiLGNBQWM7SUFDZCxrREFBbUIsQ0FBQTtJQUNuQixrQkFBa0I7SUFDbEIsaUVBQWtDLENBQUE7SUFDbEMsbUJBQW1CO0lBQ25CLG1FQUFvQyxDQUFBO0lBQ3BDLG1CQUFtQjtJQUNuQiw0REFBNkIsQ0FBQTtJQUM3Qiw0QkFBNEI7SUFDNUIscUZBQXNELENBQUE7SUFDdEQsbUJBQW1CO0lBQ25CLG1FQUFvQyxDQUFBO0lBQ3BDLHdCQUF3QjtJQUN4Qiw2RUFBOEMsQ0FBQTtBQUNoRCxDQUFDLEVBckNXLDJCQUEyQiwyQ0FBM0IsMkJBQTJCLFFBcUN0QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5vZGUgLi9wcm9qZW4uanNcIi5cbi8qKlxuICogQHNjaGVtYSBQeXByb2plY3RUb21sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHlwcm9qZWN0VG9tbCB7XG4gIC8qKlxuICAgKiBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgbWV0YWRhdGE6IF9zdGF0aWNfLCBfZHluYW1pY18sIGFuZCBfcGFydGlhbGx5IGR5bmFtaWNfLlxuICAgKiAtIFN0YXRpYyBtZXRhZGF0YSBpcyBsaXN0ZWQgaW4gdGhlIGBbcHJvamVjdF1gIHRhYmxlIGRpcmVjdGx5IGFuZCBjYW5ub3QgYmUgc3BlY2lmaWVkIG9yIGNoYW5nZWQgYnkgYSB0b29sLlxuICAgKiAtIER5bmFtaWMgbWV0YWRhdGEga2V5IG5hbWVzIGFyZSBsaXN0ZWQgaW5zaWRlIHRoZSBgZHluYW1pY2Aga2V5IGFuZCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgYSB0b29sIHdpbGwgbGF0ZXIgcHJvdmlkZS5cbiAgICogLSBQYXJ0aWFsbHkgZHluYW1pYyBtZXRhZGF0YSBpcyBzcGVjaWZpZWQgaW4gdGhlIGBbcHJvamVjdF1gIHRhYmxlIGFzIGEgbGlzdCBvciB0YWJsZSwgYW5kIGFsc28gbGlzdGVkIGluIGBkeW5hbWljYCwgYWxsb3dpbmcgdGhlIGJ1aWxkIGJhY2tlbmQgdG8gYWRkIGVudHJpZXMgYnV0IG5vdCBtb2RpZnkgb3IgcmVtb3ZlIGV4aXN0aW5nIG9uZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbCNwcm9qZWN0XG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0PzogUHlwcm9qZWN0VG9tbFByb2plY3Q7XG5cbiAgLyoqXG4gICAqIE5hbWVkIGdyb3VwcyBvZiBkZXBlbmRlbmNpZXMsIHNpbWlsYXIgdG8gYHJlcXVpcmVtZW50cy50eHRgIGZpbGVzLCB3aGljaCBsYXVuY2hlcnMsIElERXMsIGFuZCBvdGhlciB0b29scyBjYW4gZmluZCBhbmQgaWRlbnRpZnkgYnkgbmFtZS4gRWFjaCBpdGVtIGluIGBbZGVwZW5kZW5jeS1ncm91cHNdYCBpcyBkZWZpbmVkIGFzIG1hcHBpbmcgb2YgZ3JvdXAgbmFtZSB0byBsaXN0IG9mIFtkZXBlbmRlbmN5IHNwZWNpZmllcnNdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL2RlcGVuZGVuY3ktc3BlY2lmaWVycy8pLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWwjZGVwZW5kZW5jeS1ncm91cHNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lHcm91cHM/OiBQeXByb2plY3RUb21sRGVwZW5kZW5jeUdyb3VwcztcblxuICAvKipcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sI2J1aWxkLXN5c3RlbVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRTeXN0ZW0/OiBCdWlsZFN5c3RlbTtcblxuICAvKipcbiAgICogRXZlcnkgdG9vbCB0aGF0IGlzIHVzZWQgYnkgdGhlIHByb2plY3QgY2FuIGhhdmUgdXNlcnMgc3BlY2lmeSBjb25maWd1cmF0aW9uIGRhdGEgYXMgbG9uZyBhcyB0aGV5IHVzZSBhIHN1Yi10YWJsZSB3aXRoaW4gYFt0b29sXWAuIEdlbmVyYWxseSBhIHByb2plY3QgY2FuIHVzZSB0aGUgc3VidGFibGUgYHRvb2wuJE5BTUVgIGlmLCBhbmQgb25seSBpZiwgdGhleSBvd24gdGhlIGVudHJ5IGZvciBgJE5BTUVgIGluIHRoZSBDaGVlc2VzaG9wL1B5UEkuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbCN0b29sXG4gICAqL1xuICByZWFkb25seSB0b29sPzogUHlwcm9qZWN0VG9tbFRvb2w7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1B5cHJvamVjdFRvbWwnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QeXByb2plY3RUb21sKG9iajogUHlwcm9qZWN0VG9tbCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3Byb2plY3QnOiB0b0pzb25fUHlwcm9qZWN0VG9tbFByb2plY3Qob2JqLnByb2plY3QpLFxuICAgICdkZXBlbmRlbmN5LWdyb3Vwcyc6IHRvSnNvbl9QeXByb2plY3RUb21sRGVwZW5kZW5jeUdyb3VwcyhvYmouZGVwZW5kZW5jeUdyb3VwcyksXG4gICAgJ2J1aWxkLXN5c3RlbSc6IHRvSnNvbl9CdWlsZFN5c3RlbShvYmouYnVpbGRTeXN0ZW0pLFxuICAgICd0b29sJzogdG9Kc29uX1B5cHJvamVjdFRvbWxUb29sKG9iai50b29sKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZXJlIGFyZSB0aHJlZSBraW5kcyBvZiBtZXRhZGF0YTogX3N0YXRpY18sIF9keW5hbWljXywgYW5kIF9wYXJ0aWFsbHkgZHluYW1pY18uXG4gKiAtIFN0YXRpYyBtZXRhZGF0YSBpcyBsaXN0ZWQgaW4gdGhlIGBbcHJvamVjdF1gIHRhYmxlIGRpcmVjdGx5IGFuZCBjYW5ub3QgYmUgc3BlY2lmaWVkIG9yIGNoYW5nZWQgYnkgYSB0b29sLlxuICogLSBEeW5hbWljIG1ldGFkYXRhIGtleSBuYW1lcyBhcmUgbGlzdGVkIGluc2lkZSB0aGUgYGR5bmFtaWNgIGtleSBhbmQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGEgdG9vbCB3aWxsIGxhdGVyIHByb3ZpZGUuXG4gKiAtIFBhcnRpYWxseSBkeW5hbWljIG1ldGFkYXRhIGlzIHNwZWNpZmllZCBpbiB0aGUgYFtwcm9qZWN0XWAgdGFibGUgYXMgYSBsaXN0IG9yIHRhYmxlLCBhbmQgYWxzbyBsaXN0ZWQgaW4gYGR5bmFtaWNgLCBhbGxvd2luZyB0aGUgYnVpbGQgYmFja2VuZCB0byBhZGQgZW50cmllcyBidXQgbm90IG1vZGlmeSBvciByZW1vdmUgZXhpc3Rpbmcgb25lcy5cbiAqXG4gKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHlwcm9qZWN0VG9tbFByb2plY3Qge1xuICAvKipcbiAgICogVmFsaWQgbmFtZSBjb25zaXN0cyBvbmx5IG9mIEFTQ0lJIGxldHRlcnMgYW5kIG51bWJlcnMsIHBlcmlvZCwgdW5kZXJzY29yZSBhbmQgaHlwaGVuLiBJdCBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aCBhIGxldHRlciBvciBudW1iZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBwcm9qZWN0LCBhcyBkZWZpbmVkIGluIHRoZSBbVmVyc2lvbiBzcGVjaWZpZXIgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvdmVyc2lvbi1zcGVjaWZpZXJzLyksIGFuZCBwcmVmZXJhYmx5IFthbHJlYWR5IG5vcm1hbGl6ZWRdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL3ZlcnNpb24tc3BlY2lmaWVycy8jbm9ybWFsaXphdGlvbikuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogU3VtbWFyeSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdCBpbiBvbmUgbGluZS4gVG9vbHMgbWF5IG5vdCBhY2NlcHQgbXVsdGlwbGUgbGluZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBjYW4gYmUgYSByZWxhdGl2ZSBwYXRoIHRvIHRleHQgLyBtYXJrZG93biAoYC5tZGAgc3VmZml4KSAvIHJlU3RydWN0dXJlZFRleHQgKGAucnN0YCBzdWZmaXgpIHJlYWRtZSBmaWxlLCBvciBhIHRhYmxlIHdpdGggZWl0aGVyOlxuICAgKiAtIGBmaWxlYCBrZXkgY29udGFpbmluZyBwYXRoIG9mIGFmb3JlbWVudGlvbmVkIHJlYWRtZSBmaWxlLCBvclxuICAgKiAtIGB0ZXh0YCBrZXkgY29udGFpbmluZyB0aGUgZnVsbCByZWFkbWUgdGV4dCBlbWJlZGRlZCBpbnNpZGUgYHB5cHJvamVjdC50b21sYC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNyZWFkbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRtZT86IGFueTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBQeXRob24gdmVyc2lvbihzKSB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgY29tcGF0aWJsZSB3aXRoLiBNdXN0IGJlIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluIFtWZXJzaW9uIHNwZWNpZmllcnNdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL3ZlcnNpb24tc3BlY2lmaWVycy8pLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I3JlcXVpcmVzLXB5dGhvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXNQeXRob24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSB2YWxpZCBbU1BEWCBsaWNlbnNlIGV4cHJlc3Npb25dKGh0dHBzOi8vc3BkeC5naXRodWIuaW8vc3BkeC1zcGVjL3YyLjIuMi9TUERYLWxpY2Vuc2UtZXhwcmVzc2lvbnMvKSAocmVjb21tZW5kZWQpLCBvciBhIHRhYmxlIHdpdGggZWl0aGVyOlxuICAgKiAtIGBmaWxlYCBrZXkgc3BlY2lmeWluZyBhIHJlbGF0aXZlIHBhdGggdG8gYSBsaWNlbnNlIGZpbGUgKGRlcHJlY2F0ZWQgcGVyIFBFUCA2MzkpLCBvclxuICAgKiAtIGB0ZXh0YCBrZXkgY29udGFpbmluZyBmdWxsIGxpY2Vuc2UgY29udGVudCAoZGVwcmVjYXRlZCBwZXIgUEVQIDYzOSlcbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNsaWNlbnNlXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlPzogYW55O1xuXG4gIC8qKlxuICAgKiBSZWxhdGl2ZSBwYXRocyBvciBnbG9icyB0byBwYXRocyBvZiBsaWNlbnNlIGZpbGVzLiBDYW4gYmUgYW4gZW1wdHkgbGlzdC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNsaWNlbnNlLWZpbGVzXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlRmlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGVvcGxlIG9yIG9yZ2FuaXphdGlvbnMgY29uc2lkZXJlZCBhcyAnYXV0aG9ycycgb2YgdGhlIHByb2plY3QuIEVhY2ggYXV0aG9yIGlzIGEgdGFibGUgd2l0aCBgbmFtZWAga2V5LCBgZW1haWxgIGtleSwgb3IgYm90aC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNhdXRob3JzXG4gICAqL1xuICByZWFkb25seSBhdXRob3JzPzogUHJvamVjdEF1dGhvcltdO1xuXG4gIC8qKlxuICAgKiBQZW9wbGUgb3Igb3JnYW5pemF0aW9ucyBjb25zaWRlcmVkIGFzICdtYWludGFpbmVycycgb2YgdGhlIHByb2plY3QuIEVhY2ggbWFpbnRhaW5lciBpcyBhIHRhYmxlIHdpdGggYG5hbWVgIGtleSwgYGVtYWlsYCBrZXksIG9yIGJvdGguXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjbWFpbnRhaW5lcnNcbiAgICovXG4gIHJlYWRvbmx5IG1haW50YWluZXJzPzogUHJvamVjdEF1dGhvcltdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGtleXdvcmRzIG9yIHRhZ3MgdGhhdCBkZXNjcmliZSB0aGUgcHJvamVjdC4gVGhleSBjb3VsZCBiZSB1c2VkIGJ5IHNlYXJjaCBlbmdpbmVzIHRvIGNhdGVnb3JpemUgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3Qja2V5d29yZHNcbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgW1Ryb3ZlIGNsYXNzaWZpZXJzXShodHRwczovL3B5cGkub3JnL2NsYXNzaWZpZXJzLykgdGhhdCBkZXNjcmliZSB0aGUgcHJvamVjdC4gUHlQSSB1c2UgdGhlIGNsYXNzaWZpZXJzIHRvIGNhdGVnb3JpemUgcHJvamVjdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjY2xhc3NpZmllcnNcbiAgICovXG4gIHJlYWRvbmx5IGNsYXNzaWZpZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhYmxlIGNvbnNpc3Rpbmcgb25lIG9yIG11bHRpcGxlIGBsYWJlbDogVVJMYCBwYWlycy4gQ29tbW9uIGluZGV4ZXMgbGlrZSBQeVBJIHVzZXMgW3dlbGwta25vd24gUHJvamVjdCBVUkxzXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy93ZWxsLWtub3duLXByb2plY3QtdXJscy8jd2VsbC1rbm93bi1sYWJlbHMpIHdoZW4gcHJlc2VudGluZyBwcm9qZWN0IHBhZ2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I3VybHNcbiAgICovXG4gIHJlYWRvbmx5IHVybHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUYWJsZSBvZiBbZW50cnkgcG9pbnRzXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9lbnRyeS1wb2ludHMvKSB0aGF0IGFsbG93cyBwYWNrYWdlIGluc3RhbGxlcnMgdG8gY3JlYXRlIGEgY29tbWFuZC1saW5lIHdyYXBwZXIgZm9yLiBFYWNoIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0IHRvIGJlIGNyZWF0ZWQsIGFuZCBlYWNoIHZhbHVlIGlzIHRoZSBmdW5jdGlvbiBvciBvYmplY3QgdG8gYWxsLCBpbiBmb3JtIG9mIGVpdGhlciBgaW1wb3J0YWJsZS5tb2R1bGVgIG9yIGBpbXBvcnRhYmxlLm1vZHVsZTpvYmplY3QuYXR0cmAuIFdpbmRvd3MgcGxhdGZvcm0gdHJlYXRzIGBjb25zb2xlX3NjcmlwdHNgIHNwZWNpYWxseSBpbiB0aGF0IHRoZXkgYXJlIHdyYXBwZWQgaW4gYSBjb25zb2xlIGV4ZWN1dGFibGUsIHNvIHRoZXkgYXJlIGF0dGFjaGVkIHRvIGEgY29uc29sZSBhbmQgY2FuIHVzZSBgc3lzLnN0ZGluYCwgYHN5cy5zdGRvdXRgIGFuZCBgc3lzLnN0ZGVycmAgZm9yIEkvTy5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNzY3JpcHRzXG4gICAqL1xuICByZWFkb25seSBzY3JpcHRzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGFibGUgb2YgW2VudHJ5IHBvaW50c10oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZW50cnktcG9pbnRzLykgdGhhdCBhbGxvd3MgcGFja2FnZSBpbnN0YWxsZXJzIHRvIGNyZWF0ZSBhIEdVSSB3cmFwcGVyIGZvci4gRWFjaCBrZXkgaXMgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCB0byBiZSBjcmVhdGVkLCBhbmQgZWFjaCB2YWx1ZSBpcyB0aGUgZnVuY3Rpb24gb3Igb2JqZWN0IHRvIGFsbCwgaW4gZm9ybSBvZiBlaXRoZXIgYGltcG9ydGFibGUubW9kdWxlYCBvciBgaW1wb3J0YWJsZS5tb2R1bGU6b2JqZWN0LmF0dHJgLiBXaW5kb3dzIHBsYXRmb3JtIHRyZWF0cyBgZ3VpX3NjcmlwdHNgIHNwZWNpYWxseSBpbiB0aGF0IHRoZXkgYXJlIHdyYXBwZWQgaW4gYSBHVUkgZXhlY3V0YWJsZSwgc28gdGhleSBjYW4gYmUgc3RhcnRlZCB3aXRob3V0IGEgY29uc29sZSwgYnV0IGNhbm5vdCB1c2Ugc3RhbmRhcmQgc3RyZWFtcyB1bmxlc3MgYXBwbGljYXRpb24gY29kZSByZWRpcmVjdHMgdGhlbS5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNndWktc2NyaXB0c1xuICAgKi9cbiAgcmVhZG9ubHkgZ3VpU2NyaXB0cz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEV4dHJhIFtlbnRyeSBwb2ludCBncm91cHNdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL2VudHJ5LXBvaW50cy8pIHRoYXQgYWxsb3cgYXBwbGljYXRpb25zIHRvIGxvYWQgcGx1Z2lucy4gRm9yIGV4YW1wbGUsIFB5Z21lbnRzIChhIHN5bnRheCBoaWdobGlnaHRpbmcgdG9vbCkgY2FuIHVzZSBhZGRpdGlvbmFsIHN0eWxlcyBmcm9tIHNlcGFyYXRlbHkgaW5zdGFsbGVkIHBhY2thZ2VzIHRocm91Z2ggYFtwcm9qZWN0LmVudHJ5LXBvaW50cy5cInB5Z21lbnRzLnN0eWxlc1wiXWAuIEVhY2gga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBlbnRyeS1wb2ludCBncm91cCwgYW5kIGVhY2ggdmFsdWUgaXMgYSB0YWJsZSBvZiBlbnRyeSBwb2ludHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjZW50cnktcG9pbnRzXG4gICAqL1xuICByZWFkb25seSBlbnRyeVBvaW50cz86IGFueTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgW2RlcGVuZGVuY3kgc3BlY2lmaWVyXShodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9kZXBlbmRlbmN5LXNwZWNpZmllcnMvKSBzdHJpbmdzLCBlYWNoIHJlcHJlc2VudGluZyBhIG1hbmRhdG9yeSBkZXBlbmRlbnQgcGFja2FnZSBvZiB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNkZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFYWNoIGVudHJ5IGlzIGEga2V5L3ZhbHVlIHBhaXIsIHdpdGggdGhlIGtleSBzcGVjaWZ5aW5nIFtleHRyYSBmZWF0dXJlIG5hbWVdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL2NvcmUtbWV0YWRhdGEvI3Byb3ZpZGVzLWV4dHJhLW11bHRpcGxlLXVzZSkgKHN1Y2ggYXMgYHNvY2tzYCBpbiBgcmVxdWVzdHNbc29ja3NdYCksIGFuZCB2YWx1ZSBpcyBhbiBhcnJheSBvZiBbZGVwZW5kZW5jeSBzcGVjaWZpZXJdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL2RlcGVuZGVuY3ktc3BlY2lmaWVycy8pIHN0cmluZ3MuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3Qjb3B0aW9uYWwtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBvcHRpb25hbERlcGVuZGVuY2llcz86IGFueTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIHRoZSBpbXBvcnQgbmFtZXMgdGhhdCB0aGUgcHJvamVjdCBleGNsdXNpdmVseSBwcm92aWRlcyB3aGVuIGluc3RhbGxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdCNpbXBvcnQtbmFtZXNcbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydE5hbWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHN0cmluZ3Mgc3BlY2lmeWluZyB0aGUgaW1wb3J0IG5hbWVzIHRoYXQgdGhlIHByb2plY3QgcHJvdmlkZXMgd2hlbiBpbnN0YWxsZWQsIGJ1dCBub3QgZXhjbHVzaXZlbHkuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFByb2plY3QjaW1wb3J0LW5hbWVzcGFjZXNcbiAgICovXG4gIHJlYWRvbmx5IGltcG9ydE5hbWVzcGFjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoaWNoIGtleXMgYXJlIGludGVudGlvbmFsbHkgdW5zcGVjaWZpZWQgdW5kZXIgYFtwcm9qZWN0XWAgdGFibGUgc28gYnVpbGQgYmFja2VuZCBjYW4vd2lsbCBwcm92aWRlIHN1Y2ggbWV0YWRhdGEgZHluYW1pY2FsbHkuIEVhY2gga2V5IG11c3QgYmUgbGlzdGVkIG9ubHkgb25jZS4gSXQgaXMgYW4gZXJyb3IgdG8gYm90aCBsaXN0IGEga2V5IGluIGBkeW5hbWljYCBhbmQgdXNlIHRoZSBrZXkgZGlyZWN0bHkgaW4gYFtwcm9qZWN0XWAgdW5sZXNzIHRoZSBrZXkgaXMgYSBsaXN0IG9yIHRhYmxlIHdpdGggYXJiaXRyYXJ5IGVudHJpZXMgKFBFUCA4MDgpLCBpbiB3aGljaCBjYXNlIHRoZSBidWlsZCBiYWNrZW5kIG1heSBleHRlbmQgaXQuXG4gICAqIE9uZSBvZiB0aGUgbW9zdCBjb21tb24gdXNhZ2UgaXMgYHZlcnNpb25gLCB3aGljaCBhbGxvd3MgYnVpbGQgYmFja2VuZCB0byByZXRyaWV2ZSBwcm9qZWN0IHZlcnNpb24gZnJvbSBzb3VyY2UgY29kZSBvciB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGluc3RlYWQgb2YgaGFyZGNvZGluZyBpdCBpbiBgcHlwcm9qZWN0LnRvbWxgLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxQcm9qZWN0I2R5bmFtaWNcbiAgICovXG4gIHJlYWRvbmx5IGR5bmFtaWM/OiBQeXByb2plY3RUb21sUHJvamVjdER5bmFtaWNbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUHlwcm9qZWN0VG9tbFByb2plY3QnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QeXByb2plY3RUb21sUHJvamVjdChvYmo6IFB5cHJvamVjdFRvbWxQcm9qZWN0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gICAgJ2Rlc2NyaXB0aW9uJzogb2JqLmRlc2NyaXB0aW9uLFxuICAgICdyZWFkbWUnOiBvYmoucmVhZG1lLFxuICAgICdyZXF1aXJlcy1weXRob24nOiBvYmoucmVxdWlyZXNQeXRob24sXG4gICAgJ2xpY2Vuc2UnOiBvYmoubGljZW5zZSxcbiAgICAnbGljZW5zZS1maWxlcyc6IG9iai5saWNlbnNlRmlsZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdhdXRob3JzJzogb2JqLmF1dGhvcnM/Lm1hcCh5ID0+IHRvSnNvbl9Qcm9qZWN0QXV0aG9yKHkpKSxcbiAgICAnbWFpbnRhaW5lcnMnOiBvYmoubWFpbnRhaW5lcnM/Lm1hcCh5ID0+IHRvSnNvbl9Qcm9qZWN0QXV0aG9yKHkpKSxcbiAgICAna2V5d29yZHMnOiBvYmoua2V5d29yZHM/Lm1hcCh5ID0+IHkpLFxuICAgICdjbGFzc2lmaWVycyc6IG9iai5jbGFzc2lmaWVycz8ubWFwKHkgPT4geSksXG4gICAgJ3VybHMnOiAoKG9iai51cmxzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmoudXJscykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ3NjcmlwdHMnOiAoKG9iai5zY3JpcHRzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouc2NyaXB0cykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ2d1aS1zY3JpcHRzJzogKChvYmouZ3VpU2NyaXB0cykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmd1aVNjcmlwdHMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdlbnRyeS1wb2ludHMnOiBvYmouZW50cnlQb2ludHMsXG4gICAgJ2RlcGVuZGVuY2llcyc6IG9iai5kZXBlbmRlbmNpZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdvcHRpb25hbC1kZXBlbmRlbmNpZXMnOiBvYmoub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgJ2ltcG9ydC1uYW1lcyc6IG9iai5pbXBvcnROYW1lcz8ubWFwKHkgPT4geSksXG4gICAgJ2ltcG9ydC1uYW1lc3BhY2VzJzogb2JqLmltcG9ydE5hbWVzcGFjZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdkeW5hbWljJzogb2JqLmR5bmFtaWM/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogTmFtZWQgZ3JvdXBzIG9mIGRlcGVuZGVuY2llcywgc2ltaWxhciB0byBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZXMsIHdoaWNoIGxhdW5jaGVycywgSURFcywgYW5kIG90aGVyIHRvb2xzIGNhbiBmaW5kIGFuZCBpZGVudGlmeSBieSBuYW1lLiBFYWNoIGl0ZW0gaW4gYFtkZXBlbmRlbmN5LWdyb3Vwc11gIGlzIGRlZmluZWQgYXMgbWFwcGluZyBvZiBncm91cCBuYW1lIHRvIGxpc3Qgb2YgW2RlcGVuZGVuY3kgc3BlY2lmaWVyc10oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZGVwZW5kZW5jeS1zcGVjaWZpZXJzLykuXG4gKlxuICogQHNjaGVtYSBQeXByb2plY3RUb21sRGVwZW5kZW5jeUdyb3Vwc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFB5cHJvamVjdFRvbWxEZXBlbmRlbmN5R3JvdXBzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbERlcGVuZGVuY3lHcm91cHMjZGV2XG4gICAqL1xuICByZWFkb25seSBkZXY/OiBhbnlbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUHlwcm9qZWN0VG9tbERlcGVuZGVuY3lHcm91cHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QeXByb2plY3RUb21sRGVwZW5kZW5jeUdyb3VwcyhvYmo6IFB5cHJvamVjdFRvbWxEZXBlbmRlbmN5R3JvdXBzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGV2Jzogb2JqLmRldj8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZWNsYXJlcyBhbnkgUHl0aG9uIGxldmVsIGRlcGVuZGVuY2llcyB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGluIG9yZGVyIHRvIHJ1biB0aGUgcHJvamVjdOKAmXMgYnVpbGQgc3lzdGVtIHN1Y2Nlc3NmdWxseS5cbiAqXG4gKiBAc2NoZW1hIEJ1aWxkU3lzdGVtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTeXN0ZW0ge1xuICAvKipcbiAgICogTGlzdCBvZiBzdHJpbmdzIGZvbGxvd2luZyB0aGUgdmVyc2lvbiBzcGVjaWZpZXIgc3BlY2lmaWNhdGlvbiwgcmVwcmVzZW50aW5nIGRlcGVuZGVuY2llcyByZXF1aXJlZCB0byBleGVjdXRlIHRoZSBidWlsZCBzeXN0ZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgQnVpbGRTeXN0ZW0jcmVxdWlyZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3RyaW5nIGlzIGZvcm1hdHRlZCBmb2xsb3dpbmcgdGhlIHNhbWUgYG1vZHVsZTpvYmplY3RgIHN5bnRheCBhcyBhIGBzZXR1cHRvb2xzYCBlbnRyeSBwb2ludC4gSXTigJlzIGFsc28gbGVnYWwgdG8gbGVhdmUgb3V0IHRoZSBgOm9iamVjdGAgcGFydC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZFN5c3RlbSNidWlsZC1iYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBidWlsZEJhY2tlbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gcHJlcGVuZCB0byBgc3lzLnBhdGhgIHdoZW4gbG9hZGluZyB0aGUgYnVpbGQgYmFja2VuZCwgcmVsYXRpdmUgdG8gcHJvamVjdCByb290XG4gICAqXG4gICAqIEBzY2hlbWEgQnVpbGRTeXN0ZW0jYmFja2VuZC1wYXRoXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kUGF0aD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWlsZFN5c3RlbScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1aWxkU3lzdGVtKG9iajogQnVpbGRTeXN0ZW0gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZXF1aXJlcyc6IG9iai5yZXF1aXJlcz8ubWFwKHkgPT4geSksXG4gICAgJ2J1aWxkLWJhY2tlbmQnOiBvYmouYnVpbGRCYWNrZW5kLFxuICAgICdiYWNrZW5kLXBhdGgnOiBvYmouYmFja2VuZFBhdGg/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogRXZlcnkgdG9vbCB0aGF0IGlzIHVzZWQgYnkgdGhlIHByb2plY3QgY2FuIGhhdmUgdXNlcnMgc3BlY2lmeSBjb25maWd1cmF0aW9uIGRhdGEgYXMgbG9uZyBhcyB0aGV5IHVzZSBhIHN1Yi10YWJsZSB3aXRoaW4gYFt0b29sXWAuIEdlbmVyYWxseSBhIHByb2plY3QgY2FuIHVzZSB0aGUgc3VidGFibGUgYHRvb2wuJE5BTUVgIGlmLCBhbmQgb25seSBpZiwgdGhleSBvd24gdGhlIGVudHJ5IGZvciBgJE5BTUVgIGluIHRoZSBDaGVlc2VzaG9wL1B5UEkuXG4gKlxuICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB5cHJvamVjdFRvbWxUb29sIHtcbiAgLyoqXG4gICAqIFRoZSB1bmNvbXByb21pc2luZyBQeXRob24gY29kZSBmb3JtYXR0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjYmxhY2tcbiAgICovXG4gIHJlYWRvbmx5IGJsYWNrPzogYW55O1xuXG4gIC8qKlxuICAgKiBCdWlsZCBQeXRob24gd2hlZWxzIGZvciBhbGwgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI2NpYnVpbGR3aGVlbFxuICAgKi9cbiAgcmVhZG9ubHkgY2lidWlsZHdoZWVsPzogYW55O1xuXG4gIC8qKlxuICAgKiBGYXN0QVBJIHdlYiBmcmFtZXdvcmsgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNmYXN0YXBpXG4gICAqL1xuICByZWFkb25seSBmYXN0YXBpPzogYW55O1xuXG4gIC8qKlxuICAgKiBTY2hlZHVsZWQgam9icyBpbiBQeXRob24ncyBgcHlwcm9qZWN0LnRvbWxgLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgc3BlY2lmaWNhdGlvbiBmb3IgZGVjbGFyaW5nIHJlY3VycmluZyBzY2hlZHVsZWQgam9icyBpbiBQeXRob24gcHJvamVjdHMsIGluIGBweXByb2plY3QudG9tbGAuXG4gICAqXG4gICAqIEl0IGRlZmluZXMgaG93IGpvYnMgYXJlIGRlY2xhcmVkIGFuZCBob3cgcHJvdmlkZXJzIHdvdWxkIHJ1biB0aGVtLlxuICAgKlxuICAgKiBJdCBkb2VzIG5vdCBwcm92aWRlIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIHJ1bm5pbmcgc2NoZWR1bGVkIGpvYnMsIGJlY2F1c2UgdGhhdCBpcyBwcm92aWRlciBzcGVjaWZpYy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGEgZmlsZSBhdCBgYXBwL2pvYnMucHlgIGNvdWxkIGRlZmluZTpcbiAgICpcbiAgICogYGBgcHl0aG9uXG4gICAqIGRlZiBjbGVhbl9maWxlcygpOlxuICAgKiBwcmludChcIlJ1bm5pbmcgY2xlYW51cC4uLlwiKVxuICAgKiBgYGBcbiAgICpcbiAgICogWW91IGNvdWxkIGRlZmluZSBhIHNjaGVkdWxlZCBqb2IgdG8gcnVuIHRoYXQgZnVuY3Rpb24gb25jZSBwZXIgZGF5IHdpdGg6XG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW3Rvb2wuc2NoZWR1bGVkLmNsZWFuLWZpbGVzXVxuICAgKiBldmVyeSA9IFwiZGF5XCJcbiAgICogZW50cnlwb2ludCA9IFwiYXBwLmpvYnM6Y2xlYW5fZmlsZXNcIlxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNzY2hlZHVsZWRcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZD86IGFueTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgc3RhdGljIHR5cGluZyBmb3IgUHl0aG9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI215cHlcbiAgICovXG4gIHJlYWRvbmx5IG15cHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEFuIGV4dHJlbWVseSBmYXN0IFB5dGhvbiBsaW50ZXIgYW5kIGZvcm1hdHRlciwgd3JpdHRlbiBpbiBSdXN0LlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3J1ZmZcbiAgICovXG4gIHJlYWRvbmx5IHJ1ZmY/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEFuIGV4dHJlbWVseSBmYXN0IFB5dGhvbiB0eXBlIGNoZWNrZXIsIHdyaXR0ZW4gaW4gUnVzdC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCN0eVxuICAgKi9cbiAgcmVhZG9ubHkgdHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIE1vZGVybiwgZXh0ZW5zaWJsZSBQeXRob24gcHJvamVjdCBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI2hhdGNoXG4gICAqL1xuICByZWFkb25seSBoYXRjaD86IGFueTtcblxuICAvKipcbiAgICogQnVpbGQgYW5kIHB1Ymxpc2ggY3JhdGVzIHdpdGggcHlvMywgY2ZmaSBhbmQgdW5pZmZpIGJpbmRpbmdzIGFzIHdlbGwgYXMgcnVzdCBiaW5hcmllcyBhcyBweXRob24gcGFja2FnZXNcbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNtYXR1cmluXG4gICAqL1xuICByZWFkb25seSBtYXR1cmluPzogYW55O1xuXG4gIC8qKlxuICAgKiBJbXByb3ZlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdG9yIGZvciBQeXRob24gQy9DKysvRm9ydHJhbiBleHRlbnNpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjc2Npa2l0LWJ1aWxkXG4gICAqL1xuICByZWFkb25seSBzY2lraXRCdWlsZD86IGFueTtcblxuICAvKipcbiAgICogRWFzaWx5IGRvd25sb2FkLCBidWlsZCwgaW5zdGFsbCwgdXBncmFkZSwgYW5kIHVuaW5zdGFsbCBQeXRob24gcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjc2V0dXB0b29sc1xuICAgKi9cbiAgcmVhZG9ubHkgc2V0dXB0b29scz86IGFueTtcblxuICAvKipcbiAgICogTWFuYWdlIFB5dGhvbiBwYWNrYWdlIHZlcnNpb25zIHVzaW5nIFNDTSAoZS5nLiBHaXQpLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3NldHVwdG9vbHNfc2NtXG4gICAqL1xuICByZWFkb25seSBzZXR1cHRvb2xzU2NtPzogYW55O1xuXG4gIC8qKlxuICAgKiBBIHBhY2thZ2UgbWFuYWdlciBhbmQgdGFzayBydW5uZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjcGl4aVxuICAgKi9cbiAgcmVhZG9ubHkgcGl4aT86IGFueTtcblxuICAvKipcbiAgICogQSB0YXNrIHJ1bm5lciB0aGF0IHdvcmtzIHdlbGwgd2l0aCBgcHlwcm9qZWN0LnRvbWxgIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3BvZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9lPzogYW55O1xuXG4gIC8qKlxuICAgKiBQeXRob24gZGVwZW5kZW5jeSBtYW5hZ2VtZW50IGFuZCBwYWNrYWdpbmcgbWFkZSBlYXN5LlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3BvZXRyeVxuICAgKi9cbiAgcmVhZG9ubHkgcG9ldHJ5PzogYW55O1xuXG4gIC8qKlxuICAgKiBBIG1vZGVybiBQeXRob24gcGFja2FnZSBtYW5hZ2VyIHdpdGggUEVQIDYyMSBzdXBwb3J0LlxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3BkbVxuICAgKi9cbiAgcmVhZG9ubHkgcGRtPzogYW55O1xuXG4gIC8qKlxuICAgKiBTdGF0aWMgdHlwZSBjaGVja2VyIGZvciBQeXRob24uXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjcHlyaWdodFxuICAgKi9cbiAgcmVhZG9ubHkgcHlyaWdodD86IGFueTtcblxuICAvKipcbiAgICogU3RhbmRhcmRpemVkIGF1dG9tYXRlZCB0ZXN0aW5nIG9mIFB5dGhvbiBwYWNrYWdlc1xuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3B5dGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgcHl0ZXN0PzogYW55O1xuXG4gIC8qKlxuICAgKiBSZXZpZXcgYSByZXBvc2l0b3J5IGZvciBiZXN0IHByYWN0aWNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNyZXBvLXJldmlld1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwb1Jldmlldz86IGFueTtcblxuICAvKipcbiAgICogVGhlIGNvbXBsZW1lbnRhcnkgdGFzayBydW5uZXIgZm9yIHB5dGhvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCN0YXNraXB5XG4gICAqL1xuICByZWFkb25seSB0YXNraXB5PzogYW55O1xuXG4gIC8qKlxuICAgKiBUb21iaSBpcyBhIHRvb2xraXQgZm9yIFRPTUw7IHByb3ZpZGluZyBhIGZvcm1hdHRlci9saW50ZXIgYW5kIGxhbmd1YWdlIHNlcnZlclxuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3RvbWJpXG4gICAqL1xuICByZWFkb25seSB0b21iaT86IGFueTtcblxuICAvKipcbiAgICogU3RhbmRhcmRpemVkIGF1dG9tYXRlZCB0ZXN0aW5nIG9mIFB5dGhvbiBwYWNrYWdlc1xuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI3RveFxuICAgKi9cbiAgcmVhZG9ubHkgdG94PzogYW55O1xuXG4gIC8qKlxuICAgKiBBbiBleHRyZW1lbHkgZmFzdCBQeXRob24gcGFja2FnZSBpbnN0YWxsZXIgYW5kIHJlc29sdmVyLCB3cml0dGVuIGluIFJ1c3QuXG4gICAqXG4gICAqIEBzY2hlbWEgUHlwcm9qZWN0VG9tbFRvb2wjdXZcbiAgICovXG4gIHJlYWRvbmx5IHV2PzogYW55O1xuXG4gIC8qKlxuICAgKiBBIENMSSB0b29sIHRvIGNoZWNrIGFuZCB2YWxpZGF0ZSBQeXRob24gZG9jc3RyaW5nIGZvcm1hdHRpbmcgYW5kIGNvbXBsZXRlbmVzc1xuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI2RmY1xuICAgKi9cbiAgcmVhZG9ubHkgZGZjPzogYW55O1xuXG4gIC8qKlxuICAgKiBBIENMSSB0b29sIHRvIGNoZWNrIGFuZCB2YWxpZGF0ZSBQeXRob24gZG9jc3RyaW5nIGZvcm1hdHRpbmcgYW5kIGNvbXBsZXRlbmVzc1xuICAgKlxuICAgKiBAc2NoZW1hIFB5cHJvamVjdFRvbWxUb29sI2RvY3N0cmluZy1mb3JtYXQtY2hlY2tlclxuICAgKi9cbiAgcmVhZG9ubHkgZG9jc3RyaW5nRm9ybWF0Q2hlY2tlcj86IGFueTtcblxuICAvKipcbiAgICogQSBDTEkgdG9vbCB0byBydW4gY29kZSBmaWxlcyBpbnN0YW50bHkgd2l0aG91dCB0eXBpbmcgY29tcGxleCBjb21tYW5kcyBpbiB0ZXJtaW5hbC5cbiAgICpcbiAgICogQHNjaGVtYSBQeXByb2plY3RUb21sVG9vbCNxdWlrcnVuXG4gICAqL1xuICByZWFkb25seSBxdWlrcnVuPzogYW55O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQeXByb2plY3RUb21sVG9vbCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1B5cHJvamVjdFRvbWxUb29sKG9iajogUHlwcm9qZWN0VG9tbFRvb2wgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdibGFjayc6IG9iai5ibGFjayxcbiAgICAnY2lidWlsZHdoZWVsJzogb2JqLmNpYnVpbGR3aGVlbCxcbiAgICAnZmFzdGFwaSc6IG9iai5mYXN0YXBpLFxuICAgICdzY2hlZHVsZWQnOiBvYmouc2NoZWR1bGVkLFxuICAgICdteXB5Jzogb2JqLm15cHksXG4gICAgJ3J1ZmYnOiBvYmoucnVmZixcbiAgICAndHknOiBvYmoudHksXG4gICAgJ2hhdGNoJzogb2JqLmhhdGNoLFxuICAgICdtYXR1cmluJzogb2JqLm1hdHVyaW4sXG4gICAgJ3NjaWtpdC1idWlsZCc6IG9iai5zY2lraXRCdWlsZCxcbiAgICAnc2V0dXB0b29scyc6IG9iai5zZXR1cHRvb2xzLFxuICAgICdzZXR1cHRvb2xzX3NjbSc6IG9iai5zZXR1cHRvb2xzU2NtLFxuICAgICdwaXhpJzogb2JqLnBpeGksXG4gICAgJ3BvZSc6IG9iai5wb2UsXG4gICAgJ3BvZXRyeSc6IG9iai5wb2V0cnksXG4gICAgJ3BkbSc6IG9iai5wZG0sXG4gICAgJ3B5cmlnaHQnOiBvYmoucHlyaWdodCxcbiAgICAncHl0ZXN0Jzogb2JqLnB5dGVzdCxcbiAgICAncmVwby1yZXZpZXcnOiBvYmoucmVwb1JldmlldyxcbiAgICAndGFza2lweSc6IG9iai50YXNraXB5LFxuICAgICd0b21iaSc6IG9iai50b21iaSxcbiAgICAndG94Jzogb2JqLnRveCxcbiAgICAndXYnOiBvYmoudXYsXG4gICAgJ2RmYyc6IG9iai5kZmMsXG4gICAgJ2RvY3N0cmluZy1mb3JtYXQtY2hlY2tlcic6IG9iai5kb2NzdHJpbmdGb3JtYXRDaGVja2VyLFxuICAgICdxdWlrcnVuJzogb2JqLnF1aWtydW4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIHByb2plY3RBdXRob3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0QXV0aG9yIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgcHJvamVjdEF1dGhvciNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIHByb2plY3RBdXRob3IjZW1haWxcbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQcm9qZWN0QXV0aG9yJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUHJvamVjdEF1dGhvcihvYmo6IFByb2plY3RBdXRob3IgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ2VtYWlsJzogb2JqLmVtYWlsLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBQeXByb2plY3RUb21sUHJvamVjdER5bmFtaWNcbiAqL1xuZXhwb3J0IGVudW0gUHlwcm9qZWN0VG9tbFByb2plY3REeW5hbWljIHtcbiAgLyoqIHZlcnNpb24gKi9cbiAgVkVSU0lPTiA9IFwidmVyc2lvblwiLFxuICAvKiogZGVzY3JpcHRpb24gKi9cbiAgREVTQ1JJUFRJT04gPSBcImRlc2NyaXB0aW9uXCIsXG4gIC8qKiByZWFkbWUgKi9cbiAgUkVBRE1FID0gXCJyZWFkbWVcIixcbiAgLyoqIHJlcXVpcmVzLXB5dGhvbiAqL1xuICBSRVFVSVJFU19IWVBIRU5fUFlUSE9OID0gXCJyZXF1aXJlcy1weXRob25cIixcbiAgLyoqIGxpY2Vuc2UgKi9cbiAgTElDRU5TRSA9IFwibGljZW5zZVwiLFxuICAvKiogbGljZW5zZS1maWxlcyAqL1xuICBMSUNFTlNFX0hZUEhFTl9GSUxFUyA9IFwibGljZW5zZS1maWxlc1wiLFxuICAvKiogYXV0aG9ycyAqL1xuICBBVVRIT1JTID0gXCJhdXRob3JzXCIsXG4gIC8qKiBtYWludGFpbmVycyAqL1xuICBNQUlOVEFJTkVSUyA9IFwibWFpbnRhaW5lcnNcIixcbiAgLyoqIGtleXdvcmRzICovXG4gIEtFWVdPUkRTID0gXCJrZXl3b3Jkc1wiLFxuICAvKiogY2xhc3NpZmllcnMgKi9cbiAgQ0xBU1NJRklFUlMgPSBcImNsYXNzaWZpZXJzXCIsXG4gIC8qKiB1cmxzICovXG4gIFVSTFMgPSBcInVybHNcIixcbiAgLyoqIHNjcmlwdHMgKi9cbiAgU0NSSVBUUyA9IFwic2NyaXB0c1wiLFxuICAvKiogZ3VpLXNjcmlwdHMgKi9cbiAgR1VJX0hZUEhFTl9TQ1JJUFRTID0gXCJndWktc2NyaXB0c1wiLFxuICAvKiogZW50cnktcG9pbnRzICovXG4gIEVOVFJZX0hZUEhFTl9QT0lOVFMgPSBcImVudHJ5LXBvaW50c1wiLFxuICAvKiogZGVwZW5kZW5jaWVzICovXG4gIERFUEVOREVOQ0lFUyA9IFwiZGVwZW5kZW5jaWVzXCIsXG4gIC8qKiBvcHRpb25hbC1kZXBlbmRlbmNpZXMgKi9cbiAgT1BUSU9OQUxfSFlQSEVOX0RFUEVOREVOQ0lFUyA9IFwib3B0aW9uYWwtZGVwZW5kZW5jaWVzXCIsXG4gIC8qKiBpbXBvcnQtbmFtZXMgKi9cbiAgSU1QT1JUX0hZUEhFTl9OQU1FUyA9IFwiaW1wb3J0LW5hbWVzXCIsXG4gIC8qKiBpbXBvcnQtbmFtZXNwYWNlcyAqL1xuICBJTVBPUlRfSFlQSEVOX05BTUVTUEFDRVMgPSBcImltcG9ydC1uYW1lc3BhY2VzXCIsXG59XG4iXX0=
|
|
@@ -7,7 +7,7 @@ const __1 = require("..");
|
|
|
7
7
|
* Python test code sample.
|
|
8
8
|
*/
|
|
9
9
|
class PytestSample extends __1.Component {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PytestSample", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PytestSample", version: "0.101.10" };
|
|
11
11
|
constructor(project, options) {
|
|
12
12
|
super(project);
|
|
13
13
|
new __1.SampleDir(project, options.testdir, {
|
package/lib/python/pytest.js
CHANGED
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const component_1 = require("../component");
|
|
6
6
|
const dependencies_1 = require("../dependencies");
|
|
7
7
|
class Pytest extends component_1.Component {
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pytest", version: "0.101.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pytest", version: "0.101.10" };
|
|
9
9
|
testMatch;
|
|
10
10
|
constructor(project, options = {}) {
|
|
11
11
|
super(project);
|
|
@@ -23,7 +23,7 @@ const PYTHON_PROJECT_NAME_REGEX = /^[A-Za-z0-9-_\.]+$/;
|
|
|
23
23
|
* @pjid python
|
|
24
24
|
*/
|
|
25
25
|
class PythonProject extends github_1.GitHubProject {
|
|
26
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonProject", version: "0.101.
|
|
26
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonProject", version: "0.101.10" };
|
|
27
27
|
/**
|
|
28
28
|
* Python module name (the project name, with any hyphens or periods replaced
|
|
29
29
|
* with underscores).
|
|
@@ -8,7 +8,7 @@ const sample_file_1 = require("../sample-file");
|
|
|
8
8
|
* Python code sample.
|
|
9
9
|
*/
|
|
10
10
|
class PythonSample extends component_1.Component {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonSample", version: "0.101.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonSample", version: "0.101.10" };
|
|
12
12
|
constructor(project, options) {
|
|
13
13
|
super(project);
|
|
14
14
|
new sample_file_1.SampleDir(project, options.dir, {
|
|
@@ -11,7 +11,7 @@ const semver_1 = require("../util/semver");
|
|
|
11
11
|
* @see https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format
|
|
12
12
|
*/
|
|
13
13
|
class RequirementsFile extends file_1.FileBase {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.RequirementsFile", version: "0.101.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.RequirementsFile", version: "0.101.10" };
|
|
15
15
|
packages = new Array();
|
|
16
16
|
packageProvider;
|
|
17
17
|
constructor(project, filePath, options) {
|
package/lib/python/setuppy.js
CHANGED
|
@@ -7,7 +7,7 @@ const file_1 = require("../file");
|
|
|
7
7
|
* Python packaging script where package metadata can be placed.
|
|
8
8
|
*/
|
|
9
9
|
class SetupPy extends file_1.FileBase {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.SetupPy", version: "0.101.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.SetupPy", version: "0.101.10" };
|
|
11
11
|
setupConfig;
|
|
12
12
|
constructor(project, options) {
|
|
13
13
|
super(project, "setup.py");
|
package/lib/python/setuptools.js
CHANGED
|
@@ -9,7 +9,7 @@ const dependencies_1 = require("../dependencies");
|
|
|
9
9
|
* Manages packaging through setuptools with a setup.py script.
|
|
10
10
|
*/
|
|
11
11
|
class Setuptools extends component_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Setuptools", version: "0.101.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Setuptools", version: "0.101.10" };
|
|
13
13
|
publishTask;
|
|
14
14
|
/**
|
|
15
15
|
* A task that uploads the package to the Test PyPI repository.
|