@c8y/ngx-components 1021.80.1 → 1021.81.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.d.ts +23 -0
- package/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.d.ts.map +1 -0
- package/core/data-grid/column/tree-node-column/tree-node.data-grid-column.d.ts +23 -0
- package/core/data-grid/column/tree-node-column/tree-node.data-grid-column.d.ts.map +1 -0
- package/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.d.ts +6 -0
- package/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.d.ts.map +1 -0
- package/core/data-grid/data-grid.component.d.ts +29 -1
- package/core/data-grid/data-grid.component.d.ts.map +1 -1
- package/core/data-grid/data-grid.model.d.ts +13 -1
- package/core/data-grid/data-grid.model.d.ts.map +1 -1
- package/core/data-grid/grid-data-source.d.ts +11 -2
- package/core/data-grid/grid-data-source.d.ts.map +1 -1
- package/core/data-grid/index.d.ts +4 -1
- package/core/data-grid/index.d.ts.map +1 -1
- package/esm2022/branding/shared/lazy/branding/branding.component.mjs +2 -2
- package/esm2022/context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.mjs +1 -1
- package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +1 -1
- package/esm2022/core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.mjs +87 -0
- package/esm2022/core/data-grid/column/tree-node-column/tree-node.data-grid-column.mjs +15 -0
- package/esm2022/core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.mjs +15 -0
- package/esm2022/core/data-grid/configure-custom-column/asset-property-grid.component.mjs +1 -1
- package/esm2022/core/data-grid/data-grid.component.mjs +68 -11
- package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
- package/esm2022/core/data-grid/grid-data-source.mjs +92 -22
- package/esm2022/core/data-grid/index.mjs +5 -2
- package/esm2022/device-grid/device-grid.component.mjs +1 -1
- package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
- package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +1 -1
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +1 -1
- package/esm2022/files-repository/files-repository.component.mjs +1 -1
- package/esm2022/messaging-management/messaging/topic/topic-list-view.component.mjs +2 -2
- package/esm2022/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.mjs +2 -2
- package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +2 -2
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +2 -2
- package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
- package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
- package/esm2022/repository/software/list/software-list.component.mjs +1 -1
- package/esm2022/search/search-grid.component.mjs +1 -1
- package/esm2022/services/services-device-tab/services-device-tab.component.mjs +1 -1
- package/esm2022/sub-assets/sub-assets-grid.component.mjs +1 -1
- package/esm2022/tenants/tenant-list/tenant-list.component.mjs +1 -1
- package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +2 -2
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-CmhkghTo.mjs → c8y-ngx-components-asset-property-grid.component-xQgHuomT.mjs} +3 -3
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-CmhkghTo.mjs.map → c8y-ngx-components-asset-property-grid.component-xQgHuomT.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-c8y-ngx-components-D-YOjLHK.mjs → c8y-ngx-components-c8y-ngx-components-D2rmddmn.mjs} +455 -228
- package/fesm2022/c8y-ngx-components-c8y-ngx-components-D2rmddmn.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +2 -2
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -2
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +1 -1
- package/locales/locales.pot +6 -0
- package/package.json +1 -1
- package/fesm2022/c8y-ngx-components-c8y-ngx-components-D-YOjLHK.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-context-dashboard.mjs","sources":["../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.component.html","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/appearance-settings.component.ts","../../context-dashboard/appearance-settings.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-availability.component.ts","../../context-dashboard/dashboard-availability.component.html","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.html","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.ts","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-version-history.component.ts","../../context-dashboard/dashboard-settings/dashboard-version-history.component.html","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/dashboard-detail.component.html","../../context-dashboard/widget.service.ts","../../context-dashboard/widget-preview.component.ts","../../context-dashboard/widget-preview.component.html","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config.component.html","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/context-dashboard.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.html","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-dashboard.guard.ts","../../context-dashboard/group-dashboard.guard.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.module.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.html","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.html","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/dashboard-manager/dashboard-manager-tabs.factory.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/device-type-value.grid-column.ts","../../context-dashboard/dashboard-manager/dashboard-manager.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/basic-name.device-grid-column.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-assets-grid.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.html","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.html","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.html","../../context-dashboard/dashboard-manager/dashboard-manager.module.ts","../../context-dashboard/c8y-ngx-components-context-dashboard.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { gettext, Tab } from '@c8y/ngx-components';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\nexport const newDashboardTab: Tab<string> = {\n featureId: 'newDashboard',\n icon: 'th',\n label: gettext('New dashboard'),\n path: 'dashboard/new-dashboard',\n // place tab as last one and hide it so it won't be opened until user initiates adding new dashboard\n hide: true,\n priority: -Infinity\n};\n\n@Injectable({ providedIn: 'root' })\nexport class NewDashboardGuard {\n tab: Tab;\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n const tabActive = route.routeConfig.path === newDashboardTab.path;\n if (tabActive) {\n const dashboard: Partial<ContextDashboardManagedObject> = {\n c8y_Dashboard: null\n };\n route.data = { dashboard };\n }\n if (!this.tab) {\n this.tab = {\n ...newDashboardTab,\n hide: !tabActive,\n priority: tabActive ? Infinity : -Infinity\n };\n }\n return of([this.tab]);\n }\n}\n","import { Component } from '@angular/core';\nimport { TabsService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { newDashboardTab } from './new-dashboard.guard';\n\n@Component({\n selector: '[c8y-add-dashboard]',\n templateUrl: './add-dashboard.component.html',\n host: { class: 'd-flex a-i-stretch sticky-right' }\n})\nexport class AddDashboardComponent {\n constructor(\n private tabsService: TabsService,\n private router: Router\n ) {}\n\n addDashboard() {\n const tempNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // navigate before tab is displayed, because in DashboardDetailComponent tab is hidden on navigation from it.\n this.router.navigate(\n typeof tempNewDashboardTab.path === 'string'\n ? [tempNewDashboardTab.path]\n : tempNewDashboardTab.path,\n { replaceUrl: true }\n );\n // show tab and make it appear as first one\n tempNewDashboardTab.hide = false;\n tempNewDashboardTab.priority = Infinity;\n this.tabsService.refresh();\n }\n}\n","<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n <button\n class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n title=\"{{ 'Add dashboard' | translate }}\"\n type=\"button\"\n (click)=\"addDashboard()\"\n >\n <i\n class=\"icon-20 m-r-4\"\n c8yIcon=\"add-circle-outline\"\n ></i>\n <span>{{ 'Add dashboard' | translate }}</span>\n </button>\n <div class=\"p-r-sm-40\"></div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified } from '@c8y/client';\nimport {\n ContextData,\n ContextRouteService,\n ExtensionFactory,\n Permissions,\n Tab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { AddDashboardComponent } from './add-dashboard.component';\n\nexport abstract class AddDashboardFactory implements ExtensionFactory<Tab> {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n currentContext: ContextData;\n\n private permissions = inject(Permissions);\n private contextRoute = inject(ContextRouteService);\n\n async get(activatedRoute?: ActivatedRoute): Promise<Tab | Tab[]> {\n this.currentContext = this.contextRoute.getContextData(activatedRoute);\n if (\n this.currentContext?.context === this.targetContext &&\n (await this.hasPermission(this.currentContext.contextData))\n ) {\n return [\n {\n component: AddDashboardComponent,\n priority: -Infinity,\n showAlways: true\n }\n ];\n }\n return [];\n }\n\n private async hasPermission(context: IIdentified) {\n if (context?.id) {\n return await this.permissions.canEdit(\n [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ],\n context\n );\n }\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddDeviceDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddGroupDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n Widget,\n DynamicComponentDefinition,\n Route,\n gettext,\n ViewContext,\n WidgetDisplaySettings,\n TabWithTemplate,\n WidgetSettings\n} from '@c8y/ngx-components';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\nexport const DASHBOARD_SETTINGS_CHANGES = {\n classes: gettext('theme'),\n globalRolesIds: gettext('global roles'),\n widgetClasses: gettext('widget header style'),\n widgetMargin: gettext('widget margin'),\n icon: gettext('icon'),\n name: gettext('name'),\n priority: gettext('priority'),\n c8y_IsNavigatorNode: gettext('navigator item'),\n translateWidgetTitle: gettext('translate widget title')\n} as const satisfies Partial<Record<keyof ContextDashboard, string>>;\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n /**\n * @deprecated\n */\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed. They are static and will not be saved.\n */\n settings?: WidgetSettings;\n\n /**\n * Settings that are injected in any displaying component.\n */\n displaySettings?: WidgetDisplaySettings;\n\n /**\n * Whatever should be added to the configuration when a widget is created.\n */\n config?: {\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n };\n /**\n * The selected device or group (note: naming is inconsistent as group was added later\n * but must stay for already implemented widgets)\n */\n device?: {\n id?: string | number;\n name?: string;\n [key: string]: any;\n };\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n}\n\nexport interface ContextDashboardManagedObject extends IManagedObject {\n c8y_Dashboard?: ContextDashboard;\n name?: string;\n c8y_DashboardHistory?: ContextDashboard[];\n}\n\nexport interface ContextDashboard {\n icon?: SupportedIconsSuggestions | null;\n name?: string | null;\n priority?: number | null;\n deviceType?: boolean | null;\n deviceTypeValue?: string | null;\n isFrozen?: boolean | null;\n isTransient?: boolean;\n classes?: { [key: string]: boolean } | null;\n widgetClasses?: { [key: string]: boolean } | null;\n widgetMargin?: number | null;\n translateWidgetTitle?: boolean | null;\n global?: boolean | null;\n /**\n * The amount of columns on that dashboard.\n * Can be freely chosen, but product uses either 12 or 24.\n */\n columns?: number | null;\n children?: {\n [id: string]: Widget;\n };\n globalRolesIds?: DashboardGlobalRoles | null;\n c8y_IsNavigatorNode?: object | null;\n description?: string | null;\n historyDescription?: DashboardHistoryDescription | null;\n created?: string | null;\n author?: string | null;\n}\n/**\n * Object describing changes applied to dashboard settings and its widgets. Used to display user-friendly change log.\n */\nexport interface DashboardHistoryDescription {\n /**\n * Indicates type of dashboard change (or creation).\n */\n changeType?: 'reset' | 'create' | 'update' | null;\n /**\n * List of dashboard settings that has been changed.\n */\n dashboardSettingChanges?: (typeof DASHBOARD_SETTINGS_CHANGES)[keyof typeof DASHBOARD_SETTINGS_CHANGES][];\n /**\n * True if dashboard is typed dashboard, false if it's not.\n */\n deviceType?: boolean | null;\n /**\n * Object containing lists of widgets (by title) that has been changed, grouped by change type, e.g.:\n * ```ts\n * widgetChanges: {\n * removed: ['Applications'],\n * config?: ['Data points graph', 'Events list'],\n * },\n * ```\n */\n widgetChanges?: {\n removed?: string[];\n added?: string[];\n config?: string[];\n arrangement?: string[];\n } | null;\n /**\n * String used to display the date from which the state was restored.\n */\n restored?: string;\n}\n\nexport const DASHBOARD_CHILDREN_STATE_NAME = {\n initial: gettext('Initial state'),\n config: gettext('Widget configuration changed'),\n removed: gettext('Widget removed'),\n added: gettext('Widget added'),\n arrangement: gettext('Widgets rearranged')\n} as const satisfies Record<keyof DashboardHistoryDescription['widgetChanges'] | 'initial', string>;\n/**\n * Object representing state of dashboard widgets. Its main purpose is to allow to undo and redo changes\n * applied to dashboard children.\n */\nexport type DashboardChildrenState = {\n /**\n * Name of the change applied to dashboard that results in current state, e.g. 'widget removed'\n */\n name: (typeof DASHBOARD_CHILDREN_STATE_NAME)[keyof typeof DASHBOARD_CHILDREN_STATE_NAME];\n /**\n * Dashboard children in particular, immutable state.\n */\n children: ContextDashboard['children'];\n /**\n * Object describing changes applied to dashboard widgets that can be easily mapped to DashboardHistoryDescription widgetChanges.\n * ```ts\n * {\n * removed: {\n * 0969692617637703: { componentId: \"Data points graph\", config: {...}, classes: {...} ...}\n * },\n * config: {\n * 6347567345767653: { componentId: \"Applications\", config: {...}, classes: {...} ...},\n * 6456345634564566: { componentId: \"Events list\", config: {...}, classes: {...} ...},\n * }\n * }\n * ```\n */\n changeHistory: Partial<\n Record<\n keyof DashboardHistoryDescription['widgetChanges'],\n {\n [id: string]: Widget;\n }\n >\n >;\n};\n\nexport enum ContextDashboardType {\n Device = 'device',\n Type = 'type',\n Group = 'group',\n Named = 'name',\n Report = 'report'\n}\n\nexport enum DashboardDetailsTabId {\n GENERAL = 'general',\n APPEARANCE = 'appearance',\n VERSIONHISTORY = 'versionHistory'\n}\n\nexport type DashboardDetailsTabs = Record<\n DashboardDetailsTabId,\n TabWithTemplate<string> & { featureId: DashboardDetailsTabId }\n>;\n\nexport const WIDGET_HEADER_CLASSES = [\n {\n label: gettext('Regular`style`'),\n class: 'panel-title-regular',\n description: gettext('The widget has no border between header and content.')\n },\n {\n label: gettext('Border`style`'),\n class: 'panel-title-border',\n description: gettext('The widget has a small separation border between header and content.')\n },\n {\n label: gettext('Overlay`style`'),\n class: 'panel-title-overlay',\n description: gettext('The widget content overlays the header.')\n },\n {\n label: gettext('Hidden`style`'),\n class: 'panel-title-hidden',\n description: gettext('The widget header is not shown.')\n }\n] as const;\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Branded`style`'),\n class: 'panel-content-branded',\n description: gettext('The widget is styled with the main brand color.')\n },\n {\n label: gettext('Match dashboard`style`'),\n class: 'panel-content-light',\n description: gettext('The widget appearance matches the dashboard appearance.')\n },\n {\n label: gettext('Light`style`'),\n class: 'panel-content-white',\n description: gettext('The widget has light appearance, that is, dark text on light background.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget has dark appearance, that is, light text on dark background.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext('The widget has no background.')\n }\n] as const;\n\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Match UI`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard appearance matches the UI appearance.')\n },\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-white',\n description: gettext(\n 'The dashboard has light appearance, that is, dark text on light background.'\n )\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext(\n 'The dashboard has dark appearance, that is, light text on dark background.'\n )\n },\n // {\n // label: gettext('Transparent`theme`'),\n // class: 'dashboard-theme-transparent',\n // description: gettext(\n // 'The dashboard is styled with a transparent background and therefore is border-less.'\n // )\n // },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled using the brand palette.')\n }\n] as const;\n\nexport const STYLING_CLASS_PREFIXES = [\n 'dashboard-theme-',\n 'panel-title-',\n 'panel-content-'\n] as const;\n\nexport interface DashboardCopyClipboard {\n dashboardId: string;\n dashboard: ContextDashboard;\n context: DashboardContext;\n}\n\nexport interface DashboardContext {\n context: ViewContext;\n contextData: Partial<IManagedObject>;\n}\n\nexport const ALL_GLOBAL_ROLES_SELECTED = 'all' as const;\nexport type DashboardGlobalRoles = number[] | typeof ALL_GLOBAL_ROLES_SELECTED;\n\nexport const PRODUCT_EXPERIENCE = {\n DASHBOARD: {\n EVENTS: {\n DASHBOARDS: 'dashboards',\n REPORTS: 'reports'\n },\n COMPONENTS: {\n DASHBOARD_VIEW: 'context-dashboard',\n DASHBOARD_AVAILABILITY: 'dashboard-availability',\n REPORTS_LIST: 'report-dashboard-list',\n ADD_REPORT: 'report-dashboard-list',\n ADD_DASHBOARD: 'add-dashboard',\n DELETE_DASHBOARD: 'context-dashboard'\n },\n CONTEXT: {\n REPORT: 'report',\n DEVICE: 'device',\n ASSET: 'asset',\n GROUP: 'group'\n },\n ACTIONS: {\n APPLY_GLOBAL_ROLES_CHANGES: 'applyGlobalRolesChanges',\n DELETE: 'delete',\n LOAD: 'load',\n CREATE: 'create',\n ADD_REPORT: 'addReport'\n }\n }\n} as const;\n\nexport interface CanDeactivateComponent {\n canDeactivate: () => boolean | Observable<boolean> | Promise<boolean>;\n}\n\nexport const REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY = 30;\n\nexport type AllowTypeDashboard = 'allow' | 'disallow' | 'allow_if_type_filled';\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html'\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass = 'dashboard-theme-light';\n @Input()\n headerClass = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Input()\n dashboardSettings: boolean;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n @Input()\n columns: 1 | 3 = 1;\n\n dashboardDefaultLabel = gettext('Dashboard default');\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\n }\n\n private resetToDefault(value: string, compareTo: string, defaultValue: string) {\n if (defaultValue && value === compareTo) {\n value = defaultValue;\n }\n return value;\n }\n}\n","<div class=\"row\">\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">{{ 'Default theme' | translate }}</legend>\n <legend *ngIf=\"!dashboardSettings\">{{ 'Theme' | translate }}</legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0 fit-w\"\n *ngFor=\"let themeClassItem of possibleStylingTheme; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"content\"\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n [value]=\"themeClassItem.class\"\n [ngModel]=\"themeClass\"\n (click)=\"themeClassClick(themeClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ themeClassItem.label | translate }}{{\n themeClassItem.class === defaultThemeClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ themeClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"themeClassItem.class === defaultThemeClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ themeClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">\n {{ 'Default widget header style' | translate }}\n </legend>\n <legend *ngIf=\"!dashboardSettings\">\n {{ 'Widget header style' | translate }}\n </legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0\"\n *ngFor=\"let headerClassItem of possibleStylingHeader; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"header\"\n type=\"radio\"\n [id]=\"'groupradioheaderclass' + i\"\n [value]=\"headerClassItem.class\"\n [ngModel]=\"headerClass\"\n (click)=\"headerClassClick(headerClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ headerClassItem.label | translate }}{{\n headerClassItem.class === defaultHeaderClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ headerClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"headerClassItem.class === defaultHeaderClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ headerClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <ng-content></ng-content>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n/**\n * A hook to define the default widgets of the home dashboard in the cockpit app.\n */\nexport const COCKPIT_HOME_DASHBOARD_CONFIG = new InjectionToken('CockpitHomeDashboardConfig');\n\nexport interface CockpitDashboardConfig {\n /**\n * Allows to have customized dashboard context name in case the CockpitDashboardModule is used in different apps and should have individual home dashboards per app\n */\n dashboardName?: string;\n /**\n * Allows to define the default widgets shown on the Cockpit Homepage\n */\n defaultWidgets?: Widget[];\n /**\n * Allows to have a different page title than the default 'Home'\n */\n pageTitle?: string;\n /**\n * Allows to have individual home dashboards per user\n */\n userSpecific?: boolean;\n}\n\n/**\n * An array of widgets that is per default placed on the home dashboard of the cockpit app.\n */\nexport const DEFAULT_COCKPIT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext('Welcome to Cockpit'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 24,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 12\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 12,\n _y: 5,\n _height: 8,\n _width: 12\n }\n] as Partial<Widget>[] as Widget[];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n AlertService,\n ApplicationOptions,\n ContextData,\n DynamicComponentService,\n getActivatedRoute,\n gettext,\n GroupService,\n ModalService,\n NavigatorNode,\n NavigatorService,\n NEW_DASHBOARD_ROUTER_STATE_PROP,\n OptionsService,\n Permissions,\n Status,\n Tab,\n TabsService,\n ViewContext,\n Widget\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n assign,\n cloneDeep,\n forEach,\n get,\n has,\n keyBy,\n keys,\n pick,\n reduce,\n set,\n some\n} from 'lodash-es';\nimport { combineLatest, from, Observable, of, Subject } from 'rxjs';\nimport { catchError, filter, map, mergeMap, tap, throwIfEmpty, toArray } from 'rxjs/operators';\nimport {\n ALL_GLOBAL_ROLES_SELECTED,\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType,\n DashboardContext,\n DashboardCopyClipboard,\n PRODUCT_EXPERIENCE,\n STYLING_CLASS_PREFIXES\n} from './context-dashboard.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ContextDashboardService {\n dashboardTabs$: Observable<Tab[]>;\n formDisabled$: Observable<boolean>;\n readonly REPORT_PARTIAL_NAME = 'report_';\n copyClipboard: DashboardCopyClipboard;\n queriesUtil: QueriesUtil;\n readonly VERSION_HISTORY_SIZE_LIMIT = 10;\n private readonly INVENTORY_ROLES = [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ];\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private readonly CACHE_TIMEOUT = 500;\n private _formDisabled = true;\n private formDisabledSubject = new Subject<boolean>();\n private contextDashboardsCache: {\n query: string;\n result: Promise<IResultList<IManagedObject>>;\n timestamp: number;\n };\n private readonly HIDE_TYPE_DASHBOARD_FOR_ASSETS: keyof ApplicationOptions =\n 'hideTypeDashboardForAssets';\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = value;\n this.formDisabledSubject.next(value);\n }\n\n constructor(\n private inventory: InventoryService,\n private tabs: TabsService,\n private modal: ModalService,\n private translateService: TranslateService,\n private router: Router,\n private navigator: NavigatorService,\n private permissions: Permissions,\n private alert: AlertService,\n private dynamicComponent: DynamicComponentService,\n private groupService: GroupService,\n private optionsService: OptionsService\n ) {\n this.formDisabled$ = this.formDisabledSubject.asObservable();\n this.queriesUtil = new QueriesUtil();\n }\n\n async create(dashboardCfg: ContextDashboard, context?: ContextData, name = '') {\n let dashboard: Partial<ContextDashboardManagedObject> = {};\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const [dashboardType, dashboardFragments] = this.getDashboardFragments(\n { c8y_Dashboard: dashboardCfg } as ContextDashboardManagedObject,\n context,\n name,\n false\n );\n dashboard = { ...dashboard, ...dashboardFragments };\n\n if (this.shouldSetGlobal(dashboard, context)) {\n assign(dashboard, { c8y_Global: {} });\n }\n dashboard.name = dashboard.c8y_Dashboard.name;\n const { data } =\n dashboardType === ContextDashboardType.Group ||\n dashboardType === ContextDashboardType.Device ||\n (context && dashboardType === ContextDashboardType.Named)\n ? await this.inventory.childAdditionsCreate(\n dashboard,\n (context?.contextData.id as string) || ''\n )\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n let { data } = await this.inventory.detail(dashboardMO);\n data = this.adjustDashboardFor24Columns(data as ContextDashboardManagedObject);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(\n dashboard: ContextDashboardManagedObject,\n context?: ContextData\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCfg = dashboard.c8y_Dashboard;\n dashboard.name = dashboard.c8y_Dashboard.name;\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const keepFragments = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id', 'name']));\n keepFragments.c8y_DashboardHistory = dashboard.c8y_DashboardHistory;\n await this.serializeWidgetConfigs(keepFragments);\n\n const [, dashboardTypeFragments] = this.getDashboardFragments(dashboard, context, '', true);\n keepFragments.c8y_Global = this.shouldSetGlobal({ ...dashboard, ...dashboardTypeFragments });\n const { data } = await this.inventory.update({ ...keepFragments, ...dashboardTypeFragments });\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, withConfirmation = true) {\n try {\n if (withConfirmation) {\n let msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\". Do you want to proceed?`\n );\n if (this.isDeviceType(dashboard)) {\n msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of the type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n }\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n { ok: gettext('Delete'), cancel: gettext('Cancel') }\n );\n }\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab => {\n if (typeof tab.path === 'string') {\n return tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`);\n }\n });\n this.tabs.remove(tabToRemove);\n queueMicrotask(() => {\n this.tabs.refresh();\n });\n } catch (ex) {\n // intended empty\n }\n }\n\n updateDashboardHistory(\n dashboard: Partial<ContextDashboardManagedObject>,\n dashboardCfg: ContextDashboard\n ): Partial<ContextDashboardManagedObject> {\n if (!dashboard.c8y_DashboardHistory) {\n dashboard.c8y_DashboardHistory = [];\n }\n if (!dashboardCfg.historyDescription) {\n dashboardCfg.historyDescription = { changeType: 'create' };\n }\n\n dashboardCfg.created = new Date().toISOString();\n dashboard.c8y_DashboardHistory = cloneDeep([dashboardCfg, ...dashboard.c8y_DashboardHistory]);\n\n if (dashboard.c8y_DashboardHistory.length > this.VERSION_HISTORY_SIZE_LIMIT) {\n dashboard.c8y_DashboardHistory = [\n ...dashboard.c8y_DashboardHistory.slice(0, this.VERSION_HISTORY_SIZE_LIMIT)\n ];\n }\n\n return dashboard;\n }\n\n activateDashboards(\n route: ActivatedRouteSnapshot,\n types: ContextDashboardType[]\n ): Observable<boolean | Tab[]> {\n const { dashboardId } = route.params;\n if (dashboardId) {\n return this.getDashboard$(dashboardId, types, route.parent.data.contextData).pipe(\n tap(dashboard => {\n route.data = { dashboard };\n }),\n map(() => true),\n catchError(() => {\n return of(false);\n })\n );\n }\n\n this.dashboardTabs$ = this.getTabs$(\n route.data.contextData,\n types,\n route?.parent?.data as ContextData\n );\n return this.dashboardTabs$;\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[], context?: ContextData) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() => {\n if (!this.hasPermissionsToCopyDashboard()) {\n this.alert.warning(\n gettext(\n 'You are viewing a read-only dashboard because you don’t have the necessary permissions to modify it.'\n )\n );\n return of(\n this.getTemporaryDashboard({\n name,\n children,\n widgetClasses: { 'dashboard-theme-light': true, 'panel-title-regular': true }\n })\n );\n } else\n return from(\n this.create(\n {\n children,\n widgetClasses: { 'dashboard-theme-light': true, 'panel-title-regular': true }\n },\n context,\n name\n )\n );\n })\n );\n }\n\n updateNavigatorItem(mo: IManagedObject) {\n this.navigator.state.forEach(node => {\n if (node.path === `reports/${mo.id}`) {\n this.navigator.remove(node);\n }\n });\n if (mo.c8y_IsNavigatorNode) {\n const nodeToAdd = new NavigatorNode({\n label: mo.name,\n path: `reports/${mo.id}`,\n icon: mo.icon,\n priority: mo.priority\n });\n this.navigator.add(nodeToAdd);\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject, isNewDashboard = false) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n ...(isNewDashboard && {\n state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n })\n });\n } else if (/^\\/(device|group)\\/[0-9]+$/.test(this.router.url)) {\n // in case the add dashboard button is the only tab on that route\n this.router.navigate(['.', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n ...(isNewDashboard && {\n state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n })\n });\n } else {\n this.router.navigate(['..', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n ...(isNewDashboard && {\n state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n })\n });\n }\n }\n\n /**\n * Checks if user is able to edit dashboard according to his roles and dashboard ownership.\n *\n * @param mo - Dashboard managed object.\n * @returns True if user is able to edit dashboard, false if he cannot.\n */\n async canEditDashboard(mo: ContextDashboardManagedObject): Promise<boolean> {\n return await this.permissions.canEdit(this.INVENTORY_ROLES, mo);\n }\n\n /**\n * Checks if user has permissions to copy dashboard according to his roles.\n *\n * @returns True if user has permissions to copy dashboard, false if he cannot.\n */\n hasPermissionsToCopyDashboard(): boolean {\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n\n isNamed(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isReport(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${this.REPORT_PARTIAL_NAME}`\n ).test(prop)\n );\n }\n\n isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop => {\n const matchingProp = new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Type}${this.INDEX_SPLIT}`\n ).test(prop);\n if (!matchingProp) {\n return false;\n } else {\n // there might be matching key, but its value can be {} or null\n return !!dashboard[prop];\n }\n });\n }\n\n isDeviceDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Device}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isGroupDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Group}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n getFilteredDashboardStyles(styleList: string[]) {\n return styleList.filter(c =>\n STYLING_CLASS_PREFIXES.some(classPrefix => c.startsWith(classPrefix))\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(\n style => style && new RegExp(`-${styleName}$`, 'i').test(style.class)\n );\n return styling ? styling.class : defaultValue;\n }\n\n mapWidgets(widgets: Widget[]) {\n return keyBy(\n widgets.map(widget => {\n widget.id = String(Math.random()).substr(2);\n return widget;\n }),\n 'id'\n );\n }\n\n getDashboard$(dashboardIdOrName, dashboardType: ContextDashboardType[], mo?: IManagedObject) {\n const cache = this.cache.get(dashboardIdOrName);\n\n const dashboards = mo\n ? this.getContextDashboards(mo, dashboardType)\n : this.getNamedDashboard(dashboardIdOrName);\n\n const cacheRefresh = this.getContextDashboards$(dashboards).pipe(\n tap(dashboard => this.cacheDashboard(dashboard)),\n filter(\n dashboard =>\n dashboard.id === dashboardIdOrName ||\n has(\n dashboard,\n `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n async pasteDashboard(newContext: DashboardContext): Promise<void> {\n if (this.copyClipboard) {\n try {\n const dashboardToPaste = this.createContextDashboardCopy(\n this.copyClipboard.dashboard,\n newContext.contextData,\n this.copyClipboard.context.contextData\n );\n const dashboard = await this.create(this.clean(dashboardToPaste), newContext);\n\n // linking childAdditions for e.g. to grant access to the images uploaded by the image widget for users with only inventory roles.\n const { data: childAdditions } = await this.inventory.childAdditionsList(\n this.copyClipboard.dashboardId,\n { pageSize: 2000 }\n );\n if (childAdditions.length) {\n await this.inventory.childAdditionsBulkAdd(childAdditions, dashboard.id);\n }\n\n this.copyClipboard = undefined;\n this.navigateToDashboard(dashboard);\n } catch {\n this.alert.warning(gettext('Insufficient permissions for this action.'));\n }\n }\n }\n\n /**\n * Creates fragment that associates dashboards with device/asset. It consists of three elements:\n * - FRAGMENT_NAME - static string\n * - dashboard type (e.g. 'group', 'device')\n * - fragment value ( id of device/asset if it is not typed dashboard; deviceTypeValue property of dashboard if it is type dashboard)\n * Example fragment for device dashboard: 'c8y_Dashboard!device!773200'\n * Example fragment for group dashboard: 'c8y_Dashboard!group!84129208'\n * Example fragment for typed device dashboard: 'c8y_Dashboard!type!c8y_lwm2m_connector_device'\n *\n * @param contextDashboardType Type of dashboard\n * @param value Fragment value\n * @returns Fragment for dashboard\n */\n createFragmentKey<T extends ContextDashboardType, V extends string>(\n contextDashboardType: T,\n value: V\n ) {\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${contextDashboardType}${this.INDEX_SPLIT}${value}` as const;\n }\n\n /**\n * Indicates if dashboard can be set to type dashboard.\n * First, it checks if deviceTypeValue exists and if user has permission to set dashboard type.\n * Then, case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n * type fragment is missing- we do not support this combination.\n * @param mo Dashboard managed object\n * @param context {ContextData} Current context\n * @returns True if dashboard can be set to type dashboard, false if it is forbidden.\n */\n shouldAllowToSetDashboardType(\n mo: ContextDashboardManagedObject,\n context: ContextData\n ): AllowTypeDashboard {\n // disallow if dashboard managed object or context is missing or context is not device/asset/group\n if (\n !mo ||\n !context?.contextData ||\n (context.context !== ViewContext.Device && context.context !== ViewContext.Group)\n ) {\n return 'disallow';\n }\n\n // if context is asset/group and type dashboard feature is hidden for assets/groups or asset/group has no typ, return disallow\n const typeDashboardHiddenForAssets = this.optionsService.get(\n this.HIDE_TYPE_DASHBOARD_FOR_ASSETS,\n true\n );\n if (\n context.context === ViewContext.Group &&\n (typeDashboardHiddenForAssets || !context.contextData.type)\n ) {\n return 'disallow';\n }\n\n // if user has no permission to change dashboard, return disallow\n if (!this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {\n return 'disallow';\n }\n\n // case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n // type fragment is missing- we do not support this combination.\n const typeFragment = this.createFragmentKey(\n ContextDashboardType.Type,\n context?.contextData?.type\n );\n if (\n mo?.c8y_Dashboard &&\n mo?.c8y_Dashboard.deviceType &&\n context?.contextData?.type &&\n !mo[typeFragment]\n ) {\n return 'disallow';\n }\n\n // if view context is Device and contextData of this device has no type yet but type dashboard can be set when type is filled,\n // return allow_if_type_filled\n if (\n !context?.contextData?.type &&\n context.context === ViewContext.Device &&\n this.permissions.hasAnyRole(this.INVENTORY_ROLES)\n ) {\n return 'allow_if_type_filled';\n }\n\n return 'allow';\n }\n\n createReport(reportCfg: Partial<IManagedObject>) {\n const report: Partial<IManagedObject> = {};\n Object.assign(report, reportCfg);\n Object.assign(report, { c8y_Report: {} });\n return this.inventory.create(report);\n }\n\n addReportNavigatorNode(report: IManagedObject): void {\n const node = new NavigatorNode({\n label: report.name,\n path: `reports/${report.id}`,\n icon: report.icon,\n priority: report.priority\n });\n this.navigator.add(node);\n }\n\n getContextForGS(mo: IManagedObject): string | null {\n if (this.groupService.isDevice(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;\n } else if (this.groupService.isAsset(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.ASSET;\n } else if (this.groupService.isGroup(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.GROUP;\n } else {\n return null;\n }\n }\n\n async getContextDashboards(\n mo: IManagedObject,\n dashboardType: ContextDashboardType[]\n ): Promise<IResultList<IManagedObject>> {\n const filterCriteria = dashboardType.map(t => ({\n // it's necessary to wrap fragment in quotes because dashboard type can contain spaces\n __has: `'${this.createDashboardFragment(mo, t)}'`\n }));\n\n // the has query above does not work for device type dashboards where the type contains a dot\n const typeFilterCriteria =\n dashboardType.includes(ContextDashboardType.Type) && mo.type\n ? {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { 'c8y_Dashboard.deviceTypeValue': { __eq: mo.type } }\n ]\n }\n : undefined;\n const finalFilterCriteria = typeFilterCriteria\n ? [...filterCriteria, typeFilterCriteria]\n : filterCriteria;\n\n const query = this.queriesUtil.buildQuery({ __filter: { __or: finalFilterCriteria } });\n const now = Date.now();\n const cacheHasValidResponse =\n this.contextDashboardsCache &&\n this.contextDashboardsCache.query === query &&\n now - this.contextDashboardsCache.timestamp < this.CACHE_TIMEOUT;\n\n if (cacheHasValidResponse) {\n return this.contextDashboardsCache.result;\n } else {\n this.contextDashboardsCache = null;\n }\n\n this.contextDashboardsCache = {\n query,\n result: this.inventory.list({ query, pageSize: this.DEFAULT_PAGESIZE }),\n timestamp: now\n };\n return this.contextDashboardsCache.result;\n }\n\n /**\n * Creates a tuple describing the dashboard type and its fragments. For assets like devices and groups, it's possible\n * to have two fragments: one indicating this particular device/asset with its ID, and the second indicating\n * the device/asset type (if the dashboard is meant to be applied to all assets of this type).\n *\n * @param dashboardMO - Dashboard managed object.\n * @param context - Context data of asset.\n * @param name - Name of the dashboard.\n * @param isEdit - True if existing dashboard is updated, false when it's creation of new dashboard.\n * @returns Tuple of dashboard type and object containing dashboard fragments.\n */\n private getDashboardFragments(\n dashboardMO: ContextDashboardManagedObject,\n context: ContextData,\n name: string,\n isEdit: boolean\n ): [ContextDashboardType, Record<string, object>] {\n let dashboardType: ContextDashboardType;\n const id = (context?.contextData?.id as string) || '';\n const fragments: Record<string, object> = {};\n\n if (name) {\n // a named dashboard should not receive any other fragments\n dashboardType = ContextDashboardType.Named;\n const namedFragmentKey = this.createFragmentKey(ContextDashboardType.Named, name);\n fragments[namedFragmentKey] = {};\n } else if (context?.context === ViewContext.Device || context?.context === ViewContext.Group) {\n // get base type for device or group\n const defaultType =\n context.context === ViewContext.Device\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n dashboardType = dashboardMO.c8y_Dashboard.deviceType\n ? ContextDashboardType.Type\n : defaultType;\n\n // clear fragments from other asset if current asset is not origin of this dashboard\n this.clearRedundantFragment(dashboardMO, defaultType, fragments);\n\n // add base fragment for particular asset\n const deviceOrGroupFragmentKey = this.createFragmentKey(defaultType, id);\n fragments[deviceOrGroupFragmentKey] = {};\n\n // add or clear type fragment\n if (dashboardMO.c8y_Dashboard.deviceType || isEdit) {\n const typeFragmentKey = this.createFragmentKey(\n ContextDashboardType.Type,\n dashboardMO.c8y_Dashboard.deviceTypeValue\n );\n fragments[typeFragmentKey] = dashboardMO.c8y_Dashboard.deviceType ? {} : null;\n }\n }\n\n return [dashboardType, fragments];\n }\n /**\n * Clears fragments that originates from other managed object.\n * E.g. typed dashboard is created for device A of type c8y_MQTTDevice and id 1, so it gets fragments object\n * ```ts\n * {\n * c8y_Dashboard!device!1: {},\n * c8y_Dashboard!type!c8y_MQTTDevice: {}\n * }\n *```\n * then, on device B of type c8y_MQTTDevice and id 2, which also has access to this dashboard, deviceType is set to\n * false, so dashboard is not typed dashboard anymore and now belongs to device B, therefore fragments should look like\n * ```ts\n * {\n * c8y_Dashboard!device!1: null, // this value is cleared because dashboard is doesn't belong to device A anymore\n * c8y_Dashboard!device!2: {}, // assign dashboard to device B\n * c8y_Dashboard!type!c8y_MQTTDevice: null // this value is cleared in getDashboardFragments method as it's not typed dashboard anymore\n * }\n * ```\n *\n * @param dashboardMO - Dashboard managed object.\n * @param type - Context dashboard type.\n * @param fragments - Fragments object.\n */\n private clearRedundantFragment(\n dashboardMO: ContextDashboardManagedObject,\n type: ContextDashboardType,\n fragments: Record<string, object>\n ): void {\n Object.keys(dashboardMO)\n .filter(key => key.startsWith(this.createFragmentKey(type, '')))\n .forEach(key => (fragments[key] = null));\n }\n\n /**\n * Used to migrate dashboards from previous 12 columns layout to 24 columns.\n */\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T[]\n ): T[];\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T\n ): T;\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T | T[]\n ): T | T[] {\n if (Array.isArray(dashboards)) {\n return dashboards.map(dashboard => this.adjustDashboardFor24Columns(dashboard));\n }\n // if `columns` attribute exists, dashboard was already adjusted.\n if (dashboards.c8y_Dashboard.columns) {\n return dashboards;\n }\n\n dashboards.c8y_Dashboard.columns = 24;\n if (!dashboards.c8y_Dashboard.children) {\n return dashboards;\n }\n\n // Newly created NamedContextDashboards are still created with 12 columns for backwards compatibility.\n // Default widgets might be already configured for 24 columns.\n // If a widget is already configured for more than 12 columns, we should not adjust it.\n const alreadyHasWidgetsConfiguredForMoreThan12Columns = Object.values(\n dashboards.c8y_Dashboard.children\n ).some(widget => widget._x + widget._width > 12);\n if (alreadyHasWidgetsConfiguredForMoreThan12Columns) {\n return dashboards;\n }\n\n // we need to multiply both _width and _x attributes with 2 to migrate from 12 to 24 columns.\n Object.values(dashboards.c8y_Dashboard.children).forEach(widget => {\n if (widget._width) {\n widget._width = widget._width * 2;\n }\n if (widget._x) {\n widget._x = widget._x * 2;\n }\n });\n return dashboards;\n }\n\n private async serializeWidgetConfigs(dashboard: ContextDashboardManagedObject): Promise<void> {\n const children = cloneDeep(dashboard.c8y_Dashboard.children);\n if (!children) {\n return;\n }\n const configs = Object.values(children);\n const details = configs.map(({ componentId, config }) => ({ componentId, config }));\n const results = await this.dynamicComponent.serializeConfigs(details);\n results.forEach((result, index) => {\n Object.entries(result).forEach(([key, value]) => {\n set(details[index].config, key, value);\n });\n });\n dashboard.c8y_Dashboard.children = children;\n }\n\n private createContextDashboardCopy(\n dash: ContextDashboard,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ): ContextDashboard {\n const children = reduce(\n dash.children,\n (_children, child) => {\n const { id } = child;\n const cfg = child.config;\n const propertiesToCopy = {\n device: device => this.replaceContextInObj(device, newContext, oldContext),\n datapoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n dataPoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsGauge: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsLabels: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext)\n };\n\n if (cfg) {\n this.copyProperties(cfg, propertiesToCopy);\n if (cfg.options) {\n this.copyProperties(cfg.options, propertiesToCopy);\n }\n }\n\n _children[id] = cloneDeep(child);\n return _children;\n },\n {}\n );\n\n dash.children = children;\n\n const isTypeDashboard = dash.deviceType && !!dash.deviceTypeValue;\n if (isTypeDashboard) {\n dash.deviceTypeValue = newContext.type;\n }\n return dash;\n }\n\n private copyProperties(obj, propertiesToCopy) {\n forEach(propertiesToCopy, (copyFn, property) => {\n if (obj[property]) {\n obj[property] = copyFn(obj[property]);\n }\n });\n }\n\n private replaceContextInDataPoints(\n dataPoints,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n dataPoints.forEach(dp => {\n dp.__target = this.replaceContextInObj(dp.__target, newContext, oldContext);\n });\n return dataPoints;\n }\n\n private replaceContextInObj(\n obj: Partial<IManagedObject>,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n if (obj && obj.id === oldContext.id) {\n Object.assign(obj, pick(newContext, ['id', 'name']));\n }\n return obj;\n }\n\n private getTabs$(\n mo: ContextDashboardManagedObject,\n dashboardType: ContextDashboardType[],\n context?: ContextData\n ) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n mergeMap(dashboard => this.verifyDashboardAvailability$(dashboard)),\n // Due to MTM-62321 named context dashboards included fragments for device and groups.\n // therefore some device-info dashboards (from DM app) might occur in cockpit on device level.\n // We need to filter those out..\n filter(([dashboard]) => {\n // list all identifiers of the dashboard (name, device, group, type)\n const dashboardIdentifiers = Object.keys(dashboard)\n .filter(key => key.startsWith(`${this.FRAGMENT_NAME}${this.INDEX_SPLIT}`))\n .map(key => key.split(this.INDEX_SPLIT)[1]);\n // if dashboard is not named, it's safe to include it\n if (!dashboardIdentifiers.includes(ContextDashboardType.Named)) {\n return true;\n }\n // if dashboard is named, but also has a context identifier, we skip it\n if (\n dashboardIdentifiers.includes(ContextDashboardType.Device) ||\n dashboardIdentifiers.includes(ContextDashboardType.Group)\n ) {\n return false;\n }\n\n // all others are good..\n return true;\n }),\n mergeMap(([dashboard]) => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard, context)),\n toArray()\n );\n }\n\n private verifyDashboardAvailability$(dashboard: ContextDashboardManagedObject) {\n const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds;\n const canEdit = from(\n this.permissions.canEdit(this.INVENTORY_ROLES, dashboard, { skipRequestCheck: true })\n );\n const hasAnyGlobalRole =\n !globalRolesIds || globalRolesIds === ALL_GLOBAL_ROLES_SELECTED\n ? of(true)\n : of(this.permissions.hasAnyGlobalRole(globalRolesIds));\n\n return combineLatest([of(dashboard), canEdit, hasAnyGlobalRole]).pipe(\n filter(([, canEdit, hasAnyGlobalRole]) => canEdit || hasAnyGlobalRole)\n );\n }\n\n private getContextDashboards$(request: Promise<IResultList<IManagedObject>>) {\n return from(request).pipe(\n mergeMap(response =>\n this.adjustDashboardFor24Columns(response.data as ContextDashboardManagedObject[])\n )\n );\n }\n\n /**\n * Cleans already corrupted dashboards from dashboardMo property.\n * Added to fix dashboards on the cloud instance (eu-latest).\n * @deprecated This is going to be removed after 1007.7.0.\n */\n private async removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCopy = cloneDeep(dashboard);\n const children = get(dashboardCopy, 'c8y_Dashboard.children');\n let updateDashboard = false;\n\n forEach(children, child => {\n if (get(child, 'componentTransformConfigWithContext')) {\n delete child.componentTransformConfigWithContext;\n updateDashboard = true;\n }\n if (get(child, 'config.dashboardMo')) {\n delete child.config.dashboardMo;\n updateDashboard = true;\n }\n });\n\n if (updateDashboard) {\n await this.update(dashboardCopy);\n }\n return dashboardCopy;\n }\n\n private cacheDashboard(dashboard: ContextDashboardManagedObject) {\n this.cache.set(dashboard.id, dashboard);\n }\n\n private createDashboardTab(dashboard: ContextDashboardManagedObject, context?: ContextData) {\n const { c8y_Dashboard: _dashboard, id } = dashboard;\n return {\n icon: _dashboard.icon,\n path: `${this.DASHBOARD_ROUTE_PATH}/${id}`,\n label: _dashboard.name,\n priority: _dashboard.priority,\n hide: this.isReport(dashboard),\n badge:\n _dashboard.deviceType && this.shouldAllowToSetDashboardType(dashboard, context)\n ? gettext('Dashboard template')\n : null,\n tooltipText: _dashboard.description || gettext('Dashboard template')\n } as Tab;\n }\n\n private clean(dashboard) {\n const jsonString = JSON.stringify(dashboard, (key, value) => {\n if (key === '$$hashKey' || key === 'klasses') {\n return undefined;\n }\n\n return value;\n });\n return JSON.parse(jsonString);\n }\n\n private getNamedDashboard(name: string) {\n return this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${name}`,\n pageSize: 1\n });\n }\n\n private createDashboardFragment(mo: IManagedObject, type: ContextDashboardType) {\n let value;\n if (mo.c8y_Report) {\n value = `${this.REPORT_PARTIAL_NAME}${mo.id}`;\n } else {\n value = type === ContextDashboardType.Type ? mo.type : mo.id;\n }\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${value}`;\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>, context?) {\n if (\n (!context && this.isNamed(dashboard) && !this.isReport(dashboard)) ||\n this.isDeviceType(dashboard)\n ) {\n return {};\n }\n return null;\n }\n\n private getTemporaryDashboard(dashboardCfg: ContextDashboard): ContextDashboardManagedObject {\n return {\n c8y_Dashboard: {\n ...dashboardCfg,\n name: dashboardCfg.name || 'Temporary Dashboard',\n isTransient: true,\n description: gettext(\n 'This is a temporary, non-editable dashboard displayed due to insufficient permissions.'\n )\n },\n [`c8y_Dashboard!name!${dashboardCfg.name}`]: {}\n } as ContextDashboardManagedObject;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboard } from './context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardDetailService {\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 5000;\n\n constructor(\n private fb: FormBuilder,\n private translateService: TranslateService\n ) {}\n /**\n * Creates dashboard details form divided into two groups- general settings and appearance settings.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param allowTypeDashboard Allow to make dashboard type dashboard\n * @returns Dashboard details form\n */\n initForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n return this.fb.group({\n generalSettingsForm: this.initGeneralSettingsForm(dashboard, isReport, allowTypeDashboard),\n appearanceSettingsForm: this.initAppearanceSettingsForm(dashboard)\n });\n }\n /**\n * Creates form group for general settings of dashboard.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param deviceTypeValue Value used for typed dashboard\n * @returns Dashboard general settings form\n */\n initGeneralSettingsForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n const globalRolesIdsValue = !dashboard?.globalRolesIds\n ? null\n : Array.isArray(dashboard.globalRolesIds)\n ? [...dashboard.globalRolesIds]\n : dashboard.globalRolesIds;\n return this.fb.group({\n icon: [dashboard?.icon || this.DEFAULT_DASHBOARD_ICON, [Validators.minLength(1)]],\n priority: [\n dashboard?.priority || this.DEFAULT_DASHBOARD_PRIORITY,\n [Validators.min(-10000), Validators.max(10000), Validators.required]\n ],\n name: [\n dashboard?.name ||\n (isReport\n ? this.translateService.instant(gettext('Report'))\n : this.translateService.instant(gettext('Dashboard'))),\n [Validators.required, Validators.maxLength(512)]\n ],\n description: [dashboard?.description || null, [Validators.maxLength(1_000)]],\n globalRolesIds: [globalRolesIdsValue],\n c8y_IsNavigatorNode: [!!dashboard?.c8y_IsNavigatorNode],\n ...(allowTypeDashboard !== 'disallow' && {\n deviceType: [\n {\n value: dashboard?.deviceType ?? false,\n disabled: allowTypeDashboard === 'allow_if_type_filled'\n }\n ]\n })\n });\n }\n /**\n * Creates form group for appearance settings of dashboard.\n * @param dashboard Context dashboard object\n * @returns Dashboard appearance settings form\n */\n initAppearanceSettingsForm(dashboard: ContextDashboard): FormGroup {\n return this.fb.group({\n widgetMargin: [\n dashboard?.widgetMargin || this.DEFAULT_DASHBOARD_MARGIN,\n [Validators.min(0), Validators.max(50)]\n ],\n translateWidgetTitle: [!!dashboard?.translateWidgetTitle],\n classes: [dashboard?.classes || { [this.styling.themeClass]: true }],\n widgetClasses: [dashboard?.widgetClasses || { [this.styling.headerClass]: true }]\n });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IUserGroup, UserGroupService } from '@c8y/client';\nimport { GainsightService, Item, Permissions } from '@c8y/ngx-components';\nimport {\n DashboardGlobalRoles,\n ALL_GLOBAL_ROLES_SELECTED,\n PRODUCT_EXPERIENCE\n} from './context-dashboard.model';\n\n@Component({\n selector: 'c8y-dashboard-availability',\n templateUrl: './dashboard-availability.component.html'\n})\nexport class DashboardAvailabilityComponent implements OnInit {\n /**\n * Ids of global roles assigned to the dashboard or a string \"all\" indicating the selection of all global roles.\n * The value undefined is treated as equivalent to 'all'.\n */\n @Input()\n get globalRolesIds(): DashboardGlobalRoles {\n return this._globalRolesIds;\n }\n set globalRolesIds(ids: DashboardGlobalRoles) {\n if (!ids || ids === ALL_GLOBAL_ROLES_SELECTED) {\n this._globalRolesIds = ALL_GLOBAL_ROLES_SELECTED;\n return;\n }\n this._globalRolesIds = [...ids];\n }\n @Output() globalRolesIdsChange = new EventEmitter<DashboardGlobalRoles>();\n globalRolesItems: Item[] = [];\n globalRolesItemsSelected: Item[] = [];\n selectHidden = false;\n private globalRoles: IUserGroup[] = [];\n private PAGE_SIZE = 100;\n private _globalRolesIds: DashboardGlobalRoles;\n\n constructor(\n private userGroupService: UserGroupService,\n private gainsightService: GainsightService,\n private permissions: Permissions\n ) {}\n\n async ngOnInit() {\n if (this.permissions.hasRole(Permissions.ROLE_USER_MANAGEMENT_READ)) {\n this.globalRoles = await this.getGlobalRoles();\n this.globalRolesItems = this.mapGlobalRolesToItems();\n this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();\n } else {\n this.selectHidden = true;\n }\n }\n\n onSelected(items: Item[]) {\n if (!items || !Array.isArray(items)) {\n return;\n }\n\n const allItemsSelected = items.length === this.globalRolesItems.length;\n this.globalRolesItemsSelected = items;\n\n if (allItemsSelected) {\n this.globalRolesIdsChange.emit(ALL_GLOBAL_ROLES_SELECTED);\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: ALL_GLOBAL_ROLES_SELECTED\n });\n } else {\n const selectedGlobalRolesIds = items.map(i => i.id);\n this.globalRolesIdsChange.emit([...selectedGlobalRolesIds]);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: selectedGlobalRolesIds?.sort()?.join()\n });\n }\n }\n\n private async getGlobalRoles() {\n return (await this.userGroupService.list({ pageSize: this.PAGE_SIZE })).data;\n }\n\n private mapGlobalRolesToItems(): Item[] {\n return this.globalRoles.map(({ name, id }) => ({\n name,\n id\n }));\n }\n\n private getSelectedGlobalRolesItems(): Item[] {\n if (!this.globalRolesIds || this.globalRolesIds === ALL_GLOBAL_ROLES_SELECTED) {\n return this.globalRolesItems;\n }\n return this.globalRolesIds\n .map(globalRoleId => this.globalRolesItems.find(gR => gR.id === globalRoleId))\n .filter(Boolean);\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Availability`of dashboard based on permissions`' | translate }}</legend>\n <c8y-form-group>\n <label for=\"availability\">\n <span\n class=\"m-r-4\"\n id=\"availability\"\n >\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <c8y-select-legacy\n *ngIf=\"!selectHidden\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select-legacy>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n </c8y-form-group>\n</fieldset>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { AlertService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-type-dashboard-info',\n templateUrl: './type-dashboard-info.component.html'\n})\nexport class TypeDashboardInfoComponent implements OnInit {\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() context: ContextDashboardManagedObject;\n deviceTypeInstancesCount: number;\n @Input() asyncRenderSuccess: () => void;\n @Input() asyncRenderFail: () => void;\n\n constructor(\n private inventory: InventoryService,\n private alert: AlertService\n ) {}\n\n async ngOnInit() {\n await this.updateDeviceTypeCount();\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n try {\n const count = await this.inventory.count({\n type: this.deviceTypeValue || this.context.c8y_Dashboard.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n this.asyncRenderSuccess?.();\n } catch (error) {\n this.alert.addServerFailure(error);\n this.asyncRenderFail?.();\n }\n }\n}\n","<ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n <span class=\"m-l-auto\">\n <span class=\"label label-info\">\n {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n </span>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n </li>\n <ng-container *ngIf=\"context?.c8y_Dashboard\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n </span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"context?.c8y_DashboardHistory?.length\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n {{ context.c8y_DashboardHistory[0].author }}\n </span>\n </li>\n </ng-container>\n</ul>\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { gettext, InterAppService, SupportedApps, SupportedAppKey } from '@c8y/ngx-components';\nimport { IApplication, InventoryService } from '@c8y/client';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { Observable } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'c8y-typed-dashboard-settings',\n templateUrl: './typed-dashboard-settings.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TypedDashboardSettingsComponent),\n multi: true\n }\n ]\n})\nexport class TypedDashboardSettingsComponent implements ControlValueAccessor, OnInit {\n value: boolean;\n touched = false;\n disabled = false;\n\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() formInvalid: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Input() isDevice: boolean;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n typedDashboardStatus: string;\n infoText: string;\n deviceTypeInstancesCount: number;\n showSourceNavigationLink$: Observable<boolean>;\n userDeviceManagementApp$: Observable<IApplication>;\n context: any;\n deviceManagementAppKey: SupportedAppKey = SupportedApps.devicemanagement;\n deviceManagementLinkTitle = gettext('Device Info page in {{ deviceManagementAppName }}');\n\n constructor(\n private inventory: InventoryService,\n private interAppService: InterAppService,\n private route: ActivatedRoute\n ) {}\n\n async ngOnInit() {\n this.userDeviceManagementApp$ = this.interAppService.getApp$(this.deviceManagementAppKey);\n this.context = this.route.parent.snapshot.data.contextData;\n this.showSourceNavigationLink$ = this.interAppService.shouldShowAppLink$(\n this.deviceManagementAppKey\n );\n }\n\n async goToDeviceView(): Promise<void> {\n await this.interAppService.navigateToApp(\n this.deviceManagementAppKey,\n `#/device/${this.context.id}/device-info`\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onChange = _ => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onTouched = () => {};\n\n writeValue(value: boolean): void {\n this.value = value;\n this.updateTexts();\n if (value) {\n this.updateDeviceTypeCount();\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n async toggle(): Promise<void> {\n this.value = !this.value;\n this.onChange(this.value);\n if (this.value && this.deviceTypeInstancesCount == null) {\n this.setDisabledState(true);\n await this.updateDeviceTypeCount();\n }\n this.updateTexts();\n this.setDisabledState(false);\n }\n\n private updateTexts(): void {\n this.typedDashboardStatus = this.value\n ? gettext('Enabled`typed dashboard`')\n : gettext('Disabled`typed dashboard`');\n\n if (this.allowTypeDashboard === 'allow_if_type_filled') {\n this.infoText = gettext(\n `<p class=\"p-b-8\">Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the device type.</p>\n <p class=\"p-b-16\">The current device doesn't have a device type assigned to it. Assign a device type to the device via the \"Asset properties\" widget in the <strong>Info</strong> tab of the device.</p>`\n );\n return;\n }\n\n if (this.value) {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all devices based on device type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all devices based on the same type and makes it available only for the current instance.\n </p>`\n );\n } else {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all assets based on asset model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all assets based on the same model and makes it available only for the current instance.\n </p>`\n );\n }\n } else {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n } else {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all assets based on the model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n }\n }\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n const count = await this.inventory.count({\n type: this.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div class=\"flex-grow d-flex d-col\">\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n <button\n class=\"btn-link p-0 m-r-auto\"\n type=\"button\"\n *ngIf=\"allowTypeDashboard === 'allow_if_type_filled' && showSourceNavigationLink$ | async\"\n (click)=\"goToDeviceView()\"\n >\n {{\n deviceManagementLinkTitle\n | translate\n : {\n deviceManagementAppName:\n userDeviceManagementApp$ | async | humanizeAppName | async\n }\n }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </div>\n </div>\n\n <c8y-type-dashboard-info\n *ngIf=\"allowTypeDashboard === 'allow'\"\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DashboardGlobalRoles\n} from '../context-dashboard.model';\nimport { gettext, NavigatorNode, NavigatorService } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-general-settings',\n templateUrl: './dashboard-general-settings.component.html'\n})\nexport class DashboardGeneralSettingsComponent {\n @Input() isReport: boolean;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability: boolean;\n @Input() dashboard: ContextDashboard;\n @Input() generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Input() isDevice: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n dashboardName: string;\n navigatorNodes$: Observable<NavigatorNode[]>;\n globalRolesIds: DashboardGlobalRoles;\n readonly priorityExampleLabel = gettext('e.g. {{ example }}');\n readonly positionInTabsExampleLabel = gettext('Position in tabs (10000 first, -10000 last)');\n constructor(private navigatorService: NavigatorService) {}\n\n ngOnInit() {\n this.navigatorNodes$ = this.navigatorService.items$;\n this.globalRolesIds = this.dashboard.globalRolesIds;\n }\n\n changeGlobalRoleIds() {\n this.generalSettingsForm.patchValue({ globalRolesIds: this.globalRolesIds });\n this.generalSettingsForm.markAsDirty();\n }\n}\n","<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard !== 'disallow'\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from '../context-dashboard.model';\nimport { ContextDashboardService } from '../context-dashboard.service';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-appearance-settings',\n templateUrl: './dashboard-appearance-settings.component.html'\n})\nexport class DashboardAppearanceSettingsComponent implements OnChanges {\n @Input() dashboard: ContextDashboard;\n @Input() appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n @Output() previewChanged = new EventEmitter<\n Pick<ContextDashboard, 'classes' | 'widgetClasses'>\n >();\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n ngOnInit() {\n if (this.dashboard) {\n this.setDashboardStyle();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.dashboard) {\n this.dashboard = changes.dashboard.currentValue;\n this.ngOnInit();\n }\n }\n\n changeThemeClass(themeClass: string) {\n this.styling.themeClass = themeClass;\n this.appearanceSettingsForm.patchValue({ classes: { [this.styling.themeClass]: true } });\n this.previewChanged.emit({ classes: { [this.styling.themeClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n changeHeaderClass(headerClass: string) {\n this.styling.headerClass = headerClass;\n this.appearanceSettingsForm.patchValue({ widgetClasses: { [this.styling.headerClass]: true } });\n this.previewChanged.emit({ widgetClasses: { [this.styling.headerClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { ContextDashboard } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { ContextDashboardService } from '../context-dashboard.service';\n\n@Component({\n selector: 'c8y-dashboard-version-history',\n templateUrl: './dashboard-version-history.component.html'\n})\nexport class DashboardVersionHistoryComponent {\n @Input() dashboardHistory: ContextDashboard[] = [];\n @Input() isReport: boolean;\n @Output() onRevert: EventEmitter<ContextDashboard> = new EventEmitter();\n dashboardHistoryExtended: (ContextDashboard & { descriptionText?: string })[] = [];\n restoredDashboardMessage = gettext(\n 'Restored dashboard state from {{ restoredStateCreationDate }}'\n );\n versionHistoryLimitMessage = gettext(\n 'Store up to {{ versionHistoryLimit }} dashboard versions. Any additional versions will replace/delete older ones'\n );\n\n constructor(\n private translateService: TranslateService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngOnInit() {\n this.generateDashboardHistoryDescription();\n }\n\n generateDashboardHistoryDescription() {\n for (const dashboard of this.dashboardHistory) {\n const copiedDashboard: ContextDashboard & { descriptionText?: string } = { ...dashboard };\n\n let settingChangesMessage = '';\n let assetModelMessage = '';\n let widgetChanges = '';\n\n if (dashboard.historyDescription.changeType === 'create') {\n copiedDashboard.descriptionText = this.translateService.instant(\n this.isReport ? gettext('Report created.') : gettext('Dashboard created.')\n );\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n if (dashboard.historyDescription.changeType === 'reset') {\n copiedDashboard.descriptionText = this.translateService.instant(gettext('Reset widgets'));\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n\n const isDashboardUpdated = dashboard.historyDescription.dashboardSettingChanges?.length > 0;\n if (isDashboardUpdated) {\n const translatedValuesChanged = dashboard.historyDescription.dashboardSettingChanges\n .map(val => this.translateService.instant(val))\n .join(', ');\n settingChangesMessage = this.translateService.instant(\n this.isReport\n ? gettext('Report updated: {{ values }}.')\n : gettext('Dashboard updated: {{ values }}.'),\n { values: translatedValuesChanged }\n );\n }\n\n const isDeviceDashboard = dashboard.historyDescription.deviceType != null && !this.isReport;\n if (isDeviceDashboard) {\n assetModelMessage = this.translateService.instant(\n dashboard.historyDescription.deviceType\n ? gettext('Dashboard asset model has been enabled.')\n : gettext('Dashboard asset model has been disabled.')\n );\n }\n\n if (dashboard.historyDescription.widgetChanges) {\n for (const change in dashboard.historyDescription.widgetChanges) {\n const widgetList = dashboard.historyDescription.widgetChanges[change];\n if (!widgetList) {\n continue;\n }\n const translatedWidgetList = dashboard.translateWidgetTitle\n ? widgetList.map(widget => this.translateService.instant(widget))\n : widgetList;\n switch (change) {\n case 'added':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Added widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'removed':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Removed widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'config':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Updated widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'arrangement':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Rearranged widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n default:\n break;\n }\n }\n }\n\n copiedDashboard.descriptionText = `${settingChangesMessage} ${assetModelMessage} ${widgetChanges}`;\n this.dashboardHistoryExtended.push(copiedDashboard);\n }\n }\n\n revertDashboard(dashboard: ContextDashboard): void {\n const newDashboard = cloneDeep(dashboard);\n newDashboard.historyDescription.restored = dashboard.created;\n this.onRevert.emit(newDashboard);\n }\n}\n","<div class=\"bg-component p-t-8 p-b-8 separator-bottom text-center\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info\"\n ></i>\n {{\n versionHistoryLimitMessage\n | translate: { versionHistoryLimit: contextDashboardService.VERSION_HISTORY_SIZE_LIMIT }\n }}\n</div>\n<c8y-list-group class=\"p-t-24 p-b-24\">\n <c8y-li-timeline\n *ngFor=\"let dashboard of dashboardHistoryExtended; index as i\"\n [ngClass]=\"{ active: i === 0 }\"\n >\n {{ dashboard.created | date: 'mediumDate' }}\n {{ dashboard.created | date: 'shortTime' }}\n <c8y-li data-cy=\"c8y-dashboard-version-history--history-row\">\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div class=\"flex-grow\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ dashboard.descriptionText }}\"\n data-cy=\"c8y-dashboard-version-history--history-title\"\n >\n {{ dashboard.descriptionText }}\n {{\n dashboard.historyDescription.restored\n ? (restoredDashboardMessage\n | translate\n : {\n restoredStateCreationDate: dashboard.historyDescription.restored | c8yDate\n })\n : ''\n }}\n </span>\n <small\n class=\"text-muted\"\n title=\"{{ 'by`user`' | translate }} {{ dashboard.author }}\"\n *ngIf=\"dashboard.author\"\n >\n <div class=\"icon-flex\">\n <i c8yIcon=\"c8y-user\"></i>\n {{ dashboard.author }}\n </div>\n </small>\n </div>\n\n <span\n class=\"label label-primary m-l-auto\"\n title=\"{{ 'The last saved status of the dashboard' | translate }}\"\n *ngIf=\"i === 0\"\n >\n {{ 'Current`dashboard status`' | translate }}\n </span>\n <span\n class=\"m-l-auto showOnHover\"\n *ngIf=\"dashboardHistoryExtended.length > 1 && i > 0\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Restore the dashboard to this status' | translate }}\"\n type=\"button\"\n (click)=\"revertDashboard(dashboard)\"\n >\n {{ 'Restore' | translate }}\n </button>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AppStateService,\n ContextData,\n ContextRouteService,\n GainsightService,\n gettext,\n GroupService,\n memoize,\n ModalService,\n Status,\n Tab,\n TabsService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { clone, cloneDeep, isEqual } from 'lodash-es';\nimport { Observable, Subject } from 'rxjs';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DASHBOARD_SETTINGS_CHANGES,\n DashboardDetailsTabId,\n DashboardDetailsTabs,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { first } from 'rxjs/operators';\nimport { newDashboardTab } from './new-dashboard.guard';\nimport { DashboardDetailService } from './dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent implements OnInit, OnChanges, OnDestroy {\n isCollapsed = true;\n currentContext: ContextData;\n currentDashboard: ContextDashboard;\n @Input() isReport: boolean;\n @Input() deviceType: string;\n @Input() context: any;\n @Input() mo: ContextDashboardManagedObject;\n @Input() dashboard: ContextDashboard;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability = false;\n deviceTypeValue: string;\n displayDeviceTypeValue: string;\n icons: string[];\n namePlaceholder: string;\n tabs$: Observable<Tab[]>;\n selectedTab: DashboardDetailsTabId = DashboardDetailsTabId.GENERAL;\n dashboardDetailsForm: ReturnType<DashboardDetailService['initForm']>;\n generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n allowTypeDashboard: AllowTypeDashboard;\n isEdit: boolean;\n @Output() dashboardSaved = new EventEmitter<ContextDashboard>();\n @Output() previewChanged = new EventEmitter<any>();\n private destroy$: Subject<void> = new Subject();\n\n readonly TABS_OUTLET_NAME = 'dashboardTabs';\n readonly TABS: DashboardDetailsTabs = {\n general: {\n featureId: DashboardDetailsTabId.GENERAL,\n priority: 30,\n label: gettext('General')\n },\n appearance: {\n featureId: DashboardDetailsTabId.APPEARANCE,\n priority: 20,\n label: gettext('Appearance')\n },\n versionHistory: {\n featureId: DashboardDetailsTabId.VERSIONHISTORY,\n priority: 10,\n label: gettext('Version history')\n }\n };\n\n constructor(\n private contextDashboardService: ContextDashboardService,\n private translateService: TranslateService,\n private contextRoute: ContextRouteService,\n private activatedRoute: ActivatedRoute,\n private tabsService: TabsService,\n private router: Router,\n private inventory: InventoryService,\n private route: ActivatedRoute,\n private dashboardDetailService: DashboardDetailService,\n private appState: AppStateService,\n private groupService: GroupService,\n private modal: ModalService,\n private gainsightService: GainsightService\n ) {}\n\n ngOnInit() {\n this.tabs$ = this.tabsService.items$;\n this.currentContext = this.contextRoute.getContextData(this.activatedRoute);\n this.deviceTypeValue = this.context?.type;\n this.displayDeviceTypeValue =\n this.context &&\n this.groupService.isGroup(this.context) &&\n !this.groupService.isAsset(this.context)\n ? this.translateService.instant(gettext('Group'))\n : this.deviceTypeValue;\n\n this.updateAllowTypeDashboard();\n this.initForm();\n }\n\n ngOnChanges(): void {\n this.updateAllowTypeDashboard();\n }\n\n ngAfterContentInit(): void {\n if (!this.isEdit) {\n this.initializeConfiguration();\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async save() {\n const oldDashboard = cloneDeep(this.dashboard);\n this.dashboard = {\n ...this.dashboard,\n ...this.generalSettingsForm.value,\n ...this.appearanceSettingsForm.value\n };\n const dashboardSettingChanges: string[] = Object.keys(this.dashboard).filter(key => {\n if (key === 'c8y_IsNavigatorNode') {\n return !!oldDashboard[key] !== !!this.dashboard[key];\n }\n return !isEqual(oldDashboard[key], this.dashboard[key]);\n });\n\n this.dashboard.author = this.appState.currentUser.value.userName;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n\n this.dashboard.deviceTypeValue ??= this.deviceTypeValue;\n this.dashboard.historyDescription =\n this.updateDashboardHistoryDescription(dashboardSettingChanges);\n if (!this.isEdit && !this.isReport) {\n await this.createNewDashboard();\n } else if (!this.isEdit && this.isReport) {\n await this.createNewReport();\n } else {\n await this.updateDashboard();\n this.mo.c8y_DashboardHistory = [\n this.dashboard,\n ...(this.mo?.c8y_DashboardHistory ? this.mo.c8y_DashboardHistory : [])\n ];\n }\n }\n\n updateDashboardHistoryDescription(dashboardChanges: string[]): DashboardHistoryDescription {\n return {\n changeType: this.isEdit ? 'update' : 'create',\n dashboardSettingChanges: dashboardChanges\n .filter(value => value !== 'deviceType')\n .map(value => DASHBOARD_SETTINGS_CHANGES[value] || value),\n deviceType: dashboardChanges.find(value => value === 'deviceType')\n ? this.dashboard.deviceType\n : undefined\n };\n }\n\n selectTab(selectedTab: DashboardDetailsTabId) {\n this.selectedTab = selectedTab;\n this.tabsService.refresh();\n }\n\n async cancel() {\n if (!this.isEdit && !this.isReport) {\n // dashboard creation in it's own tab- confirm and cleanup triggered in canDeactivate during routing\n this.tabsService.items$.pipe(first()).subscribe((tabs: Tab[]) => {\n const tab = tabs.find(t => t.featureId !== newDashboardTab.featureId);\n this.router.navigate(typeof tab.path === 'string' ? [tab.path] : tab.path, {\n replaceUrl: true\n });\n });\n return;\n } else if (!this.isEdit && this.isReport) {\n this.router.navigate(['reports']);\n return;\n } else if (this.dashboardDetailsForm.dirty && !(await this.confirmClosing())) {\n return;\n }\n this.cleanupAfterDetailsClose();\n }\n\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n let canDeactivate: boolean;\n if (this.isCollapsed || !this.dashboardDetailsForm.dirty) {\n canDeactivate = true;\n } else {\n if (omitConfirm) {\n canDeactivate = false;\n } else {\n canDeactivate = await this.confirmClosing();\n }\n }\n if (canDeactivate) {\n this.cleanupAfterDetailsClose();\n }\n return canDeactivate;\n }\n\n show(isEdit: boolean) {\n this.isEdit = isEdit;\n if (this.isEdit) {\n this.edit();\n }\n this.initForm();\n this.isCollapsed = false;\n }\n\n async revertDashboard(dashboard: ContextDashboard) {\n this.dashboard = dashboard;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n await this.updateDashboard();\n }\n\n async duplicateWithoutType(): Promise<void> {\n const newDashboardName = this.translateService.instant(gettext('{{ dashboardName }} (copy)'), {\n dashboardName: this.generalSettingsForm.value.name\n });\n this.generalSettingsForm.patchValue({\n deviceType: false,\n name: newDashboardName\n });\n // setting edition to false so new dashboard can be created as copy of current one\n this.isEdit = false;\n await this.save();\n }\n\n private updateAllowTypeDashboard(): void {\n this.allowTypeDashboard = this.contextDashboardService.shouldAllowToSetDashboardType(\n this.mo,\n this.currentContext\n );\n }\n\n private initForm(): void {\n this.dashboardDetailsForm = this.dashboardDetailService.initForm(\n this.dashboard,\n this.isReport,\n this.allowTypeDashboard\n );\n this.generalSettingsForm = this.dashboardDetailsForm.get('generalSettingsForm') as FormGroup;\n this.appearanceSettingsForm = this.dashboardDetailsForm.get(\n 'appearanceSettingsForm'\n ) as FormGroup;\n }\n\n private async confirmClosing(): Promise<boolean> {\n try {\n await this.modal.confirm(\n gettext('Close dashboard details'),\n gettext(\n 'Are you sure you want to close dashboard details? All unsaved changes will be lost.'\n ),\n Status.WARNING,\n {\n ok: gettext('Close'),\n cancel: gettext('Cancel')\n }\n );\n return true;\n } catch (e) {\n return false;\n }\n }\n\n private async createNewDashboard() {\n const mo: ContextDashboardManagedObject = await this.contextDashboardService.create(\n this.dashboard,\n this.currentContext\n );\n\n await this.onCreateGSEvent(mo);\n this.cleanupAfterDetailsClose();\n await this.contextDashboardService.navigateToDashboard(mo, true);\n }\n\n private async onCreateGSEvent(mo: ContextDashboardManagedObject) {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: dashboardName,\n id: mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: mo.c8y_Dashboard.deviceType ? mo.c8y_Dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(\n this.currentContext.contextData as IManagedObject\n )\n });\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : await this.gainsightService.hashGroupName(str);\n }\n\n private async createNewReport() {\n try {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = this.dashboard;\n const report = (\n await this.contextDashboardService.createReport({\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n } as Partial<IManagedObject>)\n ).data;\n\n await this.contextDashboardService.create(\n this.dashboard,\n undefined,\n `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`\n );\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_REPORT,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: report.name,\n id: report.id,\n context: PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n });\n if (report.c8y_IsNavigatorNode) {\n this.contextDashboardService.addReportNavigatorNode(report);\n }\n this.cleanupAfterDetailsClose();\n await this.router.navigate(['reports', report.id]);\n } catch (ex) {\n // intended empty\n }\n }\n\n private async updateDashboard() {\n try {\n const dashboardMO: ContextDashboardManagedObject = cloneDeep(this.mo);\n const cfg = this.dashboard;\n if (this.isReport) {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = cfg;\n dashboardMO.c8y_Dashboard = cfg;\n await this.updateReport({\n id: this.context.id,\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n });\n } else {\n dashboardMO.c8y_Dashboard = cfg;\n }\n\n const updatedDashboardMo = await this.contextDashboardService.update(\n dashboardMO,\n this.currentContext\n );\n this.cleanupAfterDetailsClose();\n\n this.dashboardSaved.emit(updatedDashboardMo);\n } catch (ex) {\n // intended empty\n }\n }\n\n private edit() {\n if (this.isReport) {\n const { name, icon, priority, c8y_IsNavigatorNode, description } = this.context;\n Object.assign(this.dashboard, { name, icon, priority, c8y_IsNavigatorNode, description });\n }\n this.isNamedDashboard = this.contextDashboardService.isNamed(this.mo);\n this.selectedTab =\n this.hideAvailability && this.isNamedDashboard\n ? DashboardDetailsTabId.APPEARANCE\n : DashboardDetailsTabId.GENERAL;\n this.initializeConfiguration();\n }\n\n private initializeConfiguration() {\n const defaultDashboardCfg: Partial<ContextDashboard> = {\n name: this.translateService.instant(this.isReport ? gettext('Report') : gettext('Dashboard')),\n priority: this.isReport\n ? REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n : this.dashboardDetailService.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.dashboardDetailService.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType,\n columns: 24\n };\n\n if (this.dashboard) {\n this.currentDashboard = clone(this.dashboard);\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailsForm.markAsDirty();\n }\n this.namePlaceholder = this.isReport ? gettext('e.g. My report') : gettext('e.g. My dashboard');\n }\n\n private async updateReport(mo: Partial<IManagedObject>) {\n mo.c8y_IsNavigatorNode = mo.c8y_IsNavigatorNode ? {} : null;\n const res = await this.inventory.update(mo);\n this.context = res.data;\n if (this.route.parent) {\n this.route.parent.snapshot.data.contextData = this.context;\n }\n this.contextDashboardService.updateNavigatorItem(res.data);\n }\n\n private cleanupAfterDetailsClose() {\n this.isCollapsed = true;\n if (!this.isEdit) {\n const dashboardContext = this.route.snapshot.data.dashboard;\n // hide New dashboard tab\n const tmpNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // don't hide the new dashboard tab when clicking on the add dashboard button from another dashboard.\n if (!tmpNewDashboardTab || dashboardContext?.c8y_Dashboard) {\n return;\n }\n // hide tab and make it appear as last one to prevent navigating to it\n tmpNewDashboardTab.hide = true;\n tmpNewDashboardTab.priority = -Infinity;\n this.tabsService.refresh();\n }\n this.previewChanged.emit(this.dashboard);\n }\n}\n","<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { sortBy, cloneDeep, get, omit } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardConfig, CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetService {\n widgets: DynamicComponentDefinition[];\n\n constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Optional()\n @Inject(CONTEXT_DASHBOARD_CONFIG)\n public moduleConfig: ContextDashboardConfig | undefined\n ) {\n this.dynamicComponentService.items$.subscribe(widgets => {\n this.widgets = widgets;\n });\n }\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById(componentId);\n }\n\n getWidgetDefinitions() {\n const translatedComponents = this.widgets.map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n // cloneDeep and injector lead to a performance issue. We removing the injectors here,\n // as they are not needed, to avoid use of a lot of CPU for cloning.\n const translatedComponentsWithoutInjector = translatedComponents.map(cmp =>\n omit(cmp, 'injector')\n );\n const filterFn: (component: DynamicComponentDefinition) => boolean =\n this.moduleConfig?.widgetFilter ||\n (({ data }) => !(data && data.settings && data.settings.noNewWidgets));\n return cloneDeep(sortBy(translatedComponentsWithoutInjector, 'label').filter(filterFn));\n }\n\n async mapLegacy(widget: Partial<Widget>): Promise<Widget> {\n const cmp = await this.getWidgetDefinition(widget.componentId || widget.name);\n widget = this.mapDisplaySettings(widget, cmp);\n\n if (get(cmp, 'data.settings.upgrade')) {\n widget.widgetComponent = cmp.data.settings.widgetComponent;\n widget.configComponent = cmp.data.settings.configComponent;\n widget.templateUrl = cmp.data.settings.templateUrl;\n widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;\n widget.transformConfigWithContext =\n cmp.data.settings.componentTransformConfigWithContext ||\n cmp.data.settings.transformConfigWithContext ||\n widget.transformConfigWithContext;\n } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget as Widget;\n }\n\n private mapDisplaySettings(\n widget: Partial<Widget>,\n cmp: DynamicComponentDefinition\n ): Partial<Widget> {\n if (cmp?.data?.displaySettings) {\n widget.config = { displaySettings: cmp.data.displaySettings, ...(widget.config || {}) };\n }\n return widget;\n }\n}\n","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","<div class=\"legend form-block\" translate>Preview</div>\n<label *ngIf=\"tab\" translate>Tab and layout</label>\n<label *ngIf=\"!tab\" translate>Layout</label>\n<div class=\"dashboard-preview-slot\" [ngClass]=\"previewClasses\">\n <div\n class=\"page-tabs page-tabs-horizontal navigator-open p-absolute overflow-hidden\"\n style=\"left: 0; margin: 0 15px\"\n *ngIf=\"tab\"\n >\n <div class=\"tabContainer hidden-xs\">\n <ul role=\"menu\" class=\"nav nav-tabs nav-tabsc8y\">\n <li role=\"menuitem\" class=\"active\" style=\"left: 16px\">\n <a routerlinkactive=\"\" title=\"{{ tab.name }}\">\n <i class=\"text-primary\" [c8yIcon]=\"tab.icon\"></i>\n <span class=\"txt\">{{ tab.name }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div class=\"visible-xs mobile-tabs\"></div>\n </div>\n <div [ngClass]=\"{ 'm-t-64': !!tab }\">\n <div class=\"card card-dashboard\" style=\"height: 300px\">\n <div class=\"card-header-actions\" style=\"z-index: 8\">\n <div class=\"card-title\">\n <span translate>Widget title</span>\n </div>\n <div class=\"header-actions\">\n <div class=\"optionsBtn dropdown\">\n <button\n type=\"button\"\n title=\"{{ 'Settings' | translate }}\"\n (click)=\"(false)\"\n class=\"btn btn-dot dropdown-toggle c8y-dropdown\"\n aria-haspopup=\"true\"\n >\n <i c8yIcon=\"cog\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-inner-scroll p-t-16\">\n <p translate>Widget example content.</p>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnDestroy, ViewChild } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { DynamicComponentDefinition, Widget, DynamicComponentComponent } from '@c8y/ngx-components';\nimport { AssetSelectionChangeEvent } from '@c8y/ngx-components/assets-navigator';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n selectedDevice: IManagedObject;\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\n styling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n defaultStyling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n widgetHasConfigComponent: boolean;\n\n @ViewChild('config', { static: false })\n dynamicComponent: DynamicComponentComponent;\n\n @ViewChild('configForm', { static: false })\n configForm: NgForm;\n\n get isEdit() {\n return !!this.current;\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.mo.c8y_Dashboard?.deviceType && !!this.mo.c8y_Dashboard?.deviceTypeValue;\n }\n\n result: Promise<Widget> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n private searchSub: Subscription;\n private _save: (value: Widget) => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n private inventory: InventoryService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n async ngAfterContentInit(): Promise<void> {\n this.components = this.widgetService.getWidgetDefinitions();\n\n if (this.selected) {\n this.current = clone(this.selected);\n this.select(this.selected, this.isEdit ? 'config' : 'select');\n }\n\n this.searchSub = this.searchChange$\n .pipe(\n switchMap((event: KeyboardEvent) => iif(() => event.which !== 13, timer(200), timer(10)))\n )\n .subscribe(() => {\n this.search();\n });\n\n this.setStylings();\n\n if (this.widgetConfig?.device) {\n const { data } = await this.inventory.detail(this.widgetConfig.device.id);\n this.selectedDevice = data;\n }\n }\n\n isSaveDisabled(): boolean {\n return this.configForm?.invalid || this.checkIfDeviceRequired();\n }\n\n checkIfDeviceRequired() {\n return (\n !this.widgetConfig ||\n (!this.widgetConfig.settings.deviceTargetNotRequired &&\n !this.widgetConfig.device &&\n !this.widgetConfig.settings.noDeviceTarget)\n );\n }\n\n selectionChanged(selection?: AssetSelectionChangeEvent) {\n this.widgetConfig.device = selection?.change?.item;\n this.dynamicComponent.emitConfigChange({\n device: this.widgetConfig.device\n });\n }\n\n async save() {\n const hookSuccess = await this.dynamicComponent?.callLifeCycleHooks().toPromise();\n if (!hookSuccess) {\n return;\n }\n\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (\n this.widgetConfig &&\n this.widgetConfig.device &&\n // serializing will be handled by resolver\n !this.selected?.resolve?.device\n ) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, ['settings', 'displaySettings']),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\n if (mode === 'config' && this.configForm) {\n const formGroup = this.configForm.control;\n for (const control of Object.keys(formGroup.controls)) {\n formGroup.removeControl(control);\n }\n }\n\n cmp.data = cmp.data || {};\n this.selected = cmp;\n\n this.isUpgrade = !!get(cmp, 'data.settings.upgrade');\n this.contextDashboardService.formDisabled = this.isUpgrade;\n\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n /* this.selected.component cannot be checked since it is faulty for widgets like Help and Service, \n but exists for Applications widget and this would cause chaotic behaviour.\n */\n this.widgetHasConfigComponent =\n !!this.selected.loadConfigComponent || mode === 'select' || mode === 'config';\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\n }\n\n search() {\n if (this.searchTerm.length > 0) {\n this.searchResult = this.components.filter(cmp =>\n new RegExp(escapeRegExp(this.searchTerm.trim()), 'i').test(cmp.label)\n );\n } else {\n this.resetSearch();\n }\n }\n\n resetSearch() {\n this.searchTerm = '';\n this.searchResult = undefined;\n }\n\n changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getStyle(isPreview = false) {\n const cssClasses = {};\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.headerClass)) {\n cssClasses[this.styling.headerClass] = true;\n }\n\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.contentClass)) {\n cssClasses[this.styling.contentClass] = true;\n }\n\n if (isPreview) {\n cssClasses[`dashboard-theme-${this.defaultStyling.contentClass.split('-').pop()}`] = true;\n }\n\n return cssClasses;\n }\n\n ngOnDestroy(): void {\n this.contextDashboardService.formDisabled = true;\n if (this.searchSub) {\n this.searchSub.unsubscribe();\n }\n }\n\n hasConfig() {\n if (this.widgetConfig.settings?.upgrade) {\n return (\n this.widgetConfig.settings?.configComponent || this.widgetConfig.settings?.configTemplateUrl\n );\n }\n return !this.dynamicComponent?.error;\n }\n\n private isAnyOfAlarmsWidget(): boolean {\n return (\n this.widgetConfig?.settings?.alarmListWidget ||\n this.widgetConfig?.settings?.criticalAlarmsWidget ||\n this.widgetConfig?.settings?.recentAlarmsWidget\n );\n }\n\n private setStylings(): void {\n const dashboardClasses: string[] =\n (this.mo.c8y_Dashboard?.classes && Object.keys(this.mo.c8y_Dashboard.classes)) || [];\n const dashboardWidgetClasses: string[] =\n (this.mo.c8y_Dashboard?.widgetClasses && Object.keys(this.mo.c8y_Dashboard.widgetClasses)) ||\n [];\n const widgetClasses: string[] = this.isEdit ? Object.keys(this.current.data.classes) : [];\n\n this.styling = this.setDefaultStyle([\n ...dashboardClasses,\n ...dashboardWidgetClasses,\n ...widgetClasses\n ]);\n this.defaultStyling = this.setDefaultStyle([...dashboardClasses, ...dashboardWidgetClasses]);\n }\n\n private isDashboardDefaultStyle(className) {\n const allClasses = {\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n };\n const styles = Object.keys(allClasses).map(cssClass => ({ class: cssClass }));\n const style = this.contextDashboardService.getStyling(\n styles,\n className.split('-').pop(),\n undefined\n );\n return !!style;\n }\n\n private setDefaultStyle(setClasses: string[]) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n const styles = this.contextDashboardService\n .getFilteredDashboardStyles(setClasses)\n .map(c => c.split('-').pop());\n styles.forEach(styleName => {\n contentClass = this.contextDashboardService.getStyling(\n WIDGET_CONTENT_CLASSES,\n styleName,\n contentClass\n );\n headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n headerClass\n );\n });\n\n return { headerClass, contentClass };\n }\n\n private composeWidgetConfig(selectedComponent, context = {}) {\n const setting = {\n settings: {\n ...selectedComponent.data.settings,\n ...get(selectedComponent.data.settings, 'ng1.options'),\n ...get(selectedComponent.data, 'ng1.options'),\n context,\n dashboardMo: this.mo.c8y_Dashboard\n },\n ...selectedComponent.data.config\n } as ContextWidgetConfig;\n return this.applyTargetIfDeviceDashboard(setting);\n }\n\n private applyTargetIfDeviceDashboard(widgetConfig: ContextWidgetConfig) {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","<div class=\"modal-header\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0 elevation-md\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search…' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n data-cy=\"widget-config--widget-list\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n [ngStyle]=\"isLegacyAlarmWidget ? { 'pointer-events': 'none', opacity: '0.5' } : {}\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig(),\n showSelected: true\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24 p-t-16': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"widget-config--cancel-widget\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n data-cy=\"widget-config--save-widget\"\n (click)=\"save()\"\n [disabled]=\"\n !dynamicComponent ||\n (((this.contextDashboardService.formDisabled$ | async) || isSaveDisabled()) &&\n !!widgetHasConfigComponent)\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { cloneDeep } from 'lodash-es';\n\n/**\n * Holds current state of dashboard children during edit mode.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardOriginatorService {\n /**\n * Current dashboard children state name for indicating what change will be undone.\n */\n get currentStateName(): string {\n return this.state?.name;\n }\n /**\n * Current dashboard children state.\n * @private\n */\n private state: DashboardChildrenState;\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n initState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Updates dashboard children state when it is changed or restored with undo/redo.\n * @param state Dashboard children updated state.\n */\n setState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Returns copy of current state.\n */\n getState(): DashboardChildrenState {\n return cloneDeep(this.state);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\n\n/**\n * Caretaker is responsible for undo and redo functionalities.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardCaretakerService {\n /**\n * Current undo stack length for defining undo button disable state.\n */\n get undoStackLength(): number {\n return this.undoStack.length;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its' title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.redoStack[this.redoStack.length - 1];\n }\n /**\n * List of dashboard children changes.\n * @private\n */\n private undoStack: DashboardChildrenState[] = [];\n /**\n * List of dashboard children changes that were undone and can be redone back.\n * @private\n */\n private redoStack: DashboardChildrenState[] = [];\n\n constructor(private originator: DashboardOriginatorService) {}\n /**\n * Adds current dashboard children state to undo stack and clears redo stack.\n */\n backup(): void {\n this.undoStack.push(this.originator.getState());\n this.redoStack = [];\n }\n /**\n * Reverts last dashboard children change and puts it in redo stack.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState | undefined {\n if (!this.undoStack.length) {\n return;\n }\n const memento = this.undoStack.pop();\n this.redoStack.push(this.originator.getState());\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState | undefined {\n if (!this.redoStack.length) {\n return;\n }\n this.undoStack.push(this.originator.getState());\n const memento = this.redoStack.pop();\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Clears both undo and redo stack, sets current state as initial state and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset() {\n const initialItem = this.undoStack[0] || this.originator.getState();\n this.undoStack = [];\n this.redoStack = [];\n this.originator.initState(initialItem);\n return initialItem;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\nimport { DashboardCaretakerService } from './dashboard-caretaker.service';\nimport { DashboardChildrenState } from '../context-dashboard.model';\n/**\n * Facade for implementation of Memento design pattern (caretaker, originator). Responsible for undo/redo feature\n * during edit mode of dashboard.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardEditModeService {\n get undoButtonDisabled(): boolean {\n return this.caretaker.undoStackLength === 0;\n }\n /**\n * Current dashboard change name for undo button title.\n */\n get changeToUndoName(): string {\n return this.originator.currentStateName;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.caretaker.redoStackLastItem;\n }\n\n constructor(\n private originator: DashboardOriginatorService,\n private caretaker: DashboardCaretakerService\n ) {}\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n init(state: DashboardChildrenState) {\n this.originator.initState(state);\n }\n /**\n * Saves current state for further undo actions and sets new dashboard children state.\n * @param state Dashboard children updated state.\n */\n newState(state: DashboardChildrenState) {\n this.caretaker.backup();\n this.originator.setState(state);\n }\n /**\n * Returns copy of current state.\n */\n getCurrentState(): DashboardChildrenState {\n return this.originator.getState();\n }\n /**\n * Reverts last dashboard children change.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState {\n return this.caretaker.undo();\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState {\n return this.caretaker.redo();\n }\n /**\n * Resets dashboard children state to initial one and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset(): DashboardChildrenState {\n return this.caretaker.reset();\n }\n}\n","import {\n Component,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ActionBarService,\n AlertService,\n BreadcrumbItem,\n CopyDashboardDisabledReason,\n DashboardChange,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardCopyPermission,\n DynamicComponentDefinition,\n GainsightService,\n gettext,\n memoize,\n ModalService,\n RevertChangeType,\n Status,\n Widget,\n WidgetChange,\n WidgetsDashboardComponent\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, every, findIndex, kebabCase, keyBy, omit, some } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n CanDeactivateComponent,\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n DASHBOARD_CHILDREN_STATE_NAME,\n DashboardChildrenState,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetService } from './widget.service';\nimport { DashboardEditModeService } from './memento/dashboard-edit-mode.service';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * The context dashboard is a dashboard which resolves it data from the current context (device or group)\n * it is displayed on. It usually uses the route.data for it, but you can pass\n * a different managedObject to the [mo] input parameter to change that behavior.\n */\n@Component({\n selector: 'c8y-context-dashboard',\n templateUrl: './context-dashboard.component.html',\n host: {\n style: `\n display: block;\n `,\n class: 'dashboard c8y-grid-dashboard'\n }\n})\nexport class ContextDashboardComponent implements OnInit, OnDestroy, CanDeactivateComponent {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle = false;\n\n @Input()\n defaultWidgets: Widget[] = [];\n @Input('canCopy')\n _canCopy = true;\n @Input()\n canDelete = true;\n @Input()\n isLoading = true;\n @Input()\n breadcrumbSettings: BreadcrumbItem;\n @Input()\n showContextHelpButton = true;\n /** Whether to translate widget titles. However, dashboard's own setting takes precedence. It does not override dashboard's setting */\n @Input() translateWidgetTitle: boolean;\n /**\n * Hides dashboard availability selection.\n */\n @Input()\n hideAvailability = false;\n\n @HostBinding('class')\n class = '';\n\n @ViewChild(DashboardDetailComponent, { static: true }) dashboardDetails: DashboardDetailComponent;\n @ViewChild(WidgetsDashboardComponent, { static: true })\n widgetsDashboard: WidgetsDashboardComponent;\n\n get disabled(): boolean {\n return !this.hasPermissionToEditDashboard || !this.dashboardDetails?.isCollapsed;\n }\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n title: string;\n isCopyDisabled: DashboardCopyPermission;\n isReport: boolean;\n canCopy = true;\n readonly dashboardTypeLabel = gettext('Dashboard for \"{{ dashboardType }}\"');\n readonly dashboardTypePopover = gettext(`\n The layout and configuration of this dashboard is used by all other assets of model type\n <strong>{{ dashboardType }}</strong>. Any changes made to this dashboard instance will be applied to all\n other instances.`);\n private dataSub: Subscription;\n private hasPermissionToEditDashboard = false;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private alert: AlertService,\n private renderer: Renderer2,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig,\n private widgetService: WidgetService,\n private bsModal: BsModalService,\n private gainsightService: GainsightService,\n private actionBarService: ActionBarService,\n private translateService: TranslateService,\n private modal: ModalService,\n public editModeService: DashboardEditModeService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\n }\n\n @HostListener('window:beforeunload', ['$event'])\n async beforeUnloadHandler($event: BeforeUnloadEvent) {\n const canDeactivate = await this.canDeactivate(true);\n if (!canDeactivate) {\n $event.returnValue = true;\n }\n }\n\n /**\n * Applies the current context to the widget\n * @param widget The widget to apply the context to.\n */\n applyDeviceTarget(widget) {\n if (widget.config.device) {\n widget.config.device = { id: this.context.id, name: this.context.name };\n }\n }\n\n /**\n * Removes the route listener.\n */\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n /**\n * Guards component from unintended navigation away or closing tab without saving changes.\n * Navigation continues if true is returned, and navigation is cancelled if returned value is false.\n * @param omitConfirm Omits confirm calls inside method body (without this param, when method is used in\n * on 'beforeunload' event handler, error is thrown in console because confirm is blocked by browser anyway and returns false)\n */\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n const canDeactivate =\n (await this.dashboardDetails.canDeactivate(omitConfirm)) &&\n (await this.widgetsDashboard.canDeactivate(omitConfirm));\n\n // Needed in order to reset edit mode, otherwise when switching between dashboards, the edit mode is still enabled.\n if (canDeactivate) {\n await this.cancelEditMode(true);\n }\n return canDeactivate;\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n const mesg = gettext(\n 'You are about to reset the widgets of this dashboard. All changes to the dashboard widgets will get lost and cannot be recovered. Do you want to proceed?'\n );\n\n try {\n await this.modal.confirm(gettext('Reset widgets'), mesg, Status.WARNING, {\n ok: gettext('Reset`dashboard`'),\n cancel: gettext('Cancel')\n });\n\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n this.mo.c8y_Dashboard.historyDescription = { changeType: 'reset' };\n await this.contextDashboardService.update(this.mo);\n await this.onLoad();\n } catch (error) {\n if (error) {\n this.alert.addServerFailure(error);\n }\n } finally {\n this.isLoading = false;\n }\n }\n /**\n * Method called on every widgets dimensions or position change but also for adding new widget (because adding\n * widget causes layout changes). It recognizes what type of change has been done and updates current widgets state\n * accordingly.\n * @param child Change object.\n */\n positionOrWidgetDimensionChange(child: DashboardChildChange | DashboardChange): void {\n const currentState = this.editModeService.getCurrentState()?.children || {};\n const descriptionProp: keyof DashboardHistoryDescription['widgetChanges'] =\n child.children.length === Object.values(currentState).length ? 'arrangement' : 'added';\n let changeName: DashboardChildrenState['name'];\n let widgetsChanged: Widget[];\n if (descriptionProp === 'added') {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.added;\n const addedWidget = child.children.find(c => !currentState[c.data.id]);\n widgetsChanged = [addedWidget.data];\n } else {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.arrangement;\n widgetsChanged = child.children\n .map(c => {\n const lastStateChild = currentState[c.data.id];\n if (\n c.x != lastStateChild._x ||\n c.y != lastStateChild._y ||\n c.width != lastStateChild._width ||\n c.height != lastStateChild._height\n ) {\n return c.data;\n }\n })\n .filter(Boolean);\n }\n\n this.updateDashboardChildren(child, changeName, descriptionProp, widgetsChanged);\n }\n\n async revertChange(revertType: RevertChangeType): Promise<void> {\n let dashboardChildren: ContextDashboard['children'];\n if (revertType === 'undo') {\n dashboardChildren = this.editModeService.undo().children;\n } else {\n dashboardChildren = this.editModeService.redo().children;\n }\n await this.setWidgets(dashboardChildren);\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n * @param changeName Name of the change to indicate it on undo/redo button.\n * @param descriptionProp Property to add to dashboard change history.\n * @param widgetsChanged List of changed widgets.\n */\n updateDashboardChildren(\n child: DashboardChildChange | DashboardChange,\n changeName: DashboardChildrenState['name'],\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const { children } = child;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n this.setNewState(\n { name: changeName, children: mappedChildren },\n descriptionProp,\n widgetsChanged\n );\n }\n\n /**\n * Copies the dashboard and current context to a clipboard.\n */\n async copyDashboard() {\n const viewContext = this.route.parent.snapshot.data?.context;\n\n this.contextDashboardService.copyClipboard = {\n dashboardId: this.mo.id,\n dashboard: cloneDeep(this.mo.c8y_Dashboard),\n context: cloneDeep({ context: viewContext, contextData: this.context })\n };\n\n if (viewContext) {\n const ctx = viewContext.split('/').shift();\n const msg = this.translateService.instant(\n 'Dashboard copied. Navigate to the desired {{ ctx }} and select \"Paste dashboard\"',\n { ctx }\n );\n this.alert.success(msg);\n }\n this.actionBarService.refresh();\n }\n\n /**\n * Remove the complete dashboard and navigate away.\n */\n async deleteDashboard() {\n await this.contextDashboardService.delete(this.mo);\n if (this.route.parent) {\n const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');\n this.router.navigateByUrl(route);\n }\n await this.onDeleteGSEvent();\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.dashboard?.deviceType;\n }\n\n /**\n * Edits a widget on the dashboard.\n * @param change The widget change event.\n */\n async editWidget(change: WidgetChange) {\n const { x, y, width, height } = change.source;\n const component = await this.widgetService.getWidgetDefinition(\n change.widget.name || change.widget.componentId\n );\n if (!component) {\n this.addWidget();\n return;\n }\n await this.addWidget({\n ...component,\n data: { ...component.data, ...change.widget, _x: x, _y: y, _width: width, _height: height }\n });\n }\n\n /**\n * Adds a widget to the dashboard.\n * @param selected Define a selected component to switch to edit mode directly.\n */\n async addWidget(selected?: DynamicComponentDefinition) {\n const partialCloneSelected = selected\n ? { ...selected, data: cloneDeep(selected.data) }\n : selected;\n\n const activeContext = this.context.contextData ? this.context.contextData : this.context;\n const initialState: Partial<WidgetConfigComponent> = {\n mo: this.mo,\n context: this.context.c8y_Report ? {} : activeContext,\n selected: partialCloneSelected\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState,\n ignoreBackdropClick: true,\n keyboard: false\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n // New state in edit mode is added only for widget update. When adding widget, layout change is always triggered,\n // so it's easier to set new state on layout change only\n if (selected) {\n const children = {\n ...this.editModeService.getCurrentState().children,\n [newWidget.id]: newWidget\n };\n this.setNewState({ name: DASHBOARD_CHILDREN_STATE_NAME.config, children }, 'config', [\n newWidget\n ]);\n }\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n async saveWidgetsToDashboard() {\n const currentState = this.editModeService.getCurrentState();\n this.mo.c8y_Dashboard.children = currentState.children;\n\n this.mo.c8y_Dashboard.historyDescription = {\n changeType: 'update',\n widgetChanges: this.mapStateToHistoryDescription(currentState.changeHistory)\n };\n await this.contextDashboardService.update(this.mo);\n this.editModeService.reset();\n this.editModeService.init({\n name: DASHBOARD_CHILDREN_STATE_NAME.initial,\n children: this.mo.c8y_Dashboard.children,\n changeHistory: {}\n });\n\n this.isCopyDisabled = this.getDashboardCopyPermissionState();\n }\n\n async cancelEditMode(onDeactivate = false): Promise<void> {\n const dashboardChildren = this.editModeService.reset();\n if (this.dashboard) {\n this.dashboard.historyDescription = {};\n }\n this.widgetsDashboard.editMode$.next(false);\n if (!onDeactivate) {\n // when setWidgets is called during navigation from device to device, navigation fails\n await this.setWidgets(dashboardChildren.children);\n }\n }\n\n /**\n * Updates a widget or adds a new one if it doesn't exist on\n * the dashboard.\n * @param widget The new widget\n */\n async updateWidget(widget) {\n const index = findIndex(this.widgets, { id: widget.id });\n const isNew = index === -1;\n const mappedWidget = await this.widgetService.mapLegacy(widget);\n if (isNew) {\n this.widgets.push(mappedWidget);\n } else {\n this.widgets.splice(index, 1, mappedWidget);\n }\n }\n\n /**\n * Removes a widget and rearranges the remaining ones\n * if necessary.\n * @param change The change event.\n */\n async deleteWidget(change: WidgetChange) {\n try {\n const { widget, source } = change;\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n const { dashboard } = source;\n dashboard.children = dashboard.children.filter(c => c.data.id !== widget.id);\n\n // using setTimeout to give the component the chance to remove it.\n const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));\n await sleep(0);\n\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child, DASHBOARD_CHILDREN_STATE_NAME.removed, 'removed', [\n widget\n ]);\n } catch (e) {\n this.alert.addServerFailure(e);\n }\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n addDashboardClassToBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.addClass(document.body, cssClass);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n removeDashboardClassFromBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.removeClass(document.body, cssClass);\n });\n }\n\n async onLoad(trackExperience?: boolean) {\n this.hasPermissionToEditDashboard =\n this.dashboard && !this.dashboard.isTransient\n ? await this.contextDashboardService.canEditDashboard(this.mo)\n : false;\n this.canCopy =\n this._canCopy &&\n !this.dashboard?.isTransient &&\n (this.contextDashboardService.isDeviceDashboard(this.mo) ||\n this.contextDashboardService.isDeviceType(this.mo) ||\n this.contextDashboardService.isGroupDashboard(this.mo));\n const dashboardChildren: ContextDashboard['children'] = cloneDeep(\n this.mo.c8y_Dashboard?.children\n );\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard?.classes\n };\n this.isCopyDisabled = this.dashboard\n ? this.getDashboardCopyPermissionState()\n : { state: false, reason: null };\n this.editModeService.init({\n name: gettext('Initial state'),\n children: dashboardChildren,\n changeHistory: {}\n });\n\n await this.setWidgets(dashboardChildren, trackExperience);\n this.class = Object.keys(dashboardClasses).join(' ');\n if (this.isReport) {\n this.addReportDashboardSettings();\n }\n this.isLoading = false;\n\n if (!this.dashboard) {\n this.dashboardDetails.show(false);\n } else {\n await this.onLoadGSEvent();\n }\n }\n\n async dashboardPreview(layoutChanges: ContextDashboard) {\n if (layoutChanges?.classes) {\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...layoutChanges.classes\n };\n this.class = Object.keys(dashboardClasses).join(' ');\n } else if (this.dashboard) {\n this.dashboard.widgetClasses = {\n ...this.dashboard.widgetClasses,\n ...layoutChanges.widgetClasses\n };\n }\n }\n\n async reloadDashboard(dashboardMo: ContextDashboardManagedObject) {\n this.dashboard = dashboardMo.c8y_Dashboard;\n this.mo = dashboardMo;\n await this.onLoad();\n }\n\n private async setWidgets(\n dashboardChildren: ContextDashboard['children'],\n trackExperience = false\n ): Promise<void> {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n this.widgets = await Promise.all<Widget>(\n Object.values(dashboardChildren || {}).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n if (trackExperience) {\n this.gainsightService.triggerEvent('loadWidget', {\n widgetName: widget.componentId || widget.name\n });\n }\n return this.widgetService.mapLegacy(widget);\n })\n );\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard, isReport }) => {\n this.context = this.route.parent.snapshot.data.contextData || {};\n this.title = this.context?.name;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.isReport = isReport || this.contextDashboardService.isReport(this.mo);\n if (this.isReport && this.dashboard && !this.dashboard?.name) {\n this.dashboard.name = this.title;\n }\n if (this.isReport && this.dashboard) {\n this.dashboard.c8y_IsNavigatorNode = this.context.c8y_IsNavigatorNode;\n }\n this.patchSensorPhoneDashboard(this.dashboard, this.mo.owner, this.context?.type);\n this.onLoad(true);\n });\n }\n\n /**\n * To enable translation for widgets within the dashboard, the \"translateWidgetTitle\" flag must be enabled.\n * The property needs to be patched, as the \"Sensor App\" does not provide this setting.\n */\n private patchSensorPhoneDashboard(dashboard: ContextDashboard, owner: string, type: string) {\n if (type === 'c8y_SensorPhone' && owner?.includes('device_phone')) {\n dashboard.translateWidgetTitle = true;\n }\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(this.name, this.defaultWidgets, this.context)\n .subscribe(mo => {\n this.context = this.context || {};\n this.mo = mo;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad(true);\n });\n }\n\n private mergeWidgetClasses(widget: Widget): Record<string, boolean> {\n const hasHeaderClass = WIDGET_HEADER_CLASSES.find(\n el => widget.classes && widget.classes[el.class]\n );\n const widgetClasses = hasHeaderClass\n ? { ...widget.classes }\n : { ...this.dashboard.widgetClasses, ...widget.classes };\n return {\n card: true,\n 'card-dashboard': true,\n [kebabCase(widget.componentId || widget.name)]: true,\n ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({ _x: child.x, _y: child.y, _width: child.width, _height: child.height } as Widget)\n };\n }\n\n private addReportDashboardSettings() {\n this.setTitle = true;\n this.title = this.context?.name || gettext('New report');\n this.breadcrumbSettings = { icon: 'th', label: 'Reports', path: 'reports' };\n this.canDelete = false;\n }\n\n private getDashboardCopyPermissionState(): DashboardCopyPermission {\n if (!this.contextDashboardService.hasPermissionsToCopyDashboard()) {\n return { state: false, reason: CopyDashboardDisabledReason.PERMISSIONS };\n }\n const allDashboardChildrenAreValid = every(this.mo.c8y_Dashboard.children, child => {\n const config = child.config || {};\n const dataPoints = config.datapoints || [];\n return !(\n (config.device && config.device.id !== this.context.id) ||\n some(dataPoints, dataPoint => dataPoint.__target?.id !== this.context.id)\n );\n });\n if (!allDashboardChildrenAreValid) {\n return { state: false, reason: CopyDashboardDisabledReason.WRONG_REFERENCE };\n }\n return { state: true };\n }\n\n private setNewState(\n state: Pick<DashboardChildrenState, 'name' | 'children'>,\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const description = this.getDescriptionForNewState(descriptionProp, widgetsChanged);\n this.editModeService.newState({ ...state, changeHistory: description });\n }\n\n private getDescriptionForNewState(\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): DashboardChildrenState['changeHistory'] {\n const changeHistory = this.editModeService.getCurrentState().changeHistory;\n if (!changeHistory[descriptionProp]) {\n changeHistory[descriptionProp] = {};\n }\n widgetsChanged.forEach(w => {\n if (descriptionProp === 'removed' && changeHistory.added?.[w.id]) {\n // if widget was added during current edit session and then removed, it should not be at description at all\n delete changeHistory.added[w.id];\n if (changeHistory.config?.[w.id]) {\n delete changeHistory.config[w.id];\n }\n if (changeHistory.arrangement?.[w.id]) {\n delete changeHistory?.arrangement[w.id];\n }\n } else if (\n (descriptionProp === 'config' || descriptionProp === 'arrangement') &&\n changeHistory.added?.[w.id]\n ) {\n // if widget was added and then modified in current edit session, it should only be indicated as added\n } else {\n changeHistory[descriptionProp][w.id] = w;\n }\n });\n\n return changeHistory;\n }\n\n private mapStateToHistoryDescription(\n description: DashboardChildrenState['changeHistory']\n ): DashboardHistoryDescription['widgetChanges'] {\n const historyDescription: DashboardHistoryDescription['widgetChanges'] = {};\n for (const [key, value] of Object.entries(description)) {\n const widgets = Object.values(value);\n if (!widgets.length) {\n continue;\n }\n historyDescription[key] = Object.values(value).map(widget => widget.title);\n }\n return historyDescription;\n }\n\n private async onDeleteGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DELETE_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.DELETE,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(this.context)\n });\n }\n\n private async onLoadGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName =\n (await this.convertStringToHash(this.dashboard?.name)) ??\n this.extractDefaultDashboardName(this.mo) ??\n 'none';\n\n this.gainsightService.triggerEvent(\n this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS\n : PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS,\n {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_VIEW,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.LOAD,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id\n ? `${this.context.id}_${this.mo.id}`\n : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n : this.contextDashboardService.getContextForGS(this.context)\n }\n );\n }\n\n private extractDefaultDashboardName(obj: IManagedObject): string | null {\n const nameKey = Object.keys(obj).find(key => key.startsWith('c8y_Dashboard!name!'));\n if (nameKey) {\n return nameKey.split('!').pop();\n }\n return null;\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : this.gainsightService.hashGroupName(str);\n }\n}\n","<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n","import { Component, Inject, Optional, ViewChild } from '@angular/core';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport {\n CockpitDashboardConfig,\n COCKPIT_HOME_DASHBOARD_CONFIG,\n DEFAULT_COCKPIT_HOME_WIDGETS\n} from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent implements CanDeactivateComponent {\n defaultWidgets = DEFAULT_COCKPIT_HOME_WIDGETS;\n dashboardName = 'home-cockpit1';\n pageTitle: string = gettext('Home');\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(\n private appState: AppStateService,\n @Optional()\n @Inject(COCKPIT_HOME_DASHBOARD_CONFIG)\n private homeDashboardConfig: CockpitDashboardConfig\n ) {\n const config = {\n ...this.homeDashboardConfig,\n dashboardName: appState.currentApplication.value?.config?.homeDashboardName,\n userSpecific: appState.currentApplication.value?.config?.userSpecificHomeDashboard\n };\n this.applyDashboardConfig(config);\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard.canDeactivate();\n }\n\n private applyDashboardConfig(config: CockpitDashboardConfig) {\n if (!config) {\n return;\n }\n\n if (config.dashboardName) {\n this.dashboardName = config.dashboardName;\n }\n\n if (config.defaultWidgets) {\n this.defaultWidgets = config.defaultWidgets;\n }\n\n if (config.userSpecific && this.appState.currentUser.value) {\n this.dashboardName = `${this.appState.currentUser.value.userName.replace(/\\./g, '__')}_${\n this.dashboardName\n }`;\n }\n\n if (config.pageTitle) {\n this.pageTitle = config.pageTitle;\n }\n }\n}\n","<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { Component, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { gettext, ViewContext } from '@c8y/ngx-components';\nimport { DashboardContext } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-paste-dashboard-action',\n template: `\n <ng-template #templatePaste>\n <li>\n <button\n class=\"btn btn-link\"\n title=\"{{ buttonTitle | translate }}\"\n type=\"button\"\n (click)=\"pasteDashboard()\"\n [disabled]=\"pasteDisabled\"\n >\n <i class=\"m-r-4\" c8yIcon=\"clipboard\"></i>\n <span ngNonBindable translate [translateParams]=\"{ dashboardName: dashboardName }\">\n Paste dashboard \"{{ dashboardName }}\"\n </span>\n </button>\n </li>\n </ng-template>\n `\n})\nexport class PasteDashboardActionComponent implements OnInit {\n pasteDisabled = false;\n @ViewChild('templatePaste', { read: TemplateRef, static: true }) templatePaste;\n dashboardName = '';\n buttonTitle: string;\n private currentViewContext: ViewContext;\n private currentUrl: string;\n private contextMO: IManagedObject;\n private contextId: string;\n\n constructor(\n private vcRef: ViewContainerRef,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private inventoryService: InventoryService\n ) {}\n\n async ngOnInit() {\n this.currentUrl = this.router.url;\n this.contextId = this.currentUrl.match(/\\d+/)[0];\n\n const isDevice: boolean = new RegExp(/device\\/\\d+/).test(this.currentUrl);\n const isGroup: boolean = new RegExp(/group\\/\\d+/).test(this.currentUrl);\n this.currentViewContext = isDevice ? ViewContext.Device : isGroup ? ViewContext.Group : null;\n await this.checkIfPasteIsAllowed();\n\n this.vcRef.createEmbeddedView(this.templatePaste);\n const clipboard = this.contextDashboardService.copyClipboard;\n if (clipboard) {\n this.dashboardName = clipboard.dashboard.name;\n }\n }\n\n async pasteDashboard() {\n if (!this.contextMO) {\n this.contextMO = await this.getContextMo(this.contextId);\n }\n const context: DashboardContext = {\n context: this.currentViewContext,\n contextData: this.contextMO\n };\n\n await this.contextDashboardService.pasteDashboard(context);\n }\n\n private async getContextMo(id: string): Promise<IManagedObject> {\n return (await this.inventoryService.detail(id)).data;\n }\n\n private async checkIfPasteIsAllowed(): Promise<void> {\n const clipboardViewContext = this.contextDashboardService.copyClipboard.context.context;\n const isTypeDashboard = this.contextDashboardService.copyClipboard?.dashboard?.deviceType;\n\n if (this.currentViewContext !== clipboardViewContext) {\n if (clipboardViewContext === ViewContext.Device) {\n this.buttonTitle = gettext('Device dashboards can only be copied into a device.');\n } else if (clipboardViewContext === ViewContext.Group) {\n this.buttonTitle = gettext('Group dashboards can only be copied into a group.');\n }\n this.pasteDisabled = true;\n return;\n } else if (isTypeDashboard) {\n this.contextMO = await this.getContextMo(this.contextId);\n const dashboardDeviceType =\n this.contextDashboardService.copyClipboard.dashboard.deviceTypeValue;\n if (dashboardDeviceType === this.contextMO.type) {\n this.buttonTitle = gettext(\n 'Dashboard template can only be copied into assets of a different type.'\n );\n this.pasteDisabled = true;\n return;\n }\n }\n\n this.buttonTitle = gettext('Paste dashboard');\n this.pasteDisabled = false;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ViewContext, ActionBarFactory, ActionBarItem } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\n\nexport abstract class DashboardActionBarFactory implements ActionBarFactory {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n routeChanges$: Observable<any>;\n\n private contextDashboardService = inject(ContextDashboardService);\n\n get(activeRoute: ActivatedRoute) {\n const actions = [];\n const data =\n !activeRoute.parent || activeRoute.snapshot.data.context\n ? activeRoute.snapshot.data\n : activeRoute.parent.snapshot.data;\n const { contextData } = data;\n const canPaste =\n contextData &&\n data.context === this.targetContext &&\n this.contextDashboardService.copyClipboard;\n\n if (canPaste) {\n actions.push({\n priority: -10,\n placement: 'more',\n template: PasteDashboardActionComponent\n } as ActionBarItem);\n }\n\n return actions;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n CoreModule,\n hookActionBar,\n HookProviderTypes,\n hookRoute,\n hookTab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport { AddDashboardComponent } from './add-dashboard.component';\nimport { AddDeviceDashboardFactory, AddGroupDashboardFactory } from './add-dashboard.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport {\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboardConfig,\n CanDeactivateComponent\n} from './context-dashboard.model';\nimport {\n DeviceDashboardActionBarFactory,\n GroupDashboardActionBarFactory\n} from './dashboard-action-bar.factory';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\nimport { DashboardAvailabilityComponent } from './dashboard-availability.component';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { NewDashboardGuard, newDashboardTab } from './new-dashboard.guard';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { DashboardGeneralSettingsComponent } from './dashboard-settings/dashboard-general-settings.component';\nimport { DashboardAppearanceSettingsComponent } from './dashboard-settings/dashboard-appearance-settings.component';\nimport { DashboardVersionHistoryComponent } from './dashboard-settings/dashboard-version-history.component';\nimport { TypedDashboardSettingsComponent } from './dashboard-settings/typed-dashboard-settings.component';\nimport { TypeDashboardInfoComponent } from './type-dashboard-info/type-dashboard-info.component';\n\nconst defaultConfig = {\n allowFullscreen: true\n} as const satisfies ContextDashboardConfig;\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent,\n AddDashboardComponent,\n PasteDashboardActionComponent,\n DashboardAvailabilityComponent,\n DashboardGeneralSettingsComponent,\n DashboardAppearanceSettingsComponent,\n DashboardVersionHistoryComponent,\n TypedDashboardSettingsComponent,\n TypeDashboardInfoComponent\n ],\n imports: [\n CoreModule,\n TooltipModule,\n PopoverModule,\n AssetSelectorModule,\n IconSelectorModule,\n BsDropdownModule.forRoot(),\n CollapseModule.forRoot()\n ],\n exports: [\n ContextDashboardComponent,\n WidgetConfigComponent,\n DashboardDetailComponent,\n TypeDashboardInfoComponent\n ],\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: defaultConfig\n }\n ]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders<ContextDashboardModule> {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n hookRoute(config.routes || [])\n ]\n };\n }\n}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n }\n ]),\n hookTab(AddDeviceDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(DeviceDashboardActionBarFactory)\n ]\n})\nexport class DeviceContextDashboardModule {}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n }\n ]),\n hookTab(AddGroupDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(GroupDashboardActionBarFactory)\n ]\n})\nexport class GroupContextDashboardModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n ContextDashboardModule,\n DeviceContextDashboardModule,\n GroupContextDashboardModule\n} from '../context-dashboard.module';\nimport { hookNavigator, gettext, CoreModule, hookRoute } from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { CockpitDashboardConfig, COCKPIT_HOME_DASHBOARD_CONFIG } from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n imports: [CoreModule, ContextDashboardModule],\n declarations: [CockpitDashboardComponent],\n providers: [\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }),\n hookRoute({\n path: '',\n component: CockpitDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class CockpitHomeDashboardModule {}\n\n@NgModule({\n imports: [CockpitHomeDashboardModule, DeviceContextDashboardModule, GroupContextDashboardModule]\n})\nexport class CockpitDashboardModule {\n static config(config: CockpitDashboardConfig = {}): ModuleWithProviders<CockpitDashboardModule> {\n return {\n ngModule: CockpitDashboardModule,\n providers: [\n {\n provide: COCKPIT_HOME_DASHBOARD_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { ContextData, gettext, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { from, Subscription } from 'rxjs';\nimport { map, mergeMap, tap, toArray } from 'rxjs/operators';\nimport { WidgetService } from '../widget.service';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-info-dashboard-dashboard',\n templateUrl: './device-info-dashboard.component.html'\n})\nexport class DeviceInfoDashboardComponent implements CanDeactivateComponent {\n isLoading = true;\n title: string;\n dashboardName = '';\n widgetsList: Widget[];\n currentContext: ContextData;\n contextSubscription: Subscription;\n widgetsSubscription: Subscription;\n @ViewChild(ContextDashboardComponent, { static: false })\n contextDashboard: ContextDashboardComponent;\n\n DEVICE_INFO_WIDGETS = [\n {\n name: 'deviceStatusWidget',\n title: gettext('Device status'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 8\n },\n {\n name: 'Data points graph',\n title: gettext('Device and communication'),\n _x: 8,\n _y: 0,\n _height: 5,\n _width: 16,\n config: {\n interval: 'hours',\n aggregation: 'NONE',\n realtime: true,\n datapointsInitialDisplayLimit: 3,\n datapoints: [\n {\n fragment: 'c8y_Battery',\n series: 'level',\n label: this.translateService.instant('Battery: level'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#5e07b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'rssi',\n label: this.translateService.instant('Signal: RSSI'),\n unit: 'dBm',\n renderType: 'min',\n lineType: 'line',\n color: '#a7d0f1',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Used',\n label: this.translateService.instant('Memory: used'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#f75229',\n __active: true\n },\n {\n fragment: 'c8y_CPUMeasurement',\n series: 'Workload',\n label: this.translateService.instant('CPU: workload'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#b24f3e',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Upload',\n label: this.translateService.instant('Network: upload'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#88c039',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RCSP',\n label: this.translateService.instant('Signal: RCSP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSCP',\n label: this.translateService.instant('Signal: RSCP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRP',\n label: this.translateService.instant('Signal: RSRP'),\n renderType: 'min',\n lineType: 'line',\n color: '#43ba3b',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRQ',\n label: this.translateService.instant('Signal: RSRQ'),\n renderType: 'min',\n lineType: 'line',\n color: '#14b0b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ber',\n label: this.translateService.instant('Signal: BER'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#44ff33',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ECN0',\n label: this.translateService.instant('Signal: ECN0'),\n renderType: 'min',\n lineType: 'line',\n color: '#873efa',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Download',\n label: this.translateService.instant('Network: download'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#f27a45',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Total',\n label: this.translateService.instant('Memory: total'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#dadd8c',\n __active: true\n }\n ],\n alarmsEventsConfigs: [\n {\n label: 'c8y_LocationUpdate',\n timelineType: 'EVENT',\n color: '#6f6cd0',\n filters: {\n type: 'c8y_LocationUpdate'\n },\n __active: true\n },\n {\n label: 'c8y_UnavailabilityAlarm',\n timelineType: 'ALARM',\n color: '#375bf2',\n filters: {\n type: 'c8y_UnavailabilityAlarm'\n },\n __active: true\n }\n ]\n }\n },\n {\n name: 'Asset Properties',\n title: gettext('Device data'),\n config: {\n options: {\n properties: [\n {\n id: 'c8ySchema!!id',\n __active: true,\n keyPath: ['id'],\n type: 'string',\n label: 'ID'\n },\n {\n id: 'c8ySchema!!name',\n __active: true,\n keyPath: ['name'],\n type: 'string',\n label: 'Name'\n },\n {\n id: 'c8ySchema!!type',\n __active: true,\n keyPath: ['type'],\n type: 'string',\n label: 'Type'\n },\n {\n id: 'c8ySchema!!lastUpdated',\n __active: true,\n keyPath: ['lastUpdated'],\n type: 'string',\n label: 'Last Updated'\n },\n {\n id: 'c8ySchema!!creationTime',\n __active: true,\n keyPath: ['creationTime'],\n type: 'string',\n label: 'Creation Time'\n }\n ],\n allowDisplayAndEditKnownProperties: false,\n hiddenPropertiesKeyPaths: ['owner']\n }\n },\n _x: 0,\n _y: 5,\n _height: 8,\n _width: 8\n },\n {\n name: 'Alarm list',\n title: gettext('Active, critical alarms'),\n _x: 8,\n _y: 5,\n _height: 4,\n _width: 8,\n config: {\n options: {\n orderMode: 'ACTIVE_FIRST',\n severity: { CRITICAL: true },\n status: {\n ACTIVE: true,\n ACKNOWLEDGED: false,\n CLEARED: false\n },\n types: []\n }\n }\n },\n {\n name: 'deviceGroupAssignmentWidget',\n title: gettext('Group assignment'),\n _x: 16,\n _y: 5,\n _height: 4,\n _width: 8\n },\n {\n componentId: 'Map',\n title: gettext('Location'),\n _x: 8,\n _y: 9,\n _height: 4,\n _width: 16\n }\n ] as Widget[];\n\n constructor(\n private router: ActivatedRoute,\n private widgetService: WidgetService,\n private translateService: TranslateService,\n private inventoryService: InventoryService\n ) {}\n\n ngOnInit() {\n this.contextSubscription = this.router.parent.data\n .pipe(\n tap(({ contextData }) => {\n const contextNameValid = contextData.name && contextData.name.trim();\n this.title = contextNameValid ? contextData.name : contextData.id;\n this.dashboardName = `${contextData.id}-device-info`;\n })\n )\n .subscribe(async data => {\n this.currentContext = data as ContextData;\n this.addDeviceTargetForDP(data.contextData.id, data.contextData.name);\n });\n\n this.widgetsSubscription = from(this.DEVICE_INFO_WIDGETS)\n .pipe(\n mergeMap(widget => this.widgetService.mapLegacy(widget)),\n map(widget => {\n let device = this.router.parent.snapshot.data.contextData;\n if (device) {\n device = {\n name: device.name,\n id: device.id\n };\n }\n return {\n ...widget,\n config: {\n ...widget.config,\n device\n }\n };\n }),\n toArray()\n )\n .subscribe(async data => {\n await this.filterSupportedSeriesForDP(this.currentContext.contextData.id, data);\n this.widgetsList = data;\n this.isLoading = false;\n });\n }\n\n addDeviceTargetForDP(id: string | number, name: string) {\n const dpWidget = this.DEVICE_INFO_WIDGETS.filter(item => item.name == 'Data points graph')[0];\n // Add target to dataPoint config\n dpWidget.config.datapoints.map(item => (item['__target'] = { id, name }));\n // Add target to alarmEvents Config\n dpWidget.config.alarmsEventsConfigs.map(item => (item['__target'] = { id, name }));\n }\n\n async filterSupportedSeriesForDP(id: string | number, widgets: Widget[]) {\n const supportedMeasurements = await this.inventoryService.getMeasurementsAndSeries(id);\n const isDataPointSupported = dp =>\n supportedMeasurements.some(\n ({ fragment, series }) => dp.fragment === fragment && dp.series === series\n );\n const dpWidget = widgets.find(({ name }) => name === 'Data points graph');\n dpWidget.config.datapoints = dpWidget.config.datapoints.filter(isDataPointSupported);\n }\n\n ngOnDestroy() {\n this.widgetsSubscription.unsubscribe();\n this.contextSubscription.unsubscribe();\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n [canCopy]=\"false\"\n ></c8y-context-dashboard>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, hookRoute, ViewContext, gettext } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceInfoDashboardComponent } from './device-info-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceInfoDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n context: ViewContext.Device,\n path: 'device-info',\n component: DeviceInfoDashboardComponent,\n label: gettext('Info'),\n priority: 10000,\n icon: 'asterisk',\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class DeviceInfoDashboardModule {}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { WidgetService } from '../widget.service';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-management-home-dashboard',\n templateUrl: './device-management-home-dashboard.component.html'\n})\nexport class DeviceManagementHomeDashboardComponent implements OnInit, CanDeactivateComponent {\n widgets = [];\n dashboardName = 'home-dm1';\n defaultWidgets = [\n {\n name: 'devicemanagement.welcome.widget',\n title: gettext('Quick links'),\n _x: 0,\n _y: 0,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 12,\n _y: 0,\n _height: 4,\n _width: 12\n }\n ] as Widget[];\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(private widgetService: WidgetService) {}\n\n ngOnInit() {\n this.defaultWidgets.map(async widget => {\n await this.widgetService\n .mapLegacy(widget)\n .then(transformedWidget => this.widgets.push(transformedWidget));\n });\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, gettext, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceManagementHomeDashboardComponent } from './device-management-home-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceManagementHomeDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n path: '',\n component: DeviceManagementHomeDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n }),\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' })\n ]\n})\nexport class DeviceManagementHomeDashboardModule {}\n","import { Injectable } from '@angular/core';\nimport { TabFactory, Tab, gettext } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class DashboardManagerTabsFactory implements TabFactory {\n constructor(public router: Router) {}\n\n get() {\n const tabs: Tab[] = [];\n\n if (this.router.url.match(/\\/dashboard-manager/g)) {\n tabs.push({\n path: 'dashboard-manager/type-dashboards',\n priority: 1000,\n label: gettext('Type dashboards')\n } as Tab);\n }\n\n return tabs;\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class DeviceTypeValueGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'deviceTypeValue';\n this.path = 'c8y_Dashboard.deviceTypeValue';\n this.header = gettext('Target asset model');\n\n this.filterable = true;\n this.sortable = false;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'deviceTypeValues',\n label: gettext('Filter dashboards by target asset model'),\n addText: gettext('Add next`target asset model`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'c8y_MQTTDevice'\n }),\n getFilter: (model: any): any => {\n const filter: any = {};\n if (model.deviceTypeValues.length) {\n filter[this.path] = { __in: model.deviceTypeValues };\n }\n return filter;\n }\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n Column,\n DataGridService,\n gettext,\n ModalService,\n Pagination,\n Status,\n UserPreferencesService\n} from '@c8y/ngx-components';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceTypeValueGridColumn } from './type-dashboards-list/device-type-value.grid-column';\nimport { TypeDashboardFilter } from './dashboard-manager.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardManagerService extends DataGridService {\n queriesUtil: QueriesUtil;\n baseQuery = {\n __filter: {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { __has: 'c8y_Dashboard.deviceTypeValue' }\n ]\n }\n };\n private TYPE_DASHBOARDS_QUERY =\n '$filter=((c8y_Dashboard.deviceType eq true) and (has(c8y_Dashboard.deviceTypeValue)))';\n constructor(\n protected inventory: InventoryService,\n protected userPreferencesService: UserPreferencesService,\n protected modal: ModalService,\n protected translateService: TranslateService\n ) {\n super(userPreferencesService);\n }\n\n getColumns(): Column[] {\n return [\n {\n name: 'icon',\n header: gettext('Icon'),\n path: 'c8y_Dashboard.icon',\n sortable: false,\n gridTrackSize: '45px'\n },\n {\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n sortable: false,\n gridTrackSize: '200px'\n },\n {\n name: 'description',\n header: gettext('Description'),\n path: 'c8y_Dashboard.description',\n sortable: false\n },\n new DeviceTypeValueGridColumn(),\n {\n name: 'lastUpdated',\n header: gettext('Last update'),\n path: 'lastUpdated',\n sortable: false,\n gridTrackSize: '200px'\n }\n ];\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n async getData(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): Promise<IResultList<IManagedObject>> {\n const filters = this.getFilters(columns, pagination, text);\n\n return await this.inventory.list(filters);\n }\n\n async getTotal(): Promise<number> {\n return (\n await this.inventory.list({\n query: this.TYPE_DASHBOARDS_QUERY,\n withTotalElements: true\n })\n ).paging.totalElements;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, onSuccess: () => void): Promise<void> {\n try {\n const msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n onSuccess();\n } catch (ex) {\n // intended empty\n }\n }\n\n private getFilters(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): TypeDashboardFilter {\n return {\n query: this.getQueryString(columns),\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withTotalPages: true,\n withTotalElements: true\n };\n }\n\n private getQueryString(columns: Column[]): string {\n const queryFromColumns = this.getQueryObj(columns);\n const fullQuery = this.queriesUtil.addAndFilter(queryFromColumns, this.baseQuery);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { ColumnConfig } from '@c8y/ngx-components';\nimport { NameDeviceGridColumn } from '@c8y/ngx-components/device-grid';\n\nexport class BasicNameDeviceGridColumn extends NameDeviceGridColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'basic-name';\n this.cellRendererComponent = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Column, DataGridService, Pagination, UserPreferencesService } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport {\n GroupDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n TypeDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { BasicNameDeviceGridColumn } from './basic-name.device-grid-column';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TypeDashboardAssetsGridService extends DataGridService {\n constructor(\n protected inventoryService: InventoryService,\n protected userPreferencesService: UserPreferencesService\n ) {\n super(userPreferencesService);\n }\n\n getDefaultColumns(columnsForDevice = true): Column[] {\n return columnsForDevice\n ? [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new GroupDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ]\n : [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ];\n }\n\n async getData(columns: Column[], pagination: Pagination, query: any = {}, text = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n withGroups: true\n };\n return this.inventoryService.list(filters);\n }\n\n async getCount(columns: Column[], pagination: Pagination, query: any = {}, text: string = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n pageSize: 1,\n currentPage: 1\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n async getTotal(query: any = {}): Promise<number> {\n const filters = {\n query: this.queriesUtil.buildQuery(query),\n pageSize: 1,\n withTotalPages: true\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n private getFilters(columns: Column[], pagination: Pagination, query: any, text?: string) {\n return {\n ...{ query: this.getDeviceQueryString(columns, query) },\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withChildren: false,\n withTotalPages: true\n };\n }\n\n private getDeviceQueryString(columns: Column[], query: any): string {\n let fullQuery = this.getQueryObj(columns);\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, query);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n Column,\n DataSourceModifier,\n gettext,\n ModalLabels,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { TypeDashboardAssetsGridService } from './type-dashboard-assets-grid.service';\nimport { ContextDashboardManagedObject } from '../../../context-dashboard/context-dashboard.model';\nimport { ContextDashboardService } from '../../../context-dashboard/context-dashboard.service';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-grid',\n templateUrl: './type-dashboard-target-assets-grid.component.html'\n})\nexport class TypeDashboardTargetAssetsGridComponent implements OnInit {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n columns: Column[];\n actionControls: ActionControl[] = [\n {\n type: 'navigateToInstance',\n text: gettext('Open instance`dashboard`'),\n callback: item => this.navigateToDevice(item as IManagedObject),\n icon: 'file-create'\n }\n ];\n loadMoreItemsLabel = gettext('Load more assets');\n loadingItemsLabel: string = gettext('Loading assets…');\n pagination = {\n pageSize: 25,\n currentPage: 1\n };\n serverSideDataCallback: ServerSideDataCallback;\n\n @Input() dashboard: ContextDashboardManagedObject;\n @Output() onNavigateToAsset: EventEmitter<void> = new EventEmitter<void>();\n private isDeviceDashboard: boolean;\n\n constructor(\n private router: Router,\n private assetsGridService: TypeDashboardAssetsGridService,\n private contextDashboardService: ContextDashboardService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit() {\n this.isDeviceDashboard = this.contextDashboardService.isDeviceDashboard(this.dashboard);\n this.columns = this.assetsGridService.getDefaultColumns(this.isDeviceDashboard);\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const baseQuery = { type: this.dashboard.c8y_Dashboard.deviceTypeValue };\n\n const { res, data, paging } = await alertOnError(\n this.assetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n const filteredSize = await alertOnError(\n this.assetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n const size = await alertOnError(this.assetsGridService.getTotal(baseQuery));\n\n const serverSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n navigateToDevice(val: IManagedObject): void {\n const parentSubPath = this.isDeviceDashboard ? 'device' : 'group';\n this.onNavigateToAsset.emit();\n this.router.navigate([`/${parentSubPath}/${val.id}/dashboard/${this.dashboard.id}`]);\n }\n}\n","<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n","import { Component, HostListener, Input } from '@angular/core';\nimport { gettext, ModalLabels } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-modal',\n templateUrl: './type-dashboard-target-assets-modal.component.html'\n})\nexport class TypeDashboardTargetAssetsModalComponent {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n @Input() dashboard: ContextDashboardManagedObject;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n close(): void {\n this.bsModalRef.hide();\n }\n}\n","<c8y-modal\n title=\"{{ 'Select dashboard instance to edit' | translate }}\"\n (onClose)=\"close()\"\n (onDismiss)=\"close()\"\n [labels]=\"labels\"\n [disabled]=\"true\"\n [headerClasses]=\"'has-data-grid'\"\n>\n <c8y-type-dashboard-target-assets-grid\n [dashboard]=\"dashboard\"\n (onNavigateToAsset)=\"close()\"\n ></c8y-type-dashboard-target-assets-grid>\n</c8y-modal>\n","import { Component, EventEmitter } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n BuiltInActionType,\n Column,\n DataSourceModifier,\n DisplayOptions,\n gettext,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { DashboardManagerService } from '../dashboard-manager.service';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { TypeDashboardTargetAssetsModalComponent } from '../type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\n\n@Component({\n selector: 'c8y-dashboard-manager',\n templateUrl: './type-dashboards-list.component.html'\n})\nexport class TypeDashboardsListComponent {\n title = gettext('Type dashboards');\n loadMoreItemsLabel = gettext('Load more dashboards');\n loadingItemsLabel: string = gettext('Loading dashboards…');\n columns = this.dashboardManagerService.getColumns();\n pagination = this.dashboardManagerService.getDefaultPagination();\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n text: gettext('Edit dashboard'),\n callback: item => this.openTargetAssetsModal(item as ContextDashboardManagedObject)\n },\n {\n type: BuiltInActionType.Delete,\n text: gettext('Delete dashboard'),\n callback: item => this.delete(item as ContextDashboardManagedObject)\n }\n ];\n serverSideDataCallback: ServerSideDataCallback;\n displayOptions: DisplayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: true,\n hover: false\n };\n refresh = new EventEmitter<void>();\n\n constructor(\n private dashboardManagerService: DashboardManagerService,\n private bsModalService: BsModalService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n await this.dashboardManagerService.delete(dashboard, () => this.refresh.emit());\n }\n\n openTargetAssetsModal(dashboard: ContextDashboardManagedObject): void {\n const initialState: Pick<TypeDashboardTargetAssetsModalComponent, 'dashboard'> = { dashboard };\n this.bsModalService.show(TypeDashboardTargetAssetsModalComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n initialState\n });\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const { res, data, paging } = await alertOnError(\n this.dashboardManagerService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n dataSourceModifier.searchText\n )\n );\n const filteredSize = paging.totalElements;\n const size = await alertOnError(this.dashboardManagerService.getTotal());\n\n return {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n }\n}\n","<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { NgModule } from '@angular/core';\nimport {\n CoreModule,\n gettext,\n hookNavigator,\n hookRoute,\n hookTab,\n ModalModule,\n NavigatorNode\n} from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { DashboardManagerTabsFactory } from './dashboard-manager-tabs.factory';\nimport { TypeDashboardsListComponent } from './type-dashboards-list/type-dashboards-list.component';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { TypeDashboardTargetAssetsModalComponent } from './type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\nimport { TypeDashboardTargetAssetsGridComponent } from './type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component';\n\nconst DASHBOARD_MANAGER_PATH = 'dashboard-manager';\n\n@NgModule({\n declarations: [\n TypeDashboardsListComponent,\n TypeDashboardTargetAssetsModalComponent,\n TypeDashboardTargetAssetsGridComponent\n ],\n imports: [CoreModule, TooltipModule, DeviceGridModule, ContextDashboardModule, ModalModule],\n providers: [\n hookTab(DashboardManagerTabsFactory),\n hookRoute([\n {\n path: DASHBOARD_MANAGER_PATH,\n redirectTo: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n pathMatch: 'full'\n },\n {\n path: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n component: TypeDashboardsListComponent\n }\n ]),\n hookNavigator(\n new NavigatorNode({\n parent: gettext('Configuration'),\n path: DASHBOARD_MANAGER_PATH,\n label: gettext('Dashboard manager'),\n icon: 'management1',\n routerLinkExact: false,\n featureId: 'dashboardManager'\n })\n )\n ]\n})\nexport class DashboardManagerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5.TypeDashboardInfoComponent","i6.DashboardAvailabilityComponent","i7.TypedDashboardSettingsComponent","i1.ContextDashboardService","i4.AppearanceSettingsComponent","i2.ContextDashboardService","i5","i6.DashboardDetailService","i7","i8","i10.DashboardGeneralSettingsComponent","i11.DashboardAppearanceSettingsComponent","i12.DashboardVersionHistoryComponent","i1.WidgetService","i4.ContextDashboardService","i6","i9.AppearanceSettingsComponent","i10.WidgetPreviewComponent","i1.DashboardOriginatorService","i2.DashboardCaretakerService","i4.WidgetService","i7.DashboardEditModeService","i9","i10.DashboardDetailComponent","i2.ContextDashboardComponent","i2.WidgetService","i7.ContextDashboardComponent","i3.ContextDashboardComponent","i2.TypeDashboardAssetsGridService","i3.ContextDashboardService","i3.TypeDashboardTargetAssetsGridComponent","i1.DashboardManagerService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-context-dashboard.mjs","sources":["../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.component.html","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/appearance-settings.component.ts","../../context-dashboard/appearance-settings.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-availability.component.ts","../../context-dashboard/dashboard-availability.component.html","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.html","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.ts","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-version-history.component.ts","../../context-dashboard/dashboard-settings/dashboard-version-history.component.html","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/dashboard-detail.component.html","../../context-dashboard/widget.service.ts","../../context-dashboard/widget-preview.component.ts","../../context-dashboard/widget-preview.component.html","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config.component.html","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/context-dashboard.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.html","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-dashboard.guard.ts","../../context-dashboard/group-dashboard.guard.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.module.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.html","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.html","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/dashboard-manager/dashboard-manager-tabs.factory.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/device-type-value.grid-column.ts","../../context-dashboard/dashboard-manager/dashboard-manager.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/basic-name.device-grid-column.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-assets-grid.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.html","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.html","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.html","../../context-dashboard/dashboard-manager/dashboard-manager.module.ts","../../context-dashboard/c8y-ngx-components-context-dashboard.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { gettext, Tab } from '@c8y/ngx-components';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\nexport const newDashboardTab: Tab<string> = {\n featureId: 'newDashboard',\n icon: 'th',\n label: gettext('New dashboard'),\n path: 'dashboard/new-dashboard',\n // place tab as last one and hide it so it won't be opened until user initiates adding new dashboard\n hide: true,\n priority: -Infinity\n};\n\n@Injectable({ providedIn: 'root' })\nexport class NewDashboardGuard {\n tab: Tab;\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n const tabActive = route.routeConfig.path === newDashboardTab.path;\n if (tabActive) {\n const dashboard: Partial<ContextDashboardManagedObject> = {\n c8y_Dashboard: null\n };\n route.data = { dashboard };\n }\n if (!this.tab) {\n this.tab = {\n ...newDashboardTab,\n hide: !tabActive,\n priority: tabActive ? Infinity : -Infinity\n };\n }\n return of([this.tab]);\n }\n}\n","import { Component } from '@angular/core';\nimport { TabsService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { newDashboardTab } from './new-dashboard.guard';\n\n@Component({\n selector: '[c8y-add-dashboard]',\n templateUrl: './add-dashboard.component.html',\n host: { class: 'd-flex a-i-stretch sticky-right' }\n})\nexport class AddDashboardComponent {\n constructor(\n private tabsService: TabsService,\n private router: Router\n ) {}\n\n addDashboard() {\n const tempNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // navigate before tab is displayed, because in DashboardDetailComponent tab is hidden on navigation from it.\n this.router.navigate(\n typeof tempNewDashboardTab.path === 'string'\n ? [tempNewDashboardTab.path]\n : tempNewDashboardTab.path,\n { replaceUrl: true }\n );\n // show tab and make it appear as first one\n tempNewDashboardTab.hide = false;\n tempNewDashboardTab.priority = Infinity;\n this.tabsService.refresh();\n }\n}\n","<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n <button\n class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n title=\"{{ 'Add dashboard' | translate }}\"\n type=\"button\"\n (click)=\"addDashboard()\"\n >\n <i\n class=\"icon-20 m-r-4\"\n c8yIcon=\"add-circle-outline\"\n ></i>\n <span>{{ 'Add dashboard' | translate }}</span>\n </button>\n <div class=\"p-r-sm-40\"></div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified } from '@c8y/client';\nimport {\n ContextData,\n ContextRouteService,\n ExtensionFactory,\n Permissions,\n Tab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { AddDashboardComponent } from './add-dashboard.component';\n\nexport abstract class AddDashboardFactory implements ExtensionFactory<Tab> {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n currentContext: ContextData;\n\n private permissions = inject(Permissions);\n private contextRoute = inject(ContextRouteService);\n\n async get(activatedRoute?: ActivatedRoute): Promise<Tab | Tab[]> {\n this.currentContext = this.contextRoute.getContextData(activatedRoute);\n if (\n this.currentContext?.context === this.targetContext &&\n (await this.hasPermission(this.currentContext.contextData))\n ) {\n return [\n {\n component: AddDashboardComponent,\n priority: -Infinity,\n showAlways: true\n }\n ];\n }\n return [];\n }\n\n private async hasPermission(context: IIdentified) {\n if (context?.id) {\n return await this.permissions.canEdit(\n [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ],\n context\n );\n }\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddDeviceDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddGroupDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n Widget,\n DynamicComponentDefinition,\n Route,\n gettext,\n ViewContext,\n WidgetDisplaySettings,\n TabWithTemplate,\n WidgetSettings\n} from '@c8y/ngx-components';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\nexport const DASHBOARD_SETTINGS_CHANGES = {\n classes: gettext('theme'),\n globalRolesIds: gettext('global roles'),\n widgetClasses: gettext('widget header style'),\n widgetMargin: gettext('widget margin'),\n icon: gettext('icon'),\n name: gettext('name'),\n priority: gettext('priority'),\n c8y_IsNavigatorNode: gettext('navigator item'),\n translateWidgetTitle: gettext('translate widget title')\n} as const satisfies Partial<Record<keyof ContextDashboard, string>>;\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n /**\n * @deprecated\n */\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed. They are static and will not be saved.\n */\n settings?: WidgetSettings;\n\n /**\n * Settings that are injected in any displaying component.\n */\n displaySettings?: WidgetDisplaySettings;\n\n /**\n * Whatever should be added to the configuration when a widget is created.\n */\n config?: {\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n };\n /**\n * The selected device or group (note: naming is inconsistent as group was added later\n * but must stay for already implemented widgets)\n */\n device?: {\n id?: string | number;\n name?: string;\n [key: string]: any;\n };\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n}\n\nexport interface ContextDashboardManagedObject extends IManagedObject {\n c8y_Dashboard?: ContextDashboard;\n name?: string;\n c8y_DashboardHistory?: ContextDashboard[];\n}\n\nexport interface ContextDashboard {\n icon?: SupportedIconsSuggestions | null;\n name?: string | null;\n priority?: number | null;\n deviceType?: boolean | null;\n deviceTypeValue?: string | null;\n isFrozen?: boolean | null;\n isTransient?: boolean;\n classes?: { [key: string]: boolean } | null;\n widgetClasses?: { [key: string]: boolean } | null;\n widgetMargin?: number | null;\n translateWidgetTitle?: boolean | null;\n global?: boolean | null;\n /**\n * The amount of columns on that dashboard.\n * Can be freely chosen, but product uses either 12 or 24.\n */\n columns?: number | null;\n children?: {\n [id: string]: Widget;\n };\n globalRolesIds?: DashboardGlobalRoles | null;\n c8y_IsNavigatorNode?: object | null;\n description?: string | null;\n historyDescription?: DashboardHistoryDescription | null;\n created?: string | null;\n author?: string | null;\n}\n/**\n * Object describing changes applied to dashboard settings and its widgets. Used to display user-friendly change log.\n */\nexport interface DashboardHistoryDescription {\n /**\n * Indicates type of dashboard change (or creation).\n */\n changeType?: 'reset' | 'create' | 'update' | null;\n /**\n * List of dashboard settings that has been changed.\n */\n dashboardSettingChanges?: (typeof DASHBOARD_SETTINGS_CHANGES)[keyof typeof DASHBOARD_SETTINGS_CHANGES][];\n /**\n * True if dashboard is typed dashboard, false if it's not.\n */\n deviceType?: boolean | null;\n /**\n * Object containing lists of widgets (by title) that has been changed, grouped by change type, e.g.:\n * ```ts\n * widgetChanges: {\n * removed: ['Applications'],\n * config?: ['Data points graph', 'Events list'],\n * },\n * ```\n */\n widgetChanges?: {\n removed?: string[];\n added?: string[];\n config?: string[];\n arrangement?: string[];\n } | null;\n /**\n * String used to display the date from which the state was restored.\n */\n restored?: string;\n}\n\nexport const DASHBOARD_CHILDREN_STATE_NAME = {\n initial: gettext('Initial state'),\n config: gettext('Widget configuration changed'),\n removed: gettext('Widget removed'),\n added: gettext('Widget added'),\n arrangement: gettext('Widgets rearranged')\n} as const satisfies Record<keyof DashboardHistoryDescription['widgetChanges'] | 'initial', string>;\n/**\n * Object representing state of dashboard widgets. Its main purpose is to allow to undo and redo changes\n * applied to dashboard children.\n */\nexport type DashboardChildrenState = {\n /**\n * Name of the change applied to dashboard that results in current state, e.g. 'widget removed'\n */\n name: (typeof DASHBOARD_CHILDREN_STATE_NAME)[keyof typeof DASHBOARD_CHILDREN_STATE_NAME];\n /**\n * Dashboard children in particular, immutable state.\n */\n children: ContextDashboard['children'];\n /**\n * Object describing changes applied to dashboard widgets that can be easily mapped to DashboardHistoryDescription widgetChanges.\n * ```ts\n * {\n * removed: {\n * 0969692617637703: { componentId: \"Data points graph\", config: {...}, classes: {...} ...}\n * },\n * config: {\n * 6347567345767653: { componentId: \"Applications\", config: {...}, classes: {...} ...},\n * 6456345634564566: { componentId: \"Events list\", config: {...}, classes: {...} ...},\n * }\n * }\n * ```\n */\n changeHistory: Partial<\n Record<\n keyof DashboardHistoryDescription['widgetChanges'],\n {\n [id: string]: Widget;\n }\n >\n >;\n};\n\nexport enum ContextDashboardType {\n Device = 'device',\n Type = 'type',\n Group = 'group',\n Named = 'name',\n Report = 'report'\n}\n\nexport enum DashboardDetailsTabId {\n GENERAL = 'general',\n APPEARANCE = 'appearance',\n VERSIONHISTORY = 'versionHistory'\n}\n\nexport type DashboardDetailsTabs = Record<\n DashboardDetailsTabId,\n TabWithTemplate<string> & { featureId: DashboardDetailsTabId }\n>;\n\nexport const WIDGET_HEADER_CLASSES = [\n {\n label: gettext('Regular`style`'),\n class: 'panel-title-regular',\n description: gettext('The widget has no border between header and content.')\n },\n {\n label: gettext('Border`style`'),\n class: 'panel-title-border',\n description: gettext('The widget has a small separation border between header and content.')\n },\n {\n label: gettext('Overlay`style`'),\n class: 'panel-title-overlay',\n description: gettext('The widget content overlays the header.')\n },\n {\n label: gettext('Hidden`style`'),\n class: 'panel-title-hidden',\n description: gettext('The widget header is not shown.')\n }\n] as const;\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Branded`style`'),\n class: 'panel-content-branded',\n description: gettext('The widget is styled with the main brand color.')\n },\n {\n label: gettext('Match dashboard`style`'),\n class: 'panel-content-light',\n description: gettext('The widget appearance matches the dashboard appearance.')\n },\n {\n label: gettext('Light`style`'),\n class: 'panel-content-white',\n description: gettext('The widget has light appearance, that is, dark text on light background.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget has dark appearance, that is, light text on dark background.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext('The widget has no background.')\n }\n] as const;\n\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Match UI`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard appearance matches the UI appearance.')\n },\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-white',\n description: gettext(\n 'The dashboard has light appearance, that is, dark text on light background.'\n )\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext(\n 'The dashboard has dark appearance, that is, light text on dark background.'\n )\n },\n // {\n // label: gettext('Transparent`theme`'),\n // class: 'dashboard-theme-transparent',\n // description: gettext(\n // 'The dashboard is styled with a transparent background and therefore is border-less.'\n // )\n // },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled using the brand palette.')\n }\n] as const;\n\nexport const STYLING_CLASS_PREFIXES = [\n 'dashboard-theme-',\n 'panel-title-',\n 'panel-content-'\n] as const;\n\nexport interface DashboardCopyClipboard {\n dashboardId: string;\n dashboard: ContextDashboard;\n context: DashboardContext;\n}\n\nexport interface DashboardContext {\n context: ViewContext;\n contextData: Partial<IManagedObject>;\n}\n\nexport const ALL_GLOBAL_ROLES_SELECTED = 'all' as const;\nexport type DashboardGlobalRoles = number[] | typeof ALL_GLOBAL_ROLES_SELECTED;\n\nexport const PRODUCT_EXPERIENCE = {\n DASHBOARD: {\n EVENTS: {\n DASHBOARDS: 'dashboards',\n REPORTS: 'reports'\n },\n COMPONENTS: {\n DASHBOARD_VIEW: 'context-dashboard',\n DASHBOARD_AVAILABILITY: 'dashboard-availability',\n REPORTS_LIST: 'report-dashboard-list',\n ADD_REPORT: 'report-dashboard-list',\n ADD_DASHBOARD: 'add-dashboard',\n DELETE_DASHBOARD: 'context-dashboard'\n },\n CONTEXT: {\n REPORT: 'report',\n DEVICE: 'device',\n ASSET: 'asset',\n GROUP: 'group'\n },\n ACTIONS: {\n APPLY_GLOBAL_ROLES_CHANGES: 'applyGlobalRolesChanges',\n DELETE: 'delete',\n LOAD: 'load',\n CREATE: 'create',\n ADD_REPORT: 'addReport'\n }\n }\n} as const;\n\nexport interface CanDeactivateComponent {\n canDeactivate: () => boolean | Observable<boolean> | Promise<boolean>;\n}\n\nexport const REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY = 30;\n\nexport type AllowTypeDashboard = 'allow' | 'disallow' | 'allow_if_type_filled';\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html'\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass = 'dashboard-theme-light';\n @Input()\n headerClass = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Input()\n dashboardSettings: boolean;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n @Input()\n columns: 1 | 3 = 1;\n\n dashboardDefaultLabel = gettext('Dashboard default');\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\n }\n\n private resetToDefault(value: string, compareTo: string, defaultValue: string) {\n if (defaultValue && value === compareTo) {\n value = defaultValue;\n }\n return value;\n }\n}\n","<div class=\"row\">\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">{{ 'Default theme' | translate }}</legend>\n <legend *ngIf=\"!dashboardSettings\">{{ 'Theme' | translate }}</legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0 fit-w\"\n *ngFor=\"let themeClassItem of possibleStylingTheme; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"content\"\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n [value]=\"themeClassItem.class\"\n [ngModel]=\"themeClass\"\n (click)=\"themeClassClick(themeClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ themeClassItem.label | translate }}{{\n themeClassItem.class === defaultThemeClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ themeClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"themeClassItem.class === defaultThemeClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ themeClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">\n {{ 'Default widget header style' | translate }}\n </legend>\n <legend *ngIf=\"!dashboardSettings\">\n {{ 'Widget header style' | translate }}\n </legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0\"\n *ngFor=\"let headerClassItem of possibleStylingHeader; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"header\"\n type=\"radio\"\n [id]=\"'groupradioheaderclass' + i\"\n [value]=\"headerClassItem.class\"\n [ngModel]=\"headerClass\"\n (click)=\"headerClassClick(headerClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ headerClassItem.label | translate }}{{\n headerClassItem.class === defaultHeaderClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ headerClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"headerClassItem.class === defaultHeaderClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ headerClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <ng-content></ng-content>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n/**\n * A hook to define the default widgets of the home dashboard in the cockpit app.\n */\nexport const COCKPIT_HOME_DASHBOARD_CONFIG = new InjectionToken('CockpitHomeDashboardConfig');\n\nexport interface CockpitDashboardConfig {\n /**\n * Allows to have customized dashboard context name in case the CockpitDashboardModule is used in different apps and should have individual home dashboards per app\n */\n dashboardName?: string;\n /**\n * Allows to define the default widgets shown on the Cockpit Homepage\n */\n defaultWidgets?: Widget[];\n /**\n * Allows to have a different page title than the default 'Home'\n */\n pageTitle?: string;\n /**\n * Allows to have individual home dashboards per user\n */\n userSpecific?: boolean;\n}\n\n/**\n * An array of widgets that is per default placed on the home dashboard of the cockpit app.\n */\nexport const DEFAULT_COCKPIT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext('Welcome to Cockpit'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 24,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 12\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 12,\n _y: 5,\n _height: 8,\n _width: 12\n }\n] as Partial<Widget>[] as Widget[];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n AlertService,\n ApplicationOptions,\n ContextData,\n DynamicComponentService,\n getActivatedRoute,\n gettext,\n GroupService,\n ModalService,\n NavigatorNode,\n NavigatorService,\n NEW_DASHBOARD_ROUTER_STATE_PROP,\n OptionsService,\n Permissions,\n Status,\n Tab,\n TabsService,\n ViewContext,\n Widget\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n assign,\n cloneDeep,\n forEach,\n get,\n has,\n keyBy,\n keys,\n pick,\n reduce,\n set,\n some\n} from 'lodash-es';\nimport { combineLatest, from, Observable, of, Subject } from 'rxjs';\nimport { catchError, filter, map, mergeMap, tap, throwIfEmpty, toArray } from 'rxjs/operators';\nimport {\n ALL_GLOBAL_ROLES_SELECTED,\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType,\n DashboardContext,\n DashboardCopyClipboard,\n PRODUCT_EXPERIENCE,\n STYLING_CLASS_PREFIXES\n} from './context-dashboard.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ContextDashboardService {\n dashboardTabs$: Observable<Tab[]>;\n formDisabled$: Observable<boolean>;\n readonly REPORT_PARTIAL_NAME = 'report_';\n copyClipboard: DashboardCopyClipboard;\n queriesUtil: QueriesUtil;\n readonly VERSION_HISTORY_SIZE_LIMIT = 10;\n private readonly INVENTORY_ROLES = [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ];\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private readonly CACHE_TIMEOUT = 500;\n private _formDisabled = true;\n private formDisabledSubject = new Subject<boolean>();\n private contextDashboardsCache: {\n query: string;\n result: Promise<IResultList<IManagedObject>>;\n timestamp: number;\n };\n private readonly HIDE_TYPE_DASHBOARD_FOR_ASSETS: keyof ApplicationOptions =\n 'hideTypeDashboardForAssets';\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = value;\n this.formDisabledSubject.next(value);\n }\n\n constructor(\n private inventory: InventoryService,\n private tabs: TabsService,\n private modal: ModalService,\n private translateService: TranslateService,\n private router: Router,\n private navigator: NavigatorService,\n private permissions: Permissions,\n private alert: AlertService,\n private dynamicComponent: DynamicComponentService,\n private groupService: GroupService,\n private optionsService: OptionsService\n ) {\n this.formDisabled$ = this.formDisabledSubject.asObservable();\n this.queriesUtil = new QueriesUtil();\n }\n\n async create(dashboardCfg: ContextDashboard, context?: ContextData, name = '') {\n let dashboard: Partial<ContextDashboardManagedObject> = {};\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const [dashboardType, dashboardFragments] = this.getDashboardFragments(\n { c8y_Dashboard: dashboardCfg } as ContextDashboardManagedObject,\n context,\n name,\n false\n );\n dashboard = { ...dashboard, ...dashboardFragments };\n\n if (this.shouldSetGlobal(dashboard, context)) {\n assign(dashboard, { c8y_Global: {} });\n }\n dashboard.name = dashboard.c8y_Dashboard.name;\n const { data } =\n dashboardType === ContextDashboardType.Group ||\n dashboardType === ContextDashboardType.Device ||\n (context && dashboardType === ContextDashboardType.Named)\n ? await this.inventory.childAdditionsCreate(\n dashboard,\n (context?.contextData.id as string) || ''\n )\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n let { data } = await this.inventory.detail(dashboardMO);\n data = this.adjustDashboardFor24Columns(data as ContextDashboardManagedObject);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(\n dashboard: ContextDashboardManagedObject,\n context?: ContextData\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCfg = dashboard.c8y_Dashboard;\n dashboard.name = dashboard.c8y_Dashboard.name;\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const keepFragments = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id', 'name']));\n keepFragments.c8y_DashboardHistory = dashboard.c8y_DashboardHistory;\n await this.serializeWidgetConfigs(keepFragments);\n\n const [, dashboardTypeFragments] = this.getDashboardFragments(dashboard, context, '', true);\n keepFragments.c8y_Global = this.shouldSetGlobal({ ...dashboard, ...dashboardTypeFragments });\n const { data } = await this.inventory.update({ ...keepFragments, ...dashboardTypeFragments });\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, withConfirmation = true) {\n try {\n if (withConfirmation) {\n let msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\". Do you want to proceed?`\n );\n if (this.isDeviceType(dashboard)) {\n msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of the type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n }\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n { ok: gettext('Delete'), cancel: gettext('Cancel') }\n );\n }\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab => {\n if (typeof tab.path === 'string') {\n return tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`);\n }\n });\n this.tabs.remove(tabToRemove);\n queueMicrotask(() => {\n this.tabs.refresh();\n });\n } catch (ex) {\n // intended empty\n }\n }\n\n updateDashboardHistory(\n dashboard: Partial<ContextDashboardManagedObject>,\n dashboardCfg: ContextDashboard\n ): Partial<ContextDashboardManagedObject> {\n if (!dashboard.c8y_DashboardHistory) {\n dashboard.c8y_DashboardHistory = [];\n }\n if (!dashboardCfg.historyDescription) {\n dashboardCfg.historyDescription = { changeType: 'create' };\n }\n\n dashboardCfg.created = new Date().toISOString();\n dashboard.c8y_DashboardHistory = cloneDeep([dashboardCfg, ...dashboard.c8y_DashboardHistory]);\n\n if (dashboard.c8y_DashboardHistory.length > this.VERSION_HISTORY_SIZE_LIMIT) {\n dashboard.c8y_DashboardHistory = [\n ...dashboard.c8y_DashboardHistory.slice(0, this.VERSION_HISTORY_SIZE_LIMIT)\n ];\n }\n\n return dashboard;\n }\n\n activateDashboards(\n route: ActivatedRouteSnapshot,\n types: ContextDashboardType[]\n ): Observable<boolean | Tab[]> {\n const { dashboardId } = route.params;\n if (dashboardId) {\n return this.getDashboard$(dashboardId, types, route.parent.data.contextData).pipe(\n tap(dashboard => {\n route.data = { dashboard };\n }),\n map(() => true),\n catchError(() => {\n return of(false);\n })\n );\n }\n\n this.dashboardTabs$ = this.getTabs$(\n route.data.contextData,\n types,\n route?.parent?.data as ContextData\n );\n return this.dashboardTabs$;\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[], context?: ContextData) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() => {\n if (!this.hasPermissionsToCopyDashboard()) {\n this.alert.warning(\n gettext(\n 'You are viewing a read-only dashboard because you don’t have the necessary permissions to modify it.'\n )\n );\n return of(\n this.getTemporaryDashboard({\n name,\n children,\n widgetClasses: { 'dashboard-theme-light': true, 'panel-title-regular': true }\n })\n );\n } else\n return from(\n this.create(\n {\n children,\n widgetClasses: { 'dashboard-theme-light': true, 'panel-title-regular': true }\n },\n context,\n name\n )\n );\n })\n );\n }\n\n updateNavigatorItem(mo: IManagedObject) {\n this.navigator.state.forEach(node => {\n if (node.path === `reports/${mo.id}`) {\n this.navigator.remove(node);\n }\n });\n if (mo.c8y_IsNavigatorNode) {\n const nodeToAdd = new NavigatorNode({\n label: mo.name,\n path: `reports/${mo.id}`,\n icon: mo.icon,\n priority: mo.priority\n });\n this.navigator.add(nodeToAdd);\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject, isNewDashboard = false) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n ...(isNewDashboard && {\n state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n })\n });\n } else if (/^\\/(device|group)\\/[0-9]+$/.test(this.router.url)) {\n // in case the add dashboard button is the only tab on that route\n this.router.navigate(['.', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n ...(isNewDashboard && {\n state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n })\n });\n } else {\n this.router.navigate(['..', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n ...(isNewDashboard && {\n state: { [NEW_DASHBOARD_ROUTER_STATE_PROP]: true }\n })\n });\n }\n }\n\n /**\n * Checks if user is able to edit dashboard according to his roles and dashboard ownership.\n *\n * @param mo - Dashboard managed object.\n * @returns True if user is able to edit dashboard, false if he cannot.\n */\n async canEditDashboard(mo: ContextDashboardManagedObject): Promise<boolean> {\n return await this.permissions.canEdit(this.INVENTORY_ROLES, mo);\n }\n\n /**\n * Checks if user has permissions to copy dashboard according to his roles.\n *\n * @returns True if user has permissions to copy dashboard, false if he cannot.\n */\n hasPermissionsToCopyDashboard(): boolean {\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n\n isNamed(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isReport(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${this.REPORT_PARTIAL_NAME}`\n ).test(prop)\n );\n }\n\n isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop => {\n const matchingProp = new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Type}${this.INDEX_SPLIT}`\n ).test(prop);\n if (!matchingProp) {\n return false;\n } else {\n // there might be matching key, but its value can be {} or null\n return !!dashboard[prop];\n }\n });\n }\n\n isDeviceDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Device}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isGroupDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Group}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n getFilteredDashboardStyles(styleList: string[]) {\n return styleList.filter(c =>\n STYLING_CLASS_PREFIXES.some(classPrefix => c.startsWith(classPrefix))\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(\n style => style && new RegExp(`-${styleName}$`, 'i').test(style.class)\n );\n return styling ? styling.class : defaultValue;\n }\n\n mapWidgets(widgets: Widget[]) {\n return keyBy(\n widgets.map(widget => {\n widget.id = String(Math.random()).substr(2);\n return widget;\n }),\n 'id'\n );\n }\n\n getDashboard$(dashboardIdOrName, dashboardType: ContextDashboardType[], mo?: IManagedObject) {\n const cache = this.cache.get(dashboardIdOrName);\n\n const dashboards = mo\n ? this.getContextDashboards(mo, dashboardType)\n : this.getNamedDashboard(dashboardIdOrName);\n\n const cacheRefresh = this.getContextDashboards$(dashboards).pipe(\n tap(dashboard => this.cacheDashboard(dashboard)),\n filter(\n dashboard =>\n dashboard.id === dashboardIdOrName ||\n has(\n dashboard,\n `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n async pasteDashboard(newContext: DashboardContext): Promise<void> {\n if (this.copyClipboard) {\n try {\n const dashboardToPaste = this.createContextDashboardCopy(\n this.copyClipboard.dashboard,\n newContext.contextData,\n this.copyClipboard.context.contextData\n );\n const dashboard = await this.create(this.clean(dashboardToPaste), newContext);\n\n // linking childAdditions for e.g. to grant access to the images uploaded by the image widget for users with only inventory roles.\n const { data: childAdditions } = await this.inventory.childAdditionsList(\n this.copyClipboard.dashboardId,\n { pageSize: 2000 }\n );\n if (childAdditions.length) {\n await this.inventory.childAdditionsBulkAdd(childAdditions, dashboard.id);\n }\n\n this.copyClipboard = undefined;\n this.navigateToDashboard(dashboard);\n } catch {\n this.alert.warning(gettext('Insufficient permissions for this action.'));\n }\n }\n }\n\n /**\n * Creates fragment that associates dashboards with device/asset. It consists of three elements:\n * - FRAGMENT_NAME - static string\n * - dashboard type (e.g. 'group', 'device')\n * - fragment value ( id of device/asset if it is not typed dashboard; deviceTypeValue property of dashboard if it is type dashboard)\n * Example fragment for device dashboard: 'c8y_Dashboard!device!773200'\n * Example fragment for group dashboard: 'c8y_Dashboard!group!84129208'\n * Example fragment for typed device dashboard: 'c8y_Dashboard!type!c8y_lwm2m_connector_device'\n *\n * @param contextDashboardType Type of dashboard\n * @param value Fragment value\n * @returns Fragment for dashboard\n */\n createFragmentKey<T extends ContextDashboardType, V extends string>(\n contextDashboardType: T,\n value: V\n ) {\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${contextDashboardType}${this.INDEX_SPLIT}${value}` as const;\n }\n\n /**\n * Indicates if dashboard can be set to type dashboard.\n * First, it checks if deviceTypeValue exists and if user has permission to set dashboard type.\n * Then, case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n * type fragment is missing- we do not support this combination.\n * @param mo Dashboard managed object\n * @param context {ContextData} Current context\n * @returns True if dashboard can be set to type dashboard, false if it is forbidden.\n */\n shouldAllowToSetDashboardType(\n mo: ContextDashboardManagedObject,\n context: ContextData\n ): AllowTypeDashboard {\n // disallow if dashboard managed object or context is missing or context is not device/asset/group\n if (\n !mo ||\n !context?.contextData ||\n (context.context !== ViewContext.Device && context.context !== ViewContext.Group)\n ) {\n return 'disallow';\n }\n\n // if context is asset/group and type dashboard feature is hidden for assets/groups or asset/group has no typ, return disallow\n const typeDashboardHiddenForAssets = this.optionsService.get(\n this.HIDE_TYPE_DASHBOARD_FOR_ASSETS,\n true\n );\n if (\n context.context === ViewContext.Group &&\n (typeDashboardHiddenForAssets || !context.contextData.type)\n ) {\n return 'disallow';\n }\n\n // if user has no permission to change dashboard, return disallow\n if (!this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {\n return 'disallow';\n }\n\n // case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n // type fragment is missing- we do not support this combination.\n const typeFragment = this.createFragmentKey(\n ContextDashboardType.Type,\n context?.contextData?.type\n );\n if (\n mo?.c8y_Dashboard &&\n mo?.c8y_Dashboard.deviceType &&\n context?.contextData?.type &&\n !mo[typeFragment]\n ) {\n return 'disallow';\n }\n\n // if view context is Device and contextData of this device has no type yet but type dashboard can be set when type is filled,\n // return allow_if_type_filled\n if (\n !context?.contextData?.type &&\n context.context === ViewContext.Device &&\n this.permissions.hasAnyRole(this.INVENTORY_ROLES)\n ) {\n return 'allow_if_type_filled';\n }\n\n return 'allow';\n }\n\n createReport(reportCfg: Partial<IManagedObject>) {\n const report: Partial<IManagedObject> = {};\n Object.assign(report, reportCfg);\n Object.assign(report, { c8y_Report: {} });\n return this.inventory.create(report);\n }\n\n addReportNavigatorNode(report: IManagedObject): void {\n const node = new NavigatorNode({\n label: report.name,\n path: `reports/${report.id}`,\n icon: report.icon,\n priority: report.priority\n });\n this.navigator.add(node);\n }\n\n getContextForGS(mo: IManagedObject): string | null {\n if (this.groupService.isDevice(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;\n } else if (this.groupService.isAsset(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.ASSET;\n } else if (this.groupService.isGroup(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.GROUP;\n } else {\n return null;\n }\n }\n\n async getContextDashboards(\n mo: IManagedObject,\n dashboardType: ContextDashboardType[]\n ): Promise<IResultList<IManagedObject>> {\n const filterCriteria = dashboardType.map(t => ({\n // it's necessary to wrap fragment in quotes because dashboard type can contain spaces\n __has: `'${this.createDashboardFragment(mo, t)}'`\n }));\n\n // the has query above does not work for device type dashboards where the type contains a dot\n const typeFilterCriteria =\n dashboardType.includes(ContextDashboardType.Type) && mo.type\n ? {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { 'c8y_Dashboard.deviceTypeValue': { __eq: mo.type } }\n ]\n }\n : undefined;\n const finalFilterCriteria = typeFilterCriteria\n ? [...filterCriteria, typeFilterCriteria]\n : filterCriteria;\n\n const query = this.queriesUtil.buildQuery({ __filter: { __or: finalFilterCriteria } });\n const now = Date.now();\n const cacheHasValidResponse =\n this.contextDashboardsCache &&\n this.contextDashboardsCache.query === query &&\n now - this.contextDashboardsCache.timestamp < this.CACHE_TIMEOUT;\n\n if (cacheHasValidResponse) {\n return this.contextDashboardsCache.result;\n } else {\n this.contextDashboardsCache = null;\n }\n\n this.contextDashboardsCache = {\n query,\n result: this.inventory.list({ query, pageSize: this.DEFAULT_PAGESIZE }),\n timestamp: now\n };\n return this.contextDashboardsCache.result;\n }\n\n /**\n * Creates a tuple describing the dashboard type and its fragments. For assets like devices and groups, it's possible\n * to have two fragments: one indicating this particular device/asset with its ID, and the second indicating\n * the device/asset type (if the dashboard is meant to be applied to all assets of this type).\n *\n * @param dashboardMO - Dashboard managed object.\n * @param context - Context data of asset.\n * @param name - Name of the dashboard.\n * @param isEdit - True if existing dashboard is updated, false when it's creation of new dashboard.\n * @returns Tuple of dashboard type and object containing dashboard fragments.\n */\n private getDashboardFragments(\n dashboardMO: ContextDashboardManagedObject,\n context: ContextData,\n name: string,\n isEdit: boolean\n ): [ContextDashboardType, Record<string, object>] {\n let dashboardType: ContextDashboardType;\n const id = (context?.contextData?.id as string) || '';\n const fragments: Record<string, object> = {};\n\n if (name) {\n // a named dashboard should not receive any other fragments\n dashboardType = ContextDashboardType.Named;\n const namedFragmentKey = this.createFragmentKey(ContextDashboardType.Named, name);\n fragments[namedFragmentKey] = {};\n } else if (context?.context === ViewContext.Device || context?.context === ViewContext.Group) {\n // get base type for device or group\n const defaultType =\n context.context === ViewContext.Device\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n dashboardType = dashboardMO.c8y_Dashboard.deviceType\n ? ContextDashboardType.Type\n : defaultType;\n\n // clear fragments from other asset if current asset is not origin of this dashboard\n this.clearRedundantFragment(dashboardMO, defaultType, fragments);\n\n // add base fragment for particular asset\n const deviceOrGroupFragmentKey = this.createFragmentKey(defaultType, id);\n fragments[deviceOrGroupFragmentKey] = {};\n\n // add or clear type fragment\n if (dashboardMO.c8y_Dashboard.deviceType || isEdit) {\n const typeFragmentKey = this.createFragmentKey(\n ContextDashboardType.Type,\n dashboardMO.c8y_Dashboard.deviceTypeValue\n );\n fragments[typeFragmentKey] = dashboardMO.c8y_Dashboard.deviceType ? {} : null;\n }\n }\n\n return [dashboardType, fragments];\n }\n /**\n * Clears fragments that originates from other managed object.\n * E.g. typed dashboard is created for device A of type c8y_MQTTDevice and id 1, so it gets fragments object\n * ```ts\n * {\n * c8y_Dashboard!device!1: {},\n * c8y_Dashboard!type!c8y_MQTTDevice: {}\n * }\n *```\n * then, on device B of type c8y_MQTTDevice and id 2, which also has access to this dashboard, deviceType is set to\n * false, so dashboard is not typed dashboard anymore and now belongs to device B, therefore fragments should look like\n * ```ts\n * {\n * c8y_Dashboard!device!1: null, // this value is cleared because dashboard is doesn't belong to device A anymore\n * c8y_Dashboard!device!2: {}, // assign dashboard to device B\n * c8y_Dashboard!type!c8y_MQTTDevice: null // this value is cleared in getDashboardFragments method as it's not typed dashboard anymore\n * }\n * ```\n *\n * @param dashboardMO - Dashboard managed object.\n * @param type - Context dashboard type.\n * @param fragments - Fragments object.\n */\n private clearRedundantFragment(\n dashboardMO: ContextDashboardManagedObject,\n type: ContextDashboardType,\n fragments: Record<string, object>\n ): void {\n Object.keys(dashboardMO)\n .filter(key => key.startsWith(this.createFragmentKey(type, '')))\n .forEach(key => (fragments[key] = null));\n }\n\n /**\n * Used to migrate dashboards from previous 12 columns layout to 24 columns.\n */\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T[]\n ): T[];\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T\n ): T;\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T | T[]\n ): T | T[] {\n if (Array.isArray(dashboards)) {\n return dashboards.map(dashboard => this.adjustDashboardFor24Columns(dashboard));\n }\n // if `columns` attribute exists, dashboard was already adjusted.\n if (dashboards.c8y_Dashboard.columns) {\n return dashboards;\n }\n\n dashboards.c8y_Dashboard.columns = 24;\n if (!dashboards.c8y_Dashboard.children) {\n return dashboards;\n }\n\n // Newly created NamedContextDashboards are still created with 12 columns for backwards compatibility.\n // Default widgets might be already configured for 24 columns.\n // If a widget is already configured for more than 12 columns, we should not adjust it.\n const alreadyHasWidgetsConfiguredForMoreThan12Columns = Object.values(\n dashboards.c8y_Dashboard.children\n ).some(widget => widget._x + widget._width > 12);\n if (alreadyHasWidgetsConfiguredForMoreThan12Columns) {\n return dashboards;\n }\n\n // we need to multiply both _width and _x attributes with 2 to migrate from 12 to 24 columns.\n Object.values(dashboards.c8y_Dashboard.children).forEach(widget => {\n if (widget._width) {\n widget._width = widget._width * 2;\n }\n if (widget._x) {\n widget._x = widget._x * 2;\n }\n });\n return dashboards;\n }\n\n private async serializeWidgetConfigs(dashboard: ContextDashboardManagedObject): Promise<void> {\n const children = cloneDeep(dashboard.c8y_Dashboard.children);\n if (!children) {\n return;\n }\n const configs = Object.values(children);\n const details = configs.map(({ componentId, config }) => ({ componentId, config }));\n const results = await this.dynamicComponent.serializeConfigs(details);\n results.forEach((result, index) => {\n Object.entries(result).forEach(([key, value]) => {\n set(details[index].config, key, value);\n });\n });\n dashboard.c8y_Dashboard.children = children;\n }\n\n private createContextDashboardCopy(\n dash: ContextDashboard,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ): ContextDashboard {\n const children = reduce(\n dash.children,\n (_children, child) => {\n const { id } = child;\n const cfg = child.config;\n const propertiesToCopy = {\n device: device => this.replaceContextInObj(device, newContext, oldContext),\n datapoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n dataPoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsGauge: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsLabels: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext)\n };\n\n if (cfg) {\n this.copyProperties(cfg, propertiesToCopy);\n if (cfg.options) {\n this.copyProperties(cfg.options, propertiesToCopy);\n }\n }\n\n _children[id] = cloneDeep(child);\n return _children;\n },\n {}\n );\n\n dash.children = children;\n\n const isTypeDashboard = dash.deviceType && !!dash.deviceTypeValue;\n if (isTypeDashboard) {\n dash.deviceTypeValue = newContext.type;\n }\n return dash;\n }\n\n private copyProperties(obj, propertiesToCopy) {\n forEach(propertiesToCopy, (copyFn, property) => {\n if (obj[property]) {\n obj[property] = copyFn(obj[property]);\n }\n });\n }\n\n private replaceContextInDataPoints(\n dataPoints,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n dataPoints.forEach(dp => {\n dp.__target = this.replaceContextInObj(dp.__target, newContext, oldContext);\n });\n return dataPoints;\n }\n\n private replaceContextInObj(\n obj: Partial<IManagedObject>,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n if (obj && obj.id === oldContext.id) {\n Object.assign(obj, pick(newContext, ['id', 'name']));\n }\n return obj;\n }\n\n private getTabs$(\n mo: ContextDashboardManagedObject,\n dashboardType: ContextDashboardType[],\n context?: ContextData\n ) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n mergeMap(dashboard => this.verifyDashboardAvailability$(dashboard)),\n // Due to MTM-62321 named context dashboards included fragments for device and groups.\n // therefore some device-info dashboards (from DM app) might occur in cockpit on device level.\n // We need to filter those out..\n filter(([dashboard]) => {\n // list all identifiers of the dashboard (name, device, group, type)\n const dashboardIdentifiers = Object.keys(dashboard)\n .filter(key => key.startsWith(`${this.FRAGMENT_NAME}${this.INDEX_SPLIT}`))\n .map(key => key.split(this.INDEX_SPLIT)[1]);\n // if dashboard is not named, it's safe to include it\n if (!dashboardIdentifiers.includes(ContextDashboardType.Named)) {\n return true;\n }\n // if dashboard is named, but also has a context identifier, we skip it\n if (\n dashboardIdentifiers.includes(ContextDashboardType.Device) ||\n dashboardIdentifiers.includes(ContextDashboardType.Group)\n ) {\n return false;\n }\n\n // all others are good..\n return true;\n }),\n mergeMap(([dashboard]) => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard, context)),\n toArray()\n );\n }\n\n private verifyDashboardAvailability$(dashboard: ContextDashboardManagedObject) {\n const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds;\n const canEdit = from(\n this.permissions.canEdit(this.INVENTORY_ROLES, dashboard, { skipRequestCheck: true })\n );\n const hasAnyGlobalRole =\n !globalRolesIds || globalRolesIds === ALL_GLOBAL_ROLES_SELECTED\n ? of(true)\n : of(this.permissions.hasAnyGlobalRole(globalRolesIds));\n\n return combineLatest([of(dashboard), canEdit, hasAnyGlobalRole]).pipe(\n filter(([, canEdit, hasAnyGlobalRole]) => canEdit || hasAnyGlobalRole)\n );\n }\n\n private getContextDashboards$(request: Promise<IResultList<IManagedObject>>) {\n return from(request).pipe(\n mergeMap(response =>\n this.adjustDashboardFor24Columns(response.data as ContextDashboardManagedObject[])\n )\n );\n }\n\n /**\n * Cleans already corrupted dashboards from dashboardMo property.\n * Added to fix dashboards on the cloud instance (eu-latest).\n * @deprecated This is going to be removed after 1007.7.0.\n */\n private async removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCopy = cloneDeep(dashboard);\n const children = get(dashboardCopy, 'c8y_Dashboard.children');\n let updateDashboard = false;\n\n forEach(children, child => {\n if (get(child, 'componentTransformConfigWithContext')) {\n delete child.componentTransformConfigWithContext;\n updateDashboard = true;\n }\n if (get(child, 'config.dashboardMo')) {\n delete child.config.dashboardMo;\n updateDashboard = true;\n }\n });\n\n if (updateDashboard) {\n await this.update(dashboardCopy);\n }\n return dashboardCopy;\n }\n\n private cacheDashboard(dashboard: ContextDashboardManagedObject) {\n this.cache.set(dashboard.id, dashboard);\n }\n\n private createDashboardTab(dashboard: ContextDashboardManagedObject, context?: ContextData) {\n const { c8y_Dashboard: _dashboard, id } = dashboard;\n return {\n icon: _dashboard.icon,\n path: `${this.DASHBOARD_ROUTE_PATH}/${id}`,\n label: _dashboard.name,\n priority: _dashboard.priority,\n hide: this.isReport(dashboard),\n badge:\n _dashboard.deviceType && this.shouldAllowToSetDashboardType(dashboard, context)\n ? gettext('Dashboard template')\n : null,\n tooltipText: _dashboard.description || gettext('Dashboard template')\n } as Tab;\n }\n\n private clean(dashboard) {\n const jsonString = JSON.stringify(dashboard, (key, value) => {\n if (key === '$$hashKey' || key === 'klasses') {\n return undefined;\n }\n\n return value;\n });\n return JSON.parse(jsonString);\n }\n\n private getNamedDashboard(name: string) {\n return this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${name}`,\n pageSize: 1\n });\n }\n\n private createDashboardFragment(mo: IManagedObject, type: ContextDashboardType) {\n let value;\n if (mo.c8y_Report) {\n value = `${this.REPORT_PARTIAL_NAME}${mo.id}`;\n } else {\n value = type === ContextDashboardType.Type ? mo.type : mo.id;\n }\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${value}`;\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>, context?) {\n if (\n (!context && this.isNamed(dashboard) && !this.isReport(dashboard)) ||\n this.isDeviceType(dashboard)\n ) {\n return {};\n }\n return null;\n }\n\n private getTemporaryDashboard(dashboardCfg: ContextDashboard): ContextDashboardManagedObject {\n return {\n c8y_Dashboard: {\n ...dashboardCfg,\n name: dashboardCfg.name || 'Temporary Dashboard',\n isTransient: true,\n description: gettext(\n 'This is a temporary, non-editable dashboard displayed due to insufficient permissions.'\n )\n },\n [`c8y_Dashboard!name!${dashboardCfg.name}`]: {}\n } as ContextDashboardManagedObject;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboard } from './context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardDetailService {\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 5000;\n\n constructor(\n private fb: FormBuilder,\n private translateService: TranslateService\n ) {}\n /**\n * Creates dashboard details form divided into two groups- general settings and appearance settings.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param allowTypeDashboard Allow to make dashboard type dashboard\n * @returns Dashboard details form\n */\n initForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n return this.fb.group({\n generalSettingsForm: this.initGeneralSettingsForm(dashboard, isReport, allowTypeDashboard),\n appearanceSettingsForm: this.initAppearanceSettingsForm(dashboard)\n });\n }\n /**\n * Creates form group for general settings of dashboard.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param deviceTypeValue Value used for typed dashboard\n * @returns Dashboard general settings form\n */\n initGeneralSettingsForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n const globalRolesIdsValue = !dashboard?.globalRolesIds\n ? null\n : Array.isArray(dashboard.globalRolesIds)\n ? [...dashboard.globalRolesIds]\n : dashboard.globalRolesIds;\n return this.fb.group({\n icon: [dashboard?.icon || this.DEFAULT_DASHBOARD_ICON, [Validators.minLength(1)]],\n priority: [\n dashboard?.priority || this.DEFAULT_DASHBOARD_PRIORITY,\n [Validators.min(-10000), Validators.max(10000), Validators.required]\n ],\n name: [\n dashboard?.name ||\n (isReport\n ? this.translateService.instant(gettext('Report'))\n : this.translateService.instant(gettext('Dashboard'))),\n [Validators.required, Validators.maxLength(512)]\n ],\n description: [dashboard?.description || null, [Validators.maxLength(1_000)]],\n globalRolesIds: [globalRolesIdsValue],\n c8y_IsNavigatorNode: [!!dashboard?.c8y_IsNavigatorNode],\n ...(allowTypeDashboard !== 'disallow' && {\n deviceType: [\n {\n value: dashboard?.deviceType ?? false,\n disabled: allowTypeDashboard === 'allow_if_type_filled'\n }\n ]\n })\n });\n }\n /**\n * Creates form group for appearance settings of dashboard.\n * @param dashboard Context dashboard object\n * @returns Dashboard appearance settings form\n */\n initAppearanceSettingsForm(dashboard: ContextDashboard): FormGroup {\n return this.fb.group({\n widgetMargin: [\n dashboard?.widgetMargin || this.DEFAULT_DASHBOARD_MARGIN,\n [Validators.min(0), Validators.max(50)]\n ],\n translateWidgetTitle: [!!dashboard?.translateWidgetTitle],\n classes: [dashboard?.classes || { [this.styling.themeClass]: true }],\n widgetClasses: [dashboard?.widgetClasses || { [this.styling.headerClass]: true }]\n });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IUserGroup, UserGroupService } from '@c8y/client';\nimport { GainsightService, Item, Permissions } from '@c8y/ngx-components';\nimport {\n DashboardGlobalRoles,\n ALL_GLOBAL_ROLES_SELECTED,\n PRODUCT_EXPERIENCE\n} from './context-dashboard.model';\n\n@Component({\n selector: 'c8y-dashboard-availability',\n templateUrl: './dashboard-availability.component.html'\n})\nexport class DashboardAvailabilityComponent implements OnInit {\n /**\n * Ids of global roles assigned to the dashboard or a string \"all\" indicating the selection of all global roles.\n * The value undefined is treated as equivalent to 'all'.\n */\n @Input()\n get globalRolesIds(): DashboardGlobalRoles {\n return this._globalRolesIds;\n }\n set globalRolesIds(ids: DashboardGlobalRoles) {\n if (!ids || ids === ALL_GLOBAL_ROLES_SELECTED) {\n this._globalRolesIds = ALL_GLOBAL_ROLES_SELECTED;\n return;\n }\n this._globalRolesIds = [...ids];\n }\n @Output() globalRolesIdsChange = new EventEmitter<DashboardGlobalRoles>();\n globalRolesItems: Item[] = [];\n globalRolesItemsSelected: Item[] = [];\n selectHidden = false;\n private globalRoles: IUserGroup[] = [];\n private PAGE_SIZE = 100;\n private _globalRolesIds: DashboardGlobalRoles;\n\n constructor(\n private userGroupService: UserGroupService,\n private gainsightService: GainsightService,\n private permissions: Permissions\n ) {}\n\n async ngOnInit() {\n if (this.permissions.hasRole(Permissions.ROLE_USER_MANAGEMENT_READ)) {\n this.globalRoles = await this.getGlobalRoles();\n this.globalRolesItems = this.mapGlobalRolesToItems();\n this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();\n } else {\n this.selectHidden = true;\n }\n }\n\n onSelected(items: Item[]) {\n if (!items || !Array.isArray(items)) {\n return;\n }\n\n const allItemsSelected = items.length === this.globalRolesItems.length;\n this.globalRolesItemsSelected = items;\n\n if (allItemsSelected) {\n this.globalRolesIdsChange.emit(ALL_GLOBAL_ROLES_SELECTED);\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: ALL_GLOBAL_ROLES_SELECTED\n });\n } else {\n const selectedGlobalRolesIds = items.map(i => i.id);\n this.globalRolesIdsChange.emit([...selectedGlobalRolesIds]);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: selectedGlobalRolesIds?.sort()?.join()\n });\n }\n }\n\n private async getGlobalRoles() {\n return (await this.userGroupService.list({ pageSize: this.PAGE_SIZE })).data;\n }\n\n private mapGlobalRolesToItems(): Item[] {\n return this.globalRoles.map(({ name, id }) => ({\n name,\n id\n }));\n }\n\n private getSelectedGlobalRolesItems(): Item[] {\n if (!this.globalRolesIds || this.globalRolesIds === ALL_GLOBAL_ROLES_SELECTED) {\n return this.globalRolesItems;\n }\n return this.globalRolesIds\n .map(globalRoleId => this.globalRolesItems.find(gR => gR.id === globalRoleId))\n .filter(Boolean);\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Availability`of dashboard based on permissions`' | translate }}</legend>\n <c8y-form-group>\n <label for=\"availability\">\n <span\n class=\"m-r-4\"\n id=\"availability\"\n >\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <c8y-select-legacy\n *ngIf=\"!selectHidden\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select-legacy>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n </c8y-form-group>\n</fieldset>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { AlertService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-type-dashboard-info',\n templateUrl: './type-dashboard-info.component.html'\n})\nexport class TypeDashboardInfoComponent implements OnInit {\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() context: ContextDashboardManagedObject;\n deviceTypeInstancesCount: number;\n @Input() asyncRenderSuccess: () => void;\n @Input() asyncRenderFail: () => void;\n\n constructor(\n private inventory: InventoryService,\n private alert: AlertService\n ) {}\n\n async ngOnInit() {\n await this.updateDeviceTypeCount();\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n try {\n const count = await this.inventory.count({\n type: this.deviceTypeValue || this.context.c8y_Dashboard.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n this.asyncRenderSuccess?.();\n } catch (error) {\n this.alert.addServerFailure(error);\n this.asyncRenderFail?.();\n }\n }\n}\n","<ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n <span class=\"m-l-auto\">\n <span class=\"label label-info\">\n {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n </span>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n </li>\n <ng-container *ngIf=\"context?.c8y_Dashboard\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n </span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"context?.c8y_DashboardHistory?.length\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n {{ context.c8y_DashboardHistory[0].author }}\n </span>\n </li>\n </ng-container>\n</ul>\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { gettext, InterAppService, SupportedApps, SupportedAppKey } from '@c8y/ngx-components';\nimport { IApplication, InventoryService } from '@c8y/client';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { Observable } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'c8y-typed-dashboard-settings',\n templateUrl: './typed-dashboard-settings.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TypedDashboardSettingsComponent),\n multi: true\n }\n ]\n})\nexport class TypedDashboardSettingsComponent implements ControlValueAccessor, OnInit {\n value: boolean;\n touched = false;\n disabled = false;\n\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() formInvalid: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Input() isDevice: boolean;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n typedDashboardStatus: string;\n infoText: string;\n deviceTypeInstancesCount: number;\n showSourceNavigationLink$: Observable<boolean>;\n userDeviceManagementApp$: Observable<IApplication>;\n context: any;\n deviceManagementAppKey: SupportedAppKey = SupportedApps.devicemanagement;\n deviceManagementLinkTitle = gettext('Device Info page in {{ deviceManagementAppName }}');\n\n constructor(\n private inventory: InventoryService,\n private interAppService: InterAppService,\n private route: ActivatedRoute\n ) {}\n\n async ngOnInit() {\n this.userDeviceManagementApp$ = this.interAppService.getApp$(this.deviceManagementAppKey);\n this.context = this.route.parent.snapshot.data.contextData;\n this.showSourceNavigationLink$ = this.interAppService.shouldShowAppLink$(\n this.deviceManagementAppKey\n );\n }\n\n async goToDeviceView(): Promise<void> {\n await this.interAppService.navigateToApp(\n this.deviceManagementAppKey,\n `#/device/${this.context.id}/device-info`\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onChange = _ => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onTouched = () => {};\n\n writeValue(value: boolean): void {\n this.value = value;\n this.updateTexts();\n if (value) {\n this.updateDeviceTypeCount();\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n async toggle(): Promise<void> {\n this.value = !this.value;\n this.onChange(this.value);\n if (this.value && this.deviceTypeInstancesCount == null) {\n this.setDisabledState(true);\n await this.updateDeviceTypeCount();\n }\n this.updateTexts();\n this.setDisabledState(false);\n }\n\n private updateTexts(): void {\n this.typedDashboardStatus = this.value\n ? gettext('Enabled`typed dashboard`')\n : gettext('Disabled`typed dashboard`');\n\n if (this.allowTypeDashboard === 'allow_if_type_filled') {\n this.infoText = gettext(\n `<p class=\"p-b-8\">Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the device type.</p>\n <p class=\"p-b-16\">The current device doesn't have a device type assigned to it. Assign a device type to the device via the \"Asset properties\" widget in the <strong>Info</strong> tab of the device.</p>`\n );\n return;\n }\n\n if (this.value) {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all devices based on device type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all devices based on the same type and makes it available only for the current instance.\n </p>`\n );\n } else {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all assets based on asset model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all assets based on the same model and makes it available only for the current instance.\n </p>`\n );\n }\n } else {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n } else {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all assets based on the model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n }\n }\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n const count = await this.inventory.count({\n type: this.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div class=\"flex-grow d-flex d-col\">\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n <button\n class=\"btn-link p-0 m-r-auto\"\n type=\"button\"\n *ngIf=\"allowTypeDashboard === 'allow_if_type_filled' && showSourceNavigationLink$ | async\"\n (click)=\"goToDeviceView()\"\n >\n {{\n deviceManagementLinkTitle\n | translate\n : {\n deviceManagementAppName:\n userDeviceManagementApp$ | async | humanizeAppName | async\n }\n }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </div>\n </div>\n\n <c8y-type-dashboard-info\n *ngIf=\"allowTypeDashboard === 'allow'\"\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DashboardGlobalRoles\n} from '../context-dashboard.model';\nimport { gettext, NavigatorNode, NavigatorService } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-general-settings',\n templateUrl: './dashboard-general-settings.component.html'\n})\nexport class DashboardGeneralSettingsComponent {\n @Input() isReport: boolean;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability: boolean;\n @Input() dashboard: ContextDashboard;\n @Input() generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Input() isDevice: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n dashboardName: string;\n navigatorNodes$: Observable<NavigatorNode[]>;\n globalRolesIds: DashboardGlobalRoles;\n readonly priorityExampleLabel = gettext('e.g. {{ example }}');\n readonly positionInTabsExampleLabel = gettext('Position in tabs (10000 first, -10000 last)');\n constructor(private navigatorService: NavigatorService) {}\n\n ngOnInit() {\n this.navigatorNodes$ = this.navigatorService.items$;\n this.globalRolesIds = this.dashboard.globalRolesIds;\n }\n\n changeGlobalRoleIds() {\n this.generalSettingsForm.patchValue({ globalRolesIds: this.globalRolesIds });\n this.generalSettingsForm.markAsDirty();\n }\n}\n","<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard !== 'disallow'\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from '../context-dashboard.model';\nimport { ContextDashboardService } from '../context-dashboard.service';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-appearance-settings',\n templateUrl: './dashboard-appearance-settings.component.html'\n})\nexport class DashboardAppearanceSettingsComponent implements OnChanges {\n @Input() dashboard: ContextDashboard;\n @Input() appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n @Output() previewChanged = new EventEmitter<\n Pick<ContextDashboard, 'classes' | 'widgetClasses'>\n >();\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n ngOnInit() {\n if (this.dashboard) {\n this.setDashboardStyle();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.dashboard) {\n this.dashboard = changes.dashboard.currentValue;\n this.ngOnInit();\n }\n }\n\n changeThemeClass(themeClass: string) {\n this.styling.themeClass = themeClass;\n this.appearanceSettingsForm.patchValue({ classes: { [this.styling.themeClass]: true } });\n this.previewChanged.emit({ classes: { [this.styling.themeClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n changeHeaderClass(headerClass: string) {\n this.styling.headerClass = headerClass;\n this.appearanceSettingsForm.patchValue({ widgetClasses: { [this.styling.headerClass]: true } });\n this.previewChanged.emit({ widgetClasses: { [this.styling.headerClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { ContextDashboard } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { ContextDashboardService } from '../context-dashboard.service';\n\n@Component({\n selector: 'c8y-dashboard-version-history',\n templateUrl: './dashboard-version-history.component.html'\n})\nexport class DashboardVersionHistoryComponent {\n @Input() dashboardHistory: ContextDashboard[] = [];\n @Input() isReport: boolean;\n @Output() onRevert: EventEmitter<ContextDashboard> = new EventEmitter();\n dashboardHistoryExtended: (ContextDashboard & { descriptionText?: string })[] = [];\n restoredDashboardMessage = gettext(\n 'Restored dashboard state from {{ restoredStateCreationDate }}'\n );\n versionHistoryLimitMessage = gettext(\n 'Store up to {{ versionHistoryLimit }} dashboard versions. Any additional versions will replace/delete older ones'\n );\n\n constructor(\n private translateService: TranslateService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngOnInit() {\n this.generateDashboardHistoryDescription();\n }\n\n generateDashboardHistoryDescription() {\n for (const dashboard of this.dashboardHistory) {\n const copiedDashboard: ContextDashboard & { descriptionText?: string } = { ...dashboard };\n\n let settingChangesMessage = '';\n let assetModelMessage = '';\n let widgetChanges = '';\n\n if (dashboard.historyDescription.changeType === 'create') {\n copiedDashboard.descriptionText = this.translateService.instant(\n this.isReport ? gettext('Report created.') : gettext('Dashboard created.')\n );\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n if (dashboard.historyDescription.changeType === 'reset') {\n copiedDashboard.descriptionText = this.translateService.instant(gettext('Reset widgets'));\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n\n const isDashboardUpdated = dashboard.historyDescription.dashboardSettingChanges?.length > 0;\n if (isDashboardUpdated) {\n const translatedValuesChanged = dashboard.historyDescription.dashboardSettingChanges\n .map(val => this.translateService.instant(val))\n .join(', ');\n settingChangesMessage = this.translateService.instant(\n this.isReport\n ? gettext('Report updated: {{ values }}.')\n : gettext('Dashboard updated: {{ values }}.'),\n { values: translatedValuesChanged }\n );\n }\n\n const isDeviceDashboard = dashboard.historyDescription.deviceType != null && !this.isReport;\n if (isDeviceDashboard) {\n assetModelMessage = this.translateService.instant(\n dashboard.historyDescription.deviceType\n ? gettext('Dashboard asset model has been enabled.')\n : gettext('Dashboard asset model has been disabled.')\n );\n }\n\n if (dashboard.historyDescription.widgetChanges) {\n for (const change in dashboard.historyDescription.widgetChanges) {\n const widgetList = dashboard.historyDescription.widgetChanges[change];\n if (!widgetList) {\n continue;\n }\n const translatedWidgetList = dashboard.translateWidgetTitle\n ? widgetList.map(widget => this.translateService.instant(widget))\n : widgetList;\n switch (change) {\n case 'added':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Added widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'removed':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Removed widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'config':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Updated widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'arrangement':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Rearranged widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n default:\n break;\n }\n }\n }\n\n copiedDashboard.descriptionText = `${settingChangesMessage} ${assetModelMessage} ${widgetChanges}`;\n this.dashboardHistoryExtended.push(copiedDashboard);\n }\n }\n\n revertDashboard(dashboard: ContextDashboard): void {\n const newDashboard = cloneDeep(dashboard);\n newDashboard.historyDescription.restored = dashboard.created;\n this.onRevert.emit(newDashboard);\n }\n}\n","<div class=\"bg-component p-t-8 p-b-8 separator-bottom text-center\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info\"\n ></i>\n {{\n versionHistoryLimitMessage\n | translate: { versionHistoryLimit: contextDashboardService.VERSION_HISTORY_SIZE_LIMIT }\n }}\n</div>\n<c8y-list-group class=\"p-t-24 p-b-24\">\n <c8y-li-timeline\n *ngFor=\"let dashboard of dashboardHistoryExtended; index as i\"\n [ngClass]=\"{ active: i === 0 }\"\n >\n {{ dashboard.created | date: 'mediumDate' }}\n {{ dashboard.created | date: 'shortTime' }}\n <c8y-li data-cy=\"c8y-dashboard-version-history--history-row\">\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div class=\"flex-grow\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ dashboard.descriptionText }}\"\n data-cy=\"c8y-dashboard-version-history--history-title\"\n >\n {{ dashboard.descriptionText }}\n {{\n dashboard.historyDescription.restored\n ? (restoredDashboardMessage\n | translate\n : {\n restoredStateCreationDate: dashboard.historyDescription.restored | c8yDate\n })\n : ''\n }}\n </span>\n <small\n class=\"text-muted\"\n title=\"{{ 'by`user`' | translate }} {{ dashboard.author }}\"\n *ngIf=\"dashboard.author\"\n >\n <div class=\"icon-flex\">\n <i c8yIcon=\"c8y-user\"></i>\n {{ dashboard.author }}\n </div>\n </small>\n </div>\n\n <span\n class=\"label label-primary m-l-auto\"\n title=\"{{ 'The last saved status of the dashboard' | translate }}\"\n *ngIf=\"i === 0\"\n >\n {{ 'Current`dashboard status`' | translate }}\n </span>\n <span\n class=\"m-l-auto showOnHover\"\n *ngIf=\"dashboardHistoryExtended.length > 1 && i > 0\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Restore the dashboard to this status' | translate }}\"\n type=\"button\"\n (click)=\"revertDashboard(dashboard)\"\n >\n {{ 'Restore' | translate }}\n </button>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AppStateService,\n ContextData,\n ContextRouteService,\n GainsightService,\n gettext,\n GroupService,\n memoize,\n ModalService,\n Status,\n Tab,\n TabsService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { clone, cloneDeep, isEqual } from 'lodash-es';\nimport { Observable, Subject } from 'rxjs';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DASHBOARD_SETTINGS_CHANGES,\n DashboardDetailsTabId,\n DashboardDetailsTabs,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { first } from 'rxjs/operators';\nimport { newDashboardTab } from './new-dashboard.guard';\nimport { DashboardDetailService } from './dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent implements OnInit, OnChanges, OnDestroy {\n isCollapsed = true;\n currentContext: ContextData;\n currentDashboard: ContextDashboard;\n @Input() isReport: boolean;\n @Input() deviceType: string;\n @Input() context: any;\n @Input() mo: ContextDashboardManagedObject;\n @Input() dashboard: ContextDashboard;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability = false;\n deviceTypeValue: string;\n displayDeviceTypeValue: string;\n icons: string[];\n namePlaceholder: string;\n tabs$: Observable<Tab[]>;\n selectedTab: DashboardDetailsTabId = DashboardDetailsTabId.GENERAL;\n dashboardDetailsForm: ReturnType<DashboardDetailService['initForm']>;\n generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n allowTypeDashboard: AllowTypeDashboard;\n isEdit: boolean;\n @Output() dashboardSaved = new EventEmitter<ContextDashboard>();\n @Output() previewChanged = new EventEmitter<any>();\n private destroy$: Subject<void> = new Subject();\n\n readonly TABS_OUTLET_NAME = 'dashboardTabs';\n readonly TABS: DashboardDetailsTabs = {\n general: {\n featureId: DashboardDetailsTabId.GENERAL,\n priority: 30,\n label: gettext('General')\n },\n appearance: {\n featureId: DashboardDetailsTabId.APPEARANCE,\n priority: 20,\n label: gettext('Appearance')\n },\n versionHistory: {\n featureId: DashboardDetailsTabId.VERSIONHISTORY,\n priority: 10,\n label: gettext('Version history')\n }\n };\n\n constructor(\n private contextDashboardService: ContextDashboardService,\n private translateService: TranslateService,\n private contextRoute: ContextRouteService,\n private activatedRoute: ActivatedRoute,\n private tabsService: TabsService,\n private router: Router,\n private inventory: InventoryService,\n private route: ActivatedRoute,\n private dashboardDetailService: DashboardDetailService,\n private appState: AppStateService,\n private groupService: GroupService,\n private modal: ModalService,\n private gainsightService: GainsightService\n ) {}\n\n ngOnInit() {\n this.tabs$ = this.tabsService.items$;\n this.currentContext = this.contextRoute.getContextData(this.activatedRoute);\n this.deviceTypeValue = this.context?.type;\n this.displayDeviceTypeValue =\n this.context &&\n this.groupService.isGroup(this.context) &&\n !this.groupService.isAsset(this.context)\n ? this.translateService.instant(gettext('Group'))\n : this.deviceTypeValue;\n\n this.updateAllowTypeDashboard();\n this.initForm();\n }\n\n ngOnChanges(): void {\n this.updateAllowTypeDashboard();\n }\n\n ngAfterContentInit(): void {\n if (!this.isEdit) {\n this.initializeConfiguration();\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async save() {\n const oldDashboard = cloneDeep(this.dashboard);\n this.dashboard = {\n ...this.dashboard,\n ...this.generalSettingsForm.value,\n ...this.appearanceSettingsForm.value\n };\n const dashboardSettingChanges: string[] = Object.keys(this.dashboard).filter(key => {\n if (key === 'c8y_IsNavigatorNode') {\n return !!oldDashboard[key] !== !!this.dashboard[key];\n }\n return !isEqual(oldDashboard[key], this.dashboard[key]);\n });\n\n this.dashboard.author = this.appState.currentUser.value.userName;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n\n this.dashboard.deviceTypeValue ??= this.deviceTypeValue;\n this.dashboard.historyDescription =\n this.updateDashboardHistoryDescription(dashboardSettingChanges);\n if (!this.isEdit && !this.isReport) {\n await this.createNewDashboard();\n } else if (!this.isEdit && this.isReport) {\n await this.createNewReport();\n } else {\n await this.updateDashboard();\n this.mo.c8y_DashboardHistory = [\n this.dashboard,\n ...(this.mo?.c8y_DashboardHistory ? this.mo.c8y_DashboardHistory : [])\n ];\n }\n }\n\n updateDashboardHistoryDescription(dashboardChanges: string[]): DashboardHistoryDescription {\n return {\n changeType: this.isEdit ? 'update' : 'create',\n dashboardSettingChanges: dashboardChanges\n .filter(value => value !== 'deviceType')\n .map(value => DASHBOARD_SETTINGS_CHANGES[value] || value),\n deviceType: dashboardChanges.find(value => value === 'deviceType')\n ? this.dashboard.deviceType\n : undefined\n };\n }\n\n selectTab(selectedTab: DashboardDetailsTabId) {\n this.selectedTab = selectedTab;\n this.tabsService.refresh();\n }\n\n async cancel() {\n if (!this.isEdit && !this.isReport) {\n // dashboard creation in it's own tab- confirm and cleanup triggered in canDeactivate during routing\n this.tabsService.items$.pipe(first()).subscribe((tabs: Tab[]) => {\n const tab = tabs.find(t => t.featureId !== newDashboardTab.featureId);\n this.router.navigate(typeof tab.path === 'string' ? [tab.path] : tab.path, {\n replaceUrl: true\n });\n });\n return;\n } else if (!this.isEdit && this.isReport) {\n this.router.navigate(['reports']);\n return;\n } else if (this.dashboardDetailsForm.dirty && !(await this.confirmClosing())) {\n return;\n }\n this.cleanupAfterDetailsClose();\n }\n\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n let canDeactivate: boolean;\n if (this.isCollapsed || !this.dashboardDetailsForm.dirty) {\n canDeactivate = true;\n } else {\n if (omitConfirm) {\n canDeactivate = false;\n } else {\n canDeactivate = await this.confirmClosing();\n }\n }\n if (canDeactivate) {\n this.cleanupAfterDetailsClose();\n }\n return canDeactivate;\n }\n\n show(isEdit: boolean) {\n this.isEdit = isEdit;\n if (this.isEdit) {\n this.edit();\n }\n this.initForm();\n this.isCollapsed = false;\n }\n\n async revertDashboard(dashboard: ContextDashboard) {\n this.dashboard = dashboard;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n await this.updateDashboard();\n }\n\n async duplicateWithoutType(): Promise<void> {\n const newDashboardName = this.translateService.instant(gettext('{{ dashboardName }} (copy)'), {\n dashboardName: this.generalSettingsForm.value.name\n });\n this.generalSettingsForm.patchValue({\n deviceType: false,\n name: newDashboardName\n });\n // setting edition to false so new dashboard can be created as copy of current one\n this.isEdit = false;\n await this.save();\n }\n\n private updateAllowTypeDashboard(): void {\n this.allowTypeDashboard = this.contextDashboardService.shouldAllowToSetDashboardType(\n this.mo,\n this.currentContext\n );\n }\n\n private initForm(): void {\n this.dashboardDetailsForm = this.dashboardDetailService.initForm(\n this.dashboard,\n this.isReport,\n this.allowTypeDashboard\n );\n this.generalSettingsForm = this.dashboardDetailsForm.get('generalSettingsForm') as FormGroup;\n this.appearanceSettingsForm = this.dashboardDetailsForm.get(\n 'appearanceSettingsForm'\n ) as FormGroup;\n }\n\n private async confirmClosing(): Promise<boolean> {\n try {\n await this.modal.confirm(\n gettext('Close dashboard details'),\n gettext(\n 'Are you sure you want to close dashboard details? All unsaved changes will be lost.'\n ),\n Status.WARNING,\n {\n ok: gettext('Close'),\n cancel: gettext('Cancel')\n }\n );\n return true;\n } catch (e) {\n return false;\n }\n }\n\n private async createNewDashboard() {\n const mo: ContextDashboardManagedObject = await this.contextDashboardService.create(\n this.dashboard,\n this.currentContext\n );\n\n await this.onCreateGSEvent(mo);\n this.cleanupAfterDetailsClose();\n await this.contextDashboardService.navigateToDashboard(mo, true);\n }\n\n private async onCreateGSEvent(mo: ContextDashboardManagedObject) {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: dashboardName,\n id: mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: mo.c8y_Dashboard.deviceType ? mo.c8y_Dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(\n this.currentContext.contextData as IManagedObject\n )\n });\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : await this.gainsightService.hashGroupName(str);\n }\n\n private async createNewReport() {\n try {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = this.dashboard;\n const report = (\n await this.contextDashboardService.createReport({\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n } as Partial<IManagedObject>)\n ).data;\n\n await this.contextDashboardService.create(\n this.dashboard,\n undefined,\n `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`\n );\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_REPORT,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: report.name,\n id: report.id,\n context: PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n });\n if (report.c8y_IsNavigatorNode) {\n this.contextDashboardService.addReportNavigatorNode(report);\n }\n this.cleanupAfterDetailsClose();\n await this.router.navigate(['reports', report.id]);\n } catch (ex) {\n // intended empty\n }\n }\n\n private async updateDashboard() {\n try {\n const dashboardMO: ContextDashboardManagedObject = cloneDeep(this.mo);\n const cfg = this.dashboard;\n if (this.isReport) {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = cfg;\n dashboardMO.c8y_Dashboard = cfg;\n await this.updateReport({\n id: this.context.id,\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n });\n } else {\n dashboardMO.c8y_Dashboard = cfg;\n }\n\n const updatedDashboardMo = await this.contextDashboardService.update(\n dashboardMO,\n this.currentContext\n );\n this.cleanupAfterDetailsClose();\n\n this.dashboardSaved.emit(updatedDashboardMo);\n } catch (ex) {\n // intended empty\n }\n }\n\n private edit() {\n if (this.isReport) {\n const { name, icon, priority, c8y_IsNavigatorNode, description } = this.context;\n Object.assign(this.dashboard, { name, icon, priority, c8y_IsNavigatorNode, description });\n }\n this.isNamedDashboard = this.contextDashboardService.isNamed(this.mo);\n this.selectedTab =\n this.hideAvailability && this.isNamedDashboard\n ? DashboardDetailsTabId.APPEARANCE\n : DashboardDetailsTabId.GENERAL;\n this.initializeConfiguration();\n }\n\n private initializeConfiguration() {\n const defaultDashboardCfg: Partial<ContextDashboard> = {\n name: this.translateService.instant(this.isReport ? gettext('Report') : gettext('Dashboard')),\n priority: this.isReport\n ? REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n : this.dashboardDetailService.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.dashboardDetailService.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType,\n columns: 24\n };\n\n if (this.dashboard) {\n this.currentDashboard = clone(this.dashboard);\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailsForm.markAsDirty();\n }\n this.namePlaceholder = this.isReport ? gettext('e.g. My report') : gettext('e.g. My dashboard');\n }\n\n private async updateReport(mo: Partial<IManagedObject>) {\n mo.c8y_IsNavigatorNode = mo.c8y_IsNavigatorNode ? {} : null;\n const res = await this.inventory.update(mo);\n this.context = res.data;\n if (this.route.parent) {\n this.route.parent.snapshot.data.contextData = this.context;\n }\n this.contextDashboardService.updateNavigatorItem(res.data);\n }\n\n private cleanupAfterDetailsClose() {\n this.isCollapsed = true;\n if (!this.isEdit) {\n const dashboardContext = this.route.snapshot.data.dashboard;\n // hide New dashboard tab\n const tmpNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // don't hide the new dashboard tab when clicking on the add dashboard button from another dashboard.\n if (!tmpNewDashboardTab || dashboardContext?.c8y_Dashboard) {\n return;\n }\n // hide tab and make it appear as last one to prevent navigating to it\n tmpNewDashboardTab.hide = true;\n tmpNewDashboardTab.priority = -Infinity;\n this.tabsService.refresh();\n }\n this.previewChanged.emit(this.dashboard);\n }\n}\n","<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { sortBy, cloneDeep, get, omit } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardConfig, CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetService {\n widgets: DynamicComponentDefinition[];\n\n constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Optional()\n @Inject(CONTEXT_DASHBOARD_CONFIG)\n public moduleConfig: ContextDashboardConfig | undefined\n ) {\n this.dynamicComponentService.items$.subscribe(widgets => {\n this.widgets = widgets;\n });\n }\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById(componentId);\n }\n\n getWidgetDefinitions() {\n const translatedComponents = this.widgets.map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n // cloneDeep and injector lead to a performance issue. We removing the injectors here,\n // as they are not needed, to avoid use of a lot of CPU for cloning.\n const translatedComponentsWithoutInjector = translatedComponents.map(cmp =>\n omit(cmp, 'injector')\n );\n const filterFn: (component: DynamicComponentDefinition) => boolean =\n this.moduleConfig?.widgetFilter ||\n (({ data }) => !(data && data.settings && data.settings.noNewWidgets));\n return cloneDeep(sortBy(translatedComponentsWithoutInjector, 'label').filter(filterFn));\n }\n\n async mapLegacy(widget: Partial<Widget>): Promise<Widget> {\n const cmp = await this.getWidgetDefinition(widget.componentId || widget.name);\n widget = this.mapDisplaySettings(widget, cmp);\n\n if (get(cmp, 'data.settings.upgrade')) {\n widget.widgetComponent = cmp.data.settings.widgetComponent;\n widget.configComponent = cmp.data.settings.configComponent;\n widget.templateUrl = cmp.data.settings.templateUrl;\n widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;\n widget.transformConfigWithContext =\n cmp.data.settings.componentTransformConfigWithContext ||\n cmp.data.settings.transformConfigWithContext ||\n widget.transformConfigWithContext;\n } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget as Widget;\n }\n\n private mapDisplaySettings(\n widget: Partial<Widget>,\n cmp: DynamicComponentDefinition\n ): Partial<Widget> {\n if (cmp?.data?.displaySettings) {\n widget.config = { displaySettings: cmp.data.displaySettings, ...(widget.config || {}) };\n }\n return widget;\n }\n}\n","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","<div class=\"legend form-block\" translate>Preview</div>\n<label *ngIf=\"tab\" translate>Tab and layout</label>\n<label *ngIf=\"!tab\" translate>Layout</label>\n<div class=\"dashboard-preview-slot\" [ngClass]=\"previewClasses\">\n <div\n class=\"page-tabs page-tabs-horizontal navigator-open p-absolute overflow-hidden\"\n style=\"left: 0; margin: 0 15px\"\n *ngIf=\"tab\"\n >\n <div class=\"tabContainer hidden-xs\">\n <ul role=\"menu\" class=\"nav nav-tabs nav-tabsc8y\">\n <li role=\"menuitem\" class=\"active\" style=\"left: 16px\">\n <a routerlinkactive=\"\" title=\"{{ tab.name }}\">\n <i class=\"text-primary\" [c8yIcon]=\"tab.icon\"></i>\n <span class=\"txt\">{{ tab.name }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div class=\"visible-xs mobile-tabs\"></div>\n </div>\n <div [ngClass]=\"{ 'm-t-64': !!tab }\">\n <div class=\"card card-dashboard\" style=\"height: 300px\">\n <div class=\"card-header-actions\" style=\"z-index: 8\">\n <div class=\"card-title\">\n <span translate>Widget title</span>\n </div>\n <div class=\"header-actions\">\n <div class=\"optionsBtn dropdown\">\n <button\n type=\"button\"\n title=\"{{ 'Settings' | translate }}\"\n (click)=\"(false)\"\n class=\"btn btn-dot dropdown-toggle c8y-dropdown\"\n aria-haspopup=\"true\"\n >\n <i c8yIcon=\"cog\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-inner-scroll p-t-16\">\n <p translate>Widget example content.</p>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnDestroy, ViewChild } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { DynamicComponentDefinition, Widget, DynamicComponentComponent } from '@c8y/ngx-components';\nimport { AssetSelectionChangeEvent } from '@c8y/ngx-components/assets-navigator';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n selectedDevice: IManagedObject;\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\n styling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n defaultStyling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n widgetHasConfigComponent: boolean;\n\n @ViewChild('config', { static: false })\n dynamicComponent: DynamicComponentComponent;\n\n @ViewChild('configForm', { static: false })\n configForm: NgForm;\n\n get isEdit() {\n return !!this.current;\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.mo.c8y_Dashboard?.deviceType && !!this.mo.c8y_Dashboard?.deviceTypeValue;\n }\n\n result: Promise<Widget> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n private searchSub: Subscription;\n private _save: (value: Widget) => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n private inventory: InventoryService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n async ngAfterContentInit(): Promise<void> {\n this.components = this.widgetService.getWidgetDefinitions();\n\n if (this.selected) {\n this.current = clone(this.selected);\n this.select(this.selected, this.isEdit ? 'config' : 'select');\n }\n\n this.searchSub = this.searchChange$\n .pipe(\n switchMap((event: KeyboardEvent) => iif(() => event.which !== 13, timer(200), timer(10)))\n )\n .subscribe(() => {\n this.search();\n });\n\n this.setStylings();\n\n if (this.widgetConfig?.device) {\n const { data } = await this.inventory.detail(this.widgetConfig.device.id);\n this.selectedDevice = data;\n }\n }\n\n isSaveDisabled(): boolean {\n return this.configForm?.invalid || this.checkIfDeviceRequired();\n }\n\n checkIfDeviceRequired() {\n return (\n !this.widgetConfig ||\n (!this.widgetConfig.settings.deviceTargetNotRequired &&\n !this.widgetConfig.device &&\n !this.widgetConfig.settings.noDeviceTarget)\n );\n }\n\n selectionChanged(selection?: AssetSelectionChangeEvent) {\n this.widgetConfig.device = selection?.change?.item;\n this.dynamicComponent.emitConfigChange({\n device: this.widgetConfig.device\n });\n }\n\n async save() {\n const hookSuccess = await this.dynamicComponent?.callLifeCycleHooks().toPromise();\n if (!hookSuccess) {\n return;\n }\n\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (\n this.widgetConfig &&\n this.widgetConfig.device &&\n // serializing will be handled by resolver\n !this.selected?.resolve?.device\n ) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, ['settings', 'displaySettings']),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\n if (mode === 'config' && this.configForm) {\n const formGroup = this.configForm.control;\n for (const control of Object.keys(formGroup.controls)) {\n formGroup.removeControl(control);\n }\n }\n\n cmp.data = cmp.data || {};\n this.selected = cmp;\n\n this.isUpgrade = !!get(cmp, 'data.settings.upgrade');\n this.contextDashboardService.formDisabled = this.isUpgrade;\n\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n /* this.selected.component cannot be checked since it is faulty for widgets like Help and Service, \n but exists for Applications widget and this would cause chaotic behaviour.\n */\n this.widgetHasConfigComponent =\n !!this.selected.loadConfigComponent || mode === 'select' || mode === 'config';\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\n }\n\n search() {\n if (this.searchTerm.length > 0) {\n this.searchResult = this.components.filter(cmp =>\n new RegExp(escapeRegExp(this.searchTerm.trim()), 'i').test(cmp.label)\n );\n } else {\n this.resetSearch();\n }\n }\n\n resetSearch() {\n this.searchTerm = '';\n this.searchResult = undefined;\n }\n\n changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getStyle(isPreview = false) {\n const cssClasses = {};\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.headerClass)) {\n cssClasses[this.styling.headerClass] = true;\n }\n\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.contentClass)) {\n cssClasses[this.styling.contentClass] = true;\n }\n\n if (isPreview) {\n cssClasses[`dashboard-theme-${this.defaultStyling.contentClass.split('-').pop()}`] = true;\n }\n\n return cssClasses;\n }\n\n ngOnDestroy(): void {\n this.contextDashboardService.formDisabled = true;\n if (this.searchSub) {\n this.searchSub.unsubscribe();\n }\n }\n\n hasConfig() {\n if (this.widgetConfig.settings?.upgrade) {\n return (\n this.widgetConfig.settings?.configComponent || this.widgetConfig.settings?.configTemplateUrl\n );\n }\n return !this.dynamicComponent?.error;\n }\n\n private isAnyOfAlarmsWidget(): boolean {\n return (\n this.widgetConfig?.settings?.alarmListWidget ||\n this.widgetConfig?.settings?.criticalAlarmsWidget ||\n this.widgetConfig?.settings?.recentAlarmsWidget\n );\n }\n\n private setStylings(): void {\n const dashboardClasses: string[] =\n (this.mo.c8y_Dashboard?.classes && Object.keys(this.mo.c8y_Dashboard.classes)) || [];\n const dashboardWidgetClasses: string[] =\n (this.mo.c8y_Dashboard?.widgetClasses && Object.keys(this.mo.c8y_Dashboard.widgetClasses)) ||\n [];\n const widgetClasses: string[] = this.isEdit ? Object.keys(this.current.data.classes) : [];\n\n this.styling = this.setDefaultStyle([\n ...dashboardClasses,\n ...dashboardWidgetClasses,\n ...widgetClasses\n ]);\n this.defaultStyling = this.setDefaultStyle([...dashboardClasses, ...dashboardWidgetClasses]);\n }\n\n private isDashboardDefaultStyle(className) {\n const allClasses = {\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n };\n const styles = Object.keys(allClasses).map(cssClass => ({ class: cssClass }));\n const style = this.contextDashboardService.getStyling(\n styles,\n className.split('-').pop(),\n undefined\n );\n return !!style;\n }\n\n private setDefaultStyle(setClasses: string[]) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n const styles = this.contextDashboardService\n .getFilteredDashboardStyles(setClasses)\n .map(c => c.split('-').pop());\n styles.forEach(styleName => {\n contentClass = this.contextDashboardService.getStyling(\n WIDGET_CONTENT_CLASSES,\n styleName,\n contentClass\n );\n headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n headerClass\n );\n });\n\n return { headerClass, contentClass };\n }\n\n private composeWidgetConfig(selectedComponent, context = {}) {\n const setting = {\n settings: {\n ...selectedComponent.data.settings,\n ...get(selectedComponent.data.settings, 'ng1.options'),\n ...get(selectedComponent.data, 'ng1.options'),\n context,\n dashboardMo: this.mo.c8y_Dashboard\n },\n ...selectedComponent.data.config\n } as ContextWidgetConfig;\n return this.applyTargetIfDeviceDashboard(setting);\n }\n\n private applyTargetIfDeviceDashboard(widgetConfig: ContextWidgetConfig) {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","<div class=\"modal-header\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0 elevation-md\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search…' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n data-cy=\"widget-config--widget-list\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n [ngStyle]=\"isLegacyAlarmWidget ? { 'pointer-events': 'none', opacity: '0.5' } : {}\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig(),\n showSelected: true\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24 p-t-16': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"widget-config--cancel-widget\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n data-cy=\"widget-config--save-widget\"\n (click)=\"save()\"\n [disabled]=\"\n !dynamicComponent ||\n (((this.contextDashboardService.formDisabled$ | async) || isSaveDisabled()) &&\n !!widgetHasConfigComponent)\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { cloneDeep } from 'lodash-es';\n\n/**\n * Holds current state of dashboard children during edit mode.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardOriginatorService {\n /**\n * Current dashboard children state name for indicating what change will be undone.\n */\n get currentStateName(): string {\n return this.state?.name;\n }\n /**\n * Current dashboard children state.\n * @private\n */\n private state: DashboardChildrenState;\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n initState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Updates dashboard children state when it is changed or restored with undo/redo.\n * @param state Dashboard children updated state.\n */\n setState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Returns copy of current state.\n */\n getState(): DashboardChildrenState {\n return cloneDeep(this.state);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\n\n/**\n * Caretaker is responsible for undo and redo functionalities.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardCaretakerService {\n /**\n * Current undo stack length for defining undo button disable state.\n */\n get undoStackLength(): number {\n return this.undoStack.length;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its' title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.redoStack[this.redoStack.length - 1];\n }\n /**\n * List of dashboard children changes.\n * @private\n */\n private undoStack: DashboardChildrenState[] = [];\n /**\n * List of dashboard children changes that were undone and can be redone back.\n * @private\n */\n private redoStack: DashboardChildrenState[] = [];\n\n constructor(private originator: DashboardOriginatorService) {}\n /**\n * Adds current dashboard children state to undo stack and clears redo stack.\n */\n backup(): void {\n this.undoStack.push(this.originator.getState());\n this.redoStack = [];\n }\n /**\n * Reverts last dashboard children change and puts it in redo stack.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState | undefined {\n if (!this.undoStack.length) {\n return;\n }\n const memento = this.undoStack.pop();\n this.redoStack.push(this.originator.getState());\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState | undefined {\n if (!this.redoStack.length) {\n return;\n }\n this.undoStack.push(this.originator.getState());\n const memento = this.redoStack.pop();\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Clears both undo and redo stack, sets current state as initial state and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset() {\n const initialItem = this.undoStack[0] || this.originator.getState();\n this.undoStack = [];\n this.redoStack = [];\n this.originator.initState(initialItem);\n return initialItem;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\nimport { DashboardCaretakerService } from './dashboard-caretaker.service';\nimport { DashboardChildrenState } from '../context-dashboard.model';\n/**\n * Facade for implementation of Memento design pattern (caretaker, originator). Responsible for undo/redo feature\n * during edit mode of dashboard.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardEditModeService {\n get undoButtonDisabled(): boolean {\n return this.caretaker.undoStackLength === 0;\n }\n /**\n * Current dashboard change name for undo button title.\n */\n get changeToUndoName(): string {\n return this.originator.currentStateName;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.caretaker.redoStackLastItem;\n }\n\n constructor(\n private originator: DashboardOriginatorService,\n private caretaker: DashboardCaretakerService\n ) {}\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n init(state: DashboardChildrenState) {\n this.originator.initState(state);\n }\n /**\n * Saves current state for further undo actions and sets new dashboard children state.\n * @param state Dashboard children updated state.\n */\n newState(state: DashboardChildrenState) {\n this.caretaker.backup();\n this.originator.setState(state);\n }\n /**\n * Returns copy of current state.\n */\n getCurrentState(): DashboardChildrenState {\n return this.originator.getState();\n }\n /**\n * Reverts last dashboard children change.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState {\n return this.caretaker.undo();\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState {\n return this.caretaker.redo();\n }\n /**\n * Resets dashboard children state to initial one and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset(): DashboardChildrenState {\n return this.caretaker.reset();\n }\n}\n","import {\n Component,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ActionBarService,\n AlertService,\n BreadcrumbItem,\n CopyDashboardDisabledReason,\n DashboardChange,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardCopyPermission,\n DynamicComponentDefinition,\n GainsightService,\n gettext,\n memoize,\n ModalService,\n RevertChangeType,\n Status,\n Widget,\n WidgetChange,\n WidgetsDashboardComponent\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, every, findIndex, kebabCase, keyBy, omit, some } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n CanDeactivateComponent,\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n DASHBOARD_CHILDREN_STATE_NAME,\n DashboardChildrenState,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetService } from './widget.service';\nimport { DashboardEditModeService } from './memento/dashboard-edit-mode.service';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * The context dashboard is a dashboard which resolves it data from the current context (device or group)\n * it is displayed on. It usually uses the route.data for it, but you can pass\n * a different managedObject to the [mo] input parameter to change that behavior.\n */\n@Component({\n selector: 'c8y-context-dashboard',\n templateUrl: './context-dashboard.component.html',\n host: {\n style: `\n display: block;\n `,\n class: 'dashboard c8y-grid-dashboard'\n }\n})\nexport class ContextDashboardComponent implements OnInit, OnDestroy, CanDeactivateComponent {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle = false;\n\n @Input()\n defaultWidgets: Widget[] = [];\n @Input('canCopy')\n _canCopy = true;\n @Input()\n canDelete = true;\n @Input()\n isLoading = true;\n @Input()\n breadcrumbSettings: BreadcrumbItem;\n @Input()\n showContextHelpButton = true;\n /** Whether to translate widget titles. However, dashboard's own setting takes precedence. It does not override dashboard's setting */\n @Input() translateWidgetTitle: boolean;\n /**\n * Hides dashboard availability selection.\n */\n @Input()\n hideAvailability = false;\n\n @HostBinding('class')\n class = '';\n\n @ViewChild(DashboardDetailComponent, { static: true }) dashboardDetails: DashboardDetailComponent;\n @ViewChild(WidgetsDashboardComponent, { static: true })\n widgetsDashboard: WidgetsDashboardComponent;\n\n get disabled(): boolean {\n return !this.hasPermissionToEditDashboard || !this.dashboardDetails?.isCollapsed;\n }\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n title: string;\n isCopyDisabled: DashboardCopyPermission;\n isReport: boolean;\n canCopy = true;\n readonly dashboardTypeLabel = gettext('Dashboard for \"{{ dashboardType }}\"');\n readonly dashboardTypePopover = gettext(`\n The layout and configuration of this dashboard is used by all other assets of model type\n <strong>{{ dashboardType }}</strong>. Any changes made to this dashboard instance will be applied to all\n other instances.`);\n private dataSub: Subscription;\n private hasPermissionToEditDashboard = false;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private alert: AlertService,\n private renderer: Renderer2,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig,\n private widgetService: WidgetService,\n private bsModal: BsModalService,\n private gainsightService: GainsightService,\n private actionBarService: ActionBarService,\n private translateService: TranslateService,\n private modal: ModalService,\n public editModeService: DashboardEditModeService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\n }\n\n @HostListener('window:beforeunload', ['$event'])\n async beforeUnloadHandler($event: BeforeUnloadEvent) {\n const canDeactivate = await this.canDeactivate(true);\n if (!canDeactivate) {\n $event.returnValue = true;\n }\n }\n\n /**\n * Applies the current context to the widget\n * @param widget The widget to apply the context to.\n */\n applyDeviceTarget(widget) {\n if (widget.config.device) {\n widget.config.device = { id: this.context.id, name: this.context.name };\n }\n }\n\n /**\n * Removes the route listener.\n */\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n /**\n * Guards component from unintended navigation away or closing tab without saving changes.\n * Navigation continues if true is returned, and navigation is cancelled if returned value is false.\n * @param omitConfirm Omits confirm calls inside method body (without this param, when method is used in\n * on 'beforeunload' event handler, error is thrown in console because confirm is blocked by browser anyway and returns false)\n */\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n const canDeactivate =\n (await this.dashboardDetails.canDeactivate(omitConfirm)) &&\n (await this.widgetsDashboard.canDeactivate(omitConfirm));\n\n // Needed in order to reset edit mode, otherwise when switching between dashboards, the edit mode is still enabled.\n if (canDeactivate) {\n await this.cancelEditMode(true);\n }\n return canDeactivate;\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n const mesg = gettext(\n 'You are about to reset the widgets of this dashboard. All changes to the dashboard widgets will get lost and cannot be recovered. Do you want to proceed?'\n );\n\n try {\n await this.modal.confirm(gettext('Reset widgets'), mesg, Status.WARNING, {\n ok: gettext('Reset`dashboard`'),\n cancel: gettext('Cancel')\n });\n\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n this.mo.c8y_Dashboard.historyDescription = { changeType: 'reset' };\n await this.contextDashboardService.update(this.mo);\n await this.onLoad();\n } catch (error) {\n if (error) {\n this.alert.addServerFailure(error);\n }\n } finally {\n this.isLoading = false;\n }\n }\n /**\n * Method called on every widgets dimensions or position change but also for adding new widget (because adding\n * widget causes layout changes). It recognizes what type of change has been done and updates current widgets state\n * accordingly.\n * @param child Change object.\n */\n positionOrWidgetDimensionChange(child: DashboardChildChange | DashboardChange): void {\n const currentState = this.editModeService.getCurrentState()?.children || {};\n const descriptionProp: keyof DashboardHistoryDescription['widgetChanges'] =\n child.children.length === Object.values(currentState).length ? 'arrangement' : 'added';\n let changeName: DashboardChildrenState['name'];\n let widgetsChanged: Widget[];\n if (descriptionProp === 'added') {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.added;\n const addedWidget = child.children.find(c => !currentState[c.data.id]);\n widgetsChanged = [addedWidget.data];\n } else {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.arrangement;\n widgetsChanged = child.children\n .map(c => {\n const lastStateChild = currentState[c.data.id];\n if (\n c.x != lastStateChild._x ||\n c.y != lastStateChild._y ||\n c.width != lastStateChild._width ||\n c.height != lastStateChild._height\n ) {\n return c.data;\n }\n })\n .filter(Boolean);\n }\n\n this.updateDashboardChildren(child, changeName, descriptionProp, widgetsChanged);\n }\n\n async revertChange(revertType: RevertChangeType): Promise<void> {\n let dashboardChildren: ContextDashboard['children'];\n if (revertType === 'undo') {\n dashboardChildren = this.editModeService.undo().children;\n } else {\n dashboardChildren = this.editModeService.redo().children;\n }\n await this.setWidgets(dashboardChildren);\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n * @param changeName Name of the change to indicate it on undo/redo button.\n * @param descriptionProp Property to add to dashboard change history.\n * @param widgetsChanged List of changed widgets.\n */\n updateDashboardChildren(\n child: DashboardChildChange | DashboardChange,\n changeName: DashboardChildrenState['name'],\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const { children } = child;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n this.setNewState(\n { name: changeName, children: mappedChildren },\n descriptionProp,\n widgetsChanged\n );\n }\n\n /**\n * Copies the dashboard and current context to a clipboard.\n */\n async copyDashboard() {\n const viewContext = this.route.parent.snapshot.data?.context;\n\n this.contextDashboardService.copyClipboard = {\n dashboardId: this.mo.id,\n dashboard: cloneDeep(this.mo.c8y_Dashboard),\n context: cloneDeep({ context: viewContext, contextData: this.context })\n };\n\n if (viewContext) {\n const ctx = viewContext.split('/').shift();\n const msg = this.translateService.instant(\n 'Dashboard copied. Navigate to the desired {{ ctx }} and select \"Paste dashboard\"',\n { ctx }\n );\n this.alert.success(msg);\n }\n this.actionBarService.refresh();\n }\n\n /**\n * Remove the complete dashboard and navigate away.\n */\n async deleteDashboard() {\n await this.contextDashboardService.delete(this.mo);\n if (this.route.parent) {\n const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');\n this.router.navigateByUrl(route);\n }\n await this.onDeleteGSEvent();\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.dashboard?.deviceType;\n }\n\n /**\n * Edits a widget on the dashboard.\n * @param change The widget change event.\n */\n async editWidget(change: WidgetChange) {\n const { x, y, width, height } = change.source;\n const component = await this.widgetService.getWidgetDefinition(\n change.widget.name || change.widget.componentId\n );\n if (!component) {\n this.addWidget();\n return;\n }\n await this.addWidget({\n ...component,\n data: { ...component.data, ...change.widget, _x: x, _y: y, _width: width, _height: height }\n });\n }\n\n /**\n * Adds a widget to the dashboard.\n * @param selected Define a selected component to switch to edit mode directly.\n */\n async addWidget(selected?: DynamicComponentDefinition) {\n const partialCloneSelected = selected\n ? { ...selected, data: cloneDeep(selected.data) }\n : selected;\n\n const activeContext = this.context.contextData ? this.context.contextData : this.context;\n const initialState: Partial<WidgetConfigComponent> = {\n mo: this.mo,\n context: this.context.c8y_Report ? {} : activeContext,\n selected: partialCloneSelected\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState,\n ignoreBackdropClick: true,\n keyboard: false\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n // New state in edit mode is added only for widget update. When adding widget, layout change is always triggered,\n // so it's easier to set new state on layout change only\n if (selected) {\n const children = {\n ...this.editModeService.getCurrentState().children,\n [newWidget.id]: newWidget\n };\n this.setNewState({ name: DASHBOARD_CHILDREN_STATE_NAME.config, children }, 'config', [\n newWidget\n ]);\n }\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n async saveWidgetsToDashboard() {\n const currentState = this.editModeService.getCurrentState();\n this.mo.c8y_Dashboard.children = currentState.children;\n\n this.mo.c8y_Dashboard.historyDescription = {\n changeType: 'update',\n widgetChanges: this.mapStateToHistoryDescription(currentState.changeHistory)\n };\n await this.contextDashboardService.update(this.mo);\n this.editModeService.reset();\n this.editModeService.init({\n name: DASHBOARD_CHILDREN_STATE_NAME.initial,\n children: this.mo.c8y_Dashboard.children,\n changeHistory: {}\n });\n\n this.isCopyDisabled = this.getDashboardCopyPermissionState();\n }\n\n async cancelEditMode(onDeactivate = false): Promise<void> {\n const dashboardChildren = this.editModeService.reset();\n if (this.dashboard) {\n this.dashboard.historyDescription = {};\n }\n this.widgetsDashboard.editMode$.next(false);\n if (!onDeactivate) {\n // when setWidgets is called during navigation from device to device, navigation fails\n await this.setWidgets(dashboardChildren.children);\n }\n }\n\n /**\n * Updates a widget or adds a new one if it doesn't exist on\n * the dashboard.\n * @param widget The new widget\n */\n async updateWidget(widget) {\n const index = findIndex(this.widgets, { id: widget.id });\n const isNew = index === -1;\n const mappedWidget = await this.widgetService.mapLegacy(widget);\n if (isNew) {\n this.widgets.push(mappedWidget);\n } else {\n this.widgets.splice(index, 1, mappedWidget);\n }\n }\n\n /**\n * Removes a widget and rearranges the remaining ones\n * if necessary.\n * @param change The change event.\n */\n async deleteWidget(change: WidgetChange) {\n try {\n const { widget, source } = change;\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n const { dashboard } = source;\n dashboard.children = dashboard.children.filter(c => c.data.id !== widget.id);\n\n // using setTimeout to give the component the chance to remove it.\n const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));\n await sleep(0);\n\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child, DASHBOARD_CHILDREN_STATE_NAME.removed, 'removed', [\n widget\n ]);\n } catch (e) {\n this.alert.addServerFailure(e);\n }\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n addDashboardClassToBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.addClass(document.body, cssClass);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n removeDashboardClassFromBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.removeClass(document.body, cssClass);\n });\n }\n\n async onLoad(trackExperience?: boolean) {\n this.hasPermissionToEditDashboard =\n this.dashboard && !this.dashboard.isTransient\n ? await this.contextDashboardService.canEditDashboard(this.mo)\n : false;\n this.canCopy =\n this._canCopy &&\n !this.dashboard?.isTransient &&\n (this.contextDashboardService.isDeviceDashboard(this.mo) ||\n this.contextDashboardService.isDeviceType(this.mo) ||\n this.contextDashboardService.isGroupDashboard(this.mo));\n const dashboardChildren: ContextDashboard['children'] = cloneDeep(\n this.mo.c8y_Dashboard?.children\n );\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard?.classes\n };\n this.isCopyDisabled = this.dashboard\n ? this.getDashboardCopyPermissionState()\n : { state: false, reason: null };\n this.editModeService.init({\n name: gettext('Initial state'),\n children: dashboardChildren,\n changeHistory: {}\n });\n\n await this.setWidgets(dashboardChildren, trackExperience);\n this.class = Object.keys(dashboardClasses).join(' ');\n if (this.isReport) {\n this.addReportDashboardSettings();\n }\n this.isLoading = false;\n\n if (!this.dashboard) {\n this.dashboardDetails.show(false);\n } else {\n await this.onLoadGSEvent();\n }\n }\n\n async dashboardPreview(layoutChanges: ContextDashboard) {\n if (layoutChanges?.classes) {\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...layoutChanges.classes\n };\n this.class = Object.keys(dashboardClasses).join(' ');\n } else if (this.dashboard) {\n this.dashboard.widgetClasses = {\n ...this.dashboard.widgetClasses,\n ...layoutChanges.widgetClasses\n };\n }\n }\n\n async reloadDashboard(dashboardMo: ContextDashboardManagedObject) {\n this.dashboard = dashboardMo.c8y_Dashboard;\n this.mo = dashboardMo;\n await this.onLoad();\n }\n\n private async setWidgets(\n dashboardChildren: ContextDashboard['children'],\n trackExperience = false\n ): Promise<void> {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n this.widgets = await Promise.all<Widget>(\n Object.values(dashboardChildren || {}).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n if (trackExperience) {\n this.gainsightService.triggerEvent('loadWidget', {\n widgetName: widget.componentId || widget.name\n });\n }\n return this.widgetService.mapLegacy(widget);\n })\n );\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard, isReport }) => {\n this.context = this.route.parent.snapshot.data.contextData || {};\n this.title = this.context?.name;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.isReport = isReport || this.contextDashboardService.isReport(this.mo);\n if (this.isReport && this.dashboard && !this.dashboard?.name) {\n this.dashboard.name = this.title;\n }\n if (this.isReport && this.dashboard) {\n this.dashboard.c8y_IsNavigatorNode = this.context.c8y_IsNavigatorNode;\n }\n this.patchSensorPhoneDashboard(this.dashboard, this.mo.owner, this.context?.type);\n this.onLoad(true);\n });\n }\n\n /**\n * To enable translation for widgets within the dashboard, the \"translateWidgetTitle\" flag must be enabled.\n * The property needs to be patched, as the \"Sensor App\" does not provide this setting.\n */\n private patchSensorPhoneDashboard(dashboard: ContextDashboard, owner: string, type: string) {\n if (type === 'c8y_SensorPhone' && owner?.includes('device_phone')) {\n dashboard.translateWidgetTitle = true;\n }\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(this.name, this.defaultWidgets, this.context)\n .subscribe(mo => {\n this.context = this.context || {};\n this.mo = mo;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad(true);\n });\n }\n\n private mergeWidgetClasses(widget: Widget): Record<string, boolean> {\n const hasHeaderClass = WIDGET_HEADER_CLASSES.find(\n el => widget.classes && widget.classes[el.class]\n );\n const widgetClasses = hasHeaderClass\n ? { ...widget.classes }\n : { ...this.dashboard.widgetClasses, ...widget.classes };\n return {\n card: true,\n 'card-dashboard': true,\n [kebabCase(widget.componentId || widget.name)]: true,\n ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({ _x: child.x, _y: child.y, _width: child.width, _height: child.height } as Widget)\n };\n }\n\n private addReportDashboardSettings() {\n this.setTitle = true;\n this.title = this.context?.name || gettext('New report');\n this.breadcrumbSettings = { icon: 'th', label: 'Reports', path: 'reports' };\n this.canDelete = false;\n }\n\n private getDashboardCopyPermissionState(): DashboardCopyPermission {\n if (!this.contextDashboardService.hasPermissionsToCopyDashboard()) {\n return { state: false, reason: CopyDashboardDisabledReason.PERMISSIONS };\n }\n const allDashboardChildrenAreValid = every(this.mo.c8y_Dashboard.children, child => {\n const config = child.config || {};\n const dataPoints = config.datapoints || [];\n return !(\n (config.device && config.device.id !== this.context.id) ||\n some(dataPoints, dataPoint => dataPoint.__target?.id !== this.context.id)\n );\n });\n if (!allDashboardChildrenAreValid) {\n return { state: false, reason: CopyDashboardDisabledReason.WRONG_REFERENCE };\n }\n return { state: true };\n }\n\n private setNewState(\n state: Pick<DashboardChildrenState, 'name' | 'children'>,\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const description = this.getDescriptionForNewState(descriptionProp, widgetsChanged);\n this.editModeService.newState({ ...state, changeHistory: description });\n }\n\n private getDescriptionForNewState(\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): DashboardChildrenState['changeHistory'] {\n const changeHistory = this.editModeService.getCurrentState().changeHistory;\n if (!changeHistory[descriptionProp]) {\n changeHistory[descriptionProp] = {};\n }\n widgetsChanged.forEach(w => {\n if (descriptionProp === 'removed' && changeHistory.added?.[w.id]) {\n // if widget was added during current edit session and then removed, it should not be at description at all\n delete changeHistory.added[w.id];\n if (changeHistory.config?.[w.id]) {\n delete changeHistory.config[w.id];\n }\n if (changeHistory.arrangement?.[w.id]) {\n delete changeHistory?.arrangement[w.id];\n }\n } else if (\n (descriptionProp === 'config' || descriptionProp === 'arrangement') &&\n changeHistory.added?.[w.id]\n ) {\n // if widget was added and then modified in current edit session, it should only be indicated as added\n } else {\n changeHistory[descriptionProp][w.id] = w;\n }\n });\n\n return changeHistory;\n }\n\n private mapStateToHistoryDescription(\n description: DashboardChildrenState['changeHistory']\n ): DashboardHistoryDescription['widgetChanges'] {\n const historyDescription: DashboardHistoryDescription['widgetChanges'] = {};\n for (const [key, value] of Object.entries(description)) {\n const widgets = Object.values(value);\n if (!widgets.length) {\n continue;\n }\n historyDescription[key] = Object.values(value).map(widget => widget.title);\n }\n return historyDescription;\n }\n\n private async onDeleteGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DELETE_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.DELETE,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(this.context)\n });\n }\n\n private async onLoadGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName =\n (await this.convertStringToHash(this.dashboard?.name)) ??\n this.extractDefaultDashboardName(this.mo) ??\n 'none';\n\n this.gainsightService.triggerEvent(\n this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS\n : PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS,\n {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_VIEW,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.LOAD,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id\n ? `${this.context.id}_${this.mo.id}`\n : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n : this.contextDashboardService.getContextForGS(this.context)\n }\n );\n }\n\n private extractDefaultDashboardName(obj: IManagedObject): string | null {\n const nameKey = Object.keys(obj).find(key => key.startsWith('c8y_Dashboard!name!'));\n if (nameKey) {\n return nameKey.split('!').pop();\n }\n return null;\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : this.gainsightService.hashGroupName(str);\n }\n}\n","<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n","import { Component, Inject, Optional, ViewChild } from '@angular/core';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport {\n CockpitDashboardConfig,\n COCKPIT_HOME_DASHBOARD_CONFIG,\n DEFAULT_COCKPIT_HOME_WIDGETS\n} from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent implements CanDeactivateComponent {\n defaultWidgets = DEFAULT_COCKPIT_HOME_WIDGETS;\n dashboardName = 'home-cockpit1';\n pageTitle: string = gettext('Home');\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(\n private appState: AppStateService,\n @Optional()\n @Inject(COCKPIT_HOME_DASHBOARD_CONFIG)\n private homeDashboardConfig: CockpitDashboardConfig\n ) {\n const config = {\n ...this.homeDashboardConfig,\n dashboardName: appState.currentApplication.value?.config?.homeDashboardName,\n userSpecific: appState.currentApplication.value?.config?.userSpecificHomeDashboard\n };\n this.applyDashboardConfig(config);\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard.canDeactivate();\n }\n\n private applyDashboardConfig(config: CockpitDashboardConfig) {\n if (!config) {\n return;\n }\n\n if (config.dashboardName) {\n this.dashboardName = config.dashboardName;\n }\n\n if (config.defaultWidgets) {\n this.defaultWidgets = config.defaultWidgets;\n }\n\n if (config.userSpecific && this.appState.currentUser.value) {\n this.dashboardName = `${this.appState.currentUser.value.userName.replace(/\\./g, '__')}_${\n this.dashboardName\n }`;\n }\n\n if (config.pageTitle) {\n this.pageTitle = config.pageTitle;\n }\n }\n}\n","<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { Component, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { gettext, ViewContext } from '@c8y/ngx-components';\nimport { DashboardContext } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-paste-dashboard-action',\n template: `\n <ng-template #templatePaste>\n <li>\n <button\n class=\"btn btn-link\"\n title=\"{{ buttonTitle | translate }}\"\n type=\"button\"\n (click)=\"pasteDashboard()\"\n [disabled]=\"pasteDisabled\"\n >\n <i class=\"m-r-4\" c8yIcon=\"clipboard\"></i>\n <span ngNonBindable translate [translateParams]=\"{ dashboardName: dashboardName }\">\n Paste dashboard \"{{ dashboardName }}\"\n </span>\n </button>\n </li>\n </ng-template>\n `\n})\nexport class PasteDashboardActionComponent implements OnInit {\n pasteDisabled = false;\n @ViewChild('templatePaste', { read: TemplateRef, static: true }) templatePaste;\n dashboardName = '';\n buttonTitle: string;\n private currentViewContext: ViewContext;\n private currentUrl: string;\n private contextMO: IManagedObject;\n private contextId: string;\n\n constructor(\n private vcRef: ViewContainerRef,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private inventoryService: InventoryService\n ) {}\n\n async ngOnInit() {\n this.currentUrl = this.router.url;\n this.contextId = this.currentUrl.match(/\\d+/)[0];\n\n const isDevice: boolean = new RegExp(/device\\/\\d+/).test(this.currentUrl);\n const isGroup: boolean = new RegExp(/group\\/\\d+/).test(this.currentUrl);\n this.currentViewContext = isDevice ? ViewContext.Device : isGroup ? ViewContext.Group : null;\n await this.checkIfPasteIsAllowed();\n\n this.vcRef.createEmbeddedView(this.templatePaste);\n const clipboard = this.contextDashboardService.copyClipboard;\n if (clipboard) {\n this.dashboardName = clipboard.dashboard.name;\n }\n }\n\n async pasteDashboard() {\n if (!this.contextMO) {\n this.contextMO = await this.getContextMo(this.contextId);\n }\n const context: DashboardContext = {\n context: this.currentViewContext,\n contextData: this.contextMO\n };\n\n await this.contextDashboardService.pasteDashboard(context);\n }\n\n private async getContextMo(id: string): Promise<IManagedObject> {\n return (await this.inventoryService.detail(id)).data;\n }\n\n private async checkIfPasteIsAllowed(): Promise<void> {\n const clipboardViewContext = this.contextDashboardService.copyClipboard.context.context;\n const isTypeDashboard = this.contextDashboardService.copyClipboard?.dashboard?.deviceType;\n\n if (this.currentViewContext !== clipboardViewContext) {\n if (clipboardViewContext === ViewContext.Device) {\n this.buttonTitle = gettext('Device dashboards can only be copied into a device.');\n } else if (clipboardViewContext === ViewContext.Group) {\n this.buttonTitle = gettext('Group dashboards can only be copied into a group.');\n }\n this.pasteDisabled = true;\n return;\n } else if (isTypeDashboard) {\n this.contextMO = await this.getContextMo(this.contextId);\n const dashboardDeviceType =\n this.contextDashboardService.copyClipboard.dashboard.deviceTypeValue;\n if (dashboardDeviceType === this.contextMO.type) {\n this.buttonTitle = gettext(\n 'Dashboard template can only be copied into assets of a different type.'\n );\n this.pasteDisabled = true;\n return;\n }\n }\n\n this.buttonTitle = gettext('Paste dashboard');\n this.pasteDisabled = false;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ViewContext, ActionBarFactory, ActionBarItem } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\n\nexport abstract class DashboardActionBarFactory implements ActionBarFactory {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n routeChanges$: Observable<any>;\n\n private contextDashboardService = inject(ContextDashboardService);\n\n get(activeRoute: ActivatedRoute) {\n const actions = [];\n const data =\n !activeRoute.parent || activeRoute.snapshot.data.context\n ? activeRoute.snapshot.data\n : activeRoute.parent.snapshot.data;\n const { contextData } = data;\n const canPaste =\n contextData &&\n data.context === this.targetContext &&\n this.contextDashboardService.copyClipboard;\n\n if (canPaste) {\n actions.push({\n priority: -10,\n placement: 'more',\n template: PasteDashboardActionComponent\n } as ActionBarItem);\n }\n\n return actions;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n CoreModule,\n hookActionBar,\n HookProviderTypes,\n hookRoute,\n hookTab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport { AddDashboardComponent } from './add-dashboard.component';\nimport { AddDeviceDashboardFactory, AddGroupDashboardFactory } from './add-dashboard.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport {\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboardConfig,\n CanDeactivateComponent\n} from './context-dashboard.model';\nimport {\n DeviceDashboardActionBarFactory,\n GroupDashboardActionBarFactory\n} from './dashboard-action-bar.factory';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\nimport { DashboardAvailabilityComponent } from './dashboard-availability.component';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { NewDashboardGuard, newDashboardTab } from './new-dashboard.guard';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { DashboardGeneralSettingsComponent } from './dashboard-settings/dashboard-general-settings.component';\nimport { DashboardAppearanceSettingsComponent } from './dashboard-settings/dashboard-appearance-settings.component';\nimport { DashboardVersionHistoryComponent } from './dashboard-settings/dashboard-version-history.component';\nimport { TypedDashboardSettingsComponent } from './dashboard-settings/typed-dashboard-settings.component';\nimport { TypeDashboardInfoComponent } from './type-dashboard-info/type-dashboard-info.component';\n\nconst defaultConfig = {\n allowFullscreen: true\n} as const satisfies ContextDashboardConfig;\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent,\n AddDashboardComponent,\n PasteDashboardActionComponent,\n DashboardAvailabilityComponent,\n DashboardGeneralSettingsComponent,\n DashboardAppearanceSettingsComponent,\n DashboardVersionHistoryComponent,\n TypedDashboardSettingsComponent,\n TypeDashboardInfoComponent\n ],\n imports: [\n CoreModule,\n TooltipModule,\n PopoverModule,\n AssetSelectorModule,\n IconSelectorModule,\n BsDropdownModule.forRoot(),\n CollapseModule.forRoot()\n ],\n exports: [\n ContextDashboardComponent,\n WidgetConfigComponent,\n DashboardDetailComponent,\n TypeDashboardInfoComponent\n ],\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: defaultConfig\n }\n ]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders<ContextDashboardModule> {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n hookRoute(config.routes || [])\n ]\n };\n }\n}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n }\n ]),\n hookTab(AddDeviceDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(DeviceDashboardActionBarFactory)\n ]\n})\nexport class DeviceContextDashboardModule {}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n }\n ]),\n hookTab(AddGroupDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(GroupDashboardActionBarFactory)\n ]\n})\nexport class GroupContextDashboardModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n ContextDashboardModule,\n DeviceContextDashboardModule,\n GroupContextDashboardModule\n} from '../context-dashboard.module';\nimport { hookNavigator, gettext, CoreModule, hookRoute } from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { CockpitDashboardConfig, COCKPIT_HOME_DASHBOARD_CONFIG } from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n imports: [CoreModule, ContextDashboardModule],\n declarations: [CockpitDashboardComponent],\n providers: [\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }),\n hookRoute({\n path: '',\n component: CockpitDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class CockpitHomeDashboardModule {}\n\n@NgModule({\n imports: [CockpitHomeDashboardModule, DeviceContextDashboardModule, GroupContextDashboardModule]\n})\nexport class CockpitDashboardModule {\n static config(config: CockpitDashboardConfig = {}): ModuleWithProviders<CockpitDashboardModule> {\n return {\n ngModule: CockpitDashboardModule,\n providers: [\n {\n provide: COCKPIT_HOME_DASHBOARD_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { ContextData, gettext, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { from, Subscription } from 'rxjs';\nimport { map, mergeMap, tap, toArray } from 'rxjs/operators';\nimport { WidgetService } from '../widget.service';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-info-dashboard-dashboard',\n templateUrl: './device-info-dashboard.component.html'\n})\nexport class DeviceInfoDashboardComponent implements CanDeactivateComponent {\n isLoading = true;\n title: string;\n dashboardName = '';\n widgetsList: Widget[];\n currentContext: ContextData;\n contextSubscription: Subscription;\n widgetsSubscription: Subscription;\n @ViewChild(ContextDashboardComponent, { static: false })\n contextDashboard: ContextDashboardComponent;\n\n DEVICE_INFO_WIDGETS = [\n {\n name: 'deviceStatusWidget',\n title: gettext('Device status'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 8\n },\n {\n name: 'Data points graph',\n title: gettext('Device and communication'),\n _x: 8,\n _y: 0,\n _height: 5,\n _width: 16,\n config: {\n interval: 'hours',\n aggregation: 'NONE',\n realtime: true,\n datapointsInitialDisplayLimit: 3,\n datapoints: [\n {\n fragment: 'c8y_Battery',\n series: 'level',\n label: this.translateService.instant('Battery: level'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#5e07b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'rssi',\n label: this.translateService.instant('Signal: RSSI'),\n unit: 'dBm',\n renderType: 'min',\n lineType: 'line',\n color: '#a7d0f1',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Used',\n label: this.translateService.instant('Memory: used'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#f75229',\n __active: true\n },\n {\n fragment: 'c8y_CPUMeasurement',\n series: 'Workload',\n label: this.translateService.instant('CPU: workload'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#b24f3e',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Upload',\n label: this.translateService.instant('Network: upload'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#88c039',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RCSP',\n label: this.translateService.instant('Signal: RCSP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSCP',\n label: this.translateService.instant('Signal: RSCP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRP',\n label: this.translateService.instant('Signal: RSRP'),\n renderType: 'min',\n lineType: 'line',\n color: '#43ba3b',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRQ',\n label: this.translateService.instant('Signal: RSRQ'),\n renderType: 'min',\n lineType: 'line',\n color: '#14b0b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ber',\n label: this.translateService.instant('Signal: BER'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#44ff33',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ECN0',\n label: this.translateService.instant('Signal: ECN0'),\n renderType: 'min',\n lineType: 'line',\n color: '#873efa',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Download',\n label: this.translateService.instant('Network: download'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#f27a45',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Total',\n label: this.translateService.instant('Memory: total'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#dadd8c',\n __active: true\n }\n ],\n alarmsEventsConfigs: [\n {\n label: 'c8y_LocationUpdate',\n timelineType: 'EVENT',\n color: '#6f6cd0',\n filters: {\n type: 'c8y_LocationUpdate'\n },\n __active: true\n },\n {\n label: 'c8y_UnavailabilityAlarm',\n timelineType: 'ALARM',\n color: '#375bf2',\n filters: {\n type: 'c8y_UnavailabilityAlarm'\n },\n __active: true\n }\n ]\n }\n },\n {\n name: 'Asset Properties',\n title: gettext('Device data'),\n config: {\n options: {\n properties: [\n {\n id: 'c8ySchema!!id',\n __active: true,\n keyPath: ['id'],\n type: 'string',\n label: 'ID'\n },\n {\n id: 'c8ySchema!!name',\n __active: true,\n keyPath: ['name'],\n type: 'string',\n label: 'Name'\n },\n {\n id: 'c8ySchema!!type',\n __active: true,\n keyPath: ['type'],\n type: 'string',\n label: 'Type'\n },\n {\n id: 'c8ySchema!!lastUpdated',\n __active: true,\n keyPath: ['lastUpdated'],\n type: 'string',\n label: 'Last Updated'\n },\n {\n id: 'c8ySchema!!creationTime',\n __active: true,\n keyPath: ['creationTime'],\n type: 'string',\n label: 'Creation Time'\n }\n ],\n allowDisplayAndEditKnownProperties: false,\n hiddenPropertiesKeyPaths: ['owner']\n }\n },\n _x: 0,\n _y: 5,\n _height: 8,\n _width: 8\n },\n {\n name: 'Alarm list',\n title: gettext('Active, critical alarms'),\n _x: 8,\n _y: 5,\n _height: 4,\n _width: 8,\n config: {\n options: {\n orderMode: 'ACTIVE_FIRST',\n severity: { CRITICAL: true },\n status: {\n ACTIVE: true,\n ACKNOWLEDGED: false,\n CLEARED: false\n },\n types: []\n }\n }\n },\n {\n name: 'deviceGroupAssignmentWidget',\n title: gettext('Group assignment'),\n _x: 16,\n _y: 5,\n _height: 4,\n _width: 8\n },\n {\n componentId: 'Map',\n title: gettext('Location'),\n _x: 8,\n _y: 9,\n _height: 4,\n _width: 16\n }\n ] as Widget[];\n\n constructor(\n private router: ActivatedRoute,\n private widgetService: WidgetService,\n private translateService: TranslateService,\n private inventoryService: InventoryService\n ) {}\n\n ngOnInit() {\n this.contextSubscription = this.router.parent.data\n .pipe(\n tap(({ contextData }) => {\n const contextNameValid = contextData.name && contextData.name.trim();\n this.title = contextNameValid ? contextData.name : contextData.id;\n this.dashboardName = `${contextData.id}-device-info`;\n })\n )\n .subscribe(async data => {\n this.currentContext = data as ContextData;\n this.addDeviceTargetForDP(data.contextData.id, data.contextData.name);\n });\n\n this.widgetsSubscription = from(this.DEVICE_INFO_WIDGETS)\n .pipe(\n mergeMap(widget => this.widgetService.mapLegacy(widget)),\n map(widget => {\n let device = this.router.parent.snapshot.data.contextData;\n if (device) {\n device = {\n name: device.name,\n id: device.id\n };\n }\n return {\n ...widget,\n config: {\n ...widget.config,\n device\n }\n };\n }),\n toArray()\n )\n .subscribe(async data => {\n await this.filterSupportedSeriesForDP(this.currentContext.contextData.id, data);\n this.widgetsList = data;\n this.isLoading = false;\n });\n }\n\n addDeviceTargetForDP(id: string | number, name: string) {\n const dpWidget = this.DEVICE_INFO_WIDGETS.filter(item => item.name == 'Data points graph')[0];\n // Add target to dataPoint config\n dpWidget.config.datapoints.map(item => (item['__target'] = { id, name }));\n // Add target to alarmEvents Config\n dpWidget.config.alarmsEventsConfigs.map(item => (item['__target'] = { id, name }));\n }\n\n async filterSupportedSeriesForDP(id: string | number, widgets: Widget[]) {\n const supportedMeasurements = await this.inventoryService.getMeasurementsAndSeries(id);\n const isDataPointSupported = dp =>\n supportedMeasurements.some(\n ({ fragment, series }) => dp.fragment === fragment && dp.series === series\n );\n const dpWidget = widgets.find(({ name }) => name === 'Data points graph');\n dpWidget.config.datapoints = dpWidget.config.datapoints.filter(isDataPointSupported);\n }\n\n ngOnDestroy() {\n this.widgetsSubscription.unsubscribe();\n this.contextSubscription.unsubscribe();\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n [canCopy]=\"false\"\n ></c8y-context-dashboard>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, hookRoute, ViewContext, gettext } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceInfoDashboardComponent } from './device-info-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceInfoDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n context: ViewContext.Device,\n path: 'device-info',\n component: DeviceInfoDashboardComponent,\n label: gettext('Info'),\n priority: 10000,\n icon: 'asterisk',\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class DeviceInfoDashboardModule {}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { WidgetService } from '../widget.service';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-management-home-dashboard',\n templateUrl: './device-management-home-dashboard.component.html'\n})\nexport class DeviceManagementHomeDashboardComponent implements OnInit, CanDeactivateComponent {\n widgets = [];\n dashboardName = 'home-dm1';\n defaultWidgets = [\n {\n name: 'devicemanagement.welcome.widget',\n title: gettext('Quick links'),\n _x: 0,\n _y: 0,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 12,\n _y: 0,\n _height: 4,\n _width: 12\n }\n ] as Widget[];\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(private widgetService: WidgetService) {}\n\n ngOnInit() {\n this.defaultWidgets.map(async widget => {\n await this.widgetService\n .mapLegacy(widget)\n .then(transformedWidget => this.widgets.push(transformedWidget));\n });\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, gettext, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceManagementHomeDashboardComponent } from './device-management-home-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceManagementHomeDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n path: '',\n component: DeviceManagementHomeDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n }),\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' })\n ]\n})\nexport class DeviceManagementHomeDashboardModule {}\n","import { Injectable } from '@angular/core';\nimport { TabFactory, Tab, gettext } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class DashboardManagerTabsFactory implements TabFactory {\n constructor(public router: Router) {}\n\n get() {\n const tabs: Tab[] = [];\n\n if (this.router.url.match(/\\/dashboard-manager/g)) {\n tabs.push({\n path: 'dashboard-manager/type-dashboards',\n priority: 1000,\n label: gettext('Type dashboards')\n } as Tab);\n }\n\n return tabs;\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class DeviceTypeValueGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'deviceTypeValue';\n this.path = 'c8y_Dashboard.deviceTypeValue';\n this.header = gettext('Target asset model');\n\n this.filterable = true;\n this.sortable = false;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'deviceTypeValues',\n label: gettext('Filter dashboards by target asset model'),\n addText: gettext('Add next`target asset model`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'c8y_MQTTDevice'\n }),\n getFilter: (model: any): any => {\n const filter: any = {};\n if (model.deviceTypeValues.length) {\n filter[this.path] = { __in: model.deviceTypeValues };\n }\n return filter;\n }\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n Column,\n DataGridService,\n gettext,\n ModalService,\n Pagination,\n Status,\n UserPreferencesService\n} from '@c8y/ngx-components';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceTypeValueGridColumn } from './type-dashboards-list/device-type-value.grid-column';\nimport { TypeDashboardFilter } from './dashboard-manager.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardManagerService extends DataGridService {\n queriesUtil: QueriesUtil;\n baseQuery = {\n __filter: {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { __has: 'c8y_Dashboard.deviceTypeValue' }\n ]\n }\n };\n private TYPE_DASHBOARDS_QUERY =\n '$filter=((c8y_Dashboard.deviceType eq true) and (has(c8y_Dashboard.deviceTypeValue)))';\n constructor(\n protected inventory: InventoryService,\n protected userPreferencesService: UserPreferencesService,\n protected modal: ModalService,\n protected translateService: TranslateService\n ) {\n super(userPreferencesService);\n }\n\n getColumns(): Column[] {\n return [\n {\n name: 'icon',\n header: gettext('Icon'),\n path: 'c8y_Dashboard.icon',\n sortable: false,\n gridTrackSize: '45px'\n },\n {\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n sortable: false,\n gridTrackSize: '200px'\n },\n {\n name: 'description',\n header: gettext('Description'),\n path: 'c8y_Dashboard.description',\n sortable: false\n },\n new DeviceTypeValueGridColumn(),\n {\n name: 'lastUpdated',\n header: gettext('Last update'),\n path: 'lastUpdated',\n sortable: false,\n gridTrackSize: '200px'\n }\n ];\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n async getData(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): Promise<IResultList<IManagedObject>> {\n const filters = this.getFilters(columns, pagination, text);\n\n return await this.inventory.list(filters);\n }\n\n async getTotal(): Promise<number> {\n return (\n await this.inventory.list({\n query: this.TYPE_DASHBOARDS_QUERY,\n withTotalElements: true\n })\n ).paging.totalElements;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, onSuccess: () => void): Promise<void> {\n try {\n const msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n onSuccess();\n } catch (ex) {\n // intended empty\n }\n }\n\n private getFilters(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): TypeDashboardFilter {\n return {\n query: this.getQueryString(columns),\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withTotalPages: true,\n withTotalElements: true\n };\n }\n\n private getQueryString(columns: Column[]): string {\n const queryFromColumns = this.getQueryObj(columns);\n const fullQuery = this.queriesUtil.addAndFilter(queryFromColumns, this.baseQuery);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { ColumnConfig } from '@c8y/ngx-components';\nimport { NameDeviceGridColumn } from '@c8y/ngx-components/device-grid';\n\nexport class BasicNameDeviceGridColumn extends NameDeviceGridColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'basic-name';\n this.cellRendererComponent = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Column, DataGridService, Pagination, UserPreferencesService } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport {\n GroupDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n TypeDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { BasicNameDeviceGridColumn } from './basic-name.device-grid-column';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TypeDashboardAssetsGridService extends DataGridService {\n constructor(\n protected inventoryService: InventoryService,\n protected userPreferencesService: UserPreferencesService\n ) {\n super(userPreferencesService);\n }\n\n getDefaultColumns(columnsForDevice = true): Column[] {\n return columnsForDevice\n ? [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new GroupDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ]\n : [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ];\n }\n\n async getData(columns: Column[], pagination: Pagination, query: any = {}, text = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n withGroups: true\n };\n return this.inventoryService.list(filters);\n }\n\n async getCount(columns: Column[], pagination: Pagination, query: any = {}, text: string = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n pageSize: 1,\n currentPage: 1\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n async getTotal(query: any = {}): Promise<number> {\n const filters = {\n query: this.queriesUtil.buildQuery(query),\n pageSize: 1,\n withTotalPages: true\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n private getFilters(columns: Column[], pagination: Pagination, query: any, text?: string) {\n return {\n ...{ query: this.getDeviceQueryString(columns, query) },\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withChildren: false,\n withTotalPages: true\n };\n }\n\n private getDeviceQueryString(columns: Column[], query: any): string {\n let fullQuery = this.getQueryObj(columns);\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, query);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n Column,\n DataSourceModifier,\n gettext,\n ModalLabels,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { TypeDashboardAssetsGridService } from './type-dashboard-assets-grid.service';\nimport { ContextDashboardManagedObject } from '../../../context-dashboard/context-dashboard.model';\nimport { ContextDashboardService } from '../../../context-dashboard/context-dashboard.service';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-grid',\n templateUrl: './type-dashboard-target-assets-grid.component.html'\n})\nexport class TypeDashboardTargetAssetsGridComponent implements OnInit {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n columns: Column[];\n actionControls: ActionControl[] = [\n {\n type: 'navigateToInstance',\n text: gettext('Open instance`dashboard`'),\n callback: item => this.navigateToDevice(item as IManagedObject),\n icon: 'file-create'\n }\n ];\n loadMoreItemsLabel = gettext('Load more assets');\n loadingItemsLabel: string = gettext('Loading assets…');\n pagination = {\n pageSize: 25,\n currentPage: 1\n };\n serverSideDataCallback: ServerSideDataCallback;\n\n @Input() dashboard: ContextDashboardManagedObject;\n @Output() onNavigateToAsset: EventEmitter<void> = new EventEmitter<void>();\n private isDeviceDashboard: boolean;\n\n constructor(\n private router: Router,\n private assetsGridService: TypeDashboardAssetsGridService,\n private contextDashboardService: ContextDashboardService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit() {\n this.isDeviceDashboard = this.contextDashboardService.isDeviceDashboard(this.dashboard);\n this.columns = this.assetsGridService.getDefaultColumns(this.isDeviceDashboard);\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const baseQuery = { type: this.dashboard.c8y_Dashboard.deviceTypeValue };\n\n const { res, data, paging } = await alertOnError(\n this.assetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n const filteredSize = await alertOnError(\n this.assetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n const size = await alertOnError(this.assetsGridService.getTotal(baseQuery));\n\n const serverSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n navigateToDevice(val: IManagedObject): void {\n const parentSubPath = this.isDeviceDashboard ? 'device' : 'group';\n this.onNavigateToAsset.emit();\n this.router.navigate([`/${parentSubPath}/${val.id}/dashboard/${this.dashboard.id}`]);\n }\n}\n","<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n","import { Component, HostListener, Input } from '@angular/core';\nimport { gettext, ModalLabels } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-modal',\n templateUrl: './type-dashboard-target-assets-modal.component.html'\n})\nexport class TypeDashboardTargetAssetsModalComponent {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n @Input() dashboard: ContextDashboardManagedObject;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n close(): void {\n this.bsModalRef.hide();\n }\n}\n","<c8y-modal\n title=\"{{ 'Select dashboard instance to edit' | translate }}\"\n (onClose)=\"close()\"\n (onDismiss)=\"close()\"\n [labels]=\"labels\"\n [disabled]=\"true\"\n [headerClasses]=\"'has-data-grid'\"\n>\n <c8y-type-dashboard-target-assets-grid\n [dashboard]=\"dashboard\"\n (onNavigateToAsset)=\"close()\"\n ></c8y-type-dashboard-target-assets-grid>\n</c8y-modal>\n","import { Component, EventEmitter } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n BuiltInActionType,\n Column,\n DataSourceModifier,\n DisplayOptions,\n gettext,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { DashboardManagerService } from '../dashboard-manager.service';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { TypeDashboardTargetAssetsModalComponent } from '../type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\n\n@Component({\n selector: 'c8y-dashboard-manager',\n templateUrl: './type-dashboards-list.component.html'\n})\nexport class TypeDashboardsListComponent {\n title = gettext('Type dashboards');\n loadMoreItemsLabel = gettext('Load more dashboards');\n loadingItemsLabel: string = gettext('Loading dashboards…');\n columns = this.dashboardManagerService.getColumns();\n pagination = this.dashboardManagerService.getDefaultPagination();\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n text: gettext('Edit dashboard'),\n callback: item => this.openTargetAssetsModal(item as ContextDashboardManagedObject)\n },\n {\n type: BuiltInActionType.Delete,\n text: gettext('Delete dashboard'),\n callback: item => this.delete(item as ContextDashboardManagedObject)\n }\n ];\n serverSideDataCallback: ServerSideDataCallback;\n displayOptions: DisplayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: true,\n hover: false\n };\n refresh = new EventEmitter<void>();\n\n constructor(\n private dashboardManagerService: DashboardManagerService,\n private bsModalService: BsModalService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n await this.dashboardManagerService.delete(dashboard, () => this.refresh.emit());\n }\n\n openTargetAssetsModal(dashboard: ContextDashboardManagedObject): void {\n const initialState: Pick<TypeDashboardTargetAssetsModalComponent, 'dashboard'> = { dashboard };\n this.bsModalService.show(TypeDashboardTargetAssetsModalComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n initialState\n });\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const { res, data, paging } = await alertOnError(\n this.dashboardManagerService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n dataSourceModifier.searchText\n )\n );\n const filteredSize = paging.totalElements;\n const size = await alertOnError(this.dashboardManagerService.getTotal());\n\n return {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n }\n}\n","<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { NgModule } from '@angular/core';\nimport {\n CoreModule,\n gettext,\n hookNavigator,\n hookRoute,\n hookTab,\n ModalModule,\n NavigatorNode\n} from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { DashboardManagerTabsFactory } from './dashboard-manager-tabs.factory';\nimport { TypeDashboardsListComponent } from './type-dashboards-list/type-dashboards-list.component';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { TypeDashboardTargetAssetsModalComponent } from './type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\nimport { TypeDashboardTargetAssetsGridComponent } from './type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component';\n\nconst DASHBOARD_MANAGER_PATH = 'dashboard-manager';\n\n@NgModule({\n declarations: [\n TypeDashboardsListComponent,\n TypeDashboardTargetAssetsModalComponent,\n TypeDashboardTargetAssetsGridComponent\n ],\n imports: [CoreModule, TooltipModule, DeviceGridModule, ContextDashboardModule, ModalModule],\n providers: [\n hookTab(DashboardManagerTabsFactory),\n hookRoute([\n {\n path: DASHBOARD_MANAGER_PATH,\n redirectTo: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n pathMatch: 'full'\n },\n {\n path: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n component: TypeDashboardsListComponent\n }\n ]),\n hookNavigator(\n new NavigatorNode({\n parent: gettext('Configuration'),\n path: DASHBOARD_MANAGER_PATH,\n label: gettext('Dashboard manager'),\n icon: 'management1',\n routerLinkExact: false,\n featureId: 'dashboardManager'\n })\n )\n ]\n})\nexport class DashboardManagerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5.TypeDashboardInfoComponent","i6.DashboardAvailabilityComponent","i7.TypedDashboardSettingsComponent","i1.ContextDashboardService","i4.AppearanceSettingsComponent","i2.ContextDashboardService","i5","i6.DashboardDetailService","i7","i8","i10.DashboardGeneralSettingsComponent","i11.DashboardAppearanceSettingsComponent","i12.DashboardVersionHistoryComponent","i1.WidgetService","i4.ContextDashboardService","i6","i9.AppearanceSettingsComponent","i10.WidgetPreviewComponent","i1.DashboardOriginatorService","i2.DashboardCaretakerService","i4.WidgetService","i7.DashboardEditModeService","i9","i10.DashboardDetailComponent","i2.ContextDashboardComponent","i2.WidgetService","i7.ContextDashboardComponent","i3.ContextDashboardComponent","i2.TypeDashboardAssetsGridService","i3.ContextDashboardService","i3.TypeDashboardTargetAssetsGridComponent","i1.DashboardManagerService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,eAAe,GAAgB;AAC1C,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;AAC/B,IAAA,IAAI,EAAE,yBAAyB;;AAE/B,IAAA,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,CAAC,QAAQ;CACpB,CAAC;MAGW,iBAAiB,CAAA;AAG5B,IAAA,WAAW,CAAC,KAA6B,EAAA;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC;QAClE,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,SAAS,GAA2C;AACxD,gBAAA,aAAa,EAAE,IAAI;aACpB,CAAC;AACF,YAAA,KAAK,CAAC,IAAI,GAAG,EAAE,SAAS,EAAE,CAAC;SAC5B;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,GAAG,GAAG;AACT,gBAAA,GAAG,eAAe;gBAClB,IAAI,EAAE,CAAC,SAAS;gBAChB,QAAQ,EAAE,SAAS,GAAG,QAAQ,GAAG,CAAC,QAAQ;aAC3C,CAAC;SACH;QACD,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KACvB;+GAnBU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCNrB,qBAAqB,CAAA;IAChC,WACU,CAAA,WAAwB,EACxB,MAAc,EAAA;QADd,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KACpB;IAEJ,YAAY,GAAA;QACV,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAC1D,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS,CAC/C,CAAC;;QAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAClB,OAAO,mBAAmB,CAAC,IAAI,KAAK,QAAQ;AAC1C,cAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;cAC1B,mBAAmB,CAAC,IAAI,EAC5B,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;;AAEF,QAAA,mBAAmB,CAAC,IAAI,GAAG,KAAK,CAAC;AACjC,QAAA,mBAAmB,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;KAC5B;+GArBU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,wHCVlC,kdAeA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDLa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAEzB,IAAA,EAAA,EAAE,KAAK,EAAE,iCAAiC,EAAE,EAAA,QAAA,EAAA,kdAAA,EAAA,CAAA;;;MEK9B,mBAAmB,CAAA;AAAzC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAClC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;KAsCpD;IApCC,MAAM,GAAG,CAAC,cAA+B,EAAA;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACvE,IACE,IAAI,CAAC,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC,aAAa;AACnD,aAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAC3D;YACA,OAAO;AACL,gBAAA;AACE,oBAAA,SAAS,EAAE,qBAAqB;oBAChC,QAAQ,EAAE,CAAC,QAAQ;AACnB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;aACF,CAAC;SACH;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAEO,MAAM,aAAa,CAAC,OAAoB,EAAA;AAC9C,QAAA,IAAI,OAAO,EAAE,EAAE,EAAE;AACf,YAAA,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CACnC;AACE,gBAAA,WAAW,CAAC,oBAAoB;AAChC,gBAAA,WAAW,CAAC,qBAAqB;AACjC,gBAAA,WAAW,CAAC,yBAAyB;AACrC,gBAAA,WAAW,CAAC,0BAA0B;aACvC,EACD,OAAO,CACR,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACjC,YAAA,WAAW,CAAC,oBAAoB;AAChC,YAAA,WAAW,CAAC,qBAAqB;AACjC,YAAA,WAAW,CAAC,yBAAyB;AACrC,YAAA,WAAW,CAAC,0BAA0B;AACvC,SAAA,CAAC,CAAC;KACJ;AACF,CAAA;AAKK,MAAO,yBAA0B,SAAQ,mBAAmB,CAAA;AAHlE,IAAA,WAAA,GAAA;;AAIY,QAAA,IAAA,CAAA,aAAa,GAA2C,WAAW,CAAC,MAAM,CAAC;AACtF,KAAA;+GAFY,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;AAQK,MAAO,wBAAyB,SAAQ,mBAAmB,CAAA;AAHjE,IAAA,WAAA,GAAA;;AAIY,QAAA,IAAA,CAAA,aAAa,GAA2C,WAAW,CAAC,KAAK,CAAC;AACrF,KAAA;+GAFY,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCpDY,wBAAwB,GAAG,IAAI,cAAc,CAAM,wBAAwB,EAAE;AAC7E,MAAA,0BAA0B,GAAG;AACxC,IAAA,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;AACzB,IAAA,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC;AACvC,IAAA,aAAa,EAAE,OAAO,CAAC,qBAAqB,CAAC;AAC7C,IAAA,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC;AACtC,IAAA,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;AACrB,IAAA,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;AACrB,IAAA,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;AAC7B,IAAA,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAC9C,IAAA,oBAAoB,EAAE,OAAO,CAAC,wBAAwB,CAAC;EACY;AAsHxD,MAAA,6BAA6B,GAAG;AAC3C,IAAA,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC;AACjC,IAAA,MAAM,EAAE,OAAO,CAAC,8BAA8B,CAAC;AAC/C,IAAA,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAClC,IAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9B,IAAA,WAAW,EAAE,OAAO,CAAC,oBAAoB,CAAC;EACwD;IAsCxF,qBAMX;AAND,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,MAAc,CAAA;AACd,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EANW,oBAAoB,KAApB,oBAAoB,GAM/B,EAAA,CAAA,CAAA,CAAA;IAEW,sBAIX;AAJD,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,qBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,qBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC,CAAA;AACnC,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,GAIhC,EAAA,CAAA,CAAA,CAAA;AAOY,MAAA,qBAAqB,GAAG;AACnC,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAChC,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,WAAW,EAAE,OAAO,CAAC,sDAAsD,CAAC;AAC7E,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;AAC/B,QAAA,KAAK,EAAE,oBAAoB;AAC3B,QAAA,WAAW,EAAE,OAAO,CAAC,sEAAsE,CAAC;AAC7F,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAChC,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,WAAW,EAAE,OAAO,CAAC,yCAAyC,CAAC;AAChE,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;AAC/B,QAAA,KAAK,EAAE,oBAAoB;AAC3B,QAAA,WAAW,EAAE,OAAO,CAAC,iCAAiC,CAAC;AACxD,KAAA;EACQ;AAEE,MAAA,sBAAsB,GAAG;AACpC,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAChC,QAAA,KAAK,EAAE,uBAAuB;AAC9B,QAAA,WAAW,EAAE,OAAO,CAAC,iDAAiD,CAAC;AACxE,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC;AACxC,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,WAAW,EAAE,OAAO,CAAC,yDAAyD,CAAC;AAChF,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9B,QAAA,KAAK,EAAE,qBAAqB;AAC5B,QAAA,WAAW,EAAE,OAAO,CAAC,0EAA0E,CAAC;AACjG,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;AAC7B,QAAA,KAAK,EAAE,oBAAoB;AAC3B,QAAA,WAAW,EAAE,OAAO,CAAC,yEAAyE,CAAC;AAChG,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC;AACpC,QAAA,KAAK,EAAE,2BAA2B;AAClC,QAAA,WAAW,EAAE,OAAO,CAAC,+BAA+B,CAAC;AACtD,KAAA;EACQ;AAEE,MAAA,uBAAuB,GAAG;AACrC,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AACjC,QAAA,KAAK,EAAE,uBAAuB;AAC9B,QAAA,WAAW,EAAE,OAAO,CAAC,qDAAqD,CAAC;AAC5E,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC;AAC9B,QAAA,KAAK,EAAE,uBAAuB;AAC9B,QAAA,WAAW,EAAE,OAAO,CAClB,6EAA6E,CAC9E;AACF,KAAA;AACD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;AAC7B,QAAA,KAAK,EAAE,sBAAsB;AAC7B,QAAA,WAAW,EAAE,OAAO,CAClB,4EAA4E,CAC7E;AACF,KAAA;;;;;;;;AAQD,IAAA;AACE,QAAA,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC;AAChC,QAAA,KAAK,EAAE,yBAAyB;AAChC,QAAA,WAAW,EAAE,OAAO,CAAC,kDAAkD,CAAC;AACzE,KAAA;EACQ;AAEE,MAAA,sBAAsB,GAAG;IACpC,kBAAkB;IAClB,cAAc;IACd,gBAAgB;EACP;AAaJ,MAAM,yBAAyB,GAAG,MAAe;AAG3C,MAAA,kBAAkB,GAAG;AAChC,IAAA,SAAS,EAAE;AACT,QAAA,MAAM,EAAE;AACN,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,OAAO,EAAE,SAAS;AACnB,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,cAAc,EAAE,mBAAmB;AACnC,YAAA,sBAAsB,EAAE,wBAAwB;AAChD,YAAA,YAAY,EAAE,uBAAuB;AACrC,YAAA,UAAU,EAAE,uBAAuB;AACnC,YAAA,aAAa,EAAE,eAAe;AAC9B,YAAA,gBAAgB,EAAE,mBAAmB;AACtC,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,KAAK,EAAE,OAAO;AACf,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,0BAA0B,EAAE,yBAAyB;AACrD,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,UAAU,EAAE,WAAW;AACxB,SAAA;AACF,KAAA;EACQ;AAMJ,MAAM,uCAAuC,GAAG;;MClV1C,2BAA2B,CAAA;AAJxC,IAAA,WAAA,GAAA;QAME,IAAU,CAAA,UAAA,GAAG,uBAAuB,CAAC;QAErC,IAAW,CAAA,WAAA,GAAG,qBAAqB,CAAC;AAQpC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU,CAAC;AAE9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;QAG/C,IAAoB,CAAA,oBAAA,GAAG,uBAAuB,CAAC;QAG/C,IAAqB,CAAA,qBAAA,GAAG,qBAAqB,CAAC;QAG9C,IAAO,CAAA,OAAA,GAAU,CAAC,CAAC;AAEnB,QAAA,IAAA,CAAA,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAoBtD,KAAA;AAlBC,IAAA,eAAe,CAAC,KAAK,EAAA;AACnB,QAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;AAED,IAAA,gBAAgB,CAAC,KAAK,EAAA;AACpB,QAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;AAEO,IAAA,cAAc,CAAC,KAAa,EAAE,SAAiB,EAAE,YAAoB,EAAA;AAC3E,QAAA,IAAI,YAAY,IAAI,KAAK,KAAK,SAAS,EAAE;YACvC,KAAK,GAAG,YAAY,CAAC;SACtB;AACD,QAAA,OAAO,KAAK,CAAC;KACd;+GA5CU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,wcCRxC,6wIAsHA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD9Ga,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,6wIAAA,EAAA,CAAA;8BAKnC,UAAU,EAAA,CAAA;sBADT,KAAK;gBAGN,WAAW,EAAA,CAAA;sBADV,KAAK;gBAGN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAGN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAGN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAGN,gBAAgB,EAAA,CAAA;sBADf,MAAM;gBAGP,iBAAiB,EAAA,CAAA;sBADhB,MAAM;gBAIP,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAIN,qBAAqB,EAAA,CAAA;sBADpB,KAAK;gBAIN,OAAO,EAAA,CAAA;sBADN,KAAK;;;AE3BR;;AAEG;MACU,6BAA6B,GAAG,IAAI,cAAc,CAAC,4BAA4B,EAAE;AAqB9F;;AAEG;AACU,MAAA,4BAA4B,GAAG;AAC1C,IAAA;AACE,QAAA,IAAI,EAAE,wBAAwB;AAC9B,QAAA,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC;AACpC,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE;AACxC,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC;AACzC,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,MAAM,EAAE,EAAE;AACX,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;AAC/B,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,MAAM,EAAE,EAAE;AACX,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;AACrB,QAAA,EAAE,EAAE,EAAE;AACN,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,MAAM,EAAE,EAAE;AACX,KAAA;;;MCXU,uBAAuB,CAAA;AA2BlC,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,IAAI,YAAY,CAAC,KAAK,EAAA;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,WACU,CAAA,SAA2B,EAC3B,IAAiB,EACjB,KAAmB,EACnB,gBAAkC,EAClC,MAAc,EACd,SAA2B,EAC3B,WAAwB,EACxB,KAAmB,EACnB,gBAAyC,EACzC,YAA0B,EAC1B,cAA8B,EAAA;QAV9B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;QACjB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACnB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACnB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAyB;QACzC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QA5C/B,IAAmB,CAAA,mBAAA,GAAG,SAAS,CAAC;QAGhC,IAA0B,CAAA,0BAAA,GAAG,EAAE,CAAC;AACxB,QAAA,IAAA,CAAA,eAAe,GAAG;AACjC,YAAA,WAAW,CAAC,oBAAoB;AAChC,YAAA,WAAW,CAAC,yBAAyB;SACtC,CAAC;AACM,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAyC,CAAC;QAChD,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;QACxB,IAAa,CAAA,aAAA,GAAG,eAAe,CAAC;QAChC,IAAoB,CAAA,oBAAA,GAAG,WAAW,CAAC;QACnC,IAAW,CAAA,WAAA,GAAG,GAAG,CAAC;QAClB,IAAa,CAAA,aAAA,GAAG,GAAG,CAAC;QAC7B,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC;AACrB,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAW,CAAC;QAMpC,IAA8B,CAAA,8BAAA,GAC7C,4BAA4B,CAAC;QAwB7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;KACtC;IAED,MAAM,MAAM,CAAC,YAA8B,EAAE,OAAqB,EAAE,IAAI,GAAG,EAAE,EAAA;QAC3E,IAAI,SAAS,GAA2C,EAAE,CAAC;QAC3D,MAAM,CACJ,SAAS,EACT,IAAI,CAAC,2BAA2B,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,EACjE,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,YAAY,CAAC,CACrD,CAAC;QAEF,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAAC,qBAAqB,CACpE,EAAE,aAAa,EAAE,YAAY,EAAmC,EAChE,OAAO,EACP,IAAI,EACJ,KAAK,CACN,CAAC;QACF,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAEpD,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;YAC5C,MAAM,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;SACvC;QACD,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;QAC9C,MAAM,EAAE,IAAI,EAAE,GACZ,aAAa,KAAK,oBAAoB,CAAC,KAAK;YAC5C,aAAa,KAAK,oBAAoB,CAAC,MAAM;AAC7C,aAAC,OAAO,IAAI,aAAa,KAAK,oBAAoB,CAAC,KAAK,CAAC;AACvD,cAAE,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CACvC,SAAS,EACR,OAAO,EAAE,WAAW,CAAC,EAAa,IAAI,EAAE,CAC1C;cACD,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAA,OAAO,IAAqC,CAAC;KAC9C;IAED,MAAM,MAAM,CAAC,WAA0C,EAAA;AACrD,QAAA,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACxD,QAAA,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAqC,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,MAAM,CACV,SAAwC,EACxC,OAAqB,EAAA;AAErB,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC;QAC7C,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;QAC9C,MAAM,CACJ,SAAS,EACT,IAAI,CAAC,2BAA2B,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,EACjE,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,YAAY,CAAC,CACrD,CAAC;QAEF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACtF,QAAA,aAAa,CAAC,oBAAoB,GAAG,SAAS,CAAC,oBAAoB,CAAC;AACpE,QAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;AAEjD,QAAA,MAAM,GAAG,sBAAsB,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5F,QAAA,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,sBAAsB,EAAE,CAAC,CAAC;AAC7F,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,sBAAsB,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,MAAM,CAAC,SAAwC,EAAE,gBAAgB,GAAG,IAAI,EAAA;AAC5E,QAAA,IAAI;YACF,IAAI,gBAAgB,EAAE;AACpB,gBAAA,IAAI,GAAG,GAAW,OAAO,CACvB,CAAA,oFAAA,CAAsF,CACvF,CAAC;AACF,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE;oBAChC,GAAG,GAAG,OAAO,CACX,CAAA;AACuB,kCAAA,CAAA,CACxB,CAAC;iBACH;AACD,gBAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CACtB,OAAO,CAAC,kBAAkB,CAAC,EAC3B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE;AACjC,oBAAA,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;AAC3C,oBAAA,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,eAAe;iBACpD,CAAC,EACF,MAAM,CAAC,MAAM,EACb,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CACrD,CAAC;aACH;YACD,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACvC,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;AACzD,gBAAA,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;AAChC,oBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAG,EAAA,IAAI,CAAC,oBAAoB,IAAI,SAAS,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;iBAC1E;AACH,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC9B,cAAc,CAAC,MAAK;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACtB,aAAC,CAAC,CAAC;SACJ;QAAC,OAAO,EAAE,EAAE;;SAEZ;KACF;IAED,sBAAsB,CACpB,SAAiD,EACjD,YAA8B,EAAA;AAE9B,QAAA,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE;AACnC,YAAA,SAAS,CAAC,oBAAoB,GAAG,EAAE,CAAC;SACrC;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE;YACpC,YAAY,CAAC,kBAAkB,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;SAC5D;QAED,YAAY,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAChD,QAAA,SAAS,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAE9F,IAAI,SAAS,CAAC,oBAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,0BAA0B,EAAE;YAC3E,SAAS,CAAC,oBAAoB,GAAG;gBAC/B,GAAG,SAAS,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,0BAA0B,CAAC;aAC5E,CAAC;SACH;AAED,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,kBAAkB,CAChB,KAA6B,EAC7B,KAA6B,EAAA;AAE7B,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QACrC,IAAI,WAAW,EAAE;YACf,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAC/E,GAAG,CAAC,SAAS,IAAG;AACd,gBAAA,KAAK,CAAC,IAAI,GAAG,EAAE,SAAS,EAAE,CAAC;AAC7B,aAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,UAAU,CAAC,MAAK;AACd,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;aAClB,CAAC,CACH,CAAC;SACH;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CACjC,KAAK,CAAC,IAAI,CAAC,WAAW,EACtB,KAAK,EACL,KAAK,EAAE,MAAM,EAAE,IAAmB,CACnC,CAAC;QACF,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;AAED,IAAA,yBAAyB,CAAC,IAAY,EAAE,cAAwB,EAAE,OAAqB,EAAA;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAChE,YAAY,EAAE,EACd,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE;gBACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAChB,OAAO,CACL,sGAAsG,CACvG,CACF,CAAC;AACF,gBAAA,OAAO,EAAE,CACP,IAAI,CAAC,qBAAqB,CAAC;oBACzB,IAAI;oBACJ,QAAQ;oBACR,aAAa,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE;AAC9E,iBAAA,CAAC,CACH,CAAC;aACH;;AACC,gBAAA,OAAO,IAAI,CACT,IAAI,CAAC,MAAM,CACT;oBACE,QAAQ;oBACR,aAAa,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE;AAC9E,iBAAA,EACD,OAAO,EACP,IAAI,CACL,CACF,CAAC;SACL,CAAC,CACH,CAAC;KACH;AAED,IAAA,mBAAmB,CAAC,EAAkB,EAAA;QACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAA,QAAA,EAAW,EAAE,CAAC,EAAE,CAAE,CAAA,EAAE;AACpC,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,EAAE,CAAC,mBAAmB,EAAE;AAC1B,YAAA,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC;gBAClC,KAAK,EAAE,EAAE,CAAC,IAAI;AACd,gBAAA,IAAI,EAAE,CAAA,QAAA,EAAW,EAAE,CAAC,EAAE,CAAE,CAAA;gBACxB,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;AACtB,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,MAAM,mBAAmB,CAAC,WAA0C,EAAE,cAAc,GAAG,KAAK,EAAA;QAC1F,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE;AAC3C,gBAAA,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1C,IAAI,cAAc,IAAI;AACpB,oBAAA,KAAK,EAAE,EAAE,CAAC,+BAA+B,GAAG,IAAI,EAAE;iBACnD,CAAC;AACH,aAAA,CAAC,CAAC;SACJ;aAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;;AAE7D,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE;AACrE,gBAAA,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1C,IAAI,cAAc,IAAI;AACpB,oBAAA,KAAK,EAAE,EAAE,CAAC,+BAA+B,GAAG,IAAI,EAAE;iBACnD,CAAC;AACH,aAAA,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE;AACtE,gBAAA,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1C,IAAI,cAAc,IAAI;AACpB,oBAAA,KAAK,EAAE,EAAE,CAAC,+BAA+B,GAAG,IAAI,EAAE;iBACnD,CAAC;AACH,aAAA,CAAC,CAAC;SACJ;KACF;AAED;;;;;AAKG;IACH,MAAM,gBAAgB,CAAC,EAAiC,EAAA;AACtD,QAAA,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;KACjE;AAED;;;;AAIG;IACH,6BAA6B,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACjC,YAAA,WAAW,CAAC,oBAAoB;AAChC,YAAA,WAAW,CAAC,qBAAqB;AACjC,YAAA,WAAW,CAAC,yBAAyB;AACrC,YAAA,WAAW,CAAC,0BAA0B;AACvC,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,OAAO,CAAC,SAAiD,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAC/B,IAAI,MAAM,CACR,CAAI,CAAA,EAAA,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,CAAG,EAAA,oBAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAA,CAAE,CAC5F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;AAED,IAAA,QAAQ,CAAC,SAAiD,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAC/B,IAAI,MAAM,CACR,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAA,EAAG,oBAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAG,EAAA,IAAI,CAAC,mBAAmB,CAAA,CAAE,CACvH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;AAED,IAAA,YAAY,CAAC,SAAiD,EAAA;QAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAG;AAClC,YAAA,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,EAAG,oBAAoB,CAAC,IAAI,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,CAAE,CAC3F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,OAAO,KAAK,CAAC;aACd;iBAAM;;AAEL,gBAAA,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC1B;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,iBAAiB,CAAC,SAAiD,EAAA;AACjE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAC/B,IAAI,MAAM,CACR,CAAI,CAAA,EAAA,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,CAAG,EAAA,oBAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA,CAAE,CAC7F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;AAED,IAAA,gBAAgB,CAAC,SAAiD,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAC/B,IAAI,MAAM,CACR,CAAI,CAAA,EAAA,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,CAAG,EAAA,oBAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAA,CAAE,CAC5F,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;AAED,IAAA,0BAA0B,CAAC,SAAmB,EAAA;QAC5C,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IACvB,sBAAsB,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CACtE,CAAC;KACH;AAED,IAAA,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAC5B,KAAK,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACtE,CAAC;QACF,OAAO,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;KAC/C;AAED,IAAA,UAAU,CAAC,OAAiB,EAAA;QAC1B,OAAO,KAAK,CACV,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AACnB,YAAA,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5C,YAAA,OAAO,MAAM,CAAC;AAChB,SAAC,CAAC,EACF,IAAI,CACL,CAAC;KACH;AAED,IAAA,aAAa,CAAC,iBAAiB,EAAE,aAAqC,EAAE,EAAmB,EAAA;QACzF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAG,EAAE;cACjB,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC;AAC9C,cAAE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AAE9C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAChD,MAAM,CACJ,SAAS,IACP,SAAS,CAAC,EAAE,KAAK,iBAAiB;YAClC,GAAG,CACD,SAAS,EACT,CAAG,EAAA,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,EAAG,oBAAoB,CAAC,KAAK,CAAG,EAAA,IAAI,CAAC,WAAW,CAAG,EAAA,iBAAiB,CAAE,CAAA,CAC/G,CACJ,CACF,CAAC;AACF,QAAA,OAAO,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;KACzC;IAED,MAAM,cAAc,CAAC,UAA4B,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI;gBACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CACtD,IAAI,CAAC,aAAa,CAAC,SAAS,EAC5B,UAAU,CAAC,WAAW,EACtB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CACvC,CAAC;AACF,gBAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;;gBAG9E,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CACtE,IAAI,CAAC,aAAa,CAAC,WAAW,EAC9B,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;AACF,gBAAA,IAAI,cAAc,CAAC,MAAM,EAAE;AACzB,oBAAA,MAAM,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;iBAC1E;AAED,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;aACrC;AAAC,YAAA,MAAM;gBACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,CAAC;aAC1E;SACF;KACF;AAED;;;;;;;;;;;;AAYG;IACH,iBAAiB,CACf,oBAAuB,EACvB,KAAQ,EAAA;AAER,QAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,CAAG,EAAA,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAG,EAAA,KAAK,EAAW,CAAC;KAC9G;AAED;;;;;;;;AAQG;IACH,6BAA6B,CAC3B,EAAiC,EACjC,OAAoB,EAAA;;AAGpB,QAAA,IACE,CAAC,EAAE;YACH,CAAC,OAAO,EAAE,WAAW;AACrB,aAAC,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,KAAK,CAAC,EACjF;AACA,YAAA,OAAO,UAAU,CAAC;SACnB;;AAGD,QAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAC1D,IAAI,CAAC,8BAA8B,EACnC,IAAI,CACL,CAAC;AACF,QAAA,IACE,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,KAAK;aACpC,4BAA4B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAC3D;AACA,YAAA,OAAO,UAAU,CAAC;SACnB;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACtD,YAAA,OAAO,UAAU,CAAC;SACnB;;;AAID,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CACzC,oBAAoB,CAAC,IAAI,EACzB,OAAO,EAAE,WAAW,EAAE,IAAI,CAC3B,CAAC;QACF,IACE,EAAE,EAAE,aAAa;YACjB,EAAE,EAAE,aAAa,CAAC,UAAU;YAC5B,OAAO,EAAE,WAAW,EAAE,IAAI;AAC1B,YAAA,CAAC,EAAE,CAAC,YAAY,CAAC,EACjB;AACA,YAAA,OAAO,UAAU,CAAC;SACnB;;;AAID,QAAA,IACE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI;AAC3B,YAAA,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,MAAM;YACtC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EACjD;AACA,YAAA,OAAO,sBAAsB,CAAC;SAC/B;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,YAAY,CAAC,SAAkC,EAAA;QAC7C,MAAM,MAAM,GAA4B,EAAE,CAAC;AAC3C,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACtC;AAED,IAAA,sBAAsB,CAAC,MAAsB,EAAA;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,aAAa,CAAC;YAC7B,KAAK,EAAE,MAAM,CAAC,IAAI;AAClB,YAAA,IAAI,EAAE,CAAA,QAAA,EAAW,MAAM,CAAC,EAAE,CAAE,CAAA;YAC5B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC1B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC1B;AAED,IAAA,eAAe,CAAC,EAAkB,EAAA;QAChC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAClC,YAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;SACpD;aAAM,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACxC,YAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;SACnD;aAAM,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACxC,YAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;SACnD;aAAM;AACL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AAED,IAAA,MAAM,oBAAoB,CACxB,EAAkB,EAClB,aAAqC,EAAA;QAErC,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK;;YAE7C,KAAK,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAG,CAAA,CAAA;AAClD,SAAA,CAAC,CAAC,CAAC;;AAGJ,QAAA,MAAM,kBAAkB,GACtB,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI;AAC1D,cAAE;AACE,gBAAA,KAAK,EAAE;AACL,oBAAA,EAAE,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;oBAC9C,EAAE,+BAA+B,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;AACvD,iBAAA;AACF,aAAA;cACD,SAAS,CAAC;QAChB,MAAM,mBAAmB,GAAG,kBAAkB;AAC5C,cAAE,CAAC,GAAG,cAAc,EAAE,kBAAkB,CAAC;cACvC,cAAc,CAAC;AAEnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;AACvF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,MAAM,qBAAqB,GACzB,IAAI,CAAC,sBAAsB;AAC3B,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,KAAK,KAAK;YAC3C,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QAEnE,IAAI,qBAAqB,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;SAC3C;aAAM;AACL,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACpC;QAED,IAAI,CAAC,sBAAsB,GAAG;YAC5B,KAAK;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACvE,YAAA,SAAS,EAAE,GAAG;SACf,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;KAC3C;AAED;;;;;;;;;;AAUG;AACK,IAAA,qBAAqB,CAC3B,WAA0C,EAC1C,OAAoB,EACpB,IAAY,EACZ,MAAe,EAAA;AAEf,QAAA,IAAI,aAAmC,CAAC;QACxC,MAAM,EAAE,GAAI,OAAO,EAAE,WAAW,EAAE,EAAa,IAAI,EAAE,CAAC;QACtD,MAAM,SAAS,GAA2B,EAAE,CAAC;QAE7C,IAAI,IAAI,EAAE;;AAER,YAAA,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAC3C,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAClF,YAAA,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;SAClC;AAAM,aAAA,IAAI,OAAO,EAAE,OAAO,KAAK,WAAW,CAAC,MAAM,IAAI,OAAO,EAAE,OAAO,KAAK,WAAW,CAAC,KAAK,EAAE;;YAE5F,MAAM,WAAW,GACf,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,MAAM;kBAClC,oBAAoB,CAAC,MAAM;AAC7B,kBAAE,oBAAoB,CAAC,KAAK,CAAC;AACjC,YAAA,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU;kBAChD,oBAAoB,CAAC,IAAI;kBACzB,WAAW,CAAC;;YAGhB,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;;YAGjE,MAAM,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzE,YAAA,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC;;YAGzC,IAAI,WAAW,CAAC,aAAa,CAAC,UAAU,IAAI,MAAM,EAAE;AAClD,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAC5C,oBAAoB,CAAC,IAAI,EACzB,WAAW,CAAC,aAAa,CAAC,eAAe,CAC1C,CAAC;AACF,gBAAA,SAAS,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;aAC/E;SACF;AAED,QAAA,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;KACnC;AACD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACK,IAAA,sBAAsB,CAC5B,WAA0C,EAC1C,IAA0B,EAC1B,SAAiC,EAAA;AAEjC,QAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AACrB,aAAA,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/D,aAAA,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KAC5C;AAWO,IAAA,2BAA2B,CACjC,UAAmB,EAAA;AAEnB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC7B,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAC;SACjF;;AAED,QAAA,IAAI,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE;AACpC,YAAA,OAAO,UAAU,CAAC;SACnB;AAED,QAAA,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE;AACtC,YAAA,OAAO,UAAU,CAAC;SACnB;;;;AAKD,QAAA,MAAM,+CAA+C,GAAG,MAAM,CAAC,MAAM,CACnE,UAAU,CAAC,aAAa,CAAC,QAAQ,CAClC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,+CAA+C,EAAE;AACnD,YAAA,OAAO,UAAU,CAAC;SACnB;;AAGD,QAAA,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;AAChE,YAAA,IAAI,MAAM,CAAC,MAAM,EAAE;gBACjB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;aACnC;AACD,YAAA,IAAI,MAAM,CAAC,EAAE,EAAE;gBACb,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;aAC3B;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,UAAU,CAAC;KACnB;IAEO,MAAM,sBAAsB,CAAC,SAAwC,EAAA;QAC3E,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAChC,YAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC9C,gBAAA,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzC,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,SAAS,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC7C;AAEO,IAAA,0BAA0B,CAChC,IAAsB,EACtB,UAAmC,EACnC,UAAmC,EAAA;AAEnC,QAAA,MAAM,QAAQ,GAAG,MAAM,CACrB,IAAI,CAAC,QAAQ,EACb,CAAC,SAAS,EAAE,KAAK,KAAI;AACnB,YAAA,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;AACrB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB,YAAA,MAAM,gBAAgB,GAAG;AACvB,gBAAA,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;AAC1E,gBAAA,UAAU,EAAE,UAAU,IACpB,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;AACrE,gBAAA,UAAU,EAAE,UAAU,IACpB,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;AACrE,gBAAA,eAAe,EAAE,UAAU,IACzB,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;AACrE,gBAAA,gBAAgB,EAAE,UAAU,IAC1B,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;aACtE,CAAC;YAEF,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AAC3C,gBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;oBACf,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;iBACpD;aACF;YAED,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,OAAO,SAAS,CAAC;SAClB,EACD,EAAE,CACH,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QAClE,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC;SACxC;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAA;QAC1C,OAAO,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAI;AAC7C,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACjB,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;aACvC;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,0BAA0B,CAChC,UAAU,EACV,UAAmC,EACnC,UAAmC,EAAA;AAEnC,QAAA,UAAU,CAAC,OAAO,CAAC,EAAE,IAAG;AACtB,YAAA,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC9E,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,UAAU,CAAC;KACnB;AAEO,IAAA,mBAAmB,CACzB,GAA4B,EAC5B,UAAmC,EACnC,UAAmC,EAAA;QAEnC,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SACtD;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAEO,IAAA,QAAQ,CACd,EAAiC,EACjC,aAAqC,EACrC,OAAqB,EAAA;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,IAAI,CAChD,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;;;;AAInE,QAAA,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAI;;AAErB,YAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,iBAAA,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,aAAa,CAAG,EAAA,IAAI,CAAC,WAAW,CAAA,CAAE,CAAC,CAAC;AACzE,iBAAA,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAE9C,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AAC9D,gBAAA,OAAO,IAAI,CAAC;aACb;;AAED,YAAA,IACE,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBAC1D,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,EACzD;AACA,gBAAA,OAAO,KAAK,CAAC;aACd;;AAGD,YAAA,OAAO,IAAI,CAAC;SACb,CAAC,EACF,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,EACpE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAChD,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EAC7D,OAAO,EAAE,CACV,CAAC;KACH;AAEO,IAAA,4BAA4B,CAAC,SAAwC,EAAA;AAC3E,QAAA,MAAM,cAAc,GAAG,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAClB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CACtF,CAAC;AACF,QAAA,MAAM,gBAAgB,GACpB,CAAC,cAAc,IAAI,cAAc,KAAK,yBAAyB;AAC7D,cAAE,EAAE,CAAC,IAAI,CAAC;AACV,cAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;AAE5D,QAAA,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CACnE,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,gBAAgB,CAAC,KAAK,OAAO,IAAI,gBAAgB,CAAC,CACvE,CAAC;KACH;AAEO,IAAA,qBAAqB,CAAC,OAA6C,EAAA;QACzE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACvB,QAAQ,CAAC,QAAQ,IACf,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAuC,CAAC,CACnF,CACF,CAAC;KACH;AAED;;;;AAIG;IACK,MAAM,yBAAyB,CACrC,SAAwC,EAAA;AAExC,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;QAC9D,IAAI,eAAe,GAAG,KAAK,CAAC;AAE5B,QAAA,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAG;AACxB,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE,qCAAqC,CAAC,EAAE;gBACrD,OAAO,KAAK,CAAC,mCAAmC,CAAC;gBACjD,eAAe,GAAG,IAAI,CAAC;aACxB;AACD,YAAA,IAAI,GAAG,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE;AACpC,gBAAA,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;gBAChC,eAAe,GAAG,IAAI,CAAC;aACxB;AACH,SAAC,CAAC,CAAC;QAEH,IAAI,eAAe,EAAE;AACnB,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;SAClC;AACD,QAAA,OAAO,aAAa,CAAC;KACtB;AAEO,IAAA,cAAc,CAAC,SAAwC,EAAA;QAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;KACzC;IAEO,kBAAkB,CAAC,SAAwC,EAAE,OAAqB,EAAA;QACxF,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;QACpD,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,YAAA,IAAI,EAAE,CAAG,EAAA,IAAI,CAAC,oBAAoB,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA;YAC1C,KAAK,EAAE,UAAU,CAAC,IAAI;YACtB,QAAQ,EAAE,UAAU,CAAC,QAAQ;AAC7B,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC9B,YAAA,KAAK,EACH,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,6BAA6B,CAAC,SAAS,EAAE,OAAO,CAAC;AAC7E,kBAAE,OAAO,CAAC,oBAAoB,CAAC;AAC/B,kBAAE,IAAI;YACV,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,OAAO,CAAC,oBAAoB,CAAC;SAC9D,CAAC;KACV;AAEO,IAAA,KAAK,CAAC,SAAS,EAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,KAAK,KAAI;YAC1D,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,SAAS,EAAE;AAC5C,gBAAA,OAAO,SAAS,CAAC;aAClB;AAED,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KAC/B;AAEO,IAAA,iBAAiB,CAAC,IAAY,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACzB,YAAA,YAAY,EAAE,CAAG,EAAA,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAG,EAAA,IAAI,CAAC,WAAW,CAAA,EAAG,IAAI,CAAE,CAAA;AAC/G,YAAA,QAAQ,EAAE,CAAC;AACZ,SAAA,CAAC,CAAC;KACJ;IAEO,uBAAuB,CAAC,EAAkB,EAAE,IAA0B,EAAA;AAC5E,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,EAAE,CAAC,UAAU,EAAE;YACjB,KAAK,GAAG,CAAG,EAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAA,CAAE,CAAC;SAC/C;aAAM;AACL,YAAA,KAAK,GAAG,IAAI,KAAK,oBAAoB,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;SAC9D;AACD,QAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAA,EAAG,IAAI,CAAC,WAAW,CAAG,EAAA,IAAI,GAAG,IAAI,CAAC,WAAW,CAAG,EAAA,KAAK,EAAE,CAAC;KACrF;IAEO,eAAe,CAAC,SAAiD,EAAE,OAAQ,EAAA;AACjF,QAAA,IACE,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACjE,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAC5B;AACA,YAAA,OAAO,EAAE,CAAC;SACX;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,qBAAqB,CAAC,YAA8B,EAAA;QAC1D,OAAO;AACL,YAAA,aAAa,EAAE;AACb,gBAAA,GAAG,YAAY;AACf,gBAAA,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,qBAAqB;AAChD,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,OAAO,CAClB,wFAAwF,CACzF;AACF,aAAA;AACD,YAAA,CAAC,sBAAsB,YAAY,CAAC,IAAI,CAAE,CAAA,GAAG,EAAE;SACf,CAAC;KACpC;+GAn8BU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MC1CrB,sBAAsB,CAAA;IAUjC,WACU,CAAA,EAAe,EACf,gBAAkC,EAAA;QADlC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;QACf,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAX5C,QAAA,IAAA,CAAA,OAAO,GAAG;AACR,YAAA,UAAU,EAAE,uBAAuB;AACnC,YAAA,WAAW,EAAE,qBAAqB;SACnC,CAAC;QAEO,IAAwB,CAAA,wBAAA,GAAG,EAAE,CAAC;QAC9B,IAAsB,CAAA,sBAAA,GAAG,IAAI,CAAC;QAC9B,IAA0B,CAAA,0BAAA,GAAG,IAAI,CAAC;KAKvC;AACJ;;;;;;AAMG;AACH,IAAA,QAAQ,CACN,SAA2B,EAC3B,QAAiB,EACjB,kBAAsC,EAAA;AAEtC,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACnB,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,kBAAkB,CAAC;AAC1F,YAAA,sBAAsB,EAAE,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC;AACnE,SAAA,CAAC,CAAC;KACJ;AACD;;;;;;AAMG;AACH,IAAA,uBAAuB,CACrB,SAA2B,EAC3B,QAAiB,EACjB,kBAAsC,EAAA;AAEtC,QAAA,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,cAAc;AACpD,cAAE,IAAI;cACJ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC;AACvC,kBAAE,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC;AAC/B,kBAAE,SAAS,CAAC,cAAc,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,EAAE,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,YAAA,QAAQ,EAAE;AACR,gBAAA,SAAS,EAAE,QAAQ,IAAI,IAAI,CAAC,0BAA0B;AACtD,gBAAA,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC;AACrE,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,IAAI;AACb,qBAAC,QAAQ;0BACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClD,0BAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC1D,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACjD,aAAA;AACD,YAAA,WAAW,EAAE,CAAC,SAAS,EAAE,WAAW,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,cAAc,EAAE,CAAC,mBAAmB,CAAC;AACrC,YAAA,mBAAmB,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,mBAAmB,CAAC;AACvD,YAAA,IAAI,kBAAkB,KAAK,UAAU,IAAI;AACvC,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,KAAK,EAAE,SAAS,EAAE,UAAU,IAAI,KAAK;wBACrC,QAAQ,EAAE,kBAAkB,KAAK,sBAAsB;AACxD,qBAAA;AACF,iBAAA;aACF,CAAC;AACH,SAAA,CAAC,CAAC;KACJ;AACD;;;;AAIG;AACH,IAAA,0BAA0B,CAAC,SAA2B,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACnB,YAAA,YAAY,EAAE;AACZ,gBAAA,SAAS,EAAE,YAAY,IAAI,IAAI,CAAC,wBAAwB;AACxD,gBAAA,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxC,aAAA;AACD,YAAA,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,oBAAoB,CAAC;AACzD,YAAA,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;AACpE,YAAA,aAAa,EAAE,CAAC,SAAS,EAAE,aAAa,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC;AAClF,SAAA,CAAC,CAAC;KACJ;+GAzFU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCKY,8BAA8B,CAAA;AACzC;;;AAGG;AACH,IAAA,IACI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IACD,IAAI,cAAc,CAAC,GAAyB,EAAA;AAC1C,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,yBAAyB,EAAE;AAC7C,YAAA,IAAI,CAAC,eAAe,GAAG,yBAAyB,CAAC;YACjD,OAAO;SACR;AACD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;KACjC;AASD,IAAA,WAAA,CACU,gBAAkC,EAClC,gBAAkC,EAClC,WAAwB,EAAA;QAFxB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AAXxB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAwB,CAAC;QAC1E,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;QAC9B,IAAwB,CAAA,wBAAA,GAAW,EAAE,CAAC;QACtC,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QACb,IAAW,CAAA,WAAA,GAAiB,EAAE,CAAC;QAC/B,IAAS,CAAA,SAAA,GAAG,GAAG,CAAC;KAOpB;AAEJ,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,EAAE;YACnE,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/C,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACrD,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;SACpE;aAAM;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;KACF;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnC,OAAO;SACR;QAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AACvE,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QAEtC,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;AACjF,gBAAA,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,sBAAsB;AACzE,gBAAA,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,0BAA0B;AACvE,gBAAA,WAAW,EAAE,yBAAyB;AACvC,aAAA,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,MAAM,sBAAsB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;AACjF,gBAAA,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,sBAAsB;AACzE,gBAAA,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,0BAA0B;AACvE,gBAAA,WAAW,EAAE,sBAAsB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE;AACpD,aAAA,CAAC,CAAC;SACJ;KACF;AAEO,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC;KAC9E;IAEO,qBAAqB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM;YAC7C,IAAI;YACJ,EAAE;AACH,SAAA,CAAC,CAAC,CAAC;KACL;IAEO,2BAA2B,GAAA;QACjC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,KAAK,yBAAyB,EAAE;YAC7E,OAAO,IAAI,CAAC,gBAAgB,CAAC;SAC9B;QACD,OAAO,IAAI,CAAC,cAAc;aACvB,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;aAC7E,MAAM,CAAC,OAAO,CAAC,CAAC;KACpB;+GArFU,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,2KCb3C,2lCAoCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDvBa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,2lCAAA,EAAA,CAAA;gJASlC,cAAc,EAAA,CAAA;sBADjB,KAAK;gBAWI,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;;;MEpBI,0BAA0B,CAAA;IAQrC,WACU,CAAA,SAA2B,EAC3B,KAAmB,EAAA;QADnB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;KACzB;AAEJ,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;KACpC;AAEO,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBACvC,IAAI,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe;AACzE,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC;SAC7B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,IAAI,CAAC;SAC1B;KACF;+GA5BU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,mQCTvC,05CAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDvBa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,05CAAA,EAAA,CAAA;kHAI1B,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEIK,+BAA+B,CAAA;AAqB1C,IAAA,WAAA,CACU,SAA2B,EAC3B,eAAgC,EAChC,KAAqB,EAAA;QAFrB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAChC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QAtB/B,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAChB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAQP,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAO5D,QAAA,IAAA,CAAA,sBAAsB,GAAoB,aAAa,CAAC,gBAAgB,CAAC;AACzE,QAAA,IAAA,CAAA,yBAAyB,GAAG,OAAO,CAAC,mDAAmD,CAAC,CAAC;;AAwBzF,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,IAAG,GAAG,CAAC;;AAEnB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG,CAAC;KApBjB;AAEJ,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3D,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CACtE,IAAI,CAAC,sBAAsB,CAC5B,CAAC;KACH;AAED,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CACtC,IAAI,CAAC,sBAAsB,EAC3B,CAAA,SAAA,EAAY,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA,YAAA,CAAc,CAC1C,CAAC;KACH;AAOD,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;KACF;AAED,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,SAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;KACF;AAED,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;AAED,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,EAAE;AACvD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;SACpC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KAC9B;IAEO,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK;AACpC,cAAE,OAAO,CAAC,0BAA0B,CAAC;AACrC,cAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAEzC,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,sBAAsB,EAAE;AACtD,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CACrB,CAAA;AAC8M,qNAAA,CAAA,CAC/M,CAAC;YACF,OAAO;SACR;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CACrB,CAAA;;;;;AAKK,cAAA,CAAA,CACN,CAAC;aACH;iBAAM;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CACrB,CAAA;;;;;AAKO,gBAAA,CAAA,CACR,CAAC;aACH;SACF;aAAM;AACL,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CACrB,CAAA,wNAAA,CAA0N,CAC3N,CAAC;aACH;iBAAM;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CACrB,CAAA,wNAAA,CAA0N,CAC3N,CAAC;aACH;SACF;KACF;AAEO,IAAA,MAAM,qBAAqB,GAAA;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACvC,IAAI,EAAE,IAAI,CAAC,eAAe;AAC3B,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,IAAI,CAAC;KAC5C;+GAxIU,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,+BAA+B,EAR/B,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,+BAA+B,CAAC;AAC9D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBH,6uDA0DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,wBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDvCa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAX3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAE7B,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qCAAqC,CAAC;AAC9D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,6uDAAA,EAAA,CAAA;kJAOQ,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACI,sBAAsB,EAAA,CAAA;sBAA/B,MAAM;;;MEfI,iCAAiC,CAAA;AAiB5C,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAN5C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAInD,QAAA,IAAA,CAAA,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,0BAA0B,GAAG,OAAO,CAAC,6CAA6C,CAAC,CAAC;KACnC;IAE1D,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;KACrD;IAED,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;KACxC;+GA3BU,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,udCf9C,ypNAoMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,8BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDrLa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAJ7C,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,ypNAAA,EAAA,CAAA;qFAIjC,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACI,sBAAsB,EAAA,CAAA;sBAA/B,MAAM;;;MEbI,oCAAoC,CAAA;AAa/C,IAAA,WAAA,CAAoB,uBAAgD,EAAA;QAAhD,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;AAVpE,QAAA,IAAA,CAAA,OAAO,GAAG;AACR,YAAA,UAAU,EAAE,uBAAuB;AACnC,YAAA,WAAW,EAAE,qBAAqB;SACnC,CAAC;AACQ,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAExC,CAAC;QAEK,IAAwB,CAAA,wBAAA,GAAG,EAAE,CAAC;KAEiC;IAExE,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;YAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;AAED,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QACrC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;KAC3C;AAED,IAAA,iBAAiB,CAAC,WAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QACvC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;KAC3C;IAEO,iBAAiB,GAAA;AACvB,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO;AACzB,YAAA,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;SAChC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACpE,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,IAAG;YACzB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAC/D,uBAAuB,EACvB,SAAS,EACT,IAAI,CAAC,OAAO,CAAC,UAAU,CACxB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAChE,qBAAqB,EACrB,SAAS,EACT,IAAI,CAAC,OAAO,CAAC,WAAW,CACzB,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;+GA7DU,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAM,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oCAAoC,mOCbjD,6hDA8CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDjCa,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAJhD,SAAS;+BACE,mCAAmC,EAAA,QAAA,EAAA,6hDAAA,EAAA,CAAA;yFAIpC,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBAKI,cAAc,EAAA,CAAA;sBAAvB,MAAM;;;METI,gCAAgC,CAAA;IAY3C,WACU,CAAA,gBAAkC,EACnC,uBAAgD,EAAA;QAD/C,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QACnC,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAbhD,IAAgB,CAAA,gBAAA,GAAuB,EAAE,CAAC;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAmC,IAAI,YAAY,EAAE,CAAC;QACxE,IAAwB,CAAA,wBAAA,GAAwD,EAAE,CAAC;AACnF,QAAA,IAAA,CAAA,wBAAwB,GAAG,OAAO,CAChC,+DAA+D,CAChE,CAAC;AACF,QAAA,IAAA,CAAA,0BAA0B,GAAG,OAAO,CAClC,kHAAkH,CACnH,CAAC;KAKE;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,mCAAmC,EAAE,CAAC;KAC5C;IAED,mCAAmC,GAAA;AACjC,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC7C,YAAA,MAAM,eAAe,GAAoD,EAAE,GAAG,SAAS,EAAE,CAAC;YAE1F,IAAI,qBAAqB,GAAG,EAAE,CAAC;YAC/B,IAAI,iBAAiB,GAAG,EAAE,CAAC;YAC3B,IAAI,aAAa,GAAG,EAAE,CAAC;YAEvB,IAAI,SAAS,CAAC,kBAAkB,CAAC,UAAU,KAAK,QAAQ,EAAE;gBACxD,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC7D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAC3E,CAAC;AACF,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACpD,SAAS;aACV;YACD,IAAI,SAAS,CAAC,kBAAkB,CAAC,UAAU,KAAK,OAAO,EAAE;AACvD,gBAAA,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1F,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACpD,SAAS;aACV;YAED,MAAM,kBAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,MAAM,GAAG,CAAC,CAAC;YAC5F,IAAI,kBAAkB,EAAE;AACtB,gBAAA,MAAM,uBAAuB,GAAG,SAAS,CAAC,kBAAkB,CAAC,uBAAuB;AACjF,qBAAA,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;qBAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACnD,IAAI,CAAC,QAAQ;AACX,sBAAE,OAAO,CAAC,+BAA+B,CAAC;AAC1C,sBAAE,OAAO,CAAC,kCAAkC,CAAC,EAC/C,EAAE,MAAM,EAAE,uBAAuB,EAAE,CACpC,CAAC;aACH;AAED,YAAA,MAAM,iBAAiB,GAAG,SAAS,CAAC,kBAAkB,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5F,IAAI,iBAAiB,EAAE;gBACrB,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC/C,SAAS,CAAC,kBAAkB,CAAC,UAAU;AACrC,sBAAE,OAAO,CAAC,yCAAyC,CAAC;AACpD,sBAAE,OAAO,CAAC,0CAA0C,CAAC,CACxD,CAAC;aACH;AAED,YAAA,IAAI,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAC9C,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE;oBAC/D,MAAM,UAAU,GAAG,SAAS,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBACtE,IAAI,CAAC,UAAU,EAAE;wBACf,SAAS;qBACV;AACD,oBAAA,MAAM,oBAAoB,GAAG,SAAS,CAAC,oBAAoB;AACzD,0BAAE,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;0BAC/D,UAAU,CAAC;oBACf,QAAQ,MAAM;AACZ,wBAAA,KAAK,OAAO;4BACV,aAAa;gCACX,aAAa;oCACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,EAAE;wCAC1E,UAAU,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAG,CAAA,CAAA;AACrD,qCAAA,CAAC,CAAC;4BACL,MAAM;AACR,wBAAA,KAAK,SAAS;4BACZ,aAAa;gCACX,aAAa;oCACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,EAAE;wCAC5E,UAAU,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAG,CAAA,CAAA;AACrD,qCAAA,CAAC,CAAC;4BACL,MAAM;AACR,wBAAA,KAAK,QAAQ;4BACX,aAAa;gCACX,aAAa;oCACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,EAAE;wCAC5E,UAAU,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAG,CAAA,CAAA;AACrD,qCAAA,CAAC,CAAC;4BACL,MAAM;AACR,wBAAA,KAAK,aAAa;4BAChB,aAAa;gCACX,aAAa;oCACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,EAAE;wCAC/E,UAAU,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAG,CAAA,CAAA;AACrD,qCAAA,CAAC,CAAC;4BACL,MAAM;AACR,wBAAA;4BACE,MAAM;qBACT;iBACF;aACF;YAED,eAAe,CAAC,eAAe,GAAG,CAAG,EAAA,qBAAqB,IAAI,iBAAiB,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,CAAC;AACnG,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SACrD;KACF;AAED,IAAA,eAAe,CAAC,SAA2B,EAAA;AACzC,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,YAAY,CAAC,kBAAkB,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAClC;+GArHU,gCAAgC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAS,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,gLCX7C,0hFA0EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD/Da,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAJ5C,SAAS;+BACE,+BAA+B,EAAA,QAAA,EAAA,0hFAAA,EAAA,CAAA;0HAIhC,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;;;MEkCI,wBAAwB,CAAA;IA6CnC,WACU,CAAA,uBAAgD,EAChD,gBAAkC,EAClC,YAAiC,EACjC,cAA8B,EAC9B,WAAwB,EACxB,MAAc,EACd,SAA2B,EAC3B,KAAqB,EACrB,sBAA8C,EAC9C,QAAyB,EACzB,YAA0B,EAC1B,KAAmB,EACnB,gBAAkC,EAAA;QAZlC,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAChD,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAqB;QACjC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QACrB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;QAC9C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QACzB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACnB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAzD5C,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;QASV,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;AAMlC,QAAA,IAAA,CAAA,WAAW,GAA0B,qBAAqB,CAAC,OAAO,CAAC;AAMzD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAoB,CAAC;AACtD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAO,CAAC;AAC3C,QAAA,IAAA,CAAA,QAAQ,GAAkB,IAAI,OAAO,EAAE,CAAC;QAEvC,IAAgB,CAAA,gBAAA,GAAG,eAAe,CAAC;AACnC,QAAA,IAAA,CAAA,IAAI,GAAyB;AACpC,YAAA,OAAO,EAAE;gBACP,SAAS,EAAE,qBAAqB,CAAC,OAAO;AACxC,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC;AAC1B,aAAA;AACD,YAAA,UAAU,EAAE;gBACV,SAAS,EAAE,qBAAqB,CAAC,UAAU;AAC3C,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC;AAC7B,aAAA;AACD,YAAA,cAAc,EAAE;gBACd,SAAS,EAAE,qBAAqB,CAAC,cAAc;AAC/C,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AAClC,aAAA;SACF,CAAC;KAgBE;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,sBAAsB;AACzB,YAAA,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBACvC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;kBACpC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjD,kBAAE,IAAI,CAAC,eAAe,CAAC;QAE3B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,WAAW,GAAA;QACT,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAChC;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED,IAAA,MAAM,IAAI,GAAA;QACR,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG;YACf,GAAG,IAAI,CAAC,SAAS;AACjB,YAAA,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK;AACjC,YAAA,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK;SACrC,CAAC;AACF,QAAA,MAAM,uBAAuB,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,IAAG;AACjF,YAAA,IAAI,GAAG,KAAK,qBAAqB,EAAE;AACjC,gBAAA,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;aACtD;AACD,YAAA,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB;AACrE,cAAE,EAAE;cACF,IAAI,CAAC,gBAAgB;AACrB,kBAAE,IAAI;kBACJ,SAAS,CAAC;QAEhB,IAAI,CAAC,SAAS,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,kBAAkB;AAC/B,YAAA,IAAI,CAAC,iCAAiC,CAAC,uBAAuB,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClC,YAAA,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;SACjC;aAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxC,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;SAC9B;aAAM;AACL,YAAA,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,EAAE,CAAC,oBAAoB,GAAG;AAC7B,gBAAA,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,IAAI,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC;aACvE,CAAC;SACH;KACF;AAED,IAAA,iCAAiC,CAAC,gBAA0B,EAAA;QAC1D,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ;AAC7C,YAAA,uBAAuB,EAAE,gBAAgB;iBACtC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,YAAY,CAAC;iBACvC,GAAG,CAAC,KAAK,IAAI,0BAA0B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC3D,YAAA,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,YAAY,CAAC;AAChE,kBAAE,IAAI,CAAC,SAAS,CAAC,UAAU;AAC3B,kBAAE,SAAS;SACd,CAAC;KACH;AAED,IAAA,SAAS,CAAC,WAAkC,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;KAC5B;AAED,IAAA,MAAM,MAAM,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAElC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAW,KAAI;AAC9D,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS,CAAC,CAAC;gBACtE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE;AACzE,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;YACH,OAAO;SACR;aAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAClC,OAAO;SACR;AAAM,aAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE;YAC5E,OAAO;SACR;QACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;AAED,IAAA,MAAM,aAAa,CAAC,WAAW,GAAG,KAAK,EAAA;AACrC,QAAA,IAAI,aAAsB,CAAC;QAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;YACxD,aAAa,GAAG,IAAI,CAAC;SACtB;aAAM;YACL,IAAI,WAAW,EAAE;gBACf,aAAa,GAAG,KAAK,CAAC;aACvB;iBAAM;AACL,gBAAA,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;aAC7C;SACF;QACD,IAAI,aAAa,EAAE;YACjB,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACjC;AACD,QAAA,OAAO,aAAa,CAAC;KACtB;AAED,IAAA,IAAI,CAAC,MAAe,EAAA;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,IAAI,EAAE,CAAC;SACb;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;IAED,MAAM,eAAe,CAAC,SAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB;AACrE,cAAE,EAAE;cACF,IAAI,CAAC,gBAAgB;AACrB,kBAAE,IAAI;kBACJ,SAAS,CAAC;AAChB,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;KAC9B;AAED,IAAA,MAAM,oBAAoB,GAAA;AACxB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE;AAC5F,YAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI;AACnD,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAClC,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,IAAI,EAAE,gBAAgB;AACvB,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;KACnB;IAEO,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,6BAA6B,CAClF,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,cAAc,CACpB,CAAC;KACH;IAEO,QAAQ,GAAA;QACd,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAC9D,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,kBAAkB,CACxB,CAAC;QACF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,qBAAqB,CAAc,CAAC;QAC7F,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzD,wBAAwB,CACZ,CAAC;KAChB;AAEO,IAAA,MAAM,cAAc,GAAA;AAC1B,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CACtB,OAAO,CAAC,yBAAyB,CAAC,EAClC,OAAO,CACL,qFAAqF,CACtF,EACD,MAAM,CAAC,OAAO,EACd;AACE,gBAAA,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC;AACpB,gBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC1B,aAAA,CACF,CAAC;AACF,YAAA,OAAO,IAAI,CAAC;SACb;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK,CAAC;SACd;KACF;AAEO,IAAA,MAAM,kBAAkB,GAAA;AAC9B,QAAA,MAAM,EAAE,GAAkC,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CACjF,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,CACpB,CAAC;AAEF,QAAA,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;KAClE;IAEO,MAAM,eAAe,CAAC,EAAiC,EAAA;AAC7D,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtE,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;AACjF,YAAA,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa;AAChE,YAAA,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;AACnD,YAAA,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,MAAM,EAAE,GAAG,aAAa,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;AACxC,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,WAAW;AAC/D,YAAA,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,GAAG,WAAW;AAC5D,YAAA,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,WAAW;YACnE,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;AACtF,YAAA,4BAA4B,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AAC5C,kBAAE,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,aAAa,CAAE,CAAA;AAClC,kBAAE,WAAW;YACf,wBAAwB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;YAC7F,0BAA0B,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;AAC1F,YAAA,gCAAgC,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AAChD,kBAAE,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA,CAAA,EAAI,aAAa,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;AACnE,kBAAE,WAAW;AACf,YAAA,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI;AACpF,YAAA,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,eAAe,CACnD,IAAI,CAAC,cAAc,CAAC,WAA6B,CAClD;AACF,SAAA,CAAC,CAAC;KACJ;AAGa,IAAN,MAAM,mBAAmB,CAAC,GAAW,EAAA;QAC3C,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;AACrD,cAAE,GAAG;cACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KACpD;AAEO,IAAA,MAAM,eAAe,GAAA;AAC3B,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAClF,MAAM,MAAM,GAAG,CACb,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;gBAC9C,IAAI;gBACJ,IAAI;gBACJ,mBAAmB;gBACnB,QAAQ;gBACR,WAAW;aACe,CAAC,EAC7B,IAAI,CAAC;YAEP,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CACvC,IAAI,CAAC,SAAS,EACd,SAAS,EACT,GAAG,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAA,EAAG,MAAM,CAAC,EAAE,CAAE,CAAA,CAClE,CAAC;AACF,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE;AAC9E,gBAAA,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU;AAC7D,gBAAA,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;gBACnD,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;AACb,gBAAA,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;AACrD,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,MAAM,CAAC,mBAAmB,EAAE;AAC9B,gBAAA,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAChC,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;SACpD;QAAC,OAAO,EAAE,EAAE;;SAEZ;KACF;AAEO,IAAA,MAAM,eAAe,GAAA;AAC3B,QAAA,IAAI;YACF,MAAM,WAAW,GAAkC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtE,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;AACvE,gBAAA,WAAW,CAAC,aAAa,GAAG,GAAG,CAAC;gBAChC,MAAM,IAAI,CAAC,YAAY,CAAC;AACtB,oBAAA,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;oBACnB,IAAI;oBACJ,IAAI;oBACJ,mBAAmB;oBACnB,QAAQ;oBACR,WAAW;AACZ,iBAAA,CAAC,CAAC;aACJ;iBAAM;AACL,gBAAA,WAAW,CAAC,aAAa,GAAG,GAAG,CAAC;aACjC;AAED,YAAA,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAClE,WAAW,EACX,IAAI,CAAC,cAAc,CACpB,CAAC;YACF,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC9C;QAAC,OAAO,EAAE,EAAE;;SAEZ;KACF;IAEO,IAAI,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AAChF,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC;SAC3F;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,WAAW;AACd,YAAA,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB;kBAC1C,qBAAqB,CAAC,UAAU;AAClC,kBAAE,qBAAqB,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;IAEO,uBAAuB,GAAA;AAC7B,QAAA,MAAM,mBAAmB,GAA8B;YACrD,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAC7F,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACrB,kBAAE,uCAAuC;AACzC,kBAAE,IAAI,CAAC,sBAAsB,CAAC,0BAA0B;AAC1D,YAAA,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC,sBAAsB;YACxD,eAAe,EAAE,IAAI,CAAC,UAAU;AAChC,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC/C;aAAM;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC;AACrC,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC;SACzC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;KACjG;IAEO,MAAM,YAAY,CAAC,EAA2B,EAAA;AACpD,QAAA,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;SAC5D;QACD,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC5D;IAEO,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;;YAE5D,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CACzD,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS,CAC/C,CAAC;;AAEF,YAAA,IAAI,CAAC,kBAAkB,IAAI,gBAAgB,EAAE,aAAa,EAAE;gBAC1D,OAAO;aACR;;AAED,YAAA,kBAAkB,CAAC,IAAI,GAAG,IAAI,CAAC;AAC/B,YAAA,kBAAkB,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC;AACxC,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;SAC5B;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC1C;+GA5aU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAK,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAT,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,gWChDrC,ywHAyGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oCAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gCAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAd,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;AD2OgB,UAAA,CAAA;AADb,IAAA,OAAO,EAAE;;;;AAQT,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,qBAAA,EAAA,IAAA,CAAA,CAAA;4FA3SU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,ywHAAA,EAAA,CAAA;2bAOvB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAYI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBA6QO,mBAAmB,EAAA,EAAA,EAAA,EAAA,CAAA;;ME3UtB,aAAa,CAAA;AAGxB,IAAA,WAAA,CACU,uBAAgD,EAChD,gBAAkC,EAGnC,YAAgD,EAAA;QAJ/C,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAChD,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAGnC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoC;QAEvD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,IAAG;AACtD,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,mBAAmB,CAAC,WAAW,EAAA;QACnC,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC1D;IAED,oBAAoB,GAAA;AAClB,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;AACpD,YAAA,GAAG,GAAG;YACN,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAChD,SAAA,CAAC,CAAC,CAAC;;;AAIJ,QAAA,MAAM,mCAAmC,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,IACtE,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CACtB,CAAC;AACF,QAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,YAAY,EAAE,YAAY;aAC9B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;AACzE,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;KACzF;IAED,MAAM,SAAS,CAAC,MAAuB,EAAA;AACrC,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9E,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE9C,QAAA,IAAI,GAAG,CAAC,GAAG,EAAE,uBAAuB,CAAC,EAAE;YACrC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC3D,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC3D,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YACnD,MAAM,CAAC,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAC/D,YAAA,MAAM,CAAC,0BAA0B;AAC/B,gBAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,mCAAmC;AACrD,oBAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B;oBAC5C,MAAM,CAAC,0BAA0B,CAAC;SACrC;aAAM;YACL,OAAO,MAAM,CAAC,WAAW,CAAC;YAC1B,OAAO,MAAM,CAAC,iBAAiB,CAAC;SACjC;AACD,QAAA,OAAO,MAAgB,CAAC;KACzB;IAEO,kBAAkB,CACxB,MAAuB,EACvB,GAA+B,EAAA;AAE/B,QAAA,IAAI,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE;YAC9B,MAAM,CAAC,MAAM,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;SACzF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAhEU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,2FAOd,wBAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAPvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAOI,QAAQ;;0BACR,MAAM;2BAAC,wBAAwB,CAAA;;;MCVvB,sBAAsB,CAAA;AAJnC,IAAA,WAAA,GAAA;AAME,QAAA,IAAA,CAAA,cAAc,GAA+B;AAC3C,YAAA,uBAAuB,EAAE,IAAI;AAC7B,YAAA,qBAAqB,EAAE,IAAI;SAC5B,CAAC;AAIH,KAAA;+GATY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,oHCNnC,wsDA+CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAZ,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDzCa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,wsDAAA,EAAA,CAAA;8BAK9B,cAAc,EAAA,CAAA;sBADb,KAAK;gBAON,GAAG,EAAA,CAAA;sBADF,KAAK;;;MESK,qBAAqB,CAAA;AA+BhC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;KACvB;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;KACxF;AAWD,IAAA,WAAA,CACU,aAA4B,EAC5B,KAAiB,EACjB,SAA2B,EAC5B,uBAAgD,EAAA;QAH/C,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC5B,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAlDzD,IAAI,CAAA,IAAA,GAAkC,QAAQ,CAAC;AAI/C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAIhB,QAAA,IAAA,CAAA,OAAO,GAAG;AACR,YAAA,WAAW,EAAE,qBAAqB;AAClC,YAAA,YAAY,EAAE,qBAAqB;SACpC,CAAC;AACF,QAAA,IAAA,CAAA,cAAc,GAAG;AACf,YAAA,WAAW,EAAE,qBAAqB;AAClC,YAAA,YAAY,EAAE,qBAAqB;SACpC,CAAC;AACF,QAAA,IAAA,CAAA,eAAe,GAAG,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAC;QAGpE,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAiBlB,IAAM,CAAA,MAAA,GAAoB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACxD,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACxB,SAAC,CAAC,CAAC;KAWC;AAEJ,IAAA,MAAM,kBAAkB,GAAA;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;SAC/D;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa;AAChC,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,KAAoB,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAC1F;aACA,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,WAAW,EAAE,CAAC;AAEnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;AAC7B,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC5B;KACF;IAED,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;KACjE;IAED,qBAAqB,GAAA;AACnB,QAAA,QACE,CAAC,IAAI,CAAC,YAAY;AAClB,aAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,uBAAuB;AAClD,gBAAA,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM;gBACzB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC7C;KACH;AAED,IAAA,gBAAgB,CAAC,SAAqC,EAAA;QACpD,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;AACnD,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AACrC,YAAA,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AACjC,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,SAAS,EAAE,CAAC;QAClF,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;AAED,QAAA,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAEvD,IACE,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,YAAY,CAAC,MAAM;;YAExB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAC/B;YACA,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC9C,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;SACzC;AAED,QAAA,MAAM,MAAM,GAAG;YACb,EAAE;YACF,EAAE;YACF,MAAM;YACN,OAAO;AACP,YAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAChE,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK;AAC/B,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC7B,YAAA,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,GAAG,EAAE,CAAC;SACzD,CAAC;AAEZ,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KACpB;AAED,IAAA,MAAM,CAAC,GAAG,EAAE,IAAA,GAA4B,QAAQ,EAAA;QAC9C,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACxC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AAC1C,YAAA,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrD,gBAAA,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;aAClC;SACF;QAED,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QAEpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACrD,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;AAE3D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SACzF;AAED;;AAEG;AACH,QAAA,IAAI,CAAC,wBAAwB;AAC3B,YAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,CAAC;AAEhF,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAErF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAC5C,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CACtE,CAAC;SACH;aAAM;YACL,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;KAC/B;AAED,IAAA,UAAU,CAAC,IAAmC,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,KAAK,GAAA;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB;IAED,QAAQ,CAAC,SAAS,GAAG,KAAK,EAAA;QACxB,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACxE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;SAC7C;AAED,QAAA,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACzE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;SAC9C;QAED,IAAI,SAAS,EAAE;AACb,YAAA,UAAU,CAAC,CAAmB,gBAAA,EAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;SAC3F;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC;AACjD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;SAC9B;KACF;IAED,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE;AACvC,YAAA,QACE,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAC5F;SACH;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;KACtC;IAEO,mBAAmB,GAAA;AACzB,QAAA,QACE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,eAAe;AAC5C,YAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,oBAAoB;AACjD,YAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAC/C;KACH;IAEO,WAAW,GAAA;QACjB,MAAM,gBAAgB,GACpB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvF,MAAM,sBAAsB,GAC1B,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC;AACzF,YAAA,EAAE,CAAC;QACL,MAAM,aAAa,GAAa,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAE1F,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;AAClC,YAAA,GAAG,gBAAgB;AACnB,YAAA,GAAG,sBAAsB;AACzB,YAAA,GAAG,aAAa;AACjB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC;KAC9F;AAEO,IAAA,uBAAuB,CAAC,SAAS,EAAA;AACvC,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO;AAChC,YAAA,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa;SACvC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CACnD,MAAM,EACN,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAC1B,SAAS,CACV,CAAC;QACF,OAAO,CAAC,CAAC,KAAK,CAAC;KAChB;AAEO,IAAA,eAAe,CAAC,UAAoB,EAAA;AAC1C,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAC7C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB;aACxC,0BAA0B,CAAC,UAAU,CAAC;AACtC,aAAA,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAChC,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,IAAG;AACzB,YAAA,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CACpD,sBAAsB,EACtB,SAAS,EACT,YAAY,CACb,CAAC;AACF,YAAA,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CACnD,qBAAqB,EACrB,SAAS,EACT,WAAW,CACZ,CAAC;AACJ,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;KACtC;AAEO,IAAA,mBAAmB,CAAC,iBAAiB,EAAE,OAAO,GAAG,EAAE,EAAA;AACzD,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE;AACR,gBAAA,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ;gBAClC,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AACtD,gBAAA,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC;gBAC7C,OAAO;AACP,gBAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AACnC,aAAA;AACD,YAAA,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM;SACV,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;KACnD;AAEO,IAAA,4BAA4B,CAAC,YAAiC,EAAA;AACpE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAExE,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;AAEhD,YAAA,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG;kBAC5C,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc;AAClD,kBAAE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;YAEzC,IAAI,CAAC,cAAc,EAAE;gBACnB,YAAY,CAAC,MAAM,GAAG;AACpB,oBAAA,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACnB,oBAAA,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;iBACxB,CAAC;aACH;SACF;AACD,QAAA,OAAO,YAAY,CAAC;KACrB;+GA1TU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAiB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAhB,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAgB,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,gQCtBlC,gqVAyUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,2BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAX,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAS,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDnTa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,gqVAAA,EAAA,CAAA;8KA6B7B,gBAAgB,EAAA,CAAA;sBADf,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAItC,UAAU,EAAA,CAAA;sBADT,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;AE9C5C;;AAEG;MAIU,0BAA0B,CAAA;AACrC;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;KACzB;AAMD;;;AAGG;AACH,IAAA,SAAS,CAAC,KAA6B,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AACD;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AACD;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;+GA/BU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACLD;;AAEG;MAIU,yBAAyB,CAAA;AACpC;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;KAC9B;AACD;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAClD;AAYD,IAAA,WAAA,CAAoB,UAAsC,EAAA;QAAtC,IAAU,CAAA,UAAA,GAAV,UAAU,CAA4B;AAX1D;;;AAGG;QACK,IAAS,CAAA,SAAA,GAA6B,EAAE,CAAC;AACjD;;;AAGG;QACK,IAAS,CAAA,SAAA,GAA6B,EAAE,CAAC;KAEa;AAC9D;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AACD;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAC1B,OAAO;SACR;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEhD,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAC1B,OAAO;SACR;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAErC,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AACpE,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACvC,QAAA,OAAO,WAAW,CAAC;KACpB;+GAtEU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACLD;;;AAGG;MAIU,wBAAwB,CAAA;AACnC,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,KAAK,CAAC,CAAC;KAC7C;AACD;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;KACzC;AACD;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;KACzC;IAED,WACU,CAAA,UAAsC,EACtC,SAAoC,EAAA;QADpC,IAAU,CAAA,UAAA,GAAV,UAAU,CAA4B;QACtC,IAAS,CAAA,SAAA,GAAT,SAAS,CAA2B;KAC1C;AACJ;;;AAGG;AACH,IAAA,IAAI,CAAC,KAA6B,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAClC;AACD;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACjC;AACD;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KACnC;AACD;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KAC9B;AACD;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KAC9B;AACD;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KAC/B;+GA9DU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AC6CD;;;;AAIG;MAWU,yBAAyB,CAAA;AAqCpC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC;KAClF;IAiBD,WACU,CAAA,KAAqB,EACrB,MAAc,EACd,uBAAgD,EAChD,KAAmB,EACnB,QAAmB,EACc,YAAoC,EACrE,aAA4B,EAC5B,OAAuB,EACvB,gBAAkC,EAClC,gBAAkC,EAClC,gBAAkC,EAClC,KAAmB,EACpB,eAAyC,EAAA;QAZxC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QACrB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAChD,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACnB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACc,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAwB;QACrE,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAgB;QACvB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACpB,IAAe,CAAA,eAAA,GAAf,eAAe,CAA0B;QAjElD,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;QAIrB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAGjB,IAAc,CAAA,cAAA,GAAa,EAAE,CAAC;QAE9B,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;QAEhB,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;QAEjB,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;QAIjB,IAAqB,CAAA,qBAAA,GAAG,IAAI,CAAC;AAG7B;;AAEG;QAEH,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAGzB,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;QAUX,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;QAMvB,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC;AACN,QAAA,IAAA,CAAA,kBAAkB,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACpE,IAAoB,CAAA,oBAAA,GAAG,OAAO,CAAC,CAAA;;;AAGvB,kBAAA,CAAA,CAAC,CAAC;QAEX,IAA4B,CAAA,4BAAA,GAAG,KAAK,CAAC;KAgBzC;IAEJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO;SACR;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAGD,MAAM,mBAAmB,CAAC,MAAyB,EAAA;QACjD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;KACF;AAED;;;AAGG;AACH,IAAA,iBAAiB,CAAC,MAAM,EAAA;AACtB,QAAA,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACzE;KACF;AAED;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;SAC5B;KACF;AACD;;;;;AAKG;AACH,IAAA,MAAM,aAAa,CAAC,WAAW,GAAG,KAAK,EAAA;AACrC,QAAA,MAAM,aAAa,GACjB,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC;aACtD,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;;QAG3D,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACjC;AACD,QAAA,OAAO,aAAa,CAAC;KACtB;AAED;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,GAAG,OAAO,CAClB,2JAA2J,CAC5J,CAAC;AAEF,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;AACvE,gBAAA,EAAE,EAAE,OAAO,CAAC,kBAAkB,CAAC;AAC/B,gBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC1B,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9F,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;YACnE,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,YAAA,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;SACrB;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aACpC;SACF;gBAAS;AACR,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB;KACF;AACD;;;;;AAKG;AACH,IAAA,+BAA+B,CAAC,KAA6C,EAAA;AAC3E,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC;QAC5E,MAAM,eAAe,GACnB,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC;AACzF,QAAA,IAAI,UAA0C,CAAC;AAC/C,QAAA,IAAI,cAAwB,CAAC;AAC7B,QAAA,IAAI,eAAe,KAAK,OAAO,EAAE;AAC/B,YAAA,UAAU,GAAG,6BAA6B,CAAC,KAAK,CAAC;YACjD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,YAAA,cAAc,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACrC;aAAM;AACL,YAAA,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC;YACvD,cAAc,GAAG,KAAK,CAAC,QAAQ;iBAC5B,GAAG,CAAC,CAAC,IAAG;gBACP,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,gBAAA,IACE,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE;AACxB,oBAAA,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE;AACxB,oBAAA,CAAC,CAAC,KAAK,IAAI,cAAc,CAAC,MAAM;AAChC,oBAAA,CAAC,CAAC,MAAM,IAAI,cAAc,CAAC,OAAO,EAClC;oBACA,OAAO,CAAC,CAAC,IAAI,CAAC;iBACf;AACH,aAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAC,CAAC;SACpB;QAED,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;KAClF;IAED,MAAM,YAAY,CAAC,UAA4B,EAAA;AAC7C,QAAA,IAAI,iBAA+C,CAAC;AACpD,QAAA,IAAI,UAAU,KAAK,MAAM,EAAE;YACzB,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;SAC1D;aAAM;YACL,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;SAC1D;AACD,QAAA,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;KAC1C;AAED;;;;;;AAMG;AACH,IAAA,uBAAuB,CACrB,KAA6C,EAC7C,UAA0C,EAC1C,eAAmE,EACnE,cAAwB,EAAA;AAExB,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAC3B,MAAM,cAAc,GAA6B,KAAK,CACpD,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAC5C,IAAI,CACL,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CACd,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC9C,eAAe,EACf,cAAc,CACf,CAAC;KACH;AAED;;AAEG;AACH,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;AAE7D,QAAA,IAAI,CAAC,uBAAuB,CAAC,aAAa,GAAG;AAC3C,YAAA,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YACvB,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AAC3C,YAAA,OAAO,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;SACxE,CAAC;QAEF,IAAI,WAAW,EAAE;YACf,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAC3C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CACvC,kFAAkF,EAClF,EAAE,GAAG,EAAE,CACR,CAAC;AACF,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACzB;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,MAAM,eAAe,GAAA;QACnB,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpF,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAClC;AACD,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;KAC9B;AAED,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;KACrC;AAED;;;AAGG;IACH,MAAM,UAAU,CAAC,MAAoB,EAAA;AACnC,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAC5D,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAChD,CAAC;QACF,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;SACR;QACD,MAAM,IAAI,CAAC,SAAS,CAAC;AACnB,YAAA,GAAG,SAAS;YACZ,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;AAC5F,SAAA,CAAC,CAAC;KACJ;AAED;;;AAGG;IACH,MAAM,SAAS,CAAC,QAAqC,EAAA;QACnD,MAAM,oBAAoB,GAAG,QAAQ;AACnC,cAAE,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;cAC/C,QAAQ,CAAC;QAEb,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AACzF,QAAA,MAAM,YAAY,GAAmC;YACnD,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,GAAG,aAAa;AACrD,YAAA,QAAQ,EAAE,oBAAoB;SAC/B,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE;AACrD,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,cAAc,EAAE,aAAa;YAC7B,YAAY;AACZ,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC,OAAgC,CAAC;AAEpC,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE;gBACnC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,EAAE,CAAC;aACrC;YACD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvD,YAAA,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;;;YAGnC,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,QAAQ,GAAG;AACf,oBAAA,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,QAAQ;AAClD,oBAAA,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS;iBAC1B,CAAC;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,6BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE;oBACnF,SAAS;AACV,iBAAA,CAAC,CAAC;aACJ;YACD,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;QAAC,OAAO,EAAE,EAAE;;SAEZ;KACF;AAED,IAAA,MAAM,sBAAsB,GAAA;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;AAEvD,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,GAAG;AACzC,YAAA,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,aAAa,CAAC;SAC7E,CAAC;QACF,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxB,IAAI,EAAE,6BAA6B,CAAC,OAAO;AAC3C,YAAA,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ;AACxC,YAAA,aAAa,EAAE,EAAE;AAClB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,+BAA+B,EAAE,CAAC;KAC9D;AAED,IAAA,MAAM,cAAc,CAAC,YAAY,GAAG,KAAK,EAAA;QACvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AACvD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,EAAE,CAAC;SACxC;QACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,EAAE;;YAEjB,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;SACnD;KACF;AAED;;;;AAIG;IACH,MAAM,YAAY,CAAC,MAAM,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,QAAA,MAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC;QAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACjC;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;SAC7C;KACF;AAED;;;;AAIG;IACH,MAAM,YAAY,CAAC,MAAoB,EAAA;AACrC,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtD,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;YAC7B,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;;YAG7E,MAAM,KAAK,GAAG,OAAO,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9E,YAAA,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;AAEf,YAAA,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAK,CAAC,aAAa,EAAE,CAAC;YACtB,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,6BAA6B,CAAC,OAAO,EAAE,SAAS,EAAE;gBACpF,MAAM;AACP,aAAA,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;SAChC;KACF;AAED;;;AAGG;IACH,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;YACvC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;KACJ;AAED;;;AAGG;IACH,4BAA4B,GAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;YACvC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,MAAM,CAAC,eAAyB,EAAA;AACpC,QAAA,IAAI,CAAC,4BAA4B;YAC/B,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW;kBACzC,MAAM,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;kBAC5D,KAAK,CAAC;AACZ,QAAA,IAAI,CAAC,OAAO;AACV,YAAA,IAAI,CAAC,QAAQ;AACb,gBAAA,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW;iBAC3B,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,QAAA,MAAM,iBAAiB,GAAiC,SAAS,CAC/D,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,CAChC,CAAC;AACF,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,oBAAoB,EAAE,IAAI;AAC1B,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO;SAC3B,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS;AAClC,cAAE,IAAI,CAAC,+BAA+B,EAAE;cACtC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC;AAC9B,YAAA,QAAQ,EAAE,iBAAiB;AAC3B,YAAA,aAAa,EAAE,EAAE;AAClB,SAAA,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACnC;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnC;aAAM;AACL,YAAA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;SAC5B;KACF;IAED,MAAM,gBAAgB,CAAC,aAA+B,EAAA;AACpD,QAAA,IAAI,aAAa,EAAE,OAAO,EAAE;AAC1B,YAAA,MAAM,gBAAgB,GAAG;AACvB,gBAAA,oBAAoB,EAAE,IAAI;AAC1B,gBAAA,SAAS,EAAE,IAAI;gBACf,GAAG,aAAa,CAAC,OAAO;aACzB,CAAC;AACF,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACtD;AAAM,aAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG;AAC7B,gBAAA,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;gBAC/B,GAAG,aAAa,CAAC,aAAa;aAC/B,CAAC;SACH;KACF;IAED,MAAM,eAAe,CAAC,WAA0C,EAAA;AAC9D,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC;AACtB,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;KACrB;AAEO,IAAA,MAAM,UAAU,CACtB,iBAA+C,EAC/C,eAAe,GAAG,KAAK,EAAA;AAEvB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,MAAM,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,IAAG;YAClD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;aAChC;YACD,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,YAAY,EAAE;AAC/C,oBAAA,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI;AAC9C,iBAAA,CAAC,CAAC;aACJ;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAC7C,CAAC,CACH,CAAC;KACH;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAI;AACnE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;YACjE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3E,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE;gBAC5D,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;aAClC;YACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;gBACnC,IAAI,CAAC,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;aACvE;AACD,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAClF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,SAAC,CAAC,CAAC;KACJ;AAED;;;AAGG;AACK,IAAA,yBAAyB,CAAC,SAA2B,EAAE,KAAa,EAAE,IAAY,EAAA;QACxF,IAAI,IAAI,KAAK,iBAAiB,IAAI,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;AACjE,YAAA,SAAS,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACvC;KACF;IAEO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB;AACxC,aAAA,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC;aACvE,SAAS,CAAC,EAAE,IAAG;YACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpB,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,kBAAkB,CAAC,MAAc,EAAA;QACvC,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAC/C,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CACjD,CAAC;QACF,MAAM,aAAa,GAAG,cAAc;AAClC,cAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;AACvB,cAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC3D,OAAO;AACL,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;AACpD,YAAA,GAAG,aAAa;SACjB,CAAC;KACH;AAEO,IAAA,iBAAiB,CAAC,KAA8B,EAAA;QACtD,OAAO;AACL,YAAA,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,qCAAqC,EAAE,4BAA4B,CAAC,CAAC;YAC1F,GAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAa;SACxF,CAAC;KACH;IAEO,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAEO,+BAA+B,GAAA;QACrC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,6BAA6B,EAAE,EAAE;YACjE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,CAAC,WAAW,EAAE,CAAC;SAC1E;AACD,QAAA,MAAM,4BAA4B,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,IAAG;AACjF,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;AAClC,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;AAC3C,YAAA,OAAO,EACL,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE;gBACtD,IAAI,CAAC,UAAU,EAAE,SAAS,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAC1E,CAAC;AACJ,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,4BAA4B,EAAE;YACjC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,CAAC,eAAe,EAAE,CAAC;SAC9E;AACD,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACxB;AAEO,IAAA,WAAW,CACjB,KAAwD,EACxD,eAAmE,EACnE,cAAwB,EAAA;QAExB,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;KACzE;IAEO,yBAAyB,CAC/B,eAAmE,EACnE,cAAwB,EAAA;QAExB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;AAC3E,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE;AACnC,YAAA,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;SACrC;AACD,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;AACzB,YAAA,IAAI,eAAe,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE;;gBAEhE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE;oBAChC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACnC;gBACD,IAAI,aAAa,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE;oBACrC,OAAO,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACzC;aACF;iBAAM,IACL,CAAC,eAAe,KAAK,QAAQ,IAAI,eAAe,KAAK,aAAa;gBAClE,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAC3B;;aAED;iBAAM;gBACL,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;aAC1C;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,aAAa,CAAC;KACtB;AAEO,IAAA,4BAA4B,CAClC,WAAoD,EAAA;QAEpD,MAAM,kBAAkB,GAAiD,EAAE,CAAC;AAC5E,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACtD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACnB,SAAS;aACV;YACD,kBAAkB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;SAC5E;AACD,QAAA,OAAO,kBAAkB,CAAC;KAC3B;AAEO,IAAA,MAAM,eAAe,GAAA;AAC3B,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtE,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;AACjF,YAAA,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,gBAAgB;AACnE,YAAA,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;AACnD,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YACd,MAAM,EAAE,GAAG,aAAa,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;AACxC,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,WAAW;AAC/D,YAAA,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,GAAG,WAAW;AAC5D,YAAA,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,WAAW;YACnE,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;AACtF,YAAA,4BAA4B,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AAC5C,kBAAE,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,aAAa,CAAE,CAAA;AAClC,kBAAE,WAAW;YACf,wBAAwB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;YAC7F,0BAA0B,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;AAC1F,YAAA,gCAAgC,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AAChD,kBAAE,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA,CAAA,EAAI,aAAa,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;AACnE,kBAAE,WAAW;AACf,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI;YAChF,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;AACpE,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,MAAM,aAAa,GAAA;AACzB,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtE,QAAA,MAAM,aAAa,GACjB,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AACrD,YAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,YAAA,MAAM,CAAC;AAET,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAChC,IAAI,CAAC,QAAQ;AACX,cAAE,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;cAC3C,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAClD;AACE,YAAA,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc;AACjE,YAAA,MAAM,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;AACjD,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YACd,MAAM,EAAE,GAAG,aAAa,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;AACxC,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,WAAW;AAC/D,YAAA,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,GAAG,WAAW;AAC5D,YAAA,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,WAAW;YACnE,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;AACtF,YAAA,4BAA4B,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AAC5C,kBAAE,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,aAAa,CAAE,CAAA;AAClC,kBAAE,WAAW;AACf,YAAA,wBAAwB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AACxC,kBAAE,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;AACpC,kBAAE,WAAW;YACf,0BAA0B,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA,GAAG,WAAW;AAC1F,YAAA,gCAAgC,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AAChD,kBAAE,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA,CAAA,EAAI,aAAa,CAAI,CAAA,EAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAE,CAAA;AACnE,kBAAE,WAAW;AACf,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI;YAChF,OAAO,EAAE,IAAI,CAAC,QAAQ;AACpB,kBAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;kBAC3C,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/D,SAAA,CACF,CAAC;KACH;AAEO,IAAA,2BAA2B,CAAC,GAAmB,EAAA;QACrD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACpF,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;SACjC;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAGa,IAAN,MAAM,mBAAmB,CAAC,GAAW,EAAA;QAC3C,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;AACrD,cAAE,GAAG;cACH,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KAC9C;AA3tBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,+JA8D1B,wBAAwB,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAR,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAiB,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAjB,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAuB,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AA9DvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAiCzB,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,wBAAwB,EACxB,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,yBAAyB,8DCxGtC,4hHA6GA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,aAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAwB,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAzB,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAW,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;AD6qBgB,UAAA,CAAA;AADb,IAAA,OAAO,EAAE;;;;AAQT,CAAA,EAAA,yBAAA,CAAA,SAAA,EAAA,qBAAA,EAAA,IAAA,CAAA,CAAA;4FA3tBU,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAVrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAE3B,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE,CAAA;;AAEN,IAAA,CAAA;AACD,wBAAA,KAAK,EAAE,8BAA8B;AACtC,qBAAA,EAAA,QAAA,EAAA,4hHAAA,EAAA,CAAA;;0BAgEE,MAAM;2BAAC,wBAAwB,CAAA;+PA5DlC,IAAI,EAAA,CAAA;sBADH,KAAK;gBAGN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAGN,OAAO,EAAA,CAAA;sBADN,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAIN,cAAc,EAAA,CAAA;sBADb,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,SAAS,CAAA;gBAGhB,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAGN,qBAAqB,EAAA,CAAA;sBADpB,KAAK;gBAGG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAKN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,KAAK,EAAA,CAAA;sBADJ,WAAW;uBAAC,OAAO,CAAA;gBAGmC,gBAAgB,EAAA,CAAA;sBAAtE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAErD,gBAAgB,EAAA,CAAA;sBADf,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBA+ChD,mBAAmB,EAAA,CAAA;sBADxB,YAAY;uBAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAooBjC,mBAAmB,EAAA,EAAA,EAAA,EAAA,CAAA;;ME5wBtB,yBAAyB,CAAA;IAOpC,WACU,CAAA,QAAyB,EAGzB,mBAA2C,EAAA;QAH3C,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QAGzB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAwB;QAVrD,IAAc,CAAA,cAAA,GAAG,4BAA4B,CAAC;QAC9C,IAAa,CAAA,aAAA,GAAG,eAAe,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAW,OAAO,CAAC,MAAM,CAAC,CAAC;AAUlC,QAAA,MAAM,MAAM,GAAG;YACb,GAAG,IAAI,CAAC,mBAAmB;YAC3B,aAAa,EAAE,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB;YAC3E,YAAY,EAAE,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,yBAAyB;SACnF,CAAC;AACF,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;KACnC;IAED,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;KAC9C;AAEO,IAAA,oBAAoB,CAAC,MAA8B,EAAA;QACzD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;AAED,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;SAC3C;AAED,QAAA,IAAI,MAAM,CAAC,cAAc,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;SAC7C;AAED,QAAA,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE;YAC1D,IAAI,CAAC,aAAa,GAAG,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAA,EACnF,IAAI,CAAC,aACP,CAAA,CAAE,CAAC;SACJ;AAED,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;SACnC;KACF;AA/CU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iDAU1B,6BAA6B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAV5B,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIzB,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBtC,4OAUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAb,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA4B,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA5B,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDIa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,4OAAA,EAAA,CAAA;;0BAY9B,QAAQ;;0BACR,MAAM;2BAAC,6BAA6B,CAAA;yCALvC,gBAAgB,EAAA,CAAA;sBADf,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MEU3C,6BAA6B,CAAA;AAUxC,IAAA,WAAA,CACU,KAAuB,EACvB,MAAc,EACd,uBAAgD,EAChD,gBAAkC,EAAA;QAHlC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;QACvB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAChD,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAb5C,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAEtB,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;KAYf;AAEJ,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjD,QAAA,MAAM,QAAQ,GAAY,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1E,QAAA,MAAM,OAAO,GAAY,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;AAC7F,QAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEnC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;QAC7D,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;SAC/C;KACF;AAED,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1D;AACD,QAAA,MAAM,OAAO,GAAqB;YAChC,OAAO,EAAE,IAAI,CAAC,kBAAkB;YAChC,WAAW,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;QAEF,MAAM,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;KAC5D;IAEO,MAAM,YAAY,CAAC,EAAU,EAAA;AACnC,QAAA,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;KACtD;AAEO,IAAA,MAAM,qBAAqB,GAAA;QACjC,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;QACxF,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC;AAE1F,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,oBAAoB,EAAE;AACpD,YAAA,IAAI,oBAAoB,KAAK,WAAW,CAAC,MAAM,EAAE;AAC/C,gBAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,qDAAqD,CAAC,CAAC;aACnF;AAAM,iBAAA,IAAI,oBAAoB,KAAK,WAAW,CAAC,KAAK,EAAE;AACrD,gBAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,mDAAmD,CAAC,CAAC;aACjF;AACD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,OAAO;SACR;aAAM,IAAI,eAAe,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzD,MAAM,mBAAmB,GACvB,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC;YACvE,IAAI,mBAAmB,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AAC/C,gBAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CACxB,wEAAwE,CACzE,CAAC;AACF,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,OAAO;aACR;SACF;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC5B;+GA5EU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAS,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA7B,6BAA6B,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAEJ,WAAW,EArBrC,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAEU,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBArBzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA;AACF,iBAAA,CAAA;8KAGkE,aAAa,EAAA,CAAA;sBAA7E,SAAS;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MCvB3C,yBAAyB,CAAA;AAA/C,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;KAwBnE;AAtBC,IAAA,GAAG,CAAC,WAA2B,EAAA;QAC7B,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,MAAM,IAAI,GACR,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO;AACtD,cAAE,WAAW,CAAC,QAAQ,CAAC,IAAI;cACzB,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvC,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,QAAQ,GACZ,WAAW;AACX,YAAA,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,aAAa;AACnC,YAAA,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;QAE7C,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,CAAC,EAAE;AACb,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,QAAQ,EAAE,6BAA6B;AACvB,aAAA,CAAC,CAAC;SACrB;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;AACF,CAAA;AAKK,MAAO,+BAAgC,SAAQ,yBAAyB,CAAA;AAH9E,IAAA,WAAA,GAAA;;AAIY,QAAA,IAAA,CAAA,aAAa,GAA2C,WAAW,CAAC,MAAM,CAAC;AACtF,KAAA;+GAFY,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cAF9B,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;AAQK,MAAO,8BAA+B,SAAQ,yBAAyB,CAAA;AAH7E,IAAA,WAAA,GAAA;;AAIY,QAAA,IAAA,CAAA,aAAa,GAA2C,WAAW,CAAC,KAAK,CAAC;AACrF,KAAA;+GAFY,8BAA8B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cAF7B,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCtCY,oBAAoB,CAAA;AAC/B,IAAA,WAAA,CAAoB,uBAAgD,EAAA;QAAhD,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;KAAI;AAExE,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC5D,YAAA,oBAAoB,CAAC,MAAM;AAC3B,YAAA,oBAAoB,CAAC,IAAI;AAC1B,SAAA,CAAC,CAAC;KACJ;+GARU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA,EAAA;;4FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCCrB,mBAAmB,CAAA;AAC9B,IAAA,WAAA,CAAoB,uBAAgD,EAAA;QAAhD,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;KAAI;AAExE,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC5D,YAAA,oBAAoB,CAAC,KAAK;AAC1B,YAAA,oBAAoB,CAAC,IAAI;AAC1B,SAAA,CAAC,CAAC;KACJ;+GARU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA,EAAA;;4FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACmClC,MAAM,aAAa,GAAG;AACpB,IAAA,eAAe,EAAE,IAAI;CACoB,CAAC;MAwC/B,sBAAsB,CAAA;AACjC,IAAA,OAAO,MAAM,CAAC,MAAA,GAAiC,EAAE,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE,sBAAsB;AAChC,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,wBAAwB;AACjC,oBAAA,QAAQ,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAAE;AAC1C,iBAAA;AACD,gBAAA,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC/B,aAAA;SACF,CAAC;KACH;+GAZU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBApC/B,2BAA2B;YAC3B,yBAAyB;YACzB,qBAAqB;YACrB,sBAAsB;YACtB,wBAAwB;YACxB,qBAAqB;YACrB,6BAA6B;YAC7B,8BAA8B;YAC9B,iCAAiC;YACjC,oCAAoC;YACpC,gCAAgC;YAChC,+BAA+B;AAC/B,YAAA,0BAA0B,aAG1B,UAAU;YACV,aAAa;YACb,aAAa;YACb,mBAAmB;AACnB,YAAA,kBAAkB,uDAKlB,yBAAyB;YACzB,qBAAqB;YACrB,wBAAwB;YACxB,0BAA0B,CAAA,EAAA,CAAA,CAAA,EAAA;AASjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAPtB,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,aAAa;AACxB,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAnBC,UAAU;YACV,aAAa;YACb,aAAa;YACb,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB,CAAC,OAAO,EAAE;YAC1B,cAAc,CAAC,OAAO,EAAE,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAef,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAtClC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,2BAA2B;wBAC3B,yBAAyB;wBACzB,qBAAqB;wBACrB,sBAAsB;wBACtB,wBAAwB;wBACxB,qBAAqB;wBACrB,6BAA6B;wBAC7B,8BAA8B;wBAC9B,iCAAiC;wBACjC,oCAAoC;wBACpC,gCAAgC;wBAChC,+BAA+B;wBAC/B,0BAA0B;AAC3B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,aAAa;wBACb,aAAa;wBACb,mBAAmB;wBACnB,kBAAkB;wBAClB,gBAAgB,CAAC,OAAO,EAAE;wBAC1B,cAAc,CAAC,OAAO,EAAE;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,yBAAyB;wBACzB,qBAAqB;wBACrB,wBAAwB;wBACxB,0BAA0B;AAC3B,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,aAAa;AACxB,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;;MAyCY,4BAA4B,CAAA;+GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YAxC5B,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;AAwCtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,EAtB5B,SAAA,EAAA;AACT,YAAA,SAAS,CAAC;AACR,gBAAA;AACE,oBAAA,IAAI,EAAE,wBAAwB;AAC9B,oBAAA,SAAS,EAAE,yBAAyB;oBACpC,WAAW,EAAE,CAAC,oBAAoB,CAAC;oBACnC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;oBACjF,OAAO,EAAE,WAAW,CAAC,MAAM;AAC5B,iBAAA;;AAED,gBAAA;oBACE,IAAI,EAAE,eAAe,CAAC,IAAI;AAC1B,oBAAA,SAAS,EAAE,yBAAyB;oBACpC,WAAW,EAAE,CAAC,iBAAiB,CAAC;oBAChC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;oBACjF,OAAO,EAAE,WAAW,CAAC,MAAM;AAC5B,iBAAA;aACF,CAAC;YACF,OAAO,CAAC,yBAAyB,EAAE,EAAE,YAAY,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;YACxF,aAAa,CAAC,+BAA+B,CAAC;AAC/C,SAAA,EAAA,OAAA,EAAA,CAtBS,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAwBrB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAzBxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA,SAAS,CAAC;AACR,4BAAA;AACE,gCAAA,IAAI,EAAE,wBAAwB;AAC9B,gCAAA,SAAS,EAAE,yBAAyB;gCACpC,WAAW,EAAE,CAAC,oBAAoB,CAAC;gCACnC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;gCACjF,OAAO,EAAE,WAAW,CAAC,MAAM;AAC5B,6BAAA;;AAED,4BAAA;gCACE,IAAI,EAAE,eAAe,CAAC,IAAI;AAC1B,gCAAA,SAAS,EAAE,yBAAyB;gCACpC,WAAW,EAAE,CAAC,iBAAiB,CAAC;gCAChC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;gCACjF,OAAO,EAAE,WAAW,CAAC,MAAM;AAC5B,6BAAA;yBACF,CAAC;wBACF,OAAO,CAAC,yBAAyB,EAAE,EAAE,YAAY,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;wBACxF,aAAa,CAAC,+BAA+B,CAAC;AAC/C,qBAAA;AACF,iBAAA,CAAA;;MA4BY,2BAA2B,CAAA;+GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAnE3B,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;AAmEtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAtB3B,SAAA,EAAA;AACT,YAAA,SAAS,CAAC;AACR,gBAAA;AACE,oBAAA,IAAI,EAAE,wBAAwB;AAC9B,oBAAA,SAAS,EAAE,yBAAyB;oBACpC,WAAW,EAAE,CAAC,mBAAmB,CAAC;oBAClC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;oBACjF,OAAO,EAAE,WAAW,CAAC,KAAK;AAC3B,iBAAA;;AAED,gBAAA;oBACE,IAAI,EAAE,eAAe,CAAC,IAAI;AAC1B,oBAAA,SAAS,EAAE,yBAAyB;oBACpC,WAAW,EAAE,CAAC,iBAAiB,CAAC;oBAChC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;oBACjF,OAAO,EAAE,WAAW,CAAC,KAAK;AAC3B,iBAAA;aACF,CAAC;YACF,OAAO,CAAC,wBAAwB,EAAE,EAAE,YAAY,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;YACvF,aAAa,CAAC,8BAA8B,CAAC;AAC9C,SAAA,EAAA,OAAA,EAAA,CAtBS,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAwBrB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAzBvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA,SAAS,CAAC;AACR,4BAAA;AACE,gCAAA,IAAI,EAAE,wBAAwB;AAC9B,gCAAA,SAAS,EAAE,yBAAyB;gCACpC,WAAW,EAAE,CAAC,mBAAmB,CAAC;gCAClC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;gCACjF,OAAO,EAAE,WAAW,CAAC,KAAK;AAC3B,6BAAA;;AAED,4BAAA;gCACE,IAAI,EAAE,eAAe,CAAC,IAAI;AAC1B,gCAAA,SAAS,EAAE,yBAAyB;gCACpC,WAAW,EAAE,CAAC,iBAAiB,CAAC;gCAChC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;gCACjF,OAAO,EAAE,WAAW,CAAC,KAAK;AAC3B,6BAAA;yBACF,CAAC;wBACF,OAAO,CAAC,wBAAwB,EAAE,EAAE,YAAY,EAAE,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;wBACvF,aAAa,CAAC,8BAA8B,CAAC;AAC9C,qBAAA;AACF,iBAAA,CAAA;;;MC/HY,0BAA0B,CAAA;+GAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAVtB,YAAA,EAAA,CAAA,yBAAyB,CAD9B,EAAA,OAAA,EAAA,CAAA,UAAU,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;AAWjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAT1B,SAAA,EAAA;YACT,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACnF,YAAA,SAAS,CAAC;AACR,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,SAAS,EAAE,yBAAyB;gBACpC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;aAClF,CAAC;SACH,EATS,OAAA,EAAA,CAAA,UAAU,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAWjC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAZtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,sBAAsB,CAAC;oBAC7C,YAAY,EAAE,CAAC,yBAAyB,CAAC;AACzC,oBAAA,SAAS,EAAE;wBACT,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACnF,wBAAA,SAAS,CAAC;AACR,4BAAA,IAAI,EAAE,EAAE;AACR,4BAAA,SAAS,EAAE,yBAAyB;4BACpC,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;yBAClF,CAAC;AACH,qBAAA;AACF,iBAAA,CAAA;;MAMY,sBAAsB,CAAA;AACjC,IAAA,OAAO,MAAM,CAAC,MAAA,GAAiC,EAAE,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE,sBAAsB;AAChC,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,6BAA6B;AACtC,oBAAA,QAAQ,EAAE,MAAM;AACjB,iBAAA;AACF,aAAA;SACF,CAAC;KACH;+GAXU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EALtB,OAAA,EAAA,CAAA,0BAA0B,EAGC,4BAA4B,EAAE,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;AAEpF,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAFvB,OAAA,EAAA,CAAA,0BAA0B,EAAE,4BAA4B,EAAE,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAEpF,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,0BAA0B,EAAE,4BAA4B,EAAE,2BAA2B,CAAC;AACjG,iBAAA,CAAA;;;MCZY,4BAA4B,CAAA;AA8QvC,IAAA,WAAA,CACU,MAAsB,EACtB,aAA4B,EAC5B,gBAAkC,EAClC,gBAAkC,EAAA;QAHlC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;QACtB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAC5B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAjR5C,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;QAEjB,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AAQnB,QAAA,IAAA,CAAA,mBAAmB,GAAG;AACpB,YAAA;AACE,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;AAC/B,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,OAAO,CAAC,0BAA0B,CAAC;AAC1C,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,6BAA6B,EAAE,CAAC;AAChC,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,QAAQ,EAAE,aAAa;AACvB,4BAAA,MAAM,EAAE,OAAO;4BACf,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC;AACtD,4BAAA,IAAI,EAAE,GAAG;AACT,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AACpD,4BAAA,IAAI,EAAE,KAAK;AACX,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,uBAAuB;AACjC,4BAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AACpD,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,UAAU;4BAClB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC;AACrD,4BAAA,IAAI,EAAE,GAAG;AACT,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,uBAAuB;AACjC,4BAAA,MAAM,EAAE,QAAQ;4BAChB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACvD,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AACpD,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AACpD,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AACpD,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AACpD,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,KAAK;4BACb,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC;AACnD,4BAAA,IAAI,EAAE,GAAG;AACT,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,oBAAoB;AAC9B,4BAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC;AACpD,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,uBAAuB;AACjC,4BAAA,MAAM,EAAE,UAAU;4BAClB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACzD,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,QAAQ,EAAE,uBAAuB;AACjC,4BAAA,MAAM,EAAE,OAAO;4BACf,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC;AACrD,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACF,qBAAA;AACD,oBAAA,mBAAmB,EAAE;AACnB,wBAAA;AACE,4BAAA,KAAK,EAAE,oBAAoB;AAC3B,4BAAA,YAAY,EAAE,OAAO;AACrB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,OAAO,EAAE;AACP,gCAAA,IAAI,EAAE,oBAAoB;AAC3B,6BAAA;AACD,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACD,wBAAA;AACE,4BAAA,KAAK,EAAE,yBAAyB;AAChC,4BAAA,YAAY,EAAE,OAAO;AACrB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,OAAO,EAAE;AACP,gCAAA,IAAI,EAAE,yBAAyB;AAChC,6BAAA;AACD,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;AAC7B,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE;AACP,wBAAA,UAAU,EAAE;AACV,4BAAA;AACE,gCAAA,EAAE,EAAE,eAAe;AACnB,gCAAA,QAAQ,EAAE,IAAI;gCACd,OAAO,EAAE,CAAC,IAAI,CAAC;AACf,gCAAA,IAAI,EAAE,QAAQ;AACd,gCAAA,KAAK,EAAE,IAAI;AACZ,6BAAA;AACD,4BAAA;AACE,gCAAA,EAAE,EAAE,iBAAiB;AACrB,gCAAA,QAAQ,EAAE,IAAI;gCACd,OAAO,EAAE,CAAC,MAAM,CAAC;AACjB,gCAAA,IAAI,EAAE,QAAQ;AACd,gCAAA,KAAK,EAAE,MAAM;AACd,6BAAA;AACD,4BAAA;AACE,gCAAA,EAAE,EAAE,iBAAiB;AACrB,gCAAA,QAAQ,EAAE,IAAI;gCACd,OAAO,EAAE,CAAC,MAAM,CAAC;AACjB,gCAAA,IAAI,EAAE,QAAQ;AACd,gCAAA,KAAK,EAAE,MAAM;AACd,6BAAA;AACD,4BAAA;AACE,gCAAA,EAAE,EAAE,wBAAwB;AAC5B,gCAAA,QAAQ,EAAE,IAAI;gCACd,OAAO,EAAE,CAAC,aAAa,CAAC;AACxB,gCAAA,IAAI,EAAE,QAAQ;AACd,gCAAA,KAAK,EAAE,cAAc;AACtB,6BAAA;AACD,4BAAA;AACE,gCAAA,EAAE,EAAE,yBAAyB;AAC7B,gCAAA,QAAQ,EAAE,IAAI;gCACd,OAAO,EAAE,CAAC,cAAc,CAAC;AACzB,gCAAA,IAAI,EAAE,QAAQ;AACd,gCAAA,KAAK,EAAE,eAAe;AACvB,6BAAA;AACF,yBAAA;AACD,wBAAA,kCAAkC,EAAE,KAAK;wBACzC,wBAAwB,EAAE,CAAC,OAAO,CAAC;AACpC,qBAAA;AACF,iBAAA;AACD,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC;AACzC,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE;AACP,wBAAA,SAAS,EAAE,cAAc;AACzB,wBAAA,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC5B,wBAAA,MAAM,EAAE;AACN,4BAAA,MAAM,EAAE,IAAI;AACZ,4BAAA,YAAY,EAAE,KAAK;AACnB,4BAAA,OAAO,EAAE,KAAK;AACf,yBAAA;AACD,wBAAA,KAAK,EAAE,EAAE;AACV,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,6BAA6B;AACnC,gBAAA,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC;AAClC,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACD,YAAA;AACE,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC;AAC1B,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,EAAE;AACX,aAAA;SACU,CAAC;KAOV;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;aAC/C,IAAI,CACH,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,KAAI;AACtB,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACrE,YAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,aAAa,GAAG,CAAA,EAAG,WAAW,CAAC,EAAE,cAAc,CAAC;AACvD,SAAC,CAAC,CACH;AACA,aAAA,SAAS,CAAC,OAAM,IAAI,KAAG;AACtB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAmB,CAAC;AAC1C,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;aACtD,IAAI,CACH,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACxD,GAAG,CAAC,MAAM,IAAG;AACX,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;YAC1D,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,GAAG;oBACP,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;iBACd,CAAC;aACH;YACD,OAAO;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,MAAM,EAAE;oBACN,GAAG,MAAM,CAAC,MAAM;oBAChB,MAAM;AACP,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,EACF,OAAO,EAAE,CACV;AACA,aAAA,SAAS,CAAC,OAAM,IAAI,KAAG;AACtB,YAAA,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAChF,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB,SAAC,CAAC,CAAC;KACN;IAED,oBAAoB,CAAC,EAAmB,EAAE,IAAY,EAAA;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;;QAE9F,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;QAE1E,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KACpF;AAED,IAAA,MAAM,0BAA0B,CAAC,EAAmB,EAAE,OAAiB,EAAA;QACrE,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;AACvF,QAAA,MAAM,oBAAoB,GAAG,EAAE,IAC7B,qBAAqB,CAAC,IAAI,CACxB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,CAC3E,CAAC;AACJ,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,mBAAmB,CAAC,CAAC;AAC1E,QAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;KACtF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;KACxC;IAED,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC;KAC/C;+GAxVU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAsB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA3B,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA5B,4BAA4B,EAAA,QAAA,EAAA,qCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQ5B,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBtC,6WAcA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDCa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;+BACE,qCAAqC,EAAA,QAAA,EAAA,6WAAA,EAAA,CAAA;8KAY/C,gBAAgB,EAAA,CAAA;sBADf,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;MEA5C,yBAAyB,CAAA;+GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iBAfrB,4BAA4B,CAAA,EAAA,OAAA,EAAA,CACjC,YAAY,EAAE,UAAU,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;AAc/C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EAZzB,SAAA,EAAA;AACT,YAAA,SAAS,CAAC;gBACR,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,SAAS,EAAE,4BAA4B;AACvC,gBAAA,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;AACtB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE,UAAU;gBAChB,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;aAClF,CAAC;AACH,SAAA,EAAA,OAAA,EAAA,CAZS,YAAY,EAAE,UAAU,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAc/C,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAhBrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,4BAA4B,CAAC;AAC5C,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,sBAAsB,CAAC;AAC3D,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA,SAAS,CAAC;4BACR,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,4BAAA,IAAI,EAAE,aAAa;AACnB,4BAAA,SAAS,EAAE,4BAA4B;AACvC,4BAAA,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;AACtB,4BAAA,QAAQ,EAAE,KAAK;AACf,4BAAA,IAAI,EAAE,UAAU;4BAChB,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;yBAClF,CAAC;AACH,qBAAA;AACF,iBAAA,CAAA;;;MCZY,sCAAsC,CAAA;AAwBjD,IAAA,WAAA,CAAoB,aAA4B,EAAA;QAA5B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAe;QAvBhD,IAAO,CAAA,OAAA,GAAG,EAAE,CAAC;QACb,IAAa,CAAA,aAAA,GAAG,UAAU,CAAC;AAC3B,QAAA,IAAA,CAAA,cAAc,GAAG;AACf,YAAA;AACE,gBAAA,IAAI,EAAE,iCAAiC;AACvC,gBAAA,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC;AAC7B,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;AAC/B,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,EAAE,EAAE,CAAC;AACL,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,EAAE;AACX,aAAA;SACU,CAAC;KAIsC;IAEpD,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAM,MAAM,KAAG;YACrC,MAAM,IAAI,CAAC,aAAa;iBACrB,SAAS,CAAC,MAAM,CAAC;AACjB,iBAAA,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACrE,SAAC,CAAC,CAAC;KACJ;IAED,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC;KAC/C;+GApCU,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAb,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAtC,sCAAsC,EAAA,QAAA,EAAA,sCAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAqBtC,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BtC,yOAUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,yBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDAa,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAJlD,SAAS;+BACE,sCAAsC,EAAA,QAAA,EAAA,yOAAA,EAAA,CAAA;+EAyBhD,gBAAgB,EAAA,CAAA;sBADf,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MEX3C,mCAAmC,CAAA;+GAAnC,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,iBAZ/B,sCAAsC,CAAA,EAAA,OAAA,EAAA,CAC3C,YAAY,EAAE,UAAU,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;AAW/C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,EATnC,SAAA,EAAA;AACT,YAAA,SAAS,CAAC;AACR,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,SAAS,EAAE,sCAAsC;gBACjD,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;aAClF,CAAC;YACF,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACpF,SAAA,EAAA,OAAA,EAAA,CATS,YAAY,EAAE,UAAU,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAW/C,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAb/C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,sCAAsC,CAAC;AACtD,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,sBAAsB,CAAC;AAC3D,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE;AACT,wBAAA,SAAS,CAAC;AACR,4BAAA,IAAI,EAAE,EAAE;AACR,4BAAA,SAAS,EAAE,sCAAsC;4BACjD,aAAa,EAAE,CAAC,CAAC,SAAiC,KAAK,SAAS,CAAC,aAAa,EAAE,CAAC;yBAClF,CAAC;wBACF,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACpF,qBAAA;AACF,iBAAA,CAAA;;;MCdY,2BAA2B,CAAA;AACtC,IAAA,WAAA,CAAmB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;IAErC,GAAG,GAAA;QACD,MAAM,IAAI,GAAU,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC;AACR,gBAAA,IAAI,EAAE,mCAAmC;AACzC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC;AAC3B,aAAA,CAAC,CAAC;SACX;AAED,QAAA,OAAO,IAAI,CAAC;KACb;+GAfU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAA3B,2BAA2B,EAAA,CAAA,CAAA,EAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;;;ACGL,MAAO,yBAA0B,SAAQ,UAAU,CAAA;AACvD,IAAA,WAAA,CAAY,mBAAkC,EAAA;QAC5C,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;AAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE5C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI,CAAC,eAAe,GAAG;YACrB,MAAM,EAAE,iCAAiC,CAAC;AACxC,gBAAA,GAAG,EAAE,kBAAkB;AACvB,gBAAA,KAAK,EAAE,OAAO,CAAC,yCAAyC,CAAC;AACzD,gBAAA,OAAO,EAAE,OAAO,CAAC,8BAA8B,CAAC;AAChD,gBAAA,OAAO,EAAE,OAAO,CAAC,+BAA+B,CAAC;AACjD,gBAAA,WAAW,EAAE,gBAAgB;aAC9B,CAAC;AACF,YAAA,SAAS,EAAE,CAAC,KAAU,KAAS;gBAC7B,MAAM,MAAM,GAAQ,EAAE,CAAC;AACvB,gBAAA,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE;AACjC,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC;iBACtD;AACD,gBAAA,OAAO,MAAM,CAAC;aACf;SACF,CAAC;KACH;AACF;;ACfK,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAY1D,IAAA,WAAA,CACY,SAA2B,EAC3B,sBAA8C,EAC9C,KAAmB,EACnB,gBAAkC,EAAA;QAE5C,KAAK,CAAC,sBAAsB,CAAC,CAAC;QALpB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;QAC9C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACnB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAd9C,QAAA,IAAA,CAAA,SAAS,GAAG;AACV,YAAA,QAAQ,EAAE;AACR,gBAAA,KAAK,EAAE;AACL,oBAAA,EAAE,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;oBAC9C,EAAE,KAAK,EAAE,+BAA+B,EAAE;AAC3C,iBAAA;AACF,aAAA;SACF,CAAC;QACM,IAAqB,CAAA,qBAAA,GAC3B,uFAAuF,CAAC;KAQzF;IAED,UAAU,GAAA;QACR,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,aAAa,EAAE,MAAM;AACtB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,aAAa,EAAE,OAAO;AACvB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC;AAC9B,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA;AACD,YAAA,IAAI,yBAAyB,EAAE;AAC/B,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC;AAC9B,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,aAAa,EAAE,OAAO;AACvB,aAAA;SACF,CAAC;KACH;IAED,oBAAoB,GAAA;QAClB,OAAO;AACL,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,WAAW,EAAE,CAAC;SACf,CAAC;KACH;AAED,IAAA,MAAM,OAAO,CACX,OAAiB,EACjB,UAAsB,EACtB,IAAa,EAAA;AAEb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAE3D,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC3C;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,OAAO,CACL,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,qBAAqB;AACjC,YAAA,iBAAiB,EAAE,IAAI;AACxB,SAAA,CAAC,EACF,MAAM,CAAC,aAAa,CAAC;KACxB;AAED,IAAA,MAAM,MAAM,CAAC,SAAwC,EAAE,SAAqB,EAAA;AAC1E,QAAA,IAAI;YACF,MAAM,GAAG,GAAW,OAAO,CACzB,CAAA;AAC2B,kCAAA,CAAA,CAC5B,CAAC;AAEF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CACtB,OAAO,CAAC,kBAAkB,CAAC,EAC3B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE;AACjC,gBAAA,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;AAC3C,gBAAA,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,eAAe;AACpD,aAAA,CAAC,EACF,MAAM,CAAC,MAAM,EACb;AACE,gBAAA,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;AACrB,gBAAA,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;AAC1B,aAAA,CACF,CAAC;YACF,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACvC,YAAA,SAAS,EAAE,CAAC;SACb;QAAC,OAAO,EAAE,EAAE;;SAEZ;KACF;AAEO,IAAA,UAAU,CAChB,OAAiB,EACjB,UAAsB,EACtB,IAAa,EAAA;QAEb,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACnC,YAAA,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;AACnC,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,iBAAiB,EAAE,IAAI;SACxB,CAAC;KACH;AAEO,IAAA,cAAc,CAAC,OAAiB,EAAA;QACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;KAC/C;+GA7HU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA/B,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACfK,MAAO,yBAA0B,SAAQ,oBAAoB,CAAA;AACjE,IAAA,WAAA,CAAY,mBAAkC,EAAA;QAC5C,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;AACzB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;KACnC;AACF;;ACIK,MAAO,8BAA+B,SAAQ,eAAe,CAAA;IACjE,WACY,CAAA,gBAAkC,EAClC,sBAA8C,EAAA;QAExD,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAHpB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAwB;KAGzD;IAED,iBAAiB,CAAC,gBAAgB,GAAG,IAAI,EAAA;AACvC,QAAA,OAAO,gBAAgB;AACrB,cAAE;AACE,gBAAA,IAAI,yBAAyB,EAAE;AAC/B,gBAAA,IAAI,oBAAoB,EAAE;AAC1B,gBAAA,IAAI,qBAAqB,EAAE;AAC3B,gBAAA,IAAI,gCAAgC,EAAE;AACvC,aAAA;AACH,cAAE;AACE,gBAAA,IAAI,yBAAyB,EAAE;AAC/B,gBAAA,IAAI,oBAAoB,EAAE;AAC1B,gBAAA,IAAI,gCAAgC,EAAE;aACvC,CAAC;KACP;AAED,IAAA,MAAM,OAAO,CAAC,OAAiB,EAAE,UAAsB,EAAE,KAAA,GAAa,EAAE,EAAE,IAAI,GAAG,IAAI,EAAA;AACnF,QAAA,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC;AACpD,YAAA,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5C;IAED,MAAM,QAAQ,CAAC,OAAiB,EAAE,UAAsB,EAAE,KAAa,GAAA,EAAE,EAAE,IAAA,GAAe,IAAI,EAAA;AAC5F,QAAA,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC;AACpD,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,WAAW,EAAE,CAAC;SACf,CAAC;AACF,QAAA,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;KACtE;AAED,IAAA,MAAM,QAAQ,CAAC,KAAA,GAAa,EAAE,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;AACzC,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,cAAc,EAAE,IAAI;SACrB,CAAC;AACF,QAAA,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;KACtE;AAEO,IAAA,UAAU,CAAC,OAAiB,EAAE,UAAsB,EAAE,KAAU,EAAE,IAAa,EAAA;QACrF,OAAO;YACL,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AACvD,YAAA,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;AACnC,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,cAAc,EAAE,IAAI;SACrB,CAAC;KACH;IAEO,oBAAoB,CAAC,OAAiB,EAAE,KAAU,EAAA;QACxD,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;KAC/C;+GAhEU,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cAF7B,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCSY,sCAAsC,CAAA;AAuBjD,IAAA,WAAA,CACU,MAAc,EACd,iBAAiD,EACjD,uBAAgD,EAAA;QAFhD,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAgC;QACjD,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAzB1D,IAAM,CAAA,MAAA,GAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,cAAc,GAAoB;AAChC,YAAA;AACE,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC;gBACzC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAsB,CAAC;AAC/D,gBAAA,IAAI,EAAE,aAAa;AACpB,aAAA;SACF,CAAC;AACF,QAAA,IAAA,CAAA,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,iBAAiB,GAAW,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvD,QAAA,IAAA,CAAA,UAAU,GAAG;AACX,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,WAAW,EAAE,CAAC;SACf,CAAC;AAIQ,QAAA,IAAA,CAAA,iBAAiB,GAAuB,IAAI,YAAY,EAAQ,CAAC;QAQzE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACpE;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACjF;IAED,MAAM,oBAAoB,CACxB,kBAAsC,EAAA;AAEtC,QAAA,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;AAEzE,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAC9C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAC5B,kBAAkB,CAAC,OAAO,EAC1B,kBAAkB,CAAC,UAAU,EAC7B,SAAS,EACT,kBAAkB,CAAC,UAAU,CAC9B,CACF,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,YAAY,CACrC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAC7B,kBAAkB,CAAC,OAAO,EAC1B,kBAAkB,CAAC,UAAU,EAC7B,SAAS,EACT,kBAAkB,CAAC,UAAU,CAC9B,CACF,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAE5E,QAAA,MAAM,oBAAoB,GAAG;YAC3B,GAAG;YACH,IAAI;YACJ,MAAM;YACN,YAAY;YACZ,IAAI;SACL,CAAC;AAEF,QAAA,OAAO,oBAAoB,CAAC;KAC7B;IAED,WAAW,CAAC,MAAM,EAAE,MAAc,EAAA;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC;KACpB;AAED,IAAA,gBAAgB,CAAC,GAAmB,EAAA;AAClC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAClE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,aAAa,CAAI,CAAA,EAAA,GAAG,CAAC,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,SAAS,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC,CAAC;KACtF;+GA/EU,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAgC,8BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,sKCrBnD,8sBAsBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA9B,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDDa,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAJlD,SAAS;+BACE,uCAAuC,EAAA,QAAA,EAAA,8sBAAA,EAAA,CAAA;wJAsBxC,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACI,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;;;MEhCI,uCAAuC,CAAA;AAIlD,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAH1C,IAAM,CAAA,MAAA,GAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;KAGN;AAG9C,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;KACF;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;+GAfU,uCAAuC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uCAAuC,8LCTpD,sYAaA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAkC,sCAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDJa,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBAJnD,SAAS;+BACE,wCAAwC,EAAA,QAAA,EAAA,sYAAA,EAAA,CAAA;iFAKzC,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAKN,mBAAmB,EAAA,CAAA;sBADlB,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEMjC,2BAA2B,CAAA;IA4BtC,WACU,CAAA,uBAAgD,EAChD,cAA8B,EAAA;QAD9B,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAyB;QAChD,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;AA7BxC,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACnC,QAAA,IAAA,CAAA,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,iBAAiB,GAAW,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAC3D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,CAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,oBAAoB,EAAE,CAAC;AACjE,QAAA,IAAA,CAAA,cAAc,GAAoB;AAChC,YAAA;gBACE,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5B,gBAAA,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC;gBAC/B,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAqC,CAAC;AACpF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,gBAAA,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC;gBACjC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAqC,CAAC;AACrE,aAAA;SACF,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAmB;AAC/B,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;AACF,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;QAMjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACpE;IAED,MAAM,MAAM,CAAC,SAAwC,EAAA;AACnD,QAAA,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;KACjF;AAED,IAAA,qBAAqB,CAAC,SAAwC,EAAA;AAC5D,QAAA,MAAM,YAAY,GAA+D,EAAE,SAAS,EAAE,CAAC;AAC/F,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE;AAChE,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,mBAAmB,EAAE,IAAI;YACzB,YAAY;AACb,SAAA,CAAC,CAAC;KACJ;IAED,WAAW,CAAC,MAAM,EAAE,MAAc,EAAA;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC;KACpB;IAED,MAAM,oBAAoB,CACxB,kBAAsC,EAAA;AAEtC,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAC9C,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAClC,kBAAkB,CAAC,OAAO,EAC1B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,UAAU,CAC9B,CACF,CAAC;AACF,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;AAC1C,QAAA,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEzE,OAAO;YACL,GAAG;YACH,IAAI;YACJ,MAAM;YACN,YAAY;YACZ,IAAI;SACL,CAAC;KACH;+GA1EU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAAlC,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,6DCrBxC,ozDA2DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,wBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDtCa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,ozDAAA,EAAA,CAAA;;;AEAnC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;MAkCtC,sBAAsB,CAAA;+GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBA9B/B,2BAA2B;YAC3B,uCAAuC;YACvC,sCAAsC,CAAA,EAAA,OAAA,EAAA,CAE9B,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA,EAAA;AA0B/E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAzBtB,SAAA,EAAA;YACT,OAAO,CAAC,2BAA2B,CAAC;AACpC,YAAA,SAAS,CAAC;AACR,gBAAA;AACE,oBAAA,IAAI,EAAE,sBAAsB;oBAC5B,UAAU,EAAE,CAAG,EAAA,sBAAsB,CAAkB,gBAAA,CAAA;AACvD,oBAAA,SAAS,EAAE,MAAM;AAClB,iBAAA;AACD,gBAAA;oBACE,IAAI,EAAE,CAAG,EAAA,sBAAsB,CAAkB,gBAAA,CAAA;AACjD,oBAAA,SAAS,EAAE,2BAA2B;AACvC,iBAAA;aACF,CAAC;YACF,aAAa,CACX,IAAI,aAAa,CAAC;AAChB,gBAAA,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC;AAChC,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACnC,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,SAAS,EAAE,kBAAkB;AAC9B,aAAA,CAAC,CACH;SACF,EAxBS,OAAA,EAAA,CAAA,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA,EAAA;;4FA0B/E,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhClC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,2BAA2B;wBAC3B,uCAAuC;wBACvC,sCAAsC;AACvC,qBAAA;oBACD,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,WAAW,CAAC;AAC3F,oBAAA,SAAS,EAAE;wBACT,OAAO,CAAC,2BAA2B,CAAC;AACpC,wBAAA,SAAS,CAAC;AACR,4BAAA;AACE,gCAAA,IAAI,EAAE,sBAAsB;gCAC5B,UAAU,EAAE,CAAG,EAAA,sBAAsB,CAAkB,gBAAA,CAAA;AACvD,gCAAA,SAAS,EAAE,MAAM;AAClB,6BAAA;AACD,4BAAA;gCACE,IAAI,EAAE,CAAG,EAAA,sBAAsB,CAAkB,gBAAA,CAAA;AACjD,gCAAA,SAAS,EAAE,2BAA2B;AACvC,6BAAA;yBACF,CAAC;wBACF,aAAa,CACX,IAAI,aAAa,CAAC;AAChB,4BAAA,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC;AAChC,4BAAA,IAAI,EAAE,sBAAsB;AAC5B,4BAAA,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACnC,4BAAA,IAAI,EAAE,aAAa;AACnB,4BAAA,eAAe,EAAE,KAAK;AACtB,4BAAA,SAAS,EAAE,kBAAkB;AAC9B,yBAAA,CAAC,CACH;AACF,qBAAA;AACF,iBAAA,CAAA;;;ACnDD;;AAEG;;;;"}
|