@stemy/backend 6.0.4 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/commands/clear.command.d.ts +6 -0
  2. package/commands/fixtures.command.d.ts +9 -0
  3. package/commands/move-assets.command.d.ts +10 -0
  4. package/common-types.d.ts +22 -15
  5. package/esm2022/commands/clear.command.mjs +15 -0
  6. package/esm2022/commands/fixtures.command.mjs +26 -0
  7. package/esm2022/commands/index.mjs +6 -4
  8. package/esm2022/commands/move-assets.command.mjs +45 -0
  9. package/esm2022/common-types.mjs +3 -5
  10. package/esm2022/public_api.mjs +15 -14
  11. package/esm2022/services/assets.mjs +46 -13
  12. package/esm2022/services/backend-provider.mjs +7 -1
  13. package/esm2022/services/cli-terminal.mjs +56 -0
  14. package/esm2022/services/configuration.mjs +11 -4
  15. package/esm2022/services/drivers/asset-grid.driver.mjs +5 -5
  16. package/esm2022/services/drivers/asset-local.driver.mjs +19 -16
  17. package/esm2022/services/drivers/asset-storage-proxy.driver.mjs +15 -10
  18. package/esm2022/services/drivers/fallback-streams.mjs +1 -39
  19. package/esm2022/services/entities/asset.mjs +47 -6
  20. package/esm2022/services/entities/temp-asset.mjs +15 -3
  21. package/esm2022/services/terminal-manager.mjs +30 -16
  22. package/esm2022/socket-controllers/socket-terminal.mjs +89 -0
  23. package/esm2022/socket-controllers/terminal.controller.mjs +3 -3
  24. package/fesm2022/stemy-backend.mjs +357 -213
  25. package/fesm2022/stemy-backend.mjs.map +1 -1
  26. package/package.json +2 -2
  27. package/public_api.d.ts +1 -1
  28. package/services/assets.d.ts +13 -5
  29. package/services/cli-terminal.d.ts +18 -0
  30. package/services/configuration.d.ts +2 -0
  31. package/services/drivers/asset-grid.driver.d.ts +4 -4
  32. package/services/drivers/asset-local.driver.d.ts +6 -5
  33. package/services/drivers/asset-storage-proxy.driver.d.ts +5 -5
  34. package/services/drivers/fallback-streams.d.ts +1 -8
  35. package/services/entities/asset.d.ts +8 -3
  36. package/services/entities/temp-asset.d.ts +6 -1
  37. package/services/terminal-manager.d.ts +3 -0
  38. package/socket-controllers/socket-terminal.d.ts +19 -0
  39. package/socket-controllers/terminal.controller.d.ts +2 -2
@@ -0,0 +1,6 @@
1
+ import { ITerminal, ITerminalCommand } from "../common-types";
2
+ import { ICommandArgs } from "@stemy/terminal-commands-addon";
3
+ export declare class ClearCommand implements ITerminalCommand {
4
+ readonly name = "clear";
5
+ execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;
6
+ }
@@ -0,0 +1,9 @@
1
+ import { ICommandArgs } from "@stemy/terminal-commands-addon";
2
+ import { ITerminal, ITerminalCommand } from "../common-types";
3
+ import { Fixtures } from "../services/fixtures";
4
+ export declare class FixturesCommand implements ITerminalCommand {
5
+ protected fixtures: Fixtures;
6
+ readonly name = "fixtures";
7
+ constructor(fixtures: Fixtures);
8
+ execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { ICommandArgs, IProgressBar, ISuggestion } from "@stemy/terminal-commands-addon";
2
+ import { ITerminal, ITerminalCommand } from "../common-types";
3
+ import { Assets } from "../services/assets";
4
+ export declare class MoveAssetsCommand implements ITerminalCommand {
5
+ protected assets: Assets;
6
+ readonly name = "move-assets";
7
+ constructor(assets: Assets);
8
+ execute(args: ICommandArgs, terminal: ITerminal, progress: IProgressBar): Promise<any>;
9
+ suggest?(args: ICommandArgs): Promise<Array<string | ISuggestion>>;
10
+ }
package/common-types.d.ts CHANGED
@@ -8,7 +8,7 @@ import { SchemaObject } from "openapi3-ts";
8
8
  import { Readable, Writable } from "stream";
9
9
  import { Moment } from "moment";
10
10
  import { AnyExpression, Expression } from "mongoose";
11
- import { ICommandArgs, ISuggestion, ITerminal as ITerminalBase } from "@stemy/terminal-commands-addon";
11
+ import { ICommandArgs, IProgressBar, ISuggestion, ITerminal as ITerminalBase } from "@stemy/terminal-commands-addon";
12
12
  import { ObjectId } from "bson";
13
13
  export declare const Type: FunctionConstructor;
14
14
  export interface Type<T = object> extends Function {
@@ -75,10 +75,8 @@ export declare const SOCKET_CONTROLLERS: InjectionToken<SocketControllers>;
75
75
  export declare const PARAMETER: InjectionToken<Parameter>;
76
76
  export declare const DI_CONTAINER: InjectionToken<IDependencyContainer>;
77
77
  export declare const OPENAPI_VALIDATION: InjectionToken<OpenApiValidation>;
78
- export declare const LOCAL_DIR: InjectionToken<string>;
79
- export declare const ASSET_DRIVER: InjectionToken<IAssetDriver>;
80
- export declare const ASSET_MAIN_DRIVER: InjectionToken<IAssetDriver>;
81
- export declare const ASSET_FALLBACK_DRIVER: InjectionToken<IAssetDriver>;
78
+ export declare const ASSET_LOCAL_DIR: InjectionToken<string>;
79
+ export declare const ASSET_DRIVER_FACTORIES: InjectionToken<AssetDriverFactoryMap>;
82
80
  export interface IMatchField {
83
81
  field: string;
84
82
  filter: any;
@@ -136,12 +134,12 @@ export interface ITerminalFile extends ISuggestion {
136
134
  accept?: string;
137
135
  }
138
136
  export interface ITerminal extends ITerminalBase {
139
- suggestFiles(accept: string): Promise<ITerminalFile[]>;
140
- downloadFile(filename: string, buffer: Buffer): Promise<void>;
137
+ suggestFiles?(accept: string): Promise<ITerminalFile[]>;
138
+ downloadFile?(filename: string, buffer: Buffer): Promise<void>;
141
139
  }
142
140
  export interface ITerminalCommand {
143
141
  name?: string;
144
- execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;
142
+ execute(args: ICommandArgs, terminal: ITerminal, progress: IProgressBar): Promise<any>;
145
143
  suggest?(args: ICommandArgs, terminal: ITerminal): Promise<Array<string | ISuggestion>>;
146
144
  }
147
145
  export interface IProgress {
@@ -203,12 +201,15 @@ export interface IAssetImageParams {
203
201
  export interface IAsset {
204
202
  readonly id: string;
205
203
  readonly filename: string;
204
+ readonly streamId: ObjectId;
205
+ readonly driverId: string;
206
206
  readonly contentType: string;
207
207
  readonly metadata: IAssetMeta;
208
208
  readonly stream: Readable;
209
209
  unlink(): Promise<string>;
210
210
  setMeta(meta: Partial<IAssetMeta>): Promise<any>;
211
211
  getBuffer(): Promise<Buffer>;
212
+ move(driverId: string): Promise<IAsset>;
212
213
  download(metadata?: IAssetMeta): Promise<Readable>;
213
214
  downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable>;
214
215
  getImage(params?: IAssetImageParams): Promise<Readable>;
@@ -223,12 +224,17 @@ export interface IAssetUploadStream extends Writable {
223
224
  export interface IAssetUploadOpts {
224
225
  chunkSizeBytes?: number;
225
226
  metadata?: IAssetMeta;
226
- contentType?: string;
227
+ contentType: string;
228
+ extension: string;
227
229
  }
228
230
  export interface IAssetDriver {
229
- openUploadStream(filename: string, opts?: IAssetUploadOpts): IAssetUploadStream;
230
- openDownloadStream(id: ObjectId): Readable;
231
- delete(id: ObjectId): Promise<void>;
231
+ openUploadStream(filename: string, opts: IAssetUploadOpts): IAssetUploadStream;
232
+ openDownloadStream(asset: IAsset): Readable;
233
+ delete(asset: IAsset): Promise<void>;
234
+ }
235
+ export interface IAssetDrivers {
236
+ readonly missingDriver: string;
237
+ getDriver(id: string): IAssetDriver;
232
238
  }
233
239
  export interface ILazyAsset {
234
240
  id: string;
@@ -247,6 +253,9 @@ export interface ILazyAsset {
247
253
  load(): Promise<this>;
248
254
  toJSON(): any;
249
255
  }
256
+ export interface AssetDriverFactoryMap {
257
+ [name: string]: (di: IDependencyContainer) => IAssetDriver;
258
+ }
250
259
  export interface IUser {
251
260
  _id?: string;
252
261
  id?: string;
@@ -322,7 +331,5 @@ export interface IBackendConfig {
322
331
  socketOptions?: SocketOptions;
323
332
  customValidation?: SchemaConverter | SchemaObject;
324
333
  assetLocalDir?: string;
325
- assetDriver?: Type<IAssetDriver>;
326
- assetMainDriver?: Type<IAssetDriver>;
327
- assetFallbackDriver?: Type<IAssetDriver>;
334
+ assetDrivers?: AssetDriverFactoryMap;
328
335
  }
@@ -0,0 +1,15 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { AnsiCodes } from "@stemy/terminal-commands-addon";
4
+ let ClearCommand = class ClearCommand {
5
+ name = "clear";
6
+ async execute(args, terminal) {
7
+ terminal.write(AnsiCodes.clear);
8
+ }
9
+ };
10
+ ClearCommand = __decorate([
11
+ injectable(),
12
+ scoped(Lifecycle.ContainerScoped)
13
+ ], ClearCommand);
14
+ export { ClearCommand };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXIuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGVhci5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFdkQsT0FBTyxFQUFDLFNBQVMsRUFBZSxNQUFNLGdDQUFnQyxDQUFDO0FBSWhFLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQVk7SUFFWixJQUFJLEdBQUcsT0FBTyxDQUFDO0lBRXhCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBa0IsRUFBRSxRQUFtQjtRQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0osQ0FBQTtBQVBZLFlBQVk7SUFGeEIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7R0FDckIsWUFBWSxDQU94QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0lUZXJtaW5hbCwgSVRlcm1pbmFsQ29tbWFuZH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Fuc2lDb2RlcywgSUNvbW1hbmRBcmdzfSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIENsZWFyQ29tbWFuZCBpbXBsZW1lbnRzIElUZXJtaW5hbENvbW1hbmQge1xyXG5cclxuICAgIHJlYWRvbmx5IG5hbWUgPSBcImNsZWFyXCI7XHJcblxyXG4gICAgYXN5bmMgZXhlY3V0ZShhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRlcm1pbmFsLndyaXRlKEFuc2lDb2Rlcy5jbGVhcik7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,26 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { Fixtures } from "../services/fixtures";
4
+ import { colorize, ConsoleColor } from "../utils";
5
+ let FixturesCommand = class FixturesCommand {
6
+ fixtures;
7
+ name = "fixtures";
8
+ constructor(fixtures) {
9
+ this.fixtures = fixtures;
10
+ }
11
+ async execute(args, terminal) {
12
+ const output = {
13
+ write: text => terminal.writeln(text),
14
+ writeln: text => terminal.writeln(text)
15
+ };
16
+ await this.fixtures.load(output);
17
+ terminal.writeln(colorize(`Fixtures loaded`, ConsoleColor.FgGreen));
18
+ }
19
+ };
20
+ FixturesCommand = __decorate([
21
+ injectable(),
22
+ scoped(Lifecycle.ContainerScoped),
23
+ __metadata("design:paramtypes", [Fixtures])
24
+ ], FixturesCommand);
25
+ export { FixturesCommand };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9maXh0dXJlcy5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBSXpDLElBQU0sZUFBZSxHQUFyQixNQUFNLGVBQWU7SUFJRjtJQUZiLElBQUksR0FBRyxVQUFVLENBQUM7SUFFM0IsWUFBc0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFrQixFQUFFLFFBQW1CO1FBQ2pELE1BQU0sTUFBTSxHQUFtQjtZQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztTQUMxQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBQ0osQ0FBQTtBQWZZLGVBQWU7SUFGM0IsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7cUNBS0UsUUFBUTtHQUovQixlQUFlLENBZTNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7SUNvbW1hbmRBcmdzfSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcblxyXG5pbXBvcnQge0lGaXh0dXJlT3V0cHV0LCBJVGVybWluYWwsIElUZXJtaW5hbENvbW1hbmR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtGaXh0dXJlc30gZnJvbSBcIi4uL3NlcnZpY2VzL2ZpeHR1cmVzXCI7XHJcbmltcG9ydCB7Y29sb3JpemUsIENvbnNvbGVDb2xvcn0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIEZpeHR1cmVzQ29tbWFuZCBpbXBsZW1lbnRzIElUZXJtaW5hbENvbW1hbmQge1xyXG5cclxuICAgIHJlYWRvbmx5IG5hbWUgPSBcImZpeHR1cmVzXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZpeHR1cmVzOiBGaXh0dXJlcykge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGV4ZWN1dGUoYXJnczogSUNvbW1hbmRBcmdzLCB0ZXJtaW5hbDogSVRlcm1pbmFsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBvdXRwdXQ6IElGaXh0dXJlT3V0cHV0ID0ge1xyXG4gICAgICAgICAgICB3cml0ZTogdGV4dCA9PiB0ZXJtaW5hbC53cml0ZWxuKHRleHQpLFxyXG4gICAgICAgICAgICB3cml0ZWxuOiB0ZXh0ID0+IHRlcm1pbmFsLndyaXRlbG4odGV4dClcclxuICAgICAgICB9O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZml4dHVyZXMubG9hZChvdXRwdXQpO1xyXG4gICAgICAgIHRlcm1pbmFsLndyaXRlbG4oY29sb3JpemUoYEZpeHR1cmVzIGxvYWRlZGAsIENvbnNvbGVDb2xvci5GZ0dyZWVuKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,7 +1,9 @@
1
- import { ClearCommand } from "./clear-command";
2
- import { FixturesCommand } from "./fixtures-command";
1
+ import { ClearCommand } from "./clear.command";
2
+ import { FixturesCommand } from "./fixtures.command";
3
+ import { MoveAssetsCommand } from "./move-assets.command";
3
4
  export const commands = [
4
5
  ClearCommand,
5
- FixturesCommand
6
+ FixturesCommand,
7
+ MoveAssetsCommand
6
8
  ];
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQTZCO0lBQzlDLFlBQVk7SUFDWixlQUFlO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsZWFyQ29tbWFuZH0gZnJvbSBcIi4vY2xlYXItY29tbWFuZFwiO1xyXG5pbXBvcnQge0lUZXJtaW5hbENvbW1hbmQsIFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtGaXh0dXJlc0NvbW1hbmR9IGZyb20gXCIuL2ZpeHR1cmVzLWNvbW1hbmRcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjb21tYW5kczogVHlwZTxJVGVybWluYWxDb21tYW5kPltdID0gW1xyXG4gICAgQ2xlYXJDb21tYW5kLFxyXG4gICAgRml4dHVyZXNDb21tYW5kXHJcbl07XHJcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQTZCO0lBQzlDLFlBQVk7SUFDWixlQUFlO0lBQ2YsaUJBQWlCO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsZWFyQ29tbWFuZH0gZnJvbSBcIi4vY2xlYXIuY29tbWFuZFwiO1xyXG5pbXBvcnQge0lUZXJtaW5hbENvbW1hbmQsIFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtGaXh0dXJlc0NvbW1hbmR9IGZyb20gXCIuL2ZpeHR1cmVzLmNvbW1hbmRcIjtcclxuaW1wb3J0IHtNb3ZlQXNzZXRzQ29tbWFuZH0gZnJvbSBcIi4vbW92ZS1hc3NldHMuY29tbWFuZFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbW1hbmRzOiBUeXBlPElUZXJtaW5hbENvbW1hbmQ+W10gPSBbXHJcbiAgICBDbGVhckNvbW1hbmQsXHJcbiAgICBGaXh0dXJlc0NvbW1hbmQsXHJcbiAgICBNb3ZlQXNzZXRzQ29tbWFuZFxyXG5dO1xyXG4iXX0=
@@ -0,0 +1,45 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { Assets } from "../services/assets";
4
+ import { colorize, ConsoleColor, promiseTimeout, regexEscape } from "../utils";
5
+ let MoveAssetsCommand = class MoveAssetsCommand {
6
+ assets;
7
+ name = "move-assets";
8
+ constructor(assets) {
9
+ this.assets = assets;
10
+ }
11
+ async execute(args, terminal, progress) {
12
+ await promiseTimeout(1000);
13
+ const from = `${args.at(1).id}`;
14
+ const to = `${args.at(2).id}`;
15
+ const assets = await this.assets.findMany(from === this.assets.missingDriver ? {
16
+ $or: [
17
+ { driverId: from },
18
+ { driverId: { "$exists": false } }
19
+ ]
20
+ } : { driverId: from });
21
+ progress.setMax(assets.length);
22
+ for (const asset of assets) {
23
+ await asset.move(to);
24
+ progress.advance();
25
+ }
26
+ terminal.writeln(colorize(`Assets successfully moved to: ${to}`, ConsoleColor.FgGreen));
27
+ }
28
+ async suggest(args) {
29
+ if (args.length > 3) {
30
+ return null;
31
+ }
32
+ // Replace regex special characters
33
+ const prev = args.length === 3 ? args.at(1) : null;
34
+ const id = regexEscape(args.search);
35
+ const regex = new RegExp(id, "g");
36
+ return this.assets.drivers.filter(d => d.match(regex) && (!prev || d !== prev.id));
37
+ }
38
+ };
39
+ MoveAssetsCommand = __decorate([
40
+ injectable(),
41
+ scoped(Lifecycle.ContainerScoped),
42
+ __metadata("design:paramtypes", [Assets])
43
+ ], MoveAssetsCommand);
44
+ export { MoveAssetsCommand };
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1hc3NldHMuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9tb3ZlLWFzc2V0cy5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJdkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJdEUsSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBaUI7SUFJSjtJQUZiLElBQUksR0FBRyxhQUFhLENBQUM7SUFFOUIsWUFBc0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBa0IsRUFBRSxRQUFtQixFQUFFLFFBQXNCO1FBQ3pFLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzNFLEdBQUcsRUFBRTtnQkFDRCxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2xCLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO2FBQ3JDO1NBQ0osQ0FBQyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBRSxJQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELG1DQUFtQztRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25ELE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0NBQ0osQ0FBQTtBQXJDWSxpQkFBaUI7SUFGN0IsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7cUNBS0EsTUFBTTtHQUozQixpQkFBaUIsQ0FxQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7SUNvbW1hbmRBcmdzLCBJUHJvZ3Jlc3NCYXIsIElTdWdnZXN0aW9ufSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcblxyXG5pbXBvcnQge0lUZXJtaW5hbCwgSVRlcm1pbmFsQ29tbWFuZH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4uL3NlcnZpY2VzL2Fzc2V0c1wiO1xyXG5pbXBvcnQge2NvbG9yaXplLCBDb25zb2xlQ29sb3IsIHByb21pc2VUaW1lb3V0LCByZWdleEVzY2FwZX0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIE1vdmVBc3NldHNDb21tYW5kIGltcGxlbWVudHMgSVRlcm1pbmFsQ29tbWFuZCB7XHJcblxyXG4gICAgcmVhZG9ubHkgbmFtZSA9IFwibW92ZS1hc3NldHNcIjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXNzZXRzOiBBc3NldHMpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBleGVjdXRlKGFyZ3M6IElDb21tYW5kQXJncywgdGVybWluYWw6IElUZXJtaW5hbCwgcHJvZ3Jlc3M6IElQcm9ncmVzc0Jhcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgYXdhaXQgcHJvbWlzZVRpbWVvdXQoMTAwMCk7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IGAke2FyZ3MuYXQoMSkuaWR9YDtcclxuICAgICAgICBjb25zdCB0byA9IGAke2FyZ3MuYXQoMikuaWR9YDtcclxuICAgICAgICBjb25zdCBhc3NldHMgPSBhd2FpdCB0aGlzLmFzc2V0cy5maW5kTWFueShmcm9tID09PSB0aGlzLmFzc2V0cy5taXNzaW5nRHJpdmVyID8ge1xyXG4gICAgICAgICAgICAkb3I6IFtcclxuICAgICAgICAgICAgICAgIHsgZHJpdmVySWQ6IGZyb20gfSxcclxuICAgICAgICAgICAgICAgIHsgZHJpdmVySWQ6IHsgXCIkZXhpc3RzXCI6IGZhbHNlIH0gfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSA6IHtkcml2ZXJJZDogZnJvbX0pO1xyXG4gICAgICAgIHByb2dyZXNzLnNldE1heChhc3NldHMubGVuZ3RoKVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0cykge1xyXG4gICAgICAgICAgICBhd2FpdCBhc3NldC5tb3ZlKHRvKTtcclxuICAgICAgICAgICAgcHJvZ3Jlc3MuYWR2YW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGVybWluYWwud3JpdGVsbihjb2xvcml6ZShgQXNzZXRzIHN1Y2Nlc3NmdWxseSBtb3ZlZCB0bzogJHt0b31gLCBDb25zb2xlQ29sb3IuRmdHcmVlbikpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN1Z2dlc3Q/KGFyZ3M6IElDb21tYW5kQXJncyk6IFByb21pc2U8QXJyYXk8c3RyaW5nIHwgSVN1Z2dlc3Rpb24+PiB7XHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVwbGFjZSByZWdleCBzcGVjaWFsIGNoYXJhY3RlcnNcclxuICAgICAgICBjb25zdCBwcmV2ID0gYXJncy5sZW5ndGggPT09IDMgPyBhcmdzLmF0KDEpIDogbnVsbDtcclxuICAgICAgICBjb25zdCBpZCA9IHJlZ2V4RXNjYXBlKGFyZ3Muc2VhcmNoKTtcclxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoaWQsIFwiZ1wiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldHMuZHJpdmVycy5maWx0ZXIoZCA9PiBkLm1hdGNoKHJlZ2V4KSAmJiAoIXByZXYgfHwgZCAhPT0gcHJldi5pZCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -11,10 +11,8 @@ export const SOCKET_CONTROLLERS = Symbol.for("socket-controllers-token");
11
11
  export const PARAMETER = Symbol.for("parameter-token");
12
12
  export const DI_CONTAINER = Symbol.for("di-container-token");
13
13
  export const OPENAPI_VALIDATION = Symbol.for("openapi-validation-token");
14
- export const LOCAL_DIR = Symbol.for('asset-local-dir');
15
- export const ASSET_DRIVER = Symbol.for('assets-driver');
16
- export const ASSET_MAIN_DRIVER = Symbol.for('assets-main-driver');
17
- export const ASSET_FALLBACK_DRIVER = Symbol.for('assets-fallback-driver');
14
+ export const ASSET_LOCAL_DIR = Symbol.for('asset-local-dir');
15
+ export const ASSET_DRIVER_FACTORIES = Symbol.for('assets-driver-factories');
18
16
  export class Parameter {
19
17
  name;
20
18
  defaultValue;
@@ -25,4 +23,4 @@ export class Parameter {
25
23
  this.resolver = resolver;
26
24
  }
27
25
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsdUJBQXVCO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7QUEwRTdCLDJCQUEyQjtBQUUzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQTZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUF5QixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUE0QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBMkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE4QixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbkcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUU1RyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFdEYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUVoRyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBaUN4RyxNQUFNLE9BQU8sU0FBUztJQUVHO0lBQXFCO0lBQTBCO0lBQXBFLFlBQXFCLElBQVksRUFBUyxZQUFpQixFQUFTLFdBQTBCLElBQUk7UUFBN0UsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFLO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7SUFFbEcsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCJodHRwXCI7XHJcbmltcG9ydCB7UmVxdWVzdCwgRXhwcmVzc30gZnJvbSBcImV4cHJlc3NcIjtcclxuaW1wb3J0IHtTb2NrZXQsIFNlcnZlciBhcyBTb2NrZXRTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuaW1wb3J0IHtSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1NvY2tldENvbnRyb2xsZXJzLCBTb2NrZXRDb250cm9sbGVyc09wdGlvbnN9IGZyb20gXCJzb2NrZXQtY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIENsYXNzUHJvdmlkZXIsXHJcbiAgICBEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgICBUb2tlblByb3ZpZGVyLFxyXG4gICAgVmFsdWVQcm92aWRlcixcclxuICAgIFJlZ2lzdHJhdGlvbk9wdGlvbnNcclxufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtTY2hlbWFPYmplY3R9IGZyb20gXCJvcGVuYXBpMy10c1wiO1xyXG5pbXBvcnQge1JlYWRhYmxlLCBXcml0YWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge0FueUV4cHJlc3Npb24sIEV4cHJlc3Npb259IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge0lDb21tYW5kQXJncywgSVN1Z2dlc3Rpb24sIElUZXJtaW5hbCBhcyBJVGVybWluYWxCYXNlfSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcblxyXG4vLyAtLS0gREkgZnVuY3Rpb25zIC0tLVxyXG5cclxuZXhwb3J0IGNvbnN0IFR5cGUgPSBGdW5jdGlvbjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZTxUID0gb2JqZWN0PiBleHRlbmRzIEZ1bmN0aW9uIHtcclxuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RvcnlQcm92aWRlcjxUPiB7XHJcbiAgICB1c2VGYWN0b3J5OiAoZGM6IElEZXBlbmRlbmN5Q29udGFpbmVyKSA9PiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmVlIHtcclxuICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcclxuICAgIHJlc29sdmVTZXJ2aWNlKCk6IGFueTtcclxuICAgIHJlc29sdmVMZWF2ZXMoKTogTWFwPHN0cmluZywgSVRyZWU+O1xyXG4gICAgcmVzb2x2ZVNlcnZpY2VzKCk6IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICByZXNvbHZlQW5jZXN0b3IocGF0aDogc3RyaW5nKTogSVRyZWU7XHJcbiAgICByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcsIHRocm93RXJyb3I/OiBib29sZWFuKTogSVRyZWU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURlcGVuZGVuY3lDb250YWluZXIge1xyXG4gICAgcmVhZG9ubHkgcGFyZW50OiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlYWRvbmx5IHRyZWU6IElUcmVlO1xyXG4gICAgcmVhZG9ubHkgcmVnaXN0ZXJlZFRva2VuczogUmVhZG9ubHlBcnJheTxJbmplY3Rpb25Ub2tlbj47XHJcbiAgICBjcmVhdGVDaGlsZENvbnRhaW5lcigpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IEZhY3RvcnlQcm92aWRlcjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogVG9rZW5Qcm92aWRlcjxUPiwgb3B0aW9ucz86IFJlZ2lzdHJhdGlvbk9wdGlvbnMpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IENsYXNzUHJvdmlkZXI8VD4sIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlcjxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4sIHByb3ZpZGVyOiBUeXBlPFQ+LCBvcHRpb25zPzogUmVnaXN0cmF0aW9uT3B0aW9ucyk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJTaW5nbGV0b248VD4oZnJvbTogSW5qZWN0aW9uVG9rZW48VD4sIHRvOiBJbmplY3Rpb25Ub2tlbjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJTaW5nbGV0b248VD4odG9rZW46IFR5cGU8VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyVHlwZTxUPihmcm9tOiBJbmplY3Rpb25Ub2tlbjxUPiwgdG86IEluamVjdGlvblRva2VuPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3Rlckluc3RhbmNlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgaW5zdGFuY2U6IFQpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIGdldDxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4pOiBUO1xyXG4gICAgcmVzb2x2ZTxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4pOiBUO1xyXG4gICAgcmVzb2x2ZUFsbDxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4pOiBUW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NCYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgQ2xhc3NQcm92aWRlcjxUPiB7XHJcbiAgICBwcm92aWRlOiBJbmplY3Rpb25Ub2tlbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZUJhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBWYWx1ZVByb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RvcnlCYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgRmFjdG9yeVByb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuQmFzZWRQcm92aWRlcjxUPiBleHRlbmRzIFRva2VuUHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFN5cmluZ2VQcm92aWRlcjxUPiA9IFR5cGU8VD4gfCBDbGFzc1Byb3ZpZGVyPFQ+IHwgVmFsdWVQcm92aWRlcjxUPiB8IEZhY3RvcnlQcm92aWRlcjxUPiB8IFRva2VuUHJvdmlkZXI8VD47XHJcblxyXG5leHBvcnQgdHlwZSBQcm92aWRlcjxUPiA9IFR5cGU8VD4gfCBDbGFzc0Jhc2VkUHJvdmlkZXI8VD4gfCBWYWx1ZUJhc2VkUHJvdmlkZXI8VD4gfCBGYWN0b3J5QmFzZWRQcm92aWRlcjxUPiB8IFRva2VuQmFzZWRQcm92aWRlcjxUPjtcclxuXHJcbi8vIC0tLSBVc2VmdWwgZ2VuZXJpYyB0eXBlcyAtLS1cclxuXHJcbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQgPSBvYmplY3Q+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVFxyXG5cclxuZXhwb3J0IHR5cGUgSW5mZXJHZW5lcmljPFQ+ID0gVCBleHRlbmRzIFR5cGU8aW5mZXIgQj4gPyBCIDogbmV2ZXI7XHJcblxyXG5leHBvcnQgdHlwZSBQaWNrTWF0Y2hpbmc8VCwgVj4gPSB7IFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIFYgPyBLIDogbmV2ZXJdOiBUW0tdIH1cclxuXHJcbmV4cG9ydCB0eXBlIE9taXRGaXJzdEFyZzxGPiA9IEYgZXh0ZW5kcyAoeDogYW55LCAuLi5hcmdzOiBpbmZlciBQKSA9PiBpbmZlciBSID8gKC4uLmFyZ3M6IFApID0+IFIgOiBuZXZlcjtcclxuXHJcbi8vIC0tLSBPcGVuQXBpIC0tLVxyXG5cclxuZXhwb3J0IHR5cGUgU2NoZW1hQ29udmVydGVyID0gKG1ldGE6IGFueSwgb3B0aW9uczogYW55KSA9PiBTY2hlbWFPYmplY3Q7XHJcblxyXG5leHBvcnQgdHlwZSBPcGVuQXBpVmFsaWRhdGlvbiA9IFNjaGVtYUNvbnZlcnRlciB8IFNjaGVtYU9iamVjdDtcclxuXHJcbi8vIC0tLSBJbmplY3Rpb24gdG9rZW5zIC0tLVxyXG5cclxuZXhwb3J0IGNvbnN0IEZJWFRVUkU6IEluamVjdGlvblRva2VuPElGaXh0dXJlPiA9IFN5bWJvbC5mb3IoXCJmaXh0dXJlLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEpPQjogSW5qZWN0aW9uVG9rZW48SUpvYj4gPSBTeW1ib2wuZm9yKFwiam9iLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRFUk1JTkFMX0NPTU1BTkQ6IEluamVjdGlvblRva2VuPElUZXJtaW5hbENvbW1hbmQ+ID0gU3ltYm9sLmZvcihcInRlcm1pbmFsLWNvbW1hbmQtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgRVhQUkVTUzogSW5qZWN0aW9uVG9rZW48RXhwcmVzcz4gPSBTeW1ib2wuZm9yKFwiZXhwcmVzcy10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBIVFRQX1NFUlZFUjogSW5qZWN0aW9uVG9rZW48U2VydmVyPiA9IFN5bWJvbC5mb3IoXCJodHRwLXNlcnZlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTT0NLRVRfU0VSVkVSOiBJbmplY3Rpb25Ub2tlbjxTb2NrZXRTZXJ2ZXI+ID0gU3ltYm9sLmZvcihcInNvY2tldC1zZXJ2ZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgU09DS0VUX0NPTlRST0xMRVJTOiBJbmplY3Rpb25Ub2tlbjxTb2NrZXRDb250cm9sbGVycz4gPSBTeW1ib2wuZm9yKFwic29ja2V0LWNvbnRyb2xsZXJzLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUkFNRVRFUjogSW5qZWN0aW9uVG9rZW48UGFyYW1ldGVyPiA9IFN5bWJvbC5mb3IoXCJwYXJhbWV0ZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgRElfQ09OVEFJTkVSOiBJbmplY3Rpb25Ub2tlbjxJRGVwZW5kZW5jeUNvbnRhaW5lcj4gPSBTeW1ib2wuZm9yKFwiZGktY29udGFpbmVyLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9QRU5BUElfVkFMSURBVElPTjogSW5qZWN0aW9uVG9rZW48T3BlbkFwaVZhbGlkYXRpb24+ID0gU3ltYm9sLmZvcihcIm9wZW5hcGktdmFsaWRhdGlvbi10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBMT0NBTF9ESVI6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBTeW1ib2wuZm9yKCdhc3NldC1sb2NhbC1kaXInKTtcclxuXHJcbmV4cG9ydCBjb25zdCBBU1NFVF9EUklWRVI6IEluamVjdGlvblRva2VuPElBc3NldERyaXZlcj4gPSBTeW1ib2wuZm9yKCdhc3NldHMtZHJpdmVyJyk7XHJcblxyXG5leHBvcnQgY29uc3QgQVNTRVRfTUFJTl9EUklWRVI6IEluamVjdGlvblRva2VuPElBc3NldERyaXZlcj4gPSBTeW1ib2wuZm9yKCdhc3NldHMtbWFpbi1kcml2ZXInKTtcclxuXHJcbmV4cG9ydCBjb25zdCBBU1NFVF9GQUxMQkFDS19EUklWRVI6IEluamVjdGlvblRva2VuPElBc3NldERyaXZlcj4gPSBTeW1ib2wuZm9yKCdhc3NldHMtZmFsbGJhY2stZHJpdmVyJyk7XHJcblxyXG4vLyAtLS0gTW9uZ28gaW50ZXJmYWNlcyBhbmQgdHlwZXNcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hdGNoRmllbGQge1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxuICAgIGZpbHRlcjogYW55O1xyXG4gICAgd2hlbjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUHJvamVjdE9wdGlvbnMge1xyXG4gICAgW2ZpZWxkOiBzdHJpbmddOiBBbnlFeHByZXNzaW9uIHwgRXhwcmVzc2lvbiB8IElQcm9qZWN0T3B0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVW53aW5kT3B0aW9ucyB7XHJcbiAgICBwYXRoOiBzdHJpbmc7XHJcbiAgICBpbmNsdWRlQXJyYXlJbmRleD86IHN0cmluZztcclxuICAgIHByZXNlcnZlTnVsbEFuZEVtcHR5QXJyYXlzPzogYm9vbGVhbjtcclxufVxyXG5cclxuLy8gLS0tIEludGVyZmFjZXMgYW5kIHV0aWxpdHkgY2xhc3NlcyAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpeHR1cmUge1xyXG4gICAgbG9hZChvdXRwdXQ/OiBJRml4dHVyZU91dHB1dCk6IFByb21pc2U8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRml4dHVyZU91dHB1dCB7XHJcbiAgICB3cml0ZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgd3JpdGVsbihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQYXJhbVJlc29sdmVyID0gKHZhbHVlOiBzdHJpbmcsIGhlbHBlcj86IChwYXJhbTogc3RyaW5nKSA9PiBhbnkpID0+IGFueTtcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG5hbWU6IHN0cmluZywgcHVibGljIGRlZmF1bHRWYWx1ZTogYW55LCBwdWJsaWMgcmVzb2x2ZXI6IFBhcmFtUmVzb2x2ZXIgPSBudWxsKSB7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTb2NrZXRQYXJhbSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBTb2NrZXRQYXJhbXM7XHJcblxyXG5leHBvcnQgdHlwZSBTb2NrZXRQYXJhbXMgPSB7XHJcbiAgICBbbmFtZTogc3RyaW5nXTogU29ja2V0UGFyYW0gfCBBcnJheTxTb2NrZXRQYXJhbT47XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBKb2JQYXJhbXMgPSBTb2NrZXRQYXJhbXM7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTb2NrZXRNZXNzYWdlIHtcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIHBhcmFtczogU29ja2V0UGFyYW1zO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNZXNzYWdlQnJpZGdlIHtcclxuICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgcGFyYW1zPzogU29ja2V0UGFyYW1zKTogdm9pZDtcclxufVxyXG5cclxuLy8gLS0tIEpPQlMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKb2Ige1xyXG4gICAgcHJvY2VzcyhtZXNzYWdpbmc/OiBJTWVzc2FnZUJyaWRnZSk6IFByb21pc2U8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSm9iVGFzayB7XHJcbiAgICBzdGFydDogKCkgPT4gdm9pZDtcclxuICAgIHN0b3A6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSm9iU2NoZWR1bGVSYW5nZSB7XHJcbiAgICBtaW46IG51bWJlcjtcclxuICAgIG1heDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBKb2JTY2hlZHVsZVRpbWUgPSBzdHJpbmcgfCBudW1iZXIgfCBKb2JTY2hlZHVsZVJhbmdlIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuXHJcbi8vIC0tLSBDT01NQU5EUyAmIFRFUk1JTkFMIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWxGaWxlIGV4dGVuZHMgSVN1Z2dlc3Rpb24ge1xyXG4gICAgY29udGVudD86IHN0cmluZztcclxuICAgIGJ1ZmZlcj86IEJ1ZmZlcjtcclxuICAgIGFjY2VwdD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWwgZXh0ZW5kcyBJVGVybWluYWxCYXNlIHtcclxuICAgIHN1Z2dlc3RGaWxlcyhhY2NlcHQ6IHN0cmluZyk6IFByb21pc2U8SVRlcm1pbmFsRmlsZVtdPjtcclxuICAgIGRvd25sb2FkRmlsZShmaWxlbmFtZTogc3RyaW5nLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsQ29tbWFuZCB7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgZXhlY3V0ZShhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPGFueT47XHJcbiAgICBzdWdnZXN0PyhhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPEFycmF5PHN0cmluZyB8IElTdWdnZXN0aW9uPj47XHJcbn1cclxuXHJcbi8vIC0tLSBBU1NFVFMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9ncmVzcyB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY3VycmVudDogbnVtYmVyO1xyXG4gICAgbWF4OiBudW1iZXI7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgY2FuY2VsZWQ6IGJvb2xlYW47XHJcbiAgICBwZXJjZW50OiBudW1iZXI7XHJcbiAgICByZW1haW5pbmc6IG51bWJlcjtcclxuICAgIHNldE1lc3NhZ2VCcmlkZ2UobWVzc2FnZUJyaWRnZTogSU1lc3NhZ2VCcmlkZ2UpOiB0aGlzO1xyXG4gICAgY3JlYXRlU3ViUHJvZ3Jlc3MocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBtYXg/OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz47XHJcbiAgICBzZXRNYXgobWF4OiBudW1iZXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBzZXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8YW55PjtcclxuICAgIHNldEVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcbiAgICBhZHZhbmNlKHZhbHVlPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgY2FuY2VsKCk6IFByb21pc2U8YW55PjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRDcm9wSW5mbyB7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB5OiBudW1iZXI7XHJcbiAgICB3OiBudW1iZXI7XHJcbiAgICBoOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTWV0YSB7XHJcbiAgICBjcm9wPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQmVmb3JlPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNhbnZhc1NjYWxlWD86IG51bWJlcjtcclxuICAgIGNhbnZhc1NjYWxlWT86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRNZXRhIGV4dGVuZHMgSUltYWdlTWV0YSB7XHJcbiAgICBmaWxlbmFtZT86IHN0cmluZztcclxuICAgIGV4dGVuc2lvbj86IHN0cmluZztcclxuICAgIGNsYXNzaWZpZWQ/OiBib29sZWFuO1xyXG4gICAgZG93bmxvYWRDb3VudD86IG51bWJlcjtcclxuICAgIGZpcnN0RG93bmxvYWQ/OiBEYXRlO1xyXG4gICAgbGFzdERvd25sb2FkPzogRGF0ZTtcclxuICAgIHByZXZpZXc/OiBPYmplY3RJZCB8IHN0cmluZztcclxuICAgIHB1YmxpY1VybD86IHN0cmluZztcclxuXHJcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldEltYWdlUGFyYW1zIHtcclxuICAgIHJvdGF0aW9uPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVYPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVZPzogbnVtYmVyO1xyXG4gICAgc2NhbGVYPzogbnVtYmVyO1xyXG4gICAgc2NhbGVZPzogbnVtYmVyO1xyXG4gICAgbGF6eT86IGJvb2xlYW47XHJcbiAgICBjcm9wPzogc3RyaW5nIHwgYm9vbGVhbjtcclxuICAgIGNyb3BCZWZvcmU/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0IHtcclxuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgY29udGVudFR5cGU6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IG1ldGFkYXRhOiBJQXNzZXRNZXRhO1xyXG4gICAgcmVhZG9ubHkgc3RyZWFtOiBSZWFkYWJsZTtcclxuICAgIHVubGluaygpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBzZXRNZXRhKG1ldGE6IFBhcnRpYWw8SUFzc2V0TWV0YT4pOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+O1xyXG4gICAgZG93bmxvYWQobWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT47XHJcbiAgICBkb3dubG9hZEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPjtcclxuICAgIGdldEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zKTogUHJvbWlzZTxSZWFkYWJsZT47XHJcbiAgICBzYXZlKCk6IFByb21pc2U8YW55PjtcclxuICAgIGxvYWQoKTogUHJvbWlzZTx0aGlzPjtcclxuICAgIHRvSlNPTigpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0VXBsb2FkU3RyZWFtIGV4dGVuZHMgV3JpdGFibGUge1xyXG4gICAgaWQ/OiBPYmplY3RJZDtcclxuICAgIGRvbmU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldFVwbG9hZE9wdHMge1xyXG4gICAgY2h1bmtTaXplQnl0ZXM/OiBudW1iZXI7XHJcbiAgICBtZXRhZGF0YT86IElBc3NldE1ldGE7XHJcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXREcml2ZXIge1xyXG4gICAgb3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBvcHRzPzogSUFzc2V0VXBsb2FkT3B0cyk6IElBc3NldFVwbG9hZFN0cmVhbTtcclxuICAgIG9wZW5Eb3dubG9hZFN0cmVhbShpZDogT2JqZWN0SWQpOiBSZWFkYWJsZTtcclxuICAgIGRlbGV0ZShpZDogT2JqZWN0SWQpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMYXp5QXNzZXQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGpvYk5hbWU6IHN0cmluZztcclxuICAgIGpvYlBhcmFtczogYW55O1xyXG4gICAgam9iUXVlOiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkQXQ6IERhdGU7XHJcbiAgICB1cGRhdGVkQXQ6IERhdGU7XHJcbiAgICBwcm9ncmVzc0lkPzogc3RyaW5nO1xyXG4gICAgYXNzZXRJZD86IHN0cmluZztcclxuICAgIHVubGluaygpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBzdGFydFdvcmtpbmcoKTogdm9pZDtcclxuICAgIGxvYWRBc3NldCgpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICBzYXZlKCk6IFByb21pc2U8YW55PjtcclxuICAgIGxvYWQoKTogUHJvbWlzZTx0aGlzPjtcclxuICAgIHRvSlNPTigpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gICAgX2lkPzogc3RyaW5nO1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBlbWFpbD86IHN0cmluZztcclxuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gICAgcm9sZXM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnRTb2NrZXQgZXh0ZW5kcyBTb2NrZXQge1xyXG4gICAgaW50ZXJlc3RlZFByb2dyZXNzZXM6IFNldDxzdHJpbmc+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZXF1ZXN0QmFzZTxUPiBleHRlbmRzIFJlcXVlc3Qge1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBzdGFydGVkPzogTW9tZW50O1xyXG4gICAgZW5kZWQ/OiBNb21lbnQ7XHJcbiAgICBjb250YWluZXI/OiBEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbiAgICB1c2VyPzogVDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdCBleHRlbmRzIElSZXF1ZXN0QmFzZTxJVXNlcj4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlIHtcclxuICAgIGZvbGRlcjogc3RyaW5nO1xyXG4gICAgdGh1bWI6IHN0cmluZztcclxuICAgIGJpZzogc3RyaW5nO1xyXG4gICAgc2VydmUoaWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5U2l6ZSB7XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIGhlaWdodD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlSGFuZGxlciB7XHJcbiAgICBnZXRPcmlnaW5hbCgpOiBQcm9taXNlPEJ1ZmZlcj47XHJcbiAgICB3cml0ZVJlc3VsdChpc1RodW1iOiBib29sZWFuLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBoYXNSZXN1bHQoaXNUaHVtYjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBzZXJ2ZVJlc3VsdChpc1RodW1iOiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXI+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2xhdGlvbnMge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uTWV0YSB7XHJcbiAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uQmFzZTxUPiB7XHJcbiAgICBjb3VudDogbnVtYmVyXHJcbiAgICBpdGVtczogVFtdO1xyXG4gICAgbWV0YT86IElQYWdpbmF0aW9uTWV0YTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnaW5hdGlvbiBleHRlbmRzIElQYWdpbmF0aW9uQmFzZTxhbnk+IHtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25QYXJhbXMge1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgbGltaXQ6IG51bWJlcjtcclxuICAgIHNvcnQ/OiBzdHJpbmc7XHJcbiAgICBwb3B1bGF0ZT86IHN0cmluZ1tdO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGb250Rm9ybWF0ID0gXCJvcGVudHlwZVwiIHwgXCJ0cnVldHlwZVwiIHwgXCJ3b2ZmXCIgfCBcIndvZmYyXCIgfCBcImRhdGFmb3JrXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlVHlwZSB7XHJcbiAgICBleHQ6IHN0cmluZztcclxuICAgIG1pbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUm91dGluZ09wdGlvbnMgPSBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zO1xyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0T3B0aW9ucyA9IE9taXQ8U29ja2V0Q29udHJvbGxlcnNPcHRpb25zLCBcImNvbnRhaW5lclwiPjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhY2tlbmRDb25maWcge1xyXG4gICAgcm9vdEZvbGRlcj86IHN0cmluZztcclxuICAgIHJvdXRlUHJlZml4Pzogc3RyaW5nO1xyXG4gICAgcGFyYW1zPzogUGFyYW1ldGVyW107XHJcbiAgICBmaXh0dXJlcz86IFR5cGU8SUZpeHR1cmU+W107XHJcbiAgICBqb2JzPzogVHlwZTxJSm9iPltdO1xyXG4gICAgY29tbWFuZHM/OiBUeXBlPElUZXJtaW5hbENvbW1hbmQ+W107XHJcbiAgICByZXN0T3B0aW9ucz86IFJvdXRpbmdPcHRpb25zO1xyXG4gICAgc29ja2V0T3B0aW9ucz86IFNvY2tldE9wdGlvbnM7XHJcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG4gICAgYXNzZXRMb2NhbERpcj86IHN0cmluZztcclxuICAgIGFzc2V0RHJpdmVyPzogVHlwZTxJQXNzZXREcml2ZXI+O1xyXG4gICAgYXNzZXRNYWluRHJpdmVyPzogVHlwZTxJQXNzZXREcml2ZXI+O1xyXG4gICAgYXNzZXRGYWxsYmFja0RyaXZlcj86IFR5cGU8SUFzc2V0RHJpdmVyPjtcclxufVxyXG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsdUJBQXVCO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7QUEwRTdCLDJCQUEyQjtBQUUzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQTZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUF5QixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUE0QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBMkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE4QixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbkcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUU1RyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVyRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBMEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBaUNuSCxNQUFNLE9BQU8sU0FBUztJQUVHO0lBQXFCO0lBQTBCO0lBQXBFLFlBQXFCLElBQVksRUFBUyxZQUFpQixFQUFTLFdBQTBCLElBQUk7UUFBN0UsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFLO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7SUFFbEcsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCJodHRwXCI7XHJcbmltcG9ydCB7UmVxdWVzdCwgRXhwcmVzc30gZnJvbSBcImV4cHJlc3NcIjtcclxuaW1wb3J0IHtTb2NrZXQsIFNlcnZlciBhcyBTb2NrZXRTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuaW1wb3J0IHtSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1NvY2tldENvbnRyb2xsZXJzLCBTb2NrZXRDb250cm9sbGVyc09wdGlvbnN9IGZyb20gXCJzb2NrZXQtY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIENsYXNzUHJvdmlkZXIsXHJcbiAgICBEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgICBUb2tlblByb3ZpZGVyLFxyXG4gICAgVmFsdWVQcm92aWRlcixcclxuICAgIFJlZ2lzdHJhdGlvbk9wdGlvbnNcclxufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtTY2hlbWFPYmplY3R9IGZyb20gXCJvcGVuYXBpMy10c1wiO1xyXG5pbXBvcnQge1JlYWRhYmxlLCBXcml0YWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge0FueUV4cHJlc3Npb24sIEV4cHJlc3Npb259IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge0lDb21tYW5kQXJncywgSVByb2dyZXNzQmFyLCBJU3VnZ2VzdGlvbiwgSVRlcm1pbmFsIGFzIElUZXJtaW5hbEJhc2V9IGZyb20gXCJAc3RlbXkvdGVybWluYWwtY29tbWFuZHMtYWRkb25cIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuXHJcbi8vIC0tLSBESSBmdW5jdGlvbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgVHlwZSA9IEZ1bmN0aW9uO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlPFQgPSBvYmplY3Q+IGV4dGVuZHMgRnVuY3Rpb24ge1xyXG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeVByb3ZpZGVyPFQ+IHtcclxuICAgIHVzZUZhY3Rvcnk6IChkYzogSURlcGVuZGVuY3lDb250YWluZXIpID0+IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyZWUge1xyXG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xyXG4gICAgcmVzb2x2ZVNlcnZpY2UoKTogYW55O1xyXG4gICAgcmVzb2x2ZUxlYXZlcygpOiBNYXA8c3RyaW5nLCBJVHJlZT47XHJcbiAgICByZXNvbHZlU2VydmljZXMoKTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHJlc29sdmVBbmNlc3RvcihwYXRoOiBzdHJpbmcpOiBJVHJlZTtcclxuICAgIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZywgdGhyb3dFcnJvcj86IGJvb2xlYW4pOiBJVHJlZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRGVwZW5kZW5jeUNvbnRhaW5lciB7XHJcbiAgICByZWFkb25seSBwYXJlbnQ6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVhZG9ubHkgdHJlZTogSVRyZWU7XHJcbiAgICByZWFkb25seSByZWdpc3RlcmVkVG9rZW5zOiBSZWFkb25seUFycmF5PEluamVjdGlvblRva2VuPjtcclxuICAgIGNyZWF0ZUNoaWxkQ29udGFpbmVyKCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogVmFsdWVQcm92aWRlcjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogRmFjdG9yeVByb3ZpZGVyPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlcjxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4sIHByb3ZpZGVyOiBUb2tlblByb3ZpZGVyPFQ+LCBvcHRpb25zPzogUmVnaXN0cmF0aW9uT3B0aW9ucyk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogQ2xhc3NQcm92aWRlcjxUPiwgb3B0aW9ucz86IFJlZ2lzdHJhdGlvbk9wdGlvbnMpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IFR5cGU8VD4sIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPihmcm9tOiBJbmplY3Rpb25Ub2tlbjxUPiwgdG86IEluamVjdGlvblRva2VuPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPih0b2tlbjogVHlwZTxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJUeXBlPFQ+KGZyb206IEluamVjdGlvblRva2VuPFQ+LCB0bzogSW5qZWN0aW9uVG9rZW48VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVySW5zdGFuY2U8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBpbnN0YW5jZTogVCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgZ2V0PFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlQWxsPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGFzc0Jhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBDbGFzc1Byb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlQmFzZWRQcm92aWRlcjxUPiBleHRlbmRzIFZhbHVlUHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeUJhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBGYWN0b3J5UHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgVG9rZW5Qcm92aWRlcjxUPiB7XHJcbiAgICBwcm92aWRlOiBJbmplY3Rpb25Ub2tlbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3lyaW5nZVByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzUHJvdmlkZXI8VD4gfCBWYWx1ZVByb3ZpZGVyPFQ+IHwgRmFjdG9yeVByb3ZpZGVyPFQ+IHwgVG9rZW5Qcm92aWRlcjxUPjtcclxuXHJcbmV4cG9ydCB0eXBlIFByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzQmFzZWRQcm92aWRlcjxUPiB8IFZhbHVlQmFzZWRQcm92aWRlcjxUPiB8IEZhY3RvcnlCYXNlZFByb3ZpZGVyPFQ+IHwgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+O1xyXG5cclxuLy8gLS0tIFVzZWZ1bCBnZW5lcmljIHR5cGVzIC0tLVxyXG5cclxuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUXHJcblxyXG5leHBvcnQgdHlwZSBJbmZlckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgVHlwZTxpbmZlciBCPiA/IEIgOiBuZXZlcjtcclxuXHJcbmV4cG9ydCB0eXBlIFBpY2tNYXRjaGluZzxULCBWPiA9IHsgW0sgaW4ga2V5b2YgVCBhcyBUW0tdIGV4dGVuZHMgViA/IEsgOiBuZXZlcl06IFRbS10gfVxyXG5cclxuZXhwb3J0IHR5cGUgT21pdEZpcnN0QXJnPEY+ID0gRiBleHRlbmRzICh4OiBhbnksIC4uLmFyZ3M6IGluZmVyIFApID0+IGluZmVyIFIgPyAoLi4uYXJnczogUCkgPT4gUiA6IG5ldmVyO1xyXG5cclxuLy8gLS0tIE9wZW5BcGkgLS0tXHJcblxyXG5leHBvcnQgdHlwZSBTY2hlbWFDb252ZXJ0ZXIgPSAobWV0YTogYW55LCBvcHRpb25zOiBhbnkpID0+IFNjaGVtYU9iamVjdDtcclxuXHJcbmV4cG9ydCB0eXBlIE9wZW5BcGlWYWxpZGF0aW9uID0gU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG5cclxuLy8gLS0tIEluamVjdGlvbiB0b2tlbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgRklYVFVSRTogSW5qZWN0aW9uVG9rZW48SUZpeHR1cmU+ID0gU3ltYm9sLmZvcihcImZpeHR1cmUtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgSk9COiBJbmplY3Rpb25Ub2tlbjxJSm9iPiA9IFN5bWJvbC5mb3IoXCJqb2ItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgVEVSTUlOQUxfQ09NTUFORDogSW5qZWN0aW9uVG9rZW48SVRlcm1pbmFsQ29tbWFuZD4gPSBTeW1ib2wuZm9yKFwidGVybWluYWwtY29tbWFuZC10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBFWFBSRVNTOiBJbmplY3Rpb25Ub2tlbjxFeHByZXNzPiA9IFN5bWJvbC5mb3IoXCJleHByZXNzLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEhUVFBfU0VSVkVSOiBJbmplY3Rpb25Ub2tlbjxTZXJ2ZXI+ID0gU3ltYm9sLmZvcihcImh0dHAtc2VydmVyLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNPQ0tFVF9TRVJWRVI6IEluamVjdGlvblRva2VuPFNvY2tldFNlcnZlcj4gPSBTeW1ib2wuZm9yKFwic29ja2V0LXNlcnZlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTT0NLRVRfQ09OVFJPTExFUlM6IEluamVjdGlvblRva2VuPFNvY2tldENvbnRyb2xsZXJzPiA9IFN5bWJvbC5mb3IoXCJzb2NrZXQtY29udHJvbGxlcnMtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSQU1FVEVSOiBJbmplY3Rpb25Ub2tlbjxQYXJhbWV0ZXI+ID0gU3ltYm9sLmZvcihcInBhcmFtZXRlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBESV9DT05UQUlORVI6IEluamVjdGlvblRva2VuPElEZXBlbmRlbmN5Q29udGFpbmVyPiA9IFN5bWJvbC5mb3IoXCJkaS1jb250YWluZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgT1BFTkFQSV9WQUxJREFUSU9OOiBJbmplY3Rpb25Ub2tlbjxPcGVuQXBpVmFsaWRhdGlvbj4gPSBTeW1ib2wuZm9yKFwib3BlbmFwaS12YWxpZGF0aW9uLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFTU0VUX0xPQ0FMX0RJUjogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IFN5bWJvbC5mb3IoJ2Fzc2V0LWxvY2FsLWRpcicpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFTU0VUX0RSSVZFUl9GQUNUT1JJRVM6IEluamVjdGlvblRva2VuPEFzc2V0RHJpdmVyRmFjdG9yeU1hcD4gPSBTeW1ib2wuZm9yKCdhc3NldHMtZHJpdmVyLWZhY3RvcmllcycpO1xyXG5cclxuLy8gLS0tIE1vbmdvIGludGVyZmFjZXMgYW5kIHR5cGVzXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNYXRjaEZpZWxkIHtcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICBmaWx0ZXI6IGFueTtcclxuICAgIHdoZW46IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVByb2plY3RPcHRpb25zIHtcclxuICAgIFtmaWVsZDogc3RyaW5nXTogQW55RXhwcmVzc2lvbiB8IEV4cHJlc3Npb24gfCBJUHJvamVjdE9wdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVud2luZE9wdGlvbnMge1xyXG4gICAgcGF0aDogc3RyaW5nO1xyXG4gICAgaW5jbHVkZUFycmF5SW5kZXg/OiBzdHJpbmc7XHJcbiAgICBwcmVzZXJ2ZU51bGxBbmRFbXB0eUFycmF5cz86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8vIC0tLSBJbnRlcmZhY2VzIGFuZCB1dGlsaXR5IGNsYXNzZXMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaXh0dXJlIHtcclxuICAgIGxvYWQob3V0cHV0PzogSUZpeHR1cmVPdXRwdXQpOiBQcm9taXNlPGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpeHR1cmVPdXRwdXQge1xyXG4gICAgd3JpdGUobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcclxuICAgIHdyaXRlbG4obWVzc2FnZTogc3RyaW5nKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFyYW1SZXNvbHZlciA9ICh2YWx1ZTogc3RyaW5nLCBoZWxwZXI/OiAocGFyYW06IHN0cmluZykgPT4gYW55KSA9PiBhbnk7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBuYW1lOiBzdHJpbmcsIHB1YmxpYyBkZWZhdWx0VmFsdWU6IGFueSwgcHVibGljIHJlc29sdmVyOiBQYXJhbVJlc29sdmVyID0gbnVsbCkge1xyXG5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0UGFyYW0gPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgU29ja2V0UGFyYW1zO1xyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0UGFyYW1zID0ge1xyXG4gICAgW25hbWU6IHN0cmluZ106IFNvY2tldFBhcmFtIHwgQXJyYXk8U29ja2V0UGFyYW0+O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgSm9iUGFyYW1zID0gU29ja2V0UGFyYW1zO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU29ja2V0TWVzc2FnZSB7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBwYXJhbXM6IFNvY2tldFBhcmFtcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZUJyaWRnZSB7XHJcbiAgICBzZW5kTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IFNvY2tldFBhcmFtcyk6IHZvaWQ7XHJcbn1cclxuXHJcbi8vIC0tLSBKT0JTIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSm9iIHtcclxuICAgIHByb2Nlc3MobWVzc2FnaW5nPzogSU1lc3NhZ2VCcmlkZ2UpOiBQcm9taXNlPGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpvYlRhc2sge1xyXG4gICAgc3RhcnQ6ICgpID0+IHZvaWQ7XHJcbiAgICBzdG9wOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEpvYlNjaGVkdWxlUmFuZ2Uge1xyXG4gICAgbWluOiBudW1iZXI7XHJcbiAgICBtYXg6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSm9iU2NoZWR1bGVUaW1lID0gc3RyaW5nIHwgbnVtYmVyIHwgSm9iU2NoZWR1bGVSYW5nZSB8IEFycmF5PHN0cmluZyB8IG51bWJlcj47XHJcblxyXG4vLyAtLS0gQ09NTUFORFMgJiBURVJNSU5BTCAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsRmlsZSBleHRlbmRzIElTdWdnZXN0aW9uIHtcclxuICAgIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgICBidWZmZXI/OiBCdWZmZXI7XHJcbiAgICBhY2NlcHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsIGV4dGVuZHMgSVRlcm1pbmFsQmFzZSB7XHJcbiAgICBzdWdnZXN0RmlsZXM/KGFjY2VwdDogc3RyaW5nKTogUHJvbWlzZTxJVGVybWluYWxGaWxlW10+O1xyXG4gICAgZG93bmxvYWRGaWxlPyhmaWxlbmFtZTogc3RyaW5nLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsQ29tbWFuZCB7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgZXhlY3V0ZShhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwsIHByb2dyZXNzOiBJUHJvZ3Jlc3NCYXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBzdWdnZXN0PyhhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPEFycmF5PHN0cmluZyB8IElTdWdnZXN0aW9uPj47XHJcbn1cclxuXHJcbi8vIC0tLSBBU1NFVFMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9ncmVzcyB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY3VycmVudDogbnVtYmVyO1xyXG4gICAgbWF4OiBudW1iZXI7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgY2FuY2VsZWQ6IGJvb2xlYW47XHJcbiAgICBwZXJjZW50OiBudW1iZXI7XHJcbiAgICByZW1haW5pbmc6IG51bWJlcjtcclxuICAgIHNldE1lc3NhZ2VCcmlkZ2UobWVzc2FnZUJyaWRnZTogSU1lc3NhZ2VCcmlkZ2UpOiB0aGlzO1xyXG4gICAgY3JlYXRlU3ViUHJvZ3Jlc3MocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBtYXg/OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz47XHJcbiAgICBzZXRNYXgobWF4OiBudW1iZXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBzZXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8YW55PjtcclxuICAgIHNldEVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcbiAgICBhZHZhbmNlKHZhbHVlPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgY2FuY2VsKCk6IFByb21pc2U8YW55PjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRDcm9wSW5mbyB7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB5OiBudW1iZXI7XHJcbiAgICB3OiBudW1iZXI7XHJcbiAgICBoOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTWV0YSB7XHJcbiAgICBjcm9wPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQmVmb3JlPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNhbnZhc1NjYWxlWD86IG51bWJlcjtcclxuICAgIGNhbnZhc1NjYWxlWT86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRNZXRhIGV4dGVuZHMgSUltYWdlTWV0YSB7XHJcbiAgICBmaWxlbmFtZT86IHN0cmluZztcclxuICAgIGV4dGVuc2lvbj86IHN0cmluZztcclxuICAgIGNsYXNzaWZpZWQ/OiBib29sZWFuO1xyXG4gICAgZG93bmxvYWRDb3VudD86IG51bWJlcjtcclxuICAgIGZpcnN0RG93bmxvYWQ/OiBEYXRlO1xyXG4gICAgbGFzdERvd25sb2FkPzogRGF0ZTtcclxuICAgIHByZXZpZXc/OiBPYmplY3RJZCB8IHN0cmluZztcclxuICAgIHB1YmxpY1VybD86IHN0cmluZztcclxuXHJcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldEltYWdlUGFyYW1zIHtcclxuICAgIHJvdGF0aW9uPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVYPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVZPzogbnVtYmVyO1xyXG4gICAgc2NhbGVYPzogbnVtYmVyO1xyXG4gICAgc2NhbGVZPzogbnVtYmVyO1xyXG4gICAgbGF6eT86IGJvb2xlYW47XHJcbiAgICBjcm9wPzogc3RyaW5nIHwgYm9vbGVhbjtcclxuICAgIGNyb3BCZWZvcmU/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0IHtcclxuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgc3RyZWFtSWQ6IE9iamVjdElkO1xyXG4gICAgcmVhZG9ubHkgZHJpdmVySWQ6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IGNvbnRlbnRUeXBlOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBtZXRhZGF0YTogSUFzc2V0TWV0YTtcclxuICAgIHJlYWRvbmx5IHN0cmVhbTogUmVhZGFibGU7XHJcbiAgICB1bmxpbmsoKTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gICAgc2V0TWV0YShtZXRhOiBQYXJ0aWFsPElBc3NldE1ldGE+KTogUHJvbWlzZTxhbnk+O1xyXG4gICAgZ2V0QnVmZmVyKCk6IFByb21pc2U8QnVmZmVyPjtcclxuICAgIG1vdmUoZHJpdmVySWQ6IHN0cmluZyk6IFByb21pc2U8SUFzc2V0PjtcclxuICAgIGRvd25sb2FkKG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+O1xyXG4gICAgZG93bmxvYWRJbWFnZShwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcywgbWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT47XHJcbiAgICBnZXRJbWFnZShwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcyk6IFByb21pc2U8UmVhZGFibGU+O1xyXG4gICAgc2F2ZSgpOiBQcm9taXNlPGFueT47XHJcbiAgICBsb2FkKCk6IFByb21pc2U8dGhpcz47XHJcbiAgICB0b0pTT04oKTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldFVwbG9hZFN0cmVhbSBleHRlbmRzIFdyaXRhYmxlIHtcclxuICAgIGlkPzogT2JqZWN0SWQ7XHJcbiAgICBkb25lPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRVcGxvYWRPcHRzIHtcclxuICAgIGNodW5rU2l6ZUJ5dGVzPzogbnVtYmVyO1xyXG4gICAgbWV0YWRhdGE/OiBJQXNzZXRNZXRhO1xyXG4gICAgY29udGVudFR5cGU6IHN0cmluZztcclxuICAgIGV4dGVuc2lvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldERyaXZlciB7XHJcbiAgICBvcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIG9wdHM6IElBc3NldFVwbG9hZE9wdHMpOiBJQXNzZXRVcGxvYWRTdHJlYW07XHJcbiAgICBvcGVuRG93bmxvYWRTdHJlYW0oYXNzZXQ6IElBc3NldCk6IFJlYWRhYmxlO1xyXG4gICAgZGVsZXRlKGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldERyaXZlcnMge1xyXG4gICAgcmVhZG9ubHkgbWlzc2luZ0RyaXZlcjogc3RyaW5nO1xyXG4gICAgZ2V0RHJpdmVyKGlkOiBzdHJpbmcpOiBJQXNzZXREcml2ZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxhenlBc3NldCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgam9iTmFtZTogc3RyaW5nO1xyXG4gICAgam9iUGFyYW1zOiBhbnk7XHJcbiAgICBqb2JRdWU6IHN0cmluZztcclxuICAgIGNyZWF0ZWRBdDogRGF0ZTtcclxuICAgIHVwZGF0ZWRBdDogRGF0ZTtcclxuICAgIHByb2dyZXNzSWQ/OiBzdHJpbmc7XHJcbiAgICBhc3NldElkPzogc3RyaW5nO1xyXG4gICAgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPjtcclxuICAgIHN0YXJ0V29ya2luZygpOiB2b2lkO1xyXG4gICAgbG9hZEFzc2V0KCk6IFByb21pc2U8SUFzc2V0PjtcclxuICAgIHdyaXRlQXNzZXQoYXNzZXQ6IElBc3NldCk6IFByb21pc2U8SUFzc2V0PjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc3NldERyaXZlckZhY3RvcnlNYXAge1xyXG4gICAgW25hbWU6IHN0cmluZ106IChkaTogSURlcGVuZGVuY3lDb250YWluZXIpID0+IElBc3NldERyaXZlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlciB7XHJcbiAgICBfaWQ/OiBzdHJpbmc7XHJcbiAgICBpZD86IHN0cmluZztcclxuICAgIGVtYWlsPzogc3RyaW5nO1xyXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XHJcbiAgICByb2xlczogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNsaWVudFNvY2tldCBleHRlbmRzIFNvY2tldCB7XHJcbiAgICBpbnRlcmVzdGVkUHJvZ3Jlc3NlczogU2V0PHN0cmluZz47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlcXVlc3RCYXNlPFQ+IGV4dGVuZHMgUmVxdWVzdCB7XHJcbiAgICBpZD86IHN0cmluZztcclxuICAgIHN0YXJ0ZWQ/OiBNb21lbnQ7XHJcbiAgICBlbmRlZD86IE1vbWVudDtcclxuICAgIGNvbnRhaW5lcj86IERlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICBsYW5ndWFnZT86IHN0cmluZztcclxuICAgIHVzZXI/OiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZXF1ZXN0IGV4dGVuZHMgSVJlcXVlc3RCYXNlPElVc2VyPiB7XHJcblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5SW1hZ2Uge1xyXG4gICAgZm9sZGVyOiBzdHJpbmc7XHJcbiAgICB0aHVtYjogc3RyaW5nO1xyXG4gICAgYmlnOiBzdHJpbmc7XHJcbiAgICBzZXJ2ZShpZDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdhbGxlcnlTaXplIHtcclxuICAgIHdpZHRoPzogbnVtYmVyO1xyXG4gICAgaGVpZ2h0PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5SW1hZ2VIYW5kbGVyIHtcclxuICAgIGdldE9yaWdpbmFsKCk6IFByb21pc2U8QnVmZmVyPjtcclxuICAgIHdyaXRlUmVzdWx0KGlzVGh1bWI6IGJvb2xlYW4sIGJ1ZmZlcjogQnVmZmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGhhc1Jlc3VsdChpc1RodW1iOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIHNlcnZlUmVzdWx0KGlzVGh1bWI6IGJvb2xlYW4pOiBQcm9taXNlPEJ1ZmZlcj47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zbGF0aW9ucyB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25NZXRhIHtcclxuICAgIHRvdGFsOiBudW1iZXI7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25CYXNlPFQ+IHtcclxuICAgIGNvdW50OiBudW1iZXJcclxuICAgIGl0ZW1zOiBUW107XHJcbiAgICBtZXRhPzogSVBhZ2luYXRpb25NZXRhO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uIGV4dGVuZHMgSVBhZ2luYXRpb25CYXNlPGFueT4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnaW5hdGlvblBhcmFtcyB7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICBsaW1pdDogbnVtYmVyO1xyXG4gICAgc29ydD86IHN0cmluZztcclxuICAgIHBvcHVsYXRlPzogc3RyaW5nW107XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZvbnRGb3JtYXQgPSBcIm9wZW50eXBlXCIgfCBcInRydWV0eXBlXCIgfCBcIndvZmZcIiB8IFwid29mZjJcIiB8IFwiZGF0YWZvcmtcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVUeXBlIHtcclxuICAgIGV4dDogc3RyaW5nO1xyXG4gICAgbWltZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSb3V0aW5nT3B0aW9ucyA9IFJvdXRpbmdDb250cm9sbGVyc09wdGlvbnM7XHJcblxyXG5leHBvcnQgdHlwZSBTb2NrZXRPcHRpb25zID0gT21pdDxTb2NrZXRDb250cm9sbGVyc09wdGlvbnMsIFwiY29udGFpbmVyXCI+O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmFja2VuZENvbmZpZyB7XHJcbiAgICByb290Rm9sZGVyPzogc3RyaW5nO1xyXG4gICAgcm91dGVQcmVmaXg/OiBzdHJpbmc7XHJcbiAgICBwYXJhbXM/OiBQYXJhbWV0ZXJbXTtcclxuICAgIGZpeHR1cmVzPzogVHlwZTxJRml4dHVyZT5bXTtcclxuICAgIGpvYnM/OiBUeXBlPElKb2I+W107XHJcbiAgICBjb21tYW5kcz86IFR5cGU8SVRlcm1pbmFsQ29tbWFuZD5bXTtcclxuICAgIHJlc3RPcHRpb25zPzogUm91dGluZ09wdGlvbnM7XHJcbiAgICBzb2NrZXRPcHRpb25zPzogU29ja2V0T3B0aW9ucztcclxuICAgIGN1c3RvbVZhbGlkYXRpb24/OiBTY2hlbWFDb252ZXJ0ZXIgfCBTY2hlbWFPYmplY3Q7XHJcbiAgICBhc3NldExvY2FsRGlyPzogc3RyaW5nO1xyXG4gICAgYXNzZXREcml2ZXJzPzogQXNzZXREcml2ZXJGYWN0b3J5TWFwO1xyXG59XHJcbiJdfQ==