@codedrifters/configulator 0.0.49 → 0.0.50

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.
@@ -1,4 +1,4 @@
1
- import { Component, Project } from "projen/lib";
1
+ import { Component, Project, Task } from "projen/lib";
2
2
  import { BuildWorkflowOptions } from "projen/lib/build";
3
3
  import { NodeProject } from "projen/lib/javascript";
4
4
  import { TurboRepoTask } from "./turbo-repo-task";
@@ -152,6 +152,12 @@ export interface TurboRepoOptions {
152
152
  * Cache settings, if using remote cache.
153
153
  */
154
154
  readonly remoteCacheOptions?: RemoteCacheOptions;
155
+ /**
156
+ * Env Args that will bre added to turbo's build:all task
157
+ *
158
+ * @default: {}
159
+ */
160
+ readonly buildAllTaskEnvVars?: Record<string, string>;
155
161
  }
156
162
  export declare class TurboRepo extends Component {
157
163
  readonly project: NodeProject;
@@ -282,8 +288,16 @@ export declare class TurboRepo extends Component {
282
288
  * is this the root project?
283
289
  */
284
290
  readonly isRootProject: boolean;
291
+ /**
292
+ * Turbo's build:all task at the root of the monorepo.
293
+ *
294
+ * This is a normal projen task that runs the root turbo task.
295
+ */
296
+ readonly buildAllTask?: Task;
285
297
  /**
286
298
  * Main turbo:build task
299
+ *
300
+ * This is a special Turbo task
287
301
  */
288
302
  readonly buildTask: TurboRepoTask;
289
303
  /**
@@ -310,6 +324,16 @@ export declare class TurboRepo extends Component {
310
324
  * Sub-Tasks to run
311
325
  */
312
326
  readonly tasks: Array<TurboRepoTask>;
327
+ /**
328
+ * Env Args that will bre added to turbo's build:all task
329
+ */
330
+ readonly buildAllTaskEnvVars: Record<string, string>;
313
331
  constructor(project: NodeProject, options?: TurboRepoOptions);
332
+ /**
333
+ * Add an env var to the global env vars for all tasks.
334
+ * This will also become an input for the build:all task cache at the root.
335
+ */
336
+ addGlobalEnvVar(name: string, value: string): void;
337
+ activateBranchNameEnvVar(): void;
314
338
  preSynthesize(): void;
315
339
  }
@@ -46,7 +46,7 @@ class TurboRepo extends lib_1.Component {
46
46
  **************************************************************************/
47
47
  this.extends = options.extends ?? (this.isRootProject ? [] : ["//"]);
48
48
  this.globalDependencies = options.globalDependencies ?? [];
49
- this.globalEnv = ["BRANCH_NAME", ...(options.globalEnv ?? [])];
49
+ this.globalEnv = options.globalEnv ?? [];
50
50
  this.globalPassThroughEnv = options.globalPassThroughEnv ?? [];
51
51
  this.ui = options.ui ?? "stream";
52
52
  this.dangerouslyDisablePackageManagerCheck =
@@ -55,6 +55,7 @@ class TurboRepo extends lib_1.Component {
55
55
  this.daemon = options.daemon ?? true;
56
56
  this.envMode = options.envMode ?? "strict";
57
57
  this.remoteCacheOptions = options.remoteCacheOptions;
58
+ this.buildAllTaskEnvVars = options.buildAllTaskEnvVars ?? {};
58
59
  /***************************************************************************
59
60
  *
60
61
  * Turbo Build Task
@@ -86,37 +87,43 @@ class TurboRepo extends lib_1.Component {
86
87
  /**
87
88
  * Create and configure the build all task.
88
89
  */
89
- const buildAll = this.project.tasks.addTask(exports.ROOT_CI_TASK_NAME, {
90
+ this.buildAllTask = this.project.tasks.addTask(exports.ROOT_CI_TASK_NAME, {
90
91
  description: "Root build followed by sub-project builds. Mimics the CI build process in one step.",
91
92
  });
92
- buildAll.exec("turbo telemetry disable");
93
+ this.buildAllTask.exec("turbo telemetry disable");
94
+ /**
95
+ * Any env vars that may need to be added to the build all task.
96
+ */
97
+ if (this.buildAllTaskEnvVars) {
98
+ Object.entries(this.buildAllTaskEnvVars).forEach(([name, value]) => {
99
+ this.addGlobalEnvVar(name, value);
100
+ });
101
+ }
93
102
  /**
94
103
  * No remote cache in use, so run the root turbo task to build all
95
104
  * sub-projects locally.
96
105
  */
97
106
  if (!this.remoteCacheOptions) {
98
- buildAll.exec(`turbo ${exports.ROOT_TURBO_TASK_NAME} --summarize --concurrency=10`);
107
+ this.buildAllTask.exec(`turbo ${exports.ROOT_TURBO_TASK_NAME} --summarize --concurrency=10`);
99
108
  }
100
109
  else {
101
110
  /**
102
111
  * Remote cache in use, so run the root turbo task to build all
103
112
  * sub-projects using the remote cache.
104
113
  */
105
- buildAll.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
114
+ this.buildAllTask.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
106
115
  condition: '[ ! -n "$CI" ]',
107
116
  env: {
108
117
  TURBO_ENDPOINT: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.endpointParamName} --query Parameter.Value --output text --profile ${this.remoteCacheOptions.profileName})`,
109
118
  TURBO_TOKEN: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.tokenParamName} --query Parameter.Value --output text --profile ${this.remoteCacheOptions.profileName})`,
110
- BRANCH_NAME: "$(git rev-parse --abbrev-ref HEAD)",
111
119
  },
112
120
  });
113
121
  // running in CI, We'll depend on OIDC auth.
114
- buildAll.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
122
+ this.buildAllTask.exec(`turbo turbo:build --summarize --concurrency=10 --cache=remote:rw --api=$TURBO_ENDPOINT --token=$TURBO_TOKEN --team=${this.remoteCacheOptions.teamName}`, {
115
123
  condition: '[ -n "$CI" ]',
116
124
  env: {
117
125
  TURBO_ENDPOINT: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.endpointParamName} --query Parameter.Value --output text)`,
118
126
  TURBO_TOKEN: `$(aws ssm get-parameter --name ${this.remoteCacheOptions.tokenParamName} --query Parameter.Value --output text)`,
119
- BRANCH_NAME: "$(git rev-parse --abbrev-ref HEAD)",
120
127
  },
121
128
  });
122
129
  }
@@ -154,6 +161,25 @@ class TurboRepo extends lib_1.Component {
154
161
  this.tasks.push(this.preCompileTask, this.compileTask, this.postCompileTask, this.testTask, this.packageTask);
155
162
  }
156
163
  }
164
+ /**
165
+ * Add an env var to the global env vars for all tasks.
166
+ * This will also become an input for the build:all task cache at the root.
167
+ */
168
+ addGlobalEnvVar(name, value) {
169
+ /**
170
+ * Add env var to global task env
171
+ */
172
+ this.buildAllTask?.env(name, value);
173
+ /**
174
+ * Add to global env vars for all tasks.
175
+ */
176
+ if (this.isRootProject) {
177
+ this.globalEnv.push(name);
178
+ }
179
+ }
180
+ activateBranchNameEnvVar() {
181
+ this.addGlobalEnvVar("BRANCH_NAME", "$(git rev-parse --abbrev-ref HEAD)");
182
+ }
157
183
  preSynthesize() {
158
184
  /**
159
185
  * Add any local workspace specific deps to dependsOn so that we know
@@ -268,4 +294,4 @@ TurboRepo.buildWorkflowOptions = (remoteCacheOptions) => {
268
294
  ],
269
295
  };
270
296
  };
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90dXJiby90dXJiby1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUEwRTtBQUUxRSx1RUFBa0U7QUFFbEUsdURBQWtEO0FBRWxEOzs7O2dGQUlnRjtBQUVuRSxRQUFBLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztBQUNyQyxRQUFBLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQW1LN0MsTUFBYSxTQUFVLFNBQVEsZUFBUztJQUN0Qzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFZLEVBQWtCLEVBQUUsQ0FBQyxDQUFDLFlBQVksU0FBUyxDQUFDO1FBQzNFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQWlNRCxZQUNrQixPQUFvQixFQUNwQyxVQUE0QixFQUFFO1FBRTlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFOdEM7O1dBRUc7UUFDYSxVQUFLLEdBQXlCLEVBQUUsQ0FBQztRQVEvQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFOUM7O1dBRUc7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVEOztXQUVHO1FBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENB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QU8sR0FBRyxDQUFDO2dCQUNiLENBQUMsRUFDRDtvQkFDRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUU7aUJBQ25DLENBQ3pCO2FBQ0o7U0FDRixDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7QUFsZEgsOEJBbWRDO0FBMWNlLDhCQUFvQixHQUFHLENBQ25DLGtCQUFzQyxFQUNQLEVBQUU7SUFDakMsT0FBTztRQUNMLFdBQVcsRUFBRTtZQUNYLFFBQVEsRUFBRSwrQkFBYSxDQUFDLEtBQUs7WUFDN0IsT0FBTyxFQUFFLCtCQUFhLENBQUMsS0FBSztTQUM3QjtRQUNELGFBQWEsRUFBRTtZQUNiO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSwwQ0FBMEM7Z0JBQ2hELElBQUksRUFBRTtvQkFDSixDQUFDLGdCQUFnQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsUUFBUTtvQkFDL0MsQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXO29CQUMzQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSztpQkFDakM7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMsQUFwQmlDLENBb0JoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRmlsZUJhc2UsIEpzb25GaWxlLCBQcm9qZWN0LCBUYXNrIH0gZnJvbSBcInByb2plbi9saWJcIjtcbmltcG9ydCB7IEJ1aWxkV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcInByb2plbi9saWIvYnVpbGRcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24gfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IFR1cmJvUmVwb1Rhc2sgfSBmcm9tIFwiLi90dXJiby1yZXBvLXRhc2tcIjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKiBUdXJibyBSZXBvIENvbmZpZ1xuICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCBjb25zdCBST09UX1RVUkJPX1RBU0tfTkFNRSA9IFwidHVyYm86YnVpbGRcIjtcbmV4cG9ydCBjb25zdCBST09UX0NJX1RBU0tfTkFNRSA9IFwiYnVpbGQ6YWxsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIExvY2FsIHByb2ZpbGUgbmFtZSB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgY2FjaGUgZW5kcG9pbnQgYW5kIHRva2VuLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogT0lEQyByb2xlIHRvIGFzc3VtZSB3aGVuIGZldGNoaW5nIHRoZSBjYWNoZSBlbmRwb2ludCBhbmQgdG9rZW4uXG4gICAqL1xuICByZWFkb25seSBvaWRjUm9sZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGUgcGFyYW1zIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlIGVuZHBvaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRQYXJhbU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBmb3IgdGhlIHBhcmFtcyB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZSdzIEFQSSB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuUGFyYW1OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRlYW0gbmFtZSB1c2VkIGluIHJlbW90ZSBjYWNoZSBjb21tYW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgdGVhbU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUdXJib1JlcG9PcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdHVyYm9yZXBvIHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHNwZWNpZmllZCBpbiB2ZXJzaW9ucyBmaWxlXG4gICAqL1xuICByZWFkb25seSB0dXJib1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVuZCBmcm9tIHRoZSByb290IHR1cmJvLmpzb24gdG8gY3JlYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFja2FnZSB1c2luZyBQYWNrYWdlIENvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb25seSB2YWxpZCB2YWx1ZSBmb3IgZXh0ZW5kcyBpcyBbXCIvL1wiXSB0byBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uLlxuICAgKiBJZiBleHRlbmRzIGlzIHVzZWQgaW4gdGhlIHJvb3QgdHVyYm8uanNvbiwgaXQgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBhbGwgdGFzayBoYXNoZXMuIElmIGFueSBmaWxlIG1hdGNoaW5nIHRoZXNlIGdsb2JzIGNoYW5nZXMsIGFsbCB0YXNrcyB3aWxsIG1pc3MgY2FjaGUuIEdsb2JzIGFyZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdHVyYm8uanNvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYWxsIGZpbGVzIGluIHNvdXJjZSBjb250cm9sIGluIHRoZSBXb3Jrc3BhY2Ugcm9vdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGdsb2JhbCBoYXNoLlxuICAgKlxuICAgKiBHbG9icyBtdXN0IGJlIGluIHRoZSByZXBvc2l0b3J5J3Mgc291cmNlIGNvbnRyb2wgcm9vdC4gR2xvYnMgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeSBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxkZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbERlcGVuZGVuY2llcz86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBpbXBhY3QgdGhlIGhhc2ggb2YgYWxsIHRhc2tzLiBBbnkgY2hhbmdlIHRvIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGNhdXNlIGFsbCB0YXNrcyB0byBtaXNzIGNhY2hlLlxuICAgKlxuICAgKiBGb3IgbW9yZSBvbiB3aWxkY2FyZCBhbmQgbmVnYXRpb24gc3ludGF4LCBzZWUgdGhlIGVudiBzZWN0aW9uLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbEVudj86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byB0YXNrcy5cbiAgICogVXNpbmcgdGhpcyBrZXkgb3B0cyBhbGwgdGFza3MgaW50byBTdHJpY3RcbiAgICogRW52aXJvbm1lbnQgVmFyaWFibGUgTW9kZS5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCBUdXJib3JlcG8gaGFzIGEgYnVpbHQtaW4gc2V0IG9mIGdsb2JhbCBwYXNzdGhyb3VnaCB2YXJpYWJsZXNcbiAgICogZm9yIGNvbW1vbiBjYXNlcywgbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpc1xuICAgKiBpbmNsdWRlcyB2YXJpYWJsZXMgbGlrZSBIT01FLCBQQVRILCBBUFBEQVRBLCBTSEVMTCwgUFdELCBhbmQgbW9yZS4gVGhlIGZ1bGxcbiAgICogbGlzdCBjYW4gYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBQYXNzdGhyb3VnaCB2YWx1ZXMgZG8gbm90IGNvbnRyaWJ1dGUgdG8gaGFzaGVzIGZvciBjYWNoaW5nXG4gICAqXG4gICAqIElmIHlvdSB3YW50IGNoYW5nZXMgaW4gdGhlc2UgdmFyaWFibGVzIHRvIGNhdXNlIGNhY2hlIG1pc3NlcywgeW91IHdpbGwgbmVlZFxuICAgKiB0byBpbmNsdWRlIHRoZW0gaW4gZW52IG9yIGdsb2JhbEVudi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFscGFzc3Rocm91Z2hlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbFBhc3NUaHJvdWdoRW52PzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyZWFtXCJcbiAgICpcbiAgICogU2VsZWN0IGEgdGVybWluYWwgVUkgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBcInR1aVwiIGFsbG93cyBmb3Igdmlld2luZyBlYWNoIGxvZyBhdCBvbmNlIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB0YXNrLlxuICAgKiBcInN0cmVhbVwiIG91dHB1dHMgbG9ncyBhcyB0aGV5IGNvbWUgaW4gYW5kIGlzIG5vdCBpbnRlcmFjdGl2ZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jdWlcbiAgICovXG4gIHJlYWRvbmx5IHVpPzogXCJ0dWlcIiB8IFwic3RyZWFtXCI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBmYWxzZVxuICAgKlxuICAgKiBUdXJib3JlcG8gdXNlcyB5b3VyIHJlcG9zaXRvcnkncyBsb2NrZmlsZSB0byBkZXRlcm1pbmUgY2FjaGluZyBiZWhhdmlvcixcbiAgICogUGFja2FnZSBHcmFwaHMsIGFuZCBtb3JlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIHVzZSB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGRcbiAgICogdG8gaGVscCB5b3Ugc3RhYmlsaXplIHlvdXIgVHVyYm9yZXBvLlxuICAgKlxuICAgKiBUbyBoZWxwIHdpdGggaW5jcmVtZW50YWwgbWlncmF0aW9uIG9yIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IGNhbid0IHVzZVxuICAgKiB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGQsIHlvdSBtYXkgdXNlXG4gICAqIC0tZGFuZ2Vyb3VzbHktZGlzYWJsZS1wYWNrYWdlLW1hbmFnZXItY2hlY2sgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGFuZFxuICAgKiBhc3N1bWUgdGhlIHJpc2tzIG9mIHVuc3RhYmxlIGxvY2tmaWxlcyBwcm9kdWNpbmcgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cbiAgICogV2hlbiBkaXNhYmxlZCwgVHVyYm9yZXBvIHdpbGwgYXR0ZW1wdCBhIGJlc3QtZWZmb3J0IGRpc2NvdmVyeSBvZiB0aGVcbiAgICogaW50ZW5kZWQgcGFja2FnZSBtYW5hZ2VyIG1lYW50IGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFuZ2Vyb3VzbHlkaXNhYmxlcGFja2FnZW1hbmFnZXJjaGVja1xuICAgKi9cbiAgcmVhZG9ubHkgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcIi50dXJiby9jYWNoZVwiXG4gICAqXG4gICAqIFNwZWNpZnkgdGhlIGZpbGVzeXN0ZW0gY2FjaGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNjYWNoZWRpclxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiB0cnVlXG4gICAqXG4gICAqIFR1cmJvcmVwbyBydW5zIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRvIHByZS1jYWxjdWxhdGUgc29tZSBleHBlbnNpdmVcbiAgICogb3BlcmF0aW9ucy4gVGhpcyBzdGFuZGFsb25lIHByb2Nlc3MgKGRhZW1vbikgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sXG4gICAqIGFuZCBub3QgcmVxdWlyZWQgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0dXJiby5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFlbW9uXG4gICAqL1xuICByZWFkb25seSBkYWVtb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJpY3RcIlxuICAgKlxuICAgKiBUdXJib3JlcG8ncyBFbnZpcm9ubWVudCBNb2RlcyBhbGxvdyB5b3UgdG8gY29udHJvbCB3aGljaCBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBhIHRhc2sgYXQgcnVudGltZTpcbiAgICpcbiAgICpcInN0cmljdFwiOiBGaWx0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG9ubHkgdGhvc2UgdGhhdCBhcmUgc3BlY2lmaWVkXG4gICAqIGluIHRoZSBlbnYgYW5kIGdsb2JhbEVudiBrZXlzIGluIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIFwibG9vc2VcIjogQWxsb3cgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MgdG8gYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNlbnZtb2RlXG4gICAqL1xuICByZWFkb25seSBlbnZNb2RlPzogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBDYWNoZSBTZXR0aW5nc1xuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQ2FjaGUgc2V0dGluZ3MsIGlmIHVzaW5nIHJlbW90ZSBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW90ZUNhY2hlT3B0aW9ucz86IFJlbW90ZUNhY2hlT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIFR1cmJvUmVwbyBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTdGF0aWMgbWV0aG9kIHRvIGRpc2NvdmVydCB0dXJibyBpbiBhIHByb2plY3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBUdXJib1JlcG8gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRGVmaW5lZCA9IChjOiBDb21wb25lbnQpOiBjIGlzIFR1cmJvUmVwbyA9PiBjIGluc3RhbmNlb2YgVHVyYm9SZXBvO1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0RlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBidWlsZFdvcmtmbG93T3B0aW9ucyA9IChcbiAgICByZW1vdGVDYWNoZU9wdGlvbnM6IFJlbW90ZUNhY2hlT3B0aW9ucyxcbiAgKTogUGFydGlhbDxCdWlsZFdvcmtmbG93T3B0aW9ucz4gPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBwcmVCdWlsZFN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFXUyBDcmVkcyBmb3IgU1NNXCIsXG4gICAgICAgICAgdXNlczogXCJhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY0XCIsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgW1wicm9sZS10by1hc3N1bWVcIl06IHJlbW90ZUNhY2hlT3B0aW9ucy5vaWRjUm9sZSxcbiAgICAgICAgICAgIFtcImF3cy1yZWdpb25cIl06IFwidXMtZWFzdC0xXCIsXG4gICAgICAgICAgICBbXCJyb2xlLWR1cmF0aW9uLXNlY29uZHNcIl06IFwiOTAwXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0dXJib3JlcG8gdG8gdXNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR1cmJvVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlbmQgZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uIHRvIGNyZWF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIHBhY2thZ2UgdXNpbmcgUGFja2FnZSBDb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogVGhlIG9ubHkgdmFsaWQgdmFsdWUgZm9yIGV4dGVuZHMgaXMgW1wiLy9cIl0gdG8gaW5oZXJpdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbi5cbiAgICogSWYgZXh0ZW5kcyBpcyB1c2VkIGluIHRoZSByb290IHR1cmJvLmpzb24sIGl0IHdpbGwgYmUgaWdub3JlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZXh0ZW5kc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dGVuZHM6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9icyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gYWxsIHRhc2sgaGFzaGVzLiBJZiBhbnkgZmlsZSBtYXRjaGluZyB0aGVzZSBnbG9icyBjaGFuZ2VzLCBhbGwgdGFza3Mgd2lsbCBtaXNzIGNhY2hlLiBHbG9icyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBmaWxlcyBpbiBzb3VyY2UgY29udHJvbCBpbiB0aGUgV29ya3NwYWNlIHJvb3QgYXJlIGluY2x1ZGVkIGluIHRoZSBnbG9iYWwgaGFzaC5cbiAgICpcbiAgICogR2xvYnMgbXVzdCBiZSBpbiB0aGUgcmVwb3NpdG9yeSdzIHNvdXJjZSBjb250cm9sIHJvb3QuIEdsb2JzIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkgYXJlbid0IHN1cHBvcnRlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gaW1wYWN0IHRoZSBoYXNoIG9mIGFsbCB0YXNrcy4gQW55IGNoYW5nZSB0byB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBjYXVzZSBhbGwgdGFza3MgdG8gbWlzcyBjYWNoZS5cbiAgICpcbiAgICogRm9yIG1vcmUgb24gd2lsZGNhcmQgYW5kIG5lZ2F0aW9uIHN5bnRheCwgc2VlIHRoZSBlbnYgc2VjdGlvbi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRW52OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGFza3MuXG4gICAqIFVzaW5nIHRoaXMga2V5IG9wdHMgYWxsIHRhc2tzIGludG8gU3RyaWN0XG4gICAqIEVudmlyb25tZW50IFZhcmlhYmxlIE1vZGUuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgVHVyYm9yZXBvIGhhcyBhIGJ1aWx0LWluIHNldCBvZiBnbG9iYWwgcGFzc3Rocm91Z2ggdmFyaWFibGVzXG4gICAqIGZvciBjb21tb24gY2FzZXMsIGxpa2Ugb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXNcbiAgICogaW5jbHVkZXMgdmFyaWFibGVzIGxpa2UgSE9NRSwgUEFUSCwgQVBQREFUQSwgU0hFTEwsIFBXRCwgYW5kIG1vcmUuIFRoZSBmdWxsXG4gICAqIGxpc3QgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogUGFzc3Rocm91Z2ggdmFsdWVzIGRvIG5vdCBjb250cmlidXRlIHRvIGhhc2hlcyBmb3IgY2FjaGluZ1xuICAgKlxuICAgKiBJZiB5b3Ugd2FudCBjaGFuZ2VzIGluIHRoZXNlIHZhcmlhYmxlcyB0byBjYXVzZSBjYWNoZSBtaXNzZXMsIHlvdSB3aWxsIG5lZWRcbiAgICogdG8gaW5jbHVkZSB0aGVtIGluIGVudiBvciBnbG9iYWxFbnYuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbHBhc3N0aHJvdWdoZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmVhbVwiXG4gICAqXG4gICAqIFNlbGVjdCBhIHRlcm1pbmFsIFVJIGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogXCJ0dWlcIiBhbGxvd3MgZm9yIHZpZXdpbmcgZWFjaCBsb2cgYXQgb25jZSBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdGFzay5cbiAgICogXCJzdHJlYW1cIiBvdXRwdXRzIGxvZ3MgYXMgdGhleSBjb21lIGluIGFuZCBpcyBub3QgaW50ZXJhY3RpdmUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI3VpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdWk6IFwidHVpXCIgfCBcInN0cmVhbVwiO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogZmFsc2VcbiAgICpcbiAgICogVHVyYm9yZXBvIHVzZXMgeW91ciByZXBvc2l0b3J5J3MgbG9ja2ZpbGUgdG8gZGV0ZXJtaW5lIGNhY2hpbmcgYmVoYXZpb3IsXG4gICAqIFBhY2thZ2UgR3JhcGhzLCBhbmQgbW9yZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSB1c2UgdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkXG4gICAqIHRvIGhlbHAgeW91IHN0YWJpbGl6ZSB5b3VyIFR1cmJvcmVwby5cbiAgICpcbiAgICogVG8gaGVscCB3aXRoIGluY3JlbWVudGFsIG1pZ3JhdGlvbiBvciBpbiBzaXR1YXRpb25zIHdoZXJlIHlvdSBjYW4ndCB1c2VcbiAgICogdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkLCB5b3UgbWF5IHVzZVxuICAgKiAtLWRhbmdlcm91c2x5LWRpc2FibGUtcGFja2FnZS1tYW5hZ2VyLWNoZWNrIHRvIG9wdCBvdXQgb2YgdGhpcyBjaGVjayBhbmRcbiAgICogYXNzdW1lIHRoZSByaXNrcyBvZiB1bnN0YWJsZSBsb2NrZmlsZXMgcHJvZHVjaW5nIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG4gICAqIFdoZW4gZGlzYWJsZWQsIFR1cmJvcmVwbyB3aWxsIGF0dGVtcHQgYSBiZXN0LWVmZm9ydCBkaXNjb3Zlcnkgb2YgdGhlXG4gICAqIGludGVuZGVkIHBhY2thZ2UgbWFuYWdlciBtZWFudCBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Rhbmdlcm91c2x5ZGlzYWJsZXBhY2thZ2VtYW5hZ2VyY2hlY2tcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCIudHVyYm8vY2FjaGVcIlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoZSBmaWxlc3lzdGVtIGNhY2hlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jY2FjaGVkaXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjYWNoZURpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogdHJ1ZVxuICAgKlxuICAgKiBUdXJib3JlcG8gcnVucyBhIGJhY2tncm91bmQgcHJvY2VzcyB0byBwcmUtY2FsY3VsYXRlIHNvbWUgZXhwZW5zaXZlXG4gICAqIG9wZXJhdGlvbnMuIFRoaXMgc3RhbmRhbG9uZSBwcm9jZXNzIChkYWVtb24pIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLFxuICAgKiBhbmQgbm90IHJlcXVpcmVkIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdHVyYm8uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2RhZW1vblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhZW1vbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyaWN0XCJcbiAgICpcbiAgICogVHVyYm9yZXBvJ3MgRW52aXJvbm1lbnQgTW9kZXMgYWxsb3cgeW91IHRvIGNvbnRyb2wgd2hpY2ggZW52aXJvbm1lbnRcbiAgICogdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgdG8gYSB0YXNrIGF0IHJ1bnRpbWU6XG4gICAqXG4gICAqXCJzdHJpY3RcIjogRmlsdGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBvbmx5IHRob3NlIHRoYXQgYXJlIHNwZWNpZmllZFxuICAgKiBpbiB0aGUgZW52IGFuZCBnbG9iYWxFbnYga2V5cyBpbiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBcImxvb3NlXCI6IEFsbG93IGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBwcm9jZXNzIHRvIGJlIGF2YWlsYWJsZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZW52bW9kZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudk1vZGU6IHN0cmluZztcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogQ2FjaGUgU2V0dGluZ3NcbiAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENhY2hlIHNldHRpbmdzLCBpZiB1c2luZyByZW1vdGUgY2FjaGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVtb3RlQ2FjaGVPcHRpb25zPzogUmVtb3RlQ2FjaGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBpcyB0aGlzIHRoZSByb290IHByb2plY3Q/XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNSb290UHJvamVjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWFpbiB0dXJibzpidWlsZCB0YXNrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRUYXNrOiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZUNvbXBpbGVUYXNrPzogVHVyYm9SZXBvVGFzaztcbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZVRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvc3RDb21waWxlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdFRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2VUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICogU3ViLVRhc2tzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhc2tzOiBBcnJheTxUdXJib1JlcG9UYXNrPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgICBvcHRpb25zOiBUdXJib1JlcG9PcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy50dXJib1ZlcnNpb24gPSBvcHRpb25zLnR1cmJvVmVyc2lvbiA/PyBcIl4yLjAuMFwiO1xuICAgIHRoaXMuaXNSb290UHJvamVjdCA9IHByb2plY3QgPT09IHByb2plY3Qucm9vdDtcblxuICAgIC8qKlxuICAgICAqIEFkZCB0dXJib3JlcG8gcGFja2FnZSB0byByb290IHByb2plY3QuXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgcHJvamVjdC5hZGREZXZEZXBzKGB0dXJib0Ake3RoaXMudHVyYm9WZXJzaW9ufWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElnbm9yZSB0aGUgd29ya2luZyBjYWNoZSBmb3IgdHVyYm8uXG4gICAgICovXG4gICAgcHJvamVjdC5naXRpZ25vcmUuYWRkUGF0dGVybnMoXCIvLnR1cmJvXCIpO1xuICAgIHByb2plY3QubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhcIi8udHVyYm8vXCIpO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogU2V0IHNvbWUgZGVmYXVsdCBvcHRpb25zXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLmV4dGVuZHMgPSBvcHRpb25zLmV4dGVuZHMgPz8gKHRoaXMuaXNSb290UHJvamVjdCA/IFtdIDogW1wiLy9cIl0pO1xuICAgIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzID0gb3B0aW9ucy5nbG9iYWxEZXBlbmRlbmNpZXMgPz8gW107XG4gICAgdGhpcy5nbG9iYWxFbnYgPSBbXCJCUkFOQ0hfTkFNRVwiLCAuLi4ob3B0aW9ucy5nbG9iYWxFbnYgPz8gW10pXTtcbiAgICB0aGlzLmdsb2JhbFBhc3NUaHJvdWdoRW52ID0gb3B0aW9ucy5nbG9iYWxQYXNzVGhyb3VnaEVudiA/PyBbXTtcbiAgICB0aGlzLnVpID0gb3B0aW9ucy51aSA/PyBcInN0cmVhbVwiO1xuICAgIHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjayA9XG4gICAgICBvcHRpb25zLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2sgPz8gZmFsc2U7XG4gICAgdGhpcy5jYWNoZURpciA9IG9wdGlvbnMuY2FjaGVEaXIgPz8gXCIudHVyYm8vY2FjaGVcIjtcbiAgICB0aGlzLmRhZW1vbiA9IG9wdGlvbnMuZGFlbW9uID8/IHRydWU7XG4gICAgdGhpcy5lbnZNb2RlID0gb3B0aW9ucy5lbnZNb2RlID8/IFwic3RyaWN0XCI7XG4gICAgdGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMgPSBvcHRpb25zLnJlbW90ZUNhY2hlT3B0aW9ucztcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFR1cmJvIEJ1aWxkIFRhc2tcbiAgICAgKlxuICAgICAqIEFsbCB0dXJibyBjb25maWdzIGNvbnRhaW4gYSB0dXJibyBidWlsZCB0YXNrLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR1cmJvIGVudHJ5IHBvaW50IGRlZmluaXRpb24gZm9yIHRoZSB0dXJibzpidWlsZCB0YXNrLiBUaGlzIGV4aXN0c1xuICAgICAqIGluIGVhY2ggcHJvamVjdCBhbmQgaXMgd3JpdHRlbiB0b3QgaGUgdHVyYm8uanNvbiBmaWxlLiBUaGlzIHRhc2sgaXMgbm90XG4gICAgICogYSBwcm9qZW4gdGFzayBvciBhIE5vZGUgdGFzay5cbiAgICAgKi9cbiAgICB0aGlzLmJ1aWxkVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHRoaXMucHJvamVjdCwge1xuICAgICAgbmFtZTogUk9PVF9UVVJCT19UQVNLX05BTUUsXG4gICAgICBkZXBlbmRzT246IHRoaXMuaXNSb290UHJvamVjdCA/IFtgXiR7Uk9PVF9UVVJCT19UQVNLX05BTUV9YF0gOiBbXSxcbiAgICB9KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFR1cmJvIEJ1aWxkIEFsbCBUYXNrXG4gICAgICpcbiAgICAgKiBUaGUgUHJvamVuIGVudHJ5IHBvaW50LiBUaGlzIG9ubHkgZXhpc3RzIGluIHRoZSByb290IGFuZCBpcyBhIHByb2plblxuICAgICAqIHRhc2sgdGhhdCBjYW4gYmUgcnVuIHVzaW5nIHBucG0uXG4gICAgICpcbiAgICAgKiAtIFR1cm5zIG9mZiB0ZWxlbWV0cnlcbiAgICAgKiAtIFJ1bnMgcm9vdCB0dXJibyB0YXNrIHRvIGJ1aWxkIGFsbCBzdWItcHJvamVjdHMuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBpZiAodGhpcy5pc1Jvb3RQcm9qZWN0KSB7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZSBhbmQgY29uZmlndXJlIHRoZSBidWlsZCBhbGwgdGFzay5cbiAgICAgICAqL1xuICAgICAgY29uc3QgYnVpbGRBbGwgPSB0aGlzLnByb2plY3QudGFza3MuYWRkVGFzayhST09UX0NJX1RBU0tfTkFNRSwge1xuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIlJvb3QgYnVpbGQgZm9sbG93ZWQgYnkgc3ViLXByb2plY3QgYnVpbGRzLiBNaW1pY3MgdGhlIENJIGJ1aWxkIHByb2Nlc3MgaW4gb25lIHN0ZXAuXCIsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkQWxsLmV4ZWMoXCJ0dXJibyB0ZWxlbWV0cnkgZGlzYWJsZVwiKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBObyByZW1vdGUgY2FjaGUgaW4gdXNlLCBzbyBydW4gdGhlIHJvb3QgdHVyYm8gdGFzayB0byBidWlsZCBhbGxcbiAgICAgICAqIHN1Yi1wcm9qZWN0cyBsb2NhbGx5LlxuICAgICAgICovXG4gICAgICBpZiAoIXRoaXMucmVtb3RlQ2FjaGVPcHRpb25zKSB7XG4gICAgICAgIGJ1aWxkQWxsLmV4ZWMoXG4gICAgICAgICAgYHR1cmJvICR7Uk9PVF9UVVJCT19UQVNLX05BTUV9IC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTBgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW90ZSBjYWNoZSBpbiB1c2UsIHNvIHJ1biB0aGUgcm9vdCB0dXJibyB0YXNrIHRvIGJ1aWxkIGFsbFxuICAgICAgICAgKiBzdWItcHJvamVjdHMgdXNpbmcgdGhlIHJlbW90ZSBjYWNoZS5cbiAgICAgICAgICovXG4gICAgICAgIGJ1aWxkQWxsLmV4ZWMoXG4gICAgICAgICAgYHR1cmJvIHR1cmJvOmJ1aWxkIC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTAgLS1jYWNoZT1yZW1vdGU6cncgLS1hcGk9JFRVUkJPX0VORFBPSU5UIC0tdG9rZW49JFRVUkJPX1RPS0VOIC0tdGVhbT0ke3RoaXMucmVtb3RlQ2FjaGVPcHRpb25zLnRlYW1OYW1lfWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uZGl0aW9uOiAnWyAhIC1uIFwiJENJXCIgXScsXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgVFVSQk9fRU5EUE9JTlQ6IGAkKGF3cyBzc20gZ2V0LXBhcmFtZXRlciAtLW5hbWUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy5lbmRwb2ludFBhcmFtTmFtZX0gLS1xdWVyeSBQYXJhbWV0ZXIuVmFsdWUgLS1vdXRwdXQgdGV4dCAtLXByb2ZpbGUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy5wcm9maWxlTmFtZX0pYCxcbiAgICAgICAgICAgICAgVFVSQk9fVE9LRU46IGAkKGF3cyBzc20gZ2V0LXBhcmFtZXRlciAtLW5hbWUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50b2tlblBhcmFtTmFtZX0gLS1xdWVyeSBQYXJhbWV0ZXIuVmFsdWUgLS1vdXRwdXQgdGV4dCAtLXByb2ZpbGUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy5wcm9maWxlTmFtZX0pYCxcbiAgICAgICAgICAgICAgQlJBTkNIX05BTUU6IFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICAvLyBydW5uaW5nIGluIENJLCBXZSdsbCBkZXBlbmQgb24gT0lEQyBhdXRoLlxuICAgICAgICBidWlsZEFsbC5leGVjKFxuICAgICAgICAgIGB0dXJibyB0dXJibzpidWlsZCAtLXN1bW1hcml6ZSAtLWNvbmN1cnJlbmN5PTEwIC0tY2FjaGU9cmVtb3RlOnJ3IC0tYXBpPSRUVVJCT19FTkRQT0lOVCAtLXRva2VuPSRUVVJCT19UT0tFTiAtLXRlYW09JHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50ZWFtTmFtZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJ1sgLW4gXCIkQ0lcIiBdJyxcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICBUVVJCT19FTkRQT0lOVDogYCQoYXdzIHNzbSBnZXQtcGFyYW1ldGVyIC0tbmFtZSAke3RoaXMucmVtb3RlQ2FjaGVPcHRpb25zLmVuZHBvaW50UGFyYW1OYW1lfSAtLXF1ZXJ5IFBhcmFtZXRlci5WYWx1ZSAtLW91dHB1dCB0ZXh0KWAsXG4gICAgICAgICAgICAgIFRVUkJPX1RPS0VOOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMudG9rZW5QYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQpYCxcbiAgICAgICAgICAgICAgQlJBTkNIX05BTUU6IFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNVQi1QUk9KRUNUXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIHRhc2tzIGZvciB0aGUgdHlwaWNhbCBsaWZlY3ljbGUgZm9yIGFsbCBwcm9qZWN0IHByb2plY3RzLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5pc1Jvb3RQcm9qZWN0KSB7XG4gICAgICAvKipcbiAgICAgICAqIEFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHByb2plY3QuIEluY2x1ZGUgdGhlc2UgYXMgaW5wdXRzIHRvIHRoZVxuICAgICAgICogY29tcGlsZSByZWxhdGVkIHRhc2tzLlxuICAgICAgICovXG4gICAgICBjb25zdCBnZW5lcmF0ZWRGaWxlcyA9IHRoaXMucHJvamVjdC5jb21wb25lbnRzXG4gICAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIEZpbGVCYXNlID0+IGMgaW5zdGFuY2VvZiBGaWxlQmFzZSlcbiAgICAgICAgLm1hcCgoYykgPT4gYy5wYXRoKTtcblxuICAgICAgdGhpcy5wcmVDb21waWxlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwcmUtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcGlsZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6IFwiY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMucG9zdENvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwge1xuICAgICAgICBuYW1lOiBcInBvc3QtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGVzdFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgdGhpcy5wYWNrYWdlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwYWNrYWdlXCIsXG4gICAgICAgIGlucHV0czogW1wiLm5wbWlnbm9yZVwiXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YXNrcy5wdXNoKFxuICAgICAgICB0aGlzLnByZUNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLmNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLnBvc3RDb21waWxlVGFzayxcbiAgICAgICAgdGhpcy50ZXN0VGFzayxcbiAgICAgICAgdGhpcy5wYWNrYWdlVGFzayxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBBZGQgYW55IGxvY2FsIHdvcmtzcGFjZSBzcGVjaWZpYyBkZXBzIHRvIGRlcGVuZHNPbiBzbyB0aGF0IHdlIGtub3dcbiAgICAgKiBjb21waWxlIGhhcyBmaW5pc2hlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgYW55IGRpc3RyaWJ1dGlvbiBhcnRpZmFjdHMuXG4gICAgICpcbiAgICAgKiBEbyB0aGlzIGluIHByZXN5bnRoIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUgYWxsIHByb2plY3QgZGVwZW5kZW5jaWVzIGhhdmVcbiAgICAgKiBiZWVuIGRlZmluZWQgZmlyc3QuXG4gICAgICovXG4gICAgbGV0IG5leHREZXBlbmRzT24gPSB0aGlzLnByb2plY3QuZGVwcy5hbGxcbiAgICAgIC5maWx0ZXIoKGQpID0+IGQudmVyc2lvbiA9PT0gXCJ3b3Jrc3BhY2U6KlwiKVxuICAgICAgLm1hcCgoZCkgPT4gW2QubmFtZSwgUk9PVF9UVVJCT19UQVNLX05BTUVdLmpvaW4oXCIjXCIpKTtcblxuICAgIC8qKlxuICAgICAqIExvb3Agb3ZlciBhbGwgcHJvamVuIHRhc2tzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHR1cmJvIHRhc2tcbiAgICAgKiBkZWZpbml0aW9ucy4gQ2hhaW4gdGhlbSB0b2dldGhlciB1c2luZyBkZXBlbmRzT24sIGFsb25nIHdpdGggYW55IG91dHNpZGVcbiAgICAgKiBwYWNrYWdlIGRlcGVuZGVuY2llcy5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgKFxuICAgICAgICBbXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wcmVDb21waWxlVGFzaywgdGhpcy5wcmVDb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5jb21waWxlVGFzaywgdGhpcy5jb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wb3N0Q29tcGlsZVRhc2ssIHRoaXMucG9zdENvbXBpbGVUYXNrXSxcbiAgICAgICAgICBbdGhpcy5wcm9qZWN0LnRlc3RUYXNrLCB0aGlzLnRlc3RUYXNrXSxcbiAgICAgICAgICBbdGhpcy5wcm9qZWN0LnBhY2thZ2VUYXNrLCB0aGlzLnBhY2thZ2VUYXNrXSxcbiAgICAgICAgXSBhcyBBcnJheTxbVGFzaywgVHVyYm9SZXBvVGFza10+XG4gICAgICApLmZvckVhY2goKFtwalRhc2ssIHR1cmJvVGFza10pID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHN0ZXBzIGV4aXN0IGNoYWluIHVzaW5nIGRlcGVuZHNPblxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHBqVGFzayAmJiB0dXJib1Rhc2sgJiYgcGpUYXNrLnN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAobmV4dERlcGVuZHNPbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0dXJib1Rhc2suZGVwZW5kc09uLnB1c2goLi4ubmV4dERlcGVuZHNPbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHREZXBlbmRzT24gPSBbdHVyYm9UYXNrLm5hbWVdO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogT3RoZXJ3aXNlLCBpZiBhIHRhc2sgZG9lc24ndCBkbyBhbnl0aGluZywgZGVhY3RpdmF0ZSBpdC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0dXJib1Rhc2suaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogTWFpbiBidWlsZCBlbnRyeSBwb2ludCBkZXBlbmRzIG9uIHdoYXRldmVyIHdhcyBsYXN0LlxuICAgICAgICovXG4gICAgICB0aGlzLmJ1aWxkVGFzay5kZXBlbmRzT24ucHVzaCguLi5uZXh0RGVwZW5kc09uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBmb3IgdGhlIHR1cmJvIGNvbmZpZyBmaWxlLlxuICAgICAqL1xuICAgIGNvbnN0IGZpbGVOYW1lOiBzdHJpbmcgPSBcInR1cmJvLmpzb25cIjtcblxuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0aGF0IHR1cmJvIGNvbmZpZyBkb2Vzbid0IGVuZCB1cCBpbiBhbnkgcGFja2FnZSBkaXN0cmlidXRpb25zLlxuICAgICAqL1xuICAgIHRoaXMucHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGZpbGVOYW1lKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250ZW50IG9mIHRoaXMgWUFNTCBmaWxlIHdpbGwgYmUgcmVzb2x2ZWQgYXQgc3ludGggdGltZS4gQnkgdGhlbixcbiAgICAgKiBhbnkgc3ViLXByb2plY3RzIHdpbGwgYmUgZGVmaW5lZCBhbmQgdGhpcyB3aWxsIGJlIGEgY29tcGxldGUgbGlzdC5cbiAgICAgKi9cbiAgICBuZXcgSnNvbkZpbGUodGhpcy5wcm9qZWN0LCBmaWxlTmFtZSwge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGV4dGVuZHM6IHRoaXMuZXh0ZW5kcy5sZW5ndGggPyB0aGlzLmV4dGVuZHMgOiB1bmRlZmluZWQsXG4gICAgICAgIGdsb2JhbERlcGVuZGVuY2llczpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxEZXBlbmRlbmNpZXMubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2xvYmFsRW52OlxuICAgICAgICAgIHRoaXMuaXNSb290UHJvamVjdCAmJiB0aGlzLmdsb2JhbEVudi5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxFbnZcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWxQYXNzVGhyb3VnaEVudjpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudi5sZW5ndGhcbiAgICAgICAgICAgID8gdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudlxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHVpOiB0aGlzLmlzUm9vdFByb2plY3QgPyB0aGlzLnVpIDogdW5kZWZpbmVkLFxuICAgICAgICBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrOiB0aGlzLmlzUm9vdFByb2plY3RcbiAgICAgICAgICA/IHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVja1xuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBjYWNoZURpcjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5jYWNoZURpciA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGFlbW9uOiB0aGlzLmlzUm9vdFByb2plY3QgPyB0aGlzLmRhZW1vbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW52TW9kZTogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5lbnZNb2RlIDogdW5kZWZpbmVkLFxuICAgICAgICAvKipcbiAgICAgICAgICogQWxsIHRhc2tzXG4gICAgICAgICAqL1xuICAgICAgICB0YXNrczogdGhpcy50YXNrc1xuICAgICAgICAgIC5maWx0ZXIoKHRhc2spID0+IHRhc2suaXNBY3RpdmUpXG4gICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIHRhc2spID0+IHtcbiAgICAgICAgICAgICAgYWNjW3Rhc2submFtZV0gPSB7XG4gICAgICAgICAgICAgICAgLi4udGFzay50YXNrQ29uZmlnKCksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbdGhpcy5idWlsZFRhc2submFtZV06IHsgLi4udGhpcy5idWlsZFRhc2sudGFza0NvbmZpZygpIH0sXG4gICAgICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBzdXBlci5wcmVTeW50aGVzaXplKCk7XG4gIH1cbn1cbiJdfQ==
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90dXJiby90dXJiby1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUEwRTtBQUUxRSx1RUFBa0U7QUFFbEUsdURBQWtEO0FBRWxEOzs7O2dGQUlnRjtBQUVuRSxRQUFBLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztBQUNyQyxRQUFBLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQTBLN0MsTUFBYSxTQUFVLFNBQVEsZUFBUztJQUN0Qzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFZLEVBQWtCLEVBQUUsQ0FBQyxDQUFDLFlBQVksU0FBUyxDQUFDO1FBQzNFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQStNRCxZQUNrQixPQUFvQixFQUNwQyxVQUE0QixFQUFFO1FBRTlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFYdEM7O1dBRUc7UUFDYSxVQUFLLEdBQXlCLEVBQUUsQ0FBQztRQWEvQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFOUM7O1dBRUc7UUFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVEOztXQUVHO1FBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENB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QUMsS0FBSztTQUM3QjtRQUNELGFBQWEsRUFBRTtZQUNiO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSwwQ0FBMEM7Z0JBQ2hELElBQUksRUFBRTtvQkFDSixDQUFDLGdCQUFnQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsUUFBUTtvQkFDL0MsQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXO29CQUMzQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSztpQkFDakM7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMsQUFwQmlDLENBb0JoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRmlsZUJhc2UsIEpzb25GaWxlLCBQcm9qZWN0LCBUYXNrIH0gZnJvbSBcInByb2plbi9saWJcIjtcbmltcG9ydCB7IEJ1aWxkV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcInByb2plbi9saWIvYnVpbGRcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24gfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IFR1cmJvUmVwb1Rhc2sgfSBmcm9tIFwiLi90dXJiby1yZXBvLXRhc2tcIjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKiBUdXJibyBSZXBvIENvbmZpZ1xuICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCBjb25zdCBST09UX1RVUkJPX1RBU0tfTkFNRSA9IFwidHVyYm86YnVpbGRcIjtcbmV4cG9ydCBjb25zdCBST09UX0NJX1RBU0tfTkFNRSA9IFwiYnVpbGQ6YWxsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIExvY2FsIHByb2ZpbGUgbmFtZSB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgY2FjaGUgZW5kcG9pbnQgYW5kIHRva2VuLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogT0lEQyByb2xlIHRvIGFzc3VtZSB3aGVuIGZldGNoaW5nIHRoZSBjYWNoZSBlbmRwb2ludCBhbmQgdG9rZW4uXG4gICAqL1xuICByZWFkb25seSBvaWRjUm9sZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGUgcGFyYW1zIHVzZWQgdG8gc3RvcmUgdGhlIGNhY2hlIGVuZHBvaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRQYXJhbU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBmb3IgdGhlIHBhcmFtcyB1c2VkIHRvIHN0b3JlIHRoZSBjYWNoZSdzIEFQSSB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuUGFyYW1OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRlYW0gbmFtZSB1c2VkIGluIHJlbW90ZSBjYWNoZSBjb21tYW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgdGVhbU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUdXJib1JlcG9PcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdHVyYm9yZXBvIHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHNwZWNpZmllZCBpbiB2ZXJzaW9ucyBmaWxlXG4gICAqL1xuICByZWFkb25seSB0dXJib1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVuZCBmcm9tIHRoZSByb290IHR1cmJvLmpzb24gdG8gY3JlYXRlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFja2FnZSB1c2luZyBQYWNrYWdlIENvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb25seSB2YWxpZCB2YWx1ZSBmb3IgZXh0ZW5kcyBpcyBbXCIvL1wiXSB0byBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uLlxuICAgKiBJZiBleHRlbmRzIGlzIHVzZWQgaW4gdGhlIHJvb3QgdHVyYm8uanNvbiwgaXQgd2lsbCBiZSBpZ25vcmVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBhbGwgdGFzayBoYXNoZXMuIElmIGFueSBmaWxlIG1hdGNoaW5nIHRoZXNlIGdsb2JzIGNoYW5nZXMsIGFsbCB0YXNrcyB3aWxsIG1pc3MgY2FjaGUuIEdsb2JzIGFyZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdHVyYm8uanNvbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYWxsIGZpbGVzIGluIHNvdXJjZSBjb250cm9sIGluIHRoZSBXb3Jrc3BhY2Ugcm9vdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGdsb2JhbCBoYXNoLlxuICAgKlxuICAgKiBHbG9icyBtdXN0IGJlIGluIHRoZSByZXBvc2l0b3J5J3Mgc291cmNlIGNvbnRyb2wgcm9vdC4gR2xvYnMgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeSBhcmVuJ3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxkZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbERlcGVuZGVuY2llcz86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBpbXBhY3QgdGhlIGhhc2ggb2YgYWxsIHRhc2tzLiBBbnkgY2hhbmdlIHRvIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGNhdXNlIGFsbCB0YXNrcyB0byBtaXNzIGNhY2hlLlxuICAgKlxuICAgKiBGb3IgbW9yZSBvbiB3aWxkY2FyZCBhbmQgbmVnYXRpb24gc3ludGF4LCBzZWUgdGhlIGVudiBzZWN0aW9uLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbEVudj86IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3Ugd2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byB0YXNrcy5cbiAgICogVXNpbmcgdGhpcyBrZXkgb3B0cyBhbGwgdGFza3MgaW50byBTdHJpY3RcbiAgICogRW52aXJvbm1lbnQgVmFyaWFibGUgTW9kZS5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCBUdXJib3JlcG8gaGFzIGEgYnVpbHQtaW4gc2V0IG9mIGdsb2JhbCBwYXNzdGhyb3VnaCB2YXJpYWJsZXNcbiAgICogZm9yIGNvbW1vbiBjYXNlcywgbGlrZSBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpc1xuICAgKiBpbmNsdWRlcyB2YXJpYWJsZXMgbGlrZSBIT01FLCBQQVRILCBBUFBEQVRBLCBTSEVMTCwgUFdELCBhbmQgbW9yZS4gVGhlIGZ1bGxcbiAgICogbGlzdCBjYW4gYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgKlxuICAgKiBQYXNzdGhyb3VnaCB2YWx1ZXMgZG8gbm90IGNvbnRyaWJ1dGUgdG8gaGFzaGVzIGZvciBjYWNoaW5nXG4gICAqXG4gICAqIElmIHlvdSB3YW50IGNoYW5nZXMgaW4gdGhlc2UgdmFyaWFibGVzIHRvIGNhdXNlIGNhY2hlIG1pc3NlcywgeW91IHdpbGwgbmVlZFxuICAgKiB0byBpbmNsdWRlIHRoZW0gaW4gZW52IG9yIGdsb2JhbEVudi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFscGFzc3Rocm91Z2hlbnZcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbFBhc3NUaHJvdWdoRW52PzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyZWFtXCJcbiAgICpcbiAgICogU2VsZWN0IGEgdGVybWluYWwgVUkgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBcInR1aVwiIGFsbG93cyBmb3Igdmlld2luZyBlYWNoIGxvZyBhdCBvbmNlIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB0YXNrLlxuICAgKiBcInN0cmVhbVwiIG91dHB1dHMgbG9ncyBhcyB0aGV5IGNvbWUgaW4gYW5kIGlzIG5vdCBpbnRlcmFjdGl2ZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jdWlcbiAgICovXG4gIHJlYWRvbmx5IHVpPzogXCJ0dWlcIiB8IFwic3RyZWFtXCI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBmYWxzZVxuICAgKlxuICAgKiBUdXJib3JlcG8gdXNlcyB5b3VyIHJlcG9zaXRvcnkncyBsb2NrZmlsZSB0byBkZXRlcm1pbmUgY2FjaGluZyBiZWhhdmlvcixcbiAgICogUGFja2FnZSBHcmFwaHMsIGFuZCBtb3JlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIHVzZSB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGRcbiAgICogdG8gaGVscCB5b3Ugc3RhYmlsaXplIHlvdXIgVHVyYm9yZXBvLlxuICAgKlxuICAgKiBUbyBoZWxwIHdpdGggaW5jcmVtZW50YWwgbWlncmF0aW9uIG9yIGluIHNpdHVhdGlvbnMgd2hlcmUgeW91IGNhbid0IHVzZVxuICAgKiB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGQsIHlvdSBtYXkgdXNlXG4gICAqIC0tZGFuZ2Vyb3VzbHktZGlzYWJsZS1wYWNrYWdlLW1hbmFnZXItY2hlY2sgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGFuZFxuICAgKiBhc3N1bWUgdGhlIHJpc2tzIG9mIHVuc3RhYmxlIGxvY2tmaWxlcyBwcm9kdWNpbmcgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cbiAgICogV2hlbiBkaXNhYmxlZCwgVHVyYm9yZXBvIHdpbGwgYXR0ZW1wdCBhIGJlc3QtZWZmb3J0IGRpc2NvdmVyeSBvZiB0aGVcbiAgICogaW50ZW5kZWQgcGFja2FnZSBtYW5hZ2VyIG1lYW50IGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFuZ2Vyb3VzbHlkaXNhYmxlcGFja2FnZW1hbmFnZXJjaGVja1xuICAgKi9cbiAgcmVhZG9ubHkgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcIi50dXJiby9jYWNoZVwiXG4gICAqXG4gICAqIFNwZWNpZnkgdGhlIGZpbGVzeXN0ZW0gY2FjaGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNjYWNoZWRpclxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiB0cnVlXG4gICAqXG4gICAqIFR1cmJvcmVwbyBydW5zIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRvIHByZS1jYWxjdWxhdGUgc29tZSBleHBlbnNpdmVcbiAgICogb3BlcmF0aW9ucy4gVGhpcyBzdGFuZGFsb25lIHByb2Nlc3MgKGRhZW1vbikgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sXG4gICAqIGFuZCBub3QgcmVxdWlyZWQgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0dXJiby5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGFlbW9uXG4gICAqL1xuICByZWFkb25seSBkYWVtb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJpY3RcIlxuICAgKlxuICAgKiBUdXJib3JlcG8ncyBFbnZpcm9ubWVudCBNb2RlcyBhbGxvdyB5b3UgdG8gY29udHJvbCB3aGljaCBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBhIHRhc2sgYXQgcnVudGltZTpcbiAgICpcbiAgICpcInN0cmljdFwiOiBGaWx0ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG9ubHkgdGhvc2UgdGhhdCBhcmUgc3BlY2lmaWVkXG4gICAqIGluIHRoZSBlbnYgYW5kIGdsb2JhbEVudiBrZXlzIGluIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIFwibG9vc2VcIjogQWxsb3cgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MgdG8gYmUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNlbnZtb2RlXG4gICAqL1xuICByZWFkb25seSBlbnZNb2RlPzogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBDYWNoZSBTZXR0aW5nc1xuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQ2FjaGUgc2V0dGluZ3MsIGlmIHVzaW5nIHJlbW90ZSBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW90ZUNhY2hlT3B0aW9ucz86IFJlbW90ZUNhY2hlT3B0aW9ucztcblxuICAvKipcbiAgICogRW52IEFyZ3MgdGhhdCB3aWxsIGJyZSBhZGRlZCB0byB0dXJibydzIGJ1aWxkOmFsbCB0YXNrXG4gICAqXG4gICAqIEBkZWZhdWx0OiB7fVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRBbGxUYXNrRW52VmFycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJib1JlcG8gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogU3RhdGljIG1ldGhvZCB0byBkaXNjb3ZlcnQgdHVyYm8gaW4gYSBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogVHVyYm9SZXBvIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RlZmluZWQgPSAoYzogQ29tcG9uZW50KTogYyBpcyBUdXJib1JlcG8gPT4gYyBpbnN0YW5jZW9mIFR1cmJvUmVwbztcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNEZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYnVpbGRXb3JrZmxvd09wdGlvbnMgPSAoXG4gICAgcmVtb3RlQ2FjaGVPcHRpb25zOiBSZW1vdGVDYWNoZU9wdGlvbnMsXG4gICk6IFBhcnRpYWw8QnVpbGRXb3JrZmxvd09wdGlvbnM+ID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgcHJlQnVpbGRTdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBV1MgQ3JlZHMgZm9yIFNTTVwiLFxuICAgICAgICAgIHVzZXM6IFwiYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NFwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIFtcInJvbGUtdG8tYXNzdW1lXCJdOiByZW1vdGVDYWNoZU9wdGlvbnMub2lkY1JvbGUsXG4gICAgICAgICAgICBbXCJhd3MtcmVnaW9uXCJdOiBcInVzLWVhc3QtMVwiLFxuICAgICAgICAgICAgW1wicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCJdOiBcIjkwMFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdHVyYm9yZXBvIHRvIHVzZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0dXJib1ZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZW5kIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbiB0byBjcmVhdGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYSBwYWNrYWdlIHVzaW5nIFBhY2thZ2UgQ29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIFRoZSBvbmx5IHZhbGlkIHZhbHVlIGZvciBleHRlbmRzIGlzIFtcIi8vXCJdIHRvIGluaGVyaXQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSByb290IHR1cmJvLmpzb24uXG4gICAqIElmIGV4dGVuZHMgaXMgdXNlZCBpbiB0aGUgcm9vdCB0dXJiby5qc29uLCBpdCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2V4dGVuZHNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleHRlbmRzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYnMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGluIGFsbCB0YXNrIGhhc2hlcy4gSWYgYW55IGZpbGUgbWF0Y2hpbmcgdGhlc2UgZ2xvYnMgY2hhbmdlcywgYWxsIHRhc2tzIHdpbGwgbWlzcyBjYWNoZS4gR2xvYnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZXMgaW4gc291cmNlIGNvbnRyb2wgaW4gdGhlIFdvcmtzcGFjZSByb290IGFyZSBpbmNsdWRlZCBpbiB0aGUgZ2xvYmFsIGhhc2guXG4gICAqXG4gICAqIEdsb2JzIG11c3QgYmUgaW4gdGhlIHJlcG9zaXRvcnkncyBzb3VyY2UgY29udHJvbCByb290LiBHbG9icyBvdXRzaWRlIG9mIHRoZSByZXBvc2l0b3J5IGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdsb2JhbERlcGVuZGVuY2llczogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIGltcGFjdCB0aGUgaGFzaCBvZiBhbGwgdGFza3MuIEFueSBjaGFuZ2UgdG8gdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgY2F1c2UgYWxsIHRhc2tzIHRvIG1pc3MgY2FjaGUuXG4gICAqXG4gICAqIEZvciBtb3JlIG9uIHdpbGRjYXJkIGFuZCBuZWdhdGlvbiBzeW50YXgsIHNlZSB0aGUgZW52IHNlY3Rpb24uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGVudlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdsb2JhbEVudjogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRhc2tzLlxuICAgKiBVc2luZyB0aGlzIGtleSBvcHRzIGFsbCB0YXNrcyBpbnRvIFN0cmljdFxuICAgKiBFbnZpcm9ubWVudCBWYXJpYWJsZSBNb2RlLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIFR1cmJvcmVwbyBoYXMgYSBidWlsdC1pbiBzZXQgb2YgZ2xvYmFsIHBhc3N0aHJvdWdoIHZhcmlhYmxlc1xuICAgKiBmb3IgY29tbW9uIGNhc2VzLCBsaWtlIG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzXG4gICAqIGluY2x1ZGVzIHZhcmlhYmxlcyBsaWtlIEhPTUUsIFBBVEgsIEFQUERBVEEsIFNIRUxMLCBQV0QsIGFuZCBtb3JlLiBUaGUgZnVsbFxuICAgKiBsaXN0IGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIFBhc3N0aHJvdWdoIHZhbHVlcyBkbyBub3QgY29udHJpYnV0ZSB0byBoYXNoZXMgZm9yIGNhY2hpbmdcbiAgICpcbiAgICogSWYgeW91IHdhbnQgY2hhbmdlcyBpbiB0aGVzZSB2YXJpYWJsZXMgdG8gY2F1c2UgY2FjaGUgbWlzc2VzLCB5b3Ugd2lsbCBuZWVkXG4gICAqIHRvIGluY2x1ZGUgdGhlbSBpbiBlbnYgb3IgZ2xvYmFsRW52LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxwYXNzdGhyb3VnaGVudlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdsb2JhbFBhc3NUaHJvdWdoRW52OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJlYW1cIlxuICAgKlxuICAgKiBTZWxlY3QgYSB0ZXJtaW5hbCBVSSBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIFwidHVpXCIgYWxsb3dzIGZvciB2aWV3aW5nIGVhY2ggbG9nIGF0IG9uY2UgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIHRhc2suXG4gICAqIFwic3RyZWFtXCIgb3V0cHV0cyBsb2dzIGFzIHRoZXkgY29tZSBpbiBhbmQgaXMgbm90IGludGVyYWN0aXZlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiN1aVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVpOiBcInR1aVwiIHwgXCJzdHJlYW1cIjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqXG4gICAqIFR1cmJvcmVwbyB1c2VzIHlvdXIgcmVwb3NpdG9yeSdzIGxvY2tmaWxlIHRvIGRldGVybWluZSBjYWNoaW5nIGJlaGF2aW9yLFxuICAgKiBQYWNrYWdlIEdyYXBocywgYW5kIG1vcmUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgdXNlIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZFxuICAgKiB0byBoZWxwIHlvdSBzdGFiaWxpemUgeW91ciBUdXJib3JlcG8uXG4gICAqXG4gICAqIFRvIGhlbHAgd2l0aCBpbmNyZW1lbnRhbCBtaWdyYXRpb24gb3IgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3UgY2FuJ3QgdXNlXG4gICAqIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZCwgeW91IG1heSB1c2VcbiAgICogLS1kYW5nZXJvdXNseS1kaXNhYmxlLXBhY2thZ2UtbWFuYWdlci1jaGVjayB0byBvcHQgb3V0IG9mIHRoaXMgY2hlY2sgYW5kXG4gICAqIGFzc3VtZSB0aGUgcmlza3Mgb2YgdW5zdGFibGUgbG9ja2ZpbGVzIHByb2R1Y2luZyB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLlxuICAgKiBXaGVuIGRpc2FibGVkLCBUdXJib3JlcG8gd2lsbCBhdHRlbXB0IGEgYmVzdC1lZmZvcnQgZGlzY292ZXJ5IG9mIHRoZVxuICAgKiBpbnRlbmRlZCBwYWNrYWdlIG1hbmFnZXIgbWVhbnQgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYW5nZXJvdXNseWRpc2FibGVwYWNrYWdlbWFuYWdlcmNoZWNrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjazogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwiLnR1cmJvL2NhY2hlXCJcbiAgICpcbiAgICogU3BlY2lmeSB0aGUgZmlsZXN5c3RlbSBjYWNoZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2NhY2hlZGlyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2FjaGVEaXI6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IHRydWVcbiAgICpcbiAgICogVHVyYm9yZXBvIHJ1bnMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdG8gcHJlLWNhbGN1bGF0ZSBzb21lIGV4cGVuc2l2ZVxuICAgKiBvcGVyYXRpb25zLiBUaGlzIHN0YW5kYWxvbmUgcHJvY2VzcyAoZGFlbW9uKSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbixcbiAgICogYW5kIG5vdCByZXF1aXJlZCBmb3IgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHR1cmJvLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYWVtb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYWVtb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmljdFwiXG4gICAqXG4gICAqIFR1cmJvcmVwbydzIEVudmlyb25tZW50IE1vZGVzIGFsbG93IHlvdSB0byBjb250cm9sIHdoaWNoIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIHRvIGEgdGFzayBhdCBydW50aW1lOlxuICAgKlxuICAgKlwic3RyaWN0XCI6IEZpbHRlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gb25seSB0aG9zZSB0aGF0IGFyZSBzcGVjaWZpZWRcbiAgICogaW4gdGhlIGVudiBhbmQgZ2xvYmFsRW52IGtleXMgaW4gdHVyYm8uanNvbi5cbiAgICpcbiAgICogXCJsb29zZVwiOiBBbGxvdyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2VzcyB0byBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Vudm1vZGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbnZNb2RlOiBzdHJpbmc7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqXG4gICAqIENhY2hlIFNldHRpbmdzXG4gICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDYWNoZSBzZXR0aW5ncywgaWYgdXNpbmcgcmVtb3RlIGNhY2hlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbW90ZUNhY2hlT3B0aW9ucz86IFJlbW90ZUNhY2hlT3B0aW9ucztcblxuICAvKipcbiAgICogaXMgdGhpcyB0aGUgcm9vdCBwcm9qZWN0P1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzUm9vdFByb2plY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFR1cmJvJ3MgYnVpbGQ6YWxsIHRhc2sgYXQgdGhlIHJvb3Qgb2YgdGhlIG1vbm9yZXBvLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgbm9ybWFsIHByb2plbiB0YXNrIHRoYXQgcnVucyB0aGUgcm9vdCB0dXJibyB0YXNrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkQWxsVGFzaz86IFRhc2s7XG5cbiAgLyoqXG4gICAqIE1haW4gdHVyYm86YnVpbGQgdGFza1xuICAgKlxuICAgKiBUaGlzIGlzIGEgc3BlY2lhbCBUdXJibyB0YXNrXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRUYXNrOiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZUNvbXBpbGVUYXNrPzogVHVyYm9SZXBvVGFzaztcbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZVRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvc3RDb21waWxlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGVzdFRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2VUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICogU3ViLVRhc2tzIHRvIHJ1blxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhc2tzOiBBcnJheTxUdXJib1JlcG9UYXNrPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBFbnYgQXJncyB0aGF0IHdpbGwgYnJlIGFkZGVkIHRvIHR1cmJvJ3MgYnVpbGQ6YWxsIHRhc2tcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWlsZEFsbFRhc2tFbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgICBvcHRpb25zOiBUdXJib1JlcG9PcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy50dXJib1ZlcnNpb24gPSBvcHRpb25zLnR1cmJvVmVyc2lvbiA/PyBcIl4yLjAuMFwiO1xuICAgIHRoaXMuaXNSb290UHJvamVjdCA9IHByb2plY3QgPT09IHByb2plY3Qucm9vdDtcblxuICAgIC8qKlxuICAgICAqIEFkZCB0dXJib3JlcG8gcGFja2FnZSB0byByb290IHByb2plY3QuXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgcHJvamVjdC5hZGREZXZEZXBzKGB0dXJib0Ake3RoaXMudHVyYm9WZXJzaW9ufWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElnbm9yZSB0aGUgd29ya2luZyBjYWNoZSBmb3IgdHVyYm8uXG4gICAgICovXG4gICAgcHJvamVjdC5naXRpZ25vcmUuYWRkUGF0dGVybnMoXCIvLnR1cmJvXCIpO1xuICAgIHByb2plY3QubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhcIi8udHVyYm8vXCIpO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogU2V0IHNvbWUgZGVmYXVsdCBvcHRpb25zXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICB0aGlzLmV4dGVuZHMgPSBvcHRpb25zLmV4dGVuZHMgPz8gKHRoaXMuaXNSb290UHJvamVjdCA/IFtdIDogW1wiLy9cIl0pO1xuICAgIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzID0gb3B0aW9ucy5nbG9iYWxEZXBlbmRlbmNpZXMgPz8gW107XG4gICAgdGhpcy5nbG9iYWxFbnYgPSBvcHRpb25zLmdsb2JhbEVudiA/PyBbXTtcbiAgICB0aGlzLmdsb2JhbFBhc3NUaHJvdWdoRW52ID0gb3B0aW9ucy5nbG9iYWxQYXNzVGhyb3VnaEVudiA/PyBbXTtcbiAgICB0aGlzLnVpID0gb3B0aW9ucy51aSA/PyBcInN0cmVhbVwiO1xuICAgIHRoaXMuZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjayA9XG4gICAgICBvcHRpb25zLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2sgPz8gZmFsc2U7XG4gICAgdGhpcy5jYWNoZURpciA9IG9wdGlvbnMuY2FjaGVEaXIgPz8gXCIudHVyYm8vY2FjaGVcIjtcbiAgICB0aGlzLmRhZW1vbiA9IG9wdGlvbnMuZGFlbW9uID8/IHRydWU7XG4gICAgdGhpcy5lbnZNb2RlID0gb3B0aW9ucy5lbnZNb2RlID8/IFwic3RyaWN0XCI7XG4gICAgdGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMgPSBvcHRpb25zLnJlbW90ZUNhY2hlT3B0aW9ucztcbiAgICB0aGlzLmJ1aWxkQWxsVGFza0VudlZhcnMgPSBvcHRpb25zLmJ1aWxkQWxsVGFza0VudlZhcnMgPz8ge307XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJibyBCdWlsZCBUYXNrXG4gICAgICpcbiAgICAgKiBBbGwgdHVyYm8gY29uZmlncyBjb250YWluIGEgdHVyYm8gYnVpbGQgdGFzay5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8qKlxuICAgICAqIFRoZSB0dXJibyBlbnRyeSBwb2ludCBkZWZpbml0aW9uIGZvciB0aGUgdHVyYm86YnVpbGQgdGFzay4gVGhpcyBleGlzdHNcbiAgICAgKiBpbiBlYWNoIHByb2plY3QgYW5kIGlzIHdyaXR0ZW4gdG90IGhlIHR1cmJvLmpzb24gZmlsZS4gVGhpcyB0YXNrIGlzIG5vdFxuICAgICAqIGEgcHJvamVuIHRhc2sgb3IgYSBOb2RlIHRhc2suXG4gICAgICovXG4gICAgdGhpcy5idWlsZFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayh0aGlzLnByb2plY3QsIHtcbiAgICAgIG5hbWU6IFJPT1RfVFVSQk9fVEFTS19OQU1FLFxuICAgICAgZGVwZW5kc09uOiB0aGlzLmlzUm9vdFByb2plY3QgPyBbYF4ke1JPT1RfVFVSQk9fVEFTS19OQU1FfWBdIDogW10sXG4gICAgfSk7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJibyBCdWlsZCBBbGwgVGFza1xuICAgICAqXG4gICAgICogVGhlIFByb2plbiBlbnRyeSBwb2ludC4gVGhpcyBvbmx5IGV4aXN0cyBpbiB0aGUgcm9vdCBhbmQgaXMgYSBwcm9qZW5cbiAgICAgKiB0YXNrIHRoYXQgY2FuIGJlIHJ1biB1c2luZyBwbnBtLlxuICAgICAqXG4gICAgICogLSBUdXJucyBvZmYgdGVsZW1ldHJ5XG4gICAgICogLSBSdW5zIHJvb3QgdHVyYm8gdGFzayB0byBidWlsZCBhbGwgc3ViLXByb2plY3RzLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKHRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgYnVpbGQgYWxsIHRhc2suXG4gICAgICAgKi9cbiAgICAgIHRoaXMuYnVpbGRBbGxUYXNrID0gdGhpcy5wcm9qZWN0LnRhc2tzLmFkZFRhc2soUk9PVF9DSV9UQVNLX05BTUUsIHtcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJSb290IGJ1aWxkIGZvbGxvd2VkIGJ5IHN1Yi1wcm9qZWN0IGJ1aWxkcy4gTWltaWNzIHRoZSBDSSBidWlsZCBwcm9jZXNzIGluIG9uZSBzdGVwLlwiLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJ1aWxkQWxsVGFzay5leGVjKFwidHVyYm8gdGVsZW1ldHJ5IGRpc2FibGVcIik7XG5cbiAgICAgIC8qKlxuICAgICAgICogQW55IGVudiB2YXJzIHRoYXQgbWF5IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1aWxkIGFsbCB0YXNrLlxuICAgICAgICovXG4gICAgICBpZiAodGhpcy5idWlsZEFsbFRhc2tFbnZWYXJzKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuYnVpbGRBbGxUYXNrRW52VmFycykuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkR2xvYmFsRW52VmFyKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogTm8gcmVtb3RlIGNhY2hlIGluIHVzZSwgc28gcnVuIHRoZSByb290IHR1cmJvIHRhc2sgdG8gYnVpbGQgYWxsXG4gICAgICAgKiBzdWItcHJvamVjdHMgbG9jYWxseS5cbiAgICAgICAqL1xuICAgICAgaWYgKCF0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucykge1xuICAgICAgICB0aGlzLmJ1aWxkQWxsVGFzay5leGVjKFxuICAgICAgICAgIGB0dXJibyAke1JPT1RfVFVSQk9fVEFTS19OQU1FfSAtLXN1bW1hcml6ZSAtLWNvbmN1cnJlbmN5PTEwYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdGUgY2FjaGUgaW4gdXNlLCBzbyBydW4gdGhlIHJvb3QgdHVyYm8gdGFzayB0byBidWlsZCBhbGxcbiAgICAgICAgICogc3ViLXByb2plY3RzIHVzaW5nIHRoZSByZW1vdGUgY2FjaGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJ1aWxkQWxsVGFzay5leGVjKFxuICAgICAgICAgIGB0dXJibyB0dXJibzpidWlsZCAtLXN1bW1hcml6ZSAtLWNvbmN1cnJlbmN5PTEwIC0tY2FjaGU9cmVtb3RlOnJ3IC0tYXBpPSRUVVJCT19FTkRQT0lOVCAtLXRva2VuPSRUVVJCT19UT0tFTiAtLXRlYW09JHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50ZWFtTmFtZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJ1sgISAtbiBcIiRDSVwiIF0nLFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIFRVUkJPX0VORFBPSU5UOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMuZW5kcG9pbnRQYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQgLS1wcm9maWxlICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMucHJvZmlsZU5hbWV9KWAsXG4gICAgICAgICAgICAgIFRVUkJPX1RPS0VOOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMudG9rZW5QYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQgLS1wcm9maWxlICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMucHJvZmlsZU5hbWV9KWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIC8vIHJ1bm5pbmcgaW4gQ0ksIFdlJ2xsIGRlcGVuZCBvbiBPSURDIGF1dGguXG4gICAgICAgIHRoaXMuYnVpbGRBbGxUYXNrLmV4ZWMoXG4gICAgICAgICAgYHR1cmJvIHR1cmJvOmJ1aWxkIC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTAgLS1jYWNoZT1yZW1vdGU6cncgLS1hcGk9JFRVUkJPX0VORFBPSU5UIC0tdG9rZW49JFRVUkJPX1RPS0VOIC0tdGVhbT0ke3RoaXMucmVtb3RlQ2FjaGVPcHRpb25zLnRlYW1OYW1lfWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uZGl0aW9uOiAnWyAtbiBcIiRDSVwiIF0nLFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIFRVUkJPX0VORFBPSU5UOiBgJChhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lICR7dGhpcy5yZW1vdGVDYWNoZU9wdGlvbnMuZW5kcG9pbnRQYXJhbU5hbWV9IC0tcXVlcnkgUGFyYW1ldGVyLlZhbHVlIC0tb3V0cHV0IHRleHQpYCxcbiAgICAgICAgICAgICAgVFVSQk9fVE9LRU46IGAkKGF3cyBzc20gZ2V0LXBhcmFtZXRlciAtLW5hbWUgJHt0aGlzLnJlbW90ZUNhY2hlT3B0aW9ucy50b2tlblBhcmFtTmFtZX0gLS1xdWVyeSBQYXJhbWV0ZXIuVmFsdWUgLS1vdXRwdXQgdGV4dClgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNVQi1QUk9KRUNUXG4gICAgICpcbiAgICAgKiBDcmVhdGVzIHRhc2tzIGZvciB0aGUgdHlwaWNhbCBsaWZlY3ljbGUgZm9yIGFsbCBwcm9qZWN0IHByb2plY3RzLlxuICAgICAqL1xuICAgIGlmICghdGhpcy5pc1Jvb3RQcm9qZWN0KSB7XG4gICAgICAvKipcbiAgICAgICAqIEFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHByb2plY3QuIEluY2x1ZGUgdGhlc2UgYXMgaW5wdXRzIHRvIHRoZVxuICAgICAgICogY29tcGlsZSByZWxhdGVkIHRhc2tzLlxuICAgICAgICovXG4gICAgICBjb25zdCBnZW5lcmF0ZWRGaWxlcyA9IHRoaXMucHJvamVjdC5jb21wb25lbnRzXG4gICAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIEZpbGVCYXNlID0+IGMgaW5zdGFuY2VvZiBGaWxlQmFzZSlcbiAgICAgICAgLm1hcCgoYykgPT4gYy5wYXRoKTtcblxuICAgICAgdGhpcy5wcmVDb21waWxlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwcmUtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcGlsZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6IFwiY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMucG9zdENvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwge1xuICAgICAgICBuYW1lOiBcInBvc3QtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKlwiLCAuLi5nZW5lcmF0ZWRGaWxlc10sXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGVzdFRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7IG5hbWU6IFwidGVzdFwiIH0pO1xuICAgICAgdGhpcy5wYWNrYWdlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwYWNrYWdlXCIsXG4gICAgICAgIGlucHV0czogW1wiLm5wbWlnbm9yZVwiXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YXNrcy5wdXNoKFxuICAgICAgICB0aGlzLnByZUNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLmNvbXBpbGVUYXNrLFxuICAgICAgICB0aGlzLnBvc3RDb21waWxlVGFzayxcbiAgICAgICAgdGhpcy50ZXN0VGFzayxcbiAgICAgICAgdGhpcy5wYWNrYWdlVGFzayxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbnYgdmFyIHRvIHRoZSBnbG9iYWwgZW52IHZhcnMgZm9yIGFsbCB0YXNrcy5cbiAgICogVGhpcyB3aWxsIGFsc28gYmVjb21lIGFuIGlucHV0IGZvciB0aGUgYnVpbGQ6YWxsIHRhc2sgY2FjaGUgYXQgdGhlIHJvb3QuXG4gICAqL1xuICBwdWJsaWMgYWRkR2xvYmFsRW52VmFyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIC8qKlxuICAgICAqIEFkZCBlbnYgdmFyIHRvIGdsb2JhbCB0YXNrIGVudlxuICAgICAqL1xuICAgIHRoaXMuYnVpbGRBbGxUYXNrPy5lbnYobmFtZSwgdmFsdWUpO1xuXG4gICAgLyoqXG4gICAgICogQWRkIHRvIGdsb2JhbCBlbnYgdmFycyBmb3IgYWxsIHRhc2tzLlxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIHRoaXMuZ2xvYmFsRW52LnB1c2gobmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFjdGl2YXRlQnJhbmNoTmFtZUVudlZhcigpIHtcbiAgICB0aGlzLmFkZEdsb2JhbEVudlZhcihcIkJSQU5DSF9OQU1FXCIsIFwiJChnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEKVwiKTtcbiAgfVxuXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogQWRkIGFueSBsb2NhbCB3b3Jrc3BhY2Ugc3BlY2lmaWMgZGVwcyB0byBkZXBlbmRzT24gc28gdGhhdCB3ZSBrbm93XG4gICAgICogY29tcGlsZSBoYXMgZmluaXNoZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGFueSBkaXN0cmlidXRpb24gYXJ0aWZhY3RzLlxuICAgICAqXG4gICAgICogRG8gdGhpcyBpbiBwcmVzeW50aCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIGFsbCBwcm9qZWN0IGRlcGVuZGVuY2llcyBoYXZlXG4gICAgICogYmVlbiBkZWZpbmVkIGZpcnN0LlxuICAgICAqL1xuICAgIGxldCBuZXh0RGVwZW5kc09uID0gdGhpcy5wcm9qZWN0LmRlcHMuYWxsXG4gICAgICAuZmlsdGVyKChkKSA9PiBkLnZlcnNpb24gPT09IFwid29ya3NwYWNlOipcIilcbiAgICAgIC5tYXAoKGQpID0+IFtkLm5hbWUsIFJPT1RfVFVSQk9fVEFTS19OQU1FXS5qb2luKFwiI1wiKSk7XG5cbiAgICAvKipcbiAgICAgKiBMb29wIG92ZXIgYWxsIHByb2plbiB0YXNrcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0dXJibyB0YXNrXG4gICAgICogZGVmaW5pdGlvbnMuIENoYWluIHRoZW0gdG9nZXRoZXIgdXNpbmcgZGVwZW5kc09uLCBhbG9uZyB3aXRoIGFueSBvdXRzaWRlXG4gICAgICogcGFja2FnZSBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIChcbiAgICAgICAgW1xuICAgICAgICAgIFt0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2ssIHRoaXMucHJlQ29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QuY29tcGlsZVRhc2ssIHRoaXMuY29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QucG9zdENvbXBpbGVUYXNrLCB0aGlzLnBvc3RDb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC50ZXN0VGFzaywgdGhpcy50ZXN0VGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wYWNrYWdlVGFzaywgdGhpcy5wYWNrYWdlVGFza10sXG4gICAgICAgIF0gYXMgQXJyYXk8W1Rhc2ssIFR1cmJvUmVwb1Rhc2tdPlxuICAgICAgKS5mb3JFYWNoKChbcGpUYXNrLCB0dXJib1Rhc2tdKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzdGVwcyBleGlzdCBjaGFpbiB1c2luZyBkZXBlbmRzT25cbiAgICAgICAgICovXG4gICAgICAgIGlmIChwalRhc2sgJiYgdHVyYm9UYXNrICYmIHBqVGFzay5zdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKG5leHREZXBlbmRzT24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHVyYm9UYXNrLmRlcGVuZHNPbi5wdXNoKC4uLm5leHREZXBlbmRzT24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0RGVwZW5kc09uID0gW3R1cmJvVGFzay5uYW1lXTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIE90aGVyd2lzZSwgaWYgYSB0YXNrIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGRlYWN0aXZhdGUgaXQuXG4gICAgICAgICAgICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHVyYm9UYXNrLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIE1haW4gYnVpbGQgZW50cnkgcG9pbnQgZGVwZW5kcyBvbiB3aGF0ZXZlciB3YXMgbGFzdC5cbiAgICAgICAqL1xuICAgICAgdGhpcy5idWlsZFRhc2suZGVwZW5kc09uLnB1c2goLi4ubmV4dERlcGVuZHNPbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgZm9yIHRoZSB0dXJibyBjb25maWcgZmlsZS5cbiAgICAgKi9cbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gXCJ0dXJiby5qc29uXCI7XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCB0dXJibyBjb25maWcgZG9lc24ndCBlbmQgdXAgaW4gYW55IHBhY2thZ2UgZGlzdHJpYnV0aW9ucy5cbiAgICAgKi9cbiAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZShmaWxlTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCBvZiB0aGlzIFlBTUwgZmlsZSB3aWxsIGJlIHJlc29sdmVkIGF0IHN5bnRoIHRpbWUuIEJ5IHRoZW4sXG4gICAgICogYW55IHN1Yi1wcm9qZWN0cyB3aWxsIGJlIGRlZmluZWQgYW5kIHRoaXMgd2lsbCBiZSBhIGNvbXBsZXRlIGxpc3QuXG4gICAgICovXG4gICAgbmV3IEpzb25GaWxlKHRoaXMucHJvamVjdCwgZmlsZU5hbWUsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBleHRlbmRzOiB0aGlzLmV4dGVuZHMubGVuZ3RoID8gdGhpcy5leHRlbmRzIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWxEZXBlbmRlbmNpZXM6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmdsb2JhbERlcGVuZGVuY2llc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGdsb2JhbEVudjpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsRW52XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnZcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB1aTogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy51aSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjazogdGhpcy5pc1Jvb3RQcm9qZWN0XG4gICAgICAgICAgPyB0aGlzLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2tcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FjaGVEaXI6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuY2FjaGVEaXIgOiB1bmRlZmluZWQsXG4gICAgICAgIGRhZW1vbjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5kYWVtb24gOiB1bmRlZmluZWQsXG4gICAgICAgIGVudk1vZGU6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuZW52TW9kZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCB0YXNrc1xuICAgICAgICAgKi9cbiAgICAgICAgdGFza3M6IHRoaXMudGFza3NcbiAgICAgICAgICAuZmlsdGVyKCh0YXNrKSA9PiB0YXNrLmlzQWN0aXZlKVxuICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCB0YXNrKSA9PiB7XG4gICAgICAgICAgICAgIGFjY1t0YXNrLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgIC4uLnRhc2sudGFza0NvbmZpZygpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3RoaXMuYnVpbGRUYXNrLm5hbWVdOiB7IC4uLnRoaXMuYnVpbGRUYXNrLnRhc2tDb25maWcoKSB9LFxuICAgICAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "main": "lib/index.js",
42
42
  "license": "MIT",
43
- "version": "0.0.49",
43
+ "version": "0.0.50",
44
44
  "types": "lib/index.d.ts",
45
45
  "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\".",
46
46
  "scripts": {