@compodoc/compodoc
Version:
The missing documentation tool for your Angular application
803 lines (802 loc) • 60 kB
JavaScript
//#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