UNPKG

@compodoc/compodoc

Version:

The missing documentation tool for your Angular application

803 lines (802 loc) 60 kB
//#region src/template-playground/example-data.ts const EXAMPLE_DATA = { component: { name: "UserProfileComponent", file: "src/app/components/user-profile.component.ts", deprecated: false, selector: "app-user-profile", templateUrl: "./user-profile.component.html", styleUrls: ["./user-profile.component.scss"], description: "Component for displaying and editing user profile information", inputs: [{ name: "user", type: "User", description: "The user object to display", line: 15, defaultValue: "null" }, { name: "editable", type: "boolean", description: "Whether the profile can be edited", line: 18, defaultValue: "false" }], outputs: [{ name: "userUpdated", type: "EventEmitter<User>", description: "Emitted when user profile is updated", line: 21 }], properties: [{ name: "isLoading", type: "boolean", defaultValue: "false", description: "Loading state indicator", line: 25, modifierKind: [119] }], methods: [{ name: "saveProfile", type: "void", description: "Saves the user profile changes", line: 30, modifierKind: [119], args: [{ name: "userData", type: "Partial<User>", description: "Updated user data" }] }], implements: ["OnInit", "OnDestroy"], hostListeners: [{ name: "window:resize", args: ["$event"], argsDecorator: ["$event"], description: "Handle window resize events" }], template: "<div class=\"user-profile\">...</div>", styles: [".user-profile { padding: 1rem; }"], readme: "This component provides a comprehensive user profile management interface.", navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" }, { href: "#template", id: "template", label: "template", "data-link": "template" }, { href: "#styles", id: "styles", label: "styles", "data-link": "styles" }, { href: "#dom-tree", id: "dom-tree", label: "dom-tree", "data-link": "dom-tree" } ] }, module: { name: "UserModule", file: "src/app/modules/user/user.module.ts", deprecated: false, description: "Module containing all user-related components and services", declarations: [ { name: "UserProfileComponent", type: "component" }, { name: "UserListComponent", type: "component" }, { name: "UserDirective", type: "directive" } ], imports: [ { name: "CommonModule", type: "module" }, { name: "FormsModule", type: "module" }, { name: "HttpClientModule", type: "module" } ], exports: [{ name: "UserProfileComponent", type: "component" }, { name: "UserListComponent", type: "component" }], providers: [{ name: "UserService", type: "service" }, { name: "UserResolver", type: "resolver" }], bootstrap: [], graph: "<svg>...</svg>", navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, interface: { name: "User", file: "src/app/interfaces/user.interface.ts", deprecated: false, description: "Interface defining the structure of a user object", properties: [ { name: "id", type: "string", description: "Unique identifier for the user", line: 3, optional: false }, { name: "email", type: "string", description: "User email address", line: 4, optional: false }, { name: "firstName", type: "string", description: "User first name", line: 5, optional: true }, { name: "lastName", type: "string", description: "User last name", line: 6, optional: true }, { name: "avatar", type: "string", description: "URL to user avatar image", line: 7, optional: true } ], indexSignatures: [], kind: "interface", navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, class: { name: "UserRepository", file: "src/app/repositories/user.repository.ts", deprecated: false, description: "Repository class for managing user data operations", constructorObj: { name: "constructor", description: "Creates an instance of UserRepository", args: [{ name: "httpClient", type: "HttpClient", description: "HTTP client for API requests" }] }, properties: [{ name: "baseUrl", type: "string", defaultValue: "'/api/users'", description: "Base URL for user API endpoints", line: 10, modifierKind: [121] }], methods: [{ name: "getUser", type: "Observable<User>", description: "Retrieves a user by ID", line: 15, modifierKind: [119], args: [{ name: "id", type: "string", description: "User ID" }] }, { name: "updateUser", type: "Observable<User>", description: "Updates user information", line: 20, modifierKind: [119], args: [{ name: "id", type: "string", description: "User ID" }, { name: "userData", type: "Partial<User>", description: "Updated user data" }] }], extends: ["BaseRepository"], implements: ["UserRepositoryInterface"], navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, injectable: { name: "UserService", file: "src/app/services/user.service.ts", deprecated: false, description: "Service for managing user-related business logic", properties: [{ name: "currentUser$", type: "BehaviorSubject<User | null>", defaultValue: "new BehaviorSubject(null)", description: "Observable stream of the current user", line: 12, modifierKind: [121] }], methods: [{ name: "getCurrentUser", type: "Observable<User | null>", description: "Returns the current user as an observable", line: 18, modifierKind: [119] }, { name: "login", type: "Observable<User>", description: "Authenticates a user", line: 25, modifierKind: [119], args: [{ name: "credentials", type: "LoginCredentials", description: "User login credentials" }] }], constructorObj: { name: "constructor", description: "Creates an instance of UserService", args: [{ name: "userRepository", type: "UserRepository", description: "Repository for user data operations" }] }, navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, directive: { name: "HighlightDirective", file: "src/app/directives/highlight.directive.ts", deprecated: false, selector: "[appHighlight]", description: "Directive for highlighting elements on hover", inputs: [{ name: "highlightColor", type: "string", description: "Color to use for highlighting", line: 10, defaultValue: "'yellow'" }], hostListeners: [{ name: "mouseenter", args: [], description: "Handle mouse enter events" }, { name: "mouseleave", args: [], description: "Handle mouse leave events" }], navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, pipe: { name: "TruncatePipe", file: "src/app/pipes/truncate.pipe.ts", deprecated: false, description: "Pipe for truncating text to a specified length", methods: [{ name: "transform", type: "string", description: "Transforms the input text by truncating it", line: 8, modifierKind: [119], args: [ { name: "value", type: "string", description: "Text to truncate" }, { name: "limit", type: "number", description: "Maximum length" }, { name: "ellipsis", type: "string", description: "Ellipsis string to append" } ] }], implements: ["PipeTransform"], navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, guard: { name: "AuthGuard", file: "src/app/guards/auth.guard.ts", deprecated: false, description: "Guard for protecting routes that require authentication", methods: [{ name: "canActivate", type: "Observable<boolean> | Promise<boolean> | boolean", description: "Determines if the route can be activated", line: 12, modifierKind: [119], args: [{ name: "route", type: "ActivatedRouteSnapshot", description: "Current route snapshot" }, { name: "state", type: "RouterStateSnapshot", description: "Current router state" }] }], implements: ["CanActivate"], navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, interceptor: { name: "AuthInterceptor", file: "src/app/interceptors/auth.interceptor.ts", deprecated: false, description: "HTTP interceptor for adding authentication headers", methods: [{ name: "intercept", type: "Observable<HttpEvent<any>>", description: "Intercepts HTTP requests to add auth headers", line: 10, modifierKind: [119], args: [{ name: "req", type: "HttpRequest<any>", description: "HTTP request to intercept" }, { name: "next", type: "HttpHandler", description: "Next handler in the chain" }] }], implements: ["HttpInterceptor"], navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, entity: { name: "UserEntity", file: "src/app/entities/user.entity.ts", deprecated: false, description: "Entity class representing a user in the database", properties: [{ name: "id", type: "string", description: "Primary key identifier", line: 5, decorators: ["@PrimaryGeneratedColumn()"] }, { name: "email", type: "string", description: "User email address", line: 8, decorators: ["@Column({ unique: true })"] }], decorators: ["@Entity()"], navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, controller: { name: "UserController", file: "src/app/controllers/user.controller.ts", deprecated: false, description: "REST controller for user operations", methods: [{ name: "getUsers", type: "Promise<User[]>", description: "Get all users", line: 12, modifierKind: [119], decorators: ["@Get()"] }, { name: "getUserById", type: "Promise<User>", description: "Get user by ID", line: 18, modifierKind: [119], decorators: ["@Get(\":id\")"], args: [{ name: "id", type: "string", description: "User ID" }] }], decorators: ["@Controller(\"users\")"], navTabs: [ { href: "#info", id: "info", label: "info", "data-link": "info" }, { href: "#readme", id: "readme", label: "readme", "data-link": "readme" }, { href: "#source", id: "source", label: "source", "data-link": "source" } ] }, miscellaneous: { variables: [{ name: "API_BASE_URL", type: "string", defaultValue: "'https://api.example.com'", description: "Base URL for API endpoints", file: "src/app/constants/api.constants.ts" }], functions: [{ name: "formatDate", type: "(date: Date, format?: string) => string", description: "Formats a date according to the specified format", file: "src/app/utils/date.utils.ts" }], typeAliases: [{ name: "UserId", type: "string", description: "Type alias for user identifier", file: "src/app/types/user.types.ts" }], enumerations: [{ name: "UserRole", description: "Enumeration of user roles", file: "src/app/enums/user-role.enum.ts", childs: [ { name: "ADMIN", value: "admin" }, { name: "USER", value: "user" }, { name: "GUEST", value: "guest" } ] }] }, overview: { modules: [{ name: "AppModule", file: "src/app/app.module.ts" }, { name: "UserModule", file: "src/app/modules/user/user.module.ts" }], components: [{ name: "AppComponent", file: "src/app/app.component.ts" }, { name: "UserProfileComponent", file: "src/app/components/user-profile.component.ts" }], injectables: [{ name: "UserService", file: "src/app/services/user.service.ts" }], pipes: [{ name: "TruncatePipe", file: "src/app/pipes/truncate.pipe.ts" }], directives: [{ name: "HighlightDirective", file: "src/app/directives/highlight.directive.ts" }], classes: [{ name: "UserRepository", file: "src/app/repositories/user.repository.ts" }], interfaces: [{ name: "User", file: "src/app/interfaces/user.interface.ts" }], guards: [{ name: "AuthGuard", file: "src/app/guards/auth.guard.ts" }], interceptors: [{ name: "AuthInterceptor", file: "src/app/interceptors/auth.interceptor.ts" }] }, index: { modules: 2, components: 2, injectables: 1, pipes: 1, directives: 1, classes: 1, interfaces: 1, guards: 1, interceptors: 1 } }; const TEMPLATE_CONTEXT = { t: (key) => { return { "components": "Components", "modules": "Modules", "interfaces": "Interfaces", "classes": "Classes", "injectables": "Injectables", "pipes": "Pipes", "directives": "Directives", "guards": "Guards", "interceptors": "Interceptors", "entities": "Entities", "controllers": "Controllers", "info": "Info", "readme": "Readme", "source": "Source", "template": "Template", "styles": "Styles", "dom-tree": "DOM Tree", "file": "File", "overview": "Overview", "getting-started": "Getting Started", "properties": "Properties", "methods": "Methods", "inputs": "Inputs", "outputs": "Outputs", "accessors": "Accessors", "constructor": "Constructor", "zoomin": "Zoom In", "zoomout": "Zoom Out", "reset": "Reset" }[key] || key; }, relativeURL: (depth, ...args) => { return (typeof depth === "number" ? "../".repeat(depth) : depth) + args.join("/"); }, compare: (a, operator, b) => { switch (operator) { case "===": return a === b; case "!==": return a !== b; case "==": return a == b; case "!=": return a != b; case "<": return a < b; case ">": return a > b; case "<=": return a <= b; case ">=": return a >= b; default: return false; } }, isTabEnabled: (navTabs, tabId) => { return navTabs.some((tab) => tab.id === tabId); }, isInitialTab: (navTabs, tabId) => { return navTabs.length > 0 && navTabs[0].id === tabId; }, depth: 0, disableSearch: false, disableGraph: false, disableCoverage: false, disableLifeCycleHooks: false, disableProperties: false, disableDomTree: false, disableTemplateTab: false, disableStyleTab: false, disablePrivate: false, disableProtected: false, disableInternal: false }; //#endregion exports.EXAMPLE_DATA = EXAMPLE_DATA; exports.TEMPLATE_CONTEXT = TEMPLATE_CONTEXT; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS1kYXRhLUI4YkF4MEIxLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy90ZW1wbGF0ZS1wbGF5Z3JvdW5kL2V4YW1wbGUtZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4YW1wbGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRlbXBsYXRlIHBsYXlncm91bmRcbiAqIENvbnRhaW5zIG1vY2sgZGF0YSBmb3IgYWxsIHN1cHBvcnRlZCB0ZW1wbGF0ZSB0eXBlc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhhbXBsZURhdGEge1xuICAgIGNvbXBvbmVudDogYW55O1xuICAgIG1vZHVsZTogYW55O1xuICAgIGludGVyZmFjZTogYW55O1xuICAgIGNsYXNzOiBhbnk7XG4gICAgaW5qZWN0YWJsZTogYW55O1xuICAgIGRpcmVjdGl2ZTogYW55O1xuICAgIHBpcGU6IGFueTtcbiAgICBndWFyZDogYW55O1xuICAgIGludGVyY2VwdG9yOiBhbnk7XG4gICAgZW50aXR5OiBhbnk7XG4gICAgY29udHJvbGxlcjogYW55O1xuICAgIG1pc2NlbGxhbmVvdXM6IGFueTtcbiAgICBvdmVydmlldzogYW55O1xuICAgIGluZGV4OiBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBFWEFNUExFX0RBVEE6IEV4YW1wbGVEYXRhID0ge1xuICAgIGNvbXBvbmVudDoge1xuICAgICAgICBuYW1lOiAnVXNlclByb2ZpbGVDb21wb25lbnQnLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9jb21wb25lbnRzL3VzZXItcHJvZmlsZS5jb21wb25lbnQudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0b3I6ICdhcHAtdXNlci1wcm9maWxlJyxcbiAgICAgICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcHJvZmlsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgICAgIHN0eWxlVXJsczogWycuL3VzZXItcHJvZmlsZS5jb21wb25lbnQuc2NzcyddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbXBvbmVudCBmb3IgZGlzcGxheWluZyBhbmQgZWRpdGluZyB1c2VyIHByb2ZpbGUgaW5mb3JtYXRpb24nLFxuICAgICAgICBpbnB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndXNlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1VzZXInLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHVzZXIgb2JqZWN0IHRvIGRpc3BsYXknLFxuICAgICAgICAgICAgICAgIGxpbmU6IDE1LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ251bGwnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlZGl0YWJsZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgcHJvZmlsZSBjYW4gYmUgZWRpdGVkJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxOCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICdmYWxzZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd1c2VyVXBkYXRlZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0V2ZW50RW1pdHRlcjxVc2VyPicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFbWl0dGVkIHdoZW4gdXNlciBwcm9maWxlIGlzIHVwZGF0ZWQnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDIxXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNMb2FkaW5nJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnZmFsc2UnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTG9hZGluZyBzdGF0ZSBpbmRpY2F0b3InLFxuICAgICAgICAgICAgICAgIGxpbmU6IDI1LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0gLy8gcHVibGljXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZVByb2ZpbGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd2b2lkJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1NhdmVzIHRoZSB1c2VyIHByb2ZpbGUgY2hhbmdlcycsXG4gICAgICAgICAgICAgICAgbGluZTogMzAsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndXNlckRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BhcnRpYWw8VXNlcj4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVcGRhdGVkIHVzZXIgZGF0YSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW1wbGVtZW50czogWydPbkluaXQnLCAnT25EZXN0cm95J10sXG4gICAgICAgIGhvc3RMaXN0ZW5lcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnd2luZG93OnJlc2l6ZScsXG4gICAgICAgICAgICAgICAgYXJnczogWyckZXZlbnQnXSxcbiAgICAgICAgICAgICAgICBhcmdzRGVjb3JhdG9yOiBbJyRldmVudCddLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGFuZGxlIHdpbmRvdyByZXNpemUgZXZlbnRzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ1c2VyLXByb2ZpbGVcIj4uLi48L2Rpdj4nLFxuICAgICAgICBzdHlsZXM6IFsnLnVzZXItcHJvZmlsZSB7IHBhZGRpbmc6IDFyZW07IH0nXSxcbiAgICAgICAgcmVhZG1lOiAnVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBjb21wcmVoZW5zaXZlIHVzZXIgcHJvZmlsZSBtYW5hZ2VtZW50IGludGVyZmFjZS4nLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3RlbXBsYXRlJywgaWQ6ICd0ZW1wbGF0ZScsIGxhYmVsOiAndGVtcGxhdGUnLCAnZGF0YS1saW5rJzogJ3RlbXBsYXRlJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3N0eWxlcycsIGlkOiAnc3R5bGVzJywgbGFiZWw6ICdzdHlsZXMnLCAnZGF0YS1saW5rJzogJ3N0eWxlcycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNkb20tdHJlZScsIGlkOiAnZG9tLXRyZWUnLCBsYWJlbDogJ2RvbS10cmVlJywgJ2RhdGEtbGluayc6ICdkb20tdHJlZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIG1vZHVsZToge1xuICAgICAgICBuYW1lOiAnVXNlck1vZHVsZScsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL21vZHVsZXMvdXNlci91c2VyLm1vZHVsZS50cycsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ01vZHVsZSBjb250YWluaW5nIGFsbCB1c2VyLXJlbGF0ZWQgY29tcG9uZW50cyBhbmQgc2VydmljZXMnLFxuICAgICAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJQcm9maWxlQ29tcG9uZW50JywgdHlwZTogJ2NvbXBvbmVudCcgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJMaXN0Q29tcG9uZW50JywgdHlwZTogJ2NvbXBvbmVudCcgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJEaXJlY3RpdmUnLCB0eXBlOiAnZGlyZWN0aXZlJyB9XG4gICAgICAgIF0sXG4gICAgICAgIGltcG9ydHM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0NvbW1vbk1vZHVsZScsIHR5cGU6ICdtb2R1bGUnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdGb3Jtc01vZHVsZScsIHR5cGU6ICdtb2R1bGUnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdIdHRwQ2xpZW50TW9kdWxlJywgdHlwZTogJ21vZHVsZScgfVxuICAgICAgICBdLFxuICAgICAgICBleHBvcnRzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyUHJvZmlsZUNvbXBvbmVudCcsIHR5cGU6ICdjb21wb25lbnQnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyTGlzdENvbXBvbmVudCcsIHR5cGU6ICdjb21wb25lbnQnIH1cbiAgICAgICAgXSxcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyU2VydmljZScsIHR5cGU6ICdzZXJ2aWNlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVXNlclJlc29sdmVyJywgdHlwZTogJ3Jlc29sdmVyJyB9XG4gICAgICAgIF0sXG4gICAgICAgIGJvb3RzdHJhcDogW10sXG4gICAgICAgIGdyYXBoOiAnPHN2Zz4uLi48L3N2Zz4nLCAvLyBTVkcgZGVwZW5kZW5jeSBncmFwaFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgaW50ZXJmYWNlOiB7XG4gICAgICAgIG5hbWU6ICdVc2VyJyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvaW50ZXJmYWNlcy91c2VyLmludGVyZmFjZS50cycsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBkZWZpbmluZyB0aGUgc3RydWN0dXJlIG9mIGEgdXNlciBvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdXNlcicsXG4gICAgICAgICAgICAgICAgbGluZTogMyxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgZW1haWwgYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgbGluZTogNCxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZpcnN0TmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGZpcnN0IG5hbWUnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDUsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2xhc3ROYW1lJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgbGFzdCBuYW1lJyxcbiAgICAgICAgICAgICAgICBsaW5lOiA2LFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdhdmF0YXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVVJMIHRvIHVzZXIgYXZhdGFyIGltYWdlJyxcbiAgICAgICAgICAgICAgICBsaW5lOiA3LFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGluZGV4U2lnbmF0dXJlczogW10sXG4gICAgICAgIGtpbmQ6ICdpbnRlcmZhY2UnLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgY2xhc3M6IHtcbiAgICAgICAgbmFtZTogJ1VzZXJSZXBvc2l0b3J5JyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvcmVwb3NpdG9yaWVzL3VzZXIucmVwb3NpdG9yeS50cycsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcG9zaXRvcnkgY2xhc3MgZm9yIG1hbmFnaW5nIHVzZXIgZGF0YSBvcGVyYXRpb25zJyxcbiAgICAgICAgY29uc3RydWN0b3JPYmo6IHtcbiAgICAgICAgICAgIG5hbWU6ICdjb25zdHJ1Y3RvcicsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVXNlclJlcG9zaXRvcnknLFxuICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2h0dHBDbGllbnQnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSHR0cENsaWVudCcsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSFRUUCBjbGllbnQgZm9yIEFQSSByZXF1ZXN0cydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYmFzZVVybCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBcIicvYXBpL3VzZXJzJ1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQmFzZSBVUkwgZm9yIHVzZXIgQVBJIGVuZHBvaW50cycsXG4gICAgICAgICAgICAgICAgbGluZTogMTAsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTIxXSAvLyBwcml2YXRlXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0VXNlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09ic2VydmFibGU8VXNlcj4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmV0cmlldmVzIGEgdXNlciBieSBJRCcsXG4gICAgICAgICAgICAgICAgbGluZTogMTUsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgSUQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd1cGRhdGVVc2VyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT2JzZXJ2YWJsZTxVc2VyPicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVcGRhdGVzIHVzZXIgaW5mb3JtYXRpb24nLFxuICAgICAgICAgICAgICAgIGxpbmU6IDIwLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIElEJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndXNlckRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BhcnRpYWw8VXNlcj4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVcGRhdGVkIHVzZXIgZGF0YSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZXh0ZW5kczogWydCYXNlUmVwb3NpdG9yeSddLFxuICAgICAgICBpbXBsZW1lbnRzOiBbJ1VzZXJSZXBvc2l0b3J5SW50ZXJmYWNlJ10sXG4gICAgICAgIG5hdlRhYnM6IFtcbiAgICAgICAgICAgIHsgaHJlZjogJyNpbmZvJywgaWQ6ICdpbmZvJywgbGFiZWw6ICdpbmZvJywgJ2RhdGEtbGluayc6ICdpbmZvJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3JlYWRtZScsIGlkOiAncmVhZG1lJywgbGFiZWw6ICdyZWFkbWUnLCAnZGF0YS1saW5rJzogJ3JlYWRtZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzb3VyY2UnLCBpZDogJ3NvdXJjZScsIGxhYmVsOiAnc291cmNlJywgJ2RhdGEtbGluayc6ICdzb3VyY2UnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBpbmplY3RhYmxlOiB7XG4gICAgICAgIG5hbWU6ICdVc2VyU2VydmljZScsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL3NlcnZpY2VzL3VzZXIuc2VydmljZS50cycsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1NlcnZpY2UgZm9yIG1hbmFnaW5nIHVzZXItcmVsYXRlZCBidXNpbmVzcyBsb2dpYycsXG4gICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY3VycmVudFVzZXIkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnQmVoYXZpb3JTdWJqZWN0PFVzZXIgfCBudWxsPicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPYnNlcnZhYmxlIHN0cmVhbSBvZiB0aGUgY3VycmVudCB1c2VyJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxMixcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMjFdIC8vIHByaXZhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgbWV0aG9kczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdnZXRDdXJyZW50VXNlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09ic2VydmFibGU8VXNlciB8IG51bGw+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGN1cnJlbnQgdXNlciBhcyBhbiBvYnNlcnZhYmxlJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxOCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldIC8vIHB1YmxpY1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbG9naW4nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPYnNlcnZhYmxlPFVzZXI+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0F1dGhlbnRpY2F0ZXMgYSB1c2VyJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAyNSxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjcmVkZW50aWFscycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTG9naW5DcmVkZW50aWFscycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgbG9naW4gY3JlZGVudGlhbHMnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGNvbnN0cnVjdG9yT2JqOiB7XG4gICAgICAgICAgICBuYW1lOiAnY29uc3RydWN0b3InLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVzZXJTZXJ2aWNlJyxcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICd1c2VyUmVwb3NpdG9yeScsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdVc2VyUmVwb3NpdG9yeScsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVwb3NpdG9yeSBmb3IgdXNlciBkYXRhIG9wZXJhdGlvbnMnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgZGlyZWN0aXZlOiB7XG4gICAgICAgIG5hbWU6ICdIaWdobGlnaHREaXJlY3RpdmUnLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9kaXJlY3RpdmVzL2hpZ2hsaWdodC5kaXJlY3RpdmUudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0b3I6ICdbYXBwSGlnaGxpZ2h0XScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRGlyZWN0aXZlIGZvciBoaWdobGlnaHRpbmcgZWxlbWVudHMgb24gaG92ZXInLFxuICAgICAgICBpbnB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaGlnaGxpZ2h0Q29sb3InLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ29sb3IgdG8gdXNlIGZvciBoaWdobGlnaHRpbmcnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDEwLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCIneWVsbG93J1wiXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGhvc3RMaXN0ZW5lcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbW91c2VlbnRlcicsXG4gICAgICAgICAgICAgICAgYXJnczogW10sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdIYW5kbGUgbW91c2UgZW50ZXIgZXZlbnRzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnbW91c2VsZWF2ZScsXG4gICAgICAgICAgICAgICAgYXJnczogW10sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdIYW5kbGUgbW91c2UgbGVhdmUgZXZlbnRzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgcGlwZToge1xuICAgICAgICBuYW1lOiAnVHJ1bmNhdGVQaXBlJyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvcGlwZXMvdHJ1bmNhdGUucGlwZS50cycsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1BpcGUgZm9yIHRydW5jYXRpbmcgdGV4dCB0byBhIHNwZWNpZmllZCBsZW5ndGgnLFxuICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUcmFuc2Zvcm1zIHRoZSBpbnB1dCB0ZXh0IGJ5IHRydW5jYXRpbmcgaXQnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDgsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RleHQgdG8gdHJ1bmNhdGUnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdsaW1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTWF4aW11bSBsZW5ndGgnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRWxsaXBzaXMgc3RyaW5nIHRvIGFwcGVuZCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW1wbGVtZW50czogWydQaXBlVHJhbnNmb3JtJ10sXG4gICAgICAgIG5hdlRhYnM6IFtcbiAgICAgICAgICAgIHsgaHJlZjogJyNpbmZvJywgaWQ6ICdpbmZvJywgbGFiZWw6ICdpbmZvJywgJ2RhdGEtbGluayc6ICdpbmZvJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3JlYWRtZScsIGlkOiAncmVhZG1lJywgbGFiZWw6ICdyZWFkbWUnLCAnZGF0YS1saW5rJzogJ3JlYWRtZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzb3VyY2UnLCBpZDogJ3NvdXJjZScsIGxhYmVsOiAnc291cmNlJywgJ2RhdGEtbGluayc6ICdzb3VyY2UnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBndWFyZDoge1xuICAgICAgICBuYW1lOiAnQXV0aEd1YXJkJyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvZ3VhcmRzL2F1dGguZ3VhcmQudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHdWFyZCBmb3IgcHJvdGVjdGluZyByb3V0ZXMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgbWV0aG9kczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjYW5BY3RpdmF0ZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09ic2VydmFibGU8Ym9vbGVhbj4gfCBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEZXRlcm1pbmVzIGlmIHRoZSByb3V0ZSBjYW4gYmUgYWN0aXZhdGVkJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxMixcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyb3V0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQWN0aXZhdGVkUm91dGVTbmFwc2hvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0N1cnJlbnQgcm91dGUgc25hcHNob3QnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzdGF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUm91dGVyU3RhdGVTbmFwc2hvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0N1cnJlbnQgcm91dGVyIHN0YXRlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbXBsZW1lbnRzOiBbJ0NhbkFjdGl2YXRlJ10sXG4gICAgICAgIG5hdlRhYnM6IFtcbiAgICAgICAgICAgIHsgaHJlZjogJyNpbmZvJywgaWQ6ICdpbmZvJywgbGFiZWw6ICdpbmZvJywgJ2RhdGEtbGluayc6ICdpbmZvJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3JlYWRtZScsIGlkOiAncmVhZG1lJywgbGFiZWw6ICdyZWFkbWUnLCAnZGF0YS1saW5rJzogJ3JlYWRtZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzb3VyY2UnLCBpZDogJ3NvdXJjZScsIGxhYmVsOiAnc291cmNlJywgJ2RhdGEtbGluayc6ICdzb3VyY2UnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBpbnRlcmNlcHRvcjoge1xuICAgICAgICBuYW1lOiAnQXV0aEludGVyY2VwdG9yJyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvaW50ZXJjZXB0b3JzL2F1dGguaW50ZXJjZXB0b3IudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdIVFRQIGludGVyY2VwdG9yIGZvciBhZGRpbmcgYXV0aGVudGljYXRpb24gaGVhZGVycycsXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaW50ZXJjZXB0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJjZXB0cyBIVFRQIHJlcXVlc3RzIHRvIGFkZCBhdXRoIGhlYWRlcnMnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDEwLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3JlcScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSHR0cFJlcXVlc3Q8YW55PicsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hUVFAgcmVxdWVzdCB0byBpbnRlcmNlcHQnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICduZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdIdHRwSGFuZGxlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05leHQgaGFuZGxlciBpbiB0aGUgY2hhaW4nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGltcGxlbWVudHM6IFsnSHR0cEludGVyY2VwdG9yJ10sXG4gICAgICAgIG5hdlRhYnM6IFtcbiAgICAgICAgICAgIHsgaHJlZjogJyNpbmZvJywgaWQ6ICdpbmZvJywgbGFiZWw6ICdpbmZvJywgJ2RhdGEtbGluayc6ICdpbmZvJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3JlYWRtZScsIGlkOiAncmVhZG1lJywgbGFiZWw6ICdyZWFkbWUnLCAnZGF0YS1saW5rJzogJ3JlYWRtZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzb3VyY2UnLCBpZDogJ3NvdXJjZScsIGxhYmVsOiAnc291cmNlJywgJ2RhdGEtbGluayc6ICdzb3VyY2UnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBlbnRpdHk6IHtcbiAgICAgICAgbmFtZTogJ1VzZXJFbnRpdHknLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9lbnRpdGllcy91c2VyLmVudGl0eS50cycsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0VudGl0eSBjbGFzcyByZXByZXNlbnRpbmcgYSB1c2VyIGluIHRoZSBkYXRhYmFzZScsXG4gICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUHJpbWFyeSBrZXkgaWRlbnRpZmllcicsXG4gICAgICAgICAgICAgICAgbGluZTogNSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBbJ0BQcmltYXJ5R2VuZXJhdGVkQ29sdW1uKCknXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBlbWFpbCBhZGRyZXNzJyxcbiAgICAgICAgICAgICAgICBsaW5lOiA4LFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IFsnQENvbHVtbih7IHVuaXF1ZTogdHJ1ZSB9KSddXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGRlY29yYXRvcnM6IFsnQEVudGl0eSgpJ10sXG4gICAgICAgIG5hdlRhYnM6IFtcbiAgICAgICAgICAgIHsgaHJlZjogJyNpbmZvJywgaWQ6ICdpbmZvJywgbGFiZWw6ICdpbmZvJywgJ2RhdGEtbGluayc6ICdpbmZvJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3JlYWRtZScsIGlkOiAncmVhZG1lJywgbGFiZWw6ICdyZWFkbWUnLCAnZGF0YS1saW5rJzogJ3JlYWRtZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzb3VyY2UnLCBpZDogJ3NvdXJjZScsIGxhYmVsOiAnc291cmNlJywgJ2RhdGEtbGluayc6ICdzb3VyY2UnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG5hbWU6ICdVc2VyQ29udHJvbGxlcicsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL2NvbnRyb2xsZXJzL3VzZXIuY29udHJvbGxlci50cycsXG4gICAgICAgIGRlcHJlY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1JFU1QgY29udHJvbGxlciBmb3IgdXNlciBvcGVyYXRpb25zJyxcbiAgICAgICAgbWV0aG9kczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdnZXRVc2VycycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Byb21pc2U8VXNlcltdPicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZXQgYWxsIHVzZXJzJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxMixcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBbJ0BHZXQoKSddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdnZXRVc2VyQnlJZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ1Byb21pc2U8VXNlcj4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IHVzZXIgYnkgSUQnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDE4LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IFsnQEdldChcIjppZFwiKSddLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIElEJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBkZWNvcmF0b3JzOiBbJ0BDb250cm9sbGVyKFwidXNlcnNcIiknXSxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIG1pc2NlbGxhbmVvdXM6IHtcbiAgICAgICAgdmFyaWFibGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0FQSV9CQVNFX1VSTCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBcIidodHRwczovL2FwaS5leGFtcGxlLmNvbSdcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgVVJMIGZvciBBUEkgZW5kcG9pbnRzJyxcbiAgICAgICAgICAgICAgICBmaWxlOiAnc3JjL2FwcC9jb25zdGFudHMvYXBpLmNvbnN0YW50cy50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZnVuY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Zvcm1hdERhdGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICcoZGF0ZTogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nKSA9PiBzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRm9ybWF0cyBhIGRhdGUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0JyxcbiAgICAgICAgICAgICAgICBmaWxlOiAnc3JjL2FwcC91dGlscy9kYXRlLnV0aWxzLnRzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB0eXBlQWxpYXNlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdVc2VySWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVHlwZSBhbGlhcyBmb3IgdXNlciBpZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICBmaWxlOiAnc3JjL2FwcC90eXBlcy91c2VyLnR5cGVzLnRzJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBlbnVtZXJhdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVXNlclJvbGUnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRW51bWVyYXRpb24gb2YgdXNlciByb2xlcycsXG4gICAgICAgICAgICAgICAgZmlsZTogJ3NyYy9hcHAvZW51bXMvdXNlci1yb2xlLmVudW0udHMnLFxuICAgICAgICAgICAgICAgIGNoaWxkczogW1xuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdBRE1JTicsIHZhbHVlOiAnYWRtaW4nIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ1VTRVInLCB2YWx1ZTogJ3VzZXInIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ0dVRVNUJywgdmFsdWU6ICdndWVzdCcgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBvdmVydmlldzoge1xuICAgICAgICBtb2R1bGVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdBcHBNb2R1bGUnLCBmaWxlOiAnc3JjL2FwcC9hcHAubW9kdWxlLnRzJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVXNlck1vZHVsZScsIGZpbGU6ICdzcmMvYXBwL21vZHVsZXMvdXNlci91c2VyLm1vZHVsZS50cycgfVxuICAgICAgICBdLFxuICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdBcHBDb21wb25lbnQnLCBmaWxlOiAnc3JjL2FwcC9hcHAuY29tcG9uZW50LnRzJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVXNlclByb2ZpbGVDb21wb25lbnQnLCBmaWxlOiAnc3JjL2FwcC9jb21wb25lbnRzL3VzZXItcHJvZmlsZS5jb21wb25lbnQudHMnIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW5qZWN0YWJsZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJTZXJ2aWNlJywgZmlsZTogJ3NyYy9hcHAvc2VydmljZXMvdXNlci5zZXJ2aWNlLnRzJyB9XG4gICAgICAgIF0sXG4gICAgICAgIHBpcGVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdUcnVuY2F0ZVBpcGUnLCBmaWxlOiAnc3JjL2FwcC9waXBlcy90cnVuY2F0ZS5waXBlLnRzJyB9XG4gICAgICAgIF0sXG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0hpZ2hsaWdodERpcmVjdGl2ZScsIGZpbGU6ICdzcmMvYXBwL2RpcmVjdGl2ZXMvaGlnaGxpZ2h0LmRpcmVjdGl2ZS50cycgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzc2VzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyUmVwb3NpdG9yeScsIGZpbGU6ICdzcmMvYXBwL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkudHMnIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW50ZXJmYWNlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVXNlcicsIGZpbGU6ICdzcmMvYXBwL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UudHMnIH1cbiAgICAgICAgXSxcbiAgICAgICAgZ3VhcmRzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdBdXRoR3VhcmQnLCBmaWxlOiAnc3JjL2FwcC9ndWFyZHMvYXV0aC5ndWFyZC50cycgfVxuICAgICAgICBdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0F1dGhJbnRlcmNlcHRvcicsIGZpbGU6ICdzcmMvYXBwL2ludGVyY2VwdG9ycy9hdXRoLmludGVyY2VwdG9yLnRzJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgaW5kZXg6IHtcbiAgICAgICAgbW9kdWxlczogMixcbiAgICAgICAgY29tcG9uZW50czogMixcbiAgICAgICAgaW5qZWN0YWJsZXM6IDEsXG4gICAgICAgIHBpcGVzOiAxLFxuICAgICAgICBkaXJlY3RpdmVzOiAxLFxuICAgICAgICBjbGFzc2VzOiAxLFxuICAgICAgICBpbnRlcmZhY2VzOiAxLFxuICAgICAgICBndWFyZHM6IDEsXG4gICAgICAgIGludGVyY2VwdG9yczogMVxuICAgIH1cbn07XG5cbi8vIEdsb2JhbCB0ZW1wbGF0ZSBjb250ZXh0IHRoYXQncyBhdmFpbGFibGUgdG8gYWxsIHRlbXBsYXRlc1xuZXhwb3J0IGNvbnN0IFRFTVBMQVRFX0NPTlRFWFQgPSB7XG4gICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb25cbiAgICB0OiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAgICAgJ2NvbXBvbmVudHMnOiAnQ29tcG9uZW50cycsXG4gICAgICAgICAgICAnbW9kdWxlcyc6ICdNb2R1bGVzJyxcbiAgICAgICAgICAgICdpbnRlcmZhY2VzJzogJ0ludGVyZmFjZXMnLFxuICAgICAgICAgICAgJ2NsYXNzZXMnOiAnQ2xhc3NlcycsXG4gICAgICAgICAgICAnaW5qZWN0YWJsZXMnOiAnSW5qZWN0YWJsZXMnLFxuICAgICAgICAgICAgJ3BpcGVzJzogJ1BpcGVzJyxcbiAgICAgICAgICAgICdkaXJlY3RpdmVzJzogJ0RpcmVjdGl2ZXMnLFxuICAgICAgICAgICAgJ2d1YXJkcyc6ICdHdWFyZHMnLFxuICAgICAgICAgICAgJ2ludGVyY2VwdG9ycyc6ICdJbnRlcmNlcHRvcnMnLFxuICAgICAgICAgICAgJ2VudGl0aWVzJzogJ0VudGl0aWVzJyxcbiAgICAgICAgICAgICdjb250cm9sbGVycyc6ICdDb250cm9sbGVycycsXG4gICAgICAgICAgICAnaW5mbyc6ICdJbmZvJyxcbiAgICAgICAgICAgICdyZWFkbWUnOiAnUmVhZG1lJyxcbiAgICAgICAgICAgICdzb3VyY2UnOiAnU291cmNlJyxcbiAgICAgICAgICAgICd0ZW1wbGF0ZSc6ICdUZW1wbGF0ZScsXG4gICAgICAgICAgICAnc3R5bGVzJzogJ1N0eWxlcycsXG4gICAgICAgICAgICAnZG9tLXRyZWUnOiAnRE9NIFRyZWUnLFxuICAgICAgICAgICAgJ2ZpbGUnOiAnRmlsZScsXG4gICAgICAgICAgICAnb3ZlcnZpZXcnOiAnT3ZlcnZpZXcnLFxuICAgICAgICAgICAgJ2dldHRpbmctc3RhcnRlZCc6ICdHZXR0aW5nIFN0YXJ0ZWQnLFxuICAgICAgICAgICAgJ3Byb3BlcnRpZXMnOiAnUHJvcGVydGllcycsXG4gICAgICAgICAgICAnbWV0aG9kcyc6ICdNZXRob2RzJyxcbiAgICAgICAgICAgICdpbnB1dHMnOiAnSW5wdXRzJyxcbiAgICAgICAgICAgICdvdXRwdXRzJzogJ091dHB1dHMnLFxuICAgICAgICAgICAgJ2FjY2Vzc29ycyc6ICdBY2Nlc3NvcnMnLFxuICAgICAgICAgICAgJ2NvbnN0cnVjdG9yJzogJ0NvbnN0cnVjdG9yJyxcbiAgICAgICAgICAgICd6b29taW4nOiAnWm9vbSBJbicsXG4gICAgICAgICAgICAnem9vbW91dCc6ICdab29tIE91dCcsXG4gICAgICAgICAgICAncmVzZXQnOiAnUmVzZXQnXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNba2V5XSB8fCBrZXk7XG4gICAgfSxcblxuICAgIC8vIFJlbGF0aXZlIFVSTCBoZWxwZXJcbiAgICByZWxhdGl2ZVVSTDogKGRlcHRoOiBudW1iZXIgfCBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0eXBlb2YgZGVwdGggPT09ICdudW1iZXInID8gJy4uLycucmVwZWF0KGRlcHRoKSA6IGRlcHRoO1xuICAgICAgICByZXR1cm4gYmFzZVVybCArIGFyZ3Muam9pbignLycpO1xuICAgIH0sXG5cbiAgICAvLyBUZW1wbGF0ZSBoZWxwZXJzXG4gICAgY29tcGFyZTogKGE6IGFueSwgb3BlcmF0b3I6IHN0cmluZywgYjogYW55KSA9PiB7XG4gICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgJz09PSc6IHJldHVybiBhID09PSBiO1xuICAgICAgICAgICAgY2FzZSAnIT09JzogcmV0dXJuIGEgIT09IGI7XG4gICAgICAgICAgICBjYXNlICc9PSc6IHJldHVybiBhID09IGI7XG4gICAgICAgICAgICBjYXNlICchPSc6IHJldHVybiBhICE9IGI7XG4gICAgICAgICAgICBjYXNlICc8JzogcmV0dXJuIGEgPCBiO1xuICAgICAgICAgICAgY2FzZSAnPic6IHJldHVybiBhID4gYjtcbiAgICAgICAgICAgIGNhc2UgJzw9JzogcmV0dXJuIGEgPD0gYjtcbiAgICAgICAgICAgIGNhc2UgJz49JzogcmV0dXJuIGEgPj0gYjtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDaGVjayBpZiB0YWIgaXMgZW5hYmxlZFxuICAgIGlzVGFiRW5hYmxlZDogKG5hdlRhYnM6IGFueVtdLCB0YWJJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBuYXZUYWJzLnNvbWUodGFiID0+IHRhYi5pZCA9PT0gdGFiSWQpO1xuICAgIH0sXG5cbiAgICAvLyBDaGVjayBpZiB0YWIgaXMgaW5pdGlhbC9hY3RpdmVcbiAgICBpc0luaXRpYWxUYWI6IChuYXZUYWJzOiBhbnlbXSwgdGFiSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gbmF2VGFicy5sZW5ndGggPiAwICYmIG5hdlRhYnNbMF0uaWQgPT09IHRhYklkO1xuICAgIH0sXG5cbiAgICAvLyBEZXB0aCBmb3IgcmVsYXRpdmUgVVJMc1xuICAgIGRlcHRoOiAwLFxuXG4gICAgLy8gR2xvYmFsIGZsYWdzXG4gICAgZGlzYWJsZVNlYXJjaDogZmFsc2UsXG4gICAgZGlzYWJsZUdyYXBoOiBmYWxzZSxcbiAgICBkaXNhYmxlQ292ZXJhZ2U6IGZhbHNlLFxuICAgIGRpc2FibGVMaWZlQ3ljbGVIb29rczogZmFsc2UsXG4gICAgZGlzYWJsZVByb3BlcnRpZXM6IGZhbHNlLFxuICAgIGRpc2FibGVEb21UcmVlOiBmYWxzZSxcbiAgICBkaXNhYmxlVGVtcGxhdGVUYWI6IGZhbHNlLFxuICAgIGRpc2FibGVTdHlsZVRhYjogZmFsc2UsXG4gICAgZGlzYWJsZVByaXZhdGU6IGZhbHNlLFxuICAgIGRpc2FibGVQcm90ZWN0ZWQ6IGZhbHNlLFxuICAgIGRpc2FibGVJbnRlcm5hbDogZmFsc2Vcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFzQkEsTUFBYSxlQUE0QjtDQUNyQyxXQUFXO0VBQ1AsTUFBTTtFQUNOLE1BQU07RUFDTixZQUFZO0VBQ1osVUFBVTtFQUNWLGFBQWE7RUFDYixXQUFXLENBQUMsK0JBQStCO0VBQzNDLGFBQWE7RUFDYixRQUFRLENBQ0o7R0FDSSxNQUFNO0dBQ04sTUFBTTtHQUNOLGFBQWE7R0FDYixNQUFNO0dBQ04sY0FBYztFQUNsQixHQUNBO0dBQ0ksTUFBTTtHQUNOLE1BQU07R0FDTixhQUFhO0dBQ2IsTUFBTTtHQUNOLGNBQWM7RUFDbEIsQ0FDSjtFQUNBLFNBQVMsQ0FDTDtHQUNJLE1BQU07R0FDTixNQUFNO0dBQ04sYUFBYTtHQUNiLE1BQU07RUFDVixDQUNKO0VBQ0EsWUFBWSxDQUNSO0dBQ0ksTUFBTTtHQUNOLE1BQU07R0FDTixjQUFjO0dBQ2QsYUFBYTtHQUNiLE1BQU07R0FDTixjQUFjLENBQUMsR0FBRztFQUN0QixDQUNKO0VBQ0EsU0FBUyxDQUNMO0dBQ0ksTUFBTTtHQUNOLE1BQU07R0FDTixhQUFhO0dBQ2IsTUFBTTtHQUNOLGNBQWMsQ0FBQyxHQUFHO0dBQ2xCLE1BQU0sQ0FDRjtJQUNJLE1BQU07SUFDTixNQUFNO0lBQ04sYUFBYTtHQUNqQixDQUNKO0VBQ0osQ0FDSjtFQUNBLFlBQVksQ0FBQyxVQUFVLFdBQVc7RUFDbEMsZUFBZSxDQUNYO0dBQ0ksTUFBTTtHQUNOLE1BQU0sQ0FBQyxRQUFRO0dBQ2YsZUFBZSxDQUFDLFFBQVE7R0FDeEIsYUFBYTtFQUNqQixDQUNKO0VBQ0EsVUFBVTtFQUNWLFFBQVEsQ0FBQyxrQ0FBa0M7RUFDM0MsUUFBUTtFQUNSLFNBQVM7R0FDTDtJQUFFLE1BQU07SUFBUyxJQUFJO0lBQVEsT0FBTztJQUFRLGFBQWE7R0FBTztHQUNoRTtJQUFFLE1BQU07SUFBVyxJQUF